diff --git a/CHANGELOG.md b/CHANGELOG.md
index a2ca56e53d77a62e107e5de312cb06fc1256befd..37bea20164ffdaad59fa7e4714b15ab665835f14 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,16 @@
 
+## [3.57.0] - 2024-03-02
+
+## Add Features
+
+- New transformers set-toggle, set-set and set-remove [#162](https://gitlab.schukai.com/oss/libraries/javascript/monster/issues/162)
+- New CustomElement::[updaterTransformerMethodsSymbol]() method [#163](https://gitlab.schukai.com/oss/libraries/javascript/monster/issues/163)
+
+## Bug Fixes
+
+- you should be able to start the selection in select with the keyboard [#161](https://gitlab.schukai.com/oss/libraries/javascript/monster/issues/161)
+
+
 ## [3.56.1] - 2024-02-26
 
 ### Bug Fixes
diff --git a/playground/bind-with-datasource/index.html b/playground/bind-with-datasource/index.html
index 8a6302d740bf3269da2b5de9ff1bbcf5d0131a77..1c289f47eab28f9408294d272f7e04c8a902e734 100644
--- a/playground/bind-with-datasource/index.html
+++ b/playground/bind-with-datasource/index.html
@@ -159,6 +159,7 @@
                         <div class="buttons">
                             <monster-button
                                     data-monster-role="saveButton"
+                                    data-monster-option-actions-click="@@data-monster-call:overlay2.close"
                                     id="saveButton"
                                     style="display:block;width:200px;">save
                             </monster-button>
diff --git a/playground/bind-with-datasource/main.mjs b/playground/bind-with-datasource/main.mjs
index fff3f0eed1b8de5d039eab9a4c75a3aa8bea3d2e..340f425986a76acfff4fa475b679646214052418 100644
--- a/playground/bind-with-datasource/main.mjs
+++ b/playground/bind-with-datasource/main.mjs
@@ -60,9 +60,9 @@ let dataset1 = document.getElementById('dataset1');
 //console.log(data);
 
 let saveButton = document.getElementById('saveButton');
-saveButton.setOption('actions.click', () => {
-    dataset1.write();
-})
+// saveButton.setOption('actions.click', () => {
+//     dataset1.write();
+// })
 
 document.addEventListener("monster-button-clicked", (event) => {
     document.getElementById('overlay1').close();
diff --git a/playground/issues/142.html b/playground/issues/142.html
new file mode 100644
index 0000000000000000000000000000000000000000..00494223efed58994c66f7a5d0ca41139ed11902
--- /dev/null
+++ b/playground/issues/142.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0">
+
+    <title>Issues</title>
+    <script src="./142.js" type="module"></script>
+</head>
+<body>
+
+
+<main>
+
+    <h1>Issue 142</h1>
+    <p>
+        <a href="https://gitlab.schukai.com/oss/libraries/javascript/monster/-/issues/142" target="_blank">issues/142</a>
+    </p>
+
+    <div style="width: 450px; margin: 0 auto;">
+        <monster-select value="value1">
+            <div data-monster-value="value1">label-1</div>
+            <div data-monster-value="value2">label-2</div>
+            <div data-monster-value="value3">label-3</div>
+        </monster-select>
+    </div>
+    
+
+
+</main>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/playground/issues/142.js b/playground/issues/142.js
new file mode 100644
index 0000000000000000000000000000000000000000..6279359278290d3056df911ddfe3764c50ef79a4
--- /dev/null
+++ b/playground/issues/142.js
@@ -0,0 +1,12 @@
+import "../../source/components/style/property.pcss";
+import "../../source/components/style/normalize.pcss";
+import "../../source/components/style/color.pcss";
+import "../../source/components/style/link.pcss";
+import "../../source/components/style/button.pcss";
+import "../../source/components/style/theme.pcss";
+import "../../source/components/style/typography.pcss";
+import "./generic.pcss";
+import "../../source/components/form/confirm-button.mjs";
+import "../../source/components/form/select.mjs";
+
+
diff --git a/playground/issues/144.js b/playground/issues/144.js
index 9d39663f63de96e39c6c802c4b6c7fd2f7c7e16a..e5a15a5b85c997024b696187342996bac17a5c00 100644
--- a/playground/issues/144.js
+++ b/playground/issues/144.js
@@ -5,7 +5,7 @@ import "../../source/components/style/link.pcss";
 import "../../source/components/style/button.pcss";
 import "../../source/components/style/theme.pcss";
 import "../../source/components/style/typography.pcss";
-import "./144.pcss";
+import "./generic.pcss";
 import "../../source/components/form/confirm-button.mjs";
 
 
diff --git a/playground/issues/152.html b/playground/issues/152.html
new file mode 100644
index 0000000000000000000000000000000000000000..03ac7445527bc88edae8ccae0fcb877d28f7c1eb
--- /dev/null
+++ b/playground/issues/152.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0">
+
+    <title>Issues</title>
+    <script src="./152.js" type="module"></script>
+</head>
+<body>
+
+
+<main>
+
+    <h1>Issues 152</h1>
+    <p>
+        <a href="https://gitlab.schukai.com/oss/libraries/javascript/monster/-/issues/152" target="_blank">issues/152</a>
+    </p>
+
+
+    <div style="width: 250px;margin: 0 auto;">
+        <form id="form">
+            <label for="checkbox1"></label><input name="checkbox1" type="checkbox" id="checkbox1" value="yes">
+            <button type="button" id="button">Submit</button>
+
+        </form>
+    </div>
+
+
+</main>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/playground/issues/152.js b/playground/issues/152.js
new file mode 100644
index 0000000000000000000000000000000000000000..d3aa6dff1566a0102769af99efe09e577e6b7bad
--- /dev/null
+++ b/playground/issues/152.js
@@ -0,0 +1,26 @@
+import "../../source/components/style/property.pcss";
+import "../../source/components/style/normalize.pcss";
+// import "../../source/components/style/color.pcss";
+// import "../../source/components/style/link.pcss";
+// import "../../source/components/style/button.pcss";
+// import "../../source/components/style/theme.pcss";
+import "../../source/components/style/typography.pcss";
+// import "../../source/components/form/confirm-button.mjs";
+
+let form = document.getElementById("form");
+let checkbox = document.getElementById("checkbox1");
+console.log(checkbox);
+checkbox.defaultValue = "true1";
+checkbox.value = "true2";
+
+let button = document.getElementById("button");
+button.addEventListener("click", function() {
+    
+    let formData = new FormData(form);
+    for (let [key, value] of formData.entries()) {
+        console.log(key, value);
+    }
+    
+    
+    console.log("Button clicked");
+})
diff --git a/playground/issues/144.pcss b/playground/issues/generic.pcss
similarity index 100%
rename from playground/issues/144.pcss
rename to playground/issues/generic.pcss
diff --git a/source/monster.mjs b/source/monster.mjs
index 4c7cca3d7dd174ef9bf107aab3dcc19f07372d9a..9eb853d229da7086503b44c7ebf39e1669e7e1c0 100644
--- a/source/monster.mjs
+++ b/source/monster.mjs
@@ -1,3 +1,4 @@
+
 /**
  * Copyright schukai GmbH and contributors 2023. All Rights Reserved.
  * Node module: @schukai/monster
@@ -93,9 +94,11 @@ export * from "./components/datatable/datatable/header.mjs";
 export * from "./components/datatable/pagination.mjs";
 export * from "./components/datatable/util.mjs";
 export * from "./components/datatable/filter.mjs";
+export * from "./components/datatable/save-button.mjs";
 export * from "./components/datatable/dataset.mjs";
 export * from "./components/datatable/embedded-pagination.mjs";
 export * from "./components/datatable/status.mjs";
+export * from "./components/datatable/change-button.mjs";
 export * from "./components/datatable/constants.mjs";
 export * from "./components/datatable/stylesheet/select-filter.mjs";
 export * from "./components/datatable/stylesheet/datasource.mjs";
@@ -105,10 +108,12 @@ export * from "./components/datatable/stylesheet/filter-date-range.mjs";
 export * from "./components/datatable/stylesheet/datatable.mjs";
 export * from "./components/datatable/stylesheet/pagination.mjs";
 export * from "./components/datatable/stylesheet/filter.mjs";
+export * from "./components/datatable/stylesheet/save-button.mjs";
 export * from "./components/datatable/stylesheet/dataset.mjs";
 export * from "./components/datatable/stylesheet/embedded-pagination.mjs";
 export * from "./components/datatable/stylesheet/filter-controls-defaults.mjs";
 export * from "./components/datatable/stylesheet/status.mjs";
+export * from "./components/datatable/stylesheet/change-button.mjs";
 export * from "./components/datatable/stylesheet/filter-range.mjs";
 export * from "./components/state/log/entry.mjs";
 export * from "./components/state/state.mjs";
diff --git a/test/cases/data/transformer.mjs b/test/cases/data/transformer.mjs
index ff462268420172feb53809781c558c143d8ec19e..d5c26d0eb8348d5c2b6a1276660e86a1da060566 100644
--- a/test/cases/data/transformer.mjs
+++ b/test/cases/data/transformer.mjs
@@ -175,6 +175,22 @@ describe('Transformer', function () {
             ['index:a', new Map().set('a', 5), 5],
             ['substring:2:4', 'abcdefghijklmnop', 'cdef'],
             ['nop', 'abcdefghijklmnop', 'abcdefghijklmnop'],
+            ['set-toggle:c', 'a b c', 'a b'],
+            ['set-toggle:c', 'a b', 'a b c'],
+            ['set-set:c', 'a b', 'a b c'],
+            ['set-set:c', 'a b c', 'a b c'],
+            ['set-remove:c', 'a b c', 'a b'],
+            ['set-toggle:c:,', 'a,b,c', 'a,b'],
+            ['set-toggle:c:,', 'a,b', 'a,b,c'],
+            ['set-set:c:,', 'a,b', 'a,b,c'],
+            ['set-set:c:,', 'a,b,c', 'a,b,c'],
+            ['set-remove:c:,', 'a,b,c', 'a,b'],
+            ['set-toggle:c,d:,', 'a,b,c', 'a,b,d'],
+            ['set-toggle:c,d:,', 'a,b,c,d', 'a,b'],
+            ['set-toggle:c,d:,', 'a,b', 'a,b,c,d'],
+            ['set-set:c,d:,', 'a,b', 'a,b,c,d'],
+            ['set-set:c,d:,', 'a,b,c', 'a,b,c,d'],
+            ['set-remove:c:,', 'a,b,c', 'a,b'],
 
         ].forEach(function (data) {
 
diff --git a/test/util/jsdom.mjs b/test/util/jsdom.mjs
index e72bae7acb02f47adb3044b39ce56ee0bf2f8e2d..21fb893e1198469eae5f35b5294c97ab1203ad63 100644
--- a/test/util/jsdom.mjs
+++ b/test/util/jsdom.mjs
@@ -16,7 +16,6 @@ let JSDOMExport = null;
  */
 function initJSDOM(options) {
     if (typeof window === "object" && window['DOMParser']) return Promise.resolve();
-    
 
 
     const g = getGlobal();
@@ -40,8 +39,8 @@ function initJSDOM(options) {
 </body>`, options);
 
         g['window'] = window;
-
-        return new Promise(resolve =>
+        
+        return new Promise((resolve, reject) =>
             window.addEventListener("load", () => {
 
                 [
@@ -83,18 +82,19 @@ function initJSDOM(options) {
                     g[key] = window[key]
                 });
 
-
                 import("dom-storage").then(({default: Storage}) => {
-
-
                     g.localStorage = new Storage(null, {strict: true});
                     g.sessionStorage = new Storage(null, {strict: true});
 
                     window['localStorage'] = g.localStorage;
                     window['sessionStorage'] = g.sessionStorage;
-                });
 
-                resolve(g);
+                    resolve(g);
+                    
+                }).catch(e => {
+                    console.error(e);
+                    reject(e);
+                });
 
             })
         );
diff --git a/test/web/test.html b/test/web/test.html
index 34aa7579fca2430e3120aca965cc8d980d3b153c..7ee0752f752331b49ec049b424ca9a7668b9e33f 100644
--- a/test/web/test.html
+++ b/test/web/test.html
@@ -15,8 +15,8 @@
 </head>
 <body>
 <div id="headline" style="display: flex;align-items: center;justify-content: center;flex-direction: column;">
-  <h1 style='margin-bottom: 0.1em;'>Monster 3.55.3</h1>
-  <div id="lastupdate" style='font-size:0.7em'>last update Mi 24. Jan 19:51:51 CET 2024</div>
+  <h1 style='margin-bottom: 0.1em;'>Monster 3.56.1</h1>
+  <div id="lastupdate" style='font-size:0.7em'>last update Fr 1. Mär 18:37:59 CET 2024</div>
 </div>
 <div id="mocha-errors"
      style="color: red;font-weight: bold;display: flex;align-items: center;justify-content: center;flex-direction: column;margin:20px;"></div>
diff --git a/test/web/tests.js b/test/web/tests.js
index bb8ebc261151188d0d2cb86cec5f547e25cff901..4b41a78dc097f9f810808c091ae4586c943c2d7a 100644
--- a/test/web/tests.js
+++ b/test/web/tests.js
@@ -1,12 +1,4 @@
 try {
-try {
-try {
-try {
-try {
-try {
-try {
-try {
-try {
 (() => {
   var __create = Object.create;
   var __defProp = Object.defineProperty;
@@ -404,9 +396,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/flag.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/flag.js
   var require_flag = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/flag.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/flag.js"(exports, module) {
       module.exports = function flag(obj, key, value) {
         var flags = obj.__flags || (obj.__flags = /* @__PURE__ */ Object.create(null));
         if (arguments.length === 3) {
@@ -418,9 +410,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/test.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/test.js
   var require_test = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/test.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/test.js"(exports, module) {
       var flag = require_flag();
       module.exports = function test(obj, args) {
         var negate = flag(obj, "negate"), expr = args[0];
@@ -548,9 +540,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/expectTypes.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/expectTypes.js
   var require_expectTypes = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/expectTypes.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/expectTypes.js"(exports, module) {
       var AssertionError2 = require_assertion_error();
       var flag = require_flag();
       var type = require_type_detect();
@@ -582,9 +574,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/getActual.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/getActual.js
   var require_getActual = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/getActual.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/getActual.js"(exports, module) {
       module.exports = function getActual(obj, args) {
         return args.length > 4 ? args[4] : obj._obj;
       };
@@ -788,14 +780,14 @@ try {
         function inspectList(list, options2, inspectItem) {
           var separator = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : ", ";
           inspectItem = inspectItem || options2.inspect;
-          var size2 = list.length;
-          if (size2 === 0)
+          var size3 = list.length;
+          if (size3 === 0)
             return "";
           var originalLength = options2.truncate;
           var output = "";
           var peek = "";
           var truncated = "";
-          for (var i = 0; i < size2; i += 1) {
+          for (var i = 0; i < size3; i += 1) {
             var last = i + 1 === list.length;
             var secondToLast = i + 2 === list.length;
             truncated = "".concat(truncator, "(").concat(list.length - i, ")");
@@ -944,8 +936,8 @@ try {
           return entries;
         }
         function inspectMap(map, options2) {
-          var size2 = map.size - 1;
-          if (size2 <= 0) {
+          var size3 = map.size - 1;
+          if (size3 <= 0) {
             return "Map{}";
           }
           options2.truncate -= 7;
@@ -1310,9 +1302,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/config.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/config.js
   var require_config = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/config.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/config.js"(exports, module) {
       module.exports = {
         /**
          * ### config.includeStack
@@ -1395,14 +1387,37 @@ try {
          * @param {Array}
          * @api public
          */
-        proxyExcludedKeys: ["then", "catch", "inspect", "toJSON"]
+        proxyExcludedKeys: ["then", "catch", "inspect", "toJSON"],
+        /**
+         * ### config.deepEqual
+         *
+         * User configurable property, defines which a custom function to use for deepEqual
+         * comparisons.
+         * By default, the function used is the one from the `deep-eql` package without custom comparator.
+         *
+         *     // use a custom comparator
+         *     chai.config.deepEqual = (expected, actual) => {
+         *        return chai.util.eql(expected, actual, {
+         *           comparator: (expected, actual) => {
+         *              // for non number comparison, use the default behavior
+         *              if(typeof expected !== 'number') return null;
+         *              // allow a difference of 10 between compared numbers
+         *              return typeof actual === 'number' && Math.abs(actual - expected) < 10
+         *           }
+         *        })
+         *     };
+         *
+         * @param {Function}
+         * @api public
+         */
+        deepEqual: null
       };
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/inspect.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/inspect.js
   var require_inspect = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/inspect.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/inspect.js"(exports, module) {
       var getName = require_get_func_name();
       var loupe = require_loupe();
       var config2 = require_config();
@@ -1419,9 +1434,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/objDisplay.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/objDisplay.js
   var require_objDisplay = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/objDisplay.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/objDisplay.js"(exports, module) {
       var inspect = require_inspect();
       var config2 = require_config();
       module.exports = function objDisplay(obj) {
@@ -1444,9 +1459,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/getMessage.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/getMessage.js
   var require_getMessage = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/getMessage.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/getMessage.js"(exports, module) {
       var flag = require_flag();
       var getActual = require_getActual();
       var objDisplay = require_objDisplay();
@@ -1467,9 +1482,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/transferFlags.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/transferFlags.js
   var require_transferFlags = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/transferFlags.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/transferFlags.js"(exports, module) {
       module.exports = function transferFlags(assertion, object, includeAll) {
         var flags = assertion.__flags || (assertion.__flags = /* @__PURE__ */ Object.create(null));
         if (!object.__flags) {
@@ -1777,9 +1792,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/isProxyEnabled.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/isProxyEnabled.js
   var require_isProxyEnabled = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/isProxyEnabled.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/isProxyEnabled.js"(exports, module) {
       var config2 = require_config();
       module.exports = function isProxyEnabled() {
         return config2.useProxy && typeof Proxy !== "undefined" && typeof Reflect !== "undefined";
@@ -1787,9 +1802,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/addProperty.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/addProperty.js
   var require_addProperty = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/addProperty.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/addProperty.js"(exports, module) {
       var chai2 = require_chai();
       var flag = require_flag();
       var isProxyEnabled = require_isProxyEnabled();
@@ -1819,9 +1834,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/addLengthGuard.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/addLengthGuard.js
   var require_addLengthGuard = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/addLengthGuard.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/addLengthGuard.js"(exports, module) {
       var fnLengthDesc = Object.getOwnPropertyDescriptor(function() {
       }, "length");
       module.exports = function addLengthGuard(fn2, assertionName, isChainable) {
@@ -1840,9 +1855,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/getProperties.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/getProperties.js
   var require_getProperties = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/getProperties.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/getProperties.js"(exports, module) {
       module.exports = function getProperties(object) {
         var result = Object.getOwnPropertyNames(object);
         function addProperty(property) {
@@ -1860,9 +1875,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/proxify.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/proxify.js
   var require_proxify = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/proxify.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/proxify.js"(exports, module) {
       var config2 = require_config();
       var flag = require_flag();
       var getProperties = require_getProperties();
@@ -1936,9 +1951,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/addMethod.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/addMethod.js
   var require_addMethod = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/addMethod.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/addMethod.js"(exports, module) {
       var addLengthGuard = require_addLengthGuard();
       var chai2 = require_chai();
       var flag = require_flag();
@@ -1962,9 +1977,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/overwriteProperty.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/overwriteProperty.js
   var require_overwriteProperty = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/overwriteProperty.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/overwriteProperty.js"(exports, module) {
       var chai2 = require_chai();
       var flag = require_flag();
       var isProxyEnabled = require_isProxyEnabled();
@@ -2000,9 +2015,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/overwriteMethod.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/overwriteMethod.js
   var require_overwriteMethod = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/overwriteMethod.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/overwriteMethod.js"(exports, module) {
       var addLengthGuard = require_addLengthGuard();
       var chai2 = require_chai();
       var flag = require_flag();
@@ -2035,9 +2050,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/addChainableMethod.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/addChainableMethod.js
   var require_addChainableMethod = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/addChainableMethod.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/addChainableMethod.js"(exports, module) {
       var addLengthGuard = require_addLengthGuard();
       var chai2 = require_chai();
       var flag = require_flag();
@@ -2111,9 +2126,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/overwriteChainableMethod.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/overwriteChainableMethod.js
   var require_overwriteChainableMethod = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/overwriteChainableMethod.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/overwriteChainableMethod.js"(exports, module) {
       var chai2 = require_chai();
       var transferFlags = require_transferFlags();
       module.exports = function overwriteChainableMethod(ctx, name, method, chainingBehavior) {
@@ -2142,9 +2157,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/compareByInspect.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/compareByInspect.js
   var require_compareByInspect = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/compareByInspect.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/compareByInspect.js"(exports, module) {
       var inspect = require_inspect();
       module.exports = function compareByInspect(a2, b) {
         return inspect(a2) < inspect(b) ? -1 : 1;
@@ -2152,9 +2167,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/getOwnEnumerablePropertySymbols.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/getOwnEnumerablePropertySymbols.js
   var require_getOwnEnumerablePropertySymbols = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/getOwnEnumerablePropertySymbols.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/getOwnEnumerablePropertySymbols.js"(exports, module) {
       module.exports = function getOwnEnumerablePropertySymbols(obj) {
         if (typeof Object.getOwnPropertySymbols !== "function")
           return [];
@@ -2165,9 +2180,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/getOwnEnumerableProperties.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/getOwnEnumerableProperties.js
   var require_getOwnEnumerableProperties = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/getOwnEnumerableProperties.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/getOwnEnumerableProperties.js"(exports, module) {
       var getOwnEnumerablePropertySymbols = require_getOwnEnumerablePropertySymbols();
       module.exports = function getOwnEnumerableProperties(obj) {
         return Object.keys(obj).concat(getOwnEnumerablePropertySymbols(obj));
@@ -2232,9 +2247,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/isNaN.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/isNaN.js
   var require_isNaN = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/isNaN.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/isNaN.js"(exports, module) {
       function isNaN2(value) {
         return value !== value;
       }
@@ -2242,9 +2257,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/getOperator.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/getOperator.js
   var require_getOperator = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/getOperator.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/getOperator.js"(exports, module) {
       var type = require_type_detect();
       var flag = require_flag();
       function isObjectType(obj) {
@@ -2278,9 +2293,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/index.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/index.js
   var require_utils = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/utils/index.js"(exports) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/utils/index.js"(exports) {
       var pathval = require_pathval();
       exports.test = require_test();
       exports.type = require_type_detect();
@@ -2313,9 +2328,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/assertion.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/assertion.js
   var require_assertion = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/assertion.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/assertion.js"(exports, module) {
       var config2 = require_config();
       module.exports = function(_chai, util2) {
         var AssertionError2 = _chai.AssertionError, flag = util2.flag;
@@ -2325,6 +2340,7 @@ try {
           flag(this, "lockSsfi", lockSsfi);
           flag(this, "object", obj);
           flag(this, "message", msg);
+          flag(this, "eql", config2.deepEqual || util2.eql);
           return util2.proxify(this);
         }
         Object.defineProperty(Assertion2, "includeStack", {
@@ -2408,9 +2424,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/core/assertions.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/core/assertions.js
   var require_assertions = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/core/assertions.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/core/assertions.js"(exports, module) {
       module.exports = function(chai2, _) {
         var Assertion2 = chai2.Assertion, AssertionError2 = chai2.AssertionError, flag = _.flag;
         [
@@ -2479,7 +2495,7 @@ try {
         function include(val, msg) {
           if (msg)
             flag(this, "message", msg);
-          var obj = flag(this, "object"), objType = _.type(obj).toLowerCase(), flagMsg = flag(this, "message"), negate = flag(this, "negate"), ssfi = flag(this, "ssfi"), isDeep = flag(this, "deep"), descriptor = isDeep ? "deep " : "";
+          var obj = flag(this, "object"), objType = _.type(obj).toLowerCase(), flagMsg = flag(this, "message"), negate = flag(this, "negate"), ssfi = flag(this, "ssfi"), isDeep = flag(this, "deep"), descriptor = isDeep ? "deep " : "", isEql = isDeep ? flag(this, "eql") : SameValueZero;
           flagMsg = flagMsg ? flagMsg + ": " : "";
           var included = false;
           switch (objType) {
@@ -2497,7 +2513,6 @@ try {
               included = obj.has(val);
               break;
             case "map":
-              var isEql = isDeep ? _.eql : SameValueZero;
               obj.forEach(function(item) {
                 included = included || isEql(item, val);
               });
@@ -2505,7 +2520,7 @@ try {
             case "set":
               if (isDeep) {
                 obj.forEach(function(item) {
-                  included = included || _.eql(item, val);
+                  included = included || isEql(item, val);
                 });
               } else {
                 included = obj.has(val);
@@ -2514,7 +2529,7 @@ try {
             case "array":
               if (isDeep) {
                 included = obj.some(function(item) {
-                  return _.eql(item, val);
+                  return isEql(item, val);
                 });
               } else {
                 included = obj.indexOf(val) !== -1;
@@ -2691,8 +2706,9 @@ try {
         function assertEql(obj, msg) {
           if (msg)
             flag(this, "message", msg);
+          var eql = flag(this, "eql");
           this.assert(
-            _.eql(obj, flag(this, "object")),
+            eql(obj, flag(this, "object")),
             "expected #{this} to deeply equal #{exp}",
             "expected #{this} to not deeply equal #{exp}",
             obj,
@@ -2999,7 +3015,8 @@ try {
               ssfi
             );
           }
-          var isDeep = flag(this, "deep"), negate = flag(this, "negate"), pathInfo = isNested ? _.getPathInfo(obj, name) : null, value = isNested ? pathInfo.value : obj[name];
+          var isDeep = flag(this, "deep"), negate = flag(this, "negate"), pathInfo = isNested ? _.getPathInfo(obj, name) : null, value = isNested ? pathInfo.value : obj[name], isEql = isDeep ? flag(this, "eql") : (val1, val2) => val1 === val2;
+          ;
           var descriptor = "";
           if (isDeep)
             descriptor += "deep ";
@@ -3024,7 +3041,7 @@ try {
           }
           if (arguments.length > 1) {
             this.assert(
-              hasProperty && (isDeep ? _.eql(val, value) : val === value),
+              hasProperty && isEql(val, value),
               "expected #{this} to have " + descriptor + _.inspect(name) + " of #{exp}, but got #{act}",
               "expected #{this} to not have " + descriptor + _.inspect(name) + " of #{act}",
               val,
@@ -3049,9 +3066,10 @@ try {
             flag(this, "message", msg);
           var obj = flag(this, "object");
           var actualDescriptor = Object.getOwnPropertyDescriptor(Object(obj), name);
+          var eql = flag(this, "eql");
           if (actualDescriptor && descriptor) {
             this.assert(
-              _.eql(descriptor, actualDescriptor),
+              eql(descriptor, actualDescriptor),
               "expected the own property descriptor for " + _.inspect(name) + " on #{this} to match " + _.inspect(descriptor) + ", got " + _.inspect(actualDescriptor),
               "expected the own property descriptor for " + _.inspect(name) + " on #{this} to not match " + _.inspect(descriptor),
               descriptor,
@@ -3156,29 +3174,21 @@ try {
           if (!keys.length) {
             throw new AssertionError2(flagMsg + "keys required", void 0, ssfi);
           }
-          var len = keys.length, any = flag(this, "any"), all = flag(this, "all"), expected = keys;
+          var len = keys.length, any = flag(this, "any"), all = flag(this, "all"), expected = keys, isEql = isDeep ? flag(this, "eql") : (val1, val2) => val1 === val2;
           if (!any && !all) {
             all = true;
           }
           if (any) {
             ok = expected.some(function(expectedKey) {
               return actual.some(function(actualKey) {
-                if (isDeep) {
-                  return _.eql(expectedKey, actualKey);
-                } else {
-                  return expectedKey === actualKey;
-                }
+                return isEql(expectedKey, actualKey);
               });
             });
           }
           if (all) {
             ok = expected.every(function(expectedKey) {
               return actual.some(function(actualKey) {
-                if (isDeep) {
-                  return _.eql(expectedKey, actualKey);
-                } else {
-                  return expectedKey === actualKey;
-                }
+                return isEql(expectedKey, actualKey);
               });
             });
             if (!flag(this, "contains")) {
@@ -3409,7 +3419,7 @@ try {
             failMsg = "expected #{this} to have the same " + subject + " as #{exp}";
             failNegateMsg = "expected #{this} to not have the same " + subject + " as #{exp}";
           }
-          var cmp = flag(this, "deep") ? _.eql : void 0;
+          var cmp = flag(this, "deep") ? flag(this, "eql") : void 0;
           this.assert(
             isSubsetOf(subset, obj, cmp, contains2, ordered),
             failMsg,
@@ -3422,7 +3432,7 @@ try {
         function oneOf(list, msg) {
           if (msg)
             flag(this, "message", msg);
-          var expected = flag(this, "object"), flagMsg = flag(this, "message"), ssfi = flag(this, "ssfi"), contains2 = flag(this, "contains"), isDeep = flag(this, "deep");
+          var expected = flag(this, "object"), flagMsg = flag(this, "message"), ssfi = flag(this, "ssfi"), contains2 = flag(this, "contains"), isDeep = flag(this, "deep"), eql = flag(this, "eql");
           new Assertion2(list, flagMsg, ssfi, true).to.be.an("array");
           if (contains2) {
             this.assert(
@@ -3438,7 +3448,7 @@ try {
             if (isDeep) {
               this.assert(
                 list.some(function(possibility) {
-                  return _.eql(expected, possibility);
+                  return eql(expected, possibility);
                 }),
                 "expected #{this} to deeply equal one of #{exp}",
                 "expected #{this} to deeply equal one of #{exp}",
@@ -3606,9 +3616,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/interface/expect.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/interface/expect.js
   var require_expect = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/interface/expect.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/interface/expect.js"(exports, module) {
       module.exports = function(chai2, util2) {
         chai2.expect = function(val, message) {
           return new chai2.Assertion(val, message);
@@ -3629,9 +3639,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/interface/should.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/interface/should.js
   var require_should = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/interface/should.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/interface/should.js"(exports, module) {
       module.exports = function(chai2, util2) {
         var Assertion2 = chai2.Assertion;
         function loadShould() {
@@ -3697,9 +3707,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/interface/assert.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/interface/assert.js
   var require_assert = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai/interface/assert.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai/interface/assert.js"(exports, module) {
       module.exports = function(chai2, util2) {
         var Assertion2 = chai2.Assertion, flag = util2.flag;
         var assert2 = chai2.assert = function(express, errmsg) {
@@ -4260,9 +4270,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai.js
   var require_chai = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/lib/chai.js"(exports) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/lib/chai.js"(exports) {
       var used = [];
       exports.version = "4.3.8";
       exports.AssertionError = require_assertion_error();
@@ -4290,9 +4300,9 @@ try {
     }
   });
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/index.js
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/index.js
   var require_chai2 = __commonJS({
-    "node_modules/.pnpm/chai@4.3.10/node_modules/chai/index.js"(exports, module) {
+    "node_modules/.pnpm/chai@4.4.1/node_modules/chai/index.js"(exports, module) {
       module.exports = require_chai();
     }
   });
@@ -4354,8 +4364,17 @@ try {
               );
             }
           }
+          if (isArray(o[k])) {
+            o[k] = [];
+            o[k].push(...v);
+            continue;
+          }
           o[k] = extend(o[k], v);
         } else {
+          if (isArray(o)) {
+            o.push(v);
+            continue;
+          }
           o[k] = v;
         }
       }
@@ -4369,11 +4388,126 @@ try {
     }
   });
 
-  // node_modules/.pnpm/element-internals-polyfill@1.3.9/node_modules/element-internals-polyfill/dist/index.js
+  // node_modules/.pnpm/dom-storage@2.1.0/node_modules/dom-storage/lib/index.js
+  var require_lib = __commonJS({
+    "node_modules/.pnpm/dom-storage@2.1.0/node_modules/dom-storage/lib/index.js"(exports, module) {
+      (function() {
+        "use strict";
+        var fs = __require("fs");
+        function Storage2(path, opts) {
+          opts = opts || {};
+          var db;
+          Object.defineProperty(this, "___priv_bk___", {
+            value: {
+              path
+            },
+            writable: false,
+            enumerable: false
+          });
+          Object.defineProperty(this, "___priv_strict___", {
+            value: !!opts.strict,
+            writable: false,
+            enumerable: false
+          });
+          Object.defineProperty(this, "___priv_ws___", {
+            value: opts.ws || "  ",
+            writable: false,
+            enumerable: false
+          });
+          try {
+            db = JSON.parse(fs.readFileSync(path));
+          } catch (e) {
+            db = {};
+          }
+          Object.keys(db).forEach(function(key) {
+            this[key] = db[key];
+          }, this);
+        }
+        Storage2.prototype.getItem = function(key) {
+          if (this.hasOwnProperty(key)) {
+            if (this.___priv_strict___) {
+              return String(this[key]);
+            } else {
+              return this[key];
+            }
+          }
+          return null;
+        };
+        Storage2.prototype.setItem = function(key, val) {
+          if (val === void 0) {
+            this[key] = null;
+          } else if (this.___priv_strict___) {
+            this[key] = String(val);
+          } else {
+            this[key] = val;
+          }
+          this.___save___();
+        };
+        Storage2.prototype.removeItem = function(key) {
+          delete this[key];
+          this.___save___();
+        };
+        Storage2.prototype.clear = function() {
+          var self2 = this;
+          Object.keys(self2).forEach(function(key) {
+            self2[key] = void 0;
+            delete self2[key];
+          });
+        };
+        Storage2.prototype.key = function(i) {
+          i = i || 0;
+          return Object.keys(this)[i];
+        };
+        Object.defineProperty(Storage2.prototype, "length", {
+          get: function() {
+            return Object.keys(this).length;
+          }
+        });
+        Storage2.prototype.___save___ = function() {
+          var self2 = this;
+          if (!this.___priv_bk___.path) {
+            return;
+          }
+          if (this.___priv_bk___.lock) {
+            this.___priv_bk___.wait = true;
+            return;
+          }
+          this.___priv_bk___.lock = true;
+          fs.writeFile(
+            this.___priv_bk___.path,
+            JSON.stringify(this, null, this.___priv_ws___),
+            "utf8",
+            function(e) {
+              self2.___priv_bk___.lock = false;
+              if (e) {
+                console.error("Could not write to database", self2.___priv_bk___.path);
+                console.error(e);
+                return;
+              }
+              if (self2.___priv_bk___.wait) {
+                self2.___priv_bk___.wait = false;
+                self2.___save___();
+              }
+            }
+          );
+        };
+        Object.defineProperty(Storage2, "create", {
+          value: function(path, opts) {
+            return new Storage2(path, opts);
+          },
+          writable: false,
+          enumerable: false
+        });
+        module.exports = Storage2;
+      })();
+    }
+  });
+
+  // node_modules/.pnpm/element-internals-polyfill@1.3.10/node_modules/element-internals-polyfill/dist/index.js
   var dist_exports = {};
   var init_dist = __esm({
-    "node_modules/.pnpm/element-internals-polyfill@1.3.9/node_modules/element-internals-polyfill/dist/index.js"() {
-      (function() {
+    "node_modules/.pnpm/element-internals-polyfill@1.3.10/node_modules/element-internals-polyfill/dist/index.js"() {
+      (function(exports) {
         "use strict";
         const refMap = /* @__PURE__ */ new WeakMap();
         const validityMap = /* @__PURE__ */ new WeakMap();
@@ -4562,6 +4696,9 @@ try {
         }
         const deferUpgrade = (fragment) => {
           const observer = new MutationObserver(fragmentObserverCallback);
+          if (window?.ShadyDOM?.inUse && fragment.mode && fragment.host) {
+            fragment = fragment.host;
+          }
           observer.observe?.(fragment, { childList: true });
           documentFragmentMap.set(fragment, observer);
         };
@@ -5074,7 +5211,27 @@ try {
             "reportValidity"
           ].every((prop) => prop in featureDetectionElement.internals);
         }
-        if (!isElementInternalsSupported()) {
+        let hasElementInternalsPolyfillBeenApplied = false;
+        let hasCustomStateSetPolyfillBeenApplied = false;
+        function forceCustomStateSetPolyfill(attachInternals) {
+          if (hasCustomStateSetPolyfillBeenApplied) {
+            return;
+          }
+          hasCustomStateSetPolyfillBeenApplied = true;
+          window.CustomStateSet = CustomStateSet;
+          if (attachInternals) {
+            HTMLElement.prototype.attachInternals = function(...args) {
+              const internals = attachInternals.call(this, args);
+              internals.states = new CustomStateSet(this);
+              return internals;
+            };
+          }
+        }
+        function forceElementInternalsPolyfill(forceCustomStateSet = true) {
+          if (hasElementInternalsPolyfillBeenApplied) {
+            return;
+          }
+          hasElementInternalsPolyfillBeenApplied = true;
           if (typeof window !== "undefined") {
             window.ElementInternals = ElementInternals;
           }
@@ -5137,19 +5294,23 @@ try {
           if (typeof HTMLFormElement !== "undefined") {
             patchFormPrototype();
           }
-          if (typeof window !== "undefined" && !window.CustomStateSet) {
-            window.CustomStateSet = CustomStateSet;
+          if (forceCustomStateSet || typeof window !== "undefined" && !window.CustomStateSet) {
+            forceCustomStateSetPolyfill();
           }
-        } else if (typeof window !== "undefined" && !window.CustomStateSet) {
-          window.CustomStateSet = CustomStateSet;
-          const attachInternals = HTMLElement.prototype.attachInternals;
-          HTMLElement.prototype.attachInternals = function(...args) {
-            const internals = attachInternals.call(this, args);
-            internals.states = new CustomStateSet(this);
-            return internals;
-          };
         }
-      })();
+        const isCePolyfill = !!customElements.polyfillWrapFlushCallback;
+        if (!isCePolyfill) {
+          if (!isElementInternalsSupported()) {
+            forceElementInternalsPolyfill(false);
+          } else if (typeof window !== "undefined" && !window.CustomStateSet) {
+            forceCustomStateSetPolyfill(HTMLElement.prototype.attachInternals);
+          }
+        }
+        exports.forceCustomStateSetPolyfill = forceCustomStateSetPolyfill;
+        exports.forceElementInternalsPolyfill = forceElementInternalsPolyfill;
+        Object.defineProperty(exports, "__esModule", { value: true });
+        return exports;
+      })({});
     }
   });
 
@@ -5452,7 +5613,7 @@ try {
   });
 
   // source/dom/constants.mjs
-  var DEFAULT_THEME, ATTRIBUTE_PREFIX, ATTRIBUTE_OPTIONS, ATTRIBUTE_SCRIPT_HOST, ATTRIBUTE_OPTIONS_SELECTOR, ATTRIBUTE_INIT_CALLBACK, initControlCallbackName, ATTRIBUTE_THEME_PREFIX, ATTRIBUTE_THEME_NAME, ATTRIBUTE_UPDATER_ATTRIBUTES, ATTRIBUTE_UPDATER_SELECT_THIS, ATTRIBUTE_UPDATER_REPLACE, ATTRIBUTE_UPDATER_INSERT, ATTRIBUTE_UPDATER_INSERT_REFERENCE, ATTRIBUTE_UPDATER_REMOVE, ATTRIBUTE_UPDATER_BIND, ATTRIBUTE_TEMPLATE_PREFIX, ATTRIBUTE_ROLE, ATTRIBUTE_DISABLED, ATTRIBUTE_OBJECTLINK, ATTRIBUTE_ERRORMESSAGE, objectUpdaterLinkSymbol, customElementUpdaterLinkSymbol, TAG_SCRIPT, TAG_LINK, ATTRIBUTE_ID, ATTRIBUTE_CLASS, ATTRIBUTE_TITLE, ATTRIBUTE_SRC, ATTRIBUTE_HREF, ATTRIBUTE_TYPE, ATTRIBUTE_NONCE;
+  var DEFAULT_THEME, ATTRIBUTE_PREFIX, ATTRIBUTE_OPTIONS, ATTRIBUTE_SCRIPT_HOST, ATTRIBUTE_OPTIONS_SELECTOR, ATTRIBUTE_INIT_CALLBACK, initControlCallbackName, ATTRIBUTE_THEME_PREFIX, ATTRIBUTE_THEME_NAME, ATTRIBUTE_UPDATER_ATTRIBUTES, ATTRIBUTE_UPDATER_SELECT_THIS, ATTRIBUTE_UPDATER_REPLACE, ATTRIBUTE_UPDATER_INSERT, ATTRIBUTE_UPDATER_INSERT_REFERENCE, ATTRIBUTE_UPDATER_REMOVE, ATTRIBUTE_UPDATER_BIND, ATTRIBUTE_UPDATER_BIND_TYPE, ATTRIBUTE_TEMPLATE_PREFIX, ATTRIBUTE_ROLE, ATTRIBUTE_DISABLED, ATTRIBUTE_OBJECTLINK, ATTRIBUTE_ERRORMESSAGE, objectUpdaterLinkSymbol, customElementUpdaterLinkSymbol, TAG_SCRIPT, TAG_LINK, ATTRIBUTE_ID, ATTRIBUTE_CLASS, ATTRIBUTE_TITLE, ATTRIBUTE_SRC, ATTRIBUTE_HREF, ATTRIBUTE_TYPE, ATTRIBUTE_NONCE;
   var init_constants2 = __esm({
     "source/dom/constants.mjs"() {
       DEFAULT_THEME = "monster";
@@ -5471,6 +5632,7 @@ try {
       ATTRIBUTE_UPDATER_INSERT_REFERENCE = `${ATTRIBUTE_PREFIX}insert-reference`;
       ATTRIBUTE_UPDATER_REMOVE = `${ATTRIBUTE_PREFIX}remove`;
       ATTRIBUTE_UPDATER_BIND = `${ATTRIBUTE_PREFIX}bind`;
+      ATTRIBUTE_UPDATER_BIND_TYPE = `${ATTRIBUTE_UPDATER_BIND}-type`;
       ATTRIBUTE_TEMPLATE_PREFIX = `${ATTRIBUTE_PREFIX}template-prefix`;
       ATTRIBUTE_ROLE = `${ATTRIBUTE_PREFIX}role`;
       ATTRIBUTE_DISABLED = "disabled";
@@ -5987,10 +6149,12 @@ try {
       WILDCARD = "*";
       Pathfinder = class extends Base {
         /**
-         * @param {array|object|Map|Set} value
-         * @since 1.4.0
-         * @throws  {Error} the parameter must not be a simple type
-         **/
+         * Creates a new instance of the constructor.
+         *
+         * @param {object} object - The object parameter for the constructor.
+         *
+         * @throws {Error} Throws an error if the provided object parameter is a simple type.
+         */
         constructor(object) {
           super();
           if (isPrimitive(object)) {
@@ -6089,7 +6253,7 @@ try {
     }
     if (isArray(obj)) {
       const copy = [];
-      for (var i = 0, len = obj.length; i < len; i++) {
+      for (let i = 0, len = obj.length; i < len; i++) {
         copy[i] = clone(obj[i]);
       }
       return copy;
@@ -6641,7 +6805,7 @@ try {
          * The appropriate text for this number is then selected. If no suitable key is found, `defaultText` is taken.
          *
          * @param {string} key
-         * @param {integer|count} count
+         * @param {integer|string} count
          * @param {string|undefined} defaultText
          * @return {string}
          */
@@ -6890,31 +7054,9 @@ try {
         validatePrimitive(value);
         let trueStatement = args.shift() || void 0;
         let falseStatement = args.shift() || void 0;
-        if (trueStatement === "value") {
-          trueStatement = value;
-        }
-        if (trueStatement === "\\value") {
-          trueStatement = "value";
-        }
-        if (trueStatement === "\\undefined") {
-          trueStatement = void 0;
-        }
-        if (trueStatement === "\\null") {
-          trueStatement = null;
-        }
-        if (falseStatement === "value") {
-          falseStatement = value;
-        }
-        if (falseStatement === "\\value") {
-          falseStatement = "value";
-        }
-        if (falseStatement === "\\undefined") {
-          falseStatement = void 0;
-        }
-        if (falseStatement === "\\null") {
-          falseStatement = null;
-        }
-        const condition = value !== void 0 && value !== "" && value !== "off" && value !== "false" && value !== false || value === "on" || value === "true" || value === true;
+        trueStatement = convertSpecialStrings(trueStatement, value);
+        falseStatement = convertSpecialStrings(falseStatement, value);
+        const condition = evaluateCondition(value);
         return condition ? trueStatement : falseStatement;
       case "ucfirst":
         validateString(value);
@@ -7097,10 +7239,7 @@ try {
         validatePrimitive(value);
         const equalsValue = args.shift();
         if (value === null) {
-          if (equalsValue === "null") {
-            return true;
-          }
-          return false;
+          return equalsValue === "null";
         }
         const typeOfValue = typeof value;
         switch (typeOfValue) {
@@ -7122,10 +7261,12 @@ try {
         } catch (e) {
           throw new Error(`unsupported locale or missing format (${e.message})`);
         }
-        const currency = value.substring(0, 3);
-        if (!currency) {
-          throw new Error("missing currency parameter");
+        const match = value.match(/^([A-Z]{3})[\s-]*(\d+(\.\d+)?)$/);
+        if (!match) {
+          throw new Error("invalid currency format");
         }
+        const currency = match[1];
+        const amount = match[2];
         const maximumFractionDigits = args?.[0] || 2;
         const roundingIncrement = args?.[1] || 5;
         const nf = new Intl.NumberFormat(locale, {
@@ -7134,7 +7275,7 @@ try {
           maximumFractionDigits,
           roundingIncrement
         });
-        return nf.format(value.substring(3));
+        return nf.format(amount);
       case "timestamp":
         date = new Date(value);
         timestamp = date.getTime();
@@ -7246,11 +7387,58 @@ try {
           key = value;
         }
         defaultValue = args.shift() || void 0;
+        defaultValue = convertSpecialStrings(defaultValue, value);
         return translations.getText(key, defaultValue);
+      case "set-toggle":
+      case "set-set":
+      case "set-remove":
+        let modifier = args.shift();
+        let delimiter = args.shift();
+        if (delimiter === void 0) {
+          delimiter = " ";
+        }
+        const set = new Set(value.split(delimiter));
+        const toggle2 = new Set(modifier.split(delimiter));
+        if (this.command === "set-toggle") {
+          for (const t of toggle2) {
+            if (set.has(t)) {
+              set.delete(t);
+            } else {
+              set.add(t);
+            }
+          }
+        } else if (this.command === "set-set") {
+          for (const t of toggle2) {
+            set.add(t);
+          }
+        } else if (this.command === "set-remove") {
+          for (const t of toggle2) {
+            set.delete(t);
+          }
+        }
+        return Array.from(set).join(delimiter);
       default:
         throw new Error(`unknown command ${this.command}`);
     }
   }
+  function convertSpecialStrings(input, value) {
+    switch (input) {
+      case "value":
+        return value;
+      case "\\value":
+        return "value";
+      case "\\undefined":
+        return void 0;
+      case "\\null":
+        return null;
+      default:
+        return input;
+    }
+  }
+  function evaluateCondition(value) {
+    const lowerValue = typeof value === "string" ? value.toLowerCase() : value;
+    return value !== void 0 && value !== null && value !== "" && lowerValue !== "off" && lowerValue !== "false" && value !== false || lowerValue === "on" || lowerValue === "true" || value === true;
+  }
   var Transformer;
   var init_transformer = __esm({
     "source/data/transformer.mjs"() {
@@ -7471,8 +7659,8 @@ try {
         /**
          * Default values for the markers are `${` and `}`
          *
-         * @param {object} object
-         * @throws {TypeError} value is not a object
+         * @param object
+         * @param options
          */
         constructor(object, options2) {
           super(options2);
@@ -8539,6 +8727,15 @@ try {
     }
   });
 
+  // source/util/sleep.mjs
+  function Sleep(milliseconds) {
+    return new Promise((resolve) => setTimeout(resolve, milliseconds));
+  }
+  var init_sleep = __esm({
+    "source/util/sleep.mjs"() {
+    }
+  });
+
   // source/util/trimspaces.mjs
   function trimSpaces(value) {
     validateString(value);
@@ -8713,6 +8910,35 @@ try {
     } else {
       throw new Error("unsupported object");
     }
+    if (isString(value)) {
+      const type = element.getAttribute(ATTRIBUTE_UPDATER_BIND_TYPE);
+      switch (type) {
+        case "number":
+        case "int":
+        case "float":
+        case "integer":
+          value = Number(value);
+          if (isNaN(value)) {
+            value = 0;
+          }
+          break;
+        case "boolean":
+        case "bool":
+        case "checkbox":
+          value = value === "true" || value === "1" || value === "on";
+          break;
+        case "array":
+        case "list":
+          value = value.split(",");
+          break;
+        case "object":
+        case "json":
+          value = JSON.parse(value);
+          break;
+        default:
+          break;
+      }
+    }
     const copy = clone(this[internalSymbol].subject.getRealSubject());
     const pf = new Pathfinder(copy);
     pf.setVia(path, value);
@@ -8744,7 +8970,7 @@ try {
       wd++;
       const p = clone(change?.["path"]);
       if (!isArray(p))
-        return this;
+        return;
       while (p.length > 0) {
         const current = p.join(".");
         let iterator = /* @__PURE__ */ new Set();
@@ -9061,6 +9287,22 @@ try {
       );
     }
     const result = [];
+    let updaterCallbacks = [];
+    const cb = this?.[updaterTransformerMethodsSymbol];
+    if (this instanceof HTMLElement && typeof cb === "function") {
+      let callbacks = cb();
+      if (typeof callbacks === "object") {
+        for (const [name, callback] of Object.entries(callbacks)) {
+          if (typeof callback === "function") {
+            updaterCallbacks.push([name, callback]);
+          } else {
+            addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, `onUpdaterPipeCallbacks: ${name} is not a function`);
+          }
+        }
+      } else {
+        addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, `onUpdaterPipeCallbacks do not return an object with functions`);
+      }
+    }
     elements.forEach((element) => {
       if (!(element instanceof HTMLElement))
         return;
@@ -9068,6 +9310,11 @@ try {
         return;
       const u = new Updater(element, object);
       updaters.add(u);
+      if (updaterCallbacks.length > 0) {
+        for (const [name, callback] of updaterCallbacks) {
+          u.setCallback(name, callback);
+        }
+      }
       result.push(
         u.run().then(() => {
           return u.enableEventProcessing();
@@ -9092,9 +9339,11 @@ try {
       init_observer();
       init_proxyobserver();
       init_validate();
+      init_sleep();
       init_clone();
       init_trimspaces();
       init_attributes();
+      init_customelement();
       init_events();
       init_template();
       Updater = class extends Base {
@@ -9129,12 +9378,18 @@ try {
               const s = this[internalSymbol].subject.getRealSubject();
               const diffResult = diff(this[internalSymbol].last, s);
               this[internalSymbol].last = clone(s);
+              const promises = [];
               for (const [, change] of Object.entries(diffResult)) {
-                removeElement.call(this, change);
-                insertElement.call(this, change);
-                updateContent.call(this, change);
-                updateAttributes.call(this, change);
+                promises.push(
+                  Sleep(1).then(() => {
+                    removeElement.call(this, change);
+                    insertElement.call(this, change);
+                    updateContent.call(this, change);
+                    updateAttributes.call(this, change);
+                  })
+                );
               }
+              return Promise.all(promises);
             })
           );
         }
@@ -9452,7 +9707,8 @@ try {
     attributeObserverSymbol: () => attributeObserverSymbol,
     getSlottedElements: () => getSlottedElements,
     initMethodSymbol: () => initMethodSymbol,
-    registerCustomElement: () => registerCustomElement
+    registerCustomElement: () => registerCustomElement,
+    updaterTransformerMethodsSymbol: () => updaterTransformerMethodsSymbol
   });
   function callControlCallback(callBackFunctionName, ...args) {
     if (!isString(callBackFunctionName) || callBackFunctionName === "") {
@@ -9675,7 +9931,7 @@ try {
       if (isString(html) && html.length > 0) {
         const mapping = this.getOption("templateMapping", {});
         if (isObject(mapping)) {
-          html = new Formatter(mapping).format(html);
+          html = new Formatter(mapping, {}).format(html);
         }
         this.innerHTML = html;
       }
@@ -9762,7 +10018,7 @@ try {
     }
     customElements2.define(tag, element);
   }
-  var initMethodSymbol, assembleMethodSymbol, attributeObserverSymbol, attributeMutationObserverSymbol, scriptHostElementSymbol, CustomElement;
+  var initMethodSymbol, assembleMethodSymbol, updaterTransformerMethodsSymbol, attributeObserverSymbol, attributeMutationObserverSymbol, updateCloneDataSymbol, scriptHostElementSymbol, CustomElement;
   var init_customelement = __esm({
     "source/dom/customelement.mjs"() {
       init_util();
@@ -9790,12 +10046,16 @@ try {
       assembleMethodSymbol = Symbol.for(
         "@schukai/monster/dom/@@assembleMethodSymbol"
       );
+      updaterTransformerMethodsSymbol = Symbol.for(
+        "@schukai/monster/dom/@@updaterTransformerMethodsSymbol"
+      );
       attributeObserverSymbol = Symbol.for(
         "@schukai/monster/dom/@@attributeObserver"
       );
       attributeMutationObserverSymbol = Symbol(
         "@schukai/monster/dom/@@mutationObserver"
       );
+      updateCloneDataSymbol = Symbol("@schukai/monster/dom/@@updateCloneData");
       scriptHostElementSymbol = Symbol("scriptHostElement");
       CustomElement = class extends HTMLElement {
         /**
@@ -9809,9 +10069,17 @@ try {
          */
         constructor() {
           super();
+          let mapping = {
+            "actions.click": (value) => {
+              return () => {
+                debugger;
+                let a2 = 1;
+              };
+            }
+          };
           this[attributeObserverSymbol] = {};
           this[internalSymbol] = new ProxyObserver({
-            options: initOptionsFromAttributes(this, extend({}, this.defaults))
+            options: initOptionsFromAttributes(this, extend({}, this.defaults), mapping)
           });
           this[initMethodSymbol]();
           initOptionObserver.call(this);
@@ -10020,7 +10288,7 @@ try {
          * @return {*}
          * @since 1.10.0
          */
-        getOption(path, defaultValue) {
+        getOption(path, defaultValue = void 0) {
           let value;
           try {
             value = new Pathfinder(
@@ -10056,11 +10324,7 @@ try {
           if (isString(options2)) {
             options2 = parseOptionsJSON.call(this, options2);
           }
-          extend(
-            this[internalSymbol].getSubject()["options"],
-            this.defaults,
-            options2
-          );
+          extend(this[internalSymbol].getSubject()["options"], options2);
           return this;
         }
         /**
@@ -10072,6 +10336,38 @@ try {
         [initMethodSymbol]() {
           return this;
         }
+        /**
+         * This method is called once when the object is equipped with update for the dynamic change of the dom. 
+         * The functions returned here can be used as pipe functions in the template. 
+         * 
+         * In the example, the function `my-transformer` is defined. In the template you can use it as follows:
+         * 
+         * ```html
+         * <my-element data-monster-option-transformer="path:my-value | call:my-transformer"></my-element>
+         * ```
+         * 
+         * @example
+         * [updaterTransformerMethodsSymbol]() {
+         *    return {
+         *       "my-transformer": (value) => {
+         *           switch (typeof Wert) {
+         *           case "string":
+         *               return value + "!";
+         *           case "Zahl":
+         *               return value + 1;
+         *           default:
+         *               return value;
+         *           }
+         *    }    
+         *    };
+         *  };
+         *
+         * @return {object}
+         * @since 2.43.0
+         */
+        [updaterTransformerMethodsSymbol]() {
+          return {};
+        }
         /**
          * This method is called once when the object is included in the DOM for the first time. It performs the following actions:
          * 1. Extracts the options from the attributes and the script tag of the element and sets them.
@@ -10117,15 +10413,27 @@ try {
           } catch (e) {
             nodeList = elements;
           }
+          this[updateCloneDataSymbol] = clone(
+            this[internalSymbol].getRealSubject()["options"]
+          );
           addObjectWithUpdaterToElement.call(
             this,
             nodeList,
             customElementUpdaterLinkSymbol,
-            clone(this[internalSymbol].getRealSubject()["options"])
+            this[updateCloneDataSymbol]
           );
           attachAttributeChangeMutationObserver.call(this);
           return this;
         }
+        /**
+         * You know what you are doing? This function is only for advanced users.
+         * The result is a clone of the internal data.
+         *
+         * @returns {*}
+         */
+        getInternalUpdateCloneData() {
+          return clone(this[updateCloneDataSymbol]);
+        }
         /**
          * This method is called every time the element is inserted into the DOM. It checks if the custom element
          * has already been initialized and if not, calls the assembleMethod to initialize it.
@@ -10331,7 +10639,6 @@ try {
     Reload: () => Reload
   });
   function initOptionsFromArguments() {
-    ;
     const options2 = {};
     const url = this.getAttribute(ATTRIBUTE_FORM_URL);
     if (isString(url)) {
@@ -10343,7 +10650,6 @@ try {
     return options2;
   }
   function initIntersectionObserver() {
-    ;
     if (this[intersectionObserverWasInitialized] === true) {
       return;
     }
@@ -10371,7 +10677,6 @@ try {
     observer.observe(this);
   }
   function loadContent2() {
-    ;
     const url = this.getOption("url", void 0);
     if (!isString(url) || url === "") {
       throw new Error("missing url");
@@ -10481,7 +10786,6 @@ try {
          *
          */
         [initMethodSymbol]() {
-          ;
           super[initMethodSymbol]();
           this[attributeObserverSymbol][ATTRIBUTE_FORM_URL] = (url) => {
             if (this.hasAttribute(ATTRIBUTE_FORM_URL)) {
@@ -10504,7 +10808,6 @@ try {
          * @return {Monster.Components.Form.Form}
          */
         [assembleMethodSymbol]() {
-          ;
           super[assembleMethodSymbol]();
           initIntersectionObserver.call(this);
         }
@@ -10603,11 +10906,11 @@ try {
               buffers = args;
             }
           }
-          let size2 = 0;
+          let size3 = 0;
           for (const buffer of buffers) {
-            size2 += buffer.byteLength;
+            size3 += buffer.byteLength;
           }
-          const res = new Uint8Array(size2);
+          const res = new Uint8Array(size3);
           let offset3 = 0;
           for (const buffer of buffers) {
             const view = this.toUint8Array(buffer);
@@ -11932,13 +12235,13 @@ try {
           if (!this.isHexOnly) {
             const encodedBuf = utilToBase(this.tagNumber, 7);
             const encodedView = new Uint8Array(encodedBuf);
-            const size2 = encodedBuf.byteLength;
-            const retView2 = new Uint8Array(size2 + 1);
+            const size3 = encodedBuf.byteLength;
+            const retView2 = new Uint8Array(size3 + 1);
             retView2[0] = firstOctet | 31;
             if (!sizeOnly) {
-              for (let i = 0; i < size2 - 1; i++)
+              for (let i = 0; i < size3 - 1; i++)
                 retView2[i + 1] = encodedView[i] | 128;
-              retView2[size2] = encodedView[size2 - 1];
+              retView2[size3] = encodedView[size3 - 1];
             }
             return retView2.buffer;
           }
@@ -15284,13 +15587,13 @@ ${values.join("\n")}` : `${blockName} :`;
     }
   });
 
-  // node_modules/.pnpm/webcrypto-core@1.7.7/node_modules/webcrypto-core/build/webcrypto-core.es.js
+  // node_modules/.pnpm/webcrypto-core@1.7.8/node_modules/webcrypto-core/build/webcrypto-core.es.js
   function isJWK(data) {
     return typeof data === "object" && "kty" in data;
   }
   var import_pvtsutils4, import_pvtsutils5, CryptoError, AlgorithmError, UnsupportedOperationError, OperationError, RequiredPropertyError, ProviderCrypto, AesProvider, AesCbcProvider, AesCmacProvider, AesCtrProvider, AesEcbProvider, AesGcmProvider, AesKwProvider, DesProvider, RsaProvider, RsaSsaProvider, RsaPssProvider, RsaOaepProvider, EllipticProvider, EcdsaProvider, KEY_TYPES, CryptoKey, EcdhProvider, EcdhEsProvider, EdDsaProvider, ObjectIdentifier2, AlgorithmIdentifier, PrivateKeyInfo, PublicKeyInfo, JsonBase64UrlArrayBufferConverter, AsnIntegerArrayBufferConverter, RsaPrivateKey, RsaPublicKey, EcPublicKey, EcPrivateKey, AsnIntegerWithoutPaddingConverter, index$2, EcUtils, EcDsaSignature, OneAsymmetricKey, EdPrivateKey, EdPublicKey, CurvePrivateKey, idSecp256r1, idEllipticCurve, idSecp384r1, idSecp521r1, idSecp256k1, idVersionOne, idBrainpoolP160r1, idBrainpoolP160t1, idBrainpoolP192r1, idBrainpoolP192t1, idBrainpoolP224r1, idBrainpoolP224t1, idBrainpoolP256r1, idBrainpoolP256t1, idBrainpoolP320r1, idBrainpoolP320t1, idBrainpoolP384r1, idBrainpoolP384t1, idBrainpoolP512r1, idBrainpoolP512t1, idX25519, idX448, idEd25519, idEd448, index$1, EcCurves, HmacProvider, Pbkdf2Provider, HkdfProvider, ShakeProvider, Shake128Provider, Shake256Provider, Crypto, ProviderStorage, SubtleCrypto;
   var init_webcrypto_core_es = __esm({
-    "node_modules/.pnpm/webcrypto-core@1.7.7/node_modules/webcrypto-core/build/webcrypto-core.es.js"() {
+    "node_modules/.pnpm/webcrypto-core@1.7.8/node_modules/webcrypto-core/build/webcrypto-core.es.js"() {
       import_pvtsutils4 = __toESM(require_build());
       import_pvtsutils5 = __toESM(require_build());
       init_es2015();
@@ -15318,17 +15621,17 @@ ${values.join("\n")}` : `${blockName} :`;
           this.checkDigest.apply(this, args);
           return this.onDigest.apply(this, args);
         }
-        checkDigest(algorithm, data) {
+        checkDigest(algorithm, _data) {
           this.checkAlgorithmName(algorithm);
         }
-        async onDigest(algorithm, data) {
+        async onDigest(_algorithm, _data) {
           throw new UnsupportedOperationError("digest");
         }
         async generateKey(...args) {
           this.checkGenerateKey.apply(this, args);
           return this.onGenerateKey.apply(this, args);
         }
-        checkGenerateKey(algorithm, extractable, keyUsages, ...args) {
+        checkGenerateKey(algorithm, _extractable, keyUsages, ..._args) {
           this.checkAlgorithmName(algorithm);
           this.checkGenerateKeyParams(algorithm);
           if (!(keyUsages && keyUsages.length)) {
@@ -15342,64 +15645,64 @@ ${values.join("\n")}` : `${blockName} :`;
           }
           this.checkKeyUsages(keyUsages, allowedUsages);
         }
-        checkGenerateKeyParams(algorithm) {
+        checkGenerateKeyParams(_algorithm) {
         }
-        async onGenerateKey(algorithm, extractable, keyUsages, ...args) {
+        async onGenerateKey(_algorithm, _extractable, _keyUsages, ..._args) {
           throw new UnsupportedOperationError("generateKey");
         }
         async sign(...args) {
           this.checkSign.apply(this, args);
           return this.onSign.apply(this, args);
         }
-        checkSign(algorithm, key, data, ...args) {
+        checkSign(algorithm, key, _data, ..._args) {
           this.checkAlgorithmName(algorithm);
           this.checkAlgorithmParams(algorithm);
           this.checkCryptoKey(key, "sign");
         }
-        async onSign(algorithm, key, data, ...args) {
+        async onSign(_algorithm, _key, _data, ..._args) {
           throw new UnsupportedOperationError("sign");
         }
         async verify(...args) {
           this.checkVerify.apply(this, args);
           return this.onVerify.apply(this, args);
         }
-        checkVerify(algorithm, key, signature, data, ...args) {
+        checkVerify(algorithm, key, _signature, _data, ..._args) {
           this.checkAlgorithmName(algorithm);
           this.checkAlgorithmParams(algorithm);
           this.checkCryptoKey(key, "verify");
         }
-        async onVerify(algorithm, key, signature, data, ...args) {
+        async onVerify(_algorithm, _key, _signature, _data, ..._args) {
           throw new UnsupportedOperationError("verify");
         }
         async encrypt(...args) {
           this.checkEncrypt.apply(this, args);
           return this.onEncrypt.apply(this, args);
         }
-        checkEncrypt(algorithm, key, data, options2 = {}, ...args) {
+        checkEncrypt(algorithm, key, _data, options2 = {}, ..._args) {
           this.checkAlgorithmName(algorithm);
           this.checkAlgorithmParams(algorithm);
           this.checkCryptoKey(key, options2.keyUsage ? "encrypt" : void 0);
         }
-        async onEncrypt(algorithm, key, data, ...args) {
+        async onEncrypt(_algorithm, _key, _data, ..._args) {
           throw new UnsupportedOperationError("encrypt");
         }
         async decrypt(...args) {
           this.checkDecrypt.apply(this, args);
           return this.onDecrypt.apply(this, args);
         }
-        checkDecrypt(algorithm, key, data, options2 = {}, ...args) {
+        checkDecrypt(algorithm, key, _data, options2 = {}, ..._args) {
           this.checkAlgorithmName(algorithm);
           this.checkAlgorithmParams(algorithm);
           this.checkCryptoKey(key, options2.keyUsage ? "decrypt" : void 0);
         }
-        async onDecrypt(algorithm, key, data, ...args) {
+        async onDecrypt(_algorithm, _key, _data, ..._args) {
           throw new UnsupportedOperationError("decrypt");
         }
         async deriveBits(...args) {
           this.checkDeriveBits.apply(this, args);
           return this.onDeriveBits.apply(this, args);
         }
-        checkDeriveBits(algorithm, baseKey, length, options2 = {}, ...args) {
+        checkDeriveBits(algorithm, baseKey, length, options2 = {}, ..._args) {
           this.checkAlgorithmName(algorithm);
           this.checkAlgorithmParams(algorithm);
           this.checkCryptoKey(baseKey, options2.keyUsage ? "deriveBits" : void 0);
@@ -15407,28 +15710,28 @@ ${values.join("\n")}` : `${blockName} :`;
             throw new OperationError("length: Is not multiple of 8");
           }
         }
-        async onDeriveBits(algorithm, baseKey, length, ...args) {
+        async onDeriveBits(_algorithm, _baseKey, _length, ..._args) {
           throw new UnsupportedOperationError("deriveBits");
         }
         async exportKey(...args) {
           this.checkExportKey.apply(this, args);
           return this.onExportKey.apply(this, args);
         }
-        checkExportKey(format2, key, ...args) {
+        checkExportKey(format2, key, ..._args) {
           this.checkKeyFormat(format2);
           this.checkCryptoKey(key);
           if (!key.extractable) {
             throw new CryptoError("key: Is not extractable");
           }
         }
-        async onExportKey(format2, key, ...args) {
+        async onExportKey(_format, _key, ..._args) {
           throw new UnsupportedOperationError("exportKey");
         }
         async importKey(...args) {
           this.checkImportKey.apply(this, args);
           return this.onImportKey.apply(this, args);
         }
-        checkImportKey(format2, keyData, algorithm, extractable, keyUsages, ...args) {
+        checkImportKey(format2, keyData, algorithm, _extractable, keyUsages, ..._args) {
           this.checkKeyFormat(format2);
           this.checkKeyData(format2, keyData);
           this.checkAlgorithmName(algorithm);
@@ -15437,7 +15740,7 @@ ${values.join("\n")}` : `${blockName} :`;
             this.checkKeyUsages(keyUsages, this.usages);
           }
         }
-        async onImportKey(format2, keyData, algorithm, extractable, keyUsages, ...args) {
+        async onImportKey(_format, _keyData, _algorithm, _extractable, _keyUsages, ..._args) {
           throw new UnsupportedOperationError("importKey");
         }
         checkAlgorithmName(algorithm) {
@@ -15445,9 +15748,9 @@ ${values.join("\n")}` : `${blockName} :`;
             throw new AlgorithmError("Unrecognized name");
           }
         }
-        checkAlgorithmParams(algorithm) {
+        checkAlgorithmParams(_algorithm) {
         }
-        checkDerivedKeyParams(algorithm) {
+        checkDerivedKeyParams(_algorithm) {
         }
         checkKeyUsages(usages, allowed) {
           for (const usage of usages) {
@@ -15475,7 +15778,7 @@ ${values.join("\n")}` : `${blockName} :`;
           }
           throw new OperationError(`hash: Must be one of ${hashAlgorithms.join(", ")}`);
         }
-        checkImportParams(algorithm) {
+        checkImportParams(_algorithm) {
         }
         checkKeyFormat(format2) {
           switch (format2) {
@@ -15962,11 +16265,11 @@ ${values.join("\n")}` : `${blockName} :`;
             throw new CryptoError("Wrong ECPoint. Current version supports only Uncompressed (0x04) point");
           }
           bytes = new Uint8Array(this.value.slice(1));
-          const size2 = bytes.length / 2;
+          const size3 = bytes.length / 2;
           const offset3 = 0;
           const json = {
-            x: import_pvtsutils4.Convert.ToBase64Url(bytes.buffer.slice(offset3, offset3 + size2)),
-            y: import_pvtsutils4.Convert.ToBase64Url(bytes.buffer.slice(offset3 + size2, offset3 + size2 + size2))
+            x: import_pvtsutils4.Convert.ToBase64Url(bytes.buffer.slice(offset3, offset3 + size3)),
+            y: import_pvtsutils4.Convert.ToBase64Url(bytes.buffer.slice(offset3 + size3, offset3 + size3 + size3))
           };
           return json;
         }
@@ -16065,38 +16368,38 @@ ${values.join("\n")}` : `${blockName} :`;
           return { x: xb, y: yb };
         }
         static encodePoint(point, pointSize) {
-          const size2 = Math.ceil(pointSize / 8);
-          if (point.x.byteLength !== size2 || point.y.byteLength !== size2) {
+          const size3 = Math.ceil(pointSize / 8);
+          if (point.x.byteLength !== size3 || point.y.byteLength !== size3) {
             throw new Error("X,Y coordinates don't match point size criteria");
           }
           const x = import_pvtsutils4.BufferSourceConverter.toUint8Array(point.x);
           const y = import_pvtsutils4.BufferSourceConverter.toUint8Array(point.y);
-          const res = new Uint8Array(size2 * 2 + 1);
+          const res = new Uint8Array(size3 * 2 + 1);
           res[0] = 4;
           res.set(x, 1);
-          res.set(y, size2 + 1);
+          res.set(y, size3 + 1);
           return res;
         }
         static getSize(pointSize) {
           return Math.ceil(pointSize / 8);
         }
         static encodeSignature(signature, pointSize) {
-          const size2 = this.getSize(pointSize);
+          const size3 = this.getSize(pointSize);
           const r = import_pvtsutils4.BufferSourceConverter.toUint8Array(signature.r);
           const s = import_pvtsutils4.BufferSourceConverter.toUint8Array(signature.s);
-          const res = new Uint8Array(size2 * 2);
-          res.set(this.padStart(r, size2));
-          res.set(this.padStart(s, size2), size2);
+          const res = new Uint8Array(size3 * 2);
+          res.set(this.padStart(r, size3));
+          res.set(this.padStart(s, size3), size3);
           return res;
         }
         static decodeSignature(data, pointSize) {
-          const size2 = this.getSize(pointSize);
+          const size3 = this.getSize(pointSize);
           const view = import_pvtsutils4.BufferSourceConverter.toUint8Array(data);
-          if (view.length !== size2 * 2) {
+          if (view.length !== size3 * 2) {
             throw new Error("Incorrect size of the signature");
           }
-          const r = view.slice(0, size2);
-          const s = view.slice(size2);
+          const r = view.slice(0, size3);
+          const s = view.slice(size3);
           return {
             r: this.trimStart(r),
             s: this.trimStart(s)
@@ -16112,12 +16415,12 @@ ${values.join("\n")}` : `${blockName} :`;
           }
           return data.slice(i, data.length);
         }
-        static padStart(data, size2) {
-          if (size2 === data.length) {
+        static padStart(data, size3) {
+          if (size3 === data.length) {
             return data;
           }
-          const res = new Uint8Array(size2);
-          res.set(data, size2 - data.length);
+          const res = new Uint8Array(size3);
+          res.set(data, size3 - data.length);
           return res;
         }
       };
@@ -16394,7 +16697,7 @@ ${values.join("\n")}` : `${blockName} :`;
           }
         }
         checkImportKey(format2, keyData, algorithm, extractable, keyUsages, ...args) {
-          super.checkImportKey(format2, keyData, algorithm, extractable, keyUsages);
+          super.checkImportKey(format2, keyData, algorithm, extractable, keyUsages, ...args);
           if (extractable) {
             throw new SyntaxError("extractable: Must be 'false'");
           }
@@ -16420,7 +16723,7 @@ ${values.join("\n")}` : `${blockName} :`;
           }
         }
         checkImportKey(format2, keyData, algorithm, extractable, keyUsages, ...args) {
-          super.checkImportKey(format2, keyData, algorithm, extractable, keyUsages);
+          super.checkImportKey(format2, keyData, algorithm, extractable, keyUsages, ...args);
           if (extractable) {
             throw new SyntaxError("extractable: Must be 'false'");
           }
@@ -16644,9 +16947,9 @@ ${values.join("\n")}` : `${blockName} :`;
           }
           return this.importKey(format2, keyData, unwrappedKeyAlgorithm, extractable, keyUsages, ...args);
         }
-        checkRequiredArguments(args, size2, methodName) {
-          if (args.length < size2) {
-            throw new TypeError(`Failed to execute '${methodName}' on 'SubtleCrypto': ${size2} arguments required, but only ${args.length} present`);
+        checkRequiredArguments(args, size3, methodName) {
+          if (args.length < size3) {
+            throw new TypeError(`Failed to execute '${methodName}' on 'SubtleCrypto': ${size3} arguments required, but only ${args.length} present`);
           }
         }
         prepareAlgorithm(algorithm) {
@@ -16678,7 +16981,1665 @@ ${values.join("\n")}` : `${blockName} :`;
     }
   });
 
-  // node_modules/.pnpm/@peculiar+webcrypto@1.4.3/node_modules/@peculiar/webcrypto/build/webcrypto.es.js
+  // node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js
+  var require_base64_js = __commonJS({
+    "node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js"(exports) {
+      "use strict";
+      exports.byteLength = byteLength;
+      exports.toByteArray = toByteArray;
+      exports.fromByteArray = fromByteArray;
+      var lookup = [];
+      var revLookup = [];
+      var Arr = typeof Uint8Array !== "undefined" ? Uint8Array : Array;
+      var code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+      for (i = 0, len = code.length; i < len; ++i) {
+        lookup[i] = code[i];
+        revLookup[code.charCodeAt(i)] = i;
+      }
+      var i;
+      var len;
+      revLookup["-".charCodeAt(0)] = 62;
+      revLookup["_".charCodeAt(0)] = 63;
+      function getLens(b64) {
+        var len2 = b64.length;
+        if (len2 % 4 > 0) {
+          throw new Error("Invalid string. Length must be a multiple of 4");
+        }
+        var validLen = b64.indexOf("=");
+        if (validLen === -1)
+          validLen = len2;
+        var placeHoldersLen = validLen === len2 ? 0 : 4 - validLen % 4;
+        return [validLen, placeHoldersLen];
+      }
+      function byteLength(b64) {
+        var lens = getLens(b64);
+        var validLen = lens[0];
+        var placeHoldersLen = lens[1];
+        return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;
+      }
+      function _byteLength(b64, validLen, placeHoldersLen) {
+        return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;
+      }
+      function toByteArray(b64) {
+        var tmp;
+        var lens = getLens(b64);
+        var validLen = lens[0];
+        var placeHoldersLen = lens[1];
+        var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));
+        var curByte = 0;
+        var len2 = placeHoldersLen > 0 ? validLen - 4 : validLen;
+        var i2;
+        for (i2 = 0; i2 < len2; i2 += 4) {
+          tmp = revLookup[b64.charCodeAt(i2)] << 18 | revLookup[b64.charCodeAt(i2 + 1)] << 12 | revLookup[b64.charCodeAt(i2 + 2)] << 6 | revLookup[b64.charCodeAt(i2 + 3)];
+          arr[curByte++] = tmp >> 16 & 255;
+          arr[curByte++] = tmp >> 8 & 255;
+          arr[curByte++] = tmp & 255;
+        }
+        if (placeHoldersLen === 2) {
+          tmp = revLookup[b64.charCodeAt(i2)] << 2 | revLookup[b64.charCodeAt(i2 + 1)] >> 4;
+          arr[curByte++] = tmp & 255;
+        }
+        if (placeHoldersLen === 1) {
+          tmp = revLookup[b64.charCodeAt(i2)] << 10 | revLookup[b64.charCodeAt(i2 + 1)] << 4 | revLookup[b64.charCodeAt(i2 + 2)] >> 2;
+          arr[curByte++] = tmp >> 8 & 255;
+          arr[curByte++] = tmp & 255;
+        }
+        return arr;
+      }
+      function tripletToBase64(num) {
+        return lookup[num >> 18 & 63] + lookup[num >> 12 & 63] + lookup[num >> 6 & 63] + lookup[num & 63];
+      }
+      function encodeChunk(uint8, start2, end2) {
+        var tmp;
+        var output = [];
+        for (var i2 = start2; i2 < end2; i2 += 3) {
+          tmp = (uint8[i2] << 16 & 16711680) + (uint8[i2 + 1] << 8 & 65280) + (uint8[i2 + 2] & 255);
+          output.push(tripletToBase64(tmp));
+        }
+        return output.join("");
+      }
+      function fromByteArray(uint8) {
+        var tmp;
+        var len2 = uint8.length;
+        var extraBytes = len2 % 3;
+        var parts = [];
+        var maxChunkLength = 16383;
+        for (var i2 = 0, len22 = len2 - extraBytes; i2 < len22; i2 += maxChunkLength) {
+          parts.push(encodeChunk(uint8, i2, i2 + maxChunkLength > len22 ? len22 : i2 + maxChunkLength));
+        }
+        if (extraBytes === 1) {
+          tmp = uint8[len2 - 1];
+          parts.push(
+            lookup[tmp >> 2] + lookup[tmp << 4 & 63] + "=="
+          );
+        } else if (extraBytes === 2) {
+          tmp = (uint8[len2 - 2] << 8) + uint8[len2 - 1];
+          parts.push(
+            lookup[tmp >> 10] + lookup[tmp >> 4 & 63] + lookup[tmp << 2 & 63] + "="
+          );
+        }
+        return parts.join("");
+      }
+    }
+  });
+
+  // node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js
+  var require_ieee754 = __commonJS({
+    "node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js"(exports) {
+      exports.read = function(buffer, offset3, isLE, mLen, nBytes) {
+        var e, m;
+        var eLen = nBytes * 8 - mLen - 1;
+        var eMax = (1 << eLen) - 1;
+        var eBias = eMax >> 1;
+        var nBits = -7;
+        var i = isLE ? nBytes - 1 : 0;
+        var d2 = isLE ? -1 : 1;
+        var s = buffer[offset3 + i];
+        i += d2;
+        e = s & (1 << -nBits) - 1;
+        s >>= -nBits;
+        nBits += eLen;
+        for (; nBits > 0; e = e * 256 + buffer[offset3 + i], i += d2, nBits -= 8) {
+        }
+        m = e & (1 << -nBits) - 1;
+        e >>= -nBits;
+        nBits += mLen;
+        for (; nBits > 0; m = m * 256 + buffer[offset3 + i], i += d2, nBits -= 8) {
+        }
+        if (e === 0) {
+          e = 1 - eBias;
+        } else if (e === eMax) {
+          return m ? NaN : (s ? -1 : 1) * Infinity;
+        } else {
+          m = m + Math.pow(2, mLen);
+          e = e - eBias;
+        }
+        return (s ? -1 : 1) * m * Math.pow(2, e - mLen);
+      };
+      exports.write = function(buffer, value, offset3, isLE, mLen, nBytes) {
+        var e, m, c;
+        var eLen = nBytes * 8 - mLen - 1;
+        var eMax = (1 << eLen) - 1;
+        var eBias = eMax >> 1;
+        var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;
+        var i = isLE ? 0 : nBytes - 1;
+        var d2 = isLE ? 1 : -1;
+        var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;
+        value = Math.abs(value);
+        if (isNaN(value) || value === Infinity) {
+          m = isNaN(value) ? 1 : 0;
+          e = eMax;
+        } else {
+          e = Math.floor(Math.log(value) / Math.LN2);
+          if (value * (c = Math.pow(2, -e)) < 1) {
+            e--;
+            c *= 2;
+          }
+          if (e + eBias >= 1) {
+            value += rt / c;
+          } else {
+            value += rt * Math.pow(2, 1 - eBias);
+          }
+          if (value * c >= 2) {
+            e++;
+            c /= 2;
+          }
+          if (e + eBias >= eMax) {
+            m = 0;
+            e = eMax;
+          } else if (e + eBias >= 1) {
+            m = (value * c - 1) * Math.pow(2, mLen);
+            e = e + eBias;
+          } else {
+            m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
+            e = 0;
+          }
+        }
+        for (; mLen >= 8; buffer[offset3 + i] = m & 255, i += d2, m /= 256, mLen -= 8) {
+        }
+        e = e << mLen | m;
+        eLen += mLen;
+        for (; eLen > 0; buffer[offset3 + i] = e & 255, i += d2, e /= 256, eLen -= 8) {
+        }
+        buffer[offset3 + i - d2] |= s * 128;
+      };
+    }
+  });
+
+  // node_modules/.pnpm/buffer@5.7.1/node_modules/buffer/index.js
+  var require_buffer = __commonJS({
+    "node_modules/.pnpm/buffer@5.7.1/node_modules/buffer/index.js"(exports) {
+      "use strict";
+      var base64 = require_base64_js();
+      var ieee754 = require_ieee754();
+      var customInspectSymbol = typeof Symbol === "function" && typeof Symbol["for"] === "function" ? Symbol["for"]("nodejs.util.inspect.custom") : null;
+      exports.Buffer = Buffer3;
+      exports.SlowBuffer = SlowBuffer;
+      exports.INSPECT_MAX_BYTES = 50;
+      var K_MAX_LENGTH = 2147483647;
+      exports.kMaxLength = K_MAX_LENGTH;
+      Buffer3.TYPED_ARRAY_SUPPORT = typedArraySupport();
+      if (!Buffer3.TYPED_ARRAY_SUPPORT && typeof console !== "undefined" && typeof console.error === "function") {
+        console.error(
+          "This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."
+        );
+      }
+      function typedArraySupport() {
+        try {
+          var arr = new Uint8Array(1);
+          var proto = { foo: function() {
+            return 42;
+          } };
+          Object.setPrototypeOf(proto, Uint8Array.prototype);
+          Object.setPrototypeOf(arr, proto);
+          return arr.foo() === 42;
+        } catch (e) {
+          return false;
+        }
+      }
+      Object.defineProperty(Buffer3.prototype, "parent", {
+        enumerable: true,
+        get: function() {
+          if (!Buffer3.isBuffer(this))
+            return void 0;
+          return this.buffer;
+        }
+      });
+      Object.defineProperty(Buffer3.prototype, "offset", {
+        enumerable: true,
+        get: function() {
+          if (!Buffer3.isBuffer(this))
+            return void 0;
+          return this.byteOffset;
+        }
+      });
+      function createBuffer(length) {
+        if (length > K_MAX_LENGTH) {
+          throw new RangeError('The value "' + length + '" is invalid for option "size"');
+        }
+        var buf = new Uint8Array(length);
+        Object.setPrototypeOf(buf, Buffer3.prototype);
+        return buf;
+      }
+      function Buffer3(arg, encodingOrOffset, length) {
+        if (typeof arg === "number") {
+          if (typeof encodingOrOffset === "string") {
+            throw new TypeError(
+              'The "string" argument must be of type string. Received type number'
+            );
+          }
+          return allocUnsafe(arg);
+        }
+        return from(arg, encodingOrOffset, length);
+      }
+      Buffer3.poolSize = 8192;
+      function from(value, encodingOrOffset, length) {
+        if (typeof value === "string") {
+          return fromString(value, encodingOrOffset);
+        }
+        if (ArrayBuffer.isView(value)) {
+          return fromArrayView(value);
+        }
+        if (value == null) {
+          throw new TypeError(
+            "The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof value
+          );
+        }
+        if (isInstance2(value, ArrayBuffer) || value && isInstance2(value.buffer, ArrayBuffer)) {
+          return fromArrayBuffer(value, encodingOrOffset, length);
+        }
+        if (typeof SharedArrayBuffer !== "undefined" && (isInstance2(value, SharedArrayBuffer) || value && isInstance2(value.buffer, SharedArrayBuffer))) {
+          return fromArrayBuffer(value, encodingOrOffset, length);
+        }
+        if (typeof value === "number") {
+          throw new TypeError(
+            'The "value" argument must not be of type number. Received type number'
+          );
+        }
+        var valueOf = value.valueOf && value.valueOf();
+        if (valueOf != null && valueOf !== value) {
+          return Buffer3.from(valueOf, encodingOrOffset, length);
+        }
+        var b = fromObject(value);
+        if (b)
+          return b;
+        if (typeof Symbol !== "undefined" && Symbol.toPrimitive != null && typeof value[Symbol.toPrimitive] === "function") {
+          return Buffer3.from(
+            value[Symbol.toPrimitive]("string"),
+            encodingOrOffset,
+            length
+          );
+        }
+        throw new TypeError(
+          "The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof value
+        );
+      }
+      Buffer3.from = function(value, encodingOrOffset, length) {
+        return from(value, encodingOrOffset, length);
+      };
+      Object.setPrototypeOf(Buffer3.prototype, Uint8Array.prototype);
+      Object.setPrototypeOf(Buffer3, Uint8Array);
+      function assertSize(size3) {
+        if (typeof size3 !== "number") {
+          throw new TypeError('"size" argument must be of type number');
+        } else if (size3 < 0) {
+          throw new RangeError('The value "' + size3 + '" is invalid for option "size"');
+        }
+      }
+      function alloc(size3, fill, encoding) {
+        assertSize(size3);
+        if (size3 <= 0) {
+          return createBuffer(size3);
+        }
+        if (fill !== void 0) {
+          return typeof encoding === "string" ? createBuffer(size3).fill(fill, encoding) : createBuffer(size3).fill(fill);
+        }
+        return createBuffer(size3);
+      }
+      Buffer3.alloc = function(size3, fill, encoding) {
+        return alloc(size3, fill, encoding);
+      };
+      function allocUnsafe(size3) {
+        assertSize(size3);
+        return createBuffer(size3 < 0 ? 0 : checked(size3) | 0);
+      }
+      Buffer3.allocUnsafe = function(size3) {
+        return allocUnsafe(size3);
+      };
+      Buffer3.allocUnsafeSlow = function(size3) {
+        return allocUnsafe(size3);
+      };
+      function fromString(string, encoding) {
+        if (typeof encoding !== "string" || encoding === "") {
+          encoding = "utf8";
+        }
+        if (!Buffer3.isEncoding(encoding)) {
+          throw new TypeError("Unknown encoding: " + encoding);
+        }
+        var length = byteLength(string, encoding) | 0;
+        var buf = createBuffer(length);
+        var actual = buf.write(string, encoding);
+        if (actual !== length) {
+          buf = buf.slice(0, actual);
+        }
+        return buf;
+      }
+      function fromArrayLike(array) {
+        var length = array.length < 0 ? 0 : checked(array.length) | 0;
+        var buf = createBuffer(length);
+        for (var i = 0; i < length; i += 1) {
+          buf[i] = array[i] & 255;
+        }
+        return buf;
+      }
+      function fromArrayView(arrayView) {
+        if (isInstance2(arrayView, Uint8Array)) {
+          var copy = new Uint8Array(arrayView);
+          return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength);
+        }
+        return fromArrayLike(arrayView);
+      }
+      function fromArrayBuffer(array, byteOffset, length) {
+        if (byteOffset < 0 || array.byteLength < byteOffset) {
+          throw new RangeError('"offset" is outside of buffer bounds');
+        }
+        if (array.byteLength < byteOffset + (length || 0)) {
+          throw new RangeError('"length" is outside of buffer bounds');
+        }
+        var buf;
+        if (byteOffset === void 0 && length === void 0) {
+          buf = new Uint8Array(array);
+        } else if (length === void 0) {
+          buf = new Uint8Array(array, byteOffset);
+        } else {
+          buf = new Uint8Array(array, byteOffset, length);
+        }
+        Object.setPrototypeOf(buf, Buffer3.prototype);
+        return buf;
+      }
+      function fromObject(obj) {
+        if (Buffer3.isBuffer(obj)) {
+          var len = checked(obj.length) | 0;
+          var buf = createBuffer(len);
+          if (buf.length === 0) {
+            return buf;
+          }
+          obj.copy(buf, 0, 0, len);
+          return buf;
+        }
+        if (obj.length !== void 0) {
+          if (typeof obj.length !== "number" || numberIsNaN(obj.length)) {
+            return createBuffer(0);
+          }
+          return fromArrayLike(obj);
+        }
+        if (obj.type === "Buffer" && Array.isArray(obj.data)) {
+          return fromArrayLike(obj.data);
+        }
+      }
+      function checked(length) {
+        if (length >= K_MAX_LENGTH) {
+          throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x" + K_MAX_LENGTH.toString(16) + " bytes");
+        }
+        return length | 0;
+      }
+      function SlowBuffer(length) {
+        if (+length != length) {
+          length = 0;
+        }
+        return Buffer3.alloc(+length);
+      }
+      Buffer3.isBuffer = function isBuffer(b) {
+        return b != null && b._isBuffer === true && b !== Buffer3.prototype;
+      };
+      Buffer3.compare = function compare(a2, b) {
+        if (isInstance2(a2, Uint8Array))
+          a2 = Buffer3.from(a2, a2.offset, a2.byteLength);
+        if (isInstance2(b, Uint8Array))
+          b = Buffer3.from(b, b.offset, b.byteLength);
+        if (!Buffer3.isBuffer(a2) || !Buffer3.isBuffer(b)) {
+          throw new TypeError(
+            'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array'
+          );
+        }
+        if (a2 === b)
+          return 0;
+        var x = a2.length;
+        var y = b.length;
+        for (var i = 0, len = Math.min(x, y); i < len; ++i) {
+          if (a2[i] !== b[i]) {
+            x = a2[i];
+            y = b[i];
+            break;
+          }
+        }
+        if (x < y)
+          return -1;
+        if (y < x)
+          return 1;
+        return 0;
+      };
+      Buffer3.isEncoding = function isEncoding(encoding) {
+        switch (String(encoding).toLowerCase()) {
+          case "hex":
+          case "utf8":
+          case "utf-8":
+          case "ascii":
+          case "latin1":
+          case "binary":
+          case "base64":
+          case "ucs2":
+          case "ucs-2":
+          case "utf16le":
+          case "utf-16le":
+            return true;
+          default:
+            return false;
+        }
+      };
+      Buffer3.concat = function concat2(list, length) {
+        if (!Array.isArray(list)) {
+          throw new TypeError('"list" argument must be an Array of Buffers');
+        }
+        if (list.length === 0) {
+          return Buffer3.alloc(0);
+        }
+        var i;
+        if (length === void 0) {
+          length = 0;
+          for (i = 0; i < list.length; ++i) {
+            length += list[i].length;
+          }
+        }
+        var buffer = Buffer3.allocUnsafe(length);
+        var pos = 0;
+        for (i = 0; i < list.length; ++i) {
+          var buf = list[i];
+          if (isInstance2(buf, Uint8Array)) {
+            if (pos + buf.length > buffer.length) {
+              Buffer3.from(buf).copy(buffer, pos);
+            } else {
+              Uint8Array.prototype.set.call(
+                buffer,
+                buf,
+                pos
+              );
+            }
+          } else if (!Buffer3.isBuffer(buf)) {
+            throw new TypeError('"list" argument must be an Array of Buffers');
+          } else {
+            buf.copy(buffer, pos);
+          }
+          pos += buf.length;
+        }
+        return buffer;
+      };
+      function byteLength(string, encoding) {
+        if (Buffer3.isBuffer(string)) {
+          return string.length;
+        }
+        if (ArrayBuffer.isView(string) || isInstance2(string, ArrayBuffer)) {
+          return string.byteLength;
+        }
+        if (typeof string !== "string") {
+          throw new TypeError(
+            'The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type ' + typeof string
+          );
+        }
+        var len = string.length;
+        var mustMatch = arguments.length > 2 && arguments[2] === true;
+        if (!mustMatch && len === 0)
+          return 0;
+        var loweredCase = false;
+        for (; ; ) {
+          switch (encoding) {
+            case "ascii":
+            case "latin1":
+            case "binary":
+              return len;
+            case "utf8":
+            case "utf-8":
+              return utf8ToBytes(string).length;
+            case "ucs2":
+            case "ucs-2":
+            case "utf16le":
+            case "utf-16le":
+              return len * 2;
+            case "hex":
+              return len >>> 1;
+            case "base64":
+              return base64ToBytes(string).length;
+            default:
+              if (loweredCase) {
+                return mustMatch ? -1 : utf8ToBytes(string).length;
+              }
+              encoding = ("" + encoding).toLowerCase();
+              loweredCase = true;
+          }
+        }
+      }
+      Buffer3.byteLength = byteLength;
+      function slowToString(encoding, start2, end2) {
+        var loweredCase = false;
+        if (start2 === void 0 || start2 < 0) {
+          start2 = 0;
+        }
+        if (start2 > this.length) {
+          return "";
+        }
+        if (end2 === void 0 || end2 > this.length) {
+          end2 = this.length;
+        }
+        if (end2 <= 0) {
+          return "";
+        }
+        end2 >>>= 0;
+        start2 >>>= 0;
+        if (end2 <= start2) {
+          return "";
+        }
+        if (!encoding)
+          encoding = "utf8";
+        while (true) {
+          switch (encoding) {
+            case "hex":
+              return hexSlice(this, start2, end2);
+            case "utf8":
+            case "utf-8":
+              return utf8Slice(this, start2, end2);
+            case "ascii":
+              return asciiSlice(this, start2, end2);
+            case "latin1":
+            case "binary":
+              return latin1Slice(this, start2, end2);
+            case "base64":
+              return base64Slice(this, start2, end2);
+            case "ucs2":
+            case "ucs-2":
+            case "utf16le":
+            case "utf-16le":
+              return utf16leSlice(this, start2, end2);
+            default:
+              if (loweredCase)
+                throw new TypeError("Unknown encoding: " + encoding);
+              encoding = (encoding + "").toLowerCase();
+              loweredCase = true;
+          }
+        }
+      }
+      Buffer3.prototype._isBuffer = true;
+      function swap(b, n, m) {
+        var i = b[n];
+        b[n] = b[m];
+        b[m] = i;
+      }
+      Buffer3.prototype.swap16 = function swap16() {
+        var len = this.length;
+        if (len % 2 !== 0) {
+          throw new RangeError("Buffer size must be a multiple of 16-bits");
+        }
+        for (var i = 0; i < len; i += 2) {
+          swap(this, i, i + 1);
+        }
+        return this;
+      };
+      Buffer3.prototype.swap32 = function swap32() {
+        var len = this.length;
+        if (len % 4 !== 0) {
+          throw new RangeError("Buffer size must be a multiple of 32-bits");
+        }
+        for (var i = 0; i < len; i += 4) {
+          swap(this, i, i + 3);
+          swap(this, i + 1, i + 2);
+        }
+        return this;
+      };
+      Buffer3.prototype.swap64 = function swap64() {
+        var len = this.length;
+        if (len % 8 !== 0) {
+          throw new RangeError("Buffer size must be a multiple of 64-bits");
+        }
+        for (var i = 0; i < len; i += 8) {
+          swap(this, i, i + 7);
+          swap(this, i + 1, i + 6);
+          swap(this, i + 2, i + 5);
+          swap(this, i + 3, i + 4);
+        }
+        return this;
+      };
+      Buffer3.prototype.toString = function toString() {
+        var length = this.length;
+        if (length === 0)
+          return "";
+        if (arguments.length === 0)
+          return utf8Slice(this, 0, length);
+        return slowToString.apply(this, arguments);
+      };
+      Buffer3.prototype.toLocaleString = Buffer3.prototype.toString;
+      Buffer3.prototype.equals = function equals(b) {
+        if (!Buffer3.isBuffer(b))
+          throw new TypeError("Argument must be a Buffer");
+        if (this === b)
+          return true;
+        return Buffer3.compare(this, b) === 0;
+      };
+      Buffer3.prototype.inspect = function inspect() {
+        var str = "";
+        var max3 = exports.INSPECT_MAX_BYTES;
+        str = this.toString("hex", 0, max3).replace(/(.{2})/g, "$1 ").trim();
+        if (this.length > max3)
+          str += " ... ";
+        return "<Buffer " + str + ">";
+      };
+      if (customInspectSymbol) {
+        Buffer3.prototype[customInspectSymbol] = Buffer3.prototype.inspect;
+      }
+      Buffer3.prototype.compare = function compare(target, start2, end2, thisStart, thisEnd) {
+        if (isInstance2(target, Uint8Array)) {
+          target = Buffer3.from(target, target.offset, target.byteLength);
+        }
+        if (!Buffer3.isBuffer(target)) {
+          throw new TypeError(
+            'The "target" argument must be one of type Buffer or Uint8Array. Received type ' + typeof target
+          );
+        }
+        if (start2 === void 0) {
+          start2 = 0;
+        }
+        if (end2 === void 0) {
+          end2 = target ? target.length : 0;
+        }
+        if (thisStart === void 0) {
+          thisStart = 0;
+        }
+        if (thisEnd === void 0) {
+          thisEnd = this.length;
+        }
+        if (start2 < 0 || end2 > target.length || thisStart < 0 || thisEnd > this.length) {
+          throw new RangeError("out of range index");
+        }
+        if (thisStart >= thisEnd && start2 >= end2) {
+          return 0;
+        }
+        if (thisStart >= thisEnd) {
+          return -1;
+        }
+        if (start2 >= end2) {
+          return 1;
+        }
+        start2 >>>= 0;
+        end2 >>>= 0;
+        thisStart >>>= 0;
+        thisEnd >>>= 0;
+        if (this === target)
+          return 0;
+        var x = thisEnd - thisStart;
+        var y = end2 - start2;
+        var len = Math.min(x, y);
+        var thisCopy = this.slice(thisStart, thisEnd);
+        var targetCopy = target.slice(start2, end2);
+        for (var i = 0; i < len; ++i) {
+          if (thisCopy[i] !== targetCopy[i]) {
+            x = thisCopy[i];
+            y = targetCopy[i];
+            break;
+          }
+        }
+        if (x < y)
+          return -1;
+        if (y < x)
+          return 1;
+        return 0;
+      };
+      function bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {
+        if (buffer.length === 0)
+          return -1;
+        if (typeof byteOffset === "string") {
+          encoding = byteOffset;
+          byteOffset = 0;
+        } else if (byteOffset > 2147483647) {
+          byteOffset = 2147483647;
+        } else if (byteOffset < -2147483648) {
+          byteOffset = -2147483648;
+        }
+        byteOffset = +byteOffset;
+        if (numberIsNaN(byteOffset)) {
+          byteOffset = dir ? 0 : buffer.length - 1;
+        }
+        if (byteOffset < 0)
+          byteOffset = buffer.length + byteOffset;
+        if (byteOffset >= buffer.length) {
+          if (dir)
+            return -1;
+          else
+            byteOffset = buffer.length - 1;
+        } else if (byteOffset < 0) {
+          if (dir)
+            byteOffset = 0;
+          else
+            return -1;
+        }
+        if (typeof val === "string") {
+          val = Buffer3.from(val, encoding);
+        }
+        if (Buffer3.isBuffer(val)) {
+          if (val.length === 0) {
+            return -1;
+          }
+          return arrayIndexOf(buffer, val, byteOffset, encoding, dir);
+        } else if (typeof val === "number") {
+          val = val & 255;
+          if (typeof Uint8Array.prototype.indexOf === "function") {
+            if (dir) {
+              return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset);
+            } else {
+              return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset);
+            }
+          }
+          return arrayIndexOf(buffer, [val], byteOffset, encoding, dir);
+        }
+        throw new TypeError("val must be string, number or Buffer");
+      }
+      function arrayIndexOf(arr, val, byteOffset, encoding, dir) {
+        var indexSize = 1;
+        var arrLength = arr.length;
+        var valLength = val.length;
+        if (encoding !== void 0) {
+          encoding = String(encoding).toLowerCase();
+          if (encoding === "ucs2" || encoding === "ucs-2" || encoding === "utf16le" || encoding === "utf-16le") {
+            if (arr.length < 2 || val.length < 2) {
+              return -1;
+            }
+            indexSize = 2;
+            arrLength /= 2;
+            valLength /= 2;
+            byteOffset /= 2;
+          }
+        }
+        function read2(buf, i2) {
+          if (indexSize === 1) {
+            return buf[i2];
+          } else {
+            return buf.readUInt16BE(i2 * indexSize);
+          }
+        }
+        var i;
+        if (dir) {
+          var foundIndex = -1;
+          for (i = byteOffset; i < arrLength; i++) {
+            if (read2(arr, i) === read2(val, foundIndex === -1 ? 0 : i - foundIndex)) {
+              if (foundIndex === -1)
+                foundIndex = i;
+              if (i - foundIndex + 1 === valLength)
+                return foundIndex * indexSize;
+            } else {
+              if (foundIndex !== -1)
+                i -= i - foundIndex;
+              foundIndex = -1;
+            }
+          }
+        } else {
+          if (byteOffset + valLength > arrLength)
+            byteOffset = arrLength - valLength;
+          for (i = byteOffset; i >= 0; i--) {
+            var found = true;
+            for (var j = 0; j < valLength; j++) {
+              if (read2(arr, i + j) !== read2(val, j)) {
+                found = false;
+                break;
+              }
+            }
+            if (found)
+              return i;
+          }
+        }
+        return -1;
+      }
+      Buffer3.prototype.includes = function includes(val, byteOffset, encoding) {
+        return this.indexOf(val, byteOffset, encoding) !== -1;
+      };
+      Buffer3.prototype.indexOf = function indexOf(val, byteOffset, encoding) {
+        return bidirectionalIndexOf(this, val, byteOffset, encoding, true);
+      };
+      Buffer3.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {
+        return bidirectionalIndexOf(this, val, byteOffset, encoding, false);
+      };
+      function hexWrite(buf, string, offset3, length) {
+        offset3 = Number(offset3) || 0;
+        var remaining = buf.length - offset3;
+        if (!length) {
+          length = remaining;
+        } else {
+          length = Number(length);
+          if (length > remaining) {
+            length = remaining;
+          }
+        }
+        var strLen = string.length;
+        if (length > strLen / 2) {
+          length = strLen / 2;
+        }
+        for (var i = 0; i < length; ++i) {
+          var parsed = parseInt(string.substr(i * 2, 2), 16);
+          if (numberIsNaN(parsed))
+            return i;
+          buf[offset3 + i] = parsed;
+        }
+        return i;
+      }
+      function utf8Write(buf, string, offset3, length) {
+        return blitBuffer(utf8ToBytes(string, buf.length - offset3), buf, offset3, length);
+      }
+      function asciiWrite(buf, string, offset3, length) {
+        return blitBuffer(asciiToBytes(string), buf, offset3, length);
+      }
+      function base64Write(buf, string, offset3, length) {
+        return blitBuffer(base64ToBytes(string), buf, offset3, length);
+      }
+      function ucs2Write(buf, string, offset3, length) {
+        return blitBuffer(utf16leToBytes(string, buf.length - offset3), buf, offset3, length);
+      }
+      Buffer3.prototype.write = function write2(string, offset3, length, encoding) {
+        if (offset3 === void 0) {
+          encoding = "utf8";
+          length = this.length;
+          offset3 = 0;
+        } else if (length === void 0 && typeof offset3 === "string") {
+          encoding = offset3;
+          length = this.length;
+          offset3 = 0;
+        } else if (isFinite(offset3)) {
+          offset3 = offset3 >>> 0;
+          if (isFinite(length)) {
+            length = length >>> 0;
+            if (encoding === void 0)
+              encoding = "utf8";
+          } else {
+            encoding = length;
+            length = void 0;
+          }
+        } else {
+          throw new Error(
+            "Buffer.write(string, encoding, offset[, length]) is no longer supported"
+          );
+        }
+        var remaining = this.length - offset3;
+        if (length === void 0 || length > remaining)
+          length = remaining;
+        if (string.length > 0 && (length < 0 || offset3 < 0) || offset3 > this.length) {
+          throw new RangeError("Attempt to write outside buffer bounds");
+        }
+        if (!encoding)
+          encoding = "utf8";
+        var loweredCase = false;
+        for (; ; ) {
+          switch (encoding) {
+            case "hex":
+              return hexWrite(this, string, offset3, length);
+            case "utf8":
+            case "utf-8":
+              return utf8Write(this, string, offset3, length);
+            case "ascii":
+            case "latin1":
+            case "binary":
+              return asciiWrite(this, string, offset3, length);
+            case "base64":
+              return base64Write(this, string, offset3, length);
+            case "ucs2":
+            case "ucs-2":
+            case "utf16le":
+            case "utf-16le":
+              return ucs2Write(this, string, offset3, length);
+            default:
+              if (loweredCase)
+                throw new TypeError("Unknown encoding: " + encoding);
+              encoding = ("" + encoding).toLowerCase();
+              loweredCase = true;
+          }
+        }
+      };
+      Buffer3.prototype.toJSON = function toJSON() {
+        return {
+          type: "Buffer",
+          data: Array.prototype.slice.call(this._arr || this, 0)
+        };
+      };
+      function base64Slice(buf, start2, end2) {
+        if (start2 === 0 && end2 === buf.length) {
+          return base64.fromByteArray(buf);
+        } else {
+          return base64.fromByteArray(buf.slice(start2, end2));
+        }
+      }
+      function utf8Slice(buf, start2, end2) {
+        end2 = Math.min(buf.length, end2);
+        var res = [];
+        var i = start2;
+        while (i < end2) {
+          var firstByte = buf[i];
+          var codePoint = null;
+          var bytesPerSequence = firstByte > 239 ? 4 : firstByte > 223 ? 3 : firstByte > 191 ? 2 : 1;
+          if (i + bytesPerSequence <= end2) {
+            var secondByte, thirdByte, fourthByte, tempCodePoint;
+            switch (bytesPerSequence) {
+              case 1:
+                if (firstByte < 128) {
+                  codePoint = firstByte;
+                }
+                break;
+              case 2:
+                secondByte = buf[i + 1];
+                if ((secondByte & 192) === 128) {
+                  tempCodePoint = (firstByte & 31) << 6 | secondByte & 63;
+                  if (tempCodePoint > 127) {
+                    codePoint = tempCodePoint;
+                  }
+                }
+                break;
+              case 3:
+                secondByte = buf[i + 1];
+                thirdByte = buf[i + 2];
+                if ((secondByte & 192) === 128 && (thirdByte & 192) === 128) {
+                  tempCodePoint = (firstByte & 15) << 12 | (secondByte & 63) << 6 | thirdByte & 63;
+                  if (tempCodePoint > 2047 && (tempCodePoint < 55296 || tempCodePoint > 57343)) {
+                    codePoint = tempCodePoint;
+                  }
+                }
+                break;
+              case 4:
+                secondByte = buf[i + 1];
+                thirdByte = buf[i + 2];
+                fourthByte = buf[i + 3];
+                if ((secondByte & 192) === 128 && (thirdByte & 192) === 128 && (fourthByte & 192) === 128) {
+                  tempCodePoint = (firstByte & 15) << 18 | (secondByte & 63) << 12 | (thirdByte & 63) << 6 | fourthByte & 63;
+                  if (tempCodePoint > 65535 && tempCodePoint < 1114112) {
+                    codePoint = tempCodePoint;
+                  }
+                }
+            }
+          }
+          if (codePoint === null) {
+            codePoint = 65533;
+            bytesPerSequence = 1;
+          } else if (codePoint > 65535) {
+            codePoint -= 65536;
+            res.push(codePoint >>> 10 & 1023 | 55296);
+            codePoint = 56320 | codePoint & 1023;
+          }
+          res.push(codePoint);
+          i += bytesPerSequence;
+        }
+        return decodeCodePointsArray(res);
+      }
+      var MAX_ARGUMENTS_LENGTH = 4096;
+      function decodeCodePointsArray(codePoints) {
+        var len = codePoints.length;
+        if (len <= MAX_ARGUMENTS_LENGTH) {
+          return String.fromCharCode.apply(String, codePoints);
+        }
+        var res = "";
+        var i = 0;
+        while (i < len) {
+          res += String.fromCharCode.apply(
+            String,
+            codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
+          );
+        }
+        return res;
+      }
+      function asciiSlice(buf, start2, end2) {
+        var ret = "";
+        end2 = Math.min(buf.length, end2);
+        for (var i = start2; i < end2; ++i) {
+          ret += String.fromCharCode(buf[i] & 127);
+        }
+        return ret;
+      }
+      function latin1Slice(buf, start2, end2) {
+        var ret = "";
+        end2 = Math.min(buf.length, end2);
+        for (var i = start2; i < end2; ++i) {
+          ret += String.fromCharCode(buf[i]);
+        }
+        return ret;
+      }
+      function hexSlice(buf, start2, end2) {
+        var len = buf.length;
+        if (!start2 || start2 < 0)
+          start2 = 0;
+        if (!end2 || end2 < 0 || end2 > len)
+          end2 = len;
+        var out = "";
+        for (var i = start2; i < end2; ++i) {
+          out += hexSliceLookupTable[buf[i]];
+        }
+        return out;
+      }
+      function utf16leSlice(buf, start2, end2) {
+        var bytes = buf.slice(start2, end2);
+        var res = "";
+        for (var i = 0; i < bytes.length - 1; i += 2) {
+          res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);
+        }
+        return res;
+      }
+      Buffer3.prototype.slice = function slice(start2, end2) {
+        var len = this.length;
+        start2 = ~~start2;
+        end2 = end2 === void 0 ? len : ~~end2;
+        if (start2 < 0) {
+          start2 += len;
+          if (start2 < 0)
+            start2 = 0;
+        } else if (start2 > len) {
+          start2 = len;
+        }
+        if (end2 < 0) {
+          end2 += len;
+          if (end2 < 0)
+            end2 = 0;
+        } else if (end2 > len) {
+          end2 = len;
+        }
+        if (end2 < start2)
+          end2 = start2;
+        var newBuf = this.subarray(start2, end2);
+        Object.setPrototypeOf(newBuf, Buffer3.prototype);
+        return newBuf;
+      };
+      function checkOffset(offset3, ext, length) {
+        if (offset3 % 1 !== 0 || offset3 < 0)
+          throw new RangeError("offset is not uint");
+        if (offset3 + ext > length)
+          throw new RangeError("Trying to access beyond buffer length");
+      }
+      Buffer3.prototype.readUintLE = Buffer3.prototype.readUIntLE = function readUIntLE(offset3, byteLength2, noAssert) {
+        offset3 = offset3 >>> 0;
+        byteLength2 = byteLength2 >>> 0;
+        if (!noAssert)
+          checkOffset(offset3, byteLength2, this.length);
+        var val = this[offset3];
+        var mul = 1;
+        var i = 0;
+        while (++i < byteLength2 && (mul *= 256)) {
+          val += this[offset3 + i] * mul;
+        }
+        return val;
+      };
+      Buffer3.prototype.readUintBE = Buffer3.prototype.readUIntBE = function readUIntBE(offset3, byteLength2, noAssert) {
+        offset3 = offset3 >>> 0;
+        byteLength2 = byteLength2 >>> 0;
+        if (!noAssert) {
+          checkOffset(offset3, byteLength2, this.length);
+        }
+        var val = this[offset3 + --byteLength2];
+        var mul = 1;
+        while (byteLength2 > 0 && (mul *= 256)) {
+          val += this[offset3 + --byteLength2] * mul;
+        }
+        return val;
+      };
+      Buffer3.prototype.readUint8 = Buffer3.prototype.readUInt8 = function readUInt8(offset3, noAssert) {
+        offset3 = offset3 >>> 0;
+        if (!noAssert)
+          checkOffset(offset3, 1, this.length);
+        return this[offset3];
+      };
+      Buffer3.prototype.readUint16LE = Buffer3.prototype.readUInt16LE = function readUInt16LE(offset3, noAssert) {
+        offset3 = offset3 >>> 0;
+        if (!noAssert)
+          checkOffset(offset3, 2, this.length);
+        return this[offset3] | this[offset3 + 1] << 8;
+      };
+      Buffer3.prototype.readUint16BE = Buffer3.prototype.readUInt16BE = function readUInt16BE(offset3, noAssert) {
+        offset3 = offset3 >>> 0;
+        if (!noAssert)
+          checkOffset(offset3, 2, this.length);
+        return this[offset3] << 8 | this[offset3 + 1];
+      };
+      Buffer3.prototype.readUint32LE = Buffer3.prototype.readUInt32LE = function readUInt32LE(offset3, noAssert) {
+        offset3 = offset3 >>> 0;
+        if (!noAssert)
+          checkOffset(offset3, 4, this.length);
+        return (this[offset3] | this[offset3 + 1] << 8 | this[offset3 + 2] << 16) + this[offset3 + 3] * 16777216;
+      };
+      Buffer3.prototype.readUint32BE = Buffer3.prototype.readUInt32BE = function readUInt32BE(offset3, noAssert) {
+        offset3 = offset3 >>> 0;
+        if (!noAssert)
+          checkOffset(offset3, 4, this.length);
+        return this[offset3] * 16777216 + (this[offset3 + 1] << 16 | this[offset3 + 2] << 8 | this[offset3 + 3]);
+      };
+      Buffer3.prototype.readIntLE = function readIntLE(offset3, byteLength2, noAssert) {
+        offset3 = offset3 >>> 0;
+        byteLength2 = byteLength2 >>> 0;
+        if (!noAssert)
+          checkOffset(offset3, byteLength2, this.length);
+        var val = this[offset3];
+        var mul = 1;
+        var i = 0;
+        while (++i < byteLength2 && (mul *= 256)) {
+          val += this[offset3 + i] * mul;
+        }
+        mul *= 128;
+        if (val >= mul)
+          val -= Math.pow(2, 8 * byteLength2);
+        return val;
+      };
+      Buffer3.prototype.readIntBE = function readIntBE(offset3, byteLength2, noAssert) {
+        offset3 = offset3 >>> 0;
+        byteLength2 = byteLength2 >>> 0;
+        if (!noAssert)
+          checkOffset(offset3, byteLength2, this.length);
+        var i = byteLength2;
+        var mul = 1;
+        var val = this[offset3 + --i];
+        while (i > 0 && (mul *= 256)) {
+          val += this[offset3 + --i] * mul;
+        }
+        mul *= 128;
+        if (val >= mul)
+          val -= Math.pow(2, 8 * byteLength2);
+        return val;
+      };
+      Buffer3.prototype.readInt8 = function readInt8(offset3, noAssert) {
+        offset3 = offset3 >>> 0;
+        if (!noAssert)
+          checkOffset(offset3, 1, this.length);
+        if (!(this[offset3] & 128))
+          return this[offset3];
+        return (255 - this[offset3] + 1) * -1;
+      };
+      Buffer3.prototype.readInt16LE = function readInt16LE(offset3, noAssert) {
+        offset3 = offset3 >>> 0;
+        if (!noAssert)
+          checkOffset(offset3, 2, this.length);
+        var val = this[offset3] | this[offset3 + 1] << 8;
+        return val & 32768 ? val | 4294901760 : val;
+      };
+      Buffer3.prototype.readInt16BE = function readInt16BE(offset3, noAssert) {
+        offset3 = offset3 >>> 0;
+        if (!noAssert)
+          checkOffset(offset3, 2, this.length);
+        var val = this[offset3 + 1] | this[offset3] << 8;
+        return val & 32768 ? val | 4294901760 : val;
+      };
+      Buffer3.prototype.readInt32LE = function readInt32LE(offset3, noAssert) {
+        offset3 = offset3 >>> 0;
+        if (!noAssert)
+          checkOffset(offset3, 4, this.length);
+        return this[offset3] | this[offset3 + 1] << 8 | this[offset3 + 2] << 16 | this[offset3 + 3] << 24;
+      };
+      Buffer3.prototype.readInt32BE = function readInt32BE(offset3, noAssert) {
+        offset3 = offset3 >>> 0;
+        if (!noAssert)
+          checkOffset(offset3, 4, this.length);
+        return this[offset3] << 24 | this[offset3 + 1] << 16 | this[offset3 + 2] << 8 | this[offset3 + 3];
+      };
+      Buffer3.prototype.readFloatLE = function readFloatLE(offset3, noAssert) {
+        offset3 = offset3 >>> 0;
+        if (!noAssert)
+          checkOffset(offset3, 4, this.length);
+        return ieee754.read(this, offset3, true, 23, 4);
+      };
+      Buffer3.prototype.readFloatBE = function readFloatBE(offset3, noAssert) {
+        offset3 = offset3 >>> 0;
+        if (!noAssert)
+          checkOffset(offset3, 4, this.length);
+        return ieee754.read(this, offset3, false, 23, 4);
+      };
+      Buffer3.prototype.readDoubleLE = function readDoubleLE(offset3, noAssert) {
+        offset3 = offset3 >>> 0;
+        if (!noAssert)
+          checkOffset(offset3, 8, this.length);
+        return ieee754.read(this, offset3, true, 52, 8);
+      };
+      Buffer3.prototype.readDoubleBE = function readDoubleBE(offset3, noAssert) {
+        offset3 = offset3 >>> 0;
+        if (!noAssert)
+          checkOffset(offset3, 8, this.length);
+        return ieee754.read(this, offset3, false, 52, 8);
+      };
+      function checkInt(buf, value, offset3, ext, max3, min3) {
+        if (!Buffer3.isBuffer(buf))
+          throw new TypeError('"buffer" argument must be a Buffer instance');
+        if (value > max3 || value < min3)
+          throw new RangeError('"value" argument is out of bounds');
+        if (offset3 + ext > buf.length)
+          throw new RangeError("Index out of range");
+      }
+      Buffer3.prototype.writeUintLE = Buffer3.prototype.writeUIntLE = function writeUIntLE(value, offset3, byteLength2, noAssert) {
+        value = +value;
+        offset3 = offset3 >>> 0;
+        byteLength2 = byteLength2 >>> 0;
+        if (!noAssert) {
+          var maxBytes = Math.pow(2, 8 * byteLength2) - 1;
+          checkInt(this, value, offset3, byteLength2, maxBytes, 0);
+        }
+        var mul = 1;
+        var i = 0;
+        this[offset3] = value & 255;
+        while (++i < byteLength2 && (mul *= 256)) {
+          this[offset3 + i] = value / mul & 255;
+        }
+        return offset3 + byteLength2;
+      };
+      Buffer3.prototype.writeUintBE = Buffer3.prototype.writeUIntBE = function writeUIntBE(value, offset3, byteLength2, noAssert) {
+        value = +value;
+        offset3 = offset3 >>> 0;
+        byteLength2 = byteLength2 >>> 0;
+        if (!noAssert) {
+          var maxBytes = Math.pow(2, 8 * byteLength2) - 1;
+          checkInt(this, value, offset3, byteLength2, maxBytes, 0);
+        }
+        var i = byteLength2 - 1;
+        var mul = 1;
+        this[offset3 + i] = value & 255;
+        while (--i >= 0 && (mul *= 256)) {
+          this[offset3 + i] = value / mul & 255;
+        }
+        return offset3 + byteLength2;
+      };
+      Buffer3.prototype.writeUint8 = Buffer3.prototype.writeUInt8 = function writeUInt8(value, offset3, noAssert) {
+        value = +value;
+        offset3 = offset3 >>> 0;
+        if (!noAssert)
+          checkInt(this, value, offset3, 1, 255, 0);
+        this[offset3] = value & 255;
+        return offset3 + 1;
+      };
+      Buffer3.prototype.writeUint16LE = Buffer3.prototype.writeUInt16LE = function writeUInt16LE(value, offset3, noAssert) {
+        value = +value;
+        offset3 = offset3 >>> 0;
+        if (!noAssert)
+          checkInt(this, value, offset3, 2, 65535, 0);
+        this[offset3] = value & 255;
+        this[offset3 + 1] = value >>> 8;
+        return offset3 + 2;
+      };
+      Buffer3.prototype.writeUint16BE = Buffer3.prototype.writeUInt16BE = function writeUInt16BE(value, offset3, noAssert) {
+        value = +value;
+        offset3 = offset3 >>> 0;
+        if (!noAssert)
+          checkInt(this, value, offset3, 2, 65535, 0);
+        this[offset3] = value >>> 8;
+        this[offset3 + 1] = value & 255;
+        return offset3 + 2;
+      };
+      Buffer3.prototype.writeUint32LE = Buffer3.prototype.writeUInt32LE = function writeUInt32LE(value, offset3, noAssert) {
+        value = +value;
+        offset3 = offset3 >>> 0;
+        if (!noAssert)
+          checkInt(this, value, offset3, 4, 4294967295, 0);
+        this[offset3 + 3] = value >>> 24;
+        this[offset3 + 2] = value >>> 16;
+        this[offset3 + 1] = value >>> 8;
+        this[offset3] = value & 255;
+        return offset3 + 4;
+      };
+      Buffer3.prototype.writeUint32BE = Buffer3.prototype.writeUInt32BE = function writeUInt32BE(value, offset3, noAssert) {
+        value = +value;
+        offset3 = offset3 >>> 0;
+        if (!noAssert)
+          checkInt(this, value, offset3, 4, 4294967295, 0);
+        this[offset3] = value >>> 24;
+        this[offset3 + 1] = value >>> 16;
+        this[offset3 + 2] = value >>> 8;
+        this[offset3 + 3] = value & 255;
+        return offset3 + 4;
+      };
+      Buffer3.prototype.writeIntLE = function writeIntLE(value, offset3, byteLength2, noAssert) {
+        value = +value;
+        offset3 = offset3 >>> 0;
+        if (!noAssert) {
+          var limit = Math.pow(2, 8 * byteLength2 - 1);
+          checkInt(this, value, offset3, byteLength2, limit - 1, -limit);
+        }
+        var i = 0;
+        var mul = 1;
+        var sub = 0;
+        this[offset3] = value & 255;
+        while (++i < byteLength2 && (mul *= 256)) {
+          if (value < 0 && sub === 0 && this[offset3 + i - 1] !== 0) {
+            sub = 1;
+          }
+          this[offset3 + i] = (value / mul >> 0) - sub & 255;
+        }
+        return offset3 + byteLength2;
+      };
+      Buffer3.prototype.writeIntBE = function writeIntBE(value, offset3, byteLength2, noAssert) {
+        value = +value;
+        offset3 = offset3 >>> 0;
+        if (!noAssert) {
+          var limit = Math.pow(2, 8 * byteLength2 - 1);
+          checkInt(this, value, offset3, byteLength2, limit - 1, -limit);
+        }
+        var i = byteLength2 - 1;
+        var mul = 1;
+        var sub = 0;
+        this[offset3 + i] = value & 255;
+        while (--i >= 0 && (mul *= 256)) {
+          if (value < 0 && sub === 0 && this[offset3 + i + 1] !== 0) {
+            sub = 1;
+          }
+          this[offset3 + i] = (value / mul >> 0) - sub & 255;
+        }
+        return offset3 + byteLength2;
+      };
+      Buffer3.prototype.writeInt8 = function writeInt8(value, offset3, noAssert) {
+        value = +value;
+        offset3 = offset3 >>> 0;
+        if (!noAssert)
+          checkInt(this, value, offset3, 1, 127, -128);
+        if (value < 0)
+          value = 255 + value + 1;
+        this[offset3] = value & 255;
+        return offset3 + 1;
+      };
+      Buffer3.prototype.writeInt16LE = function writeInt16LE(value, offset3, noAssert) {
+        value = +value;
+        offset3 = offset3 >>> 0;
+        if (!noAssert)
+          checkInt(this, value, offset3, 2, 32767, -32768);
+        this[offset3] = value & 255;
+        this[offset3 + 1] = value >>> 8;
+        return offset3 + 2;
+      };
+      Buffer3.prototype.writeInt16BE = function writeInt16BE(value, offset3, noAssert) {
+        value = +value;
+        offset3 = offset3 >>> 0;
+        if (!noAssert)
+          checkInt(this, value, offset3, 2, 32767, -32768);
+        this[offset3] = value >>> 8;
+        this[offset3 + 1] = value & 255;
+        return offset3 + 2;
+      };
+      Buffer3.prototype.writeInt32LE = function writeInt32LE(value, offset3, noAssert) {
+        value = +value;
+        offset3 = offset3 >>> 0;
+        if (!noAssert)
+          checkInt(this, value, offset3, 4, 2147483647, -2147483648);
+        this[offset3] = value & 255;
+        this[offset3 + 1] = value >>> 8;
+        this[offset3 + 2] = value >>> 16;
+        this[offset3 + 3] = value >>> 24;
+        return offset3 + 4;
+      };
+      Buffer3.prototype.writeInt32BE = function writeInt32BE(value, offset3, noAssert) {
+        value = +value;
+        offset3 = offset3 >>> 0;
+        if (!noAssert)
+          checkInt(this, value, offset3, 4, 2147483647, -2147483648);
+        if (value < 0)
+          value = 4294967295 + value + 1;
+        this[offset3] = value >>> 24;
+        this[offset3 + 1] = value >>> 16;
+        this[offset3 + 2] = value >>> 8;
+        this[offset3 + 3] = value & 255;
+        return offset3 + 4;
+      };
+      function checkIEEE754(buf, value, offset3, ext, max3, min3) {
+        if (offset3 + ext > buf.length)
+          throw new RangeError("Index out of range");
+        if (offset3 < 0)
+          throw new RangeError("Index out of range");
+      }
+      function writeFloat(buf, value, offset3, littleEndian, noAssert) {
+        value = +value;
+        offset3 = offset3 >>> 0;
+        if (!noAssert) {
+          checkIEEE754(buf, value, offset3, 4, 34028234663852886e22, -34028234663852886e22);
+        }
+        ieee754.write(buf, value, offset3, littleEndian, 23, 4);
+        return offset3 + 4;
+      }
+      Buffer3.prototype.writeFloatLE = function writeFloatLE(value, offset3, noAssert) {
+        return writeFloat(this, value, offset3, true, noAssert);
+      };
+      Buffer3.prototype.writeFloatBE = function writeFloatBE(value, offset3, noAssert) {
+        return writeFloat(this, value, offset3, false, noAssert);
+      };
+      function writeDouble(buf, value, offset3, littleEndian, noAssert) {
+        value = +value;
+        offset3 = offset3 >>> 0;
+        if (!noAssert) {
+          checkIEEE754(buf, value, offset3, 8, 17976931348623157e292, -17976931348623157e292);
+        }
+        ieee754.write(buf, value, offset3, littleEndian, 52, 8);
+        return offset3 + 8;
+      }
+      Buffer3.prototype.writeDoubleLE = function writeDoubleLE(value, offset3, noAssert) {
+        return writeDouble(this, value, offset3, true, noAssert);
+      };
+      Buffer3.prototype.writeDoubleBE = function writeDoubleBE(value, offset3, noAssert) {
+        return writeDouble(this, value, offset3, false, noAssert);
+      };
+      Buffer3.prototype.copy = function copy(target, targetStart, start2, end2) {
+        if (!Buffer3.isBuffer(target))
+          throw new TypeError("argument should be a Buffer");
+        if (!start2)
+          start2 = 0;
+        if (!end2 && end2 !== 0)
+          end2 = this.length;
+        if (targetStart >= target.length)
+          targetStart = target.length;
+        if (!targetStart)
+          targetStart = 0;
+        if (end2 > 0 && end2 < start2)
+          end2 = start2;
+        if (end2 === start2)
+          return 0;
+        if (target.length === 0 || this.length === 0)
+          return 0;
+        if (targetStart < 0) {
+          throw new RangeError("targetStart out of bounds");
+        }
+        if (start2 < 0 || start2 >= this.length)
+          throw new RangeError("Index out of range");
+        if (end2 < 0)
+          throw new RangeError("sourceEnd out of bounds");
+        if (end2 > this.length)
+          end2 = this.length;
+        if (target.length - targetStart < end2 - start2) {
+          end2 = target.length - targetStart + start2;
+        }
+        var len = end2 - start2;
+        if (this === target && typeof Uint8Array.prototype.copyWithin === "function") {
+          this.copyWithin(targetStart, start2, end2);
+        } else {
+          Uint8Array.prototype.set.call(
+            target,
+            this.subarray(start2, end2),
+            targetStart
+          );
+        }
+        return len;
+      };
+      Buffer3.prototype.fill = function fill(val, start2, end2, encoding) {
+        if (typeof val === "string") {
+          if (typeof start2 === "string") {
+            encoding = start2;
+            start2 = 0;
+            end2 = this.length;
+          } else if (typeof end2 === "string") {
+            encoding = end2;
+            end2 = this.length;
+          }
+          if (encoding !== void 0 && typeof encoding !== "string") {
+            throw new TypeError("encoding must be a string");
+          }
+          if (typeof encoding === "string" && !Buffer3.isEncoding(encoding)) {
+            throw new TypeError("Unknown encoding: " + encoding);
+          }
+          if (val.length === 1) {
+            var code = val.charCodeAt(0);
+            if (encoding === "utf8" && code < 128 || encoding === "latin1") {
+              val = code;
+            }
+          }
+        } else if (typeof val === "number") {
+          val = val & 255;
+        } else if (typeof val === "boolean") {
+          val = Number(val);
+        }
+        if (start2 < 0 || this.length < start2 || this.length < end2) {
+          throw new RangeError("Out of range index");
+        }
+        if (end2 <= start2) {
+          return this;
+        }
+        start2 = start2 >>> 0;
+        end2 = end2 === void 0 ? this.length : end2 >>> 0;
+        if (!val)
+          val = 0;
+        var i;
+        if (typeof val === "number") {
+          for (i = start2; i < end2; ++i) {
+            this[i] = val;
+          }
+        } else {
+          var bytes = Buffer3.isBuffer(val) ? val : Buffer3.from(val, encoding);
+          var len = bytes.length;
+          if (len === 0) {
+            throw new TypeError('The value "' + val + '" is invalid for argument "value"');
+          }
+          for (i = 0; i < end2 - start2; ++i) {
+            this[i + start2] = bytes[i % len];
+          }
+        }
+        return this;
+      };
+      var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g;
+      function base64clean(str) {
+        str = str.split("=")[0];
+        str = str.trim().replace(INVALID_BASE64_RE, "");
+        if (str.length < 2)
+          return "";
+        while (str.length % 4 !== 0) {
+          str = str + "=";
+        }
+        return str;
+      }
+      function utf8ToBytes(string, units) {
+        units = units || Infinity;
+        var codePoint;
+        var length = string.length;
+        var leadSurrogate = null;
+        var bytes = [];
+        for (var i = 0; i < length; ++i) {
+          codePoint = string.charCodeAt(i);
+          if (codePoint > 55295 && codePoint < 57344) {
+            if (!leadSurrogate) {
+              if (codePoint > 56319) {
+                if ((units -= 3) > -1)
+                  bytes.push(239, 191, 189);
+                continue;
+              } else if (i + 1 === length) {
+                if ((units -= 3) > -1)
+                  bytes.push(239, 191, 189);
+                continue;
+              }
+              leadSurrogate = codePoint;
+              continue;
+            }
+            if (codePoint < 56320) {
+              if ((units -= 3) > -1)
+                bytes.push(239, 191, 189);
+              leadSurrogate = codePoint;
+              continue;
+            }
+            codePoint = (leadSurrogate - 55296 << 10 | codePoint - 56320) + 65536;
+          } else if (leadSurrogate) {
+            if ((units -= 3) > -1)
+              bytes.push(239, 191, 189);
+          }
+          leadSurrogate = null;
+          if (codePoint < 128) {
+            if ((units -= 1) < 0)
+              break;
+            bytes.push(codePoint);
+          } else if (codePoint < 2048) {
+            if ((units -= 2) < 0)
+              break;
+            bytes.push(
+              codePoint >> 6 | 192,
+              codePoint & 63 | 128
+            );
+          } else if (codePoint < 65536) {
+            if ((units -= 3) < 0)
+              break;
+            bytes.push(
+              codePoint >> 12 | 224,
+              codePoint >> 6 & 63 | 128,
+              codePoint & 63 | 128
+            );
+          } else if (codePoint < 1114112) {
+            if ((units -= 4) < 0)
+              break;
+            bytes.push(
+              codePoint >> 18 | 240,
+              codePoint >> 12 & 63 | 128,
+              codePoint >> 6 & 63 | 128,
+              codePoint & 63 | 128
+            );
+          } else {
+            throw new Error("Invalid code point");
+          }
+        }
+        return bytes;
+      }
+      function asciiToBytes(str) {
+        var byteArray = [];
+        for (var i = 0; i < str.length; ++i) {
+          byteArray.push(str.charCodeAt(i) & 255);
+        }
+        return byteArray;
+      }
+      function utf16leToBytes(str, units) {
+        var c, hi, lo;
+        var byteArray = [];
+        for (var i = 0; i < str.length; ++i) {
+          if ((units -= 2) < 0)
+            break;
+          c = str.charCodeAt(i);
+          hi = c >> 8;
+          lo = c % 256;
+          byteArray.push(lo);
+          byteArray.push(hi);
+        }
+        return byteArray;
+      }
+      function base64ToBytes(str) {
+        return base64.toByteArray(base64clean(str));
+      }
+      function blitBuffer(src, dst, offset3, length) {
+        for (var i = 0; i < length; ++i) {
+          if (i + offset3 >= dst.length || i >= src.length)
+            break;
+          dst[i + offset3] = src[i];
+        }
+        return i;
+      }
+      function isInstance2(obj, type) {
+        return obj instanceof type || obj != null && obj.constructor != null && obj.constructor.name != null && obj.constructor.name === type.name;
+      }
+      function numberIsNaN(obj) {
+        return obj !== obj;
+      }
+      var hexSliceLookupTable = function() {
+        var alphabet = "0123456789abcdef";
+        var table = new Array(256);
+        for (var i = 0; i < 16; ++i) {
+          var i16 = i * 16;
+          for (var j = 0; j < 16; ++j) {
+            table[i16 + j] = alphabet[i] + alphabet[j];
+          }
+        }
+        return table;
+      }();
+    }
+  });
+
+  // node_modules/.pnpm/@peculiar+webcrypto@1.4.5/node_modules/@peculiar/webcrypto/build/webcrypto.es.js
   var webcrypto_es_exports = {};
   __export(webcrypto_es_exports, {
     Crypto: () => Crypto2,
@@ -16698,7 +18659,7 @@ ${values.join("\n")}` : `${blockName} :`;
     return key;
   }
   function bitShiftLeft(buffer) {
-    const shifted = Buffer.alloc(buffer.length);
+    const shifted = import_buffer.Buffer.alloc(buffer.length);
     const last = buffer.length - 1;
     for (let index = 0; index < last; index++) {
       shifted[index] = buffer[index] << 1;
@@ -16711,7 +18672,7 @@ ${values.join("\n")}` : `${blockName} :`;
   }
   function xor(a2, b) {
     const length = Math.min(a2.length, b.length);
-    const output = Buffer.alloc(length);
+    const output = import_buffer.Buffer.alloc(length);
     for (let index = 0; index < length; index++) {
       output[index] = a2[index] ^ b[index];
     }
@@ -16724,14 +18685,14 @@ ${values.join("\n")}` : `${blockName} :`;
     return result;
   }
   function getMessageBlock(message, blockIndex) {
-    const block = Buffer.alloc(blockSize);
+    const block = import_buffer.Buffer.alloc(blockSize);
     const start2 = blockIndex * blockSize;
     const end2 = start2 + blockSize;
     message.copy(block, 0, start2, end2);
     return block;
   }
   function getPaddedMessageBlock(message, blockIndex) {
-    const block = Buffer.alloc(blockSize);
+    const block = import_buffer.Buffer.alloc(blockSize);
     const start2 = blockIndex * blockSize;
     const end2 = message.length;
     block.fill(0);
@@ -16807,12 +18768,13 @@ ${values.join("\n")}` : `${blockName} :`;
     }
     return oid;
   }
-  var crypto, import_crypto, process2, import_pvtsutils6, JsonBase64UrlConverter, CryptoKey2, SymmetricKey, AsymmetricKey, AesCryptoKey, AesCrypto, keyStorage, AesCbcProvider2, zero, rb, blockSize, AesCmacProvider2, AesCtrProvider2, AesGcmProvider2, AesKwProvider2, AesEcbProvider2, DesCryptoKey, DesCrypto, DesCbcProvider, DesEde3CbcProvider, RsaPrivateKey2, RsaPublicKey2, RsaCrypto, RsaSsaProvider2, RsaPssProvider2, ShaCrypto, RsaOaepProvider2, RsaEsProvider, namedOIDs, EcPrivateKey2, EcPublicKey3, Sha1Provider, Sha256Provider, Sha384Provider, Sha512Provider, Sha3256Provider, Sha3384Provider, Sha3512Provider, EcCrypto, EcdsaProvider2, EcdhProvider2, edOIDs, EdPrivateKey3, EdPublicKey3, EdCrypto, EdDsaProvider2, EcdhEsProvider2, PbkdfCryptoKey, Pbkdf2Provider2, HmacCryptoKey, HmacProvider2, HkdfCryptoKey, HkdfProvider2, ShakeCrypto, Shake128Provider2, Shake256Provider2, SubtleCrypto2, Crypto2;
+  var import_buffer, crypto, import_crypto, process2, import_pvtsutils6, JsonBase64UrlConverter, CryptoKey2, SymmetricKey, AsymmetricKey, AesCryptoKey, AesCrypto, keyStorage, AesCbcProvider2, zero, rb, blockSize, AesCmacProvider2, AesCtrProvider2, AesGcmProvider2, AesKwProvider2, AesEcbProvider2, DesCryptoKey, DesCrypto, DesCbcProvider, DesEde3CbcProvider, RsaPrivateKey2, RsaPublicKey2, RsaCrypto, RsaSsaProvider2, RsaPssProvider2, ShaCrypto, RsaOaepProvider2, RsaEsProvider, namedOIDs, EcPrivateKey2, EcPublicKey3, Sha1Provider, Sha256Provider, Sha384Provider, Sha512Provider, Sha3256Provider, Sha3384Provider, Sha3512Provider, EcCrypto, EcdsaProvider2, EcdhProvider2, edOIDs, EdPrivateKey3, EdPublicKey3, EdCrypto, EdDsaProvider2, EcdhEsProvider2, PbkdfCryptoKey, Pbkdf2Provider2, HmacCryptoKey, HmacProvider2, HkdfCryptoKey, HkdfProvider2, ShakeCrypto, Shake128Provider2, Shake256Provider2, SubtleCrypto2, Crypto2;
   var init_webcrypto_es = __esm({
-    "node_modules/.pnpm/@peculiar+webcrypto@1.4.3/node_modules/@peculiar/webcrypto/build/webcrypto.es.js"() {
+    "node_modules/.pnpm/@peculiar+webcrypto@1.4.5/node_modules/@peculiar/webcrypto/build/webcrypto.es.js"() {
       init_webcrypto_core_es();
       init_webcrypto_core_es();
       init_webcrypto_core_es();
+      import_buffer = __toESM(require_buffer());
       crypto = __toESM(__require("crypto"));
       import_crypto = __toESM(__require("crypto"));
       process2 = __toESM(__require("process"));
@@ -16821,13 +18783,13 @@ ${values.join("\n")}` : `${blockName} :`;
       import_pvtsutils6 = __toESM(require_build());
       init_es2015();
       JsonBase64UrlConverter = {
-        fromJSON: (value) => Buffer.from(import_pvtsutils6.Convert.FromBase64Url(value)),
+        fromJSON: (value) => import_buffer.Buffer.from(import_pvtsutils6.Convert.FromBase64Url(value)),
         toJSON: (value) => import_pvtsutils6.Convert.ToBase64Url(value)
       };
       CryptoKey2 = class extends CryptoKey {
         constructor() {
           super(...arguments);
-          this.data = Buffer.alloc(0);
+          this.data = import_buffer.Buffer.alloc(0);
           this.algorithm = { name: "" };
           this.extractable = false;
           this.type = "secret";
@@ -16912,7 +18874,7 @@ ${values.join("\n")}` : `${blockName} :`;
               break;
             case "raw":
               key = new AesCryptoKey();
-              key.data = Buffer.from(keyData);
+              key.data = import_buffer.Buffer.from(keyData);
               break;
             default:
               throw new OperationError("format: Must be 'jwk' or 'raw'");
@@ -16934,15 +18896,15 @@ ${values.join("\n")}` : `${blockName} :`;
         static async encrypt(algorithm, key, data) {
           switch (algorithm.name.toUpperCase()) {
             case "AES-CBC":
-              return this.encryptAesCBC(algorithm, key, Buffer.from(data));
+              return this.encryptAesCBC(algorithm, key, import_buffer.Buffer.from(data));
             case "AES-CTR":
-              return this.encryptAesCTR(algorithm, key, Buffer.from(data));
+              return this.encryptAesCTR(algorithm, key, import_buffer.Buffer.from(data));
             case "AES-GCM":
-              return this.encryptAesGCM(algorithm, key, Buffer.from(data));
+              return this.encryptAesGCM(algorithm, key, import_buffer.Buffer.from(data));
             case "AES-KW":
-              return this.encryptAesKW(algorithm, key, Buffer.from(data));
+              return this.encryptAesKW(algorithm, key, import_buffer.Buffer.from(data));
             case "AES-ECB":
-              return this.encryptAesECB(algorithm, key, Buffer.from(data));
+              return this.encryptAesECB(algorithm, key, import_buffer.Buffer.from(data));
             default:
               throw new OperationError("algorithm: Is not recognized");
           }
@@ -16953,15 +18915,15 @@ ${values.join("\n")}` : `${blockName} :`;
           }
           switch (algorithm.name.toUpperCase()) {
             case "AES-CBC":
-              return this.decryptAesCBC(algorithm, key, Buffer.from(data));
+              return this.decryptAesCBC(algorithm, key, import_buffer.Buffer.from(data));
             case "AES-CTR":
-              return this.decryptAesCTR(algorithm, key, Buffer.from(data));
+              return this.decryptAesCTR(algorithm, key, import_buffer.Buffer.from(data));
             case "AES-GCM":
-              return this.decryptAesGCM(algorithm, key, Buffer.from(data));
+              return this.decryptAesGCM(algorithm, key, import_buffer.Buffer.from(data));
             case "AES-KW":
-              return this.decryptAesKW(algorithm, key, Buffer.from(data));
+              return this.decryptAesKW(algorithm, key, import_buffer.Buffer.from(data));
             case "AES-ECB":
-              return this.decryptAesECB(algorithm, key, Buffer.from(data));
+              return this.decryptAesECB(algorithm, key, import_buffer.Buffer.from(data));
             default:
               throw new OperationError("algorithm: Is not recognized");
           }
@@ -16969,38 +18931,38 @@ ${values.join("\n")}` : `${blockName} :`;
         static async encryptAesCBC(algorithm, key, data) {
           const cipher = import_crypto.default.createCipheriv(`aes-${key.algorithm.length}-cbc`, key.data, new Uint8Array(algorithm.iv));
           let enc = cipher.update(data);
-          enc = Buffer.concat([enc, cipher.final()]);
+          enc = import_buffer.Buffer.concat([enc, cipher.final()]);
           const res = new Uint8Array(enc).buffer;
           return res;
         }
         static async decryptAesCBC(algorithm, key, data) {
           const decipher = import_crypto.default.createDecipheriv(`aes-${key.algorithm.length}-cbc`, key.data, new Uint8Array(algorithm.iv));
           let dec = decipher.update(data);
-          dec = Buffer.concat([dec, decipher.final()]);
+          dec = import_buffer.Buffer.concat([dec, decipher.final()]);
           return new Uint8Array(dec).buffer;
         }
         static async encryptAesCTR(algorithm, key, data) {
-          const cipher = import_crypto.default.createCipheriv(`aes-${key.algorithm.length}-ctr`, key.data, Buffer.from(algorithm.counter));
+          const cipher = import_crypto.default.createCipheriv(`aes-${key.algorithm.length}-ctr`, key.data, import_buffer.Buffer.from(algorithm.counter));
           let enc = cipher.update(data);
-          enc = Buffer.concat([enc, cipher.final()]);
+          enc = import_buffer.Buffer.concat([enc, cipher.final()]);
           const res = new Uint8Array(enc).buffer;
           return res;
         }
         static async decryptAesCTR(algorithm, key, data) {
           const decipher = import_crypto.default.createDecipheriv(`aes-${key.algorithm.length}-ctr`, key.data, new Uint8Array(algorithm.counter));
           let dec = decipher.update(data);
-          dec = Buffer.concat([dec, decipher.final()]);
+          dec = import_buffer.Buffer.concat([dec, decipher.final()]);
           return new Uint8Array(dec).buffer;
         }
         static async encryptAesGCM(algorithm, key, data) {
-          const cipher = import_crypto.default.createCipheriv(`aes-${key.algorithm.length}-gcm`, key.data, Buffer.from(algorithm.iv), {
+          const cipher = import_crypto.default.createCipheriv(`aes-${key.algorithm.length}-gcm`, key.data, import_buffer.Buffer.from(algorithm.iv), {
             authTagLength: (algorithm.tagLength || 128) >> 3
           });
           if (algorithm.additionalData) {
-            cipher.setAAD(Buffer.from(algorithm.additionalData));
+            cipher.setAAD(import_buffer.Buffer.from(algorithm.additionalData));
           }
           let enc = cipher.update(data);
-          enc = Buffer.concat([enc, cipher.final(), cipher.getAuthTag()]);
+          enc = import_buffer.Buffer.concat([enc, cipher.final(), cipher.getAuthTag()]);
           const res = new Uint8Array(enc).buffer;
           return res;
         }
@@ -17010,40 +18972,40 @@ ${values.join("\n")}` : `${blockName} :`;
           const enc = data.slice(0, data.length - tagLength);
           const tag = data.slice(data.length - tagLength);
           if (algorithm.additionalData) {
-            decipher.setAAD(Buffer.from(algorithm.additionalData));
+            decipher.setAAD(import_buffer.Buffer.from(algorithm.additionalData));
           }
           decipher.setAuthTag(tag);
           let dec = decipher.update(enc);
-          dec = Buffer.concat([dec, decipher.final()]);
+          dec = import_buffer.Buffer.concat([dec, decipher.final()]);
           return new Uint8Array(dec).buffer;
         }
         static async encryptAesKW(algorithm, key, data) {
           const cipher = import_crypto.default.createCipheriv(`id-aes${key.algorithm.length}-wrap`, key.data, this.AES_KW_IV);
           let enc = cipher.update(data);
-          enc = Buffer.concat([enc, cipher.final()]);
+          enc = import_buffer.Buffer.concat([enc, cipher.final()]);
           return new Uint8Array(enc).buffer;
         }
         static async decryptAesKW(algorithm, key, data) {
           const decipher = import_crypto.default.createDecipheriv(`id-aes${key.algorithm.length}-wrap`, key.data, this.AES_KW_IV);
           let dec = decipher.update(data);
-          dec = Buffer.concat([dec, decipher.final()]);
+          dec = import_buffer.Buffer.concat([dec, decipher.final()]);
           return new Uint8Array(dec).buffer;
         }
         static async encryptAesECB(algorithm, key, data) {
           const cipher = import_crypto.default.createCipheriv(`aes-${key.algorithm.length}-ecb`, key.data, new Uint8Array(0));
           let enc = cipher.update(data);
-          enc = Buffer.concat([enc, cipher.final()]);
+          enc = import_buffer.Buffer.concat([enc, cipher.final()]);
           const res = new Uint8Array(enc).buffer;
           return res;
         }
         static async decryptAesECB(algorithm, key, data) {
           const decipher = import_crypto.default.createDecipheriv(`aes-${key.algorithm.length}-ecb`, key.data, new Uint8Array(0));
           let dec = decipher.update(data);
-          dec = Buffer.concat([dec, decipher.final()]);
+          dec = import_buffer.Buffer.concat([dec, decipher.final()]);
           return new Uint8Array(dec).buffer;
         }
       };
-      AesCrypto.AES_KW_IV = Buffer.from("A6A6A6A6A6A6A6A6", "hex");
+      AesCrypto.AES_KW_IV = import_buffer.Buffer.from("A6A6A6A6A6A6A6A6", "hex");
       keyStorage = /* @__PURE__ */ new WeakMap();
       AesCbcProvider2 = class extends AesCbcProvider {
         async onGenerateKey(algorithm, extractable, keyUsages) {
@@ -17073,8 +19035,8 @@ ${values.join("\n")}` : `${blockName} :`;
           }
         }
       };
-      zero = Buffer.from([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
-      rb = Buffer.from([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135]);
+      zero = import_buffer.Buffer.from([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+      rb = import_buffer.Buffer.from([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135]);
       blockSize = 16;
       AesCmacProvider2 = class extends AesCmacProvider {
         async onGenerateKey(algorithm, extractable, keyUsages) {
@@ -17085,12 +19047,12 @@ ${values.join("\n")}` : `${blockName} :`;
           return setCryptoKey(key);
         }
         async onSign(algorithm, key, data) {
-          const result = aesCmac(getCryptoKey(key).data, Buffer.from(data));
+          const result = aesCmac(getCryptoKey(key).data, import_buffer.Buffer.from(data));
           return new Uint8Array(result).buffer;
         }
         async onVerify(algorithm, key, signature, data) {
           const signature2 = await this.sign(algorithm, key, data);
-          return Buffer.from(signature).compare(Buffer.from(signature2)) === 0;
+          return import_buffer.Buffer.from(signature).compare(import_buffer.Buffer.from(signature2)) === 0;
         }
         async onExportKey(format2, key) {
           return AesCrypto.exportKey(format2, getCryptoKey(key));
@@ -17262,7 +19224,7 @@ ${values.join("\n")}` : `${blockName} :`;
               break;
             case "raw":
               key = new DesCryptoKey();
-              key.data = Buffer.from(keyData);
+              key.data = import_buffer.Buffer.from(keyData);
               break;
             default:
               throw new OperationError("format: Must be 'jwk' or 'raw'");
@@ -17275,9 +19237,9 @@ ${values.join("\n")}` : `${blockName} :`;
         static async encrypt(algorithm, key, data) {
           switch (algorithm.name.toUpperCase()) {
             case "DES-CBC":
-              return this.encryptDesCBC(algorithm, key, Buffer.from(data));
+              return this.encryptDesCBC(algorithm, key, import_buffer.Buffer.from(data));
             case "DES-EDE3-CBC":
-              return this.encryptDesEDE3CBC(algorithm, key, Buffer.from(data));
+              return this.encryptDesEDE3CBC(algorithm, key, import_buffer.Buffer.from(data));
             default:
               throw new OperationError("algorithm: Is not recognized");
           }
@@ -17288,9 +19250,9 @@ ${values.join("\n")}` : `${blockName} :`;
           }
           switch (algorithm.name.toUpperCase()) {
             case "DES-CBC":
-              return this.decryptDesCBC(algorithm, key, Buffer.from(data));
+              return this.decryptDesCBC(algorithm, key, import_buffer.Buffer.from(data));
             case "DES-EDE3-CBC":
-              return this.decryptDesEDE3CBC(algorithm, key, Buffer.from(data));
+              return this.decryptDesEDE3CBC(algorithm, key, import_buffer.Buffer.from(data));
             default:
               throw new OperationError("algorithm: Is not recognized");
           }
@@ -17298,27 +19260,27 @@ ${values.join("\n")}` : `${blockName} :`;
         static async encryptDesCBC(algorithm, key, data) {
           const cipher = import_crypto.default.createCipheriv(`des-cbc`, key.data, new Uint8Array(algorithm.iv));
           let enc = cipher.update(data);
-          enc = Buffer.concat([enc, cipher.final()]);
+          enc = import_buffer.Buffer.concat([enc, cipher.final()]);
           const res = new Uint8Array(enc).buffer;
           return res;
         }
         static async decryptDesCBC(algorithm, key, data) {
           const decipher = import_crypto.default.createDecipheriv(`des-cbc`, key.data, new Uint8Array(algorithm.iv));
           let dec = decipher.update(data);
-          dec = Buffer.concat([dec, decipher.final()]);
+          dec = import_buffer.Buffer.concat([dec, decipher.final()]);
           return new Uint8Array(dec).buffer;
         }
         static async encryptDesEDE3CBC(algorithm, key, data) {
-          const cipher = import_crypto.default.createCipheriv(`des-ede3-cbc`, key.data, Buffer.from(algorithm.iv));
+          const cipher = import_crypto.default.createCipheriv(`des-ede3-cbc`, key.data, import_buffer.Buffer.from(algorithm.iv));
           let enc = cipher.update(data);
-          enc = Buffer.concat([enc, cipher.final()]);
+          enc = import_buffer.Buffer.concat([enc, cipher.final()]);
           const res = new Uint8Array(enc).buffer;
           return res;
         }
         static async decryptDesEDE3CBC(algorithm, key, data) {
           const decipher = import_crypto.default.createDecipheriv(`des-ede3-cbc`, key.data, new Uint8Array(algorithm.iv));
           let dec = decipher.update(data);
-          dec = Buffer.concat([dec, decipher.final()]);
+          dec = import_buffer.Buffer.concat([dec, decipher.final()]);
           return new Uint8Array(dec).buffer;
         }
       };
@@ -17421,7 +19383,7 @@ ${values.join("\n")}` : `${blockName} :`;
           keyInfo.privateKeyAlgorithm.algorithm = "1.2.840.113549.1.1.1";
           keyInfo.privateKeyAlgorithm.parameters = null;
           keyInfo.privateKey = AsnSerializer.serialize(key);
-          this.data = Buffer.from(AsnSerializer.serialize(keyInfo));
+          this.data = import_buffer.Buffer.from(AsnSerializer.serialize(keyInfo));
         }
       };
       RsaPublicKey2 = class extends AsymmetricKey {
@@ -17449,7 +19411,7 @@ ${values.join("\n")}` : `${blockName} :`;
           keyInfo.publicKeyAlgorithm.algorithm = "1.2.840.113549.1.1.1";
           keyInfo.publicKeyAlgorithm.parameters = null;
           keyInfo.publicKey = AsnSerializer.serialize(key);
-          this.data = Buffer.from(AsnSerializer.serialize(keyInfo));
+          this.data = import_buffer.Buffer.from(AsnSerializer.serialize(keyInfo));
         }
       };
       RsaCrypto = class {
@@ -17462,9 +19424,9 @@ ${values.join("\n")}` : `${blockName} :`;
           publicKey.algorithm = algorithm;
           publicKey.extractable = true;
           publicKey.usages = keyUsages.filter((usage) => this.publicKeyUsages.indexOf(usage) !== -1);
-          const publicExponent = Buffer.concat([
-            Buffer.alloc(4 - algorithm.publicExponent.byteLength, 0),
-            Buffer.from(algorithm.publicExponent)
+          const publicExponent = import_buffer.Buffer.concat([
+            import_buffer.Buffer.alloc(4 - algorithm.publicExponent.byteLength, 0),
+            import_buffer.Buffer.from(algorithm.publicExponent)
           ]).readInt32BE(0);
           const keys = import_crypto.default.generateKeyPairSync("rsa", {
             modulusLength: algorithm.modulusLength,
@@ -17563,7 +19525,7 @@ ${values.join("\n")}` : `${blockName} :`;
           keyInfo.privateKeyAlgorithm.parameters = null;
           keyInfo.privateKey = AsnSerializer.serialize(asnKey);
           const key = new RsaPrivateKey2();
-          key.data = Buffer.from(AsnSerializer.serialize(keyInfo));
+          key.data = import_buffer.Buffer.from(AsnSerializer.serialize(keyInfo));
           key.algorithm = Object.assign({}, algorithm);
           key.algorithm.publicExponent = new Uint8Array(asnKey.publicExponent);
           key.algorithm.modulusLength = asnKey.modulus.byteLength << 3;
@@ -17577,7 +19539,7 @@ ${values.join("\n")}` : `${blockName} :`;
           keyInfo.publicKeyAlgorithm.parameters = null;
           keyInfo.publicKey = AsnSerializer.serialize(asnKey);
           const key = new RsaPublicKey2();
-          key.data = Buffer.from(AsnSerializer.serialize(keyInfo));
+          key.data = import_buffer.Buffer.from(AsnSerializer.serialize(keyInfo));
           key.algorithm = Object.assign({}, algorithm);
           key.algorithm.publicExponent = new Uint8Array(asnKey.publicExponent);
           key.algorithm.modulusLength = asnKey.modulus.byteLength << 3;
@@ -17608,7 +19570,7 @@ ${values.join("\n")}` : `${blockName} :`;
         static signRsa(algorithm, key, data) {
           const cryptoAlg = this.getCryptoAlgorithm(key.algorithm);
           const signer = import_crypto.default.createSign(cryptoAlg);
-          signer.update(Buffer.from(data));
+          signer.update(import_buffer.Buffer.from(data));
           if (!key.pem) {
             key.pem = `-----BEGIN PRIVATE KEY-----
 ${key.data.toString("base64")}
@@ -17627,7 +19589,7 @@ ${key.data.toString("base64")}
         static verifySSA(algorithm, key, data, signature) {
           const cryptoAlg = this.getCryptoAlgorithm(key.algorithm);
           const signer = import_crypto.default.createVerify(cryptoAlg);
-          signer.update(Buffer.from(data));
+          signer.update(import_buffer.Buffer.from(data));
           if (!key.pem) {
             key.pem = `-----BEGIN PUBLIC KEY-----
 ${key.data.toString("base64")}
@@ -17800,7 +19762,7 @@ ${key.data.toString("base64")}
         }
         static digest(algorithm, data) {
           const hashAlg = this.getAlgorithmName(algorithm);
-          const hash3 = import_crypto.default.createHash(hashAlg).update(Buffer.from(data)).digest();
+          const hash3 = import_crypto.default.createHash(hashAlg).update(import_buffer.Buffer.from(data)).digest();
           return new Uint8Array(hash3).buffer;
         }
       };
@@ -17849,7 +19811,7 @@ ${internalKey.data.toString("base64")}
           const pkcs0 = import_crypto.default.publicEncrypt({
             key: internalKey.pem,
             padding: import_crypto.default.constants.RSA_NO_PADDING
-          }, Buffer.from(message));
+          }, import_buffer.Buffer.from(message));
           return new Uint8Array(pkcs0).buffer;
         }
         async onDecrypt(algorithm, key, data) {
@@ -17868,7 +19830,7 @@ ${internalKey.data.toString("base64")}
           let pkcs0 = import_crypto.default.privateDecrypt({
             key: internalKey.pem,
             padding: import_crypto.default.constants.RSA_NO_PADDING
-          }, Buffer.from(data));
+          }, import_buffer.Buffer.from(data));
           const z = pkcs0[0];
           const seed = pkcs0.subarray(1, hashSize + 1);
           const dataBlock = pkcs0.subarray(hashSize + 1);
@@ -18077,7 +20039,7 @@ ${getCryptoKey(key).data.toString("base64")}
           keyInfo.privateKeyAlgorithm.parameters = AsnSerializer.serialize(new index$1.ObjectIdentifier(getOidByNamedCurve$1(json.crv)));
           const key = JsonParser.fromJSON(json, { targetSchema: index$1.EcPrivateKey });
           keyInfo.privateKey = AsnSerializer.serialize(key);
-          this.data = Buffer.from(AsnSerializer.serialize(keyInfo));
+          this.data = import_buffer.Buffer.from(AsnSerializer.serialize(keyInfo));
           return this;
         }
       };
@@ -18109,7 +20071,7 @@ ${getCryptoKey(key).data.toString("base64")}
           keyInfo.publicKeyAlgorithm.algorithm = "1.2.840.10045.2.1";
           keyInfo.publicKeyAlgorithm.parameters = AsnSerializer.serialize(new index$1.ObjectIdentifier(getOidByNamedCurve$1(json.crv)));
           keyInfo.publicKey = AsnSerializer.toASN(key).valueHex;
-          this.data = Buffer.from(AsnSerializer.serialize(keyInfo));
+          this.data = import_buffer.Buffer.from(AsnSerializer.serialize(keyInfo));
           return this;
         }
       };
@@ -18215,7 +20177,7 @@ ${getCryptoKey(key).data.toString("base64")}
         static async sign(algorithm, key, data) {
           const cryptoAlg = ShaCrypto.getAlgorithmName(algorithm.hash);
           const signer = import_crypto.default.createSign(cryptoAlg);
-          signer.update(Buffer.from(data));
+          signer.update(import_buffer.Buffer.from(data));
           if (!key.pem) {
             key.pem = `-----BEGIN PRIVATE KEY-----
 ${key.data.toString("base64")}
@@ -18232,7 +20194,7 @@ ${key.data.toString("base64")}
         static async verify(algorithm, key, signature, data) {
           const cryptoAlg = ShaCrypto.getAlgorithmName(algorithm.hash);
           const signer = import_crypto.default.createVerify(cryptoAlg);
-          signer.update(Buffer.from(data));
+          signer.update(import_buffer.Buffer.from(data));
           if (!key.pem) {
             key.pem = `-----BEGIN PUBLIC KEY-----
 ${key.data.toString("base64")}
@@ -18246,7 +20208,7 @@ ${key.data.toString("base64")}
           const signaturePoint = EcUtils.decodeSignature(signature, namedCurve.size);
           ecSignature.r = import_pvtsutils6.BufferSourceConverter.toArrayBuffer(signaturePoint.r);
           ecSignature.s = import_pvtsutils6.BufferSourceConverter.toArrayBuffer(signaturePoint.s);
-          const ecSignatureRaw = Buffer.from(AsnSerializer.serialize(ecSignature));
+          const ecSignatureRaw = import_buffer.Buffer.from(AsnSerializer.serialize(ecSignature));
           const ok = signer.verify(options2, ecSignatureRaw);
           return ok;
         }
@@ -18255,9 +20217,9 @@ ${key.data.toString("base64")}
           const ecdh = import_crypto.default.createECDH(cryptoAlg);
           const asnPrivateKey = AsnParser.parse(baseKey.data, index$1.PrivateKeyInfo);
           const asnEcPrivateKey = AsnParser.parse(asnPrivateKey.privateKey, index$1.EcPrivateKey);
-          ecdh.setPrivateKey(Buffer.from(asnEcPrivateKey.privateKey));
+          ecdh.setPrivateKey(import_buffer.Buffer.from(asnEcPrivateKey.privateKey));
           const asnPublicKey = AsnParser.parse(algorithm.public.data, index$1.PublicKeyInfo);
-          const bits = ecdh.computeSecret(Buffer.from(asnPublicKey.publicKey));
+          const bits = ecdh.computeSecret(import_buffer.Buffer.from(asnPublicKey.publicKey));
           if (length === null) {
             return bits;
           }
@@ -18330,7 +20292,7 @@ ${key.data.toString("base64")}
           keyInfo.privateKeyAlgorithm.parameters = AsnSerializer.serialize(new index$1.ObjectIdentifier(getOidByNamedCurve$1(algorithm.namedCurve)));
           keyInfo.privateKey = AsnSerializer.serialize(asnKey);
           const key = new EcPrivateKey2();
-          key.data = Buffer.from(AsnSerializer.serialize(keyInfo));
+          key.data = import_buffer.Buffer.from(AsnSerializer.serialize(keyInfo));
           key.algorithm = Object.assign({}, algorithm);
           key.extractable = extractable;
           key.usages = keyUsages;
@@ -18343,7 +20305,7 @@ ${key.data.toString("base64")}
           keyInfo.publicKeyAlgorithm.parameters = AsnSerializer.serialize(new index$1.ObjectIdentifier(namedCurve));
           keyInfo.publicKey = asnKey.value;
           const key = new EcPublicKey3();
-          key.data = Buffer.from(AsnSerializer.serialize(keyInfo));
+          key.data = import_buffer.Buffer.from(AsnSerializer.serialize(keyInfo));
           key.algorithm = Object.assign({}, algorithm);
           key.extractable = extractable;
           key.usages = keyUsages;
@@ -18484,7 +20446,7 @@ ${key.data.toString("base64")}
           keyInfo.privateKeyAlgorithm.algorithm = getOidByNamedCurve(json.crv);
           const key = JsonParser.fromJSON(json, { targetSchema: index$1.CurvePrivateKey });
           keyInfo.privateKey = AsnSerializer.serialize(key);
-          this.data = Buffer.from(AsnSerializer.serialize(keyInfo));
+          this.data = import_buffer.Buffer.from(AsnSerializer.serialize(keyInfo));
           return this;
         }
       };
@@ -18519,7 +20481,7 @@ ${key.data.toString("base64")}
           const keyInfo = new index$1.PublicKeyInfo();
           keyInfo.publicKeyAlgorithm.algorithm = getOidByNamedCurve(json.crv);
           keyInfo.publicKey = import_pvtsutils6.Convert.FromBase64Url(json.x);
-          this.data = Buffer.from(AsnSerializer.serialize(keyInfo));
+          this.data = import_buffer.Buffer.from(AsnSerializer.serialize(keyInfo));
           return this;
         }
       };
@@ -18561,7 +20523,7 @@ ${key.data.toString("base64")}
           const options2 = {
             key: key.pem
           };
-          const signature = import_crypto.default.sign(null, Buffer.from(data), options2);
+          const signature = import_crypto.default.sign(null, import_buffer.Buffer.from(data), options2);
           return import_pvtsutils5.BufferSourceConverter.toArrayBuffer(signature);
         }
         static async verify(algorithm, key, signature, data) {
@@ -18573,7 +20535,7 @@ ${key.data.toString("base64")}
           const options2 = {
             key: key.pem
           };
-          const ok = import_crypto.default.verify(null, Buffer.from(data), options2, Buffer.from(signature));
+          const ok = import_crypto.default.verify(null, import_buffer.Buffer.from(data), options2, import_buffer.Buffer.from(signature));
           return ok;
         }
         static async deriveBits(algorithm, baseKey, length) {
@@ -18718,7 +20680,7 @@ ${key.data.toString("base64")}
           return new Promise((resolve, reject) => {
             const salt = import_pvtsutils5.BufferSourceConverter.toArrayBuffer(algorithm.salt);
             const hash3 = algorithm.hash.name.replace("-", "");
-            import_crypto.default.pbkdf2(getCryptoKey(baseKey).data, Buffer.from(salt), algorithm.iterations, length >> 3, hash3, (err, derivedBits) => {
+            import_crypto.default.pbkdf2(getCryptoKey(baseKey).data, import_buffer.Buffer.from(salt), algorithm.iterations, length >> 3, hash3, (err, derivedBits) => {
               if (err) {
                 reject(err);
               } else {
@@ -18730,7 +20692,7 @@ ${key.data.toString("base64")}
         async onImportKey(format2, keyData, algorithm, extractable, keyUsages) {
           if (format2 === "raw") {
             const key = new PbkdfCryptoKey();
-            key.data = Buffer.from(keyData);
+            key.data = import_buffer.Buffer.from(keyData);
             key.algorithm = { name: this.name };
             key.extractable = false;
             key.usages = keyUsages;
@@ -18772,13 +20734,13 @@ ${key.data.toString("base64")}
         }
         async onSign(algorithm, key, data) {
           const cryptoAlg = ShaCrypto.getAlgorithmName(key.algorithm.hash);
-          const hmac = import_crypto.default.createHmac(cryptoAlg, getCryptoKey(key).data).update(Buffer.from(data)).digest();
+          const hmac = import_crypto.default.createHmac(cryptoAlg, getCryptoKey(key).data).update(import_buffer.Buffer.from(data)).digest();
           return new Uint8Array(hmac).buffer;
         }
         async onVerify(algorithm, key, signature, data) {
           const cryptoAlg = ShaCrypto.getAlgorithmName(key.algorithm.hash);
-          const hmac = import_crypto.default.createHmac(cryptoAlg, getCryptoKey(key).data).update(Buffer.from(data)).digest();
-          return hmac.compare(Buffer.from(signature)) === 0;
+          const hmac = import_crypto.default.createHmac(cryptoAlg, getCryptoKey(key).data).update(import_buffer.Buffer.from(data)).digest();
+          return hmac.compare(import_buffer.Buffer.from(signature)) === 0;
         }
         async onImportKey(format2, keyData, algorithm, extractable, keyUsages) {
           let key;
@@ -18788,7 +20750,7 @@ ${key.data.toString("base64")}
               break;
             case "raw":
               key = new HmacCryptoKey();
-              key.data = Buffer.from(keyData);
+              key.data = import_buffer.Buffer.from(keyData);
               break;
             default:
               throw new OperationError("format: Must be 'jwk' or 'raw'");
@@ -18827,7 +20789,7 @@ ${key.data.toString("base64")}
             throw new OperationError("Operation not supported");
           }
           const key = new HkdfCryptoKey();
-          key.data = Buffer.from(keyData);
+          key.data = import_buffer.Buffer.from(keyData);
           key.algorithm = { name: this.name };
           key.extractable = extractable;
           key.usages = keyUsages;
@@ -18839,12 +20801,12 @@ ${key.data.toString("base64")}
           const byteLength = length / 8;
           const info = import_pvtsutils5.BufferSourceConverter.toUint8Array(params.info);
           const PRK = import_crypto.default.createHmac(hash3, import_pvtsutils5.BufferSourceConverter.toUint8Array(params.salt)).update(import_pvtsutils5.BufferSourceConverter.toUint8Array(getCryptoKey(baseKey).data)).digest();
-          const blocks = [Buffer.alloc(0)];
+          const blocks = [import_buffer.Buffer.alloc(0)];
           const blockCount = Math.ceil(byteLength / hashLength) + 1;
           for (let i = 1; i < blockCount; ++i) {
-            blocks.push(import_crypto.default.createHmac(hash3, PRK).update(Buffer.concat([blocks[i - 1], info, Buffer.from([i])])).digest());
+            blocks.push(import_crypto.default.createHmac(hash3, PRK).update(import_buffer.Buffer.concat([blocks[i - 1], info, import_buffer.Buffer.from([i])])).digest());
           }
-          return Buffer.concat(blocks).slice(0, byteLength);
+          return import_buffer.Buffer.concat(blocks).slice(0, byteLength);
         }
         checkCryptoKey(key, keyUsage) {
           super.checkCryptoKey(key, keyUsage);
@@ -18855,7 +20817,7 @@ ${key.data.toString("base64")}
       };
       ShakeCrypto = class {
         static digest(algorithm, data) {
-          const hash3 = import_crypto.default.createHash(algorithm.name.toLowerCase(), { outputLength: algorithm.length }).update(Buffer.from(data)).digest();
+          const hash3 = import_crypto.default.createHash(algorithm.name.toLowerCase(), { outputLength: algorithm.length }).update(import_buffer.Buffer.from(data)).digest();
           return new Uint8Array(hash3).buffer;
         }
       };
@@ -18927,7 +20889,7 @@ ${key.data.toString("base64")}
           if (!ArrayBuffer.isView(array)) {
             throw new TypeError("Failed to execute 'getRandomValues' on 'Crypto': parameter 1 is not of type 'ArrayBufferView'");
           }
-          const buffer = Buffer.from(array.buffer, array.byteOffset, array.byteLength);
+          const buffer = import_buffer.Buffer.from(array.buffer, array.byteOffset, array.byteLength);
           import_crypto.default.randomFillSync(buffer);
           return array;
         }
@@ -21031,26 +22993,36 @@ ${key.data.toString("base64")}
       init_constants2();
       TabsStyleSheet = new CSSStyleSheet();
       try {
-        TabsStyleSheet.insertRule(
-          `
+        TabsStyleSheet.insertRule(`
 @layer tabs { 
-.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-shadow:none;border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}div[data-monster-role=popper]{background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;padding:1.1em;z-index:var(--monster-z-index-modal)}[data-popper-arrow],[data-popper-arrow]:before{background:inherit;height:calc(max(var(--monster-popper-witharrrow-distance), -1*var(--monster-popper-witharrrow-distance))*2);position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1*var(--monster-popper-witharrrow-distance))*2)}[data-popper-arrow]{visibility:hidden}[data-popper-arrow]:before{box-sizing:border-box;content:"";transform:rotate(45deg);visibility:visible}div[data-popper-placement^=top]>[data-popper-arrow]{bottom:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width)/2)}div[data-popper-placement^=top]>[data-popper-arrow]:before{border-bottom:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-left:transparent;border-right:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-top:transparent}div[data-popper-placement^=bottom]>[data-popper-arrow]{top:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width))}div[data-popper-placement^=bottom]>[data-popper-arrow]:before{border-bottom:transparent;border-left:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-right:transparent;border-top:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4)}div[data-popper-placement^=left]>[data-popper-arrow]{right:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width))}div[data-popper-placement^=left]>[data-popper-arrow]:before{border-bottom:transparent;border-left:transparent;border-right:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-top:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4)}div[data-popper-placement^=right]>[data-popper-arrow]{left:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width)/2)}div[data-popper-placement^=right]>[data-popper-arrow]:before{border-bottom:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-left:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-right:transparent;border-top:transparent}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-badge-primary{padding:.25em .4em}.monster-badge-primary,.monster-badge-primary-pill{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-primary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-secondary{padding:.25em .4em}.monster-badge-secondary,.monster-badge-secondary-pill{background-color:var(--monster-bg-color-secondary-3);border-radius:.25rem;color:var(--monster-color-secondary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-secondary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-tertiary{padding:.25em .4em}.monster-badge-tertiary,.monster-badge-tertiary-pill{background-color:var(--monster-bg-color-tertiary-3);border-radius:.25rem;color:var(--monster-color-tertiary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-tertiary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-destructive{padding:.25em .4em}.monster-badge-destructive,.monster-badge-destructive-pill{background-color:var(--monster-bg-color-destructive-1);border-radius:.25rem;color:var(--monster-color-destructive-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-destructive-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-success{padding:.25em .4em}.monster-badge-success,.monster-badge-success-pill{background-color:var(--monster-bg-color-success-1);border-radius:.25rem;color:var(--monster-color-success-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-success-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-warning{padding:.25em .4em}.monster-badge-warning,.monster-badge-warning-pill{background-color:var(--monster-bg-color-warning-1);border-radius:.25rem;color:var(--monster-color-warning-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-warning-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-error{padding:.25em .4em}.monster-badge-error,.monster-badge-error-pill{background-color:var(--monster-bg-color-error-1);border-radius:.25rem;color:var(--monster-color-error-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-error-pill{border-radius:10rem;padding:.25em .6em}[data-monster-role=nav] button.hidden{display:none}nav[data-monster-role=nav]{border-bottom-radius:var(--monster-border-radius);border-bottom-shadow:var(--monster-box-shadow-1);align-items:flex-end;border-bottom-style:var(--monster-border-style);border-bottom-width:thin;border-color:var(--monster-bg-color-primary-2);box-sizing:border-box;display:flex;flex-direction:row;flex-wrap:nowrap;margin-bottom:.75rem;overflow:hidden}[data-monster-role=nav] button .remove-tab{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E");background-position:100% 100%;background-repeat:no-repeat;background-size:16px;flex-wrap:nowrap;height:16px;min-height:16px;order:2;width:16px}[data-monster-role=nav] button span{display:flex;white-space:pre}[data-monster-role=nav] button{border-bottom-radius:var(--monster-border-radius);border-bottom-shadow:var(--monster-box-shadow-1);align-content:center;align-items:center;align-self:stretch;background-color:var(--monster-btn-bg-color);border:none;border-bottom:var(--monster-border-width) var(--monster-border-style) currentcolor;border-color:var(--monster-bg-color-primary-4);color:var(--monster-btn-color,#000);cursor:pointer;display:flex;font-size:1rem;font-weight:400;justify-content:center;line-height:1.5;margin-right:.75rem;outline:none;padding:.375rem 0;text-align:center;text-decoration:none;transition:color .8s;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}[data-monster-role=nav] button:not([disabled]):hover,[data-monster-role=nav] button[data-monster-state=active],[data-monster-role=nav] button[data-monster-state=active]:not([disabled]):hover{border-bottom-radius:var(--monster-border-radius);border-bottom-shadow:var(--monster-box-shadow-1);border-bottom-style:var(--monster-border-style);border-bottom-width:var(--monster-border-width);border-color:var(--monster-bg-color-secondary-3);color:var(--monster-bg-color-secondary-3)}[data-monster-role=nav] button[disabled]{color:var(--monster-disabled-color,#545454);cursor:not-allowed}[data-monster-role=nav] button[data-monster-role=switch]{align-self:center;border:0;order:2;touch-action:none}[data-monster-role=nav] button[data-monster-role=switch]:not([disabled]):hover{border-bottom-width:0}[data-monster-role=nav] button img{height:1.3rem;margin-left:.4rem;width:1.3rem}::slotted(:not([slot]):not(.active)){display:none}::slotted(*){align-self:center}::slotted([slot]){border-bottom-radius:var(--monster-border-radius);border-bottom-shadow:var(--monster-box-shadow-1);border-bottom-style:var(--monster-border-style);border-bottom-width:var(--monster-border-width);border-color:var(--monster-bg-color-primary-4)}::slotted([slot=start]){margin-right:.75rem;order:0}::slotted([slot=end]){margin-left:.75rem;order:3}[data-monster-role=nav] [data-monster-role=popper-nav] button:not([disabled]){border:0;justify-content:left;padding-left:15px;padding-right:15px;width:100%}[data-monster-role=nav] [data-monster-role=popper-nav] button:hover,[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active],[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active]:not([disabled]):hover{border:0} 
-}`,
-          0
-        );
+:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,"Quicksand","Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--monster-color-primary-1:var(--monster-color-gray-6);--monster-color-primary-2:var(--monster-color-gray-6);--monster-color-primary-3:var(--monster-color-gray-1);--monster-color-primary-4:var(--monster-color-gray-1);--monster-bg-color-primary-1:var(--monster-color-gray-1);--monster-bg-color-primary-2:var(--monster-color-gray-2);--monster-bg-color-primary-3:var(--monster-color-gray-3);--monster-bg-color-primary-4:var(--monster-color-gray-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-0{border-radius:0;border-style:none;border-width:0;border-shadow:none}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}div[data-monster-role=popper]{background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;padding:1.1em;z-index:var(--monster-z-index-modal)}[data-popper-arrow],[data-popper-arrow]:before{background:inherit;height:calc(max(var(--monster-popper-witharrrow-distance), -1*var(--monster-popper-witharrrow-distance))*2);position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1*var(--monster-popper-witharrrow-distance))*2)}[data-popper-arrow]{visibility:hidden}[data-popper-arrow]:before{box-sizing:border-box;content:"";transform:rotate(45deg);visibility:visible}div[data-popper-placement^=top]>[data-popper-arrow]{bottom:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width)/2)}div[data-popper-placement^=top]>[data-popper-arrow]:before{border-bottom:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-left:transparent;border-right:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-top:transparent}div[data-popper-placement^=bottom]>[data-popper-arrow]{top:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width))}div[data-popper-placement^=bottom]>[data-popper-arrow]:before{border-bottom:transparent;border-left:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-right:transparent;border-top:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4)}div[data-popper-placement^=left]>[data-popper-arrow]{right:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width))}div[data-popper-placement^=left]>[data-popper-arrow]:before{border-bottom:transparent;border-left:transparent;border-right:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-top:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4)}div[data-popper-placement^=right]>[data-popper-arrow]{left:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width)/2)}div[data-popper-placement^=right]>[data-popper-arrow]:before{border-bottom:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-left:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-right:transparent;border-top:transparent}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-badge-primary{padding:.25em .4em}.monster-badge-primary,.monster-badge-primary-pill{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-primary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-secondary{padding:.25em .4em}.monster-badge-secondary,.monster-badge-secondary-pill{background-color:var(--monster-bg-color-secondary-3);border-radius:.25rem;color:var(--monster-color-secondary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-secondary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-tertiary{padding:.25em .4em}.monster-badge-tertiary,.monster-badge-tertiary-pill{background-color:var(--monster-bg-color-tertiary-3);border-radius:.25rem;color:var(--monster-color-tertiary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-tertiary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-destructive{padding:.25em .4em}.monster-badge-destructive,.monster-badge-destructive-pill{background-color:var(--monster-bg-color-destructive-1);border-radius:.25rem;color:var(--monster-color-destructive-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-destructive-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-success{padding:.25em .4em}.monster-badge-success,.monster-badge-success-pill{background-color:var(--monster-bg-color-success-1);border-radius:.25rem;color:var(--monster-color-success-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-success-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-warning{padding:.25em .4em}.monster-badge-warning,.monster-badge-warning-pill{background-color:var(--monster-bg-color-warning-1);border-radius:.25rem;color:var(--monster-color-warning-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-warning-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-error{padding:.25em .4em}.monster-badge-error,.monster-badge-error-pill{background-color:var(--monster-bg-color-error-1);border-radius:.25rem;color:var(--monster-color-error-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-error-pill{border-radius:10rem;padding:.25em .6em}[data-monster-role=nav] button.hidden{display:none}nav[data-monster-role=nav]{align-items:flex-end;border-bottom-style:var(--monster-border-style);border-bottom-width:thin;border-color:var(--monster-bg-color-primary-2);border-radius:var(--monster-border-radius);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;display:flex;flex-direction:row;flex-wrap:nowrap;margin-bottom:.75rem;overflow:hidden}[data-monster-role=nav] button .remove-tab{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");background-position:100% 100%;background-repeat:no-repeat;background-size:16px;flex-wrap:nowrap;height:16px;min-height:16px;order:2;width:16px}[data-monster-role=nav] button span{display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4;white-space:pre}[data-monster-role=nav] button{align-content:center;align-items:center;align-self:stretch;background-color:var(--monster-color-gray-1);border:none;border-bottom:var(--monster-border-style);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-gray-6);cursor:pointer;display:flex;font-size:1rem;font-weight:400;justify-content:center;line-height:1.5;margin-right:.75rem;outline:none;padding:.375rem 0;text-align:center;text-decoration:none;transition:color .8s;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}@media (prefers-color-scheme:dark){[data-monster-role=nav] button{background-color:var(--monster-color-gray-6);color:var(--monster-color-gray-1)}}[data-monster-role=nav] button:not([disabled]):hover,[data-monster-role=nav] button[data-monster-state=active],[data-monster-role=nav] button[data-monster-state=active]:not([disabled]):hover{border-bottom-style:var(--monster-border-style);border-color:var(--monster-bg-color-secondary-3);border-radius:var(--monster-border-radius);box-shadow:var(--monster-box-shadow-1);color:var(--monster-bg-color-secondary-3)}[data-monster-role=nav] button[disabled]{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1);cursor:not-allowed}[data-monster-role=nav] button[data-monster-role=switch]{align-self:center;border:0;order:2;touch-action:none}[data-monster-role=nav] button[data-monster-role=switch]:not([disabled]):hover{border-bottom-width:0}[data-monster-role=nav] button img{height:1.3rem;margin-left:.4rem;width:1.3rem}::slotted(:not([slot]):not(.active)){display:none}::slotted(*){align-self:center}::slotted([slot]){border-bottom-style:var(--monster-border-style);border-bottom-width:var(--monster-border-width);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);box-shadow:var(--monster-box-shadow-1)}::slotted([slot=start]){margin-right:.75rem;order:0}::slotted([slot=end]){margin-left:.75rem;order:3}[data-monster-role=nav] [data-monster-role=popper-nav] button:not([disabled]){border:0;justify-content:left;padding-left:15px;padding-right:15px;width:100%}[data-monster-role=nav] [data-monster-role=popper-nav] button:hover,[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active],[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active]:not([disabled]):hover{border:0} 
+}`, 0);
       } catch (e) {
-        addAttributeToken(
-          document.getRootNode().querySelector("html"),
-          ATTRIBUTE_ERRORMESSAGE,
-          e + ""
-        );
+        addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + "");
+      }
+    }
+  });
+
+  // source/components/stylesheet/theme.mjs
+  var ThemeStyleSheet;
+  var init_theme2 = __esm({
+    "source/components/stylesheet/theme.mjs"() {
+      init_attributes();
+      init_constants2();
+      ThemeStyleSheet = new CSSStyleSheet();
+      try {
+        ThemeStyleSheet.insertRule(`
+@layer theme { 
+.monster-theme-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-theme-primary-disabled-1{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1)}.monster-theme-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-theme-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-theme-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-theme-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-theme-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-theme-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-theme-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-border-color-1{border-color:var(--monster-color-border-1)}.monster-color-neutral-1{color:var(--monster-color-primary-1)}.monster-bg-color-primary-1{background-color:var(--monster-bg-color-primary-1)}.monster-bg-color-secondary-1{background-color:var(--monster-bg-color-secondary-1)}.monster-bg-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1)}.monster-color-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-color-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-color-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-color-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-color-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-color-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-color-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-theme-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-theme-primary-disabled-2{background-color:var(--monster-bg-color-primary-disabled-2);color:var(--monster-color-primary-disabled-2)}.monster-theme-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-theme-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-theme-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-theme-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-theme-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-theme-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-theme-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-border-color-2{border-color:var(--monster-color-border-2)}.monster-color-neutral-2{color:var(--monster-color-primary-2)}.monster-bg-color-primary-2{background-color:var(--monster-bg-color-primary-2)}.monster-bg-color-secondary-2{background-color:var(--monster-bg-color-secondary-2)}.monster-bg-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2)}.monster-color-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-color-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-color-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-color-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-color-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-color-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-color-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-theme-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-theme-primary-disabled-3{background-color:var(--monster-bg-color-primary-disabled-3);color:var(--monster-color-primary-disabled-3)}.monster-theme-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-theme-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-theme-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-theme-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-theme-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-theme-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-theme-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-border-color-3{border-color:var(--monster-color-border-3)}.monster-color-neutral-3{color:var(--monster-color-primary-3)}.monster-bg-color-primary-3{background-color:var(--monster-bg-color-primary-3)}.monster-bg-color-secondary-3{background-color:var(--monster-bg-color-secondary-3)}.monster-bg-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3)}.monster-color-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-color-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-color-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-color-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-color-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-color-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-color-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-theme-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-theme-primary-disabled-4{background-color:var(--monster-bg-color-primary-disabled-4);color:var(--monster-color-primary-disabled-4)}.monster-theme-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-theme-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-theme-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-theme-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-theme-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-theme-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-theme-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-color-4{border-color:var(--monster-color-border-4)}.monster-color-neutral-4{color:var(--monster-color-primary-4)}.monster-bg-color-primary-4{background-color:var(--monster-bg-color-primary-4)}.monster-bg-color-secondary-4{background-color:var(--monster-bg-color-secondary-4)}.monster-bg-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4)}.monster-color-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-color-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-color-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-color-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-color-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-color-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-color-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)} 
+}`, 0);
+      } catch (e) {
+        addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + "");
       }
     }
   });
 
   // source/components/form/util/popper.mjs
   function setEventListenersModifiers(mode) {
-    ;
     const options2 = extend({}, this.getOption("popper"));
     const modifiers = options2?.["modifiers"];
     if (!isArray(modifiers)) {
@@ -21084,7 +23056,6 @@ ${key.data.toString("base64")}
     Tabs: () => Tabs
   });
   function initPopperSwitch() {
-    ;
     const nodes = getSlottedElements.call(this, `[${ATTRIBUTE_ROLE}="switch"]`);
     let switchButton;
     if (nodes.size === 0) {
@@ -21092,6 +23063,10 @@ ${key.data.toString("base64")}
       switchButton.setAttribute(ATTRIBUTE_ROLE, "switch");
       switchButton.setAttribute("part", "switch");
       switchButton.classList.add("hidden");
+      const classList = this.getOption("classes.button");
+      if (classList) {
+        switchButton.classList.add(classList);
+      }
       switchButton.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M9.5 13a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm0-5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm0-5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0z"/></svg>';
       this[navElementSymbol].prepend(switchButton);
     } else {
@@ -21109,7 +23084,6 @@ ${key.data.toString("base64")}
     this[switchElementSymbol] = switchButton;
   }
   function hidePopper() {
-    ;
     if (!this[popperInstanceSymbol]) {
       return;
     }
@@ -21117,7 +23091,6 @@ ${key.data.toString("base64")}
     setEventListenersModifiers.call(this, false);
   }
   function showPopper() {
-    ;
     if (this[popperElementSymbol].style.display === STYLE_DISPLAY_MODE_BLOCK) {
       return;
     }
@@ -21127,10 +23100,12 @@ ${key.data.toString("base64")}
     this[popperInstanceSymbol].update();
     new Processing(() => {
       this[popperElementSymbol].style.removeProperty("visibility");
-    }).run();
+    }).run(void 0).then(() => {
+    }).catch((e) => {
+      addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.message);
+    });
   }
   function togglePopper() {
-    ;
     if (this[popperElementSymbol].style.display === STYLE_DISPLAY_MODE_BLOCK) {
       hidePopper.call(this);
     } else {
@@ -21138,7 +23113,6 @@ ${key.data.toString("base64")}
     }
   }
   function attachResizeObserver() {
-    ;
     this[resizeObserverSymbol] = new ResizeObserver((entries) => {
       if (this[timerCallbackSymbol] instanceof DeadMansSwitch) {
         try {
@@ -21156,7 +23130,6 @@ ${key.data.toString("base64")}
     this[resizeObserverSymbol].observe(this[navElementSymbol]);
   }
   function attachTabChangeObserver() {
-    ;
     new MutationObserver((mutations) => {
       let runUpdate = false;
       for (const mutation of mutations) {
@@ -21204,7 +23177,6 @@ ${key.data.toString("base64")}
     return self2;
   }
   function show2(element) {
-    ;
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -21214,34 +23186,59 @@ ${key.data.toString("base64")}
       const id = node.getAttribute("id");
       if (id === reference2) {
         node.classList.add("active");
+        const data = {};
+        const mask = [
+          "data-monster-attributes",
+          "data-monster-insert-reference",
+          "data-monster-state",
+          "data-monster-button-label",
+          "data-monster-objectlink",
+          "data-monster-role"
+        ];
+        for (const [, attr] of Object.entries(node.attributes)) {
+          if (attr.name.startsWith("data-") && mask.indexOf(attr.name) === -1) {
+            data[attr.name] = attr.value;
+          }
+        }
         if (node.hasAttribute(ATTRIBUTE_FORM_URL)) {
           const url = node.getAttribute(ATTRIBUTE_FORM_URL);
           if (!node.hasAttribute(ATTRIBUTE_FORM_RELOAD) || node.getAttribute(ATTRIBUTE_FORM_RELOAD).toLowerCase() === "onshow") {
             node.removeAttribute(ATTRIBUTE_FORM_URL);
           }
           const options2 = this.getOption("fetch", {});
-          loadAndAssignContent(node, url, options2);
+          const filter = void 0;
+          loadAndAssignContent(node, url, options2, filter).then(() => {
+            fireCustomEvent(this, "monster-tab-changed", {
+              reference: reference2
+            });
+          }).catch((e) => {
+            addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.message);
+          });
+        } else {
+          fireCustomEvent(this, "monster-tab-changed", {
+            reference: reference2,
+            data
+          });
         }
       } else {
         node.classList.remove("active");
       }
     }
     const standardButtons = this.getOption("buttons.standard");
-    for (const [index] in standardButtons) {
+    for (const index in standardButtons) {
       const button = standardButtons[index];
       const state = button["reference"] === reference2 ? "active" : "inactive";
       this.setOption(`buttons.standard.${index}.state`, state);
     }
     const popperButton = this.getOption("buttons.popper");
-    for (const [index] in popperButton) {
+    for (const index in popperButton) {
       const button = popperButton[index];
       const state = button["reference"] === reference2 ? "active" : "inactive";
       this.setOption(`buttons.popper.${index}.state`, state);
     }
     hidePopper.call(this);
   }
-  function initEventhandler() {
-    ;
+  function initEventHandler() {
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -21272,6 +23269,9 @@ ${key.data.toString("base64")}
             if (container instanceof HTMLElement) {
               container.remove();
               initTabButtons.call(this);
+              fireCustomEvent(this, "monster-tab-remove", {
+                reference: reference2
+              });
             }
           }
         }
@@ -21318,7 +23318,6 @@ ${key.data.toString("base64")}
     addToObjectLink(observedNode, mutationObserverSymbol, observer);
   }
   function initControlReferences() {
-    ;
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -21336,7 +23335,6 @@ ${key.data.toString("base64")}
     );
   }
   function initTabButtons() {
-    ;
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -21400,13 +23398,15 @@ ${key.data.toString("base64")}
           if (button instanceof HTMLButtonElement && button.disabled !== true) {
             show2.call(this, button);
           }
-        }).run();
+        }).run(void 0).then(() => {
+        }).catch((e) => {
+          addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.message);
+        });
       }
-      return;
+      return Promise.resolve();
     });
   }
   function checkAndRearrangeButtons() {
-    ;
     if (this[dimensionsSymbol].getVia("data.calculated", false) !== true) {
       calculateNavigationButtonsDimensions.call(this);
     }
@@ -21447,7 +23447,6 @@ ${key.data.toString("base64")}
     return getDimValue(dim["border-left-width"]) + getDimValue(dim["padding-left"]) + getDimValue(dim["margin-left"]) + getDimValue(bounding["width"]) + getDimValue(dim["border-right-width"]) + getDimValue(dim["margin-right"]) + getDimValue(dim["padding-left"]);
   }
   function rearrangeButtons() {
-    ;
     const standardButtons = [];
     const popperButtons = [];
     let sum = 0;
@@ -21473,7 +23472,6 @@ ${key.data.toString("base64")}
     }
   }
   function calculateNavigationButtonsDimensions() {
-    ;
     const width = this[navElementSymbol].getBoundingClientRect().width;
     let startEndWidth = 0;
     getSlottedElements.call(this, void 0, "start").forEach((node) => {
@@ -21484,7 +23482,9 @@ ${key.data.toString("base64")}
     });
     this[dimensionsSymbol].setVia("data.space", width - startEndWidth - 2);
     this[dimensionsSymbol].setVia("data.visible", !(width === 0));
-    const buttons = this.getOption("buttons.standard").concat(this.getOption("buttons.popper"));
+    const buttons = this.getOption("buttons.standard").concat(
+      this.getOption("buttons.popper")
+    );
     for (const [i, button] of buttons.entries()) {
       const ref = button?.reference;
       const element = this[navElementSymbol].querySelector(
@@ -21508,7 +23508,6 @@ ${key.data.toString("base64")}
     this.setOption("buttons.standard", clone(buttons));
   }
   function getButtonLabel(node) {
-    ;
     let label;
     let setLabel = false;
     if (node.hasAttribute(ATTRIBUTE_BUTTON_LABEL)) {
@@ -21538,6 +23537,7 @@ ${key.data.toString("base64")}
             <button part="button"
                     data-monster-role="button"
                     data-monster-attributes="
+                    class path:classes.button,
                     data-monster-state path:buttons.state,
                     disabled path:buttons.disabled | if:true,                    
                     data-monster-tab-reference path:buttons.reference"><span
@@ -21551,7 +23551,8 @@ ${key.data.toString("base64")}
                  data-monster-attributes="data-monster-marker path:marker"
                  data-monster-insert="buttons path:buttons.standard">
                 <slot name="start" class="invisible"></slot>
-                <div data-monster-role="popper" part="popper" tabindex="-1" class="monster-color-primary-1">
+                <div data-monster-role="popper" part="popper" tabindex="-1"
+					 data-monster-attributes="class path:classes.popper">
                     <div data-popper-arrow></div>
 
 
@@ -21588,6 +23589,7 @@ ${key.data.toString("base64")}
       init_constants3();
       init_tabs();
       init_fetch();
+      init_theme2();
       init_popper2();
       popperElementSymbol = Symbol("popperElement");
       popperNavElementSymbol = Symbol("popperNavElement");
@@ -21652,6 +23654,10 @@ ${key.data.toString("base64")}
                 accept: "text/html"
               }
             },
+            classes: {
+              button: "monster-theme-primary-1",
+              popper: "monster-theme-primary-1"
+            },
             popper: {
               placement: "bottom",
               modifiers: [
@@ -21673,11 +23679,10 @@ ${key.data.toString("base64")}
          * This method is called internal and should not be called directly.
          */
         [assembleMethodSymbol]() {
-          ;
           super[assembleMethodSymbol]();
           initControlReferences.call(this);
           this[dimensionsSymbol] = new Pathfinder({ data: {} });
-          initEventhandler.call(this);
+          initEventHandler.call(this);
           initTabButtons.call(this).then(() => {
             initPopperSwitch.call(this);
             initPopper.call(this);
@@ -21691,7 +23696,7 @@ ${key.data.toString("base64")}
          * @return {CSSStyleSheet[]}
          */
         static getCSSStyleSheet() {
-          return [TabsStyleSheet];
+          return [TabsStyleSheet, ThemeStyleSheet];
         }
         /**
          * This method is called internal and should not be called directly.
@@ -21709,7 +23714,6 @@ ${key.data.toString("base64")}
         connectedCallback() {
           super.connectedCallback();
           const document2 = getDocument();
-          ;
           for (const [, type] of Object.entries(["click", "touch"])) {
             document2.addEventListener(type, this[closeEventHandler]);
           }
@@ -22034,19 +24038,12 @@ ${key.data.toString("base64")}
       init_constants2();
       ButtonStyleSheet = new CSSStyleSheet();
       try {
-        ButtonStyleSheet.insertRule(
-          `
+        ButtonStyleSheet.insertRule(`
 @layer button { 
-[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-button-primary,button{align-items:center;background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:inline-block;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:inline-block;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:inline-block;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:inline-block;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-shadow:none;border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}[data-monster-role=control]{align-items:stretch;display:flex} 
-}`,
-          0
-        );
+[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-button-primary,button{align-items:center;background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-0{border-radius:0;border-style:none;border-width:0;border-shadow:none}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}[data-monster-role=control]{align-items:stretch;display:flex} 
+}`, 0);
       } catch (e) {
-        addAttributeToken(
-          document.getRootNode().querySelector("html"),
-          ATTRIBUTE_ERRORMESSAGE,
-          e + ""
-        );
+        addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + "");
       }
     }
   });
@@ -22059,19 +24056,12 @@ ${key.data.toString("base64")}
       init_constants2();
       RippleStyleSheet = new CSSStyleSheet();
       try {
-        RippleStyleSheet.insertRule(
-          `
+        RippleStyleSheet.insertRule(`
 @layer ripple { 
 span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}} 
-}`,
-          0
-        );
+}`, 0);
       } catch (e) {
-        addAttributeToken(
-          document.getRootNode().querySelector("html"),
-          ATTRIBUTE_ERRORMESSAGE,
-          e + ""
-        );
+        addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + "");
       }
     }
   });
@@ -22082,7 +24072,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     Button: () => Button,
     buttonElementSymbol: () => buttonElementSymbol
   });
-  function initEventhandler2() {
+  function initEventHandler2() {
     const self2 = this;
     const button = this[buttonElementSymbol];
     const type = "click";
@@ -22127,7 +24117,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         </div>`;
   }
   function createRipple(event) {
-    ;
     const button = this[buttonElementSymbol];
     const circle = document.createElement("span");
     const diameter = Math.max(button.clientWidth, button.clientHeight);
@@ -22156,7 +24145,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_button();
       init_ripple();
       init_events();
-      init_is();
       buttonElementSymbol = Symbol("buttonElement");
       Button = class extends CustomControl {
         /**
@@ -22173,9 +24161,8 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          */
         [assembleMethodSymbol]() {
           super[assembleMethodSymbol]();
-          ;
           initControlReferences2.call(this);
-          initEventhandler2.call(this);
+          initEventHandler2.call(this);
           return this;
         }
         /**
@@ -22298,7 +24285,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
             },
             disabled: false,
             actions: {
-              click: (e) => {
+              click: () => {
                 throw new Error("the click action is not defined");
               }
             },
@@ -22335,19 +24322,12 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_constants2();
       StateButtonStyleSheet = new CSSStyleSheet();
       try {
-        StateButtonStyleSheet.insertRule(
-          `
+        StateButtonStyleSheet.insertRule(`
 @layer statebutton { 
-[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-shadow:none;border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030}div[data-monster-role=control]{height:100%}[data-monster-role=button]{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between;transition:width 10s ease-in-out}div[data-monster-role=label]{align-items:center;display:flex;justify-content:center;width:100%}[data-monster-role=state]{align-content:center;align-items:center;align-self:stretch;display:flex;transition:width 12s ease-in-out}[data-monster-role=state]>img,[data-monster-role=state]>svg{margin-left:.3em}[data-monster-role=state]>svg.successful{animation:bouncy .5s linear forwards;color:var(--monster-color-successful)}[data-monster-role=state]>svg.activity{animation:bouncy .5s linear forwards;color:var(--monster-color-activity)}[data-monster-role=state]>svg.failed{animation:bouncy .5s linear forwards;color:var(--monster-color-failed)}[data-monster-role=state]>svg.activity{animation-duration:1s;animation-iteration-count:infinite;animation-name:activity;animation-timing-function:cubic-bezier(0,0,.2,1)}@keyframes activity{0%{transform:scale(1)}50%{transform:scale(.1)}to{transform:scale(1)}}@keyframes bouncy{0%{opacity:0;transform:scale(.1)}80%{opacity:1;transform:scale(1.15)}90%{transform:scale(.9)}to{transform:scale(1)}} 
-}`,
-          0
-        );
+[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-0{border-radius:0;border-style:none;border-width:0;border-shadow:none}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030}div[data-monster-role=control]{height:100%}[data-monster-role=button]{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between;transition:width 10s ease-in-out}div[data-monster-role=label]{align-items:center;display:flex;gap:.4rem;justify-content:center;width:100%}[data-monster-role=state]{align-content:center;align-items:center;align-self:stretch;display:flex;transition:width 12s ease-in-out}[data-monster-role=state]>img,[data-monster-role=state]>svg{margin-left:.3em}[data-monster-role=state]>svg.successful{animation:bouncy .5s linear forwards;color:var(--monster-color-successful)}[data-monster-role=state]>svg.activity{animation:bouncy .5s linear forwards;color:var(--monster-color-activity)}[data-monster-role=state]>svg.failed{animation:bouncy .5s linear forwards;color:var(--monster-color-failed)}[data-monster-role=state]>svg.activity{animation-duration:1s;animation-iteration-count:infinite;animation-name:activity;animation-timing-function:cubic-bezier(0,0,.2,1)}[data-monster-role=state].stateless{display:none}@keyframes activity{0%{transform:scale(1)}50%{transform:scale(.1)}to{transform:scale(1)}}@keyframes bouncy{0%{opacity:0;transform:scale(.1)}80%{opacity:1;transform:scale(1.15)}90%{transform:scale(.9)}to{transform:scale(1)}} 
+}`, 0);
       } catch (e) {
-        addAttributeToken(
-          document.getRootNode().querySelector("html"),
-          ATTRIBUTE_ERRORMESSAGE,
-          e + ""
-        );
+        addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + "");
       }
     }
   });
@@ -22431,7 +24411,9 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
             data-monster-role="button"
             part="button">
         <div data-monster-role="label" data-monster-replace="path:labels.button"></div>
-        <div data-monster-role="state" data-monster-replace="path:current.presentation"></div>
+        <div data-monster-role="state"
+			 data-monster-attributes="class path:current.state"
+			 data-monster-replace="path:current.presentation"></div>
     </button>
 </div>`;
   }
@@ -22452,7 +24434,9 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @since 2.1.0
          */
         static get [instanceSymbol]() {
-          return Symbol.for("@schukai/monster/components/form/state-button@@instance");
+          return Symbol.for(
+            "@schukai/monster/components/form/state-button@@instance"
+          );
         }
         /**
          * To set the options via the html tag the attribute `data-monster-options` must be used.
@@ -22491,7 +24475,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          *
          * @since 3.18.0 a previously set timeout is cleared
          *
-         * @param {state} state
+         * @param {string} state
          * @param {number} timeout
          * @return {Monster.Components.Form.StateButton}
          * @throws {TypeError} value is not a string
@@ -22666,7 +24650,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }
   });
 
-  // node_modules/.pnpm/@floating-ui+utils@0.1.6/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs
+  // node_modules/.pnpm/@floating-ui+utils@0.2.1/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs
   function clamp(start2, value, end2) {
     return max2(start2, min2(value, end2));
   }
@@ -22771,7 +24755,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
   }
   var sides, alignments, placements2, min2, max2, round2, floor, createCoords, oppositeSideMap, oppositeAlignmentMap;
   var init_floating_ui_utils = __esm({
-    "node_modules/.pnpm/@floating-ui+utils@0.1.6/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs"() {
+    "node_modules/.pnpm/@floating-ui+utils@0.2.1/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs"() {
       sides = ["top", "right", "bottom", "left"];
       alignments = ["start", "end"];
       placements2 = /* @__PURE__ */ sides.reduce((acc, side) => acc.concat(side, side + "-" + alignments[0], side + "-" + alignments[1]), []);
@@ -22796,7 +24780,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }
   });
 
-  // node_modules/.pnpm/@floating-ui+core@1.5.0/node_modules/@floating-ui/core/dist/floating-ui.core.mjs
+  // node_modules/.pnpm/@floating-ui+core@1.6.0/node_modules/@floating-ui/core/dist/floating-ui.core.mjs
   function computeCoordsFromPlacement(_ref, placement, rtl) {
     let {
       reference: reference2,
@@ -22895,6 +24879,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       y: 1
     };
     const elementClientRect = rectToClientRect2(platform2.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform2.convertOffsetParentRelativeRectToViewportRelativeRect({
+      elements,
       rect,
       offsetParent,
       strategy
@@ -22955,7 +24940,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
   }
   var computePosition, arrow2, autoPlacement, flip2, offset2, shift, size;
   var init_floating_ui_core = __esm({
-    "node_modules/.pnpm/@floating-ui+core@1.5.0/node_modules/@floating-ui/core/dist/floating-ui.core.mjs"() {
+    "node_modules/.pnpm/@floating-ui+core@1.6.0/node_modules/@floating-ui/core/dist/floating-ui.core.mjs"() {
       init_floating_ui_utils();
       init_floating_ui_utils();
       computePosition = async (reference2, floating, config2) => {
@@ -23031,7 +25016,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
               } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));
             }
             i = -1;
-            continue;
           }
         }
         return {
@@ -23089,7 +25073,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
           const max3 = clientSize - arrowDimensions[length] - maxPadding;
           const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;
           const offset3 = clamp(min$1, center, max3);
-          const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center != offset3 && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;
+          const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset3 && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;
           const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max3 : 0;
           return {
             [axis]: coords[axis] + alignmentOffset,
@@ -23293,15 +25277,24 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
           name: "offset",
           options: options2,
           async fn(state) {
+            var _middlewareData$offse, _middlewareData$arrow;
             const {
               x,
-              y
+              y,
+              placement,
+              middlewareData
             } = state;
             const diffCoords = await convertValueToCoords(state, options2);
+            if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {
+              return {};
+            }
             return {
               x: x + diffCoords.x,
               y: y + diffCoords.y,
-              data: diffCoords
+              data: {
+                ...diffCoords,
+                placement
+              }
             };
           }
         };
@@ -23453,7 +25446,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }
   });
 
-  // node_modules/.pnpm/@floating-ui+utils@0.1.6/node_modules/@floating-ui/utils/dom/dist/floating-ui.utils.dom.mjs
+  // node_modules/.pnpm/@floating-ui+utils@0.2.1/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs
   function getNodeName2(node) {
     if (isNode2(node)) {
       return (node.nodeName || "").toLowerCase();
@@ -23462,7 +25455,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
   }
   function getWindow3(node) {
     var _node$ownerDocument;
-    return (node == null ? void 0 : (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;
+    return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;
   }
   function getDocumentElement2(node) {
     var _ref;
@@ -23574,11 +25567,11 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));
   }
   var init_floating_ui_utils_dom = __esm({
-    "node_modules/.pnpm/@floating-ui+utils@0.1.6/node_modules/@floating-ui/utils/dom/dist/floating-ui.utils.dom.mjs"() {
+    "node_modules/.pnpm/@floating-ui+utils@0.2.1/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs"() {
     }
   });
 
-  // node_modules/.pnpm/@floating-ui+dom@1.5.3/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs
+  // node_modules/.pnpm/@floating-ui+dom@1.6.3/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs
   function getCssDimensions(element) {
     const css = getComputedStyle2(element);
     let width = parseFloat(css.width) || 0;
@@ -23670,8 +25663,9 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     if (domElement) {
       const win = getWindow3(domElement);
       const offsetWin = offsetParent && isElement2(offsetParent) ? getWindow3(offsetParent) : offsetParent;
-      let currentIFrame = win.frameElement;
-      while (currentIFrame && offsetParent && offsetWin !== win) {
+      let currentWin = win;
+      let currentIFrame = currentWin.frameElement;
+      while (currentIFrame && offsetParent && offsetWin !== currentWin) {
         const iframeScale = getScale(currentIFrame);
         const iframeRect = currentIFrame.getBoundingClientRect();
         const css = getComputedStyle2(currentIFrame);
@@ -23683,7 +25677,8 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         height *= iframeScale.y;
         x += left2;
         y += top2;
-        currentIFrame = getWindow3(currentIFrame).frameElement;
+        currentWin = getWindow3(currentIFrame);
+        currentIFrame = currentWin.frameElement;
       }
     }
     return rectToClientRect2({
@@ -23693,15 +25688,26 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       y
     });
   }
+  function isTopLayer(floating) {
+    return topLayerSelectors.some((selector) => {
+      try {
+        return floating.matches(selector);
+      } catch (e) {
+        return false;
+      }
+    });
+  }
   function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
     let {
+      elements,
       rect,
       offsetParent,
       strategy
     } = _ref;
-    const isOffsetParentAnElement = isHTMLElement2(offsetParent);
+    const isFixed = strategy === "fixed";
     const documentElement = getDocumentElement2(offsetParent);
-    if (offsetParent === documentElement) {
+    const topLayer = elements ? isTopLayer(elements.floating) : false;
+    if (offsetParent === documentElement || topLayer && isFixed) {
       return rect;
     }
     let scroll = {
@@ -23710,7 +25716,8 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     };
     let scale = createCoords(1);
     const offsets = createCoords(0);
-    if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== "fixed") {
+    const isOffsetParentAnElement = isHTMLElement2(offsetParent);
+    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
       if (getNodeName2(offsetParent) !== "body" || isOverflowElement(documentElement)) {
         scroll = getNodeScroll2(offsetParent);
       }
@@ -23869,7 +25876,14 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     };
   }
   function getDimensions(element) {
-    return getCssDimensions(element);
+    const {
+      width,
+      height
+    } = getCssDimensions(element);
+    return {
+      width,
+      height
+    };
   }
   function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
     const isOffsetParentAnElement = isHTMLElement2(offsetParent);
@@ -23893,9 +25907,11 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         offsets.x = getWindowScrollBarX2(documentElement);
       }
     }
+    const x = rect.left + scroll.scrollLeft - offsets.x;
+    const y = rect.top + scroll.scrollTop - offsets.y;
     return {
-      x: rect.left + scroll.scrollLeft - offsets.x,
-      y: rect.top + scroll.scrollTop - offsets.y,
+      x,
+      y,
       width: rect.width,
       height: rect.height
     };
@@ -23911,7 +25927,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
   }
   function getOffsetParent2(element, polyfill) {
     const window2 = getWindow3(element);
-    if (!isHTMLElement2(element)) {
+    if (!isHTMLElement2(element) || isTopLayer(element)) {
       return window2;
     }
     let offsetParent = getTrueOffsetParent2(element, polyfill);
@@ -23931,8 +25947,9 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     let timeoutId;
     const root = getDocumentElement2(element);
     function cleanup() {
+      var _io;
       clearTimeout(timeoutId);
-      io && io.disconnect();
+      (_io = io) == null || _io.disconnect();
       io = null;
     }
     function refresh(skip, threshold) {
@@ -24024,7 +26041,8 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
           resizeObserver.unobserve(floating);
           cancelAnimationFrame(reobserveFrame);
           reobserveFrame = requestAnimationFrame(() => {
-            resizeObserver && resizeObserver.observe(floating);
+            var _resizeObserver;
+            (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);
           });
         }
         update();
@@ -24049,40 +26067,37 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }
     update();
     return () => {
+      var _resizeObserver2;
       ancestors.forEach((ancestor) => {
         ancestorScroll && ancestor.removeEventListener("scroll", update);
         ancestorResize && ancestor.removeEventListener("resize", update);
       });
-      cleanupIo && cleanupIo();
-      resizeObserver && resizeObserver.disconnect();
+      cleanupIo == null || cleanupIo();
+      (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();
       resizeObserver = null;
       if (animationFrame) {
         cancelAnimationFrame(frameId);
       }
     };
   }
-  var noOffsets, getElementRects, platform, computePosition2;
+  var noOffsets, topLayerSelectors, getElementRects, platform, autoPlacement2, shift2, flip3, size2, arrow3, computePosition2;
   var init_floating_ui_dom = __esm({
-    "node_modules/.pnpm/@floating-ui+dom@1.5.3/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs"() {
+    "node_modules/.pnpm/@floating-ui+dom@1.6.3/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs"() {
       init_floating_ui_core();
       init_floating_ui_core();
       init_floating_ui_utils();
       init_floating_ui_utils_dom();
       noOffsets = /* @__PURE__ */ createCoords(0);
-      getElementRects = async function(_ref) {
-        let {
-          reference: reference2,
-          floating,
-          strategy
-        } = _ref;
+      topLayerSelectors = [":popover-open", ":modal"];
+      getElementRects = async function(data) {
         const getOffsetParentFn = this.getOffsetParent || getOffsetParent2;
         const getDimensionsFn = this.getDimensions;
         return {
-          reference: getRectRelativeToOffsetParent(reference2, await getOffsetParentFn(floating), strategy),
+          reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),
           floating: {
             x: 0,
             y: 0,
-            ...await getDimensionsFn(floating)
+            ...await getDimensionsFn(data.floating)
           }
         };
       };
@@ -24098,6 +26113,11 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         isElement: isElement2,
         isRTL
       };
+      autoPlacement2 = autoPlacement;
+      shift2 = shift;
+      flip3 = flip2;
+      size2 = size;
+      arrow3 = arrow2;
       computePosition2 = (reference2, floating, options2) => {
         const cache = /* @__PURE__ */ new Map();
         const mergedOptions = {
@@ -24157,10 +26177,10 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         const fn2 = kv.shift();
         switch (fn2) {
           case "flip":
-            config2["middleware"][key] = flip2();
+            config2["middleware"][key] = flip3();
             break;
           case "shift":
-            config2["middleware"][key] = shift();
+            config2["middleware"][key] = shift2();
             break;
           case "autoPlacement":
             let defaultAllowedPlacements = ["top", "bottom", "left", "right"];
@@ -24177,7 +26197,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
               );
             }
             defaultAllowedPlacements.unshift(config2.placement);
-            config2["middleware"][key] = autoPlacement({
+            config2["middleware"][key] = autoPlacement2({
               crossAxis: true,
               autoAlignment: true,
               allowedPlacements: defaultAllowedPlacements
@@ -24188,11 +26208,11 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
             break;
           case "arrow":
             if (arrowElement) {
-              config2["middleware"][key] = arrow2({ element: arrowElement });
+              config2["middleware"][key] = arrow3({ element: arrowElement });
             }
             break;
           case "size":
-            config2["middleware"][key] = size({
+            config2["middleware"][key] = size2({
               apply({ availableWidth, availableHeight, elements }) {
                 const maxWidth = body.clientWidth;
                 const maxHeight = body.clientHeight;
@@ -24313,19 +26333,12 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_constants2();
       SelectStyleSheet = new CSSStyleSheet();
       try {
-        SelectStyleSheet.insertRule(
-          `
+        SelectStyleSheet.insertRule(`
 @layer select { 
-.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-shadow:none;border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}[data-monster-role=control]{width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-badge-primary{padding:.25em .4em}.monster-badge-primary,.monster-badge-primary-pill{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-primary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-secondary{padding:.25em .4em}.monster-badge-secondary,.monster-badge-secondary-pill{background-color:var(--monster-bg-color-secondary-3);border-radius:.25rem;color:var(--monster-color-secondary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-secondary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-tertiary{padding:.25em .4em}.monster-badge-tertiary,.monster-badge-tertiary-pill{background-color:var(--monster-bg-color-tertiary-3);border-radius:.25rem;color:var(--monster-color-tertiary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-tertiary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-destructive{padding:.25em .4em}.monster-badge-destructive,.monster-badge-destructive-pill{background-color:var(--monster-bg-color-destructive-1);border-radius:.25rem;color:var(--monster-color-destructive-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-destructive-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-success{padding:.25em .4em}.monster-badge-success,.monster-badge-success-pill{background-color:var(--monster-bg-color-success-1);border-radius:.25rem;color:var(--monster-color-success-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-success-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-warning{padding:.25em .4em}.monster-badge-warning,.monster-badge-warning-pill{background-color:var(--monster-bg-color-warning-1);border-radius:.25rem;color:var(--monster-color-warning-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-warning-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-error{padding:.25em .4em}.monster-badge-error,.monster-badge-error-pill{background-color:var(--monster-bg-color-error-1);border-radius:.25rem;color:var(--monster-color-error-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-error-pill{border-radius:10rem;padding:.25em .6em}div[data-monster-role=popper]{align-content:center;background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;justify-content:space-between;left:0;padding:1.1em;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:var(--monster-z-index-modal)}div[data-monster-role=popper] div[data-monster-role=arrow]{background:var(--monster-bg-color-primary-1);height:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);pointer-events:none;position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);z-index:-1}[data-monster-role=container]{-webkit-appearance:none;-moz-appearance:none;appearance:none;flex:4 0 90%;min-height:1.4em}.d-none{display:none!important}div[data-monster-role=control]{display:flex;height:100%;position:relative}[data-monster-role=container].open{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708l6-6z'/%3E%3C/svg%3E")}[data-monster-role=container].clear{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E")}[data-monster-role=control]{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-2);border-color:var(--monster-bg-color-primary-2);-o-border-image:initial;border-image:initial;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:thin;box-sizing:border-box;color:var(--monster-color-primary-2);display:flex;font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem}@media (prefers-color-scheme:light){[data-monster-role=control]{background-color:var(--monster-bg-color-primary-2);border-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-2)}[data-monster-role=control]:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px}}[data-monster-role=control]:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}div[data-monster-role=selection]{align-items:center;display:flex;flex-direction:row;flex-wrap:wrap;gap:5px;justify-content:flex-start;margin:5px}[data-monster-role=option-control]{margin-right:8px}[data-monster-role=badge]{display:inline-flex}[data-monster-role=badge-label]{align-content:center;align-items:center;display:flex;flex-direction:row;gap:7px;justify-content:space-between}[data-monster-role=remove-badge]{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E");background-position:100% 100%;background-repeat:no-repeat;background-size:16px;height:16px;margin-left:5px;min-height:16px;order:2;width:16px}@media (prefers-color-scheme:light){[data-monster-role=remove-badge]{filter:invert(1)}}[data-monster-role=filter],[data-monster-role=popper-filter]{display:flex;flex-grow:200;order:99999999;visibility:hidden}[data-monster-role=filter].active{background-color:var(--monster-bg-color-primary-2);border:0;border-color:var(--monster-bg-color-primary-3);border-bottom:1px solid var(--monster-bg-color-primary-3);color:var(--monster-color-primary-2);min-width:40%;outline:none;visibility:visible}.active[data-monster-role=filter][name=popper-filter]{height:1.5em;margin:2.5em;padding:2px;width:calc(100% - var(--monster-border-width)*2)}.option-filter-control{align-items:center;background-color:var(--monster-bg-color-primary-2);display:flex;height:2.5em;margin:-1.1em -1.1em .3em}.status-or-remove-badges{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:16px;min-height:16px;width:16px}[data-monster-role=status-or-remove-badges].open{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708l6-6z'/%3E%3C/svg%3E")}[data-monster-role=status-or-remove-badges].empty{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-dash-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z'/%3E%3C/svg%3E")}[data-monster-role=status-or-remove-badges].clear{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E")}[data-monster-role=status-or-remove-badges].loading{animation-duration:1s;animation-iteration-count:infinite;animation-name:activity;animation-timing-function:cubic-bezier(0,0,.2,1);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='activity'%3E%3Ccircle cx='8' cy='8' r='8'/%3E%3C/svg%3E")}@keyframes activity{0%{transform:scale(1)}50%{transform:scale(.1)}to{transform:scale(1)}}[data-monster-role=options]{box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1}[data-monster-role=option]{align-items:center;box-sizing:border-box;display:flex;padding:6px 5px}[data-monster-role=option] label{align-items:center;display:flex;flex-direction:row;justify-content:flex-start;width:100%}[data-monster-role=option] label>div{align-items:center;display:flex;flex-direction:row;justify-content:space-between;outline:none;width:100%}[data-monster-role=no-options]{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2);margin:1.1em 0 0 1.1em}.selected{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}[data-monster-role=option][data-monster-filtered=true],[data-monster-role=option][data-monster-visibility=hidden]{display:none}[data-monster-role=option][data-monster-focused=true]{outline:1px dashed var(--monster-color-selection-2);outline-offset:2px}[data-monster-role=option]>input:focus,[data-monster-role=option]>label:focus{outline:none} 
-}`,
-          0
-        );
+.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-0{border-radius:0;border-style:none;border-width:0;border-shadow:none}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}[data-monster-role=control]{width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-badge-primary{padding:.25em .4em}.monster-badge-primary,.monster-badge-primary-pill{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-primary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-secondary{padding:.25em .4em}.monster-badge-secondary,.monster-badge-secondary-pill{background-color:var(--monster-bg-color-secondary-3);border-radius:.25rem;color:var(--monster-color-secondary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-secondary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-tertiary{padding:.25em .4em}.monster-badge-tertiary,.monster-badge-tertiary-pill{background-color:var(--monster-bg-color-tertiary-3);border-radius:.25rem;color:var(--monster-color-tertiary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-tertiary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-destructive{padding:.25em .4em}.monster-badge-destructive,.monster-badge-destructive-pill{background-color:var(--monster-bg-color-destructive-1);border-radius:.25rem;color:var(--monster-color-destructive-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-destructive-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-success{padding:.25em .4em}.monster-badge-success,.monster-badge-success-pill{background-color:var(--monster-bg-color-success-1);border-radius:.25rem;color:var(--monster-color-success-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-success-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-warning{padding:.25em .4em}.monster-badge-warning,.monster-badge-warning-pill{background-color:var(--monster-bg-color-warning-1);border-radius:.25rem;color:var(--monster-color-warning-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-warning-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-error{padding:.25em .4em}.monster-badge-error,.monster-badge-error-pill{background-color:var(--monster-bg-color-error-1);border-radius:.25rem;color:var(--monster-color-error-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-error-pill{border-radius:10rem;padding:.25em .6em}div[data-monster-role=popper]{align-content:center;background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;justify-content:space-between;left:0;padding:1.1em;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:var(--monster-z-index-modal)}div[data-monster-role=popper] div[data-monster-role=arrow]{background:var(--monster-bg-color-primary-1);height:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);pointer-events:none;position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);z-index:-1}[data-monster-role=container]{-webkit-appearance:none;-moz-appearance:none;appearance:none;flex:4 0 90%;min-height:1.4em}.d-none{display:none!important}div[data-monster-role=control]{display:flex;height:100%;position:relative}[data-monster-role=container].open{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708z'/%3E%3C/svg%3E")}[data-monster-role=container].clear{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E")}[data-monster-role=control]{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-2);border-color:var(--monster-bg-color-primary-2);-o-border-image:initial;border-image:initial;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:thin;box-sizing:border-box;color:var(--monster-color-primary-2);display:flex;font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem}@media (prefers-color-scheme:light){[data-monster-role=control]{background-color:var(--monster-bg-color-primary-2);border-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-2)}[data-monster-role=control]:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px}}[data-monster-role=control]:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}div[data-monster-role=selection]{align-items:center;display:flex;flex-direction:row;flex-wrap:wrap;gap:5px;justify-content:flex-start;margin:5px}[data-monster-role=option-control]{margin-right:8px}[data-monster-role=badge]{display:inline-flex}[data-monster-role=badge-label]{align-content:center;align-items:center;display:flex;flex-direction:row;gap:7px;justify-content:space-between}[data-monster-role=remove-badge]{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");background-position:100% 100%;background-repeat:no-repeat;background-size:16px;height:16px;margin-left:5px;min-height:16px;order:2;width:16px}@media (prefers-color-scheme:light){[data-monster-role=remove-badge]{filter:invert(1)}}[data-monster-role=filter],[data-monster-role=popper-filter]{display:flex;flex-grow:200;order:99999999;visibility:hidden}[data-monster-role=filter].active{background-color:var(--monster-bg-color-primary-2);border:0;border-color:var(--monster-bg-color-primary-3);border-bottom:1px solid var(--monster-bg-color-primary-3);color:var(--monster-color-primary-2);min-width:40%;outline:none;visibility:visible}.active[data-monster-role=filter][name=popper-filter]{height:1.5em;margin:2.5em;padding:2px;width:calc(100% - var(--monster-border-width)*2)}.option-filter-control{align-items:center;background-color:var(--monster-bg-color-primary-2);display:flex;height:2.5em;margin:-1.1em -1.1em .3em}.status-or-remove-badges{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:16px;min-height:16px;width:16px}[data-monster-role=status-or-remove-badges].open{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708z'/%3E%3C/svg%3E")}[data-monster-role=status-or-remove-badges].empty{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-dash-circle'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E")}[data-monster-role=status-or-remove-badges].clear{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E")}[data-monster-role=status-or-remove-badges].loading{animation-duration:1s;animation-iteration-count:infinite;animation-name:activity;animation-timing-function:cubic-bezier(0,0,.2,1);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='activity'%3E%3Ccircle cx='8' cy='8' r='8'/%3E%3C/svg%3E")}@keyframes activity{0%{transform:scale(1)}50%{transform:scale(.1)}to{transform:scale(1)}}[data-monster-role=options]{box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1}[data-monster-role=option]{align-items:center;box-sizing:border-box;display:flex;padding:6px 5px}[data-monster-role=option] label{align-items:center;display:flex;flex-direction:row;justify-content:flex-start;width:100%}[data-monster-role=option] label>div{align-items:center;display:flex;flex-direction:row;justify-content:space-between;outline:none;width:100%}[data-monster-role=no-options]{background-color:var(--monster-bg-color-warning-2);color:var(--monster-col or-warning-2);margin:1.1em 0 0 1.1em}.selected{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}[data-monster-role=option][data-monster-filtered=true],[data-monster-role=option][data-monster-visibility=hidden]{display:none}[data-monster-role=option][data-monster-focused=true]{outline:1px dashed var(--monster-color-selection-2);outline-offset:-2px}[data-monster-role=option]>input:focus,[data-monster-role=option]>label:focus{outline:none} 
+}`, 0);
       } catch (e) {
-        addAttributeToken(
-          document.getRootNode().querySelector("html"),
-          ATTRIBUTE_ERRORMESSAGE,
-          e + ""
-        );
+        addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + "");
       }
     }
   });
@@ -24339,7 +26352,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     popperElementSymbol: () => popperElementSymbol2
   });
   function initOptionsFromArguments2() {
-    ;
     const options2 = {};
     const template = this.getAttribute("data-monster-selected-template");
     if (isString(template)) {
@@ -24364,7 +26376,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     return options2;
   }
   function attachResizeObserver2() {
-    ;
     this[resizeObserverSymbol2] = new ResizeObserver((entries) => {
       if (this[timerCallbackSymbol2] instanceof DeadMansSwitch) {
         try {
@@ -24382,7 +26393,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     this[resizeObserverSymbol2].observe(this.parentElement);
   }
   function disconnectResizeObserver() {
-    ;
     if (this[resizeObserverSymbol2] instanceof ResizeObserver) {
       this[resizeObserverSymbol2].disconnect();
     }
@@ -24410,14 +26420,13 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
 </div>`;
   }
   function parseSlotsToOptions() {
-    ;
     let options2 = this.getOption("options");
     if (!isIterable(options2)) {
       options2 = [];
     }
     let counter = 1;
     getSlottedElements.call(this, "div").forEach((node) => {
-      let value = String(counter++);
+      let value = (counter++).toString();
       let visibility = "visible";
       if (node.hasAttribute("data-monster-value")) {
         value = node.getAttribute("data-monster-value");
@@ -24466,7 +26475,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     });
   }
   function buildSelectionLabel(value) {
-    ;
     const options2 = this.getOption("options");
     for (let i = 0; i < options2.length; i++) {
       const o = options2?.[i];
@@ -24479,7 +26487,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     return void 0;
   }
   function getSelectionLabel(value) {
-    ;
     const callback = this.getOption("formatter.selection");
     if (isFunction(callback)) {
       const label = callback.call(this, value);
@@ -24492,7 +26499,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     return this.getOption("labels.cannot-be-loaded", value);
   }
   function handleToggleKeyboardEvents(event) {
-    ;
     switch (event?.["code"]) {
       case "Escape":
         toggle.call(this);
@@ -24502,6 +26508,15 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         toggle.call(this);
         event.preventDefault();
         break;
+      case "ArrowDown":
+        show3.call(this);
+        activateCurrentOption.call(this, FOCUS_DIRECTION_DOWN);
+        event.preventDefault();
+        break;
+      case "ArrowUp":
+        hide4.call(this);
+        event.preventDefault();
+        break;
     }
   }
   function initOptionObserver2() {
@@ -24523,7 +26538,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     );
   }
   function getDefaultTranslation() {
-    ;
     const translation = new Translations("en").assignTranslations(
       this.getOption("labels", {})
     );
@@ -24535,7 +26549,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     return translation;
   }
   function setSummaryAndControlText() {
-    ;
     const translations = getDefaultTranslation.call(this);
     const selections = this.getOption("selection");
     const text = translations.getPluralRuleText(
@@ -24563,7 +26576,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     );
   }
   function calcAndSetOptionsDimension() {
-    ;
     const options2 = getOptionElements.call(this);
     const container = this[optionsElementSymbol];
     if (!(container instanceof HTMLElement && options2 instanceof NodeList)) {
@@ -24580,7 +26592,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       let h = option.getBoundingClientRect().height;
       h += parseInt(computedStyle.getPropertyValue("margin-top"), 10);
       h += parseInt(computedStyle.getPropertyValue("margin-bottom"), 10);
-      optionHeight = Math.max(optionHeight, h);
+      optionHeight += h;
       visible++;
       if (visible > max3) {
         break;
@@ -24597,10 +26609,17 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
           this.getOption("labels.no-options-available")
         );
       } else {
-        this.setOption(
-          "messages.emptyOptions",
-          this.getOption("labels.no-options-found")
-        );
+        if (this.getOption("filter.mode") === FILTER_MODE_DISABLED) {
+          this.setOption(
+            "messages.emptyOptions",
+            this.getOption("labels.no-options-available")
+          );
+        } else {
+          this.setOption(
+            "messages.emptyOptions",
+            this.getOption("labels.no-options-found")
+          );
+        }
       }
       this[noOptionsAvailableElementSymbol].classList.remove("d-none");
     } else {
@@ -24611,7 +26630,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     padding += parseInt(styles.getPropertyValue("padding-bottom"), 10);
     let margin = parseInt(styles.getPropertyValue("margin-top"), 10);
     margin += parseInt(styles.getPropertyValue("margin-bottom"), 10);
-    const containerHeight = optionHeight * visible + padding + margin;
+    const containerHeight = optionHeight + padding + margin;
     container.style.height = `${containerHeight}px`;
     if (scrollFlag === true) {
       container.style.overflowY = "scroll";
@@ -24623,7 +26642,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     container.style.overflowX = "auto";
   }
   function activateCurrentOption(direction) {
-    ;
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -24646,12 +26664,19 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
           }
         }
       } else {
+        let found = false;
         while (focused.previousSibling) {
           focused = focused.previousSibling;
           if (focused instanceof HTMLElement && focused.hasAttribute(ATTRIBUTE_ROLE) && focused.getAttribute(ATTRIBUTE_ROLE) === "option" && focused.matches("[data-monster-visibility=visible]") && focused.matches(":not([data-monster-filtered=true])")) {
+            found = true;
             break;
           }
         }
+        if (found === false) {
+          console.log("not found");
+          console.log(this.focus());
+          focusFilter2.call(this);
+        }
       }
     }
     new Processing(() => {
@@ -24662,10 +26687,11 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         focused.focus();
         focused.setAttribute(`${ATTRIBUTE_PREFIX}focused`, true);
       }
-    }).run();
+    }).run().catch((e) => {
+      addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.message);
+    });
   }
   function filterOptions() {
-    ;
     new Processing(() => {
       let filterValue;
       switch (this.getOption("filter.position")) {
@@ -24693,16 +26719,17 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         }
       }
     }).run().then(() => {
-      new Processing(10, () => {
+      new Processing(100, () => {
         calcAndSetOptionsDimension.call(this);
         focusFilter2.call(this);
-      }).run();
+      }).run().catch((e) => {
+        addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.message);
+      });
     }).catch((e) => {
       addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.message);
     });
   }
   function handleFilterKeyboardEvents(event) {
-    ;
     const shiftKey = event?.["shiftKey"];
     switch (event?.["code"]) {
       case "Tab":
@@ -24724,17 +26751,33 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         event.preventDefault();
         break;
       default:
-        if (this.getOption("filter.mode") !== FILTER_MODE_REMOTE) {
-          filterOptions.call(this);
-        } else {
-          filterFromRemote.call(this).catch((e) => {
-            addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.message);
-          });
+        if (this.getOption("features.lazyLoad") === true && this[lazyLoadDoneSymbol] !== true) {
+          this.click();
         }
+        handleFilterKeyEvents.call(this);
     }
   }
+  function handleFilterKeyEvents() {
+    if (this[keyFilterEventSymbol] instanceof DeadMansSwitch) {
+      try {
+        this[keyFilterEventSymbol].touch();
+        return;
+      } catch (e) {
+        delete this[keyFilterEventSymbol];
+      }
+    }
+    this[keyFilterEventSymbol] = new DeadMansSwitch(200, () => {
+      if (this.getOption("filter.mode") !== FILTER_MODE_REMOTE) {
+        filterOptions.call(this);
+      } else {
+        filterFromRemote.call(this).catch((e) => {
+          addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.message);
+        });
+      }
+      delete this[keyFilterEventSymbol];
+    });
+  }
   function filterFromRemote() {
-    ;
     if (!(this[inlineFilterElementSymbol] instanceof HTMLElement)) {
       return;
     }
@@ -24763,7 +26806,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }).run();
   }
   function handleOptionKeyboardEvents(event) {
-    ;
     const shiftKey = event?.["shiftKey"];
     switch (event?.["code"]) {
       case "Escape":
@@ -24800,7 +26842,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }
   }
   function getFilterMode() {
-    ;
     switch (this.getOption("filter.mode")) {
       case FILTER_MODE_OPTIONS:
         return FILTER_MODE_OPTIONS;
@@ -24811,7 +26852,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }
   }
   function blurFilter() {
-    ;
     if (!(this[inlineFilterElementSymbol] instanceof HTMLElement)) {
       return;
     }
@@ -24824,7 +26864,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     this[inlineFilterElementSymbol].blur();
   }
   function focusPopperFilter(focusOptions) {
-    ;
     this[popperFilterContainerElementSymbol].classList.remove("d-none");
     this[popperFilterElementSymbol].classList.add("active");
     this[inlineFilterElementSymbol].classList.remove("active");
@@ -24846,7 +26885,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }, 100);
   }
   function focusInlineFilter(focusOptions) {
-    ;
     const options2 = this.getOption("options");
     if ((!isArray(options2) || options2.length === 0) && this.getOption("filter.mode") !== FILTER_MODE_REMOTE) {
       return;
@@ -24863,7 +26901,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }, 100);
   }
   function focusFilter2(focusOptions) {
-    ;
     if (getFilterMode.call(this) === FILTER_MODE_DISABLED) {
       this[popperFilterContainerElementSymbol].classList.add("d-none");
       this[inlineFilterElementSymbol].classList.add("d-none");
@@ -24875,7 +26912,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     return focusPopperFilter.call(this, focusOptions);
   }
   function gatherState() {
-    ;
     const type = this.getOption("type");
     if (["radio", "checkbox"].indexOf(type) === -1) {
       throw new Error("unsupported type");
@@ -24897,10 +26933,12 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }).catch((e) => {
       addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, `${e}`);
     });
+    if (this.getOption("features.closeOnSelect") === true) {
+      toggle.call(this);
+    }
     return this;
   }
   function clearSelection() {
-    ;
     const type = this.getOption("type");
     if (["radio", "checkbox"].indexOf(type) === -1) {
       throw new Error("unsupported type");
@@ -24914,7 +26952,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     });
   }
   function areOptionsAvailableAndInit() {
-    ;
     if (this[areOptionsAvailableAndInitSymbol] === void 0) {
       this[areOptionsAvailableAndInitSymbol] = 0;
     }
@@ -24927,10 +26964,11 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     if (options2 === void 0 || options2 === null || isArray(options2) && options2.length === 0) {
       setStatusOrRemoveBadges.call(this, "empty");
       hide4.call(this);
-      this.setOption(
-        "messages.control",
-        this.getOption("labels.no-options-available")
-      );
+      let msg = this.getOption("labels.no-options-available");
+      if (this.getOption("url") !== null && this.getOption("features.lazyLoad") === true && this[lazyLoadDoneSymbol] !== true) {
+        msg = this.getOption("labels.click-to-load-options");
+      }
+      this.setOption("messages.control", msg);
       this.setOption("messages.summary", "");
       this.setOption("selection", []);
       addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, noOptionsAvailableMessage);
@@ -24976,7 +27014,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     return true;
   }
   function checkOptionState() {
-    ;
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -25001,7 +27038,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }
   }
   function convertValueToSelection(value) {
-    ;
     const selection = [];
     if (isString(value)) {
       value = value.split(",").map((a2) => {
@@ -25032,7 +27068,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     };
   }
   function convertSelectionToValue(selection) {
-    ;
     const value = [];
     if (isArray(selection)) {
       for (const obj of selection) {
@@ -25049,7 +27084,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     return value.join(",");
   }
   function setSelection(selection) {
-    ;
     if (isString(selection)) {
       const result = convertValueToSelection.call(this, selection);
       selection = result?.selection;
@@ -25092,7 +27126,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }).run();
   }
   function fetchData(url) {
-    ;
     if (!url)
       url = this.getOption("url");
     if (!url)
@@ -25115,16 +27148,16 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       } catch (e) {
         throw new TypeError("the result cannot be parsed");
       }
+    }).catch((e) => {
+      throw e;
     });
   }
   function hide4() {
-    ;
     this[popperElementSymbol2].style.display = "none";
     setStatusOrRemoveBadges.call(this, "status");
     removeAttributeToken(this[controlElementSymbol2], "class", "open");
   }
   function show3() {
-    ;
     if (this.getOption("disabled", void 0) === true) {
       return;
     }
@@ -25132,17 +27165,32 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       return;
     }
     focusFilter2.call(this);
-    const optionsAvailable = areOptionsAvailableAndInit.call(this);
-    const remoteFilterFlag = this.getOption("filter.mode") === FILTER_MODE_REMOTE;
-    if (optionsAvailable === false && remoteFilterFlag !== true) {
-      const loadOnOpenFlag = this.getOption("features.loadOnOpen");
-      if (loadOnOpenFlag === true) {
-        this.setOption("features.loadOnOpen", false);
-        this.setOption("classes.statusOrRemoveBadge", "loading");
+    const lazyLoadFlag = this.getOption("features.lazyLoad") && this[lazyLoadDoneSymbol] !== true;
+    if (lazyLoadFlag === true) {
+      this[lazyLoadDoneSymbol] = true;
+      setStatusOrRemoveBadges.call(this, "loading");
+      new Processing(200, () => {
         this.fetch().then(() => {
-          show3.call(this);
+          setTimeout(() => {
+            let result;
+            if (this.hasAttribute("value")) {
+              result = setSelection.call(this, this.getAttribute("value"));
+            } else {
+              result = setSelection.call(this, []);
+            }
+            result.then(() => {
+              show3.call(this);
+            }).catch((e) => {
+              addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, `${e}`);
+            });
+          }, 100);
+        }).catch((e) => {
+          addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.message);
+          setStatusOrRemoveBadges.call(this, "error");
         });
-      }
+      }).run().catch((e) => {
+        addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.message);
+      });
       return;
     }
     this[popperElementSymbol2].style.visibility = "hidden";
@@ -25165,7 +27213,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       show3.call(this);
     }
   }
-  function initEventhandler3() {
+  function initEventHandler3() {
     const self2 = this;
     self2[clearOptionEventHandler] = (event) => {
       const element = findTargetElementFromEvent(
@@ -25300,35 +27348,44 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     return self2;
   }
   function setStatusOrRemoveBadges(suggestion) {
-    ;
     setTimeout(() => {
       const selection = this.getOption("selection");
       const clearAllFlag = isArray(selection) && selection.length > 0 && this.getOption("features.clearAll") === true;
+      const current = this.getOption("classes.statusOrRemoveBadge");
       if (clearAllFlag) {
-        this.setOption("classes.statusOrRemoveBadge", "clear");
+        if (current !== "clear") {
+          this.setOption("classes.statusOrRemoveBadge", "clear");
+        }
         return;
       }
       if (suggestion === "loading") {
-        this.setOption("classes.statusOrRemoveBadge", "loading");
+        if (current !== "loading") {
+          this.setOption("classes.statusOrRemoveBadge", "loading");
+        }
         return;
       }
       if (this[controlElementSymbol2].classList.contains("open")) {
-        this.setOption("classes.statusOrRemoveBadge", "open");
+        if (current !== "open") {
+          this.setOption("classes.statusOrRemoveBadge", "open");
+        }
         return;
       }
       const options2 = this.getOption("options");
       if (options2 === void 0 || options2 === null || isArray(options2) && options2.length === 0) {
-        this.setOption("classes.statusOrRemoveBadge", "empty");
+        if (current !== "empty") {
+          this.setOption("classes.statusOrRemoveBadge", "empty");
+        }
         return;
       }
       if (suggestion) {
-        this.setOption("classes.statusOrRemoveBadge", suggestion);
+        if (current !== suggestion) {
+          this.setOption("classes.statusOrRemoveBadge", suggestion);
+        }
         return;
       }
     }, 2);
   }
   function initControlReferences3() {
-    ;
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -25362,7 +27419,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     );
   }
   function updatePopper() {
-    ;
     if (this[popperElementSymbol2].style.display !== STYLE_DISPLAY_MODE_BLOCK) {
       return;
     }
@@ -25377,7 +27433,9 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         this[popperElementSymbol2],
         this.getOption("popper", {})
       );
-    }).run();
+    }).run().catch((e) => {
+      addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.message);
+    });
     return this;
   }
   function getTemplate5() {
@@ -25397,7 +27455,8 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
             part path:type | prefix:option- | suffix: form,
             class path:options.class 
             " tabindex="-1">
-                    <div data-monster-replace="path:options | index:label" part="option-label"></div>
+                    <div data-monster-replace="path:options | index:label | call:my-callback-doing"
+                         part="option-label"></div>
                 </label>
             </div>
         </template>
@@ -25444,7 +27503,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         </div>
     `;
   }
-  var noOptionsAvailableMessage, timerCallbackSymbol2, closeEventHandler2, clearOptionEventHandler, resizeObserverSymbol2, keyEventHandler, inputEventHandler, changeEventHandler, controlElementSymbol2, selectionElementSymbol, containerElementSymbol, popperElementSymbol2, inlineFilterElementSymbol, popperFilterElementSymbol, popperFilterContainerElementSymbol, optionsElementSymbol, noOptionsAvailableElementSymbol, statusOrRemoveBadgesElementSymbol, areOptionsAvailableAndInitSymbol, FOCUS_DIRECTION_UP, FOCUS_DIRECTION_DOWN, FILTER_MODE_REMOTE, FILTER_MODE_OPTIONS, FILTER_MODE_DISABLED, FILTER_POSITION_POPPER, FILTER_POSITION_INLINE, Select;
+  var noOptionsAvailableMessage, clickToLoadOptionsMessage, timerCallbackSymbol2, keyFilterEventSymbol, lazyLoadDoneSymbol, closeEventHandler2, clearOptionEventHandler, resizeObserverSymbol2, keyEventHandler, inputEventHandler, changeEventHandler, controlElementSymbol2, selectionElementSymbol, containerElementSymbol, popperElementSymbol2, inlineFilterElementSymbol, popperFilterElementSymbol, popperFilterContainerElementSymbol, optionsElementSymbol, noOptionsAvailableElementSymbol, statusOrRemoveBadgesElementSymbol, areOptionsAvailableAndInitSymbol, FOCUS_DIRECTION_UP, FOCUS_DIRECTION_DOWN, FILTER_MODE_REMOTE, FILTER_MODE_OPTIONS, FILTER_MODE_DISABLED, FILTER_POSITION_POPPER, FILTER_POSITION_INLINE, Select;
   var init_select2 = __esm({
     "source/components/form/select.mjs"() {
       init_constants();
@@ -25470,7 +27529,10 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_select();
       init_translations();
       noOptionsAvailableMessage = "No options available.";
+      clickToLoadOptionsMessage = "Click to load options.";
       timerCallbackSymbol2 = Symbol("timerCallback");
+      keyFilterEventSymbol = Symbol("keyFilterEvent");
+      lazyLoadDoneSymbol = Symbol("lazyLoadDone");
       closeEventHandler2 = Symbol("closeEventHandler");
       clearOptionEventHandler = Symbol("clearOptionEventHandler");
       resizeObserverSymbol2 = Symbol("resizeObserver");
@@ -25548,7 +27610,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @throws {Error} unsupported type
          */
         set value(value) {
-          ;
           const result = convertValueToSelection.call(this, value);
           setSelection.call(this, result.selection).then(() => {
           }).catch((e) => {
@@ -25586,7 +27647,8 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @property {Object} features List with features
          * @property {Boolean} features.clearAll=true Display of a delete button to delete the entire selection
          * @property {Boolean} features.clear=true Display of a delete key for deleting the specific selection
-         * @property {Boolean} features.loadOnOpen=false Load options when opening the dropdown
+         * @property {Boolean} features.lazyLoad=false Load options when first opening the dropdown
+         * @property {Boolean} features.closeOnSelect=false Close the dropdown when an option is selected (since 3.54.0)
          * @property {Boolean} filter.defaultValue=* Default filter value, if the filter is empty
          * @property {Boolean} filter.mode=options Filter mode, values: options, remote, disabled
          * @property {Object} templates Template definitions
@@ -25619,12 +27681,14 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
               features: {
                 clearAll: true,
                 clear: true,
-                loadOnOpen: false
+                lazyLoad: false,
+                closeOnSelect: false
               },
               url: null,
               labels: {
                 "cannot-be-loaded": "Cannot be loaded",
-                "no-options-available": "No options available",
+                "no-options-available": noOptionsAvailableMessage,
+                "click-to-load-options": clickToLoadOptionsMessage,
                 "select-an-option": "Select an option",
                 "summary-text": {
                   zero: "No entries were selected",
@@ -25650,8 +27714,8 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
               },
               filter: {
                 defaultValue: "*",
-                mode: "disabled",
-                position: "inline"
+                mode: FILTER_MODE_DISABLED,
+                position: FILTER_POSITION_INLINE
               },
               classes: {
                 badge: "monster-badge-primary",
@@ -25682,29 +27746,36 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
           );
         }
         /**
-         *
          * @return {Monster.Components.Form.Select}
          */
         [assembleMethodSymbol]() {
           const self2 = this;
           super[assembleMethodSymbol]();
           initControlReferences3.call(self2);
-          initEventhandler3.call(self2);
-          if (self2.getOption("url") !== null && self2.getOption("features.loadOnOpen") !== true) {
-            self2.fetch().then(() => {
-              let result;
-              if (self2.hasAttribute("value")) {
-                result = setSelection.call(self2, self2.getAttribute("value"));
-              } else {
-                result = setSelection.call(self2, []);
-              }
-              result.then(() => {
+          initEventHandler3.call(self2);
+          const lazyLoadFlag = self2.getOption("features.lazyLoad");
+          if (self2.getOption("url") !== null && !lazyLoadFlag) {
+            setStatusOrRemoveBadges.call(this, "loading");
+            new Processing(200, () => {
+              this.fetch().then(() => {
+                setTimeout(() => {
+                  let result;
+                  if (self2.hasAttribute("value")) {
+                    result = setSelection.call(self2, self2.getAttribute("value"));
+                  } else {
+                    result = setSelection.call(self2, []);
+                  }
+                  result.then(() => {
+                  }).catch((e) => {
+                    addAttributeToken(self2, ATTRIBUTE_ERRORMESSAGE, `${e}`);
+                  });
+                }, 100);
               }).catch((e) => {
-                addAttributeToken(self2, ATTRIBUTE_ERRORMESSAGE, `${e}`);
+                addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.message);
+                setStatusOrRemoveBadges.call(this, "error");
               });
-            }).catch((e) => {
-              addAttributeToken(self2, ATTRIBUTE_ERRORMESSAGE, `${e}`);
-              throw e;
+            }).run().catch((e) => {
+              addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.message);
             });
           }
           let lastValue = self2.value;
@@ -25732,7 +27803,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click}
          */
         click() {
-          ;
           if (this.getOption("disabled") === true) {
             return;
           }
@@ -25745,7 +27815,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus}
          */
         focus(options2) {
-          ;
           if (this.getOption("disabled") === true) {
             return;
           }
@@ -25761,7 +27830,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @link https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/blur
          */
         blur() {
-          ;
           new Processing(() => {
             gatherState.call(this);
             blurFilter.call(this);
@@ -25776,17 +27844,23 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @return {Promise}
          */
         fetch(url) {
-          ;
           if (url instanceof URL) {
             url = url.toString();
           }
           if (url !== void 0 && url !== null) {
             url = validateString(url);
           }
-          return fetchData.call(this, url).then((map) => {
-            if (isObject(map) || isArray(map) | map instanceof Set || map instanceof Map) {
-              this.importOptions(map);
-            }
+          return new Promise((resolve, reject) => {
+            const response = fetchData.call(this, url).then((map) => {
+              if (isObject(map) || isArray(map) || map instanceof Set || map instanceof Map) {
+                this.importOptions(map);
+                setTimeout(() => {
+                  resolve();
+                }, 10);
+                return;
+              }
+              reject(new Error("invalid response"));
+            });
           });
         }
         /**
@@ -25795,7 +27869,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         connectedCallback() {
           super.connectedCallback();
           const document2 = getDocument();
-          ;
           for (const [, type] of Object.entries(["click", "touch"])) {
             document2.addEventListener(type, this[closeEventHandler2]);
           }
@@ -25813,7 +27886,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         disconnectedCallback() {
           super.disconnectedCallback();
           const document2 = getDocument();
-          ;
           for (const [, type] of Object.entries(["click", "touch"])) {
             document2.removeEventListener(type, this[closeEventHandler2]);
           }
@@ -25830,7 +27902,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @throws {Error} missing label configuration
          */
         importOptions(data) {
-          ;
           const mappingOptions = this.getOption("mapping", {});
           const selector = mappingOptions?.["selector"];
           const labelTemplate = mappingOptions?.["labelTemplate"];
@@ -25903,26 +27974,18 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_constants2();
       PopperStyleSheet = new CSSStyleSheet();
       try {
-        PopperStyleSheet.insertRule(
-          `
+        PopperStyleSheet.insertRule(`
 @layer popper { 
 [data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}div[data-monster-role=popper]{align-content:center;background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;justify-content:space-between;left:0;padding:1.1em;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:var(--monster-z-index-modal)}div[data-monster-role=popper] div[data-monster-role=arrow]{background:var(--monster-bg-color-primary-1);height:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);pointer-events:none;position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);z-index:-1}[data-monster-role=control]{display:flex;position:relative} 
-}`,
-          0
-        );
+}`, 0);
       } catch (e) {
-        addAttributeToken(
-          document.getRootNode().querySelector("html"),
-          ATTRIBUTE_ERRORMESSAGE,
-          e + ""
-        );
+        addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + "");
       }
     }
   });
 
   // source/components/form/popper.mjs
-  function initEventhandler4() {
-    ;
+  function initEventHandler4() {
     this[closeEventHandler3] = (event) => {
       const path = event.composedPath();
       for (const [, element] of Object.entries(path)) {
@@ -25946,7 +28009,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     return this;
   }
   function initEventHandlerByMode(mode) {
-    ;
     switch (mode) {
       case "manual":
         break;
@@ -25994,10 +28056,11 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
           this.hideDialog();
         });
         break;
+      default:
+        throw new Error(`Unknown mode ${mode}`);
     }
   }
   function attachResizeObserver3() {
-    ;
     this[resizeObserverSymbol3] = new ResizeObserver((entries) => {
       if (this[timerCallbackSymbol3] instanceof DeadMansSwitch) {
         try {
@@ -26014,7 +28077,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     this[resizeObserverSymbol3].observe(this.parentElement);
   }
   function disconnectResizeObserver2() {
-    ;
     if (this[resizeObserverSymbol3] instanceof ResizeObserver) {
       this[resizeObserverSymbol3].disconnect();
     }
@@ -26054,7 +28116,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }, 0);
   }
   function updatePopper2() {
-    ;
     if (this[popperElementSymbol3].style.display !== STYLE_DISPLAY_MODE_BLOCK) {
       return;
     }
@@ -26167,9 +28228,8 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          */
         [assembleMethodSymbol]() {
           super[assembleMethodSymbol]();
-          ;
           initControlReferences4.call(this);
-          initEventhandler4.call(this);
+          initEventHandler4.call(this);
           return this;
         }
         /**
@@ -26190,7 +28250,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         connectedCallback() {
           super.connectedCallback();
           const document2 = getDocument();
-          ;
           for (const [, type] of Object.entries(["click", "touch"])) {
             document2.addEventListener(type, this[closeEventHandler3]);
           }
@@ -26248,26 +28307,18 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_constants2();
       PopperButtonStyleSheet = new CSSStyleSheet();
       try {
-        PopperButtonStyleSheet.insertRule(
-          `
+        PopperButtonStyleSheet.insertRule(`
 @layer popperbutton { 
-[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}div[data-monster-role=popper]{align-content:center;background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;justify-content:space-between;left:0;padding:1.1em;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:var(--monster-z-index-modal)}div[data-monster-role=popper] div[data-monster-role=arrow]{background:var(--monster-bg-color-primary-1);height:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);pointer-events:none;position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);z-index:-1}.monster-button-primary,button{align-items:center;background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:inline-block;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:inline-block;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:inline-block;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:inline-block;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{display:flex;position:relative}[data-monster-role=button]{width:-webkit-fill-available;width:-moz-available;width:fill-available}div[data-monster-role=control]{height:100%} 
-}`,
-          0
-        );
+[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}div[data-monster-role=popper]{align-content:center;background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;justify-content:space-between;left:0;padding:1.1em;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:var(--monster-z-index-modal)}div[data-monster-role=popper] div[data-monster-role=arrow]{background:var(--monster-bg-color-primary-1);height:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);pointer-events:none;position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);z-index:-1}.monster-button-primary,button{align-items:center;background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{display:flex;position:relative}[data-monster-role=button]{width:-webkit-fill-available;width:-moz-available;width:fill-available}div[data-monster-role=control]{height:100%} 
+}`, 0);
       } catch (e) {
-        addAttributeToken(
-          document.getRootNode().querySelector("html"),
-          ATTRIBUTE_ERRORMESSAGE,
-          e + ""
-        );
+        addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + "");
       }
     }
   });
 
   // source/components/form/popper-button.mjs
-  function initEventhandler5() {
-    ;
+  function initEventHandler5() {
     this[closeEventHandler4] = (event) => {
       const path = event.composedPath();
       for (const [, element] of Object.entries(path)) {
@@ -26280,7 +28331,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     return this;
   }
   function attachResizeObserver4() {
-    ;
     this[resizeObserverSymbol4] = new ResizeObserver(() => {
       if (this[timerCallbackSymbol4] instanceof DeadMansSwitch) {
         try {
@@ -26297,13 +28347,11 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     this[resizeObserverSymbol4].observe(this.parentElement);
   }
   function disconnectResizeObserver3() {
-    ;
     if (this[resizeObserverSymbol4] instanceof ResizeObserver) {
       this[resizeObserverSymbol4].disconnect();
     }
   }
   function updatePopper3() {
-    ;
     if (this[popperElementSymbol4].style.display !== STYLE_DISPLAY_MODE_BLOCK) {
       return;
     }
@@ -26376,7 +28424,9 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @since 2.1.0
          */
         static get [instanceSymbol]() {
-          return Symbol.for("@schukai/monster/components/form/popper-button@@instance");
+          return Symbol.for(
+            "@schukai/monster/components/form/popper-button@@instance"
+          );
         }
         /**
          * To set the options via the html tag the attribute `data-monster-options` must be used.
@@ -26393,7 +28443,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @extends {Button.defaults}
          */
         get defaults() {
-          ;
           return Object.assign({}, super.defaults, {
             templates: {
               main: getTemplate7()
@@ -26419,9 +28468,8 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          */
         [assembleMethodSymbol]() {
           super[assembleMethodSymbol]();
-          ;
           initControlReferences5.call(this);
-          initEventhandler5.call(this);
+          initEventHandler5.call(this);
           return this;
         }
         /**
@@ -26444,7 +28492,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         connectedCallback() {
           super.connectedCallback();
           const document2 = getDocument();
-          ;
           for (const [, type] of Object.entries(["click", "touch"])) {
             document2.addEventListener(type, this[closeEventHandler4]);
           }
@@ -26553,19 +28600,12 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_constants2();
       ConfirmButtonStyleSheet = new CSSStyleSheet();
       try {
-        ConfirmButtonStyleSheet.insertRule(
-          `
+        ConfirmButtonStyleSheet.insertRule(`
 @layer confirmbutton { 
-.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-shadow:none;border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.4}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1;margin-bottom:1.25rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:calc(4px + 2ex);margin-bottom:1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{text-fill-color:transparent;-webkit-text-fill-color:transparent;background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1)}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-weight:700;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}div[data-monster-role=popper]{align-content:center;background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;justify-content:space-between;left:0;padding:1.1em;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:var(--monster-z-index-modal)}div[data-monster-role=popper] div[data-monster-role=arrow]{background:var(--monster-bg-color-primary-1);height:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);pointer-events:none;position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);z-index:-1}div[data-monster-role=decision]{align-items:center;display:flex;justify-content:space-evenly;margin:1rem 0 .4rem;width:100%}div[data-monster-role=control]{height:100%} 
-}`,
-          0
-        );
+.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-0{border-radius:0;border-style:none;border-width:0;border-shadow:none}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.4}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1;margin-bottom:1.25rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:calc(4px + 2ex);margin-bottom:1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-weight:700;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}div[data-monster-role=popper]{align-content:center;background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;justify-content:space-between;left:0;padding:1.1em;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:var(--monster-z-index-modal)}div[data-monster-role=popper] div[data-monster-role=arrow]{background:var(--monster-bg-color-primary-1);height:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);pointer-events:none;position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);z-index:-1}div[data-monster-role=decision]{align-items:center;display:flex;justify-content:space-evenly;margin:1rem 0 .4rem;width:100%}div[data-monster-role=control]{height:100%} 
+}`, 0);
       } catch (e) {
-        addAttributeToken(
-          document.getRootNode().querySelector("html"),
-          ATTRIBUTE_ERRORMESSAGE,
-          e + ""
-        );
+        addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + "");
       }
     }
   });
@@ -26578,26 +28618,18 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_constants2();
       MessageStateButtonStyleSheet = new CSSStyleSheet();
       try {
-        MessageStateButtonStyleSheet.insertRule(
-          `
+        MessageStateButtonStyleSheet.insertRule(`
 @layer messagestatebutton { 
 [data-monster-role=control] [data-monster-role=button]{width:100%} 
-}`,
-          0
-        );
+}`, 0);
       } catch (e) {
-        addAttributeToken(
-          document.getRootNode().querySelector("html"),
-          ATTRIBUTE_ERRORMESSAGE,
-          e + ""
-        );
+        addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + "");
       }
     }
   });
 
   // source/components/form/message-state-button.mjs
   function initEventHandlerByMode2(mode) {
-    ;
     switch (mode) {
       case "manual":
         this[buttonElementSymbol4].setOption("actions.click", (e) => {
@@ -26618,7 +28650,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }
   }
   function initControlReferences6() {
-    ;
     this[buttonElementSymbol4] = this.shadowRoot.querySelector(
       `[${ATTRIBUTE_ROLE}=button]`
     );
@@ -26666,11 +28697,13 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @since 2.1.0
          */
         static get [instanceSymbol]() {
-          return Symbol.for("@schukai/monster/components/form/message-state-button@@instance");
+          return Symbol.for(
+            "@schukai/monster/components/form/message-state-button@@instance"
+          );
         }
         /**
          *
-         * @param {state} state
+         * @param {string} state
          * @param {number} timeout
          * @return {Monster.Components.Form.MessageStateButton}
          * @throws {TypeError} value is not a string
@@ -26732,7 +28765,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          */
         [assembleMethodSymbol]() {
           super[assembleMethodSymbol]();
-          ;
           initControlReferences6.call(this);
           let modes = null;
           const modeOption = this.getOption("mode");
@@ -26799,7 +28831,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @returns {Monster.Components.Form.MessageStateButton}
          */
         showMessage(timeout) {
-          ;
           super.showDialog();
           if (timeout !== void 0) {
             setTimeout(() => {
@@ -26898,7 +28929,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
   function getAction(type) {
     const self2 = this;
     return function(event) {
-      ;
       const callback = self2.getOption(`actions.${type}`);
       if (typeOf(callback) !== "function") {
         return;
@@ -26906,8 +28936,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       callback.call(this, event);
     };
   }
-  function initEventhandler6() {
-    ;
+  function initEventhandler() {
     this[cancelButtonElementSymbol].setOption(
       "clickEventType",
       this.getOption("clickEventType", ["click"])
@@ -26929,7 +28958,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     return this;
   }
   function initControlReferences7() {
-    ;
     this[confirmButtonElementSymbol] = this.shadowRoot.querySelector(
       `[${ATTRIBUTE_ROLE}=confirm]`
     );
@@ -26997,7 +29025,9 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @since 2.1.0
          */
         static get [instanceSymbol]() {
-          return Symbol.for("@schukai/monster/components/form/confirm-button@@instance");
+          return Symbol.for(
+            "@schukai/monster/components/form/confirm-button@@instance"
+          );
         }
         /**
          * To set the options via the html tag the attribute `data-monster-options` must be used.
@@ -27019,7 +29049,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @extends {PopperButton}
          */
         get defaults() {
-          ;
           const obj = Object.assign({}, super.defaults, {
             templates: {
               main: getTemplate9()
@@ -27042,7 +29071,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
           return obj;
         }
         hideDialog() {
-          ;
           super.hideDialog();
           this[confirmButtonElementSymbol].removeState();
           return this;
@@ -27053,9 +29081,8 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          */
         [assembleMethodSymbol]() {
           super[assembleMethodSymbol]();
-          ;
           initControlReferences7.call(this);
-          initEventhandler6.call(this);
+          initEventhandler.call(this);
         }
         /**
          * @return {string}
@@ -27076,7 +29103,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @returns {Monster.Components.Form.PopperButton}
          */
         showDialog() {
-          ;
           const confirmButtonClass = this.getOption("classes.confirmButton");
           if (confirmButtonClass) {
             this[confirmButtonElementSymbol].setOption(
@@ -27101,7 +29127,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @returns {Monster.Components.Form.ConfirmButton}
          */
         setConfirmButtonState(state, timeout) {
-          ;
           this[confirmButtonElementSymbol].setState(state, timeout);
           return this;
         }
@@ -27113,7 +29138,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @returns {Monster.Components.Form.ConfirmButton}
          */
         showConfirmButtonMessage(message, timeout) {
-          ;
           this[confirmButtonElementSymbol].setMessage(message);
           setTimeout(() => {
             this[confirmButtonElementSymbol].showMessage(timeout);
@@ -27305,7 +29329,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
   });
 
   // source/data/datasource/storage.mjs
-  var storageObjectSymbol, Storage2;
+  var storageObjectSymbol, Storage;
   var init_storage2 = __esm({
     "source/data/datasource/storage.mjs"() {
       init_constants();
@@ -27314,7 +29338,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       storageObjectSymbol = Symbol.for(
         "@schukai/monster/data/datasource/storage/@@storageObject"
       );
-      Storage2 = class _Storage extends Datasource {
+      Storage = class _Storage extends Datasource {
         /**
          *
          * @param {string} key LocalStorage Key
@@ -27393,7 +29417,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
   // source/data/datasource/server.mjs
   function doTransform(type, obj) {
     const transformation = this.getOption(`${type}.mapping.transformer`);
-    if (transformation !== void 0) {
+    if (transformation !== void 0 && transformation !== null) {
       const pipe = new Pipe(transformation);
       const callbacks = this.getOption(`${type}.mapping.callbacks`);
       if (isObject(callbacks)) {
@@ -27471,6 +29495,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          *
          * @param {string} message
          * @param {Response} response
+         * @param {Object} validation
          */
         constructor(message, response, validation) {
           super(message);
@@ -27486,7 +29511,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          */
         static get [instanceSymbol]() {
           return Symbol.for(
-            "@schukai/monster/data/datasource/server/restapi/writeerror"
+            "@schukai/monster/data/datasource/server/restapi/write-error"
           );
         }
         /**
@@ -27638,7 +29663,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
               },
               responseCallback: void 0,
               acceptedStatus: [200, 201],
-              url: void 0,
+              url: null,
               mapping: {
                 transformer: void 0,
                 callbacks: []
@@ -27657,7 +29682,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
               },
               responseCallback: void 0,
               acceptedStatus: [200],
-              url: void 0,
+              url: null,
               mapping: {
                 transformer: void 0,
                 callbacks: []
@@ -28249,7 +30274,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_global();
       init_datasource();
       init_storage2();
-      LocalStorage = class _LocalStorage extends Storage2 {
+      LocalStorage = class _LocalStorage extends Storage {
         /**
          * @throws {Error} this method must be implemented by derived classes.
          * @return {external:localStorage}
@@ -28287,7 +30312,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_global();
       init_datasource();
       init_storage2();
-      SessionStorage = class _SessionStorage extends Storage2 {
+      SessionStorage = class _SessionStorage extends Storage {
         /**
          * @throws {Error} this method must be implemented by derived classes.
          * @return {external:sessionStorage}
@@ -28328,19 +30353,12 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_constants2();
       FormStyleSheet = new CSSStyleSheet();
       try {
-        FormStyleSheet.insertRule(
-          `
+        FormStyleSheet.insertRule(`
 @layer form { 
-.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-shadow:none;border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}.monster-form{accent-color:var(--monster-color-secondary-2);align-content:flex-start;align-items:flex-start;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;position:relative}.monster-form label{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:grid}.monster-form label:has(input[type=radio]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=radio]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=radio])~label:has(input[type=radio]){margin-top:.2rem}.monster-form label:has(input[type=checkbox]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=checkbox]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=checkbox])~label:has(input[type=checkbox]){margin-top:.2rem}.monster-form label~fieldset,.monster-form label~label{margin-top:1rem}.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-1);box-sizing:border-box;color:var(--monster-color-primary-1);font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem}.monster-form button{border-shadow:var(--monster-box-shadow-1);background-color:var(--monster-bg-color-tertiary-1);border-color:var(--monster-bg-color-primary-3);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-1)}.monster-form option:checked,.monster-form option:focus,.monster-form option:hover{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-form input,.monster-form select,.monster-form textarea{border-bottom-radius:var(--monster-border-radius);border-bottom-shadow:var(--monster-box-shadow-1);border-shadow:var(--monster-box-shadow-1);border:0;border-bottom:thin var(--monster-border-style) var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-2);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:thin}.monster-form button,.monster-form input:not([type=radio]):not([type=checkbox]),.monster-form label,.monster-form select,.monster-form textarea{width:100%}.monster-form label input:not([type=radio]):not([type=checkbox]),.monster-form label select,.monster-form label textarea,.monster-form label+input:not([type=radio]):not([type=checkbox]),.monster-form label+select,.monster-form label+textarea{margin-top:.2rem;width:100%}.monster-form fieldset{background-color:var(--monster-bg-color-primary-1);border:2px solid var(--monster-bg-color-primary-3);box-sizing:border-box;color:var(--monster-color-primary-1);margin:0;outline:none;padding:2.5rem 2rem 2rem;position:relative;width:100%}.monster-form fieldset legend{font-size:.8rem;max-width:95%;overflow:hidden;padding:.1rem 2rem .2rem .5rem;position:absolute;right:0;text-align:right;text-overflow:ellipsis;text-transform:uppercase;top:0;white-space:nowrap}.monster-form fieldset~fieldset{margin-top:1rem}.monster-form button{margin:.2rem 0}.monster-form button:first-of-type{margin-top:1rem}.monster-form button:last-of-type{margin-bottom:1rem}.monster-form input:focus-visible{outline:none}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px}@media (prefers-color-scheme:light){.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{background-color:var(--monster-bg-color-primary-2);border-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-2)}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px}}.monster-form button:hover,.monster-form input:hover:not([type=radio]):not([type=checkbox]):not([type=range]),.monster-form select:hover,.monster-form textarea:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAADI0ABAAAAAAdXAAADHTAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGlwbnFYchzAGYD9TVEFUHACFABEICoGqIIGGVguEKAABNgIkA4hMBCAFhUIHIAwHG2pgRQdi2DgAaPAZFkWwcQAFm+8TRdkmnUj2/ylBmzGhdehbZSF0R7uo7hkZCZGT6hnpobZTWxy6cODh0Eg/9o0FR+HA8s3J1b3tw59XozgcCNwjZmttwCVxX4hLopEkTaRXt0ZIY2It4jf92XsCvMRLUwj2Qo0IkhcxKkYq5iQtcfnimrpZ0jqHtGngJbl/tDqziiqdqwAzoQ0TLx86MzpX5tI5T/zv96975r4AoosRBDJfBbmkWgsItoqNbG2XJ9CkeobHbf3zBBmoGA1I5agxGO1GTaoNEFTM67Iuon9FXvzf+iuiwQEK/W/ahmibz+VdEbVVR4YN+Pd/jczCTO7LnwWgIqFl5QAl21YB2p5KJFlL6Jf7ZeBzfu4cFJ3q+AOC8QV66zobWwYhWwD/V5smvEXozEmETWvtKG2TPG3hWcpQm9nQOvR8JFIVgZBd2mbFc+I1fYXvwNQkZivqyP0e9386y1ba9d3zBqGLqwAX3XpzbTH6+tbXzGgkA2uJfQyelfWeJSvgC0JFUF1axNdTU2HTpSj7lJl/nemq7+9vSMk/6JadGssqrgGeetnaNVPL4z+d7qx/sgxnF2T5egHSUWyX7ADDVMKxoxz0BchuXxi2AsCatTPyvgOONTObrOSccGuCQlzhEbKB/vrtz1irH8hsZna79nInhy0yRELCJyLgWf86/3AgTDAAALpjNEg3JNNQZLhsZLoypFw1pk4dcthh5KijyAknEMIBQp+uJ/ilkhipuCPHeg+G9lpFoQ/a+xOKc6HFAxB2zrp3ozAXaiBuxVM8VmCkWmV7tt83Uql6i6xwyaswCpV9+czU5OfjrMrH/B1bdsSZK7mSW/a/tCmvKoJEihYjViKPPrymKVDkP/9rMMMscy2w0FLLrLPRDntdcx0zKzM/E6iApCj6L/k/aKA3A28OyVxaC4OlT5aduPMPWfZB0vBkRtncYAGdhSuWblo251rT9eCOCKLgfbYGkqBJ6VQya4KTGIHUg5fhqRSYEjMHRxIHI+lJ3FTztN0pWh7DDDFPptopuN44J/AIkg1SeOpci9hP0RTQEiWOwzxN00ZHU+UpS1GF8BYPED3ABLF1nqLFfAtSIds4tZQrEJCz9TKtZ2TMUVhaxHOLW3iYSt0poEcYgoSx47VDqcyhkgkFPYHdvMSx9V9+t76NLZqDB2m9YYhmtmv4z0l71aDX/hczOwQuxq6k1lUC7nmntG/P3SzzKGQ/fwRUD/cOMQiDIpTgjxvvb/PbwE9slA6ijLITxbkGlp2mXhfU1O5A/yHeabRWIzIdWjWZ2W098S3NJmxIUxD0JS2IQqh7/DLOVFUY9I/071dqJFy4gN9SNyPsAqklJGXPafeM+xbF5qIYc/IABxmlm4BcB+oPORz19CM2ouh2oGtENN2AJFrCVzO4NoD3exWSEKG4sjMDtOVJSgYLV3oSaLYee6OrE59JWtI7Xq6FMNB6pBaDzmSG7x9P/ncoAQC0YO65AV/8VqR5pC7O0KJRSTiXMHeajzvq8fD6TEatdSeEdCyJyOP7HS0HNscjn4EUH7IVv5B9NcHt6Q+Qxr5NgJlEYpBbl7iWFTg2SvstNLpk1wd0EOB/HKOP51oAkKHbk0cxgaUSmEdzvvREXfXnUEqxqGgdx/1pUBn6ySUbiL8bkIlCpOC2HF/Y0x5qpxTL6LmlUPbFOJMjYQDeYJIcYAhtKVqfrFKIngmjOI5ex+WbSUArCGNwhIDiaKPQV12ezadA04CHG85LYmh2giMEohguFCE7Wt2RnpZOP0LAmzjJNJMl1FqQ2wfbUBJb8+gdfiSGSW1gC1tZ0z7QVQddoTSysjSebzolfyohStggBeeLCHODfMyo2BOS8a12hidr3YUhRDVXTAIxE6xwms0DEg1MRFHAGtGZJLE6CtBZl5J2A7ulTP20MjQXu+FGcRhjCoVXtowZitheAigblnOZIRgDCgYKejjBQoQ6hRh2LIarGWB7z+YitKAuqEMAl9QDIgHc9RsYiUzANgMsZGLLoUaxakkVrfDozK210ZbK04Zpi6CEBVosMOAAUVgQiwV2HMjBDuKUgJOIgyXhEMnsUClSaaSxw6TriOmMRV24WSG/Ar1ob8LN9MFafbFoqNrccCNy4kijqIwBJlNwBC8mWVglG+tMZ+v55OMV4EiF2KCIbVSslFoZNpmFw82XWswoC56KD+qUroIzKmnu4GAZeJZ/EABM4QWQRpFqhoVYCQfPdpOhHGaWux4euFiHnu400po1N7CXVMnfKjR2YdFiscWqFquBdNvAa9dy8tETP+713LwcDPxvDd0aw+9neyfgd/Y38CEL5sJiWAnr+33/wZKcQnwKjrXiMABpDuCoaUikGIShCAEFyEEV5JelFcHBp9Lne/e/a7bMEw8KpP6ZZVmVR8S5obAmVZJWOM5y0j8BABQYQTUmQyaZGET1x9HDCUkMG2M2HEOhuX5HjTuBpSpAKwiXOmsqBqDAXzQUIwZ+fOBHvgZhYhPG3/jVyIvJODdBIC0jK5sKnN76qUxsI5RjtApivwcmeAQK9FYKGsEStCQQog76G4ZemqTJTARW1D8yBVIQBVMIhaZu/VH7hSOBRFKRmjQkSbkgQHoirYzhKFXX7LIJoLC5aani0xgWLgRgTglkrOa1WMJwnQ9XzlcfmADshQ4H9Eoeny5SorHrWg9ts0pI7v/3sEewAazruC+GCPCfxrkT9CYA9C9bA5BxSKK3dx0AYI/eyiqmtBuAo0tcNubr80wl4+m4MPj9mKaWP/FJ1tltPdUzO4G/hL9WjpTNslVuIyfI6XJXuVieEwqt4dbmfj8ACCJzSfdn4pMo43KskXWysQVpjD9Swm0F9APAvwOANx2uvcb2C9uAC9+EC894zzqfGaP7KObhrnM7z20BAYBEQH8ngN7K93Z1euVzNPqn7TPHIvMcddV1i62z3n9OmWWT+ZaaaYkLzjlvgWuIhiRQsGa0motgYGRiZhElWqw4dg5OiZIkS5Fmjf+t9QAHokJ6b/3gbjL11kdfObQ3gBh66mu9sv63TudToFCRYmVWuWe1S/ab67DjjjjhvpsRcUuNLS7b7HbUuOui3/0RDlfc0BAev6m11T/+9q+FBAxHhSdSCxAuRKgwkVrQ0Qsia82qpbZaOaONBC7xFKliTNNeBreO2umgk6566a6HnoYYYKBBPEabYKxxJhnvrIny5ciVp8RUpWwmR02EjTbYaZcdCA2/EABoDQBsP9ByQL8FMP8A8J8DNwcAADZ2FbyEhOMULCWqophIiFFGP6/JSbbnnJgUxV1DzLQAhCJIuEbBo3gyaSUJRSNdELHSHtIM3HHGsSNxfewEncfr6cCgMWl7jaaJ00exQtQR9iiG4CUw8gSiJnnwSb2rsAipRElnxCYMs6cSyI+e2Rx6Eqb+CrGEHmOoNAOFpJSyNlAThHTNPoB9HQOrx4j5XkzOg4QOCWmcPjRxTC3U8YPouUU7X7zMvrkiWo7dJsZnQQAE7nn1/t5fZ2REQmo0weiuvJkLlg+wROks5xS8M8WLlToExKRJuN5Zluc9VxmGp3XohSFZg602h0PpfQjgHHLdU9dYGZGUjF8xGPafpCiNBq9V6i06T04YYp4oK14oc3elrCiVEYDc/j/yQSnPOtaJnzHBaahcA0CfACq8S75ZtAk0pTnKNAuuMQWQbFivtnPUxnMLQOu2fEmNb1Zq55IMc5QZtmp8VylR+FBYoylXpX7VBDAmdmItHV2FRwxq3f4zJox4t3KZfpsjy8u/VWbUg7Z1R9MgpbjJ4tm4WADMQk45wDSkURgtyEmw2MKRTWDFZdN/FGaRfZHba7OLYO/uT4iHB4qMcqtH7KVv0bqwOZF/teY+DQ4oHUQYhQ4OVQobTWN1S7DB8PXc+zux6OQ3xO1FdmEqA/vyiK3tuaHSRaW40OY08ZVAPTWMXwK4ZEOxBhC8fTwasGhxKSt7yQlBoT50orx+kNqomG+qIM14TyXVhSID10uEI2CcuFOq54CcQvNzx/pcf8GodNY/S3xmaV+zJZsw79ile9F/U8rhPVC4mQlcMDrboDYS6CNb4AKwxp+REFVS1TI6UMZw4wYWQNPQW5tNTnFPdNgw0FM+dqgHg826J8siVi3unQ4Tlsi9gb7G45mWLnd/Dz+/Rna8RLEe59mqpr7ShoqtVwSIvfmGdV2v8ypqjU7v5j6nrP111pgsiLxNje1WHB8bMjpWJ81dtS2panwTgwnN233Wqw4bDJSZGlBJTSDlHeMYZXZtO9fulWM/e0DN3ZzNFbzf/ds2uXILKgxdkwN9WETZu7ls5rkwwRKwyVuV2FM2ealfGVah3LU0r51tWfM5WFHCJ/WMYYUjhWy+cEo8eyWBMXEzWCVLkybYjj1vrVJdnORXexsrgUDLqbah2oiD857ESGLavtkTLJRfmNWE8eaG290Wm5IsXi5Th7WwlO8c3LSn3eui7WR5H8xDY12LCbCyExV+6x4f3tQwUDGr3htlOfAG6318xkrzmsjbqwYtEVSW8vR9KLehZ7oJ3oka5jWLVn9pWqcrmD2VvGOaJ8en+KiOdUbkPXJQfW5xZb7W2ReDtOJTa0NbNzwtRJPAZ9RtqSax0qGlLk92gv1DX5OUQ++3Y6u0UK3PPyDRc8eIlmkScEZp0wS2w6wcK3+KqnJ34yeNabvF5/RyDR0j78Hw85HmzGVOS0WIg9JAelgO49wNktI7hA0W9kwJuj9CEl2GaBL5qkJXJmgssS6agNVv7ooGiAgxal+3qwTXfTilrCmlVlo8Y0LM2D/ANhfuiSJrNXVsBx0WtPbkVkvNaHlkwgA1cOQtIyyEUg0OHHlzd91QW3rl3W0/s3dwnfYK0gCOWzwPtICHVnNX7eBgRnRcGQSrjiuc1wnwqWUl16vRZ9VhXSeMIS0kfJC728kPk/r2DEdTPI90GKAJmtuRg0pjHaE5S/lmy7HQCY3gBqkbbkpDit7KMPp9LkQQSZ/P5IqDwRCePRz7d360OgaFTjseN5/DO8ma4lCxl51WcpO8TnyduFlmfhfzVmt6ech8Lem8n+gQKKKhgw2EX+p/Desi9GARVgK9kTlOLTkQIarXMbJZtaED06b5bdI4aJ+ETX+AiQ5JdtucQ1XaDzvDFq1sLaJc3txKQ3tQLeyUqyKWVQ3F/q0dFj8YD8k6yddVFa5+Vs+DSG6uC/nN9cenuENqljJ/4cot/n7f+piYeYUpo+FZOlFGxRvV1Wy4VEPGKLJpX7AB3uCtLF2bmWaIBiNF6hB923G/T2mudtIE1fz66TUw3AbrQralwEFhO3ZLLZJGzWzwzwLjDs+z8oZk84gOwoHUAHAgLw8Xh2aFMr66js5SoxktJYBeTrRjX5znBkdmI9M+/1hrcYjYtdZrgbrVTR6c06o3muaCkNZcjrfPsXlipajNLwaufL5EVSKEAHgzo7EMxYJW0/oiJxuNtko0WmU/O44NdUWzIusNkdZfjdfSVo2x8ODHH6LzTHuz2pwOT/OcBEjJ1RUjR8b875NIEBBum3Btt6zEodb1hMdoMhrGGqXU42B0m73kyLuRoa58RxnGiKxmIHwtgNSuvkAquvR0KNJwv34Ye4Y9+pvW35E0tsFF1guujTLU35fpU8DwlAfPnG7H03zW8X0dJnmvJzyY45x8lhD6g2JATER5mx/rEt3mNzq3OkaUwJvIfGu+fq5XfBOHjafvQD6Iowhhb9nQaxT6JDfSb8VkxrmVVnqu5rXI5Rq7RHyMJRiNJnOHt8kmvbggzYjgnTn4dyexcSzO3vQyDoJ9lWIjuIsRKR8fbAAXmzvslvMubbovTamc7K2bRUf2H0yRjLtJqeTuyAje8YQcJJA1dcdtzuVCe0/ErhYNIwu0YOzEteb+SlMKOUQsE9uuZuvuQXWbXpXlCbuvJARXPyAmzFGhI+uOGMBH7DPO0oDUw1M78AN3hJ6EB+qo0YRhI58bBXCIULImyghWVsaysISQB56hqB2HIpXzOzO9ElFsdxuBOX0iPhSxNP9eVhySSIp2EzXkabR7ffQxkeiTD4L0FYCGGiNzMDdIjXhhdzXPzeQ6sHUwDygdUswx+umKiq49o5Qry4EJPchvX32mJ1EZPvLrJ6pcaVumC3pQqXzj2evX4opU7vNu2a+OV+erxvIj2Ubl6A3nRskxkWw9fNAejVwMIE5RHESo5xr1xNKs7ccN8Nw31Mf/9tRAKNDLHD7cL65mmepaohknPeLYncb+ZGAVs3Qmes5yBGv4xbJR7RuWjKIWwQ6lfCtFtHAe0WCoo1DC+SB6JsdnpEmPgB2gSQ6JUi8VFoIBhV3khChf02Yxj9Jveg/TKqTwg3eHPO5sVkWDYvGCSaBuqI7naA9oNB872NgouIQbkErHb88J2dNjS6JpDrTfV7rh8Wrxkr8cB3Zh12KnMmKqHo1pOenhtF46azE9La87ucRv3JR2yyQ7mINlfdnGjnUJet/F1uje+qO6Sw6vYSp6DRsiGgJ5BcxXVo3R5LV+YV1uuzhviXD+ab1ZGNDx2Px4nramacbtqHKocyv30ezB28GrkjXe0+xAkBwaTMzLdYmFO9O/g2GIeHASVNrTz4UxrI8TxKjjVJqrt1XrdI7DM+3De+CQ1fW5/V3TXHdfxorEwMPTbxrsRaYpnlKHMxxZHs+JcfMb7XGpPBWmLfuCQ/fSzev2PRauCz6All/B4ECEvtFo9BrGEdZpnIOI+Lggn5BbqOwSbji/1hqBa34n9fJ9AD3U8ibuamGGd3W1LuRlNohznLkuiPeD1j3CDDp5TVNGA+FhdXoaYEyMT0qTx2Rnwps8ItB9fHJ3ya5FegClfP0rRll9d7CZ333j/hg3G2MtavM1fBUNBrN1TeFWF0oc7iwCoQvKmeSphBReHtyw0yiw90n6xpgCYykmoNKGhmh0IVZY8KBkO0W1pqYIi9MiTVG94J2jh+cvOS0RseQK5gUD8EAqP2Car9IjVhtV3swPVNzTB3vwYCkiWBU7r73N42BAn6N1G9fl9NX/D5A+J3k9R6NUW/NybqTrVszw5zfOD8No1otYvX2SgYNX10Dc5YoPuJLUj66dTtcOl/PEbYZPhri3+O+/E9+N9jbeaQrOQ5gJ17x0CJ2mDoYYoNBlTNWNHuzxa/DufjrwvrG0og+YYbFCb0TBD/3o7itzN7dzXGodz7fJ36xsDOkyOSA44N8rHPv/+TMaDFpJn434N85M/mcq+CKoighywdjklVzS98Hg6QGBGV+kSaa1K0lyR5TkDcDN/YJTpR/zfbzSkk5evF7RudFYKJqmIhEiREir07FEBNaz4EKz780BN3qK9rOb+4Yo18z758nckgS6O+PgLHZk+vXer7Ibu8Bqtrbs1f33mx52HeyZJx3oiG80XzdbA5S/+EJ7LxEfs2dPz4YgasehwRRaLKLTkYgQJXkPRbAh1jqXmSrdzvgmfE+2TZ/fm4jty+dj+/fG80iR26n/651j+bOdEeV3eZL74QUisIbRr3SJF5TonWxjfiIGed3xacuXYI/XC9XthYAYkDUY3t1EgTNORkgE8Q4UDSgUQcOHEAugPJ6F9vUZQJ4nLdQr/+9V+Gga4vsQxCDNX7595yNXpM/fWxAnp9w+C6jNIn25U5osqQGrGHXpBO4Njbcu6y5fcvJodrHwnpWaFXWDVGFqXf3ZWuNz7F9evtryjG5haToHP7XvxbWza2iFgNlXpuKcHyK6tHL5JkixS+1juunuwlqD37/W0F3QTcdILUW0GNg3Fc2kp6NKi5lATmemoAkIT5rZxXz3fdmp+QNmG6RFxx3G6yeXiopZkVzfldYrTfTZzxY9go2+gYXmYIhS3ckt6EEPezY23ZHhjG0wPuHt1zsz7YsdGePuZYleMMIsKa0mbTFrulMGy3smJeRCspf8PuzQ4HIRqdaIXLhE867YgYBdntXkc36bU/P4w/kpZT8U9F0M0B0hoFnoNa0ucWwxFi50s7T15wN0wqTZfB7rLV8ymhbqbcOF/jadavUfN2shZ0GQ1pb4N42kdGn0cVTD91/WMycn5eqIRT/1+dFkb0vT1gOJuVvrCIf22UuKpp936SFW0qlsqFumJPWOTCzwU74XsKA+WBxnqDNVkAfAqI3jWqshyn9HMa99SvZBmGw/KcB1ejQyoPFY5su/OEPD70TyWoQ/ifVR3l8qTSAuvTUX4F4SeY0aNFzQAiVQFg3ZD7G/30EKN/pcEsABSjBXY9di74rlXpJc4dV48jaIBrAy4wzLwIDVZu+3Wgfsu0NpOcYww3vXHZQcrRC3NtQsLPGmEMX1A8sH30YZugBYujxCLw7e+5NDTddQ8ebGB+Yg5aX0KpqwIupSLr3yD5JnFxTvfanp6OG0+1+dmF36IgGsw9BBcP53nfHP7Nn3QZXpsxM+KpxDNn1+AqWB4kdjbiaYvvPqP7WQ4K/DjDUZ713/DbF7BGKSKJ08X+L1TRRyx+VW72oOvA13AQurXu049t3N9FKYE4W3c6E96a01yYdvi77+DBRXw9mRC/7LPGJlkA+7R7221cGQfcWoy6UKcrfxAvAfByD6cNacteqHCae+pClmLGtGBgmCSP7jBHR1td0X94u361bD+Yl2gYs99tkoA1uc864PfBTicapqevhqXBfe2bPli+P1HjMZFau4BGuVMGl26IaKDlJ4z69XR9GxxXHs50WbLbi8A18RTeErh51WZZT1hTTFgpx8Wj7SPiqT6sk2OKH85r4C64UsDKzqnBGXfUUoaF896nUJnkSv+mHvRIiKMBhUQOnzzGvH0q9+asmY9apqZqwWc8aGDOMEMlgeQqBSh0UaQD22I7sefTarkFgLNnOpA0eH+qwd6g/odX+VyWw0B1a1m/yLPc5VQZ9z1ZJO8LXb4Yorbd1/WLme7UEB7Br12FcFg/ZVo26XIsA9JtiBKdazloxFP0QQwOJpQUoEjgw93VsQ3pt0rCKNoh6nJyXVGcOwwfMadcXQ+URvH/535+00eY4Eg5/ZL+wfUy1pGJUknZOjnbjEmHEYhuwY0p+xm4xZM1K02w1DWcc8bsinMtmiZWNyuCBZ/tnhHYjz/gZOqLusgwBzQVdtPFQXeYDvHlRxcwtsR2I1jR9SKidvOb2pk7D0/kiKuOXx3pmDw5FAHRbmXVlZ+alSxe+4HSudixfa/PJYY6Eemo0ktJr68h52YcGKvsH9D7x9FV7L9S7wdKwKBuXmBW7fbMtZ0BIRzFlPcb1mY8ntpsX2YgAus0cM0qxRLPWt11KxvfcjqrgC9arE3m8J7feJRcQVJAes84r6u/mgbUnqdz/g0C2uJoV7kk9/KWCVLowW5ORS7lvZ2j/6qCOkew+f52I2ryqjx4+q25//1yT9tDo/my+SlZlz9lr8OddjuCHGldrDBnEGEwnJXBXmdJ7Xq+JKtBPmPRepewmW94ROGVEY9K48+r8iEhAznTxgVGdE9OK0EXnSCFdxvF8a4KTC1Ny8Zq277BNLiFcCHMD5HehYtchD+hZ78FWBoBAN+khLymyyAIGWcla7LW81lgicCQdtdia8MPAHdkHyHqG3pIuhuevM/bixgPysZe4Rwr4s4LcvH3W5BE8gV/6w1+RwejMzCR+Jv8/G9EW8Qz+QweIxZKCjA+nX4c6tn9YafUNfl8U+c1WMdwvXA8da6Z3RRuDsXagAVvT0Zx9Q6pk/qsCKSAz81zXtftFfEDNTw/nMbh6QWRZTY4Kn5/OFXffSAj/76bBAdiYoRFp7c2MrwXBTZt5pD1sm2GIVcEfwtp20adf2iZUXI3wDWlCAVZI5VLf66mMwGYAxzCvliGo+7viL19Yj4IKz07ZosMPW/Pqf0/rIzp+mP/O7JxxH0LzTZ8zGtGsO3EIT5x6VTrXW+L9lge9UMLP5ZbfCvOYlGnOieBpEnRSBxN+/eBNf0jbtwEE6BaozVxV4qWOLQ7+6ikfdG+BKwuxCyI+r2b+g2NMtkX7R7cfVDKWi/gCEkD1c1Ky8sLXhvgeOPvh4qJZ6E8Gr7NTbEFPc2vDsW2W8mljtFp6cCZWosryRHK3Q9DvR88m29NkVnXuriQIOiSsaDp+v21M4flUcLzYevBAC9r+MVqNvoDRCgVFjcygNXK7CxYFjb/lo07VvZQtl0mzn/Otv+dJ11dtrwHk1UA6tdCwes3k0nU2LSxsx7NMSPZetsmaMukJHoPXdCR9H6ozoxGmr2WYyJZLOZFAdgw2k9BCz3X693OLyGTsy3q+eeJJse92yaIg671/f8egn4PAMxQK2Xw0LvfdJ9B7c+QdSTPSvlCrZ4Lh/2hqm7tbaXDbzAlhudSEo7AeuWmqpzy1XKV1y1VBrpKRLqVS5lZqeN9q9BsTmNUoQMWRNIIGGI0XkysEScgVZo7HhYrA0aAlSowo8FVfuy+XFmorhOEEon8u5xsF5YIw5cionoMIFh21XR0sHiuumDtJfw+nn5hSVFWL+V9RU3FYyIFJvSGw2pNUyigX8KucDmjaOO3Bvn06XsQhbfOaUdPbnuSDWmjIkk52TYV1aNI3hlkhWrKEZPiwDGryPcPb7/Ixlz7apHkTh/YWvfmssF6S4khbvD3qJkQUWXBXnfiCUUkiJjQJl8LXtE8qdI6jFbdF2J7mu27yXl43z97C9g1SN2WwEo+DDkObPelpEHXkd0m3DNIkujVNKNF9TIezf1qxppdCImhf8Nwnarv4P/VOMM/3wQcw64DIJu3BnjxDwIDUjN3naMmojezm6PDDcFx+Ol8O5Quw18GQm4C8a5h/RSz6PcFW6gBTF2TGVxVQqOnGZIaKGYyadOBUwWhwpFM4Y1MpYAgHXq/BteO+aKbcGIUWgMKKyNSR6Nh9uugYs7CCqHCz0wqgp3YfYbHnElEZhgWfJP543fd+OS41IMqszGjM6JGmUvvg9tHyEgvCIZTK3WEHARCLmcidiR8TB3iQBqz1BqRqWJ/DARE8S1J/U4IxL0EWBgb6I+QLx5xePxrdV5SfrZ+F2GEjsUZXVNHgaDMdNWksQNZ/HAKcNGmU0nvEEBI+zOmE1ixxXPm4m1bBJHT+kVHkwo8pXEAkasZwTWC2AFfRVYw0/UY4tLq1YqLSjZyuaR6j5wJb4Am+yT3GWVXuc3YgNU83gbblc8JKsfUjQ0L5j3pUFcXIGcoAV0C7w+b5qRiJWxBErkn8ZuXeyWAoWfemlAxdpvLdw/rhqXbvasEXY8sC1hfyKcpB8b7lbyP1XAe4WscLzxUNbd3X21NY3PEFzwXuLtt5Rf5iKPSWQIjsIvr/VrYbw/OC7CL8vM/BTHHZ55YaJMpDOt7RtatpZOdw2n15Dh+tLjS8AfuXjPRzeub9QBzVvdrYJhQEUH2mkv0y498BGwnfvijtoFbU3Sdq2X/d0S3tLyzSL91Nz82OgBPgsau+ygT+tOAg51HCfXdGfynGqERTva8A2qPL7Pa2N3Ls/nZdAK99y6Ck2565DLW3UxLJRY+2t9/xuvrPZ0tpSWb6t0rfV0rSP09HWuq61dby1TQuiErxMpJfcprdDFTUPVbNFNztYaj1l+dW8n5pbXuQ0q1uaD4MnoFCi390nuhjf9yDYvxyyI3SaF10Xx0rlJiw63a3kU6p1K2dwkvyxWxyr1c8TOkFOXWKKqj3bivIEX2HGbbpAYuXDjqpD1sE+n1ZtncRJrmmgcniVDOuwvPWSCuywnn9aY7Uv01DN6xDTt1qlQ9e7hUtbhMKWpcJEBSFb9eUYXAJH5nq0kvshDm1FrWW38o7B29Blz859WyPPA1+bjwap+Pxkhtd1IKIw9fzlyk7V2k5MnmuVXsmttUNzrH3xttYH6JqjOKK2Q+emv175PqQ38T+9m6S7yfU8q8D+BxhTReHCvjTnWkAM91JY2Qkb5AGPQqWJqA76nlw+w/e9OYBipi4d2ktIeOROv1BFcW+agChA3eslEXUGbcIGARTc4nhT11BZ66XXzTFLFNyZIT5MLW+ryBmodW2VrEXDRMZqRD/2qyML72XgQpGELfNoz70gvo7BkBzxWp6ehAVacnpetXkN6xJGdgiJyhpJh7aCMIgDMcpRT8qiaLvL7GaNU+Zn4uilrga3YoM+iKsHHqj9Gu4ngrpFHoWrvlFQPsPcpxljqOLsvdmmjbremsHra9+uSsGD+oVupbsOb7FxZYU6sqxRbdx0nWOxkkkius4vnw/K0WCJR5uI75XXT314Bs+9DTnBxbyRmNG5ww5BgWPUJhnZsl2WW3N5+3UrdiU0LiqxIC9fJhufNl+WTJqu0LcSkkxX4zFAe5RWRLVcPj5TM1NFRtP5bbfkc/YbNNUIiLnpTBLTsrspgCMZx2nFakMvJucoijwaUMaKeL7QQuej6KO23JFlQItUujYzO/SYuE07fbvIRNG8Mncpo5d3l5lK0jIjmdu49Y9bX6o26YlZc7PfHf90vMdmHlwZQTyHDNX1Gl5k1j7cP4/5MNEp40QJzTM3GLiv0JrfBR4uAff0qBBMW0KU4Vmq2OMqcLMdTDevaPiCmbY4wYyVL1gZNnVRsj4HLpaAueanq4LcCplXpRKikymU6Yac4eu+EIo+1/N5+s9Fwi90QP2NrgCKGpTDLDKWLaRW6kbPamN3EZmKRIQQydUebES0+XGqdqhbgMSm4uH9hb7wAaqOIV2C4KPUvmIEL1APfA34K5lmixV36G80KLsbUo1CnurCyBRF7kcFS+9EsYX/zQff8B/bfdPkyzspMI4qjpnsXrrAo7/1qdfnS0TM3AaS2UTvR8eLVuLejuwLlHdbwnUWXZFVmoxhnaLLjjCbNfiZ2QJJLgiK28qOukylyxZyeuJP3C/pIbQ6TF2uhXgacKZWFbvgz3Gvwh5gaGdtICHZdAPwPaCzIujae1fMdOF92d4QwWHvOX2LKDJlj2i6NjfohqsghFuuG9hKraXN0ohV0EOkGaLLLzOMvuhXE8vU5dbocsZoDMlMITNy+TWi0JKIL5DU+0/pd0f0Q4m6CXWp8MHQI+V9nhncwSDKMcoQ/chzV79bKc+/vvg5/SFwO7907PD5u/dUyvev9D2jX0ZZdAeSRi/vf6q83WOzJxiYWhjKH9p6DmKUdtw35f4SxqtbH7ojScWHFrnW+D7lYm1Nk+HmayrwdPRCvfYm8MsljxofEc2MuDX32w/MM+iluvzrDZwTceltup9uht0Gl48d+QnHW05UsjzXa/nn2bNs83T9EHZou8nt48sFOPs17893CbXb2sNLWTGNjpU4AMOTrLhWy45PXquVRqxOVQTWSGNWhyr8yB548oJWYAPZXcDhzcKO93+8B+O5R8xKqN5cmoykFCo1rhYFYK2ohGezRtQVjG6p8jnAOlUpj+PqbcS/nlICNWQ4C7BEcP1Ob9/Ync6ta4I3LnJIVkb7NmHdWKj2wr9ZzKTi75sXK1NDe5xdY4opz8rE/QenH/csWXYqFdmbcQjX2AfitpBEGpG7fPIuvfCrKxVav9YQYmWkjg43qALTfJdtzKoUxnxE/3fROm/RjKi7uzAnOaggSFnXnpbrIHC2LNeWovFl2pZqrgn/5KLksjEiIMNi/IhEo/RFZZg/axYDKS/YJUzrU7tgh9uDm7jtpCFIWb892x2I2yqyMSrebr9Iq2PWsJ2MXrwrNSIh3QA5A2/ZUIK01fbwvmYEF8qGqpBiLGXqXS8euwZiLI7V9qaPLhj20UJP92qVF6V4vUQdYs38l9BVgSncYOG7ZVktitrffvtB2b7QJ+KGmnNevJUjWevhiBCvUiGNPdyGeAXLt0J4fpCc2GkF99XTUkG4V/tqpKXH9empBxVnv2uDXXpfE8msmmNWlOMY2F+wyVDMGSdCYePmYm6TodOyCznT5nDINFHQIiX4YnU6oV3q9UgwncylOGaSZo+XSaQmVjuzBk3GaKQXRxZxug1Jvs/0w2D4f1vxyUQeGBZ5vTID+4dc8sd4T+3QvlfAXB+aI7+Uzc7zFA+LOZxf5KC8Qm1vf8xIAdBoUzl1NKP+RHdF4fip5lcamnY3d1S1v1b/tWPIYi8RhL2k5Q5naUGg8Toa12iTmFmbUA0UTWh0CTOmS+pigHclpDhx8GaovSWjLXQr0VIEoh/z1KUTtn3XeOg79DC+5CSU6RrdPemTX/1sidv6D5gVaVZsJTPnUzslV6vFUvXVEunVHIlEc7VXZpNLbbKvMbBsb6/ks3+LoeXTV9IQsgMN9l0b2gJZnPNpOM7uvZ4uWbYd59RTOTw3JGXpnvqqhbX+G0DKVCtgEl1ULRPf3ergkN9PF64EEHWZRt3E2621fPSHaj+xSL2HhlzwdT2zqvh/wZdsCEjNo4ouILd7Ice1bRHwfpVWBZhjfZiZTAtFNVMLg6gWMhhqmWhK0R3EpoKtxyuWzS1q5mrpOwq8eVy3C/FReRMIHKeZKEI+eYiuoml2CPoMFjX6q8Blv0cE3VuoQk8K5yeMpdNHIIks3xhLCSXlfE8qv3x+jw9QYphS4zLHNf3ztrEmMJ04G012UsPX5+tqukXbV2hKbUkRTI6c+DxDflMhxosCIc/zgJhHFUtdjylvWCkpuL42dWDfpOluaqlZ1hNBtNsLfBGRqUJmISv9Z4FEekvgjWtsbGr8Qe52I7i9JfgRXgOQvV7bJNat+OttY/QwykuNwH4jC1b5ZUvZp7+uq2Fkurs4mgOhdrW/d9jgTQ67pgKDr8hm/k7o9o7s506y2CeeY3PuO8FmnbzvbtYPLa3/W/rZFJZ7GgIM367XwPYjgMpr/EMg4XoDm5Gul1gHs7/CISab3zugk04MaA0IVEUvrm3upWDR8DcKhltQMFyNgiETI/gne62kTd6c2dbk5WHDrx7ZJIsqcKYvSuJRlIaioBtFwTsoCv6UogTAdcgJLcgJzyInPIKc8KGUoi90wfSaRuwAoo+oqbqR2ucRpg4/cj3BTJj9KeZx4GfjmmAX5TmWYClTMNymzwQlxWmDR9V+/iOcJPZfmB6Hl+AGjY0o4tRt1vcHu4bFan2yz+AbRjNb8o1STjdGGqNOxX4SITVpyCPXI8yhiT3BAiYe3zIV+Khk5iRCPmjT+3Slep+uBvng5DGLQfEXA8EA9nbrnXoAsXwxe7+uItAIfo368Ug3QmBq+wjobfQx+gR9ij5Dn6MvwJfgPekrUvwaqSK+Vd7D7+D3zA8e2vh2IzD9tenxVD6JC4512xt8lj5HfT9Pfxp+os4HtAVdwYzKnKq+Qszxexo3rGwLcrd2VdQQN1mXx1PcwC1u4sPbzBNELv2LaLDdUtP2obQxK8azHoO4W3iD3T49fWeU2efR3f7/yLFYZmDQXvc9K9lagUUAMeLefxasAjCHfVgAZB6IdYs50Xu13bqLF9b24I9ZD2sDbi14/z8gy1ixltjgvOUB5LoAgBXYzalJgsaMrR1tXYdRRlGH9RQdsE+6xmRg8yIeo8oxRuMQBSoPuMOMYMLds4xGCJ+H2SMi5abus/wCVY5tNA0Xm0y9xGM0JtAOq1pgK0BdKAf7DKGv0Mfoy9F/ZGlalNvlwnlCchgtRL9lW6Ar4KN+oSdgIxXpIJyF27gO2O/NAlh1VXeNOyPd9/3SIKA/VCk39Y4EPYiuHeMBHJpWkm3QeJELPEYL0W9ggZKa9zGHzv8bI7DHe/4Ybhfe2E9ioO9JM323bubsSkQviMw+n3QNJUe8tOtrzy5v2Ea67A2xVZTs4u8y1jjnu53NC3kEbiE/ZjsiulOj20Q68U6YEimtxkuuC3vL8YZLo2sFEadQxuvG9lE0et6+lk+7MQHoN0PYlsaXb+vaN3tr1y42dVmkfSbV5xi3BbV1u11M9wD0lOzLXnYCR90t4wt+riuoKA19yuwD2pLAJwQ7Z3y+cIni8kg618nUSAT2O6VK/3WBIa1hT2ew7EoFSraMIj+TWE0+94raHAJwET9+Z7plXEjq3xDH3QDg5IGO+5L8L2+J/+iwzxPMxgEiBgAI/iyZoHAmMP0/eE5k9y6iNe1k6w7Wz4ucrqTpxyZ3BeUJv2Ryp3XFTPYdyL7JIwR4RkjzN7azXi2CIME0pTXodZc7ISjd+rL4FHxGEy3ARHUAx1V/LZvijl8wWV2m1fSCf+swc0W06Oqa5m6SKzytRnhQVagM6MchRgkJMXYE8YhB9umKooTpGRqNkK4fx4OW+u+4CrcGYrgTZ5vmG9TUjtfniqYZUWT6Ug0eE3hkiUG5nBpgjF14DXbo+DQRbfpV13zMplIJCuc+VLJxGgazxFwWI3ZLnj65X500xB03oZ0ML4aSP6GvQXKbuPMrUqvmaQh3UGZrRUZNiYo9tXTRU7xGldSypY45bArLULMztAb65imdIOaRDYpIUF5BsIo7KQ6/UzSwtI2SedS1k7QoIXPSc0GTF4uzWhxLxvwNxF7h9r12LLYXId9FD5srO/S32bKeWzZPJqX/AM3Qh1pufSt76jiQvYEl1mM0eM7TMkwAA3t9SDm76ZaXKLZ565vpO0ixvfQyCI2j5BOhV/k2PiV3sRt4KqFl/mDuDnUz6m7Vv78RPb3I1jPMXVCqVYif+ETFHnW3rchMb51e1uuVpzL0lgGTIAUMaRUFcKADsIEE0QIZmKfyDUlFZYco2a6/43QDCaXskcMGOK2s5KFzqPyi7sjfJ9S8NVojj8oX1MjuyfEEQICPcWimAWgjLBwkJq0OJjidHZz2iY3OZzsEkdnrENlynSNYYl5yhDKXYg8j1bqTCAhsnC7y5KtQKJtXlmIyhUu8NLLBBZiyuQOUyDbJdEUmyDWZrL9CeaaZYhIH7US0uJXmebTIijZBcrF80286Jyev7Ey1xEQOqsmTw7nKtdAUZezyTeDlky3XBGUZ43LKph7QHK7xqeAQevtocWRlEtJlA01RZMpRKTVFXerpxVxFxb68nF7jsq7GbdU20BueIVJOwsfFq4TPBIUSOLi4JMrQVz99dZMhaPC4WTsYygEnZqs4mrwYKdxeuPlYKTLJqDS/V4o4hCo+DvNQb/QI+vHorefgMTPMm4Y5u075P6JIXhH/e1/ynwEA) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.4}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1;margin-bottom:1.25rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:calc(4px + 2ex);margin-bottom:1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{text-fill-color:transparent;-webkit-text-fill-color:transparent;background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1)}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-weight:700;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}[data-monster-role=control]{position:relative} 
-}`,
-          0
-        );
+.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-0{border-radius:0;border-style:none;border-width:0;border-shadow:none}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}.monster-form{accent-color:var(--monster-color-secondary-2);align-content:flex-start;align-items:flex-start;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;position:relative}.monster-form label{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:grid}.monster-form label:has(input[type=radio]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=radio]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=radio])~label:has(input[type=radio]){margin-top:.2rem}.monster-form label:has(input[type=checkbox]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=checkbox]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=checkbox])~label:has(input[type=checkbox]){margin-top:.2rem}.monster-form label~fieldset,.monster-form label~label{margin-top:1rem}.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-1);box-sizing:border-box;color:var(--monster-color-primary-1);font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem}.monster-form button{background-color:var(--monster-bg-color-tertiary-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-1);border-shadow:var(--monster-box-shadow-1);border-color:var(--monster-bg-color-primary-3)}.monster-form option:checked,.monster-form option:focus,.monster-form option:hover{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-form input,.monster-form select,.monster-form textarea{border:0;border-bottom-radius:var(--monster-border-radius);border-bottom-shadow:var(--monster-box-shadow-1);border-bottom:thin var(--monster-border-style) var(--monster-bg-color-primary-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:thin;border-shadow:var(--monster-box-shadow-1);border-color:var(--monster-bg-color-primary-2)}.monster-form button,.monster-form input:not([type=radio]):not([type=checkbox]),.monster-form label,.monster-form select,.monster-form textarea{width:100%}.monster-form label input:not([type=radio]):not([type=checkbox]),.monster-form label select,.monster-form label textarea,.monster-form label+input:not([type=radio]):not([type=checkbox]),.monster-form label+select,.monster-form label+textarea{margin-top:.2rem;width:100%}.monster-form fieldset{background-color:var(--monster-bg-color-primary-1);border:2px solid var(--monster-bg-color-primary-3);box-sizing:border-box;color:var(--monster-color-primary-1);margin:0;outline:none;padding:2.5rem 2rem 2rem;position:relative;width:100%}.monster-form fieldset legend{font-size:.8rem;max-width:95%;overflow:hidden;padding:.1rem 2rem .2rem .5rem;position:absolute;right:0;text-align:right;text-overflow:ellipsis;text-transform:uppercase;top:0;white-space:nowrap}.monster-form fieldset~fieldset{margin-top:1rem}.monster-form button{margin:.2rem 0}.monster-form button:first-of-type{margin-top:1rem}.monster-form button:last-of-type{margin-bottom:1rem}.monster-form input:focus-visible{outline:none}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px}@media (prefers-color-scheme:light){.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{background-color:var(--monster-bg-color-primary-2);border-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-2)}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px}}.monster-form button:hover,.monster-form input:hover:not([type=radio]):not([type=checkbox]):not([type=range]),.monster-form select:hover,.monster-form textarea:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.4}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1;margin-bottom:1.25rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:calc(4px + 2ex);margin-bottom:1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-weight:700;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}[data-monster-role=control]{position:relative} 
+}`, 0);
       } catch (e) {
-        addAttributeToken(
-          document.getRootNode().querySelector("html"),
-          ATTRIBUTE_ERRORMESSAGE,
-          e + ""
-        );
+        addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + "");
       }
     }
   });
@@ -28351,7 +30369,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     Form: () => Form
   });
   function initUpdater() {
-    ;
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -28380,7 +30397,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }
   }
   function initDatasource() {
-    ;
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -28404,7 +30420,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }
   }
   function initWriteActions(elements) {
-    ;
     elements.forEach((element) => {
       if (element instanceof HTMLElement) {
         element.addEventListener("click", () => {
@@ -28428,7 +30443,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     });
   }
   function runWriteCallback(button) {
-    ;
     if (typeof this.reportValidity === "function") {
       if (this.reportValidity() === false) {
         if (button instanceof StateButton || button instanceof MessageStateButton) {
@@ -28467,7 +30481,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     });
   }
   function initOptionsFromArguments3() {
-    ;
     const options2 = {};
     const datasource = this.getAttribute(ATTRIBUTE_FORM_DATASOURCE);
     if (isString(datasource)) {
@@ -28511,7 +30524,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     );
   }
   function initControlReferences8() {
-    ;
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -28552,10 +30564,11 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_message_state_button2();
       init_constants3();
       init_state_button2();
-      init_customelement();
       init_form();
       ATTRIBUTE_FORM_DATASOURCE_ACTION = `${ATTRIBUTE_PREFIX}datasource-action`;
-      formDataSymbol = Symbol.for("@schukai/monster/components/form/form@@formdata");
+      formDataSymbol = Symbol.for(
+        "@schukai/monster/components/form/form@@formdata"
+      );
       formDataUpdaterSymbol = Symbol.for(
         "@schukai/component-form/form@@formdata-updater-link"
       );
@@ -28638,7 +30651,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @throws {Error} undefined datasource
          */
         refresh() {
-          ;
           try {
             this.setAttribute(ATTRIBUTE_DISABLED, "");
             const datasource = this.getOption("datasource");
@@ -28666,7 +30678,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @return {Monster.Components.Form.Form}
          */
         [assembleMethodSymbol]() {
-          ;
           super[assembleMethodSymbol]();
           initControlReferences8.call(this);
           initDatasource.call(this);
@@ -29075,16 +31086,18 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       isNodeListSymbol = Symbol("isNodeList");
       NodeRecursiveIterator = class _NodeRecursiveIterator extends Base {
         /**
-         * @param {Node} [data]
+         * @param node
          */
         constructor(node) {
           super();
           this[isNodeListSymbol] = false;
           if (isInstance(node, NodeList2)) {
             const children = node;
-            node = new Node2();
-            node.childNodes = children;
+            const n = new Node2();
+            n.childNodes = children;
             this[isNodeListSymbol] = true;
+            this[internalSymbol] = n;
+            return;
           }
           this[internalSymbol] = validateInstance(node, Node2);
         }
@@ -29105,7 +31118,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
               yield* new _NodeRecursiveIterator(node);
             }
           }
-          return;
         };
         /**
          * @param {function} callback
@@ -29129,19 +31141,12 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_constants2();
       TreeSelectStyleSheet = new CSSStyleSheet();
       try {
-        TreeSelectStyleSheet.insertRule(
-          `
+        TreeSelectStyleSheet.insertRule(`
 @layer treeselect { 
 [data-monster-role=badge]{display:inline-flex}[data-monster-role=option]{display:flex}[data-monster-role=option][data-monster-state=open][data-monster-has-children=true] [data-monster-role=folder-handler]{content:url('data:image/svg+xml; utf8, <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M2.5 0c-.166 0-.33.016-.487.048l.194.98A1.51 1.51 0 0 1 2.5 1h.458V0H2.5zm2.292 0h-.917v1h.917V0zm1.833 0h-.917v1h.917V0zm1.833 0h-.916v1h.916V0zm1.834 0h-.917v1h.917V0zm1.833 0h-.917v1h.917V0zM13.5 0h-.458v1h.458c.1 0 .199.01.293.029l.194-.981A2.51 2.51 0 0 0 13.5 0zm2.079 1.11a2.511 2.511 0 0 0-.69-.689l-.556.831c.164.11.305.251.415.415l.83-.556zM1.11.421a2.511 2.511 0 0 0-.689.69l.831.556c.11-.164.251-.305.415-.415L1.11.422zM16 2.5c0-.166-.016-.33-.048-.487l-.98.194c.018.094.028.192.028.293v.458h1V2.5zM.048 2.013A2.51 2.51 0 0 0 0 2.5v.458h1V2.5c0-.1.01-.199.029-.293l-.981-.194zM0 3.875v.917h1v-.917H0zm16 .917v-.917h-1v.917h1zM0 5.708v.917h1v-.917H0zm16 .917v-.917h-1v.917h1zM0 7.542v.916h1v-.916H0zm15 .916h1v-.916h-1v.916zM0 9.375v.917h1v-.917H0zm16 .917v-.917h-1v.917h1zm-16 .916v.917h1v-.917H0zm16 .917v-.917h-1v.917h1zm-16 .917v.458c0 .166.016.33.048.487l.98-.194A1.51 1.51 0 0 1 1 13.5v-.458H0zm16 .458v-.458h-1v.458c0 .1-.01.199-.029.293l.981.194c.032-.158.048-.32.048-.487zM.421 14.89c.183.272.417.506.69.689l.556-.831a1.51 1.51 0 0 1-.415-.415l-.83.556zm14.469.689c.272-.183.506-.417.689-.69l-.831-.556c-.11.164-.251.305-.415.415l.556.83zm-12.877.373c.158.032.32.048.487.048h.458v-1H2.5c-.1 0-.199-.01-.293-.029l-.194.981zM13.5 16c.166 0 .33-.016.487-.048l-.194-.98A1.51 1.51 0 0 1 13.5 15h-.458v1h.458zm-9.625 0h.917v-1h-.917v1zm1.833 0h.917v-1h-.917v1zm1.834 0h.916v-1h-.916v1zm1.833 0h.917v-1h-.917v1zm1.833 0h.917v-1h-.917v1zM4.5 7.5a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1h-7z"/></svg>');display:block;height:13px;margin-right:8px;width:13px}[data-monster-role=option][data-monster-state=close][data-monster-has-children=true] [data-monster-role=folder-handler]{content:url('data:image/svg+xml; utf8, <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path d="M2.5 0c-.166 0-.33.016-.487.048l.194.98A1.51 1.51 0 0 1 2.5 1h.458V0H2.5zm2.292 0h-.917v1h.917V0zm1.833 0h-.917v1h.917V0zm1.833 0h-.916v1h.916V0zm1.834 0h-.917v1h.917V0zm1.833 0h-.917v1h.917V0zM13.5 0h-.458v1h.458c.1 0 .199.01.293.029l.194-.981A2.51 2.51 0 0 0 13.5 0zm2.079 1.11a2.511 2.511 0 0 0-.69-.689l-.556.831c.164.11.305.251.415.415l.83-.556zM1.11.421a2.511 2.511 0 0 0-.689.69l.831.556c.11-.164.251-.305.415-.415L1.11.422zM16 2.5c0-.166-.016-.33-.048-.487l-.98.194c.018.094.028.192.028.293v.458h1V2.5zM.048 2.013A2.51 2.51 0 0 0 0 2.5v.458h1V2.5c0-.1.01-.199.029-.293l-.981-.194zM0 3.875v.917h1v-.917H0zm16 .917v-.917h-1v.917h1zM0 5.708v.917h1v-.917H0zm16 .917v-.917h-1v.917h1zM0 7.542v.916h1v-.916H0zm15 .916h1v-.916h-1v.916zM0 9.375v.917h1v-.917H0zm16 .917v-.917h-1v.917h1zm-16 .916v.917h1v-.917H0zm16 .917v-.917h-1v.917h1zm-16 .917v.458c0 .166.016.33.048.487l.98-.194A1.51 1.51 0 0 1 1 13.5v-.458H0zm16 .458v-.458h-1v.458c0 .1-.01.199-.029.293l.981.194c.032-.158.048-.32.048-.487zM.421 14.89c.183.272.417.506.69.689l.556-.831a1.51 1.51 0 0 1-.415-.415l-.83.556zm14.469.689c.272-.183.506-.417.689-.69l-.831-.556c-.11.164-.251.305-.415.415l.556.83zm-12.877.373c.158.032.32.048.487.048h.458v-1H2.5c-.1 0-.199-.01-.293-.029l-.194.981zM13.5 16c.166 0 .33-.016.487-.048l-.194-.98A1.51 1.51 0 0 1 13.5 15h-.458v1h.458zm-9.625 0h.917v-1h-.917v1zm1.833 0h.917v-1h-.917v1zm1.834-1v1h.916v-1h-.916zm1.833 1h.917v-1h-.917v1zm1.833 0h.917v-1h-.917v1zM8.5 4.5a.5.5 0 0 0-1 0v3h-3a.5.5 0 0 0 0 1h3v3a.5.5 0 0 0 1 0v-3h3a.5.5 0 0 0 0-1h-3v-3z"/></svg>');display:block;height:13px;margin-right:8px;width:13px}[data-monster-role=option][data-monster-visibility=hidden]{display:none}[data-monster-role=option][data-monster-visibility=visible]{display:flex}[data-monster-role=option][data-monster-has-children=false] [data-monster-role=folder-handler]{content:" ";display:block;height:13px;margin-right:8px;width:13px}[data-monster-role=option][data-monster-intend="0"]{display:flex;margin:0}[data-monster-role=option][data-monster-intend="1"]{margin:0 0 0 20px}[data-monster-role=option][data-monster-intend="2"]{margin:0 0 0 40px}[data-monster-role=option][data-monster-intend="3"]{margin:0 0 0 60px}[data-monster-role=option][data-monster-intend="4"]{margin:0 0 0 80px}[data-monster-role=option][data-monster-intend="5"]{margin:0 0 0 100px}[data-monster-role=option][data-monster-intend="6"]{margin:0 0 0 110px}[data-monster-role=option][data-monster-intend="7"]{margin:0 0 0 120px}[data-monster-role=option][data-monster-intend="8"]{margin:0 0 0 130px}[data-monster-role=option][data-monster-filtered=true]{display:none} 
-}`,
-          0
-        );
+}`, 0);
       } catch (e) {
-        addAttributeToken(
-          document.getRootNode().querySelector("html"),
-          ATTRIBUTE_ERRORMESSAGE,
-          e + ""
-        );
+        addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + "");
       }
     }
   });
@@ -29153,7 +31158,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     formatHierarchicalSelection: () => formatHierarchicalSelection
   });
   function handleOptionKeyboardEvents2(event) {
-    ;
     switch (event?.["code"]) {
       case "ArrowLeft":
         closeOrOpenCurrentOption.call(this, event, "close");
@@ -29183,7 +31187,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }
   }
   function formatKeyLabel(node) {
-    ;
     validateInstance(node, Node2);
     const label = new Formatter(node.value).format(
       this.getOption("mapping.labelTemplate", "")
@@ -29197,7 +31200,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     };
   }
   function buildTreeLabels(value) {
-    ;
     let node = this[internalNodesSymbol].get(value);
     if (node === void 0) {
       node = this[internalNodesSymbol].get(parseInt(value));
@@ -29214,11 +31216,9 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     return parts;
   }
   function formatHierarchicalSelection(value) {
-    ;
     return buildTreeLabels.call(this, value).join(this.getOption("formatter.separator", " / "));
   }
-  function initEventhandler7() {
-    ;
+  function initEventHandler6() {
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -29288,7 +31288,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     this.shadowRoot.addEventListener("click", this[openOptionEventHandler]);
   }
   function initOptionsFromArguments4() {
-    ;
     const options2 = {};
     const url = this.getAttribute(ATTRIBUTE_FORM_URL);
     if (isString(url)) {
@@ -29452,7 +31451,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @throws {Error} map is not iterable
          */
         importOptions(data) {
-          ;
           this[internalNodesSymbol] = /* @__PURE__ */ new Map();
           const mappingOptions = this.getOption("mapping", {});
           const filter = mappingOptions?.["filter"];
@@ -29486,6 +31484,9 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
             }
           }
           this.setOption("options", options2);
+          fireCustomEvent(this, "monster-options-set", {
+            options: options2
+          });
           return this;
         }
         /**
@@ -29494,7 +31495,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          */
         [assembleMethodSymbol]() {
           super[assembleMethodSymbol]();
-          initEventhandler7.call(this);
+          initEventHandler6.call(this);
         }
       };
       openOptionEventHandler = Symbol("openOptionEventHandler");
@@ -29508,7 +31509,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     Template: () => Template2
   });
   function initOptionsFromArguments5() {
-    ;
     const options2 = {};
     const url = this.getAttribute(ATTRIBUTE_FORM_URL);
     if (isString(url)) {
@@ -29520,7 +31520,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     return options2;
   }
   function initIntersectionObserver2() {
-    ;
     if (this[intersectionObserverWasInitialized2] === true) {
       return;
     }
@@ -29546,7 +31545,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     observer.observe(this);
   }
   function loadContent3() {
-    ;
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -29577,7 +31575,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     });
   }
   function runProcessors() {
-    ;
     const processors = this.getOption("processors");
     if (!isArray(processors))
       return;
@@ -29675,7 +31672,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          *
          */
         [initMethodSymbol]() {
-          ;
           super[initMethodSymbol]();
           this[attributeObserverSymbol][ATTRIBUTE_FORM_URL] = (url) => {
             if (this.hasAttribute(ATTRIBUTE_FORM_URL)) {
@@ -29698,7 +31694,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @return {Monster.Components.Form.Form}
          */
         [assembleMethodSymbol]() {
-          ;
           super[assembleMethodSymbol]();
           initIntersectionObserver2.call(this);
         }
@@ -29745,19 +31740,12 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_constants2();
       MessageStyleSheet = new CSSStyleSheet();
       try {
-        MessageStyleSheet.insertRule(
-          `
+        MessageStyleSheet.insertRule(`
 @layer message { 
-:where(html){line-height:1.15}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(pre){font-family:monospace,monospace;font-size:1em}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%;min-height:100%}body{box-sizing:border-box;margin:0;min-height:99%;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-shadow:none;border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030}.monster-theme-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-theme-primary-disabled-1{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1)}.monster-theme-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-theme-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-theme-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-theme-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-theme-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-theme-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-theme-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-border-color-1{border-color:var(--monster-color-border-1)}.monster-color-neutral-1{color:var(--monster-color-primary-1)}.monster-bg-color-primary-1{background-color:var(--monster-bg-color-primary-1)}.monster-bg-color-secondary-1{background-color:var(--monster-bg-color-secondary-1)}.monster-bg-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1)}.monster-color-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-color-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-color-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-color-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-color-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-color-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-color-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-theme-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-theme-primary-disabled-2{background-color:var(--monster-bg-color-primary-disabled-2);color:var(--monster-color-primary-disabled-2)}.monster-theme-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-theme-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-theme-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-theme-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-theme-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-theme-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-theme-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-border-color-2{border-color:var(--monster-color-border-2)}.monster-color-neutral-2{color:var(--monster-color-primary-2)}.monster-bg-color-primary-2{background-color:var(--monster-bg-color-primary-2)}.monster-bg-color-secondary-2{background-color:var(--monster-bg-color-secondary-2)}.monster-bg-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2)}.monster-color-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-color-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-color-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-color-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-color-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-color-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-color-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-theme-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-theme-primary-disabled-3{background-color:var(--monster-bg-color-primary-disabled-3);color:var(--monster-color-primary-disabled-3)}.monster-theme-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-theme-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-theme-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-theme-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-theme-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-theme-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-theme-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-border-color-3{border-color:var(--monster-color-border-3)}.monster-color-neutral-3{color:var(--monster-color-primary-3)}.monster-bg-color-primary-3{background-color:var(--monster-bg-color-primary-3)}.monster-bg-color-secondary-3{background-color:var(--monster-bg-color-secondary-3)}.monster-bg-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3)}.monster-color-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-color-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-color-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-color-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-color-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-color-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-color-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-theme-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-theme-primary-disabled-4{background-color:var(--monster-bg-color-primary-disabled-4);color:var(--monster-color-primary-disabled-4)}.monster-theme-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-theme-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-theme-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-theme-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-theme-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-theme-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-theme-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-color-4{border-color:var(--monster-color-border-4)}.monster-color-neutral-4{color:var(--monster-color-primary-4)}.monster-bg-color-primary-4{background-color:var(--monster-bg-color-primary-4)}.monster-bg-color-secondary-4{background-color:var(--monster-bg-color-secondary-4)}.monster-bg-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4)}.monster-color-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-color-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-color-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-color-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-color-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-color-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-color-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}[data-monster-role=control]{outline:none}[data-monster-role=control].flex,[data-monster-role=message]{align-items:center;display:flex;flex-direction:row}[data-monster-role=message]{position:relative;width:100%}[data-monster-role=control]{align-items:center;background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:flex;justify-content:space-between;padding:8px;width:100%}[data-monster-role=content]{flex-grow:2;@mixins paragraph}[data-monster-role=control] [data-monster-role=close]{cursor:pointer;height:16px;position:absolute;right:-10px;top:-5px;width:16px;z-index:var(--monster-z-index-modal-overlay)}[data-monster-role=control] [data-monster-role=close]:before{background-color:var(--monster-color-primary-1);content:"";display:block;height:100%;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%} 
-}`,
-          0
-        );
+:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-0{border-radius:0;border-style:none;border-width:0;border-shadow:none}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030}.monster-theme-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-theme-primary-disabled-1{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1)}.monster-theme-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-theme-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-theme-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-theme-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-theme-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-theme-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-theme-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-border-color-1{border-color:var(--monster-color-border-1)}.monster-color-neutral-1{color:var(--monster-color-primary-1)}.monster-bg-color-primary-1{background-color:var(--monster-bg-color-primary-1)}.monster-bg-color-secondary-1{background-color:var(--monster-bg-color-secondary-1)}.monster-bg-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1)}.monster-color-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-color-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-color-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-color-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-color-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-color-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-color-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-theme-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-theme-primary-disabled-2{background-color:var(--monster-bg-color-primary-disabled-2);color:var(--monster-color-primary-disabled-2)}.monster-theme-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-theme-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-theme-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-theme-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-theme-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-theme-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-theme-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-border-color-2{border-color:var(--monster-color-border-2)}.monster-color-neutral-2{color:var(--monster-color-primary-2)}.monster-bg-color-primary-2{background-color:var(--monster-bg-color-primary-2)}.monster-bg-color-secondary-2{background-color:var(--monster-bg-color-secondary-2)}.monster-bg-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2)}.monster-color-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-color-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-color-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-color-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-color-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-color-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-color-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-theme-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-theme-primary-disabled-3{background-color:var(--monster-bg-color-primary-disabled-3);color:var(--monster-color-primary-disabled-3)}.monster-theme-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-theme-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-theme-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-theme-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-theme-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-theme-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-theme-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-border-color-3{border-color:var(--monster-color-border-3)}.monster-color-neutral-3{color:var(--monster-color-primary-3)}.monster-bg-color-primary-3{background-color:var(--monster-bg-color-primary-3)}.monster-bg-color-secondary-3{background-color:var(--monster-bg-color-secondary-3)}.monster-bg-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3)}.monster-color-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-color-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-color-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-color-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-color-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-color-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-color-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-theme-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-theme-primary-disabled-4{background-color:var(--monster-bg-color-primary-disabled-4);color:var(--monster-color-primary-disabled-4)}.monster-theme-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-theme-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-theme-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-theme-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-theme-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-theme-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-theme-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-color-4{border-color:var(--monster-color-border-4)}.monster-color-neutral-4{color:var(--monster-color-primary-4)}.monster-bg-color-primary-4{background-color:var(--monster-bg-color-primary-4)}.monster-bg-color-secondary-4{background-color:var(--monster-bg-color-secondary-4)}.monster-bg-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4)}.monster-color-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-color-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-color-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-color-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-color-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-color-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-color-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}[data-monster-role=control]{outline:none}[data-monster-role=control].flex,[data-monster-role=message]{align-items:center;display:flex;flex-direction:row}[data-monster-role=message]{position:relative;width:100%}[data-monster-role=control]{align-items:center;background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:flex;justify-content:space-between;padding:8px;width:100%}[data-monster-role=content]{flex-grow:2;@mixins paragraph}[data-monster-role=control] [data-monster-role=close]{cursor:pointer;height:16px;position:absolute;right:-10px;top:-5px;width:16px;z-index:var(--monster-z-index-modal-overlay)}[data-monster-role=control] [data-monster-role=close]:before{background-color:var(--monster-color-primary-1);content:"";display:block;height:100%;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%} 
+}`, 0);
       } catch (e) {
-        addAttributeToken(
-          document.getRootNode().querySelector("html"),
-          ATTRIBUTE_ERRORMESSAGE,
-          e + ""
-        );
+        addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + "");
       }
     }
   });
@@ -29768,7 +31756,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     Message: () => Message2
   });
   function startFadeout() {
-    ;
     if (!this?.[timerSymbol]) {
       this[timerSymbol] = setTimeout(() => {
         removeSelf.call(this);
@@ -29776,7 +31763,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }
   }
   function removeSelf() {
-    ;
     stopFadeout();
     this.classList.add("fadeout");
     setTimeout(() => {
@@ -29784,14 +31770,12 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }, 200);
   }
   function stopFadeout() {
-    ;
     if (this?.[timerSymbol]) {
       clearTimeout(this[timerSymbol]);
       this[timerSymbol] = void 0;
     }
   }
   function initOptionsFromArguments6() {
-    ;
     const options2 = {};
     const timeout = this.getAttribute(ATTRIBUTE_PREFIX + "timeout");
     if (isString(timeout)) {
@@ -29807,7 +31791,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     return options2;
   }
   function initControlReferences9() {
-    ;
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -29818,8 +31801,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       "[" + ATTRIBUTE_ROLE + "=remove]"
     );
   }
-  function initEventhandler8() {
-    ;
+  function initEventhandler2() {
     this[mouseenterEventHandlerSymbol] = (event) => {
       const element = findTargetElementFromEvent(
         event,
@@ -29952,9 +31934,8 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          */
         [assembleMethodSymbol]() {
           super[assembleMethodSymbol]();
-          ;
           initControlReferences9.call(this);
-          initEventhandler8.call(this);
+          initEventhandler2.call(this);
           return this;
         }
         /**
@@ -29975,7 +31956,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          *
          */
         [initMethodSymbol]() {
-          ;
           super[initMethodSymbol]();
         }
         /**
@@ -29983,7 +31963,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          */
         connectedCallback() {
           super.connectedCallback();
-          ;
           if (this.getOption("features.disappear") === true) {
             startFadeout.call(this);
             this.addEventListener("mouseenter", this[mouseenterEventHandlerSymbol]);
@@ -29995,7 +31974,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         disconnectedCallback() {
           super.disconnectedCallback();
           stopFadeout.call(this);
-          ;
           if (this.getOption("features.disappear") === true) {
             this.removeEventListener(
               "mouseenter",
@@ -30020,19 +31998,12 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_constants2();
       NotifyStyleSheet = new CSSStyleSheet();
       try {
-        NotifyStyleSheet.insertRule(
-          `
+        NotifyStyleSheet.insertRule(`
 @layer notify { 
-.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-shadow:none;border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}div[data-monster-role=control]{align-items:flex-start;border:0;box-sizing:border-box;display:flex;flex-direction:row;justify-content:space-between;margin:0;max-height:100vH;pointer-events:none;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:25rem;z-index:var(--monster-z-index-modal-overlay)}[data-monster-role=control][data-monster-orientation*=left]{left:0;right:auto}[data-monster-role=control][data-monster-orientation*=right]{left:auto;right:0}[data-monster-role=control][data-monster-orientation*=center]{left:50%;transform:translate(-50%)}[data-monster-role=control][data-monster-orientation*=bottom]{align-items:flex-end;bottom:0}[data-monster-role=control][data-monster-orientation*=top]{align-items:flex-start;top:0}[data-monster-role=container]{width:100%}[data-monster-role=message]{background-clip:padding-box;background-color:var(--monster-bg-color-primary-1);border-color:var(--monster-message-border-color,rgba(0,0,0,.1));border-radius:var(--monster-message-border-radius,.25rem);border-style:var(--monster-message-border-style,solid);border-width:var(--monster-message-border-width,1px);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);color:var(--monster-color-primary-1);display:flex;font-size:.875rem;margin:var(--monster-message-margin-top,15px) var(--monster-message-margin-right,5px) var(--monster-message-margin-bottom,0) var(--monster-message-margin-left,0);max-height:200px;max-width:100%;overflow:hidden;padding:var(--monster-message-padding-top,5px) var(--monster-message-padding-right,5px) var(--monster-message-padding-bottom,5px) var(--monster-message-padding-left,5px);pointer-events:auto;position:relative;text-overflow:ellipsis;-webkit-user-select:text;-moz-user-select:text;user-select:text;width:100%}[data-monster-role=message]:first-child{margin-top:0}[data-monster-role=message].fadeout{border:0;margin-bottom:0;margin-top:0;max-height:0;padding-bottom:0;padding-top:0;transition:all .2s cubic-bezier(1,-.04,0,1.03)} 
-}`,
-          0
-        );
+.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-0{border-radius:0;border-style:none;border-width:0;border-shadow:none}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}div[data-monster-role=control]{align-items:flex-start;border:0;box-sizing:border-box;display:flex;flex-direction:row;justify-content:space-between;margin:0;max-height:100vH;pointer-events:none;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:25rem;z-index:var(--monster-z-index-modal-overlay)}[data-monster-role=control][data-monster-orientation*=left]{left:0;right:auto}[data-monster-role=control][data-monster-orientation*=right]{left:auto;right:0}[data-monster-role=control][data-monster-orientation*=center]{left:50%;transform:translate(-50%)}[data-monster-role=control][data-monster-orientation*=bottom]{align-items:flex-end;bottom:0}[data-monster-role=control][data-monster-orientation*=top]{align-items:flex-start;top:0}[data-monster-role=container]{width:100%}[data-monster-role=message]{background-clip:padding-box;background-color:var(--monster-bg-color-primary-1);border-color:var(--monster-message-border-color,rgba(0,0,0,.1));border-radius:var(--monster-message-border-radius,.25rem);border-style:var(--monster-message-border-style,solid);border-width:var(--monster-message-border-width,1px);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);color:var(--monster-color-primary-1);display:flex;font-size:.875rem;margin:var(--monster-message-margin-top,15px) var(--monster-message-margin-right,5px) var(--monster-message-margin-bottom,0) var(--monster-message-margin-left,0);max-height:200px;max-width:100%;overflow:hidden;padding:var(--monster-message-padding-top,5px) var(--monster-message-padding-right,5px) var(--monster-message-padding-bottom,5px) var(--monster-message-padding-left,5px);pointer-events:auto;position:relative;text-overflow:ellipsis;-webkit-user-select:text;-moz-user-select:text;user-select:text;width:100%}[data-monster-role=message]:first-child{margin-top:0}[data-monster-role=message].fadeout{border:0;margin-bottom:0;margin-top:0;max-height:0;padding-bottom:0;padding-top:0;transition:all .2s cubic-bezier(1,-.04,0,1.03)} 
+}`, 0);
       } catch (e) {
-        addAttributeToken(
-          document.getRootNode().querySelector("html"),
-          ATTRIBUTE_ERRORMESSAGE,
-          e + ""
-        );
+        addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + "");
       }
     }
   });
@@ -30043,12 +32014,10 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     Notify: () => Notify
   });
   function initOptionsFromArguments7() {
-    ;
     const options2 = {};
     return options2;
   }
   function initControlReferences10() {
-    ;
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -30125,7 +32094,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          */
         [assembleMethodSymbol]() {
           super[assembleMethodSymbol]();
-          ;
           initControlReferences10.call(this);
           if (this[containerElementSymbol2]) {
             while (this[queueSymbol].isEmpty() === false) {
@@ -30154,7 +32122,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @return {Monster.Components.Notify.Notify}
          */
         push(message) {
-          ;
           let messageElement = message;
           if (!(message instanceof Message2)) {
             const text = validateString(message);
@@ -30186,19 +32153,12 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_constants2();
       HostStyleSheet = new CSSStyleSheet();
       try {
-        HostStyleSheet.insertRule(
-          `
+        HostStyleSheet.insertRule(`
 @layer host { 
-.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}:where(html){line-height:1.15}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(pre){font-family:monospace,monospace;font-size:1em}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%;min-height:100%}body{box-sizing:border-box;margin:0;min-height:99%;padding:0;word-break:break-word}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-shadow:none;border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}.monster-form{accent-color:var(--monster-color-secondary-2);align-content:flex-start;align-items:flex-start;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;position:relative}.monster-form label{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:grid}.monster-form label:has(input[type=radio]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=radio]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=radio])~label:has(input[type=radio]){margin-top:.2rem}.monster-form label:has(input[type=checkbox]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=checkbox]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=checkbox])~label:has(input[type=checkbox]){margin-top:.2rem}.monster-form label~fieldset,.monster-form label~label{margin-top:1rem}.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-1);box-sizing:border-box;color:var(--monster-color-primary-1);font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem}.monster-form button{border-shadow:var(--monster-box-shadow-1);background-color:var(--monster-bg-color-tertiary-1);border-color:var(--monster-bg-color-primary-3);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-1)}.monster-form option:checked,.monster-form option:focus,.monster-form option:hover{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-form input,.monster-form select,.monster-form textarea{border-bottom-radius:var(--monster-border-radius);border-bottom-shadow:var(--monster-box-shadow-1);border-shadow:var(--monster-box-shadow-1);border:0;border-bottom:thin var(--monster-border-style) var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-2);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:thin}.monster-form button,.monster-form input:not([type=radio]):not([type=checkbox]),.monster-form label,.monster-form select,.monster-form textarea{width:100%}.monster-form label input:not([type=radio]):not([type=checkbox]),.monster-form label select,.monster-form label textarea,.monster-form label+input:not([type=radio]):not([type=checkbox]),.monster-form label+select,.monster-form label+textarea{margin-top:.2rem;width:100%}.monster-form fieldset{background-color:var(--monster-bg-color-primary-1);border:2px solid var(--monster-bg-color-primary-3);box-sizing:border-box;color:var(--monster-color-primary-1);margin:0;outline:none;padding:2.5rem 2rem 2rem;position:relative;width:100%}.monster-form fieldset legend{font-size:.8rem;max-width:95%;overflow:hidden;padding:.1rem 2rem .2rem .5rem;position:absolute;right:0;text-align:right;text-overflow:ellipsis;text-transform:uppercase;top:0;white-space:nowrap}.monster-form fieldset~fieldset{margin-top:1rem}.monster-form button{margin:.2rem 0}.monster-form button:first-of-type{margin-top:1rem}.monster-form button:last-of-type{margin-bottom:1rem}.monster-form input:focus-visible{outline:none}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px}@media (prefers-color-scheme:light){.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{background-color:var(--monster-bg-color-primary-2);border-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-2)}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px}}.monster-form button:hover,.monster-form input:hover:not([type=radio]):not([type=checkbox]):not([type=range]),.monster-form select:hover,.monster-form textarea:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAADI0ABAAAAAAdXAAADHTAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGlwbnFYchzAGYD9TVEFUHACFABEICoGqIIGGVguEKAABNgIkA4hMBCAFhUIHIAwHG2pgRQdi2DgAaPAZFkWwcQAFm+8TRdkmnUj2/ylBmzGhdehbZSF0R7uo7hkZCZGT6hnpobZTWxy6cODh0Eg/9o0FR+HA8s3J1b3tw59XozgcCNwjZmttwCVxX4hLopEkTaRXt0ZIY2It4jf92XsCvMRLUwj2Qo0IkhcxKkYq5iQtcfnimrpZ0jqHtGngJbl/tDqziiqdqwAzoQ0TLx86MzpX5tI5T/zv96975r4AoosRBDJfBbmkWgsItoqNbG2XJ9CkeobHbf3zBBmoGA1I5agxGO1GTaoNEFTM67Iuon9FXvzf+iuiwQEK/W/ahmibz+VdEbVVR4YN+Pd/jczCTO7LnwWgIqFl5QAl21YB2p5KJFlL6Jf7ZeBzfu4cFJ3q+AOC8QV66zobWwYhWwD/V5smvEXozEmETWvtKG2TPG3hWcpQm9nQOvR8JFIVgZBd2mbFc+I1fYXvwNQkZivqyP0e9386y1ba9d3zBqGLqwAX3XpzbTH6+tbXzGgkA2uJfQyelfWeJSvgC0JFUF1axNdTU2HTpSj7lJl/nemq7+9vSMk/6JadGssqrgGeetnaNVPL4z+d7qx/sgxnF2T5egHSUWyX7ADDVMKxoxz0BchuXxi2AsCatTPyvgOONTObrOSccGuCQlzhEbKB/vrtz1irH8hsZna79nInhy0yRELCJyLgWf86/3AgTDAAALpjNEg3JNNQZLhsZLoypFw1pk4dcthh5KijyAknEMIBQp+uJ/ilkhipuCPHeg+G9lpFoQ/a+xOKc6HFAxB2zrp3ozAXaiBuxVM8VmCkWmV7tt83Uql6i6xwyaswCpV9+czU5OfjrMrH/B1bdsSZK7mSW/a/tCmvKoJEihYjViKPPrymKVDkP/9rMMMscy2w0FLLrLPRDntdcx0zKzM/E6iApCj6L/k/aKA3A28OyVxaC4OlT5aduPMPWfZB0vBkRtncYAGdhSuWblo251rT9eCOCKLgfbYGkqBJ6VQya4KTGIHUg5fhqRSYEjMHRxIHI+lJ3FTztN0pWh7DDDFPptopuN44J/AIkg1SeOpci9hP0RTQEiWOwzxN00ZHU+UpS1GF8BYPED3ABLF1nqLFfAtSIds4tZQrEJCz9TKtZ2TMUVhaxHOLW3iYSt0poEcYgoSx47VDqcyhkgkFPYHdvMSx9V9+t76NLZqDB2m9YYhmtmv4z0l71aDX/hczOwQuxq6k1lUC7nmntG/P3SzzKGQ/fwRUD/cOMQiDIpTgjxvvb/PbwE9slA6ijLITxbkGlp2mXhfU1O5A/yHeabRWIzIdWjWZ2W098S3NJmxIUxD0JS2IQqh7/DLOVFUY9I/071dqJFy4gN9SNyPsAqklJGXPafeM+xbF5qIYc/IABxmlm4BcB+oPORz19CM2ouh2oGtENN2AJFrCVzO4NoD3exWSEKG4sjMDtOVJSgYLV3oSaLYee6OrE59JWtI7Xq6FMNB6pBaDzmSG7x9P/ncoAQC0YO65AV/8VqR5pC7O0KJRSTiXMHeajzvq8fD6TEatdSeEdCyJyOP7HS0HNscjn4EUH7IVv5B9NcHt6Q+Qxr5NgJlEYpBbl7iWFTg2SvstNLpk1wd0EOB/HKOP51oAkKHbk0cxgaUSmEdzvvREXfXnUEqxqGgdx/1pUBn6ySUbiL8bkIlCpOC2HF/Y0x5qpxTL6LmlUPbFOJMjYQDeYJIcYAhtKVqfrFKIngmjOI5ex+WbSUArCGNwhIDiaKPQV12ezadA04CHG85LYmh2giMEohguFCE7Wt2RnpZOP0LAmzjJNJMl1FqQ2wfbUBJb8+gdfiSGSW1gC1tZ0z7QVQddoTSysjSebzolfyohStggBeeLCHODfMyo2BOS8a12hidr3YUhRDVXTAIxE6xwms0DEg1MRFHAGtGZJLE6CtBZl5J2A7ulTP20MjQXu+FGcRhjCoVXtowZitheAigblnOZIRgDCgYKejjBQoQ6hRh2LIarGWB7z+YitKAuqEMAl9QDIgHc9RsYiUzANgMsZGLLoUaxakkVrfDozK210ZbK04Zpi6CEBVosMOAAUVgQiwV2HMjBDuKUgJOIgyXhEMnsUClSaaSxw6TriOmMRV24WSG/Ar1ob8LN9MFafbFoqNrccCNy4kijqIwBJlNwBC8mWVglG+tMZ+v55OMV4EiF2KCIbVSslFoZNpmFw82XWswoC56KD+qUroIzKmnu4GAZeJZ/EABM4QWQRpFqhoVYCQfPdpOhHGaWux4euFiHnu400po1N7CXVMnfKjR2YdFiscWqFquBdNvAa9dy8tETP+713LwcDPxvDd0aw+9neyfgd/Y38CEL5sJiWAnr+33/wZKcQnwKjrXiMABpDuCoaUikGIShCAEFyEEV5JelFcHBp9Lne/e/a7bMEw8KpP6ZZVmVR8S5obAmVZJWOM5y0j8BABQYQTUmQyaZGET1x9HDCUkMG2M2HEOhuX5HjTuBpSpAKwiXOmsqBqDAXzQUIwZ+fOBHvgZhYhPG3/jVyIvJODdBIC0jK5sKnN76qUxsI5RjtApivwcmeAQK9FYKGsEStCQQog76G4ZemqTJTARW1D8yBVIQBVMIhaZu/VH7hSOBRFKRmjQkSbkgQHoirYzhKFXX7LIJoLC5aani0xgWLgRgTglkrOa1WMJwnQ9XzlcfmADshQ4H9Eoeny5SorHrWg9ts0pI7v/3sEewAazruC+GCPCfxrkT9CYA9C9bA5BxSKK3dx0AYI/eyiqmtBuAo0tcNubr80wl4+m4MPj9mKaWP/FJ1tltPdUzO4G/hL9WjpTNslVuIyfI6XJXuVieEwqt4dbmfj8ACCJzSfdn4pMo43KskXWysQVpjD9Swm0F9APAvwOANx2uvcb2C9uAC9+EC894zzqfGaP7KObhrnM7z20BAYBEQH8ngN7K93Z1euVzNPqn7TPHIvMcddV1i62z3n9OmWWT+ZaaaYkLzjlvgWuIhiRQsGa0motgYGRiZhElWqw4dg5OiZIkS5Fmjf+t9QAHokJ6b/3gbjL11kdfObQ3gBh66mu9sv63TudToFCRYmVWuWe1S/ab67DjjjjhvpsRcUuNLS7b7HbUuOui3/0RDlfc0BAev6m11T/+9q+FBAxHhSdSCxAuRKgwkVrQ0Qsia82qpbZaOaONBC7xFKliTNNeBreO2umgk6566a6HnoYYYKBBPEabYKxxJhnvrIny5ciVp8RUpWwmR02EjTbYaZcdCA2/EABoDQBsP9ByQL8FMP8A8J8DNwcAADZ2FbyEhOMULCWqophIiFFGP6/JSbbnnJgUxV1DzLQAhCJIuEbBo3gyaSUJRSNdELHSHtIM3HHGsSNxfewEncfr6cCgMWl7jaaJ00exQtQR9iiG4CUw8gSiJnnwSb2rsAipRElnxCYMs6cSyI+e2Rx6Eqb+CrGEHmOoNAOFpJSyNlAThHTNPoB9HQOrx4j5XkzOg4QOCWmcPjRxTC3U8YPouUU7X7zMvrkiWo7dJsZnQQAE7nn1/t5fZ2REQmo0weiuvJkLlg+wROks5xS8M8WLlToExKRJuN5Zluc9VxmGp3XohSFZg602h0PpfQjgHHLdU9dYGZGUjF8xGPafpCiNBq9V6i06T04YYp4oK14oc3elrCiVEYDc/j/yQSnPOtaJnzHBaahcA0CfACq8S75ZtAk0pTnKNAuuMQWQbFivtnPUxnMLQOu2fEmNb1Zq55IMc5QZtmp8VylR+FBYoylXpX7VBDAmdmItHV2FRwxq3f4zJox4t3KZfpsjy8u/VWbUg7Z1R9MgpbjJ4tm4WADMQk45wDSkURgtyEmw2MKRTWDFZdN/FGaRfZHba7OLYO/uT4iHB4qMcqtH7KVv0bqwOZF/teY+DQ4oHUQYhQ4OVQobTWN1S7DB8PXc+zux6OQ3xO1FdmEqA/vyiK3tuaHSRaW40OY08ZVAPTWMXwK4ZEOxBhC8fTwasGhxKSt7yQlBoT50orx+kNqomG+qIM14TyXVhSID10uEI2CcuFOq54CcQvNzx/pcf8GodNY/S3xmaV+zJZsw79ile9F/U8rhPVC4mQlcMDrboDYS6CNb4AKwxp+REFVS1TI6UMZw4wYWQNPQW5tNTnFPdNgw0FM+dqgHg826J8siVi3unQ4Tlsi9gb7G45mWLnd/Dz+/Rna8RLEe59mqpr7ShoqtVwSIvfmGdV2v8ypqjU7v5j6nrP111pgsiLxNje1WHB8bMjpWJ81dtS2panwTgwnN233Wqw4bDJSZGlBJTSDlHeMYZXZtO9fulWM/e0DN3ZzNFbzf/ds2uXILKgxdkwN9WETZu7ls5rkwwRKwyVuV2FM2ealfGVah3LU0r51tWfM5WFHCJ/WMYYUjhWy+cEo8eyWBMXEzWCVLkybYjj1vrVJdnORXexsrgUDLqbah2oiD857ESGLavtkTLJRfmNWE8eaG290Wm5IsXi5Th7WwlO8c3LSn3eui7WR5H8xDY12LCbCyExV+6x4f3tQwUDGr3htlOfAG6318xkrzmsjbqwYtEVSW8vR9KLehZ7oJ3oka5jWLVn9pWqcrmD2VvGOaJ8en+KiOdUbkPXJQfW5xZb7W2ReDtOJTa0NbNzwtRJPAZ9RtqSax0qGlLk92gv1DX5OUQ++3Y6u0UK3PPyDRc8eIlmkScEZp0wS2w6wcK3+KqnJ34yeNabvF5/RyDR0j78Hw85HmzGVOS0WIg9JAelgO49wNktI7hA0W9kwJuj9CEl2GaBL5qkJXJmgssS6agNVv7ooGiAgxal+3qwTXfTilrCmlVlo8Y0LM2D/ANhfuiSJrNXVsBx0WtPbkVkvNaHlkwgA1cOQtIyyEUg0OHHlzd91QW3rl3W0/s3dwnfYK0gCOWzwPtICHVnNX7eBgRnRcGQSrjiuc1wnwqWUl16vRZ9VhXSeMIS0kfJC728kPk/r2DEdTPI90GKAJmtuRg0pjHaE5S/lmy7HQCY3gBqkbbkpDit7KMPp9LkQQSZ/P5IqDwRCePRz7d360OgaFTjseN5/DO8ma4lCxl51WcpO8TnyduFlmfhfzVmt6ech8Lem8n+gQKKKhgw2EX+p/Desi9GARVgK9kTlOLTkQIarXMbJZtaED06b5bdI4aJ+ETX+AiQ5JdtucQ1XaDzvDFq1sLaJc3txKQ3tQLeyUqyKWVQ3F/q0dFj8YD8k6yddVFa5+Vs+DSG6uC/nN9cenuENqljJ/4cot/n7f+piYeYUpo+FZOlFGxRvV1Wy4VEPGKLJpX7AB3uCtLF2bmWaIBiNF6hB923G/T2mudtIE1fz66TUw3AbrQralwEFhO3ZLLZJGzWzwzwLjDs+z8oZk84gOwoHUAHAgLw8Xh2aFMr66js5SoxktJYBeTrRjX5znBkdmI9M+/1hrcYjYtdZrgbrVTR6c06o3muaCkNZcjrfPsXlipajNLwaufL5EVSKEAHgzo7EMxYJW0/oiJxuNtko0WmU/O44NdUWzIusNkdZfjdfSVo2x8ODHH6LzTHuz2pwOT/OcBEjJ1RUjR8b875NIEBBum3Btt6zEodb1hMdoMhrGGqXU42B0m73kyLuRoa58RxnGiKxmIHwtgNSuvkAquvR0KNJwv34Ye4Y9+pvW35E0tsFF1guujTLU35fpU8DwlAfPnG7H03zW8X0dJnmvJzyY45x8lhD6g2JATER5mx/rEt3mNzq3OkaUwJvIfGu+fq5XfBOHjafvQD6Iowhhb9nQaxT6JDfSb8VkxrmVVnqu5rXI5Rq7RHyMJRiNJnOHt8kmvbggzYjgnTn4dyexcSzO3vQyDoJ9lWIjuIsRKR8fbAAXmzvslvMubbovTamc7K2bRUf2H0yRjLtJqeTuyAje8YQcJJA1dcdtzuVCe0/ErhYNIwu0YOzEteb+SlMKOUQsE9uuZuvuQXWbXpXlCbuvJARXPyAmzFGhI+uOGMBH7DPO0oDUw1M78AN3hJ6EB+qo0YRhI58bBXCIULImyghWVsaysISQB56hqB2HIpXzOzO9ElFsdxuBOX0iPhSxNP9eVhySSIp2EzXkabR7ffQxkeiTD4L0FYCGGiNzMDdIjXhhdzXPzeQ6sHUwDygdUswx+umKiq49o5Qry4EJPchvX32mJ1EZPvLrJ6pcaVumC3pQqXzj2evX4opU7vNu2a+OV+erxvIj2Ubl6A3nRskxkWw9fNAejVwMIE5RHESo5xr1xNKs7ccN8Nw31Mf/9tRAKNDLHD7cL65mmepaohknPeLYncb+ZGAVs3Qmes5yBGv4xbJR7RuWjKIWwQ6lfCtFtHAe0WCoo1DC+SB6JsdnpEmPgB2gSQ6JUi8VFoIBhV3khChf02Yxj9Jveg/TKqTwg3eHPO5sVkWDYvGCSaBuqI7naA9oNB872NgouIQbkErHb88J2dNjS6JpDrTfV7rh8Wrxkr8cB3Zh12KnMmKqHo1pOenhtF46azE9La87ucRv3JR2yyQ7mINlfdnGjnUJet/F1uje+qO6Sw6vYSp6DRsiGgJ5BcxXVo3R5LV+YV1uuzhviXD+ab1ZGNDx2Px4nramacbtqHKocyv30ezB28GrkjXe0+xAkBwaTMzLdYmFO9O/g2GIeHASVNrTz4UxrI8TxKjjVJqrt1XrdI7DM+3De+CQ1fW5/V3TXHdfxorEwMPTbxrsRaYpnlKHMxxZHs+JcfMb7XGpPBWmLfuCQ/fSzev2PRauCz6All/B4ECEvtFo9BrGEdZpnIOI+Lggn5BbqOwSbji/1hqBa34n9fJ9AD3U8ibuamGGd3W1LuRlNohznLkuiPeD1j3CDDp5TVNGA+FhdXoaYEyMT0qTx2Rnwps8ItB9fHJ3ya5FegClfP0rRll9d7CZ333j/hg3G2MtavM1fBUNBrN1TeFWF0oc7iwCoQvKmeSphBReHtyw0yiw90n6xpgCYykmoNKGhmh0IVZY8KBkO0W1pqYIi9MiTVG94J2jh+cvOS0RseQK5gUD8EAqP2Car9IjVhtV3swPVNzTB3vwYCkiWBU7r73N42BAn6N1G9fl9NX/D5A+J3k9R6NUW/NybqTrVszw5zfOD8No1otYvX2SgYNX10Dc5YoPuJLUj66dTtcOl/PEbYZPhri3+O+/E9+N9jbeaQrOQ5gJ17x0CJ2mDoYYoNBlTNWNHuzxa/DufjrwvrG0og+YYbFCb0TBD/3o7itzN7dzXGodz7fJ36xsDOkyOSA44N8rHPv/+TMaDFpJn434N85M/mcq+CKoighywdjklVzS98Hg6QGBGV+kSaa1K0lyR5TkDcDN/YJTpR/zfbzSkk5evF7RudFYKJqmIhEiREir07FEBNaz4EKz780BN3qK9rOb+4Yo18z758nckgS6O+PgLHZk+vXer7Ibu8Bqtrbs1f33mx52HeyZJx3oiG80XzdbA5S/+EJ7LxEfs2dPz4YgasehwRRaLKLTkYgQJXkPRbAh1jqXmSrdzvgmfE+2TZ/fm4jty+dj+/fG80iR26n/651j+bOdEeV3eZL74QUisIbRr3SJF5TonWxjfiIGed3xacuXYI/XC9XthYAYkDUY3t1EgTNORkgE8Q4UDSgUQcOHEAugPJ6F9vUZQJ4nLdQr/+9V+Gga4vsQxCDNX7595yNXpM/fWxAnp9w+C6jNIn25U5osqQGrGHXpBO4Njbcu6y5fcvJodrHwnpWaFXWDVGFqXf3ZWuNz7F9evtryjG5haToHP7XvxbWza2iFgNlXpuKcHyK6tHL5JkixS+1juunuwlqD37/W0F3QTcdILUW0GNg3Fc2kp6NKi5lATmemoAkIT5rZxXz3fdmp+QNmG6RFxx3G6yeXiopZkVzfldYrTfTZzxY9go2+gYXmYIhS3ckt6EEPezY23ZHhjG0wPuHt1zsz7YsdGePuZYleMMIsKa0mbTFrulMGy3smJeRCspf8PuzQ4HIRqdaIXLhE867YgYBdntXkc36bU/P4w/kpZT8U9F0M0B0hoFnoNa0ucWwxFi50s7T15wN0wqTZfB7rLV8ymhbqbcOF/jadavUfN2shZ0GQ1pb4N42kdGn0cVTD91/WMycn5eqIRT/1+dFkb0vT1gOJuVvrCIf22UuKpp936SFW0qlsqFumJPWOTCzwU74XsKA+WBxnqDNVkAfAqI3jWqshyn9HMa99SvZBmGw/KcB1ejQyoPFY5su/OEPD70TyWoQ/ifVR3l8qTSAuvTUX4F4SeY0aNFzQAiVQFg3ZD7G/30EKN/pcEsABSjBXY9di74rlXpJc4dV48jaIBrAy4wzLwIDVZu+3Wgfsu0NpOcYww3vXHZQcrRC3NtQsLPGmEMX1A8sH30YZugBYujxCLw7e+5NDTddQ8ebGB+Yg5aX0KpqwIupSLr3yD5JnFxTvfanp6OG0+1+dmF36IgGsw9BBcP53nfHP7Nn3QZXpsxM+KpxDNn1+AqWB4kdjbiaYvvPqP7WQ4K/DjDUZ713/DbF7BGKSKJ08X+L1TRRyx+VW72oOvA13AQurXu049t3N9FKYE4W3c6E96a01yYdvi77+DBRXw9mRC/7LPGJlkA+7R7221cGQfcWoy6UKcrfxAvAfByD6cNacteqHCae+pClmLGtGBgmCSP7jBHR1td0X94u361bD+Yl2gYs99tkoA1uc864PfBTicapqevhqXBfe2bPli+P1HjMZFau4BGuVMGl26IaKDlJ4z69XR9GxxXHs50WbLbi8A18RTeErh51WZZT1hTTFgpx8Wj7SPiqT6sk2OKH85r4C64UsDKzqnBGXfUUoaF896nUJnkSv+mHvRIiKMBhUQOnzzGvH0q9+asmY9apqZqwWc8aGDOMEMlgeQqBSh0UaQD22I7sefTarkFgLNnOpA0eH+qwd6g/odX+VyWw0B1a1m/yLPc5VQZ9z1ZJO8LXb4Yorbd1/WLme7UEB7Br12FcFg/ZVo26XIsA9JtiBKdazloxFP0QQwOJpQUoEjgw93VsQ3pt0rCKNoh6nJyXVGcOwwfMadcXQ+URvH/535+00eY4Eg5/ZL+wfUy1pGJUknZOjnbjEmHEYhuwY0p+xm4xZM1K02w1DWcc8bsinMtmiZWNyuCBZ/tnhHYjz/gZOqLusgwBzQVdtPFQXeYDvHlRxcwtsR2I1jR9SKidvOb2pk7D0/kiKuOXx3pmDw5FAHRbmXVlZ+alSxe+4HSudixfa/PJYY6Eemo0ktJr68h52YcGKvsH9D7x9FV7L9S7wdKwKBuXmBW7fbMtZ0BIRzFlPcb1mY8ntpsX2YgAus0cM0qxRLPWt11KxvfcjqrgC9arE3m8J7feJRcQVJAes84r6u/mgbUnqdz/g0C2uJoV7kk9/KWCVLowW5ORS7lvZ2j/6qCOkew+f52I2ryqjx4+q25//1yT9tDo/my+SlZlz9lr8OddjuCHGldrDBnEGEwnJXBXmdJ7Xq+JKtBPmPRepewmW94ROGVEY9K48+r8iEhAznTxgVGdE9OK0EXnSCFdxvF8a4KTC1Ny8Zq277BNLiFcCHMD5HehYtchD+hZ78FWBoBAN+khLymyyAIGWcla7LW81lgicCQdtdia8MPAHdkHyHqG3pIuhuevM/bixgPysZe4Rwr4s4LcvH3W5BE8gV/6w1+RwejMzCR+Jv8/G9EW8Qz+QweIxZKCjA+nX4c6tn9YafUNfl8U+c1WMdwvXA8da6Z3RRuDsXagAVvT0Zx9Q6pk/qsCKSAz81zXtftFfEDNTw/nMbh6QWRZTY4Kn5/OFXffSAj/76bBAdiYoRFp7c2MrwXBTZt5pD1sm2GIVcEfwtp20adf2iZUXI3wDWlCAVZI5VLf66mMwGYAxzCvliGo+7viL19Yj4IKz07ZosMPW/Pqf0/rIzp+mP/O7JxxH0LzTZ8zGtGsO3EIT5x6VTrXW+L9lge9UMLP5ZbfCvOYlGnOieBpEnRSBxN+/eBNf0jbtwEE6BaozVxV4qWOLQ7+6ikfdG+BKwuxCyI+r2b+g2NMtkX7R7cfVDKWi/gCEkD1c1Ky8sLXhvgeOPvh4qJZ6E8Gr7NTbEFPc2vDsW2W8mljtFp6cCZWosryRHK3Q9DvR88m29NkVnXuriQIOiSsaDp+v21M4flUcLzYevBAC9r+MVqNvoDRCgVFjcygNXK7CxYFjb/lo07VvZQtl0mzn/Otv+dJ11dtrwHk1UA6tdCwes3k0nU2LSxsx7NMSPZetsmaMukJHoPXdCR9H6ozoxGmr2WYyJZLOZFAdgw2k9BCz3X693OLyGTsy3q+eeJJse92yaIg671/f8egn4PAMxQK2Xw0LvfdJ9B7c+QdSTPSvlCrZ4Lh/2hqm7tbaXDbzAlhudSEo7AeuWmqpzy1XKV1y1VBrpKRLqVS5lZqeN9q9BsTmNUoQMWRNIIGGI0XkysEScgVZo7HhYrA0aAlSowo8FVfuy+XFmorhOEEon8u5xsF5YIw5cionoMIFh21XR0sHiuumDtJfw+nn5hSVFWL+V9RU3FYyIFJvSGw2pNUyigX8KucDmjaOO3Bvn06XsQhbfOaUdPbnuSDWmjIkk52TYV1aNI3hlkhWrKEZPiwDGryPcPb7/Ixlz7apHkTh/YWvfmssF6S4khbvD3qJkQUWXBXnfiCUUkiJjQJl8LXtE8qdI6jFbdF2J7mu27yXl43z97C9g1SN2WwEo+DDkObPelpEHXkd0m3DNIkujVNKNF9TIezf1qxppdCImhf8Nwnarv4P/VOMM/3wQcw64DIJu3BnjxDwIDUjN3naMmojezm6PDDcFx+Ol8O5Quw18GQm4C8a5h/RSz6PcFW6gBTF2TGVxVQqOnGZIaKGYyadOBUwWhwpFM4Y1MpYAgHXq/BteO+aKbcGIUWgMKKyNSR6Nh9uugYs7CCqHCz0wqgp3YfYbHnElEZhgWfJP543fd+OS41IMqszGjM6JGmUvvg9tHyEgvCIZTK3WEHARCLmcidiR8TB3iQBqz1BqRqWJ/DARE8S1J/U4IxL0EWBgb6I+QLx5xePxrdV5SfrZ+F2GEjsUZXVNHgaDMdNWksQNZ/HAKcNGmU0nvEEBI+zOmE1ixxXPm4m1bBJHT+kVHkwo8pXEAkasZwTWC2AFfRVYw0/UY4tLq1YqLSjZyuaR6j5wJb4Am+yT3GWVXuc3YgNU83gbblc8JKsfUjQ0L5j3pUFcXIGcoAV0C7w+b5qRiJWxBErkn8ZuXeyWAoWfemlAxdpvLdw/rhqXbvasEXY8sC1hfyKcpB8b7lbyP1XAe4WscLzxUNbd3X21NY3PEFzwXuLtt5Rf5iKPSWQIjsIvr/VrYbw/OC7CL8vM/BTHHZ55YaJMpDOt7RtatpZOdw2n15Dh+tLjS8AfuXjPRzeub9QBzVvdrYJhQEUH2mkv0y498BGwnfvijtoFbU3Sdq2X/d0S3tLyzSL91Nz82OgBPgsau+ygT+tOAg51HCfXdGfynGqERTva8A2qPL7Pa2N3Ls/nZdAK99y6Ck2565DLW3UxLJRY+2t9/xuvrPZ0tpSWb6t0rfV0rSP09HWuq61dby1TQuiErxMpJfcprdDFTUPVbNFNztYaj1l+dW8n5pbXuQ0q1uaD4MnoFCi390nuhjf9yDYvxyyI3SaF10Xx0rlJiw63a3kU6p1K2dwkvyxWxyr1c8TOkFOXWKKqj3bivIEX2HGbbpAYuXDjqpD1sE+n1ZtncRJrmmgcniVDOuwvPWSCuywnn9aY7Uv01DN6xDTt1qlQ9e7hUtbhMKWpcJEBSFb9eUYXAJH5nq0kvshDm1FrWW38o7B29Blz859WyPPA1+bjwap+Pxkhtd1IKIw9fzlyk7V2k5MnmuVXsmttUNzrH3xttYH6JqjOKK2Q+emv175PqQ38T+9m6S7yfU8q8D+BxhTReHCvjTnWkAM91JY2Qkb5AGPQqWJqA76nlw+w/e9OYBipi4d2ktIeOROv1BFcW+agChA3eslEXUGbcIGARTc4nhT11BZ66XXzTFLFNyZIT5MLW+ryBmodW2VrEXDRMZqRD/2qyML72XgQpGELfNoz70gvo7BkBzxWp6ehAVacnpetXkN6xJGdgiJyhpJh7aCMIgDMcpRT8qiaLvL7GaNU+Zn4uilrga3YoM+iKsHHqj9Gu4ngrpFHoWrvlFQPsPcpxljqOLsvdmmjbremsHra9+uSsGD+oVupbsOb7FxZYU6sqxRbdx0nWOxkkkius4vnw/K0WCJR5uI75XXT314Bs+9DTnBxbyRmNG5ww5BgWPUJhnZsl2WW3N5+3UrdiU0LiqxIC9fJhufNl+WTJqu0LcSkkxX4zFAe5RWRLVcPj5TM1NFRtP5bbfkc/YbNNUIiLnpTBLTsrspgCMZx2nFakMvJucoijwaUMaKeL7QQuej6KO23JFlQItUujYzO/SYuE07fbvIRNG8Mncpo5d3l5lK0jIjmdu49Y9bX6o26YlZc7PfHf90vMdmHlwZQTyHDNX1Gl5k1j7cP4/5MNEp40QJzTM3GLiv0JrfBR4uAff0qBBMW0KU4Vmq2OMqcLMdTDevaPiCmbY4wYyVL1gZNnVRsj4HLpaAueanq4LcCplXpRKikymU6Yac4eu+EIo+1/N5+s9Fwi90QP2NrgCKGpTDLDKWLaRW6kbPamN3EZmKRIQQydUebES0+XGqdqhbgMSm4uH9hb7wAaqOIV2C4KPUvmIEL1APfA34K5lmixV36G80KLsbUo1CnurCyBRF7kcFS+9EsYX/zQff8B/bfdPkyzspMI4qjpnsXrrAo7/1qdfnS0TM3AaS2UTvR8eLVuLejuwLlHdbwnUWXZFVmoxhnaLLjjCbNfiZ2QJJLgiK28qOukylyxZyeuJP3C/pIbQ6TF2uhXgacKZWFbvgz3Gvwh5gaGdtICHZdAPwPaCzIujae1fMdOF92d4QwWHvOX2LKDJlj2i6NjfohqsghFuuG9hKraXN0ohV0EOkGaLLLzOMvuhXE8vU5dbocsZoDMlMITNy+TWi0JKIL5DU+0/pd0f0Q4m6CXWp8MHQI+V9nhncwSDKMcoQ/chzV79bKc+/vvg5/SFwO7907PD5u/dUyvev9D2jX0ZZdAeSRi/vf6q83WOzJxiYWhjKH9p6DmKUdtw35f4SxqtbH7ojScWHFrnW+D7lYm1Nk+HmayrwdPRCvfYm8MsljxofEc2MuDX32w/MM+iluvzrDZwTceltup9uht0Gl48d+QnHW05UsjzXa/nn2bNs83T9EHZou8nt48sFOPs17893CbXb2sNLWTGNjpU4AMOTrLhWy45PXquVRqxOVQTWSGNWhyr8yB548oJWYAPZXcDhzcKO93+8B+O5R8xKqN5cmoykFCo1rhYFYK2ohGezRtQVjG6p8jnAOlUpj+PqbcS/nlICNWQ4C7BEcP1Ob9/Ync6ta4I3LnJIVkb7NmHdWKj2wr9ZzKTi75sXK1NDe5xdY4opz8rE/QenH/csWXYqFdmbcQjX2AfitpBEGpG7fPIuvfCrKxVav9YQYmWkjg43qALTfJdtzKoUxnxE/3fROm/RjKi7uzAnOaggSFnXnpbrIHC2LNeWovFl2pZqrgn/5KLksjEiIMNi/IhEo/RFZZg/axYDKS/YJUzrU7tgh9uDm7jtpCFIWb892x2I2yqyMSrebr9Iq2PWsJ2MXrwrNSIh3QA5A2/ZUIK01fbwvmYEF8qGqpBiLGXqXS8euwZiLI7V9qaPLhj20UJP92qVF6V4vUQdYs38l9BVgSncYOG7ZVktitrffvtB2b7QJ+KGmnNevJUjWevhiBCvUiGNPdyGeAXLt0J4fpCc2GkF99XTUkG4V/tqpKXH9empBxVnv2uDXXpfE8msmmNWlOMY2F+wyVDMGSdCYePmYm6TodOyCznT5nDINFHQIiX4YnU6oV3q9UgwncylOGaSZo+XSaQmVjuzBk3GaKQXRxZxug1Jvs/0w2D4f1vxyUQeGBZ5vTID+4dc8sd4T+3QvlfAXB+aI7+Uzc7zFA+LOZxf5KC8Qm1vf8xIAdBoUzl1NKP+RHdF4fip5lcamnY3d1S1v1b/tWPIYi8RhL2k5Q5naUGg8Toa12iTmFmbUA0UTWh0CTOmS+pigHclpDhx8GaovSWjLXQr0VIEoh/z1KUTtn3XeOg79DC+5CSU6RrdPemTX/1sidv6D5gVaVZsJTPnUzslV6vFUvXVEunVHIlEc7VXZpNLbbKvMbBsb6/ks3+LoeXTV9IQsgMN9l0b2gJZnPNpOM7uvZ4uWbYd59RTOTw3JGXpnvqqhbX+G0DKVCtgEl1ULRPf3ergkN9PF64EEHWZRt3E2621fPSHaj+xSL2HhlzwdT2zqvh/wZdsCEjNo4ouILd7Ice1bRHwfpVWBZhjfZiZTAtFNVMLg6gWMhhqmWhK0R3EpoKtxyuWzS1q5mrpOwq8eVy3C/FReRMIHKeZKEI+eYiuoml2CPoMFjX6q8Blv0cE3VuoQk8K5yeMpdNHIIks3xhLCSXlfE8qv3x+jw9QYphS4zLHNf3ztrEmMJ04G012UsPX5+tqukXbV2hKbUkRTI6c+DxDflMhxosCIc/zgJhHFUtdjylvWCkpuL42dWDfpOluaqlZ1hNBtNsLfBGRqUJmISv9Z4FEekvgjWtsbGr8Qe52I7i9JfgRXgOQvV7bJNat+OttY/QwykuNwH4jC1b5ZUvZp7+uq2Fkurs4mgOhdrW/d9jgTQ67pgKDr8hm/k7o9o7s506y2CeeY3PuO8FmnbzvbtYPLa3/W/rZFJZ7GgIM367XwPYjgMpr/EMg4XoDm5Gul1gHs7/CISab3zugk04MaA0IVEUvrm3upWDR8DcKhltQMFyNgiETI/gne62kTd6c2dbk5WHDrx7ZJIsqcKYvSuJRlIaioBtFwTsoCv6UogTAdcgJLcgJzyInPIKc8KGUoi90wfSaRuwAoo+oqbqR2ucRpg4/cj3BTJj9KeZx4GfjmmAX5TmWYClTMNymzwQlxWmDR9V+/iOcJPZfmB6Hl+AGjY0o4tRt1vcHu4bFan2yz+AbRjNb8o1STjdGGqNOxX4SITVpyCPXI8yhiT3BAiYe3zIV+Khk5iRCPmjT+3Slep+uBvng5DGLQfEXA8EA9nbrnXoAsXwxe7+uItAIfo368Ug3QmBq+wjobfQx+gR9ij5Dn6MvwJfgPekrUvwaqSK+Vd7D7+D3zA8e2vh2IzD9tenxVD6JC4512xt8lj5HfT9Pfxp+os4HtAVdwYzKnKq+Qszxexo3rGwLcrd2VdQQN1mXx1PcwC1u4sPbzBNELv2LaLDdUtP2obQxK8azHoO4W3iD3T49fWeU2efR3f7/yLFYZmDQXvc9K9lagUUAMeLefxasAjCHfVgAZB6IdYs50Xu13bqLF9b24I9ZD2sDbi14/z8gy1ixltjgvOUB5LoAgBXYzalJgsaMrR1tXYdRRlGH9RQdsE+6xmRg8yIeo8oxRuMQBSoPuMOMYMLds4xGCJ+H2SMi5abus/wCVY5tNA0Xm0y9xGM0JtAOq1pgK0BdKAf7DKGv0Mfoy9F/ZGlalNvlwnlCchgtRL9lW6Ar4KN+oSdgIxXpIJyF27gO2O/NAlh1VXeNOyPd9/3SIKA/VCk39Y4EPYiuHeMBHJpWkm3QeJELPEYL0W9ggZKa9zGHzv8bI7DHe/4Ybhfe2E9ioO9JM323bubsSkQviMw+n3QNJUe8tOtrzy5v2Ea67A2xVZTs4u8y1jjnu53NC3kEbiE/ZjsiulOj20Q68U6YEimtxkuuC3vL8YZLo2sFEadQxuvG9lE0et6+lk+7MQHoN0PYlsaXb+vaN3tr1y42dVmkfSbV5xi3BbV1u11M9wD0lOzLXnYCR90t4wt+riuoKA19yuwD2pLAJwQ7Z3y+cIni8kg618nUSAT2O6VK/3WBIa1hT2ew7EoFSraMIj+TWE0+94raHAJwET9+Z7plXEjq3xDH3QDg5IGO+5L8L2+J/+iwzxPMxgEiBgAI/iyZoHAmMP0/eE5k9y6iNe1k6w7Wz4ucrqTpxyZ3BeUJv2Ryp3XFTPYdyL7JIwR4RkjzN7azXi2CIME0pTXodZc7ISjd+rL4FHxGEy3ARHUAx1V/LZvijl8wWV2m1fSCf+swc0W06Oqa5m6SKzytRnhQVagM6MchRgkJMXYE8YhB9umKooTpGRqNkK4fx4OW+u+4CrcGYrgTZ5vmG9TUjtfniqYZUWT6Ug0eE3hkiUG5nBpgjF14DXbo+DQRbfpV13zMplIJCuc+VLJxGgazxFwWI3ZLnj65X500xB03oZ0ML4aSP6GvQXKbuPMrUqvmaQh3UGZrRUZNiYo9tXTRU7xGldSypY45bArLULMztAb65imdIOaRDYpIUF5BsIo7KQ6/UzSwtI2SedS1k7QoIXPSc0GTF4uzWhxLxvwNxF7h9r12LLYXId9FD5srO/S32bKeWzZPJqX/AM3Qh1pufSt76jiQvYEl1mM0eM7TMkwAA3t9SDm76ZaXKLZ565vpO0ixvfQyCI2j5BOhV/k2PiV3sRt4KqFl/mDuDnUz6m7Vv78RPb3I1jPMXVCqVYif+ETFHnW3rchMb51e1uuVpzL0lgGTIAUMaRUFcKADsIEE0QIZmKfyDUlFZYco2a6/43QDCaXskcMGOK2s5KFzqPyi7sjfJ9S8NVojj8oX1MjuyfEEQICPcWimAWgjLBwkJq0OJjidHZz2iY3OZzsEkdnrENlynSNYYl5yhDKXYg8j1bqTCAhsnC7y5KtQKJtXlmIyhUu8NLLBBZiyuQOUyDbJdEUmyDWZrL9CeaaZYhIH7US0uJXmebTIijZBcrF80286Jyev7Ey1xEQOqsmTw7nKtdAUZezyTeDlky3XBGUZ43LKph7QHK7xqeAQevtocWRlEtJlA01RZMpRKTVFXerpxVxFxb68nF7jsq7GbdU20BueIVJOwsfFq4TPBIUSOLi4JMrQVz99dZMhaPC4WTsYygEnZqs4mrwYKdxeuPlYKTLJqDS/V4o4hCo+DvNQb/QI+vHorefgMTPMm4Y5u075P6JIXhH/e1/ynwEA) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.4}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1;margin-bottom:1.25rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:calc(4px + 2ex);margin-bottom:1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{text-fill-color:transparent;-webkit-text-fill-color:transparent;background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1)}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-weight:700;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,"Quicksand","Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--monster-color-primary-1:var(--monster-color-gray-6);--monster-color-primary-2:var(--monster-color-gray-6);--monster-color-primary-3:var(--monster-color-gray-1);--monster-color-primary-4:var(--monster-color-gray-1);--monster-bg-color-primary-1:var(--monster-color-gray-1);--monster-bg-color-primary-2:var(--monster-color-gray-2);--monster-bg-color-primary-3:var(--monster-color-gray-3);--monster-bg-color-primary-4:var(--monster-color-gray-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}[data-monster-role=control]{align-content:stretch;border:0;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;justify-content:flex-start;margin:0;min-height:100vh;padding:0}[data-monster-role=header]{height:64px;margin:0 0 0 60px}[data-monster-role=content],[data-monster-role=footer],[data-monster-role=header]{align-items:center;display:flex;justify-content:space-between} 
-}`,
-          0
-        );
+.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-0{border-radius:0;border-style:none;border-width:0;border-shadow:none}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}.monster-form{accent-color:var(--monster-color-secondary-2);align-content:flex-start;align-items:flex-start;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;position:relative}.monster-form label{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:grid}.monster-form label:has(input[type=radio]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=radio]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=radio])~label:has(input[type=radio]){margin-top:.2rem}.monster-form label:has(input[type=checkbox]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=checkbox]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=checkbox])~label:has(input[type=checkbox]){margin-top:.2rem}.monster-form label~fieldset,.monster-form label~label{margin-top:1rem}.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-1);box-sizing:border-box;color:var(--monster-color-primary-1);font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem}.monster-form button{background-color:var(--monster-bg-color-tertiary-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-1);border-shadow:var(--monster-box-shadow-1);border-color:var(--monster-bg-color-primary-3)}.monster-form option:checked,.monster-form option:focus,.monster-form option:hover{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-form input,.monster-form select,.monster-form textarea{border:0;border-bottom-radius:var(--monster-border-radius);border-bottom-shadow:var(--monster-box-shadow-1);border-bottom:thin var(--monster-border-style) var(--monster-bg-color-primary-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:thin;border-shadow:var(--monster-box-shadow-1);border-color:var(--monster-bg-color-primary-2)}.monster-form button,.monster-form input:not([type=radio]):not([type=checkbox]),.monster-form label,.monster-form select,.monster-form textarea{width:100%}.monster-form label input:not([type=radio]):not([type=checkbox]),.monster-form label select,.monster-form label textarea,.monster-form label+input:not([type=radio]):not([type=checkbox]),.monster-form label+select,.monster-form label+textarea{margin-top:.2rem;width:100%}.monster-form fieldset{background-color:var(--monster-bg-color-primary-1);border:2px solid var(--monster-bg-color-primary-3);box-sizing:border-box;color:var(--monster-color-primary-1);margin:0;outline:none;padding:2.5rem 2rem 2rem;position:relative;width:100%}.monster-form fieldset legend{font-size:.8rem;max-width:95%;overflow:hidden;padding:.1rem 2rem .2rem .5rem;position:absolute;right:0;text-align:right;text-overflow:ellipsis;text-transform:uppercase;top:0;white-space:nowrap}.monster-form fieldset~fieldset{margin-top:1rem}.monster-form button{margin:.2rem 0}.monster-form button:first-of-type{margin-top:1rem}.monster-form button:last-of-type{margin-bottom:1rem}.monster-form input:focus-visible{outline:none}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px}@media (prefers-color-scheme:light){.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{background-color:var(--monster-bg-color-primary-2);border-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-2)}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px}}.monster-form button:hover,.monster-form input:hover:not([type=radio]):not([type=checkbox]):not([type=range]),.monster-form select:hover,.monster-form textarea:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAADI0ABAAAAAAdXAAADHTAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGlwbnFYchzAGYD9TVEFUHACFABEICoGqIIGGVguEKAABNgIkA4hMBCAFhUIHIAwHG2pgRQdi2DgAaPAZFkWwcQAFm+8TRdkmnUj2/ylBmzGhdehbZSF0R7uo7hkZCZGT6hnpobZTWxy6cODh0Eg/9o0FR+HA8s3J1b3tw59XozgcCNwjZmttwCVxX4hLopEkTaRXt0ZIY2It4jf92XsCvMRLUwj2Qo0IkhcxKkYq5iQtcfnimrpZ0jqHtGngJbl/tDqziiqdqwAzoQ0TLx86MzpX5tI5T/zv96975r4AoosRBDJfBbmkWgsItoqNbG2XJ9CkeobHbf3zBBmoGA1I5agxGO1GTaoNEFTM67Iuon9FXvzf+iuiwQEK/W/ahmibz+VdEbVVR4YN+Pd/jczCTO7LnwWgIqFl5QAl21YB2p5KJFlL6Jf7ZeBzfu4cFJ3q+AOC8QV66zobWwYhWwD/V5smvEXozEmETWvtKG2TPG3hWcpQm9nQOvR8JFIVgZBd2mbFc+I1fYXvwNQkZivqyP0e9386y1ba9d3zBqGLqwAX3XpzbTH6+tbXzGgkA2uJfQyelfWeJSvgC0JFUF1axNdTU2HTpSj7lJl/nemq7+9vSMk/6JadGssqrgGeetnaNVPL4z+d7qx/sgxnF2T5egHSUWyX7ADDVMKxoxz0BchuXxi2AsCatTPyvgOONTObrOSccGuCQlzhEbKB/vrtz1irH8hsZna79nInhy0yRELCJyLgWf86/3AgTDAAALpjNEg3JNNQZLhsZLoypFw1pk4dcthh5KijyAknEMIBQp+uJ/ilkhipuCPHeg+G9lpFoQ/a+xOKc6HFAxB2zrp3ozAXaiBuxVM8VmCkWmV7tt83Uql6i6xwyaswCpV9+czU5OfjrMrH/B1bdsSZK7mSW/a/tCmvKoJEihYjViKPPrymKVDkP/9rMMMscy2w0FLLrLPRDntdcx0zKzM/E6iApCj6L/k/aKA3A28OyVxaC4OlT5aduPMPWfZB0vBkRtncYAGdhSuWblo251rT9eCOCKLgfbYGkqBJ6VQya4KTGIHUg5fhqRSYEjMHRxIHI+lJ3FTztN0pWh7DDDFPptopuN44J/AIkg1SeOpci9hP0RTQEiWOwzxN00ZHU+UpS1GF8BYPED3ABLF1nqLFfAtSIds4tZQrEJCz9TKtZ2TMUVhaxHOLW3iYSt0poEcYgoSx47VDqcyhkgkFPYHdvMSx9V9+t76NLZqDB2m9YYhmtmv4z0l71aDX/hczOwQuxq6k1lUC7nmntG/P3SzzKGQ/fwRUD/cOMQiDIpTgjxvvb/PbwE9slA6ijLITxbkGlp2mXhfU1O5A/yHeabRWIzIdWjWZ2W098S3NJmxIUxD0JS2IQqh7/DLOVFUY9I/071dqJFy4gN9SNyPsAqklJGXPafeM+xbF5qIYc/IABxmlm4BcB+oPORz19CM2ouh2oGtENN2AJFrCVzO4NoD3exWSEKG4sjMDtOVJSgYLV3oSaLYee6OrE59JWtI7Xq6FMNB6pBaDzmSG7x9P/ncoAQC0YO65AV/8VqR5pC7O0KJRSTiXMHeajzvq8fD6TEatdSeEdCyJyOP7HS0HNscjn4EUH7IVv5B9NcHt6Q+Qxr5NgJlEYpBbl7iWFTg2SvstNLpk1wd0EOB/HKOP51oAkKHbk0cxgaUSmEdzvvREXfXnUEqxqGgdx/1pUBn6ySUbiL8bkIlCpOC2HF/Y0x5qpxTL6LmlUPbFOJMjYQDeYJIcYAhtKVqfrFKIngmjOI5ex+WbSUArCGNwhIDiaKPQV12ezadA04CHG85LYmh2giMEohguFCE7Wt2RnpZOP0LAmzjJNJMl1FqQ2wfbUBJb8+gdfiSGSW1gC1tZ0z7QVQddoTSysjSebzolfyohStggBeeLCHODfMyo2BOS8a12hidr3YUhRDVXTAIxE6xwms0DEg1MRFHAGtGZJLE6CtBZl5J2A7ulTP20MjQXu+FGcRhjCoVXtowZitheAigblnOZIRgDCgYKejjBQoQ6hRh2LIarGWB7z+YitKAuqEMAl9QDIgHc9RsYiUzANgMsZGLLoUaxakkVrfDozK210ZbK04Zpi6CEBVosMOAAUVgQiwV2HMjBDuKUgJOIgyXhEMnsUClSaaSxw6TriOmMRV24WSG/Ar1ob8LN9MFafbFoqNrccCNy4kijqIwBJlNwBC8mWVglG+tMZ+v55OMV4EiF2KCIbVSslFoZNpmFw82XWswoC56KD+qUroIzKmnu4GAZeJZ/EABM4QWQRpFqhoVYCQfPdpOhHGaWux4euFiHnu400po1N7CXVMnfKjR2YdFiscWqFquBdNvAa9dy8tETP+713LwcDPxvDd0aw+9neyfgd/Y38CEL5sJiWAnr+33/wZKcQnwKjrXiMABpDuCoaUikGIShCAEFyEEV5JelFcHBp9Lne/e/a7bMEw8KpP6ZZVmVR8S5obAmVZJWOM5y0j8BABQYQTUmQyaZGET1x9HDCUkMG2M2HEOhuX5HjTuBpSpAKwiXOmsqBqDAXzQUIwZ+fOBHvgZhYhPG3/jVyIvJODdBIC0jK5sKnN76qUxsI5RjtApivwcmeAQK9FYKGsEStCQQog76G4ZemqTJTARW1D8yBVIQBVMIhaZu/VH7hSOBRFKRmjQkSbkgQHoirYzhKFXX7LIJoLC5aani0xgWLgRgTglkrOa1WMJwnQ9XzlcfmADshQ4H9Eoeny5SorHrWg9ts0pI7v/3sEewAazruC+GCPCfxrkT9CYA9C9bA5BxSKK3dx0AYI/eyiqmtBuAo0tcNubr80wl4+m4MPj9mKaWP/FJ1tltPdUzO4G/hL9WjpTNslVuIyfI6XJXuVieEwqt4dbmfj8ACCJzSfdn4pMo43KskXWysQVpjD9Swm0F9APAvwOANx2uvcb2C9uAC9+EC894zzqfGaP7KObhrnM7z20BAYBEQH8ngN7K93Z1euVzNPqn7TPHIvMcddV1i62z3n9OmWWT+ZaaaYkLzjlvgWuIhiRQsGa0motgYGRiZhElWqw4dg5OiZIkS5Fmjf+t9QAHokJ6b/3gbjL11kdfObQ3gBh66mu9sv63TudToFCRYmVWuWe1S/ab67DjjjjhvpsRcUuNLS7b7HbUuOui3/0RDlfc0BAev6m11T/+9q+FBAxHhSdSCxAuRKgwkVrQ0Qsia82qpbZaOaONBC7xFKliTNNeBreO2umgk6566a6HnoYYYKBBPEabYKxxJhnvrIny5ciVp8RUpWwmR02EjTbYaZcdCA2/EABoDQBsP9ByQL8FMP8A8J8DNwcAADZ2FbyEhOMULCWqophIiFFGP6/JSbbnnJgUxV1DzLQAhCJIuEbBo3gyaSUJRSNdELHSHtIM3HHGsSNxfewEncfr6cCgMWl7jaaJ00exQtQR9iiG4CUw8gSiJnnwSb2rsAipRElnxCYMs6cSyI+e2Rx6Eqb+CrGEHmOoNAOFpJSyNlAThHTNPoB9HQOrx4j5XkzOg4QOCWmcPjRxTC3U8YPouUU7X7zMvrkiWo7dJsZnQQAE7nn1/t5fZ2REQmo0weiuvJkLlg+wROks5xS8M8WLlToExKRJuN5Zluc9VxmGp3XohSFZg602h0PpfQjgHHLdU9dYGZGUjF8xGPafpCiNBq9V6i06T04YYp4oK14oc3elrCiVEYDc/j/yQSnPOtaJnzHBaahcA0CfACq8S75ZtAk0pTnKNAuuMQWQbFivtnPUxnMLQOu2fEmNb1Zq55IMc5QZtmp8VylR+FBYoylXpX7VBDAmdmItHV2FRwxq3f4zJox4t3KZfpsjy8u/VWbUg7Z1R9MgpbjJ4tm4WADMQk45wDSkURgtyEmw2MKRTWDFZdN/FGaRfZHba7OLYO/uT4iHB4qMcqtH7KVv0bqwOZF/teY+DQ4oHUQYhQ4OVQobTWN1S7DB8PXc+zux6OQ3xO1FdmEqA/vyiK3tuaHSRaW40OY08ZVAPTWMXwK4ZEOxBhC8fTwasGhxKSt7yQlBoT50orx+kNqomG+qIM14TyXVhSID10uEI2CcuFOq54CcQvNzx/pcf8GodNY/S3xmaV+zJZsw79ile9F/U8rhPVC4mQlcMDrboDYS6CNb4AKwxp+REFVS1TI6UMZw4wYWQNPQW5tNTnFPdNgw0FM+dqgHg826J8siVi3unQ4Tlsi9gb7G45mWLnd/Dz+/Rna8RLEe59mqpr7ShoqtVwSIvfmGdV2v8ypqjU7v5j6nrP111pgsiLxNje1WHB8bMjpWJ81dtS2panwTgwnN233Wqw4bDJSZGlBJTSDlHeMYZXZtO9fulWM/e0DN3ZzNFbzf/ds2uXILKgxdkwN9WETZu7ls5rkwwRKwyVuV2FM2ealfGVah3LU0r51tWfM5WFHCJ/WMYYUjhWy+cEo8eyWBMXEzWCVLkybYjj1vrVJdnORXexsrgUDLqbah2oiD857ESGLavtkTLJRfmNWE8eaG290Wm5IsXi5Th7WwlO8c3LSn3eui7WR5H8xDY12LCbCyExV+6x4f3tQwUDGr3htlOfAG6318xkrzmsjbqwYtEVSW8vR9KLehZ7oJ3oka5jWLVn9pWqcrmD2VvGOaJ8en+KiOdUbkPXJQfW5xZb7W2ReDtOJTa0NbNzwtRJPAZ9RtqSax0qGlLk92gv1DX5OUQ++3Y6u0UK3PPyDRc8eIlmkScEZp0wS2w6wcK3+KqnJ34yeNabvF5/RyDR0j78Hw85HmzGVOS0WIg9JAelgO49wNktI7hA0W9kwJuj9CEl2GaBL5qkJXJmgssS6agNVv7ooGiAgxal+3qwTXfTilrCmlVlo8Y0LM2D/ANhfuiSJrNXVsBx0WtPbkVkvNaHlkwgA1cOQtIyyEUg0OHHlzd91QW3rl3W0/s3dwnfYK0gCOWzwPtICHVnNX7eBgRnRcGQSrjiuc1wnwqWUl16vRZ9VhXSeMIS0kfJC728kPk/r2DEdTPI90GKAJmtuRg0pjHaE5S/lmy7HQCY3gBqkbbkpDit7KMPp9LkQQSZ/P5IqDwRCePRz7d360OgaFTjseN5/DO8ma4lCxl51WcpO8TnyduFlmfhfzVmt6ech8Lem8n+gQKKKhgw2EX+p/Desi9GARVgK9kTlOLTkQIarXMbJZtaED06b5bdI4aJ+ETX+AiQ5JdtucQ1XaDzvDFq1sLaJc3txKQ3tQLeyUqyKWVQ3F/q0dFj8YD8k6yddVFa5+Vs+DSG6uC/nN9cenuENqljJ/4cot/n7f+piYeYUpo+FZOlFGxRvV1Wy4VEPGKLJpX7AB3uCtLF2bmWaIBiNF6hB923G/T2mudtIE1fz66TUw3AbrQralwEFhO3ZLLZJGzWzwzwLjDs+z8oZk84gOwoHUAHAgLw8Xh2aFMr66js5SoxktJYBeTrRjX5znBkdmI9M+/1hrcYjYtdZrgbrVTR6c06o3muaCkNZcjrfPsXlipajNLwaufL5EVSKEAHgzo7EMxYJW0/oiJxuNtko0WmU/O44NdUWzIusNkdZfjdfSVo2x8ODHH6LzTHuz2pwOT/OcBEjJ1RUjR8b875NIEBBum3Btt6zEodb1hMdoMhrGGqXU42B0m73kyLuRoa58RxnGiKxmIHwtgNSuvkAquvR0KNJwv34Ye4Y9+pvW35E0tsFF1guujTLU35fpU8DwlAfPnG7H03zW8X0dJnmvJzyY45x8lhD6g2JATER5mx/rEt3mNzq3OkaUwJvIfGu+fq5XfBOHjafvQD6Iowhhb9nQaxT6JDfSb8VkxrmVVnqu5rXI5Rq7RHyMJRiNJnOHt8kmvbggzYjgnTn4dyexcSzO3vQyDoJ9lWIjuIsRKR8fbAAXmzvslvMubbovTamc7K2bRUf2H0yRjLtJqeTuyAje8YQcJJA1dcdtzuVCe0/ErhYNIwu0YOzEteb+SlMKOUQsE9uuZuvuQXWbXpXlCbuvJARXPyAmzFGhI+uOGMBH7DPO0oDUw1M78AN3hJ6EB+qo0YRhI58bBXCIULImyghWVsaysISQB56hqB2HIpXzOzO9ElFsdxuBOX0iPhSxNP9eVhySSIp2EzXkabR7ffQxkeiTD4L0FYCGGiNzMDdIjXhhdzXPzeQ6sHUwDygdUswx+umKiq49o5Qry4EJPchvX32mJ1EZPvLrJ6pcaVumC3pQqXzj2evX4opU7vNu2a+OV+erxvIj2Ubl6A3nRskxkWw9fNAejVwMIE5RHESo5xr1xNKs7ccN8Nw31Mf/9tRAKNDLHD7cL65mmepaohknPeLYncb+ZGAVs3Qmes5yBGv4xbJR7RuWjKIWwQ6lfCtFtHAe0WCoo1DC+SB6JsdnpEmPgB2gSQ6JUi8VFoIBhV3khChf02Yxj9Jveg/TKqTwg3eHPO5sVkWDYvGCSaBuqI7naA9oNB872NgouIQbkErHb88J2dNjS6JpDrTfV7rh8Wrxkr8cB3Zh12KnMmKqHo1pOenhtF46azE9La87ucRv3JR2yyQ7mINlfdnGjnUJet/F1uje+qO6Sw6vYSp6DRsiGgJ5BcxXVo3R5LV+YV1uuzhviXD+ab1ZGNDx2Px4nramacbtqHKocyv30ezB28GrkjXe0+xAkBwaTMzLdYmFO9O/g2GIeHASVNrTz4UxrI8TxKjjVJqrt1XrdI7DM+3De+CQ1fW5/V3TXHdfxorEwMPTbxrsRaYpnlKHMxxZHs+JcfMb7XGpPBWmLfuCQ/fSzev2PRauCz6All/B4ECEvtFo9BrGEdZpnIOI+Lggn5BbqOwSbji/1hqBa34n9fJ9AD3U8ibuamGGd3W1LuRlNohznLkuiPeD1j3CDDp5TVNGA+FhdXoaYEyMT0qTx2Rnwps8ItB9fHJ3ya5FegClfP0rRll9d7CZ333j/hg3G2MtavM1fBUNBrN1TeFWF0oc7iwCoQvKmeSphBReHtyw0yiw90n6xpgCYykmoNKGhmh0IVZY8KBkO0W1pqYIi9MiTVG94J2jh+cvOS0RseQK5gUD8EAqP2Car9IjVhtV3swPVNzTB3vwYCkiWBU7r73N42BAn6N1G9fl9NX/D5A+J3k9R6NUW/NybqTrVszw5zfOD8No1otYvX2SgYNX10Dc5YoPuJLUj66dTtcOl/PEbYZPhri3+O+/E9+N9jbeaQrOQ5gJ17x0CJ2mDoYYoNBlTNWNHuzxa/DufjrwvrG0og+YYbFCb0TBD/3o7itzN7dzXGodz7fJ36xsDOkyOSA44N8rHPv/+TMaDFpJn434N85M/mcq+CKoighywdjklVzS98Hg6QGBGV+kSaa1K0lyR5TkDcDN/YJTpR/zfbzSkk5evF7RudFYKJqmIhEiREir07FEBNaz4EKz780BN3qK9rOb+4Yo18z758nckgS6O+PgLHZk+vXer7Ibu8Bqtrbs1f33mx52HeyZJx3oiG80XzdbA5S/+EJ7LxEfs2dPz4YgasehwRRaLKLTkYgQJXkPRbAh1jqXmSrdzvgmfE+2TZ/fm4jty+dj+/fG80iR26n/651j+bOdEeV3eZL74QUisIbRr3SJF5TonWxjfiIGed3xacuXYI/XC9XthYAYkDUY3t1EgTNORkgE8Q4UDSgUQcOHEAugPJ6F9vUZQJ4nLdQr/+9V+Gga4vsQxCDNX7595yNXpM/fWxAnp9w+C6jNIn25U5osqQGrGHXpBO4Njbcu6y5fcvJodrHwnpWaFXWDVGFqXf3ZWuNz7F9evtryjG5haToHP7XvxbWza2iFgNlXpuKcHyK6tHL5JkixS+1juunuwlqD37/W0F3QTcdILUW0GNg3Fc2kp6NKi5lATmemoAkIT5rZxXz3fdmp+QNmG6RFxx3G6yeXiopZkVzfldYrTfTZzxY9go2+gYXmYIhS3ckt6EEPezY23ZHhjG0wPuHt1zsz7YsdGePuZYleMMIsKa0mbTFrulMGy3smJeRCspf8PuzQ4HIRqdaIXLhE867YgYBdntXkc36bU/P4w/kpZT8U9F0M0B0hoFnoNa0ucWwxFi50s7T15wN0wqTZfB7rLV8ymhbqbcOF/jadavUfN2shZ0GQ1pb4N42kdGn0cVTD91/WMycn5eqIRT/1+dFkb0vT1gOJuVvrCIf22UuKpp936SFW0qlsqFumJPWOTCzwU74XsKA+WBxnqDNVkAfAqI3jWqshyn9HMa99SvZBmGw/KcB1ejQyoPFY5su/OEPD70TyWoQ/ifVR3l8qTSAuvTUX4F4SeY0aNFzQAiVQFg3ZD7G/30EKN/pcEsABSjBXY9di74rlXpJc4dV48jaIBrAy4wzLwIDVZu+3Wgfsu0NpOcYww3vXHZQcrRC3NtQsLPGmEMX1A8sH30YZugBYujxCLw7e+5NDTddQ8ebGB+Yg5aX0KpqwIupSLr3yD5JnFxTvfanp6OG0+1+dmF36IgGsw9BBcP53nfHP7Nn3QZXpsxM+KpxDNn1+AqWB4kdjbiaYvvPqP7WQ4K/DjDUZ713/DbF7BGKSKJ08X+L1TRRyx+VW72oOvA13AQurXu049t3N9FKYE4W3c6E96a01yYdvi77+DBRXw9mRC/7LPGJlkA+7R7221cGQfcWoy6UKcrfxAvAfByD6cNacteqHCae+pClmLGtGBgmCSP7jBHR1td0X94u361bD+Yl2gYs99tkoA1uc864PfBTicapqevhqXBfe2bPli+P1HjMZFau4BGuVMGl26IaKDlJ4z69XR9GxxXHs50WbLbi8A18RTeErh51WZZT1hTTFgpx8Wj7SPiqT6sk2OKH85r4C64UsDKzqnBGXfUUoaF896nUJnkSv+mHvRIiKMBhUQOnzzGvH0q9+asmY9apqZqwWc8aGDOMEMlgeQqBSh0UaQD22I7sefTarkFgLNnOpA0eH+qwd6g/odX+VyWw0B1a1m/yLPc5VQZ9z1ZJO8LXb4Yorbd1/WLme7UEB7Br12FcFg/ZVo26XIsA9JtiBKdazloxFP0QQwOJpQUoEjgw93VsQ3pt0rCKNoh6nJyXVGcOwwfMadcXQ+URvH/535+00eY4Eg5/ZL+wfUy1pGJUknZOjnbjEmHEYhuwY0p+xm4xZM1K02w1DWcc8bsinMtmiZWNyuCBZ/tnhHYjz/gZOqLusgwBzQVdtPFQXeYDvHlRxcwtsR2I1jR9SKidvOb2pk7D0/kiKuOXx3pmDw5FAHRbmXVlZ+alSxe+4HSudixfa/PJYY6Eemo0ktJr68h52YcGKvsH9D7x9FV7L9S7wdKwKBuXmBW7fbMtZ0BIRzFlPcb1mY8ntpsX2YgAus0cM0qxRLPWt11KxvfcjqrgC9arE3m8J7feJRcQVJAes84r6u/mgbUnqdz/g0C2uJoV7kk9/KWCVLowW5ORS7lvZ2j/6qCOkew+f52I2ryqjx4+q25//1yT9tDo/my+SlZlz9lr8OddjuCHGldrDBnEGEwnJXBXmdJ7Xq+JKtBPmPRepewmW94ROGVEY9K48+r8iEhAznTxgVGdE9OK0EXnSCFdxvF8a4KTC1Ny8Zq277BNLiFcCHMD5HehYtchD+hZ78FWBoBAN+khLymyyAIGWcla7LW81lgicCQdtdia8MPAHdkHyHqG3pIuhuevM/bixgPysZe4Rwr4s4LcvH3W5BE8gV/6w1+RwejMzCR+Jv8/G9EW8Qz+QweIxZKCjA+nX4c6tn9YafUNfl8U+c1WMdwvXA8da6Z3RRuDsXagAVvT0Zx9Q6pk/qsCKSAz81zXtftFfEDNTw/nMbh6QWRZTY4Kn5/OFXffSAj/76bBAdiYoRFp7c2MrwXBTZt5pD1sm2GIVcEfwtp20adf2iZUXI3wDWlCAVZI5VLf66mMwGYAxzCvliGo+7viL19Yj4IKz07ZosMPW/Pqf0/rIzp+mP/O7JxxH0LzTZ8zGtGsO3EIT5x6VTrXW+L9lge9UMLP5ZbfCvOYlGnOieBpEnRSBxN+/eBNf0jbtwEE6BaozVxV4qWOLQ7+6ikfdG+BKwuxCyI+r2b+g2NMtkX7R7cfVDKWi/gCEkD1c1Ky8sLXhvgeOPvh4qJZ6E8Gr7NTbEFPc2vDsW2W8mljtFp6cCZWosryRHK3Q9DvR88m29NkVnXuriQIOiSsaDp+v21M4flUcLzYevBAC9r+MVqNvoDRCgVFjcygNXK7CxYFjb/lo07VvZQtl0mzn/Otv+dJ11dtrwHk1UA6tdCwes3k0nU2LSxsx7NMSPZetsmaMukJHoPXdCR9H6ozoxGmr2WYyJZLOZFAdgw2k9BCz3X693OLyGTsy3q+eeJJse92yaIg671/f8egn4PAMxQK2Xw0LvfdJ9B7c+QdSTPSvlCrZ4Lh/2hqm7tbaXDbzAlhudSEo7AeuWmqpzy1XKV1y1VBrpKRLqVS5lZqeN9q9BsTmNUoQMWRNIIGGI0XkysEScgVZo7HhYrA0aAlSowo8FVfuy+XFmorhOEEon8u5xsF5YIw5cionoMIFh21XR0sHiuumDtJfw+nn5hSVFWL+V9RU3FYyIFJvSGw2pNUyigX8KucDmjaOO3Bvn06XsQhbfOaUdPbnuSDWmjIkk52TYV1aNI3hlkhWrKEZPiwDGryPcPb7/Ixlz7apHkTh/YWvfmssF6S4khbvD3qJkQUWXBXnfiCUUkiJjQJl8LXtE8qdI6jFbdF2J7mu27yXl43z97C9g1SN2WwEo+DDkObPelpEHXkd0m3DNIkujVNKNF9TIezf1qxppdCImhf8Nwnarv4P/VOMM/3wQcw64DIJu3BnjxDwIDUjN3naMmojezm6PDDcFx+Ol8O5Quw18GQm4C8a5h/RSz6PcFW6gBTF2TGVxVQqOnGZIaKGYyadOBUwWhwpFM4Y1MpYAgHXq/BteO+aKbcGIUWgMKKyNSR6Nh9uugYs7CCqHCz0wqgp3YfYbHnElEZhgWfJP543fd+OS41IMqszGjM6JGmUvvg9tHyEgvCIZTK3WEHARCLmcidiR8TB3iQBqz1BqRqWJ/DARE8S1J/U4IxL0EWBgb6I+QLx5xePxrdV5SfrZ+F2GEjsUZXVNHgaDMdNWksQNZ/HAKcNGmU0nvEEBI+zOmE1ixxXPm4m1bBJHT+kVHkwo8pXEAkasZwTWC2AFfRVYw0/UY4tLq1YqLSjZyuaR6j5wJb4Am+yT3GWVXuc3YgNU83gbblc8JKsfUjQ0L5j3pUFcXIGcoAV0C7w+b5qRiJWxBErkn8ZuXeyWAoWfemlAxdpvLdw/rhqXbvasEXY8sC1hfyKcpB8b7lbyP1XAe4WscLzxUNbd3X21NY3PEFzwXuLtt5Rf5iKPSWQIjsIvr/VrYbw/OC7CL8vM/BTHHZ55YaJMpDOt7RtatpZOdw2n15Dh+tLjS8AfuXjPRzeub9QBzVvdrYJhQEUH2mkv0y498BGwnfvijtoFbU3Sdq2X/d0S3tLyzSL91Nz82OgBPgsau+ygT+tOAg51HCfXdGfynGqERTva8A2qPL7Pa2N3Ls/nZdAK99y6Ck2565DLW3UxLJRY+2t9/xuvrPZ0tpSWb6t0rfV0rSP09HWuq61dby1TQuiErxMpJfcprdDFTUPVbNFNztYaj1l+dW8n5pbXuQ0q1uaD4MnoFCi390nuhjf9yDYvxyyI3SaF10Xx0rlJiw63a3kU6p1K2dwkvyxWxyr1c8TOkFOXWKKqj3bivIEX2HGbbpAYuXDjqpD1sE+n1ZtncRJrmmgcniVDOuwvPWSCuywnn9aY7Uv01DN6xDTt1qlQ9e7hUtbhMKWpcJEBSFb9eUYXAJH5nq0kvshDm1FrWW38o7B29Blz859WyPPA1+bjwap+Pxkhtd1IKIw9fzlyk7V2k5MnmuVXsmttUNzrH3xttYH6JqjOKK2Q+emv175PqQ38T+9m6S7yfU8q8D+BxhTReHCvjTnWkAM91JY2Qkb5AGPQqWJqA76nlw+w/e9OYBipi4d2ktIeOROv1BFcW+agChA3eslEXUGbcIGARTc4nhT11BZ66XXzTFLFNyZIT5MLW+ryBmodW2VrEXDRMZqRD/2qyML72XgQpGELfNoz70gvo7BkBzxWp6ehAVacnpetXkN6xJGdgiJyhpJh7aCMIgDMcpRT8qiaLvL7GaNU+Zn4uilrga3YoM+iKsHHqj9Gu4ngrpFHoWrvlFQPsPcpxljqOLsvdmmjbremsHra9+uSsGD+oVupbsOb7FxZYU6sqxRbdx0nWOxkkkius4vnw/K0WCJR5uI75XXT314Bs+9DTnBxbyRmNG5ww5BgWPUJhnZsl2WW3N5+3UrdiU0LiqxIC9fJhufNl+WTJqu0LcSkkxX4zFAe5RWRLVcPj5TM1NFRtP5bbfkc/YbNNUIiLnpTBLTsrspgCMZx2nFakMvJucoijwaUMaKeL7QQuej6KO23JFlQItUujYzO/SYuE07fbvIRNG8Mncpo5d3l5lK0jIjmdu49Y9bX6o26YlZc7PfHf90vMdmHlwZQTyHDNX1Gl5k1j7cP4/5MNEp40QJzTM3GLiv0JrfBR4uAff0qBBMW0KU4Vmq2OMqcLMdTDevaPiCmbY4wYyVL1gZNnVRsj4HLpaAueanq4LcCplXpRKikymU6Yac4eu+EIo+1/N5+s9Fwi90QP2NrgCKGpTDLDKWLaRW6kbPamN3EZmKRIQQydUebES0+XGqdqhbgMSm4uH9hb7wAaqOIV2C4KPUvmIEL1APfA34K5lmixV36G80KLsbUo1CnurCyBRF7kcFS+9EsYX/zQff8B/bfdPkyzspMI4qjpnsXrrAo7/1qdfnS0TM3AaS2UTvR8eLVuLejuwLlHdbwnUWXZFVmoxhnaLLjjCbNfiZ2QJJLgiK28qOukylyxZyeuJP3C/pIbQ6TF2uhXgacKZWFbvgz3Gvwh5gaGdtICHZdAPwPaCzIujae1fMdOF92d4QwWHvOX2LKDJlj2i6NjfohqsghFuuG9hKraXN0ohV0EOkGaLLLzOMvuhXE8vU5dbocsZoDMlMITNy+TWi0JKIL5DU+0/pd0f0Q4m6CXWp8MHQI+V9nhncwSDKMcoQ/chzV79bKc+/vvg5/SFwO7907PD5u/dUyvev9D2jX0ZZdAeSRi/vf6q83WOzJxiYWhjKH9p6DmKUdtw35f4SxqtbH7ojScWHFrnW+D7lYm1Nk+HmayrwdPRCvfYm8MsljxofEc2MuDX32w/MM+iluvzrDZwTceltup9uht0Gl48d+QnHW05UsjzXa/nn2bNs83T9EHZou8nt48sFOPs17893CbXb2sNLWTGNjpU4AMOTrLhWy45PXquVRqxOVQTWSGNWhyr8yB548oJWYAPZXcDhzcKO93+8B+O5R8xKqN5cmoykFCo1rhYFYK2ohGezRtQVjG6p8jnAOlUpj+PqbcS/nlICNWQ4C7BEcP1Ob9/Ync6ta4I3LnJIVkb7NmHdWKj2wr9ZzKTi75sXK1NDe5xdY4opz8rE/QenH/csWXYqFdmbcQjX2AfitpBEGpG7fPIuvfCrKxVav9YQYmWkjg43qALTfJdtzKoUxnxE/3fROm/RjKi7uzAnOaggSFnXnpbrIHC2LNeWovFl2pZqrgn/5KLksjEiIMNi/IhEo/RFZZg/axYDKS/YJUzrU7tgh9uDm7jtpCFIWb892x2I2yqyMSrebr9Iq2PWsJ2MXrwrNSIh3QA5A2/ZUIK01fbwvmYEF8qGqpBiLGXqXS8euwZiLI7V9qaPLhj20UJP92qVF6V4vUQdYs38l9BVgSncYOG7ZVktitrffvtB2b7QJ+KGmnNevJUjWevhiBCvUiGNPdyGeAXLt0J4fpCc2GkF99XTUkG4V/tqpKXH9empBxVnv2uDXXpfE8msmmNWlOMY2F+wyVDMGSdCYePmYm6TodOyCznT5nDINFHQIiX4YnU6oV3q9UgwncylOGaSZo+XSaQmVjuzBk3GaKQXRxZxug1Jvs/0w2D4f1vxyUQeGBZ5vTID+4dc8sd4T+3QvlfAXB+aI7+Uzc7zFA+LOZxf5KC8Qm1vf8xIAdBoUzl1NKP+RHdF4fip5lcamnY3d1S1v1b/tWPIYi8RhL2k5Q5naUGg8Toa12iTmFmbUA0UTWh0CTOmS+pigHclpDhx8GaovSWjLXQr0VIEoh/z1KUTtn3XeOg79DC+5CSU6RrdPemTX/1sidv6D5gVaVZsJTPnUzslV6vFUvXVEunVHIlEc7VXZpNLbbKvMbBsb6/ks3+LoeXTV9IQsgMN9l0b2gJZnPNpOM7uvZ4uWbYd59RTOTw3JGXpnvqqhbX+G0DKVCtgEl1ULRPf3ergkN9PF64EEHWZRt3E2621fPSHaj+xSL2HhlzwdT2zqvh/wZdsCEjNo4ouILd7Ice1bRHwfpVWBZhjfZiZTAtFNVMLg6gWMhhqmWhK0R3EpoKtxyuWzS1q5mrpOwq8eVy3C/FReRMIHKeZKEI+eYiuoml2CPoMFjX6q8Blv0cE3VuoQk8K5yeMpdNHIIks3xhLCSXlfE8qv3x+jw9QYphS4zLHNf3ztrEmMJ04G012UsPX5+tqukXbV2hKbUkRTI6c+DxDflMhxosCIc/zgJhHFUtdjylvWCkpuL42dWDfpOluaqlZ1hNBtNsLfBGRqUJmISv9Z4FEekvgjWtsbGr8Qe52I7i9JfgRXgOQvV7bJNat+OttY/QwykuNwH4jC1b5ZUvZp7+uq2Fkurs4mgOhdrW/d9jgTQ67pgKDr8hm/k7o9o7s506y2CeeY3PuO8FmnbzvbtYPLa3/W/rZFJZ7GgIM367XwPYjgMpr/EMg4XoDm5Gul1gHs7/CISab3zugk04MaA0IVEUvrm3upWDR8DcKhltQMFyNgiETI/gne62kTd6c2dbk5WHDrx7ZJIsqcKYvSuJRlIaioBtFwTsoCv6UogTAdcgJLcgJzyInPIKc8KGUoi90wfSaRuwAoo+oqbqR2ucRpg4/cj3BTJj9KeZx4GfjmmAX5TmWYClTMNymzwQlxWmDR9V+/iOcJPZfmB6Hl+AGjY0o4tRt1vcHu4bFan2yz+AbRjNb8o1STjdGGqNOxX4SITVpyCPXI8yhiT3BAiYe3zIV+Khk5iRCPmjT+3Slep+uBvng5DGLQfEXA8EA9nbrnXoAsXwxe7+uItAIfo368Ug3QmBq+wjobfQx+gR9ij5Dn6MvwJfgPekrUvwaqSK+Vd7D7+D3zA8e2vh2IzD9tenxVD6JC4512xt8lj5HfT9Pfxp+os4HtAVdwYzKnKq+Qszxexo3rGwLcrd2VdQQN1mXx1PcwC1u4sPbzBNELv2LaLDdUtP2obQxK8azHoO4W3iD3T49fWeU2efR3f7/yLFYZmDQXvc9K9lagUUAMeLefxasAjCHfVgAZB6IdYs50Xu13bqLF9b24I9ZD2sDbi14/z8gy1ixltjgvOUB5LoAgBXYzalJgsaMrR1tXYdRRlGH9RQdsE+6xmRg8yIeo8oxRuMQBSoPuMOMYMLds4xGCJ+H2SMi5abus/wCVY5tNA0Xm0y9xGM0JtAOq1pgK0BdKAf7DKGv0Mfoy9F/ZGlalNvlwnlCchgtRL9lW6Ar4KN+oSdgIxXpIJyF27gO2O/NAlh1VXeNOyPd9/3SIKA/VCk39Y4EPYiuHeMBHJpWkm3QeJELPEYL0W9ggZKa9zGHzv8bI7DHe/4Ybhfe2E9ioO9JM323bubsSkQviMw+n3QNJUe8tOtrzy5v2Ea67A2xVZTs4u8y1jjnu53NC3kEbiE/ZjsiulOj20Q68U6YEimtxkuuC3vL8YZLo2sFEadQxuvG9lE0et6+lk+7MQHoN0PYlsaXb+vaN3tr1y42dVmkfSbV5xi3BbV1u11M9wD0lOzLXnYCR90t4wt+riuoKA19yuwD2pLAJwQ7Z3y+cIni8kg618nUSAT2O6VK/3WBIa1hT2ew7EoFSraMIj+TWE0+94raHAJwET9+Z7plXEjq3xDH3QDg5IGO+5L8L2+J/+iwzxPMxgEiBgAI/iyZoHAmMP0/eE5k9y6iNe1k6w7Wz4ucrqTpxyZ3BeUJv2Ryp3XFTPYdyL7JIwR4RkjzN7azXi2CIME0pTXodZc7ISjd+rL4FHxGEy3ARHUAx1V/LZvijl8wWV2m1fSCf+swc0W06Oqa5m6SKzytRnhQVagM6MchRgkJMXYE8YhB9umKooTpGRqNkK4fx4OW+u+4CrcGYrgTZ5vmG9TUjtfniqYZUWT6Ug0eE3hkiUG5nBpgjF14DXbo+DQRbfpV13zMplIJCuc+VLJxGgazxFwWI3ZLnj65X500xB03oZ0ML4aSP6GvQXKbuPMrUqvmaQh3UGZrRUZNiYo9tXTRU7xGldSypY45bArLULMztAb65imdIOaRDYpIUF5BsIo7KQ6/UzSwtI2SedS1k7QoIXPSc0GTF4uzWhxLxvwNxF7h9r12LLYXId9FD5srO/S32bKeWzZPJqX/AM3Qh1pufSt76jiQvYEl1mM0eM7TMkwAA3t9SDm76ZaXKLZ565vpO0ixvfQyCI2j5BOhV/k2PiV3sRt4KqFl/mDuDnUz6m7Vv78RPb3I1jPMXVCqVYif+ETFHnW3rchMb51e1uuVpzL0lgGTIAUMaRUFcKADsIEE0QIZmKfyDUlFZYco2a6/43QDCaXskcMGOK2s5KFzqPyi7sjfJ9S8NVojj8oX1MjuyfEEQICPcWimAWgjLBwkJq0OJjidHZz2iY3OZzsEkdnrENlynSNYYl5yhDKXYg8j1bqTCAhsnC7y5KtQKJtXlmIyhUu8NLLBBZiyuQOUyDbJdEUmyDWZrL9CeaaZYhIH7US0uJXmebTIijZBcrF80286Jyev7Ey1xEQOqsmTw7nKtdAUZezyTeDlky3XBGUZ43LKph7QHK7xqeAQevtocWRlEtJlA01RZMpRKTVFXerpxVxFxb68nF7jsq7GbdU20BueIVJOwsfFq4TPBIUSOLi4JMrQVz99dZMhaPC4WTsYygEnZqs4mrwYKdxeuPlYKTLJqDS/V4o4hCo+DvNQb/QI+vHorefgMTPMm4Y5u075P6JIXhH/e1/ynwEA) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.4}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1;margin-bottom:1.25rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:calc(4px + 2ex);margin-bottom:1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-weight:700;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,"Quicksand","Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--monster-color-primary-1:var(--monster-color-gray-6);--monster-color-primary-2:var(--monster-color-gray-6);--monster-color-primary-3:var(--monster-color-gray-1);--monster-color-primary-4:var(--monster-color-gray-1);--monster-bg-color-primary-1:var(--monster-color-gray-1);--monster-bg-color-primary-2:var(--monster-color-gray-2);--monster-bg-color-primary-3:var(--monster-color-gray-3);--monster-bg-color-primary-4:var(--monster-color-gray-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}[data-monster-role=control]{align-content:stretch;border:0;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;justify-content:flex-start;margin:0;min-height:100vh;padding:0}[data-monster-role=header]{height:64px;margin:0 0 0 60px}[data-monster-role=content],[data-monster-role=footer],[data-monster-role=header]{align-items:center;display:flex;justify-content:space-between} 
+}`, 0);
       } catch (e) {
-        addAttributeToken(
-          document.getRootNode().querySelector("html"),
-          ATTRIBUTE_ERRORMESSAGE,
-          e + ""
-        );
+        addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + "");
       }
     }
   });
@@ -30306,7 +32266,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * `script[data-monster-role=translations]` is searched for and the translations are assigned to the element.
          *
          * @param element
-         * @returns {Promise<unknown[]>}
+         * @returns {Promise<Awaited<unknown>[]>}
          */
         static assignTranslationsToElement(element) {
           const d2 = getDocument();
@@ -30315,11 +32275,11 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
           }
           const list = d2.querySelectorAll("script[data-monster-role=translations]");
           if (list === null) {
-            return;
+            return Promise.resolve([]);
           }
           const promises = [];
           list.forEach((translationElement) => {
-            const p = new _Embed(translationElement);
+            const p = new _Embed(translationElement, {});
             promises.push(p.assignToElement(void 0, element));
           });
           return Promise.all(promises);
@@ -31288,26 +33248,18 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_constants2();
       ConfigManagerStyleSheet = new CSSStyleSheet();
       try {
-        ConfigManagerStyleSheet.insertRule(
-          `
+        ConfigManagerStyleSheet.insertRule(`
 @layer configmanager { 
 [data-monster-role=control]{display:none} 
-}`,
-          0
-        );
+}`, 0);
       } catch (e) {
-        addAttributeToken(
-          document.getRootNode().querySelector("html"),
-          ATTRIBUTE_ERRORMESSAGE,
-          e + ""
-        );
+        addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + "");
       }
     }
   });
 
   // source/components/host/config-manager.mjs
   function openDatabase() {
-    ;
     const window2 = getWindow();
     const name = this.getOption("indexDB.name");
     const version3 = this.getOption("indexDB.version");
@@ -31340,7 +33292,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     });
   }
   function getObjectStore(mode) {
-    ;
     const storageName = this.getOption("indexDB.objectStore.name");
     if (!this[indexDBInstanceSymbol]) {
       throw new Error("The database is not open.");
@@ -31349,7 +33300,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     return tx.objectStore(storageName);
   }
   function getBlob(key) {
-    ;
     const store = getObjectStore.call(this, MODE_READONLY);
     const req = store.get(key);
     return new Promise((resolve, reject) => {
@@ -31359,12 +33309,24 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
           resolve(value.blob);
           return;
         }
-        reject();
+        reject(new Error("The value of the key '" + key + "' is not defined."));
+      };
+    });
+  }
+  function deleteBlob(key) {
+    const store = getObjectStore.call(this, MODE_READ_WRITE);
+    const req = store.delete(key);
+    return new Promise((resolve, reject) => {
+      req.onsuccess = function(evt) {
+        resolve();
+      };
+      req.onerror = function(evt) {
+        console.error("deleteBlob:", evt.target.errorCode);
+        reject(evt.target.errorCode);
       };
     });
   }
   function setBlob(key, blob) {
-    ;
     const store = getObjectStore.call(this, MODE_READ_WRITE);
     const KeyPath = this.getOption("indexDB.objectStore.keyPath");
     const obj = {};
@@ -31413,7 +33375,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
           this[initializedPromiseSymbol].push(openDatabase.call(this));
         }
         /**
-         * @returns {Promise<Awaited<unknown>[]>}
+         * @returns {Promise}
          */
         ready() {
           return Promise.all(this[initializedPromiseSymbol]);
@@ -31447,22 +33409,38 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @returns {Promise<unknown>}
          */
         getConfig(key) {
-          ;
           return this.ready().then(() => {
             return getBlob.call(this, key);
           });
         }
+        /**
+         * @param {string} key
+         * @returns {Promise<boolean>}
+         */
+        hasConfig(key) {
+          return this.ready().then(() => {
+            return getBlob.call(this, key);
+          }).then(() => {
+            return true;
+          }).catch(() => {
+            return false;
+          });
+        }
         /**
          * @param {string} key
          * @param {*} value
          * @returns {Promise<unknown>}
          */
         setConfig(key, value) {
-          ;
           return this.ready().then(() => {
             return setBlob.call(this, key, value);
           });
         }
+        deleteConfig(key) {
+          return this.ready().then(() => {
+            return deleteBlob.call(this, key);
+          });
+        }
         /**
          *
          * @return {string}
@@ -31494,7 +33472,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     Host: () => Host
   });
   function initControlReferences11() {
-    ;
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -31505,14 +33482,12 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     );
   }
   function initTranslations() {
-    ;
     if (isIterable(this[promisesSymbol]) === false) {
       this[promisesSymbol] = [];
     }
     this[promisesSymbol].push(Embed.assignTranslationsToElement());
   }
-  function initEventHandler() {
-    ;
+  function initEventHandler7() {
     return this;
   }
   function getTemplate16() {
@@ -31583,6 +33558,18 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
           }
           return this[configManagerElementSymbol].getConfig(key);
         }
+        hasConfig(key) {
+          if (this[configManagerElementSymbol] instanceof HTMLElement === false) {
+            throw new Error("There is no config manager element");
+          }
+          return this[configManagerElementSymbol].hasConfig(key);
+        }
+        deleteConfig(key) {
+          if (this[configManagerElementSymbol] instanceof HTMLElement === false) {
+            throw new Error("There is no config manager element");
+          }
+          return this[configManagerElementSymbol].deleteConfig(key);
+        }
         /**
          *
          * @param {string} key
@@ -31613,7 +33600,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @fires Monster.Components.Host.Host#monster-host-disconnected
          */
         disconnectedCallback() {
-          ;
           super.disconnectedCallback();
           document.documentElement.style.overflowY = "";
           const classNames = this.getOption("classes.body");
@@ -31641,12 +33627,11 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @return {Monster.Components.Host.Host}
          */
         [assembleMethodSymbol]() {
-          ;
           this[promisesSymbol] = [];
           this[promisesSymbol].push(windowReady);
           super[assembleMethodSymbol]();
           initControlReferences11.call(this);
-          initEventHandler.call(this);
+          initEventHandler7.call(this);
           initTranslations.call(this);
           this[focusManagerSymbol] = new FocusManager(this);
           this[resourceManagerSymbol] = new ResourceManager(this);
@@ -31676,7 +33661,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @return {Promise}
          */
         onReady() {
-          ;
           if (isIterable(this[promisesSymbol]) === false) {
             this[promisesSymbol] = [];
           }
@@ -31765,7 +33749,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @param {string|Message} message
          */
         pushNotification(message) {
-          ;
           if (this[notifyElementSymbol] instanceof HTMLElement === false) {
             throw new Error("There is no notify element defined.");
           }
@@ -31785,19 +33768,12 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_constants2();
       OverlayStyleSheet = new CSSStyleSheet();
       try {
-        OverlayStyleSheet.insertRule(
-          `
+        OverlayStyleSheet.insertRule(`
 @layer overlay { 
-:where(html){line-height:1.15}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(pre){font-family:monospace,monospace;font-size:1em}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%;min-height:100%}body{box-sizing:border-box;margin:0;min-height:99%;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-shadow:none;border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-shadow:var(--monster-box-shadow-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}.monster-form{accent-color:var(--monster-color-secondary-2);align-content:flex-start;align-items:flex-start;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;position:relative}.monster-form label{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:grid}.monster-form label:has(input[type=radio]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=radio]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=radio])~label:has(input[type=radio]){margin-top:.2rem}.monster-form label:has(input[type=checkbox]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=checkbox]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=checkbox])~label:has(input[type=checkbox]){margin-top:.2rem}.monster-form label~fieldset,.monster-form label~label{margin-top:1rem}.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-1);box-sizing:border-box;color:var(--monster-color-primary-1);font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem}.monster-form button{border-shadow:var(--monster-box-shadow-1);background-color:var(--monster-bg-color-tertiary-1);border-color:var(--monster-bg-color-primary-3);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-1)}.monster-form option:checked,.monster-form option:focus,.monster-form option:hover{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-form input,.monster-form select,.monster-form textarea{border-bottom-radius:var(--monster-border-radius);border-bottom-shadow:var(--monster-box-shadow-1);border-shadow:var(--monster-box-shadow-1);border:0;border-bottom:thin var(--monster-border-style) var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-2);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:thin}.monster-form button,.monster-form input:not([type=radio]):not([type=checkbox]),.monster-form label,.monster-form select,.monster-form textarea{width:100%}.monster-form label input:not([type=radio]):not([type=checkbox]),.monster-form label select,.monster-form label textarea,.monster-form label+input:not([type=radio]):not([type=checkbox]),.monster-form label+select,.monster-form label+textarea{margin-top:.2rem;width:100%}.monster-form fieldset{background-color:var(--monster-bg-color-primary-1);border:2px solid var(--monster-bg-color-primary-3);box-sizing:border-box;color:var(--monster-color-primary-1);margin:0;outline:none;padding:2.5rem 2rem 2rem;position:relative;width:100%}.monster-form fieldset legend{font-size:.8rem;max-width:95%;overflow:hidden;padding:.1rem 2rem .2rem .5rem;position:absolute;right:0;text-align:right;text-overflow:ellipsis;text-transform:uppercase;top:0;white-space:nowrap}.monster-form fieldset~fieldset{margin-top:1rem}.monster-form button{margin:.2rem 0}.monster-form button:first-of-type{margin-top:1rem}.monster-form button:last-of-type{margin-bottom:1rem}.monster-form input:focus-visible{outline:none}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px}@media (prefers-color-scheme:light){.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{background-color:var(--monster-bg-color-primary-2);border-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-2)}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px}}.monster-form button:hover,.monster-form input:hover:not([type=radio]):not([type=checkbox]):not([type=range]),.monster-form select:hover,.monster-form textarea:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.4}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1;margin-bottom:1.25rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:calc(4px + 2ex);margin-bottom:1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{text-fill-color:transparent;-webkit-text-fill-color:transparent;background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1)}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-weight:700;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,"Quicksand","Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--monster-color-primary-1:var(--monster-color-gray-6);--monster-color-primary-2:var(--monster-color-gray-6);--monster-color-primary-3:var(--monster-color-gray-1);--monster-color-primary-4:var(--monster-color-gray-1);--monster-bg-color-primary-1:var(--monster-color-gray-1);--monster-bg-color-primary-2:var(--monster-color-gray-2);--monster-bg-color-primary-3:var(--monster-color-gray-3);--monster-bg-color-primary-4:var(--monster-color-gray-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}[data-monster-role=overlay].hide-empty{display:none}[data-monster-role=overlay]{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2);height:100%;left:0;overflow-x:hidden;position:fixed;top:0;transition:.5s;width:0;z-index:var(--monster-z-index-offcanvas)}[data-monster-role=overlay] [data-monster-role=overlay-close]{cursor:pointer;height:40px;left:10px;position:absolute;top:10px;width:40px}[data-monster-role=overlay] [data-monster-role=overlay-close]:before{background-color:var(--monster-color-primary-1);content:"";display:block;height:100%;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[data-monster-role=overlay-open]{cursor:pointer;height:40px;left:10px;position:absolute;top:10px;width:40px}[data-monster-role=overlay-open]:before{background-color:var(--monster-color-primary-1);content:"";display:block;height:100%;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M1 2a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V2zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1V2zM1 7a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V7zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V7zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1V7zM1 12a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1v-2zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1v-2zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M1 2a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V2zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1V2zM1 7a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V7zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V7zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1V7zM1 12a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1v-2zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1v-2zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-2z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[data-monster-role=overlay].open{width:100%} 
-}`,
-          0
-        );
+:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-0{border-radius:0;border-style:none;border-width:0;border-shadow:none}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);border-shadow:var(--monster-box-shadow-1)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}.monster-form{accent-color:var(--monster-color-secondary-2);align-content:flex-start;align-items:flex-start;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;position:relative}.monster-form label{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);display:grid}.monster-form label:has(input[type=radio]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=radio]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=radio])~label:has(input[type=radio]){margin-top:.2rem}.monster-form label:has(input[type=checkbox]){display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start}.monster-form label:has(input[type=checkbox]) input{margin-left:.4rem;margin-right:.4rem}.monster-form label:has(input[type=checkbox])~label:has(input[type=checkbox]){margin-top:.2rem}.monster-form label~fieldset,.monster-form label~label{margin-top:1rem}.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-1);box-sizing:border-box;color:var(--monster-color-primary-1);font-family:inherit;font-size:100%;margin:0;outline:none;padding:.4rem .6rem}.monster-form button{background-color:var(--monster-bg-color-tertiary-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-1);border-shadow:var(--monster-box-shadow-1);border-color:var(--monster-bg-color-primary-3)}.monster-form option:checked,.monster-form option:focus,.monster-form option:hover{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-form input,.monster-form select,.monster-form textarea{border:0;border-bottom-radius:var(--monster-border-radius);border-bottom-shadow:var(--monster-box-shadow-1);border-bottom:thin var(--monster-border-style) var(--monster-bg-color-primary-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:thin;border-shadow:var(--monster-box-shadow-1);border-color:var(--monster-bg-color-primary-2)}.monster-form button,.monster-form input:not([type=radio]):not([type=checkbox]),.monster-form label,.monster-form select,.monster-form textarea{width:100%}.monster-form label input:not([type=radio]):not([type=checkbox]),.monster-form label select,.monster-form label textarea,.monster-form label+input:not([type=radio]):not([type=checkbox]),.monster-form label+select,.monster-form label+textarea{margin-top:.2rem;width:100%}.monster-form fieldset{background-color:var(--monster-bg-color-primary-1);border:2px solid var(--monster-bg-color-primary-3);box-sizing:border-box;color:var(--monster-color-primary-1);margin:0;outline:none;padding:2.5rem 2rem 2rem;position:relative;width:100%}.monster-form fieldset legend{font-size:.8rem;max-width:95%;overflow:hidden;padding:.1rem 2rem .2rem .5rem;position:absolute;right:0;text-align:right;text-overflow:ellipsis;text-transform:uppercase;top:0;white-space:nowrap}.monster-form fieldset~fieldset{margin-top:1rem}.monster-form button{margin:.2rem 0}.monster-form button:first-of-type{margin-top:1rem}.monster-form button:last-of-type{margin-bottom:1rem}.monster-form input:focus-visible{outline:none}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px}@media (prefers-color-scheme:light){.monster-form button,.monster-form input,.monster-form select,.monster-form textarea{background-color:var(--monster-bg-color-primary-2);border-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-2)}.monster-form button:focus,.monster-form input:focus,.monster-form select:focus,.monster-form textarea:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px}}.monster-form button:hover,.monster-form input:hover:not([type=radio]):not([type=checkbox]):not([type=range]),.monster-form select:hover,.monster-form textarea:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAFJ4ABIAAAAAt3AAAFIQAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoE8G+46HIU8BmA/U1RBVEQAhQgIgQoJnxQRCAqBugyBmnALhCIAATYCJAOIQAQgBYUUByAMgxwbfaQXaJefmNz0Zol3v60cPeZMpG4HJSjk5qIINg6CGMglZf//n3F0jOGGDRA1rXeIncJIUkNHGn69qMRDU8Zajjs9UbsmtnqnE3v3vqiQmfRQpLkKW6QZwal6s5IUiJNUSUG/OwoDY6B675OjSjkDSSMu2pedpu9vJILUlJd707D+eLHpjYDI4e1uDnLjHHvxpDXGMyduLLn1qt0FCQOyFsJZE1+kJq3T+Ie7BJFINOANbi9vTUzhI7W4GmUL0lWjT/FQQi/m++xuPP02omRHe5pn4DgfNZfn+R9z979tmEeNaq1RxRqHTjTPNA2JFEgrHdo/nt/W/5zbgGCxia6EkViA2FhYGItRmE1ZvVUvqtStb7Mvrd3W7+t2+0XdoTnzzjYbp7mSHLACkhMWgCTL6s0Wv0AUohJfEqE3opPd58ikJnKlo+3uaeSHYJ6fcIcXjd+rKUEsaElTqlUlVRm/N+e/8iP0L5AKozNlJ3/9iBwshM6v5JIUJykgT3fdrOmq6Lcs+Z+q/XsAXFxEEiQIUaKosFn7ctT+7BBS5dqDolJXunbl7rttzD/v384LftJagFFALYPE5A7gnMrZBht4lXqsbZKmbdq0TtOmpmgNiugM2PYBc73Mrjq7GLsoXHcTpt9uPvFDz8eN3g+sxrPQAw6DTFNp/OZI9iinNitZhRmpQOCkdoBdANjVWlavMitwDNJX/pYIAkVwnOP/vW5xzoMw7SAFAKU+Zz/knP/Z9j+OdfrL8Ke2vdKbmphuxJSuL8EUAggHIiBHP+444EDzv1PTQ3YkOcOSlTHmj6Usdfo2L+/jpYe7IHWcQUgcgkpLFR1YTW8CGKQX9b8GFAAAH9to4RHQ6GLvFRri4DiwTzAADDMKDPr/fZ3V/qdgPmkGzKTEmWEXb7Q3ttgTYqo2nP6/+97Xf+F/9JHAVsIIcACBZwRykGT7gCR8VohJcUOOSDjiSbAphMozm2JRptBtUW69XbNFG3IVy2KLok48/Lfsm527IaqBLMuBbOFIweFUd01veL+Y8xWhtzcqTm2CITc5eLJwSI4fYlLYFIVHAs//T53N4/Yx1hKGU+HSqErdpPPns6fqqWJsNbZaClQtjlOLUMshcdoA5TQss4JLc90SxCOMMUK4KP9NshpzpX4vwxKChCASRERE/LKsWRlJwNKAcTnXAhEy3r1KHcZa/YdX58420/iaXmtGhoCAiIiAR23v/P9+KTACAN5hdkC3xUC4ELsggvkR2krEjYSEv0BKSmHChIvYOCAJkKQgyYMM2QoUMzCo16BJ85qAWCCdHek3AB0ODL1Lq0PgTe3hSw2fhi4XhPueuQWEH6xtIEQAbG2Nm5oV54QFP+yKgO2D4T5t/wz2XW92/rpqpLTSIP8qV9vLvOds0NLWyX51K6ofbvPZE1paf7w318C9Zthq7f32bfuL64VZHw514Ysm5lgfNbfG7W9lsUA4EGz723vxwGzp4fRR+mP8Ls5B7KB2eDJXc6xwlG6902ug7AzLA8NY21B2dB/P5qfOV8t1onyL5jZDDfQI5Rg8D98FvHsvclHuJsrdvsJrpc/Tr/gu/EfZJzXUzpWaDj7M7+UP8/8EkAAVaAS/CR+Xs/JN4YaIcO1xHZcUaMMbklrpKy7NfQJKQcURagoGmCW+HA6ENvbg33sl2pIYRmE9bIHb0mA6kk6lN5GdyMN5EbmQhxHKlwMgT58cgw7pdURz7nfMcQfcU3vIczVkdrhX8XHq4012tFOd7kT/a7p7m83WA71F7aO9M+djvdd6j7fxm+D1Pu3z3uirvmuyza53trv93lTb82RT2KaFVUKMNP36BvQMCo0GsEdkL8s+zLg1ExbM0NgCWAxgzf82DG1KXMfc4rjNcQfHKxSCuRuBI5AodDDDkGdV8CnVVEmEMain4Sa0AXTI0RBNpOYALVq1aV9vxJiUzHKWCis6mp0Bukx069Gr74snVNbsoCmkVMop5+pDGaWz2sLDr2iNt+oZO0b36YSIjWcxvnlN0x0VhlYoW4URjXXKyLG3Y3qoLdEazHAEEoVuMl3DDeERVpG/jeTER0CUZEU1motqFoiwJFKUaDFiacSlBJrEjSQKJ/CSFSmSKk161QlkdKeySXYzsdXKi6I9ikNJMtCUKlOuQqUq1VHT1zq6+lzfQNAIa5JpRovWaEP7ZxuNmTjMLBYuq3XUTgNdRDd6Uq9A33cbxAzxDDON0IxaNVaxd//s/ajxAE6JnPbFGZkuC3uaNU8EsDSLZVmxOj1Pd8HQxXSpedkXawbW6wZo8+6DriuQFFw5IpvnJh6/ZgFJK930aEM2XJ3yJB0DHophbqg0urkvMIgYltbGRPcdkd7Vj/NV4pbAba+/E4BjCg9p5Zeri/pdM0CG/7tXZNxVE+6bYavQn6umWwy3FXf6gg+XnAtHDgjkPNiUbqpowvDUvbRlcj5XZHYzV8Ji4Nl1vjsOhrMaxOHxeDwejz/VIHJXn6H0whg6qFOEUqQo0WLE0ohLCTKJ0yQ5LU9yRQpSpUlfZnASBkWplClXoVKV6qibTBtMmQKYYWHVUUftGIt62ldnMH3EpiU0qVQqHbCLxOU+E4/1XLfBEhzKhgUcgUShfxwmDz9G5ERAAHL7FHRKQyrnwuxQf5rhHBEBRIoSLUYszUbc4rtMdpl26Fgd55tgQG8x/fAZ2JzIvGbmlrcXAm3wXKa7ElfPcS2txfq+egfiHGoDMxyBRKHvy3SJ30Q6V8+6mdfZsaFV3eOUKsWMynkhyL1u4VI0L1SJLIxXyYzpLyNqiWz0XTpkaTyn1ZDti90mY02v0tUqtzSCl+qrK7rIuv1v9RD0sgxqGbJoGGfEklE1Yzr28O1l2KewX9N4ADaN1b7L0IaRTXOuy9yiu82pOwHQBC+pldCrOmK0Mg/r1vRYEm3DBEcgUegmUx03G4+witQgOfERECVZUY3m4tmEIvwUKUq0GLE04lICTuI0yTqtFclEClKlSa86WEZ3JJvsFWi7IxKJOBwOh8PhcETrRN3tDplMJpNhRIaiqAiGYRgmcbksy4Noz/rofQL7KcalND0FOW3RGZuOBR2xmVMxkUgkDl0X7uJiutS8bNGaE+v/ZQOwqe86GIIeEsCuovWYfCq2tvpMOBN7MzO68GWXLhtmgW2ffeHp1Mu7qwX5NDwTkpCScefBkxdvfinARIRIUaLFiKURlxIAiZE0rVq65IoUSZUmveqUMrps/z1ZWEZ5YBgGAAAAAACA0WZsd1Cp+Hw+n2/cOlk4rDpSl1K3Hr36jg1CTtwzOcNuCXYNgiDYhotH1ogOLRSux8nil4r2iYav0norzXvZ2nZjZLfaKD+VRgH/fgNmpkFbhgiGiUacGfXNmK49FPvY9tvbcTm75+3fdamW6YStwkdzaCHZcvq0CS4iU5ZmNxLXGBe/rQoHjMP1/QEGVMZFJgbDDJ/5T3eyBcvGPSqTimJcC+YQUjqGv2nC7q3nB0DOqv2G3VvlIhKIW8MRSBS6yZTiNGFX+RGCDHs8PYIdTjdAUAyvQkwSCpphNd20mpuMjQXKBQkWIjQpmJRUKYxKXcLDc6kIfHaTKaOMSc4MsVRYQ0ezU6FLpVuP3tLHuwprYfthiwiHFAWkSpmWRt+6nJ6U18CuyJ85j2x0b0d7N9pibq0lb4NnU+pO7tEULihdUO2hrptgYXCsxBFA3lQ2nmFc3FbRjGBgCd6BUH7qnXBbacjsK99RfIDMAFkBsoO+nZg8P0BBgMIAtQEan9WQEs9MAHNG8554wa+ArnqvTTjpGS7e/ilPmjARPmnsxWkdAARyOL9yAhymx7SGKlk7Gh48vDvNfdg+ITBZpD9gzgMIBwwBk5tmkEXIqqMMaETg/HUe26oLTTp4w4g9UkZ5bgbxEHtCyTLYPHmJUq3uJpqzvSNcumbBdXYQsku1C92N8jTvDFEU0rv817gmqsGjPfRuNjverTDmHCE4q+qbzOjuIIvRaDhzZ1/VJUphhiOQKHQwsZ5TjguAB8CuKr+YIMKewIoMO5xx9e4AEBTDSYpm2OTy8oIoyYoajejUQb8JwD/XB5iSswUighAsRGhS0CgzJzXMCTU1XEZHaTAXTCQSicXbY4VCoRgLExstldCtxZ1aUnlutGhtOQt18/RUdVpkDBvbS4nEoNFoNBqNFidXn0WJLJCrU8CUbqqMhZGpm+F8EbBIUaLFiKURlxKEEiVVLVNyRgpSpUmvugAZhAGlypSrUKlKtbpmA6wrQLcevfqaE7DTWs6YHm0E2dcliWWsWE3nmS7G5b6uGVnPnNuyyWbHwxDjpWk6M+j20eYMLQ/03VMmKm4ZnglJSMm48+DJize/KrdCkVMlKsyImmeZf0GQywJBEFxC/rggCIIgCIIz90bDEwMTj8fjAUAxdS6VsDcs1g8wfYCXrNd98SH8gajk5vuUPqg4XDP9Jm7oGWvGXxSdELLfrsESEsmWXTcM3cLtHFSGbSHBAjcCiUIXJqHnMlOLRBLasnUK2Sux1zqnMB/ZMGOx/zPu8ohDADAAOAACAAmAAkADYHglCkCuLVAiSIKFCP0khWNKPFUwbdyL+sDByegkaJ2WEMtWrE6/4vpW7G6e4mDw0BfxZhFt9GvfhPEAmyd4cMtUqsPl4ay7Guak5t0N52OOwJaBgSNHsk2Nh7qEWZYVq8e+ksxjj3EKSXg8LNilQqFQzE1fv5tvpQQFtFImyLtivTeWkQCk5ZRe2QiJ2ZrLYDV86MBYWX5xAPunk1yntZ2x6abNriXAshWrcfkU63y/j/m+gnzN8I3YtxzfCeOiAPi7Yh1wBBKFzs72WrlifWb3n+sOmkSizXHTXpmvAnOgea+7S8F1EHP8nU4InFY4Q5mWp3BALlesa7Bz4FuObE4EXRniyk8htCOik8vlcsWYIKr4/cHM3XXIccyODsBXH9R3NIBjUsd1fidj0iinH5riZfUODTiFQulzeax7+jHZVyxf38U3xLdr+U7u43H59KegK95Jvwvyqn3IgxLyUG2Y4QgkCv1BTD+IvCMPMg0lVYRBnSIQkaJEixFLIy4lCCT2hm0sEAgEJTDrqb4gJ2JYozSUKVehUpXqbNrZ+Zhejb+5rHrGzccLQhJSMu48ePLiza/KzQnMCEKwEKFJYYGyNyK1ltJU/J6WmFxUqLsInXSs34s4AJnTNP9JV81ZW08bwoxwjMoGg+1gPPxwAMeZkBEE+Vsupsxo9cWS5ivnaSUpFJQ1TEbteyKjMALlSQh6RK3gCCQK3eQU4jbEC7uq/AyCDHuCBQTscMbVuwMUBBTDQ9yQFM2wyRnyESxKsqJGU3RiEDPXL9DZ5F4IpAuSYCFCk8IGZVMFCdOkLuE1IKVFlGgxYmnENeNBCVSJknJEj+SMFEmVJr3qmDKIzGlkSbbd9HLk1fx+3e+VCpmKohglyUBVqky5CpWqVKcaUG3UlfpokMbaxNAsLVq1aU9GIlOfvJlMppjJZDJbRjtaNWk/rzWoMIIaNWesaut03yMO2PxII6MBE91qfoDyxCSwgCOQKHST6QVuDh5hFXlptrgMjyBKsqIaL17GcdkA58A8gCY/32PLbwknCQBANmtCw6NoBrVIqzbtOUsWU405lCwZ1tDx5p1o7TEdJBgSGL777BEjo94ao9ojtK9bv5/hAM8Ra46SjgmdeLzNDMhiUHnu7QmDDBZ+IUFiTcJoHclIkSpN+mZGcTcH5IcBpcqUR0WoVKU66qZ3usegF3mn+bFlriq9BmmnV7Pb7G0RtCasOwKQZEgh486DJy/e/J6Jrz2rvz118Pk8Pp/P5y/9NPJir9gJwylKrUy5CpWqVEfdVFNthrWgVZv2ZISYereBoJdHKeaeg0J7UBeqR8SO1an3pFAMKLwItVSJ++FmniHEsFEQW+pekoM5Hqf50lxBLLv9zCMAZTPQ17n9X5kHFX7c6Q2Jvb+KSIsSLUYsjbhmvJEEWxLHJDXMSK5IkVRp0quOIKOLzGlkSbbd9HLkyVegMBW5UKwkGWwpVaZchUpVqqOmj9p5qlNT3//1xsiARCKRSABABQDAgEAgEF4kcHPA4y/f2m7YGo5AotCVSSIaTeVGFAAlx1RIZRvGc5j0JIeocxzzpKtcaycxI1hSyV+61/GCwuzAMfQMw6LTKd8osFAcrNVDPIeFs6LHFxlNytieDjb8GOQQbhSItj02gIg8OVbUfgF/GtkaCsMMRyBR6D55mcPjLbYkI8J0wJwXf/M1no9djTVdWhpiD4MjkCj0GYY6kY1N5Q4EKgUhWIjQpNCjbKoSCNOiXoZbVF9/zsLdGYGgVbMzwJwz8+mqU2sjY1Brcjl3fG/sfz6q7og2Y34vfpdUhe/CZ2HH8yAA/xQ8D3myAIDNAVsCAJbZnxi2cH5s2cRJwVaOm2WWstPGZxYZA1KIR7mt3AzAmtkFUI5ilDcAm2QwojFXB6r3IsByVq5l+tNabctrF+QrAQ+lkiUWziHGKWc5u1FUdMKMhnxixnAU4lkaAno/nhuScEnHrQ6QEdoR2FIQ4GFnYHkfBgJTwNl42rQH7dV6IBKx4GDIPTSPAtYHcua/UzeP1epZJNatOASqFEQkYCWSjKomcvJ4Q/lYmR6bWiEWWVIFANaITOVw2ZVHzr5MzC/0i/D1kwEWVD/zT9b6DG632iK4UqC7TP2UNbnkEY864XYiKlW+BS3FUKxHDQYo+8B9yz1w4h07Ba4QkkzL0LGJGIrrZ+cNXuB3Pw6cedpAMU6GzRQqDW7ntB+cWisFyo3WCmQjL0MmXoBqNWRFIZI7gDXhtSct8LpBfkHsRQ6XpVfIRvZBU8p85F4hH8EKnxmEYmu+K6cYY3gQe1+/TzJAIRF1cKvNmn2Q0M8aOWsXjT9jvBCr521xqtWVI6apLpehKcxZuW9BWLJ3QGqf9JTiuvvU0wdghw/8IBRIX1VuNQysBqStVNPXZDtL+Nivcwi1PgD/5O0oym2J+78on0rxgA9OCla0gN0JEPHY/YP4nhIawbEJ2HlUnR9DbzfWMPAvxkrtA14x6jrAmYUcgRfRlZnnYxs2y+owLDwkS2Vk3dfjAAUVIJewD06tz+Auw6pIqxTl4dmjoGlYQXDMb31FJPs+67j9RNgsHYgwwOcYtufK6VhCLMuc4NFTbv9pEQjFNjNr0LWAJB3XGHm4x7nBRfXmHQhQ0bzqmOtVTnyeS6x1HbC/arj/Xe/7qMOl7M0eUnDPghyisF8qIoFbhfEgqyD4o3o2K5RLrMJYCaC5grHwupDNsVoXFI3+9WYPa1lwvOp91fvanGhomJip97upNHmOH+yb1+hLIpddr21RiA13Jib79k6pTB3dFAo714pQ1yRZbTXMydA7mQE9RFGhL/OxrHjdRno0Xdf9yEe0nXFfOerzY+DO3fiBWBFMAmqFbOegkAqXTVo5fS66yOIVlLCSdcp68ue4yJelhUPtU6Vm2jnNAPqwWaNnnv1w7JP6xQZawSIPlOFMEUGuzPCBb2dJUygY6Q9wr6JUjJr6NZcbEYwL/cxZfec82LOsMK49xX628P8Nq3TDEcIAPZwwhLw58hPKk5JSoDBJgiTLEStPA50m7SqYmNSx6FNv0iSjU04zmTbNYs4CqzfJflmC/YZJgNBwDAaBi8eBHT5HAk4IQkKuRER2ceHCjStXYhJeMN68Efz4wfjzJxEggJScnEygUAwlJXdh1JyEC+chggYpThxKvHh2EiRyliSJp2TpKDo6W2TIsFWmTF6y5EDy5EMKFPBWqBBfkRICBlVo1apRatSyU6fOVvXq+WjQwFeTJn6ateMwMfFn0cFep04BunTZols3pEcPvl69kD59+CZN2uaUU4ROO41r2jSuOfN2WrBA6E0yZMkM4bw5hwsWnC5acrhkxemyNZsrNtyu2vK4ZsdtzZ7HOswGEwuhkRiM7Tg4EC4enB1niJAQboudEBGRHVyIIRLecD58IX784Pz5QwIE2ElOTqQRXHAQ16U4hC7ggCEAg0YABwoKDruEl6+GqbFNPLWGAxDA2+2mUSNOiBg7t0SkS31oxeMkjrFn2IIjJzjMSUhOukkoEJSijyGgx2Ia/9Zc03b+n8+gqkgS28s756cjUp3zwTr+RPe6SerlUdT5aeuge/AHgBz9F4inwE8q+H4OvIW39FbeWry/BqMvv/KSupi9HkrVefG5Z4IavfjyWy+p4sVXyheVT5nxIq/zbvbjoqXX1Ze0hj0AYFMQZs2BkAgFIGFwxHYNB9Xdamwr3s7/CIfgYZifhT9ga10ywtzdZY/hcneTYa/kiz8KCBorhFZ4g1lXBGGWKA752ElId9aLK4SFNdV329bG7RIIKU4GEvhjr8LU1wjA23s9BmgbGjQ97oUKwqiOvyPZERICKIzA6WTpWQwV6oJle3VTlj5TyPKOjm4NbvOg/T9GVfxNA9hFhQDSw/fRjpCF2W8OA68iCyT+f2H/DG8C6e+m1x/II879NA35rwAA68QWAYglTTAsYACEqeN+6my3wYoA4F+jNoWcNS8OiajQQP7yMFawIjQRgSUMLI0Q7n1RAX6RF8YKIIJUoZ3ygC+Q2QosCktO5luMHGUaE3eLe8Vj0hqpWApIEalOapG6rdW+7qRAFcCeYikA4BPTsLh/wUWfObx9R6U8qfA4SKn5g7YCXASQCQBYN3kA//1N1f/k6S/0Y/1oBr74GXxx+2Nf0u+/7gvqC/Lzz0Ef9ORBqjn1PgLoZQ8b+1Z0c8gN/l/2DWfNmfKpX1037z2Lxn3ltBXTbE5Z8IPvfG/GJoSDy46AMxY2DgEhETEJGSUMToWgpkcxMDJ724R3/eH18SCCS4IkyXQyZMqSr0ChIsUMatSp16BJMyMTM4tOb/nNW37yvv/52Oc+8YXf/Tsu3LLMeT9bdXt2cNevXvLyaPjFDU+NgRcNuOB1r3nDLBIGRyNQGDxOyjmoVIOLh6+UGAwAkoP8wJOOhhbJBNUvhpUNLZqDU6J0KVKlybObXg6tEhVKlalS7luV2rVo1caqVgdvnaMQCcuWXHHV5ci4WUQmUmU0MMAmtgQsBSztF3RbBBewFIAw5l41ijcbBmQp6y3AENt82dAkwjxnz7P78VUUDB/VmuAd+x56cP++vXvGRkeGh1YsX7Z0yejI8OKbFy1cMDQ4MH/e3Dmz+/t6e7q7Ojva23KtLdlMOpVsbmrcgWA07PcefeThh7qddqvZuP+udG21lsTAP+fz6dr1mop+0LJ1TEggS6CuvC5oyAiub013YPMLbYzTbODATX5YEiYycpU5IVcPfJDlJ+oOudsvLOUyCHA0epShRd4duH4KgEpMEOWZGb5EFcMjVJkBUBUBRZkA2ZKNRsAN1+10xK8ti5Lvu9CQOcZwxobtVJYSNYSFI3/ezwiLJdQElVAVqbFfVj7GFYKUwiL2M9cSdgNm8LHcsAIlv3t+pTzikgjS8LhnpRA4yDpbO7BcekhLIRtyrso3hOFbiU29FgmKY5J82xRd8qylsFWkEH/ban8lnDv3Zy5e4DVGiZ3OQRDBD464XnWTmoFDR52uXJkzlfyCRN0jFULeqZVLNQEXmVElDotZNOfizQ4RLbi0K3VfQiuOKOESMFTv13Tvi6CVyU7WxMmKW3UbtDmnI17yX3HcnwjgofoU4maSUlLnIPod0w8yv66oWIMdSiGPUv2tgmA4Eda10FrntQm/elthfwuhAHWKs+Js/3zqtTxSfcZdWvMBkEko2OWd5h8Vxkl1wQ0tWqfXxjnbXTwDw5omWZ5qdvHIDbKYxyg970pJvzAz8n35OLRkfSbdDTpZgNM9lQJm2iU3/H0ngxvH29dAeY2QDQvxZ4zShpQbhAjBmwVbI7F7IvJ7kiN1FJGWNuAn0zMEyRl0h2N17JCKigCPKfy9nHNOtzwnIzwmguvZZ/TMBcQlHAfw5ExHDsXGuFuSeo3yCJnZRb3W7Uf3aNZ73EYK7kOSlVJswYYyJCtcGM1Grj98cnHhkFmu7PdOwn1WzR0hxTnRU8aBJmxqH9wQIIc/fUWBHj8qrISjbO2hPW7lRIaoDJpKp6WrVHb0ol5LnKLyFj2THgmy96ApZ6/lq1iNPY8vwDKz5gs+E/CZICPwcacqcnRir1RzPsnCgQVag5UMrKGJ6y4+yPYZI7yjKTJKSUN4oUT7GTdixO0DkfcTUdmkaBzqPbi5SiKfJaJDDKY1Zl12u1RAOkwSp7zHn6QkaipNLr6E0pHgmIQ0O3xBnWSyY20cuH2zWYxNQ3w2mFwP8xk5cKeDsdUakKlLHNJG8s5xzyhNttEBiRDNQscCl2v2ZAn1CitxMEjLMwG9p1dDtdqiwJTNCfLSqRS0AtVuqQPIsQCRZIm8x66INwpTCMJC2vYHrNMWMw5TxJ4Vi4HgRRokigFKPTpn45JYgxqh0boqguHP6IgkQTKVPp9BmCtySOJd6byE0lQ1dnktlciGUmpQO9tBn6ABRBvYbh/oXapnCC75GGIxl8W+ZZOjoHUhu7NC25UJoLdovC1VoAi2FAXp+M4N1DyAzUUjeSv5wG7Zbf9EcT6jMbsJ1BpY/Jtol7N0jpQhgLhcYfYeUZ2BXqGUH85Q8RRtz2fQdnznllB18dCDM3BM0RVmLXGPFVRjEdQhLP9DiJvpNzoUAveg9ZALfIjTVb4et5vPM9AUVC11JYBMyEpJoLawHVs3A0CND0cg2/xnXJN+IJW4AKf1GSUa3VBcuMrXlUYTugZoOzPfWKRuc8qYMmlOMKwl7x0kKtswlf2ZRsrj1hg2yzqBaPlAaMlkRC7zG4WaHc8ABrly0mDVgPhKg60KIGsln1FFQGoBHY1TGv9KgJp3Voo3OBIuA485orh0c0NG2LX6ySA9sGcBan2QhobgniJ6FetuKSHXLp5ecN1Fi1o3MgMmKdw0IrFhj81KiULDvRJDI5KSUlKAFIKxVzCugUxXpGgZfAgPEE90NezKzpxvHbPTVq2dOaq842EN9uyTzK2FYt+WdQZDe4UbeB18swvlQUCiFrbL+yC7WqlzZOUb2VpYQZu1mPUkT2Xy726Nj0gpUmoEWIer/FJkgkgbAAL4Dh/0lo5JDBMC7kg0DtzPogF0K7LWLXR06PEN0ooHH1lueJkQDPIWU6MZO6La2sgunF508C2lYGZPlcx2XJ1tuXFbre51CIUWShb4foj6LgGcmlg+UCiSixcH9rJ6TTJdAC24ApGbsa5ha/NIr+h9IeaXICiZu8C4JLzWT7gKYT7639+AAjLlppdXALbmt/zcdZ8nfI/swXNbZdw9mR1SO7IfgZKC/4MCwpCw5sD1j40wIubdtpBNcsVHmuUPvhaksxM9F8BLksQ36M/BOJAQt8TBBSUbSojwK32EYbeQrzuYGa9nWFhOKTlQBw9CFj9jTG4J3NgDveuAg1UOhb4KAp9pHgaMJKb0SloL7DodHsLjptXhkvOaaoe0CHjDU6tkKCB42gZJzRDcPo2xNeJrZDxcXeV3V28Jwk0HJhU08LtGDQMqKOP3TGoAI6YnbEkRwDRk3O4ki61InqT812xKbiioBMGE5DLpMKriOpovFLtbIe9xqMq/STYsy0ZQF5yaZavp/a+H7ubDnpSsiBwJFagBMi7wVWc7UHqlmw3fcLvvmnVRSFYRQEngxnHvux8Q1CV7AIAuAIDdAH1A+Lwg+gHgP4C9QLgBANaevOTwoqMHUoNgmVmEyDI7LrxLHDXXEk7ZAMI9zObGyCGDbk6G5UgnTpPc3+jZQMjYGUyuNXg+M/TibI2cBxgJwkb0bgi4fZf5ABCWT7BDSM8YeS/J8no4IsxQYk51wZKm44Cjw6pTfQjXjULv9ejPOVKJ3PhS2iIfulAK6sMLuzY5On/bHzhZDN2GaPh466ZLUUZEmWJ3XRG+8A+v5YOOlFIMRFB4+LjWyuSuSOep3qrPWrNBoRvGDWbgqcu9715kXz2BEMFUZXfhvL9UD/Oum64wz81IksSXvZuIOqcYRCpt+DUigsuE3Q7bvg8z9qEzf8mfeHFn55sJRUuLYxQ3fMHZuO7vhk8M091QxLBZ1Se2iQNV0djEuCFTbnyjeaqNWtDUObqJeJsBunIQ7PKWqvHPPFxEXTMKRjfADc+M9b75WitKeN2TTwPMb0PA9q2FUUGSaLhsljDAUAMMLdKYQHVjcwpgYKowaUQC16rrhxBDRU/aZgbEoUs+A10TxksnkSLjZayyRa+PhKKNjBT8LoSqrqBGiqGSRiF5TBC7h53CioeF4WFMV1zK5jDPobjHgP5a9sBDD1iO84WcL94Co5EdcIkHlNfJtfmmAEt+Ap1Jatw7v5LxbSU3meKCWs13codQUYlJVv+8tmurAGoE1npMhZexTLoPL0kg7Uey2MLEuvM0y45KlwGlWxAhnHfNjZaWNcM6rJbMimi0+szv9BBqOutfPVEjHjIbNd5paaNmbH3FLJvi1tlOxNsotdiOwT9nePO7+eSGFFTz0Tad9YdmA/pJ8qFa5gsfaoisw61Ant8Ovj+242WK3RVr+cyOCGTXTZ7Zq3yHJQLR+qfuSbgPl4UoUnnFMqluH9AP8RiO1kalsxeeHXnkuNIe9+606zih1s8OK86ekMr6qsBs8ruUq6xFH0gUfVsOYan3WStARf7F50v6wduKb0Yv2bsp2vCwSqFaMArrILvYV0qx/Ts6cD9/R0vmb7q+Uj4QJDHfLwqa1L2YSaKe6ocWXT6Eh+VwuaRyHspLtiUMefpJRUYIvdOp5YF+/MhgBB2pfwGjkKccf+wSI+BVzOXLGg1cxW4DVf9HOaaHiSs0/R3dfSi8hdFxYh7MwlF/jyhwDagF/Ce2z0hwwF4X5JbDsFJuAwM0NqtjsGMDCV6GK19hjUADbRN7yGdhOh8uwHL30Gzqylmcv7aIg7QolzPnLwrbjcNv36XKaFZz4i8PVHheQ3oQpaqLJDI3SDkEXLHMCJTZaPKyfQTUWr86qHcW6ZTe5oM7vatNDXkFlckUP6GSUQhVWitF2W719fPOZHe7g8Wr7Fm24y8hHkTmRgV7vjPRXPq4dD80a0aZg43fBV5tWvvI6ABYOgfGuti8i/kqxQuLEGoG1o5fTmm6nsWZrdluE2br0LgkdSh7F1MS5pD0DZDw8UitWKFmusx2H21xD/bm7xxs8OH1liYJSVw4YujwhxS30Bw25B7aCbGtgHZULIm6ueatxeyprVkq+lFnBmRVAd2oUT5CV6PLkXX4kaKbdgTmFhjeso/KjC8ImlgbLyrGK38S7Jjqt1E5aCMiXowa+UPgy3bJ56doHIgxPPgbwJrdWtlOGJ7MCN+05i6V7UmjijhSmI/eodXjI2WxQHjamfVOSPynWDt58boy8yvLN4q93JhpL5pWBnRG6laa1pEV5m/uIApRN7RXnTjIrmnA2sHkZpGcG6ys6ZeWXz6d8nTTftZhQObaBXmLVMVqZkgNDFgDi6XlTYm9cU2WYjpzSSFASBtqqsSoliUPKUfbAD1+pibWZ5yaYzi/fmWsHRXicj/9Np0ZzfiZtJ3111edgfAtX8W+mmv251dfEwFAtqG8tz2yDzLiDtvaberW+JqNbhCxtSgrM6q4slTJS41xaCpBGhppDrriQQWV7Ngdj4F6hSUjmoLSBstZTdvdfhAYnrBjUizm+gwVu8zqhsWb3x/F+5XEUDUTQXQCxwdHxy5vi6YHns28UiJh0n7xIWC35l2sGVQqSLHf1CN7gCQKkeGgR8aTWqW/Blf5KCAQgTmuLCxMzRjjLIsR4Qg3Vjo6+avXtmsCJoZMOkcbzF1KOHGD7ZGyklcWMxseiDsSmUwCSRbxM+OMVYgxKgwvR5ZNMCR41OQuHszuQ1+a7+uf3gMeP3GRGXHM0GOdbGhff7zIaREB+OxvTh098Bs3f/DAY3poDyrQUu6TEHyUh5dtcic+OChQFjeF+RDz4tvqdD9FtOCiA2kfIHvek2PLRftAO8dxYu4e0Liz7WByy+wDxX6ZGurZabruzGzWoO+mC+ZFknGsKTuLzNHCJC5H8gUzFs53WrBVMgK3IlOBFL/BEQWm9jTmcR8UEk0LJ/QEMDfgPHTZCqqWF/oKeev4UR4qGVUS5zxB0NfyrQdnT8wfdEaLtpcj3Jh4Fa/GT6Yc5ZuAi2Djuwc+Ib+nOI7w6MaqO+CvKa0jzaef4DqQoeUIAkdkm5u5nPO7ZmwTzAA5VUfxouS2GFAIMAhA1S+fYYVIpPcXiFLFCjmgeOEwAUdDIHw60PgpJND2OFRFbwIMEaxhpKWW72X7lmw8OYWOFw2dZsn2dNv8Jp+fFI4ZhmT9wZcZa9gSuABTru8hw5k0meCj7Sse9dKggJPRRgUseUVHak+xx8MQ1FGDhMqaulmnPLnAtDYACS9OW6Jexe1F+4w9vJkz5Ux+qgW85jkxwzw5wWAW5mHZyfzORbNMzCOc5jdVphZsUpse+pGgRpxmZ4+Z89i9pO3xxhg5Rh+/4bUCjEph60OP1/GWZrWori7aZWuQi+LZJwYp0bNMefZhwx499in6FJcAK4DmAGTIiFWJxDTzwlHfzfzavQYd4yYMyDSYPCLNmJCzuFFbpo5EuiiQZJmQlrIzkExBGmKp2LTjikiPsKfPvF2JdD4v1E/s2e26sxgCruCB6MyZLbsIP2Td9unM7rsstP2H6FBgUlOB60C/zY4q3Qy0prncAS7JZM812yYdJZL44gIDNu462YRaTzy5HKq7LjxjFOcbxaXZpB0rbZbUPTOb/7qxkfTPOgZ/dKKRgGz7bfIsoQ0Dxv3z983LN4YovoabmNZ2njOKHnZ9sRdTGjJqxIOYMidnJwRZDpkT22ppkdIUNXFSBhXKHGuBh+hl3+j5bSr2XMO7SB3VKaX2BjrOMm14q+RsOGBHswYFNr+kYLzqAM03njB99GjqjkaDxMfOaNrW6E9VMlBilTVxcWRiAJev/P+T4a4NbYqEskdsS4a4rVKLKQJNBJQFbSrfjtBmMoEUKSvjfAlAlYTjS0Rh1NHUtMWHW4Fn30YU0I4I9APU9rwtuN+benlSctiETRYm4g4j7t4AJJGoceokORgQM8z0fH9NLLaSQRE8WcC4FfkasCbZhX6k4sSbGXNNLdIvmQHOBGoGV4tgNK0s93xfAvri7emMAhaUgcGIyyffeXSpbHg9/d8m95u8/t+Tu7/t+7a4Tx/so/e5NPwzspvKRrNTj1zp/k/b/zX2oE///2SWe+NqvgmRdU0aKjwRIv16pE5FUenzb3o75AjgHEOkIF9+GXI9fENYKH9cRkPyqQ1GhPXS+LLGnmX2eG59k5TZuyrFXM9DmT7Kl4LmmRzYYLi5R2fDksKIbfC5rkxgADb6R2uTfeo1/JaJP4Z2tQbv75ibuG9vQa+oM+XauiKaHZs91rIyQW+rBmIogv4YEzh319fdt6egr865dWV564rJ+JSK+G7iU+Iebj/eLxfI9hFXOvExcVdNC95Sxx0p9I/aUz2aVYxXvaq5a9jim72mScbsAz2La0OObr0vCQ9YHdhApLlXa/WMuow+c/+qVv0DyqMpXLJmfELX8EaDbu1xv+EWtJBvooT0a+kW2Olm42Y3AkRmDQYX6PrjZWv92pJkUBNiX6go2dLhe8YjEQO1wyqcv/P2j2ui5H2PyytOd3JOAM7u1E22/FqnfURrdvb04i7oX4NDryfJLRouDI7amrvVq9w+7ap014jFFxqxN/eqV7r82amac7125UCwuUdX6+ilAilkvsWuGAhVqo2O+VOK+dWCfQcZ7SqC+Oq9/rrMPIMzuMSa7KG2FjNgiLck3/+o5VtDN1FxDjRpsixM3jZwywSkCsIrxBGlmexKOuyXSqwX1IwWjKnUaNSrxv7mzqNuTlUUVZq03cla+w/LdBO6W85sUbtIKIYVKL6H7HhWUrOr4CFqZPDxm+/Wh5RPHqX4LRNyIgjPF0eUlDITtHOeqrbun/VTifUKwWihmIpAo14N/p/gSqzg7luj0r7WKKN6OCPxl4XLB1BbwKEGvYwqyzUbO7nNqvrHm7tofqBM0dLndquvdELB8mB5n1zPWOja5JAqSEQrXdCH3PDewn2h+woJa/WSwsYhK9MjWsl067ot3AFDslXn87dShiRnvvma6BOv8nQOmHUQTRwvXW9/D6rQcS02Xj33DbI/vz+fXIbuSpVvVqvH1XfNvXuumhg3Vmy+rQhyjV9yXnRa2b2lLda/jH8bbaUt7N6a4PilTZc3mbljJboyzovcou8uz/uPINDz884ROj6wW210tyO0orFUoPXXNQbk9ZJXGVkroG6ZMy9XUPLa0z6rSgqlgXKlbVBbq40qcX93/t0PcZvskVJltM1OybhvKkytKOYM/uV0sVgTUeIBFWFg2uUO0DfzF9bWBXtjDjvSIHlV282knBlL/b/9Njq4wM+MBgtnEReD5lzWYDS2Gq0v/0Cbm6Ra13wH5A/rktyfLe3Y2s8q9rxb/KurGIjmHHpQ/sa9F+3G1jRlNmYoQw5X08X2fvrTPmKSZDxdjMvUpLJHpDkdBbcxwRT6BxGCBsQx1KrtSTmseACZBx2wkV3jfLTY0IJ6gki7KeQcXugL+ubQj5XPbtDozBmzoctRa+zN2kyQuwYbKX3ncoO0WlkQsI/OCXrcfb7PGHJfyf4TPv8OVi2tsJybYzcbMrgrBOXGJPu/OhmBEJUfjgniGC6J7wgCuGC8xyVRFNkUnd5AVqH3LHAy81wk0uRyJWGdb8j72IC0lc7Nb2sgfM26eUO2Yfbw+1mKSmX0JlPWZGw1UYb6DGkyZSlDesNt1bUXl0Z5o6Efe50AWmxsQd1BpMMYdA4v9PuDQwHXiH96Cb5sMefSBoMhZ8SaM/q/9C6bLC5NGY0pKghZO/32qT0VUAYqHWDGqVaJh8TVH97N0Rnikapdyl2nBJIZVBqjw1CrjgLa6WAzZnB3eYEhosrL5AYIZ2a2cxrnbL/WRiURfdi04Mxs26TsG1OlYv/PH4cAhTogJ+mauEIlie0IArJLJNDmbHMoE0qr/6iLnCSj14d8NH5qaVW9QRAtIou0y7NktuxEXOLUGc6k22D9/Tc2s/jfnRAhJIShjAu+6W214D1QMfEBe8ngI+QkecOmNH/7+SmdMPGdbiE0yatgv7NvGr8KBbCyIAl02locdEe62uvca7us2dcuyfK5yCL1svJed62zLrwS8nR7ndih2RWNBvhSt7opW4s3KGv9J4I4n8fSKCPuXqNAeaNRUCQvNmaVTBBuNxjhNncwixoMGdRzrm8zGuD2zSnzZ0YbujJWkylrM/TYd9YdEoymjN3Ybb3rVrbwXBzpoPWJvB3Uec8715+5sbXCKZNpkCK42Dfkc42Ewq7RRX6fPo25ouf5idGWet88p2tkWqKwhFgJWHMtRrM5Z5y1/67T3CRR61sxX4zUu6MpFDdnrIbuWgfVzanf2FtJKcsn/6rMrSnKaEza0+c+HCpm+rz/ecgTRN+//bVWYwp3haGc3m9dMjtQhxN+2CGIoSpJfHsQwgXjvaRlP3tHCAK0+dO82phQGjeYc9Z9uO4unaw0U+uwpNSOqLRNbdX0NDusmA8OVT0nkDV9JVAF4AFRnM8tNjThtSFZTm9A2l2BNKa35qn2EydIT2J0Lo77oTnQkzad/2sxEUSK/xpArbrulB1gJj35fVGW20MWaVY9WuRm3VIxrebf4tp+5ZKOx5shPVNnJIEuP8cW8YscSh3papJS9rR88PDOLLEGOjcXEb+5a/+lZsl/hG9OgvubvCd/cX2dThVKKA2V6gr5JxwI8ZxACFop9WuuavNt2lQzaaLqFGqvGhTSgkuR8ob+sBYOe/Vdou9FFM956rhQ8MOYeFNAGXiGfGZUObpMmOVLviT5/mM4CbfTrS48jti9f/nJCdcx6S2zNPnJ/LxHtNjrqatfKDKS5M1vZ1Cvff7652SIVp+eQboAvqAMGV6Pr534dPaNps9U3ic9TxKVtn+8SAMzHtlYvvzhry3vF75XYHnoq2XLHv7K/G7Be4U1g4f/WVW/RiHxC70/z6COfv7a5zrh/pz/JL1K8waraObt1lf65A9Cc1+ZI3+U7wGmVYTJoh6Skj1g15cc2S55d8/LwuLYPOAeEIAIBM4gL7oWq2L/yTcOrPLe5YLU8M7O7ts+fBsmVvJ9cNVUEXnq6CnSgDsrEPWRRsDZMJsn++aFW6KYhrGU52oS5Rga5vmVFQuVC8sheYVZFjAZ1Fvj9QnHH9LXeKy+9icTEyy6i5Wzehuh++q71xx7FlHtXMSEJ6ZhheSQ5D5z/UUVi5SLXIlduOy+xEfMC5D0sQzpriXU9Ran/TOJqkEtWHe2zKNyeiJ+5o7i0VVY26zpXwClxcfSZD9C751/pcyYMvC14zLJVexURh/X4nVqUpUIXLdrsAupVtVtfuwZr9gLMPIiRMsVjq9gaJzGrVJCScemwYjfPxABnlTqQFQdjI5HNoe1C5O01ZKigYWBLYBdLNYk/ZdexRoV4SB2fLw1c0XCIvmzq0qryFKBSjiTkfoYZvTo7wsrAMHZfzRA59YjBZW6P10+vspej+EeBZrZ8ued0856ysC5BDfw+1cuEoporaZUl9YVGnLsjRBZExPNJgKB1sZmHl6TaAzY8G1eGWFNG6KCc+P1Io0tq9LHKYXUfZw/f8WRNN73Bfh5kkgeqf8ZWS2Yvks3Ej7pfqi71m5oJMgGI6VN1OF6Mo2/r4lublATRt6pBkBN95ntXYzH2T/PzMV+Yei585xuTT1YS/82V7enNVZra3VS6OGBgC+ysIV+Y3eKXr3AE/AO0s75l9YY0pSLGqlUBkioDR/xVDqt57/A3ak+1TduLuG9aWfSAxqXb47RljWq8YCbDAm3YBAGO6+HOQp5mHMdpjEYu1N4D6NXBPgItolhA+omhcmnRdBRNwsgmuUmf+8yFI2IEHlYbG1ZMQzB0LDkNwHkE7TW4fzu3C0xhzV3b2l61ZAn6BmSKeFaKSMIGKlkeA9x64q9+XNdvn5omY2Wrwz19dcy/tmMfw603OKUrwj1zq5V93Ak86yZRqPFlrRYcqI5pPG8jz3TbDTVWC2tv+8qFqsII7GhZys++T1LXTP3y4/zyLcabT7N7dAE3dTtibjMozykVoKeAGY2xqG6s2KIe7RJag3kTOoMZcD8bnVEJqYF4VrHa6L7iTJpkbMXc0TqOGzKnVGaDU2I1oWpzUwf5ANVYM+gmyE07gRMMh0WIsZyUUmhhunXWZMm5f+/Hbvs08mDKrOrca5asG5iDj7aJbY40XnOsEZcUqwbDv/lfrDbUdWpyXqHatcxbXTTTgbeJ78eXF5n3zyLZPFvrODgnhOBp/vHTaWLWhH6Tdn83fR7stEy/X5v7srQK1XXvF2NaYPRNqRqDBi40f/n6xQl+L5Q7YZ+43pkEN9TzACYmoGucTxSiOctYoA3JhBZyKXVwjucvBo5GHRq1ciKOL/sugT4CGhm+gw7K8EKxzvSvP4xB9YJmWU7Jy8+IpU6DEA1/64RPc0INT63SyMZGwPv38ePs64C7FcLaxu0qc6q6t0Q6VECcELJcKVc2guCII2qlZ9+u/nZ1wclGCNokwDHxr4eRqSHvXzu1OyfpH//z79hBsyzT299bVU4dhl1iYcR5EmvBNNElNI1Aloq1zEUJlF6RNLN0wD88Lfv7p0+Cb4ObJeq2XNWw1u9oAoNIp/mJXwpK/zmh935PgQPZRaNRNJNPpUfvOfeONldhFAo2gqAW8VCQdlWF273DZD6aZNyVm6O7FlfDaryirvE8mfQ3y5LpHfRHAC4eJdE8uvMrTXaGqZDJOrU82saFwjEXfDpjzglU4g/dQM4J6a04jz/1ULcj+Tf/NFTiNWXyuv9HUAw3AveBSMH/CDuyzSHR9MLfQ+BW8sEQtE2EFgmFAqJpdXfh/Sy83WOeye5LFiHgKEpJ3hl/7WBb4F1rl5OWwXIPjKZBx1xoXC189wdvx/izuFdXjqCPI1PVF8COK96j4dMdjkBdKritSHU7ngJ3d/3f7z/J1k8EzT3zxSNBaph+b6y1TW0rFqMKodc+1S1FH0yLqDCAvDpvLg/bUEqtfFfp6pxptlL+KCDTsB11x2Jl4o4L1yvKcm9UuMVYMcv6ZQcku9WOuuOskurb+4cPpVPnt/14ZsbSCdOBeUY5gO3AUe60SLvw+BSsapayreEJ0psZf/3WhOfFHzo7oN+zzzv/3l8jMVprsy8wElWZSqO6IRMduXkT49IpWoKqC6+q0GvcQk1HsalkTwxdsN76vhHrIvAP2YRXZLiNL8rHsXfLJlS3MWwtzHcvDcg3+fmbm9T9v5bH39c3Dj+zLjl2fES16VuvLuooJDX08Pj9CzmcW/u5fB6u4tchxuxRvRzyxVt8bJoVbOumRUtYxrxxnDMw2EzvNx353TnyO96dD3sW/8l+5zWbJ3sKV382XLyyw3KW3Rf4PovPk23MqRcovtyvXyn5iNc+9Gni8DCyWsC9ikjHNTeSzMffFNf7cwcCvEefNZLe8glhmFG4Pib4jtNCREKubnzJV41ummD/8FMWz+FvtGBd3C0pvJd04czRTWa+5hxEZdA8xfFc5rjIuxdA+x4z7Lcy8/2CA6pDgGH8EPlnprDqsOzvIcb8UZFXq5mN1wd5SLjn4+bPxsvcaqINURRo/zW2Ta9pXjdv9f3FkuNWKzozwqgqrxSUXameQaXpSyMYWW6l7BYoZLFneH7r0whm6oCKm7MiGFGafH6f27sKWaXpeUl3Rj1AoWVNGOGFwxYd0lJQLIn/rqxtTOmSsJd3B51hBmzpRoP2VbIVhR9mrRLV9hX3NtoTTFjETWnB+nCk7lOU2vs9SLXZeIikTqfaJaevwJFxblDqvd3vr9DdW7/+6JFAPr/v07r2Q6jQfTQe6LzWPPBjg+ud/4QhHwdNvUfdKPstmxZtiqry7Kyga8YxysobV9Gqttj4CtgtbOGvivrqM7oM6yOslt5ZZh/ksqqhwfABrU9JEtr3KbFfRFP4c2Sm4P57fSuqWVR7N/XRS5ucGnprx5TvQCe/8UoReTqHMjLD8Yr/uaG5Hsnux6RAY92ebxPeL3TzRKJWe73Dvs9HY8CwO4Or3vY62mnpebpbs8dms8UsXEYnoCccgVEj8PQV5CrBKrULIIKlu46e2cByIOW6yZbCrZh/T91Q766QdTqcJWbOio6X0J+1F9d3IGoO3QkB1UhIrLNtJT1/df/6td9P/n906+XFckpBwPmOoTO6HU+XGcIjHwOyLRDHqWnEC0w+ufJ1JKggpEwcjURjuEafdb0yf9LIloUXMCDwL8VLnFYC8TU7qVV+irRry/xWS+NLd01RyBCUTGv92b5XV1JZP5/NTvgHUd1R7fD24WfDiCpM23m13NxJmKx9ukrrlhF7zC6Zrt8+1rfte24Ve4i9Ha0aNUJ+xXLB/WfZfErypctX7HiHz9l5NLmBJ7ATHE8fvIwdjvGd3+CYAjaTkkl3/z3wBVj8vMmzvDAVbasAgKG1OfAjImJ2WEPZsFM2IZb5LdsSL+7BMz5wrvN6RqxSFTD/+W7AiD/TvOIWJr9k8t55Xh+1aX2U6qnlxMzG2aQcLvzGXaft0oOcFWvEV2ZqQrBtDUO4DLKvD8fJiUvP+fthAfkigGQilNAjtBUYqX4/6eFks+uC0XHzqdKW07yNkJTznu2+/RG6DHgelabm3z9bUd5Xzq42tjZY9pSXxksd/7mlstmHvG+O6XUe2IBMzlSz8VxT8UFkh2eQyJ+3tf/G2JCleHsbzP90BbRnCau9Amuc6ZPGCRXpHPDlNc9SmYz1PKQn1yebh2hvMpQtfbIwrpqNLTG1Nll2hxvsG3qaV9Lbaw5+dbGavQpN1sHOyu2wJLf5VK+UOnpHT2ooxv4qModVWgJH7BNgZHeOvtfd/stKINrcnVSzNxCupPQkAP34ysTnQNmt7VbZa+3UNpYgj5ZHjBskKK0QQttzxdXXpx8dcODrtJvB3YtX39G6f1TZY/bVfZE/oiJ7sUDLlt9t/KZDc15r/dkeuMb4uCuV49ZEQykn2RYMtm9RQN/l3WGABXkFL6IoHf8n6dvAkhGLyh7begvhc4USCoIcPneqaeXXvggwAedwt2wI645DXnK121HhYByjVK06NK4/48aLvoXUy2t4Spe/kV2z/TYWqqj3bA2GjGs7Wjbo7HYOmrWoCUSPbN2uCVRsW+ESDXrRvx+ciSZGtX4fb5RKqUd9nntVBp+9Ix0YnEJbUUaKWVNHcXUK8y1nZR7io9DLPyfPSyXTCVx174nqll49okb3awILKhuPaLWPXXNuzu92uHEOaJ4+ej5va+NqF5DxmQ0KHtyxjnj06p5B9a94f3ap6o/MVUavf0zWPJA7hJ8KYec5eWTAvhM6kVJ8sUziIDMvKXUb5B+JJW5t9JRmfQoTh+tZn14oop1tLGteGZ7U9O0mc5lydWbAzYXbdx2p+pO/C8zSQVGjO/B3tlD7O883Fk2NqVWHpppWpnEk1n/mpZoV6aJdJHmO7O9QVJSv0hta7CU4Jtycbgt/mlDrf4UZ8EPgKUg/CcI/gGDJfWN7Eke+wSb9TuXN1km3CBeC7I5nt4CoDAlmi4Q1DN8QXdvAVg4207x9ffBIrio/rs/K1xaV6Rs9xs7XzkoSC3jQymBoAnc0fMGpBhhprPetvx9rrdXszme4QKgsJ8YPr0aabunqgAxMQTQDv+NPcwxj2OyM6du/3fnmj/Gv11kPQIBfNBcCwKTw3UgS5wFrAAdRxVwRgW8qQIuh1tHKlOkr9rYy18faowiW2sg67YGL1jJZMJUwocq4TuVyB2/7QKK7XQboPGwBqLWQD7WQL7XQH6zYQ0II37o6+2gaAH7123d37c/PDdcK0IAh/ubEXK3CWwHp2EyPOybH9rYmf0B2PshAPMsSHZmcev4Fsfuxf39xf2zV//7D4sXkbgZhtl8qwYOqIEH1GCf+8EfL9NqM5+GzVf2n2/+MEe0mUetZcBe/SHockYccJ74Brx6dRgAoD04B070qchozYLkWob65a5v8meWJmomAGpwmPIfQBgW5O8WajAHvo1dv/yi48b7bfwTPZ3sxAGv/aeoYQAgvl9KEwDs6R640fv1wbHxS9H+T989rSrNbq3nNL1fHlwA+ERDOIAfh1zkwRVHWguPTmEfWK//3XtN70cezqXbRH//s6D3b3+QszzslNJk77d9GxlsTCHpxzI8u+/T7784QtW8soH3Q+jJBHCR8kr4RyA+f6uDMz4McjYP97Shv9HCnp8Kf3iGUgvbg/dDuNDxSaIAKMT/21cZ8KD8DL3xuThFcW2i4p9V7hXLW0BVH1yHl4t7PL2/lQuouzhX74rwhv0akbKnp897PNO7FHzjoiuWlFNes+P/sBbP/2KnHdz8umvrPZSxFbLiwVxyDUoxpRk3l+/8zMePh5R1GAcA7srV+4/pAmJX25Vsi4gvAwqxWDTaEFJuyDQ2EcnWXqlKopKpuanRADTAhZO07XZbKjkblnWp7R3YaANTPb4pGTdzuUOqdY1Wie8mD3jocT06UywQAUlA20YBoKJlXRAJDMlNkMZ7ySotZEQjQI/EUclWldWOXVRmCleOgrYWVI1BL7mb+72e0dNrsL0C4dZs3oEKhaxuNsnBEbFxMkSER++ZjLZHYhJVV3mxoyVRaUT0qjovregcVdRsXjkmaFFtEeJljeQFVQpmU04QcbCHjAz1iUIawvlOXkO6LR6kXeomXMojZRNV3fqqx37Hh7fUegDVC1+ZqEwlq663zcy93q574+quAr0ttBUqf+JtjFipc0Ba+yl5a8cm7YzNrKNA+IQFO3pf1frVbe1DSphNWRtoHeJNhfsXReexqvsFqSfU756E1iyrsnBZWxpYaGYmIRKvWS7z7Og/7i4gdm4JDaRcmhjrK1M6N/RacmOJhGhl9Y04HKxkjZ/cGvKCnArtduwIdK1IRihWtsvob5HYWVahCL57iZZS9SUq+DTH891uAIjylVenNa1tSiGbHSn2zXlnp8uqd7nqmPmnCwXmx21X8uPHxzgfEItEy59tt9+uv7LXdlPoy5l671l4MAJ1o5WoKIF2F+6XZ1Tt62LN5guxWWWlEtMkxPfdvNxFrYgR121Rl2vasoD8eg63sF4tQ7lQeGxbPeLMCTiqr1wDL+vSJfV2+6MXfW9cEMPK0L/87kEi8Y2rb9VDt+P9GyLv5cBWJ1ou7cKdExWer8jP4wvDSs+z6BuPaGKOL/CmliSa4byiLug+mRBRRfBAN7GSZ02C4XH8epdWr/CB8gbUZUpeSs5xNQDIOYVA1EmIeiKXWKZRA1VGTCTxomOogOjQDcfX+z1rlOyhnUwtEPZiQDSlSQ0XHOV5si9e6Z3q69BntC2+6vPoPvC+4+0VbTt4/1/8wXIxG46mE4wn0Hi3/XAQpiLgAFZg0Lj5KH+1XBrHQnphTZ0v+3OjIp+6b0gs6uoSE7qVwju3teh9J9BOXc/CwDy//aUmFqlFLMmH5lU1R9hRUw4SaI30qFHWAnmmSlqo+atuG4XssS15zf1Ssyl5bZ3b4pFX87ayAcdmcZ+zoehzzoXEdaQSZkooLvmV4Lmzux6vEwW7RVCEtWt3dAUK3fFiZ1adi6VOQXch6mzGzz2hzjfMKQqTjij2u2apjiTPraRGJ77aNjTpcd6gPJBWAP9XtapcWP9x+jL8jdPPza/wqiNufDAw63bXKklrmsAe+QU8JfyfA2vqF+RP3Yn13ehh5+u5HrbMRIYw9PLtoX8wOYG1kXeC4ea9Z02M3aMaunz9cnyavXr7LEQPHq+qphiJHy0JgJgAyszomz3TllYBCdbIvROcUeLgNZLtLOpFprX04WKOgV5Aliw9ex2bM2wfnY+nNvMV/ivu/hOzxFHVblJDWaNJ6SRluVG9sVq0xrVEXTfUKBuMq6gPQXdUs1IyVtSwJWxvhd+inXQ9IC5KhxHLMt4fnJosutYMtqXALBvnQFQBmHOWdlVr+DTPxlIgd2GMq8lhP48RDXOuEQMZi89+YicSktgJILnmLh4Oh0O0eMqzdo9byofwmO37uhPrJIdcL72sE5x8zqioVYmkxVFFa5/blao3AKgh/kEOAmPux5bDNOQq1bIKwUmJhiYHC3CcmZLvkWFVkQ5ZejnE9cB/sCIi4lU0kY6etRUNaXuoQLytJ0Noy2oMCgrLiJCdQR3DBOf+yxUCjvLfQFbEea/Tl72SuNOuplT+nBtaWgrlyzNcROxsbX/TFdJy/2gxPa3oU2GpYbChL2v5H2ayINWNQL/zmKzYqUCsrV2asreXRL7/cl4aT67SMTAxEfJLwhOhNhXOJu/p0wN/vCVMqCzxOjfN5eLRLOCKIc+Mr1xe6fAwbFsW4L4c27m+atoAdATbpl/N3RJgbB0nfM26LfuKkPRsDSEA0VMTjdDXY7J4f78+YF/P4+shV+hclZTGfyPTm90uVKPRcBhutK5CKWYe9pga8cuCqRjhcMo5xNh4QcY6JR3ak5Y41m5SRB4WFFUtsiqAUjUSMBZ67PcMIdBMa2icFJ7U7j1Wsf1OayGcqzEzC3iAWUa5CjWac3iv07CSJRImGFPbid3Or5WCwLf2+4J2LsbU2UFhVSwTrFqDzIc4CmBNjJDWlVbTaDQa4mYkXpdskyJ3dTUeT1xGtlTIJuFMOGnhOlHKkhNEGhJz9Bl+jAlDMCoDQmqZzBWyUVSIPHVc62QDZg9PHNwFZTDEkIklmgQiYLBQkD4HY9VorKtaAoSLKAFpNcZUShmwIO2slRWTNjWmVlB8f4RRvuFexwoqQ1ZkBavjhuJi3godyfDJKwLzAFDvohaWhDRiJ92jTown936tuwTi3JlYlMtwOCyt15vF1aBlAmZA82otOdIGCx0WQJoOx6/3Y1nZoffnlDlo3b/H9r0SIDLmwYOuJc9daf2tWRKALa3DV9pBGLtmbva3pC4aJ60R6XqbGa7R+/eT/d5Qqn+o8odY9WC+puyV01hiCHwco24UpVF1HR0Smv14IcqUsNBjpYraXopBF5Jah6cqOk/JaFXmp8lk0JaMghCkFBvQDPzrFpQuAOIsaY2v92Ywp10gNFEpcrdh7taeMLRtTMkxGyUxSVVgFSmXZaNPsxsY+IZp8JGkxpObAF9Nd0aW0PPwnrr8HjCbBCt7pcrdNy+H28m6Q+pXj48+UMHKC2FNj2Q3ef+3aRqHuRD+mb/5Sefw94MaMLCfGVZZCSf6S4+Je/PhB+SmK1JfODU6E1ZUq5Mt6vWc9zaOU9Vlkgvq5IzheXqLhY3p9dMP75o//cXhLGefHezaK88zJV1f8/55i6r69eQfZXD31l74pObjerPZfRk3c4fx/LUxeYgtbM7uw/1qoe9zbYnp+TyMB7dW09/BdyzKbqteKHksGlyQUFbKxd7NNdxdEkZAABA8ilMPGzvRSgGBEDzYMXnnUFzRTHUSgNZ7VUT6keAe25pqf9QX1f84sWDiI9PHEbU4ZWtLYLPET6V0QNm9el9i0LQ9He94QvClunIEGiRcRmpPmZQpDQnmF6khAAPxvx9/33//98LH/1tSNKIfAMBa+w8Z5AF8PG/9s6In+e5sDgGgYAAAEMC/H8gjt6vr/0a9U77XX0BoKBVCeo7g3YSNt6vVQ6Wd4n/wleq9QlZNZm1Izy/2yucL/AoIRy4DpfuMQ32wJMrP6CLPUDfh6ueBllrhRfAb8IN5W5eSVcapO+raPi+xbzrfXazo7Od8/7LY1Q6g/56l0peZBAqo/r4t4F8y3+hiCGe4nkAj0+XWUgku/mycfV2vxE0ZDvq7T+aUthOUzVf9OJAVWAmAry5vwD4nzSOfeY2dpUtt2+aAfZ6qd0NlLsc4+4k4JWFvf9QTqvtGLeRjZhOC9xZ51cL3sID9Q5UjZdux2wWqkKptFGUILZlHLwrZIT7FUJcipBD8fKE9u+8/4i0X8tvbvOYE3BCPjbHlHjtmItkxvisi2oEufJy0IQYNzD26o8+K0bFsl4vY/uIJQHYoeN8+WQQ6dwJPS1iJwk+z2FS2pye6rc0tbT3B81Lfh2S7hhfUmrFyLq0EomiIb53+YKVe75LMdAwDkJsCc/0SCsTsxU+YWm/KeufK+WjcsF7ZZFzbhTEj3pn5yxUtD5VWDssueCtic/C2MdfI57zI9r2QHuNSfL28Jylz5dk7EnIRP0vtXwxvO2DrMvarxGJEq5XXLL+LF9RxwelIdhNx0bTHtJoRPRKUTinylZIE4E9XnaUTQDgoxB2MApAnSkNK5J7u4SvBtnO/sme/3t00AubJ/MHfR+k8ZEcFygMABNCQfrQ2FIwDtTsB+h8cg8MBCIzDoSYHAJbBtwbE3Xsc692/NODUrjYlGkg7F9JAkU7XIKBYW4MD3p7dz9HMMrsCArAr70I+foac3VeQ8LX5RIJ2Rj3MGtVrYCVG0tA6KNWwodreOpVa/njXU6yHWJxZuybJ6u6gU4d4w17azEJMoV8r4wD+ykrkoEZ91FZq5HLx9iXoAw8+HDAIM2pqWXDwzofXPNwbsg2fR+9k6yKFgLsHJkX8QpfmjVcdYmFSgNxer2OZYgoEDZKB9X1msmRKEnlrIDQNQPlAUDYulSfGWMcxeIefeqMI6vBC1axw495vIbfwBWHwxVUvUIyWjtTwW1Tg+cZTDb19jarp+fVVEgp5fX7s40K8Njnqrjn0tY21FdMb7YopiU1xVWKVPyaxyKck5lRNiG2EbRvgUikoTg91SXSgbBJcbS0wa6QBpiRqmU1IpaokKi5WMZGNirpGSuGURCZQpTWqhK+KeaqIqwo58QKaP5Xh0dFWkalxcFvY/PW3Qrr6w9dc13alJm27rivt2lwVhV5FIlpkpaoBEVZ5YVaxEFXaBNa/tpjfxdZezutw+Dc+IP/J/4yy4NzgrgbIwX0EGbVCZaWwlrSScj6O/E0+IBFh0d0i+45v37dmNZXK9TXwGv8MfPbetCx6XL+ApClDW/HjNiK+7vrq1Ss42128bbG/MviMc5Go5Jc3KmddZ28o7EU7VrCGBPZ4NtL89/tlXF0bIYmNIwBBAQ==) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.4}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1;margin-bottom:1.25rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:calc(4px + 2ex);margin-bottom:1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:calc(4px + 2ex);margin-bottom:1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-weight:700;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,"Quicksand","Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--monster-color-primary-1:var(--monster-color-gray-6);--monster-color-primary-2:var(--monster-color-gray-6);--monster-color-primary-3:var(--monster-color-gray-1);--monster-color-primary-4:var(--monster-color-gray-1);--monster-bg-color-primary-1:var(--monster-color-gray-1);--monster-bg-color-primary-2:var(--monster-color-gray-2);--monster-bg-color-primary-3:var(--monster-color-gray-3);--monster-bg-color-primary-4:var(--monster-color-gray-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}[data-monster-role=overlay].hide-empty{display:none}[data-monster-role=overlay]{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2);height:100%;left:0;overflow-x:hidden;position:fixed;top:0;transition:.5s;width:0;z-index:var(--monster-z-index-offcanvas)}[data-monster-role=overlay] [data-monster-role=overlay-close]{cursor:pointer;height:40px;left:10px;position:absolute;top:10px;width:40px}[data-monster-role=overlay] [data-monster-role=overlay-close]:before{background-color:var(--monster-color-primary-1);content:"";display:block;height:100%;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[data-monster-role=overlay-open]{cursor:pointer;height:40px;left:10px;position:absolute;top:10px;width:40px}[data-monster-role=overlay-open]:before{background-color:var(--monster-color-primary-1);content:"";display:block;height:100%;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M1 2a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1zM1 7a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1zM1 12a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor'%3E%3Cpath d='M1 2a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1zM1 7a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1zM1 12a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zm5 0a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[data-monster-role=overlay].open{width:100%} 
+}`, 0);
       } catch (e) {
-        addAttributeToken(
-          document.getRootNode().querySelector("html"),
-          ATTRIBUTE_ERRORMESSAGE,
-          e + ""
-        );
+        addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + "");
       }
     }
   });
@@ -31808,7 +33784,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     Overlay: () => Overlay
   });
   function initControlReferences12() {
-    ;
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -31820,8 +33795,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       "[data-monster-role=overlay-open]"
     );
   }
-  function initEventHandler2() {
-    ;
+  function initEventHandler8() {
     this[closeEventHandlerSymbol] = (event) => {
       this.close();
     };
@@ -31859,7 +33833,8 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
                  data-monster-attributes="part path:host-overlay.name, data-monster-role path:host-container.overlay"></div>
         </template>
 
-        <div data-monster-role="overlay-open" part="open"></div>
+        <div data-monster-role="overlay-open" part="open"
+			 data-monster-attributes="class path:features.openButton | if:visible:hidden"></div>
 
         <div id="overlay" data-monster-role="overlay" part="overlay" data-monster-insert="host-overlay path:overlay"
              data-monster-attributes="class path:classes.overlay">
@@ -31907,6 +33882,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @property {string} classes.overlay Css class to hide the overlay. This class is removed when the component is ready.
          * @property {Object} features Feature definitions
          * @property {boolean} features.escapeKey If true the overlay can be closed with the escape key
+         * @property {boolean} features.openButton If true the overlay can be opened with a button
          */
         get defaults() {
           return Object.assign({}, super.defaults, {
@@ -31925,7 +33901,8 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
               overlay: "hide-empty"
             },
             features: {
-              escapeKey: true
+              escapeKey: true,
+              openButton: true
             }
           });
         }
@@ -31947,7 +33924,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         [assembleMethodSymbol]() {
           super[assembleMethodSymbol]();
           initControlReferences12.call(this);
-          initEventHandler2.call(this);
+          initEventHandler8.call(this);
         }
         /**
          *
@@ -31969,7 +33946,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @fires Monster.Components.Host.Overlay.event:monster-overlay-closed
          */
         open() {
-          ;
           fireCustomEvent(this, "monster-overlay-before-open", {});
           this[overlayElementSymbol2].classList.remove("hide-empty");
           setTimeout(() => {
@@ -31984,7 +33960,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @returns {Monster.Components.Host.Overlay}
          */
         close() {
-          ;
           fireCustomEvent(this, "monster-overlay-before-close", {});
           setTimeout(() => {
             this[overlayElementSymbol2].classList.remove("open");
@@ -32015,7 +33990,8 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
   // source/components/host/util.mjs
   function generateUniqueConfigKey(componentName, id, prefix) {
     const urlWithoutParams = getWindow().location.href.split("?")[0];
-    const uniqueKey = `${prefix}_${urlWithoutParams}_${componentName}_${id}`;
+    const urlWithoutParamsAndHash = urlWithoutParams.split("#")[0];
+    const uniqueKey = `${prefix}_${urlWithoutParamsAndHash}_${componentName}_${id}`;
     return uniqueKey.replace(/[^\w\s]/gi, "_").replace(/\s+/g, "_");
   }
   var init_util2 = __esm({
@@ -32032,19 +34008,12 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_constants2();
       DetailsStyleSheet = new CSSStyleSheet();
       try {
-        DetailsStyleSheet.insertRule(
-          `
+        DetailsStyleSheet.insertRule(`
 @layer details { 
-:where(html){line-height:1.15}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(pre){font-family:monospace,monospace;font-size:1em}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%;min-height:100%}body{box-sizing:border-box;margin:0;min-height:99%;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-button-primary,button{align-items:center;background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:inline-block;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:inline-block;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:inline-block;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:inline-block;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,"Quicksand","Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--monster-color-primary-1:var(--monster-color-gray-6);--monster-color-primary-2:var(--monster-color-gray-6);--monster-color-primary-3:var(--monster-color-gray-1);--monster-color-primary-4:var(--monster-color-gray-1);--monster-bg-color-primary-1:var(--monster-color-gray-1);--monster-bg-color-primary-2:var(--monster-color-gray-2);--monster-bg-color-primary-3:var(--monster-color-gray-3);--monster-bg-color-primary-4:var(--monster-color-gray-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}}[data-monster-role=control]{flex-direction:column} 
-}`,
-          0
-        );
+:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-button-primary,button{align-items:center;background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,"Quicksand","Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--monster-color-primary-1:var(--monster-color-gray-6);--monster-color-primary-2:var(--monster-color-gray-6);--monster-color-primary-3:var(--monster-color-gray-1);--monster-color-primary-4:var(--monster-color-gray-1);--monster-bg-color-primary-1:var(--monster-color-gray-1);--monster-bg-color-primary-2:var(--monster-color-gray-2);--monster-bg-color-primary-3:var(--monster-color-gray-3);--monster-bg-color-primary-4:var(--monster-color-gray-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}}[data-monster-role=control]{flex-direction:column} 
+}`, 0);
       } catch (e) {
-        addAttributeToken(
-          document.getRootNode().querySelector("html"),
-          ATTRIBUTE_ERRORMESSAGE,
-          e + ""
-        );
+        addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + "");
       }
     }
   });
@@ -32066,35 +34035,39 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_constants2();
       CollapseStyleSheet = new CSSStyleSheet();
       try {
-        CollapseStyleSheet.insertRule(
-          `
+        CollapseStyleSheet.insertRule(`
 @layer collapse { 
-:where(html){line-height:1.15}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(pre){font-family:monospace,monospace;font-size:1em}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%;min-height:100%}body{box-sizing:border-box;margin:0;min-height:99%;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-button-primary,button{align-items:center;background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:inline-block;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:inline-block;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:inline-block;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:inline-block;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,"Quicksand","Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--monster-color-primary-1:var(--monster-color-gray-6);--monster-color-primary-2:var(--monster-color-gray-6);--monster-color-primary-3:var(--monster-color-gray-1);--monster-color-primary-4:var(--monster-color-gray-1);--monster-bg-color-primary-1:var(--monster-color-gray-1);--monster-bg-color-primary-2:var(--monster-color-gray-2);--monster-bg-color-primary-3:var(--monster-color-gray-3);--monster-bg-color-primary-4:var(--monster-color-gray-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}}[data-monster-role=control]{font-size:1rem;font-weight:400;line-height:1.4}.overflow-hidden[data-monster-role=control]{overflow:hidden}[data-monster-role=control] button{border-left:0;border-right:0;border-top:0}[data-monster-role=control] .button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}[data-monster-role=control] [data-monster-role=detail]{background-color:var(--monster-bg-color-primary-2);box-sizing:border-box;color:var(--monster-color-primary-2);font-size:1rem;font-weight:400;height:0;line-height:1.4;transition:height .4s ease-in-out;width:100%}[data-monster-role=control] [data-monster-role=detail] .padding{padding:1rem}[data-monster-role=control] [data-monster-role=detail] .deco-line{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);border:0;height:2px;margin:0;padding:0}@media (prefers-color-scheme:dark){[data-monster-role=control] [data-monster-role=detail] .deco-line{background:var(--monster-color-primary-1)}}[data-monster-role=control] .active[data-monster-role=detail]{height:var(--monster-height)} 
-}`,
-          0
-        );
+:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-button-primary,button{align-items:center;background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,"Quicksand","Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--monster-color-primary-1:var(--monster-color-gray-6);--monster-color-primary-2:var(--monster-color-gray-6);--monster-color-primary-3:var(--monster-color-gray-1);--monster-color-primary-4:var(--monster-color-gray-1);--monster-bg-color-primary-1:var(--monster-color-gray-1);--monster-bg-color-primary-2:var(--monster-color-gray-2);--monster-bg-color-primary-3:var(--monster-color-gray-3);--monster-bg-color-primary-4:var(--monster-color-gray-6);--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6);--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1);--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1);--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1);--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4);--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3);--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3);--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4);--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6);--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}}[data-monster-role=control]{font-size:1rem;font-weight:400;line-height:1.4}.overflow-hidden[data-monster-role=control]{overflow:hidden}[data-monster-role=control] button{border-left:0;border-right:0;border-top:0}[data-monster-role=control] .button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}[data-monster-role=control] [data-monster-role=detail]{background-color:var(--monster-bg-color-primary-2);box-sizing:border-box;color:var(--monster-color-primary-2);font-size:1rem;font-weight:400;height:0;line-height:1.4;transition:height .4s ease-in-out;width:100%}[data-monster-role=control] [data-monster-role=detail] .padding{padding:1rem}[data-monster-role=control] [data-monster-role=detail] .deco-line{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);border:0;height:2px;margin:0;padding:0}@media (prefers-color-scheme:dark){[data-monster-role=control] [data-monster-role=detail] .deco-line{background:var(--monster-color-primary-1)}}[data-monster-role=control] .active[data-monster-role=detail]{height:var(--monster-height)} 
+}`, 0);
       } catch (e) {
-        addAttributeToken(
-          document.getRootNode().querySelector("html"),
-          ATTRIBUTE_ERRORMESSAGE,
-          e + ""
-        );
+        addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + "");
       }
     }
   });
 
   // source/components/host/collapse.mjs
   function adjustHeight() {
-    ;
     let height = 0;
     if (this[detailsContainerElementSymbol]) {
-      height += this[detailsContainerElementSymbol].scrollHeight;
+      if (this.getOption("features.useScrollValues")) {
+        height += this[detailsContainerElementSymbol].scrollHeight;
+      } else {
+        height += this[detailsContainerElementSymbol].clientHeight;
+      }
     }
     if (this[detailsDecoElementSymbol]) {
-      height += this[detailsDecoElementSymbol].scrollHeight + 1;
+      if (this.getOption("features.useScrollValues")) {
+        height += this[detailsDecoElementSymbol].scrollHeight;
+      } else {
+        height += this[detailsDecoElementSymbol].clientHeight + 1;
+      }
     }
     if (height === 0) {
-      height = this[detailsElementSymbol].scrollHeight;
+      if (this.getOption("features.useScrollValues")) {
+        height = this[detailsElementSymbol].scrollHeight;
+      } else {
+        height = this[detailsElementSymbol].clientHeight;
+      }
       if (height === 0) {
         height = "auto";
       }
@@ -32109,7 +34082,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     fireCustomEvent(this, "monster-" + this[nameSymbol] + "-adjust-height", {});
   }
   function updateResizeObserverObservation() {
-    ;
     this[resizeObserverSymbol5].disconnect();
     const slottedNodes = getSlottedElements.call(this);
     slottedNodes.forEach((node) => {
@@ -32120,8 +34092,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }
     this.adjustHeight();
   }
-  function initEventHandler3() {
-    ;
+  function initEventHandler9() {
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -32129,13 +34100,11 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     return this;
   }
   function initSlotChangedHandler() {
-    ;
     this[detailsSlotElementSymbol].addEventListener("slotchange", () => {
       updateResizeObserverObservation.call(this);
     });
   }
   function initControlReferences13() {
-    ;
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -32154,11 +34123,9 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     );
   }
   function getConfigKey() {
-    ;
     return generateUniqueConfigKey(this[nameSymbol], this.id, "state");
   }
   function updateStateConfig() {
-    ;
     if (!this.getOption("features.persistState")) {
       return;
     }
@@ -32178,7 +34145,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     }
   }
   function initStateFromHostConfig() {
-    ;
     if (!this.getOption("features.persistState")) {
       return Promise.resolve({});
     }
@@ -32195,11 +34161,10 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         this.close();
       }
     }).catch((error) => {
-      addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, String(error));
+      addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, error.toString());
     });
   }
   function initResizeObserver() {
-    ;
     this[resizeObserverSymbol5] = new ResizeObserver((entries) => {
       if (this[timerCallbackSymbol5] instanceof DeadMansSwitch) {
         try {
@@ -32215,7 +34180,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     });
   }
   function checkAndRearrangeContent() {
-    ;
     this.adjustHeight();
   }
   function getTemplate18() {
@@ -32279,6 +34243,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @property {Object} features Feature configuration
          * @property {boolean} features.accordion Enable accordion mode
          * @property {boolean} features.persistState Enable persist state (Host and Config-Manager required)
+         * @property {boolean} features.useScrollValues Use scroll values (scrollHeight) instead of clientHeight for the height calculation
          */
         get defaults() {
           return Object.assign({}, super.defaults, {
@@ -32290,7 +34255,8 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
             },
             features: {
               accordion: true,
-              persistState: true
+              persistState: true,
+              useScrollValues: false
             }
           });
         }
@@ -32303,7 +34269,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
           initControlReferences13.call(this);
           initStateFromHostConfig.call(this);
           initResizeObserver.call(this);
-          initEventHandler3.call(this);
+          initEventHandler9.call(this);
         }
         /**
          *
@@ -32323,7 +34289,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @returns {Monster.Components.Host.Collapse}
          */
         toggle() {
-          ;
           if (this[detailsElementSymbol].classList.contains("active")) {
             this.close();
           } else {
@@ -32353,7 +34318,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          */
         open() {
           let node;
-          ;
           if (this[detailsElementSymbol].classList.contains("active")) {
             return this;
           }
@@ -32390,7 +34354,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @fires Monster.Components.Host.Collapse.event:monster-collapse-closed
          */
         close() {
-          ;
           if (!this[detailsElementSymbol].classList.contains("active")) {
             return this;
           }
@@ -32424,7 +34387,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @fires Monster.Components.Host.Collapse.event:monster-collapse-adjust-height
          */
         adjustHeight() {
-          ;
           adjustHeight.call(this);
           return this;
         }
@@ -32439,7 +34401,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     Details: () => Details
   });
   function initControlReferences14() {
-    ;
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -32447,8 +34408,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       "[data-monster-role=button]"
     );
   }
-  function initEventHandler4() {
-    ;
+  function initEventHandler10() {
     if (!this.shadowRoot) {
       throw new Error("no shadow-root is defined");
     }
@@ -32462,7 +34422,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     return this;
   }
   function initButtonLabel() {
-    ;
     let label;
     const setLabel = false;
     if (this.hasAttribute(ATTRIBUTE_BUTTON_LABEL2)) {
@@ -32564,10 +34523,9 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
           super[assembleMethodSymbol]();
           initButtonLabel.call(this);
           initControlReferences14.call(this);
-          initEventHandler4.call(this);
+          initEventHandler10.call(this);
         }
         connectedCallback() {
-          ;
           super.connectedCallback();
           const containDocument = this.shadowRoot;
           if (containDocument !== null) {
@@ -32705,7 +34663,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
   // test/cases/components/form/reload.mjs
   init_global();
 
-  // node_modules/.pnpm/chai@4.3.10/node_modules/chai/index.mjs
+  // node_modules/.pnpm/chai@4.4.1/node_modules/chai/index.mjs
   var import_index = __toESM(require_chai2(), 1);
   var expect = import_index.default.expect;
   var version = import_index.default.version;
@@ -33150,10 +35108,14 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
           ].forEach((key) => {
             g[key] = window2[key];
           });
-          g.localStorage = new Storage(null, { strict: true });
-          g.sessionStorage = new Storage(null, { strict: true });
-          window2["localStorage"] = g.localStorage;
-          window2["sessionStorage"] = g.sessionStorage;
+          Promise.resolve().then(() => __toESM(require_lib(), 1)).then(({ default: Storage2 }) => {
+            g.localStorage = new Storage2(null, { strict: true });
+            g.sessionStorage = new Storage2(null, { strict: true });
+            window2["localStorage"] = g.localStorage;
+            window2["sessionStorage"] = g.sessionStorage;
+          }).catch((e) => {
+            console.error(e);
+          });
           resolve(g);
         })
       );
@@ -33226,7 +35188,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       afterEach(() => {
         mocks.innerHTML = "";
       });
-      it("should has no options", function(done) {
+      it("should have no options", function(done) {
         const reload = document.createElement("monster-reload");
         mocks.appendChild(reload);
         setTimeout(() => {
@@ -33336,7 +35298,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         let mocks = document.getElementById("mocks");
         mocks.innerHTML = "";
       });
-      it("should has buttons and tabs", function(done) {
+      it("should have buttons and tabs", function(done) {
         let mocks = document.getElementById("mocks");
         mocks.innerHTML = html12;
         setTimeout(() => {
@@ -33457,7 +35419,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         let mocks = document.getElementById("mocks");
         mocks.innerHTML = "";
       });
-      it("should has no options", function(done) {
+      it("should have no options", function(done) {
         let mocks = document.getElementById("mocks");
         const button = document.createElement("monster-state-button");
         mocks.appendChild(button);
@@ -33508,6 +35470,9 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       initJSDOM().then(() => {
         Promise.resolve().then(() => (init_dist(), dist_exports)).catch((e) => done(e));
         fetchReference = global6["fetch"];
+        if (!global6.ResizeObserver) {
+          global6.ResizeObserver = ResizeObserverMock;
+        }
         Promise.resolve().then(() => (init_select2(), select_exports)).then((m) => {
           Select2 = m["Select"];
           done();
@@ -33584,35 +35549,30 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
           const select = document.createElement("monster-select");
           expect5(select).is.instanceof(Select2);
         });
-        it("should has options", function(done) {
+        it("should have options", function(done) {
           let mocks = document.getElementById("mocks");
           const select = document.createElement("monster-select");
           select.setOption("url", "https://example.com");
           select.setOption("mapping.selector", "*");
           select.setOption("mapping.labelTemplate", "${id}");
           select.setOption("mapping.valueTemplate", "${id}");
-          const mutationobserver2 = new MutationObserver(function(mutations) {
-            for (const [, mutation] of mutations.entries()) {
-              if (mutation.addedNodes[0].tagName === "MONSTER-SELECT") {
-                setTimeout(() => {
-                  mutationobserver2.disconnect();
-                  try {
-                    const options2 = select.shadowRoot.querySelectorAll("[data-monster-role=option]");
-                    expect5(options2.length).is.equal(3);
-                    const optionHtml = select.shadowRoot.querySelector("[data-monster-role=options]");
-                    expect5(optionHtml).contain.html('data-monster-insert-reference="options-0"');
-                    expect5(optionHtml).contain.html('data-monster-insert-reference="options-1"');
-                    expect5(optionHtml).contain.html('data-monster-insert-reference="options-2"');
-                    expect5(optionHtml).contain.not.html('data-monster-insert-reference="options-3"');
-                  } catch (e) {
-                    return done(e);
-                  }
-                  done();
-                }, 0);
+          select.addEventListener("monster-options-set", (e) => {
+            setTimeout(() => {
+              try {
+                const options2 = select.shadowRoot.querySelectorAll("[data-monster-role=option]");
+                expect5(options2.length).is.equal(3);
+                const optionHtml = select.shadowRoot.querySelector("[data-monster-role=options]");
+                expect5(optionHtml).contain.html('data-monster-insert-reference="options-0"');
+                expect5(optionHtml).contain.html('data-monster-insert-reference="options-1"');
+                expect5(optionHtml).contain.html('data-monster-insert-reference="options-2"');
+                expect5(optionHtml).contain.not.html('data-monster-insert-reference="options-3"');
+              } catch (e2) {
+                done(e2);
+                return;
               }
-            }
+              done();
+            }, 10);
           });
-          mutationobserver2.observe(mocks, { childList: true });
           mocks.appendChild(select);
         });
       });
@@ -33622,7 +35582,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         let mocks = document.getElementById("mocks");
         mocks.innerHTML = "";
       });
-      it("should has no options", function(done) {
+      it("should have no options", function(done) {
         let mocks = document.getElementById("mocks");
         const select = document.createElement("monster-select");
         mocks.appendChild(select);
@@ -33717,7 +35677,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         let mocks = document.getElementById("mocks");
         mocks.innerHTML = "";
       });
-      it("should has childs", function(done) {
+      it("should have childs", function(done) {
         let mocks = document.getElementById("mocks");
         const button = document.createElement("monster-confirm-button");
         mocks.appendChild(button);
@@ -34073,28 +36033,31 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         it("should instance of select", function() {
           expect8(document.createElement("monster-tree-select")).is.instanceof(TreeSelect2);
         });
-        it("should has options", function(done) {
+        it("should have options", function(done) {
           let mocks = document.getElementById("mocks");
           const treeselect = document.createElement("monster-tree-select");
           treeselect.setOption("url", "https://example.com");
           treeselect.setOption("mapping.selector", "*");
           treeselect.setOption("mapping.labelTemplate", "${last_name}");
           treeselect.setOption("mapping.valueTemplate", "${id | tostring }");
+          treeselect.addEventListener("monster-options-set", (e) => {
+            setTimeout(() => {
+              try {
+                const options2 = treeselect.shadowRoot.querySelectorAll("[data-monster-role=option]");
+                expect8(options2.length).is.equal(3);
+                const optionHtml = treeselect.shadowRoot.querySelector("[data-monster-role=options]");
+                expect8(optionHtml).contain.html('data-monster-insert-reference="options-0"');
+                expect8(optionHtml).contain.html('data-monster-insert-reference="options-1"');
+                expect8(optionHtml).contain.html('data-monster-insert-reference="options-2"');
+                expect8(optionHtml).contain.not.html('data-monster-insert-reference="options-3"');
+              } catch (e2) {
+                done(e2);
+                return;
+              }
+              done();
+            }, 10);
+          });
           mocks.appendChild(treeselect);
-          setTimeout(() => {
-            try {
-              const options2 = treeselect.shadowRoot.querySelectorAll("[data-monster-role=option]");
-              expect8(options2.length).is.equal(3);
-              const optionHtml = treeselect.shadowRoot.querySelector("[data-monster-role=options]");
-              expect8(optionHtml).contain.html('data-monster-insert-reference="options-0"');
-              expect8(optionHtml).contain.html('data-monster-insert-reference="options-1"');
-              expect8(optionHtml).contain.html('data-monster-insert-reference="options-2"');
-              expect8(optionHtml).contain.not.html('data-monster-insert-reference="options-3"');
-            } catch (e) {
-              return done(e);
-            }
-            done();
-          }, 0);
         });
       });
     });
@@ -34103,7 +36066,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         let mocks = document.getElementById("mocks");
         mocks.innerHTML = "";
       });
-      it("should has no options", function(done) {
+      it("should have no options", function(done) {
         let mocks = document.getElementById("mocks");
         const select = document.createElement("monster-tree-select");
         mocks.appendChild(select);
@@ -34192,7 +36155,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         let mocks = document.getElementById("mocks");
         mocks.innerHTML = "";
       });
-      it("should has no options", function(done) {
+      it("should have no options", function(done) {
         let mocks = document.getElementById("mocks");
         const button = document.createElement("monster-button");
         mocks.appendChild(button);
@@ -34205,7 +36168,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
             return done(e);
           }
           done();
-        }, 0);
+        }, 100);
       });
     });
   });
@@ -34277,7 +36240,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       afterEach(() => {
         mocks.innerHTML = "";
       });
-      it("should has no options", function(done) {
+      it("should have no options", function(done) {
         const template = document.createElement("monster-template");
         mocks.appendChild(template);
         setTimeout(() => {
@@ -36792,7 +38755,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     if (monsterVersion instanceof Version) {
       return monsterVersion;
     }
-    monsterVersion = new Version("4.0.0");
+    monsterVersion = new Version("3.56.1");
     return monsterVersion;
   }
 
@@ -36800,7 +38763,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
   describe("Monster", function() {
     describe(".getMonsterVersion()", function() {
       let monsterVersion2;
-      monsterVersion2 = new Version("4.0.0");
+      monsterVersion2 = new Version("3.56.1");
       let m = getMonsterVersion();
       it("should " + monsterVersion2 + " is " + m, function() {
         expect(m.compareTo(monsterVersion2)).is.equal(0);
@@ -37759,13 +39722,18 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
               }
             }
           );
-          u.run().then(() => {
-            done(new Error("should never called!"));
-          }).catch((e) => {
-            expect20(e).is.instanceOf(Error);
-            expect20(e + "").to.be.equal("Error: the value is not iterable");
-            done();
-          });
+          let promise = u.run();
+          setTimeout(() => {
+            promise.then(() => {
+              setTimeout(() => {
+                done(new Error("should never called!"));
+              }, 100);
+            }).catch((e) => {
+              expect20(e).is.instanceOf(Error);
+              expect20(e + "").to.be.equal("Error: the value is not iterable");
+              done();
+            });
+          }, 100);
         });
       });
     });
@@ -37801,11 +39769,13 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
             }
           );
           d2.run().then(() => {
-            expect20(typeof d2).is.equal("object");
-            for (let i = 0; i < 6; i++) {
-              expect20(element).contain.html('<li data-monster-replace="path:a.b.' + i + ' | tojson" data-monster-insert-reference="current-' + i + '">{"i":"' + i + '"}</li>');
-            }
-            done();
+            setTimeout(() => {
+              expect20(typeof d2).is.equal("object");
+              for (let i = 0; i < 6; i++) {
+                expect20(element).contain.html('<li data-monster-replace="path:a.b.' + i + ' | tojson" data-monster-insert-reference="current-' + i + '">{"i":"' + i + '"}</li>');
+              }
+              done();
+            }, 100);
           }).catch(
             (e) => {
               done(new Error(e));
@@ -37993,19 +39963,19 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
           d2.setCallback("myformatter", function(a2) {
             return a2 + "yes!";
           });
-          setTimeout(() => {
-            d2.run().then(() => {
+          d2.run().then(() => {
+            setTimeout(() => {
               expect20(typeof d2).is.equal("object");
               expect20(element).contain.html('<div data-monster-replace="path:text | tolower">hallo</div>');
               expect20(element).contain.html('<div data-monster-replace="path:text | call:myformatter">HALLOyes!</div>');
               expect20(element).contain.html('<div data-monster-replace="static:hello\\ ">hello </div>');
               return done();
-            }).catch(
-              (e) => {
-                done(new Error(e));
-              }
-            );
-          }, 100);
+            }, 100);
+          }).catch(
+            (e) => {
+              done(new Error(e));
+            }
+          );
         });
       });
     });
@@ -38028,11 +39998,13 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
             }
           );
           d2.run().then(() => {
-            expect20(typeof d2).is.equal("object");
-            expect20(element).contain.html('<div data-monster-insert="myid path:a.b">');
-            expect20(element).contain.html('<p data-monster-insert="myinnerid path:a.b" data-monster-insert-reference="myid-0">');
-            expect20(element).contain.html('<span data-monster-replace="path:a.b.0 | tojson" data-monster-insert-reference="myinnerid-0">{"i":"0"}</span>');
-            done();
+            setTimeout(() => {
+              expect20(typeof d2).is.equal("object");
+              expect20(element).contain.html('<div data-monster-insert="myid path:a.b">');
+              expect20(element).contain.html('<p data-monster-insert="myinnerid path:a.b" data-monster-insert-reference="myid-0">');
+              expect20(element).contain.html('<span data-monster-replace="path:a.b.0 | tojson" data-monster-insert-reference="myinnerid-0">{"i":"0"}</span>');
+              done();
+            }, 100);
           }).catch(
             (e) => {
               done(new Error(e));
@@ -38073,21 +40045,23 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
             }
           );
           d2.run().then(() => {
-            expect20(element).contain.html('<div data-monster-attributes="class path:a.b" class="div-class">');
-            expect20(element).contain.html('<input data-monster-attributes="value path:a.c" id="input1" value="hello">');
-            expect20(element).contain.html('<textarea name="textarea" id="textarea" data-monster-attributes="value path:a.textarea" value="test">');
-            expect20(element).contain.html('<input data-monster-attributes="checked path:a.radio" type="radio" name="radio" value="r1" id="radio" checked="true">');
-            expect20(text.value, "text control").to.be.equal(d2.getSubject()["a"]["c"]);
-            expect20(radio.checked, "radio control").to.be.equal(true);
-            expect20(textarea.value, "textarea control").to.be.equal(d2.getSubject()["a"]["textarea"]);
-            expect20(select.selectedIndex, "select control").to.be.equal(1);
-            let multiselectSelectedOptions = [];
-            for (const [index, obj] of Object.entries(multiselect.selectedOptions)) {
-              multiselectSelectedOptions.push(obj.value);
-            }
-            expect20(JSON.stringify(multiselectSelectedOptions), "multiselect control").to.be.equal(JSON.stringify(d2.getSubject()["a"]["multiselect"]));
-            expect20(checkbox.checked, "checkbox control").to.be.true;
-            done();
+            setTimeout(() => {
+              expect20(element).contain.html('<div data-monster-attributes="class path:a.b" class="div-class">');
+              expect20(element).contain.html('<input data-monster-attributes="value path:a.c" id="input1" value="hello">');
+              expect20(element).contain.html('<textarea name="textarea" id="textarea" data-monster-attributes="value path:a.textarea" value="test">');
+              expect20(element).contain.html('<input data-monster-attributes="checked path:a.radio" type="radio" name="radio" value="r1" id="radio" checked="true">');
+              expect20(text.value, "text control").to.be.equal(d2.getSubject()["a"]["c"]);
+              expect20(radio.checked, "radio control").to.be.equal(true);
+              expect20(textarea.value, "textarea control").to.be.equal(d2.getSubject()["a"]["textarea"]);
+              expect20(select.selectedIndex, "select control").to.be.equal(1);
+              let multiselectSelectedOptions = [];
+              for (const [index, obj] of Object.entries(multiselect.selectedOptions)) {
+                multiselectSelectedOptions.push(obj.value);
+              }
+              expect20(JSON.stringify(multiselectSelectedOptions), "multiselect control").to.be.equal(JSON.stringify(d2.getSubject()["a"]["multiselect"]));
+              expect20(checkbox.checked, "checkbox control").to.be.true;
+              done();
+            }, 100);
           }).catch(
             (e) => {
               done(new Error(e));
@@ -38159,12 +40133,14 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
           );
           setTimeout(() => {
             d2.run().then(() => {
-              try {
-                expect20(containerElement).contain.html("<div>yeah! <b>Test</b>!</div>");
-              } catch (e) {
-                return done(e);
-              }
-              done();
+              setTimeout(() => {
+                try {
+                  expect20(containerElement).contain.html("<div>yeah! <b>Test</b>!</div>");
+                } catch (e) {
+                  return done(e);
+                }
+                done();
+              }, 100);
             });
           }, 100);
         });
@@ -40720,13 +42696,13 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         // without \\
         [" if:a:\\ ", false, " "],
         [" if:a:\\ ", true, "a"],
+        ["default:undefined:bool", void 0, false],
         ["default:yes", null, "yes"],
         ["default:yes", void 0, "yes"],
         ["default:1:bool", void 0, true],
         ["default:on:bool", void 0, true],
         ["default:true:bool", void 0, true],
         ["default:yes:bool", void 0, true],
-        ["default:undefined:bool", void 0, false],
         ["default:false:bool", void 0, false],
         ["default:1:int", void 0, 1],
         ["default:1:string", void 0, "1"],
@@ -40784,7 +42760,23 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         ["path:a.b.d", { a: { b: { c: 4 } } }, void 0],
         ["index:a", (/* @__PURE__ */ new Map()).set("a", 5), 5],
         ["substring:2:4", "abcdefghijklmnop", "cdef"],
-        ["nop", "abcdefghijklmnop", "abcdefghijklmnop"]
+        ["nop", "abcdefghijklmnop", "abcdefghijklmnop"],
+        ["set-toggle:c", "a b c", "a b"],
+        ["set-toggle:c", "a b", "a b c"],
+        ["set-set:c", "a b", "a b c"],
+        ["set-set:c", "a b c", "a b c"],
+        ["set-remove:c", "a b c", "a b"],
+        ["set-toggle:c:,", "a,b,c", "a,b"],
+        ["set-toggle:c:,", "a,b", "a,b,c"],
+        ["set-set:c:,", "a,b", "a,b,c"],
+        ["set-set:c:,", "a,b,c", "a,b,c"],
+        ["set-remove:c:,", "a,b,c", "a,b"],
+        ["set-toggle:c,d:,", "a,b,c", "a,b,d"],
+        ["set-toggle:c,d:,", "a,b,c,d", "a,b"],
+        ["set-toggle:c,d:,", "a,b", "a,b,c,d"],
+        ["set-set:c,d:,", "a,b", "a,b,c,d"],
+        ["set-set:c,d:,", "a,b,c", "a,b,c,d"],
+        ["set-remove:c:,", "a,b,c", "a,b"]
       ].forEach(function(data) {
         let a2 = data.shift();
         let b = data.shift();
@@ -40795,7 +42787,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
             return a3 + b2 + c2 + d2;
           });
           const r = t.run(b);
-          expect(r).to.be.eql(c);
+          expect(r).to.be.eql(c, "Transformer.run(" + JSON.stringify(a2) + ").run(" + JSON.stringify(b) + ") should return " + JSON.stringify(c));
         });
       });
     });
@@ -41700,7 +43692,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         { thekey: new MockForExtends() }
       ],
       [
-        '{"a":{"b":["1","2","3"]}}',
+        '{"a":{"b":[]}}',
         {
           a: {
             b: [
@@ -41788,6 +43780,36 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       });
     });
   });
+  describe("extend function", () => {
+    it("should extend an object with properties from another object", () => {
+      const target = { a: 1 };
+      const source = { b: 2 };
+      const result = extend(target, source);
+      expect(result).to.deep.equal({ a: 1, b: 2 });
+    });
+    it("should throw an error for non-object target", () => {
+      const target = null;
+      const source = { b: 2 };
+      expect(() => extend(target, source)).to.throw();
+    });
+    it("should throw an error for non-object source", () => {
+      const target = { a: 1 };
+      const source = "not an object";
+      expect(() => extend(target, source)).to.throw();
+    });
+    it("should handle deep object extension", () => {
+      const target = { a: { b: 1 } };
+      const source = { a: { c: 2 }, d: 3 };
+      const result = extend(target, source);
+      expect(result).to.deep.equal({ a: { b: 1, c: 2 }, d: 3 });
+    });
+    it("should handle array extension", () => {
+      const target = { a: [1, 2] };
+      const source = { a: [3, 4] };
+      const result = extend(target, source);
+      expect(result).to.deep.equal({ a: [3, 4] });
+    });
+  });
 
   // source/constraints/abstract.mjs
   init_base();
@@ -45151,8 +47173,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
  * Extend copies all enumerable own properties from one or
  * more source objects to a target object. It returns the modified target object.
  *
- * @param {object} target
- * @param {object}
  * @return {object}
  * @license AGPLv3
  * @since 1.10.0
@@ -45161,6 +47181,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
  * @throws {Error} unsupported argument
  * @throws {Error} type mismatch
  * @throws {Error} unsupported argument
+ * @param args
  */
 /**
  * @private
@@ -45330,10 +47351,10 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
  * @since 1.9.0
  * @copyright schukai GmbH
  * @memberOf Monster.DOM
- * @param {HTMLElement} element
- * @param {Symbol} symbol
- * @param {Object} object
- * @return {boolean}
+ * @param element
+ * @param symbol
+ * @param object
+ * @returns {*}
  */
 /**
  * Removes an object from an element
@@ -45344,7 +47365,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
  * @memberOf Monster.DOM
  * @param {HTMLElement} element
  * @param {Symbol} symbol
- * @return {boolean}
+ * @returns {*}
  */
 /**
  * Checks if an element has an object link
@@ -45482,7 +47503,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
  * @summary find closest node
  */
 /**
- * This function searches, starting from an `HTMLElemement`, for the next element that has a certain attribute.
+ * This function searches, starting from an `HTMLElement`, for the next element that has a certain attribute.
  *
  * ```html
  * <div class="myclass" id="2">
@@ -46060,8 +48081,16 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
 /**
  * An observer manages a callback function
  *
- * The update method is called with the subject object as this pointer. For this reason the callback should not
- * be an arrow function, because it gets this pointer of its own context.
+ * The update method is called with the subject object as this pointer. For this reason
+ * the callback should not be an arrow function, because it gets this pointer of its own context.
+ *
+ * Include this class in your project with the following code:
+ *
+ * ```js
+ * import { Observer } from "@schukai/monster/source/types/observer.mjs";
+ * ```
+ *
+ * The callback function is passed as the first argument to the constructor.
  *
  * ```js
  * new Observer(()=>{
@@ -46292,13 +48321,15 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
  * @summary Help function to find the appropriate control
  */
 /**
- * The updater class connects an object with the dom. In this way, structures and contents in the DOM can be programmatically adapted via attributes.
+ * The updater class connects an object with the dom. In this way, structures and contents in the DOM can be 
+ * programmatically adapted via attributes.
  *
  * For example, to include a string from an object, the attribute `data-monster-replace` can be used.
  * a further explanation can be found under [monsterjs.org](https://monsterjs.org/)
  *
- * Changes to attributes are made only when the direct values are changed. If you want to assign changes to other values
- * as well, you have to insert the attribute `data-monster-select-this`. This should be done with care, as it can reduce performance.
+ * Changes to attributes are made only when the direct values are changed. If you want to assign changes 
+ * to other values as well, you have to insert the attribute `data-monster-select-this`. This should be 
+ * done with care, as it can reduce performance.
  *
  * @externalExample ../../example/dom/updater.mjs
  * @license AGPLv3
@@ -46771,7 +48802,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
  * @summary The Storage class encapsulates the access to data objects over WebStorageAPI.
  */
 /**
- * Base class for all server datasources
+ * Base class for all server data sources
  *
  * @license AGPLv3
  * @since 3.4.0
@@ -46991,7 +49022,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
  * @since 1.26.0
  */
 /**
- * You can create the instance via the monster namespace `new Monster.Types.NodeRecursiveIterator()`.
+ * Represents a recursive iterator for traversing nodes in a DOM tree.
  *
  * @externalExample ../../example/types/noderecursiveiterator.mjs
  * @license AGPLv3
@@ -46999,6 +49030,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
  * @copyright schukai GmbH
  * @memberOf Monster.Types
  * @summary An iterator to run recursively through a tree of nodes
+ * @extends Base
  */
 /**
  * The Embed provider retrieves a JSON file from the given Script Tag.
@@ -47896,6 +49928,8 @@ chai/lib/chai/assertion.js:
    *   from within another assertion. It's also temporarily set to `true` before
    *   an overwritten assertion gets called by the overwriting assertion.
    *
+   * - `eql`: This flag contains the deepEqual function to be used by the assertion.
+   *
    * @param {Mixed} obj target of the assertion
    * @param {String} msg (optional) custom error message
    * @param {Function} ssfi (optional) starting point for removing stack frames
@@ -48071,44 +50105,23 @@ webcrypto-core/build/webcrypto-core.es.js:
    Copyright (c) Peculiar Ventures, LLC
   *)
 
+ieee754/index.js:
+  (*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> *)
+
+buffer/index.js:
+  (*!
+   * The buffer module from node.js, for the browser.
+   *
+   * @author   Feross Aboukhadijeh <https://feross.org>
+   * @license  MIT
+   *)
+
 @peculiar/webcrypto/build/webcrypto.es.js:
   (*!
    Copyright (c) Peculiar Ventures, LLC
   *)
 */
-//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc291cmNlL3R5cGVzL2lzLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hc3NlcnRpb24tZXJyb3JAMS4xLjAvbm9kZV9tb2R1bGVzL2Fzc2VydGlvbi1lcnJvci9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcGF0aHZhbEAxLjEuMS9ub2RlX21vZHVsZXMvcGF0aHZhbC9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjMuMTAvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvZmxhZy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjMuMTAvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvdGVzdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vdHlwZS1kZXRlY3RANC4wLjgvbm9kZV9tb2R1bGVzL3R5cGUtZGV0ZWN0L3R5cGUtZGV0ZWN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuMy4xMC9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9leHBlY3RUeXBlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjMuMTAvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvZ2V0QWN0dWFsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9nZXQtZnVuYy1uYW1lQDIuMC4yL25vZGVfbW9kdWxlcy9nZXQtZnVuYy1uYW1lL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9sb3VwZUAyLjMuNy9ub2RlX21vZHVsZXMvbG91cGUvbG91cGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC4zLjEwL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL2NvbmZpZy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjMuMTAvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvaW5zcGVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjMuMTAvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvb2JqRGlzcGxheS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjMuMTAvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvZ2V0TWVzc2FnZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjMuMTAvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvdHJhbnNmZXJGbGFncy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vZGVlcC1lcWxANC4xLjMvbm9kZV9tb2R1bGVzL2RlZXAtZXFsL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuMy4xMC9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9pc1Byb3h5RW5hYmxlZC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjMuMTAvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvYWRkUHJvcGVydHkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC4zLjEwL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2FkZExlbmd0aEd1YXJkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuMy4xMC9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9nZXRQcm9wZXJ0aWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuMy4xMC9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9wcm94aWZ5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuMy4xMC9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9hZGRNZXRob2QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC4zLjEwL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL292ZXJ3cml0ZVByb3BlcnR5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuMy4xMC9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9vdmVyd3JpdGVNZXRob2QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC4zLjEwL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2FkZENoYWluYWJsZU1ldGhvZC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjMuMTAvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvb3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuMy4xMC9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9jb21wYXJlQnlJbnNwZWN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuMy4xMC9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9nZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuMy4xMC9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9nZXRPd25FbnVtZXJhYmxlUHJvcGVydGllcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hlY2stZXJyb3JAMS4wLjMvbm9kZV9tb2R1bGVzL2NoZWNrLWVycm9yL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuMy4xMC9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9pc05hTi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjMuMTAvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvZ2V0T3BlcmF0b3IuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC4zLjEwL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuMy4xMC9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS9hc3NlcnRpb24uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC4zLjEwL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL2NvcmUvYXNzZXJ0aW9ucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjMuMTAvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvaW50ZXJmYWNlL2V4cGVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjMuMTAvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvaW50ZXJmYWNlL3Nob3VsZC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjMuMTAvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvaW50ZXJmYWNlL2Fzc2VydC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjMuMTAvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC4zLjEwL25vZGVfbW9kdWxlcy9jaGFpL2luZGV4LmpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy90eXBlb2YubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2V4dGVuZC5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2VsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsQDEuMy45L25vZGVfbW9kdWxlcy9lbGVtZW50LWludGVybmFscy1wb2x5ZmlsbC9kaXN0L2luZGV4LmpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdGFudHMubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9iYXNlLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdG9rZW5saXN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2NvbnN0YW50cy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9hdHRyaWJ1dGVzLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3V0aWwubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9zdGFjay5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvcGF0aGZpbmRlci5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvY2xvbmUubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL2xvY2FsZS5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9sb2NhbGUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL2Jhc2V3aXRob3B0aW9ucy5tanMiLCAiLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL3RyYW5zbGF0aW9ucy5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvdHJhbnNmb3JtZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL3BpcGUubWpzIiwgIi4uLy4uL3NvdXJjZS90ZXh0L2Zvcm1hdHRlci5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL21lZGlhdHlwZS5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL2RhdGF1cmwubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9xdWV1ZS5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL3VuaXF1ZXF1ZXVlLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXIubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZlcmxpc3QubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9wcm94eW9ic2VydmVyLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3RoZW1lLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3RlbXBsYXRlLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kaWZmLm1qcyIsICIuLi8uLi9zb3VyY2UvdXRpbC90cmltc3BhY2VzLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2V2ZW50cy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS91cGRhdGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3Nsb3R0ZWQubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vdXRpbC9leHRyYWN0LWtleXMubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vdXRpbC9pbml0LW9wdGlvbnMtZnJvbS1hdHRyaWJ1dGVzLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3V0aWwvc2V0LW9wdGlvbi1mcm9tLWF0dHJpYnV0ZS5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9jdXN0b21lbGVtZW50Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL2NvbnN0YW50cy5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS91dGlsL2ZldGNoLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3JlbG9hZC5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3B2dHN1dGlsc0AxLjMuNS9ub2RlX21vZHVsZXMvcHZ0c3V0aWxzL2J1aWxkL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9wdnV0aWxzQDEuMS4zL25vZGVfbW9kdWxlcy9wdnV0aWxzL2J1aWxkL3V0aWxzLmVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hc24xanNAMy4wLjUvbm9kZV9tb2R1bGVzL2FzbjFqcy9idWlsZC9pbmRleC5lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2VudW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvdHlwZXMvYml0X3N0cmluZy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3R5cGVzL29jdGV0X3N0cmluZy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3R5cGVzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvY29udmVydGVycy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2hlbHBlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3NjaGVtYS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3N0b3JhZ2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuOC9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9kZWNvcmF0b3JzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvZXJyb3JzL3NjaGVtYV92YWxpZGF0aW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvZXJyb3JzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvcGFyc2VyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvc2VyaWFsaXplci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L29iamVjdHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuOC9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9jb252ZXJ0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3RzbGliQDIuNi4yL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIranNvbi1zY2hlbWFAMS4xLjEyL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvanNvbi1zY2hlbWEvYnVpbGQvaW5kZXguZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3dlYmNyeXB0by1jb3JlQDEuNy43L25vZGVfbW9kdWxlcy93ZWJjcnlwdG8tY29yZS9idWlsZC93ZWJjcnlwdG8tY29yZS5lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK3dlYmNyeXB0b0AxLjQuMy9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL3dlYmNyeXB0by9idWlsZC93ZWJjcnlwdG8uZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2VudW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3cuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21hdGguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3VzZXJBZ2VudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzTGF5b3V0Vmlld3BvcnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvY29udGFpbnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNUYWJsZUVsZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRQYXJlbnROb2RlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3dpdGhpbi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0RnJlc2hTaWRlT2JqZWN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tZXJnZVBhZGRpbmdPYmplY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2Fycm93LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRWYXJpYXRpb24uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbEJhclguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRWaWV3cG9ydFJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudFJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1Njcm9sbFBhcmVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFNjcm9sbFBhcmVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9jb21wdXRlT2Zmc2V0cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvZmxpcC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2hpZGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9vZmZzZXQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRBbHRBeGlzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRIVE1MRWxlbWVudFNjcm9sbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldE5vZGVTY3JvbGwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9vcmRlck1vZGlmaWVycy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGVib3VuY2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlQnlOYW1lLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9jcmVhdGVQb3BwZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3BvcHBlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvaW5kZXguanMiLCAiLi4vLi4vc291cmNlL21hdGgvcmFuZG9tLm1qcyIsICIuLi8uLi9zb3VyY2UvdXRpbC9kZWFkbWFuc3N3aXRjaC5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvcHJvY2Vzc2luZy5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L3RhYnMubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdXRpbC9wb3BwZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdGFicy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9jdXN0b21jb250cm9sLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvYnV0dG9uLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9zdHlsZXNoZWV0L3JpcHBsZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9zdGF0ZS1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdHlwZXMvc3RhdGUubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3RhdGUtYnV0dG9uLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9idWlsZG1hcC5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmbG9hdGluZy11aSt1dGlsc0AwLjEuNi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL3V0aWxzL2Rpc3QvZmxvYXRpbmctdWkudXRpbHMubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmxvYXRpbmctdWkrY29yZUAxLjUuMC9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2NvcmUvZGlzdC9mbG9hdGluZy11aS5jb3JlLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGZsb2F0aW5nLXVpK3V0aWxzQDAuMS42L25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZG9tL2Rpc3QvZmxvYXRpbmctdWkudXRpbHMuZG9tLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGZsb2F0aW5nLXVpK2RvbUAxLjUuMy9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2RvbS9kaXN0L2Zsb2F0aW5nLXVpLmRvbS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS91dGlsL2Zsb2F0aW5nLXVpLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvc2VsZWN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3NlbGVjdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L3BvcHBlci5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9wb3BwZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9wb3BwZXItYnV0dG9uLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3BvcHBlci1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9jb25maXJtLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L21lc3NhZ2Utc3RhdGUtYnV0dG9uLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL21lc3NhZ2Utc3RhdGUtYnV0dG9uLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL2NvbmZpcm0tYnV0dG9uLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2UubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL3dyaXRlZXJyb3IubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3Jlc3RhcGkvZGF0YS1mZXRjaC1lcnJvci5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmFibGVxdWV1ZS5tanMiLCAiLi4vLi4vc291cmNlL25ldC93ZWJjb25uZWN0L21lc3NhZ2UubWpzIiwgIi4uLy4uL3NvdXJjZS9uZXQvd2ViY29ubmVjdC5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvd2ViY29ubmVjdC5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL2xvY2Fsc3RvcmFnZS5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL3Nlc3Npb25zdG9yYWdlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvZm9ybS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9mb3JtLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvbm9kZWxpc3QubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9ub2RlLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9idWlsZHRyZWUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9ub2RlcmVjdXJzaXZlaXRlcmF0b3IubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC90cmVlLXNlbGVjdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90cmVlLXNlbGVjdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90ZW1wbGF0ZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbm90aWZ5L3N0eWxlc2hlZXQvbWVzc2FnZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbm90aWZ5L21lc3NhZ2UubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9zdHlsZXNoZWV0L25vdGlmeS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbm90aWZ5L25vdGlmeS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9zdHlsZXNoZWV0L2hvc3QubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVycy9lbWJlZC5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZWFkeS5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9mb2N1c21hbmFnZXIubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9pbnRlcm5hbC5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS9kYXRhLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL2xpbmsubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2UvbGluay9zdHlsZXNoZWV0Lm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL3NjcmlwdC5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZW1hbmFnZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3Qvc3R5bGVzaGVldC9jb25maWctbWFuYWdlci5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9jb25maWctbWFuYWdlci5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9ob3N0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L3N0eWxlc2hlZXQvb3ZlcmxheS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9vdmVybGF5Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L3V0aWwubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3Qvc3R5bGVzaGVldC9kZXRhaWxzLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L2NvbnN0YW50cy5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9zdHlsZXNoZWV0L2NvbGxhcHNlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L2NvbGxhcHNlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L2RldGFpbHMubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9yYW5kb21pZC5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL3V1aWQubWpzIiwgInByZXBhcmUuanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL3JlbG9hZC5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC4zLjEwL25vZGVfbW9kdWxlcy9jaGFpL2luZGV4Lm1qcyIsICIuLi91dGlsL2NoYWktZG9tLm1qcyIsICIuLi91dGlsL2ludGVyc2VjdGlvbi1tb2NrLm1qcyIsICIuLi91dGlsL2pzZG9tLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2Zvcm0vdGFicy5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL3N0YXRlLWJ1dHRvbi5tanMiLCAiLi4vdXRpbC9yZXNpemUtb2JzZXJ2ZXIubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS9zZWxlY3QubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS9jb25maXJtLWJ1dHRvbi5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL2Zvcm0ubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS90cmVlLXNlbGVjdC5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL2J1dHRvbi5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL3RlbXBsYXRlLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL25vdGlmeS9tZXNzYWdlLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL25vdGlmeS9ub3RpZnkubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvaG9zdC9ob3N0Lm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2hvc3Qvb3ZlcmxheS5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9ob3N0L3V0aWwubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvaG9zdC9kZXRhaWxzLm1qcyIsICIuLi9jYXNlcy90ZXh0L2Zvcm1hdHRlci5tanMiLCAiLi4vLi4vc291cmNlL3RleHQvZ2VuZXJhdGUtcmFuZ2UtY29tcGFyaXNvbi1leHByZXNzaW9uLm1qcyIsICIuLi9jYXNlcy90ZXh0L3V0aWwubWpzIiwgIi4uLy4uL3NvdXJjZS90ZXh0L2JyYWNrZXRlZC1rZXktdmFsdWUtaGFzaC5tanMiLCAiLi4vY2FzZXMvdGV4dC9icmFja2V0ZWQta2V5LXZhbHVlLWhhc2gubWpzIiwgIi4uL2Nhc2VzL21hdGgvcmFuZG9tLm1qcyIsICIuLi9jYXNlcy91dGlsL3RyaW1zcGFjZXMubWpzIiwgIi4uL2Nhc2VzL3V0aWwvcHJvY2Vzc2luZy5tanMiLCAiLi4vY2FzZXMvdXRpbC9kZWFkbWFuc3N3aXRjaC5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvY29tcGFyYXRvci5tanMiLCAiLi4vY2FzZXMvdXRpbC9jb21wYXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvdXRpbC9mcmVlemUubWpzIiwgIi4uL2Nhc2VzL3V0aWwvZnJlZXplLm1qcyIsICIuLi9jYXNlcy91dGlsL2Nsb25lLm1qcyIsICIuLi8uLi9zb3VyY2UvbG9nZ2luZy9oYW5kbGVyL2NvbnNvbGUubWpzIiwgIi4uLy4uL3NvdXJjZS9sb2dnaW5nL2hhbmRsZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9sb2dnaW5nL2xvZ2VudHJ5Lm1qcyIsICIuLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dnZXIubWpzIiwgIi4uL2Nhc2VzL2xvZ2dpbmcvaGFuZGxlci9jb25zb2xlLm1qcyIsICIuLi9jYXNlcy9sb2dnaW5nL2xvZ2dlci5tanMiLCAiLi4vY2FzZXMvbG9nZ2luZy9oYW5kbGVyLm1qcyIsICIuLi9jYXNlcy9sb2dnaW5nL2xvZ2VudHJ5Lm1qcyIsICIuLi9jYXNlcy9uZXQvd2ViY29ubmVjdC5tanMiLCAiLi4vdXRpbC93ZWJzb2NrZXQubWpzIiwgIi4uL2Nhc2VzL25ldC93ZWJjb25uZWN0L21lc3NhZ2UubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy92ZXJzaW9uLm1qcyIsICIuLi9jYXNlcy9tb25zdGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2RpbWVuc2lvbi5tanMiLCAiLi4vY2FzZXMvZG9tL2RpbWVuc2lvbi5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvcnVudGltZS5tanMiLCAiLi4vY2FzZXMvZG9tL3Jlc291cmNlL2xpbmsvc3R5bGVzaGVldC5tanMiLCAiLi4vdXRpbC9jbGVhbnVwZG9tLm1qcyIsICIuLi9jYXNlcy9kb20vcmVzb3VyY2UvbGluay5tanMiLCAiLi4vY2FzZXMvZG9tL3Jlc291cmNlL3NjcmlwdC5tanMiLCAiLi4vY2FzZXMvZG9tL3Jlc291cmNlL2RhdGEubWpzIiwgIi4uL2Nhc2VzL2RvbS91dGlsL2luaXQtb3B0aW9ucy1mcm9tLWF0dHJpYnV0ZXMubWpzIiwgIi4uL2Nhc2VzL2RvbS91dGlsL2V4dHJhY3Qta2V5cy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS93b3JrZXIvZmFjdG9yeS5tanMiLCAiLi4vY2FzZXMvZG9tL3dvcmtlci9mYWN0b3J5Lm1qcyIsICIuLi9jYXNlcy9kb20vdXBkYXRlci5tanMiLCAiLi4vY2FzZXMvZG9tL2xvY2FsZS5tanMiLCAiLi4vY2FzZXMvZG9tL3RoZW1lLm1qcyIsICIuLi9jYXNlcy9kb20vY3VzdG9tZWxlbWVudC5tanMiLCAiLi4vY2FzZXMvZG9tL2ZvY3VzbWFuYWdlci5tanMiLCAiLi4vY2FzZXMvZG9tL2ZpbmQubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZWFkeS5tanMiLCAiLi4vY2FzZXMvZG9tL3V0aWwubWpzIiwgIi4uL2Nhc2VzL2RvbS9jdXN0b21lbGVtZW50LWluaXRmcm9tc2NyaXB0aG9zdC5tanMiLCAiLi4vY2FzZXMvZG9tL3Nsb3R0ZWQtbm9kZXMubWpzIiwgIi4uL2Nhc2VzL2RvbS9hdHRyaWJ1dGVzLm1qcyIsICIuLi9jYXNlcy9kb20vcmVzb3VyY2UubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZXNvdXJjZW1hbmFnZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vYXNzZW1ibGVyLm1qcyIsICIuLi9jYXNlcy9kb20vYXNzZW1ibGVyLm1qcyIsICIuLi9jYXNlcy9kb20vY3VzdG9tY29udHJvbC5tanMiLCAiLi4vY2FzZXMvZG9tL3RlbXBsYXRlLm1qcyIsICIuLi9jYXNlcy9kb20vZXZlbnRzLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL2RvbS5tanMiLCAiLi4vY2FzZXMvZGF0YS9kYXRhc291cmNlL2RvbS5tanMiLCAiLi4vY2FzZXMvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2UvbG9jYWxzdG9yYWdlLm1qcyIsICIuLi91dGlsL2xvY2Fsc3RvcmFnZS5tanMiLCAiLi4vY2FzZXMvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2Uvc2Vzc2lvbnN0b3JhZ2UubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvd2Vic29ja2V0Lm1qcyIsICIuLi9jYXNlcy9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3Jlc3RhcGkubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS5tanMiLCAiLi4vY2FzZXMvZGF0YS9idWlsZG1hcC5tanMiLCAiLi4vY2FzZXMvZGF0YS90cmFuc2Zvcm1lci5tanMiLCAiLi4vY2FzZXMvZGF0YS9kaWZmLm1qcyIsICIuLi9jYXNlcy9kYXRhL2J1aWxkdHJlZS5tanMiLCAiLi4vY2FzZXMvZGF0YS9wYXRoZmluZGVyLm1qcyIsICIuLi9jYXNlcy9kYXRhL3BpcGUubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZXh0ZW5kLm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvYWJzdHJhY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pbnZhbGlkLm1qcyIsICIuLi9jYXNlcy9jb25zdHJhaW50L2ludmFsaWQubWpzIiwgIi4uL2Nhc2VzL2NvbnN0cmFpbnQvYWJzdHJhY3RvcGVyYXRvci5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2Fic3RyYWN0b3BlcmF0b3IubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy92YWxpZC5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL29yb3BlcmF0b3IubWpzIiwgIi4uL2Nhc2VzL2NvbnN0cmFpbnQvb3JvcGVyYXRvci5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2lzb2JqZWN0Lm1qcyIsICIuLi9jYXNlcy9jb25zdHJhaW50L2lzb2JqZWN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvYW5kb3BlcmF0b3IubWpzIiwgIi4uL2Nhc2VzL2NvbnN0cmFpbnQvYW5kb3BlcmF0b3IubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pc2FycmF5Lm1qcyIsICIuLi9jYXNlcy9jb25zdHJhaW50L2lzYXJyYXkubWpzIiwgIi4uL2Nhc2VzL2NvbnN0cmFpbnQvdmFsaWQubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL25vZGVsaXN0Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9iYXNlLm1qcyIsICIuLi9jYXNlcy90eXBlcy9tZWRpYXR5cGUubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3Rva2VubGlzdC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvcHJveHlvYnNlcnZlci5tanMiLCAiLi4vY2FzZXMvdHlwZXMvdmVyc2lvbi5tanMiLCAiLi4vY2FzZXMvdHlwZXMvZ2xvYmFsLm1qcyIsICIuLi9jYXNlcy90eXBlcy9vYnNlcnZlcmxpc3QubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2ludGVybmFsLm1qcyIsICIuLi9jYXNlcy90eXBlcy9vYnNlcnZhYmxlcXVldWUubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2RhdGF1cmwubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9iaW5hcnkubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2JpbmFyeS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvb2JzZXJ2ZXIubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9yZWdleC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvcmVnZXgubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3JhbmRvbWlkLm1qcyIsICIuLi9jYXNlcy90eXBlcy9pZC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvdXVpZC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvaXMubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3ZhbGlkYXRlLm1qcyIsICIuLi9jYXNlcy90eXBlcy90eXBlb2YubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3VuaXF1ZXF1ZXVlLm1qcyIsICIuLi9jYXNlcy90eXBlcy9zdGFjay5tanMiLCAiLi4vY2FzZXMvdHlwZXMvYmFzZXdpdGhvcHRpb25zLm1qcyIsICIuLi9jYXNlcy90eXBlcy9ub2RlLm1qcyIsICIuLi9jYXNlcy90eXBlcy9xdWV1ZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvbm9kZXJlY3Vyc2l2ZWl0ZXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi9mb3JtYXR0ZXIubWpzIiwgIi4uL2Nhc2VzL2kxOG4vZm9ybWF0dGVyLm1qcyIsICIuLi9jYXNlcy9pMThuL2xvY2FsZS5tanMiLCAiLi4vY2FzZXMvaTE4bi9wcm92aWRlci5tanMiLCAiLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXJzL2ZldGNoLm1qcyIsICIuLi9jYXNlcy9pMThuL3Byb3ZpZGVycy9mZXRjaC5tanMiLCAiLi4vY2FzZXMvaTE4bi9wcm92aWRlcnMvZW1iZWQubWpzIiwgIi4uL2Nhc2VzL2kxOG4vdHJhbnNsYXRpb25zLm1qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5leHBvcnQge1xuXHRpc0l0ZXJhYmxlLFxuXHRpc1ByaW1pdGl2ZSxcblx0aXNTeW1ib2wsXG5cdGlzQm9vbGVhbixcblx0aXNTdHJpbmcsXG5cdGlzT2JqZWN0LFxuXHRpc0luc3RhbmNlLFxuXHRpc0FycmF5LFxuXHRpc0Z1bmN0aW9uLFxuXHRpc0ludGVnZXIsXG59O1xuXG4vKipcbiAqIFdpdGggdGhpcyBmdW5jdGlvbiB5b3UgY2FuIGNoZWNrIGlmIGEgdmFsdWUgaXMgaXRlcmFibGUuXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBtZXRob2QgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5UeXBlcy5pc1ByaW1pdGl2ZSgpYC5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtMS5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICovXG5mdW5jdGlvbiBpc0l0ZXJhYmxlKHZhbHVlKSB7XG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlPy5bU3ltYm9sLml0ZXJhdG9yXSA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBwcmltaXRpdmUgKHN0cmluZywgbnVtYmVyLCBib29sZWFuLCBOYU4sIHVuZGVmaW5lZCwgbnVsbCBvciBzeW1ib2wpXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTIubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0dmFyIHR5cGU7XG5cblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHR5cGUgPSB0eXBlb2YgdmFsdWU7XG5cblx0aWYgKFxuXHRcdHR5cGUgPT09IFwic3RyaW5nXCIgfHxcblx0XHR0eXBlID09PSBcIm51bWJlclwiIHx8XG5cdFx0dHlwZSA9PT0gXCJib29sZWFuXCIgfHxcblx0XHR0eXBlID09PSBcInN5bWJvbFwiXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBzeW1ib2xcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtMy5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRyZXR1cm4gXCJzeW1ib2xcIiA9PT0gdHlwZW9mIHZhbHVlID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBib29sZWFuLlxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy00Lm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZSkge1xuXHRpZiAodmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09IGZhbHNlKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIHBhc3NlZCBpcyBhIHN0cmluZ1xuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy01Lm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgb2JqZWN0XG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTYubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcblx0aWYgKGlzQXJyYXkodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblxuXHRpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIHBhc3NlZCBpcyBhIG9iamVjdCBhbmQgaW5zdGFuY2Ugb2YgaW5zdGFuY2UuXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTcubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0geyp9IGluc3RhbmNlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuZnVuY3Rpb24gaXNJbnN0YW5jZSh2YWx1ZSwgaW5zdGFuY2UpIHtcblx0aWYgKCFpc09iamVjdCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCFpc0Z1bmN0aW9uKGluc3RhbmNlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIWluc3RhbmNlLmhhc093blByb3BlcnR5KFwicHJvdG90eXBlXCIpKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIGluc3RhbmNlID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBhcnJheVxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy04Lm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2lzQXJyYXlcbiAqL1xuZnVuY3Rpb24gaXNBcnJheSh2YWx1ZSkge1xuXHRyZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIHBhc3NlZCBpcyBhIGZ1bmN0aW9uXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTkubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuXHRpZiAoaXNBcnJheSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKGlzUHJpbWl0aXZlKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXG5cdGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYW4gaW50ZWdlci5cbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtMTAubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuZnVuY3Rpb24gaXNJbnRlZ2VyKHZhbHVlKSB7XG5cdHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7XG5cdGlzQXJyYXksXG5cdGlzQm9vbGVhbixcblx0aXNGdW5jdGlvbixcblx0aXNJbnN0YW5jZSxcblx0aXNJbnRlZ2VyLFxuXHRpc0l0ZXJhYmxlLFxuXHRpc09iamVjdCxcblx0aXNQcmltaXRpdmUsXG5cdGlzU3RyaW5nLFxuXHRpc1N5bWJvbCxcbn0gZnJvbSBcIi4vaXMubWpzXCI7XG5cbmV4cG9ydCB7XG5cdHZhbGlkYXRlSXRlcmFibGUsXG5cdHZhbGlkYXRlUHJpbWl0aXZlLFxuXHR2YWxpZGF0ZUJvb2xlYW4sXG5cdHZhbGlkYXRlU3RyaW5nLFxuXHR2YWxpZGF0ZU9iamVjdCxcblx0dmFsaWRhdGVJbnN0YW5jZSxcblx0dmFsaWRhdGVBcnJheSxcblx0dmFsaWRhdGVTeW1ib2wsXG5cdHZhbGlkYXRlRnVuY3Rpb24sXG5cdHZhbGlkYXRlSW50ZWdlcixcbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIHByaW1pdGl2ZSB0eXBlLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc1ByaW1pdGl2ZSgpIGV4Y2VwdCB0aGF0IGEgVHlwZUVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt2YWxpZGF0ZUl0ZXJhYmxlfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVJdGVyYWJsZSgnMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVJdGVyYWJsZShbXSkpICAvLyBcdTIxQTYgdmFsdWVcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgcHJpbWl0aXZlXG4gKiBAc2VlIHtAbGluayBpc1ByaW1pdGl2ZX1cbiAqIEBzZWUge0BsaW5rIE1vbnN0ZXIuVHlwZXMuaXNQcmltaXRpdmV9XG4gKiBAc2VlIHtAbGluayBNb25zdGVyLlR5cGVzI2lzUHJpbWl0aXZlfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUl0ZXJhYmxlKHZhbHVlKSB7XG5cdGlmICghaXNJdGVyYWJsZSh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGl0ZXJhYmxlXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgcHJpbWl0aXZlIHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzUHJpbWl0aXZlKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlUHJpbWl0aXZlfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVQcmltaXRpdmUoJzInKSkgIC8vIFx1MjFBNiB2YWx1ZVxuICogY29uc29sZS5sb2codmFsaWRhdGVQcmltaXRpdmUoW10pKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBwcmltaXRpdmVcbiAqIEBzZWUge0BsaW5rIGlzUHJpbWl0aXZlfVxuICogQHNlZSB7QGxpbmsgTW9uc3Rlci5UeXBlcy5pc1ByaW1pdGl2ZX1cbiAqIEBzZWUge0BsaW5rIE1vbnN0ZXIuVHlwZXMjaXNQcmltaXRpdmV9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUHJpbWl0aXZlKHZhbHVlKSB7XG5cdGlmICghaXNQcmltaXRpdmUodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhIHByaW1pdGl2ZVwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIGJvb2xlYW4gdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNCb29sZWFuKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlQm9vbGVhbn0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlQm9vbGVhbihmYWxzZSkpICAvLyBcdTIxQTYgdmFsdWVcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlQm9vbGVhbignMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVCb29sZWFuKFtdKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcblxuICogQHRocm93cyB7VHlwZUVycm9yfSAgdmFsdWUgaXMgbm90IHByaW1pdGl2ZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUJvb2xlYW4odmFsdWUpIHtcblx0aWYgKCFpc0Jvb2xlYW4odmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhIGJvb2xlYW5cIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBzdHJpbmcgdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNTdHJpbmcoKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVTdHJpbmd9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZVN0cmluZygnMicpKSAgLy8gXHUyMUE2IHZhbHVlXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZVN0cmluZyhbXSkpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN0cmluZyh2YWx1ZSkge1xuXHRpZiAoIWlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYSBzdHJpbmdcIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBvYmplY3QgdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNPYmplY3QoKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVPYmplY3R9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZU9iamVjdCh7fSkpICAvLyBcdTIxQTYgdmFsdWVcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlT2JqZWN0KCcyJykpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZU9iamVjdChbXSkpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZU9iamVjdCh2YWx1ZSkge1xuXHRpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYSBvYmplY3RcIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBvYmplY3QgaW5zdGFuY2UuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVJbnN0YW5jZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSW5zdGFuY2Uoe30sIE9iamVjdCkpIC8vIFx1MjFBNiB2YWx1ZVxuICogY29uc29sZS5sb2codmFsaWRhdGVJbnN0YW5jZSgnMicsIE9iamVjdCkpIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSW5zdGFuY2UoW10sIE9iamVjdCkpIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlSW5zdGFuY2UodmFsdWUsIGluc3RhbmNlKSB7XG5cdGlmICghaXNJbnN0YW5jZSh2YWx1ZSwgaW5zdGFuY2UpKSB7XG5cdFx0bGV0IG4gPSBcIlwiO1xuXHRcdGlmIChpc09iamVjdChpbnN0YW5jZSkgfHwgaXNGdW5jdGlvbihpbnN0YW5jZSkpIHtcblx0XHRcdG4gPSBpbnN0YW5jZT8uW1wibmFtZVwiXTtcblx0XHR9XG5cblx0XHRpZiAobikge1xuXHRcdFx0biA9IGAgJHtufWA7XG5cdFx0fVxuXG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mJHtufWApO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgYXJyYXkgdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNBcnJheSgpIGV4Y2VwdCB0aGF0IGEgVHlwZUVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt2YWxpZGF0ZUFycmF5fSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVBcnJheSgnMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVBcnJheShbXSkpICAvLyBcdTIxQTYgdmFsdWVcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGFycmF5XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQXJyYXkodmFsdWUpIHtcblx0aWYgKCFpc0FycmF5KHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYW4gYXJyYXlcIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBzeW1ib2wgdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNTeW1ib2woKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVTeW1ib2x9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZVN5bWJvbCgnMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVTeW1ib2woKSkgIC8vIFx1MjFBNiB2YWx1ZVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gc3ltYm9sXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU3ltYm9sKHZhbHVlKSB7XG5cdGlmICghaXNTeW1ib2wodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhbiBzeW1ib2xcIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBmdW5jdGlvbiB0eXBlLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc0Z1bmN0aW9uKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlRnVuY3Rpb259IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUZ1bmN0aW9uKCgpPT57fSkpIC8vIFx1MjFBNiB2YWx1ZVxuICogY29uc29sZS5sb2codmFsaWRhdGVGdW5jdGlvbignMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVGdW5jdGlvbihbXSkpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRnVuY3Rpb24odmFsdWUpIHtcblx0aWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIGlzIGFuIGludGVnZXIuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzSW50ZWdlcigpIGV4Y2VwdCB0aGF0IGEgVHlwZUVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt2YWxpZGF0ZUZ1bmN0aW9ufSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVJbnRlZ2VyKHRydWUpKSAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUludGVnZXIoJzInKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSW50ZWdlcigyKSkgIC8vIFx1MjFBNiB2YWx1ZVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS40LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUludGVnZXIodmFsdWUpIHtcblx0aWYgKCFpc0ludGVnZXIodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7XG5cdHZhbGlkYXRlRnVuY3Rpb24sXG5cdHZhbGlkYXRlT2JqZWN0LFxuXHR2YWxpZGF0ZVN0cmluZyxcbn0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IGdldEdsb2JhbCwgZ2V0R2xvYmFsT2JqZWN0LCBnZXRHbG9iYWxGdW5jdGlvbiB9O1xuXG4vKipcbiAqIEB0eXBlIHtvYmplY31cbiAqIEBwcml2YXRlXG4gKi9cbmxldCBnbG9iYWxSZWZlcmVuY2U7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBlbnZpcm9ubWVudC5cbiAqL1xuKGZ1bmN0aW9uICgpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Z2xvYmFsUmVmZXJlbmNlID0gZ2xvYmFsVGhpcztcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRnbG9iYWxSZWZlcmVuY2UgPSBzZWxmO1xuXHRcdHJldHVybjtcblx0fSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0Z2xvYmFsUmVmZXJlbmNlID0gd2luZG93O1xuXHRcdHJldHVybjtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBlLCBcIl9fbW9uc3Rlcl9fXCIsIHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHR9KTtcblxuXHRpZiAodHlwZW9mIF9fbW9uc3Rlcl9fID09PSBcIm9iamVjdFwiKSB7XG5cdFx0X19tb25zdGVyX18uZ2xvYmFsVGhpcyA9IF9fbW9uc3Rlcl9fO1xuXHRcdGRlbGV0ZSBPYmplY3QucHJvdG90eXBlLl9fbW9uc3Rlcl9fO1xuXG5cdFx0Z2xvYmFsUmVmZXJlbmNlID0gZ2xvYmFsVGhpcztcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0cnkge1xuXHRcdGdsb2JhbFJlZmVyZW5jZSA9IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcblx0fSBjYXRjaCAoZSkge31cblxuXHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBlbnZpcm9ubWVudC5cIik7XG59KSgpO1xuXG4vKipcbiAqIFJldHVybiBnbG9iYWxUaGlzXG4gKlxuICogSWYgZ2xvYmFsVGhpcyBpcyBub3QgYXZhaWxhYmxlLCBpdCB3aWxsIGJlIHBvbHlmaWxsZWRcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEByZXR1cm5zIHtvYmplY30gZ2xvYmFsVGhpc1xuICovXG5mdW5jdGlvbiBnZXRHbG9iYWwoKSB7XG5cdHJldHVybiBnbG9iYWxSZWZlcmVuY2U7XG59XG5cbi8qKlxuICogUmV0dXJuIGdsb2JhbCBvYmplY3Qgb3IgdGhyb3cgRXJyb3JcbiAqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIG1ldGhvZCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLlR5cGVzLmdldEdsb2JhbE9iamVjdCgpYC5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtNb25zdGVyfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9tb25zdGVyLm1qcyc7XG4gKiBNb25zdGVyLlR5cGVzLmdldEdsb2JhbE9iamVjdCgnZG9jdW1lbnQnKVxuICogLy8gXHUyMUE2IHsgfVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFsc28gaW50ZWdyYXRlIHRoaXMgZnVuY3Rpb24gaW5kaXZpZHVhbGx5LlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge2dldEdsb2JhbE9iamVjdH0gZnJvbSAnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9Ac2NodWthaS9tb25zdGVyQDEuMzAuMC9kaXN0L21vZHVsZXMvdHlwZXMvZ2xvYmFsLm1qcyc7XG4gKiBnZXRHbG9iYWxPYmplY3QoJ2RvY3VtZW50JylcbiAqIC8vIFx1MjFBNiB7IH1cbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge29iamVjfVxuICogQHRocm93cyB7RXJyb3J9IHRoZSBvYmplY3QgaXMgbm90IGRlZmluZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRHbG9iYWxPYmplY3QobmFtZSkge1xuXHR2YWxpZGF0ZVN0cmluZyhuYW1lKTtcblx0Y29uc3QgbyA9IGdsb2JhbFJlZmVyZW5jZT8uW25hbWVdO1xuXHRpZiAodHlwZW9mIG8gPT09IFwidW5kZWZpbmVkXCIpXG5cdFx0dGhyb3cgbmV3IEVycm9yKGB0aGUgb2JqZWN0ICR7bmFtZX0gaXMgbm90IGRlZmluZWRgKTtcblx0dmFsaWRhdGVPYmplY3Qobyk7XG5cdHJldHVybiBvO1xufVxuXG4vKipcbiAqIFJldHVybiBnbG9iYWwgZnVuY3Rpb24gb3IgdGhyb3cgRXJyb3JcbiAqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIG1ldGhvZCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLlR5cGVzLmdldEdsb2JhbEZ1bmN0aW9uKClgLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge01vbnN0ZXJ9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL21vbnN0ZXIubWpzJztcbiAqIGNvbnNvbGUubG9nKE1vbnN0ZXIuVHlwZXMuZ2V0R2xvYmFsRnVuY3Rpb24oJ3BhcnNlSW50JykpIC8vIFx1MjFBNiBmIHBhcnNlSW50KCkgeyB9XG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWxzbyBpbnRlZ3JhdGUgdGhpcyBmdW5jdGlvbiBpbmRpdmlkdWFsbHkuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7Z2V0R2xvYmFsRnVuY3Rpb259IGZyb20gJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQHNjaHVrYWkvbW9uc3RlckAxLjMwLjAvZGlzdC9tb2R1bGVzL3R5cGVzL2dsb2JhbC5tanMnO1xuICogY29uc29sZS5sb2coZ2V0R2xvYmFsRnVuY3Rpb24oJ3BhcnNlSW50JykpIC8vIFx1MjFBNiBmIHBhcnNlSW50KCkgeyB9XG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm4ge29iamVjfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuICogQHRocm93cyB7RXJyb3J9IHRoZSBmdW5jdGlvbiBpcyBub3QgZGVmaW5lZFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0R2xvYmFsRnVuY3Rpb24obmFtZSkge1xuXHR2YWxpZGF0ZVN0cmluZyhuYW1lKTtcblx0Y29uc3QgZiA9IGdsb2JhbFJlZmVyZW5jZT8uW25hbWVdO1xuXHRpZiAodHlwZW9mIGYgPT09IFwidW5kZWZpbmVkXCIpXG5cdFx0dGhyb3cgbmV3IEVycm9yKGB0aGUgZnVuY3Rpb24gJHtuYW1lfSBpcyBub3QgZGVmaW5lZGApO1xuXHR2YWxpZGF0ZUZ1bmN0aW9uKGYpO1xuXHRyZXR1cm4gZjtcbn1cbiIsICIvKiFcbiAqIGFzc2VydGlvbi1lcnJvclxuICogQ29weXJpZ2h0KGMpIDIwMTMgSmFrZSBMdWVyIDxqYWtlQHF1YWxpYW5jeS5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKiFcbiAqIFJldHVybiBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogb25lIG9iamVjdCB0byBhbm90aGVyIGV4Y2x1ZGluZyBhbnkgb3JpZ2luYWxseVxuICogbGlzdGVkLiBSZXR1cm5lZCBmdW5jdGlvbiB3aWxsIGNyZWF0ZSBhIG5ldyBge31gLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBleGNsdWRlZCBwcm9wZXJ0aWVzIC4uLlxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cblxuZnVuY3Rpb24gZXhjbHVkZSAoKSB7XG4gIHZhciBleGNsdWRlcyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblxuICBmdW5jdGlvbiBleGNsdWRlUHJvcHMgKHJlcywgb2JqKSB7XG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmICghfmV4Y2x1ZGVzLmluZGV4T2Yoa2V5KSkgcmVzW2tleV0gPSBvYmpba2V5XTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiBleHRlbmRFeGNsdWRlICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKVxuICAgICAgLCBpID0gMFxuICAgICAgLCByZXMgPSB7fTtcblxuICAgIGZvciAoOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgZXhjbHVkZVByb3BzKHJlcywgYXJnc1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcbn07XG5cbi8qIVxuICogUHJpbWFyeSBFeHBvcnRzXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBBc3NlcnRpb25FcnJvcjtcblxuLyoqXG4gKiAjIyMgQXNzZXJ0aW9uRXJyb3JcbiAqXG4gKiBBbiBleHRlbnNpb24gb2YgdGhlIEphdmFTY3JpcHQgYEVycm9yYCBjb25zdHJ1Y3RvciBmb3JcbiAqIGFzc2VydGlvbiBhbmQgdmFsaWRhdGlvbiBzY2VuYXJpb3MuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIHRvIGluY2x1ZGUgKG9wdGlvbmFsKVxuICogQHBhcmFtIHtjYWxsZWV9IHN0YXJ0IHN0YWNrIGZ1bmN0aW9uIChvcHRpb25hbClcbiAqL1xuXG5mdW5jdGlvbiBBc3NlcnRpb25FcnJvciAobWVzc2FnZSwgX3Byb3BzLCBzc2YpIHtcbiAgdmFyIGV4dGVuZCA9IGV4Y2x1ZGUoJ25hbWUnLCAnbWVzc2FnZScsICdzdGFjaycsICdjb25zdHJ1Y3RvcicsICd0b0pTT04nKVxuICAgICwgcHJvcHMgPSBleHRlbmQoX3Byb3BzIHx8IHt9KTtcblxuICAvLyBkZWZhdWx0IHZhbHVlc1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdVbnNwZWNpZmllZCBBc3NlcnRpb25FcnJvcic7XG4gIHRoaXMuc2hvd0RpZmYgPSBmYWxzZTtcblxuICAvLyBjb3B5IGZyb20gcHJvcGVydGllc1xuICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICB0aGlzW2tleV0gPSBwcm9wc1trZXldO1xuICB9XG5cbiAgLy8gY2FwdHVyZSBzdGFjayB0cmFjZVxuICBzc2YgPSBzc2YgfHwgQXNzZXJ0aW9uRXJyb3I7XG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHNzZik7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgdGhpcy5zdGFjayA9IGUuc3RhY2s7XG4gICAgfVxuICB9XG59XG5cbi8qIVxuICogSW5oZXJpdCBmcm9tIEVycm9yLnByb3RvdHlwZVxuICovXG5cbkFzc2VydGlvbkVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcblxuLyohXG4gKiBTdGF0aWNhbGx5IHNldCBuYW1lXG4gKi9cblxuQXNzZXJ0aW9uRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnQXNzZXJ0aW9uRXJyb3InO1xuXG4vKiFcbiAqIEVuc3VyZSBjb3JyZWN0IGNvbnN0cnVjdG9yXG4gKi9cblxuQXNzZXJ0aW9uRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXNzZXJ0aW9uRXJyb3I7XG5cbi8qKlxuICogQWxsb3cgZXJyb3JzIHRvIGJlIGNvbnZlcnRlZCB0byBKU09OIGZvciBzdGF0aWMgdHJhbnNmZXIuXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBpbmNsdWRlIHN0YWNrIChkZWZhdWx0OiBgdHJ1ZWApXG4gKiBAcmV0dXJuIHtPYmplY3R9IG9iamVjdCB0aGF0IGNhbiBiZSBgSlNPTi5zdHJpbmdpZnlgXG4gKi9cblxuQXNzZXJ0aW9uRXJyb3IucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIChzdGFjaykge1xuICB2YXIgZXh0ZW5kID0gZXhjbHVkZSgnY29uc3RydWN0b3InLCAndG9KU09OJywgJ3N0YWNrJylcbiAgICAsIHByb3BzID0gZXh0ZW5kKHsgbmFtZTogdGhpcy5uYW1lIH0sIHRoaXMpO1xuXG4gIC8vIGluY2x1ZGUgc3RhY2sgaWYgZXhpc3RzIGFuZCBub3QgdHVybmVkIG9mZlxuICBpZiAoZmFsc2UgIT09IHN0YWNrICYmIHRoaXMuc3RhY2spIHtcbiAgICBwcm9wcy5zdGFjayA9IHRoaXMuc3RhY2s7XG4gIH1cblxuICByZXR1cm4gcHJvcHM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuLyogIVxuICogQ2hhaSAtIHBhdGh2YWwgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2xvZ2ljYWxwYXJhZG94L2ZpbHRyXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMjIyAuaGFzUHJvcGVydHkob2JqZWN0LCBuYW1lKVxuICpcbiAqIFRoaXMgYWxsb3dzIGNoZWNraW5nIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBvd25cbiAqIG9yIGluaGVyaXRlZCBmcm9tIHByb3RvdHlwZSBjaGFpbiBuYW1lZCBwcm9wZXJ0eS5cbiAqXG4gKiBCYXNpY2FsbHkgZG9lcyB0aGUgc2FtZSB0aGluZyBhcyB0aGUgYGluYFxuICogb3BlcmF0b3IgYnV0IHdvcmtzIHByb3Blcmx5IHdpdGggbnVsbC91bmRlZmluZWQgdmFsdWVzXG4gKiBhbmQgb3RoZXIgcHJpbWl0aXZlcy5cbiAqXG4gKiAgICAgdmFyIG9iaiA9IHtcbiAqICAgICAgICAgYXJyOiBbJ2EnLCAnYicsICdjJ11cbiAqICAgICAgICwgc3RyOiAnSGVsbG8nXG4gKiAgICAgfVxuICpcbiAqIFRoZSBmb2xsb3dpbmcgd291bGQgYmUgdGhlIHJlc3VsdHMuXG4gKlxuICogICAgIGhhc1Byb3BlcnR5KG9iaiwgJ3N0cicpOyAgLy8gdHJ1ZVxuICogICAgIGhhc1Byb3BlcnR5KG9iaiwgJ2NvbnN0cnVjdG9yJyk7ICAvLyB0cnVlXG4gKiAgICAgaGFzUHJvcGVydHkob2JqLCAnYmFyJyk7ICAvLyBmYWxzZVxuICpcbiAqICAgICBoYXNQcm9wZXJ0eShvYmouc3RyLCAnbGVuZ3RoJyk7IC8vIHRydWVcbiAqICAgICBoYXNQcm9wZXJ0eShvYmouc3RyLCAxKTsgIC8vIHRydWVcbiAqICAgICBoYXNQcm9wZXJ0eShvYmouc3RyLCA1KTsgIC8vIGZhbHNlXG4gKlxuICogICAgIGhhc1Byb3BlcnR5KG9iai5hcnIsICdsZW5ndGgnKTsgIC8vIHRydWVcbiAqICAgICBoYXNQcm9wZXJ0eShvYmouYXJyLCAyKTsgIC8vIHRydWVcbiAqICAgICBoYXNQcm9wZXJ0eShvYmouYXJyLCAzKTsgIC8vIGZhbHNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtTdHJpbmd8U3ltYm9sfSBuYW1lXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gd2hldGhlciBpdCBleGlzdHNcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIGhhc1Byb3BlcnR5XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGhhc1Byb3BlcnR5KG9iaiwgbmFtZSkge1xuICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcgfHwgb2JqID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gVGhlIGBpbmAgb3BlcmF0b3IgZG9lcyBub3Qgd29yayB3aXRoIHByaW1pdGl2ZXMuXG4gIHJldHVybiBuYW1lIGluIE9iamVjdChvYmopO1xufVxuXG4vKiAhXG4gKiAjIyBwYXJzZVBhdGgocGF0aClcbiAqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdXNlZCB0byBwYXJzZSBzdHJpbmcgb2JqZWN0XG4gKiBwYXRocy4gVXNlIGluIGNvbmp1bmN0aW9uIHdpdGggYGludGVybmFsR2V0UGF0aFZhbHVlYC5cbiAqXG4gKiAgICAgIHZhciBwYXJzZWQgPSBwYXJzZVBhdGgoJ215b2JqZWN0LnByb3BlcnR5LnN1YnByb3AnKTtcbiAqXG4gKiAjIyMgUGF0aHM6XG4gKlxuICogKiBDYW4gYmUgaW5maW5pdGVseSBkZWVwIGFuZCBuZXN0ZWQuXG4gKiAqIEFycmF5cyBhcmUgYWxzbyB2YWxpZCB1c2luZyB0aGUgZm9ybWFsIGBteW9iamVjdC5kb2N1bWVudFszXS5wcm9wZXJ0eWAuXG4gKiAqIExpdGVyYWwgZG90cyBhbmQgYnJhY2tldHMgKG5vdCBkZWxpbWl0ZXIpIG11c3QgYmUgYmFja3NsYXNoLWVzY2FwZWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqIEByZXR1cm5zIHtPYmplY3R9IHBhcnNlZFxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2VQYXRoKHBhdGgpIHtcbiAgdmFyIHN0ciA9IHBhdGgucmVwbGFjZSgvKFteXFxcXF0pXFxbL2csICckMS5bJyk7XG4gIHZhciBwYXJ0cyA9IHN0ci5tYXRjaCgvKFxcXFxcXC58W14uXSs/KSsvZyk7XG4gIHJldHVybiBwYXJ0cy5tYXAoZnVuY3Rpb24gbWFwTWF0Y2hlcyh2YWx1ZSkge1xuICAgIGlmIChcbiAgICAgIHZhbHVlID09PSAnY29uc3RydWN0b3InIHx8XG4gICAgICB2YWx1ZSA9PT0gJ19fcHJvdG9fXycgfHxcbiAgICAgIHZhbHVlID09PSAncHJvdG90eXBlJ1xuICAgICkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICB2YXIgcmVnZXhwID0gL15cXFsoXFxkKylcXF0kLztcbiAgICB2YXIgbUFyciA9IHJlZ2V4cC5leGVjKHZhbHVlKTtcbiAgICB2YXIgcGFyc2VkID0gbnVsbDtcbiAgICBpZiAobUFycikge1xuICAgICAgcGFyc2VkID0geyBpOiBwYXJzZUZsb2F0KG1BcnJbMV0pIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZCA9IHsgcDogdmFsdWUucmVwbGFjZSgvXFxcXChbLltcXF1dKS9nLCAnJDEnKSB9O1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH0pO1xufVxuXG4vKiAhXG4gKiAjIyBpbnRlcm5hbEdldFBhdGhWYWx1ZShvYmosIHBhcnNlZFssIHBhdGhEZXB0aF0pXG4gKlxuICogSGVscGVyIGNvbXBhbmlvbiBmdW5jdGlvbiBmb3IgYC5wYXJzZVBhdGhgIHRoYXQgcmV0dXJuc1xuICogdGhlIHZhbHVlIGxvY2F0ZWQgYXQgdGhlIHBhcnNlZCBhZGRyZXNzLlxuICpcbiAqICAgICAgdmFyIHZhbHVlID0gZ2V0UGF0aFZhbHVlKG9iaiwgcGFyc2VkKTtcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IHRvIHNlYXJjaCBhZ2FpbnN0XG4gKiBAcGFyYW0ge09iamVjdH0gcGFyc2VkIGRlZmluaXRpb24gZnJvbSBgcGFyc2VQYXRoYC5cbiAqIEBwYXJhbSB7TnVtYmVyfSBkZXB0aCAobmVzdGluZyBsZXZlbCkgb2YgdGhlIHByb3BlcnR5IHdlIHdhbnQgdG8gcmV0cmlldmVcbiAqIEByZXR1cm5zIHtPYmplY3R8VW5kZWZpbmVkfSB2YWx1ZVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gaW50ZXJuYWxHZXRQYXRoVmFsdWUob2JqLCBwYXJzZWQsIHBhdGhEZXB0aCkge1xuICB2YXIgdGVtcG9yYXJ5VmFsdWUgPSBvYmo7XG4gIHZhciByZXMgPSBudWxsO1xuICBwYXRoRGVwdGggPSB0eXBlb2YgcGF0aERlcHRoID09PSAndW5kZWZpbmVkJyA/IHBhcnNlZC5sZW5ndGggOiBwYXRoRGVwdGg7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoRGVwdGg7IGkrKykge1xuICAgIHZhciBwYXJ0ID0gcGFyc2VkW2ldO1xuICAgIGlmICh0ZW1wb3JhcnlWYWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiBwYXJ0LnAgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRlbXBvcmFyeVZhbHVlID0gdGVtcG9yYXJ5VmFsdWVbcGFydC5pXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRlbXBvcmFyeVZhbHVlID0gdGVtcG9yYXJ5VmFsdWVbcGFydC5wXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGkgPT09IHBhdGhEZXB0aCAtIDEpIHtcbiAgICAgICAgcmVzID0gdGVtcG9yYXJ5VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxuLyogIVxuICogIyMgaW50ZXJuYWxTZXRQYXRoVmFsdWUob2JqLCB2YWx1ZSwgcGFyc2VkKVxuICpcbiAqIENvbXBhbmlvbiBmdW5jdGlvbiBmb3IgYHBhcnNlUGF0aGAgdGhhdCBzZXRzXG4gKiB0aGUgdmFsdWUgbG9jYXRlZCBhdCBhIHBhcnNlZCBhZGRyZXNzLlxuICpcbiAqICBpbnRlcm5hbFNldFBhdGhWYWx1ZShvYmosICd2YWx1ZScsIHBhcnNlZCk7XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCB0byBzZWFyY2ggYW5kIGRlZmluZSBvblxuICogQHBhcmFtIHsqfSB2YWx1ZSB0byB1c2UgdXBvbiBzZXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJzZWQgZGVmaW5pdGlvbiBmcm9tIGBwYXJzZVBhdGhgXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBpbnRlcm5hbFNldFBhdGhWYWx1ZShvYmosIHZhbCwgcGFyc2VkKSB7XG4gIHZhciB0ZW1wT2JqID0gb2JqO1xuICB2YXIgcGF0aERlcHRoID0gcGFyc2VkLmxlbmd0aDtcbiAgdmFyIHBhcnQgPSBudWxsO1xuICAvLyBIZXJlIHdlIGl0ZXJhdGUgdGhyb3VnaCBldmVyeSBwYXJ0IG9mIHRoZSBwYXRoXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aERlcHRoOyBpKyspIHtcbiAgICB2YXIgcHJvcE5hbWUgPSBudWxsO1xuICAgIHZhciBwcm9wVmFsID0gbnVsbDtcbiAgICBwYXJ0ID0gcGFyc2VkW2ldO1xuXG4gICAgLy8gSWYgaXQncyB0aGUgbGFzdCBwYXJ0IG9mIHRoZSBwYXRoLCB3ZSBzZXQgdGhlICdwcm9wTmFtZScgdmFsdWUgd2l0aCB0aGUgcHJvcGVydHkgbmFtZVxuICAgIGlmIChpID09PSBwYXRoRGVwdGggLSAxKSB7XG4gICAgICBwcm9wTmFtZSA9IHR5cGVvZiBwYXJ0LnAgPT09ICd1bmRlZmluZWQnID8gcGFydC5pIDogcGFydC5wO1xuICAgICAgLy8gTm93IHdlIHNldCB0aGUgcHJvcGVydHkgd2l0aCB0aGUgbmFtZSBoZWxkIGJ5ICdwcm9wTmFtZScgb24gb2JqZWN0IHdpdGggdGhlIGRlc2lyZWQgdmFsXG4gICAgICB0ZW1wT2JqW3Byb3BOYW1lXSA9IHZhbDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwYXJ0LnAgIT09ICd1bmRlZmluZWQnICYmIHRlbXBPYmpbcGFydC5wXSkge1xuICAgICAgdGVtcE9iaiA9IHRlbXBPYmpbcGFydC5wXTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwYXJ0LmkgIT09ICd1bmRlZmluZWQnICYmIHRlbXBPYmpbcGFydC5pXSkge1xuICAgICAgdGVtcE9iaiA9IHRlbXBPYmpbcGFydC5pXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlIG9iaiBkb2Vzbid0IGhhdmUgdGhlIHByb3BlcnR5IHdlIGNyZWF0ZSBvbmUgd2l0aCB0aGF0IG5hbWUgdG8gZGVmaW5lIGl0XG4gICAgICB2YXIgbmV4dCA9IHBhcnNlZFtpICsgMV07XG4gICAgICAvLyBIZXJlIHdlIHNldCB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgd2hpY2ggd2lsbCBiZSBkZWZpbmVkXG4gICAgICBwcm9wTmFtZSA9IHR5cGVvZiBwYXJ0LnAgPT09ICd1bmRlZmluZWQnID8gcGFydC5pIDogcGFydC5wO1xuICAgICAgLy8gSGVyZSB3ZSBkZWNpZGUgaWYgdGhpcyBwcm9wZXJ0eSB3aWxsIGJlIGFuIGFycmF5IG9yIGEgbmV3IG9iamVjdFxuICAgICAgcHJvcFZhbCA9IHR5cGVvZiBuZXh0LnAgPT09ICd1bmRlZmluZWQnID8gW10gOiB7fTtcbiAgICAgIHRlbXBPYmpbcHJvcE5hbWVdID0gcHJvcFZhbDtcbiAgICAgIHRlbXBPYmogPSB0ZW1wT2JqW3Byb3BOYW1lXTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiAjIyMgLmdldFBhdGhJbmZvKG9iamVjdCwgcGF0aClcbiAqXG4gKiBUaGlzIGFsbG93cyB0aGUgcmV0cmlldmFsIG9mIHByb3BlcnR5IGluZm8gaW4gYW5cbiAqIG9iamVjdCBnaXZlbiBhIHN0cmluZyBwYXRoLlxuICpcbiAqIFRoZSBwYXRoIGluZm8gY29uc2lzdHMgb2YgYW4gb2JqZWN0IHdpdGggdGhlXG4gKiBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAqIHBhcmVudCAtIFRoZSBwYXJlbnQgb2JqZWN0IG9mIHRoZSBwcm9wZXJ0eSByZWZlcmVuY2VkIGJ5IGBwYXRoYFxuICogKiBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGZpbmFsIHByb3BlcnR5LCBhIG51bWJlciBpZiBpdCB3YXMgYW4gYXJyYXkgaW5kZXhlclxuICogKiB2YWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHksIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIGB1bmRlZmluZWRgXG4gKiAqIGV4aXN0cyAtIFdoZXRoZXIgdGhlIHByb3BlcnR5IGV4aXN0cyBvciBub3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0aFxuICogQHJldHVybnMge09iamVjdH0gaW5mb1xuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgZ2V0UGF0aEluZm9cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZ2V0UGF0aEluZm8ob2JqLCBwYXRoKSB7XG4gIHZhciBwYXJzZWQgPSBwYXJzZVBhdGgocGF0aCk7XG4gIHZhciBsYXN0ID0gcGFyc2VkW3BhcnNlZC5sZW5ndGggLSAxXTtcbiAgdmFyIGluZm8gPSB7XG4gICAgcGFyZW50OlxuICAgICAgcGFyc2VkLmxlbmd0aCA+IDEgP1xuICAgICAgICBpbnRlcm5hbEdldFBhdGhWYWx1ZShvYmosIHBhcnNlZCwgcGFyc2VkLmxlbmd0aCAtIDEpIDpcbiAgICAgICAgb2JqLFxuICAgIG5hbWU6IGxhc3QucCB8fCBsYXN0LmksXG4gICAgdmFsdWU6IGludGVybmFsR2V0UGF0aFZhbHVlKG9iaiwgcGFyc2VkKSxcbiAgfTtcbiAgaW5mby5leGlzdHMgPSBoYXNQcm9wZXJ0eShpbmZvLnBhcmVudCwgaW5mby5uYW1lKTtcblxuICByZXR1cm4gaW5mbztcbn1cblxuLyoqXG4gKiAjIyMgLmdldFBhdGhWYWx1ZShvYmplY3QsIHBhdGgpXG4gKlxuICogVGhpcyBhbGxvd3MgdGhlIHJldHJpZXZhbCBvZiB2YWx1ZXMgaW4gYW5cbiAqIG9iamVjdCBnaXZlbiBhIHN0cmluZyBwYXRoLlxuICpcbiAqICAgICB2YXIgb2JqID0ge1xuICogICAgICAgICBwcm9wMToge1xuICogICAgICAgICAgICAgYXJyOiBbJ2EnLCAnYicsICdjJ11cbiAqICAgICAgICAgICAsIHN0cjogJ0hlbGxvJ1xuICogICAgICAgICB9XG4gKiAgICAgICAsIHByb3AyOiB7XG4gKiAgICAgICAgICAgICBhcnI6IFsgeyBuZXN0ZWQ6ICdVbml2ZXJzZScgfSBdXG4gKiAgICAgICAgICAgLCBzdHI6ICdIZWxsbyBhZ2FpbiEnXG4gKiAgICAgICAgIH1cbiAqICAgICB9XG4gKlxuICogVGhlIGZvbGxvd2luZyB3b3VsZCBiZSB0aGUgcmVzdWx0cy5cbiAqXG4gKiAgICAgZ2V0UGF0aFZhbHVlKG9iaiwgJ3Byb3AxLnN0cicpOyAvLyBIZWxsb1xuICogICAgIGdldFBhdGhWYWx1ZShvYmosICdwcm9wMS5hdHRbMl0nKTsgLy8gYlxuICogICAgIGdldFBhdGhWYWx1ZShvYmosICdwcm9wMi5hcnJbMF0ubmVzdGVkJyk7IC8vIFVuaXZlcnNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqIEByZXR1cm5zIHtPYmplY3R9IHZhbHVlIG9yIGB1bmRlZmluZWRgXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBnZXRQYXRoVmFsdWVcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZ2V0UGF0aFZhbHVlKG9iaiwgcGF0aCkge1xuICB2YXIgaW5mbyA9IGdldFBhdGhJbmZvKG9iaiwgcGF0aCk7XG4gIHJldHVybiBpbmZvLnZhbHVlO1xufVxuXG4vKipcbiAqICMjIyAuc2V0UGF0aFZhbHVlKG9iamVjdCwgcGF0aCwgdmFsdWUpXG4gKlxuICogRGVmaW5lIHRoZSB2YWx1ZSBpbiBhbiBvYmplY3QgYXQgYSBnaXZlbiBzdHJpbmcgcGF0aC5cbiAqXG4gKiBgYGBqc1xuICogdmFyIG9iaiA9IHtcbiAqICAgICBwcm9wMToge1xuICogICAgICAgICBhcnI6IFsnYScsICdiJywgJ2MnXVxuICogICAgICAgLCBzdHI6ICdIZWxsbydcbiAqICAgICB9XG4gKiAgICwgcHJvcDI6IHtcbiAqICAgICAgICAgYXJyOiBbIHsgbmVzdGVkOiAnVW5pdmVyc2UnIH0gXVxuICogICAgICAgLCBzdHI6ICdIZWxsbyBhZ2FpbiEnXG4gKiAgICAgfVxuICogfTtcbiAqIGBgYFxuICpcbiAqIFRoZSBmb2xsb3dpbmcgd291bGQgYmUgYWNjZXB0YWJsZS5cbiAqXG4gKiBgYGBqc1xuICogdmFyIHByb3BlcnRpZXMgPSByZXF1aXJlKCd0ZWEtcHJvcGVydGllcycpO1xuICogcHJvcGVydGllcy5zZXQob2JqLCAncHJvcDEuc3RyJywgJ0hlbGxvIFVuaXZlcnNlIScpO1xuICogcHJvcGVydGllcy5zZXQob2JqLCAncHJvcDEuYXJyWzJdJywgJ0InKTtcbiAqIHByb3BlcnRpZXMuc2V0KG9iaiwgJ3Byb3AyLmFyclswXS5uZXN0ZWQudmFsdWUnLCB7IGhlbGxvOiAndW5pdmVyc2UnIH0pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBzZXRQYXRoVmFsdWUob2JqLCBwYXRoLCB2YWwpIHtcbiAgdmFyIHBhcnNlZCA9IHBhcnNlUGF0aChwYXRoKTtcbiAgaW50ZXJuYWxTZXRQYXRoVmFsdWUob2JqLCB2YWwsIHBhcnNlZCk7XG4gIHJldHVybiBvYmo7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBoYXNQcm9wZXJ0eTogaGFzUHJvcGVydHksXG4gIGdldFBhdGhJbmZvOiBnZXRQYXRoSW5mbyxcbiAgZ2V0UGF0aFZhbHVlOiBnZXRQYXRoVmFsdWUsXG4gIHNldFBhdGhWYWx1ZTogc2V0UGF0aFZhbHVlLFxufTtcbiIsICIvKiFcbiAqIENoYWkgLSBmbGFnIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMjIyAuZmxhZyhvYmplY3QsIGtleSwgW3ZhbHVlXSlcbiAqXG4gKiBHZXQgb3Igc2V0IGEgZmxhZyB2YWx1ZSBvbiBhbiBvYmplY3QuIElmIGFcbiAqIHZhbHVlIGlzIHByb3ZpZGVkIGl0IHdpbGwgYmUgc2V0LCBlbHNlIGl0IHdpbGxcbiAqIHJldHVybiB0aGUgY3VycmVudGx5IHNldCB2YWx1ZSBvciBgdW5kZWZpbmVkYCBpZlxuICogdGhlIHZhbHVlIGlzIG5vdCBzZXQuXG4gKlxuICogICAgIHV0aWxzLmZsYWcodGhpcywgJ2ZvbycsICdiYXInKTsgLy8gc2V0dGVyXG4gKiAgICAgdXRpbHMuZmxhZyh0aGlzLCAnZm9vJyk7IC8vIGdldHRlciwgcmV0dXJucyBgYmFyYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgY29uc3RydWN0ZWQgQXNzZXJ0aW9uXG4gKiBAcGFyYW0ge1N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge01peGVkfSB2YWx1ZSAob3B0aW9uYWwpXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBmbGFnXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWcob2JqLCBrZXksIHZhbHVlKSB7XG4gIHZhciBmbGFncyA9IG9iai5fX2ZsYWdzIHx8IChvYmouX19mbGFncyA9IE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIGZsYWdzW2tleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmxhZ3Nba2V5XTtcbiAgfVxufTtcbiIsICIvKiFcbiAqIENoYWkgLSB0ZXN0IHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKiFcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXNcbiAqL1xuXG52YXIgZmxhZyA9IHJlcXVpcmUoJy4vZmxhZycpO1xuXG4vKipcbiAqICMjIyAudGVzdChvYmplY3QsIGV4cHJlc3Npb24pXG4gKlxuICogVGVzdCBhbiBvYmplY3QgZm9yIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCAoY29uc3RydWN0ZWQgQXNzZXJ0aW9uKVxuICogQHBhcmFtIHtBcmd1bWVudHN9IGNoYWkuQXNzZXJ0aW9uLnByb3RvdHlwZS5hc3NlcnQgYXJndW1lbnRzXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSB0ZXN0XG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0ZXN0KG9iaiwgYXJncykge1xuICB2YXIgbmVnYXRlID0gZmxhZyhvYmosICduZWdhdGUnKVxuICAgICwgZXhwciA9IGFyZ3NbMF07XG4gIHJldHVybiBuZWdhdGUgPyAhZXhwciA6IGV4cHI7XG59O1xuIiwgIihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG5cdHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcblx0dHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcblx0KGdsb2JhbC50eXBlRGV0ZWN0ID0gZmFjdG9yeSgpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4vKiAhXG4gKiB0eXBlLWRldGVjdFxuICogQ29weXJpZ2h0KGMpIDIwMTMgamFrZSBsdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xudmFyIHByb21pc2VFeGlzdHMgPSB0eXBlb2YgUHJvbWlzZSA9PT0gJ2Z1bmN0aW9uJztcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbnZhciBnbG9iYWxPYmplY3QgPSB0eXBlb2Ygc2VsZiA9PT0gJ29iamVjdCcgPyBzZWxmIDogZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGlkLWJsYWNrbGlzdFxuXG52YXIgc3ltYm9sRXhpc3RzID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgbWFwRXhpc3RzID0gdHlwZW9mIE1hcCAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgc2V0RXhpc3RzID0gdHlwZW9mIFNldCAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgd2Vha01hcEV4aXN0cyA9IHR5cGVvZiBXZWFrTWFwICE9PSAndW5kZWZpbmVkJztcbnZhciB3ZWFrU2V0RXhpc3RzID0gdHlwZW9mIFdlYWtTZXQgIT09ICd1bmRlZmluZWQnO1xudmFyIGRhdGFWaWV3RXhpc3RzID0gdHlwZW9mIERhdGFWaWV3ICE9PSAndW5kZWZpbmVkJztcbnZhciBzeW1ib2xJdGVyYXRvckV4aXN0cyA9IHN5bWJvbEV4aXN0cyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yICE9PSAndW5kZWZpbmVkJztcbnZhciBzeW1ib2xUb1N0cmluZ1RhZ0V4aXN0cyA9IHN5bWJvbEV4aXN0cyAmJiB0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnICE9PSAndW5kZWZpbmVkJztcbnZhciBzZXRFbnRyaWVzRXhpc3RzID0gc2V0RXhpc3RzICYmIHR5cGVvZiBTZXQucHJvdG90eXBlLmVudHJpZXMgPT09ICdmdW5jdGlvbic7XG52YXIgbWFwRW50cmllc0V4aXN0cyA9IG1hcEV4aXN0cyAmJiB0eXBlb2YgTWFwLnByb3RvdHlwZS5lbnRyaWVzID09PSAnZnVuY3Rpb24nO1xudmFyIHNldEl0ZXJhdG9yUHJvdG90eXBlID0gc2V0RW50cmllc0V4aXN0cyAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IFNldCgpLmVudHJpZXMoKSk7XG52YXIgbWFwSXRlcmF0b3JQcm90b3R5cGUgPSBtYXBFbnRyaWVzRXhpc3RzICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgTWFwKCkuZW50cmllcygpKTtcbnZhciBhcnJheUl0ZXJhdG9yRXhpc3RzID0gc3ltYm9sSXRlcmF0b3JFeGlzdHMgJiYgdHlwZW9mIEFycmF5LnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nO1xudmFyIGFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBhcnJheUl0ZXJhdG9yRXhpc3RzICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihbXVtTeW1ib2wuaXRlcmF0b3JdKCkpO1xudmFyIHN0cmluZ0l0ZXJhdG9yRXhpc3RzID0gc3ltYm9sSXRlcmF0b3JFeGlzdHMgJiYgdHlwZW9mIFN0cmluZy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJztcbnZhciBzdHJpbmdJdGVyYXRvclByb3RvdHlwZSA9IHN0cmluZ0l0ZXJhdG9yRXhpc3RzICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZignJ1tTeW1ib2wuaXRlcmF0b3JdKCkpO1xudmFyIHRvU3RyaW5nTGVmdFNsaWNlTGVuZ3RoID0gODtcbnZhciB0b1N0cmluZ1JpZ2h0U2xpY2VMZW5ndGggPSAtMTtcbi8qKlxuICogIyMjIHR5cGVPZiAob2JqKVxuICpcbiAqIFVzZXMgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIHRvIGRldGVybWluZSB0aGUgdHlwZSBvZiBhbiBvYmplY3QsXG4gKiBub3JtYWxpc2luZyBiZWhhdmlvdXIgYWNyb3NzIGVuZ2luZSB2ZXJzaW9ucyAmIHdlbGwgb3B0aW1pc2VkLlxuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IG9iamVjdFxuICogQHJldHVybiB7U3RyaW5nfSBvYmplY3QgdHlwZVxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gdHlwZURldGVjdChvYmopIHtcbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgICogUHJlOlxuICAgKiAgIHN0cmluZyBsaXRlcmFsICAgICB4IDMsMDM5LDAzNSBvcHMvc2VjIFx1MDBCMTEuNjIlICg3OCBydW5zIHNhbXBsZWQpXG4gICAqICAgYm9vbGVhbiBsaXRlcmFsICAgIHggMSw0MjQsMTM4IG9wcy9zZWMgXHUwMEIxNC41NCUgKDc1IHJ1bnMgc2FtcGxlZClcbiAgICogICBudW1iZXIgbGl0ZXJhbCAgICAgeCAxLDY1MywxNTMgb3BzL3NlYyBcdTAwQjExLjkxJSAoODIgcnVucyBzYW1wbGVkKVxuICAgKiAgIHVuZGVmaW5lZCAgICAgICAgICB4IDksOTc4LDY2MCBvcHMvc2VjIFx1MDBCMTEuOTIlICg3NSBydW5zIHNhbXBsZWQpXG4gICAqICAgZnVuY3Rpb24gICAgICAgICAgIHggMiw1NTYsNzY5IG9wcy9zZWMgXHUwMEIxMS43MyUgKDc3IHJ1bnMgc2FtcGxlZClcbiAgICogUG9zdDpcbiAgICogICBzdHJpbmcgbGl0ZXJhbCAgICAgeCAzOCw1NjQsNzk2IG9wcy9zZWMgXHUwMEIxMS4xNSUgKDc5IHJ1bnMgc2FtcGxlZClcbiAgICogICBib29sZWFuIGxpdGVyYWwgICAgeCAzMSwxNDgsOTQwIG9wcy9zZWMgXHUwMEIxMS4xMCUgKDc5IHJ1bnMgc2FtcGxlZClcbiAgICogICBudW1iZXIgbGl0ZXJhbCAgICAgeCAzMiw2NzksMzMwIG9wcy9zZWMgXHUwMEIxMS45MCUgKDc4IHJ1bnMgc2FtcGxlZClcbiAgICogICB1bmRlZmluZWQgICAgICAgICAgeCAzMiwzNjMsMzY4IG9wcy9zZWMgXHUwMEIxMS4wNyUgKDgyIHJ1bnMgc2FtcGxlZClcbiAgICogICBmdW5jdGlvbiAgICAgICAgICAgeCAzMSwyOTYsODcwIG9wcy9zZWMgXHUwMEIxMC45NiUgKDgzIHJ1bnMgc2FtcGxlZClcbiAgICovXG4gIHZhciB0eXBlb2ZPYmogPSB0eXBlb2Ygb2JqO1xuICBpZiAodHlwZW9mT2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB0eXBlb2ZPYmo7XG4gIH1cblxuICAvKiAhIFNwZWVkIG9wdGltaXNhdGlvblxuICAgKiBQcmU6XG4gICAqICAgbnVsbCAgICAgICAgICAgICAgIHggMjgsNjQ1LDc2NSBvcHMvc2VjIFx1MDBCMTEuMTclICg4MiBydW5zIHNhbXBsZWQpXG4gICAqIFBvc3Q6XG4gICAqICAgbnVsbCAgICAgICAgICAgICAgIHggMzYsNDI4LDk2MiBvcHMvc2VjIFx1MDBCMTEuMzclICg4NCBydW5zIHNhbXBsZWQpXG4gICAqL1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgcmV0dXJuICdudWxsJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdpbmRvdylgYFxuICAgKiAgLSBOb2RlID09PSBcIltvYmplY3QgZ2xvYmFsXVwiXG4gICAqICAtIENocm9tZSA9PT0gXCJbb2JqZWN0IGdsb2JhbF1cIlxuICAgKiAgLSBGaXJlZm94ID09PSBcIltvYmplY3QgV2luZG93XVwiXG4gICAqICAtIFBoYW50b21KUyA9PT0gXCJbb2JqZWN0IFdpbmRvd11cIlxuICAgKiAgLSBTYWZhcmkgPT09IFwiW29iamVjdCBXaW5kb3ddXCJcbiAgICogIC0gSUUgMTEgPT09IFwiW29iamVjdCBXaW5kb3ddXCJcbiAgICogIC0gSUUgRWRnZSA9PT0gXCJbb2JqZWN0IFdpbmRvd11cIlxuICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMpYGBcbiAgICogIC0gQ2hyb21lIFdvcmtlciA9PT0gXCJbb2JqZWN0IGdsb2JhbF1cIlxuICAgKiAgLSBGaXJlZm94IFdvcmtlciA9PT0gXCJbb2JqZWN0IERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlXVwiXG4gICAqICAtIFNhZmFyaSBXb3JrZXIgPT09IFwiW29iamVjdCBEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZV1cIlxuICAgKiAgLSBJRSAxMSBXb3JrZXIgPT09IFwiW29iamVjdCBXb3JrZXJHbG9iYWxTY29wZV1cIlxuICAgKiAgLSBJRSBFZGdlIFdvcmtlciA9PT0gXCJbb2JqZWN0IFdvcmtlckdsb2JhbFNjb3BlXVwiXG4gICAqL1xuICBpZiAob2JqID09PSBnbG9iYWxPYmplY3QpIHtcbiAgICByZXR1cm4gJ2dsb2JhbCc7XG4gIH1cblxuICAvKiAhIFNwZWVkIG9wdGltaXNhdGlvblxuICAgKiBQcmU6XG4gICAqICAgYXJyYXkgbGl0ZXJhbCAgICAgIHggMiw4ODgsMzUyIG9wcy9zZWMgXHUwMEIxMC42NyUgKDgyIHJ1bnMgc2FtcGxlZClcbiAgICogUG9zdDpcbiAgICogICBhcnJheSBsaXRlcmFsICAgICAgeCAyMiw0NzksNjUwIG9wcy9zZWMgXHUwMEIxMC45NiUgKDgxIHJ1bnMgc2FtcGxlZClcbiAgICovXG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KG9iaikgJiZcbiAgICAoc3ltYm9sVG9TdHJpbmdUYWdFeGlzdHMgPT09IGZhbHNlIHx8ICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIG9iaikpXG4gICkge1xuICAgIHJldHVybiAnQXJyYXknO1xuICB9XG5cbiAgLy8gTm90IGNhY2hpbmcgZXhpc3RlbmNlIG9mIGB3aW5kb3dgIGFuZCByZWxhdGVkIHByb3BlcnRpZXMgZHVlIHRvIHBvdGVudGlhbFxuICAvLyBmb3IgYHdpbmRvd2AgdG8gYmUgdW5zZXQgYmVmb3JlIHRlc3RzIGluIHF1YXNpLWJyb3dzZXIgZW52aXJvbm1lbnRzLlxuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgJiYgd2luZG93ICE9PSBudWxsKSB7XG4gICAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Jyb3dzZXJzLmh0bWwjbG9jYXRpb24pXG4gICAgICogV2hhdFdHIEhUTUwkNy43LjMgLSBUaGUgYExvY2F0aW9uYCBpbnRlcmZhY2VcbiAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdpbmRvdy5sb2NhdGlvbilgYFxuICAgICAqICAtIElFIDw9MTEgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICAgKiAgLSBJRSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICAgKi9cbiAgICBpZiAodHlwZW9mIHdpbmRvdy5sb2NhdGlvbiA9PT0gJ29iamVjdCcgJiYgb2JqID09PSB3aW5kb3cubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiAnTG9jYXRpb24nO1xuICAgIH1cblxuICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAqIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNkb2N1bWVudClcbiAgICAgKiBXaGF0V0cgSFRNTCQzLjEuMSAtIFRoZSBgRG9jdW1lbnRgIG9iamVjdFxuICAgICAqIE5vdGU6IE1vc3QgYnJvd3NlcnMgY3VycmVudGx5IGFkaGVyIHRvIHRoZSBXM0MgRE9NIExldmVsIDIgc3BlY1xuICAgICAqICAgICAgIChodHRwczovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItSFRNTC9odG1sLmh0bWwjSUQtMjY4MDkyNjgpXG4gICAgICogICAgICAgd2hpY2ggc3VnZ2VzdHMgdGhhdCBicm93c2VycyBzaG91bGQgdXNlIEhUTUxUYWJsZUNlbGxFbGVtZW50IGZvclxuICAgICAqICAgICAgIGJvdGggVEQgYW5kIFRIIGVsZW1lbnRzLiBXaGF0V0cgc2VwYXJhdGVzIHRoZXNlLlxuICAgICAqICAgICAgIFdoYXRXRyBIVE1MIHN0YXRlczpcbiAgICAgKiAgICAgICAgID4gRm9yIGhpc3RvcmljYWwgcmVhc29ucywgV2luZG93IG9iamVjdHMgbXVzdCBhbHNvIGhhdmUgYVxuICAgICAqICAgICAgICAgPiB3cml0YWJsZSwgY29uZmlndXJhYmxlLCBub24tZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lZFxuICAgICAqICAgICAgICAgPiBIVE1MRG9jdW1lbnQgd2hvc2UgdmFsdWUgaXMgdGhlIERvY3VtZW50IGludGVyZmFjZSBvYmplY3QuXG4gICAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkb2N1bWVudClgYFxuICAgICAqICAtIENocm9tZSA9PT0gXCJbb2JqZWN0IEhUTUxEb2N1bWVudF1cIlxuICAgICAqICAtIEZpcmVmb3ggPT09IFwiW29iamVjdCBIVE1MRG9jdW1lbnRdXCJcbiAgICAgKiAgLSBTYWZhcmkgPT09IFwiW29iamVjdCBIVE1MRG9jdW1lbnRdXCJcbiAgICAgKiAgLSBJRSA8PTEwID09PSBcIltvYmplY3QgRG9jdW1lbnRdXCJcbiAgICAgKiAgLSBJRSAxMSA9PT0gXCJbb2JqZWN0IEhUTUxEb2N1bWVudF1cIlxuICAgICAqICAtIElFIEVkZ2UgPD0xMyA9PT0gXCJbb2JqZWN0IEhUTUxEb2N1bWVudF1cIlxuICAgICAqL1xuICAgIGlmICh0eXBlb2Ygd2luZG93LmRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiBvYmogPT09IHdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgcmV0dXJuICdEb2N1bWVudCc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yID09PSAnb2JqZWN0Jykge1xuICAgICAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAgICAgKiAoaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI21pbWV0eXBlYXJyYXkpXG4gICAgICAgKiBXaGF0V0cgSFRNTCQ4LjYuMS41IC0gUGx1Z2lucyAtIEludGVyZmFjZSBNaW1lVHlwZUFycmF5XG4gICAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5hdmlnYXRvci5taW1lVHlwZXMpYGBcbiAgICAgICAqICAtIElFIDw9MTAgPT09IFwiW29iamVjdCBNU01pbWVUeXBlc0NvbGxlY3Rpb25dXCJcbiAgICAgICAqL1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yLm1pbWVUeXBlcyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICBvYmogPT09IHdpbmRvdy5uYXZpZ2F0b3IubWltZVR5cGVzKSB7XG4gICAgICAgIHJldHVybiAnTWltZVR5cGVBcnJheSc7XG4gICAgICB9XG5cbiAgICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCNwbHVnaW5hcnJheSlcbiAgICAgICAqIFdoYXRXRyBIVE1MJDguNi4xLjUgLSBQbHVnaW5zIC0gSW50ZXJmYWNlIFBsdWdpbkFycmF5XG4gICAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5hdmlnYXRvci5wbHVnaW5zKWBgXG4gICAgICAgKiAgLSBJRSA8PTEwID09PSBcIltvYmplY3QgTVNQbHVnaW5zQ29sbGVjdGlvbl1cIlxuICAgICAgICovXG4gICAgICBpZiAodHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IucGx1Z2lucyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICBvYmogPT09IHdpbmRvdy5uYXZpZ2F0b3IucGx1Z2lucykge1xuICAgICAgICByZXR1cm4gJ1BsdWdpbkFycmF5JztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKHR5cGVvZiB3aW5kb3cuSFRNTEVsZW1lbnQgPT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5IVE1MRWxlbWVudCA9PT0gJ29iamVjdCcpICYmXG4gICAgICAgIG9iaiBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MRWxlbWVudCkge1xuICAgICAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAgICAqIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjcGx1Z2luYXJyYXkpXG4gICAgICAqIFdoYXRXRyBIVE1MJDQuNC40IC0gVGhlIGBibG9ja3F1b3RlYCBlbGVtZW50IC0gSW50ZXJmYWNlIGBIVE1MUXVvdGVFbGVtZW50YFxuICAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Jsb2NrcXVvdGUnKSlgYFxuICAgICAgKiAgLSBJRSA8PTEwID09PSBcIltvYmplY3QgSFRNTEJsb2NrRWxlbWVudF1cIlxuICAgICAgKi9cbiAgICAgIGlmIChvYmoudGFnTmFtZSA9PT0gJ0JMT0NLUVVPVEUnKSB7XG4gICAgICAgIHJldHVybiAnSFRNTFF1b3RlRWxlbWVudCc7XG4gICAgICB9XG5cbiAgICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2h0bWx0YWJsZWRhdGFjZWxsZWxlbWVudClcbiAgICAgICAqIFdoYXRXRyBIVE1MJDQuOS45IC0gVGhlIGB0ZGAgZWxlbWVudCAtIEludGVyZmFjZSBgSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50YFxuICAgICAgICogTm90ZTogTW9zdCBicm93c2VycyBjdXJyZW50bHkgYWRoZXIgdG8gdGhlIFczQyBET00gTGV2ZWwgMiBzcGVjXG4gICAgICAgKiAgICAgICAoaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUhUTUwvaHRtbC5odG1sI0lELTgyOTE1MDc1KVxuICAgICAgICogICAgICAgd2hpY2ggc3VnZ2VzdHMgdGhhdCBicm93c2VycyBzaG91bGQgdXNlIEhUTUxUYWJsZUNlbGxFbGVtZW50IGZvclxuICAgICAgICogICAgICAgYm90aCBURCBhbmQgVEggZWxlbWVudHMuIFdoYXRXRyBzZXBhcmF0ZXMgdGhlc2UuXG4gICAgICAgKiBUZXN0OiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKSlcbiAgICAgICAqICAtIENocm9tZSA9PT0gXCJbb2JqZWN0IEhUTUxUYWJsZUNlbGxFbGVtZW50XVwiXG4gICAgICAgKiAgLSBGaXJlZm94ID09PSBcIltvYmplY3QgSFRNTFRhYmxlQ2VsbEVsZW1lbnRdXCJcbiAgICAgICAqICAtIFNhZmFyaSA9PT0gXCJbb2JqZWN0IEhUTUxUYWJsZUNlbGxFbGVtZW50XVwiXG4gICAgICAgKi9cbiAgICAgIGlmIChvYmoudGFnTmFtZSA9PT0gJ1REJykge1xuICAgICAgICByZXR1cm4gJ0hUTUxUYWJsZURhdGFDZWxsRWxlbWVudCc7XG4gICAgICB9XG5cbiAgICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2h0bWx0YWJsZWhlYWRlcmNlbGxlbGVtZW50KVxuICAgICAgICogV2hhdFdHIEhUTUwkNC45LjkgLSBUaGUgYHRkYCBlbGVtZW50IC0gSW50ZXJmYWNlIGBIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudGBcbiAgICAgICAqIE5vdGU6IE1vc3QgYnJvd3NlcnMgY3VycmVudGx5IGFkaGVyIHRvIHRoZSBXM0MgRE9NIExldmVsIDIgc3BlY1xuICAgICAgICogICAgICAgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1IVE1ML2h0bWwuaHRtbCNJRC04MjkxNTA3NSlcbiAgICAgICAqICAgICAgIHdoaWNoIHN1Z2dlc3RzIHRoYXQgYnJvd3NlcnMgc2hvdWxkIHVzZSBIVE1MVGFibGVDZWxsRWxlbWVudCBmb3JcbiAgICAgICAqICAgICAgIGJvdGggVEQgYW5kIFRIIGVsZW1lbnRzLiBXaGF0V0cgc2VwYXJhdGVzIHRoZXNlLlxuICAgICAgICogVGVzdDogT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJykpXG4gICAgICAgKiAgLSBDaHJvbWUgPT09IFwiW29iamVjdCBIVE1MVGFibGVDZWxsRWxlbWVudF1cIlxuICAgICAgICogIC0gRmlyZWZveCA9PT0gXCJbb2JqZWN0IEhUTUxUYWJsZUNlbGxFbGVtZW50XVwiXG4gICAgICAgKiAgLSBTYWZhcmkgPT09IFwiW29iamVjdCBIVE1MVGFibGVDZWxsRWxlbWVudF1cIlxuICAgICAgICovXG4gICAgICBpZiAob2JqLnRhZ05hbWUgPT09ICdUSCcpIHtcbiAgICAgICAgcmV0dXJuICdIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudCc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICBGbG9hdDY0QXJyYXkgICAgICAgeCA2MjUsNjQ0IG9wcy9zZWMgXHUwMEIxMS41OCUgKDgwIHJ1bnMgc2FtcGxlZClcbiAgKiAgIEZsb2F0MzJBcnJheSAgICAgICB4IDEsMjc5LDg1MiBvcHMvc2VjIFx1MDBCMTIuOTElICg3NyBydW5zIHNhbXBsZWQpXG4gICogICBVaW50MzJBcnJheSAgICAgICAgeCAxLDE3OCwxODUgb3BzL3NlYyBcdTAwQjExLjk1JSAoODMgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDE2QXJyYXkgICAgICAgIHggMSwwMDgsMzgwIG9wcy9zZWMgXHUwMEIxMi4yNSUgKDgwIHJ1bnMgc2FtcGxlZClcbiAgKiAgIFVpbnQ4QXJyYXkgICAgICAgICB4IDEsMTI4LDA0MCBvcHMvc2VjIFx1MDBCMTIuMTElICg4MSBydW5zIHNhbXBsZWQpXG4gICogICBJbnQzMkFycmF5ICAgICAgICAgeCAxLDE3MCwxMTkgb3BzL3NlYyBcdTAwQjEyLjg4JSAoODAgcnVucyBzYW1wbGVkKVxuICAqICAgSW50MTZBcnJheSAgICAgICAgIHggMSwxNzYsMzQ4IG9wcy9zZWMgXHUwMEIxNS43OSUgKDg2IHJ1bnMgc2FtcGxlZClcbiAgKiAgIEludDhBcnJheSAgICAgICAgICB4IDEsMDU4LDcwNyBvcHMvc2VjIFx1MDBCMTQuOTQlICg3NyBydW5zIHNhbXBsZWQpXG4gICogICBVaW50OENsYW1wZWRBcnJheSAgeCAxLDExMCw2MzMgb3BzL3NlYyBcdTAwQjE0LjIwJSAoODAgcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICBGbG9hdDY0QXJyYXkgICAgICAgeCA3LDEwNSw2NzEgb3BzL3NlYyBcdTAwQjExMy40NyUgKDY0IHJ1bnMgc2FtcGxlZClcbiAgKiAgIEZsb2F0MzJBcnJheSAgICAgICB4IDUsODg3LDkxMiBvcHMvc2VjIFx1MDBCMTEuNDYlICg4MiBydW5zIHNhbXBsZWQpXG4gICogICBVaW50MzJBcnJheSAgICAgICAgeCA2LDQ5MSw2NjEgb3BzL3NlYyBcdTAwQjExLjc2JSAoNzkgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDE2QXJyYXkgICAgICAgIHggNiw1NTksNzk1IG9wcy9zZWMgXHUwMEIxMS42NyUgKDgyIHJ1bnMgc2FtcGxlZClcbiAgKiAgIFVpbnQ4QXJyYXkgICAgICAgICB4IDYsNDYzLDk2NiBvcHMvc2VjIFx1MDBCMTEuNDMlICg4NSBydW5zIHNhbXBsZWQpXG4gICogICBJbnQzMkFycmF5ICAgICAgICAgeCA1LDY0MSw4NDEgb3BzL3NlYyBcdTAwQjEzLjQ5JSAoODEgcnVucyBzYW1wbGVkKVxuICAqICAgSW50MTZBcnJheSAgICAgICAgIHggNiw1ODMsNTExIG9wcy9zZWMgXHUwMEIxMS45OCUgKDgwIHJ1bnMgc2FtcGxlZClcbiAgKiAgIEludDhBcnJheSAgICAgICAgICB4IDYsNjA2LDA3OCBvcHMvc2VjIFx1MDBCMTEuNzQlICg4MSBydW5zIHNhbXBsZWQpXG4gICogICBVaW50OENsYW1wZWRBcnJheSAgeCA2LDYwMiwyMjQgb3BzL3NlYyBcdTAwQjExLjc3JSAoODMgcnVucyBzYW1wbGVkKVxuICAqL1xuICB2YXIgc3RyaW5nVGFnID0gKHN5bWJvbFRvU3RyaW5nVGFnRXhpc3RzICYmIG9ialtTeW1ib2wudG9TdHJpbmdUYWddKTtcbiAgaWYgKHR5cGVvZiBzdHJpbmdUYWcgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHN0cmluZ1RhZztcbiAgfVxuXG4gIHZhciBvYmpQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICByZWdleCBsaXRlcmFsICAgICAgeCAxLDc3MiwzODUgb3BzL3NlYyBcdTAwQjExLjg1JSAoNzcgcnVucyBzYW1wbGVkKVxuICAqICAgcmVnZXggY29uc3RydWN0b3IgIHggMiwxNDMsNjM0IG9wcy9zZWMgXHUwMEIxMi40NiUgKDc4IHJ1bnMgc2FtcGxlZClcbiAgKiBQb3N0OlxuICAqICAgcmVnZXggbGl0ZXJhbCAgICAgIHggMyw5MjgsMDA5IG9wcy9zZWMgXHUwMEIxMC42NSUgKDc4IHJ1bnMgc2FtcGxlZClcbiAgKiAgIHJlZ2V4IGNvbnN0cnVjdG9yICB4IDMsOTMxLDEwOCBvcHMvc2VjIFx1MDBCMTAuNTglICg4NCBydW5zIHNhbXBsZWQpXG4gICovXG4gIGlmIChvYmpQcm90b3R5cGUgPT09IFJlZ0V4cC5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ1JlZ0V4cCc7XG4gIH1cblxuICAvKiAhIFNwZWVkIG9wdGltaXNhdGlvblxuICAqIFByZTpcbiAgKiAgIGRhdGUgICAgICAgICAgICAgICB4IDIsMTMwLDA3NCBvcHMvc2VjIFx1MDBCMTQuNDIlICg2OCBydW5zIHNhbXBsZWQpXG4gICogUG9zdDpcbiAgKiAgIGRhdGUgICAgICAgICAgICAgICB4IDMsOTUzLDc3OSBvcHMvc2VjIFx1MDBCMTEuMzUlICg3NyBydW5zIHNhbXBsZWQpXG4gICovXG4gIGlmIChvYmpQcm90b3R5cGUgPT09IERhdGUucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdEYXRlJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy1wcm9taXNlLnByb3RvdHlwZS1AQHRvc3RyaW5ndGFnKVxuICAgKiBFUzYkMjUuNC41LjQgLSBQcm9taXNlLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXSBzaG91bGQgYmUgXCJQcm9taXNlXCI6XG4gICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUHJvbWlzZS5yZXNvbHZlKCkpYGBcbiAgICogIC0gQ2hyb21lIDw9NDcgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICogIC0gRWRnZSA8PTIwID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqICAtIEZpcmVmb3ggMjktTGF0ZXN0ID09PSBcIltvYmplY3QgUHJvbWlzZV1cIlxuICAgKiAgLSBTYWZhcmkgNy4xLUxhdGVzdCA9PT0gXCJbb2JqZWN0IFByb21pc2VdXCJcbiAgICovXG4gIGlmIChwcm9taXNlRXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gUHJvbWlzZS5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ1Byb21pc2UnO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICBzZXQgICAgICAgICAgICAgICAgeCAyLDIyMiwxODYgb3BzL3NlYyBcdTAwQjExLjMxJSAoODIgcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICBzZXQgICAgICAgICAgICAgICAgeCA0LDU0NSw4Nzkgb3BzL3NlYyBcdTAwQjExLjEzJSAoODMgcnVucyBzYW1wbGVkKVxuICAqL1xuICBpZiAoc2V0RXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gU2V0LnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnU2V0JztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgbWFwICAgICAgICAgICAgICAgIHggMiwzOTYsODQyIG9wcy9zZWMgXHUwMEIxMS41OSUgKDgxIHJ1bnMgc2FtcGxlZClcbiAgKiBQb3N0OlxuICAqICAgbWFwICAgICAgICAgICAgICAgIHggNCwxODMsOTQ1IG9wcy9zZWMgXHUwMEIxNi41OSUgKDgyIHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgaWYgKG1hcEV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IE1hcC5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ01hcCc7XG4gIH1cblxuICAvKiAhIFNwZWVkIG9wdGltaXNhdGlvblxuICAqIFByZTpcbiAgKiAgIHdlYWtzZXQgICAgICAgICAgICB4IDEsMzIzLDIyMCBvcHMvc2VjIFx1MDBCMTIuMTclICg3NiBydW5zIHNhbXBsZWQpXG4gICogUG9zdDpcbiAgKiAgIHdlYWtzZXQgICAgICAgICAgICB4IDQsMjM3LDUxMCBvcHMvc2VjIFx1MDBCMTIuMDElICg3NyBydW5zIHNhbXBsZWQpXG4gICovXG4gIGlmICh3ZWFrU2V0RXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gV2Vha1NldC5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ1dlYWtTZXQnO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICB3ZWFrbWFwICAgICAgICAgICAgeCAxLDUwMCwyNjAgb3BzL3NlYyBcdTAwQjEyLjAyJSAoNzggcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICB3ZWFrbWFwICAgICAgICAgICAgeCAzLDg4MSwzODQgb3BzL3NlYyBcdTAwQjExLjQ1JSAoODIgcnVucyBzYW1wbGVkKVxuICAqL1xuICBpZiAod2Vha01hcEV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IFdlYWtNYXAucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdXZWFrTWFwJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy1kYXRhdmlldy5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZylcbiAgICogRVM2JDI0LjIuNC4yMSAtIERhdGFWaWV3LnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXSBzaG91bGQgYmUgXCJEYXRhVmlld1wiOlxuICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKWBgXG4gICAqICAtIEVkZ2UgPD0xMyA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIlxuICAgKi9cbiAgaWYgKGRhdGFWaWV3RXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gRGF0YVZpZXcucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdEYXRhVmlldyc7XG4gIH1cblxuICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICogKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtJW1hcGl0ZXJhdG9ycHJvdG90eXBlJS1AQHRvc3RyaW5ndGFnKVxuICAgKiBFUzYkMjMuMS41LjIuMiAtICVNYXBJdGVyYXRvclByb3RvdHlwZSVbQEB0b1N0cmluZ1RhZ10gc2hvdWxkIGJlIFwiTWFwIEl0ZXJhdG9yXCI6XG4gICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3IE1hcCgpLmVudHJpZXMoKSlgYFxuICAgKiAgLSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICovXG4gIGlmIChtYXBFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBtYXBJdGVyYXRvclByb3RvdHlwZSkge1xuICAgIHJldHVybiAnTWFwIEl0ZXJhdG9yJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy0lc2V0aXRlcmF0b3Jwcm90b3R5cGUlLUBAdG9zdHJpbmd0YWcpXG4gICAqIEVTNiQyMy4yLjUuMi4yIC0gJVNldEl0ZXJhdG9yUHJvdG90eXBlJVtAQHRvU3RyaW5nVGFnXSBzaG91bGQgYmUgXCJTZXQgSXRlcmF0b3JcIjpcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXcgU2V0KCkuZW50cmllcygpKWBgXG4gICAqICAtIEVkZ2UgPD0xMyA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIlxuICAgKi9cbiAgaWYgKHNldEV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IHNldEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdTZXQgSXRlcmF0b3InO1xuICB9XG5cbiAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAqIChodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wL2luZGV4Lmh0bWwjc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS1AQHRvc3RyaW5ndGFnKVxuICAgKiBFUzYkMjIuMS41LjIuMiAtICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJVtAQHRvU3RyaW5nVGFnXSBzaG91bGQgYmUgXCJBcnJheSBJdGVyYXRvclwiOlxuICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSlgYFxuICAgKiAgLSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICovXG4gIGlmIChhcnJheUl0ZXJhdG9yRXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gYXJyYXlJdGVyYXRvclByb3RvdHlwZSkge1xuICAgIHJldHVybiAnQXJyYXkgSXRlcmF0b3InO1xuICB9XG5cbiAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAqIChodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wL2luZGV4Lmh0bWwjc2VjLSVzdHJpbmdpdGVyYXRvcnByb3RvdHlwZSUtQEB0b3N0cmluZ3RhZylcbiAgICogRVM2JDIxLjEuNS4yLjIgLSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlW0BAdG9TdHJpbmdUYWddIHNob3VsZCBiZSBcIlN0cmluZyBJdGVyYXRvclwiOlxuICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSlgYFxuICAgKiAgLSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICovXG4gIGlmIChzdHJpbmdJdGVyYXRvckV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IHN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdTdHJpbmcgSXRlcmF0b3InO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICBvYmplY3QgZnJvbSBudWxsICAgeCAyLDQyNCwzMjAgb3BzL3NlYyBcdTAwQjExLjY3JSAoNzYgcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICBvYmplY3QgZnJvbSBudWxsICAgeCA1LDgzOCwwMDAgb3BzL3NlYyBcdTAwQjEwLjk5JSAoODQgcnVucyBzYW1wbGVkKVxuICAqL1xuICBpZiAob2JqUHJvdG90eXBlID09PSBudWxsKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdFxuICAgIC5wcm90b3R5cGVcbiAgICAudG9TdHJpbmdcbiAgICAuY2FsbChvYmopXG4gICAgLnNsaWNlKHRvU3RyaW5nTGVmdFNsaWNlTGVuZ3RoLCB0b1N0cmluZ1JpZ2h0U2xpY2VMZW5ndGgpO1xufVxuXG5yZXR1cm4gdHlwZURldGVjdDtcblxufSkpKTtcbiIsICIvKiFcbiAqIENoYWkgLSBleHBlY3RUeXBlcyB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiAjIyMgLmV4cGVjdFR5cGVzKG9iaiwgdHlwZXMpXG4gKlxuICogRW5zdXJlcyB0aGF0IHRoZSBvYmplY3QgYmVpbmcgdGVzdGVkIGFnYWluc3QgaXMgb2YgYSB2YWxpZCB0eXBlLlxuICpcbiAqICAgICB1dGlscy5leHBlY3RUeXBlcyh0aGlzLCBbJ2FycmF5JywgJ29iamVjdCcsICdzdHJpbmcnXSk7XG4gKlxuICogQHBhcmFtIHtNaXhlZH0gb2JqIGNvbnN0cnVjdGVkIEFzc2VydGlvblxuICogQHBhcmFtIHtBcnJheX0gdHlwZSBBIGxpc3Qgb2YgYWxsb3dlZCB0eXBlcyBmb3IgdGhpcyBhc3NlcnRpb25cbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIGV4cGVjdFR5cGVzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnZhciBBc3NlcnRpb25FcnJvciA9IHJlcXVpcmUoJ2Fzc2VydGlvbi1lcnJvcicpO1xudmFyIGZsYWcgPSByZXF1aXJlKCcuL2ZsYWcnKTtcbnZhciB0eXBlID0gcmVxdWlyZSgndHlwZS1kZXRlY3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBleHBlY3RUeXBlcyhvYmosIHR5cGVzKSB7XG4gIHZhciBmbGFnTXNnID0gZmxhZyhvYmosICdtZXNzYWdlJyk7XG4gIHZhciBzc2ZpID0gZmxhZyhvYmosICdzc2ZpJyk7XG5cbiAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgJzogJyA6ICcnO1xuXG4gIG9iaiA9IGZsYWcob2JqLCAnb2JqZWN0Jyk7XG4gIHR5cGVzID0gdHlwZXMubWFwKGZ1bmN0aW9uICh0KSB7IHJldHVybiB0LnRvTG93ZXJDYXNlKCk7IH0pO1xuICB0eXBlcy5zb3J0KCk7XG5cbiAgLy8gVHJhbnNmb3JtcyBbJ2xvcmVtJywgJ2lwc3VtJ10gaW50byAnYSBsb3JlbSwgb3IgYW4gaXBzdW0nXG4gIHZhciBzdHIgPSB0eXBlcy5tYXAoZnVuY3Rpb24gKHQsIGluZGV4KSB7XG4gICAgdmFyIGFydCA9IH5bICdhJywgJ2UnLCAnaScsICdvJywgJ3UnIF0uaW5kZXhPZih0LmNoYXJBdCgwKSkgPyAnYW4nIDogJ2EnO1xuICAgIHZhciBvciA9IHR5cGVzLmxlbmd0aCA+IDEgJiYgaW5kZXggPT09IHR5cGVzLmxlbmd0aCAtIDEgPyAnb3IgJyA6ICcnO1xuICAgIHJldHVybiBvciArIGFydCArICcgJyArIHQ7XG4gIH0pLmpvaW4oJywgJyk7XG5cbiAgdmFyIG9ialR5cGUgPSB0eXBlKG9iaikudG9Mb3dlckNhc2UoKTtcblxuICBpZiAoIXR5cGVzLnNvbWUoZnVuY3Rpb24gKGV4cGVjdGVkKSB7IHJldHVybiBvYmpUeXBlID09PSBleHBlY3RlZDsgfSkpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICBmbGFnTXNnICsgJ29iamVjdCB0ZXN0ZWQgbXVzdCBiZSAnICsgc3RyICsgJywgYnV0ICcgKyBvYmpUeXBlICsgJyBnaXZlbicsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBzc2ZpXG4gICAgKTtcbiAgfVxufTtcbiIsICIvKiFcbiAqIENoYWkgLSBnZXRBY3R1YWwgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogIyMjIC5nZXRBY3R1YWwob2JqZWN0LCBbYWN0dWFsXSlcbiAqXG4gKiBSZXR1cm5zIHRoZSBgYWN0dWFsYCB2YWx1ZSBmb3IgYW4gQXNzZXJ0aW9uLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgKGNvbnN0cnVjdGVkIEFzc2VydGlvbilcbiAqIEBwYXJhbSB7QXJndW1lbnRzfSBjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUuYXNzZXJ0IGFyZ3VtZW50c1xuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgZ2V0QWN0dWFsXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRBY3R1YWwob2JqLCBhcmdzKSB7XG4gIHJldHVybiBhcmdzLmxlbmd0aCA+IDQgPyBhcmdzWzRdIDogb2JqLl9vYmo7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuLyogIVxuICogQ2hhaSAtIGdldEZ1bmNOYW1lIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTYgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMjIyAuZ2V0RnVuY05hbWUoY29uc3RydWN0b3JGbilcbiAqXG4gKiBSZXR1cm5zIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24uXG4gKiBXaGVuIGEgbm9uLWZ1bmN0aW9uIGluc3RhbmNlIGlzIHBhc3NlZCwgcmV0dXJucyBgbnVsbGAuXG4gKiBUaGlzIGFsc28gaW5jbHVkZXMgYSBwb2x5ZmlsbCBmdW5jdGlvbiBpZiBgYUZ1bmMubmFtZWAgaXMgbm90IGRlZmluZWQuXG4gKlxuICogQG5hbWUgZ2V0RnVuY05hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmN0XG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnZhciB0b1N0cmluZyA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvbk5hbWVNYXRjaCA9IC9cXHMqZnVuY3Rpb24oPzpcXHN8XFxzKlxcL1xcKlteKD86KlxcLyldK1xcKlxcL1xccyopKihbXlxcc1xcKFxcL10rKS87XG52YXIgbWF4RnVuY3Rpb25Tb3VyY2VMZW5ndGggPSA1MTI7XG5mdW5jdGlvbiBnZXRGdW5jTmFtZShhRnVuYykge1xuICBpZiAodHlwZW9mIGFGdW5jICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbmFtZSA9ICcnO1xuICBpZiAodHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZS5uYW1lID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgYUZ1bmMubmFtZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlZmxlY3RcbiAgICB2YXIgZnVuY3Rpb25Tb3VyY2UgPSB0b1N0cmluZy5jYWxsKGFGdW5jKTtcbiAgICAvLyBUbyBhdm9pZCB1bmNvbnN0cmFpbmVkIHJlc291cmNlIGNvbnN1bXB0aW9uIGR1ZSB0byBwYXRoYWxvZ2ljYWxseSBsYXJnZSBmdW5jdGlvbiBuYW1lcyxcbiAgICAvLyB3ZSBsaW1pdCB0aGUgYXZhaWxhYmxlIHJldHVybiB2YWx1ZSB0byBiZSBsZXNzIHRoYW4gNTEyIGNoYXJhY3RlcnMuXG4gICAgaWYgKGZ1bmN0aW9uU291cmNlLmluZGV4T2YoJygnKSA+IG1heEZ1bmN0aW9uU291cmNlTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgLy8gSGVyZSB3ZSBydW4gYSBwb2x5ZmlsbCBpZiBGdW5jdGlvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBgbmFtZWAgcHJvcGVydHkgYW5kIGlmIGFGdW5jLm5hbWUgaXMgbm90IGRlZmluZWRcbiAgICB2YXIgbWF0Y2ggPSBmdW5jdGlvblNvdXJjZS5tYXRjaChmdW5jdGlvbk5hbWVNYXRjaCk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICBuYW1lID0gbWF0Y2hbMV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElmIHdlJ3ZlIGdvdCBhIGBuYW1lYCBwcm9wZXJ0eSB3ZSBqdXN0IHVzZSBpdFxuICAgIG5hbWUgPSBhRnVuYy5uYW1lO1xuICB9XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0RnVuY05hbWU7XG4iLCAiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBmYWN0b3J5KGdsb2JhbC5sb3VwZSA9IHt9KSk7XG59KHRoaXMsIChmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7XG5cbiAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHtcbiAgICAgIF90eXBlb2YgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3R5cGVvZiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBfdHlwZW9mKG9iaik7XG4gIH1cblxuICBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgICByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7XG4gIH1cblxuICBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIgfHwgIShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpKSByZXR1cm47XG4gICAgdmFyIF9hcnIgPSBbXTtcbiAgICB2YXIgX24gPSB0cnVlO1xuICAgIHZhciBfZCA9IGZhbHNlO1xuICAgIHZhciBfZSA9IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7XG4gICAgICAgIF9hcnIucHVzaChfcy52YWx1ZSk7XG5cbiAgICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgX2QgPSB0cnVlO1xuICAgICAgX2UgPSBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIF9hcnI7XG4gIH1cblxuICBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gICAgaWYgKCFvKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gICAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIH1cblxuICBmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICAgIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuXG4gICAgcmV0dXJuIGFycjI7XG4gIH1cblxuICBmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG4gIH1cblxuICB2YXIgYW5zaUNvbG9ycyA9IHtcbiAgICBib2xkOiBbJzEnLCAnMjInXSxcbiAgICBkaW06IFsnMicsICcyMiddLFxuICAgIGl0YWxpYzogWyczJywgJzIzJ10sXG4gICAgdW5kZXJsaW5lOiBbJzQnLCAnMjQnXSxcbiAgICAvLyA1ICYgNiBhcmUgYmxpbmtpbmdcbiAgICBpbnZlcnNlOiBbJzcnLCAnMjcnXSxcbiAgICBoaWRkZW46IFsnOCcsICcyOCddLFxuICAgIHN0cmlrZTogWyc5JywgJzI5J10sXG4gICAgLy8gMTAtMjAgYXJlIGZvbnRzXG4gICAgLy8gMjEtMjkgYXJlIHJlc2V0cyBmb3IgMS05XG4gICAgYmxhY2s6IFsnMzAnLCAnMzknXSxcbiAgICByZWQ6IFsnMzEnLCAnMzknXSxcbiAgICBncmVlbjogWyczMicsICczOSddLFxuICAgIHllbGxvdzogWyczMycsICczOSddLFxuICAgIGJsdWU6IFsnMzQnLCAnMzknXSxcbiAgICBtYWdlbnRhOiBbJzM1JywgJzM5J10sXG4gICAgY3lhbjogWyczNicsICczOSddLFxuICAgIHdoaXRlOiBbJzM3JywgJzM5J10sXG4gICAgYnJpZ2h0YmxhY2s6IFsnMzA7MScsICczOSddLFxuICAgIGJyaWdodHJlZDogWyczMTsxJywgJzM5J10sXG4gICAgYnJpZ2h0Z3JlZW46IFsnMzI7MScsICczOSddLFxuICAgIGJyaWdodHllbGxvdzogWyczMzsxJywgJzM5J10sXG4gICAgYnJpZ2h0Ymx1ZTogWyczNDsxJywgJzM5J10sXG4gICAgYnJpZ2h0bWFnZW50YTogWyczNTsxJywgJzM5J10sXG4gICAgYnJpZ2h0Y3lhbjogWyczNjsxJywgJzM5J10sXG4gICAgYnJpZ2h0d2hpdGU6IFsnMzc7MScsICczOSddLFxuICAgIGdyZXk6IFsnOTAnLCAnMzknXVxuICB9O1xuICB2YXIgc3R5bGVzID0ge1xuICAgIHNwZWNpYWw6ICdjeWFuJyxcbiAgICBudW1iZXI6ICd5ZWxsb3cnLFxuICAgIGJpZ2ludDogJ3llbGxvdycsXG4gICAgYm9vbGVhbjogJ3llbGxvdycsXG4gICAgdW5kZWZpbmVkOiAnZ3JleScsXG4gICAgbnVsbDogJ2JvbGQnLFxuICAgIHN0cmluZzogJ2dyZWVuJyxcbiAgICBzeW1ib2w6ICdncmVlbicsXG4gICAgZGF0ZTogJ21hZ2VudGEnLFxuICAgIHJlZ2V4cDogJ3JlZCdcbiAgfTtcbiAgdmFyIHRydW5jYXRvciA9ICdcdTIwMjYnO1xuXG4gIGZ1bmN0aW9uIGNvbG9yaXNlKHZhbHVlLCBzdHlsZVR5cGUpIHtcbiAgICB2YXIgY29sb3IgPSBhbnNpQ29sb3JzW3N0eWxlc1tzdHlsZVR5cGVdXSB8fCBhbnNpQ29sb3JzW3N0eWxlVHlwZV07XG5cbiAgICBpZiAoIWNvbG9yKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gXCJcXHgxQltcIi5jb25jYXQoY29sb3JbMF0sIFwibVwiKS5jb25jYXQoU3RyaW5nKHZhbHVlKSwgXCJcXHgxQltcIikuY29uY2F0KGNvbG9yWzFdLCBcIm1cIik7XG4gIH1cblxuICBmdW5jdGlvbiBub3JtYWxpc2VPcHRpb25zKCkge1xuICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICAgICAgX3JlZiRzaG93SGlkZGVuID0gX3JlZi5zaG93SGlkZGVuLFxuICAgICAgICBzaG93SGlkZGVuID0gX3JlZiRzaG93SGlkZGVuID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkc2hvd0hpZGRlbixcbiAgICAgICAgX3JlZiRkZXB0aCA9IF9yZWYuZGVwdGgsXG4gICAgICAgIGRlcHRoID0gX3JlZiRkZXB0aCA9PT0gdm9pZCAwID8gMiA6IF9yZWYkZGVwdGgsXG4gICAgICAgIF9yZWYkY29sb3JzID0gX3JlZi5jb2xvcnMsXG4gICAgICAgIGNvbG9ycyA9IF9yZWYkY29sb3JzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY29sb3JzLFxuICAgICAgICBfcmVmJGN1c3RvbUluc3BlY3QgPSBfcmVmLmN1c3RvbUluc3BlY3QsXG4gICAgICAgIGN1c3RvbUluc3BlY3QgPSBfcmVmJGN1c3RvbUluc3BlY3QgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGN1c3RvbUluc3BlY3QsXG4gICAgICAgIF9yZWYkc2hvd1Byb3h5ID0gX3JlZi5zaG93UHJveHksXG4gICAgICAgIHNob3dQcm94eSA9IF9yZWYkc2hvd1Byb3h5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkc2hvd1Byb3h5LFxuICAgICAgICBfcmVmJG1heEFycmF5TGVuZ3RoID0gX3JlZi5tYXhBcnJheUxlbmd0aCxcbiAgICAgICAgbWF4QXJyYXlMZW5ndGggPSBfcmVmJG1heEFycmF5TGVuZ3RoID09PSB2b2lkIDAgPyBJbmZpbml0eSA6IF9yZWYkbWF4QXJyYXlMZW5ndGgsXG4gICAgICAgIF9yZWYkYnJlYWtMZW5ndGggPSBfcmVmLmJyZWFrTGVuZ3RoLFxuICAgICAgICBicmVha0xlbmd0aCA9IF9yZWYkYnJlYWtMZW5ndGggPT09IHZvaWQgMCA/IEluZmluaXR5IDogX3JlZiRicmVha0xlbmd0aCxcbiAgICAgICAgX3JlZiRzZWVuID0gX3JlZi5zZWVuLFxuICAgICAgICBzZWVuID0gX3JlZiRzZWVuID09PSB2b2lkIDAgPyBbXSA6IF9yZWYkc2VlbixcbiAgICAgICAgX3JlZiR0cnVuY2F0ZSA9IF9yZWYudHJ1bmNhdGUsXG4gICAgICAgIHRydW5jYXRlID0gX3JlZiR0cnVuY2F0ZSA9PT0gdm9pZCAwID8gSW5maW5pdHkgOiBfcmVmJHRydW5jYXRlLFxuICAgICAgICBfcmVmJHN0eWxpemUgPSBfcmVmLnN0eWxpemUsXG4gICAgICAgIHN0eWxpemUgPSBfcmVmJHN0eWxpemUgPT09IHZvaWQgMCA/IFN0cmluZyA6IF9yZWYkc3R5bGl6ZTtcblxuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgc2hvd0hpZGRlbjogQm9vbGVhbihzaG93SGlkZGVuKSxcbiAgICAgIGRlcHRoOiBOdW1iZXIoZGVwdGgpLFxuICAgICAgY29sb3JzOiBCb29sZWFuKGNvbG9ycyksXG4gICAgICBjdXN0b21JbnNwZWN0OiBCb29sZWFuKGN1c3RvbUluc3BlY3QpLFxuICAgICAgc2hvd1Byb3h5OiBCb29sZWFuKHNob3dQcm94eSksXG4gICAgICBtYXhBcnJheUxlbmd0aDogTnVtYmVyKG1heEFycmF5TGVuZ3RoKSxcbiAgICAgIGJyZWFrTGVuZ3RoOiBOdW1iZXIoYnJlYWtMZW5ndGgpLFxuICAgICAgdHJ1bmNhdGU6IE51bWJlcih0cnVuY2F0ZSksXG4gICAgICBzZWVuOiBzZWVuLFxuICAgICAgc3R5bGl6ZTogc3R5bGl6ZVxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucy5jb2xvcnMpIHtcbiAgICAgIG9wdGlvbnMuc3R5bGl6ZSA9IGNvbG9yaXNlO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG4gIGZ1bmN0aW9uIHRydW5jYXRlKHN0cmluZywgbGVuZ3RoKSB7XG4gICAgdmFyIHRhaWwgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHRydW5jYXRvcjtcbiAgICBzdHJpbmcgPSBTdHJpbmcoc3RyaW5nKTtcbiAgICB2YXIgdGFpbExlbmd0aCA9IHRhaWwubGVuZ3RoO1xuICAgIHZhciBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuXG4gICAgaWYgKHRhaWxMZW5ndGggPiBsZW5ndGggJiYgc3RyaW5nTGVuZ3RoID4gdGFpbExlbmd0aCkge1xuICAgICAgcmV0dXJuIHRhaWw7XG4gICAgfVxuXG4gICAgaWYgKHN0cmluZ0xlbmd0aCA+IGxlbmd0aCAmJiBzdHJpbmdMZW5ndGggPiB0YWlsTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gXCJcIi5jb25jYXQoc3RyaW5nLnNsaWNlKDAsIGxlbmd0aCAtIHRhaWxMZW5ndGgpKS5jb25jYXQodGFpbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuXG4gIGZ1bmN0aW9uIGluc3BlY3RMaXN0KGxpc3QsIG9wdGlvbnMsIGluc3BlY3RJdGVtKSB7XG4gICAgdmFyIHNlcGFyYXRvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogJywgJztcbiAgICBpbnNwZWN0SXRlbSA9IGluc3BlY3RJdGVtIHx8IG9wdGlvbnMuaW5zcGVjdDtcbiAgICB2YXIgc2l6ZSA9IGxpc3QubGVuZ3RoO1xuICAgIGlmIChzaXplID09PSAwKSByZXR1cm4gJyc7XG4gICAgdmFyIG9yaWdpbmFsTGVuZ3RoID0gb3B0aW9ucy50cnVuY2F0ZTtcbiAgICB2YXIgb3V0cHV0ID0gJyc7XG4gICAgdmFyIHBlZWsgPSAnJztcbiAgICB2YXIgdHJ1bmNhdGVkID0gJyc7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkgKz0gMSkge1xuICAgICAgdmFyIGxhc3QgPSBpICsgMSA9PT0gbGlzdC5sZW5ndGg7XG4gICAgICB2YXIgc2Vjb25kVG9MYXN0ID0gaSArIDIgPT09IGxpc3QubGVuZ3RoO1xuICAgICAgdHJ1bmNhdGVkID0gXCJcIi5jb25jYXQodHJ1bmNhdG9yLCBcIihcIikuY29uY2F0KGxpc3QubGVuZ3RoIC0gaSwgXCIpXCIpO1xuICAgICAgdmFyIHZhbHVlID0gbGlzdFtpXTsgLy8gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSByZW1haW5pbmcgd2UgbmVlZCB0byBhY2NvdW50IGZvciBhIHNlcGFyYXRvciBvZiBgLCBgXG5cbiAgICAgIG9wdGlvbnMudHJ1bmNhdGUgPSBvcmlnaW5hbExlbmd0aCAtIG91dHB1dC5sZW5ndGggLSAobGFzdCA/IDAgOiBzZXBhcmF0b3IubGVuZ3RoKTtcbiAgICAgIHZhciBzdHJpbmcgPSBwZWVrIHx8IGluc3BlY3RJdGVtKHZhbHVlLCBvcHRpb25zKSArIChsYXN0ID8gJycgOiBzZXBhcmF0b3IpO1xuICAgICAgdmFyIG5leHRMZW5ndGggPSBvdXRwdXQubGVuZ3RoICsgc3RyaW5nLmxlbmd0aDtcbiAgICAgIHZhciB0cnVuY2F0ZWRMZW5ndGggPSBuZXh0TGVuZ3RoICsgdHJ1bmNhdGVkLmxlbmd0aDsgLy8gSWYgdGhpcyBpcyB0aGUgbGFzdCBlbGVtZW50LCBhbmQgYWRkaW5nIGl0IHdvdWxkXG4gICAgICAvLyB0YWtlIHVzIG92ZXIgbGVuZ3RoLCBidXQgYWRkaW5nIHRoZSB0cnVuY2F0b3Igd291bGRuJ3QgLSB0aGVuIGJyZWFrIG5vd1xuXG4gICAgICBpZiAobGFzdCAmJiBuZXh0TGVuZ3RoID4gb3JpZ2luYWxMZW5ndGggJiYgb3V0cHV0Lmxlbmd0aCArIHRydW5jYXRlZC5sZW5ndGggPD0gb3JpZ2luYWxMZW5ndGgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIElmIHRoaXMgaXNuJ3QgdGhlIGxhc3Qgb3Igc2Vjb25kIHRvIGxhc3QgZWxlbWVudCB0byBzY2FuLFxuICAgICAgLy8gYnV0IHRoZSBzdHJpbmcgaXMgYWxyZWFkeSBvdmVyIGxlbmd0aCB0aGVuIGJyZWFrIGhlcmVcblxuXG4gICAgICBpZiAoIWxhc3QgJiYgIXNlY29uZFRvTGFzdCAmJiB0cnVuY2F0ZWRMZW5ndGggPiBvcmlnaW5hbExlbmd0aCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH0gLy8gUGVlayBhdCB0aGUgbmV4dCBzdHJpbmcgdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZFxuICAgICAgLy8gYnJlYWsgZWFybHkgYmVmb3JlIGFkZGluZyB0aGlzIGl0ZW0gdG8gdGhlIG91dHB1dFxuXG5cbiAgICAgIHBlZWsgPSBsYXN0ID8gJycgOiBpbnNwZWN0SXRlbShsaXN0W2kgKyAxXSwgb3B0aW9ucykgKyAoc2Vjb25kVG9MYXN0ID8gJycgOiBzZXBhcmF0b3IpOyAvLyBJZiB3ZSBoYXZlIG9uZSBlbGVtZW50IGxlZnQsIGJ1dCB0aGlzIGVsZW1lbnQgYW5kXG4gICAgICAvLyB0aGUgbmV4dCB0YWtlcyBvdmVyIGxlbmd0aCwgdGhlIGJyZWFrIGVhcmx5XG5cbiAgICAgIGlmICghbGFzdCAmJiBzZWNvbmRUb0xhc3QgJiYgdHJ1bmNhdGVkTGVuZ3RoID4gb3JpZ2luYWxMZW5ndGggJiYgbmV4dExlbmd0aCArIHBlZWsubGVuZ3RoID4gb3JpZ2luYWxMZW5ndGgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIG91dHB1dCArPSBzdHJpbmc7IC8vIElmIHRoZSBuZXh0IGVsZW1lbnQgdGFrZXMgdXMgdG8gbGVuZ3RoIC1cbiAgICAgIC8vIGJ1dCB0aGVyZSBhcmUgbW9yZSBhZnRlciB0aGF0LCB0aGVuIHdlIHNob3VsZCB0cnVuY2F0ZSBub3dcblxuICAgICAgaWYgKCFsYXN0ICYmICFzZWNvbmRUb0xhc3QgJiYgbmV4dExlbmd0aCArIHBlZWsubGVuZ3RoID49IG9yaWdpbmFsTGVuZ3RoKSB7XG4gICAgICAgIHRydW5jYXRlZCA9IFwiXCIuY29uY2F0KHRydW5jYXRvciwgXCIoXCIpLmNvbmNhdChsaXN0Lmxlbmd0aCAtIGkgLSAxLCBcIilcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICB0cnVuY2F0ZWQgPSAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gXCJcIi5jb25jYXQob3V0cHV0KS5jb25jYXQodHJ1bmNhdGVkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHF1b3RlQ29tcGxleEtleShrZXkpIHtcbiAgICBpZiAoa2V5Lm1hdGNoKC9eW2EtekEtWl9dW2EtekEtWl8wLTldKiQvKSkge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG5cbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoa2V5KS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIikucmVwbGFjZSgvXFxcXFwiL2csICdcIicpLnJlcGxhY2UoLyheXCJ8XCIkKS9nLCBcIidcIik7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNwZWN0UHJvcGVydHkoX3JlZjIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3JlZjMgPSBfc2xpY2VkVG9BcnJheShfcmVmMiwgMiksXG4gICAgICAgIGtleSA9IF9yZWYzWzBdLFxuICAgICAgICB2YWx1ZSA9IF9yZWYzWzFdO1xuXG4gICAgb3B0aW9ucy50cnVuY2F0ZSAtPSAyO1xuXG4gICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSB7XG4gICAgICBrZXkgPSBxdW90ZUNvbXBsZXhLZXkoa2V5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBrZXkgIT09ICdudW1iZXInKSB7XG4gICAgICBrZXkgPSBcIltcIi5jb25jYXQob3B0aW9ucy5pbnNwZWN0KGtleSwgb3B0aW9ucyksIFwiXVwiKTtcbiAgICB9XG5cbiAgICBvcHRpb25zLnRydW5jYXRlIC09IGtleS5sZW5ndGg7XG4gICAgdmFsdWUgPSBvcHRpb25zLmluc3BlY3QodmFsdWUsIG9wdGlvbnMpO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChrZXksIFwiOiBcIikuY29uY2F0KHZhbHVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc3BlY3RBcnJheShhcnJheSwgb3B0aW9ucykge1xuICAgIC8vIE9iamVjdC5rZXlzIHdpbGwgYWx3YXlzIG91dHB1dCB0aGUgQXJyYXkgaW5kaWNlcyBmaXJzdCwgc28gd2UgY2FuIHNsaWNlIGJ5XG4gICAgLy8gYGFycmF5Lmxlbmd0aGAgdG8gZ2V0IG5vbi1pbmRleCBwcm9wZXJ0aWVzXG4gICAgdmFyIG5vbkluZGV4UHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGFycmF5KS5zbGljZShhcnJheS5sZW5ndGgpO1xuICAgIGlmICghYXJyYXkubGVuZ3RoICYmICFub25JbmRleFByb3BlcnRpZXMubGVuZ3RoKSByZXR1cm4gJ1tdJztcbiAgICBvcHRpb25zLnRydW5jYXRlIC09IDQ7XG4gICAgdmFyIGxpc3RDb250ZW50cyA9IGluc3BlY3RMaXN0KGFycmF5LCBvcHRpb25zKTtcbiAgICBvcHRpb25zLnRydW5jYXRlIC09IGxpc3RDb250ZW50cy5sZW5ndGg7XG4gICAgdmFyIHByb3BlcnR5Q29udGVudHMgPSAnJztcblxuICAgIGlmIChub25JbmRleFByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICBwcm9wZXJ0eUNvbnRlbnRzID0gaW5zcGVjdExpc3Qobm9uSW5kZXhQcm9wZXJ0aWVzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBba2V5LCBhcnJheVtrZXldXTtcbiAgICAgIH0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICAgIH1cblxuICAgIHJldHVybiBcIlsgXCIuY29uY2F0KGxpc3RDb250ZW50cykuY29uY2F0KHByb3BlcnR5Q29udGVudHMgPyBcIiwgXCIuY29uY2F0KHByb3BlcnR5Q29udGVudHMpIDogJycsIFwiIF1cIik7XG4gIH1cblxuICAvKiAhXG4gICAqIENoYWkgLSBnZXRGdW5jTmFtZSB1dGlsaXR5XG4gICAqIENvcHlyaWdodChjKSAyMDEyLTIwMTYgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gICAqIE1JVCBMaWNlbnNlZFxuICAgKi9cblxuICAvKipcbiAgICogIyMjIC5nZXRGdW5jTmFtZShjb25zdHJ1Y3RvckZuKVxuICAgKlxuICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24uXG4gICAqIFdoZW4gYSBub24tZnVuY3Rpb24gaW5zdGFuY2UgaXMgcGFzc2VkLCByZXR1cm5zIGBudWxsYC5cbiAgICogVGhpcyBhbHNvIGluY2x1ZGVzIGEgcG9seWZpbGwgZnVuY3Rpb24gaWYgYGFGdW5jLm5hbWVgIGlzIG5vdCBkZWZpbmVkLlxuICAgKlxuICAgKiBAbmFtZSBnZXRGdW5jTmFtZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jdFxuICAgKiBAbmFtZXNwYWNlIFV0aWxzXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIHZhciB0b1N0cmluZyA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztcbiAgdmFyIGZ1bmN0aW9uTmFtZU1hdGNoID0gL1xccypmdW5jdGlvbig/Olxcc3xcXHMqXFwvXFwqW14oPzoqXFwvKV0rXFwqXFwvXFxzKikqKFteXFxzXFwoXFwvXSspLztcbiAgdmFyIG1heEZ1bmN0aW9uU291cmNlTGVuZ3RoID0gNTEyO1xuICBmdW5jdGlvbiBnZXRGdW5jTmFtZShhRnVuYykge1xuICAgIGlmICh0eXBlb2YgYUZ1bmMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBuYW1lID0gJyc7XG4gICAgaWYgKHR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGUubmFtZSA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGFGdW5jLm5hbWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlZmxlY3RcbiAgICAgIHZhciBmdW5jdGlvblNvdXJjZSA9IHRvU3RyaW5nLmNhbGwoYUZ1bmMpO1xuICAgICAgLy8gVG8gYXZvaWQgdW5jb25zdHJhaW5lZCByZXNvdXJjZSBjb25zdW1wdGlvbiBkdWUgdG8gcGF0aGFsb2dpY2FsbHkgbGFyZ2UgZnVuY3Rpb24gbmFtZXMsXG4gICAgICAvLyB3ZSBsaW1pdCB0aGUgYXZhaWxhYmxlIHJldHVybiB2YWx1ZSB0byBiZSBsZXNzIHRoYW4gNTEyIGNoYXJhY3RlcnMuXG4gICAgICBpZiAoZnVuY3Rpb25Tb3VyY2UuaW5kZXhPZignKCcpID4gbWF4RnVuY3Rpb25Tb3VyY2VMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICB9XG4gICAgICAvLyBIZXJlIHdlIHJ1biBhIHBvbHlmaWxsIGlmIEZ1bmN0aW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIGBuYW1lYCBwcm9wZXJ0eSBhbmQgaWYgYUZ1bmMubmFtZSBpcyBub3QgZGVmaW5lZFxuICAgICAgdmFyIG1hdGNoID0gZnVuY3Rpb25Tb3VyY2UubWF0Y2goZnVuY3Rpb25OYW1lTWF0Y2gpO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIG5hbWUgPSBtYXRjaFsxXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgd2UndmUgZ290IGEgYG5hbWVgIHByb3BlcnR5IHdlIGp1c3QgdXNlIGl0XG4gICAgICBuYW1lID0gYUZ1bmMubmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuXG4gIHZhciBnZXRGdW5jTmFtZV8xID0gZ2V0RnVuY05hbWU7XG5cbiAgdmFyIGdldEFycmF5TmFtZSA9IGZ1bmN0aW9uIGdldEFycmF5TmFtZShhcnJheSkge1xuICAgIC8vIFdlIG5lZWQgdG8gc3BlY2lhbCBjYXNlIE5vZGUuanMnIEJ1ZmZlcnMsIHdoaWNoIHJlcG9ydCB0byBiZSBVaW50OEFycmF5XG4gICAgaWYgKHR5cGVvZiBCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgYXJyYXkgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgIHJldHVybiAnQnVmZmVyJztcbiAgICB9XG5cbiAgICBpZiAoYXJyYXlbU3ltYm9sLnRvU3RyaW5nVGFnXSkge1xuICAgICAgcmV0dXJuIGFycmF5W1N5bWJvbC50b1N0cmluZ1RhZ107XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldEZ1bmNOYW1lXzEoYXJyYXkuY29uc3RydWN0b3IpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGluc3BlY3RUeXBlZEFycmF5KGFycmF5LCBvcHRpb25zKSB7XG4gICAgdmFyIG5hbWUgPSBnZXRBcnJheU5hbWUoYXJyYXkpO1xuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gbmFtZS5sZW5ndGggKyA0OyAvLyBPYmplY3Qua2V5cyB3aWxsIGFsd2F5cyBvdXRwdXQgdGhlIEFycmF5IGluZGljZXMgZmlyc3QsIHNvIHdlIGNhbiBzbGljZSBieVxuICAgIC8vIGBhcnJheS5sZW5ndGhgIHRvIGdldCBub24taW5kZXggcHJvcGVydGllc1xuXG4gICAgdmFyIG5vbkluZGV4UHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGFycmF5KS5zbGljZShhcnJheS5sZW5ndGgpO1xuICAgIGlmICghYXJyYXkubGVuZ3RoICYmICFub25JbmRleFByb3BlcnRpZXMubGVuZ3RoKSByZXR1cm4gXCJcIi5jb25jYXQobmFtZSwgXCJbXVwiKTsgLy8gQXMgd2Uga25vdyBUeXBlZEFycmF5cyBvbmx5IGNvbnRhaW4gVW5zaWduZWQgSW50ZWdlcnMsIHdlIGNhbiBza2lwIGluc3BlY3RpbmcgZWFjaCBvbmUgYW5kIHNpbXBseVxuICAgIC8vIHN0eWxpc2UgdGhlIHRvU3RyaW5nKCkgdmFsdWUgb2YgdGhlbVxuXG4gICAgdmFyIG91dHB1dCA9ICcnO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHN0cmluZyA9IFwiXCIuY29uY2F0KG9wdGlvbnMuc3R5bGl6ZSh0cnVuY2F0ZShhcnJheVtpXSwgb3B0aW9ucy50cnVuY2F0ZSksICdudW1iZXInKSkuY29uY2F0KGkgPT09IGFycmF5Lmxlbmd0aCAtIDEgPyAnJyA6ICcsICcpO1xuICAgICAgb3B0aW9ucy50cnVuY2F0ZSAtPSBzdHJpbmcubGVuZ3RoO1xuXG4gICAgICBpZiAoYXJyYXlbaV0gIT09IGFycmF5Lmxlbmd0aCAmJiBvcHRpb25zLnRydW5jYXRlIDw9IDMpIHtcbiAgICAgICAgb3V0cHV0ICs9IFwiXCIuY29uY2F0KHRydW5jYXRvciwgXCIoXCIpLmNvbmNhdChhcnJheS5sZW5ndGggLSBhcnJheVtpXSArIDEsIFwiKVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIG91dHB1dCArPSBzdHJpbmc7XG4gICAgfVxuXG4gICAgdmFyIHByb3BlcnR5Q29udGVudHMgPSAnJztcblxuICAgIGlmIChub25JbmRleFByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICBwcm9wZXJ0eUNvbnRlbnRzID0gaW5zcGVjdExpc3Qobm9uSW5kZXhQcm9wZXJ0aWVzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBba2V5LCBhcnJheVtrZXldXTtcbiAgICAgIH0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICAgIH1cblxuICAgIHJldHVybiBcIlwiLmNvbmNhdChuYW1lLCBcIlsgXCIpLmNvbmNhdChvdXRwdXQpLmNvbmNhdChwcm9wZXJ0eUNvbnRlbnRzID8gXCIsIFwiLmNvbmNhdChwcm9wZXJ0eUNvbnRlbnRzKSA6ICcnLCBcIiBdXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zcGVjdERhdGUoZGF0ZU9iamVjdCwgb3B0aW9ucykge1xuICAgIHZhciBzdHJpbmdSZXByZXNlbnRhdGlvbiA9IGRhdGVPYmplY3QudG9KU09OKCk7XG5cbiAgICBpZiAoc3RyaW5nUmVwcmVzZW50YXRpb24gPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnSW52YWxpZCBEYXRlJztcbiAgICB9XG5cbiAgICB2YXIgc3BsaXQgPSBzdHJpbmdSZXByZXNlbnRhdGlvbi5zcGxpdCgnVCcpO1xuICAgIHZhciBkYXRlID0gc3BsaXRbMF07IC8vIElmIHdlIG5lZWQgdG8gLSB0cnVuY2F0ZSB0aGUgdGltZSBwb3J0aW9uLCBidXQgbmV2ZXIgdGhlIGRhdGVcblxuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoXCJcIi5jb25jYXQoZGF0ZSwgXCJUXCIpLmNvbmNhdCh0cnVuY2F0ZShzcGxpdFsxXSwgb3B0aW9ucy50cnVuY2F0ZSAtIGRhdGUubGVuZ3RoIC0gMSkpLCAnZGF0ZScpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zcGVjdEZ1bmN0aW9uKGZ1bmMsIG9wdGlvbnMpIHtcbiAgICB2YXIgbmFtZSA9IGdldEZ1bmNOYW1lXzEoZnVuYyk7XG5cbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoJ1tGdW5jdGlvbl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoXCJbRnVuY3Rpb24gXCIuY29uY2F0KHRydW5jYXRlKG5hbWUsIG9wdGlvbnMudHJ1bmNhdGUgLSAxMSksIFwiXVwiKSwgJ3NwZWNpYWwnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc3BlY3RNYXBFbnRyeShfcmVmLCBvcHRpb25zKSB7XG4gICAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMiksXG4gICAgICAgIGtleSA9IF9yZWYyWzBdLFxuICAgICAgICB2YWx1ZSA9IF9yZWYyWzFdO1xuXG4gICAgb3B0aW9ucy50cnVuY2F0ZSAtPSA0O1xuICAgIGtleSA9IG9wdGlvbnMuaW5zcGVjdChrZXksIG9wdGlvbnMpO1xuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0ga2V5Lmxlbmd0aDtcbiAgICB2YWx1ZSA9IG9wdGlvbnMuaW5zcGVjdCh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KGtleSwgXCIgPT4gXCIpLmNvbmNhdCh2YWx1ZSk7XG4gIH0gLy8gSUUxMSBkb2Vzbid0IHN1cHBvcnQgYG1hcC5lbnRyaWVzKClgXG5cblxuICBmdW5jdGlvbiBtYXBUb0VudHJpZXMobWFwKSB7XG4gICAgdmFyIGVudHJpZXMgPSBbXTtcbiAgICBtYXAuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgZW50cmllcy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGVudHJpZXM7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNwZWN0TWFwKG1hcCwgb3B0aW9ucykge1xuICAgIHZhciBzaXplID0gbWFwLnNpemUgLSAxO1xuXG4gICAgaWYgKHNpemUgPD0gMCkge1xuICAgICAgcmV0dXJuICdNYXB7fSc7XG4gICAgfVxuXG4gICAgb3B0aW9ucy50cnVuY2F0ZSAtPSA3O1xuICAgIHJldHVybiBcIk1hcHsgXCIuY29uY2F0KGluc3BlY3RMaXN0KG1hcFRvRW50cmllcyhtYXApLCBvcHRpb25zLCBpbnNwZWN0TWFwRW50cnkpLCBcIiB9XCIpO1xuICB9XG5cbiAgdmFyIGlzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIChpKSB7XG4gICAgcmV0dXJuIGkgIT09IGk7XG4gIH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG5cblxuICBmdW5jdGlvbiBpbnNwZWN0TnVtYmVyKG51bWJlciwgb3B0aW9ucykge1xuICAgIGlmIChpc05hTihudW1iZXIpKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKCdOYU4nLCAnbnVtYmVyJyk7XG4gICAgfVxuXG4gICAgaWYgKG51bWJlciA9PT0gSW5maW5pdHkpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoJ0luZmluaXR5JywgJ251bWJlcicpO1xuICAgIH1cblxuICAgIGlmIChudW1iZXIgPT09IC1JbmZpbml0eSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZSgnLUluZmluaXR5JywgJ251bWJlcicpO1xuICAgIH1cblxuICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoMSAvIG51bWJlciA9PT0gSW5maW5pdHkgPyAnKzAnIDogJy0wJywgJ251bWJlcicpO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUodHJ1bmNhdGUobnVtYmVyLCBvcHRpb25zLnRydW5jYXRlKSwgJ251bWJlcicpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zcGVjdEJpZ0ludChudW1iZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgbnVtcyA9IHRydW5jYXRlKG51bWJlci50b1N0cmluZygpLCBvcHRpb25zLnRydW5jYXRlIC0gMSk7XG4gICAgaWYgKG51bXMgIT09IHRydW5jYXRvcikgbnVtcyArPSAnbic7XG4gICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShudW1zLCAnYmlnaW50Jyk7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNwZWN0UmVnRXhwKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgdmFyIGZsYWdzID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLycpWzJdO1xuICAgIHZhciBzb3VyY2VMZW5ndGggPSBvcHRpb25zLnRydW5jYXRlIC0gKDIgKyBmbGFncy5sZW5ndGgpO1xuICAgIHZhciBzb3VyY2UgPSB2YWx1ZS5zb3VyY2U7XG4gICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShcIi9cIi5jb25jYXQodHJ1bmNhdGUoc291cmNlLCBzb3VyY2VMZW5ndGgpLCBcIi9cIikuY29uY2F0KGZsYWdzKSwgJ3JlZ2V4cCcpO1xuICB9XG5cbiAgZnVuY3Rpb24gYXJyYXlGcm9tU2V0KHNldCkge1xuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICBzZXQuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zcGVjdFNldChzZXQsIG9wdGlvbnMpIHtcbiAgICBpZiAoc2V0LnNpemUgPT09IDApIHJldHVybiAnU2V0e30nO1xuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gNztcbiAgICByZXR1cm4gXCJTZXR7IFwiLmNvbmNhdChpbnNwZWN0TGlzdChhcnJheUZyb21TZXQoc2V0KSwgb3B0aW9ucyksIFwiIH1cIik7XG4gIH1cblxuICB2YXIgc3RyaW5nRXNjYXBlQ2hhcnMgPSBuZXcgUmVnRXhwKFwiWydcXFxcdTAwMDAtXFxcXHUwMDFmXFxcXHUwMDdmLVxcXFx1MDA5ZlxcXFx1MDBhZFxcXFx1MDYwMC1cXFxcdTA2MDRcXFxcdTA3MGZcXFxcdTE3YjRcXFxcdTE3YjVcIiArIFwiXFxcXHUyMDBjLVxcXFx1MjAwZlxcXFx1MjAyOC1cXFxcdTIwMmZcXFxcdTIwNjAtXFxcXHUyMDZmXFxcXHVmZWZmXFxcXHVmZmYwLVxcXFx1ZmZmZl1cIiwgJ2cnKTtcbiAgdmFyIGVzY2FwZUNoYXJhY3RlcnMgPSB7XG4gICAgJ1xcYic6ICdcXFxcYicsXG4gICAgJ1xcdCc6ICdcXFxcdCcsXG4gICAgJ1xcbic6ICdcXFxcbicsXG4gICAgJ1xcZic6ICdcXFxcZicsXG4gICAgJ1xccic6ICdcXFxccicsXG4gICAgXCInXCI6IFwiXFxcXCdcIixcbiAgICAnXFxcXCc6ICdcXFxcXFxcXCdcbiAgfTtcbiAgdmFyIGhleCA9IDE2O1xuICB2YXIgdW5pY29kZUxlbmd0aCA9IDQ7XG5cbiAgZnVuY3Rpb24gZXNjYXBlKGNoYXIpIHtcbiAgICByZXR1cm4gZXNjYXBlQ2hhcmFjdGVyc1tjaGFyXSB8fCBcIlxcXFx1XCIuY29uY2F0KFwiMDAwMFwiLmNvbmNhdChjaGFyLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoaGV4KSkuc2xpY2UoLXVuaWNvZGVMZW5ndGgpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyaW5nLCBvcHRpb25zKSB7XG4gICAgaWYgKHN0cmluZ0VzY2FwZUNoYXJzLnRlc3Qoc3RyaW5nKSkge1xuICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2Uoc3RyaW5nRXNjYXBlQ2hhcnMsIGVzY2FwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShcIidcIi5jb25jYXQodHJ1bmNhdGUoc3RyaW5nLCBvcHRpb25zLnRydW5jYXRlIC0gMiksIFwiJ1wiKSwgJ3N0cmluZycpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zcGVjdFN5bWJvbCh2YWx1ZSkge1xuICAgIGlmICgnZGVzY3JpcHRpb24nIGluIFN5bWJvbC5wcm90b3R5cGUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5kZXNjcmlwdGlvbiA/IFwiU3ltYm9sKFwiLmNvbmNhdCh2YWx1ZS5kZXNjcmlwdGlvbiwgXCIpXCIpIDogJ1N5bWJvbCgpJztcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHZhciBnZXRQcm9taXNlVmFsdWUgPSBmdW5jdGlvbiBnZXRQcm9taXNlVmFsdWUoKSB7XG4gICAgcmV0dXJuICdQcm9taXNle1x1MjAyNn0nO1xuICB9O1xuXG4gIHRyeSB7XG4gICAgdmFyIF9wcm9jZXNzJGJpbmRpbmcgPSBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKSxcbiAgICAgICAgZ2V0UHJvbWlzZURldGFpbHMgPSBfcHJvY2VzcyRiaW5kaW5nLmdldFByb21pc2VEZXRhaWxzLFxuICAgICAgICBrUGVuZGluZyA9IF9wcm9jZXNzJGJpbmRpbmcua1BlbmRpbmcsXG4gICAgICAgIGtSZWplY3RlZCA9IF9wcm9jZXNzJGJpbmRpbmcua1JlamVjdGVkO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZ2V0UHJvbWlzZURldGFpbHMoUHJvbWlzZS5yZXNvbHZlKCkpKSkge1xuICAgICAgZ2V0UHJvbWlzZVZhbHVlID0gZnVuY3Rpb24gZ2V0UHJvbWlzZVZhbHVlKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfZ2V0UHJvbWlzZURldGFpbHMgPSBnZXRQcm9taXNlRGV0YWlscyh2YWx1ZSksXG4gICAgICAgICAgICBfZ2V0UHJvbWlzZURldGFpbHMyID0gX3NsaWNlZFRvQXJyYXkoX2dldFByb21pc2VEZXRhaWxzLCAyKSxcbiAgICAgICAgICAgIHN0YXRlID0gX2dldFByb21pc2VEZXRhaWxzMlswXSxcbiAgICAgICAgICAgIGlubmVyVmFsdWUgPSBfZ2V0UHJvbWlzZURldGFpbHMyWzFdO1xuXG4gICAgICAgIGlmIChzdGF0ZSA9PT0ga1BlbmRpbmcpIHtcbiAgICAgICAgICByZXR1cm4gJ1Byb21pc2V7PHBlbmRpbmc+fSc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gXCJQcm9taXNlXCIuY29uY2F0KHN0YXRlID09PSBrUmVqZWN0ZWQgPyAnIScgOiAnJywgXCJ7XCIpLmNvbmNhdChvcHRpb25zLmluc3BlY3QoaW5uZXJWYWx1ZSwgb3B0aW9ucyksIFwifVwiKTtcbiAgICAgIH07XG4gICAgfVxuICB9IGNhdGNoIChub3ROb2RlKSB7XG4gICAgLyogaWdub3JlICovXG4gIH1cblxuICB2YXIgaW5zcGVjdFByb21pc2UgPSBnZXRQcm9taXNlVmFsdWU7XG5cbiAgZnVuY3Rpb24gaW5zcGVjdE9iamVjdChvYmplY3QsIG9wdGlvbnMpIHtcbiAgICB2YXIgcHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpIDogW107XG5cbiAgICBpZiAocHJvcGVydGllcy5sZW5ndGggPT09IDAgJiYgc3ltYm9scy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAne30nO1xuICAgIH1cblxuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gNDtcbiAgICBvcHRpb25zLnNlZW4gPSBvcHRpb25zLnNlZW4gfHwgW107XG5cbiAgICBpZiAob3B0aW9ucy5zZWVuLmluZGV4T2Yob2JqZWN0KSA+PSAwKSB7XG4gICAgICByZXR1cm4gJ1tDaXJjdWxhcl0nO1xuICAgIH1cblxuICAgIG9wdGlvbnMuc2Vlbi5wdXNoKG9iamVjdCk7XG4gICAgdmFyIHByb3BlcnR5Q29udGVudHMgPSBpbnNwZWN0TGlzdChwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gW2tleSwgb2JqZWN0W2tleV1dO1xuICAgIH0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICAgIHZhciBzeW1ib2xDb250ZW50cyA9IGluc3BlY3RMaXN0KHN5bWJvbHMubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiBba2V5LCBvYmplY3Rba2V5XV07XG4gICAgfSksIG9wdGlvbnMsIGluc3BlY3RQcm9wZXJ0eSk7XG4gICAgb3B0aW9ucy5zZWVuLnBvcCgpO1xuICAgIHZhciBzZXAgPSAnJztcblxuICAgIGlmIChwcm9wZXJ0eUNvbnRlbnRzICYmIHN5bWJvbENvbnRlbnRzKSB7XG4gICAgICBzZXAgPSAnLCAnO1xuICAgIH1cblxuICAgIHJldHVybiBcInsgXCIuY29uY2F0KHByb3BlcnR5Q29udGVudHMpLmNvbmNhdChzZXApLmNvbmNhdChzeW1ib2xDb250ZW50cywgXCIgfVwiKTtcbiAgfVxuXG4gIHZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZyA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IGZhbHNlO1xuICBmdW5jdGlvbiBpbnNwZWN0Q2xhc3ModmFsdWUsIG9wdGlvbnMpIHtcbiAgICB2YXIgbmFtZSA9ICcnO1xuXG4gICAgaWYgKHRvU3RyaW5nVGFnICYmIHRvU3RyaW5nVGFnIGluIHZhbHVlKSB7XG4gICAgICBuYW1lID0gdmFsdWVbdG9TdHJpbmdUYWddO1xuICAgIH1cblxuICAgIG5hbWUgPSBuYW1lIHx8IGdldEZ1bmNOYW1lXzEodmFsdWUuY29uc3RydWN0b3IpOyAvLyBCYWJlbCB0cmFuc2Zvcm1zIGFub255bW91cyBjbGFzc2VzIHRvIHRoZSBuYW1lIGBfY2xhc3NgXG5cbiAgICBpZiAoIW5hbWUgfHwgbmFtZSA9PT0gJ19jbGFzcycpIHtcbiAgICAgIG5hbWUgPSAnPEFub255bW91cyBDbGFzcz4nO1xuICAgIH1cblxuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gbmFtZS5sZW5ndGg7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KG5hbWUpLmNvbmNhdChpbnNwZWN0T2JqZWN0KHZhbHVlLCBvcHRpb25zKSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNwZWN0QXJndW1lbnRzKGFyZ3MsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHJldHVybiAnQXJndW1lbnRzW10nO1xuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gMTM7XG4gICAgcmV0dXJuIFwiQXJndW1lbnRzWyBcIi5jb25jYXQoaW5zcGVjdExpc3QoYXJncywgb3B0aW9ucyksIFwiIF1cIik7XG4gIH1cblxuICB2YXIgZXJyb3JLZXlzID0gWydzdGFjaycsICdsaW5lJywgJ2NvbHVtbicsICduYW1lJywgJ21lc3NhZ2UnLCAnZmlsZU5hbWUnLCAnbGluZU51bWJlcicsICdjb2x1bW5OdW1iZXInLCAnbnVtYmVyJywgJ2Rlc2NyaXB0aW9uJ107XG4gIGZ1bmN0aW9uIGluc3BlY3RPYmplY3QkMShlcnJvciwgb3B0aW9ucykge1xuICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gZXJyb3JLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTE7XG4gICAgfSk7XG4gICAgdmFyIG5hbWUgPSBlcnJvci5uYW1lO1xuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gbmFtZS5sZW5ndGg7XG4gICAgdmFyIG1lc3NhZ2UgPSAnJztcblxuICAgIGlmICh0eXBlb2YgZXJyb3IubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG1lc3NhZ2UgPSB0cnVuY2F0ZShlcnJvci5tZXNzYWdlLCBvcHRpb25zLnRydW5jYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvcGVydGllcy51bnNoaWZ0KCdtZXNzYWdlJyk7XG4gICAgfVxuXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UgPyBcIjogXCIuY29uY2F0KG1lc3NhZ2UpIDogJyc7XG4gICAgb3B0aW9ucy50cnVuY2F0ZSAtPSBtZXNzYWdlLmxlbmd0aCArIDU7XG4gICAgdmFyIHByb3BlcnR5Q29udGVudHMgPSBpbnNwZWN0TGlzdChwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gW2tleSwgZXJyb3Jba2V5XV07XG4gICAgfSksIG9wdGlvbnMsIGluc3BlY3RQcm9wZXJ0eSk7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KG5hbWUpLmNvbmNhdChtZXNzYWdlKS5jb25jYXQocHJvcGVydHlDb250ZW50cyA/IFwiIHsgXCIuY29uY2F0KHByb3BlcnR5Q29udGVudHMsIFwiIH1cIikgOiAnJyk7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNwZWN0QXR0cmlidXRlKF9yZWYsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAyKSxcbiAgICAgICAga2V5ID0gX3JlZjJbMF0sXG4gICAgICAgIHZhbHVlID0gX3JlZjJbMV07XG5cbiAgICBvcHRpb25zLnRydW5jYXRlIC09IDM7XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gXCJcIi5jb25jYXQob3B0aW9ucy5zdHlsaXplKGtleSwgJ3llbGxvdycpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gXCJcIi5jb25jYXQob3B0aW9ucy5zdHlsaXplKGtleSwgJ3llbGxvdycpLCBcIj1cIikuY29uY2F0KG9wdGlvbnMuc3R5bGl6ZShcIlxcXCJcIi5jb25jYXQodmFsdWUsIFwiXFxcIlwiKSwgJ3N0cmluZycpKTtcbiAgfVxuICBmdW5jdGlvbiBpbnNwZWN0SFRNTENvbGxlY3Rpb24oY29sbGVjdGlvbiwgb3B0aW9ucykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgIHJldHVybiBpbnNwZWN0TGlzdChjb2xsZWN0aW9uLCBvcHRpb25zLCBpbnNwZWN0SFRNTCwgJ1xcbicpO1xuICB9XG4gIGZ1bmN0aW9uIGluc3BlY3RIVE1MKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB2YXIgcHJvcGVydGllcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMoKTtcbiAgICB2YXIgbmFtZSA9IGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBoZWFkID0gb3B0aW9ucy5zdHlsaXplKFwiPFwiLmNvbmNhdChuYW1lKSwgJ3NwZWNpYWwnKTtcbiAgICB2YXIgaGVhZENsb3NlID0gb3B0aW9ucy5zdHlsaXplKFwiPlwiLCAnc3BlY2lhbCcpO1xuICAgIHZhciB0YWlsID0gb3B0aW9ucy5zdHlsaXplKFwiPC9cIi5jb25jYXQobmFtZSwgXCI+XCIpLCAnc3BlY2lhbCcpO1xuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gbmFtZS5sZW5ndGggKiAyICsgNTtcbiAgICB2YXIgcHJvcGVydHlDb250ZW50cyA9ICcnO1xuXG4gICAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgcHJvcGVydHlDb250ZW50cyArPSAnICc7XG4gICAgICBwcm9wZXJ0eUNvbnRlbnRzICs9IGluc3BlY3RMaXN0KHByb3BlcnRpZXMubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIFtrZXksIGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSldO1xuICAgICAgfSksIG9wdGlvbnMsIGluc3BlY3RBdHRyaWJ1dGUsICcgJyk7XG4gICAgfVxuXG4gICAgb3B0aW9ucy50cnVuY2F0ZSAtPSBwcm9wZXJ0eUNvbnRlbnRzLmxlbmd0aDtcbiAgICB2YXIgdHJ1bmNhdGUgPSBvcHRpb25zLnRydW5jYXRlO1xuICAgIHZhciBjaGlsZHJlbiA9IGluc3BlY3RIVE1MQ29sbGVjdGlvbihlbGVtZW50LmNoaWxkcmVuLCBvcHRpb25zKTtcblxuICAgIGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGggPiB0cnVuY2F0ZSkge1xuICAgICAgY2hpbGRyZW4gPSBcIlwiLmNvbmNhdCh0cnVuY2F0b3IsIFwiKFwiKS5jb25jYXQoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgsIFwiKVwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gXCJcIi5jb25jYXQoaGVhZCkuY29uY2F0KHByb3BlcnR5Q29udGVudHMpLmNvbmNhdChoZWFkQ2xvc2UpLmNvbmNhdChjaGlsZHJlbikuY29uY2F0KHRhaWwpO1xuICB9XG5cbiAgdmFyIHN5bWJvbHNTdXBwb3J0ZWQgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuZm9yID09PSAnZnVuY3Rpb24nO1xuICB2YXIgY2hhaUluc3BlY3QgPSBzeW1ib2xzU3VwcG9ydGVkID8gU3ltYm9sLmZvcignY2hhaS9pbnNwZWN0JykgOiAnQEBjaGFpL2luc3BlY3QnO1xuICB2YXIgbm9kZUluc3BlY3QgPSBmYWxzZTtcblxuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxuICAgIHZhciBub2RlVXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuICAgIG5vZGVJbnNwZWN0ID0gbm9kZVV0aWwuaW5zcGVjdCA/IG5vZGVVdGlsLmluc3BlY3QuY3VzdG9tIDogZmFsc2U7XG4gIH0gY2F0Y2ggKG5vTm9kZUluc3BlY3QpIHtcbiAgICBub2RlSW5zcGVjdCA9IGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gRmFrZU1hcCgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXRlbXBsYXRlXG4gICAgdGhpcy5rZXkgPSAnY2hhaS9sb3VwZV9fJyArIE1hdGgucmFuZG9tKCkgKyBEYXRlLm5vdygpO1xuICB9XG5cbiAgRmFrZU1hcC5wcm90b3R5cGUgPSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9iamVjdC1zaG9ydGhhbmRcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgIHJldHVybiBrZXlbdGhpcy5rZXldO1xuICAgIH0sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9iamVjdC1zaG9ydGhhbmRcbiAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmtleSBpbiBrZXk7XG4gICAgfSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JqZWN0LXNob3J0aGFuZFxuICAgIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgIGlmIChPYmplY3QuaXNFeHRlbnNpYmxlKGtleSkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGtleSwgdGhpcy5rZXksIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JqZWN0LXNob3J0aGFuZFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICB2YXIgY29uc3RydWN0b3JNYXAgPSBuZXcgKHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IEZha2VNYXApKCk7XG4gIHZhciBzdHJpbmdUYWdNYXAgPSB7fTtcbiAgdmFyIGJhc2VUeXBlc01hcCA9IHtcbiAgICB1bmRlZmluZWQ6IGZ1bmN0aW9uIHVuZGVmaW5lZCQxKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKCd1bmRlZmluZWQnLCAndW5kZWZpbmVkJyk7XG4gICAgfSxcbiAgICBudWxsOiBmdW5jdGlvbiBfbnVsbCh2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShudWxsLCAnbnVsbCcpO1xuICAgIH0sXG4gICAgYm9vbGVhbjogZnVuY3Rpb24gYm9vbGVhbih2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZSh2YWx1ZSwgJ2Jvb2xlYW4nKTtcbiAgICB9LFxuICAgIEJvb2xlYW46IGZ1bmN0aW9uIEJvb2xlYW4odmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUodmFsdWUsICdib29sZWFuJyk7XG4gICAgfSxcbiAgICBudW1iZXI6IGluc3BlY3ROdW1iZXIsXG4gICAgTnVtYmVyOiBpbnNwZWN0TnVtYmVyLFxuICAgIGJpZ2ludDogaW5zcGVjdEJpZ0ludCxcbiAgICBCaWdJbnQ6IGluc3BlY3RCaWdJbnQsXG4gICAgc3RyaW5nOiBpbnNwZWN0U3RyaW5nLFxuICAgIFN0cmluZzogaW5zcGVjdFN0cmluZyxcbiAgICBmdW5jdGlvbjogaW5zcGVjdEZ1bmN0aW9uLFxuICAgIEZ1bmN0aW9uOiBpbnNwZWN0RnVuY3Rpb24sXG4gICAgc3ltYm9sOiBpbnNwZWN0U3ltYm9sLFxuICAgIC8vIEEgU3ltYm9sIHBvbHlmaWxsIHdpbGwgcmV0dXJuIGBTeW1ib2xgIG5vdCBgc3ltYm9sYCBmcm9tIHR5cGVkZXRlY3RcbiAgICBTeW1ib2w6IGluc3BlY3RTeW1ib2wsXG4gICAgQXJyYXk6IGluc3BlY3RBcnJheSxcbiAgICBEYXRlOiBpbnNwZWN0RGF0ZSxcbiAgICBNYXA6IGluc3BlY3RNYXAsXG4gICAgU2V0OiBpbnNwZWN0U2V0LFxuICAgIFJlZ0V4cDogaW5zcGVjdFJlZ0V4cCxcbiAgICBQcm9taXNlOiBpbnNwZWN0UHJvbWlzZSxcbiAgICAvLyBXZWFrU2V0LCBXZWFrTWFwIGFyZSB0b3RhbGx5IG9wYXF1ZSB0byB1c1xuICAgIFdlYWtTZXQ6IGZ1bmN0aW9uIFdlYWtTZXQodmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoJ1dlYWtTZXR7XHUyMDI2fScsICdzcGVjaWFsJyk7XG4gICAgfSxcbiAgICBXZWFrTWFwOiBmdW5jdGlvbiBXZWFrTWFwKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKCdXZWFrTWFwe1x1MjAyNn0nLCAnc3BlY2lhbCcpO1xuICAgIH0sXG4gICAgQXJndW1lbnRzOiBpbnNwZWN0QXJndW1lbnRzLFxuICAgIEludDhBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gICAgVWludDhBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gICAgVWludDhDbGFtcGVkQXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICAgIEludDE2QXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICAgIFVpbnQxNkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgICBJbnQzMkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgICBVaW50MzJBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gICAgRmxvYXQzMkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgICBGbG9hdDY0QXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICAgIEdlbmVyYXRvcjogZnVuY3Rpb24gR2VuZXJhdG9yKCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0sXG4gICAgRGF0YVZpZXc6IGZ1bmN0aW9uIERhdGFWaWV3KCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0sXG4gICAgQXJyYXlCdWZmZXI6IGZ1bmN0aW9uIEFycmF5QnVmZmVyKCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0sXG4gICAgRXJyb3I6IGluc3BlY3RPYmplY3QkMSxcbiAgICBIVE1MQ29sbGVjdGlvbjogaW5zcGVjdEhUTUxDb2xsZWN0aW9uLFxuICAgIE5vZGVMaXN0OiBpbnNwZWN0SFRNTENvbGxlY3Rpb25cbiAgfTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcblxuICB2YXIgaW5zcGVjdEN1c3RvbSA9IGZ1bmN0aW9uIGluc3BlY3RDdXN0b20odmFsdWUsIG9wdGlvbnMsIHR5cGUpIHtcbiAgICBpZiAoY2hhaUluc3BlY3QgaW4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlW2NoYWlJbnNwZWN0XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHZhbHVlW2NoYWlJbnNwZWN0XShvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZUluc3BlY3QgJiYgbm9kZUluc3BlY3QgaW4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlW25vZGVJbnNwZWN0XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHZhbHVlW25vZGVJbnNwZWN0XShvcHRpb25zLmRlcHRoLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoJ2luc3BlY3QnIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5pbnNwZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdmFsdWUuaW5zcGVjdChvcHRpb25zLmRlcHRoLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoJ2NvbnN0cnVjdG9yJyBpbiB2YWx1ZSAmJiBjb25zdHJ1Y3Rvck1hcC5oYXModmFsdWUuY29uc3RydWN0b3IpKSB7XG4gICAgICByZXR1cm4gY29uc3RydWN0b3JNYXAuZ2V0KHZhbHVlLmNvbnN0cnVjdG9yKSh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKHN0cmluZ1RhZ01hcFt0eXBlXSkge1xuICAgICAgcmV0dXJuIHN0cmluZ1RhZ01hcFt0eXBlXSh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9O1xuXG4gIHZhciB0b1N0cmluZyQxID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcblxuICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG5vcm1hbGlzZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgb3B0aW9ucy5pbnNwZWN0ID0gaW5zcGVjdDtcbiAgICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgICBjdXN0b21JbnNwZWN0ID0gX29wdGlvbnMuY3VzdG9tSW5zcGVjdDtcbiAgICB2YXIgdHlwZSA9IHZhbHVlID09PSBudWxsID8gJ251bGwnIDogX3R5cGVvZih2YWx1ZSk7XG5cbiAgICBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHR5cGUgPSB0b1N0cmluZyQxLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKTtcbiAgICB9IC8vIElmIGl0IGlzIGEgYmFzZSB2YWx1ZSB0aGF0IHdlIGFscmVhZHkgc3VwcG9ydCwgdGhlbiB1c2UgTG91cGUncyBpbnNwZWN0b3JcblxuXG4gICAgaWYgKGJhc2VUeXBlc01hcFt0eXBlXSkge1xuICAgICAgcmV0dXJuIGJhc2VUeXBlc01hcFt0eXBlXSh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfSAvLyBJZiBgb3B0aW9ucy5jdXN0b21JbnNwZWN0YCBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRyeSB0byB1c2UgdGhlIGN1c3RvbSBpbnNwZWN0b3JcblxuXG4gICAgaWYgKGN1c3RvbUluc3BlY3QgJiYgdmFsdWUpIHtcbiAgICAgIHZhciBvdXRwdXQgPSBpbnNwZWN0Q3VzdG9tKHZhbHVlLCBvcHRpb25zLCB0eXBlKTtcblxuICAgICAgaWYgKG91dHB1dCkge1xuICAgICAgICBpZiAodHlwZW9mIG91dHB1dCA9PT0gJ3N0cmluZycpIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIHJldHVybiBpbnNwZWN0KG91dHB1dCwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByb3RvID0gdmFsdWUgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpIDogZmFsc2U7IC8vIElmIGl0J3MgYSBwbGFpbiBPYmplY3QgdGhlbiB1c2UgTG91cGUncyBpbnNwZWN0b3JcblxuICAgIGlmIChwcm90byA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBwcm90byA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGluc3BlY3RPYmplY3QodmFsdWUsIG9wdGlvbnMpO1xuICAgIH0gLy8gU3BlY2lmaWNhbGx5IGFjY291bnQgZm9yIEhUTUxFbGVtZW50c1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuXG5cbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIEhUTUxFbGVtZW50ID09PSAnZnVuY3Rpb24nICYmIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBpbnNwZWN0SFRNTCh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKCdjb25zdHJ1Y3RvcicgaW4gdmFsdWUpIHtcbiAgICAgIC8vIElmIGl0IGlzIGEgY2xhc3MsIGluc3BlY3QgaXQgbGlrZSBhbiBvYmplY3QgYnV0IGFkZCB0aGUgY29uc3RydWN0b3IgbmFtZVxuICAgICAgaWYgKHZhbHVlLmNvbnN0cnVjdG9yICE9PSBPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIGluc3BlY3RDbGFzcyh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICB9IC8vIElmIGl0IGlzIGFuIG9iamVjdCB3aXRoIGFuIGFub255bW91cyBwcm90b3R5cGUsIGRpc3BsYXkgaXQgYXMgYW4gb2JqZWN0LlxuXG5cbiAgICAgIHJldHVybiBpbnNwZWN0T2JqZWN0KHZhbHVlLCBvcHRpb25zKTtcbiAgICB9IC8vIGxhc3QgY2hhbmNlIHRvIGNoZWNrIGlmIGl0J3MgYW4gb2JqZWN0XG5cblxuICAgIGlmICh2YWx1ZSA9PT0gT2JqZWN0KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGluc3BlY3RPYmplY3QodmFsdWUsIG9wdGlvbnMpO1xuICAgIH0gLy8gV2UgaGF2ZSBydW4gb3V0IG9mIG9wdGlvbnMhIEp1c3Qgc3RyaW5naWZ5IHRoZSB2YWx1ZVxuXG5cbiAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKFN0cmluZyh2YWx1ZSksIHR5cGUpO1xuICB9XG4gIGZ1bmN0aW9uIHJlZ2lzdGVyQ29uc3RydWN0b3IoY29uc3RydWN0b3IsIGluc3BlY3Rvcikge1xuICAgIGlmIChjb25zdHJ1Y3Rvck1hcC5oYXMoY29uc3RydWN0b3IpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3JNYXAuc2V0KGNvbnN0cnVjdG9yLCBpbnNwZWN0b3IpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGZ1bmN0aW9uIHJlZ2lzdGVyU3RyaW5nVGFnKHN0cmluZ1RhZywgaW5zcGVjdG9yKSB7XG4gICAgaWYgKHN0cmluZ1RhZyBpbiBzdHJpbmdUYWdNYXApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzdHJpbmdUYWdNYXBbc3RyaW5nVGFnXSA9IGluc3BlY3RvcjtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgY3VzdG9tID0gY2hhaUluc3BlY3Q7XG5cbiAgZXhwb3J0cy5jdXN0b20gPSBjdXN0b207XG4gIGV4cG9ydHMuZGVmYXVsdCA9IGluc3BlY3Q7XG4gIGV4cG9ydHMuaW5zcGVjdCA9IGluc3BlY3Q7XG4gIGV4cG9ydHMucmVnaXN0ZXJDb25zdHJ1Y3RvciA9IHJlZ2lzdGVyQ29uc3RydWN0b3I7XG4gIGV4cG9ydHMucmVnaXN0ZXJTdHJpbmdUYWcgPSByZWdpc3RlclN0cmluZ1RhZztcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG59KSkpO1xuIiwgIm1vZHVsZS5leHBvcnRzID0ge1xuXG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLmluY2x1ZGVTdGFja1xuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgaW5mbHVlbmNlcyB3aGV0aGVyIHN0YWNrIHRyYWNlXG4gICAqIGlzIGluY2x1ZGVkIGluIEFzc2VydGlvbiBlcnJvciBtZXNzYWdlLiBEZWZhdWx0IG9mIGZhbHNlXG4gICAqIHN1cHByZXNzZXMgc3RhY2sgdHJhY2UgaW4gdGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqXG4gICAqICAgICBjaGFpLmNvbmZpZy5pbmNsdWRlU3RhY2sgPSB0cnVlOyAgLy8gZW5hYmxlIHN0YWNrIG9uIGVycm9yXG4gICAqXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn1cbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgaW5jbHVkZVN0YWNrOiBmYWxzZSxcblxuICAvKipcbiAgICogIyMjIGNvbmZpZy5zaG93RGlmZlxuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgaW5mbHVlbmNlcyB3aGV0aGVyIG9yIG5vdFxuICAgKiB0aGUgYHNob3dEaWZmYCBmbGFnIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgdGhyb3duXG4gICAqIEFzc2VydGlvbkVycm9ycy4gYGZhbHNlYCB3aWxsIGFsd2F5cyBiZSBgZmFsc2VgOyBgdHJ1ZWBcbiAgICogd2lsbCBiZSB0cnVlIHdoZW4gdGhlIGFzc2VydGlvbiBoYXMgcmVxdWVzdGVkIGEgZGlmZlxuICAgKiBiZSBzaG93bi5cbiAgICpcbiAgICogQHBhcmFtIHtCb29sZWFufVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBzaG93RGlmZjogdHJ1ZSxcblxuICAvKipcbiAgICogIyMjIGNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZFxuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgc2V0cyBsZW5ndGggdGhyZXNob2xkIGZvciBhY3R1YWwgYW5kXG4gICAqIGV4cGVjdGVkIHZhbHVlcyBpbiBhc3NlcnRpb24gZXJyb3JzLiBJZiB0aGlzIHRocmVzaG9sZCBpcyBleGNlZWRlZCwgZm9yXG4gICAqIGV4YW1wbGUgZm9yIGxhcmdlIGRhdGEgc3RydWN0dXJlcywgdGhlIHZhbHVlIGlzIHJlcGxhY2VkIHdpdGggc29tZXRoaW5nXG4gICAqIGxpa2UgYFsgQXJyYXkoMykgXWAgb3IgYHsgT2JqZWN0IChwcm9wMSwgcHJvcDIpIH1gLlxuICAgKlxuICAgKiBTZXQgaXQgdG8gemVybyBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIHRydW5jYXRpbmcgYWx0b2dldGhlci5cbiAgICpcbiAgICogVGhpcyBpcyBlc3BlY2lhbGx5IHVzZXJmdWwgd2hlbiBkb2luZyBhc3NlcnRpb25zIG9uIGFycmF5czogaGF2aW5nIHRoaXNcbiAgICogc2V0IHRvIGEgcmVhc29uYWJsZSBsYXJnZSB2YWx1ZSBtYWtlcyB0aGUgZmFpbHVyZSBtZXNzYWdlcyByZWFkaWx5XG4gICAqIGluc3BlY3RhYmxlLlxuICAgKlxuICAgKiAgICAgY2hhaS5jb25maWcudHJ1bmNhdGVUaHJlc2hvbGQgPSAwOyAgLy8gZGlzYWJsZSB0cnVuY2F0aW5nXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICB0cnVuY2F0ZVRocmVzaG9sZDogNDAsXG5cbiAgLyoqXG4gICAqICMjIyBjb25maWcudXNlUHJveHlcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGRlZmluZXMgaWYgY2hhaSB3aWxsIHVzZSBhIFByb3h5IHRvIHRocm93XG4gICAqIGFuIGVycm9yIHdoZW4gYSBub24tZXhpc3RlbnQgcHJvcGVydHkgaXMgcmVhZCwgd2hpY2ggcHJvdGVjdHMgdXNlcnNcbiAgICogZnJvbSB0eXBvcyB3aGVuIHVzaW5nIHByb3BlcnR5LWJhc2VkIGFzc2VydGlvbnMuXG4gICAqXG4gICAqIFNldCBpdCB0byBmYWxzZSBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS5cbiAgICpcbiAgICogICAgIGNoYWkuY29uZmlnLnVzZVByb3h5ID0gZmFsc2U7ICAvLyBkaXNhYmxlIHVzZSBvZiBQcm94eVxuICAgKlxuICAgKiBUaGlzIGZlYXR1cmUgaXMgYXV0b21hdGljYWxseSBkaXNhYmxlZCByZWdhcmRsZXNzIG9mIHRoaXMgY29uZmlnIHZhbHVlXG4gICAqIGluIGVudmlyb25tZW50cyB0aGF0IGRvbid0IHN1cHBvcnQgcHJveGllcy5cbiAgICpcbiAgICogQHBhcmFtIHtCb29sZWFufVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICB1c2VQcm94eTogdHJ1ZSxcblxuICAvKipcbiAgICogIyMjIGNvbmZpZy5wcm94eUV4Y2x1ZGVkS2V5c1xuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgZGVmaW5lcyB3aGljaCBwcm9wZXJ0aWVzIHNob3VsZCBiZSBpZ25vcmVkXG4gICAqIGluc3RlYWQgb2YgdGhyb3dpbmcgYW4gZXJyb3IgaWYgdGhleSBkbyBub3QgZXhpc3Qgb24gdGhlIGFzc2VydGlvbi5cbiAgICogVGhpcyBpcyBvbmx5IGFwcGxpZWQgaWYgdGhlIGVudmlyb25tZW50IENoYWkgaXMgcnVubmluZyBpbiBzdXBwb3J0cyBwcm94aWVzIGFuZFxuICAgKiBpZiB0aGUgYHVzZVByb3h5YCBjb25maWd1cmF0aW9uIHNldHRpbmcgaXMgZW5hYmxlZC5cbiAgICogQnkgZGVmYXVsdCwgYHRoZW5gIGFuZCBgaW5zcGVjdGAgd2lsbCBub3QgdGhyb3cgYW4gZXJyb3IgaWYgdGhleSBkbyBub3QgZXhpc3Qgb24gdGhlXG4gICAqIGFzc2VydGlvbiBvYmplY3QgYmVjYXVzZSB0aGUgYC5pbnNwZWN0YCBwcm9wZXJ0eSBpcyByZWFkIGJ5IGB1dGlsLmluc3BlY3RgIChmb3IgZXhhbXBsZSwgd2hlblxuICAgKiB1c2luZyBgY29uc29sZS5sb2dgIG9uIHRoZSBhc3NlcnRpb24gb2JqZWN0KSBhbmQgYC50aGVuYCBpcyBuZWNlc3NhcnkgZm9yIHByb21pc2UgdHlwZS1jaGVja2luZy5cbiAgICpcbiAgICogICAgIC8vIEJ5IGRlZmF1bHQgdGhlc2Uga2V5cyB3aWxsIG5vdCB0aHJvdyBhbiBlcnJvciBpZiB0aGV5IGRvIG5vdCBleGlzdCBvbiB0aGUgYXNzZXJ0aW9uIG9iamVjdFxuICAgKiAgICAgY2hhaS5jb25maWcucHJveHlFeGNsdWRlZEtleXMgPSBbJ3RoZW4nLCAnaW5zcGVjdCddO1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBwcm94eUV4Y2x1ZGVkS2V5czogWyd0aGVuJywgJ2NhdGNoJywgJ2luc3BlY3QnLCAndG9KU09OJ11cbn07XG4iLCAiLy8gVGhpcyBpcyAoYWxtb3N0KSBkaXJlY3RseSBmcm9tIE5vZGUuanMgdXRpbHNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9ibG9iL2Y4YzMzNWQwY2FmNDdmMTZkMzE0MTNmODlhYTI4ZWRhMzg3OGUzYWEvbGliL3V0aWwuanNcblxudmFyIGdldE5hbWUgPSByZXF1aXJlKCdnZXQtZnVuYy1uYW1lJyk7XG52YXIgbG91cGUgPSByZXF1aXJlKCdsb3VwZScpO1xudmFyIGNvbmZpZyA9IHJlcXVpcmUoJy4uL2NvbmZpZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGluc3BlY3Q7XG5cbi8qKlxuICogIyMjIC5pbnNwZWN0KG9iaiwgW3Nob3dIaWRkZW5dLCBbZGVwdGhdLCBbY29sb3JzXSlcbiAqXG4gKiBFY2hvZXMgdGhlIHZhbHVlIG9mIGEgdmFsdWUuIFRyaWVzIHRvIHByaW50IHRoZSB2YWx1ZSBvdXRcbiAqIGluIHRoZSBiZXN0IHdheSBwb3NzaWJsZSBnaXZlbiB0aGUgZGlmZmVyZW50IHR5cGVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBwcmludCBvdXQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHNob3dIaWRkZW4gRmxhZyB0aGF0IHNob3dzIGhpZGRlbiAobm90IGVudW1lcmFibGUpXG4gKiAgICBwcm9wZXJ0aWVzIG9mIG9iamVjdHMuIERlZmF1bHQgaXMgZmFsc2UuXG4gKiBAcGFyYW0ge051bWJlcn0gZGVwdGggRGVwdGggaW4gd2hpY2ggdG8gZGVzY2VuZCBpbiBvYmplY3QuIERlZmF1bHQgaXMgMi5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gY29sb3JzIEZsYWcgdG8gdHVybiBvbiBBTlNJIGVzY2FwZSBjb2RlcyB0byBjb2xvciB0aGVcbiAqICAgIG91dHB1dC4gRGVmYXVsdCBpcyBmYWxzZSAobm8gY29sb3JpbmcpLlxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgaW5zcGVjdFxuICovXG5mdW5jdGlvbiBpbnNwZWN0KG9iaiwgc2hvd0hpZGRlbiwgZGVwdGgsIGNvbG9ycykge1xuICB2YXIgb3B0aW9ucyA9IHtcbiAgICBjb2xvcnM6IGNvbG9ycyxcbiAgICBkZXB0aDogKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcgPyAyIDogZGVwdGgpLFxuICAgIHNob3dIaWRkZW46IHNob3dIaWRkZW4sXG4gICAgdHJ1bmNhdGU6IGNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZCA/IGNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZCA6IEluZmluaXR5LFxuICB9O1xuICByZXR1cm4gbG91cGUuaW5zcGVjdChvYmosIG9wdGlvbnMpO1xufVxuIiwgIi8qIVxuICogQ2hhaSAtIGZsYWcgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qIVxuICogTW9kdWxlIGRlcGVuZGVuY2llc1xuICovXG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnLi9pbnNwZWN0Jyk7XG52YXIgY29uZmlnID0gcmVxdWlyZSgnLi4vY29uZmlnJyk7XG5cbi8qKlxuICogIyMjIC5vYmpEaXNwbGF5KG9iamVjdClcbiAqXG4gKiBEZXRlcm1pbmVzIGlmIGFuIG9iamVjdCBvciBhbiBhcnJheSBtYXRjaGVzXG4gKiBjcml0ZXJpYSB0byBiZSBpbnNwZWN0ZWQgaW4tbGluZSBmb3IgZXJyb3JcbiAqIG1lc3NhZ2VzIG9yIHNob3VsZCBiZSB0cnVuY2F0ZWQuXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gamF2YXNjcmlwdCBvYmplY3QgdG8gaW5zcGVjdFxuICogQHJldHVybnMge3N0cmluZ30gc3RyaW5naWZpZWQgb2JqZWN0XG4gKiBAbmFtZSBvYmpEaXNwbGF5XG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gb2JqRGlzcGxheShvYmopIHtcbiAgdmFyIHN0ciA9IGluc3BlY3Qob2JqKVxuICAgICwgdHlwZSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopO1xuXG4gIGlmIChjb25maWcudHJ1bmNhdGVUaHJlc2hvbGQgJiYgc3RyLmxlbmd0aCA+PSBjb25maWcudHJ1bmNhdGVUaHJlc2hvbGQpIHtcbiAgICBpZiAodHlwZSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJykge1xuICAgICAgcmV0dXJuICFvYmoubmFtZSB8fCBvYmoubmFtZSA9PT0gJydcbiAgICAgICAgPyAnW0Z1bmN0aW9uXSdcbiAgICAgICAgOiAnW0Z1bmN0aW9uOiAnICsgb2JqLm5hbWUgKyAnXSc7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICByZXR1cm4gJ1sgQXJyYXkoJyArIG9iai5sZW5ndGggKyAnKSBdJztcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iailcbiAgICAgICAgLCBrc3RyID0ga2V5cy5sZW5ndGggPiAyXG4gICAgICAgICAgPyBrZXlzLnNwbGljZSgwLCAyKS5qb2luKCcsICcpICsgJywgLi4uJ1xuICAgICAgICAgIDoga2V5cy5qb2luKCcsICcpO1xuICAgICAgcmV0dXJuICd7IE9iamVjdCAoJyArIGtzdHIgKyAnKSB9JztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxufTtcbiIsICIvKiFcbiAqIENoYWkgLSBtZXNzYWdlIGNvbXBvc2l0aW9uIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKiFcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXNcbiAqL1xuXG52YXIgZmxhZyA9IHJlcXVpcmUoJy4vZmxhZycpXG4gICwgZ2V0QWN0dWFsID0gcmVxdWlyZSgnLi9nZXRBY3R1YWwnKVxuICAsIG9iakRpc3BsYXkgPSByZXF1aXJlKCcuL29iakRpc3BsYXknKTtcblxuLyoqXG4gKiAjIyMgLmdldE1lc3NhZ2Uob2JqZWN0LCBtZXNzYWdlLCBuZWdhdGVNZXNzYWdlKVxuICpcbiAqIENvbnN0cnVjdCB0aGUgZXJyb3IgbWVzc2FnZSBiYXNlZCBvbiBmbGFnc1xuICogYW5kIHRlbXBsYXRlIHRhZ3MuIFRlbXBsYXRlIHRhZ3Mgd2lsbCByZXR1cm5cbiAqIGEgc3RyaW5naWZpZWQgaW5zcGVjdGlvbiBvZiB0aGUgb2JqZWN0IHJlZmVyZW5jZWQuXG4gKlxuICogTWVzc2FnZSB0ZW1wbGF0ZSB0YWdzOlxuICogLSBgI3t0aGlzfWAgY3VycmVudCBhc3NlcnRlZCBvYmplY3RcbiAqIC0gYCN7YWN0fWAgYWN0dWFsIHZhbHVlXG4gKiAtIGAje2V4cH1gIGV4cGVjdGVkIHZhbHVlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCAoY29uc3RydWN0ZWQgQXNzZXJ0aW9uKVxuICogQHBhcmFtIHtBcmd1bWVudHN9IGNoYWkuQXNzZXJ0aW9uLnByb3RvdHlwZS5hc3NlcnQgYXJndW1lbnRzXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBnZXRNZXNzYWdlXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0TWVzc2FnZShvYmosIGFyZ3MpIHtcbiAgdmFyIG5lZ2F0ZSA9IGZsYWcob2JqLCAnbmVnYXRlJylcbiAgICAsIHZhbCA9IGZsYWcob2JqLCAnb2JqZWN0JylcbiAgICAsIGV4cGVjdGVkID0gYXJnc1szXVxuICAgICwgYWN0dWFsID0gZ2V0QWN0dWFsKG9iaiwgYXJncylcbiAgICAsIG1zZyA9IG5lZ2F0ZSA/IGFyZ3NbMl0gOiBhcmdzWzFdXG4gICAgLCBmbGFnTXNnID0gZmxhZyhvYmosICdtZXNzYWdlJyk7XG5cbiAgaWYodHlwZW9mIG1zZyA9PT0gXCJmdW5jdGlvblwiKSBtc2cgPSBtc2coKTtcbiAgbXNnID0gbXNnIHx8ICcnO1xuICBtc2cgPSBtc2dcbiAgICAucmVwbGFjZSgvI1xce3RoaXNcXH0vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gb2JqRGlzcGxheSh2YWwpOyB9KVxuICAgIC5yZXBsYWNlKC8jXFx7YWN0XFx9L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9iakRpc3BsYXkoYWN0dWFsKTsgfSlcbiAgICAucmVwbGFjZSgvI1xce2V4cFxcfS9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBvYmpEaXNwbGF5KGV4cGVjdGVkKTsgfSk7XG5cbiAgcmV0dXJuIGZsYWdNc2cgPyBmbGFnTXNnICsgJzogJyArIG1zZyA6IG1zZztcbn07XG4iLCAiLyohXG4gKiBDaGFpIC0gdHJhbnNmZXJGbGFncyB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiAjIyMgLnRyYW5zZmVyRmxhZ3MoYXNzZXJ0aW9uLCBvYmplY3QsIGluY2x1ZGVBbGwgPSB0cnVlKVxuICpcbiAqIFRyYW5zZmVyIGFsbCB0aGUgZmxhZ3MgZm9yIGBhc3NlcnRpb25gIHRvIGBvYmplY3RgLiBJZlxuICogYGluY2x1ZGVBbGxgIGlzIHNldCB0byBgZmFsc2VgLCB0aGVuIHRoZSBiYXNlIENoYWlcbiAqIGFzc2VydGlvbiBmbGFncyAobmFtZWx5IGBvYmplY3RgLCBgc3NmaWAsIGBsb2NrU3NmaWAsXG4gKiBhbmQgYG1lc3NhZ2VgKSB3aWxsIG5vdCBiZSB0cmFuc2ZlcnJlZC5cbiAqXG4gKlxuICogICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKCk7XG4gKiAgICAgdXRpbHMudHJhbnNmZXJGbGFncyhhc3NlcnRpb24sIG5ld0Fzc2VydGlvbik7XG4gKlxuICogICAgIHZhciBhbm90aGVyQXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbihteU9iaik7XG4gKiAgICAgdXRpbHMudHJhbnNmZXJGbGFncyhhc3NlcnRpb24sIGFub3RoZXJBc3NlcnRpb24sIGZhbHNlKTtcbiAqXG4gKiBAcGFyYW0ge0Fzc2VydGlvbn0gYXNzZXJ0aW9uIHRoZSBhc3NlcnRpb24gdG8gdHJhbnNmZXIgdGhlIGZsYWdzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgdGhlIG9iamVjdCB0byB0cmFuc2ZlciB0aGUgZmxhZ3MgdG87IHVzdWFsbHkgYSBuZXcgYXNzZXJ0aW9uXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGluY2x1ZGVBbGxcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIHRyYW5zZmVyRmxhZ3NcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdHJhbnNmZXJGbGFncyhhc3NlcnRpb24sIG9iamVjdCwgaW5jbHVkZUFsbCkge1xuICB2YXIgZmxhZ3MgPSBhc3NlcnRpb24uX19mbGFncyB8fCAoYXNzZXJ0aW9uLl9fZmxhZ3MgPSBPYmplY3QuY3JlYXRlKG51bGwpKTtcblxuICBpZiAoIW9iamVjdC5fX2ZsYWdzKSB7XG4gICAgb2JqZWN0Ll9fZmxhZ3MgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgaW5jbHVkZUFsbCA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDMgPyBpbmNsdWRlQWxsIDogdHJ1ZTtcblxuICBmb3IgKHZhciBmbGFnIGluIGZsYWdzKSB7XG4gICAgaWYgKGluY2x1ZGVBbGwgfHxcbiAgICAgICAgKGZsYWcgIT09ICdvYmplY3QnICYmIGZsYWcgIT09ICdzc2ZpJyAmJiBmbGFnICE9PSAnbG9ja1NzZmknICYmIGZsYWcgIT0gJ21lc3NhZ2UnKSkge1xuICAgICAgb2JqZWN0Ll9fZmxhZ3NbZmxhZ10gPSBmbGFnc1tmbGFnXTtcbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFscyBTeW1ib2w6IGZhbHNlLCBVaW50OEFycmF5OiBmYWxzZSwgV2Vha01hcDogZmFsc2UgKi9cbi8qIVxuICogZGVlcC1lcWxcbiAqIENvcHlyaWdodChjKSAyMDEzIEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxudmFyIHR5cGUgPSByZXF1aXJlKCd0eXBlLWRldGVjdCcpO1xuZnVuY3Rpb24gRmFrZU1hcCgpIHtcbiAgdGhpcy5fa2V5ID0gJ2NoYWkvZGVlcC1lcWxfXycgKyBNYXRoLnJhbmRvbSgpICsgRGF0ZS5ub3coKTtcbn1cblxuRmFrZU1hcC5wcm90b3R5cGUgPSB7XG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIHJldHVybiBrZXlbdGhpcy5fa2V5XTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChPYmplY3QuaXNFeHRlbnNpYmxlKGtleSkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrZXksIHRoaXMuX2tleSwge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcbn07XG5cbnZhciBNZW1vaXplTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBXZWFrTWFwIDogRmFrZU1hcDtcbi8qIVxuICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBNZW1vaXplTWFwIGhhcyByZWNvcmRlZCBhIHJlc3VsdCBvZiB0aGUgdHdvIG9wZXJhbmRzXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gbGVmdEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge01peGVkfSByaWdodEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge01lbW9pemVNYXB9IG1lbW9pemVNYXBcbiAqIEByZXR1cm5zIHtCb29sZWFufG51bGx9IHJlc3VsdFxuKi9cbmZ1bmN0aW9uIG1lbW9pemVDb21wYXJlKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgbWVtb2l6ZU1hcCkge1xuICAvLyBUZWNobmljYWxseSwgV2Vha01hcCBrZXlzIGNhbiAqb25seSogYmUgb2JqZWN0cywgbm90IHByaW1pdGl2ZXMuXG4gIGlmICghbWVtb2l6ZU1hcCB8fCBpc1ByaW1pdGl2ZShsZWZ0SGFuZE9wZXJhbmQpIHx8IGlzUHJpbWl0aXZlKHJpZ2h0SGFuZE9wZXJhbmQpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdmFyIGxlZnRIYW5kTWFwID0gbWVtb2l6ZU1hcC5nZXQobGVmdEhhbmRPcGVyYW5kKTtcbiAgaWYgKGxlZnRIYW5kTWFwKSB7XG4gICAgdmFyIHJlc3VsdCA9IGxlZnRIYW5kTWFwLmdldChyaWdodEhhbmRPcGVyYW5kKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyohXG4gKiBTZXQgdGhlIHJlc3VsdCBvZiB0aGUgZXF1YWxpdHkgaW50byB0aGUgTWVtb2l6ZU1hcFxuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IGxlZnRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtNaXhlZH0gcmlnaHRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtNZW1vaXplTWFwfSBtZW1vaXplTWFwXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHJlc3VsdFxuKi9cbmZ1bmN0aW9uIG1lbW9pemVTZXQobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBtZW1vaXplTWFwLCByZXN1bHQpIHtcbiAgLy8gVGVjaG5pY2FsbHksIFdlYWtNYXAga2V5cyBjYW4gKm9ubHkqIGJlIG9iamVjdHMsIG5vdCBwcmltaXRpdmVzLlxuICBpZiAoIW1lbW9pemVNYXAgfHwgaXNQcmltaXRpdmUobGVmdEhhbmRPcGVyYW5kKSB8fCBpc1ByaW1pdGl2ZShyaWdodEhhbmRPcGVyYW5kKSkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbGVmdEhhbmRNYXAgPSBtZW1vaXplTWFwLmdldChsZWZ0SGFuZE9wZXJhbmQpO1xuICBpZiAobGVmdEhhbmRNYXApIHtcbiAgICBsZWZ0SGFuZE1hcC5zZXQocmlnaHRIYW5kT3BlcmFuZCwgcmVzdWx0KTtcbiAgfSBlbHNlIHtcbiAgICBsZWZ0SGFuZE1hcCA9IG5ldyBNZW1vaXplTWFwKCk7XG4gICAgbGVmdEhhbmRNYXAuc2V0KHJpZ2h0SGFuZE9wZXJhbmQsIHJlc3VsdCk7XG4gICAgbWVtb2l6ZU1hcC5zZXQobGVmdEhhbmRPcGVyYW5kLCBsZWZ0SGFuZE1hcCk7XG4gIH1cbn1cblxuLyohXG4gKiBQcmltYXJ5IEV4cG9ydFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZGVlcEVxdWFsO1xubW9kdWxlLmV4cG9ydHMuTWVtb2l6ZU1hcCA9IE1lbW9pemVNYXA7XG5cbi8qKlxuICogQXNzZXJ0IGRlZXBseSBuZXN0ZWQgc2FtZVZhbHVlIGVxdWFsaXR5IGJldHdlZW4gdHdvIG9iamVjdHMgb2YgYW55IHR5cGUuXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gbGVmdEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge01peGVkfSByaWdodEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIChvcHRpb25hbCkgQWRkaXRpb25hbCBvcHRpb25zXG4gKiBAcGFyYW0ge0FycmF5fSBbb3B0aW9ucy5jb21wYXJhdG9yXSAob3B0aW9uYWwpIE92ZXJyaWRlIGRlZmF1bHQgYWxnb3JpdGhtLCBkZXRlcm1pbmluZyBjdXN0b20gZXF1YWxpdHkuXG4gKiBAcGFyYW0ge0FycmF5fSBbb3B0aW9ucy5tZW1vaXplXSAob3B0aW9uYWwpIFByb3ZpZGUgYSBjdXN0b20gbWVtb2l6YXRpb24gb2JqZWN0IHdoaWNoIHdpbGwgY2FjaGUgdGhlIHJlc3VsdHMgb2ZcbiAgICBjb21wbGV4IG9iamVjdHMgZm9yIGEgc3BlZWQgYm9vc3QuIEJ5IHBhc3NpbmcgYGZhbHNlYCB5b3UgY2FuIGRpc2FibGUgbWVtb2l6YXRpb24sIGJ1dCB0aGlzIHdpbGwgY2F1c2UgY2lyY3VsYXJcbiAgICByZWZlcmVuY2VzIHRvIGJsb3cgdGhlIHN0YWNrLlxuICogQHJldHVybiB7Qm9vbGVhbn0gZXF1YWwgbWF0Y2hcbiAqL1xuZnVuY3Rpb24gZGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucykge1xuICAvLyBJZiB3ZSBoYXZlIGEgY29tcGFyYXRvciwgd2UgY2FuJ3QgYXNzdW1lIGFueXRoaW5nOyBzbyBiYWlsIHRvIGl0cyBjaGVjayBmaXJzdC5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jb21wYXJhdG9yKSB7XG4gICAgcmV0dXJuIGV4dGVuc2l2ZURlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpO1xuICB9XG5cbiAgdmFyIHNpbXBsZVJlc3VsdCA9IHNpbXBsZUVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCk7XG4gIGlmIChzaW1wbGVSZXN1bHQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gc2ltcGxlUmVzdWx0O1xuICB9XG5cbiAgLy8gRGVlcGVyIGNvbXBhcmlzb25zIGFyZSBwdXNoZWQgdGhyb3VnaCB0byBhIGxhcmdlciBmdW5jdGlvblxuICByZXR1cm4gZXh0ZW5zaXZlRGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogTWFueSBjb21wYXJpc29ucyBjYW4gYmUgY2FuY2VsZWQgb3V0IGVhcmx5IHZpYSBzaW1wbGUgZXF1YWxpdHkgb3IgcHJpbWl0aXZlIGNoZWNrcy5cbiAqIEBwYXJhbSB7TWl4ZWR9IGxlZnRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtNaXhlZH0gcmlnaHRIYW5kT3BlcmFuZFxuICogQHJldHVybiB7Qm9vbGVhbnxudWxsfSBlcXVhbCBtYXRjaFxuICovXG5mdW5jdGlvbiBzaW1wbGVFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpIHtcbiAgLy8gRXF1YWwgcmVmZXJlbmNlcyAoZXhjZXB0IGZvciBOdW1iZXJzKSBjYW4gYmUgcmV0dXJuZWQgZWFybHlcbiAgaWYgKGxlZnRIYW5kT3BlcmFuZCA9PT0gcmlnaHRIYW5kT3BlcmFuZCkge1xuICAgIC8vIEhhbmRsZSArLTAgY2FzZXNcbiAgICByZXR1cm4gbGVmdEhhbmRPcGVyYW5kICE9PSAwIHx8IDEgLyBsZWZ0SGFuZE9wZXJhbmQgPT09IDEgLyByaWdodEhhbmRPcGVyYW5kO1xuICB9XG5cbiAgLy8gaGFuZGxlIE5hTiBjYXNlc1xuICBpZiAoXG4gICAgbGVmdEhhbmRPcGVyYW5kICE9PSBsZWZ0SGFuZE9wZXJhbmQgJiYgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByaWdodEhhbmRPcGVyYW5kICE9PSByaWdodEhhbmRPcGVyYW5kIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gQW55dGhpbmcgdGhhdCBpcyBub3QgYW4gJ29iamVjdCcsIGkuZS4gc3ltYm9scywgZnVuY3Rpb25zLCBib29sZWFucywgbnVtYmVycyxcbiAgLy8gc3RyaW5ncywgYW5kIHVuZGVmaW5lZCwgY2FuIGJlIGNvbXBhcmVkIGJ5IHJlZmVyZW5jZS5cbiAgaWYgKGlzUHJpbWl0aXZlKGxlZnRIYW5kT3BlcmFuZCkgfHwgaXNQcmltaXRpdmUocmlnaHRIYW5kT3BlcmFuZCkpIHtcbiAgICAvLyBFYXN5IG91dCBiL2MgaXQgd291bGQgaGF2ZSBwYXNzZWQgdGhlIGZpcnN0IGVxdWFsaXR5IGNoZWNrXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKiFcbiAqIFRoZSBtYWluIGxvZ2ljIG9mIHRoZSBgZGVlcEVxdWFsYCBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge01peGVkfSBsZWZ0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7TWl4ZWR9IHJpZ2h0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gKG9wdGlvbmFsKSBBZGRpdGlvbmFsIG9wdGlvbnNcbiAqIEBwYXJhbSB7QXJyYXl9IFtvcHRpb25zLmNvbXBhcmF0b3JdIChvcHRpb25hbCkgT3ZlcnJpZGUgZGVmYXVsdCBhbGdvcml0aG0sIGRldGVybWluaW5nIGN1c3RvbSBlcXVhbGl0eS5cbiAqIEBwYXJhbSB7QXJyYXl9IFtvcHRpb25zLm1lbW9pemVdIChvcHRpb25hbCkgUHJvdmlkZSBhIGN1c3RvbSBtZW1vaXphdGlvbiBvYmplY3Qgd2hpY2ggd2lsbCBjYWNoZSB0aGUgcmVzdWx0cyBvZlxuICAgIGNvbXBsZXggb2JqZWN0cyBmb3IgYSBzcGVlZCBib29zdC4gQnkgcGFzc2luZyBgZmFsc2VgIHlvdSBjYW4gZGlzYWJsZSBtZW1vaXphdGlvbiwgYnV0IHRoaXMgd2lsbCBjYXVzZSBjaXJjdWxhclxuICAgIHJlZmVyZW5jZXMgdG8gYmxvdyB0aGUgc3RhY2suXG4gKiBAcmV0dXJuIHtCb29sZWFufSBlcXVhbCBtYXRjaFxuKi9cbmZ1bmN0aW9uIGV4dGVuc2l2ZURlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIG9wdGlvbnMubWVtb2l6ZSA9IG9wdGlvbnMubWVtb2l6ZSA9PT0gZmFsc2UgPyBmYWxzZSA6IG9wdGlvbnMubWVtb2l6ZSB8fCBuZXcgTWVtb2l6ZU1hcCgpO1xuICB2YXIgY29tcGFyYXRvciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb21wYXJhdG9yO1xuXG4gIC8vIENoZWNrIGlmIGEgbWVtb2l6ZWQgcmVzdWx0IGV4aXN0cy5cbiAgdmFyIG1lbW9pemVSZXN1bHRMZWZ0ID0gbWVtb2l6ZUNvbXBhcmUobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUpO1xuICBpZiAobWVtb2l6ZVJlc3VsdExlZnQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gbWVtb2l6ZVJlc3VsdExlZnQ7XG4gIH1cbiAgdmFyIG1lbW9pemVSZXN1bHRSaWdodCA9IG1lbW9pemVDb21wYXJlKHJpZ2h0SGFuZE9wZXJhbmQsIGxlZnRIYW5kT3BlcmFuZCwgb3B0aW9ucy5tZW1vaXplKTtcbiAgaWYgKG1lbW9pemVSZXN1bHRSaWdodCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBtZW1vaXplUmVzdWx0UmlnaHQ7XG4gIH1cblxuICAvLyBJZiBhIGNvbXBhcmF0b3IgaXMgcHJlc2VudCwgdXNlIGl0LlxuICBpZiAoY29tcGFyYXRvcikge1xuICAgIHZhciBjb21wYXJhdG9yUmVzdWx0ID0gY29tcGFyYXRvcihsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpO1xuICAgIC8vIENvbXBhcmF0b3JzIG1heSByZXR1cm4gbnVsbCwgaW4gd2hpY2ggY2FzZSB3ZSB3YW50IHRvIGdvIGJhY2sgdG8gZGVmYXVsdCBiZWhhdmlvci5cbiAgICBpZiAoY29tcGFyYXRvclJlc3VsdCA9PT0gZmFsc2UgfHwgY29tcGFyYXRvclJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgbWVtb2l6ZVNldChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMubWVtb2l6ZSwgY29tcGFyYXRvclJlc3VsdCk7XG4gICAgICByZXR1cm4gY29tcGFyYXRvclJlc3VsdDtcbiAgICB9XG4gICAgLy8gVG8gYWxsb3cgY29tcGFyYXRvcnMgdG8gb3ZlcnJpZGUgKmFueSogYmVoYXZpb3IsIHdlIHJhbiB0aGVtIGZpcnN0LiBTaW5jZSBpdCBkaWRuJ3QgZGVjaWRlXG4gICAgLy8gd2hhdCB0byBkbywgd2UgbmVlZCB0byBtYWtlIHN1cmUgdG8gcmV0dXJuIHRoZSBiYXNpYyB0ZXN0cyBmaXJzdCBiZWZvcmUgd2UgbW92ZSBvbi5cbiAgICB2YXIgc2ltcGxlUmVzdWx0ID0gc2ltcGxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKTtcbiAgICBpZiAoc2ltcGxlUmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICAvLyBEb24ndCBtZW1vaXplIHRoaXMsIGl0IHRha2VzIGxvbmdlciB0byBzZXQvcmV0cmlldmUgdGhhbiB0byBqdXN0IGNvbXBhcmUuXG4gICAgICByZXR1cm4gc2ltcGxlUmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHZhciBsZWZ0SGFuZFR5cGUgPSB0eXBlKGxlZnRIYW5kT3BlcmFuZCk7XG4gIGlmIChsZWZ0SGFuZFR5cGUgIT09IHR5cGUocmlnaHRIYW5kT3BlcmFuZCkpIHtcbiAgICBtZW1vaXplU2V0KGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucy5tZW1vaXplLCBmYWxzZSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gVGVtcG9yYXJpbHkgc2V0IHRoZSBvcGVyYW5kcyBpbiB0aGUgbWVtb2l6ZSBvYmplY3QgdG8gcHJldmVudCBibG93aW5nIHRoZSBzdGFja1xuICBtZW1vaXplU2V0KGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucy5tZW1vaXplLCB0cnVlKTtcblxuICB2YXIgcmVzdWx0ID0gZXh0ZW5zaXZlRGVlcEVxdWFsQnlUeXBlKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgbGVmdEhhbmRUeXBlLCBvcHRpb25zKTtcbiAgbWVtb2l6ZVNldChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMubWVtb2l6ZSwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZXh0ZW5zaXZlRGVlcEVxdWFsQnlUeXBlKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgbGVmdEhhbmRUeXBlLCBvcHRpb25zKSB7XG4gIHN3aXRjaCAobGVmdEhhbmRUeXBlKSB7XG4gICAgY2FzZSAnU3RyaW5nJzpcbiAgICBjYXNlICdOdW1iZXInOlxuICAgIGNhc2UgJ0Jvb2xlYW4nOlxuICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgLy8gSWYgdGhlc2UgdHlwZXMgYXJlIHRoZWlyIGluc3RhbmNlIHR5cGVzIChlLmcuIGBuZXcgTnVtYmVyYCkgdGhlbiByZS1kZWVwRXF1YWwgYWdhaW5zdCB0aGVpciB2YWx1ZXNcbiAgICAgIHJldHVybiBkZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kLnZhbHVlT2YoKSwgcmlnaHRIYW5kT3BlcmFuZC52YWx1ZU9mKCkpO1xuICAgIGNhc2UgJ1Byb21pc2UnOlxuICAgIGNhc2UgJ1N5bWJvbCc6XG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgIGNhc2UgJ1dlYWtNYXAnOlxuICAgIGNhc2UgJ1dlYWtTZXQnOlxuICAgICAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZCA9PT0gcmlnaHRIYW5kT3BlcmFuZDtcbiAgICBjYXNlICdFcnJvcic6XG4gICAgICByZXR1cm4ga2V5c0VxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgWyAnbmFtZScsICdtZXNzYWdlJywgJ2NvZGUnIF0sIG9wdGlvbnMpO1xuICAgIGNhc2UgJ0FyZ3VtZW50cyc6XG4gICAgY2FzZSAnSW50OEFycmF5JzpcbiAgICBjYXNlICdVaW50OEFycmF5JzpcbiAgICBjYXNlICdVaW50OENsYW1wZWRBcnJheSc6XG4gICAgY2FzZSAnSW50MTZBcnJheSc6XG4gICAgY2FzZSAnVWludDE2QXJyYXknOlxuICAgIGNhc2UgJ0ludDMyQXJyYXknOlxuICAgIGNhc2UgJ1VpbnQzMkFycmF5JzpcbiAgICBjYXNlICdGbG9hdDMyQXJyYXknOlxuICAgIGNhc2UgJ0Zsb2F0NjRBcnJheSc6XG4gICAgY2FzZSAnQXJyYXknOlxuICAgICAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgICBjYXNlICdSZWdFeHAnOlxuICAgICAgcmV0dXJuIHJlZ2V4cEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCk7XG4gICAgY2FzZSAnR2VuZXJhdG9yJzpcbiAgICAgIHJldHVybiBnZW5lcmF0b3JFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpO1xuICAgIGNhc2UgJ0RhdGFWaWV3JzpcbiAgICAgIHJldHVybiBpdGVyYWJsZUVxdWFsKG5ldyBVaW50OEFycmF5KGxlZnRIYW5kT3BlcmFuZC5idWZmZXIpLCBuZXcgVWludDhBcnJheShyaWdodEhhbmRPcGVyYW5kLmJ1ZmZlciksIG9wdGlvbnMpO1xuICAgIGNhc2UgJ0FycmF5QnVmZmVyJzpcbiAgICAgIHJldHVybiBpdGVyYWJsZUVxdWFsKG5ldyBVaW50OEFycmF5KGxlZnRIYW5kT3BlcmFuZCksIG5ldyBVaW50OEFycmF5KHJpZ2h0SGFuZE9wZXJhbmQpLCBvcHRpb25zKTtcbiAgICBjYXNlICdTZXQnOlxuICAgICAgcmV0dXJuIGVudHJpZXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpO1xuICAgIGNhc2UgJ01hcCc6XG4gICAgICByZXR1cm4gZW50cmllc0VxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG4gICAgY2FzZSAnVGVtcG9yYWwuUGxhaW5EYXRlJzpcbiAgICBjYXNlICdUZW1wb3JhbC5QbGFpblRpbWUnOlxuICAgIGNhc2UgJ1RlbXBvcmFsLlBsYWluRGF0ZVRpbWUnOlxuICAgIGNhc2UgJ1RlbXBvcmFsLkluc3RhbnQnOlxuICAgIGNhc2UgJ1RlbXBvcmFsLlpvbmVkRGF0ZVRpbWUnOlxuICAgIGNhc2UgJ1RlbXBvcmFsLlBsYWluWWVhck1vbnRoJzpcbiAgICBjYXNlICdUZW1wb3JhbC5QbGFpbk1vbnRoRGF5JzpcbiAgICAgIHJldHVybiBsZWZ0SGFuZE9wZXJhbmQuZXF1YWxzKHJpZ2h0SGFuZE9wZXJhbmQpO1xuICAgIGNhc2UgJ1RlbXBvcmFsLkR1cmF0aW9uJzpcbiAgICAgIHJldHVybiBsZWZ0SGFuZE9wZXJhbmQudG90YWwoJ25hbm9zZWNvbmRzJykgPT09IHJpZ2h0SGFuZE9wZXJhbmQudG90YWwoJ25hbm9zZWNvbmRzJyk7XG4gICAgY2FzZSAnVGVtcG9yYWwuVGltZVpvbmUnOlxuICAgIGNhc2UgJ1RlbXBvcmFsLkNhbGVuZGFyJzpcbiAgICAgIHJldHVybiBsZWZ0SGFuZE9wZXJhbmQudG9TdHJpbmcoKSA9PT0gcmlnaHRIYW5kT3BlcmFuZC50b1N0cmluZygpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gb2JqZWN0RXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgfVxufVxuXG4vKiFcbiAqIENvbXBhcmUgdHdvIFJlZ3VsYXIgRXhwcmVzc2lvbnMgZm9yIGVxdWFsaXR5LlxuICpcbiAqIEBwYXJhbSB7UmVnRXhwfSBsZWZ0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7UmVnRXhwfSByaWdodEhhbmRPcGVyYW5kXG4gKiBAcmV0dXJuIHtCb29sZWFufSByZXN1bHRcbiAqL1xuXG5mdW5jdGlvbiByZWdleHBFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpIHtcbiAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZC50b1N0cmluZygpID09PSByaWdodEhhbmRPcGVyYW5kLnRvU3RyaW5nKCk7XG59XG5cbi8qIVxuICogQ29tcGFyZSB0d28gU2V0cy9NYXBzIGZvciBlcXVhbGl0eS4gRmFzdGVyIHRoYW4gb3RoZXIgZXF1YWxpdHkgZnVuY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7U2V0fSBsZWZ0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7U2V0fSByaWdodEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIChPcHRpb25hbClcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICovXG5cbmZ1bmN0aW9uIGVudHJpZXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpIHtcbiAgLy8gSUUxMSBkb2Vzbid0IHN1cHBvcnQgU2V0I2VudHJpZXMgb3IgU2V0I0BAaXRlcmF0b3IsIHNvIHdlIG5lZWQgbWFudWFsbHkgcG9wdWxhdGUgdXNpbmcgU2V0I2ZvckVhY2hcbiAgaWYgKGxlZnRIYW5kT3BlcmFuZC5zaXplICE9PSByaWdodEhhbmRPcGVyYW5kLnNpemUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGxlZnRIYW5kT3BlcmFuZC5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIGxlZnRIYW5kSXRlbXMgPSBbXTtcbiAgdmFyIHJpZ2h0SGFuZEl0ZW1zID0gW107XG4gIGxlZnRIYW5kT3BlcmFuZC5mb3JFYWNoKGZ1bmN0aW9uIGdhdGhlckVudHJpZXMoa2V5LCB2YWx1ZSkge1xuICAgIGxlZnRIYW5kSXRlbXMucHVzaChbIGtleSwgdmFsdWUgXSk7XG4gIH0pO1xuICByaWdodEhhbmRPcGVyYW5kLmZvckVhY2goZnVuY3Rpb24gZ2F0aGVyRW50cmllcyhrZXksIHZhbHVlKSB7XG4gICAgcmlnaHRIYW5kSXRlbXMucHVzaChbIGtleSwgdmFsdWUgXSk7XG4gIH0pO1xuICByZXR1cm4gaXRlcmFibGVFcXVhbChsZWZ0SGFuZEl0ZW1zLnNvcnQoKSwgcmlnaHRIYW5kSXRlbXMuc29ydCgpLCBvcHRpb25zKTtcbn1cblxuLyohXG4gKiBTaW1wbGUgZXF1YWxpdHkgZm9yIGZsYXQgaXRlcmFibGUgb2JqZWN0cyBzdWNoIGFzIEFycmF5cywgVHlwZWRBcnJheXMgb3IgTm9kZS5qcyBidWZmZXJzLlxuICpcbiAqIEBwYXJhbSB7SXRlcmFibGV9IGxlZnRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtJdGVyYWJsZX0gcmlnaHRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAoT3B0aW9uYWwpXG4gKiBAcmV0dXJuIHtCb29sZWFufSByZXN1bHRcbiAqL1xuXG5mdW5jdGlvbiBpdGVyYWJsZUVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucykge1xuICB2YXIgbGVuZ3RoID0gbGVmdEhhbmRPcGVyYW5kLmxlbmd0aDtcbiAgaWYgKGxlbmd0aCAhPT0gcmlnaHRIYW5kT3BlcmFuZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBpbmRleCA9IC0xO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChkZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kW2luZGV4XSwgcmlnaHRIYW5kT3BlcmFuZFtpbmRleF0sIG9wdGlvbnMpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyohXG4gKiBTaW1wbGUgZXF1YWxpdHkgZm9yIGdlbmVyYXRvciBvYmplY3RzIHN1Y2ggYXMgdGhvc2UgcmV0dXJuZWQgYnkgZ2VuZXJhdG9yIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0l0ZXJhYmxlfSBsZWZ0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7SXRlcmFibGV9IHJpZ2h0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gKE9wdGlvbmFsKVxuICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gKi9cblxuZnVuY3Rpb24gZ2VuZXJhdG9yRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIHJldHVybiBpdGVyYWJsZUVxdWFsKGdldEdlbmVyYXRvckVudHJpZXMobGVmdEhhbmRPcGVyYW5kKSwgZ2V0R2VuZXJhdG9yRW50cmllcyhyaWdodEhhbmRPcGVyYW5kKSwgb3B0aW9ucyk7XG59XG5cbi8qIVxuICogRGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiBvYmplY3QgaGFzIGFuIEBAaXRlcmF0b3IgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICogQHJldHVybiB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBvYmplY3QgaGFzIGFuIEBAaXRlcmF0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGhhc0l0ZXJhdG9yRnVuY3Rpb24odGFyZ2V0KSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiB0YXJnZXQgPT09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgdGFyZ2V0W1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbic7XG59XG5cbi8qIVxuICogR2V0cyBhbGwgaXRlcmF0b3IgZW50cmllcyBmcm9tIHRoZSBnaXZlbiBPYmplY3QuIElmIHRoZSBPYmplY3QgaGFzIG5vIEBAaXRlcmF0b3IgZnVuY3Rpb24sIHJldHVybnMgYW4gZW1wdHkgYXJyYXkuXG4gKiBUaGlzIHdpbGwgY29uc3VtZSB0aGUgaXRlcmF0b3IgLSB3aGljaCBjb3VsZCBoYXZlIHNpZGUgZWZmZWN0cyBkZXBlbmRpbmcgb24gdGhlIEBAaXRlcmF0b3IgaW1wbGVtZW50YXRpb24uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICogQHJldHVybnMge0FycmF5fSBhbiBhcnJheSBvZiBlbnRyaWVzIGZyb20gdGhlIEBAaXRlcmF0b3IgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JFbnRyaWVzKHRhcmdldCkge1xuICBpZiAoaGFzSXRlcmF0b3JGdW5jdGlvbih0YXJnZXQpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBnZXRHZW5lcmF0b3JFbnRyaWVzKHRhcmdldFtTeW1ib2wuaXRlcmF0b3JdKCkpO1xuICAgIH0gY2F0Y2ggKGl0ZXJhdG9yRXJyb3IpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFtdO1xufVxuXG4vKiFcbiAqIEdldHMgYWxsIGVudHJpZXMgZnJvbSBhIEdlbmVyYXRvci4gVGhpcyB3aWxsIGNvbnN1bWUgdGhlIGdlbmVyYXRvciAtIHdoaWNoIGNvdWxkIGhhdmUgc2lkZSBlZmZlY3RzLlxuICpcbiAqIEBwYXJhbSB7R2VuZXJhdG9yfSB0YXJnZXRcbiAqIEByZXR1cm5zIHtBcnJheX0gYW4gYXJyYXkgb2YgZW50cmllcyBmcm9tIHRoZSBHZW5lcmF0b3IuXG4gKi9cbmZ1bmN0aW9uIGdldEdlbmVyYXRvckVudHJpZXMoZ2VuZXJhdG9yKSB7XG4gIHZhciBnZW5lcmF0b3JSZXN1bHQgPSBnZW5lcmF0b3IubmV4dCgpO1xuICB2YXIgYWNjdW11bGF0b3IgPSBbIGdlbmVyYXRvclJlc3VsdC52YWx1ZSBdO1xuICB3aGlsZSAoZ2VuZXJhdG9yUmVzdWx0LmRvbmUgPT09IGZhbHNlKSB7XG4gICAgZ2VuZXJhdG9yUmVzdWx0ID0gZ2VuZXJhdG9yLm5leHQoKTtcbiAgICBhY2N1bXVsYXRvci5wdXNoKGdlbmVyYXRvclJlc3VsdC52YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGFjY3VtdWxhdG9yO1xufVxuXG4vKiFcbiAqIEdldHMgYWxsIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUga2V5cyBmcm9tIGEgdGFyZ2V0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAqIEByZXR1cm5zIHtBcnJheX0gYW4gYXJyYXkgb2Ygb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBrZXlzIGZyb20gdGhlIHRhcmdldC5cbiAqL1xuZnVuY3Rpb24gZ2V0RW51bWVyYWJsZUtleXModGFyZ2V0KSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiB0YXJnZXQpIHtcbiAgICBrZXlzLnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4ga2V5cztcbn1cblxuZnVuY3Rpb24gZ2V0RW51bWVyYWJsZVN5bWJvbHModGFyZ2V0KSB7XG4gIHZhciBrZXlzID0gW107XG4gIHZhciBhbGxLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbEtleXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB2YXIga2V5ID0gYWxsS2V5c1tpXTtcbiAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkuZW51bWVyYWJsZSkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBrZXlzO1xufVxuXG4vKiFcbiAqIERldGVybWluZXMgaWYgdHdvIG9iamVjdHMgaGF2ZSBtYXRjaGluZyB2YWx1ZXMsIGdpdmVuIGEgc2V0IG9mIGtleXMuIERlZmVycyB0byBkZWVwRXF1YWwgZm9yIHRoZSBlcXVhbGl0eSBjaGVjayBvZlxuICogZWFjaCBrZXkuIElmIGFueSB2YWx1ZSBvZiB0aGUgZ2l2ZW4ga2V5IGlzIG5vdCBlcXVhbCwgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGZhbHNlIChlYXJseSkuXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gbGVmdEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge01peGVkfSByaWdodEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge0FycmF5fSBrZXlzIEFuIGFycmF5IG9mIGtleXMgdG8gY29tcGFyZSB0aGUgdmFsdWVzIG9mIGxlZnRIYW5kT3BlcmFuZCBhbmQgcmlnaHRIYW5kT3BlcmFuZCBhZ2FpbnN0XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIChPcHRpb25hbClcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICovXG5mdW5jdGlvbiBrZXlzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBrZXlzLCBvcHRpb25zKSB7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoZGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZFtrZXlzW2ldXSwgcmlnaHRIYW5kT3BlcmFuZFtrZXlzW2ldXSwgb3B0aW9ucykgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiFcbiAqIFJlY3Vyc2l2ZWx5IGNoZWNrIHRoZSBlcXVhbGl0eSBvZiB0d28gT2JqZWN0cy4gT25jZSBiYXNpYyBzYW1lbmVzcyBoYXMgYmVlbiBlc3RhYmxpc2hlZCBpdCB3aWxsIGRlZmVyIHRvIGBkZWVwRXF1YWxgXG4gKiBmb3IgZWFjaCBlbnVtZXJhYmxlIGtleSBpbiB0aGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IGxlZnRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtNaXhlZH0gcmlnaHRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAoT3B0aW9uYWwpXG4gKiBAcmV0dXJuIHtCb29sZWFufSByZXN1bHRcbiAqL1xuZnVuY3Rpb24gb2JqZWN0RXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIHZhciBsZWZ0SGFuZEtleXMgPSBnZXRFbnVtZXJhYmxlS2V5cyhsZWZ0SGFuZE9wZXJhbmQpO1xuICB2YXIgcmlnaHRIYW5kS2V5cyA9IGdldEVudW1lcmFibGVLZXlzKHJpZ2h0SGFuZE9wZXJhbmQpO1xuICB2YXIgbGVmdEhhbmRTeW1ib2xzID0gZ2V0RW51bWVyYWJsZVN5bWJvbHMobGVmdEhhbmRPcGVyYW5kKTtcbiAgdmFyIHJpZ2h0SGFuZFN5bWJvbHMgPSBnZXRFbnVtZXJhYmxlU3ltYm9scyhyaWdodEhhbmRPcGVyYW5kKTtcbiAgbGVmdEhhbmRLZXlzID0gbGVmdEhhbmRLZXlzLmNvbmNhdChsZWZ0SGFuZFN5bWJvbHMpO1xuICByaWdodEhhbmRLZXlzID0gcmlnaHRIYW5kS2V5cy5jb25jYXQocmlnaHRIYW5kU3ltYm9scyk7XG5cbiAgaWYgKGxlZnRIYW5kS2V5cy5sZW5ndGggJiYgbGVmdEhhbmRLZXlzLmxlbmd0aCA9PT0gcmlnaHRIYW5kS2V5cy5sZW5ndGgpIHtcbiAgICBpZiAoaXRlcmFibGVFcXVhbChtYXBTeW1ib2xzKGxlZnRIYW5kS2V5cykuc29ydCgpLCBtYXBTeW1ib2xzKHJpZ2h0SGFuZEtleXMpLnNvcnQoKSkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBrZXlzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBsZWZ0SGFuZEtleXMsIG9wdGlvbnMpO1xuICB9XG5cbiAgdmFyIGxlZnRIYW5kRW50cmllcyA9IGdldEl0ZXJhdG9yRW50cmllcyhsZWZ0SGFuZE9wZXJhbmQpO1xuICB2YXIgcmlnaHRIYW5kRW50cmllcyA9IGdldEl0ZXJhdG9yRW50cmllcyhyaWdodEhhbmRPcGVyYW5kKTtcbiAgaWYgKGxlZnRIYW5kRW50cmllcy5sZW5ndGggJiYgbGVmdEhhbmRFbnRyaWVzLmxlbmd0aCA9PT0gcmlnaHRIYW5kRW50cmllcy5sZW5ndGgpIHtcbiAgICBsZWZ0SGFuZEVudHJpZXMuc29ydCgpO1xuICAgIHJpZ2h0SGFuZEVudHJpZXMuc29ydCgpO1xuICAgIHJldHVybiBpdGVyYWJsZUVxdWFsKGxlZnRIYW5kRW50cmllcywgcmlnaHRIYW5kRW50cmllcywgb3B0aW9ucyk7XG4gIH1cblxuICBpZiAobGVmdEhhbmRLZXlzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgbGVmdEhhbmRFbnRyaWVzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgcmlnaHRIYW5kS2V5cy5sZW5ndGggPT09IDAgJiZcbiAgICAgIHJpZ2h0SGFuZEVudHJpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qIVxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBhcmd1bWVudCBpcyBhIHByaW1pdGl2ZS5cbiAqXG4gKiBUaGlzIGludGVudGlvbmFsbHkgcmV0dXJucyB0cnVlIGZvciBhbGwgb2JqZWN0cyB0aGF0IGNhbiBiZSBjb21wYXJlZCBieSByZWZlcmVuY2UsXG4gKiBpbmNsdWRpbmcgZnVuY3Rpb25zIGFuZCBzeW1ib2xzLlxuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHtCb29sZWFufSByZXN1bHRcbiAqL1xuZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCc7XG59XG5cbmZ1bmN0aW9uIG1hcFN5bWJvbHMoYXJyKSB7XG4gIHJldHVybiBhcnIubWFwKGZ1bmN0aW9uIG1hcFN5bWJvbChlbnRyeSkge1xuICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzeW1ib2wnKSB7XG4gICAgICByZXR1cm4gZW50cnkudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50cnk7XG4gIH0pO1xufVxuIiwgInZhciBjb25maWcgPSByZXF1aXJlKCcuLi9jb25maWcnKTtcblxuLyohXG4gKiBDaGFpIC0gaXNQcm94eUVuYWJsZWQgaGVscGVyXG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiAjIyMgLmlzUHJveHlFbmFibGVkKClcbiAqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgQ2hhaSdzIHByb3h5IHByb3RlY3Rpb24gZmVhdHVyZSBpcyBlbmFibGVkLiBJZlxuICogcHJveGllcyBhcmUgdW5zdXBwb3J0ZWQgb3IgZGlzYWJsZWQgdmlhIHRoZSB1c2VyJ3MgQ2hhaSBjb25maWcsIHRoZW4gcmV0dXJuXG4gKiBmYWxzZS4gT3RoZXJ3aXNlLCByZXR1cm4gdHJ1ZS5cbiAqXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBpc1Byb3h5RW5hYmxlZFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcm94eUVuYWJsZWQoKSB7XG4gIHJldHVybiBjb25maWcudXNlUHJveHkgJiZcbiAgICB0eXBlb2YgUHJveHkgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIFJlZmxlY3QgIT09ICd1bmRlZmluZWQnO1xufTtcbiIsICIvKiFcbiAqIENoYWkgLSBhZGRQcm9wZXJ0eSB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxudmFyIGNoYWkgPSByZXF1aXJlKCcuLi8uLi9jaGFpJyk7XG52YXIgZmxhZyA9IHJlcXVpcmUoJy4vZmxhZycpO1xudmFyIGlzUHJveHlFbmFibGVkID0gcmVxdWlyZSgnLi9pc1Byb3h5RW5hYmxlZCcpO1xudmFyIHRyYW5zZmVyRmxhZ3MgPSByZXF1aXJlKCcuL3RyYW5zZmVyRmxhZ3MnKTtcblxuLyoqXG4gKiAjIyMgLmFkZFByb3BlcnR5KGN0eCwgbmFtZSwgZ2V0dGVyKVxuICpcbiAqIEFkZHMgYSBwcm9wZXJ0eSB0byB0aGUgcHJvdG90eXBlIG9mIGFuIG9iamVjdC5cbiAqXG4gKiAgICAgdXRpbHMuYWRkUHJvcGVydHkoY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLCAnZm9vJywgZnVuY3Rpb24gKCkge1xuICogICAgICAgdmFyIG9iaiA9IHV0aWxzLmZsYWcodGhpcywgJ29iamVjdCcpO1xuICogICAgICAgbmV3IGNoYWkuQXNzZXJ0aW9uKG9iaikudG8uYmUuaW5zdGFuY2VvZihGb28pO1xuICogICAgIH0pO1xuICpcbiAqIENhbiBhbHNvIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gYGNoYWkuQXNzZXJ0aW9uYC5cbiAqXG4gKiAgICAgY2hhaS5Bc3NlcnRpb24uYWRkUHJvcGVydHkoJ2ZvbycsIGZuKTtcbiAqXG4gKiBUaGVuIGNhbiBiZSB1c2VkIGFzIGFueSBvdGhlciBhc3NlcnRpb24uXG4gKlxuICogICAgIGV4cGVjdChteUZvbykudG8uYmUuZm9vO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjdHggb2JqZWN0IHRvIHdoaWNoIHRoZSBwcm9wZXJ0eSBpcyBhZGRlZFxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgb2YgcHJvcGVydHkgdG8gYWRkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZXR0ZXIgZnVuY3Rpb24gdG8gYmUgdXNlZCBmb3IgbmFtZVxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgYWRkUHJvcGVydHlcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhZGRQcm9wZXJ0eShjdHgsIG5hbWUsIGdldHRlcikge1xuICBnZXR0ZXIgPSBnZXR0ZXIgPT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uICgpIHt9IDogZ2V0dGVyO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsIG5hbWUsXG4gICAgeyBnZXQ6IGZ1bmN0aW9uIHByb3BlcnR5R2V0dGVyKCkge1xuICAgICAgICAvLyBTZXR0aW5nIHRoZSBgc3NmaWAgZmxhZyB0byBgcHJvcGVydHlHZXR0ZXJgIGNhdXNlcyB0aGlzIGZ1bmN0aW9uIHRvXG4gICAgICAgIC8vIGJlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgcmVtb3ZpbmcgaW1wbGVtZW50YXRpb24gZnJhbWVzIGZyb20gdGhlXG4gICAgICAgIC8vIHN0YWNrIHRyYWNlIG9mIGEgZmFpbGVkIGFzc2VydGlvbi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSG93ZXZlciwgd2Ugb25seSB3YW50IHRvIHVzZSB0aGlzIGZ1bmN0aW9uIGFzIHRoZSBzdGFydGluZyBwb2ludCBpZlxuICAgICAgICAvLyB0aGUgYGxvY2tTc2ZpYCBmbGFnIGlzbid0IHNldCBhbmQgcHJveHkgcHJvdGVjdGlvbiBpcyBkaXNhYmxlZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgdGhlIGBsb2NrU3NmaWAgZmxhZyBpcyBzZXQsIHRoZW4gZWl0aGVyIHRoaXMgYXNzZXJ0aW9uIGhhcyBiZWVuXG4gICAgICAgIC8vIG92ZXJ3cml0dGVuIGJ5IGFub3RoZXIgYXNzZXJ0aW9uLCBvciB0aGlzIGFzc2VydGlvbiBpcyBiZWluZyBpbnZva2VkXG4gICAgICAgIC8vIGZyb20gaW5zaWRlIG9mIGFub3RoZXIgYXNzZXJ0aW9uLiBJbiB0aGUgZmlyc3QgY2FzZSwgdGhlIGBzc2ZpYCBmbGFnXG4gICAgICAgIC8vIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IHRoZSBvdmVyd3JpdGluZyBhc3NlcnRpb24uIEluIHRoZSBzZWNvbmRcbiAgICAgICAgLy8gY2FzZSwgdGhlIGBzc2ZpYCBmbGFnIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IHRoZSBvdXRlciBhc3NlcnRpb24uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHByb3h5IHByb3RlY3Rpb24gaXMgZW5hYmxlZCwgdGhlbiB0aGUgYHNzZmlgIGZsYWcgaGFzIGFscmVhZHkgYmVlblxuICAgICAgICAvLyBzZXQgYnkgdGhlIHByb3h5IGdldHRlci5cbiAgICAgICAgaWYgKCFpc1Byb3h5RW5hYmxlZCgpICYmICFmbGFnKHRoaXMsICdsb2NrU3NmaScpKSB7XG4gICAgICAgICAgZmxhZyh0aGlzLCAnc3NmaScsIHByb3BlcnR5R2V0dGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHQgPSBnZXR0ZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICAgICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBjaGFpLkFzc2VydGlvbigpO1xuICAgICAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gICAgICB9XG4gICAgLCBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59O1xuIiwgInZhciBmbkxlbmd0aERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGZ1bmN0aW9uICgpIHt9LCAnbGVuZ3RoJyk7XG5cbi8qIVxuICogQ2hhaSAtIGFkZExlbmd0aEd1YXJkIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMjIyAuYWRkTGVuZ3RoR3VhcmQoZm4sIGFzc2VydGlvbk5hbWUsIGlzQ2hhaW5hYmxlKVxuICpcbiAqIERlZmluZSBgbGVuZ3RoYCBhcyBhIGdldHRlciBvbiB0aGUgZ2l2ZW4gdW5pbnZva2VkIG1ldGhvZCBhc3NlcnRpb24uIFRoZVxuICogZ2V0dGVyIGFjdHMgYXMgYSBndWFyZCBhZ2FpbnN0IGNoYWluaW5nIGBsZW5ndGhgIGRpcmVjdGx5IG9mZiBvZiBhbiB1bmludm9rZWRcbiAqIG1ldGhvZCBhc3NlcnRpb24sIHdoaWNoIGlzIGEgcHJvYmxlbSBiZWNhdXNlIGl0IHJlZmVyZW5jZXMgYGZ1bmN0aW9uYCdzXG4gKiBidWlsdC1pbiBgbGVuZ3RoYCBwcm9wZXJ0eSBpbnN0ZWFkIG9mIENoYWkncyBgbGVuZ3RoYCBhc3NlcnRpb24uIFdoZW4gdGhlXG4gKiBnZXR0ZXIgY2F0Y2hlcyB0aGUgdXNlciBtYWtpbmcgdGhpcyBtaXN0YWtlLCBpdCB0aHJvd3MgYW4gZXJyb3Igd2l0aCBhXG4gKiBoZWxwZnVsIG1lc3NhZ2UuXG4gKlxuICogVGhlcmUgYXJlIHR3byB3YXlzIGluIHdoaWNoIHRoaXMgbWlzdGFrZSBjYW4gYmUgbWFkZS4gVGhlIGZpcnN0IHdheSBpcyBieVxuICogY2hhaW5pbmcgdGhlIGBsZW5ndGhgIGFzc2VydGlvbiBkaXJlY3RseSBvZmYgb2YgYW4gdW5pbnZva2VkIGNoYWluYWJsZVxuICogbWV0aG9kLiBJbiB0aGlzIGNhc2UsIENoYWkgc3VnZ2VzdHMgdGhhdCB0aGUgdXNlciB1c2UgYGxlbmd0aE9mYCBpbnN0ZWFkLiBUaGVcbiAqIHNlY29uZCB3YXkgaXMgYnkgY2hhaW5pbmcgdGhlIGBsZW5ndGhgIGFzc2VydGlvbiBkaXJlY3RseSBvZmYgb2YgYW4gdW5pbnZva2VkXG4gKiBub24tY2hhaW5hYmxlIG1ldGhvZC4gTm9uLWNoYWluYWJsZSBtZXRob2RzIG11c3QgYmUgaW52b2tlZCBwcmlvciB0b1xuICogY2hhaW5pbmcuIEluIHRoaXMgY2FzZSwgQ2hhaSBzdWdnZXN0cyB0aGF0IHRoZSB1c2VyIGNvbnN1bHQgdGhlIGRvY3MgZm9yIHRoZVxuICogZ2l2ZW4gYXNzZXJ0aW9uLlxuICpcbiAqIElmIHRoZSBgbGVuZ3RoYCBwcm9wZXJ0eSBvZiBmdW5jdGlvbnMgaXMgdW5jb25maWd1cmFibGUsIHRoZW4gcmV0dXJuIGBmbmBcbiAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLlxuICpcbiAqIE5vdGUgdGhhdCBpbiBFUzYsIHRoZSBmdW5jdGlvbidzIGBsZW5ndGhgIHByb3BlcnR5IGlzIGNvbmZpZ3VyYWJsZSwgc28gb25jZVxuICogc3VwcG9ydCBmb3IgbGVnYWN5IGVudmlyb25tZW50cyBpcyBkcm9wcGVkLCBDaGFpJ3MgYGxlbmd0aGAgcHJvcGVydHkgY2FuXG4gKiByZXBsYWNlIHRoZSBidWlsdC1pbiBmdW5jdGlvbidzIGBsZW5ndGhgIHByb3BlcnR5LCBhbmQgdGhpcyBsZW5ndGggZ3VhcmQgd2lsbFxuICogbm8gbG9uZ2VyIGJlIG5lY2Vzc2FyeS4gSW4gdGhlIG1lYW4gdGltZSwgbWFpbnRhaW5pbmcgY29uc2lzdGVuY3kgYWNyb3NzIGFsbFxuICogZW52aXJvbm1lbnRzIGlzIHRoZSBwcmlvcml0eS5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtTdHJpbmd9IGFzc2VydGlvbk5hbWVcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNDaGFpbmFibGVcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIGFkZExlbmd0aEd1YXJkXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhZGRMZW5ndGhHdWFyZCAoZm4sIGFzc2VydGlvbk5hbWUsIGlzQ2hhaW5hYmxlKSB7XG4gIGlmICghZm5MZW5ndGhEZXNjLmNvbmZpZ3VyYWJsZSkgcmV0dXJuIGZuO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ2xlbmd0aCcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChpc0NoYWluYWJsZSkge1xuICAgICAgICB0aHJvdyBFcnJvcignSW52YWxpZCBDaGFpIHByb3BlcnR5OiAnICsgYXNzZXJ0aW9uTmFtZSArICcubGVuZ3RoLiBEdWUnICtcbiAgICAgICAgICAnIHRvIGEgY29tcGF0aWJpbGl0eSBpc3N1ZSwgXCJsZW5ndGhcIiBjYW5ub3QgZGlyZWN0bHkgZm9sbG93IFwiJyArXG4gICAgICAgICAgYXNzZXJ0aW9uTmFtZSArICdcIi4gVXNlIFwiJyArIGFzc2VydGlvbk5hbWUgKyAnLmxlbmd0aE9mXCIgaW5zdGVhZC4nKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgQ2hhaSBwcm9wZXJ0eTogJyArIGFzc2VydGlvbk5hbWUgKyAnLmxlbmd0aC4gU2VlJyArXG4gICAgICAgICcgZG9jcyBmb3IgcHJvcGVyIHVzYWdlIG9mIFwiJyArIGFzc2VydGlvbk5hbWUgKyAnXCIuJyk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZm47XG59O1xuIiwgIi8qIVxuICogQ2hhaSAtIGdldFByb3BlcnRpZXMgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogIyMjIC5nZXRQcm9wZXJ0aWVzKG9iamVjdClcbiAqXG4gKiBUaGlzIGFsbG93cyB0aGUgcmV0cmlldmFsIG9mIHByb3BlcnR5IG5hbWVzIG9mIGFuIG9iamVjdCwgZW51bWVyYWJsZSBvciBub3QsXG4gKiBpbmhlcml0ZWQgb3Igbm90LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIGdldFByb3BlcnRpZXNcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQcm9wZXJ0aWVzKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KTtcblxuICBmdW5jdGlvbiBhZGRQcm9wZXJ0eShwcm9wZXJ0eSkge1xuICAgIGlmIChyZXN1bHQuaW5kZXhPZihwcm9wZXJ0eSkgPT09IC0xKSB7XG4gICAgICByZXN1bHQucHVzaChwcm9wZXJ0eSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gIHdoaWxlIChwcm90byAhPT0gbnVsbCkge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvKS5mb3JFYWNoKGFkZFByb3BlcnR5KTtcbiAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICJ2YXIgY29uZmlnID0gcmVxdWlyZSgnLi4vY29uZmlnJyk7XG52YXIgZmxhZyA9IHJlcXVpcmUoJy4vZmxhZycpO1xudmFyIGdldFByb3BlcnRpZXMgPSByZXF1aXJlKCcuL2dldFByb3BlcnRpZXMnKTtcbnZhciBpc1Byb3h5RW5hYmxlZCA9IHJlcXVpcmUoJy4vaXNQcm94eUVuYWJsZWQnKTtcblxuLyohXG4gKiBDaGFpIC0gcHJveGlmeSB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiAjIyMgLnByb3hpZnkob2JqZWN0KVxuICpcbiAqIFJldHVybiBhIHByb3h5IG9mIGdpdmVuIG9iamVjdCB0aGF0IHRocm93cyBhbiBlcnJvciB3aGVuIGEgbm9uLWV4aXN0ZW50XG4gKiBwcm9wZXJ0eSBpcyByZWFkLiBCeSBkZWZhdWx0LCB0aGUgcm9vdCBjYXVzZSBpcyBhc3N1bWVkIHRvIGJlIGEgbWlzc3BlbGxlZFxuICogcHJvcGVydHksIGFuZCB0aHVzIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBvZmZlciBhIHJlYXNvbmFibGUgc3VnZ2VzdGlvbiBmcm9tXG4gKiB0aGUgbGlzdCBvZiBleGlzdGluZyBwcm9wZXJ0aWVzLiBIb3dldmVyLCBpZiBhIG5vbkNoYWluYWJsZU1ldGhvZE5hbWUgaXNcbiAqIHByb3ZpZGVkLCB0aGVuIHRoZSByb290IGNhdXNlIGlzIGluc3RlYWQgYSBmYWlsdXJlIHRvIGludm9rZSBhIG5vbi1jaGFpbmFibGVcbiAqIG1ldGhvZCBwcmlvciB0byByZWFkaW5nIHRoZSBub24tZXhpc3RlbnQgcHJvcGVydHkuXG4gKlxuICogSWYgcHJveGllcyBhcmUgdW5zdXBwb3J0ZWQgb3IgZGlzYWJsZWQgdmlhIHRoZSB1c2VyJ3MgQ2hhaSBjb25maWcsIHRoZW5cbiAqIHJldHVybiBvYmplY3Qgd2l0aG91dCBtb2RpZmljYXRpb24uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtTdHJpbmd9IG5vbkNoYWluYWJsZU1ldGhvZE5hbWVcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIHByb3hpZnlcbiAqL1xuXG52YXIgYnVpbHRpbnMgPSBbJ19fZmxhZ3MnLCAnX19tZXRob2RzJywgJ19vYmonLCAnYXNzZXJ0J107XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcHJveGlmeShvYmosIG5vbkNoYWluYWJsZU1ldGhvZE5hbWUpIHtcbiAgaWYgKCFpc1Byb3h5RW5hYmxlZCgpKSByZXR1cm4gb2JqO1xuXG4gIHJldHVybiBuZXcgUHJveHkob2JqLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBwcm94eUdldHRlcih0YXJnZXQsIHByb3BlcnR5KSB7XG4gICAgICAvLyBUaGlzIGNoZWNrIGlzIGhlcmUgYmVjYXVzZSB3ZSBzaG91bGQgbm90IHRocm93IGVycm9ycyBvbiBTeW1ib2wgcHJvcGVydGllc1xuICAgICAgLy8gc3VjaCBhcyBgU3ltYm9sLnRvU3RyaW5nVGFnYC5cbiAgICAgIC8vIFRoZSB2YWx1ZXMgZm9yIHdoaWNoIGFuIGVycm9yIHNob3VsZCBiZSB0aHJvd24gY2FuIGJlIGNvbmZpZ3VyZWQgdXNpbmdcbiAgICAgIC8vIHRoZSBgY29uZmlnLnByb3h5RXhjbHVkZWRLZXlzYCBzZXR0aW5nLlxuICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBjb25maWcucHJveHlFeGNsdWRlZEtleXMuaW5kZXhPZihwcm9wZXJ0eSkgPT09IC0xICYmXG4gICAgICAgICAgIVJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHkpKSB7XG4gICAgICAgIC8vIFNwZWNpYWwgbWVzc2FnZSBmb3IgaW52YWxpZCBwcm9wZXJ0eSBhY2Nlc3Mgb2Ygbm9uLWNoYWluYWJsZSBtZXRob2RzLlxuICAgICAgICBpZiAobm9uQ2hhaW5hYmxlTWV0aG9kTmFtZSkge1xuICAgICAgICAgIHRocm93IEVycm9yKCdJbnZhbGlkIENoYWkgcHJvcGVydHk6ICcgKyBub25DaGFpbmFibGVNZXRob2ROYW1lICsgJy4nICtcbiAgICAgICAgICAgIHByb3BlcnR5ICsgJy4gU2VlIGRvY3MgZm9yIHByb3BlciB1c2FnZSBvZiBcIicgK1xuICAgICAgICAgICAgbm9uQ2hhaW5hYmxlTWV0aG9kTmFtZSArICdcIi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyByZWFzb25hYmx5IGNsb3NlIHRvIGFuIGV4aXN0aW5nIENoYWkgcHJvcGVydHksXG4gICAgICAgIC8vIHN1Z2dlc3QgdGhhdCBwcm9wZXJ0eSB0byB0aGUgdXNlci4gT25seSBzdWdnZXN0IHByb3BlcnRpZXMgd2l0aCBhXG4gICAgICAgIC8vIGRpc3RhbmNlIGxlc3MgdGhhbiA0LlxuICAgICAgICB2YXIgc3VnZ2VzdGlvbiA9IG51bGw7XG4gICAgICAgIHZhciBzdWdnZXN0aW9uRGlzdGFuY2UgPSA0O1xuICAgICAgICBnZXRQcm9wZXJ0aWVzKHRhcmdldCkuZm9yRWFjaChmdW5jdGlvbihwcm9wKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkocHJvcCkgJiZcbiAgICAgICAgICAgIGJ1aWx0aW5zLmluZGV4T2YocHJvcCkgPT09IC0xXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YXIgZGlzdCA9IHN0cmluZ0Rpc3RhbmNlQ2FwcGVkKFxuICAgICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgcHJvcCxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbkRpc3RhbmNlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGRpc3QgPCBzdWdnZXN0aW9uRGlzdGFuY2UpIHtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbiA9IHByb3A7XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25EaXN0YW5jZSA9IGRpc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoc3VnZ2VzdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IEVycm9yKCdJbnZhbGlkIENoYWkgcHJvcGVydHk6ICcgKyBwcm9wZXJ0eSArXG4gICAgICAgICAgICAnLiBEaWQgeW91IG1lYW4gXCInICsgc3VnZ2VzdGlvbiArICdcIj8nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcignSW52YWxpZCBDaGFpIHByb3BlcnR5OiAnICsgcHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFVzZSB0aGlzIHByb3h5IGdldHRlciBhcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHJlbW92aW5nIGltcGxlbWVudGF0aW9uXG4gICAgICAvLyBmcmFtZXMgZnJvbSB0aGUgc3RhY2sgdHJhY2Ugb2YgYSBmYWlsZWQgYXNzZXJ0aW9uLiBGb3IgcHJvcGVydHlcbiAgICAgIC8vIGFzc2VydGlvbnMsIHRoaXMgcHJldmVudHMgdGhlIHByb3h5IGdldHRlciBmcm9tIHNob3dpbmcgdXAgaW4gdGhlIHN0YWNrXG4gICAgICAvLyB0cmFjZSBzaW5jZSBpdCdzIGludm9rZWQgYmVmb3JlIHRoZSBwcm9wZXJ0eSBnZXR0ZXIuIEZvciBtZXRob2QgYW5kXG4gICAgICAvLyBjaGFpbmFibGUgbWV0aG9kIGFzc2VydGlvbnMsIHRoaXMgZmxhZyB3aWxsIGVuZCB1cCBnZXR0aW5nIGNoYW5nZWQgdG9cbiAgICAgIC8vIHRoZSBtZXRob2Qgd3JhcHBlciwgd2hpY2ggaXMgZ29vZCBzaW5jZSB0aGlzIGZyYW1lIHdpbGwgbm8gbG9uZ2VyIGJlIGluXG4gICAgICAvLyB0aGUgc3RhY2sgb25jZSB0aGUgbWV0aG9kIGlzIGludm9rZWQuIE5vdGUgdGhhdCBDaGFpIGJ1aWx0aW4gYXNzZXJ0aW9uXG4gICAgICAvLyBwcm9wZXJ0aWVzIHN1Y2ggYXMgYF9fZmxhZ3NgIGFyZSBza2lwcGVkIHNpbmNlIHRoaXMgaXMgb25seSBtZWFudCB0b1xuICAgICAgLy8gY2FwdHVyZSB0aGUgc3RhcnRpbmcgcG9pbnQgb2YgYW4gYXNzZXJ0aW9uLiBUaGlzIHN0ZXAgaXMgYWxzbyBza2lwcGVkXG4gICAgICAvLyBpZiB0aGUgYGxvY2tTc2ZpYCBmbGFnIGlzIHNldCwgdGh1cyBpbmRpY2F0aW5nIHRoYXQgdGhpcyBhc3NlcnRpb24gaXNcbiAgICAgIC8vIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBhbm90aGVyIGFzc2VydGlvbi4gSW4gdGhhdCBjYXNlLCB0aGUgYHNzZmlgXG4gICAgICAvLyBmbGFnIGlzIGFscmVhZHkgc2V0IHRvIHRoZSBvdXRlciBhc3NlcnRpb24ncyBzdGFydGluZyBwb2ludC5cbiAgICAgIGlmIChidWlsdGlucy5pbmRleE9mKHByb3BlcnR5KSA9PT0gLTEgJiYgIWZsYWcodGFyZ2V0LCAnbG9ja1NzZmknKSkge1xuICAgICAgICBmbGFnKHRhcmdldCwgJ3NzZmknLCBwcm94eUdldHRlcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiAjIHN0cmluZ0Rpc3RhbmNlQ2FwcGVkKHN0ckEsIHN0ckIsIGNhcClcbiAqIFJldHVybiB0aGUgTGV2ZW5zaHRlaW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gc3RyaW5ncywgYnV0IG5vIG1vcmUgdGhhbiBjYXAuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyQVxuICogQHBhcmFtIHtzdHJpbmd9IHN0ckJcbiAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXJcbiAqIEByZXR1cm4ge251bWJlcn0gbWluKHN0cmluZyBkaXN0YW5jZSBiZXR3ZWVuIHN0ckEgYW5kIHN0ckIsIGNhcClcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHN0cmluZ0Rpc3RhbmNlQ2FwcGVkKHN0ckEsIHN0ckIsIGNhcCkge1xuICBpZiAoTWF0aC5hYnMoc3RyQS5sZW5ndGggLSBzdHJCLmxlbmd0aCkgPj0gY2FwKSB7XG4gICAgcmV0dXJuIGNhcDtcbiAgfVxuXG4gIHZhciBtZW1vID0gW107XG4gIC8vIGBtZW1vYCBpcyBhIHR3by1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIGRpc3RhbmNlcy5cbiAgLy8gbWVtb1tpXVtqXSBpcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiBzdHJBLnNsaWNlKDAsIGkpIGFuZFxuICAvLyBzdHJCLnNsaWNlKDAsIGopLlxuICBmb3IgKHZhciBpID0gMDsgaSA8PSBzdHJBLmxlbmd0aDsgaSsrKSB7XG4gICAgbWVtb1tpXSA9IEFycmF5KHN0ckIubGVuZ3RoICsgMSkuZmlsbCgwKTtcbiAgICBtZW1vW2ldWzBdID0gaTtcbiAgfVxuICBmb3IgKHZhciBqID0gMDsgaiA8IHN0ckIubGVuZ3RoOyBqKyspIHtcbiAgICBtZW1vWzBdW2pdID0gajtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAxOyBpIDw9IHN0ckEubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2ggPSBzdHJBLmNoYXJDb2RlQXQoaSAtIDEpO1xuICAgIGZvciAodmFyIGogPSAxOyBqIDw9IHN0ckIubGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmIChNYXRoLmFicyhpIC0gaikgPj0gY2FwKSB7XG4gICAgICAgIG1lbW9baV1bal0gPSBjYXA7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbWVtb1tpXVtqXSA9IE1hdGgubWluKFxuICAgICAgICBtZW1vW2kgLSAxXVtqXSArIDEsXG4gICAgICAgIG1lbW9baV1baiAtIDFdICsgMSxcbiAgICAgICAgbWVtb1tpIC0gMV1baiAtIDFdICtcbiAgICAgICAgICAoY2ggPT09IHN0ckIuY2hhckNvZGVBdChqIC0gMSkgPyAwIDogMSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lbW9bc3RyQS5sZW5ndGhdW3N0ckIubGVuZ3RoXTtcbn1cbiIsICIvKiFcbiAqIENoYWkgLSBhZGRNZXRob2QgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbnZhciBhZGRMZW5ndGhHdWFyZCA9IHJlcXVpcmUoJy4vYWRkTGVuZ3RoR3VhcmQnKTtcbnZhciBjaGFpID0gcmVxdWlyZSgnLi4vLi4vY2hhaScpO1xudmFyIGZsYWcgPSByZXF1aXJlKCcuL2ZsYWcnKTtcbnZhciBwcm94aWZ5ID0gcmVxdWlyZSgnLi9wcm94aWZ5Jyk7XG52YXIgdHJhbnNmZXJGbGFncyA9IHJlcXVpcmUoJy4vdHJhbnNmZXJGbGFncycpO1xuXG4vKipcbiAqICMjIyAuYWRkTWV0aG9kKGN0eCwgbmFtZSwgbWV0aG9kKVxuICpcbiAqIEFkZHMgYSBtZXRob2QgdG8gdGhlIHByb3RvdHlwZSBvZiBhbiBvYmplY3QuXG4gKlxuICogICAgIHV0aWxzLmFkZE1ldGhvZChjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUsICdmb28nLCBmdW5jdGlvbiAoc3RyKSB7XG4gKiAgICAgICB2YXIgb2JqID0gdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG4gKiAgICAgICBuZXcgY2hhaS5Bc3NlcnRpb24ob2JqKS50by5iZS5lcXVhbChzdHIpO1xuICogICAgIH0pO1xuICpcbiAqIENhbiBhbHNvIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gYGNoYWkuQXNzZXJ0aW9uYC5cbiAqXG4gKiAgICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCdmb28nLCBmbik7XG4gKlxuICogVGhlbiBjYW4gYmUgdXNlZCBhcyBhbnkgb3RoZXIgYXNzZXJ0aW9uLlxuICpcbiAqICAgICBleHBlY3QoZm9vU3RyKS50by5iZS5mb28oJ2JhcicpO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjdHggb2JqZWN0IHRvIHdoaWNoIHRoZSBtZXRob2QgaXMgYWRkZWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG9mIG1ldGhvZCB0byBhZGRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1ldGhvZCBmdW5jdGlvbiB0byBiZSB1c2VkIGZvciBuYW1lXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBhZGRNZXRob2RcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhZGRNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QpIHtcbiAgdmFyIG1ldGhvZFdyYXBwZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gU2V0dGluZyB0aGUgYHNzZmlgIGZsYWcgdG8gYG1ldGhvZFdyYXBwZXJgIGNhdXNlcyB0aGlzIGZ1bmN0aW9uIHRvIGJlIHRoZVxuICAgIC8vIHN0YXJ0aW5nIHBvaW50IGZvciByZW1vdmluZyBpbXBsZW1lbnRhdGlvbiBmcmFtZXMgZnJvbSB0aGUgc3RhY2sgdHJhY2Ugb2ZcbiAgICAvLyBhIGZhaWxlZCBhc3NlcnRpb24uXG4gICAgLy9cbiAgICAvLyBIb3dldmVyLCB3ZSBvbmx5IHdhbnQgdG8gdXNlIHRoaXMgZnVuY3Rpb24gYXMgdGhlIHN0YXJ0aW5nIHBvaW50IGlmIHRoZVxuICAgIC8vIGBsb2NrU3NmaWAgZmxhZyBpc24ndCBzZXQuXG4gICAgLy9cbiAgICAvLyBJZiB0aGUgYGxvY2tTc2ZpYCBmbGFnIGlzIHNldCwgdGhlbiBlaXRoZXIgdGhpcyBhc3NlcnRpb24gaGFzIGJlZW5cbiAgICAvLyBvdmVyd3JpdHRlbiBieSBhbm90aGVyIGFzc2VydGlvbiwgb3IgdGhpcyBhc3NlcnRpb24gaXMgYmVpbmcgaW52b2tlZCBmcm9tXG4gICAgLy8gaW5zaWRlIG9mIGFub3RoZXIgYXNzZXJ0aW9uLiBJbiB0aGUgZmlyc3QgY2FzZSwgdGhlIGBzc2ZpYCBmbGFnIGhhc1xuICAgIC8vIGFscmVhZHkgYmVlbiBzZXQgYnkgdGhlIG92ZXJ3cml0aW5nIGFzc2VydGlvbi4gSW4gdGhlIHNlY29uZCBjYXNlLCB0aGVcbiAgICAvLyBgc3NmaWAgZmxhZyBoYXMgYWxyZWFkeSBiZWVuIHNldCBieSB0aGUgb3V0ZXIgYXNzZXJ0aW9uLlxuICAgIGlmICghZmxhZyh0aGlzLCAnbG9ja1NzZmknKSkge1xuICAgICAgZmxhZyh0aGlzLCAnc3NmaScsIG1ldGhvZFdyYXBwZXIpO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQgPSBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gcmVzdWx0O1xuXG4gICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBjaGFpLkFzc2VydGlvbigpO1xuICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICB9O1xuXG4gIGFkZExlbmd0aEd1YXJkKG1ldGhvZFdyYXBwZXIsIG5hbWUsIGZhbHNlKTtcbiAgY3R4W25hbWVdID0gcHJveGlmeShtZXRob2RXcmFwcGVyLCBuYW1lKTtcbn07XG4iLCAiLyohXG4gKiBDaGFpIC0gb3ZlcndyaXRlUHJvcGVydHkgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbnZhciBjaGFpID0gcmVxdWlyZSgnLi4vLi4vY2hhaScpO1xudmFyIGZsYWcgPSByZXF1aXJlKCcuL2ZsYWcnKTtcbnZhciBpc1Byb3h5RW5hYmxlZCA9IHJlcXVpcmUoJy4vaXNQcm94eUVuYWJsZWQnKTtcbnZhciB0cmFuc2ZlckZsYWdzID0gcmVxdWlyZSgnLi90cmFuc2ZlckZsYWdzJyk7XG5cbi8qKlxuICogIyMjIC5vdmVyd3JpdGVQcm9wZXJ0eShjdHgsIG5hbWUsIGZuKVxuICpcbiAqIE92ZXJ3cml0ZXMgYW4gYWxyZWFkeSBleGlzdGluZyBwcm9wZXJ0eSBnZXR0ZXIgYW5kIHByb3ZpZGVzXG4gKiBhY2Nlc3MgdG8gcHJldmlvdXMgdmFsdWUuIE11c3QgcmV0dXJuIGZ1bmN0aW9uIHRvIHVzZSBhcyBnZXR0ZXIuXG4gKlxuICogICAgIHV0aWxzLm92ZXJ3cml0ZVByb3BlcnR5KGNoYWkuQXNzZXJ0aW9uLnByb3RvdHlwZSwgJ29rJywgZnVuY3Rpb24gKF9zdXBlcikge1xuICogICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAqICAgICAgICAgdmFyIG9iaiA9IHV0aWxzLmZsYWcodGhpcywgJ29iamVjdCcpO1xuICogICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgRm9vKSB7XG4gKiAgICAgICAgICAgbmV3IGNoYWkuQXNzZXJ0aW9uKG9iai5uYW1lKS50by5lcXVhbCgnYmFyJyk7XG4gKiAgICAgICAgIH0gZWxzZSB7XG4gKiAgICAgICAgICAgX3N1cGVyLmNhbGwodGhpcyk7XG4gKiAgICAgICAgIH1cbiAqICAgICAgIH1cbiAqICAgICB9KTtcbiAqXG4gKlxuICogQ2FuIGFsc28gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBgY2hhaS5Bc3NlcnRpb25gLlxuICpcbiAqICAgICBjaGFpLkFzc2VydGlvbi5vdmVyd3JpdGVQcm9wZXJ0eSgnZm9vJywgZm4pO1xuICpcbiAqIFRoZW4gY2FuIGJlIHVzZWQgYXMgYW55IG90aGVyIGFzc2VydGlvbi5cbiAqXG4gKiAgICAgZXhwZWN0KG15Rm9vKS50by5iZS5vaztcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY3R4IG9iamVjdCB3aG9zZSBwcm9wZXJ0eSBpcyB0byBiZSBvdmVyd3JpdHRlblxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgb2YgcHJvcGVydHkgdG8gb3ZlcndyaXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZXR0ZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZ2V0dGVyIGZ1bmN0aW9uIHRvIGJlIHVzZWQgZm9yIG5hbWVcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIG92ZXJ3cml0ZVByb3BlcnR5XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gb3ZlcndyaXRlUHJvcGVydHkoY3R4LCBuYW1lLCBnZXR0ZXIpIHtcbiAgdmFyIF9nZXQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGN0eCwgbmFtZSlcbiAgICAsIF9zdXBlciA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gIGlmIChfZ2V0ICYmICdmdW5jdGlvbicgPT09IHR5cGVvZiBfZ2V0LmdldClcbiAgICBfc3VwZXIgPSBfZ2V0LmdldFxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsIG5hbWUsXG4gICAgeyBnZXQ6IGZ1bmN0aW9uIG92ZXJ3cml0aW5nUHJvcGVydHlHZXR0ZXIoKSB7XG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGBzc2ZpYCBmbGFnIHRvIGBvdmVyd3JpdGluZ1Byb3BlcnR5R2V0dGVyYCBjYXVzZXMgdGhpc1xuICAgICAgICAvLyBmdW5jdGlvbiB0byBiZSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHJlbW92aW5nIGltcGxlbWVudGF0aW9uIGZyYW1lc1xuICAgICAgICAvLyBmcm9tIHRoZSBzdGFjayB0cmFjZSBvZiBhIGZhaWxlZCBhc3NlcnRpb24uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEhvd2V2ZXIsIHdlIG9ubHkgd2FudCB0byB1c2UgdGhpcyBmdW5jdGlvbiBhcyB0aGUgc3RhcnRpbmcgcG9pbnQgaWZcbiAgICAgICAgLy8gdGhlIGBsb2NrU3NmaWAgZmxhZyBpc24ndCBzZXQgYW5kIHByb3h5IHByb3RlY3Rpb24gaXMgZGlzYWJsZWQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHRoZSBgbG9ja1NzZmlgIGZsYWcgaXMgc2V0LCB0aGVuIGVpdGhlciB0aGlzIGFzc2VydGlvbiBoYXMgYmVlblxuICAgICAgICAvLyBvdmVyd3JpdHRlbiBieSBhbm90aGVyIGFzc2VydGlvbiwgb3IgdGhpcyBhc3NlcnRpb24gaXMgYmVpbmcgaW52b2tlZFxuICAgICAgICAvLyBmcm9tIGluc2lkZSBvZiBhbm90aGVyIGFzc2VydGlvbi4gSW4gdGhlIGZpcnN0IGNhc2UsIHRoZSBgc3NmaWAgZmxhZ1xuICAgICAgICAvLyBoYXMgYWxyZWFkeSBiZWVuIHNldCBieSB0aGUgb3ZlcndyaXRpbmcgYXNzZXJ0aW9uLiBJbiB0aGUgc2Vjb25kXG4gICAgICAgIC8vIGNhc2UsIHRoZSBgc3NmaWAgZmxhZyBoYXMgYWxyZWFkeSBiZWVuIHNldCBieSB0aGUgb3V0ZXIgYXNzZXJ0aW9uLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiBwcm94eSBwcm90ZWN0aW9uIGlzIGVuYWJsZWQsIHRoZW4gdGhlIGBzc2ZpYCBmbGFnIGhhcyBhbHJlYWR5IGJlZW5cbiAgICAgICAgLy8gc2V0IGJ5IHRoZSBwcm94eSBnZXR0ZXIuXG4gICAgICAgIGlmICghaXNQcm94eUVuYWJsZWQoKSAmJiAhZmxhZyh0aGlzLCAnbG9ja1NzZmknKSkge1xuICAgICAgICAgIGZsYWcodGhpcywgJ3NzZmknLCBvdmVyd3JpdGluZ1Byb3BlcnR5R2V0dGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGBsb2NrU3NmaWAgZmxhZyB0byBgdHJ1ZWAgcHJldmVudHMgdGhlIG92ZXJ3cml0dGVuXG4gICAgICAgIC8vIGFzc2VydGlvbiBmcm9tIGNoYW5naW5nIHRoZSBgc3NmaWAgZmxhZy4gQnkgdGhpcyBwb2ludCwgdGhlIGBzc2ZpYFxuICAgICAgICAvLyBmbGFnIGlzIGFscmVhZHkgc2V0IHRvIHRoZSBjb3JyZWN0IHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIGFzc2VydGlvbi5cbiAgICAgICAgdmFyIG9yaWdMb2NrU3NmaSA9IGZsYWcodGhpcywgJ2xvY2tTc2ZpJyk7XG4gICAgICAgIGZsYWcodGhpcywgJ2xvY2tTc2ZpJywgdHJ1ZSk7XG4gICAgICAgIHZhciByZXN1bHQgPSBnZXR0ZXIoX3N1cGVyKS5jYWxsKHRoaXMpO1xuICAgICAgICBmbGFnKHRoaXMsICdsb2NrU3NmaScsIG9yaWdMb2NrU3NmaSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgY2hhaS5Bc3NlcnRpb24oKTtcbiAgICAgICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgICAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICAgICAgfVxuICAgICwgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufTtcbiIsICIvKiFcbiAqIENoYWkgLSBvdmVyd3JpdGVNZXRob2QgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbnZhciBhZGRMZW5ndGhHdWFyZCA9IHJlcXVpcmUoJy4vYWRkTGVuZ3RoR3VhcmQnKTtcbnZhciBjaGFpID0gcmVxdWlyZSgnLi4vLi4vY2hhaScpO1xudmFyIGZsYWcgPSByZXF1aXJlKCcuL2ZsYWcnKTtcbnZhciBwcm94aWZ5ID0gcmVxdWlyZSgnLi9wcm94aWZ5Jyk7XG52YXIgdHJhbnNmZXJGbGFncyA9IHJlcXVpcmUoJy4vdHJhbnNmZXJGbGFncycpO1xuXG4vKipcbiAqICMjIyAub3ZlcndyaXRlTWV0aG9kKGN0eCwgbmFtZSwgZm4pXG4gKlxuICogT3ZlcndyaXRlcyBhbiBhbHJlYWR5IGV4aXN0aW5nIG1ldGhvZCBhbmQgcHJvdmlkZXNcbiAqIGFjY2VzcyB0byBwcmV2aW91cyBmdW5jdGlvbi4gTXVzdCByZXR1cm4gZnVuY3Rpb25cbiAqIHRvIGJlIHVzZWQgZm9yIG5hbWUuXG4gKlxuICogICAgIHV0aWxzLm92ZXJ3cml0ZU1ldGhvZChjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUsICdlcXVhbCcsIGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAqICAgICAgIHJldHVybiBmdW5jdGlvbiAoc3RyKSB7XG4gKiAgICAgICAgIHZhciBvYmogPSB1dGlscy5mbGFnKHRoaXMsICdvYmplY3QnKTtcbiAqICAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEZvbykge1xuICogICAgICAgICAgIG5ldyBjaGFpLkFzc2VydGlvbihvYmoudmFsdWUpLnRvLmVxdWFsKHN0cik7XG4gKiAgICAgICAgIH0gZWxzZSB7XG4gKiAgICAgICAgICAgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gKiAgICAgICAgIH1cbiAqICAgICAgIH1cbiAqICAgICB9KTtcbiAqXG4gKiBDYW4gYWxzbyBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIGBjaGFpLkFzc2VydGlvbmAuXG4gKlxuICogICAgIGNoYWkuQXNzZXJ0aW9uLm92ZXJ3cml0ZU1ldGhvZCgnZm9vJywgZm4pO1xuICpcbiAqIFRoZW4gY2FuIGJlIHVzZWQgYXMgYW55IG90aGVyIGFzc2VydGlvbi5cbiAqXG4gKiAgICAgZXhwZWN0KG15Rm9vKS50by5lcXVhbCgnYmFyJyk7XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGN0eCBvYmplY3Qgd2hvc2UgbWV0aG9kIGlzIHRvIGJlIG92ZXJ3cml0dGVuXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiBtZXRob2QgdG8gb3ZlcndyaXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXRob2QgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdG8gYmUgdXNlZCBmb3IgbmFtZVxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgb3ZlcndyaXRlTWV0aG9kXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gb3ZlcndyaXRlTWV0aG9kKGN0eCwgbmFtZSwgbWV0aG9kKSB7XG4gIHZhciBfbWV0aG9kID0gY3R4W25hbWVdXG4gICAgLCBfc3VwZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobmFtZSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICB9O1xuXG4gIGlmIChfbWV0aG9kICYmICdmdW5jdGlvbicgPT09IHR5cGVvZiBfbWV0aG9kKVxuICAgIF9zdXBlciA9IF9tZXRob2Q7XG5cbiAgdmFyIG92ZXJ3cml0aW5nTWV0aG9kV3JhcHBlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTZXR0aW5nIHRoZSBgc3NmaWAgZmxhZyB0byBgb3ZlcndyaXRpbmdNZXRob2RXcmFwcGVyYCBjYXVzZXMgdGhpc1xuICAgIC8vIGZ1bmN0aW9uIHRvIGJlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgcmVtb3ZpbmcgaW1wbGVtZW50YXRpb24gZnJhbWVzIGZyb21cbiAgICAvLyB0aGUgc3RhY2sgdHJhY2Ugb2YgYSBmYWlsZWQgYXNzZXJ0aW9uLlxuICAgIC8vXG4gICAgLy8gSG93ZXZlciwgd2Ugb25seSB3YW50IHRvIHVzZSB0aGlzIGZ1bmN0aW9uIGFzIHRoZSBzdGFydGluZyBwb2ludCBpZiB0aGVcbiAgICAvLyBgbG9ja1NzZmlgIGZsYWcgaXNuJ3Qgc2V0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlIGBsb2NrU3NmaWAgZmxhZyBpcyBzZXQsIHRoZW4gZWl0aGVyIHRoaXMgYXNzZXJ0aW9uIGhhcyBiZWVuXG4gICAgLy8gb3ZlcndyaXR0ZW4gYnkgYW5vdGhlciBhc3NlcnRpb24sIG9yIHRoaXMgYXNzZXJ0aW9uIGlzIGJlaW5nIGludm9rZWQgZnJvbVxuICAgIC8vIGluc2lkZSBvZiBhbm90aGVyIGFzc2VydGlvbi4gSW4gdGhlIGZpcnN0IGNhc2UsIHRoZSBgc3NmaWAgZmxhZyBoYXNcbiAgICAvLyBhbHJlYWR5IGJlZW4gc2V0IGJ5IHRoZSBvdmVyd3JpdGluZyBhc3NlcnRpb24uIEluIHRoZSBzZWNvbmQgY2FzZSwgdGhlXG4gICAgLy8gYHNzZmlgIGZsYWcgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgdGhlIG91dGVyIGFzc2VydGlvbi5cbiAgICBpZiAoIWZsYWcodGhpcywgJ2xvY2tTc2ZpJykpIHtcbiAgICAgIGZsYWcodGhpcywgJ3NzZmknLCBvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXIpO1xuICAgIH1cblxuICAgIC8vIFNldHRpbmcgdGhlIGBsb2NrU3NmaWAgZmxhZyB0byBgdHJ1ZWAgcHJldmVudHMgdGhlIG92ZXJ3cml0dGVuIGFzc2VydGlvblxuICAgIC8vIGZyb20gY2hhbmdpbmcgdGhlIGBzc2ZpYCBmbGFnLiBCeSB0aGlzIHBvaW50LCB0aGUgYHNzZmlgIGZsYWcgaXMgYWxyZWFkeVxuICAgIC8vIHNldCB0byB0aGUgY29ycmVjdCBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBhc3NlcnRpb24uXG4gICAgdmFyIG9yaWdMb2NrU3NmaSA9IGZsYWcodGhpcywgJ2xvY2tTc2ZpJyk7XG4gICAgZmxhZyh0aGlzLCAnbG9ja1NzZmknLCB0cnVlKTtcbiAgICB2YXIgcmVzdWx0ID0gbWV0aG9kKF9zdXBlcikuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBmbGFnKHRoaXMsICdsb2NrU3NmaScsIG9yaWdMb2NrU3NmaSk7XG5cbiAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBjaGFpLkFzc2VydGlvbigpO1xuICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICB9XG5cbiAgYWRkTGVuZ3RoR3VhcmQob3ZlcndyaXRpbmdNZXRob2RXcmFwcGVyLCBuYW1lLCBmYWxzZSk7XG4gIGN0eFtuYW1lXSA9IHByb3hpZnkob3ZlcndyaXRpbmdNZXRob2RXcmFwcGVyLCBuYW1lKTtcbn07XG4iLCAiLyohXG4gKiBDaGFpIC0gYWRkQ2hhaW5pbmdNZXRob2QgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qIVxuICogTW9kdWxlIGRlcGVuZGVuY2llc1xuICovXG5cbnZhciBhZGRMZW5ndGhHdWFyZCA9IHJlcXVpcmUoJy4vYWRkTGVuZ3RoR3VhcmQnKTtcbnZhciBjaGFpID0gcmVxdWlyZSgnLi4vLi4vY2hhaScpO1xudmFyIGZsYWcgPSByZXF1aXJlKCcuL2ZsYWcnKTtcbnZhciBwcm94aWZ5ID0gcmVxdWlyZSgnLi9wcm94aWZ5Jyk7XG52YXIgdHJhbnNmZXJGbGFncyA9IHJlcXVpcmUoJy4vdHJhbnNmZXJGbGFncycpO1xuXG4vKiFcbiAqIE1vZHVsZSB2YXJpYWJsZXNcbiAqL1xuXG4vLyBDaGVjayB3aGV0aGVyIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIGlzIHN1cHBvcnRlZFxudmFyIGNhblNldFByb3RvdHlwZSA9IHR5cGVvZiBPYmplY3Quc2V0UHJvdG90eXBlT2YgPT09ICdmdW5jdGlvbic7XG5cbi8vIFdpdGhvdXQgYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgc3VwcG9ydCwgdGhpcyBtb2R1bGUgd2lsbCBuZWVkIHRvIGFkZCBwcm9wZXJ0aWVzIHRvIGEgZnVuY3Rpb24uXG4vLyBIb3dldmVyLCBzb21lIG9mIGZ1bmN0aW9ucycgb3duIHByb3BzIGFyZSBub3QgY29uZmlndXJhYmxlIGFuZCBzaG91bGQgYmUgc2tpcHBlZC5cbnZhciB0ZXN0Rm4gPSBmdW5jdGlvbigpIHt9O1xudmFyIGV4Y2x1ZGVOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3RGbikuZmlsdGVyKGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIHByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0ZXN0Rm4sIG5hbWUpO1xuXG4gIC8vIE5vdGU6IFBoYW50b21KUyAxLnggaW5jbHVkZXMgYGNhbGxlZWAgYXMgb25lIG9mIGB0ZXN0Rm5gJ3Mgb3duIHByb3BlcnRpZXMsXG4gIC8vIGJ1dCB0aGVuIHJldHVybnMgYHVuZGVmaW5lZGAgYXMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIGBjYWxsZWVgLiBBcyBhXG4gIC8vIHdvcmthcm91bmQsIHdlIHBlcmZvcm0gYW4gb3RoZXJ3aXNlIHVubmVjZXNzYXJ5IHR5cGUtY2hlY2sgZm9yIGBwcm9wRGVzY2AsXG4gIC8vIGFuZCB0aGVuIGZpbHRlciBpdCBvdXQgaWYgaXQncyBub3QgYW4gb2JqZWN0IGFzIGl0IHNob3VsZCBiZS5cbiAgaWYgKHR5cGVvZiBwcm9wRGVzYyAhPT0gJ29iamVjdCcpXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgcmV0dXJuICFwcm9wRGVzYy5jb25maWd1cmFibGU7XG59KTtcblxuLy8gQ2FjaGUgYEZ1bmN0aW9uYCBwcm9wZXJ0aWVzXG52YXIgY2FsbCAgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxcbiAgICBhcHBseSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtcblxuLyoqXG4gKiAjIyMgLmFkZENoYWluYWJsZU1ldGhvZChjdHgsIG5hbWUsIG1ldGhvZCwgY2hhaW5pbmdCZWhhdmlvcilcbiAqXG4gKiBBZGRzIGEgbWV0aG9kIHRvIGFuIG9iamVjdCwgc3VjaCB0aGF0IHRoZSBtZXRob2QgY2FuIGFsc28gYmUgY2hhaW5lZC5cbiAqXG4gKiAgICAgdXRpbHMuYWRkQ2hhaW5hYmxlTWV0aG9kKGNoYWkuQXNzZXJ0aW9uLnByb3RvdHlwZSwgJ2ZvbycsIGZ1bmN0aW9uIChzdHIpIHtcbiAqICAgICAgIHZhciBvYmogPSB1dGlscy5mbGFnKHRoaXMsICdvYmplY3QnKTtcbiAqICAgICAgIG5ldyBjaGFpLkFzc2VydGlvbihvYmopLnRvLmJlLmVxdWFsKHN0cik7XG4gKiAgICAgfSk7XG4gKlxuICogQ2FuIGFsc28gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBgY2hhaS5Bc3NlcnRpb25gLlxuICpcbiAqICAgICBjaGFpLkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoJ2ZvbycsIGZuLCBjaGFpbmluZ0JlaGF2aW9yKTtcbiAqXG4gKiBUaGUgcmVzdWx0IGNhbiB0aGVuIGJlIHVzZWQgYXMgYm90aCBhIG1ldGhvZCBhc3NlcnRpb24sIGV4ZWN1dGluZyBib3RoIGBtZXRob2RgIGFuZFxuICogYGNoYWluaW5nQmVoYXZpb3JgLCBvciBhcyBhIGxhbmd1YWdlIGNoYWluLCB3aGljaCBvbmx5IGV4ZWN1dGVzIGBjaGFpbmluZ0JlaGF2aW9yYC5cbiAqXG4gKiAgICAgZXhwZWN0KGZvb1N0cikudG8uYmUuZm9vKCdiYXInKTtcbiAqICAgICBleHBlY3QoZm9vU3RyKS50by5iZS5mb28uZXF1YWwoJ2ZvbycpO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjdHggb2JqZWN0IHRvIHdoaWNoIHRoZSBtZXRob2QgaXMgYWRkZWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG9mIG1ldGhvZCB0byBhZGRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1ldGhvZCBmdW5jdGlvbiB0byBiZSB1c2VkIGZvciBgbmFtZWAsIHdoZW4gY2FsbGVkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjaGFpbmluZ0JlaGF2aW9yIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBwcm9wZXJ0eSBpcyBhY2Nlc3NlZFxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgYWRkQ2hhaW5hYmxlTWV0aG9kXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWRkQ2hhaW5hYmxlTWV0aG9kKGN0eCwgbmFtZSwgbWV0aG9kLCBjaGFpbmluZ0JlaGF2aW9yKSB7XG4gIGlmICh0eXBlb2YgY2hhaW5pbmdCZWhhdmlvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIGNoYWluaW5nQmVoYXZpb3IgPSBmdW5jdGlvbiAoKSB7IH07XG4gIH1cblxuICB2YXIgY2hhaW5hYmxlQmVoYXZpb3IgPSB7XG4gICAgICBtZXRob2Q6IG1ldGhvZFxuICAgICwgY2hhaW5pbmdCZWhhdmlvcjogY2hhaW5pbmdCZWhhdmlvclxuICB9O1xuXG4gIC8vIHNhdmUgdGhlIG1ldGhvZHMgc28gd2UgY2FuIG92ZXJ3cml0ZSB0aGVtIGxhdGVyLCBpZiB3ZSBuZWVkIHRvLlxuICBpZiAoIWN0eC5fX21ldGhvZHMpIHtcbiAgICBjdHguX19tZXRob2RzID0ge307XG4gIH1cbiAgY3R4Ll9fbWV0aG9kc1tuYW1lXSA9IGNoYWluYWJsZUJlaGF2aW9yO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsIG5hbWUsXG4gICAgeyBnZXQ6IGZ1bmN0aW9uIGNoYWluYWJsZU1ldGhvZEdldHRlcigpIHtcbiAgICAgICAgY2hhaW5hYmxlQmVoYXZpb3IuY2hhaW5pbmdCZWhhdmlvci5jYWxsKHRoaXMpO1xuXG4gICAgICAgIHZhciBjaGFpbmFibGVNZXRob2RXcmFwcGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIFNldHRpbmcgdGhlIGBzc2ZpYCBmbGFnIHRvIGBjaGFpbmFibGVNZXRob2RXcmFwcGVyYCBjYXVzZXMgdGhpc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uIHRvIGJlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgcmVtb3ZpbmcgaW1wbGVtZW50YXRpb25cbiAgICAgICAgICAvLyBmcmFtZXMgZnJvbSB0aGUgc3RhY2sgdHJhY2Ugb2YgYSBmYWlsZWQgYXNzZXJ0aW9uLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gSG93ZXZlciwgd2Ugb25seSB3YW50IHRvIHVzZSB0aGlzIGZ1bmN0aW9uIGFzIHRoZSBzdGFydGluZyBwb2ludCBpZlxuICAgICAgICAgIC8vIHRoZSBgbG9ja1NzZmlgIGZsYWcgaXNuJ3Qgc2V0LlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gSWYgdGhlIGBsb2NrU3NmaWAgZmxhZyBpcyBzZXQsIHRoZW4gdGhpcyBhc3NlcnRpb24gaXMgYmVpbmdcbiAgICAgICAgICAvLyBpbnZva2VkIGZyb20gaW5zaWRlIG9mIGFub3RoZXIgYXNzZXJ0aW9uLiBJbiB0aGlzIGNhc2UsIHRoZSBgc3NmaWBcbiAgICAgICAgICAvLyBmbGFnIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IHRoZSBvdXRlciBhc3NlcnRpb24uXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBOb3RlIHRoYXQgb3ZlcndyaXRpbmcgYSBjaGFpbmFibGUgbWV0aG9kIG1lcmVseSByZXBsYWNlcyB0aGUgc2F2ZWRcbiAgICAgICAgICAvLyBtZXRob2RzIGluIGBjdHguX19tZXRob2RzYCBpbnN0ZWFkIG9mIGNvbXBsZXRlbHkgcmVwbGFjaW5nIHRoZVxuICAgICAgICAgIC8vIG92ZXJ3cml0dGVuIGFzc2VydGlvbi4gVGhlcmVmb3JlLCBhbiBvdmVyd3JpdGluZyBhc3NlcnRpb24gd29uJ3RcbiAgICAgICAgICAvLyBzZXQgdGhlIGBzc2ZpYCBvciBgbG9ja1NzZmlgIGZsYWdzLlxuICAgICAgICAgIGlmICghZmxhZyh0aGlzLCAnbG9ja1NzZmknKSkge1xuICAgICAgICAgICAgZmxhZyh0aGlzLCAnc3NmaScsIGNoYWluYWJsZU1ldGhvZFdyYXBwZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciByZXN1bHQgPSBjaGFpbmFibGVCZWhhdmlvci5tZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBjaGFpLkFzc2VydGlvbigpO1xuICAgICAgICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICAgICAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICAgICAgICB9O1xuXG4gICAgICAgIGFkZExlbmd0aEd1YXJkKGNoYWluYWJsZU1ldGhvZFdyYXBwZXIsIG5hbWUsIHRydWUpO1xuXG4gICAgICAgIC8vIFVzZSBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBpZiBhdmFpbGFibGVcbiAgICAgICAgaWYgKGNhblNldFByb3RvdHlwZSkge1xuICAgICAgICAgIC8vIEluaGVyaXQgYWxsIHByb3BlcnRpZXMgZnJvbSB0aGUgb2JqZWN0IGJ5IHJlcGxhY2luZyB0aGUgYEZ1bmN0aW9uYCBwcm90b3R5cGVcbiAgICAgICAgICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBgY2FsbGAgYW5kIGBhcHBseWAgbWV0aG9kcyBmcm9tIGBGdW5jdGlvbmBcbiAgICAgICAgICBwcm90b3R5cGUuY2FsbCA9IGNhbGw7XG4gICAgICAgICAgcHJvdG90eXBlLmFwcGx5ID0gYXBwbHk7XG4gICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGNoYWluYWJsZU1ldGhvZFdyYXBwZXIsIHByb3RvdHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCByZWRlZmluZSBhbGwgcHJvcGVydGllcyAoc2xvdyEpXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHZhciBhc3NlcnRlck5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3R4KTtcbiAgICAgICAgICBhc3NlcnRlck5hbWVzLmZvckVhY2goZnVuY3Rpb24gKGFzc2VydGVyTmFtZSkge1xuICAgICAgICAgICAgaWYgKGV4Y2x1ZGVOYW1lcy5pbmRleE9mKGFzc2VydGVyTmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHBkID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjdHgsIGFzc2VydGVyTmFtZSk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2hhaW5hYmxlTWV0aG9kV3JhcHBlciwgYXNzZXJ0ZXJOYW1lLCBwZCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIGNoYWluYWJsZU1ldGhvZFdyYXBwZXIpO1xuICAgICAgICByZXR1cm4gcHJveGlmeShjaGFpbmFibGVNZXRob2RXcmFwcGVyKTtcbiAgICAgIH1cbiAgICAsIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn07XG4iLCAiLyohXG4gKiBDaGFpIC0gb3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG52YXIgY2hhaSA9IHJlcXVpcmUoJy4uLy4uL2NoYWknKTtcbnZhciB0cmFuc2ZlckZsYWdzID0gcmVxdWlyZSgnLi90cmFuc2ZlckZsYWdzJyk7XG5cbi8qKlxuICogIyMjIC5vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QsIGNoYWluaW5nQmVoYXZpb3IpXG4gKlxuICogT3ZlcndyaXRlcyBhbiBhbHJlYWR5IGV4aXN0aW5nIGNoYWluYWJsZSBtZXRob2RcbiAqIGFuZCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIHByZXZpb3VzIGZ1bmN0aW9uIG9yXG4gKiBwcm9wZXJ0eS4gIE11c3QgcmV0dXJuIGZ1bmN0aW9ucyB0byBiZSB1c2VkIGZvclxuICogbmFtZS5cbiAqXG4gKiAgICAgdXRpbHMub3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kKGNoYWkuQXNzZXJ0aW9uLnByb3RvdHlwZSwgJ2xlbmd0aE9mJyxcbiAqICAgICAgIGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAqICAgICAgIH1cbiAqICAgICAsIGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAqICAgICAgIH1cbiAqICAgICApO1xuICpcbiAqIENhbiBhbHNvIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gYGNoYWkuQXNzZXJ0aW9uYC5cbiAqXG4gKiAgICAgY2hhaS5Bc3NlcnRpb24ub3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kKCdmb28nLCBmbiwgZm4pO1xuICpcbiAqIFRoZW4gY2FuIGJlIHVzZWQgYXMgYW55IG90aGVyIGFzc2VydGlvbi5cbiAqXG4gKiAgICAgZXhwZWN0KG15Rm9vKS50by5oYXZlLmxlbmd0aE9mKDMpO1xuICogICAgIGV4cGVjdChteUZvbykudG8uaGF2ZS5sZW5ndGhPZi5hYm92ZSgzKTtcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY3R4IG9iamVjdCB3aG9zZSBtZXRob2QgLyBwcm9wZXJ0eSBpcyB0byBiZSBvdmVyd3JpdHRlblxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgb2YgbWV0aG9kIC8gcHJvcGVydHkgdG8gb3ZlcndyaXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXRob2QgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdG8gYmUgdXNlZCBmb3IgbmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2hhaW5pbmdCZWhhdmlvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0byBiZSB1c2VkIGZvciBwcm9wZXJ0eVxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgb3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gb3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kKGN0eCwgbmFtZSwgbWV0aG9kLCBjaGFpbmluZ0JlaGF2aW9yKSB7XG4gIHZhciBjaGFpbmFibGVCZWhhdmlvciA9IGN0eC5fX21ldGhvZHNbbmFtZV07XG5cbiAgdmFyIF9jaGFpbmluZ0JlaGF2aW9yID0gY2hhaW5hYmxlQmVoYXZpb3IuY2hhaW5pbmdCZWhhdmlvcjtcbiAgY2hhaW5hYmxlQmVoYXZpb3IuY2hhaW5pbmdCZWhhdmlvciA9IGZ1bmN0aW9uIG92ZXJ3cml0aW5nQ2hhaW5hYmxlTWV0aG9kR2V0dGVyKCkge1xuICAgIHZhciByZXN1bHQgPSBjaGFpbmluZ0JlaGF2aW9yKF9jaGFpbmluZ0JlaGF2aW9yKS5jYWxsKHRoaXMpO1xuICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB2YXIgbmV3QXNzZXJ0aW9uID0gbmV3IGNoYWkuQXNzZXJ0aW9uKCk7XG4gICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gIH07XG5cbiAgdmFyIF9tZXRob2QgPSBjaGFpbmFibGVCZWhhdmlvci5tZXRob2Q7XG4gIGNoYWluYWJsZUJlaGF2aW9yLm1ldGhvZCA9IGZ1bmN0aW9uIG92ZXJ3cml0aW5nQ2hhaW5hYmxlTWV0aG9kV3JhcHBlcigpIHtcbiAgICB2YXIgcmVzdWx0ID0gbWV0aG9kKF9tZXRob2QpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgY2hhaS5Bc3NlcnRpb24oKTtcbiAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgfTtcbn07XG4iLCAiLyohXG4gKiBDaGFpIC0gY29tcGFyZUJ5SW5zcGVjdCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyohXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzXG4gKi9cblxudmFyIGluc3BlY3QgPSByZXF1aXJlKCcuL2luc3BlY3QnKTtcblxuLyoqXG4gKiAjIyMgLmNvbXBhcmVCeUluc3BlY3QobWl4ZWQsIG1peGVkKVxuICpcbiAqIFRvIGJlIHVzZWQgYXMgYSBjb21wYXJlRnVuY3Rpb24gd2l0aCBBcnJheS5wcm90b3R5cGUuc29ydC4gQ29tcGFyZXMgZWxlbWVudHNcbiAqIHVzaW5nIGluc3BlY3QgaW5zdGVhZCBvZiBkZWZhdWx0IGJlaGF2aW9yIG9mIHVzaW5nIHRvU3RyaW5nIHNvIHRoYXQgU3ltYm9sc1xuICogYW5kIG9iamVjdHMgd2l0aCBpcnJlZ3VsYXIvbWlzc2luZyB0b1N0cmluZyBjYW4gc3RpbGwgYmUgc29ydGVkIHdpdGhvdXQgYVxuICogVHlwZUVycm9yLlxuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IGZpcnN0IGVsZW1lbnQgdG8gY29tcGFyZVxuICogQHBhcmFtIHtNaXhlZH0gc2Vjb25kIGVsZW1lbnQgdG8gY29tcGFyZVxuICogQHJldHVybnMge051bWJlcn0gLTEgaWYgJ2EnIHNob3VsZCBjb21lIGJlZm9yZSAnYic7IG90aGVyd2lzZSAxXG4gKiBAbmFtZSBjb21wYXJlQnlJbnNwZWN0XG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29tcGFyZUJ5SW5zcGVjdChhLCBiKSB7XG4gIHJldHVybiBpbnNwZWN0KGEpIDwgaW5zcGVjdChiKSA/IC0xIDogMTtcbn07XG4iLCAiLyohXG4gKiBDaGFpIC0gZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scyB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiAjIyMgLmdldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMob2JqZWN0KVxuICpcbiAqIFRoaXMgYWxsb3dzIHRoZSByZXRyaWV2YWwgb2YgZGlyZWN0bHktb3duZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBzeW1ib2xzIG9mIGFuXG4gKiBvYmplY3QuIFRoaXMgZnVuY3Rpb24gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc1xuICogcmV0dXJucyBib3RoIGVudW1lcmFibGUgYW5kIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5IHN5bWJvbHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHJldHVybnMge0FycmF5fVxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9sc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMob2JqKSB7XG4gIGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIFtdO1xuXG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iaikuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHN5bSkuZW51bWVyYWJsZTtcbiAgfSk7XG59O1xuIiwgIi8qIVxuICogQ2hhaSAtIGdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKiFcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXNcbiAqL1xuXG52YXIgZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scyA9IHJlcXVpcmUoJy4vZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scycpO1xuXG4vKipcbiAqICMjIyAuZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXMob2JqZWN0KVxuICpcbiAqIFRoaXMgYWxsb3dzIHRoZSByZXRyaWV2YWwgb2YgZGlyZWN0bHktb3duZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYW4gb2JqZWN0LiBUaGlzIGZ1bmN0aW9uIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIE9iamVjdC5rZXlzIG9ubHlcbiAqIHJldHVybnMgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcywgbm90IGVudW1lcmFibGUgcHJvcGVydHkgc3ltYm9scy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBnZXRPd25FbnVtZXJhYmxlUHJvcGVydGllc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5jb25jYXQoZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scyhvYmopKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKiAhXG4gKiBDaGFpIC0gY2hlY2tFcnJvciB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE2IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxudmFyIGdldEZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoJ2dldC1mdW5jLW5hbWUnKTtcbi8qKlxuICogIyMjIC5jaGVja0Vycm9yXG4gKlxuICogQ2hlY2tzIHRoYXQgYW4gZXJyb3IgY29uZm9ybXMgdG8gYSBnaXZlbiBzZXQgb2YgY3JpdGVyaWEgYW5kL29yIHJldHJpZXZlcyBpbmZvcm1hdGlvbiBhYm91dCBpdC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbi8qKlxuICogIyMjIC5jb21wYXRpYmxlSW5zdGFuY2UodGhyb3duLCBlcnJvckxpa2UpXG4gKlxuICogQ2hlY2tzIGlmIHR3byBpbnN0YW5jZXMgYXJlIGNvbXBhdGlibGUgKHN0cmljdCBlcXVhbCkuXG4gKiBSZXR1cm5zIGZhbHNlIGlmIGVycm9yTGlrZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgRXJyb3IsIGJlY2F1c2UgaW5zdGFuY2VzXG4gKiBjYW4gb25seSBiZSBjb21wYXRpYmxlIGlmIHRoZXkncmUgYm90aCBlcnJvciBpbnN0YW5jZXMuXG4gKlxuICogQG5hbWUgY29tcGF0aWJsZUluc3RhbmNlXG4gKiBAcGFyYW0ge0Vycm9yfSB0aHJvd24gZXJyb3JcbiAqIEBwYXJhbSB7RXJyb3J8RXJyb3JDb25zdHJ1Y3Rvcn0gZXJyb3JMaWtlIG9iamVjdCB0byBjb21wYXJlIGFnYWluc3RcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gY29tcGF0aWJsZUluc3RhbmNlKHRocm93biwgZXJyb3JMaWtlKSB7XG4gIHJldHVybiBlcnJvckxpa2UgaW5zdGFuY2VvZiBFcnJvciAmJiB0aHJvd24gPT09IGVycm9yTGlrZTtcbn1cblxuLyoqXG4gKiAjIyMgLmNvbXBhdGlibGVDb25zdHJ1Y3Rvcih0aHJvd24sIGVycm9yTGlrZSlcbiAqXG4gKiBDaGVja3MgaWYgdHdvIGNvbnN0cnVjdG9ycyBhcmUgY29tcGF0aWJsZS5cbiAqIFRoaXMgZnVuY3Rpb24gY2FuIHJlY2VpdmUgZWl0aGVyIGFuIGVycm9yIGNvbnN0cnVjdG9yIG9yXG4gKiBhbiBlcnJvciBpbnN0YW5jZSBhcyB0aGUgYGVycm9yTGlrZWAgYXJndW1lbnQuXG4gKiBDb25zdHJ1Y3RvcnMgYXJlIGNvbXBhdGlibGUgaWYgdGhleSdyZSB0aGUgc2FtZSBvciBpZiBvbmUgaXNcbiAqIGFuIGluc3RhbmNlIG9mIGFub3RoZXIuXG4gKlxuICogQG5hbWUgY29tcGF0aWJsZUNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0Vycm9yfSB0aHJvd24gZXJyb3JcbiAqIEBwYXJhbSB7RXJyb3J8RXJyb3JDb25zdHJ1Y3Rvcn0gZXJyb3JMaWtlIG9iamVjdCB0byBjb21wYXJlIGFnYWluc3RcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gY29tcGF0aWJsZUNvbnN0cnVjdG9yKHRocm93biwgZXJyb3JMaWtlKSB7XG4gIGlmIChlcnJvckxpa2UgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIC8vIElmIGBlcnJvckxpa2VgIGlzIGFuIGluc3RhbmNlIG9mIGFueSBlcnJvciB3ZSBjb21wYXJlIHRoZWlyIGNvbnN0cnVjdG9yc1xuICAgIHJldHVybiB0aHJvd24uY29uc3RydWN0b3IgPT09IGVycm9yTGlrZS5jb25zdHJ1Y3RvciB8fCB0aHJvd24gaW5zdGFuY2VvZiBlcnJvckxpa2UuY29uc3RydWN0b3I7XG4gIH0gZWxzZSBpZiAoZXJyb3JMaWtlLnByb3RvdHlwZSBpbnN0YW5jZW9mIEVycm9yIHx8IGVycm9yTGlrZSA9PT0gRXJyb3IpIHtcbiAgICAvLyBJZiBgZXJyb3JMaWtlYCBpcyBhIGNvbnN0cnVjdG9yIHRoYXQgaW5oZXJpdHMgZnJvbSBFcnJvciwgd2UgY29tcGFyZSBgdGhyb3duYCB0byBgZXJyb3JMaWtlYCBkaXJlY3RseVxuICAgIHJldHVybiB0aHJvd24uY29uc3RydWN0b3IgPT09IGVycm9yTGlrZSB8fCB0aHJvd24gaW5zdGFuY2VvZiBlcnJvckxpa2U7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogIyMjIC5jb21wYXRpYmxlTWVzc2FnZSh0aHJvd24sIGVyck1hdGNoZXIpXG4gKlxuICogQ2hlY2tzIGlmIGFuIGVycm9yJ3MgbWVzc2FnZSBpcyBjb21wYXRpYmxlIHdpdGggYSBtYXRjaGVyIChTdHJpbmcgb3IgUmVnRXhwKS5cbiAqIElmIHRoZSBtZXNzYWdlIGNvbnRhaW5zIHRoZSBTdHJpbmcgb3IgcGFzc2VzIHRoZSBSZWdFeHAgdGVzdCxcbiAqIGl0IGlzIGNvbnNpZGVyZWQgY29tcGF0aWJsZS5cbiAqXG4gKiBAbmFtZSBjb21wYXRpYmxlTWVzc2FnZVxuICogQHBhcmFtIHtFcnJvcn0gdGhyb3duIGVycm9yXG4gKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IGVyck1hdGNoZXIgdG8gbG9vayBmb3IgaW50byB0aGUgbWVzc2FnZVxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBjb21wYXRpYmxlTWVzc2FnZSh0aHJvd24sIGVyck1hdGNoZXIpIHtcbiAgdmFyIGNvbXBhcmlzb25TdHJpbmcgPSB0eXBlb2YgdGhyb3duID09PSAnc3RyaW5nJyA/IHRocm93biA6IHRocm93bi5tZXNzYWdlO1xuICBpZiAoZXJyTWF0Y2hlciBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiBlcnJNYXRjaGVyLnRlc3QoY29tcGFyaXNvblN0cmluZyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVyck1hdGNoZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGNvbXBhcmlzb25TdHJpbmcuaW5kZXhPZihlcnJNYXRjaGVyKSAhPT0gLTE7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqICMjIyAuZ2V0Q29uc3RydWN0b3JOYW1lKGVycm9yTGlrZSlcbiAqXG4gKiBHZXRzIHRoZSBjb25zdHJ1Y3RvciBuYW1lIGZvciBhbiBFcnJvciBpbnN0YW5jZSBvciBjb25zdHJ1Y3RvciBpdHNlbGYuXG4gKlxuICogQG5hbWUgZ2V0Q29uc3RydWN0b3JOYW1lXG4gKiBAcGFyYW0ge0Vycm9yfEVycm9yQ29uc3RydWN0b3J9IGVycm9yTGlrZVxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBnZXRDb25zdHJ1Y3Rvck5hbWUoZXJyb3JMaWtlKSB7XG4gIHZhciBjb25zdHJ1Y3Rvck5hbWUgPSBlcnJvckxpa2U7XG4gIGlmIChlcnJvckxpa2UgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIGNvbnN0cnVjdG9yTmFtZSA9IGdldEZ1bmN0aW9uTmFtZShlcnJvckxpa2UuY29uc3RydWN0b3IpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJvckxpa2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiBgZXJyYCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgRXJyb3IgaXQgaXMgYW4gZXJyb3IgY29uc3RydWN0b3IgaXRzZWxmIG9yIGFub3RoZXIgZnVuY3Rpb24uXG4gICAgLy8gSWYgd2UndmUgZ290IGEgY29tbW9uIGZ1bmN0aW9uIHdlIGdldCBpdHMgbmFtZSwgb3RoZXJ3aXNlIHdlIG1heSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZVxuICAgIC8vIG9mIHRoZSBlcnJvciBqdXN0IGluIGNhc2UgaXQncyBhIHBvb3JseS1jb25zdHJ1Y3RlZCBlcnJvci4gUGxlYXNlIHNlZSBjaGFpanMvY2hhaS9pc3N1ZXMvNDUgdG8ga25vdyBtb3JlLlxuICAgIGNvbnN0cnVjdG9yTmFtZSA9IGdldEZ1bmN0aW9uTmFtZShlcnJvckxpa2UpO1xuICAgIGlmIChjb25zdHJ1Y3Rvck5hbWUgPT09ICcnKSB7XG4gICAgICB2YXIgbmV3Q29uc3RydWN0b3JOYW1lID0gZ2V0RnVuY3Rpb25OYW1lKG5ldyBlcnJvckxpa2UoKSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuICAgICAgY29uc3RydWN0b3JOYW1lID0gbmV3Q29uc3RydWN0b3JOYW1lIHx8IGNvbnN0cnVjdG9yTmFtZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uc3RydWN0b3JOYW1lO1xufVxuXG4vKipcbiAqICMjIyAuZ2V0TWVzc2FnZShlcnJvckxpa2UpXG4gKlxuICogR2V0cyB0aGUgZXJyb3IgbWVzc2FnZSBmcm9tIGFuIGVycm9yLlxuICogSWYgYGVycmAgaXMgYSBTdHJpbmcgaXRzZWxmLCB3ZSByZXR1cm4gaXQuXG4gKiBJZiB0aGUgZXJyb3IgaGFzIG5vIG1lc3NhZ2UsIHdlIHJldHVybiBhbiBlbXB0eSBzdHJpbmcuXG4gKlxuICogQG5hbWUgZ2V0TWVzc2FnZVxuICogQHBhcmFtIHtFcnJvcnxTdHJpbmd9IGVycm9yTGlrZVxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBnZXRNZXNzYWdlKGVycm9yTGlrZSkge1xuICB2YXIgbXNnID0gJyc7XG4gIGlmIChlcnJvckxpa2UgJiYgZXJyb3JMaWtlLm1lc3NhZ2UpIHtcbiAgICBtc2cgPSBlcnJvckxpa2UubWVzc2FnZTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3JMaWtlID09PSAnc3RyaW5nJykge1xuICAgIG1zZyA9IGVycm9yTGlrZTtcbiAgfVxuXG4gIHJldHVybiBtc2c7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb21wYXRpYmxlSW5zdGFuY2U6IGNvbXBhdGlibGVJbnN0YW5jZSxcbiAgY29tcGF0aWJsZUNvbnN0cnVjdG9yOiBjb21wYXRpYmxlQ29uc3RydWN0b3IsXG4gIGNvbXBhdGlibGVNZXNzYWdlOiBjb21wYXRpYmxlTWVzc2FnZSxcbiAgZ2V0TWVzc2FnZTogZ2V0TWVzc2FnZSxcbiAgZ2V0Q29uc3RydWN0b3JOYW1lOiBnZXRDb25zdHJ1Y3Rvck5hbWUsXG59O1xuIiwgIi8qIVxuICogQ2hhaSAtIGlzTmFOIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTUgU2FrdGhpcHJpeWFuIFZhaXJhbWFuaSA8dGhlY2hhcmdpbmd2b2xjYW5vQGdtYWlsLmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogIyMjIC5pc05hTih2YWx1ZSlcbiAqXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIE5hTiBvciBub3QuXG4gKlxuICogICAgIHV0aWxzLmlzTmFOKE5hTik7IC8vIHRydWVcbiAqXG4gKiBAcGFyYW0ge1ZhbHVlfSBUaGUgdmFsdWUgd2hpY2ggaGFzIHRvIGJlIGNoZWNrZWQgaWYgaXQgaXMgTmFOXG4gKiBAbmFtZSBpc05hTlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gaXNOYU4odmFsdWUpIHtcbiAgLy8gUmVmZXIgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzbmFuLW51bWJlclxuICAvLyBzZWN0aW9uJ3MgTk9URS5cbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxuLy8gSWYgRUNNQVNjcmlwdCA2J3MgTnVtYmVyLmlzTmFOIGlzIHByZXNlbnQsIHByZWZlciB0aGF0LlxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNOYU4gfHwgaXNOYU47XG4iLCAidmFyIHR5cGUgPSByZXF1aXJlKCd0eXBlLWRldGVjdCcpO1xuXG52YXIgZmxhZyA9IHJlcXVpcmUoJy4vZmxhZycpO1xuXG5mdW5jdGlvbiBpc09iamVjdFR5cGUob2JqKSB7XG4gIHZhciBvYmplY3RUeXBlID0gdHlwZShvYmopO1xuICB2YXIgb2JqZWN0VHlwZXMgPSBbJ0FycmF5JywgJ09iamVjdCcsICdmdW5jdGlvbiddO1xuXG4gIHJldHVybiBvYmplY3RUeXBlcy5pbmRleE9mKG9iamVjdFR5cGUpICE9PSAtMTtcbn1cblxuLyoqXG4gKiAjIyMgLmdldE9wZXJhdG9yKG1lc3NhZ2UpXG4gKlxuICogRXh0cmFjdCB0aGUgb3BlcmF0b3IgZnJvbSBlcnJvciBtZXNzYWdlLlxuICogT3BlcmF0b3IgZGVmaW5lZCBpcyBiYXNlZCBvbiBiZWxvdyBsaW5rXG4gKiBodHRwczovL25vZGVqcy5vcmcvYXBpL2Fzc2VydC5odG1sI2Fzc2VydF9hc3NlcnQuXG4gKlxuICogUmV0dXJucyB0aGUgYG9wZXJhdG9yYCBvciBgdW5kZWZpbmVkYCB2YWx1ZSBmb3IgYW4gQXNzZXJ0aW9uLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgKGNvbnN0cnVjdGVkIEFzc2VydGlvbilcbiAqIEBwYXJhbSB7QXJndW1lbnRzfSBjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUuYXNzZXJ0IGFyZ3VtZW50c1xuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgZ2V0T3BlcmF0b3JcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRPcGVyYXRvcihvYmosIGFyZ3MpIHtcbiAgdmFyIG9wZXJhdG9yID0gZmxhZyhvYmosICdvcGVyYXRvcicpO1xuICB2YXIgbmVnYXRlID0gZmxhZyhvYmosICduZWdhdGUnKTtcbiAgdmFyIGV4cGVjdGVkID0gYXJnc1szXTtcbiAgdmFyIG1zZyA9IG5lZ2F0ZSA/IGFyZ3NbMl0gOiBhcmdzWzFdO1xuXG4gIGlmIChvcGVyYXRvcikge1xuICAgIHJldHVybiBvcGVyYXRvcjtcbiAgfVxuXG4gIGlmICh0eXBlb2YgbXNnID09PSAnZnVuY3Rpb24nKSBtc2cgPSBtc2coKTtcblxuICBtc2cgPSBtc2cgfHwgJyc7XG4gIGlmICghbXNnKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICgvXFxzaGF2ZVxccy8udGVzdChtc2cpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHZhciBpc09iamVjdCA9IGlzT2JqZWN0VHlwZShleHBlY3RlZCk7XG4gIGlmICgvXFxzbm90XFxzLy50ZXN0KG1zZykpIHtcbiAgICByZXR1cm4gaXNPYmplY3QgPyAnbm90RGVlcFN0cmljdEVxdWFsJyA6ICdub3RTdHJpY3RFcXVhbCc7XG4gIH1cblxuICByZXR1cm4gaXNPYmplY3QgPyAnZGVlcFN0cmljdEVxdWFsJyA6ICdzdHJpY3RFcXVhbCc7XG59O1xuIiwgIi8qIVxuICogY2hhaVxuICogQ29weXJpZ2h0KGMpIDIwMTEgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKiFcbiAqIERlcGVuZGVuY2llcyB0aGF0IGFyZSB1c2VkIGZvciBtdWx0aXBsZSBleHBvcnRzIGFyZSByZXF1aXJlZCBoZXJlIG9ubHkgb25jZVxuICovXG5cbnZhciBwYXRodmFsID0gcmVxdWlyZSgncGF0aHZhbCcpO1xuXG4vKiFcbiAqIHRlc3QgdXRpbGl0eVxuICovXG5cbmV4cG9ydHMudGVzdCA9IHJlcXVpcmUoJy4vdGVzdCcpO1xuXG4vKiFcbiAqIHR5cGUgdXRpbGl0eVxuICovXG5cbmV4cG9ydHMudHlwZSA9IHJlcXVpcmUoJ3R5cGUtZGV0ZWN0Jyk7XG5cbi8qIVxuICogZXhwZWN0VHlwZXMgdXRpbGl0eVxuICovXG5leHBvcnRzLmV4cGVjdFR5cGVzID0gcmVxdWlyZSgnLi9leHBlY3RUeXBlcycpO1xuXG4vKiFcbiAqIG1lc3NhZ2UgdXRpbGl0eVxuICovXG5cbmV4cG9ydHMuZ2V0TWVzc2FnZSA9IHJlcXVpcmUoJy4vZ2V0TWVzc2FnZScpO1xuXG4vKiFcbiAqIGFjdHVhbCB1dGlsaXR5XG4gKi9cblxuZXhwb3J0cy5nZXRBY3R1YWwgPSByZXF1aXJlKCcuL2dldEFjdHVhbCcpO1xuXG4vKiFcbiAqIEluc3BlY3QgdXRpbFxuICovXG5cbmV4cG9ydHMuaW5zcGVjdCA9IHJlcXVpcmUoJy4vaW5zcGVjdCcpO1xuXG4vKiFcbiAqIE9iamVjdCBEaXNwbGF5IHV0aWxcbiAqL1xuXG5leHBvcnRzLm9iakRpc3BsYXkgPSByZXF1aXJlKCcuL29iakRpc3BsYXknKTtcblxuLyohXG4gKiBGbGFnIHV0aWxpdHlcbiAqL1xuXG5leHBvcnRzLmZsYWcgPSByZXF1aXJlKCcuL2ZsYWcnKTtcblxuLyohXG4gKiBGbGFnIHRyYW5zZmVycmluZyB1dGlsaXR5XG4gKi9cblxuZXhwb3J0cy50cmFuc2ZlckZsYWdzID0gcmVxdWlyZSgnLi90cmFuc2ZlckZsYWdzJyk7XG5cbi8qIVxuICogRGVlcCBlcXVhbCB1dGlsaXR5XG4gKi9cblxuZXhwb3J0cy5lcWwgPSByZXF1aXJlKCdkZWVwLWVxbCcpO1xuXG4vKiFcbiAqIERlZXAgcGF0aCBpbmZvXG4gKi9cblxuZXhwb3J0cy5nZXRQYXRoSW5mbyA9IHBhdGh2YWwuZ2V0UGF0aEluZm87XG5cbi8qIVxuICogQ2hlY2sgaWYgYSBwcm9wZXJ0eSBleGlzdHNcbiAqL1xuXG5leHBvcnRzLmhhc1Byb3BlcnR5ID0gcGF0aHZhbC5oYXNQcm9wZXJ0eTtcblxuLyohXG4gKiBGdW5jdGlvbiBuYW1lXG4gKi9cblxuZXhwb3J0cy5nZXROYW1lID0gcmVxdWlyZSgnZ2V0LWZ1bmMtbmFtZScpO1xuXG4vKiFcbiAqIGFkZCBQcm9wZXJ0eVxuICovXG5cbmV4cG9ydHMuYWRkUHJvcGVydHkgPSByZXF1aXJlKCcuL2FkZFByb3BlcnR5Jyk7XG5cbi8qIVxuICogYWRkIE1ldGhvZFxuICovXG5cbmV4cG9ydHMuYWRkTWV0aG9kID0gcmVxdWlyZSgnLi9hZGRNZXRob2QnKTtcblxuLyohXG4gKiBvdmVyd3JpdGUgUHJvcGVydHlcbiAqL1xuXG5leHBvcnRzLm92ZXJ3cml0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9vdmVyd3JpdGVQcm9wZXJ0eScpO1xuXG4vKiFcbiAqIG92ZXJ3cml0ZSBNZXRob2RcbiAqL1xuXG5leHBvcnRzLm92ZXJ3cml0ZU1ldGhvZCA9IHJlcXVpcmUoJy4vb3ZlcndyaXRlTWV0aG9kJyk7XG5cbi8qIVxuICogQWRkIGEgY2hhaW5hYmxlIG1ldGhvZFxuICovXG5cbmV4cG9ydHMuYWRkQ2hhaW5hYmxlTWV0aG9kID0gcmVxdWlyZSgnLi9hZGRDaGFpbmFibGVNZXRob2QnKTtcblxuLyohXG4gKiBPdmVyd3JpdGUgY2hhaW5hYmxlIG1ldGhvZFxuICovXG5cbmV4cG9ydHMub3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kID0gcmVxdWlyZSgnLi9vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QnKTtcblxuLyohXG4gKiBDb21wYXJlIGJ5IGluc3BlY3QgbWV0aG9kXG4gKi9cblxuZXhwb3J0cy5jb21wYXJlQnlJbnNwZWN0ID0gcmVxdWlyZSgnLi9jb21wYXJlQnlJbnNwZWN0Jyk7XG5cbi8qIVxuICogR2V0IG93biBlbnVtZXJhYmxlIHByb3BlcnR5IHN5bWJvbHMgbWV0aG9kXG4gKi9cblxuZXhwb3J0cy5nZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzID0gcmVxdWlyZSgnLi9nZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzJyk7XG5cbi8qIVxuICogR2V0IG93biBlbnVtZXJhYmxlIHByb3BlcnRpZXMgbWV0aG9kXG4gKi9cblxuZXhwb3J0cy5nZXRPd25FbnVtZXJhYmxlUHJvcGVydGllcyA9IHJlcXVpcmUoJy4vZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXMnKTtcblxuLyohXG4gKiBDaGVja3MgZXJyb3IgYWdhaW5zdCBhIGdpdmVuIHNldCBvZiBjcml0ZXJpYVxuICovXG5cbmV4cG9ydHMuY2hlY2tFcnJvciA9IHJlcXVpcmUoJ2NoZWNrLWVycm9yJyk7XG5cbi8qIVxuICogUHJveGlmeSB1dGlsXG4gKi9cblxuZXhwb3J0cy5wcm94aWZ5ID0gcmVxdWlyZSgnLi9wcm94aWZ5Jyk7XG5cbi8qIVxuICogYWRkTGVuZ3RoR3VhcmQgdXRpbFxuICovXG5cbmV4cG9ydHMuYWRkTGVuZ3RoR3VhcmQgPSByZXF1aXJlKCcuL2FkZExlbmd0aEd1YXJkJyk7XG5cbi8qIVxuICogaXNQcm94eUVuYWJsZWQgaGVscGVyXG4gKi9cblxuZXhwb3J0cy5pc1Byb3h5RW5hYmxlZCA9IHJlcXVpcmUoJy4vaXNQcm94eUVuYWJsZWQnKTtcblxuLyohXG4gKiBpc05hTiBtZXRob2RcbiAqL1xuXG5leHBvcnRzLmlzTmFOID0gcmVxdWlyZSgnLi9pc05hTicpO1xuXG4vKiFcbiAqIGdldE9wZXJhdG9yIG1ldGhvZFxuICovXG5cbmV4cG9ydHMuZ2V0T3BlcmF0b3IgPSByZXF1aXJlKCcuL2dldE9wZXJhdG9yJyk7IiwgIi8qIVxuICogY2hhaVxuICogaHR0cDovL2NoYWlqcy5jb21cbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG52YXIgY29uZmlnID0gcmVxdWlyZSgnLi9jb25maWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoX2NoYWksIHV0aWwpIHtcbiAgLyohXG4gICAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gICAqL1xuXG4gIHZhciBBc3NlcnRpb25FcnJvciA9IF9jaGFpLkFzc2VydGlvbkVycm9yXG4gICAgLCBmbGFnID0gdXRpbC5mbGFnO1xuXG4gIC8qIVxuICAgKiBNb2R1bGUgZXhwb3J0LlxuICAgKi9cblxuICBfY2hhaS5Bc3NlcnRpb24gPSBBc3NlcnRpb247XG5cbiAgLyohXG4gICAqIEFzc2VydGlvbiBDb25zdHJ1Y3RvclxuICAgKlxuICAgKiBDcmVhdGVzIG9iamVjdCBmb3IgY2hhaW5pbmcuXG4gICAqXG4gICAqIGBBc3NlcnRpb25gIG9iamVjdHMgY29udGFpbiBtZXRhZGF0YSBpbiB0aGUgZm9ybSBvZiBmbGFncy4gVGhyZWUgZmxhZ3MgY2FuXG4gICAqIGJlIGFzc2lnbmVkIGR1cmluZyBpbnN0YW50aWF0aW9uIGJ5IHBhc3NpbmcgYXJndW1lbnRzIHRvIHRoaXMgY29uc3RydWN0b3I6XG4gICAqXG4gICAqIC0gYG9iamVjdGA6IFRoaXMgZmxhZyBjb250YWlucyB0aGUgdGFyZ2V0IG9mIHRoZSBhc3NlcnRpb24uIEZvciBleGFtcGxlLCBpblxuICAgKiAgIHRoZSBhc3NlcnRpb24gYGV4cGVjdChudW1LaXR0ZW5zKS50by5lcXVhbCg3KTtgLCB0aGUgYG9iamVjdGAgZmxhZyB3aWxsXG4gICAqICAgY29udGFpbiBgbnVtS2l0dGVuc2Agc28gdGhhdCB0aGUgYGVxdWFsYCBhc3NlcnRpb24gY2FuIHJlZmVyZW5jZSBpdCB3aGVuXG4gICAqICAgbmVlZGVkLlxuICAgKlxuICAgKiAtIGBtZXNzYWdlYDogVGhpcyBmbGFnIGNvbnRhaW5zIGFuIG9wdGlvbmFsIGN1c3RvbSBlcnJvciBtZXNzYWdlIHRvIGJlXG4gICAqICAgcHJlcGVuZGVkIHRvIHRoZSBlcnJvciBtZXNzYWdlIHRoYXQncyBnZW5lcmF0ZWQgYnkgdGhlIGFzc2VydGlvbiB3aGVuIGl0XG4gICAqICAgZmFpbHMuXG4gICAqXG4gICAqIC0gYHNzZmlgOiBUaGlzIGZsYWcgc3RhbmRzIGZvciBcInN0YXJ0IHN0YWNrIGZ1bmN0aW9uIGluZGljYXRvclwiLiBJdFxuICAgKiAgIGNvbnRhaW5zIGEgZnVuY3Rpb24gcmVmZXJlbmNlIHRoYXQgc2VydmVzIGFzIHRoZSBzdGFydGluZyBwb2ludCBmb3JcbiAgICogICByZW1vdmluZyBmcmFtZXMgZnJvbSB0aGUgc3RhY2sgdHJhY2Ugb2YgdGhlIGVycm9yIHRoYXQncyBjcmVhdGVkIGJ5IHRoZVxuICAgKiAgIGFzc2VydGlvbiB3aGVuIGl0IGZhaWxzLiBUaGUgZ29hbCBpcyB0byBwcm92aWRlIGEgY2xlYW5lciBzdGFjayB0cmFjZSB0b1xuICAgKiAgIGVuZCB1c2VycyBieSByZW1vdmluZyBDaGFpJ3MgaW50ZXJuYWwgZnVuY3Rpb25zLiBOb3RlIHRoYXQgaXQgb25seSB3b3Jrc1xuICAgKiAgIGluIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgYEVycm9yLmNhcHR1cmVTdGFja1RyYWNlYCwgYW5kIG9ubHkgd2hlblxuICAgKiAgIGBDaGFpLmNvbmZpZy5pbmNsdWRlU3RhY2tgIGhhc24ndCBiZWVuIHNldCB0byBgZmFsc2VgLlxuICAgKlxuICAgKiAtIGBsb2NrU3NmaWA6IFRoaXMgZmxhZyBjb250cm9scyB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gYHNzZmlgIGZsYWdcbiAgICogICBzaG91bGQgcmV0YWluIGl0cyBjdXJyZW50IHZhbHVlLCBldmVuIGFzIGFzc2VydGlvbnMgYXJlIGNoYWluZWQgb2ZmIG9mXG4gICAqICAgdGhpcyBvYmplY3QuIFRoaXMgaXMgdXN1YWxseSBzZXQgdG8gYHRydWVgIHdoZW4gY3JlYXRpbmcgYSBuZXcgYXNzZXJ0aW9uXG4gICAqICAgZnJvbSB3aXRoaW4gYW5vdGhlciBhc3NlcnRpb24uIEl0J3MgYWxzbyB0ZW1wb3JhcmlseSBzZXQgdG8gYHRydWVgIGJlZm9yZVxuICAgKiAgIGFuIG92ZXJ3cml0dGVuIGFzc2VydGlvbiBnZXRzIGNhbGxlZCBieSB0aGUgb3ZlcndyaXRpbmcgYXNzZXJ0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge01peGVkfSBvYmogdGFyZ2V0IG9mIHRoZSBhc3NlcnRpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IG1zZyAob3B0aW9uYWwpIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHNzZmkgKG9wdGlvbmFsKSBzdGFydGluZyBwb2ludCBmb3IgcmVtb3Zpbmcgc3RhY2sgZnJhbWVzXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gbG9ja1NzZmkgKG9wdGlvbmFsKSB3aGV0aGVyIG9yIG5vdCB0aGUgc3NmaSBmbGFnIGlzIGxvY2tlZFxuICAgKiBAYXBpIHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gQXNzZXJ0aW9uIChvYmosIG1zZywgc3NmaSwgbG9ja1NzZmkpIHtcbiAgICBmbGFnKHRoaXMsICdzc2ZpJywgc3NmaSB8fCBBc3NlcnRpb24pO1xuICAgIGZsYWcodGhpcywgJ2xvY2tTc2ZpJywgbG9ja1NzZmkpO1xuICAgIGZsYWcodGhpcywgJ29iamVjdCcsIG9iaik7XG4gICAgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG5cbiAgICByZXR1cm4gdXRpbC5wcm94aWZ5KHRoaXMpO1xuICB9XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFzc2VydGlvbiwgJ2luY2x1ZGVTdGFjaycsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgY29uc29sZS53YXJuKCdBc3NlcnRpb24uaW5jbHVkZVN0YWNrIGlzIGRlcHJlY2F0ZWQsIHVzZSBjaGFpLmNvbmZpZy5pbmNsdWRlU3RhY2sgaW5zdGVhZC4nKTtcbiAgICAgIHJldHVybiBjb25maWcuaW5jbHVkZVN0YWNrO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgY29uc29sZS53YXJuKCdBc3NlcnRpb24uaW5jbHVkZVN0YWNrIGlzIGRlcHJlY2F0ZWQsIHVzZSBjaGFpLmNvbmZpZy5pbmNsdWRlU3RhY2sgaW5zdGVhZC4nKTtcbiAgICAgIGNvbmZpZy5pbmNsdWRlU3RhY2sgPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBc3NlcnRpb24sICdzaG93RGlmZicsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgY29uc29sZS53YXJuKCdBc3NlcnRpb24uc2hvd0RpZmYgaXMgZGVwcmVjYXRlZCwgdXNlIGNoYWkuY29uZmlnLnNob3dEaWZmIGluc3RlYWQuJyk7XG4gICAgICByZXR1cm4gY29uZmlnLnNob3dEaWZmO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgY29uc29sZS53YXJuKCdBc3NlcnRpb24uc2hvd0RpZmYgaXMgZGVwcmVjYXRlZCwgdXNlIGNoYWkuY29uZmlnLnNob3dEaWZmIGluc3RlYWQuJyk7XG4gICAgICBjb25maWcuc2hvd0RpZmYgPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChuYW1lLCBmbikge1xuICAgIHV0aWwuYWRkUHJvcGVydHkodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuKTtcbiAgfTtcblxuICBBc3NlcnRpb24uYWRkTWV0aG9kID0gZnVuY3Rpb24gKG5hbWUsIGZuKSB7XG4gICAgdXRpbC5hZGRNZXRob2QodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuKTtcbiAgfTtcblxuICBBc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kID0gZnVuY3Rpb24gKG5hbWUsIGZuLCBjaGFpbmluZ0JlaGF2aW9yKSB7XG4gICAgdXRpbC5hZGRDaGFpbmFibGVNZXRob2QodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuLCBjaGFpbmluZ0JlaGF2aW9yKTtcbiAgfTtcblxuICBBc3NlcnRpb24ub3ZlcndyaXRlUHJvcGVydHkgPSBmdW5jdGlvbiAobmFtZSwgZm4pIHtcbiAgICB1dGlsLm92ZXJ3cml0ZVByb3BlcnR5KHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbik7XG4gIH07XG5cbiAgQXNzZXJ0aW9uLm92ZXJ3cml0ZU1ldGhvZCA9IGZ1bmN0aW9uIChuYW1lLCBmbikge1xuICAgIHV0aWwub3ZlcndyaXRlTWV0aG9kKHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbik7XG4gIH07XG5cbiAgQXNzZXJ0aW9uLm92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCA9IGZ1bmN0aW9uIChuYW1lLCBmbiwgY2hhaW5pbmdCZWhhdmlvcikge1xuICAgIHV0aWwub3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kKHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbiwgY2hhaW5pbmdCZWhhdmlvcik7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuYXNzZXJ0KGV4cHJlc3Npb24sIG1lc3NhZ2UsIG5lZ2F0ZU1lc3NhZ2UsIGV4cGVjdGVkLCBhY3R1YWwsIHNob3dEaWZmKVxuICAgKlxuICAgKiBFeGVjdXRlcyBhbiBleHByZXNzaW9uIGFuZCBjaGVjayBleHBlY3RhdGlvbnMuIFRocm93cyBBc3NlcnRpb25FcnJvciBmb3IgcmVwb3J0aW5nIGlmIHRlc3QgZG9lc24ndCBwYXNzLlxuICAgKlxuICAgKiBAbmFtZSBhc3NlcnRcbiAgICogQHBhcmFtIHtQaGlsb3NvcGhpY2FsfSBleHByZXNzaW9uIHRvIGJlIHRlc3RlZFxuICAgKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gbWVzc2FnZSBvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgbWVzc2FnZSB0byBkaXNwbGF5IGlmIGV4cHJlc3Npb24gZmFpbHNcbiAgICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IG5lZ2F0ZWRNZXNzYWdlIG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBuZWdhdGVkTWVzc2FnZSB0byBkaXNwbGF5IGlmIG5lZ2F0ZWQgZXhwcmVzc2lvbiBmYWlsc1xuICAgKiBAcGFyYW0ge01peGVkfSBleHBlY3RlZCB2YWx1ZSAocmVtZW1iZXIgdG8gY2hlY2sgZm9yIG5lZ2F0aW9uKVxuICAgKiBAcGFyYW0ge01peGVkfSBhY3R1YWwgKG9wdGlvbmFsKSB3aWxsIGRlZmF1bHQgdG8gYHRoaXMub2JqYFxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IHNob3dEaWZmIChvcHRpb25hbCkgd2hlbiBzZXQgdG8gYHRydWVgLCBhc3NlcnQgd2lsbCBkaXNwbGF5IGEgZGlmZiBpbiBhZGRpdGlvbiB0byB0aGUgbWVzc2FnZSBpZiBleHByZXNzaW9uIGZhaWxzXG4gICAqIEBhcGkgcHJpdmF0ZVxuICAgKi9cblxuICBBc3NlcnRpb24ucHJvdG90eXBlLmFzc2VydCA9IGZ1bmN0aW9uIChleHByLCBtc2csIG5lZ2F0ZU1zZywgZXhwZWN0ZWQsIF9hY3R1YWwsIHNob3dEaWZmKSB7XG4gICAgdmFyIG9rID0gdXRpbC50ZXN0KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGZhbHNlICE9PSBzaG93RGlmZikgc2hvd0RpZmYgPSB0cnVlO1xuICAgIGlmICh1bmRlZmluZWQgPT09IGV4cGVjdGVkICYmIHVuZGVmaW5lZCA9PT0gX2FjdHVhbCkgc2hvd0RpZmYgPSBmYWxzZTtcbiAgICBpZiAodHJ1ZSAhPT0gY29uZmlnLnNob3dEaWZmKSBzaG93RGlmZiA9IGZhbHNlO1xuXG4gICAgaWYgKCFvaykge1xuICAgICAgbXNnID0gdXRpbC5nZXRNZXNzYWdlKHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB2YXIgYWN0dWFsID0gdXRpbC5nZXRBY3R1YWwodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHZhciBhc3NlcnRpb25FcnJvck9iamVjdFByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgYWN0dWFsOiBhY3R1YWxcbiAgICAgICAgLCBleHBlY3RlZDogZXhwZWN0ZWRcbiAgICAgICAgLCBzaG93RGlmZjogc2hvd0RpZmZcbiAgICAgIH07XG5cbiAgICAgIHZhciBvcGVyYXRvciA9IHV0aWwuZ2V0T3BlcmF0b3IodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIGlmIChvcGVyYXRvcikge1xuICAgICAgICBhc3NlcnRpb25FcnJvck9iamVjdFByb3BlcnRpZXMub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICBtc2csXG4gICAgICAgIGFzc2VydGlvbkVycm9yT2JqZWN0UHJvcGVydGllcyxcbiAgICAgICAgKGNvbmZpZy5pbmNsdWRlU3RhY2spID8gdGhpcy5hc3NlcnQgOiBmbGFnKHRoaXMsICdzc2ZpJykpO1xuICAgIH1cbiAgfTtcblxuICAvKiFcbiAgICogIyMjIC5fb2JqXG4gICAqXG4gICAqIFF1aWNrIHJlZmVyZW5jZSB0byBzdG9yZWQgYGFjdHVhbGAgdmFsdWUgZm9yIHBsdWdpbiBkZXZlbG9wZXJzLlxuICAgKlxuICAgKiBAYXBpIHByaXZhdGVcbiAgICovXG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFzc2VydGlvbi5wcm90b3R5cGUsICdfb2JqJyxcbiAgICB7IGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG4gICAgICB9XG4gICAgLCBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgZmxhZyh0aGlzLCAnb2JqZWN0JywgdmFsKTtcbiAgICAgIH1cbiAgfSk7XG59O1xuIiwgIi8qIVxuICogY2hhaVxuICogaHR0cDovL2NoYWlqcy5jb21cbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjaGFpLCBfKSB7XG4gIHZhciBBc3NlcnRpb24gPSBjaGFpLkFzc2VydGlvblxuICAgICwgQXNzZXJ0aW9uRXJyb3IgPSBjaGFpLkFzc2VydGlvbkVycm9yXG4gICAgLCBmbGFnID0gXy5mbGFnO1xuXG4gIC8qKlxuICAgKiAjIyMgTGFuZ3VhZ2UgQ2hhaW5zXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgYXJlIHByb3ZpZGVkIGFzIGNoYWluYWJsZSBnZXR0ZXJzIHRvIGltcHJvdmUgdGhlIHJlYWRhYmlsaXR5XG4gICAqIG9mIHlvdXIgYXNzZXJ0aW9ucy5cbiAgICpcbiAgICogKipDaGFpbnMqKlxuICAgKlxuICAgKiAtIHRvXG4gICAqIC0gYmVcbiAgICogLSBiZWVuXG4gICAqIC0gaXNcbiAgICogLSB0aGF0XG4gICAqIC0gd2hpY2hcbiAgICogLSBhbmRcbiAgICogLSBoYXNcbiAgICogLSBoYXZlXG4gICAqIC0gd2l0aFxuICAgKiAtIGF0XG4gICAqIC0gb2ZcbiAgICogLSBzYW1lXG4gICAqIC0gYnV0XG4gICAqIC0gZG9lc1xuICAgKiAtIHN0aWxsXG4gICAqIC0gYWxzb1xuICAgKlxuICAgKiBAbmFtZSBsYW5ndWFnZSBjaGFpbnNcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgWyAndG8nLCAnYmUnLCAnYmVlbicsICdpcydcbiAgLCAnYW5kJywgJ2hhcycsICdoYXZlJywgJ3dpdGgnXG4gICwgJ3RoYXQnLCAnd2hpY2gnLCAnYXQnLCAnb2YnXG4gICwgJ3NhbWUnLCAnYnV0JywgJ2RvZXMnLCAnc3RpbGwnLCBcImFsc29cIiBdLmZvckVhY2goZnVuY3Rpb24gKGNoYWluKSB7XG4gICAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KGNoYWluKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAubm90XG4gICAqXG4gICAqIE5lZ2F0ZXMgYWxsIGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KGZ1bmN0aW9uICgpIHt9KS50by5ub3QudGhyb3coKTtcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLm5vdC5oYXZlLnByb3BlcnR5KCdiJyk7XG4gICAqICAgICBleHBlY3QoWzEsIDJdKS50by5iZS5hbignYXJyYXknKS50aGF0LmRvZXMubm90LmluY2x1ZGUoMyk7XG4gICAqXG4gICAqIEp1c3QgYmVjYXVzZSB5b3UgY2FuIG5lZ2F0ZSBhbnkgYXNzZXJ0aW9uIHdpdGggYC5ub3RgIGRvZXNuJ3QgbWVhbiB5b3VcbiAgICogc2hvdWxkLiBXaXRoIGdyZWF0IHBvd2VyIGNvbWVzIGdyZWF0IHJlc3BvbnNpYmlsaXR5LiBJdCdzIG9mdGVuIGJlc3QgdG9cbiAgICogYXNzZXJ0IHRoYXQgdGhlIG9uZSBleHBlY3RlZCBvdXRwdXQgd2FzIHByb2R1Y2VkLCByYXRoZXIgdGhhbiBhc3NlcnRpbmdcbiAgICogdGhhdCBvbmUgb2YgY291bnRsZXNzIHVuZXhwZWN0ZWQgb3V0cHV0cyB3YXNuJ3QgcHJvZHVjZWQuIFNlZSBpbmRpdmlkdWFsXG4gICAqIGFzc2VydGlvbnMgZm9yIHNwZWNpZmljIGd1aWRhbmNlLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDIpLnRvLmVxdWFsKDIpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDIpLnRvLm5vdC5lcXVhbCgxKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEBuYW1lIG5vdFxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ25vdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBmbGFnKHRoaXMsICduZWdhdGUnLCB0cnVlKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuZGVlcFxuICAgKlxuICAgKiBDYXVzZXMgYWxsIGAuZXF1YWxgLCBgLmluY2x1ZGVgLCBgLm1lbWJlcnNgLCBgLmtleXNgLCBhbmQgYC5wcm9wZXJ0eWBcbiAgICogYXNzZXJ0aW9ucyB0aGF0IGZvbGxvdyBpbiB0aGUgY2hhaW4gdG8gdXNlIGRlZXAgZXF1YWxpdHkgaW5zdGVhZCBvZiBzdHJpY3RcbiAgICogKGA9PT1gKSBlcXVhbGl0eS4gU2VlIHRoZSBgZGVlcC1lcWxgIHByb2plY3QgcGFnZSBmb3IgaW5mbyBvbiB0aGUgZGVlcFxuICAgKiBlcXVhbGl0eSBhbGdvcml0aG06IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFpanMvZGVlcC1lcWwuXG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgb2JqZWN0IGRlZXBseSAoYnV0IG5vdCBzdHJpY3RseSkgZXF1YWxzIGB7YTogMX1gXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5kZWVwLmVxdWFsKHthOiAxfSk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5ub3QuZXF1YWwoe2E6IDF9KTtcbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBhcnJheSBkZWVwbHkgKGJ1dCBub3Qgc3RyaWN0bHkpIGluY2x1ZGVzIGB7YTogMX1gXG4gICAqICAgICBleHBlY3QoW3thOiAxfV0pLnRvLmRlZXAuaW5jbHVkZSh7YTogMX0pO1xuICAgKiAgICAgZXhwZWN0KFt7YTogMX1dKS50by5ub3QuaW5jbHVkZSh7YTogMX0pO1xuICAgKlxuICAgKiAgICAgLy8gVGFyZ2V0IG9iamVjdCBkZWVwbHkgKGJ1dCBub3Qgc3RyaWN0bHkpIGluY2x1ZGVzIGB4OiB7YTogMX1gXG4gICAqICAgICBleHBlY3Qoe3g6IHthOiAxfX0pLnRvLmRlZXAuaW5jbHVkZSh7eDoge2E6IDF9fSk7XG4gICAqICAgICBleHBlY3Qoe3g6IHthOiAxfX0pLnRvLm5vdC5pbmNsdWRlKHt4OiB7YTogMX19KTtcbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBhcnJheSBkZWVwbHkgKGJ1dCBub3Qgc3RyaWN0bHkpIGhhcyBtZW1iZXIgYHthOiAxfWBcbiAgICogICAgIGV4cGVjdChbe2E6IDF9XSkudG8uaGF2ZS5kZWVwLm1lbWJlcnMoW3thOiAxfV0pO1xuICAgKiAgICAgZXhwZWN0KFt7YTogMX1dKS50by5ub3QuaGF2ZS5tZW1iZXJzKFt7YTogMX1dKTtcbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBzZXQgZGVlcGx5IChidXQgbm90IHN0cmljdGx5KSBoYXMga2V5IGB7YTogMX1gXG4gICAqICAgICBleHBlY3QobmV3IFNldChbe2E6IDF9XSkpLnRvLmhhdmUuZGVlcC5rZXlzKFt7YTogMX1dKTtcbiAgICogICAgIGV4cGVjdChuZXcgU2V0KFt7YTogMX1dKSkudG8ubm90LmhhdmUua2V5cyhbe2E6IDF9XSk7XG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgb2JqZWN0IGRlZXBseSAoYnV0IG5vdCBzdHJpY3RseSkgaGFzIHByb3BlcnR5IGB4OiB7YTogMX1gXG4gICAqICAgICBleHBlY3Qoe3g6IHthOiAxfX0pLnRvLmhhdmUuZGVlcC5wcm9wZXJ0eSgneCcsIHthOiAxfSk7XG4gICAqICAgICBleHBlY3Qoe3g6IHthOiAxfX0pLnRvLm5vdC5oYXZlLnByb3BlcnR5KCd4Jywge2E6IDF9KTtcbiAgICpcbiAgICogQG5hbWUgZGVlcFxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ2RlZXAnLCBmdW5jdGlvbiAoKSB7XG4gICAgZmxhZyh0aGlzLCAnZGVlcCcsIHRydWUpO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5uZXN0ZWRcbiAgICpcbiAgICogRW5hYmxlcyBkb3QtIGFuZCBicmFja2V0LW5vdGF0aW9uIGluIGFsbCBgLnByb3BlcnR5YCBhbmQgYC5pbmNsdWRlYFxuICAgKiBhc3NlcnRpb25zIHRoYXQgZm9sbG93IGluIHRoZSBjaGFpbi5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YToge2I6IFsneCcsICd5J119fSkudG8uaGF2ZS5uZXN0ZWQucHJvcGVydHkoJ2EuYlsxXScpO1xuICAgKiAgICAgZXhwZWN0KHthOiB7YjogWyd4JywgJ3knXX19KS50by5uZXN0ZWQuaW5jbHVkZSh7J2EuYlsxXSc6ICd5J30pO1xuICAgKlxuICAgKiBJZiBgLmAgb3IgYFtdYCBhcmUgcGFydCBvZiBhbiBhY3R1YWwgcHJvcGVydHkgbmFtZSwgdGhleSBjYW4gYmUgZXNjYXBlZCBieVxuICAgKiBhZGRpbmcgdHdvIGJhY2tzbGFzaGVzIGJlZm9yZSB0aGVtLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHsnLmEnOiB7J1tiXSc6ICd4J319KS50by5oYXZlLm5lc3RlZC5wcm9wZXJ0eSgnXFxcXC5hLlxcXFxbYlxcXFxdJyk7XG4gICAqICAgICBleHBlY3QoeycuYSc6IHsnW2JdJzogJ3gnfX0pLnRvLm5lc3RlZC5pbmNsdWRlKHsnXFxcXC5hLlxcXFxbYlxcXFxdJzogJ3gnfSk7XG4gICAqXG4gICAqIGAubmVzdGVkYCBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgLm93bmAuXG4gICAqXG4gICAqIEBuYW1lIG5lc3RlZFxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ25lc3RlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBmbGFnKHRoaXMsICduZXN0ZWQnLCB0cnVlKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAub3duXG4gICAqXG4gICAqIENhdXNlcyBhbGwgYC5wcm9wZXJ0eWAgYW5kIGAuaW5jbHVkZWAgYXNzZXJ0aW9ucyB0aGF0IGZvbGxvdyBpbiB0aGUgY2hhaW5cbiAgICogdG8gaWdub3JlIGluaGVyaXRlZCBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiAgICAgT2JqZWN0LnByb3RvdHlwZS5iID0gMjtcbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmhhdmUub3duLnByb3BlcnR5KCdhJyk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLnByb3BlcnR5KCdiJyk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5ub3QuaGF2ZS5vd24ucHJvcGVydHkoJ2InKTtcbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLm93bi5pbmNsdWRlKHthOiAxfSk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5pbmNsdWRlKHtiOiAyfSkuYnV0Lm5vdC5vd24uaW5jbHVkZSh7YjogMn0pO1xuICAgKlxuICAgKiBgLm93bmAgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYC5uZXN0ZWRgLlxuICAgKlxuICAgKiBAbmFtZSBvd25cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdvd24nLCBmdW5jdGlvbiAoKSB7XG4gICAgZmxhZyh0aGlzLCAnb3duJywgdHJ1ZSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLm9yZGVyZWRcbiAgICpcbiAgICogQ2F1c2VzIGFsbCBgLm1lbWJlcnNgIGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluIHRvIHJlcXVpcmUgdGhhdFxuICAgKiBtZW1iZXJzIGJlIGluIHRoZSBzYW1lIG9yZGVyLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KFsxLCAyXSkudG8uaGF2ZS5vcmRlcmVkLm1lbWJlcnMoWzEsIDJdKVxuICAgKiAgICAgICAuYnV0Lm5vdC5oYXZlLm9yZGVyZWQubWVtYmVycyhbMiwgMV0pO1xuICAgKlxuICAgKiBXaGVuIGAuaW5jbHVkZWAgYW5kIGAub3JkZXJlZGAgYXJlIGNvbWJpbmVkLCB0aGUgb3JkZXJpbmcgYmVnaW5zIGF0IHRoZVxuICAgKiBzdGFydCBvZiBib3RoIGFycmF5cy5cbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmluY2x1ZGUub3JkZXJlZC5tZW1iZXJzKFsxLCAyXSlcbiAgICogICAgICAgLmJ1dC5ub3QuaW5jbHVkZS5vcmRlcmVkLm1lbWJlcnMoWzIsIDNdKTtcbiAgICpcbiAgICogQG5hbWUgb3JkZXJlZFxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ29yZGVyZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgZmxhZyh0aGlzLCAnb3JkZXJlZCcsIHRydWUpO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5hbnlcbiAgICpcbiAgICogQ2F1c2VzIGFsbCBgLmtleXNgIGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluIHRvIG9ubHkgcmVxdWlyZSB0aGF0XG4gICAqIHRoZSB0YXJnZXQgaGF2ZSBhdCBsZWFzdCBvbmUgb2YgdGhlIGdpdmVuIGtleXMuIFRoaXMgaXMgdGhlIG9wcG9zaXRlIG9mXG4gICAqIGAuYWxsYCwgd2hpY2ggcmVxdWlyZXMgdGhhdCB0aGUgdGFyZ2V0IGhhdmUgYWxsIG9mIHRoZSBnaXZlbiBrZXlzLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxLCBiOiAyfSkudG8ubm90LmhhdmUuYW55LmtleXMoJ2MnLCAnZCcpO1xuICAgKlxuICAgKiBTZWUgdGhlIGAua2V5c2AgZG9jIGZvciBndWlkYW5jZSBvbiB3aGVuIHRvIHVzZSBgLmFueWAgb3IgYC5hbGxgLlxuICAgKlxuICAgKiBAbmFtZSBhbnlcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdhbnknLCBmdW5jdGlvbiAoKSB7XG4gICAgZmxhZyh0aGlzLCAnYW55JywgdHJ1ZSk7XG4gICAgZmxhZyh0aGlzLCAnYWxsJywgZmFsc2UpO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5hbGxcbiAgICpcbiAgICogQ2F1c2VzIGFsbCBgLmtleXNgIGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluIHRvIHJlcXVpcmUgdGhhdCB0aGVcbiAgICogdGFyZ2V0IGhhdmUgYWxsIG9mIHRoZSBnaXZlbiBrZXlzLiBUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZiBgLmFueWAsIHdoaWNoXG4gICAqIG9ubHkgcmVxdWlyZXMgdGhhdCB0aGUgdGFyZ2V0IGhhdmUgYXQgbGVhc3Qgb25lIG9mIHRoZSBnaXZlbiBrZXlzLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxLCBiOiAyfSkudG8uaGF2ZS5hbGwua2V5cygnYScsICdiJyk7XG4gICAqXG4gICAqIE5vdGUgdGhhdCBgLmFsbGAgaXMgdXNlZCBieSBkZWZhdWx0IHdoZW4gbmVpdGhlciBgLmFsbGAgbm9yIGAuYW55YCBhcmVcbiAgICogYWRkZWQgZWFybGllciBpbiB0aGUgY2hhaW4uIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhZGQgYC5hbGxgIGFueXdheVxuICAgKiBiZWNhdXNlIGl0IGltcHJvdmVzIHJlYWRhYmlsaXR5LlxuICAgKlxuICAgKiBTZWUgdGhlIGAua2V5c2AgZG9jIGZvciBndWlkYW5jZSBvbiB3aGVuIHRvIHVzZSBgLmFueWAgb3IgYC5hbGxgLlxuICAgKlxuICAgKiBAbmFtZSBhbGxcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdhbGwnLCBmdW5jdGlvbiAoKSB7XG4gICAgZmxhZyh0aGlzLCAnYWxsJywgdHJ1ZSk7XG4gICAgZmxhZyh0aGlzLCAnYW55JywgZmFsc2UpO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5hKHR5cGVbLCBtc2ddKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCdzIHR5cGUgaXMgZXF1YWwgdG8gdGhlIGdpdmVuIHN0cmluZyBgdHlwZWAuIFR5cGVzXG4gICAqIGFyZSBjYXNlIGluc2Vuc2l0aXZlLiBTZWUgdGhlIGB0eXBlLWRldGVjdGAgcHJvamVjdCBwYWdlIGZvciBpbmZvIG9uIHRoZVxuICAgKiB0eXBlIGRldGVjdGlvbiBhbGdvcml0aG06IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFpanMvdHlwZS1kZXRlY3QuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmJlLmEoJ3N0cmluZycpO1xuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uYmUuYW4oJ29iamVjdCcpO1xuICAgKiAgICAgZXhwZWN0KG51bGwpLnRvLmJlLmEoJ251bGwnKTtcbiAgICogICAgIGV4cGVjdCh1bmRlZmluZWQpLnRvLmJlLmFuKCd1bmRlZmluZWQnKTtcbiAgICogICAgIGV4cGVjdChuZXcgRXJyb3IpLnRvLmJlLmFuKCdlcnJvcicpO1xuICAgKiAgICAgZXhwZWN0KFByb21pc2UucmVzb2x2ZSgpKS50by5iZS5hKCdwcm9taXNlJyk7XG4gICAqICAgICBleHBlY3QobmV3IEZsb2F0MzJBcnJheSkudG8uYmUuYSgnZmxvYXQzMmFycmF5Jyk7XG4gICAqICAgICBleHBlY3QoU3ltYm9sKCkpLnRvLmJlLmEoJ3N5bWJvbCcpO1xuICAgKlxuICAgKiBgLmFgIHN1cHBvcnRzIG9iamVjdHMgdGhhdCBoYXZlIGEgY3VzdG9tIHR5cGUgc2V0IHZpYSBgU3ltYm9sLnRvU3RyaW5nVGFnYC5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHtcbiAgICogICAgICAgW1N5bWJvbC50b1N0cmluZ1RhZ106ICdteUN1c3RvbVR5cGUnXG4gICAqICAgICB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KG15T2JqKS50by5iZS5hKCdteUN1c3RvbVR5cGUnKS5idXQubm90LmFuKCdvYmplY3QnKTtcbiAgICpcbiAgICogSXQncyBvZnRlbiBiZXN0IHRvIHVzZSBgLmFgIHRvIGNoZWNrIGEgdGFyZ2V0J3MgdHlwZSBiZWZvcmUgbWFraW5nIG1vcmVcbiAgICogYXNzZXJ0aW9ucyBvbiB0aGUgc2FtZSB0YXJnZXQuIFRoYXQgd2F5LCB5b3UgYXZvaWQgdW5leHBlY3RlZCBiZWhhdmlvciBmcm9tXG4gICAqIGFueSBhc3NlcnRpb24gdGhhdCBkb2VzIGRpZmZlcmVudCB0aGluZ3MgYmFzZWQgb24gdGhlIHRhcmdldCdzIHR5cGUuXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5iZS5hbignYXJyYXknKS50aGF0LmluY2x1ZGVzKDIpO1xuICAgKiAgICAgZXhwZWN0KFtdKS50by5iZS5hbignYXJyYXknKS50aGF0LmlzLmVtcHR5O1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmFgLiBIb3dldmVyLCBpdCdzIG9mdGVuIGJlc3QgdG9cbiAgICogYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBpcyB0aGUgZXhwZWN0ZWQgdHlwZSwgcmF0aGVyIHRoYW4gYXNzZXJ0aW5nIHRoYXQgaXRcbiAgICogaXNuJ3Qgb25lIG9mIG1hbnkgdW5leHBlY3RlZCB0eXBlcy5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8uYmUuYSgnc3RyaW5nJyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLm5vdC5iZS5hbignYXJyYXknKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIGAuYWAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvciBtZXNzYWdlIHRvXG4gICAqIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kXG4gICAqIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmJlLmEoJ3N0cmluZycsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdCgxLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUuYSgnc3RyaW5nJyk7XG4gICAqXG4gICAqIGAuYWAgY2FuIGFsc28gYmUgdXNlZCBhcyBhIGxhbmd1YWdlIGNoYWluIHRvIGltcHJvdmUgdGhlIHJlYWRhYmlsaXR5IG9mXG4gICAqIHlvdXIgYXNzZXJ0aW9ucy5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YjogMn0pLnRvLmhhdmUuYS5wcm9wZXJ0eSgnYicpO1xuICAgKlxuICAgKiBUaGUgYWxpYXMgYC5hbmAgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5hYC5cbiAgICpcbiAgICogQG5hbWUgYVxuICAgKiBAYWxpYXMgYW5cbiAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1zZyBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFuICh0eXBlLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBhcnRpY2xlID0gflsgJ2EnLCAnZScsICdpJywgJ28nLCAndScgXS5pbmRleE9mKHR5cGUuY2hhckF0KDApKSA/ICdhbiAnIDogJ2EgJztcblxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICB0eXBlID09PSBfLnR5cGUob2JqKS50b0xvd2VyQ2FzZSgpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlICcgKyBhcnRpY2xlICsgdHlwZVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gYmUgJyArIGFydGljbGUgKyB0eXBlXG4gICAgKTtcbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoJ2FuJywgYW4pO1xuICBBc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKCdhJywgYW4pO1xuXG4gIC8qKlxuICAgKiAjIyMgLmluY2x1ZGUodmFsWywgbXNnXSlcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGEgc3RyaW5nLCBgLmluY2x1ZGVgIGFzc2VydHMgdGhhdCB0aGUgZ2l2ZW4gc3RyaW5nIGB2YWxgXG4gICAqIGlzIGEgc3Vic3RyaW5nIG9mIHRoZSB0YXJnZXQuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2Zvb2JhcicpLnRvLmluY2x1ZGUoJ2ZvbycpO1xuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgaXMgYW4gYXJyYXksIGAuaW5jbHVkZWAgYXNzZXJ0cyB0aGF0IHRoZSBnaXZlbiBgdmFsYCBpcyBhXG4gICAqIG1lbWJlciBvZiB0aGUgdGFyZ2V0LlxuICAgKlxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaW5jbHVkZSgyKTtcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGFuIG9iamVjdCwgYC5pbmNsdWRlYCBhc3NlcnRzIHRoYXQgdGhlIGdpdmVuIG9iamVjdFxuICAgKiBgdmFsYCdzIHByb3BlcnRpZXMgYXJlIGEgc3Vic2V0IG9mIHRoZSB0YXJnZXQncyBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxLCBiOiAyLCBjOiAzfSkudG8uaW5jbHVkZSh7YTogMSwgYjogMn0pO1xuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgaXMgYSBTZXQgb3IgV2Vha1NldCwgYC5pbmNsdWRlYCBhc3NlcnRzIHRoYXQgdGhlIGdpdmVuIGB2YWxgIGlzIGFcbiAgICogbWVtYmVyIG9mIHRoZSB0YXJnZXQuIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtIGlzIHVzZWQuXG4gICAqXG4gICAqICAgICBleHBlY3QobmV3IFNldChbMSwgMl0pKS50by5pbmNsdWRlKDIpO1xuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgaXMgYSBNYXAsIGAuaW5jbHVkZWAgYXNzZXJ0cyB0aGF0IHRoZSBnaXZlbiBgdmFsYCBpcyBvbmUgb2ZcbiAgICogdGhlIHZhbHVlcyBvZiB0aGUgdGFyZ2V0LiBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobSBpcyB1c2VkLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KG5ldyBNYXAoW1snYScsIDFdLCBbJ2InLCAyXV0pKS50by5pbmNsdWRlKDIpO1xuICAgKlxuICAgKiBCZWNhdXNlIGAuaW5jbHVkZWAgZG9lcyBkaWZmZXJlbnQgdGhpbmdzIGJhc2VkIG9uIHRoZSB0YXJnZXQncyB0eXBlLCBpdCdzXG4gICAqIGltcG9ydGFudCB0byBjaGVjayB0aGUgdGFyZ2V0J3MgdHlwZSBiZWZvcmUgdXNpbmcgYC5pbmNsdWRlYC4gU2VlIHRoZSBgLmFgXG4gICAqIGRvYyBmb3IgaW5mbyBvbiB0ZXN0aW5nIGEgdGFyZ2V0J3MgdHlwZS5cbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmJlLmFuKCdhcnJheScpLnRoYXQuaW5jbHVkZXMoMik7XG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHN0cmljdCAoYD09PWApIGVxdWFsaXR5IGlzIHVzZWQgdG8gY29tcGFyZSBhcnJheSBtZW1iZXJzIGFuZFxuICAgKiBvYmplY3QgcHJvcGVydGllcy4gQWRkIGAuZGVlcGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gdXNlIGRlZXAgZXF1YWxpdHlcbiAgICogaW5zdGVhZCAoV2Vha1NldCB0YXJnZXRzIGFyZSBub3Qgc3VwcG9ydGVkKS4gU2VlIHRoZSBgZGVlcC1lcWxgIHByb2plY3RcbiAgICogcGFnZSBmb3IgaW5mbyBvbiB0aGUgZGVlcCBlcXVhbGl0eSBhbGdvcml0aG06IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFpanMvZGVlcC1lcWwuXG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgYXJyYXkgZGVlcGx5IChidXQgbm90IHN0cmljdGx5KSBpbmNsdWRlcyBge2E6IDF9YFxuICAgKiAgICAgZXhwZWN0KFt7YTogMX1dKS50by5kZWVwLmluY2x1ZGUoe2E6IDF9KTtcbiAgICogICAgIGV4cGVjdChbe2E6IDF9XSkudG8ubm90LmluY2x1ZGUoe2E6IDF9KTtcbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBvYmplY3QgZGVlcGx5IChidXQgbm90IHN0cmljdGx5KSBpbmNsdWRlcyBgeDoge2E6IDF9YFxuICAgKiAgICAgZXhwZWN0KHt4OiB7YTogMX19KS50by5kZWVwLmluY2x1ZGUoe3g6IHthOiAxfX0pO1xuICAgKiAgICAgZXhwZWN0KHt4OiB7YTogMX19KS50by5ub3QuaW5jbHVkZSh7eDoge2E6IDF9fSk7XG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGFsbCBvZiB0aGUgdGFyZ2V0J3MgcHJvcGVydGllcyBhcmUgc2VhcmNoZWQgd2hlbiB3b3JraW5nIHdpdGhcbiAgICogb2JqZWN0cy4gVGhpcyBpbmNsdWRlcyBwcm9wZXJ0aWVzIHRoYXQgYXJlIGluaGVyaXRlZCBhbmQvb3Igbm9uLWVudW1lcmFibGUuXG4gICAqIEFkZCBgLm93bmAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gZXhjbHVkZSB0aGUgdGFyZ2V0J3MgaW5oZXJpdGVkXG4gICAqIHByb3BlcnRpZXMgZnJvbSB0aGUgc2VhcmNoLlxuICAgKlxuICAgKiAgICAgT2JqZWN0LnByb3RvdHlwZS5iID0gMjtcbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLm93bi5pbmNsdWRlKHthOiAxfSk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5pbmNsdWRlKHtiOiAyfSkuYnV0Lm5vdC5vd24uaW5jbHVkZSh7YjogMn0pO1xuICAgKlxuICAgKiBOb3RlIHRoYXQgYSB0YXJnZXQgb2JqZWN0IGlzIGFsd2F5cyBvbmx5IHNlYXJjaGVkIGZvciBgdmFsYCdzIG93blxuICAgKiBlbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIGAuZGVlcGAgYW5kIGAub3duYCBjYW4gYmUgY29tYmluZWQuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IHtiOiAyfX0pLnRvLmRlZXAub3duLmluY2x1ZGUoe2E6IHtiOiAyfX0pO1xuICAgKlxuICAgKiBBZGQgYC5uZXN0ZWRgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIGVuYWJsZSBkb3QtIGFuZCBicmFja2V0LW5vdGF0aW9uIHdoZW5cbiAgICogcmVmZXJlbmNpbmcgbmVzdGVkIHByb3BlcnRpZXMuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IHtiOiBbJ3gnLCAneSddfX0pLnRvLm5lc3RlZC5pbmNsdWRlKHsnYS5iWzFdJzogJ3knfSk7XG4gICAqXG4gICAqIElmIGAuYCBvciBgW11gIGFyZSBwYXJ0IG9mIGFuIGFjdHVhbCBwcm9wZXJ0eSBuYW1lLCB0aGV5IGNhbiBiZSBlc2NhcGVkIGJ5XG4gICAqIGFkZGluZyB0d28gYmFja3NsYXNoZXMgYmVmb3JlIHRoZW0uXG4gICAqXG4gICAqICAgICBleHBlY3QoeycuYSc6IHsnW2JdJzogMn19KS50by5uZXN0ZWQuaW5jbHVkZSh7J1xcXFwuYS5cXFxcW2JcXFxcXSc6IDJ9KTtcbiAgICpcbiAgICogYC5kZWVwYCBhbmQgYC5uZXN0ZWRgIGNhbiBiZSBjb21iaW5lZC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YToge2I6IFt7YzogM31dfX0pLnRvLmRlZXAubmVzdGVkLmluY2x1ZGUoeydhLmJbMF0nOiB7YzogM319KTtcbiAgICpcbiAgICogYC5vd25gIGFuZCBgLm5lc3RlZGAgY2Fubm90IGJlIGNvbWJpbmVkLlxuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmluY2x1ZGVgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb29iYXInKS50by5ub3QuaW5jbHVkZSgndGFjbycpO1xuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8ubm90LmluY2x1ZGUoNCk7XG4gICAqXG4gICAqIEhvd2V2ZXIsIGl0J3MgZGFuZ2Vyb3VzIHRvIG5lZ2F0ZSBgLmluY2x1ZGVgIHdoZW4gdGhlIHRhcmdldCBpcyBhbiBvYmplY3QuXG4gICAqIFRoZSBwcm9ibGVtIGlzIHRoYXQgaXQgY3JlYXRlcyB1bmNlcnRhaW4gZXhwZWN0YXRpb25zIGJ5IGFzc2VydGluZyB0aGF0IHRoZVxuICAgKiB0YXJnZXQgb2JqZWN0IGRvZXNuJ3QgaGF2ZSBhbGwgb2YgYHZhbGAncyBrZXkvdmFsdWUgcGFpcnMgYnV0IG1heSBvciBtYXlcbiAgICogbm90IGhhdmUgc29tZSBvZiB0aGVtLiBJdCdzIG9mdGVuIGJlc3QgdG8gaWRlbnRpZnkgdGhlIGV4YWN0IG91dHB1dCB0aGF0J3NcbiAgICogZXhwZWN0ZWQsIGFuZCB0aGVuIHdyaXRlIGFuIGFzc2VydGlvbiB0aGF0IG9ubHkgYWNjZXB0cyB0aGF0IGV4YWN0IG91dHB1dC5cbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IG9iamVjdCBpc24ndCBldmVuIGV4cGVjdGVkIHRvIGhhdmUgYHZhbGAncyBrZXlzLCBpdCdzXG4gICAqIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IGV4YWN0bHkgdGhhdC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YzogM30pLnRvLm5vdC5oYXZlLmFueS5rZXlzKCdhJywgJ2InKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YzogM30pLnRvLm5vdC5pbmNsdWRlKHthOiAxLCBiOiAyfSk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgb2JqZWN0IGlzIGV4cGVjdGVkIHRvIGhhdmUgYHZhbGAncyBrZXlzLCBpdCdzIG9mdGVuIGJlc3QgdG9cbiAgICogYXNzZXJ0IHRoYXQgZWFjaCBvZiB0aGUgcHJvcGVydGllcyBoYXMgaXRzIGV4cGVjdGVkIHZhbHVlLCByYXRoZXIgdGhhblxuICAgKiBhc3NlcnRpbmcgdGhhdCBlYWNoIHByb3BlcnR5IGRvZXNuJ3QgaGF2ZSBvbmUgb2YgbWFueSB1bmV4cGVjdGVkIHZhbHVlcy5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMywgYjogNH0pLnRvLmluY2x1ZGUoe2E6IDMsIGI6IDR9KTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YTogMywgYjogNH0pLnRvLm5vdC5pbmNsdWRlKHthOiAxLCBiOiAyfSk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBgLmluY2x1ZGVgIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3JcbiAgICogbWVzc2FnZSB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXNcbiAgICogdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmluY2x1ZGUoNCwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmluY2x1ZGUoNCk7XG4gICAqXG4gICAqIGAuaW5jbHVkZWAgY2FuIGFsc28gYmUgdXNlZCBhcyBhIGxhbmd1YWdlIGNoYWluLCBjYXVzaW5nIGFsbCBgLm1lbWJlcnNgIGFuZFxuICAgKiBgLmtleXNgIGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluIHRvIHJlcXVpcmUgdGhlIHRhcmdldCB0byBiZSBhXG4gICAqIHN1cGVyc2V0IG9mIHRoZSBleHBlY3RlZCBzZXQsIHJhdGhlciB0aGFuIGFuIGlkZW50aWNhbCBzZXQuIE5vdGUgdGhhdFxuICAgKiBgLm1lbWJlcnNgIGlnbm9yZXMgZHVwbGljYXRlcyBpbiB0aGUgc3Vic2V0IHdoZW4gYC5pbmNsdWRlYCBpcyBhZGRlZC5cbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBvYmplY3QncyBrZXlzIGFyZSBhIHN1cGVyc2V0IG9mIFsnYScsICdiJ10gYnV0IG5vdCBpZGVudGljYWxcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMiwgYzogM30pLnRvLmluY2x1ZGUuYWxsLmtleXMoJ2EnLCAnYicpO1xuICAgKiAgICAgZXhwZWN0KHthOiAxLCBiOiAyLCBjOiAzfSkudG8ubm90LmhhdmUuYWxsLmtleXMoJ2EnLCAnYicpO1xuICAgKlxuICAgKiAgICAgLy8gVGFyZ2V0IGFycmF5IGlzIGEgc3VwZXJzZXQgb2YgWzEsIDJdIGJ1dCBub3QgaWRlbnRpY2FsXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5pbmNsdWRlLm1lbWJlcnMoWzEsIDJdKTtcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLm5vdC5oYXZlLm1lbWJlcnMoWzEsIDJdKTtcbiAgICpcbiAgICogICAgIC8vIER1cGxpY2F0ZXMgaW4gdGhlIHN1YnNldCBhcmUgaWdub3JlZFxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaW5jbHVkZS5tZW1iZXJzKFsxLCAyLCAyLCAyXSk7XG4gICAqXG4gICAqIE5vdGUgdGhhdCBhZGRpbmcgYC5hbnlgIGVhcmxpZXIgaW4gdGhlIGNoYWluIGNhdXNlcyB0aGUgYC5rZXlzYCBhc3NlcnRpb25cbiAgICogdG8gaWdub3JlIGAuaW5jbHVkZWAuXG4gICAqXG4gICAqICAgICAvLyBCb3RoIGFzc2VydGlvbnMgYXJlIGlkZW50aWNhbFxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaW5jbHVkZS5hbnkua2V5cygnYScsICdiJyk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLmFueS5rZXlzKCdhJywgJ2InKTtcbiAgICpcbiAgICogVGhlIGFsaWFzZXMgYC5pbmNsdWRlc2AsIGAuY29udGFpbmAsIGFuZCBgLmNvbnRhaW5zYCBjYW4gYmUgdXNlZFxuICAgKiBpbnRlcmNoYW5nZWFibHkgd2l0aCBgLmluY2x1ZGVgLlxuICAgKlxuICAgKiBAbmFtZSBpbmNsdWRlXG4gICAqIEBhbGlhcyBjb250YWluXG4gICAqIEBhbGlhcyBpbmNsdWRlc1xuICAgKiBAYWxpYXMgY29udGFpbnNcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBTYW1lVmFsdWVaZXJvKGEsIGIpIHtcbiAgICByZXR1cm4gKF8uaXNOYU4oYSkgJiYgXy5pc05hTihiKSkgfHwgYSA9PT0gYjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yICgpIHtcbiAgICBmbGFnKHRoaXMsICdjb250YWlucycsIHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5jbHVkZSAodmFsLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcblxuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBvYmpUeXBlID0gXy50eXBlKG9iaikudG9Mb3dlckNhc2UoKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIG5lZ2F0ZSA9IGZsYWcodGhpcywgJ25lZ2F0ZScpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJylcbiAgICAgICwgaXNEZWVwID0gZmxhZyh0aGlzLCAnZGVlcCcpXG4gICAgICAsIGRlc2NyaXB0b3IgPSBpc0RlZXAgPyAnZGVlcCAnIDogJyc7XG5cbiAgICBmbGFnTXNnID0gZmxhZ01zZyA/IGZsYWdNc2cgKyAnOiAnIDogJyc7XG5cbiAgICB2YXIgaW5jbHVkZWQgPSBmYWxzZTtcblxuICAgIHN3aXRjaCAob2JqVHlwZSkge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgaW5jbHVkZWQgPSBvYmouaW5kZXhPZih2YWwpICE9PSAtMTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3dlYWtzZXQnOlxuICAgICAgICBpZiAoaXNEZWVwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICAgICAgZmxhZ01zZyArICd1bmFibGUgdG8gdXNlIC5kZWVwLmluY2x1ZGUgd2l0aCBXZWFrU2V0JyxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHNzZmlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5jbHVkZWQgPSBvYmouaGFzKHZhbCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdtYXAnOlxuICAgICAgICB2YXIgaXNFcWwgPSBpc0RlZXAgPyBfLmVxbCA6IFNhbWVWYWx1ZVplcm87XG4gICAgICAgIG9iai5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgaW5jbHVkZWQgPSBpbmNsdWRlZCB8fCBpc0VxbChpdGVtLCB2YWwpO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3NldCc6XG4gICAgICAgIGlmIChpc0RlZXApIHtcbiAgICAgICAgICBvYmouZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgaW5jbHVkZWQgPSBpbmNsdWRlZCB8fCBfLmVxbChpdGVtLCB2YWwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGluY2x1ZGVkID0gb2JqLmhhcyh2YWwpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICAgIGlmIChpc0RlZXApIHtcbiAgICAgICAgICBpbmNsdWRlZCA9IG9iai5zb21lKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gXy5lcWwoaXRlbSwgdmFsKTtcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGluY2x1ZGVkID0gb2JqLmluZGV4T2YodmFsKSAhPT0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIFRoaXMgYmxvY2sgaXMgZm9yIGFzc2VydGluZyBhIHN1YnNldCBvZiBwcm9wZXJ0aWVzIGluIGFuIG9iamVjdC5cbiAgICAgICAgLy8gYF8uZXhwZWN0VHlwZXNgIGlzbid0IHVzZWQgaGVyZSBiZWNhdXNlIGAuaW5jbHVkZWAgc2hvdWxkIHdvcmsgd2l0aFxuICAgICAgICAvLyBvYmplY3RzIHdpdGggYSBjdXN0b20gYEBAdG9TdHJpbmdUYWdgLlxuICAgICAgICBpZiAodmFsICE9PSBPYmplY3QodmFsKSkge1xuICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgICAgIGZsYWdNc2cgKyAndGhlIGdpdmVuIGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyAoJ1xuICAgICAgICAgICAgKyBvYmpUeXBlICsgJyBhbmQgJ1xuICAgICAgICAgICAgKyBfLnR5cGUodmFsKS50b0xvd2VyQ2FzZSgpICsgJyknXG4gICAgICAgICAgICArICcgaXMgaW52YWxpZCBmb3IgdGhpcyBhc3NlcnRpb24uICdcbiAgICAgICAgICAgICsgJ1lvdSBjYW4gdXNlIGFuIGFycmF5LCBhIG1hcCwgYW4gb2JqZWN0LCBhIHNldCwgYSBzdHJpbmcsICdcbiAgICAgICAgICAgICsgJ29yIGEgd2Vha3NldCBpbnN0ZWFkIG9mIGEgJ1xuICAgICAgICAgICAgKyBfLnR5cGUodmFsKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgc3NmaVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcHJvcHMgPSBPYmplY3Qua2V5cyh2YWwpXG4gICAgICAgICAgLCBmaXJzdEVyciA9IG51bGxcbiAgICAgICAgICAsIG51bUVycnMgPSAwO1xuXG4gICAgICAgIHByb3BzLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICB2YXIgcHJvcEFzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24ob2JqKTtcbiAgICAgICAgICBfLnRyYW5zZmVyRmxhZ3ModGhpcywgcHJvcEFzc2VydGlvbiwgdHJ1ZSk7XG4gICAgICAgICAgZmxhZyhwcm9wQXNzZXJ0aW9uLCAnbG9ja1NzZmknLCB0cnVlKTtcblxuICAgICAgICAgIGlmICghbmVnYXRlIHx8IHByb3BzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcHJvcEFzc2VydGlvbi5wcm9wZXJ0eShwcm9wLCB2YWxbcHJvcF0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwcm9wQXNzZXJ0aW9uLnByb3BlcnR5KHByb3AsIHZhbFtwcm9wXSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoIV8uY2hlY2tFcnJvci5jb21wYXRpYmxlQ29uc3RydWN0b3IoZXJyLCBBc3NlcnRpb25FcnJvcikpIHtcbiAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpcnN0RXJyID09PSBudWxsKSBmaXJzdEVyciA9IGVycjtcbiAgICAgICAgICAgIG51bUVycnMrKztcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgIC8vIFdoZW4gdmFsaWRhdGluZyAubm90LmluY2x1ZGUgd2l0aCBtdWx0aXBsZSBwcm9wZXJ0aWVzLCB3ZSBvbmx5IHdhbnRcbiAgICAgICAgLy8gdG8gdGhyb3cgYW4gYXNzZXJ0aW9uIGVycm9yIGlmIGFsbCBvZiB0aGUgcHJvcGVydGllcyBhcmUgaW5jbHVkZWQsXG4gICAgICAgIC8vIGluIHdoaWNoIGNhc2Ugd2UgdGhyb3cgdGhlIGZpcnN0IHByb3BlcnR5IGFzc2VydGlvbiBlcnJvciB0aGF0IHdlXG4gICAgICAgIC8vIGVuY291bnRlcmVkLlxuICAgICAgICBpZiAobmVnYXRlICYmIHByb3BzLmxlbmd0aCA+IDEgJiYgbnVtRXJycyA9PT0gcHJvcHMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgZmlyc3RFcnI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEFzc2VydCBpbmNsdXNpb24gaW4gY29sbGVjdGlvbiBvciBzdWJzdHJpbmcgaW4gYSBzdHJpbmcuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpbmNsdWRlZFxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byAnICsgZGVzY3JpcHRvciArICdpbmNsdWRlICcgKyBfLmluc3BlY3QodmFsKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgJyArIGRlc2NyaXB0b3IgKyAnaW5jbHVkZSAnICsgXy5pbnNwZWN0KHZhbCkpO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZCgnaW5jbHVkZScsIGluY2x1ZGUsIGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yKTtcbiAgQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZCgnY29udGFpbicsIGluY2x1ZGUsIGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yKTtcbiAgQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZCgnY29udGFpbnMnLCBpbmNsdWRlLCBpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvcik7XG4gIEFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoJ2luY2x1ZGVzJywgaW5jbHVkZSwgaW5jbHVkZUNoYWluaW5nQmVoYXZpb3IpO1xuXG4gIC8qKlxuICAgKiAjIyMgLm9rXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGEgdHJ1dGh5IHZhbHVlIChjb25zaWRlcmVkIGB0cnVlYCBpbiBib29sZWFuIGNvbnRleHQpLlxuICAgKiBIb3dldmVyLCBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBpcyBzdHJpY3RseSAoYD09PWApIG9yXG4gICAqIGRlZXBseSBlcXVhbCB0byBpdHMgZXhwZWN0ZWQgdmFsdWUuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uZXF1YWwoMSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMSkudG8uYmUub2s7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiAgICAgZXhwZWN0KHRydWUpLnRvLmJlLnRydWU7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QodHJ1ZSkudG8uYmUub2s7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLm9rYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgwKS50by5lcXVhbCgwKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgwKS50by5ub3QuYmUub2s7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiAgICAgZXhwZWN0KGZhbHNlKS50by5iZS5mYWxzZTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChmYWxzZSkudG8ubm90LmJlLm9rOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogICAgIGV4cGVjdChudWxsKS50by5iZS5udWxsOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KG51bGwpLnRvLm5vdC5iZS5vazsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3QodW5kZWZpbmVkKS50by5iZS51bmRlZmluZWQ7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QodW5kZWZpbmVkKS50by5ub3QuYmUub2s7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBIGN1c3RvbSBlcnJvciBtZXNzYWdlIGNhbiBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KGZhbHNlLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUub2s7XG4gICAqXG4gICAqIEBuYW1lIG9rXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnb2snLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIHRydXRoeSdcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgZmFsc3knKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAudHJ1ZVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBzdHJpY3RseSAoYD09PWApIGVxdWFsIHRvIGB0cnVlYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh0cnVlKS50by5iZS50cnVlO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLnRydWVgLiBIb3dldmVyLCBpdCdzIG9mdGVuIGJlc3RcbiAgICogdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBpcyBlcXVhbCB0byBpdHMgZXhwZWN0ZWQgdmFsdWUsIHJhdGhlciB0aGFuIG5vdFxuICAgKiBlcXVhbCB0byBgdHJ1ZWAuXG4gICAqXG4gICAqICAgICBleHBlY3QoZmFsc2UpLnRvLmJlLmZhbHNlOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KGZhbHNlKS50by5ub3QuYmUudHJ1ZTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uZXF1YWwoMSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMSkudG8ubm90LmJlLnRydWU7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBIGN1c3RvbSBlcnJvciBtZXNzYWdlIGNhbiBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KGZhbHNlLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUudHJ1ZTtcbiAgICpcbiAgICogQG5hbWUgdHJ1ZVxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ3RydWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIHRydWUgPT09IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIHRydWUnXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIGZhbHNlJ1xuICAgICAgLCBmbGFnKHRoaXMsICduZWdhdGUnKSA/IGZhbHNlIDogdHJ1ZVxuICAgICk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLmZhbHNlXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIHN0cmljdGx5IChgPT09YCkgZXF1YWwgdG8gYGZhbHNlYC5cbiAgICpcbiAgICogICAgIGV4cGVjdChmYWxzZSkudG8uYmUuZmFsc2U7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuZmFsc2VgLiBIb3dldmVyLCBpdCdzIG9mdGVuXG4gICAqIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBpcyBlcXVhbCB0byBpdHMgZXhwZWN0ZWQgdmFsdWUsIHJhdGhlciB0aGFuXG4gICAqIG5vdCBlcXVhbCB0byBgZmFsc2VgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHRydWUpLnRvLmJlLnRydWU7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QodHJ1ZSkudG8ubm90LmJlLmZhbHNlOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5lcXVhbCgxKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxKS50by5ub3QuYmUuZmFsc2U7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBIGN1c3RvbSBlcnJvciBtZXNzYWdlIGNhbiBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHRydWUsICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5mYWxzZTtcbiAgICpcbiAgICogQG5hbWUgZmFsc2VcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdmYWxzZScsIGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgZmFsc2UgPT09IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIGZhbHNlJ1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSB0cnVlJ1xuICAgICAgLCBmbGFnKHRoaXMsICduZWdhdGUnKSA/IHRydWUgOiBmYWxzZVxuICAgICk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLm51bGxcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgc3RyaWN0bHkgKGA9PT1gKSBlcXVhbCB0byBgbnVsbGAuXG4gICAqXG4gICAqICAgICBleHBlY3QobnVsbCkudG8uYmUubnVsbDtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5udWxsYC4gSG93ZXZlciwgaXQncyBvZnRlbiBiZXN0XG4gICAqIHRvIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQgaXMgZXF1YWwgdG8gaXRzIGV4cGVjdGVkIHZhbHVlLCByYXRoZXIgdGhhbiBub3RcbiAgICogZXF1YWwgdG8gYG51bGxgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmVxdWFsKDEpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDEpLnRvLm5vdC5iZS5udWxsOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQSBjdXN0b20gZXJyb3IgbWVzc2FnZSBjYW4gYmUgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCg0MiwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLm51bGw7XG4gICAqXG4gICAqIEBuYW1lIG51bGxcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdudWxsJywgZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICBudWxsID09PSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBudWxsJ1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gYmUgbnVsbCdcbiAgICApO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC51bmRlZmluZWRcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgc3RyaWN0bHkgKGA9PT1gKSBlcXVhbCB0byBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh1bmRlZmluZWQpLnRvLmJlLnVuZGVmaW5lZDtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC51bmRlZmluZWRgLiBIb3dldmVyLCBpdCdzIG9mdGVuXG4gICAqIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBpcyBlcXVhbCB0byBpdHMgZXhwZWN0ZWQgdmFsdWUsIHJhdGhlciB0aGFuXG4gICAqIG5vdCBlcXVhbCB0byBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5lcXVhbCgxKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxKS50by5ub3QuYmUudW5kZWZpbmVkOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQSBjdXN0b20gZXJyb3IgbWVzc2FnZSBjYW4gYmUgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCg0MiwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLnVuZGVmaW5lZDtcbiAgICpcbiAgICogQG5hbWUgdW5kZWZpbmVkXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgndW5kZWZpbmVkJywgZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICB1bmRlZmluZWQgPT09IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIHVuZGVmaW5lZCdcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIHVuZGVmaW5lZCdcbiAgICApO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5OYU5cbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgZXhhY3RseSBgTmFOYC5cbiAgICpcbiAgICogICAgIGV4cGVjdChOYU4pLnRvLmJlLk5hTjtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5OYU5gLiBIb3dldmVyLCBpdCdzIG9mdGVuIGJlc3RcbiAgICogdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBpcyBlcXVhbCB0byBpdHMgZXhwZWN0ZWQgdmFsdWUsIHJhdGhlciB0aGFuIG5vdFxuICAgKiBlcXVhbCB0byBgTmFOYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8uZXF1YWwoJ2ZvbycpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5ub3QuYmUuTmFOOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQSBjdXN0b20gZXJyb3IgbWVzc2FnZSBjYW4gYmUgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCg0MiwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLk5hTjtcbiAgICpcbiAgICogQG5hbWUgTmFOXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnTmFOJywgZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICBfLmlzTmFOKGZsYWcodGhpcywgJ29iamVjdCcpKVxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIE5hTidcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gYmUgTmFOJ1xuICAgICk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLmV4aXN0XG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIG5vdCBzdHJpY3RseSAoYD09PWApIGVxdWFsIHRvIGVpdGhlciBgbnVsbGAgb3JcbiAgICogYHVuZGVmaW5lZGAuIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIHRvXG4gICAqIGl0cyBleHBlY3RlZCB2YWx1ZS5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5lcXVhbCgxKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxKS50by5leGlzdDsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3QoMCkudG8uZXF1YWwoMCk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMCkudG8uZXhpc3Q7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmV4aXN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdChudWxsKS50by5iZS5udWxsOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KG51bGwpLnRvLm5vdC5leGlzdDsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3QodW5kZWZpbmVkKS50by5iZS51bmRlZmluZWQ7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QodW5kZWZpbmVkKS50by5ub3QuZXhpc3Q7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBIGN1c3RvbSBlcnJvciBtZXNzYWdlIGNhbiBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KG51bGwsICdub29vIHdoeSBmYWlsPz8nKS50by5leGlzdDtcbiAgICpcbiAgICogVGhlIGFsaWFzIGAuZXhpc3RzYCBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgd2l0aCBgLmV4aXN0YC5cbiAgICpcbiAgICogQG5hbWUgZXhpc3RcbiAgICogQGFsaWFzIGV4aXN0c1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnRFeGlzdCAoKSB7XG4gICAgdmFyIHZhbCA9IGZsYWcodGhpcywgJ29iamVjdCcpO1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICB2YWwgIT09IG51bGwgJiYgdmFsICE9PSB1bmRlZmluZWRcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gZXhpc3QnXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBleGlzdCdcbiAgICApO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdleGlzdCcsIGFzc2VydEV4aXN0KTtcbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdleGlzdHMnLCBhc3NlcnRFeGlzdCk7XG5cbiAgLyoqXG4gICAqICMjIyAuZW1wdHlcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGEgc3RyaW5nIG9yIGFycmF5LCBgLmVtcHR5YCBhc3NlcnRzIHRoYXQgdGhlIHRhcmdldCdzXG4gICAqIGBsZW5ndGhgIHByb3BlcnR5IGlzIHN0cmljdGx5IChgPT09YCkgZXF1YWwgdG8gYDBgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KFtdKS50by5iZS5lbXB0eTtcbiAgICogICAgIGV4cGVjdCgnJykudG8uYmUuZW1wdHk7XG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpcyBhIG1hcCBvciBzZXQsIGAuZW1wdHlgIGFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0J3MgYHNpemVgXG4gICAqIHByb3BlcnR5IGlzIHN0cmljdGx5IGVxdWFsIHRvIGAwYC5cbiAgICpcbiAgICogICAgIGV4cGVjdChuZXcgU2V0KCkpLnRvLmJlLmVtcHR5O1xuICAgKiAgICAgZXhwZWN0KG5ldyBNYXAoKSkudG8uYmUuZW1wdHk7XG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpcyBhIG5vbi1mdW5jdGlvbiBvYmplY3QsIGAuZW1wdHlgIGFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0XG4gICAqIGRvZXNuJ3QgaGF2ZSBhbnkgb3duIGVudW1lcmFibGUgcHJvcGVydGllcy4gUHJvcGVydGllcyB3aXRoIFN5bWJvbC1iYXNlZFxuICAgKiBrZXlzIGFyZSBleGNsdWRlZCBmcm9tIHRoZSBjb3VudC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7fSkudG8uYmUuZW1wdHk7XG4gICAqXG4gICAqIEJlY2F1c2UgYC5lbXB0eWAgZG9lcyBkaWZmZXJlbnQgdGhpbmdzIGJhc2VkIG9uIHRoZSB0YXJnZXQncyB0eXBlLCBpdCdzXG4gICAqIGltcG9ydGFudCB0byBjaGVjayB0aGUgdGFyZ2V0J3MgdHlwZSBiZWZvcmUgdXNpbmcgYC5lbXB0eWAuIFNlZSB0aGUgYC5hYFxuICAgKiBkb2MgZm9yIGluZm8gb24gdGVzdGluZyBhIHRhcmdldCdzIHR5cGUuXG4gICAqXG4gICAqICAgICBleHBlY3QoW10pLnRvLmJlLmFuKCdhcnJheScpLnRoYXQuaXMuZW1wdHk7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuZW1wdHlgLiBIb3dldmVyLCBpdCdzIG9mdGVuXG4gICAqIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBjb250YWlucyBpdHMgZXhwZWN0ZWQgbnVtYmVyIG9mIHZhbHVlcyxcbiAgICogcmF0aGVyIHRoYW4gYXNzZXJ0aW5nIHRoYXQgaXQncyBub3QgZW1wdHkuXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mKDMpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8ubm90LmJlLmVtcHR5OyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogICAgIGV4cGVjdChuZXcgU2V0KFsxLCAyLCAzXSkpLnRvLmhhdmUucHJvcGVydHkoJ3NpemUnLCAzKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChuZXcgU2V0KFsxLCAyLCAzXSkpLnRvLm5vdC5iZS5lbXB0eTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3QoT2JqZWN0LmtleXMoe2E6IDF9KSkudG8uaGF2ZS5sZW5ndGhPZigxKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLm5vdC5iZS5lbXB0eTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgY2FuIGJlIGdpdmVuIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUuZW1wdHk7XG4gICAqXG4gICAqIEBuYW1lIGVtcHR5XG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnZW1wdHknLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbCA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJylcbiAgICAgICwgZmxhZ01zZyA9IGZsYWcodGhpcywgJ21lc3NhZ2UnKVxuICAgICAgLCBpdGVtc0NvdW50O1xuXG4gICAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgJzogJyA6ICcnO1xuXG4gICAgc3dpdGNoIChfLnR5cGUodmFsKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICBpdGVtc0NvdW50ID0gdmFsLmxlbmd0aDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtYXAnOlxuICAgICAgY2FzZSAnc2V0JzpcbiAgICAgICAgaXRlbXNDb3VudCA9IHZhbC5zaXplO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3dlYWttYXAnOlxuICAgICAgY2FzZSAnd2Vha3NldCc6XG4gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgICBmbGFnTXNnICsgJy5lbXB0eSB3YXMgcGFzc2VkIGEgd2VhayBjb2xsZWN0aW9uJyxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgc3NmaVxuICAgICAgICApO1xuICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICB2YXIgbXNnID0gZmxhZ01zZyArICcuZW1wdHkgd2FzIHBhc3NlZCBhIGZ1bmN0aW9uICcgKyBfLmdldE5hbWUodmFsKTtcbiAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1zZy50cmltKCksIHVuZGVmaW5lZCwgc3NmaSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAodmFsICE9PSBPYmplY3QodmFsKSkge1xuICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgICAgIGZsYWdNc2cgKyAnLmVtcHR5IHdhcyBwYXNzZWQgbm9uLXN0cmluZyBwcmltaXRpdmUgJyArIF8uaW5zcGVjdCh2YWwpLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgc3NmaVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbXNDb3VudCA9IE9iamVjdC5rZXlzKHZhbCkubGVuZ3RoO1xuICAgIH1cblxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAwID09PSBpdGVtc0NvdW50XG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIGVtcHR5J1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gYmUgZW1wdHknXG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuYXJndW1lbnRzXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAgICpcbiAgICogICAgIGZ1bmN0aW9uIHRlc3QgKCkge1xuICAgKiAgICAgICBleHBlY3QoYXJndW1lbnRzKS50by5iZS5hcmd1bWVudHM7XG4gICAqICAgICB9XG4gICAqXG4gICAqICAgICB0ZXN0KCk7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuYXJndW1lbnRzYC4gSG93ZXZlciwgaXQncyBvZnRlblxuICAgKiBiZXN0IHRvIGFzc2VydCB3aGljaCB0eXBlIHRoZSB0YXJnZXQgaXMgZXhwZWN0ZWQgdG8gYmUsIHJhdGhlciB0aGFuXG4gICAqIGFzc2VydGluZyB0aGF0IGl0XHUyMDE5cyBub3QgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5iZS5hKCdzdHJpbmcnKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8ubm90LmJlLmFyZ3VtZW50czsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgY2FuIGJlIGdpdmVuIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe30sICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5hcmd1bWVudHM7XG4gICAqXG4gICAqIFRoZSBhbGlhcyBgLkFyZ3VtZW50c2AgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5hcmd1bWVudHNgLlxuICAgKlxuICAgKiBAbmFtZSBhcmd1bWVudHNcbiAgICogQGFsaWFzIEFyZ3VtZW50c1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBjaGVja0FyZ3VtZW50cyAoKSB7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIHR5cGUgPSBfLnR5cGUob2JqKTtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgJ0FyZ3VtZW50cycgPT09IHR5cGVcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgYXJndW1lbnRzIGJ1dCBnb3QgJyArIHR5cGVcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIGFyZ3VtZW50cydcbiAgICApO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdhcmd1bWVudHMnLCBjaGVja0FyZ3VtZW50cyk7XG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnQXJndW1lbnRzJywgY2hlY2tBcmd1bWVudHMpO1xuXG4gIC8qKlxuICAgKiAjIyMgLmVxdWFsKHZhbFssIG1zZ10pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIHN0cmljdGx5IChgPT09YCkgZXF1YWwgdG8gdGhlIGdpdmVuIGB2YWxgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmVxdWFsKDEpO1xuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5lcXVhbCgnZm9vJyk7XG4gICAqXG4gICAqIEFkZCBgLmRlZXBgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIHVzZSBkZWVwIGVxdWFsaXR5IGluc3RlYWQuIFNlZSB0aGVcbiAgICogYGRlZXAtZXFsYCBwcm9qZWN0IHBhZ2UgZm9yIGluZm8gb24gdGhlIGRlZXAgZXF1YWxpdHkgYWxnb3JpdGhtOlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vY2hhaWpzL2RlZXAtZXFsLlxuICAgKlxuICAgKiAgICAgLy8gVGFyZ2V0IG9iamVjdCBkZWVwbHkgKGJ1dCBub3Qgc3RyaWN0bHkpIGVxdWFscyBge2E6IDF9YFxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uZGVlcC5lcXVhbCh7YTogMX0pO1xuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8ubm90LmVxdWFsKHthOiAxfSk7XG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgYXJyYXkgZGVlcGx5IChidXQgbm90IHN0cmljdGx5KSBlcXVhbHMgYFsxLCAyXWBcbiAgICogICAgIGV4cGVjdChbMSwgMl0pLnRvLmRlZXAuZXF1YWwoWzEsIDJdKTtcbiAgICogICAgIGV4cGVjdChbMSwgMl0pLnRvLm5vdC5lcXVhbChbMSwgMl0pO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmVxdWFsYC4gSG93ZXZlciwgaXQncyBvZnRlblxuICAgKiBiZXN0IHRvIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQgaXMgZXF1YWwgdG8gaXRzIGV4cGVjdGVkIHZhbHVlLCByYXRoZXIgdGhhblxuICAgKiBub3QgZXF1YWwgdG8gb25lIG9mIGNvdW50bGVzcyB1bmV4cGVjdGVkIHZhbHVlcy5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5lcXVhbCgxKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxKS50by5ub3QuZXF1YWwoMik7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBgLmVxdWFsYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2VcbiAgICogdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzIHRoZVxuICAgKiBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uZXF1YWwoMiwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KDEsICdub29vIHdoeSBmYWlsPz8nKS50by5lcXVhbCgyKTtcbiAgICpcbiAgICogVGhlIGFsaWFzZXMgYC5lcXVhbHNgIGFuZCBgZXFgIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoIGAuZXF1YWxgLlxuICAgKlxuICAgKiBAbmFtZSBlcXVhbFxuICAgKiBAYWxpYXMgZXF1YWxzXG4gICAqIEBhbGlhcyBlcVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWxcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1zZyBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFzc2VydEVxdWFsICh2YWwsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKTtcbiAgICBpZiAoZmxhZyh0aGlzLCAnZGVlcCcpKSB7XG4gICAgICB2YXIgcHJldkxvY2tTc2ZpID0gZmxhZyh0aGlzLCAnbG9ja1NzZmknKTtcbiAgICAgIGZsYWcodGhpcywgJ2xvY2tTc2ZpJywgdHJ1ZSk7XG4gICAgICB0aGlzLmVxbCh2YWwpO1xuICAgICAgZmxhZyh0aGlzLCAnbG9ja1NzZmknLCBwcmV2TG9ja1NzZmkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICB2YWwgPT09IG9ialxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGVxdWFsICN7ZXhwfSdcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgZXF1YWwgI3tleHB9J1xuICAgICAgICAsIHZhbFxuICAgICAgICAsIHRoaXMuX29ialxuICAgICAgICAsIHRydWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZXF1YWwnLCBhc3NlcnRFcXVhbCk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2VxdWFscycsIGFzc2VydEVxdWFsKTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZXEnLCBhc3NlcnRFcXVhbCk7XG5cbiAgLyoqXG4gICAqICMjIyAuZXFsKG9ialssIG1zZ10pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGRlZXBseSBlcXVhbCB0byB0aGUgZ2l2ZW4gYG9iamAuIFNlZSB0aGVcbiAgICogYGRlZXAtZXFsYCBwcm9qZWN0IHBhZ2UgZm9yIGluZm8gb24gdGhlIGRlZXAgZXF1YWxpdHkgYWxnb3JpdGhtOlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vY2hhaWpzL2RlZXAtZXFsLlxuICAgKlxuICAgKiAgICAgLy8gVGFyZ2V0IG9iamVjdCBpcyBkZWVwbHkgKGJ1dCBub3Qgc3RyaWN0bHkpIGVxdWFsIHRvIHthOiAxfVxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uZXFsKHthOiAxfSkuYnV0Lm5vdC5lcXVhbCh7YTogMX0pO1xuICAgKlxuICAgKiAgICAgLy8gVGFyZ2V0IGFycmF5IGlzIGRlZXBseSAoYnV0IG5vdCBzdHJpY3RseSkgZXF1YWwgdG8gWzEsIDJdXG4gICAqICAgICBleHBlY3QoWzEsIDJdKS50by5lcWwoWzEsIDJdKS5idXQubm90LmVxdWFsKFsxLCAyXSk7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuZXFsYC4gSG93ZXZlciwgaXQncyBvZnRlbiBiZXN0XG4gICAqIHRvIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQgaXMgZGVlcGx5IGVxdWFsIHRvIGl0cyBleHBlY3RlZCB2YWx1ZSwgcmF0aGVyXG4gICAqIHRoYW4gbm90IGRlZXBseSBlcXVhbCB0byBvbmUgb2YgY291bnRsZXNzIHVuZXhwZWN0ZWQgdmFsdWVzLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uZXFsKHthOiAxfSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5ub3QuZXFsKHtiOiAyfSk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBgLmVxbGAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gICAqIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhcyB0aGVcbiAgICogc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uZXFsKHtiOiAyfSwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KHthOiAxfSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmVxbCh7YjogMn0pO1xuICAgKlxuICAgKiBUaGUgYWxpYXMgYC5lcWxzYCBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgd2l0aCBgLmVxbGAuXG4gICAqXG4gICAqIFRoZSBgLmRlZXAuZXF1YWxgIGFzc2VydGlvbiBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIGAuZXFsYCBidXQgd2l0aCBvbmVcbiAgICogZGlmZmVyZW5jZTogYC5kZWVwLmVxdWFsYCBjYXVzZXMgZGVlcCBlcXVhbGl0eSBjb21wYXJpc29ucyB0byBhbHNvIGJlIHVzZWRcbiAgICogZm9yIGFueSBvdGhlciBhc3NlcnRpb25zIHRoYXQgZm9sbG93IGluIHRoZSBjaGFpbi5cbiAgICpcbiAgICogQG5hbWUgZXFsXG4gICAqIEBhbGlhcyBlcWxzXG4gICAqIEBwYXJhbSB7TWl4ZWR9IG9ialxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0RXFsKG9iaiwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIF8uZXFsKG9iaiwgZmxhZyh0aGlzLCAnb2JqZWN0JykpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGRlZXBseSBlcXVhbCAje2V4cH0nXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBkZWVwbHkgZXF1YWwgI3tleHB9J1xuICAgICAgLCBvYmpcbiAgICAgICwgdGhpcy5fb2JqXG4gICAgICAsIHRydWVcbiAgICApO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZXFsJywgYXNzZXJ0RXFsKTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZXFscycsIGFzc2VydEVxbCk7XG5cbiAgLyoqXG4gICAqICMjIyAuYWJvdmUoblssIG1zZ10pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGEgbnVtYmVyIG9yIGEgZGF0ZSBncmVhdGVyIHRoYW4gdGhlIGdpdmVuIG51bWJlciBvciBkYXRlIGBuYCByZXNwZWN0aXZlbHkuXG4gICAqIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIHRvIGl0cyBleHBlY3RlZFxuICAgKiB2YWx1ZS5cbiAgICpcbiAgICogICAgIGV4cGVjdCgyKS50by5lcXVhbCgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgyKS50by5iZS5hYm92ZSgxKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEFkZCBgLmxlbmd0aE9mYCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0J3MgYGxlbmd0aGBcbiAgICogb3IgYHNpemVgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgZ2l2ZW4gbnVtYmVyIGBuYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8uaGF2ZS5sZW5ndGhPZigzKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8uaGF2ZS5sZW5ndGhPZi5hYm92ZSgyKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mKDMpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGhPZi5hYm92ZSgyKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuYWJvdmVgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDIpLnRvLmVxdWFsKDIpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDEpLnRvLm5vdC5iZS5hYm92ZSgyKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIGAuYWJvdmVgIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3IgbWVzc2FnZVxuICAgKiB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXMgdGhlXG4gICAqIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5iZS5hYm92ZSgyLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3QoMSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLmFib3ZlKDIpO1xuICAgKlxuICAgKiBUaGUgYWxpYXNlcyBgLmd0YCBhbmQgYC5ncmVhdGVyVGhhbmAgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGhcbiAgICogYC5hYm92ZWAuXG4gICAqXG4gICAqIEBuYW1lIGFib3ZlXG4gICAqIEBhbGlhcyBndFxuICAgKiBAYWxpYXMgZ3JlYXRlclRoYW5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IG5cbiAgICogQHBhcmFtIHtTdHJpbmd9IG1zZyBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFzc2VydEFib3ZlIChuLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgZG9MZW5ndGggPSBmbGFnKHRoaXMsICdkb0xlbmd0aCcpXG4gICAgICAsIGZsYWdNc2cgPSBmbGFnKHRoaXMsICdtZXNzYWdlJylcbiAgICAgICwgbXNnUHJlZml4ID0gKChmbGFnTXNnKSA/IGZsYWdNc2cgKyAnOiAnIDogJycpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJylcbiAgICAgICwgb2JqVHlwZSA9IF8udHlwZShvYmopLnRvTG93ZXJDYXNlKClcbiAgICAgICwgblR5cGUgPSBfLnR5cGUobikudG9Mb3dlckNhc2UoKVxuICAgICAgLCBlcnJvck1lc3NhZ2VcbiAgICAgICwgc2hvdWxkVGhyb3cgPSB0cnVlO1xuXG4gICAgaWYgKGRvTGVuZ3RoICYmIG9ialR5cGUgIT09ICdtYXAnICYmIG9ialR5cGUgIT09ICdzZXQnKSB7XG4gICAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gICAgfVxuXG4gICAgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSA9PT0gJ2RhdGUnICYmIG5UeXBlICE9PSAnZGF0ZScpKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyAndGhlIGFyZ3VtZW50IHRvIGFib3ZlIG11c3QgYmUgYSBkYXRlJztcbiAgICB9IGVsc2UgaWYgKG5UeXBlICE9PSAnbnVtYmVyJyAmJiAoZG9MZW5ndGggfHwgb2JqVHlwZSA9PT0gJ251bWJlcicpKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyAndGhlIGFyZ3VtZW50IHRvIGFib3ZlIG11c3QgYmUgYSBudW1iZXInO1xuICAgIH0gZWxzZSBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlICE9PSAnZGF0ZScgJiYgb2JqVHlwZSAhPT0gJ251bWJlcicpKSB7XG4gICAgICB2YXIgcHJpbnRPYmogPSAob2JqVHlwZSA9PT0gJ3N0cmluZycpID8gXCInXCIgKyBvYmogKyBcIidcIiA6IG9iajtcbiAgICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArICdleHBlY3RlZCAnICsgcHJpbnRPYmogKyAnIHRvIGJlIGEgbnVtYmVyIG9yIGEgZGF0ZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNob3VsZFRocm93ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZXJyb3JNZXNzYWdlLCB1bmRlZmluZWQsIHNzZmkpO1xuICAgIH1cblxuICAgIGlmIChkb0xlbmd0aCkge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSAnbGVuZ3RoJ1xuICAgICAgICAsIGl0ZW1zQ291bnQ7XG4gICAgICBpZiAob2JqVHlwZSA9PT0gJ21hcCcgfHwgb2JqVHlwZSA9PT0gJ3NldCcpIHtcbiAgICAgICAgZGVzY3JpcHRvciA9ICdzaXplJztcbiAgICAgICAgaXRlbXNDb3VudCA9IG9iai5zaXplO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbXNDb3VudCA9IG9iai5sZW5ndGg7XG4gICAgICB9XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBpdGVtc0NvdW50ID4gblxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSAnICsgZGVzY3JpcHRvciArICcgYWJvdmUgI3tleHB9IGJ1dCBnb3QgI3thY3R9J1xuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIGEgJyArIGRlc2NyaXB0b3IgKyAnIGFib3ZlICN7ZXhwfSdcbiAgICAgICAgLCBuXG4gICAgICAgICwgaXRlbXNDb3VudFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgb2JqID4gblxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIGFib3ZlICN7ZXhwfSdcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhdCBtb3N0ICN7ZXhwfSdcbiAgICAgICAgLCBuXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2Fib3ZlJywgYXNzZXJ0QWJvdmUpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdndCcsIGFzc2VydEFib3ZlKTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZ3JlYXRlclRoYW4nLCBhc3NlcnRBYm92ZSk7XG5cbiAgLyoqXG4gICAqICMjIyAubGVhc3QoblssIG1zZ10pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGEgbnVtYmVyIG9yIGEgZGF0ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuXG4gICAqIG51bWJlciBvciBkYXRlIGBuYCByZXNwZWN0aXZlbHkuIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIHRvXG4gICAqIGl0cyBleHBlY3RlZCB2YWx1ZS5cbiAgICpcbiAgICogICAgIGV4cGVjdCgyKS50by5lcXVhbCgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgyKS50by5iZS5hdC5sZWFzdCgxKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMikudG8uYmUuYXQubGVhc3QoMik7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5sZW5ndGhPZmAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCdzIGBsZW5ndGhgXG4gICAqIG9yIGBzaXplYCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIG51bWJlciBgbmAuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmhhdmUubGVuZ3RoT2YoMyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmhhdmUubGVuZ3RoT2YuYXQubGVhc3QoMik7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGhPZigzKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubGVuZ3RoT2YuYXQubGVhc3QoMik7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmxlYXN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5lcXVhbCgxKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxKS50by5ub3QuYmUuYXQubGVhc3QoMik7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBgLmxlYXN0YCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2VcbiAgICogdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzIHRoZVxuICAgKiBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uYmUuYXQubGVhc3QoMiwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KDEsICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5hdC5sZWFzdCgyKTtcbiAgICpcbiAgICogVGhlIGFsaWFzZXMgYC5ndGVgIGFuZCBgLmdyZWF0ZXJUaGFuT3JFcXVhbGAgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGhcbiAgICogYC5sZWFzdGAuXG4gICAqXG4gICAqIEBuYW1lIGxlYXN0XG4gICAqIEBhbGlhcyBndGVcbiAgICogQGFsaWFzIGdyZWF0ZXJUaGFuT3JFcXVhbFxuICAgKiBAcGFyYW0ge051bWJlcn0gblxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0TGVhc3QgKG4sIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBkb0xlbmd0aCA9IGZsYWcodGhpcywgJ2RvTGVuZ3RoJylcbiAgICAgICwgZmxhZ01zZyA9IGZsYWcodGhpcywgJ21lc3NhZ2UnKVxuICAgICAgLCBtc2dQcmVmaXggPSAoKGZsYWdNc2cpID8gZmxhZ01zZyArICc6ICcgOiAnJylcbiAgICAgICwgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKVxuICAgICAgLCBvYmpUeXBlID0gXy50eXBlKG9iaikudG9Mb3dlckNhc2UoKVxuICAgICAgLCBuVHlwZSA9IF8udHlwZShuKS50b0xvd2VyQ2FzZSgpXG4gICAgICAsIGVycm9yTWVzc2FnZVxuICAgICAgLCBzaG91bGRUaHJvdyA9IHRydWU7XG5cbiAgICBpZiAoZG9MZW5ndGggJiYgb2JqVHlwZSAhPT0gJ21hcCcgJiYgb2JqVHlwZSAhPT0gJ3NldCcpIHtcbiAgICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KCdsZW5ndGgnKTtcbiAgICB9XG5cbiAgICBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlID09PSAnZGF0ZScgJiYgblR5cGUgIT09ICdkYXRlJykpIHtcbiAgICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArICd0aGUgYXJndW1lbnQgdG8gbGVhc3QgbXVzdCBiZSBhIGRhdGUnO1xuICAgIH0gZWxzZSBpZiAoblR5cGUgIT09ICdudW1iZXInICYmIChkb0xlbmd0aCB8fCBvYmpUeXBlID09PSAnbnVtYmVyJykpIHtcbiAgICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArICd0aGUgYXJndW1lbnQgdG8gbGVhc3QgbXVzdCBiZSBhIG51bWJlcic7XG4gICAgfSBlbHNlIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgIT09ICdkYXRlJyAmJiBvYmpUeXBlICE9PSAnbnVtYmVyJykpIHtcbiAgICAgIHZhciBwcmludE9iaiA9IChvYmpUeXBlID09PSAnc3RyaW5nJykgPyBcIidcIiArIG9iaiArIFwiJ1wiIDogb2JqO1xuICAgICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgJ2V4cGVjdGVkICcgKyBwcmludE9iaiArICcgdG8gYmUgYSBudW1iZXIgb3IgYSBkYXRlJztcbiAgICB9IGVsc2Uge1xuICAgICAgc2hvdWxkVGhyb3cgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVGhyb3cpIHtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihlcnJvck1lc3NhZ2UsIHVuZGVmaW5lZCwgc3NmaSk7XG4gICAgfVxuXG4gICAgaWYgKGRvTGVuZ3RoKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9ICdsZW5ndGgnXG4gICAgICAgICwgaXRlbXNDb3VudDtcbiAgICAgIGlmIChvYmpUeXBlID09PSAnbWFwJyB8fCBvYmpUeXBlID09PSAnc2V0Jykge1xuICAgICAgICBkZXNjcmlwdG9yID0gJ3NpemUnO1xuICAgICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtc0NvdW50ID0gb2JqLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIGl0ZW1zQ291bnQgPj0gblxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSAnICsgZGVzY3JpcHRvciArICcgYXQgbGVhc3QgI3tleHB9IGJ1dCBnb3QgI3thY3R9J1xuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSAnICsgZGVzY3JpcHRvciArICcgYmVsb3cgI3tleHB9J1xuICAgICAgICAsIG5cbiAgICAgICAgLCBpdGVtc0NvdW50XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBvYmogPj0gblxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIGF0IGxlYXN0ICN7ZXhwfSdcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBiZWxvdyAje2V4cH0nXG4gICAgICAgICwgblxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdsZWFzdCcsIGFzc2VydExlYXN0KTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZ3RlJywgYXNzZXJ0TGVhc3QpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdncmVhdGVyVGhhbk9yRXF1YWwnLCBhc3NlcnRMZWFzdCk7XG5cbiAgLyoqXG4gICAqICMjIyAuYmVsb3coblssIG1zZ10pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGEgbnVtYmVyIG9yIGEgZGF0ZSBsZXNzIHRoYW4gdGhlIGdpdmVuIG51bWJlciBvciBkYXRlIGBuYCByZXNwZWN0aXZlbHkuXG4gICAqIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIHRvIGl0cyBleHBlY3RlZFxuICAgKiB2YWx1ZS5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5lcXVhbCgxKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxKS50by5iZS5iZWxvdygyKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEFkZCBgLmxlbmd0aE9mYCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0J3MgYGxlbmd0aGBcbiAgICogb3IgYHNpemVgIGlzIGxlc3MgdGhhbiB0aGUgZ2l2ZW4gbnVtYmVyIGBuYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8uaGF2ZS5sZW5ndGhPZigzKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8uaGF2ZS5sZW5ndGhPZi5iZWxvdyg0KTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aCgzKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubGVuZ3RoT2YuYmVsb3coNCk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmJlbG93YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgyKS50by5lcXVhbCgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgyKS50by5ub3QuYmUuYmVsb3coMSk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBgLmJlbG93YCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2VcbiAgICogdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzIHRoZVxuICAgKiBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMikudG8uYmUuYmVsb3coMSwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KDIsICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5iZWxvdygxKTtcbiAgICpcbiAgICogVGhlIGFsaWFzZXMgYC5sdGAgYW5kIGAubGVzc1RoYW5gIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoXG4gICAqIGAuYmVsb3dgLlxuICAgKlxuICAgKiBAbmFtZSBiZWxvd1xuICAgKiBAYWxpYXMgbHRcbiAgICogQGFsaWFzIGxlc3NUaGFuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnRCZWxvdyAobiwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIGRvTGVuZ3RoID0gZmxhZyh0aGlzLCAnZG9MZW5ndGgnKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIG1zZ1ByZWZpeCA9ICgoZmxhZ01zZykgPyBmbGFnTXNnICsgJzogJyA6ICcnKVxuICAgICAgLCBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpXG4gICAgICAsIG9ialR5cGUgPSBfLnR5cGUob2JqKS50b0xvd2VyQ2FzZSgpXG4gICAgICAsIG5UeXBlID0gXy50eXBlKG4pLnRvTG93ZXJDYXNlKClcbiAgICAgICwgZXJyb3JNZXNzYWdlXG4gICAgICAsIHNob3VsZFRocm93ID0gdHJ1ZTtcblxuICAgIGlmIChkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSAnbWFwJyAmJiBvYmpUeXBlICE9PSAnc2V0Jykge1xuICAgICAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkoJ2xlbmd0aCcpO1xuICAgIH1cblxuICAgIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgPT09ICdkYXRlJyAmJiBuVHlwZSAhPT0gJ2RhdGUnKSkge1xuICAgICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgJ3RoZSBhcmd1bWVudCB0byBiZWxvdyBtdXN0IGJlIGEgZGF0ZSc7XG4gICAgfSBlbHNlIGlmIChuVHlwZSAhPT0gJ251bWJlcicgJiYgKGRvTGVuZ3RoIHx8IG9ialR5cGUgPT09ICdudW1iZXInKSkge1xuICAgICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgJ3RoZSBhcmd1bWVudCB0byBiZWxvdyBtdXN0IGJlIGEgbnVtYmVyJztcbiAgICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSAhPT0gJ2RhdGUnICYmIG9ialR5cGUgIT09ICdudW1iZXInKSkge1xuICAgICAgdmFyIHByaW50T2JqID0gKG9ialR5cGUgPT09ICdzdHJpbmcnKSA/IFwiJ1wiICsgb2JqICsgXCInXCIgOiBvYmo7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyAnZXhwZWN0ZWQgJyArIHByaW50T2JqICsgJyB0byBiZSBhIG51bWJlciBvciBhIGRhdGUnO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG91bGRUaHJvdyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRUaHJvdykge1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGVycm9yTWVzc2FnZSwgdW5kZWZpbmVkLCBzc2ZpKTtcbiAgICB9XG5cbiAgICBpZiAoZG9MZW5ndGgpIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gJ2xlbmd0aCdcbiAgICAgICAgLCBpdGVtc0NvdW50O1xuICAgICAgaWYgKG9ialR5cGUgPT09ICdtYXAnIHx8IG9ialR5cGUgPT09ICdzZXQnKSB7XG4gICAgICAgIGRlc2NyaXB0b3IgPSAnc2l6ZSc7XG4gICAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICAgICAgfVxuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgaXRlbXNDb3VudCA8IG5cbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgJyArIGRlc2NyaXB0b3IgKyAnIGJlbG93ICN7ZXhwfSBidXQgZ290ICN7YWN0fSdcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBhICcgKyBkZXNjcmlwdG9yICsgJyBiZWxvdyAje2V4cH0nXG4gICAgICAgICwgblxuICAgICAgICAsIGl0ZW1zQ291bnRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIG9iaiA8IG5cbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBiZWxvdyAje2V4cH0nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgYXQgbGVhc3QgI3tleHB9J1xuICAgICAgICAsIG5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnYmVsb3cnLCBhc3NlcnRCZWxvdyk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2x0JywgYXNzZXJ0QmVsb3cpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdsZXNzVGhhbicsIGFzc2VydEJlbG93KTtcblxuICAvKipcbiAgICogIyMjIC5tb3N0KG5bLCBtc2ddKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBhIG51bWJlciBvciBhIGRhdGUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiBudW1iZXJcbiAgICogb3IgZGF0ZSBgbmAgcmVzcGVjdGl2ZWx5LiBIb3dldmVyLCBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBpcyBlcXVhbCB0byBpdHNcbiAgICogZXhwZWN0ZWQgdmFsdWUuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uZXF1YWwoMSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMSkudG8uYmUuYXQubW9zdCgyKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMSkudG8uYmUuYXQubW9zdCgxKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEFkZCBgLmxlbmd0aE9mYCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0J3MgYGxlbmd0aGBcbiAgICogb3IgYHNpemVgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gbnVtYmVyIGBuYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8uaGF2ZS5sZW5ndGhPZigzKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8uaGF2ZS5sZW5ndGhPZi5hdC5tb3N0KDQpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubGVuZ3RoT2YoMyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mLmF0Lm1vc3QoNCk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLm1vc3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDIpLnRvLmVxdWFsKDIpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDIpLnRvLm5vdC5iZS5hdC5tb3N0KDEpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogYC5tb3N0YCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2VcbiAgICogdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzIHRoZVxuICAgKiBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMikudG8uYmUuYXQubW9zdCgxLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3QoMiwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLmF0Lm1vc3QoMSk7XG4gICAqXG4gICAqIFRoZSBhbGlhc2VzIGAubHRlYCBhbmQgYC5sZXNzVGhhbk9yRXF1YWxgIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoXG4gICAqIGAubW9zdGAuXG4gICAqXG4gICAqIEBuYW1lIG1vc3RcbiAgICogQGFsaWFzIGx0ZVxuICAgKiBAYWxpYXMgbGVzc1RoYW5PckVxdWFsXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnRNb3N0IChuLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgZG9MZW5ndGggPSBmbGFnKHRoaXMsICdkb0xlbmd0aCcpXG4gICAgICAsIGZsYWdNc2cgPSBmbGFnKHRoaXMsICdtZXNzYWdlJylcbiAgICAgICwgbXNnUHJlZml4ID0gKChmbGFnTXNnKSA/IGZsYWdNc2cgKyAnOiAnIDogJycpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJylcbiAgICAgICwgb2JqVHlwZSA9IF8udHlwZShvYmopLnRvTG93ZXJDYXNlKClcbiAgICAgICwgblR5cGUgPSBfLnR5cGUobikudG9Mb3dlckNhc2UoKVxuICAgICAgLCBlcnJvck1lc3NhZ2VcbiAgICAgICwgc2hvdWxkVGhyb3cgPSB0cnVlO1xuXG4gICAgaWYgKGRvTGVuZ3RoICYmIG9ialR5cGUgIT09ICdtYXAnICYmIG9ialR5cGUgIT09ICdzZXQnKSB7XG4gICAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gICAgfVxuXG4gICAgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSA9PT0gJ2RhdGUnICYmIG5UeXBlICE9PSAnZGF0ZScpKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyAndGhlIGFyZ3VtZW50IHRvIG1vc3QgbXVzdCBiZSBhIGRhdGUnO1xuICAgIH0gZWxzZSBpZiAoblR5cGUgIT09ICdudW1iZXInICYmIChkb0xlbmd0aCB8fCBvYmpUeXBlID09PSAnbnVtYmVyJykpIHtcbiAgICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArICd0aGUgYXJndW1lbnQgdG8gbW9zdCBtdXN0IGJlIGEgbnVtYmVyJztcbiAgICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSAhPT0gJ2RhdGUnICYmIG9ialR5cGUgIT09ICdudW1iZXInKSkge1xuICAgICAgdmFyIHByaW50T2JqID0gKG9ialR5cGUgPT09ICdzdHJpbmcnKSA/IFwiJ1wiICsgb2JqICsgXCInXCIgOiBvYmo7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyAnZXhwZWN0ZWQgJyArIHByaW50T2JqICsgJyB0byBiZSBhIG51bWJlciBvciBhIGRhdGUnO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG91bGRUaHJvdyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRUaHJvdykge1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGVycm9yTWVzc2FnZSwgdW5kZWZpbmVkLCBzc2ZpKTtcbiAgICB9XG5cbiAgICBpZiAoZG9MZW5ndGgpIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gJ2xlbmd0aCdcbiAgICAgICAgLCBpdGVtc0NvdW50O1xuICAgICAgaWYgKG9ialR5cGUgPT09ICdtYXAnIHx8IG9ialR5cGUgPT09ICdzZXQnKSB7XG4gICAgICAgIGRlc2NyaXB0b3IgPSAnc2l6ZSc7XG4gICAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICAgICAgfVxuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgaXRlbXNDb3VudCA8PSBuXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhICcgKyBkZXNjcmlwdG9yICsgJyBhdCBtb3N0ICN7ZXhwfSBidXQgZ290ICN7YWN0fSdcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgJyArIGRlc2NyaXB0b3IgKyAnIGFib3ZlICN7ZXhwfSdcbiAgICAgICAgLCBuXG4gICAgICAgICwgaXRlbXNDb3VudFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgb2JqIDw9IG5cbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhdCBtb3N0ICN7ZXhwfSdcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhYm92ZSAje2V4cH0nXG4gICAgICAgICwgblxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdtb3N0JywgYXNzZXJ0TW9zdCk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2x0ZScsIGFzc2VydE1vc3QpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdsZXNzVGhhbk9yRXF1YWwnLCBhc3NlcnRNb3N0KTtcblxuICAvKipcbiAgICogIyMjIC53aXRoaW4oc3RhcnQsIGZpbmlzaFssIG1zZ10pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGEgbnVtYmVyIG9yIGEgZGF0ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuXG4gICAqIG51bWJlciBvciBkYXRlIGBzdGFydGAsIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIG51bWJlciBvciBkYXRlIGBmaW5pc2hgIHJlc3BlY3RpdmVseS5cbiAgICogSG93ZXZlciwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQgaXMgZXF1YWwgdG8gaXRzIGV4cGVjdGVkXG4gICAqIHZhbHVlLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDIpLnRvLmVxdWFsKDIpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDIpLnRvLmJlLndpdGhpbigxLCAzKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMikudG8uYmUud2l0aGluKDIsIDMpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgyKS50by5iZS53aXRoaW4oMSwgMik7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5sZW5ndGhPZmAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCdzIGBsZW5ndGhgXG4gICAqIG9yIGBzaXplYCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIG51bWJlciBgc3RhcnRgLCBhbmQgbGVzc1xuICAgKiB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiBudW1iZXIgYGZpbmlzaGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmhhdmUubGVuZ3RoT2YoMyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmhhdmUubGVuZ3RoT2Yud2l0aGluKDIsIDQpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubGVuZ3RoT2YoMyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mLndpdGhpbigyLCA0KTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAud2l0aGluYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5lcXVhbCgxKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxKS50by5ub3QuYmUud2l0aGluKDIsIDQpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogYC53aXRoaW5gIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3JcbiAgICogbWVzc2FnZSB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXNcbiAgICogdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCg0KS50by5iZS53aXRoaW4oMSwgMywgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KDQsICdub29vIHdoeSBmYWlsPz8nKS50by5iZS53aXRoaW4oMSwgMyk7XG4gICAqXG4gICAqIEBuYW1lIHdpdGhpblxuICAgKiBAcGFyYW0ge051bWJlcn0gc3RhcnQgbG93ZXIgYm91bmQgaW5jbHVzaXZlXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBmaW5pc2ggdXBwZXIgYm91bmQgaW5jbHVzaXZlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCd3aXRoaW4nLCBmdW5jdGlvbiAoc3RhcnQsIGZpbmlzaCwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIGRvTGVuZ3RoID0gZmxhZyh0aGlzLCAnZG9MZW5ndGgnKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIG1zZ1ByZWZpeCA9ICgoZmxhZ01zZykgPyBmbGFnTXNnICsgJzogJyA6ICcnKVxuICAgICAgLCBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpXG4gICAgICAsIG9ialR5cGUgPSBfLnR5cGUob2JqKS50b0xvd2VyQ2FzZSgpXG4gICAgICAsIHN0YXJ0VHlwZSA9IF8udHlwZShzdGFydCkudG9Mb3dlckNhc2UoKVxuICAgICAgLCBmaW5pc2hUeXBlID0gXy50eXBlKGZpbmlzaCkudG9Mb3dlckNhc2UoKVxuICAgICAgLCBlcnJvck1lc3NhZ2VcbiAgICAgICwgc2hvdWxkVGhyb3cgPSB0cnVlXG4gICAgICAsIHJhbmdlID0gKHN0YXJ0VHlwZSA9PT0gJ2RhdGUnICYmIGZpbmlzaFR5cGUgPT09ICdkYXRlJylcbiAgICAgICAgICA/IHN0YXJ0LnRvSVNPU3RyaW5nKCkgKyAnLi4nICsgZmluaXNoLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICA6IHN0YXJ0ICsgJy4uJyArIGZpbmlzaDtcblxuICAgIGlmIChkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSAnbWFwJyAmJiBvYmpUeXBlICE9PSAnc2V0Jykge1xuICAgICAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkoJ2xlbmd0aCcpO1xuICAgIH1cblxuICAgIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgPT09ICdkYXRlJyAmJiAoc3RhcnRUeXBlICE9PSAnZGF0ZScgfHwgZmluaXNoVHlwZSAhPT0gJ2RhdGUnKSkpIHtcbiAgICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArICd0aGUgYXJndW1lbnRzIHRvIHdpdGhpbiBtdXN0IGJlIGRhdGVzJztcbiAgICB9IGVsc2UgaWYgKChzdGFydFR5cGUgIT09ICdudW1iZXInIHx8IGZpbmlzaFR5cGUgIT09ICdudW1iZXInKSAmJiAoZG9MZW5ndGggfHwgb2JqVHlwZSA9PT0gJ251bWJlcicpKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyAndGhlIGFyZ3VtZW50cyB0byB3aXRoaW4gbXVzdCBiZSBudW1iZXJzJztcbiAgICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSAhPT0gJ2RhdGUnICYmIG9ialR5cGUgIT09ICdudW1iZXInKSkge1xuICAgICAgdmFyIHByaW50T2JqID0gKG9ialR5cGUgPT09ICdzdHJpbmcnKSA/IFwiJ1wiICsgb2JqICsgXCInXCIgOiBvYmo7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyAnZXhwZWN0ZWQgJyArIHByaW50T2JqICsgJyB0byBiZSBhIG51bWJlciBvciBhIGRhdGUnO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG91bGRUaHJvdyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRUaHJvdykge1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGVycm9yTWVzc2FnZSwgdW5kZWZpbmVkLCBzc2ZpKTtcbiAgICB9XG5cbiAgICBpZiAoZG9MZW5ndGgpIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gJ2xlbmd0aCdcbiAgICAgICAgLCBpdGVtc0NvdW50O1xuICAgICAgaWYgKG9ialR5cGUgPT09ICdtYXAnIHx8IG9ialR5cGUgPT09ICdzZXQnKSB7XG4gICAgICAgIGRlc2NyaXB0b3IgPSAnc2l6ZSc7XG4gICAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICAgICAgfVxuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgaXRlbXNDb3VudCA+PSBzdGFydCAmJiBpdGVtc0NvdW50IDw9IGZpbmlzaFxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSAnICsgZGVzY3JpcHRvciArICcgd2l0aGluICcgKyByYW5nZVxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIGEgJyArIGRlc2NyaXB0b3IgKyAnIHdpdGhpbiAnICsgcmFuZ2VcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIG9iaiA+PSBzdGFydCAmJiBvYmogPD0gZmluaXNoXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgd2l0aGluICcgKyByYW5nZVxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSB3aXRoaW4gJyArIHJhbmdlXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuaW5zdGFuY2VvZihjb25zdHJ1Y3RvclssIG1zZ10pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGFuIGluc3RhbmNlIG9mIHRoZSBnaXZlbiBgY29uc3RydWN0b3JgLlxuICAgKlxuICAgKiAgICAgZnVuY3Rpb24gQ2F0ICgpIHsgfVxuICAgKlxuICAgKiAgICAgZXhwZWN0KG5ldyBDYXQoKSkudG8uYmUuYW4uaW5zdGFuY2VvZihDYXQpO1xuICAgKiAgICAgZXhwZWN0KFsxLCAyXSkudG8uYmUuYW4uaW5zdGFuY2VvZihBcnJheSk7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuaW5zdGFuY2VvZmAuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5ub3QuYmUuYW4uaW5zdGFuY2VvZihBcnJheSk7XG4gICAqXG4gICAqIGAuaW5zdGFuY2VvZmAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvclxuICAgKiBtZXNzYWdlIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhc1xuICAgKiB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmJlLmFuLmluc3RhbmNlb2YoQXJyYXksICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdCgxLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUuYW4uaW5zdGFuY2VvZihBcnJheSk7XG4gICAqXG4gICAqIER1ZSB0byBsaW1pdGF0aW9ucyBpbiBFUzUsIGAuaW5zdGFuY2VvZmAgbWF5IG5vdCBhbHdheXMgd29yayBhcyBleHBlY3RlZFxuICAgKiB3aGVuIHVzaW5nIGEgdHJhbnNwaWxlciBzdWNoIGFzIEJhYmVsIG9yIFR5cGVTY3JpcHQuIEluIHBhcnRpY3VsYXIsIGl0IG1heVxuICAgKiBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cyB3aGVuIHN1YmNsYXNzaW5nIGJ1aWx0LWluIG9iamVjdCBzdWNoIGFzXG4gICAqIGBBcnJheWAsIGBFcnJvcmAsIGFuZCBgTWFwYC4gU2VlIHlvdXIgdHJhbnNwaWxlcidzIGRvY3MgZm9yIGRldGFpbHM6XG4gICAqXG4gICAqIC0gKFtCYWJlbF0oaHR0cHM6Ly9iYWJlbGpzLmlvL2RvY3MvdXNhZ2UvY2F2ZWF0cy8jY2xhc3NlcykpXG4gICAqIC0gKFtUeXBlU2NyaXB0XShodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvd2lraS9CcmVha2luZy1DaGFuZ2VzI2V4dGVuZGluZy1idWlsdC1pbnMtbGlrZS1lcnJvci1hcnJheS1hbmQtbWFwLW1heS1uby1sb25nZXItd29yaykpXG4gICAqXG4gICAqIFRoZSBhbGlhcyBgLmluc3RhbmNlT2ZgIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoIGAuaW5zdGFuY2VvZmAuXG4gICAqXG4gICAqIEBuYW1lIGluc3RhbmNlb2ZcbiAgICogQHBhcmFtIHtDb25zdHJ1Y3Rvcn0gY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1zZyBfb3B0aW9uYWxfXG4gICAqIEBhbGlhcyBpbnN0YW5jZU9mXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFzc2VydEluc3RhbmNlT2YgKGNvbnN0cnVjdG9yLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcblxuICAgIHZhciB0YXJnZXQgPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgIHZhciBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpO1xuICAgIHZhciBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhciBpc0luc3RhbmNlT2YgPSB0YXJnZXQgaW5zdGFuY2VvZiBjb25zdHJ1Y3RvcjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUeXBlRXJyb3IpIHtcbiAgICAgICAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgJzogJyA6ICcnO1xuICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgZmxhZ01zZyArICdUaGUgaW5zdGFuY2VvZiBhc3NlcnRpb24gbmVlZHMgYSBjb25zdHJ1Y3RvciBidXQgJ1xuICAgICAgICAgICAgKyBfLnR5cGUoY29uc3RydWN0b3IpICsgJyB3YXMgZ2l2ZW4uJyxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgc3NmaVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIHZhciBuYW1lID0gXy5nZXROYW1lKGNvbnN0cnVjdG9yKTtcbiAgICBpZiAobmFtZSA9PT0gbnVsbCkge1xuICAgICAgbmFtZSA9ICdhbiB1bm5hbWVkIGNvbnN0cnVjdG9yJztcbiAgICB9XG5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgaXNJbnN0YW5jZU9mXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIGFuIGluc3RhbmNlIG9mICcgKyBuYW1lXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBhbiBpbnN0YW5jZSBvZiAnICsgbmFtZVxuICAgICk7XG4gIH07XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnaW5zdGFuY2VvZicsIGFzc2VydEluc3RhbmNlT2YpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdpbnN0YW5jZU9mJywgYXNzZXJ0SW5zdGFuY2VPZik7XG5cbiAgLyoqXG4gICAqICMjIyAucHJvcGVydHkobmFtZVssIHZhbFssIG1zZ11dKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBoYXMgYSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiBrZXkgYG5hbWVgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaGF2ZS5wcm9wZXJ0eSgnYScpO1xuICAgKlxuICAgKiBXaGVuIGB2YWxgIGlzIHByb3ZpZGVkLCBgLnByb3BlcnR5YCBhbHNvIGFzc2VydHMgdGhhdCB0aGUgcHJvcGVydHkncyB2YWx1ZVxuICAgKiBpcyBlcXVhbCB0byB0aGUgZ2l2ZW4gYHZhbGAuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLnByb3BlcnR5KCdhJywgMSk7XG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHN0cmljdCAoYD09PWApIGVxdWFsaXR5IGlzIHVzZWQuIEFkZCBgLmRlZXBgIGVhcmxpZXIgaW4gdGhlXG4gICAqIGNoYWluIHRvIHVzZSBkZWVwIGVxdWFsaXR5IGluc3RlYWQuIFNlZSB0aGUgYGRlZXAtZXFsYCBwcm9qZWN0IHBhZ2UgZm9yXG4gICAqIGluZm8gb24gdGhlIGRlZXAgZXF1YWxpdHkgYWxnb3JpdGhtOiBodHRwczovL2dpdGh1Yi5jb20vY2hhaWpzL2RlZXAtZXFsLlxuICAgKlxuICAgKiAgICAgLy8gVGFyZ2V0IG9iamVjdCBkZWVwbHkgKGJ1dCBub3Qgc3RyaWN0bHkpIGhhcyBwcm9wZXJ0eSBgeDoge2E6IDF9YFxuICAgKiAgICAgZXhwZWN0KHt4OiB7YTogMX19KS50by5oYXZlLmRlZXAucHJvcGVydHkoJ3gnLCB7YTogMX0pO1xuICAgKiAgICAgZXhwZWN0KHt4OiB7YTogMX19KS50by5ub3QuaGF2ZS5wcm9wZXJ0eSgneCcsIHthOiAxfSk7XG4gICAqXG4gICAqIFRoZSB0YXJnZXQncyBlbnVtZXJhYmxlIGFuZCBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzIGFyZSBhbHdheXMgaW5jbHVkZWRcbiAgICogaW4gdGhlIHNlYXJjaC4gQnkgZGVmYXVsdCwgYm90aCBvd24gYW5kIGluaGVyaXRlZCBwcm9wZXJ0aWVzIGFyZSBpbmNsdWRlZC5cbiAgICogQWRkIGAub3duYCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBleGNsdWRlIGluaGVyaXRlZCBwcm9wZXJ0aWVzIGZyb20gdGhlXG4gICAqIHNlYXJjaC5cbiAgICpcbiAgICogICAgIE9iamVjdC5wcm90b3R5cGUuYiA9IDI7XG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLm93bi5wcm9wZXJ0eSgnYScpO1xuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaGF2ZS5vd24ucHJvcGVydHkoJ2EnLCAxKTtcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmhhdmUucHJvcGVydHkoJ2InKTtcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLm5vdC5oYXZlLm93bi5wcm9wZXJ0eSgnYicpO1xuICAgKlxuICAgKiBgLmRlZXBgIGFuZCBgLm93bmAgY2FuIGJlIGNvbWJpbmVkLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHt4OiB7YTogMX19KS50by5oYXZlLmRlZXAub3duLnByb3BlcnR5KCd4Jywge2E6IDF9KTtcbiAgICpcbiAgICogQWRkIGAubmVzdGVkYCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBlbmFibGUgZG90LSBhbmQgYnJhY2tldC1ub3RhdGlvbiB3aGVuXG4gICAqIHJlZmVyZW5jaW5nIG5lc3RlZCBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiB7YjogWyd4JywgJ3knXX19KS50by5oYXZlLm5lc3RlZC5wcm9wZXJ0eSgnYS5iWzFdJyk7XG4gICAqICAgICBleHBlY3Qoe2E6IHtiOiBbJ3gnLCAneSddfX0pLnRvLmhhdmUubmVzdGVkLnByb3BlcnR5KCdhLmJbMV0nLCAneScpO1xuICAgKlxuICAgKiBJZiBgLmAgb3IgYFtdYCBhcmUgcGFydCBvZiBhbiBhY3R1YWwgcHJvcGVydHkgbmFtZSwgdGhleSBjYW4gYmUgZXNjYXBlZCBieVxuICAgKiBhZGRpbmcgdHdvIGJhY2tzbGFzaGVzIGJlZm9yZSB0aGVtLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHsnLmEnOiB7J1tiXSc6ICd4J319KS50by5oYXZlLm5lc3RlZC5wcm9wZXJ0eSgnXFxcXC5hLlxcXFxbYlxcXFxdJyk7XG4gICAqXG4gICAqIGAuZGVlcGAgYW5kIGAubmVzdGVkYCBjYW4gYmUgY29tYmluZWQuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IHtiOiBbe2M6IDN9XX19KVxuICAgKiAgICAgICAudG8uaGF2ZS5kZWVwLm5lc3RlZC5wcm9wZXJ0eSgnYS5iWzBdJywge2M6IDN9KTtcbiAgICpcbiAgICogYC5vd25gIGFuZCBgLm5lc3RlZGAgY2Fubm90IGJlIGNvbWJpbmVkLlxuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLnByb3BlcnR5YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLm5vdC5oYXZlLnByb3BlcnR5KCdiJyk7XG4gICAqXG4gICAqIEhvd2V2ZXIsIGl0J3MgZGFuZ2Vyb3VzIHRvIG5lZ2F0ZSBgLnByb3BlcnR5YCB3aGVuIHByb3ZpZGluZyBgdmFsYC4gVGhlXG4gICAqIHByb2JsZW0gaXMgdGhhdCBpdCBjcmVhdGVzIHVuY2VydGFpbiBleHBlY3RhdGlvbnMgYnkgYXNzZXJ0aW5nIHRoYXQgdGhlXG4gICAqIHRhcmdldCBlaXRoZXIgZG9lc24ndCBoYXZlIGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4ga2V5IGBuYW1lYCwgb3IgdGhhdCBpdFxuICAgKiBkb2VzIGhhdmUgYSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiBrZXkgYG5hbWVgIGJ1dCBpdHMgdmFsdWUgaXNuJ3QgZXF1YWwgdG9cbiAgICogdGhlIGdpdmVuIGB2YWxgLiBJdCdzIG9mdGVuIGJlc3QgdG8gaWRlbnRpZnkgdGhlIGV4YWN0IG91dHB1dCB0aGF0J3NcbiAgICogZXhwZWN0ZWQsIGFuZCB0aGVuIHdyaXRlIGFuIGFzc2VydGlvbiB0aGF0IG9ubHkgYWNjZXB0cyB0aGF0IGV4YWN0IG91dHB1dC5cbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzbid0IGV4cGVjdGVkIHRvIGhhdmUgYSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiBrZXlcbiAgICogYG5hbWVgLCBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IGV4YWN0bHkgdGhhdC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YjogMn0pLnRvLm5vdC5oYXZlLnByb3BlcnR5KCdhJyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoe2I6IDJ9KS50by5ub3QuaGF2ZS5wcm9wZXJ0eSgnYScsIDEpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGV4cGVjdGVkIHRvIGhhdmUgYSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiBrZXkgYG5hbWVgLFxuICAgKiBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHByb3BlcnR5IGhhcyBpdHMgZXhwZWN0ZWQgdmFsdWUsIHJhdGhlclxuICAgKiB0aGFuIGFzc2VydGluZyB0aGF0IGl0IGRvZXNuJ3QgaGF2ZSBvbmUgb2YgbWFueSB1bmV4cGVjdGVkIHZhbHVlcy5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogM30pLnRvLmhhdmUucHJvcGVydHkoJ2EnLCAzKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YTogM30pLnRvLm5vdC5oYXZlLnByb3BlcnR5KCdhJywgMSk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBgLnByb3BlcnR5YCBjaGFuZ2VzIHRoZSB0YXJnZXQgb2YgYW55IGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluXG4gICAqIHRvIGJlIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgZnJvbSB0aGUgb3JpZ2luYWwgdGFyZ2V0IG9iamVjdC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmhhdmUucHJvcGVydHkoJ2EnKS50aGF0LmlzLmEoJ251bWJlcicpO1xuICAgKlxuICAgKiBgLnByb3BlcnR5YCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yXG4gICAqIG1lc3NhZ2UgdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzXG4gICAqIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuIFdoZW4gbm90IHByb3ZpZGluZyBgdmFsYCwgb25seSB1c2UgdGhlXG4gICAqIHNlY29uZCBmb3JtLlxuICAgKlxuICAgKiAgICAgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmhhdmUucHJvcGVydHkoJ2EnLCAyLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9LCAnbm9vbyB3aHkgZmFpbD8/JykudG8uaGF2ZS5wcm9wZXJ0eSgnYScsIDIpO1xuICAgKiAgICAgZXhwZWN0KHthOiAxfSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmhhdmUucHJvcGVydHkoJ2InKTtcbiAgICpcbiAgICogICAgIC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaGF2ZS5wcm9wZXJ0eSgnYicsIHVuZGVmaW5lZCwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKlxuICAgKiBUaGUgYWJvdmUgYXNzZXJ0aW9uIGlzbid0IHRoZSBzYW1lIHRoaW5nIGFzIG5vdCBwcm92aWRpbmcgYHZhbGAuIEluc3RlYWQsXG4gICAqIGl0J3MgYXNzZXJ0aW5nIHRoYXQgdGhlIHRhcmdldCBvYmplY3QgaGFzIGEgYGJgIHByb3BlcnR5IHRoYXQncyBlcXVhbCB0b1xuICAgKiBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogVGhlIGFzc2VydGlvbnMgYC5vd25Qcm9wZXJ0eWAgYW5kIGAuaGF2ZU93blByb3BlcnR5YCBjYW4gYmUgdXNlZFxuICAgKiBpbnRlcmNoYW5nZWFibHkgd2l0aCBgLm93bi5wcm9wZXJ0eWAuXG4gICAqXG4gICAqIEBuYW1lIHByb3BlcnR5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbCAob3B0aW9uYWwpXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAcmV0dXJucyB2YWx1ZSBvZiBwcm9wZXJ0eSBmb3IgY2hhaW5pbmdcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0UHJvcGVydHkgKG5hbWUsIHZhbCwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG5cbiAgICB2YXIgaXNOZXN0ZWQgPSBmbGFnKHRoaXMsICduZXN0ZWQnKVxuICAgICAgLCBpc093biA9IGZsYWcodGhpcywgJ293bicpXG4gICAgICAsIGZsYWdNc2cgPSBmbGFnKHRoaXMsICdtZXNzYWdlJylcbiAgICAgICwgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKVxuICAgICAgLCBuYW1lVHlwZSA9IHR5cGVvZiBuYW1lO1xuXG4gICAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgJzogJyA6ICcnO1xuXG4gICAgaWYgKGlzTmVzdGVkKSB7XG4gICAgICBpZiAobmFtZVR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgICBmbGFnTXNnICsgJ3RoZSBhcmd1bWVudCB0byBwcm9wZXJ0eSBtdXN0IGJlIGEgc3RyaW5nIHdoZW4gdXNpbmcgbmVzdGVkIHN5bnRheCcsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHNzZmlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5hbWVUeXBlICE9PSAnc3RyaW5nJyAmJiBuYW1lVHlwZSAhPT0gJ251bWJlcicgJiYgbmFtZVR5cGUgIT09ICdzeW1ib2wnKSB7XG4gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgICBmbGFnTXNnICsgJ3RoZSBhcmd1bWVudCB0byBwcm9wZXJ0eSBtdXN0IGJlIGEgc3RyaW5nLCBudW1iZXIsIG9yIHN5bWJvbCcsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHNzZmlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNOZXN0ZWQgJiYgaXNPd24pIHtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgZmxhZ01zZyArICdUaGUgXCJuZXN0ZWRcIiBhbmQgXCJvd25cIiBmbGFncyBjYW5ub3QgYmUgY29tYmluZWQuJyxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBzc2ZpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChvYmogPT09IG51bGwgfHwgb2JqID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgZmxhZ01zZyArICdUYXJnZXQgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLicsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgc3NmaVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgaXNEZWVwID0gZmxhZyh0aGlzLCAnZGVlcCcpXG4gICAgICAsIG5lZ2F0ZSA9IGZsYWcodGhpcywgJ25lZ2F0ZScpXG4gICAgICAsIHBhdGhJbmZvID0gaXNOZXN0ZWQgPyBfLmdldFBhdGhJbmZvKG9iaiwgbmFtZSkgOiBudWxsXG4gICAgICAsIHZhbHVlID0gaXNOZXN0ZWQgPyBwYXRoSW5mby52YWx1ZSA6IG9ialtuYW1lXTtcblxuICAgIHZhciBkZXNjcmlwdG9yID0gJyc7XG4gICAgaWYgKGlzRGVlcCkgZGVzY3JpcHRvciArPSAnZGVlcCAnO1xuICAgIGlmIChpc093bikgZGVzY3JpcHRvciArPSAnb3duICc7XG4gICAgaWYgKGlzTmVzdGVkKSBkZXNjcmlwdG9yICs9ICduZXN0ZWQgJztcbiAgICBkZXNjcmlwdG9yICs9ICdwcm9wZXJ0eSAnO1xuXG4gICAgdmFyIGhhc1Byb3BlcnR5O1xuICAgIGlmIChpc093bikgaGFzUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBuYW1lKTtcbiAgICBlbHNlIGlmIChpc05lc3RlZCkgaGFzUHJvcGVydHkgPSBwYXRoSW5mby5leGlzdHM7XG4gICAgZWxzZSBoYXNQcm9wZXJ0eSA9IF8uaGFzUHJvcGVydHkob2JqLCBuYW1lKTtcblxuICAgIC8vIFdoZW4gcGVyZm9ybWluZyBhIG5lZ2F0ZWQgYXNzZXJ0aW9uIGZvciBib3RoIG5hbWUgYW5kIHZhbCwgbWVyZWx5IGhhdmluZ1xuICAgIC8vIGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpc24ndCBlbm91Z2ggdG8gY2F1c2UgdGhlIGFzc2VydGlvbiB0b1xuICAgIC8vIGZhaWwuIEl0IG11c3QgYm90aCBoYXZlIGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgYW5kIHRoZSB2YWx1ZSBvZlxuICAgIC8vIHRoYXQgcHJvcGVydHkgbXVzdCBlcXVhbCB0aGUgZ2l2ZW4gdmFsLiBUaGVyZWZvcmUsIHNraXAgdGhpcyBhc3NlcnRpb24gaW5cbiAgICAvLyBmYXZvciBvZiB0aGUgbmV4dC5cbiAgICBpZiAoIW5lZ2F0ZSB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBoYXNQcm9wZXJ0eVxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgJyArIGRlc2NyaXB0b3IgKyBfLmluc3BlY3QobmFtZSlcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSAnICsgZGVzY3JpcHRvciArIF8uaW5zcGVjdChuYW1lKSk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBoYXNQcm9wZXJ0eSAmJiAoaXNEZWVwID8gXy5lcWwodmFsLCB2YWx1ZSkgOiB2YWwgPT09IHZhbHVlKVxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgJyArIGRlc2NyaXB0b3IgKyBfLmluc3BlY3QobmFtZSkgKyAnIG9mICN7ZXhwfSwgYnV0IGdvdCAje2FjdH0nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgJyArIGRlc2NyaXB0b3IgKyBfLmluc3BlY3QobmFtZSkgKyAnIG9mICN7YWN0fSdcbiAgICAgICAgLCB2YWxcbiAgICAgICAgLCB2YWx1ZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmbGFnKHRoaXMsICdvYmplY3QnLCB2YWx1ZSk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdwcm9wZXJ0eScsIGFzc2VydFByb3BlcnR5KTtcblxuICBmdW5jdGlvbiBhc3NlcnRPd25Qcm9wZXJ0eSAobmFtZSwgdmFsdWUsIG1zZykge1xuICAgIGZsYWcodGhpcywgJ293bicsIHRydWUpO1xuICAgIGFzc2VydFByb3BlcnR5LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdvd25Qcm9wZXJ0eScsIGFzc2VydE93blByb3BlcnR5KTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnaGF2ZU93blByb3BlcnR5JywgYXNzZXJ0T3duUHJvcGVydHkpO1xuXG4gIC8qKlxuICAgKiAjIyMgLm93blByb3BlcnR5RGVzY3JpcHRvcihuYW1lWywgZGVzY3JpcHRvclssIG1zZ11dKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBoYXMgaXRzIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIHdpdGggdGhlIGdpdmVuIGtleVxuICAgKiBgbmFtZWAuIEVudW1lcmFibGUgYW5kIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMgYXJlIGluY2x1ZGVkIGluIHRoZVxuICAgKiBzZWFyY2guXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLm93blByb3BlcnR5RGVzY3JpcHRvcignYScpO1xuICAgKlxuICAgKiBXaGVuIGBkZXNjcmlwdG9yYCBpcyBwcm92aWRlZCwgYC5vd25Qcm9wZXJ0eURlc2NyaXB0b3JgIGFsc28gYXNzZXJ0cyB0aGF0XG4gICAqIHRoZSBwcm9wZXJ0eSdzIGRlc2NyaXB0b3IgaXMgZGVlcGx5IGVxdWFsIHRvIHRoZSBnaXZlbiBgZGVzY3JpcHRvcmAuIFNlZVxuICAgKiB0aGUgYGRlZXAtZXFsYCBwcm9qZWN0IHBhZ2UgZm9yIGluZm8gb24gdGhlIGRlZXAgZXF1YWxpdHkgYWxnb3JpdGhtOlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vY2hhaWpzL2RlZXAtZXFsLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaGF2ZS5vd25Qcm9wZXJ0eURlc2NyaXB0b3IoJ2EnLCB7XG4gICAqICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAqICAgICAgIHZhbHVlOiAxLFxuICAgKiAgICAgfSk7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAub3duUHJvcGVydHlEZXNjcmlwdG9yYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLm5vdC5oYXZlLm93blByb3BlcnR5RGVzY3JpcHRvcignYicpO1xuICAgKlxuICAgKiBIb3dldmVyLCBpdCdzIGRhbmdlcm91cyB0byBuZWdhdGUgYC5vd25Qcm9wZXJ0eURlc2NyaXB0b3JgIHdoZW4gcHJvdmlkaW5nXG4gICAqIGEgYGRlc2NyaXB0b3JgLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGl0IGNyZWF0ZXMgdW5jZXJ0YWluIGV4cGVjdGF0aW9ucyBieVxuICAgKiBhc3NlcnRpbmcgdGhhdCB0aGUgdGFyZ2V0IGVpdGhlciBkb2Vzbid0IGhhdmUgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHdpdGhcbiAgICogdGhlIGdpdmVuIGtleSBgbmFtZWAsIG9yIHRoYXQgaXQgZG9lcyBoYXZlIGEgcHJvcGVydHkgZGVzY3JpcHRvciB3aXRoIHRoZVxuICAgKiBnaXZlbiBrZXkgYG5hbWVgIGJ1dCBpdFx1MjAxOXMgbm90IGRlZXBseSBlcXVhbCB0byB0aGUgZ2l2ZW4gYGRlc2NyaXB0b3JgLiBJdCdzXG4gICAqIG9mdGVuIGJlc3QgdG8gaWRlbnRpZnkgdGhlIGV4YWN0IG91dHB1dCB0aGF0J3MgZXhwZWN0ZWQsIGFuZCB0aGVuIHdyaXRlIGFuXG4gICAqIGFzc2VydGlvbiB0aGF0IG9ubHkgYWNjZXB0cyB0aGF0IGV4YWN0IG91dHB1dC5cbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzbid0IGV4cGVjdGVkIHRvIGhhdmUgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHdpdGggdGhlIGdpdmVuXG4gICAqIGtleSBgbmFtZWAsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnQgZXhhY3RseSB0aGF0LlxuICAgKlxuICAgKiAgICAgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YjogMn0pLnRvLm5vdC5oYXZlLm93blByb3BlcnR5RGVzY3JpcHRvcignYScpO1xuICAgKlxuICAgKiAgICAgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoe2I6IDJ9KS50by5ub3QuaGF2ZS5vd25Qcm9wZXJ0eURlc2NyaXB0b3IoJ2EnLCB7XG4gICAqICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAqICAgICAgIHZhbHVlOiAxLFxuICAgKiAgICAgfSk7XG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpcyBleHBlY3RlZCB0byBoYXZlIGEgcHJvcGVydHkgZGVzY3JpcHRvciB3aXRoIHRoZSBnaXZlblxuICAgKiBrZXkgYG5hbWVgLCBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHByb3BlcnR5IGhhcyBpdHMgZXhwZWN0ZWRcbiAgICogZGVzY3JpcHRvciwgcmF0aGVyIHRoYW4gYXNzZXJ0aW5nIHRoYXQgaXQgZG9lc24ndCBoYXZlIG9uZSBvZiBtYW55XG4gICAqIHVuZXhwZWN0ZWQgZGVzY3JpcHRvcnMuXG4gICAqXG4gICAqICAgICAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHthOiAzfSkudG8uaGF2ZS5vd25Qcm9wZXJ0eURlc2NyaXB0b3IoJ2EnLCB7XG4gICAqICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAqICAgICAgIHZhbHVlOiAzLFxuICAgKiAgICAgfSk7XG4gICAqXG4gICAqICAgICAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YTogM30pLnRvLm5vdC5oYXZlLm93blByb3BlcnR5RGVzY3JpcHRvcignYScsIHtcbiAgICogICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgKiAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgKiAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICogICAgICAgdmFsdWU6IDEsXG4gICAqICAgICB9KTtcbiAgICpcbiAgICogYC5vd25Qcm9wZXJ0eURlc2NyaXB0b3JgIGNoYW5nZXMgdGhlIHRhcmdldCBvZiBhbnkgYXNzZXJ0aW9ucyB0aGF0IGZvbGxvd1xuICAgKiBpbiB0aGUgY2hhaW4gdG8gYmUgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZyb20gdGhlIG9yaWdpbmFsXG4gICAqIHRhcmdldCBvYmplY3QuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLm93blByb3BlcnR5RGVzY3JpcHRvcignYScpXG4gICAqICAgICAgIC50aGF0Lmhhcy5wcm9wZXJ0eSgnZW51bWVyYWJsZScsIHRydWUpO1xuICAgKlxuICAgKiBgLm93blByb3BlcnR5RGVzY3JpcHRvcmAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhXG4gICAqIGN1c3RvbSBlcnJvciBtZXNzYWdlIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzb1xuICAgKiBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLiBXaGVuIG5vdCBwcm92aWRpbmdcbiAgICogYGRlc2NyaXB0b3JgLCBvbmx5IHVzZSB0aGUgc2Vjb25kIGZvcm0uXG4gICAqXG4gICAqICAgICAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaGF2ZS5vd25Qcm9wZXJ0eURlc2NyaXB0b3IoJ2EnLCB7XG4gICAqICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAqICAgICAgIHZhbHVlOiAyLFxuICAgKiAgICAgfSwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKlxuICAgKiAgICAgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YTogMX0sICdub29vIHdoeSBmYWlsPz8nKS50by5oYXZlLm93blByb3BlcnR5RGVzY3JpcHRvcignYScsIHtcbiAgICogICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgKiAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgKiAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICogICAgICAgdmFsdWU6IDIsXG4gICAqICAgICB9KTtcbiAgICpcbiAgICogICAgIC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoe2E6IDF9LCAnbm9vbyB3aHkgZmFpbD8/JykudG8uaGF2ZS5vd25Qcm9wZXJ0eURlc2NyaXB0b3IoJ2InKTtcbiAgICpcbiAgICogICAgIC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHthOiAxfSlcbiAgICogICAgICAgLnRvLmhhdmUub3duUHJvcGVydHlEZXNjcmlwdG9yKCdiJywgdW5kZWZpbmVkLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqXG4gICAqIFRoZSBhYm92ZSBhc3NlcnRpb24gaXNuJ3QgdGhlIHNhbWUgdGhpbmcgYXMgbm90IHByb3ZpZGluZyBgZGVzY3JpcHRvcmAuXG4gICAqIEluc3RlYWQsIGl0J3MgYXNzZXJ0aW5nIHRoYXQgdGhlIHRhcmdldCBvYmplY3QgaGFzIGEgYGJgIHByb3BlcnR5XG4gICAqIGRlc2NyaXB0b3IgdGhhdCdzIGRlZXBseSBlcXVhbCB0byBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogVGhlIGFsaWFzIGAuaGF2ZU93blByb3BlcnR5RGVzY3JpcHRvcmAgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGhcbiAgICogYC5vd25Qcm9wZXJ0eURlc2NyaXB0b3JgLlxuICAgKlxuICAgKiBAbmFtZSBvd25Qcm9wZXJ0eURlc2NyaXB0b3JcbiAgICogQGFsaWFzIGhhdmVPd25Qcm9wZXJ0eURlc2NyaXB0b3JcbiAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtPYmplY3R9IGRlc2NyaXB0b3IgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0T3duUHJvcGVydHlEZXNjcmlwdG9yIChuYW1lLCBkZXNjcmlwdG9yLCBtc2cpIHtcbiAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBtc2cgPSBkZXNjcmlwdG9yO1xuICAgICAgZGVzY3JpcHRvciA9IG51bGw7XG4gICAgfVxuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKTtcbiAgICB2YXIgYWN0dWFsRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0KG9iaiksIG5hbWUpO1xuICAgIGlmIChhY3R1YWxEZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IpIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIF8uZXFsKGRlc2NyaXB0b3IsIGFjdHVhbERlc2NyaXB0b3IpXG4gICAgICAgICwgJ2V4cGVjdGVkIHRoZSBvd24gcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgJyArIF8uaW5zcGVjdChuYW1lKSArICcgb24gI3t0aGlzfSB0byBtYXRjaCAnICsgXy5pbnNwZWN0KGRlc2NyaXB0b3IpICsgJywgZ290ICcgKyBfLmluc3BlY3QoYWN0dWFsRGVzY3JpcHRvcilcbiAgICAgICAgLCAnZXhwZWN0ZWQgdGhlIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciAnICsgXy5pbnNwZWN0KG5hbWUpICsgJyBvbiAje3RoaXN9IHRvIG5vdCBtYXRjaCAnICsgXy5pbnNwZWN0KGRlc2NyaXB0b3IpXG4gICAgICAgICwgZGVzY3JpcHRvclxuICAgICAgICAsIGFjdHVhbERlc2NyaXB0b3JcbiAgICAgICAgLCB0cnVlXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBhY3R1YWxEZXNjcmlwdG9yXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhbiBvd24gcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgJyArIF8uaW5zcGVjdChuYW1lKVxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIGFuIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciAnICsgXy5pbnNwZWN0KG5hbWUpXG4gICAgICApO1xuICAgIH1cbiAgICBmbGFnKHRoaXMsICdvYmplY3QnLCBhY3R1YWxEZXNjcmlwdG9yKTtcbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ293blByb3BlcnR5RGVzY3JpcHRvcicsIGFzc2VydE93blByb3BlcnR5RGVzY3JpcHRvcik7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2hhdmVPd25Qcm9wZXJ0eURlc2NyaXB0b3InLCBhc3NlcnRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpO1xuXG4gIC8qKlxuICAgKiAjIyMgLmxlbmd0aE9mKG5bLCBtc2ddKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCdzIGBsZW5ndGhgIG9yIGBzaXplYCBpcyBlcXVhbCB0byB0aGUgZ2l2ZW4gbnVtYmVyXG4gICAqIGBuYC5cbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubGVuZ3RoT2YoMyk7XG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmhhdmUubGVuZ3RoT2YoMyk7XG4gICAqICAgICBleHBlY3QobmV3IFNldChbMSwgMiwgM10pKS50by5oYXZlLmxlbmd0aE9mKDMpO1xuICAgKiAgICAgZXhwZWN0KG5ldyBNYXAoW1snYScsIDFdLCBbJ2InLCAyXSwgWydjJywgM11dKSkudG8uaGF2ZS5sZW5ndGhPZigzKTtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5sZW5ndGhPZmAuIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW5cbiAgICogYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0J3MgYGxlbmd0aGAgcHJvcGVydHkgaXMgZXF1YWwgdG8gaXRzIGV4cGVjdGVkXG4gICAqIHZhbHVlLCByYXRoZXIgdGhhbiBub3QgZXF1YWwgdG8gb25lIG9mIG1hbnkgdW5leHBlY3RlZCB2YWx1ZXMuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmhhdmUubGVuZ3RoT2YoMyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLm5vdC5oYXZlLmxlbmd0aE9mKDQpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogYC5sZW5ndGhPZmAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvclxuICAgKiBtZXNzYWdlIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhc1xuICAgKiB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGhPZigyLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uaGF2ZS5sZW5ndGhPZigyKTtcbiAgICpcbiAgICogYC5sZW5ndGhPZmAgY2FuIGFsc28gYmUgdXNlZCBhcyBhIGxhbmd1YWdlIGNoYWluLCBjYXVzaW5nIGFsbCBgLmFib3ZlYCxcbiAgICogYC5iZWxvd2AsIGAubGVhc3RgLCBgLm1vc3RgLCBhbmQgYC53aXRoaW5gIGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlXG4gICAqIGNoYWluIHRvIHVzZSB0aGUgdGFyZ2V0J3MgYGxlbmd0aGAgcHJvcGVydHkgYXMgdGhlIHRhcmdldC4gSG93ZXZlciwgaXQnc1xuICAgKiBvZnRlbiBiZXN0IHRvIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQncyBgbGVuZ3RoYCBwcm9wZXJ0eSBpcyBlcXVhbCB0byBpdHNcbiAgICogZXhwZWN0ZWQgbGVuZ3RoLCByYXRoZXIgdGhhbiBhc3NlcnRpbmcgdGhhdCBpdHMgYGxlbmd0aGAgcHJvcGVydHkgZmFsbHNcbiAgICogd2l0aGluIHNvbWUgcmFuZ2Ugb2YgdmFsdWVzLlxuICAgKlxuICAgKiAgICAgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubGVuZ3RoT2YoMyk7XG4gICAqXG4gICAqICAgICAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubGVuZ3RoT2YuYWJvdmUoMik7XG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mLmJlbG93KDQpO1xuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGhPZi5hdC5sZWFzdCgzKTtcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubGVuZ3RoT2YuYXQubW9zdCgzKTtcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubGVuZ3RoT2Yud2l0aGluKDIsNCk7XG4gICAqXG4gICAqIER1ZSB0byBhIGNvbXBhdGliaWxpdHkgaXNzdWUsIHRoZSBhbGlhcyBgLmxlbmd0aGAgY2FuJ3QgYmUgY2hhaW5lZCBkaXJlY3RseVxuICAgKiBvZmYgb2YgYW4gdW5pbnZva2VkIG1ldGhvZCBzdWNoIGFzIGAuYWAuIFRoZXJlZm9yZSwgYC5sZW5ndGhgIGNhbid0IGJlIHVzZWRcbiAgICogaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5sZW5ndGhPZmAgaW4gZXZlcnkgc2l0dWF0aW9uLiBJdCdzIHJlY29tbWVuZGVkIHRvXG4gICAqIGFsd2F5cyB1c2UgYC5sZW5ndGhPZmAgaW5zdGVhZCBvZiBgLmxlbmd0aGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmEubGVuZ3RoKDMpOyAvLyBpbmNvbXBhdGlibGU7IHRocm93cyBlcnJvclxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5hLmxlbmd0aE9mKDMpOyAgLy8gcGFzc2VzIGFzIGV4cGVjdGVkXG4gICAqXG4gICAqIEBuYW1lIGxlbmd0aE9mXG4gICAqIEBhbGlhcyBsZW5ndGhcbiAgICogQHBhcmFtIHtOdW1iZXJ9IG5cbiAgICogQHBhcmFtIHtTdHJpbmd9IG1zZyBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFzc2VydExlbmd0aENoYWluICgpIHtcbiAgICBmbGFnKHRoaXMsICdkb0xlbmd0aCcsIHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gYXNzZXJ0TGVuZ3RoIChuLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgb2JqVHlwZSA9IF8udHlwZShvYmopLnRvTG93ZXJDYXNlKClcbiAgICAgICwgZmxhZ01zZyA9IGZsYWcodGhpcywgJ21lc3NhZ2UnKVxuICAgICAgLCBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpXG4gICAgICAsIGRlc2NyaXB0b3IgPSAnbGVuZ3RoJ1xuICAgICAgLCBpdGVtc0NvdW50O1xuXG4gICAgc3dpdGNoIChvYmpUeXBlKSB7XG4gICAgICBjYXNlICdtYXAnOlxuICAgICAgY2FzZSAnc2V0JzpcbiAgICAgICAgZGVzY3JpcHRvciA9ICdzaXplJztcbiAgICAgICAgaXRlbXNDb3VudCA9IG9iai5zaXplO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KCdsZW5ndGgnKTtcbiAgICAgICAgaXRlbXNDb3VudCA9IG9iai5sZW5ndGg7XG4gICAgfVxuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIGl0ZW1zQ291bnQgPT0gblxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgJyArIGRlc2NyaXB0b3IgKyAnIG9mICN7ZXhwfSBidXQgZ290ICN7YWN0fSdcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgYSAnICsgZGVzY3JpcHRvciArICcgb2YgI3thY3R9J1xuICAgICAgLCBuXG4gICAgICAsIGl0ZW1zQ291bnRcbiAgICApO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZCgnbGVuZ3RoJywgYXNzZXJ0TGVuZ3RoLCBhc3NlcnRMZW5ndGhDaGFpbik7XG4gIEFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoJ2xlbmd0aE9mJywgYXNzZXJ0TGVuZ3RoLCBhc3NlcnRMZW5ndGhDaGFpbik7XG5cbiAgLyoqXG4gICAqICMjIyAubWF0Y2gocmVbLCBtc2ddKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBtYXRjaGVzIHRoZSBnaXZlbiByZWd1bGFyIGV4cHJlc3Npb24gYHJlYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vYmFyJykudG8ubWF0Y2goL15mb28vKTtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5tYXRjaGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2Zvb2JhcicpLnRvLm5vdC5tYXRjaCgvdGFjby8pO1xuICAgKlxuICAgKiBgLm1hdGNoYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2VcbiAgICogdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzIHRoZVxuICAgKiBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2Zvb2JhcicpLnRvLm1hdGNoKC90YWNvLywgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KCdmb29iYXInLCAnbm9vbyB3aHkgZmFpbD8/JykudG8ubWF0Y2goL3RhY28vKTtcbiAgICpcbiAgICogVGhlIGFsaWFzIGAubWF0Y2hlc2AgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5tYXRjaGAuXG4gICAqXG4gICAqIEBuYW1lIG1hdGNoXG4gICAqIEBhbGlhcyBtYXRjaGVzXG4gICAqIEBwYXJhbSB7UmVnRXhwfSByZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG4gIGZ1bmN0aW9uIGFzc2VydE1hdGNoKHJlLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIHJlLmV4ZWMob2JqKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBtYXRjaCAnICsgcmVcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gbm90IHRvIG1hdGNoICcgKyByZVxuICAgICk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdtYXRjaCcsIGFzc2VydE1hdGNoKTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnbWF0Y2hlcycsIGFzc2VydE1hdGNoKTtcblxuICAvKipcbiAgICogIyMjIC5zdHJpbmcoc3RyWywgbXNnXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgc3RyaW5nIGNvbnRhaW5zIHRoZSBnaXZlbiBzdWJzdHJpbmcgYHN0cmAuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2Zvb2JhcicpLnRvLmhhdmUuc3RyaW5nKCdiYXInKTtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5zdHJpbmdgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb29iYXInKS50by5ub3QuaGF2ZS5zdHJpbmcoJ3RhY28nKTtcbiAgICpcbiAgICogYC5zdHJpbmdgIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3JcbiAgICogbWVzc2FnZSB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXNcbiAgICogdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vYmFyJykudG8uaGF2ZS5zdHJpbmcoJ3RhY28nLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3QoJ2Zvb2JhcicsICdub29vIHdoeSBmYWlsPz8nKS50by5oYXZlLnN0cmluZygndGFjbycpO1xuICAgKlxuICAgKiBAbmFtZSBzdHJpbmdcbiAgICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnc3RyaW5nJywgZnVuY3Rpb24gKHN0ciwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIGZsYWdNc2cgPSBmbGFnKHRoaXMsICdtZXNzYWdlJylcbiAgICAgICwgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKTtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYSgnc3RyaW5nJyk7XG5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgfm9iai5pbmRleE9mKHN0cilcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gY29udGFpbiAnICsgXy5pbnNwZWN0KHN0cilcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGNvbnRhaW4gJyArIF8uaW5zcGVjdChzdHIpXG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAua2V5cyhrZXkxWywga2V5MlssIC4uLl1dKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBvYmplY3QsIGFycmF5LCBtYXAsIG9yIHNldCBoYXMgdGhlIGdpdmVuIGtleXMuIE9ubHlcbiAgICogdGhlIHRhcmdldCdzIG93biBpbmhlcml0ZWQgcHJvcGVydGllcyBhcmUgaW5jbHVkZWQgaW4gdGhlIHNlYXJjaC5cbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGFuIG9iamVjdCBvciBhcnJheSwga2V5cyBjYW4gYmUgcHJvdmlkZWQgYXMgb25lIG9yIG1vcmVcbiAgICogc3RyaW5nIGFyZ3VtZW50cywgYSBzaW5nbGUgYXJyYXkgYXJndW1lbnQsIG9yIGEgc2luZ2xlIG9iamVjdCBhcmd1bWVudC4gSW5cbiAgICogdGhlIGxhdHRlciBjYXNlLCBvbmx5IHRoZSBrZXlzIGluIHRoZSBnaXZlbiBvYmplY3QgbWF0dGVyOyB0aGUgdmFsdWVzIGFyZVxuICAgKiBpZ25vcmVkLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxLCBiOiAyfSkudG8uaGF2ZS5hbGwua2V5cygnYScsICdiJyk7XG4gICAqICAgICBleHBlY3QoWyd4JywgJ3knXSkudG8uaGF2ZS5hbGwua2V5cygwLCAxKTtcbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMn0pLnRvLmhhdmUuYWxsLmtleXMoWydhJywgJ2InXSk7XG4gICAqICAgICBleHBlY3QoWyd4JywgJ3knXSkudG8uaGF2ZS5hbGwua2V5cyhbMCwgMV0pO1xuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxLCBiOiAyfSkudG8uaGF2ZS5hbGwua2V5cyh7YTogNCwgYjogNX0pOyAvLyBpZ25vcmUgNCBhbmQgNVxuICAgKiAgICAgZXhwZWN0KFsneCcsICd5J10pLnRvLmhhdmUuYWxsLmtleXMoezA6IDQsIDE6IDV9KTsgLy8gaWdub3JlIDQgYW5kIDVcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGEgbWFwIG9yIHNldCwgZWFjaCBrZXkgbXVzdCBiZSBwcm92aWRlZCBhcyBhIHNlcGFyYXRlXG4gICAqIGFyZ3VtZW50LlxuICAgKlxuICAgKiAgICAgZXhwZWN0KG5ldyBNYXAoW1snYScsIDFdLCBbJ2InLCAyXV0pKS50by5oYXZlLmFsbC5rZXlzKCdhJywgJ2InKTtcbiAgICogICAgIGV4cGVjdChuZXcgU2V0KFsnYScsICdiJ10pKS50by5oYXZlLmFsbC5rZXlzKCdhJywgJ2InKTtcbiAgICpcbiAgICogQmVjYXVzZSBgLmtleXNgIGRvZXMgZGlmZmVyZW50IHRoaW5ncyBiYXNlZCBvbiB0aGUgdGFyZ2V0J3MgdHlwZSwgaXQnc1xuICAgKiBpbXBvcnRhbnQgdG8gY2hlY2sgdGhlIHRhcmdldCdzIHR5cGUgYmVmb3JlIHVzaW5nIGAua2V5c2AuIFNlZSB0aGUgYC5hYCBkb2NcbiAgICogZm9yIGluZm8gb24gdGVzdGluZyBhIHRhcmdldCdzIHR5cGUuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDEsIGI6IDJ9KS50by5iZS5hbignb2JqZWN0JykudGhhdC5oYXMuYWxsLmtleXMoJ2EnLCAnYicpO1xuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBzdHJpY3QgKGA9PT1gKSBlcXVhbGl0eSBpcyB1c2VkIHRvIGNvbXBhcmUga2V5cyBvZiBtYXBzIGFuZFxuICAgKiBzZXRzLiBBZGQgYC5kZWVwYCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byB1c2UgZGVlcCBlcXVhbGl0eSBpbnN0ZWFkLiBTZWVcbiAgICogdGhlIGBkZWVwLWVxbGAgcHJvamVjdCBwYWdlIGZvciBpbmZvIG9uIHRoZSBkZWVwIGVxdWFsaXR5IGFsZ29yaXRobTpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2NoYWlqcy9kZWVwLWVxbC5cbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBzZXQgZGVlcGx5IChidXQgbm90IHN0cmljdGx5KSBoYXMga2V5IGB7YTogMX1gXG4gICAqICAgICBleHBlY3QobmV3IFNldChbe2E6IDF9XSkpLnRvLmhhdmUuYWxsLmRlZXAua2V5cyhbe2E6IDF9XSk7XG4gICAqICAgICBleHBlY3QobmV3IFNldChbe2E6IDF9XSkpLnRvLm5vdC5oYXZlLmFsbC5rZXlzKFt7YTogMX1dKTtcbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhlIHRhcmdldCBtdXN0IGhhdmUgYWxsIG9mIHRoZSBnaXZlbiBrZXlzIGFuZCBubyBtb3JlLiBBZGRcbiAgICogYC5hbnlgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG9ubHkgcmVxdWlyZSB0aGF0IHRoZSB0YXJnZXQgaGF2ZSBhdCBsZWFzdFxuICAgKiBvbmUgb2YgdGhlIGdpdmVuIGtleXMuIEFsc28sIGFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlXG4gICAqIGAua2V5c2AuIEl0J3Mgb2Z0ZW4gYmVzdCB0byBhZGQgYC5hbnlgIHdoZW4gbmVnYXRpbmcgYC5rZXlzYCwgYW5kIHRvIHVzZVxuICAgKiBgLmFsbGAgd2hlbiBhc3NlcnRpbmcgYC5rZXlzYCB3aXRob3V0IG5lZ2F0aW9uLlxuICAgKlxuICAgKiBXaGVuIG5lZ2F0aW5nIGAua2V5c2AsIGAuYW55YCBpcyBwcmVmZXJyZWQgYmVjYXVzZSBgLm5vdC5hbnkua2V5c2AgYXNzZXJ0c1xuICAgKiBleGFjdGx5IHdoYXQncyBleHBlY3RlZCBvZiB0aGUgb3V0cHV0LCB3aGVyZWFzIGAubm90LmFsbC5rZXlzYCBjcmVhdGVzXG4gICAqIHVuY2VydGFpbiBleHBlY3RhdGlvbnMuXG4gICAqXG4gICAqICAgICAvLyBSZWNvbW1lbmRlZDsgYXNzZXJ0cyB0aGF0IHRhcmdldCBkb2Vzbid0IGhhdmUgYW55IG9mIHRoZSBnaXZlbiBrZXlzXG4gICAqICAgICBleHBlY3Qoe2E6IDEsIGI6IDJ9KS50by5ub3QuaGF2ZS5hbnkua2V5cygnYycsICdkJyk7XG4gICAqXG4gICAqICAgICAvLyBOb3QgcmVjb21tZW5kZWQ7IGFzc2VydHMgdGhhdCB0YXJnZXQgZG9lc24ndCBoYXZlIGFsbCBvZiB0aGUgZ2l2ZW5cbiAgICogICAgIC8vIGtleXMgYnV0IG1heSBvciBtYXkgbm90IGhhdmUgc29tZSBvZiB0aGVtXG4gICAqICAgICBleHBlY3Qoe2E6IDEsIGI6IDJ9KS50by5ub3QuaGF2ZS5hbGwua2V5cygnYycsICdkJyk7XG4gICAqXG4gICAqIFdoZW4gYXNzZXJ0aW5nIGAua2V5c2Agd2l0aG91dCBuZWdhdGlvbiwgYC5hbGxgIGlzIHByZWZlcnJlZCBiZWNhdXNlXG4gICAqIGAuYWxsLmtleXNgIGFzc2VydHMgZXhhY3RseSB3aGF0J3MgZXhwZWN0ZWQgb2YgdGhlIG91dHB1dCwgd2hlcmVhc1xuICAgKiBgLmFueS5rZXlzYCBjcmVhdGVzIHVuY2VydGFpbiBleHBlY3RhdGlvbnMuXG4gICAqXG4gICAqICAgICAvLyBSZWNvbW1lbmRlZDsgYXNzZXJ0cyB0aGF0IHRhcmdldCBoYXMgYWxsIHRoZSBnaXZlbiBrZXlzXG4gICAqICAgICBleHBlY3Qoe2E6IDEsIGI6IDJ9KS50by5oYXZlLmFsbC5rZXlzKCdhJywgJ2InKTtcbiAgICpcbiAgICogICAgIC8vIE5vdCByZWNvbW1lbmRlZDsgYXNzZXJ0cyB0aGF0IHRhcmdldCBoYXMgYXQgbGVhc3Qgb25lIG9mIHRoZSBnaXZlblxuICAgKiAgICAgLy8ga2V5cyBidXQgbWF5IG9yIG1heSBub3QgaGF2ZSBtb3JlIG9mIHRoZW1cbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMn0pLnRvLmhhdmUuYW55LmtleXMoJ2EnLCAnYicpO1xuICAgKlxuICAgKiBOb3RlIHRoYXQgYC5hbGxgIGlzIHVzZWQgYnkgZGVmYXVsdCB3aGVuIG5laXRoZXIgYC5hbGxgIG5vciBgLmFueWAgYXBwZWFyXG4gICAqIGVhcmxpZXIgaW4gdGhlIGNoYWluLiBIb3dldmVyLCBpdCdzIG9mdGVuIGJlc3QgdG8gYWRkIGAuYWxsYCBhbnl3YXkgYmVjYXVzZVxuICAgKiBpdCBpbXByb3ZlcyByZWFkYWJpbGl0eS5cbiAgICpcbiAgICogICAgIC8vIEJvdGggYXNzZXJ0aW9ucyBhcmUgaWRlbnRpY2FsXG4gICAqICAgICBleHBlY3Qoe2E6IDEsIGI6IDJ9KS50by5oYXZlLmFsbC5rZXlzKCdhJywgJ2InKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMn0pLnRvLmhhdmUua2V5cygnYScsICdiJyk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5pbmNsdWRlYCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byByZXF1aXJlIHRoYXQgdGhlIHRhcmdldCdzIGtleXMgYmUgYVxuICAgKiBzdXBlcnNldCBvZiB0aGUgZXhwZWN0ZWQga2V5cywgcmF0aGVyIHRoYW4gaWRlbnRpY2FsIHNldHMuXG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgb2JqZWN0J3Mga2V5cyBhcmUgYSBzdXBlcnNldCBvZiBbJ2EnLCAnYiddIGJ1dCBub3QgaWRlbnRpY2FsXG4gICAqICAgICBleHBlY3Qoe2E6IDEsIGI6IDIsIGM6IDN9KS50by5pbmNsdWRlLmFsbC5rZXlzKCdhJywgJ2InKTtcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMiwgYzogM30pLnRvLm5vdC5oYXZlLmFsbC5rZXlzKCdhJywgJ2InKTtcbiAgICpcbiAgICogSG93ZXZlciwgaWYgYC5hbnlgIGFuZCBgLmluY2x1ZGVgIGFyZSBjb21iaW5lZCwgb25seSB0aGUgYC5hbnlgIHRha2VzXG4gICAqIGVmZmVjdC4gVGhlIGAuaW5jbHVkZWAgaXMgaWdub3JlZCBpbiB0aGlzIGNhc2UuXG4gICAqXG4gICAqICAgICAvLyBCb3RoIGFzc2VydGlvbnMgYXJlIGlkZW50aWNhbFxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaGF2ZS5hbnkua2V5cygnYScsICdiJyk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5pbmNsdWRlLmFueS5rZXlzKCdhJywgJ2InKTtcbiAgICpcbiAgICogQSBjdXN0b20gZXJyb3IgbWVzc2FnZSBjYW4gYmUgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0sICdub29vIHdoeSBmYWlsPz8nKS50by5oYXZlLmtleSgnYicpO1xuICAgKlxuICAgKiBUaGUgYWxpYXMgYC5rZXlgIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoIGAua2V5c2AuXG4gICAqXG4gICAqIEBuYW1lIGtleXNcbiAgICogQGFsaWFzIGtleVxuICAgKiBAcGFyYW0gey4uLlN0cmluZ3xBcnJheXxPYmplY3R9IGtleXNcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0S2V5cyAoa2V5cykge1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBvYmpUeXBlID0gXy50eXBlKG9iailcbiAgICAgICwga2V5c1R5cGUgPSBfLnR5cGUoa2V5cylcbiAgICAgICwgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKVxuICAgICAgLCBpc0RlZXAgPSBmbGFnKHRoaXMsICdkZWVwJylcbiAgICAgICwgc3RyXG4gICAgICAsIGRlZXBTdHIgPSAnJ1xuICAgICAgLCBhY3R1YWxcbiAgICAgICwgb2sgPSB0cnVlXG4gICAgICAsIGZsYWdNc2cgPSBmbGFnKHRoaXMsICdtZXNzYWdlJyk7XG5cbiAgICBmbGFnTXNnID0gZmxhZ01zZyA/IGZsYWdNc2cgKyAnOiAnIDogJyc7XG4gICAgdmFyIG1peGVkQXJnc01zZyA9IGZsYWdNc2cgKyAnd2hlbiB0ZXN0aW5nIGtleXMgYWdhaW5zdCBhbiBvYmplY3Qgb3IgYW4gYXJyYXkgeW91IG11c3QgZ2l2ZSBhIHNpbmdsZSBBcnJheXxPYmplY3R8U3RyaW5nIGFyZ3VtZW50IG9yIG11bHRpcGxlIFN0cmluZyBhcmd1bWVudHMnO1xuXG4gICAgaWYgKG9ialR5cGUgPT09ICdNYXAnIHx8IG9ialR5cGUgPT09ICdTZXQnKSB7XG4gICAgICBkZWVwU3RyID0gaXNEZWVwID8gJ2RlZXBseSAnIDogJyc7XG4gICAgICBhY3R1YWwgPSBbXTtcblxuICAgICAgLy8gTWFwIGFuZCBTZXQgJy5rZXlzJyBhcmVuJ3Qgc3VwcG9ydGVkIGluIElFIDExLiBUaGVyZWZvcmUsIHVzZSAuZm9yRWFjaC5cbiAgICAgIG9iai5mb3JFYWNoKGZ1bmN0aW9uICh2YWwsIGtleSkgeyBhY3R1YWwucHVzaChrZXkpIH0pO1xuXG4gICAgICBpZiAoa2V5c1R5cGUgIT09ICdBcnJheScpIHtcbiAgICAgICAga2V5cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjdHVhbCA9IF8uZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXMob2JqKTtcblxuICAgICAgc3dpdGNoIChrZXlzVHlwZSkge1xuICAgICAgICBjYXNlICdBcnJheSc6XG4gICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobWl4ZWRBcmdzTXNnLCB1bmRlZmluZWQsIHNzZmkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnT2JqZWN0JzpcbiAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtaXhlZEFyZ3NNc2csIHVuZGVmaW5lZCwgc3NmaSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyhrZXlzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBrZXlzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgLy8gT25seSBzdHJpbmdpZnkgbm9uLVN5bWJvbHMgYmVjYXVzZSBTeW1ib2xzIHdvdWxkIGJlY29tZSBcIlN5bWJvbCgpXCJcbiAgICAgIGtleXMgPSBrZXlzLm1hcChmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3ltYm9sJyA/IHZhbCA6IFN0cmluZyh2YWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFrZXlzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGZsYWdNc2cgKyAna2V5cyByZXF1aXJlZCcsIHVuZGVmaW5lZCwgc3NmaSk7XG4gICAgfVxuXG4gICAgdmFyIGxlbiA9IGtleXMubGVuZ3RoXG4gICAgICAsIGFueSA9IGZsYWcodGhpcywgJ2FueScpXG4gICAgICAsIGFsbCA9IGZsYWcodGhpcywgJ2FsbCcpXG4gICAgICAsIGV4cGVjdGVkID0ga2V5cztcblxuICAgIGlmICghYW55ICYmICFhbGwpIHtcbiAgICAgIGFsbCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gSGFzIGFueVxuICAgIGlmIChhbnkpIHtcbiAgICAgIG9rID0gZXhwZWN0ZWQuc29tZShmdW5jdGlvbihleHBlY3RlZEtleSkge1xuICAgICAgICByZXR1cm4gYWN0dWFsLnNvbWUoZnVuY3Rpb24oYWN0dWFsS2V5KSB7XG4gICAgICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICAgICAgcmV0dXJuIF8uZXFsKGV4cGVjdGVkS2V5LCBhY3R1YWxLZXkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWRLZXkgPT09IGFjdHVhbEtleTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSGFzIGFsbFxuICAgIGlmIChhbGwpIHtcbiAgICAgIG9rID0gZXhwZWN0ZWQuZXZlcnkoZnVuY3Rpb24oZXhwZWN0ZWRLZXkpIHtcbiAgICAgICAgcmV0dXJuIGFjdHVhbC5zb21lKGZ1bmN0aW9uKGFjdHVhbEtleSkge1xuICAgICAgICAgIGlmIChpc0RlZXApIHtcbiAgICAgICAgICAgIHJldHVybiBfLmVxbChleHBlY3RlZEtleSwgYWN0dWFsS2V5KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkS2V5ID09PSBhY3R1YWxLZXk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIWZsYWcodGhpcywgJ2NvbnRhaW5zJykpIHtcbiAgICAgICAgb2sgPSBvayAmJiBrZXlzLmxlbmd0aCA9PSBhY3R1YWwubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEtleSBzdHJpbmdcbiAgICBpZiAobGVuID4gMSkge1xuICAgICAga2V5cyA9IGtleXMubWFwKGZ1bmN0aW9uKGtleSkge1xuICAgICAgICByZXR1cm4gXy5pbnNwZWN0KGtleSk7XG4gICAgICB9KTtcbiAgICAgIHZhciBsYXN0ID0ga2V5cy5wb3AoKTtcbiAgICAgIGlmIChhbGwpIHtcbiAgICAgICAgc3RyID0ga2V5cy5qb2luKCcsICcpICsgJywgYW5kICcgKyBsYXN0O1xuICAgICAgfVxuICAgICAgaWYgKGFueSkge1xuICAgICAgICBzdHIgPSBrZXlzLmpvaW4oJywgJykgKyAnLCBvciAnICsgbGFzdDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RyID0gXy5pbnNwZWN0KGtleXNbMF0pO1xuICAgIH1cblxuICAgIC8vIEZvcm1cbiAgICBzdHIgPSAobGVuID4gMSA/ICdrZXlzICcgOiAna2V5ICcpICsgc3RyO1xuXG4gICAgLy8gSGF2ZSAvIGluY2x1ZGVcbiAgICBzdHIgPSAoZmxhZyh0aGlzLCAnY29udGFpbnMnKSA/ICdjb250YWluICcgOiAnaGF2ZSAnKSArIHN0cjtcblxuICAgIC8vIEFzc2VydGlvblxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICBva1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byAnICsgZGVlcFN0ciArIHN0clxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgJyArIGRlZXBTdHIgKyBzdHJcbiAgICAgICwgZXhwZWN0ZWQuc2xpY2UoMCkuc29ydChfLmNvbXBhcmVCeUluc3BlY3QpXG4gICAgICAsIGFjdHVhbC5zb3J0KF8uY29tcGFyZUJ5SW5zcGVjdClcbiAgICAgICwgdHJ1ZVxuICAgICk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdrZXlzJywgYXNzZXJ0S2V5cyk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2tleScsIGFzc2VydEtleXMpO1xuXG4gIC8qKlxuICAgKiAjIyMgLnRocm93KFtlcnJvckxpa2VdLCBbZXJyTXNnTWF0Y2hlcl0sIFttc2ddKVxuICAgKlxuICAgKiBXaGVuIG5vIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQsIGAudGhyb3dgIGludm9rZXMgdGhlIHRhcmdldCBmdW5jdGlvbiBhbmRcbiAgICogYXNzZXJ0cyB0aGF0IGFuIGVycm9yIGlzIHRocm93bi5cbiAgICpcbiAgICogICAgIHZhciBiYWRGbiA9IGZ1bmN0aW9uICgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBzYWxtb24hJyk7IH07XG4gICAqXG4gICAqICAgICBleHBlY3QoYmFkRm4pLnRvLnRocm93KCk7XG4gICAqXG4gICAqIFdoZW4gb25lIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCBhbmQgaXQncyBhbiBlcnJvciBjb25zdHJ1Y3RvciwgYC50aHJvd2BcbiAgICogaW52b2tlcyB0aGUgdGFyZ2V0IGZ1bmN0aW9uIGFuZCBhc3NlcnRzIHRoYXQgYW4gZXJyb3IgaXMgdGhyb3duIHRoYXQncyBhblxuICAgKiBpbnN0YW5jZSBvZiB0aGF0IGVycm9yIGNvbnN0cnVjdG9yLlxuICAgKlxuICAgKiAgICAgdmFyIGJhZEZuID0gZnVuY3Rpb24gKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIHNhbG1vbiEnKTsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChiYWRGbikudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICpcbiAgICogV2hlbiBvbmUgYXJndW1lbnQgaXMgcHJvdmlkZWQsIGFuZCBpdCdzIGFuIGVycm9yIGluc3RhbmNlLCBgLnRocm93YCBpbnZva2VzXG4gICAqIHRoZSB0YXJnZXQgZnVuY3Rpb24gYW5kIGFzc2VydHMgdGhhdCBhbiBlcnJvciBpcyB0aHJvd24gdGhhdCdzIHN0cmljdGx5XG4gICAqIChgPT09YCkgZXF1YWwgdG8gdGhhdCBlcnJvciBpbnN0YW5jZS5cbiAgICpcbiAgICogICAgIHZhciBlcnIgPSBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIHNhbG1vbiEnKTtcbiAgICogICAgIHZhciBiYWRGbiA9IGZ1bmN0aW9uICgpIHsgdGhyb3cgZXJyOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGJhZEZuKS50by50aHJvdyhlcnIpO1xuICAgKlxuICAgKiBXaGVuIG9uZSBhcmd1bWVudCBpcyBwcm92aWRlZCwgYW5kIGl0J3MgYSBzdHJpbmcsIGAudGhyb3dgIGludm9rZXMgdGhlXG4gICAqIHRhcmdldCBmdW5jdGlvbiBhbmQgYXNzZXJ0cyB0aGF0IGFuIGVycm9yIGlzIHRocm93biB3aXRoIGEgbWVzc2FnZSB0aGF0XG4gICAqIGNvbnRhaW5zIHRoYXQgc3RyaW5nLlxuICAgKlxuICAgKiAgICAgdmFyIGJhZEZuID0gZnVuY3Rpb24gKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIHNhbG1vbiEnKTsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChiYWRGbikudG8udGhyb3coJ3NhbG1vbicpO1xuICAgKlxuICAgKiBXaGVuIG9uZSBhcmd1bWVudCBpcyBwcm92aWRlZCwgYW5kIGl0J3MgYSByZWd1bGFyIGV4cHJlc3Npb24sIGAudGhyb3dgXG4gICAqIGludm9rZXMgdGhlIHRhcmdldCBmdW5jdGlvbiBhbmQgYXNzZXJ0cyB0aGF0IGFuIGVycm9yIGlzIHRocm93biB3aXRoIGFcbiAgICogbWVzc2FnZSB0aGF0IG1hdGNoZXMgdGhhdCByZWd1bGFyIGV4cHJlc3Npb24uXG4gICAqXG4gICAqICAgICB2YXIgYmFkRm4gPSBmdW5jdGlvbiAoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0lsbGVnYWwgc2FsbW9uIScpOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGJhZEZuKS50by50aHJvdygvc2FsbW9uLyk7XG4gICAqXG4gICAqIFdoZW4gdHdvIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQsIGFuZCB0aGUgZmlyc3QgaXMgYW4gZXJyb3IgaW5zdGFuY2Ugb3JcbiAgICogY29uc3RydWN0b3IsIGFuZCB0aGUgc2Vjb25kIGlzIGEgc3RyaW5nIG9yIHJlZ3VsYXIgZXhwcmVzc2lvbiwgYC50aHJvd2BcbiAgICogaW52b2tlcyB0aGUgZnVuY3Rpb24gYW5kIGFzc2VydHMgdGhhdCBhbiBlcnJvciBpcyB0aHJvd24gdGhhdCBmdWxmaWxscyBib3RoXG4gICAqIGNvbmRpdGlvbnMgYXMgZGVzY3JpYmVkIGFib3ZlLlxuICAgKlxuICAgKiAgICAgdmFyIGVyciA9IG5ldyBUeXBlRXJyb3IoJ0lsbGVnYWwgc2FsbW9uIScpO1xuICAgKiAgICAgdmFyIGJhZEZuID0gZnVuY3Rpb24gKCkgeyB0aHJvdyBlcnI7IH07XG4gICAqXG4gICAqICAgICBleHBlY3QoYmFkRm4pLnRvLnRocm93KFR5cGVFcnJvciwgJ3NhbG1vbicpO1xuICAgKiAgICAgZXhwZWN0KGJhZEZuKS50by50aHJvdyhUeXBlRXJyb3IsIC9zYWxtb24vKTtcbiAgICogICAgIGV4cGVjdChiYWRGbikudG8udGhyb3coZXJyLCAnc2FsbW9uJyk7XG4gICAqICAgICBleHBlY3QoYmFkRm4pLnRvLnRocm93KGVyciwgL3NhbG1vbi8pO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLnRocm93YC5cbiAgICpcbiAgICogICAgIHZhciBnb29kRm4gPSBmdW5jdGlvbiAoKSB7fTtcbiAgICpcbiAgICogICAgIGV4cGVjdChnb29kRm4pLnRvLm5vdC50aHJvdygpO1xuICAgKlxuICAgKiBIb3dldmVyLCBpdCdzIGRhbmdlcm91cyB0byBuZWdhdGUgYC50aHJvd2Agd2hlbiBwcm92aWRpbmcgYW55IGFyZ3VtZW50cy5cbiAgICogVGhlIHByb2JsZW0gaXMgdGhhdCBpdCBjcmVhdGVzIHVuY2VydGFpbiBleHBlY3RhdGlvbnMgYnkgYXNzZXJ0aW5nIHRoYXQgdGhlXG4gICAqIHRhcmdldCBlaXRoZXIgZG9lc24ndCB0aHJvdyBhbiBlcnJvciwgb3IgdGhhdCBpdCB0aHJvd3MgYW4gZXJyb3IgYnV0IG9mIGFcbiAgICogZGlmZmVyZW50IHR5cGUgdGhhbiB0aGUgZ2l2ZW4gdHlwZSwgb3IgdGhhdCBpdCB0aHJvd3MgYW4gZXJyb3Igb2YgdGhlIGdpdmVuXG4gICAqIHR5cGUgYnV0IHdpdGggYSBtZXNzYWdlIHRoYXQgZG9lc24ndCBpbmNsdWRlIHRoZSBnaXZlbiBzdHJpbmcuIEl0J3Mgb2Z0ZW5cbiAgICogYmVzdCB0byBpZGVudGlmeSB0aGUgZXhhY3Qgb3V0cHV0IHRoYXQncyBleHBlY3RlZCwgYW5kIHRoZW4gd3JpdGUgYW5cbiAgICogYXNzZXJ0aW9uIHRoYXQgb25seSBhY2NlcHRzIHRoYXQgZXhhY3Qgb3V0cHV0LlxuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgaXNuJ3QgZXhwZWN0ZWQgdG8gdGhyb3cgYW4gZXJyb3IsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnRcbiAgICogZXhhY3RseSB0aGF0LlxuICAgKlxuICAgKiAgICAgdmFyIGdvb2RGbiA9IGZ1bmN0aW9uICgpIHt9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGdvb2RGbikudG8ubm90LnRocm93KCk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoZ29vZEZuKS50by5ub3QudGhyb3coUmVmZXJlbmNlRXJyb3IsICd4Jyk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgaXMgZXhwZWN0ZWQgdG8gdGhyb3cgYW4gZXJyb3IsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnRcbiAgICogdGhhdCB0aGUgZXJyb3IgaXMgb2YgaXRzIGV4cGVjdGVkIHR5cGUsIGFuZCBoYXMgYSBtZXNzYWdlIHRoYXQgaW5jbHVkZXMgYW5cbiAgICogZXhwZWN0ZWQgc3RyaW5nLCByYXRoZXIgdGhhbiBhc3NlcnRpbmcgdGhhdCBpdCBkb2Vzbid0IGhhdmUgb25lIG9mIG1hbnlcbiAgICogdW5leHBlY3RlZCB0eXBlcywgYW5kIGRvZXNuJ3QgaGF2ZSBhIG1lc3NhZ2UgdGhhdCBpbmNsdWRlcyBzb21lIHN0cmluZy5cbiAgICpcbiAgICogICAgIHZhciBiYWRGbiA9IGZ1bmN0aW9uICgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBzYWxtb24hJyk7IH07XG4gICAqXG4gICAqICAgICBleHBlY3QoYmFkRm4pLnRvLnRocm93KFR5cGVFcnJvciwgJ3NhbG1vbicpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KGJhZEZuKS50by5ub3QudGhyb3coUmVmZXJlbmNlRXJyb3IsICd4Jyk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBgLnRocm93YCBjaGFuZ2VzIHRoZSB0YXJnZXQgb2YgYW55IGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluIHRvXG4gICAqIGJlIHRoZSBlcnJvciBvYmplY3QgdGhhdCdzIHRocm93bi5cbiAgICpcbiAgICogICAgIHZhciBlcnIgPSBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIHNhbG1vbiEnKTtcbiAgICogICAgIGVyci5jb2RlID0gNDI7XG4gICAqICAgICB2YXIgYmFkRm4gPSBmdW5jdGlvbiAoKSB7IHRocm93IGVycjsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChiYWRGbikudG8udGhyb3coVHlwZUVycm9yKS53aXRoLnByb3BlcnR5KCdjb2RlJywgNDIpO1xuICAgKlxuICAgKiBgLnRocm93YCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2VcbiAgICogdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzIHRoZVxuICAgKiBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuIFdoZW4gbm90IHByb3ZpZGluZyB0d28gYXJndW1lbnRzLCBhbHdheXMgdXNlXG4gICAqIHRoZSBzZWNvbmQgZm9ybS5cbiAgICpcbiAgICogICAgIHZhciBnb29kRm4gPSBmdW5jdGlvbiAoKSB7fTtcbiAgICpcbiAgICogICAgIGV4cGVjdChnb29kRm4pLnRvLnRocm93KFR5cGVFcnJvciwgJ3gnLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3QoZ29vZEZuLCAnbm9vbyB3aHkgZmFpbD8/JykudG8udGhyb3coKTtcbiAgICpcbiAgICogRHVlIHRvIGxpbWl0YXRpb25zIGluIEVTNSwgYC50aHJvd2AgbWF5IG5vdCBhbHdheXMgd29yayBhcyBleHBlY3RlZCB3aGVuXG4gICAqIHVzaW5nIGEgdHJhbnNwaWxlciBzdWNoIGFzIEJhYmVsIG9yIFR5cGVTY3JpcHQuIEluIHBhcnRpY3VsYXIsIGl0IG1heVxuICAgKiBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cyB3aGVuIHN1YmNsYXNzaW5nIHRoZSBidWlsdC1pbiBgRXJyb3JgIG9iamVjdCBhbmRcbiAgICogdGhlbiBwYXNzaW5nIHRoZSBzdWJjbGFzc2VkIGNvbnN0cnVjdG9yIHRvIGAudGhyb3dgLiBTZWUgeW91ciB0cmFuc3BpbGVyJ3NcbiAgICogZG9jcyBmb3IgZGV0YWlsczpcbiAgICpcbiAgICogLSAoW0JhYmVsXShodHRwczovL2JhYmVsanMuaW8vZG9jcy91c2FnZS9jYXZlYXRzLyNjbGFzc2VzKSlcbiAgICogLSAoW1R5cGVTY3JpcHRdKGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC93aWtpL0JyZWFraW5nLUNoYW5nZXMjZXh0ZW5kaW5nLWJ1aWx0LWlucy1saWtlLWVycm9yLWFycmF5LWFuZC1tYXAtbWF5LW5vLWxvbmdlci13b3JrKSlcbiAgICpcbiAgICogQmV3YXJlIG9mIHNvbWUgY29tbW9uIG1pc3Rha2VzIHdoZW4gdXNpbmcgdGhlIGB0aHJvd2AgYXNzZXJ0aW9uLiBPbmUgY29tbW9uXG4gICAqIG1pc3Rha2UgaXMgdG8gYWNjaWRlbnRhbGx5IGludm9rZSB0aGUgZnVuY3Rpb24geW91cnNlbGYgaW5zdGVhZCBvZiBsZXR0aW5nXG4gICAqIHRoZSBgdGhyb3dgIGFzc2VydGlvbiBpbnZva2UgdGhlIGZ1bmN0aW9uIGZvciB5b3UuIEZvciBleGFtcGxlLCB3aGVuXG4gICAqIHRlc3RpbmcgaWYgYSBmdW5jdGlvbiBuYW1lZCBgZm5gIHRocm93cywgcHJvdmlkZSBgZm5gIGluc3RlYWQgb2YgYGZuKClgIGFzXG4gICAqIHRoZSB0YXJnZXQgZm9yIHRoZSBhc3NlcnRpb24uXG4gICAqXG4gICAqICAgICBleHBlY3QoZm4pLnRvLnRocm93KCk7ICAgICAvLyBHb29kISBUZXN0cyBgZm5gIGFzIGRlc2lyZWRcbiAgICogICAgIGV4cGVjdChmbigpKS50by50aHJvdygpOyAgIC8vIEJhZCEgVGVzdHMgcmVzdWx0IG9mIGBmbigpYCwgbm90IGBmbmBcbiAgICpcbiAgICogSWYgeW91IG5lZWQgdG8gYXNzZXJ0IHRoYXQgeW91ciBmdW5jdGlvbiBgZm5gIHRocm93cyB3aGVuIHBhc3NlZCBjZXJ0YWluXG4gICAqIGFyZ3VtZW50cywgdGhlbiB3cmFwIGEgY2FsbCB0byBgZm5gIGluc2lkZSBvZiBhbm90aGVyIGZ1bmN0aW9uLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KGZ1bmN0aW9uICgpIHsgZm4oNDIpOyB9KS50by50aHJvdygpOyAgLy8gRnVuY3Rpb24gZXhwcmVzc2lvblxuICAgKiAgICAgZXhwZWN0KCgpID0+IGZuKDQyKSkudG8udGhyb3coKTsgICAgICAgICAgICAgLy8gRVM2IGFycm93IGZ1bmN0aW9uXG4gICAqXG4gICAqIEFub3RoZXIgY29tbW9uIG1pc3Rha2UgaXMgdG8gcHJvdmlkZSBhbiBvYmplY3QgbWV0aG9kIChvciBhbnkgc3RhbmQtYWxvbmVcbiAgICogZnVuY3Rpb24gdGhhdCByZWxpZXMgb24gYHRoaXNgKSBhcyB0aGUgdGFyZ2V0IG9mIHRoZSBhc3NlcnRpb24uIERvaW5nIHNvIGlzXG4gICAqIHByb2JsZW1hdGljIGJlY2F1c2UgdGhlIGB0aGlzYCBjb250ZXh0IHdpbGwgYmUgbG9zdCB3aGVuIHRoZSBmdW5jdGlvbiBpc1xuICAgKiBpbnZva2VkIGJ5IGAudGhyb3dgOyB0aGVyZSdzIG5vIHdheSBmb3IgaXQgdG8ga25vdyB3aGF0IGB0aGlzYCBpcyBzdXBwb3NlZFxuICAgKiB0byBiZS4gVGhlcmUgYXJlIHR3byB3YXlzIGFyb3VuZCB0aGlzIHByb2JsZW0uIE9uZSBzb2x1dGlvbiBpcyB0byB3cmFwIHRoZVxuICAgKiBtZXRob2Qgb3IgZnVuY3Rpb24gY2FsbCBpbnNpZGUgb2YgYW5vdGhlciBmdW5jdGlvbi4gQW5vdGhlciBzb2x1dGlvbiBpcyB0b1xuICAgKiB1c2UgYGJpbmRgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KGZ1bmN0aW9uICgpIHsgY2F0Lm1lb3coKTsgfSkudG8udGhyb3coKTsgIC8vIEZ1bmN0aW9uIGV4cHJlc3Npb25cbiAgICogICAgIGV4cGVjdCgoKSA9PiBjYXQubWVvdygpKS50by50aHJvdygpOyAgICAgICAgICAgICAvLyBFUzYgYXJyb3cgZnVuY3Rpb25cbiAgICogICAgIGV4cGVjdChjYXQubWVvdy5iaW5kKGNhdCkpLnRvLnRocm93KCk7ICAgICAgICAgICAvLyBCaW5kXG4gICAqXG4gICAqIEZpbmFsbHksIGl0J3Mgd29ydGggbWVudGlvbmluZyB0aGF0IGl0J3MgYSBiZXN0IHByYWN0aWNlIGluIEphdmFTY3JpcHQgdG9cbiAgICogb25seSB0aHJvdyBgRXJyb3JgIGFuZCBkZXJpdmF0aXZlcyBvZiBgRXJyb3JgIHN1Y2ggYXMgYFJlZmVyZW5jZUVycm9yYCxcbiAgICogYFR5cGVFcnJvcmAsIGFuZCB1c2VyLWRlZmluZWQgb2JqZWN0cyB0aGF0IGV4dGVuZCBgRXJyb3JgLiBObyBvdGhlciB0eXBlIG9mXG4gICAqIHZhbHVlIHdpbGwgZ2VuZXJhdGUgYSBzdGFjayB0cmFjZSB3aGVuIGluaXRpYWxpemVkLiBXaXRoIHRoYXQgc2FpZCwgdGhlXG4gICAqIGB0aHJvd2AgYXNzZXJ0aW9uIGRvZXMgdGVjaG5pY2FsbHkgc3VwcG9ydCBhbnkgdHlwZSBvZiB2YWx1ZSBiZWluZyB0aHJvd24sXG4gICAqIG5vdCBqdXN0IGBFcnJvcmAgYW5kIGl0cyBkZXJpdmF0aXZlcy5cbiAgICpcbiAgICogVGhlIGFsaWFzZXMgYC50aHJvd3NgIGFuZCBgLlRocm93YCBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgd2l0aFxuICAgKiBgLnRocm93YC5cbiAgICpcbiAgICogQG5hbWUgdGhyb3dcbiAgICogQGFsaWFzIHRocm93c1xuICAgKiBAYWxpYXMgVGhyb3dcbiAgICogQHBhcmFtIHtFcnJvcnxFcnJvckNvbnN0cnVjdG9yfSBlcnJvckxpa2VcbiAgICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfSBlcnJNc2dNYXRjaGVyIGVycm9yIG1lc3NhZ2VcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1zZyBfb3B0aW9uYWxfXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRXJyb3IjRXJyb3JfdHlwZXNcbiAgICogQHJldHVybnMgZXJyb3IgZm9yIGNoYWluaW5nIChudWxsIGlmIG5vIGVycm9yKVxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnRUaHJvd3MgKGVycm9yTGlrZSwgZXJyTXNnTWF0Y2hlciwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJylcbiAgICAgICwgZmxhZ01zZyA9IGZsYWcodGhpcywgJ21lc3NhZ2UnKVxuICAgICAgLCBuZWdhdGUgPSBmbGFnKHRoaXMsICduZWdhdGUnKSB8fCBmYWxzZTtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYSgnZnVuY3Rpb24nKTtcblxuICAgIGlmIChlcnJvckxpa2UgaW5zdGFuY2VvZiBSZWdFeHAgfHwgdHlwZW9mIGVycm9yTGlrZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVyck1zZ01hdGNoZXIgPSBlcnJvckxpa2U7XG4gICAgICBlcnJvckxpa2UgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBjYXVnaHRFcnI7XG4gICAgdHJ5IHtcbiAgICAgIG9iaigpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2F1Z2h0RXJyID0gZXJyO1xuICAgIH1cblxuICAgIC8vIElmIHdlIGhhdmUgdGhlIG5lZ2F0ZSBmbGFnIGVuYWJsZWQgYW5kIGF0IGxlYXN0IG9uZSB2YWxpZCBhcmd1bWVudCBpdCBtZWFucyB3ZSBkbyBleHBlY3QgYW4gZXJyb3JcbiAgICAvLyBidXQgd2Ugd2FudCBpdCB0byBtYXRjaCBhIGdpdmVuIHNldCBvZiBjcml0ZXJpYVxuICAgIHZhciBldmVyeUFyZ0lzVW5kZWZpbmVkID0gZXJyb3JMaWtlID09PSB1bmRlZmluZWQgJiYgZXJyTXNnTWF0Y2hlciA9PT0gdW5kZWZpbmVkO1xuXG4gICAgLy8gSWYgd2UndmUgZ290IHRoZSBuZWdhdGUgZmxhZyBlbmFibGVkIGFuZCBib3RoIGFyZ3MsIHdlIHNob3VsZCBvbmx5IGZhaWwgaWYgYm90aCBhcmVuJ3QgY29tcGF0aWJsZVxuICAgIC8vIFNlZSBJc3N1ZSAjNTUxIGFuZCBQUiAjNjgzQEdpdEh1YlxuICAgIHZhciBldmVyeUFyZ0lzRGVmaW5lZCA9IEJvb2xlYW4oZXJyb3JMaWtlICYmIGVyck1zZ01hdGNoZXIpO1xuICAgIHZhciBlcnJvckxpa2VGYWlsID0gZmFsc2U7XG4gICAgdmFyIGVyck1zZ01hdGNoZXJGYWlsID0gZmFsc2U7XG5cbiAgICAvLyBDaGVja2luZyBpZiBlcnJvciB3YXMgdGhyb3duXG4gICAgaWYgKGV2ZXJ5QXJnSXNVbmRlZmluZWQgfHwgIWV2ZXJ5QXJnSXNVbmRlZmluZWQgJiYgIW5lZ2F0ZSkge1xuICAgICAgLy8gV2UgbmVlZCB0aGlzIHRvIGRpc3BsYXkgcmVzdWx0cyBjb3JyZWN0bHkgYWNjb3JkaW5nIHRvIHRoZWlyIHR5cGVzXG4gICAgICB2YXIgZXJyb3JMaWtlU3RyaW5nID0gJ2FuIGVycm9yJztcbiAgICAgIGlmIChlcnJvckxpa2UgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBlcnJvckxpa2VTdHJpbmcgPSAnI3tleHB9JztcbiAgICAgIH0gZWxzZSBpZiAoZXJyb3JMaWtlKSB7XG4gICAgICAgIGVycm9yTGlrZVN0cmluZyA9IF8uY2hlY2tFcnJvci5nZXRDb25zdHJ1Y3Rvck5hbWUoZXJyb3JMaWtlKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgY2F1Z2h0RXJyXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgJyArIGVycm9yTGlrZVN0cmluZ1xuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCB0aHJvdyBhbiBlcnJvciBidXQgI3thY3R9IHdhcyB0aHJvd24nXG4gICAgICAgICwgZXJyb3JMaWtlICYmIGVycm9yTGlrZS50b1N0cmluZygpXG4gICAgICAgICwgKGNhdWdodEVyciBpbnN0YW5jZW9mIEVycm9yID9cbiAgICAgICAgICAgIGNhdWdodEVyci50b1N0cmluZygpIDogKHR5cGVvZiBjYXVnaHRFcnIgPT09ICdzdHJpbmcnID8gY2F1Z2h0RXJyIDogY2F1Z2h0RXJyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmNoZWNrRXJyb3IuZ2V0Q29uc3RydWN0b3JOYW1lKGNhdWdodEVycikpKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3JMaWtlICYmIGNhdWdodEVycikge1xuICAgICAgLy8gV2Ugc2hvdWxkIGNvbXBhcmUgaW5zdGFuY2VzIG9ubHkgaWYgYGVycm9yTGlrZWAgaXMgYW4gaW5zdGFuY2Ugb2YgYEVycm9yYFxuICAgICAgaWYgKGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHZhciBpc0NvbXBhdGlibGVJbnN0YW5jZSA9IF8uY2hlY2tFcnJvci5jb21wYXRpYmxlSW5zdGFuY2UoY2F1Z2h0RXJyLCBlcnJvckxpa2UpO1xuXG4gICAgICAgIGlmIChpc0NvbXBhdGlibGVJbnN0YW5jZSA9PT0gbmVnYXRlKSB7XG4gICAgICAgICAgLy8gVGhlc2UgY2hlY2tzIHdlcmUgY3JlYXRlZCB0byBlbnN1cmUgd2Ugd29uJ3QgZmFpbCB0b28gc29vbiB3aGVuIHdlJ3ZlIGdvdCBib3RoIGFyZ3MgYW5kIGEgbmVnYXRlXG4gICAgICAgICAgLy8gU2VlIElzc3VlICM1NTEgYW5kIFBSICM2ODNAR2l0SHViXG4gICAgICAgICAgaWYgKGV2ZXJ5QXJnSXNEZWZpbmVkICYmIG5lZ2F0ZSkge1xuICAgICAgICAgICAgZXJyb3JMaWtlRmFpbCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgIG5lZ2F0ZVxuICAgICAgICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIHRocm93ICN7ZXhwfSBidXQgI3thY3R9IHdhcyB0aHJvd24nXG4gICAgICAgICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IHRocm93ICN7ZXhwfScgKyAoY2F1Z2h0RXJyICYmICFuZWdhdGUgPyAnIGJ1dCAje2FjdH0gd2FzIHRocm93bicgOiAnJylcbiAgICAgICAgICAgICAgLCBlcnJvckxpa2UudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAsIGNhdWdodEVyci50b1N0cmluZygpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgaXNDb21wYXRpYmxlQ29uc3RydWN0b3IgPSBfLmNoZWNrRXJyb3IuY29tcGF0aWJsZUNvbnN0cnVjdG9yKGNhdWdodEVyciwgZXJyb3JMaWtlKTtcbiAgICAgIGlmIChpc0NvbXBhdGlibGVDb25zdHJ1Y3RvciA9PT0gbmVnYXRlKSB7XG4gICAgICAgIGlmIChldmVyeUFyZ0lzRGVmaW5lZCAmJiBuZWdhdGUpIHtcbiAgICAgICAgICAgIGVycm9yTGlrZUZhaWwgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICBuZWdhdGVcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgI3tleHB9IGJ1dCAje2FjdH0gd2FzIHRocm93bidcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IHRocm93ICN7ZXhwfScgKyAoY2F1Z2h0RXJyID8gJyBidXQgI3thY3R9IHdhcyB0aHJvd24nIDogJycpXG4gICAgICAgICAgICAsIChlcnJvckxpa2UgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yTGlrZS50b1N0cmluZygpIDogZXJyb3JMaWtlICYmIF8uY2hlY2tFcnJvci5nZXRDb25zdHJ1Y3Rvck5hbWUoZXJyb3JMaWtlKSlcbiAgICAgICAgICAgICwgKGNhdWdodEVyciBpbnN0YW5jZW9mIEVycm9yID8gY2F1Z2h0RXJyLnRvU3RyaW5nKCkgOiBjYXVnaHRFcnIgJiYgXy5jaGVja0Vycm9yLmdldENvbnN0cnVjdG9yTmFtZShjYXVnaHRFcnIpKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2F1Z2h0RXJyICYmIGVyck1zZ01hdGNoZXIgIT09IHVuZGVmaW5lZCAmJiBlcnJNc2dNYXRjaGVyICE9PSBudWxsKSB7XG4gICAgICAvLyBIZXJlIHdlIGNoZWNrIGNvbXBhdGlibGUgbWVzc2FnZXNcbiAgICAgIHZhciBwbGFjZWhvbGRlciA9ICdpbmNsdWRpbmcnO1xuICAgICAgaWYgKGVyck1zZ01hdGNoZXIgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcGxhY2Vob2xkZXIgPSAnbWF0Y2hpbmcnXG4gICAgICB9XG5cbiAgICAgIHZhciBpc0NvbXBhdGlibGVNZXNzYWdlID0gXy5jaGVja0Vycm9yLmNvbXBhdGlibGVNZXNzYWdlKGNhdWdodEVyciwgZXJyTXNnTWF0Y2hlcik7XG4gICAgICBpZiAoaXNDb21wYXRpYmxlTWVzc2FnZSA9PT0gbmVnYXRlKSB7XG4gICAgICAgIGlmIChldmVyeUFyZ0lzRGVmaW5lZCAmJiBuZWdhdGUpIHtcbiAgICAgICAgICAgIGVyck1zZ01hdGNoZXJGYWlsID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgIG5lZ2F0ZVxuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyBlcnJvciAnICsgcGxhY2Vob2xkZXIgKyAnICN7ZXhwfSBidXQgZ290ICN7YWN0fSdcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgZXJyb3Igbm90ICcgKyBwbGFjZWhvbGRlciArICcgI3tleHB9J1xuICAgICAgICAgICAgLCAgZXJyTXNnTWF0Y2hlclxuICAgICAgICAgICAgLCAgXy5jaGVja0Vycm9yLmdldE1lc3NhZ2UoY2F1Z2h0RXJyKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBib3RoIGFzc2VydGlvbnMgZmFpbGVkIGFuZCBib3RoIHNob3VsZCd2ZSBtYXRjaGVkIHdlIHRocm93IGFuIGVycm9yXG4gICAgaWYgKGVycm9yTGlrZUZhaWwgJiYgZXJyTXNnTWF0Y2hlckZhaWwpIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICBuZWdhdGVcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyAje2V4cH0gYnV0ICN7YWN0fSB3YXMgdGhyb3duJ1xuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCB0aHJvdyAje2V4cH0nICsgKGNhdWdodEVyciA/ICcgYnV0ICN7YWN0fSB3YXMgdGhyb3duJyA6ICcnKVxuICAgICAgICAsIChlcnJvckxpa2UgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yTGlrZS50b1N0cmluZygpIDogZXJyb3JMaWtlICYmIF8uY2hlY2tFcnJvci5nZXRDb25zdHJ1Y3Rvck5hbWUoZXJyb3JMaWtlKSlcbiAgICAgICAgLCAoY2F1Z2h0RXJyIGluc3RhbmNlb2YgRXJyb3IgPyBjYXVnaHRFcnIudG9TdHJpbmcoKSA6IGNhdWdodEVyciAmJiBfLmNoZWNrRXJyb3IuZ2V0Q29uc3RydWN0b3JOYW1lKGNhdWdodEVycikpXG4gICAgICApO1xuICAgIH1cblxuICAgIGZsYWcodGhpcywgJ29iamVjdCcsIGNhdWdodEVycik7XG4gIH07XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgndGhyb3cnLCBhc3NlcnRUaHJvd3MpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCd0aHJvd3MnLCBhc3NlcnRUaHJvd3MpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdUaHJvdycsIGFzc2VydFRocm93cyk7XG5cbiAgLyoqXG4gICAqICMjIyAucmVzcG9uZFRvKG1ldGhvZFssIG1zZ10pXG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpcyBhIG5vbi1mdW5jdGlvbiBvYmplY3QsIGAucmVzcG9uZFRvYCBhc3NlcnRzIHRoYXQgdGhlXG4gICAqIHRhcmdldCBoYXMgYSBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBgbWV0aG9kYC4gVGhlIG1ldGhvZCBjYW4gYmUgb3duIG9yXG4gICAqIGluaGVyaXRlZCwgYW5kIGl0IGNhbiBiZSBlbnVtZXJhYmxlIG9yIG5vbi1lbnVtZXJhYmxlLlxuICAgKlxuICAgKiAgICAgZnVuY3Rpb24gQ2F0ICgpIHt9XG4gICAqICAgICBDYXQucHJvdG90eXBlLm1lb3cgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICpcbiAgICogICAgIGV4cGVjdChuZXcgQ2F0KCkpLnRvLnJlc3BvbmRUbygnbWVvdycpO1xuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgaXMgYSBmdW5jdGlvbiwgYC5yZXNwb25kVG9gIGFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0J3NcbiAgICogYHByb3RvdHlwZWAgcHJvcGVydHkgaGFzIGEgbWV0aG9kIHdpdGggdGhlIGdpdmVuIG5hbWUgYG1ldGhvZGAuIEFnYWluLCB0aGVcbiAgICogbWV0aG9kIGNhbiBiZSBvd24gb3IgaW5oZXJpdGVkLCBhbmQgaXQgY2FuIGJlIGVudW1lcmFibGUgb3Igbm9uLWVudW1lcmFibGUuXG4gICAqXG4gICAqICAgICBmdW5jdGlvbiBDYXQgKCkge31cbiAgICogICAgIENhdC5wcm90b3R5cGUubWVvdyA9IGZ1bmN0aW9uICgpIHt9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KENhdCkudG8ucmVzcG9uZFRvKCdtZW93Jyk7XG4gICAqXG4gICAqIEFkZCBgLml0c2VsZmAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gZm9yY2UgYC5yZXNwb25kVG9gIHRvIHRyZWF0IHRoZVxuICAgKiB0YXJnZXQgYXMgYSBub24tZnVuY3Rpb24gb2JqZWN0LCBldmVuIGlmIGl0J3MgYSBmdW5jdGlvbi4gVGh1cywgaXQgYXNzZXJ0c1xuICAgKiB0aGF0IHRoZSB0YXJnZXQgaGFzIGEgbWV0aG9kIHdpdGggdGhlIGdpdmVuIG5hbWUgYG1ldGhvZGAsIHJhdGhlciB0aGFuXG4gICAqIGFzc2VydGluZyB0aGF0IHRoZSB0YXJnZXQncyBgcHJvdG90eXBlYCBwcm9wZXJ0eSBoYXMgYSBtZXRob2Qgd2l0aCB0aGVcbiAgICogZ2l2ZW4gbmFtZSBgbWV0aG9kYC5cbiAgICpcbiAgICogICAgIGZ1bmN0aW9uIENhdCAoKSB7fVxuICAgKiAgICAgQ2F0LnByb3RvdHlwZS5tZW93ID0gZnVuY3Rpb24gKCkge307XG4gICAqICAgICBDYXQuaGlzcyA9IGZ1bmN0aW9uICgpIHt9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KENhdCkuaXRzZWxmLnRvLnJlc3BvbmRUbygnaGlzcycpLmJ1dC5ub3QucmVzcG9uZFRvKCdtZW93Jyk7XG4gICAqXG4gICAqIFdoZW4gbm90IGFkZGluZyBgLml0c2VsZmAsIGl0J3MgaW1wb3J0YW50IHRvIGNoZWNrIHRoZSB0YXJnZXQncyB0eXBlIGJlZm9yZVxuICAgKiB1c2luZyBgLnJlc3BvbmRUb2AuIFNlZSB0aGUgYC5hYCBkb2MgZm9yIGluZm8gb24gY2hlY2tpbmcgYSB0YXJnZXQncyB0eXBlLlxuICAgKlxuICAgKiAgICAgZnVuY3Rpb24gQ2F0ICgpIHt9XG4gICAqICAgICBDYXQucHJvdG90eXBlLm1lb3cgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICpcbiAgICogICAgIGV4cGVjdChuZXcgQ2F0KCkpLnRvLmJlLmFuKCdvYmplY3QnKS50aGF0LnJlc3BvbmRzVG8oJ21lb3cnKTtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5yZXNwb25kVG9gLlxuICAgKlxuICAgKiAgICAgZnVuY3Rpb24gRG9nICgpIHt9XG4gICAqICAgICBEb2cucHJvdG90eXBlLmJhcmsgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICpcbiAgICogICAgIGV4cGVjdChuZXcgRG9nKCkpLnRvLm5vdC5yZXNwb25kVG8oJ21lb3cnKTtcbiAgICpcbiAgICogYC5yZXNwb25kVG9gIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3JcbiAgICogbWVzc2FnZSB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXNcbiAgICogdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7fSkudG8ucmVzcG9uZFRvKCdtZW93JywgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KHt9LCAnbm9vbyB3aHkgZmFpbD8/JykudG8ucmVzcG9uZFRvKCdtZW93Jyk7XG4gICAqXG4gICAqIFRoZSBhbGlhcyBgLnJlc3BvbmRzVG9gIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoIGAucmVzcG9uZFRvYC5cbiAgICpcbiAgICogQG5hbWUgcmVzcG9uZFRvXG4gICAqIEBhbGlhcyByZXNwb25kc1RvXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXRob2RcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1zZyBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIHJlc3BvbmRUbyAobWV0aG9kLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgaXRzZWxmID0gZmxhZyh0aGlzLCAnaXRzZWxmJylcbiAgICAgICwgY29udGV4dCA9ICgnZnVuY3Rpb24nID09PSB0eXBlb2Ygb2JqICYmICFpdHNlbGYpXG4gICAgICAgID8gb2JqLnByb3RvdHlwZVttZXRob2RdXG4gICAgICAgIDogb2JqW21ldGhvZF07XG5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGNvbnRleHRcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gcmVzcG9uZCB0byAnICsgXy5pbnNwZWN0KG1ldGhvZClcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IHJlc3BvbmQgdG8gJyArIF8uaW5zcGVjdChtZXRob2QpXG4gICAgKTtcbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ3Jlc3BvbmRUbycsIHJlc3BvbmRUbyk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ3Jlc3BvbmRzVG8nLCByZXNwb25kVG8pO1xuXG4gIC8qKlxuICAgKiAjIyMgLml0c2VsZlxuICAgKlxuICAgKiBGb3JjZXMgYWxsIGAucmVzcG9uZFRvYCBhc3NlcnRpb25zIHRoYXQgZm9sbG93IGluIHRoZSBjaGFpbiB0byBiZWhhdmUgYXMgaWZcbiAgICogdGhlIHRhcmdldCBpcyBhIG5vbi1mdW5jdGlvbiBvYmplY3QsIGV2ZW4gaWYgaXQncyBhIGZ1bmN0aW9uLiBUaHVzLCBpdFxuICAgKiBjYXVzZXMgYC5yZXNwb25kVG9gIHRvIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQgaGFzIGEgbWV0aG9kIHdpdGggdGhlIGdpdmVuXG4gICAqIG5hbWUsIHJhdGhlciB0aGFuIGFzc2VydGluZyB0aGF0IHRoZSB0YXJnZXQncyBgcHJvdG90eXBlYCBwcm9wZXJ0eSBoYXMgYVxuICAgKiBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cbiAgICpcbiAgICogICAgIGZ1bmN0aW9uIENhdCAoKSB7fVxuICAgKiAgICAgQ2F0LnByb3RvdHlwZS5tZW93ID0gZnVuY3Rpb24gKCkge307XG4gICAqICAgICBDYXQuaGlzcyA9IGZ1bmN0aW9uICgpIHt9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KENhdCkuaXRzZWxmLnRvLnJlc3BvbmRUbygnaGlzcycpLmJ1dC5ub3QucmVzcG9uZFRvKCdtZW93Jyk7XG4gICAqXG4gICAqIEBuYW1lIGl0c2VsZlxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ2l0c2VsZicsIGZ1bmN0aW9uICgpIHtcbiAgICBmbGFnKHRoaXMsICdpdHNlbGYnLCB0cnVlKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuc2F0aXNmeShtYXRjaGVyWywgbXNnXSlcbiAgICpcbiAgICogSW52b2tlcyB0aGUgZ2l2ZW4gYG1hdGNoZXJgIGZ1bmN0aW9uIHdpdGggdGhlIHRhcmdldCBiZWluZyBwYXNzZWQgYXMgdGhlXG4gICAqIGZpcnN0IGFyZ3VtZW50LCBhbmQgYXNzZXJ0cyB0aGF0IHRoZSB2YWx1ZSByZXR1cm5lZCBpcyB0cnV0aHkuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uc2F0aXNmeShmdW5jdGlvbihudW0pIHtcbiAgICogICAgICAgcmV0dXJuIG51bSA+IDA7XG4gICAqICAgICB9KTtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5zYXRpc2Z5YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5ub3Quc2F0aXNmeShmdW5jdGlvbihudW0pIHtcbiAgICogICAgICAgcmV0dXJuIG51bSA+IDI7XG4gICAqICAgICB9KTtcbiAgICpcbiAgICogYC5zYXRpc2Z5YCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yXG4gICAqIG1lc3NhZ2UgdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzXG4gICAqIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uc2F0aXNmeShmdW5jdGlvbihudW0pIHtcbiAgICogICAgICAgcmV0dXJuIG51bSA+IDI7XG4gICAqICAgICB9LCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqXG4gICAqICAgICBleHBlY3QoMSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLnNhdGlzZnkoZnVuY3Rpb24obnVtKSB7XG4gICAqICAgICAgIHJldHVybiBudW0gPiAyO1xuICAgKiAgICAgfSk7XG4gICAqXG4gICAqIFRoZSBhbGlhcyBgLnNhdGlzZmllc2AgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5zYXRpc2Z5YC5cbiAgICpcbiAgICogQG5hbWUgc2F0aXNmeVxuICAgKiBAYWxpYXMgc2F0aXNmaWVzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG1hdGNoZXJcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1zZyBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIHNhdGlzZnkgKG1hdGNoZXIsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKTtcbiAgICB2YXIgcmVzdWx0ID0gbWF0Y2hlcihvYmopO1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICByZXN1bHRcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gc2F0aXNmeSAnICsgXy5vYmpEaXNwbGF5KG1hdGNoZXIpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBzYXRpc2Z5JyArIF8ub2JqRGlzcGxheShtYXRjaGVyKVxuICAgICAgLCBmbGFnKHRoaXMsICduZWdhdGUnKSA/IGZhbHNlIDogdHJ1ZVxuICAgICAgLCByZXN1bHRcbiAgICApO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnc2F0aXNmeScsIHNhdGlzZnkpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdzYXRpc2ZpZXMnLCBzYXRpc2Z5KTtcblxuICAvKipcbiAgICogIyMjIC5jbG9zZVRvKGV4cGVjdGVkLCBkZWx0YVssIG1zZ10pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGEgbnVtYmVyIHRoYXQncyB3aXRoaW4gYSBnaXZlbiArLy0gYGRlbHRhYCByYW5nZVxuICAgKiBvZiB0aGUgZ2l2ZW4gbnVtYmVyIGBleHBlY3RlZGAuIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnQgdGhhdCB0aGVcbiAgICogdGFyZ2V0IGlzIGVxdWFsIHRvIGl0cyBleHBlY3RlZCB2YWx1ZS5cbiAgICpcbiAgICogICAgIC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMS41KS50by5lcXVhbCgxLjUpO1xuICAgKlxuICAgKiAgICAgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMS41KS50by5iZS5jbG9zZVRvKDEsIDAuNSk7XG4gICAqICAgICBleHBlY3QoMS41KS50by5iZS5jbG9zZVRvKDIsIDAuNSk7XG4gICAqICAgICBleHBlY3QoMS41KS50by5iZS5jbG9zZVRvKDEsIDEpO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmNsb3NlVG9gLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEuNSkudG8uZXF1YWwoMS41KTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxLjUpLnRvLm5vdC5iZS5jbG9zZVRvKDMsIDEpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogYC5jbG9zZVRvYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yXG4gICAqIG1lc3NhZ2UgdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzXG4gICAqIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMS41KS50by5iZS5jbG9zZVRvKDMsIDEsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdCgxLjUsICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5jbG9zZVRvKDMsIDEpO1xuICAgKlxuICAgKiBUaGUgYWxpYXMgYC5hcHByb3hpbWF0ZWx5YCBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgd2l0aCBgLmNsb3NlVG9gLlxuICAgKlxuICAgKiBAbmFtZSBjbG9zZVRvXG4gICAqIEBhbGlhcyBhcHByb3hpbWF0ZWx5XG4gICAqIEBwYXJhbSB7TnVtYmVyfSBleHBlY3RlZFxuICAgKiBAcGFyYW0ge051bWJlcn0gZGVsdGFcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1zZyBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGNsb3NlVG8oZXhwZWN0ZWQsIGRlbHRhLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgZmxhZ01zZyA9IGZsYWcodGhpcywgJ21lc3NhZ2UnKVxuICAgICAgLCBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpO1xuXG4gICAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoJ251bWJlcicpO1xuICAgIGlmICh0eXBlb2YgZXhwZWN0ZWQgIT09ICdudW1iZXInIHx8IHR5cGVvZiBkZWx0YSAhPT0gJ251bWJlcicpIHtcbiAgICAgIGZsYWdNc2cgPSBmbGFnTXNnID8gZmxhZ01zZyArICc6ICcgOiAnJztcbiAgICAgIHZhciBkZWx0YU1lc3NhZ2UgPSBkZWx0YSA9PT0gdW5kZWZpbmVkID8gXCIsIGFuZCBhIGRlbHRhIGlzIHJlcXVpcmVkXCIgOiBcIlwiO1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICAgIGZsYWdNc2cgKyAndGhlIGFyZ3VtZW50cyB0byBjbG9zZVRvIG9yIGFwcHJveGltYXRlbHkgbXVzdCBiZSBudW1iZXJzJyArIGRlbHRhTWVzc2FnZSxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgc3NmaVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgTWF0aC5hYnMob2JqIC0gZXhwZWN0ZWQpIDw9IGRlbHRhXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIGNsb3NlIHRvICcgKyBleHBlY3RlZCArICcgKy8tICcgKyBkZWx0YVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gYmUgY2xvc2UgdG8gJyArIGV4cGVjdGVkICsgJyArLy0gJyArIGRlbHRhXG4gICAgKTtcbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2Nsb3NlVG8nLCBjbG9zZVRvKTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnYXBwcm94aW1hdGVseScsIGNsb3NlVG8pO1xuXG4gIC8vIE5vdGU6IER1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgaWYgdGVzdGluZyBmb3IgaW5jbHVzaW9uIGluc3RlYWQgb2Ygc2FtZW5lc3MuXG4gIGZ1bmN0aW9uIGlzU3Vic2V0T2Yoc3Vic2V0LCBzdXBlcnNldCwgY21wLCBjb250YWlucywgb3JkZXJlZCkge1xuICAgIGlmICghY29udGFpbnMpIHtcbiAgICAgIGlmIChzdWJzZXQubGVuZ3RoICE9PSBzdXBlcnNldC5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIHN1cGVyc2V0ID0gc3VwZXJzZXQuc2xpY2UoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic2V0LmV2ZXJ5KGZ1bmN0aW9uKGVsZW0sIGlkeCkge1xuICAgICAgaWYgKG9yZGVyZWQpIHJldHVybiBjbXAgPyBjbXAoZWxlbSwgc3VwZXJzZXRbaWR4XSkgOiBlbGVtID09PSBzdXBlcnNldFtpZHhdO1xuXG4gICAgICBpZiAoIWNtcCkge1xuICAgICAgICB2YXIgbWF0Y2hJZHggPSBzdXBlcnNldC5pbmRleE9mKGVsZW0pO1xuICAgICAgICBpZiAobWF0Y2hJZHggPT09IC0xKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgLy8gUmVtb3ZlIG1hdGNoIGZyb20gc3VwZXJzZXQgc28gbm90IGNvdW50ZWQgdHdpY2UgaWYgZHVwbGljYXRlIGluIHN1YnNldC5cbiAgICAgICAgaWYgKCFjb250YWlucykgc3VwZXJzZXQuc3BsaWNlKG1hdGNoSWR4LCAxKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdXBlcnNldC5zb21lKGZ1bmN0aW9uKGVsZW0yLCBtYXRjaElkeCkge1xuICAgICAgICBpZiAoIWNtcChlbGVtLCBlbGVtMikpIHJldHVybiBmYWxzZTtcblxuICAgICAgICAvLyBSZW1vdmUgbWF0Y2ggZnJvbSBzdXBlcnNldCBzbyBub3QgY291bnRlZCB0d2ljZSBpZiBkdXBsaWNhdGUgaW4gc3Vic2V0LlxuICAgICAgICBpZiAoIWNvbnRhaW5zKSBzdXBlcnNldC5zcGxpY2UobWF0Y2hJZHgsIDEpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAubWVtYmVycyhzZXRbLCBtc2ddKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBhcnJheSBoYXMgdGhlIHNhbWUgbWVtYmVycyBhcyB0aGUgZ2l2ZW4gYXJyYXlcbiAgICogYHNldGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLm1lbWJlcnMoWzIsIDEsIDNdKTtcbiAgICogICAgIGV4cGVjdChbMSwgMiwgMl0pLnRvLmhhdmUubWVtYmVycyhbMiwgMSwgMl0pO1xuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBtZW1iZXJzIGFyZSBjb21wYXJlZCB1c2luZyBzdHJpY3QgKGA9PT1gKSBlcXVhbGl0eS4gQWRkIGAuZGVlcGBcbiAgICogZWFybGllciBpbiB0aGUgY2hhaW4gdG8gdXNlIGRlZXAgZXF1YWxpdHkgaW5zdGVhZC4gU2VlIHRoZSBgZGVlcC1lcWxgXG4gICAqIHByb2plY3QgcGFnZSBmb3IgaW5mbyBvbiB0aGUgZGVlcCBlcXVhbGl0eSBhbGdvcml0aG06XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFpanMvZGVlcC1lcWwuXG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgYXJyYXkgZGVlcGx5IChidXQgbm90IHN0cmljdGx5KSBoYXMgbWVtYmVyIGB7YTogMX1gXG4gICAqICAgICBleHBlY3QoW3thOiAxfV0pLnRvLmhhdmUuZGVlcC5tZW1iZXJzKFt7YTogMX1dKTtcbiAgICogICAgIGV4cGVjdChbe2E6IDF9XSkudG8ubm90LmhhdmUubWVtYmVycyhbe2E6IDF9XSk7XG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIG9yZGVyIGRvZXNuJ3QgbWF0dGVyLiBBZGQgYC5vcmRlcmVkYCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0b1xuICAgKiByZXF1aXJlIHRoYXQgbWVtYmVycyBhcHBlYXIgaW4gdGhlIHNhbWUgb3JkZXIuXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLm9yZGVyZWQubWVtYmVycyhbMSwgMiwgM10pO1xuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5tZW1iZXJzKFsyLCAxLCAzXSlcbiAgICogICAgICAgLmJ1dC5ub3Qub3JkZXJlZC5tZW1iZXJzKFsyLCAxLCAzXSk7XG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGJvdGggYXJyYXlzIG11c3QgYmUgdGhlIHNhbWUgc2l6ZS4gQWRkIGAuaW5jbHVkZWAgZWFybGllciBpblxuICAgKiB0aGUgY2hhaW4gdG8gcmVxdWlyZSB0aGF0IHRoZSB0YXJnZXQncyBtZW1iZXJzIGJlIGEgc3VwZXJzZXQgb2YgdGhlXG4gICAqIGV4cGVjdGVkIG1lbWJlcnMuIE5vdGUgdGhhdCBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGluIHRoZSBzdWJzZXQgd2hlblxuICAgKiBgLmluY2x1ZGVgIGlzIGFkZGVkLlxuICAgKlxuICAgKiAgICAgLy8gVGFyZ2V0IGFycmF5IGlzIGEgc3VwZXJzZXQgb2YgWzEsIDJdIGJ1dCBub3QgaWRlbnRpY2FsXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5pbmNsdWRlLm1lbWJlcnMoWzEsIDJdKTtcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLm5vdC5oYXZlLm1lbWJlcnMoWzEsIDJdKTtcbiAgICpcbiAgICogICAgIC8vIER1cGxpY2F0ZXMgaW4gdGhlIHN1YnNldCBhcmUgaWdub3JlZFxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaW5jbHVkZS5tZW1iZXJzKFsxLCAyLCAyLCAyXSk7XG4gICAqXG4gICAqIGAuZGVlcGAsIGAub3JkZXJlZGAsIGFuZCBgLmluY2x1ZGVgIGNhbiBhbGwgYmUgY29tYmluZWQuIEhvd2V2ZXIsIGlmXG4gICAqIGAuaW5jbHVkZWAgYW5kIGAub3JkZXJlZGAgYXJlIGNvbWJpbmVkLCB0aGUgb3JkZXJpbmcgYmVnaW5zIGF0IHRoZSBzdGFydCBvZlxuICAgKiBib3RoIGFycmF5cy5cbiAgICpcbiAgICogICAgIGV4cGVjdChbe2E6IDF9LCB7YjogMn0sIHtjOiAzfV0pXG4gICAqICAgICAgIC50by5pbmNsdWRlLmRlZXAub3JkZXJlZC5tZW1iZXJzKFt7YTogMX0sIHtiOiAyfV0pXG4gICAqICAgICAgIC5idXQubm90LmluY2x1ZGUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoW3tiOiAyfSwge2M6IDN9XSk7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAubWVtYmVyc2AuIEhvd2V2ZXIsIGl0J3NcbiAgICogZGFuZ2Vyb3VzIHRvIGRvIHNvLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGl0IGNyZWF0ZXMgdW5jZXJ0YWluIGV4cGVjdGF0aW9uc1xuICAgKiBieSBhc3NlcnRpbmcgdGhhdCB0aGUgdGFyZ2V0IGFycmF5IGRvZXNuJ3QgaGF2ZSBhbGwgb2YgdGhlIHNhbWUgbWVtYmVycyBhc1xuICAgKiB0aGUgZ2l2ZW4gYXJyYXkgYHNldGAgYnV0IG1heSBvciBtYXkgbm90IGhhdmUgc29tZSBvZiB0aGVtLiBJdCdzIG9mdGVuIGJlc3RcbiAgICogdG8gaWRlbnRpZnkgdGhlIGV4YWN0IG91dHB1dCB0aGF0J3MgZXhwZWN0ZWQsIGFuZCB0aGVuIHdyaXRlIGFuIGFzc2VydGlvblxuICAgKiB0aGF0IG9ubHkgYWNjZXB0cyB0aGF0IGV4YWN0IG91dHB1dC5cbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMl0pLnRvLm5vdC5pbmNsdWRlKDMpLmFuZC5ub3QuaW5jbHVkZSg0KTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChbMSwgMl0pLnRvLm5vdC5oYXZlLm1lbWJlcnMoWzMsIDRdKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIGAubWVtYmVyc2AgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvclxuICAgKiBtZXNzYWdlIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhc1xuICAgKiB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KFsxLCAyXSkudG8uaGF2ZS5tZW1iZXJzKFsxLCAyLCAzXSwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KFsxLCAyXSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmhhdmUubWVtYmVycyhbMSwgMiwgM10pO1xuICAgKlxuICAgKiBAbmFtZSBtZW1iZXJzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHNldFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnbWVtYmVycycsIGZ1bmN0aW9uIChzdWJzZXQsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJyk7XG5cbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uYmUuYW4oJ2FycmF5Jyk7XG4gICAgbmV3IEFzc2VydGlvbihzdWJzZXQsIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmJlLmFuKCdhcnJheScpO1xuXG4gICAgdmFyIGNvbnRhaW5zID0gZmxhZyh0aGlzLCAnY29udGFpbnMnKTtcbiAgICB2YXIgb3JkZXJlZCA9IGZsYWcodGhpcywgJ29yZGVyZWQnKTtcblxuICAgIHZhciBzdWJqZWN0LCBmYWlsTXNnLCBmYWlsTmVnYXRlTXNnO1xuXG4gICAgaWYgKGNvbnRhaW5zKSB7XG4gICAgICBzdWJqZWN0ID0gb3JkZXJlZCA/ICdhbiBvcmRlcmVkIHN1cGVyc2V0JyA6ICdhIHN1cGVyc2V0JztcbiAgICAgIGZhaWxNc2cgPSAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSAnICsgc3ViamVjdCArICcgb2YgI3tleHB9JztcbiAgICAgIGZhaWxOZWdhdGVNc2cgPSAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgJyArIHN1YmplY3QgKyAnIG9mICN7ZXhwfSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1YmplY3QgPSBvcmRlcmVkID8gJ29yZGVyZWQgbWVtYmVycycgOiAnbWVtYmVycyc7XG4gICAgICBmYWlsTXNnID0gJ2V4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSB0aGUgc2FtZSAnICsgc3ViamVjdCArICcgYXMgI3tleHB9JztcbiAgICAgIGZhaWxOZWdhdGVNc2cgPSAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSB0aGUgc2FtZSAnICsgc3ViamVjdCArICcgYXMgI3tleHB9JztcbiAgICB9XG5cbiAgICB2YXIgY21wID0gZmxhZyh0aGlzLCAnZGVlcCcpID8gXy5lcWwgOiB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgaXNTdWJzZXRPZihzdWJzZXQsIG9iaiwgY21wLCBjb250YWlucywgb3JkZXJlZClcbiAgICAgICwgZmFpbE1zZ1xuICAgICAgLCBmYWlsTmVnYXRlTXNnXG4gICAgICAsIHN1YnNldFxuICAgICAgLCBvYmpcbiAgICAgICwgdHJ1ZVxuICAgICk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLm9uZU9mKGxpc3RbLCBtc2ddKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBhIG1lbWJlciBvZiB0aGUgZ2l2ZW4gYXJyYXkgYGxpc3RgLiBIb3dldmVyLFxuICAgKiBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBpcyBlcXVhbCB0byBpdHMgZXhwZWN0ZWQgdmFsdWUuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uZXF1YWwoMSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMSkudG8uYmUub25lT2YoWzEsIDIsIDNdKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIENvbXBhcmlzb25zIGFyZSBwZXJmb3JtZWQgdXNpbmcgc3RyaWN0IChgPT09YCkgZXF1YWxpdHkuXG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAub25lT2ZgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmVxdWFsKDEpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDEpLnRvLm5vdC5iZS5vbmVPZihbMiwgMywgNF0pOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogSXQgY2FuIGFsc28gYmUgY2hhaW5lZCB3aXRoIGAuY29udGFpbmAgb3IgYC5pbmNsdWRlYCwgd2hpY2ggd2lsbCB3b3JrIHdpdGhcbiAgICogYm90aCBhcnJheXMgYW5kIHN0cmluZ3M6XG4gICAqXG4gICAqICAgICBleHBlY3QoJ1RvZGF5IGlzIHN1bm55JykudG8uY29udGFpbi5vbmVPZihbJ3N1bm55JywgJ2Nsb3VkeSddKVxuICAgKiAgICAgZXhwZWN0KCdUb2RheSBpcyByYWlueScpLnRvLm5vdC5jb250YWluLm9uZU9mKFsnc3VubnknLCAnY2xvdWR5J10pXG4gICAqICAgICBleHBlY3QoWzEsMiwzXSkudG8uY29udGFpbi5vbmVPZihbMyw0LDVdKVxuICAgKiAgICAgZXhwZWN0KFsxLDIsM10pLnRvLm5vdC5jb250YWluLm9uZU9mKFs0LDUsNl0pXG4gICAqXG4gICAqIGAub25lT2ZgIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3IgbWVzc2FnZVxuICAgKiB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXMgdGhlXG4gICAqIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5iZS5vbmVPZihbMiwgMywgNF0sICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdCgxLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUub25lT2YoWzIsIDMsIDRdKTtcbiAgICpcbiAgICogQG5hbWUgb25lT2ZcbiAgICogQHBhcmFtIHtBcnJheTwqPn0gbGlzdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gb25lT2YgKGxpc3QsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBleHBlY3RlZCA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIGZsYWdNc2cgPSBmbGFnKHRoaXMsICdtZXNzYWdlJylcbiAgICAgICwgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKVxuICAgICAgLCBjb250YWlucyA9IGZsYWcodGhpcywgJ2NvbnRhaW5zJylcbiAgICAgICwgaXNEZWVwID0gZmxhZyh0aGlzLCAnZGVlcCcpO1xuICAgIG5ldyBBc3NlcnRpb24obGlzdCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uYmUuYW4oJ2FycmF5Jyk7XG5cbiAgICBpZiAoY29udGFpbnMpIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICBsaXN0LnNvbWUoZnVuY3Rpb24ocG9zc2liaWxpdHkpIHsgcmV0dXJuIGV4cGVjdGVkLmluZGV4T2YocG9zc2liaWxpdHkpID4gLTEgfSlcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBjb250YWluIG9uZSBvZiAje2V4cH0nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGNvbnRhaW4gb25lIG9mICN7ZXhwfSdcbiAgICAgICAgLCBsaXN0XG4gICAgICAgICwgZXhwZWN0ZWRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc0RlZXApIHtcbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgbGlzdC5zb21lKGZ1bmN0aW9uKHBvc3NpYmlsaXR5KSB7IHJldHVybiBfLmVxbChleHBlY3RlZCwgcG9zc2liaWxpdHkpIH0pXG4gICAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBkZWVwbHkgZXF1YWwgb25lIG9mICN7ZXhwfSdcbiAgICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGRlZXBseSBlcXVhbCBvbmUgb2YgI3tleHB9J1xuICAgICAgICAgICwgbGlzdFxuICAgICAgICAgICwgZXhwZWN0ZWRcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIGxpc3QuaW5kZXhPZihleHBlY3RlZCkgPiAtMVxuICAgICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgb25lIG9mICN7ZXhwfSdcbiAgICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBvbmUgb2YgI3tleHB9J1xuICAgICAgICAgICwgbGlzdFxuICAgICAgICAgICwgZXhwZWN0ZWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdvbmVPZicsIG9uZU9mKTtcblxuICAvKipcbiAgICogIyMjIC5jaGFuZ2Uoc3ViamVjdFssIHByb3BbLCBtc2ddXSlcbiAgICpcbiAgICogV2hlbiBvbmUgYXJndW1lbnQgaXMgcHJvdmlkZWQsIGAuY2hhbmdlYCBhc3NlcnRzIHRoYXQgdGhlIGdpdmVuIGZ1bmN0aW9uXG4gICAqIGBzdWJqZWN0YCByZXR1cm5zIGEgZGlmZmVyZW50IHZhbHVlIHdoZW4gaXQncyBpbnZva2VkIGJlZm9yZSB0aGUgdGFyZ2V0XG4gICAqIGZ1bmN0aW9uIGNvbXBhcmVkIHRvIHdoZW4gaXQncyBpbnZva2VkIGFmdGVyd2FyZC4gSG93ZXZlciwgaXQncyBvZnRlbiBiZXN0XG4gICAqIHRvIGFzc2VydCB0aGF0IGBzdWJqZWN0YCBpcyBlcXVhbCB0byBpdHMgZXhwZWN0ZWQgdmFsdWUuXG4gICAqXG4gICAqICAgICB2YXIgZG90cyA9ICcnXG4gICAqICAgICAgICwgYWRkRG90ID0gZnVuY3Rpb24gKCkgeyBkb3RzICs9ICcuJzsgfVxuICAgKiAgICAgICAsIGdldERvdHMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBkb3RzOyB9O1xuICAgKlxuICAgKiAgICAgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChnZXREb3RzKCkpLnRvLmVxdWFsKCcnKTtcbiAgICogICAgIGFkZERvdCgpO1xuICAgKiAgICAgZXhwZWN0KGdldERvdHMoKSkudG8uZXF1YWwoJy4nKTtcbiAgICpcbiAgICogICAgIC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KGFkZERvdCkudG8uY2hhbmdlKGdldERvdHMpO1xuICAgKlxuICAgKiBXaGVuIHR3byBhcmd1bWVudHMgYXJlIHByb3ZpZGVkLCBgLmNoYW5nZWAgYXNzZXJ0cyB0aGF0IHRoZSB2YWx1ZSBvZiB0aGVcbiAgICogZ2l2ZW4gb2JqZWN0IGBzdWJqZWN0YCdzIGBwcm9wYCBwcm9wZXJ0eSBpcyBkaWZmZXJlbnQgYmVmb3JlIGludm9raW5nIHRoZVxuICAgKiB0YXJnZXQgZnVuY3Rpb24gY29tcGFyZWQgdG8gYWZ0ZXJ3YXJkLlxuICAgKlxuICAgKiAgICAgdmFyIG15T2JqID0ge2RvdHM6ICcnfVxuICAgKiAgICAgICAsIGFkZERvdCA9IGZ1bmN0aW9uICgpIHsgbXlPYmouZG90cyArPSAnLic7IH07XG4gICAqXG4gICAqICAgICAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KG15T2JqKS50by5oYXZlLnByb3BlcnR5KCdkb3RzJywgJycpO1xuICAgKiAgICAgYWRkRG90KCk7XG4gICAqICAgICBleHBlY3QobXlPYmopLnRvLmhhdmUucHJvcGVydHkoJ2RvdHMnLCAnLicpO1xuICAgKlxuICAgKiAgICAgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoYWRkRG90KS50by5jaGFuZ2UobXlPYmosICdkb3RzJyk7XG4gICAqXG4gICAqIFN0cmljdCAoYD09PWApIGVxdWFsaXR5IGlzIHVzZWQgdG8gY29tcGFyZSBiZWZvcmUgYW5kIGFmdGVyIHZhbHVlcy5cbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5jaGFuZ2VgLlxuICAgKlxuICAgKiAgICAgdmFyIGRvdHMgPSAnJ1xuICAgKiAgICAgICAsIG5vb3AgPSBmdW5jdGlvbiAoKSB7fVxuICAgKiAgICAgICAsIGdldERvdHMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBkb3RzOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KG5vb3ApLnRvLm5vdC5jaGFuZ2UoZ2V0RG90cyk7XG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7ZG90czogJyd9XG4gICAqICAgICAgICwgbm9vcCA9IGZ1bmN0aW9uICgpIHt9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KG5vb3ApLnRvLm5vdC5jaGFuZ2UobXlPYmosICdkb3RzJyk7XG4gICAqXG4gICAqIGAuY2hhbmdlYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yXG4gICAqIG1lc3NhZ2UgdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzXG4gICAqIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuIFdoZW4gbm90IHByb3ZpZGluZyB0d28gYXJndW1lbnRzLCBhbHdheXNcbiAgICogdXNlIHRoZSBzZWNvbmQgZm9ybS5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHtkb3RzOiAnJ31cbiAgICogICAgICAgLCBhZGREb3QgPSBmdW5jdGlvbiAoKSB7IG15T2JqLmRvdHMgKz0gJy4nOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGFkZERvdCkudG8ubm90LmNoYW5nZShteU9iaiwgJ2RvdHMnLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqXG4gICAqICAgICB2YXIgZG90cyA9ICcnXG4gICAqICAgICAgICwgYWRkRG90ID0gZnVuY3Rpb24gKCkgeyBkb3RzICs9ICcuJzsgfVxuICAgKiAgICAgICAsIGdldERvdHMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBkb3RzOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGFkZERvdCwgJ25vb28gd2h5IGZhaWw/PycpLnRvLm5vdC5jaGFuZ2UoZ2V0RG90cyk7XG4gICAqXG4gICAqIGAuY2hhbmdlYCBhbHNvIGNhdXNlcyBhbGwgYC5ieWAgYXNzZXJ0aW9ucyB0aGF0IGZvbGxvdyBpbiB0aGUgY2hhaW4gdG9cbiAgICogYXNzZXJ0IGhvdyBtdWNoIGEgbnVtZXJpYyBzdWJqZWN0IHdhcyBpbmNyZWFzZWQgb3IgZGVjcmVhc2VkIGJ5LiBIb3dldmVyLFxuICAgKiBpdCdzIGRhbmdlcm91cyB0byB1c2UgYC5jaGFuZ2UuYnlgLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGl0IGNyZWF0ZXNcbiAgICogdW5jZXJ0YWluIGV4cGVjdGF0aW9ucyBieSBhc3NlcnRpbmcgdGhhdCB0aGUgc3ViamVjdCBlaXRoZXIgaW5jcmVhc2VzIGJ5XG4gICAqIHRoZSBnaXZlbiBkZWx0YSwgb3IgdGhhdCBpdCBkZWNyZWFzZXMgYnkgdGhlIGdpdmVuIGRlbHRhLiBJdCdzIG9mdGVuIGJlc3RcbiAgICogdG8gaWRlbnRpZnkgdGhlIGV4YWN0IG91dHB1dCB0aGF0J3MgZXhwZWN0ZWQsIGFuZCB0aGVuIHdyaXRlIGFuIGFzc2VydGlvblxuICAgKiB0aGF0IG9ubHkgYWNjZXB0cyB0aGF0IGV4YWN0IG91dHB1dC5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHt2YWw6IDF9XG4gICAqICAgICAgICwgYWRkVHdvID0gZnVuY3Rpb24gKCkgeyBteU9iai52YWwgKz0gMjsgfVxuICAgKiAgICAgICAsIHN1YnRyYWN0VHdvID0gZnVuY3Rpb24gKCkgeyBteU9iai52YWwgLT0gMjsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLmluY3JlYXNlKG15T2JqLCAndmFsJykuYnkoMik7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoYWRkVHdvKS50by5jaGFuZ2UobXlPYmosICd2YWwnKS5ieSgyKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3Qoc3VidHJhY3RUd28pLnRvLmRlY3JlYXNlKG15T2JqLCAndmFsJykuYnkoMik7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoc3VidHJhY3RUd28pLnRvLmNoYW5nZShteU9iaiwgJ3ZhbCcpLmJ5KDIpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogVGhlIGFsaWFzIGAuY2hhbmdlc2AgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5jaGFuZ2VgLlxuICAgKlxuICAgKiBAbmFtZSBjaGFuZ2VcbiAgICogQGFsaWFzIGNoYW5nZXNcbiAgICogQHBhcmFtIHtTdHJpbmd9IHN1YmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3AgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnRDaGFuZ2VzIChzdWJqZWN0LCBwcm9wLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgZm4gPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJyk7XG4gICAgbmV3IEFzc2VydGlvbihmbiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYSgnZnVuY3Rpb24nKTtcblxuICAgIHZhciBpbml0aWFsO1xuICAgIGlmICghcHJvcCkge1xuICAgICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKCdmdW5jdGlvbicpO1xuICAgICAgaW5pdGlhbCA9IHN1YmplY3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KHByb3ApO1xuICAgICAgaW5pdGlhbCA9IHN1YmplY3RbcHJvcF07XG4gICAgfVxuXG4gICAgZm4oKTtcblxuICAgIHZhciBmaW5hbCA9IHByb3AgPT09IHVuZGVmaW5lZCB8fCBwcm9wID09PSBudWxsID8gc3ViamVjdCgpIDogc3ViamVjdFtwcm9wXTtcbiAgICB2YXIgbXNnT2JqID0gcHJvcCA9PT0gdW5kZWZpbmVkIHx8IHByb3AgPT09IG51bGwgPyBpbml0aWFsIDogJy4nICsgcHJvcDtcblxuICAgIC8vIFRoaXMgZ2V0cyBmbGFnZ2VkIGJlY2F1c2Ugb2YgdGhlIC5ieShkZWx0YSkgYXNzZXJ0aW9uXG4gICAgZmxhZyh0aGlzLCAnZGVsdGFNc2dPYmonLCBtc2dPYmopO1xuICAgIGZsYWcodGhpcywgJ2luaXRpYWxEZWx0YVZhbHVlJywgaW5pdGlhbCk7XG4gICAgZmxhZyh0aGlzLCAnZmluYWxEZWx0YVZhbHVlJywgZmluYWwpO1xuICAgIGZsYWcodGhpcywgJ2RlbHRhQmVoYXZpb3InLCAnY2hhbmdlJyk7XG4gICAgZmxhZyh0aGlzLCAncmVhbERlbHRhJywgZmluYWwgIT09IGluaXRpYWwpO1xuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpbml0aWFsICE9PSBmaW5hbFxuICAgICAgLCAnZXhwZWN0ZWQgJyArIG1zZ09iaiArICcgdG8gY2hhbmdlJ1xuICAgICAgLCAnZXhwZWN0ZWQgJyArIG1zZ09iaiArICcgdG8gbm90IGNoYW5nZSdcbiAgICApO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnY2hhbmdlJywgYXNzZXJ0Q2hhbmdlcyk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2NoYW5nZXMnLCBhc3NlcnRDaGFuZ2VzKTtcblxuICAvKipcbiAgICogIyMjIC5pbmNyZWFzZShzdWJqZWN0WywgcHJvcFssIG1zZ11dKVxuICAgKlxuICAgKiBXaGVuIG9uZSBhcmd1bWVudCBpcyBwcm92aWRlZCwgYC5pbmNyZWFzZWAgYXNzZXJ0cyB0aGF0IHRoZSBnaXZlbiBmdW5jdGlvblxuICAgKiBgc3ViamVjdGAgcmV0dXJucyBhIGdyZWF0ZXIgbnVtYmVyIHdoZW4gaXQncyBpbnZva2VkIGFmdGVyIGludm9raW5nIHRoZVxuICAgKiB0YXJnZXQgZnVuY3Rpb24gY29tcGFyZWQgdG8gd2hlbiBpdCdzIGludm9rZWQgYmVmb3JlaGFuZC4gYC5pbmNyZWFzZWAgYWxzb1xuICAgKiBjYXVzZXMgYWxsIGAuYnlgIGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluIHRvIGFzc2VydCBob3cgbXVjaFxuICAgKiBncmVhdGVyIG9mIGEgbnVtYmVyIGlzIHJldHVybmVkLiBJdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHJldHVyblxuICAgKiB2YWx1ZSBpbmNyZWFzZWQgYnkgdGhlIGV4cGVjdGVkIGFtb3VudCwgcmF0aGVyIHRoYW4gYXNzZXJ0aW5nIGl0IGluY3JlYXNlZFxuICAgKiBieSBhbnkgYW1vdW50LlxuICAgKlxuICAgKiAgICAgdmFyIHZhbCA9IDFcbiAgICogICAgICAgLCBhZGRUd28gPSBmdW5jdGlvbiAoKSB7IHZhbCArPSAyOyB9XG4gICAqICAgICAgICwgZ2V0VmFsID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGFkZFR3bykudG8uaW5jcmVhc2UoZ2V0VmFsKS5ieSgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLmluY3JlYXNlKGdldFZhbCk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBXaGVuIHR3byBhcmd1bWVudHMgYXJlIHByb3ZpZGVkLCBgLmluY3JlYXNlYCBhc3NlcnRzIHRoYXQgdGhlIHZhbHVlIG9mIHRoZVxuICAgKiBnaXZlbiBvYmplY3QgYHN1YmplY3RgJ3MgYHByb3BgIHByb3BlcnR5IGlzIGdyZWF0ZXIgYWZ0ZXIgaW52b2tpbmcgdGhlXG4gICAqIHRhcmdldCBmdW5jdGlvbiBjb21wYXJlZCB0byBiZWZvcmVoYW5kLlxuICAgKlxuICAgKiAgICAgdmFyIG15T2JqID0ge3ZhbDogMX1cbiAgICogICAgICAgLCBhZGRUd28gPSBmdW5jdGlvbiAoKSB7IG15T2JqLnZhbCArPSAyOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGFkZFR3bykudG8uaW5jcmVhc2UobXlPYmosICd2YWwnKS5ieSgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLmluY3JlYXNlKG15T2JqLCAndmFsJyk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmluY3JlYXNlYC4gSG93ZXZlciwgaXQnc1xuICAgKiBkYW5nZXJvdXMgdG8gZG8gc28uIFRoZSBwcm9ibGVtIGlzIHRoYXQgaXQgY3JlYXRlcyB1bmNlcnRhaW4gZXhwZWN0YXRpb25zXG4gICAqIGJ5IGFzc2VydGluZyB0aGF0IHRoZSBzdWJqZWN0IGVpdGhlciBkZWNyZWFzZXMsIG9yIHRoYXQgaXQgc3RheXMgdGhlIHNhbWUuXG4gICAqIEl0J3Mgb2Z0ZW4gYmVzdCB0byBpZGVudGlmeSB0aGUgZXhhY3Qgb3V0cHV0IHRoYXQncyBleHBlY3RlZCwgYW5kIHRoZW5cbiAgICogd3JpdGUgYW4gYXNzZXJ0aW9uIHRoYXQgb25seSBhY2NlcHRzIHRoYXQgZXhhY3Qgb3V0cHV0LlxuICAgKlxuICAgKiBXaGVuIHRoZSBzdWJqZWN0IGlzIGV4cGVjdGVkIHRvIGRlY3JlYXNlLCBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgaXRcbiAgICogZGVjcmVhc2VkIGJ5IHRoZSBleHBlY3RlZCBhbW91bnQuXG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7dmFsOiAxfVxuICAgKiAgICAgICAsIHN1YnRyYWN0VHdvID0gZnVuY3Rpb24gKCkgeyBteU9iai52YWwgLT0gMjsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChzdWJ0cmFjdFR3bykudG8uZGVjcmVhc2UobXlPYmosICd2YWwnKS5ieSgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChzdWJ0cmFjdFR3bykudG8ubm90LmluY3JlYXNlKG15T2JqLCAndmFsJyk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBXaGVuIHRoZSBzdWJqZWN0IGlzIGV4cGVjdGVkIHRvIHN0YXkgdGhlIHNhbWUsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnRcbiAgICogZXhhY3RseSB0aGF0LlxuICAgKlxuICAgKiAgICAgdmFyIG15T2JqID0ge3ZhbDogMX1cbiAgICogICAgICAgLCBub29wID0gZnVuY3Rpb24gKCkge307XG4gICAqXG4gICAqICAgICBleHBlY3Qobm9vcCkudG8ubm90LmNoYW5nZShteU9iaiwgJ3ZhbCcpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KG5vb3ApLnRvLm5vdC5pbmNyZWFzZShteU9iaiwgJ3ZhbCcpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogYC5pbmNyZWFzZWAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvclxuICAgKiBtZXNzYWdlIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhc1xuICAgKiB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLiBXaGVuIG5vdCBwcm92aWRpbmcgdHdvIGFyZ3VtZW50cywgYWx3YXlzXG4gICAqIHVzZSB0aGUgc2Vjb25kIGZvcm0uXG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7dmFsOiAxfVxuICAgKiAgICAgICAsIG5vb3AgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICpcbiAgICogICAgIGV4cGVjdChub29wKS50by5pbmNyZWFzZShteU9iaiwgJ3ZhbCcsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICpcbiAgICogICAgIHZhciB2YWwgPSAxXG4gICAqICAgICAgICwgbm9vcCA9IGZ1bmN0aW9uICgpIHt9XG4gICAqICAgICAgICwgZ2V0VmFsID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KG5vb3AsICdub29vIHdoeSBmYWlsPz8nKS50by5pbmNyZWFzZShnZXRWYWwpO1xuICAgKlxuICAgKiBUaGUgYWxpYXMgYC5pbmNyZWFzZXNgIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoIGAuaW5jcmVhc2VgLlxuICAgKlxuICAgKiBAbmFtZSBpbmNyZWFzZVxuICAgKiBAYWxpYXMgaW5jcmVhc2VzXG4gICAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBzdWJqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wIG5hbWUgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0SW5jcmVhc2VzIChzdWJqZWN0LCBwcm9wLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgZm4gPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJyk7XG4gICAgbmV3IEFzc2VydGlvbihmbiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYSgnZnVuY3Rpb24nKTtcblxuICAgIHZhciBpbml0aWFsO1xuICAgIGlmICghcHJvcCkge1xuICAgICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKCdmdW5jdGlvbicpO1xuICAgICAgaW5pdGlhbCA9IHN1YmplY3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KHByb3ApO1xuICAgICAgaW5pdGlhbCA9IHN1YmplY3RbcHJvcF07XG4gICAgfVxuXG4gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHRhcmdldCBpcyBhIG51bWJlclxuICAgIG5ldyBBc3NlcnRpb24oaW5pdGlhbCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYSgnbnVtYmVyJyk7XG5cbiAgICBmbigpO1xuXG4gICAgdmFyIGZpbmFsID0gcHJvcCA9PT0gdW5kZWZpbmVkIHx8IHByb3AgPT09IG51bGwgPyBzdWJqZWN0KCkgOiBzdWJqZWN0W3Byb3BdO1xuICAgIHZhciBtc2dPYmogPSBwcm9wID09PSB1bmRlZmluZWQgfHwgcHJvcCA9PT0gbnVsbCA/IGluaXRpYWwgOiAnLicgKyBwcm9wO1xuXG4gICAgZmxhZyh0aGlzLCAnZGVsdGFNc2dPYmonLCBtc2dPYmopO1xuICAgIGZsYWcodGhpcywgJ2luaXRpYWxEZWx0YVZhbHVlJywgaW5pdGlhbCk7XG4gICAgZmxhZyh0aGlzLCAnZmluYWxEZWx0YVZhbHVlJywgZmluYWwpO1xuICAgIGZsYWcodGhpcywgJ2RlbHRhQmVoYXZpb3InLCAnaW5jcmVhc2UnKTtcbiAgICBmbGFnKHRoaXMsICdyZWFsRGVsdGEnLCBmaW5hbCAtIGluaXRpYWwpO1xuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBmaW5hbCAtIGluaXRpYWwgPiAwXG4gICAgICAsICdleHBlY3RlZCAnICsgbXNnT2JqICsgJyB0byBpbmNyZWFzZSdcbiAgICAgICwgJ2V4cGVjdGVkICcgKyBtc2dPYmogKyAnIHRvIG5vdCBpbmNyZWFzZSdcbiAgICApO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnaW5jcmVhc2UnLCBhc3NlcnRJbmNyZWFzZXMpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdpbmNyZWFzZXMnLCBhc3NlcnRJbmNyZWFzZXMpO1xuXG4gIC8qKlxuICAgKiAjIyMgLmRlY3JlYXNlKHN1YmplY3RbLCBwcm9wWywgbXNnXV0pXG4gICAqXG4gICAqIFdoZW4gb25lIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCBgLmRlY3JlYXNlYCBhc3NlcnRzIHRoYXQgdGhlIGdpdmVuIGZ1bmN0aW9uXG4gICAqIGBzdWJqZWN0YCByZXR1cm5zIGEgbGVzc2VyIG51bWJlciB3aGVuIGl0J3MgaW52b2tlZCBhZnRlciBpbnZva2luZyB0aGVcbiAgICogdGFyZ2V0IGZ1bmN0aW9uIGNvbXBhcmVkIHRvIHdoZW4gaXQncyBpbnZva2VkIGJlZm9yZWhhbmQuIGAuZGVjcmVhc2VgIGFsc29cbiAgICogY2F1c2VzIGFsbCBgLmJ5YCBhc3NlcnRpb25zIHRoYXQgZm9sbG93IGluIHRoZSBjaGFpbiB0byBhc3NlcnQgaG93IG11Y2hcbiAgICogbGVzc2VyIG9mIGEgbnVtYmVyIGlzIHJldHVybmVkLiBJdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHJldHVyblxuICAgKiB2YWx1ZSBkZWNyZWFzZWQgYnkgdGhlIGV4cGVjdGVkIGFtb3VudCwgcmF0aGVyIHRoYW4gYXNzZXJ0aW5nIGl0IGRlY3JlYXNlZFxuICAgKiBieSBhbnkgYW1vdW50LlxuICAgKlxuICAgKiAgICAgdmFyIHZhbCA9IDFcbiAgICogICAgICAgLCBzdWJ0cmFjdFR3byA9IGZ1bmN0aW9uICgpIHsgdmFsIC09IDI7IH1cbiAgICogICAgICAgLCBnZXRWYWwgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWw7IH07XG4gICAqXG4gICAqICAgICBleHBlY3Qoc3VidHJhY3RUd28pLnRvLmRlY3JlYXNlKGdldFZhbCkuYnkoMik7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoc3VidHJhY3RUd28pLnRvLmRlY3JlYXNlKGdldFZhbCk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBXaGVuIHR3byBhcmd1bWVudHMgYXJlIHByb3ZpZGVkLCBgLmRlY3JlYXNlYCBhc3NlcnRzIHRoYXQgdGhlIHZhbHVlIG9mIHRoZVxuICAgKiBnaXZlbiBvYmplY3QgYHN1YmplY3RgJ3MgYHByb3BgIHByb3BlcnR5IGlzIGxlc3NlciBhZnRlciBpbnZva2luZyB0aGVcbiAgICogdGFyZ2V0IGZ1bmN0aW9uIGNvbXBhcmVkIHRvIGJlZm9yZWhhbmQuXG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7dmFsOiAxfVxuICAgKiAgICAgICAsIHN1YnRyYWN0VHdvID0gZnVuY3Rpb24gKCkgeyBteU9iai52YWwgLT0gMjsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChzdWJ0cmFjdFR3bykudG8uZGVjcmVhc2UobXlPYmosICd2YWwnKS5ieSgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChzdWJ0cmFjdFR3bykudG8uZGVjcmVhc2UobXlPYmosICd2YWwnKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuZGVjcmVhc2VgLiBIb3dldmVyLCBpdCdzXG4gICAqIGRhbmdlcm91cyB0byBkbyBzby4gVGhlIHByb2JsZW0gaXMgdGhhdCBpdCBjcmVhdGVzIHVuY2VydGFpbiBleHBlY3RhdGlvbnNcbiAgICogYnkgYXNzZXJ0aW5nIHRoYXQgdGhlIHN1YmplY3QgZWl0aGVyIGluY3JlYXNlcywgb3IgdGhhdCBpdCBzdGF5cyB0aGUgc2FtZS5cbiAgICogSXQncyBvZnRlbiBiZXN0IHRvIGlkZW50aWZ5IHRoZSBleGFjdCBvdXRwdXQgdGhhdCdzIGV4cGVjdGVkLCBhbmQgdGhlblxuICAgKiB3cml0ZSBhbiBhc3NlcnRpb24gdGhhdCBvbmx5IGFjY2VwdHMgdGhhdCBleGFjdCBvdXRwdXQuXG4gICAqXG4gICAqIFdoZW4gdGhlIHN1YmplY3QgaXMgZXhwZWN0ZWQgdG8gaW5jcmVhc2UsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnQgdGhhdCBpdFxuICAgKiBpbmNyZWFzZWQgYnkgdGhlIGV4cGVjdGVkIGFtb3VudC5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHt2YWw6IDF9XG4gICAqICAgICAgICwgYWRkVHdvID0gZnVuY3Rpb24gKCkgeyBteU9iai52YWwgKz0gMjsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLmluY3JlYXNlKG15T2JqLCAndmFsJykuYnkoMik7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoYWRkVHdvKS50by5ub3QuZGVjcmVhc2UobXlPYmosICd2YWwnKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIFdoZW4gdGhlIHN1YmplY3QgaXMgZXhwZWN0ZWQgdG8gc3RheSB0aGUgc2FtZSwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydFxuICAgKiBleGFjdGx5IHRoYXQuXG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7dmFsOiAxfVxuICAgKiAgICAgICAsIG5vb3AgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICpcbiAgICogICAgIGV4cGVjdChub29wKS50by5ub3QuY2hhbmdlKG15T2JqLCAndmFsJyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qobm9vcCkudG8ubm90LmRlY3JlYXNlKG15T2JqLCAndmFsJyk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBgLmRlY3JlYXNlYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yXG4gICAqIG1lc3NhZ2UgdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzXG4gICAqIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuIFdoZW4gbm90IHByb3ZpZGluZyB0d28gYXJndW1lbnRzLCBhbHdheXNcbiAgICogdXNlIHRoZSBzZWNvbmQgZm9ybS5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHt2YWw6IDF9XG4gICAqICAgICAgICwgbm9vcCA9IGZ1bmN0aW9uICgpIHt9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KG5vb3ApLnRvLmRlY3JlYXNlKG15T2JqLCAndmFsJywgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKlxuICAgKiAgICAgdmFyIHZhbCA9IDFcbiAgICogICAgICAgLCBub29wID0gZnVuY3Rpb24gKCkge31cbiAgICogICAgICAgLCBnZXRWYWwgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWw7IH07XG4gICAqXG4gICAqICAgICBleHBlY3Qobm9vcCwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmRlY3JlYXNlKGdldFZhbCk7XG4gICAqXG4gICAqIFRoZSBhbGlhcyBgLmRlY3JlYXNlc2AgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5kZWNyZWFzZWAuXG4gICAqXG4gICAqIEBuYW1lIGRlY3JlYXNlXG4gICAqIEBhbGlhcyBkZWNyZWFzZXNcbiAgICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHN1YmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3AgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnREZWNyZWFzZXMgKHN1YmplY3QsIHByb3AsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBmbiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIGZsYWdNc2cgPSBmbGFnKHRoaXMsICdtZXNzYWdlJylcbiAgICAgICwgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKTtcbiAgICBuZXcgQXNzZXJ0aW9uKGZuLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKCdmdW5jdGlvbicpO1xuXG4gICAgdmFyIGluaXRpYWw7XG4gICAgaWYgKCFwcm9wKSB7XG4gICAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoJ2Z1bmN0aW9uJyk7XG4gICAgICBpbml0aWFsID0gc3ViamVjdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkocHJvcCk7XG4gICAgICBpbml0aWFsID0gc3ViamVjdFtwcm9wXTtcbiAgICB9XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgdGFyZ2V0IGlzIGEgbnVtYmVyXG4gICAgbmV3IEFzc2VydGlvbihpbml0aWFsLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKCdudW1iZXInKTtcblxuICAgIGZuKCk7XG5cbiAgICB2YXIgZmluYWwgPSBwcm9wID09PSB1bmRlZmluZWQgfHwgcHJvcCA9PT0gbnVsbCA/IHN1YmplY3QoKSA6IHN1YmplY3RbcHJvcF07XG4gICAgdmFyIG1zZ09iaiA9IHByb3AgPT09IHVuZGVmaW5lZCB8fCBwcm9wID09PSBudWxsID8gaW5pdGlhbCA6ICcuJyArIHByb3A7XG5cbiAgICBmbGFnKHRoaXMsICdkZWx0YU1zZ09iaicsIG1zZ09iaik7XG4gICAgZmxhZyh0aGlzLCAnaW5pdGlhbERlbHRhVmFsdWUnLCBpbml0aWFsKTtcbiAgICBmbGFnKHRoaXMsICdmaW5hbERlbHRhVmFsdWUnLCBmaW5hbCk7XG4gICAgZmxhZyh0aGlzLCAnZGVsdGFCZWhhdmlvcicsICdkZWNyZWFzZScpO1xuICAgIGZsYWcodGhpcywgJ3JlYWxEZWx0YScsIGluaXRpYWwgLSBmaW5hbCk7XG5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGZpbmFsIC0gaW5pdGlhbCA8IDBcbiAgICAgICwgJ2V4cGVjdGVkICcgKyBtc2dPYmogKyAnIHRvIGRlY3JlYXNlJ1xuICAgICAgLCAnZXhwZWN0ZWQgJyArIG1zZ09iaiArICcgdG8gbm90IGRlY3JlYXNlJ1xuICAgICk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdkZWNyZWFzZScsIGFzc2VydERlY3JlYXNlcyk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2RlY3JlYXNlcycsIGFzc2VydERlY3JlYXNlcyk7XG5cbiAgLyoqXG4gICAqICMjIyAuYnkoZGVsdGFbLCBtc2ddKVxuICAgKlxuICAgKiBXaGVuIGZvbGxvd2luZyBhbiBgLmluY3JlYXNlYCBhc3NlcnRpb24gaW4gdGhlIGNoYWluLCBgLmJ5YCBhc3NlcnRzIHRoYXRcbiAgICogdGhlIHN1YmplY3Qgb2YgdGhlIGAuaW5jcmVhc2VgIGFzc2VydGlvbiBpbmNyZWFzZWQgYnkgdGhlIGdpdmVuIGBkZWx0YWAuXG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7dmFsOiAxfVxuICAgKiAgICAgICAsIGFkZFR3byA9IGZ1bmN0aW9uICgpIHsgbXlPYmoudmFsICs9IDI7IH07XG4gICAqXG4gICAqICAgICBleHBlY3QoYWRkVHdvKS50by5pbmNyZWFzZShteU9iaiwgJ3ZhbCcpLmJ5KDIpO1xuICAgKlxuICAgKiBXaGVuIGZvbGxvd2luZyBhIGAuZGVjcmVhc2VgIGFzc2VydGlvbiBpbiB0aGUgY2hhaW4sIGAuYnlgIGFzc2VydHMgdGhhdCB0aGVcbiAgICogc3ViamVjdCBvZiB0aGUgYC5kZWNyZWFzZWAgYXNzZXJ0aW9uIGRlY3JlYXNlZCBieSB0aGUgZ2l2ZW4gYGRlbHRhYC5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHt2YWw6IDF9XG4gICAqICAgICAgICwgc3VidHJhY3RUd28gPSBmdW5jdGlvbiAoKSB7IG15T2JqLnZhbCAtPSAyOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KHN1YnRyYWN0VHdvKS50by5kZWNyZWFzZShteU9iaiwgJ3ZhbCcpLmJ5KDIpO1xuICAgKlxuICAgKiBXaGVuIGZvbGxvd2luZyBhIGAuY2hhbmdlYCBhc3NlcnRpb24gaW4gdGhlIGNoYWluLCBgLmJ5YCBhc3NlcnRzIHRoYXQgdGhlXG4gICAqIHN1YmplY3Qgb2YgdGhlIGAuY2hhbmdlYCBhc3NlcnRpb24gZWl0aGVyIGluY3JlYXNlZCBvciBkZWNyZWFzZWQgYnkgdGhlXG4gICAqIGdpdmVuIGBkZWx0YWAuIEhvd2V2ZXIsIGl0J3MgZGFuZ2Vyb3VzIHRvIHVzZSBgLmNoYW5nZS5ieWAuIFRoZSBwcm9ibGVtIGlzXG4gICAqIHRoYXQgaXQgY3JlYXRlcyB1bmNlcnRhaW4gZXhwZWN0YXRpb25zLiBJdCdzIG9mdGVuIGJlc3QgdG8gaWRlbnRpZnkgdGhlXG4gICAqIGV4YWN0IG91dHB1dCB0aGF0J3MgZXhwZWN0ZWQsIGFuZCB0aGVuIHdyaXRlIGFuIGFzc2VydGlvbiB0aGF0IG9ubHkgYWNjZXB0c1xuICAgKiB0aGF0IGV4YWN0IG91dHB1dC5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHt2YWw6IDF9XG4gICAqICAgICAgICwgYWRkVHdvID0gZnVuY3Rpb24gKCkgeyBteU9iai52YWwgKz0gMjsgfVxuICAgKiAgICAgICAsIHN1YnRyYWN0VHdvID0gZnVuY3Rpb24gKCkgeyBteU9iai52YWwgLT0gMjsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLmluY3JlYXNlKG15T2JqLCAndmFsJykuYnkoMik7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoYWRkVHdvKS50by5jaGFuZ2UobXlPYmosICd2YWwnKS5ieSgyKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3Qoc3VidHJhY3RUd28pLnRvLmRlY3JlYXNlKG15T2JqLCAndmFsJykuYnkoMik7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoc3VidHJhY3RUd28pLnRvLmNoYW5nZShteU9iaiwgJ3ZhbCcpLmJ5KDIpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5ieWAuIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdFxuICAgKiB0byBhc3NlcnQgdGhhdCB0aGUgc3ViamVjdCBjaGFuZ2VkIGJ5IGl0cyBleHBlY3RlZCBkZWx0YSwgcmF0aGVyIHRoYW5cbiAgICogYXNzZXJ0aW5nIHRoYXQgaXQgZGlkbid0IGNoYW5nZSBieSBvbmUgb2YgY291bnRsZXNzIHVuZXhwZWN0ZWQgZGVsdGFzLlxuICAgKlxuICAgKiAgICAgdmFyIG15T2JqID0ge3ZhbDogMX1cbiAgICogICAgICAgLCBhZGRUd28gPSBmdW5jdGlvbiAoKSB7IG15T2JqLnZhbCArPSAyOyB9O1xuICAgKlxuICAgKiAgICAgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLmluY3JlYXNlKG15T2JqLCAndmFsJykuYnkoMik7XG4gICAqXG4gICAqICAgICAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLmluY3JlYXNlKG15T2JqLCAndmFsJykuYnV0Lm5vdC5ieSgzKTtcbiAgICpcbiAgICogYC5ieWAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvciBtZXNzYWdlIHRvXG4gICAqIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kXG4gICAqIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgdmFyIG15T2JqID0ge3ZhbDogMX1cbiAgICogICAgICAgLCBhZGRUd28gPSBmdW5jdGlvbiAoKSB7IG15T2JqLnZhbCArPSAyOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGFkZFR3bykudG8uaW5jcmVhc2UobXlPYmosICd2YWwnKS5ieSgzLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3QoYWRkVHdvLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uaW5jcmVhc2UobXlPYmosICd2YWwnKS5ieSgzKTtcbiAgICpcbiAgICogQG5hbWUgYnlcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGRlbHRhXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnREZWx0YShkZWx0YSwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG5cbiAgICB2YXIgbXNnT2JqID0gZmxhZyh0aGlzLCAnZGVsdGFNc2dPYmonKTtcbiAgICB2YXIgaW5pdGlhbCA9IGZsYWcodGhpcywgJ2luaXRpYWxEZWx0YVZhbHVlJyk7XG4gICAgdmFyIGZpbmFsID0gZmxhZyh0aGlzLCAnZmluYWxEZWx0YVZhbHVlJyk7XG4gICAgdmFyIGJlaGF2aW9yID0gZmxhZyh0aGlzLCAnZGVsdGFCZWhhdmlvcicpO1xuICAgIHZhciByZWFsRGVsdGEgPSBmbGFnKHRoaXMsICdyZWFsRGVsdGEnKTtcblxuICAgIHZhciBleHByZXNzaW9uO1xuICAgIGlmIChiZWhhdmlvciA9PT0gJ2NoYW5nZScpIHtcbiAgICAgIGV4cHJlc3Npb24gPSBNYXRoLmFicyhmaW5hbCAtIGluaXRpYWwpID09PSBNYXRoLmFicyhkZWx0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cHJlc3Npb24gPSByZWFsRGVsdGEgPT09IE1hdGguYWJzKGRlbHRhKTtcbiAgICB9XG5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGV4cHJlc3Npb25cbiAgICAgICwgJ2V4cGVjdGVkICcgKyBtc2dPYmogKyAnIHRvICcgKyBiZWhhdmlvciArICcgYnkgJyArIGRlbHRhXG4gICAgICAsICdleHBlY3RlZCAnICsgbXNnT2JqICsgJyB0byBub3QgJyArIGJlaGF2aW9yICsgJyBieSAnICsgZGVsdGFcbiAgICApO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnYnknLCBhc3NlcnREZWx0YSk7XG5cbiAgLyoqXG4gICAqICMjIyAuZXh0ZW5zaWJsZVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBleHRlbnNpYmxlLCB3aGljaCBtZWFucyB0aGF0IG5ldyBwcm9wZXJ0aWVzIGNhblxuICAgKiBiZSBhZGRlZCB0byBpdC4gUHJpbWl0aXZlcyBhcmUgbmV2ZXIgZXh0ZW5zaWJsZS5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmJlLmV4dGVuc2libGU7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuZXh0ZW5zaWJsZWAuXG4gICAqXG4gICAqICAgICB2YXIgbm9uRXh0ZW5zaWJsZU9iamVjdCA9IE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSlcbiAgICogICAgICAgLCBzZWFsZWRPYmplY3QgPSBPYmplY3Quc2VhbCh7fSlcbiAgICogICAgICAgLCBmcm96ZW5PYmplY3QgPSBPYmplY3QuZnJlZXplKHt9KTtcbiAgICpcbiAgICogICAgIGV4cGVjdChub25FeHRlbnNpYmxlT2JqZWN0KS50by5ub3QuYmUuZXh0ZW5zaWJsZTtcbiAgICogICAgIGV4cGVjdChzZWFsZWRPYmplY3QpLnRvLm5vdC5iZS5leHRlbnNpYmxlO1xuICAgKiAgICAgZXhwZWN0KGZyb3plbk9iamVjdCkudG8ubm90LmJlLmV4dGVuc2libGU7XG4gICAqICAgICBleHBlY3QoMSkudG8ubm90LmJlLmV4dGVuc2libGU7XG4gICAqXG4gICAqIEEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgY2FuIGJlIGdpdmVuIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLmV4dGVuc2libGU7XG4gICAqXG4gICAqIEBuYW1lIGV4dGVuc2libGVcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdleHRlbnNpYmxlJywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpO1xuXG4gICAgLy8gSW4gRVM1LCBpZiB0aGUgYXJndW1lbnQgdG8gdGhpcyBtZXRob2QgaXMgYSBwcmltaXRpdmUsIHRoZW4gaXQgd2lsbCBjYXVzZSBhIFR5cGVFcnJvci5cbiAgICAvLyBJbiBFUzYsIGEgbm9uLW9iamVjdCBhcmd1bWVudCB3aWxsIGJlIHRyZWF0ZWQgYXMgaWYgaXQgd2FzIGEgbm9uLWV4dGVuc2libGUgb3JkaW5hcnkgb2JqZWN0LCBzaW1wbHkgcmV0dXJuIGZhbHNlLlxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc0V4dGVuc2libGVcbiAgICAvLyBUaGUgZm9sbG93aW5nIHByb3ZpZGVzIEVTNiBiZWhhdmlvciBmb3IgRVM1IGVudmlyb25tZW50cy5cblxuICAgIHZhciBpc0V4dGVuc2libGUgPSBvYmogPT09IE9iamVjdChvYmopICYmIE9iamVjdC5pc0V4dGVuc2libGUob2JqKTtcblxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgaXNFeHRlbnNpYmxlXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIGV4dGVuc2libGUnXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBleHRlbnNpYmxlJ1xuICAgICk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLnNlYWxlZFxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBzZWFsZWQsIHdoaWNoIG1lYW5zIHRoYXQgbmV3IHByb3BlcnRpZXMgY2FuJ3QgYmVcbiAgICogYWRkZWQgdG8gaXQsIGFuZCBpdHMgZXhpc3RpbmcgcHJvcGVydGllcyBjYW4ndCBiZSByZWNvbmZpZ3VyZWQgb3IgZGVsZXRlZC5cbiAgICogSG93ZXZlciwgaXQncyBwb3NzaWJsZSB0aGF0IGl0cyBleGlzdGluZyBwcm9wZXJ0aWVzIGNhbiBzdGlsbCBiZSByZWFzc2lnbmVkXG4gICAqIHRvIGRpZmZlcmVudCB2YWx1ZXMuIFByaW1pdGl2ZXMgYXJlIGFsd2F5cyBzZWFsZWQuXG4gICAqXG4gICAqICAgICB2YXIgc2VhbGVkT2JqZWN0ID0gT2JqZWN0LnNlYWwoe30pO1xuICAgKiAgICAgdmFyIGZyb3plbk9iamVjdCA9IE9iamVjdC5mcmVlemUoe30pO1xuICAgKlxuICAgKiAgICAgZXhwZWN0KHNlYWxlZE9iamVjdCkudG8uYmUuc2VhbGVkO1xuICAgKiAgICAgZXhwZWN0KGZyb3plbk9iamVjdCkudG8uYmUuc2VhbGVkO1xuICAgKiAgICAgZXhwZWN0KDEpLnRvLmJlLnNlYWxlZDtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5zZWFsZWRgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8ubm90LmJlLnNlYWxlZDtcbiAgICpcbiAgICogQSBjdXN0b20gZXJyb3IgbWVzc2FnZSBjYW4gYmUgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0sICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5zZWFsZWQ7XG4gICAqXG4gICAqIEBuYW1lIHNlYWxlZFxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ3NlYWxlZCcsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKTtcblxuICAgIC8vIEluIEVTNSwgaWYgdGhlIGFyZ3VtZW50IHRvIHRoaXMgbWV0aG9kIGlzIGEgcHJpbWl0aXZlLCB0aGVuIGl0IHdpbGwgY2F1c2UgYSBUeXBlRXJyb3IuXG4gICAgLy8gSW4gRVM2LCBhIG5vbi1vYmplY3QgYXJndW1lbnQgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIGl0IHdhcyBhIHNlYWxlZCBvcmRpbmFyeSBvYmplY3QsIHNpbXBseSByZXR1cm4gdHJ1ZS5cbiAgICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzU2VhbGVkXG4gICAgLy8gVGhlIGZvbGxvd2luZyBwcm92aWRlcyBFUzYgYmVoYXZpb3IgZm9yIEVTNSBlbnZpcm9ubWVudHMuXG5cbiAgICB2YXIgaXNTZWFsZWQgPSBvYmogPT09IE9iamVjdChvYmopID8gT2JqZWN0LmlzU2VhbGVkKG9iaikgOiB0cnVlO1xuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpc1NlYWxlZFxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBzZWFsZWQnXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBzZWFsZWQnXG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuZnJvemVuXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGZyb3plbiwgd2hpY2ggbWVhbnMgdGhhdCBuZXcgcHJvcGVydGllcyBjYW4ndCBiZVxuICAgKiBhZGRlZCB0byBpdCwgYW5kIGl0cyBleGlzdGluZyBwcm9wZXJ0aWVzIGNhbid0IGJlIHJlYXNzaWduZWQgdG8gZGlmZmVyZW50XG4gICAqIHZhbHVlcywgcmVjb25maWd1cmVkLCBvciBkZWxldGVkLiBQcmltaXRpdmVzIGFyZSBhbHdheXMgZnJvemVuLlxuICAgKlxuICAgKiAgICAgdmFyIGZyb3plbk9iamVjdCA9IE9iamVjdC5mcmVlemUoe30pO1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGZyb3plbk9iamVjdCkudG8uYmUuZnJvemVuO1xuICAgKiAgICAgZXhwZWN0KDEpLnRvLmJlLmZyb3plbjtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5mcm96ZW5gLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8ubm90LmJlLmZyb3plbjtcbiAgICpcbiAgICogQSBjdXN0b20gZXJyb3IgbWVzc2FnZSBjYW4gYmUgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0sICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5mcm96ZW47XG4gICAqXG4gICAqIEBuYW1lIGZyb3plblxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ2Zyb3plbicsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKTtcblxuICAgIC8vIEluIEVTNSwgaWYgdGhlIGFyZ3VtZW50IHRvIHRoaXMgbWV0aG9kIGlzIGEgcHJpbWl0aXZlLCB0aGVuIGl0IHdpbGwgY2F1c2UgYSBUeXBlRXJyb3IuXG4gICAgLy8gSW4gRVM2LCBhIG5vbi1vYmplY3QgYXJndW1lbnQgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIGl0IHdhcyBhIGZyb3plbiBvcmRpbmFyeSBvYmplY3QsIHNpbXBseSByZXR1cm4gdHJ1ZS5cbiAgICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzRnJvemVuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBwcm92aWRlcyBFUzYgYmVoYXZpb3IgZm9yIEVTNSBlbnZpcm9ubWVudHMuXG5cbiAgICB2YXIgaXNGcm96ZW4gPSBvYmogPT09IE9iamVjdChvYmopID8gT2JqZWN0LmlzRnJvemVuKG9iaikgOiB0cnVlO1xuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpc0Zyb3plblxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBmcm96ZW4nXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBmcm96ZW4nXG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuZmluaXRlXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGEgbnVtYmVyLCBhbmQgaXNuJ3QgYE5hTmAgb3IgcG9zaXRpdmUvbmVnYXRpdmVcbiAgICogYEluZmluaXR5YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5iZS5maW5pdGU7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuZmluaXRlYC4gSG93ZXZlciwgaXQnc1xuICAgKiBkYW5nZXJvdXMgdG8gZG8gc28uIFRoZSBwcm9ibGVtIGlzIHRoYXQgaXQgY3JlYXRlcyB1bmNlcnRhaW4gZXhwZWN0YXRpb25zXG4gICAqIGJ5IGFzc2VydGluZyB0aGF0IHRoZSBzdWJqZWN0IGVpdGhlciBpc24ndCBhIG51bWJlciwgb3IgdGhhdCBpdCdzIGBOYU5gLCBvclxuICAgKiB0aGF0IGl0J3MgcG9zaXRpdmUgYEluZmluaXR5YCwgb3IgdGhhdCBpdCdzIG5lZ2F0aXZlIGBJbmZpbml0eWAuIEl0J3Mgb2Z0ZW5cbiAgICogYmVzdCB0byBpZGVudGlmeSB0aGUgZXhhY3Qgb3V0cHV0IHRoYXQncyBleHBlY3RlZCwgYW5kIHRoZW4gd3JpdGUgYW5cbiAgICogYXNzZXJ0aW9uIHRoYXQgb25seSBhY2NlcHRzIHRoYXQgZXhhY3Qgb3V0cHV0LlxuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgaXNuJ3QgZXhwZWN0ZWQgdG8gYmUgYSBudW1iZXIsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnRcbiAgICogdGhhdCBpdCdzIHRoZSBleHBlY3RlZCB0eXBlLCByYXRoZXIgdGhhbiBhc3NlcnRpbmcgdGhhdCBpdCBpc24ndCBvbmUgb2ZcbiAgICogbWFueSB1bmV4cGVjdGVkIHR5cGVzLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5iZS5hKCdzdHJpbmcnKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8ubm90LmJlLmZpbml0ZTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpcyBleHBlY3RlZCB0byBiZSBgTmFOYCwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydCBleGFjdGx5XG4gICAqIHRoYXQuXG4gICAqXG4gICAqICAgICBleHBlY3QoTmFOKS50by5iZS5OYU47IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoTmFOKS50by5ub3QuYmUuZmluaXRlOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGV4cGVjdGVkIHRvIGJlIHBvc2l0aXZlIGluZmluaXR5LCBpdCdzIG9mdGVuIGJlc3QgdG9cbiAgICogYXNzZXJ0IGV4YWN0bHkgdGhhdC5cbiAgICpcbiAgICogICAgIGV4cGVjdChJbmZpbml0eSkudG8uZXF1YWwoSW5maW5pdHkpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KEluZmluaXR5KS50by5ub3QuYmUuZmluaXRlOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGV4cGVjdGVkIHRvIGJlIG5lZ2F0aXZlIGluZmluaXR5LCBpdCdzIG9mdGVuIGJlc3QgdG9cbiAgICogYXNzZXJ0IGV4YWN0bHkgdGhhdC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgtSW5maW5pdHkpLnRvLmVxdWFsKC1JbmZpbml0eSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoLUluZmluaXR5KS50by5ub3QuYmUuZmluaXRlOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQSBjdXN0b20gZXJyb3IgbWVzc2FnZSBjYW4gYmUgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vJywgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLmZpbml0ZTtcbiAgICpcbiAgICogQG5hbWUgZmluaXRlXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnZmluaXRlJywgZnVuY3Rpb24obXNnKSB7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpO1xuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIHR5cGVvZiBvYmogPT09ICdudW1iZXInICYmIGlzRmluaXRlKG9iailcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgYSBmaW5pdGUgbnVtYmVyJ1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgYSBmaW5pdGUgbnVtYmVyJ1xuICAgICk7XG4gIH0pO1xufTtcbiIsICIvKiFcbiAqIGNoYWlcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjaGFpLCB1dGlsKSB7XG4gIGNoYWkuZXhwZWN0ID0gZnVuY3Rpb24gKHZhbCwgbWVzc2FnZSkge1xuICAgIHJldHVybiBuZXcgY2hhaS5Bc3NlcnRpb24odmFsLCBtZXNzYWdlKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5mYWlsKFttZXNzYWdlXSlcbiAgICogIyMjIC5mYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIFttZXNzYWdlXSwgW29wZXJhdG9yXSlcbiAgICpcbiAgICogVGhyb3cgYSBmYWlsdXJlLlxuICAgKlxuICAgKiAgICAgZXhwZWN0LmZhaWwoKTtcbiAgICogICAgIGV4cGVjdC5mYWlsKFwiY3VzdG9tIGVycm9yIG1lc3NhZ2VcIik7XG4gICAqICAgICBleHBlY3QuZmFpbCgxLCAyKTtcbiAgICogICAgIGV4cGVjdC5mYWlsKDEsIDIsIFwiY3VzdG9tIGVycm9yIG1lc3NhZ2VcIik7XG4gICAqICAgICBleHBlY3QuZmFpbCgxLCAyLCBcImN1c3RvbSBlcnJvciBtZXNzYWdlXCIsIFwiPlwiKTtcbiAgICogICAgIGV4cGVjdC5mYWlsKDEsIDIsIHVuZGVmaW5lZCwgXCI+XCIpO1xuICAgKlxuICAgKiBAbmFtZSBmYWlsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGFjdHVhbFxuICAgKiBAcGFyYW0ge01peGVkfSBleHBlY3RlZFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gb3BlcmF0b3JcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgY2hhaS5leHBlY3QuZmFpbCA9IGZ1bmN0aW9uIChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCBvcGVyYXRvcikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgICBtZXNzYWdlID0gYWN0dWFsO1xuICAgICAgICBhY3R1YWwgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ2V4cGVjdC5mYWlsKCknO1xuICAgIHRocm93IG5ldyBjaGFpLkFzc2VydGlvbkVycm9yKG1lc3NhZ2UsIHtcbiAgICAgICAgYWN0dWFsOiBhY3R1YWxcbiAgICAgICwgZXhwZWN0ZWQ6IGV4cGVjdGVkXG4gICAgICAsIG9wZXJhdG9yOiBvcGVyYXRvclxuICAgIH0sIGNoYWkuZXhwZWN0LmZhaWwpO1xuICB9O1xufTtcbiIsICIvKiFcbiAqIGNoYWlcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjaGFpLCB1dGlsKSB7XG4gIHZhciBBc3NlcnRpb24gPSBjaGFpLkFzc2VydGlvbjtcblxuICBmdW5jdGlvbiBsb2FkU2hvdWxkICgpIHtcbiAgICAvLyBleHBsaWNpdGx5IGRlZmluZSB0aGlzIG1ldGhvZCBhcyBmdW5jdGlvbiBhcyB0byBoYXZlIGl0J3MgbmFtZSB0byBpbmNsdWRlIGFzIGBzc2ZpYFxuICAgIGZ1bmN0aW9uIHNob3VsZEdldHRlcigpIHtcbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgU3RyaW5nXG4gICAgICAgICAgfHwgdGhpcyBpbnN0YW5jZW9mIE51bWJlclxuICAgICAgICAgIHx8IHRoaXMgaW5zdGFuY2VvZiBCb29sZWFuXG4gICAgICAgICAgfHwgdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGlzIGluc3RhbmNlb2YgU3ltYm9sXG4gICAgICAgICAgfHwgdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGlzIGluc3RhbmNlb2YgQmlnSW50KSB7XG4gICAgICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uKHRoaXMudmFsdWVPZigpLCBudWxsLCBzaG91bGRHZXR0ZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBBc3NlcnRpb24odGhpcywgbnVsbCwgc2hvdWxkR2V0dGVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2hvdWxkU2V0dGVyKHZhbHVlKSB7XG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2NoYWlqcy9jaGFpL2lzc3Vlcy84NjogdGhpcyBtYWtlc1xuICAgICAgLy8gYHdoYXRldmVyLnNob3VsZCA9IHNvbWVWYWx1ZWAgYWN0dWFsbHkgc2V0IGBzb21lVmFsdWVgLCB3aGljaCBpc1xuICAgICAgLy8gZXNwZWNpYWxseSB1c2VmdWwgZm9yIGBnbG9iYWwuc2hvdWxkID0gcmVxdWlyZSgnY2hhaScpLnNob3VsZCgpYC5cbiAgICAgIC8vXG4gICAgICAvLyBOb3RlIHRoYXQgd2UgaGF2ZSB0byB1c2UgW1tEZWZpbmVQcm9wZXJ0eV1dIGluc3RlYWQgb2YgW1tQdXRdXVxuICAgICAgLy8gc2luY2Ugb3RoZXJ3aXNlIHdlIHdvdWxkIHRyaWdnZXIgdGhpcyB2ZXJ5IHNldHRlciFcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc2hvdWxkJywge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBtb2RpZnkgT2JqZWN0LnByb3RvdHlwZSB0byBoYXZlIGBzaG91bGRgXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdC5wcm90b3R5cGUsICdzaG91bGQnLCB7XG4gICAgICBzZXQ6IHNob3VsZFNldHRlclxuICAgICAgLCBnZXQ6IHNob3VsZEdldHRlclxuICAgICAgLCBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcblxuICAgIHZhciBzaG91bGQgPSB7fTtcblxuICAgIC8qKlxuICAgICAqICMjIyAuZmFpbChbbWVzc2FnZV0pXG4gICAgICogIyMjIC5mYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIFttZXNzYWdlXSwgW29wZXJhdG9yXSlcbiAgICAgKlxuICAgICAqIFRocm93IGEgZmFpbHVyZS5cbiAgICAgKlxuICAgICAqICAgICBzaG91bGQuZmFpbCgpO1xuICAgICAqICAgICBzaG91bGQuZmFpbChcImN1c3RvbSBlcnJvciBtZXNzYWdlXCIpO1xuICAgICAqICAgICBzaG91bGQuZmFpbCgxLCAyKTtcbiAgICAgKiAgICAgc2hvdWxkLmZhaWwoMSwgMiwgXCJjdXN0b20gZXJyb3IgbWVzc2FnZVwiKTtcbiAgICAgKiAgICAgc2hvdWxkLmZhaWwoMSwgMiwgXCJjdXN0b20gZXJyb3IgbWVzc2FnZVwiLCBcIj5cIik7XG4gICAgICogICAgIHNob3VsZC5mYWlsKDEsIDIsIHVuZGVmaW5lZCwgXCI+XCIpO1xuICAgICAqXG4gICAgICpcbiAgICAgKiBAbmFtZSBmYWlsXG4gICAgICogQHBhcmFtIHtNaXhlZH0gYWN0dWFsXG4gICAgICogQHBhcmFtIHtNaXhlZH0gZXhwZWN0ZWRcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBvcGVyYXRvclxuICAgICAqIEBuYW1lc3BhY2UgQkREXG4gICAgICogQGFwaSBwdWJsaWNcbiAgICAgKi9cblxuICAgIHNob3VsZC5mYWlsID0gZnVuY3Rpb24gKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wZXJhdG9yKSB7XG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICBtZXNzYWdlID0gYWN0dWFsO1xuICAgICAgICAgIGFjdHVhbCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ3Nob3VsZC5mYWlsKCknO1xuICAgICAgdGhyb3cgbmV3IGNoYWkuQXNzZXJ0aW9uRXJyb3IobWVzc2FnZSwge1xuICAgICAgICAgIGFjdHVhbDogYWN0dWFsXG4gICAgICAgICwgZXhwZWN0ZWQ6IGV4cGVjdGVkXG4gICAgICAgICwgb3BlcmF0b3I6IG9wZXJhdG9yXG4gICAgICB9LCBzaG91bGQuZmFpbCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICMjIyAuZXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgW21lc3NhZ2VdKVxuICAgICAqXG4gICAgICogQXNzZXJ0cyBub24tc3RyaWN0IGVxdWFsaXR5IChgPT1gKSBvZiBgYWN0dWFsYCBhbmQgYGV4cGVjdGVkYC5cbiAgICAgKlxuICAgICAqICAgICBzaG91bGQuZXF1YWwoMywgJzMnLCAnPT0gY29lcmNlcyB2YWx1ZXMgdG8gc3RyaW5ncycpO1xuICAgICAqXG4gICAgICogQG5hbWUgZXF1YWxcbiAgICAgKiBAcGFyYW0ge01peGVkfSBhY3R1YWxcbiAgICAgKiBAcGFyYW0ge01peGVkfSBleHBlY3RlZFxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAgICogQG5hbWVzcGFjZSBTaG91bGRcbiAgICAgKiBAYXBpIHB1YmxpY1xuICAgICAqL1xuXG4gICAgc2hvdWxkLmVxdWFsID0gZnVuY3Rpb24gKHZhbDEsIHZhbDIsIG1zZykge1xuICAgICAgbmV3IEFzc2VydGlvbih2YWwxLCBtc2cpLnRvLmVxdWFsKHZhbDIpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiAjIyMgLnRocm93KGZ1bmN0aW9uLCBbY29uc3RydWN0b3Ivc3RyaW5nL3JlZ2V4cF0sIFtzdHJpbmcvcmVnZXhwXSwgW21lc3NhZ2VdKVxuICAgICAqXG4gICAgICogQXNzZXJ0cyB0aGF0IGBmdW5jdGlvbmAgd2lsbCB0aHJvdyBhbiBlcnJvciB0aGF0IGlzIGFuIGluc3RhbmNlIG9mXG4gICAgICogYGNvbnN0cnVjdG9yYCwgb3IgYWx0ZXJuYXRlbHkgdGhhdCBpdCB3aWxsIHRocm93IGFuIGVycm9yIHdpdGggbWVzc2FnZVxuICAgICAqIG1hdGNoaW5nIGByZWdleHBgLlxuICAgICAqXG4gICAgICogICAgIHNob3VsZC50aHJvdyhmbiwgJ2Z1bmN0aW9uIHRocm93cyBhIHJlZmVyZW5jZSBlcnJvcicpO1xuICAgICAqICAgICBzaG91bGQudGhyb3coZm4sIC9mdW5jdGlvbiB0aHJvd3MgYSByZWZlcmVuY2UgZXJyb3IvKTtcbiAgICAgKiAgICAgc2hvdWxkLnRocm93KGZuLCBSZWZlcmVuY2VFcnJvcik7XG4gICAgICogICAgIHNob3VsZC50aHJvdyhmbiwgUmVmZXJlbmNlRXJyb3IsICdmdW5jdGlvbiB0aHJvd3MgYSByZWZlcmVuY2UgZXJyb3InKTtcbiAgICAgKiAgICAgc2hvdWxkLnRocm93KGZuLCBSZWZlcmVuY2VFcnJvciwgL2Z1bmN0aW9uIHRocm93cyBhIHJlZmVyZW5jZSBlcnJvci8pO1xuICAgICAqXG4gICAgICogQG5hbWUgdGhyb3dcbiAgICAgKiBAYWxpYXMgVGhyb3dcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RXJyb3JDb25zdHJ1Y3Rvcn0gY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmVnZXhwXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0Vycm9yI0Vycm9yX3R5cGVzXG4gICAgICogQG5hbWVzcGFjZSBTaG91bGRcbiAgICAgKiBAYXBpIHB1YmxpY1xuICAgICAqL1xuXG4gICAgc2hvdWxkLlRocm93ID0gZnVuY3Rpb24gKGZuLCBlcnJ0LCBlcnJzLCBtc2cpIHtcbiAgICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZykudG8uVGhyb3coZXJydCwgZXJycyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICMjIyAuZXhpc3RcbiAgICAgKlxuICAgICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIG5laXRoZXIgYG51bGxgIG5vciBgdW5kZWZpbmVkYC5cbiAgICAgKlxuICAgICAqICAgICB2YXIgZm9vID0gJ2hpJztcbiAgICAgKlxuICAgICAqICAgICBzaG91bGQuZXhpc3QoZm9vLCAnZm9vIGV4aXN0cycpO1xuICAgICAqXG4gICAgICogQG5hbWUgZXhpc3RcbiAgICAgKiBAbmFtZXNwYWNlIFNob3VsZFxuICAgICAqIEBhcGkgcHVibGljXG4gICAgICovXG5cbiAgICBzaG91bGQuZXhpc3QgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2cpLnRvLmV4aXN0O1xuICAgIH1cblxuICAgIC8vIG5lZ2F0aW9uXG4gICAgc2hvdWxkLm5vdCA9IHt9XG5cbiAgICAvKipcbiAgICAgKiAjIyMgLm5vdC5lcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBbbWVzc2FnZV0pXG4gICAgICpcbiAgICAgKiBBc3NlcnRzIG5vbi1zdHJpY3QgaW5lcXVhbGl0eSAoYCE9YCkgb2YgYGFjdHVhbGAgYW5kIGBleHBlY3RlZGAuXG4gICAgICpcbiAgICAgKiAgICAgc2hvdWxkLm5vdC5lcXVhbCgzLCA0LCAndGhlc2UgbnVtYmVycyBhcmUgbm90IGVxdWFsJyk7XG4gICAgICpcbiAgICAgKiBAbmFtZSBub3QuZXF1YWxcbiAgICAgKiBAcGFyYW0ge01peGVkfSBhY3R1YWxcbiAgICAgKiBAcGFyYW0ge01peGVkfSBleHBlY3RlZFxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAgICogQG5hbWVzcGFjZSBTaG91bGRcbiAgICAgKiBAYXBpIHB1YmxpY1xuICAgICAqL1xuXG4gICAgc2hvdWxkLm5vdC5lcXVhbCA9IGZ1bmN0aW9uICh2YWwxLCB2YWwyLCBtc2cpIHtcbiAgICAgIG5ldyBBc3NlcnRpb24odmFsMSwgbXNnKS50by5ub3QuZXF1YWwodmFsMik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICMjIyAudGhyb3coZnVuY3Rpb24sIFtjb25zdHJ1Y3Rvci9yZWdleHBdLCBbbWVzc2FnZV0pXG4gICAgICpcbiAgICAgKiBBc3NlcnRzIHRoYXQgYGZ1bmN0aW9uYCB3aWxsIF9ub3RfIHRocm93IGFuIGVycm9yIHRoYXQgaXMgYW4gaW5zdGFuY2Ugb2ZcbiAgICAgKiBgY29uc3RydWN0b3JgLCBvciBhbHRlcm5hdGVseSB0aGF0IGl0IHdpbGwgbm90IHRocm93IGFuIGVycm9yIHdpdGggbWVzc2FnZVxuICAgICAqIG1hdGNoaW5nIGByZWdleHBgLlxuICAgICAqXG4gICAgICogICAgIHNob3VsZC5ub3QudGhyb3coZm4sIEVycm9yLCAnZnVuY3Rpb24gZG9lcyBub3QgdGhyb3cnKTtcbiAgICAgKlxuICAgICAqIEBuYW1lIG5vdC50aHJvd1xuICAgICAqIEBhbGlhcyBub3QuVGhyb3dcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RXJyb3JDb25zdHJ1Y3Rvcn0gY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmVnZXhwXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0Vycm9yI0Vycm9yX3R5cGVzXG4gICAgICogQG5hbWVzcGFjZSBTaG91bGRcbiAgICAgKiBAYXBpIHB1YmxpY1xuICAgICAqL1xuXG4gICAgc2hvdWxkLm5vdC5UaHJvdyA9IGZ1bmN0aW9uIChmbiwgZXJydCwgZXJycywgbXNnKSB7XG4gICAgICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2cpLnRvLm5vdC5UaHJvdyhlcnJ0LCBlcnJzKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogIyMjIC5ub3QuZXhpc3RcbiAgICAgKlxuICAgICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIG5laXRoZXIgYG51bGxgIG5vciBgdW5kZWZpbmVkYC5cbiAgICAgKlxuICAgICAqICAgICB2YXIgYmFyID0gbnVsbDtcbiAgICAgKlxuICAgICAqICAgICBzaG91bGQubm90LmV4aXN0KGJhciwgJ2JhciBkb2VzIG5vdCBleGlzdCcpO1xuICAgICAqXG4gICAgICogQG5hbWUgbm90LmV4aXN0XG4gICAgICogQG5hbWVzcGFjZSBTaG91bGRcbiAgICAgKiBAYXBpIHB1YmxpY1xuICAgICAqL1xuXG4gICAgc2hvdWxkLm5vdC5leGlzdCA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZykudG8ubm90LmV4aXN0O1xuICAgIH1cblxuICAgIHNob3VsZFsndGhyb3cnXSA9IHNob3VsZFsnVGhyb3cnXTtcbiAgICBzaG91bGQubm90Wyd0aHJvdyddID0gc2hvdWxkLm5vdFsnVGhyb3cnXTtcblxuICAgIHJldHVybiBzaG91bGQ7XG4gIH07XG5cbiAgY2hhaS5zaG91bGQgPSBsb2FkU2hvdWxkO1xuICBjaGFpLlNob3VsZCA9IGxvYWRTaG91bGQ7XG59O1xuIiwgIi8qIVxuICogY2hhaVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNoYWksIHV0aWwpIHtcbiAgLyohXG4gICAqIENoYWkgZGVwZW5kZW5jaWVzLlxuICAgKi9cblxuICB2YXIgQXNzZXJ0aW9uID0gY2hhaS5Bc3NlcnRpb25cbiAgICAsIGZsYWcgPSB1dGlsLmZsYWc7XG5cbiAgLyohXG4gICAqIE1vZHVsZSBleHBvcnQuXG4gICAqL1xuXG4gIC8qKlxuICAgKiAjIyMgYXNzZXJ0KGV4cHJlc3Npb24sIG1lc3NhZ2UpXG4gICAqXG4gICAqIFdyaXRlIHlvdXIgb3duIHRlc3QgZXhwcmVzc2lvbnMuXG4gICAqXG4gICAqICAgICBhc3NlcnQoJ2ZvbycgIT09ICdiYXInLCAnZm9vIGlzIG5vdCBiYXInKTtcbiAgICogICAgIGFzc2VydChBcnJheS5pc0FycmF5KFtdKSwgJ2VtcHR5IGFycmF5cyBhcmUgYXJyYXlzJyk7XG4gICAqXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGV4cHJlc3Npb24gdG8gdGVzdCBmb3IgdHJ1dGhpbmVzc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSB0byBkaXNwbGF5IG9uIGVycm9yXG4gICAqIEBuYW1lIGFzc2VydFxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICB2YXIgYXNzZXJ0ID0gY2hhaS5hc3NlcnQgPSBmdW5jdGlvbiAoZXhwcmVzcywgZXJybXNnKSB7XG4gICAgdmFyIHRlc3QgPSBuZXcgQXNzZXJ0aW9uKG51bGwsIG51bGwsIGNoYWkuYXNzZXJ0LCB0cnVlKTtcbiAgICB0ZXN0LmFzc2VydChcbiAgICAgICAgZXhwcmVzc1xuICAgICAgLCBlcnJtc2dcbiAgICAgICwgJ1sgbmVnYXRpb24gbWVzc2FnZSB1bmF2YWlsYWJsZSBdJ1xuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuZmFpbChbbWVzc2FnZV0pXG4gICAqICMjIyAuZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBbbWVzc2FnZV0sIFtvcGVyYXRvcl0pXG4gICAqXG4gICAqIFRocm93IGEgZmFpbHVyZS4gTm9kZS5qcyBgYXNzZXJ0YCBtb2R1bGUtY29tcGF0aWJsZS5cbiAgICpcbiAgICogICAgIGFzc2VydC5mYWlsKCk7XG4gICAqICAgICBhc3NlcnQuZmFpbChcImN1c3RvbSBlcnJvciBtZXNzYWdlXCIpO1xuICAgKiAgICAgYXNzZXJ0LmZhaWwoMSwgMik7XG4gICAqICAgICBhc3NlcnQuZmFpbCgxLCAyLCBcImN1c3RvbSBlcnJvciBtZXNzYWdlXCIpO1xuICAgKiAgICAgYXNzZXJ0LmZhaWwoMSwgMiwgXCJjdXN0b20gZXJyb3IgbWVzc2FnZVwiLCBcIj5cIik7XG4gICAqICAgICBhc3NlcnQuZmFpbCgxLCAyLCB1bmRlZmluZWQsIFwiPlwiKTtcbiAgICpcbiAgICogQG5hbWUgZmFpbFxuICAgKiBAcGFyYW0ge01peGVkfSBhY3R1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gZXhwZWN0ZWRcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQHBhcmFtIHtTdHJpbmd9IG9wZXJhdG9yXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5mYWlsID0gZnVuY3Rpb24gKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wZXJhdG9yKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICAgIC8vIENvbXBseSB3aXRoIE5vZGUncyBmYWlsKFttZXNzYWdlXSkgaW50ZXJmYWNlXG5cbiAgICAgICAgbWVzc2FnZSA9IGFjdHVhbDtcbiAgICAgICAgYWN0dWFsID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIG1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdhc3NlcnQuZmFpbCgpJztcbiAgICB0aHJvdyBuZXcgY2hhaS5Bc3NlcnRpb25FcnJvcihtZXNzYWdlLCB7XG4gICAgICAgIGFjdHVhbDogYWN0dWFsXG4gICAgICAsIGV4cGVjdGVkOiBleHBlY3RlZFxuICAgICAgLCBvcGVyYXRvcjogb3BlcmF0b3JcbiAgICB9LCBhc3NlcnQuZmFpbCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNPayhvYmplY3QsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGlzIHRydXRoeS5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc09rKCdldmVyeXRoaW5nJywgJ2V2ZXJ5dGhpbmcgaXMgb2snKTtcbiAgICogICAgIGFzc2VydC5pc09rKGZhbHNlLCAndGhpcyB3aWxsIGZhaWwnKTtcbiAgICpcbiAgICogQG5hbWUgaXNPa1xuICAgKiBAYWxpYXMgb2tcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0IHRvIHRlc3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzT2sgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNPaywgdHJ1ZSkuaXMub2s7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNOb3RPayhvYmplY3QsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGlzIGZhbHN5LlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzTm90T2soJ2V2ZXJ5dGhpbmcnLCAndGhpcyB3aWxsIGZhaWwnKTtcbiAgICogICAgIGFzc2VydC5pc05vdE9rKGZhbHNlLCAndGhpcyB3aWxsIHBhc3MnKTtcbiAgICpcbiAgICogQG5hbWUgaXNOb3RPa1xuICAgKiBAYWxpYXMgbm90T2tcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0IHRvIHRlc3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTm90T2sgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RPaywgdHJ1ZSkuaXMubm90Lm9rO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyBub24tc3RyaWN0IGVxdWFsaXR5IChgPT1gKSBvZiBgYWN0dWFsYCBhbmQgYGV4cGVjdGVkYC5cbiAgICpcbiAgICogICAgIGFzc2VydC5lcXVhbCgzLCAnMycsICc9PSBjb2VyY2VzIHZhbHVlcyB0byBzdHJpbmdzJyk7XG4gICAqXG4gICAqIEBuYW1lIGVxdWFsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGFjdHVhbFxuICAgKiBAcGFyYW0ge01peGVkfSBleHBlY3RlZFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiAoYWN0LCBleHAsIG1zZykge1xuICAgIHZhciB0ZXN0ID0gbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0LmVxdWFsLCB0cnVlKTtcblxuICAgIHRlc3QuYXNzZXJ0KFxuICAgICAgICBleHAgPT0gZmxhZyh0ZXN0LCAnb2JqZWN0JylcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gZXF1YWwgI3tleHB9J1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgZXF1YWwgI3thY3R9J1xuICAgICAgLCBleHBcbiAgICAgICwgYWN0XG4gICAgICAsIHRydWVcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyBub24tc3RyaWN0IGluZXF1YWxpdHkgKGAhPWApIG9mIGBhY3R1YWxgIGFuZCBgZXhwZWN0ZWRgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdEVxdWFsKDMsIDQsICd0aGVzZSBudW1iZXJzIGFyZSBub3QgZXF1YWwnKTtcbiAgICpcbiAgICogQG5hbWUgbm90RXF1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gYWN0dWFsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGV4cGVjdGVkXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RFcXVhbCA9IGZ1bmN0aW9uIChhY3QsIGV4cCwgbXNnKSB7XG4gICAgdmFyIHRlc3QgPSBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQubm90RXF1YWwsIHRydWUpO1xuXG4gICAgdGVzdC5hc3NlcnQoXG4gICAgICAgIGV4cCAhPSBmbGFnKHRlc3QsICdvYmplY3QnKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgZXF1YWwgI3tleHB9J1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBlcXVhbCAje2FjdH0nXG4gICAgICAsIGV4cFxuICAgICAgLCBhY3RcbiAgICAgICwgdHJ1ZVxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuc3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHN0cmljdCBlcXVhbGl0eSAoYD09PWApIG9mIGBhY3R1YWxgIGFuZCBgZXhwZWN0ZWRgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRydWUsIHRydWUsICd0aGVzZSBib29sZWFucyBhcmUgc3RyaWN0bHkgZXF1YWwnKTtcbiAgICpcbiAgICogQG5hbWUgc3RyaWN0RXF1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gYWN0dWFsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGV4cGVjdGVkXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5zdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIChhY3QsIGV4cCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0LnN0cmljdEVxdWFsLCB0cnVlKS50by5lcXVhbChleHApO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyBzdHJpY3QgaW5lcXVhbGl0eSAoYCE9PWApIG9mIGBhY3R1YWxgIGFuZCBgZXhwZWN0ZWRgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKDMsICczJywgJ25vIGNvZXJjaW9uIGZvciBzdHJpY3QgZXF1YWxpdHknKTtcbiAgICpcbiAgICogQG5hbWUgbm90U3RyaWN0RXF1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gYWN0dWFsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGV4cGVjdGVkXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIChhY3QsIGV4cCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsLCB0cnVlKS50by5ub3QuZXF1YWwoZXhwKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYGFjdHVhbGAgaXMgZGVlcGx5IGVxdWFsIHRvIGBleHBlY3RlZGAuXG4gICAqXG4gICAqICAgICBhc3NlcnQuZGVlcEVxdWFsKHsgdGVhOiAnZ3JlZW4nIH0sIHsgdGVhOiAnZ3JlZW4nIH0pO1xuICAgKlxuICAgKiBAbmFtZSBkZWVwRXF1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gYWN0dWFsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGV4cGVjdGVkXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhbGlhcyBkZWVwU3RyaWN0RXF1YWxcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmRlZXBFcXVhbCA9IGFzc2VydC5kZWVwU3RyaWN0RXF1YWwgPSBmdW5jdGlvbiAoYWN0LCBleHAsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5kZWVwRXF1YWwsIHRydWUpLnRvLmVxbChleHApO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdERlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydCB0aGF0IGBhY3R1YWxgIGlzIG5vdCBkZWVwbHkgZXF1YWwgdG8gYGV4cGVjdGVkYC5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3REZWVwRXF1YWwoeyB0ZWE6ICdncmVlbicgfSwgeyB0ZWE6ICdqYXNtaW5lJyB9KTtcbiAgICpcbiAgICogQG5hbWUgbm90RGVlcEVxdWFsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGFjdHVhbFxuICAgKiBAcGFyYW0ge01peGVkfSBleHBlY3RlZFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90RGVlcEVxdWFsID0gZnVuY3Rpb24gKGFjdCwgZXhwLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQubm90RGVlcEVxdWFsLCB0cnVlKS50by5ub3QuZXFsKGV4cCk7XG4gIH07XG5cbiAgIC8qKlxuICAgKiAjIyMgLmlzQWJvdmUodmFsdWVUb0NoZWNrLCB2YWx1ZVRvQmVBYm92ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIGB2YWx1ZVRvQ2hlY2tgIGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiAoPikgYHZhbHVlVG9CZUFib3ZlYC5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc0Fib3ZlKDUsIDIsICc1IGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiAyJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzQWJvdmVcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVUb0NoZWNrXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlVG9CZUFib3ZlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0Fib3ZlID0gZnVuY3Rpb24gKHZhbCwgYWJ2LCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNBYm92ZSwgdHJ1ZSkudG8uYmUuYWJvdmUoYWJ2KTtcbiAgfTtcblxuICAgLyoqXG4gICAqICMjIyAuaXNBdExlYXN0KHZhbHVlVG9DaGVjaywgdmFsdWVUb0JlQXRMZWFzdCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIGB2YWx1ZVRvQ2hlY2tgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAoPj0pIGB2YWx1ZVRvQmVBdExlYXN0YC5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc0F0TGVhc3QoNSwgMiwgJzUgaXMgZ3JlYXRlciBvciBlcXVhbCB0byAyJyk7XG4gICAqICAgICBhc3NlcnQuaXNBdExlYXN0KDMsIDMsICczIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMycpO1xuICAgKlxuICAgKiBAbmFtZSBpc0F0TGVhc3RcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVUb0NoZWNrXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlVG9CZUF0TGVhc3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzQXRMZWFzdCA9IGZ1bmN0aW9uICh2YWwsIGF0bHN0LCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNBdExlYXN0LCB0cnVlKS50by5iZS5sZWFzdChhdGxzdCk7XG4gIH07XG5cbiAgIC8qKlxuICAgKiAjIyMgLmlzQmVsb3codmFsdWVUb0NoZWNrLCB2YWx1ZVRvQmVCZWxvdywgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIGB2YWx1ZVRvQ2hlY2tgIGlzIHN0cmljdGx5IGxlc3MgdGhhbiAoPCkgYHZhbHVlVG9CZUJlbG93YC5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc0JlbG93KDMsIDYsICczIGlzIHN0cmljdGx5IGxlc3MgdGhhbiA2Jyk7XG4gICAqXG4gICAqIEBuYW1lIGlzQmVsb3dcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVUb0NoZWNrXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlVG9CZUJlbG93XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0JlbG93ID0gZnVuY3Rpb24gKHZhbCwgYmx3LCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNCZWxvdywgdHJ1ZSkudG8uYmUuYmVsb3coYmx3KTtcbiAgfTtcblxuICAgLyoqXG4gICAqICMjIyAuaXNBdE1vc3QodmFsdWVUb0NoZWNrLCB2YWx1ZVRvQmVBdE1vc3QsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyBgdmFsdWVUb0NoZWNrYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gKDw9KSBgdmFsdWVUb0JlQXRNb3N0YC5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc0F0TW9zdCgzLCA2LCAnMyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNicpO1xuICAgKiAgICAgYXNzZXJ0LmlzQXRNb3N0KDQsIDQsICc0IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byA0Jyk7XG4gICAqXG4gICAqIEBuYW1lIGlzQXRNb3N0XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlVG9DaGVja1xuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVRvQmVBdE1vc3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzQXRNb3N0ID0gZnVuY3Rpb24gKHZhbCwgYXRtc3QsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0F0TW9zdCwgdHJ1ZSkudG8uYmUubW9zdChhdG1zdCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNUcnVlKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIHRydWUuXG4gICAqXG4gICAqICAgICB2YXIgdGVhU2VydmVkID0gdHJ1ZTtcbiAgICogICAgIGFzc2VydC5pc1RydWUodGVhU2VydmVkLCAndGhlIHRlYSBoYXMgYmVlbiBzZXJ2ZWQnKTtcbiAgICpcbiAgICogQG5hbWUgaXNUcnVlXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc1RydWUgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNUcnVlLCB0cnVlKS5pc1sndHJ1ZSddO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90VHJ1ZSh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBub3QgdHJ1ZS5cbiAgICpcbiAgICogICAgIHZhciB0ZWEgPSAndGFzdHkgY2hhaSc7XG4gICAqICAgICBhc3NlcnQuaXNOb3RUcnVlKHRlYSwgJ2dyZWF0LCB0aW1lIGZvciB0ZWEhJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90VHJ1ZVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOb3RUcnVlID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90VHJ1ZSwgdHJ1ZSkudG8ubm90LmVxdWFsKHRydWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzRmFsc2UodmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgZmFsc2UuXG4gICAqXG4gICAqICAgICB2YXIgdGVhU2VydmVkID0gZmFsc2U7XG4gICAqICAgICBhc3NlcnQuaXNGYWxzZSh0ZWFTZXJ2ZWQsICdubyB0ZWEgeWV0PyBobW0uLi4nKTtcbiAgICpcbiAgICogQG5hbWUgaXNGYWxzZVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNGYWxzZSA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0ZhbHNlLCB0cnVlKS5pc1snZmFsc2UnXTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc05vdEZhbHNlKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIG5vdCBmYWxzZS5cbiAgICpcbiAgICogICAgIHZhciB0ZWEgPSAndGFzdHkgY2hhaSc7XG4gICAqICAgICBhc3NlcnQuaXNOb3RGYWxzZSh0ZWEsICdncmVhdCwgdGltZSBmb3IgdGVhIScpO1xuICAgKlxuICAgKiBAbmFtZSBpc05vdEZhbHNlXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc05vdEZhbHNlID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90RmFsc2UsIHRydWUpLnRvLm5vdC5lcXVhbChmYWxzZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNOdWxsKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIG51bGwuXG4gICAqXG4gICAqICAgICBhc3NlcnQuaXNOdWxsKGVyciwgJ3RoZXJlIHdhcyBubyBlcnJvcicpO1xuICAgKlxuICAgKiBAbmFtZSBpc051bGxcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTnVsbCA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc051bGwsIHRydWUpLnRvLmVxdWFsKG51bGwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90TnVsbCh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBub3QgbnVsbC5cbiAgICpcbiAgICogICAgIHZhciB0ZWEgPSAndGFzdHkgY2hhaSc7XG4gICAqICAgICBhc3NlcnQuaXNOb3ROdWxsKHRlYSwgJ2dyZWF0LCB0aW1lIGZvciB0ZWEhJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90TnVsbFxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOb3ROdWxsID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90TnVsbCwgdHJ1ZSkudG8ubm90LmVxdWFsKG51bGwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTmFOXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB2YWx1ZSBpcyBOYU4uXG4gICAqXG4gICAqICAgICBhc3NlcnQuaXNOYU4oTmFOLCAnTmFOIGlzIE5hTicpO1xuICAgKlxuICAgKiBAbmFtZSBpc05hTlxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOYU4gPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOYU4sIHRydWUpLnRvLmJlLk5hTjtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc05vdE5hTlxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdmFsdWUgaXMgbm90IE5hTi5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc05vdE5hTig0LCAnNCBpcyBub3QgTmFOJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90TmFOXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuICBhc3NlcnQuaXNOb3ROYU4gPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3ROYU4sIHRydWUpLm5vdC50by5iZS5OYU47XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuZXhpc3RzXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIG5laXRoZXIgYG51bGxgIG5vciBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogICAgIHZhciBmb28gPSAnaGknO1xuICAgKlxuICAgKiAgICAgYXNzZXJ0LmV4aXN0cyhmb28sICdmb28gaXMgbmVpdGhlciBgbnVsbGAgbm9yIGB1bmRlZmluZWRgJyk7XG4gICAqXG4gICAqIEBuYW1lIGV4aXN0c1xuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZXhpc3RzID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmV4aXN0cywgdHJ1ZSkudG8uZXhpc3Q7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90RXhpc3RzXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGVpdGhlciBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gICAqXG4gICAqICAgICB2YXIgYmFyID0gbnVsbFxuICAgKiAgICAgICAsIGJhejtcbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RFeGlzdHMoYmFyKTtcbiAgICogICAgIGFzc2VydC5ub3RFeGlzdHMoYmF6LCAnYmF6IGlzIGVpdGhlciBudWxsIG9yIHVuZGVmaW5lZCcpO1xuICAgKlxuICAgKiBAbmFtZSBub3RFeGlzdHNcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdEV4aXN0cyA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5ub3RFeGlzdHMsIHRydWUpLnRvLm5vdC5leGlzdDtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc1VuZGVmaW5lZCh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogICAgIHZhciB0ZWE7XG4gICAqICAgICBhc3NlcnQuaXNVbmRlZmluZWQodGVhLCAnbm8gdGVhIGRlZmluZWQnKTtcbiAgICpcbiAgICogQG5hbWUgaXNVbmRlZmluZWRcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzVW5kZWZpbmVkID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzVW5kZWZpbmVkLCB0cnVlKS50by5lcXVhbCh1bmRlZmluZWQpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzRGVmaW5lZCh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBub3QgYHVuZGVmaW5lZGAuXG4gICAqXG4gICAqICAgICB2YXIgdGVhID0gJ2N1cCBvZiBjaGFpJztcbiAgICogICAgIGFzc2VydC5pc0RlZmluZWQodGVhLCAndGVhIGhhcyBiZWVuIGRlZmluZWQnKTtcbiAgICpcbiAgICogQG5hbWUgaXNEZWZpbmVkXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0RlZmluZWQgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNEZWZpbmVkLCB0cnVlKS50by5ub3QuZXF1YWwodW5kZWZpbmVkKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc0Z1bmN0aW9uKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIGEgZnVuY3Rpb24uXG4gICAqXG4gICAqICAgICBmdW5jdGlvbiBzZXJ2ZVRlYSgpIHsgcmV0dXJuICdjdXAgb2YgdGVhJzsgfTtcbiAgICogICAgIGFzc2VydC5pc0Z1bmN0aW9uKHNlcnZlVGVhLCAnZ3JlYXQsIHdlIGNhbiBoYXZlIHRlYSBub3cnKTtcbiAgICpcbiAgICogQG5hbWUgaXNGdW5jdGlvblxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0Z1bmN0aW9uLCB0cnVlKS50by5iZS5hKCdmdW5jdGlvbicpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90RnVuY3Rpb24odmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgX25vdF8gYSBmdW5jdGlvbi5cbiAgICpcbiAgICogICAgIHZhciBzZXJ2ZVRlYSA9IFsgJ2hlYXQnLCAncG91cicsICdzaXAnIF07XG4gICAqICAgICBhc3NlcnQuaXNOb3RGdW5jdGlvbihzZXJ2ZVRlYSwgJ2dyZWF0LCB3ZSBoYXZlIGxpc3RlZCB0aGUgc3RlcHMnKTtcbiAgICpcbiAgICogQG5hbWUgaXNOb3RGdW5jdGlvblxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOb3RGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdEZ1bmN0aW9uLCB0cnVlKS50by5ub3QuYmUuYSgnZnVuY3Rpb24nKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc09iamVjdCh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBhbiBvYmplY3Qgb2YgdHlwZSAnT2JqZWN0JyAoYXMgcmV2ZWFsZWQgYnkgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgKS5cbiAgICogX1RoZSBhc3NlcnRpb24gZG9lcyBub3QgbWF0Y2ggc3ViY2xhc3NlZCBvYmplY3RzLl9cbiAgICpcbiAgICogICAgIHZhciBzZWxlY3Rpb24gPSB7IG5hbWU6ICdDaGFpJywgc2VydmU6ICd3aXRoIHNwaWNlcycgfTtcbiAgICogICAgIGFzc2VydC5pc09iamVjdChzZWxlY3Rpb24sICd0ZWEgc2VsZWN0aW9uIGlzIGFuIG9iamVjdCcpO1xuICAgKlxuICAgKiBAbmFtZSBpc09iamVjdFxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNPYmplY3QgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNPYmplY3QsIHRydWUpLnRvLmJlLmEoJ29iamVjdCcpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90T2JqZWN0KHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIF9ub3RfIGFuIG9iamVjdCBvZiB0eXBlICdPYmplY3QnIChhcyByZXZlYWxlZCBieSBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2ApLlxuICAgKlxuICAgKiAgICAgdmFyIHNlbGVjdGlvbiA9ICdjaGFpJ1xuICAgKiAgICAgYXNzZXJ0LmlzTm90T2JqZWN0KHNlbGVjdGlvbiwgJ3RlYSBzZWxlY3Rpb24gaXMgbm90IGFuIG9iamVjdCcpO1xuICAgKiAgICAgYXNzZXJ0LmlzTm90T2JqZWN0KG51bGwsICdudWxsIGlzIG5vdCBhbiBvYmplY3QnKTtcbiAgICpcbiAgICogQG5hbWUgaXNOb3RPYmplY3RcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTm90T2JqZWN0ID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90T2JqZWN0LCB0cnVlKS50by5ub3QuYmUuYSgnb2JqZWN0Jyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNBcnJheSh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBhbiBhcnJheS5cbiAgICpcbiAgICogICAgIHZhciBtZW51ID0gWyAnZ3JlZW4nLCAnY2hhaScsICdvb2xvbmcnIF07XG4gICAqICAgICBhc3NlcnQuaXNBcnJheShtZW51LCAnd2hhdCBraW5kIG9mIHRlYSBkbyB3ZSB3YW50PycpO1xuICAgKlxuICAgKiBAbmFtZSBpc0FycmF5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0FycmF5ID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzQXJyYXksIHRydWUpLnRvLmJlLmFuKCdhcnJheScpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90QXJyYXkodmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgX25vdF8gYW4gYXJyYXkuXG4gICAqXG4gICAqICAgICB2YXIgbWVudSA9ICdncmVlbnxjaGFpfG9vbG9uZyc7XG4gICAqICAgICBhc3NlcnQuaXNOb3RBcnJheShtZW51LCAnd2hhdCBraW5kIG9mIHRlYSBkbyB3ZSB3YW50PycpO1xuICAgKlxuICAgKiBAbmFtZSBpc05vdEFycmF5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc05vdEFycmF5ID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90QXJyYXksIHRydWUpLnRvLm5vdC5iZS5hbignYXJyYXknKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc1N0cmluZyh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBhIHN0cmluZy5cbiAgICpcbiAgICogICAgIHZhciB0ZWFPcmRlciA9ICdjaGFpJztcbiAgICogICAgIGFzc2VydC5pc1N0cmluZyh0ZWFPcmRlciwgJ29yZGVyIHBsYWNlZCcpO1xuICAgKlxuICAgKiBAbmFtZSBpc1N0cmluZ1xuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNTdHJpbmcgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNTdHJpbmcsIHRydWUpLnRvLmJlLmEoJ3N0cmluZycpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90U3RyaW5nKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIF9ub3RfIGEgc3RyaW5nLlxuICAgKlxuICAgKiAgICAgdmFyIHRlYU9yZGVyID0gNDtcbiAgICogICAgIGFzc2VydC5pc05vdFN0cmluZyh0ZWFPcmRlciwgJ29yZGVyIHBsYWNlZCcpO1xuICAgKlxuICAgKiBAbmFtZSBpc05vdFN0cmluZ1xuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOb3RTdHJpbmcgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RTdHJpbmcsIHRydWUpLnRvLm5vdC5iZS5hKCdzdHJpbmcnKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc051bWJlcih2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBhIG51bWJlci5cbiAgICpcbiAgICogICAgIHZhciBjdXBzID0gMjtcbiAgICogICAgIGFzc2VydC5pc051bWJlcihjdXBzLCAnaG93IG1hbnkgY3VwcycpO1xuICAgKlxuICAgKiBAbmFtZSBpc051bWJlclxuICAgKiBAcGFyYW0ge051bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTnVtYmVyID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTnVtYmVyLCB0cnVlKS50by5iZS5hKCdudW1iZXInKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc05vdE51bWJlcih2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBfbm90XyBhIG51bWJlci5cbiAgICpcbiAgICogICAgIHZhciBjdXBzID0gJzIgY3VwcyBwbGVhc2UnO1xuICAgKiAgICAgYXNzZXJ0LmlzTm90TnVtYmVyKGN1cHMsICdob3cgbWFueSBjdXBzJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90TnVtYmVyXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc05vdE51bWJlciA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdE51bWJlciwgdHJ1ZSkudG8ubm90LmJlLmEoJ251bWJlcicpO1xuICB9O1xuXG4gICAvKipcbiAgICogIyMjIC5pc0Zpbml0ZSh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBhIGZpbml0ZSBudW1iZXIuIFVubGlrZSBgLmlzTnVtYmVyYCwgdGhpcyB3aWxsIGZhaWwgZm9yIGBOYU5gIGFuZCBgSW5maW5pdHlgLlxuICAgKlxuICAgKiAgICAgdmFyIGN1cHMgPSAyO1xuICAgKiAgICAgYXNzZXJ0LmlzRmluaXRlKGN1cHMsICdob3cgbWFueSBjdXBzJyk7XG4gICAqXG4gICAqICAgICBhc3NlcnQuaXNGaW5pdGUoTmFOKTsgLy8gdGhyb3dzXG4gICAqXG4gICAqIEBuYW1lIGlzRmluaXRlXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNGaW5pdGUgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNGaW5pdGUsIHRydWUpLnRvLmJlLmZpbml0ZTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc0Jvb2xlYW4odmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgYSBib29sZWFuLlxuICAgKlxuICAgKiAgICAgdmFyIHRlYVJlYWR5ID0gdHJ1ZVxuICAgKiAgICAgICAsIHRlYVNlcnZlZCA9IGZhbHNlO1xuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzQm9vbGVhbih0ZWFSZWFkeSwgJ2lzIHRoZSB0ZWEgcmVhZHknKTtcbiAgICogICAgIGFzc2VydC5pc0Jvb2xlYW4odGVhU2VydmVkLCAnaGFzIHRlYSBiZWVuIHNlcnZlZCcpO1xuICAgKlxuICAgKiBAbmFtZSBpc0Jvb2xlYW5cbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzQm9vbGVhbiA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0Jvb2xlYW4sIHRydWUpLnRvLmJlLmEoJ2Jvb2xlYW4nKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc05vdEJvb2xlYW4odmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgX25vdF8gYSBib29sZWFuLlxuICAgKlxuICAgKiAgICAgdmFyIHRlYVJlYWR5ID0gJ3llcCdcbiAgICogICAgICAgLCB0ZWFTZXJ2ZWQgPSAnbm9wZSc7XG4gICAqXG4gICAqICAgICBhc3NlcnQuaXNOb3RCb29sZWFuKHRlYVJlYWR5LCAnaXMgdGhlIHRlYSByZWFkeScpO1xuICAgKiAgICAgYXNzZXJ0LmlzTm90Qm9vbGVhbih0ZWFTZXJ2ZWQsICdoYXMgdGVhIGJlZW4gc2VydmVkJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90Qm9vbGVhblxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOb3RCb29sZWFuID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90Qm9vbGVhbiwgdHJ1ZSkudG8ubm90LmJlLmEoJ2Jvb2xlYW4nKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC50eXBlT2YodmFsdWUsIG5hbWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAncyB0eXBlIGlzIGBuYW1lYCwgYXMgZGV0ZXJtaW5lZCBieVxuICAgKiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gICAqXG4gICAqICAgICBhc3NlcnQudHlwZU9mKHsgdGVhOiAnY2hhaScgfSwgJ29iamVjdCcsICd3ZSBoYXZlIGFuIG9iamVjdCcpO1xuICAgKiAgICAgYXNzZXJ0LnR5cGVPZihbJ2NoYWknLCAnamFzbWluZSddLCAnYXJyYXknLCAnd2UgaGF2ZSBhbiBhcnJheScpO1xuICAgKiAgICAgYXNzZXJ0LnR5cGVPZigndGVhJywgJ3N0cmluZycsICd3ZSBoYXZlIGEgc3RyaW5nJyk7XG4gICAqICAgICBhc3NlcnQudHlwZU9mKC90ZWEvLCAncmVnZXhwJywgJ3dlIGhhdmUgYSByZWd1bGFyIGV4cHJlc3Npb24nKTtcbiAgICogICAgIGFzc2VydC50eXBlT2YobnVsbCwgJ251bGwnLCAnd2UgaGF2ZSBhIG51bGwnKTtcbiAgICogICAgIGFzc2VydC50eXBlT2YodW5kZWZpbmVkLCAndW5kZWZpbmVkJywgJ3dlIGhhdmUgYW4gdW5kZWZpbmVkJyk7XG4gICAqXG4gICAqIEBuYW1lIHR5cGVPZlxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQudHlwZU9mID0gZnVuY3Rpb24gKHZhbCwgdHlwZSwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LnR5cGVPZiwgdHJ1ZSkudG8uYmUuYSh0eXBlKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3RUeXBlT2YodmFsdWUsIG5hbWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAncyB0eXBlIGlzIF9ub3RfIGBuYW1lYCwgYXMgZGV0ZXJtaW5lZCBieVxuICAgKiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90VHlwZU9mKCd0ZWEnLCAnbnVtYmVyJywgJ3N0cmluZ3MgYXJlIG5vdCBudW1iZXJzJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdFR5cGVPZlxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZW9mIG5hbWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdFR5cGVPZiA9IGZ1bmN0aW9uICh2YWwsIHR5cGUsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5ub3RUeXBlT2YsIHRydWUpLnRvLm5vdC5iZS5hKHR5cGUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmluc3RhbmNlT2Yob2JqZWN0LCBjb25zdHJ1Y3RvciwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBhbiBpbnN0YW5jZSBvZiBgY29uc3RydWN0b3JgLlxuICAgKlxuICAgKiAgICAgdmFyIFRlYSA9IGZ1bmN0aW9uIChuYW1lKSB7IHRoaXMubmFtZSA9IG5hbWU7IH1cbiAgICogICAgICAgLCBjaGFpID0gbmV3IFRlYSgnY2hhaScpO1xuICAgKlxuICAgKiAgICAgYXNzZXJ0Lmluc3RhbmNlT2YoY2hhaSwgVGVhLCAnY2hhaSBpcyBhbiBpbnN0YW5jZSBvZiB0ZWEnKTtcbiAgICpcbiAgICogQG5hbWUgaW5zdGFuY2VPZlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3J9IGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pbnN0YW5jZU9mID0gZnVuY3Rpb24gKHZhbCwgdHlwZSwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0Lmluc3RhbmNlT2YsIHRydWUpLnRvLmJlLmluc3RhbmNlT2YodHlwZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90SW5zdGFuY2VPZihvYmplY3QsIGNvbnN0cnVjdG9yLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgYHZhbHVlYCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgYGNvbnN0cnVjdG9yYC5cbiAgICpcbiAgICogICAgIHZhciBUZWEgPSBmdW5jdGlvbiAobmFtZSkgeyB0aGlzLm5hbWUgPSBuYW1lOyB9XG4gICAqICAgICAgICwgY2hhaSA9IG5ldyBTdHJpbmcoJ2NoYWknKTtcbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RJbnN0YW5jZU9mKGNoYWksIFRlYSwgJ2NoYWkgaXMgbm90IGFuIGluc3RhbmNlIG9mIHRlYScpO1xuICAgKlxuICAgKiBAbmFtZSBub3RJbnN0YW5jZU9mXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtDb25zdHJ1Y3Rvcn0gY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdEluc3RhbmNlT2YgPSBmdW5jdGlvbiAodmFsLCB0eXBlLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQubm90SW5zdGFuY2VPZiwgdHJ1ZSlcbiAgICAgIC50by5ub3QuYmUuaW5zdGFuY2VPZih0eXBlKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pbmNsdWRlKGhheXN0YWNrLCBuZWVkbGUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBoYXlzdGFja2AgaW5jbHVkZXMgYG5lZWRsZWAuIENhbiBiZSB1c2VkIHRvIGFzc2VydCB0aGVcbiAgICogaW5jbHVzaW9uIG9mIGEgdmFsdWUgaW4gYW4gYXJyYXksIGEgc3Vic3RyaW5nIGluIGEgc3RyaW5nLCBvciBhIHN1YnNldCBvZlxuICAgKiBwcm9wZXJ0aWVzIGluIGFuIG9iamVjdC5cbiAgICpcbiAgICogICAgIGFzc2VydC5pbmNsdWRlKFsxLDIsM10sIDIsICdhcnJheSBjb250YWlucyB2YWx1ZScpO1xuICAgKiAgICAgYXNzZXJ0LmluY2x1ZGUoJ2Zvb2JhcicsICdmb28nLCAnc3RyaW5nIGNvbnRhaW5zIHN1YnN0cmluZycpO1xuICAgKiAgICAgYXNzZXJ0LmluY2x1ZGUoeyBmb286ICdiYXInLCBoZWxsbzogJ3VuaXZlcnNlJyB9LCB7IGZvbzogJ2JhcicgfSwgJ29iamVjdCBjb250YWlucyBwcm9wZXJ0eScpO1xuICAgKlxuICAgKiBTdHJpY3QgZXF1YWxpdHkgKD09PSkgaXMgdXNlZC4gV2hlbiBhc3NlcnRpbmcgdGhlIGluY2x1c2lvbiBvZiBhIHZhbHVlIGluXG4gICAqIGFuIGFycmF5LCB0aGUgYXJyYXkgaXMgc2VhcmNoZWQgZm9yIGFuIGVsZW1lbnQgdGhhdCdzIHN0cmljdGx5IGVxdWFsIHRvIHRoZVxuICAgKiBnaXZlbiB2YWx1ZS4gV2hlbiBhc3NlcnRpbmcgYSBzdWJzZXQgb2YgcHJvcGVydGllcyBpbiBhbiBvYmplY3QsIHRoZSBvYmplY3RcbiAgICogaXMgc2VhcmNoZWQgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSBrZXlzLCBjaGVja2luZyB0aGF0IGVhY2ggb25lIGlzIHByZXNlbnRcbiAgICogYW5kIHN0cmljdGx5IGVxdWFsIHRvIHRoZSBnaXZlbiBwcm9wZXJ0eSB2YWx1ZS4gRm9yIGluc3RhbmNlOlxuICAgKlxuICAgKiAgICAgdmFyIG9iajEgPSB7YTogMX1cbiAgICogICAgICAgLCBvYmoyID0ge2I6IDJ9O1xuICAgKiAgICAgYXNzZXJ0LmluY2x1ZGUoW29iajEsIG9iajJdLCBvYmoxKTtcbiAgICogICAgIGFzc2VydC5pbmNsdWRlKHtmb286IG9iajEsIGJhcjogb2JqMn0sIHtmb286IG9iajF9KTtcbiAgICogICAgIGFzc2VydC5pbmNsdWRlKHtmb286IG9iajEsIGJhcjogb2JqMn0sIHtmb286IG9iajEsIGJhcjogb2JqMn0pO1xuICAgKlxuICAgKiBAbmFtZSBpbmNsdWRlXG4gICAqIEBwYXJhbSB7QXJyYXl8U3RyaW5nfSBoYXlzdGFja1xuICAgKiBAcGFyYW0ge01peGVkfSBuZWVkbGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmluY2x1ZGUgPSBmdW5jdGlvbiAoZXhwLCBpbmMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5pbmNsdWRlLCB0cnVlKS5pbmNsdWRlKGluYyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90SW5jbHVkZShoYXlzdGFjaywgbmVlZGxlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgaGF5c3RhY2tgIGRvZXMgbm90IGluY2x1ZGUgYG5lZWRsZWAuIENhbiBiZSB1c2VkIHRvIGFzc2VydFxuICAgKiB0aGUgYWJzZW5jZSBvZiBhIHZhbHVlIGluIGFuIGFycmF5LCBhIHN1YnN0cmluZyBpbiBhIHN0cmluZywgb3IgYSBzdWJzZXQgb2ZcbiAgICogcHJvcGVydGllcyBpbiBhbiBvYmplY3QuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90SW5jbHVkZShbMSwyLDNdLCA0LCBcImFycmF5IGRvZXNuJ3QgY29udGFpbiB2YWx1ZVwiKTtcbiAgICogICAgIGFzc2VydC5ub3RJbmNsdWRlKCdmb29iYXInLCAnYmF6JywgXCJzdHJpbmcgZG9lc24ndCBjb250YWluIHN1YnN0cmluZ1wiKTtcbiAgICogICAgIGFzc2VydC5ub3RJbmNsdWRlKHsgZm9vOiAnYmFyJywgaGVsbG86ICd1bml2ZXJzZScgfSwgeyBmb286ICdiYXonIH0sICdvYmplY3QgZG9lc24ndCBjb250YWluIHByb3BlcnR5Jyk7XG4gICAqXG4gICAqIFN0cmljdCBlcXVhbGl0eSAoPT09KSBpcyB1c2VkLiBXaGVuIGFzc2VydGluZyB0aGUgYWJzZW5jZSBvZiBhIHZhbHVlIGluIGFuXG4gICAqIGFycmF5LCB0aGUgYXJyYXkgaXMgc2VhcmNoZWQgdG8gY29uZmlybSB0aGUgYWJzZW5jZSBvZiBhbiBlbGVtZW50IHRoYXQnc1xuICAgKiBzdHJpY3RseSBlcXVhbCB0byB0aGUgZ2l2ZW4gdmFsdWUuIFdoZW4gYXNzZXJ0aW5nIGEgc3Vic2V0IG9mIHByb3BlcnRpZXMgaW5cbiAgICogYW4gb2JqZWN0LCB0aGUgb2JqZWN0IGlzIHNlYXJjaGVkIHRvIGNvbmZpcm0gdGhhdCBhdCBsZWFzdCBvbmUgb2YgdGhlIGdpdmVuXG4gICAqIHByb3BlcnR5IGtleXMgaXMgZWl0aGVyIG5vdCBwcmVzZW50IG9yIG5vdCBzdHJpY3RseSBlcXVhbCB0byB0aGUgZ2l2ZW5cbiAgICogcHJvcGVydHkgdmFsdWUuIEZvciBpbnN0YW5jZTpcbiAgICpcbiAgICogICAgIHZhciBvYmoxID0ge2E6IDF9XG4gICAqICAgICAgICwgb2JqMiA9IHtiOiAyfTtcbiAgICogICAgIGFzc2VydC5ub3RJbmNsdWRlKFtvYmoxLCBvYmoyXSwge2E6IDF9KTtcbiAgICogICAgIGFzc2VydC5ub3RJbmNsdWRlKHtmb286IG9iajEsIGJhcjogb2JqMn0sIHtmb286IHthOiAxfX0pO1xuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGUoe2Zvbzogb2JqMSwgYmFyOiBvYmoyfSwge2Zvbzogb2JqMSwgYmFyOiB7YjogMn19KTtcbiAgICpcbiAgICogQG5hbWUgbm90SW5jbHVkZVxuICAgKiBAcGFyYW0ge0FycmF5fFN0cmluZ30gaGF5c3RhY2tcbiAgICogQHBhcmFtIHtNaXhlZH0gbmVlZGxlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RJbmNsdWRlID0gZnVuY3Rpb24gKGV4cCwgaW5jLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90SW5jbHVkZSwgdHJ1ZSkubm90LmluY2x1ZGUoaW5jKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5kZWVwSW5jbHVkZShoYXlzdGFjaywgbmVlZGxlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgaGF5c3RhY2tgIGluY2x1ZGVzIGBuZWVkbGVgLiBDYW4gYmUgdXNlZCB0byBhc3NlcnQgdGhlXG4gICAqIGluY2x1c2lvbiBvZiBhIHZhbHVlIGluIGFuIGFycmF5IG9yIGEgc3Vic2V0IG9mIHByb3BlcnRpZXMgaW4gYW4gb2JqZWN0LlxuICAgKiBEZWVwIGVxdWFsaXR5IGlzIHVzZWQuXG4gICAqXG4gICAqICAgICB2YXIgb2JqMSA9IHthOiAxfVxuICAgKiAgICAgICAsIG9iajIgPSB7YjogMn07XG4gICAqICAgICBhc3NlcnQuZGVlcEluY2x1ZGUoW29iajEsIG9iajJdLCB7YTogMX0pO1xuICAgKiAgICAgYXNzZXJ0LmRlZXBJbmNsdWRlKHtmb286IG9iajEsIGJhcjogb2JqMn0sIHtmb286IHthOiAxfX0pO1xuICAgKiAgICAgYXNzZXJ0LmRlZXBJbmNsdWRlKHtmb286IG9iajEsIGJhcjogb2JqMn0sIHtmb286IHthOiAxfSwgYmFyOiB7YjogMn19KTtcbiAgICpcbiAgICogQG5hbWUgZGVlcEluY2x1ZGVcbiAgICogQHBhcmFtIHtBcnJheXxTdHJpbmd9IGhheXN0YWNrXG4gICAqIEBwYXJhbSB7TWl4ZWR9IG5lZWRsZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZGVlcEluY2x1ZGUgPSBmdW5jdGlvbiAoZXhwLCBpbmMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5kZWVwSW5jbHVkZSwgdHJ1ZSkuZGVlcC5pbmNsdWRlKGluYyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90RGVlcEluY2x1ZGUoaGF5c3RhY2ssIG5lZWRsZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYGhheXN0YWNrYCBkb2VzIG5vdCBpbmNsdWRlIGBuZWVkbGVgLiBDYW4gYmUgdXNlZCB0byBhc3NlcnRcbiAgICogdGhlIGFic2VuY2Ugb2YgYSB2YWx1ZSBpbiBhbiBhcnJheSBvciBhIHN1YnNldCBvZiBwcm9wZXJ0aWVzIGluIGFuIG9iamVjdC5cbiAgICogRGVlcCBlcXVhbGl0eSBpcyB1c2VkLlxuICAgKlxuICAgKiAgICAgdmFyIG9iajEgPSB7YTogMX1cbiAgICogICAgICAgLCBvYmoyID0ge2I6IDJ9O1xuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBJbmNsdWRlKFtvYmoxLCBvYmoyXSwge2E6IDl9KTtcbiAgICogICAgIGFzc2VydC5ub3REZWVwSW5jbHVkZSh7Zm9vOiBvYmoxLCBiYXI6IG9iajJ9LCB7Zm9vOiB7YTogOX19KTtcbiAgICogICAgIGFzc2VydC5ub3REZWVwSW5jbHVkZSh7Zm9vOiBvYmoxLCBiYXI6IG9iajJ9LCB7Zm9vOiB7YTogMX0sIGJhcjoge2I6IDl9fSk7XG4gICAqXG4gICAqIEBuYW1lIG5vdERlZXBJbmNsdWRlXG4gICAqIEBwYXJhbSB7QXJyYXl8U3RyaW5nfSBoYXlzdGFja1xuICAgKiBAcGFyYW0ge01peGVkfSBuZWVkbGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdERlZXBJbmNsdWRlID0gZnVuY3Rpb24gKGV4cCwgaW5jLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90RGVlcEluY2x1ZGUsIHRydWUpLm5vdC5kZWVwLmluY2x1ZGUoaW5jKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5uZXN0ZWRJbmNsdWRlKGhheXN0YWNrLCBuZWVkbGUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0ICdoYXlzdGFjaycgaW5jbHVkZXMgJ25lZWRsZScuXG4gICAqIENhbiBiZSB1c2VkIHRvIGFzc2VydCB0aGUgaW5jbHVzaW9uIG9mIGEgc3Vic2V0IG9mIHByb3BlcnRpZXMgaW4gYW5cbiAgICogb2JqZWN0LlxuICAgKiBFbmFibGVzIHRoZSB1c2Ugb2YgZG90LSBhbmQgYnJhY2tldC1ub3RhdGlvbiBmb3IgcmVmZXJlbmNpbmcgbmVzdGVkXG4gICAqIHByb3BlcnRpZXMuXG4gICAqICdbXScgYW5kICcuJyBpbiBwcm9wZXJ0eSBuYW1lcyBjYW4gYmUgZXNjYXBlZCB1c2luZyBkb3VibGUgYmFja3NsYXNoZXMuXG4gICAqXG4gICAqICAgICBhc3NlcnQubmVzdGVkSW5jbHVkZSh7Jy5hJzogeydiJzogJ3gnfX0sIHsnXFxcXC5hLltiXSc6ICd4J30pO1xuICAgKiAgICAgYXNzZXJ0Lm5lc3RlZEluY2x1ZGUoeydhJzogeydbYl0nOiAneCd9fSwgeydhLlxcXFxbYlxcXFxdJzogJ3gnfSk7XG4gICAqXG4gICAqIEBuYW1lIG5lc3RlZEluY2x1ZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGhheXN0YWNrXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZWVkbGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5lc3RlZEluY2x1ZGUgPSBmdW5jdGlvbiAoZXhwLCBpbmMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5uZXN0ZWRJbmNsdWRlLCB0cnVlKS5uZXN0ZWQuaW5jbHVkZShpbmMpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdE5lc3RlZEluY2x1ZGUoaGF5c3RhY2ssIG5lZWRsZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgJ2hheXN0YWNrJyBkb2VzIG5vdCBpbmNsdWRlICduZWVkbGUnLlxuICAgKiBDYW4gYmUgdXNlZCB0byBhc3NlcnQgdGhlIGFic2VuY2Ugb2YgYSBzdWJzZXQgb2YgcHJvcGVydGllcyBpbiBhblxuICAgKiBvYmplY3QuXG4gICAqIEVuYWJsZXMgdGhlIHVzZSBvZiBkb3QtIGFuZCBicmFja2V0LW5vdGF0aW9uIGZvciByZWZlcmVuY2luZyBuZXN0ZWRcbiAgICogcHJvcGVydGllcy5cbiAgICogJ1tdJyBhbmQgJy4nIGluIHByb3BlcnR5IG5hbWVzIGNhbiBiZSBlc2NhcGVkIHVzaW5nIGRvdWJsZSBiYWNrc2xhc2hlcy5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3ROZXN0ZWRJbmNsdWRlKHsnLmEnOiB7J2InOiAneCd9fSwgeydcXFxcLmEuYic6ICd5J30pO1xuICAgKiAgICAgYXNzZXJ0Lm5vdE5lc3RlZEluY2x1ZGUoeydhJzogeydbYl0nOiAneCd9fSwgeydhLlxcXFxbYlxcXFxdJzogJ3knfSk7XG4gICAqXG4gICAqIEBuYW1lIG5vdE5lc3RlZEluY2x1ZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGhheXN0YWNrXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZWVkbGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdE5lc3RlZEluY2x1ZGUgPSBmdW5jdGlvbiAoZXhwLCBpbmMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3ROZXN0ZWRJbmNsdWRlLCB0cnVlKVxuICAgICAgLm5vdC5uZXN0ZWQuaW5jbHVkZShpbmMpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmRlZXBOZXN0ZWRJbmNsdWRlKGhheXN0YWNrLCBuZWVkbGUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0ICdoYXlzdGFjaycgaW5jbHVkZXMgJ25lZWRsZScuXG4gICAqIENhbiBiZSB1c2VkIHRvIGFzc2VydCB0aGUgaW5jbHVzaW9uIG9mIGEgc3Vic2V0IG9mIHByb3BlcnRpZXMgaW4gYW5cbiAgICogb2JqZWN0IHdoaWxlIGNoZWNraW5nIGZvciBkZWVwIGVxdWFsaXR5LlxuICAgKiBFbmFibGVzIHRoZSB1c2Ugb2YgZG90LSBhbmQgYnJhY2tldC1ub3RhdGlvbiBmb3IgcmVmZXJlbmNpbmcgbmVzdGVkXG4gICAqIHByb3BlcnRpZXMuXG4gICAqICdbXScgYW5kICcuJyBpbiBwcm9wZXJ0eSBuYW1lcyBjYW4gYmUgZXNjYXBlZCB1c2luZyBkb3VibGUgYmFja3NsYXNoZXMuXG4gICAqXG4gICAqICAgICBhc3NlcnQuZGVlcE5lc3RlZEluY2x1ZGUoe2E6IHtiOiBbe3g6IDF9XX19LCB7J2EuYlswXSc6IHt4OiAxfX0pO1xuICAgKiAgICAgYXNzZXJ0LmRlZXBOZXN0ZWRJbmNsdWRlKHsnLmEnOiB7J1tiXSc6IHt4OiAxfX19LCB7J1xcXFwuYS5cXFxcW2JcXFxcXSc6IHt4OiAxfX0pO1xuICAgKlxuICAgKiBAbmFtZSBkZWVwTmVzdGVkSW5jbHVkZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaGF5c3RhY2tcbiAgICogQHBhcmFtIHtPYmplY3R9IG5lZWRsZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZGVlcE5lc3RlZEluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0LmRlZXBOZXN0ZWRJbmNsdWRlLCB0cnVlKVxuICAgICAgLmRlZXAubmVzdGVkLmluY2x1ZGUoaW5jKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3REZWVwTmVzdGVkSW5jbHVkZShoYXlzdGFjaywgbmVlZGxlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCAnaGF5c3RhY2snIGRvZXMgbm90IGluY2x1ZGUgJ25lZWRsZScuXG4gICAqIENhbiBiZSB1c2VkIHRvIGFzc2VydCB0aGUgYWJzZW5jZSBvZiBhIHN1YnNldCBvZiBwcm9wZXJ0aWVzIGluIGFuXG4gICAqIG9iamVjdCB3aGlsZSBjaGVja2luZyBmb3IgZGVlcCBlcXVhbGl0eS5cbiAgICogRW5hYmxlcyB0aGUgdXNlIG9mIGRvdC0gYW5kIGJyYWNrZXQtbm90YXRpb24gZm9yIHJlZmVyZW5jaW5nIG5lc3RlZFxuICAgKiBwcm9wZXJ0aWVzLlxuICAgKiAnW10nIGFuZCAnLicgaW4gcHJvcGVydHkgbmFtZXMgY2FuIGJlIGVzY2FwZWQgdXNpbmcgZG91YmxlIGJhY2tzbGFzaGVzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBOZXN0ZWRJbmNsdWRlKHthOiB7YjogW3t4OiAxfV19fSwgeydhLmJbMF0nOiB7eTogMX19KVxuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBOZXN0ZWRJbmNsdWRlKHsnLmEnOiB7J1tiXSc6IHt4OiAxfX19LCB7J1xcXFwuYS5cXFxcW2JcXFxcXSc6IHt5OiAyfX0pO1xuICAgKlxuICAgKiBAbmFtZSBub3REZWVwTmVzdGVkSW5jbHVkZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaGF5c3RhY2tcbiAgICogQHBhcmFtIHtPYmplY3R9IG5lZWRsZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90RGVlcE5lc3RlZEluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5vdERlZXBOZXN0ZWRJbmNsdWRlLCB0cnVlKVxuICAgICAgLm5vdC5kZWVwLm5lc3RlZC5pbmNsdWRlKGluYyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAub3duSW5jbHVkZShoYXlzdGFjaywgbmVlZGxlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCAnaGF5c3RhY2snIGluY2x1ZGVzICduZWVkbGUnLlxuICAgKiBDYW4gYmUgdXNlZCB0byBhc3NlcnQgdGhlIGluY2x1c2lvbiBvZiBhIHN1YnNldCBvZiBwcm9wZXJ0aWVzIGluIGFuXG4gICAqIG9iamVjdCB3aGlsZSBpZ25vcmluZyBpbmhlcml0ZWQgcHJvcGVydGllcy5cbiAgICpcbiAgICogICAgIGFzc2VydC5vd25JbmNsdWRlKHsgYTogMSB9LCB7IGE6IDEgfSk7XG4gICAqXG4gICAqIEBuYW1lIG93bkluY2x1ZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGhheXN0YWNrXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZWVkbGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm93bkluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm93bkluY2x1ZGUsIHRydWUpLm93bi5pbmNsdWRlKGluYyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90T3duSW5jbHVkZShoYXlzdGFjaywgbmVlZGxlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCAnaGF5c3RhY2snIGluY2x1ZGVzICduZWVkbGUnLlxuICAgKiBDYW4gYmUgdXNlZCB0byBhc3NlcnQgdGhlIGFic2VuY2Ugb2YgYSBzdWJzZXQgb2YgcHJvcGVydGllcyBpbiBhblxuICAgKiBvYmplY3Qgd2hpbGUgaWdub3JpbmcgaW5oZXJpdGVkIHByb3BlcnRpZXMuXG4gICAqXG4gICAqICAgICBPYmplY3QucHJvdG90eXBlLmIgPSAyO1xuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdE93bkluY2x1ZGUoeyBhOiAxIH0sIHsgYjogMiB9KTtcbiAgICpcbiAgICogQG5hbWUgbm90T3duSW5jbHVkZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaGF5c3RhY2tcbiAgICogQHBhcmFtIHtPYmplY3R9IG5lZWRsZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90T3duSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90T3duSW5jbHVkZSwgdHJ1ZSkubm90Lm93bi5pbmNsdWRlKGluYyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuZGVlcE93bkluY2x1ZGUoaGF5c3RhY2ssIG5lZWRsZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgJ2hheXN0YWNrJyBpbmNsdWRlcyAnbmVlZGxlJy5cbiAgICogQ2FuIGJlIHVzZWQgdG8gYXNzZXJ0IHRoZSBpbmNsdXNpb24gb2YgYSBzdWJzZXQgb2YgcHJvcGVydGllcyBpbiBhblxuICAgKiBvYmplY3Qgd2hpbGUgaWdub3JpbmcgaW5oZXJpdGVkIHByb3BlcnRpZXMgYW5kIGNoZWNraW5nIGZvciBkZWVwIGVxdWFsaXR5LlxuICAgKlxuICAgKiAgICAgIGFzc2VydC5kZWVwT3duSW5jbHVkZSh7YToge2I6IDJ9fSwge2E6IHtiOiAyfX0pO1xuICAgKlxuICAgKiBAbmFtZSBkZWVwT3duSW5jbHVkZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaGF5c3RhY2tcbiAgICogQHBhcmFtIHtPYmplY3R9IG5lZWRsZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZGVlcE93bkluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0LmRlZXBPd25JbmNsdWRlLCB0cnVlKVxuICAgICAgLmRlZXAub3duLmluY2x1ZGUoaW5jKTtcbiAgfTtcblxuICAgLyoqXG4gICAqICMjIyAubm90RGVlcE93bkluY2x1ZGUoaGF5c3RhY2ssIG5lZWRsZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgJ2hheXN0YWNrJyBpbmNsdWRlcyAnbmVlZGxlJy5cbiAgICogQ2FuIGJlIHVzZWQgdG8gYXNzZXJ0IHRoZSBhYnNlbmNlIG9mIGEgc3Vic2V0IG9mIHByb3BlcnRpZXMgaW4gYW5cbiAgICogb2JqZWN0IHdoaWxlIGlnbm9yaW5nIGluaGVyaXRlZCBwcm9wZXJ0aWVzIGFuZCBjaGVja2luZyBmb3IgZGVlcCBlcXVhbGl0eS5cbiAgICpcbiAgICogICAgICBhc3NlcnQubm90RGVlcE93bkluY2x1ZGUoe2E6IHtiOiAyfX0sIHthOiB7YzogM319KTtcbiAgICpcbiAgICogQG5hbWUgbm90RGVlcE93bkluY2x1ZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGhheXN0YWNrXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZWVkbGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdERlZXBPd25JbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3REZWVwT3duSW5jbHVkZSwgdHJ1ZSlcbiAgICAgIC5ub3QuZGVlcC5vd24uaW5jbHVkZShpbmMpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm1hdGNoKHZhbHVlLCByZWdleHAsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgbWF0Y2hlcyB0aGUgcmVndWxhciBleHByZXNzaW9uIGByZWdleHBgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm1hdGNoKCdmb29iYXInLCAvXmZvby8sICdyZWdleHAgbWF0Y2hlcycpO1xuICAgKlxuICAgKiBAbmFtZSBtYXRjaFxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmVnZXhwXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5tYXRjaCA9IGZ1bmN0aW9uIChleHAsIHJlLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubWF0Y2gsIHRydWUpLnRvLm1hdGNoKHJlKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3RNYXRjaCh2YWx1ZSwgcmVnZXhwLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGRvZXMgbm90IG1hdGNoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gYHJlZ2V4cGAuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90TWF0Y2goJ2Zvb2JhcicsIC9eZm9vLywgJ3JlZ2V4cCBkb2VzIG5vdCBtYXRjaCcpO1xuICAgKlxuICAgKiBAbmFtZSBub3RNYXRjaFxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmVnZXhwXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RNYXRjaCA9IGZ1bmN0aW9uIChleHAsIHJlLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90TWF0Y2gsIHRydWUpLnRvLm5vdC5tYXRjaChyZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAucHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGEgZGlyZWN0IG9yIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lZCBieVxuICAgKiBgcHJvcGVydHlgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LnByb3BlcnR5KHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9fSwgJ3RlYScpO1xuICAgKiAgICAgYXNzZXJ0LnByb3BlcnR5KHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9fSwgJ3RvU3RyaW5nJyk7XG4gICAqXG4gICAqIEBuYW1lIHByb3BlcnR5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5wcm9wZXJ0eSA9IGZ1bmN0aW9uIChvYmosIHByb3AsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5wcm9wZXJ0eSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShwcm9wKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3RQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBkb2VzIF9ub3RfIGhhdmUgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVkXG4gICAqIGJ5IGBwcm9wZXJ0eWAuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90UHJvcGVydHkoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH19LCAnY29mZmVlJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdFByb3BlcnR5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvYmosIHByb3AsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3RQcm9wZXJ0eSwgdHJ1ZSlcbiAgICAgIC50by5ub3QuaGF2ZS5wcm9wZXJ0eShwcm9wKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5wcm9wZXJ0eVZhbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGEgZGlyZWN0IG9yIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lZCBieVxuICAgKiBgcHJvcGVydHlgIHdpdGggYSB2YWx1ZSBnaXZlbiBieSBgdmFsdWVgLiBVc2VzIGEgc3RyaWN0IGVxdWFsaXR5IGNoZWNrXG4gICAqICg9PT0pLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LnByb3BlcnR5VmFsKHsgdGVhOiAnaXMgZ29vZCcgfSwgJ3RlYScsICdpcyBnb29kJyk7XG4gICAqXG4gICAqIEBuYW1lIHByb3BlcnR5VmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5wcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uIChvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LnByb3BlcnR5VmFsLCB0cnVlKVxuICAgICAgLnRvLmhhdmUucHJvcGVydHkocHJvcCwgdmFsKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3RQcm9wZXJ0eVZhbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgZG9lcyBfbm90XyBoYXZlIGEgZGlyZWN0IG9yIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lZFxuICAgKiBieSBgcHJvcGVydHlgIHdpdGggdmFsdWUgZ2l2ZW4gYnkgYHZhbHVlYC4gVXNlcyBhIHN0cmljdCBlcXVhbGl0eSBjaGVja1xuICAgKiAoPT09KS5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RQcm9wZXJ0eVZhbCh7IHRlYTogJ2lzIGdvb2QnIH0sICd0ZWEnLCAnaXMgYmFkJyk7XG4gICAqICAgICBhc3NlcnQubm90UHJvcGVydHlWYWwoeyB0ZWE6ICdpcyBnb29kJyB9LCAnY29mZmVlJywgJ2lzIGdvb2QnKTtcbiAgICpcbiAgICogQG5hbWUgbm90UHJvcGVydHlWYWxcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdFByb3BlcnR5VmFsID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90UHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUucHJvcGVydHkocHJvcCwgdmFsKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5kZWVwUHJvcGVydHlWYWwob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZWQgYnlcbiAgICogYHByb3BlcnR5YCB3aXRoIGEgdmFsdWUgZ2l2ZW4gYnkgYHZhbHVlYC4gVXNlcyBhIGRlZXAgZXF1YWxpdHkgY2hlY2suXG4gICAqXG4gICAqICAgICBhc3NlcnQuZGVlcFByb3BlcnR5VmFsKHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9IH0sICd0ZWEnLCB7IGdyZWVuOiAnbWF0Y2hhJyB9KTtcbiAgICpcbiAgICogQG5hbWUgZGVlcFByb3BlcnR5VmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kZWVwUHJvcGVydHlWYWwgPSBmdW5jdGlvbiAob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kZWVwUHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8uaGF2ZS5kZWVwLnByb3BlcnR5KHByb3AsIHZhbCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90RGVlcFByb3BlcnR5VmFsKG9iamVjdCwgcHJvcGVydHksIHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBkb2VzIF9ub3RfIGhhdmUgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVkXG4gICAqIGJ5IGBwcm9wZXJ0eWAgd2l0aCB2YWx1ZSBnaXZlbiBieSBgdmFsdWVgLiBVc2VzIGEgZGVlcCBlcXVhbGl0eSBjaGVjay5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3REZWVwUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH0gfSwgJ3RlYScsIHsgYmxhY2s6ICdtYXRjaGEnIH0pO1xuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBQcm9wZXJ0eVZhbCh7IHRlYTogeyBncmVlbjogJ21hdGNoYScgfSB9LCAndGVhJywgeyBncmVlbjogJ29vbG9uZycgfSk7XG4gICAqICAgICBhc3NlcnQubm90RGVlcFByb3BlcnR5VmFsKHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9IH0sICdjb2ZmZWUnLCB7IGdyZWVuOiAnbWF0Y2hhJyB9KTtcbiAgICpcbiAgICogQG5hbWUgbm90RGVlcFByb3BlcnR5VmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3REZWVwUHJvcGVydHlWYWwgPSBmdW5jdGlvbiAob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3REZWVwUHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUuZGVlcC5wcm9wZXJ0eShwcm9wLCB2YWwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm93blByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhIGRpcmVjdCBwcm9wZXJ0eSBuYW1lZCBieSBgcHJvcGVydHlgLiBJbmhlcml0ZWRcbiAgICogcHJvcGVydGllcyBhcmVuJ3QgY2hlY2tlZC5cbiAgICpcbiAgICogICAgIGFzc2VydC5vd25Qcm9wZXJ0eSh7IHRlYTogeyBncmVlbjogJ21hdGNoYScgfX0sICd0ZWEnKTtcbiAgICpcbiAgICogQG5hbWUgb3duUHJvcGVydHlcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm93blByb3BlcnR5ID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm93blByb3BlcnR5LCB0cnVlKVxuICAgICAgLnRvLmhhdmUub3duLnByb3BlcnR5KHByb3ApO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdE93blByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGRvZXMgX25vdF8gaGF2ZSBhIGRpcmVjdCBwcm9wZXJ0eSBuYW1lZCBieVxuICAgKiBgcHJvcGVydHlgLiBJbmhlcml0ZWQgcHJvcGVydGllcyBhcmVuJ3QgY2hlY2tlZC5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RPd25Qcm9wZXJ0eSh7IHRlYTogeyBncmVlbjogJ21hdGNoYScgfX0sICdjb2ZmZWUnKTtcbiAgICogICAgIGFzc2VydC5ub3RPd25Qcm9wZXJ0eSh7fSwgJ3RvU3RyaW5nJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdE93blByb3BlcnR5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RPd25Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChvYmosIHByb3AsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3RPd25Qcm9wZXJ0eSwgdHJ1ZSlcbiAgICAgIC50by5ub3QuaGF2ZS5vd24ucHJvcGVydHkocHJvcCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAub3duUHJvcGVydHlWYWwob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhIGRpcmVjdCBwcm9wZXJ0eSBuYW1lZCBieSBgcHJvcGVydHlgIGFuZCBhIHZhbHVlXG4gICAqIGVxdWFsIHRvIHRoZSBwcm92aWRlZCBgdmFsdWVgLiBVc2VzIGEgc3RyaWN0IGVxdWFsaXR5IGNoZWNrICg9PT0pLlxuICAgKiBJbmhlcml0ZWQgcHJvcGVydGllcyBhcmVuJ3QgY2hlY2tlZC5cbiAgICpcbiAgICogICAgIGFzc2VydC5vd25Qcm9wZXJ0eVZhbCh7IGNvZmZlZTogJ2lzIGdvb2QnfSwgJ2NvZmZlZScsICdpcyBnb29kJyk7XG4gICAqXG4gICAqIEBuYW1lIG93blByb3BlcnR5VmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5vd25Qcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uIChvYmosIHByb3AsIHZhbHVlLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQub3duUHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8uaGF2ZS5vd24ucHJvcGVydHkocHJvcCwgdmFsdWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdE93blByb3BlcnR5VmFsKG9iamVjdCwgcHJvcGVydHksIHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBkb2VzIF9ub3RfIGhhdmUgYSBkaXJlY3QgcHJvcGVydHkgbmFtZWQgYnkgYHByb3BlcnR5YFxuICAgKiB3aXRoIGEgdmFsdWUgZXF1YWwgdG8gdGhlIHByb3ZpZGVkIGB2YWx1ZWAuIFVzZXMgYSBzdHJpY3QgZXF1YWxpdHkgY2hlY2tcbiAgICogKD09PSkuIEluaGVyaXRlZCBwcm9wZXJ0aWVzIGFyZW4ndCBjaGVja2VkLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdE93blByb3BlcnR5VmFsKHsgdGVhOiAnaXMgYmV0dGVyJ30sICd0ZWEnLCAnaXMgd29yc2UnKTtcbiAgICogICAgIGFzc2VydC5ub3RPd25Qcm9wZXJ0eVZhbCh7fSwgJ3RvU3RyaW5nJywgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdE93blByb3BlcnR5VmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RPd25Qcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uIChvYmosIHByb3AsIHZhbHVlLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90T3duUHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUub3duLnByb3BlcnR5KHByb3AsIHZhbHVlKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5kZWVwT3duUHJvcGVydHlWYWwob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhIGRpcmVjdCBwcm9wZXJ0eSBuYW1lZCBieSBgcHJvcGVydHlgIGFuZCBhIHZhbHVlXG4gICAqIGVxdWFsIHRvIHRoZSBwcm92aWRlZCBgdmFsdWVgLiBVc2VzIGEgZGVlcCBlcXVhbGl0eSBjaGVjay4gSW5oZXJpdGVkXG4gICAqIHByb3BlcnRpZXMgYXJlbid0IGNoZWNrZWQuXG4gICAqXG4gICAqICAgICBhc3NlcnQuZGVlcE93blByb3BlcnR5VmFsKHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9IH0sICd0ZWEnLCB7IGdyZWVuOiAnbWF0Y2hhJyB9KTtcbiAgICpcbiAgICogQG5hbWUgZGVlcE93blByb3BlcnR5VmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kZWVwT3duUHJvcGVydHlWYWwgPSBmdW5jdGlvbiAob2JqLCBwcm9wLCB2YWx1ZSwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRlZXBPd25Qcm9wZXJ0eVZhbCwgdHJ1ZSlcbiAgICAgIC50by5oYXZlLmRlZXAub3duLnByb3BlcnR5KHByb3AsIHZhbHVlKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3REZWVwT3duUHJvcGVydHlWYWwob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGRvZXMgX25vdF8gaGF2ZSBhIGRpcmVjdCBwcm9wZXJ0eSBuYW1lZCBieSBgcHJvcGVydHlgXG4gICAqIHdpdGggYSB2YWx1ZSBlcXVhbCB0byB0aGUgcHJvdmlkZWQgYHZhbHVlYC4gVXNlcyBhIGRlZXAgZXF1YWxpdHkgY2hlY2suXG4gICAqIEluaGVyaXRlZCBwcm9wZXJ0aWVzIGFyZW4ndCBjaGVja2VkLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBPd25Qcm9wZXJ0eVZhbCh7IHRlYTogeyBncmVlbjogJ21hdGNoYScgfSB9LCAndGVhJywgeyBibGFjazogJ21hdGNoYScgfSk7XG4gICAqICAgICBhc3NlcnQubm90RGVlcE93blByb3BlcnR5VmFsKHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9IH0sICd0ZWEnLCB7IGdyZWVuOiAnb29sb25nJyB9KTtcbiAgICogICAgIGFzc2VydC5ub3REZWVwT3duUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH0gfSwgJ2NvZmZlZScsIHsgZ3JlZW46ICdtYXRjaGEnIH0pO1xuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBPd25Qcm9wZXJ0eVZhbCh7fSwgJ3RvU3RyaW5nJywgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdERlZXBPd25Qcm9wZXJ0eVZhbFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90RGVlcE93blByb3BlcnR5VmFsID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgdmFsdWUsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3REZWVwT3duUHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUuZGVlcC5vd24ucHJvcGVydHkocHJvcCwgdmFsdWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5lc3RlZFByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZWQgYnlcbiAgICogYHByb3BlcnR5YCwgd2hpY2ggY2FuIGJlIGEgc3RyaW5nIHVzaW5nIGRvdC0gYW5kIGJyYWNrZXQtbm90YXRpb24gZm9yXG4gICAqIG5lc3RlZCByZWZlcmVuY2UuXG4gICAqXG4gICAqICAgICBhc3NlcnQubmVzdGVkUHJvcGVydHkoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH19LCAndGVhLmdyZWVuJyk7XG4gICAqXG4gICAqIEBuYW1lIG5lc3RlZFByb3BlcnR5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5uZXN0ZWRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvYmosIHByb3AsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5uZXN0ZWRQcm9wZXJ0eSwgdHJ1ZSlcbiAgICAgIC50by5oYXZlLm5lc3RlZC5wcm9wZXJ0eShwcm9wKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3ROZXN0ZWRQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBkb2VzIF9ub3RfIGhhdmUgYSBwcm9wZXJ0eSBuYW1lZCBieSBgcHJvcGVydHlgLCB3aGljaFxuICAgKiBjYW4gYmUgYSBzdHJpbmcgdXNpbmcgZG90LSBhbmQgYnJhY2tldC1ub3RhdGlvbiBmb3IgbmVzdGVkIHJlZmVyZW5jZS4gVGhlXG4gICAqIHByb3BlcnR5IGNhbm5vdCBleGlzdCBvbiB0aGUgb2JqZWN0IG5vciBhbnl3aGVyZSBpbiBpdHMgcHJvdG90eXBlIGNoYWluLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdE5lc3RlZFByb3BlcnR5KHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9fSwgJ3RlYS5vb2xvbmcnKTtcbiAgICpcbiAgICogQG5hbWUgbm90TmVzdGVkUHJvcGVydHlcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdE5lc3RlZFByb3BlcnR5ID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdE5lc3RlZFByb3BlcnR5LCB0cnVlKVxuICAgICAgLnRvLm5vdC5oYXZlLm5lc3RlZC5wcm9wZXJ0eShwcm9wKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5uZXN0ZWRQcm9wZXJ0eVZhbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGEgcHJvcGVydHkgbmFtZWQgYnkgYHByb3BlcnR5YCB3aXRoIHZhbHVlIGdpdmVuXG4gICAqIGJ5IGB2YWx1ZWAuIGBwcm9wZXJ0eWAgY2FuIHVzZSBkb3QtIGFuZCBicmFja2V0LW5vdGF0aW9uIGZvciBuZXN0ZWRcbiAgICogcmVmZXJlbmNlLiBVc2VzIGEgc3RyaWN0IGVxdWFsaXR5IGNoZWNrICg9PT0pLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5lc3RlZFByb3BlcnR5VmFsKHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9fSwgJ3RlYS5ncmVlbicsICdtYXRjaGEnKTtcbiAgICpcbiAgICogQG5hbWUgbmVzdGVkUHJvcGVydHlWYWxcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5lc3RlZFByb3BlcnR5VmFsID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubmVzdGVkUHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8uaGF2ZS5uZXN0ZWQucHJvcGVydHkocHJvcCwgdmFsKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3ROZXN0ZWRQcm9wZXJ0eVZhbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgZG9lcyBfbm90XyBoYXZlIGEgcHJvcGVydHkgbmFtZWQgYnkgYHByb3BlcnR5YCB3aXRoXG4gICAqIHZhbHVlIGdpdmVuIGJ5IGB2YWx1ZWAuIGBwcm9wZXJ0eWAgY2FuIHVzZSBkb3QtIGFuZCBicmFja2V0LW5vdGF0aW9uIGZvclxuICAgKiBuZXN0ZWQgcmVmZXJlbmNlLiBVc2VzIGEgc3RyaWN0IGVxdWFsaXR5IGNoZWNrICg9PT0pLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdE5lc3RlZFByb3BlcnR5VmFsKHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9fSwgJ3RlYS5ncmVlbicsICdrb25hY2hhJyk7XG4gICAqICAgICBhc3NlcnQubm90TmVzdGVkUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH19LCAnY29mZmVlLmdyZWVuJywgJ21hdGNoYScpO1xuICAgKlxuICAgKiBAbmFtZSBub3ROZXN0ZWRQcm9wZXJ0eVZhbFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90TmVzdGVkUHJvcGVydHlWYWwgPSBmdW5jdGlvbiAob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3ROZXN0ZWRQcm9wZXJ0eVZhbCwgdHJ1ZSlcbiAgICAgIC50by5ub3QuaGF2ZS5uZXN0ZWQucHJvcGVydHkocHJvcCwgdmFsKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5kZWVwTmVzdGVkUHJvcGVydHlWYWwob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhIHByb3BlcnR5IG5hbWVkIGJ5IGBwcm9wZXJ0eWAgd2l0aCBhIHZhbHVlIGdpdmVuXG4gICAqIGJ5IGB2YWx1ZWAuIGBwcm9wZXJ0eWAgY2FuIHVzZSBkb3QtIGFuZCBicmFja2V0LW5vdGF0aW9uIGZvciBuZXN0ZWRcbiAgICogcmVmZXJlbmNlLiBVc2VzIGEgZGVlcCBlcXVhbGl0eSBjaGVjay5cbiAgICpcbiAgICogICAgIGFzc2VydC5kZWVwTmVzdGVkUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46IHsgbWF0Y2hhOiAneXVtJyB9IH0gfSwgJ3RlYS5ncmVlbicsIHsgbWF0Y2hhOiAneXVtJyB9KTtcbiAgICpcbiAgICogQG5hbWUgZGVlcE5lc3RlZFByb3BlcnR5VmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kZWVwTmVzdGVkUHJvcGVydHlWYWwgPSBmdW5jdGlvbiAob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kZWVwTmVzdGVkUHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8uaGF2ZS5kZWVwLm5lc3RlZC5wcm9wZXJ0eShwcm9wLCB2YWwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdERlZXBOZXN0ZWRQcm9wZXJ0eVZhbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgZG9lcyBfbm90XyBoYXZlIGEgcHJvcGVydHkgbmFtZWQgYnkgYHByb3BlcnR5YCB3aXRoXG4gICAqIHZhbHVlIGdpdmVuIGJ5IGB2YWx1ZWAuIGBwcm9wZXJ0eWAgY2FuIHVzZSBkb3QtIGFuZCBicmFja2V0LW5vdGF0aW9uIGZvclxuICAgKiBuZXN0ZWQgcmVmZXJlbmNlLiBVc2VzIGEgZGVlcCBlcXVhbGl0eSBjaGVjay5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3REZWVwTmVzdGVkUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46IHsgbWF0Y2hhOiAneXVtJyB9IH0gfSwgJ3RlYS5ncmVlbicsIHsgb29sb25nOiAneXVtJyB9KTtcbiAgICogICAgIGFzc2VydC5ub3REZWVwTmVzdGVkUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46IHsgbWF0Y2hhOiAneXVtJyB9IH0gfSwgJ3RlYS5ncmVlbicsIHsgbWF0Y2hhOiAneXVjaycgfSk7XG4gICAqICAgICBhc3NlcnQubm90RGVlcE5lc3RlZFByb3BlcnR5VmFsKHsgdGVhOiB7IGdyZWVuOiB7IG1hdGNoYTogJ3l1bScgfSB9IH0sICd0ZWEuYmxhY2snLCB7IG1hdGNoYTogJ3l1bScgfSk7XG4gICAqXG4gICAqIEBuYW1lIG5vdERlZXBOZXN0ZWRQcm9wZXJ0eVZhbFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90RGVlcE5lc3RlZFByb3BlcnR5VmFsID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90RGVlcE5lc3RlZFByb3BlcnR5VmFsLCB0cnVlKVxuICAgICAgLnRvLm5vdC5oYXZlLmRlZXAubmVzdGVkLnByb3BlcnR5KHByb3AsIHZhbCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5sZW5ndGhPZihvYmplY3QsIGxlbmd0aCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGEgYGxlbmd0aGAgb3IgYHNpemVgIHdpdGggdGhlIGV4cGVjdGVkIHZhbHVlLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lmxlbmd0aE9mKFsxLDIsM10sIDMsICdhcnJheSBoYXMgbGVuZ3RoIG9mIDMnKTtcbiAgICogICAgIGFzc2VydC5sZW5ndGhPZignZm9vYmFyJywgNiwgJ3N0cmluZyBoYXMgbGVuZ3RoIG9mIDYnKTtcbiAgICogICAgIGFzc2VydC5sZW5ndGhPZihuZXcgU2V0KFsxLDIsM10pLCAzLCAnc2V0IGhhcyBzaXplIG9mIDMnKTtcbiAgICogICAgIGFzc2VydC5sZW5ndGhPZihuZXcgTWFwKFtbJ2EnLDFdLFsnYicsMl0sWydjJywzXV0pLCAzLCAnbWFwIGhhcyBzaXplIG9mIDMnKTtcbiAgICpcbiAgICogQG5hbWUgbGVuZ3RoT2ZcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7TnVtYmVyfSBsZW5ndGhcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lmxlbmd0aE9mID0gZnVuY3Rpb24gKGV4cCwgbGVuLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubGVuZ3RoT2YsIHRydWUpLnRvLmhhdmUubGVuZ3RoT2YobGVuKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5oYXNBbnlLZXlzKG9iamVjdCwgW2tleXNdLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBoYXMgYXQgbGVhc3Qgb25lIG9mIHRoZSBga2V5c2AgcHJvdmlkZWQuXG4gICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIG9mIGEgYGtleXNgIGFycmF5IGFuZCBpdHMga2V5c1xuICAgKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGV4cGVjdGVkIHNldCBvZiBrZXlzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lmhhc0FueUtleXMoe2ZvbzogMSwgYmFyOiAyLCBiYXo6IDN9LCBbJ2ZvbycsICdpRG9udEV4aXN0JywgJ2JheiddKTtcbiAgICogICAgIGFzc2VydC5oYXNBbnlLZXlzKHtmb286IDEsIGJhcjogMiwgYmF6OiAzfSwge2ZvbzogMzAsIGlEb250RXhpc3Q6IDk5LCBiYXo6IDEzMzd9KTtcbiAgICogICAgIGFzc2VydC5oYXNBbnlLZXlzKG5ldyBNYXAoW1t7Zm9vOiAxfSwgJ2JhciddLCBbJ2tleScsICd2YWx1ZSddXSksIFt7Zm9vOiAxfSwgJ2tleSddKTtcbiAgICogICAgIGFzc2VydC5oYXNBbnlLZXlzKG5ldyBTZXQoW3tmb286ICdiYXInfSwgJ2Fub3RoZXJLZXknXSksIFt7Zm9vOiAnYmFyJ30sICdhbm90aGVyS2V5J10pO1xuICAgKlxuICAgKiBAbmFtZSBoYXNBbnlLZXlzXG4gICAqIEBwYXJhbSB7TWl4ZWR9IG9iamVjdFxuICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0ga2V5c1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaGFzQW55S2V5cyA9IGZ1bmN0aW9uIChvYmosIGtleXMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5oYXNBbnlLZXlzLCB0cnVlKS50by5oYXZlLmFueS5rZXlzKGtleXMpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAuaGFzQWxsS2V5cyhvYmplY3QsIFtrZXlzXSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGFsbCBhbmQgb25seSBhbGwgb2YgdGhlIGBrZXlzYCBwcm92aWRlZC5cbiAgICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQgb2YgYSBga2V5c2AgYXJyYXkgYW5kIGl0cyBrZXlzXG4gICAqIHdpbGwgYmUgdXNlZCBhcyB0aGUgZXhwZWN0ZWQgc2V0IG9mIGtleXMuXG4gICAqXG4gICAqICAgICBhc3NlcnQuaGFzQWxsS2V5cyh7Zm9vOiAxLCBiYXI6IDIsIGJhejogM30sIFsnZm9vJywgJ2JhcicsICdiYXonXSk7XG4gICAqICAgICBhc3NlcnQuaGFzQWxsS2V5cyh7Zm9vOiAxLCBiYXI6IDIsIGJhejogM30sIHtmb286IDMwLCBiYXI6IDk5LCBiYXo6IDEzMzddKTtcbiAgICogICAgIGFzc2VydC5oYXNBbGxLZXlzKG5ldyBNYXAoW1t7Zm9vOiAxfSwgJ2JhciddLCBbJ2tleScsICd2YWx1ZSddXSksIFt7Zm9vOiAxfSwgJ2tleSddKTtcbiAgICogICAgIGFzc2VydC5oYXNBbGxLZXlzKG5ldyBTZXQoW3tmb286ICdiYXInfSwgJ2Fub3RoZXJLZXknXSwgW3tmb286ICdiYXInfSwgJ2Fub3RoZXJLZXknXSk7XG4gICAqXG4gICAqIEBuYW1lIGhhc0FsbEtleXNcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nW119IGtleXNcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lmhhc0FsbEtleXMgPSBmdW5jdGlvbiAob2JqLCBrZXlzLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaGFzQWxsS2V5cywgdHJ1ZSkudG8uaGF2ZS5hbGwua2V5cyhrZXlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmNvbnRhaW5zQWxsS2V5cyhvYmplY3QsIFtrZXlzXSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGFsbCBvZiB0aGUgYGtleXNgIHByb3ZpZGVkIGJ1dCBtYXkgaGF2ZSBtb3JlIGtleXMgbm90IGxpc3RlZC5cbiAgICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQgb2YgYSBga2V5c2AgYXJyYXkgYW5kIGl0cyBrZXlzXG4gICAqIHdpbGwgYmUgdXNlZCBhcyB0aGUgZXhwZWN0ZWQgc2V0IG9mIGtleXMuXG4gICAqXG4gICAqICAgICBhc3NlcnQuY29udGFpbnNBbGxLZXlzKHtmb286IDEsIGJhcjogMiwgYmF6OiAzfSwgWydmb28nLCAnYmF6J10pO1xuICAgKiAgICAgYXNzZXJ0LmNvbnRhaW5zQWxsS2V5cyh7Zm9vOiAxLCBiYXI6IDIsIGJhejogM30sIFsnZm9vJywgJ2JhcicsICdiYXonXSk7XG4gICAqICAgICBhc3NlcnQuY29udGFpbnNBbGxLZXlzKHtmb286IDEsIGJhcjogMiwgYmF6OiAzfSwge2ZvbzogMzAsIGJhejogMTMzN30pO1xuICAgKiAgICAgYXNzZXJ0LmNvbnRhaW5zQWxsS2V5cyh7Zm9vOiAxLCBiYXI6IDIsIGJhejogM30sIHtmb286IDMwLCBiYXI6IDk5LCBiYXo6IDEzMzd9KTtcbiAgICogICAgIGFzc2VydC5jb250YWluc0FsbEtleXMobmV3IE1hcChbW3tmb286IDF9LCAnYmFyJ10sIFsna2V5JywgJ3ZhbHVlJ11dKSwgW3tmb286IDF9XSk7XG4gICAqICAgICBhc3NlcnQuY29udGFpbnNBbGxLZXlzKG5ldyBNYXAoW1t7Zm9vOiAxfSwgJ2JhciddLCBbJ2tleScsICd2YWx1ZSddXSksIFt7Zm9vOiAxfSwgJ2tleSddKTtcbiAgICogICAgIGFzc2VydC5jb250YWluc0FsbEtleXMobmV3IFNldChbe2ZvbzogJ2Jhcid9LCAnYW5vdGhlcktleSddLCBbe2ZvbzogJ2Jhcid9XSk7XG4gICAqICAgICBhc3NlcnQuY29udGFpbnNBbGxLZXlzKG5ldyBTZXQoW3tmb286ICdiYXInfSwgJ2Fub3RoZXJLZXknXSwgW3tmb286ICdiYXInfSwgJ2Fub3RoZXJLZXknXSk7XG4gICAqXG4gICAqIEBuYW1lIGNvbnRhaW5zQWxsS2V5c1xuICAgKiBAcGFyYW0ge01peGVkfSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmdbXX0ga2V5c1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuY29udGFpbnNBbGxLZXlzID0gZnVuY3Rpb24gKG9iaiwga2V5cywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmNvbnRhaW5zQWxsS2V5cywgdHJ1ZSlcbiAgICAgIC50by5jb250YWluLmFsbC5rZXlzKGtleXMpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAuZG9lc05vdEhhdmVBbnlLZXlzKG9iamVjdCwgW2tleXNdLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBoYXMgbm9uZSBvZiB0aGUgYGtleXNgIHByb3ZpZGVkLlxuICAgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhIHNpbmdsZSBvYmplY3QgaW5zdGVhZCBvZiBhIGBrZXlzYCBhcnJheSBhbmQgaXRzIGtleXNcbiAgICogd2lsbCBiZSB1c2VkIGFzIHRoZSBleHBlY3RlZCBzZXQgb2Yga2V5cy5cbiAgICpcbiAgICogICAgIGFzc2VydC5kb2VzTm90SGF2ZUFueUtleXMoe2ZvbzogMSwgYmFyOiAyLCBiYXo6IDN9LCBbJ29uZScsICd0d28nLCAnZXhhbXBsZSddKTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90SGF2ZUFueUtleXMoe2ZvbzogMSwgYmFyOiAyLCBiYXo6IDN9LCB7b25lOiAxLCB0d286IDIsIGV4YW1wbGU6ICdmb28nfSk7XG4gICAqICAgICBhc3NlcnQuZG9lc05vdEhhdmVBbnlLZXlzKG5ldyBNYXAoW1t7Zm9vOiAxfSwgJ2JhciddLCBbJ2tleScsICd2YWx1ZSddXSksIFt7b25lOiAndHdvJ30sICdleGFtcGxlJ10pO1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RIYXZlQW55S2V5cyhuZXcgU2V0KFt7Zm9vOiAnYmFyJ30sICdhbm90aGVyS2V5J10sIFt7b25lOiAndHdvJ30sICdleGFtcGxlJ10pO1xuICAgKlxuICAgKiBAbmFtZSBkb2VzTm90SGF2ZUFueUtleXNcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nW119IGtleXNcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmRvZXNOb3RIYXZlQW55S2V5cyA9IGZ1bmN0aW9uIChvYmosIGtleXMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kb2VzTm90SGF2ZUFueUtleXMsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUuYW55LmtleXMoa2V5cyk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5kb2VzTm90SGF2ZUFsbEtleXMob2JqZWN0LCBba2V5c10sIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGRvZXMgbm90IGhhdmUgYXQgbGVhc3Qgb25lIG9mIHRoZSBga2V5c2AgcHJvdmlkZWQuXG4gICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIG9mIGEgYGtleXNgIGFycmF5IGFuZCBpdHMga2V5c1xuICAgKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGV4cGVjdGVkIHNldCBvZiBrZXlzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RIYXZlQWxsS2V5cyh7Zm9vOiAxLCBiYXI6IDIsIGJhejogM30sIFsnb25lJywgJ3R3bycsICdleGFtcGxlJ10pO1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RIYXZlQWxsS2V5cyh7Zm9vOiAxLCBiYXI6IDIsIGJhejogM30sIHtvbmU6IDEsIHR3bzogMiwgZXhhbXBsZTogJ2Zvbyd9KTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90SGF2ZUFsbEtleXMobmV3IE1hcChbW3tmb286IDF9LCAnYmFyJ10sIFsna2V5JywgJ3ZhbHVlJ11dKSwgW3tvbmU6ICd0d28nfSwgJ2V4YW1wbGUnXSk7XG4gICAqICAgICBhc3NlcnQuZG9lc05vdEhhdmVBbGxLZXlzKG5ldyBTZXQoW3tmb286ICdiYXInfSwgJ2Fub3RoZXJLZXknXSwgW3tvbmU6ICd0d28nfSwgJ2V4YW1wbGUnXSk7XG4gICAqXG4gICAqIEBuYW1lIGRvZXNOb3RIYXZlQWxsS2V5c1xuICAgKiBAcGFyYW0ge01peGVkfSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmdbXX0ga2V5c1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZG9lc05vdEhhdmVBbGxLZXlzID0gZnVuY3Rpb24gKG9iaiwga2V5cywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRvZXNOb3RIYXZlQWxsS2V5cywgdHJ1ZSlcbiAgICAgIC50by5ub3QuaGF2ZS5hbGwua2V5cyhrZXlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmhhc0FueURlZXBLZXlzKG9iamVjdCwgW2tleXNdLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBoYXMgYXQgbGVhc3Qgb25lIG9mIHRoZSBga2V5c2AgcHJvdmlkZWQuXG4gICAqIFNpbmNlIFNldHMgYW5kIE1hcHMgY2FuIGhhdmUgb2JqZWN0cyBhcyBrZXlzIHlvdSBjYW4gdXNlIHRoaXMgYXNzZXJ0aW9uIHRvIHBlcmZvcm1cbiAgICogYSBkZWVwIGNvbXBhcmlzb24uXG4gICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIG9mIGEgYGtleXNgIGFycmF5IGFuZCBpdHMga2V5c1xuICAgKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGV4cGVjdGVkIHNldCBvZiBrZXlzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lmhhc0FueURlZXBLZXlzKG5ldyBNYXAoW1t7b25lOiAnb25lJ30sICd2YWx1ZU9uZSddLCBbMSwgMl1dKSwge29uZTogJ29uZSd9KTtcbiAgICogICAgIGFzc2VydC5oYXNBbnlEZWVwS2V5cyhuZXcgTWFwKFtbe29uZTogJ29uZSd9LCAndmFsdWVPbmUnXSwgWzEsIDJdXSksIFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pO1xuICAgKiAgICAgYXNzZXJ0Lmhhc0FueURlZXBLZXlzKG5ldyBNYXAoW1t7b25lOiAnb25lJ30sICd2YWx1ZU9uZSddLCBbe3R3bzogJ3R3byd9LCAndmFsdWVUd28nXV0pLCBbe29uZTogJ29uZSd9LCB7dHdvOiAndHdvJ31dKTtcbiAgICogICAgIGFzc2VydC5oYXNBbnlEZWVwS2V5cyhuZXcgU2V0KFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pLCB7b25lOiAnb25lJ30pO1xuICAgKiAgICAgYXNzZXJ0Lmhhc0FueURlZXBLZXlzKG5ldyBTZXQoW3tvbmU6ICdvbmUnfSwge3R3bzogJ3R3byd9XSksIFt7b25lOiAnb25lJ30sIHt0aHJlZTogJ3RocmVlJ31dKTtcbiAgICogICAgIGFzc2VydC5oYXNBbnlEZWVwS2V5cyhuZXcgU2V0KFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pLCBbe29uZTogJ29uZSd9LCB7dHdvOiAndHdvJ31dKTtcbiAgICpcbiAgICogQG5hbWUgaGFzQW55RGVlcEtleXNcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBrZXlzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5oYXNBbnlEZWVwS2V5cyA9IGZ1bmN0aW9uIChvYmosIGtleXMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5oYXNBbnlEZWVwS2V5cywgdHJ1ZSlcbiAgICAgIC50by5oYXZlLmFueS5kZWVwLmtleXMoa2V5cyk7XG4gIH1cblxuIC8qKlxuICAgKiAjIyMgLmhhc0FsbERlZXBLZXlzKG9iamVjdCwgW2tleXNdLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBoYXMgYWxsIGFuZCBvbmx5IGFsbCBvZiB0aGUgYGtleXNgIHByb3ZpZGVkLlxuICAgKiBTaW5jZSBTZXRzIGFuZCBNYXBzIGNhbiBoYXZlIG9iamVjdHMgYXMga2V5cyB5b3UgY2FuIHVzZSB0aGlzIGFzc2VydGlvbiB0byBwZXJmb3JtXG4gICAqIGEgZGVlcCBjb21wYXJpc29uLlxuICAgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhIHNpbmdsZSBvYmplY3QgaW5zdGVhZCBvZiBhIGBrZXlzYCBhcnJheSBhbmQgaXRzIGtleXNcbiAgICogd2lsbCBiZSB1c2VkIGFzIHRoZSBleHBlY3RlZCBzZXQgb2Yga2V5cy5cbiAgICpcbiAgICogICAgIGFzc2VydC5oYXNBbGxEZWVwS2V5cyhuZXcgTWFwKFtbe29uZTogJ29uZSd9LCAndmFsdWVPbmUnXV0pLCB7b25lOiAnb25lJ30pO1xuICAgKiAgICAgYXNzZXJ0Lmhhc0FsbERlZXBLZXlzKG5ldyBNYXAoW1t7b25lOiAnb25lJ30sICd2YWx1ZU9uZSddLCBbe3R3bzogJ3R3byd9LCAndmFsdWVUd28nXV0pLCBbe29uZTogJ29uZSd9LCB7dHdvOiAndHdvJ31dKTtcbiAgICogICAgIGFzc2VydC5oYXNBbGxEZWVwS2V5cyhuZXcgU2V0KFt7b25lOiAnb25lJ31dKSwge29uZTogJ29uZSd9KTtcbiAgICogICAgIGFzc2VydC5oYXNBbGxEZWVwS2V5cyhuZXcgU2V0KFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pLCBbe29uZTogJ29uZSd9LCB7dHdvOiAndHdvJ31dKTtcbiAgICpcbiAgICogQG5hbWUgaGFzQWxsRGVlcEtleXNcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBrZXlzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5oYXNBbGxEZWVwS2V5cyA9IGZ1bmN0aW9uIChvYmosIGtleXMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5oYXNBbGxEZWVwS2V5cywgdHJ1ZSlcbiAgICAgIC50by5oYXZlLmFsbC5kZWVwLmtleXMoa2V5cyk7XG4gIH1cblxuIC8qKlxuICAgKiAjIyMgLmNvbnRhaW5zQWxsRGVlcEtleXMob2JqZWN0LCBba2V5c10sIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGNvbnRhaW5zIGFsbCBvZiB0aGUgYGtleXNgIHByb3ZpZGVkLlxuICAgKiBTaW5jZSBTZXRzIGFuZCBNYXBzIGNhbiBoYXZlIG9iamVjdHMgYXMga2V5cyB5b3UgY2FuIHVzZSB0aGlzIGFzc2VydGlvbiB0byBwZXJmb3JtXG4gICAqIGEgZGVlcCBjb21wYXJpc29uLlxuICAgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhIHNpbmdsZSBvYmplY3QgaW5zdGVhZCBvZiBhIGBrZXlzYCBhcnJheSBhbmQgaXRzIGtleXNcbiAgICogd2lsbCBiZSB1c2VkIGFzIHRoZSBleHBlY3RlZCBzZXQgb2Yga2V5cy5cbiAgICpcbiAgICogICAgIGFzc2VydC5jb250YWluc0FsbERlZXBLZXlzKG5ldyBNYXAoW1t7b25lOiAnb25lJ30sICd2YWx1ZU9uZSddLCBbMSwgMl1dKSwge29uZTogJ29uZSd9KTtcbiAgICogICAgIGFzc2VydC5jb250YWluc0FsbERlZXBLZXlzKG5ldyBNYXAoW1t7b25lOiAnb25lJ30sICd2YWx1ZU9uZSddLCBbe3R3bzogJ3R3byd9LCAndmFsdWVUd28nXV0pLCBbe29uZTogJ29uZSd9LCB7dHdvOiAndHdvJ31dKTtcbiAgICogICAgIGFzc2VydC5jb250YWluc0FsbERlZXBLZXlzKG5ldyBTZXQoW3tvbmU6ICdvbmUnfSwge3R3bzogJ3R3byd9XSksIHtvbmU6ICdvbmUnfSk7XG4gICAqICAgICBhc3NlcnQuY29udGFpbnNBbGxEZWVwS2V5cyhuZXcgU2V0KFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pLCBbe29uZTogJ29uZSd9LCB7dHdvOiAndHdvJ31dKTtcbiAgICpcbiAgICogQG5hbWUgY29udGFpbnNBbGxEZWVwS2V5c1xuICAgKiBAcGFyYW0ge01peGVkfSBvYmplY3RcbiAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGtleXNcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmNvbnRhaW5zQWxsRGVlcEtleXMgPSBmdW5jdGlvbiAob2JqLCBrZXlzLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuY29udGFpbnNBbGxEZWVwS2V5cywgdHJ1ZSlcbiAgICAgIC50by5jb250YWluLmFsbC5kZWVwLmtleXMoa2V5cyk7XG4gIH1cblxuIC8qKlxuICAgKiAjIyMgLmRvZXNOb3RIYXZlQW55RGVlcEtleXMob2JqZWN0LCBba2V5c10sIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBub25lIG9mIHRoZSBga2V5c2AgcHJvdmlkZWQuXG4gICAqIFNpbmNlIFNldHMgYW5kIE1hcHMgY2FuIGhhdmUgb2JqZWN0cyBhcyBrZXlzIHlvdSBjYW4gdXNlIHRoaXMgYXNzZXJ0aW9uIHRvIHBlcmZvcm1cbiAgICogYSBkZWVwIGNvbXBhcmlzb24uXG4gICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIG9mIGEgYGtleXNgIGFycmF5IGFuZCBpdHMga2V5c1xuICAgKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGV4cGVjdGVkIHNldCBvZiBrZXlzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RIYXZlQW55RGVlcEtleXMobmV3IE1hcChbW3tvbmU6ICdvbmUnfSwgJ3ZhbHVlT25lJ10sIFsxLCAyXV0pLCB7dGhpc0RvZXNOb3Q6ICdleGlzdCd9KTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90SGF2ZUFueURlZXBLZXlzKG5ldyBNYXAoW1t7b25lOiAnb25lJ30sICd2YWx1ZU9uZSddLCBbe3R3bzogJ3R3byd9LCAndmFsdWVUd28nXV0pLCBbe3R3ZW50eTogJ3R3ZW50eSd9LCB7ZmlmdHk6ICdmaWZ0eSd9XSk7XG4gICAqICAgICBhc3NlcnQuZG9lc05vdEhhdmVBbnlEZWVwS2V5cyhuZXcgU2V0KFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pLCB7dHdlbnR5OiAndHdlbnR5J30pO1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RIYXZlQW55RGVlcEtleXMobmV3IFNldChbe29uZTogJ29uZSd9LCB7dHdvOiAndHdvJ31dKSwgW3t0d2VudHk6ICd0d2VudHknfSwge2ZpZnR5OiAnZmlmdHknfV0pO1xuICAgKlxuICAgKiBAbmFtZSBkb2VzTm90SGF2ZUFueURlZXBLZXlzXG4gICAqIEBwYXJhbSB7TWl4ZWR9IG9iamVjdFxuICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0ga2V5c1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZG9lc05vdEhhdmVBbnlEZWVwS2V5cyA9IGZ1bmN0aW9uIChvYmosIGtleXMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kb2VzTm90SGF2ZUFueURlZXBLZXlzLCB0cnVlKVxuICAgICAgLnRvLm5vdC5oYXZlLmFueS5kZWVwLmtleXMoa2V5cyk7XG4gIH1cblxuIC8qKlxuICAgKiAjIyMgLmRvZXNOb3RIYXZlQWxsRGVlcEtleXMob2JqZWN0LCBba2V5c10sIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGRvZXMgbm90IGhhdmUgYXQgbGVhc3Qgb25lIG9mIHRoZSBga2V5c2AgcHJvdmlkZWQuXG4gICAqIFNpbmNlIFNldHMgYW5kIE1hcHMgY2FuIGhhdmUgb2JqZWN0cyBhcyBrZXlzIHlvdSBjYW4gdXNlIHRoaXMgYXNzZXJ0aW9uIHRvIHBlcmZvcm1cbiAgICogYSBkZWVwIGNvbXBhcmlzb24uXG4gICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIG9mIGEgYGtleXNgIGFycmF5IGFuZCBpdHMga2V5c1xuICAgKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGV4cGVjdGVkIHNldCBvZiBrZXlzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RIYXZlQWxsRGVlcEtleXMobmV3IE1hcChbW3tvbmU6ICdvbmUnfSwgJ3ZhbHVlT25lJ10sIFsxLCAyXV0pLCB7dGhpc0RvZXNOb3Q6ICdleGlzdCd9KTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90SGF2ZUFsbERlZXBLZXlzKG5ldyBNYXAoW1t7b25lOiAnb25lJ30sICd2YWx1ZU9uZSddLCBbe3R3bzogJ3R3byd9LCAndmFsdWVUd28nXV0pLCBbe3R3ZW50eTogJ3R3ZW50eSd9LCB7b25lOiAnb25lJ31dKTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90SGF2ZUFsbERlZXBLZXlzKG5ldyBTZXQoW3tvbmU6ICdvbmUnfSwge3R3bzogJ3R3byd9XSksIHt0d2VudHk6ICd0d2VudHknfSk7XG4gICAqICAgICBhc3NlcnQuZG9lc05vdEhhdmVBbGxEZWVwS2V5cyhuZXcgU2V0KFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pLCBbe29uZTogJ29uZSd9LCB7ZmlmdHk6ICdmaWZ0eSd9XSk7XG4gICAqXG4gICAqIEBuYW1lIGRvZXNOb3RIYXZlQWxsRGVlcEtleXNcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBrZXlzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kb2VzTm90SGF2ZUFsbERlZXBLZXlzID0gZnVuY3Rpb24gKG9iaiwga2V5cywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRvZXNOb3RIYXZlQWxsRGVlcEtleXMsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUuYWxsLmRlZXAua2V5cyhrZXlzKTtcbiAgfVxuXG4gLyoqXG4gICAqICMjIyAudGhyb3dzKGZuLCBbZXJyb3JMaWtlL3N0cmluZy9yZWdleHBdLCBbc3RyaW5nL3JlZ2V4cF0sIFttZXNzYWdlXSlcbiAgICpcbiAgICogSWYgYGVycm9yTGlrZWAgaXMgYW4gYEVycm9yYCBjb25zdHJ1Y3RvciwgYXNzZXJ0cyB0aGF0IGBmbmAgd2lsbCB0aHJvdyBhbiBlcnJvciB0aGF0IGlzIGFuXG4gICAqIGluc3RhbmNlIG9mIGBlcnJvckxpa2VgLlxuICAgKiBJZiBgZXJyb3JMaWtlYCBpcyBhbiBgRXJyb3JgIGluc3RhbmNlLCBhc3NlcnRzIHRoYXQgdGhlIGVycm9yIHRocm93biBpcyB0aGUgc2FtZVxuICAgKiBpbnN0YW5jZSBhcyBgZXJyb3JMaWtlYC5cbiAgICogSWYgYGVyck1zZ01hdGNoZXJgIGlzIHByb3ZpZGVkLCBpdCBhbHNvIGFzc2VydHMgdGhhdCB0aGUgZXJyb3IgdGhyb3duIHdpbGwgaGF2ZSBhXG4gICAqIG1lc3NhZ2UgbWF0Y2hpbmcgYGVyck1zZ01hdGNoZXJgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LnRocm93cyhmbiwgJ0Vycm9yIHRocm93biBtdXN0IGhhdmUgdGhpcyBtc2cnKTtcbiAgICogICAgIGFzc2VydC50aHJvd3MoZm4sIC9FcnJvciB0aHJvd24gbXVzdCBoYXZlIGEgbXNnIHRoYXQgbWF0Y2hlcyB0aGlzLyk7XG4gICAqICAgICBhc3NlcnQudGhyb3dzKGZuLCBSZWZlcmVuY2VFcnJvcik7XG4gICAqICAgICBhc3NlcnQudGhyb3dzKGZuLCBlcnJvckluc3RhbmNlKTtcbiAgICogICAgIGFzc2VydC50aHJvd3MoZm4sIFJlZmVyZW5jZUVycm9yLCAnRXJyb3IgdGhyb3duIG11c3QgYmUgYSBSZWZlcmVuY2VFcnJvciBhbmQgaGF2ZSB0aGlzIG1zZycpO1xuICAgKiAgICAgYXNzZXJ0LnRocm93cyhmbiwgZXJyb3JJbnN0YW5jZSwgJ0Vycm9yIHRocm93biBtdXN0IGJlIHRoZSBzYW1lIGVycm9ySW5zdGFuY2UgYW5kIGhhdmUgdGhpcyBtc2cnKTtcbiAgICogICAgIGFzc2VydC50aHJvd3MoZm4sIFJlZmVyZW5jZUVycm9yLCAvRXJyb3IgdGhyb3duIG11c3QgYmUgYSBSZWZlcmVuY2VFcnJvciBhbmQgbWF0Y2ggdGhpcy8pO1xuICAgKiAgICAgYXNzZXJ0LnRocm93cyhmbiwgZXJyb3JJbnN0YW5jZSwgL0Vycm9yIHRocm93biBtdXN0IGJlIHRoZSBzYW1lIGVycm9ySW5zdGFuY2UgYW5kIG1hdGNoIHRoaXMvKTtcbiAgICpcbiAgICogQG5hbWUgdGhyb3dzXG4gICAqIEBhbGlhcyB0aHJvd1xuICAgKiBAYWxpYXMgVGhyb3dcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICogQHBhcmFtIHtFcnJvckNvbnN0cnVjdG9yfEVycm9yfSBlcnJvckxpa2VcbiAgICogQHBhcmFtIHtSZWdFeHB8U3RyaW5nfSBlcnJNc2dNYXRjaGVyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRXJyb3IjRXJyb3JfdHlwZXNcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LnRocm93cyA9IGZ1bmN0aW9uIChmbiwgZXJyb3JMaWtlLCBlcnJNc2dNYXRjaGVyLCBtc2cpIHtcbiAgICBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiBlcnJvckxpa2UgfHwgZXJyb3JMaWtlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICBlcnJNc2dNYXRjaGVyID0gZXJyb3JMaWtlO1xuICAgICAgZXJyb3JMaWtlID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgYXNzZXJ0RXJyID0gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQudGhyb3dzLCB0cnVlKVxuICAgICAgLnRvLnRocm93KGVycm9yTGlrZSwgZXJyTXNnTWF0Y2hlcik7XG4gICAgcmV0dXJuIGZsYWcoYXNzZXJ0RXJyLCAnb2JqZWN0Jyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuZG9lc05vdFRocm93KGZuLCBbZXJyb3JMaWtlL3N0cmluZy9yZWdleHBdLCBbc3RyaW5nL3JlZ2V4cF0sIFttZXNzYWdlXSlcbiAgICpcbiAgICogSWYgYGVycm9yTGlrZWAgaXMgYW4gYEVycm9yYCBjb25zdHJ1Y3RvciwgYXNzZXJ0cyB0aGF0IGBmbmAgd2lsbCBfbm90XyB0aHJvdyBhbiBlcnJvciB0aGF0IGlzIGFuXG4gICAqIGluc3RhbmNlIG9mIGBlcnJvckxpa2VgLlxuICAgKiBJZiBgZXJyb3JMaWtlYCBpcyBhbiBgRXJyb3JgIGluc3RhbmNlLCBhc3NlcnRzIHRoYXQgdGhlIGVycm9yIHRocm93biBpcyBfbm90XyB0aGUgc2FtZVxuICAgKiBpbnN0YW5jZSBhcyBgZXJyb3JMaWtlYC5cbiAgICogSWYgYGVyck1zZ01hdGNoZXJgIGlzIHByb3ZpZGVkLCBpdCBhbHNvIGFzc2VydHMgdGhhdCB0aGUgZXJyb3IgdGhyb3duIHdpbGwgX25vdF8gaGF2ZSBhXG4gICAqIG1lc3NhZ2UgbWF0Y2hpbmcgYGVyck1zZ01hdGNoZXJgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdyhmbiwgJ0FueSBFcnJvciB0aHJvd24gbXVzdCBub3QgaGF2ZSB0aGlzIG1lc3NhZ2UnKTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90VGhyb3coZm4sIC9BbnkgRXJyb3IgdGhyb3duIG11c3Qgbm90IG1hdGNoIHRoaXMvKTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90VGhyb3coZm4sIEVycm9yKTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90VGhyb3coZm4sIGVycm9ySW5zdGFuY2UpO1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdyhmbiwgRXJyb3IsICdFcnJvciBtdXN0IG5vdCBoYXZlIHRoaXMgbWVzc2FnZScpO1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdyhmbiwgZXJyb3JJbnN0YW5jZSwgJ0Vycm9yIG11c3Qgbm90IGhhdmUgdGhpcyBtZXNzYWdlJyk7XG4gICAqICAgICBhc3NlcnQuZG9lc05vdFRocm93KGZuLCBFcnJvciwgL0Vycm9yIG11c3Qgbm90IG1hdGNoIHRoaXMvKTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90VGhyb3coZm4sIGVycm9ySW5zdGFuY2UsIC9FcnJvciBtdXN0IG5vdCBtYXRjaCB0aGlzLyk7XG4gICAqXG4gICAqIEBuYW1lIGRvZXNOb3RUaHJvd1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICAgKiBAcGFyYW0ge0Vycm9yQ29uc3RydWN0b3J9IGVycm9yTGlrZVxuICAgKiBAcGFyYW0ge1JlZ0V4cHxTdHJpbmd9IGVyck1zZ01hdGNoZXJcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9FcnJvciNFcnJvcl90eXBlc1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZG9lc05vdFRocm93ID0gZnVuY3Rpb24gKGZuLCBlcnJvckxpa2UsIGVyck1zZ01hdGNoZXIsIG1zZykge1xuICAgIGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIGVycm9yTGlrZSB8fCBlcnJvckxpa2UgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIGVyck1zZ01hdGNoZXIgPSBlcnJvckxpa2U7XG4gICAgICBlcnJvckxpa2UgPSBudWxsO1xuICAgIH1cblxuICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRvZXNOb3RUaHJvdywgdHJ1ZSlcbiAgICAgIC50by5ub3QudGhyb3coZXJyb3JMaWtlLCBlcnJNc2dNYXRjaGVyKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5vcGVyYXRvcih2YWwxLCBvcGVyYXRvciwgdmFsMiwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBDb21wYXJlcyB0d28gdmFsdWVzIHVzaW5nIGBvcGVyYXRvcmAuXG4gICAqXG4gICAqICAgICBhc3NlcnQub3BlcmF0b3IoMSwgJzwnLCAyLCAnZXZlcnl0aGluZyBpcyBvaycpO1xuICAgKiAgICAgYXNzZXJ0Lm9wZXJhdG9yKDEsICc+JywgMiwgJ3RoaXMgd2lsbCBmYWlsJyk7XG4gICAqXG4gICAqIEBuYW1lIG9wZXJhdG9yXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbDFcbiAgICogQHBhcmFtIHtTdHJpbmd9IG9wZXJhdG9yXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbDJcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm9wZXJhdG9yID0gZnVuY3Rpb24gKHZhbCwgb3BlcmF0b3IsIHZhbDIsIG1zZykge1xuICAgIHZhciBvaztcbiAgICBzd2l0Y2gob3BlcmF0b3IpIHtcbiAgICAgIGNhc2UgJz09JzpcbiAgICAgICAgb2sgPSB2YWwgPT0gdmFsMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICc9PT0nOlxuICAgICAgICBvayA9IHZhbCA9PT0gdmFsMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICc+JzpcbiAgICAgICAgb2sgPSB2YWwgPiB2YWwyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJz49JzpcbiAgICAgICAgb2sgPSB2YWwgPj0gdmFsMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICc8JzpcbiAgICAgICAgb2sgPSB2YWwgPCB2YWwyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJzw9JzpcbiAgICAgICAgb2sgPSB2YWwgPD0gdmFsMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICchPSc6XG4gICAgICAgIG9rID0gdmFsICE9IHZhbDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnIT09JzpcbiAgICAgICAgb2sgPSB2YWwgIT09IHZhbDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbXNnID0gbXNnID8gbXNnICsgJzogJyA6IG1zZztcbiAgICAgICAgdGhyb3cgbmV3IGNoYWkuQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgbXNnICsgJ0ludmFsaWQgb3BlcmF0b3IgXCInICsgb3BlcmF0b3IgKyAnXCInLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBhc3NlcnQub3BlcmF0b3JcbiAgICAgICAgKTtcbiAgICB9XG4gICAgdmFyIHRlc3QgPSBuZXcgQXNzZXJ0aW9uKG9rLCBtc2csIGFzc2VydC5vcGVyYXRvciwgdHJ1ZSk7XG4gICAgdGVzdC5hc3NlcnQoXG4gICAgICAgIHRydWUgPT09IGZsYWcodGVzdCwgJ29iamVjdCcpXG4gICAgICAsICdleHBlY3RlZCAnICsgdXRpbC5pbnNwZWN0KHZhbCkgKyAnIHRvIGJlICcgKyBvcGVyYXRvciArICcgJyArIHV0aWwuaW5zcGVjdCh2YWwyKVxuICAgICAgLCAnZXhwZWN0ZWQgJyArIHV0aWwuaW5zcGVjdCh2YWwpICsgJyB0byBub3QgYmUgJyArIG9wZXJhdG9yICsgJyAnICsgdXRpbC5pbnNwZWN0KHZhbDIpICk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuY2xvc2VUbyhhY3R1YWwsIGV4cGVjdGVkLCBkZWx0YSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBlcXVhbCBgZXhwZWN0ZWRgLCB0byB3aXRoaW4gYSArLy0gYGRlbHRhYCByYW5nZS5cbiAgICpcbiAgICogICAgIGFzc2VydC5jbG9zZVRvKDEuNSwgMSwgMC41LCAnbnVtYmVycyBhcmUgY2xvc2UnKTtcbiAgICpcbiAgICogQG5hbWUgY2xvc2VUb1xuICAgKiBAcGFyYW0ge051bWJlcn0gYWN0dWFsXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBleHBlY3RlZFxuICAgKiBAcGFyYW0ge051bWJlcn0gZGVsdGFcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmNsb3NlVG8gPSBmdW5jdGlvbiAoYWN0LCBleHAsIGRlbHRhLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQuY2xvc2VUbywgdHJ1ZSkudG8uYmUuY2xvc2VUbyhleHAsIGRlbHRhKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5hcHByb3hpbWF0ZWx5KGFjdHVhbCwgZXhwZWN0ZWQsIGRlbHRhLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIGBleHBlY3RlZGAsIHRvIHdpdGhpbiBhICsvLSBgZGVsdGFgIHJhbmdlLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmFwcHJveGltYXRlbHkoMS41LCAxLCAwLjUsICdudW1iZXJzIGFyZSBjbG9zZScpO1xuICAgKlxuICAgKiBAbmFtZSBhcHByb3hpbWF0ZWx5XG4gICAqIEBwYXJhbSB7TnVtYmVyfSBhY3R1YWxcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGV4cGVjdGVkXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuYXBwcm94aW1hdGVseSA9IGZ1bmN0aW9uIChhY3QsIGV4cCwgZGVsdGEsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5hcHByb3hpbWF0ZWx5LCB0cnVlKVxuICAgICAgLnRvLmJlLmFwcHJveGltYXRlbHkoZXhwLCBkZWx0YSk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuc2FtZU1lbWJlcnMoc2V0MSwgc2V0MiwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHNldDFgIGFuZCBgc2V0MmAgaGF2ZSB0aGUgc2FtZSBtZW1iZXJzIGluIGFueSBvcmRlci4gVXNlcyBhXG4gICAqIHN0cmljdCBlcXVhbGl0eSBjaGVjayAoPT09KS5cbiAgICpcbiAgICogICAgIGFzc2VydC5zYW1lTWVtYmVycyhbIDEsIDIsIDMgXSwgWyAyLCAxLCAzIF0sICdzYW1lIG1lbWJlcnMnKTtcbiAgICpcbiAgICogQG5hbWUgc2FtZU1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0MVxuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5zYW1lTWVtYmVycyA9IGZ1bmN0aW9uIChzZXQxLCBzZXQyLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0LnNhbWVNZW1iZXJzLCB0cnVlKVxuICAgICAgLnRvLmhhdmUuc2FtZS5tZW1iZXJzKHNldDIpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAubm90U2FtZU1lbWJlcnMoc2V0MSwgc2V0MiwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHNldDFgIGFuZCBgc2V0MmAgZG9uJ3QgaGF2ZSB0aGUgc2FtZSBtZW1iZXJzIGluIGFueSBvcmRlci5cbiAgICogVXNlcyBhIHN0cmljdCBlcXVhbGl0eSBjaGVjayAoPT09KS5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RTYW1lTWVtYmVycyhbIDEsIDIsIDMgXSwgWyA1LCAxLCAzIF0sICdub3Qgc2FtZSBtZW1iZXJzJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdFNhbWVNZW1iZXJzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHNldDFcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0MlxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90U2FtZU1lbWJlcnMgPSBmdW5jdGlvbiAoc2V0MSwgc2V0MiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5ub3RTYW1lTWVtYmVycywgdHJ1ZSlcbiAgICAgIC50by5ub3QuaGF2ZS5zYW1lLm1lbWJlcnMoc2V0Mik7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5zYW1lRGVlcE1lbWJlcnMoc2V0MSwgc2V0MiwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHNldDFgIGFuZCBgc2V0MmAgaGF2ZSB0aGUgc2FtZSBtZW1iZXJzIGluIGFueSBvcmRlci4gVXNlcyBhXG4gICAqIGRlZXAgZXF1YWxpdHkgY2hlY2suXG4gICAqXG4gICAqICAgICBhc3NlcnQuc2FtZURlZXBNZW1iZXJzKFsgeyBhOiAxIH0sIHsgYjogMiB9LCB7IGM6IDMgfSBdLCBbeyBiOiAyIH0sIHsgYTogMSB9LCB7IGM6IDMgfV0sICdzYW1lIGRlZXAgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBzYW1lRGVlcE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0MVxuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5zYW1lRGVlcE1lbWJlcnMgPSBmdW5jdGlvbiAoc2V0MSwgc2V0MiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5zYW1lRGVlcE1lbWJlcnMsIHRydWUpXG4gICAgICAudG8uaGF2ZS5zYW1lLmRlZXAubWVtYmVycyhzZXQyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLm5vdFNhbWVEZWVwTWVtYmVycyhzZXQxLCBzZXQyLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgc2V0MWAgYW5kIGBzZXQyYCBkb24ndCBoYXZlIHRoZSBzYW1lIG1lbWJlcnMgaW4gYW55IG9yZGVyLlxuICAgKiBVc2VzIGEgZGVlcCBlcXVhbGl0eSBjaGVjay5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RTYW1lRGVlcE1lbWJlcnMoWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgYzogMyB9IF0sIFt7IGI6IDIgfSwgeyBhOiAxIH0sIHsgZjogNSB9XSwgJ25vdCBzYW1lIGRlZXAgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBub3RTYW1lRGVlcE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0MVxuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RTYW1lRGVlcE1lbWJlcnMgPSBmdW5jdGlvbiAoc2V0MSwgc2V0MiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5ub3RTYW1lRGVlcE1lbWJlcnMsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUuc2FtZS5kZWVwLm1lbWJlcnMoc2V0Mik7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5zYW1lT3JkZXJlZE1lbWJlcnMoc2V0MSwgc2V0MiwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHNldDFgIGFuZCBgc2V0MmAgaGF2ZSB0aGUgc2FtZSBtZW1iZXJzIGluIHRoZSBzYW1lIG9yZGVyLlxuICAgKiBVc2VzIGEgc3RyaWN0IGVxdWFsaXR5IGNoZWNrICg9PT0pLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LnNhbWVPcmRlcmVkTWVtYmVycyhbIDEsIDIsIDMgXSwgWyAxLCAyLCAzIF0sICdzYW1lIG9yZGVyZWQgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBzYW1lT3JkZXJlZE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0MVxuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5zYW1lT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbiAoc2V0MSwgc2V0MiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5zYW1lT3JkZXJlZE1lbWJlcnMsIHRydWUpXG4gICAgICAudG8uaGF2ZS5zYW1lLm9yZGVyZWQubWVtYmVycyhzZXQyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLm5vdFNhbWVPcmRlcmVkTWVtYmVycyhzZXQxLCBzZXQyLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgc2V0MWAgYW5kIGBzZXQyYCBkb24ndCBoYXZlIHRoZSBzYW1lIG1lbWJlcnMgaW4gdGhlIHNhbWVcbiAgICogb3JkZXIuIFVzZXMgYSBzdHJpY3QgZXF1YWxpdHkgY2hlY2sgKD09PSkuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90U2FtZU9yZGVyZWRNZW1iZXJzKFsgMSwgMiwgMyBdLCBbIDIsIDEsIDMgXSwgJ25vdCBzYW1lIG9yZGVyZWQgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBub3RTYW1lT3JkZXJlZE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0MVxuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RTYW1lT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbiAoc2V0MSwgc2V0MiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5ub3RTYW1lT3JkZXJlZE1lbWJlcnMsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUuc2FtZS5vcmRlcmVkLm1lbWJlcnMoc2V0Mik7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5zYW1lRGVlcE9yZGVyZWRNZW1iZXJzKHNldDEsIHNldDIsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBzZXQxYCBhbmQgYHNldDJgIGhhdmUgdGhlIHNhbWUgbWVtYmVycyBpbiB0aGUgc2FtZSBvcmRlci5cbiAgICogVXNlcyBhIGRlZXAgZXF1YWxpdHkgY2hlY2suXG4gICAqXG4gICAqICAgICBhc3NlcnQuc2FtZURlZXBPcmRlcmVkTWVtYmVycyhbIHsgYTogMSB9LCB7IGI6IDIgfSwgeyBjOiAzIH0gXSwgWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgYzogMyB9IF0sICdzYW1lIGRlZXAgb3JkZXJlZCBtZW1iZXJzJyk7XG4gICAqXG4gICAqIEBuYW1lIHNhbWVEZWVwT3JkZXJlZE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0MVxuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5zYW1lRGVlcE9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24gKHNldDEsIHNldDIsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQuc2FtZURlZXBPcmRlcmVkTWVtYmVycywgdHJ1ZSlcbiAgICAgIC50by5oYXZlLnNhbWUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoc2V0Mik7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5ub3RTYW1lRGVlcE9yZGVyZWRNZW1iZXJzKHNldDEsIHNldDIsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBzZXQxYCBhbmQgYHNldDJgIGRvbid0IGhhdmUgdGhlIHNhbWUgbWVtYmVycyBpbiB0aGUgc2FtZVxuICAgKiBvcmRlci4gVXNlcyBhIGRlZXAgZXF1YWxpdHkgY2hlY2suXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90U2FtZURlZXBPcmRlcmVkTWVtYmVycyhbIHsgYTogMSB9LCB7IGI6IDIgfSwgeyBjOiAzIH0gXSwgWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgejogNSB9IF0sICdub3Qgc2FtZSBkZWVwIG9yZGVyZWQgbWVtYmVycycpO1xuICAgKiAgICAgYXNzZXJ0Lm5vdFNhbWVEZWVwT3JkZXJlZE1lbWJlcnMoWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgYzogMyB9IF0sIFsgeyBiOiAyIH0sIHsgYTogMSB9LCB7IGM6IDMgfSBdLCAnbm90IHNhbWUgZGVlcCBvcmRlcmVkIG1lbWJlcnMnKTtcbiAgICpcbiAgICogQG5hbWUgbm90U2FtZURlZXBPcmRlcmVkTWVtYmVyc1xuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQxXG4gICAqIEBwYXJhbSB7QXJyYXl9IHNldDJcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdFNhbWVEZWVwT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbiAoc2V0MSwgc2V0MiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5ub3RTYW1lRGVlcE9yZGVyZWRNZW1iZXJzLCB0cnVlKVxuICAgICAgLnRvLm5vdC5oYXZlLnNhbWUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoc2V0Mik7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5pbmNsdWRlTWVtYmVycyhzdXBlcnNldCwgc3Vic2V0LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgc3Vic2V0YCBpcyBpbmNsdWRlZCBpbiBgc3VwZXJzZXRgIGluIGFueSBvcmRlci4gVXNlcyBhXG4gICAqIHN0cmljdCBlcXVhbGl0eSBjaGVjayAoPT09KS4gRHVwbGljYXRlcyBhcmUgaWdub3JlZC5cbiAgICpcbiAgICogICAgIGFzc2VydC5pbmNsdWRlTWVtYmVycyhbIDEsIDIsIDMgXSwgWyAyLCAxLCAyIF0sICdpbmNsdWRlIG1lbWJlcnMnKTtcbiAgICpcbiAgICogQG5hbWUgaW5jbHVkZU1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc3VwZXJzZXRcbiAgICogQHBhcmFtIHtBcnJheX0gc3Vic2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pbmNsdWRlTWVtYmVycyA9IGZ1bmN0aW9uIChzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5pbmNsdWRlTWVtYmVycywgdHJ1ZSlcbiAgICAgIC50by5pbmNsdWRlLm1lbWJlcnMoc3Vic2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLm5vdEluY2x1ZGVNZW1iZXJzKHN1cGVyc2V0LCBzdWJzZXQsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBzdWJzZXRgIGlzbid0IGluY2x1ZGVkIGluIGBzdXBlcnNldGAgaW4gYW55IG9yZGVyLiBVc2VzIGFcbiAgICogc3RyaWN0IGVxdWFsaXR5IGNoZWNrICg9PT0pLiBEdXBsaWNhdGVzIGFyZSBpZ25vcmVkLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGVNZW1iZXJzKFsgMSwgMiwgMyBdLCBbIDUsIDEgXSwgJ25vdCBpbmNsdWRlIG1lbWJlcnMnKTtcbiAgICpcbiAgICogQG5hbWUgbm90SW5jbHVkZU1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc3VwZXJzZXRcbiAgICogQHBhcmFtIHtBcnJheX0gc3Vic2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RJbmNsdWRlTWVtYmVycyA9IGZ1bmN0aW9uIChzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5ub3RJbmNsdWRlTWVtYmVycywgdHJ1ZSlcbiAgICAgIC50by5ub3QuaW5jbHVkZS5tZW1iZXJzKHN1YnNldCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5pbmNsdWRlRGVlcE1lbWJlcnMoc3VwZXJzZXQsIHN1YnNldCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHN1YnNldGAgaXMgaW5jbHVkZWQgaW4gYHN1cGVyc2V0YCBpbiBhbnkgb3JkZXIuIFVzZXMgYSBkZWVwXG4gICAqIGVxdWFsaXR5IGNoZWNrLiBEdXBsaWNhdGVzIGFyZSBpZ25vcmVkLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmluY2x1ZGVEZWVwTWVtYmVycyhbIHsgYTogMSB9LCB7IGI6IDIgfSwgeyBjOiAzIH0gXSwgWyB7IGI6IDIgfSwgeyBhOiAxIH0sIHsgYjogMiB9IF0sICdpbmNsdWRlIGRlZXAgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBpbmNsdWRlRGVlcE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc3VwZXJzZXRcbiAgICogQHBhcmFtIHtBcnJheX0gc3Vic2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pbmNsdWRlRGVlcE1lbWJlcnMgPSBmdW5jdGlvbiAoc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQuaW5jbHVkZURlZXBNZW1iZXJzLCB0cnVlKVxuICAgICAgLnRvLmluY2x1ZGUuZGVlcC5tZW1iZXJzKHN1YnNldCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5ub3RJbmNsdWRlRGVlcE1lbWJlcnMoc3VwZXJzZXQsIHN1YnNldCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHN1YnNldGAgaXNuJ3QgaW5jbHVkZWQgaW4gYHN1cGVyc2V0YCBpbiBhbnkgb3JkZXIuIFVzZXMgYVxuICAgKiBkZWVwIGVxdWFsaXR5IGNoZWNrLiBEdXBsaWNhdGVzIGFyZSBpZ25vcmVkLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwTWVtYmVycyhbIHsgYTogMSB9LCB7IGI6IDIgfSwgeyBjOiAzIH0gXSwgWyB7IGI6IDIgfSwgeyBmOiA1IH0gXSwgJ25vdCBpbmNsdWRlIGRlZXAgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBub3RJbmNsdWRlRGVlcE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc3VwZXJzZXRcbiAgICogQHBhcmFtIHtBcnJheX0gc3Vic2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RJbmNsdWRlRGVlcE1lbWJlcnMgPSBmdW5jdGlvbiAoc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQubm90SW5jbHVkZURlZXBNZW1iZXJzLCB0cnVlKVxuICAgICAgLnRvLm5vdC5pbmNsdWRlLmRlZXAubWVtYmVycyhzdWJzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAuaW5jbHVkZU9yZGVyZWRNZW1iZXJzKHN1cGVyc2V0LCBzdWJzZXQsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBzdWJzZXRgIGlzIGluY2x1ZGVkIGluIGBzdXBlcnNldGAgaW4gdGhlIHNhbWUgb3JkZXJcbiAgICogYmVnaW5uaW5nIHdpdGggdGhlIGZpcnN0IGVsZW1lbnQgaW4gYHN1cGVyc2V0YC4gVXNlcyBhIHN0cmljdCBlcXVhbGl0eVxuICAgKiBjaGVjayAoPT09KS5cbiAgICpcbiAgICogICAgIGFzc2VydC5pbmNsdWRlT3JkZXJlZE1lbWJlcnMoWyAxLCAyLCAzIF0sIFsgMSwgMiBdLCAnaW5jbHVkZSBvcmRlcmVkIG1lbWJlcnMnKTtcbiAgICpcbiAgICogQG5hbWUgaW5jbHVkZU9yZGVyZWRNZW1iZXJzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHN1cGVyc2V0XG4gICAqIEBwYXJhbSB7QXJyYXl9IHN1YnNldFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaW5jbHVkZU9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24gKHN1cGVyc2V0LCBzdWJzZXQsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0LmluY2x1ZGVPcmRlcmVkTWVtYmVycywgdHJ1ZSlcbiAgICAgIC50by5pbmNsdWRlLm9yZGVyZWQubWVtYmVycyhzdWJzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAubm90SW5jbHVkZU9yZGVyZWRNZW1iZXJzKHN1cGVyc2V0LCBzdWJzZXQsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBzdWJzZXRgIGlzbid0IGluY2x1ZGVkIGluIGBzdXBlcnNldGAgaW4gdGhlIHNhbWUgb3JkZXJcbiAgICogYmVnaW5uaW5nIHdpdGggdGhlIGZpcnN0IGVsZW1lbnQgaW4gYHN1cGVyc2V0YC4gVXNlcyBhIHN0cmljdCBlcXVhbGl0eVxuICAgKiBjaGVjayAoPT09KS5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RJbmNsdWRlT3JkZXJlZE1lbWJlcnMoWyAxLCAyLCAzIF0sIFsgMiwgMSBdLCAnbm90IGluY2x1ZGUgb3JkZXJlZCBtZW1iZXJzJyk7XG4gICAqICAgICBhc3NlcnQubm90SW5jbHVkZU9yZGVyZWRNZW1iZXJzKFsgMSwgMiwgMyBdLCBbIDIsIDMgXSwgJ25vdCBpbmNsdWRlIG9yZGVyZWQgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBub3RJbmNsdWRlT3JkZXJlZE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc3VwZXJzZXRcbiAgICogQHBhcmFtIHtBcnJheX0gc3Vic2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RJbmNsdWRlT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbiAoc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQubm90SW5jbHVkZU9yZGVyZWRNZW1iZXJzLCB0cnVlKVxuICAgICAgLnRvLm5vdC5pbmNsdWRlLm9yZGVyZWQubWVtYmVycyhzdWJzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAuaW5jbHVkZURlZXBPcmRlcmVkTWVtYmVycyhzdXBlcnNldCwgc3Vic2V0LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgc3Vic2V0YCBpcyBpbmNsdWRlZCBpbiBgc3VwZXJzZXRgIGluIHRoZSBzYW1lIG9yZGVyXG4gICAqIGJlZ2lubmluZyB3aXRoIHRoZSBmaXJzdCBlbGVtZW50IGluIGBzdXBlcnNldGAuIFVzZXMgYSBkZWVwIGVxdWFsaXR5XG4gICAqIGNoZWNrLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMoWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgYzogMyB9IF0sIFsgeyBhOiAxIH0sIHsgYjogMiB9IF0sICdpbmNsdWRlIGRlZXAgb3JkZXJlZCBtZW1iZXJzJyk7XG4gICAqXG4gICAqIEBuYW1lIGluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc3VwZXJzZXRcbiAgICogQHBhcmFtIHtBcnJheX0gc3Vic2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pbmNsdWRlRGVlcE9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24gKHN1cGVyc2V0LCBzdWJzZXQsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0LmluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMsIHRydWUpXG4gICAgICAudG8uaW5jbHVkZS5kZWVwLm9yZGVyZWQubWVtYmVycyhzdWJzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAubm90SW5jbHVkZURlZXBPcmRlcmVkTWVtYmVycyhzdXBlcnNldCwgc3Vic2V0LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgc3Vic2V0YCBpc24ndCBpbmNsdWRlZCBpbiBgc3VwZXJzZXRgIGluIHRoZSBzYW1lIG9yZGVyXG4gICAqIGJlZ2lubmluZyB3aXRoIHRoZSBmaXJzdCBlbGVtZW50IGluIGBzdXBlcnNldGAuIFVzZXMgYSBkZWVwIGVxdWFsaXR5XG4gICAqIGNoZWNrLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMoWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgYzogMyB9IF0sIFsgeyBhOiAxIH0sIHsgZjogNSB9IF0sICdub3QgaW5jbHVkZSBkZWVwIG9yZGVyZWQgbWVtYmVycycpO1xuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMoWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgYzogMyB9IF0sIFsgeyBiOiAyIH0sIHsgYTogMSB9IF0sICdub3QgaW5jbHVkZSBkZWVwIG9yZGVyZWQgbWVtYmVycycpO1xuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMoWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgYzogMyB9IF0sIFsgeyBiOiAyIH0sIHsgYzogMyB9IF0sICdub3QgaW5jbHVkZSBkZWVwIG9yZGVyZWQgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBub3RJbmNsdWRlRGVlcE9yZGVyZWRNZW1iZXJzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHN1cGVyc2V0XG4gICAqIEBwYXJhbSB7QXJyYXl9IHN1YnNldFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90SW5jbHVkZURlZXBPcmRlcmVkTWVtYmVycyA9IGZ1bmN0aW9uIChzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5ub3RJbmNsdWRlRGVlcE9yZGVyZWRNZW1iZXJzLCB0cnVlKVxuICAgICAgLnRvLm5vdC5pbmNsdWRlLmRlZXAub3JkZXJlZC5tZW1iZXJzKHN1YnNldCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5vbmVPZihpbkxpc3QsIGxpc3QsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IG5vbi1vYmplY3QsIG5vbi1hcnJheSB2YWx1ZSBgaW5MaXN0YCBhcHBlYXJzIGluIHRoZSBmbGF0IGFycmF5IGBsaXN0YC5cbiAgICpcbiAgICogICAgIGFzc2VydC5vbmVPZigxLCBbIDIsIDEgXSwgJ05vdCBmb3VuZCBpbiBsaXN0Jyk7XG4gICAqXG4gICAqIEBuYW1lIG9uZU9mXG4gICAqIEBwYXJhbSB7Kn0gaW5MaXN0XG4gICAqIEBwYXJhbSB7QXJyYXk8Kj59IGxpc3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm9uZU9mID0gZnVuY3Rpb24gKGluTGlzdCwgbGlzdCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihpbkxpc3QsIG1zZywgYXNzZXJ0Lm9uZU9mLCB0cnVlKS50by5iZS5vbmVPZihsaXN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmNoYW5nZXMoZnVuY3Rpb24sIG9iamVjdCwgcHJvcGVydHksIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gY2hhbmdlcyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eS5cbiAgICpcbiAgICogICAgIHZhciBvYmogPSB7IHZhbDogMTAgfTtcbiAgICogICAgIHZhciBmbiA9IGZ1bmN0aW9uKCkgeyBvYmoudmFsID0gMjIgfTtcbiAgICogICAgIGFzc2VydC5jaGFuZ2VzKGZuLCBvYmosICd2YWwnKTtcbiAgICpcbiAgICogQG5hbWUgY2hhbmdlc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtb2RpZmllciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IG9yIGdldHRlciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmNoYW5nZXMgPSBmdW5jdGlvbiAoZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbXNnID0gcHJvcDtcbiAgICAgIHByb3AgPSBudWxsO1xuICAgIH1cblxuICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmNoYW5nZXMsIHRydWUpLnRvLmNoYW5nZShvYmosIHByb3ApO1xuICB9XG5cbiAgIC8qKlxuICAgKiAjIyMgLmNoYW5nZXNCeShmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVsdGEsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gY2hhbmdlcyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBieSBhbiBhbW91bnQgKGRlbHRhKS5cbiAgICpcbiAgICogICAgIHZhciBvYmogPSB7IHZhbDogMTAgfTtcbiAgICogICAgIHZhciBmbiA9IGZ1bmN0aW9uKCkgeyBvYmoudmFsICs9IDIgfTtcbiAgICogICAgIGFzc2VydC5jaGFuZ2VzQnkoZm4sIG9iaiwgJ3ZhbCcsIDIpO1xuICAgKlxuICAgKiBAbmFtZSBjaGFuZ2VzQnlcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kaWZpZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBvciBnZXR0ZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IG5hbWUgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge051bWJlcn0gY2hhbmdlIGFtb3VudCAoZGVsdGEpXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmNoYW5nZXNCeSA9IGZ1bmN0aW9uIChmbiwgb2JqLCBwcm9wLCBkZWx0YSwgbXNnKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQgJiYgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIHRtcE1zZyA9IGRlbHRhO1xuICAgICAgZGVsdGEgPSBwcm9wO1xuICAgICAgbXNnID0gdG1wTXNnO1xuICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgZGVsdGEgPSBwcm9wO1xuICAgICAgcHJvcCA9IG51bGw7XG4gICAgfVxuXG4gICAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuY2hhbmdlc0J5LCB0cnVlKVxuICAgICAgLnRvLmNoYW5nZShvYmosIHByb3ApLmJ5KGRlbHRhKTtcbiAgfVxuXG4gICAvKipcbiAgICogIyMjIC5kb2VzTm90Q2hhbmdlKGZ1bmN0aW9uLCBvYmplY3QsIHByb3BlcnR5LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBhIGZ1bmN0aW9uIGRvZXMgbm90IGNoYW5nZSB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eS5cbiAgICpcbiAgICogICAgIHZhciBvYmogPSB7IHZhbDogMTAgfTtcbiAgICogICAgIHZhciBmbiA9IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnZm9vJyk7IH07XG4gICAqICAgICBhc3NlcnQuZG9lc05vdENoYW5nZShmbiwgb2JqLCAndmFsJyk7XG4gICAqXG4gICAqIEBuYW1lIGRvZXNOb3RDaGFuZ2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kaWZpZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBvciBnZXR0ZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IG5hbWUgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kb2VzTm90Q2hhbmdlID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIG1zZykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1zZyA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZG9lc05vdENoYW5nZSwgdHJ1ZSlcbiAgICAgIC50by5ub3QuY2hhbmdlKG9iaiwgcHJvcCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5jaGFuZ2VzQnV0Tm90QnkoZnVuY3Rpb24sIG9iamVjdCwgcHJvcGVydHksIGRlbHRhLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBhIGZ1bmN0aW9uIGRvZXMgbm90IGNoYW5nZSB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBvciBvZiBhIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlIGJ5IGFuIGFtb3VudCAoZGVsdGEpXG4gICAqXG4gICAqICAgICB2YXIgb2JqID0geyB2YWw6IDEwIH07XG4gICAqICAgICB2YXIgZm4gPSBmdW5jdGlvbigpIHsgb2JqLnZhbCArPSAxMCB9O1xuICAgKiAgICAgYXNzZXJ0LmNoYW5nZXNCdXROb3RCeShmbiwgb2JqLCAndmFsJywgNSk7XG4gICAqXG4gICAqIEBuYW1lIGNoYW5nZXNCdXROb3RCeVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtb2RpZmllciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IG9yIGdldHRlciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBjaGFuZ2UgYW1vdW50IChkZWx0YSlcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuY2hhbmdlc0J1dE5vdEJ5ID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBtc2cgPSB0bXBNc2c7XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5jaGFuZ2VzQnV0Tm90QnksIHRydWUpXG4gICAgICAudG8uY2hhbmdlKG9iaiwgcHJvcCkuYnV0Lm5vdC5ieShkZWx0YSk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5pbmNyZWFzZXMoZnVuY3Rpb24sIG9iamVjdCwgcHJvcGVydHksIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gaW5jcmVhc2VzIGEgbnVtZXJpYyBvYmplY3QgcHJvcGVydHkuXG4gICAqXG4gICAqICAgICB2YXIgb2JqID0geyB2YWw6IDEwIH07XG4gICAqICAgICB2YXIgZm4gPSBmdW5jdGlvbigpIHsgb2JqLnZhbCA9IDEzIH07XG4gICAqICAgICBhc3NlcnQuaW5jcmVhc2VzKGZuLCBvYmosICd2YWwnKTtcbiAgICpcbiAgICogQG5hbWUgaW5jcmVhc2VzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG1vZGlmaWVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qgb3IgZ2V0dGVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eSBuYW1lIF9vcHRpb25hbF9cbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaW5jcmVhc2VzID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIG1zZykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1zZyA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuaW5jcmVhc2VzLCB0cnVlKVxuICAgICAgLnRvLmluY3JlYXNlKG9iaiwgcHJvcCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5pbmNyZWFzZXNCeShmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVsdGEsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gaW5jcmVhc2VzIGEgbnVtZXJpYyBvYmplY3QgcHJvcGVydHkgb3IgYSBmdW5jdGlvbidzIHJldHVybiB2YWx1ZSBieSBhbiBhbW91bnQgKGRlbHRhKS5cbiAgICpcbiAgICogICAgIHZhciBvYmogPSB7IHZhbDogMTAgfTtcbiAgICogICAgIHZhciBmbiA9IGZ1bmN0aW9uKCkgeyBvYmoudmFsICs9IDEwIH07XG4gICAqICAgICBhc3NlcnQuaW5jcmVhc2VzQnkoZm4sIG9iaiwgJ3ZhbCcsIDEwKTtcbiAgICpcbiAgICogQG5hbWUgaW5jcmVhc2VzQnlcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kaWZpZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBvciBnZXR0ZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IG5hbWUgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge051bWJlcn0gY2hhbmdlIGFtb3VudCAoZGVsdGEpXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmluY3JlYXNlc0J5ID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBtc2cgPSB0bXBNc2c7XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5pbmNyZWFzZXNCeSwgdHJ1ZSlcbiAgICAgIC50by5pbmNyZWFzZShvYmosIHByb3ApLmJ5KGRlbHRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmRvZXNOb3RJbmNyZWFzZShmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYSBmdW5jdGlvbiBkb2VzIG5vdCBpbmNyZWFzZSBhIG51bWVyaWMgb2JqZWN0IHByb3BlcnR5LlxuICAgKlxuICAgKiAgICAgdmFyIG9iaiA9IHsgdmFsOiAxMCB9O1xuICAgKiAgICAgdmFyIGZuID0gZnVuY3Rpb24oKSB7IG9iai52YWwgPSA4IH07XG4gICAqICAgICBhc3NlcnQuZG9lc05vdEluY3JlYXNlKGZuLCBvYmosICd2YWwnKTtcbiAgICpcbiAgICogQG5hbWUgZG9lc05vdEluY3JlYXNlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG1vZGlmaWVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qgb3IgZ2V0dGVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eSBuYW1lIF9vcHRpb25hbF9cbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZG9lc05vdEluY3JlYXNlID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIG1zZykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1zZyA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZG9lc05vdEluY3JlYXNlLCB0cnVlKVxuICAgICAgLnRvLm5vdC5pbmNyZWFzZShvYmosIHByb3ApO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAuaW5jcmVhc2VzQnV0Tm90QnkoZnVuY3Rpb24sIG9iamVjdCwgcHJvcGVydHksIGRlbHRhLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBhIGZ1bmN0aW9uIGRvZXMgbm90IGluY3JlYXNlIGEgbnVtZXJpYyBvYmplY3QgcHJvcGVydHkgb3IgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUgYnkgYW4gYW1vdW50IChkZWx0YSkuXG4gICAqXG4gICAqICAgICB2YXIgb2JqID0geyB2YWw6IDEwIH07XG4gICAqICAgICB2YXIgZm4gPSBmdW5jdGlvbigpIHsgb2JqLnZhbCA9IDE1IH07XG4gICAqICAgICBhc3NlcnQuaW5jcmVhc2VzQnV0Tm90QnkoZm4sIG9iaiwgJ3ZhbCcsIDEwKTtcbiAgICpcbiAgICogQG5hbWUgaW5jcmVhc2VzQnV0Tm90QnlcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kaWZpZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBvciBnZXR0ZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IG5hbWUgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge051bWJlcn0gY2hhbmdlIGFtb3VudCAoZGVsdGEpXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmluY3JlYXNlc0J1dE5vdEJ5ID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBtc2cgPSB0bXBNc2c7XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5pbmNyZWFzZXNCdXROb3RCeSwgdHJ1ZSlcbiAgICAgIC50by5pbmNyZWFzZShvYmosIHByb3ApLmJ1dC5ub3QuYnkoZGVsdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAuZGVjcmVhc2VzKGZ1bmN0aW9uLCBvYmplY3QsIHByb3BlcnR5LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBhIGZ1bmN0aW9uIGRlY3JlYXNlcyBhIG51bWVyaWMgb2JqZWN0IHByb3BlcnR5LlxuICAgKlxuICAgKiAgICAgdmFyIG9iaiA9IHsgdmFsOiAxMCB9O1xuICAgKiAgICAgdmFyIGZuID0gZnVuY3Rpb24oKSB7IG9iai52YWwgPSA1IH07XG4gICAqICAgICBhc3NlcnQuZGVjcmVhc2VzKGZuLCBvYmosICd2YWwnKTtcbiAgICpcbiAgICogQG5hbWUgZGVjcmVhc2VzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG1vZGlmaWVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qgb3IgZ2V0dGVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eSBuYW1lIF9vcHRpb25hbF9cbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZGVjcmVhc2VzID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIG1zZykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1zZyA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZGVjcmVhc2VzLCB0cnVlKVxuICAgICAgLnRvLmRlY3JlYXNlKG9iaiwgcHJvcCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5kZWNyZWFzZXNCeShmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVsdGEsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gZGVjcmVhc2VzIGEgbnVtZXJpYyBvYmplY3QgcHJvcGVydHkgb3IgYSBmdW5jdGlvbidzIHJldHVybiB2YWx1ZSBieSBhbiBhbW91bnQgKGRlbHRhKVxuICAgKlxuICAgKiAgICAgdmFyIG9iaiA9IHsgdmFsOiAxMCB9O1xuICAgKiAgICAgdmFyIGZuID0gZnVuY3Rpb24oKSB7IG9iai52YWwgLT0gNSB9O1xuICAgKiAgICAgYXNzZXJ0LmRlY3JlYXNlc0J5KGZuLCBvYmosICd2YWwnLCA1KTtcbiAgICpcbiAgICogQG5hbWUgZGVjcmVhc2VzQnlcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kaWZpZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBvciBnZXR0ZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IG5hbWUgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge051bWJlcn0gY2hhbmdlIGFtb3VudCAoZGVsdGEpXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmRlY3JlYXNlc0J5ID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBtc2cgPSB0bXBNc2c7XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kZWNyZWFzZXNCeSwgdHJ1ZSlcbiAgICAgIC50by5kZWNyZWFzZShvYmosIHByb3ApLmJ5KGRlbHRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmRvZXNOb3REZWNyZWFzZShmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYSBmdW5jdGlvbiBkb2VzIG5vdCBkZWNyZWFzZXMgYSBudW1lcmljIG9iamVjdCBwcm9wZXJ0eS5cbiAgICpcbiAgICogICAgIHZhciBvYmogPSB7IHZhbDogMTAgfTtcbiAgICogICAgIHZhciBmbiA9IGZ1bmN0aW9uKCkgeyBvYmoudmFsID0gMTUgfTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90RGVjcmVhc2UoZm4sIG9iaiwgJ3ZhbCcpO1xuICAgKlxuICAgKiBAbmFtZSBkb2VzTm90RGVjcmVhc2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kaWZpZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBvciBnZXR0ZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IG5hbWUgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kb2VzTm90RGVjcmVhc2UgPSBmdW5jdGlvbiAoZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbXNnID0gcHJvcDtcbiAgICAgIHByb3AgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kb2VzTm90RGVjcmVhc2UsIHRydWUpXG4gICAgICAudG8ubm90LmRlY3JlYXNlKG9iaiwgcHJvcCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5kb2VzTm90RGVjcmVhc2VCeShmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVsdGEsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gZG9lcyBub3QgZGVjcmVhc2VzIGEgbnVtZXJpYyBvYmplY3QgcHJvcGVydHkgb3IgYSBmdW5jdGlvbidzIHJldHVybiB2YWx1ZSBieSBhbiBhbW91bnQgKGRlbHRhKVxuICAgKlxuICAgKiAgICAgdmFyIG9iaiA9IHsgdmFsOiAxMCB9O1xuICAgKiAgICAgdmFyIGZuID0gZnVuY3Rpb24oKSB7IG9iai52YWwgPSA1IH07XG4gICAqICAgICBhc3NlcnQuZG9lc05vdERlY3JlYXNlQnkoZm4sIG9iaiwgJ3ZhbCcsIDEpO1xuICAgKlxuICAgKiBAbmFtZSBkb2VzTm90RGVjcmVhc2VCeVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtb2RpZmllciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IG9yIGdldHRlciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBjaGFuZ2UgYW1vdW50IChkZWx0YSlcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZG9lc05vdERlY3JlYXNlQnkgPSBmdW5jdGlvbiAoZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciB0bXBNc2cgPSBkZWx0YTtcbiAgICAgIGRlbHRhID0gcHJvcDtcbiAgICAgIG1zZyA9IHRtcE1zZztcbiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIGRlbHRhID0gcHJvcDtcbiAgICAgIHByb3AgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kb2VzTm90RGVjcmVhc2VCeSwgdHJ1ZSlcbiAgICAgIC50by5ub3QuZGVjcmVhc2Uob2JqLCBwcm9wKS5ieShkZWx0YSk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5kZWNyZWFzZXNCdXROb3RCeShmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVsdGEsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gZG9lcyBub3QgZGVjcmVhc2VzIGEgbnVtZXJpYyBvYmplY3QgcHJvcGVydHkgb3IgYSBmdW5jdGlvbidzIHJldHVybiB2YWx1ZSBieSBhbiBhbW91bnQgKGRlbHRhKVxuICAgKlxuICAgKiAgICAgdmFyIG9iaiA9IHsgdmFsOiAxMCB9O1xuICAgKiAgICAgdmFyIGZuID0gZnVuY3Rpb24oKSB7IG9iai52YWwgPSA1IH07XG4gICAqICAgICBhc3NlcnQuZGVjcmVhc2VzQnV0Tm90QnkoZm4sIG9iaiwgJ3ZhbCcsIDEpO1xuICAgKlxuICAgKiBAbmFtZSBkZWNyZWFzZXNCdXROb3RCeVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtb2RpZmllciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IG9yIGdldHRlciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBjaGFuZ2UgYW1vdW50IChkZWx0YSlcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZGVjcmVhc2VzQnV0Tm90QnkgPSBmdW5jdGlvbiAoZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciB0bXBNc2cgPSBkZWx0YTtcbiAgICAgIGRlbHRhID0gcHJvcDtcbiAgICAgIG1zZyA9IHRtcE1zZztcbiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIGRlbHRhID0gcHJvcDtcbiAgICAgIHByb3AgPSBudWxsO1xuICAgIH1cblxuICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRlY3JlYXNlc0J1dE5vdEJ5LCB0cnVlKVxuICAgICAgLnRvLmRlY3JlYXNlKG9iaiwgcHJvcCkuYnV0Lm5vdC5ieShkZWx0YSk7XG4gIH1cblxuICAvKiFcbiAgICogIyMjIC5pZkVycm9yKG9iamVjdClcbiAgICpcbiAgICogQXNzZXJ0cyBpZiB2YWx1ZSBpcyBub3QgYSBmYWxzZSB2YWx1ZSwgYW5kIHRocm93cyBpZiBpdCBpcyBhIHRydWUgdmFsdWUuXG4gICAqIFRoaXMgaXMgYWRkZWQgdG8gYWxsb3cgZm9yIGNoYWkgdG8gYmUgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciBOb2RlJ3NcbiAgICogYXNzZXJ0IGNsYXNzLlxuICAgKlxuICAgKiAgICAgdmFyIGVyciA9IG5ldyBFcnJvcignSSBhbSBhIGN1c3RvbSBlcnJvcicpO1xuICAgKiAgICAgYXNzZXJ0LmlmRXJyb3IoZXJyKTsgLy8gUmV0aHJvd3MgZXJyIVxuICAgKlxuICAgKiBAbmFtZSBpZkVycm9yXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlmRXJyb3IgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgaWYgKHZhbCkge1xuICAgICAgdGhyb3codmFsKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNFeHRlbnNpYmxlKG9iamVjdClcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGlzIGV4dGVuc2libGUgKGNhbiBoYXZlIG5ldyBwcm9wZXJ0aWVzIGFkZGVkIHRvIGl0KS5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc0V4dGVuc2libGUoe30pO1xuICAgKlxuICAgKiBAbmFtZSBpc0V4dGVuc2libGVcbiAgICogQGFsaWFzIGV4dGVuc2libGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0V4dGVuc2libGUgPSBmdW5jdGlvbiAob2JqLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaXNFeHRlbnNpYmxlLCB0cnVlKS50by5iZS5leHRlbnNpYmxlO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90RXh0ZW5zaWJsZShvYmplY3QpXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBpcyBfbm90XyBleHRlbnNpYmxlLlxuICAgKlxuICAgKiAgICAgdmFyIG5vbkV4dGVuc2libGVPYmplY3QgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pO1xuICAgKiAgICAgdmFyIHNlYWxlZE9iamVjdCA9IE9iamVjdC5zZWFsKHt9KTtcbiAgICogICAgIHZhciBmcm96ZW5PYmplY3QgPSBPYmplY3QuZnJlZXplKHt9KTtcbiAgICpcbiAgICogICAgIGFzc2VydC5pc05vdEV4dGVuc2libGUobm9uRXh0ZW5zaWJsZU9iamVjdCk7XG4gICAqICAgICBhc3NlcnQuaXNOb3RFeHRlbnNpYmxlKHNlYWxlZE9iamVjdCk7XG4gICAqICAgICBhc3NlcnQuaXNOb3RFeHRlbnNpYmxlKGZyb3plbk9iamVjdCk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90RXh0ZW5zaWJsZVxuICAgKiBAYWxpYXMgbm90RXh0ZW5zaWJsZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTm90RXh0ZW5zaWJsZSA9IGZ1bmN0aW9uIChvYmosIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc05vdEV4dGVuc2libGUsIHRydWUpLnRvLm5vdC5iZS5leHRlbnNpYmxlO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzU2VhbGVkKG9iamVjdClcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGlzIHNlYWxlZCAoY2Fubm90IGhhdmUgbmV3IHByb3BlcnRpZXMgYWRkZWQgdG8gaXRcbiAgICogYW5kIGl0cyBleGlzdGluZyBwcm9wZXJ0aWVzIGNhbm5vdCBiZSByZW1vdmVkKS5cbiAgICpcbiAgICogICAgIHZhciBzZWFsZWRPYmplY3QgPSBPYmplY3Quc2VhbCh7fSk7XG4gICAqICAgICB2YXIgZnJvemVuT2JqZWN0ID0gT2JqZWN0LnNlYWwoe30pO1xuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzU2VhbGVkKHNlYWxlZE9iamVjdCk7XG4gICAqICAgICBhc3NlcnQuaXNTZWFsZWQoZnJvemVuT2JqZWN0KTtcbiAgICpcbiAgICogQG5hbWUgaXNTZWFsZWRcbiAgICogQGFsaWFzIHNlYWxlZFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzU2VhbGVkID0gZnVuY3Rpb24gKG9iaiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmlzU2VhbGVkLCB0cnVlKS50by5iZS5zZWFsZWQ7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNOb3RTZWFsZWQob2JqZWN0KVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaXMgX25vdF8gc2VhbGVkLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzTm90U2VhbGVkKHt9KTtcbiAgICpcbiAgICogQG5hbWUgaXNOb3RTZWFsZWRcbiAgICogQGFsaWFzIG5vdFNlYWxlZFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTm90U2VhbGVkID0gZnVuY3Rpb24gKG9iaiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmlzTm90U2VhbGVkLCB0cnVlKS50by5ub3QuYmUuc2VhbGVkO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzRnJvemVuKG9iamVjdClcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGlzIGZyb3plbiAoY2Fubm90IGhhdmUgbmV3IHByb3BlcnRpZXMgYWRkZWQgdG8gaXRcbiAgICogYW5kIGl0cyBleGlzdGluZyBwcm9wZXJ0aWVzIGNhbm5vdCBiZSBtb2RpZmllZCkuXG4gICAqXG4gICAqICAgICB2YXIgZnJvemVuT2JqZWN0ID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG4gICAqICAgICBhc3NlcnQuZnJvemVuKGZyb3plbk9iamVjdCk7XG4gICAqXG4gICAqIEBuYW1lIGlzRnJvemVuXG4gICAqIEBhbGlhcyBmcm96ZW5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0Zyb3plbiA9IGZ1bmN0aW9uIChvYmosIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc0Zyb3plbiwgdHJ1ZSkudG8uYmUuZnJvemVuO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90RnJvemVuKG9iamVjdClcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGlzIF9ub3RfIGZyb3plbi5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc05vdEZyb3plbih7fSk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90RnJvemVuXG4gICAqIEBhbGlhcyBub3RGcm96ZW5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc05vdEZyb3plbiA9IGZ1bmN0aW9uIChvYmosIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc05vdEZyb3plbiwgdHJ1ZSkudG8ubm90LmJlLmZyb3plbjtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc0VtcHR5KHRhcmdldClcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgZG9lcyBub3QgY29udGFpbiBhbnkgdmFsdWVzLlxuICAgKiBGb3IgYXJyYXlzIGFuZCBzdHJpbmdzLCBpdCBjaGVja3MgdGhlIGBsZW5ndGhgIHByb3BlcnR5LlxuICAgKiBGb3IgYE1hcGAgYW5kIGBTZXRgIGluc3RhbmNlcywgaXQgY2hlY2tzIHRoZSBgc2l6ZWAgcHJvcGVydHkuXG4gICAqIEZvciBub24tZnVuY3Rpb24gb2JqZWN0cywgaXQgZ2V0cyB0aGUgY291bnQgb2Ygb3duXG4gICAqIGVudW1lcmFibGUgc3RyaW5nIGtleXMuXG4gICAqXG4gICAqICAgICBhc3NlcnQuaXNFbXB0eShbXSk7XG4gICAqICAgICBhc3NlcnQuaXNFbXB0eSgnJyk7XG4gICAqICAgICBhc3NlcnQuaXNFbXB0eShuZXcgTWFwKTtcbiAgICogICAgIGFzc2VydC5pc0VtcHR5KHt9KTtcbiAgICpcbiAgICogQG5hbWUgaXNFbXB0eVxuICAgKiBAYWxpYXMgZW1wdHlcbiAgICogQHBhcmFtIHtPYmplY3R8QXJyYXl8U3RyaW5nfE1hcHxTZXR9IHRhcmdldFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0VtcHR5ID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNFbXB0eSwgdHJ1ZSkudG8uYmUuZW1wdHk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNOb3RFbXB0eSh0YXJnZXQpXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGNvbnRhaW5zIHZhbHVlcy5cbiAgICogRm9yIGFycmF5cyBhbmQgc3RyaW5ncywgaXQgY2hlY2tzIHRoZSBgbGVuZ3RoYCBwcm9wZXJ0eS5cbiAgICogRm9yIGBNYXBgIGFuZCBgU2V0YCBpbnN0YW5jZXMsIGl0IGNoZWNrcyB0aGUgYHNpemVgIHByb3BlcnR5LlxuICAgKiBGb3Igbm9uLWZ1bmN0aW9uIG9iamVjdHMsIGl0IGdldHMgdGhlIGNvdW50IG9mIG93blxuICAgKiBlbnVtZXJhYmxlIHN0cmluZyBrZXlzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzTm90RW1wdHkoWzEsIDJdKTtcbiAgICogICAgIGFzc2VydC5pc05vdEVtcHR5KCczNCcpO1xuICAgKiAgICAgYXNzZXJ0LmlzTm90RW1wdHkobmV3IFNldChbNSwgNl0pKTtcbiAgICogICAgIGFzc2VydC5pc05vdEVtcHR5KHsga2V5OiA3IH0pO1xuICAgKlxuICAgKiBAbmFtZSBpc05vdEVtcHR5XG4gICAqIEBhbGlhcyBub3RFbXB0eVxuICAgKiBAcGFyYW0ge09iamVjdHxBcnJheXxTdHJpbmd8TWFwfFNldH0gdGFyZ2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTm90RW1wdHkgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdEVtcHR5LCB0cnVlKS50by5ub3QuYmUuZW1wdHk7XG4gIH07XG5cbiAgLyohXG4gICAqIEFsaWFzZXMuXG4gICAqL1xuXG4gIChmdW5jdGlvbiBhbGlhcyhuYW1lLCBhcyl7XG4gICAgYXNzZXJ0W2FzXSA9IGFzc2VydFtuYW1lXTtcbiAgICByZXR1cm4gYWxpYXM7XG4gIH0pXG4gICgnaXNPaycsICdvaycpXG4gICgnaXNOb3RPaycsICdub3RPaycpXG4gICgndGhyb3dzJywgJ3Rocm93JylcbiAgKCd0aHJvd3MnLCAnVGhyb3cnKVxuICAoJ2lzRXh0ZW5zaWJsZScsICdleHRlbnNpYmxlJylcbiAgKCdpc05vdEV4dGVuc2libGUnLCAnbm90RXh0ZW5zaWJsZScpXG4gICgnaXNTZWFsZWQnLCAnc2VhbGVkJylcbiAgKCdpc05vdFNlYWxlZCcsICdub3RTZWFsZWQnKVxuICAoJ2lzRnJvemVuJywgJ2Zyb3plbicpXG4gICgnaXNOb3RGcm96ZW4nLCAnbm90RnJvemVuJylcbiAgKCdpc0VtcHR5JywgJ2VtcHR5JylcbiAgKCdpc05vdEVtcHR5JywgJ25vdEVtcHR5Jyk7XG59O1xuIiwgIi8qIVxuICogY2hhaVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbnZhciB1c2VkID0gW107XG5cbi8qIVxuICogQ2hhaSB2ZXJzaW9uXG4gKi9cblxuZXhwb3J0cy52ZXJzaW9uID0gJzQuMy44JztcblxuLyohXG4gKiBBc3NlcnRpb24gRXJyb3JcbiAqL1xuXG5leHBvcnRzLkFzc2VydGlvbkVycm9yID0gcmVxdWlyZSgnYXNzZXJ0aW9uLWVycm9yJyk7XG5cbi8qIVxuICogVXRpbHMgZm9yIHBsdWdpbnMgKG5vdCBleHBvcnRlZClcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vY2hhaS91dGlscycpO1xuXG4vKipcbiAqICMgLnVzZShmdW5jdGlvbilcbiAqXG4gKiBQcm92aWRlcyBhIHdheSB0byBleHRlbmQgdGhlIGludGVybmFscyBvZiBDaGFpLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259XG4gKiBAcmV0dXJucyB7dGhpc30gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMudXNlID0gZnVuY3Rpb24gKGZuKSB7XG4gIGlmICghfnVzZWQuaW5kZXhPZihmbikpIHtcbiAgICBmbihleHBvcnRzLCB1dGlsKTtcbiAgICB1c2VkLnB1c2goZm4pO1xuICB9XG5cbiAgcmV0dXJuIGV4cG9ydHM7XG59O1xuXG4vKiFcbiAqIFV0aWxpdHkgRnVuY3Rpb25zXG4gKi9cblxuZXhwb3J0cy51dGlsID0gdXRpbDtcblxuLyohXG4gKiBDb25maWd1cmF0aW9uXG4gKi9cblxudmFyIGNvbmZpZyA9IHJlcXVpcmUoJy4vY2hhaS9jb25maWcnKTtcbmV4cG9ydHMuY29uZmlnID0gY29uZmlnO1xuXG4vKiFcbiAqIFByaW1hcnkgYEFzc2VydGlvbmAgcHJvdG90eXBlXG4gKi9cblxudmFyIGFzc2VydGlvbiA9IHJlcXVpcmUoJy4vY2hhaS9hc3NlcnRpb24nKTtcbmV4cG9ydHMudXNlKGFzc2VydGlvbik7XG5cbi8qIVxuICogQ29yZSBBc3NlcnRpb25zXG4gKi9cblxudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NoYWkvY29yZS9hc3NlcnRpb25zJyk7XG5leHBvcnRzLnVzZShjb3JlKTtcblxuLyohXG4gKiBFeHBlY3QgaW50ZXJmYWNlXG4gKi9cblxudmFyIGV4cGVjdCA9IHJlcXVpcmUoJy4vY2hhaS9pbnRlcmZhY2UvZXhwZWN0Jyk7XG5leHBvcnRzLnVzZShleHBlY3QpO1xuXG4vKiFcbiAqIFNob3VsZCBpbnRlcmZhY2VcbiAqL1xuXG52YXIgc2hvdWxkID0gcmVxdWlyZSgnLi9jaGFpL2ludGVyZmFjZS9zaG91bGQnKTtcbmV4cG9ydHMudXNlKHNob3VsZCk7XG5cbi8qIVxuICogQXNzZXJ0IGludGVyZmFjZVxuICovXG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCcuL2NoYWkvaW50ZXJmYWNlL2Fzc2VydCcpO1xuZXhwb3J0cy51c2UoYXNzZXJ0KTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2NoYWknKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmV4cG9ydCB7IHR5cGVPZiB9O1xuXG4vKipcbiAqIFRoZSBidWlsdC1pbiB0eXBlb2YgbWV0aG9kIGlzIGtub3duIHRvIGhhdmUgc29tZSBoaXN0b3JpY2FsIHdlYWtuZXNzZXMuIFRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gcHJvdmlkZSBhIGJldHRlciBhbmQgbW9yZSBhY2N1cmF0ZSByZXN1bHQuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL3R5cGVvZi5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgcHJpbWl0aXZlXG4gKi9cbmZ1bmN0aW9uIHR5cGVPZih2YWx1ZSkge1xuXHRsZXQgdHlwZSA9IHt9LnRvU3RyaW5nLmNhbGwodmFsdWUpLm1hdGNoKC9cXHMoW2EtekEtWl0rKS8pWzFdO1xuXHRpZiAoXCJPYmplY3RcIiA9PT0gdHlwZSkge1xuXHRcdGNvbnN0IG5hbWUgPSB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuXHRcdGlmIChuYW1lKSB7XG5cdFx0XHRyZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJlc3VsdHMgPSAvXihjbGFzc3xmdW5jdGlvbilcXHMrKFxcdyspLy5leGVjKFxuXHRcdFx0dmFsdWUuY29uc3RydWN0b3IudG9TdHJpbmcoKSxcblx0XHQpO1xuXHRcdHR5cGUgPSByZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoID4gMiA/IHJlc3VsdHNbMl0gOiBcIlwiO1xuXHR9XG5cblx0cmV0dXJuIHR5cGUudG9Mb3dlckNhc2UoKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdHlwZU9mIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVvZi5tanNcIjtcblxuZXhwb3J0IHsgZXh0ZW5kIH07XG5cbi8qKlxuICogRXh0ZW5kIGNvcGllcyBhbGwgZW51bWVyYWJsZSBvd24gcHJvcGVydGllcyBmcm9tIG9uZSBvclxuICogbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhIHRhcmdldCBvYmplY3QuIEl0IHJldHVybnMgdGhlIG1vZGlmaWVkIHRhcmdldCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHRhcmdldFxuICogQHBhcmFtIHtvYmplY3R9XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEwLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYXJndW1lbnRcbiAqIEB0aHJvd3Mge0Vycm9yfSB0eXBlIG1pc21hdGNoXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYXJndW1lbnRcbiAqL1xuZnVuY3Rpb24gZXh0ZW5kKC4uLmFyZ3MpIHtcblx0bGV0IG87XG5cdGxldCBpO1xuXG5cdGlmICh0eXBlb2YgYXJncyAhPT0gXCJvYmplY3RcIiB8fCBhcmdzWzBdID09PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBhcmd1bWVudCAke0pTT04uc3RyaW5naWZ5KGFyZ3NbMF0pfWApO1xuXHR9XG5cblx0Zm9yIChpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBhID0gYXJnc1tpXTtcblxuXHRcdGlmICghKGlzT2JqZWN0KGEpIHx8IGlzQXJyYXkoYSkpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGFyZ3VtZW50ICR7SlNPTi5zdHJpbmdpZnkoYSl9YCk7XG5cdFx0fVxuXG5cdFx0aWYgKG8gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0byA9IGE7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGsgaW4gYSkge1xuXHRcdFx0Y29uc3QgdiA9IGE/LltrXTtcblxuXHRcdFx0aWYgKHYgPT09IG8/LltrXSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKChpc09iamVjdCh2KSAmJiB0eXBlT2YodikgPT09IFwib2JqZWN0XCIpIHx8IGlzQXJyYXkodikpIHtcblx0XHRcdFx0aWYgKG9ba10gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGlmIChpc0FycmF5KHYpKSB7XG5cdFx0XHRcdFx0XHRvW2tdID0gW107XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9ba10gPSB7fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKHR5cGVPZihvW2tdKSAhPT0gdHlwZU9mKHYpKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0XHRcdGB0eXBlIG1pc21hdGNoOiAke0pTT04uc3RyaW5naWZ5KG9ba10pfSgke3R5cGVPZihcblx0XHRcdFx0XHRcdFx0XHRvW2tdLFxuXHRcdFx0XHRcdFx0XHQpfSkgIT0gJHtKU09OLnN0cmluZ2lmeSh2KX0oJHt0eXBlT2Yodil9KWAsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdG9ba10gPSBleHRlbmQob1trXSwgdik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvW2tdID0gdjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbztcbn1cbiIsICIoZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIGNvbnN0IHJlZk1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgdmFsaWRpdHlNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IGhpZGRlbklucHV0TWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBpbnRlcm5hbHNNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IHZhbGlkYXRpb25NZXNzYWdlTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBmb3Jtc01hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3Qgc2hhZG93SG9zdHNNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IGZvcm1FbGVtZW50c01hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgcmVmVmFsdWVNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IHVwZ3JhZGVNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IHNoYWRvd1Jvb3RNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IHZhbGlkYXRpb25BbmNob3JNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IGRvY3VtZW50RnJhZ21lbnRNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IGNvbm5lY3RlZENhbGxiYWNrTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCB2YWxpZGl0eVVwZ3JhZGVNYXAgPSBuZXcgV2Vha01hcCgpO1xuXG4gICAgY29uc3QgYW9tID0ge1xuICAgICAgICBhcmlhQXRvbWljOiAnYXJpYS1hdG9taWMnLFxuICAgICAgICBhcmlhQXV0b0NvbXBsZXRlOiAnYXJpYS1hdXRvY29tcGxldGUnLFxuICAgICAgICBhcmlhQnVzeTogJ2FyaWEtYnVzeScsXG4gICAgICAgIGFyaWFDaGVja2VkOiAnYXJpYS1jaGVja2VkJyxcbiAgICAgICAgYXJpYUNvbENvdW50OiAnYXJpYS1jb2xjb3VudCcsXG4gICAgICAgIGFyaWFDb2xJbmRleDogJ2FyaWEtY29saW5kZXgnLFxuICAgICAgICBhcmlhQ29sSW5kZXhUZXh0OiAnYXJpYS1jb2xpbmRleHRleHQnLFxuICAgICAgICBhcmlhQ29sU3BhbjogJ2FyaWEtY29sc3BhbicsXG4gICAgICAgIGFyaWFDdXJyZW50OiAnYXJpYS1jdXJyZW50JyxcbiAgICAgICAgYXJpYURpc2FibGVkOiAnYXJpYS1kaXNhYmxlZCcsXG4gICAgICAgIGFyaWFFeHBhbmRlZDogJ2FyaWEtZXhwYW5kZWQnLFxuICAgICAgICBhcmlhSGFzUG9wdXA6ICdhcmlhLWhhc3BvcHVwJyxcbiAgICAgICAgYXJpYUhpZGRlbjogJ2FyaWEtaGlkZGVuJyxcbiAgICAgICAgYXJpYUludmFsaWQ6ICdhcmlhLWludmFsaWQnLFxuICAgICAgICBhcmlhS2V5U2hvcnRjdXRzOiAnYXJpYS1rZXlzaG9ydGN1dHMnLFxuICAgICAgICBhcmlhTGFiZWw6ICdhcmlhLWxhYmVsJyxcbiAgICAgICAgYXJpYUxldmVsOiAnYXJpYS1sZXZlbCcsXG4gICAgICAgIGFyaWFMaXZlOiAnYXJpYS1saXZlJyxcbiAgICAgICAgYXJpYU1vZGFsOiAnYXJpYS1tb2RhbCcsXG4gICAgICAgIGFyaWFNdWx0aUxpbmU6ICdhcmlhLW11bHRpbGluZScsXG4gICAgICAgIGFyaWFNdWx0aVNlbGVjdGFibGU6ICdhcmlhLW11bHRpc2VsZWN0YWJsZScsXG4gICAgICAgIGFyaWFPcmllbnRhdGlvbjogJ2FyaWEtb3JpZW50YXRpb24nLFxuICAgICAgICBhcmlhUGxhY2Vob2xkZXI6ICdhcmlhLXBsYWNlaG9sZGVyJyxcbiAgICAgICAgYXJpYVBvc0luU2V0OiAnYXJpYS1wb3NpbnNldCcsXG4gICAgICAgIGFyaWFQcmVzc2VkOiAnYXJpYS1wcmVzc2VkJyxcbiAgICAgICAgYXJpYVJlYWRPbmx5OiAnYXJpYS1yZWFkb25seScsXG4gICAgICAgIGFyaWFSZWxldmFudDogJ2FyaWEtcmVsZXZhbnQnLFxuICAgICAgICBhcmlhUmVxdWlyZWQ6ICdhcmlhLXJlcXVpcmVkJyxcbiAgICAgICAgYXJpYVJvbGVEZXNjcmlwdGlvbjogJ2FyaWEtcm9sZWRlc2NyaXB0aW9uJyxcbiAgICAgICAgYXJpYVJvd0NvdW50OiAnYXJpYS1yb3djb3VudCcsXG4gICAgICAgIGFyaWFSb3dJbmRleDogJ2FyaWEtcm93aW5kZXgnLFxuICAgICAgICBhcmlhUm93SW5kZXhUZXh0OiAnYXJpYS1yb3dpbmRleHRleHQnLFxuICAgICAgICBhcmlhUm93U3BhbjogJ2FyaWEtcm93c3BhbicsXG4gICAgICAgIGFyaWFTZWxlY3RlZDogJ2FyaWEtc2VsZWN0ZWQnLFxuICAgICAgICBhcmlhU2V0U2l6ZTogJ2FyaWEtc2V0c2l6ZScsXG4gICAgICAgIGFyaWFTb3J0OiAnYXJpYS1zb3J0JyxcbiAgICAgICAgYXJpYVZhbHVlTWF4OiAnYXJpYS12YWx1ZW1heCcsXG4gICAgICAgIGFyaWFWYWx1ZU1pbjogJ2FyaWEtdmFsdWVtaW4nLFxuICAgICAgICBhcmlhVmFsdWVOb3c6ICdhcmlhLXZhbHVlbm93JyxcbiAgICAgICAgYXJpYVZhbHVlVGV4dDogJ2FyaWEtdmFsdWV0ZXh0JyxcbiAgICAgICAgcm9sZTogJ3JvbGUnXG4gICAgfTtcbiAgICBjb25zdCBpbml0QW9tID0gKHJlZiwgaW50ZXJuYWxzKSA9PiB7XG4gICAgICAgIGZvciAobGV0IGtleSBpbiBhb20pIHtcbiAgICAgICAgICAgIGludGVybmFsc1trZXldID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBjbG9zdXJlVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IGFvbVtrZXldO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGludGVybmFscywga2V5LCB7XG4gICAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xvc3VyZVZhbHVlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsb3N1cmVWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVmLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZ3JhZGVNYXAuc2V0KHJlZiwgaW50ZXJuYWxzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGluaXROb2RlKG5vZGUpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gaW50ZXJuYWxzTWFwLmdldChub2RlKTtcbiAgICAgICAgY29uc3QgeyBmb3JtIH0gPSBpbnRlcm5hbHM7XG4gICAgICAgIGluaXRGb3JtKG5vZGUsIGZvcm0sIGludGVybmFscyk7XG4gICAgICAgIGluaXRMYWJlbHMobm9kZSwgaW50ZXJuYWxzLmxhYmVscyk7XG4gICAgfVxuICAgIGNvbnN0IHdhbGtGaWVsZHNldCA9IChub2RlLCBmaXJzdFJlbmRlciA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIobm9kZSwgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQsIHtcbiAgICAgICAgICAgIGFjY2VwdE5vZGUobm9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbHNNYXAuaGFzKG5vZGUpID9cbiAgICAgICAgICAgICAgICAgICAgTm9kZUZpbHRlci5GSUxURVJfQUNDRVBUIDogTm9kZUZpbHRlci5GSUxURVJfU0tJUDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBjdXJyZW50ID0gd2Fsa2VyLm5leHROb2RlKCk7XG4gICAgICAgIGNvbnN0IGlzQ2FsbE5lY2Vzc2FyeSA9ICghZmlyc3RSZW5kZXIgfHwgbm9kZS5kaXNhYmxlZCk7XG4gICAgICAgIHdoaWxlIChjdXJyZW50KSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudC5mb3JtRGlzYWJsZWRDYWxsYmFjayAmJiBpc0NhbGxOZWNlc3NhcnkpIHtcbiAgICAgICAgICAgICAgICBzZXREaXNhYmxlZChjdXJyZW50LCBub2RlLmRpc2FibGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnQgPSB3YWxrZXIubmV4dE5vZGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZGlzYWJsZWRPck5hbWVPYnNlcnZlckNvbmZpZyA9IHsgYXR0cmlidXRlczogdHJ1ZSwgYXR0cmlidXRlRmlsdGVyOiBbJ2Rpc2FibGVkJywgJ25hbWUnXSB9O1xuICAgIGNvbnN0IGRpc2FibGVkT3JOYW1lT2JzZXJ2ZXIgPSBtdXRhdGlvbk9ic2VydmVyRXhpc3RzKCkgPyBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zTGlzdCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9uc0xpc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IG11dGF0aW9uLnRhcmdldDtcbiAgICAgICAgICAgIGlmIChtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lID09PSAnZGlzYWJsZWQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldC5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSkge1xuICAgICAgICAgICAgICAgICAgICBzZXREaXNhYmxlZCh0YXJnZXQsIHRhcmdldC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0YXJnZXQubG9jYWxOYW1lID09PSAnZmllbGRzZXQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhbGtGaWVsZHNldCh0YXJnZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lID09PSAnbmFtZScpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGludGVybmFsc01hcC5nZXQodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZWZWYWx1ZU1hcC5nZXQodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxzLnNldEZvcm1WYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSkgOiB7fTtcbiAgICBmdW5jdGlvbiBvYnNlcnZlckNhbGxiYWNrKG11dGF0aW9uTGlzdCkge1xuICAgICAgICBtdXRhdGlvbkxpc3QuZm9yRWFjaChtdXRhdGlvblJlY29yZCA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGFkZGVkTm9kZXMsIHJlbW92ZWROb2RlcyB9ID0gbXV0YXRpb25SZWNvcmQ7XG4gICAgICAgICAgICBjb25zdCBhZGRlZCA9IEFycmF5LmZyb20oYWRkZWROb2Rlcyk7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkID0gQXJyYXkuZnJvbShyZW1vdmVkTm9kZXMpO1xuICAgICAgICAgICAgYWRkZWQuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxzTWFwLmhhcyhub2RlKSAmJiBub2RlLmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddKSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXROb2RlKG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodXBncmFkZU1hcC5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gdXBncmFkZU1hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFvbUtleXMgPSBPYmplY3Qua2V5cyhhb20pO1xuICAgICAgICAgICAgICAgICAgICBhb21LZXlzXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGtleSA9PiBpbnRlcm5hbHNba2V5XSAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhb21ba2V5XSwgaW50ZXJuYWxzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdXBncmFkZU1hcC5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGl0eVVwZ3JhZGVNYXAuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IHZhbGlkaXR5VXBncmFkZU1hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdpbnRlcm5hbHMtdmFsaWQnLCBpbnRlcm5hbHMudmFsaWRpdHkudmFsaWQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdpbnRlcm5hbHMtaW52YWxpZCcsICghaW50ZXJuYWxzLnZhbGlkaXR5LnZhbGlkKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaW52YWxpZCcsICghaW50ZXJuYWxzLnZhbGlkaXR5LnZhbGlkKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRpdHlVcGdyYWRlTWFwLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWxOYW1lID09PSAnZm9ybScpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybUVsZW1lbnRzID0gZm9ybUVsZW1lbnRzTWFwLmdldChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihub2RlLCBOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0Tm9kZShub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpbnRlcm5hbHNNYXAuaGFzKG5vZGUpICYmIG5vZGUuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10gJiYgIShmb3JtRWxlbWVudHMgJiYgZm9ybUVsZW1lbnRzLmhhcyhub2RlKSkpID8gTm9kZUZpbHRlci5GSUxURVJfQUNDRVBUIDogTm9kZUZpbHRlci5GSUxURVJfU0tJUDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50ID0gd2Fsa2VyLm5leHROb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0Tm9kZShjdXJyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB3YWxrZXIubmV4dE5vZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobm9kZS5sb2NhbE5hbWUgPT09ICdmaWVsZHNldCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRPck5hbWVPYnNlcnZlci5vYnNlcnZlPy4obm9kZSwgZGlzYWJsZWRPck5hbWVPYnNlcnZlckNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIHdhbGtGaWVsZHNldChub2RlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlbW92ZWQuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSBpbnRlcm5hbHNNYXAuZ2V0KG5vZGUpO1xuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHMgJiYgaGlkZGVuSW5wdXRNYXAuZ2V0KGludGVybmFscykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlSGlkZGVuSW5wdXRzKGludGVybmFscyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzaGFkb3dIb3N0c01hcC5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBzaGFkb3dIb3N0c01hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZyYWdtZW50T2JzZXJ2ZXJDYWxsYmFjayhtdXRhdGlvbkxpc3QpIHtcbiAgICAgICAgbXV0YXRpb25MaXN0LmZvckVhY2gobXV0YXRpb24gPT4ge1xuICAgICAgICAgICAgY29uc3QgeyByZW1vdmVkTm9kZXMgfSA9IG11dGF0aW9uO1xuICAgICAgICAgICAgcmVtb3ZlZE5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBkb2N1bWVudEZyYWdtZW50TWFwLmdldChtdXRhdGlvbi50YXJnZXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHNNYXAuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZ3JhZGVJbnRlcm5hbHMobm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgZGVmZXJVcGdyYWRlID0gKGZyYWdtZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnJhZ21lbnRPYnNlcnZlckNhbGxiYWNrKTtcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZT8uKGZyYWdtZW50LCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgICAgICAgZG9jdW1lbnRGcmFnbWVudE1hcC5zZXQoZnJhZ21lbnQsIG9ic2VydmVyKTtcbiAgICB9O1xuICAgIG11dGF0aW9uT2JzZXJ2ZXJFeGlzdHMoKSA/IG5ldyBNdXRhdGlvbk9ic2VydmVyKG9ic2VydmVyQ2FsbGJhY2spIDoge307XG4gICAgY29uc3Qgb2JzZXJ2ZXJDb25maWcgPSB7XG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgc3VidHJlZTogdHJ1ZVxuICAgIH07XG5cbiAgICBjb25zdCBzZXREaXNhYmxlZCA9IChyZWYsIGRpc2FibGVkKSA9PiB7XG4gICAgICAgIHJlZi50b2dnbGVBdHRyaWJ1dGUoJ2ludGVybmFscy1kaXNhYmxlZCcsIGRpc2FibGVkKTtcbiAgICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJywgJ3RydWUnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlZi5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVmLmZvcm1EaXNhYmxlZENhbGxiYWNrKSB7XG4gICAgICAgICAgICByZWYuZm9ybURpc2FibGVkQ2FsbGJhY2suYXBwbHkocmVmLCBbZGlzYWJsZWRdKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlSGlkZGVuSW5wdXRzID0gKGludGVybmFscykgPT4ge1xuICAgICAgICBjb25zdCBoaWRkZW5JbnB1dHMgPSBoaWRkZW5JbnB1dE1hcC5nZXQoaW50ZXJuYWxzKTtcbiAgICAgICAgaGlkZGVuSW5wdXRzLmZvckVhY2goaGlkZGVuSW5wdXQgPT4ge1xuICAgICAgICAgICAgaGlkZGVuSW5wdXQucmVtb3ZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBoaWRkZW5JbnB1dE1hcC5zZXQoaW50ZXJuYWxzLCBbXSk7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVIaWRkZW5JbnB1dCA9IChyZWYsIGludGVybmFscykgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgIGlucHV0LnR5cGUgPSAnaGlkZGVuJztcbiAgICAgICAgaW5wdXQubmFtZSA9IHJlZi5nZXRBdHRyaWJ1dGUoJ25hbWUnKTtcbiAgICAgICAgcmVmLmFmdGVyKGlucHV0KTtcbiAgICAgICAgaGlkZGVuSW5wdXRNYXAuZ2V0KGludGVybmFscykucHVzaChpbnB1dCk7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9O1xuICAgIGNvbnN0IGluaXRSZWYgPSAocmVmLCBpbnRlcm5hbHMpID0+IHtcbiAgICAgICAgaGlkZGVuSW5wdXRNYXAuc2V0KGludGVybmFscywgW10pO1xuICAgICAgICBkaXNhYmxlZE9yTmFtZU9ic2VydmVyLm9ic2VydmU/LihyZWYsIGRpc2FibGVkT3JOYW1lT2JzZXJ2ZXJDb25maWcpO1xuICAgIH07XG4gICAgY29uc3QgaW5pdExhYmVscyA9IChyZWYsIGxhYmVscykgPT4ge1xuICAgICAgICBpZiAobGFiZWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgQXJyYXkuZnJvbShsYWJlbHMpLmZvckVhY2gobGFiZWwgPT4gbGFiZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZWYuY2xpY2suYmluZChyZWYpKSk7XG4gICAgICAgICAgICBsZXQgZmlyc3RMYWJlbElkID0gbGFiZWxzWzBdLmlkO1xuICAgICAgICAgICAgaWYgKCFsYWJlbHNbMF0uaWQpIHtcbiAgICAgICAgICAgICAgICBmaXJzdExhYmVsSWQgPSBgJHtsYWJlbHNbMF0uaHRtbEZvcn1fTGFiZWxgO1xuICAgICAgICAgICAgICAgIGxhYmVsc1swXS5pZCA9IGZpcnN0TGFiZWxJZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIGZpcnN0TGFiZWxJZCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldEZvcm1WYWxpZGl0eSA9IChmb3JtKSA9PiB7XG4gICAgICAgIGNvbnN0IG5hdGl2ZUNvbnRyb2xWYWxpZGl0eSA9IEFycmF5LmZyb20oZm9ybS5lbGVtZW50cylcbiAgICAgICAgICAgIC5maWx0ZXIoKGVsZW1lbnQpID0+ICFlbGVtZW50LnRhZ05hbWUuaW5jbHVkZXMoJy0nKSAmJiBlbGVtZW50LnZhbGlkaXR5KVxuICAgICAgICAgICAgLm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC52YWxpZGl0eS52YWxpZCk7XG4gICAgICAgIGNvbnN0IHBvbHlmaWxsZWRFbGVtZW50cyA9IGZvcm1FbGVtZW50c01hcC5nZXQoZm9ybSkgfHwgW107XG4gICAgICAgIGNvbnN0IHBvbHlmaWxsZWRWYWxpZGl0eSA9IEFycmF5LmZyb20ocG9seWZpbGxlZEVsZW1lbnRzKVxuICAgICAgICAgICAgLmZpbHRlcihjb250cm9sID0+IGNvbnRyb2wuaXNDb25uZWN0ZWQpXG4gICAgICAgICAgICAubWFwKChjb250cm9sKSA9PiBpbnRlcm5hbHNNYXAuZ2V0KGNvbnRyb2wpLnZhbGlkaXR5LnZhbGlkKTtcbiAgICAgICAgY29uc3QgaGFzSW52YWxpZCA9IFsuLi5uYXRpdmVDb250cm9sVmFsaWRpdHksIC4uLnBvbHlmaWxsZWRWYWxpZGl0eV0uaW5jbHVkZXMoZmFsc2UpO1xuICAgICAgICBmb3JtLnRvZ2dsZUF0dHJpYnV0ZSgnaW50ZXJuYWxzLWludmFsaWQnLCBoYXNJbnZhbGlkKTtcbiAgICAgICAgZm9ybS50b2dnbGVBdHRyaWJ1dGUoJ2ludGVybmFscy12YWxpZCcsICFoYXNJbnZhbGlkKTtcbiAgICB9O1xuICAgIGNvbnN0IGZvcm1JbnB1dENhbGxiYWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIHNldEZvcm1WYWxpZGl0eShmaW5kUGFyZW50Rm9ybShldmVudC50YXJnZXQpKTtcbiAgICB9O1xuICAgIGNvbnN0IGZvcm1DaGFuZ2VDYWxsYmFjayA9IChldmVudCkgPT4ge1xuICAgICAgICBzZXRGb3JtVmFsaWRpdHkoZmluZFBhcmVudEZvcm0oZXZlbnQudGFyZ2V0KSk7XG4gICAgfTtcbiAgICBjb25zdCB3aXJlU3VibWl0TG9naWMgPSAoZm9ybSkgPT4ge1xuICAgICAgICBjb25zdCBzdWJtaXRCdXR0b25TZWxlY3RvciA9IFsnYnV0dG9uW3R5cGU9c3VibWl0XScsICdpbnB1dFt0eXBlPXN1Ym1pdF0nLCAnYnV0dG9uOm5vdChbdHlwZV0pJ11cbiAgICAgICAgICAgIC5tYXAoc2VsID0+IGAke3NlbH06bm90KFtkaXNhYmxlZF0pYClcbiAgICAgICAgICAgIC5tYXAoc2VsID0+IGAke3NlbH06bm90KFtmb3JtXSkke2Zvcm0uaWQgPyBgLCR7c2VsfVtmb3JtPScke2Zvcm0uaWR9J11gIDogJyd9YClcbiAgICAgICAgICAgIC5qb2luKCcsJyk7XG4gICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgICAgICBpZiAodGFyZ2V0LmNsb3Nlc3Qoc3VibWl0QnV0dG9uU2VsZWN0b3IpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBmb3JtRWxlbWVudHNNYXAuZ2V0KGZvcm0pO1xuICAgICAgICAgICAgICAgIGlmIChmb3JtLm5vVmFsaWRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudHMuc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IEFycmF5LmZyb20oZWxlbWVudHMpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGl0eUxpc3QgPSBub2Rlc1xuICAgICAgICAgICAgICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChub2RlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGludGVybmFsc01hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxzLnJlcG9ydFZhbGlkaXR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRpdHlMaXN0LmluY2x1ZGVzKGZhbHNlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBmb3JtUmVzZXRDYWxsYmFjayA9IChldmVudCkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IGZvcm1FbGVtZW50c01hcC5nZXQoZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgaWYgKGVsZW1lbnRzICYmIGVsZW1lbnRzLnNpemUpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuY29uc3RydWN0b3IuZm9ybUFzc29jaWF0ZWQgJiYgZWxlbWVudC5mb3JtUmVzZXRDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmZvcm1SZXNldENhbGxiYWNrLmFwcGx5KGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpbml0Rm9ybSA9IChyZWYsIGZvcm0sIGludGVybmFscykgPT4ge1xuICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgY29uc3QgZm9ybUVsZW1lbnRzID0gZm9ybUVsZW1lbnRzTWFwLmdldChmb3JtKTtcbiAgICAgICAgICAgIGlmIChmb3JtRWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBmb3JtRWxlbWVudHMuYWRkKHJlZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbml0U2V0ID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgICAgIGluaXRTZXQuYWRkKHJlZik7XG4gICAgICAgICAgICAgICAgZm9ybUVsZW1lbnRzTWFwLnNldChmb3JtLCBpbml0U2V0KTtcbiAgICAgICAgICAgICAgICB3aXJlU3VibWl0TG9naWMoZm9ybSk7XG4gICAgICAgICAgICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdyZXNldCcsIGZvcm1SZXNldENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZm9ybUlucHV0Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZm9ybUNoYW5nZUNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvcm1zTWFwLnNldChmb3JtLCB7IHJlZiwgaW50ZXJuYWxzIH0pO1xuICAgICAgICAgICAgaWYgKHJlZi5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSAmJiByZWYuZm9ybUFzc29jaWF0ZWRDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWYuZm9ybUFzc29jaWF0ZWRDYWxsYmFjay5hcHBseShyZWYsIFtmb3JtXSk7XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRGb3JtVmFsaWRpdHkoZm9ybSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRQYXJlbnRGb3JtID0gKGVsZW0pID0+IHtcbiAgICAgICAgbGV0IHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcbiAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQudGFnTmFtZSAhPT0gJ0ZPUk0nKSB7XG4gICAgICAgICAgICBwYXJlbnQgPSBmaW5kUGFyZW50Rm9ybShwYXJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfTtcbiAgICBjb25zdCB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQgPSAocmVmLCBtZXNzYWdlLCBFcnJvclR5cGUgPSBET01FeGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKCFyZWYuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvclR5cGUobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG92ZXJyaWRlRm9ybU1ldGhvZCA9IChmb3JtLCByZXR1cm5WYWx1ZSwgbWV0aG9kKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZm9ybUVsZW1lbnRzTWFwLmdldChmb3JtKTtcbiAgICAgICAgaWYgKGVsZW1lbnRzICYmIGVsZW1lbnRzLnNpemUpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gaW50ZXJuYWxzTWFwLmdldChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZCA9IGludGVybmFsc1ttZXRob2RdKCk7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICB9O1xuICAgIGNvbnN0IHVwZ3JhZGVJbnRlcm5hbHMgPSAocmVmKSA9PiB7XG4gICAgICAgIGlmIChyZWYuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10pIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGludGVybmFsc01hcC5nZXQocmVmKTtcbiAgICAgICAgICAgIGNvbnN0IHsgbGFiZWxzLCBmb3JtIH0gPSBpbnRlcm5hbHM7XG4gICAgICAgICAgICBpbml0TGFiZWxzKHJlZiwgbGFiZWxzKTtcbiAgICAgICAgICAgIGluaXRGb3JtKHJlZiwgZm9ybSwgaW50ZXJuYWxzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gbXV0YXRpb25PYnNlcnZlckV4aXN0cygpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJztcbiAgICB9XG5cbiAgICBjbGFzcyBWYWxpZGl0eVN0YXRlIHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICB0aGlzLmJhZElucHV0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUVycm9yID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnBhdHRlcm5NaXNtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yYW5nZU92ZXJmbG93ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJhbmdlVW5kZXJmbG93ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnN0ZXBNaXNtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50b29Mb25nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRvb1Nob3J0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnR5cGVNaXNtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy52YWxpZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnZhbHVlTWlzc2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgT2JqZWN0LnNlYWwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc2V0VmFsaWQgPSAodmFsaWRpdHlPYmplY3QpID0+IHtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QuYmFkSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QuY3VzdG9tRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QucGF0dGVybk1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnJhbmdlT3ZlcmZsb3cgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QucmFuZ2VVbmRlcmZsb3cgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3Quc3RlcE1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnRvb0xvbmcgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QudG9vU2hvcnQgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QudHlwZU1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QudmFsdWVNaXNzaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB2YWxpZGl0eU9iamVjdDtcbiAgICB9O1xuICAgIGNvbnN0IHJlY29uY2lsZVZhbGlkaXR5ID0gKHZhbGlkaXR5T2JqZWN0LCBuZXdTdGF0ZSwgZm9ybSkgPT4ge1xuICAgICAgICB2YWxpZGl0eU9iamVjdC52YWxpZCA9IGlzVmFsaWQobmV3U3RhdGUpO1xuICAgICAgICBPYmplY3Qua2V5cyhuZXdTdGF0ZSkuZm9yRWFjaChrZXkgPT4gdmFsaWRpdHlPYmplY3Rba2V5XSA9IG5ld1N0YXRlW2tleV0pO1xuICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgc2V0Rm9ybVZhbGlkaXR5KGZvcm0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZGl0eU9iamVjdDtcbiAgICB9O1xuICAgIGNvbnN0IGlzVmFsaWQgPSAodmFsaWRpdHlTdGF0ZSkgPT4ge1xuICAgICAgICBsZXQgdmFsaWQgPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBrZXkgaW4gdmFsaWRpdHlTdGF0ZSkge1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gJ3ZhbGlkJyAmJiB2YWxpZGl0eVN0YXRlW2tleV0gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgfTtcblxuICAgIGNvbnN0IGN1c3RvbVN0YXRlTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBmdW5jdGlvbiBhZGRTdGF0ZShyZWYsIHN0YXRlTmFtZSkge1xuICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKHN0YXRlTmFtZSwgdHJ1ZSk7XG4gICAgICAgIGlmIChyZWYucGFydCkge1xuICAgICAgICAgICAgcmVmLnBhcnQuYWRkKHN0YXRlTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xhc3MgQ3VzdG9tU3RhdGVTZXQgZXh0ZW5kcyBTZXQge1xuICAgICAgICBzdGF0aWMgZ2V0IGlzUG9seWZpbGxlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cnVjdG9yKHJlZikge1xuICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgIGlmICghcmVmIHx8ICFyZWYudGFnTmFtZSB8fCByZWYudGFnTmFtZS5pbmRleE9mKCctJykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBjb25zdHJ1Y3RvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VzdG9tU3RhdGVNYXAuc2V0KHRoaXMsIHJlZik7XG4gICAgICAgIH1cbiAgICAgICAgYWRkKHN0YXRlKSB7XG4gICAgICAgICAgICBpZiAoIS9eLS0vLnRlc3Qoc3RhdGUpIHx8IHR5cGVvZiBzdGF0ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGBGYWlsZWQgdG8gZXhlY3V0ZSAnYWRkJyBvbiAnQ3VzdG9tU3RhdGVTZXQnOiBUaGUgc3BlY2lmaWVkIHZhbHVlICR7c3RhdGV9IG11c3Qgc3RhcnQgd2l0aCAnLS0nLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3VwZXIuYWRkKHN0YXRlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IGN1c3RvbVN0YXRlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlTmFtZSA9IGBzdGF0ZSR7c3RhdGV9YDtcbiAgICAgICAgICAgIGlmIChyZWYuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBhZGRTdGF0ZShyZWYsIHN0YXRlTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUocmVmLCBzdGF0ZU5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBjbGVhcigpIHtcbiAgICAgICAgICAgIGZvciAobGV0IFtlbnRyeV0gb2YgdGhpcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZShlbnRyeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdXBlci5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZShzdGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3VwZXIuZGVsZXRlKHN0YXRlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IGN1c3RvbVN0YXRlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGlmIChyZWYuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKGBzdGF0ZSR7c3RhdGV9YCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChyZWYucGFydCkge1xuICAgICAgICAgICAgICAgICAgICByZWYucGFydC5yZW1vdmUoYHN0YXRlJHtzdGF0ZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVmLnRvZ2dsZUF0dHJpYnV0ZShgc3RhdGUke3N0YXRlfWAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZi5wYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYucGFydC5yZW1vdmUoYHN0YXRlJHtzdGF0ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gICAgICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICAgICAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gICAgICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICAgICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cztcbiAgICBjbGFzcyBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbiB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRzKSB7XG4gICAgICAgICAgICBfSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25fZWxlbWVudHMuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cywgZWxlbWVudHMsIFwiZlwiKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGVsZW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgIHRoaXNbaV0gPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnbmFtZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ25hbWUnKV0gPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cywgXCJmXCIpLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBbKF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cyA9IG5ldyBXZWFrTWFwKCksIFN5bWJvbC5pdGVyYXRvcildKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uX2VsZW1lbnRzLCBcImZcIilbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW0oaSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbaV0gPT0gbnVsbCA/IG51bGwgOiB0aGlzW2ldO1xuICAgICAgICB9XG4gICAgICAgIG5hbWVkSXRlbShuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1tuYW1lXSA9PSBudWxsID8gbnVsbCA6IHRoaXNbbmFtZV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXRjaEZvcm1Qcm90b3R5cGUoKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrVmFsaWRpdHkgPSBIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLmNoZWNrVmFsaWRpdHk7XG4gICAgICAgIEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUuY2hlY2tWYWxpZGl0eSA9IGNoZWNrVmFsaWRpdHlPdmVycmlkZTtcbiAgICAgICAgY29uc3QgcmVwb3J0VmFsaWRpdHkgPSBIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLnJlcG9ydFZhbGlkaXR5O1xuICAgICAgICBIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLnJlcG9ydFZhbGlkaXR5ID0gcmVwb3J0VmFsaWRpdHlPdmVycmlkZTtcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tWYWxpZGl0eU92ZXJyaWRlKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IGNoZWNrVmFsaWRpdHkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVGb3JtTWV0aG9kKHRoaXMsIHJldHVyblZhbHVlLCAnY2hlY2tWYWxpZGl0eScpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlcG9ydFZhbGlkaXR5T3ZlcnJpZGUoLi4uYXJncykge1xuICAgICAgICAgICAgbGV0IHJldHVyblZhbHVlID0gcmVwb3J0VmFsaWRpdHkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVGb3JtTWV0aG9kKHRoaXMsIHJldHVyblZhbHVlLCAncmVwb3J0VmFsaWRpdHknKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGdldCB9ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLCAnZWxlbWVudHMnKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUsICdlbGVtZW50cycsIHtcbiAgICAgICAgICAgIGdldCguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBnZXQuY2FsbCh0aGlzLCAuLi5hcmdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2x5ZmlsbGVkRWxlbWVudHMgPSBBcnJheS5mcm9tKGZvcm1FbGVtZW50c01hcC5nZXQodGhpcykgfHwgW10pO1xuICAgICAgICAgICAgICAgIGlmIChwb2x5ZmlsbGVkRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JkZXJlZEVsZW1lbnRzID0gQXJyYXkuZnJvbShlbGVtZW50cykuY29uY2F0KHBvbHlmaWxsZWRFbGVtZW50cykuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiAyID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24ob3JkZXJlZEVsZW1lbnRzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsYXNzIEVsZW1lbnRJbnRlcm5hbHMge1xuICAgICAgICBzdGF0aWMgZ2V0IGlzUG9seWZpbGxlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cnVjdG9yKHJlZikge1xuICAgICAgICAgICAgaWYgKCFyZWYgfHwgIXJlZi50YWdOYW1lIHx8IHJlZi50YWdOYW1lLmluZGV4T2YoJy0nKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIGNvbnN0cnVjdG9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByb290Tm9kZSA9IHJlZi5nZXRSb290Tm9kZSgpO1xuICAgICAgICAgICAgY29uc3QgdmFsaWRpdHkgPSBuZXcgVmFsaWRpdHlTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZXMgPSBuZXcgQ3VzdG9tU3RhdGVTZXQocmVmKTtcbiAgICAgICAgICAgIHJlZk1hcC5zZXQodGhpcywgcmVmKTtcbiAgICAgICAgICAgIHZhbGlkaXR5TWFwLnNldCh0aGlzLCB2YWxpZGl0eSk7XG4gICAgICAgICAgICBpbnRlcm5hbHNNYXAuc2V0KHJlZiwgdGhpcyk7XG4gICAgICAgICAgICBpbml0QW9tKHJlZiwgdGhpcyk7XG4gICAgICAgICAgICBpbml0UmVmKHJlZiwgdGhpcyk7XG4gICAgICAgICAgICBPYmplY3Quc2VhbCh0aGlzKTtcbiAgICAgICAgICAgIGlmIChyb290Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgICAgICAgICAgICBkZWZlclVwZ3JhZGUocm9vdE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNoZWNrVmFsaWRpdHkoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byBleGVjdXRlICdjaGVja1ZhbGlkaXR5JyBvbiAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMud2lsbFZhbGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWxpZGl0eSA9IHZhbGlkaXR5TWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGlmICghdmFsaWRpdHkudmFsaWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGl0eUV2ZW50ID0gbmV3IEV2ZW50KCdpbnZhbGlkJywge1xuICAgICAgICAgICAgICAgICAgICBidWJibGVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmVmLmRpc3BhdGNoRXZlbnQodmFsaWRpdHlFdmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRpdHkudmFsaWQ7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGZvcm0oKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byByZWFkIHRoZSAnZm9ybScgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBsZXQgZm9ybTtcbiAgICAgICAgICAgIGlmIChyZWYuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBmb3JtID0gZmluZFBhcmVudEZvcm0ocmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgICB9XG4gICAgICAgIGdldCBsYWJlbHMoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byByZWFkIHRoZSAnbGFiZWxzJyBwcm9wZXJ0eSBmcm9tICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHRhcmdldCBlbGVtZW50IGlzIG5vdCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5gKTtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gcmVmLmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgICAgIGNvbnN0IGhvc3RSb290ID0gcmVmLmdldFJvb3ROb2RlKCk7XG4gICAgICAgICAgICBpZiAoaG9zdFJvb3QgJiYgaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG9zdFJvb3QucXVlcnlTZWxlY3RvckFsbChgW2Zvcj1cIiR7aWR9XCJdYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmVwb3J0VmFsaWRpdHkoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byBleGVjdXRlICdyZXBvcnRWYWxpZGl0eScgb24gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgaWYgKCF0aGlzLndpbGxWYWxpZGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSB0aGlzLmNoZWNrVmFsaWRpdHkoKTtcbiAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IHZhbGlkYXRpb25BbmNob3JNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgaWYgKGFuY2hvciAmJiAhcmVmLmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihgRmFpbGVkIHRvIGV4ZWN1dGUgJ3JlcG9ydFZhbGlkaXR5JyBvbiAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXZhbGlkICYmIGFuY2hvcikge1xuICAgICAgICAgICAgICAgIHJlZi5mb2N1cygpO1xuICAgICAgICAgICAgICAgIGFuY2hvci5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgICAgICB9XG4gICAgICAgIHNldEZvcm1WYWx1ZSh2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0Rm9ybVZhbHVlJyBvbiAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICByZW1vdmVIaWRkZW5JbnB1dHModGhpcyk7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZi5nZXRBdHRyaWJ1dGUoJ25hbWUnKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoaWRkZW5JbnB1dCA9IGNyZWF0ZUhpZGRlbklucHV0KHJlZiwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbklucHV0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh2YWx1ZSkucmV2ZXJzZSgpLmZvckVhY2goKFtmb3JtRGF0YUtleSwgZm9ybURhdGFWYWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmb3JtRGF0YVZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGlkZGVuSW5wdXQgPSBjcmVhdGVIaWRkZW5JbnB1dChyZWYsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuSW5wdXQubmFtZSA9IGZvcm1EYXRhS2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuSW5wdXQudmFsdWUgPSBmb3JtRGF0YVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWZWYWx1ZU1hcC5zZXQocmVmLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VmFsaWRpdHkodmFsaWRpdHlDaGFuZ2VzLCB2YWxpZGF0aW9uTWVzc2FnZSwgYW5jaG9yKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byBleGVjdXRlICdzZXRWYWxpZGl0eScgb24gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgaWYgKCF2YWxpZGl0eUNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gZXhlY3V0ZSBcXCdzZXRWYWxpZGl0eVxcJyBvbiBcXCdFbGVtZW50SW50ZXJuYWxzXFwnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSAwIHByZXNlbnQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWxpZGF0aW9uQW5jaG9yTWFwLnNldCh0aGlzLCBhbmNob3IpO1xuICAgICAgICAgICAgY29uc3QgdmFsaWRpdHkgPSB2YWxpZGl0eU1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGl0eUNoYW5nZXNPYmogPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHZhbGlkaXR5Q2hhbmdlcykge1xuICAgICAgICAgICAgICAgIHZhbGlkaXR5Q2hhbmdlc09ialtrZXldID0gdmFsaWRpdHlDaGFuZ2VzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXModmFsaWRpdHlDaGFuZ2VzT2JqKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBzZXRWYWxpZCh2YWxpZGl0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjaGVjayA9IHsgLi4udmFsaWRpdHksIC4uLnZhbGlkaXR5Q2hhbmdlc09iaiB9O1xuICAgICAgICAgICAgZGVsZXRlIGNoZWNrLnZhbGlkO1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCB9ID0gcmVjb25jaWxlVmFsaWRpdHkodmFsaWRpdHksIGNoZWNrLCB0aGlzLmZvcm0pO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCAmJiAhdmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGBGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0VmFsaWRpdHknIG9uICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHNlY29uZCBhcmd1bWVudCBzaG91bGQgbm90IGJlIGVtcHR5IGlmIG9uZSBvciBtb3JlIGZsYWdzIGluIHRoZSBmaXJzdCBhcmd1bWVudCBhcmUgdHJ1ZS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbGlkYXRpb25NZXNzYWdlTWFwLnNldCh0aGlzLCB2YWxpZCA/ICcnIDogdmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgICAgICAgICAgaWYgKHJlZi5pc0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgIHJlZi50b2dnbGVBdHRyaWJ1dGUoJ2ludGVybmFscy1pbnZhbGlkJywgIXZhbGlkKTtcbiAgICAgICAgICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKCdpbnRlcm5hbHMtdmFsaWQnLCB2YWxpZCk7XG4gICAgICAgICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1pbnZhbGlkJywgYCR7IXZhbGlkfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsaWRpdHlVcGdyYWRlTWFwLnNldChyZWYsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdldCBzaGFkb3dSb290KCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBzaGFkb3dSb290TWFwLmdldChyZWYpO1xuICAgICAgICAgICAgaWYgKHNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIHJlYWQgdGhlICd2YWxpZGF0aW9uTWVzc2FnZScgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VNYXAuZ2V0KHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGdldCB2YWxpZGl0eSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIHJlYWQgdGhlICd2YWxpZGl0eScgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGl0eSA9IHZhbGlkaXR5TWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGl0eTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgd2lsbFZhbGlkYXRlKCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gcmVhZCB0aGUgJ3dpbGxWYWxpZGF0ZScgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBpZiAoKHJlZi5kaXNhYmxlZCB8fCByZWYuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSB8fFxuICAgICAgICAgICAgICAgIHJlZi5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc0VsZW1lbnRJbnRlcm5hbHNTdXBwb3J0ZWQoKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhd2luZG93LkVsZW1lbnRJbnRlcm5hbHMgfHwgIUhUTUxFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hJbnRlcm5hbHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjbGFzcyBFbGVtZW50SW50ZXJuYWxzRmVhdHVyZURldGVjdGlvbiBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbHMgPSB0aGlzLmF0dGFjaEludGVybmFscygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJhbmRvbU5hbWUgPSBgZWxlbWVudC1pbnRlcm5hbHMtZmVhdHVyZS1kZXRlY3Rpb24tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5yZXBsYWNlKC9bXmEtel0rL2csICcnKX1gO1xuICAgICAgICBjdXN0b21FbGVtZW50cy5kZWZpbmUocmFuZG9tTmFtZSwgRWxlbWVudEludGVybmFsc0ZlYXR1cmVEZXRlY3Rpb24pO1xuICAgICAgICBjb25zdCBmZWF0dXJlRGV0ZWN0aW9uRWxlbWVudCA9IG5ldyBFbGVtZW50SW50ZXJuYWxzRmVhdHVyZURldGVjdGlvbigpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ3NoYWRvd1Jvb3QnLFxuICAgICAgICAgICAgJ2Zvcm0nLFxuICAgICAgICAgICAgJ3dpbGxWYWxpZGF0ZScsXG4gICAgICAgICAgICAndmFsaWRpdHknLFxuICAgICAgICAgICAgJ3ZhbGlkYXRpb25NZXNzYWdlJyxcbiAgICAgICAgICAgICdsYWJlbHMnLFxuICAgICAgICAgICAgJ3NldEZvcm1WYWx1ZScsXG4gICAgICAgICAgICAnc2V0VmFsaWRpdHknLFxuICAgICAgICAgICAgJ2NoZWNrVmFsaWRpdHknLFxuICAgICAgICAgICAgJ3JlcG9ydFZhbGlkaXR5J1xuICAgICAgICBdLmV2ZXJ5KHByb3AgPT4gcHJvcCBpbiBmZWF0dXJlRGV0ZWN0aW9uRWxlbWVudC5pbnRlcm5hbHMpO1xuICAgIH1cbiAgICBpZiAoIWlzRWxlbWVudEludGVybmFsc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgd2luZG93LkVsZW1lbnRJbnRlcm5hbHMgPSBFbGVtZW50SW50ZXJuYWxzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgZGVmaW5lID0gQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LnByb3RvdHlwZS5kZWZpbmU7XG4gICAgICAgICAgICBDdXN0b21FbGVtZW50UmVnaXN0cnkucHJvdG90eXBlLmRlZmluZSA9IGZ1bmN0aW9uIChuYW1lLCBjb25zdHJ1Y3Rvciwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChjb25zdHJ1Y3Rvci5mb3JtQXNzb2NpYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25uZWN0ZWRDYWxsYmFjayA9IGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25uZWN0ZWRDYWxsYmFjaztcbiAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25uZWN0ZWRDYWxsYmFja01hcC5oYXModGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0ZWRDYWxsYmFja01hcC5zZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldERpc2FibGVkKHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0ZWRDYWxsYmFjayAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkQ2FsbGJhY2suYXBwbHkodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGdyYWRlSW50ZXJuYWxzKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZpbmUuY2FsbCh0aGlzLCBuYW1lLCBjb25zdHJ1Y3Rvciwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBIVE1MRWxlbWVudC5wcm90b3R5cGUuYXR0YWNoSW50ZXJuYWxzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy50YWdOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy50YWdOYW1lLmluZGV4T2YoJy0nKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZXhlY3V0ZSAnYXR0YWNoSW50ZXJuYWxzJyBvbiAnSFRNTEVsZW1lbnQnOiBVbmFibGUgdG8gYXR0YWNoIEVsZW1lbnRJbnRlcm5hbHMgdG8gbm9uLWN1c3RvbSBlbGVtZW50cy5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGludGVybmFsc01hcC5oYXModGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihgRE9NRXhjZXB0aW9uOiBGYWlsZWQgdG8gZXhlY3V0ZSAnYXR0YWNoSW50ZXJuYWxzJyBvbiAnSFRNTEVsZW1lbnQnOiBFbGVtZW50SW50ZXJuYWxzIGZvciB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgd2FzIGFscmVhZHkgYXR0YWNoZWQuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRWxlbWVudEludGVybmFscyh0aGlzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgZnVuY3Rpb24gYXR0YWNoU2hhZG93T2JzZXJ2ZXIoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBhdHRhY2hTaGFkb3cuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgc2hhZG93Um9vdE1hcC5zZXQodGhpcywgc2hhZG93Um9vdCk7XG4gICAgICAgICAgICAgICAgaWYgKG11dGF0aW9uT2JzZXJ2ZXJFeGlzdHMoKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG9ic2VydmVyQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LlNoYWR5RE9NKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMsIG9ic2VydmVyQ29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUoc2hhZG93Um9vdCwgb2JzZXJ2ZXJDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0hvc3RzTWFwLnNldCh0aGlzLCBvYnNlcnZlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzaGFkb3dSb290O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXR0YWNoU2hhZG93ID0gRWxlbWVudC5wcm90b3R5cGUuYXR0YWNoU2hhZG93O1xuICAgICAgICAgICAgRWxlbWVudC5wcm90b3R5cGUuYXR0YWNoU2hhZG93ID0gYXR0YWNoU2hhZG93T2JzZXJ2ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG11dGF0aW9uT2JzZXJ2ZXJFeGlzdHMoKSAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBkb2N1bWVudE9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIob2JzZXJ2ZXJDYWxsYmFjayk7XG4gICAgICAgICAgICBkb2N1bWVudE9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBvYnNlcnZlckNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBIVE1MRm9ybUVsZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBwYXRjaEZvcm1Qcm90b3R5cGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgIXdpbmRvdy5DdXN0b21TdGF0ZVNldCkge1xuICAgICAgICAgICAgd2luZG93LkN1c3RvbVN0YXRlU2V0ID0gQ3VzdG9tU3RhdGVTZXQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgIXdpbmRvdy5DdXN0b21TdGF0ZVNldCkge1xuICAgICAgICB3aW5kb3cuQ3VzdG9tU3RhdGVTZXQgPSBDdXN0b21TdGF0ZVNldDtcbiAgICAgICAgY29uc3QgYXR0YWNoSW50ZXJuYWxzID0gSFRNTEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaEludGVybmFscztcbiAgICAgICAgSFRNTEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaEludGVybmFscyA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSBhdHRhY2hJbnRlcm5hbHMuY2FsbCh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIGludGVybmFscy5zdGF0ZXMgPSBuZXcgQ3VzdG9tU3RhdGVTZXQodGhpcyk7XG4gICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxzO1xuICAgICAgICB9O1xuICAgIH1cblxufSkoKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAyMDIzIHNjaHVrYWkgR21iSFxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuLyoqXG4gKiBQcm9wZXJ0eS1LZXlzXG4gKiBAYXV0aG9yIHNjaHVrYWkgR21iSFxuICovXG5cbmV4cG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnRlcm5hbFN0YXRlU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQG1lbWJlck9mIE1vbnN0ZXJcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBpbnRlcm5hbFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2ludGVybmFsXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQG1lbWJlck9mIE1vbnN0ZXJcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBpbnRlcm5hbFN0YXRlU3ltYm9sID0gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvc3RhdGVcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGluc3RhbmNlU3ltYm9sID0gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvaW5zdGFuY2VcIik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEJhc2UgfTtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBiYXNlIGNsYXNzIGZyb20gd2hpY2ggdGhlIG1vc3QgY2xhc3NlcyBhcmUgZGVyaXZlZC5cbiAqXG4gKiBUaGlzIGNsYXNzIGhhcyBiZXNpZGVzIGEgYHRvU3RyaW5nYCB3aGljaCByZXR1cm5zIHRoZSBqc29uIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3RcbiAqIGFsc28gYSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzLlxuICpcbiAqIFRoZXJlZm9yIHRoZSBjbGFzcyBoYXMgYSBzdGF0aWMgbWV0aG9kIGAgW1N5bWJvbC5oYXNJbnN0YW5jZV0odGhhdClgIHdoaWNoIHJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0XG4gKiBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MuXG4gKlxuICogQHNlZSBbaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3ltYm9sL2hhc0luc3RhbmNlXShkZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3ltYm9sL2hhc0luc3RhbmNlKVxuICpcbiAqIERlcml2ZWQgY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50IGEgc3RhdGljIGdldHRlciBgaW5zdGFuY2VTeW1ib2xgIHdoaWNoIHJldHVybnMgYSB1bmlxdWUgc3ltYm9sLlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcbiAqICAgIHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9iYXNlXCIpO1xuICogfVxuICogYGBgXG4gKlxuICogVGhlIGNsYXNzIHdhcyBmb3JtZXJseSBjYWxsZWQgT2JqZWN0LlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuY2xhc3MgQmFzZSBleHRlbmRzIE9iamVjdCB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvYmFzZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHBhcmFtIHRoYXRcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdKHRoYXQpIHtcblx0XHRpZiAoXG5cdFx0XHR0aGF0ID09PSB1bmRlZmluZWQgfHxcblx0XHRcdHRoYXQgPT09IG51bGwgfHxcblx0XHRcdCh0eXBlb2YgdGhhdCAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdGhhdCAhPT0gXCJmdW5jdGlvblwiKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRoYXRDbGFzcyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGF0KTtcblx0XHRpZiAoXG5cdFx0XHR0aGF0Q2xhc3MgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0dGhhdENsYXNzID09PSBudWxsIHx8XG5cdFx0XHQodHlwZW9mIHRoYXRDbGFzcyAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdGhhdENsYXNzICE9PSBcImZ1bmN0aW9uXCIpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKGNoZWNrSW5zdGFuY2VTeW1ib2wuYXBwbHkodGhpcywgW3RoYXRDbGFzc10pID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyB0aGlzIGNhbGwgdGhlIHN0YXRpYyBtZXRob2Qgb2YgdGhlIHN1cGVyIGNsYXNzLCBpZiB0aGVyZSBpcyBvbmVcblx0XHRyZXR1cm4gc3VwZXJbU3ltYm9sLmhhc0luc3RhbmNlXSh0aGF0KTtcblx0fVxufVxuXG4vKipcbiAqIHRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBjbGFzcyBoYXMgYSBzdGF0aWMgZ2V0dGVyIGBpbnN0YW5jZVN5bWJvbGAgYW5kIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIGdldHRlciBpcyBlcXVhbCB0byB0aGVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG9ialxuICogQHJldHVybnMge2Jvb2xlYW58YW55fGJvb2xlYW59XG4gKiBAc2luY2UgMi4xLjBcbiAqL1xuZnVuY3Rpb24gY2hlY2tJbnN0YW5jZVN5bWJvbChvYmopIHtcblx0aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoaW5zdGFuY2VTeW1ib2wpID09PSBmYWxzZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGNvbnN0IHByb3RvID0gb2JqPy5jb25zdHJ1Y3Rvcjtcblx0aWYgKFxuXHRcdHByb3RvID09PSB1bmRlZmluZWQgfHxcblx0XHRwcm90byA9PT0gbnVsbCB8fFxuXHRcdCh0eXBlb2YgcHJvdG8gIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHByb3RvICE9PSBcImZ1bmN0aW9uXCIpXG5cdCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmIChwcm90by5oYXNPd25Qcm9wZXJ0eShpbnN0YW5jZVN5bWJvbCkgIT09IHRydWUpIHtcblx0XHRyZXR1cm4gY2hlY2tJbnN0YW5jZVN5bWJvbC5hcHBseSh0aGlzLCBbb2JqLl9fcHJvdG9fX10pO1xuXHR9XG5cblx0Y29uc3Qgc3ltYm9sID0gcHJvdG9baW5zdGFuY2VTeW1ib2xdO1xuXHRpZiAoc3ltYm9sID09PSB1bmRlZmluZWQpIHtcblx0XHRpZiAob2JqLl9fcHJvdG9fXykge1xuXHRcdFx0cmV0dXJuIGNoZWNrSW5zdGFuY2VTeW1ib2wob2JqLl9fcHJvdG9fXyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpZiAoc3ltYm9sID09PSB0aGlzW2luc3RhbmNlU3ltYm9sXSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGNoZWNrSW5zdGFuY2VTeW1ib2wuYXBwbHkodGhpcywgW29iai5fX3Byb3RvX19dKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGlzSXRlcmFibGUsIGlzU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVGdW5jdGlvbiwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcblxuZXhwb3J0IHsgVG9rZW5MaXN0IH07XG5cbi8qKlxuICogQSBgVG9rZW5MaXN0YCBhbGxvd3MgeW91IHRvIG1hbmFnZSB0b2tlbnMgKGluZGl2aWR1YWwgY2hhcmFjdGVyIHN0cmluZ3Mgc3VjaCBhcyBjc3MgY2xhc3NlcyBpbiBhbiBhdHRyaWJ1dGUgc3RyaW5nKS5cbiAqXG4gKiBUaGUgYFRva2VuTGlzdGAgb2ZmZXJzIHZhcmlvdXMgZnVuY3Rpb25zIHRvIG1hbmlwdWxhdGUgdmFsdWVzLiBGb3IgZXhhbXBsZSwgeW91IGNhbiBhZGQsIHJlbW92ZSBvciByZXBsYWNlIGEgY2xhc3MgaW4gYSBDU1MgbGlzdC5cbiAqXG4gKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIFtpdGVyYXRpb24gcHJvdG9jb2xdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0l0ZXJhdGlvbl9wcm90b2NvbHMpLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy90b2tlbmxpc3QtMS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuY2xhc3MgVG9rZW5MaXN0IGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge2FycmF5fHN0cmluZ3xpdGVyYXRhYmxlfSBpbml0XG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihpbml0KSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnRva2VucyA9IG5ldyBTZXQoKTtcblxuXHRcdGlmICh0eXBlb2YgaW5pdCAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0dGhpcy5hZGQoaW5pdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEl0ZXJhdG9yIHByb3RvY29sXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtTeW1ib2wuaXRlcmF0b3J9XG5cdCAqL1xuXHRnZXRJdGVyYXRvcigpIHtcblx0XHRyZXR1cm4gdGhpc1tTeW1ib2wuaXRlcmF0b3JdKCk7XG5cdH1cblxuXHQvKipcblx0ICogSXRlcmF0b3Jcblx0ICpcblx0ICogQHJldHVybnMge3tuZXh0OiAoKGZ1bmN0aW9uKCk6ICh7dmFsdWU6ICosIGRvbmU6IGJvb2xlYW59KSl8Kil9fVxuXHQgKi9cblx0W1N5bWJvbC5pdGVyYXRvcl0oKSB7XG5cdFx0Ly8gVXNlIGEgbmV3IGluZGV4IGZvciBlYWNoIGl0ZXJhdG9yLiBUaGlzIG1ha2VzIG11bHRpcGxlXG5cdFx0Ly8gaXRlcmF0aW9ucyBvdmVyIHRoZSBpdGVyYWJsZSBzYWZlIGZvciBub24tdHJpdmlhbCBjYXNlcyxcblx0XHQvLyBzdWNoIGFzIHVzZSBvZiBicmVhayBvciBuZXN0ZWQgbG9vcGluZyBvdmVyIHRoZSBzYW1lIGl0ZXJhYmxlLlxuXHRcdGxldCBpbmRleCA9IDA7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcygpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG5leHQ6ICgpID0+IHtcblx0XHRcdFx0aWYgKGluZGV4IDwgZW50cmllcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRyZXR1cm4geyB2YWx1ZTogZW50cmllcz8uW2luZGV4KytdLCBkb25lOiBmYWxzZSB9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiB7IGRvbmU6IHRydWUgfTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiBpdCBjb250YWlucyB0b2tlbiwgb3RoZXJ3aXNlIGZhbHNlXG5cdCAqXG5cdCAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy90b2tlbmxpc3QtMi5tanNcblx0ICogQHBhcmFtIHthcnJheXxzdHJpbmd8aXRlcmF0YWJsZX0gdmFsdWVcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRjb250YWlucyh2YWx1ZSkge1xuXHRcdGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHRcdHZhbHVlID0gdmFsdWUudHJpbSgpO1xuXHRcdFx0bGV0IGNvdW50ZXIgPSAwO1xuXHRcdFx0dmFsdWUuc3BsaXQoXCIgXCIpLmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLnRva2Vucy5oYXModG9rZW4udHJpbSgpKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblx0XHRcdFx0Y291bnRlcisrO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gY291bnRlciA+IDAgPyB0cnVlIDogZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKGlzSXRlcmFibGUodmFsdWUpKSB7XG5cdFx0XHRsZXQgY291bnRlciA9IDA7XG5cdFx0XHRmb3IgKGNvbnN0IHRva2VuIG9mIHZhbHVlKSB7XG5cdFx0XHRcdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0XHRcdFx0aWYgKHRoaXMudG9rZW5zLmhhcyh0b2tlbi50cmltKCkpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRjb3VudGVyKys7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY291bnRlciA+IDAgPyB0cnVlIDogZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCB0b2tlbnNcblx0ICpcblx0ICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL3Rva2VubGlzdC0zLm1qc1xuXHQgKiBAcGFyYW0ge2FycmF5fHN0cmluZ3xpdGVyYXRhYmxlfSB2YWx1ZVxuXHQgKiBAcmV0dXJucyB7VG9rZW5MaXN0fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHZhbHVlXG5cdCAqL1xuXHRhZGQodmFsdWUpIHtcblx0XHRpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG5cdFx0XHR2YWx1ZS5zcGxpdChcIiBcIikuZm9yRWFjaCgodG9rZW4pID0+IHtcblx0XHRcdFx0dGhpcy50b2tlbnMuYWRkKHRva2VuLnRyaW0oKSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKGlzSXRlcmFibGUodmFsdWUpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHRva2VuIG9mIHZhbHVlKSB7XG5cdFx0XHRcdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0XHRcdFx0dGhpcy50b2tlbnMuYWRkKHRva2VuLnRyaW0oKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ1bnN1cHBvcnRlZCB2YWx1ZVwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZW1vdmUgYWxsIHRva2Vuc1xuXHQgKlxuXHQgKiBAcmV0dXJucyB7VG9rZW5MaXN0fVxuXHQgKi9cblx0Y2xlYXIoKSB7XG5cdFx0dGhpcy50b2tlbnMuY2xlYXIoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRva2VuXG5cdCAqXG5cdCAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy90b2tlbmxpc3QtNC5tanNcblx0ICogQHBhcmFtIHthcnJheXxzdHJpbmd8aXRlcmF0YWJsZX0gdmFsdWVcblx0ICogQHJldHVybnMge1Rva2VuTGlzdH1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB2YWx1ZVxuXHQgKi9cblx0cmVtb3ZlKHZhbHVlKSB7XG5cdFx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0dmFsdWUuc3BsaXQoXCIgXCIpLmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRcdHRoaXMudG9rZW5zLmRlbGV0ZSh0b2tlbi50cmltKCkpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChpc0l0ZXJhYmxlKHZhbHVlKSkge1xuXHRcdFx0Zm9yIChjb25zdCB0b2tlbiBvZiB2YWx1ZSkge1xuXHRcdFx0XHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdFx0XHRcdHRoaXMudG9rZW5zLmRlbGV0ZSh0b2tlbi50cmltKCkpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidW5zdXBwb3J0ZWQgdmFsdWVcIiwgXCJ0eXBlcy90b2tlbmxpc3QubWpzXCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHRoaXMgbWV0aG9kIHJlcGxhY2VzIGEgdG9rZW4gd2l0aCBhIG5ldyB0b2tlbi5cblx0ICpcblx0ICogaWYgdGhlIHBhc3NlZCB0b2tlbiBleGlzdHMsIGl0IGlzIHJlcGxhY2VkIHdpdGggbmV3VG9rZW4gYW5kIFRva2VuTGlzdCBpcyByZXR1cm5lZC5cblx0ICogaWYgdGhlIHRva2VuIGRvZXMgbm90IGV4aXN0LCBuZXdUb2tlbiBpcyBub3Qgc2V0IGFuZCBUb2tlbkxpc3QgaXMgcmV0dXJuZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmV3VG9rZW5cblx0ICogQHJldHVybnMge1Rva2VuTGlzdH1cblx0ICovXG5cdHJlcGxhY2UodG9rZW4sIG5ld1Rva2VuKSB7XG5cdFx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHRcdHZhbGlkYXRlU3RyaW5nKG5ld1Rva2VuKTtcblx0XHRpZiAoIXRoaXMuY29udGFpbnModG9rZW4pKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRjb25zdCBhID0gQXJyYXkuZnJvbSh0aGlzLnRva2Vucyk7XG5cdFx0Y29uc3QgaSA9IGEuaW5kZXhPZih0b2tlbik7XG5cdFx0aWYgKGkgPT09IC0xKSByZXR1cm4gdGhpcztcblxuXHRcdGEuc3BsaWNlKGksIDEsIG5ld1Rva2VuKTtcblx0XHR0aGlzLnRva2VucyA9IG5ldyBTZXQoKTtcblx0XHR0aGlzLmFkZChhKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgdG9rZW4gZnJvbSBzdHJpbmcuIElmIHRva2VuIGRvZXNuJ3QgZXhpc3QgaXQncyBhZGRlZC5cblx0ICpcblx0ICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL3Rva2VubGlzdC01Lm1qc1xuXHQgKiBAcGFyYW0ge2FycmF5fHN0cmluZ3xpdGVyYXRhYmxlfSB2YWx1ZVxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB2YWx1ZVxuXHQgKi9cblx0dG9nZ2xlKHZhbHVlKSB7XG5cdFx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0dmFsdWUuc3BsaXQoXCIgXCIpLmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRcdHRvZ2dsZVZhbHVlLmNhbGwodGhpcywgdG9rZW4pO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChpc0l0ZXJhYmxlKHZhbHVlKSkge1xuXHRcdFx0Zm9yIChjb25zdCB0b2tlbiBvZiB2YWx1ZSkge1xuXHRcdFx0XHR0b2dnbGVWYWx1ZS5jYWxsKHRoaXMsIHRva2VuKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInVuc3VwcG9ydGVkIHZhbHVlXCIsIFwidHlwZXMvdG9rZW5saXN0Lm1qc1wiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZXR1cm5zIGFuIGFycmF5IHdpdGggYWxsIHRva2Vuc1xuXHQgKlxuXHQgKiBAcmV0dXJucyB7YXJyYXl9XG5cdCAqL1xuXHRlbnRyaWVzKCkge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHRoaXMudG9rZW5zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBleGVjdXRlcyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gd2l0aCBlYWNoIHZhbHVlIG9mIHRoZSBzZXRcblx0ICpcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHJldHVybnMge1Rva2VuTGlzdH1cblx0ICovXG5cdGZvckVhY2goY2FsbGJhY2spIHtcblx0XHR2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKTtcblx0XHR0aGlzLnRva2Vucy5mb3JFYWNoKGNhbGxiYWNrKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZXR1cm5zIHRoZSBpbmRpdmlkdWFsIHRva2VucyBzZXBhcmF0ZWQgYnkgYSBibGFuayBjaGFyYWN0ZXJcblx0ICpcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzLmVudHJpZXMoKS5qb2luKFwiIFwiKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdG9rZW5cbiAqIEByZXR1cm5zIHt0b2dnbGVWYWx1ZX1cbiAqIEB0aHJvd3Mge0Vycm9yfSBtdXN0IGJlIGNhbGxlZCB3aXRoIFRva2VuTGlzdC5jYWxsXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZVZhbHVlKHRva2VuKSB7XG5cdGlmICghKHRoaXMgaW5zdGFuY2VvZiBUb2tlbkxpc3QpKVxuXHRcdHRocm93IEVycm9yKFwibXVzdCBiZSBjYWxsZWQgd2l0aCBUb2tlbkxpc3QuY2FsbFwiKTtcblx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHR0b2tlbiA9IHRva2VuLnRyaW0oKTtcblx0aWYgKHRoaXMuY29udGFpbnModG9rZW4pKSB7XG5cdFx0dGhpcy5yZW1vdmUodG9rZW4pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdHRoaXMuYWRkKHRva2VuKTtcblx0cmV0dXJuIHRoaXM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5leHBvcnQge1xuXHRERUZBVUxUX1RIRU1FLFxuXHRBVFRSSUJVVEVfUFJFRklYLFxuXHRBVFRSSUJVVEVfT1BUSU9OUyxcblx0QVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IsXG5cdEFUVFJJQlVURV9USEVNRV9QUkVGSVgsXG5cdEFUVFJJQlVURV9USEVNRV9OQU1FLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9TRUxFQ1RfVEhJUyxcblx0QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSxcblx0QVRUUklCVVRFX1VQREFURVJfSU5TRVJULFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9SRU1PVkUsXG5cdEFUVFJJQlVURV9VUERBVEVSX0JJTkQsXG5cdEFUVFJJQlVURV9URU1QTEFURV9QUkVGSVgsXG5cdEFUVFJJQlVURV9ST0xFLFxuXHRBVFRSSUJVVEVfRElTQUJMRUQsXG5cdEFUVFJJQlVURV9WQUxVRSxcblx0QVRUUklCVVRFX09CSkVDVExJTkssXG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFRBR19TQ1JJUFQsXG5cdFRBR19TVFlMRSxcblx0VEFHX0xJTkssXG5cdEFUVFJJQlVURV9JRCxcblx0QVRUUklCVVRFX0NMQVNTLFxuXHRBVFRSSUJVVEVfVElUTEUsXG5cdEFUVFJJQlVURV9TUkMsXG5cdEFUVFJJQlVURV9IUkVGLFxuXHRBVFRSSUJVVEVfVFlQRSxcblx0QVRUUklCVVRFX05PTkNFLFxuXHRBVFRSSUJVVEVfVFJBTlNMQVRFLFxuXHRBVFRSSUJVVEVfVEFCSU5ERVgsXG5cdEFUVFJJQlVURV9TUEVMTENIRUNLLFxuXHRBVFRSSUJVVEVfU0xPVCxcblx0QVRUUklCVVRFX1BBUlQsXG5cdEFUVFJJQlVURV9MQU5HLFxuXHRBVFRSSUJVVEVfSVRFTVRZUEUsXG5cdEFUVFJJQlVURV9JVEVNU0NPUEUsXG5cdEFUVFJJQlVURV9JVEVNUkVGLFxuXHRBVFRSSUJVVEVfSVRFTUlELFxuXHRBVFRSSUJVVEVfSVRFTVBST1AsXG5cdEFUVFJJQlVURV9JUyxcblx0QVRUUklCVVRFX0lOUFVUTU9ERSxcblx0QVRUUklCVVRFX0FDQ0VTU0tFWSxcblx0QVRUUklCVVRFX0FVVE9DQVBJVEFMSVpFLFxuXHRBVFRSSUJVVEVfQVVUT0ZPQ1VTLFxuXHRBVFRSSUJVVEVfQ09OVEVOVEVESVRBQkxFLFxuXHRBVFRSSUJVVEVfRElSLFxuXHRBVFRSSUJVVEVfRFJBR0dBQkxFLFxuXHRBVFRSSUJVVEVfRU5URVJLRVlISU5ULFxuXHRBVFRSSUJVVEVfRVhQT1JUUEFSVFMsXG5cdEFUVFJJQlVURV9ISURERU4sXG5cdG9iamVjdFVwZGF0ZXJMaW5rU3ltYm9sLFxuXHRjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wsXG5cdGluaXRDb250cm9sQ2FsbGJhY2tOYW1lLFxuXHRBVFRSSUJVVEVfU0NSSVBUX0hPU1QsXG5cdEFUVFJJQlVURV9JTklUX0NBTExCQUNLLFxufTtcblxuLyoqXG4gKiBkZWZhdWx0IHRoZW1lXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IERFRkFVTFRfVEhFTUUgPSBcIm1vbnN0ZXJcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfUFJFRklYID0gXCJkYXRhLW1vbnN0ZXItXCI7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIHBhc3Mgb3B0aW9ucyB0byBhIGNvbnRyb2xcbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfT1BUSU9OUyA9IGAke0FUVFJJQlVURV9QUkVGSVh9b3B0aW9uc2A7XG5cbi8qKlxuICogVGhpcyBpcyBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gcGFzcyB0aGUgc2NyaXB0IGhvc3QgdG8gYSBjb250cm9sXG4gKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjQ4LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9TQ1JJUFRfSE9TVCA9IGAke0FUVFJJQlVURV9QUkVGSVh9c2NyaXB0LWhvc3RgO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byBwYXNzIG9wdGlvbnMgdG8gYSBjb250cm9sXG4gKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMwLjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SID0gYCR7QVRUUklCVVRFX1BSRUZJWH1vcHRpb25zLXNlbGVjdG9yYDtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gcGFzcyB0aGUgY2FsbGJhY2sgdG8gYSBjb250cm9sXG4gKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjQ4LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JTklUX0NBTExCQUNLID0gYCR7QVRUUklCVVRFX1BSRUZJWH1pbml0LWNhbGxiYWNrYDtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBjYWxsYmFjayB0byBwYXNzIHRoZSBjYWxsYmFjayB0byBhIGNvbnRyb2xcbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNDguMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgaW5pdENvbnRyb2xDYWxsYmFja05hbWUgPSBgaW5pdEN1c3RvbUNvbnRyb2xDYWxsYmFja2A7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1RIRU1FX1BSRUZJWCA9IGAke0FUVFJJQlVURV9QUkVGSVh9dGhlbWUtYDtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9USEVNRV9OQU1FID0gYCR7QVRUUklCVVRFX1RIRU1FX1BSRUZJWH1uYW1lYDtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTID0gYCR7QVRUUklCVVRFX1BSRUZJWH1hdHRyaWJ1dGVzYDtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI3LjFcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfU0VMRUNUX1RISVMgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXNlbGVjdC10aGlzYDtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1yZXBsYWNlYDtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlQgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWluc2VydGA7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9aW5zZXJ0LXJlZmVyZW5jZWA7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfUkVNT1ZFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1yZW1vdmVgO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9VUERBVEVSX0JJTkQgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWJpbmRgO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjcuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVEVNUExBVEVfUFJFRklYID0gYCR7QVRUUklCVVRFX1BSRUZJWH10ZW1wbGF0ZS1wcmVmaXhgO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTQuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfUk9MRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9cm9sZWA7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9ESVNBQkxFRCA9IFwiZGlzYWJsZWRcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1ZBTFVFID0gXCJ2YWx1ZVwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9PQkpFQ1RMSU5LID0gYCR7QVRUUklCVVRFX1BSRUZJWH1vYmplY3RsaW5rYDtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0VSUk9STUVTU0FHRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9ZXJyb3JgO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBvYmplY3RVcGRhdGVyTGlua1N5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEBvYmplY3QtdXBkYXRlci1saW5rXCIsXG4pO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL2N1c3RvbS1lbGVtZW50QEBvcHRpb25zLXVwZGF0ZXItbGlua1wiLFxuKTtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgVEFHX1NDUklQVCA9IFwic2NyaXB0XCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IFRBR19TVFlMRSA9IFwic3R5bGVcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgVEFHX0xJTksgPSBcImxpbmtcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuXG5jb25zdCBBVFRSSUJVVEVfSUQgPSBcImlkXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cblxuY29uc3QgQVRUUklCVVRFX0NMQVNTID0gXCJjbGFzc1wiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVElUTEUgPSBcInRpdGxlXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9TUkMgPSBcInNyY1wiO1xuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0hSRUYgPSBcImhyZWZcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1RZUEUgPSBcInR5cGVcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX05PTkNFID0gXCJub25jZVwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVFJBTlNMQVRFID0gXCJ0cmFuc2xhdGVcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1RBQklOREVYID0gXCJ0YWJpbmRleFwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfU1BFTExDSEVDSyA9IFwic3BlbGxjaGVja1wiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfU0xPVCA9IFwic2xvdFwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfUEFSVCA9IFwicGFydFwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfTEFORyA9IFwibGFuZ1wiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVRFTVRZUEUgPSBcIml0ZW10eXBlXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JVEVNU0NPUEUgPSBcIml0ZW1zY29wZVwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVRFTVJFRiA9IFwiaXRlbXJlZlwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVRFTUlEID0gXCJpdGVtaWRcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0lURU1QUk9QID0gXCJpdGVtcHJvcFwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVMgPSBcImlzXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JTlBVVE1PREUgPSBcImlucHV0bW9kZVwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfQUNDRVNTS0VZID0gXCJhY2Nlc3NrZXlcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0FVVE9DQVBJVEFMSVpFID0gXCJhdXRvY2FwaXRhbGl6ZVwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfQVVUT0ZPQ1VTID0gXCJhdXRvZm9jdXNcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0NPTlRFTlRFRElUQUJMRSA9IFwiY29udGVudGVkaXRhYmxlXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9ESVIgPSBcImRpclwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfRFJBR0dBQkxFID0gXCJkcmFnZ2FibGVcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0VOVEVSS0VZSElOVCA9IFwiZW50ZXJrZXloaW50XCI7XG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfRVhQT1JUUEFSVFMgPSBcImV4cG9ydHBhcnRzXCI7XG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSElEREVOID0gXCJoaWRkZW5cIjtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IFRva2VuTGlzdCB9IGZyb20gXCIuLi90eXBlcy90b2tlbmxpc3QubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUluc3RhbmNlLFxuXHR2YWxpZGF0ZVN0cmluZyxcblx0dmFsaWRhdGVTeW1ib2wsXG59IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9PQkpFQ1RMSU5LIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQge1xuXHRmaW5kQ2xvc2VzdE9iamVjdExpbmssXG5cdGFkZFRvT2JqZWN0TGluayxcblx0cmVtb3ZlT2JqZWN0TGluayxcblx0aGFzT2JqZWN0TGluayxcblx0Z2V0TGlua2VkT2JqZWN0cyxcblx0dG9nZ2xlQXR0cmlidXRlVG9rZW4sXG5cdGFkZEF0dHJpYnV0ZVRva2VuLFxuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbixcblx0Y29udGFpbnNBdHRyaWJ1dGVUb2tlbixcblx0cmVwbGFjZUF0dHJpYnV0ZVRva2VuLFxuXHRjbGVhckF0dHJpYnV0ZVRva2Vucyxcblx0ZmluZENsb3Nlc3RCeUF0dHJpYnV0ZSxcblx0ZmluZENsb3Nlc3RCeUNsYXNzLFxufTtcblxuLyoqXG4gKiBHZXQgdGhlIGNsb3Nlc3Qgb2JqZWN0IGxpbmsgb2YgYSBub2RlXG4gKlxuICogaWYgYSBub2RlIGlzIHNwZWNpZmllZCB3aXRob3V0IGEgb2JqZWN0IGxpbmssIGEgcmVjdXJzaXZlIHNlYXJjaCB1cHdhcmRzIGlzIHBlcmZvcm1lZCB1bnRpbCB0aGUgY29ycmVzcG9uZGluZ1xuICogb2JqZWN0IGxpbmsgaXMgZm91bmQsIG9yIHVuZGVmaW5lZCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudHx1bmRlZmluZWR9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEwLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGZpbmRDbG9zZXN0T2JqZWN0TGluayhlbGVtZW50KSB7XG5cdHJldHVybiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGVsZW1lbnQsIEFUVFJJQlVURV9PQkpFQ1RMSU5LKTtcbn1cblxuLyoqXG4gKiBBZGRzIGEgY2xhc3MgYXR0cmlidXRlIHRvIGFuIGVsZW1lbnQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7U3ltYm9sfSBzeW1ib2xcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGFkZFRvT2JqZWN0TGluayhlbGVtZW50LCBzeW1ib2wsIG9iamVjdCkge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTeW1ib2woc3ltYm9sKTtcblxuXHRpZiAoZWxlbWVudD8uW3N5bWJvbF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdGVsZW1lbnRbc3ltYm9sXSA9IG5ldyBTZXQoKTtcblx0fVxuXG5cdGFkZEF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIEFUVFJJQlVURV9PQkpFQ1RMSU5LLCBzeW1ib2wudG9TdHJpbmcoKSk7XG5cdGVsZW1lbnRbc3ltYm9sXS5hZGQob2JqZWN0KTtcblx0cmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhbiBvYmplY3QgZnJvbSBhbiBlbGVtZW50XG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7U3ltYm9sfSBzeW1ib2xcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZU9iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN5bWJvbChzeW1ib2wpO1xuXG5cdGlmIChlbGVtZW50Py5bc3ltYm9sXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBBVFRSSUJVVEVfT0JKRUNUTElOSywgc3ltYm9sLnRvU3RyaW5nKCkpO1xuXHRkZWxldGUgZWxlbWVudFtzeW1ib2xdO1xuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZWxlbWVudCBoYXMgYW4gb2JqZWN0IGxpbmtcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtTeW1ib2x9IHN5bWJvbFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaGFzT2JqZWN0TGluayhlbGVtZW50LCBzeW1ib2wpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3ltYm9sKHN5bWJvbCk7XG5cblx0aWYgKGVsZW1lbnQ/LltzeW1ib2xdID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gY29udGFpbnNBdHRyaWJ1dGVUb2tlbihcblx0XHRlbGVtZW50LFxuXHRcdEFUVFJJQlVURV9PQkpFQ1RMSU5LLFxuXHRcdHN5bWJvbC50b1N0cmluZygpLFxuXHQpO1xufVxuXG4vKipcbiAqIFRoZSBPYmplY3RMaW5rIGNhbiBiZSB1c2VkIHRvIGF0dGFjaCBvYmplY3RzIHRvIEhUTUxFbGVtZW50cy4gVGhlIGVsZW1lbnRzIGFyZSBrZXB0IGluIGEgc2V0IHVuZGVyIGEgdW5pcXVlXG4gKiBzeW1ib2wgYW5kIGNhbiBiZSByZWFkIHZpYSBhbiBpdGVyYXRvciB7QHNlZSB7QGxpbmsgZ2V0TGlua2VkT2JqZWN0c319LlxuICpcbiAqIEluIGFkZGl0aW9uLCBlbGVtZW50cyB3aXRoIGFuIG9iamVjdExpbmsgcmVjZWl2ZSB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb2JqZWN0bGlua2AuXG4gKlxuICogV2l0aCB0aGUgbWV0aG9kICB7QHNlZSB7QGxpbmsgYWRkVG9PYmplY3RMaW5rfX0gdGhlIG9iamVjdHMgY2FuIGJlIGFkZGVkLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge1N5bWJvbH0gc3ltYm9sXG4gKiBAcmV0dXJuIHtJdGVyYXRvcn1cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGVyZSBpcyBubyBvYmplY3QgbGluayBmb3Igc3ltYm9sXG4gKi9cbmZ1bmN0aW9uIGdldExpbmtlZE9iamVjdHMoZWxlbWVudCwgc3ltYm9sKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN5bWJvbChzeW1ib2wpO1xuXG5cdGlmIChlbGVtZW50Py5bc3ltYm9sXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGB0aGVyZSBpcyBubyBvYmplY3QgbGluayBmb3IgJHtzeW1ib2wudG9TdHJpbmcoKX1gKTtcblx0fVxuXG5cdHJldHVybiBlbGVtZW50Py5bc3ltYm9sXVtTeW1ib2wuaXRlcmF0b3JdKCk7XG59XG5cbi8qKlxuICogV2l0aCB0aGlzIG1ldGhvZCB0b2tlbnMgaW4gYW4gYXR0cmlidXRlIGNhbiBiZSBzd2l0Y2hlZCBvbiBvciBvZmYuIEZvciBleGFtcGxlLCBjbGFzc2VzIGNhbiBiZSBzd2l0Y2hlZCBvbiBhbmQgb2ZmIGluIHRoZSBlbGVtZW50cyBjbGFzcyBhdHRyaWJ1dGUuXG4gKlxuICogVG9rZW5zIGFyZSBhbHdheXMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGtleSwgdG9rZW4pIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0dmFsaWRhdGVTdHJpbmcoa2V5KTtcblxuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGtleSkpIHtcblx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIHRva2VuKTtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdGVsZW1lbnQuc2V0QXR0cmlidXRlKFxuXHRcdGtleSxcblx0XHRuZXcgVG9rZW5MaXN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSkpLnRvZ2dsZSh0b2tlbikudG9TdHJpbmcoKSxcblx0KTtcblxuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBhZGQgYSB0b2tlbiB0byBhbiBhdHRyaWJ1dGUuIFRva2VucyBhcmUgYWx3YXlzIHNlcGFyYXRlZCBieSBhIHNwYWNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fVxuICovXG5mdW5jdGlvbiBhZGRBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHRva2VuKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdHZhbGlkYXRlU3RyaW5nKGtleSk7XG5cblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShrZXkpKSB7XG5cdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB0b2tlbik7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHRlbGVtZW50LnNldEF0dHJpYnV0ZShcblx0XHRrZXksXG5cdFx0bmV3IFRva2VuTGlzdChlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpKS5hZGQodG9rZW4pLnRvU3RyaW5nKCksXG5cdCk7XG5cblx0cmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byByZW1vdmUgdG9rZW5zIGZyb20gYW4gYXR0cmlidXRlLlxuICpcbiAqIFRva2VucyBhcmUgYWx3YXlzIHNlcGFyYXRlZCBieSBhIHNwYWNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fVxuICovXG5mdW5jdGlvbiByZW1vdmVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHRva2VuKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdHZhbGlkYXRlU3RyaW5nKGtleSk7XG5cblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShrZXkpKSB7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHRlbGVtZW50LnNldEF0dHJpYnV0ZShcblx0XHRrZXksXG5cdFx0bmV3IFRva2VuTGlzdChlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpKS5yZW1vdmUodG9rZW4pLnRvU3RyaW5nKCksXG5cdCk7XG5cblx0cmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gYXR0cmlidXRlIGhhcyBhIHRva2VuLlxuICpcbiAqIFRva2VucyBhcmUgYWx3YXlzIHNlcGFyYXRlZCBieSBhIHNwYWNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5zQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB0b2tlbikge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHR2YWxpZGF0ZVN0cmluZyhrZXkpO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiBuZXcgVG9rZW5MaXN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSkpLmNvbnRhaW5zKHRva2VuKTtcbn1cblxuLyoqXG4gKiBUb2tlbnMgYXJlIGFsd2F5cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtzdHJpbmd9IGZyb21cbiAqIEBwYXJhbSB7c3RyaW5nfSB0b1xuICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIGZyb20sIHRvKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN0cmluZyhmcm9tKTtcblx0dmFsaWRhdGVTdHJpbmcodG8pO1xuXHR2YWxpZGF0ZVN0cmluZyhrZXkpO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXG5cdFx0a2V5LFxuXHRcdG5ldyBUb2tlbkxpc3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KSkucmVwbGFjZShmcm9tLCB0bykudG9TdHJpbmcoKSxcblx0KTtcblxuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBUb2tlbnMgYXJlIGFsd2F5cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGNsZWFyQXR0cmlidXRlVG9rZW5zKGVsZW1lbnQsIGtleSkge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTdHJpbmcoa2V5KTtcblxuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGtleSkpIHtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdGVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgXCJcIik7XG5cblx0cmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBzZWFyY2hlcywgc3RhcnRpbmcgZnJvbSBhbiBgSFRNTEVsZW1lbWVudGAsIGZvciB0aGUgbmV4dCBlbGVtZW50IHRoYXQgaGFzIGEgY2VydGFpbiBhdHRyaWJ1dGUuXG4gKlxuICogYGBgaHRtbFxuICogPGRpdiBkYXRhLW15LWF0dHJpYnV0ZT1cIjJcIiBpZD1cIjJcIj5cbiAqICAgICA8ZGl2IGlkPVwiMVwiPjwvZGl2PlxuICogPC9kaXY+XG4gKiBgYGBcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiAvLyBpZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQgKHVuZGVmaW5lZCksIHRoZW4gb25seSB0aGUgYXR0cmlidXRlIGlzIGNoZWNrZWQuXG4gKiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcxJyksJ2RhdGEtbXktYXR0cmlidXRlJyk7IC8vIFx1MjFBNiBub2RlIHdpdGggaWQgMlxuICogZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnMicpLCdkYXRhLW15LWF0dHJpYnV0ZScpOyAvLyBcdTIxQTYgbm9kZSB3aXRoIGlkIDJcbiAqXG4gKiAvLyBpZiBhIHZhbHVlIGlzIHNwZWNpZmllZCwgZm9yIGV4YW1wbGUgYW4gZW1wdHkgc3RyaW5nLCB0aGVuIHRoZSBuYW1lIGFuZCB0aGUgdmFsdWUgYXJlIGNoZWNrZWQuXG4gKiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcxJyksJ2RhdGEtbXktYXR0cmlidXRlJywgJycpOyAgLy8gXHUyMUE2IHVuZGVmaW5lZFxuICogZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnMScpLCdkYXRhLW15LWF0dHJpYnV0ZScsICcyJyk7IC8vIFx1MjFBNiBub2RlIHdpdGggaWQgMlxuICogYGBgXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudHx1bmRlZmluZWR9XG4gKiBAc3VtbWFyeSBmaW5kIGNsb3Nlc3Qgbm9kZVxuICovXG5mdW5jdGlvbiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGVsZW1lbnQsIGtleSwgdmFsdWUpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBnZXRHbG9iYWxGdW5jdGlvbihcIkhUTUxFbGVtZW50XCIpKTtcblxuXHRpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHR9XG5cblx0XHRpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KSA9PT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0fVxuXG5cdGxldCBzZWxlY3RvciA9IHZhbGlkYXRlU3RyaW5nKGtleSk7XG5cdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSBzZWxlY3RvciArPSBgPSR7dmFsaWRhdGVTdHJpbmcodmFsdWUpfWA7XG5cdGNvbnN0IHJlc3VsdCA9IGVsZW1lbnQuY2xvc2VzdChgWyR7c2VsZWN0b3J9XWApO1xuXHRpZiAocmVzdWx0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBzZWFyY2hlcywgc3RhcnRpbmcgZnJvbSBhbiBgSFRNTEVsZW1lbWVudGAsIGZvciB0aGUgbmV4dCBlbGVtZW50IHRoYXQgaGFzIGEgY2VydGFpbiBhdHRyaWJ1dGUuXG4gKlxuICogYGBgaHRtbFxuICogPGRpdiBjbGFzcz1cIm15Y2xhc3NcIiBpZD1cIjJcIj5cbiAqICAgICA8ZGl2IGlkPVwiMVwiPjwvZGl2PlxuICogPC9kaXY+XG4gKiBgYGBcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiAvLyBpZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQgKHVuZGVmaW5lZCksIHRoZW4gb25seSB0aGUgYXR0cmlidXRlIGlzIGNoZWNrZWQuXG4gKiBmaW5kQ2xvc2VzdEJ5Q2xhc3MoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzEnKSwnbXljbGFzcycpOyAvLyBcdTIxQTYgbm9kZSB3aXRoIGlkIDJcbiAqIGZpbmRDbG9zZXN0QnlDbGFzcyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnMicpLCdteWNsYXNzJyk7IC8vIFx1MjFBNiBub2RlIHdpdGggaWQgMlxuICogYGBgXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7ZmluZENsb3Nlc3RCeUNsYXNzfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9kb20vYXR0cmlidXRlcy5tanMnO1xuICogZmluZENsb3Nlc3RCeUNsYXNzKCk7XG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjcuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZVxuICogQHJldHVybiB7SFRNTEVsZW1lbnR8dW5kZWZpbmVkfVxuICogQHN1bW1hcnkgZmluZCBjbG9zZXN0IG5vZGVcbiAqL1xuZnVuY3Rpb24gZmluZENsb3Nlc3RCeUNsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIGdldEdsb2JhbEZ1bmN0aW9uKFwiSFRNTEVsZW1lbnRcIikpO1xuXG5cdGlmIChlbGVtZW50Py5jbGFzc0xpc3Q/LmNvbnRhaW5zKHZhbGlkYXRlU3RyaW5nKGNsYXNzTmFtZSkpKSB7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHRjb25zdCByZXN1bHQgPSBlbGVtZW50LmNsb3Nlc3QoYC4ke2NsYXNzTmFtZX1gKTtcblx0aWYgKHJlc3VsdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7XG5cdGdldERvY3VtZW50LFxuXHRnZXRXaW5kb3csXG5cdGdldERvY3VtZW50RnJhZ21lbnRGcm9tU3RyaW5nLFxuXHRmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMsXG5cdGdldENvbnRhaW5pbmdEb2N1bWVudCxcblx0Z2V0UmVnaXN0ZXJlZEN1c3RvbUVsZW1lbnRzLFxufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBmZXRjaGVzIHRoZSBkb2N1bWVudCBvYmplY3RcbiAqXG4gKiBJbiBub2RlanMgdGhpcyBmdW5jdGlvbmFsaXR5IGNhbiBiZSBwZXJmb3JtZWQgd2l0aCBbanNkb21dKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2pzZG9tKS5cbiAqXG4gKiBgYGBcbiAqIGltcG9ydCB7SlNET019IGZyb20gXCJqc2RvbVwiXG4gKiBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJvYmplY3RcIikge1xuICogICAgY29uc3Qge3dpbmRvd30gPSBuZXcgSlNET00oJycsIHtcbiAqICAgICAgICB1cmw6ICdodHRwOi8vZXhhbXBsZS5jb20vJyxcbiAqICAgICAgICBwcmV0ZW5kVG9CZVZpc3VhbDogdHJ1ZVxuICogICAgfSk7XG4gKlxuICogICAgW1xuICogICAgICAgICdzZWxmJyxcbiAqICAgICAgICAnZG9jdW1lbnQnLFxuICogICAgICAgICdEb2N1bWVudCcsXG4gKiAgICAgICAgJ05vZGUnLFxuICogICAgICAgICdFbGVtZW50JyxcbiAqICAgICAgICAnSFRNTEVsZW1lbnQnLFxuICogICAgICAgICdEb2N1bWVudEZyYWdtZW50JyxcbiAqICAgICAgICAnRE9NUGFyc2VyJyxcbiAqICAgICAgICAnWE1MU2VyaWFsaXplcicsXG4gKiAgICAgICAgJ05vZGVGaWx0ZXInLFxuICogICAgICAgICdJbnB1dEV2ZW50JyxcbiAqICAgICAgICAnQ3VzdG9tRXZlbnQnXG4gKiAgICBdLmZvckVhY2goa2V5ID0+IChnZXRHbG9iYWwoKVtrZXldID0gd2luZG93W2tleV0pKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7RXJyb3J9IG5vdCBzdXBwb3J0ZWQgZW52aXJvbm1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0RG9jdW1lbnQoKSB7XG5cdGNvbnN0IGRvY3VtZW50ID0gZ2V0R2xvYmFsKCk/LltcImRvY3VtZW50XCJdO1xuXHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm90IHN1cHBvcnRlZCBlbnZpcm9ubWVudFwiKTtcblx0fVxuXG5cdHJldHVybiBkb2N1bWVudDtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBmZXRjaGVzIHRoZSB3aW5kb3cgb2JqZWN0XG4gKlxuICogSW4gbm9kZWpzIHRoaXMgZnVuY3Rpb25hbGl0eSBjYW4gYmUgcGVyZm9ybWVkIHdpdGggW2pzZG9tXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9qc2RvbSkuXG4gKlxuICogYGBgXG4gKiBpbXBvcnQge0pTRE9NfSBmcm9tIFwianNkb21cIlxuICogaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwib2JqZWN0XCIpIHtcbiAqICAgIGNvbnN0IHt3aW5kb3d9ID0gbmV3IEpTRE9NKCcnLCB7XG4gKiAgICAgICAgdXJsOiAnaHR0cDovL2V4YW1wbGUuY29tLycsXG4gKiAgICAgICAgcHJldGVuZFRvQmVWaXN1YWw6IHRydWVcbiAqICAgIH0pO1xuICpcbiAqICAgIGdldEdsb2JhbCgpWyd3aW5kb3cnXT13aW5kb3c7XG4gKlxuICogICAgW1xuICogICAgICAgICdzZWxmJyxcbiAqICAgICAgICAnZG9jdW1lbnQnLFxuICogICAgICAgICdEb2N1bWVudCcsXG4gKiAgICAgICAgJ05vZGUnLFxuICogICAgICAgICdFbGVtZW50JyxcbiAqICAgICAgICAnSFRNTEVsZW1lbnQnLFxuICogICAgICAgICdEb2N1bWVudEZyYWdtZW50JyxcbiAqICAgICAgICAnRE9NUGFyc2VyJyxcbiAqICAgICAgICAnWE1MU2VyaWFsaXplcicsXG4gKiAgICAgICAgJ05vZGVGaWx0ZXInLFxuICogICAgICAgICdJbnB1dEV2ZW50JyxcbiAqICAgICAgICAnQ3VzdG9tRXZlbnQnXG4gKiAgICBdLmZvckVhY2goa2V5ID0+IChnZXRHbG9iYWwoKVtrZXldID0gd2luZG93W2tleV0pKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7RXJyb3J9IG5vdCBzdXBwb3J0ZWQgZW52aXJvbm1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0V2luZG93KCkge1xuXHRjb25zdCB3aW5kb3cgPSBnZXRHbG9iYWwoKT8uW1wid2luZG93XCJdO1xuXHRpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJvYmplY3RcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vdCBzdXBwb3J0ZWQgZW52aXJvbm1lbnRcIik7XG5cdH1cblxuXHRyZXR1cm4gd2luZG93O1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGZldGNoZXMgdGhlIGRvY3VtZW50IG9iamVjdFxuICpcbiAqIEluIG5vZGVqcyB0aGlzIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIHBlcmZvcm1lZCB3aXRoIFtqc2RvbV0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvanNkb20pLlxuICpcbiAqIGBgYFxuICogaW1wb3J0IHtKU0RPTX0gZnJvbSBcImpzZG9tXCJcbiAqIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcIm9iamVjdFwiKSB7XG4gKiAgICBjb25zdCB7d2luZG93fSA9IG5ldyBKU0RPTSgnJywge1xuICogICAgICAgIHVybDogJ2h0dHA6Ly9leGFtcGxlLmNvbS8nLFxuICogICAgICAgIHByZXRlbmRUb0JlVmlzdWFsOiB0cnVlXG4gKiAgICB9KTtcbiAqXG4gKiAgICBbXG4gKiAgICAgICAgJ3NlbGYnLFxuICogICAgICAgICdkb2N1bWVudCcsXG4gKiAgICAgICAgJ0RvY3VtZW50JyxcbiAqICAgICAgICAnTm9kZScsXG4gKiAgICAgICAgJ0VsZW1lbnQnLFxuICogICAgICAgICdIVE1MRWxlbWVudCcsXG4gKiAgICAgICAgJ0RvY3VtZW50RnJhZ21lbnQnLFxuICogICAgICAgICdET01QYXJzZXInLFxuICogICAgICAgICdYTUxTZXJpYWxpemVyJyxcbiAqICAgICAgICAnTm9kZUZpbHRlcicsXG4gKiAgICAgICAgJ0lucHV0RXZlbnQnLFxuICogICAgICAgICdDdXN0b21FdmVudCdcbiAqICAgIF0uZm9yRWFjaChrZXkgPT4gKGdldEdsb2JhbCgpW2tleV0gPSB3aW5kb3dba2V5XSkpO1xuICogfVxuICogYGBgXG4gKlxuICogQHJldHVybnMge0RvY3VtZW50RnJhZ21lbnR9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7RXJyb3J9IG5vdCBzdXBwb3J0ZWQgZW52aXJvbm1lbnRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldERvY3VtZW50RnJhZ21lbnRGcm9tU3RyaW5nKGh0bWwpIHtcblx0dmFsaWRhdGVTdHJpbmcoaHRtbCk7XG5cblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXHRjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcblx0dGVtcGxhdGUuaW5uZXJIVE1MID0gaHRtbDtcblxuXHRyZXR1cm4gdGVtcGxhdGUuY29udGVudDtcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBzZWFyY2hlcyB1cHdhcmRzIGZyb20gYSBnaXZlbiBlbGVtZW50IHRvIGZpbmQgYW4gYW5jZXN0b3IgZWxlbWVudFxuICogd2l0aCBhIHNwZWNpZmllZCBJRCwgY29uc2lkZXJpbmcgYm90aCBub3JtYWwgRE9NIGFuZCBzaGFkb3cgRE9NLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8U2hhZG93Um9vdH0gZWxlbWVudCAtIFRoZSBzdGFydGluZyBlbGVtZW50IG9yIHNoYWRvdyByb290IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldElkIC0gVGhlIElEIG9mIHRoZSB0YXJnZXQgZWxlbWVudCB0byBmaW5kLlxuICogQHJldHVybnMge0hUTUxFbGVtZW50fG51bGx9IC0gVGhlIGFuY2VzdG9yIGVsZW1lbnQgd2l0aCB0aGUgc3BlY2lmaWVkIElELCBvciBudWxsIGlmIG5vdCBmb3VuZC5cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHNpbmNlIDMuMjkuMFxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMoZWxlbWVudCwgdGFyZ2V0SWQpIHtcblx0aWYgKCFlbGVtZW50KSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBDaGVjayBpZiB0aGUgY3VycmVudCBlbGVtZW50IGhhcyB0aGUgdGFyZ2V0IElEXG5cdGlmIChlbGVtZW50LmlkID09PSB0YXJnZXRJZCkge1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0Ly8gU2VhcmNoIHdpdGhpbiB0aGUgY3VycmVudCBlbGVtZW50J3Mgc2hhZG93IHJvb3QsIGlmIGl0IGV4aXN0c1xuXHRpZiAoZWxlbWVudC5zaGFkb3dSb290KSB7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZWxlbWVudC5zaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKHRhcmdldElkKTtcblx0XHRpZiAodGFyZ2V0KSB7XG5cdFx0XHRyZXR1cm4gdGFyZ2V0O1xuXHRcdH1cblx0fVxuXG5cdC8vIElmIHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgdGhlIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgc2VhcmNoIHdpdGhpbiB0aGUgbWFpbiBkb2N1bWVudFxuXHRpZiAoZWxlbWVudCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0SWQpO1xuXHRcdGlmICh0YXJnZXQpIHtcblx0XHRcdHJldHVybiB0YXJnZXQ7XG5cdFx0fVxuXHR9XG5cblx0Ly8gSWYgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyBpbnNpZGUgYSBzaGFkb3cgcm9vdCwgc2VhcmNoIGl0cyBob3N0J3MgYW5jZXN0b3JzXG5cdGNvbnN0IHJvb3ROb2RlID0gZWxlbWVudC5nZXRSb290Tm9kZSgpO1xuXHRpZiAocm9vdE5vZGUgJiYgcm9vdE5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG5cdFx0cmV0dXJuIGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhyb290Tm9kZS5ob3N0LCB0YXJnZXRJZCk7XG5cdH1cblxuXHQvLyBPdGhlcndpc2UsIHNlYXJjaCB0aGUgY3VycmVudCBlbGVtZW50J3MgcGFyZW50XG5cdHJldHVybiBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMoZWxlbWVudC5wYXJlbnRFbGVtZW50LCB0YXJnZXRJZCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtIVE1MRWxlbWVudHxudWxsfVxuICovXG5mdW5jdGlvbiB0cmF2ZXJzZVNoYWRvd1Jvb3RzKGVsZW1lbnQpIHtcblx0bGV0IGN1cnJlbnRSb290ID0gZWxlbWVudC5zaGFkb3dSb290O1xuXHRsZXQgY3VycmVudFBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcblxuXHR3aGlsZSAoXG5cdFx0Y3VycmVudFBhcmVudCAmJlxuXHRcdGN1cnJlbnRQYXJlbnQubm9kZVR5cGUgIT09IE5vZGUuRE9DVU1FTlRfTk9ERSAmJlxuXHRcdGN1cnJlbnRQYXJlbnQubm9kZVR5cGUgIT09IE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERVxuXHQpIHtcblx0XHRpZiAoY3VycmVudFJvb3QgJiYgY3VycmVudFJvb3QucGFyZW50Tm9kZSkge1xuXHRcdFx0Y3VycmVudFBhcmVudCA9IGN1cnJlbnRSb290LnBhcmVudE5vZGU7XG5cdFx0XHRjdXJyZW50Um9vdCA9IGN1cnJlbnRQYXJlbnQuc2hhZG93Um9vdDtcblx0XHR9IGVsc2UgaWYgKGN1cnJlbnRQYXJlbnQucGFyZW50Tm9kZSkge1xuXHRcdFx0Y3VycmVudFBhcmVudCA9IGN1cnJlbnRQYXJlbnQucGFyZW50Tm9kZTtcblx0XHRcdGN1cnJlbnRSb290ID0gbnVsbDtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0Y3VycmVudFJvb3QgJiZcblx0XHRcdGN1cnJlbnRSb290Lmhvc3QgJiZcblx0XHRcdGN1cnJlbnRSb290Lmhvc3Qubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfTk9ERVxuXHRcdCkge1xuXHRcdFx0Y3VycmVudFBhcmVudCA9IGN1cnJlbnRSb290Lmhvc3Q7XG5cdFx0XHRjdXJyZW50Um9vdCA9IG51bGw7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1cnJlbnRQYXJlbnQgPSBudWxsO1xuXHRcdFx0Y3VycmVudFJvb3QgPSBudWxsO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjdXJyZW50UGFyZW50O1xufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHNlYXJjaGVzIHVwd2FyZHMgZnJvbSBhIGdpdmVuIGVsZW1lbnQgdG8gZmluZCBhbiBhbmNlc3RvciBlbGVtZW50XG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMgeyp9XG4gKiBAdGhyb3dzIHtFcnJvcn0gSW52YWxpZCBhcmd1bWVudC4gRXhwZWN0ZWQgYW4gSFRNTEVsZW1lbnQuXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBzaW5jZSAzLjM2LjBcbiAqL1xuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0RvY3VtZW50KGVsZW1lbnQpIHtcblx0aWYgKFxuXHRcdCFlbGVtZW50IHx8XG5cdFx0IShcblx0XHRcdGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fFxuXHRcdFx0ZWxlbWVudCBpbnN0YW5jZW9mIGVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5IVE1MRWxlbWVudFxuXHRcdClcblx0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBhcmd1bWVudC4gRXhwZWN0ZWQgYW4gSFRNTEVsZW1lbnQuXCIpO1xuXHR9XG5cblx0cmV0dXJuIHRyYXZlcnNlU2hhZG93Um9vdHMoZWxlbWVudCkgfHwgbnVsbDtcbn1cblxuXG4vKipcbiAqIFJldHVybnMgYSBsaXN0IG9mIGFsbCByZWdpc3RlcmVkIGN1c3RvbSBlbGVtZW50cyBpbiB0aGUgY3VycmVudCBkb2N1bWVudC5cbiAqIFxuICogQHJldHVybnMge3N0cmluZ1tdfVxuICogQHNpbmNlIDQuMC4wXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAqL1xuZnVuY3Rpb24gZ2V0UmVnaXN0ZXJlZEN1c3RvbUVsZW1lbnRzKCkge1xuXHRjb25zdCBjdXN0b21FbGVtZW50VGFncyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnKicpKVxuXHRcdC5tYXAodGFnID0+IHRhZy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpXG5cdFx0LmZpbHRlcih0YWdOYW1lID0+IHRhZ05hbWUuaW5jbHVkZXMoJy0nKSAmJiBjdXN0b21FbGVtZW50cy5nZXQodGFnTmFtZSkpO1xuXG5cdHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoY3VzdG9tRWxlbWVudFRhZ3MpKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgU3RhY2sgfTtcblxuLyoqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIG1ldGhvZCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5UeXBlcy5RdWV1ZSgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmNsYXNzIFN0YWNrIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmRhdGEgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL3N0YWNrXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0VtcHR5KCkge1xuXHRcdHJldHVybiB0aGlzLmRhdGEubGVuZ3RoID09PSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIGxvb2tzIGF0IHRoZSBvYmplY3QgYXQgdGhlIHRvcCBvZiB0aGlzIHN0YWNrIHdpdGhvdXQgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgc3RhY2suXG5cdCAqXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRwZWVrKCkge1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5kYXRhPy5bdGhpcy5kYXRhLmxlbmd0aCAtIDFdO1xuXHR9XG5cblx0LyoqXG5cdCAqIHB1c2hlcyBhbiBpdGVtIG9udG8gdGhlIHRvcCBvZiB0aGlzIHN0YWNrLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm5zIHtRdWV1ZX1cblx0ICovXG5cdHB1c2godmFsdWUpIHtcblx0XHR0aGlzLmRhdGEucHVzaCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmVtb3ZlIGFsbCBlbnRyaWVzXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtRdWV1ZX1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHRoaXMuZGF0YSA9IFtdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJlbW92ZXMgdGhlIG9iamVjdCBhdCB0aGUgdG9wIG9mIHRoaXMgc3RhY2sgYW5kIHJldHVybnNcblx0ICogdGhhdCBvYmplY3QgYXMgdGhlIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24uIGlzIHRoZSBzdGFjayBlbXB0eVxuXHQgKiB0aGUgcmV0dXJuIHZhbHVlIGlzIHVuZGVmaW5lZC5cblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHBvcCgpIHtcblx0XHRpZiAodGhpcy5pc0VtcHR5KCkpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmRhdGEucG9wKCk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7XG5cdGlzQXJyYXksXG5cdGlzSW50ZWdlcixcblx0aXNPYmplY3QsXG5cdGlzUHJpbWl0aXZlLFxuXHRpc1N0cmluZyxcbn0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgU3RhY2sgfSBmcm9tIFwiLi4vdHlwZXMvc3RhY2subWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUludGVnZXIsXG5cdHZhbGlkYXRlQm9vbGVhbixcblx0dmFsaWRhdGVTdHJpbmcsXG59IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgUGF0aGZpbmRlciwgREVMSU1JVEVSLCBXSUxEQ0FSRCB9O1xuXG4vKipcbiAqIHBhdGggc2VwYXJhdG9yXG4gKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IERFTElNSVRFUiA9IFwiLlwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBXSUxEQ0FSRCA9IFwiKlwiO1xuXG4vKipcbiAqIFBhdGhmaW5kZXIgaXMgYSBjbGFzcyB0byBmaW5kIGEgcGF0aCB0byBhbiBvYmplY3QuXG4gKlxuICogV2l0aCB0aGUgaGVscCBvZiB0aGUgcGF0aGZpbmRlciwgdmFsdWVzIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuIGZyb20gYW4gb2JqZWN0IGNvbnN0cnVjdC5cbiAqXG4gKiBgYGBcbiAqIG5ldyBQYXRoZmluZGVyKHtcbiAqIGE6IHtcbiAqICAgICBiOiB7XG4gKiAgICAgICAgIGY6IFtcbiAqICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICBnOiBmYWxzZSxcbiAqICAgICAgICAgICAgIH1cbiAqICAgICAgICAgXSxcbiAqICAgICB9XG4gKiB9XG4gKiB9KS5nZXRWaWEoXCJhLmIuZi4wLmdcIik7IC8vIFx1MjFBNiBmYWxzZVxuICogYGBgXG4gKlxuICogaWYgYSB2YWx1ZSBpcyBub3QgcHJlc2VudCBvciBoYXMgdGhlIHdyb25nIHR5cGUsIGEgY29ycmVzcG9uZGluZyBleGNlcHRpb24gaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogbmV3IFBhdGhmaW5kZXIoe30pLmdldFZpYShcImEuYi5mLjAuZ1wiKTsgLy8gXHUyMUE2IEVycm9yXG4gKiBgYGBcbiAqXG4gKiBUaGUgYFBhdGhmaW5kZXIuZXhpc3RzKClgIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIGFjY2VzcyB0byB0aGUgcGF0aCBpcyBwb3NzaWJsZS5cbiAqXG4gKiBgYGBcbiAqIG5ldyBQYXRoZmluZGVyKHt9KS5leGlzdHMoXCJhLmIuZi4wLmdcIik7IC8vIFx1MjFBNiBmYWxzZVxuICogYGBgXG4gKlxuICogcGF0aGZpbmRlciBjYW4gYWxzbyBiZSB1c2VkIHRvIGJ1aWxkIG9iamVjdCBzdHJ1Y3R1cmVzLiB0byBkbyB0aGlzLCB0aGUgYFBhdGhmaW5kZXIuc2V0VmlhKClgIG1ldGhvZCBtdXN0IGJlIHVzZWQuXG4gKlxuICogYGBgXG4gKiBvYmogPSB7fTtcbiAqIG5ldyBQYXRoZmluZGVyKG9iaikuc2V0VmlhKCdhLmIuMC5jJywgdHJ1ZSk7IC8vIFx1MjFBNiB7YTp7Yjpbe2M6dHJ1ZX1dfX1cbiAqIGBgYFxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9kYXRhL3BhdGhmaW5kZXItMS5tanNcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9kYXRhL3BhdGhmaW5kZXItMi5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YVxuICovXG5jbGFzcyBQYXRoZmluZGVyIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge2FycmF5fG9iamVjdHxNYXB8U2V0fSB2YWx1ZVxuXHQgKiBAc2luY2UgMS40LjBcblx0ICogQHRocm93cyAge0Vycm9yfSB0aGUgcGFyYW1ldGVyIG11c3Qgbm90IGJlIGEgc2ltcGxlIHR5cGVcblx0ICoqL1xuXHRjb25zdHJ1Y3RvcihvYmplY3QpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKGlzUHJpbWl0aXZlKG9iamVjdCkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBwYXJhbWV0ZXIgbXVzdCBub3QgYmUgYSBzaW1wbGUgdHlwZVwiKTtcblx0XHR9XG5cblx0XHR0aGlzLm9iamVjdCA9IG9iamVjdDtcblx0XHR0aGlzLndpbGRDYXJkID0gV0lMRENBUkQ7XG5cdH1cblxuXHQvKipcblx0ICogc2V0IHdpbGRjYXJkXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB3aWxkY2FyZFxuXHQgKiBAcmV0dXJuIHtQYXRoZmluZGVyfVxuXHQgKiBAc2luY2UgMS43LjBcblx0ICovXG5cdHNldFdpbGRDYXJkKHdpbGRjYXJkKSB7XG5cdFx0dmFsaWRhdGVTdHJpbmcod2lsZGNhcmQpO1xuXHRcdHRoaXMud2lsZENhcmQgPSB3aWxkY2FyZDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xhcnJheX0gcGF0aFxuXHQgKiBAc2luY2UgMS40LjBcblx0ICogQHJldHVybnMgeyp9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGpvdXJuZXkgaXMgbm90IGF0IGl0cyBlbmRcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVxuXHQgKi9cblx0Z2V0VmlhKHBhdGgpIHtcblx0XHRyZXR1cm4gZ2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgdGhpcy5vYmplY3QsIHBhdGgpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGFycmF5fSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybnMge1BhdGhmaW5kZXJ9XG5cdCAqIEBzaW5jZSAxLjQuMFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVxuXHQgKi9cblx0c2V0VmlhKHBhdGgsIHZhbHVlKSB7XG5cdFx0c2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgdGhpcy5vYmplY3QsIHBhdGgsIHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWxldGUgVmlhIFBhdGhcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8YXJyYXl9IHBhdGhcblx0ICogQHJldHVybnMge1BhdGhmaW5kZXJ9XG5cdCAqIEBzaW5jZSAxLjYuMFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVxuXHQgKi9cblx0ZGVsZXRlVmlhKHBhdGgpIHtcblx0XHRkZWxldGVWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCB0aGlzLm9iamVjdCwgcGF0aCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8YXJyYXl9IHBhdGhcblx0ICogQHJldHVybiB7Ym9vbH1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICogQHNpbmNlIDEuNC4wXG5cdCAqL1xuXHRleGlzdHMocGF0aCkge1xuXHRcdHRyeSB7XG5cdFx0XHRnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCB0aGlzLm9iamVjdCwgcGF0aCwgdHJ1ZSk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7Kn0gc3ViamVjdFxuICogQHBhcmFtIHtzdHJpbmd8YXJyYXl9IHBhdGhcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2hlY2tcbiAqIEByZXR1cm4ge01hcH1cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IHRoZSBqb3VybmV5IGlzIG5vdCBhdCBpdHMgZW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaXRlcmF0ZShzdWJqZWN0LCBwYXRoLCBjaGVjaykge1xuXHRpZiAoY2hlY2sgPT09IHVuZGVmaW5lZCkge1xuXHRcdGNoZWNrID0gZmFsc2U7XG5cdH1cblx0dmFsaWRhdGVCb29sZWFuKGNoZWNrKTtcblxuXHRjb25zdCByZXN1bHQgPSBuZXcgTWFwKCk7XG5cblx0aWYgKGlzQXJyYXkocGF0aCkpIHtcblx0XHRwYXRoID0gcGF0aC5qb2luKERFTElNSVRFUik7XG5cdH1cblxuXHRpZiAoaXNPYmplY3Qoc3ViamVjdCkgfHwgaXNBcnJheShzdWJqZWN0KSkge1xuXHRcdGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHN1YmplY3QpKSB7XG5cdFx0XHRyZXN1bHQuc2V0KGtleSwgZ2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgdmFsdWUsIHBhdGgsIGNoZWNrKSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGtleSA9IHBhdGguc3BsaXQoREVMSU1JVEVSKS5zaGlmdCgpO1xuXHRcdHJlc3VsdC5zZXQoa2V5LCBnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCBzdWJqZWN0LCBwYXRoLCBjaGVjaykpO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHsqfSBzdWJqZWN0XG4gKiBAcGFyYW0gW3N0cmluZ3xhcnJheX0gcGF0aFxuICogQHBhcmFtIFtib29sZWFufSBjaGVja1xuICogQHJldHVybnMgeyp9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgam91cm5leSBpcyBub3QgYXQgaXRzIGVuZFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlVmlhUGF0aChzdWJqZWN0LCBwYXRoLCBjaGVjaykge1xuXHRpZiAoY2hlY2sgPT09IHVuZGVmaW5lZCkge1xuXHRcdGNoZWNrID0gZmFsc2U7XG5cdH1cblx0dmFsaWRhdGVCb29sZWFuKGNoZWNrKTtcblxuXHRpZiAoIShpc0FycmF5KHBhdGgpIHx8IGlzU3RyaW5nKHBhdGgpKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInR5cGUgZXJyb3I6IHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBhbiBhcnJheVwiKTtcblx0fVxuXG5cdGxldCBwYXJ0cztcblx0aWYgKGlzU3RyaW5nKHBhdGgpKSB7XG5cdFx0aWYgKHBhdGggPT09IFwiXCIpIHtcblx0XHRcdHJldHVybiBzdWJqZWN0O1xuXHRcdH1cblxuXHRcdHBhcnRzID0gcGF0aC5zcGxpdChERUxJTUlURVIpO1xuXHR9XG5cblx0bGV0IGN1cnJlbnQgPSBwYXJ0cy5zaGlmdCgpO1xuXG5cdGlmIChjdXJyZW50ID09PSB0aGlzLndpbGRDYXJkKSB7XG5cdFx0cmV0dXJuIGl0ZXJhdGUuY2FsbCh0aGlzLCBzdWJqZWN0LCBwYXJ0cy5qb2luKERFTElNSVRFUiksIGNoZWNrKTtcblx0fVxuXG5cdGlmIChpc09iamVjdChzdWJqZWN0KSB8fCBpc0FycmF5KHN1YmplY3QpKSB7XG5cdFx0bGV0IGFuY2hvcjtcblx0XHRpZiAoc3ViamVjdCBpbnN0YW5jZW9mIE1hcCB8fCBzdWJqZWN0IGluc3RhbmNlb2YgV2Vha01hcCkge1xuXHRcdFx0YW5jaG9yID0gc3ViamVjdC5nZXQoY3VycmVudCk7XG5cdFx0fSBlbHNlIGlmIChzdWJqZWN0IGluc3RhbmNlb2YgU2V0IHx8IHN1YmplY3QgaW5zdGFuY2VvZiBXZWFrU2V0KSB7XG5cdFx0XHRjdXJyZW50ID0gcGFyc2VJbnQoY3VycmVudCk7XG5cdFx0XHR2YWxpZGF0ZUludGVnZXIoY3VycmVudCk7XG5cdFx0XHRhbmNob3IgPSBbLi4uc3ViamVjdF0/LltjdXJyZW50XTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBXZWFrUmVmID09PSBcImZ1bmN0aW9uXCIgJiYgc3ViamVjdCBpbnN0YW5jZW9mIFdlYWtSZWYpIHtcblx0XHRcdHRocm93IEVycm9yKFwidW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVwiKTtcblx0XHR9IGVsc2UgaWYgKGlzQXJyYXkoc3ViamVjdCkpIHtcblx0XHRcdGN1cnJlbnQgPSBwYXJzZUludChjdXJyZW50KTtcblx0XHRcdHZhbGlkYXRlSW50ZWdlcihjdXJyZW50KTtcblx0XHRcdGFuY2hvciA9IHN1YmplY3Q/LltjdXJyZW50XTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YW5jaG9yID0gc3ViamVjdD8uW2N1cnJlbnRdO1xuXHRcdH1cblxuXHRcdGlmIChpc09iamVjdChhbmNob3IpIHx8IGlzQXJyYXkoYW5jaG9yKSkge1xuXHRcdFx0cmV0dXJuIGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIGFuY2hvciwgcGFydHMuam9pbihERUxJTUlURVIpLCBjaGVjayk7XG5cdFx0fVxuXG5cdFx0aWYgKHBhcnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdHRocm93IEVycm9yKGB0aGUgam91cm5leSBpcyBub3QgYXQgaXRzIGVuZCAoJHtwYXJ0cy5qb2luKERFTElNSVRFUil9KWApO1xuXHRcdH1cblxuXHRcdGlmIChjaGVjayA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG5cdFx0XHRcdE9iamVjdC5nZXRQcm90b3R5cGVPZihzdWJqZWN0KSxcblx0XHRcdFx0Y3VycmVudCxcblx0XHRcdCk7XG5cblx0XHRcdGlmICghc3ViamVjdC5oYXNPd25Qcm9wZXJ0eShjdXJyZW50KSAmJiBkZXNjcmlwdG9yID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgRXJyb3IoXCJ1bmtub3duIHZhbHVlXCIpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBhbmNob3I7XG5cdH1cblxuXHR0aHJvdyBUeXBlRXJyb3IoYHVuc3VwcG9ydGVkIHR5cGUgJHt0eXBlb2Ygc3ViamVjdH1gKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHN1YmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfGFycmF5fSBwYXRoXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGpvdXJuZXkgaXMgbm90IGF0IGl0cyBlbmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzZXRWYWx1ZVZpYVBhdGgoc3ViamVjdCwgcGF0aCwgdmFsdWUpIHtcblx0aWYgKCEoaXNBcnJheShwYXRoKSB8fCBpc1N0cmluZyhwYXRoKSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIGVycm9yOiBwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXlcIik7XG5cdH1cblxuXHRsZXQgcGFydHM7XG5cdGlmIChpc0FycmF5KHBhdGgpKSB7XG5cdFx0aWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gc3ViamVjdDtcblx0XHR9XG5cblx0XHRwYXJ0cyA9IHBhdGg7XG5cdH0gZWxzZSB7XG5cdFx0cGFydHMgPSBwYXRoLnNwbGl0KERFTElNSVRFUik7XG5cdH1cblxuXHRsZXQgbGFzdCA9IHBhcnRzLnBvcCgpO1xuXHRjb25zdCBzdWJwYXRoID0gcGFydHMuam9pbihERUxJTUlURVIpO1xuXG5cdGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cdGxldCBjdXJyZW50ID0gc3VicGF0aDtcblx0d2hpbGUgKHRydWUpIHtcblx0XHR0cnkge1xuXHRcdFx0Z2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgc3ViamVjdCwgY3VycmVudCwgdHJ1ZSk7XG5cdFx0XHRicmVhaztcblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0c3RhY2sucHVzaChjdXJyZW50KTtcblx0XHRwYXJ0cy5wb3AoKTtcblx0XHRjdXJyZW50ID0gcGFydHMuam9pbihERUxJTUlURVIpO1xuXG5cdFx0aWYgKGN1cnJlbnQgPT09IFwiXCIpIGJyZWFrO1xuXHR9XG5cblx0d2hpbGUgKCFzdGFjay5pc0VtcHR5KCkpIHtcblx0XHRjdXJyZW50ID0gc3RhY2sucG9wKCk7XG5cdFx0bGV0IG9iaiA9IHt9O1xuXG5cdFx0aWYgKCFzdGFjay5pc0VtcHR5KCkpIHtcblx0XHRcdGNvbnN0IG4gPSBzdGFjay5wZWVrKCkuc3BsaXQoREVMSU1JVEVSKS5wb3AoKTtcblx0XHRcdGlmIChpc0ludGVnZXIocGFyc2VJbnQobikpKSB7XG5cdFx0XHRcdG9iaiA9IFtdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHNldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHN1YmplY3QsIGN1cnJlbnQsIG9iaik7XG5cdH1cblxuXHRjb25zdCBhbmNob3IgPSBnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCBzdWJqZWN0LCBzdWJwYXRoKTtcblxuXHRpZiAoIShpc09iamVjdChzdWJqZWN0KSB8fCBpc0FycmF5KHN1YmplY3QpKSkge1xuXHRcdHRocm93IFR5cGVFcnJvcihgdW5zdXBwb3J0ZWQgdHlwZTogJHt0eXBlb2Ygc3ViamVjdH1gKTtcblx0fVxuXG5cdGlmIChhbmNob3IgaW5zdGFuY2VvZiBNYXAgfHwgYW5jaG9yIGluc3RhbmNlb2YgV2Vha01hcCkge1xuXHRcdGFuY2hvci5zZXQobGFzdCwgdmFsdWUpO1xuXHR9IGVsc2UgaWYgKGFuY2hvciBpbnN0YW5jZW9mIFNldCB8fCBhbmNob3IgaW5zdGFuY2VvZiBXZWFrU2V0KSB7XG5cdFx0YW5jaG9yLmFwcGVuZCh2YWx1ZSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIFdlYWtSZWYgPT09IFwiZnVuY3Rpb25cIiAmJiBhbmNob3IgaW5zdGFuY2VvZiBXZWFrUmVmKSB7XG5cdFx0dGhyb3cgRXJyb3IoXCJ1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXCIpO1xuXHR9IGVsc2UgaWYgKGlzQXJyYXkoYW5jaG9yKSkge1xuXHRcdGxhc3QgPSBwYXJzZUludChsYXN0KTtcblx0XHR2YWxpZGF0ZUludGVnZXIobGFzdCk7XG5cdFx0YXNzaWduUHJvcGVydHkoYW5jaG9yLCBsYXN0LCB2YWx1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0YXNzaWduUHJvcGVydHkoYW5jaG9yLCBsYXN0LCB2YWx1ZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtvYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICovXG5mdW5jdGlvbiBhc3NpZ25Qcm9wZXJ0eShvYmplY3QsIGtleSwgdmFsdWUpIHtcblx0aWYgKCFvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdG9iamVjdFtrZXldID0gdmFsdWU7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRkZWxldGUgb2JqZWN0W2tleV07XG5cdH1cblxuXHRvYmplY3Rba2V5XSA9IHZhbHVlO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gc3ViamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgam91cm5leSBpcyBub3QgYXQgaXRzIGVuZFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWxldGVWYWx1ZVZpYVBhdGgoc3ViamVjdCwgcGF0aCkge1xuXHRpZiAoIShpc0FycmF5KHBhdGgpIHx8IGlzU3RyaW5nKHBhdGgpKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInR5cGUgZXJyb3I6IHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBhbiBhcnJheVwiKTtcblx0fVxuXG5cdGxldCBwYXJ0cztcblx0aWYgKGlzQXJyYXkocGF0aCkpIHtcblx0XHRpZiAocGF0aC5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBzdWJqZWN0O1xuXHRcdH1cblxuXHRcdHBhcnRzID0gcGF0aDtcblx0fSBlbHNlIHtcblx0XHRwYXJ0cyA9IHBhdGguc3BsaXQoREVMSU1JVEVSKTtcblx0fVxuXG5cdGxldCBsYXN0ID0gcGFydHMucG9wKCk7XG5cdGNvbnN0IHN1YnBhdGggPSBwYXJ0cy5qb2luKERFTElNSVRFUik7XG5cblx0Y29uc3QgYW5jaG9yID0gZ2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgc3ViamVjdCwgc3VicGF0aCk7XG5cblx0aWYgKGFuY2hvciBpbnN0YW5jZW9mIE1hcCkge1xuXHRcdGFuY2hvci5kZWxldGUobGFzdCk7XG5cdH0gZWxzZSBpZiAoXG5cdFx0YW5jaG9yIGluc3RhbmNlb2YgU2V0IHx8XG5cdFx0YW5jaG9yIGluc3RhbmNlb2YgV2Vha01hcCB8fFxuXHRcdGFuY2hvciBpbnN0YW5jZW9mIFdlYWtTZXQgfHxcblx0XHQodHlwZW9mIFdlYWtSZWYgPT09IFwiZnVuY3Rpb25cIiAmJiBhbmNob3IgaW5zdGFuY2VvZiBXZWFrUmVmKVxuXHQpIHtcblx0XHR0aHJvdyBFcnJvcihcInVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcIik7XG5cdH0gZWxzZSBpZiAoaXNBcnJheShhbmNob3IpKSB7XG5cdFx0bGFzdCA9IHBhcnNlSW50KGxhc3QpO1xuXHRcdHZhbGlkYXRlSW50ZWdlcihsYXN0KTtcblx0XHRkZWxldGUgYW5jaG9yW2xhc3RdO1xuXHR9IGVsc2Uge1xuXHRcdGRlbGV0ZSBhbmNob3JbbGFzdF07XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGdldEdsb2JhbCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc0Z1bmN0aW9uLCBpc09iamVjdCwgaXNQcmltaXRpdmUgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB0eXBlT2YgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZW9mLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IGNsb25lIH07XG5cbi8qKlxuICogV2l0aCB0aGlzIGZ1bmN0aW9uLCBvYmplY3RzIGNhbiBiZSBjbG9uZWQuXG4gKiBUaGUgZW50aXJlIG9iamVjdCB0cmVlIGlzIHJ1biB0aHJvdWdoLlxuICpcbiAqIFByb3h5LCBFbGVtZW50LCBIVE1MRG9jdW1lbnQgYW5kIERvY3VtZW50RnJhZ21lbnQgaW5zdGFuY2VzIGFyZSBub3QgY2xvbmVkLlxuICogR2xvYmFsIG9iamVjdHMgc3VjaCBhcyB3aW5kb3dzIGFyZSBhbHNvIG5vdCBjbG9uZWQsXG4gKlxuICogSWYgYW4gb2JqZWN0IGhhcyBhIG1ldGhvZCBgZ2V0Q2xvbmUoKWAsIHRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY3JlYXRlIHRoZSBjbG9uZS5cbiAqXG4gKiBAcGFyYW0geyp9IG9iaiBvYmplY3QgdG8gYmUgY2xvbmVkXG4gKiBAcmV0dXJucyB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IHVuYWJsZSB0byBjbG9uZSBvYmohIGl0cyB0eXBlIGlzbid0IHN1cHBvcnRlZC5cbiAqL1xuZnVuY3Rpb24gY2xvbmUob2JqKSB7XG5cdC8vIHR5cGVvZiBudWxsIHJlc3VsdHMgaW4gJ29iamVjdCcuICBodHRwczovLzJhbGl0eS5jb20vMjAxMy8xMC90eXBlb2YtbnVsbC5odG1sXG5cdGlmIChudWxsID09PSBvYmopIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0Ly8gSGFuZGxlIHRoZSB0d28gc2ltcGxlIHR5cGVzLCBudWxsIGFuZCB1bmRlZmluZWRcblx0aWYgKGlzUHJpbWl0aXZlKG9iaikpIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0Ly8gSGFuZGxlIHRoZSB0d28gc2ltcGxlIHR5cGVzLCBudWxsIGFuZCB1bmRlZmluZWRcblx0aWYgKGlzRnVuY3Rpb24ob2JqKSkge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvLyBIYW5kbGUgQXJyYXlcblx0aWYgKGlzQXJyYXkob2JqKSkge1xuXHRcdGNvbnN0IGNvcHkgPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMCwgbGVuID0gb2JqLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRjb3B5W2ldID0gY2xvbmUob2JqW2ldKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29weTtcblx0fVxuXG5cdGlmIChpc09iamVjdChvYmopKSB7XG5cdFx0Ly8gSGFuZGxlIERhdGVcblx0XHRpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0Y29uc3QgY29weSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRjb3B5LnNldFRpbWUob2JqLmdldFRpbWUoKSk7XG5cdFx0XHRyZXR1cm4gY29weTtcblx0XHR9XG5cblx0XHQvKiogRG8gbm90IGNsb25lIERPTSBub2RlcyAqL1xuXHRcdGlmICh0eXBlb2YgRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogaW5zdGFuY2VvZiBFbGVtZW50KSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2YgSFRNTERvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIG9iaiBpbnN0YW5jZW9mIEhUTUxEb2N1bWVudClcblx0XHRcdHJldHVybiBvYmo7XG5cdFx0aWYgKFxuXHRcdFx0dHlwZW9mIERvY3VtZW50RnJhZ21lbnQgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdG9iaiBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnRcblx0XHQpXG5cdFx0XHRyZXR1cm4gb2JqO1xuXG5cdFx0LyoqIERvIG5vdCBjbG9uZSBnbG9iYWwgb2JqZWN0cyAqL1xuXHRcdGlmIChvYmogPT09IGdldEdsb2JhbCgpKSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2YgZ2xvYmFsQ29udGV4dCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogPT09IGdsb2JhbENvbnRleHQpXG5cdFx0XHRyZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIG9iaiA9PT0gd2luZG93KSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqID09PSBkb2N1bWVudCkgcmV0dXJuIG9iajtcblx0XHRpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogPT09IG5hdmlnYXRvcikgcmV0dXJuIG9iajtcblx0XHRpZiAodHlwZW9mIEpTT04gIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqID09PSBKU09OKSByZXR1cm4gb2JqO1xuXG5cdFx0Ly8gSGFuZGxlIFByb3h5LU9iamVjdFxuXHRcdHRyeSB7XG5cdFx0XHQvLyB0cnkvY2F0Y2ggYmVjYXVzZSBwb3NzaWJsZTogVHlwZUVycm9yOiBGdW5jdGlvbiBoYXMgbm9uLW9iamVjdCBwcm90b3R5cGUgJ3VuZGVmaW5lZCcgaW4gaW5zdGFuY2VvZiBjaGVja1xuXHRcdFx0aWYgKG9iaiBpbnN0YW5jZW9mIFByb3h5KSB7XG5cdFx0XHRcdHJldHVybiBvYmo7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdHJldHVybiBjbG9uZU9iamVjdChvYmopO1xuXHR9XG5cblx0dGhyb3cgbmV3IEVycm9yKFwidW5hYmxlIHRvIGNsb25lIG9iaiEgaXRzIHR5cGUgaXNuJ3Qgc3VwcG9ydGVkLlwiKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9ialxuICogQHJldHVybnMge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNsb25lT2JqZWN0KG9iaikge1xuXHR2YWxpZGF0ZU9iamVjdChvYmopO1xuXG5cdGNvbnN0IGZrdCA9IG9iaj8uW1wiY29uc3RydWN0b3JcIl07XG5cblx0LyoqIE9iamVjdCBoYXMgY2xvbmUgbWV0aG9kICovXG5cdGlmICh0eXBlT2YoZmt0KSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0Y29uc3QgcHJvdG90eXBlID0gZmt0Py5wcm90b3R5cGU7XG5cdFx0aWYgKHR5cGVvZiBwcm90b3R5cGUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0cHJvdG90eXBlLmhhc093blByb3BlcnR5KFwiZ2V0Q2xvbmVcIikgJiZcblx0XHRcdFx0dHlwZU9mKG9iai5nZXRDbG9uZSkgPT09IFwiZnVuY3Rpb25cIlxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBvYmouZ2V0Q2xvbmUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRsZXQgY29weSA9IHt9O1xuXHRpZiAoXG5cdFx0dHlwZW9mIG9iai5jb25zdHJ1Y3RvciA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIG9iai5jb25zdHJ1Y3Rvci5jYWxsID09PSBcImZ1bmN0aW9uXCJcblx0KSB7XG5cdFx0Y29weSA9IG5ldyBvYmouY29uc3RydWN0b3IoKTtcblx0fVxuXG5cdGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuXHRcdGlmICghb2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChpc1ByaW1pdGl2ZShvYmpba2V5XSkpIHtcblx0XHRcdGNvcHlba2V5XSA9IG9ialtrZXldO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29weVtrZXldID0gY2xvbmUob2JqW2tleV0pO1xuXHR9XG5cblx0cmV0dXJuIGNvcHk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGNsb25lIH0gZnJvbSBcIi4uL3V0aWwvY2xvbmUubWpzXCI7XG5cbmV4cG9ydCB7IExvY2FsZSwgcGFyc2VMb2NhbGUgfTtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5JMThuXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwcm9wZXJ0aWVzU3ltYm9sID0gU3ltYm9sKFwicHJvcGVydGllc1wiKTtcblxuLyoqXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQG1lbWJlck9mIE1vbnN0ZXIuSTE4blxuICovXG5jb25zdCBsb2NhbGVTdHJpbmdTeW1ib2wgPSBTeW1ib2woXCJsb2NhbGVTdHJpbmdcIik7XG5cbi8qKlxuICogVGhlIExvY2FsZSBjbGFzcyBpcyBhIGJhc2UgY2xhc3MgZm9yIHRoZSBsYW5ndWFnZSBjbGFzc2VzLlxuICpcbiAqIFJGQ1xuICpcbiAqIGBgYFxuICogQSBMYW5ndWFnZS1UYWcgY29uc2lzdHMgb2Y6XG4gKiBsYW5ndGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBnZW5lcmF0ZWQgdGFnXG4gKiAgICAgICAgICAgLW9yLSBwcml2YXRlLXVzZSAgICAgICAgOyBhIHByaXZhdGUgdXNlIHRhZ1xuICpcbiAqIGxhbmd0YWcgICAgICAgPSAobGFuZ3VhZ2VcbiAqICAgICAgICAgICAgICAgICAgICBbXCItXCIgc2NyaXB0XVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiByZWdpb25dXG4gKiAgICAgICAgICAgICAgICAgICAgKihcIi1cIiB2YXJpYW50KVxuICogICAgICAgICAgICAgICAgICAgICooXCItXCIgZXh0ZW5zaW9uKVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiBwcml2YXRldXNlXSlcbiAqXG4gKiBsYW5ndWFnZSAgICAgID0gXCJlblwiLCBcImFsZVwiLCBvciBhIHJlZ2lzdGVyZWQgdmFsdWVcbiAqXG4gKiBzY3JpcHQgICAgICAgID0gXCJMYXRuXCIsIFwiQ3lybFwiLCBcIkhhbnRcIiBJU08gMTU5MjQgY29kZXNcbiAqXG4gKiByZWdpb24gICAgICAgID0gXCJVU1wiLCBcIkNTXCIsIFwiRlJcIiBJU08gMzE2NiBjb2Rlc1xuICogICAgICAgICAgICAgICAgIFwiNDE5XCIsIFwiMDE5XCIsICBvciBVTiBNLjQ5IGNvZGVzXG4gKlxuICogdmFyaWFudCAgICAgICA9IFwicm96YWpcIiwgXCJuZWRpc1wiLCBcIjE5OTZcIiwgbXVsdGlwbGUgc3VidGFncyBjYW4gYmUgdXNlZCBpbiBhIHRhZ1xuICpcbiAqIGV4dGVuc2lvbiAgICAgPSBzaW5nbGUgbGV0dGVyIGZvbGxvd2VkIGJ5IGFkZGl0aW9uYWwgc3VidGFnczsgbW9yZSB0aGFuIG9uZSBleHRlbnNpb25cbiAqICAgICAgICAgICAgICAgICBtYXkgYmUgdXNlZCBpbiBhIGxhbmd1YWdlIHRhZ1xuICpcbiAqIHByaXZhdGUtdXNlICAgPSBcIngtXCIgZm9sbG93ZWQgYnkgYWRkaXRpb25hbCBzdWJ0YWdzLCBhcyBtYW55IGFzIGFyZSByZXF1aXJlZFxuICogICAgICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGVzZSBjYW4gc3RhcnQgYSB0YWcgb3IgYXBwZWFyIGF0IHRoZSBlbmQgKGJ1dCBub3RcbiAqICAgICAgICAgICAgICAgICBpbiB0aGUgbWlkZGxlKVxuICogYGBgXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuSTE4blxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzMwNjZcbiAqL1xuY2xhc3MgTG9jYWxlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2Vcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtyZWdpb25dXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbc2NyaXB0XVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW3ZhcmlhbnRzXVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW2V4dGxhbmddXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbcHJpdmF0ZVVzZV1cblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGxvY2FsZVxuXHQgKi9cblx0Y29uc3RydWN0b3IobGFuZ3VhZ2UsIHJlZ2lvbiwgc2NyaXB0LCB2YXJpYW50cywgZXh0bGFuZywgcHJpdmF0ZVVzZSkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzW3Byb3BlcnRpZXNTeW1ib2xdID0ge1xuXHRcdFx0bGFuZ3VhZ2U6IGxhbmd1YWdlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyhsYW5ndWFnZSksXG5cdFx0XHRzY3JpcHQ6IHNjcmlwdCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdmFsaWRhdGVTdHJpbmcoc2NyaXB0KSxcblx0XHRcdHJlZ2lvbjogcmVnaW9uID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyhyZWdpb24pLFxuXHRcdFx0dmFyaWFudHM6IHZhcmlhbnRzID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyh2YXJpYW50cyksXG5cdFx0XHRleHRsYW5nOiBleHRsYW5nID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyhleHRsYW5nKSxcblx0XHRcdHByaXZhdGVVc2U6XG5cdFx0XHRcdHByaXZhdGVVc2UgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHZhbGlkYXRlU3RyaW5nKHByaXZhdGVVc2UpLFxuXHRcdH07XG5cblx0XHRjb25zdCBzID0gW107XG5cdFx0aWYgKGxhbmd1YWdlICE9PSB1bmRlZmluZWQpIHMucHVzaChsYW5ndWFnZSk7XG5cdFx0aWYgKHNjcmlwdCAhPT0gdW5kZWZpbmVkKSBzLnB1c2goc2NyaXB0KTtcblx0XHRpZiAocmVnaW9uICE9PSB1bmRlZmluZWQpIHMucHVzaChyZWdpb24pO1xuXHRcdGlmICh2YXJpYW50cyAhPT0gdW5kZWZpbmVkKSBzLnB1c2godmFyaWFudHMpO1xuXHRcdGlmIChleHRsYW5nICE9PSB1bmRlZmluZWQpIHMucHVzaChleHRsYW5nKTtcblx0XHRpZiAocHJpdmF0ZVVzZSAhPT0gdW5kZWZpbmVkKSBzLnB1c2gocHJpdmF0ZVVzZSk7XG5cblx0XHRpZiAocy5sZW5ndGggPT09IDApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGxvY2FsZVwiKTtcblx0XHR9XG5cblx0XHR0aGlzW2xvY2FsZVN0cmluZ1N5bWJvbF0gPSBzLmpvaW4oXCItXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2kxOG4vbG9jYWxlQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXQgbG9jYWxlU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzW2xvY2FsZVN0cmluZ1N5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldCBsYW5ndWFnZSgpIHtcblx0XHRyZXR1cm4gdGhpc1twcm9wZXJ0aWVzU3ltYm9sXS5sYW5ndWFnZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0IHJlZ2lvbigpIHtcblx0XHRyZXR1cm4gdGhpc1twcm9wZXJ0aWVzU3ltYm9sXS5yZWdpb247XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldCBzY3JpcHQoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcHJvcGVydGllc1N5bWJvbF0uc2NyaXB0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXQgdmFyaWFudHMoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcHJvcGVydGllc1N5bWJvbF0udmFyaWFudHM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldCBleHRsYW5nKCkge1xuXHRcdHJldHVybiB0aGlzW3Byb3BlcnRpZXNTeW1ib2xdLmV4dGxhbmc7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldCBwcml2YXRlVXNlKCkge1xuXHRcdHJldHVybiB0aGlzW3Byb3BlcnRpZXNTeW1ib2xdLnByaXZhdGVWYWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gYCR7dGhpcy5sb2NhbGVTdHJpbmd9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgc3RydWN0dXJlIGhhcyB0aGUgZm9sbG93aW5nOiBsYW5ndWFnZSwgc2NyaXB0LCByZWdpb24sIHZhcmlhbnRzLCBleHRsYW5nLCBwcml2YXRlVXNlXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuSTE4bi5Mb2NhbGVNYXB9XG5cdCAqL1xuXHRnZXRNYXAoKSB7XG5cdFx0cmV0dXJuIGNsb25lKHRoaXNbcHJvcGVydGllc1N5bWJvbF0pO1xuXHR9XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTG9jYWxlTWFwXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGFuZ3VhZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzY3JpcHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWdpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YXJpYW50c1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGV4dGxhbmdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcml2YXRlVXNlXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5JMThuXG4gKi9cblxuLyoqXG4gKiBQYXJzZSBsb2NhbCBhY2NvcmRpbmcgdG8gcmZjNDY0NiBzdGFuZGFyZFxuICpcbiAqIExpbWl0YXRpb25zOiBUaGUgcmVnZXggY2Fubm90IGhhbmRsZSBtdWx0aXBsZSB2YXJpYW50cyBvciBwcml2YXRlLlxuICpcbiAqIFlvdSBjYW4gY2FsbCB0aGUgbWV0aG9kIHZpYSB0aGlzIGZ1bmN0aW9uIGluZGl2aWR1YWxseTpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQge2NyZWF0ZUxvY2FsZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvaTE4bi9sb2NhbGUubWpzJztcbiAqIGNyZWF0ZUxvY2FsZSgpXG4gKiBgYGBcbiAqXG4gKiBSRkNcbiAqXG4gKiBgYGBcbiAqICAgVGhlIHN5bnRheCBvZiB0aGUgbGFuZ3VhZ2UgdGFnIGluIEFCTkYgW1JGQzQyMzRdIGlzOlxuICpcbiAqICAgTGFuZ3VhZ2UtVGFnICA9IGxhbmd0YWdcbiAqICAgICAgICAgICAgICAgICAvIHByaXZhdGV1c2UgICAgICAgICAgICAgOyBwcml2YXRlIHVzZSB0YWdcbiAqICAgICAgICAgICAgICAgICAvIGdyYW5kZmF0aGVyZWQgICAgICAgICAgOyBncmFuZGZhdGhlcmVkIHJlZ2lzdHJhdGlvbnNcbiAqXG4gKiAgIGxhbmd0YWcgICAgICAgPSAobGFuZ3VhZ2VcbiAqICAgICAgICAgICAgICAgICAgICBbXCItXCIgc2NyaXB0XVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiByZWdpb25dXG4gKiAgICAgICAgICAgICAgICAgICAgKihcIi1cIiB2YXJpYW50KVxuICogICAgICAgICAgICAgICAgICAgICooXCItXCIgZXh0ZW5zaW9uKVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiBwcml2YXRldXNlXSlcbiAqXG4gKiAgIGxhbmd1YWdlICAgICAgPSAoMiozQUxQSEEgWyBleHRsYW5nIF0pIDsgc2hvcnRlc3QgSVNPIDYzOSBjb2RlXG4gKiAgICAgICAgICAgICAgICAgLyA0QUxQSEEgICAgICAgICAgICAgICAgIDsgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2VcbiAqICAgICAgICAgICAgICAgICAvIDUqOEFMUEhBICAgICAgICAgICAgICAgOyByZWdpc3RlcmVkIGxhbmd1YWdlIHN1YnRhZ1xuICpcbiAqICAgZXh0bGFuZyAgICAgICA9ICozKFwiLVwiIDNBTFBIQSkgICAgICAgICA7IHJlc2VydmVkIGZvciBmdXR1cmUgdXNlXG4gKlxuICogICBzY3JpcHQgICAgICAgID0gNEFMUEhBICAgICAgICAgICAgICAgICA7IElTTyAxNTkyNCBjb2RlXG4gKlxuICogICByZWdpb24gICAgICAgID0gMkFMUEhBICAgICAgICAgICAgICAgICA7IElTTyAzMTY2IGNvZGVcbiAqICAgICAgICAgICAgICAgICAvIDNESUdJVCAgICAgICAgICAgICAgICAgOyBVTiBNLjQ5IGNvZGVcbiAqXG4gKiAgIHZhcmlhbnQgICAgICAgPSA1KjhhbHBoYW51bSAgICAgICAgICAgIDsgcmVnaXN0ZXJlZCB2YXJpYW50c1xuICogICAgICAgICAgICAgICAgIC8gKERJR0lUIDNhbHBoYW51bSlcbiAqXG4gKiAgIGV4dGVuc2lvbiAgICAgPSBzaW5nbGV0b24gMSooXCItXCIgKDIqOGFscGhhbnVtKSlcbiAqXG4gKiAgIHNpbmdsZXRvbiAgICAgPSAleDQxLTU3IC8gJXg1OS01QSAvICV4NjEtNzcgLyAleDc5LTdBIC8gRElHSVRcbiAqICAgICAgICAgICAgICAgICA7IFwiYVwiLVwid1wiIC8gXCJ5XCItXCJ6XCIgLyBcIkFcIi1cIldcIiAvIFwiWVwiLVwiWlwiIC8gXCIwXCItXCI5XCJcbiAqICAgICAgICAgICAgICAgICA7IFNpbmdsZSBsZXR0ZXJzOiB4L1ggaXMgcmVzZXJ2ZWQgZm9yIHByaXZhdGUgdXNlXG4gKlxuICogICBwcml2YXRldXNlICAgID0gKFwieFwiL1wiWFwiKSAxKihcIi1cIiAoMSo4YWxwaGFudW0pKVxuICpcbiAqICAgZ3JhbmRmYXRoZXJlZCA9IDEqM0FMUEhBIDEqMihcIi1cIiAoMio4YWxwaGFudW0pKVxuICogICAgICAgICAgICAgICAgICAgOyBncmFuZGZhdGhlcmVkIHJlZ2lzdHJhdGlvblxuICogICAgICAgICAgICAgICAgICAgOyBOb3RlOiBpIGlzIHRoZSBvbmx5IHNpbmdsZXRvblxuICogICAgICAgICAgICAgICAgICAgOyB0aGF0IHN0YXJ0cyBhIGdyYW5kZmF0aGVyZWQgdGFnXG4gKlxuICogICBhbHBoYW51bSAgICAgID0gKEFMUEhBIC8gRElHSVQpICAgICAgIDsgbGV0dGVycyBhbmQgbnVtYmVyc1xuICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgRmlndXJlIDE6IExhbmd1YWdlIFRhZyBBQk5GXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYWxlXG4gKiBAcmV0dXJucyB7TG9jYWxlfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuSTE4blxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBsb2NhbGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VMb2NhbGUobG9jYWxlKSB7XG5cdGxvY2FsZSA9IHZhbGlkYXRlU3RyaW5nKGxvY2FsZSkucmVwbGFjZSgvXy9nLCBcIi1cIik7XG5cblx0bGV0IGxhbmd1YWdlO1xuXHRsZXQgcmVnaW9uO1xuXHRsZXQgdmFyaWFudHM7XG5cdGxldCBwYXJ0cztcblx0bGV0IHNjcmlwdDtcblx0bGV0IGV4dGxhbmc7XG5cdGNvbnN0IHJlZ2V4UmVndWxhciA9XG5cdFx0XCIoYXJ0LWxvamJhbnxjZWwtZ2F1bGlzaHxuby1ib2t8bm8tbnlufHpoLWd1b3l1fHpoLWhha2thfHpoLW1pbnx6aC1taW4tbmFufHpoLXhpYW5nKVwiO1xuXHRjb25zdCByZWdleElycmVndWxhciA9XG5cdFx0XCIoZW4tR0Itb2VkfGktYW1pfGktYm5ufGktZGVmYXVsdHxpLWVub2NoaWFufGktaGFrfGkta2xpbmdvbnxpLWx1eHxpLW1pbmdvfGktbmF2YWpvfGktcHdufGktdGFvfGktdGF5fGktdHN1fHNnbi1CRS1GUnxzZ24tQkUtTkx8c2duLUNILURFKVwiO1xuXHRjb25zdCByZWdleEdyYW5kZmF0aGVyZWQgPSBgKCR7cmVnZXhJcnJlZ3VsYXJ9fCR7cmVnZXhSZWd1bGFyfSlgO1xuXHRjb25zdCByZWdleFByaXZhdGVVc2UgPSBcIih4KC1bQS1aYS16MC05XXsxLDh9KSspXCI7XG5cdGNvbnN0IHJlZ2V4U2luZ2xldG9uID0gXCJbMC05QS1XWS1aYS13eS16XVwiO1xuXHRjb25zdCByZWdleEV4dGVuc2lvbiA9IGAoJHtyZWdleFNpbmdsZXRvbn0oLVtBLVphLXowLTldezIsOH0pKylgO1xuXHRjb25zdCByZWdleFZhcmlhbnQgPSBcIihbQS1aYS16MC05XXs1LDh9fFswLTldW0EtWmEtejAtOV17M30pXCI7XG5cdGNvbnN0IHJlZ2V4UmVnaW9uID0gXCIoW0EtWmEtel17Mn18WzAtOV17M30pXCI7XG5cdGNvbnN0IHJlZ2V4U2NyaXB0ID0gXCIoW0EtWmEtel17NH0pXCI7XG5cdGNvbnN0IHJlZ2V4RXh0bGFuZyA9IFwiKFtBLVphLXpdezN9KC1bQS1aYS16XXszfSl7MCwyfSlcIjtcblx0Y29uc3QgcmVnZXhMYW5ndWFnZSA9IGAoKFtBLVphLXpdezIsM30oLSR7cmVnZXhFeHRsYW5nfSk/KXxbQS1aYS16XXs0fXxbQS1aYS16XXs1LDh9KWA7XG5cdGNvbnN0IHJlZ2V4TGFuZ3RhZyA9IGAoJHtyZWdleExhbmd1YWdlfSgtJHtyZWdleFNjcmlwdH0pPygtJHtyZWdleFJlZ2lvbn0pPygtJHtyZWdleFZhcmlhbnR9KSooLSR7cmVnZXhFeHRlbnNpb259KSooLSR7cmVnZXhQcml2YXRlVXNlfSk/KWA7XG5cdGNvbnN0IHJlZ2V4TGFuZ3VhZ2VUYWcgPSBgXigke3JlZ2V4R3JhbmRmYXRoZXJlZH18JHtyZWdleExhbmd0YWd9fCR7cmVnZXhQcml2YXRlVXNlfSkkYDtcblx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHJlZ2V4TGFuZ3VhZ2VUYWcpO1xuXHRsZXQgbWF0Y2g7XG5cblx0aWYgKChtYXRjaCA9IHJlZ2V4LmV4ZWMobG9jYWxlKSkgIT09IG51bGwpIHtcblx0XHRpZiAobWF0Y2guaW5kZXggPT09IHJlZ2V4Lmxhc3RJbmRleCkge1xuXHRcdFx0cmVnZXgubGFzdEluZGV4Kys7XG5cdFx0fVxuXHR9XG5cblx0aWYgKG1hdGNoID09PSB1bmRlZmluZWQgfHwgbWF0Y2ggPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBsb2NhbGVcIik7XG5cdH1cblxuXHRpZiAobWF0Y2hbNl0gIT09IHVuZGVmaW5lZCkge1xuXHRcdGxhbmd1YWdlID0gbWF0Y2hbNl07XG5cblx0XHRwYXJ0cyA9IGxhbmd1YWdlLnNwbGl0KFwiLVwiKTtcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0bGFuZ3VhZ2UgPSBwYXJ0c1swXTtcblx0XHRcdGV4dGxhbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdH1cblxuXHRpZiAobWF0Y2hbMTRdICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZWdpb24gPSBtYXRjaFsxNF07XG5cdH1cblxuXHRpZiAobWF0Y2hbMTJdICE9PSB1bmRlZmluZWQpIHtcblx0XHRzY3JpcHQgPSBtYXRjaFsxMl07XG5cdH1cblxuXHRpZiAobWF0Y2hbMTZdICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YXJpYW50cyA9IG1hdGNoWzE2XTtcblx0fVxuXG5cdHJldHVybiBuZXcgTG9jYWxlKGxhbmd1YWdlLCByZWdpb24sIHNjcmlwdCwgdmFyaWFudHMsIGV4dGxhbmcpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgcGFyc2VMb2NhbGUgfSBmcm9tIFwiLi4vaTE4bi9sb2NhbGUubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gXCIuL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuXG5leHBvcnQgeyBnZXRMb2NhbGVPZkRvY3VtZW50IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IERFRkFVTFRfTEFOR1VBR0UgPSBcImVuXCI7XG5cbi8qKlxuICogV2l0aCB0aGlzIGZ1bmN0aW9uIHlvdSBjYW4gcmVhZCB0aGUgbGFuZ3VhZ2UgdmVyc2lvbiBzZXQgYnkgdGhlIGRvY3VtZW50LlxuICogRm9yIHRoaXMgdGhlIGF0dHJpYnV0ZSBgbGFuZ2AgaW4gdGhlIGh0bWwgdGFnIGlzIHJlYWQuIElmIG5vIGF0dHJpYnV0ZSBpcyBzZXQsIGBlbmAgaXMgdXNlZCBhcyBkZWZhdWx0LlxuICogQWx0ZXJuYXRpdmVseSwgdGhlIGxhbmd1YWdlIHZlcnNpb24gb2YgdGhlIGJyb3dzZXIgaXMgdXNlZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8aHRtbCBsYW5nPVwiZW5cIj5cbiAqIGBgYFxuICpcbiAqIFlvdSBjYW4gY2FsbCB0aGUgZnVuY3Rpb24gdmlhIGBnZXRMb2NhbGVPZkRvY3VtZW50KClgLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBsb2NhbGVcbiAqIEBzdW1tYXJ5IFRyaWVzIHRvIGRldGVybWluZSB0aGUgbG9jYWxlIHVzZWRcbiAqL1xuZnVuY3Rpb24gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdGNvbnN0IGh0bWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKTtcblx0aWYgKGh0bWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBodG1sLmhhc0F0dHJpYnV0ZShcImxhbmdcIikpIHtcblx0XHRjb25zdCBsb2NhbGUgPSBodG1sLmdldEF0dHJpYnV0ZShcImxhbmdcIik7XG5cdFx0aWYgKGxvY2FsZSkge1xuXHRcdFx0cmV0dXJuIG5ldyBwYXJzZUxvY2FsZShsb2NhbGUpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IG5hdmlnYXRvckxhbmd1YWdlID0gZ2V0TmF2aWdhdG9yTGFuZ3VhZ2UoKTtcblx0aWYgKG5hdmlnYXRvckxhbmd1YWdlKSB7XG5cdFx0cmV0dXJuIHBhcnNlTG9jYWxlKG5hdmlnYXRvckxhbmd1YWdlKTtcblx0fVxuXG5cdHJldHVybiBwYXJzZUxvY2FsZShERUZBVUxUX0xBTkdVQUdFKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR8Kn1cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05hdmlnYXRvci9sYW5ndWFnZVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTmF2aWdhdG9yL2xhbmd1YWdlc1xuICovXG5jb25zdCBnZXROYXZpZ2F0b3JMYW5ndWFnZSA9ICgpID0+IHtcblx0Y29uc3QgbmF2aWdhdG9yID0gZ2V0R2xvYmFsT2JqZWN0KFwibmF2aWdhdG9yXCIpO1xuXHRpZiAobmF2aWdhdG9yID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKG5hdmlnYXRvci5oYXNPd25Qcm9wZXJ0eShcImxhbmd1YWdlXCIpKSB7XG5cdFx0Y29uc3QgbGFuZ3VhZ2UgPSBuYXZpZ2F0b3IubGFuZ3VhZ2U7XG5cdFx0aWYgKHR5cGVvZiBsYW5ndWFnZSA9PT0gXCJzdHJpbmdcIiAmJiBsYW5ndWFnZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXR1cm4gbGFuZ3VhZ2U7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgbGFuZ3VhZ2VzID0gbmF2aWdhdG9yPy5sYW5ndWFnZXM7XG5cdGlmIChBcnJheS5pc0FycmF5KGxhbmd1YWdlcykgJiYgbGFuZ3VhZ2VzLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gbGFuZ3VhZ2VzWzBdO1xuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IElEIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbnRlZ2VyPn1cbiAqL1xuY29uc3QgaW50ZXJuYWxDb3VudGVyID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIFdpdGggdGhlIGlkIGNsYXNzLCBzZXF1ZW5jZXMgb2YgaWRzIGNhbiBiZSBjcmVhdGVkLiBmb3IgdGhpcyBwdXJwb3NlLCBhbiBpbnRlcm5hbCBjb3VudGVyIGlzIGluY3JlbWVudGVkIGZvciBlYWNoIHByZWZpeC5cbiAqIHRodXMsIHRoZSBmaXJzdCBpZCB3aXRoIHRoZSBwcmVmaXggYG15aWRgIHdpbGwgYmUgYG15aWQxYCBhbmQgdGhlIHNlY29uZCBpZCBgbXlpZDJgLlxuICogVGhlIGlkcyBhcmUgdGhlIHNhbWUgZm9yIGV2ZXJ5IGNhbGwsIGZvciBleGFtcGxlIG9uIGEgd2ViIHBhZ2UuXG4gKlxuICogU28gdGhlIGlkcyBjYW4gYWxzbyBiZSB1c2VkIGZvciBuYXZpZ2F0aW9uLiB5b3UganVzdCBoYXZlIHRvIHRha2UgY2FyZSB0aGF0IHRoZSBvcmRlciBzdGF5cyB0aGUgc2FtZS5cbiAqXG4gKiBBcyBvZiB2ZXJzaW9uIDEuNi4wIHRoZXJlIGlzIHRoZSBuZXcgUmFuZG9tSUQuIHRoaXMgSUQgY2xhc3MgaXMgY29udGludW91cyBmcm9tIG5vdyBvbi5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAc3VtbWFyeSBBdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZiBpZHNcbiAqL1xuY2xhc3MgSUQgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIGNyZWF0ZSBuZXcgaWQgd2l0aCBwcmVmaXhcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuXHQgKi9cblx0Y29uc3RydWN0b3IocHJlZml4KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cHJlZml4ID0gXCJpZFwiO1xuXHRcdH1cblxuXHRcdHZhbGlkYXRlU3RyaW5nKHByZWZpeCk7XG5cblx0XHRpZiAoIWludGVybmFsQ291bnRlci5oYXMocHJlZml4KSkge1xuXHRcdFx0aW50ZXJuYWxDb3VudGVyLnNldChwcmVmaXgsIDEpO1xuXHRcdH1cblxuXHRcdGxldCBjb3VudCA9IGludGVybmFsQ291bnRlci5nZXQocHJlZml4KTtcblx0XHR0aGlzLmlkID0gcHJlZml4ICsgY291bnQ7XG5cblx0XHRpbnRlcm5hbENvdW50ZXIuc2V0KHByZWZpeCwgKytjb3VudCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuaWQ7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBCYXNlV2l0aE9wdGlvbnMgfTtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBiYXNlIGNsYXNzIHdpdGggb3B0aW9ucyBmcm9tIHdoaWNoIHNvbWUgbW9uc3RlciBjbGFzc2VzIGFyZSBkZXJpdmVkLlxuICpcbiAqIFRoaXMgY2xhc3MgaXMgYWN0dWFsbHkgb25seSB1c2VkIGFzIGEgYmFzZSBjbGFzcy5cbiAqXG4gKiBDbGFzc2VzIHRoYXQgcmVxdWlyZSB0aGUgcG9zc2liaWxpdHkgb2Ygb3B0aW9ucyBjYW4gYmUgZGVyaXZlZCBkaXJlY3RseSBmcm9tIHRoaXMgY2xhc3MuXG4gKiBEZXJpdmVkIGNsYXNzZXMgYWxtb3N0IGFsd2F5cyBvdmVycmlkZSB0aGUgYGRlZmF1bGAgZ2V0dGVyIHdpdGggdGhlaXIgb3duIHZhbHVlcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvYmFzZXdpdGhvcHRpb25zLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEBkZXByZWNhdGVkIHNpbmNlIDMuMTUuMCB1c2Uge0BsaW5rIE1vbnN0ZXIuVHlwZXMuQmFzZX0gd2l0aCB7QGxpbmsgTW9uc3Rlci5UeXBlcy5lcXVpcFdpdGhJbnRlcm5hbH0gaW5zdGVhZC5cbiAqL1xuY2xhc3MgQmFzZVdpdGhPcHRpb25zIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb25zID0ge307XG5cdFx0fVxuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSBleHRlbmQoe30sIHRoaXMuZGVmYXVsdHMsIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGdldHRlciBwcm92aWRlcyB0aGUgb3B0aW9ucy4gRGVyaXZlZCBjbGFzc2VzIG92ZXJ3cml0ZVxuXHQgKiB0aGlzIGdldHRlciB3aXRoIHRoZWlyIG93biB2YWx1ZXMuIEl0IGlzIGdvb2Qga2FybWEgdG8gYWx3YXlzIGluY2x1ZGVcblx0ICogdGhlIHZhbHVlcyBmcm9tIHRoZSBwYXJlbnQgY2xhc3MuXG5cdCAqXG5cdCAqIGBgYGphdmFzY3JpcHRcblx0ICogZ2V0IGRlZmF1bHRzKCkge1xuXHQgKiAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdCAqICAgICAgICAgbXlrZXk6IHRydWVcblx0ICogICAgIH0pO1xuXHQgKiB9XG5cdCAqXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtvYmplY3R9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIG5lc3RlZCBvcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgYnkgcGF0aCBgYS5iLmNgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqIEBzaW5jZSAxLjEwLjBcblx0ICovXG5cdGdldE9wdGlvbihwYXRoLCBkZWZhdWx0VmFsdWUpIHtcblx0XHRsZXQgdmFsdWU7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFsdWUgPSBuZXcgUGF0aGZpbmRlcih0aGlzW2ludGVybmFsU3ltYm9sXSkuZ2V0VmlhKHBhdGgpO1xuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGhhc09iamVjdExpbmssXG5cdGdldExpbmtlZE9iamVjdHMsXG5cdGFkZFRvT2JqZWN0TGluayxcbn0gZnJvbSBcIi4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0TG9jYWxlT2ZEb2N1bWVudCB9IGZyb20gXCIuLi9kb20vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgQmFzZVdpdGhPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2V3aXRob3B0aW9ucy5tanNcIjtcbmltcG9ydCB7IExvY2FsZSB9IGZyb20gXCIuL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IFRyYW5zbGF0aW9ucyB9IGZyb20gXCIuL3RyYW5zbGF0aW9ucy5tanNcIjtcblxuZXhwb3J0IHsgUHJvdmlkZXIsIHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wgfTtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5JMThuXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy45LjBcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvaTE4bi90cmFuc2xhdGlvbnNAQGxpbmtcIixcbik7XG5cbi8qKlxuICogQSBwcm92aWRlciBtYWtlcyBhIHRyYW5zbGF0aW9uIG9iamVjdCBhdmFpbGFibGUuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuSTE4blxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzMDY2fVxuICovXG5jbGFzcyBQcm92aWRlciBleHRlbmRzIEJhc2VXaXRoT3B0aW9ucyB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL3Byb3ZpZGVyQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0xvY2FsZXxzdHJpbmd9IGxvY2FsZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0Z2V0VHJhbnNsYXRpb25zKGxvY2FsZSkge1xuXHRcdGlmIChsb2NhbGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXNvbHZlKG5ldyBUcmFuc2xhdGlvbnMobG9jYWxlKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0xvY2FsZXxzdHJpbmd9IGxvY2FsZVxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG5cdCAqIEByZXR1cm4ge1Byb3ZpZGVyfVxuXHQgKi9cblx0YXNzaWduVG9FbGVtZW50KGxvY2FsZSwgZWxlbWVudCkge1xuXHRcdGlmIChsb2NhbGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdH1cblxuXHRcdGlmICghKGxvY2FsZSBpbnN0YW5jZW9mIExvY2FsZSkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkxvY2FsZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgTG9jYWxlXCIpO1xuXHRcdH1cblxuXHRcdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRcdGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKTtcblx0XHR9XG5cblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJFbGVtZW50IGlzIG5vdCBhbiBIVE1MRWxlbWVudFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGlvbnMobG9jYWxlKS50aGVuKChvYmopID0+IHtcblx0XHRcdGxldCB0cmFuc2xhdGlvbnMgPSBudWxsO1xuXHRcdFx0aWYgKGhhc09iamVjdExpbmsoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbCkpIHtcblx0XHRcdFx0Y29uc3Qgb2JqZWN0cyA9IGdldExpbmtlZE9iamVjdHMoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbCk7XG5cdFx0XHRcdGZvciAoY29uc3QgbyBvZiBvYmplY3RzKSB7XG5cdFx0XHRcdFx0aWYgKG8gaW5zdGFuY2VvZiBUcmFuc2xhdGlvbnMpIHtcblx0XHRcdFx0XHRcdHRyYW5zbGF0aW9ucyA9IG87XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoISh0cmFuc2xhdGlvbnMgaW5zdGFuY2VvZiBUcmFuc2xhdGlvbnMpKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiT2JqZWN0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUcmFuc2xhdGlvbnNcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cmFuc2xhdGlvbnMuYXNzaWduVHJhbnNsYXRpb25zKG9iaik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhZGRUb09iamVjdExpbmsoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbCwgb2JqKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9iajtcblx0XHR9KTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0TGlua2VkT2JqZWN0cywgaGFzT2JqZWN0TGluayB9IGZyb20gXCIuLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9PQkpFQ1RMSU5LIH0gZnJvbSBcIi4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gXCIuLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7XG5cdHZhbGlkYXRlSW50ZWdlcixcblx0dmFsaWRhdGVPYmplY3QsXG5cdHZhbGlkYXRlU3RyaW5nLFxufSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBMb2NhbGUsIHBhcnNlTG9jYWxlIH0gZnJvbSBcIi4vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgdHJhbnNsYXRpb25zTGlua1N5bWJvbCB9IGZyb20gXCIuL3Byb3ZpZGVyLm1qc1wiO1xuXG5leHBvcnQgeyBUcmFuc2xhdGlvbnMsIGdldERvY3VtZW50VHJhbnNsYXRpb25zIH07XG5cbi8qKlxuICogV2l0aCB0aGlzIGNsYXNzIHlvdSBjYW4gbWFuYWdlIHRyYW5zbGF0aW9ucyBhbmQgYWNjZXNzIHRoZSBrZXlzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9pMThuL3RyYW5zbGF0aW9ucy5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkkxOG5cbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzMDY2XG4gKi9cbmNsYXNzIFRyYW5zbGF0aW9ucyBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtMb2NhbGV9IGxvY2FsZVxuXHQgKi9cblx0Y29uc3RydWN0b3IobG9jYWxlKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChsb2NhbGUgaW5zdGFuY2VvZiBMb2NhbGUpIHtcblx0XHRcdHRoaXMubG9jYWxlID0gbG9jYWxlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmxvY2FsZSA9IHBhcnNlTG9jYWxlKHZhbGlkYXRlU3RyaW5nKGxvY2FsZSkpO1xuXHRcdH1cblxuXHRcdHRoaXMuc3RvcmFnZSA9IG5ldyBNYXAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL3RyYW5zbGF0aW9uc0BAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogRmV0Y2hlcyBhIHRleHQgdXNpbmcgdGhlIHNwZWNpZmllZCBrZXkuXG5cdCAqIElmIG5vIHN1aXRhYmxlIGtleSBpcyBmb3VuZCwgYGRlZmF1bHRUZXh0YCBpcyB0YWtlbi5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IGRlZmF1bHRUZXh0XG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICogQHRocm93cyB7RXJyb3J9IGtleSBub3QgZm91bmRcblx0ICovXG5cdGdldFRleHQoa2V5LCBkZWZhdWx0VGV4dCkge1xuXHRcdGlmICghdGhpcy5zdG9yYWdlLmhhcyhrZXkpKSB7XG5cdFx0XHRpZiAoZGVmYXVsdFRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGtleSAke2tleX0gbm90IGZvdW5kYCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWxpZGF0ZVN0cmluZyhkZWZhdWx0VGV4dCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgciA9IHRoaXMuc3RvcmFnZS5nZXQoa2V5KTtcblx0XHRpZiAoaXNPYmplY3QocikpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldFBsdXJhbFJ1bGVUZXh0KGtleSwgXCJvdGhlclwiLCBkZWZhdWx0VGV4dCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuc3RvcmFnZS5nZXQoa2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIG51bWJlciBgY291bnRgIGNhbiBiZSBwYXNzZWQgdG8gdGhpcyBtZXRob2QuIEluIGFkZGl0aW9uIHRvIGEgbnVtYmVyLCBvbmUgb2YgdGhlIGtleXdvcmRzIGNhbiBhbHNvIGJlIHBhc3NlZCBkaXJlY3RseS5cblx0ICogXCJ6ZXJvXCIsIFwib25lXCIsIFwidHdvXCIsIFwiZmV3XCIsIFwibWFueVwiIGFuZCBcIm90aGVyXCIuIFJlbWVtYmVyOiBub3QgZXZlcnkgbGFuZ3VhZ2UgaGFzIGFsbCBydWxlcy5cblx0ICpcblx0ICogVGhlIGFwcHJvcHJpYXRlIHRleHQgZm9yIHRoaXMgbnVtYmVyIGlzIHRoZW4gc2VsZWN0ZWQuIElmIG5vIHN1aXRhYmxlIGtleSBpcyBmb3VuZCwgYGRlZmF1bHRUZXh0YCBpcyB0YWtlbi5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcGFyYW0ge2ludGVnZXJ8Y291bnR9IGNvdW50XG5cdCAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gZGVmYXVsdFRleHRcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0UGx1cmFsUnVsZVRleHQoa2V5LCBjb3VudCwgZGVmYXVsdFRleHQpIHtcblx0XHRpZiAoIXRoaXMuc3RvcmFnZS5oYXMoa2V5KSkge1xuXHRcdFx0cmV0dXJuIHZhbGlkYXRlU3RyaW5nKGRlZmF1bHRUZXh0KTtcblx0XHR9XG5cblx0XHRjb25zdCByID0gdmFsaWRhdGVPYmplY3QodGhpcy5zdG9yYWdlLmdldChrZXkpKTtcblxuXHRcdGxldCBrZXl3b3JkO1xuXHRcdGlmIChpc1N0cmluZyhjb3VudCkpIHtcblx0XHRcdGtleXdvcmQgPSBjb3VudC50b0xvY2FsZVN0cmluZygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb3VudCA9IHZhbGlkYXRlSW50ZWdlcihjb3VudCk7XG5cdFx0XHRpZiAoY291bnQgPT09IDApIHtcblx0XHRcdFx0Ly8gc3BlY2lhbCBoYW5kbGluZyBmb3IgemVybyBjb3VudFxuXHRcdFx0XHRpZiAoci5oYXNPd25Qcm9wZXJ0eShcInplcm9cIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsaWRhdGVTdHJpbmcocltcInplcm9cIl0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGtleXdvcmQgPSBuZXcgSW50bC5QbHVyYWxSdWxlcyh0aGlzLmxvY2FsZS50b1N0cmluZygpKS5zZWxlY3QoXG5cdFx0XHRcdHZhbGlkYXRlSW50ZWdlcihjb3VudCksXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChyLmhhc093blByb3BlcnR5KGtleXdvcmQpKSB7XG5cdFx0XHRyZXR1cm4gdmFsaWRhdGVTdHJpbmcocltrZXl3b3JkXSk7XG5cdFx0fVxuXG5cdFx0Ly8gQGRlcHJlY2F0ZWQgc2luY2UgMjAyMy0wMy0xNFxuXHRcdC8vIERFRkFVTFRfS0VZIGlzIHVuZGVmaW5lZFxuXHRcdC8vIGlmIChyLmhhc093blByb3BlcnR5KERFRkFVTFRfS0VZKSkge1xuXHRcdC8vICAgICByZXR1cm4gdmFsaWRhdGVTdHJpbmcocltERUZBVUxUX0tFWV0pO1xuXHRcdC8vIH1cblxuXHRcdHJldHVybiB2YWxpZGF0ZVN0cmluZyhkZWZhdWx0VGV4dCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGEgdGV4dCBmb3IgYSBrZXlcblx0ICpcblx0ICogYGBgXG5cdCAqIHRyYW5zbGF0aW9ucy5zZXRUZXh0KFwidGV4dDFcIiwgXCJNYWtlIG15IGRheSFcIik7XG5cdCAqIC8vIHBsdXJhbCBydWxlc1xuXHQgKiB0cmFuc2xhdGlvbnMuc2V0VGV4dChcInRleHQ2XCIsIHtcblx0ICogICAgIFwiemVyb1wiOiBcIlRoZXJlIGFyZSBubyBmaWxlcyBvbiBEaXNrLlwiLFxuXHQgKiAgICAgXCJvbmVcIjogXCJUaGVyZSBpcyBvbmUgZmlsZSBvbiBEaXNrLlwiLFxuXHQgKiAgICAgXCJvdGhlclwiOiBcIlRoZXJlIGFyZSBmaWxlcyBvbiBEaXNrLlwiXG5cdCAqICAgICBcImRlZmF1bHRcIjogXCJUaGVyZSBhcmUgZmlsZXMgb24gRGlzay5cIlxuXHQgKiB9KTtcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSB0ZXh0XG5cdCAqIEByZXR1cm4ge1RyYW5zbGF0aW9uc31cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmcgb3Igb2JqZWN0XG5cdCAqL1xuXHRzZXRUZXh0KGtleSwgdGV4dCkge1xuXHRcdGlmIChpc1N0cmluZyh0ZXh0KSB8fCBpc09iamVjdCh0ZXh0KSkge1xuXHRcdFx0dGhpcy5zdG9yYWdlLnNldCh2YWxpZGF0ZVN0cmluZyhrZXkpLCB0ZXh0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYSBzdHJpbmcgb3Igb2JqZWN0XCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIHRyYW5zZmVyIG92ZXJsYXlzIGZyb20gYW4gb2JqZWN0LiBUaGUga2V5cyBhcmUgdHJhbnNmZXJyZWQsIGFuZCB0aGUgdmFsdWVzIGFyZSBlbnRlcmVkXG5cdCAqIGFzIHRleHQuXG5cdCAqXG5cdCAqIFRoZSB2YWx1ZXMgY2FuIGVpdGhlciBiZSBjaGFyYWN0ZXIgc3RyaW5ncyBvciwgaW4gdGhlIGNhc2Ugb2YgdGV4dHMgd2l0aCBwbHVyYWwgZm9ybXMsIG9iamVjdHMuIFRoZSBwbHVyYWwgZm9ybXNcblx0ICogbXVzdCBiZSBzdG9yZWQgYXMgdGV4dCB2aWEgYSBzdGFuZGFyZCBrZXkgXCJ6ZXJvXCIsIFwib25lXCIsIFwidHdvXCIsIFwiZmV3XCIsIFwibWFueVwiIGFuZCBcIm90aGVyXCIuXG5cdCAqXG5cdCAqIEFkZGl0aW9uYWxseSwgdGhlIGtleSBkZWZhdWx0IGNhbiBiZSBzcGVjaWZpZWQsIHdoaWNoIHdpbGwgYmUgdXNlZCBpZiBubyBvdGhlciBrZXkgZml0cy5cblx0ICpcblx0ICogSW4gc29tZSBsYW5ndWFnZXMsIGxpa2UgZm9yIGV4YW1wbGUgaW4gR2VybWFuLCB0aGVyZSBpcyBubyBvd24gbW9yZSBudW1iZXIgYXQgdGhlIHZhbHVlIDAuIEluIHRoZXNlIGxhbmd1YWdlcyxcblx0ICogdGhlIGZ1bmN0aW9uIGFwcGxpZXMgYWRkaXRpb25hbGx5IHplcm8uXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiB0cmFuc2xhdGlvbnMuYXNzaWduVHJhbnNsYXRpb25zKHtcblx0ICogICBcInRleHQxXCI6IFwiTWFrZSBteSBkYXkhXCIsXG5cdCAqICAgXCJ0ZXh0MlwiOiBcIkknbGwgYmUgYmFjayFcIixcblx0ICogICBcInRleHQ2XCI6IHtcblx0ICogICAgIFwiemVyb1wiOiBcIlRoZXJlIGFyZSBubyBmaWxlcyBvbiBEaXNrLlwiLFxuXHQgKiAgICAgXCJvbmVcIjogXCJUaGVyZSBpcyBvbmUgZmlsZSBvbiBEaXNrLlwiLFxuXHQgKiAgICAgXCJvdGhlclwiOiBcIlRoZXJlIGFyZSBmaWxlcyBvbiBEaXNrLlwiXG5cdCAqICAgICBcImRlZmF1bHRcIjogXCJUaGVyZSBhcmUgZmlsZXMgb24gRGlzay5cIlxuXHQgKiB9KTtcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSB0cmFuc2xhdGlvbnNcblx0ICogQHJldHVybiB7VHJhbnNsYXRpb25zfVxuXHQgKi9cblx0YXNzaWduVHJhbnNsYXRpb25zKHRyYW5zbGF0aW9ucykge1xuXHRcdHZhbGlkYXRlT2JqZWN0KHRyYW5zbGF0aW9ucyk7XG5cblx0XHRpZiAodHJhbnNsYXRpb25zIGluc3RhbmNlb2YgVHJhbnNsYXRpb25zKSB7XG5cdFx0XHR0cmFuc2xhdGlvbnMuc3RvcmFnZS5mb3JFYWNoKCh2LCBrKSA9PiB7XG5cdFx0XHRcdHRoaXMuc2V0VGV4dChrLCB2KTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXModHJhbnNsYXRpb25zKSkge1xuXHRcdFx0dGhpcy5zZXRUZXh0KGssIHYpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdHJhbnNsYXRpb25zIGZvciB0aGUgY3VycmVudCBkb2N1bWVudC5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fHVuZGVmaW5lZH0gW2VsZW1lbnRdIC0gRWxlbWVudCB0byBzZWFyY2ggZm9yIHRyYW5zbGF0aW9ucy4gRGVmYXVsdDogZWxlbWVudCB3aXRoIG9iamVjdGxpbmsgQHNjaHVrYWkvbW9uc3Rlci9pMThuL3RyYW5zbGF0aW9uc0BAbGluay5cbiAqIEByZXR1cm5zIHtUcmFuc2xhdGlvbnN9XG4gKiBAdGhyb3dzIHtFcnJvcn0gRWxlbWVudCBpcyBub3QgYW4gSFRNTEVsZW1lbnQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gQ2Fubm90IGZpbmQgZWxlbWVudCB3aXRoIHRyYW5zbGF0aW9ucy4gQWRkIGEgdHJhbnNsYXRpb25zIG9iamVjdCB0byB0aGUgZG9jdW1lbnQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gVGhpcyBlbGVtZW50IGhhcyBubyB0cmFuc2xhdGlvbnMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gTWlzc2luZyB0cmFuc2xhdGlvbnMuXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5JMThuXG4gKi9cbmZ1bmN0aW9uIGdldERvY3VtZW50VHJhbnNsYXRpb25zKGVsZW1lbnQpIHtcblx0Y29uc3QgZCA9IGdldERvY3VtZW50KCk7XG5cblx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdGVsZW1lbnQgPSBkLnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRgWyR7QVRUUklCVVRFX09CSkVDVExJTkt9fj1cIiR7dHJhbnNsYXRpb25zTGlua1N5bWJvbC50b1N0cmluZygpfVwiXWAsXG5cdFx0KTtcblx0XHRpZiAoZWxlbWVudCA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcIkNhbm5vdCBmaW5kIGVsZW1lbnQgd2l0aCB0cmFuc2xhdGlvbnMuIEFkZCBhIHRyYW5zbGF0aW9ucyBvYmplY3QgdG8gdGhlIGRvY3VtZW50LlwiLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiRWxlbWVudCBpcyBub3QgYW4gSFRNTEVsZW1lbnQuXCIpO1xuXHR9XG5cblx0aWYgKCFoYXNPYmplY3RMaW5rKGVsZW1lbnQsIHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhpcyBlbGVtZW50IGhhcyBubyB0cmFuc2xhdGlvbnMuXCIpO1xuXHR9XG5cblx0Y29uc3Qgb2JqID0gZ2V0TGlua2VkT2JqZWN0cyhlbGVtZW50LCB0cmFuc2xhdGlvbnNMaW5rU3ltYm9sKTtcblxuXHRmb3IgKGNvbnN0IHQgb2Ygb2JqKSB7XG5cdFx0aWYgKHQgaW5zdGFuY2VvZiBUcmFuc2xhdGlvbnMpIHtcblx0XHRcdHJldHVybiB0O1xuXHRcdH1cblx0fVxuXG5cdHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgdHJhbnNsYXRpb25zLlwiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGdldExvY2FsZU9mRG9jdW1lbnQgfSBmcm9tIFwiLi4vZG9tL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbCwgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IElEIH0gZnJvbSBcIi4uL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc1ByaW1pdGl2ZSB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7XG5cdGdldERvY3VtZW50VHJhbnNsYXRpb25zLFxuXHRUcmFuc2xhdGlvbnMsXG59IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcbmltcG9ydCB7XG5cdHZhbGlkYXRlRnVuY3Rpb24sXG5cdHZhbGlkYXRlSW50ZWdlcixcblx0dmFsaWRhdGVPYmplY3QsXG5cdHZhbGlkYXRlUHJpbWl0aXZlLFxuXHR2YWxpZGF0ZVN0cmluZyxcblx0dmFsaWRhdGVCb29sZWFuLFxufSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gXCIuLi91dGlsL2Nsb25lLm1qc1wiO1xuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuL3BhdGhmaW5kZXIubWpzXCI7XG5cbmV4cG9ydCB7IFRyYW5zZm9ybWVyIH07XG5cbi8qKlxuICogVGhlIHRyYW5zZm9ybWVyIGNsYXNzIGlzIGEgc3dpc3MgYXJteSBrbmlmZSBmb3IgbWFuaXB1bGF0aW5nIHZhbHVlcy4gZXNwZWNpYWxseSBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBwaXBlLCBwcm9jZXNzaW5nIGNoYWlucyBjYW4gYmUgYnVpbHQgdXAuXG4gKlxuICogQSBzaW1wbGUgZXhhbXBsZSBpcyB0aGUgY29udmVyc2lvbiBvZiBhbGwgY2hhcmFjdGVycyB0byBsb3dlcmNhc2UuIGZvciB0aGlzIHB1cnBvc2UgdGhlIGNvbW1hbmQgYHRvbG93ZXJgIG11c3QgYmUgdXNlZC5cbiAqXG4gKiBgYGBcbiAqIGxldCB0ID0gbmV3IFRyYW5zZm9ybWVyKCd0b2xvd2VyJykucnVuKCdBQkMnKTsgLy8gXHUyMUE2IGFiY1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jdHJhbnNmb3JtZXJ8TW9uc3RlciBEb2NzfVxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9kYXRhL3RyYW5zZm9ybWVyLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKi9cbmNsYXNzIFRyYW5zZm9ybWVyIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZGVmaW5pdGlvblxuXHQgKi9cblx0Y29uc3RydWN0b3IoZGVmaW5pdGlvbikge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5hcmdzID0gZGlzYXNzZW1ibGUoZGVmaW5pdGlvbik7XG5cdFx0dGhpcy5jb21tYW5kID0gdGhpcy5hcmdzLnNoaWZ0KCk7XG5cdFx0dGhpcy5jYWxsYmFja3MgPSBuZXcgTWFwKCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHRcblx0ICogQHJldHVybnMge1RyYW5zZm9ybWVyfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqL1xuXHRzZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjaywgY29udGV4dCkge1xuXHRcdHZhbGlkYXRlU3RyaW5nKG5hbWUpO1xuXHRcdHZhbGlkYXRlRnVuY3Rpb24oY2FsbGJhY2spO1xuXG5cdFx0aWYgKGNvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFsaWRhdGVPYmplY3QoY29udGV4dCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jYWxsYmFja3Muc2V0KG5hbWUsIHtcblx0XHRcdGNhbGxiYWNrOiBjYWxsYmFjayxcblx0XHRcdGNvbnRleHQ6IGNvbnRleHQsXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm5zIHsqfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5rbm93biBjb21tYW5kXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdHlwZSBub3Qgc3VwcG9ydGVkXG5cdCAqL1xuXHRydW4odmFsdWUpIHtcblx0XHRyZXR1cm4gdHJhbnNmb3JtLmFwcGx5KHRoaXMsIFt2YWx1ZV0pO1xuXHR9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kXG4gKiBAcmV0dXJucyB7YXJyYXl9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkaXNhc3NlbWJsZShjb21tYW5kKSB7XG5cdHZhbGlkYXRlU3RyaW5nKGNvbW1hbmQpO1xuXG5cdGNvbnN0IHBsYWNlaG9sZGVyID0gbmV3IE1hcCgpO1xuXHRjb25zdCByZWdleCA9IC8oKD88cGF0dGVybj5cXFxcKD88Y2hhcj4uKSl7MX0pL2dpbTtcblxuXHQvLyBUaGUgc2VwYXJhdG9yIGZvciBhcmdzIG11c3QgYmUgZXNjYXBlZFxuXHQvLyB1bmRlZmluZWQgc3RyaW5nIHdoaWNoIHNob3VsZCBub3Qgb2NjdXIgbm9ybWFsbHkgYW5kIGlzIGFsc28gbm90IGEgcmVnZXhcblx0Y29uc3QgcmVzdWx0ID0gY29tbWFuZC5tYXRjaEFsbChyZWdleCk7XG5cblx0Zm9yIChjb25zdCBtIG9mIHJlc3VsdCkge1xuXHRcdGNvbnN0IGcgPSBtPy5bXCJncm91cHNcIl07XG5cdFx0aWYgKCFpc09iamVjdChnKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcCA9IGc/LltcInBhdHRlcm5cIl07XG5cdFx0Y29uc3QgYyA9IGc/LltcImNoYXJcIl07XG5cblx0XHRpZiAocCAmJiBjKSB7XG5cdFx0XHRjb25zdCByID0gYF9fJHtuZXcgSUQoKS50b1N0cmluZygpfV9fYDtcblx0XHRcdHBsYWNlaG9sZGVyLnNldChyLCBjKTtcblx0XHRcdGNvbW1hbmQgPSBjb21tYW5kLnJlcGxhY2UocCwgcik7XG5cdFx0fVxuXHR9XG5cdGxldCBwYXJ0cyA9IGNvbW1hbmQuc3BsaXQoXCI6XCIpO1xuXG5cdHBhcnRzID0gcGFydHMubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdGxldCB2ID0gdmFsdWUudHJpbSgpO1xuXHRcdGZvciAoY29uc3QgayBvZiBwbGFjZWhvbGRlcikge1xuXHRcdFx0diA9IHYucmVwbGFjZShrWzBdLCBrWzFdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHY7XG5cdH0pO1xuXG5cdHJldHVybiBwYXJ0cztcbn1cblxuLyoqXG4gKiB0cmllcyB0byBtYWtlIGEgc3RyaW5nIG91dCBvZiB2YWx1ZSBhbmQgaWYgdGhpcyBzdWNjZWVkcyB0byByZXR1cm4gaXQgYmFja1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjb252ZXJ0VG9TdHJpbmcodmFsdWUpIHtcblx0aWYgKGlzT2JqZWN0KHZhbHVlKSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eShcInRvU3RyaW5nXCIpKSB7XG5cdFx0dmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuXHR9XG5cblx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHsqfVxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmtub3duIGNvbW1hbmRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IHR5cGUgbm90IHN1cHBvcnRlZFxuICogQHRocm93cyB7RXJyb3J9IG1pc3Npbmcga2V5IHBhcmFtZXRlclxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm0odmFsdWUpIHtcblx0Y29uc3QgY29uc29sZSA9IGdldEdsb2JhbE9iamVjdChcImNvbnNvbGVcIik7XG5cblx0Y29uc3QgYXJncyA9IGNsb25lKHRoaXMuYXJncyk7XG5cdGxldCBrZXk7XG5cdGxldCBkZWZhdWx0VmFsdWU7XG5cblx0bGV0IHRyYW5zbGF0aW9ucztcblx0bGV0IGRhdGU7XG5cdGxldCBsb2NhbGU7XG5cdGxldCB0aW1lc3RhbXA7XG5cdGxldCBtYXA7XG5cdGxldCBrZXlWYWx1ZTtcblxuXHRzd2l0Y2ggKHRoaXMuY29tbWFuZCkge1xuXHRcdGNhc2UgXCJzdGF0aWNcIjpcblx0XHRcdHJldHVybiB0aGlzLmFyZ3Muam9pbihcIjpcIik7XG5cblx0XHRjYXNlIFwidG9sb3dlclwiOlxuXHRcdGNhc2UgXCJzdHJ0b2xvd2VyXCI6XG5cdFx0Y2FzZSBcInRvbG93ZXJjYXNlXCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdGNhc2UgXCJjb250YWluc1wiOlxuXHRcdFx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUuaW5jbHVkZXMoYXJnc1swXSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUuaW5jbHVkZXMoYXJnc1swXSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc09iamVjdCh2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlLmhhc093blByb3BlcnR5KGFyZ3NbMF0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRjYXNlIFwiaGFzLWVudHJpZXNcIjpcblx0XHRjYXNlIFwiaGFzZW50cmllc1wiOlxuXHRcdFx0aWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA+IDA7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUubGVuZ3RoID4gMDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Y2FzZSBcImlzdW5kZWZpbmVkXCI6XG5cdFx0Y2FzZSBcImlzLXVuZGVmaW5lZFwiOlxuXHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG5cblx0XHRjYXNlIFwiaXNudWxsXCI6XG5cdFx0Y2FzZSBcImlzLW51bGxcIjpcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcblxuXHRcdGNhc2UgXCJpc3NldFwiOlxuXHRcdGNhc2UgXCJpcy1zZXRcIjpcblx0XHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsO1xuXG5cdFx0Y2FzZSBcImlzbnVtYmVyXCI6XG5cdFx0Y2FzZSBcImlzLW51bWJlclwiOlxuXHRcdFx0cmV0dXJuIGlzUHJpbWl0aXZlKHZhbHVlKSAmJiAhaXNOYU4odmFsdWUpO1xuXG5cdFx0Y2FzZSBcImlzaW50ZWdlclwiOlxuXHRcdGNhc2UgXCJpcy1pbnRlZ2VyXCI6XG5cdFx0XHRyZXR1cm4gaXNQcmltaXRpdmUodmFsdWUpICYmICFpc05hTih2YWx1ZSkgJiYgdmFsdWUgJSAxID09PSAwO1xuXG5cdFx0Y2FzZSBcImlzZmxvYXRcIjpcblx0XHRjYXNlIFwiaXMtZmxvYXRcIjpcblx0XHRcdHJldHVybiBpc1ByaW1pdGl2ZSh2YWx1ZSkgJiYgIWlzTmFOKHZhbHVlKSAmJiB2YWx1ZSAlIDEgIT09IDA7XG5cblx0XHRjYXNlIFwiaXNvYmplY3RcIjpcblx0XHRjYXNlIFwiaXMtb2JqZWN0XCI6XG5cdFx0XHRyZXR1cm4gaXNPYmplY3QodmFsdWUpO1xuXG5cdFx0Y2FzZSBcImlzYXJyYXlcIjpcblx0XHRjYXNlIFwiaXMtYXJyYXlcIjpcblx0XHRcdHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcblxuXHRcdGNhc2UgXCJub3RcIjpcblx0XHRcdHZhbGlkYXRlQm9vbGVhbih2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gIXZhbHVlO1xuXG5cdFx0Y2FzZSBcInRvdXBwZXJcIjpcblx0XHRjYXNlIFwic3RydG91cHBlclwiOlxuXHRcdGNhc2UgXCJ0b3VwcGVyY2FzZVwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0cmV0dXJuIHZhbHVlLnRvVXBwZXJDYXNlKCk7XG5cblx0XHRjYXNlIFwidG9zdHJpbmdcIjpcblx0XHRcdHJldHVybiBgJHt2YWx1ZX1gO1xuXG5cdFx0Y2FzZSBcInRvaW50ZWdlclwiOlxuXHRcdFx0Y29uc3QgbiA9IHBhcnNlSW50KHZhbHVlKTtcblx0XHRcdHZhbGlkYXRlSW50ZWdlcihuKTtcblx0XHRcdHJldHVybiBuO1xuXG5cdFx0Y2FzZSBcInRvLWpzb25cIjpcblx0XHRjYXNlIFwidG9qc29uXCI6XG5cdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuXG5cdFx0Y2FzZSBcImZyb20tanNvblwiOlxuXHRcdGNhc2UgXCJmcm9tanNvblwiOlxuXHRcdFx0cmV0dXJuIEpTT04ucGFyc2UodmFsdWUpO1xuXG5cdFx0Y2FzZSBcInRyaW1cIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblx0XHRcdHJldHVybiB2YWx1ZS50cmltKCk7XG5cblx0XHRjYXNlIFwicmF3dXJsZW5jb2RlXCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKVxuXHRcdFx0XHQucmVwbGFjZSgvIS9nLCBcIiUyMVwiKVxuXHRcdFx0XHQucmVwbGFjZSgvJy9nLCBcIiUyN1wiKVxuXHRcdFx0XHQucmVwbGFjZSgvXFwoL2csIFwiJTI4XCIpXG5cdFx0XHRcdC5yZXBsYWNlKC9cXCkvZywgXCIlMjlcIilcblx0XHRcdFx0LnJlcGxhY2UoL1xcKi9nLCBcIiUyQVwiKTtcblxuXHRcdGNhc2UgXCJjYWxsXCI6XG5cdFx0XHQvKipcblx0XHRcdCAqIGNhbGxiYWNrLWRlZmluaXRpb25cblx0XHRcdCAqIGZ1bmN0aW9uIGNhbGxiYWNrKHZhbHVlLCAuLi5hcmdzKSB7XG5cdFx0XHQgKiAgIHJldHVybiB2YWx1ZTtcblx0XHRcdCAqIH1cblx0XHRcdCAqL1xuXG5cdFx0XHRsZXQgY2FsbGJhY2s7XG5cdFx0XHRjb25zdCBjYWxsYmFja05hbWUgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRsZXQgY29udGV4dCA9IGdldEdsb2JhbCgpO1xuXG5cdFx0XHRpZiAoaXNPYmplY3QodmFsdWUpICYmIHZhbHVlLmhhc093blByb3BlcnR5KGNhbGxiYWNrTmFtZSkpIHtcblx0XHRcdFx0Y2FsbGJhY2sgPSB2YWx1ZVtjYWxsYmFja05hbWVdO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmNhbGxiYWNrcy5oYXMoY2FsbGJhY2tOYW1lKSkge1xuXHRcdFx0XHRjb25zdCBzID0gdGhpcy5jYWxsYmFja3MuZ2V0KGNhbGxiYWNrTmFtZSk7XG5cdFx0XHRcdGNhbGxiYWNrID0gcz8uW1wiY2FsbGJhY2tcIl07XG5cdFx0XHRcdGNvbnRleHQgPSBzPy5bXCJjb250ZXh0XCJdO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0dHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdFx0XHR3aW5kb3cuaGFzT3duUHJvcGVydHkoY2FsbGJhY2tOYW1lKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNhbGxiYWNrID0gd2luZG93W2NhbGxiYWNrTmFtZV07XG5cdFx0XHR9XG5cdFx0XHR2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKTtcblxuXHRcdFx0YXJncy51bnNoaWZ0KHZhbHVlKTtcblx0XHRcdHJldHVybiBjYWxsYmFjay5jYWxsKGNvbnRleHQsIC4uLmFyZ3MpO1xuXG5cdFx0Y2FzZSBcInBsYWluXCI6XG5cdFx0Y2FzZSBcInBsYWludGV4dFwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0Y29uc3QgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh2YWx1ZSwgXCJ0ZXh0L2h0bWxcIik7XG5cdFx0XHRyZXR1cm4gZG9jLmJvZHkudGV4dENvbnRlbnQgfHwgXCJcIjtcblxuXHRcdGNhc2UgXCJpZlwiOlxuXHRcdGNhc2UgXCI/XCI6XG5cdFx0XHR2YWxpZGF0ZVByaW1pdGl2ZSh2YWx1ZSk7XG5cblx0XHRcdGxldCB0cnVlU3RhdGVtZW50ID0gYXJncy5zaGlmdCgpIHx8IHVuZGVmaW5lZDtcblx0XHRcdGxldCBmYWxzZVN0YXRlbWVudCA9IGFyZ3Muc2hpZnQoKSB8fCB1bmRlZmluZWQ7XG5cblx0XHRcdGlmICh0cnVlU3RhdGVtZW50ID09PSBcInZhbHVlXCIpIHtcblx0XHRcdFx0dHJ1ZVN0YXRlbWVudCA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRydWVTdGF0ZW1lbnQgPT09IFwiXFxcXHZhbHVlXCIpIHtcblx0XHRcdFx0dHJ1ZVN0YXRlbWVudCA9IFwidmFsdWVcIjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRydWVTdGF0ZW1lbnQgPT09IFwiXFxcXHVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdHRydWVTdGF0ZW1lbnQgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0cnVlU3RhdGVtZW50ID09PSBcIlxcXFxudWxsXCIpIHtcblx0XHRcdFx0dHJ1ZVN0YXRlbWVudCA9IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChmYWxzZVN0YXRlbWVudCA9PT0gXCJ2YWx1ZVwiKSB7XG5cdFx0XHRcdGZhbHNlU3RhdGVtZW50ID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZmFsc2VTdGF0ZW1lbnQgPT09IFwiXFxcXHZhbHVlXCIpIHtcblx0XHRcdFx0ZmFsc2VTdGF0ZW1lbnQgPSBcInZhbHVlXCI7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChmYWxzZVN0YXRlbWVudCA9PT0gXCJcXFxcdW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0ZmFsc2VTdGF0ZW1lbnQgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChmYWxzZVN0YXRlbWVudCA9PT0gXCJcXFxcbnVsbFwiKSB7XG5cdFx0XHRcdGZhbHNlU3RhdGVtZW50ID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY29uZGl0aW9uID1cblx0XHRcdFx0KHZhbHVlICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0XHR2YWx1ZSAhPT0gXCJcIiAmJlxuXHRcdFx0XHRcdHZhbHVlICE9PSBcIm9mZlwiICYmXG5cdFx0XHRcdFx0dmFsdWUgIT09IFwiZmFsc2VcIiAmJlxuXHRcdFx0XHRcdHZhbHVlICE9PSBmYWxzZSkgfHxcblx0XHRcdFx0dmFsdWUgPT09IFwib25cIiB8fFxuXHRcdFx0XHR2YWx1ZSA9PT0gXCJ0cnVlXCIgfHxcblx0XHRcdFx0dmFsdWUgPT09IHRydWU7XG5cdFx0XHRyZXR1cm4gY29uZGl0aW9uID8gdHJ1ZVN0YXRlbWVudCA6IGZhbHNlU3RhdGVtZW50O1xuXG5cdFx0Y2FzZSBcInVjZmlyc3RcIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblxuXHRcdFx0Y29uc3QgZmlyc3RjaGFyID0gdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gZmlyc3RjaGFyICsgdmFsdWUuc3Vic3RyKDEpO1xuXHRcdGNhc2UgXCJ1Y3dvcmRzXCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cblx0XHRcdHJldHVybiB2YWx1ZS5yZXBsYWNlKFxuXHRcdFx0XHQvXihbYS16XFx1MDBFMC1cXHUwMEZDXSl8XFxzKyhbYS16XFx1MDBFMC1cXHUwMEZDXSkvZyxcblx0XHRcdFx0ZnVuY3Rpb24gKHYpIHtcblx0XHRcdFx0XHRyZXR1cm4gdi50b1VwcGVyQ2FzZSgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJjb3VudFwiOlxuXHRcdGNhc2UgXCJsZW5ndGhcIjpcblx0XHRcdGlmIChcblx0XHRcdFx0KGlzU3RyaW5nKHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSkgfHwgaXNBcnJheSh2YWx1ZSkpICYmXG5cdFx0XHRcdHZhbHVlLmhhc093blByb3BlcnR5KFwibGVuZ3RoXCIpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlLmxlbmd0aDtcblx0XHRcdH1cblxuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgdW5zdXBwb3J0ZWQgdHlwZSAke3R5cGVvZiB2YWx1ZX1gKTtcblxuXHRcdGNhc2UgXCJ0by1iYXNlNjRcIjpcblx0XHRjYXNlIFwiYnRvYVwiOlxuXHRcdGNhc2UgXCJiYXNlNjRcIjpcblx0XHRcdHJldHVybiBidG9hKGNvbnZlcnRUb1N0cmluZyh2YWx1ZSkpO1xuXG5cdFx0Y2FzZSBcImF0b2JcIjpcblx0XHRjYXNlIFwiZnJvbS1iYXNlNjRcIjpcblx0XHRcdHJldHVybiBhdG9iKGNvbnZlcnRUb1N0cmluZyh2YWx1ZSkpO1xuXG5cdFx0Y2FzZSBcImVtcHR5XCI6XG5cdFx0XHRyZXR1cm4gXCJcIjtcblxuXHRcdGNhc2UgXCJ1bmRlZmluZWRcIjpcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRjYXNlIFwiZGVidWdcIjpcblx0XHRcdGlmIChpc09iamVjdChjb25zb2xlKSkge1xuXHRcdFx0XHRjb25zb2xlLmxvZyh2YWx1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWx1ZTtcblxuXHRcdGNhc2UgXCJwcmVmaXhcIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblx0XHRcdGNvbnN0IHByZWZpeCA9IGFyZ3M/LlswXTtcblx0XHRcdHJldHVybiBwcmVmaXggKyB2YWx1ZTtcblxuXHRcdGNhc2UgXCJzdWZmaXhcIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblx0XHRcdGNvbnN0IHN1ZmZpeCA9IGFyZ3M/LlswXTtcblx0XHRcdHJldHVybiB2YWx1ZSArIHN1ZmZpeDtcblxuXHRcdGNhc2UgXCJ1bmlxaWRcIjpcblx0XHRcdHJldHVybiBuZXcgSUQoKS50b1N0cmluZygpO1xuXG5cdFx0Y2FzZSBcImZpcnN0LWtleVwiOlxuXHRcdGNhc2UgXCJsYXN0LWtleVwiOlxuXHRcdGNhc2UgXCJudGgtbGFzdC1rZXlcIjpcblx0XHRjYXNlIFwibnRoLWtleVwiOlxuXHRcdFx0aWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBub3Qgc3VwcG9ydGVkXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpLnNvcnQoKTtcblxuXHRcdFx0aWYgKHRoaXMuY29tbWFuZCA9PT0gXCJmaXJzdC1rZXlcIikge1xuXHRcdFx0XHRrZXkgPSAwO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmNvbW1hbmQgPT09IFwibGFzdC1rZXlcIikge1xuXHRcdFx0XHRrZXkgPSBrZXlzLmxlbmd0aCAtIDE7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRrZXkgPSB2YWxpZGF0ZUludGVnZXIocGFyc2VJbnQoYXJncy5zaGlmdCgpKSk7XG5cblx0XHRcdFx0aWYgKHRoaXMuY29tbWFuZCA9PT0gXCJudGgtbGFzdC1rZXlcIikge1xuXHRcdFx0XHRcdGtleSA9IGtleXMubGVuZ3RoIC0ga2V5IC0gMTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRkZWZhdWx0VmFsdWUgPSBhcmdzLnNoaWZ0KCkgfHwgXCJcIjtcblxuXHRcdFx0Y29uc3QgdXNlS2V5ID0ga2V5cz8uW2tleV07XG5cblx0XHRcdGlmICh2YWx1ZT8uW3VzZUtleV0pIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlPy5bdXNlS2V5XTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRlZmF1bHRWYWx1ZTtcblxuXHRcdGNhc2UgXCJrZXlcIjpcblx0XHRjYXNlIFwicHJvcGVydHlcIjpcblx0XHRjYXNlIFwiaW5kZXhcIjpcblx0XHRcdGtleSA9IGFyZ3Muc2hpZnQoKSB8fCB1bmRlZmluZWQ7XG5cblx0XHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIGtleSBwYXJhbWV0ZXJcIik7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmF1bHRWYWx1ZSA9IGFyZ3Muc2hpZnQoKSB8fCB1bmRlZmluZWQ7XG5cblx0XHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIE1hcCkge1xuXHRcdFx0XHRpZiAoIXZhbHVlLmhhcyhrZXkpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdmFsdWUuZ2V0KGtleSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc09iamVjdCh2YWx1ZSkgfHwgaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdFx0aWYgKHZhbHVlPy5ba2V5XSkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZT8uW2tleV07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZGVmYXVsdFZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIG5vdCBzdXBwb3J0ZWRcIik7XG5cblx0XHRjYXNlIFwicGF0aC1leGlzdHNcIjpcblx0XHRcdGtleSA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIGtleSBwYXJhbWV0ZXJcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBuZXcgUGF0aGZpbmRlcih2YWx1ZSkuZXhpc3RzKGtleSk7XG5cblx0XHRjYXNlIFwiY29uY2F0XCI6XG5cdFx0XHRjb25zdCBwZjIgPSBuZXcgUGF0aGZpbmRlcih2YWx1ZSk7XG5cdFx0XHRsZXQgY29uY2F0ID0gXCJcIjtcblx0XHRcdHdoaWxlIChhcmdzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0a2V5ID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0XHRpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIGtleSBwYXJhbWV0ZXJcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBhZGQgZW1wdHkgc3RyaW5nc1xuXHRcdFx0XHRpZiAoaXNTdHJpbmcoa2V5KSAmJiBrZXkudHJpbSgpID09PSBcIlwiKSB7XG5cdFx0XHRcdFx0Y29uY2F0ICs9IGtleTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghcGYyLmV4aXN0cyhrZXkpKSB7XG5cdFx0XHRcdFx0Y29uY2F0ICs9IGtleTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCB2ID0gcGYyLmdldFZpYShrZXkpO1xuXHRcdFx0XHRpZiAoIWlzUHJpbWl0aXZlKHYpKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidmFsdWUgaXMgbm90IHByaW1pdGl2ZVwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbmNhdCArPSB2O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gY29uY2F0O1xuXHRcdGNhc2UgXCJwYXRoXCI6XG5cdFx0XHRrZXkgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBrZXkgcGFyYW1ldGVyXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBwZiA9IG5ldyBQYXRoZmluZGVyKHZhbHVlKTtcblxuXHRcdFx0aWYgKCFwZi5leGlzdHMoa2V5KSkge1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcGYuZ2V0VmlhKGtleSk7XG5cblx0XHRjYXNlIFwic3Vic3RyaW5nXCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cblx0XHRcdGNvbnN0IHN0YXJ0ID0gcGFyc2VJbnQoYXJnc1swXSkgfHwgMDtcblx0XHRcdGNvbnN0IGVuZCA9IChwYXJzZUludChhcmdzWzFdKSB8fCAwKSArIHN0YXJ0O1xuXG5cdFx0XHRyZXR1cm4gdmFsdWUuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xuXG5cdFx0Y2FzZSBcIm5vcFwiOlxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXG5cdFx0Y2FzZSBcIj8/XCI6XG5cdFx0Y2FzZSBcImRlZmF1bHRcIjpcblx0XHRcdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmYXVsdFZhbHVlID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0bGV0IGRlZmF1bHRUeXBlID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0aWYgKGRlZmF1bHRUeXBlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZGVmYXVsdFR5cGUgPSBcInN0cmluZ1wiO1xuXHRcdFx0fVxuXG5cdFx0XHRzd2l0Y2ggKGRlZmF1bHRUeXBlKSB7XG5cdFx0XHRcdGNhc2UgXCJpbnRcIjpcblx0XHRcdFx0Y2FzZSBcImludGVnZXJcIjpcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoZGVmYXVsdFZhbHVlKTtcblx0XHRcdFx0Y2FzZSBcImZsb2F0XCI6XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlRmxvYXQoZGVmYXVsdFZhbHVlKTtcblx0XHRcdFx0Y2FzZSBcInVuZGVmaW5lZFwiOlxuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdGNhc2UgXCJib29sXCI6XG5cdFx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRcdFx0ZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdChkZWZhdWx0VmFsdWUgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlICE9PSBcIlwiICYmXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSAhPT0gXCJvZmZcIiAmJlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgIT09IFwiZmFsc2VcIiAmJlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgIT09IFwiZmFsc2VcIikgfHxcblx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSA9PT0gXCJvblwiIHx8XG5cdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgPT09IFwidHJ1ZVwiIHx8XG5cdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgPT09IFwidHJ1ZVwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0Y2FzZSBcInN0cmluZ1wiOlxuXHRcdFx0XHRcdHJldHVybiBgJHtkZWZhdWx0VmFsdWV9YDtcblx0XHRcdFx0Y2FzZSBcIm9iamVjdFwiOlxuXHRcdFx0XHRcdHJldHVybiBKU09OLnBhcnNlKGF0b2IoZGVmYXVsdFZhbHVlKSk7XG5cdFx0XHR9XG5cblx0XHRcdHRocm93IG5ldyBFcnJvcihcInR5cGUgbm90IHN1cHBvcnRlZFwiKTtcblxuXHRcdGNhc2UgXCJtYXBcIjpcblx0XHRcdG1hcCA9IG5ldyBNYXAoKTtcblx0XHRcdHdoaWxlIChhcmdzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0a2V5VmFsdWUgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRcdGlmIChrZXlWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBrZXkgcGFyYW1ldGVyXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0a2V5VmFsdWUgPSBrZXlWYWx1ZS5zcGxpdChcIj1cIik7XG5cdFx0XHRcdG1hcC5zZXQoa2V5VmFsdWVbMF0sIGtleVZhbHVlWzFdKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hcC5nZXQodmFsdWUpO1xuXG5cdFx0Y2FzZSBcImVxdWFsc1wiOlxuXHRcdFx0aWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgdmFsdWUgcGFyYW1ldGVyXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHR2YWxpZGF0ZVByaW1pdGl2ZSh2YWx1ZSk7XG5cblx0XHRcdGNvbnN0IGVxdWFsc1ZhbHVlID0gYXJncy5zaGlmdCgpO1xuXG5cdFx0XHQvKipcblx0XHRcdCAqIFRoZSBoaXN0b3J5IG9mIFx1MjAxQ3R5cGVvZiBudWxsXHUyMDFEXG5cdFx0XHQgKiBodHRwczovLzJhbGl0eS5jb20vMjAxMy8xMC90eXBlb2YtbnVsbC5odG1sXG5cdFx0XHQgKiBJbiBKYXZhU2NyaXB0LCB0eXBlb2YgbnVsbCBpcyAnb2JqZWN0Jywgd2hpY2ggaW5jb3JyZWN0bHkgc3VnZ2VzdHNcblx0XHRcdCAqIHRoYXQgbnVsbCBpcyBhbiBvYmplY3QuXG5cdFx0XHQgKi9cblx0XHRcdGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuXHRcdFx0XHRpZiAoZXF1YWxzVmFsdWUgPT09IFwibnVsbFwiKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB0eXBlT2ZWYWx1ZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRcdFx0c3dpdGNoICh0eXBlT2ZWYWx1ZSkge1xuXHRcdFx0XHRjYXNlIFwic3RyaW5nXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSBlcXVhbHNWYWx1ZTtcblx0XHRcdFx0Y2FzZSBcIm51bWJlclwiOlxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gcGFyc2VGbG9hdChlcXVhbHNWYWx1ZSk7XG5cdFx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSAoZXF1YWxzVmFsdWUgPT09IFwidHJ1ZVwiIHx8IGVxdWFsc1ZhbHVlID09PSBcIm9uXCIpO1xuXHRcdFx0XHRjYXNlIFwidW5kZWZpbmVkXCI6XG5cdFx0XHRcdFx0cmV0dXJuIGVxdWFsc1ZhbHVlID09PSBcInVuZGVmaW5lZFwiO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInR5cGUgbm90IHN1cHBvcnRlZFwiKTtcblx0XHRcdH1cblxuXHRcdGNhc2UgXCJtb25leVwiOlxuXHRcdGNhc2UgXCJjdXJyZW5jeVwiOlxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGxvY2FsZSBvciBtaXNzaW5nIGZvcm1hdCAoJHtlLm1lc3NhZ2V9KWApO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBjdXJyZW5jeSA9IHZhbHVlLnN1YnN0cmluZygwLCAzKTtcblx0XHRcdGlmICghY3VycmVuY3kpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBjdXJyZW5jeSBwYXJhbWV0ZXJcIik7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG1heGltdW1GcmFjdGlvbkRpZ2l0cyA9IGFyZ3M/LlswXSB8fCAyO1xuXHRcdFx0Y29uc3Qgcm91bmRpbmdJbmNyZW1lbnQgPSBhcmdzPy5bMV0gfHwgNTtcblxuXHRcdFx0Y29uc3QgbmYgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG9jYWxlLCB7XG5cdFx0XHRcdHN0eWxlOiBcImN1cnJlbmN5XCIsXG5cdFx0XHRcdGN1cnJlbmN5OiBjdXJyZW5jeSxcblx0XHRcdFx0bWF4aW11bUZyYWN0aW9uRGlnaXRzOiBtYXhpbXVtRnJhY3Rpb25EaWdpdHMsXG5cdFx0XHRcdHJvdW5kaW5nSW5jcmVtZW50OiByb3VuZGluZ0luY3JlbWVudCxcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gbmYuZm9ybWF0KHZhbHVlLnN1YnN0cmluZygzKSk7XG5cblx0XHRjYXNlIFwidGltZXN0YW1wXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0dGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG5cdFx0XHRpZiAoaXNOYU4odGltZXN0YW1wKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGltZXN0YW1wO1xuXG5cdFx0Y2FzZSBcInRpbWVcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdFx0XHRyZXR1cm4gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcobG9jYWxlKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBsb2NhbGUgb3IgbWlzc2luZyBmb3JtYXQgKCR7ZS5tZXNzYWdlfSlgKTtcblx0XHRcdH1cblxuXHRcdGNhc2UgXCJkYXRldGltZWZvcm1hdFwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBvcHRpb25zID0ge1xuXHRcdFx0XHRkYXRlU3R5bGU6IGFyZ3Muc2hpZnQoKSB8fCBcIm1lZGl1bVwiLFxuXHRcdFx0XHR0aW1lU3R5bGU6IGFyZ3Muc2hpZnQoKSB8fCBcIm1lZGl1bVwiLFxuXHRcdFx0fTtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCBvcHRpb25zKS5mb3JtYXQoZGF0ZSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgbG9jYWxlIG9yIG1pc3NpbmcgZm9ybWF0ICgke2UubWVzc2FnZX0pYCk7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwiZGF0ZXRpbWVcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdFx0XHRyZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGxvY2FsZSBvciBtaXNzaW5nIGZvcm1hdCAoJHtlLm1lc3NhZ2V9KWApO1xuXHRcdFx0fVxuXG5cdFx0Y2FzZSBcImRhdGVcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdFx0XHRyZXR1cm4gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcobG9jYWxlKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBsb2NhbGUgb3IgbWlzc2luZyBmb3JtYXQgKCR7ZS5tZXNzYWdlfSlgKTtcblx0XHRcdH1cblxuXHRcdGNhc2UgXCJ5ZWFyXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7XG5cblx0XHRjYXNlIFwibW9udGhcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGUuZ2V0TW9udGgoKSArIDE7XG5cblx0XHRjYXNlIFwiZGF5XCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRlLmdldERhdGUoKTtcblxuXHRcdGNhc2UgXCJ3ZWVrZGF5XCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRlLmdldERheSgpO1xuXG5cdFx0Y2FzZSBcImhvdXJcIjpcblx0XHRjYXNlIFwiaG91cnNcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGUuZ2V0SG91cnMoKTtcblxuXHRcdGNhc2UgXCJtaW51dGVcIjpcblx0XHRjYXNlIFwibWludXRlc1wiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXRNaW51dGVzKCk7XG5cblx0XHRjYXNlIFwic2Vjb25kXCI6XG5cdFx0Y2FzZSBcInNlY29uZHNcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGUuZ2V0U2Vjb25kcygpO1xuXG5cdFx0Y2FzZSBcImkxOG5cIjpcblx0XHRjYXNlIFwidHJhbnNsYXRpb25cIjpcblx0XHRcdHRyYW5zbGF0aW9ucyA9IGdldERvY3VtZW50VHJhbnNsYXRpb25zKCk7XG5cdFx0XHRpZiAoISh0cmFuc2xhdGlvbnMgaW5zdGFuY2VvZiBUcmFuc2xhdGlvbnMpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgdHJhbnNsYXRpb25zXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRrZXkgPSBhcmdzLnNoaWZ0KCkgfHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGtleSA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWZhdWx0VmFsdWUgPSBhcmdzLnNoaWZ0KCkgfHwgdW5kZWZpbmVkO1xuXHRcdFx0cmV0dXJuIHRyYW5zbGF0aW9ucy5nZXRUZXh0KGtleSwgZGVmYXVsdFZhbHVlKTtcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gY29tbWFuZCAke3RoaXMuY29tbWFuZH1gKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBUcmFuc2Zvcm1lciB9IGZyb20gXCIuL3RyYW5zZm9ybWVyLm1qc1wiO1xuXG5leHBvcnQgeyBQaXBlIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IERFTElNSVRFUiA9IFwifFwiO1xuXG4vKipcbiAqIFRoZSBwaXBlIGNsYXNzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGNvbWJpbmUgc2V2ZXJhbCBwcm9jZXNzaW5nIHN0ZXBzLlxuICpcbiAqIEEgcGlwZSBjb25zaXN0cyBvZiBjb21tYW5kcyB3aG9zZSBpbnB1dCBhbmQgb3V0cHV0IGFyZSBjb25uZWN0ZWQgd2l0aCB0aGUgcGlwZSBzeW1ib2wgYHxgLlxuICpcbiAqIFdpdGggdGhlIFBpcGUsIHByb2Nlc3Npbmcgc3RlcHMgY2FuIGJlIGNvbWJpbmVkLiBIZXJlLCB0aGUgdmFsdWUgb2YgYW4gb2JqZWN0IGlzIGFjY2Vzc2VkIHZpYSB0aGUgcGF0aGZpbmRlciAocGF0aCBjb21tYW5kKS5cbiAqIHRoZSB3b3JkIGlzIHRoZW4gY29udmVydGVkIHRvIHVwcGVyY2FzZSBsZXR0ZXJzIGFuZCBhIHByZWZpeCBIZWxsbyBpcyBhZGRlZC4gdGhlIHR3byBiYWNrc2xhc2ggc2FmZSB0aGUgc3BhY2UgY2hhci5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlICAuLi8uLi9leGFtcGxlL2RhdGEvcGlwZS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YVxuICovXG5jbGFzcyBQaXBlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGlwZSBhIHBpcGUgY29uc2lzdHMgb2YgY29tbWFuZHMgd2hvc2UgaW5wdXQgYW5kIG91dHB1dCBhcmUgY29ubmVjdGVkIHdpdGggdGhlIHBpcGUgc3ltYm9sIGB8YC5cblx0ICogQHRocm93cyB7VHlwZUVycm9yfVxuXHQgKi9cblx0Y29uc3RydWN0b3IocGlwZSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dmFsaWRhdGVTdHJpbmcocGlwZSk7XG5cblx0XHR0aGlzLnBpcGUgPSBwaXBlLnNwbGl0KERFTElNSVRFUikubWFwKCh2KSA9PiB7XG5cdFx0XHRyZXR1cm4gbmV3IFRyYW5zZm9ybWVyKHYpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIHtUcmFuc2Zvcm1lcn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuXHQgKi9cblx0c2V0Q2FsbGJhY2sobmFtZSwgY2FsbGJhY2ssIGNvbnRleHQpIHtcblx0XHRmb3IgKGNvbnN0IFssIHRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucGlwZSkpIHtcblx0XHRcdHQuc2V0Q2FsbGJhY2sobmFtZSwgY2FsbGJhY2ssIGNvbnRleHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJ1biBhIHBpcGVcblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJucyB7Kn1cblx0ICovXG5cdHJ1bih2YWx1ZSkge1xuXHRcdHJldHVybiB0aGlzLnBpcGUucmVkdWNlKChhY2N1bXVsYXRvciwgdHJhbnNmb3JtZXIsIGN1cnJlbnRJbmRleCwgYXJyYXkpID0+IHtcblx0XHRcdHJldHVybiB0cmFuc2Zvcm1lci5ydW4oYWNjdW11bGF0b3IpO1xuXHRcdH0sIHZhbHVlKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgUGlwZSB9IGZyb20gXCIuLi9kYXRhL3BpcGUubWpzXCI7XG5cbmltcG9ydCB7IEJhc2VXaXRoT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUFycmF5LCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgRm9ybWF0dGVyIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGludGVybmFsT2JqZWN0U3ltYm9sID0gU3ltYm9sKFwiaW50ZXJuYWxPYmplY3RcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHdhdGNoZG9nU3ltYm9sID0gU3ltYm9sKFwid2F0Y2hkb2dcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG1hcmtlck9wZW5JbmRleFN5bWJvbCA9IFN5bWJvbChcIm1hcmtlck9wZW5JbmRleFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbWFya2VyQ2xvc2VJbmRleFN5bWJvbCA9IFN5bWJvbChcIm1hcmtlcmNsb3NlSW5kZXhcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHdvcmtpbmdEYXRhU3ltYm9sID0gU3ltYm9sKFwid29ya2luZ0RhdGFcIik7XG5cbi8qKlxuICogTWVzc2FnZXMgY2FuIGJlIGZvcm1hdHRlZCB3aXRoIHRoZSBmb3JtYXR0ZXIuIFRvIGRvIHRoaXMsIGFuIG9iamVjdCB3aXRoIHRoZSB2YWx1ZXMgbXVzdCBiZSBwYXNzZWQgdG8gdGhlIGZvcm1hdHRlci4gVGhlIG1lc3NhZ2UgY2FuIHRoZW4gY29udGFpbiBwbGFjZWhvbGRlcnMuXG4gKlxuICogTG9vayBhdCB0aGUgZXhhbXBsZSBiZWxvdy4gVGhlIHBsYWNlaG9sZGVycyB1c2UgdGhlIGxvZ2ljIG9mIFBpcGUuXG4gKlxuICogIyMgTWFya2VyIGluIG1hcmtlclxuICpcbiAqIE1hcmtlcnMgY2FuIGJlIG5lc3RlZC4gSGVyZSwgdGhlIGlubmVyIG1hcmtlciBpcyByZXNvbHZlZCBmaXJzdCBgJHtzdWJrZXl9IFx1MjFBNiAxID0gJHtteWtleTJ9YCBhbmQgdGhlbiB0aGUgb3V0ZXIgbWFya2VyIGAke215a2V5Mn1gLlxuICpcbiAqIGBgYFxuICogY29uc3QgdGV4dCA9ICcke215a2V5JHtzdWJrZXl9fSc7XG4gKiBsZXQgb2JqID0ge1xuICogIG15a2V5MjogXCIxXCIsXG4gKiAgc3Via2V5OiBcIjJcIlxuICogfTtcbiAqXG4gKiBuZXcgRm9ybWF0dGVyKG9iaikuZm9ybWF0KHRleHQpO1xuICogLy8gXHUyMUE2IDFcbiAqIGBgYFxuICpcbiAqICMjIENhbGxiYWNrc1xuICpcbiAqIFRoZSB2YWx1ZXMgaW4gYSBmb3JtYXR0ZXIgY2FuIGJlIGFkanVzdGVkIHZpYSB0aGUgY29tbWFuZHMgb2YgdGhlIGBUcmFuc2Zvcm1lcmAgb3IgdGhlYFBpcGVgLlxuICogVGhlcmUgaXMgYWxzbyB0aGUgcG9zc2liaWxpdHkgdG8gdXNlIGNhbGxiYWNrcy5cbiAqXG4gKiBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHt4OiAnMSd9LCB7XG4gKiAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAqICAgICAgICAgICAgICAgICAgICBxdW90ZTogKHZhbHVlKSA9PiB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnXCInICsgdmFsdWUgKyAnXCInXG4gKiAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICB9KTtcbiAqXG4gKiBmb3JtYXR0ZXIuZm9ybWF0KCcke3ggfCBjYWxsOnF1b3RlfScpKVxuICogLy8gXHUyMUE2IFwiMVwiXG4gKlxuICogIyMgTWFya2VyIHdpdGggcGFyYW1ldGVyXG4gKlxuICogQSBzdHJpbmcgY2FuIGFsc28gYnJpbmcgaXRzIG93biB2YWx1ZXMuIFRoZXNlIG11c3QgdGhlbiBiZSBzZXBhcmF0ZWQgZnJvbSB0aGUga2V5IGJ5IGEgc2VwYXJhdG9yIGA6OmAuXG4gKiBUaGUgdmFsdWVzIHRoZW1zZWx2ZXMgbXVzdCBiZSBzcGVjaWZpZWQgaW4ga2V5L3ZhbHVlIHBhaXJzLiBUaGUga2V5IG11c3QgYmUgc2VwYXJhdGVkIGZyb20gdGhlIHZhbHVlIGJ5IGEgc2VwYXJhdG9yIGA9YC5cbiAqXG4gKiBXaGVuIHVzaW5nIGEgcGlwZSwgeW91IG11c3QgcGF5IGF0dGVudGlvbiB0byB0aGUgc2VwYXJhdG9ycy5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCB7Rm9ybWF0dGVyfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90ZXh0L2Zvcm1hdHRlci5tanMnO1xuICpcbiAqIG5ldyBGb3JtYXR0ZXIoe1xuICogICAgICAgYToge1xuICogICAgICAgICAgIGI6IHtcbiAqICAgICAgICAgICAgICAgYzogXCJIZWxsb1wiXG4gKiAgICAgICAgICAgfSxcbiAqICAgICAgICAgICBkOiBcIndvcmxkXCIsXG4gKiAgICAgICB9XG4gKiAgIH0pLmZvcm1hdChcIiR7YS5iLmN9ICR7YS5kIHwgdWNmaXJzdH0hXCIpOyAvLyB3aXRoIHBpcGVcbiAqXG4gKiAvLyBcdTIxQTYgSGVsbG8gV29ybGQhXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVGV4dFxuICovXG5jbGFzcyBGb3JtYXR0ZXIgZXh0ZW5kcyBCYXNlV2l0aE9wdGlvbnMge1xuXHQvKipcblx0ICogRGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBtYXJrZXJzIGFyZSBgJHtgIGFuZCBgfWBcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IG9iamVjdFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuXHQgKi9cblx0Y29uc3RydWN0b3Iob2JqZWN0LCBvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cdFx0dGhpc1tpbnRlcm5hbE9iamVjdFN5bWJvbF0gPSBvYmplY3QgfHwge307XG5cdFx0dGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdID0gMDtcblx0XHR0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdID0gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gbWFya2VyXG5cdCAqIEBwcm9wZXJ0eSB7YXJyYXl9IG1hcmtlci5vcGVuPVtcIiR7XCJdXG5cdCAqIEBwcm9wZXJ0eSB7YXJyYXl9IG1hcmtlci5jbG9zZT1bXCIke1wiXVxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gcGFyYW1ldGVyXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXJhbWV0ZXIuZGVsaW1pdGVyPVwiOjpcIlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcGFyYW1ldGVyLmFzc2lnbm1lbnQ9XCI9XCJcblx0ICogQHByb3BlcnR5IHtvYmplY3R9IGNhbGxiYWNrcz17fVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRtYXJrZXI6IHtcblx0XHRcdFx0b3BlbjogW1wiJHtcIl0sXG5cdFx0XHRcdGNsb3NlOiBbXCJ9XCJdLFxuXHRcdFx0fSxcblx0XHRcdHBhcmFtZXRlcjoge1xuXHRcdFx0XHRkZWxpbWl0ZXI6IFwiOjpcIixcblx0XHRcdFx0YXNzaWdubWVudDogXCI9XCIsXG5cdFx0XHR9LFxuXHRcdFx0Y2FsbGJhY2tzOiB7fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgbmV3IFBhcmFtZXRlciBDaGFyYWN0ZXJcblx0ICpcblx0ICogRGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBjaGFycyBhcmUgYDo6YCBhbmQgYD1gXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBmb3JtYXR0ZXIuc2V0UGFyYW1ldGVyQ2hhcnMoJyMnKTtcblx0ICogZm9ybWF0dGVyLnNldFBhcmFtZXRlckNoYXJzKCdbJywnXScpO1xuXHQgKiBmb3JtYXR0ZXIuc2V0UGFyYW1ldGVyQ2hhcnMoJ2kxOG57JywnfScpO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGRlbGltaXRlclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gYXNzaWdubWVudFxuXHQgKiBAcmV0dXJuIHtGb3JtYXR0ZXJ9XG5cdCAqIEBzaW5jZSAxLjI0LjBcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICovXG5cdHNldFBhcmFtZXRlckNoYXJzKGRlbGltaXRlciwgYXNzaWdubWVudCkge1xuXHRcdGlmIChkZWxpbWl0ZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJwYXJhbWV0ZXJcIl1bXCJkZWxpbWl0ZXJcIl0gPVxuXHRcdFx0XHR2YWxpZGF0ZVN0cmluZyhkZWxpbWl0ZXIpO1xuXHRcdH1cblxuXHRcdGlmIChhc3NpZ25tZW50ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wicGFyYW1ldGVyXCJdW1wiYXNzaWdubWVudFwiXSA9XG5cdFx0XHRcdHZhbGlkYXRlU3RyaW5nKGFzc2lnbm1lbnQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBuZXcgTWFya2VyXG5cdCAqXG5cdCAqIERlZmF1bHQgdmFsdWVzIGZvciB0aGUgbWFya2VycyBhcmUgYCR7YCBhbmQgYH1gXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBmb3JtYXR0ZXIuc2V0TWFya2VyKCcjJyk7IC8vIG9wZW4gYW5kIGNsb3NlIGFyZSBib3RoICNcblx0ICogZm9ybWF0dGVyLnNldE1hcmtlcignWycsJ10nKTtcblx0ICogZm9ybWF0dGVyLnNldE1hcmtlcignaTE4bnsnLCd9Jyk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge2FycmF5fHN0cmluZ30gb3BlblxuXHQgKiBAcGFyYW0ge2FycmF5fHN0cmluZ3x1bmRlZmluZWR9IGNsb3NlXG5cdCAqIEByZXR1cm4ge0Zvcm1hdHRlcn1cblx0ICogQHNpbmNlIDEuMTIuMFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0c2V0TWFya2VyKG9wZW4sIGNsb3NlKSB7XG5cdFx0aWYgKGNsb3NlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNsb3NlID0gb3Blbjtcblx0XHR9XG5cblx0XHRpZiAoaXNTdHJpbmcob3BlbikpIG9wZW4gPSBbb3Blbl07XG5cdFx0aWYgKGlzU3RyaW5nKGNsb3NlKSkgY2xvc2UgPSBbY2xvc2VdO1xuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJvcGVuXCJdID0gdmFsaWRhdGVBcnJheShvcGVuKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcIm1hcmtlclwiXVtcImNsb3NlXCJdID0gdmFsaWRhdGVBcnJheShjbG9zZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHRcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdG9vIGRlZXAgbmVzdGluZ1xuXHQgKi9cblx0Zm9ybWF0KHRleHQpIHtcblx0XHR0aGlzW3dhdGNoZG9nU3ltYm9sXSA9IDA7XG5cdFx0dGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdID0gMDtcblx0XHR0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdID0gMDtcblx0XHR0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXSA9IHt9O1xuXHRcdHJldHVybiBmb3JtYXQuY2FsbCh0aGlzLCB0ZXh0KTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGZvcm1hdCh0ZXh0KSB7XG5cdHRoaXNbd2F0Y2hkb2dTeW1ib2xdKys7XG5cdGlmICh0aGlzW3dhdGNoZG9nU3ltYm9sXSA+IDIwKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidG9vIGRlZXAgbmVzdGluZ1wiKTtcblx0fVxuXG5cdGNvbnN0IG9wZW5NYXJrZXIgPVxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wib3BlblwiXT8uW3RoaXNbbWFya2VyT3BlbkluZGV4U3ltYm9sXV07XG5cdGNvbnN0IGNsb3NlTWFya2VyID1cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcIm1hcmtlclwiXVtcImNsb3NlXCJdPy5bdGhpc1ttYXJrZXJDbG9zZUluZGV4U3ltYm9sXV07XG5cblx0Ly8gY29udGFpbnMgbm8gcGxhY2Vob2xkZXJzXG5cdGlmICh0ZXh0LmluZGV4T2Yob3Blbk1hcmtlcikgPT09IC0xIHx8IHRleHQuaW5kZXhPZihjbG9zZU1hcmtlcikgPT09IC0xKSB7XG5cdFx0cmV0dXJuIHRleHQ7XG5cdH1cblxuXHRsZXQgcmVzdWx0ID0gdG9rZW5pemUuY2FsbChcblx0XHR0aGlzLFxuXHRcdHZhbGlkYXRlU3RyaW5nKHRleHQpLFxuXHRcdG9wZW5NYXJrZXIsXG5cdFx0Y2xvc2VNYXJrZXIsXG5cdCk7XG5cblx0aWYgKFxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wib3BlblwiXT8uW3RoaXNbbWFya2VyT3BlbkluZGV4U3ltYm9sXSArIDFdXG5cdCkge1xuXHRcdHRoaXNbbWFya2VyT3BlbkluZGV4U3ltYm9sXSsrO1xuXHR9XG5cblx0aWYgKFxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wiY2xvc2VcIl0/Llt0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdICsgMV1cblx0KSB7XG5cdFx0dGhpc1ttYXJrZXJDbG9zZUluZGV4U3ltYm9sXSsrO1xuXHR9XG5cblx0cmVzdWx0ID0gZm9ybWF0LmNhbGwodGhpcywgcmVzdWx0KTtcblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEyLjBcbiAqIEBwYXJhbSB0ZXh0XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplKHRleHQsIG9wZW5NYXJrZXIsIGNsb3NlTWFya2VyKSB7XG5cdGNvbnN0IGZvcm1hdHRlZCA9IFtdO1xuXG5cdGNvbnN0IHBhcmFtZXRlckFzc2lnbm1lbnQgPSB0aGlzW2ludGVybmFsU3ltYm9sXVtcInBhcmFtZXRlclwiXVtcImFzc2lnbm1lbnRcIl07XG5cdGNvbnN0IHBhcmFtZXRlckRlbGltaXRlciA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wicGFyYW1ldGVyXCJdW1wiZGVsaW1pdGVyXCJdO1xuXHRjb25zdCBjYWxsYmFja3MgPSB0aGlzW2ludGVybmFsU3ltYm9sXVtcImNhbGxiYWNrc1wiXTtcblxuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdGNvbnN0IHN0YXJ0SW5kZXggPSB0ZXh0LmluZGV4T2Yob3Blbk1hcmtlcik7XG5cdFx0Ly8gbm8gbWFya2VyXG5cdFx0aWYgKHN0YXJ0SW5kZXggPT09IC0xKSB7XG5cdFx0XHRmb3JtYXR0ZWQucHVzaCh0ZXh0KTtcblx0XHRcdGJyZWFrO1xuXHRcdH0gZWxzZSBpZiAoc3RhcnRJbmRleCA+IDApIHtcblx0XHRcdGZvcm1hdHRlZC5wdXNoKHRleHQuc3Vic3RyaW5nKDAsIHN0YXJ0SW5kZXgpKTtcblx0XHRcdHRleHQgPSB0ZXh0LnN1YnN0cmluZyhzdGFydEluZGV4KTtcblx0XHR9XG5cblx0XHRsZXQgZW5kSW5kZXggPSB0ZXh0LnN1YnN0cmluZyhvcGVuTWFya2VyLmxlbmd0aCkuaW5kZXhPZihjbG9zZU1hcmtlcik7XG5cdFx0aWYgKGVuZEluZGV4ICE9PSAtMSkgZW5kSW5kZXggKz0gb3Blbk1hcmtlci5sZW5ndGg7XG5cdFx0bGV0IGluc2lkZVN0YXJ0SW5kZXggPSB0ZXh0XG5cdFx0XHQuc3Vic3RyaW5nKG9wZW5NYXJrZXIubGVuZ3RoKVxuXHRcdFx0LmluZGV4T2Yob3Blbk1hcmtlcik7XG5cdFx0aWYgKGluc2lkZVN0YXJ0SW5kZXggIT09IC0xKSB7XG5cdFx0XHRpbnNpZGVTdGFydEluZGV4ICs9IG9wZW5NYXJrZXIubGVuZ3RoO1xuXHRcdFx0aWYgKGluc2lkZVN0YXJ0SW5kZXggPCBlbmRJbmRleCkge1xuXHRcdFx0XHRjb25zdCByZXN1bHQgPSB0b2tlbml6ZS5jYWxsKFxuXHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0dGV4dC5zdWJzdHJpbmcoaW5zaWRlU3RhcnRJbmRleCksXG5cdFx0XHRcdFx0b3Blbk1hcmtlcixcblx0XHRcdFx0XHRjbG9zZU1hcmtlcixcblx0XHRcdFx0KTtcblx0XHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIGluc2lkZVN0YXJ0SW5kZXgpICsgcmVzdWx0O1xuXHRcdFx0XHRlbmRJbmRleCA9IHRleHQuc3Vic3RyaW5nKG9wZW5NYXJrZXIubGVuZ3RoKS5pbmRleE9mKGNsb3NlTWFya2VyKTtcblx0XHRcdFx0aWYgKGVuZEluZGV4ICE9PSAtMSkgZW5kSW5kZXggKz0gb3Blbk1hcmtlci5sZW5ndGg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGVuZEluZGV4ID09PSAtMSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwic3ludGF4IGVycm9yIGluIGZvcm1hdHRlciB0ZW1wbGF0ZVwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBrZXkgPSB0ZXh0LnN1YnN0cmluZyhvcGVuTWFya2VyLmxlbmd0aCwgZW5kSW5kZXgpO1xuXHRcdGNvbnN0IHBhcnRzID0ga2V5LnNwbGl0KHBhcmFtZXRlckRlbGltaXRlcik7XG5cdFx0Y29uc3QgY3VycmVudFBpcGUgPSBwYXJ0cy5zaGlmdCgpO1xuXG5cdFx0dGhpc1t3b3JraW5nRGF0YVN5bWJvbF0gPSBleHRlbmQoXG5cdFx0XHR7fSxcblx0XHRcdHRoaXNbaW50ZXJuYWxPYmplY3RTeW1ib2xdLFxuXHRcdFx0dGhpc1t3b3JraW5nRGF0YVN5bWJvbF0sXG5cdFx0KTtcblxuXHRcdGZvciAoY29uc3Qga3Ygb2YgcGFydHMpIHtcblx0XHRcdGNvbnN0IFtrLCB2XSA9IGt2LnNwbGl0KHBhcmFtZXRlckFzc2lnbm1lbnQpO1xuXHRcdFx0dGhpc1t3b3JraW5nRGF0YVN5bWJvbF1ba10gPSB2O1xuXHRcdH1cblxuXHRcdGNvbnN0IHQxID0ga2V5LnNwbGl0KFwifFwiKS5zaGlmdCgpLnRyaW0oKTsgLy8gcGlwZSBzeW1ib2xcblx0XHRjb25zdCB0MiA9IHQxLnNwbGl0KFwiOjpcIikuc2hpZnQoKS50cmltKCk7IC8vIGtleSB2YWx1ZSBkZWxpbWl0ZXJcblx0XHRjb25zdCB0MyA9IHQyLnNwbGl0KFwiLlwiKS5zaGlmdCgpLnRyaW0oKTsgLy8gcGF0aCBkZWxpbWl0ZXJcblx0XHRjb25zdCBwcmVmaXggPSB0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXT8uW3QzXSA/IFwicGF0aDpcIiA6IFwic3RhdGljOlwiO1xuXG5cdFx0bGV0IGNvbW1hbmQgPSBcIlwiO1xuXHRcdGlmIChcblx0XHRcdHByZWZpeCAmJlxuXHRcdFx0a2V5LmluZGV4T2YocHJlZml4KSAhPT0gMCAmJlxuXHRcdFx0a2V5LmluZGV4T2YoXCJwYXRoOlwiKSAhPT0gMCAmJlxuXHRcdFx0a2V5LmluZGV4T2YoXCJzdGF0aWM6XCIpICE9PSAwXG5cdFx0KSB7XG5cdFx0XHRjb21tYW5kID0gcHJlZml4O1xuXHRcdH1cblxuXHRcdGNvbW1hbmQgKz0gY3VycmVudFBpcGU7XG5cblx0XHRjb25zdCBwaXBlID0gbmV3IFBpcGUoY29tbWFuZCk7XG5cblx0XHRpZiAoaXNPYmplY3QoY2FsbGJhY2tzKSkge1xuXHRcdFx0Zm9yIChjb25zdCBbbmFtZSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGNhbGxiYWNrcykpIHtcblx0XHRcdFx0cGlwZS5zZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjayk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9ybWF0dGVkLnB1c2godmFsaWRhdGVTdHJpbmcocGlwZS5ydW4odGhpc1t3b3JraW5nRGF0YVN5bWJvbF0pKSk7XG5cblx0XHR0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoZW5kSW5kZXggKyBjbG9zZU1hcmtlci5sZW5ndGgpO1xuXHR9XG5cblx0cmV0dXJuIGZvcm1hdHRlZC5qb2luKFwiXCIpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVBcnJheSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IE1lZGlhVHlwZSwgcGFyc2VNZWRpYVR5cGUgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWwgPSBTeW1ib2woXCJpbnRlcm5hbFwiKTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQYXJhbWV0ZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBrZXlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIGFuIG9iamVjdCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5UeXBlcy5NZWRpYVR5cGUoKWAuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICovXG5jbGFzcyBNZWRpYVR5cGUgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdWJ0eXBlXG5cdCAqIEBwYXJhbSB7TW9uc3Rlci5UeXBlcy5QYXJhbWV0ZXJbXX0gcGFyYW1ldGVyXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcih0eXBlLCBzdWJ0eXBlLCBwYXJhbWV0ZXIpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpc1tpbnRlcm5hbF0gPSB7XG5cdFx0XHR0eXBlOiB2YWxpZGF0ZVN0cmluZyh0eXBlKS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0c3VidHlwZTogdmFsaWRhdGVTdHJpbmcoc3VidHlwZSkudG9Mb3dlckNhc2UoKSxcblx0XHRcdHBhcmFtZXRlcjogW10sXG5cdFx0fTtcblxuXHRcdGlmIChwYXJhbWV0ZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpc1tpbnRlcm5hbF1bXCJwYXJhbWV0ZXJcIl0gPSB2YWxpZGF0ZUFycmF5KHBhcmFtZXRlcik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvbWVkaWEtdHlwZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTdHJpbmd9XG5cdCAqL1xuXHRnZXQgdHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0udHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTdHJpbmd9XG5cdCAqL1xuXHRnZXQgc3VidHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0uc3VidHlwZTtcblx0fVxuXG5cdC8vIC8qKlxuXHQvLyAgKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLlBhcmFtZXRlcltdfVxuXHQvLyAgKi9cblx0Ly8gZ2V0IHBhcmFtZXRlcigpIHtcblx0Ly8gXHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0ucGFyYW1ldGVyO1xuXHQvLyB9XG5cblx0LyoqXG5cdCAqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01hcH1cblx0ICovXG5cdGdldCBwYXJhbWV0ZXIoKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuXG5cdFx0dGhpc1tpbnRlcm5hbF1bXCJwYXJhbWV0ZXJcIl0uZm9yRWFjaCgocCkgPT4ge1xuXHRcdFx0bGV0IHZhbHVlID0gcC52YWx1ZTtcblxuXHRcdFx0Ly8gaW50ZXJuYWxseSBzcGVjaWFsIHZhbHVlcyBhcmUgcGFydGx5IHN0b3JlZCB3aXRoIHF1b3RlcywgdGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZW0uXG5cdFx0XHRpZiAodmFsdWUuc3RhcnRzV2l0aCgnXCInKSAmJiB2YWx1ZS5lbmRzV2l0aCgnXCInKSkge1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygxLCB2YWx1ZS5sZW5ndGggLSAxKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzdWx0LnNldChwLmtleSwgdmFsdWUpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRjb25zdCBwYXJhbWV0ZXIgPSBbXTtcblx0XHRmb3IgKGNvbnN0IGEgb2YgdGhpc1tpbnRlcm5hbF0ucGFyYW1ldGVyKSB7XG5cdFx0XHRwYXJhbWV0ZXIucHVzaChgJHthLmtleX09JHthLnZhbHVlfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBgJHt0aGlzW2ludGVybmFsXS50eXBlfS8ke3RoaXNbaW50ZXJuYWxdLnN1YnR5cGV9JHtcblx0XHRcdHBhcmFtZXRlci5sZW5ndGggPiAwID8gYDske3BhcmFtZXRlci5qb2luKFwiO1wiKX1gIDogXCJcIlxuXHRcdH1gO1xuXHR9XG59XG5cbi8qKlxuICogWW91IGNhbiBjYWxsIHRoZSBmdW5jdGlvbiB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLlR5cGVzLnBhcnNlTWVkaWFUeXBlKClgLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge01vbnN0ZXJ9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL21vbnN0ZXIubWpzJztcbiAqIGNvbnNvbGUubG9nKE1vbnN0ZXIuVHlwZXMucGFyc2VNZWRpYVR5cGUoKSlcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhbHNvIGludGVncmF0ZSB0aGlzIGZ1bmN0aW9uIGluZGl2aWR1YWxseS5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtwYXJzZU1lZGlhVHlwZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvZGF0YXVybC5tanMnO1xuICogY29uc29sZS5sb2cocGFyc2VNZWRpYVR5cGUoKSlcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogU3BlY2lmaWNhdGlvbjpcbiAqXG4gKiBgYGBcbiAqIGRhdGF1cmwgICAgOj0gXCJkYXRhOlwiIFsgbWVkaWF0eXBlIF0gWyBcIjtiYXNlNjRcIiBdIFwiLFwiIGRhdGFcbiAqIG1lZGlhdHlwZSAgOj0gWyB0eXBlIFwiL1wiIHN1YnR5cGUgXSAqKCBcIjtcIiBwYXJhbWV0ZXIgKVxuICogZGF0YSAgICAgICA6PSAqdXJsY2hhclxuICogcGFyYW1ldGVyICA6PSBhdHRyaWJ1dGUgXCI9XCIgdmFsdWVcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZWRpYXR5cGVcbiAqIEByZXR1cm4ge01vbnN0ZXIuVHlwZXMuTWVkaWFUeXBlfVxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIwNDUjc2VjdGlvbi01LjFcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdGhlIG1pbWV0eXBlIGNhbiBub3QgYmUgcGFyc2VkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IGJsYW5rIHZhbHVlIGlzIG5vdCBhbGxvd2VkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IG1hbGZvcm1lZCBkYXRhIHVybFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuZnVuY3Rpb24gcGFyc2VNZWRpYVR5cGUobWVkaWF0eXBlKSB7XG5cdGNvbnN0IHJlZ2V4ID1cblx0XHQvKD88dHlwZT5bQS1aYS16XSt8XFwqKVxcLyg/PHN1YnR5cGU+KFthLXpBLVowLTkuXFwrX1xcLV0rKXxcXCp8KSg/PHBhcmFtZXRlcj5cXHMqO1xccyooW2EtekEtWjAtOV0rKVxccyooPVxccyooXCI/W0EtWmEtejAtOV9cXC1dK1wiPykpPykqL2c7XG5cdGNvbnN0IHJlc3VsdCA9IHJlZ2V4LmV4ZWModmFsaWRhdGVTdHJpbmcobWVkaWF0eXBlKSk7XG5cblx0Y29uc3QgZ3JvdXBzID0gcmVzdWx0Py5bXCJncm91cHNcIl07XG5cdGlmIChncm91cHMgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0aGUgbWltZXR5cGUgY2FuIG5vdCBiZSBwYXJzZWRcIik7XG5cdH1cblxuXHRjb25zdCB0eXBlID0gZ3JvdXBzPy5bXCJ0eXBlXCJdO1xuXHRjb25zdCBzdWJ0eXBlID0gZ3JvdXBzPy5bXCJzdWJ0eXBlXCJdO1xuXHRjb25zdCBwYXJhbWV0ZXIgPSBncm91cHM/LltcInBhcmFtZXRlclwiXTtcblxuXHRpZiAoc3VidHlwZSA9PT0gXCJcIiB8fCB0eXBlID09PSBcIlwiKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcImJsYW5rIHZhbHVlIGlzIG5vdCBhbGxvd2VkXCIpO1xuXHR9XG5cblx0cmV0dXJuIG5ldyBNZWRpYVR5cGUodHlwZSwgc3VidHlwZSwgcGFyc2VQYXJhbWV0ZXIocGFyYW1ldGVyKSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTguMFxuICogQHBhcmFtIHtTdHJpbmd9IHBhcmFtZXRlclxuICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5QYXJhbWV0ZXJbXXx1bmRlZmluZWR9XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICovXG5mdW5jdGlvbiBwYXJzZVBhcmFtZXRlcihwYXJhbWV0ZXIpIHtcblx0aWYgKCFpc1N0cmluZyhwYXJhbWV0ZXIpKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdHBhcmFtZXRlci5zcGxpdChcIjtcIikuZm9yRWFjaCgoZW50cnkpID0+IHtcblx0XHRlbnRyeSA9IGVudHJ5LnRyaW0oKTtcblx0XHRpZiAoZW50cnkgPT09IFwiXCIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBrdiA9IGVudHJ5LnNwbGl0KFwiPVwiKTtcblxuXHRcdGNvbnN0IGtleSA9IHZhbGlkYXRlU3RyaW5nKGt2Py5bMF0pLnRyaW0oKTtcblx0XHRjb25zdCB2YWx1ZSA9IHZhbGlkYXRlU3RyaW5nKGt2Py5bMV0pLnRyaW0oKTtcblxuXHRcdC8vIGlmIHZhbHVlcyBhcmUgcXVvdGVkLCB0aGV5IHJlbWFpbiBzbyBpbnRlcm5hbGx5XG5cdFx0cmVzdWx0LnB1c2goe1xuXHRcdFx0a2V5OiBrZXksXG5cdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0fSk7XG5cdH0pO1xuXG5cdHJldHVybiByZXN1bHQ7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBNZWRpYVR5cGUsIHBhcnNlTWVkaWFUeXBlIH0gZnJvbSBcIi4vbWVkaWF0eXBlLm1qc1wiO1xuaW1wb3J0IHtcblx0dmFsaWRhdGVCb29sZWFuLFxuXHR2YWxpZGF0ZUluc3RhbmNlLFxuXHR2YWxpZGF0ZVN0cmluZyxcbn0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBEYXRhVXJsLCBwYXJzZURhdGFVUkwgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWwgPSBTeW1ib2woXCJpbnRlcm5hbFwiKTtcblxuLyoqXG4gKiBZb3UgY2FuIGNyZWF0ZSBhbiBvYmplY3QgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgbmV3IE1vbnN0ZXIuVHlwZXMuRGF0YVVybCgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvQmFzaWNzX29mX0hUVFAvRGF0YV9VUklzXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjM5N1xuICovXG5jbGFzcyBEYXRhVXJsIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gY29udGVudFxuXHQgKiBAcGFyYW0ge1N0cmluZ3xNb25zdGVyLlR5cGVzLk1lZGlhVHlwZX0gbWVkaWF0eXBlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYmFzZTY0PXRydWVcblx0ICovXG5cdGNvbnN0cnVjdG9yKGNvbnRlbnQsIG1lZGlhdHlwZSwgYmFzZTY0KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChpc1N0cmluZyhtZWRpYXR5cGUpKSB7XG5cdFx0XHRtZWRpYXR5cGUgPSBwYXJzZU1lZGlhVHlwZShtZWRpYXR5cGUpO1xuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxdID0ge1xuXHRcdFx0Y29udGVudDogdmFsaWRhdGVTdHJpbmcoY29udGVudCksXG5cdFx0XHRtZWRpYXR5cGU6IHZhbGlkYXRlSW5zdGFuY2UobWVkaWF0eXBlLCBNZWRpYVR5cGUpLFxuXHRcdFx0YmFzZTY0OiB2YWxpZGF0ZUJvb2xlYW4oYmFzZTY0ID09PSB1bmRlZmluZWQgPyB0cnVlIDogYmFzZTY0KSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvZGF0YS11cmxcIik7XG5cdH1cblxuXHRnZXQgY29udGVudCgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0uYmFzZTY0XG5cdFx0XHQ/IGF0b2IodGhpc1tpbnRlcm5hbF0uY29udGVudClcblx0XHRcdDogdGhpc1tpbnRlcm5hbF0uY29udGVudDtcblx0fVxuXG5cdGdldCBtZWRpYXR5cGUoKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxdLm1lZGlhdHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMyMzk3XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRsZXQgY29udGVudCA9IHRoaXNbaW50ZXJuYWxdLmNvbnRlbnQ7XG5cblx0XHRpZiAodGhpc1tpbnRlcm5hbF0uYmFzZTY0ID09PSB0cnVlKSB7XG5cdFx0XHRjb250ZW50ID0gYDtiYXNlNjQsJHtjb250ZW50fWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRlbnQgPSBgLCR7ZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRlbnQpfWA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGBkYXRhOiR7dGhpc1tpbnRlcm5hbF0ubWVkaWF0eXBlLnRvU3RyaW5nKCl9JHtjb250ZW50fWA7XG5cdH1cbn1cblxuLyoqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIGZ1bmN0aW9uIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYE1vbnN0ZXIuVHlwZXMucGFyc2VEYXRhVVJMKClgLlxuICpcbiAqIFNwZWNpZmljYXRpb246XG4gKlxuICogYGBgXG4gKiBkYXRhdXJsICAgIDo9IFwiZGF0YTpcIiBbIG1lZGlhdHlwZSBdIFsgXCI7YmFzZTY0XCIgXSBcIixcIiBkYXRhXG4gKiBtZWRpYXR5cGUgIDo9IFsgdHlwZSBcIi9cIiBzdWJ0eXBlIF0gKiggXCI7XCIgcGFyYW1ldGVyIClcbiAqIGRhdGEgICAgICAgOj0gKnVybGNoYXJcbiAqIHBhcmFtZXRlciAgOj0gYXR0cmlidXRlIFwiPVwiIHZhbHVlXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZGF0YXVybFxuICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5EYXRhVXJsfVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0Jhc2ljc19vZl9IVFRQL0RhdGFfVVJJc1xuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIzOTdcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gaW5jb3JyZWN0IG9yIG1pc3NpbmcgZGF0YSBwcm90b2NvbFxuICogQHRocm93cyB7VHlwZUVycm9yfSBtYWxmb3JtZWQgZGF0YSB1cmxcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlRGF0YVVSTChkYXRhdXJsKSB7XG5cdHZhbGlkYXRlU3RyaW5nKGRhdGF1cmwpO1xuXG5cdGRhdGF1cmwgPSBkYXRhdXJsLnRyaW0oKTtcblxuXHRpZiAoZGF0YXVybC5zdWJzdHJpbmcoMCwgNSkgIT09IFwiZGF0YTpcIikge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJpbmNvcnJlY3Qgb3IgbWlzc2luZyBkYXRhIHByb3RvY29sXCIpO1xuXHR9XG5cblx0ZGF0YXVybCA9IGRhdGF1cmwuc3Vic3RyaW5nKDUpO1xuXG5cdGNvbnN0IHAgPSBkYXRhdXJsLmluZGV4T2YoXCIsXCIpO1xuXHRpZiAocCA9PT0gLTEpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwibWFsZm9ybWVkIGRhdGEgdXJsXCIpO1xuXHR9XG5cblx0bGV0IGNvbnRlbnQgPSBkYXRhdXJsLnN1YnN0cmluZyhwICsgMSk7XG5cdGNvbnN0IG1lZGlhdHlwZUFuZEJhc2U2NCA9IGRhdGF1cmwuc3Vic3RyaW5nKDAsIHApLnRyaW0oKTtcblx0bGV0IG1lZGlhdHlwZSA9IFwidGV4dC9wbGFpbjtjaGFyc2V0PVVTLUFTQ0lJXCI7XG5cdGxldCBiYXNlNjRGbGFnID0gZmFsc2U7XG5cblx0aWYgKG1lZGlhdHlwZUFuZEJhc2U2NCAhPT0gXCJcIikge1xuXHRcdG1lZGlhdHlwZSA9IG1lZGlhdHlwZUFuZEJhc2U2NDtcblx0XHRpZiAobWVkaWF0eXBlQW5kQmFzZTY0LmVuZHNXaXRoKFwiYmFzZTY0XCIpKSB7XG5cdFx0XHRjb25zdCBpID0gbWVkaWF0eXBlQW5kQmFzZTY0Lmxhc3RJbmRleE9mKFwiO1wiKTtcblx0XHRcdG1lZGlhdHlwZSA9IG1lZGlhdHlwZUFuZEJhc2U2NC5zdWJzdHJpbmcoMCwgaSk7XG5cdFx0XHRiYXNlNjRGbGFnID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGVudCA9IGRlY29kZVVSSUNvbXBvbmVudChjb250ZW50KTtcblx0XHR9XG5cblx0XHRtZWRpYXR5cGUgPSBwYXJzZU1lZGlhVHlwZShtZWRpYXR5cGUpO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnRlbnQgPSBkZWNvZGVVUklDb21wb25lbnQoY29udGVudCk7XG5cdH1cblxuXHRyZXR1cm4gbmV3IERhdGFVcmwoY29udGVudCwgbWVkaWF0eXBlLCBiYXNlNjRGbGFnKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBRdWV1ZSB9O1xuXG4vKipcbiAqIEEgcXVldWUgaXMgYSBsaXN0IG9mIGl0ZW1zIHRoYXQgYXJlIHByb2Nlc3NlZCBvbmUgYWZ0ZXIgYW5vdGhlciAoZmlyc3QgaW4sIGZpcnN0IG91dCkuXG4gKlxuICogV2l0aCBhIHF1ZXVlIHlvdSBjYW4gYWRkIGl0ZW1zIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QgYFF1ZXVlLmFkZCgpYCBhbmQgcmVtb3ZlIGl0ZW1zIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCBgUXVldWUucG9wKClgLlxuICpcbiAqIFdpdGggYFF1ZXVlLnBlZWsoKWAgeW91IGNhbiBnZXQgdGhlIGZpcnN0IGl0ZW0gd2l0aG91dCByZW1vdmluZyBpdCBmcm9tIHRoZSBsaXN0LlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoZSBpbnN0YW5jZSB2aWEgYG5ldyBRdWV1ZSgpYC5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvcXVldWUubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAc3VtbWFyeSBBIFF1ZXVlIChGaWZvKVxuICovXG5jbGFzcyBRdWV1ZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5kYXRhID0gW107XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9xdWV1ZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aXNFbXB0eSgpIHtcblx0XHRyZXR1cm4gdGhpcy5kYXRhLmxlbmd0aCA9PT0gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWFkIHRoZSBlbGVtZW50IGF0IHRoZSBmcm9udCBvZiB0aGUgcXVldWUgd2l0aG91dCByZW1vdmluZyBpdC5cblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHBlZWsoKSB7XG5cdFx0aWYgKHRoaXMuaXNFbXB0eSgpKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmRhdGFbMF07XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgbmV3IGVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybnMge1F1ZXVlfVxuXHQgKi9cblx0YWRkKHZhbHVlKSB7XG5cdFx0dGhpcy5kYXRhLnB1c2godmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJlbW92ZSBhbGwgZW50cmllc1xuXHQgKlxuXHQgKiBAcmV0dXJucyB7UXVldWV9XG5cdCAqL1xuXHRjbGVhcigpIHtcblx0XHR0aGlzLmRhdGEgPSBbXTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgdGhlIGVsZW1lbnQgYXQgdGhlIGZyb250IG9mIHRoZSBxdWV1ZVxuXHQgKiBJZiB0aGUgcXVldWUgaXMgZW1wdHksIHJldHVybiB1bmRlZmluZWQuXG5cdCAqXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRwb2xsKCkge1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5zaGlmdCgpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gXCIuL3F1ZXVlLm1qc1wiO1xuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgVW5pcXVlUXVldWUgfTtcblxuLyoqXG4gKiBBbiBVbmlxdWVRdWV1ZSBpcyBhIHF1ZXVlIHRoYXQgY29udGFpbnMgaXRlbXMgb25seSBvbmNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEBzdW1tYXJ5IEEgcXVldWUgZm9yIHVuaXF1ZSB2YWx1ZXNcbiAqL1xuY2xhc3MgVW5pcXVlUXVldWUgZXh0ZW5kcyBRdWV1ZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdHVuaXF1ZTogbmV3IFdlYWtTZXQoKSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIG5ldyBlbGVtZW50IHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gdmFsdWVcblx0ICogQHJldHVybnMge1F1ZXVlfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuXHQgKi9cblx0YWRkKHZhbHVlKSB7XG5cdFx0dmFsaWRhdGVPYmplY3QodmFsdWUpO1xuXG5cdFx0aWYgKCF0aGlzW2ludGVybmFsU3ltYm9sXS51bmlxdWUuaGFzKHZhbHVlKSkge1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0udW5pcXVlLmFkZCh2YWx1ZSk7XG5cdFx0XHRzdXBlci5hZGQodmFsdWUpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJlbW92ZSBhbGwgZW50cmllc1xuXHQgKlxuXHQgKiBAcmV0dXJucyB7UXVldWV9XG5cdCAqL1xuXHRjbGVhcigpIHtcblx0XHRzdXBlci5jbGVhcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnVuaXF1ZSA9IG5ldyBXZWFrU2V0KCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlIHRoZSBlbGVtZW50IGF0IHRoZSBmcm9udCBvZiB0aGUgcXVldWVcblx0ICogSWYgdGhlIHF1ZXVlIGlzIGVtcHR5LCByZXR1cm4gdW5kZWZpbmVkLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtvYmplY3R9XG5cdCAqL1xuXHRwb2xsKCkge1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmRhdGEuc2hpZnQoKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS51bmlxdWUuZGVsZXRlKHZhbHVlKTtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tIFwiLi9pcy5tanNcIjtcbmltcG9ydCB7IFRva2VuTGlzdCB9IGZyb20gXCIuL3Rva2VubGlzdC5tanNcIjtcbmltcG9ydCB7IFVuaXF1ZVF1ZXVlIH0gZnJvbSBcIi4vdW5pcXVlcXVldWUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBPYnNlcnZlciB9O1xuXG4vKipcbiAqIEFuIG9ic2VydmVyIG1hbmFnZXMgYSBjYWxsYmFjayBmdW5jdGlvblxuICpcbiAqIFRoZSB1cGRhdGUgbWV0aG9kIGlzIGNhbGxlZCB3aXRoIHRoZSBzdWJqZWN0IG9iamVjdCBhcyB0aGlzIHBvaW50ZXIuIEZvciB0aGlzIHJlYXNvbiB0aGUgY2FsbGJhY2sgc2hvdWxkIG5vdFxuICogYmUgYW4gYXJyb3cgZnVuY3Rpb24sIGJlY2F1c2UgaXQgZ2V0cyB0aGlzIHBvaW50ZXIgb2YgaXRzIG93biBjb250ZXh0LlxuICpcbiAqIGBgYGpzXG4gKiBuZXcgT2JzZXJ2ZXIoKCk9PntcbiAqICAgICAvLyB0aGlzIGlzIG5vdCBzdWJqZWN0XG4gKiB9KVxuICpcbiAqIG5ldyBPYnNlcnZlcihmdW5jdGlvbigpIHtcbiAqICAgICAvLyB0aGlzIGlzIHN1YmplY3RcbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiBBZGRpdGlvbmFsIGFyZ3VtZW50cyBjYW4gYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjay4gVG8gZG8gdGhpcywgc2ltcGx5IHNwZWNpZnkgdGhlbS5cbiAqXG4gKiBgYGBqc1xuICogT2JzZXJ2ZXIoZnVuY3Rpb24oYSwgYiwgYykge1xuICogICAgIGNvbnNvbGUubG9nKGEsIGIsIGMpOyAvLyBcdTIxQTYgXCJhXCIsIDIsIHRydWVcbiAqIH0sIFwiYVwiLCAyLCB0cnVlKVxuICogYGBgXG4gKlxuICogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG11c3QgaGF2ZSBhcyBtYW55IHBhcmFtZXRlcnMgYXMgYXJndW1lbnRzIGFyZSBnaXZlbi5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvb2JzZXJ2ZXIubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmNsYXNzIE9ic2VydmVyIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAcGFyYW0geyp9IGFyZ3Ncblx0ICovXG5cdGNvbnN0cnVjdG9yKGNhbGxiYWNrLCAuLi5hcmdzKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwib2JzZXJ2ZXIgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcblx0XHR0aGlzLmFyZ3VtZW50cyA9IGFyZ3M7XG5cdFx0dGhpcy50YWdzID0gbmV3IFRva2VuTGlzdCgpO1xuXHRcdHRoaXMucXVldWUgPSBuZXcgVW5pcXVlUXVldWUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL29ic2VydmVyXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0YWdcblx0ICogQHJldHVybnMge09ic2VydmVyfVxuXHQgKi9cblx0YWRkVGFnKHRhZykge1xuXHRcdHRoaXMudGFncy5hZGQodGFnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGFnXG5cdCAqIEByZXR1cm5zIHtPYnNlcnZlcn1cblx0ICovXG5cdHJlbW92ZVRhZyh0YWcpIHtcblx0XHR0aGlzLnRhZ3MucmVtb3ZlKHRhZyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge0FycmF5fVxuXHQgKi9cblx0Z2V0VGFncygpIHtcblx0XHRyZXR1cm4gdGhpcy50YWdzLmVudHJpZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGFnXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aGFzVGFnKHRhZykge1xuXHRcdHJldHVybiB0aGlzLnRhZ3MuY29udGFpbnModGFnKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gc3ViamVjdFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICovXG5cdHVwZGF0ZShzdWJqZWN0KSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0aWYgKCFpc09iamVjdChzdWJqZWN0KSkge1xuXHRcdFx0XHRyZWplY3QoXCJzdWJqZWN0IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHNlbGYucXVldWUuYWRkKHN1YmplY3QpO1xuXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHQvLyB0aGUgcXVldWUgYW5kIHRoZSBzZXR0aW1lb3V0IGVuc3VyZSB0aGF0IGFuIG9iamVjdCBpcyBub3Rcblx0XHRcdFx0XHQvLyBpbmZvcm1lZCBvZiB0aGUgc2FtZSBjaGFuZ2UgbW9yZSB0aGFuIG9uY2UuXG5cdFx0XHRcdFx0aWYgKHNlbGYucXVldWUuaXNFbXB0eSgpKSB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgcyA9IHNlbGYucXVldWUucG9sbCgpO1xuXHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHNlbGYuY2FsbGJhY2suYXBwbHkocywgc2VsZi5hcmd1bWVudHMpO1xuXG5cdFx0XHRcdFx0aWYgKGlzT2JqZWN0KHJlc3VsdCkgJiYgcmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHRcdFx0XHRcdFx0cmVzdWx0LnRoZW4ocmVzb2x2ZSkuY2F0Y2gocmVqZWN0KTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXNvbHZlKHJlc3VsdCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIDApO1xuXHRcdH0pO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4vb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IE9ic2VydmVyTGlzdCB9O1xuXG4vKipcbiAqIFdpdGggdGhlIGhlbHAgb2YgdGhlIE9ic2VydmVyTGlzdCBjbGFzcywgb2JzZXJ2ZXIgY2FuIGJlIG1hbmFnZWQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICovXG5jbGFzcyBPYnNlcnZlckxpc3QgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMub2JzZXJ2ZXJzID0gW107XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7T2JzZXJ2ZXJMaXN0fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBPYnNlcnZlclxuXHQgKi9cblx0YXR0YWNoKG9ic2VydmVyKSB7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZShvYnNlcnZlciwgT2JzZXJ2ZXIpO1xuXG5cdFx0dGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7T2JzZXJ2ZXJMaXN0fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBPYnNlcnZlclxuXHQgKi9cblx0ZGV0YWNoKG9ic2VydmVyKSB7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZShvYnNlcnZlciwgT2JzZXJ2ZXIpO1xuXG5cdFx0dmFyIGkgPSAwO1xuXHRcdHZhciBsID0gdGhpcy5vYnNlcnZlcnMubGVuZ3RoO1xuXHRcdGZvciAoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRpZiAodGhpcy5vYnNlcnZlcnNbaV0gPT09IG9ic2VydmVyKSB7XG5cdFx0XHRcdHRoaXMub2JzZXJ2ZXJzLnNwbGljZShpLCAxKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBPYnNlcnZlclxuXHQgKi9cblx0Y29udGFpbnMob2JzZXJ2ZXIpIHtcblx0XHR2YWxpZGF0ZUluc3RhbmNlKG9ic2VydmVyLCBPYnNlcnZlcik7XG5cdFx0dmFyIGkgPSAwO1xuXHRcdHZhciBsID0gdGhpcy5vYnNlcnZlcnMubGVuZ3RoO1xuXHRcdGZvciAoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRpZiAodGhpcy5vYnNlcnZlcnNbaV0gPT09IG9ic2VydmVyKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHN1YmplY3Rcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdG5vdGlmeShzdWJqZWN0KSB7XG5cdFx0Y29uc3QgcG9taXNlcyA9IFtdO1xuXG5cdFx0bGV0IGkgPSAwO1xuXHRcdGNvbnN0IGwgPSB0aGlzLm9ic2VydmVycy5sZW5ndGg7XG5cdFx0Zm9yICg7IGkgPCBsOyBpKyspIHtcblx0XHRcdHBvbWlzZXMucHVzaCh0aGlzLm9ic2VydmVyc1tpXS51cGRhdGUoc3ViamVjdCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBQcm9taXNlLmFsbChwb21pc2VzKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCwgaXNQcmltaXRpdmUgfSBmcm9tIFwiLi9pcy5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4vb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlckxpc3QgfSBmcm9tIFwiLi9vYnNlcnZlcmxpc3QubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgUHJveHlPYnNlcnZlciB9O1xuXG4vKipcbiAqIEFuIG9ic2VydmVyIG1hbmFnZXMgYSBjYWxsYmFjayBmdW5jdGlvblxuICpcbiAqIFdpdGggdGhlIFByb3h5T2JzZXJ2ZXIgeW91IGNhbiBhdHRhY2ggb2JzZXJ2ZXIgZm9yIG9ic2VydmF0aW9uLlxuICogV2l0aCBlYWNoIGNoYW5nZSBhdCB0aGUgb2JqZWN0IHRvIGJlIG9ic2VydmVkIGFuIHVwZGF0ZSB0YWtlcyBwbGFjZS5cbiAqXG4gKiBUaGlzIGFsc28gYXBwbGllcyB0byBuZXN0ZWQgb2JqZWN0cy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvcHJveHlvYnNlcnZlci5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuY2xhc3MgUHJveHlPYnNlcnZlciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IG9iamVjdFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuXHQgKi9cblx0Y29uc3RydWN0b3Iob2JqZWN0KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMucmVhbFN1YmplY3QgPSB2YWxpZGF0ZU9iamVjdChvYmplY3QpO1xuXHRcdHRoaXMuc3ViamVjdCA9IG5ldyBQcm94eShvYmplY3QsIGdldEhhbmRsZXIuY2FsbCh0aGlzKSk7XG5cblx0XHR0aGlzLm9iamVjdE1hcCA9IG5ldyBXZWFrTWFwKCk7XG5cdFx0dGhpcy5vYmplY3RNYXAuc2V0KHRoaXMucmVhbFN1YmplY3QsIHRoaXMuc3ViamVjdCk7XG5cblx0XHR0aGlzLnByb3h5TWFwID0gbmV3IFdlYWtNYXAoKTtcblx0XHR0aGlzLnByb3h5TWFwLnNldCh0aGlzLnN1YmplY3QsIHRoaXMucmVhbFN1YmplY3QpO1xuXG5cdFx0dGhpcy5vYnNlcnZlcnMgPSBuZXcgT2JzZXJ2ZXJMaXN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9wcm94eS1vYnNlcnZlclwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fVxuXHQgKi9cblx0Z2V0U3ViamVjdCgpIHtcblx0XHRyZXR1cm4gdGhpcy5zdWJqZWN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzaW5jZSAxLjI0LjBcblx0ICogQHBhcmFtIHtPYmplY3R9IG9ialxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLlByb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHRzZXRTdWJqZWN0KG9iaikge1xuXHRcdGxldCBpO1xuXHRcdGNvbnN0IGsgPSBPYmplY3Qua2V5cyh0aGlzLnN1YmplY3QpO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRkZWxldGUgdGhpcy5zdWJqZWN0W2tbaV1dO1xuXHRcdH1cblxuXHRcdHRoaXMuc3ViamVjdCA9IGV4dGVuZCh0aGlzLnN1YmplY3QsIG9iaik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSByZWFsIG9iamVjdFxuXHQgKlxuXHQgKiBDaGFuZ2VzIHRvIHRoaXMgb2JqZWN0IGFyZSBub3Qgbm90aWNlZCBieSB0aGUgb2JzZXJ2ZXJzLCBzbyB5b3UgY2FuIG1ha2UgYSBsYXJnZSBudW1iZXIgb2YgY2hhbmdlcyBhbmQgaW5mb3JtIHRoZSBvYnNlcnZlcnMgbGF0ZXIuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9XG5cdCAqL1xuXHRnZXRSZWFsU3ViamVjdCgpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWFsU3ViamVjdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBhdHRhY2ggYSBuZXcgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybnMge1Byb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHRhdHRhY2hPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHRoaXMub2JzZXJ2ZXJzLmF0dGFjaChvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogZGV0YWNoIGEgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybnMge1Byb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHRkZXRhY2hPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHRoaXMub2JzZXJ2ZXJzLmRldGFjaChvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbm90aWZ5IGFsbCBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICovXG5cdG5vdGlmeU9ic2VydmVycygpIHtcblx0XHRyZXR1cm4gdGhpcy5vYnNlcnZlcnMubm90aWZ5KHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Y29udGFpbnNPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHJldHVybiB0aGlzLm9ic2VydmVycy5jb250YWlucyhvYnNlcnZlcik7XG5cdH1cbn1cblxuLyoqXG4gKlxuICogQHJldHVybnMge3tkZWZpbmVQcm9wZXJ0eTogKGZ1bmN0aW9uKCo9LCAqPSwgKj0pOiAqKSwgc2V0UHJvdG90eXBlT2Y6IChmdW5jdGlvbigqLCAqPSk6IGJvb2xlYW4pLCBzZXQ6IChmdW5jdGlvbigqLCAqLCAqLCAqKTogYm9vbGVhbiksIGdldDogKChmdW5jdGlvbigqPSwgKj0sICo9KTogKHVuZGVmaW5lZCkpfCopLCBkZWxldGVQcm9wZXJ0eTogKChmdW5jdGlvbigqLCAqKTogKGJvb2xlYW4pKXwqKX19XG4gKiBAcHJpdmF0ZVxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRsYWIuc2NodWthaS5jb20vLS9zbmlwcGV0cy80OX1cbiAqL1xuZnVuY3Rpb24gZ2V0SGFuZGxlcigpIHtcblx0Y29uc3QgcHJveHkgPSB0aGlzO1xuXG5cdC8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvOS4wLyNzZWMtcHJveHktb2JqZWN0LWludGVybmFsLW1ldGhvZHMtYW5kLWludGVybmFsLXNsb3RzXG5cdGNvbnN0IGhhbmRsZXIgPSB7XG5cdFx0Ly8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy85LjAvI3NlYy1wcm94eS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHMtZ2V0LXAtcmVjZWl2ZXJcblx0XHRnZXQ6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgcmVjZWl2ZXIpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBrZXksIHJlY2VpdmVyKTtcblxuXHRcdFx0aWYgKHR5cGVvZiBrZXkgPT09IFwic3ltYm9sXCIpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNQcmltaXRpdmUodmFsdWUpKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gc2V0IHZhbHVlIGFzIHByb3h5IGlmIG9iamVjdCBvciBhcnJheVxuXHRcdFx0aWYgKGlzQXJyYXkodmFsdWUpIHx8IGlzT2JqZWN0KHZhbHVlKSkge1xuXHRcdFx0XHRpZiAocHJveHkub2JqZWN0TWFwLmhhcyh2YWx1ZSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJveHkub2JqZWN0TWFwLmdldCh2YWx1ZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAocHJveHkucHJveHlNYXAuaGFzKHZhbHVlKSkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBwID0gbmV3IFByb3h5KHZhbHVlLCBoYW5kbGVyKTtcblx0XHRcdFx0XHRwcm94eS5vYmplY3RNYXAuc2V0KHZhbHVlLCBwKTtcblx0XHRcdFx0XHRwcm94eS5wcm94eU1hcC5zZXQocCwgdmFsdWUpO1xuXHRcdFx0XHRcdHJldHVybiBwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy85LjAvI3NlYy1wcm94eS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHMtc2V0LXAtdi1yZWNlaXZlclxuXHRcdHNldDogZnVuY3Rpb24gKHRhcmdldCwga2V5LCB2YWx1ZSwgcmVjZWl2ZXIpIHtcblx0XHRcdGlmIChwcm94eS5wcm94eU1hcC5oYXModmFsdWUpKSB7XG5cdFx0XHRcdHZhbHVlID0gcHJveHkucHJveHlNYXAuZ2V0KHZhbHVlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHByb3h5LnByb3h5TWFwLmhhcyh0YXJnZXQpKSB7XG5cdFx0XHRcdHRhcmdldCA9IHByb3h5LnByb3h5TWFwLmdldCh0YXJnZXQpO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgY3VycmVudCA9IFJlZmxlY3QuZ2V0KHRhcmdldCwga2V5LCByZWNlaXZlcik7XG5cdFx0XHRpZiAocHJveHkucHJveHlNYXAuaGFzKGN1cnJlbnQpKSB7XG5cdFx0XHRcdGN1cnJlbnQgPSBwcm94eS5wcm94eU1hcC5nZXQoY3VycmVudCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjdXJyZW50ID09PSB2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0bGV0IHJlc3VsdDtcblx0XHRcdGxldCBkZXNjcmlwdG9yID0gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuXG5cdFx0XHRpZiAoZGVzY3JpcHRvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRlc2NyaXB0b3IgPSB7XG5cdFx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGRlc2NyaXB0b3JbXCJ2YWx1ZVwiXSA9IHZhbHVlO1xuXHRcdFx0cmVzdWx0ID0gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzY3JpcHRvcik7XG5cblx0XHRcdGlmICh0eXBlb2Yga2V5ICE9PSBcInN5bWJvbFwiKSB7XG5cdFx0XHRcdHByb3h5Lm9ic2VydmVycy5ub3RpZnkocHJveHkpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0sXG5cblx0XHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzkuMC8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90cy1kZWxldGUtcFxuXHRcdGRlbGV0ZVByb3BlcnR5OiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcblx0XHRcdGlmIChrZXkgaW4gdGFyZ2V0KSB7XG5cdFx0XHRcdGRlbGV0ZSB0YXJnZXRba2V5XTtcblxuXHRcdFx0XHRpZiAodHlwZW9mIGtleSAhPT0gXCJzeW1ib2xcIikge1xuXHRcdFx0XHRcdHByb3h5Lm9ic2VydmVycy5ub3RpZnkocHJveHkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblxuXHRcdC8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvOS4wLyNzZWMtcHJveHktb2JqZWN0LWludGVybmFsLW1ldGhvZHMtYW5kLWludGVybmFsLXNsb3RzLWRlZmluZW93bnByb3BlcnR5LXAtZGVzY1xuXHRcdGRlZmluZVByb3BlcnR5OiBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpIHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpO1xuXHRcdFx0aWYgKHR5cGVvZiBrZXkgIT09IFwic3ltYm9sXCIpIHtcblx0XHRcdFx0cHJveHkub2JzZXJ2ZXJzLm5vdGlmeShwcm94eSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0sXG5cblx0XHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzkuMC8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90cy1zZXRwcm90b3R5cGVvZi12XG5cdFx0c2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gUmVmbGVjdC5zZXRQcm90b3R5cGVPZihvYmplY3QxLCBrZXkpO1xuXG5cdFx0XHRpZiAodHlwZW9mIGtleSAhPT0gXCJzeW1ib2xcIikge1xuXHRcdFx0XHRwcm94eS5vYnNlcnZlcnMubm90aWZ5KHByb3h5KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9LFxuXHR9O1xuXG5cdHJldHVybiBoYW5kbGVyO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX1RIRU1FX05BTUUsIERFRkFVTFRfVEhFTUUgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBUaGVtZSwgZ2V0RG9jdW1lbnRUaGVtZSB9O1xuXG4vKipcbiAqIFRoZSBUaGVtZSBjbGFzcyBwcm92aWRlcyB0aGUgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIHRoZW1lLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9kb20vdGhlbWUubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjcuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHN1bW1hcnkgQSB0aGVtZSBjbGFzc1xuICovXG5jbGFzcyBUaGVtZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIG5hbWVcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICovXG5cdGNvbnN0cnVjdG9yKG5hbWUpIHtcblx0XHRzdXBlcigpO1xuXHRcdHZhbGlkYXRlU3RyaW5nKG5hbWUpO1xuXHRcdHRoaXMubmFtZSA9IG5hbWU7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vdGhlbWVcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGdldE5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMubmFtZTtcblx0fVxufVxuXG4vKipcbiAqIFRoZSB0aGVtaW5nIHVzZWQgaW4gdGhlIGRvY3VtZW50IGNhbiBiZSBkZWZpbmVkIHZpYSB0aGUgaHRtbC10YWcuXG4gKiBUaGUgdGhlbWluZyBpcyBzcGVjaWZpZWQgdmlhIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci10aGVtZS1uYW1lYC5cbiAqXG4gKiBBcyBuYW1lIGZvciBhIHRoZW1lIGFsbCBjaGFyYWN0ZXJzIGFyZSB2YWxpZCwgd2hpY2ggYXJlIGFsc28gYWxsb3dlZCBmb3IgYSBIVE1MRWxlbWVudC1JRC5cbiAqXG4gKiBgYGBcbiAqIDxodG1sIGRhdGEtbW9uc3Rlci10aGVtZS1uYW1lPVwibXktdGhlbWVcIj5cbiAqIGBgYFxuICpcbiAqIHRoZSBkZWZhdWx0IHRoZW1lIG5hbWUgaXMgYG1vbnN0ZXJgLlxuICpcbiAqIEByZXR1cm4ge1RoZW1lfVxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjcuMFxuICovXG5mdW5jdGlvbiBnZXREb2N1bWVudFRoZW1lKCkge1xuXHRjb25zdCBkb2N1bWVudCA9IGdldEdsb2JhbE9iamVjdChcImRvY3VtZW50XCIpO1xuXHRsZXQgbmFtZSA9IERFRkFVTFRfVEhFTUU7XG5cblx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpO1xuXHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0Y29uc3QgdGhlbWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVEhFTUVfTkFNRSk7XG5cdFx0aWYgKHRoZW1lKSB7XG5cdFx0XHRuYW1lID0gdGhlbWU7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG5ldyBUaGVtZShuYW1lKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbEZ1bmN0aW9uLCBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfVEVNUExBVEVfUFJFRklYIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnRUaGVtZSB9IGZyb20gXCIuL3RoZW1lLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgVGVtcGxhdGUgfTtcblxuLyoqXG4gKiBUaGUgdGVtcGxhdGUgY2xhc3MgcHJvdmlkZXMgbWV0aG9kcyBmb3IgY3JlYXRpbmcgdGVtcGxhdGVzLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAc3VtbWFyeSBBIHRlbXBsYXRlIGNsYXNzXG4gKi9cbmNsYXNzIFRlbXBsYXRlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hUTUxUZW1wbGF0ZUVsZW1lbnR9IHRlbXBsYXRlXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBmdW5jdGlvbiBpcyBub3QgZGVmaW5lZFxuXHQgKi9cblx0Y29uc3RydWN0b3IodGVtcGxhdGUpIHtcblx0XHRzdXBlcigpO1xuXHRcdGNvbnN0IEhUTUxUZW1wbGF0ZUVsZW1lbnQgPSBnZXRHbG9iYWxGdW5jdGlvbihcIkhUTUxUZW1wbGF0ZUVsZW1lbnRcIik7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZSh0ZW1wbGF0ZSwgSFRNTFRlbXBsYXRlRWxlbWVudCk7XG5cdFx0dGhpcy50ZW1wbGF0ZSA9IHRlbXBsYXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL3Jlc291cmNlL3RlbXBsYXRlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtIVE1MVGVtcGxhdGVFbGVtZW50fVxuXHQgKi9cblx0Z2V0VGVtcGxhdGVFbGVtZW50KCkge1xuXHRcdHJldHVybiB0aGlzLnRlbXBsYXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0RvY3VtZW50RnJhZ21lbnR9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG5cdCAqL1xuXHRjcmVhdGVEb2N1bWVudEZyYWdtZW50KCkge1xuXHRcdHJldHVybiB0aGlzLnRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgbG9hZHMgYSB0ZW1wbGF0ZSB3aXRoIHRoZSBnaXZlbiBJRCBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKiBUbyBkbyB0aGlzLCBpdCBmaXJzdCByZWFkcyB0aGUgdGhlbWUgb2YgdGhlIGRvY3VtZW50IGFuZCBsb29rcyBmb3IgdGhlIGBkYXRhLW1vbnN0ZXItdGhlbWUtbmFtZWAgYXR0cmlidXRlIGluIHRoZSBIVE1MIHRhZy5cbiAqXG4gKiBgYGBcbiAqIDxodG1sIGRhdGEtbW9uc3Rlci10aGVtZS1uYW1lPVwibXktdGhlbWVcIj5cbiAqIGBgYFxuICpcbiAqIElmIG5vIHRoZW1lIHdhcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHRoZW1lIGlzIGBtb25zdGVyYC5cbiAqXG4gKiBOb3cgaXQgaXMgbG9va2VkIGlmIHRoZXJlIGlzIGEgdGVtcGxhdGUgd2l0aCB0aGUgZ2l2ZW4gSUQgYW5kIHRoZW1lIGBpZC10aGVtZWAgYW5kIGlmIHllcyBpdCBpcyByZXR1cm5lZC5cbiAqIElmIHRoZXJlIGlzIG5vIHRlbXBsYXRlIGEgc2VhcmNoIGZvciBhIHRlbXBsYXRlIHdpdGggdGhlIGdpdmVuIElEIGBpZGAgaXMgZG9uZS4gSWYgdGhpcyBpcyBhbHNvIG5vdCBmb3VuZCwgYW4gZXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIFlvdSBjYW4gY2FsbCB0aGUgbWV0aG9kIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYE1vbnN0ZXIuRE9NLmZpbmREb2N1bWVudFRlbXBsYXRlKClgLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge2ZpbmRUZW1wbGF0ZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvZG9tL3RlbXBsYXRlLm1qcyc7XG4gKiBmaW5kRG9jdW1lbnRUZW1wbGF0ZSgpXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IHsgZmluZERvY3VtZW50VGVtcGxhdGUgfSBmcm9tIFwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9Ac2NodWthaS9tb25zdGVyQGxhdGVzdC9zb3VyY2UvZG9tL3RlbXBsYXRlLm1qc1wiO1xuICpcbiAqIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICogdGVtcGxhdGUuaWQgPSBcIm15VGVtcGxhdGVcIjtcbiAqIHRlbXBsYXRlLmlubmVySFRNTCA9IFwiPHA+bXkgZGVmYXVsdCB0ZW1wbGF0ZTwvcD5cIjtcbiAqIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVtcGxhdGUpO1xuICpcbiAqIGNvbnN0IHRoZW1lZFRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICogdGhlbWVkVGVtcGxhdGUuaWQgPSBcIm15VGVtcGxhdGUtbXlUaGVtZVwiO1xuICogdGhlbWVkVGVtcGxhdGUuaW5uZXJIVE1MID0gXCI8cD5teSB0aGVtZWQgdGVtcGxhdGU8L3A+XCI7XG4gKiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoZW1lZFRlbXBsYXRlKTtcbiAqXG4gKiAvLyBsb2FkcyB0aGUgdGVtcGxlIGFuZCBzaW5jZSBubyB0aGVtZSBpcyBzZXQgdGhlIGRlZmF1bHQgdGVtcGxhdGVcbiAqIGNvbnN0IHRlbXBsYXRlMSA9IGZpbmREb2N1bWVudFRlbXBsYXRlKFwibXlUZW1wbGF0ZVwiKTtcbiAqIGNvbnNvbGUubG9nKHRlbXBsYXRlMS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuICogLy8gXHUyMUE2ICc8cD5teSBkZWZhdWx0IHRlbXBsYXRlPC9wPidcbiAqXG4gKiAvLyBub3cgd2Ugc2V0IG91ciBvd24gdGhlbWVcbiAqIGRvY3VtZW50XG4gKiAucXVlcnlTZWxlY3RvcihcImh0bWxcIilcbiAqIC5zZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItdGhlbWUtbmFtZVwiLCBcIm15VGhlbWVcIik7XG4gKlxuICogLy8gbm93IHdlIGRvbid0IGdldCB0aGUgZGVmYXVsdCB0ZW1wbGF0ZSxcbiAqIC8vIGJ1dCB0aGUgdGVtcGxhdGUgd2l0aCB0aGUgdGhlbWUgaW4gdGhlIGlkXG4gKiBjb25zdCB0ZW1wbGF0ZTIgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm15VGVtcGxhdGVcIik7XG4gKiBjb25zb2xlLmxvZyh0ZW1wbGF0ZTIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAqIC8vIFx1MjFBNiAnPHA+bXkgdGhlbWVkIHRlbXBsYXRlPC9wPidcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaWRcbiAqIEBwYXJhbSB7Tm9kZX0gY3VycmVudE5vZGVcbiAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlRlbXBsYXRlfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS43LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0aHJvd3Mge0Vycm9yfSB0ZW1wbGF0ZSBpZCBub3QgZm91bmQuXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZERvY3VtZW50VGVtcGxhdGUoaWQsIGN1cnJlbnROb2RlKSB7XG5cdHZhbGlkYXRlU3RyaW5nKGlkKTtcblxuXHRjb25zdCBkb2N1bWVudCA9IGdldEdsb2JhbE9iamVjdChcImRvY3VtZW50XCIpO1xuXHRjb25zdCBIVE1MVGVtcGxhdGVFbGVtZW50ID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJIVE1MVGVtcGxhdGVFbGVtZW50XCIpO1xuXHRjb25zdCBEb2N1bWVudEZyYWdtZW50ID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJEb2N1bWVudEZyYWdtZW50XCIpO1xuXHRjb25zdCBEb2N1bWVudCA9IGdldEdsb2JhbEZ1bmN0aW9uKFwiRG9jdW1lbnRcIik7XG5cblx0bGV0IHByZWZpeElEO1xuXG5cdGlmIChcblx0XHQhKFxuXHRcdFx0Y3VycmVudE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCBjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnRcblx0XHQpXG5cdCkge1xuXHRcdGlmIChjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIE5vZGUpIHtcblx0XHRcdGlmIChjdXJyZW50Tm9kZS5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1RFTVBMQVRFX1BSRUZJWCkpIHtcblx0XHRcdFx0cHJlZml4SUQgPSBjdXJyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1RFTVBMQVRFX1BSRUZJWCk7XG5cdFx0XHR9XG5cblx0XHRcdGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuZ2V0Um9vdE5vZGUoKTtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHQhKFxuXHRcdFx0XHRcdGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnQgfHxcblx0XHRcdFx0XHRjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnRcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUub3duZXJEb2N1bWVudDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHQhKFxuXHRcdFx0XHRjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50IHx8XG5cdFx0XHRcdGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudFxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdFx0Y3VycmVudE5vZGUgPSBkb2N1bWVudDtcblx0XHR9XG5cdH1cblxuXHRsZXQgdGVtcGxhdGU7XG5cdGNvbnN0IHRoZW1lID0gZ2V0RG9jdW1lbnRUaGVtZSgpO1xuXG5cdGlmIChwcmVmaXhJRCkge1xuXHRcdGNvbnN0IHRoZW1lZFByZWZpeElEID0gYCR7cHJlZml4SUR9LSR7aWR9LSR7dGhlbWUuZ2V0TmFtZSgpfWA7XG5cblx0XHQvLyBjdXJyZW50ICsgdGhlbWVkUHJlZml4SURcblx0XHR0ZW1wbGF0ZSA9IGN1cnJlbnROb2RlLmdldEVsZW1lbnRCeUlkKHRoZW1lZFByZWZpeElEKTtcblx0XHRpZiAodGVtcGxhdGUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KSB7XG5cdFx0XHRyZXR1cm4gbmV3IFRlbXBsYXRlKHRlbXBsYXRlKTtcblx0XHR9XG5cblx0XHQvLyBkb2N1bWVudCArIHRoZW1lZFByZWZpeElEXG5cdFx0dGVtcGxhdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGVtZWRQcmVmaXhJRCk7XG5cdFx0aWYgKHRlbXBsYXRlIGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgdGhlbWVkSUQgPSBgJHtpZH0tJHt0aGVtZS5nZXROYW1lKCl9YDtcblxuXHQvLyBjdXJyZW50ICsgdGhlbWVkSURcblx0dGVtcGxhdGUgPSBjdXJyZW50Tm9kZS5nZXRFbGVtZW50QnlJZCh0aGVtZWRJRCk7XG5cdGlmICh0ZW1wbGF0ZSBpbnN0YW5jZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQpIHtcblx0XHRyZXR1cm4gbmV3IFRlbXBsYXRlKHRlbXBsYXRlKTtcblx0fVxuXG5cdC8vIGRvY3VtZW50ICsgdGhlbWVkSURcblx0dGVtcGxhdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGVtZWRJRCk7XG5cdGlmICh0ZW1wbGF0ZSBpbnN0YW5jZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQpIHtcblx0XHRyZXR1cm4gbmV3IFRlbXBsYXRlKHRlbXBsYXRlKTtcblx0fVxuXG5cdC8vIGN1cnJlbnQgKyBJRFxuXHR0ZW1wbGF0ZSA9IGN1cnJlbnROb2RlLmdldEVsZW1lbnRCeUlkKGlkKTtcblx0aWYgKHRlbXBsYXRlIGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkge1xuXHRcdHJldHVybiBuZXcgVGVtcGxhdGUodGVtcGxhdGUpO1xuXHR9XG5cblx0Ly8gZG9jdW1lbnQgKyBJRFxuXHR0ZW1wbGF0ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblx0aWYgKHRlbXBsYXRlIGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkge1xuXHRcdHJldHVybiBuZXcgVGVtcGxhdGUodGVtcGxhdGUpO1xuXHR9XG5cblx0dGhyb3cgbmV3IEVycm9yKGB0ZW1wbGF0ZSAke2lkfSBub3QgZm91bmQuYCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHR5cGVPZiB9IGZyb20gXCIuLi90eXBlcy90eXBlb2YubWpzXCI7XG5cbmV4cG9ydCB7IGRpZmYgfTtcblxuLyoqXG4gKiBXaXRoIHRoZSBkaWZmIGZ1bmN0aW9uIHlvdSBjYW4gcGVyZm9ybSB0aGUgY2hhbmdlIG9mIG9uZSBvYmplY3QgdG8gYW5vdGhlci4gVGhlIHJlc3VsdCBzaG93cyB0aGUgY2hhbmdlcyBvZiB0aGUgc2Vjb25kIG9iamVjdCB0byB0aGUgZmlyc3Qgb2JqZWN0LlxuICpcbiAqIFRoZSBvcGVyYXRvciBgYWRkYCBtZWFucyB0aGF0IHNvbWV0aGluZyBoYXMgYmVlbiBhZGRlZCB0byB0aGUgc2Vjb25kIG9iamVjdC4gYGRlbGV0ZWAgbWVhbnMgdGhhdCBzb21ldGhpbmcgaGFzIGJlZW4gZGVsZXRlZCBmcm9tIHRoZSBzZWNvbmQgb2JqZWN0IGNvbXBhcmVkIHRvIHRoZSBmaXJzdCBvYmplY3QuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2RhdGEvZGlmZi5tanNcbiAqIEBwYXJhbSB7Kn0gZmlyc3RcbiAqIEBwYXJhbSB7Kn0gc2Vjb25kXG4gKiBAcmV0dXJuIHthcnJheX1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YVxuICovXG5mdW5jdGlvbiBkaWZmKGZpcnN0LCBzZWNvbmQpIHtcblx0cmV0dXJuIGRvRGlmZihmaXJzdCwgc2Vjb25kKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGFcbiAqIEBwYXJhbSBiXG4gKiBAcGFyYW0gdHlwZVxuICogQHJldHVybiB7U2V0PHN0cmluZz58U2V0PG51bWJlcj59XG4gKi9cbmZ1bmN0aW9uIGdldEtleXMoYSwgYiwgdHlwZSkge1xuXHRpZiAoaXNBcnJheSh0eXBlKSkge1xuXHRcdGNvbnN0IGtleXMgPVxuXHRcdFx0YS5sZW5ndGggPiBiLmxlbmd0aCA/IG5ldyBBcnJheShhLmxlbmd0aCkgOiBuZXcgQXJyYXkoYi5sZW5ndGgpO1xuXHRcdGtleXMuZmlsbCgwKTtcblx0XHRyZXR1cm4gbmV3IFNldChrZXlzLm1hcCgoXywgaSkgPT4gaSkpO1xuXHR9XG5cblx0cmV0dXJuIG5ldyBTZXQoT2JqZWN0LmtleXMoYSkuY29uY2F0KE9iamVjdC5rZXlzKGIpKSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBhXG4gKiBAcGFyYW0gYlxuICogQHBhcmFtIHBhdGhcbiAqIEBwYXJhbSBkaWZmXG4gKiBAcmV0dXJuIHthcnJheX1cbiAqL1xuZnVuY3Rpb24gZG9EaWZmKGEsIGIsIHBhdGgsIGRpZmYpIHtcblx0Y29uc3QgdHlwZUEgPSB0eXBlT2YoYSk7XG5cdGNvbnN0IHR5cGVCID0gdHlwZU9mKGIpO1xuXG5cdGNvbnN0IGN1cnJQYXRoID0gcGF0aCB8fCBbXTtcblx0Y29uc3QgY3VyckRpZmYgPSBkaWZmIHx8IFtdO1xuXG5cdGlmICh0eXBlQSA9PT0gdHlwZUIgJiYgKHR5cGVBID09PSBcIm9iamVjdFwiIHx8IHR5cGVBID09PSBcImFycmF5XCIpKSB7XG5cdFx0Z2V0S2V5cyhhLCBiLCB0eXBlQSkuZm9yRWFjaCgodikgPT4ge1xuXHRcdFx0aWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgdikpIHtcblx0XHRcdFx0Y3VyckRpZmYucHVzaChidWlsZFJlc3VsdChhW3ZdLCBiW3ZdLCBcImFkZFwiLCBjdXJyUGF0aC5jb25jYXQodikpKTtcblx0XHRcdH0gZWxzZSBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCB2KSkge1xuXHRcdFx0XHRjdXJyRGlmZi5wdXNoKGJ1aWxkUmVzdWx0KGFbdl0sIGJbdl0sIFwiZGVsZXRlXCIsIGN1cnJQYXRoLmNvbmNhdCh2KSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZG9EaWZmKGFbdl0sIGJbdl0sIGN1cnJQYXRoLmNvbmNhdCh2KSwgY3VyckRpZmYpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IG8gPSBnZXRPcGVyYXRvcihhLCBiLCB0eXBlQSwgdHlwZUIpO1xuXHRcdGlmIChvICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGN1cnJEaWZmLnB1c2goYnVpbGRSZXN1bHQoYSwgYiwgbywgcGF0aCkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjdXJyRGlmZjtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHsqfSBhXG4gKiBAcGFyYW0geyp9IGJcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcGVyYXRvclxuICogQHBhcmFtIHthcnJheX0gcGF0aFxuICogQHJldHVybiB7e3BhdGg6IGFycmF5LCBvcGVyYXRvcjogc3RyaW5nfX1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkUmVzdWx0KGEsIGIsIG9wZXJhdG9yLCBwYXRoKSB7XG5cdGNvbnN0IHJlc3VsdCA9IHtcblx0XHRvcGVyYXRvcixcblx0XHRwYXRoLFxuXHR9O1xuXG5cdGlmIChvcGVyYXRvciAhPT0gXCJhZGRcIikge1xuXHRcdHJlc3VsdC5maXJzdCA9IHtcblx0XHRcdHZhbHVlOiBhLFxuXHRcdFx0dHlwZTogdHlwZW9mIGEsXG5cdFx0fTtcblxuXHRcdGlmIChpc09iamVjdChhKSkge1xuXHRcdFx0Y29uc3QgbmFtZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihhKT8uY29uc3RydWN0b3I/Lm5hbWU7XG5cdFx0XHRpZiAobmFtZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJlc3VsdC5maXJzdC5pbnN0YW5jZSA9IG5hbWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKG9wZXJhdG9yID09PSBcImFkZFwiIHx8IG9wZXJhdG9yID09PSBcInVwZGF0ZVwiKSB7XG5cdFx0cmVzdWx0LnNlY29uZCA9IHtcblx0XHRcdHZhbHVlOiBiLFxuXHRcdFx0dHlwZTogdHlwZW9mIGIsXG5cdFx0fTtcblxuXHRcdGlmIChpc09iamVjdChiKSkge1xuXHRcdFx0Y29uc3QgbmFtZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihiKT8uY29uc3RydWN0b3I/Lm5hbWU7XG5cdFx0XHRpZiAobmFtZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJlc3VsdC5zZWNvbmQuaW5zdGFuY2UgPSBuYW1lO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gYVxuICogQHBhcmFtIHsqfSBiXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc05vdEVxdWFsKGEsIGIpIHtcblx0aWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0cmV0dXJuIGEuZ2V0VGltZSgpICE9PSBiLmdldFRpbWUoKTtcblx0fVxuXG5cdHJldHVybiBhICE9PSBiO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IGFcbiAqIEBwYXJhbSB7Kn0gYlxuICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0b3IoYSwgYikge1xuXHQvKipcblx0ICogQHR5cGUge3N0cmluZ3x1bmRlZmluZWR9XG5cdCAqL1xuXHRsZXQgb3BlcmF0b3I7XG5cblx0LyoqXG5cdCAqIEB0eXBlIHtzdHJpbmd9XG5cdCAqL1xuXHRjb25zdCB0eXBlQSA9IHR5cGVvZiBhO1xuXG5cdC8qKlxuXHQgKiBAdHlwZSB7c3RyaW5nfVxuXHQgKi9cblx0Y29uc3QgdHlwZUIgPSB0eXBlb2YgYjtcblxuXHRpZiAodHlwZUEgPT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZUIgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRvcGVyYXRvciA9IFwiYWRkXCI7XG5cdH0gZWxzZSBpZiAodHlwZUEgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZUIgPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRvcGVyYXRvciA9IFwiZGVsZXRlXCI7XG5cdH0gZWxzZSBpZiAoaXNOb3RFcXVhbChhLCBiKSkge1xuXHRcdG9wZXJhdG9yID0gXCJ1cGRhdGVcIjtcblx0fVxuXG5cdHJldHVybiBvcGVyYXRvcjtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IElEIH0gZnJvbSBcIi4uL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgdHJpbVNwYWNlcyB9O1xuXG4vKipcbiAqIFRoaXMgc3BlY2lhbCB0cmltIGZ1bmN0aW9uIGFsbG93cyB0byB0cmltIHNwYWNlcyB0aGF0IGhhdmUgYmVlbiBwcm90ZWN0ZWQgYnkgYSBzcGVjaWFsIGVzY2FwZSBjaGFyYWN0ZXIuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dHJpbVNwYWNlc30gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdXRpbC90cmltc3BhY2VzLm1qcyc7XG4gKiB0cmltU3BhY2VzKCcgaGVsbG8gXFxcXCAnKVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBIaW50OiBPbmUgc3Ryb2tlIGlzIGVzY2FwZWQgYnkgdGhlIGphdmFzY3JpcHQgaW50ZXJwcmV0ZXIsIHRoZSBzZWNvbmQgc3Ryb2tlIGVzY2FwZXMgdGhlIHN0cm9rZS5cbiAqXG4gKiBgYGB0ZXh0XG4gKiBhXFwgYiAgXHUyMUE2IGEgYlxuICogYVxcXFwgYiBcdTIxQTYgYVxcIGJcbiAqIGBgYFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVXRpbFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gdHJpbVNwYWNlcyh2YWx1ZSkge1xuXHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cblx0Y29uc3QgcGxhY2Vob2xkZXIgPSBuZXcgTWFwKCk7XG5cdGNvbnN0IHJlZ2V4ID0gLygoPzxwYXR0ZXJuPlxcXFwoPzxjaGFyPi4pKXsxfSkvZ2ltO1xuXG5cdC8vIFRoZSBzZXBhcmF0b3IgZm9yIGFyZ3MgbXVzdCBiZSBlc2NhcGVkXG5cdC8vIHVuZGVmaW5lZCBzdHJpbmcgd2hpY2ggc2hvdWxkIG5vdCBvY2N1ciBub3JtYWxseSBhbmQgaXMgYWxzbyBub3QgYSByZWdleFxuXHRjb25zdCByZXN1bHQgPSB2YWx1ZS5tYXRjaEFsbChyZWdleCk7XG5cblx0Zm9yIChjb25zdCBtIG9mIHJlc3VsdCkge1xuXHRcdGNvbnN0IGcgPSBtPy5bXCJncm91cHNcIl07XG5cdFx0aWYgKCFpc09iamVjdChnKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcCA9IGc/LltcInBhdHRlcm5cIl07XG5cdFx0Y29uc3QgYyA9IGc/LltcImNoYXJcIl07XG5cblx0XHRpZiAocCAmJiBjKSB7XG5cdFx0XHRjb25zdCByID0gYF9fJHtuZXcgSUQoKS50b1N0cmluZygpfV9fYDtcblx0XHRcdHBsYWNlaG9sZGVyLnNldChyLCBjKTtcblx0XHRcdHZhbHVlID0gdmFsdWUucmVwbGFjZShwLCByKTtcblx0XHR9XG5cdH1cblxuXHR2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcblx0cGxhY2Vob2xkZXIuZm9yRWFjaCgodiwgaykgPT4ge1xuXHRcdHZhbHVlID0gdmFsdWUucmVwbGFjZShrLCBgXFxcXCR7dn1gKTtcblx0fSk7XG5cblx0cmV0dXJuIHZhbHVlO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4vdXRpbC5tanNcIjtcblxuZXhwb3J0IHsgZmlyZUV2ZW50LCBmaXJlQ3VzdG9tRXZlbnQsIGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50IH07XG5cbi8qKlxuICogVGhlIGZ1bmN0aW9uIHNlbmRzIGFuIGV2ZW50XG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudHxIVE1MQ29sbGVjdGlvbnxOb2RlTGlzdH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEwLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50IG9yIEhUTUxDb2xsZWN0aW9uXG4gKiBAc3VtbWFyeSBDb25zdHJ1Y3QgYW5kIHNlbmQgYW5kIGV2ZW50XG4gKi9cbmZ1bmN0aW9uIGZpcmVFdmVudChlbGVtZW50LCB0eXBlKSB7XG5cdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0aWYgKHR5cGUgPT09IFwiY2xpY2tcIikge1xuXHRcdFx0ZWxlbWVudC5jbGljaygpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVudC9FdmVudFxuXHRcdGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50KHZhbGlkYXRlU3RyaW5nKHR5cGUpLCB7XG5cdFx0XHRidWJibGVzOiB0cnVlLFxuXHRcdFx0Y2FuY2VsYWJsZTogdHJ1ZSxcblx0XHRcdGNvbXBvc2VkOiB0cnVlLFxuXHRcdH0pO1xuXG5cdFx0ZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcblx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTENvbGxlY3Rpb24gfHwgZWxlbWVudCBpbnN0YW5jZW9mIE5vZGVMaXN0KSB7XG5cdFx0Zm9yIChjb25zdCBlIG9mIGVsZW1lbnQpIHtcblx0XHRcdGZpcmVFdmVudChlLCB0eXBlKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdFwidmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50IG9yIEhUTUxDb2xsZWN0aW9uXCIsXG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIFlvdSBjYW4gY2FsbCB0aGUgZnVuY3Rpb24gdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgbmV3IE1vbnN0ZXIuRE9NLmZpcmVDdXN0b21FdmVudCgpYC5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fEhUTUxDb2xsZWN0aW9ufE5vZGVMaXN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybiB7dm9pZH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgb3IgSFRNTENvbGxlY3Rpb25cbiAqIEBzdW1tYXJ5IENvbnN0cnVjdCBhbmQgc2VuZCBhbmQgZXZlbnRcbiAqL1xuZnVuY3Rpb24gZmlyZUN1c3RvbUV2ZW50KGVsZW1lbnQsIHR5cGUsIGRldGFpbCkge1xuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdGlmICghaXNPYmplY3QoZGV0YWlsKSkge1xuXHRcdFx0ZGV0YWlsID0geyBkZXRhaWwgfTtcblx0XHR9XG5cblx0XHRjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCh2YWxpZGF0ZVN0cmluZyh0eXBlKSwge1xuXHRcdFx0YnViYmxlczogdHJ1ZSxcblx0XHRcdGNhbmNlbGFibGU6IHRydWUsXG5cdFx0XHRjb21wb3NlZDogdHJ1ZSxcblx0XHRcdGRldGFpbCxcblx0XHR9KTtcblxuXHRcdGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxDb2xsZWN0aW9uIHx8IGVsZW1lbnQgaW5zdGFuY2VvZiBOb2RlTGlzdCkge1xuXHRcdGZvciAoY29uc3QgZSBvZiBlbGVtZW50KSB7XG5cdFx0XHRmaXJlQ3VzdG9tRXZlbnQoZSwgdHlwZSwgZGV0YWlsKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdFwidmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50IG9yIEhUTUxDb2xsZWN0aW9uXCIsXG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgcGF0aCBgRXZlbnQuY29tcG9zZWRQYXRoKClgIGZyb20gYW4gZXZlbnQgYW5kIHRyaWVzIHRvIGZpbmQgdGhlIG5leHQgZWxlbWVudFxuICogdXAgdGhlIHRyZWUgYGVsZW1lbnQuY2xvc2VzdCgpYCB3aXRoIHRoZSBhdHRyaWJ1dGUgYW5kIHZhbHVlLiBJZiBubyB2YWx1ZSwgb3IgYSB2YWx1ZSB0aGF0IGlzIHVuZGVmaW5lZCBvciBudWxsLFxuICogaXMgc3BlY2lmaWVkLCBvbmx5IHRoZSBhdHRyaWJ1dGUgaXMgc2VhcmNoZWQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNC4wXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZU5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bGx8dW5kZWZpbmVkfSBhdHRyaWJ1dGVWYWx1ZVxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGV2ZW50XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFxuICogQHN1bW1hcnkgSGVscCBmdW5jdGlvbiB0byBmaW5kIHRoZSBhcHByb3ByaWF0ZSBjb250cm9sXG4gKi9cbmZ1bmN0aW9uIGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KGV2ZW50LCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1ZSkge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGV2ZW50LCBFdmVudCk7XG5cblx0aWYgKHR5cGVvZiBldmVudC5jb21wb3NlZFBhdGggIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGV2ZW50XCIpO1xuXHR9XG5cblx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXG5cdC8vIGNsb3Nlc3QgY2Fubm90IGJlIHVzZWQgaGVyZSwgYmVjYXVzZSBjbG9zZXN0IGlzIG5vdCBjb3JyZWN0IGZvciBzbG90dGVkIGVsZW1lbnRzXG5cdGlmIChpc0FycmF5KHBhdGgpKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBvID0gcGF0aFtpXTtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRvIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcblx0XHRcdFx0by5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkgJiZcblx0XHRcdFx0KGF0dHJpYnV0ZVZhbHVlID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRvLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSA9PT0gYXR0cmlidXRlVmFsdWUpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIG87XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGRpZmYgfSBmcm9tIFwiLi4vZGF0YS9kaWZmLm1qc1wiO1xuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi9kYXRhL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQgeyBQaXBlIH0gZnJvbSBcIi4uL2RhdGEvcGlwZS5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMsXG5cdEFUVFJJQlVURV9VUERBVEVSX0JJTkQsXG5cdEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVCxcblx0QVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSxcblx0QVRUUklCVVRFX1VQREFURVJfUkVNT1ZFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9TRUxFQ1RfVEhJUyxcbn0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc0luc3RhbmNlLCBpc0l0ZXJhYmxlIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBQcm94eU9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUFycmF5LCB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7IHRyaW1TcGFjZXMgfSBmcm9tIFwiLi4vdXRpbC90cmltc3BhY2VzLm1qc1wiO1xuaW1wb3J0IHsgYWRkVG9PYmplY3RMaW5rIH0gZnJvbSBcIi4vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50IH0gZnJvbSBcIi4vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgZmluZERvY3VtZW50VGVtcGxhdGUgfSBmcm9tIFwiLi90ZW1wbGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgVXBkYXRlciwgYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQgfTtcblxuLyoqXG4gKiBUaGUgdXBkYXRlciBjbGFzcyBjb25uZWN0cyBhbiBvYmplY3Qgd2l0aCB0aGUgZG9tLiBJbiB0aGlzIHdheSwgc3RydWN0dXJlcyBhbmQgY29udGVudHMgaW4gdGhlIERPTSBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBhZGFwdGVkIHZpYSBhdHRyaWJ1dGVzLlxuICpcbiAqIEZvciBleGFtcGxlLCB0byBpbmNsdWRlIGEgc3RyaW5nIGZyb20gYW4gb2JqZWN0LCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItcmVwbGFjZWAgY2FuIGJlIHVzZWQuXG4gKiBhIGZ1cnRoZXIgZXhwbGFuYXRpb24gY2FuIGJlIGZvdW5kIHVuZGVyIFttb25zdGVyanMub3JnXShodHRwczovL21vbnN0ZXJqcy5vcmcvKVxuICpcbiAqIENoYW5nZXMgdG8gYXR0cmlidXRlcyBhcmUgbWFkZSBvbmx5IHdoZW4gdGhlIGRpcmVjdCB2YWx1ZXMgYXJlIGNoYW5nZWQuIElmIHlvdSB3YW50IHRvIGFzc2lnbiBjaGFuZ2VzIHRvIG90aGVyIHZhbHVlc1xuICogYXMgd2VsbCwgeW91IGhhdmUgdG8gaW5zZXJ0IHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1zZWxlY3QtdGhpc2AuIFRoaXMgc2hvdWxkIGJlIGRvbmUgd2l0aCBjYXJlLCBhcyBpdCBjYW4gcmVkdWNlIHBlcmZvcm1hbmNlLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9kb20vdXBkYXRlci5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIHZhbHVlIGlzIG5vdCBpdGVyYWJsZVxuICogQHRocm93cyB7RXJyb3J9IHBpcGVzIGFyZSBub3QgYWxsb3dlZCB3aGVuIGNsb25pbmcgYSBub2RlLlxuICogQHRocm93cyB7RXJyb3J9IG5vIHRlbXBsYXRlIHdhcyBmb3VuZCB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LlxuICogQHRocm93cyB7RXJyb3J9IHRoZSBtYXhpbXVtIGRlcHRoIGZvciB0aGUgcmVjdXJzaW9uIGlzIHJlYWNoZWQuXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnRcbiAqIEBzdW1tYXJ5IFRoZSB1cGRhdGVyIGNsYXNzIGNvbm5lY3RzIGFuIG9iamVjdCB3aXRoIHRoZSBkb21cbiAqL1xuY2xhc3MgVXBkYXRlciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQHNpbmNlIDEuOC4wXG5cdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcblx0ICogQHBhcmFtIHtvYmplY3R8UHJveHlPYnNlcnZlcnx1bmRlZmluZWR9IHN1YmplY3Rcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3Rcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnRcblx0ICogQHNlZSB7QGxpbmsgTW9uc3Rlci5ET00uZmluZERvY3VtZW50VGVtcGxhdGV9XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihlbGVtZW50LCBzdWJqZWN0KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdC8qKlxuXHRcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cblx0XHQgKi9cblx0XHRpZiAoc3ViamVjdCA9PT0gdW5kZWZpbmVkKSBzdWJqZWN0ID0ge307XG5cdFx0aWYgKCFpc0luc3RhbmNlKHN1YmplY3QsIFByb3h5T2JzZXJ2ZXIpKSB7XG5cdFx0XHRzdWJqZWN0ID0gbmV3IFByb3h5T2JzZXJ2ZXIoc3ViamVjdCk7XG5cdFx0fVxuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0XHRlbGVtZW50OiB2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KSxcblx0XHRcdGxhc3Q6IHt9LFxuXHRcdFx0Y2FsbGJhY2tzOiBuZXcgTWFwKCksXG5cdFx0XHRldmVudFR5cGVzOiBbXCJrZXl1cFwiLCBcImNsaWNrXCIsIFwiY2hhbmdlXCIsIFwiZHJvcFwiLCBcInRvdWNoZW5kXCIsIFwiaW5wdXRcIl0sXG5cdFx0XHRzdWJqZWN0OiBzdWJqZWN0LFxuXHRcdH07XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5jYWxsYmFja3Muc2V0KFxuXHRcdFx0XCJjaGVja3N0YXRlXCIsXG5cdFx0XHRnZXRDaGVja1N0YXRlQ2FsbGJhY2suY2FsbCh0aGlzKSxcblx0XHQpO1xuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5hdHRhY2hPYnNlcnZlcihcblx0XHRcdG5ldyBPYnNlcnZlcigoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHMgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0LmdldFJlYWxTdWJqZWN0KCk7XG5cblx0XHRcdFx0Y29uc3QgZGlmZlJlc3VsdCA9IGRpZmYodGhpc1tpbnRlcm5hbFN5bWJvbF0ubGFzdCwgcyk7XG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmxhc3QgPSBjbG9uZShzKTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IFssIGNoYW5nZV0gb2YgT2JqZWN0LmVudHJpZXMoZGlmZlJlc3VsdCkpIHtcblx0XHRcdFx0XHRyZW1vdmVFbGVtZW50LmNhbGwodGhpcywgY2hhbmdlKTtcblx0XHRcdFx0XHRpbnNlcnRFbGVtZW50LmNhbGwodGhpcywgY2hhbmdlKTtcblx0XHRcdFx0XHR1cGRhdGVDb250ZW50LmNhbGwodGhpcywgY2hhbmdlKTtcblx0XHRcdFx0XHR1cGRhdGVBdHRyaWJ1dGVzLmNhbGwodGhpcywgY2hhbmdlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWZhdWx0czogJ2tleXVwJywgJ2NsaWNrJywgJ2NoYW5nZScsICdkcm9wJywgJ3RvdWNoZW5kJ1xuXHQgKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kZS9kb2NzL1dlYi9FdmVudHN9XG5cdCAqIEBzaW5jZSAxLjkuMFxuXHQgKiBAcGFyYW0ge0FycmF5fSB0eXBlc1xuXHQgKiBAcmV0dXJuIHtVcGRhdGVyfVxuXHQgKi9cblx0c2V0RXZlbnRUeXBlcyh0eXBlcykge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmV2ZW50VHlwZXMgPSB2YWxpZGF0ZUFycmF5KHR5cGVzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBXaXRoIHRoaXMgbWV0aG9kLCB0aGUgZXZlbnRsaXN0ZW5lcnMgYXJlIGhvb2tlZCBpbiBhbmQgdGhlIG1hZ2ljIGJlZ2lucy5cblx0ICpcblx0ICogYGBgXG5cdCAqIHVwZGF0ZXIucnVuKCkudGhlbigoKSA9PiB7XG5cdCAqICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblx0ICogfSk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAc2luY2UgMS45LjBcblx0ICogQHJldHVybiB7VXBkYXRlcn1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aFxuXHQgKi9cblx0ZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCkge1xuXHRcdHRoaXMuZGlzYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuXG5cdFx0Zm9yIChjb25zdCB0eXBlIG9mIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmV2ZW50VHlwZXMpIHtcblx0XHRcdC8vIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50VGFyZ2V0L2FkZEV2ZW50TGlzdGVuZXJcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0dHlwZSxcblx0XHRcdFx0Z2V0Q29udHJvbEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2FwdHVyZTogdHJ1ZSxcblx0XHRcdFx0XHRwYXNzaXZlOiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCB0dXJucyBvZmYgdGhlIG1hZ2ljIG9yIHdobyBsb3ZlcyBpdCBtb3JlIHByb2ZhbmUgaXQgcmVtb3ZlcyB0aGUgZXZlbnRMaXN0ZW5lci5cblx0ICpcblx0ICogQHNpbmNlIDEuOS4wXG5cdCAqIEByZXR1cm4ge1VwZGF0ZXJ9XG5cdCAqL1xuXHRkaXNhYmxlRXZlbnRQcm9jZXNzaW5nKCkge1xuXHRcdGZvciAoY29uc3QgdHlwZSBvZiB0aGlzW2ludGVybmFsU3ltYm9sXS5ldmVudFR5cGVzKSB7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdHR5cGUsXG5cdFx0XHRcdGdldENvbnRyb2xFdmVudEhhbmRsZXIuY2FsbCh0aGlzKSxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHJ1biBtZXRob2QgbXVzdCBiZSBjYWxsZWQgZm9yIHRoZSB1cGRhdGUgdG8gc3RhcnQgd29ya2luZy5cblx0ICogVGhlIG1ldGhvZCBlbnN1cmVzIHRoYXQgY2hhbmdlcyBhcmUgZGV0ZWN0ZWQuXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiB1cGRhdGVyLnJ1bigpLnRoZW4oKCkgPT4ge1xuXHQgKiAgIHVwZGF0ZXIuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cdCAqIH0pO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHN1bW1hcnkgTGV0IHRoZSBtYWdpYyBiZWdpblxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0cnVuKCkge1xuXHRcdC8vIHRoZSBrZXkgX19pbml0X19oYXMgbm8gZnVydGhlciBtZWFuaW5nIGFuZCBpcyBvbmx5XG5cdFx0Ly8gdXNlZCB0byBjcmVhdGUgdGhlIGRpZmYgZm9yIGVtcHR5IG9iamVjdHMuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ubGFzdCA9IHsgX19pbml0X186IHRydWUgfTtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5ub3RpZnlPYnNlcnZlcnMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB2YWx1ZXMgb2YgYm91bmQgZWxlbWVudHMgYW5kIGNoYW5nZXMgdGhlbSBpbiBzdWJqZWN0XG5cdCAqXG5cdCAqIEBzaW5jZSAxLjI3LjBcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uVXBkYXRlcn1cblx0ICovXG5cdHJldHJpZXZlKCkge1xuXHRcdHJldHJpZXZlRnJvbUJpbmRpbmdzLmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogSWYgeW91IGhhdmUgcGFzc2VkIGEgUHJveHlPYnNlcnZlciBpbiB0aGUgY29uc3RydWN0b3IsIHlvdSB3aWxsIGdldCB0aGUgb2JqZWN0IHRoYXQgdGhlIFByb3h5T2JzZXJ2ZXIgbWFuYWdlcyBoZXJlLlxuXHQgKiBIb3dldmVyLCBpZiB5b3UgcGFzc2VkIGEgc2ltcGxlIG9iamVjdCwgaGVyZSB5b3Ugd2lsbCBnZXQgYSBwcm94eSBmb3IgdGhhdCBvYmplY3QuXG5cdCAqXG5cdCAqIEZvciBjaGFuZ2VzIHRoZSBQcm94eU9ic2VydmVyIG11c3QgYmUgdXNlZC5cblx0ICpcblx0ICogQHNpbmNlIDEuOC4wXG5cdCAqIEByZXR1cm4ge1Byb3h5fVxuXHQgKi9cblx0Z2V0U3ViamVjdCgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRTdWJqZWN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gcmVnaXN0ZXIgY29tbWFuZHMgdGhhdCBjYW4gYmUgY2FsbGVkIHZpYSBjYWxsOiBpbnN0cnVjdGlvbi5cblx0ICogVGhpcyBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGEgcGlwZSB3aXRoIGl0cyBvd24gZnVuY3Rpb25hbGl0eS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHJldHVybnMge1RyYW5zZm9ybWVyfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqL1xuXHRzZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjaykge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrcy5zZXQobmFtZSwgY2FsbGJhY2spO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAcmV0dXJuIHtmdW5jdGlvblxuICogQHRoaXMgVXBkYXRlclxuICovXG5mdW5jdGlvbiBnZXRDaGVja1N0YXRlQ2FsbGJhY2soKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoY3VycmVudCkge1xuXHRcdC8vIHRoaXMgaXMgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgb2JqZWN0ICh0aGVyZWZvcmUgbm8gYXJyYXkgZnVuY3Rpb24gaGVyZSlcblx0XHRpZiAodGhpcyBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRcdGlmIChbXCJyYWRpb1wiLCBcImNoZWNrYm94XCJdLmluZGV4T2YodGhpcy50eXBlKSAhPT0gLTEpIHtcblx0XHRcdFx0cmV0dXJuIGAke3RoaXMudmFsdWV9YCA9PT0gYCR7Y3VycmVudH1gID8gXCJ0cnVlXCIgOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0aGlzIGluc3RhbmNlb2YgSFRNTE9wdGlvbkVsZW1lbnQpIHtcblx0XHRcdGlmIChpc0FycmF5KGN1cnJlbnQpICYmIGN1cnJlbnQuaW5kZXhPZih0aGlzLnZhbHVlKSAhPT0gLTEpIHtcblx0XHRcdFx0cmV0dXJuIFwidHJ1ZVwiO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBzeW1ib2wgPSBTeW1ib2woXCJAc2NodWthaS9tb25zdGVyL3VwZGF0ZXJAQEV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKiBAdGhpcyBVcGRhdGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGJpbmQgYXJndW1lbnQgbXVzdCBzdGFydCBhcyBhIHZhbHVlIHdpdGggYSBwYXRoXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRyb2xFdmVudEhhbmRsZXIoKSB7XG5cdGlmICh0aGlzW3N5bWJvbF0pIHtcblx0XHRyZXR1cm4gdGhpc1tzeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgYmluZCBhcmd1bWVudCBtdXN0IHN0YXJ0IGFzIGEgdmFsdWUgd2l0aCBhIHBhdGguXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBvYmplY3Rcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbc3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChldmVudCwgQVRUUklCVVRFX1VQREFURVJfQklORCk7XG5cblx0XHRpZiAoZWxlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0cmV0cmlldmVBbmRTZXRWYWx1ZS5jYWxsKHRoaXMsIGVsZW1lbnQpO1xuXHR9O1xuXG5cdHJldHVybiB0aGlzW3N5bWJvbF07XG59XG5cbi8qKlxuICogQHRocm93cyB7RXJyb3J9IHRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB2b2lkXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJldHJpZXZlQW5kU2V0VmFsdWUoZWxlbWVudCkge1xuXHRjb25zdCBwYXRoZmluZGVyID0gbmV3IFBhdGhmaW5kZXIodGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRTdWJqZWN0KCkpO1xuXG5cdGxldCBwYXRoID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfQklORCk7XG5cdGlmIChwYXRoID09PSBudWxsKVxuXHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aFwiKTtcblxuXHRpZiAocGF0aC5pbmRleE9mKFwicGF0aDpcIikgIT09IDApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgYmluZCBhcmd1bWVudCBtdXN0IHN0YXJ0IGFzIGEgdmFsdWUgd2l0aCBhIHBhdGhcIik7XG5cdH1cblxuXHRwYXRoID0gcGF0aC5zdWJzdHJpbmcoNSk7XG5cblx0bGV0IHZhbHVlO1xuXG5cdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuXHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRjYXNlIFwiY2hlY2tib3hcIjpcblx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LmNoZWNrZWQgPyBlbGVtZW50LnZhbHVlIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHZhbHVlID0gZWxlbWVudC52YWx1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG5cdFx0dmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXHR9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MU2VsZWN0RWxlbWVudCkge1xuXHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRjYXNlIFwic2VsZWN0LW9uZVwiOlxuXHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInNlbGVjdC1tdWx0aXBsZVwiOlxuXHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG5cblx0XHRcdFx0bGV0IG9wdGlvbnMgPSBlbGVtZW50Py5zZWxlY3RlZE9wdGlvbnM7XG5cdFx0XHRcdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIjpzY29wZSBvcHRpb246Y2hlY2tlZFwiKTtcblx0XHRcdFx0dmFsdWUgPSBBcnJheS5mcm9tKG9wdGlvbnMpLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSk7XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0Ly8gdmFsdWVzIGZyb20gY3VzdG9tZWxlbWVudHNcblx0fSBlbHNlIGlmIChcblx0XHQoZWxlbWVudD8uY29uc3RydWN0b3I/LnByb3RvdHlwZSAmJlxuXHRcdFx0ISFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuXHRcdFx0XHRlbGVtZW50LmNvbnN0cnVjdG9yLnByb3RvdHlwZSxcblx0XHRcdFx0XCJ2YWx1ZVwiLFxuXHRcdFx0KT8uW1wiZ2V0XCJdKSB8fFxuXHRcdGVsZW1lbnQuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZVwiKVxuXHQpIHtcblx0XHR2YWx1ZSA9IGVsZW1lbnQ/LltcInZhbHVlXCJdO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIG9iamVjdFwiKTtcblx0fVxuXG5cdGNvbnN0IGNvcHkgPSBjbG9uZSh0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0LmdldFJlYWxTdWJqZWN0KCkpO1xuXHRjb25zdCBwZiA9IG5ldyBQYXRoZmluZGVyKGNvcHkpO1xuXHRwZi5zZXRWaWEocGF0aCwgdmFsdWUpO1xuXG5cdGNvbnN0IGRpZmZSZXN1bHQgPSBkaWZmKGNvcHksIHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0UmVhbFN1YmplY3QoKSk7XG5cblx0aWYgKGRpZmZSZXN1bHQubGVuZ3RoID4gMCkge1xuXHRcdHBhdGhmaW5kZXIuc2V0VmlhKHBhdGgsIHZhbHVlKTtcblx0fVxufVxuXG4vKipcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjcuMFxuICogQHJldHVybiB2b2lkXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZXRyaWV2ZUZyb21CaW5kaW5ncygpIHtcblx0aWYgKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQubWF0Y2hlcyhgWyR7QVRUUklCVVRFX1VQREFURVJfQklORH1dYCkpIHtcblx0XHRyZXRyaWV2ZUFuZFNldFZhbHVlLmNhbGwodGhpcywgdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudCk7XG5cdH1cblxuXHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnRcblx0XHQucXVlcnlTZWxlY3RvckFsbChgWyR7QVRUUklCVVRFX1VQREFURVJfQklORH1dYClcblx0XHQuZW50cmllcygpKSB7XG5cdFx0cmV0cmlldmVBbmRTZXRWYWx1ZS5jYWxsKHRoaXMsIGVsZW1lbnQpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge29iamVjdH0gY2hhbmdlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZW1vdmVFbGVtZW50KGNoYW5nZSkge1xuXHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnRcblx0XHQucXVlcnlTZWxlY3RvckFsbChgOnNjb3BlIFske0FUVFJJQlVURV9VUERBVEVSX1JFTU9WRX1dYClcblx0XHQuZW50cmllcygpKSB7XG5cdFx0ZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge29iamVjdH0gY2hhbmdlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQHRocm93cyB7RXJyb3J9IHRoZSB2YWx1ZSBpcyBub3QgaXRlcmFibGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBwaXBlcyBhcmUgbm90IGFsbG93ZWQgd2hlbiBjbG9uaW5nIGEgbm9kZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyB0ZW1wbGF0ZSB3YXMgZm91bmQgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS5cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgbWF4aW11bSBkZXB0aCBmb3IgdGhlIHJlY3Vyc2lvbiBpcyByZWFjaGVkLlxuICogQHRoaXMgVXBkYXRlclxuICovXG5mdW5jdGlvbiBpbnNlcnRFbGVtZW50KGNoYW5nZSkge1xuXHRjb25zdCBzdWJqZWN0ID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRSZWFsU3ViamVjdCgpO1xuXG5cdGNvbnN0IG1lbSA9IG5ldyBXZWFrU2V0KCk7XG5cdGxldCB3ZCA9IDA7XG5cblx0Y29uc3QgY29udGFpbmVyID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudDtcblxuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdGxldCBmb3VuZCA9IGZhbHNlO1xuXHRcdHdkKys7XG5cblx0XHRjb25zdCBwID0gY2xvbmUoY2hhbmdlPy5bXCJwYXRoXCJdKTtcblx0XHRpZiAoIWlzQXJyYXkocCkpIHJldHVybiB0aGlzO1xuXG5cdFx0d2hpbGUgKHAubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgY3VycmVudCA9IHAuam9pbihcIi5cIik7XG5cblx0XHRcdGxldCBpdGVyYXRvciA9IG5ldyBTZXQoKTtcblx0XHRcdGNvbnN0IHF1ZXJ5ID0gYFske0FUVFJJQlVURV9VUERBVEVSX0lOU0VSVH0qPVwicGF0aDoke2N1cnJlbnR9XCJdYDtcblxuXHRcdFx0Y29uc3QgZSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KTtcblxuXHRcdFx0aWYgKGUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRpdGVyYXRvciA9IG5ldyBTZXQoWy4uLmVdKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNvbnRhaW5lci5tYXRjaGVzKHF1ZXJ5KSkge1xuXHRcdFx0XHRpdGVyYXRvci5hZGQoY29udGFpbmVyKTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCBbLCBjb250YWluZXJFbGVtZW50XSBvZiBpdGVyYXRvci5lbnRyaWVzKCkpIHtcblx0XHRcdFx0aWYgKG1lbS5oYXMoY29udGFpbmVyRWxlbWVudCkpIGNvbnRpbnVlO1xuXHRcdFx0XHRtZW0uYWRkKGNvbnRhaW5lckVsZW1lbnQpO1xuXG5cdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblxuXHRcdFx0XHRjb25zdCBhdHRyaWJ1dGVzID0gY29udGFpbmVyRWxlbWVudC5nZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdFx0QVRUUklCVVRFX1VQREFURVJfSU5TRVJULFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoYXR0cmlidXRlcyA9PT0gbnVsbCkgY29udGludWU7XG5cblx0XHRcdFx0Y29uc3QgZGVmID0gdHJpbVNwYWNlcyhhdHRyaWJ1dGVzKTtcblx0XHRcdFx0Y29uc3QgaSA9IGRlZi5pbmRleE9mKFwiIFwiKTtcblx0XHRcdFx0Y29uc3Qga2V5ID0gdHJpbVNwYWNlcyhkZWYuc3Vic3RyKDAsIGkpKTtcblx0XHRcdFx0Y29uc3QgcmVmUHJlZml4ID0gYCR7a2V5fS1gO1xuXHRcdFx0XHRjb25zdCBjbWQgPSB0cmltU3BhY2VzKGRlZi5zdWJzdHIoaSkpO1xuXG5cdFx0XHRcdC8vIHRoaXMgY2FzZSBpcyBhY3R1YWxseSBleGNsdWRlZCBieSB0aGUgcXVlcnkgYnV0IGlzIG5ldmVydGhlbGVzcyBjaGVja2VkIGFnYWluIGhlcmVcblx0XHRcdFx0aWYgKGNtZC5pbmRleE9mKFwifFwiKSA+IDApIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJwaXBlcyBhcmUgbm90IGFsbG93ZWQgd2hlbiBjbG9uaW5nIGEgbm9kZS5cIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBwaXBlID0gbmV3IFBpcGUoY21kKTtcblx0XHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uY2FsbGJhY2tzLmZvckVhY2goKGYsIG4pID0+IHtcblx0XHRcdFx0XHRwaXBlLnNldENhbGxiYWNrKG4sIGYpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRsZXQgdmFsdWU7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29udGFpbmVyRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSk7XG5cdFx0XHRcdFx0dmFsdWUgPSBwaXBlLnJ1bihzdWJqZWN0KTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGNvbnRhaW5lckVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBkYXRhUGF0aCA9IGNtZC5zcGxpdChcIjpcIikucG9wKCk7XG5cblx0XHRcdFx0bGV0IGluc2VydFBvaW50O1xuXHRcdFx0XHRpZiAoY29udGFpbmVyRWxlbWVudC5oYXNDaGlsZE5vZGVzKCkpIHtcblx0XHRcdFx0XHRpbnNlcnRQb2ludCA9IGNvbnRhaW5lckVsZW1lbnQubGFzdENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFpc0l0ZXJhYmxlKHZhbHVlKSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSB2YWx1ZSBpcyBub3QgaXRlcmFibGVcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBhdmFpbGFibGUgPSBuZXcgU2V0KCk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBbaSwgb2JqXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcblx0XHRcdFx0XHRjb25zdCByZWYgPSByZWZQcmVmaXggKyBpO1xuXHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRQYXRoID0gYCR7ZGF0YVBhdGh9LiR7aX1gO1xuXG5cdFx0XHRcdFx0YXZhaWxhYmxlLmFkZChyZWYpO1xuXHRcdFx0XHRcdGNvbnN0IHJlZkVsZW1lbnQgPSBjb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRcdFx0XHRgWyR7QVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRX09XCIke3JlZn1cIl1gLFxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRpZiAocmVmRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRpbnNlcnRQb2ludCA9IHJlZkVsZW1lbnQ7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRhcHBlbmROZXdEb2N1bWVudEZyYWdtZW50KGNvbnRhaW5lckVsZW1lbnQsIGtleSwgcmVmLCBjdXJyZW50UGF0aCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBub2RlcyA9IGNvbnRhaW5lckVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcblx0XHRcdFx0XHRgWyR7QVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRX0qPVwiJHtyZWZQcmVmaXh9XCJdYCxcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IFssIG5vZGVdIG9mIE9iamVjdC5lbnRyaWVzKG5vZGVzKSkge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdCFhdmFpbGFibGUuaGFzKFxuXHRcdFx0XHRcdFx0XHRub2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFKSxcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRhaW5lckVsZW1lbnQucmVtb3ZlQ2hpbGQobm9kZSk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRhaW5lckVsZW1lbnQuc2V0QXR0cmlidXRlKFxuXHRcdFx0XHRcdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdFx0XHRcdFx0YCR7Y29udGFpbmVyRWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSl9LCAke1xuXHRcdFx0XHRcdFx0XHRcdFx0ZS5tZXNzYWdlXG5cdFx0XHRcdFx0XHRcdFx0fWAudHJpbSgpLFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRwLnBvcCgpO1xuXHRcdH1cblxuXHRcdGlmIChmb3VuZCA9PT0gZmFsc2UpIGJyZWFrO1xuXHRcdGlmICh3ZCsrID4gMjAwKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgbWF4aW11bSBkZXB0aCBmb3IgdGhlIHJlY3Vyc2lvbiBpcyByZWFjaGVkLlwiKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWZcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gdGVtcGxhdGUgd2FzIGZvdW5kIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZE5ld0RvY3VtZW50RnJhZ21lbnQoY29udGFpbmVyLCBrZXksIHJlZiwgcGF0aCkge1xuXHRjb25zdCB0ZW1wbGF0ZSA9IGZpbmREb2N1bWVudFRlbXBsYXRlKGtleSwgY29udGFpbmVyKTtcblxuXHRjb25zdCBub2RlcyA9IHRlbXBsYXRlLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblx0Zm9yIChjb25zdCBbLCBub2RlXSBvZiBPYmplY3QuZW50cmllcyhub2Rlcy5jaGlsZE5vZGVzKSkge1xuXHRcdGlmIChub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGFwcGx5UmVjdXJzaXZlKG5vZGUsIGtleSwgcGF0aCk7XG5cdFx0XHRub2RlLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFLCByZWYpO1xuXHRcdH1cblxuXHRcdGNvbnRhaW5lci5hcHBlbmRDaGlsZChub2RlKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEwLjBcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiBhcHBseVJlY3Vyc2l2ZShub2RlLCBrZXksIHBhdGgpIHtcblx0aWYgKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFKSkge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFKTtcblx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKFxuXHRcdFx0XHRBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFLFxuXHRcdFx0XHR2YWx1ZS5yZXBsYWNlQWxsKGBwYXRoOiR7a2V5fWAsIGBwYXRoOiR7cGF0aH1gKSxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMpKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMpO1xuXHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMsXG5cdFx0XHRcdHZhbHVlLnJlcGxhY2VBbGwoYHBhdGg6JHtrZXl9YCwgYHBhdGg6JHtwYXRofWApLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFssIGNoaWxkXSBvZiBPYmplY3QuZW50cmllcyhub2RlLmNoaWxkTm9kZXMpKSB7XG5cdFx0XHRhcHBseVJlY3Vyc2l2ZShjaGlsZCwga2V5LCBwYXRoKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBwYXJhbSB7b2JqZWN0fSBjaGFuZ2VcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAdGhpcyBVcGRhdGVyXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRlbnQoY2hhbmdlKSB7XG5cdGNvbnN0IHN1YmplY3QgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0LmdldFJlYWxTdWJqZWN0KCk7XG5cblx0Y29uc3QgcCA9IGNsb25lKGNoYW5nZT8uW1wicGF0aFwiXSk7XG5cdHJ1blVwZGF0ZUNvbnRlbnQuY2FsbCh0aGlzLCB0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50LCBwLCBzdWJqZWN0KTtcblxuXHRjb25zdCBzbG90cyA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcInNsb3RcIik7XG5cdGlmIChzbG90cy5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBbLCBzbG90XSBvZiBPYmplY3QuZW50cmllcyhzbG90cykpIHtcblx0XHRcdGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXMoc2xvdC5hc3NpZ25lZE5vZGVzKCkpKSB7XG5cdFx0XHRcdHJ1blVwZGF0ZUNvbnRlbnQuY2FsbCh0aGlzLCBlbGVtZW50LCBwLCBzdWJqZWN0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lclxuICogQHBhcmFtIHthcnJheX0gcGFydHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdWJqZWN0XG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiBydW5VcGRhdGVDb250ZW50KGNvbnRhaW5lciwgcGFydHMsIHN1YmplY3QpIHtcblx0aWYgKCFpc0FycmF5KHBhcnRzKSkgcmV0dXJuO1xuXHRpZiAoIShjb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHJldHVybjtcblx0cGFydHMgPSBjbG9uZShwYXJ0cyk7XG5cblx0Y29uc3QgbWVtID0gbmV3IFdlYWtTZXQoKTtcblxuXHR3aGlsZSAocGFydHMubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGN1cnJlbnQgPSBwYXJ0cy5qb2luKFwiLlwiKTtcblx0XHRwYXJ0cy5wb3AoKTtcblxuXHRcdC8vIFVuZm9ydHVuYXRlbHksIHN0YXRpYyBkYXRhIGlzIGFsd2F5cyBjaGFuZ2VkIGFzIHdlbGwsIHNpbmNlIGl0IGlzIG5vdCBwb3NzaWJsZSB0byByZWFjdCB0byBjaGFuZ2VzIGhlcmUuXG5cdFx0Y29uc3QgcXVlcnkgPSBgWyR7QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRX1ePVwicGF0aDoke2N1cnJlbnR9XCJdLCBbJHtBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFfV49XCJzdGF0aWM6XCJdLCBbJHtBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFfV49XCJpMThuOlwiXWA7XG5cdFx0Y29uc3QgZSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGAke3F1ZXJ5fWApO1xuXG5cdFx0Y29uc3QgaXRlcmF0b3IgPSBuZXcgU2V0KFsuLi5lXSk7XG5cblx0XHRpZiAoY29udGFpbmVyLm1hdGNoZXMocXVlcnkpKSB7XG5cdFx0XHRpdGVyYXRvci5hZGQoY29udGFpbmVyKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG5cdFx0ICovXG5cdFx0Zm9yIChjb25zdCBbZWxlbWVudF0gb2YgaXRlcmF0b3IuZW50cmllcygpKSB7XG5cdFx0XHRpZiAobWVtLmhhcyhlbGVtZW50KSkgcmV0dXJuO1xuXHRcdFx0bWVtLmFkZChlbGVtZW50KTtcblxuXHRcdFx0Y29uc3QgYXR0cmlidXRlcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX1JFUExBQ0UpO1xuXHRcdFx0Y29uc3QgY21kID0gdHJpbVNwYWNlcyhhdHRyaWJ1dGVzKTtcblxuXHRcdFx0Y29uc3QgcGlwZSA9IG5ldyBQaXBlKGNtZCk7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5jYWxsYmFja3MuZm9yRWFjaCgoZiwgbikgPT4ge1xuXHRcdFx0XHRwaXBlLnNldENhbGxiYWNrKG4sIGYpO1xuXHRcdFx0fSk7XG5cblx0XHRcdGxldCB2YWx1ZTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UpO1xuXHRcdFx0XHR2YWx1ZSA9IHBpcGUucnVuKHN1YmplY3QpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHR3aGlsZSAoZWxlbWVudC5maXJzdENoaWxkKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5yZW1vdmVDaGlsZChlbGVtZW50LmZpcnN0Q2hpbGQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRlbGVtZW50LmFwcGVuZENoaWxkKHZhbHVlKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKFxuXHRcdFx0XHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFx0XHRcdGAke2VsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UpfSwgJHtcblx0XHRcdFx0XHRcdFx0ZS5tZXNzYWdlXG5cdFx0XHRcdFx0XHR9YC50cmltKCksXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudC5pbm5lckhUTUwgPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAcGFyYW0ge29iamVjdH0gY2hhbmdlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiB1cGRhdGVBdHRyaWJ1dGVzKGNoYW5nZSkge1xuXHRjb25zdCBzdWJqZWN0ID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRSZWFsU3ViamVjdCgpO1xuXHRjb25zdCBwID0gY2xvbmUoY2hhbmdlPy5bXCJwYXRoXCJdKTtcblx0cnVuVXBkYXRlQXR0cmlidXRlcy5jYWxsKHRoaXMsIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQsIHAsIHN1YmplY3QpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXJcbiAqIEBwYXJhbSB7YXJyYXl9IHBhcnRzXG4gKiBAcGFyYW0ge29iamVjdH0gc3ViamVjdFxuICogQHJldHVybiB7dm9pZH1cbiAqIEB0aGlzIFVwZGF0ZXJcbiAqL1xuZnVuY3Rpb24gcnVuVXBkYXRlQXR0cmlidXRlcyhjb250YWluZXIsIHBhcnRzLCBzdWJqZWN0KSB7XG5cdGlmICghaXNBcnJheShwYXJ0cykpIHJldHVybjtcblx0cGFydHMgPSBjbG9uZShwYXJ0cyk7XG5cblx0Y29uc3QgbWVtID0gbmV3IFdlYWtTZXQoKTtcblxuXHR3aGlsZSAocGFydHMubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGN1cnJlbnQgPSBwYXJ0cy5qb2luKFwiLlwiKTtcblx0XHRwYXJ0cy5wb3AoKTtcblxuXHRcdGxldCBpdGVyYXRvciA9IG5ldyBTZXQoKTtcblxuXHRcdGNvbnN0IHF1ZXJ5ID0gYFske0FUVFJJQlVURV9VUERBVEVSX1NFTEVDVF9USElTfV1bJHtBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTfV0sIFske0FUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVN9Kj1cInBhdGg6JHtjdXJyZW50fVwiXSwgWyR7QVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFU31ePVwic3RhdGljOlwiXSwgWyR7QVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFU31ePVwiaTE4bjpcIl1gO1xuXG5cdFx0Y29uc3QgZSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KTtcblxuXHRcdGlmIChlLmxlbmd0aCA+IDApIHtcblx0XHRcdGl0ZXJhdG9yID0gbmV3IFNldChbLi4uZV0pO1xuXHRcdH1cblxuXHRcdGlmIChjb250YWluZXIubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdGl0ZXJhdG9yLmFkZChjb250YWluZXIpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgW2VsZW1lbnRdIG9mIGl0ZXJhdG9yLmVudHJpZXMoKSkge1xuXHRcdFx0aWYgKG1lbS5oYXMoZWxlbWVudCkpIHJldHVybjtcblx0XHRcdG1lbS5hZGQoZWxlbWVudCk7XG5cblx0XHRcdC8vIHRoaXMgY2FzZSBvY2N1cnMgd2hlbiB0aGUgQVRUUklCVVRFX1VQREFURVJfU0VMRUNUX1RISVMgYXR0cmlidXRlIGlzIHNldFxuXHRcdFx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTKSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgYXR0cmlidXRlcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMpO1xuXG5cdFx0XHRmb3IgKGxldCBbLCBkZWZdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMuc3BsaXQoXCIsXCIpKSkge1xuXHRcdFx0XHRkZWYgPSB0cmltU3BhY2VzKGRlZik7XG5cdFx0XHRcdGNvbnN0IGkgPSBkZWYuaW5kZXhPZihcIiBcIik7XG5cdFx0XHRcdGNvbnN0IG5hbWUgPSB0cmltU3BhY2VzKGRlZi5zdWJzdHIoMCwgaSkpO1xuXHRcdFx0XHRjb25zdCBjbWQgPSB0cmltU3BhY2VzKGRlZi5zdWJzdHIoaSkpO1xuXG5cdFx0XHRcdGNvbnN0IHBpcGUgPSBuZXcgUGlwZShjbWQpO1xuXG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrcy5mb3JFYWNoKChmLCBuKSA9PiB7XG5cdFx0XHRcdFx0cGlwZS5zZXRDYWxsYmFjayhuLCBmLCBlbGVtZW50KTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0bGV0IHZhbHVlO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UpO1xuXHRcdFx0XHRcdHZhbHVlID0gcGlwZS5ydW4oc3ViamVjdCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblx0XHRcdFx0fSBlbHNlIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIHtcblx0XHRcdFx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRoYW5kbGVJbnB1dENvbnRyb2xBdHRyaWJ1dGVVcGRhdGUuY2FsbCh0aGlzLCBlbGVtZW50LCBuYW1lLCB2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8Kn0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcnx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQHRoaXMgVXBkYXRlclxuICovXG5cbmZ1bmN0aW9uIGhhbmRsZUlucHV0Q29udHJvbEF0dHJpYnV0ZVVwZGF0ZShlbGVtZW50LCBuYW1lLCB2YWx1ZSkge1xuXHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50KSB7XG5cdFx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRcdGNhc2UgXCJzZWxlY3QtbXVsdGlwbGVcIjpcblx0XHRcdFx0Zm9yIChjb25zdCBbaW5kZXgsIG9wdF0gb2YgT2JqZWN0LmVudHJpZXMoZWxlbWVudC5vcHRpb25zKSkge1xuXHRcdFx0XHRcdGlmICh2YWx1ZS5pbmRleE9mKG9wdC52YWx1ZSkgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRvcHQuc2VsZWN0ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvcHQuc2VsZWN0ZWQgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJzZWxlY3Qtb25lXCI6XG5cdFx0XHRcdC8vIE9ubHkgb25lIHZhbHVlIG1heSBiZSBzZWxlY3RlZFxuXG5cdFx0XHRcdGZvciAoY29uc3QgW2luZGV4LCBvcHRdIG9mIE9iamVjdC5lbnRyaWVzKGVsZW1lbnQub3B0aW9ucykpIHtcblx0XHRcdFx0XHRpZiAob3B0LnZhbHVlID09PSB2YWx1ZSkge1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zZWxlY3RlZEluZGV4ID0gaW5kZXg7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdFx0Y2FzZSBcInJhZGlvXCI6XG5cdFx0XHRcdGlmIChuYW1lID09PSBcImNoZWNrZWRcIikge1xuXHRcdFx0XHRcdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50LmNoZWNrZWQgPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50LmNoZWNrZWQgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcImNoZWNrYm94XCI6XG5cdFx0XHRcdGlmIChuYW1lID09PSBcImNoZWNrZWRcIikge1xuXHRcdFx0XHRcdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50LmNoZWNrZWQgPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50LmNoZWNrZWQgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJ0ZXh0XCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAobmFtZSA9PT0gXCJ2YWx1ZVwiKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC52YWx1ZSA9IHZhbHVlID09PSB1bmRlZmluZWQgPyBcIlwiIDogdmFsdWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcblx0XHRpZiAobmFtZSA9PT0gXCJ2YWx1ZVwiKSB7XG5cdFx0XHRlbGVtZW50LnZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiB2YWx1ZTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge05vZGVMaXN0fEhUTUxFbGVtZW50fFNldDxIVE1MRWxlbWVudD59IGVsZW1lbnRzXG4gKiBAcGFyYW0ge1N5bWJvbH0gc3ltYm9sXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtQcm9taXNlW119XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIzLjBcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7VHlwZUVycm9yfSBlbGVtZW50cyBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgTm9kZUxpc3QsIEhUTUxFbGVtZW50IG9yIFNldFxuICogQHRocm93cyB7VHlwZUVycm9yfSB0aGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24gaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHN5bWJvbCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFN5bWJvbFxuICovXG5mdW5jdGlvbiBhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudChlbGVtZW50cywgc3ltYm9sLCBvYmplY3QpIHtcblx0aWYgKCEodGhpcyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRcInRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFwiLFxuXHRcdCk7XG5cdH1cblxuXHRpZiAoISh0eXBlb2Ygc3ltYm9sID09PSBcInN5bWJvbFwiKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJzeW1ib2wgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBTeW1ib2xcIik7XG5cdH1cblxuXHRjb25zdCB1cGRhdGVycyA9IG5ldyBTZXQoKTtcblxuXHRpZiAoZWxlbWVudHMgaW5zdGFuY2VvZiBOb2RlTGlzdCkge1xuXHRcdGVsZW1lbnRzID0gbmV3IFNldChbLi4uZWxlbWVudHNdKTtcblx0fSBlbHNlIGlmIChlbGVtZW50cyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0ZWxlbWVudHMgPSBuZXcgU2V0KFtlbGVtZW50c10pO1xuXHR9IGVsc2UgaWYgKGVsZW1lbnRzIGluc3RhbmNlb2YgU2V0KSB7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdGBlbGVtZW50cyBpcyBub3QgYSB2YWxpZCB0eXBlLiAoYWN0dWFsOiAke3R5cGVvZiBlbGVtZW50c30pYCxcblx0XHQpO1xuXHR9XG5cblx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0ZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuXHRcdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHJldHVybjtcblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQpIHJldHVybjtcblxuXHRcdGNvbnN0IHUgPSBuZXcgVXBkYXRlcihlbGVtZW50LCBvYmplY3QpO1xuXHRcdHVwZGF0ZXJzLmFkZCh1KTtcblxuXHRcdHJlc3VsdC5wdXNoKFxuXHRcdFx0dS5ydW4oKS50aGVuKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHUuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9KTtcblxuXHRpZiAodXBkYXRlcnMuc2l6ZSA+IDApIHtcblx0XHRhZGRUb09iamVjdExpbmsodGhpcywgc3ltYm9sLCB1cGRhdGVycyk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuIiwgImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IGdldFNsb3R0ZWRFbGVtZW50cywgZ2V0U2xvdHRlZE5vZGVzIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfHVuZGVmaW5lZH0gcXVlcnlcbiAqIEBwYXJhbSB7U3RyaW5nfHVuZGVmaW5lZHxudWxsfSBuYW1lIG5hbWUgb2YgdGhlIHNsb3QgKGlmIHRoZSBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLCBhbGwgc2xvdHMgYXJlIHNlYXJjaGVkLCBpZiB0aGUgcGFyYW1ldGVyIGhhcyB0aGUgdmFsdWUgbnVsbCwgYWxsIHNsb3RzIHdpdGhvdXQgYSBuYW1lIGFyZSBzZWFyY2hlZC4gaWYgYSBzdHJpbmcgaXMgc3BlY2lmaWVkLCB0aGUgc2xvdHMgd2l0aCB0aGlzIG5hbWUgYXJlIHNlYXJjaGVkLilcbiAqIEByZXR1cm4geyp9XG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjMzLjBcbiAqIEB0aHJvd3Mge0Vycm9yfSBxdWVyeSBtdXN0IGJlIGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldFNsb3R0ZWROb2RlcyhxdWVyeSwgbmFtZSkge1xuXHRjb25zdCByZXN1bHQgPSBuZXcgU2V0KCk7XG5cblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0bGV0IHNlbGVjdG9yID0gXCJzbG90XCI7XG5cdGlmIChuYW1lICE9PSB1bmRlZmluZWQpIHtcblx0XHRpZiAobmFtZSA9PT0gbnVsbCkge1xuXHRcdFx0c2VsZWN0b3IgKz0gXCI6bm90KFtuYW1lXSlcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZWN0b3IgKz0gYFtuYW1lPSR7dmFsaWRhdGVTdHJpbmcobmFtZSl9XWA7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc2xvdHMgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG5cblx0Zm9yIChjb25zdCBbLCBzbG90XSBvZiBPYmplY3QuZW50cmllcyhzbG90cykpIHtcblx0XHRzbG90LmFzc2lnbmVkTm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG5cdFx0XHRpZiAobm9kZSA9PT0gbnVsbCB8fCBub2RlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNTdHJpbmcocXVlcnkpKSB7XG5cdFx0XHRcdG5vZGUucXVlcnlTZWxlY3RvckFsbChxdWVyeSkuZm9yRWFjaChmdW5jdGlvbiAobikge1xuXHRcdFx0XHRcdHJlc3VsdC5hZGQobik7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChub2RlLm1hdGNoZXMocXVlcnkpKSB7XG5cdFx0XHRcdFx0cmVzdWx0LmFkZChub2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChxdWVyeSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInF1ZXJ5IG11c3QgYmUgYSBzdHJpbmdcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXN1bHQuYWRkKG5vZGUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtTdHJpbmd8dW5kZWZpbmVkfSBxdWVyeVxuICogQHBhcmFtIHtTdHJpbmd8dW5kZWZpbmVkfG51bGx9IG5hbWUgbmFtZSBvZiB0aGUgc2xvdCAoaWYgdGhlIHBhcmFtZXRlciBpcyB1bmRlZmluZWQsIGFsbCBzbG90cyBhcmUgc2VhcmNoZWQsIGlmIHRoZSBwYXJhbWV0ZXIgaGFzIHRoZSB2YWx1ZSBudWxsLCBhbGwgc2xvdHMgd2l0aG91dCBhIG5hbWUgYXJlIHNlYXJjaGVkLiBpZiBhIHN0cmluZyBpcyBzcGVjaWZpZWQsIHRoZSBzbG90cyB3aXRoIHRoaXMgbmFtZSBhcmUgc2VhcmNoZWQuKVxuICogQHJldHVybiB7Kn1cbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjMuMFxuICogQHRocm93cyB7RXJyb3J9IHF1ZXJ5IG11c3QgYmUgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0U2xvdHRlZEVsZW1lbnRzKHF1ZXJ5LCBuYW1lKSB7XG5cdGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQoKTtcblxuXHRpZiAoISh0aGlzLnNoYWRvd1Jvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290KSkge1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRsZXQgc2VsZWN0b3IgPSBcInNsb3RcIjtcblx0aWYgKG5hbWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChuYW1lID09PSBudWxsKSB7XG5cdFx0XHRzZWxlY3RvciArPSBcIjpub3QoW25hbWVdKVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZWxlY3RvciArPSBgW25hbWU9JHt2YWxpZGF0ZVN0cmluZyhuYW1lKX1dYDtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBzbG90cyA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcblxuXHRmb3IgKGNvbnN0IFssIHNsb3RdIG9mIE9iamVjdC5lbnRyaWVzKHNsb3RzKSkge1xuXHRcdHNsb3QuYXNzaWduZWRFbGVtZW50cygpLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcblx0XHRcdGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHJldHVybjtcblxuXHRcdFx0aWYgKGlzU3RyaW5nKHF1ZXJ5KSkge1xuXHRcdFx0XHRub2RlLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpLmZvckVhY2goZnVuY3Rpb24gKG4pIHtcblx0XHRcdFx0XHRyZXN1bHQuYWRkKG4pO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAobm9kZS5tYXRjaGVzKHF1ZXJ5KSkge1xuXHRcdFx0XHRcdHJlc3VsdC5hZGQobm9kZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAocXVlcnkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJxdWVyeSBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVzdWx0LmFkZChub2RlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5leHBvcnQgeyBleHRyYWN0S2V5cyB9O1xuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBrZXlzIGZyb20gdGhlIGdpdmVuIG9iamVjdCBhbmQgcmV0dXJucyBhIG1hcCB3aXRoIHRoZSBrZXlzIGFuZCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlQcmVmaXhcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlTZXBhcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVNlcGFyYXRvclxuICogQHJldHVybnMge01hcDxhbnksIGFueT59XG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RLZXlzKFxuXHRvYmosXG5cdGtleVByZWZpeCA9IFwiXCIsXG5cdGtleVNlcGFyYXRvciA9IFwiLVwiLFxuXHR2YWx1ZVNlcGFyYXRvciA9IFwiLlwiLFxuKSB7XG5cdGNvbnN0IHJlc3VsdE1hcCA9IG5ldyBNYXAoKTtcblxuXHRmdW5jdGlvbiBoZWxwZXIoY3VycmVudE9iaiwgY3VycmVudEtleVByZWZpeCwgY3VycmVudFZhbHVlUHJlZml4KSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gY3VycmVudE9iaikge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRjdXJyZW50T2JqW2tleV0gIT09IG51bGwgJiZcblx0XHRcdFx0dHlwZW9mIGN1cnJlbnRPYmpba2V5XSA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdFx0XHQhQXJyYXkuaXNBcnJheShjdXJyZW50T2JqW2tleV0pXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgbmV3S2V5UHJlZml4ID0gY3VycmVudEtleVByZWZpeFxuXHRcdFx0XHRcdD8gY3VycmVudEtleVByZWZpeCArIGtleVNlcGFyYXRvciArIGtleS50b0xvd2VyQ2FzZSgpXG5cdFx0XHRcdFx0OiBrZXkudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0Y29uc3QgbmV3VmFsdWVQcmVmaXggPSBjdXJyZW50VmFsdWVQcmVmaXhcblx0XHRcdFx0XHQ/IGN1cnJlbnRWYWx1ZVByZWZpeCArIHZhbHVlU2VwYXJhdG9yICsga2V5XG5cdFx0XHRcdFx0OiBrZXk7XG5cdFx0XHRcdGhlbHBlcihjdXJyZW50T2JqW2tleV0sIG5ld0tleVByZWZpeCwgbmV3VmFsdWVQcmVmaXgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZmluYWxLZXkgPSBjdXJyZW50S2V5UHJlZml4XG5cdFx0XHRcdFx0PyBjdXJyZW50S2V5UHJlZml4ICsga2V5U2VwYXJhdG9yICsga2V5LnRvTG93ZXJDYXNlKClcblx0XHRcdFx0XHQ6IGtleS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRjb25zdCBmaW5hbFZhbHVlID0gY3VycmVudFZhbHVlUHJlZml4XG5cdFx0XHRcdFx0PyBjdXJyZW50VmFsdWVQcmVmaXggKyB2YWx1ZVNlcGFyYXRvciArIGtleVxuXHRcdFx0XHRcdDoga2V5O1xuXHRcdFx0XHRyZXN1bHRNYXAuc2V0KGZpbmFsS2V5LCBmaW5hbFZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRoZWxwZXIob2JqLCBrZXlQcmVmaXgsIGtleVByZWZpeCk7XG5cdHJldHVybiByZXN1bHRNYXA7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uLy4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCB9IGZyb20gXCIuLi9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgZXh0cmFjdEtleXMgfSBmcm9tIFwiLi9leHRyYWN0LWtleXMubWpzXCI7XG5cbmV4cG9ydCB7IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMgfTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyB0aGUgZ2l2ZW4gb3B0aW9ucyBvYmplY3QgYmFzZWQgb24gdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGN1cnJlbnQgRE9NIGVsZW1lbnQuXG4gKiBUaGUgZnVuY3Rpb24gbG9va3MgZm9yIGF0dHJpYnV0ZXMgd2l0aCB0aGUgcHJlZml4ICdkYXRhLW1vbnN0ZXItb3B0aW9uLScsIGFuZCBtYXBzIHRoZW0gdG9cbiAqIHByb3BlcnRpZXMgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LiBJdCByZXBsYWNlcyB0aGUgZGFzaGVzIHdpdGggZG90cyB0byBmb3JtIHRoZSBwcm9wZXJ0eSBwYXRoLlxuICogRm9yIGV4YW1wbGUsIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tdXJsJyBtYXBzIHRvIHRoZSAndXJsJyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKlxuICogV2l0aCB0aGUgbWFwcGluZyBwYXJhbWV0ZXIsIHRoZSBhdHRyaWJ1dGUgdmFsdWUgY2FuIGJlIG1hcHBlZCB0byBhIGRpZmZlcmVudCB2YWx1ZS5cbiAqIEZvciBleGFtcGxlLCB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLWZvbycgbWFwcyB0byB0aGUgJ2JhcicgcHJvcGVydHkgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICpcbiAqIFRoZSBtYXBwaW5nIG9iamVjdCB3b3VsZCBsb29rIGxpa2UgdGhpczpcbiAqIHtcbiAqICAgICdmb28nOiAodmFsdWUpID0+IHZhbHVlICsgJ2JhcidcbiAqICAgIC8vIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLWZvbycgaXMgYXBwZW5kZWQgd2l0aCAnYmFyJ1xuICogICAgLy8gYW5kIGFzc2lnbmVkIHRvIHRoZSAnYmFyJyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKiAgICAvLyBlLmcuIDxkaXYgZGF0YS1tb25zdGVyLW9wdGlvbi1mb289XCJmb29cIj48L2Rpdj5cbiAqICAgICdiYXIuYmF6JzogKHZhbHVlKSA9PiB2YWx1ZSArICdiYXInXG4gKiAgICAvLyB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi1iYXItYmF6JyBpcyBhcHBlbmRlZCB3aXRoICdiYXInXG4gKiAgICAvLyBhbmQgYXNzaWduZWQgdG8gdGhlICdiYXIuYmF6JyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKiAgICAvLyBlLmcuIDxkaXYgZGF0YS1tb25zdGVyLW9wdGlvbi1iYXItYmF6PVwiZm9vXCI+PC9kaXY+XG4gKiB9XG4gKlxuICogQHNpbmNlIDMuMzguMFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFRoZSBET00gZWxlbWVudCB0byBiZSB1c2VkIGFzIHRoZSBzb3VyY2Ugb2YgdGhlIGF0dHJpYnV0ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCB0byBiZSBpbml0aWFsaXplZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXBwaW5nIC0gQSBtYXBwaW5nIGJldHdlZW4gdGhlIGF0dHJpYnV0ZSB2YWx1ZSBhbmQgdGhlIHByb3BlcnR5IHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeCAtIFRoZSBwcmVmaXggb2YgdGhlIGF0dHJpYnV0ZXMgdG8gYmUgY29uc2lkZXJlZC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IC0gVGhlIGluaXRpYWxpemVkIG9wdGlvbnMgb2JqZWN0LlxuICogQHRoaXMgSFRNTEVsZW1lbnQgLSBUaGUgY29udGV4dCBvZiB0aGUgRE9NIGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoXG5cdGVsZW1lbnQsXG5cdG9wdGlvbnMsXG5cdG1hcHBpbmcgPSB7fSxcblx0cHJlZml4ID0gXCJkYXRhLW1vbnN0ZXItb3B0aW9uLVwiLFxuKSB7XG5cdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHJldHVybiBvcHRpb25zO1xuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlcygpKSByZXR1cm4gb3B0aW9ucztcblxuXHRjb25zdCBrZXlNYXAgPSBleHRyYWN0S2V5cyhvcHRpb25zKTtcblxuXHRjb25zdCBmaW5kZXIgPSBuZXcgUGF0aGZpbmRlcihvcHRpb25zKTtcblxuXHRlbGVtZW50LmdldEF0dHJpYnV0ZU5hbWVzKCkuZm9yRWFjaCgobmFtZSkgPT4ge1xuXHRcdGlmICghbmFtZS5zdGFydHNXaXRoKHByZWZpeCkpIHJldHVybjtcblxuXHRcdC8vIGNoZWNrIGlmIHRoZSBhdHRyaWJ1dGUgbmFtZSBpcyBhIHZhbGlkIG9wdGlvbi5cblx0XHQvLyB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBhdHRyaWJ1dGUgaXMgc2ltcGxlLiBUaGUgZGFzaCBpcyByZXBsYWNlZCBieSBhIGRvdC5cblx0XHQvLyBlLmcuIGRhdGEtbW9uc3Rlci11cmwgPT4gdXJsXG5cdFx0Y29uc3Qgb3B0aW9uTmFtZSA9IGtleU1hcC5nZXQobmFtZS5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCkudG9Mb3dlckNhc2UoKSk7XG5cdFx0aWYgKCFmaW5kZXIuZXhpc3RzKG9wdGlvbk5hbWUpKSByZXR1cm47XG5cblx0XHRpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUobmFtZSkpIHtcblx0XHRcdGxldCB2YWx1ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKG5hbWUpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRtYXBwaW5nLmhhc093blByb3BlcnR5KG9wdGlvbk5hbWUpICYmXG5cdFx0XHRcdGlzRnVuY3Rpb24obWFwcGluZ1tvcHRpb25OYW1lXSlcblx0XHRcdCkge1xuXHRcdFx0XHR2YWx1ZSA9IG1hcHBpbmdbb3B0aW9uTmFtZV0odmFsdWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgb3B0aW9uVmFsdWUgPSBmaW5kZXIuZ2V0VmlhKG9wdGlvbk5hbWUpO1xuXHRcdFx0aWYgKG9wdGlvblZhbHVlID09PSBudWxsIHx8IG9wdGlvblZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0b3B0aW9uVmFsdWUgPSB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgdHlwZU9mT3B0aW9uVmFsdWUgPSB0eXBlb2Ygb3B0aW9uVmFsdWU7XG5cdFx0XHRpZiAob3B0aW9uVmFsdWUgPT09IG51bGwgfHwgb3B0aW9uVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR2YWx1ZSA9IG51bGw7XG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVPZk9wdGlvblZhbHVlID09PSBcImJvb2xlYW5cIikge1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlID09PSBcInRydWVcIjtcblx0XHRcdH0gZWxzZSBpZiAodHlwZU9mT3B0aW9uVmFsdWUgPT09IFwibnVtYmVyXCIpIHtcblx0XHRcdFx0dmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlT2ZPcHRpb25WYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHR2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVPZk9wdGlvblZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdHZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGZpbmRlci5zZXRWaWEob3B0aW9uTmFtZSwgdmFsdWUpO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uLy4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCB9IGZyb20gXCIuLi9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgZXh0cmFjdEtleXMgfSBmcm9tIFwiLi9leHRyYWN0LWtleXMubWpzXCI7XG5cbmV4cG9ydCB7IHNldE9wdGlvbkZyb21BdHRyaWJ1dGUgfTtcblxuLyoqXG4gKiBTZXQgdGhlIGdpdmVuIG9wdGlvbnMgb2JqZWN0IGJhc2VkIG9uIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBjdXJyZW50IERPTSBlbGVtZW50LlxuICogVGhlIGZ1bmN0aW9uIGxvb2tzIGZvciBhdHRyaWJ1dGVzIHdpdGggdGhlIHByZWZpeCAnZGF0YS1tb25zdGVyLW9wdGlvbi0nLCBhbmQgbWFwcyB0aGVtIHRvXG4gKiBwcm9wZXJ0aWVzIGluIHRoZSBvcHRpb25zIG9iamVjdC4gSXQgcmVwbGFjZXMgdGhlIGRhc2hlcyB3aXRoIGRvdHMgdG8gZm9ybSB0aGUgcHJvcGVydHkgcGF0aC5cbiAqIEZvciBleGFtcGxlLCB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLXVybCcgbWFwcyB0byB0aGUgJ3VybCcgcHJvcGVydHkgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICpcbiAqIFdpdGggdGhlIG1hcHBpbmcgcGFyYW1ldGVyLCB0aGUgYXR0cmlidXRlIHZhbHVlIGNhbiBiZSBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgdmFsdWUuXG4gKiBGb3IgZXhhbXBsZSwgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi1mb28nIG1hcHMgdG8gdGhlICdiYXInIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqXG4gKiBUaGUgbWFwcGluZyBvYmplY3Qgd291bGQgbG9vayBsaWtlIHRoaXM6XG4gKiB7XG4gKiAgICAnZm9vJzogKHZhbHVlKSA9PiB2YWx1ZSArICdiYXInXG4gKiAgICAvLyB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi1mb28nIGlzIGFwcGVuZGVkIHdpdGggJ2JhcidcbiAqICAgIC8vIGFuZCBhc3NpZ25lZCB0byB0aGUgJ2JhcicgcHJvcGVydHkgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICogICAgLy8gZS5nLiA8ZGl2IGRhdGEtbW9uc3Rlci1vcHRpb24tZm9vPVwiZm9vXCI+PC9kaXY+XG4gKiAgICAnYmFyLmJheic6ICh2YWx1ZSkgPT4gdmFsdWUgKyAnYmFyJ1xuICogICAgLy8gdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tYmFyLWJheicgaXMgYXBwZW5kZWQgd2l0aCAnYmFyJ1xuICogICAgLy8gYW5kIGFzc2lnbmVkIHRvIHRoZSAnYmFyLmJheicgcHJvcGVydHkgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICogICAgLy8gZS5nLiA8ZGl2IGRhdGEtbW9uc3Rlci1vcHRpb24tYmFyLWJhej1cImZvb1wiPjwvZGl2PlxuICogfVxuICpcbiAqIEBzaW5jZSAzLjQ1LjBcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBUaGUgRE9NIGVsZW1lbnQgdG8gYmUgdXNlZCBhcyB0aGUgc291cmNlIG9mIHRoZSBhdHRyaWJ1dGVzLlxuICogQHBhcmFtIHtPYmplY3R9IG5hbWUgLSBUaGUgYXR0cmlidXRlIG9iamVjdCB0byBiZSB1c2VkIGFzIHRoZSBzb3VyY2Ugb2YgdGhlIGF0dHJpYnV0ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCB0byBiZSBpbml0aWFsaXplZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXBwaW5nIC0gQSBtYXBwaW5nIGJldHdlZW4gdGhlIGF0dHJpYnV0ZSB2YWx1ZSBhbmQgdGhlIHByb3BlcnR5IHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeCAtIFRoZSBwcmVmaXggb2YgdGhlIGF0dHJpYnV0ZXMgdG8gYmUgY29uc2lkZXJlZC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IC0gVGhlIGluaXRpYWxpemVkIG9wdGlvbnMgb2JqZWN0LlxuICogQHRoaXMgSFRNTEVsZW1lbnQgLSBUaGUgY29udGV4dCBvZiB0aGUgRE9NIGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHNldE9wdGlvbkZyb21BdHRyaWJ1dGUoXG5cdGVsZW1lbnQsXG5cdG5hbWUsXG5cdG9wdGlvbnMsXG5cdG1hcHBpbmcgPSB7fSxcblx0cHJlZml4ID0gXCJkYXRhLW1vbnN0ZXItb3B0aW9uLVwiLFxuKSB7XG5cdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHJldHVybiBvcHRpb25zO1xuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlcygpKSByZXR1cm4gb3B0aW9ucztcblxuXHRjb25zdCBrZXlNYXAgPSBleHRyYWN0S2V5cyhvcHRpb25zKTtcblx0Y29uc3QgZmluZGVyID0gbmV3IFBhdGhmaW5kZXIob3B0aW9ucyk7XG5cblx0Ly8gY2hlY2sgaWYgdGhlIGF0dHJpYnV0ZSBuYW1lIGlzIGEgdmFsaWQgb3B0aW9uLlxuXHQvLyB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBhdHRyaWJ1dGUgaXMgc2ltcGxlLiBUaGUgZGFzaCBpcyByZXBsYWNlZCBieSBhIGRvdC5cblx0Ly8gZS5nLiBkYXRhLW1vbnN0ZXItdXJsID0+IHVybFxuXHRjb25zdCBvcHRpb25OYW1lID0ga2V5TWFwLmdldChuYW1lLnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKS50b0xvd2VyQ2FzZSgpKTtcblx0aWYgKCFmaW5kZXIuZXhpc3RzKG9wdGlvbk5hbWUpKSByZXR1cm47XG5cblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShuYW1lKSkge1xuXHRcdHJldHVybiBvcHRpb25zO1xuXHR9XG5cblx0bGV0IHZhbHVlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSk7XG5cdGlmIChtYXBwaW5nLmhhc093blByb3BlcnR5KG9wdGlvbk5hbWUpICYmIGlzRnVuY3Rpb24obWFwcGluZ1tvcHRpb25OYW1lXSkpIHtcblx0XHR2YWx1ZSA9IG1hcHBpbmdbb3B0aW9uTmFtZV0odmFsdWUpO1xuXHR9XG5cblx0Y29uc3QgdHlwZU9mT3B0aW9uVmFsdWUgPSB0eXBlb2YgZmluZGVyLmdldFZpYShvcHRpb25OYW1lKTtcblx0aWYgKHR5cGVPZk9wdGlvblZhbHVlID09PSBcImJvb2xlYW5cIikge1xuXHRcdHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiO1xuXHR9IGVsc2UgaWYgKHR5cGVPZk9wdGlvblZhbHVlID09PSBcIm51bWJlclwiKSB7XG5cdFx0dmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuXHR9IGVsc2UgaWYgKHR5cGVPZk9wdGlvblZhbHVlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0dmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuXHR9IGVsc2UgaWYgKHR5cGVPZk9wdGlvblZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0dmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlKTtcblx0fVxuXG5cdGZpbmRlci5zZXRWaWEob3B0aW9uTmFtZSwgdmFsdWUpO1xuXG5cdHJldHVybiBvcHRpb25zO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzIH0gZnJvbSBcIi4vdXRpbC5tanNcIjtcbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHsgRm9ybWF0dGVyIH0gZnJvbSBcIi4uL3RleHQvZm9ybWF0dGVyLm1qc1wiO1xuXG5pbXBvcnQgeyBwYXJzZURhdGFVUkwgfSBmcm9tIFwiLi4vdHlwZXMvZGF0YXVybC5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQge1xuXHRpc0FycmF5LFxuXHRpc0Z1bmN0aW9uLFxuXHRpc0l0ZXJhYmxlLFxuXHRpc09iamVjdCxcblx0aXNTdHJpbmcsXG59IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHtcblx0dmFsaWRhdGVGdW5jdGlvbixcblx0dmFsaWRhdGVJbnN0YW5jZSxcblx0dmFsaWRhdGVPYmplY3QsXG5cdHZhbGlkYXRlU3RyaW5nLFxufSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gXCIuLi91dGlsL2Nsb25lLm1qc1wiO1xuaW1wb3J0IHtcblx0YWRkQXR0cmlidXRlVG9rZW4sXG5cdGdldExpbmtlZE9iamVjdHMsXG5cdGhhc09iamVjdExpbmssXG59IGZyb20gXCIuL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRElTQUJMRUQsXG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9PUFRJT05TLFxuXHRBVFRSSUJVVEVfSU5JVF9DQUxMQkFDSyxcblx0QVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IsXG5cdEFUVFJJQlVURV9TQ1JJUFRfSE9TVCxcblx0Y3VzdG9tRWxlbWVudFVwZGF0ZXJMaW5rU3ltYm9sLFxuXHRpbml0Q29udHJvbENhbGxiYWNrTmFtZSxcbn0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZmluZERvY3VtZW50VGVtcGxhdGUsIFRlbXBsYXRlIH0gZnJvbSBcIi4vdGVtcGxhdGUubWpzXCI7XG5pbXBvcnQgeyBhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudCB9IGZyb20gXCIuL3VwZGF0ZXIubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRnZXREb2N1bWVudFRyYW5zbGF0aW9ucyxcblx0VHJhbnNsYXRpb25zLFxufSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQgeyBnZXRTbG90dGVkRWxlbWVudHMgfSBmcm9tIFwiLi9zbG90dGVkLm1qc1wiO1xuaW1wb3J0IHsgaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyB9IGZyb20gXCIuL3V0aWwvaW5pdC1vcHRpb25zLWZyb20tYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IHNldE9wdGlvbkZyb21BdHRyaWJ1dGUgfSBmcm9tIFwiLi91dGlsL3NldC1vcHRpb24tZnJvbS1hdHRyaWJ1dGUubWpzXCI7XG5cbmV4cG9ydCB7XG5cdEN1c3RvbUVsZW1lbnQsXG5cdGluaXRNZXRob2RTeW1ib2wsXG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxuXHRnZXRTbG90dGVkRWxlbWVudHMsXG59O1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW5pdE1ldGhvZFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9AQGluaXRNZXRob2RTeW1ib2xcIik7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBhc3NlbWJsZU1ldGhvZFN5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEBhc3NlbWJsZU1ldGhvZFN5bWJvbFwiLFxuKTtcblxuLyoqXG4gKiB0aGlzIHN5bWJvbCBob2xkcyB0aGUgYXR0cmlidXRlIG9ic2VydmVyIGNhbGxiYWNrcy4gVGhlIGtleSBpcyB0aGUgYXR0cmlidXRlIG5hbWUuXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9tb25zdGVyL2RvbS9AQGF0dHJpYnV0ZU9ic2VydmVyXCIsXG4pO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBhdHRyaWJ1dGVNdXRhdGlvbk9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAbXV0YXRpb25PYnNlcnZlclwiLFxuKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc2NyaXB0SG9zdEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJzY3JpcHRIb3N0RWxlbWVudFwiKTtcblxuLyoqXG4gKiBIVE1MRWxlbWVudFxuICogQGV4dGVybmFsIEhUTUxFbGVtZW50XG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudFxuICpcbiAqIEBzdGFydHVtbCBjdXN0b21lbGVtZW50LXNlcXVlbmNlZGlhZ3JhbS5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqXG4gKiBhdXRvbnVtYmVyXG4gKlxuICogU2NyaXB0IC0+IERPTTogZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ215LWVsZW1lbnQnKVxuICogRE9NIC0+IEN1c3RvbUVsZW1lbnQ6IGNvbnN0cnVjdG9yKClcbiAqIEN1c3RvbUVsZW1lbnQgLT4gQ3VzdG9tRWxlbWVudDogW2luaXRNZXRob2RTeW1ib2xdKClcbiAqXG4gKiBDdXN0b21FbGVtZW50IC0tPiBET006IEVsZW1lbnRcbiAqIERPTSAtLT4gU2NyaXB0IDogZWxlbWVudFxuICpcbiAqXG4gKiBTY3JpcHQgLT4gRE9NOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5JykuYXBwZW5kKGVsZW1lbnQpXG4gKlxuICogRE9NIC0+IEN1c3RvbUVsZW1lbnQgOiBjb25uZWN0ZWRDYWxsYmFjaygpXG4gKlxuICogbm90ZSByaWdodCBDdXN0b21FbGVtZW50OiBpcyBvbmx5IGNhbGxlZCBhdFxcbnRoZSBmaXJzdCBjb25uZWN0aW9uXG4gKiBDdXN0b21FbGVtZW50IC0+IEN1c3RvbUVsZW1lbnQgOiBbYXNzZW1ibGVNZXRob2RTeW1ib2xdKClcbiAqXG4gKiAuLi4gLi4uXG4gKlxuICogYXV0b251bWJlclxuICpcbiAqIFNjcmlwdCAtPiBET006IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItY29uZmlybS1idXR0b24nKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW1lbnQpXG4gKiBET00gLT4gQ3VzdG9tRWxlbWVudDogZGlzY29ubmVjdGVkQ2FsbGJhY2soKVxuICpcbiAqXG4gKiBAZW5kdW1sXG4gKlxuICogQHN0YXJ0dW1sIGN1c3RvbWVsZW1lbnQtY2xhc3MucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEBlbmR1bWxcbiAqL1xuXG4vKipcbiAqIFRoZSBgQ3VzdG9tRWxlbWVudGAgY2xhc3MgcHJvdmlkZXMgYSB3YXkgdG8gZGVmaW5lIGEgbmV3IEhUTUwgZWxlbWVudCB1c2luZyB0aGUgcG93ZXIgb2YgQ3VzdG9tIEVsZW1lbnRzLlxuICpcbiAqICoqSU1QT1JUQU5UOioqIEFmdGVyIGRlZmluaW5nIGEgYEN1c3RvbUVsZW1lbnRgLCB0aGUgYHJlZ2lzdGVyQ3VzdG9tRWxlbWVudGAgbWV0aG9kIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBjbGFzcyBuYW1lXG4gKiB0byBtYWtlIHRoZSB0YWcgZGVmaW5lZCB2aWEgdGhlIGBnZXRUYWdgIG1ldGhvZCBrbm93biB0byB0aGUgRE9NLlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBvYmplY3QgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpYCBmdW5jdGlvbi5cbiAqXG4gKiAjIyBJbnRlcmFjdGlvblxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvY3VzdG9tZWxlbWVudC1zZXF1ZW5jZWRpYWdyYW0ucG5nXCI+XG4gKlxuICogIyMgU3R5bGluZ1xuICpcbiAqIFRvIGRpc3BsYXkgY3VzdG9tIGVsZW1lbnRzIG9wdGltYWxseSwgdGhlIGA6ZGVmaW5lZGAgcHNldWRvLWNsYXNzIGNhbiBiZSB1c2VkLiBUbyBwcmV2ZW50IGN1c3RvbSBlbGVtZW50cyBmcm9tIGJlaW5nIGRpc3BsYXllZCBhbmQgZmxpY2tlcmluZyB1bnRpbCB0aGUgY29udHJvbCBpcyByZWdpc3RlcmVkLFxuICogaXQgaXMgcmVjb21tZW5kZWQgdG8gY3JlYXRlIGEgQ1NTIGRpcmVjdGl2ZS5cbiAqXG4gKiBJbiB0aGUgc2ltcGxlc3QgY2FzZSwgeW91IGNhbiBzaW1wbHkgaGlkZSB0aGUgY29udHJvbDpcbiAqXG4gKiBgYGBodG1sXG4gKiA8c3R5bGU+XG4gKiBteS1jdXN0b20tZWxlbWVudDpub3QoOmRlZmluZWQpIHtcbiAqICAgICBkaXNwbGF5OiBub25lO1xuICogfVxuICpcbiAqIG15LWN1c3RvbS1lbGVtZW50OmRlZmluZWQge1xuICogICAgIGRpc3BsYXk6IGZsZXg7XG4gKiB9XG4gKiA8L3N0eWxlPlxuICogYGBgXG4gKlxuICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBkaXNwbGF5IGEgbG9hZGVyOlxuICpcbiAqIGBgYGNzc1xuICogbXktY3VzdG9tLWVsZW1lbnQ6bm90KDpkZWZpbmVkKSB7XG4gKiAgICAgZGlzcGxheTogZmxleDtcbiAqICAgICBib3gtc2hhZG93OiAwIDRweCAxMHB4IDAgcmdiYSgzMywgMzMsIDMzLCAwLjE1KTtcbiAqICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gKiAgICAgaGVpZ2h0OiAyMDBweDtcbiAqICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gKiAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAqIH1cbiAqXG4gKiBteS1jdXN0b20tZWxlbWVudDpub3QoOmRlZmluZWQpOjpiZWZvcmUge1xuICogICAgIGNvbnRlbnQ6ICcnO1xuICogICAgIGRpc3BsYXk6IGJsb2NrO1xuICogICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAqICAgICBsZWZ0OiAtMTUwcHg7XG4gKiAgICAgdG9wOiAwO1xuICogICAgIGhlaWdodDogMTAwJTtcbiAqICAgICB3aWR0aDogMTUwcHg7XG4gKiAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCB0cmFuc3BhcmVudCAwJSwgI0U4RThFOCA1MCUsIHRyYW5zcGFyZW50IDEwMCUpO1xuICogICAgIGFuaW1hdGlvbjogbG9hZCAxcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSkgaW5maW5pdGU7XG4gKiB9XG4gKlxuICogQGtleWZyYW1lcyBsb2FkIHtcbiAqICAgICBmcm9tIHtcbiAqICAgICAgICAgbGVmdDogLTE1MHB4O1xuICogICAgIH1cbiAqICAgICB0byB7XG4gKiAgICAgICAgIGxlZnQ6IDEwMCU7XG4gKiAgICAgfVxuICogfVxuICpcbiAqIG15LWN1c3RvbS1lbGVtZW50OmRlZmluZWQge1xuICogICAgIGRpc3BsYXk6IGZsZXg7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IEN1c3RvbSBFbGVtZW50cyBjYW4gYmUgZm91bmQgaW4gdGhlIFtNRE4gV2ViIERvY3NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1dlYl9Db21wb25lbnRzL1VzaW5nX2N1c3RvbV9lbGVtZW50cykuXG4gKiBBbmQgaW4gdGhlIFtIVE1MIFN0YW5kYXJkXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jdXN0b20tZWxlbWVudHMuaHRtbCNjdXN0b20tZWxlbWVudHMpIG9yIGluIHRoZSBbV0hBVFdHIFdpa2ldKGh0dHBzOi8vd2lraS53aGF0d2cub3JnL3dpa2kvQ3VzdG9tX0VsZW1lbnRzKS5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvZG9tL3RoZW1lLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS43LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBleHRlbmRzIGV4dGVybmFsOkhUTUxFbGVtZW50XG4gKiBAc3VtbWFyeSBBIGJhc2UgY2xhc3MgZm9yIEhUTUw1IGN1c3RvbSBjb250cm9scy5cbiAqL1xuY2xhc3MgQ3VzdG9tRWxlbWVudCBleHRlbmRzIEhUTUxFbGVtZW50IHtcblx0LyoqXG5cdCAqIEEgbmV3IG9iamVjdCBpcyBjcmVhdGVkLiBGaXJzdCB0aGUgYGluaXRPcHRpb25zYCBtZXRob2QgaXMgY2FsbGVkLiBIZXJlIHRoZVxuXHQgKiBvcHRpb25zIGNhbiBiZSBkZWZpbmVkIGluIGRlcml2ZWQgY2xhc3Nlcy4gU3Vic2VxdWVudGx5LCB0aGUgc2hhZG93Um9vdCBpcyBpbml0aWFsaXplZC5cblx0ICpcblx0ICogSU1QT1JUQU5UOiBDdXN0b21Db250cm9scyBpbnN0YW5jZXMgYXJlIG5vdCBjcmVhdGVkIHZpYSB0aGUgY29uc3RydWN0b3IsIGJ1dCBlaXRoZXIgdmlhIGEgdGFnIGluIHRoZSBIVE1MIG9yIHZpYSA8Y29kZT5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCk8L2NvZGU+LlxuXHQgKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9wdGlvbnMgYXR0cmlidXRlIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBqc29uIGRlZmluaXRpb24uXG5cdCAqIEBzaW5jZSAxLjcuMFxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdID0ge307XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSBuZXcgUHJveHlPYnNlcnZlcih7XG5cdFx0XHRvcHRpb25zOiBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKHRoaXMsIGV4dGVuZCh7fSwgdGhpcy5kZWZhdWx0cykpLFxuXHRcdH0pO1xuXHRcdHRoaXNbaW5pdE1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0T3B0aW9uT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0XHR0aGlzW3NjcmlwdEhvc3RFbGVtZW50U3ltYm9sXSA9IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL2N1c3RvbS1lbGVtZW50QEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHdoaWNoIGF0dHJpYnV0ZXMgYXJlIHRvIGJlXG5cdCAqIG1vbml0b3JlZCBieSBgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKClgLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIG1ldGhvZCBpcyBzdGF0aWMuXG5cdCAqIFRoZXJlZm9yZSwgdGhlIGBvYnNlcnZlZEF0dHJpYnV0ZXNgIHByb3BlcnR5IGNhbm5vdCBiZSBjaGFuZ2VkIGR1cmluZyBydW50aW1lLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmdbXX1cblx0ICogQHNpbmNlIDEuMTUuMFxuXHQgKi9cblx0c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBhdHRyaWJ1dGVcblx0ICogQHBhcmFtIGNhbGxiYWNrXG5cdCAqIEByZXR1cm5zIHtNb25zdGVyLkRPTS5DdXN0b21FbGVtZW50fVxuXHQgKi9cblx0YWRkQXR0cmlidXRlT2JzZXJ2ZXIoYXR0cmlidXRlLCBjYWxsYmFjaykge1xuXHRcdHZhbGlkYXRlRnVuY3Rpb24oY2FsbGJhY2spO1xuXHRcdHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW2F0dHJpYnV0ZV0gPSBjYWxsYmFjaztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gYXR0cmlidXRlXG5cdCAqIEByZXR1cm5zIHtNb25zdGVyLkRPTS5DdXN0b21FbGVtZW50fVxuXHQgKi9cblx0cmVtb3ZlQXR0cmlidXRlT2JzZXJ2ZXIoYXR0cmlidXRlKSB7XG5cdFx0ZGVsZXRlIHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW2F0dHJpYnV0ZV07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGBkZWZhdWx0c2AgcHJvcGVydHkgZGVmaW5lcyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIGEgY29udHJvbC4gSWYgeW91IHdhbnQgdG8gb3ZlcnJpZGUgdGhlc2UsXG5cdCAqIHlvdSBjYW4gdXNlIHZhcmlvdXMgbWV0aG9kcywgd2hpY2ggYXJlIGRlc2NyaWJlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhdmFpbGFibGUgYXRcblx0ICoge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZ2VuZG9jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9LlxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBhcmUgbGlzdGVkIGJlbG93OlxuXHQgKlxuXHQgKiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzaGFkb3dSb290IGNhbiBiZSBmb3VuZCBpbiB0aGUgW01ETiBXZWIgRG9jc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvYXR0YWNoU2hhZG93KSxcblx0ICogaW4gdGhlIFtIVE1MIFN0YW5kYXJkXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jdXN0b20tZWxlbWVudHMuaHRtbCNjdXN0b20tZWxlbWVudHMpIG9yIGluIHRoZSBbV0hBVFdHIFdpa2ldKGh0dHBzOi8vd2lraS53aGF0d2cub3JnL3dpa2kvQ3VzdG9tX0VsZW1lbnRzKS5cblx0ICpcblx0ICogTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGVtcGxhdGUgZWxlbWVudCBjYW4gYmUgZm91bmQgaW4gdGhlIFtNRE4gV2ViIERvY3NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZW1wbGF0ZSkuXG5cdCAqXG5cdCAqIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNsb3QgZWxlbWVudCBjYW4gYmUgZm91bmQgaW4gdGhlIFtNRE4gV2ViIERvY3NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zbG90KS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBkaXNhYmxlZD1mYWxzZSBTcGVjaWZpZXMgd2hldGhlciB0aGUgY29udHJvbCBpcyBkaXNhYmxlZC4gV2hlbiBwcmVzZW50LCBpdCBtYWtlcyB0aGUgZWxlbWVudCBub24tbXV0YWJsZSwgbm9uLWZvY3VzYWJsZSwgYW5kIG5vbi1zdWJtaXR0YWJsZSB3aXRoIHRoZSBmb3JtLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gc2hhZG93TW9kZT1vcGVuIFNwZWNpZmllcyB0aGUgbW9kZSBvZiB0aGUgc2hhZG93IHJvb3QuIFdoZW4gc2V0IHRvIGBvcGVuYCwgZWxlbWVudHMgaW4gdGhlIHNoYWRvdyByb290IGFyZSBhY2Nlc3NpYmxlIGZyb20gSmF2YVNjcmlwdCBvdXRzaWRlIHRoZSByb290LCB3aGlsZSBzZXR0aW5nIGl0IHRvIGBjbG9zZWRgIGRlbmllcyBhY2Nlc3MgdG8gdGhlIHJvb3QncyBub2RlcyBmcm9tIEphdmFTY3JpcHQgb3V0c2lkZSBpdC5cblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBkZWxlZ2F0ZXNGb2N1cz10cnVlIFNwZWNpZmllcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGNvbnRyb2wgd2l0aCByZXNwZWN0IHRvIGZvY3VzYWJpbGl0eS4gV2hlbiBzZXQgdG8gYHRydWVgLCBpdCBtaXRpZ2F0ZXMgY3VzdG9tIGVsZW1lbnQgaXNzdWVzIGFyb3VuZCBmb2N1c2FiaWxpdHkuIFdoZW4gYSBub24tZm9jdXNhYmxlIHBhcnQgb2YgdGhlIHNoYWRvdyBET00gaXMgY2xpY2tlZCwgdGhlIGZpcnN0IGZvY3VzYWJsZSBwYXJ0IGlzIGdpdmVuIGZvY3VzLCBhbmQgdGhlIHNoYWRvdyBob3N0IGlzIGdpdmVuIGFueSBhdmFpbGFibGUgOmZvY3VzIHN0eWxpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgU3BlY2lmaWVzIHRoZSB0ZW1wbGF0ZXMgdXNlZCBieSB0aGUgY29udHJvbC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluPXVuZGVmaW5lZCBTcGVjaWZpZXMgdGhlIG1haW4gdGVtcGxhdGUgdXNlZCBieSB0aGUgY29udHJvbC5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlTWFwcGluZyBTcGVjaWZpZXMgdGhlIG1hcHBpbmcgb2YgdGVtcGxhdGVzLlxuXHQgKiBAc2luY2UgMS44LjBcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0ZGlzYWJsZWQ6IGZhbHNlLFxuXHRcdFx0c2hhZG93TW9kZTogXCJvcGVuXCIsXG5cdFx0XHRkZWxlZ2F0ZXNGb2N1czogdHJ1ZSxcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiB1bmRlZmluZWQsXG5cdFx0XHR9LFxuXHRcdFx0dGVtcGxhdGVNYXBwaW5nOiB7fSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIGxhYmVscyBvZiB0aGUgZWxlbWVudC5cblx0ICogVGhlIGxhYmVscyBhcmUgZGVmaW5lZCBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG5cdCAqIFRoZSBrZXkgb2YgdGhlIGxhYmVsIGlzIHVzZWQgdG8gcmV0cmlldmUgdGhlIHRyYW5zbGF0aW9uIGZyb20gdGhlIGRvY3VtZW50LlxuXHQgKiBJZiB0aGUgdHJhbnNsYXRpb24gaXMgZGlmZmVyZW50IGZyb20gdGhlIGxhYmVsLCB0aGUgbGFiZWwgaXMgdXBkYXRlZC5cblx0ICpcblx0ICogQmVmb3JlIHlvdSBjYW4gdXNlIHRoaXMgbWV0aG9kLCB5b3UgbXVzdCBoYXZlIGxvYWRlZCB0aGUgdHJhbnNsYXRpb25zLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5ET00uQ3VzdG9tRWxlbWVudH1cblx0ICogQHRocm93cyB7RXJyb3J9ICBDYW5ub3QgZmluZCBlbGVtZW50IHdpdGggdHJhbnNsYXRpb25zLiBBZGQgYSB0cmFuc2xhdGlvbnMgb2JqZWN0IHRvIHRoZSBkb2N1bWVudC5cblx0ICovXG5cdHVwZGF0ZUkxOG4oKSB7XG5cdFx0Y29uc3QgdHJhbnNsYXRpb25zID0gZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoKTtcblx0XHRpZiAoIXRyYW5zbGF0aW9ucykge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGFiZWxzID0gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHNcIik7XG5cdFx0aWYgKCEoaXNPYmplY3QobGFiZWxzKSB8fCBpc0l0ZXJhYmxlKGxhYmVscykpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGtleSBpbiBsYWJlbHMpIHtcblx0XHRcdGNvbnN0IGRlZiA9IGxhYmVsc1trZXldO1xuXG5cdFx0XHRpZiAoaXNTdHJpbmcoZGVmKSkge1xuXHRcdFx0XHRjb25zdCB0ZXh0ID0gdHJhbnNsYXRpb25zLmdldFRleHQoa2V5LCBkZWYpO1xuXHRcdFx0XHRpZiAodGV4dCAhPT0gZGVmKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYGxhYmVscy4ke2tleX1gLCB0ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH0gZWxzZSBpZiAoaXNPYmplY3QoZGVmKSkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGsgaW4gZGVmKSB7XG5cdFx0XHRcdFx0Y29uc3QgZCA9IGRlZltrXTtcblxuXHRcdFx0XHRcdGNvbnN0IHRleHQgPSB0cmFuc2xhdGlvbnMuZ2V0UGx1cmFsUnVsZVRleHQoa2V5LCBrLCBkKTtcblx0XHRcdFx0XHRpZiAoIWlzU3RyaW5nKHRleHQpKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxhYmVscyBkZWZpbml0aW9uXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodGV4dCAhPT0gZCkge1xuXHRcdFx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYGxhYmVscy4ke2tleX0uJHtrfWAsIHRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsYWJlbHMgZGVmaW5pdGlvblwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGBnZXRUYWcoKWAgbWV0aG9kIHJldHVybnMgdGhlIHRhZyBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VzdG9tIGVsZW1lbnQuIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBvdmVyd3JpdHRlblxuXHQgKiBieSB0aGUgZGVyaXZlZCBjbGFzcy5cblx0ICpcblx0ICogTm90ZSB0aGF0IHRoZXJlIGlzIG5vIGNoZWNrIG9uIHRoZSBuYW1lIG9mIHRoZSB0YWcgaW4gdGhpcyBjbGFzcy4gSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mXG5cdCAqIHRoZSBkZXZlbG9wZXIgdG8gYXNzaWduIGFuIGFwcHJvcHJpYXRlIHRhZyBuYW1lLiBJZiB0aGUgbmFtZSBpcyBub3QgdmFsaWQsIHRoZVxuXHQgKiBgcmVnaXN0ZXJDdXN0b21FbGVtZW50KClgIG1ldGhvZCB3aWxsIGlzc3VlIGFuIGVycm9yLlxuXHQgKlxuXHQgKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI3ZhbGlkLWN1c3RvbS1lbGVtZW50LW5hbWVcblx0ICogQHRocm93cyB7RXJyb3J9IFRoaXMgbWV0aG9kIG11c3QgYmUgb3ZlcnJpZGRlbiBieSB0aGUgZGVyaXZlZCBjbGFzcy5cblx0ICogQHJldHVybiB7c3RyaW5nfSBUaGUgdGFnIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXN0b20gZWxlbWVudC5cblx0ICogQHNpbmNlIDEuNy4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFwiVGhlIG1ldGhvZCBgZ2V0VGFnKClgIG11c3QgYmUgb3ZlcnJpZGRlbiBieSB0aGUgZGVyaXZlZCBjbGFzcy5cIixcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgZ2V0Q1NTU3R5bGVTaGVldCgpYCBtZXRob2QgcmV0dXJucyBhIGBDU1NTdHlsZVNoZWV0YCBvYmplY3QgdGhhdCBkZWZpbmVzIHRoZSBzdHlsZXMgZm9yIHRoZSBjdXN0b20gZWxlbWVudC5cblx0ICogSWYgdGhlIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIGBDU1NTdHlsZVNoZWV0YCBjb25zdHJ1Y3RvciwgdGhlbiBhbiBvYmplY3QgY2FuIGJlIGJ1aWx0IHVzaW5nIHRoZSBwcm92aWRlZCBkZXRvdXIuXG5cdCAqXG5cdCAqIElmIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLCB0aGVuIHRoZSBzaGFkb3cgcm9vdCBkb2VzIG5vdCByZWNlaXZlIGEgc3R5bGVzaGVldC5cblx0ICpcblx0ICogRXhhbXBsZSB1c2FnZTpcblx0ICpcblx0ICogYGBganNcblx0ICogc3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdCAqICAgICBjb25zdCBzaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cdCAqICAgICBzaGVldC5yZXBsYWNlU3luYyhcInAgeyBjb2xvcjogcmVkOyB9XCIpO1xuXHQgKiAgICAgcmV0dXJuIHNoZWV0O1xuXHQgKiB9XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBJZiB0aGUgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYENTU1N0eWxlU2hlZXRgIGNvbnN0cnVjdG9yLFxuXHQgKiB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIHdvcmthcm91bmQgdG8gY3JlYXRlIHRoZSBzdHlsZXNoZWV0OlxuXHQgKlxuXHQgKiBgYGBqc1xuXHQgKiBjb25zdCBkb2MgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoJ3RpdGxlJyk7XG5cdCAqIGxldCBzdHlsZSA9IGRvYy5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG5cdCAqIHN0eWxlLmlubmVySFRNTCA9IFwicCB7IGNvbG9yOiByZWQ7IH1cIjtcblx0ICogc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIikpO1xuXHQgKiBkb2MuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdCAqIHJldHVybiBkb2Muc3R5bGVTaGVldHNbMF07XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0fENTU1N0eWxlU2hlZXRbXXxzdHJpbmd8dW5kZWZpbmVkfSBBIGBDU1NTdHlsZVNoZWV0YCBvYmplY3Qgb3IgYW4gYXJyYXkgb2Ygc3VjaCBvYmplY3RzIHRoYXQgZGVmaW5lIHRoZSBzdHlsZXMgZm9yIHRoZSBjdXN0b20gZWxlbWVudCwgb3IgYHVuZGVmaW5lZGAgaWYgbm8gc3R5bGVzaGVldCBzaG91bGQgYmUgYXBwbGllZC5cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogYXR0YWNoIGEgbmV3IG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtDdXN0b21FbGVtZW50fVxuXHQgKi9cblx0YXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogZGV0YWNoIGEgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybnMge0N1c3RvbUVsZW1lbnR9XG5cdCAqL1xuXHRkZXRhY2hPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmRldGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJucyB7UHJveHlPYnNlcnZlcn1cblx0ICovXG5cdGNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0uY29udGFpbnNPYnNlcnZlcihvYnNlcnZlcik7XG5cdH1cblxuXHQvKipcblx0ICogbmVzdGVkIG9wdGlvbnMgY2FuIGJlIHNwZWNpZmllZCBieSBwYXRoIGBhLmIuY2Bcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcblx0ICogQHBhcmFtIHsqfSBkZWZhdWx0VmFsdWVcblx0ICogQHJldHVybiB7Kn1cblx0ICogQHNpbmNlIDEuMTAuMFxuXHQgKi9cblx0Z2V0T3B0aW9uKHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuXHRcdGxldCB2YWx1ZTtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YWx1ZSA9IG5ldyBQYXRoZmluZGVyKFxuXHRcdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXSxcblx0XHRcdCkuZ2V0VmlhKHBhdGgpO1xuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IG9wdGlvbiBhbmQgaW5mb3JtIGVsZW1lbnRzXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7Q3VzdG9tRWxlbWVudH1cblx0ICogQHNpbmNlIDEuMTQuMFxuXHQgKi9cblx0c2V0T3B0aW9uKHBhdGgsIHZhbHVlKSB7XG5cdFx0bmV3IFBhdGhmaW5kZXIodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpW1wib3B0aW9uc1wiXSkuc2V0VmlhKFxuXHRcdFx0cGF0aCxcblx0XHRcdHZhbHVlLFxuXHRcdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHNpbmNlIDEuMTUuMFxuXHQgKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IG9wdGlvbnNcblx0ICogQHJldHVybiB7Q3VzdG9tRWxlbWVudH1cblx0ICovXG5cdHNldE9wdGlvbnMob3B0aW9ucykge1xuXHRcdGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuXHRcdFx0b3B0aW9ucyA9IHBhcnNlT3B0aW9uc0pTT04uY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0XHR9XG5cdFx0ZXh0ZW5kKFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpW1wib3B0aW9uc1wiXSxcblx0XHRcdHRoaXMuZGVmYXVsdHMsXG5cdFx0XHRvcHRpb25zLFxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBJcyBjYWxsZWQgb25jZSB2aWEgdGhlIGNvbnN0cnVjdG9yXG5cdCAqXG5cdCAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG5cdCAqIEBzaW5jZSAxLjguMFxuXHQgKi9cblx0W2luaXRNZXRob2RTeW1ib2xdKCkge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmNlIHdoZW4gdGhlIG9iamVjdCBpcyBpbmNsdWRlZCBpbiB0aGUgRE9NIGZvciB0aGUgZmlyc3QgdGltZS4gSXQgcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBhY3Rpb25zOlxuXHQgKiAxLiBFeHRyYWN0cyB0aGUgb3B0aW9ucyBmcm9tIHRoZSBhdHRyaWJ1dGVzIGFuZCB0aGUgc2NyaXB0IHRhZyBvZiB0aGUgZWxlbWVudCBhbmQgc2V0cyB0aGVtLlxuXHQgKiAyLiBJbml0aWFsaXplcyB0aGUgc2hhZG93IHJvb3QgYW5kIGl0cyBDU1Mgc3R5bGVzaGVldCAoaWYgc3BlY2lmaWVkKS5cblx0ICogMy4gSW5pdGlhbGl6ZXMgdGhlIEhUTUwgY29udGVudCBvZiB0aGUgZWxlbWVudC5cblx0ICogNC4gSW5pdGlhbGl6ZXMgdGhlIGN1c3RvbSBlbGVtZW50cyBpbnNpZGUgdGhlIHNoYWRvdyByb290IGFuZCB0aGUgc2xvdHRlZCBlbGVtZW50cy5cblx0ICogNS4gQXR0YWNoZXMgYSBtdXRhdGlvbiBvYnNlcnZlciB0byBvYnNlcnZlIGNoYW5nZXMgdG8gdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9IC0gVGhlIHVwZGF0ZWQgY3VzdG9tIGVsZW1lbnQuXG5cdCAqIEBzaW5jZSAxLjguMFxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRsZXQgZWxlbWVudHM7XG5cdFx0bGV0IG5vZGVMaXN0O1xuXG5cdFx0Ly8gRXh0cmFjdCBvcHRpb25zIGZyb20gYXR0cmlidXRlcyBhbmQgc2V0IHRoZW1cblx0XHRjb25zdCBBdHRyaWJ1dGVPcHRpb25zID0gZ2V0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzLmNhbGwodGhpcyk7XG5cdFx0aWYgKFxuXHRcdFx0aXNPYmplY3QoQXR0cmlidXRlT3B0aW9ucykgJiZcblx0XHRcdE9iamVjdC5rZXlzKEF0dHJpYnV0ZU9wdGlvbnMpLmxlbmd0aCA+IDBcblx0XHQpIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9ucyhBdHRyaWJ1dGVPcHRpb25zKTtcblx0XHR9XG5cblx0XHQvLyBFeHRyYWN0IG9wdGlvbnMgZnJvbSBzY3JpcHQgdGFnIGFuZCBzZXQgdGhlbVxuXHRcdGNvbnN0IFNjcmlwdE9wdGlvbnMgPSBnZXRPcHRpb25zRnJvbVNjcmlwdFRhZy5jYWxsKHRoaXMpO1xuXHRcdGlmIChpc09iamVjdChTY3JpcHRPcHRpb25zKSAmJiBPYmplY3Qua2V5cyhTY3JpcHRPcHRpb25zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLnNldE9wdGlvbnMoU2NyaXB0T3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc2hhZG93IHJvb3QgYW5kIGl0cyBDU1Mgc3R5bGVzaGVldFxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcInNoYWRvd01vZGVcIiwgZmFsc2UpICE9PSBmYWxzZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aW5pdFNoYWRvd1Jvb3QuY2FsbCh0aGlzKTtcblx0XHRcdFx0ZWxlbWVudHMgPSB0aGlzLnNoYWRvd1Jvb3QuY2hpbGROb2Rlcztcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aW5pdENTU1N0eWxlc2hlZXQuY2FsbCh0aGlzKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgZWxlbWVudHMgYXJlIG5vdCBmb3VuZCBpbnNpZGUgdGhlIHNoYWRvdyByb290LCBpbml0aWFsaXplIHRoZSBIVE1MIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnRcblx0XHRpZiAoIShlbGVtZW50cyBpbnN0YW5jZW9mIE5vZGVMaXN0KSkge1xuXHRcdFx0aW5pdEh0bWxDb250ZW50LmNhbGwodGhpcyk7XG5cdFx0XHRlbGVtZW50cyA9IHRoaXMuY2hpbGROb2Rlcztcblx0XHR9XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBjdXN0b20gZWxlbWVudHMgaW5zaWRlIHRoZSBzaGFkb3cgcm9vdCBhbmQgdGhlIHNsb3R0ZWQgZWxlbWVudHNcblx0XHRpbml0RnJvbUNhbGxiYWNrSG9zdC5jYWxsKHRoaXMpO1xuXHRcdHRyeSB7XG5cdFx0XHRub2RlTGlzdCA9IG5ldyBTZXQoWy4uLmVsZW1lbnRzLCAuLi5nZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzKV0pO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdG5vZGVMaXN0ID0gZWxlbWVudHM7XG5cdFx0fVxuXHRcdGFkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50LmNhbGwoXG5cdFx0XHR0aGlzLFxuXHRcdFx0bm9kZUxpc3QsXG5cdFx0XHRjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wsXG5cdFx0XHRjbG9uZSh0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXSksXG5cdFx0KTtcblxuXHRcdC8vIEF0dGFjaCBhIG11dGF0aW9uIG9ic2VydmVyIHRvIG9ic2VydmUgY2hhbmdlcyB0byB0aGUgYXR0cmlidXRlcyBvZiB0aGUgZWxlbWVudFxuXHRcdGF0dGFjaEF0dHJpYnV0ZUNoYW5nZU11dGF0aW9uT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBlbGVtZW50IGlzIGluc2VydGVkIGludG8gdGhlIERPTS4gSXQgY2hlY2tzIGlmIHRoZSBjdXN0b20gZWxlbWVudFxuXHQgKiBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkIGFuZCBpZiBub3QsIGNhbGxzIHRoZSBhc3NlbWJsZU1ldGhvZCB0byBpbml0aWFsaXplIGl0LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKiBAc2luY2UgMS43LjBcblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9jb25uZWN0ZWRDYWxsYmFja1xuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkXG5cdFx0aWYgKCFoYXNPYmplY3RMaW5rKHRoaXMsIGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCkpIHtcblx0XHRcdC8vIElmIG5vdCwgY2FsbCB0aGUgYXNzZW1ibGVNZXRob2QgdG8gaW5pdGlhbGl6ZSB0aGUgb2JqZWN0XG5cdFx0XHR0aGlzW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgZXZlcnkgdGltZSB0aGUgZWxlbWVudCBpcyByZW1vdmVkIGZyb20gdGhlIERPTS4gVXNlZnVsIGZvciBydW5uaW5nIGNsZWFuIHVwIGNvZGUuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqIEBzaW5jZSAxLjcuMFxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7fVxuXG5cdC8qKlxuXHQgKiBUaGUgY3VzdG9tIGVsZW1lbnQgaGFzIGJlZW4gbW92ZWQgaW50byBhIG5ldyBkb2N1bWVudCAoZS5nLiBzb21lb25lIGNhbGxlZCBkb2N1bWVudC5hZG9wdE5vZGUoZWwpKS5cblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICogQHNpbmNlIDEuNy4wXG5cdCAqL1xuXHRhZG9wdGVkQ2FsbGJhY2soKSB7fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgd2hlbiBhbiBvYnNlcnZlZCBhdHRyaWJ1dGUgaGFzIGJlZW4gYWRkZWQsIHJlbW92ZWQsIHVwZGF0ZWQsIG9yIHJlcGxhY2VkLiBBbHNvIGNhbGxlZCBmb3IgaW5pdGlhbFxuXHQgKiB2YWx1ZXMgd2hlbiBhbiBlbGVtZW50IGlzIGNyZWF0ZWQgYnkgdGhlIHBhcnNlciwgb3IgdXBncmFkZWQuIE5vdGU6IG9ubHkgYXR0cmlidXRlcyBsaXN0ZWQgaW4gdGhlIG9ic2VydmVkQXR0cmlidXRlc1xuXHQgKiBwcm9wZXJ0eSB3aWxsIHJlY2VpdmUgdGhpcyBjYWxsYmFjay5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGF0dHJOYW1lXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBvbGRWYWxcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5ld1ZhbFxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKiBAc2luY2UgMS4xNS4wXG5cdCAqL1xuXHRhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soYXR0ck5hbWUsIG9sZFZhbCwgbmV3VmFsKSB7XG5cdFx0aWYgKGF0dHJOYW1lLnN0YXJ0c1dpdGgoXCJkYXRhLW1vbnN0ZXItb3B0aW9uLVwiKSkge1xuXHRcdFx0c2V0T3B0aW9uRnJvbUF0dHJpYnV0ZShcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0YXR0ck5hbWUsXG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKVtcIm9wdGlvbnNcIl0sXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNhbGxiYWNrID0gdGhpc1thdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF0/LlthdHRyTmFtZV07XG5cdFx0aWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjYWxsYmFjay5jYWxsKHRoaXMsIG5ld1ZhbCwgb2xkVmFsKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG5cdCAqIEBzaW5jZSAxLjE5LjBcblx0ICovXG5cdGhhc05vZGUobm9kZSkge1xuXHRcdGlmIChjb250YWluQ2hpbGROb2RlLmNhbGwodGhpcywgdmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICghKHRoaXMuc2hhZG93Um9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbnRhaW5DaGlsZE5vZGUuY2FsbCh0aGlzLnNoYWRvd1Jvb3QsIG5vZGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxzIGEgY2FsbGJhY2sgZnVuY3Rpb24gaWYgaXQgZXhpc3RzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuXHQgKiBAcGFyYW0geyp9IGFyZ3Ncblx0ICogQHJldHVybnMgeyp9XG5cdCAqL1xuXHRjYWxsQ2FsbGJhY2sobmFtZSwgYXJncykge1xuXHRcdHJldHVybiBjYWxsQ29udHJvbENhbGxiYWNrLmNhbGwodGhpcywgbmFtZSwgLi4uYXJncyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2FsbEJhY2tGdW5jdGlvbk5hbWVcbiAqIEBwYXJhbSB7Kn0gIGFyZ3NcbiAqIEByZXR1cm4ge2FueX1cbiAqL1xuZnVuY3Rpb24gY2FsbENvbnRyb2xDYWxsYmFjayhjYWxsQmFja0Z1bmN0aW9uTmFtZSwgLi4uYXJncykge1xuXHRpZiAoIWlzU3RyaW5nKGNhbGxCYWNrRnVuY3Rpb25OYW1lKSB8fCBjYWxsQmFja0Z1bmN0aW9uTmFtZSA9PT0gXCJcIikge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmIChjYWxsQmFja0Z1bmN0aW9uTmFtZSBpbiB0aGlzKSB7XG5cdFx0cmV0dXJuIHRoaXNbY2FsbEJhY2tGdW5jdGlvbk5hbWVdKHRoaXMsIC4uLmFyZ3MpO1xuXHR9XG5cblx0aWYgKCF0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfU0NSSVBUX0hPU1QpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXNbc2NyaXB0SG9zdEVsZW1lbnRTeW1ib2xdLmxlbmd0aCA9PT0gMCkge1xuXHRcdGNvbnN0IHRhcmdldElkID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1NDUklQVF9IT1NUKTtcblx0XHRpZiAoIXRhcmdldElkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGlzdCA9IHRhcmdldElkLnNwbGl0KFwiLFwiKTtcblx0XHRmb3IgKGNvbnN0IGlkIG9mIGxpc3QpIHtcblx0XHRcdGNvbnN0IGhvc3QgPSBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHModGhpcywgdGFyZ2V0SWQpO1xuXHRcdFx0aWYgKCEoaG9zdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0dGhpc1tzY3JpcHRIb3N0RWxlbWVudFN5bWJvbF0ucHVzaChob3N0KTtcblx0XHR9XG5cdH1cblxuXHRmb3IgKGNvbnN0IGhvc3Qgb2YgdGhpc1tzY3JpcHRIb3N0RWxlbWVudFN5bWJvbF0pIHtcblx0XHRpZiAoY2FsbEJhY2tGdW5jdGlvbk5hbWUgaW4gaG9zdCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIGhvc3RbY2FsbEJhY2tGdW5jdGlvbk5hbWVdKHRoaXMsIC4uLmFyZ3MpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdHRoaXMsXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRgY2FsbGJhY2sgJHtjYWxsQmFja0Z1bmN0aW9uTmFtZX0gbm90IGZvdW5kYCxcblx0KTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyB0aGUgY3VzdG9tIGVsZW1lbnQgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgYXR0YWNoZWQgdG8gdGhlIERPTS4gSXQgY2hlY2tzIGlmIHRoZVxuICogYGRhdGEtbW9uc3Rlci1vcHRpb24tY2FsbGJhY2tgIGF0dHJpYnV0ZSBpcyBzZXQsIGFuZCBpZiBub3QsIHRoZSBkZWZhdWx0IGNhbGxiYWNrXG4gKiBgaW5pdEN1c3RvbUNvbnRyb2xDYWxsYmFja2AgaXMgY2FsbGVkLiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgc2VhcmNoZWQgZm9yIGluIHRoaXNcbiAqIGVsZW1lbnQgYW5kIGluIHRoZSBob3N0IGVsZW1lbnQuIElmIHRoZSBjYWxsYmFjayBpcyBmb3VuZCwgaXQgaXMgY2FsbGVkIHdpdGggdGhlIGVsZW1lbnRcbiAqIGFzIGEgcGFyYW1ldGVyLlxuICpcbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS9kZWZpbmUjcHJvdmlkaW5nX2FfY29uc3RydWN0aW9uX2NhbGxiYWNrXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuZnVuY3Rpb24gaW5pdEZyb21DYWxsYmFja0hvc3QoKSB7XG5cdC8vIFNldCB0aGUgZGVmYXVsdCBjYWxsYmFjayBmdW5jdGlvbiBuYW1lXG5cdGxldCBjYWxsQmFja0Z1bmN0aW9uTmFtZSA9IGluaXRDb250cm9sQ2FsbGJhY2tOYW1lO1xuXG5cdC8vIElmIHRoZSBgZGF0YS1tb25zdGVyLW9wdGlvbi1jYWxsYmFja2AgYXR0cmlidXRlIGlzIHNldCwgdXNlIGl0cyB2YWx1ZSBhcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gbmFtZVxuXHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0lOSVRfQ0FMTEJBQ0spKSB7XG5cdFx0Y2FsbEJhY2tGdW5jdGlvbk5hbWUgPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfSU5JVF9DQUxMQkFDSyk7XG5cdH1cblxuXHQvLyBDYWxsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIHRoZSBlbGVtZW50IGFzIGEgcGFyYW1ldGVyIGlmIGl0IGV4aXN0c1xuXHRjYWxsQ29udHJvbENhbGxiYWNrLmNhbGwodGhpcywgY2FsbEJhY2tGdW5jdGlvbk5hbWUpO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGZpcnN0IGNyZWF0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gYXR0YWNoQXR0cmlidXRlQ2hhbmdlTXV0YXRpb25PYnNlcnZlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0aWYgKHR5cGVvZiBzZWxmW2F0dHJpYnV0ZU11dGF0aW9uT2JzZXJ2ZXJTeW1ib2xdICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0c2VsZlthdHRyaWJ1dGVNdXRhdGlvbk9ic2VydmVyU3ltYm9sXSA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChcblx0XHRtdXRhdGlvbnMsXG5cdFx0b2JzZXJ2ZXIsXG5cdCkge1xuXHRcdGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zKSB7XG5cdFx0XHRpZiAobXV0YXRpb24udHlwZSA9PT0gXCJhdHRyaWJ1dGVzXCIpIHtcblx0XHRcdFx0c2VsZi5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soXG5cdFx0XHRcdFx0bXV0YXRpb24uYXR0cmlidXRlTmFtZSxcblx0XHRcdFx0XHRtdXRhdGlvbi5vbGRWYWx1ZSxcblx0XHRcdFx0XHRtdXRhdGlvbi50YXJnZXQuZ2V0QXR0cmlidXRlKG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUpLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0dHJ5IHtcblx0XHRzZWxmW2F0dHJpYnV0ZU11dGF0aW9uT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUoc2VsZiwge1xuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGF0dHJpYnV0ZU9sZFZhbHVlOiB0cnVlLFxuXHRcdH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4oc2VsZiwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0fVxufVxuXG4vKipcbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5DaGlsZE5vZGUobm9kZSkge1xuXHRpZiAodGhpcy5jb250YWlucyhub2RlKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Zm9yIChjb25zdCBbLCBlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmNoaWxkTm9kZXMpKSB7XG5cdFx0aWYgKGUuY29udGFpbnMobm9kZSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGNvbnRhaW5DaGlsZE5vZGUuY2FsbChlLCBub2RlKTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE1LjBcbiAqIEBwcml2YXRlXG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25PYnNlcnZlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0bGV0IGxhc3REaXNhYmxlZFZhbHVlID0gdW5kZWZpbmVkO1xuXHRzZWxmLmF0dGFjaE9ic2VydmVyKFxuXHRcdG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zdCBmbGFnID0gc2VsZi5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKTtcblxuXHRcdFx0aWYgKGZsYWcgPT09IGxhc3REaXNhYmxlZFZhbHVlKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0bGFzdERpc2FibGVkVmFsdWUgPSBmbGFnO1xuXG5cdFx0XHRpZiAoIShzZWxmLnNoYWRvd1Jvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290KSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHF1ZXJ5ID1cblx0XHRcdFx0XCJidXR0b24sIGNvbW1hbmQsIGZpZWxkc2V0LCBrZXlnZW4sIG9wdGdyb3VwLCBvcHRpb24sIHNlbGVjdCwgdGV4dGFyZWEsIGlucHV0LCBbZGF0YS1tb25zdGVyLW9iamVjdGxpbmtdXCI7XG5cdFx0XHRjb25zdCBlbGVtZW50cyA9IHNlbGYuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KTtcblxuXHRcdFx0bGV0IG5vZGVMaXN0O1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bm9kZUxpc3QgPSBuZXcgU2V0KFtcblx0XHRcdFx0XHQuLi5lbGVtZW50cyxcblx0XHRcdFx0XHQuLi5nZXRTbG90dGVkRWxlbWVudHMuY2FsbChzZWxmLCBxdWVyeSksXG5cdFx0XHRcdF0pO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRub2RlTGlzdCA9IGVsZW1lbnRzO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgWy4uLm5vZGVMaXN0XSkge1xuXHRcdFx0XHRpZiAoZmxhZyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9ESVNBQkxFRCwgXCJcIik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoQVRUUklCVVRFX0RJU0FCTEVEKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pLFxuXHQpO1xuXG5cdHNlbGYuYXR0YWNoT2JzZXJ2ZXIoXG5cdFx0bmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcblx0XHRcdC8vIG5vdCBpbml0aWFsaXNlZFxuXHRcdFx0aWYgKCFoYXNPYmplY3RMaW5rKHNlbGYsIGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gaW5mb3JtIGV2ZXJ5IGVsZW1lbnRcblx0XHRcdGNvbnN0IHVwZGF0ZXJzID0gZ2V0TGlua2VkT2JqZWN0cyhzZWxmLCBjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGxpc3Qgb2YgdXBkYXRlcnMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB1cGRhdGVyIG9mIGxpc3QpIHtcblx0XHRcdFx0XHRjb25zdCBkID0gY2xvbmUoc2VsZltpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0pO1xuXHRcdFx0XHRcdE9iamVjdC5hc3NpZ24odXBkYXRlci5nZXRTdWJqZWN0KCksIGQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSksXG5cdCk7XG5cblx0Ly8gZGlzYWJsZWRcblx0c2VsZlthdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bQVRUUklCVVRFX0RJU0FCTEVEXSA9ICgpID0+IHtcblx0XHRpZiAoc2VsZi5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0RJU0FCTEVEKSkge1xuXHRcdFx0c2VsZi5zZXRPcHRpb24oQVRUUklCVVRFX0RJU0FCTEVELCB0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZi5zZXRPcHRpb24oQVRUUklCVVRFX0RJU0FCTEVELCB1bmRlZmluZWQpO1xuXHRcdH1cblx0fTtcblxuXHQvLyBkYXRhLW1vbnN0ZXItb3B0aW9uc1xuXHRzZWxmW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtBVFRSSUJVVEVfT1BUSU9OU10gPSAoKSA9PiB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IGdldE9wdGlvbnNGcm9tQXR0cmlidXRlcy5jYWxsKHNlbGYpO1xuXHRcdGlmIChpc09iamVjdChvcHRpb25zKSAmJiBPYmplY3Qua2V5cyhvcHRpb25zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRzZWxmLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0fVxuXHR9O1xuXG5cdC8vIGRhdGEtbW9uc3Rlci1vcHRpb25zLXNlbGVjdG9yXG5cdHNlbGZbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW0FUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SXSA9ICgpID0+IHtcblx0XHRjb25zdCBvcHRpb25zID0gZ2V0T3B0aW9uc0Zyb21TY3JpcHRUYWcuY2FsbChzZWxmKTtcblx0XHRpZiAoaXNPYmplY3Qob3B0aW9ucykgJiYgT2JqZWN0LmtleXMob3B0aW9ucykubGVuZ3RoID4gMCkge1xuXHRcdFx0c2VsZi5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gZ2V0T3B0aW9uc0Zyb21TY3JpcHRUYWcoKSB7XG5cdGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IpKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0Y29uc3Qgbm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0dGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IpLFxuXHQpO1xuXHRpZiAoIShub2RlIGluc3RhbmNlb2YgSFRNTFNjcmlwdEVsZW1lbnQpKSB7XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHR0aGlzLFxuXHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdGB0aGUgc2VsZWN0b3IgJHtBVFRSSUJVVEVfT1BUSU9OU19TRUxFQ1RPUn0gZm9yIG9wdGlvbnMgd2FzIHNwZWNpZmllZCAoJHt0aGlzLmdldEF0dHJpYnV0ZShcblx0XHRcdFx0QVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IsXG5cdFx0XHQpfSkgYnV0IG5vdCBmb3VuZC5gLFxuXHRcdCk7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0bGV0IG9iaiA9IHt9O1xuXG5cdHRyeSB7XG5cdFx0b2JqID0gcGFyc2VPcHRpb25zSlNPTi5jYWxsKHRoaXMsIG5vZGUudGV4dENvbnRlbnQudHJpbSgpKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0dGhpcyxcblx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRgd2hlbiBhbmFseXppbmcgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgc2NyaXB0IHRhZyB0aGVyZSB3YXMgYW4gZXJyb3IuICR7ZX1gLFxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldE9wdGlvbnNGcm9tQXR0cmlidXRlcygpIHtcblx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9PUFRJT05TKSkge1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gcGFyc2VPcHRpb25zSlNPTi5jYWxsKHRoaXMsIHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9PUFRJT05TKSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdGB0aGUgb3B0aW9ucyBhdHRyaWJ1dGUgJHtBVFRSSUJVVEVfT1BUSU9OU30gZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gZGVmaW5pdGlvbiAoYWN0dWFsOiAke3RoaXMuZ2V0QXR0cmlidXRlKFxuXHRcdFx0XHRcdEFUVFJJQlVURV9PUFRJT05TLFxuXHRcdFx0XHQpfSkuJHtlfWAsXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7fTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gcGFyc2VPcHRpb25zSlNPTihkYXRhKSB7XG5cdGxldCBvYmogPSB7fTtcblxuXHRpZiAoIWlzU3RyaW5nKGRhdGEpKSB7XG5cdFx0cmV0dXJuIG9iajtcblx0fVxuXG5cdC8vIHRoZSBjb25maWd1cmF0aW9uIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBkYXRhIHVybC5cblx0dHJ5IHtcblx0XHRjb25zdCBkYXRhVXJsID0gcGFyc2VEYXRhVVJMKGRhdGEpO1xuXHRcdGRhdGEgPSBkYXRhVXJsLmNvbnRlbnQ7XG5cdH0gY2F0Y2ggKGUpIHt9XG5cblx0dHJ5IHtcblx0XHRvYmogPSBKU09OLnBhcnNlKGRhdGEpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0dGhyb3cgZTtcblx0fVxuXG5cdHJldHVybiB2YWxpZGF0ZU9iamVjdChvYmopO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtpbml0SHRtbENvbnRlbnR9XG4gKi9cbmZ1bmN0aW9uIGluaXRIdG1sQ29udGVudCgpIHtcblx0dHJ5IHtcblx0XHRjb25zdCB0ZW1wbGF0ZSA9IGZpbmREb2N1bWVudFRlbXBsYXRlKHRoaXMuY29uc3RydWN0b3IuZ2V0VGFnKCkpO1xuXHRcdHRoaXMuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGxldCBodG1sID0gdGhpcy5nZXRPcHRpb24oXCJ0ZW1wbGF0ZXMubWFpblwiLCBcIlwiKTtcblx0XHRpZiAoaXNTdHJpbmcoaHRtbCkgJiYgaHRtbC5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBtYXBwaW5nID0gdGhpcy5nZXRPcHRpb24oXCJ0ZW1wbGF0ZU1hcHBpbmdcIiwge30pO1xuXHRcdFx0aWYgKGlzT2JqZWN0KG1hcHBpbmcpKSB7XG5cdFx0XHRcdGh0bWwgPSBuZXcgRm9ybWF0dGVyKG1hcHBpbmcpLmZvcm1hdChodG1sKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuaW5uZXJIVE1MID0gaHRtbDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7Q3VzdG9tRWxlbWVudH1cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRoaXMgQ3VzdG9tRWxlbWVudFxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNi4wXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuICovXG5mdW5jdGlvbiBpbml0Q1NTU3R5bGVzaGVldCgpIHtcblx0aWYgKCEodGhpcy5zaGFkb3dSb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCkpIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvbnN0IHN0eWxlU2hlZXQgPSB0aGlzLmNvbnN0cnVjdG9yLmdldENTU1N0eWxlU2hlZXQoKTtcblxuXHRpZiAoc3R5bGVTaGVldCBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQpIHtcblx0XHRpZiAoc3R5bGVTaGVldC5jc3NSdWxlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLnNoYWRvd1Jvb3QuYWRvcHRlZFN0eWxlU2hlZXRzID0gW3N0eWxlU2hlZXRdO1xuXHRcdH1cblx0fSBlbHNlIGlmIChpc0FycmF5KHN0eWxlU2hlZXQpKSB7XG5cdFx0Y29uc3QgYXNzaWduID0gW107XG5cdFx0Zm9yIChjb25zdCBzIG9mIHN0eWxlU2hlZXQpIHtcblx0XHRcdGlmIChpc1N0cmluZyhzKSkge1xuXHRcdFx0XHRjb25zdCB0cmltZWRTdHlsZVNoZWV0ID0gcy50cmltKCk7XG5cdFx0XHRcdGlmICh0cmltZWRTdHlsZVNoZWV0ICE9PSBcIlwiKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG5cdFx0XHRcdFx0c3R5bGUuaW5uZXJIVE1MID0gdHJpbWVkU3R5bGVTaGVldDtcblx0XHRcdFx0XHR0aGlzLnNoYWRvd1Jvb3QucHJlcGVuZChzdHlsZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHZhbGlkYXRlSW5zdGFuY2UocywgQ1NTU3R5bGVTaGVldCk7XG5cblx0XHRcdGlmIChzLmNzc1J1bGVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0YXNzaWduLnB1c2gocyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGFzc2lnbi5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLnNoYWRvd1Jvb3QuYWRvcHRlZFN0eWxlU2hlZXRzID0gYXNzaWduO1xuXHRcdH1cblx0fSBlbHNlIGlmIChpc1N0cmluZyhzdHlsZVNoZWV0KSkge1xuXHRcdGNvbnN0IHRyaW1lZFN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0LnRyaW0oKTtcblx0XHRpZiAodHJpbWVkU3R5bGVTaGVldCAhPT0gXCJcIikge1xuXHRcdFx0Y29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG5cdFx0XHRzdHlsZS5pbm5lckhUTUwgPSBzdHlsZVNoZWV0O1xuXHRcdFx0dGhpcy5zaGFkb3dSb290LnByZXBlbmQoc3R5bGUpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtDdXN0b21FbGVtZW50fVxuICogQHRocm93cyB7RXJyb3J9IGh0bWwgaXMgbm90IHNldC5cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvYXR0YWNoU2hhZG93XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKi9cbmZ1bmN0aW9uIGluaXRTaGFkb3dSb290KCkge1xuXHRsZXQgdGVtcGxhdGU7XG5cdGxldCBodG1sO1xuXG5cdHRyeSB7XG5cdFx0dGVtcGxhdGUgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZSh0aGlzLmNvbnN0cnVjdG9yLmdldFRhZygpKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGh0bWwgPSB0aGlzLmdldE9wdGlvbihcInRlbXBsYXRlcy5tYWluXCIsIFwiXCIpO1xuXHRcdGlmICghaXNTdHJpbmcoaHRtbCkgfHwgaHRtbCA9PT0gdW5kZWZpbmVkIHx8IGh0bWwgPT09IFwiXCIpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImh0bWwgaXMgbm90IHNldC5cIik7XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5hdHRhY2hTaGFkb3coe1xuXHRcdG1vZGU6IHRoaXMuZ2V0T3B0aW9uKFwic2hhZG93TW9kZVwiLCBcIm9wZW5cIiksXG5cdFx0ZGVsZWdhdGVzRm9jdXM6IHRoaXMuZ2V0T3B0aW9uKFwiZGVsZWdhdGVzRm9jdXNcIiwgdHJ1ZSksXG5cdH0pO1xuXG5cdGlmICh0ZW1wbGF0ZSBpbnN0YW5jZW9mIFRlbXBsYXRlKSB7XG5cdFx0dGhpcy5zaGFkb3dSb290LmFwcGVuZENoaWxkKHRlbXBsYXRlLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb25zdCBtYXBwaW5nID0gdGhpcy5nZXRPcHRpb24oXCJ0ZW1wbGF0ZU1hcHBpbmdcIiwge30pO1xuXHRpZiAoaXNPYmplY3QobWFwcGluZykpIHtcblx0XHRodG1sID0gbmV3IEZvcm1hdHRlcihtYXBwaW5nKS5mb3JtYXQoaHRtbCk7XG5cdH1cblxuXHR0aGlzLnNoYWRvd1Jvb3QuaW5uZXJIVE1MID0gaHRtbDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgcmVnaXN0ZXJzIGEgbmV3IGVsZW1lbnQuIFRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgYEN1c3RvbUVsZW1lbnQuZ2V0VGFnKClgIGlzIHVzZWQgYXMgdGhlIHRhZy5cbiAqXG4gKiBAcGFyYW0ge0N1c3RvbUVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjcuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7RE9NRXhjZXB0aW9ufSBGYWlsZWQgdG8gZXhlY3V0ZSAnZGVmaW5lJyBvbiAnQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5JzogaXMgbm90IGEgdmFsaWQgY3VzdG9tIGVsZW1lbnQgbmFtZVxuICovXG5mdW5jdGlvbiByZWdpc3RlckN1c3RvbUVsZW1lbnQoZWxlbWVudCkge1xuXHR2YWxpZGF0ZUZ1bmN0aW9uKGVsZW1lbnQpO1xuXHRjb25zdCBjdXN0b21FbGVtZW50cyA9IGdldEdsb2JhbE9iamVjdChcImN1c3RvbUVsZW1lbnRzXCIpO1xuXHRpZiAoY3VzdG9tRWxlbWVudHMgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcImN1c3RvbUVsZW1lbnRzIGlzIG5vdCBzdXBwb3J0ZWQuXCIpO1xuXHR9XG5cdFxuXHRjb25zdCB0YWcgPSBlbGVtZW50Py5nZXRUYWcoKTtcblx0aWYgKCFpc1N0cmluZyh0YWcpIHx8IHRhZyA9PT0gXCJcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRhZyBpcyBub3Qgc2V0LlwiKTtcblx0fVxuXG5cdGlmIChjdXN0b21FbGVtZW50cy5nZXQodGFnKSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y3VzdG9tRWxlbWVudHMuZGVmaW5lKHRhZywgZWxlbWVudCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBBVFRSSUJVVEVfUFJFRklYIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc2luY2UgMS4wLjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyA9IFwiYmxvY2tcIjtcblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLXVybGAgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGUgY29udHJvbC5cbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzaW5jZSAxLjAuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0ZPUk1fVVJMID0gYCR7QVRUUklCVVRFX1BSRUZJWH11cmxgO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItcmVsb2FkYCBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSByZWxvYWQuXG4gKlxuICogdmFsaWQgdmFsdWVzOiBvbnNob3dcbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzaW5jZSAxLjExLjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9GT1JNX1JFTE9BRCA9IGAke0FUVFJJQlVURV9QUkVGSVh9cmVsb2FkYDtcblxuLyoqXG4gKiBgZGF0YS1tb25zdGVyLWludGVuZGBcbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzaW5jZSAxLjkuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX1ZJU0lCSUxJVFkgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXZpc2liaWxpdHlgO1xuLyoqXG4gKiBgZGF0YS1tb25zdGVyLWludGVuZGBcbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzaW5jZSAxLjkuMFxuICogQGRlcHJlY2F0ZWQgc2luY2UgMy4zMi4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfQlVUVE9OX0NMQVNTID0gYCR7QVRUUklCVVRFX1BSRUZJWH1idXR0b24tY2xhc3NgO1xuXG4vKipcbiAqIGBkYXRhLW1vbnN0ZXItaW50ZW5kYFxuICpcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHNpbmNlIDEuOC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfSU5URU5EID0gYCR7QVRUUklCVVRFX1BSRUZJWH1pbnRlbmRgO1xuXG4vKipcbiAqIGBkYXRhLW1vbnN0ZXItaGFzLWNoaWxkcmVuYFxuICpcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHNpbmNlIDEuOC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfSEFTX0NISUxEUkVOID0gYCR7QVRUUklCVVRFX1BSRUZJWH1oYXMtY2hpbGRyZW5gO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItZGF0YXNvdXJjZWAgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIGRhdGFzb3VyY2UuXG4gKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc2luY2UgMS42LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9GT1JNX0RBVEFTT1VSQ0UgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWRhdGFzb3VyY2VgO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItZGF0YXNvdXJjZS1hcmd1bWVudHNgIGNhbiBiZSB1c2VkIHRvIHBhc3MgYXJndW1lbnRzLlxuICpcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHNpbmNlIDEuNi4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfRk9STV9EQVRBU09VUkNFX0FSR1VNRU5UUyA9IGAke0FUVFJJQlVURV9QUkVGSVh9ZGF0YXNvdXJjZS1hcmd1bWVudHNgO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItYnV0dG9uLWxhYmVsYCBjYW4gYmUgdXNlZCB0byBwYXNzIGxhYmVscy5cbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzaW5jZSAxLjYuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0JVVFRPTl9MQUJFTCA9IGAke0FUVFJJQlVURV9QUkVGSVh9YnV0dG9uLWxhYmVsYDtcblxuZXhwb3J0IHtcblx0QVRUUklCVVRFX0JVVFRPTl9MQUJFTCxcblx0U1RZTEVfRElTUExBWV9NT0RFX0JMT0NLLFxuXHRBVFRSSUJVVEVfRk9STV9VUkwsXG5cdEFUVFJJQlVURV9GT1JNX0RBVEFTT1VSQ0UsXG5cdEFUVFJJQlVURV9GT1JNX0RBVEFTT1VSQ0VfQVJHVU1FTlRTLFxuXHRBVFRSSUJVVEVfSU5URU5ELFxuXHRBVFRSSUJVVEVfVklTSUJJTElUWSxcblx0QVRUUklCVVRFX0ZPUk1fUkVMT0FELFxuXHRBVFRSSUJVVEVfSEFTX0NISUxEUkVOLFxuXHRBVFRSSUJVVEVfQlVUVE9OX0NMQVNTLFxufTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZnVuY3Rpb24gZmluZFNoYWRvd1Jvb3QoZWxlbWVudCkge1xuXHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHJldHVybiBlbGVtZW50O1xuXHRpZiAoIWVsZW1lbnQucGFyZW50Tm9kZSkgcmV0dXJuIG51bGw7XG5cdHJldHVybiBmaW5kU2hhZG93Um9vdChlbGVtZW50LnBhcmVudE5vZGUpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgZmV0Y2ggb3B0aW9uc1xuICogQHBhcmFtIHtPYmplY3R9IGZpbHRlciBmZXRjaCBvcHRpb25zXG4gKiBAcmV0dXJuIHtQcm9taXNlPE9iamVjdD59XG4gKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gY2xpZW50IGVycm9yXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gbG9hZEFuZEFzc2lnbkNvbnRlbnQoZWxlbWVudCwgdXJsLCBvcHRpb25zLCBmaWx0ZXIpIHtcblx0cmV0dXJuIGxvYWRDb250ZW50KHVybCwgb3B0aW9ucykudGhlbigocmVzcG9uc2UpID0+IHtcblx0XHRsZXQgY29udGVudCA9IHJlc3BvbnNlLmNvbnRlbnQ7XG5cblx0XHRpZiAoaXNTdHJpbmcoZmlsdGVyKSAmJiBmaWx0ZXIgIT09IFwiXCIpIHtcblx0XHRcdGNvbnN0IHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0Y29uc3QgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHRjLmlubmVySFRNTCA9IGNvbnRlbnQ7XG5cdFx0XHRmb3IgKGNvbnN0IFssIG5vZGVdIG9mIGMucXVlcnlTZWxlY3RvckFsbChmaWx0ZXIpLmVudHJpZXMoKSkge1xuXHRcdFx0XHR0LmFwcGVuZENoaWxkKG5vZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb250ZW50ID0gdC5pbm5lckhUTUw7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0dC5pbm5lckhUTUwgPSBjb250ZW50O1xuXG5cdFx0Y29uc3Qgc2NyaXB0cyA9IHQucXVlcnlTZWxlY3RvckFsbChcInNjcmlwdFwiKTtcblx0XHRmb3IgKGNvbnN0IFssIHNjcmlwdF0gb2Ygc2NyaXB0cy5lbnRyaWVzKCkpIHtcblx0XHRcdGNvbnN0IHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuXHRcdFx0cy5pbm5lckhUTUwgPSBzY3JpcHQuaW5uZXJIVE1MO1xuXHRcdFx0aWYgKHNjcmlwdC5zcmMpIHMuc3JjID0gc2NyaXB0LnNyYztcblx0XHRcdGlmIChzY3JpcHQudHlwZSkgcy50eXBlID0gc2NyaXB0LnR5cGU7XG5cdFx0XHRpZiAoc2NyaXB0LmFzeW5jKSBzLmFzeW5jID0gc2NyaXB0LmFzeW5jO1xuXHRcdFx0aWYgKHNjcmlwdC5kZWZlcikgcy5kZWZlciA9IHNjcmlwdC5kZWZlcjtcblx0XHRcdGlmIChzY3JpcHQuY3Jvc3NPcmlnaW4pIHMuY3Jvc3NPcmlnaW4gPSBzY3JpcHQuY3Jvc3NPcmlnaW47XG5cdFx0XHRpZiAoc2NyaXB0LmludGVncml0eSkgcy5pbnRlZ3JpdHkgPSBzY3JpcHQuaW50ZWdyaXR5O1xuXHRcdFx0aWYgKHNjcmlwdC5yZWZlcnJlclBvbGljeSkgcy5yZWZlcnJlclBvbGljeSA9IHNjcmlwdC5yZWZlcnJlclBvbGljeTtcblx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQocyk7XG5cdFx0XHR0LnJlbW92ZUNoaWxkKHNjcmlwdCk7XG5cdFx0fVxuXG5cdFx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCkuaW5uZXJIVE1MID0gdC5pbm5lckhUTUw7XG5cblx0XHRjb25zdCByb290ID0gZmluZFNoYWRvd1Jvb3QoZWxlbWVudCk7XG5cdFx0aWYgKHJvb3QgIT09IG51bGwpIHtcblx0XHRcdGVsZW1lbnQgPSByb290Lmhvc3Q7XG5cdFx0fVxuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KGVsZW1lbnQsIFwibW9uc3Rlci1mZXRjaGVkXCIsIHtcblx0XHRcdHVybCxcblx0XHR9KTtcblxuXHRcdHJldHVybiByZXNwb25zZTtcblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBmZXRjaCBvcHRpb25zXG4gKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59XG4gKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gY2xpZW50IGVycm9yXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBsb2FkQ29udGVudCh1cmwsIG9wdGlvbnMpIHtcblx0aWYgKHVybCBpbnN0YW5jZW9mIFVSTCkge1xuXHRcdHVybCA9IHVybC50b1N0cmluZygpO1xuXHR9XG5cblx0cmV0dXJuIGZldGNoKHZhbGlkYXRlU3RyaW5nKHVybCksIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG5cdFx0Ly8gVGhlIG9rIHJlYWQtb25seSBwcm9wZXJ0eSBvZiB0aGUgUmVzcG9uc2UgaW50ZXJmYWNlIGNvbnRhaW5zIGFcblx0XHQvLyBCb29sZWFuIHN0YXRpbmcgd2hldGhlciB0aGUgcmVzcG9uc2Ugd2FzIHN1Y2Nlc3NmdWwgKHN0YXR1cyBpbiB0aGUgcmFuZ2UgMjAwLTI5OSkgb3Igbm90LlxuXHRcdGlmIChyZXNwb25zZT8ub2sgIT09IHRydWUpIHtcblx0XHRcdC8vIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1Jlc3BvbnNlL3R5cGVcblx0XHRcdGlmIChcblx0XHRcdFx0W1wiZXJyb3JcIiwgXCJvcGFxdWVcIiwgXCJvcGFxdWVyZWRpcmVjdFwiXS5pbmRleE9mKHJlc3BvbnNlPy50eXBlKSAhPT0gLTFcblx0XHRcdCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0YHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YSAoJHtyZXNwb25zZT8udHlwZX0pYCxcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc3RhdHVzQ2xhc3MgPSBgJHtyZXNwb25zZT8uc3RhdHVzfWAuc3Vic3RyaW5nKDAsIDEpO1xuXHRcdFx0c3dpdGNoIChzdGF0dXNDbGFzcykge1xuXHRcdFx0XHRjYXNlIFwiNFwiOlxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgY2xpZW50IGVycm9yICR7cmVzcG9uc2U/LnN0YXR1c1RleHR9YCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdFx0YHVuZGVmaW5lZCBzdGF0dXMgKCR7cmVzcG9uc2U/LnN0YXR1c30gLyAke3Jlc3BvbnNlPy5zdGF0dXNUZXh0fSkgb3IgdHlwZSAoJHtyZXNwb25zZT8udHlwZX0pYCxcblx0XHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRyZXNwb25zZVxuXHRcdFx0XHQudGV4dCgpXG5cdFx0XHRcdC50aGVuKChjb250ZW50KSA9PiB7XG5cdFx0XHRcdFx0cmVzb2x2ZSh7XG5cdFx0XHRcdFx0XHRjb250ZW50LFxuXHRcdFx0XHRcdFx0dHlwZTogcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJDb250ZW50LVR5cGVcIiksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChyZWplY3QpO1xuXHRcdH0pO1xuXHR9KTtcbn1cblxuZXhwb3J0IHsgbG9hZEFuZEFzc2lnbkNvbnRlbnQsIGxvYWRDb250ZW50IH07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0YXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdGluaXRNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRk9STV9SRUxPQUQsIEFUVFJJQlVURV9GT1JNX1VSTCB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGxvYWRBbmRBc3NpZ25Db250ZW50IH0gZnJvbSBcIi4vdXRpbC9mZXRjaC5tanNcIjtcblxuZXhwb3J0IHsgUmVsb2FkIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGludGVyc2VjdGlvbk9ic2VydmVyV2FzSW5pdGlhbGl6ZWQgPSBTeW1ib2woXCJ3YXNJbml0aWFsaXplZFwiKTtcblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgcmVsb2FkcyB0aGUgY29udGVudCBvZiBhIHVybCBhbmQgZW1iZWRzIGl0IGludG8gdGhlIGRvbS5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL3JlbG9hZC5wbmdcIj5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIGA8bW9uc3Rlci1yZWxvYWQgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItcmVsb2FkJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItcmVsb2FkPjwvbW9uc3Rlci1yZWxvYWQ+XG4gKlxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge1JlbG9hZH0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL3JlbG9hZC5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXJlbG9hZCcpO1xuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBBIHNpbXBsZSBjb25maWd1cmF0aW9uIGNhbiBsb29rIGxpa2UgdGhpc1xuICpcbiAqIGBgYGh0bWxcbiAqIDxzY3JpcHQgaWQ9XCJjb25maWdcIlxuICogICAgICAgICB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiPlxuICogICAgIHtcbiAqICAgICAgICAgXCJ1cmxcIjogXCIuL2NvbnRlbnQuaHRtbFwiLFxuICogICAgIH1cbiAqIDwvc2NyaXB0PlxuICpcbiAqIDxtb25zdGVyLXJlbG9hZCBkYXRhLW1vbnN0ZXItb3B0aW9ucy1zZWxlY3Rvcj1cIiNjb25maWdcIj5cbiAqIDwvbW9uc3Rlci1yZWxvYWQ+XG4gKiBgYGBcbiAqXG4gKiBJZiB5b3Ugd2FudCB0byBkaXNwbGF5IGEgbG9hZGVyLCB5b3UgY2FuIGluc2VydCBhIGRpdiB3aXRoIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGFpbmVyXCJgLlxuICogVGhlIGNvbnRlbnQgb2YgdGhpcyBkaXYgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgbG9hZGVkIGNvZGUuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItcmVsb2FkIGRhdGEtbW9uc3Rlci1vcHRpb25zLXNlbGVjdG9yPVwiI2NvbmZpZ1wiPlxuICogPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICogTE9BREVSIC4uLlxuICogPC9kaXY+XG4gKiA8L21vbnN0ZXItcmVsb2FkPlxuICogYGBgXG4gKlxuICogSWYgeW91IG5lZWQgYWRkaXRpb25hbCBzdHJ1Y3R1cmUsIHlvdSBjYW4gc2ltcGx5IHNwZWNpZnkgaXQuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItcmVsb2FkIGRhdGEtbW9uc3Rlci1vcHRpb25zLXNlbGVjdG9yPVwiI2NvbmZpZ1wiPlxuICogPGRpdiBjbGFzcz1cInJvd1wiPlxuICogICA8ZGl2IGNsYXNzPVwiY29sXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj5cbiAqICAgICAgIExPQURFUiAuLi5cbiAqICAgPC9kaXY+XG4gKiA8L2Rpdj5cbiAqIDwvbW9uc3Rlci1yZWxvYWQ+XG4gKiBgYGBcbiAqXG4gKiBAc3RhcnR1bWwgcmVsb2FkLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gQ3VzdG9tQ29udHJvbFxuICogQ3VzdG9tQ29udHJvbCA8fC0tIFJlbG9hZFxuICogQGVuZHVtbFxuICpcbiAqIEBzaW5jZSAxLjEzLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzdW1tYXJ5IEEgcmVsb2FkIGNvbnRyb2xcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5ldmVudDptb25zdGVyLWZldGNoZWRcbiAqL1xuY2xhc3MgUmVsb2FkIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9jb21wb25lbnQtZm9ybS9yZWxvYWRcIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHVybD11bmRlZmluZWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlbG9hZD11bmRlZmluZWQgY3VycmVudGx5IHRoZSB2YWx1ZXMgZGVmaW5lZCBhcmUgYG9uc2hvd2AgYW5kIGBhbHdheXNgLiBUaGUgZGVmYXVsdCBgb25zaG93YCByZW1vdmVzIHRoZSBJbnRlcnNlY3Rpb25PYnNlcnZlci4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb250ZW50IGlzIG9ubHkgbG9hZGVkIG9uY2UuIHJlbG9hZGluZyBvZiB0aGUgY29udGVudCBkb2VzIG5vdCBvY2N1ci5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGZpbHRlcj11bmRlZmluZWQgZG9tIHNlbGVjdG9ycyB0byBzZWFyY2ggZm9yIGVsZW1lbnRzLCBpZiB1bmRlZmluZWQgdGhlbiBldmVyeXRoaW5nIGlzIHRha2VuXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUHJvY2Vzc29yW119IHByb2Nlc3NvcnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoIEZldGNoIFtzZWUgVXNpbmcgRmV0Y2ggbW96aWxsYS5vcmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEkvVXNpbmdfRmV0Y2gpXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5yZWRpcmVjdD1lcnJvclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubWV0aG9kPUdFVFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubW9kZT1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2guY3JlZGVudGlhbHM9c2FtZS1vcmlnaW5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoLmhlYWRlcnM9e1wiYWNjZXB0XCI6XCJ0ZXh0L2h0bWxcIn19XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdFx0e1xuXHRcdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZS5jYWxsKHRoaXMpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzaGFkb3dNb2RlOiBmYWxzZSxcblx0XHRcdFx0dXJsOiB1bmRlZmluZWQsXG5cdFx0XHRcdHJlbG9hZDogXCJvbnNob3dcIixcblx0XHRcdFx0ZmlsdGVyOiB1bmRlZmluZWQsXG5cdFx0XHRcdGZldGNoOiB7XG5cdFx0XHRcdFx0cmVkaXJlY3Q6IFwiZXJyb3JcIixcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdFx0bW9kZTogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRcdGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRcdFx0YWNjZXB0OiBcInRleHQvaHRtbFwiLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0aW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzLmNhbGwodGhpcyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHdoaWNoIGF0dHJpYnV0ZXMgYXJlIHRvIGJlIG1vbml0b3JlZCBieSBgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKClgLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmdbXX1cblx0ICovXG5cdHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuXHRcdGNvbnN0IGxpc3QgPSBzdXBlci5vYnNlcnZlZEF0dHJpYnV0ZXM7XG5cdFx0bGlzdC5wdXNoKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cdFx0cmV0dXJuIGxpc3Q7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdFtpbml0TWV0aG9kU3ltYm9sXSgpIHs7XG5cdFx0c3VwZXJbaW5pdE1ldGhvZFN5bWJvbF0oKTtcblxuXHRcdC8vIGRhdGEtbW9uc3Rlci1vcHRpb25zXG5cdFx0dGhpc1thdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bQVRUUklCVVRFX0ZPUk1fVVJMXSA9ICh1cmwpID0+IHtcblx0XHRcdGlmICh0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9VUkwpKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwidXJsXCIsIG5ldyBVUkwodXJsLCBkb2N1bWVudC5sb2NhdGlvbikudG9TdHJpbmcoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcInVybFwiLCB1bmRlZmluZWQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgZGVmYXVsdCBzbG90XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIHVybFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSByZXF1ZXN0IGZhaWxlZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbm90IGZvdW5kXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcblx0ICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLmV2ZW50Om1vbnN0ZXItZmV0Y2hlZFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Gb3JtfVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHs7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdEludGVyc2VjdGlvbk9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLXJlbG9hZFwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIGxvYWQgY29udGVudCBmcm9tIHVybFxuXHQgKlxuXHQgKiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB0aGF0IHdpdGggdGhpcyBmdW5jdGlvbiB0aGUgbG9hZGluZyBpcyBleGVjdXRlZFxuXHQgKiBkaXJlY3RseS4gaXQgaXMgbG9hZGVkIGFzIHdlbGwgd2hlbiB0aGUgZWxlbWVudCBpcyBub3QgdmlzaWJsZS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSB1cmxcblx0ICovXG5cdGZldGNoKHVybCkge1xuXHRcdGlmIChpc1N0cmluZyh1cmwpIHx8IHVybCBpbnN0YW5jZW9mIFVSTCkge1xuXHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMLCBgJHt1cmx9YCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGxvYWRDb250ZW50LmNhbGwodGhpcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBwYXNzIGEgVVJMIHRvIHRoaXMgc2VsZWN0LlxuICpcbiAqIGBgYFxuICogPG1vbnN0ZXItc2VsZWN0IGRhdGEtbW9uc3Rlci11cmw9XCJodHRwczovL2V4YW1wbGUuY29tL1wiPjwvbW9uc3Rlci1zZWxlY3Q+XG4gKiBgYGBcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMoKSB7O1xuXHRjb25zdCBvcHRpb25zID0ge307XG5cblx0Y29uc3QgdXJsID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKTtcblxuXHRpZiAoaXNTdHJpbmcodXJsKSkge1xuXHRcdG9wdGlvbnNbXCJ1cmxcIl0gPSBuZXcgVVJMKHVybCwgZG9jdW1lbnQubG9jYXRpb24pLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKSkge1xuXHRcdG9wdGlvbnNbXCJyZWxvYWRcIl0gPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9SRUxPQUQpLnRvTG93ZXJDYXNlKCk7XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgZGVmYXVsdCBzbG90XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgdXJsXG4gKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gcmVxdWVzdCBmYWlsZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBub3QgZm91bmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5ldmVudDptb25zdGVyLWZldGNoZWRcbiAqL1xuZnVuY3Rpb24gaW5pdEludGVyc2VjdGlvbk9ic2VydmVyKCkgeztcblxuXHRpZiAodGhpc1tpbnRlcnNlY3Rpb25PYnNlcnZlcldhc0luaXRpYWxpemVkXSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXNbaW50ZXJzZWN0aW9uT2JzZXJ2ZXJXYXNJbml0aWFsaXplZF0gPSB0cnVlO1xuXG5cdGNvbnN0IG9wdGlvbnMgPSB7XG5cdFx0dGhyZXNob2xkOiBbMC41XSxcblx0fTtcblxuXHRjb25zdCBjYWxsYmFjayA9IChlbnRyaWVzLCBvYnNlcnZlcikgPT4ge1xuXHRcdGZvciAoY29uc3QgWywgZW50cnldIG9mIGVudHJpZXMuZW50cmllcygpKSB7XG5cdFx0XHRpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcgPT09IHRydWUpIHtcblx0XHRcdFx0Ly8gdW5kZWZpbmVkIG9yIGFsd2F5cyBkbyB0aGUgc2FtZVxuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJyZWxvYWRcIikgPT09IFwib25zaG93XCIpIHtcblx0XHRcdFx0XHRvYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGxvYWRDb250ZW50LmNhbGwodGhpcykuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGNhbGxiYWNrLCBvcHRpb25zKTtcblx0b2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgZGVmYXVsdCBzbG90XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgdXJsXG4gKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gcmVxdWVzdCBmYWlsZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBub3QgZm91bmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBjbGllbnQgZXJyb3JcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLmV2ZW50Om1vbnN0ZXItZmV0Y2hlZFxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqL1xuZnVuY3Rpb24gbG9hZENvbnRlbnQoKSB7O1xuXG5cdGNvbnN0IHVybCA9IHRoaXMuZ2V0T3B0aW9uKFwidXJsXCIsIHVuZGVmaW5lZCk7XG5cdGlmICghaXNTdHJpbmcodXJsKSB8fCB1cmwgPT09IFwiXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIHVybFwiKTtcblx0fVxuXG5cdGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcImZldGNoXCIsIHt9KTtcblxuXHRsZXQgcGFyZW50Tm9kZSA9IHRoaXM7XG5cdGlmICh0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHRwYXJlbnROb2RlID0gdGhpcy5zaGFkb3dSb290O1xuXHR9XG5cblx0bGV0IGNvbnRhaW5lciA9IHBhcmVudE5vZGUucXVlcnlTZWxlY3RvcihgWyR7QVRUUklCVVRFX1JPTEV9PWNvbnRhaW5lcl1gKTtcblx0bGV0IGN1cnJlbnREaXNwbGF5TW9kZSA9IGNvbnRhaW5lcj8uc3R5bGU/LmRpc3BsYXk7XG5cblx0aWYgKGN1cnJlbnREaXNwbGF5TW9kZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y3VycmVudERpc3BsYXlNb2RlID0gXCJpbmhlcml0XCI7XG5cdH1cblxuXHRpZiAoIShjb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdGNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdFx0Y29udGFpbmVyLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSwgXCJjb250YWluZXJcIik7XG5cdFx0cGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuXHR9XG5cblx0cmV0dXJuIGxvYWRBbmRBc3NpZ25Db250ZW50KGNvbnRhaW5lciwgdXJsLCBvcHRpb25zLCB0aGlzLmdldE9wdGlvbihcImZpbHRlclwiKSlcblx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRpZiAoY3VycmVudERpc3BsYXlNb2RlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBjdXJyZW50RGlzcGxheU1vZGU7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdHRocm93IGU7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdHJldHVybiB0aGlzLmlubmVySFRNTDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFJlbG9hZCk7XG4iLCAiLyohXG4gKiBNSVQgTGljZW5zZVxuICogXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMiBQZWN1bGlhciBWZW50dXJlcywgTExDXG4gKiBcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqIFxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICogXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqIFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgQVJSQVlfQlVGRkVSX05BTUUgPSBcIltvYmplY3QgQXJyYXlCdWZmZXJdXCI7XG5jbGFzcyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIge1xuICAgIHN0YXRpYyBpc0FycmF5QnVmZmVyKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkYXRhKSA9PT0gQVJSQVlfQlVGRkVSX05BTUU7XG4gICAgfVxuICAgIHN0YXRpYyB0b0FycmF5QnVmZmVyKGRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBcnJheUJ1ZmZlcihkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEuYnl0ZUxlbmd0aCA9PT0gZGF0YS5idWZmZXIuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLmJ5dGVPZmZzZXQgPT09IDAgJiYgZGF0YS5ieXRlTGVuZ3RoID09PSBkYXRhLmJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudG9VaW50OEFycmF5KGRhdGEuYnVmZmVyKVxuICAgICAgICAgICAgLnNsaWNlKGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlT2Zmc2V0ICsgZGF0YS5ieXRlTGVuZ3RoKVxuICAgICAgICAgICAgLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIHRvVWludDhBcnJheShkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvVmlldyhkYXRhLCBVaW50OEFycmF5KTtcbiAgICB9XG4gICAgc3RhdGljIHRvVmlldyhkYXRhLCB0eXBlKSB7XG4gICAgICAgIGlmIChkYXRhLmNvbnN0cnVjdG9yID09PSB0eXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHR5cGUoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgdHlwZShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgcHJvdmlkZWQgdmFsdWUgaXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICB9XG4gICAgc3RhdGljIGlzQnVmZmVyU291cmNlKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSlcbiAgICAgICAgICAgIHx8IHRoaXMuaXNBcnJheUJ1ZmZlcihkYXRhKTtcbiAgICB9XG4gICAgc3RhdGljIGlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKVxuICAgICAgICAgICAgfHwgKGRhdGEgJiYgdGhpcy5pc0FycmF5QnVmZmVyKGRhdGEuYnVmZmVyKSk7XG4gICAgfVxuICAgIHN0YXRpYyBpc0VxdWFsKGEsIGIpIHtcbiAgICAgICAgY29uc3QgYVZpZXcgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGEpO1xuICAgICAgICBjb25zdCBiVmlldyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYik7XG4gICAgICAgIGlmIChhVmlldy5sZW5ndGggIT09IGJWaWV3LmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFWaWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoYVZpZXdbaV0gIT09IGJWaWV3W2ldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBzdGF0aWMgY29uY2F0KC4uLmFyZ3MpIHtcbiAgICAgICAgbGV0IGJ1ZmZlcnM7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3NbMF0pICYmICEoYXJnc1sxXSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkge1xuICAgICAgICAgICAgYnVmZmVycyA9IGFyZ3NbMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmdzWzBdKSAmJiBhcmdzWzFdIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIGJ1ZmZlcnMgPSBhcmdzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGFyZ3NbYXJncy5sZW5ndGggLSAxXSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVycyA9IGFyZ3Muc2xpY2UoMCwgYXJncy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJ1ZmZlcnMgPSBhcmdzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBzaXplID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBidWZmZXIgb2YgYnVmZmVycykge1xuICAgICAgICAgICAgc2l6ZSArPSBidWZmZXIuYnl0ZUxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShzaXplKTtcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnRvVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICAgICAgcmVzLnNldCh2aWV3LCBvZmZzZXQpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IHZpZXcubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9WaWV3KHJlcywgYXJnc1thcmdzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzLmJ1ZmZlcjtcbiAgICB9XG59XG5cbmNvbnN0IFNUUklOR19UWVBFID0gXCJzdHJpbmdcIjtcbmNvbnN0IEhFWF9SRUdFWCA9IC9eWzAtOWEtZl0rJC9pO1xuY29uc3QgQkFTRTY0X1JFR0VYID0gL14oPzpbQS1aYS16MC05Ky9dezR9KSooPzpbQS1aYS16MC05Ky9dezJ9PT18W0EtWmEtejAtOSsvXXszfT0pPyQvO1xuY29uc3QgQkFTRTY0VVJMX1JFR0VYID0gL15bYS16QS1aMC05LV9dKyQvO1xuY2xhc3MgVXRmOENvbnZlcnRlciB7XG4gICAgc3RhdGljIGZyb21TdHJpbmcodGV4dCkge1xuICAgICAgICBjb25zdCBzID0gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHRleHQpKTtcbiAgICAgICAgY29uc3QgdWludEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkocy5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHVpbnRBcnJheVtpXSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdWludEFycmF5LmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIHRvU3RyaW5nKGJ1ZmZlcikge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGxldCBlbmNvZGVkU3RyaW5nID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGVuY29kZWRTdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlY29kZWRTdHJpbmcgPSBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGVuY29kZWRTdHJpbmcpKTtcbiAgICAgICAgcmV0dXJuIGRlY29kZWRTdHJpbmc7XG4gICAgfVxufVxuY2xhc3MgVXRmMTZDb252ZXJ0ZXIge1xuICAgIHN0YXRpYyB0b1N0cmluZyhidWZmZXIsIGxpdHRsZUVuZGlhbiA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoYnVmZmVyKTtcbiAgICAgICAgY29uc3QgZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcoYXJyYXlCdWZmZXIpO1xuICAgICAgICBsZXQgcmVzID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBkYXRhVmlldy5nZXRVaW50MTYoaSwgbGl0dGxlRW5kaWFuKTtcbiAgICAgICAgICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tU3RyaW5nKHRleHQsIGxpdHRsZUVuZGlhbiA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBBcnJheUJ1ZmZlcih0ZXh0Lmxlbmd0aCAqIDIpO1xuICAgICAgICBjb25zdCBkYXRhVmlldyA9IG5ldyBEYXRhVmlldyhyZXMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRhdGFWaWV3LnNldFVpbnQxNihpICogMiwgdGV4dC5jaGFyQ29kZUF0KGkpLCBsaXR0bGVFbmRpYW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufVxuY2xhc3MgQ29udmVydCB7XG4gICAgc3RhdGljIGlzSGV4KGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSBTVFJJTkdfVFlQRVxuICAgICAgICAgICAgJiYgSEVYX1JFR0VYLnRlc3QoZGF0YSk7XG4gICAgfVxuICAgIHN0YXRpYyBpc0Jhc2U2NChkYXRhKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gU1RSSU5HX1RZUEVcbiAgICAgICAgICAgICYmIEJBU0U2NF9SRUdFWC50ZXN0KGRhdGEpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNCYXNlNjRVcmwoZGF0YSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09IFNUUklOR19UWVBFXG4gICAgICAgICAgICAmJiBCQVNFNjRVUkxfUkVHRVgudGVzdChkYXRhKTtcbiAgICB9XG4gICAgc3RhdGljIFRvU3RyaW5nKGJ1ZmZlciwgZW5jID0gXCJ1dGY4XCIpIHtcbiAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICBzd2l0Y2ggKGVuYy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwidXRmOFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRvVXRmOFN0cmluZyhidWYpO1xuICAgICAgICAgICAgY2FzZSBcImJpbmFyeVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRvQmluYXJ5KGJ1Zik7XG4gICAgICAgICAgICBjYXNlIFwiaGV4XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuVG9IZXgoYnVmKTtcbiAgICAgICAgICAgIGNhc2UgXCJiYXNlNjRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Ub0Jhc2U2NChidWYpO1xuICAgICAgICAgICAgY2FzZSBcImJhc2U2NHVybFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRvQmFzZTY0VXJsKGJ1Zik7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZsZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci50b1N0cmluZyhidWYsIHRydWUpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2XCI6XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZiZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci50b1N0cmluZyhidWYpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHlwZSBvZiBlbmNvZGluZyAnJHtlbmN9J2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tU3RyaW5nKHN0ciwgZW5jID0gXCJ1dGY4XCIpIHtcbiAgICAgICAgaWYgKCFzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChlbmMudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcInV0ZjhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Gcm9tVXRmOFN0cmluZyhzdHIpO1xuICAgICAgICAgICAgY2FzZSBcImJpbmFyeVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkZyb21CaW5hcnkoc3RyKTtcbiAgICAgICAgICAgIGNhc2UgXCJoZXhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Gcm9tSGV4KHN0cik7XG4gICAgICAgICAgICBjYXNlIFwiYmFzZTY0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRnJvbUJhc2U2NChzdHIpO1xuICAgICAgICAgICAgY2FzZSBcImJhc2U2NHVybFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkZyb21CYXNlNjRVcmwoc3RyKTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmxlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLmZyb21TdHJpbmcoc3RyLCB0cnVlKTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNlwiOlxuICAgICAgICAgICAgY2FzZSBcInV0ZjE2YmVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIuZnJvbVN0cmluZyhzdHIpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHlwZSBvZiBlbmNvZGluZyAnJHtlbmN9J2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBUb0Jhc2U2NChidWZmZXIpIHtcbiAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICBpZiAodHlwZW9mIGJ0b2EgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmFyeSA9IHRoaXMuVG9TdHJpbmcoYnVmLCBcImJpbmFyeVwiKTtcbiAgICAgICAgICAgIHJldHVybiBidG9hKGJpbmFyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYnVmKS50b1N0cmluZyhcImJhc2U2NFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgRnJvbUJhc2U2NChiYXNlNjQpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gdGhpcy5mb3JtYXRTdHJpbmcoYmFzZTY0KTtcbiAgICAgICAgaWYgKCFmb3JtYXR0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFDb252ZXJ0LmlzQmFzZTY0KGZvcm1hdHRlZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCAnYmFzZTY0VGV4dCcgaXMgbm90IEJhc2U2NCBlbmNvZGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXRvYiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuRnJvbUJpbmFyeShhdG9iKGZvcm1hdHRlZCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKGZvcm1hdHRlZCwgXCJiYXNlNjRcIikpLmJ1ZmZlcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgRnJvbUJhc2U2NFVybChiYXNlNjR1cmwpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gdGhpcy5mb3JtYXRTdHJpbmcoYmFzZTY0dXJsKTtcbiAgICAgICAgaWYgKCFmb3JtYXR0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFDb252ZXJ0LmlzQmFzZTY0VXJsKGZvcm1hdHRlZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCAnYmFzZTY0dXJsJyBpcyBub3QgQmFzZTY0VXJsIGVuY29kZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuRnJvbUJhc2U2NCh0aGlzLkJhc2U2NFBhZGRpbmcoZm9ybWF0dGVkLnJlcGxhY2UoL1xcLS9nLCBcIitcIikucmVwbGFjZSgvXFxfL2csIFwiL1wiKSkpO1xuICAgIH1cbiAgICBzdGF0aWMgVG9CYXNlNjRVcmwoZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5Ub0Jhc2U2NChkYXRhKS5yZXBsYWNlKC9cXCsvZywgXCItXCIpLnJlcGxhY2UoL1xcLy9nLCBcIl9cIikucmVwbGFjZSgvXFw9L2csIFwiXCIpO1xuICAgIH1cbiAgICBzdGF0aWMgRnJvbVV0ZjhTdHJpbmcodGV4dCwgZW5jb2RpbmcgPSBDb252ZXJ0LkRFRkFVTFRfVVRGOF9FTkNPRElORykge1xuICAgICAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICAgICAgICBjYXNlIFwiYXNjaWlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Gcm9tQmluYXJ5KHRleHQpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmOENvbnZlcnRlci5mcm9tU3RyaW5nKHRleHQpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2XCI6XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZiZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci5mcm9tU3RyaW5nKHRleHQpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2bGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1c2MyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLmZyb21TdHJpbmcodGV4dCwgdHJ1ZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlIG9mIGVuY29kaW5nICcke2VuY29kaW5nfSdgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgVG9VdGY4U3RyaW5nKGJ1ZmZlciwgZW5jb2RpbmcgPSBDb252ZXJ0LkRFRkFVTFRfVVRGOF9FTkNPRElORykge1xuICAgICAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICAgICAgICBjYXNlIFwiYXNjaWlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Ub0JpbmFyeShidWZmZXIpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmOENvbnZlcnRlci50b1N0cmluZyhidWZmZXIpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2XCI6XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZiZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci50b1N0cmluZyhidWZmZXIpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2bGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1c2MyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLnRvU3RyaW5nKGJ1ZmZlciwgdHJ1ZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlIG9mIGVuY29kaW5nICcke2VuY29kaW5nfSdgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgRnJvbUJpbmFyeSh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IHN0cmluZ0xlbmd0aCA9IHRleHQubGVuZ3RoO1xuICAgICAgICBjb25zdCByZXN1bHRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc3RyaW5nTGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmdMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmVzdWx0Vmlld1tpXSA9IHRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0Vmlldy5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBUb0JpbmFyeShidWZmZXIpIHtcbiAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICBsZXQgcmVzID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIFRvSGV4KGJ1ZmZlcikge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xuICAgICAgICBjb25zdCBsZW4gPSBidWYubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBieXRlID0gYnVmW2ldO1xuICAgICAgICAgICAgaWYgKGJ5dGUgPCAxNikge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBcIjBcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCArPSBieXRlLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBzdGF0aWMgRnJvbUhleChoZXhTdHJpbmcpIHtcbiAgICAgICAgbGV0IGZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0U3RyaW5nKGhleFN0cmluZyk7XG4gICAgICAgIGlmICghZm9ybWF0dGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghQ29udmVydC5pc0hleChmb3JtYXR0ZWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgJ2hleFN0cmluZycgaXMgbm90IEhFWCBlbmNvZGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXR0ZWQubGVuZ3RoICUgMikge1xuICAgICAgICAgICAgZm9ybWF0dGVkID0gYDAke2Zvcm1hdHRlZH1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KGZvcm1hdHRlZC5sZW5ndGggLyAyKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3JtYXR0ZWQubGVuZ3RoOyBpID0gaSArIDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBmb3JtYXR0ZWQuc2xpY2UoaSwgaSArIDIpO1xuICAgICAgICAgICAgcmVzW2kgLyAyXSA9IHBhcnNlSW50KGMsIDE2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIFRvVXRmMTZTdHJpbmcoYnVmZmVyLCBsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIudG9TdHJpbmcoYnVmZmVyLCBsaXR0bGVFbmRpYW4pO1xuICAgIH1cbiAgICBzdGF0aWMgRnJvbVV0ZjE2U3RyaW5nKHRleHQsIGxpdHRsZUVuZGlhbiA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci5mcm9tU3RyaW5nKHRleHQsIGxpdHRsZUVuZGlhbik7XG4gICAgfVxuICAgIHN0YXRpYyBCYXNlNjRQYWRkaW5nKGJhc2U2NCkge1xuICAgICAgICBjb25zdCBwYWRDb3VudCA9IDQgLSAoYmFzZTY0Lmxlbmd0aCAlIDQpO1xuICAgICAgICBpZiAocGFkQ291bnQgPCA0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhZENvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICBiYXNlNjQgKz0gXCI9XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJhc2U2NDtcbiAgICB9XG4gICAgc3RhdGljIGZvcm1hdFN0cmluZyhkYXRhKSB7XG4gICAgICAgIHJldHVybiAoZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkYXRhLnJlcGxhY2UoL1tcXG5cXHJcXHQgXS9nLCBcIlwiKSkgfHwgXCJcIjtcbiAgICB9XG59XG5Db252ZXJ0LkRFRkFVTFRfVVRGOF9FTkNPRElORyA9IFwidXRmOFwiO1xuXG5mdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCAuLi5zb3VyY2VzKSB7XG4gICAgY29uc3QgcmVzID0gYXJndW1lbnRzWzBdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIG9iaikge1xuICAgICAgICAgICAgcmVzW3Byb3BdID0gb2JqW3Byb3BdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBjb21iaW5lKC4uLmJ1Zikge1xuICAgIGNvbnN0IHRvdGFsQnl0ZUxlbmd0aCA9IGJ1Zi5tYXAoKGl0ZW0pID0+IGl0ZW0uYnl0ZUxlbmd0aCkucmVkdWNlKChwcmV2LCBjdXIpID0+IHByZXYgKyBjdXIpO1xuICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHRvdGFsQnl0ZUxlbmd0aCk7XG4gICAgbGV0IGN1cnJlbnRQb3MgPSAwO1xuICAgIGJ1Zi5tYXAoKGl0ZW0pID0+IG5ldyBVaW50OEFycmF5KGl0ZW0pKS5mb3JFYWNoKChhcnIpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtMiBvZiBhcnIpIHtcbiAgICAgICAgICAgIHJlc1tjdXJyZW50UG9zKytdID0gaXRlbTI7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzLmJ1ZmZlcjtcbn1cbmZ1bmN0aW9uIGlzRXF1YWwoYnl0ZXMxLCBieXRlczIpIHtcbiAgICBpZiAoIShieXRlczEgJiYgYnl0ZXMyKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChieXRlczEuYnl0ZUxlbmd0aCAhPT0gYnl0ZXMyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBiMSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzMSk7XG4gICAgY29uc3QgYjIgPSBuZXcgVWludDhBcnJheShieXRlczIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMxLmJ5dGVMZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYjFbaV0gIT09IGIyW2ldKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydHMuQnVmZmVyU291cmNlQ29udmVydGVyID0gQnVmZmVyU291cmNlQ29udmVydGVyO1xuZXhwb3J0cy5Db252ZXJ0ID0gQ29udmVydDtcbmV4cG9ydHMuYXNzaWduID0gYXNzaWduO1xuZXhwb3J0cy5jb21iaW5lID0gY29tYmluZTtcbmV4cG9ydHMuaXNFcXVhbCA9IGlzRXF1YWw7XG4iLCAiLyohXG4gQ29weXJpZ2h0IChjKSBQZWN1bGlhciBWZW50dXJlcywgTExDXG4qL1xuXG5mdW5jdGlvbiBnZXRVVENEYXRlKGRhdGUpIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSArIChkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCkpO1xyXG59XHJcbmZ1bmN0aW9uIGdldFBhcmFtZXRlcnNWYWx1ZShwYXJhbWV0ZXJzLCBuYW1lLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgIHZhciBfYTtcclxuICAgIGlmICgocGFyYW1ldGVycyBpbnN0YW5jZW9mIE9iamVjdCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiAoX2EgPSBwYXJhbWV0ZXJzW25hbWVdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBkZWZhdWx0VmFsdWU7XHJcbn1cclxuZnVuY3Rpb24gYnVmZmVyVG9IZXhDb2RlcyhpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQgPSAwLCBpbnB1dExlbmd0aCA9IChpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoIC0gaW5wdXRPZmZzZXQpLCBpbnNlcnRTcGFjZSA9IGZhbHNlKSB7XHJcbiAgICBsZXQgcmVzdWx0ID0gXCJcIjtcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiAobmV3IFVpbnQ4QXJyYXkoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyID0gaXRlbS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXN1bHQgKz0gXCIwXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdCArPSBzdHI7XHJcbiAgICAgICAgaWYgKGluc2VydFNwYWNlKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBcIiBcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0LnRyaW0oKTtcclxufVxyXG5mdW5jdGlvbiBjaGVja0J1ZmZlclBhcmFtcyhiYXNlQmxvY2ssIGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgIGlmICghKGlucHV0QnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0QnVmZmVyIG11c3QgYmUgXFxcIkFycmF5QnVmZmVyXFxcIlwiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICghaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dEJ1ZmZlciBoYXMgemVybyBsZW5ndGhcIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRPZmZzZXQgPCAwKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0T2Zmc2V0IGxlc3MgdGhhbiB6ZXJvXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0TGVuZ3RoIDwgMCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dExlbmd0aCBsZXNzIHRoYW4gemVyb1wiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICgoaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCAtIGlucHV0T2Zmc2V0IC0gaW5wdXRMZW5ndGgpIDwgMCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWQgKGluY29uc2lzdGVudCBvZmZzZXQgYW5kIGxlbmd0aCB2YWx1ZXMpXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuZnVuY3Rpb24gdXRpbEZyb21CYXNlKGlucHV0QnVmZmVyLCBpbnB1dEJhc2UpIHtcclxuICAgIGxldCByZXN1bHQgPSAwO1xyXG4gICAgaWYgKGlucHV0QnVmZmVyLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIHJldHVybiBpbnB1dEJ1ZmZlclswXTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAoaW5wdXRCdWZmZXIubGVuZ3RoIC0gMSk7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgcmVzdWx0ICs9IGlucHV0QnVmZmVyWyhpbnB1dEJ1ZmZlci5sZW5ndGggLSAxKSAtIGldICogTWF0aC5wb3coMiwgaW5wdXRCYXNlICogaSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcbmZ1bmN0aW9uIHV0aWxUb0Jhc2UodmFsdWUsIGJhc2UsIHJlc2VydmVkID0gKC0xKSkge1xyXG4gICAgY29uc3QgaW50ZXJuYWxSZXNlcnZlZCA9IHJlc2VydmVkO1xyXG4gICAgbGV0IGludGVybmFsVmFsdWUgPSB2YWx1ZTtcclxuICAgIGxldCByZXN1bHQgPSAwO1xyXG4gICAgbGV0IGJpZ2dlc3QgPSBNYXRoLnBvdygyLCBiYXNlKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlIDwgYmlnZ2VzdCkge1xyXG4gICAgICAgICAgICBsZXQgcmV0QnVmO1xyXG4gICAgICAgICAgICBpZiAoaW50ZXJuYWxSZXNlcnZlZCA8IDApIHtcclxuICAgICAgICAgICAgICAgIHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcihpKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxSZXNlcnZlZCA8IGkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5ldyBBcnJheUJ1ZmZlcigwKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIoaW50ZXJuYWxSZXNlcnZlZCk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpbnRlcm5hbFJlc2VydmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gKGkgLSAxKTsgaiA+PSAwOyBqLS0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2lzID0gTWF0aC5wb3coMiwgaiAqIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tyZXN1bHQgLSBqIC0gMV0gPSBNYXRoLmZsb29yKGludGVybmFsVmFsdWUgLyBiYXNpcyk7XHJcbiAgICAgICAgICAgICAgICBpbnRlcm5hbFZhbHVlIC09IChyZXRWaWV3W3Jlc3VsdCAtIGogLSAxXSkgKiBiYXNpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgICAgIH1cclxuICAgICAgICBiaWdnZXN0ICo9IE1hdGgucG93KDIsIGJhc2UpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcclxufVxyXG5mdW5jdGlvbiB1dGlsQ29uY2F0QnVmKC4uLmJ1ZmZlcnMpIHtcclxuICAgIGxldCBvdXRwdXRMZW5ndGggPSAwO1xyXG4gICAgbGV0IHByZXZMZW5ndGggPSAwO1xyXG4gICAgZm9yIChjb25zdCBidWZmZXIgb2YgYnVmZmVycykge1xyXG4gICAgICAgIG91dHB1dExlbmd0aCArPSBidWZmZXIuYnl0ZUxlbmd0aDtcclxuICAgIH1cclxuICAgIGNvbnN0IHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcihvdXRwdXRMZW5ndGgpO1xyXG4gICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiBidWZmZXJzKSB7XHJcbiAgICAgICAgcmV0Vmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSwgcHJldkxlbmd0aCk7XHJcbiAgICAgICAgcHJldkxlbmd0aCArPSBidWZmZXIuYnl0ZUxlbmd0aDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXRCdWY7XHJcbn1cclxuZnVuY3Rpb24gdXRpbENvbmNhdFZpZXcoLi4udmlld3MpIHtcclxuICAgIGxldCBvdXRwdXRMZW5ndGggPSAwO1xyXG4gICAgbGV0IHByZXZMZW5ndGggPSAwO1xyXG4gICAgZm9yIChjb25zdCB2aWV3IG9mIHZpZXdzKSB7XHJcbiAgICAgICAgb3V0cHV0TGVuZ3RoICs9IHZpZXcubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKG91dHB1dExlbmd0aCk7XHJcbiAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgIGZvciAoY29uc3QgdmlldyBvZiB2aWV3cykge1xyXG4gICAgICAgIHJldFZpZXcuc2V0KHZpZXcsIHByZXZMZW5ndGgpO1xyXG4gICAgICAgIHByZXZMZW5ndGggKz0gdmlldy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0VmlldztcclxufVxyXG5mdW5jdGlvbiB1dGlsRGVjb2RlVEMoKSB7XHJcbiAgICBjb25zdCBidWYgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlSGV4KTtcclxuICAgIGlmICh0aGlzLnZhbHVlSGV4LmJ5dGVMZW5ndGggPj0gMikge1xyXG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbjEgPSAoYnVmWzBdID09PSAweEZGKSAmJiAoYnVmWzFdICYgMHg4MCk7XHJcbiAgICAgICAgY29uc3QgY29uZGl0aW9uMiA9IChidWZbMF0gPT09IDB4MDApICYmICgoYnVmWzFdICYgMHg4MCkgPT09IDB4MDApO1xyXG4gICAgICAgIGlmIChjb25kaXRpb24xIHx8IGNvbmRpdGlvbjIpIHtcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiTmVlZGxlc3NseSBsb25nIGZvcm1hdFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBiaWdJbnRCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleC5ieXRlTGVuZ3RoKTtcclxuICAgIGNvbnN0IGJpZ0ludFZpZXcgPSBuZXcgVWludDhBcnJheShiaWdJbnRCdWZmZXIpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlSGV4LmJ5dGVMZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGJpZ0ludFZpZXdbaV0gPSAwO1xyXG4gICAgfVxyXG4gICAgYmlnSW50Vmlld1swXSA9IChidWZbMF0gJiAweDgwKTtcclxuICAgIGNvbnN0IGJpZ0ludCA9IHV0aWxGcm9tQmFzZShiaWdJbnRWaWV3LCA4KTtcclxuICAgIGNvbnN0IHNtYWxsSW50QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHRoaXMudmFsdWVIZXguYnl0ZUxlbmd0aCk7XHJcbiAgICBjb25zdCBzbWFsbEludFZpZXcgPSBuZXcgVWludDhBcnJheShzbWFsbEludEJ1ZmZlcik7XHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMudmFsdWVIZXguYnl0ZUxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgc21hbGxJbnRWaWV3W2pdID0gYnVmW2pdO1xyXG4gICAgfVxyXG4gICAgc21hbGxJbnRWaWV3WzBdICY9IDB4N0Y7XHJcbiAgICBjb25zdCBzbWFsbEludCA9IHV0aWxGcm9tQmFzZShzbWFsbEludFZpZXcsIDgpO1xyXG4gICAgcmV0dXJuIChzbWFsbEludCAtIGJpZ0ludCk7XHJcbn1cclxuZnVuY3Rpb24gdXRpbEVuY29kZVRDKHZhbHVlKSB7XHJcbiAgICBjb25zdCBtb2RWYWx1ZSA9ICh2YWx1ZSA8IDApID8gKHZhbHVlICogKC0xKSkgOiB2YWx1ZTtcclxuICAgIGxldCBiaWdJbnQgPSAxMjg7XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IDg7IGkrKykge1xyXG4gICAgICAgIGlmIChtb2RWYWx1ZSA8PSBiaWdJbnQpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc21hbGxJbnQgPSBiaWdJbnQgLSBtb2RWYWx1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldEJ1ZiA9IHV0aWxUb0Jhc2Uoc21hbGxJbnQsIDgsIGkpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3WzBdIHw9IDB4ODA7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCByZXRCdWYgPSB1dGlsVG9CYXNlKG1vZFZhbHVlLCA4LCBpKTtcclxuICAgICAgICAgICAgbGV0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgICAgICAgICBpZiAocmV0Vmlld1swXSAmIDB4ODApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBCdWYgPSByZXRCdWYuc2xpY2UoMCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wVmlldyA9IG5ldyBVaW50OEFycmF5KHRlbXBCdWYpO1xyXG4gICAgICAgICAgICAgICAgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKHJldEJ1Zi5ieXRlTGVuZ3RoICsgMSk7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGVtcEJ1Zi5ieXRlTGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICByZXRWaWV3W2sgKyAxXSA9IHRlbXBWaWV3W2tdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1swXSA9IDB4MDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYmlnSW50ICo9IE1hdGgucG93KDIsIDgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChuZXcgQXJyYXlCdWZmZXIoMCkpO1xyXG59XHJcbmZ1bmN0aW9uIGlzRXF1YWxCdWZmZXIoaW5wdXRCdWZmZXIxLCBpbnB1dEJ1ZmZlcjIpIHtcclxuICAgIGlmIChpbnB1dEJ1ZmZlcjEuYnl0ZUxlbmd0aCAhPT0gaW5wdXRCdWZmZXIyLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCB2aWV3MSA9IG5ldyBVaW50OEFycmF5KGlucHV0QnVmZmVyMSk7XHJcbiAgICBjb25zdCB2aWV3MiA9IG5ldyBVaW50OEFycmF5KGlucHV0QnVmZmVyMik7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZpZXcxLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHZpZXcxW2ldICE9PSB2aWV3MltpXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuZnVuY3Rpb24gcGFkTnVtYmVyKGlucHV0TnVtYmVyLCBmdWxsTGVuZ3RoKSB7XHJcbiAgICBjb25zdCBzdHIgPSBpbnB1dE51bWJlci50b1N0cmluZygxMCk7XHJcbiAgICBpZiAoZnVsbExlbmd0aCA8IHN0ci5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIGNvbnN0IGRpZiA9IGZ1bGxMZW5ndGggLSBzdHIubGVuZ3RoO1xyXG4gICAgY29uc3QgcGFkZGluZyA9IG5ldyBBcnJheShkaWYpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWY7IGkrKykge1xyXG4gICAgICAgIHBhZGRpbmdbaV0gPSBcIjBcIjtcclxuICAgIH1cclxuICAgIGNvbnN0IHBhZGRpbmdTdHJpbmcgPSBwYWRkaW5nLmpvaW4oXCJcIik7XHJcbiAgICByZXR1cm4gcGFkZGluZ1N0cmluZy5jb25jYXQoc3RyKTtcclxufVxyXG5jb25zdCBiYXNlNjRUZW1wbGF0ZSA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIjtcclxuY29uc3QgYmFzZTY0VXJsVGVtcGxhdGUgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV89XCI7XHJcbmZ1bmN0aW9uIHRvQmFzZTY0KGlucHV0LCB1c2VVcmxUZW1wbGF0ZSA9IGZhbHNlLCBza2lwUGFkZGluZyA9IGZhbHNlLCBza2lwTGVhZGluZ1plcm9zID0gZmFsc2UpIHtcclxuICAgIGxldCBpID0gMDtcclxuICAgIGxldCBmbGFnMSA9IDA7XHJcbiAgICBsZXQgZmxhZzIgPSAwO1xyXG4gICAgbGV0IG91dHB1dCA9IFwiXCI7XHJcbiAgICBjb25zdCB0ZW1wbGF0ZSA9ICh1c2VVcmxUZW1wbGF0ZSkgPyBiYXNlNjRVcmxUZW1wbGF0ZSA6IGJhc2U2NFRlbXBsYXRlO1xyXG4gICAgaWYgKHNraXBMZWFkaW5nWmVyb3MpIHtcclxuICAgICAgICBsZXQgbm9uWmVyb1Bvc2l0aW9uID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KGkpICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBub25aZXJvUG9zaXRpb24gPSBpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaW5wdXQgPSBpbnB1dC5zbGljZShub25aZXJvUG9zaXRpb24pO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKGkgPCBpbnB1dC5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBjaHIxID0gaW5wdXQuY2hhckNvZGVBdChpKyspO1xyXG4gICAgICAgIGlmIChpID49IGlucHV0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBmbGFnMSA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNocjIgPSBpbnB1dC5jaGFyQ29kZUF0KGkrKyk7XHJcbiAgICAgICAgaWYgKGkgPj0gaW5wdXQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZsYWcyID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2hyMyA9IGlucHV0LmNoYXJDb2RlQXQoaSsrKTtcclxuICAgICAgICBjb25zdCBlbmMxID0gY2hyMSA+PiAyO1xyXG4gICAgICAgIGNvbnN0IGVuYzIgPSAoKGNocjEgJiAweDAzKSA8PCA0KSB8IChjaHIyID4+IDQpO1xyXG4gICAgICAgIGxldCBlbmMzID0gKChjaHIyICYgMHgwRikgPDwgMikgfCAoY2hyMyA+PiA2KTtcclxuICAgICAgICBsZXQgZW5jNCA9IGNocjMgJiAweDNGO1xyXG4gICAgICAgIGlmIChmbGFnMSA9PT0gMSkge1xyXG4gICAgICAgICAgICBlbmMzID0gZW5jNCA9IDY0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGZsYWcyID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBlbmM0ID0gNjQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNraXBQYWRkaW5nKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmMzID09PSA2NCkge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGAke3RlbXBsYXRlLmNoYXJBdChlbmMxKX0ke3RlbXBsYXRlLmNoYXJBdChlbmMyKX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVuYzQgPT09IDY0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IGAke3RlbXBsYXRlLmNoYXJBdChlbmMxKX0ke3RlbXBsYXRlLmNoYXJBdChlbmMyKX0ke3RlbXBsYXRlLmNoYXJBdChlbmMzKX1gO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IGAke3RlbXBsYXRlLmNoYXJBdChlbmMxKX0ke3RlbXBsYXRlLmNoYXJBdChlbmMyKX0ke3RlbXBsYXRlLmNoYXJBdChlbmMzKX0ke3RlbXBsYXRlLmNoYXJBdChlbmM0KX1gO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBvdXRwdXQgKz0gYCR7dGVtcGxhdGUuY2hhckF0KGVuYzEpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzIpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzMpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzQpfWA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5mdW5jdGlvbiBmcm9tQmFzZTY0KGlucHV0LCB1c2VVcmxUZW1wbGF0ZSA9IGZhbHNlLCBjdXRUYWlsWmVyb3MgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgdGVtcGxhdGUgPSAodXNlVXJsVGVtcGxhdGUpID8gYmFzZTY0VXJsVGVtcGxhdGUgOiBiYXNlNjRUZW1wbGF0ZTtcclxuICAgIGZ1bmN0aW9uIGluZGV4T2YodG9TZWFyY2gpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY0OyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRlbXBsYXRlLmNoYXJBdChpKSA9PT0gdG9TZWFyY2gpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDY0O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdGVzdChpbmNvbWluZykge1xyXG4gICAgICAgIHJldHVybiAoKGluY29taW5nID09PSA2NCkgPyAweDAwIDogaW5jb21pbmcpO1xyXG4gICAgfVxyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgbGV0IG91dHB1dCA9IFwiXCI7XHJcbiAgICB3aGlsZSAoaSA8IGlucHV0Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGVuYzEgPSBpbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtcclxuICAgICAgICBjb25zdCBlbmMyID0gKGkgPj0gaW5wdXQubGVuZ3RoKSA/IDB4MDAgOiBpbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtcclxuICAgICAgICBjb25zdCBlbmMzID0gKGkgPj0gaW5wdXQubGVuZ3RoKSA/IDB4MDAgOiBpbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtcclxuICAgICAgICBjb25zdCBlbmM0ID0gKGkgPj0gaW5wdXQubGVuZ3RoKSA/IDB4MDAgOiBpbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtcclxuICAgICAgICBjb25zdCBjaHIxID0gKHRlc3QoZW5jMSkgPDwgMikgfCAodGVzdChlbmMyKSA+PiA0KTtcclxuICAgICAgICBjb25zdCBjaHIyID0gKCh0ZXN0KGVuYzIpICYgMHgwRikgPDwgNCkgfCAodGVzdChlbmMzKSA+PiAyKTtcclxuICAgICAgICBjb25zdCBjaHIzID0gKCh0ZXN0KGVuYzMpICYgMHgwMykgPDwgNikgfCB0ZXN0KGVuYzQpO1xyXG4gICAgICAgIG91dHB1dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjEpO1xyXG4gICAgICAgIGlmIChlbmMzICE9PSA2NCkge1xyXG4gICAgICAgICAgICBvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaHIyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVuYzQgIT09IDY0KSB7XHJcbiAgICAgICAgICAgIG91dHB1dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChjdXRUYWlsWmVyb3MpIHtcclxuICAgICAgICBjb25zdCBvdXRwdXRMZW5ndGggPSBvdXRwdXQubGVuZ3RoO1xyXG4gICAgICAgIGxldCBub25aZXJvU3RhcnQgPSAoLTEpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAob3V0cHV0TGVuZ3RoIC0gMSk7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIGlmIChvdXRwdXQuY2hhckNvZGVBdChpKSAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgbm9uWmVyb1N0YXJ0ID0gaTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub25aZXJvU3RhcnQgIT09ICgtMSkpIHtcclxuICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnNsaWNlKDAsIG5vblplcm9TdGFydCArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgb3V0cHV0ID0gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0cHV0O1xyXG59XHJcbmZ1bmN0aW9uIGFycmF5QnVmZmVyVG9TdHJpbmcoYnVmZmVyKSB7XHJcbiAgICBsZXQgcmVzdWx0U3RyaW5nID0gXCJcIjtcclxuICAgIGNvbnN0IHZpZXcgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xyXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHZpZXcpIHtcclxuICAgICAgICByZXN1bHRTdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShlbGVtZW50KTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRTdHJpbmc7XHJcbn1cclxuZnVuY3Rpb24gc3RyaW5nVG9BcnJheUJ1ZmZlcihzdHIpIHtcclxuICAgIGNvbnN0IHN0cmluZ0xlbmd0aCA9IHN0ci5sZW5ndGg7XHJcbiAgICBjb25zdCByZXN1bHRCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoc3RyaW5nTGVuZ3RoKTtcclxuICAgIGNvbnN0IHJlc3VsdFZpZXcgPSBuZXcgVWludDhBcnJheShyZXN1bHRCdWZmZXIpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmdMZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHJlc3VsdFZpZXdbaV0gPSBzdHIuY2hhckNvZGVBdChpKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRCdWZmZXI7XHJcbn1cclxuY29uc3QgbG9nMiA9IE1hdGgubG9nKDIpO1xyXG5mdW5jdGlvbiBuZWFyZXN0UG93ZXJPZjIobGVuZ3RoKSB7XHJcbiAgICBjb25zdCBiYXNlID0gKE1hdGgubG9nKGxlbmd0aCkgLyBsb2cyKTtcclxuICAgIGNvbnN0IGZsb29yID0gTWF0aC5mbG9vcihiYXNlKTtcclxuICAgIGNvbnN0IHJvdW5kID0gTWF0aC5yb3VuZChiYXNlKTtcclxuICAgIHJldHVybiAoKGZsb29yID09PSByb3VuZCkgPyBmbG9vciA6IHJvdW5kKTtcclxufVxyXG5mdW5jdGlvbiBjbGVhclByb3BzKG9iamVjdCwgcHJvcHNBcnJheSkge1xyXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BzQXJyYXkpIHtcclxuICAgICAgICBkZWxldGUgb2JqZWN0W3Byb3BdO1xyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IGFycmF5QnVmZmVyVG9TdHJpbmcsIGJ1ZmZlclRvSGV4Q29kZXMsIGNoZWNrQnVmZmVyUGFyYW1zLCBjbGVhclByb3BzLCBmcm9tQmFzZTY0LCBnZXRQYXJhbWV0ZXJzVmFsdWUsIGdldFVUQ0RhdGUsIGlzRXF1YWxCdWZmZXIsIG5lYXJlc3RQb3dlck9mMiwgcGFkTnVtYmVyLCBzdHJpbmdUb0FycmF5QnVmZmVyLCB0b0Jhc2U2NCwgdXRpbENvbmNhdEJ1ZiwgdXRpbENvbmNhdFZpZXcsIHV0aWxEZWNvZGVUQywgdXRpbEVuY29kZVRDLCB1dGlsRnJvbUJhc2UsIHV0aWxUb0Jhc2UgfTtcbiIsICIvKiFcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgR01PIEdsb2JhbFNpZ25cbiAqIENvcHlyaWdodCAoYykgMjAxNS0yMDIyLCBQZWN1bGlhciBWZW50dXJlc1xuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFxuICogQXV0aG9yIDIwMTQtMjAxOSwgWXVyeSBTdHJvemhldnNreVxuICogXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICogXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqIFxuICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiBcbiAqICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICogICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICogXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbiAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbiAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKiBcbiAqL1xuXG5pbXBvcnQgKiBhcyBwdnRzdXRpbHMgZnJvbSAncHZ0c3V0aWxzJztcbmltcG9ydCAqIGFzIHB2dXRpbHMgZnJvbSAncHZ1dGlscyc7XG5cbmZ1bmN0aW9uIGFzc2VydEJpZ0ludCgpIHtcclxuICAgIGlmICh0eXBlb2YgQmlnSW50ID09PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmlnSW50IGlzIG5vdCBkZWZpbmVkLiBZb3VyIGVudmlyb25tZW50IGRvZXNuJ3QgaW1wbGVtZW50IEJpZ0ludC5cIik7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY29uY2F0KGJ1ZmZlcnMpIHtcclxuICAgIGxldCBvdXRwdXRMZW5ndGggPSAwO1xyXG4gICAgbGV0IHByZXZMZW5ndGggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyID0gYnVmZmVyc1tpXTtcclxuICAgICAgICBvdXRwdXRMZW5ndGggKz0gYnVmZmVyLmJ5dGVMZW5ndGg7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkob3V0cHV0TGVuZ3RoKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmZmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGJ1ZmZlcnNbaV07XHJcbiAgICAgICAgcmV0Vmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSwgcHJldkxlbmd0aCk7XHJcbiAgICAgICAgcHJldkxlbmd0aCArPSBidWZmZXIuYnl0ZUxlbmd0aDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxufVxyXG5mdW5jdGlvbiBjaGVja0J1ZmZlclBhcmFtcyhiYXNlQmxvY2ssIGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgIGlmICghKGlucHV0QnVmZmVyIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRCdWZmZXIgbXVzdCBiZSAnVWludDhBcnJheSdcIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlucHV0QnVmZmVyLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRCdWZmZXIgaGFzIHplcm8gbGVuZ3RoXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0T2Zmc2V0IDwgMCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dE9mZnNldCBsZXNzIHRoYW4gemVyb1wiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dExlbmd0aCA8IDApIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRMZW5ndGggbGVzcyB0aGFuIHplcm9cIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoKGlucHV0QnVmZmVyLmJ5dGVMZW5ndGggLSBpbnB1dE9mZnNldCAtIGlucHV0TGVuZ3RoKSA8IDApIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIkVuZCBvZiBpbnB1dCByZWFjaGVkIGJlZm9yZSBtZXNzYWdlIHdhcyBmdWxseSBkZWNvZGVkIChpbmNvbnNpc3RlbnQgb2Zmc2V0IGFuZCBsZW5ndGggdmFsdWVzKVwiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XG5cbmNsYXNzIFZpZXdXcml0ZXIge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG4gICAgfVxyXG4gICAgd3JpdGUoYnVmKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGJ1Zik7XHJcbiAgICB9XHJcbiAgICBmaW5hbCgpIHtcclxuICAgICAgICByZXR1cm4gY29uY2F0KHRoaXMuaXRlbXMpO1xyXG4gICAgfVxyXG59XG5cbmNvbnN0IHBvd2VyczIgPSBbbmV3IFVpbnQ4QXJyYXkoWzFdKV07XHJcbmNvbnN0IGRpZ2l0c1N0cmluZyA9IFwiMDEyMzQ1Njc4OVwiO1xyXG5jb25zdCBOQU1FID0gXCJuYW1lXCI7XHJcbmNvbnN0IFZBTFVFX0hFWF9WSUVXID0gXCJ2YWx1ZUhleFZpZXdcIjtcclxuY29uc3QgSVNfSEVYX09OTFkgPSBcImlzSGV4T25seVwiO1xyXG5jb25zdCBJRF9CTE9DSyA9IFwiaWRCbG9ja1wiO1xyXG5jb25zdCBUQUdfQ0xBU1MgPSBcInRhZ0NsYXNzXCI7XHJcbmNvbnN0IFRBR19OVU1CRVIgPSBcInRhZ051bWJlclwiO1xyXG5jb25zdCBJU19DT05TVFJVQ1RFRCA9IFwiaXNDb25zdHJ1Y3RlZFwiO1xyXG5jb25zdCBGUk9NX0JFUiA9IFwiZnJvbUJFUlwiO1xyXG5jb25zdCBUT19CRVIgPSBcInRvQkVSXCI7XHJcbmNvbnN0IExPQ0FMID0gXCJsb2NhbFwiO1xyXG5jb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xyXG5jb25zdCBFTVBUWV9CVUZGRVIgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XHJcbmNvbnN0IEVNUFRZX1ZJRVcgPSBuZXcgVWludDhBcnJheSgwKTtcclxuY29uc3QgRU5EX09GX0NPTlRFTlRfTkFNRSA9IFwiRW5kT2ZDb250ZW50XCI7XHJcbmNvbnN0IE9DVEVUX1NUUklOR19OQU1FID0gXCJPQ1RFVCBTVFJJTkdcIjtcclxuY29uc3QgQklUX1NUUklOR19OQU1FID0gXCJCSVQgU1RSSU5HXCI7XG5cbmZ1bmN0aW9uIEhleEJsb2NrKEJhc2VDbGFzcykge1xyXG4gICAgdmFyIF9hO1xyXG4gICAgcmV0dXJuIF9hID0gY2xhc3MgU29tZSBleHRlbmRzIEJhc2VDbGFzcyB7XHJcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcclxuICAgICAgICAgICAgICAgIHZhciBfYTtcclxuICAgICAgICAgICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gYXJnc1swXSB8fCB7fTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gKF9hID0gcGFyYW1zLmlzSGV4T25seSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHBhcmFtcy52YWx1ZUhleCA/IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHBhcmFtcy52YWx1ZUhleCkgOiBFTVBUWV9WSUVXO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGdldCB2YWx1ZUhleCgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlSGV4Vmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXQgdmFsdWVIZXgodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmlldyA9IGlucHV0QnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgPyBuZXcgVWludDhBcnJheShpbnB1dEJ1ZmZlcikgOiBpbnB1dEJ1ZmZlcjtcclxuICAgICAgICAgICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgdmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGVuZExlbmd0aCA9IGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGVuZExlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlplcm8gYnVmZmVyIGxlbmd0aFwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gaW5wdXRMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5kTGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRvQkVSKHNpemVPbmx5ID0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJGbGFnICdpc0hleE9ubHknIGlzIG5vdCBzZXQsIGFib3J0XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzaXplT25seSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGggPT09IHRoaXMudmFsdWVIZXhWaWV3LmJ1ZmZlci5ieXRlTGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy52YWx1ZUhleFZpZXcuYnVmZmVyXHJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnZhbHVlSGV4Vmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzSGV4T25seTogdGhpcy5pc0hleE9ubHksXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVIZXg6IHB2dHN1dGlscy5Db252ZXJ0LlRvSGV4KHRoaXMudmFsdWVIZXhWaWV3KSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIF9hLk5BTUUgPSBcImhleEJsb2NrXCIsXHJcbiAgICAgICAgX2E7XHJcbn1cblxuY2xhc3MgTG9jYWxCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyBibG9ja0xlbmd0aCA9IDAsIGVycm9yID0gRU1QVFlfU1RSSU5HLCB3YXJuaW5ncyA9IFtdLCB2YWx1ZUJlZm9yZURlY29kZSA9IEVNUFRZX1ZJRVcsIH0gPSB7fSkge1xyXG4gICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBibG9ja0xlbmd0aDtcclxuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XHJcbiAgICAgICAgdGhpcy53YXJuaW5ncyA9IHdhcm5pbmdzO1xyXG4gICAgICAgIHRoaXMudmFsdWVCZWZvcmVEZWNvZGVWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkodmFsdWVCZWZvcmVEZWNvZGUpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGJsb2NrTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5OQU1FO1xyXG4gICAgfVxyXG4gICAgZ2V0IHZhbHVlQmVmb3JlRGVjb2RlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlQmVmb3JlRGVjb2RlVmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHNldCB2YWx1ZUJlZm9yZURlY29kZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCZWZvcmVEZWNvZGVWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGJsb2NrTmFtZTogdGhpcy5jb25zdHJ1Y3Rvci5OQU1FLFxyXG4gICAgICAgICAgICBibG9ja0xlbmd0aDogdGhpcy5ibG9ja0xlbmd0aCxcclxuICAgICAgICAgICAgZXJyb3I6IHRoaXMuZXJyb3IsXHJcbiAgICAgICAgICAgIHdhcm5pbmdzOiB0aGlzLndhcm5pbmdzLFxyXG4gICAgICAgICAgICB2YWx1ZUJlZm9yZURlY29kZTogcHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy52YWx1ZUJlZm9yZURlY29kZVZpZXcpLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxCYXNlQmxvY2suTkFNRSA9IFwiYmFzZUJsb2NrXCI7XG5cbmNsYXNzIFZhbHVlQmxvY2sgZXh0ZW5kcyBMb2NhbEJhc2VCbG9jayB7XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJVc2VyIG5lZWQgdG8gbWFrZSBhIHNwZWNpZmljIGZ1bmN0aW9uIGluIGEgY2xhc3Mgd2hpY2ggZXh0ZW5kcyAnVmFsdWVCbG9jaydcIik7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiVXNlciBuZWVkIHRvIG1ha2UgYSBzcGVjaWZpYyBmdW5jdGlvbiBpbiBhIGNsYXNzIHdoaWNoIGV4dGVuZHMgJ1ZhbHVlQmxvY2snXCIpO1xyXG4gICAgfVxyXG59XHJcblZhbHVlQmxvY2suTkFNRSA9IFwidmFsdWVCbG9ja1wiO1xuXG5jbGFzcyBMb2NhbElkZW50aWZpY2F0aW9uQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhMb2NhbEJhc2VCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyBpZEJsb2NrID0ge30sIH0gPSB7fSkge1xyXG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIGlmIChpZEJsb2NrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gKF9hID0gaWRCbG9jay5pc0hleE9ubHkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IGlkQmxvY2sudmFsdWVIZXggPyBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpZEJsb2NrLnZhbHVlSGV4KSA6IEVNUFRZX1ZJRVc7XHJcbiAgICAgICAgICAgIHRoaXMudGFnQ2xhc3MgPSAoX2IgPSBpZEJsb2NrLnRhZ0NsYXNzKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAtMTtcclxuICAgICAgICAgICAgdGhpcy50YWdOdW1iZXIgPSAoX2MgPSBpZEJsb2NrLnRhZ051bWJlcikgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogLTE7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb25zdHJ1Y3RlZCA9IChfZCA9IGlkQmxvY2suaXNDb25zdHJ1Y3RlZCkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRhZ0NsYXNzID0gLTE7XHJcbiAgICAgICAgICAgIHRoaXMudGFnTnVtYmVyID0gLTE7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb25zdHJ1Y3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5ID0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgZmlyc3RPY3RldCA9IDA7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnRhZ0NsYXNzKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIGZpcnN0T2N0ZXQgfD0gMHgwMDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICBmaXJzdE9jdGV0IHw9IDB4NDA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgZmlyc3RPY3RldCB8PSAweDgwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgIGZpcnN0T2N0ZXQgfD0gMHhDMDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiVW5rbm93biB0YWcgY2xhc3NcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzQ29uc3RydWN0ZWQpXHJcbiAgICAgICAgICAgIGZpcnN0T2N0ZXQgfD0gMHgyMDtcclxuICAgICAgICBpZiAodGhpcy50YWdOdW1iZXIgPCAzMSAmJiAhdGhpcy5pc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KDEpO1xyXG4gICAgICAgICAgICBpZiAoIXNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbnVtYmVyID0gdGhpcy50YWdOdW1iZXI7XHJcbiAgICAgICAgICAgICAgICBudW1iZXIgJj0gMHgxRjtcclxuICAgICAgICAgICAgICAgIGZpcnN0T2N0ZXQgfD0gbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1swXSA9IGZpcnN0T2N0ZXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRCdWYgPSBwdnV0aWxzLnV0aWxUb0Jhc2UodGhpcy50YWdOdW1iZXIsIDcpO1xyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkVmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWRCdWYpO1xyXG4gICAgICAgICAgICBjb25zdCBzaXplID0gZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSArIDEpO1xyXG4gICAgICAgICAgICByZXRWaWV3WzBdID0gKGZpcnN0T2N0ZXQgfCAweDFGKTtcclxuICAgICAgICAgICAgaWYgKCFzaXplT25seSkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAoc2l6ZSAtIDEpOyBpKyspXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0Vmlld1tpICsgMV0gPSBlbmNvZGVkVmlld1tpXSB8IDB4ODA7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W3NpemVdID0gZW5jb2RlZFZpZXdbc2l6ZSAtIDFdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGggKyAxKTtcclxuICAgICAgICByZXRWaWV3WzBdID0gKGZpcnN0T2N0ZXQgfCAweDFGKTtcclxuICAgICAgICBpZiAoIXNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1clZpZXcgPSB0aGlzLnZhbHVlSGV4VmlldztcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAoY3VyVmlldy5sZW5ndGggLSAxKTsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tpICsgMV0gPSBjdXJWaWV3W2ldIHwgMHg4MDtcclxuICAgICAgICAgICAgcmV0Vmlld1t0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoXSA9IGN1clZpZXdbY3VyVmlldy5sZW5ndGggLSAxXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgaW5wdXRWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgaW5wdXRWaWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW50QnVmZmVyID0gaW5wdXRWaWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBpZiAoaW50QnVmZmVyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJaZXJvIGJ1ZmZlciBsZW5ndGhcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0YWdDbGFzc01hc2sgPSBpbnRCdWZmZXJbMF0gJiAweEMwO1xyXG4gICAgICAgIHN3aXRjaCAodGFnQ2xhc3NNYXNrKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMHgwMDpcclxuICAgICAgICAgICAgICAgIHRoaXMudGFnQ2xhc3MgPSAoMSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAweDQwOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50YWdDbGFzcyA9ICgyKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDB4ODA6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ0NsYXNzID0gKDMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMHhDMDpcclxuICAgICAgICAgICAgICAgIHRoaXMudGFnQ2xhc3MgPSAoNCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlVua25vd24gdGFnIGNsYXNzXCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNDb25zdHJ1Y3RlZCA9IChpbnRCdWZmZXJbMF0gJiAweDIwKSA9PT0gMHgyMDtcclxuICAgICAgICB0aGlzLmlzSGV4T25seSA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IHRhZ051bWJlck1hc2sgPSBpbnRCdWZmZXJbMF0gJiAweDFGO1xyXG4gICAgICAgIGlmICh0YWdOdW1iZXJNYXNrICE9PSAweDFGKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFnTnVtYmVyID0gKHRhZ051bWJlck1hc2spO1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBjb3VudCA9IDE7XHJcbiAgICAgICAgICAgIGxldCBpbnRUYWdOdW1iZXJCdWZmZXIgPSB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KDI1NSk7XHJcbiAgICAgICAgICAgIGxldCB0YWdOdW1iZXJCdWZmZXJNYXhMZW5ndGggPSAyNTU7XHJcbiAgICAgICAgICAgIHdoaWxlIChpbnRCdWZmZXJbY291bnRdICYgMHg4MCkge1xyXG4gICAgICAgICAgICAgICAgaW50VGFnTnVtYmVyQnVmZmVyW2NvdW50IC0gMV0gPSBpbnRCdWZmZXJbY291bnRdICYgMHg3RjtcclxuICAgICAgICAgICAgICAgIGNvdW50Kys7XHJcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPj0gaW50QnVmZmVyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVuZCBvZiBpbnB1dCByZWFjaGVkIGJlZm9yZSBtZXNzYWdlIHdhcyBmdWxseSBkZWNvZGVkXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ID09PSB0YWdOdW1iZXJCdWZmZXJNYXhMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YWdOdW1iZXJCdWZmZXJNYXhMZW5ndGggKz0gMjU1O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBCdWZmZXJWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGFnTnVtYmVyQnVmZmVyTWF4TGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGludFRhZ051bWJlckJ1ZmZlci5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcEJ1ZmZlclZpZXdbaV0gPSBpbnRUYWdOdW1iZXJCdWZmZXJbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgaW50VGFnTnVtYmVyQnVmZmVyID0gdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheSh0YWdOdW1iZXJCdWZmZXJNYXhMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSAoY291bnQgKyAxKTtcclxuICAgICAgICAgICAgaW50VGFnTnVtYmVyQnVmZmVyW2NvdW50IC0gMV0gPSBpbnRCdWZmZXJbY291bnRdICYgMHg3RjtcclxuICAgICAgICAgICAgY29uc3QgdGVtcEJ1ZmZlclZpZXcgPSBuZXcgVWludDhBcnJheShjb3VudCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKylcclxuICAgICAgICAgICAgICAgIHRlbXBCdWZmZXJWaWV3W2ldID0gaW50VGFnTnVtYmVyQnVmZmVyW2ldO1xyXG4gICAgICAgICAgICBpbnRUYWdOdW1iZXJCdWZmZXIgPSB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KGNvdW50KTtcclxuICAgICAgICAgICAgaW50VGFnTnVtYmVyQnVmZmVyLnNldCh0ZW1wQnVmZmVyVmlldyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmJsb2NrTGVuZ3RoIDw9IDkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ051bWJlciA9IHB2dXRpbHMudXRpbEZyb21CYXNlKGludFRhZ051bWJlckJ1ZmZlciwgNyk7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiVGFnIHRvbyBsb25nLCByZXByZXNlbnRlZCBhcyBoZXgtY29kZWRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCgodGhpcy50YWdDbGFzcyA9PT0gMSkpICYmXHJcbiAgICAgICAgICAgICh0aGlzLmlzQ29uc3RydWN0ZWQpKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy50YWdOdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgICAgIGNhc2UgOTpcclxuICAgICAgICAgICAgICAgIGNhc2UgMTM6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE0OlxyXG4gICAgICAgICAgICAgICAgY2FzZSAyMzpcclxuICAgICAgICAgICAgICAgIGNhc2UgMjQ6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDMxOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAzMjpcclxuICAgICAgICAgICAgICAgIGNhc2UgMzM6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM0OlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkNvbnN0cnVjdGVkIGVuY29kaW5nIHVzZWQgZm9yIHByaW1pdGl2ZSB0eXBlXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyB0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdGFnQ2xhc3M6IHRoaXMudGFnQ2xhc3MsXHJcbiAgICAgICAgICAgIHRhZ051bWJlcjogdGhpcy50YWdOdW1iZXIsXHJcbiAgICAgICAgICAgIGlzQ29uc3RydWN0ZWQ6IHRoaXMuaXNDb25zdHJ1Y3RlZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsSWRlbnRpZmljYXRpb25CbG9jay5OQU1FID0gXCJpZGVudGlmaWNhdGlvbkJsb2NrXCI7XG5cbmNsYXNzIExvY2FsTGVuZ3RoQmxvY2sgZXh0ZW5kcyBMb2NhbEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGxlbkJsb2NrID0ge30sIH0gPSB7fSkge1xyXG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5pc0luZGVmaW5pdGVGb3JtID0gKF9hID0gbGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sb25nRm9ybVVzZWQgPSAoX2IgPSBsZW5CbG9jay5sb25nRm9ybVVzZWQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gKF9jID0gbGVuQmxvY2subGVuZ3RoKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAwO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKHRoaXMsIHZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnRCdWZmZXIgPSB2aWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBpZiAoaW50QnVmZmVyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJaZXJvIGJ1ZmZlciBsZW5ndGhcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW50QnVmZmVyWzBdID09PSAweEZGKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkxlbmd0aCBibG9jayAweEZGIGlzIHJlc2VydmVkIGJ5IHN0YW5kYXJkXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0luZGVmaW5pdGVGb3JtID0gaW50QnVmZmVyWzBdID09PSAweDgwO1xyXG4gICAgICAgIGlmICh0aGlzLmlzSW5kZWZpbml0ZUZvcm0pIHtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IDE7XHJcbiAgICAgICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyB0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb25nRm9ybVVzZWQgPSAhIShpbnRCdWZmZXJbMF0gJiAweDgwKTtcclxuICAgICAgICBpZiAodGhpcy5sb25nRm9ybVVzZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gKGludEJ1ZmZlclswXSk7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSAxO1xyXG4gICAgICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgdGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gaW50QnVmZmVyWzBdICYgMHg3RjtcclxuICAgICAgICBpZiAoY291bnQgPiA4KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlRvbyBiaWcgaW50ZWdlclwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoY291bnQgKyAxKSA+IGludEJ1ZmZlci5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWRcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBsZW5PZmZzZXQgPSBpbnB1dE9mZnNldCArIDE7XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoQnVmZmVyVmlldyA9IHZpZXcuc3ViYXJyYXkobGVuT2Zmc2V0LCBsZW5PZmZzZXQgKyBjb3VudCk7XHJcbiAgICAgICAgaWYgKGxlbmd0aEJ1ZmZlclZpZXdbY291bnQgLSAxXSA9PT0gMHgwMClcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiTmVlZGxlc3NseSBsb25nIGVuY29kZWQgbGVuZ3RoXCIpO1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gcHZ1dGlscy51dGlsRnJvbUJhc2UobGVuZ3RoQnVmZmVyVmlldywgOCk7XHJcbiAgICAgICAgaWYgKHRoaXMubG9uZ0Zvcm1Vc2VkICYmICh0aGlzLmxlbmd0aCA8PSAxMjcpKVxyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJVbm5lY2Vzc2FyeSB1c2FnZSBvZiBsb25nIGxlbmd0aCBmb3JtXCIpO1xyXG4gICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBjb3VudCArIDE7XHJcbiAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkgPSBmYWxzZSkge1xyXG4gICAgICAgIGxldCByZXRCdWY7XHJcbiAgICAgICAgbGV0IHJldFZpZXc7XHJcbiAgICAgICAgaWYgKHRoaXMubGVuZ3RoID4gMTI3KVxyXG4gICAgICAgICAgICB0aGlzLmxvbmdGb3JtVXNlZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbmRlZmluaXRlRm9ybSkge1xyXG4gICAgICAgICAgICByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIoMSk7XHJcbiAgICAgICAgICAgIGlmIChzaXplT25seSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1swXSA9IDB4ODA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubG9uZ0Zvcm1Vc2VkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRCdWYgPSBwdnV0aWxzLnV0aWxUb0Jhc2UodGhpcy5sZW5ndGgsIDgpO1xyXG4gICAgICAgICAgICBpZiAoZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoID4gMTI3KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJUb28gYmlnIGxlbmd0aFwiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChFTVBUWV9CVUZGRVIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcihlbmNvZGVkQnVmLmJ5dGVMZW5ndGggKyAxKTtcclxuICAgICAgICAgICAgaWYgKHNpemVPbmx5KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZFZpZXcgPSBuZXcgVWludDhBcnJheShlbmNvZGVkQnVmKTtcclxuICAgICAgICAgICAgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgIHJldFZpZXdbMF0gPSBlbmNvZGVkQnVmLmJ5dGVMZW5ndGggfCAweDgwO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVuY29kZWRCdWYuYnl0ZUxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tpICsgMV0gPSBlbmNvZGVkVmlld1tpXTtcclxuICAgICAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKDEpO1xyXG4gICAgICAgIGlmIChzaXplT25seSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgIHJldFZpZXdbMF0gPSB0aGlzLmxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgaXNJbmRlZmluaXRlRm9ybTogdGhpcy5pc0luZGVmaW5pdGVGb3JtLFxyXG4gICAgICAgICAgICBsb25nRm9ybVVzZWQ6IHRoaXMubG9uZ0Zvcm1Vc2VkLFxyXG4gICAgICAgICAgICBsZW5ndGg6IHRoaXMubGVuZ3RoLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxMZW5ndGhCbG9jay5OQU1FID0gXCJsZW5ndGhCbG9ja1wiO1xuXG5jb25zdCB0eXBlU3RvcmUgPSB7fTtcblxuY2xhc3MgQmFzZUJsb2NrIGV4dGVuZHMgTG9jYWxCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyBuYW1lID0gRU1QVFlfU1RSSU5HLCBvcHRpb25hbCA9IGZhbHNlLCBwcmltaXRpdmVTY2hlbWEsIC4uLnBhcmFtZXRlcnMgfSA9IHt9LCB2YWx1ZUJsb2NrVHlwZSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgdGhpcy5vcHRpb25hbCA9IG9wdGlvbmFsO1xyXG4gICAgICAgIGlmIChwcmltaXRpdmVTY2hlbWEpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmltaXRpdmVTY2hlbWEgPSBwcmltaXRpdmVTY2hlbWE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaWRCbG9jayA9IG5ldyBMb2NhbElkZW50aWZpY2F0aW9uQmxvY2socGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5sZW5CbG9jayA9IG5ldyBMb2NhbExlbmd0aEJsb2NrKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jayA9IHZhbHVlQmxvY2tUeXBlID8gbmV3IHZhbHVlQmxvY2tUeXBlKHBhcmFtZXRlcnMpIDogbmV3IFZhbHVlQmxvY2socGFyYW1ldGVycyk7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHRPZmZzZXQgPSB0aGlzLnZhbHVlQmxvY2suZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsICh0aGlzLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm0pID8gaW5wdXRMZW5ndGggOiB0aGlzLmxlbkJsb2NrLmxlbmd0aCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IHRoaXMudmFsdWVCbG9jay5lcnJvcjtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmlkQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMuaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICBpZiAoIXRoaXMubGVuQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMubGVuQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMudmFsdWVCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHksIHdyaXRlcikge1xyXG4gICAgICAgIGNvbnN0IF93cml0ZXIgPSB3cml0ZXIgfHwgbmV3IFZpZXdXcml0ZXIoKTtcclxuICAgICAgICBpZiAoIXdyaXRlcikge1xyXG4gICAgICAgICAgICBwcmVwYXJlSW5kZWZpbml0ZUZvcm0odGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlkQmxvY2tCdWYgPSB0aGlzLmlkQmxvY2sudG9CRVIoc2l6ZU9ubHkpO1xyXG4gICAgICAgIF93cml0ZXIud3JpdGUoaWRCbG9ja0J1Zik7XHJcbiAgICAgICAgaWYgKHRoaXMubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSkge1xyXG4gICAgICAgICAgICBfd3JpdGVyLndyaXRlKG5ldyBVaW50OEFycmF5KFsweDgwXSkuYnVmZmVyKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnRvQkVSKHNpemVPbmx5LCBfd3JpdGVyKTtcclxuICAgICAgICAgICAgX3dyaXRlci53cml0ZShuZXcgQXJyYXlCdWZmZXIoMikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVCbG9ja0J1ZiA9IHRoaXMudmFsdWVCbG9jay50b0JFUihzaXplT25seSk7XHJcbiAgICAgICAgICAgIHRoaXMubGVuQmxvY2subGVuZ3RoID0gdmFsdWVCbG9ja0J1Zi5ieXRlTGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBsZW5CbG9ja0J1ZiA9IHRoaXMubGVuQmxvY2sudG9CRVIoc2l6ZU9ubHkpO1xyXG4gICAgICAgICAgICBfd3JpdGVyLndyaXRlKGxlbkJsb2NrQnVmKTtcclxuICAgICAgICAgICAgX3dyaXRlci53cml0ZSh2YWx1ZUJsb2NrQnVmKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF3cml0ZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIF93cml0ZXIuZmluYWwoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICBjb25zdCBvYmplY3QgPSB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICBpZEJsb2NrOiB0aGlzLmlkQmxvY2sudG9KU09OKCksXHJcbiAgICAgICAgICAgIGxlbkJsb2NrOiB0aGlzLmxlbkJsb2NrLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZUJsb2NrOiB0aGlzLnZhbHVlQmxvY2sudG9KU09OKCksXHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcclxuICAgICAgICAgICAgb3B0aW9uYWw6IHRoaXMub3B0aW9uYWwsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodGhpcy5wcmltaXRpdmVTY2hlbWEpXHJcbiAgICAgICAgICAgIG9iamVjdC5wcmltaXRpdmVTY2hlbWEgPSB0aGlzLnByaW1pdGl2ZVNjaGVtYS50b0pTT04oKTtcclxuICAgICAgICByZXR1cm4gb2JqZWN0O1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoZW5jb2RpbmcgPSBcImFzY2lpXCIpIHtcclxuICAgICAgICBpZiAoZW5jb2RpbmcgPT09IFwiYXNjaWlcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vbkFzY2lpRW5jb2RpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHB2dHN1dGlscy5Db252ZXJ0LlRvSGV4KHRoaXMudG9CRVIoKSk7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke3B2dHN1dGlscy5Db252ZXJ0LlRvSGV4KHRoaXMudmFsdWVCbG9jay52YWx1ZUJlZm9yZURlY29kZVZpZXcpfWA7XHJcbiAgICB9XHJcbiAgICBpc0VxdWFsKG90aGVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMgPT09IG90aGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGhpc1JhdyA9IHRoaXMudG9CRVIoKTtcclxuICAgICAgICBjb25zdCBvdGhlclJhdyA9IG90aGVyLnRvQkVSKCk7XHJcbiAgICAgICAgcmV0dXJuIHB2dXRpbHMuaXNFcXVhbEJ1ZmZlcih0aGlzUmF3LCBvdGhlclJhdyk7XHJcbiAgICB9XHJcbn1cclxuQmFzZUJsb2NrLk5BTUUgPSBcIkJhc2VCbG9ja1wiO1xyXG5mdW5jdGlvbiBwcmVwYXJlSW5kZWZpbml0ZUZvcm0oYmFzZUJsb2NrKSB7XHJcbiAgICBpZiAoYmFzZUJsb2NrIGluc3RhbmNlb2YgdHlwZVN0b3JlLkNvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBiYXNlQmxvY2sudmFsdWVCbG9jay52YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAocHJlcGFyZUluZGVmaW5pdGVGb3JtKHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgYmFzZUJsb2NrLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm0gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICEhYmFzZUJsb2NrLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm07XHJcbn1cblxuY2xhc3MgQmFzZVN0cmluZ0Jsb2NrIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUgPSBFTVBUWV9TVFJJTkcsIC4uLnBhcmFtZXRlcnMgfSA9IHt9LCBzdHJpbmdWYWx1ZUJsb2NrVHlwZSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIHN0cmluZ1ZhbHVlQmxvY2tUeXBlKTtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXRWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUJsb2NrLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0VmFsdWUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdE9mZnNldCA9IHRoaXMudmFsdWVCbG9jay5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgKHRoaXMubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSkgPyBpbnB1dExlbmd0aCA6IHRoaXMubGVuQmxvY2subGVuZ3RoKTtcclxuICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gdGhpcy52YWx1ZUJsb2NrLmVycm9yO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZyb21CdWZmZXIodGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlkQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMuaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICBpZiAoIXRoaXMubGVuQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMubGVuQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMudmFsdWVCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJyR7dGhpcy52YWx1ZUJsb2NrLnZhbHVlfSdgO1xyXG4gICAgfVxyXG59XHJcbkJhc2VTdHJpbmdCbG9jay5OQU1FID0gXCJCYXNlU3RyaW5nQmxvY2tcIjtcblxuY2xhc3MgTG9jYWxQcmltaXRpdmVWYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soVmFsdWVCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyBpc0hleE9ubHkgPSB0cnVlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gaXNIZXhPbmx5O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsUHJpbWl0aXZlVmFsdWVCbG9jay5OQU1FID0gXCJQcmltaXRpdmVWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSR3O1xyXG5jbGFzcyBQcmltaXRpdmUgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgTG9jYWxQcmltaXRpdmVWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2suaXNDb25zdHJ1Y3RlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbl9hJHcgPSBQcmltaXRpdmU7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuUHJpbWl0aXZlID0gX2EkdztcclxufSkoKTtcclxuUHJpbWl0aXZlLk5BTUUgPSBcIlBSSU1JVElWRVwiO1xuXG5mdW5jdGlvbiBsb2NhbENoYW5nZVR5cGUoaW5wdXRPYmplY3QsIG5ld1R5cGUpIHtcclxuICAgIGlmIChpbnB1dE9iamVjdCBpbnN0YW5jZW9mIG5ld1R5cGUpIHtcclxuICAgICAgICByZXR1cm4gaW5wdXRPYmplY3Q7XHJcbiAgICB9XHJcbiAgICBjb25zdCBuZXdPYmplY3QgPSBuZXcgbmV3VHlwZSgpO1xyXG4gICAgbmV3T2JqZWN0LmlkQmxvY2sgPSBpbnB1dE9iamVjdC5pZEJsb2NrO1xyXG4gICAgbmV3T2JqZWN0LmxlbkJsb2NrID0gaW5wdXRPYmplY3QubGVuQmxvY2s7XHJcbiAgICBuZXdPYmplY3Qud2FybmluZ3MgPSBpbnB1dE9iamVjdC53YXJuaW5ncztcclxuICAgIG5ld09iamVjdC52YWx1ZUJlZm9yZURlY29kZVZpZXcgPSBpbnB1dE9iamVjdC52YWx1ZUJlZm9yZURlY29kZVZpZXc7XHJcbiAgICByZXR1cm4gbmV3T2JqZWN0O1xyXG59XHJcbmZ1bmN0aW9uIGxvY2FsRnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQgPSAwLCBpbnB1dExlbmd0aCA9IGlucHV0QnVmZmVyLmxlbmd0aCkge1xyXG4gICAgY29uc3QgaW5jb21pbmdPZmZzZXQgPSBpbnB1dE9mZnNldDtcclxuICAgIGxldCByZXR1cm5PYmplY3QgPSBuZXcgQmFzZUJsb2NrKHt9LCBWYWx1ZUJsb2NrKTtcclxuICAgIGNvbnN0IGJhc2VCbG9jayA9IG5ldyBMb2NhbEJhc2VCbG9jaygpO1xyXG4gICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyhiYXNlQmxvY2ssIGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0LmVycm9yID0gYmFzZUJsb2NrLmVycm9yO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IGludEJ1ZmZlciA9IGlucHV0QnVmZmVyLnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgIGlmICghaW50QnVmZmVyLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IFwiWmVybyBidWZmZXIgbGVuZ3RoXCI7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgbGV0IHJlc3VsdE9mZnNldCA9IHJldHVybk9iamVjdC5pZEJsb2NrLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICBpZiAocmV0dXJuT2JqZWN0LmlkQmxvY2sud2FybmluZ3MubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0Lndhcm5pbmdzLmNvbmNhdChyZXR1cm5PYmplY3QuaWRCbG9jay53YXJuaW5ncyk7XHJcbiAgICB9XHJcbiAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IHJldHVybk9iamVjdC5pZEJsb2NrLmVycm9yO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlucHV0T2Zmc2V0ID0gcmVzdWx0T2Zmc2V0O1xyXG4gICAgaW5wdXRMZW5ndGggLT0gcmV0dXJuT2JqZWN0LmlkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICByZXN1bHRPZmZzZXQgPSByZXR1cm5PYmplY3QubGVuQmxvY2suZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgIGlmIChyZXR1cm5PYmplY3QubGVuQmxvY2sud2FybmluZ3MubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0Lndhcm5pbmdzLmNvbmNhdChyZXR1cm5PYmplY3QubGVuQmxvY2sud2FybmluZ3MpO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSByZXR1cm5PYmplY3QubGVuQmxvY2suZXJyb3I7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaW5wdXRPZmZzZXQgPSByZXN1bHRPZmZzZXQ7XHJcbiAgICBpbnB1dExlbmd0aCAtPSByZXR1cm5PYmplY3QubGVuQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICBpZiAoIXJldHVybk9iamVjdC5pZEJsb2NrLmlzQ29uc3RydWN0ZWQgJiZcclxuICAgICAgICByZXR1cm5PYmplY3QubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSkge1xyXG4gICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IFwiSW5kZWZpbml0ZSBsZW5ndGggZm9ybSB1c2VkIGZvciBwcmltaXRpdmUgZW5jb2RpbmcgZm9ybVwiO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGxldCBuZXdBU04xVHlwZSA9IEJhc2VCbG9jaztcclxuICAgIHN3aXRjaCAocmV0dXJuT2JqZWN0LmlkQmxvY2sudGFnQ2xhc3MpIHtcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIGlmICgocmV0dXJuT2JqZWN0LmlkQmxvY2sudGFnTnVtYmVyID49IDM3KSAmJlxyXG4gICAgICAgICAgICAgICAgKHJldHVybk9iamVjdC5pZEJsb2NrLmlzSGV4T25seSA9PT0gZmFsc2UpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSBcIlVOSVZFUlNBTCAzNyBhbmQgdXBwZXIgdGFncyBhcmUgcmVzZXJ2ZWQgYnkgQVNOLjEgc3RhbmRhcmRcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzd2l0Y2ggKHJldHVybk9iamVjdC5pZEJsb2NrLnRhZ051bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgocmV0dXJuT2JqZWN0LmlkQmxvY2suaXNDb25zdHJ1Y3RlZCkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHJldHVybk9iamVjdC5sZW5CbG9jay5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSBcIlR5cGUgW1VOSVZFUlNBTCAwXSBpcyByZXNlcnZlZFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkVuZE9mQ29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5Cb29sZWFuO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkludGVnZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuQml0U3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLk9jdGV0U3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLk51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuT2JqZWN0SWRlbnRpZmllcjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuRW51bWVyYXRlZDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTI6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVXRmOFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTM6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxNDpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5USU1FO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxNTpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSBcIltVTklWRVJTQUwgMTVdIGlzIHJlc2VydmVkIGJ5IEFTTi4xIHN0YW5kYXJkXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxNjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5TZXF1ZW5jZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTc6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuU2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxODpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5OdW1lcmljU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOTpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5QcmludGFibGVTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDIwOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlRlbGV0ZXhTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDIxOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlZpZGVvdGV4U3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyMjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5JQTVTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDIzOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlVUQ1RpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI0OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkdlbmVyYWxpemVkVGltZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjU6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuR3JhcGhpY1N0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjY6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVmlzaWJsZVN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjc6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuR2VuZXJhbFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjg6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVW5pdmVyc2FsU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOTpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5DaGFyYWN0ZXJTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDMwOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkJtcFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzE6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuREFURTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzI6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVGltZU9mRGF5O1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzMzpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5EYXRlVGltZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzQ6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuRHVyYXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3T2JqZWN0ID0gcmV0dXJuT2JqZWN0LmlkQmxvY2suaXNDb25zdHJ1Y3RlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyB0eXBlU3RvcmUuQ29uc3RydWN0ZWQoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyB0eXBlU3RvcmUuUHJpbWl0aXZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3T2JqZWN0LmlkQmxvY2sgPSByZXR1cm5PYmplY3QuaWRCbG9jaztcclxuICAgICAgICAgICAgICAgICAgICBuZXdPYmplY3QubGVuQmxvY2sgPSByZXR1cm5PYmplY3QubGVuQmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3T2JqZWN0Lndhcm5pbmdzID0gcmV0dXJuT2JqZWN0Lndhcm5pbmdzO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybk9iamVjdCA9IG5ld09iamVjdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgIGNhc2UgNDpcclxuICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gcmV0dXJuT2JqZWN0LmlkQmxvY2suaXNDb25zdHJ1Y3RlZFxyXG4gICAgICAgICAgICAgICAgPyB0eXBlU3RvcmUuQ29uc3RydWN0ZWRcclxuICAgICAgICAgICAgICAgIDogdHlwZVN0b3JlLlByaW1pdGl2ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm5PYmplY3QgPSBsb2NhbENoYW5nZVR5cGUocmV0dXJuT2JqZWN0LCBuZXdBU04xVHlwZSk7XHJcbiAgICByZXN1bHRPZmZzZXQgPSByZXR1cm5PYmplY3QuZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIHJldHVybk9iamVjdC5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtID8gaW5wdXRMZW5ndGggOiByZXR1cm5PYmplY3QubGVuQmxvY2subGVuZ3RoKTtcclxuICAgIHJldHVybk9iamVjdC52YWx1ZUJlZm9yZURlY29kZVZpZXcgPSBpbnB1dEJ1ZmZlci5zdWJhcnJheShpbmNvbWluZ09mZnNldCwgaW5jb21pbmdPZmZzZXQgKyByZXR1cm5PYmplY3QuYmxvY2tMZW5ndGgpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBvZmZzZXQ6IHJlc3VsdE9mZnNldCxcclxuICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBmcm9tQkVSKGlucHV0QnVmZmVyKSB7XHJcbiAgICBpZiAoIWlucHV0QnVmZmVyLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgQmFzZUJsb2NrKHt9LCBWYWx1ZUJsb2NrKTtcclxuICAgICAgICByZXN1bHQuZXJyb3IgPSBcIklucHV0IGJ1ZmZlciBoYXMgemVybyBsZW5ndGhcIjtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICByZXN1bHRcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxvY2FsRnJvbUJFUihwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcikuc2xpY2UoKSwgMCwgaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCk7XHJcbn1cblxuZnVuY3Rpb24gY2hlY2tMZW4oaW5kZWZpbml0ZUxlbmd0aCwgbGVuZ3RoKSB7XHJcbiAgICBpZiAoaW5kZWZpbml0ZUxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxlbmd0aDtcclxufVxyXG5jbGFzcyBMb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jayBleHRlbmRzIFZhbHVlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSA9IFtdLCBpc0luZGVmaW5pdGVGb3JtID0gZmFsc2UsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuaXNJbmRlZmluaXRlRm9ybSA9IGlzSW5kZWZpbml0ZUZvcm07XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCB2aWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgdmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVCZWZvcmVEZWNvZGVWaWV3ID0gdmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVCZWZvcmVEZWNvZGVWaWV3Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJaZXJvIGJ1ZmZlciBsZW5ndGhcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGN1cnJlbnRPZmZzZXQgPSBpbnB1dE9mZnNldDtcclxuICAgICAgICB3aGlsZSAoY2hlY2tMZW4odGhpcy5pc0luZGVmaW5pdGVGb3JtLCBpbnB1dExlbmd0aCkgPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldHVybk9iamVjdCA9IGxvY2FsRnJvbUJFUih2aWV3LCBjdXJyZW50T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZXR1cm5PYmplY3Qub2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IHJldHVybk9iamVjdC5yZXN1bHQuZXJyb3I7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndhcm5pbmdzLmNvbmNhdChyZXR1cm5PYmplY3QucmVzdWx0Lndhcm5pbmdzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjdXJyZW50T2Zmc2V0ID0gcmV0dXJuT2JqZWN0Lm9mZnNldDtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSByZXR1cm5PYmplY3QucmVzdWx0LmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICBpbnB1dExlbmd0aCAtPSByZXR1cm5PYmplY3QucmVzdWx0LmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlLnB1c2gocmV0dXJuT2JqZWN0LnJlc3VsdCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSW5kZWZpbml0ZUZvcm0gJiYgcmV0dXJuT2JqZWN0LnJlc3VsdC5jb25zdHJ1Y3Rvci5OQU1FID09PSBFTkRfT0ZfQ09OVEVOVF9OQU1FKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc0luZGVmaW5pdGVGb3JtKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlW3RoaXMudmFsdWUubGVuZ3RoIC0gMV0uY29uc3RydWN0b3IuTkFNRSA9PT0gRU5EX09GX0NPTlRFTlRfTkFNRSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZS5wb3AoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIk5vIEVuZE9mQ29udGVudCBibG9jayBlbmNvZGVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdXJyZW50T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHksIHdyaXRlcikge1xyXG4gICAgICAgIGNvbnN0IF93cml0ZXIgPSB3cml0ZXIgfHwgbmV3IFZpZXdXcml0ZXIoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZVtpXS50b0JFUihzaXplT25seSwgX3dyaXRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghd3JpdGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfd3JpdGVyLmZpbmFsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgaXNJbmRlZmluaXRlRm9ybTogdGhpcy5pc0luZGVmaW5pdGVGb3JtLFxyXG4gICAgICAgICAgICB2YWx1ZTogW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgICAgb2JqZWN0LnZhbHVlLnB1c2godmFsdWUudG9KU09OKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2JqZWN0O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrLk5BTUUgPSBcIkNvbnN0cnVjdGVkVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkdjtcclxuY2xhc3MgQ29uc3RydWN0ZWQgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay5pc0NvbnN0cnVjdGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5pc0luZGVmaW5pdGVGb3JtID0gdGhpcy5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdE9mZnNldCA9IHRoaXMudmFsdWVCbG9jay5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgKHRoaXMubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSkgPyBpbnB1dExlbmd0aCA6IHRoaXMubGVuQmxvY2subGVuZ3RoKTtcclxuICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gdGhpcy52YWx1ZUJsb2NrLmVycm9yO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuaWRCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5pZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy5sZW5CbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5sZW5CbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICBpZiAoIXRoaXMudmFsdWVCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy52YWx1ZUJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWVzID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLnZhbHVlQmxvY2sudmFsdWUpIHtcclxuICAgICAgICAgICAgdmFsdWVzLnB1c2godmFsdWUudG9TdHJpbmcoXCJhc2NpaVwiKS5zcGxpdChcIlxcblwiKS5tYXAobyA9PiBgICAke299YCkuam9pbihcIlxcblwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJsb2NrTmFtZSA9IHRoaXMuaWRCbG9jay50YWdDbGFzcyA9PT0gM1xyXG4gICAgICAgICAgICA/IGBbJHt0aGlzLmlkQmxvY2sudGFnTnVtYmVyfV1gXHJcbiAgICAgICAgICAgIDogdGhpcy5jb25zdHJ1Y3Rvci5OQU1FO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgICAgID8gYCR7YmxvY2tOYW1lfSA6XFxuJHt2YWx1ZXMuam9pbihcIlxcblwiKX1gXHJcbiAgICAgICAgICAgIDogYCR7YmxvY2tOYW1lfSA6YDtcclxuICAgIH1cclxufVxyXG5fYSR2ID0gQ29uc3RydWN0ZWQ7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuQ29uc3RydWN0ZWQgPSBfYSR2O1xyXG59KSgpO1xyXG5Db25zdHJ1Y3RlZC5OQU1FID0gXCJDT05TVFJVQ1RFRFwiO1xuXG5jbGFzcyBMb2NhbEVuZE9mQ29udGVudFZhbHVlQmxvY2sgZXh0ZW5kcyBWYWx1ZUJsb2NrIHtcclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5KSB7XHJcbiAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgIH1cclxufVxyXG5Mb2NhbEVuZE9mQ29udGVudFZhbHVlQmxvY2sub3ZlcnJpZGUgPSBcIkVuZE9mQ29udGVudFZhbHVlQmxvY2tcIjtcblxudmFyIF9hJHU7XHJcbmNsYXNzIEVuZE9mQ29udGVudCBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbEVuZE9mQ29udGVudFZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDA7XHJcbiAgICB9XHJcbn1cclxuX2EkdSA9IEVuZE9mQ29udGVudDtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5FbmRPZkNvbnRlbnQgPSBfYSR1O1xyXG59KSgpO1xyXG5FbmRPZkNvbnRlbnQuTkFNRSA9IEVORF9PRl9DT05URU5UX05BTUU7XG5cbnZhciBfYSR0O1xyXG5jbGFzcyBOdWxsIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIFZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDU7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBpZiAodGhpcy5sZW5CbG9jay5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJOb24temVybyBsZW5ndGggb2YgdmFsdWUgYmxvY2sgZm9yIE51bGwgdHlwZVwiKTtcclxuICAgICAgICBpZiAoIXRoaXMuaWRCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5pZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy5sZW5CbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5sZW5CbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IGlucHV0TGVuZ3RoO1xyXG4gICAgICAgIGlmICgoaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCkgPiBpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVuZCBvZiBpbnB1dCByZWFjaGVkIGJlZm9yZSBtZXNzYWdlIHdhcyBmdWxseSBkZWNvZGVkIChpbmNvbnNpc3RlbnQgb2Zmc2V0IGFuZCBsZW5ndGggdmFsdWVzKVwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgY29uc3QgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKDIpO1xyXG4gICAgICAgIGlmICghc2l6ZU9ubHkpIHtcclxuICAgICAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgIHJldFZpZXdbMF0gPSAweDA1O1xyXG4gICAgICAgICAgICByZXRWaWV3WzFdID0gMHgwMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHdyaXRlcikge1xyXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUocmV0QnVmKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfWA7XHJcbiAgICB9XHJcbn1cclxuX2EkdCA9IE51bGw7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuTnVsbCA9IF9hJHQ7XHJcbn0pKCk7XHJcbk51bGwuTkFNRSA9IFwiTlVMTFwiO1xuXG5jbGFzcyBMb2NhbEJvb2xlYW5WYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soVmFsdWVCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICBpZiAocGFyYW1ldGVycy52YWx1ZUhleCkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHBhcmFtZXRlcnMudmFsdWVIZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheSgxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsdWUoKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBvY3RldCBvZiB0aGlzLnZhbHVlSGV4Vmlldykge1xyXG4gICAgICAgICAgICBpZiAob2N0ZXQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBzZXQgdmFsdWUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlSGV4Vmlld1swXSA9IHZhbHVlID8gMHhGRiA6IDB4MDA7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBpbnB1dFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCBpbnB1dFZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IGlucHV0Vmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgaWYgKGlucHV0TGVuZ3RoID4gMSlcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiQm9vbGVhbiB2YWx1ZSBlbmNvZGVkIGluIG1vcmUgdGhlbiAxIG9jdGV0XCIpO1xyXG4gICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gdHJ1ZTtcclxuICAgICAgICBwdnV0aWxzLnV0aWxEZWNvZGVUQy5jYWxsKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBpbnB1dExlbmd0aDtcclxuICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVIZXhWaWV3LnNsaWNlKCk7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxCb29sZWFuVmFsdWVCbG9jay5OQU1FID0gXCJCb29sZWFuVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkcztcclxuY2xhc3MgQm9vbGVhbiBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbEJvb2xlYW5WYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxO1xyXG4gICAgfVxyXG4gICAgZ2V0VmFsdWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVCbG9jay52YWx1ZTtcclxuICAgIH1cclxuICAgIHNldFZhbHVlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke3RoaXMuZ2V0VmFsdWV9YDtcclxuICAgIH1cclxufVxyXG5fYSRzID0gQm9vbGVhbjtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5Cb29sZWFuID0gX2EkcztcclxufSkoKTtcclxuQm9vbGVhbi5OQU1FID0gXCJCT09MRUFOXCI7XG5cbmNsYXNzIExvY2FsT2N0ZXRTdHJpbmdWYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgaXNDb25zdHJ1Y3RlZCA9IGZhbHNlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaXNDb25zdHJ1Y3RlZCA9IGlzQ29uc3RydWN0ZWQ7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBsZXQgcmVzdWx0T2Zmc2V0ID0gMDtcclxuICAgICAgICBpZiAodGhpcy5pc0NvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJlc3VsdE9mZnNldCA9IExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrLnByb3RvdHlwZS5mcm9tQkVSLmNhbGwodGhpcywgaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50QmxvY2tOYW1lID0gdGhpcy52YWx1ZVtpXS5jb25zdHJ1Y3Rvci5OQU1FO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRCbG9ja05hbWUgPT09IEVORF9PRl9DT05URU5UX05BTUUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0luZGVmaW5pdGVGb3JtKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kT2ZDb250ZW50IGlzIHVuZXhwZWN0ZWQsIE9DVEVUIFNUUklORyBtYXkgY29uc2lzdHMgb2YgT0NURVQgU1RSSU5HcyBvbmx5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEJsb2NrTmFtZSAhPT0gT0NURVRfU1RSSU5HX05BTUUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJPQ1RFVCBTVFJJTkcgbWF5IGNvbnNpc3RzIG9mIE9DVEVUIFNUUklOR3Mgb25seVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXN1bHRPZmZzZXQgPSBzdXBlci5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gaW5wdXRMZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb25zdHJ1Y3RlZClcclxuICAgICAgICAgICAgcmV0dXJuIExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrLnByb3RvdHlwZS50b0JFUi5jYWxsKHRoaXMsIHNpemVPbmx5LCB3cml0ZXIpO1xyXG4gICAgICAgIHJldHVybiBzaXplT25seVxyXG4gICAgICAgICAgICA/IG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoKVxyXG4gICAgICAgICAgICA6IHRoaXMudmFsdWVIZXhWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICBpc0NvbnN0cnVjdGVkOiB0aGlzLmlzQ29uc3RydWN0ZWQsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbE9jdGV0U3RyaW5nVmFsdWVCbG9jay5OQU1FID0gXCJPY3RldFN0cmluZ1ZhbHVlQmxvY2tcIjtcblxudmFyIF9hJHI7XHJcbmNsYXNzIE9jdGV0U3RyaW5nIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgaWRCbG9jayA9IHt9LCBsZW5CbG9jayA9IHt9LCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHZhciBfYiwgX2M7XHJcbiAgICAgICAgKF9iID0gcGFyYW1ldGVycy5pc0NvbnN0cnVjdGVkKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAocGFyYW1ldGVycy5pc0NvbnN0cnVjdGVkID0gISEoKF9jID0gcGFyYW1ldGVycy52YWx1ZSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCkpO1xyXG4gICAgICAgIHN1cGVyKHtcclxuICAgICAgICAgICAgaWRCbG9jazoge1xyXG4gICAgICAgICAgICAgICAgaXNDb25zdHJ1Y3RlZDogcGFyYW1ldGVycy5pc0NvbnN0cnVjdGVkLFxyXG4gICAgICAgICAgICAgICAgLi4uaWRCbG9jayxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbGVuQmxvY2s6IHtcclxuICAgICAgICAgICAgICAgIC4uLmxlbkJsb2NrLFxyXG4gICAgICAgICAgICAgICAgaXNJbmRlZmluaXRlRm9ybTogISFwYXJhbWV0ZXJzLmlzSW5kZWZpbml0ZUZvcm0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC4uLnBhcmFtZXRlcnMsXHJcbiAgICAgICAgfSwgTG9jYWxPY3RldFN0cmluZ1ZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDQ7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2suaXNDb25zdHJ1Y3RlZCA9IHRoaXMuaWRCbG9jay5pc0NvbnN0cnVjdGVkO1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5pc0luZGVmaW5pdGVGb3JtID0gdGhpcy5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtO1xyXG4gICAgICAgIGlmIChpbnB1dExlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pZEJsb2NrLmVycm9yLmxlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5pZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5sZW5CbG9jay5lcnJvci5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMubGVuQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlQmxvY2suaXNDb25zdHJ1Y3RlZCkge1xyXG4gICAgICAgICAgICBjb25zdCB2aWV3ID0gaW5wdXRCdWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciA/IG5ldyBVaW50OEFycmF5KGlucHV0QnVmZmVyKSA6IGlucHV0QnVmZmVyO1xyXG4gICAgICAgICAgICBjb25zdCBidWYgPSB2aWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChidWYuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzbiA9IGxvY2FsRnJvbUJFUihidWYsIDAsIGJ1Zi5ieXRlTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXNuLm9mZnNldCAhPT0gLTEgJiYgYXNuLm9mZnNldCA9PT0gaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gW2Fzbi5yZXN1bHRdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdXBlci5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlQmxvY2suaXNDb25zdHJ1Y3RlZCB8fCAodGhpcy52YWx1ZUJsb2NrLnZhbHVlICYmIHRoaXMudmFsdWVCbG9jay52YWx1ZS5sZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBDb25zdHJ1Y3RlZC5wcm90b3R5cGUub25Bc2NpaUVuY29kaW5nLmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJHtwdnRzdXRpbHMuQ29udmVydC5Ub0hleCh0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3KX1gO1xyXG4gICAgfVxyXG4gICAgZ2V0VmFsdWUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlkQmxvY2suaXNDb25zdHJ1Y3RlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYXJyYXkgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IGNvbnRlbnQgb2YgdGhpcy52YWx1ZUJsb2NrLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgT2N0ZXRTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIGFycmF5LnB1c2goY29udGVudC52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIuY29uY2F0KGFycmF5KTtcclxuICAgIH1cclxufVxyXG5fYSRyID0gT2N0ZXRTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuT2N0ZXRTdHJpbmcgPSBfYSRyO1xyXG59KSgpO1xyXG5PY3RldFN0cmluZy5OQU1FID0gT0NURVRfU1RSSU5HX05BTUU7XG5cbmNsYXNzIExvY2FsQml0U3RyaW5nVmFsdWVCbG9jayBleHRlbmRzIEhleEJsb2NrKExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHVudXNlZEJpdHMgPSAwLCBpc0NvbnN0cnVjdGVkID0gZmFsc2UsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy51bnVzZWRCaXRzID0gdW51c2VkQml0cztcclxuICAgICAgICB0aGlzLmlzQ29uc3RydWN0ZWQgPSBpc0NvbnN0cnVjdGVkO1xyXG4gICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSB0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKCFpbnB1dExlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCByZXN1bHRPZmZzZXQgPSAtMTtcclxuICAgICAgICBpZiAodGhpcy5pc0NvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdE9mZnNldCA9IExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrLnByb3RvdHlwZS5mcm9tQkVSLmNhbGwodGhpcywgaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50QmxvY2tOYW1lID0gdmFsdWUuY29uc3RydWN0b3IuTkFNRTtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QmxvY2tOYW1lID09PSBFTkRfT0ZfQ09OVEVOVF9OQU1FKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNJbmRlZmluaXRlRm9ybSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVuZE9mQ29udGVudCBpcyB1bmV4cGVjdGVkLCBCSVQgU1RSSU5HIG1heSBjb25zaXN0cyBvZiBCSVQgU1RSSU5HcyBvbmx5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEJsb2NrTmFtZSAhPT0gQklUX1NUUklOR19OQU1FKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiQklUIFNUUklORyBtYXkgY29uc2lzdHMgb2YgQklUIFNUUklOR3Mgb25seVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlQmxvY2sgPSB2YWx1ZS52YWx1ZUJsb2NrO1xyXG4gICAgICAgICAgICAgICAgaWYgKCh0aGlzLnVudXNlZEJpdHMgPiAwKSAmJiAodmFsdWVCbG9jay51bnVzZWRCaXRzID4gMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJVc2luZyBvZiBcXFwidW51c2VkIGJpdHNcXFwiIGluc2lkZSBjb25zdHJ1Y3RpdmUgQklUIFNUUklORyBhbGxvd2VkIGZvciBsZWFzdCBvbmUgb25seVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMudW51c2VkQml0cyA9IHZhbHVlQmxvY2sudW51c2VkQml0cztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnB1dFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCBpbnB1dFZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnRCdWZmZXIgPSBpbnB1dFZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIHRoaXMudW51c2VkQml0cyA9IGludEJ1ZmZlclswXTtcclxuICAgICAgICBpZiAodGhpcy51bnVzZWRCaXRzID4gNykge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJVbnVzZWQgYml0cyBmb3IgQml0U3RyaW5nIG11c3QgYmUgaW4gcmFuZ2UgMC03XCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnVudXNlZEJpdHMpIHtcclxuICAgICAgICAgICAgY29uc3QgYnVmID0gaW50QnVmZmVyLnN1YmFycmF5KDEpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGJ1Zi5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNuID0gbG9jYWxGcm9tQkVSKGJ1ZiwgMCwgYnVmLmJ5dGVMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhc24ub2Zmc2V0ICE9PSAtMSAmJiBhc24ub2Zmc2V0ID09PSAoaW5wdXRMZW5ndGggLSAxKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gW2Fzbi5yZXN1bHRdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gaW50QnVmZmVyLnN1YmFycmF5KDEpO1xyXG4gICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBpbnRCdWZmZXIubGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb25zdHJ1Y3RlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2sucHJvdG90eXBlLnRvQkVSLmNhbGwodGhpcywgc2l6ZU9ubHksIHdyaXRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzaXplT25seSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGggKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGggKyAxKTtcclxuICAgICAgICByZXRWaWV3WzBdID0gdGhpcy51bnVzZWRCaXRzO1xyXG4gICAgICAgIHJldFZpZXcuc2V0KHRoaXMudmFsdWVIZXhWaWV3LCAxKTtcclxuICAgICAgICByZXR1cm4gcmV0Vmlldy5idWZmZXI7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHVudXNlZEJpdHM6IHRoaXMudW51c2VkQml0cyxcclxuICAgICAgICAgICAgaXNDb25zdHJ1Y3RlZDogdGhpcy5pc0NvbnN0cnVjdGVkLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxCaXRTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIkJpdFN0cmluZ1ZhbHVlQmxvY2tcIjtcblxudmFyIF9hJHE7XHJcbmNsYXNzIEJpdFN0cmluZyBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGlkQmxvY2sgPSB7fSwgbGVuQmxvY2sgPSB7fSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICB2YXIgX2IsIF9jO1xyXG4gICAgICAgIChfYiA9IHBhcmFtZXRlcnMuaXNDb25zdHJ1Y3RlZCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogKHBhcmFtZXRlcnMuaXNDb25zdHJ1Y3RlZCA9ICEhKChfYyA9IHBhcmFtZXRlcnMudmFsdWUpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5sZW5ndGgpKTtcclxuICAgICAgICBzdXBlcih7XHJcbiAgICAgICAgICAgIGlkQmxvY2s6IHtcclxuICAgICAgICAgICAgICAgIGlzQ29uc3RydWN0ZWQ6IHBhcmFtZXRlcnMuaXNDb25zdHJ1Y3RlZCxcclxuICAgICAgICAgICAgICAgIC4uLmlkQmxvY2ssXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGxlbkJsb2NrOiB7XHJcbiAgICAgICAgICAgICAgICAuLi5sZW5CbG9jayxcclxuICAgICAgICAgICAgICAgIGlzSW5kZWZpbml0ZUZvcm06ICEhcGFyYW1ldGVycy5pc0luZGVmaW5pdGVGb3JtLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAuLi5wYXJhbWV0ZXJzLFxyXG4gICAgICAgIH0sIExvY2FsQml0U3RyaW5nVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMztcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5pc0NvbnN0cnVjdGVkID0gdGhpcy5pZEJsb2NrLmlzQ29uc3RydWN0ZWQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLmlzSW5kZWZpbml0ZUZvcm0gPSB0aGlzLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm07XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVCbG9jay5pc0NvbnN0cnVjdGVkIHx8ICh0aGlzLnZhbHVlQmxvY2sudmFsdWUgJiYgdGhpcy52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIENvbnN0cnVjdGVkLnByb3RvdHlwZS5vbkFzY2lpRW5jb2RpbmcuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJpdHMgPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVIZXggPSB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGJ5dGUgb2YgdmFsdWVIZXgpIHtcclxuICAgICAgICAgICAgICAgIGJpdHMucHVzaChieXRlLnRvU3RyaW5nKDIpLnBhZFN0YXJ0KDgsIFwiMFwiKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYml0c1N0ciA9IGJpdHMuam9pbihcIlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke2JpdHNTdHIuc3Vic3RyaW5nKDAsIGJpdHNTdHIubGVuZ3RoIC0gdGhpcy52YWx1ZUJsb2NrLnVudXNlZEJpdHMpfWA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbl9hJHEgPSBCaXRTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuQml0U3RyaW5nID0gX2EkcTtcclxufSkoKTtcclxuQml0U3RyaW5nLk5BTUUgPSBCSVRfU1RSSU5HX05BTUU7XG5cbnZhciBfYSRwO1xyXG5mdW5jdGlvbiB2aWV3QWRkKGZpcnN0LCBzZWNvbmQpIHtcclxuICAgIGNvbnN0IGMgPSBuZXcgVWludDhBcnJheShbMF0pO1xyXG4gICAgY29uc3QgZmlyc3RWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZmlyc3QpO1xyXG4gICAgY29uc3Qgc2Vjb25kVmlldyA9IG5ldyBVaW50OEFycmF5KHNlY29uZCk7XHJcbiAgICBsZXQgZmlyc3RWaWV3Q29weSA9IGZpcnN0Vmlldy5zbGljZSgwKTtcclxuICAgIGNvbnN0IGZpcnN0Vmlld0NvcHlMZW5ndGggPSBmaXJzdFZpZXdDb3B5Lmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBzZWNvbmRWaWV3Q29weSA9IHNlY29uZFZpZXcuc2xpY2UoMCk7XHJcbiAgICBjb25zdCBzZWNvbmRWaWV3Q29weUxlbmd0aCA9IHNlY29uZFZpZXdDb3B5Lmxlbmd0aCAtIDE7XHJcbiAgICBsZXQgdmFsdWUgPSAwO1xyXG4gICAgY29uc3QgbWF4ID0gKHNlY29uZFZpZXdDb3B5TGVuZ3RoIDwgZmlyc3RWaWV3Q29weUxlbmd0aCkgPyBmaXJzdFZpZXdDb3B5TGVuZ3RoIDogc2Vjb25kVmlld0NvcHlMZW5ndGg7XHJcbiAgICBsZXQgY291bnRlciA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gbWF4OyBpID49IDA7IGktLSwgY291bnRlcisrKSB7XHJcbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgKGNvdW50ZXIgPCBzZWNvbmRWaWV3Q29weS5sZW5ndGgpOlxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSArIHNlY29uZFZpZXdDb3B5W3NlY29uZFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gKyBjWzBdO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdICsgY1swXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY1swXSA9IHZhbHVlIC8gMTA7XHJcbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgKGNvdW50ZXIgPj0gZmlyc3RWaWV3Q29weS5sZW5ndGgpOlxyXG4gICAgICAgICAgICAgICAgZmlyc3RWaWV3Q29weSA9IHB2dXRpbHMudXRpbENvbmNhdFZpZXcobmV3IFVpbnQ4QXJyYXkoW3ZhbHVlICUgMTBdKSwgZmlyc3RWaWV3Q29weSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdID0gdmFsdWUgJSAxMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoY1swXSA+IDApXHJcbiAgICAgICAgZmlyc3RWaWV3Q29weSA9IHB2dXRpbHMudXRpbENvbmNhdFZpZXcoYywgZmlyc3RWaWV3Q29weSk7XHJcbiAgICByZXR1cm4gZmlyc3RWaWV3Q29weTtcclxufVxyXG5mdW5jdGlvbiBwb3dlcjIobikge1xyXG4gICAgaWYgKG4gPj0gcG93ZXJzMi5sZW5ndGgpIHtcclxuICAgICAgICBmb3IgKGxldCBwID0gcG93ZXJzMi5sZW5ndGg7IHAgPD0gbjsgcCsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGMgPSBuZXcgVWludDhBcnJheShbMF0pO1xyXG4gICAgICAgICAgICBsZXQgZGlnaXRzID0gKHBvd2VyczJbcCAtIDFdKS5zbGljZSgwKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IChkaWdpdHMubGVuZ3RoIC0gMSk7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IG5ldyBVaW50OEFycmF5KFsoZGlnaXRzW2ldIDw8IDEpICsgY1swXV0pO1xyXG4gICAgICAgICAgICAgICAgY1swXSA9IG5ld1ZhbHVlWzBdIC8gMTA7XHJcbiAgICAgICAgICAgICAgICBkaWdpdHNbaV0gPSBuZXdWYWx1ZVswXSAlIDEwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjWzBdID4gMClcclxuICAgICAgICAgICAgICAgIGRpZ2l0cyA9IHB2dXRpbHMudXRpbENvbmNhdFZpZXcoYywgZGlnaXRzKTtcclxuICAgICAgICAgICAgcG93ZXJzMi5wdXNoKGRpZ2l0cyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBvd2VyczJbbl07XHJcbn1cclxuZnVuY3Rpb24gdmlld1N1YihmaXJzdCwgc2Vjb25kKSB7XHJcbiAgICBsZXQgYiA9IDA7XHJcbiAgICBjb25zdCBmaXJzdFZpZXcgPSBuZXcgVWludDhBcnJheShmaXJzdCk7XHJcbiAgICBjb25zdCBzZWNvbmRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc2Vjb25kKTtcclxuICAgIGNvbnN0IGZpcnN0Vmlld0NvcHkgPSBmaXJzdFZpZXcuc2xpY2UoMCk7XHJcbiAgICBjb25zdCBmaXJzdFZpZXdDb3B5TGVuZ3RoID0gZmlyc3RWaWV3Q29weS5sZW5ndGggLSAxO1xyXG4gICAgY29uc3Qgc2Vjb25kVmlld0NvcHkgPSBzZWNvbmRWaWV3LnNsaWNlKDApO1xyXG4gICAgY29uc3Qgc2Vjb25kVmlld0NvcHlMZW5ndGggPSBzZWNvbmRWaWV3Q29weS5sZW5ndGggLSAxO1xyXG4gICAgbGV0IHZhbHVlO1xyXG4gICAgbGV0IGNvdW50ZXIgPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IHNlY29uZFZpZXdDb3B5TGVuZ3RoOyBpID49IDA7IGktLSwgY291bnRlcisrKSB7XHJcbiAgICAgICAgdmFsdWUgPSBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSAtIHNlY29uZFZpZXdDb3B5W3NlY29uZFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gLSBiO1xyXG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xyXG4gICAgICAgICAgICBjYXNlICh2YWx1ZSA8IDApOlxyXG4gICAgICAgICAgICAgICAgYiA9IDE7XHJcbiAgICAgICAgICAgICAgICBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSA9IHZhbHVlICsgMTA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGIgPSAwO1xyXG4gICAgICAgICAgICAgICAgZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoYiA+IDApIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gKGZpcnN0Vmlld0NvcHlMZW5ndGggLSBzZWNvbmRWaWV3Q29weUxlbmd0aCArIDEpOyBpID49IDA7IGktLSwgY291bnRlcisrKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gLSBiO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBiID0gMTtcclxuICAgICAgICAgICAgICAgIGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdID0gdmFsdWUgKyAxMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGIgPSAwO1xyXG4gICAgICAgICAgICAgICAgZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpcnN0Vmlld0NvcHkuc2xpY2UoKTtcclxufVxyXG5jbGFzcyBMb2NhbEludGVnZXJWYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soVmFsdWVCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLl92YWx1ZURlYyA9IDA7XHJcbiAgICAgICAgaWYgKHBhcmFtZXRlcnMudmFsdWVIZXgpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUhleCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlRGVjID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc2V0VmFsdWVIZXgoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aCA+PSA0KSB7XHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlRvbyBiaWcgSW50ZWdlciBmb3IgZGVjb2RpbmcsIGhleCBvbmx5XCIpO1xyXG4gICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlRGVjID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZURlYyA9IHB2dXRpbHMudXRpbERlY29kZVRDLmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzZXQgdmFsdWVEZWModikge1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlRGVjID0gdjtcclxuICAgICAgICB0aGlzLmlzSGV4T25seSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocHZ1dGlscy51dGlsRW5jb2RlVEModikpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHZhbHVlRGVjKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZURlYztcclxuICAgIH1cclxuICAgIGZyb21ERVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCwgZXhwZWN0ZWRMZW5ndGggPSAwKSB7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGlmIChvZmZzZXQgPT09IC0xKVxyXG4gICAgICAgICAgICByZXR1cm4gb2Zmc2V0O1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZhbHVlSGV4VmlldztcclxuICAgICAgICBpZiAoKHZpZXdbMF0gPT09IDB4MDApICYmICgodmlld1sxXSAmIDB4ODApICE9PSAwKSkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHZpZXcuc3ViYXJyYXkoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZXhwZWN0ZWRMZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICh2aWV3Lmxlbmd0aCA8IGV4cGVjdGVkTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChleHBlY3RlZExlbmd0aCAtIHZpZXcubGVuZ3RoKSA+IDEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkTGVuZ3RoID0gdmlldy5sZW5ndGggKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gdmlldy5zdWJhcnJheShleHBlY3RlZExlbmd0aCAtIHZpZXcubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9ERVIoc2l6ZU9ubHkgPSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZhbHVlSGV4VmlldztcclxuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcclxuICAgICAgICAgICAgY2FzZSAoKHZpZXdbMF0gJiAweDgwKSAhPT0gMCk6XHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGggKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkVmlld1swXSA9IDB4MDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFZpZXcuc2V0KHZpZXcsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gdXBkYXRlZFZpZXc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAoKHZpZXdbMF0gPT09IDB4MDApICYmICgodmlld1sxXSAmIDB4ODApID09PSAwKSk6XHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSB0aGlzLnZhbHVlSGV4Vmlldy5zdWJhcnJheSgxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy50b0JFUihzaXplT25seSk7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHRPZmZzZXQgPSBzdXBlci5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWVIZXgoKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkpIHtcclxuICAgICAgICByZXR1cm4gc2l6ZU9ubHlcclxuICAgICAgICAgICAgPyBuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoKVxyXG4gICAgICAgICAgICA6IHRoaXMudmFsdWVIZXhWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZURlYzogdGhpcy52YWx1ZURlYyxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoKSB7XHJcbiAgICAgICAgY29uc3QgZmlyc3RCaXQgPSAodGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoICogOCkgLSAxO1xyXG4gICAgICAgIGxldCBkaWdpdHMgPSBuZXcgVWludDhBcnJheSgodGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoICogOCkgLyAzKTtcclxuICAgICAgICBsZXQgYml0TnVtYmVyID0gMDtcclxuICAgICAgICBsZXQgY3VycmVudEJ5dGU7XHJcbiAgICAgICAgY29uc3QgYXNuMVZpZXcgPSB0aGlzLnZhbHVlSGV4VmlldztcclxuICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcclxuICAgICAgICBsZXQgZmxhZyA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGJ5dGVOdW1iZXIgPSAoYXNuMVZpZXcuYnl0ZUxlbmd0aCAtIDEpOyBieXRlTnVtYmVyID49IDA7IGJ5dGVOdW1iZXItLSkge1xyXG4gICAgICAgICAgICBjdXJyZW50Qnl0ZSA9IGFzbjFWaWV3W2J5dGVOdW1iZXJdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKChjdXJyZW50Qnl0ZSAmIDEpID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChiaXROdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBmaXJzdEJpdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0cyA9IHZpZXdTdWIocG93ZXIyKGJpdE51bWJlciksIGRpZ2l0cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBcIi1cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXRzID0gdmlld0FkZChkaWdpdHMsIHBvd2VyMihiaXROdW1iZXIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBiaXROdW1iZXIrKztcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRCeXRlID4+PSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlnaXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChkaWdpdHNbaV0pXHJcbiAgICAgICAgICAgICAgICBmbGFnID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGZsYWcpXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gZGlnaXRzU3RyaW5nLmNoYXJBdChkaWdpdHNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmxhZyA9PT0gZmFsc2UpXHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBkaWdpdHNTdHJpbmcuY2hhckF0KDApO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbn1cclxuX2EkcCA9IExvY2FsSW50ZWdlclZhbHVlQmxvY2s7XHJcbkxvY2FsSW50ZWdlclZhbHVlQmxvY2suTkFNRSA9IFwiSW50ZWdlclZhbHVlQmxvY2tcIjtcclxuKCgpID0+IHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfYSRwLnByb3RvdHlwZSwgXCJ2YWx1ZUhleFwiLCB7XHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHYpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlSGV4KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVIZXhWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgICAgIH0sXHJcbiAgICB9KTtcclxufSkoKTtcblxudmFyIF9hJG87XHJcbmNsYXNzIEludGVnZXIgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgTG9jYWxJbnRlZ2VyVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjtcclxuICAgIH1cclxuICAgIHRvQmlnSW50KCkge1xyXG4gICAgICAgIGFzc2VydEJpZ0ludCgpO1xyXG4gICAgICAgIHJldHVybiBCaWdJbnQodGhpcy52YWx1ZUJsb2NrLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGZyb21CaWdJbnQodmFsdWUpIHtcclxuICAgICAgICBhc3NlcnRCaWdJbnQoKTtcclxuICAgICAgICBjb25zdCBiaWdJbnRWYWx1ZSA9IEJpZ0ludCh2YWx1ZSk7XHJcbiAgICAgICAgY29uc3Qgd3JpdGVyID0gbmV3IFZpZXdXcml0ZXIoKTtcclxuICAgICAgICBjb25zdCBoZXggPSBiaWdJbnRWYWx1ZS50b1N0cmluZygxNikucmVwbGFjZSgvXi0vLCBcIlwiKTtcclxuICAgICAgICBjb25zdCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkocHZ0c3V0aWxzLkNvbnZlcnQuRnJvbUhleChoZXgpKTtcclxuICAgICAgICBpZiAoYmlnSW50VmFsdWUgPCAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gbmV3IFVpbnQ4QXJyYXkodmlldy5sZW5ndGggKyAodmlld1swXSAmIDB4ODAgPyAxIDogMCkpO1xyXG4gICAgICAgICAgICBmaXJzdFswXSB8PSAweDgwO1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdEludCA9IEJpZ0ludChgMHgke3B2dHN1dGlscy5Db252ZXJ0LlRvSGV4KGZpcnN0KX1gKTtcclxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kSW50ID0gZmlyc3RJbnQgKyBiaWdJbnRWYWx1ZTtcclxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkocHZ0c3V0aWxzLkNvbnZlcnQuRnJvbUhleChzZWNvbmRJbnQudG9TdHJpbmcoMTYpKSk7XHJcbiAgICAgICAgICAgIHNlY29uZFswXSB8PSAweDgwO1xyXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoc2Vjb25kKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh2aWV3WzBdICYgMHg4MCkge1xyXG4gICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlKG5ldyBVaW50OEFycmF5KFswXSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSh2aWV3KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IEludGVnZXIoe1xyXG4gICAgICAgICAgICB2YWx1ZUhleDogd3JpdGVyLmZpbmFsKCksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIGNvbnZlcnRUb0RFUigpIHtcclxuICAgICAgICBjb25zdCBpbnRlZ2VyID0gbmV3IEludGVnZXIoeyB2YWx1ZUhleDogdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyB9KTtcclxuICAgICAgICBpbnRlZ2VyLnZhbHVlQmxvY2sudG9ERVIoKTtcclxuICAgICAgICByZXR1cm4gaW50ZWdlcjtcclxuICAgIH1cclxuICAgIGNvbnZlcnRGcm9tREVSKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgSW50ZWdlcih7XHJcbiAgICAgICAgICAgIHZhbHVlSGV4OiB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3WzBdID09PSAwXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcuc3ViYXJyYXkoMSlcclxuICAgICAgICAgICAgICAgIDogdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7dGhpcy52YWx1ZUJsb2NrLnRvU3RyaW5nKCl9YDtcclxuICAgIH1cclxufVxyXG5fYSRvID0gSW50ZWdlcjtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5JbnRlZ2VyID0gX2EkbztcclxufSkoKTtcclxuSW50ZWdlci5OQU1FID0gXCJJTlRFR0VSXCI7XG5cbnZhciBfYSRuO1xyXG5jbGFzcyBFbnVtZXJhdGVkIGV4dGVuZHMgSW50ZWdlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxMDtcclxuICAgIH1cclxufVxyXG5fYSRuID0gRW51bWVyYXRlZDtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5FbnVtZXJhdGVkID0gX2EkbjtcclxufSkoKTtcclxuRW51bWVyYXRlZC5OQU1FID0gXCJFTlVNRVJBVEVEXCI7XG5cbmNsYXNzIExvY2FsU2lkVmFsdWVCbG9jayBleHRlbmRzIEhleEJsb2NrKFZhbHVlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWVEZWMgPSAtMSwgaXNGaXJzdFNpZCA9IGZhbHNlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMudmFsdWVEZWMgPSB2YWx1ZURlYztcclxuICAgICAgICB0aGlzLmlzRmlyc3RTaWQgPSBpc0ZpcnN0U2lkO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKCFpbnB1dExlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlucHV0VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKHRoaXMsIGlucHV0VmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGludEJ1ZmZlciA9IGlucHV0Vmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3W2ldID0gaW50QnVmZmVyW2ldICYgMHg3RjtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCsrO1xyXG4gICAgICAgICAgICBpZiAoKGludEJ1ZmZlcltpXSAmIDB4ODApID09PSAweDAwKVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRlbXBWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJsb2NrTGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGVtcFZpZXdbaV0gPSB0aGlzLnZhbHVlSGV4Vmlld1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSB0ZW1wVmlldztcclxuICAgICAgICBpZiAoKGludEJ1ZmZlclt0aGlzLmJsb2NrTGVuZ3RoIC0gMV0gJiAweDgwKSAhPT0gMHgwMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFbmQgb2YgaW5wdXQgcmVhY2hlZCBiZWZvcmUgbWVzc2FnZSB3YXMgZnVsbHkgZGVjb2RlZFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlSGV4Vmlld1swXSA9PT0gMHgwMClcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiTmVlZGxlc3NseSBsb25nIGZvcm1hdCBvZiBTSUQgZW5jb2RpbmdcIik7XHJcbiAgICAgICAgaWYgKHRoaXMuYmxvY2tMZW5ndGggPD0gOClcclxuICAgICAgICAgICAgdGhpcy52YWx1ZURlYyA9IHB2dXRpbHMudXRpbEZyb21CYXNlKHRoaXMudmFsdWVIZXhWaWV3LCA3KTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJUb28gYmlnIFNJRCBmb3IgZGVjb2RpbmcsIGhleCBvbmx5XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgdGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICB9XHJcbiAgICBzZXQgdmFsdWVCaWdJbnQodmFsdWUpIHtcclxuICAgICAgICBhc3NlcnRCaWdJbnQoKTtcclxuICAgICAgICBsZXQgYml0cyA9IEJpZ0ludCh2YWx1ZSkudG9TdHJpbmcoMik7XHJcbiAgICAgICAgd2hpbGUgKGJpdHMubGVuZ3RoICUgNykge1xyXG4gICAgICAgICAgICBiaXRzID0gXCIwXCIgKyBiaXRzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJpdHMubGVuZ3RoIC8gNyk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBieXRlc1tpXSA9IHBhcnNlSW50KGJpdHMuc2xpY2UoaSAqIDcsIGkgKiA3ICsgNyksIDIpICsgKGkgKyAxIDwgYnl0ZXMubGVuZ3RoID8gMHg4MCA6IDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZyb21CRVIoYnl0ZXMuYnVmZmVyLCAwLCBieXRlcy5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgaWYgKHNpemVPbmx5KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCkpO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJWaWV3ID0gdGhpcy52YWx1ZUhleFZpZXc7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAodGhpcy5ibG9ja0xlbmd0aCAtIDEpOyBpKyspXHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W2ldID0gY3VyVmlld1tpXSB8IDB4ODA7XHJcbiAgICAgICAgICAgIHJldFZpZXdbdGhpcy5ibG9ja0xlbmd0aCAtIDFdID0gY3VyVmlld1t0aGlzLmJsb2NrTGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZW5jb2RlZEJ1ZiA9IHB2dXRpbHMudXRpbFRvQmFzZSh0aGlzLnZhbHVlRGVjLCA3KTtcclxuICAgICAgICBpZiAoZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVycm9yIGR1cmluZyBlbmNvZGluZyBTSUQgdmFsdWVcIjtcclxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWRCdWYuYnl0ZUxlbmd0aCk7XHJcbiAgICAgICAgaWYgKCFzaXplT25seSkge1xyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkVmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWRCdWYpO1xyXG4gICAgICAgICAgICBjb25zdCBsZW4gPSBlbmNvZGVkQnVmLmJ5dGVMZW5ndGggLSAxO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tpXSA9IGVuY29kZWRWaWV3W2ldIHwgMHg4MDtcclxuICAgICAgICAgICAgcmV0Vmlld1tsZW5dID0gZW5jb2RlZFZpZXdbbGVuXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldFZpZXc7XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZygpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcclxuICAgICAgICBpZiAodGhpcy5pc0hleE9ubHkpXHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHB2dHN1dGlscy5Db252ZXJ0LlRvSGV4KHRoaXMudmFsdWVIZXhWaWV3KTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNGaXJzdFNpZCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNpZFZhbHVlID0gdGhpcy52YWx1ZURlYztcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlRGVjIDw9IDM5KVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiMC5cIjtcclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlRGVjIDw9IDc5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiMS5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2lkVmFsdWUgLT0gNDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBcIjIuXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZFZhbHVlIC09IDgwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzaWRWYWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMudmFsdWVEZWMudG9TdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWVEZWM6IHRoaXMudmFsdWVEZWMsXHJcbiAgICAgICAgICAgIGlzRmlyc3RTaWQ6IHRoaXMuaXNGaXJzdFNpZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsU2lkVmFsdWVCbG9jay5OQU1FID0gXCJzaWRCbG9ja1wiO1xuXG5jbGFzcyBMb2NhbE9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrIGV4dGVuZHMgVmFsdWVCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlID0gRU1QVFlfU1RSSU5HLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbXTtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBsZXQgcmVzdWx0T2Zmc2V0ID0gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgd2hpbGUgKGlucHV0TGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBzaWRCbG9jayA9IG5ldyBMb2NhbFNpZFZhbHVlQmxvY2soKTtcclxuICAgICAgICAgICAgcmVzdWx0T2Zmc2V0ID0gc2lkQmxvY2suZnJvbUJFUihpbnB1dEJ1ZmZlciwgcmVzdWx0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBzaWRCbG9jay5lcnJvcjtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICAgICAgc2lkQmxvY2suaXNGaXJzdFNpZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gc2lkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIGlucHV0TGVuZ3RoIC09IHNpZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goc2lkQmxvY2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkpIHtcclxuICAgICAgICBjb25zdCByZXRCdWZmZXJzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQnVmID0gdGhpcy52YWx1ZVtpXS50b0JFUihzaXplT25seSk7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZUJ1Zi5ieXRlTGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gdGhpcy52YWx1ZVtpXS5lcnJvcjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0QnVmZmVycy5wdXNoKHZhbHVlQnVmKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbmNhdChyZXRCdWZmZXJzKTtcclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xyXG4gICAgICAgIGxldCBwb3MxID0gMDtcclxuICAgICAgICBsZXQgcG9zMiA9IDA7XHJcbiAgICAgICAgbGV0IHNpZCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGZsYWcgPSBmYWxzZTtcclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIHBvczIgPSBzdHJpbmcuaW5kZXhPZihcIi5cIiwgcG9zMSk7XHJcbiAgICAgICAgICAgIGlmIChwb3MyID09PSAtMSlcclxuICAgICAgICAgICAgICAgIHNpZCA9IHN0cmluZy5zdWJzdHJpbmcocG9zMSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHNpZCA9IHN0cmluZy5zdWJzdHJpbmcocG9zMSwgcG9zMik7XHJcbiAgICAgICAgICAgIHBvczEgPSBwb3MyICsgMTtcclxuICAgICAgICAgICAgaWYgKGZsYWcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNpZEJsb2NrID0gdGhpcy52YWx1ZVswXTtcclxuICAgICAgICAgICAgICAgIGxldCBwbHVzID0gMDtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoc2lkQmxvY2sudmFsdWVEZWMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGx1cyA9IDQwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdXMgPSA4MDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRTSUQgPSBwYXJzZUludChzaWQsIDEwKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc05hTihwYXJzZWRTSUQpKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIHNpZEJsb2NrLnZhbHVlRGVjID0gcGFyc2VkU0lEICsgcGx1cztcclxuICAgICAgICAgICAgICAgIGZsYWcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNpZEJsb2NrID0gbmV3IExvY2FsU2lkVmFsdWVCbG9jaygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNpZCA+IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0QmlnSW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lkVmFsdWUgPSBCaWdJbnQoc2lkKTtcclxuICAgICAgICAgICAgICAgICAgICBzaWRCbG9jay52YWx1ZUJpZ0ludCA9IHNpZFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2lkQmxvY2sudmFsdWVEZWMgPSBwYXJzZUludChzaWQsIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oc2lkQmxvY2sudmFsdWVEZWMpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2lkQmxvY2suaXNGaXJzdFNpZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZmxhZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goc2lkQmxvY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSB3aGlsZSAocG9zMiAhPT0gLTEpO1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGlzSGV4T25seSA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpc0hleE9ubHkgPSB0aGlzLnZhbHVlW2ldLmlzSGV4T25seTtcclxuICAgICAgICAgICAgbGV0IHNpZFN0ciA9IHRoaXMudmFsdWVbaV0udG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgaWYgKGkgIT09IDApXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBgJHtyZXN1bHR9LmA7XHJcbiAgICAgICAgICAgIGlmIChpc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgICAgIHNpZFN0ciA9IGB7JHtzaWRTdHJ9fWA7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZVtpXS5pc0ZpcnN0U2lkKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGAyLnske3NpZFN0cn0gLSA4MH1gO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzaWRTdHI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNpZFN0cjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICBjb25zdCBvYmplY3QgPSB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICBzaWRBcnJheTogW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgb2JqZWN0LnNpZEFycmF5LnB1c2godGhpcy52YWx1ZVtpXS50b0pTT04oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmplY3Q7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9jay5OQU1FID0gXCJPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkbTtcclxuY2xhc3MgT2JqZWN0SWRlbnRpZmllciBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbE9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSA2O1xyXG4gICAgfVxyXG4gICAgZ2V0VmFsdWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVCbG9jay50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgc2V0VmFsdWUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2suZnJvbVN0cmluZyh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke3RoaXMudmFsdWVCbG9jay50b1N0cmluZygpIHx8IFwiZW1wdHlcIn1gO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuX2EkbSA9IE9iamVjdElkZW50aWZpZXI7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuT2JqZWN0SWRlbnRpZmllciA9IF9hJG07XHJcbn0pKCk7XHJcbk9iamVjdElkZW50aWZpZXIuTkFNRSA9IFwiT0JKRUNUIElERU5USUZJRVJcIjtcblxuY2xhc3MgTG9jYWxSZWxhdGl2ZVNpZFZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhMb2NhbEJhc2VCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZURlYyA9IDAsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZURlYyA9IHZhbHVlRGVjO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKGlucHV0TGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgY29uc3QgaW5wdXRWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgaW5wdXRWaWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKVxyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgY29uc3QgaW50QnVmZmVyID0gaW5wdXRWaWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0TGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXdbaV0gPSBpbnRCdWZmZXJbaV0gJiAweDdGO1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoKys7XHJcbiAgICAgICAgICAgIGlmICgoaW50QnVmZmVyW2ldICYgMHg4MCkgPT09IDB4MDApXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGVtcFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYmxvY2tMZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgdGVtcFZpZXdbaV0gPSB0aGlzLnZhbHVlSGV4Vmlld1tpXTtcclxuICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHRlbXBWaWV3O1xyXG4gICAgICAgIGlmICgoaW50QnVmZmVyW3RoaXMuYmxvY2tMZW5ndGggLSAxXSAmIDB4ODApICE9PSAweDAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVuZCBvZiBpbnB1dCByZWFjaGVkIGJlZm9yZSBtZXNzYWdlIHdhcyBmdWxseSBkZWNvZGVkXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVIZXhWaWV3WzBdID09PSAweDAwKVxyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJOZWVkbGVzc2x5IGxvbmcgZm9ybWF0IG9mIFNJRCBlbmNvZGluZ1wiKTtcclxuICAgICAgICBpZiAodGhpcy5ibG9ja0xlbmd0aCA8PSA4KVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlRGVjID0gcHZ1dGlscy51dGlsRnJvbUJhc2UodGhpcy52YWx1ZUhleFZpZXcsIDcpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlRvbyBiaWcgU0lEIGZvciBkZWNvZGluZywgaGV4IG9ubHlcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyB0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgICAgIGlmIChzaXplT25seSlcclxuICAgICAgICAgICAgICAgIHJldHVybiAobmV3IEFycmF5QnVmZmVyKHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGgpKTtcclxuICAgICAgICAgICAgY29uc3QgY3VyVmlldyA9IHRoaXMudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKHRoaXMuYmxvY2tMZW5ndGggLSAxKTsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tpXSA9IGN1clZpZXdbaV0gfCAweDgwO1xyXG4gICAgICAgICAgICByZXRWaWV3W3RoaXMuYmxvY2tMZW5ndGggLSAxXSA9IGN1clZpZXdbdGhpcy5ibG9ja0xlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0Vmlldy5idWZmZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGVuY29kZWRCdWYgPSBwdnV0aWxzLnV0aWxUb0Jhc2UodGhpcy52YWx1ZURlYywgNyk7XHJcbiAgICAgICAgaWYgKGVuY29kZWRCdWYuYnl0ZUxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFcnJvciBkdXJpbmcgZW5jb2RpbmcgU0lEIHZhbHVlXCI7XHJcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShlbmNvZGVkQnVmLmJ5dGVMZW5ndGgpO1xyXG4gICAgICAgIGlmICghc2l6ZU9ubHkpIHtcclxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZFZpZXcgPSBuZXcgVWludDhBcnJheShlbmNvZGVkQnVmKTtcclxuICAgICAgICAgICAgY29uc3QgbGVuID0gZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKylcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbaV0gPSBlbmNvZGVkVmlld1tpXSB8IDB4ODA7XHJcbiAgICAgICAgICAgIHJldFZpZXdbbGVuXSA9IGVuY29kZWRWaWV3W2xlbl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHRvU3RyaW5nKCkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gICAgICAgIGlmICh0aGlzLmlzSGV4T25seSlcclxuICAgICAgICAgICAgcmVzdWx0ID0gcHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy52YWx1ZUhleFZpZXcpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLnZhbHVlRGVjLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlRGVjOiB0aGlzLnZhbHVlRGVjLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxSZWxhdGl2ZVNpZFZhbHVlQmxvY2suTkFNRSA9IFwicmVsYXRpdmVTaWRCbG9ja1wiO1xuXG5jbGFzcyBMb2NhbFJlbGF0aXZlT2JqZWN0SWRlbnRpZmllclZhbHVlQmxvY2sgZXh0ZW5kcyBWYWx1ZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUgPSBFTVBUWV9TVFJJTkcsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGxldCByZXN1bHRPZmZzZXQgPSBpbnB1dE9mZnNldDtcclxuICAgICAgICB3aGlsZSAoaW5wdXRMZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpZEJsb2NrID0gbmV3IExvY2FsUmVsYXRpdmVTaWRWYWx1ZUJsb2NrKCk7XHJcbiAgICAgICAgICAgIHJlc3VsdE9mZnNldCA9IHNpZEJsb2NrLmZyb21CRVIoaW5wdXRCdWZmZXIsIHJlc3VsdE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gc2lkQmxvY2suZXJyb3I7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gc2lkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIGlucHV0TGVuZ3RoIC09IHNpZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goc2lkQmxvY2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHksIHdyaXRlcikge1xyXG4gICAgICAgIGNvbnN0IHJldEJ1ZmZlcnMgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVCdWYgPSB0aGlzLnZhbHVlW2ldLnRvQkVSKHNpemVPbmx5KTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlQnVmLmJ5dGVMZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLnZhbHVlW2ldLmVycm9yO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXRCdWZmZXJzLnB1c2godmFsdWVCdWYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29uY2F0KHJldEJ1ZmZlcnMpO1xyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gW107XHJcbiAgICAgICAgbGV0IHBvczEgPSAwO1xyXG4gICAgICAgIGxldCBwb3MyID0gMDtcclxuICAgICAgICBsZXQgc2lkID0gXCJcIjtcclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIHBvczIgPSBzdHJpbmcuaW5kZXhPZihcIi5cIiwgcG9zMSk7XHJcbiAgICAgICAgICAgIGlmIChwb3MyID09PSAtMSlcclxuICAgICAgICAgICAgICAgIHNpZCA9IHN0cmluZy5zdWJzdHJpbmcocG9zMSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHNpZCA9IHN0cmluZy5zdWJzdHJpbmcocG9zMSwgcG9zMik7XHJcbiAgICAgICAgICAgIHBvczEgPSBwb3MyICsgMTtcclxuICAgICAgICAgICAgY29uc3Qgc2lkQmxvY2sgPSBuZXcgTG9jYWxSZWxhdGl2ZVNpZFZhbHVlQmxvY2soKTtcclxuICAgICAgICAgICAgc2lkQmxvY2sudmFsdWVEZWMgPSBwYXJzZUludChzaWQsIDEwKTtcclxuICAgICAgICAgICAgaWYgKGlzTmFOKHNpZEJsb2NrLnZhbHVlRGVjKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goc2lkQmxvY2spO1xyXG4gICAgICAgIH0gd2hpbGUgKHBvczIgIT09IC0xKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRvU3RyaW5nKCkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gICAgICAgIGxldCBpc0hleE9ubHkgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaXNIZXhPbmx5ID0gdGhpcy52YWx1ZVtpXS5pc0hleE9ubHk7XHJcbiAgICAgICAgICAgIGxldCBzaWRTdHIgPSB0aGlzLnZhbHVlW2ldLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGlmIChpICE9PSAwKVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gYCR7cmVzdWx0fS5gO1xyXG4gICAgICAgICAgICBpZiAoaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICBzaWRTdHIgPSBgeyR7c2lkU3RyfX1gO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNpZFN0cjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2lkU3RyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIHNpZEFycmF5OiBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgb2JqZWN0LnNpZEFycmF5LnB1c2godGhpcy52YWx1ZVtpXS50b0pTT04oKSk7XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcclxuICAgIH1cclxufVxyXG5Mb2NhbFJlbGF0aXZlT2JqZWN0SWRlbnRpZmllclZhbHVlQmxvY2suTkFNRSA9IFwiUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkbDtcclxuY2xhc3MgUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTM7XHJcbiAgICB9XHJcbiAgICBnZXRWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUJsb2NrLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBzZXRWYWx1ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5mcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7dGhpcy52YWx1ZUJsb2NrLnRvU3RyaW5nKCkgfHwgXCJlbXB0eVwifWA7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmdldFZhbHVlKCksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5fYSRsID0gUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlJlbGF0aXZlT2JqZWN0SWRlbnRpZmllciA9IF9hJGw7XHJcbn0pKCk7XHJcblJlbGF0aXZlT2JqZWN0SWRlbnRpZmllci5OQU1FID0gXCJSZWxhdGl2ZU9iamVjdElkZW50aWZpZXJcIjtcblxudmFyIF9hJGs7XHJcbmNsYXNzIFNlcXVlbmNlIGV4dGVuZHMgQ29uc3RydWN0ZWQge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTY7XHJcbiAgICB9XHJcbn1cclxuX2EkayA9IFNlcXVlbmNlO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlNlcXVlbmNlID0gX2EkaztcclxufSkoKTtcclxuU2VxdWVuY2UuTkFNRSA9IFwiU0VRVUVOQ0VcIjtcblxudmFyIF9hJGo7XHJcbmNsYXNzIFNldCBleHRlbmRzIENvbnN0cnVjdGVkIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDE3O1xyXG4gICAgfVxyXG59XHJcbl9hJGogPSBTZXQ7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuU2V0ID0gX2EkajtcclxufSkoKTtcclxuU2V0Lk5BTUUgPSBcIlNFVFwiO1xuXG5jbGFzcyBMb2NhbFN0cmluZ1ZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhWYWx1ZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pc0hleE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBFTVBUWV9TVFJJTkc7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIlN0cmluZ1ZhbHVlQmxvY2tcIjtcblxuY2xhc3MgTG9jYWxTaW1wbGVTdHJpbmdWYWx1ZUJsb2NrIGV4dGVuZHMgTG9jYWxTdHJpbmdWYWx1ZUJsb2NrIHtcclxufVxyXG5Mb2NhbFNpbXBsZVN0cmluZ1ZhbHVlQmxvY2suTkFNRSA9IFwiU2ltcGxlU3RyaW5nVmFsdWVCbG9ja1wiO1xuXG5jbGFzcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIGV4dGVuZHMgQmFzZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbFNpbXBsZVN0cmluZ1ZhbHVlQmxvY2spO1xyXG4gICAgfVxyXG4gICAgZnJvbUJ1ZmZlcihpbnB1dEJ1ZmZlcikge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpKTtcclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoaW5wdXRTdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBzdHJMZW4gPSBpbnB1dFN0cmluZy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShzdHJMZW4pO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyTGVuOyBpKyspXHJcbiAgICAgICAgICAgIHZpZXdbaV0gPSBpbnB1dFN0cmluZy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IGlucHV0U3RyaW5nO1xyXG4gICAgfVxyXG59XHJcbkxvY2FsU2ltcGxlU3RyaW5nQmxvY2suTkFNRSA9IFwiU0lNUExFIFNUUklOR1wiO1xuXG5jbGFzcyBMb2NhbFV0ZjhTdHJpbmdWYWx1ZUJsb2NrIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBmcm9tQnVmZmVyKGlucHV0QnVmZmVyKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBwdnRzdXRpbHMuQ29udmVydC5Ub1V0ZjhTdHJpbmcoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXgpIHtcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKGBFcnJvciBkdXJpbmcgXCJkZWNvZGVVUklDb21wb25lbnRcIjogJHtleH0sIHVzaW5nIHJhdyBzdHJpbmdgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gcHZ0c3V0aWxzLkNvbnZlcnQuVG9CaW5hcnkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoaW5wdXRTdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocHZ0c3V0aWxzLkNvbnZlcnQuRnJvbVV0ZjhTdHJpbmcoaW5wdXRTdHJpbmcpKTtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBpbnB1dFN0cmluZztcclxuICAgIH1cclxufVxyXG5Mb2NhbFV0ZjhTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIlV0ZjhTdHJpbmdWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRpO1xyXG5jbGFzcyBVdGY4U3RyaW5nIGV4dGVuZHMgTG9jYWxVdGY4U3RyaW5nVmFsdWVCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxMjtcclxuICAgIH1cclxufVxyXG5fYSRpID0gVXRmOFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5VdGY4U3RyaW5nID0gX2EkaTtcclxufSkoKTtcclxuVXRmOFN0cmluZy5OQU1FID0gXCJVVEY4U3RyaW5nXCI7XG5cbmNsYXNzIExvY2FsQm1wU3RyaW5nVmFsdWVCbG9jayBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgZnJvbUJ1ZmZlcihpbnB1dEJ1ZmZlcikge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IHB2dHN1dGlscy5Db252ZXJ0LlRvVXRmMTZTdHJpbmcoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKGlucHV0U3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gaW5wdXRTdHJpbmc7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHB2dHN1dGlscy5Db252ZXJ0LkZyb21VdGYxNlN0cmluZyhpbnB1dFN0cmluZykpO1xyXG4gICAgfVxyXG59XHJcbkxvY2FsQm1wU3RyaW5nVmFsdWVCbG9jay5OQU1FID0gXCJCbXBTdHJpbmdWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRoO1xyXG5jbGFzcyBCbXBTdHJpbmcgZXh0ZW5kcyBMb2NhbEJtcFN0cmluZ1ZhbHVlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDMwO1xyXG4gICAgfVxyXG59XHJcbl9hJGggPSBCbXBTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuQm1wU3RyaW5nID0gX2EkaDtcclxufSkoKTtcclxuQm1wU3RyaW5nLk5BTUUgPSBcIkJNUFN0cmluZ1wiO1xuXG5jbGFzcyBMb2NhbFVuaXZlcnNhbFN0cmluZ1ZhbHVlQmxvY2sgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGZyb21CdWZmZXIoaW5wdXRCdWZmZXIpIHtcclxuICAgICAgICBjb25zdCBjb3B5QnVmZmVyID0gQXJyYXlCdWZmZXIuaXNWaWV3KGlucHV0QnVmZmVyKSA/IGlucHV0QnVmZmVyLnNsaWNlKCkuYnVmZmVyIDogaW5wdXRCdWZmZXIuc2xpY2UoMCk7XHJcbiAgICAgICAgY29uc3QgdmFsdWVWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoY29weUJ1ZmZlcik7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZVZpZXcubGVuZ3RoOyBpICs9IDQpIHtcclxuICAgICAgICAgICAgdmFsdWVWaWV3W2ldID0gdmFsdWVWaWV3W2kgKyAzXTtcclxuICAgICAgICAgICAgdmFsdWVWaWV3W2kgKyAxXSA9IHZhbHVlVmlld1tpICsgMl07XHJcbiAgICAgICAgICAgIHZhbHVlVmlld1tpICsgMl0gPSAweDAwO1xyXG4gICAgICAgICAgICB2YWx1ZVZpZXdbaSArIDNdID0gMHgwMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBuZXcgVWludDMyQXJyYXkoY29weUJ1ZmZlcikpO1xyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhpbnB1dFN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHN0ckxlbmd0aCA9IGlucHV0U3RyaW5nLmxlbmd0aDtcclxuICAgICAgICBjb25zdCB2YWx1ZUhleFZpZXcgPSB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc3RyTGVuZ3RoICogNCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBjb2RlQnVmID0gcHZ1dGlscy51dGlsVG9CYXNlKGlucHV0U3RyaW5nLmNoYXJDb2RlQXQoaSksIDgpO1xyXG4gICAgICAgICAgICBjb25zdCBjb2RlVmlldyA9IG5ldyBVaW50OEFycmF5KGNvZGVCdWYpO1xyXG4gICAgICAgICAgICBpZiAoY29kZVZpZXcubGVuZ3RoID4gNClcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBkaWYgPSA0IC0gY29kZVZpZXcubGVuZ3RoO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gKGNvZGVWaWV3Lmxlbmd0aCAtIDEpOyBqID49IDA7IGotLSlcclxuICAgICAgICAgICAgICAgIHZhbHVlSGV4Vmlld1tpICogNCArIGogKyBkaWZdID0gY29kZVZpZXdbal07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IGlucHV0U3RyaW5nO1xyXG4gICAgfVxyXG59XHJcbkxvY2FsVW5pdmVyc2FsU3RyaW5nVmFsdWVCbG9jay5OQU1FID0gXCJVbml2ZXJzYWxTdHJpbmdWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRnO1xyXG5jbGFzcyBVbml2ZXJzYWxTdHJpbmcgZXh0ZW5kcyBMb2NhbFVuaXZlcnNhbFN0cmluZ1ZhbHVlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDI4O1xyXG4gICAgfVxyXG59XHJcbl9hJGcgPSBVbml2ZXJzYWxTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVW5pdmVyc2FsU3RyaW5nID0gX2EkZztcclxufSkoKTtcclxuVW5pdmVyc2FsU3RyaW5nLk5BTUUgPSBcIlVuaXZlcnNhbFN0cmluZ1wiO1xuXG52YXIgX2EkZjtcclxuY2xhc3MgTnVtZXJpY1N0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTg7XHJcbiAgICB9XHJcbn1cclxuX2EkZiA9IE51bWVyaWNTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuTnVtZXJpY1N0cmluZyA9IF9hJGY7XHJcbn0pKCk7XHJcbk51bWVyaWNTdHJpbmcuTkFNRSA9IFwiTnVtZXJpY1N0cmluZ1wiO1xuXG52YXIgX2EkZTtcclxuY2xhc3MgUHJpbnRhYmxlU3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxOTtcclxuICAgIH1cclxufVxyXG5fYSRlID0gUHJpbnRhYmxlU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlByaW50YWJsZVN0cmluZyA9IF9hJGU7XHJcbn0pKCk7XHJcblByaW50YWJsZVN0cmluZy5OQU1FID0gXCJQcmludGFibGVTdHJpbmdcIjtcblxudmFyIF9hJGQ7XHJcbmNsYXNzIFRlbGV0ZXhTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDIwO1xyXG4gICAgfVxyXG59XHJcbl9hJGQgPSBUZWxldGV4U3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlRlbGV0ZXhTdHJpbmcgPSBfYSRkO1xyXG59KSgpO1xyXG5UZWxldGV4U3RyaW5nLk5BTUUgPSBcIlRlbGV0ZXhTdHJpbmdcIjtcblxudmFyIF9hJGM7XHJcbmNsYXNzIFZpZGVvdGV4U3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyMTtcclxuICAgIH1cclxufVxyXG5fYSRjID0gVmlkZW90ZXhTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVmlkZW90ZXhTdHJpbmcgPSBfYSRjO1xyXG59KSgpO1xyXG5WaWRlb3RleFN0cmluZy5OQU1FID0gXCJWaWRlb3RleFN0cmluZ1wiO1xuXG52YXIgX2EkYjtcclxuY2xhc3MgSUE1U3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyMjtcclxuICAgIH1cclxufVxyXG5fYSRiID0gSUE1U3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLklBNVN0cmluZyA9IF9hJGI7XHJcbn0pKCk7XHJcbklBNVN0cmluZy5OQU1FID0gXCJJQTVTdHJpbmdcIjtcblxudmFyIF9hJGE7XHJcbmNsYXNzIEdyYXBoaWNTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDI1O1xyXG4gICAgfVxyXG59XHJcbl9hJGEgPSBHcmFwaGljU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkdyYXBoaWNTdHJpbmcgPSBfYSRhO1xyXG59KSgpO1xyXG5HcmFwaGljU3RyaW5nLk5BTUUgPSBcIkdyYXBoaWNTdHJpbmdcIjtcblxudmFyIF9hJDk7XHJcbmNsYXNzIFZpc2libGVTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDI2O1xyXG4gICAgfVxyXG59XHJcbl9hJDkgPSBWaXNpYmxlU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlZpc2libGVTdHJpbmcgPSBfYSQ5O1xyXG59KSgpO1xyXG5WaXNpYmxlU3RyaW5nLk5BTUUgPSBcIlZpc2libGVTdHJpbmdcIjtcblxudmFyIF9hJDg7XHJcbmNsYXNzIEdlbmVyYWxTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDI3O1xyXG4gICAgfVxyXG59XHJcbl9hJDggPSBHZW5lcmFsU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkdlbmVyYWxTdHJpbmcgPSBfYSQ4O1xyXG59KSgpO1xyXG5HZW5lcmFsU3RyaW5nLk5BTUUgPSBcIkdlbmVyYWxTdHJpbmdcIjtcblxudmFyIF9hJDc7XHJcbmNsYXNzIENoYXJhY3RlclN0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjk7XHJcbiAgICB9XHJcbn1cclxuX2EkNyA9IENoYXJhY3RlclN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5DaGFyYWN0ZXJTdHJpbmcgPSBfYSQ3O1xyXG59KSgpO1xyXG5DaGFyYWN0ZXJTdHJpbmcuTkFNRSA9IFwiQ2hhcmFjdGVyU3RyaW5nXCI7XG5cbnZhciBfYSQ2O1xyXG5jbGFzcyBVVENUaW1lIGV4dGVuZHMgVmlzaWJsZVN0cmluZyB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlLCB2YWx1ZURhdGUsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy55ZWFyID0gMDtcclxuICAgICAgICB0aGlzLm1vbnRoID0gMDtcclxuICAgICAgICB0aGlzLmRheSA9IDA7XHJcbiAgICAgICAgdGhpcy5ob3VyID0gMDtcclxuICAgICAgICB0aGlzLm1pbnV0ZSA9IDA7XHJcbiAgICAgICAgdGhpcy5zZWNvbmQgPSAwO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUubGVuZ3RoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXdbaV0gPSB2YWx1ZS5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWVEYXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbURhdGUodmFsdWVEYXRlKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMudG9CdWZmZXIoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDIzO1xyXG4gICAgfVxyXG4gICAgZnJvbUJ1ZmZlcihpbnB1dEJ1ZmZlcikge1xyXG4gICAgICAgIHRoaXMuZnJvbVN0cmluZyhTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKSkpO1xyXG4gICAgfVxyXG4gICAgdG9CdWZmZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyID0gdGhpcy50b1N0cmluZygpO1xyXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihzdHIubGVuZ3RoKTtcclxuICAgICAgICBjb25zdCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgdmlld1tpXSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgIHJldHVybiBidWZmZXI7XHJcbiAgICB9XHJcbiAgICBmcm9tRGF0ZShpbnB1dERhdGUpIHtcclxuICAgICAgICB0aGlzLnllYXIgPSBpbnB1dERhdGUuZ2V0VVRDRnVsbFllYXIoKTtcclxuICAgICAgICB0aGlzLm1vbnRoID0gaW5wdXREYXRlLmdldFVUQ01vbnRoKCkgKyAxO1xyXG4gICAgICAgIHRoaXMuZGF5ID0gaW5wdXREYXRlLmdldFVUQ0RhdGUoKTtcclxuICAgICAgICB0aGlzLmhvdXIgPSBpbnB1dERhdGUuZ2V0VVRDSG91cnMoKTtcclxuICAgICAgICB0aGlzLm1pbnV0ZSA9IGlucHV0RGF0ZS5nZXRVVENNaW51dGVzKCk7XHJcbiAgICAgICAgdGhpcy5zZWNvbmQgPSBpbnB1dERhdGUuZ2V0VVRDU2Vjb25kcygpO1xyXG4gICAgfVxyXG4gICAgdG9EYXRlKCkge1xyXG4gICAgICAgIHJldHVybiAobmV3IERhdGUoRGF0ZS5VVEModGhpcy55ZWFyLCB0aGlzLm1vbnRoIC0gMSwgdGhpcy5kYXksIHRoaXMuaG91ciwgdGhpcy5taW51dGUsIHRoaXMuc2Vjb25kKSkpO1xyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhpbnB1dFN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHBhcnNlciA9IC8oXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSlaL2lnO1xyXG4gICAgICAgIGNvbnN0IHBhcnNlckFycmF5ID0gcGFyc2VyLmV4ZWMoaW5wdXRTdHJpbmcpO1xyXG4gICAgICAgIGlmIChwYXJzZXJBcnJheSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIjtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbMV0sIDEwKTtcclxuICAgICAgICBpZiAoeWVhciA+PSA1MClcclxuICAgICAgICAgICAgdGhpcy55ZWFyID0gMTkwMCArIHllYXI7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLnllYXIgPSAyMDAwICsgeWVhcjtcclxuICAgICAgICB0aGlzLm1vbnRoID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbMl0sIDEwKTtcclxuICAgICAgICB0aGlzLmRheSA9IHBhcnNlSW50KHBhcnNlckFycmF5WzNdLCAxMCk7XHJcbiAgICAgICAgdGhpcy5ob3VyID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbNF0sIDEwKTtcclxuICAgICAgICB0aGlzLm1pbnV0ZSA9IHBhcnNlSW50KHBhcnNlckFycmF5WzVdLCAxMCk7XHJcbiAgICAgICAgdGhpcy5zZWNvbmQgPSBwYXJzZUludChwYXJzZXJBcnJheVs2XSwgMTApO1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoZW5jb2RpbmcgPSBcImlzb1wiKSB7XHJcbiAgICAgICAgaWYgKGVuY29kaW5nID09PSBcImlzb1wiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dEFycmF5ID0gbmV3IEFycmF5KDcpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheVswXSA9IHB2dXRpbHMucGFkTnVtYmVyKCgodGhpcy55ZWFyIDwgMjAwMCkgPyAodGhpcy55ZWFyIC0gMTkwMCkgOiAodGhpcy55ZWFyIC0gMjAwMCkpLCAyKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXlbMV0gPSBwdnV0aWxzLnBhZE51bWJlcih0aGlzLm1vbnRoLCAyKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXlbMl0gPSBwdnV0aWxzLnBhZE51bWJlcih0aGlzLmRheSwgMik7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5WzNdID0gcHZ1dGlscy5wYWROdW1iZXIodGhpcy5ob3VyLCAyKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXlbNF0gPSBwdnV0aWxzLnBhZE51bWJlcih0aGlzLm1pbnV0ZSwgMik7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5WzVdID0gcHZ1dGlscy5wYWROdW1iZXIodGhpcy5zZWNvbmQsIDIpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheVs2XSA9IFwiWlwiO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0QXJyYXkuam9pbihcIlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKGVuY29kaW5nKTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7dGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpfWA7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHllYXI6IHRoaXMueWVhcixcclxuICAgICAgICAgICAgbW9udGg6IHRoaXMubW9udGgsXHJcbiAgICAgICAgICAgIGRheTogdGhpcy5kYXksXHJcbiAgICAgICAgICAgIGhvdXI6IHRoaXMuaG91cixcclxuICAgICAgICAgICAgbWludXRlOiB0aGlzLm1pbnV0ZSxcclxuICAgICAgICAgICAgc2Vjb25kOiB0aGlzLnNlY29uZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbl9hJDYgPSBVVENUaW1lO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlVUQ1RpbWUgPSBfYSQ2O1xyXG59KSgpO1xyXG5VVENUaW1lLk5BTUUgPSBcIlVUQ1RpbWVcIjtcblxudmFyIF9hJDU7XHJcbmNsYXNzIEdlbmVyYWxpemVkVGltZSBleHRlbmRzIFVUQ1RpbWUge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgdmFyIF9iO1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIChfYiA9IHRoaXMubWlsbGlzZWNvbmQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICh0aGlzLm1pbGxpc2Vjb25kID0gMCk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjQ7XHJcbiAgICB9XHJcbiAgICBmcm9tRGF0ZShpbnB1dERhdGUpIHtcclxuICAgICAgICBzdXBlci5mcm9tRGF0ZShpbnB1dERhdGUpO1xyXG4gICAgICAgIHRoaXMubWlsbGlzZWNvbmQgPSBpbnB1dERhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XHJcbiAgICB9XHJcbiAgICB0b0RhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIChuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsIHRoaXMubW9udGggLSAxLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQsIHRoaXMubWlsbGlzZWNvbmQpKSk7XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKGlucHV0U3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGlzVVRDID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IHRpbWVTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgIGxldCBkYXRlVGltZVN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGZyYWN0aW9uUGFydCA9IDA7XHJcbiAgICAgICAgbGV0IHBhcnNlcjtcclxuICAgICAgICBsZXQgaG91ckRpZmZlcmVuY2UgPSAwO1xyXG4gICAgICAgIGxldCBtaW51dGVEaWZmZXJlbmNlID0gMDtcclxuICAgICAgICBpZiAoaW5wdXRTdHJpbmdbaW5wdXRTdHJpbmcubGVuZ3RoIC0gMV0gPT09IFwiWlwiKSB7XHJcbiAgICAgICAgICAgIHRpbWVTdHJpbmcgPSBpbnB1dFN0cmluZy5zdWJzdHJpbmcoMCwgaW5wdXRTdHJpbmcubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgIGlzVVRDID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IG5ldyBOdW1iZXIoaW5wdXRTdHJpbmdbaW5wdXRTdHJpbmcubGVuZ3RoIC0gMV0pO1xyXG4gICAgICAgICAgICBpZiAoaXNOYU4obnVtYmVyLnZhbHVlT2YoKSkpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgICAgIHRpbWVTdHJpbmcgPSBpbnB1dFN0cmluZztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzVVRDKSB7XHJcbiAgICAgICAgICAgIGlmICh0aW1lU3RyaW5nLmluZGV4T2YoXCIrXCIpICE9PSAtMSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgaWYgKHRpbWVTdHJpbmcuaW5kZXhPZihcIi1cIikgIT09IC0xKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IG11bHRpcGxpZXIgPSAxO1xyXG4gICAgICAgICAgICBsZXQgZGlmZmVyZW5jZVBvc2l0aW9uID0gdGltZVN0cmluZy5pbmRleE9mKFwiK1wiKTtcclxuICAgICAgICAgICAgbGV0IGRpZmZlcmVuY2VTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgICAgICBpZiAoZGlmZmVyZW5jZVBvc2l0aW9uID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgZGlmZmVyZW5jZVBvc2l0aW9uID0gdGltZVN0cmluZy5pbmRleE9mKFwiLVwiKTtcclxuICAgICAgICAgICAgICAgIG11bHRpcGxpZXIgPSAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGlmZmVyZW5jZVBvc2l0aW9uICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgZGlmZmVyZW5jZVN0cmluZyA9IHRpbWVTdHJpbmcuc3Vic3RyaW5nKGRpZmZlcmVuY2VQb3NpdGlvbiArIDEpO1xyXG4gICAgICAgICAgICAgICAgdGltZVN0cmluZyA9IHRpbWVTdHJpbmcuc3Vic3RyaW5nKDAsIGRpZmZlcmVuY2VQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGRpZmZlcmVuY2VTdHJpbmcubGVuZ3RoICE9PSAyKSAmJiAoZGlmZmVyZW5jZVN0cmluZy5sZW5ndGggIT09IDQpKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgICAgIGxldCBudW1iZXIgPSBwYXJzZUludChkaWZmZXJlbmNlU3RyaW5nLnN1YnN0cmluZygwLCAyKSwgMTApO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKG51bWJlci52YWx1ZU9mKCkpKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgICAgIGhvdXJEaWZmZXJlbmNlID0gbXVsdGlwbGllciAqIG51bWJlcjtcclxuICAgICAgICAgICAgICAgIGlmIChkaWZmZXJlbmNlU3RyaW5nLmxlbmd0aCA9PT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG51bWJlciA9IHBhcnNlSW50KGRpZmZlcmVuY2VTdHJpbmcuc3Vic3RyaW5nKDIsIDQpLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKG51bWJlci52YWx1ZU9mKCkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgbWludXRlRGlmZmVyZW5jZSA9IG11bHRpcGxpZXIgKiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGZyYWN0aW9uUG9pbnRQb3NpdGlvbiA9IHRpbWVTdHJpbmcuaW5kZXhPZihcIi5cIik7XHJcbiAgICAgICAgaWYgKGZyYWN0aW9uUG9pbnRQb3NpdGlvbiA9PT0gLTEpXHJcbiAgICAgICAgICAgIGZyYWN0aW9uUG9pbnRQb3NpdGlvbiA9IHRpbWVTdHJpbmcuaW5kZXhPZihcIixcIik7XHJcbiAgICAgICAgaWYgKGZyYWN0aW9uUG9pbnRQb3NpdGlvbiAhPT0gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgZnJhY3Rpb25QYXJ0Q2hlY2sgPSBuZXcgTnVtYmVyKGAwJHt0aW1lU3RyaW5nLnN1YnN0cmluZyhmcmFjdGlvblBvaW50UG9zaXRpb24pfWApO1xyXG4gICAgICAgICAgICBpZiAoaXNOYU4oZnJhY3Rpb25QYXJ0Q2hlY2sudmFsdWVPZigpKSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgZnJhY3Rpb25QYXJ0ID0gZnJhY3Rpb25QYXJ0Q2hlY2sudmFsdWVPZigpO1xyXG4gICAgICAgICAgICBkYXRlVGltZVN0cmluZyA9IHRpbWVTdHJpbmcuc3Vic3RyaW5nKDAsIGZyYWN0aW9uUG9pbnRQb3NpdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgZGF0ZVRpbWVTdHJpbmcgPSB0aW1lU3RyaW5nO1xyXG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xyXG4gICAgICAgICAgICBjYXNlIChkYXRlVGltZVN0cmluZy5sZW5ndGggPT09IDgpOlxyXG4gICAgICAgICAgICAgICAgcGFyc2VyID0gLyhcXGR7NH0pKFxcZHsyfSkoXFxkezJ9KS9pZztcclxuICAgICAgICAgICAgICAgIGlmIChmcmFjdGlvblBvaW50UG9zaXRpb24gIT09IC0xKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIChkYXRlVGltZVN0cmluZy5sZW5ndGggPT09IDEwKTpcclxuICAgICAgICAgICAgICAgIHBhcnNlciA9IC8oXFxkezR9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KS9pZztcclxuICAgICAgICAgICAgICAgIGlmIChmcmFjdGlvblBvaW50UG9zaXRpb24gIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZyYWN0aW9uUmVzdWx0ID0gNjAgKiBmcmFjdGlvblBhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taW51dGUgPSBNYXRoLmZsb29yKGZyYWN0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICBmcmFjdGlvblJlc3VsdCA9IDYwICogKGZyYWN0aW9uUmVzdWx0IC0gdGhpcy5taW51dGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kID0gTWF0aC5mbG9vcihmcmFjdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb25SZXN1bHQgPSAxMDAwICogKGZyYWN0aW9uUmVzdWx0IC0gdGhpcy5zZWNvbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWlsbGlzZWNvbmQgPSBNYXRoLmZsb29yKGZyYWN0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIChkYXRlVGltZVN0cmluZy5sZW5ndGggPT09IDEyKTpcclxuICAgICAgICAgICAgICAgIHBhcnNlciA9IC8oXFxkezR9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pL2lnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZyYWN0aW9uUG9pbnRQb3NpdGlvbiAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZnJhY3Rpb25SZXN1bHQgPSA2MCAqIGZyYWN0aW9uUGFydDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY29uZCA9IE1hdGguZmxvb3IoZnJhY3Rpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uUmVzdWx0ID0gMTAwMCAqIChmcmFjdGlvblJlc3VsdCAtIHRoaXMuc2Vjb25kKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbGxpc2Vjb25kID0gTWF0aC5mbG9vcihmcmFjdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAoZGF0ZVRpbWVTdHJpbmcubGVuZ3RoID09PSAxNCk6XHJcbiAgICAgICAgICAgICAgICBwYXJzZXIgPSAvKFxcZHs0fSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pL2lnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZyYWN0aW9uUG9pbnRQb3NpdGlvbiAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmcmFjdGlvblJlc3VsdCA9IDEwMDAgKiBmcmFjdGlvblBhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taWxsaXNlY29uZCA9IE1hdGguZmxvb3IoZnJhY3Rpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBhcnNlckFycmF5ID0gcGFyc2VyLmV4ZWMoZGF0ZVRpbWVTdHJpbmcpO1xyXG4gICAgICAgIGlmIChwYXJzZXJBcnJheSA9PT0gbnVsbClcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgcGFyc2VyQXJyYXkubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgc3dpdGNoIChqKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbal0sIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbal0sIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRheSA9IHBhcnNlSW50KHBhcnNlckFycmF5W2pdLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ob3VyID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbal0sIDEwKSArIGhvdXJEaWZmZXJlbmNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWludXRlID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbal0sIDEwKSArIG1pbnV0ZURpZmZlcmVuY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWNvbmQgPSBwYXJzZUludChwYXJzZXJBcnJheVtqXSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzVVRDID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wRGF0ZSA9IG5ldyBEYXRlKHRoaXMueWVhciwgdGhpcy5tb250aCwgdGhpcy5kYXksIHRoaXMuaG91ciwgdGhpcy5taW51dGUsIHRoaXMuc2Vjb25kLCB0aGlzLm1pbGxpc2Vjb25kKTtcclxuICAgICAgICAgICAgdGhpcy55ZWFyID0gdGVtcERhdGUuZ2V0VVRDRnVsbFllYXIoKTtcclxuICAgICAgICAgICAgdGhpcy5tb250aCA9IHRlbXBEYXRlLmdldFVUQ01vbnRoKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF5ID0gdGVtcERhdGUuZ2V0VVRDRGF5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuaG91ciA9IHRlbXBEYXRlLmdldFVUQ0hvdXJzKCk7XHJcbiAgICAgICAgICAgIHRoaXMubWludXRlID0gdGVtcERhdGUuZ2V0VVRDTWludXRlcygpO1xyXG4gICAgICAgICAgICB0aGlzLnNlY29uZCA9IHRlbXBEYXRlLmdldFVUQ1NlY29uZHMoKTtcclxuICAgICAgICAgICAgdGhpcy5taWxsaXNlY29uZCA9IHRlbXBEYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRvU3RyaW5nKGVuY29kaW5nID0gXCJpc29cIikge1xyXG4gICAgICAgIGlmIChlbmNvZGluZyA9PT0gXCJpc29cIikge1xyXG4gICAgICAgICAgICBjb25zdCBvdXRwdXRBcnJheSA9IFtdO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMueWVhciwgNCkpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMubW9udGgsIDIpKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChwdnV0aWxzLnBhZE51bWJlcih0aGlzLmRheSwgMikpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMuaG91ciwgMikpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMubWludXRlLCAyKSk7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2gocHZ1dGlscy5wYWROdW1iZXIodGhpcy5zZWNvbmQsIDIpKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMubWlsbGlzZWNvbmQgIT09IDApIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2goXCIuXCIpO1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChwdnV0aWxzLnBhZE51bWJlcih0aGlzLm1pbGxpc2Vjb25kLCAzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChcIlpcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXRBcnJheS5qb2luKFwiXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoZW5jb2RpbmcpO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICBtaWxsaXNlY29uZDogdGhpcy5taWxsaXNlY29uZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbl9hJDUgPSBHZW5lcmFsaXplZFRpbWU7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuR2VuZXJhbGl6ZWRUaW1lID0gX2EkNTtcclxufSkoKTtcclxuR2VuZXJhbGl6ZWRUaW1lLk5BTUUgPSBcIkdlbmVyYWxpemVkVGltZVwiO1xuXG52YXIgX2EkNDtcclxuY2xhc3MgREFURSBleHRlbmRzIFV0ZjhTdHJpbmcge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMzE7XHJcbiAgICB9XHJcbn1cclxuX2EkNCA9IERBVEU7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuREFURSA9IF9hJDQ7XHJcbn0pKCk7XHJcbkRBVEUuTkFNRSA9IFwiREFURVwiO1xuXG52YXIgX2EkMztcclxuY2xhc3MgVGltZU9mRGF5IGV4dGVuZHMgVXRmOFN0cmluZyB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAzMjtcclxuICAgIH1cclxufVxyXG5fYSQzID0gVGltZU9mRGF5O1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlRpbWVPZkRheSA9IF9hJDM7XHJcbn0pKCk7XHJcblRpbWVPZkRheS5OQU1FID0gXCJUaW1lT2ZEYXlcIjtcblxudmFyIF9hJDI7XHJcbmNsYXNzIERhdGVUaW1lIGV4dGVuZHMgVXRmOFN0cmluZyB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAzMztcclxuICAgIH1cclxufVxyXG5fYSQyID0gRGF0ZVRpbWU7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuRGF0ZVRpbWUgPSBfYSQyO1xyXG59KSgpO1xyXG5EYXRlVGltZS5OQU1FID0gXCJEYXRlVGltZVwiO1xuXG52YXIgX2EkMTtcclxuY2xhc3MgRHVyYXRpb24gZXh0ZW5kcyBVdGY4U3RyaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDM0O1xyXG4gICAgfVxyXG59XHJcbl9hJDEgPSBEdXJhdGlvbjtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5EdXJhdGlvbiA9IF9hJDE7XHJcbn0pKCk7XHJcbkR1cmF0aW9uLk5BTUUgPSBcIkR1cmF0aW9uXCI7XG5cbnZhciBfYTtcclxuY2xhc3MgVElNRSBleHRlbmRzIFV0ZjhTdHJpbmcge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTQ7XHJcbiAgICB9XHJcbn1cclxuX2EgPSBUSU1FO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlRJTUUgPSBfYTtcclxufSkoKTtcclxuVElNRS5OQU1FID0gXCJUSU1FXCI7XG5cbmNsYXNzIEFueSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IG5hbWUgPSBFTVBUWV9TVFJJTkcsIG9wdGlvbmFsID0gZmFsc2UsIH0gPSB7fSkge1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgdGhpcy5vcHRpb25hbCA9IG9wdGlvbmFsO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIENob2ljZSBleHRlbmRzIEFueSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlID0gW10sIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFJlcGVhdGVkIGV4dGVuZHMgQW55IHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUgPSBuZXcgQW55KCksIGxvY2FsID0gZmFsc2UsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG9jYWwgPSBsb2NhbDtcclxuICAgIH1cclxufVxuXG5jbGFzcyBSYXdEYXRhIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgZGF0YSA9IEVNUFRZX1ZJRVcgfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5kYXRhVmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGRhdGEpO1xyXG4gICAgfVxyXG4gICAgZ2V0IGRhdGEoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICB9XHJcbiAgICBzZXQgZGF0YSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuZGF0YVZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBlbmRMZW5ndGggPSBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuZGF0YVZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcikuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGVuZExlbmd0aCk7XHJcbiAgICAgICAgcmV0dXJuIGVuZExlbmd0aDtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICB9XHJcbn1cblxuZnVuY3Rpb24gY29tcGFyZVNjaGVtYShyb290LCBpbnB1dERhdGEsIGlucHV0U2NoZW1hKSB7XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEgaW5zdGFuY2VvZiBDaG9pY2UpIHtcclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGlucHV0U2NoZW1hLnZhbHVlLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbXBhcmVTY2hlbWEocm9vdCwgaW5wdXREYXRhLCBpbnB1dFNjaGVtYS52YWx1ZVtqXSk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQudmVyaWZpZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVyaWZpZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc3QgX3Jlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBcIldyb25nIHZhbHVlcyBmb3IgQ2hvaWNlIHR5cGVcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLmhhc093blByb3BlcnR5KE5BTUUpKVxyXG4gICAgICAgICAgICAgICAgX3Jlc3VsdC5uYW1lID0gaW5wdXRTY2hlbWEubmFtZTtcclxuICAgICAgICAgICAgcmV0dXJuIF9yZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hIGluc3RhbmNlb2YgQW55KSB7XHJcbiAgICAgICAgaWYgKGlucHV0U2NoZW1hLmhhc093blByb3BlcnR5KE5BTUUpKVxyXG4gICAgICAgICAgICByb290W2lucHV0U2NoZW1hLm5hbWVdID0gaW5wdXREYXRhO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiB0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKChyb290IGluc3RhbmNlb2YgT2JqZWN0KSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyByb290IG9iamVjdFwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKChpbnB1dERhdGEgaW5zdGFuY2VvZiBPYmplY3QpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIGRhdGFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICgoaW5wdXRTY2hlbWEgaW5zdGFuY2VvZiBPYmplY3QpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKChJRF9CTE9DSyBpbiBpbnB1dFNjaGVtYSkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoKEZST01fQkVSIGluIGlucHV0U2NoZW1hLmlkQmxvY2spID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKChUT19CRVIgaW4gaW5wdXRTY2hlbWEuaWRCbG9jaykgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCBlbmNvZGVkSWQgPSBpbnB1dFNjaGVtYS5pZEJsb2NrLnRvQkVSKGZhbHNlKTtcclxuICAgIGlmIChlbmNvZGVkSWQuYnl0ZUxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIkVycm9yIGVuY29kaW5nIGlkQmxvY2sgZm9yIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGVjb2RlZE9mZnNldCA9IGlucHV0U2NoZW1hLmlkQmxvY2suZnJvbUJFUihlbmNvZGVkSWQsIDAsIGVuY29kZWRJZC5ieXRlTGVuZ3RoKTtcclxuICAgIGlmIChkZWNvZGVkT2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIkVycm9yIGRlY29kaW5nIGlkQmxvY2sgZm9yIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2suaGFzT3duUHJvcGVydHkoVEFHX0NMQVNTKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLnRhZ0NsYXNzICE9PSBpbnB1dERhdGEuaWRCbG9jay50YWdDbGFzcykge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLmhhc093blByb3BlcnR5KFRBR19OVU1CRVIpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2sudGFnTnVtYmVyICE9PSBpbnB1dERhdGEuaWRCbG9jay50YWdOdW1iZXIpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay5oYXNPd25Qcm9wZXJ0eShJU19DT05TVFJVQ1RFRCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay5pc0NvbnN0cnVjdGVkICE9PSBpbnB1dERhdGEuaWRCbG9jay5pc0NvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKCEoSVNfSEVYX09OTFkgaW4gaW5wdXRTY2hlbWEuaWRCbG9jaykpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLmlzSGV4T25seSAhPT0gaW5wdXREYXRhLmlkQmxvY2suaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2suaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgaWYgKChWQUxVRV9IRVhfVklFVyBpbiBpbnB1dFNjaGVtYS5pZEJsb2NrKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNjaGVtYVZpZXcgPSBpbnB1dFNjaGVtYS5pZEJsb2NrLnZhbHVlSGV4VmlldztcclxuICAgICAgICBjb25zdCBhc24xVmlldyA9IGlucHV0RGF0YS5pZEJsb2NrLnZhbHVlSGV4VmlldztcclxuICAgICAgICBpZiAoc2NoZW1hVmlldy5sZW5ndGggIT09IGFzbjFWaWV3Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2NoZW1hVmlldy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoc2NoZW1hVmlld1tpXSAhPT0gYXNuMVZpZXdbMV0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgaW5wdXRTY2hlbWEubmFtZSA9IGlucHV0U2NoZW1hLm5hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSlcclxuICAgICAgICAgICAgcm9vdFtpbnB1dFNjaGVtYS5uYW1lXSA9IGlucHV0RGF0YTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYSBpbnN0YW5jZW9mIHR5cGVTdG9yZS5Db25zdHJ1Y3RlZCkge1xyXG4gICAgICAgIGxldCBhZG1pc3Npb24gPSAwO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7XHJcbiAgICAgICAgICAgICAgICBlcnJvcjogXCJVbmtub3duIGVycm9yXCIsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGxldCBtYXhMZW5ndGggPSBpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBpZiAobWF4TGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXSBpbnN0YW5jZW9mIFJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICBtYXhMZW5ndGggPSBpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1heExlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZS5sZW5ndGggPT09IDApICYmXHJcbiAgICAgICAgICAgIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aCAhPT0gMCkpIHtcclxuICAgICAgICAgICAgbGV0IF9vcHRpb25hbCA9IHRydWU7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZS5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgIF9vcHRpb25hbCA9IF9vcHRpb25hbCAmJiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVtpXS5vcHRpb25hbCB8fCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGlmIChfb3B0aW9uYWwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVyaWZpZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dFNjaGVtYS5uYW1lID0gaW5wdXRTY2hlbWEubmFtZS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBFTVBUWV9TVFJJTkcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvb3RbaW5wdXRTY2hlbWEubmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcm9vdC5lcnJvciA9IFwiSW5jb25zaXN0ZW50IG9iamVjdCBsZW5ndGhcIjtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heExlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICgoaSAtIGFkbWlzc2lvbikgPj0gaW5wdXREYXRhLnZhbHVlQmxvY2sudmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVtpXS5vcHRpb25hbCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBfcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5lcnJvciA9IFwiSW5jb25zaXN0ZW50IGxlbmd0aCBiZXR3ZWVuIEFTTi4xIGRhdGEgYW5kIHNjaGVtYVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdFtpbnB1dFNjaGVtYS5uYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZXN1bHQubmFtZSA9IGlucHV0U2NoZW1hLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXSBpbnN0YW5jZW9mIFJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcGFyZVNjaGVtYShyb290LCBpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZVtpXSwgaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC52ZXJpZmllZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0ub3B0aW9uYWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZG1pc3Npb24rKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290W2lucHV0U2NoZW1hLm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoKE5BTUUgaW4gaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXSkgJiYgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0ubmFtZS5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJyYXlSb290ID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoTE9DQUwgaW4gaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXSkgJiYgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0ubG9jYWwpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlSb290ID0gaW5wdXREYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVJvb3QgPSByb290O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFycmF5Um9vdFtpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdLm5hbWVdID09PSBcInVuZGVmaW5lZFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlSb290W2lucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0ubmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlSb290W2lucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0ubmFtZV0ucHVzaChpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZVtpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcGFyZVNjaGVtYShyb290LCBpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZVtpIC0gYWRtaXNzaW9uXSwgaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVtpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC52ZXJpZmllZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbaV0ub3B0aW9uYWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZG1pc3Npb24rKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290W2lucHV0U2NoZW1hLm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzdWx0LnZlcmlmaWVkID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBjb25zdCBfcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dFNjaGVtYS5uYW1lID0gaW5wdXRTY2hlbWEubmFtZS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBFTVBUWV9TVFJJTkcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdFtpbnB1dFNjaGVtYS5uYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICBfcmVzdWx0Lm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBfcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogdHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5wcmltaXRpdmVTY2hlbWEgJiZcclxuICAgICAgICAoVkFMVUVfSEVYX1ZJRVcgaW4gaW5wdXREYXRhLnZhbHVlQmxvY2spKSB7XHJcbiAgICAgICAgY29uc3QgYXNuMSA9IGxvY2FsRnJvbUJFUihpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZUhleFZpZXcpO1xyXG4gICAgICAgIGlmIChhc24xLm9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgX3Jlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogYXNuMS5yZXN1bHRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290W2lucHV0U2NoZW1hLm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIF9yZXN1bHQubmFtZSA9IGlucHV0U2NoZW1hLm5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIF9yZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb21wYXJlU2NoZW1hKHJvb3QsIGFzbjEucmVzdWx0LCBpbnB1dFNjaGVtYS5wcmltaXRpdmVTY2hlbWEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB2ZXJpZmllZDogdHJ1ZSxcclxuICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gdmVyaWZ5U2NoZW1hKGlucHV0QnVmZmVyLCBpbnB1dFNjaGVtYSkge1xyXG4gICAgaWYgKChpbnB1dFNjaGVtYSBpbnN0YW5jZW9mIE9iamVjdCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hIHR5cGVcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IGFzbjEgPSBsb2NhbEZyb21CRVIocHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpKTtcclxuICAgIGlmIChhc24xLm9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogYXNuMS5yZXN1bHRcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbXBhcmVTY2hlbWEoYXNuMS5yZXN1bHQsIGFzbjEucmVzdWx0LCBpbnB1dFNjaGVtYSk7XHJcbn1cblxuZXhwb3J0IHsgQW55LCBCYXNlQmxvY2ssIEJhc2VTdHJpbmdCbG9jaywgQml0U3RyaW5nLCBCbXBTdHJpbmcsIEJvb2xlYW4sIENoYXJhY3RlclN0cmluZywgQ2hvaWNlLCBDb25zdHJ1Y3RlZCwgREFURSwgRGF0ZVRpbWUsIER1cmF0aW9uLCBFbmRPZkNvbnRlbnQsIEVudW1lcmF0ZWQsIEdlbmVyYWxTdHJpbmcsIEdlbmVyYWxpemVkVGltZSwgR3JhcGhpY1N0cmluZywgSGV4QmxvY2ssIElBNVN0cmluZywgSW50ZWdlciwgTnVsbCwgTnVtZXJpY1N0cmluZywgT2JqZWN0SWRlbnRpZmllciwgT2N0ZXRTdHJpbmcsIFByaW1pdGl2ZSwgUHJpbnRhYmxlU3RyaW5nLCBSYXdEYXRhLCBSZWxhdGl2ZU9iamVjdElkZW50aWZpZXIsIFJlcGVhdGVkLCBTZXF1ZW5jZSwgU2V0LCBUSU1FLCBUZWxldGV4U3RyaW5nLCBUaW1lT2ZEYXksIFVUQ1RpbWUsIFVuaXZlcnNhbFN0cmluZywgVXRmOFN0cmluZywgVmFsdWVCbG9jaywgVmlkZW90ZXhTdHJpbmcsIFZpZXdXcml0ZXIsIFZpc2libGVTdHJpbmcsIGNvbXBhcmVTY2hlbWEsIGZyb21CRVIsIHZlcmlmeVNjaGVtYSB9O1xuIiwgImV4cG9ydCB2YXIgQXNuVHlwZVR5cGVzO1xuKGZ1bmN0aW9uIChBc25UeXBlVHlwZXMpIHtcbiAgICBBc25UeXBlVHlwZXNbQXNuVHlwZVR5cGVzW1wiU2VxdWVuY2VcIl0gPSAwXSA9IFwiU2VxdWVuY2VcIjtcbiAgICBBc25UeXBlVHlwZXNbQXNuVHlwZVR5cGVzW1wiU2V0XCJdID0gMV0gPSBcIlNldFwiO1xuICAgIEFzblR5cGVUeXBlc1tBc25UeXBlVHlwZXNbXCJDaG9pY2VcIl0gPSAyXSA9IFwiQ2hvaWNlXCI7XG59KShBc25UeXBlVHlwZXMgfHwgKEFzblR5cGVUeXBlcyA9IHt9KSk7XG5leHBvcnQgdmFyIEFzblByb3BUeXBlcztcbihmdW5jdGlvbiAoQXNuUHJvcFR5cGVzKSB7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkFueVwiXSA9IDFdID0gXCJBbnlcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiQm9vbGVhblwiXSA9IDJdID0gXCJCb29sZWFuXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIk9jdGV0U3RyaW5nXCJdID0gM10gPSBcIk9jdGV0U3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkJpdFN0cmluZ1wiXSA9IDRdID0gXCJCaXRTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiSW50ZWdlclwiXSA9IDVdID0gXCJJbnRlZ2VyXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkVudW1lcmF0ZWRcIl0gPSA2XSA9IFwiRW51bWVyYXRlZFwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJPYmplY3RJZGVudGlmaWVyXCJdID0gN10gPSBcIk9iamVjdElkZW50aWZpZXJcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVXRmOFN0cmluZ1wiXSA9IDhdID0gXCJVdGY4U3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkJtcFN0cmluZ1wiXSA9IDldID0gXCJCbXBTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVW5pdmVyc2FsU3RyaW5nXCJdID0gMTBdID0gXCJVbml2ZXJzYWxTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiTnVtZXJpY1N0cmluZ1wiXSA9IDExXSA9IFwiTnVtZXJpY1N0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJQcmludGFibGVTdHJpbmdcIl0gPSAxMl0gPSBcIlByaW50YWJsZVN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJUZWxldGV4U3RyaW5nXCJdID0gMTNdID0gXCJUZWxldGV4U3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlZpZGVvdGV4U3RyaW5nXCJdID0gMTRdID0gXCJWaWRlb3RleFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJJQTVTdHJpbmdcIl0gPSAxNV0gPSBcIklBNVN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJHcmFwaGljU3RyaW5nXCJdID0gMTZdID0gXCJHcmFwaGljU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlZpc2libGVTdHJpbmdcIl0gPSAxN10gPSBcIlZpc2libGVTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiR2VuZXJhbFN0cmluZ1wiXSA9IDE4XSA9IFwiR2VuZXJhbFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJDaGFyYWN0ZXJTdHJpbmdcIl0gPSAxOV0gPSBcIkNoYXJhY3RlclN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJVVENUaW1lXCJdID0gMjBdID0gXCJVVENUaW1lXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkdlbmVyYWxpemVkVGltZVwiXSA9IDIxXSA9IFwiR2VuZXJhbGl6ZWRUaW1lXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkRBVEVcIl0gPSAyMl0gPSBcIkRBVEVcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVGltZU9mRGF5XCJdID0gMjNdID0gXCJUaW1lT2ZEYXlcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiRGF0ZVRpbWVcIl0gPSAyNF0gPSBcIkRhdGVUaW1lXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkR1cmF0aW9uXCJdID0gMjVdID0gXCJEdXJhdGlvblwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJUSU1FXCJdID0gMjZdID0gXCJUSU1FXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIk51bGxcIl0gPSAyN10gPSBcIk51bGxcIjtcbn0pKEFzblByb3BUeXBlcyB8fCAoQXNuUHJvcFR5cGVzID0ge30pKTtcbiIsICJpbXBvcnQgKiBhcyBhc24xanMgZnJvbSBcImFzbjFqc1wiO1xuaW1wb3J0IHsgQnVmZmVyU291cmNlQ29udmVydGVyIH0gZnJvbSBcInB2dHN1dGlsc1wiO1xuZXhwb3J0IGNsYXNzIEJpdFN0cmluZyB7XG4gICAgY29uc3RydWN0b3IocGFyYW1zLCB1bnVzZWRCaXRzID0gMCkge1xuICAgICAgICB0aGlzLnVudXNlZEJpdHMgPSAwO1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuZnJvbU51bWJlcihwYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQnVmZmVyU291cmNlQ29udmVydGVyLmlzQnVmZmVyU291cmNlKHBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVudXNlZEJpdHMgPSB1bnVzZWRCaXRzO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihwYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiVW5zdXBwb3J0ZWQgdHlwZSBvZiAncGFyYW1zJyBhcmd1bWVudCBmb3IgQml0U3RyaW5nXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZyb21BU04oYXNuKSB7XG4gICAgICAgIGlmICghKGFzbiBpbnN0YW5jZW9mIGFzbjFqcy5CaXRTdHJpbmcpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgJ2FzbicgaXMgbm90IGluc3RhbmNlIG9mIEFTTi4xIEJpdFN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVudXNlZEJpdHMgPSBhc24udmFsdWVCbG9jay51bnVzZWRCaXRzO1xuICAgICAgICB0aGlzLnZhbHVlID0gYXNuLnZhbHVlQmxvY2sudmFsdWVIZXg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0b0FTTigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuQml0U3RyaW5nKHsgdW51c2VkQml0czogdGhpcy51bnVzZWRCaXRzLCB2YWx1ZUhleDogdGhpcy52YWx1ZSB9KTtcbiAgICB9XG4gICAgdG9TY2hlbWEobmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5CaXRTdHJpbmcoeyBuYW1lIH0pO1xuICAgIH1cbiAgICB0b051bWJlcigpIHtcbiAgICAgICAgbGV0IHJlcyA9IFwiXCI7XG4gICAgICAgIGNvbnN0IHVpbnRBcnJheSA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWUpO1xuICAgICAgICBmb3IgKGNvbnN0IG9jdGV0IG9mIHVpbnRBcnJheSkge1xuICAgICAgICAgICAgcmVzICs9IG9jdGV0LnRvU3RyaW5nKDIpLnBhZFN0YXJ0KDgsIFwiMFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXMgPSByZXMuc3BsaXQoXCJcIikucmV2ZXJzZSgpLmpvaW4oXCJcIik7XG4gICAgICAgIGlmICh0aGlzLnVudXNlZEJpdHMpIHtcbiAgICAgICAgICAgIHJlcyA9IHJlcy5zbGljZSh0aGlzLnVudXNlZEJpdHMpLnBhZFN0YXJ0KHRoaXMudW51c2VkQml0cywgXCIwXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZUludChyZXMsIDIpO1xuICAgIH1cbiAgICBmcm9tTnVtYmVyKHZhbHVlKSB7XG4gICAgICAgIGxldCBiaXRzID0gdmFsdWUudG9TdHJpbmcoMik7XG4gICAgICAgIGNvbnN0IG9jdGV0U2l6ZSA9IChiaXRzLmxlbmd0aCArIDcpID4+IDM7XG4gICAgICAgIHRoaXMudW51c2VkQml0cyA9IChvY3RldFNpemUgPDwgMykgLSBiaXRzLmxlbmd0aDtcbiAgICAgICAgY29uc3Qgb2N0ZXRzID0gbmV3IFVpbnQ4QXJyYXkob2N0ZXRTaXplKTtcbiAgICAgICAgYml0cyA9IGJpdHMucGFkU3RhcnQob2N0ZXRTaXplIDw8IDMsIFwiMFwiKS5zcGxpdChcIlwiKS5yZXZlcnNlKCkuam9pbihcIlwiKTtcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgb2N0ZXRTaXplKSB7XG4gICAgICAgICAgICBvY3RldHNbaW5kZXhdID0gcGFyc2VJbnQoYml0cy5zbGljZShpbmRleCA8PCAzLCAoaW5kZXggPDwgMykgKyA4KSwgMik7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSBvY3RldHMuYnVmZmVyO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBhc24xanMgZnJvbSBcImFzbjFqc1wiO1xuaW1wb3J0IHsgQnVmZmVyU291cmNlQ29udmVydGVyIH0gZnJvbSBcInB2dHN1dGlsc1wiO1xuZXhwb3J0IGNsYXNzIE9jdGV0U3RyaW5nIHtcbiAgICBnZXQgYnl0ZUxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyLmJ5dGVMZW5ndGg7XG4gICAgfVxuICAgIGdldCBieXRlT2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY29uc3RydWN0b3IocGFyYW0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIocGFyYW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKEJ1ZmZlclNvdXJjZUNvbnZlcnRlci5pc0J1ZmZlclNvdXJjZShwYXJhbSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHBhcmFtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocGFyYW0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBuZXcgVWludDhBcnJheShwYXJhbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmcm9tQVNOKGFzbikge1xuICAgICAgICBpZiAoIShhc24gaW5zdGFuY2VvZiBhc24xanMuT2N0ZXRTdHJpbmcpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgJ2FzbicgaXMgbm90IGluc3RhbmNlIG9mIEFTTi4xIE9jdGV0U3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVmZmVyID0gYXNuLnZhbHVlQmxvY2sudmFsdWVIZXg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0b0FTTigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuT2N0ZXRTdHJpbmcoeyB2YWx1ZUhleDogdGhpcy5idWZmZXIgfSk7XG4gICAgfVxuICAgIHRvU2NoZW1hKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuT2N0ZXRTdHJpbmcoeyBuYW1lIH0pO1xuICAgIH1cbn1cbiIsICJleHBvcnQgKiBmcm9tIFwiLi9iaXRfc3RyaW5nXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9vY3RldF9zdHJpbmdcIjtcbiIsICJpbXBvcnQgKiBhcyBhc24xanMgZnJvbSBcImFzbjFqc1wiO1xuaW1wb3J0IHsgQXNuUHJvcFR5cGVzIH0gZnJvbSBcIi4vZW51bXNcIjtcbmltcG9ydCB7IE9jdGV0U3RyaW5nIH0gZnJvbSBcIi4vdHlwZXMvaW5kZXhcIjtcbmV4cG9ydCBjb25zdCBBc25BbnlDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZSBpbnN0YW5jZW9mIGFzbjFqcy5OdWxsID8gbnVsbCA6IHZhbHVlLnZhbHVlQmVmb3JlRGVjb2RlVmlldyxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuTnVsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IGFzbjFqcy5mcm9tQkVSKHZhbHVlKTtcbiAgICAgICAgaWYgKHNjaGVtYS5yZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzY2hlbWEucmVzdWx0LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NoZW1hLnJlc3VsdDtcbiAgICB9LFxufTtcbmV4cG9ydCBjb25zdCBBc25JbnRlZ2VyQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCA+PSA0XG4gICAgICAgID8gdmFsdWUudmFsdWVCbG9jay50b1N0cmluZygpXG4gICAgICAgIDogdmFsdWUudmFsdWVCbG9jay52YWx1ZURlYyxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLkludGVnZXIoeyB2YWx1ZTogK3ZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25FbnVtZXJhdGVkQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZURlYyxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLkVudW1lcmF0ZWQoeyB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleFZpZXcsXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5JbnRlZ2VyKHsgdmFsdWVIZXg6IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25JbnRlZ2VyQmlnSW50Q29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudG9CaWdJbnQoKSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBhc24xanMuSW50ZWdlci5mcm9tQmlnSW50KHZhbHVlKSxcbn07XG5leHBvcnQgY29uc3QgQXNuQml0U3RyaW5nQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleFZpZXcsXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5CaXRTdHJpbmcoeyB2YWx1ZUhleDogdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbk9iamVjdElkZW50aWZpZXJDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnRvU3RyaW5nKCksXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5PYmplY3RJZGVudGlmaWVyKHsgdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbkJvb2xlYW5Db252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuQm9vbGVhbih7IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25PY3RldFN0cmluZ0NvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3LFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuT2N0ZXRTdHJpbmcoeyB2YWx1ZUhleDogdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbkNvbnN0cnVjdGVkT2N0ZXRTdHJpbmdDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiBuZXcgT2N0ZXRTdHJpbmcodmFsdWUuZ2V0VmFsdWUoKSksXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gdmFsdWUudG9BU04oKSxcbn07XG5mdW5jdGlvbiBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoQXNuMVR5cGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudmFsdWUsXG4gICAgICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBBc24xVHlwZSh7IHZhbHVlIH0pLFxuICAgIH07XG59XG5leHBvcnQgY29uc3QgQXNuVXRmOFN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuVXRmOFN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuQm1wU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5CbXBTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzblVuaXZlcnNhbFN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuVW5pdmVyc2FsU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25OdW1lcmljU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5OdW1lcmljU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25QcmludGFibGVTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLlByaW50YWJsZVN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuVGVsZXRleFN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuVGVsZXRleFN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuVmlkZW90ZXhTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLlZpZGVvdGV4U3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25JQTVTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLklBNVN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuR3JhcGhpY1N0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuR3JhcGhpY1N0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuVmlzaWJsZVN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuVmlzaWJsZVN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuR2VuZXJhbFN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuR2VuZXJhbFN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuQ2hhcmFjdGVyU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5DaGFyYWN0ZXJTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzblVUQ1RpbWVDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS50b0RhdGUoKSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLlVUQ1RpbWUoeyB2YWx1ZURhdGU6IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25HZW5lcmFsaXplZFRpbWVDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS50b0RhdGUoKSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLkdlbmVyYWxpemVkVGltZSh7IHZhbHVlRGF0ZTogdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbk51bGxDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKCkgPT4gbnVsbCxcbiAgICB0b0FTTjogKCkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5OdWxsKCk7XG4gICAgfSxcbn07XG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdENvbnZlcnRlcih0eXBlKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkFueTpcbiAgICAgICAgICAgIHJldHVybiBBc25BbnlDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkJpdFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25CaXRTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkJtcFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25CbXBTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkJvb2xlYW46XG4gICAgICAgICAgICByZXR1cm4gQXNuQm9vbGVhbkNvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuQ2hhcmFjdGVyU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkNoYXJhY3RlclN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuRW51bWVyYXRlZDpcbiAgICAgICAgICAgIHJldHVybiBBc25FbnVtZXJhdGVkQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5HZW5lcmFsU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkdlbmVyYWxTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkdlbmVyYWxpemVkVGltZTpcbiAgICAgICAgICAgIHJldHVybiBBc25HZW5lcmFsaXplZFRpbWVDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkdyYXBoaWNTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuR3JhcGhpY1N0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuSUE1U3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbklBNVN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuSW50ZWdlcjpcbiAgICAgICAgICAgIHJldHVybiBBc25JbnRlZ2VyQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5OdWxsOlxuICAgICAgICAgICAgcmV0dXJuIEFzbk51bGxDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLk51bWVyaWNTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuTnVtZXJpY1N0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuT2JqZWN0SWRlbnRpZmllcjpcbiAgICAgICAgICAgIHJldHVybiBBc25PYmplY3RJZGVudGlmaWVyQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5PY3RldFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25PY3RldFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuUHJpbnRhYmxlU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzblByaW50YWJsZVN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuVGVsZXRleFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25UZWxldGV4U3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5VVENUaW1lOlxuICAgICAgICAgICAgcmV0dXJuIEFzblVUQ1RpbWVDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLlVuaXZlcnNhbFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25Vbml2ZXJzYWxTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLlV0ZjhTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuVXRmOFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuVmlkZW90ZXhTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuVmlkZW90ZXhTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLlZpc2libGVTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuVmlzaWJsZVN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gaXNDb252ZXJ0aWJsZSh0YXJnZXQpIHtcbiAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gXCJmdW5jdGlvblwiICYmIHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHRhcmdldC5wcm90b3R5cGUudG9BU04gJiYgdGFyZ2V0LnByb3RvdHlwZS5mcm9tQVNOKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpc0NvbnZlcnRpYmxlKHRhcmdldC5wcm90b3R5cGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gISEodGFyZ2V0ICYmIHR5cGVvZiB0YXJnZXQgPT09IFwib2JqZWN0XCIgJiYgXCJ0b0FTTlwiIGluIHRhcmdldCAmJiBcImZyb21BU05cIiBpbiB0YXJnZXQpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1R5cGVPZkFycmF5KHRhcmdldCkge1xuICAgIHZhciBfYTtcbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCk7XG4gICAgICAgIGlmICgoKF9hID0gcHJvdG8gPT09IG51bGwgfHwgcHJvdG8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb3RvLnByb3RvdHlwZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbnN0cnVjdG9yKSA9PT0gQXJyYXkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1R5cGVPZkFycmF5KHByb3RvKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXlFcXVhbChieXRlczEsIGJ5dGVzMikge1xuICAgIGlmICghKGJ5dGVzMSAmJiBieXRlczIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGJ5dGVzMS5ieXRlTGVuZ3RoICE9PSBieXRlczIuYnl0ZUxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGIxID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMxKTtcbiAgICBjb25zdCBiMiA9IG5ldyBVaW50OEFycmF5KGJ5dGVzMik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlczEuYnl0ZUxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChiMVtpXSAhPT0gYjJbaV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbiIsICJpbXBvcnQgKiBhcyBhc24xanMgZnJvbSBcImFzbjFqc1wiO1xuaW1wb3J0IHsgQXNuUHJvcFR5cGVzLCBBc25UeXBlVHlwZXMgfSBmcm9tIFwiLi9lbnVtc1wiO1xuaW1wb3J0IHsgaXNDb252ZXJ0aWJsZSB9IGZyb20gXCIuL2hlbHBlclwiO1xuZXhwb3J0IGNsYXNzIEFzblNjaGVtYVN0b3JhZ2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLml0ZW1zID0gbmV3IFdlYWtNYXAoKTtcbiAgICB9XG4gICAgaGFzKHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5oYXModGFyZ2V0KTtcbiAgICB9XG4gICAgZ2V0KHRhcmdldCwgY2hlY2tTY2hlbWEgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLml0ZW1zLmdldCh0YXJnZXQpO1xuICAgICAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IHNjaGVtYSBmb3IgJyR7dGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lfScgdGFyZ2V0YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrU2NoZW1hICYmICFzY2hlbWEuc2NoZW1hKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNjaGVtYSAnJHt0YXJnZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWV9JyBkb2Vzbid0IGNvbnRhaW4gQVNOLjEgc2NoZW1hLiBDYWxsICdBc25TY2hlbWFTdG9yYWdlLmNhY2hlJy5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgIH1cbiAgICBjYWNoZSh0YXJnZXQpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gdGhpcy5nZXQodGFyZ2V0KTtcbiAgICAgICAgaWYgKCFzY2hlbWEuc2NoZW1hKSB7XG4gICAgICAgICAgICBzY2hlbWEuc2NoZW1hID0gdGhpcy5jcmVhdGUodGFyZ2V0LCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjcmVhdGVEZWZhdWx0KHRhcmdldCkge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSB7XG4gICAgICAgICAgICB0eXBlOiBBc25UeXBlVHlwZXMuU2VxdWVuY2UsXG4gICAgICAgICAgICBpdGVtczoge30sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHBhcmVudFNjaGVtYSA9IHRoaXMuZmluZFBhcmVudFNjaGVtYSh0YXJnZXQpO1xuICAgICAgICBpZiAocGFyZW50U2NoZW1hKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHNjaGVtYSwgcGFyZW50U2NoZW1hKTtcbiAgICAgICAgICAgIHNjaGVtYS5pdGVtcyA9IE9iamVjdC5hc3NpZ24oe30sIHNjaGVtYS5pdGVtcywgcGFyZW50U2NoZW1hLml0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgIH1cbiAgICBjcmVhdGUodGFyZ2V0LCB1c2VOYW1lcykge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLml0ZW1zLmdldCh0YXJnZXQpIHx8IHRoaXMuY3JlYXRlRGVmYXVsdCh0YXJnZXQpO1xuICAgICAgICBjb25zdCBhc24xVmFsdWUgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hLml0ZW1zKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gc2NoZW1hLml0ZW1zW2tleV07XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gdXNlTmFtZXMgPyBrZXkgOiBcIlwiO1xuICAgICAgICAgICAgbGV0IGFzbjFJdGVtO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiAoaXRlbS50eXBlKSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IEFzbjFUeXBlTmFtZSA9IEFzblByb3BUeXBlc1tpdGVtLnR5cGVdO1xuICAgICAgICAgICAgICAgIGNvbnN0IEFzbjFUeXBlID0gYXNuMWpzW0FzbjFUeXBlTmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKCFBc24xVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgQVNOMSBjbGFzcyBieSBuYW1lICcke0FzbjFUeXBlTmFtZX0nYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gbmV3IEFzbjFUeXBlKHsgbmFtZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzQ29udmVydGlibGUoaXRlbS50eXBlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IGl0ZW0udHlwZSgpO1xuICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gaW5zdGFuY2UudG9TY2hlbWEobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpdGVtLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbVNjaGVtYSA9IHRoaXMuZ2V0KGl0ZW0udHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1TY2hlbWEudHlwZSA9PT0gQXNuVHlwZVR5cGVzLkNob2ljZSkge1xuICAgICAgICAgICAgICAgICAgICBhc24xSXRlbSA9IG5ldyBhc24xanMuQW55KHsgbmFtZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gdGhpcy5jcmVhdGUoaXRlbS50eXBlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGFzbjFJdGVtLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gbmV3IGFzbjFqcy5BbnkoeyBuYW1lIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uYWwgPSAhIWl0ZW0ub3B0aW9uYWwgfHwgaXRlbS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChpdGVtLnJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0ubmFtZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgY29uc3QgQ29udGFpbmVyID0gaXRlbS5yZXBlYXRlZCA9PT0gXCJzZXRcIlxuICAgICAgICAgICAgICAgICAgICA/IGFzbjFqcy5TZXRcbiAgICAgICAgICAgICAgICAgICAgOiBhc24xanMuU2VxdWVuY2U7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBuZXcgQ29udGFpbmVyKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBhc24xanMuUmVwZWF0ZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFzbjFJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbS5jb250ZXh0ICE9PSBudWxsICYmIGl0ZW0uY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaW1wbGljaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtLnR5cGUgPT09IFwibnVtYmVyXCIgfHwgaXNDb252ZXJ0aWJsZShpdGVtLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb250YWluZXIgPSBpdGVtLnJlcGVhdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhc24xanMuQ29uc3RydWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFzbjFqcy5QcmltaXRpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChuZXcgQ29udGFpbmVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkQmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnQ2xhc3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogaXRlbS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlKGl0ZW0udHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1JlcGVhdGVkID0gISFpdGVtLnJlcGVhdGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gIWlzUmVwZWF0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZ2V0KGl0ZW0udHlwZSwgdHJ1ZSkuc2NoZW1hXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhc24xSXRlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gXCJ2YWx1ZUJsb2NrXCIgaW4gdmFsdWUgPyB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlIDogdmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChuZXcgYXNuMWpzLkNvbnN0cnVjdGVkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAhaXNSZXBlYXRlZCA/IG5hbWUgOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkQmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnQ2xhc3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogaXRlbS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChuZXcgYXNuMWpzLkNvbnN0cnVjdGVkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWRCbG9jazoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0NsYXNzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogaXRlbS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBbYXNuMUl0ZW1dLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0ub3B0aW9uYWwgPSBvcHRpb25hbDtcbiAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChhc24xSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChzY2hlbWEudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBBc25UeXBlVHlwZXMuU2VxdWVuY2U6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuU2VxdWVuY2UoeyB2YWx1ZTogYXNuMVZhbHVlLCBuYW1lOiBcIlwiIH0pO1xuICAgICAgICAgICAgY2FzZSBBc25UeXBlVHlwZXMuU2V0OlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgYXNuMWpzLlNldCh7IHZhbHVlOiBhc24xVmFsdWUsIG5hbWU6IFwiXCIgfSk7XG4gICAgICAgICAgICBjYXNlIEFzblR5cGVUeXBlcy5DaG9pY2U6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuQ2hvaWNlKHsgdmFsdWU6IGFzbjFWYWx1ZSwgbmFtZTogXCJcIiB9KTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBBU04xIHR5cGUgaW4gdXNlYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0KHRhcmdldCwgc2NoZW1hKSB7XG4gICAgICAgIHRoaXMuaXRlbXMuc2V0KHRhcmdldCwgc2NoZW1hKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpO1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLml0ZW1zLmdldChwYXJlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYSB8fCB0aGlzLmZpbmRQYXJlbnRTY2hlbWEocGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgQXNuU2NoZW1hU3RvcmFnZSB9IGZyb20gXCIuL3NjaGVtYVwiO1xuZXhwb3J0IGNvbnN0IHNjaGVtYVN0b3JhZ2UgPSBuZXcgQXNuU2NoZW1hU3RvcmFnZSgpO1xuIiwgImltcG9ydCAqIGFzIGNvbnZlcnRlcnMgZnJvbSBcIi4vY29udmVydGVyc1wiO1xuaW1wb3J0IHsgQXNuVHlwZVR5cGVzIH0gZnJvbSBcIi4vZW51bXNcIjtcbmltcG9ydCB7IHNjaGVtYVN0b3JhZ2UgfSBmcm9tIFwiLi9zdG9yYWdlXCI7XG5leHBvcnQgY29uc3QgQXNuVHlwZSA9IChvcHRpb25zKSA9PiAodGFyZ2V0KSA9PiB7XG4gICAgbGV0IHNjaGVtYTtcbiAgICBpZiAoIXNjaGVtYVN0b3JhZ2UuaGFzKHRhcmdldCkpIHtcbiAgICAgICAgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5jcmVhdGVEZWZhdWx0KHRhcmdldCk7XG4gICAgICAgIHNjaGVtYVN0b3JhZ2Uuc2V0KHRhcmdldCwgc2NoZW1hKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuZ2V0KHRhcmdldCk7XG4gICAgfVxuICAgIE9iamVjdC5hc3NpZ24oc2NoZW1hLCBvcHRpb25zKTtcbn07XG5leHBvcnQgY29uc3QgQXNuQ2hvaWNlVHlwZSA9ICgpID0+IEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuQ2hvaWNlIH0pO1xuZXhwb3J0IGNvbnN0IEFzblNldFR5cGUgPSAob3B0aW9ucykgPT4gQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5TZXQsIC4uLm9wdGlvbnMgfSk7XG5leHBvcnQgY29uc3QgQXNuU2VxdWVuY2VUeXBlID0gKG9wdGlvbnMpID0+IEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuU2VxdWVuY2UsIC4uLm9wdGlvbnMgfSk7XG5leHBvcnQgY29uc3QgQXNuUHJvcCA9IChvcHRpb25zKSA9PiAodGFyZ2V0LCBwcm9wZXJ0eUtleSkgPT4ge1xuICAgIGxldCBzY2hlbWE7XG4gICAgaWYgKCFzY2hlbWFTdG9yYWdlLmhhcyh0YXJnZXQuY29uc3RydWN0b3IpKSB7XG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuY3JlYXRlRGVmYXVsdCh0YXJnZXQuY29uc3RydWN0b3IpO1xuICAgICAgICBzY2hlbWFTdG9yYWdlLnNldCh0YXJnZXQuY29uc3RydWN0b3IsIHNjaGVtYSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmdldCh0YXJnZXQuY29uc3RydWN0b3IpO1xuICAgIH1cbiAgICBjb25zdCBjb3B5T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpO1xuICAgIGlmICh0eXBlb2YgY29weU9wdGlvbnMudHlwZSA9PT0gXCJudW1iZXJcIiAmJiAhY29weU9wdGlvbnMuY29udmVydGVyKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRDb252ZXJ0ZXIgPSBjb252ZXJ0ZXJzLmRlZmF1bHRDb252ZXJ0ZXIob3B0aW9ucy50eXBlKTtcbiAgICAgICAgaWYgKCFkZWZhdWx0Q29udmVydGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgZGVmYXVsdCBjb252ZXJ0ZXIgZm9yIHByb3BlcnR5ICcke3Byb3BlcnR5S2V5fScgb2YgJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb3B5T3B0aW9ucy5jb252ZXJ0ZXIgPSBkZWZhdWx0Q29udmVydGVyO1xuICAgIH1cbiAgICBzY2hlbWEuaXRlbXNbcHJvcGVydHlLZXldID0gY29weU9wdGlvbnM7XG59O1xuIiwgImV4cG9ydCBjbGFzcyBBc25TY2hlbWFWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuc2NoZW1hcyA9IFtdO1xuICAgIH1cbn1cbiIsICJleHBvcnQgKiBmcm9tIFwiLi9zY2hlbWFfdmFsaWRhdGlvblwiO1xuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgeyBBc25Qcm9wVHlwZXMsIEFzblR5cGVUeXBlcyB9IGZyb20gXCIuL2VudW1zXCI7XG5pbXBvcnQgKiBhcyBjb252ZXJ0ZXJzIGZyb20gXCIuL2NvbnZlcnRlcnNcIjtcbmltcG9ydCB7IEFzblNjaGVtYVZhbGlkYXRpb25FcnJvciB9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IHsgaXNDb252ZXJ0aWJsZSwgaXNUeXBlT2ZBcnJheSB9IGZyb20gXCIuL2hlbHBlclwiO1xuaW1wb3J0IHsgc2NoZW1hU3RvcmFnZSB9IGZyb20gXCIuL3N0b3JhZ2VcIjtcbmV4cG9ydCBjbGFzcyBBc25QYXJzZXIge1xuICAgIHN0YXRpYyBwYXJzZShkYXRhLCB0YXJnZXQpIHtcbiAgICAgICAgY29uc3QgYXNuMVBhcnNlZCA9IGFzbjFqcy5mcm9tQkVSKGRhdGEpO1xuICAgICAgICBpZiAoYXNuMVBhcnNlZC5yZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihhc24xUGFyc2VkLnJlc3VsdC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy5mcm9tQVNOKGFzbjFQYXJzZWQucmVzdWx0LCB0YXJnZXQpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbUFTTihhc24xU2NoZW1hLCB0YXJnZXQpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGlzQ29udmVydGlibGUodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbmV3IHRhcmdldCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5mcm9tQVNOKGFzbjFTY2hlbWEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0KTtcbiAgICAgICAgICAgIHNjaGVtYVN0b3JhZ2UuY2FjaGUodGFyZ2V0KTtcbiAgICAgICAgICAgIGxldCB0YXJnZXRTY2hlbWEgPSBzY2hlbWEuc2NoZW1hO1xuICAgICAgICAgICAgaWYgKGFzbjFTY2hlbWEuY29uc3RydWN0b3IgPT09IGFzbjFqcy5Db25zdHJ1Y3RlZCAmJiBzY2hlbWEudHlwZSAhPT0gQXNuVHlwZVR5cGVzLkNob2ljZSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFNjaGVtYSA9IG5ldyBhc24xanMuQ29uc3RydWN0ZWQoe1xuICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdDbGFzczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogYXNuMVNjaGVtYS5pZEJsb2NrLnRhZ051bWJlcixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNjaGVtYS5zY2hlbWEudmFsdWVCbG9jay52YWx1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFzbjFTY2hlbWFba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhc24xQ29tcGFyZWRTY2hlbWEgPSBhc24xanMuY29tcGFyZVNjaGVtYSh7fSwgYXNuMVNjaGVtYSwgdGFyZ2V0U2NoZW1hKTtcbiAgICAgICAgICAgIGlmICghYXNuMUNvbXBhcmVkU2NoZW1hLnZlcmlmaWVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzblNjaGVtYVZhbGlkYXRpb25FcnJvcihgRGF0YSBkb2VzIG5vdCBtYXRjaCB0byAke3RhcmdldC5uYW1lfSBBU04xIHNjaGVtYS4gJHthc24xQ29tcGFyZWRTY2hlbWEucmVzdWx0LmVycm9yfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzID0gbmV3IHRhcmdldCgpO1xuICAgICAgICAgICAgaWYgKGlzVHlwZU9mQXJyYXkodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIGlmICghKFwidmFsdWVcIiBpbiBhc24xU2NoZW1hLnZhbHVlQmxvY2sgJiYgQXJyYXkuaXNBcnJheShhc24xU2NoZW1hLnZhbHVlQmxvY2sudmFsdWUpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgaXRlbXMgZnJvbSB0aGUgQVNOLjEgcGFyc2VkIHZhbHVlLiBBU04uMSBvYmplY3QgaXMgbm90IGNvbnN0cnVjdGVkLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtVHlwZSA9IHNjaGVtYS5pdGVtVHlwZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW1UeXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlciA9IGNvbnZlcnRlcnMuZGVmYXVsdENvbnZlcnRlcihpdGVtVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY29udmVydGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgZGVmYXVsdCBjb252ZXJ0ZXIgZm9yIGFycmF5IGl0ZW0gb2YgJHt0YXJnZXQubmFtZX0gQVNOMSBzY2hlbWFgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmZyb20oYXNuMVNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlLCAoZWxlbWVudCkgPT4gY29udmVydGVyLmZyb21BU04oZWxlbWVudCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5mcm9tKGFzbjFTY2hlbWEudmFsdWVCbG9jay52YWx1ZSwgKGVsZW1lbnQpID0+IHRoaXMuZnJvbUFTTihlbGVtZW50LCBpdGVtVHlwZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYS5pdGVtcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbjFTY2hlbWFWYWx1ZSA9IGFzbjFDb21wYXJlZFNjaGVtYS5yZXN1bHRba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoIWFzbjFTY2hlbWFWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hSXRlbSA9IHNjaGVtYS5pdGVtc1trZXldO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYUl0ZW1UeXBlID0gc2NoZW1hSXRlbS50eXBlO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hSXRlbVR5cGUgPT09IFwibnVtYmVyXCIgfHwgaXNDb252ZXJ0aWJsZShzY2hlbWFJdGVtVHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udmVydGVyID0gKF9hID0gc2NoZW1hSXRlbS5jb252ZXJ0ZXIpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IChpc0NvbnZlcnRpYmxlKHNjaGVtYUl0ZW1UeXBlKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgc2NoZW1hSXRlbVR5cGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbnZlcnRlciBpcyBlbXB0eVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5yZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYUl0ZW0uaW1wbGljaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb250YWluZXIgPSBzY2hlbWFJdGVtLnJlcGVhdGVkID09PSBcInNlcXVlbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhc24xanMuU2VxdWVuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhc24xanMuU2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0l0ZW0gPSBuZXcgQ29udGFpbmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SXRlbS52YWx1ZUJsb2NrID0gYXNuMVNjaGVtYVZhbHVlLnZhbHVlQmxvY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3SXRlbUFzbiA9IGFzbjFqcy5mcm9tQkVSKG5ld0l0ZW0udG9CRVIoZmFsc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3SXRlbUFzbi5vZmZzZXQgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlIHRoZSBjaGlsZCBpdGVtLiAke25ld0l0ZW1Bc24ucmVzdWx0LmVycm9yfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShcInZhbHVlXCIgaW4gbmV3SXRlbUFzbi5yZXN1bHQudmFsdWVCbG9jayAmJiBBcnJheS5pc0FycmF5KG5ld0l0ZW1Bc24ucmVzdWx0LnZhbHVlQmxvY2sudmFsdWUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IGl0ZW1zIGZyb20gdGhlIEFTTi4xIHBhcnNlZCB2YWx1ZS4gQVNOLjEgb2JqZWN0IGlzIG5vdCBjb25zdHJ1Y3RlZC5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbmV3SXRlbUFzbi5yZXN1bHQudmFsdWVCbG9jay52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IEFycmF5LmZyb20odmFsdWUsIChlbGVtZW50KSA9PiBjb252ZXJ0ZXIuZnJvbUFTTihlbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IEFycmF5LmZyb20oYXNuMVNjaGVtYVZhbHVlLCAoZWxlbWVudCkgPT4gY29udmVydGVyLmZyb21BU04oZWxlbWVudCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gYXNuMVNjaGVtYVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYUl0ZW0uaW1wbGljaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3SXRlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNDb252ZXJ0aWJsZShzY2hlbWFJdGVtVHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SXRlbSA9IG5ldyBzY2hlbWFJdGVtVHlwZSgpLnRvU2NoZW1hKFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXNuMVR5cGVOYW1lID0gQXNuUHJvcFR5cGVzW3NjaGVtYUl0ZW1UeXBlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXNuMVR5cGUgPSBhc24xanNbQXNuMVR5cGVOYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBc24xVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0ICcke0FzbjFUeXBlTmFtZX0nIGNsYXNzIGZyb20gYXNuMWpzIG1vZHVsZWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0l0ZW0gPSBuZXcgQXNuMVR5cGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SXRlbS52YWx1ZUJsb2NrID0gdmFsdWUudmFsdWVCbG9jaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzbjFqcy5mcm9tQkVSKG5ld0l0ZW0udG9CRVIoZmFsc2UpKS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IGNvbnZlcnRlci5mcm9tQVNOKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYUl0ZW0ucmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShhc24xU2NoZW1hVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGdldCBsaXN0IG9mIGl0ZW1zIGZyb20gdGhlIEFTTi4xIHBhcnNlZCB2YWx1ZS4gQVNOLjEgdmFsdWUgc2hvdWxkIGJlIGl0ZXJhYmxlLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc1trZXldID0gQXJyYXkuZnJvbShhc24xU2NoZW1hVmFsdWUsIChlbGVtZW50KSA9PiB0aGlzLmZyb21BU04oZWxlbWVudCwgc2NoZW1hSXRlbVR5cGUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc1trZXldID0gdGhpcy5mcm9tQVNOKGFzbjFTY2hlbWFWYWx1ZSwgc2NoZW1hSXRlbVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEFzblNjaGVtYVZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgIGVycm9yLnNjaGVtYXMucHVzaCh0YXJnZXQubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBhc24xanMgZnJvbSBcImFzbjFqc1wiO1xuaW1wb3J0ICogYXMgY29udmVydGVycyBmcm9tIFwiLi9jb252ZXJ0ZXJzXCI7XG5pbXBvcnQgeyBBc25Qcm9wVHlwZXMsIEFzblR5cGVUeXBlcyB9IGZyb20gXCIuL2VudW1zXCI7XG5pbXBvcnQgeyBpc0NvbnZlcnRpYmxlLCBpc0FycmF5RXF1YWwgfSBmcm9tIFwiLi9oZWxwZXJcIjtcbmltcG9ydCB7IHNjaGVtYVN0b3JhZ2UgfSBmcm9tIFwiLi9zdG9yYWdlXCI7XG5leHBvcnQgY2xhc3MgQXNuU2VyaWFsaXplciB7XG4gICAgc3RhdGljIHNlcmlhbGl6ZShvYmopIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIGFzbjFqcy5CYXNlQmxvY2spIHtcbiAgICAgICAgICAgIHJldHVybiBvYmoudG9CRVIoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRvQVNOKG9iaikudG9CRVIoZmFsc2UpO1xuICAgIH1cbiAgICBzdGF0aWMgdG9BU04ob2JqKSB7XG4gICAgICAgIGlmIChvYmogJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiAmJiBpc0NvbnZlcnRpYmxlKG9iaikpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmoudG9BU04oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShvYmogJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgMSBzaG91bGQgYmUgdHlwZSBvZiBPYmplY3QuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IG9iai5jb25zdHJ1Y3RvcjtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0KTtcbiAgICAgICAgc2NoZW1hU3RvcmFnZS5jYWNoZSh0YXJnZXQpO1xuICAgICAgICBsZXQgYXNuMVZhbHVlID0gW107XG4gICAgICAgIGlmIChzY2hlbWEuaXRlbVR5cGUpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAxIHNob3VsZCBiZSB0eXBlIG9mIEFycmF5LlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLml0ZW1UeXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udmVydGVyID0gY29udmVydGVycy5kZWZhdWx0Q29udmVydGVyKHNjaGVtYS5pdGVtVHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IGRlZmF1bHQgY29udmVydGVyIGZvciBhcnJheSBpdGVtIG9mICR7dGFyZ2V0Lm5hbWV9IEFTTjEgc2NoZW1hYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzbjFWYWx1ZSA9IG9iai5tYXAoKG8pID0+IGNvbnZlcnRlci50b0FTTihvKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc24xVmFsdWUgPSBvYmoubWFwKChvKSA9PiB0aGlzLnRvQXNuSXRlbSh7IHR5cGU6IHNjaGVtYS5pdGVtVHlwZSB9LCBcIltdXCIsIHRhcmdldCwgbykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hSXRlbSA9IHNjaGVtYS5pdGVtc1trZXldO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9ialByb3AgPSBvYmpba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAob2JqUHJvcCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIHx8IHNjaGVtYUl0ZW0uZGVmYXVsdFZhbHVlID09PSBvYmpQcm9wXG4gICAgICAgICAgICAgICAgICAgIHx8ICh0eXBlb2Ygc2NoZW1hSXRlbS5kZWZhdWx0VmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9ialByb3AgPT09IFwib2JqZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGlzQXJyYXlFcXVhbCh0aGlzLnNlcmlhbGl6ZShzY2hlbWFJdGVtLmRlZmF1bHRWYWx1ZSksIHRoaXMuc2VyaWFsaXplKG9ialByb3ApKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGFzbjFJdGVtID0gQXNuU2VyaWFsaXplci50b0Fzbkl0ZW0oc2NoZW1hSXRlbSwga2V5LCB0YXJnZXQsIG9ialByb3ApO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hSXRlbS5jb250ZXh0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWFJdGVtLmltcGxpY2l0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNjaGVtYUl0ZW0ucmVwZWF0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAodHlwZW9mIHNjaGVtYUl0ZW0udHlwZSA9PT0gXCJudW1iZXJcIiB8fCBpc0NvbnZlcnRpYmxlKHNjaGVtYUl0ZW0udHlwZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS52YWx1ZUhleCA9IGFzbjFJdGVtIGluc3RhbmNlb2YgYXNuMWpzLk51bGwgPyBhc24xSXRlbS52YWx1ZUJlZm9yZURlY29kZVZpZXcgOiBhc24xSXRlbS52YWx1ZUJsb2NrLnRvQkVSKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNuMVZhbHVlLnB1c2gobmV3IGFzbjFqcy5QcmltaXRpdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbDogc2NoZW1hSXRlbS5vcHRpb25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRCbG9jazoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnQ2xhc3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdOdW1iZXI6IHNjaGVtYUl0ZW0uY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNuMVZhbHVlLnB1c2gobmV3IGFzbjFqcy5Db25zdHJ1Y3RlZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsOiBzY2hlbWFJdGVtLm9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdDbGFzczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogc2NoZW1hSXRlbS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYXNuMUl0ZW0udmFsdWVCbG9jay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChuZXcgYXNuMWpzLkNvbnN0cnVjdGVkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbDogc2NoZW1hSXRlbS5vcHRpb25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0NsYXNzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdOdW1iZXI6IHNjaGVtYUl0ZW0uY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBbYXNuMUl0ZW1dLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaGVtYUl0ZW0ucmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNuMVZhbHVlID0gYXNuMVZhbHVlLmNvbmNhdChhc24xSXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChhc24xSXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBhc25TY2hlbWE7XG4gICAgICAgIHN3aXRjaCAoc2NoZW1hLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQXNuVHlwZVR5cGVzLlNlcXVlbmNlOlxuICAgICAgICAgICAgICAgIGFzblNjaGVtYSA9IG5ldyBhc24xanMuU2VxdWVuY2UoeyB2YWx1ZTogYXNuMVZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBc25UeXBlVHlwZXMuU2V0OlxuICAgICAgICAgICAgICAgIGFzblNjaGVtYSA9IG5ldyBhc24xanMuU2V0KHsgdmFsdWU6IGFzbjFWYWx1ZSB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQXNuVHlwZVR5cGVzLkNob2ljZTpcbiAgICAgICAgICAgICAgICBpZiAoIWFzbjFWYWx1ZVswXSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNjaGVtYSAnJHt0YXJnZXQubmFtZX0nIGhhcyB3cm9uZyBkYXRhLiBDaG9pY2UgY2Fubm90IGJlIGVtcHR5LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc25TY2hlbWEgPSBhc24xVmFsdWVbMF07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzblNjaGVtYTtcbiAgICB9XG4gICAgc3RhdGljIHRvQXNuSXRlbShzY2hlbWFJdGVtLCBrZXksIHRhcmdldCwgb2JqUHJvcCkge1xuICAgICAgICBsZXQgYXNuMUl0ZW07XG4gICAgICAgIGlmICh0eXBlb2YgKHNjaGVtYUl0ZW0udHlwZSkgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlciA9IHNjaGVtYUl0ZW0uY29udmVydGVyO1xuICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3BlcnR5ICcke2tleX0nIGRvZXNuJ3QgaGF2ZSBjb252ZXJ0ZXIgZm9yIHR5cGUgJHtBc25Qcm9wVHlwZXNbc2NoZW1hSXRlbS50eXBlXX0gaW4gc2NoZW1hICcke3RhcmdldC5uYW1lfSdgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzY2hlbWFJdGVtLnJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9ialByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ29ialByb3AnIHNob3VsZCBiZSB0eXBlIG9mIEFycmF5LlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBBcnJheS5mcm9tKG9ialByb3AsIChlbGVtZW50KSA9PiBjb252ZXJ0ZXIudG9BU04oZWxlbWVudCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lciA9IHNjaGVtYUl0ZW0ucmVwZWF0ZWQgPT09IFwic2VxdWVuY2VcIlxuICAgICAgICAgICAgICAgICAgICA/IGFzbjFqcy5TZXF1ZW5jZVxuICAgICAgICAgICAgICAgICAgICA6IGFzbjFqcy5TZXQ7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBuZXcgQ29udGFpbmVyKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1zLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBjb252ZXJ0ZXIudG9BU04ob2JqUHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5yZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmpQcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUGFyYW1ldGVyICdvYmpQcm9wJyBzaG91bGQgYmUgdHlwZSBvZiBBcnJheS5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gQXJyYXkuZnJvbShvYmpQcm9wLCAoZWxlbWVudCkgPT4gdGhpcy50b0FTTihlbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgY29uc3QgQ29udGFpbmVyID0gc2NoZW1hSXRlbS5yZXBlYXRlZCA9PT0gXCJzZXF1ZW5jZVwiXG4gICAgICAgICAgICAgICAgICAgID8gYXNuMWpzLlNlcXVlbmNlXG4gICAgICAgICAgICAgICAgICAgIDogYXNuMWpzLlNldDtcbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IG5ldyBDb250YWluZXIoe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbXMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IHRoaXMudG9BU04ob2JqUHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzbjFJdGVtO1xuICAgIH1cbn1cbiIsICJleHBvcnQgY2xhc3MgQXNuQXJyYXkgZXh0ZW5kcyBBcnJheSB7XG4gICAgY29uc3RydWN0b3IoaXRlbXMgPSBbXSkge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1zID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBzdXBlcihpdGVtcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgeyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgfSBmcm9tIFwicHZ0c3V0aWxzXCI7XG5pbXBvcnQgeyBBc25QYXJzZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCB7IEFzblNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9zZXJpYWxpemVyXCI7XG5leHBvcnQgY2xhc3MgQXNuQ29udmVydCB7XG4gICAgc3RhdGljIHNlcmlhbGl6ZShvYmopIHtcbiAgICAgICAgcmV0dXJuIEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKG9iaik7XG4gICAgfVxuICAgIHN0YXRpYyBwYXJzZShkYXRhLCB0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIEFzblBhcnNlci5wYXJzZShkYXRhLCB0YXJnZXQpO1xuICAgIH1cbiAgICBzdGF0aWMgdG9TdHJpbmcoZGF0YSkge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIuaXNCdWZmZXJTb3VyY2UoZGF0YSlcbiAgICAgICAgICAgID8gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSlcbiAgICAgICAgICAgIDogQXNuQ29udmVydC5zZXJpYWxpemUoZGF0YSk7XG4gICAgICAgIGNvbnN0IGFzbiA9IGFzbjFqcy5mcm9tQkVSKGJ1Zik7XG4gICAgICAgIGlmIChhc24ub2Zmc2V0ID09PSAtMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZGVjb2RlIEFTTi4xIGRhdGEuICR7YXNuLnJlc3VsdC5lcnJvcn1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXNuLnJlc3VsdC50b1N0cmluZygpO1xuICAgIH1cbn1cbiIsICJleHBvcnQgKiBmcm9tIFwiLi9jb252ZXJ0ZXJzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlcy9pbmRleFwiO1xuZXhwb3J0IHsgQXNuUHJvcCwgQXNuVHlwZSwgQXNuQ2hvaWNlVHlwZSwgQXNuU2VxdWVuY2VUeXBlLCBBc25TZXRUeXBlIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuZXhwb3J0IHsgQXNuVHlwZVR5cGVzLCBBc25Qcm9wVHlwZXMgfSBmcm9tIFwiLi9lbnVtc1wiO1xuZXhwb3J0IHsgQXNuUGFyc2VyIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5leHBvcnQgeyBBc25TZXJpYWxpemVyIH0gZnJvbSBcIi4vc2VyaWFsaXplclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9vYmplY3RzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb252ZXJ0XCI7XG4iLCAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XG4gIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XG4gICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XG4gICAgICB9XG4gICAgICByZXR1cm4gdDtcbiAgfVxuICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgdFtwXSA9IHNbcF07XG4gIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgfVxuICByZXR1cm4gdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19lc0RlY29yYXRlKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XG4gIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxuICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xuICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcbiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XG4gIHZhciBfLCBkb25lID0gZmFsc2U7XG4gIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHt9O1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcbiAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XG4gICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcbiAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xuICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcbiAgICAgIH1cbiAgfVxuICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XG4gIGRvbmUgPSB0cnVlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcbiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XG4gIH1cbiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19wcm9wS2V5KHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xuICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgXCJuYW1lXCIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gXCJcIi5jb25jYXQocHJlZml4LCBcIiBcIiwgbmFtZSkgOiBuYW1lIH0pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcbiAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XG4gIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgcltrXSA9IGFbal07XG4gIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xuICB2YXIgaSwgcDtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogZmFsc2UgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcbiAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cbiAgcmV0dXJuIGNvb2tlZDtcbn07XG5cbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XG4gIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xuICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XG4gIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xuICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hZGREaXNwb3NhYmxlUmVzb3VyY2UoZW52LCB2YWx1ZSwgYXN5bmMpIHtcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDApIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkLlwiKTtcbiAgICB2YXIgZGlzcG9zZTtcbiAgICBpZiAoYXN5bmMpIHtcbiAgICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jRGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuYXN5bmNEaXNwb3NlXTtcbiAgICB9XG4gICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkge1xuICAgICAgICBpZiAoIVN5bWJvbC5kaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmRpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmRpc3Bvc2VdO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRpc3Bvc2UgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBub3QgZGlzcG9zYWJsZS5cIik7XG4gICAgZW52LnN0YWNrLnB1c2goeyB2YWx1ZTogdmFsdWUsIGRpc3Bvc2U6IGRpc3Bvc2UsIGFzeW5jOiBhc3luYyB9KTtcbiAgfVxuICBlbHNlIGlmIChhc3luYykge1xuICAgIGVudi5zdGFjay5wdXNoKHsgYXN5bmM6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgX1N1cHByZXNzZWRFcnJvciA9IHR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2Rpc3Bvc2VSZXNvdXJjZXMoZW52KSB7XG4gIGZ1bmN0aW9uIGZhaWwoZSkge1xuICAgIGVudi5lcnJvciA9IGVudi5oYXNFcnJvciA/IG5ldyBfU3VwcHJlc3NlZEVycm9yKGUsIGVudi5lcnJvciwgXCJBbiBlcnJvciB3YXMgc3VwcHJlc3NlZCBkdXJpbmcgZGlzcG9zYWwuXCIpIDogZTtcbiAgICBlbnYuaGFzRXJyb3IgPSB0cnVlO1xuICB9XG4gIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgd2hpbGUgKGVudi5zdGFjay5sZW5ndGgpIHtcbiAgICAgIHZhciByZWMgPSBlbnYuc3RhY2sucG9wKCk7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjLmRpc3Bvc2UgJiYgcmVjLmRpc3Bvc2UuY2FsbChyZWMudmFsdWUpO1xuICAgICAgICBpZiAocmVjLmFzeW5jKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihuZXh0LCBmdW5jdGlvbihlKSB7IGZhaWwoZSk7IHJldHVybiBuZXh0KCk7IH0pO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICBmYWlsKGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW52Lmhhc0Vycm9yKSB0aHJvdyBlbnYuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIG5leHQoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2V4dGVuZHMsXG4gIF9fYXNzaWduLFxuICBfX3Jlc3QsXG4gIF9fZGVjb3JhdGUsXG4gIF9fcGFyYW0sXG4gIF9fbWV0YWRhdGEsXG4gIF9fYXdhaXRlcixcbiAgX19nZW5lcmF0b3IsXG4gIF9fY3JlYXRlQmluZGluZyxcbiAgX19leHBvcnRTdGFyLFxuICBfX3ZhbHVlcyxcbiAgX19yZWFkLFxuICBfX3NwcmVhZCxcbiAgX19zcHJlYWRBcnJheXMsXG4gIF9fc3ByZWFkQXJyYXksXG4gIF9fYXdhaXQsXG4gIF9fYXN5bmNHZW5lcmF0b3IsXG4gIF9fYXN5bmNEZWxlZ2F0b3IsXG4gIF9fYXN5bmNWYWx1ZXMsXG4gIF9fbWFrZVRlbXBsYXRlT2JqZWN0LFxuICBfX2ltcG9ydFN0YXIsXG4gIF9faW1wb3J0RGVmYXVsdCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEluLFxuICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSxcbiAgX19kaXNwb3NlUmVzb3VyY2VzLFxufTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyMCwgUGVjdWxpYXIgVmVudHVyZXMsIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKi9cblxuY2xhc3MgSnNvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgaW5uZXJFcnJvcikge1xyXG4gICAgICAgIHN1cGVyKGlubmVyRXJyb3JcclxuICAgICAgICAgICAgPyBgJHttZXNzYWdlfS4gU2VlIHRoZSBpbm5lciBleGNlcHRpb24gZm9yIG1vcmUgZGV0YWlscy5gXHJcbiAgICAgICAgICAgIDogbWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcclxuICAgICAgICB0aGlzLmlubmVyRXJyb3IgPSBpbm5lckVycm9yO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFRyYW5zZm9ybUVycm9yIGV4dGVuZHMgSnNvbkVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHNjaGVtYSwgbWVzc2FnZSwgaW5uZXJFcnJvcikge1xyXG4gICAgICAgIHN1cGVyKG1lc3NhZ2UsIGlubmVyRXJyb3IpO1xyXG4gICAgICAgIHRoaXMuc2NoZW1hID0gc2NoZW1hO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFBhcnNlckVycm9yIGV4dGVuZHMgVHJhbnNmb3JtRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3Ioc2NoZW1hLCBtZXNzYWdlLCBpbm5lckVycm9yKSB7XHJcbiAgICAgICAgc3VwZXIoc2NoZW1hLCBgSlNPTiBkb2Vzbid0IG1hdGNoIHRvICcke3NjaGVtYS50YXJnZXQubmFtZX0nIHNjaGVtYS4gJHttZXNzYWdlfWAsIGlubmVyRXJyb3IpO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEpzb25FcnJvciB7XHJcbn1cblxuY2xhc3MgU2VyaWFsaXplckVycm9yIGV4dGVuZHMgSnNvbkVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHNjaGVtYU5hbWUsIG1lc3NhZ2UsIGlubmVyRXJyb3IpIHtcclxuICAgICAgICBzdXBlcihgQ2Fubm90IHNlcmlhbGl6ZSBieSAnJHtzY2hlbWFOYW1lfScgc2NoZW1hLiAke21lc3NhZ2V9YCwgaW5uZXJFcnJvcik7XHJcbiAgICAgICAgdGhpcy5zY2hlbWFOYW1lID0gc2NoZW1hTmFtZTtcclxuICAgIH1cclxufVxuXG5jbGFzcyBLZXlFcnJvciBleHRlbmRzIFBhcnNlckVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHNjaGVtYSwga2V5cywgZXJyb3JzID0ge30pIHtcclxuICAgICAgICBzdXBlcihzY2hlbWEsIFwiU29tZSBrZXlzIGRvZXNuJ3QgbWF0Y2ggdG8gc2NoZW1hXCIpO1xyXG4gICAgICAgIHRoaXMua2V5cyA9IGtleXM7XHJcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XHJcbiAgICB9XHJcbn1cblxudmFyIEpzb25Qcm9wVHlwZXM7XHJcbihmdW5jdGlvbiAoSnNvblByb3BUeXBlcykge1xyXG4gICAgSnNvblByb3BUeXBlc1tKc29uUHJvcFR5cGVzW1wiQW55XCJdID0gMF0gPSBcIkFueVwiO1xyXG4gICAgSnNvblByb3BUeXBlc1tKc29uUHJvcFR5cGVzW1wiQm9vbGVhblwiXSA9IDFdID0gXCJCb29sZWFuXCI7XHJcbiAgICBKc29uUHJvcFR5cGVzW0pzb25Qcm9wVHlwZXNbXCJOdW1iZXJcIl0gPSAyXSA9IFwiTnVtYmVyXCI7XHJcbiAgICBKc29uUHJvcFR5cGVzW0pzb25Qcm9wVHlwZXNbXCJTdHJpbmdcIl0gPSAzXSA9IFwiU3RyaW5nXCI7XHJcbn0pKEpzb25Qcm9wVHlwZXMgfHwgKEpzb25Qcm9wVHlwZXMgPSB7fSkpO1xuXG5mdW5jdGlvbiBjaGVja1R5cGUodmFsdWUsIHR5cGUpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgIGNhc2UgSnNvblByb3BUeXBlcy5Cb29sZWFuOlxyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIjtcclxuICAgICAgICBjYXNlIEpzb25Qcm9wVHlwZXMuTnVtYmVyOlxyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xyXG4gICAgICAgIGNhc2UgSnNvblByb3BUeXBlcy5TdHJpbmc6XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiB0aHJvd0lmVHlwZUlzV3JvbmcodmFsdWUsIHR5cGUpIHtcclxuICAgIGlmICghY2hlY2tUeXBlKHZhbHVlLCB0eXBlKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFZhbHVlIG11c3QgYmUgJHtKc29uUHJvcFR5cGVzW3R5cGVdfWApO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGlzQ29udmVydGlibGUodGFyZ2V0KSB7XHJcbiAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5wcm90b3R5cGUpIHtcclxuICAgICAgICBpZiAodGFyZ2V0LnByb3RvdHlwZS50b0pTT04gJiYgdGFyZ2V0LnByb3RvdHlwZS5mcm9tSlNPTikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpc0NvbnZlcnRpYmxlKHRhcmdldC5wcm90b3R5cGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAhISh0YXJnZXQgJiYgdGFyZ2V0LnRvSlNPTiAmJiB0YXJnZXQuZnJvbUpTT04pO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIEpzb25TY2hlbWFTdG9yYWdlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBuZXcgTWFwKCk7XHJcbiAgICB9XHJcbiAgICBoYXModGFyZ2V0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuaGFzKHRhcmdldCkgfHwgISF0aGlzLmZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KTtcclxuICAgIH1cclxuICAgIGdldCh0YXJnZXQpIHtcclxuICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLml0ZW1zLmdldCh0YXJnZXQpIHx8IHRoaXMuZmluZFBhcmVudFNjaGVtYSh0YXJnZXQpO1xyXG4gICAgICAgIGlmICghc2NoZW1hKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZXQgc2NoZW1hIGZvciBjdXJyZW50IHRhcmdldFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcclxuICAgIH1cclxuICAgIGNyZWF0ZSh0YXJnZXQpIHtcclxuICAgICAgICBjb25zdCBzY2hlbWEgPSB7IG5hbWVzOiB7fSB9O1xyXG4gICAgICAgIGNvbnN0IHBhcmVudFNjaGVtYSA9IHRoaXMuZmluZFBhcmVudFNjaGVtYSh0YXJnZXQpO1xyXG4gICAgICAgIGlmIChwYXJlbnRTY2hlbWEpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzY2hlbWEsIHBhcmVudFNjaGVtYSk7XHJcbiAgICAgICAgICAgIHNjaGVtYS5uYW1lcyA9IHt9O1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gcGFyZW50U2NoZW1hLm5hbWVzKSB7XHJcbiAgICAgICAgICAgICAgICBzY2hlbWEubmFtZXNbbmFtZV0gPSBPYmplY3QuYXNzaWduKHt9LCBwYXJlbnRTY2hlbWEubmFtZXNbbmFtZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjaGVtYS50YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcclxuICAgIH1cclxuICAgIHNldCh0YXJnZXQsIHNjaGVtYSkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMuc2V0KHRhcmdldCwgc2NoZW1hKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGFyZ2V0Ll9fcHJvdG9fXztcclxuICAgICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuaXRlbXMuZ2V0KHBhcmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybiBzY2hlbWEgfHwgdGhpcy5maW5kUGFyZW50U2NoZW1hKHBhcmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XG5cbmNvbnN0IERFRkFVTFRfU0NIRU1BID0gXCJkZWZhdWx0XCI7XHJcbmNvbnN0IHNjaGVtYVN0b3JhZ2UgPSBuZXcgSnNvblNjaGVtYVN0b3JhZ2UoKTtcblxuY2xhc3MgUGF0dGVyblZhbGlkYXRpb24ge1xyXG4gICAgY29uc3RydWN0b3IocGF0dGVybikge1xyXG4gICAgICAgIHRoaXMucGF0dGVybiA9IG5ldyBSZWdFeHAocGF0dGVybik7XHJcbiAgICB9XHJcbiAgICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKHRoaXMucGF0dGVybi5zb3VyY2UsIHRoaXMucGF0dGVybi5mbGFncyk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFwiSW5jb21pbmcgdmFsdWUgbXVzdCBiZSBzdHJpbmdcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcGF0dGVybi5leGVjKHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBkb2Vzbid0IG1hdGNoIHRvIHBhdHRlcm4gJyR7cGF0dGVybi50b1N0cmluZygpfSdgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgSW5jbHVzaXZlVmFsaWRhdGlvbiB7XHJcbiAgICBjb25zdHJ1Y3RvcihtaW4gPSBOdW1iZXIuTUlOX1ZBTFVFLCBtYXggPSBOdW1iZXIuTUFYX1ZBTFVFKSB7XHJcbiAgICAgICAgdGhpcy5taW4gPSBtaW47XHJcbiAgICAgICAgdGhpcy5tYXggPSBtYXg7XHJcbiAgICB9XHJcbiAgICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRocm93SWZUeXBlSXNXcm9uZyh2YWx1ZSwgSnNvblByb3BUeXBlcy5OdW1iZXIpO1xyXG4gICAgICAgIGlmICghKHRoaXMubWluIDw9IHZhbHVlICYmIHZhbHVlIDw9IHRoaXMubWF4KSkge1xyXG4gICAgICAgICAgICBjb25zdCBtaW4gPSB0aGlzLm1pbiA9PT0gTnVtYmVyLk1JTl9WQUxVRSA/IFwiTUlOXCIgOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXggPT09IE51bWJlci5NQVhfVkFMVUUgPyBcIk1BWFwiIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFZhbHVlIGRvZXNuJ3QgbWF0Y2ggdG8gZGlhcGFzb24gWyR7bWlufSwke21heH1dYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmNsYXNzIEV4Y2x1c2l2ZVZhbGlkYXRpb24ge1xyXG4gICAgY29uc3RydWN0b3IobWluID0gTnVtYmVyLk1JTl9WQUxVRSwgbWF4ID0gTnVtYmVyLk1BWF9WQUxVRSkge1xyXG4gICAgICAgIHRoaXMubWluID0gbWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xyXG4gICAgfVxyXG4gICAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgICAgICB0aHJvd0lmVHlwZUlzV3JvbmcodmFsdWUsIEpzb25Qcm9wVHlwZXMuTnVtYmVyKTtcclxuICAgICAgICBpZiAoISh0aGlzLm1pbiA8IHZhbHVlICYmIHZhbHVlIDwgdGhpcy5tYXgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pbiA9IHRoaXMubWluID09PSBOdW1iZXIuTUlOX1ZBTFVFID8gXCJNSU5cIiA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICBjb25zdCBtYXggPSB0aGlzLm1heCA9PT0gTnVtYmVyLk1BWF9WQUxVRSA/IFwiTUFYXCIgOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVmFsdWUgZG9lc24ndCBtYXRjaCB0byBkaWFwYXNvbiAoJHttaW59LCR7bWF4fSlgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgTGVuZ3RoVmFsaWRhdGlvbiB7XHJcbiAgICBjb25zdHJ1Y3RvcihsZW5ndGgsIG1pbkxlbmd0aCwgbWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGg7XHJcbiAgICAgICAgdGhpcy5taW5MZW5ndGggPSBtaW5MZW5ndGg7XHJcbiAgICAgICAgdGhpcy5tYXhMZW5ndGggPSBtYXhMZW5ndGg7XHJcbiAgICB9XHJcbiAgICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT09IHRoaXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBsZW5ndGggbXVzdCBiZSBleGFjdGx5ICR7dGhpcy5sZW5ndGh9LmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubWluTGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA8IHRoaXMubWluTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBsZW5ndGggbXVzdCBiZSBtb3JlIHRoYW4gJHt0aGlzLm1pbkxlbmd0aH0uYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubWF4TGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IHRoaXMubWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gJHt0aGlzLm1heExlbmd0aH0uYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgRW51bWVyYXRpb25WYWxpZGF0aW9uIHtcclxuICAgIGNvbnN0cnVjdG9yKGVudW1lcmF0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5lbnVtZXJhdGlvbiA9IGVudW1lcmF0aW9uO1xyXG4gICAgfVxyXG4gICAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgICAgICB0aHJvd0lmVHlwZUlzV3JvbmcodmFsdWUsIEpzb25Qcm9wVHlwZXMuU3RyaW5nKTtcclxuICAgICAgICBpZiAoIXRoaXMuZW51bWVyYXRpb24uaW5jbHVkZXModmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFZhbHVlIG11c3QgYmUgb25lIG9mICR7dGhpcy5lbnVtZXJhdGlvbi5tYXAoKHYpID0+IGAnJHt2fSdgKS5qb2luKFwiLCBcIil9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmNsYXNzIEpzb25UcmFuc2Zvcm0ge1xyXG4gICAgc3RhdGljIGNoZWNrVmFsdWVzKGRhdGEsIHNjaGVtYUl0ZW0pIHtcclxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSA6IFtkYXRhXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb24gb2Ygc2NoZW1hSXRlbS52YWxpZGF0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb24gaW5zdGFuY2VvZiBMZW5ndGhWYWxpZGF0aW9uICYmIHNjaGVtYUl0ZW0ucmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uLnZhbGlkYXRlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbi52YWxpZGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgY2hlY2tUeXBlcyh2YWx1ZSwgc2NoZW1hSXRlbSkge1xyXG4gICAgICAgIGlmIChzY2hlbWFJdGVtLnJlcGVhdGVkICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVmFsdWUgbXVzdCBiZSBBcnJheVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWFJdGVtLnR5cGUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiB2YWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgIHRocm93SWZUeXBlSXNXcm9uZyh2LCBzY2hlbWFJdGVtLnR5cGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhdGljIGdldFNjaGVtYUJ5TmFtZShzY2hlbWEsIG5hbWUgPSBERUZBVUxUX1NDSEVNQSkge1xyXG4gICAgICAgIHJldHVybiB7IC4uLnNjaGVtYS5uYW1lc1tERUZBVUxUX1NDSEVNQV0sIC4uLnNjaGVtYS5uYW1lc1tuYW1lXSB9O1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIEpzb25TZXJpYWxpemVyIGV4dGVuZHMgSnNvblRyYW5zZm9ybSB7XHJcbiAgICBzdGF0aWMgc2VyaWFsaXplKG9iaiwgb3B0aW9ucywgcmVwbGFjZXIsIHNwYWNlKSB7XHJcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKG9iaiwgb3B0aW9ucyk7XHJcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGpzb24sIHJlcGxhY2VyLCBzcGFjZSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgdG9KU09OKG9iaiwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgbGV0IHJlcztcclxuICAgICAgICBsZXQgdGFyZ2V0U2NoZW1hID0gb3B0aW9ucy50YXJnZXRTY2hlbWE7XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hTmFtZSA9IG9wdGlvbnMuc2NoZW1hTmFtZSB8fCBERUZBVUxUX1NDSEVNQTtcclxuICAgICAgICBpZiAoaXNDb252ZXJ0aWJsZShvYmopKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmoudG9KU09OKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcclxuICAgICAgICAgICAgcmVzID0gW107XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBvYmopIHtcclxuICAgICAgICAgICAgICAgIHJlcy5wdXNoKHRoaXMudG9KU09OKGl0ZW0sIG9wdGlvbnMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgIGlmICh0YXJnZXRTY2hlbWEgJiYgIXNjaGVtYVN0b3JhZ2UuaGFzKHRhcmdldFNjaGVtYSkpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBKc29uRXJyb3IoXCJDYW5ub3QgZ2V0IHNjaGVtYSBmb3IgYHRhcmdldFNjaGVtYWAgcGFyYW1cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGFyZ2V0U2NoZW1hID0gKHRhcmdldFNjaGVtYSB8fCBvYmouY29uc3RydWN0b3IpO1xyXG4gICAgICAgICAgICBpZiAoc2NoZW1hU3RvcmFnZS5oYXModGFyZ2V0U2NoZW1hKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0U2NoZW1hKTtcclxuICAgICAgICAgICAgICAgIHJlcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZWRTY2hlbWEgPSB0aGlzLmdldFNjaGVtYUJ5TmFtZShzY2hlbWEsIHNjaGVtYU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbmFtZWRTY2hlbWEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbmFtZWRTY2hlbWFba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqSXRlbSA9IG9ialtrZXldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaXRlbS5vcHRpb25hbCAmJiBvYmpJdGVtID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXRlbS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBvYmpJdGVtID09PSBpdGVtLmRlZmF1bHRWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXRlbS5vcHRpb25hbCAmJiBvYmpJdGVtID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemVyRXJyb3IodGFyZ2V0U2NoZW1hLm5hbWUsIGBQcm9wZXJ0eSAnJHtrZXl9JyBpcyByZXF1aXJlZC5gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0udHlwZSA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29udmVydGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0ucmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBvYmpJdGVtLm1hcCgoZWwpID0+IGl0ZW0uY29udmVydGVyLnRvSlNPTihlbCwgb2JqKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGl0ZW0uY29udmVydGVyLnRvSlNPTihvYmpJdGVtLCBvYmopO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gb2JqSXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBvYmpJdGVtLm1hcCgoZWwpID0+IHRoaXMudG9KU09OKGVsLCB7IHNjaGVtYU5hbWUgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnRvSlNPTihvYmpJdGVtLCB7IHNjaGVtYU5hbWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja1R5cGVzKHZhbHVlLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja1ZhbHVlcyh2YWx1ZSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc1tpdGVtLm5hbWUgfHwga2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFNlcmlhbGl6ZXJFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemVyRXJyb3Ioc2NoZW1hLnRhcmdldC5uYW1lLCBgUHJvcGVydHkgJyR7a2V5fScgaXMgd3JvbmcuICR7ZS5tZXNzYWdlfWAsIGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzID0ge307XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IHRoaXMudG9KU09OKG9ialtrZXldLCB7IHNjaGVtYU5hbWUgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlcyA9IG9iajtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxufVxuXG5jbGFzcyBKc29uUGFyc2VyIGV4dGVuZHMgSnNvblRyYW5zZm9ybSB7XHJcbiAgICBzdGF0aWMgcGFyc2UoZGF0YSwgb3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZGF0YSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbUpTT04ob2JqLCBvcHRpb25zKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBmcm9tSlNPTih0YXJnZXQsIG9wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCB0YXJnZXRTY2hlbWEgPSBvcHRpb25zLnRhcmdldFNjaGVtYTtcclxuICAgICAgICBjb25zdCBzY2hlbWFOYW1lID0gb3B0aW9ucy5zY2hlbWFOYW1lIHx8IERFRkFVTFRfU0NIRU1BO1xyXG4gICAgICAgIGNvbnN0IG9iaiA9IG5ldyB0YXJnZXRTY2hlbWEoKTtcclxuICAgICAgICBpZiAoaXNDb252ZXJ0aWJsZShvYmopKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmouZnJvbUpTT04odGFyZ2V0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0U2NoZW1hKTtcclxuICAgICAgICBjb25zdCBuYW1lZFNjaGVtYSA9IHRoaXMuZ2V0U2NoZW1hQnlOYW1lKHNjaGVtYSwgc2NoZW1hTmFtZSk7XHJcbiAgICAgICAgY29uc3Qga2V5RXJyb3JzID0ge307XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuc3RyaWN0UHJvcGVydHkgJiYgIUFycmF5LmlzQXJyYXkodGFyZ2V0KSkge1xyXG4gICAgICAgICAgICBKc29uUGFyc2VyLmNoZWNrU3RyaWN0UHJvcGVydHkodGFyZ2V0LCBuYW1lZFNjaGVtYSwgc2NoZW1hKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbmFtZWRTY2hlbWEpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBuYW1lZFNjaGVtYVtrZXldO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IGl0ZW0ubmFtZSB8fCBrZXk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRhcmdldFtuYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIChpdGVtLm9wdGlvbmFsIHx8IGl0ZW0uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0ub3B0aW9uYWwgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFcnJvcihzY2hlbWEsIGBQcm9wZXJ0eSAnJHtuYW1lfScgaXMgcmVxdWlyZWQuYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrVHlwZXModmFsdWUsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja1ZhbHVlcyh2YWx1ZSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChpdGVtLnR5cGUpID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29udmVydGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlLm1hcCgoZWwpID0+IGl0ZW0uY29udmVydGVyLmZyb21KU09OKGVsLCBvYmopKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gaXRlbS5jb252ZXJ0ZXIuZnJvbUpTT04odmFsdWUsIG9iaik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U2NoZW1hOiBpdGVtLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5yZXBlYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlLm1hcCgoZWwpID0+IHRoaXMuZnJvbUpTT04oZWwsIG5ld09wdGlvbnMpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdGhpcy5mcm9tSlNPTih2YWx1ZSwgbmV3T3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgUGFyc2VyRXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBQYXJzZXJFcnJvcihzY2hlbWEsIGBQcm9wZXJ0eSAnJHtrZXl9JyBpcyB3cm9uZy4gJHtlLm1lc3NhZ2V9YCwgZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zdHJpY3RBbGxLZXlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5RXJyb3JzW2tleV0gPSBlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoa2V5RXJyb3JzKTtcclxuICAgICAgICBpZiAoa2V5cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEtleUVycm9yKHNjaGVtYSwga2V5cywga2V5RXJyb3JzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjaGVja1N0cmljdFByb3BlcnR5KHRhcmdldCwgbmFtZWRTY2hlbWEsIHNjaGVtYSkge1xyXG4gICAgICAgIGNvbnN0IGpzb25Qcm9wcyA9IE9iamVjdC5rZXlzKHRhcmdldCk7XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hUHJvcHMgPSBPYmplY3Qua2V5cyhuYW1lZFNjaGVtYSk7XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGpzb25Qcm9wcykge1xyXG4gICAgICAgICAgICBpZiAoc2NoZW1hUHJvcHMuaW5kZXhPZihrZXkpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBLZXlFcnJvcihzY2hlbWEsIGtleXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5mdW5jdGlvbiBnZXRWYWxpZGF0aW9ucyhpdGVtKSB7XHJcbiAgICBjb25zdCB2YWxpZGF0aW9ucyA9IFtdO1xyXG4gICAgaWYgKGl0ZW0ucGF0dGVybikge1xyXG4gICAgICAgIHZhbGlkYXRpb25zLnB1c2gobmV3IFBhdHRlcm5WYWxpZGF0aW9uKGl0ZW0ucGF0dGVybikpO1xyXG4gICAgfVxyXG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gSnNvblByb3BUeXBlcy5OdW1iZXIgfHwgaXRlbS50eXBlID09PSBKc29uUHJvcFR5cGVzLkFueSkge1xyXG4gICAgICAgIGlmIChpdGVtLm1pbkluY2x1c2l2ZSAhPT0gdW5kZWZpbmVkIHx8IGl0ZW0ubWF4SW5jbHVzaXZlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbnMucHVzaChuZXcgSW5jbHVzaXZlVmFsaWRhdGlvbihpdGVtLm1pbkluY2x1c2l2ZSwgaXRlbS5tYXhJbmNsdXNpdmUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGl0ZW0ubWluRXhjbHVzaXZlICE9PSB1bmRlZmluZWQgfHwgaXRlbS5tYXhFeGNsdXNpdmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9ucy5wdXNoKG5ldyBFeGNsdXNpdmVWYWxpZGF0aW9uKGl0ZW0ubWluRXhjbHVzaXZlLCBpdGVtLm1heEV4Y2x1c2l2ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXRlbS5lbnVtZXJhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2gobmV3IEVudW1lcmF0aW9uVmFsaWRhdGlvbihpdGVtLmVudW1lcmF0aW9uKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gSnNvblByb3BUeXBlcy5TdHJpbmcgfHwgaXRlbS5yZXBlYXRlZCB8fCBpdGVtLnR5cGUgPT09IEpzb25Qcm9wVHlwZXMuQW55KSB7XHJcbiAgICAgICAgaWYgKGl0ZW0ubGVuZ3RoICE9PSB1bmRlZmluZWQgfHwgaXRlbS5taW5MZW5ndGggIT09IHVuZGVmaW5lZCB8fCBpdGVtLm1heExlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2gobmV3IExlbmd0aFZhbGlkYXRpb24oaXRlbS5sZW5ndGgsIGl0ZW0ubWluTGVuZ3RoLCBpdGVtLm1heExlbmd0aCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWxpZGF0aW9ucztcclxufVxyXG5jb25zdCBKc29uUHJvcCA9IChvcHRpb25zID0ge30pID0+ICh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XHJcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgQ2Fubm90IHNldCB0eXBlIGZvciAke3Byb3BlcnR5S2V5fSBwcm9wZXJ0eSBvZiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfSBzY2hlbWFgO1xyXG4gICAgbGV0IHNjaGVtYTtcclxuICAgIGlmICghc2NoZW1hU3RvcmFnZS5oYXModGFyZ2V0LmNvbnN0cnVjdG9yKSkge1xyXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuY3JlYXRlKHRhcmdldC5jb25zdHJ1Y3Rvcik7XHJcbiAgICAgICAgc2NoZW1hU3RvcmFnZS5zZXQodGFyZ2V0LmNvbnN0cnVjdG9yLCBzY2hlbWEpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0LmNvbnN0cnVjdG9yKTtcclxuICAgICAgICBpZiAoc2NoZW1hLnRhcmdldCAhPT0gdGFyZ2V0LmNvbnN0cnVjdG9yKSB7XHJcbiAgICAgICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuY3JlYXRlKHRhcmdldC5jb25zdHJ1Y3Rvcik7XHJcbiAgICAgICAgICAgIHNjaGVtYVN0b3JhZ2Uuc2V0KHRhcmdldC5jb25zdHJ1Y3Rvciwgc2NoZW1hKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZWZhdWx0U2NoZW1hID0ge1xyXG4gICAgICAgIHR5cGU6IEpzb25Qcm9wVHlwZXMuQW55LFxyXG4gICAgICAgIHZhbGlkYXRpb25zOiBbXSxcclxuICAgIH07XHJcbiAgICBjb25zdCBjb3B5T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oZGVmYXVsdFNjaGVtYSwgb3B0aW9ucyk7XHJcbiAgICBjb3B5T3B0aW9ucy52YWxpZGF0aW9ucyA9IGdldFZhbGlkYXRpb25zKGNvcHlPcHRpb25zKTtcclxuICAgIGlmICh0eXBlb2YgY29weU9wdGlvbnMudHlwZSAhPT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgIGlmICghc2NoZW1hU3RvcmFnZS5oYXMoY29weU9wdGlvbnMudHlwZSkgJiYgIWlzQ29udmVydGlibGUoY29weU9wdGlvbnMudHlwZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Vycm9yTWVzc2FnZX0uIEFzc2lnbmluZyB0eXBlIGRvZXNuJ3QgaGF2ZSBzY2hlbWEuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IHNjaGVtYU5hbWVzO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy5zY2hlbWEpKSB7XHJcbiAgICAgICAgc2NoZW1hTmFtZXMgPSBvcHRpb25zLnNjaGVtYTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHNjaGVtYU5hbWVzID0gW29wdGlvbnMuc2NoZW1hIHx8IERFRkFVTFRfU0NIRU1BXTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qgc2NoZW1hTmFtZSBvZiBzY2hlbWFOYW1lcykge1xyXG4gICAgICAgIGlmICghc2NoZW1hLm5hbWVzW3NjaGVtYU5hbWVdKSB7XHJcbiAgICAgICAgICAgIHNjaGVtYS5uYW1lc1tzY2hlbWFOYW1lXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuYW1lZFNjaGVtYSA9IHNjaGVtYS5uYW1lc1tzY2hlbWFOYW1lXTtcclxuICAgICAgICBuYW1lZFNjaGVtYVtwcm9wZXJ0eUtleV0gPSBjb3B5T3B0aW9ucztcclxuICAgIH1cclxufTtcblxuZXhwb3J0IHsgSnNvbkVycm9yLCBKc29uUGFyc2VyLCBKc29uUHJvcCwgSnNvblByb3BUeXBlcywgSnNvblNlcmlhbGl6ZXIsIEtleUVycm9yLCBQYXJzZXJFcnJvciwgU2VyaWFsaXplckVycm9yLCBUcmFuc2Zvcm1FcnJvciwgVmFsaWRhdGlvbkVycm9yIH07XG4iLCAiLyohXG4gQ29weXJpZ2h0IChjKSBQZWN1bGlhciBWZW50dXJlcywgTExDXG4qL1xuXG5pbXBvcnQgeyBDb252ZXJ0LCBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIsIGNvbWJpbmUgfSBmcm9tICdwdnRzdXRpbHMnO1xuZXhwb3J0IHsgQnVmZmVyU291cmNlQ29udmVydGVyIH0gZnJvbSAncHZ0c3V0aWxzJztcbmltcG9ydCB7IEFzblByb3AsIEFzblByb3BUeXBlcywgQXNuVHlwZSwgQXNuVHlwZVR5cGVzLCBBc25JbnRlZ2VyQ29udmVydGVyLCBBc25TZXJpYWxpemVyLCBBc25Db252ZXJ0IH0gZnJvbSAnQHBlY3VsaWFyL2FzbjEtc2NoZW1hJztcbmltcG9ydCB7IF9fZGVjb3JhdGUgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBKc29uUHJvcCwgSnNvblByb3BUeXBlcyB9IGZyb20gJ0BwZWN1bGlhci9qc29uLXNjaGVtYSc7XG5pbXBvcnQgKiBhcyBhc24xIGZyb20gJ2FzbjFqcyc7XG5cbmNsYXNzIENyeXB0b0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xufVxuXG5jbGFzcyBBbGdvcml0aG1FcnJvciBleHRlbmRzIENyeXB0b0Vycm9yIHtcbn1cblxuY2xhc3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciBleHRlbmRzIENyeXB0b0Vycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXRob2ROYW1lKSB7XG4gICAgICAgIHN1cGVyKGBVbnN1cHBvcnRlZCBvcGVyYXRpb246ICR7bWV0aG9kTmFtZSA/IGAke21ldGhvZE5hbWV9YCA6IFwiXCJ9YCk7XG4gICAgfVxufVxuXG5jbGFzcyBPcGVyYXRpb25FcnJvciBleHRlbmRzIENyeXB0b0Vycm9yIHtcbn1cblxuY2xhc3MgUmVxdWlyZWRQcm9wZXJ0eUVycm9yIGV4dGVuZHMgQ3J5cHRvRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHByb3BOYW1lKSB7XG4gICAgICAgIHN1cGVyKGAke3Byb3BOYW1lfTogTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eWApO1xuICAgIH1cbn1cblxuY2xhc3MgUGVtQ29udmVydGVyIHtcbiAgICBzdGF0aWMgdG9BcnJheUJ1ZmZlcihwZW0pIHtcbiAgICAgICAgY29uc3QgYmFzZTY0ID0gcGVtXG4gICAgICAgICAgICAucmVwbGFjZSgvLXs1fShCRUdJTnxFTkQpIC4qLXs1fS9nLCBcIlwiKVxuICAgICAgICAgICAgLnJlcGxhY2UoXCJcXHJcIiwgXCJcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKFwiXFxuXCIsIFwiXCIpO1xuICAgICAgICByZXR1cm4gQ29udmVydC5Gcm9tQmFzZTY0KGJhc2U2NCk7XG4gICAgfVxuICAgIHN0YXRpYyB0b1VpbnQ4QXJyYXkocGVtKSB7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gdGhpcy50b0FycmF5QnVmZmVyKHBlbSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShieXRlcyk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tQnVmZmVyU291cmNlKGJ1ZmZlciwgdGFnKSB7XG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IENvbnZlcnQuVG9CYXNlNjQoYnVmZmVyKTtcbiAgICAgICAgbGV0IHNsaWNlZDtcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBbXTtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIHNsaWNlZCA9IGJhc2U2NC5zbGljZShvZmZzZXQsIG9mZnNldCA9IG9mZnNldCArIDY0KTtcbiAgICAgICAgICAgIGlmIChzbGljZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcm93cy5wdXNoKHNsaWNlZCk7XG4gICAgICAgICAgICAgICAgaWYgKHNsaWNlZC5sZW5ndGggPCA2NCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cHBlckNhc2VUYWcgPSB0YWcudG9VcHBlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGAtLS0tLUJFR0lOICR7dXBwZXJDYXNlVGFnfS0tLS0tXFxuJHtyb3dzLmpvaW4oXCJcXG5cIil9XFxuLS0tLS1FTkQgJHt1cHBlckNhc2VUYWd9LS0tLS1gO1xuICAgIH1cbiAgICBzdGF0aWMgaXNQRU0oZGF0YSkge1xuICAgICAgICByZXR1cm4gLy0tLS0tQkVHSU4gListLS0tLVtBLVphLXowLTkrXFwvXFwrXFw9XFxzXFxuXSstLS0tLUVORCAuKy0tLS0tL2kudGVzdChkYXRhKTtcbiAgICB9XG4gICAgc3RhdGljIGdldFRhZ05hbWUocGVtKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1BFTShwZW0pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYWQgcGFyYW1ldGVyLiBJbmNvbWluZyBkYXRhIGlzIG5vdCByaWdodCBQRU1cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gLy0tLS0tQkVHSU4gKC4rKS0tLS0tLy5leGVjKHBlbSk7XG4gICAgICAgIGlmICghcmVzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IHRhZyBmcm9tIFBFTVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzWzFdO1xuICAgIH1cbiAgICBzdGF0aWMgaGFzVGFnTmFtZShwZW0sIHRhZ05hbWUpIHtcbiAgICAgICAgY29uc3QgdGFnID0gdGhpcy5nZXRUYWdOYW1lKHBlbSk7XG4gICAgICAgIHJldHVybiB0YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZy50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNDZXJ0aWZpY2F0ZShwZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzVGFnTmFtZShwZW0sIFwiY2VydGlmaWNhdGVcIik7XG4gICAgfVxuICAgIHN0YXRpYyBpc0NlcnRpZmljYXRlUmVxdWVzdChwZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzVGFnTmFtZShwZW0sIFwiY2VydGlmaWNhdGUgcmVxdWVzdFwiKTtcbiAgICB9XG4gICAgc3RhdGljIGlzQ1JMKHBlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNUYWdOYW1lKHBlbSwgXCJ4NTA5IGNybFwiKTtcbiAgICB9XG4gICAgc3RhdGljIGlzUHVibGljS2V5KHBlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNUYWdOYW1lKHBlbSwgXCJwdWJsaWMga2V5XCIpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNKV0soZGF0YSkge1xuICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBcImt0eVwiIGluIGRhdGE7XG59XG5cbmNsYXNzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBhc3luYyBkaWdlc3QoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrRGlnZXN0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkRpZ2VzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tEaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImRpZ2VzdFwiKTtcbiAgICB9XG4gICAgYXN5bmMgZ2VuZXJhdGVLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrR2VuZXJhdGVLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uR2VuZXJhdGVLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pO1xuICAgICAgICBpZiAoIShrZXlVc2FnZXMgJiYga2V5VXNhZ2VzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVzYWdlcyBjYW5ub3QgYmUgZW1wdHkgd2hlbiBjcmVhdGluZyBhIGtleS5gKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYWxsb3dlZFVzYWdlcztcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51c2FnZXMpKSB7XG4gICAgICAgICAgICBhbGxvd2VkVXNhZ2VzID0gdGhpcy51c2FnZXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhbGxvd2VkVXNhZ2VzID0gdGhpcy51c2FnZXMucHJpdmF0ZUtleS5jb25jYXQodGhpcy51c2FnZXMucHVibGljS2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrS2V5VXNhZ2VzKGtleVVzYWdlcywgYWxsb3dlZFVzYWdlcyk7XG4gICAgfVxuICAgIGNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwiZ2VuZXJhdGVLZXlcIik7XG4gICAgfVxuICAgIGFzeW5jIHNpZ24oLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrU2lnbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25TaWduLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja1NpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEsIC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSwgXCJzaWduXCIpO1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEsIC4uLmFyZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXCJzaWduXCIpO1xuICAgIH1cbiAgICBhc3luYyB2ZXJpZnkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrVmVyaWZ5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vblZlcmlmeS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tWZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSwgLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtTmFtZShhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5LCBcInZlcmlmeVwiKTtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSwgLi4uYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcInZlcmlmeVwiKTtcbiAgICB9XG4gICAgYXN5bmMgZW5jcnlwdCguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tFbmNyeXB0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkVuY3J5cHQuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSwgb3B0aW9ucyA9IHt9LCAuLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXksIG9wdGlvbnMua2V5VXNhZ2UgPyBcImVuY3J5cHRcIiA6IHZvaWQgMCk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSwgLi4uYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImVuY3J5cHRcIik7XG4gICAgfVxuICAgIGFzeW5jIGRlY3J5cHQoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrRGVjcnlwdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25EZWNyeXB0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja0RlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEsIG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtTmFtZShhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5LCBvcHRpb25zLmtleVVzYWdlID8gXCJkZWNyeXB0XCIgOiB2b2lkIDApO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEsIC4uLmFyZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXCJkZWNyeXB0XCIpO1xuICAgIH1cbiAgICBhc3luYyBkZXJpdmVCaXRzKC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0Rlcml2ZUJpdHMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uRGVyaXZlQml0cy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tEZXJpdmVCaXRzKGFsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoLCBvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGJhc2VLZXksIG9wdGlvbnMua2V5VXNhZ2UgPyBcImRlcml2ZUJpdHNcIiA6IHZvaWQgMCk7XG4gICAgICAgIGlmIChsZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3BlcmF0aW9uRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBtdWx0aXBsZSBvZiA4XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCwgLi4uYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImRlcml2ZUJpdHNcIik7XG4gICAgfVxuICAgIGFzeW5jIGV4cG9ydEtleSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tFeHBvcnRLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uRXhwb3J0S2V5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja0V4cG9ydEtleShmb3JtYXQsIGtleSwgLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrS2V5Rm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCFrZXkuZXh0cmFjdGFibGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDcnlwdG9FcnJvcihcImtleTogSXMgbm90IGV4dHJhY3RhYmxlXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5LCAuLi5hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwiZXhwb3J0S2V5XCIpO1xuICAgIH1cbiAgICBhc3luYyBpbXBvcnRLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrSW1wb3J0S2V5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkltcG9ydEtleS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tJbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0tleUZvcm1hdChmb3JtYXQpO1xuICAgICAgICB0aGlzLmNoZWNrS2V5RGF0YShmb3JtYXQsIGtleURhdGEpO1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtTmFtZShhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrSW1wb3J0UGFyYW1zKGFsZ29yaXRobSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMudXNhZ2VzKSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0tleVVzYWdlcyhrZXlVc2FnZXMsIHRoaXMudXNhZ2VzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImltcG9ydEtleVwiKTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSkge1xuICAgICAgICBpZiAoYWxnb3JpdGhtLm5hbWUudG9Mb3dlckNhc2UoKSAhPT0gdGhpcy5uYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBbGdvcml0aG1FcnJvcihcIlVucmVjb2duaXplZCBuYW1lXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgIH1cbiAgICBjaGVja0Rlcml2ZWRLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgfVxuICAgIGNoZWNrS2V5VXNhZ2VzKHVzYWdlcywgYWxsb3dlZCkge1xuICAgICAgICBmb3IgKGNvbnN0IHVzYWdlIG9mIHVzYWdlcykge1xuICAgICAgICAgICAgaWYgKGFsbG93ZWQuaW5kZXhPZih1c2FnZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjcmVhdGUgYSBrZXkgdXNpbmcgdGhlIHNwZWNpZmllZCBrZXkgdXNhZ2VzXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoa2V5LmFsZ29yaXRobSk7XG4gICAgICAgIGlmIChrZXlVc2FnZSAmJiBrZXkudXNhZ2VzLmluZGV4T2Yoa2V5VXNhZ2UpID09PSAtMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENyeXB0b0Vycm9yKGBrZXkgZG9lcyBub3QgbWF0Y2ggdGhhdCBvZiBvcGVyYXRpb25gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja1JlcXVpcmVkUHJvcGVydHkoZGF0YSwgcHJvcE5hbWUpIHtcbiAgICAgICAgaWYgKCEocHJvcE5hbWUgaW4gZGF0YSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSZXF1aXJlZFByb3BlcnR5RXJyb3IocHJvcE5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrSGFzaEFsZ29yaXRobShhbGdvcml0aG0sIGhhc2hBbGdvcml0aG1zKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBoYXNoQWxnb3JpdGhtcykge1xuICAgICAgICAgICAgaWYgKGl0ZW0udG9Mb3dlckNhc2UoKSA9PT0gYWxnb3JpdGhtLm5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgT3BlcmF0aW9uRXJyb3IoYGhhc2g6IE11c3QgYmUgb25lIG9mICR7aGFzaEFsZ29yaXRobXMuam9pbihcIiwgXCIpfWApO1xuICAgIH1cbiAgICBjaGVja0ltcG9ydFBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICB9XG4gICAgY2hlY2tLZXlGb3JtYXQoZm9ybWF0KSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJmb3JtYXQ6IElzIGludmFsaWQgdmFsdWUuIE11c3QgYmUgJ2p3aycsICdyYXcnLCAnc3BraScsIG9yICdwa2NzOCdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tLZXlEYXRhKGZvcm1hdCwga2V5RGF0YSkge1xuICAgICAgICBpZiAoIWtleURhdGEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXlEYXRhOiBDYW5ub3QgYmUgZW1wdHkgb24gZW1wdHkgb24ga2V5IGltcG9ydGluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcImp3a1wiKSB7XG4gICAgICAgICAgICBpZiAoIWlzSldLKGtleURhdGEpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleURhdGE6IElzIG5vdCBKc29uV2ViVG9rZW5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIUJ1ZmZlclNvdXJjZUNvbnZlcnRlci5pc0J1ZmZlclNvdXJjZShrZXlEYXRhKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleURhdGE6IElzIG5vdCBBcnJheUJ1ZmZlclZpZXcgb3IgQXJyYXlCdWZmZXJcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJlcGFyZURhdGEoZGF0YSkge1xuICAgICAgICByZXR1cm4gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBBZXNQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibGVuZ3RoXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5sZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBvZiB0eXBlIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMTI4OlxuICAgICAgICAgICAgY2FzZSAxOTI6XG4gICAgICAgICAgICBjYXNlIDI1NjpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogTXVzdCBiZSAxMjgsIDE5Miwgb3IgMjU2XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrRGVyaXZlZEtleVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSk7XG4gICAgfVxufVxuXG5jbGFzcyBBZXNDYmNQcm92aWRlciBleHRlbmRzIEFlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBRVMtQ0JDXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZW5jcnlwdFwiLCBcImRlY3J5cHRcIiwgXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcIml2XCIpO1xuICAgICAgICBpZiAoIShhbGdvcml0aG0uaXYgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcoYWxnb3JpdGhtLml2KSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJpdjogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLml2LmJ5dGVMZW5ndGggIT09IDE2KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXY6IE11c3QgaGF2ZSBsZW5ndGggMTYgYnl0ZXNcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFlc0NtYWNQcm92aWRlciBleHRlbmRzIEFlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBRVMtQ01BQ1wiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcInNpZ25cIiwgXCJ2ZXJpZnlcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibGVuZ3RoXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5sZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBhIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihcImxlbmd0aDogTXVzdCBiZSBtb3JlIHRoYW4gMFwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzQ3RyUHJvdmlkZXIgZXh0ZW5kcyBBZXNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQUVTLUNUUlwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCIsIFwid3JhcEtleVwiLCBcInVud3JhcEtleVwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJjb3VudGVyXCIpO1xuICAgICAgICBpZiAoIShhbGdvcml0aG0uY291bnRlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhhbGdvcml0aG0uY291bnRlcikpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiY291bnRlcjogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLmNvdW50ZXIuYnl0ZUxlbmd0aCAhPT0gMTYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJpdjogTXVzdCBoYXZlIGxlbmd0aCAxNiBieXRlc1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibGVuZ3RoXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5sZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBhIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihcImxlbmd0aDogTXVzdCBiZSBtb3JlIHRoYW4gMFwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzRWNiUHJvdmlkZXIgZXh0ZW5kcyBBZXNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQUVTLUVDQlwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCIsIFwid3JhcEtleVwiLCBcInVud3JhcEtleVwiXTtcbiAgICB9XG59XG5cbmNsYXNzIEFlc0djbVByb3ZpZGVyIGV4dGVuZHMgQWVzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkFFUy1HQ01cIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJlbmNyeXB0XCIsIFwiZGVjcnlwdFwiLCBcIndyYXBLZXlcIiwgXCJ1bndyYXBLZXlcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaXZcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5pdiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhhbGdvcml0aG0uaXYpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIml2OiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0uaXYuYnl0ZUxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihcIml2OiBNdXN0IGhhdmUgbGVuZ3RoIG1vcmUgdGhhbiAwIGFuZCBsZXNzIHRoYW4gMl42NCAtIDFcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoXCJ0YWdMZW5ndGhcIiBpbiBhbGdvcml0aG0pKSB7XG4gICAgICAgICAgICBhbGdvcml0aG0udGFnTGVuZ3RoID0gMTI4O1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLnRhZ0xlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgICBjYXNlIDk2OlxuICAgICAgICAgICAgY2FzZSAxMDQ6XG4gICAgICAgICAgICBjYXNlIDExMjpcbiAgICAgICAgICAgIGNhc2UgMTIwOlxuICAgICAgICAgICAgY2FzZSAxMjg6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihcInRhZ0xlbmd0aDogTXVzdCBiZSBvbmUgb2YgMzIsIDY0LCA5NiwgMTA0LCAxMTIsIDEyMCBvciAxMjhcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFlc0t3UHJvdmlkZXIgZXh0ZW5kcyBBZXNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQUVTLUtXXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wid3JhcEtleVwiLCBcInVud3JhcEtleVwiXTtcbiAgICB9XG59XG5cbmNsYXNzIERlc1Byb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCIsIFwid3JhcEtleVwiLCBcInVud3JhcEtleVwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIGlmICh0aGlzLml2U2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcIml2XCIpO1xuICAgICAgICAgICAgaWYgKCEoYWxnb3JpdGhtLml2IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGFsZ29yaXRobS5pdikpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIml2OiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsZ29yaXRobS5pdi5ieXRlTGVuZ3RoICE9PSB0aGlzLml2U2l6ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGl2OiBNdXN0IGhhdmUgbGVuZ3RoICR7dGhpcy5pdlNpemV9IGJ5dGVzYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImxlbmd0aFwiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhbGdvcml0aG0ubGVuZ3RoICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibGVuZ3RoOiBJcyBub3Qgb2YgdHlwZSBOdW1iZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5sZW5ndGggIT09IHRoaXMua2V5U2l6ZUJpdHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihgYWxnb3JpdGhtLmxlbmd0aDogTXVzdCBiZSAke3RoaXMua2V5U2l6ZUJpdHN9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tEZXJpdmVkS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKTtcbiAgICB9XG59XG5cbmNsYXNzIFJzYVByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1wiU0hBLTFcIiwgXCJTSEEtMjU2XCIsIFwiU0hBLTM4NFwiLCBcIlNIQS01MTJcIl07XG4gICAgfVxuICAgIGNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJoYXNoXCIpO1xuICAgICAgICB0aGlzLmNoZWNrSGFzaEFsZ29yaXRobShhbGdvcml0aG0uaGFzaCwgdGhpcy5oYXNoQWxnb3JpdGhtcyk7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJwdWJsaWNFeHBvbmVudFwiKTtcbiAgICAgICAgaWYgKCEoYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50ICYmIGFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicHVibGljRXhwb25lbnQ6IE1pc3Npbmcgb3Igbm90IGEgVWludDhBcnJheVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwdWJsaWNFeHBvbmVudCA9IENvbnZlcnQuVG9CYXNlNjQoYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50KTtcbiAgICAgICAgaWYgKCEocHVibGljRXhwb25lbnQgPT09IFwiQXc9PVwiIHx8IHB1YmxpY0V4cG9uZW50ID09PSBcIkFRQUJcIikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJwdWJsaWNFeHBvbmVudDogTXVzdCBiZSBbM10gb3IgWzEsMCwxXVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibW9kdWx1c0xlbmd0aFwiKTtcbiAgICAgICAgaWYgKGFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoICUgOFxuICAgICAgICAgICAgfHwgYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPCAyNTZcbiAgICAgICAgICAgIHx8IGFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoID4gMTYzODQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgbW9kdWx1cyBsZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDggYml0cyBhbmQgPj0gMjU2IGFuZCA8PSAxNjM4NFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0ltcG9ydFBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICB9XG59XG5cbmNsYXNzIFJzYVNzYVByb3ZpZGVyIGV4dGVuZHMgUnNhUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlJTQVNTQS1QS0NTMS12MV81XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wic2lnblwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1widmVyaWZ5XCJdLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuY2xhc3MgUnNhUHNzUHJvdmlkZXIgZXh0ZW5kcyBSc2FQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUlNBLVBTU1wiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IFtcInNpZ25cIl0sXG4gICAgICAgICAgICBwdWJsaWNLZXk6IFtcInZlcmlmeVwiXSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJzYWx0TGVuZ3RoXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5zYWx0TGVuZ3RoICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwic2FsdExlbmd0aDogSXMgbm90IGEgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0uc2FsdExlbmd0aCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwic2FsdExlbmd0aDogTXVzdCBiZSBwb3NpdGl2ZSBudW1iZXJcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFJzYU9hZXBQcm92aWRlciBleHRlbmRzIFJzYVByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSU0EtT0FFUFwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IFtcImRlY3J5cHRcIiwgXCJ1bndyYXBLZXlcIl0sXG4gICAgICAgICAgICBwdWJsaWNLZXk6IFtcImVuY3J5cHRcIiwgXCJ3cmFwS2V5XCJdLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgaWYgKGFsZ29yaXRobS5sYWJlbFxuICAgICAgICAgICAgJiYgIShhbGdvcml0aG0ubGFiZWwgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcoYWxnb3JpdGhtLmxhYmVsKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsYWJlbDogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgRWxsaXB0aWNQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibmFtZWRDdXJ2ZVwiKTtcbiAgICAgICAgdGhpcy5jaGVja05hbWVkQ3VydmUoYWxnb3JpdGhtLm5hbWVkQ3VydmUpO1xuICAgIH1cbiAgICBjaGVja05hbWVkQ3VydmUobmFtZWRDdXJ2ZSkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5uYW1lZEN1cnZlcykge1xuICAgICAgICAgICAgaWYgKGl0ZW0udG9Mb3dlckNhc2UoKSA9PT0gbmFtZWRDdXJ2ZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihgbmFtZWRDdXJ2ZTogTXVzdCBiZSBvbmUgb2YgJHt0aGlzLm5hbWVkQ3VydmVzLmpvaW4oXCIsIFwiKX1gKTtcbiAgICB9XG59XG5cbmNsYXNzIEVjZHNhUHJvdmlkZXIgZXh0ZW5kcyBFbGxpcHRpY1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFQ0RTQVwiO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1wiU0hBLTFcIiwgXCJTSEEtMjU2XCIsIFwiU0hBLTM4NFwiLCBcIlNIQS01MTJcIl07XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wic2lnblwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1widmVyaWZ5XCJdLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm5hbWVkQ3VydmVzID0gW1wiUC0yNTZcIiwgXCJQLTM4NFwiLCBcIlAtNTIxXCIsIFwiSy0yNTZcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgIH1cbn1cblxuY29uc3QgS0VZX1RZUEVTID0gW1wic2VjcmV0XCIsIFwicHJpdmF0ZVwiLCBcInB1YmxpY1wiXTtcbmNsYXNzIENyeXB0b0tleSB7XG4gICAgc3RhdGljIGNyZWF0ZShhbGdvcml0aG0sIHR5cGUsIGV4dHJhY3RhYmxlLCB1c2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IHRoaXMoKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAga2V5LnR5cGUgPSB0eXBlO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IHVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGlzS2V5VHlwZShkYXRhKSB7XG4gICAgICAgIHJldHVybiBLRVlfVFlQRVMuaW5kZXhPZihkYXRhKSAhPT0gLTE7XG4gICAgfVxuICAgIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICAgICAgcmV0dXJuIFwiQ3J5cHRvS2V5XCI7XG4gICAgfVxufVxuXG5jbGFzcyBFY2RoUHJvdmlkZXIgZXh0ZW5kcyBFbGxpcHRpY1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFQ0RIXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wiZGVyaXZlQml0c1wiLCBcImRlcml2ZUtleVwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW10sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubmFtZWRDdXJ2ZXMgPSBbXCJQLTI1NlwiLCBcIlAtMzg0XCIsIFwiUC01MjFcIiwgXCJLLTI1NlwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJwdWJsaWNcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5wdWJsaWMgaW5zdGFuY2VvZiBDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicHVibGljOiBJcyBub3QgYSBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5wdWJsaWMudHlwZSAhPT0gXCJwdWJsaWNcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwicHVibGljOiBJcyBub3QgYSBwdWJsaWMga2V5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0ucHVibGljLmFsZ29yaXRobS5uYW1lICE9PSB0aGlzLm5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihgcHVibGljOiBJcyBub3QgJHt0aGlzLm5hbWV9IGtleWApO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBFY2RoRXNQcm92aWRlciBleHRlbmRzIEVjZGhQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiRUNESC1FU1wiO1xuICAgICAgICB0aGlzLm5hbWVkQ3VydmVzID0gW1wiWDI1NTE5XCIsIFwiWDQ0OFwiXTtcbiAgICB9XG59XG5cbmNsYXNzIEVkRHNhUHJvdmlkZXIgZXh0ZW5kcyBFbGxpcHRpY1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFZERTQVwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IFtcInNpZ25cIl0sXG4gICAgICAgICAgICBwdWJsaWNLZXk6IFtcInZlcmlmeVwiXSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5uYW1lZEN1cnZlcyA9IFtcIkVkMjU1MTlcIiwgXCJFZDQ0OFwiXTtcbiAgICB9XG59XG5cbmxldCBPYmplY3RJZGVudGlmaWVyID0gY2xhc3MgT2JqZWN0SWRlbnRpZmllciB7XG4gICAgY29uc3RydWN0b3IodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59O1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5PYmplY3RJZGVudGlmaWVyIH0pXG5dLCBPYmplY3RJZGVudGlmaWVyLnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuT2JqZWN0SWRlbnRpZmllciA9IF9fZGVjb3JhdGUoW1xuICAgIEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuQ2hvaWNlIH0pXG5dLCBPYmplY3RJZGVudGlmaWVyKTtcblxuY2xhc3MgQWxnb3JpdGhtSWRlbnRpZmllciB7XG4gICAgY29uc3RydWN0b3IocGFyYW1zKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgcGFyYW1zKTtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHtcbiAgICAgICAgdHlwZTogQXNuUHJvcFR5cGVzLk9iamVjdElkZW50aWZpZXIsXG4gICAgfSlcbl0sIEFsZ29yaXRobUlkZW50aWZpZXIucHJvdG90eXBlLCBcImFsZ29yaXRobVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7XG4gICAgICAgIHR5cGU6IEFzblByb3BUeXBlcy5BbnksXG4gICAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgIH0pXG5dLCBBbGdvcml0aG1JZGVudGlmaWVyLnByb3RvdHlwZSwgXCJwYXJhbWV0ZXJzXCIsIHZvaWQgMCk7XG5cbmNsYXNzIFByaXZhdGVLZXlJbmZvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gMDtcbiAgICAgICAgdGhpcy5wcml2YXRlS2V5QWxnb3JpdGhtID0gbmV3IEFsZ29yaXRobUlkZW50aWZpZXIoKTtcbiAgICAgICAgdGhpcy5wcml2YXRlS2V5ID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciB9KVxuXSwgUHJpdmF0ZUtleUluZm8ucHJvdG90eXBlLCBcInZlcnNpb25cIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBbGdvcml0aG1JZGVudGlmaWVyIH0pXG5dLCBQcml2YXRlS2V5SW5mby5wcm90b3R5cGUsIFwicHJpdmF0ZUtleUFsZ29yaXRobVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5PY3RldFN0cmluZyB9KVxuXSwgUHJpdmF0ZUtleUluZm8ucHJvdG90eXBlLCBcInByaXZhdGVLZXlcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuQW55LCBvcHRpb25hbDogdHJ1ZSB9KVxuXSwgUHJpdmF0ZUtleUluZm8ucHJvdG90eXBlLCBcImF0dHJpYnV0ZXNcIiwgdm9pZCAwKTtcblxuY2xhc3MgUHVibGljS2V5SW5mbyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucHVibGljS2V5QWxnb3JpdGhtID0gbmV3IEFsZ29yaXRobUlkZW50aWZpZXIoKTtcbiAgICAgICAgdGhpcy5wdWJsaWNLZXkgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFsZ29yaXRobUlkZW50aWZpZXIgfSlcbl0sIFB1YmxpY0tleUluZm8ucHJvdG90eXBlLCBcInB1YmxpY0tleUFsZ29yaXRobVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5CaXRTdHJpbmcgfSlcbl0sIFB1YmxpY0tleUluZm8ucHJvdG90eXBlLCBcInB1YmxpY0tleVwiLCB2b2lkIDApO1xuXG5jb25zdCBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUpTT046ICh2YWx1ZSkgPT4gQ29udmVydC5Gcm9tQmFzZTY0VXJsKHZhbHVlKSxcbiAgICB0b0pTT046ICh2YWx1ZSkgPT4gQ29udmVydC5Ub0Jhc2U2NFVybChuZXcgVWludDhBcnJheSh2YWx1ZSkpLFxufTtcblxuY29uc3QgQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZUhleCA9IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVIZXg7XG4gICAgICAgIHJldHVybiAhKG5ldyBVaW50OEFycmF5KHZhbHVlSGV4KVswXSlcbiAgICAgICAgICAgID8gdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleC5zbGljZSgxKVxuICAgICAgICAgICAgOiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4O1xuICAgIH0sXG4gICAgdG9BU046ICh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZUhleCA9IG5ldyBVaW50OEFycmF5KHZhbHVlKVswXSA+IDEyN1xuICAgICAgICAgICAgPyBjb21iaW5lKG5ldyBVaW50OEFycmF5KFswXSkuYnVmZmVyLCB2YWx1ZSlcbiAgICAgICAgICAgIDogdmFsdWU7XG4gICAgICAgIHJldHVybiBuZXcgYXNuMS5JbnRlZ2VyKHsgdmFsdWVIZXggfSk7XG4gICAgfSxcbn07XG5cbnZhciBpbmRleCQzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyLFxuICBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlclxufSk7XG5cbmNsYXNzIFJzYVByaXZhdGVLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZlcnNpb24gPSAwO1xuICAgICAgICB0aGlzLm1vZHVsdXMgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMucHVibGljRXhwb25lbnQgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMucHJpdmF0ZUV4cG9uZW50ID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLnByaW1lMSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5wcmltZTIgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMuZXhwb25lbnQxID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLmV4cG9uZW50MiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5jb2VmZmljaWVudCA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwidmVyc2lvblwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiblwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwibW9kdWx1c1wiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZVwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwicHVibGljRXhwb25lbnRcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImRcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcInByaXZhdGVFeHBvbmVudFwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwicFwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwicHJpbWUxXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJxXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwcmltZTJcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImRwXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJleHBvbmVudDFcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImRxXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJleHBvbmVudDJcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcInFpXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJjb2VmZmljaWVudFwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5BbnksIG9wdGlvbmFsOiB0cnVlIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJvdGhlclByaW1lSW5mb3NcIiwgdm9pZCAwKTtcblxuY2xhc3MgUnNhUHVibGljS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5tb2R1bHVzID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLnB1YmxpY0V4cG9uZW50ID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcIm5cIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVB1YmxpY0tleS5wcm90b3R5cGUsIFwibW9kdWx1c1wiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZVwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHVibGljS2V5LnByb3RvdHlwZSwgXCJwdWJsaWNFeHBvbmVudFwiLCB2b2lkIDApO1xuXG5sZXQgRWNQdWJsaWNLZXkgPSBjbGFzcyBFY1B1YmxpY0tleSB7XG4gICAgY29uc3RydWN0b3IodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBsZXQgYnl0ZXMgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlKTtcbiAgICAgICAgaWYgKGJ5dGVzWzBdICE9PSAweDA0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ3J5cHRvRXJyb3IoXCJXcm9uZyBFQ1BvaW50LiBDdXJyZW50IHZlcnNpb24gc3VwcG9ydHMgb25seSBVbmNvbXByZXNzZWQgKDB4MDQpIHBvaW50XCIpO1xuICAgICAgICB9XG4gICAgICAgIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkodGhpcy52YWx1ZS5zbGljZSgxKSk7XG4gICAgICAgIGNvbnN0IHNpemUgPSBieXRlcy5sZW5ndGggLyAyO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSAwO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAgeDogQ29udmVydC5Ub0Jhc2U2NFVybChieXRlcy5idWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzaXplKSksXG4gICAgICAgICAgICB5OiBDb252ZXJ0LlRvQmFzZTY0VXJsKGJ5dGVzLmJ1ZmZlci5zbGljZShvZmZzZXQgKyBzaXplLCBvZmZzZXQgKyBzaXplICsgc2l6ZSkpLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ganNvbjtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBpZiAoIShcInhcIiBpbiBqc29uKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwieDogTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShcInlcIiBpbiBqc29uKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwieTogTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4ID0gQ29udmVydC5Gcm9tQmFzZTY0VXJsKGpzb24ueCk7XG4gICAgICAgIGNvbnN0IHkgPSBDb252ZXJ0LkZyb21CYXNlNjRVcmwoanNvbi55KTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjb21iaW5lKG5ldyBVaW50OEFycmF5KFsweDA0XSkuYnVmZmVyLCB4LCB5KTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBVaW50OEFycmF5KHZhbHVlKS5idWZmZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn07XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9jdGV0U3RyaW5nIH0pXG5dLCBFY1B1YmxpY0tleS5wcm90b3R5cGUsIFwidmFsdWVcIiwgdm9pZCAwKTtcbkVjUHVibGljS2V5ID0gX19kZWNvcmF0ZShbXG4gICAgQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5DaG9pY2UgfSlcbl0sIEVjUHVibGljS2V5KTtcblxuY2xhc3MgRWNQcml2YXRlS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gMTtcbiAgICAgICAgdGhpcy5wcml2YXRlS2V5ID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghKFwiZFwiIGluIGpzb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkOiBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJpdmF0ZUtleSA9IENvbnZlcnQuRnJvbUJhc2U2NFVybChqc29uLmQpO1xuICAgICAgICBpZiAoXCJ4XCIgaW4ganNvbikge1xuICAgICAgICAgICAgY29uc3QgcHVibGljS2V5ID0gbmV3IEVjUHVibGljS2V5KCk7XG4gICAgICAgICAgICBwdWJsaWNLZXkuZnJvbUpTT04oanNvbik7XG4gICAgICAgICAgICBjb25zdCBhc24gPSBBc25TZXJpYWxpemVyLnRvQVNOKHB1YmxpY0tleSk7XG4gICAgICAgICAgICBpZiAoXCJ2YWx1ZUhleFwiIGluIGFzbi52YWx1ZUJsb2NrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wdWJsaWNLZXkgPSBhc24udmFsdWVCbG9jay52YWx1ZUhleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBqd2sgPSB7fTtcbiAgICAgICAgandrLmQgPSBDb252ZXJ0LlRvQmFzZTY0VXJsKHRoaXMucHJpdmF0ZUtleSk7XG4gICAgICAgIGlmICh0aGlzLnB1YmxpY0tleSkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihqd2ssIG5ldyBFY1B1YmxpY0tleSh0aGlzLnB1YmxpY0tleSkudG9KU09OKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBqd2s7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJDb252ZXJ0ZXIgfSlcbl0sIEVjUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwidmVyc2lvblwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5PY3RldFN0cmluZyB9KVxuXSwgRWNQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwcml2YXRlS2V5XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgY29udGV4dDogMCwgdHlwZTogQXNuUHJvcFR5cGVzLkFueSwgb3B0aW9uYWw6IHRydWUgfSlcbl0sIEVjUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwicGFyYW1ldGVyc1wiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IGNvbnRleHQ6IDEsIHR5cGU6IEFzblByb3BUeXBlcy5CaXRTdHJpbmcsIG9wdGlvbmFsOiB0cnVlIH0pXG5dLCBFY1ByaXZhdGVLZXkucHJvdG90eXBlLCBcInB1YmxpY0tleVwiLCB2b2lkIDApO1xuXG5jb25zdCBBc25JbnRlZ2VyV2l0aG91dFBhZGRpbmdDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUudmFsdWVCbG9jay52YWx1ZUhleCk7XG4gICAgICAgIHJldHVybiAoYnl0ZXNbMF0gPT09IDApXG4gICAgICAgICAgICA/IGJ5dGVzLmJ1ZmZlci5zbGljZSgxKVxuICAgICAgICAgICAgOiBieXRlcy5idWZmZXI7XG4gICAgfSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpO1xuICAgICAgICBpZiAoYnl0ZXNbMF0gPiAxMjcpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMubGVuZ3RoICsgMSk7XG4gICAgICAgICAgICBuZXdWYWx1ZS5zZXQoYnl0ZXMsIDEpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBhc24xLkludGVnZXIoeyB2YWx1ZUhleDogbmV3VmFsdWUuYnVmZmVyIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgYXNuMS5JbnRlZ2VyKHsgdmFsdWVIZXg6IHZhbHVlIH0pO1xuICAgIH0sXG59O1xuXG52YXIgaW5kZXgkMiA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBBc25JbnRlZ2VyV2l0aG91dFBhZGRpbmdDb252ZXJ0ZXI6IEFzbkludGVnZXJXaXRob3V0UGFkZGluZ0NvbnZlcnRlclxufSk7XG5cbmNsYXNzIEVjVXRpbHMge1xuICAgIHN0YXRpYyBkZWNvZGVQb2ludChkYXRhLCBwb2ludFNpemUpIHtcbiAgICAgICAgY29uc3QgdmlldyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoZGF0YSk7XG4gICAgICAgIGlmICgodmlldy5sZW5ndGggPT09IDApIHx8ICh2aWV3WzBdICE9PSA0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT25seSB1bmNvbXByZXNzZWQgcG9pbnQgZm9ybWF0IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuID0gKHZpZXcubGVuZ3RoIC0gMSkgLyAyO1xuICAgICAgICBpZiAobiAhPT0gKE1hdGguY2VpbChwb2ludFNpemUgLyA4KSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBvaW50IGRvZXMgbm90IG1hdGNoIGZpZWxkIHNpemVcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeGIgPSB2aWV3LnNsaWNlKDEsIG4gKyAxKTtcbiAgICAgICAgY29uc3QgeWIgPSB2aWV3LnNsaWNlKG4gKyAxLCBuICsgMSArIG4pO1xuICAgICAgICByZXR1cm4geyB4OiB4YiwgeTogeWIgfTtcbiAgICB9XG4gICAgc3RhdGljIGVuY29kZVBvaW50KHBvaW50LCBwb2ludFNpemUpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IE1hdGguY2VpbChwb2ludFNpemUgLyA4KTtcbiAgICAgICAgaWYgKHBvaW50LnguYnl0ZUxlbmd0aCAhPT0gc2l6ZSB8fCBwb2ludC55LmJ5dGVMZW5ndGggIT09IHNpemUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlgsWSBjb29yZGluYXRlcyBkb24ndCBtYXRjaCBwb2ludCBzaXplIGNyaXRlcmlhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHggPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHBvaW50LngpO1xuICAgICAgICBjb25zdCB5ID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShwb2ludC55KTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSAqIDIgKyAxKTtcbiAgICAgICAgcmVzWzBdID0gNDtcbiAgICAgICAgcmVzLnNldCh4LCAxKTtcbiAgICAgICAgcmVzLnNldCh5LCBzaXplICsgMSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRTaXplKHBvaW50U2l6ZSkge1xuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKHBvaW50U2l6ZSAvIDgpO1xuICAgIH1cbiAgICBzdGF0aWMgZW5jb2RlU2lnbmF0dXJlKHNpZ25hdHVyZSwgcG9pbnRTaXplKSB7XG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLmdldFNpemUocG9pbnRTaXplKTtcbiAgICAgICAgY29uc3QgciA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoc2lnbmF0dXJlLnIpO1xuICAgICAgICBjb25zdCBzID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShzaWduYXR1cmUucyk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHNpemUgKiAyKTtcbiAgICAgICAgcmVzLnNldCh0aGlzLnBhZFN0YXJ0KHIsIHNpemUpKTtcbiAgICAgICAgcmVzLnNldCh0aGlzLnBhZFN0YXJ0KHMsIHNpemUpLCBzaXplKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGRlY29kZVNpZ25hdHVyZShkYXRhLCBwb2ludFNpemUpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuZ2V0U2l6ZShwb2ludFNpemUpO1xuICAgICAgICBjb25zdCB2aWV3ID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShkYXRhKTtcbiAgICAgICAgaWYgKHZpZXcubGVuZ3RoICE9PSAoc2l6ZSAqIDIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbmNvcnJlY3Qgc2l6ZSBvZiB0aGUgc2lnbmF0dXJlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHIgPSB2aWV3LnNsaWNlKDAsIHNpemUpO1xuICAgICAgICBjb25zdCBzID0gdmlldy5zbGljZShzaXplKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHI6IHRoaXMudHJpbVN0YXJ0KHIpLFxuICAgICAgICAgICAgczogdGhpcy50cmltU3RhcnQocyksXG4gICAgICAgIH07XG4gICAgfVxuICAgIHN0YXRpYyB0cmltU3RhcnQoZGF0YSkge1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIHdoaWxlICgoaSA8IGRhdGEubGVuZ3RoIC0gMSkgJiYgKGRhdGFbaV0gPT09IDApKSB7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhLnNsaWNlKGksIGRhdGEubGVuZ3RoKTtcbiAgICB9XG4gICAgc3RhdGljIHBhZFN0YXJ0KGRhdGEsIHNpemUpIHtcbiAgICAgICAgaWYgKHNpemUgPT09IGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShzaXplKTtcbiAgICAgICAgcmVzLnNldChkYXRhLCBzaXplIC0gZGF0YS5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn1cblxuY2xhc3MgRWNEc2FTaWduYXR1cmUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnIgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMucyA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICB9XG4gICAgc3RhdGljIGZyb21XZWJDcnlwdG9TaWduYXR1cmUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgcG9pbnRTaXplID0gdmFsdWUuYnl0ZUxlbmd0aCAvIDI7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gRWNVdGlscy5kZWNvZGVTaWduYXR1cmUodmFsdWUsIHBvaW50U2l6ZSAqIDgpO1xuICAgICAgICBjb25zdCBlY1NpZ25hdHVyZSA9IG5ldyBFY0RzYVNpZ25hdHVyZSgpO1xuICAgICAgICBlY1NpZ25hdHVyZS5yID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIocG9pbnQucik7XG4gICAgICAgIGVjU2lnbmF0dXJlLnMgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihwb2ludC5zKTtcbiAgICAgICAgcmV0dXJuIGVjU2lnbmF0dXJlO1xuICAgIH1cbiAgICB0b1dlYkNyeXB0b1NpZ25hdHVyZShwb2ludFNpemUpIHtcbiAgICAgICAgcG9pbnRTaXplICE9PSBudWxsICYmIHBvaW50U2l6ZSAhPT0gdm9pZCAwID8gcG9pbnRTaXplIDogKHBvaW50U2l6ZSA9IE1hdGgubWF4KHRoaXMuci5ieXRlTGVuZ3RoLCB0aGlzLnMuYnl0ZUxlbmd0aCkgKiA4KTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gRWNVdGlscy5lbmNvZGVTaWduYXR1cmUodGhpcywgcG9pbnRTaXplKTtcbiAgICAgICAgcmV0dXJuIHNpZ25hdHVyZS5idWZmZXI7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJXaXRob3V0UGFkZGluZ0NvbnZlcnRlciB9KVxuXSwgRWNEc2FTaWduYXR1cmUucHJvdG90eXBlLCBcInJcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyV2l0aG91dFBhZGRpbmdDb252ZXJ0ZXIgfSlcbl0sIEVjRHNhU2lnbmF0dXJlLnByb3RvdHlwZSwgXCJzXCIsIHZvaWQgMCk7XG5cbmNsYXNzIE9uZUFzeW1tZXRyaWNLZXkgZXh0ZW5kcyBQcml2YXRlS2V5SW5mbyB7XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgY29udGV4dDogMSwgaW1wbGljaXQ6IHRydWUsIHR5cGU6IEFzblByb3BUeXBlcy5CaXRTdHJpbmcsIG9wdGlvbmFsOiB0cnVlIH0pXG5dLCBPbmVBc3ltbWV0cmljS2V5LnByb3RvdHlwZSwgXCJwdWJsaWNLZXlcIiwgdm9pZCAwKTtcblxubGV0IEVkUHJpdmF0ZUtleSA9IGNsYXNzIEVkUHJpdmF0ZUtleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCFqc29uLmQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImQ6IE1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHlcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IENvbnZlcnQuRnJvbUJhc2U2NFVybChqc29uLmQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBqd2sgPSB7XG4gICAgICAgICAgICBkOiBDb252ZXJ0LlRvQmFzZTY0VXJsKHRoaXMudmFsdWUpLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gandrO1xuICAgIH1cbn07XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9jdGV0U3RyaW5nIH0pXG5dLCBFZFByaXZhdGVLZXkucHJvdG90eXBlLCBcInZhbHVlXCIsIHZvaWQgMCk7XG5FZFByaXZhdGVLZXkgPSBfX2RlY29yYXRlKFtcbiAgICBBc25UeXBlKHsgdHlwZTogQXNuVHlwZVR5cGVzLkNob2ljZSB9KVxuXSwgRWRQcml2YXRlS2V5KTtcblxubGV0IEVkUHVibGljS2V5ID0gY2xhc3MgRWRQdWJsaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIHg6IENvbnZlcnQuVG9CYXNlNjRVcmwodGhpcy52YWx1ZSksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghKFwieFwiIGluIGpzb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ4OiBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSBDb252ZXJ0LkZyb21CYXNlNjRVcmwoanNvbi54KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuQml0U3RyaW5nIH0pXG5dLCBFZFB1YmxpY0tleS5wcm90b3R5cGUsIFwidmFsdWVcIiwgdm9pZCAwKTtcbkVkUHVibGljS2V5ID0gX19kZWNvcmF0ZShbXG4gICAgQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5DaG9pY2UgfSlcbl0sIEVkUHVibGljS2V5KTtcblxubGV0IEN1cnZlUHJpdmF0ZUtleSA9IGNsYXNzIEN1cnZlUHJpdmF0ZUtleSB7XG59O1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5PY3RldFN0cmluZyB9KSxcbiAgICBKc29uUHJvcCh7IHR5cGU6IEpzb25Qcm9wVHlwZXMuU3RyaW5nLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgQ3VydmVQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJkXCIsIHZvaWQgMCk7XG5DdXJ2ZVByaXZhdGVLZXkgPSBfX2RlY29yYXRlKFtcbiAgICBBc25UeXBlKHsgdHlwZTogQXNuVHlwZVR5cGVzLkNob2ljZSB9KVxuXSwgQ3VydmVQcml2YXRlS2V5KTtcblxuY29uc3QgaWRTZWNwMjU2cjEgPSBcIjEuMi44NDAuMTAwNDUuMy4xLjdcIjtcbmNvbnN0IGlkRWxsaXB0aWNDdXJ2ZSA9IFwiMS4zLjEzMi4wXCI7XG5jb25zdCBpZFNlY3AzODRyMSA9IGAke2lkRWxsaXB0aWNDdXJ2ZX0uMzRgO1xuY29uc3QgaWRTZWNwNTIxcjEgPSBgJHtpZEVsbGlwdGljQ3VydmV9LjM1YDtcbmNvbnN0IGlkU2VjcDI1NmsxID0gYCR7aWRFbGxpcHRpY0N1cnZlfS4xMGA7XG5jb25zdCBpZFZlcnNpb25PbmUgPSBcIjEuMy4zNi4zLjMuMi44LjEuMVwiO1xuY29uc3QgaWRCcmFpbnBvb2xQMTYwcjEgPSBgJHtpZFZlcnNpb25PbmV9LjFgO1xuY29uc3QgaWRCcmFpbnBvb2xQMTYwdDEgPSBgJHtpZFZlcnNpb25PbmV9LjJgO1xuY29uc3QgaWRCcmFpbnBvb2xQMTkycjEgPSBgJHtpZFZlcnNpb25PbmV9LjNgO1xuY29uc3QgaWRCcmFpbnBvb2xQMTkydDEgPSBgJHtpZFZlcnNpb25PbmV9LjRgO1xuY29uc3QgaWRCcmFpbnBvb2xQMjI0cjEgPSBgJHtpZFZlcnNpb25PbmV9LjVgO1xuY29uc3QgaWRCcmFpbnBvb2xQMjI0dDEgPSBgJHtpZFZlcnNpb25PbmV9LjZgO1xuY29uc3QgaWRCcmFpbnBvb2xQMjU2cjEgPSBgJHtpZFZlcnNpb25PbmV9LjdgO1xuY29uc3QgaWRCcmFpbnBvb2xQMjU2dDEgPSBgJHtpZFZlcnNpb25PbmV9LjhgO1xuY29uc3QgaWRCcmFpbnBvb2xQMzIwcjEgPSBgJHtpZFZlcnNpb25PbmV9LjlgO1xuY29uc3QgaWRCcmFpbnBvb2xQMzIwdDEgPSBgJHtpZFZlcnNpb25PbmV9LjEwYDtcbmNvbnN0IGlkQnJhaW5wb29sUDM4NHIxID0gYCR7aWRWZXJzaW9uT25lfS4xMWA7XG5jb25zdCBpZEJyYWlucG9vbFAzODR0MSA9IGAke2lkVmVyc2lvbk9uZX0uMTJgO1xuY29uc3QgaWRCcmFpbnBvb2xQNTEycjEgPSBgJHtpZFZlcnNpb25PbmV9LjEzYDtcbmNvbnN0IGlkQnJhaW5wb29sUDUxMnQxID0gYCR7aWRWZXJzaW9uT25lfS4xNGA7XG5jb25zdCBpZFgyNTUxOSA9IFwiMS4zLjEwMS4xMTBcIjtcbmNvbnN0IGlkWDQ0OCA9IFwiMS4zLjEwMS4xMTFcIjtcbmNvbnN0IGlkRWQyNTUxOSA9IFwiMS4zLjEwMS4xMTJcIjtcbmNvbnN0IGlkRWQ0NDggPSBcIjEuMy4xMDEuMTEzXCI7XG5cbnZhciBpbmRleCQxID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIEFsZ29yaXRobUlkZW50aWZpZXI6IEFsZ29yaXRobUlkZW50aWZpZXIsXG4gIGdldCBDdXJ2ZVByaXZhdGVLZXkgKCkgeyByZXR1cm4gQ3VydmVQcml2YXRlS2V5OyB9LFxuICBFY0RzYVNpZ25hdHVyZTogRWNEc2FTaWduYXR1cmUsXG4gIEVjUHJpdmF0ZUtleTogRWNQcml2YXRlS2V5LFxuICBnZXQgRWNQdWJsaWNLZXkgKCkgeyByZXR1cm4gRWNQdWJsaWNLZXk7IH0sXG4gIGdldCBFZFByaXZhdGVLZXkgKCkgeyByZXR1cm4gRWRQcml2YXRlS2V5OyB9LFxuICBnZXQgRWRQdWJsaWNLZXkgKCkgeyByZXR1cm4gRWRQdWJsaWNLZXk7IH0sXG4gIGdldCBPYmplY3RJZGVudGlmaWVyICgpIHsgcmV0dXJuIE9iamVjdElkZW50aWZpZXI7IH0sXG4gIE9uZUFzeW1tZXRyaWNLZXk6IE9uZUFzeW1tZXRyaWNLZXksXG4gIFByaXZhdGVLZXlJbmZvOiBQcml2YXRlS2V5SW5mbyxcbiAgUHVibGljS2V5SW5mbzogUHVibGljS2V5SW5mbyxcbiAgUnNhUHJpdmF0ZUtleTogUnNhUHJpdmF0ZUtleSxcbiAgUnNhUHVibGljS2V5OiBSc2FQdWJsaWNLZXksXG4gIGNvbnZlcnRlcnM6IGluZGV4JDIsXG4gIGlkQnJhaW5wb29sUDE2MHIxOiBpZEJyYWlucG9vbFAxNjByMSxcbiAgaWRCcmFpbnBvb2xQMTYwdDE6IGlkQnJhaW5wb29sUDE2MHQxLFxuICBpZEJyYWlucG9vbFAxOTJyMTogaWRCcmFpbnBvb2xQMTkycjEsXG4gIGlkQnJhaW5wb29sUDE5MnQxOiBpZEJyYWlucG9vbFAxOTJ0MSxcbiAgaWRCcmFpbnBvb2xQMjI0cjE6IGlkQnJhaW5wb29sUDIyNHIxLFxuICBpZEJyYWlucG9vbFAyMjR0MTogaWRCcmFpbnBvb2xQMjI0dDEsXG4gIGlkQnJhaW5wb29sUDI1NnIxOiBpZEJyYWlucG9vbFAyNTZyMSxcbiAgaWRCcmFpbnBvb2xQMjU2dDE6IGlkQnJhaW5wb29sUDI1NnQxLFxuICBpZEJyYWlucG9vbFAzMjByMTogaWRCcmFpbnBvb2xQMzIwcjEsXG4gIGlkQnJhaW5wb29sUDMyMHQxOiBpZEJyYWlucG9vbFAzMjB0MSxcbiAgaWRCcmFpbnBvb2xQMzg0cjE6IGlkQnJhaW5wb29sUDM4NHIxLFxuICBpZEJyYWlucG9vbFAzODR0MTogaWRCcmFpbnBvb2xQMzg0dDEsXG4gIGlkQnJhaW5wb29sUDUxMnIxOiBpZEJyYWlucG9vbFA1MTJyMSxcbiAgaWRCcmFpbnBvb2xQNTEydDE6IGlkQnJhaW5wb29sUDUxMnQxLFxuICBpZEVkMjU1MTk6IGlkRWQyNTUxOSxcbiAgaWRFZDQ0ODogaWRFZDQ0OCxcbiAgaWRFbGxpcHRpY0N1cnZlOiBpZEVsbGlwdGljQ3VydmUsXG4gIGlkU2VjcDI1NmsxOiBpZFNlY3AyNTZrMSxcbiAgaWRTZWNwMjU2cjE6IGlkU2VjcDI1NnIxLFxuICBpZFNlY3AzODRyMTogaWRTZWNwMzg0cjEsXG4gIGlkU2VjcDUyMXIxOiBpZFNlY3A1MjFyMSxcbiAgaWRWZXJzaW9uT25lOiBpZFZlcnNpb25PbmUsXG4gIGlkWDI1NTE5OiBpZFgyNTUxOSxcbiAgaWRYNDQ4OiBpZFg0NDhcbn0pO1xuXG5jbGFzcyBFY0N1cnZlcyB7XG4gICAgY29uc3RydWN0b3IoKSB7IH1cbiAgICBzdGF0aWMgcmVnaXN0ZXIoaXRlbSkge1xuICAgICAgICBjb25zdCBvaWQgPSBuZXcgT2JqZWN0SWRlbnRpZmllcigpO1xuICAgICAgICBvaWQudmFsdWUgPSBpdGVtLmlkO1xuICAgICAgICBjb25zdCByYXcgPSBBc25Db252ZXJ0LnNlcmlhbGl6ZShvaWQpO1xuICAgICAgICB0aGlzLml0ZW1zLnB1c2goe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIHJhdyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZXMucHVzaChpdGVtLm5hbWUpO1xuICAgIH1cbiAgICBzdGF0aWMgZmluZChuYW1lT3JJZCkge1xuICAgICAgICBuYW1lT3JJZCA9IG5hbWVPcklkLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLml0ZW1zKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5uYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5hbWVPcklkIHx8IGl0ZW0uaWQudG9VcHBlckNhc2UoKSA9PT0gbmFtZU9ySWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc3RhdGljIGdldChuYW1lT3JJZCkge1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLmZpbmQobmFtZU9ySWQpO1xuICAgICAgICBpZiAoIXJlcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBFQyBuYW1lZCBjdXJ2ZSAnJHtuYW1lT3JJZH0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59XG5FY0N1cnZlcy5pdGVtcyA9IFtdO1xuRWNDdXJ2ZXMubmFtZXMgPSBbXTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJQLTI1NlwiLCBpZDogaWRTZWNwMjU2cjEsIHNpemU6IDI1NiB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJQLTM4NFwiLCBpZDogaWRTZWNwMzg0cjEsIHNpemU6IDM4NCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJQLTUyMVwiLCBpZDogaWRTZWNwNTIxcjEsIHNpemU6IDUyMSB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJLLTI1NlwiLCBpZDogaWRTZWNwMjU2azEsIHNpemU6IDI1NiB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMTYwcjFcIiwgaWQ6IGlkQnJhaW5wb29sUDE2MHIxLCBzaXplOiAxNjAgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDE2MHQxXCIsIGlkOiBpZEJyYWlucG9vbFAxNjB0MSwgc2l6ZTogMTYwIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAxOTJyMVwiLCBpZDogaWRCcmFpbnBvb2xQMTkycjEsIHNpemU6IDE5MiB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMTkydDFcIiwgaWQ6IGlkQnJhaW5wb29sUDE5MnQxLCBzaXplOiAxOTIgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDIyNHIxXCIsIGlkOiBpZEJyYWlucG9vbFAyMjRyMSwgc2l6ZTogMjI0IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAyMjR0MVwiLCBpZDogaWRCcmFpbnBvb2xQMjI0dDEsIHNpemU6IDIyNCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMjU2cjFcIiwgaWQ6IGlkQnJhaW5wb29sUDI1NnIxLCBzaXplOiAyNTYgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDI1NnQxXCIsIGlkOiBpZEJyYWlucG9vbFAyNTZ0MSwgc2l6ZTogMjU2IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAzMjByMVwiLCBpZDogaWRCcmFpbnBvb2xQMzIwcjEsIHNpemU6IDMyMCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMzIwdDFcIiwgaWQ6IGlkQnJhaW5wb29sUDMyMHQxLCBzaXplOiAzMjAgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDM4NHIxXCIsIGlkOiBpZEJyYWlucG9vbFAzODRyMSwgc2l6ZTogMzg0IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAzODR0MVwiLCBpZDogaWRCcmFpbnBvb2xQMzg0dDEsIHNpemU6IDM4NCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQNTEycjFcIiwgaWQ6IGlkQnJhaW5wb29sUDUxMnIxLCBzaXplOiA1MTIgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDUxMnQxXCIsIGlkOiBpZEJyYWlucG9vbFA1MTJ0MSwgc2l6ZTogNTEyIH0pO1xuXG5jbGFzcyBIbWFjUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiSE1BQ1wiO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1wiU0hBLTFcIiwgXCJTSEEtMjU2XCIsIFwiU0hBLTM4NFwiLCBcIlNIQS01MTJcIl07XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wic2lnblwiLCBcInZlcmlmeVwiXTtcbiAgICB9XG4gICAgZ2V0RGVmYXVsdExlbmd0aChhbGdOYW1lKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnTmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMjU2XCI6XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTM4NFwiOlxuICAgICAgICAgICAgY2FzZSBcIlNIQS01MTJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gNTEyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYWxnb3JpdGhtIG5hbWUgJyR7YWxnTmFtZX0nYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICAgICAgaWYgKFwibGVuZ3RoXCIgaW4gYWxnb3JpdGhtKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5sZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibGVuZ3RoOiBJcyBub3QgYSBOdW1iZXJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxnb3JpdGhtLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImxlbmd0aDogTnVtYmVyIGlzIG91dCBvZiByYW5nZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0ltcG9ydFBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICB9XG59XG5cbmNsYXNzIFBia2RmMlByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlBCS0RGMlwiO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1wiU0hBLTFcIiwgXCJTSEEtMjU2XCIsIFwiU0hBLTM4NFwiLCBcIlNIQS01MTJcIl07XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZGVyaXZlQml0c1wiLCBcImRlcml2ZUtleVwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJoYXNoXCIpO1xuICAgICAgICB0aGlzLmNoZWNrSGFzaEFsZ29yaXRobShhbGdvcml0aG0uaGFzaCwgdGhpcy5oYXNoQWxnb3JpdGhtcyk7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJzYWx0XCIpO1xuICAgICAgICBpZiAoIShhbGdvcml0aG0uc2FsdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhhbGdvcml0aG0uc2FsdCkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwic2FsdDogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaXRlcmF0aW9uc1wiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhbGdvcml0aG0uaXRlcmF0aW9ucyAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIml0ZXJhdGlvbnM6IElzIG5vdCBhIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLml0ZXJhdGlvbnMgPCAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXRlcmF0aW9uczogSXMgbGVzcyB0aGFuIDFcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tJbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLmFyZ3MpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tJbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICBpZiAoZXh0cmFjdGFibGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcImV4dHJhY3RhYmxlOiBNdXN0IGJlICdmYWxzZSdcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEhrZGZQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJIS0RGXCI7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiXTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJkZXJpdmVLZXlcIiwgXCJkZXJpdmVCaXRzXCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInNhbHRcIik7XG4gICAgICAgIGlmICghQnVmZmVyU291cmNlQ29udmVydGVyLmlzQnVmZmVyU291cmNlKGFsZ29yaXRobS5zYWx0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInNhbHQ6IElzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImluZm9cIik7XG4gICAgICAgIGlmICghQnVmZmVyU291cmNlQ29udmVydGVyLmlzQnVmZmVyU291cmNlKGFsZ29yaXRobS5pbmZvKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInNhbHQ6IElzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tJbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLmFyZ3MpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tJbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICBpZiAoZXh0cmFjdGFibGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcImV4dHJhY3RhYmxlOiBNdXN0IGJlICdmYWxzZSdcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFNoYWtlUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgICAgIHRoaXMuZGVmYXVsdExlbmd0aCA9IDA7XG4gICAgfVxuICAgIGRpZ2VzdCguLi5hcmdzKSB7XG4gICAgICAgIGFyZ3NbMF0gPSB7IGxlbmd0aDogdGhpcy5kZWZhdWx0TGVuZ3RoLCAuLi5hcmdzWzBdIH07XG4gICAgICAgIHJldHVybiBzdXBlci5kaWdlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICBzdXBlci5jaGVja0RpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBhbGdvcml0aG0ubGVuZ3RoIHx8IDA7XG4gICAgICAgIGlmICh0eXBlb2YgbGVuZ3RoICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibGVuZ3RoOiBJcyBub3QgYSBOdW1iZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxlbmd0aCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5lZ2F0aXZlXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBTaGFrZTEyOFByb3ZpZGVyIGV4dGVuZHMgU2hha2VQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwic2hha2UxMjhcIjtcbiAgICAgICAgdGhpcy5kZWZhdWx0TGVuZ3RoID0gMTY7XG4gICAgfVxufVxuXG5jbGFzcyBTaGFrZTI1NlByb3ZpZGVyIGV4dGVuZHMgU2hha2VQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwic2hha2UyNTZcIjtcbiAgICAgICAgdGhpcy5kZWZhdWx0TGVuZ3RoID0gMzI7XG4gICAgfVxufVxuXG5jbGFzcyBDcnlwdG8ge1xuICAgIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICAgICAgcmV0dXJuIFwiQ3J5cHRvXCI7XG4gICAgfVxuICAgIHJhbmRvbVVVSUQoKSB7XG4gICAgICAgIGNvbnN0IGIgPSB0aGlzLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgxNikpO1xuICAgICAgICBiWzZdID0gKGJbNl0gJiAweDBmKSB8IDB4NDA7XG4gICAgICAgIGJbOF0gPSAoYls4XSAmIDB4M2YpIHwgMHg4MDtcbiAgICAgICAgY29uc3QgdXVpZCA9IENvbnZlcnQuVG9IZXgoYikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGAke3V1aWQuc3Vic3RyaW5nKDAsIDgpfS0ke3V1aWQuc3Vic3RyaW5nKDgsIDEyKX0tJHt1dWlkLnN1YnN0cmluZygxMiwgMTYpfS0ke3V1aWQuc3Vic3RyaW5nKDE2LCAyMCl9LSR7dXVpZC5zdWJzdHJpbmcoMjApfWA7XG4gICAgfVxufVxuXG5jbGFzcyBQcm92aWRlclN0b3JhZ2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLml0ZW1zID0ge307XG4gICAgfVxuICAgIGdldChhbGdvcml0aG1OYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zW2FsZ29yaXRobU5hbWUudG9Mb3dlckNhc2UoKV0gfHwgbnVsbDtcbiAgICB9XG4gICAgc2V0KHByb3ZpZGVyKSB7XG4gICAgICAgIHRoaXMuaXRlbXNbcHJvdmlkZXIubmFtZS50b0xvd2VyQ2FzZSgpXSA9IHByb3ZpZGVyO1xuICAgIH1cbiAgICByZW1vdmVBdChhbGdvcml0aG1OYW1lKSB7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXQoYWxnb3JpdGhtTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKHByb3ZpZGVyKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5pdGVtc1thbGdvcml0aG1OYW1lXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvdmlkZXI7XG4gICAgfVxuICAgIGhhcyhuYW1lKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZ2V0KG5hbWUpO1xuICAgIH1cbiAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5pdGVtcykubGVuZ3RoO1xuICAgIH1cbiAgICBnZXQgYWxnb3JpdGhtcygpIHtcbiAgICAgICAgY29uc3QgYWxnb3JpdGhtcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLml0ZW1zKSB7XG4gICAgICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuaXRlbXNba2V5XTtcbiAgICAgICAgICAgIGFsZ29yaXRobXMucHVzaChwcm92aWRlci5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxnb3JpdGhtcy5zb3J0KCk7XG4gICAgfVxufVxuXG5jbGFzcyBTdWJ0bGVDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnByb3ZpZGVycyA9IG5ldyBQcm92aWRlclN0b3JhZ2UoKTtcbiAgICB9XG4gICAgc3RhdGljIGlzSGFzaGVkQWxnb3JpdGhtKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICYmIHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiXG4gICAgICAgICAgICAmJiBcIm5hbWVcIiBpbiBkYXRhXG4gICAgICAgICAgICAmJiBcImhhc2hcIiBpbiBkYXRhXG4gICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgIDogZmFsc2U7XG4gICAgfVxuICAgIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICAgICAgcmV0dXJuIFwiU3VidGxlQ3J5cHRvXCI7XG4gICAgfVxuICAgIGFzeW5jIGRpZ2VzdCguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCAyLCBcImRpZ2VzdFwiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwgZGF0YSwgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGRhdGEpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmRpZ2VzdChwcmVwYXJlZEFsZ29yaXRobSwgcHJlcGFyZWREYXRhLCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBnZW5lcmF0ZUtleSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCAzLCBcImdlbmVyYXRlS2V5XCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5nZW5lcmF0ZUtleSh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIHNpZ24oLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgMywgXCJzaWduXCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBrZXksIGRhdGEsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGRhdGEpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLnNpZ24oeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBrZXksIHByZXBhcmVkRGF0YSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgdmVyaWZ5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDQsIFwidmVyaWZ5XCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSwgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWREYXRhID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkU2lnbmF0dXJlID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoc2lnbmF0dXJlKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci52ZXJpZnkoeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBrZXksIHByZXBhcmVkU2lnbmF0dXJlLCBwcmVwYXJlZERhdGEsIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIGVuY3J5cHQoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgMywgXCJlbmNyeXB0XCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBrZXksIGRhdGEsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGRhdGEpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmVuY3J5cHQoeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBrZXksIHByZXBhcmVkRGF0YSwgeyBrZXlVc2FnZTogdHJ1ZSB9LCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBkZWNyeXB0KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDMsIFwiZGVjcnlwdFwiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwga2V5LCBkYXRhLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXkpO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcmVwYXJlZERhdGEgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihkYXRhKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5kZWNyeXB0KHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwga2V5LCBwcmVwYXJlZERhdGEsIHsga2V5VXNhZ2U6IHRydWUgfSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgZGVyaXZlQml0cyguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCAzLCBcImRlcml2ZUJpdHNcIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCwgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoYmFzZUtleSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZGVyaXZlQml0cyh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGJhc2VLZXksIGxlbmd0aCwgeyBrZXlVc2FnZTogdHJ1ZSB9LCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBkZXJpdmVLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgNSwgXCJkZXJpdmVLZXlcIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGJhc2VLZXksIGRlcml2ZWRLZXlUeXBlLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgY29uc3QgcHJlcGFyZWREZXJpdmVkS2V5VHlwZSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShkZXJpdmVkS2V5VHlwZSk7XG4gICAgICAgIGNvbnN0IGltcG9ydFByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZERlcml2ZWRLZXlUeXBlLm5hbWUpO1xuICAgICAgICBpbXBvcnRQcm92aWRlci5jaGVja0Rlcml2ZWRLZXlQYXJhbXMocHJlcGFyZWREZXJpdmVkS2V5VHlwZSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgcHJvdmlkZXIuY2hlY2tDcnlwdG9LZXkoYmFzZUtleSwgXCJkZXJpdmVLZXlcIik7XG4gICAgICAgIGNvbnN0IGRlcml2ZWRCaXRzID0gYXdhaXQgcHJvdmlkZXIuZGVyaXZlQml0cyh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGJhc2VLZXksIGRlcml2ZWRLZXlUeXBlLmxlbmd0aCB8fCA1MTIsIHsga2V5VXNhZ2U6IGZhbHNlIH0sIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmltcG9ydEtleShcInJhd1wiLCBkZXJpdmVkQml0cywgZGVyaXZlZEtleVR5cGUsIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLnBhcmFtcyk7XG4gICAgfVxuICAgIGFzeW5jIGV4cG9ydEtleSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCAyLCBcImV4cG9ydEtleVwiKTtcbiAgICAgICAgY29uc3QgW2Zvcm1hdCwga2V5LCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXkpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIoa2V5LmFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZXhwb3J0S2V5KGZvcm1hdCwga2V5LCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBpbXBvcnRLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgNSwgXCJpbXBvcnRLZXlcIik7XG4gICAgICAgIGNvbnN0IFtmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgaWYgKFtcInBrY3M4XCIsIFwic3BraVwiLCBcInJhd1wiXS5pbmRleE9mKGZvcm1hdCkgIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVwYXJlZERhdGEgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihrZXlEYXRhKTtcbiAgICAgICAgICAgIHJldHVybiBwcm92aWRlci5pbXBvcnRLZXkoZm9ybWF0LCBwcmVwYXJlZERhdGEsIHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4ucGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICgha2V5RGF0YS5rdHkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5RGF0YTogSXMgbm90IEpTT05cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3ZpZGVyLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4ucGFyYW1zKTtcbiAgICB9XG4gICAgYXN5bmMgd3JhcEtleShmb3JtYXQsIGtleSwgd3JhcHBpbmdLZXksIHdyYXBBbGdvcml0aG0sIC4uLmFyZ3MpIHtcbiAgICAgICAgbGV0IGtleURhdGEgPSBhd2FpdCB0aGlzLmV4cG9ydEtleShmb3JtYXQsIGtleSwgLi4uYXJncyk7XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiandrXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShrZXlEYXRhKTtcbiAgICAgICAgICAgIGtleURhdGEgPSBDb252ZXJ0LkZyb21VdGY4U3RyaW5nKGpzb24pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKHdyYXBBbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcmVwYXJlZERhdGEgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihrZXlEYXRhKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICByZXR1cm4gcHJvdmlkZXIuZW5jcnlwdCh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIHdyYXBwaW5nS2V5LCBwcmVwYXJlZERhdGEsIHsga2V5VXNhZ2U6IGZhbHNlIH0sIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBhc3luYyB1bndyYXBLZXkoZm9ybWF0LCB3cmFwcGVkS2V5LCB1bndyYXBwaW5nS2V5LCB1bndyYXBBbGdvcml0aG0sIHVud3JhcHBlZEtleUFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncykge1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobSh1bndyYXBBbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcmVwYXJlZERhdGEgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcih3cmFwcGVkS2V5KTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBsZXQga2V5RGF0YSA9IGF3YWl0IHByb3ZpZGVyLmRlY3J5cHQoeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCB1bndyYXBwaW5nS2V5LCBwcmVwYXJlZERhdGEsIHsga2V5VXNhZ2U6IGZhbHNlIH0sIC4uLmFyZ3MpO1xuICAgICAgICBpZiAoZm9ybWF0ID09PSBcImp3a1wiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGtleURhdGEgPSBKU09OLnBhcnNlKENvbnZlcnQuVG9VdGY4U3RyaW5nKGtleURhdGEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgVHlwZUVycm9yKFwid3JhcHBlZEtleTogSXMgbm90IGEgSlNPTlwiKTtcbiAgICAgICAgICAgICAgICBlcnJvci5pbnRlcm5hbCA9IGU7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgdW53cmFwcGVkS2V5QWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5hcmdzKTtcbiAgICB9XG4gICAgY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCBzaXplLCBtZXRob2ROYW1lKSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IHNpemUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEZhaWxlZCB0byBleGVjdXRlICcke21ldGhvZE5hbWV9JyBvbiAnU3VidGxlQ3J5cHRvJzogJHtzaXplfSBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5ICR7YXJncy5sZW5ndGh9IHByZXNlbnRgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSkge1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBhbGdvcml0aG0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChTdWJ0bGVDcnlwdG8uaXNIYXNoZWRBbGdvcml0aG0oYWxnb3JpdGhtKSkge1xuICAgICAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB7IC4uLmFsZ29yaXRobSB9O1xuICAgICAgICAgICAgcHJlcGFyZWRBbGdvcml0aG0uaGFzaCA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0uaGFzaCk7XG4gICAgICAgICAgICByZXR1cm4gcHJlcGFyZWRBbGdvcml0aG07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgLi4uYWxnb3JpdGhtIH07XG4gICAgfVxuICAgIGdldFByb3ZpZGVyKG5hbWUpIHtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLnByb3ZpZGVycy5nZXQobmFtZSk7XG4gICAgICAgIGlmICghcHJvdmlkZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBbGdvcml0aG1FcnJvcihcIlVucmVjb2duaXplZCBuYW1lXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm92aWRlcjtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbnN0YW5jZW9mIENyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEtleSBpcyBub3Qgb2YgdHlwZSAnQ3J5cHRvS2V5J2ApO1xuICAgICAgICB9XG4gICAgfVxufVxuXG52YXIgaW5kZXggPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgY29udmVydGVyczogaW5kZXgkM1xufSk7XG5cbmNvbnN0IFJFUVVJUkVEX0ZJRUxEUyA9IFtcImNydlwiLCBcImVcIiwgXCJrXCIsIFwia3R5XCIsIFwiblwiLCBcInhcIiwgXCJ5XCJdO1xuY2xhc3MgSndrVXRpbHMge1xuICAgIHN0YXRpYyBhc3luYyB0aHVtYnByaW50KGhhc2gsIGp3aywgY3J5cHRvKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmZvcm1hdChqd2ssIHRydWUpO1xuICAgICAgICByZXR1cm4gY3J5cHRvLnN1YnRsZS5kaWdlc3QoaGFzaCwgQ29udmVydC5Gcm9tQmluYXJ5KEpTT04uc3RyaW5naWZ5KGRhdGEpKSk7XG4gICAgfVxuICAgIHN0YXRpYyBmb3JtYXQoandrLCByZW1vdmUgPSBmYWxzZSkge1xuICAgICAgICBsZXQgcmVzID0gT2JqZWN0LmVudHJpZXMoandrKTtcbiAgICAgICAgaWYgKHJlbW92ZSkge1xuICAgICAgICAgICAgcmVzID0gcmVzLmZpbHRlcihvID0+IFJFUVVJUkVEX0ZJRUxEUy5pbmNsdWRlcyhvWzBdKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gcmVzLnNvcnQoKFtrZXlBXSwgW2tleUJdKSA9PiBrZXlBID4ga2V5QiA/IDEgOiBrZXlBIDwga2V5QiA/IC0xIDogMCk7XG4gICAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMocmVzKTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IEFlc0NiY1Byb3ZpZGVyLCBBZXNDbWFjUHJvdmlkZXIsIEFlc0N0clByb3ZpZGVyLCBBZXNFY2JQcm92aWRlciwgQWVzR2NtUHJvdmlkZXIsIEFlc0t3UHJvdmlkZXIsIEFlc1Byb3ZpZGVyLCBBbGdvcml0aG1FcnJvciwgQ3J5cHRvLCBDcnlwdG9FcnJvciwgQ3J5cHRvS2V5LCBEZXNQcm92aWRlciwgRWNDdXJ2ZXMsIEVjVXRpbHMsIEVjZGhFc1Byb3ZpZGVyLCBFY2RoUHJvdmlkZXIsIEVjZHNhUHJvdmlkZXIsIEVkRHNhUHJvdmlkZXIsIEVsbGlwdGljUHJvdmlkZXIsIEhrZGZQcm92aWRlciwgSG1hY1Byb3ZpZGVyLCBKd2tVdGlscywgT3BlcmF0aW9uRXJyb3IsIFBia2RmMlByb3ZpZGVyLCBQZW1Db252ZXJ0ZXIsIFByb3ZpZGVyQ3J5cHRvLCBQcm92aWRlclN0b3JhZ2UsIFJlcXVpcmVkUHJvcGVydHlFcnJvciwgUnNhT2FlcFByb3ZpZGVyLCBSc2FQcm92aWRlciwgUnNhUHNzUHJvdmlkZXIsIFJzYVNzYVByb3ZpZGVyLCBTaGFrZTEyOFByb3ZpZGVyLCBTaGFrZTI1NlByb3ZpZGVyLCBTaGFrZVByb3ZpZGVyLCBTdWJ0bGVDcnlwdG8sIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IsIGluZGV4JDEgYXMgYXNuMSwgaXNKV0ssIGluZGV4IGFzIGpzb24gfTtcbiIsICIvKiFcbiBDb3B5cmlnaHQgKGMpIFBlY3VsaWFyIFZlbnR1cmVzLCBMTENcbiovXG5cbmltcG9ydCAqIGFzIGNvcmUgZnJvbSAnd2ViY3J5cHRvLWNvcmUnO1xuaW1wb3J0IHsgQnVmZmVyU291cmNlQ29udmVydGVyIGFzIEJ1ZmZlclNvdXJjZUNvbnZlcnRlciQxIH0gZnJvbSAnd2ViY3J5cHRvLWNvcmUnO1xuZXhwb3J0IHsgQ3J5cHRvS2V5IH0gZnJvbSAnd2ViY3J5cHRvLWNvcmUnO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgY3J5cHRvX19kZWZhdWx0IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBwcm9jZXNzIGZyb20gJ3Byb2Nlc3MnO1xuaW1wb3J0IHsgX19kZWNvcmF0ZSB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IEpzb25Qcm9wLCBKc29uUHJvcFR5cGVzLCBKc29uU2VyaWFsaXplciwgSnNvblBhcnNlciB9IGZyb20gJ0BwZWN1bGlhci9qc29uLXNjaGVtYSc7XG5pbXBvcnQgeyBDb252ZXJ0LCBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgfSBmcm9tICdwdnRzdXRpbHMnO1xuaW1wb3J0IHsgQXNuUGFyc2VyLCBBc25TZXJpYWxpemVyIH0gZnJvbSAnQHBlY3VsaWFyL2FzbjEtc2NoZW1hJztcblxuY29uc3QgSnNvbkJhc2U2NFVybENvbnZlcnRlciA9IHtcbiAgICBmcm9tSlNPTjogKHZhbHVlKSA9PiBCdWZmZXIuZnJvbShDb252ZXJ0LkZyb21CYXNlNjRVcmwodmFsdWUpKSxcbiAgICB0b0pTT046ICh2YWx1ZSkgPT4gQ29udmVydC5Ub0Jhc2U2NFVybCh2YWx1ZSksXG59O1xuXG5jbGFzcyBDcnlwdG9LZXkgZXh0ZW5kcyBjb3JlLkNyeXB0b0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlci5hbGxvYygwKTtcbiAgICAgICAgdGhpcy5hbGdvcml0aG0gPSB7IG5hbWU6IFwiXCIgfTtcbiAgICAgICAgdGhpcy5leHRyYWN0YWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInNlY3JldFwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgICAgICB0aGlzLmt0eSA9IFwib2N0XCI7XG4gICAgICAgIHRoaXMuYWxnID0gXCJcIjtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZXh0XCIsIHR5cGU6IEpzb25Qcm9wVHlwZXMuQm9vbGVhbiwgb3B0aW9uYWw6IHRydWUgfSlcbl0sIENyeXB0b0tleS5wcm90b3R5cGUsIFwiZXh0cmFjdGFibGVcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJrZXlfb3BzXCIsIHR5cGU6IEpzb25Qcm9wVHlwZXMuU3RyaW5nLCByZXBlYXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUgfSlcbl0sIENyeXB0b0tleS5wcm90b3R5cGUsIFwidXNhZ2VzXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBKc29uUHJvcCh7IHR5cGU6IEpzb25Qcm9wVHlwZXMuU3RyaW5nIH0pXG5dLCBDcnlwdG9LZXkucHJvdG90eXBlLCBcImt0eVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgSnNvblByb3AoeyB0eXBlOiBKc29uUHJvcFR5cGVzLlN0cmluZywgb3B0aW9uYWw6IHRydWUgfSlcbl0sIENyeXB0b0tleS5wcm90b3R5cGUsIFwiYWxnXCIsIHZvaWQgMCk7XG5cbmNsYXNzIFN5bW1ldHJpY0tleSBleHRlbmRzIENyeXB0b0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMua3R5ID0gXCJvY3RcIjtcbiAgICAgICAgdGhpcy50eXBlID0gXCJzZWNyZXRcIjtcbiAgICB9XG59XG5cbmNsYXNzIEFzeW1tZXRyaWNLZXkgZXh0ZW5kcyBDcnlwdG9LZXkge1xufVxuXG5jbGFzcyBBZXNDcnlwdG9LZXkgZXh0ZW5kcyBTeW1tZXRyaWNLZXkge1xuICAgIGdldCBhbGcoKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5hbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQSR7dGhpcy5hbGdvcml0aG0ubGVuZ3RofUNCQ2A7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNUUlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQSR7dGhpcy5hbGdvcml0aG0ubGVuZ3RofUNUUmA7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUdDTVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQSR7dGhpcy5hbGdvcml0aG0ubGVuZ3RofUdDTWA7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUtXXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBBJHt0aGlzLmFsZ29yaXRobS5sZW5ndGh9S1dgO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DTUFDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBBJHt0aGlzLmFsZ29yaXRobS5sZW5ndGh9Q01BQ2A7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUVDQlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQSR7dGhpcy5hbGdvcml0aG0ubGVuZ3RofUVDQmA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLkFsZ29yaXRobUVycm9yKFwiVW5zdXBwb3J0ZWQgYWxnb3JpdGhtIG5hbWVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0IGFsZyh2YWx1ZSkge1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJrXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybENvbnZlcnRlciB9KVxuXSwgQWVzQ3J5cHRvS2V5LnByb3RvdHlwZSwgXCJkYXRhXCIsIHZvaWQgMCk7XG5cbmNsYXNzIEFlc0NyeXB0byB7XG4gICAgc3RhdGljIGFzeW5jIGdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgQWVzQ3J5cHRvS2V5KCk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICBrZXkuZGF0YSA9IGNyeXB0b19fZGVmYXVsdC5yYW5kb21CeXRlcyhhbGdvcml0aG0ubGVuZ3RoID4+IDMpO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImtleTogSXMgbm90IEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpzb25TZXJpYWxpemVyLnRvSlNPTihrZXkpO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShrZXkuZGF0YSkuYnVmZmVyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJyBvciAncmF3J1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGxldCBrZXk7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICBrZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBBZXNDcnlwdG9LZXkgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6XG4gICAgICAgICAgICAgICAga2V5ID0gbmV3IEFlc0NyeXB0b0tleSgpO1xuICAgICAgICAgICAgICAgIGtleS5kYXRhID0gQnVmZmVyLmZyb20oa2V5RGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snIG9yICdyYXcnXCIpO1xuICAgICAgICB9XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIGtleS5hbGdvcml0aG0ubGVuZ3RoID0ga2V5LmRhdGEubGVuZ3RoIDw8IDM7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICBzd2l0Y2ggKGtleS5hbGdvcml0aG0ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDEyODpcbiAgICAgICAgICAgIGNhc2UgMTkyOlxuICAgICAgICAgICAgY2FzZSAyNTY6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwia2V5RGF0YTogSXMgd3Jvbmcga2V5IGxlbmd0aFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdEFlc0NCQyhhbGdvcml0aG0sIGtleSwgQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DVFJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0QWVzQ1RSKGFsZ29yaXRobSwga2V5LCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUdDTVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY3J5cHRBZXNHQ00oYWxnb3JpdGhtLCBrZXksIEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtS1dcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0QWVzS1coYWxnb3JpdGhtLCBrZXksIEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtRUNCXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdEFlc0VDQihhbGdvcml0aG0sIGtleSwgQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluc3RhbmNlb2YgQWVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwia2V5OiBJcyBub3QgQWVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0QWVzQ0JDKGFsZ29yaXRobSwga2V5LCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNUUlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHRBZXNDVFIoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtR0NNXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdEFlc0dDTShhbGdvcml0aG0sIGtleSwgQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1LV1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHRBZXNLVyhhbGdvcml0aG0sIGtleSwgQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1FQ0JcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0QWVzRUNCKGFsZ29yaXRobSwga2V5LCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdEFlc0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlQ2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1jYmNgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGxldCBlbmMgPSBjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBlbmMgPSBCdWZmZXIuY29uY2F0KFtlbmMsIGNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdEFlc0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBkZWNpcGhlciA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVEZWNpcGhlcml2KGBhZXMtJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0tY2JjYCwga2V5LmRhdGEsIG5ldyBVaW50OEFycmF5KGFsZ29yaXRobS5pdikpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBkZWMgPSBCdWZmZXIuY29uY2F0KFtkZWMsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRlYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdEFlc0NUUihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlQ2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1jdHJgLCBrZXkuZGF0YSwgQnVmZmVyLmZyb20oYWxnb3JpdGhtLmNvdW50ZXIpKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlci5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0QWVzQ1RSKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZURlY2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1jdHJgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLmNvdW50ZXIpKTtcbiAgICAgICAgbGV0IGRlYyA9IGRlY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZGVjID0gQnVmZmVyLmNvbmNhdChbZGVjLCBkZWNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkZWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHRBZXNHQ00oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZUNpcGhlcml2KGBhZXMtJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0tZ2NtYCwga2V5LmRhdGEsIEJ1ZmZlci5mcm9tKGFsZ29yaXRobS5pdiksIHtcbiAgICAgICAgICAgIGF1dGhUYWdMZW5ndGg6IChhbGdvcml0aG0udGFnTGVuZ3RoIHx8IDEyOCkgPj4gMyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChhbGdvcml0aG0uYWRkaXRpb25hbERhdGEpIHtcbiAgICAgICAgICAgIGNpcGhlci5zZXRBQUQoQnVmZmVyLmZyb20oYWxnb3JpdGhtLmFkZGl0aW9uYWxEYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlci5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCksIGNpcGhlci5nZXRBdXRoVGFnKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0QWVzR0NNKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZURlY2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1nY21gLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGNvbnN0IHRhZ0xlbmd0aCA9IChhbGdvcml0aG0udGFnTGVuZ3RoIHx8IDEyOCkgPj4gMztcbiAgICAgICAgY29uc3QgZW5jID0gZGF0YS5zbGljZSgwLCBkYXRhLmxlbmd0aCAtIHRhZ0xlbmd0aCk7XG4gICAgICAgIGNvbnN0IHRhZyA9IGRhdGEuc2xpY2UoZGF0YS5sZW5ndGggLSB0YWdMZW5ndGgpO1xuICAgICAgICBpZiAoYWxnb3JpdGhtLmFkZGl0aW9uYWxEYXRhKSB7XG4gICAgICAgICAgICBkZWNpcGhlci5zZXRBQUQoQnVmZmVyLmZyb20oYWxnb3JpdGhtLmFkZGl0aW9uYWxEYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgZGVjaXBoZXIuc2V0QXV0aFRhZyh0YWcpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGVuYyk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlci5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0QWVzS1coYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZUNpcGhlcml2KGBpZC1hZXMke2tleS5hbGdvcml0aG0ubGVuZ3RofS13cmFwYCwga2V5LmRhdGEsIHRoaXMuQUVTX0tXX0lWKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlci5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdEFlc0tXKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZURlY2lwaGVyaXYoYGlkLWFlcyR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LXdyYXBgLCBrZXkuZGF0YSwgdGhpcy5BRVNfS1dfSVYpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBkZWMgPSBCdWZmZXIuY29uY2F0KFtkZWMsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRlYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdEFlc0VDQihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlQ2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1lY2JgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoMCkpO1xuICAgICAgICBsZXQgZW5jID0gY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZW5jID0gQnVmZmVyLmNvbmNhdChbZW5jLCBjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShlbmMpLmJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHRBZXNFQ0IoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlRGVjaXBoZXJpdihgYWVzLSR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LWVjYmAsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheSgwKSk7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlci5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxufVxuQWVzQ3J5cHRvLkFFU19LV19JViA9IEJ1ZmZlci5mcm9tKFwiQTZBNkE2QTZBNkE2QTZBNlwiLCBcImhleFwiKTtcblxuY29uc3Qga2V5U3RvcmFnZSA9IG5ldyBXZWFrTWFwKCk7XG5mdW5jdGlvbiBnZXRDcnlwdG9LZXkoa2V5KSB7XG4gICAgY29uc3QgcmVzID0ga2V5U3RvcmFnZS5nZXQoa2V5KTtcbiAgICBpZiAoIXJlcykge1xuICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcIkNhbm5vdCBnZXQgQ3J5cHRvS2V5IGZyb20gc2VjdXJlIHN0b3JhZ2VcIik7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBzZXRDcnlwdG9LZXkodmFsdWUpIHtcbiAgICBjb25zdCBrZXkgPSBjb3JlLkNyeXB0b0tleS5jcmVhdGUodmFsdWUuYWxnb3JpdGhtLCB2YWx1ZS50eXBlLCB2YWx1ZS5leHRyYWN0YWJsZSwgdmFsdWUudXNhZ2VzKTtcbiAgICBPYmplY3QuZnJlZXplKGtleSk7XG4gICAga2V5U3RvcmFnZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgcmV0dXJuIGtleTtcbn1cblxuY2xhc3MgQWVzQ2JjUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkFlc0NiY1Byb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY29uc3QgemVybyA9IEJ1ZmZlci5mcm9tKFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSk7XG5jb25zdCByYiA9IEJ1ZmZlci5mcm9tKFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzVdKTtcbmNvbnN0IGJsb2NrU2l6ZSA9IDE2O1xuZnVuY3Rpb24gYml0U2hpZnRMZWZ0KGJ1ZmZlcikge1xuICAgIGNvbnN0IHNoaWZ0ZWQgPSBCdWZmZXIuYWxsb2MoYnVmZmVyLmxlbmd0aCk7XG4gICAgY29uc3QgbGFzdCA9IGJ1ZmZlci5sZW5ndGggLSAxO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsYXN0OyBpbmRleCsrKSB7XG4gICAgICAgIHNoaWZ0ZWRbaW5kZXhdID0gYnVmZmVyW2luZGV4XSA8PCAxO1xuICAgICAgICBpZiAoYnVmZmVyW2luZGV4ICsgMV0gJiAweDgwKSB7XG4gICAgICAgICAgICBzaGlmdGVkW2luZGV4XSArPSAweDAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNoaWZ0ZWRbbGFzdF0gPSBidWZmZXJbbGFzdF0gPDwgMTtcbiAgICByZXR1cm4gc2hpZnRlZDtcbn1cbmZ1bmN0aW9uIHhvcihhLCBiKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gTWF0aC5taW4oYS5sZW5ndGgsIGIubGVuZ3RoKTtcbiAgICBjb25zdCBvdXRwdXQgPSBCdWZmZXIuYWxsb2MobGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIG91dHB1dFtpbmRleF0gPSBhW2luZGV4XSBeIGJbaW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xufVxuZnVuY3Rpb24gYWVzKGtleSwgbWVzc2FnZSkge1xuICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihgYWVzJHtrZXkubGVuZ3RoIDw8IDN9YCwga2V5LCB6ZXJvKTtcbiAgICBjb25zdCByZXN1bHQgPSBjaXBoZXIudXBkYXRlKG1lc3NhZ2UpO1xuICAgIGNpcGhlci5maW5hbCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXRNZXNzYWdlQmxvY2sobWVzc2FnZSwgYmxvY2tJbmRleCkge1xuICAgIGNvbnN0IGJsb2NrID0gQnVmZmVyLmFsbG9jKGJsb2NrU2l6ZSk7XG4gICAgY29uc3Qgc3RhcnQgPSBibG9ja0luZGV4ICogYmxvY2tTaXplO1xuICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgYmxvY2tTaXplO1xuICAgIG1lc3NhZ2UuY29weShibG9jaywgMCwgc3RhcnQsIGVuZCk7XG4gICAgcmV0dXJuIGJsb2NrO1xufVxuZnVuY3Rpb24gZ2V0UGFkZGVkTWVzc2FnZUJsb2NrKG1lc3NhZ2UsIGJsb2NrSW5kZXgpIHtcbiAgICBjb25zdCBibG9jayA9IEJ1ZmZlci5hbGxvYyhibG9ja1NpemUpO1xuICAgIGNvbnN0IHN0YXJ0ID0gYmxvY2tJbmRleCAqIGJsb2NrU2l6ZTtcbiAgICBjb25zdCBlbmQgPSBtZXNzYWdlLmxlbmd0aDtcbiAgICBibG9jay5maWxsKDApO1xuICAgIG1lc3NhZ2UuY29weShibG9jaywgMCwgc3RhcnQsIGVuZCk7XG4gICAgYmxvY2tbZW5kIC0gc3RhcnRdID0gMHg4MDtcbiAgICByZXR1cm4gYmxvY2s7XG59XG5mdW5jdGlvbiBnZW5lcmF0ZVN1YmtleXMoa2V5KSB7XG4gICAgY29uc3QgbCA9IGFlcyhrZXksIHplcm8pO1xuICAgIGxldCBzdWJrZXkxID0gYml0U2hpZnRMZWZ0KGwpO1xuICAgIGlmIChsWzBdICYgMHg4MCkge1xuICAgICAgICBzdWJrZXkxID0geG9yKHN1YmtleTEsIHJiKTtcbiAgICB9XG4gICAgbGV0IHN1YmtleTIgPSBiaXRTaGlmdExlZnQoc3Via2V5MSk7XG4gICAgaWYgKHN1YmtleTFbMF0gJiAweDgwKSB7XG4gICAgICAgIHN1YmtleTIgPSB4b3Ioc3Via2V5MiwgcmIpO1xuICAgIH1cbiAgICByZXR1cm4geyBzdWJrZXkxLCBzdWJrZXkyIH07XG59XG5mdW5jdGlvbiBhZXNDbWFjKGtleSwgbWVzc2FnZSkge1xuICAgIGNvbnN0IHN1YmtleXMgPSBnZW5lcmF0ZVN1YmtleXMoa2V5KTtcbiAgICBsZXQgYmxvY2tDb3VudCA9IE1hdGguY2VpbChtZXNzYWdlLmxlbmd0aCAvIGJsb2NrU2l6ZSk7XG4gICAgbGV0IGxhc3RCbG9ja0NvbXBsZXRlRmxhZztcbiAgICBsZXQgbGFzdEJsb2NrO1xuICAgIGlmIChibG9ja0NvdW50ID09PSAwKSB7XG4gICAgICAgIGJsb2NrQ291bnQgPSAxO1xuICAgICAgICBsYXN0QmxvY2tDb21wbGV0ZUZsYWcgPSBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxhc3RCbG9ja0NvbXBsZXRlRmxhZyA9IChtZXNzYWdlLmxlbmd0aCAlIGJsb2NrU2l6ZSA9PT0gMCk7XG4gICAgfVxuICAgIGNvbnN0IGxhc3RCbG9ja0luZGV4ID0gYmxvY2tDb3VudCAtIDE7XG4gICAgaWYgKGxhc3RCbG9ja0NvbXBsZXRlRmxhZykge1xuICAgICAgICBsYXN0QmxvY2sgPSB4b3IoZ2V0TWVzc2FnZUJsb2NrKG1lc3NhZ2UsIGxhc3RCbG9ja0luZGV4KSwgc3Via2V5cy5zdWJrZXkxKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxhc3RCbG9jayA9IHhvcihnZXRQYWRkZWRNZXNzYWdlQmxvY2sobWVzc2FnZSwgbGFzdEJsb2NrSW5kZXgpLCBzdWJrZXlzLnN1YmtleTIpO1xuICAgIH1cbiAgICBsZXQgeCA9IHplcm87XG4gICAgbGV0IHk7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxhc3RCbG9ja0luZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHkgPSB4b3IoeCwgZ2V0TWVzc2FnZUJsb2NrKG1lc3NhZ2UsIGluZGV4KSk7XG4gICAgICAgIHggPSBhZXMoa2V5LCB5KTtcbiAgICB9XG4gICAgeSA9IHhvcihsYXN0QmxvY2ssIHgpO1xuICAgIHJldHVybiBhZXMoa2V5LCB5KTtcbn1cbmNsYXNzIEFlc0NtYWNQcm92aWRlciBleHRlbmRzIGNvcmUuQWVzQ21hY1Byb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYWVzQ21hYyhnZXRDcnlwdG9LZXkoa2V5KS5kYXRhLCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShyZXN1bHQpLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBjb25zdCBzaWduYXR1cmUyID0gYXdhaXQgdGhpcy5zaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSkuY29tcGFyZShCdWZmZXIuZnJvbShzaWduYXR1cmUyKSkgPT09IDA7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShyZXMpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzQ3RyUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkFlc0N0clByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShyZXMpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzR2NtUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkFlc0djbVByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShyZXMpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzS3dQcm92aWRlciBleHRlbmRzIGNvcmUuQWVzS3dQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgQWVzQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGxlbmd0aDogYWxnb3JpdGhtLmxlbmd0aCxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkocmVzKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEFlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IGFsZ29yaXRobS5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KHJlcyk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmVuY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5kZWNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBBZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgYSBBZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFlc0VjYlByb3ZpZGVyIGV4dGVuZHMgY29yZS5BZXNFY2JQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgQWVzQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGxlbmd0aDogYWxnb3JpdGhtLmxlbmd0aCxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZW5jcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmRlY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgQWVzQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgbmFtZTogYWxnb3JpdGhtLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkocmVzKTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBBZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgYSBBZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIERlc0NyeXB0b0tleSBleHRlbmRzIFN5bW1ldHJpY0tleSB7XG4gICAgZ2V0IGFsZygpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJERVMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBERVMtQ0JDYDtcbiAgICAgICAgICAgIGNhc2UgXCJERVMtRURFMy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYDNERVMtQ0JDYDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuQWxnb3JpdGhtRXJyb3IoXCJVbnN1cHBvcnRlZCBhbGdvcml0aG0gbmFtZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXQgYWxnKHZhbHVlKSB7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImtcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQ29udmVydGVyIH0pXG5dLCBEZXNDcnlwdG9LZXkucHJvdG90eXBlLCBcImRhdGFcIiwgdm9pZCAwKTtcblxuY2xhc3MgRGVzQ3J5cHRvIHtcbiAgICBzdGF0aWMgYXN5bmMgZ2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBEZXNDcnlwdG9LZXkoKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIGtleS5kYXRhID0gY3J5cHRvX19kZWZhdWx0LnJhbmRvbUJ5dGVzKGFsZ29yaXRobS5sZW5ndGggPj4gMyk7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBleHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KTtcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoa2V5LmRhdGEpLmJ1ZmZlcjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycgb3IgJ3JhdydcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBsZXQga2V5O1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihrZXlEYXRhLCB7IHRhcmdldFNjaGVtYTogRGVzQ3J5cHRvS2V5IH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIGtleSA9IG5ldyBEZXNDcnlwdG9LZXkoKTtcbiAgICAgICAgICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlci5mcm9tKGtleURhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJyBvciAncmF3J1wiKTtcbiAgICAgICAgfVxuICAgICAgICBrZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiREVTLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY3J5cHREZXNDQkMoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJERVMtRURFMy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0RGVzRURFM0NCQyhhbGdvcml0aG0sIGtleSwgQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluc3RhbmNlb2YgRGVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwia2V5OiBJcyBub3QgRGVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIkRFUy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0RGVzQ0JDKGFsZ29yaXRobSwga2V5LCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiREVTLUVERTMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdERlc0VERTNDQkMoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0RGVzQ0JDKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVDaXBoZXJpdihgZGVzLWNiY2AsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheShhbGdvcml0aG0uaXYpKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlci5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0RGVzQ0JDKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZURlY2lwaGVyaXYoYGRlcy1jYmNgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlci5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0RGVzRURFM0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlQ2lwaGVyaXYoYGRlcy1lZGUzLWNiY2AsIGtleS5kYXRhLCBCdWZmZXIuZnJvbShhbGdvcml0aG0uaXYpKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlci5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0RGVzRURFM0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBkZWNpcGhlciA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVEZWNpcGhlcml2KGBkZXMtZWRlMy1jYmNgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlci5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxufVxuXG5jbGFzcyBEZXNDYmNQcm92aWRlciBleHRlbmRzIGNvcmUuRGVzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmtleVNpemVCaXRzID0gNjQ7XG4gICAgICAgIHRoaXMuaXZTaXplID0gODtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJERVMtQ0JDXCI7XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IERlc0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IHRoaXMua2V5U2l6ZUJpdHMsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRGVzQ3J5cHRvLmVuY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIERlc0NyeXB0by5kZWNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIERlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IERlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IHRoaXMubmFtZSwgbGVuZ3RoOiB0aGlzLmtleVNpemVCaXRzIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICBpZiAoa2V5LmRhdGEubGVuZ3RoICE9PSAodGhpcy5rZXlTaXplQml0cyA+PiAzKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJrZXlEYXRhOiBXcm9uZyBrZXkgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgRGVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgRGVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBEZXNFZGUzQ2JjUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkRlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5rZXlTaXplQml0cyA9IDE5MjtcbiAgICAgICAgdGhpcy5pdlNpemUgPSA4O1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkRFUy1FREUzLUNCQ1wiO1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBEZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLmtleVNpemVCaXRzLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIERlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBEZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBEZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBEZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiB0aGlzLm5hbWUsIGxlbmd0aDogdGhpcy5rZXlTaXplQml0cyB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgaWYgKGtleS5kYXRhLmxlbmd0aCAhPT0gKHRoaXMua2V5U2l6ZUJpdHMgPj4gMykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwia2V5RGF0YTogV3Jvbmcga2V5IHNpemVcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIERlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIERlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0SndrQWxnb3JpdGhtKGFsZ29yaXRobSkge1xuICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICBjYXNlIFwiUlNBLU9BRVBcIjoge1xuICAgICAgICAgICAgY29uc3QgbWRTaXplID0gLyhcXGQrKSQvLmV4ZWMoYWxnb3JpdGhtLmhhc2gubmFtZSlbMV07XG4gICAgICAgICAgICByZXR1cm4gYFJTQS1PQUVQJHttZFNpemUgIT09IFwiMVwiID8gYC0ke21kU2l6ZX1gIDogXCJcIn1gO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJSU0FTU0EtUEtDUzEtVjFfNVwiOlxuICAgICAgICAgICAgcmV0dXJuIGBSUyR7LyhcXGQrKSQvLmV4ZWMoYWxnb3JpdGhtLmhhc2gubmFtZSlbMV19YDtcbiAgICAgICAgY2FzZSBcIlJTQS1QU1NcIjpcbiAgICAgICAgICAgIHJldHVybiBgUFMkey8oXFxkKykkLy5leGVjKGFsZ29yaXRobS5oYXNoLm5hbWUpWzFdfWA7XG4gICAgICAgIGNhc2UgXCJSU0EtUEtDUzFcIjpcbiAgICAgICAgICAgIHJldHVybiBgUlMxYDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICB9XG59XG5cbmNsYXNzIFJzYVByaXZhdGVLZXkgZXh0ZW5kcyBBc3ltbWV0cmljS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJwcml2YXRlXCI7XG4gICAgfVxuICAgIGdldEtleSgpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZSh0aGlzLmRhdGEsIGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wcml2YXRlS2V5LCBjb3JlLmFzbjEuUnNhUHJpdmF0ZUtleSk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGt0eTogXCJSU0FcIixcbiAgICAgICAgICAgIGFsZzogZ2V0SndrQWxnb3JpdGhtKHRoaXMuYWxnb3JpdGhtKSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihqc29uLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLlJzYVByaXZhdGVLZXkgfSk7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5wYXJhbWV0ZXJzID0gbnVsbDtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5ID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5KTtcbiAgICAgICAgdGhpcy5kYXRhID0gQnVmZmVyLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgIH1cbn1cblxuY2xhc3MgUnNhUHVibGljS2V5IGV4dGVuZHMgQXN5bW1ldHJpY0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IFwicHVibGljXCI7XG4gICAgfVxuICAgIGdldEtleSgpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZSh0aGlzLmRhdGEsIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgcmV0dXJuIEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnB1YmxpY0tleSwgY29yZS5hc24xLlJzYVB1YmxpY0tleSk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGt0eTogXCJSU0FcIixcbiAgICAgICAgICAgIGFsZzogZ2V0SndrQWxnb3JpdGhtKHRoaXMuYWxnb3JpdGhtKSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihqc29uLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLlJzYVB1YmxpY0tleSB9KTtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBudWxsO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlci5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICB9XG59XG5cbmNsYXNzIFJzYUNyeXB0byB7XG4gICAgc3RhdGljIGFzeW5jIGdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gbmV3IFJzYVByaXZhdGVLZXkoKTtcbiAgICAgICAgcHJpdmF0ZUtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIHByaXZhdGVLZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAgcHJpdmF0ZUtleS51c2FnZXMgPSBrZXlVc2FnZXMuZmlsdGVyKCh1c2FnZSkgPT4gdGhpcy5wcml2YXRlS2V5VXNhZ2VzLmluZGV4T2YodXNhZ2UpICE9PSAtMSk7XG4gICAgICAgIGNvbnN0IHB1YmxpY0tleSA9IG5ldyBSc2FQdWJsaWNLZXkoKTtcbiAgICAgICAgcHVibGljS2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgcHVibGljS2V5LmV4dHJhY3RhYmxlID0gdHJ1ZTtcbiAgICAgICAgcHVibGljS2V5LnVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnB1YmxpY0tleVVzYWdlcy5pbmRleE9mKHVzYWdlKSAhPT0gLTEpO1xuICAgICAgICBjb25zdCBwdWJsaWNFeHBvbmVudCA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgICAgICAgQnVmZmVyLmFsbG9jKDQgLSBhbGdvcml0aG0ucHVibGljRXhwb25lbnQuYnl0ZUxlbmd0aCwgMCksXG4gICAgICAgICAgICBCdWZmZXIuZnJvbShhbGdvcml0aG0ucHVibGljRXhwb25lbnQpLFxuICAgICAgICBdKS5yZWFkSW50MzJCRSgwKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IGNyeXB0b19fZGVmYXVsdC5nZW5lcmF0ZUtleVBhaXJTeW5jKFwicnNhXCIsIHtcbiAgICAgICAgICAgIG1vZHVsdXNMZW5ndGg6IGFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoLFxuICAgICAgICAgICAgcHVibGljRXhwb25lbnQsXG4gICAgICAgICAgICBwdWJsaWNLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNwa2lcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcml2YXRlS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJwa2NzOFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHByaXZhdGVLZXkuZGF0YSA9IGtleXMucHJpdmF0ZUtleTtcbiAgICAgICAgcHVibGljS2V5LmRhdGEgPSBrZXlzLnB1YmxpY0tleTtcbiAgICAgICAgY29uc3QgcmVzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleSxcbiAgICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpzb25TZXJpYWxpemVyLnRvSlNPTihrZXkpO1xuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShrZXkuZGF0YSkuYnVmZmVyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3BrY3M4JyBvciAnc3BraSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBqd2sgPSBrZXlEYXRhO1xuICAgICAgICAgICAgICAgIGlmIChqd2suZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuUnNhUHJpdmF0ZUtleSB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuUnNhUHVibGljS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKG5ldyBVaW50OEFycmF5KGtleURhdGEpLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNuS2V5ID0gQXNuUGFyc2VyLnBhcnNlKGtleUluZm8ucHVibGljS2V5LCBjb3JlLmFzbjEuUnNhUHVibGljS2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKG5ldyBVaW50OEFycmF5KGtleURhdGEpLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnByaXZhdGVLZXksIGNvcmUuYXNuMS5Sc2FQcml2YXRlS2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycsICdwa2NzOCcgb3IgJ3Nwa2knXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBzaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlJTQS1QU1NcIjpcbiAgICAgICAgICAgIGNhc2UgXCJSU0FTU0EtUEtDUzEtVjFfNVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25Sc2EoYWxnb3JpdGhtLCBrZXksIGRhdGEpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlJTQS1QU1NcIjpcbiAgICAgICAgICAgIGNhc2UgXCJSU0FTU0EtUEtDUzEtVjFfNVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZlcmlmeVNTQShhbGdvcml0aG0sIGtleSwgZGF0YSwgc2lnbmF0dXJlKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlJTQS1PQUVQXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdE9BRVAoYWxnb3JpdGhtLCBrZXksIGRhdGEpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiUlNBLU9BRVBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0T0FFUChhbGdvcml0aG0sIGtleSwgZGF0YSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjExMzU0OS4xLjEuMVwiO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0ucGFyYW1ldGVycyA9IG51bGw7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGFzbktleSk7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBSc2FQcml2YXRlS2V5KCk7XG4gICAgICAgIGtleS5kYXRhID0gQnVmZmVyLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gT2JqZWN0LmFzc2lnbih7fSwgYWxnb3JpdGhtKTtcbiAgICAgICAga2V5LmFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCA9IG5ldyBVaW50OEFycmF5KGFzbktleS5wdWJsaWNFeHBvbmVudCk7XG4gICAgICAgIGtleS5hbGdvcml0aG0ubW9kdWx1c0xlbmd0aCA9IGFzbktleS5tb2R1bHVzLmJ5dGVMZW5ndGggPDwgMztcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBpbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBudWxsO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGFzbktleSk7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBSc2FQdWJsaWNLZXkoKTtcbiAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBPYmplY3QuYXNzaWduKHt9LCBhbGdvcml0aG0pO1xuICAgICAgICBrZXkuYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50ID0gbmV3IFVpbnQ4QXJyYXkoYXNuS2V5LnB1YmxpY0V4cG9uZW50KTtcbiAgICAgICAga2V5LmFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoID0gYXNuS2V5Lm1vZHVsdXMuYnl0ZUxlbmd0aCA8PCAzO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGdldENyeXB0b0FsZ29yaXRobShhbGcpIHtcbiAgICAgICAgc3dpdGNoIChhbGcuaGFzaC5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEExXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTI1NlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEEyNTZcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUlNBLVNIQTM4NFwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS01MTJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJSU0EtU0hBNTEyXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJSU0EtU0hBMy0yNTZcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTM4NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEEzLTM4NFwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQTMtNTEyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUlNBLVNIQTMtNTEyXCI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtLmhhc2g6IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBzaWduUnNhKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNyeXB0b0FsZyA9IHRoaXMuZ2V0Q3J5cHRvQWxnb3JpdGhtKGtleS5hbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBzaWduZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlU2lnbihjcnlwdG9BbGcpO1xuICAgICAgICBzaWduZXIudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgaWYgKCFrZXkucGVtKSB7XG4gICAgICAgICAgICBrZXkucGVtID0gYC0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleToga2V5LnBlbSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkgPT09IFwiUlNBLVBTU1wiKSB7XG4gICAgICAgICAgICBvcHRpb25zLnBhZGRpbmcgPSBjcnlwdG9fX2RlZmF1bHQuY29uc3RhbnRzLlJTQV9QS0NTMV9QU1NfUEFERElORztcbiAgICAgICAgICAgIG9wdGlvbnMuc2FsdExlbmd0aCA9IGFsZ29yaXRobS5zYWx0TGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNpZ25lci5zaWduKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyB2ZXJpZnlTU0EoYWxnb3JpdGhtLCBrZXksIGRhdGEsIHNpZ25hdHVyZSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSB0aGlzLmdldENyeXB0b0FsZ29yaXRobShrZXkuYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3Qgc2lnbmVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZVZlcmlmeShjcnlwdG9BbGcpO1xuICAgICAgICBzaWduZXIudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgaWYgKCFrZXkucGVtKSB7XG4gICAgICAgICAgICBrZXkucGVtID0gYC0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGtleS5wZW0sXG4gICAgICAgIH07XG4gICAgICAgIGlmIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpID09PSBcIlJTQS1QU1NcIikge1xuICAgICAgICAgICAgb3B0aW9ucy5wYWRkaW5nID0gY3J5cHRvX19kZWZhdWx0LmNvbnN0YW50cy5SU0FfUEtDUzFfUFNTX1BBRERJTkc7XG4gICAgICAgICAgICBvcHRpb25zLnNhbHRMZW5ndGggPSBhbGdvcml0aG0uc2FsdExlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvayA9IHNpZ25lci52ZXJpZnkob3B0aW9ucywgc2lnbmF0dXJlKTtcbiAgICAgICAgcmV0dXJuIG9rO1xuICAgIH1cbiAgICBzdGF0aWMgZW5jcnlwdE9BRVAoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleTogYC0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1gLFxuICAgICAgICAgICAgcGFkZGluZzogY3J5cHRvX19kZWZhdWx0LmNvbnN0YW50cy5SU0FfUEtDUzFfT0FFUF9QQURESU5HLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoYWxnb3JpdGhtLmxhYmVsKSA7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShjcnlwdG9fX2RlZmF1bHQucHVibGljRW5jcnlwdChvcHRpb25zLCBkYXRhKSkuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgZGVjcnlwdE9BRVAoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleTogYC0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLWAsXG4gICAgICAgICAgICBwYWRkaW5nOiBjcnlwdG9fX2RlZmF1bHQuY29uc3RhbnRzLlJTQV9QS0NTMV9PQUVQX1BBRERJTkcsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChhbGdvcml0aG0ubGFiZWwpIDtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGNyeXB0b19fZGVmYXVsdC5wcml2YXRlRGVjcnlwdChvcHRpb25zLCBkYXRhKSkuYnVmZmVyO1xuICAgIH1cbn1cblJzYUNyeXB0by5wdWJsaWNLZXlVc2FnZXMgPSBbXCJ2ZXJpZnlcIiwgXCJlbmNyeXB0XCIsIFwid3JhcEtleVwiXTtcblJzYUNyeXB0by5wcml2YXRlS2V5VXNhZ2VzID0gW1wic2lnblwiLCBcImRlY3J5cHRcIiwgXCJ1bndyYXBLZXlcIl07XG5cbmNsYXNzIFJzYVNzYVByb3ZpZGVyIGV4dGVuZHMgY29yZS5Sc2FTc2FQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXG4gICAgICAgICAgICBcIlNIQS0xXCIsIFwiU0hBLTI1NlwiLCBcIlNIQS0zODRcIiwgXCJTSEEtNTEyXCIsXG4gICAgICAgICAgICBcInNoYWtlMTI4XCIsIFwic2hha2UyNTZcIixcbiAgICAgICAgICAgIFwiU0hBMy0yNTZcIiwgXCJTSEEzLTM4NFwiLCBcIlNIQTMtNTEyXCJcbiAgICAgICAgXTtcbiAgICB9XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IFJzYUNyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gUnNhQ3J5cHRvLnNpZ24oYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvblZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8udmVyaWZ5KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KHNpZ25hdHVyZSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IFJzYUNyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGlmICghKGludGVybmFsS2V5IGluc3RhbmNlb2YgUnNhUHJpdmF0ZUtleSB8fCBpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVB1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBSU0EgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBSc2FQc3NQcm92aWRlciBleHRlbmRzIGNvcmUuUnNhUHNzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1xuICAgICAgICAgICAgXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiLFxuICAgICAgICAgICAgXCJzaGFrZTEyOFwiLCBcInNoYWtlMjU2XCIsXG4gICAgICAgICAgICBcIlNIQTMtMjU2XCIsIFwiU0hBMy0zODRcIiwgXCJTSEEzLTUxMlwiXG4gICAgICAgIF07XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBSc2FDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by5zaWduKGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gUnNhQ3J5cHRvLnZlcmlmeShhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBSc2FDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBpZiAoIShpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgUlNBIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgU2hhQ3J5cHRvIHtcbiAgICBzdGF0aWMgc2l6ZShhbGdvcml0aG0pIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gMTYwO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0yNTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTI1NlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAyNTY7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTM4NFwiOlxuICAgICAgICAgICAgY2FzZSBcIlNIQTMtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDM4NDtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtNTEyXCI6XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy01MTJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gNTEyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgbmFtZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgZ2V0QWxnb3JpdGhtTmFtZShhbGdvcml0aG0pIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGExXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTI1NlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNoYTI1NlwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0zODRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGEzODRcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtNTEyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2hhNTEyXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGEzLTI1NlwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQTMtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2hhMy0zODRcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTUxMlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNoYTMtNTEyXCI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVucmVjb2duaXplZCBuYW1lXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBkaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGhhc2hBbGcgPSB0aGlzLmdldEFsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgaGFzaCA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVIYXNoKGhhc2hBbGcpXG4gICAgICAgICAgICAudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGhhc2gpLmJ1ZmZlcjtcbiAgICB9XG59XG5cbmNsYXNzIFJzYU9hZXBQcm92aWRlciBleHRlbmRzIGNvcmUuUnNhT2FlcFByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgUnNhQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIC4uLmFsZ29yaXRobSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IGRhdGFWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7XG4gICAgICAgIGNvbnN0IGtleVNpemUgPSBNYXRoLmNlaWwoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPj4gMyk7XG4gICAgICAgIGNvbnN0IGhhc2hTaXplID0gU2hhQ3J5cHRvLnNpemUoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gpID4+IDM7XG4gICAgICAgIGNvbnN0IGRhdGFMZW5ndGggPSBkYXRhVmlldy5ieXRlTGVuZ3RoO1xuICAgICAgICBjb25zdCBwc0xlbmd0aCA9IGtleVNpemUgLSBkYXRhTGVuZ3RoIC0gMiAqIGhhc2hTaXplIC0gMjtcbiAgICAgICAgaWYgKGRhdGFMZW5ndGggPiBrZXlTaXplIC0gMiAqIGhhc2hTaXplIC0gMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YSB0b28gbGFyZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IG5ldyBVaW50OEFycmF5KGtleVNpemUpO1xuICAgICAgICBjb25zdCBzZWVkID0gbWVzc2FnZS5zdWJhcnJheSgxLCBoYXNoU2l6ZSArIDEpO1xuICAgICAgICBjb25zdCBkYXRhQmxvY2sgPSBtZXNzYWdlLnN1YmFycmF5KGhhc2hTaXplICsgMSk7XG4gICAgICAgIGRhdGFCbG9jay5zZXQoZGF0YVZpZXcsIGhhc2hTaXplICsgcHNMZW5ndGggKyAxKTtcbiAgICAgICAgY29uc3QgbGFiZWxIYXNoID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZUhhc2goaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gubmFtZS5yZXBsYWNlKFwiLVwiLCBcIlwiKSlcbiAgICAgICAgICAgIC51cGRhdGUoY29yZS5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGFsZ29yaXRobS5sYWJlbCB8fCBuZXcgVWludDhBcnJheSgwKSkpXG4gICAgICAgICAgICAuZGlnZXN0KCk7XG4gICAgICAgIGRhdGFCbG9jay5zZXQobGFiZWxIYXNoLCAwKTtcbiAgICAgICAgZGF0YUJsb2NrW2hhc2hTaXplICsgcHNMZW5ndGhdID0gMTtcbiAgICAgICAgY3J5cHRvX19kZWZhdWx0LnJhbmRvbUZpbGxTeW5jKHNlZWQpO1xuICAgICAgICBjb25zdCBkYXRhQmxvY2tNYXNrID0gdGhpcy5tZ2YxKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLCBzZWVkLCBkYXRhQmxvY2subGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhQmxvY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRhdGFCbG9ja1tpXSBePSBkYXRhQmxvY2tNYXNrW2ldO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlZWRNYXNrID0gdGhpcy5tZ2YxKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLCBkYXRhQmxvY2ssIHNlZWQubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzZWVkW2ldIF49IHNlZWRNYXNrW2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW50ZXJuYWxLZXkucGVtKSB7XG4gICAgICAgICAgICBpbnRlcm5hbEtleS5wZW0gPSBgLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cXG4ke2ludGVybmFsS2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwa2NzMCA9IGNyeXB0b19fZGVmYXVsdC5wdWJsaWNFbmNyeXB0KHtcbiAgICAgICAgICAgIGtleTogaW50ZXJuYWxLZXkucGVtLFxuICAgICAgICAgICAgcGFkZGluZzogY3J5cHRvX19kZWZhdWx0LmNvbnN0YW50cy5SU0FfTk9fUEFERElORyxcbiAgICAgICAgfSwgQnVmZmVyLmZyb20obWVzc2FnZSkpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkocGtjczApLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IGtleVNpemUgPSBNYXRoLmNlaWwoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPj4gMyk7XG4gICAgICAgIGNvbnN0IGhhc2hTaXplID0gU2hhQ3J5cHRvLnNpemUoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gpID4+IDM7XG4gICAgICAgIGNvbnN0IGRhdGFMZW5ndGggPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgIGlmIChkYXRhTGVuZ3RoICE9PSBrZXlTaXplKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYWQgZGF0YVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWludGVybmFsS2V5LnBlbSkge1xuICAgICAgICAgICAgaW50ZXJuYWxLZXkucGVtID0gYC0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcbiR7aW50ZXJuYWxLZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGtjczAgPSBjcnlwdG9fX2RlZmF1bHQucHJpdmF0ZURlY3J5cHQoe1xuICAgICAgICAgICAga2V5OiBpbnRlcm5hbEtleS5wZW0sXG4gICAgICAgICAgICBwYWRkaW5nOiBjcnlwdG9fX2RlZmF1bHQuY29uc3RhbnRzLlJTQV9OT19QQURESU5HLFxuICAgICAgICB9LCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgIGNvbnN0IHogPSBwa2NzMFswXTtcbiAgICAgICAgY29uc3Qgc2VlZCA9IHBrY3MwLnN1YmFycmF5KDEsIGhhc2hTaXplICsgMSk7XG4gICAgICAgIGNvbnN0IGRhdGFCbG9jayA9IHBrY3MwLnN1YmFycmF5KGhhc2hTaXplICsgMSk7XG4gICAgICAgIGlmICh6ICE9PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZWNyeXB0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWVkTWFzayA9IHRoaXMubWdmMShpbnRlcm5hbEtleS5hbGdvcml0aG0uaGFzaCwgZGF0YUJsb2NrLCBzZWVkLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VlZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc2VlZFtpXSBePSBzZWVkTWFza1tpXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhQmxvY2tNYXNrID0gdGhpcy5tZ2YxKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLCBzZWVkLCBkYXRhQmxvY2subGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhQmxvY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRhdGFCbG9ja1tpXSBePSBkYXRhQmxvY2tNYXNrW2ldO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhYmVsSGFzaCA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVIYXNoKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLm5hbWUucmVwbGFjZShcIi1cIiwgXCJcIikpXG4gICAgICAgICAgICAudXBkYXRlKGNvcmUuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShhbGdvcml0aG0ubGFiZWwgfHwgbmV3IFVpbnQ4QXJyYXkoMCkpKVxuICAgICAgICAgICAgLmRpZ2VzdCgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhhc2hTaXplOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChsYWJlbEhhc2hbaV0gIT09IGRhdGFCbG9ja1tpXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRlY3J5cHRpb24gZmFpbGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBwc0VuZCA9IGhhc2hTaXplO1xuICAgICAgICBmb3IgKDsgcHNFbmQgPCBkYXRhQmxvY2subGVuZ3RoOyBwc0VuZCsrKSB7XG4gICAgICAgICAgICBjb25zdCBwc3ogPSBkYXRhQmxvY2tbcHNFbmRdO1xuICAgICAgICAgICAgaWYgKHBzeiA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBzeiAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRlY3J5cHRpb24gZmFpbGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwc0VuZCA9PT0gZGF0YUJsb2NrLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGVjcnlwdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcGtjczAgPSBkYXRhQmxvY2suc3ViYXJyYXkocHNFbmQgKyAxKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHBrY3MwKS5idWZmZXI7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBSc2FDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBpZiAoIShpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgUlNBIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtZ2YxKGFsZ29yaXRobSwgc2VlZCwgbGVuZ3RoID0gMCkge1xuICAgICAgICBjb25zdCBoYXNoU2l6ZSA9IFNoYUNyeXB0by5zaXplKGFsZ29yaXRobSkgPj4gMztcbiAgICAgICAgY29uc3QgbWFzayA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGNvdW50ZXIgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgY29uc3QgY2h1bmtzID0gTWF0aC5jZWlsKGxlbmd0aCAvIGhhc2hTaXplKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaHVua3M7IGkrKykge1xuICAgICAgICAgICAgY291bnRlclswXSA9IGkgPj4+IDI0O1xuICAgICAgICAgICAgY291bnRlclsxXSA9IChpID4+PiAxNikgJiAyNTU7XG4gICAgICAgICAgICBjb3VudGVyWzJdID0gKGkgPj4+IDgpICYgMjU1O1xuICAgICAgICAgICAgY291bnRlclszXSA9IGkgJiAyNTU7XG4gICAgICAgICAgICBjb25zdCBzdWJtYXNrID0gbWFzay5zdWJhcnJheShpICogaGFzaFNpemUpO1xuICAgICAgICAgICAgbGV0IGNodW5rID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZUhhc2goYWxnb3JpdGhtLm5hbWUucmVwbGFjZShcIi1cIiwgXCJcIikpXG4gICAgICAgICAgICAgICAgLnVwZGF0ZShzZWVkKVxuICAgICAgICAgICAgICAgIC51cGRhdGUoY291bnRlcilcbiAgICAgICAgICAgICAgICAuZGlnZXN0KCk7XG4gICAgICAgICAgICBpZiAoY2h1bmsubGVuZ3RoID4gc3VibWFzay5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjaHVuayA9IGNodW5rLnN1YmFycmF5KDAsIHN1Ym1hc2subGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1Ym1hc2suc2V0KGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWFzaztcbiAgICB9XG59XG5cbmNsYXNzIFJzYUVzUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSU0FFUy1QS0NTMS12MV81XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHVibGljS2V5OiBbXCJlbmNyeXB0XCIsIFwid3JhcEtleVwiXSxcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IFtcImRlY3J5cHRcIiwgXCJ1bndyYXBLZXlcIl0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBSc2FDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwicHVibGljRXhwb25lbnRcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCAmJiBhbGdvcml0aG0ucHVibGljRXhwb25lbnQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInB1YmxpY0V4cG9uZW50OiBNaXNzaW5nIG9yIG5vdCBhIFVpbnQ4QXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHVibGljRXhwb25lbnQgPSBDb252ZXJ0LlRvQmFzZTY0KGFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCk7XG4gICAgICAgIGlmICghKHB1YmxpY0V4cG9uZW50ID09PSBcIkF3PT1cIiB8fCBwdWJsaWNFeHBvbmVudCA9PT0gXCJBUUFCXCIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicHVibGljRXhwb25lbnQ6IE11c3QgYmUgWzNdIG9yIFsxLDAsMV1cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcIm1vZHVsdXNMZW5ndGhcIik7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMTAyNDpcbiAgICAgICAgICAgIGNhc2UgMjA0ODpcbiAgICAgICAgICAgIGNhc2UgNDA5NjpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm1vZHVsdXNMZW5ndGg6IE11c3QgYmUgMTAyNCwgMjA0OCwgb3IgNDA5NlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMudG9DcnlwdG9PcHRpb25zKGtleSk7XG4gICAgICAgIGNvbnN0IGVuYyA9IGNyeXB0by5wdWJsaWNFbmNyeXB0KG9wdGlvbnMsIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMudG9DcnlwdG9PcHRpb25zKGtleSk7XG4gICAgICAgIGNvbnN0IGRlYyA9IGNyeXB0by5wcml2YXRlRGVjcnlwdChvcHRpb25zLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkZWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IFJzYUNyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGlmICghKGludGVybmFsS2V5IGluc3RhbmNlb2YgUnNhUHJpdmF0ZUtleSB8fCBpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVB1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBSU0EgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvQ3J5cHRvT3B0aW9ucyhrZXkpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGtleS50eXBlLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBrZXk6IGAtLS0tLUJFR0lOICR7dHlwZX0gS0VZLS0tLS1cXG4ke2dldENyeXB0b0tleShrZXkpLmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgJHt0eXBlfSBLRVktLS0tLWAsXG4gICAgICAgICAgICBwYWRkaW5nOiBjcnlwdG8uY29uc3RhbnRzLlJTQV9QS0NTMV9QQURESU5HLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuY29uc3QgbmFtZWRPSURzID0ge1xuICAgIFwiMS4yLjg0MC4xMDA0NS4zLjEuN1wiOiBcIlAtMjU2XCIsXG4gICAgXCJQLTI1NlwiOiBcIjEuMi44NDAuMTAwNDUuMy4xLjdcIixcbiAgICBcIjEuMy4xMzIuMC4zNFwiOiBcIlAtMzg0XCIsXG4gICAgXCJQLTM4NFwiOiBcIjEuMy4xMzIuMC4zNFwiLFxuICAgIFwiMS4zLjEzMi4wLjM1XCI6IFwiUC01MjFcIixcbiAgICBcIlAtNTIxXCI6IFwiMS4zLjEzMi4wLjM1XCIsXG4gICAgXCIxLjMuMTMyLjAuMTBcIjogXCJLLTI1NlwiLFxuICAgIFwiSy0yNTZcIjogXCIxLjMuMTMyLjAuMTBcIixcbiAgICBcImJyYWlucG9vbFAxNjByMVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4xXCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuMVwiOiBcImJyYWlucG9vbFAxNjByMVwiLFxuICAgIFwiYnJhaW5wb29sUDE2MHQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjJcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4yXCI6IFwiYnJhaW5wb29sUDE2MHQxXCIsXG4gICAgXCJicmFpbnBvb2xQMTkycjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuM1wiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjNcIjogXCJicmFpbnBvb2xQMTkycjFcIixcbiAgICBcImJyYWlucG9vbFAxOTJ0MVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS40XCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuNFwiOiBcImJyYWlucG9vbFAxOTJ0MVwiLFxuICAgIFwiYnJhaW5wb29sUDIyNHIxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjVcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS41XCI6IFwiYnJhaW5wb29sUDIyNHIxXCIsXG4gICAgXCJicmFpbnBvb2xQMjI0dDFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuNlwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjZcIjogXCJicmFpbnBvb2xQMjI0dDFcIixcbiAgICBcImJyYWlucG9vbFAyNTZyMVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS43XCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuN1wiOiBcImJyYWlucG9vbFAyNTZyMVwiLFxuICAgIFwiYnJhaW5wb29sUDI1NnQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjhcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS44XCI6IFwiYnJhaW5wb29sUDI1NnQxXCIsXG4gICAgXCJicmFpbnBvb2xQMzIwcjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuOVwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjlcIjogXCJicmFpbnBvb2xQMzIwcjFcIixcbiAgICBcImJyYWlucG9vbFAzMjB0MVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4xMFwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjEwXCI6IFwiYnJhaW5wb29sUDMyMHQxXCIsXG4gICAgXCJicmFpbnBvb2xQMzg0cjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTFcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4xMVwiOiBcImJyYWlucG9vbFAzODRyMVwiLFxuICAgIFwiYnJhaW5wb29sUDM4NHQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjEyXCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTJcIjogXCJicmFpbnBvb2xQMzg0dDFcIixcbiAgICBcImJyYWlucG9vbFA1MTJyMVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4xM1wiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjEzXCI6IFwiYnJhaW5wb29sUDUxMnIxXCIsXG4gICAgXCJicmFpbnBvb2xQNTEydDFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTRcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4xNFwiOiBcImJyYWlucG9vbFA1MTJ0MVwiLFxufTtcbmZ1bmN0aW9uIGdldE9pZEJ5TmFtZWRDdXJ2ZSQxKG5hbWVkQ3VydmUpIHtcbiAgICBjb25zdCBvaWQgPSBuYW1lZE9JRHNbbmFtZWRDdXJ2ZV07XG4gICAgaWYgKCFvaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBjb252ZXJ0IFdlYkNyeXB0byBuYW1lZCBjdXJ2ZSAnJHtuYW1lZEN1cnZlfScgdG8gT0lEYCk7XG4gICAgfVxuICAgIHJldHVybiBvaWQ7XG59XG5cbmNsYXNzIEVjUHJpdmF0ZUtleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInByaXZhdGVcIjtcbiAgICB9XG4gICAgZ2V0S2V5KCkge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKHRoaXMuZGF0YSwgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgcmV0dXJuIEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnByaXZhdGVLZXksIGNvcmUuYXNuMS5FY1ByaXZhdGVLZXkpO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KCk7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICBrdHk6IFwiRUNcIixcbiAgICAgICAgICAgIGNydjogdGhpcy5hbGdvcml0aG0ubmFtZWRDdXJ2ZSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCFqc29uLmNydikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBnZXQgbmFtZWQgY3VydmUgZnJvbSBKV0suIFByb3BlcnR5ICdjcnYnIGlzIHJlcXVpcmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IFwiMS4yLjg0MC4xMDA0NS4yLjFcIjtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShuZXcgY29yZS5hc24xLk9iamVjdElkZW50aWZpZXIoZ2V0T2lkQnlOYW1lZEN1cnZlJDEoanNvbi5jcnYpKSk7XG4gICAgICAgIGNvbnN0IGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oanNvbiwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5FY1ByaXZhdGVLZXkgfSk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlci5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5jbGFzcyBFY1B1YmxpY0tleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInB1YmxpY1wiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBuZXcgY29yZS5hc24xLkVjUHVibGljS2V5KGtleUluZm8ucHVibGljS2V5KTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSgpO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAga3R5OiBcIkVDXCIsXG4gICAgICAgICAgICBjcnY6IHRoaXMuYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICBrZXlfb3BzOiB0aGlzLnVzYWdlcyxcbiAgICAgICAgICAgIGV4dDogdGhpcy5leHRyYWN0YWJsZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oanNvbiwgSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSkpO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghanNvbi5jcnYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKGBDYW5ub3QgZ2V0IG5hbWVkIGN1cnZlIGZyb20gSldLLiBQcm9wZXJ0eSAnY3J2JyBpcyByZXF1aXJlZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oanNvbiwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5FY1B1YmxpY0tleSB9KTtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTAwNDUuMi4xXCI7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShuZXcgY29yZS5hc24xLk9iamVjdElkZW50aWZpZXIoZ2V0T2lkQnlOYW1lZEN1cnZlJDEoanNvbi5jcnYpKSk7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5ID0gQXNuU2VyaWFsaXplci50b0FTTihrZXkpLnZhbHVlSGV4O1xuICAgICAgICB0aGlzLmRhdGEgPSBCdWZmZXIuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuY2xhc3MgU2hhMVByb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU0hBLTFcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGEyNTZQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQS0yNTZcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGEzODRQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQS0zODRcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGE1MTJQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQS01MTJcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGEzMjU2UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJTSEEzLTI1NlwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIFNoYTMzODRQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQTMtMzg0XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgfVxuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hhQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgU2hhMzUxMlByb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU0hBMy01MTJcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBFY0NyeXB0byB7XG4gICAgc3RhdGljIGFzeW5jIGdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gbmV3IEVjUHJpdmF0ZUtleSgpO1xuICAgICAgICBwcml2YXRlS2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgcHJpdmF0ZUtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBwcml2YXRlS2V5LnVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnByaXZhdGVLZXlVc2FnZXMuaW5kZXhPZih1c2FnZSkgIT09IC0xKTtcbiAgICAgICAgY29uc3QgcHVibGljS2V5ID0gbmV3IEVjUHVibGljS2V5KCk7XG4gICAgICAgIHB1YmxpY0tleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIHB1YmxpY0tleS5leHRyYWN0YWJsZSA9IHRydWU7XG4gICAgICAgIHB1YmxpY0tleS51c2FnZXMgPSBrZXlVc2FnZXMuZmlsdGVyKCh1c2FnZSkgPT4gdGhpcy5wdWJsaWNLZXlVc2FnZXMuaW5kZXhPZih1c2FnZSkgIT09IC0xKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IGNyeXB0b19fZGVmYXVsdC5nZW5lcmF0ZUtleVBhaXJTeW5jKFwiZWNcIiwge1xuICAgICAgICAgICAgbmFtZWRDdXJ2ZTogdGhpcy5nZXRPcGVuU1NMTmFtZWRDdXJ2ZShhbGdvcml0aG0ubmFtZWRDdXJ2ZSksXG4gICAgICAgICAgICBwdWJsaWNLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNwa2lcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcml2YXRlS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJwa2NzOFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHByaXZhdGVLZXkuZGF0YSA9IGtleXMucHJpdmF0ZUtleTtcbiAgICAgICAgcHVibGljS2V5LmRhdGEgPSBrZXlzLnB1YmxpY0tleTtcbiAgICAgICAgY29uc3QgcmVzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleSxcbiAgICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY3J5cHRvQWxnID0gU2hhQ3J5cHRvLmdldEFsZ29yaXRobU5hbWUoYWxnb3JpdGhtLmhhc2gpO1xuICAgICAgICBjb25zdCBzaWduZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlU2lnbihjcnlwdG9BbGcpO1xuICAgICAgICBzaWduZXIudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgaWYgKCFrZXkucGVtKSB7XG4gICAgICAgICAgICBrZXkucGVtID0gYC0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleToga2V5LnBlbSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnbmVyLnNpZ24ob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGVjU2lnbmF0dXJlID0gQXNuUGFyc2VyLnBhcnNlKHNpZ25hdHVyZSwgY29yZS5hc24xLkVjRHNhU2lnbmF0dXJlKTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlUmF3ID0gY29yZS5FY1V0aWxzLmVuY29kZVNpZ25hdHVyZShlY1NpZ25hdHVyZSwgY29yZS5FY0N1cnZlcy5nZXQoa2V5LmFsZ29yaXRobS5uYW1lZEN1cnZlKS5zaXplKTtcbiAgICAgICAgcmV0dXJuIHNpZ25hdHVyZVJhdy5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyB2ZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSBTaGFDcnlwdG8uZ2V0QWxnb3JpdGhtTmFtZShhbGdvcml0aG0uaGFzaCk7XG4gICAgICAgIGNvbnN0IHNpZ25lciA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVWZXJpZnkoY3J5cHRvQWxnKTtcbiAgICAgICAgc2lnbmVyLnVwZGF0ZShCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgIGlmICgha2V5LnBlbSkge1xuICAgICAgICAgICAga2V5LnBlbSA9IGAtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAga2V5OiBrZXkucGVtLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBlY1NpZ25hdHVyZSA9IG5ldyBjb3JlLmFzbjEuRWNEc2FTaWduYXR1cmUoKTtcbiAgICAgICAgY29uc3QgbmFtZWRDdXJ2ZSA9IGNvcmUuRWNDdXJ2ZXMuZ2V0KGtleS5hbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZVBvaW50ID0gY29yZS5FY1V0aWxzLmRlY29kZVNpZ25hdHVyZShzaWduYXR1cmUsIG5hbWVkQ3VydmUuc2l6ZSk7XG4gICAgICAgIGVjU2lnbmF0dXJlLnIgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihzaWduYXR1cmVQb2ludC5yKTtcbiAgICAgICAgZWNTaWduYXR1cmUucyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHNpZ25hdHVyZVBvaW50LnMpO1xuICAgICAgICBjb25zdCBlY1NpZ25hdHVyZVJhdyA9IEJ1ZmZlci5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGVjU2lnbmF0dXJlKSk7XG4gICAgICAgIGNvbnN0IG9rID0gc2lnbmVyLnZlcmlmeShvcHRpb25zLCBlY1NpZ25hdHVyZVJhdyk7XG4gICAgICAgIHJldHVybiBvaztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlcml2ZUJpdHMoYWxnb3JpdGhtLCBiYXNlS2V5LCBsZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY3J5cHRvQWxnID0gdGhpcy5nZXRPcGVuU1NMTmFtZWRDdXJ2ZShiYXNlS2V5LmFsZ29yaXRobS5uYW1lZEN1cnZlKTtcbiAgICAgICAgY29uc3QgZWNkaCA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVFQ0RIKGNyeXB0b0FsZyk7XG4gICAgICAgIGNvbnN0IGFzblByaXZhdGVLZXkgPSBBc25QYXJzZXIucGFyc2UoYmFzZUtleS5kYXRhLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICBjb25zdCBhc25FY1ByaXZhdGVLZXkgPSBBc25QYXJzZXIucGFyc2UoYXNuUHJpdmF0ZUtleS5wcml2YXRlS2V5LCBjb3JlLmFzbjEuRWNQcml2YXRlS2V5KTtcbiAgICAgICAgZWNkaC5zZXRQcml2YXRlS2V5KEJ1ZmZlci5mcm9tKGFzbkVjUHJpdmF0ZUtleS5wcml2YXRlS2V5KSk7XG4gICAgICAgIGNvbnN0IGFzblB1YmxpY0tleSA9IEFzblBhcnNlci5wYXJzZShhbGdvcml0aG0ucHVibGljLmRhdGEsIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgY29uc3QgYml0cyA9IGVjZGguY29tcHV0ZVNlY3JldChCdWZmZXIuZnJvbShhc25QdWJsaWNLZXkucHVibGljS2V5KSk7XG4gICAgICAgIGlmIChsZW5ndGggPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBiaXRzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShiaXRzKS5idWZmZXIuc2xpY2UoMCwgbGVuZ3RoID4+IDMpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSk7XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGtleS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwdWJsaWNLZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKGtleS5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1YmxpY0tleUluZm8ucHVibGljS2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3JhdycsIHBrY3M4JyBvciAnc3BraSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBqd2sgPSBrZXlEYXRhO1xuICAgICAgICAgICAgICAgIGlmIChqd2suZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuRWNQcml2YXRlS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oa2V5RGF0YSwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5FY1B1YmxpY0tleSB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBuZXcgY29yZS5hc24xLkVjUHVibGljS2V5KGtleURhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFB1YmxpY0tleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShuZXcgVWludDhBcnJheShrZXlEYXRhKSwgY29yZS5hc24xLlB1YmxpY0tleUluZm8pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IG5ldyBjb3JlLmFzbjEuRWNQdWJsaWNLZXkoa2V5SW5mby5wdWJsaWNLZXkpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0S2V5UGFyYW1ldGVycyhrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5wYXJhbWV0ZXJzLCBhbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShuZXcgVWludDhBcnJheShrZXlEYXRhKSwgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wcml2YXRlS2V5LCBjb3JlLmFzbjEuRWNQcml2YXRlS2V5KTtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydEtleVBhcmFtZXRlcnMoa2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMsIGFsZ29yaXRobS5uYW1lZEN1cnZlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycsICdyYXcnLCAncGtjczgnIG9yICdzcGtpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXNzZXJ0S2V5UGFyYW1ldGVycyhwYXJhbWV0ZXJzLCBuYW1lZEN1cnZlKSB7XG4gICAgICAgIGlmICghcGFyYW1ldGVycykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuQ3J5cHRvRXJyb3IoXCJLZXkgaW5mbyBkb2Vzbid0IGhhdmUgcmVxdWlyZWQgcGFyYW1ldGVyc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmFtZWRDdXJ2ZUlkZW50aWZpZXIgPSBcIlwiO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmFtZWRDdXJ2ZUlkZW50aWZpZXIgPSBBc25QYXJzZXIucGFyc2UocGFyYW1ldGVycywgY29yZS5hc24xLk9iamVjdElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5DcnlwdG9FcnJvcihcIkNhbm5vdCByZWFkIGtleSBpbmZvIHBhcmFtZXRlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldE9pZEJ5TmFtZWRDdXJ2ZSQxKG5hbWVkQ3VydmUpICE9PSBuYW1lZEN1cnZlSWRlbnRpZmllcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuQ3J5cHRvRXJyb3IoXCJLZXkgaW5mbyBwYXJhbWV0ZXIgZG9lc24ndCBtYXRjaCB0byBuYW1lZCBjdXJ2ZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjEwMDQ1LjIuMVwiO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0ucGFyYW1ldGVycyA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKG5ldyBjb3JlLmFzbjEuT2JqZWN0SWRlbnRpZmllcihnZXRPaWRCeU5hbWVkQ3VydmUkMShhbGdvcml0aG0ubmFtZWRDdXJ2ZSkpKTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5ID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUoYXNuS2V5KTtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEVjUHJpdmF0ZUtleSgpO1xuICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlci5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IE9iamVjdC5hc3NpZ24oe30sIGFsZ29yaXRobSk7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlB1YmxpY0tleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjEwMDQ1LjIuMVwiO1xuICAgICAgICBjb25zdCBuYW1lZEN1cnZlID0gZ2V0T2lkQnlOYW1lZEN1cnZlJDEoYWxnb3JpdGhtLm5hbWVkQ3VydmUpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5wYXJhbWV0ZXJzID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUobmV3IGNvcmUuYXNuMS5PYmplY3RJZGVudGlmaWVyKG5hbWVkQ3VydmUpKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXkgPSBhc25LZXkudmFsdWU7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBFY1B1YmxpY0tleSgpO1xuICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlci5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IE9iamVjdC5hc3NpZ24oe30sIGFsZ29yaXRobSk7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0T3BlblNTTE5hbWVkQ3VydmUoY3VydmUpIHtcbiAgICAgICAgc3dpdGNoIChjdXJ2ZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiUC0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJwcmltZTI1NnYxXCI7XG4gICAgICAgICAgICBjYXNlIFwiSy0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzZWNwMjU2azFcIjtcbiAgICAgICAgICAgIGNhc2UgXCJQLTM4NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNlY3AzODRyMVwiO1xuICAgICAgICAgICAgY2FzZSBcIlAtNTIxXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2VjcDUyMXIxXCI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBjdXJ2ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkVjQ3J5cHRvLnB1YmxpY0tleVVzYWdlcyA9IFtcInZlcmlmeVwiXTtcbkVjQ3J5cHRvLnByaXZhdGVLZXlVc2FnZXMgPSBbXCJzaWduXCIsIFwiZGVyaXZlS2V5XCIsIFwiZGVyaXZlQml0c1wiXTtcblxuY2xhc3MgRWNkc2FQcm92aWRlciBleHRlbmRzIGNvcmUuRWNkc2FQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZWRDdXJ2ZXMgPSBjb3JlLkVjQ3VydmVzLm5hbWVzO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1xuICAgICAgICAgICAgXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiLFxuICAgICAgICAgICAgXCJzaGFrZTEyOFwiLCBcInNoYWtlMjU2XCIsXG4gICAgICAgICAgICBcIlNIQTMtMjU2XCIsIFwiU0hBMy0zODRcIiwgXCJTSEEzLTUxMlwiXG4gICAgICAgIF07XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBFY0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRWNDcnlwdG8uc2lnbihhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEVjQ3J5cHRvLnZlcmlmeShhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBFY0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEVjQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCEoaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBFY1ByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBFY1B1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBFQyBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEVjZGhQcm92aWRlciBleHRlbmRzIGNvcmUuRWNkaFByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lZEN1cnZlcyA9IGNvcmUuRWNDdXJ2ZXMubmFtZXM7XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBFY0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBFY0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEVjQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCEoaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBFY1ByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBFY1B1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBFQyBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgb25EZXJpdmVCaXRzKGFsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGJpdHMgPSBhd2FpdCBFY0NyeXB0by5kZXJpdmVCaXRzKHsgLi4uYWxnb3JpdGhtLCBwdWJsaWM6IGdldENyeXB0b0tleShhbGdvcml0aG0ucHVibGljKSB9LCBnZXRDcnlwdG9LZXkoYmFzZUtleSksIGxlbmd0aCk7XG4gICAgICAgIHJldHVybiBiaXRzO1xuICAgIH1cbn1cblxuY29uc3QgZWRPSURzID0ge1xuICAgIFtjb3JlLmFzbjEuaWRFZDQ0OF06IFwiRWQ0NDhcIixcbiAgICBcImVkNDQ4XCI6IGNvcmUuYXNuMS5pZEVkNDQ4LFxuICAgIFtjb3JlLmFzbjEuaWRYNDQ4XTogXCJYNDQ4XCIsXG4gICAgXCJ4NDQ4XCI6IGNvcmUuYXNuMS5pZFg0NDgsXG4gICAgW2NvcmUuYXNuMS5pZEVkMjU1MTldOiBcIkVkMjU1MTlcIixcbiAgICBcImVkMjU1MTlcIjogY29yZS5hc24xLmlkRWQyNTUxOSxcbiAgICBbY29yZS5hc24xLmlkWDI1NTE5XTogXCJYMjU1MTlcIixcbiAgICBcIngyNTUxOVwiOiBjb3JlLmFzbjEuaWRYMjU1MTksXG59O1xuZnVuY3Rpb24gZ2V0T2lkQnlOYW1lZEN1cnZlKG5hbWVkQ3VydmUpIHtcbiAgICBjb25zdCBvaWQgPSBlZE9JRHNbbmFtZWRDdXJ2ZS50b0xvd2VyQ2FzZSgpXTtcbiAgICBpZiAoIW9pZCkge1xuICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihgQ2Fubm90IGNvbnZlcnQgV2ViQ3J5cHRvIG5hbWVkIGN1cnZlICcke25hbWVkQ3VydmV9JyB0byBPSURgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9pZDtcbn1cblxuY2xhc3MgRWRQcml2YXRlS2V5IGV4dGVuZHMgQXN5bW1ldHJpY0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IFwicHJpdmF0ZVwiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICByZXR1cm4gQXNuUGFyc2VyLnBhcnNlKGtleUluZm8ucHJpdmF0ZUtleSwgY29yZS5hc24xLkN1cnZlUHJpdmF0ZUtleSk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGt0eTogXCJPS1BcIixcbiAgICAgICAgICAgIGNydjogdGhpcy5hbGdvcml0aG0ubmFtZWRDdXJ2ZSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCFqc29uLmNydikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBnZXQgbmFtZWQgY3VydmUgZnJvbSBKV0suIFByb3BlcnR5ICdjcnYnIGlzIHJlcXVpcmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IGdldE9pZEJ5TmFtZWRDdXJ2ZShqc29uLmNydik7XG4gICAgICAgIGNvbnN0IGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oanNvbiwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5DdXJ2ZVByaXZhdGVLZXkgfSk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlci5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5jbGFzcyBFZFB1YmxpY0tleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInB1YmxpY1wiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBrZXlJbmZvLnB1YmxpY0tleTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSgpO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAga3R5OiBcIk9LUFwiLFxuICAgICAgICAgICAgY3J2OiB0aGlzLmFsZ29yaXRobS5uYW1lZEN1cnZlLFxuICAgICAgICAgICAga2V5X29wczogdGhpcy51c2FnZXMsXG4gICAgICAgICAgICBleHQ6IHRoaXMuZXh0cmFjdGFibGUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGpzb24sIHtcbiAgICAgICAgICAgIHg6IENvbnZlcnQuVG9CYXNlNjRVcmwoa2V5KVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBpZiAoIWpzb24uY3J2KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihgQ2Fubm90IGdldCBuYW1lZCBjdXJ2ZSBmcm9tIEpXSy4gUHJvcGVydHkgJ2NydicgaXMgcmVxdWlyZWRgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWpzb24ueCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBnZXQgcHJvcGVydHkgZnJvbSBKV0suIFByb3BlcnR5ICd4JyBpcyByZXF1aXJlZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlB1YmxpY0tleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gZ2V0T2lkQnlOYW1lZEN1cnZlKGpzb24uY3J2KTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXkgPSBDb252ZXJ0LkZyb21CYXNlNjRVcmwoanNvbi54KTtcbiAgICAgICAgdGhpcy5kYXRhID0gQnVmZmVyLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmNsYXNzIEVkQ3J5cHRvIHtcbiAgICBzdGF0aWMgYXN5bmMgZ2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBuZXcgRWRQcml2YXRlS2V5KCk7XG4gICAgICAgIHByaXZhdGVLZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBwcml2YXRlS2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIHByaXZhdGVLZXkudXNhZ2VzID0ga2V5VXNhZ2VzLmZpbHRlcigodXNhZ2UpID0+IHRoaXMucHJpdmF0ZUtleVVzYWdlcy5pbmRleE9mKHVzYWdlKSAhPT0gLTEpO1xuICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSBuZXcgRWRQdWJsaWNLZXkoKTtcbiAgICAgICAgcHVibGljS2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgcHVibGljS2V5LmV4dHJhY3RhYmxlID0gdHJ1ZTtcbiAgICAgICAgcHVibGljS2V5LnVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnB1YmxpY0tleVVzYWdlcy5pbmRleE9mKHVzYWdlKSAhPT0gLTEpO1xuICAgICAgICBjb25zdCB0eXBlID0gYWxnb3JpdGhtLm5hbWVkQ3VydmUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IGNyeXB0b19fZGVmYXVsdC5nZW5lcmF0ZUtleVBhaXJTeW5jKHR5cGUsIHtcbiAgICAgICAgICAgIHB1YmxpY0tleUVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3BraVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByaXZhdGVLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInBrY3M4XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcHJpdmF0ZUtleS5kYXRhID0ga2V5cy5wcml2YXRlS2V5O1xuICAgICAgICBwdWJsaWNLZXkuZGF0YSA9IGtleXMucHVibGljS2V5O1xuICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5LFxuICAgICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgc2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBpZiAoIWtleS5wZW0pIHtcbiAgICAgICAgICAgIGtleS5wZW0gPSBgLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAga2V5OiBrZXkucGVtLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBjcnlwdG9fX2RlZmF1bHQuc2lnbihudWxsLCBCdWZmZXIuZnJvbShkYXRhKSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBjb3JlLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHNpZ25hdHVyZSk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyB2ZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBpZiAoIWtleS5wZW0pIHtcbiAgICAgICAgICAgIGtleS5wZW0gPSBgLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cXG4ke2tleS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleToga2V5LnBlbSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb2sgPSBjcnlwdG9fX2RlZmF1bHQudmVyaWZ5KG51bGwsIEJ1ZmZlci5mcm9tKGRhdGEpLCBvcHRpb25zLCBCdWZmZXIuZnJvbShzaWduYXR1cmUpKTtcbiAgICAgICAgcmV0dXJuIG9rO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlUHVibGljS2V5KHtcbiAgICAgICAgICAgIGtleTogYWxnb3JpdGhtLnB1YmxpYy5kYXRhLFxuICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgdHlwZTogXCJzcGtpXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZVByaXZhdGVLZXkoe1xuICAgICAgICAgICAga2V5OiBiYXNlS2V5LmRhdGEsXG4gICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICB0eXBlOiBcInBrY3M4XCIsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBiaXRzID0gY3J5cHRvX19kZWZhdWx0LmRpZmZpZUhlbGxtYW4oe1xuICAgICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICAgICAgcHJpdmF0ZUtleSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShiaXRzKS5idWZmZXIuc2xpY2UoMCwgbGVuZ3RoID4+IDMpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSk7XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGtleS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwdWJsaWNLZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKGtleS5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1YmxpY0tleUluZm8ucHVibGljS2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3JhdycsIHBrY3M4JyBvciAnc3BraSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBqd2sgPSBrZXlEYXRhO1xuICAgICAgICAgICAgICAgIGlmIChqd2suZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuQ3VydmVQcml2YXRlS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghandrLngpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXlEYXRhOiBDYW5ub3QgZ2V0IHJlcXVpcmVkICd4JyBmaWxlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoQ29udmVydC5Gcm9tQmFzZTY0VXJsKGp3ay54KSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoa2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKG5ldyBVaW50OEFycmF5KGtleURhdGEpLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGtleUluZm8ucHVibGljS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKG5ldyBVaW50OEFycmF5KGtleURhdGEpLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnByaXZhdGVLZXksIGNvcmUuYXNuMS5DdXJ2ZVByaXZhdGVLZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFByaXZhdGVLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3JhdycsICdwa2NzOCcgb3IgJ3Nwa2knXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBpbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBFZFByaXZhdGVLZXkoKTtcbiAgICAgICAga2V5LmZyb21KU09OKHtcbiAgICAgICAgICAgIGNydjogYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICBkOiBDb252ZXJ0LlRvQmFzZTY0VXJsKGFzbktleS5kKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBPYmplY3QuYXNzaWduKHt9LCBhbGdvcml0aG0pO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydFB1YmxpY0tleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgRWRQdWJsaWNLZXkoKTtcbiAgICAgICAga2V5LmZyb21KU09OKHtcbiAgICAgICAgICAgIGNydjogYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICB4OiBDb252ZXJ0LlRvQmFzZTY0VXJsKGFzbktleSksXG4gICAgICAgIH0pO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gT2JqZWN0LmFzc2lnbih7fSwgYWxnb3JpdGhtKTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxufVxuRWRDcnlwdG8ucHVibGljS2V5VXNhZ2VzID0gW1widmVyaWZ5XCJdO1xuRWRDcnlwdG8ucHJpdmF0ZUtleVVzYWdlcyA9IFtcInNpZ25cIiwgXCJkZXJpdmVLZXlcIiwgXCJkZXJpdmVCaXRzXCJdO1xuXG5jbGFzcyBFZERzYVByb3ZpZGVyIGV4dGVuZHMgY29yZS5FZERzYVByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgRWRDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbmFtZWRDdXJ2ZTogYWxnb3JpdGhtLm5hbWVkQ3VydmUucmVwbGFjZSgvXmVkL2ksIFwiRWRcIiksXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRWRDcnlwdG8uc2lnbihhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEVkQ3J5cHRvLnZlcmlmeShhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBFZENyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEVkQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG59XG5cbmNsYXNzIEVjZGhFc1Byb3ZpZGVyIGV4dGVuZHMgY29yZS5FY2RoRXNQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IEVkQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIG5hbWVkQ3VydmU6IGFsZ29yaXRobS5uYW1lZEN1cnZlLnRvVXBwZXJDYXNlKCksXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBiaXRzID0gYXdhaXQgRWRDcnlwdG8uZGVyaXZlQml0cyh7IC4uLmFsZ29yaXRobSwgcHVibGljOiBnZXRDcnlwdG9LZXkoYWxnb3JpdGhtLnB1YmxpYykgfSwgZ2V0Q3J5cHRvS2V5KGJhc2VLZXkpLCBsZW5ndGgpO1xuICAgICAgICByZXR1cm4gYml0cztcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEVkQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgRWRDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbn1cblxuY2xhc3MgUGJrZGZDcnlwdG9LZXkgZXh0ZW5kcyBDcnlwdG9LZXkge1xufVxuXG5jbGFzcyBQYmtkZjJQcm92aWRlciBleHRlbmRzIGNvcmUuUGJrZGYyUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2FsdCA9IGNvcmUuQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoYWxnb3JpdGhtLnNhbHQpO1xuICAgICAgICAgICAgY29uc3QgaGFzaCA9IGFsZ29yaXRobS5oYXNoLm5hbWUucmVwbGFjZShcIi1cIiwgXCJcIik7XG4gICAgICAgICAgICBjcnlwdG9fX2RlZmF1bHQucGJrZGYyKGdldENyeXB0b0tleShiYXNlS2V5KS5kYXRhLCBCdWZmZXIuZnJvbShzYWx0KSwgYWxnb3JpdGhtLml0ZXJhdGlvbnMsIGxlbmd0aCA+PiAzLCBoYXNoLCAoZXJyLCBkZXJpdmVkQml0cykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBVaW50OEFycmF5KGRlcml2ZWRCaXRzKS5idWZmZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJyYXdcIikge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gbmV3IFBia2RmQ3J5cHRvS2V5KCk7XG4gICAgICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlci5mcm9tKGtleURhdGEpO1xuICAgICAgICAgICAga2V5LmFsZ29yaXRobSA9IHsgbmFtZTogdGhpcy5uYW1lIH07XG4gICAgICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ3JhdydcIik7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgUGJrZGZDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgUEJLREYgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBIbWFjQ3J5cHRvS2V5IGV4dGVuZHMgQ3J5cHRvS2V5IHtcbiAgICBnZXQgYWxnKCkge1xuICAgICAgICBjb25zdCBoYXNoID0gdGhpcy5hbGdvcml0aG0uaGFzaC5uYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBgSFMke2hhc2gucmVwbGFjZShcIlNIQS1cIiwgXCJcIil9YDtcbiAgICB9XG4gICAgc2V0IGFsZyh2YWx1ZSkge1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJrXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybENvbnZlcnRlciB9KVxuXSwgSG1hY0NyeXB0b0tleS5wcm90b3R5cGUsIFwiZGF0YVwiLCB2b2lkIDApO1xuXG5jbGFzcyBIbWFjUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkhtYWNQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gKGFsZ29yaXRobS5sZW5ndGggfHwgdGhpcy5nZXREZWZhdWx0TGVuZ3RoKGFsZ29yaXRobS5oYXNoLm5hbWUpKSA+PiAzIDw8IDM7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBIbWFjQ3J5cHRvS2V5KCk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSB7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH07XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICBrZXkuZGF0YSA9IGNyeXB0b19fZGVmYXVsdC5yYW5kb21CeXRlcyhsZW5ndGggPj4gMyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25TaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNyeXB0b0FsZyA9IFNoYUNyeXB0by5nZXRBbGdvcml0aG1OYW1lKGtleS5hbGdvcml0aG0uaGFzaCk7XG4gICAgICAgIGNvbnN0IGhtYWMgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlSG1hYyhjcnlwdG9BbGcsIGdldENyeXB0b0tleShrZXkpLmRhdGEpXG4gICAgICAgICAgICAudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGhtYWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSBTaGFDcnlwdG8uZ2V0QWxnb3JpdGhtTmFtZShrZXkuYWxnb3JpdGhtLmhhc2gpO1xuICAgICAgICBjb25zdCBobWFjID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZUhtYWMoY3J5cHRvQWxnLCBnZXRDcnlwdG9LZXkoa2V5KS5kYXRhKVxuICAgICAgICAgICAgLnVwZGF0ZShCdWZmZXIuZnJvbShkYXRhKSkuZGlnZXN0KCk7XG4gICAgICAgIHJldHVybiBobWFjLmNvbXBhcmUoQnVmZmVyLmZyb20oc2lnbmF0dXJlKSkgPT09IDA7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGxldCBrZXk7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICBrZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBIbWFjQ3J5cHRvS2V5IH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIGtleSA9IG5ldyBIbWFjQ3J5cHRvS2V5KCk7XG4gICAgICAgICAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIuZnJvbShrZXlEYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycgb3IgJ3JhdydcIik7XG4gICAgICAgIH1cbiAgICAgICAga2V5LmFsZ29yaXRobSA9IHtcbiAgICAgICAgICAgIGhhc2g6IHsgbmFtZTogYWxnb3JpdGhtLmhhc2gubmFtZSB9LFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBrZXkuZGF0YS5sZW5ndGggPDwgMyxcbiAgICAgICAgfTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBKc29uU2VyaWFsaXplci50b0pTT04oZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShnZXRDcnlwdG9LZXkoa2V5KS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snIG9yICdyYXcnXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgSG1hY0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBITUFDIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgSGtkZkNyeXB0b0tleSBleHRlbmRzIENyeXB0b0tleSB7XG59XG5cbmNsYXNzIEhrZGZQcm92aWRlciBleHRlbmRzIGNvcmUuSGtkZlByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBpZiAoZm9ybWF0LnRvTG93ZXJDYXNlKCkgIT09IFwicmF3XCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEhrZGZDcnlwdG9LZXkoKTtcbiAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIuZnJvbShrZXlEYXRhKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IHsgbmFtZTogdGhpcy5uYW1lIH07XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhwYXJhbXMsIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBoYXNoID0gcGFyYW1zLmhhc2gubmFtZS5yZXBsYWNlKFwiLVwiLCBcIlwiKTtcbiAgICAgICAgY29uc3QgaGFzaExlbmd0aCA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVIYXNoKGhhc2gpLmRpZ2VzdCgpLmxlbmd0aDtcbiAgICAgICAgY29uc3QgYnl0ZUxlbmd0aCA9IGxlbmd0aCAvIDg7XG4gICAgICAgIGNvbnN0IGluZm8gPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIkMS50b1VpbnQ4QXJyYXkocGFyYW1zLmluZm8pO1xuICAgICAgICBjb25zdCBQUksgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlSG1hYyhoYXNoLCBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIkMS50b1VpbnQ4QXJyYXkocGFyYW1zLnNhbHQpKVxuICAgICAgICAgICAgLnVwZGF0ZShCdWZmZXJTb3VyY2VDb252ZXJ0ZXIkMS50b1VpbnQ4QXJyYXkoZ2V0Q3J5cHRvS2V5KGJhc2VLZXkpLmRhdGEpKVxuICAgICAgICAgICAgLmRpZ2VzdCgpO1xuICAgICAgICBjb25zdCBibG9ja3MgPSBbQnVmZmVyLmFsbG9jKDApXTtcbiAgICAgICAgY29uc3QgYmxvY2tDb3VudCA9IE1hdGguY2VpbChieXRlTGVuZ3RoIC8gaGFzaExlbmd0aCkgKyAxO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGJsb2NrQ291bnQ7ICsraSkge1xuICAgICAgICAgICAgYmxvY2tzLnB1c2goY3J5cHRvX19kZWZhdWx0LmNyZWF0ZUhtYWMoaGFzaCwgUFJLKVxuICAgICAgICAgICAgICAgIC51cGRhdGUoQnVmZmVyLmNvbmNhdChbYmxvY2tzW2kgLSAxXSwgaW5mbywgQnVmZmVyLmZyb20oW2ldKV0pKVxuICAgICAgICAgICAgICAgIC5kaWdlc3QoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYmxvY2tzKS5zbGljZSgwLCBieXRlTGVuZ3RoKTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBIa2RmQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IEhLREYgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBTaGFrZUNyeXB0byB7XG4gICAgc3RhdGljIGRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgY29uc3QgaGFzaCA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVIYXNoKGFsZ29yaXRobS5uYW1lLnRvTG93ZXJDYXNlKCksIHsgb3V0cHV0TGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoIH0pXG4gICAgICAgICAgICAudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGhhc2gpLmJ1ZmZlcjtcbiAgICB9XG59XG5cbmNsYXNzIFNoYWtlMTI4UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlNoYWtlMTI4UHJvdmlkZXIge1xuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hha2VDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGFrZTI1NlByb3ZpZGVyIGV4dGVuZHMgY29yZS5TaGFrZTI1NlByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYWtlQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgU3VidGxlQ3J5cHRvIGV4dGVuZHMgY29yZS5TdWJ0bGVDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzQ2JjUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzQ3RyUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzR2NtUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzQ21hY1Byb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEFlc0t3UHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzRWNiUHJvdmlkZXIoKSk7XG4gICAgICAgIGNvbnN0IGNpcGhlcnMgPSBjcnlwdG8uZ2V0Q2lwaGVycygpO1xuICAgICAgICBpZiAoY2lwaGVycy5pbmNsdWRlcyhcImRlcy1jYmNcIikpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgRGVzQ2JjUHJvdmlkZXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBEZXNFZGUzQ2JjUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUnNhU3NhUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUnNhUHNzUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUnNhT2FlcFByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFJzYUVzUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgRWNkc2FQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFY2RoUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hhMVByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTI1NlByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTM4NFByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTUxMlByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFBia2RmMlByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEhtYWNQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBIa2RmUHJvdmlkZXIoKSk7XG4gICAgICAgIGNvbnN0IG5vZGVNYWpvclZlcnNpb24gPSAoX2EgPSAvXnYoXFxkKykvLmV4ZWMocHJvY2Vzcy52ZXJzaW9uKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzFdO1xuICAgICAgICBpZiAobm9kZU1ham9yVmVyc2lvbiAmJiBwYXJzZUludChub2RlTWFqb3JWZXJzaW9uLCAxMCkgPj0gMTIpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hha2UxMjhQcm92aWRlcigpKTtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hha2UyNTZQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoYXNoZXMgPSBjcnlwdG8uZ2V0SGFzaGVzKCk7XG4gICAgICAgIGlmIChoYXNoZXMuaW5jbHVkZXMoXCJzaGEzLTI1NlwiKSkge1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBTaGEzMjU2UHJvdmlkZXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc2hlcy5pbmNsdWRlcyhcInNoYTMtMzg0XCIpKSB7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTMzODRQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzaGVzLmluY2x1ZGVzKFwic2hhMy01MTJcIikpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hhMzUxMlByb3ZpZGVyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlTWFqb3JWZXJzaW9uICYmIHBhcnNlSW50KG5vZGVNYWpvclZlcnNpb24sIDEwKSA+PSAxNCkge1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFZERzYVByb3ZpZGVyKCkpO1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFY2RoRXNQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQ3J5cHRvIGV4dGVuZHMgY29yZS5DcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnN1YnRsZSA9IG5ldyBTdWJ0bGVDcnlwdG8oKTtcbiAgICB9XG4gICAgZ2V0UmFuZG9tVmFsdWVzKGFycmF5KSB7XG4gICAgICAgIGlmICghQXJyYXlCdWZmZXIuaXNWaWV3KGFycmF5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdnZXRSYW5kb21WYWx1ZXMnIG9uICdDcnlwdG8nOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnQXJyYXlCdWZmZXJWaWV3J1wiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShhcnJheS5idWZmZXIsIGFycmF5LmJ5dGVPZmZzZXQsIGFycmF5LmJ5dGVMZW5ndGgpO1xuICAgICAgICBjcnlwdG9fX2RlZmF1bHQucmFuZG9tRmlsbFN5bmMoYnVmZmVyKTtcbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cbn1cblxuZXhwb3J0IHsgQ3J5cHRvIH07XG4iLCAiZXhwb3J0IHZhciB0b3AgPSAndG9wJztcbmV4cG9ydCB2YXIgYm90dG9tID0gJ2JvdHRvbSc7XG5leHBvcnQgdmFyIHJpZ2h0ID0gJ3JpZ2h0JztcbmV4cG9ydCB2YXIgbGVmdCA9ICdsZWZ0JztcbmV4cG9ydCB2YXIgYXV0byA9ICdhdXRvJztcbmV4cG9ydCB2YXIgYmFzZVBsYWNlbWVudHMgPSBbdG9wLCBib3R0b20sIHJpZ2h0LCBsZWZ0XTtcbmV4cG9ydCB2YXIgc3RhcnQgPSAnc3RhcnQnO1xuZXhwb3J0IHZhciBlbmQgPSAnZW5kJztcbmV4cG9ydCB2YXIgY2xpcHBpbmdQYXJlbnRzID0gJ2NsaXBwaW5nUGFyZW50cyc7XG5leHBvcnQgdmFyIHZpZXdwb3J0ID0gJ3ZpZXdwb3J0JztcbmV4cG9ydCB2YXIgcG9wcGVyID0gJ3BvcHBlcic7XG5leHBvcnQgdmFyIHJlZmVyZW5jZSA9ICdyZWZlcmVuY2UnO1xuZXhwb3J0IHZhciB2YXJpYXRpb25QbGFjZW1lbnRzID0gLyojX19QVVJFX18qL2Jhc2VQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGFjYy5jb25jYXQoW3BsYWNlbWVudCArIFwiLVwiICsgc3RhcnQsIHBsYWNlbWVudCArIFwiLVwiICsgZW5kXSk7XG59LCBbXSk7XG5leHBvcnQgdmFyIHBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovW10uY29uY2F0KGJhc2VQbGFjZW1lbnRzLCBbYXV0b10pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGFjYy5jb25jYXQoW3BsYWNlbWVudCwgcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTsgLy8gbW9kaWZpZXJzIHRoYXQgbmVlZCB0byByZWFkIHRoZSBET01cblxuZXhwb3J0IHZhciBiZWZvcmVSZWFkID0gJ2JlZm9yZVJlYWQnO1xuZXhwb3J0IHZhciByZWFkID0gJ3JlYWQnO1xuZXhwb3J0IHZhciBhZnRlclJlYWQgPSAnYWZ0ZXJSZWFkJzsgLy8gcHVyZS1sb2dpYyBtb2RpZmllcnNcblxuZXhwb3J0IHZhciBiZWZvcmVNYWluID0gJ2JlZm9yZU1haW4nO1xuZXhwb3J0IHZhciBtYWluID0gJ21haW4nO1xuZXhwb3J0IHZhciBhZnRlck1haW4gPSAnYWZ0ZXJNYWluJzsgLy8gbW9kaWZpZXIgd2l0aCB0aGUgcHVycG9zZSB0byB3cml0ZSB0byB0aGUgRE9NIChvciB3cml0ZSBpbnRvIGEgZnJhbWV3b3JrIHN0YXRlKVxuXG5leHBvcnQgdmFyIGJlZm9yZVdyaXRlID0gJ2JlZm9yZVdyaXRlJztcbmV4cG9ydCB2YXIgd3JpdGUgPSAnd3JpdGUnO1xuZXhwb3J0IHZhciBhZnRlcldyaXRlID0gJ2FmdGVyV3JpdGUnO1xuZXhwb3J0IHZhciBtb2RpZmllclBoYXNlcyA9IFtiZWZvcmVSZWFkLCByZWFkLCBhZnRlclJlYWQsIGJlZm9yZU1haW4sIG1haW4sIGFmdGVyTWFpbiwgYmVmb3JlV3JpdGUsIHdyaXRlLCBhZnRlcldyaXRlXTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZU5hbWUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudCA/IChlbGVtZW50Lm5vZGVOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93KG5vZGUpIHtcbiAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICBpZiAobm9kZS50b1N0cmluZygpICE9PSAnW29iamVjdCBXaW5kb3ddJykge1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50O1xuICAgIHJldHVybiBvd25lckRvY3VtZW50ID8gb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cgOiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn0iLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcblxuZnVuY3Rpb24gaXNFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuSFRNTEVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzU2hhZG93Um9vdChub2RlKSB7XG4gIC8vIElFIDExIGhhcyBubyBTaGFkb3dSb290XG4gIGlmICh0eXBlb2YgU2hhZG93Um9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5TaGFkb3dSb290O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q7XG59XG5cbmV4cG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNTaGFkb3dSb290IH07IiwgImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7IC8vIFRoaXMgbW9kaWZpZXIgdGFrZXMgdGhlIHN0eWxlcyBwcmVwYXJlZCBieSB0aGUgYGNvbXB1dGVTdHlsZXNgIG1vZGlmaWVyXG4vLyBhbmQgYXBwbGllcyB0aGVtIHRvIHRoZSBIVE1MRWxlbWVudHMgc3VjaCBhcyBwb3BwZXIgYW5kIGFycm93XG5cbmZ1bmN0aW9uIGFwcGx5U3R5bGVzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZTtcbiAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgc3R5bGUgPSBzdGF0ZS5zdHlsZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRmxvdyBkb2Vzbid0IHN1cHBvcnQgdG8gZXh0ZW5kIHRoaXMgcHJvcGVydHksIGJ1dCBpdCdzIHRoZSBtb3N0XG4gICAgLy8gZWZmZWN0aXZlIHdheSB0byBhcHBseSBzdHlsZXMgdG8gYW4gSFRNTEVsZW1lbnRcbiAgICAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV1cblxuXG4gICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIHZhbHVlID0gYXR0cmlidXRlc1tuYW1lXTtcblxuICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlID09PSB0cnVlID8gJycgOiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGU7XG4gIHZhciBpbml0aWFsU3R5bGVzID0ge1xuICAgIHBvcHBlcjoge1xuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBsZWZ0OiAnMCcsXG4gICAgICB0b3A6ICcwJyxcbiAgICAgIG1hcmdpbjogJzAnXG4gICAgfSxcbiAgICBhcnJvdzoge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZSdcbiAgICB9LFxuICAgIHJlZmVyZW5jZToge31cbiAgfTtcbiAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5wb3BwZXIuc3R5bGUsIGluaXRpYWxTdHlsZXMucG9wcGVyKTtcbiAgc3RhdGUuc3R5bGVzID0gaW5pdGlhbFN0eWxlcztcblxuICBpZiAoc3RhdGUuZWxlbWVudHMuYXJyb3cpIHtcbiAgICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLmFycm93LnN0eWxlLCBpbml0aWFsU3R5bGVzLmFycm93KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07XG4gICAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgICB2YXIgc3R5bGVQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoc3RhdGUuc3R5bGVzLmhhc093blByb3BlcnR5KG5hbWUpID8gc3RhdGUuc3R5bGVzW25hbWVdIDogaW5pdGlhbFN0eWxlc1tuYW1lXSk7IC8vIFNldCBhbGwgdmFsdWVzIHRvIGFuIGVtcHR5IHN0cmluZyB0byB1bnNldCB0aGVtXG5cbiAgICAgIHZhciBzdHlsZSA9IHN0eWxlUHJvcGVydGllcy5yZWR1Y2UoZnVuY3Rpb24gKHN0eWxlLCBwcm9wZXJ0eSkge1xuICAgICAgICBzdHlsZVtwcm9wZXJ0eV0gPSAnJztcbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfSwge30pOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2FwcGx5U3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBhcHBseVN0eWxlcyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ2NvbXB1dGVTdHlsZXMnXVxufTsiLCAiaW1wb3J0IHsgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufSIsICJleHBvcnQgdmFyIG1heCA9IE1hdGgubWF4O1xuZXhwb3J0IHZhciBtaW4gPSBNYXRoLm1pbjtcbmV4cG9ydCB2YXIgcm91bmQgPSBNYXRoLnJvdW5kOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVQVN0cmluZygpIHtcbiAgdmFyIHVhRGF0YSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhO1xuXG4gIGlmICh1YURhdGEgIT0gbnVsbCAmJiB1YURhdGEuYnJhbmRzICYmIEFycmF5LmlzQXJyYXkodWFEYXRhLmJyYW5kcykpIHtcbiAgICByZXR1cm4gdWFEYXRhLmJyYW5kcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLmJyYW5kICsgXCIvXCIgKyBpdGVtLnZlcnNpb247XG4gICAgfSkuam9pbignICcpO1xuICB9XG5cbiAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7XG59IiwgImltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0xheW91dFZpZXdwb3J0KCkge1xuICByZXR1cm4gIS9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG59IiwgImltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgaXNMYXlvdXRWaWV3cG9ydCBmcm9tIFwiLi9pc0xheW91dFZpZXdwb3J0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgaW5jbHVkZVNjYWxlLCBpc0ZpeGVkU3RyYXRlZ3kpIHtcbiAgaWYgKGluY2x1ZGVTY2FsZSA9PT0gdm9pZCAwKSB7XG4gICAgaW5jbHVkZVNjYWxlID0gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNGaXhlZFN0cmF0ZWd5ID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkU3RyYXRlZ3kgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBjbGllbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IDE7XG4gIHZhciBzY2FsZVkgPSAxO1xuXG4gIGlmIChpbmNsdWRlU2NhbGUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIHNjYWxlWCA9IGVsZW1lbnQub2Zmc2V0V2lkdGggPiAwID8gcm91bmQoY2xpZW50UmVjdC53aWR0aCkgLyBlbGVtZW50Lm9mZnNldFdpZHRoIHx8IDEgOiAxO1xuICAgIHNjYWxlWSA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0ID4gMCA/IHJvdW5kKGNsaWVudFJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDEgOiAxO1xuICB9XG5cbiAgdmFyIF9yZWYgPSBpc0VsZW1lbnQoZWxlbWVudCkgPyBnZXRXaW5kb3coZWxlbWVudCkgOiB3aW5kb3csXG4gICAgICB2aXN1YWxWaWV3cG9ydCA9IF9yZWYudmlzdWFsVmlld3BvcnQ7XG5cbiAgdmFyIGFkZFZpc3VhbE9mZnNldHMgPSAhaXNMYXlvdXRWaWV3cG9ydCgpICYmIGlzRml4ZWRTdHJhdGVneTtcbiAgdmFyIHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgKGFkZFZpc3VhbE9mZnNldHMgJiYgdmlzdWFsVmlld3BvcnQgPyB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0IDogMCkpIC8gc2NhbGVYO1xuICB2YXIgeSA9IChjbGllbnRSZWN0LnRvcCArIChhZGRWaXN1YWxPZmZzZXRzICYmIHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wIDogMCkpIC8gc2NhbGVZO1xuICB2YXIgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoIC8gc2NhbGVYO1xuICB2YXIgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZVk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHRvcDogeSxcbiAgICByaWdodDogeCArIHdpZHRoLFxuICAgIGJvdHRvbTogeSArIGhlaWdodCxcbiAgICBsZWZ0OiB4LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsICJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiOyAvLyBSZXR1cm5zIHRoZSBsYXlvdXQgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuIExheW91dFxuLy8gbWVhbnMgaXQgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRMYXlvdXRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCk7IC8vIFVzZSB0aGUgY2xpZW50UmVjdCBzaXplcyBpZiBpdCdzIG5vdCBiZWVuIHRyYW5zZm9ybWVkLlxuICAvLyBGaXhlcyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEyMjNcblxuICB2YXIgd2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3Qud2lkdGggLSB3aWR0aCkgPD0gMSkge1xuICAgIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aDtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LmhlaWdodCAtIGhlaWdodCkgPD0gMSkge1xuICAgIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBlbGVtZW50Lm9mZnNldExlZnQsXG4gICAgeTogZWxlbWVudC5vZmZzZXRUb3AsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59IiwgImltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRhaW5zKHBhcmVudCwgY2hpbGQpIHtcbiAgdmFyIHJvb3ROb2RlID0gY2hpbGQuZ2V0Um9vdE5vZGUgJiYgY2hpbGQuZ2V0Um9vdE5vZGUoKTsgLy8gRmlyc3QsIGF0dGVtcHQgd2l0aCBmYXN0ZXIgbmF0aXZlIG1ldGhvZFxuXG4gIGlmIChwYXJlbnQuY29udGFpbnMoY2hpbGQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gdGhlbiBmYWxsYmFjayB0byBjdXN0b20gaW1wbGVtZW50YXRpb24gd2l0aCBTaGFkb3cgRE9NIHN1cHBvcnRcbiAgZWxzZSBpZiAocm9vdE5vZGUgJiYgaXNTaGFkb3dSb290KHJvb3ROb2RlKSkge1xuICAgICAgdmFyIG5leHQgPSBjaGlsZDtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAobmV4dCAmJiBwYXJlbnQuaXNTYW1lTm9kZShuZXh0KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXTogbmVlZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHRoaXMuLi5cblxuXG4gICAgICAgIG5leHQgPSBuZXh0LnBhcmVudE5vZGUgfHwgbmV4dC5ob3N0O1xuICAgICAgfSB3aGlsZSAobmV4dCk7XG4gICAgfSAvLyBHaXZlIHVwLCB0aGUgcmVzdWx0IGlzIGZhbHNlXG5cblxuICByZXR1cm4gZmFsc2U7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufSIsICJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIFsndGFibGUnLCAndGQnLCAndGgnXS5pbmRleE9mKGdldE5vZGVOYW1lKGVsZW1lbnQpKSA+PSAwO1xufSIsICJpbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkge1xuICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gIHJldHVybiAoKGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQub3duZXJEb2N1bWVudCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICBlbGVtZW50LmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpLmRvY3VtZW50RWxlbWVudDtcbn0iLCAiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSB7XG4gIGlmIChnZXROb2RlTmFtZShlbGVtZW50KSA9PT0gJ2h0bWwnKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gKC8vIHRoaXMgaXMgYSBxdWlja2VyIChidXQgbGVzcyB0eXBlIHNhZmUpIHdheSB0byBzYXZlIHF1aXRlIHNvbWUgYnl0ZXMgZnJvbSB0aGUgYnVuZGxlXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXVxuICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgIGVsZW1lbnQuYXNzaWduZWRTbG90IHx8IC8vIHN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlXG4gICAgZWxlbWVudC5wYXJlbnROb2RlIHx8ICggLy8gRE9NIEVsZW1lbnQgZGV0ZWN0ZWRcbiAgICBpc1NoYWRvd1Jvb3QoZWxlbWVudCkgPyBlbGVtZW50Lmhvc3QgOiBudWxsKSB8fCAvLyBTaGFkb3dSb290IGRldGVjdGVkXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IEhUTUxFbGVtZW50IGlzIGEgTm9kZVxuICAgIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSAvLyBmYWxsYmFja1xuXG4gICk7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBpc1RhYmxlRWxlbWVudCBmcm9tIFwiLi9pc1RhYmxlRWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzgzN1xuICBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG59IC8vIGAub2Zmc2V0UGFyZW50YCByZXBvcnRzIGBudWxsYCBmb3IgZml4ZWQgZWxlbWVudHMsIHdoaWxlIGFic29sdXRlIGVsZW1lbnRzXG4vLyByZXR1cm4gdGhlIGNvbnRhaW5pbmcgYmxvY2tcblxuXG5mdW5jdGlvbiBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkge1xuICB2YXIgaXNGaXJlZm94ID0gL2ZpcmVmb3gvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xuICB2YXIgaXNJRSA9IC9UcmlkZW50L2kudGVzdChnZXRVQVN0cmluZygpKTtcblxuICBpZiAoaXNJRSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgLy8gSW4gSUUgOSwgMTAgYW5kIDExIGZpeGVkIGVsZW1lbnRzIGNvbnRhaW5pbmcgYmxvY2sgaXMgYWx3YXlzIGVzdGFibGlzaGVkIGJ5IHRoZSB2aWV3cG9ydFxuICAgIHZhciBlbGVtZW50Q3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcblxuICAgIGlmIChlbGVtZW50Q3NzLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuXG4gIGlmIChpc1NoYWRvd1Jvb3QoY3VycmVudE5vZGUpKSB7XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5ob3N0O1xuICB9XG5cbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmIFsnaHRtbCcsICdib2R5J10uaW5kZXhPZihnZXROb2RlTmFtZShjdXJyZW50Tm9kZSkpIDwgMCkge1xuICAgIHZhciBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnROb2RlKTsgLy8gVGhpcyBpcyBub24tZXhoYXVzdGl2ZSBidXQgY292ZXJzIHRoZSBtb3N0IGNvbW1vbiBDU1MgcHJvcGVydGllcyB0aGF0XG4gICAgLy8gY3JlYXRlIGEgY29udGFpbmluZyBibG9jay5cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuXG4gICAgaWYgKGNzcy50cmFuc2Zvcm0gIT09ICdub25lJyB8fCBjc3MucGVyc3BlY3RpdmUgIT09ICdub25lJyB8fCBjc3MuY29udGFpbiA9PT0gJ3BhaW50JyB8fCBbJ3RyYW5zZm9ybScsICdwZXJzcGVjdGl2ZSddLmluZGV4T2YoY3NzLndpbGxDaGFuZ2UpICE9PSAtMSB8fCBpc0ZpcmVmb3ggJiYgY3NzLndpbGxDaGFuZ2UgPT09ICdmaWx0ZXInIHx8IGlzRmlyZWZveCAmJiBjc3MuZmlsdGVyICYmIGNzcy5maWx0ZXIgIT09ICdub25lJykge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IC8vIEdldHMgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcG9zaXRpb25lZCBlbGVtZW50LiBIYW5kbGVzIHNvbWUgZWRnZSBjYXNlcyxcbi8vIHN1Y2ggYXMgdGFibGUgYW5jZXN0b3JzIGFuZCBjcm9zcyBicm93c2VyIGJ1Z3MuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCk7XG5cbiAgd2hpbGUgKG9mZnNldFBhcmVudCAmJiBpc1RhYmxlRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCk7XG4gIH1cblxuICBpZiAob2Zmc2V0UGFyZW50ICYmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnaHRtbCcgfHwgZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2JvZHknICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbmRvdztcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpID49IDAgPyAneCcgOiAneSc7XG59IiwgImltcG9ydCB7IG1heCBhcyBtYXRoTWF4LCBtaW4gYXMgbWF0aE1pbiB9IGZyb20gXCIuL21hdGguanNcIjtcbmV4cG9ydCBmdW5jdGlvbiB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KSB7XG4gIHJldHVybiBtYXRoTWF4KG1pbiwgbWF0aE1pbih2YWx1ZSwgbWF4KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gd2l0aGluTWF4Q2xhbXAobWluLCB2YWx1ZSwgbWF4KSB7XG4gIHZhciB2ID0gd2l0aGluKG1pbiwgdmFsdWUsIG1heCk7XG4gIHJldHVybiB2ID4gbWF4ID8gbWF4IDogdjtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RnJlc2hTaWRlT2JqZWN0KCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMFxuICB9O1xufSIsICJpbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VQYWRkaW5nT2JqZWN0KHBhZGRpbmdPYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGdldEZyZXNoU2lkZU9iamVjdCgpLCBwYWRkaW5nT2JqZWN0KTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXhwYW5kVG9IYXNoTWFwKHZhbHVlLCBrZXlzKSB7XG4gIHJldHVybiBrZXlzLnJlZHVjZShmdW5jdGlvbiAoaGFzaE1hcCwga2V5KSB7XG4gICAgaGFzaE1hcFtrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIGhhc2hNYXA7XG4gIH0sIHt9KTtcbn0iLCAiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuLi9kb20tdXRpbHMvY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgd2l0aGluIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi4vdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuLi91dGlscy9leHBhbmRUb0hhc2hNYXAuanNcIjtcbmltcG9ydCB7IGxlZnQsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdG9wLCBib3R0b20gfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdG9QYWRkaW5nT2JqZWN0ID0gZnVuY3Rpb24gdG9QYWRkaW5nT2JqZWN0KHBhZGRpbmcsIHN0YXRlKSB7XG4gIHBhZGRpbmcgPSB0eXBlb2YgcGFkZGluZyA9PT0gJ2Z1bmN0aW9uJyA/IHBhZGRpbmcoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiBwYWRkaW5nO1xuICByZXR1cm4gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbn07XG5cbmZ1bmN0aW9uIGFycm93KF9yZWYpIHtcbiAgdmFyIF9zdGF0ZSRtb2RpZmllcnNEYXRhJDtcblxuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgYXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGlzVmVydGljYWwgPSBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgaWYgKCFhcnJvd0VsZW1lbnQgfHwgIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGFkZGluZ09iamVjdCA9IHRvUGFkZGluZ09iamVjdChvcHRpb25zLnBhZGRpbmcsIHN0YXRlKTtcbiAgdmFyIGFycm93UmVjdCA9IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KTtcbiAgdmFyIG1pblByb3AgPSBheGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICB2YXIgbWF4UHJvcCA9IGF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICB2YXIgZW5kRGlmZiA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtsZW5dICsgc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdIC0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnBvcHBlcltsZW5dO1xuICB2YXIgc3RhcnREaWZmID0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGFycm93RWxlbWVudCk7XG4gIHZhciBjbGllbnRTaXplID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBheGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRIZWlnaHQgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoIHx8IDAgOiAwO1xuICB2YXIgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7IC8vIE1ha2Ugc3VyZSB0aGUgYXJyb3cgZG9lc24ndCBvdmVyZmxvdyB0aGUgcG9wcGVyIGlmIHRoZSBjZW50ZXIgcG9pbnQgaXNcbiAgLy8gb3V0c2lkZSBvZiB0aGUgcG9wcGVyIGJvdW5kc1xuXG4gIHZhciBtaW4gPSBwYWRkaW5nT2JqZWN0W21pblByb3BdO1xuICB2YXIgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93UmVjdFtsZW5dIC0gcGFkZGluZ09iamVjdFttYXhQcm9wXTtcbiAgdmFyIGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dSZWN0W2xlbl0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gIHZhciBvZmZzZXQgPSB3aXRoaW4obWluLCBjZW50ZXIsIG1heCk7IC8vIFByZXZlbnRzIGJyZWFraW5nIHN5bnRheCBoaWdobGlnaHRpbmcuLi5cblxuICB2YXIgYXhpc1Byb3AgPSBheGlzO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gKF9zdGF0ZSRtb2RpZmllcnNEYXRhJCA9IHt9LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSRbYXhpc1Byb3BdID0gb2Zmc2V0LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQuY2VudGVyT2Zmc2V0ID0gb2Zmc2V0IC0gY2VudGVyLCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQpO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQsXG4gICAgICBhcnJvd0VsZW1lbnQgPSBfb3B0aW9ucyRlbGVtZW50ID09PSB2b2lkIDAgPyAnW2RhdGEtcG9wcGVyLWFycm93XScgOiBfb3B0aW9ucyRlbGVtZW50O1xuXG4gIGlmIChhcnJvd0VsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBDU1Mgc2VsZWN0b3JcblxuXG4gIGlmICh0eXBlb2YgYXJyb3dFbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLnBvcHBlci5xdWVyeVNlbGVjdG9yKGFycm93RWxlbWVudCk7XG5cbiAgICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGFpbnMoc3RhdGUuZWxlbWVudHMucG9wcGVyLCBhcnJvd0VsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGUuZWxlbWVudHMuYXJyb3cgPSBhcnJvd0VsZW1lbnQ7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcnJvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBhcnJvdyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXVxufTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59IiwgImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgZW5kIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdW5zZXRTaWRlcyA9IHtcbiAgdG9wOiAnYXV0bycsXG4gIHJpZ2h0OiAnYXV0bycsXG4gIGJvdHRvbTogJ2F1dG8nLFxuICBsZWZ0OiAnYXV0bydcbn07IC8vIFJvdW5kIHRoZSBvZmZzZXRzIHRvIHRoZSBuZWFyZXN0IHN1aXRhYmxlIHN1YnBpeGVsIGJhc2VkIG9uIHRoZSBEUFIuXG4vLyBab29taW5nIGNhbiBjaGFuZ2UgdGhlIERQUiwgYnV0IGl0IHNlZW1zIHRvIHJlcG9ydCBhIHZhbHVlIHRoYXQgd2lsbFxuLy8gY2xlYW5seSBkaXZpZGUgdGhlIHZhbHVlcyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBzdWJwaXhlbHMuXG5cbmZ1bmN0aW9uIHJvdW5kT2Zmc2V0c0J5RFBSKF9yZWYsIHdpbikge1xuICB2YXIgeCA9IF9yZWYueCxcbiAgICAgIHkgPSBfcmVmLnk7XG4gIHZhciBkcHIgPSB3aW4uZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICByZXR1cm4ge1xuICAgIHg6IHJvdW5kKHggKiBkcHIpIC8gZHByIHx8IDAsXG4gICAgeTogcm91bmQoeSAqIGRwcikgLyBkcHIgfHwgMFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwVG9TdHlsZXMoX3JlZjIpIHtcbiAgdmFyIF9PYmplY3QkYXNzaWduMjtcblxuICB2YXIgcG9wcGVyID0gX3JlZjIucG9wcGVyLFxuICAgICAgcG9wcGVyUmVjdCA9IF9yZWYyLnBvcHBlclJlY3QsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmMi5wbGFjZW1lbnQsXG4gICAgICB2YXJpYXRpb24gPSBfcmVmMi52YXJpYXRpb24sXG4gICAgICBvZmZzZXRzID0gX3JlZjIub2Zmc2V0cyxcbiAgICAgIHBvc2l0aW9uID0gX3JlZjIucG9zaXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfcmVmMi5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBhZGFwdGl2ZSA9IF9yZWYyLmFkYXB0aXZlLFxuICAgICAgcm91bmRPZmZzZXRzID0gX3JlZjIucm91bmRPZmZzZXRzLFxuICAgICAgaXNGaXhlZCA9IF9yZWYyLmlzRml4ZWQ7XG4gIHZhciBfb2Zmc2V0cyR4ID0gb2Zmc2V0cy54LFxuICAgICAgeCA9IF9vZmZzZXRzJHggPT09IHZvaWQgMCA/IDAgOiBfb2Zmc2V0cyR4LFxuICAgICAgX29mZnNldHMkeSA9IG9mZnNldHMueSxcbiAgICAgIHkgPSBfb2Zmc2V0cyR5ID09PSB2b2lkIDAgPyAwIDogX29mZnNldHMkeTtcblxuICB2YXIgX3JlZjMgPSB0eXBlb2Ygcm91bmRPZmZzZXRzID09PSAnZnVuY3Rpb24nID8gcm91bmRPZmZzZXRzKHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfSkgOiB7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG5cbiAgeCA9IF9yZWYzLng7XG4gIHkgPSBfcmVmMy55O1xuICB2YXIgaGFzWCA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3gnKTtcbiAgdmFyIGhhc1kgPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd5Jyk7XG4gIHZhciBzaWRlWCA9IGxlZnQ7XG4gIHZhciBzaWRlWSA9IHRvcDtcbiAgdmFyIHdpbiA9IHdpbmRvdztcblxuICBpZiAoYWRhcHRpdmUpIHtcbiAgICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KHBvcHBlcik7XG4gICAgdmFyIGhlaWdodFByb3AgPSAnY2xpZW50SGVpZ2h0JztcbiAgICB2YXIgd2lkdGhQcm9wID0gJ2NsaWVudFdpZHRoJztcblxuICAgIGlmIChvZmZzZXRQYXJlbnQgPT09IGdldFdpbmRvdyhwb3BwZXIpKSB7XG4gICAgICBvZmZzZXRQYXJlbnQgPSBnZXREb2N1bWVudEVsZW1lbnQocG9wcGVyKTtcblxuICAgICAgaWYgKGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiAhPT0gJ3N0YXRpYycgJiYgcG9zaXRpb24gPT09ICdhYnNvbHV0ZScpIHtcbiAgICAgICAgaGVpZ2h0UHJvcCA9ICdzY3JvbGxIZWlnaHQnO1xuICAgICAgICB3aWR0aFByb3AgPSAnc2Nyb2xsV2lkdGgnO1xuICAgICAgfVxuICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FzdF06IGZvcmNlIHR5cGUgcmVmaW5lbWVudCwgd2UgY29tcGFyZSBvZmZzZXRQYXJlbnQgd2l0aCB3aW5kb3cgYWJvdmUsIGJ1dCBGbG93IGRvZXNuJ3QgZGV0ZWN0IGl0XG5cblxuICAgIG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudDtcblxuICAgIGlmIChwbGFjZW1lbnQgPT09IHRvcCB8fCAocGxhY2VtZW50ID09PSBsZWZ0IHx8IHBsYWNlbWVudCA9PT0gcmlnaHQpICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWSA9IGJvdHRvbTtcbiAgICAgIHZhciBvZmZzZXRZID0gaXNGaXhlZCAmJiBvZmZzZXRQYXJlbnQgPT09IHdpbiAmJiB3aW4udmlzdWFsVmlld3BvcnQgPyB3aW4udmlzdWFsVmlld3BvcnQuaGVpZ2h0IDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICBvZmZzZXRQYXJlbnRbaGVpZ2h0UHJvcF07XG4gICAgICB5IC09IG9mZnNldFkgLSBwb3BwZXJSZWN0LmhlaWdodDtcbiAgICAgIHkgKj0gZ3B1QWNjZWxlcmF0aW9uID8gMSA6IC0xO1xuICAgIH1cblxuICAgIGlmIChwbGFjZW1lbnQgPT09IGxlZnQgfHwgKHBsYWNlbWVudCA9PT0gdG9wIHx8IHBsYWNlbWVudCA9PT0gYm90dG9tKSAmJiB2YXJpYXRpb24gPT09IGVuZCkge1xuICAgICAgc2lkZVggPSByaWdodDtcbiAgICAgIHZhciBvZmZzZXRYID0gaXNGaXhlZCAmJiBvZmZzZXRQYXJlbnQgPT09IHdpbiAmJiB3aW4udmlzdWFsVmlld3BvcnQgPyB3aW4udmlzdWFsVmlld3BvcnQud2lkdGggOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG9mZnNldFBhcmVudFt3aWR0aFByb3BdO1xuICAgICAgeCAtPSBvZmZzZXRYIC0gcG9wcGVyUmVjdC53aWR0aDtcbiAgICAgIHggKj0gZ3B1QWNjZWxlcmF0aW9uID8gMSA6IC0xO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb21tb25TdHlsZXMgPSBPYmplY3QuYXNzaWduKHtcbiAgICBwb3NpdGlvbjogcG9zaXRpb25cbiAgfSwgYWRhcHRpdmUgJiYgdW5zZXRTaWRlcyk7XG5cbiAgdmFyIF9yZWY0ID0gcm91bmRPZmZzZXRzID09PSB0cnVlID8gcm91bmRPZmZzZXRzQnlEUFIoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9LCBnZXRXaW5kb3cocG9wcGVyKSkgOiB7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG5cbiAgeCA9IF9yZWY0Lng7XG4gIHkgPSBfcmVmNC55O1xuXG4gIGlmIChncHVBY2NlbGVyYXRpb24pIHtcbiAgICB2YXIgX09iamVjdCRhc3NpZ247XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24gPSB7fSwgX09iamVjdCRhc3NpZ25bc2lkZVldID0gaGFzWSA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbltzaWRlWF0gPSBoYXNYID8gJzAnIDogJycsIF9PYmplY3QkYXNzaWduLnRyYW5zZm9ybSA9ICh3aW4uZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSA8PSAxID8gXCJ0cmFuc2xhdGUoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweClcIiA6IFwidHJhbnNsYXRlM2QoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweCwgMClcIiwgX09iamVjdCRhc3NpZ24pKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIChfT2JqZWN0JGFzc2lnbjIgPSB7fSwgX09iamVjdCRhc3NpZ24yW3NpZGVZXSA9IGhhc1kgPyB5ICsgXCJweFwiIDogJycsIF9PYmplY3QkYXNzaWduMltzaWRlWF0gPSBoYXNYID8geCArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjIudHJhbnNmb3JtID0gJycsIF9PYmplY3QkYXNzaWduMikpO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlU3R5bGVzKF9yZWY1KSB7XG4gIHZhciBzdGF0ZSA9IF9yZWY1LnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWY1Lm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPSBvcHRpb25zLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9vcHRpb25zJGdwdUFjY2VsZXJhdCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGdwdUFjY2VsZXJhdCxcbiAgICAgIF9vcHRpb25zJGFkYXB0aXZlID0gb3B0aW9ucy5hZGFwdGl2ZSxcbiAgICAgIGFkYXB0aXZlID0gX29wdGlvbnMkYWRhcHRpdmUgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhZGFwdGl2ZSxcbiAgICAgIF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9IG9wdGlvbnMucm91bmRPZmZzZXRzLFxuICAgICAgcm91bmRPZmZzZXRzID0gX29wdGlvbnMkcm91bmRPZmZzZXRzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcm91bmRPZmZzZXRzO1xuICB2YXIgY29tbW9uU3R5bGVzID0ge1xuICAgIHBsYWNlbWVudDogZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHZhcmlhdGlvbjogZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCksXG4gICAgcG9wcGVyOiBzdGF0ZS5lbGVtZW50cy5wb3BwZXIsXG4gICAgcG9wcGVyUmVjdDogc3RhdGUucmVjdHMucG9wcGVyLFxuICAgIGdwdUFjY2VsZXJhdGlvbjogZ3B1QWNjZWxlcmF0aW9uLFxuICAgIGlzRml4ZWQ6IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3kgPT09ICdmaXhlZCdcbiAgfTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzICE9IG51bGwpIHtcbiAgICBzdGF0ZS5zdHlsZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLnBvcHBlciwgbWFwVG9TdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCB7XG4gICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMsXG4gICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIGFkYXB0aXZlOiBhZGFwdGl2ZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93ICE9IG51bGwpIHtcbiAgICBzdGF0ZS5zdHlsZXMuYXJyb3cgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zdHlsZXMuYXJyb3csIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgYWRhcHRpdmU6IGZhbHNlLFxuICAgICAgcm91bmRPZmZzZXRzOiByb3VuZE9mZnNldHNcbiAgICB9KSkpO1xuICB9XG5cbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgICdkYXRhLXBvcHBlci1wbGFjZW1lbnQnOiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdjb21wdXRlU3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdiZWZvcmVXcml0ZScsXG4gIGZuOiBjb21wdXRlU3R5bGVzLFxuICBkYXRhOiB7fVxufTsiLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciBwYXNzaXZlID0ge1xuICBwYXNzaXZlOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgaW5zdGFuY2UgPSBfcmVmLmluc3RhbmNlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJHNjcm9sbCA9IG9wdGlvbnMuc2Nyb2xsLFxuICAgICAgc2Nyb2xsID0gX29wdGlvbnMkc2Nyb2xsID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkc2Nyb2xsLFxuICAgICAgX29wdGlvbnMkcmVzaXplID0gb3B0aW9ucy5yZXNpemUsXG4gICAgICByZXNpemUgPSBfb3B0aW9ucyRyZXNpemUgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyZXNpemU7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coc3RhdGUuZWxlbWVudHMucG9wcGVyKTtcbiAgdmFyIHNjcm9sbFBhcmVudHMgPSBbXS5jb25jYXQoc3RhdGUuc2Nyb2xsUGFyZW50cy5yZWZlcmVuY2UsIHN0YXRlLnNjcm9sbFBhcmVudHMucG9wcGVyKTtcblxuICBpZiAoc2Nyb2xsKSB7XG4gICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgIHNjcm9sbFBhcmVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHJlc2l6ZSkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2Nyb2xsKSB7XG4gICAgICBzY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHNjcm9sbFBhcmVudCkge1xuICAgICAgICBzY3JvbGxQYXJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChyZXNpemUpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH1cbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2V2ZW50TGlzdGVuZXJzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBmdW5jdGlvbiBmbigpIHt9LFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgZGF0YToge31cbn07IiwgInZhciBoYXNoID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsICJ2YXIgaGFzaCA9IHtcbiAgc3RhcnQ6ICdlbmQnLFxuICBlbmQ6ICdzdGFydCdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9zdGFydHxlbmQvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGwobm9kZSkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KG5vZGUpO1xuICB2YXIgc2Nyb2xsTGVmdCA9IHdpbi5wYWdlWE9mZnNldDtcbiAgdmFyIHNjcm9sbFRvcCA9IHdpbi5wYWdlWU9mZnNldDtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wXG4gIH07XG59IiwgImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCkge1xuICAvLyBJZiA8aHRtbD4gaGFzIGEgQ1NTIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgdmlld3BvcnQsIHRoZW4gdGhpcyB3aWxsIGJlXG4gIC8vIGluY29ycmVjdCBmb3IgUlRMLlxuICAvLyBQb3BwZXIgMSBpcyBicm9rZW4gaW4gdGhpcyBjYXNlIGFuZCBuZXZlciBoYWQgYSBidWcgcmVwb3J0IHNvIGxldCdzIGFzc3VtZVxuICAvLyBpdCdzIG5vdCBhbiBpc3N1ZS4gSSBkb24ndCB0aGluayBhbnlvbmUgZXZlciBzcGVjaWZpZXMgd2lkdGggb24gPGh0bWw+XG4gIC8vIGFueXdheS5cbiAgLy8gQnJvd3NlcnMgd2hlcmUgdGhlIGxlZnQgc2Nyb2xsYmFyIGRvZXNuJ3QgY2F1c2UgYW4gaXNzdWUgcmVwb3J0IGAwYCBmb3JcbiAgLy8gdGhpcyAoZS5nLiBFZGdlIDIwMTksIElFMTEsIFNhZmFyaSlcbiAgcmV0dXJuIGdldEJvdW5kaW5nQ2xpZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpLmxlZnQgKyBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCkuc2Nyb2xsTGVmdDtcbn0iLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgaXNMYXlvdXRWaWV3cG9ydCBmcm9tIFwiLi9pc0xheW91dFZpZXdwb3J0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciB2aXN1YWxWaWV3cG9ydCA9IHdpbi52aXN1YWxWaWV3cG9ydDtcbiAgdmFyIHdpZHRoID0gaHRtbC5jbGllbnRXaWR0aDtcbiAgdmFyIGhlaWdodCA9IGh0bWwuY2xpZW50SGVpZ2h0O1xuICB2YXIgeCA9IDA7XG4gIHZhciB5ID0gMDtcblxuICBpZiAodmlzdWFsVmlld3BvcnQpIHtcbiAgICB3aWR0aCA9IHZpc3VhbFZpZXdwb3J0LndpZHRoO1xuICAgIGhlaWdodCA9IHZpc3VhbFZpZXdwb3J0LmhlaWdodDtcbiAgICB2YXIgbGF5b3V0Vmlld3BvcnQgPSBpc0xheW91dFZpZXdwb3J0KCk7XG5cbiAgICBpZiAobGF5b3V0Vmlld3BvcnQgfHwgIWxheW91dFZpZXdwb3J0ICYmIHN0cmF0ZWd5ID09PSAnZml4ZWQnKSB7XG4gICAgICB4ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdDtcbiAgICAgIHkgPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3A7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgeDogeCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCksXG4gICAgeTogeVxuICB9O1xufSIsICJpbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCB7IG1heCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGVcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHdpblNjcm9sbCA9IGdldFdpbmRvd1Njcm9sbChlbGVtZW50KTtcbiAgdmFyIGJvZHkgPSAoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHk7XG4gIHZhciB3aWR0aCA9IG1heChodG1sLnNjcm9sbFdpZHRoLCBodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5zY3JvbGxXaWR0aCA6IDAsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCk7XG4gIHZhciBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5ID8gYm9keS5zY3JvbGxIZWlnaHQgOiAwLCBib2R5ID8gYm9keS5jbGllbnRIZWlnaHQgOiAwKTtcbiAgdmFyIHggPSAtd2luU2Nyb2xsLnNjcm9sbExlZnQgKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpO1xuICB2YXIgeSA9IC13aW5TY3JvbGwuc2Nyb2xsVG9wO1xuXG4gIGlmIChnZXRDb21wdXRlZFN0eWxlKGJvZHkgfHwgaHRtbCkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCkgLSB3aWR0aDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsICJpbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1Njcm9sbFBhcmVudChlbGVtZW50KSB7XG4gIC8vIEZpcmVmb3ggd2FudHMgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcbiAgdmFyIF9nZXRDb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSxcbiAgICAgIG92ZXJmbG93ID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1gsXG4gICAgICBvdmVyZmxvd1kgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1k7XG5cbiAgcmV0dXJuIC9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbi8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCk7XG59IiwgImltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KG5vZGUpIHtcbiAgaWYgKFsnaHRtbCcsICdib2R5JywgJyNkb2N1bWVudCddLmluZGV4T2YoZ2V0Tm9kZU5hbWUobm9kZSkpID49IDApIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudC5ib2R5O1xuICB9XG5cbiAgaWYgKGlzSFRNTEVsZW1lbnQobm9kZSkgJiYgaXNTY3JvbGxQYXJlbnQobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHJldHVybiBnZXRTY3JvbGxQYXJlbnQoZ2V0UGFyZW50Tm9kZShub2RlKSk7XG59IiwgImltcG9ydCBnZXRTY3JvbGxQYXJlbnQgZnJvbSBcIi4vZ2V0U2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG4vKlxuZ2l2ZW4gYSBET00gZWxlbWVudCwgcmV0dXJuIHRoZSBsaXN0IG9mIGFsbCBzY3JvbGwgcGFyZW50cywgdXAgdGhlIGxpc3Qgb2YgYW5jZXNvcnNcbnVudGlsIHdlIGdldCB0byB0aGUgdG9wIHdpbmRvdyBvYmplY3QuIFRoaXMgbGlzdCBpcyB3aGF0IHdlIGF0dGFjaCBzY3JvbGwgbGlzdGVuZXJzXG50bywgYmVjYXVzZSBpZiBhbnkgb2YgdGhlc2UgcGFyZW50IGVsZW1lbnRzIHNjcm9sbCwgd2UnbGwgbmVlZCB0byByZS1jYWxjdWxhdGUgdGhlXG5yZWZlcmVuY2UgZWxlbWVudCdzIHBvc2l0aW9uLlxuKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGlzdFNjcm9sbFBhcmVudHMoZWxlbWVudCwgbGlzdCkge1xuICB2YXIgX2VsZW1lbnQkb3duZXJEb2N1bWVuO1xuXG4gIGlmIChsaXN0ID09PSB2b2lkIDApIHtcbiAgICBsaXN0ID0gW107XG4gIH1cblxuICB2YXIgc2Nyb2xsUGFyZW50ID0gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQpO1xuICB2YXIgaXNCb2R5ID0gc2Nyb2xsUGFyZW50ID09PSAoKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5KTtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhzY3JvbGxQYXJlbnQpO1xuICB2YXIgdGFyZ2V0ID0gaXNCb2R5ID8gW3dpbl0uY29uY2F0KHdpbi52aXN1YWxWaWV3cG9ydCB8fCBbXSwgaXNTY3JvbGxQYXJlbnQoc2Nyb2xsUGFyZW50KSA/IHNjcm9sbFBhcmVudCA6IFtdKSA6IHNjcm9sbFBhcmVudDtcbiAgdmFyIHVwZGF0ZWRMaXN0ID0gbGlzdC5jb25jYXQodGFyZ2V0KTtcbiAgcmV0dXJuIGlzQm9keSA/IHVwZGF0ZWRMaXN0IDogLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IGlzQm9keSB0ZWxscyB1cyB0YXJnZXQgd2lsbCBiZSBhbiBIVE1MRWxlbWVudCBoZXJlXG4gIHVwZGF0ZWRMaXN0LmNvbmNhdChsaXN0U2Nyb2xsUGFyZW50cyhnZXRQYXJlbnROb2RlKHRhcmdldCkpKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVjdFRvQ2xpZW50UmVjdChyZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByZWN0LCB7XG4gICAgbGVmdDogcmVjdC54LFxuICAgIHRvcDogcmVjdC55LFxuICAgIHJpZ2h0OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgfSk7XG59IiwgImltcG9ydCB7IHZpZXdwb3J0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0Vmlld3BvcnRSZWN0IGZyb20gXCIuL2dldFZpZXdwb3J0UmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50UmVjdCBmcm9tIFwiLi9nZXREb2N1bWVudFJlY3QuanNcIjtcbmltcG9ydCBsaXN0U2Nyb2xsUGFyZW50cyBmcm9tIFwiLi9saXN0U2Nyb2xsUGFyZW50cy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuL2NvbnRhaW5zLmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCByZWN0VG9DbGllbnRSZWN0IGZyb20gXCIuLi91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgeyBtYXgsIG1pbiB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGZhbHNlLCBzdHJhdGVneSA9PT0gJ2ZpeGVkJyk7XG4gIHJlY3QudG9wID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudFRvcDtcbiAgcmVjdC5sZWZ0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICByZWN0LmJvdHRvbSA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QucmlnaHQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LndpZHRoID0gZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC5oZWlnaHQgPSBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC54ID0gcmVjdC5sZWZ0O1xuICByZWN0LnkgPSByZWN0LnRvcDtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkge1xuICByZXR1cm4gY2xpcHBpbmdQYXJlbnQgPT09IHZpZXdwb3J0ID8gcmVjdFRvQ2xpZW50UmVjdChnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpKSA6IGlzRWxlbWVudChjbGlwcGluZ1BhcmVudCkgPyBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpIDogcmVjdFRvQ2xpZW50UmVjdChnZXREb2N1bWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKSk7XG59IC8vIEEgXCJjbGlwcGluZyBwYXJlbnRcIiBpcyBhbiBvdmVyZmxvd2FibGUgY29udGFpbmVyIHdpdGggdGhlIGNoYXJhY3RlcmlzdGljIG9mXG4vLyBjbGlwcGluZyAob3IgaGlkaW5nKSBvdmVyZmxvd2luZyBlbGVtZW50cyB3aXRoIGEgcG9zaXRpb24gZGlmZmVyZW50IGZyb21cbi8vIGBpbml0aWFsYFxuXG5cbmZ1bmN0aW9uIGdldENsaXBwaW5nUGFyZW50cyhlbGVtZW50KSB7XG4gIHZhciBjbGlwcGluZ1BhcmVudHMgPSBsaXN0U2Nyb2xsUGFyZW50cyhnZXRQYXJlbnROb2RlKGVsZW1lbnQpKTtcbiAgdmFyIGNhbkVzY2FwZUNsaXBwaW5nID0gWydhYnNvbHV0ZScsICdmaXhlZCddLmluZGV4T2YoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbikgPj0gMDtcbiAgdmFyIGNsaXBwZXJFbGVtZW50ID0gY2FuRXNjYXBlQ2xpcHBpbmcgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSA/IGdldE9mZnNldFBhcmVudChlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgaWYgKCFpc0VsZW1lbnQoY2xpcHBlckVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8xNDE0XG5cblxuICByZXR1cm4gY2xpcHBpbmdQYXJlbnRzLmZpbHRlcihmdW5jdGlvbiAoY2xpcHBpbmdQYXJlbnQpIHtcbiAgICByZXR1cm4gaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSAmJiBjb250YWlucyhjbGlwcGluZ1BhcmVudCwgY2xpcHBlckVsZW1lbnQpICYmIGdldE5vZGVOYW1lKGNsaXBwaW5nUGFyZW50KSAhPT0gJ2JvZHknO1xuICB9KTtcbn0gLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgcGFyZW50c1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENsaXBwaW5nUmVjdChlbGVtZW50LCBib3VuZGFyeSwgcm9vdEJvdW5kYXJ5LCBzdHJhdGVneSkge1xuICB2YXIgbWFpbkNsaXBwaW5nUGFyZW50cyA9IGJvdW5kYXJ5ID09PSAnY2xpcHBpbmdQYXJlbnRzJyA/IGdldENsaXBwaW5nUGFyZW50cyhlbGVtZW50KSA6IFtdLmNvbmNhdChib3VuZGFyeSk7XG4gIHZhciBjbGlwcGluZ1BhcmVudHMgPSBbXS5jb25jYXQobWFpbkNsaXBwaW5nUGFyZW50cywgW3Jvb3RCb3VuZGFyeV0pO1xuICB2YXIgZmlyc3RDbGlwcGluZ1BhcmVudCA9IGNsaXBwaW5nUGFyZW50c1swXTtcbiAgdmFyIGNsaXBwaW5nUmVjdCA9IGNsaXBwaW5nUGFyZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjY1JlY3QsIGNsaXBwaW5nUGFyZW50KSB7XG4gICAgdmFyIHJlY3QgPSBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpO1xuICAgIGFjY1JlY3QudG9wID0gbWF4KHJlY3QudG9wLCBhY2NSZWN0LnRvcCk7XG4gICAgYWNjUmVjdC5yaWdodCA9IG1pbihyZWN0LnJpZ2h0LCBhY2NSZWN0LnJpZ2h0KTtcbiAgICBhY2NSZWN0LmJvdHRvbSA9IG1pbihyZWN0LmJvdHRvbSwgYWNjUmVjdC5ib3R0b20pO1xuICAgIGFjY1JlY3QubGVmdCA9IG1heChyZWN0LmxlZnQsIGFjY1JlY3QubGVmdCk7XG4gICAgcmV0dXJuIGFjY1JlY3Q7XG4gIH0sIGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGZpcnN0Q2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSk7XG4gIGNsaXBwaW5nUmVjdC53aWR0aCA9IGNsaXBwaW5nUmVjdC5yaWdodCAtIGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QuaGVpZ2h0ID0gY2xpcHBpbmdSZWN0LmJvdHRvbSAtIGNsaXBwaW5nUmVjdC50b3A7XG4gIGNsaXBwaW5nUmVjdC54ID0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC55ID0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgcmV0dXJuIGNsaXBwaW5nUmVjdDtcbn0iLCAiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4vZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHN0YXJ0LCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHJlZmVyZW5jZSA9IF9yZWYucmVmZXJlbmNlLFxuICAgICAgZWxlbWVudCA9IF9yZWYuZWxlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudCA/IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciB2YXJpYXRpb24gPSBwbGFjZW1lbnQgPyBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZWxlbWVudC53aWR0aCAvIDI7XG4gIHZhciBjb21tb25ZID0gcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0IC8gMiAtIGVsZW1lbnQuaGVpZ2h0IC8gMjtcbiAgdmFyIG9mZnNldHM7XG5cbiAgc3dpdGNoIChiYXNlUGxhY2VtZW50KSB7XG4gICAgY2FzZSB0b3A6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSAtIGVsZW1lbnQuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGJvdHRvbTpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSByaWdodDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGxlZnQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCAtIGVsZW1lbnQud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cblxuICB2YXIgbWFpbkF4aXMgPSBiYXNlUGxhY2VtZW50ID8gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpIDogbnVsbDtcblxuICBpZiAobWFpbkF4aXMgIT0gbnVsbCkge1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgc3dpdGNoICh2YXJpYXRpb24pIHtcbiAgICAgIGNhc2Ugc3RhcnQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gLSAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIGVuZDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPSBvZmZzZXRzW21haW5BeGlzXSArIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9mZnNldHM7XG59IiwgImltcG9ydCBnZXRDbGlwcGluZ1JlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4vcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgY2xpcHBpbmdQYXJlbnRzLCByZWZlcmVuY2UsIHBvcHBlciwgYm90dG9tLCB0b3AsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4vZXhwYW5kVG9IYXNoTWFwLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBfb3B0aW9ucyRwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucyRwbGFjZW1lbnQgPT09IHZvaWQgMCA/IHN0YXRlLnBsYWNlbWVudCA6IF9vcHRpb25zJHBsYWNlbWVudCxcbiAgICAgIF9vcHRpb25zJHN0cmF0ZWd5ID0gX29wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBzdHJhdGVneSA9IF9vcHRpb25zJHN0cmF0ZWd5ID09PSB2b2lkIDAgPyBzdGF0ZS5zdHJhdGVneSA6IF9vcHRpb25zJHN0cmF0ZWd5LFxuICAgICAgX29wdGlvbnMkYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMkYm91bmRhcnkgPT09IHZvaWQgMCA/IGNsaXBwaW5nUGFyZW50cyA6IF9vcHRpb25zJGJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyB2aWV3cG9ydCA6IF9vcHRpb25zJHJvb3RCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGVsZW1lbnRDb250ZSA9IF9vcHRpb25zLmVsZW1lbnRDb250ZXh0LFxuICAgICAgZWxlbWVudENvbnRleHQgPSBfb3B0aW9ucyRlbGVtZW50Q29udGUgPT09IHZvaWQgMCA/IHBvcHBlciA6IF9vcHRpb25zJGVsZW1lbnRDb250ZSxcbiAgICAgIF9vcHRpb25zJGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IF9vcHRpb25zJGFsdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMkcGFkZGluZyA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHBhZGRpbmc7XG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbiAgdmFyIGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcmVmZXJlbmNlIDogcG9wcGVyO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIHZhciBjbGlwcGluZ0NsaWVudFJlY3QgPSBnZXRDbGlwcGluZ1JlY3QoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgZ2V0RG9jdW1lbnRFbGVtZW50KHN0YXRlLmVsZW1lbnRzLnBvcHBlciksIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KTtcbiAgdmFyIHJlZmVyZW5jZUNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qoc3RhdGUuZWxlbWVudHMucmVmZXJlbmNlKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiByZWZlcmVuY2VDbGllbnRSZWN0LFxuICAgIGVsZW1lbnQ6IHBvcHBlclJlY3QsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSk7XG4gIHZhciBwb3BwZXJDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChPYmplY3QuYXNzaWduKHt9LCBwb3BwZXJSZWN0LCBwb3BwZXJPZmZzZXRzKSk7XG4gIHZhciBlbGVtZW50Q2xpZW50UmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyBwb3BwZXJDbGllbnRSZWN0IDogcmVmZXJlbmNlQ2xpZW50UmVjdDsgLy8gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgcmVjdFxuICAvLyAwIG9yIG5lZ2F0aXZlID0gd2l0aGluIHRoZSBjbGlwcGluZyByZWN0XG5cbiAgdmFyIG92ZXJmbG93T2Zmc2V0cyA9IHtcbiAgICB0b3A6IGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCxcbiAgICBib3R0b206IGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiBjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQsXG4gICAgcmlnaHQ6IGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodFxuICB9O1xuICB2YXIgb2Zmc2V0RGF0YSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0OyAvLyBPZmZzZXRzIGNhbiBiZSBhcHBsaWVkIG9ubHkgdG8gdGhlIHBvcHBlciBlbGVtZW50XG5cbiAgaWYgKGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgJiYgb2Zmc2V0RGF0YSkge1xuICAgIHZhciBvZmZzZXQgPSBvZmZzZXREYXRhW3BsYWNlbWVudF07XG4gICAgT2JqZWN0LmtleXMob3ZlcmZsb3dPZmZzZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBtdWx0aXBseSA9IFtyaWdodCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/IDEgOiAtMTtcbiAgICAgIHZhciBheGlzID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/ICd5JyA6ICd4JztcbiAgICAgIG92ZXJmbG93T2Zmc2V0c1trZXldICs9IG9mZnNldFtheGlzXSAqIG11bHRpcGx5O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG92ZXJmbG93T2Zmc2V0cztcbn0iLCAiaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHZhcmlhdGlvblBsYWNlbWVudHMsIGJhc2VQbGFjZW1lbnRzLCBwbGFjZW1lbnRzIGFzIGFsbFBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgX29wdGlvbnMkYWxsb3dlZEF1dG9QID0gX29wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gX29wdGlvbnMkYWxsb3dlZEF1dG9QID09PSB2b2lkIDAgPyBhbGxQbGFjZW1lbnRzIDogX29wdGlvbnMkYWxsb3dlZEF1dG9QO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCk7XG4gIHZhciBwbGFjZW1lbnRzID0gdmFyaWF0aW9uID8gZmxpcFZhcmlhdGlvbnMgPyB2YXJpYXRpb25QbGFjZW1lbnRzIDogdmFyaWF0aW9uUGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gdmFyaWF0aW9uO1xuICB9KSA6IGJhc2VQbGFjZW1lbnRzO1xuICB2YXIgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFsbG93ZWRBdXRvUGxhY2VtZW50cy5pbmRleE9mKHBsYWNlbWVudCkgPj0gMDtcbiAgfSk7XG5cbiAgaWYgKGFsbG93ZWRQbGFjZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cztcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXTogRmxvdyBzZWVtcyB0byBoYXZlIHByb2JsZW1zIHdpdGggdHdvIGFycmF5IHVuaW9ucy4uLlxuXG5cbiAgdmFyIG92ZXJmbG93cyA9IGFsbG93ZWRQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pW2dldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KV07XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICByZXR1cm4gT2JqZWN0LmtleXMob3ZlcmZsb3dzKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93c1thXSAtIG92ZXJmbG93c1tiXTtcbiAgfSk7XG59IiwgImltcG9ydCBnZXRPcHBvc2l0ZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgY29tcHV0ZUF1dG9QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyBib3R0b20sIHRvcCwgc3RhcnQsIHJpZ2h0LCBsZWZ0LCBhdXRvIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5mdW5jdGlvbiBnZXRFeHBhbmRlZEZhbGxiYWNrUGxhY2VtZW50cyhwbGFjZW1lbnQpIHtcbiAgaWYgKGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA9PT0gYXV0bykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHZhciBvcHBvc2l0ZVBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHJldHVybiBbZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSwgb3Bwb3NpdGVQbGFjZW1lbnQsIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KG9wcG9zaXRlUGxhY2VtZW50KV07XG59XG5cbmZ1bmN0aW9uIGZsaXAoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0uX3NraXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGFsdEF4aXMsXG4gICAgICBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgPSBvcHRpb25zLmZhbGxiYWNrUGxhY2VtZW50cyxcbiAgICAgIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmcsXG4gICAgICBib3VuZGFyeSA9IG9wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBvcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGZsaXBWYXJpYXRpbyA9IG9wdGlvbnMuZmxpcFZhcmlhdGlvbnMsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zJGZsaXBWYXJpYXRpbyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGZsaXBWYXJpYXRpbyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50cyA9IG9wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzO1xuICB2YXIgcHJlZmVycmVkUGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpO1xuICB2YXIgaXNCYXNlUGxhY2VtZW50ID0gYmFzZVBsYWNlbWVudCA9PT0gcHJlZmVycmVkUGxhY2VtZW50O1xuICB2YXIgZmFsbGJhY2tQbGFjZW1lbnRzID0gc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIHx8IChpc0Jhc2VQbGFjZW1lbnQgfHwgIWZsaXBWYXJpYXRpb25zID8gW2dldE9wcG9zaXRlUGxhY2VtZW50KHByZWZlcnJlZFBsYWNlbWVudCldIDogZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocHJlZmVycmVkUGxhY2VtZW50KSk7XG4gIHZhciBwbGFjZW1lbnRzID0gW3ByZWZlcnJlZFBsYWNlbWVudF0uY29uY2F0KGZhbGxiYWNrUGxhY2VtZW50cykucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA9PT0gYXV0byA/IGNvbXB1dGVBdXRvUGxhY2VtZW50KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZyxcbiAgICAgIGZsaXBWYXJpYXRpb25zOiBmbGlwVmFyaWF0aW9ucyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50czogYWxsb3dlZEF1dG9QbGFjZW1lbnRzXG4gICAgfSkgOiBwbGFjZW1lbnQpO1xuICB9LCBbXSk7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGNoZWNrc01hcCA9IG5ldyBNYXAoKTtcbiAgdmFyIG1ha2VGYWxsYmFja0NoZWNrcyA9IHRydWU7XG4gIHZhciBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnRzWzBdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGxhY2VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwbGFjZW1lbnQgPSBwbGFjZW1lbnRzW2ldO1xuXG4gICAgdmFyIF9iYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuXG4gICAgdmFyIGlzU3RhcnRWYXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gc3RhcnQ7XG4gICAgdmFyIGlzVmVydGljYWwgPSBbdG9wLCBib3R0b21dLmluZGV4T2YoX2Jhc2VQbGFjZW1lbnQpID49IDA7XG4gICAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG4gICAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nXG4gICAgfSk7XG4gICAgdmFyIG1haW5WYXJpYXRpb25TaWRlID0gaXNWZXJ0aWNhbCA/IGlzU3RhcnRWYXJpYXRpb24gPyByaWdodCA6IGxlZnQgOiBpc1N0YXJ0VmFyaWF0aW9uID8gYm90dG9tIDogdG9wO1xuXG4gICAgaWYgKHJlZmVyZW5jZVJlY3RbbGVuXSA+IHBvcHBlclJlY3RbbGVuXSkge1xuICAgICAgbWFpblZhcmlhdGlvblNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluVmFyaWF0aW9uU2lkZSk7XG4gICAgfVxuXG4gICAgdmFyIGFsdFZhcmlhdGlvblNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluVmFyaWF0aW9uU2lkZSk7XG4gICAgdmFyIGNoZWNrcyA9IFtdO1xuXG4gICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKG92ZXJmbG93W19iYXNlUGxhY2VtZW50XSA8PSAwKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1ttYWluVmFyaWF0aW9uU2lkZV0gPD0gMCwgb3ZlcmZsb3dbYWx0VmFyaWF0aW9uU2lkZV0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrcy5ldmVyeShmdW5jdGlvbiAoY2hlY2spIHtcbiAgICAgIHJldHVybiBjaGVjaztcbiAgICB9KSkge1xuICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50O1xuICAgICAgbWFrZUZhbGxiYWNrQ2hlY2tzID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjaGVja3NNYXAuc2V0KHBsYWNlbWVudCwgY2hlY2tzKTtcbiAgfVxuXG4gIGlmIChtYWtlRmFsbGJhY2tDaGVja3MpIHtcbiAgICAvLyBgMmAgbWF5IGJlIGRlc2lyZWQgaW4gc29tZSBjYXNlcyBcdTIwMTMgcmVzZWFyY2ggbGF0ZXJcbiAgICB2YXIgbnVtYmVyT2ZDaGVja3MgPSBmbGlwVmFyaWF0aW9ucyA/IDMgOiAxO1xuXG4gICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoX2kpIHtcbiAgICAgIHZhciBmaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50cy5maW5kKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICAgICAgdmFyIGNoZWNrcyA9IGNoZWNrc01hcC5nZXQocGxhY2VtZW50KTtcblxuICAgICAgICBpZiAoY2hlY2tzKSB7XG4gICAgICAgICAgcmV0dXJuIGNoZWNrcy5zbGljZSgwLCBfaSkuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hlY2s7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZml0dGluZ1BsYWNlbWVudCkge1xuICAgICAgICBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBmaXR0aW5nUGxhY2VtZW50O1xuICAgICAgICByZXR1cm4gXCJicmVha1wiO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKHZhciBfaSA9IG51bWJlck9mQ2hlY2tzOyBfaSA+IDA7IF9pLS0pIHtcbiAgICAgIHZhciBfcmV0ID0gX2xvb3AoX2kpO1xuXG4gICAgICBpZiAoX3JldCA9PT0gXCJicmVha1wiKSBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdGUucGxhY2VtZW50ICE9PSBmaXJzdEZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwID0gdHJ1ZTtcbiAgICBzdGF0ZS5wbGFjZW1lbnQgPSBmaXJzdEZpdHRpbmdQbGFjZW1lbnQ7XG4gICAgc3RhdGUucmVzZXQgPSB0cnVlO1xuICB9XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdmbGlwJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IGZsaXAsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsnb2Zmc2V0J10sXG4gIGRhdGE6IHtcbiAgICBfc2tpcDogZmFsc2VcbiAgfVxufTsiLCAiaW1wb3J0IHsgdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKSB7XG4gIGlmIChwcmV2ZW50ZWRPZmZzZXRzID09PSB2b2lkIDApIHtcbiAgICBwcmV2ZW50ZWRPZmZzZXRzID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b3A6IG92ZXJmbG93LnRvcCAtIHJlY3QuaGVpZ2h0IC0gcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIHJpZ2h0OiBvdmVyZmxvdy5yaWdodCAtIHJlY3Qud2lkdGggKyBwcmV2ZW50ZWRPZmZzZXRzLngsXG4gICAgYm90dG9tOiBvdmVyZmxvdy5ib3R0b20gLSByZWN0LmhlaWdodCArIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICBsZWZ0OiBvdmVyZmxvdy5sZWZ0IC0gcmVjdC53aWR0aCAtIHByZXZlbnRlZE9mZnNldHMueFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIFt0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnRdLnNvbWUoZnVuY3Rpb24gKHNpZGUpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dbc2lkZV0gPj0gMDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhpZGUoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgcHJldmVudGVkT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucHJldmVudE92ZXJmbG93O1xuICB2YXIgcmVmZXJlbmNlT3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGVsZW1lbnRDb250ZXh0OiAncmVmZXJlbmNlJ1xuICB9KTtcbiAgdmFyIHBvcHBlckFsdE92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBhbHRCb3VuZGFyeTogdHJ1ZVxuICB9KTtcbiAgdmFyIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHJlZmVyZW5jZU92ZXJmbG93LCByZWZlcmVuY2VSZWN0KTtcbiAgdmFyIHBvcHBlckVzY2FwZU9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhwb3BwZXJBbHRPdmVyZmxvdywgcG9wcGVyUmVjdCwgcHJldmVudGVkT2Zmc2V0cyk7XG4gIHZhciBpc1JlZmVyZW5jZUhpZGRlbiA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChyZWZlcmVuY2VDbGlwcGluZ09mZnNldHMpO1xuICB2YXIgaGFzUG9wcGVyRXNjYXBlZCA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChwb3BwZXJFc2NhcGVPZmZzZXRzKTtcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IHtcbiAgICByZWZlcmVuY2VDbGlwcGluZ09mZnNldHM6IHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyxcbiAgICBwb3BwZXJFc2NhcGVPZmZzZXRzOiBwb3BwZXJFc2NhcGVPZmZzZXRzLFxuICAgIGlzUmVmZXJlbmNlSGlkZGVuOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICBoYXNQb3BwZXJFc2NhcGVkOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH07XG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcmVmZXJlbmNlLWhpZGRlbic6IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgICdkYXRhLXBvcHBlci1lc2NhcGVkJzogaGFzUG9wcGVyRXNjYXBlZFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2hpZGUnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddLFxuICBmbjogaGlkZVxufTsiLCAiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIHBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCByZWN0cywgb2Zmc2V0KSB7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICB2YXIgaW52ZXJ0RGlzdGFuY2UgPSBbbGVmdCwgdG9wXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDAgPyAtMSA6IDE7XG5cbiAgdmFyIF9yZWYgPSB0eXBlb2Ygb2Zmc2V0ID09PSAnZnVuY3Rpb24nID8gb2Zmc2V0KE9iamVjdC5hc3NpZ24oe30sIHJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSkpIDogb2Zmc2V0LFxuICAgICAgc2tpZGRpbmcgPSBfcmVmWzBdLFxuICAgICAgZGlzdGFuY2UgPSBfcmVmWzFdO1xuXG4gIHNraWRkaW5nID0gc2tpZGRpbmcgfHwgMDtcbiAgZGlzdGFuY2UgPSAoZGlzdGFuY2UgfHwgMCkgKiBpbnZlcnREaXN0YW5jZTtcbiAgcmV0dXJuIFtsZWZ0LCByaWdodF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8ge1xuICAgIHg6IGRpc3RhbmNlLFxuICAgIHk6IHNraWRkaW5nXG4gIH0gOiB7XG4gICAgeDogc2tpZGRpbmcsXG4gICAgeTogZGlzdGFuY2VcbiAgfTtcbn1cblxuZnVuY3Rpb24gb2Zmc2V0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYyLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZjIubmFtZTtcbiAgdmFyIF9vcHRpb25zJG9mZnNldCA9IG9wdGlvbnMub2Zmc2V0LFxuICAgICAgb2Zmc2V0ID0gX29wdGlvbnMkb2Zmc2V0ID09PSB2b2lkIDAgPyBbMCwgMF0gOiBfb3B0aW9ucyRvZmZzZXQ7XG4gIHZhciBkYXRhID0gcGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgYWNjW3BsYWNlbWVudF0gPSBkaXN0YW5jZUFuZFNraWRkaW5nVG9YWShwbGFjZW1lbnQsIHN0YXRlLnJlY3RzLCBvZmZzZXQpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgdmFyIF9kYXRhJHN0YXRlJHBsYWNlbWVudCA9IGRhdGFbc3RhdGUucGxhY2VtZW50XSxcbiAgICAgIHggPSBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQueCxcbiAgICAgIHkgPSBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQueTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzICE9IG51bGwpIHtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueCArPSB4O1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy55ICs9IHk7XG4gIH1cblxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gZGF0YTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ29mZnNldCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgZm46IG9mZnNldFxufTsiLCAiaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuLi91dGlscy9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuXG5mdW5jdGlvbiBwb3BwZXJPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIC8vIE9mZnNldHMgYXJlIHRoZSBhY3R1YWwgcG9zaXRpb24gdGhlIHBvcHBlciBuZWVkcyB0byBoYXZlIHRvIGJlXG4gIC8vIHByb3Blcmx5IHBvc2l0aW9uZWQgbmVhciBpdHMgcmVmZXJlbmNlIGVsZW1lbnRcbiAgLy8gVGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBwbGFjZW1lbnQsIGFuZCB3aWxsIGJlIGFkanVzdGVkIGJ5XG4gIC8vIHRoZSBtb2RpZmllcnMgaW4gdGhlIG5leHQgc3RlcFxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogc3RhdGUucmVjdHMucmVmZXJlbmNlLFxuICAgIGVsZW1lbnQ6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3BvcHBlck9mZnNldHMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3JlYWQnLFxuICBmbjogcG9wcGVyT2Zmc2V0cyxcbiAgZGF0YToge31cbn07IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEFsdEF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufSIsICJpbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20sIHN0YXJ0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QWx0QXhpcyBmcm9tIFwiLi4vdXRpbHMvZ2V0QWx0QXhpcy5qc1wiO1xuaW1wb3J0IHsgd2l0aGluLCB3aXRoaW5NYXhDbGFtcCB9IGZyb20gXCIuLi91dGlscy93aXRoaW4uanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuLi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanNcIjtcbmltcG9ydCB7IG1pbiBhcyBtYXRoTWluLCBtYXggYXMgbWF0aE1heCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIHByZXZlbnRPdmVyZmxvdyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IGZhbHNlIDogX29wdGlvbnMkYWx0QXhpcyxcbiAgICAgIGJvdW5kYXJ5ID0gb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IG9wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBvcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyxcbiAgICAgIF9vcHRpb25zJHRldGhlciA9IG9wdGlvbnMudGV0aGVyLFxuICAgICAgdGV0aGVyID0gX29wdGlvbnMkdGV0aGVyID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkdGV0aGVyLFxuICAgICAgX29wdGlvbnMkdGV0aGVyT2Zmc2V0ID0gb3B0aW9ucy50ZXRoZXJPZmZzZXQsXG4gICAgICB0ZXRoZXJPZmZzZXQgPSBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQ7XG4gIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5XG4gIH0pO1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIHZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgaXNCYXNlUGxhY2VtZW50ID0gIXZhcmlhdGlvbjtcbiAgdmFyIG1haW5BeGlzID0gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpO1xuICB2YXIgYWx0QXhpcyA9IGdldEFsdEF4aXMobWFpbkF4aXMpO1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cztcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgdGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0ID09PSAnZnVuY3Rpb24nID8gdGV0aGVyT2Zmc2V0KE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSkpIDogdGV0aGVyT2Zmc2V0O1xuICB2YXIgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlID0gdHlwZW9mIHRldGhlck9mZnNldFZhbHVlID09PSAnbnVtYmVyJyA/IHtcbiAgICBtYWluQXhpczogdGV0aGVyT2Zmc2V0VmFsdWUsXG4gICAgYWx0QXhpczogdGV0aGVyT2Zmc2V0VmFsdWVcbiAgfSA6IE9iamVjdC5hc3NpZ24oe1xuICAgIG1haW5BeGlzOiAwLFxuICAgIGFsdEF4aXM6IDBcbiAgfSwgdGV0aGVyT2Zmc2V0VmFsdWUpO1xuICB2YXIgb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0ID8gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXRbc3RhdGUucGxhY2VtZW50XSA6IG51bGw7XG4gIHZhciBkYXRhID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuXG4gIGlmICghcG9wcGVyT2Zmc2V0cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclN0YXRlJDtcblxuICAgIHZhciBtYWluU2lkZSA9IG1haW5BeGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICAgIHZhciBhbHRTaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgIHZhciBvZmZzZXQgPSBwb3BwZXJPZmZzZXRzW21haW5BeGlzXTtcbiAgICB2YXIgbWluID0gb2Zmc2V0ICsgb3ZlcmZsb3dbbWFpblNpZGVdO1xuICAgIHZhciBtYXggPSBvZmZzZXQgLSBvdmVyZmxvd1thbHRTaWRlXTtcbiAgICB2YXIgYWRkaXRpdmUgPSB0ZXRoZXIgPyAtcG9wcGVyUmVjdFtsZW5dIC8gMiA6IDA7XG4gICAgdmFyIG1pbkxlbiA9IHZhcmlhdGlvbiA9PT0gc3RhcnQgPyByZWZlcmVuY2VSZWN0W2xlbl0gOiBwb3BwZXJSZWN0W2xlbl07XG4gICAgdmFyIG1heExlbiA9IHZhcmlhdGlvbiA9PT0gc3RhcnQgPyAtcG9wcGVyUmVjdFtsZW5dIDogLXJlZmVyZW5jZVJlY3RbbGVuXTsgLy8gV2UgbmVlZCB0byBpbmNsdWRlIHRoZSBhcnJvdyBpbiB0aGUgY2FsY3VsYXRpb24gc28gdGhlIGFycm93IGRvZXNuJ3QgZ29cbiAgICAvLyBvdXRzaWRlIHRoZSByZWZlcmVuY2UgYm91bmRzXG5cbiAgICB2YXIgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3c7XG4gICAgdmFyIGFycm93UmVjdCA9IHRldGhlciAmJiBhcnJvd0VsZW1lbnQgPyBnZXRMYXlvdXRSZWN0KGFycm93RWxlbWVudCkgOiB7XG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMFxuICAgIH07XG4gICAgdmFyIGFycm93UGFkZGluZ09iamVjdCA9IHN0YXRlLm1vZGlmaWVyc0RhdGFbJ2Fycm93I3BlcnNpc3RlbnQnXSA/IHN0YXRlLm1vZGlmaWVyc0RhdGFbJ2Fycm93I3BlcnNpc3RlbnQnXS5wYWRkaW5nIDogZ2V0RnJlc2hTaWRlT2JqZWN0KCk7XG4gICAgdmFyIGFycm93UGFkZGluZ01pbiA9IGFycm93UGFkZGluZ09iamVjdFttYWluU2lkZV07XG4gICAgdmFyIGFycm93UGFkZGluZ01heCA9IGFycm93UGFkZGluZ09iamVjdFthbHRTaWRlXTsgLy8gSWYgdGhlIHJlZmVyZW5jZSBsZW5ndGggaXMgc21hbGxlciB0aGFuIHRoZSBhcnJvdyBsZW5ndGgsIHdlIGRvbid0IHdhbnRcbiAgICAvLyB0byBpbmNsdWRlIGl0cyBmdWxsIHNpemUgaW4gdGhlIGNhbGN1bGF0aW9uLiBJZiB0aGUgcmVmZXJlbmNlIGlzIHNtYWxsXG4gICAgLy8gYW5kIG5lYXIgdGhlIGVkZ2Ugb2YgYSBib3VuZGFyeSwgdGhlIHBvcHBlciBjYW4gb3ZlcmZsb3cgZXZlbiBpZiB0aGVcbiAgICAvLyByZWZlcmVuY2UgaXMgbm90IG92ZXJmbG93aW5nIGFzIHdlbGwgKGUuZy4gdmlydHVhbCBlbGVtZW50cyB3aXRoIG5vXG4gICAgLy8gd2lkdGggb3IgaGVpZ2h0KVxuXG4gICAgdmFyIGFycm93TGVuID0gd2l0aGluKDAsIHJlZmVyZW5jZVJlY3RbbGVuXSwgYXJyb3dSZWN0W2xlbl0pO1xuICAgIHZhciBtaW5PZmZzZXQgPSBpc0Jhc2VQbGFjZW1lbnQgPyByZWZlcmVuY2VSZWN0W2xlbl0gLyAyIC0gYWRkaXRpdmUgLSBhcnJvd0xlbiAtIGFycm93UGFkZGluZ01pbiAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcyA6IG1pbkxlbiAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzO1xuICAgIHZhciBtYXhPZmZzZXQgPSBpc0Jhc2VQbGFjZW1lbnQgPyAtcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiArIGFkZGl0aXZlICsgYXJyb3dMZW4gKyBhcnJvd1BhZGRpbmdNYXggKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXMgOiBtYXhMZW4gKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcztcbiAgICB2YXIgYXJyb3dPZmZzZXRQYXJlbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdyAmJiBnZXRPZmZzZXRQYXJlbnQoc3RhdGUuZWxlbWVudHMuYXJyb3cpO1xuICAgIHZhciBjbGllbnRPZmZzZXQgPSBhcnJvd09mZnNldFBhcmVudCA/IG1haW5BeGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRUb3AgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudExlZnQgfHwgMCA6IDA7XG4gICAgdmFyIG9mZnNldE1vZGlmaWVyVmFsdWUgPSAoX29mZnNldE1vZGlmaWVyU3RhdGUkID0gb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogb2Zmc2V0TW9kaWZpZXJTdGF0ZVttYWluQXhpc10pICE9IG51bGwgPyBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQgOiAwO1xuICAgIHZhciB0ZXRoZXJNaW4gPSBvZmZzZXQgKyBtaW5PZmZzZXQgLSBvZmZzZXRNb2RpZmllclZhbHVlIC0gY2xpZW50T2Zmc2V0O1xuICAgIHZhciB0ZXRoZXJNYXggPSBvZmZzZXQgKyBtYXhPZmZzZXQgLSBvZmZzZXRNb2RpZmllclZhbHVlO1xuICAgIHZhciBwcmV2ZW50ZWRPZmZzZXQgPSB3aXRoaW4odGV0aGVyID8gbWF0aE1pbihtaW4sIHRldGhlck1pbikgOiBtaW4sIG9mZnNldCwgdGV0aGVyID8gbWF0aE1heChtYXgsIHRldGhlck1heCkgOiBtYXgpO1xuICAgIHBvcHBlck9mZnNldHNbbWFpbkF4aXNdID0gcHJldmVudGVkT2Zmc2V0O1xuICAgIGRhdGFbbWFpbkF4aXNdID0gcHJldmVudGVkT2Zmc2V0IC0gb2Zmc2V0O1xuICB9XG5cbiAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyO1xuXG4gICAgdmFyIF9tYWluU2lkZSA9IG1haW5BeGlzID09PSAneCcgPyB0b3AgOiBsZWZ0O1xuXG4gICAgdmFyIF9hbHRTaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IGJvdHRvbSA6IHJpZ2h0O1xuXG4gICAgdmFyIF9vZmZzZXQgPSBwb3BwZXJPZmZzZXRzW2FsdEF4aXNdO1xuXG4gICAgdmFyIF9sZW4gPSBhbHRBeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgICB2YXIgX21pbiA9IF9vZmZzZXQgKyBvdmVyZmxvd1tfbWFpblNpZGVdO1xuXG4gICAgdmFyIF9tYXggPSBfb2Zmc2V0IC0gb3ZlcmZsb3dbX2FsdFNpZGVdO1xuXG4gICAgdmFyIGlzT3JpZ2luU2lkZSA9IFt0b3AsIGxlZnRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgIT09IC0xO1xuXG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclZhbHVlID0gKF9vZmZzZXRNb2RpZmllclN0YXRlJDIgPSBvZmZzZXRNb2RpZmllclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvZmZzZXRNb2RpZmllclN0YXRlW2FsdEF4aXNdKSAhPSBudWxsID8gX29mZnNldE1vZGlmaWVyU3RhdGUkMiA6IDA7XG5cbiAgICB2YXIgX3RldGhlck1pbiA9IGlzT3JpZ2luU2lkZSA/IF9taW4gOiBfb2Zmc2V0IC0gcmVmZXJlbmNlUmVjdFtfbGVuXSAtIHBvcHBlclJlY3RbX2xlbl0gLSBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5hbHRBeGlzO1xuXG4gICAgdmFyIF90ZXRoZXJNYXggPSBpc09yaWdpblNpZGUgPyBfb2Zmc2V0ICsgcmVmZXJlbmNlUmVjdFtfbGVuXSArIHBvcHBlclJlY3RbX2xlbl0gLSBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5hbHRBeGlzIDogX21heDtcblxuICAgIHZhciBfcHJldmVudGVkT2Zmc2V0ID0gdGV0aGVyICYmIGlzT3JpZ2luU2lkZSA/IHdpdGhpbk1heENsYW1wKF90ZXRoZXJNaW4sIF9vZmZzZXQsIF90ZXRoZXJNYXgpIDogd2l0aGluKHRldGhlciA/IF90ZXRoZXJNaW4gOiBfbWluLCBfb2Zmc2V0LCB0ZXRoZXIgPyBfdGV0aGVyTWF4IDogX21heCk7XG5cbiAgICBwb3BwZXJPZmZzZXRzW2FsdEF4aXNdID0gX3ByZXZlbnRlZE9mZnNldDtcbiAgICBkYXRhW2FsdEF4aXNdID0gX3ByZXZlbnRlZE9mZnNldCAtIF9vZmZzZXQ7XG4gIH1cblxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gZGF0YTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3ByZXZlbnRPdmVyZmxvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBwcmV2ZW50T3ZlcmZsb3csXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsnb2Zmc2V0J11cbn07IiwgImV4cG9ydCB7IGRlZmF1bHQgYXMgYXBwbHlTdHlsZXMgfSBmcm9tIFwiLi9hcHBseVN0eWxlcy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhcnJvdyB9IGZyb20gXCIuL2Fycm93LmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbXB1dGVTdHlsZXMgfSBmcm9tIFwiLi9jb21wdXRlU3R5bGVzLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGV2ZW50TGlzdGVuZXJzIH0gZnJvbSBcIi4vZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmxpcCB9IGZyb20gXCIuL2ZsaXAuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaGlkZSB9IGZyb20gXCIuL2hpZGUuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgb2Zmc2V0IH0gZnJvbSBcIi4vb2Zmc2V0LmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBvcHBlck9mZnNldHMgfSBmcm9tIFwiLi9wb3BwZXJPZmZzZXRzLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHByZXZlbnRPdmVyZmxvdyB9IGZyb20gXCIuL3ByZXZlbnRPdmVyZmxvdy5qc1wiOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRIVE1MRWxlbWVudFNjcm9sbChlbGVtZW50KSB7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgfTtcbn0iLCAiaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldEhUTUxFbGVtZW50U2Nyb2xsIGZyb20gXCIuL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXROb2RlU2Nyb2xsKG5vZGUpIHtcbiAgaWYgKG5vZGUgPT09IGdldFdpbmRvdyhub2RlKSB8fCAhaXNIVE1MRWxlbWVudChub2RlKSkge1xuICAgIHJldHVybiBnZXRXaW5kb3dTY3JvbGwobm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGdldEhUTUxFbGVtZW50U2Nyb2xsKG5vZGUpO1xuICB9XG59IiwgImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZVNjcm9sbCBmcm9tIFwiLi9nZXROb2RlU2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudFNjYWxlZChlbGVtZW50KSB7XG4gIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IHJvdW5kKHJlY3Qud2lkdGgpIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxO1xuICB2YXIgc2NhbGVZID0gcm91bmQocmVjdC5oZWlnaHQpIC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMTtcbiAgcmV0dXJuIHNjYWxlWCAhPT0gMSB8fCBzY2FsZVkgIT09IDE7XG59IC8vIFJldHVybnMgdGhlIGNvbXBvc2l0ZSByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC5cbi8vIENvbXBvc2l0ZSBtZWFucyBpdCB0YWtlcyBpbnRvIGFjY291bnQgdHJhbnNmb3JtcyBhcyB3ZWxsIGFzIGxheW91dC5cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wb3NpdGVSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnQsIGlzRml4ZWQpIHtcbiAgaWYgKGlzRml4ZWQgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudElzU2NhbGVkID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGlzRWxlbWVudFNjYWxlZChvZmZzZXRQYXJlbnQpO1xuICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnRJc1NjYWxlZCwgaXNGaXhlZCk7XG4gIHZhciBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgdmFyIG9mZnNldHMgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMDc4XG4gICAgaXNTY3JvbGxQYXJlbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cblxuICAgIGlmIChpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgIG9mZnNldHMgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlKTtcbiAgICAgIG9mZnNldHMueCArPSBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSArPSBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCxcbiAgICB5OiByZWN0LnRvcCArIHNjcm9sbC5zY3JvbGxUb3AgLSBvZmZzZXRzLnksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufSIsICJpbXBvcnQgeyBtb2RpZmllclBoYXNlcyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBzb3VyY2U6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ5ODc1MjU1XG5cbmZ1bmN0aW9uIG9yZGVyKG1vZGlmaWVycykge1xuICB2YXIgbWFwID0gbmV3IE1hcCgpO1xuICB2YXIgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBtYXAuc2V0KG1vZGlmaWVyLm5hbWUsIG1vZGlmaWVyKTtcbiAgfSk7IC8vIE9uIHZpc2l0aW5nIG9iamVjdCwgY2hlY2sgZm9yIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHZpc2l0IHRoZW0gcmVjdXJzaXZlbHlcblxuICBmdW5jdGlvbiBzb3J0KG1vZGlmaWVyKSB7XG4gICAgdmlzaXRlZC5hZGQobW9kaWZpZXIubmFtZSk7XG4gICAgdmFyIHJlcXVpcmVzID0gW10uY29uY2F0KG1vZGlmaWVyLnJlcXVpcmVzIHx8IFtdLCBtb2RpZmllci5yZXF1aXJlc0lmRXhpc3RzIHx8IFtdKTtcbiAgICByZXF1aXJlcy5mb3JFYWNoKGZ1bmN0aW9uIChkZXApIHtcbiAgICAgIGlmICghdmlzaXRlZC5oYXMoZGVwKSkge1xuICAgICAgICB2YXIgZGVwTW9kaWZpZXIgPSBtYXAuZ2V0KGRlcCk7XG5cbiAgICAgICAgaWYgKGRlcE1vZGlmaWVyKSB7XG4gICAgICAgICAgc29ydChkZXBNb2RpZmllcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXN1bHQucHVzaChtb2RpZmllcik7XG4gIH1cblxuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBpZiAoIXZpc2l0ZWQuaGFzKG1vZGlmaWVyLm5hbWUpKSB7XG4gICAgICAvLyBjaGVjayBmb3IgdmlzaXRlZCBvYmplY3RcbiAgICAgIHNvcnQobW9kaWZpZXIpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9yZGVyTW9kaWZpZXJzKG1vZGlmaWVycykge1xuICAvLyBvcmRlciBiYXNlZCBvbiBkZXBlbmRlbmNpZXNcbiAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcihtb2RpZmllcnMpOyAvLyBvcmRlciBiYXNlZCBvbiBwaGFzZVxuXG4gIHJldHVybiBtb2RpZmllclBoYXNlcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGhhc2UpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgIHJldHVybiBtb2RpZmllci5waGFzZSA9PT0gcGhhc2U7XG4gICAgfSkpO1xuICB9LCBbXSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlYm91bmNlKGZuKSB7XG4gIHZhciBwZW5kaW5nO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghcGVuZGluZykge1xuICAgICAgcGVuZGluZyA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHBlbmRpbmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmVzb2x2ZShmbigpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGVuZGluZztcbiAgfTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VCeU5hbWUobW9kaWZpZXJzKSB7XG4gIHZhciBtZXJnZWQgPSBtb2RpZmllcnMucmVkdWNlKGZ1bmN0aW9uIChtZXJnZWQsIGN1cnJlbnQpIHtcbiAgICB2YXIgZXhpc3RpbmcgPSBtZXJnZWRbY3VycmVudC5uYW1lXTtcbiAgICBtZXJnZWRbY3VycmVudC5uYW1lXSA9IGV4aXN0aW5nID8gT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcsIGN1cnJlbnQsIHtcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLm9wdGlvbnMsIGN1cnJlbnQub3B0aW9ucyksXG4gICAgICBkYXRhOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5kYXRhLCBjdXJyZW50LmRhdGEpXG4gICAgfSkgOiBjdXJyZW50O1xuICAgIHJldHVybiBtZXJnZWQ7XG4gIH0sIHt9KTsgLy8gSUUxMSBkb2VzIG5vdCBzdXBwb3J0IE9iamVjdC52YWx1ZXNcblxuICByZXR1cm4gT2JqZWN0LmtleXMobWVyZ2VkKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBtZXJnZWRba2V5XTtcbiAgfSk7XG59IiwgImltcG9ydCBnZXRDb21wb3NpdGVSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2RvbS11dGlscy9saXN0U2Nyb2xsUGFyZW50cy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgb3JkZXJNb2RpZmllcnMgZnJvbSBcIi4vdXRpbHMvb3JkZXJNb2RpZmllcnMuanNcIjtcbmltcG9ydCBkZWJvdW5jZSBmcm9tIFwiLi91dGlscy9kZWJvdW5jZS5qc1wiO1xuaW1wb3J0IG1lcmdlQnlOYW1lIGZyb20gXCIuL3V0aWxzL21lcmdlQnlOYW1lLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7XG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICBtb2RpZmllcnM6IFtdLFxuICBzdHJhdGVneTogJ2Fic29sdXRlJ1xufTtcblxuZnVuY3Rpb24gYXJlVmFsaWRFbGVtZW50cygpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiAhYXJncy5zb21lKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgcmV0dXJuICEoZWxlbWVudCAmJiB0eXBlb2YgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QgPT09ICdmdW5jdGlvbicpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcHBlckdlbmVyYXRvcihnZW5lcmF0b3JPcHRpb25zKSB7XG4gIGlmIChnZW5lcmF0b3JPcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBnZW5lcmF0b3JPcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX2dlbmVyYXRvck9wdGlvbnMgPSBnZW5lcmF0b3JPcHRpb25zLFxuICAgICAgX2dlbmVyYXRvck9wdGlvbnMkZGVmID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE1vZGlmaWVycyxcbiAgICAgIGRlZmF1bHRNb2RpZmllcnMgPSBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPT09IHZvaWQgMCA/IFtdIDogX2dlbmVyYXRvck9wdGlvbnMkZGVmLFxuICAgICAgX2dlbmVyYXRvck9wdGlvbnMkZGVmMiA9IF9nZW5lcmF0b3JPcHRpb25zLmRlZmF1bHRPcHRpb25zLFxuICAgICAgZGVmYXVsdE9wdGlvbnMgPSBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID09PSB2b2lkIDAgPyBERUZBVUxUX09QVElPTlMgOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyO1xuICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlUG9wcGVyKHJlZmVyZW5jZSwgcG9wcGVyLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zO1xuICAgIH1cblxuICAgIHZhciBzdGF0ZSA9IHtcbiAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICBvcmRlcmVkTW9kaWZpZXJzOiBbXSxcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfT1BUSU9OUywgZGVmYXVsdE9wdGlvbnMpLFxuICAgICAgbW9kaWZpZXJzRGF0YToge30sXG4gICAgICBlbGVtZW50czoge1xuICAgICAgICByZWZlcmVuY2U6IHJlZmVyZW5jZSxcbiAgICAgICAgcG9wcGVyOiBwb3BwZXJcbiAgICAgIH0sXG4gICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgIHN0eWxlczoge31cbiAgICB9O1xuICAgIHZhciBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgdmFyIGlzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgdmFyIGluc3RhbmNlID0ge1xuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgc2V0T3B0aW9uczogZnVuY3Rpb24gc2V0T3B0aW9ucyhzZXRPcHRpb25zQWN0aW9uKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gdHlwZW9mIHNldE9wdGlvbnNBY3Rpb24gPT09ICdmdW5jdGlvbicgPyBzZXRPcHRpb25zQWN0aW9uKHN0YXRlLm9wdGlvbnMpIDogc2V0T3B0aW9uc0FjdGlvbjtcbiAgICAgICAgY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICBzdGF0ZS5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIHN0YXRlLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICBzdGF0ZS5zY3JvbGxQYXJlbnRzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogaXNFbGVtZW50KHJlZmVyZW5jZSkgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UpIDogcmVmZXJlbmNlLmNvbnRleHRFbGVtZW50ID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlLmNvbnRleHRFbGVtZW50KSA6IFtdLFxuICAgICAgICAgIHBvcHBlcjogbGlzdFNjcm9sbFBhcmVudHMocG9wcGVyKVxuICAgICAgICB9OyAvLyBPcmRlcnMgdGhlIG1vZGlmaWVycyBiYXNlZCBvbiB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGBwaGFzZWBcbiAgICAgICAgLy8gcHJvcGVydGllc1xuXG4gICAgICAgIHZhciBvcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJNb2RpZmllcnMobWVyZ2VCeU5hbWUoW10uY29uY2F0KGRlZmF1bHRNb2RpZmllcnMsIHN0YXRlLm9wdGlvbnMubW9kaWZpZXJzKSkpOyAvLyBTdHJpcCBvdXQgZGlzYWJsZWQgbW9kaWZpZXJzXG5cbiAgICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgcmV0dXJuIG0uZW5hYmxlZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJ1bk1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UudXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgLy8gU3luYyB1cGRhdGUgXHUyMDEzIGl0IHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGVkLCBldmVuIGlmIG5vdCBuZWNlc3NhcnkuIFRoaXNcbiAgICAgIC8vIGlzIHVzZWZ1bCBmb3IgbG93IGZyZXF1ZW5jeSB1cGRhdGVzIHdoZXJlIHN5bmMgYmVoYXZpb3Igc2ltcGxpZmllcyB0aGVcbiAgICAgIC8vIGxvZ2ljLlxuICAgICAgLy8gRm9yIGhpZ2ggZnJlcXVlbmN5IHVwZGF0ZXMgKGUuZy4gYHJlc2l6ZWAgYW5kIGBzY3JvbGxgIGV2ZW50cyksIGFsd2F5c1xuICAgICAgLy8gcHJlZmVyIHRoZSBhc3luYyBQb3BwZXIjdXBkYXRlIG1ldGhvZFxuICAgICAgZm9yY2VVcGRhdGU6IGZ1bmN0aW9uIGZvcmNlVXBkYXRlKCkge1xuICAgICAgICBpZiAoaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX3N0YXRlJGVsZW1lbnRzID0gc3RhdGUuZWxlbWVudHMsXG4gICAgICAgICAgICByZWZlcmVuY2UgPSBfc3RhdGUkZWxlbWVudHMucmVmZXJlbmNlLFxuICAgICAgICAgICAgcG9wcGVyID0gX3N0YXRlJGVsZW1lbnRzLnBvcHBlcjsgLy8gRG9uJ3QgcHJvY2VlZCBpZiBgcmVmZXJlbmNlYCBvciBgcG9wcGVyYCBhcmUgbm90IHZhbGlkIGVsZW1lbnRzXG4gICAgICAgIC8vIGFueW1vcmVcblxuICAgICAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIFN0b3JlIHRoZSByZWZlcmVuY2UgYW5kIHBvcHBlciByZWN0cyB0byBiZSByZWFkIGJ5IG1vZGlmaWVyc1xuXG5cbiAgICAgICAgc3RhdGUucmVjdHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBnZXRDb21wb3NpdGVSZWN0KHJlZmVyZW5jZSwgZ2V0T2Zmc2V0UGFyZW50KHBvcHBlciksIHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3kgPT09ICdmaXhlZCcpLFxuICAgICAgICAgIHBvcHBlcjogZ2V0TGF5b3V0UmVjdChwb3BwZXIpXG4gICAgICAgIH07IC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIHJlc2V0IHRoZSBjdXJyZW50IHVwZGF0ZSBjeWNsZS4gVGhlXG4gICAgICAgIC8vIG1vc3QgY29tbW9uIHVzZSBjYXNlIGZvciB0aGlzIGlzIHRoZSBgZmxpcGAgbW9kaWZpZXIgY2hhbmdpbmcgdGhlXG4gICAgICAgIC8vIHBsYWNlbWVudCwgd2hpY2ggdGhlbiBuZWVkcyB0byByZS1ydW4gYWxsIHRoZSBtb2RpZmllcnMsIGJlY2F1c2UgdGhlXG4gICAgICAgIC8vIGxvZ2ljIHdhcyBwcmV2aW91c2x5IHJhbiBmb3IgdGhlIHByZXZpb3VzIHBsYWNlbWVudCBhbmQgaXMgdGhlcmVmb3JlXG4gICAgICAgIC8vIHN0YWxlL2luY29ycmVjdFxuXG4gICAgICAgIHN0YXRlLnJlc2V0ID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLnBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50OyAvLyBPbiBlYWNoIHVwZGF0ZSBjeWNsZSwgdGhlIGBtb2RpZmllcnNEYXRhYCBwcm9wZXJ0eSBmb3IgZWFjaCBtb2RpZmllclxuICAgICAgICAvLyBpcyBmaWxsZWQgd2l0aCB0aGUgaW5pdGlhbCBkYXRhIHNwZWNpZmllZCBieSB0aGUgbW9kaWZpZXIuIFRoaXMgbWVhbnNcbiAgICAgICAgLy8gaXQgZG9lc24ndCBwZXJzaXN0IGFuZCBpcyBmcmVzaCBvbiBlYWNoIHVwZGF0ZS5cbiAgICAgICAgLy8gVG8gZW5zdXJlIHBlcnNpc3RlbnQgZGF0YSwgdXNlIGAke25hbWV9I3BlcnNpc3RlbnRgXG5cbiAgICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgICAgIHJldHVybiBzdGF0ZS5tb2RpZmllcnNEYXRhW21vZGlmaWVyLm5hbWVdID0gT2JqZWN0LmFzc2lnbih7fSwgbW9kaWZpZXIuZGF0YSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIGlmIChzdGF0ZS5yZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGluZGV4ID0gLTE7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX3N0YXRlJG9yZGVyZWRNb2RpZmllID0gc3RhdGUub3JkZXJlZE1vZGlmaWVyc1tpbmRleF0sXG4gICAgICAgICAgICAgIGZuID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLmZuLFxuICAgICAgICAgICAgICBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLm9wdGlvbnMsXG4gICAgICAgICAgICAgIF9vcHRpb25zID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllMiA9PT0gdm9pZCAwID8ge30gOiBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyLFxuICAgICAgICAgICAgICBuYW1lID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLm5hbWU7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IGZuKHtcbiAgICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgICBvcHRpb25zOiBfb3B0aW9ucyxcbiAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlXG4gICAgICAgICAgICB9KSB8fCBzdGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBBc3luYyBhbmQgb3B0aW1pc3RpY2FsbHkgb3B0aW1pemVkIHVwZGF0ZSBcdTIwMTMgaXQgd2lsbCBub3QgYmUgZXhlY3V0ZWQgaWZcbiAgICAgIC8vIG5vdCBuZWNlc3NhcnkgKGRlYm91bmNlZCB0byBydW4gYXQgbW9zdCBvbmNlLXBlci10aWNrKVxuICAgICAgdXBkYXRlOiBkZWJvdW5jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgcmVzb2x2ZShzdGF0ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKCFhcmVWYWxpZEVsZW1lbnRzKHJlZmVyZW5jZSwgcG9wcGVyKSkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIGluc3RhbmNlLnNldE9wdGlvbnMob3B0aW9ucykudGhlbihmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgIGlmICghaXNEZXN0cm95ZWQgJiYgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKSB7XG4gICAgICAgIG9wdGlvbnMub25GaXJzdFVwZGF0ZShzdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7IC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUgYmVmb3JlIHRoZSBmaXJzdFxuICAgIC8vIHVwZGF0ZSBjeWNsZSBydW5zLiBUaGV5IHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIHVwZGF0ZVxuICAgIC8vIGN5Y2xlLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgbW9kaWZpZXIgYWRkcyBzb21lIHBlcnNpc3RlbnQgZGF0YSB0aGF0XG4gICAgLy8gb3RoZXIgbW9kaWZpZXJzIG5lZWQgdG8gdXNlLCBidXQgdGhlIG1vZGlmaWVyIGlzIHJ1biBhZnRlciB0aGUgZGVwZW5kZW50XG4gICAgLy8gb25lLlxuXG4gICAgZnVuY3Rpb24gcnVuTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgICAgICAgX3JlZiRvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgICAgICAgb3B0aW9ucyA9IF9yZWYkb3B0aW9ucyA9PT0gdm9pZCAwID8ge30gOiBfcmVmJG9wdGlvbnMsXG4gICAgICAgICAgICBlZmZlY3QgPSBfcmVmLmVmZmVjdDtcblxuICAgICAgICBpZiAodHlwZW9mIGVmZmVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHZhciBjbGVhbnVwRm4gPSBlZmZlY3Qoe1xuICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHZhciBub29wRm4gPSBmdW5jdGlvbiBub29wRm4oKSB7fTtcblxuICAgICAgICAgIGVmZmVjdENsZWFudXBGbnMucHVzaChjbGVhbnVwRm4gfHwgbm9vcEZuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpIHtcbiAgICAgIGVmZmVjdENsZWFudXBGbnMuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICB9KTtcbiAgICAgIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG59XG5leHBvcnQgdmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3IoKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBkZXRlY3RPdmVyZmxvdyB9OyIsICJpbXBvcnQgeyBwb3BwZXJHZW5lcmF0b3IsIGRldGVjdE92ZXJmbG93IH0gZnJvbSBcIi4vY3JlYXRlUG9wcGVyLmpzXCI7XG5pbXBvcnQgZXZlbnRMaXN0ZW5lcnMgZnJvbSBcIi4vbW9kaWZpZXJzL2V2ZW50TGlzdGVuZXJzLmpzXCI7XG5pbXBvcnQgcG9wcGVyT2Zmc2V0cyBmcm9tIFwiLi9tb2RpZmllcnMvcG9wcGVyT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanNcIjtcbmltcG9ydCBhcHBseVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanNcIjtcbmltcG9ydCBvZmZzZXQgZnJvbSBcIi4vbW9kaWZpZXJzL29mZnNldC5qc1wiO1xuaW1wb3J0IGZsaXAgZnJvbSBcIi4vbW9kaWZpZXJzL2ZsaXAuanNcIjtcbmltcG9ydCBwcmV2ZW50T3ZlcmZsb3cgZnJvbSBcIi4vbW9kaWZpZXJzL3ByZXZlbnRPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGFycm93IGZyb20gXCIuL21vZGlmaWVycy9hcnJvdy5qc1wiO1xuaW1wb3J0IGhpZGUgZnJvbSBcIi4vbW9kaWZpZXJzL2hpZGUuanNcIjtcbnZhciBkZWZhdWx0TW9kaWZpZXJzID0gW2V2ZW50TGlzdGVuZXJzLCBwb3BwZXJPZmZzZXRzLCBjb21wdXRlU3R5bGVzLCBhcHBseVN0eWxlcywgb2Zmc2V0LCBmbGlwLCBwcmV2ZW50T3ZlcmZsb3csIGFycm93LCBoaWRlXTtcbnZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKHtcbiAgZGVmYXVsdE1vZGlmaWVyczogZGVmYXVsdE1vZGlmaWVyc1xufSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyLCBwb3BwZXJHZW5lcmF0b3IsIGRlZmF1bHRNb2RpZmllcnMsIGRldGVjdE92ZXJmbG93IH07IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyIGFzIGNyZWF0ZVBvcHBlckxpdGUgfSBmcm9tIFwiLi9wb3BwZXItbGl0ZS5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCAqIGZyb20gXCIuL21vZGlmaWVycy9pbmRleC5qc1wiOyIsICJleHBvcnQgKiBmcm9tIFwiLi9lbnVtcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbW9kaWZpZXJzL2luZGV4LmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdywgY3JlYXRlUG9wcGVyIGFzIGNyZWF0ZVBvcHBlckJhc2UgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgfSBmcm9tIFwiLi9wb3BwZXIuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyTGl0ZSB9IGZyb20gXCIuL3BvcHBlci1saXRlLmpzXCI7IiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgZ2V0R2xvYmFsIH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcblxuZXhwb3J0IHsgcmFuZG9tIH07XG5cbi8qKlxuICogdGhpcyBmdW5jdGlvbiB1c2VzIGNyeXB0IGFuZCByZXR1cm5zIGEgcmFuZG9tIG51bWJlci5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbWluIHN0YXJ0aW5nIHZhbHVlIG9mIHRoZSBkZWZpbml0aW9uIHNldCAoZGVmYXVsdCBpcyAwKVxuICogQHBhcmFtIHtudW1iZXJ9IG1heCBlbmQgdmFsdWUgb2YgdGhlIGRlZmluaXRpb24gc2V0IChkZWZhdWx0IGlzIDEwMDAwMDAwMDApXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICogQG1lbWJlck9mIE1vbnN0ZXIuTWF0aFxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgY3J5cHRcbiAqIEB0aHJvd3Mge0Vycm9yfSB3ZSBjYW5ub3QgZ2VuZXJhdGUgbnVtYmVycyBsYXJnZXIgdGhhbiA1MyBiaXRzLlxuICogQHRocm93cyB7RXJyb3J9IHRoZSBkaXN0YW5jZSBpcyB0b28gc21hbGwgdG8gY3JlYXRlIGEgcmFuZG9tIG51bWJlci5cblxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbShtaW4sIG1heCkge1xuXHRpZiAobWluID09PSB1bmRlZmluZWQpIHtcblx0XHRtaW4gPSAwO1xuXHR9XG5cdGlmIChtYXggPT09IHVuZGVmaW5lZCkge1xuXHRcdG1heCA9IE1BWDtcblx0fVxuXG5cdGlmIChtYXggPCBtaW4pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtYXggbXVzdCBiZSBncmVhdGVyIHRoYW4gbWluXCIpO1xuXHR9XG5cblx0cmV0dXJuIE1hdGgucm91bmQoY3JlYXRlKG1pbiwgbWF4KSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IE1BWCA9IDEwMDAwMDAwMDA7XG5cbk1hdGgubG9nMiA9XG5cdE1hdGgubG9nMiB8fFxuXHRmdW5jdGlvbiAobikge1xuXHRcdHJldHVybiBNYXRoLmxvZyhuKSAvIE1hdGgubG9nKDIpO1xuXHR9O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbWluXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4XG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGNyeXB0XG4gKiBAdGhyb3dzIHtFcnJvcn0gd2UgY2Fubm90IGdlbmVyYXRlIG51bWJlcnMgbGFyZ2VyIHRoYW4gNTMgYml0cy5cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZGlzdGFuY2UgaXMgdG9vIHNtYWxsIHRvIGNyZWF0ZSBhIHJhbmRvbSBudW1iZXIuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZShtaW4sIG1heCkge1xuXHRsZXQgY3J5cHQ7XG5cdGNvbnN0IGdsb2JhbFJlZmVyZW5jZSA9IGdldEdsb2JhbCgpO1xuXG5cdGNyeXB0ID1cblx0XHRnbG9iYWxSZWZlcmVuY2U/LltcImNyeXB0b1wiXSB8fFxuXHRcdGdsb2JhbFJlZmVyZW5jZT8uW1wibXNDcnlwdG9cIl0gfHxcblx0XHRnbG9iYWxSZWZlcmVuY2U/LltcImNyeXB0b1wiXSB8fFxuXHRcdHVuZGVmaW5lZDtcblxuXHRpZiAodHlwZW9mIGNyeXB0ID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBjcnlwdFwiKTtcblx0fVxuXG5cdGxldCBydmFsID0gMDtcblx0Y29uc3QgcmFuZ2UgPSBtYXggLSBtaW47XG5cdGlmIChyYW5nZSA8IDIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgZGlzdGFuY2UgaXMgdG9vIHNtYWxsIHRvIGNyZWF0ZSBhIHJhbmRvbSBudW1iZXIuXCIpO1xuXHR9XG5cblx0Y29uc3QgYml0c05lZWRlZCA9IE1hdGguY2VpbChNYXRoLmxvZzIocmFuZ2UpKTtcblx0aWYgKGJpdHNOZWVkZWQgPiA1Mykge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIndlIGNhbm5vdCBnZW5lcmF0ZSBudW1iZXJzIGxhcmdlciB0aGFuIDUzIGJpdHMuXCIpO1xuXHR9XG5cdGNvbnN0IGJ5dGVzTmVlZGVkID0gTWF0aC5jZWlsKGJpdHNOZWVkZWQgLyA4KTtcblx0Y29uc3QgbWFzayA9IE1hdGgucG93KDIsIGJpdHNOZWVkZWQpIC0gMTtcblxuXHRjb25zdCBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShieXRlc05lZWRlZCk7XG5cdGNyeXB0LmdldFJhbmRvbVZhbHVlcyhieXRlQXJyYXkpO1xuXG5cdGxldCBwID0gKGJ5dGVzTmVlZGVkIC0gMSkgKiA4O1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzTmVlZGVkOyBpKyspIHtcblx0XHRydmFsICs9IGJ5dGVBcnJheVtpXSAqIE1hdGgucG93KDIsIHApO1xuXHRcdHAgLT0gODtcblx0fVxuXG5cdHJ2YWwgPSBydmFsICYgbWFzaztcblxuXHRpZiAocnZhbCA+PSByYW5nZSkge1xuXHRcdHJldHVybiBjcmVhdGUobWluLCBtYXgpO1xuXHR9XG5cblx0aWYgKHJ2YWwgPCBtaW4pIHtcblx0XHRydmFsICs9IG1pbjtcblx0fVxuXG5cdHJldHVybiBydmFsO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc0ludGVnZXIgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUZ1bmN0aW9uLCB2YWxpZGF0ZUludGVnZXIgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IERlYWRNYW5zU3dpdGNoIH07XG5cbi8qKlxuICogVGhlIGRlYWQgbWFuJ3Mgc3dpdGNoIGFsbG93cyB0byBzZXQgYSB0aW1lciB3aGljaCBjYW4gYmUgcmVzZXQgYWdhaW4gYW5kIGFnYWluIHdpdGhpbiBhIGRlZmluZWQgcGVyaW9kIG9mIHRpbWUuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yOS4wXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKiBAc3VtbWFyeSBDbGFzcyB0byBiZSBhYmxlIHRvIGV4ZWN1dGUgZnVuY3Rpb24gY2hhaW5zXG4gKi9cbmNsYXNzIERlYWRNYW5zU3dpdGNoIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBDcmVhdGUgbmV3IGRlYWQgbWFuJ3Mgc3dpdGNoXG5cdCAqXG5cdCAqIEBwYXJhbSB7SW50ZWdlcn0gZGVsYXlcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHRocm93IHtUeXBlRXJyb3J9IHRoZSBhcmd1bWVudHMgbXVzdCBiZSBlaXRoZXIgaW50ZWdlciBvciBmdW5jdGlvbnNcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuXHQgKi9cblx0Y29uc3RydWN0b3IoZGVsYXksIGNhbGxiYWNrKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGluaXQuY2FsbCh0aGlzLCB2YWxpZGF0ZUludGVnZXIoZGVsYXkpLCB2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtJbnRlZ2VyfHVuZGVmaW5lZH0gW2RlbGF5XVxuXHQgKi9cblx0dG91Y2goZGVsYXkpIHtcblx0XHRpZiAodGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJpc0FscmVhZHlSdW5cIl0gPT09IHRydWUpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImhhcyBhbHJlYWR5IHJ1blwiKTtcblx0XHR9XG5cblx0XHRpZiAoaXNJbnRlZ2VyKGRlbGF5KSkge1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJkZWxheVwiXSA9IGRlbGF5O1xuXHRcdH0gZWxzZSBpZiAoZGVsYXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgYXJndW1lbnRcIik7XG5cdFx0fVxuXG5cdFx0Y2xlYXJUaW1lb3V0KHRoaXNbaW50ZXJuYWxTeW1ib2xdW1widGltZXJcIl0pO1xuXG5cdFx0aW5pdENhbGxiYWNrLmNhbGwodGhpcyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRDYWxsYmFjaygpIHtcblx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJ0aW1lclwiXSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wiaXNBbHJlYWR5UnVuXCJdID0gdHJ1ZTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcImNhbGxiYWNrXCJdKCk7XG5cdH0sIHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wiZGVsYXlcIl0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGRlbGF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICovXG5mdW5jdGlvbiBpbml0KGRlbGF5LCBjYWxsYmFjaykge1xuXHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRjYWxsYmFjayxcblx0XHRkZWxheSxcblx0XHRpc0FscmVhZHlSdW46IGZhbHNlLFxuXHRcdHRpbWVyOiB1bmRlZmluZWQsXG5cdH07XG5cblx0aW5pdENhbGxiYWNrLmNhbGwodGhpcyk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxGdW5jdGlvbiB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc0ludGVnZXIgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gXCIuLi90eXBlcy9xdWV1ZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlRnVuY3Rpb24sIHZhbGlkYXRlSW50ZWdlciB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgUHJvY2Vzc2luZyB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIENhbGxiYWNrIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7aW50fHVuZGVmaW5lZH0gdGltZVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGNvbnN0cnVjdG9yKGNhbGxiYWNrLCB0aW1lKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0XHRjYWxsYmFjazogdmFsaWRhdGVGdW5jdGlvbihjYWxsYmFjayksXG5cdFx0XHR0aW1lOiB2YWxpZGF0ZUludGVnZXIodGltZSA/PyAwKSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSAgeyp9IGRhdGFcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHJ1bihkYXRhKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGdldEdsb2JhbEZ1bmN0aW9uKFwic2V0VGltZW91dFwiKSgoKSA9PiB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSh0aGlzW2ludGVybmFsU3ltYm9sXS5jYWxsYmFjayhkYXRhKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIHRoaXNbaW50ZXJuYWxTeW1ib2xdLnRpbWUpO1xuXHRcdH0pO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBjbGFzcyBhbGxvd3MgdG8gZXhlY3V0ZSBzZXZlcmFsIGZ1bmN0aW9ucyBpbiBvcmRlci5cbiAqXG4gKiBGdW5jdGlvbnMgYW5kIHRpbWVvdXRzIGNhbiBiZSBwYXNzZWQuIElmIGEgdGltZW91dCBpcyBwYXNzZWQsIGl0IGFwcGxpZXMgdG8gYWxsIGZ1cnRoZXIgZnVuY3Rpb25zLlxuICogSW4gdGhlIGV4YW1wbGVcbiAqXG4gKiBgdGltZW91dDEsIGZ1bmN0aW9uMSwgZnVuY3Rpb24yLCBmdW5jdGlvbjMsIHRpbWVvdXQyLCBmdW5jdGlvbjRgXG4gKlxuICogdGhlIHRpbWVvdXQxIGlzIHZhbGlkIGZvciB0aGUgZnVuY3Rpb25zIDEsIDIgYW5kIDMgYW5kIHRoZSB0aW1lb3V0MiBmb3IgdGhlIGZ1bmN0aW9uNC5cbiAqXG4gKiBTbyB0aGUgZXhlY3V0aW9uIHRpbWUgaXMgdGltZW91dDErdGltZW91dDErdGltZW91dDErdGltZW91dDJcbiAqXG4gKiBUaGUgcmVzdWx0IG9mIGBydW4oKWAgaXMgYSBwcm9taXNlLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS91dGlsL3Byb2Nlc3NpbmcubWpzXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMS4wXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKiBAc3VtbWFyeSBDbGFzcyB0byBiZSBhYmxlIHRvIGV4ZWN1dGUgZnVuY3Rpb24gY2hhaW5zXG4gKi9cbmNsYXNzIFByb2Nlc3NpbmcgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIENyZWF0ZSBuZXcgUHJvY2Vzc2luZ1xuXHQgKlxuXHQgKiBGdW5jdGlvbnMgYW5kIHRpbWVvdXRzIGNhbiBiZSBwYXNzZWQuIElmIGEgdGltZW91dCBpcyBwYXNzZWQsIGl0IGFwcGxpZXMgdG8gYWxsIGZ1cnRoZXIgZnVuY3Rpb25zLlxuXHQgKiBJbiB0aGUgZXhhbXBsZVxuXHQgKlxuXHQgKiBgdGltZW91dDEsIGZ1bmN0aW9uMSwgZnVuY3Rpb24yLCBmdW5jdGlvbjMsIHRpbWVvdXQyLCBmdW5jdGlvbjRgXG5cdCAqXG5cdCAqIHRoZSB0aW1lb3V0MSBpcyB2YWxpZCBmb3IgdGhlIGZ1bmN0aW9ucyAxLCAyIGFuZCAzIGFuZCB0aGUgdGltZW91dDIgZm9yIHRoZSBmdW5jdGlvbjQuXG5cdCAqXG5cdCAqIFNvIHRoZSBleGVjdXRpb24gdGltZSBpcyB0aW1lb3V0MSt0aW1lb3V0MSt0aW1lb3V0MSt0aW1lb3V0MlxuXHQgKlxuXHQgKiBAdGhyb3cge1R5cGVFcnJvcn0gdGhlIGFyZ3VtZW50cyBtdXN0IGJlIGVpdGhlciBpbnRlZ2VyIG9yIGZ1bmN0aW9uc1xuXHQgKiBAcGFyYW0gey4uLihpbnR8ZnVuY3Rpb24pfSBhcmdzXG5cdCAqL1xuXHRjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0cXVldWU6IG5ldyBRdWV1ZSgpLFxuXHRcdH07XG5cblx0XHRsZXQgdGltZSA9IDA7XG5cblx0XHRpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgfHwgYXJnc1swXSA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInRoZSBhcmd1bWVudHMgbXVzdCBiZSBlaXRoZXIgaW50ZWdlciBvciBmdW5jdGlvbnNcIik7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBbLCBhcmddIG9mIE9iamVjdC5lbnRyaWVzKGFyZ3MpKSB7XG5cdFx0XHRpZiAoaXNJbnRlZ2VyKGFyZykgJiYgYXJnID49IDApIHtcblx0XHRcdFx0dGltZSA9IGFyZztcblx0XHRcdH0gZWxzZSBpZiAoaXNGdW5jdGlvbihhcmcpKSB7XG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnF1ZXVlLmFkZChuZXcgQ2FsbGJhY2soYXJnLCB0aW1lKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XHRcdFwidGhlIGFyZ3VtZW50cyBtdXN0IGJlIGVpdGhlciBpbnRlZ2VyIG9yIGZ1bmN0aW9uc1wiLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgZnVuY3Rpb24gd2l0aCB0aGUgZGVzaXJlZCB0aW1lb3V0XG5cdCAqIElmIG5vIHRpbWVvdXQgaXMgc3BlY2lmaWVkLCB0aGUgdGltZW91dCBvZiB0aGUgcHJldmlvdXMgZnVuY3Rpb24gaXMgdXNlZC5cblx0ICpcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHBhcmFtIHtpbnR8dW5kZWZpbmVkfSB0aW1lXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuXHQgKi9cblx0YWRkKGNhbGxiYWNrLCB0aW1lKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ucXVldWUuYWRkKG5ldyBDYWxsYmFjayhjYWxsYmFjaywgdGltZSkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHRoZSBkZWZpbmVkIGZ1bmN0aW9ucyBpbiBvcmRlci5cblx0ICpcblx0ICogQHBhcmFtIHsqfSBkYXRhXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRydW4oZGF0YSkge1xuXHRcdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXS5xdWV1ZS5pc0VtcHR5KCkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZGF0YSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2FsbGJhY2sgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5xdWV1ZS5wb2xsKCk7XG5cblx0XHRpZiAoY2FsbGJhY2sgPT09IG51bGwgfHwgY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkYXRhKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY2FsbGJhY2sucnVuKGRhdGEpLnRoZW4oKHJlc3VsdCkgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMucnVuKHJlc3VsdCk7XG5cdFx0fSk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBUYWJzU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgVGFic1N0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRUYWJzU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciB0YWJzIHsgXG4uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXNoYWRvdzpub25lO2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJde2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6bm9uZTtwYWRkaW5nOjEuMWVtO3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsKX1bZGF0YS1wb3BwZXItYXJyb3ddLFtkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JhY2tncm91bmQ6aW5oZXJpdDtoZWlnaHQ6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xKnZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEqdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpfVtkYXRhLXBvcHBlci1hcnJvd117dmlzaWJpbGl0eTpoaWRkZW59W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94O2NvbnRlbnQ6XFxcIlxcXCI7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyk7dmlzaWJpbGl0eTp2aXNpYmxlfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePXRvcF0+W2RhdGEtcG9wcGVyLWFycm93XXtib3R0b206Y2FsYyh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSAtIHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKS8yKX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj10b3BdPltkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JvcmRlci1ib3R0b206dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWxlZnQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci10b3A6dHJhbnNwYXJlbnR9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49Ym90dG9tXT5bZGF0YS1wb3BwZXItYXJyb3dde3RvcDpjYWxjKHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1ib3R0b21dPltkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JvcmRlci1ib3R0b206dHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJpZ2h0OnRyYW5zcGFyZW50O2JvcmRlci10b3A6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49bGVmdF0+W2RhdGEtcG9wcGVyLWFycm93XXtyaWdodDpjYWxjKHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1sZWZ0XT5bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3JkZXItYm90dG9tOnRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OnRyYW5zcGFyZW50O2JvcmRlci1yaWdodDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItdG9wOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePXJpZ2h0XT5bZGF0YS1wb3BwZXItYXJyb3dde2xlZnQ6Y2FsYyh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSAtIHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKS8yKX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1yaWdodF0+W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItbGVmdDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmlnaHQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDp0cmFuc3BhcmVudH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeSwubW9uc3Rlci1iYWRnZS1wcmltYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeSwubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeSwubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmV7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLC5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUtcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1zdWNjZXNze3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1zdWNjZXNzLC5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MtcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utc3VjY2Vzcy1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXdhcm5pbmd7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXdhcm5pbmcsLm1vbnN0ZXItYmFkZ2Utd2FybmluZy1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS13YXJuaW5nLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtZXJyb3J7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLWVycm9yLC5tb25zdGVyLWJhZGdlLWVycm9yLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtZXJyb3ItcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b24uaGlkZGVue2Rpc3BsYXk6bm9uZX1uYXZbZGF0YS1tb25zdGVyLXJvbGU9bmF2XXtib3JkZXItYm90dG9tLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTthbGlnbi1pdGVtczpmbGV4LWVuZDtib3JkZXItYm90dG9tLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItYm90dG9tLXdpZHRoOnRoaW47Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO21hcmdpbi1ib3R0b206Ljc1cmVtO292ZXJmbG93OmhpZGRlbn1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b24gLnJlbW92ZS10YWJ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtaW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvciclM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDh6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7YmFja2dyb3VuZC1wb3NpdGlvbjoxMDAlIDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZToxNnB4O2ZsZXgtd3JhcDpub3dyYXA7aGVpZ2h0OjE2cHg7bWluLWhlaWdodDoxNnB4O29yZGVyOjI7d2lkdGg6MTZweH1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b24gc3BhbntkaXNwbGF5OmZsZXg7d2hpdGUtc3BhY2U6cHJlfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbntib3JkZXItYm90dG9tLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tc2VsZjpzdHJldGNoO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1idG4tYmctY29sb3IpO2JvcmRlcjpub25lO2JvcmRlci1ib3R0b206dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSBjdXJyZW50Y29sb3I7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJ0bi1jb2xvciwjMDAwKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O21hcmdpbi1yaWdodDouNzVyZW07b3V0bGluZTpub25lO3BhZGRpbmc6LjM3NXJlbSAwO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3RyYW5zaXRpb246Y29sb3IgLjhzOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uOm5vdChbZGlzYWJsZWRdKTpob3ZlcixbZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXN0YXRlPWFjdGl2ZV0sW2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1zdGF0ZT1hY3RpdmVdOm5vdChbZGlzYWJsZWRdKTpob3Zlcntib3JkZXItYm90dG9tLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3JkZXItYm90dG9tLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uW2Rpc2FibGVkXXtjb2xvcjp2YXIoLS1tb25zdGVyLWRpc2FibGVkLWNvbG9yLCM1NDU0NTQpO2N1cnNvcjpub3QtYWxsb3dlZH1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXJvbGU9c3dpdGNoXXthbGlnbi1zZWxmOmNlbnRlcjtib3JkZXI6MDtvcmRlcjoyO3RvdWNoLWFjdGlvbjpub25lfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItcm9sZT1zd2l0Y2hdOm5vdChbZGlzYWJsZWRdKTpob3Zlcntib3JkZXItYm90dG9tLXdpZHRoOjB9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uIGltZ3toZWlnaHQ6MS4zcmVtO21hcmdpbi1sZWZ0Oi40cmVtO3dpZHRoOjEuM3JlbX06OnNsb3R0ZWQoOm5vdChbc2xvdF0pOm5vdCguYWN0aXZlKSl7ZGlzcGxheTpub25lfTo6c2xvdHRlZCgqKXthbGlnbi1zZWxmOmNlbnRlcn06OnNsb3R0ZWQoW3Nsb3RdKXtib3JkZXItYm90dG9tLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3JkZXItYm90dG9tLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfTo6c2xvdHRlZChbc2xvdD1zdGFydF0pe21hcmdpbi1yaWdodDouNzVyZW07b3JkZXI6MH06OnNsb3R0ZWQoW3Nsb3Q9ZW5kXSl7bWFyZ2luLWxlZnQ6Ljc1cmVtO29yZGVyOjN9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gW2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlci1uYXZdIGJ1dHRvbjpub3QoW2Rpc2FibGVkXSl7Ym9yZGVyOjA7anVzdGlmeS1jb250ZW50OmxlZnQ7cGFkZGluZy1sZWZ0OjE1cHg7cGFkZGluZy1yaWdodDoxNXB4O3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gW2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlci1uYXZdIGJ1dHRvbjpob3ZlcixbZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyLW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1zdGF0ZT1hY3RpdmVdLFtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIFtkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXItbmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXN0YXRlPWFjdGl2ZV06bm90KFtkaXNhYmxlZF0pOmhvdmVye2JvcmRlcjowfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUJvb2xlYW4gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IHNldEV2ZW50TGlzdGVuZXJzTW9kaWZpZXJzLCBwb3BwZXJJbnN0YW5jZVN5bWJvbCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJJbnN0YW5jZVN5bWJvbCA9IFN5bWJvbChcInBvcHBlckluc3RhbmNlXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhpcyB7Q3VzdG9tRWxlbWVudH1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gbW9kZVxuICovXG5mdW5jdGlvbiBzZXRFdmVudExpc3RlbmVyc01vZGlmaWVycyhtb2RlKSB7O1xuXG5cdGNvbnN0IG9wdGlvbnMgPSBleHRlbmQoe30sIHRoaXMuZ2V0T3B0aW9uKFwicG9wcGVyXCIpKTtcblx0Y29uc3QgbW9kaWZpZXJzID0gb3B0aW9ucz8uW1wibW9kaWZpZXJzXCJdO1xuXG5cdGlmICghaXNBcnJheShtb2RpZmllcnMpKSB7XG5cdFx0b3B0aW9uc1tcIm1vZGlmaWVyc1wiXSA9IFtdO1xuXHR9XG5cblx0aWYgKFxuXHRcdG9wdGlvbnNbXCJtb2RpZmllcnNcIl0uZmlsdGVyKChlbnRyeSkgPT4ge1xuXHRcdFx0aWYgKGVudHJ5Py5bXCJuYW1lXCJdID09PSBcImV2ZW50TGlzdGVuZXJzXCIpIHtcblx0XHRcdFx0Ly8gcGVyZm9ybWFuY2UgaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvdHV0b3JpYWwvI3BlcmZvcm1hbmNlXG5cdFx0XHRcdGVudHJ5W1wiZW5hYmxlZFwiXSA9IHZhbGlkYXRlQm9vbGVhbihtb2RlKTtcblx0XHRcdH1cblx0XHR9KS5sZW5ndGggPT09IDBcblx0KSB7XG5cdFx0b3B0aW9uc1tcIm1vZGlmaWVyc1wiXS5wdXNoKHtcblx0XHRcdG5hbWU6IFwiZXZlbnRMaXN0ZW5lcnNcIixcblx0XHRcdGVuYWJsZWQ6IHZhbGlkYXRlQm9vbGVhbihtb2RlKSxcblx0XHR9KTtcblx0fVxuXG5cdHRoaXNbcG9wcGVySW5zdGFuY2VTeW1ib2xdLnNldE9wdGlvbnMob3B0aW9ucyk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUG9wcGVyIH0gZnJvbSBcIkBwb3BwZXJqcy9jb3JlXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uLy4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IGFkZFRvT2JqZWN0TGluaywgaGFzT2JqZWN0TGluayB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9QUkVGSVgsIEFUVFJJQlVURV9ST0xFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0Z2V0U2xvdHRlZEVsZW1lbnRzLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IHJhbmRvbSB9IGZyb20gXCIuLi8uLi9tYXRoL3JhbmRvbS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbCB9IGZyb20gXCIuLi8uLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBJRCB9IGZyb20gXCIuLi8uLi90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXksIGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgVG9rZW5MaXN0IH0gZnJvbSBcIi4uLy4uL3R5cGVzL3Rva2VubGlzdC5tanNcIjtcbmltcG9ydCB7IGNsb25lIH0gZnJvbSBcIi4uLy4uL3V0aWwvY2xvbmUubWpzXCI7XG5pbXBvcnQgeyBEZWFkTWFuc1N3aXRjaCB9IGZyb20gXCIuLi8uLi91dGlsL2RlYWRtYW5zc3dpdGNoLm1qc1wiO1xuaW1wb3J0IHsgUHJvY2Vzc2luZyB9IGZyb20gXCIuLi8uLi91dGlsL3Byb2Nlc3NpbmcubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfQlVUVE9OX0xBQkVMLFxuXHRBVFRSSUJVVEVfRk9STV9SRUxPQUQsXG5cdEFUVFJJQlVURV9GT1JNX1VSTCxcblx0U1RZTEVfRElTUExBWV9NT0RFX0JMT0NLLFxufSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5cbmltcG9ydCB7IFRhYnNTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC90YWJzLm1qc1wiO1xuaW1wb3J0IHsgbG9hZEFuZEFzc2lnbkNvbnRlbnQgfSBmcm9tIFwiLi91dGlsL2ZldGNoLm1qc1wiO1xuaW1wb3J0IHtcblx0cG9wcGVySW5zdGFuY2VTeW1ib2wsXG5cdHNldEV2ZW50TGlzdGVuZXJzTW9kaWZpZXJzLFxufSBmcm9tIFwiLi91dGlsL3BvcHBlci5tanNcIjtcblxuZXhwb3J0IHsgVGFicyB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyTmF2RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInBvcHBlck5hdkVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRyb2xFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udHJvbEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG5hdkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJuYXZFbGVtZW50XCIpO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3dpdGNoRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInN3aXRjaEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNoYW5nZVRhYkV2ZW50SGFuZGxlciA9IFN5bWJvbChcImNoYW5nZVRhYkV2ZW50SGFuZGxlclwiKTtcbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlbW92ZVRhYkV2ZW50SGFuZGxlciA9IFN5bWJvbChcInJlbW92ZVRhYkV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyU3dpdGNoRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwicG9wcGVyU3dpdGNoRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNsb3NlRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiY2xvc2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG11dGF0aW9uT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJtdXRhdGlvbk9ic2VydmVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkaW1lbnNpb25zU3ltYm9sID0gU3ltYm9sKFwiZGltZW5zaW9uc1wiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdGltZXJDYWxsYmFja1N5bWJvbCA9IFN5bWJvbChcInRpbWVyQ2FsbGJhY2tcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVzaXplT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJyZXNpemVPYnNlcnZlclwiKTtcblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgY3JlYXRlcyBhIHRhYiBlbGVtZW50IHdpdGggYSB2YXJpZXR5IG9mIG9wdGlvbnMuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy90YWJzLnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIGA8bW9uc3Rlci10YWJzIC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRhYnMnKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci10YWJzPjwvbW9uc3Rlci10YWJzPlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCB7VGFic30gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL3RhYi5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRhYnMnKTtcbiAqIGBgYFxuICpcbiAqIEBzdGFydHVtbCB0YWJzLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gQ3VzdG9tQ29udHJvbFxuICogQ3VzdG9tQ29udHJvbCA8fC0tIFRhYnNcbiAqIEBlbmR1bWxcbiAqXG4gKiBAc2luY2UgMS4xMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc3VtbWFyeSBBIGNvbmZpZ3VyYWJsZSB0YWIgY29udHJvbFxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLmV2ZW50Om1vbnN0ZXItZmV0Y2hlZFxuICovXG5jbGFzcyBUYWJzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9jb21wb25lbnQtZm9ybS90YWJzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIGh0bWwgdGFnIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsYWJlbHNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5uZXctdGFiLWxhYmVsPVwiTmV3IFRhYlwiXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaCBGZXRjaCBbc2VlIFVzaW5nIEZldGNoIG1vemlsbGEub3JnXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJL1VzaW5nX0ZldGNoKVxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gucmVkaXJlY3Q9ZXJyb3Jcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLm1ldGhvZD1HRVRcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLm1vZGU9c2FtZS1vcmlnaW5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLmNyZWRlbnRpYWxzPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaC5oZWFkZXJzPXtcImFjY2VwdFwiOlwidGV4dC9odG1sXCJ9fVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcG9wcGVyIFtQb3BwZXJKUyBPcHRpb25zXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwb3BwZXIucGxhY2VtZW50PWJvdHRvbSBQb3BwZXJKUyBwbGFjZW1lbnRcblx0ICogQHByb3BlcnR5IHtPYmplY3RbXX0gbW9kaWZpZXJzPXtuYW1lOm9mZnNldH0gUG9wcGVySlMgcGxhY2VtZW50XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0XCJuZXctdGFiLWxhYmVsXCI6IFwiTmV3IFRhYlwiLFxuXHRcdFx0fSxcblx0XHRcdGJ1dHRvbnM6IHtcblx0XHRcdFx0c3RhbmRhcmQ6IFtdLFxuXHRcdFx0XHRwb3BwZXI6IFtdLFxuXHRcdFx0fSxcblx0XHRcdGZldGNoOiB7XG5cdFx0XHRcdHJlZGlyZWN0OiBcImVycm9yXCIsXG5cdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0bW9kZTogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdFx0YWNjZXB0OiBcInRleHQvaHRtbFwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHBvcHBlcjoge1xuXHRcdFx0XHRwbGFjZW1lbnQ6IFwiYm90dG9tXCIsXG5cdFx0XHRcdG1vZGlmaWVyczogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG5hbWU6IFwib2Zmc2V0XCIsXG5cdFx0XHRcdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdFx0XHRcdG9mZnNldDogWzAsIDJdLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bmFtZTogXCJldmVudExpc3RlbmVyc1wiLFxuXHRcdFx0XHRcdFx0ZW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7O1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cblx0XHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdID0gbmV3IFBhdGhmaW5kZXIoeyBkYXRhOiB7fSB9KTtcblx0XHQvLyBjaGFuZ2UgYW5kIHJlbW92ZSBUYWJzXG5cdFx0aW5pdEV2ZW50aGFuZGxlci5jYWxsKHRoaXMpO1xuXG5cdFx0Ly8gc2V0dXAgc3RydWN0dXJlXG5cdFx0aW5pdFRhYkJ1dHRvbnMuY2FsbCh0aGlzKS50aGVuKCgpID0+IHtcblx0XHRcdGluaXRQb3BwZXJTd2l0Y2guY2FsbCh0aGlzKTtcblx0XHRcdGluaXRQb3BwZXIuY2FsbCh0aGlzKTtcblx0XHRcdGF0dGFjaFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdFx0XHRhdHRhY2hUYWJDaGFuZ2VPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbVGFic1N0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci10YWJzXCI7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBkb20gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTs7XG5cblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgZG9tIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRQb3BwZXJTd2l0Y2goKSB7O1xuXG5cdGNvbnN0IG5vZGVzID0gZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcywgYFske0FUVFJJQlVURV9ST0xFfT1cInN3aXRjaFwiXWApOyAvLyBudWxsIFx1MjFBNiBvbmx5IHVubmFtZWQgc2xvdHNcblx0bGV0IHN3aXRjaEJ1dHRvbjtcblx0aWYgKG5vZGVzLnNpemUgPT09IDApIHtcblx0XHRzd2l0Y2hCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpO1xuXHRcdHN3aXRjaEJ1dHRvbi5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUsIFwic3dpdGNoXCIpO1xuXHRcdHN3aXRjaEJ1dHRvbi5zZXRBdHRyaWJ1dGUoXCJwYXJ0XCIsIFwic3dpdGNoXCIpO1xuXHRcdHN3aXRjaEJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xuXHRcdHN3aXRjaEJ1dHRvbi5pbm5lckhUTUwgPVxuXHRcdFx0JzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+PHBhdGggZD1cIk05LjUgMTNhMS41IDEuNSAwIDEgMS0zIDAgMS41IDEuNSAwIDAgMSAzIDB6bTAtNWExLjUgMS41IDAgMSAxLTMgMCAxLjUgMS41IDAgMCAxIDMgMHptMC01YTEuNSAxLjUgMCAxIDEtMyAwIDEuNSAxLjUgMCAwIDEgMyAwelwiLz48L3N2Zz4nO1xuXHRcdHRoaXNbbmF2RWxlbWVudFN5bWJvbF0ucHJlcGVuZChzd2l0Y2hCdXR0b24pO1xuXHR9IGVsc2Uge1xuXHRcdHN3aXRjaEJ1dHRvbiA9IG5vZGVzLm5leHQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1twb3BwZXJTd2l0Y2hFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KGV2ZW50LCBBVFRSSUJVVEVfUk9MRSwgXCJzd2l0Y2hcIik7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KSB7XG5cdFx0XHR0b2dnbGVQb3BwZXIuY2FsbCh0aGlzKTtcblx0XHR9XG5cdH07XG5cblx0Zm9yIChjb25zdCB0eXBlIG9mIFtcImNsaWNrXCIsIFwidG91Y2hcIl0pIHtcblx0XHRzd2l0Y2hCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW3BvcHBlclN3aXRjaEV2ZW50SGFuZGxlcl0pO1xuXHR9XG5cblx0dGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXSA9IHN3aXRjaEJ1dHRvbjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBoaWRlUG9wcGVyKCkgeztcblxuXHRpZiAoIXRoaXNbcG9wcGVySW5zdGFuY2VTeW1ib2xdKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdC8vIHBlcmZvcm1hbmNlIGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL3R1dG9yaWFsLyNwZXJmb3JtYW5jZVxuXHRzZXRFdmVudExpc3RlbmVyc01vZGlmaWVycy5jYWxsKHRoaXMsIGZhbHNlKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzaG93UG9wcGVyKCkgeztcblxuXHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0s7XG5cdC8vIHBlcmZvcm1hbmNlIGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL3R1dG9yaWFsLyNwZXJmb3JtYW5jZVxuXHRzZXRFdmVudExpc3RlbmVyc01vZGlmaWVycy5jYWxsKHRoaXMsIHRydWUpO1xuXG5cdHRoaXNbcG9wcGVySW5zdGFuY2VTeW1ib2xdLnVwZGF0ZSgpO1xuXG5cdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwidmlzaWJpbGl0eVwiKTtcblx0fSkucnVuKCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlUG9wcGVyKCkgeztcblxuXHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRoaWRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdH0gZWxzZSB7XG5cdFx0c2hvd1BvcHBlci5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXR0YWNoUmVzaXplT2JzZXJ2ZXIoKSB7O1xuXG5cdC8vIGFnYWluc3QgZmxpY2tlcmluZ1xuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuXHRcdGlmICh0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0udG91Y2goKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRkZWxldGUgdGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdID0gbmV3IERlYWRNYW5zU3dpdGNoKDIwMCwgKCkgPT4ge1xuXHRcdFx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXS5zZXRWaWEoXCJkYXRhLmNhbGN1bGF0ZWRcIiwgZmFsc2UpO1xuXHRcdFx0Y2hlY2tBbmRSZWFycmFuZ2VCdXR0b25zLmNhbGwodGhpcyk7XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUodGhpc1tuYXZFbGVtZW50U3ltYm9sXSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXR0YWNoVGFiQ2hhbmdlT2JzZXJ2ZXIoKSB7O1xuXG5cdC8vIGFnYWluc3QgZmxpY2tlcmluZ1xuXHRuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XG5cdFx0bGV0IHJ1blVwZGF0ZSA9IGZhbHNlO1xuXG5cdFx0Zm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnMpIHtcblx0XHRcdGlmIChtdXRhdGlvbi50eXBlID09PSBcImNoaWxkTGlzdFwiKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRtdXRhdGlvbi5hZGRlZE5vZGVzLmxlbmd0aCA+IDAgfHxcblx0XHRcdFx0XHRtdXRhdGlvbi5yZW1vdmVkTm9kZXMubGVuZ3RoID4gMFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRydW5VcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJ1blVwZGF0ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXS5zZXRWaWEoXCJkYXRhLmNhbGN1bGF0ZWRcIiwgZmFsc2UpO1xuXHRcdFx0aW5pdFRhYkJ1dHRvbnMuY2FsbCh0aGlzKTtcblx0XHR9XG5cdH0pLm9ic2VydmUodGhpcywge1xuXHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEBleHRlcm5hbCBcImV4dGVybmFsOmNyZWF0ZVBvcHBlclwiXG4gKiBAc2VlIHtAbGluayAgUGx1Z2luc31cbiAqL1xuZnVuY3Rpb24gaW5pdFBvcHBlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0Y29uc3Qgb3B0aW9ucyA9IGV4dGVuZCh7fSwgc2VsZi5nZXRPcHRpb24oXCJwb3BwZXJcIikpO1xuXG5cdHNlbGZbcG9wcGVySW5zdGFuY2VTeW1ib2xdID0gY3JlYXRlUG9wcGVyKFxuXHRcdHNlbGZbc3dpdGNoRWxlbWVudFN5bWJvbF0sXG5cdFx0c2VsZltwb3BwZXJFbGVtZW50U3ltYm9sXSxcblx0XHRvcHRpb25zLFxuXHQpO1xuXG5cdGNvbnN0IG9ic2VydmVyMSA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcblx0XHRsZXQgcnVuVXBkYXRlID0gZmFsc2U7XG5cblx0XHRmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9ucykge1xuXHRcdFx0aWYgKG11dGF0aW9uLnR5cGUgPT09IFwiY2hpbGRMaXN0XCIpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG11dGF0aW9uLmFkZGVkTm9kZXMubGVuZ3RoID4gMCB8fFxuXHRcdFx0XHRcdG11dGF0aW9uLnJlbW92ZWROb2Rlcy5sZW5ndGggPiAwXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJ1blVwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocnVuVXBkYXRlID09PSB0cnVlKSB7XG5cdFx0XHRzZWxmW3BvcHBlckluc3RhbmNlU3ltYm9sXS51cGRhdGUoKTtcblx0XHR9XG5cdH0pO1xuXG5cdG9ic2VydmVyMS5vYnNlcnZlKHNlbGZbcG9wcGVyTmF2RWxlbWVudFN5bWJvbF0sIHtcblx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0c3VidHJlZTogdHJ1ZSxcblx0fSk7XG5cblx0cmV0dXJuIHNlbGY7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gc2hvdyhlbGVtZW50KSB7O1xuXG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdGNvbnN0IHJlZmVyZW5jZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGAke0FUVFJJQlVURV9QUkVGSVh9dGFiLXJlZmVyZW5jZWApO1xuXG5cdGNvbnN0IG5vZGVzID0gZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcyk7XG5cdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdGNvbnN0IGlkID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblx0XHRpZiAoaWQgPT09IHJlZmVyZW5jZSkge1xuXHRcdFx0bm9kZS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xuXG5cdFx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKSkge1xuXHRcdFx0XHRjb25zdCB1cmwgPSBub2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9VUkwpO1xuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQhbm9kZS5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKSB8fFxuXHRcdFx0XHRcdG5vZGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1JFTE9BRCkudG9Mb3dlckNhc2UoKSA9PT0gXCJvbnNob3dcIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRub2RlLnJlbW92ZUF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9VUkwpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwiZmV0Y2hcIiwge30pO1xuXHRcdFx0XHRsb2FkQW5kQXNzaWduQ29udGVudChub2RlLCB1cmwsIG9wdGlvbnMpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRub2RlLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc3RhbmRhcmRCdXR0b25zID0gdGhpcy5nZXRPcHRpb24oXCJidXR0b25zLnN0YW5kYXJkXCIpO1xuXHRmb3IgKGNvbnN0IFtpbmRleF0gaW4gc3RhbmRhcmRCdXR0b25zKSB7XG5cdFx0Y29uc3QgYnV0dG9uID0gc3RhbmRhcmRCdXR0b25zW2luZGV4XTtcblx0XHRjb25zdCBzdGF0ZSA9IGJ1dHRvbltcInJlZmVyZW5jZVwiXSA9PT0gcmVmZXJlbmNlID8gXCJhY3RpdmVcIiA6IFwiaW5hY3RpdmVcIjtcblx0XHR0aGlzLnNldE9wdGlvbihgYnV0dG9ucy5zdGFuZGFyZC4ke2luZGV4fS5zdGF0ZWAsIHN0YXRlKTtcblx0fVxuXG5cdGNvbnN0IHBvcHBlckJ1dHRvbiA9IHRoaXMuZ2V0T3B0aW9uKFwiYnV0dG9ucy5wb3BwZXJcIik7XG5cdGZvciAoY29uc3QgW2luZGV4XSBpbiBwb3BwZXJCdXR0b24pIHtcblx0XHRjb25zdCBidXR0b24gPSBwb3BwZXJCdXR0b25baW5kZXhdO1xuXHRcdGNvbnN0IHN0YXRlID0gYnV0dG9uW1wicmVmZXJlbmNlXCJdID09PSByZWZlcmVuY2UgPyBcImFjdGl2ZVwiIDogXCJpbmFjdGl2ZVwiO1xuXHRcdHRoaXMuc2V0T3B0aW9uKGBidXR0b25zLnBvcHBlci4ke2luZGV4fS5zdGF0ZWAsIHN0YXRlKTtcblx0fVxuXG5cdGhpZGVQb3BwZXIuY2FsbCh0aGlzKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRoYW5kbGVyKCkgeztcblxuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbY2hhbmdlVGFiRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChldmVudCwgQVRUUklCVVRFX1JPTEUsIFwiYnV0dG9uXCIpO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiBlbGVtZW50LmRpc2FibGVkICE9PSB0cnVlKSB7XG5cdFx0XHRzaG93LmNhbGwodGhpcywgZWxlbWVudCk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1tyZW1vdmVUYWJFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdFwicmVtb3ZlLXRhYlwiLFxuXHRcdCk7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRjb25zdCBidXR0b24gPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XHRcImJ1dHRvblwiLFxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKGJ1dHRvbiBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50ICYmIGJ1dHRvbi5kaXNhYmxlZCAhPT0gdHJ1ZSkge1xuXHRcdFx0XHRjb25zdCByZWZlcmVuY2UgPSBidXR0b24uZ2V0QXR0cmlidXRlKFxuXHRcdFx0XHRcdGAke0FUVFJJQlVURV9QUkVGSVh9dGFiLXJlZmVyZW5jZWAsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChyZWZlcmVuY2UpIHtcblx0XHRcdFx0XHRjb25zdCBjb250YWluZXIgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoYFtpZD0ke3JlZmVyZW5jZX1dYCk7XG5cdFx0XHRcdFx0aWYgKGNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRjb250YWluZXIucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRpbml0VGFiQnV0dG9ucy5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR0aGlzW25hdkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaFwiLCB0aGlzW2NoYW5nZVRhYkV2ZW50SGFuZGxlcl0pO1xuXHR0aGlzW25hdkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzW2NoYW5nZVRhYkV2ZW50SGFuZGxlcl0pO1xuXG5cdHRoaXNbbmF2RWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoXCIsIHRoaXNbcmVtb3ZlVGFiRXZlbnRIYW5kbGVyXSk7XG5cdHRoaXNbbmF2RWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXNbcmVtb3ZlVGFiRXZlbnRIYW5kbGVyXSk7XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHR0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblxuXHRcdGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXMocGF0aCkpIHtcblx0XHRcdGlmIChlbGVtZW50ID09PSB0aGlzKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoaWRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdH07XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBvYnNlcnZlZE5vZGVcbiAqL1xuZnVuY3Rpb24gYXR0YWNoVGFiTXV0YXRpb25PYnNlcnZlcihvYnNlcnZlZE5vZGUpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0aWYgKGhhc09iamVjdExpbmsob2JzZXJ2ZWROb2RlLCBtdXRhdGlvbk9ic2VydmVyU3ltYm9sKSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8qKlxuXHQgKiB0aGlzIGNvbnN0cnVjdCBtb25pdG9ycyBhIG5vZGUgd2hldGhlciBpdCBpcyBkaXNhYmxlZCBvciBtb2RpZmllZFxuXHQgKiBAdHlwZSB7TXV0YXRpb25PYnNlcnZlcn1cblx0ICovXG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuXHRcdGlmIChpc0FycmF5KG11dGF0aW9ucykpIHtcblx0XHRcdGNvbnN0IG11dGF0aW9uID0gbXV0YXRpb25zLnBvcCgpO1xuXHRcdFx0aWYgKG11dGF0aW9uIGluc3RhbmNlb2YgTXV0YXRpb25SZWNvcmQpIHtcblx0XHRcdFx0aW5pdFRhYkJ1dHRvbnMuY2FsbChzZWxmKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdG9ic2VydmVyLm9ic2VydmUob2JzZXJ2ZWROb2RlLCB7XG5cdFx0Y2hpbGRMaXN0OiBmYWxzZSxcblx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdHN1YnRyZWU6IGZhbHNlLFxuXHRcdGF0dHJpYnV0ZUZpbHRlcjogW1xuXHRcdFx0XCJkaXNhYmxlZFwiLFxuXHRcdFx0QVRUUklCVVRFX0JVVFRPTl9MQUJFTCxcblx0XHRcdGAke0FUVFJJQlVURV9QUkVGSVh9YnV0dG9uLWljb25gLFxuXHRcdF0sXG5cdH0pO1xuXG5cdGFkZFRvT2JqZWN0TGluayhvYnNlcnZlZE5vZGUsIG11dGF0aW9uT2JzZXJ2ZXJTeW1ib2wsIG9ic2VydmVyKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkgeztcblxuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udHJvbF1gLFxuXHQpO1xuXHR0aGlzW25hdkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YG5hdlske0FUVFJJQlVURV9ST0xFfT1uYXZdYCxcblx0KTtcblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09cG9wcGVyXWAsXG5cdCk7XG5cdHRoaXNbcG9wcGVyTmF2RWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PXBvcHBlci1uYXZdYCxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UHJvbWlzZTx1bmtub3duPn1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKlxuICovXG5mdW5jdGlvbiBpbml0VGFiQnV0dG9ucygpIHs7XG5cblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0bGV0IGFjdGl2ZVJlZmVyZW5jZTtcblxuXHRjb25zdCBkaW1lbnNpb25zQ2FsY3VsYXRlZCA9IHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uZ2V0VmlhKFxuXHRcdFwiZGF0YS5jYWxjdWxhdGVkXCIsXG5cdFx0ZmFsc2UsXG5cdCk7XG5cblx0Y29uc3QgYnV0dG9ucyA9IFtdO1xuXHRjb25zdCBub2RlcyA9IGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIHVuZGVmaW5lZCwgbnVsbCk7IC8vIG51bGwgXHUyMUE2IG9ubHkgdW5uYW1lZCBzbG90c1xuXG5cdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIGNvbnRpbnVlO1xuXHRcdGxldCBsYWJlbCA9IGdldEJ1dHRvbkxhYmVsLmNhbGwodGhpcywgbm9kZSk7XG5cblx0XHRsZXQgcmVmZXJlbmNlO1xuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShcImlkXCIpKSB7XG5cdFx0XHRyZWZlcmVuY2UgPSBub2RlLmdldEF0dHJpYnV0ZShcImlkXCIpO1xuXHRcdH1cblxuXHRcdGxldCBkaXNhYmxlZDtcblx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSB8fCBub2RlLmRpc2FibGVkID09PSB0cnVlKSB7XG5cdFx0XHRkaXNhYmxlZCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCFyZWZlcmVuY2UpIHtcblx0XHRcdHJlZmVyZW5jZSA9IG5ldyBJRChcInRhYlwiKS50b1N0cmluZygpO1xuXHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoXCJpZFwiLCByZWZlcmVuY2UpO1xuXHRcdH1cblxuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShgJHtBVFRSSUJVVEVfUFJFRklYfWJ1dHRvbi1pY29uYCkpIHtcblx0XHRcdGxhYmVsID0gYDxzcGFuIHBhcnQ9XCJsYWJlbFwiPiR7bGFiZWx9PC9zcGFuPjxpbWcgcGFydD1cImljb25cIiBzcmM9XCIke25vZGUuZ2V0QXR0cmlidXRlKFxuXHRcdFx0XHRgJHtBVFRSSUJVVEVfUFJFRklYfWJ1dHRvbi1pY29uYCxcblx0XHRcdCl9XCI+YDtcblx0XHR9XG5cblx0XHRsZXQgcmVtb3ZlID0gZmFsc2U7XG5cdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKGAke0FUVFJJQlVURV9QUkVGSVh9cmVtb3ZhYmxlYCkpIHtcblx0XHRcdHJlbW92ZSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKG5vZGUubWF0Y2hlcyhcIi5hY3RpdmVcIikgPT09IHRydWUgJiYgZGlzYWJsZWQgIT09IHRydWUpIHtcblx0XHRcdG5vZGUuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblx0XHRcdGFjdGl2ZVJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcblx0XHR9XG5cblx0XHRjb25zdCBzdGF0ZSA9IFwiXCI7XG5cdFx0Y29uc3QgY2xhc3NlcyA9IGRpbWVuc2lvbnNDYWxjdWxhdGVkID8gXCJcIiA6IFwiaW52aXNpYmxlXCI7XG5cblx0XHRidXR0b25zLnB1c2goe1xuXHRcdFx0cmVmZXJlbmNlLFxuXHRcdFx0bGFiZWwsXG5cdFx0XHRzdGF0ZSxcblx0XHRcdGNsYXNzOiBjbGFzc2VzLFxuXHRcdFx0ZGlzYWJsZWQsXG5cdFx0XHRyZW1vdmUsXG5cdFx0fSk7XG5cblx0XHRhdHRhY2hUYWJNdXRhdGlvbk9ic2VydmVyLmNhbGwodGhpcywgbm9kZSk7XG5cdH1cblxuXHR0aGlzLnNldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIiwgY2xvbmUoYnV0dG9ucykpO1xuXHR0aGlzLnNldE9wdGlvbihcImJ1dHRvbnMucG9wcGVyXCIsIFtdKTtcblx0dGhpcy5zZXRPcHRpb24oXCJtYXJrZXJcIiwgcmFuZG9tKCkpO1xuXG5cdHJldHVybiBhZGp1c3RCdXR0b25WaXNpYmlsaXR5LmNhbGwodGhpcykudGhlbigoKSA9PiB7XG5cdFx0aWYgKGFjdGl2ZVJlZmVyZW5jZSkge1xuXHRcdFx0cmV0dXJuIG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRcdFx0Y29uc3QgYnV0dG9uID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRcdFx0YFske0FUVFJJQlVURV9QUkVGSVh9dGFiLXJlZmVyZW5jZT1cIiR7YWN0aXZlUmVmZXJlbmNlfVwiXWAsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChidXR0b24gaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiBidXR0b24uZGlzYWJsZWQgIT09IHRydWUpIHtcblx0XHRcdFx0XHRzaG93LmNhbGwodGhpcywgYnV0dG9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSkucnVuKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gY2hlY2tBbmRSZWFycmFuZ2VCdXR0b25zKCkgeztcblxuXHRpZiAodGhpc1tkaW1lbnNpb25zU3ltYm9sXS5nZXRWaWEoXCJkYXRhLmNhbGN1bGF0ZWRcIiwgZmFsc2UpICE9PSB0cnVlKSB7XG5cdFx0Y2FsY3VsYXRlTmF2aWdhdGlvbkJ1dHRvbnNEaW1lbnNpb25zLmNhbGwodGhpcyk7XG5cdH1cblxuXHRyZWFycmFuZ2VCdXR0b25zLmNhbGwodGhpcyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1Byb21pc2U8dW5rbm93bj59XG4gKi9cbmZ1bmN0aW9uIGFkanVzdEJ1dHRvblZpc2liaWxpdHkoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuXHRcdFx0Y29uc3QgZGVmQ291bnQgPSBzZWxmLmdldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIikubGVuZ3RoO1xuXHRcdFx0Y29uc3QgZG9tQ291bnQgPSBzZWxmW25hdkVsZW1lbnRTeW1ib2xdLnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0XHRcdCdidXR0b25bZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIl0nLFxuXHRcdFx0KS5sZW5ndGg7XG5cblx0XHRcdC8vIGluIGRyYXdpbmdcblx0XHRcdGlmIChkZWZDb3VudCAhPT0gZG9tQ291bnQpIHJldHVybjtcblxuXHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXG5cdFx0XHRjaGVja0FuZFJlYXJyYW5nZUJ1dHRvbnMuY2FsbChzZWxmKTtcblxuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH0pO1xuXG5cdFx0b2JzZXJ2ZXIub2JzZXJ2ZShzZWxmW25hdkVsZW1lbnRTeW1ib2xdLCB7XG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdH0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG5vZGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0RGltVmFsdWUodmFsdWUpIHtcblx0aWYgKFt1bmRlZmluZWQsIG51bGxdLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Y29uc3QgdmFsdWVBc0ludCA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG5cblx0aWYgKGlzTmFOKHZhbHVlQXNJbnQpKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRyZXR1cm4gdmFsdWVBc0ludDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBjYWxjQm94V2lkdGgobm9kZSkge1xuXHRjb25zdCBkaW0gPSBnZXRHbG9iYWwoXCJ3aW5kb3dcIikuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKTtcblx0Y29uc3QgYm91bmRpbmcgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdHJldHVybiAoXG5cdFx0Z2V0RGltVmFsdWUoZGltW1wiYm9yZGVyLWxlZnQtd2lkdGhcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJwYWRkaW5nLWxlZnRcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJtYXJnaW4tbGVmdFwiXSkgK1xuXHRcdGdldERpbVZhbHVlKGJvdW5kaW5nW1wid2lkdGhcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJib3JkZXItcmlnaHQtd2lkdGhcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJtYXJnaW4tcmlnaHRcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJwYWRkaW5nLWxlZnRcIl0pXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gcmVhcnJhbmdlQnV0dG9ucygpIHs7XG5cblx0Y29uc3Qgc3RhbmRhcmRCdXR0b25zID0gW107XG5cdGNvbnN0IHBvcHBlckJ1dHRvbnMgPSBbXTtcblxuXHRsZXQgc3VtID0gMDtcblx0Y29uc3Qgc3BhY2UgPSB0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLmdldFZpYShcImRhdGEuc3BhY2VcIik7XG5cblx0Y29uc3QgYnV0dG9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiKTtcblx0Zm9yIChjb25zdCBbLCBidXR0b25dIG9mIGJ1dHRvbnMuZW50cmllcygpKSB7XG5cdFx0Y29uc3QgcmVmID0gYnV0dG9uPy5yZWZlcmVuY2U7XG5cblx0XHRzdW0gKz0gdGhpc1tkaW1lbnNpb25zU3ltYm9sXS5nZXRWaWEoYGRhdGEuYnV0dG9uLiR7cmVmfWApO1xuXG5cdFx0aWYgKHN1bSA+IHNwYWNlKSB7XG5cdFx0XHRwb3BwZXJCdXR0b25zLnB1c2goY2xvbmUoYnV0dG9uKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN0YW5kYXJkQnV0dG9ucy5wdXNoKGNsb25lKGJ1dHRvbikpO1xuXHRcdH1cblx0fVxuXG5cdHRoaXMuc2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiLCBzdGFuZGFyZEJ1dHRvbnMpO1xuXHR0aGlzLnNldE9wdGlvbihcImJ1dHRvbnMucG9wcGVyXCIsIHBvcHBlckJ1dHRvbnMpO1xuXG5cdGlmICh0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0aWYgKHBvcHBlckJ1dHRvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gY2FsY3VsYXRlTmF2aWdhdGlvbkJ1dHRvbnNEaW1lbnNpb25zKCkgeztcblxuXHRjb25zdCB3aWR0aCA9IHRoaXNbbmF2RWxlbWVudFN5bWJvbF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cblx0bGV0IHN0YXJ0RW5kV2lkdGggPSAwO1xuXG5cdGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIHVuZGVmaW5lZCwgXCJzdGFydFwiKS5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0c3RhcnRFbmRXaWR0aCArPSBjYWxjQm94V2lkdGguY2FsbCh0aGlzLCBub2RlKTtcblx0fSk7XG5cblx0Z2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcywgdW5kZWZpbmVkLCBcImVuZFwiKS5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0c3RhcnRFbmRXaWR0aCArPSBjYWxjQm94V2lkdGguY2FsbCh0aGlzLCBub2RlKTtcblx0fSk7XG5cblx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXS5zZXRWaWEoXCJkYXRhLnNwYWNlXCIsIHdpZHRoIC0gc3RhcnRFbmRXaWR0aCAtIDIpO1xuXHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLnNldFZpYShcImRhdGEudmlzaWJsZVwiLCAhKHdpZHRoID09PSAwKSk7XG5cblx0Y29uc3QgYnV0dG9ucyA9IHRoaXNcblx0XHQuZ2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiKVxuXHRcdC5jb25jYXQodGhpcy5nZXRPcHRpb24oXCJidXR0b25zLnBvcHBlclwiKSk7XG5cblx0Zm9yIChjb25zdCBbaSwgYnV0dG9uXSBvZiBidXR0b25zLmVudHJpZXMoKSkge1xuXHRcdGNvbnN0IHJlZiA9IGJ1dHRvbj8ucmVmZXJlbmNlO1xuXHRcdGNvbnN0IGVsZW1lbnQgPSB0aGlzW25hdkVsZW1lbnRTeW1ib2xdLnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRgOnNjb3BlID4gWyR7QVRUUklCVVRFX1BSRUZJWH10YWItcmVmZXJlbmNlPVwiJHtyZWZ9XCJdYCxcblx0XHQpO1xuXHRcdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCkpIGNvbnRpbnVlO1xuXG5cdFx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXS5zZXRWaWEoXG5cdFx0XHRgZGF0YS5idXR0b24uJHtyZWZ9YCxcblx0XHRcdGNhbGNCb3hXaWR0aC5jYWxsKHRoaXMsIGVsZW1lbnQpLFxuXHRcdCk7XG5cdFx0YnV0dG9uW1wiY2xhc3NcIl0gPSBuZXcgVG9rZW5MaXN0KGJ1dHRvbltcImNsYXNzXCJdKVxuXHRcdFx0LnJlbW92ZShcImludmlzaWJsZVwiKVxuXHRcdFx0LnRvU3RyaW5nKCk7XG5cdH1cblxuXHRjb25zdCBzbG90cyA9IHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdLnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0YG5hdlske0FUVFJJQlVURV9QUkVGSVh9cm9sZT1uYXZdID4gc2xvdC5pbnZpc2libGUsIHNsb3RbJHtBVFRSSUJVVEVfUFJFRklYfXJvbGU9c2xvdF0uaW52aXNpYmxlYCxcblx0KTtcblx0Zm9yIChjb25zdCBbLCBzbG90XSBvZiBzbG90cy5lbnRyaWVzKCkpIHtcblx0XHRzbG90LmNsYXNzTGlzdC5yZW1vdmUoXCJpbnZpc2libGVcIik7XG5cdH1cblxuXHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLnNldFZpYShcImRhdGEuY2FsY3VsYXRlZFwiLCB0cnVlKTtcblx0dGhpcy5zZXRPcHRpb24oXCJidXR0b25zLnN0YW5kYXJkXCIsIGNsb25lKGJ1dHRvbnMpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRCdXR0b25MYWJlbChub2RlKSB7O1xuXG5cdGxldCBsYWJlbDtcblx0bGV0IHNldExhYmVsID0gZmFsc2U7XG5cdGlmIChub2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMKSkge1xuXHRcdGxhYmVsID0gbm9kZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0JVVFRPTl9MQUJFTCk7XG5cdH0gZWxzZSB7XG5cdFx0bGFiZWwgPSBub2RlLmlubmVyVGV4dDtcblx0XHRzZXRMYWJlbCA9IHRydWU7XG5cdH1cblxuXHRpZiAoIWlzU3RyaW5nKGxhYmVsKSkge1xuXHRcdGxhYmVsID0gXCJcIjtcblx0fVxuXG5cdGxhYmVsID0gbGFiZWwudHJpbSgpO1xuXG5cdGlmIChsYWJlbCA9PT0gXCJcIikge1xuXHRcdGxhYmVsID0gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHMubmV3LXRhYi1sYWJlbFwiLCBcIk5ldyBUYWJcIik7XG5cdH1cblxuXHRpZiAobGFiZWwubGVuZ3RoID4gMTAwKSB7XG5cdFx0bGFiZWwgPSBgJHtsYWJlbC5zdWJzdHJpbmcoMCwgOTkpfVx1MjAyNmA7XG5cdH1cblxuXHRpZiAoc2V0TGFiZWwgPT09IHRydWUpIHtcblx0XHRub2RlLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMLCBsYWJlbCk7XG5cdH1cblxuXHRyZXR1cm4gbGFiZWw7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHRlbXBsYXRlIGlkPVwiYnV0dG9uc1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiBwYXJ0PVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItc3RhdGUgcGF0aDpidXR0b25zLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZCBwYXRoOmJ1dHRvbnMuZGlzYWJsZWQgfCBpZjp0cnVlLCAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci10YWItcmVmZXJlbmNlIHBhdGg6YnV0dG9ucy5yZWZlcmVuY2VcIj48c3BhblxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6YnV0dG9ucy5sYWJlbFwiPjwvc3Bhbj48c3BhbiBwYXJ0PVwicmVtb3ZlLXRhYlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6YnV0dG9ucy5yZW1vdmUgfCA/OnJlbW92ZS10YWI6aGlkZGVuIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cInJlbW92ZS10YWJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPjwvc3Bhbj48L2J1dHRvbj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPG5hdiBkYXRhLW1vbnN0ZXItcm9sZT1cIm5hdlwiIHBhcnQ9XCJuYXZcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1tYXJrZXIgcGF0aDptYXJrZXJcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwiYnV0dG9ucyBwYXRoOmJ1dHRvbnMuc3RhbmRhcmRcIj5cbiAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwic3RhcnRcIiBjbGFzcz1cImludmlzaWJsZVwiPjwvc2xvdD5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwicG9wcGVyXCIgcGFydD1cInBvcHBlclwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cIm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1wb3BwZXItYXJyb3c+PC9kaXY+XG5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJwb3BwZXItbmF2XCIgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXItbmF2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwiYnV0dG9ucyBwYXRoOmJ1dHRvbnMucG9wcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cInBvcHBlclwiIGNsYXNzPVwiaW52aXNpYmxlXCI+PC9zbG90PlxuICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJlbmRcIiBjbGFzcz1cImludmlzaWJsZVwiPjwvc2xvdD5cbiAgICAgICAgICAgIDwvbmF2PlxuICAgICAgICAgICAgPHNsb3QgZGF0YS1tb25zdGVyLXJvbGU9XCJzbG90XCIgY2xhc3M9XCJpbnZpc2libGVcIj48L3Nsb3Q+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUYWJzKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBDdXN0b21FbGVtZW50LCBhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCB9IGZyb20gXCIuL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEN1c3RvbUNvbnRyb2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYXR0YWNoZWRJbnRlcm5hbFN5bWJvbCA9IFN5bWJvbChcImF0dGFjaGVkSW50ZXJuYWxcIik7XG5cbi8qKlxuICogVGhpcyBpcyBhIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGN1c3RvbSBjb250cm9scyB1c2luZyB0aGUgcG93ZXIgb2YgQ3VzdG9tRWxlbWVudC5cbiAqXG4gKiBBZnRlciBkZWZpbmluZyBhIGBDdXN0b21FbGVtZW50YCwgdGhlIGByZWdpc3RlckN1c3RvbUVsZW1lbnRgIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgY2xhc3MgbmFtZS4gT25seSB0aGVuXG4gKiB3aWxsIHRoZSB0YWcgZGVmaW5lZCB2aWEgdGhlIGBnZXRUYWdgIG1ldGhvZCBiZSBtYWRlIGtub3duIHRvIHRoZSBET00uXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9jdXN0b21jb250cm9sLWNsYXNzLnBuZ1wiPlxuICpcbiAqIFRoaXMgY29udHJvbCB1c2VzIGBhdHRhY2hJbnRlcm5hbHMoKWAgdG8gaW50ZWdyYXRlIHRoZSBjb250cm9sIGludG8gYSBmb3JtLiBJZiB0aGUgdGFyZ2V0IGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnRcbiAqIHRoaXMgbWV0aG9kLCB0aGUgW3BvbHlmaWxsXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9lbGVtZW50LWludGVybmFscy1wb2x5ZmlsbCkgY2FuIGJlIHVzZWQuXG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhlIG9iamVjdCB1c2luZyB0aGUgZnVuY3Rpb24gYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKWAuXG4gKlxuICogVGhpcyBjb250cm9sIHVzZXMgYGF0dGFjaEludGVybmFscygpYCB0byBpbnRlZ3JhdGUgdGhlIGNvbnRyb2wgaW50byBhIGZvcm0uIElmIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydFxuICogdGhpcyBtZXRob2QsIHRoZSBQb2x5ZmlsbCBmb3IgYXR0YWNoSW50ZXJuYWxzKCkgY2FuIGJlIHVzZWQ6IHtAbGluayBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9lbGVtZW50LWludGVybmFscy1wb2x5ZmlsbHxlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbH0uXG4gKlxuICogTGVhcm4gbW9yZSBhYm91dCBXSUNHIFdlYiBDb21wb25lbnRzOiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvd2ViY29tcG9uZW50c3xXSUNHIFdlYiBDb21wb25lbnRzfS5cbiAqXG4gKiBSZWFkIHRoZSBIVE1MIHNwZWNpZmljYXRpb24gZm9yIEN1c3RvbSBFbGVtZW50czoge0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI2N1c3RvbS1lbGVtZW50c3xDdXN0b20gRWxlbWVudHN9LlxuICpcbiAqIFJlYWQgdGhlIEhUTUwgc3BlY2lmaWNhdGlvbiBmb3IgQ3VzdG9tIEVsZW1lbnQgUmVhY3Rpb25zOiB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9kZXYvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnQtcmVhY3Rpb25zfEN1c3RvbSBFbGVtZW50IFJlYWN0aW9uc30uXG4gKlxuICogQHN1bW1hcnkgQSBiYXNlIGNsYXNzIGZvciBjdXN0b20gY29udHJvbHMgYmFzZWQgb24gQ3VzdG9tRWxlbWVudC5cbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE0LjBcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQGV4dGVuZHMgTW9uc3Rlci5ET00uQ3VzdG9tRWxlbWVudFxuICovXG5jbGFzcyBDdXN0b21Db250cm9sIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGUgY29uc3RydWN0b3IgbWV0aG9kIG9mIEN1c3RvbUNvbnRyb2wsIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGNyZWF0aW5nIGEgbmV3IGluc3RhbmNlLlxuXHQgKiBJdCBjaGVja3Mgd2hldGhlciB0aGUgZWxlbWVudCBzdXBwb3J0cyBgYXR0YWNoSW50ZXJuYWxzKClgIGFuZCBpbml0aWFsaXplcyBhbiBpbnRlcm5hbCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudFxuXHQgKiBpZiBzdXBwb3J0ZWQuIEFkZGl0aW9uYWxseSwgaXQgaW5pdGlhbGl6ZXMgYSBNdXRhdGlvbk9ic2VydmVyIHRvIHdhdGNoIGZvciBhdHRyaWJ1dGUgY2hhbmdlcy5cblx0ICpcblx0ICogU2VlIHRoZSBsaW5rcyBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbjpcblx0ICoge0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI2RvbS1jdXN0b21lbGVtZW50cmVnaXN0cnktZGVmaW5lfEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5kZWZpbmUoKX1cblx0ICoge0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI2RvbS1jdXN0b21lbGVtZW50cmVnaXN0cnktZ2V0fEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5nZXQoKX1cblx0ICogYW5kIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFsc3xFbGVtZW50SW50ZXJuYWxzfVxuXHQgKlxuXHQgKiBAaW5oZXJpdGRvY1xuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICogQHNpbmNlIDEuNy4wXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0Ly8gY2hlY2sgaWYgZWxlbWVudCBzdXBwb3J0cyBgYXR0YWNoSW50ZXJuYWxzKClgXG5cdFx0aWYgKHR5cGVvZiB0aGlzW1wiYXR0YWNoSW50ZXJuYWxzXCJdID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHRoaXNbYXR0YWNoZWRJbnRlcm5hbFN5bWJvbF0gPSB0aGlzLmF0dGFjaEludGVybmFscygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBgYXR0YWNoSW50ZXJuYWxzKClgIGlzIG5vdCBzdXBwb3J0ZWQsIHNvIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdFx0XHR0aHJvdyBFcnJvcihcblx0XHRcdFx0XCJ0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVwiLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHQvLyBpbml0aWFsaXplIGEgTXV0YXRpb25PYnNlcnZlciB0byB3YXRjaCBmb3IgYXR0cmlidXRlIGNoYW5nZXNcblx0XHRpbml0T2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tY29udHJvbEBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZSBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqIEBzaW5jZSAxLjE1LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuXHRcdHJldHVybiBzdXBlci5vYnNlcnZlZEF0dHJpYnV0ZXM7XG5cdH1cblxuXHQvKipcblx0ICogQWRkaW5nIGEgc3RhdGljIGBmb3JtQXNzb2NpYXRlZGAgcHJvcGVydHksIHdpdGggYSB0cnVlIHZhbHVlLCBtYWtlcyBhbiBhdXRvbm9tb3VzIGN1c3RvbSBlbGVtZW50IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2VlIFthdHRhY2hJbnRlcm5hbHMoKV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2F0dGFjaEludGVybmFsc31cblx0ICogQHNlZSBbQ3VzdG9tIEVsZW1lbnRzIEZhY2UgRXhhbXBsZV17QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnRzLWZhY2UtZXhhbXBsZX1cblx0ICogQHNpbmNlIDEuMTQuMFxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0c3RhdGljIGZvcm1Bc3NvY2lhdGVkID0gdHJ1ZTtcblxuXHQvKipcblx0ICogQGluaGVyaXRkb2Ncblx0ICogQHNpbmNlIDEuMTQuMFxuXHQgKiovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cyk7XG5cdH1cblxuXHQvKipcblx0ICogTXVzdCBiZSBvdmVycmlkZGVuIGJ5IGEgZGVyaXZlZCBjbGFzcyBhbmQgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbC5cblx0ICpcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgQVBJXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscyksIHdoaWNoIGlzIGEgcGFydCBvZiB0aGUgd2ViIHN0YW5kYXJkIGZvciBjdXN0b20gZWxlbWVudHMuXG5cdCAqXG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSB2YWx1ZSBnZXR0ZXIgbXVzdCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgZGVyaXZlZCBjbGFzc1xuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHRocm93IEVycm9yKFwidGhlIHZhbHVlIGdldHRlciBtdXN0IGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBkZXJpdmVkIGNsYXNzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE11c3QgYmUgb3ZlcnJpZGRlbiBieSBhIGRlcml2ZWQgY2xhc3MgYW5kIHNldCB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wuXG5cdCAqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIEFQSV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpLCB3aGljaCBpcyBhIHBhcnQgb2YgdGhlIHdlYiBzdGFuZGFyZCBmb3IgY3VzdG9tIGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSB2YWx1ZSBzZXR0ZXIgbXVzdCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgZGVyaXZlZCBjbGFzc1xuXHQgKi9cblx0c2V0IHZhbHVlKHZhbHVlKSB7XG5cdFx0dGhyb3cgRXJyb3IoXCJ0aGUgdmFsdWUgc2V0dGVyIG11c3QgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGRlcml2ZWQgY2xhc3NcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7Tm9kZUxpc3R9XG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvbGFiZWxzfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCBsYWJlbHMoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LmxhYmVscztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH1cblx0ICovXG5cdGdldCBuYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZShcIm5hbWVcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0IHR5cGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuZ2V0VGFnKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7VmFsaWRpdHlTdGF0ZX1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqIEBzZWUgW1ZhbGlkaXR5U3RhdGVde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9WYWxpZGl0eVN0YXRlfVxuXHQgKiBAc2VlIFt2YWxpZGl0eV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL3ZhbGlkaXR5fVxuXHQgKi9cblx0Z2V0IHZhbGlkaXR5KCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy52YWxpZGl0eTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy92YWxpZGF0aW9uTWVzc2FnZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpIHtcblx0XHRyZXR1cm4gZ2V0SW50ZXJuYWwuY2FsbCh0aGlzKT8udmFsaWRhdGlvbk1lc3NhZ2U7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHNpbmNlIDEuMTQuMFxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL3dpbGxWYWxpZGF0ZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCB3aWxsVmFsaWRhdGUoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LndpbGxWYWxpZGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAc2luY2UgMS4xNC4wXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvc3RhdGVzXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKi9cblx0Z2V0IHN0YXRlcygpIHtcblx0XHRyZXR1cm4gZ2V0SW50ZXJuYWwuY2FsbCh0aGlzKT8uc3RhdGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIEByZXR1cm4ge0hUTUxGb250RWxlbWVudHxudWxsfVxuXHQgKiBAc2luY2UgMS4xNC4wXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvZm9ybVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCBmb3JtKCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy5mb3JtO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiAvLyBVc2UgdGhlIGNvbnRyb2wncyBuYW1lIGFzIHRoZSBiYXNlIG5hbWUgZm9yIHN1Ym1pdHRlZCBkYXRhXG5cdCAqIGNvbnN0IG4gPSB0aGlzLmdldEF0dHJpYnV0ZSgnbmFtZScpO1xuXHQgKiBjb25zdCBlbnRyaWVzID0gbmV3IEZvcm1EYXRhKCk7XG5cdCAqIGVudHJpZXMuYXBwZW5kKG4gKyAnLWZpcnN0LW5hbWUnLCB0aGlzLmZpcnN0TmFtZV8pO1xuXHQgKiBlbnRyaWVzLmFwcGVuZChuICsgJy1sYXN0LW5hbWUnLCB0aGlzLmxhc3ROYW1lXyk7XG5cdCAqIHRoaXMuc2V0Rm9ybVZhbHVlKGVudHJpZXMpO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHBhcmFtIHtGaWxlfHN0cmluZ3xGb3JtRGF0YX0gdmFsdWVcblx0ICogQHBhcmFtIHtGaWxlfHN0cmluZ3xGb3JtRGF0YX0gc3RhdGVcblx0ICogQHNpbmNlIDEuMTQuMFxuXHQgKiBAcmV0dXJuIHt1bmRlZmluZWR9XG5cdCAqIEB0aHJvd3Mge0RPTUV4Y2VwdGlvbn0gTm90U3VwcG9ydGVkRXJyb3Jcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvc2V0Rm9ybVZhbHVlXG5cdCAqL1xuXHRzZXRGb3JtVmFsdWUodmFsdWUsIHN0YXRlKSB7XG5cdFx0Z2V0SW50ZXJuYWwuY2FsbCh0aGlzKS5zZXRGb3JtVmFsdWUodmFsdWUsIHN0YXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gZmxhZ3Ncblx0ICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBtZXNzYWdlXG5cdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGFuY2hvclxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL3NldFZhbGlkaXR5XG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICogQHJldHVybiB7dW5kZWZpbmVkfVxuXHQgKiBAdGhyb3dzIHtET01FeGNlcHRpb259IE5vdFN1cHBvcnRlZEVycm9yXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKi9cblx0c2V0VmFsaWRpdHkoZmxhZ3MsIG1lc3NhZ2UsIGFuY2hvcikge1xuXHRcdGdldEludGVybmFsLmNhbGwodGhpcykuc2V0VmFsaWRpdHkoZmxhZ3MsIG1lc3NhZ2UsIGFuY2hvcik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy9jaGVja1ZhbGlkaXR5XG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHRocm93cyB7RE9NRXhjZXB0aW9ufSBOb3RTdXBwb3J0ZWRFcnJvclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGNoZWNrVmFsaWRpdHkoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LmNoZWNrVmFsaWRpdHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAc2luY2UgMS4xNC4wXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvcmVwb3J0VmFsaWRpdHlcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqIEB0aHJvd3Mge0RPTUV4Y2VwdGlvbn0gTm90U3VwcG9ydGVkRXJyb3Jcblx0ICovXG5cdHJlcG9ydFZhbGlkaXR5KCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy5yZXBvcnRWYWxpZGl0eSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGBmb3JtYCBhdHRyaWJ1dGUgb2YgdGhlIGN1c3RvbSBjb250cm9sIHRvIHRoZSBgaWRgIG9mIHRoZSBwYXNzZWQgZm9ybSBlbGVtZW50LlxuXHQgKiBJZiBubyBmb3JtIGVsZW1lbnQgaXMgcGFzc2VkLCByZW1vdmVzIHRoZSBgZm9ybWAgYXR0cmlidXRlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hUTUxGb3JtRWxlbWVudH0gZm9ybSAtIFRoZSBmb3JtIGVsZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGNvbnRyb2xcblx0ICovXG5cdGZvcm1Bc3NvY2lhdGVkQ2FsbGJhY2soZm9ybSkge1xuXHRcdGlmIChmb3JtKSB7XG5cdFx0XHRpZiAoZm9ybS5pZCkge1xuXHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShcImZvcm1cIiwgZm9ybS5pZCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiZm9ybVwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBvciByZW1vdmVzIHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZSBvZiB0aGUgY3VzdG9tIGNvbnRyb2wgYmFzZWQgb24gdGhlIHBhc3NlZCB2YWx1ZS5cblx0ICpcblx0ICogQHBhcmFtIHtib29sZWFufSBkaXNhYmxlZCAtIFdoZXRoZXIgb3Igbm90IHRoZSBjb250cm9sIHNob3VsZCBiZSBkaXNhYmxlZFxuXHQgKi9cblx0Zm9ybURpc2FibGVkQ2FsbGJhY2soZGlzYWJsZWQpIHtcblx0XHRpZiAoZGlzYWJsZWQpIHtcblx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIiwgXCJcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbW9kZVxuXHQgKi9cblx0Zm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrKHN0YXRlLCBtb2RlKSB7fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Zm9ybVJlc2V0Q2FsbGJhY2soKSB7XG5cdFx0dGhpcy52YWx1ZSA9IFwiXCI7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG4gKiBAdGhpcyBDdXN0b21Db250cm9sXG4gKi9cbmZ1bmN0aW9uIGdldEludGVybmFsKCkge1xuXHRpZiAoIShhdHRhY2hlZEludGVybmFsU3ltYm9sIGluIHRoaXMpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XCJFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XCIsXG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiB0aGlzW2F0dGFjaGVkSW50ZXJuYWxTeW1ib2xdO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKiBAdGhpcyBDdXN0b21Db250cm9sXG4gKi9cbmZ1bmN0aW9uIGluaXRPYnNlcnZlcigpIHtcblx0Ly8gdmFsdWVcblx0dGhpc1thdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bXCJ2YWx1ZVwiXSA9ICgpID0+IHtcblx0XHR0aGlzLnNldE9wdGlvbihcInZhbHVlXCIsIHRoaXMuZ2V0QXR0cmlidXRlKFwidmFsdWVcIikpO1xuXHR9O1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEJ1dHRvblN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IEJ1dHRvblN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRCdXR0b25TdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIGJ1dHRvbiB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5LGJ1dHRvbnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnksLm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnksLm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofWJ1dHRvbjphY3RpdmUsYnV0dG9uOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9YnV0dG9uOmFjdGl2ZXt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX0ubW9uc3Rlci1idXR0b24tYmFyLC5tb25zdGVyLWJ1dHRvbi1ncm91cHthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpzdHJldGNoO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ubW9uc3Rlci1idXR0b24tZ3JvdXB7Ym94LXNpemluZzpib3JkZXItYm94O2dhcDowO21hcmdpbjoxcmVtIDB9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwPjpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1yaWdodDpjYWxjKHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSotMSl9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwIDpob3Zlcntib3gtc2hhZG93Om5vbmV9YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9fS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItc2hhZG93Om5vbmU7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2FsaWduLWl0ZW1zOnN0cmV0Y2g7ZGlzcGxheTpmbGV4fSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBSaXBwbGVTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBSaXBwbGVTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0UmlwcGxlU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciByaXBwbGUgeyBcbnNwYW4ubW9uc3Rlci1meC1yaXBwbGV7YW5pbWF0aW9uOm1vbnN0ZXItZngtcmlwcGxlIC42cyBsaW5lYXI7YmFja2dyb3VuZC1jb2xvcjpoc2xhKDAsMCUsMTAwJSwuNyk7Ym9yZGVyLXJhZGl1czo1MCU7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnNjYWxlKDApfUBrZXlmcmFtZXMgbW9uc3Rlci1meC1yaXBwbGV7dG97b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSg0KX19IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQ3VzdG9tQ29udHJvbCB9IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tY29udHJvbC5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCB9IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9CVVRUT05fQ0xBU1MgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBCdXR0b25TdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBSaXBwbGVTdHlsZVNoZWV0IH0gZnJvbSBcIi4uL3N0eWxlc2hlZXQvcmlwcGxlLm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcblxuZXhwb3J0IHsgQnV0dG9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmV4cG9ydCBjb25zdCBidXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiYnV0dG9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgY3JlYXRlcyBhIGJ1dHRvbiBlbGVtZW50IHdpdGggYSB2YXJpZXR5IG9mIG9wdGlvbnMuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9idXR0b24ucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5XG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyA8bW9uc3Rlci1idXR0b24gLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItYnV0dG9uJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItYnV0dG9uPjwvbW9uc3Rlci1idXR0b24+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IHtCdXR0b259IGZyb20gJ0BzY2h1a2FpL2NvbXBvbmVudC1mb3JtL3NvdXJjZS9idXR0b24uanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1idXR0b24nKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBgZGF0YS1tb25zdGVyLWJ1dHRvbi1jbGFzc2AgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgQ1NTIGNsYXNzIG9mIHRoZSBidXR0b24uXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi9leGFtcGxlL2J1dHRvbi5tanNcbiAqIEBzdGFydHVtbCBidXR0b24ucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDdXN0b21Db250cm9sXG4gKiBDdXN0b21Db250cm9sIDx8LS0gQnV0dG9uXG4gKiBAZW5kdW1sXG4gKlxuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc3VtbWFyeSBBIHNpbXBsZSBidXR0b25cbiAqL1xuY2xhc3MgQnV0dG9uIGV4dGVuZHMgQ3VzdG9tQ29udHJvbCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9jb21wb25lbnQtZm9ybS9idXR0b25AQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLkJ1dHRvbn1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7O1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudGhhbmRsZXIuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmNsaWNrKCkgbWV0aG9kIHNpbXVsYXRlcyBhIGNsaWNrIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvY2xpY2t9XG5cdCAqL1xuXHRjbGljaygpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5jbGljaylcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uY2xpY2soKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5mb2N1cygpIG1ldGhvZCBzZXRzIGZvY3VzIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvZm9jdXN9XG5cdCAqL1xuXHRmb2N1cyhvcHRpb25zKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZm9jdXMpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmZvY3VzKG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmJsdXIoKSBtZXRob2QgcmVtb3ZlcyBmb2N1cyBmcm9tIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICovXG5cdGJsdXIoKSB7XG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZSBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcblx0XHRjb25zdCBhdHRyaWJ1dGVzID0gc3VwZXIub2JzZXJ2ZWRBdHRyaWJ1dGVzO1xuXHRcdGF0dHJpYnV0ZXMucHVzaChBVFRSSUJVVEVfQlVUVE9OX0NMQVNTKTtcblx0XHRyZXR1cm4gYXR0cmlidXRlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvYXR0YWNoSW50ZXJuYWxzfVxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0c3RhdGljIGdldCBmb3JtQXNzb2NpYXRlZCgpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudCBzZWxlY3Rpb24gb2YgdGhlIFNlbGVjdFxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItc2VsZWN0Jyk7XG5cdCAqIGNvbnNvbGUubG9nKGUudmFsdWUpXG5cdCAqIC8vIFx1MjFBNiAxXG5cdCAqIC8vIFx1MjFBNiBbJzEnLCcyJ11cblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfGFycmF5fVxuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcInZhbHVlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBzZWxlY3Rpb25cblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXNlbGVjdCcpO1xuXHQgKiBlLnZhbHVlPTFcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfGFycmF5fSB2YWx1ZVxuXHQgKiBAc2luY2UgMS4yLjBcblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwidmFsdWVcIiwgdmFsdWUpO1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzPy5zZXRGb3JtVmFsdWUodGhpcy52YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGxhYmVscyBMYWJlbHNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5idXR0b249PHNsb3Q+PC9zbG90PiBCdXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGFjdGlvbnMgQ2FsbGJhY2tzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb25zLmNsaWNrPVwidGhyb3cgRXJyb3JcIiBDYWxsYmFjayB3aGVuIGNsaWNrZWRcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNsYXNzZXMgQ1NTIGNsYXNzZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzZXMuYnV0dG9uPVwibW9uc3Rlci1idXR0b24tcHJpbWFyeVwiIENTUyBjbGFzcyBmb3IgdGhlIGJ1dHRvblxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGRpc2FibGVkPWZhbHNlIERpc2FibGVkIHN0YXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBlZmZlY3RzIEVmZmVjdHNcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBlZmZlY3RzLnJpcHBsZT10cnVlIFJpcHBsZSBlZmZlY3Rcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRidXR0b246IFwiPHNsb3Q+PC9zbG90PlwiLFxuXHRcdFx0fSxcblx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIm1vbnN0ZXItYnV0dG9uLXByaW1hcnlcIixcblx0XHRcdH0sXG5cdFx0XHRkaXNhYmxlZDogZmFsc2UsXG5cdFx0XHRhY3Rpb25zOiB7XG5cdFx0XHRcdGNsaWNrOiAoZSkgPT4ge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBjbGljayBhY3Rpb24gaXMgbm90IGRlZmluZWRcIik7XG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0ZWZmZWN0czoge1xuXHRcdFx0XHRyaXBwbGU6IHRydWUsXG5cdFx0XHR9LFxuXHRcdFx0dmFsdWU6IG51bGwsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWJ1dHRvblwiO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0FycmF5PENTU1N0eWxlU2hlZXQ+fVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtSaXBwbGVTdHlsZVNoZWV0LCBCdXR0b25TdHlsZVNoZWV0XTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtpbml0RXZlbnRoYW5kbGVyfVxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLmV2ZW50Om1vbnN0ZXItYnV0dG9uLWNsaWNrZWRcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50aGFuZGxlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdGNvbnN0IGJ1dHRvbiA9IHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF07XG5cblx0Y29uc3QgdHlwZSA9IFwiY2xpY2tcIjtcblxuXHRidXR0b24uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRjb25zdCBjYWxsYmFjayA9IHNlbGYuZ2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiKTtcblxuXHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItYnV0dG9uLWNsaWNrZWRcIiwge1xuXHRcdFx0YnV0dG9uOiBzZWxmLFxuXHRcdH0pO1xuXG5cdFx0aWYgKCFpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdGV2ZW50LFxuXHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcImNvbnRyb2xcIixcblx0XHQpO1xuXG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIE5vZGUgJiYgc2VsZi5oYXNOb2RlKGVsZW1lbnQpKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNhbGxiYWNrLmNhbGwoc2VsZiwgZXZlbnQpO1xuXHR9KTtcblxuXHRpZiAoc2VsZi5nZXRPcHRpb24oXCJlZmZlY3RzLnJpcHBsZVwiKSkge1xuXHRcdGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgY3JlYXRlUmlwcGxlLmJpbmQoc2VsZikpO1xuXHR9XG5cblx0Ly8gZGF0YS1tb25zdGVyLW9wdGlvbnNcblx0c2VsZlthdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bQVRUUklCVVRFX0JVVFRPTl9DTEFTU10gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRzZWxmLnNldE9wdGlvbihcImNsYXNzZXMuYnV0dG9uXCIsIHZhbHVlKTtcblx0fTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWJ1dHRvbl1gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxidXR0b24gZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkaXNhYmxlZCBwYXRoOmRpc2FibGVkIHwgaWY6dHJ1ZSwgY2xhc3MgcGF0aDpjbGFzc2VzLmJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgcGFydD1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMuYnV0dG9uXCI+PC9idXR0b24+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJpcHBsZShldmVudCkgeztcblx0Y29uc3QgYnV0dG9uID0gdGhpc1tidXR0b25FbGVtZW50U3ltYm9sXTtcblxuXHRjb25zdCBjaXJjbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcblx0Y29uc3QgZGlhbWV0ZXIgPSBNYXRoLm1heChidXR0b24uY2xpZW50V2lkdGgsIGJ1dHRvbi5jbGllbnRIZWlnaHQpO1xuXHRjb25zdCByYWRpdXMgPSBkaWFtZXRlciAvIDI7XG5cblx0Y2lyY2xlLnN0eWxlLndpZHRoID0gY2lyY2xlLnN0eWxlLmhlaWdodCA9IGAke2RpYW1ldGVyfXB4YDtcblx0Y2lyY2xlLnN0eWxlLmxlZnQgPSBgJHtldmVudC5jbGllbnRYIC0gYnV0dG9uLm9mZnNldExlZnQgLSByYWRpdXN9cHhgO1xuXHRjaXJjbGUuc3R5bGUudG9wID0gYCR7ZXZlbnQuY2xpZW50WSAtIGJ1dHRvbi5vZmZzZXRUb3AgLSByYWRpdXN9cHhgO1xuXHRjaXJjbGUuY2xhc3NMaXN0LmFkZChcIm1vbnN0ZXItZngtcmlwcGxlXCIpO1xuXG5cdGNvbnN0IHJpcHBsZXMgPSBidXR0b24uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIm1vbnN0ZXItZngtcmlwcGxlXCIpO1xuXHRmb3IgKGNvbnN0IHJpcHBsZSBvZiByaXBwbGVzKSB7XG5cdFx0cmlwcGxlLnJlbW92ZSgpO1xuXHR9XG5cblx0YnV0dG9uLmFwcGVuZENoaWxkKGNpcmNsZSk7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChCdXR0b24pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFN0YXRlQnV0dG9uU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgU3RhdGVCdXR0b25TdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0U3RhdGVCdXR0b25TdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHN0YXRlYnV0dG9uIHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZ3JheS0xOiNmNmY2ZjY7LS1tb25zdGVyLWNvbG9yLWdyYXktMjojZTJlMmUyOy0tbW9uc3Rlci1jb2xvci1ncmF5LTM6IzhiOGI4YjstLW1vbnN0ZXItY29sb3ItZ3JheS00OiM2ZjZmNmY7LS1tb25zdGVyLWNvbG9yLWdyYXktNTojM2UzZTNlOy0tbW9uc3Rlci1jb2xvci1ncmF5LTY6IzIyMjstLW1vbnN0ZXItY29sb3Itcm9zZS0xOiNmZmY3Zjk7LS1tb25zdGVyLWNvbG9yLXJvc2UtMjojZmZkY2U1Oy0tbW9uc3Rlci1jb2xvci1yb3NlLTM6I2ZmM2I4ZDstLW1vbnN0ZXItY29sb3Itcm9zZS00OiNkYjAwNzI7LS1tb25zdGVyLWNvbG9yLXJvc2UtNTojODAwMDQwOy0tbW9uc3Rlci1jb2xvci1yb3NlLTY6IzRjMDAyMzstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTE6I2ZmZjhmODstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTI6I2ZmZGRkZjstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTM6I2ZmNDI2YzstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTQ6I2RlMDA1MTstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTU6IzgyMDAyYzstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTY6IzUxMDAxODstLW1vbnN0ZXItY29sb3ItcmVkLTE6I2ZmZjhmNjstLW1vbnN0ZXItY29sb3ItcmVkLTI6I2ZmZGRkODstLW1vbnN0ZXItY29sb3ItcmVkLTM6I2ZmNDY0NzstLW1vbnN0ZXItY29sb3ItcmVkLTQ6I2UwMDAyYjstLW1vbnN0ZXItY29sb3ItcmVkLTU6IzgzMDAxNDstLW1vbnN0ZXItY29sb3ItcmVkLTY6IzUzMDAwMzstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTE6I2ZmZjhmNTstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTI6I2ZmZGVkMTstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTM6I2ZkNGQwMDstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQ6I2NkM2MwMDstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTU6Izc1MjEwMDstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTY6IzQwMTYwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMTojZmZmOGYzOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0yOiNmZmRmYzY7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTM6I2Q1NzMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNDojYWM1YzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi01OiM2MzMzMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTY6IzM3MWQwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItMTojZmZmOGVmOy0tbW9uc3Rlci1jb2xvci1hbWJlci0yOiNmZmUwYjI7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTM6I2I5ODMwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNDojOTI2NzAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci01OiM1MjM4MDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTY6IzMwMjEwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTE6I2ZmZjllNTstLW1vbnN0ZXItY29sb3IteWVsbG93LTI6I2ZmZTUzZTstLW1vbnN0ZXItY29sb3IteWVsbG93LTM6IzljOGIwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTQ6IzdkNmYwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTU6IzQ2M2QwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTY6IzI5MjMwMDstLW1vbnN0ZXItY29sb3ItbGltZS0xOiNmN2ZmYWM7LS1tb25zdGVyLWNvbG9yLWxpbWUtMjojZDVmMjAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTM6IzgxOTMwMDstLW1vbnN0ZXItY29sb3ItbGltZS00OiM2Nzc2MDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNTojMzk0MTAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTY6IzIyMjYwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0xOiNlNWZmYzM7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMjojOThmYjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTM6IzVjOWIwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS00OiM0OTdjMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNTojMjY0NTAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTY6IzE4MjYwMDstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMTojZTBmZmQ5Oy0tbW9uc3Rlci1jb2xvci1ncmVlbi0yOiM3MmZmNmM7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTM6IzAwYTIxZjstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNDojMDA4MjE3Oy0tbW9uc3Rlci1jb2xvci1ncmVlbi01OiMwMDQ5MDg7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTY6IzA2MjgwMDstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0xOiNkY2ZmZTY7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMjojNWRmZmEyOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTM6IzAwYTA1YTstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC00OiMwMDgxNDc7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNTojMDA0ODI1Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTY6IzAwMjgxMjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0xOiNkYWZmZWY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMjojNDJmZmM2Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTM6IzAwOWY3ODstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS00OiMwMDdmNWY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNTojMDA0NzM0Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTY6IzAwMjgxYjstLW1vbnN0ZXItY29sb3ItdGVhbC0xOiNkN2ZmZjc7LS1tb25zdGVyLWNvbG9yLXRlYWwtMjojMDBmZmU0Oy0tbW9uc3Rlci1jb2xvci10ZWFsLTM6IzAwOWU4YzstLW1vbnN0ZXItY29sb3ItdGVhbC00OiMwMDdjNmU7LS1tb25zdGVyLWNvbG9yLXRlYWwtNTojMDA0NDNjOy0tbW9uc3Rlci1jb2xvci10ZWFsLTY6IzAwMjcyMjstLW1vbnN0ZXItY29sb3ItY3lhbi0xOiNjNGZmZmU7LS1tb25zdGVyLWNvbG9yLWN5YW4tMjojMDBmYWZiOy0tbW9uc3Rlci1jb2xvci1jeWFuLTM6IzAwOTk5YTstLW1vbnN0ZXItY29sb3ItY3lhbi00OiMwMDdhN2I7LS1tb25zdGVyLWNvbG9yLWN5YW4tNTojMDA0MzQ0Oy0tbW9uc3Rlci1jb2xvci1jeWFuLTY6IzAwMjUyNTstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTE6I2RhZmFmZjstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTI6IzhkZjBmZjstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTM6IzAwOThhOTstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTQ6IzAwNzk4NzstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTU6IzAwNDA0ODstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTY6IzAwMjIyNzstLW1vbnN0ZXItY29sb3Itc2t5LTE6I2UzZjdmZjstLW1vbnN0ZXItY29sb3Itc2t5LTI6I2FlZTlmZjstLW1vbnN0ZXItY29sb3Itc2t5LTM6IzAwOTRiNDstLW1vbnN0ZXItY29sb3Itc2t5LTQ6IzAwNzU5MDstLW1vbnN0ZXItY29sb3Itc2t5LTU6IzAwNDA0ZjstLW1vbnN0ZXItY29sb3Itc2t5LTY6IzAwMWYyODstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMTojZThmNmZmOy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0yOiNiOWUzZmY7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTM6IzAwOTJjNTstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNDojMDA3NDlkOy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi01OiMwMDNjNTQ7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTY6IzAwMWQyYTstLW1vbnN0ZXItY29sb3ItYXp1cmUtMTojZThmMmZmOy0tbW9uc3Rlci1jb2xvci1henVyZS0yOiNjNmUwZmY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTM6IzAwOGZkYjstLW1vbnN0ZXItY29sb3ItYXp1cmUtNDojMDA3MWFmOy0tbW9uc3Rlci1jb2xvci1henVyZS01OiMwMDNiNWU7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTY6IzAwMWMzMDstLW1vbnN0ZXItY29sb3ItYmx1ZS0xOiNmMGY0ZmY7LS1tb25zdGVyLWNvbG9yLWJsdWUtMjojZDRlMGZmOy0tbW9uc3Rlci1jb2xvci1ibHVlLTM6IzAwODlmYzstLW1vbnN0ZXItY29sb3ItYmx1ZS00OiMwMDZkY2E7LS1tb25zdGVyLWNvbG9yLWJsdWUtNTojMDAzODZkOy0tbW9uc3Rlci1jb2xvci1ibHVlLTY6IzAwMWEzOTstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTE6I2YzZjNmZjstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTI6I2RlZGRmZjstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTM6IzY1N2VmZjstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTQ6IzAwNjFmYzstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTU6IzAwMzI4YTstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTY6IzAwMTY0OTstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTE6I2Y3ZjFmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTI6I2U4ZGFmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTM6IzliNzBmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTQ6Izc5NGFmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTU6IzJkMGZiZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTY6IzBiMDA3NDstLW1vbnN0ZXItY29sb3ItcHVycGxlLTE6I2ZkZjRmZjstLW1vbnN0ZXItY29sb3ItcHVycGxlLTI6I2Y3ZDlmZjstLW1vbnN0ZXItY29sb3ItcHVycGxlLTM6I2QxNTBmZjstLW1vbnN0ZXItY29sb3ItcHVycGxlLTQ6I2IwMWZlMzstLW1vbnN0ZXItY29sb3ItcHVycGxlLTU6IzY2MDA4NzstLW1vbnN0ZXItY29sb3ItcHVycGxlLTY6IzNhMDA0ZjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xOiNmZmYzZmM7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMjojZmZkN2Y2Oy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTM6I2Y5MTFlMDstLW1vbnN0ZXItY29sb3ItbWFnZW50YS00OiNjYTAwYjY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNTojNzQwMDY4Oy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTY6IzQ0MDAzYzstLW1vbnN0ZXItY29sb3ItcGluay0xOiNmZmY3ZmI7LS1tb25zdGVyLWNvbG9yLXBpbmstMjojZmZkY2VjOy0tbW9uc3Rlci1jb2xvci1waW5rLTM6I2ZmMmZiMjstLW1vbnN0ZXItY29sb3ItcGluay00OiNkMjAwOGY7LS1tb25zdGVyLWNvbG9yLXBpbmstNTojNzkwMDUxOy0tbW9uc3Rlci1jb2xvci1waW5rLTY6IzRiMDAzMH1kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17aGVpZ2h0OjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWJ1dHRvbl17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3RyYW5zaXRpb246d2lkdGggMTBzIGVhc2UtaW4tb3V0fWRpdltkYXRhLW1vbnN0ZXItcm9sZT1sYWJlbF17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXRlXXthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tc2VsZjpzdHJldGNoO2Rpc3BsYXk6ZmxleDt0cmFuc2l0aW9uOndpZHRoIDEycyBlYXNlLWluLW91dH1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdGVdPmltZyxbZGF0YS1tb25zdGVyLXJvbGU9c3RhdGVdPnN2Z3ttYXJnaW4tbGVmdDouM2VtfVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0+c3ZnLnN1Y2Nlc3NmdWx7YW5pbWF0aW9uOmJvdW5jeSAuNXMgbGluZWFyIGZvcndhcmRzO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzc2Z1bCl9W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXRlXT5zdmcuYWN0aXZpdHl7YW5pbWF0aW9uOmJvdW5jeSAuNXMgbGluZWFyIGZvcndhcmRzO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYWN0aXZpdHkpfVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0+c3ZnLmZhaWxlZHthbmltYXRpb246Ym91bmN5IC41cyBsaW5lYXIgZm9yd2FyZHM7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1mYWlsZWQpfVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0+c3ZnLmFjdGl2aXR5e2FuaW1hdGlvbi1kdXJhdGlvbjoxczthbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlO2FuaW1hdGlvbi1uYW1lOmFjdGl2aXR5O2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsMCwuMiwxKX1Aa2V5ZnJhbWVzIGFjdGl2aXR5ezAle3RyYW5zZm9ybTpzY2FsZSgxKX01MCV7dHJhbnNmb3JtOnNjYWxlKC4xKX10b3t0cmFuc2Zvcm06c2NhbGUoMSl9fUBrZXlmcmFtZXMgYm91bmN5ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjEpfTgwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEuMTUpfTkwJXt0cmFuc2Zvcm06c2NhbGUoLjkpfXRve3RyYW5zZm9ybTpzY2FsZSgxKX19IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IFN0YXRlLCBnZXRTdGF0ZUluc3RhbmNlRm9yIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGludGVybmFsU3ltYm9sID0gU3ltYm9sKFwiaW50ZXJuYWxTeW1ib2xcIik7XG5cbi8qKlxuICogVGhpcyBTdGF0ZSBjbGFzcyByZXByZXNlbnQgYSBTdGF0ZSB3aXRoIHByZXNlbnRhdGlvblxuICpcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlc1xuICovXG5jbGFzcyBTdGF0ZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwcmVzZW50YXRpb25cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICovXG5cdGNvbnN0cnVjdG9yKHN0YXRlLCBwcmVzZW50YXRpb24pIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge307XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uc3RhdGUgPSB2YWxpZGF0ZVN0cmluZyhzdGF0ZSk7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ucHJlc2VudGF0aW9uID0gdmFsaWRhdGVTdHJpbmcocHJlc2VudGF0aW9uKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gc3RhdGVcblx0ICovXG5cdGdldCBzdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3RhdGU7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHByZXNlbnRhdGlvblxuXHQgKi9cblx0Z2V0IHByZXNlbnRhdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0ucHJlc2VudGF0aW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlR5cGVzLlN0YXRlfVxuXHQgKi9cblx0Z2V0Q2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBTdGF0ZShcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN0YXRlLFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ucHJlc2VudGF0aW9uLFxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAc2luY2UgMS41LjBcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXMuU3RhdGV9XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXNcbiAqL1xuZnVuY3Rpb24gZ2V0U3RhdGVJbnN0YW5jZUZvcihzdGF0ZSkge1xuXHRzd2l0Y2ggKHN0YXRlKSB7XG5cdFx0Y2FzZSBcInN0YXRlbGVzc1wiOlxuXHRcdFx0cmV0dXJuIG5ldyBTdGF0ZShcInN0YXRlbGVzc1wiLCBcIlwiKTtcblx0XHRjYXNlIFwic3VjY2Vzc2Z1bFwiOlxuXHRcdFx0cmV0dXJuIG5ldyBTdGF0ZShcblx0XHRcdFx0XCJzdWNjZXNzZnVsXCIsXG5cdFx0XHRcdCc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgY2xhc3M9XCJzdWNjZXNzZnVsXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPjxwYXRoIGQ9XCJNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0em0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNnpcIi8+PHBhdGggZD1cIk0xMC45NyA0Ljk3YS4yMzUuMjM1IDAgMCAwLS4wMi4wMjJMNy40NzcgOS40MTcgNS4zODQgNy4zMjNhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNkw2Ljk3IDExLjAzYS43NS43NSAwIDAgMCAxLjA3OS0uMDJsMy45OTItNC45OWEuNzUuNzUgMCAwIDAtMS4wNzEtMS4wNXpcIi8+PC9zdmc+Jyxcblx0XHRcdCk7XG5cdFx0Y2FzZSBcImFjdGl2aXR5XCI6XG5cdFx0XHRyZXR1cm4gbmV3IFN0YXRlKFxuXHRcdFx0XHRcImFjdGl2aXR5XCIsXG5cdFx0XHRcdCc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgY2xhc3M9XCJhY3Rpdml0eVwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj48Y2lyY2xlIGN4PVwiOFwiIGN5PVwiOFwiIHI9XCI4XCIvPjwvc3ZnPicsXG5cdFx0XHQpO1xuXHRcdGNhc2UgXCJmYWlsZWRcIjogLy8gaHR0cHM6Ly9pY29ucy5nZXRib290c3RyYXAuY29tL2ljb25zL2V4Y2xhbWF0aW9uLWNpcmNsZS9cblx0XHRcdHJldHVybiBuZXcgU3RhdGUoXG5cdFx0XHRcdFwiZmFpbGVkXCIsXG5cdFx0XHRcdCc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgY2xhc3M9XCJmYWlsZWRcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+PHBhdGggZD1cIk04IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTR6bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2elwiLz48cGF0aCBkPVwiTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgMHpNNy4xIDQuOTk1YS45MDUuOTA1IDAgMSAxIDEuOCAwbC0uMzUgMy41MDdhLjU1Mi41NTIgMCAwIDEtMS4xIDBMNy4xIDQuOTk1elwiLz48L3N2Zz4nLFxuXHRcdFx0KTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIG5ldyBTdGF0ZShzdGF0ZSwgXCJcIik7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyByZWdpc3RlckN1c3RvbUVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBpc0ludGVnZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuL2J1dHRvbi5tanNcIjtcbmltcG9ydCB7IFN0YXRlQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvc3RhdGUtYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgZ2V0U3RhdGVJbnN0YW5jZUZvciwgU3RhdGUgfSBmcm9tIFwiLi90eXBlcy9zdGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgU3RhdGVCdXR0b24gfTtcblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgY3JlYXRlcyBhIGJ1dHRvbiBlbGVtZW50IHdpdGggYSB2YXJpZXR5IG9mIG9wdGlvbnMuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9zdGF0ZS1idXR0b24ucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5XG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyA8bW9uc3Rlci1zdGF0ZS1idXR0b24gLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItc3RhdGUtYnV0dG9uJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItc3RhdGUtYnV0dG9uPjwvbW9uc3Rlci1zdGF0ZS1idXR0b24+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IHtTdGF0ZUJ1dHRvbn0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL3N0YXRlLWJ1dHRvbi5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXN0YXRlLWJ1dHRvbicpO1xuICogYGBgXG4gKlxuICogVGhlIGBkYXRhLW1vbnN0ZXItYnV0dG9uLWNsYXNzYCBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBDU1MgY2xhc3Mgb2YgdGhlIGJ1dHRvbi5cbiAqXG4gKiBAc3RhcnR1bWwgc3RhdGUtYnV0dG9uLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gQ3VzdG9tQ29udHJvbFxuICogQ3VzdG9tQ29udHJvbCA8fC0tIEJ1dHRvblxuICogQnV0dG9uIDx8LS0gU3RhdGVCdXR0b25cbiAqIEBlbmR1bWxcbiAqXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzdW1tYXJ5IEEgc3RhdGUgYnV0dG9uIHdpdGggaWNvbnNcbiAqL1xuY2xhc3MgU3RhdGVCdXR0b24gZXh0ZW5kcyBCdXR0b24ge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc3RhdGUtYnV0dG9uQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBodG1sIHRhZyB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gc3RhdGVzIEF2YWlsYWJsZSBzdGF0dXNcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZX0gc3RhdGVzLnN1Y2Nlc3NmdWw9IHN1Y2Nlc3NmdWxcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZX0gc3RhdGVzLmFjdGl2aXR5PSBhY3Rpdml0eVxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlR5cGVzLlN0YXRlfSBzdGF0ZXMuZmFpbGVkPSBmYWlsZWRcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZX0gY3VycmVudCBjdXJyZW50IHN0YXR1c1xuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVBY3Rpb25DYWxsYmFja30gYWN0aW9ucy5jbGlja1xuXHQgKiBAZXh0ZW5kcyB7QnV0dG9ufVxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vdHdicy9pY29ucy9ibG9iL21haW4vTElDRU5TRS5tZHxCb290c3RyYXAgaWNvbnMgbGljZW5zZX1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdHN0YXRlczoge1xuXHRcdFx0XHRzdWNjZXNzZnVsOiBnZXRTdGF0ZUluc3RhbmNlRm9yKFwic3VjY2Vzc2Z1bFwiKSxcblx0XHRcdFx0YWN0aXZpdHk6IGdldFN0YXRlSW5zdGFuY2VGb3IoXCJhY3Rpdml0eVwiKSxcblx0XHRcdFx0ZmFpbGVkOiBnZXRTdGF0ZUluc3RhbmNlRm9yKFwiZmFpbGVkXCIpLFxuXHRcdFx0fSxcblx0XHRcdGN1cnJlbnQ6IGdldFN0YXRlSW5zdGFuY2VGb3IoXCJzdGF0ZWxlc3NcIiksXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYnV0dG9uLlxuXHQgKiBJZiBhIHRpbWVvdXQgaXMgc2V0LCB0aGUgc3RhdGUgaXMgYXV0b21hdGljYWxseSByZW1vdmVkIGFmdGVyIHRoZVxuXHQgKiBzcGVjaWZpZWQgdGltZS5cblx0ICpcblx0ICogQHNpbmNlIDMuMTguMCBhIHByZXZpb3VzbHkgc2V0IHRpbWVvdXQgaXMgY2xlYXJlZFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0YXRlfSBzdGF0ZVxuXHQgKiBAcGFyYW0ge251bWJlcn0gdGltZW91dFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5TdGF0ZUJ1dHRvbn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Vcblx0ICovXG5cdHNldFN0YXRlKHN0YXRlLCB0aW1lb3V0KSB7XG5cdFx0Y29uc3QgdGltZW91dFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJ0aW1lb3V0XCIpO1xuXHRcdGlmICh0aGlzW3RpbWVvdXRTeW1ib2xdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzW3RpbWVvdXRTeW1ib2xdKTtcblx0XHRcdGRlbGV0ZSB0aGlzW3RpbWVvdXRTeW1ib2xdO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9iaiA9IHRoaXMuZ2V0T3B0aW9uKGBzdGF0ZXMuJHt2YWxpZGF0ZVN0cmluZyhzdGF0ZSl9YCk7XG5cdFx0aWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub3QgZm91bmRcIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5zZXRPcHRpb24oXCJjdXJyZW50XCIsIHZhbGlkYXRlSW5zdGFuY2Uob2JqLCBTdGF0ZSkpO1xuXG5cdFx0aWYgKGlzSW50ZWdlcih0aW1lb3V0KSAmJiB0aW1lb3V0ID4gMCkge1xuXHRcdFx0dGhpc1t0aW1lb3V0U3ltYm9sXSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnJlbW92ZVN0YXRlKCk7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzW3RpbWVvdXRTeW1ib2xdO1xuXHRcdFx0fSwgdGltZW91dCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uU3RhdGVCdXR0b259XG5cdCAqL1xuXHRyZW1vdmVTdGF0ZSgpIHtcblx0XHR0aGlzLnNldE9wdGlvbihcImN1cnJlbnRcIiwgZ2V0U3RhdGVJbnN0YW5jZUZvcihcInN0YXRlbGVzc1wiKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXMuU3RhdGV8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0U3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKFwiY3VycmVudFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItc3RhdGUtYnV0dG9uXCI7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7QXJyYXk8Q1NTU3R5bGVTaGVldD59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRjb25zdCBzdHlsZXMgPSBCdXR0b24uZ2V0Q1NTU3R5bGVTaGVldCgpO1xuXHRcdHN0eWxlcy5wdXNoKFN0YXRlQnV0dG9uU3R5bGVTaGVldCk7XG5cdFx0cmV0dXJuIHN0eWxlcztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHRyZXR1cm4gYDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICA8YnV0dG9uIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiZGlzYWJsZWQgcGF0aDpkaXNhYmxlZCB8IGlmOnRydWUsIGNsYXNzIHBhdGg6Y2xhc3Nlcy5idXR0b25cIlxuICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgcGFydD1cImJ1dHRvblwiPlxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwibGFiZWxcIiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmJ1dHRvblwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3RhdGVcIiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y3VycmVudC5wcmVzZW50YXRpb25cIj48L2Rpdj5cbiAgICA8L2J1dHRvbj5cbjwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChTdGF0ZUJ1dHRvbik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGNsb25lIH0gZnJvbSBcIi4uL3V0aWwvY2xvbmUubWpzXCI7XG5pbXBvcnQgeyBERUxJTUlURVIsIFBhdGhmaW5kZXIsIFdJTERDQVJEIH0gZnJvbSBcIi4vcGF0aGZpbmRlci5tanNcIjtcblxuZXhwb3J0IHsgYnVpbGRNYXAsIFBBUkVOVCwgYXNzZW1ibGVQYXJ0cyB9O1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKi9cbmNvbnN0IFBBUkVOVCA9IFwiXlwiO1xuXG4vKipcbiAqIE1hcHMgY2FuIGJlIGVhc2lseSBjcmVhdGVkIGZyb20gZGF0YSBvYmplY3RzIHdpdGggdGhlIGhlbHAgb2YgdGhlIGZ1bmN0aW9uIGBidWlsZE1hcCgpYC5cbiAqXG4gKiBUaGUgcGF0aCBjYW4gYmUgc3BlY2lmaWVkIGFzIGVpdGhlciBhIHNpbXBsZSBkZWZpbml0aW9uIGEuYi5jIG9yIGEgdGVtcGxhdGUgJHthLmIuY30uXG4gKiBLZXkgYW5kIHZhbHVlIGNhbiBiZSBlaXRoZXIgYSBkZWZpbml0aW9uIG9yIGEgdGVtcGxhdGUuIFRoZSBrZXkgZG9lcyBub3QgaGF2ZSB0byBiZSBkZWZpbmVkLlxuICogVGhlIHRlbXBsYXRlcyBkZXRlcm1pbmUgdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIGtleXMgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgbWFwLiBFaXRoZXIgYSBzaW5nbGUgdmFsdWVcbiAqIGlkIGNhbiBiZSB0YWtlbiBvciBhIGNvbXBvc2l0ZSBrZXkgJHtpZH0gJHtuYW1lfSBjYW4gYmUgdXNlZC5cbiAqXG4gKiBJZiB5b3Ugd2FudCB0byBhY2Nlc3MgdmFsdWVzIG9mIHRoZSBwYXJlbnQgZGF0YSBzZXQsIHlvdSBoYXZlIHRvIHVzZSB0aGUgXiBjaGFyYWN0ZXIsIGZvciBleGFtcGxlICR7aWR9ICR7Xi5uYW1lfS5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvZGF0YS9idWlsZG1hcC5tanNcbiAqIEBwYXJhbSB7Kn0gc3ViamVjdCAtIFRoZSBkYXRhIG9iamVjdCBmcm9tIHdoaWNoIHRoZSBtYXAgd2lsbCBiZSBjcmVhdGVkXG4gKiBAcGFyYW0ge3N0cmluZ3xNb25zdGVyLkRhdGF+ZXhhbXBsZVNlbGVjdG9yQ2FsbGJhY2t9IHNlbGVjdG9yIC0gVGhlIHBhdGggdG8gdGhlIGRhdGEgb2JqZWN0LCBvciBhIGNhbGxiYWNrIHRoYXQgcmV0dXJucyBhIG1hcC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVUZW1wbGF0ZV0gLSBBIHRlbXBsYXRlIGZvciB0aGUgdmFsdWUgb2YgdGhlIG1hcC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBba2V5VGVtcGxhdGVdIC0gQSB0ZW1wbGF0ZSBmb3IgdGhlIGtleSBvZiB0aGUgbWFwLlxuICogQHBhcmFtIHtNb25zdGVyLkRhdGF+ZXhhbXBsZUZpbHRlckNhbGxiYWNrfSBbZmlsdGVyXSAtIEEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZmlsdGVyIG91dCB2YWx1ZXMuXG4gKiBAcmV0dXJuIHsqfSAtIFRoZSBjcmVhdGVkIG1hcC5cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRhdGFcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gLSBJZiB0aGUgdmFsdWUgaXMgbmVpdGhlciBhIHN0cmluZyBub3IgYSBmdW5jdGlvbi5cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gLSBJZiB0aGUgc2VsZWN0b3IgY2FsbGJhY2sgZG9lcyBub3QgcmV0dXJuIGEgbWFwLlxuICoqL1xuZnVuY3Rpb24gYnVpbGRNYXAoc3ViamVjdCwgc2VsZWN0b3IsIHZhbHVlVGVtcGxhdGUsIGtleVRlbXBsYXRlLCBmaWx0ZXIpIHtcblx0cmV0dXJuIGFzc2VtYmxlUGFydHMoc3ViamVjdCwgc2VsZWN0b3IsIGZpbHRlciwgZnVuY3Rpb24gKHYsIGssIG0pIHtcblx0XHRrID0gYnVpbGQodiwga2V5VGVtcGxhdGUsIGspO1xuXHRcdHYgPSBidWlsZCh2LCB2YWx1ZVRlbXBsYXRlKTtcblx0XHR0aGlzLnNldChrLCB2KTtcblx0fSk7XG59XG5cbi8qKlxuICogVGhlIGFzc2VtYmxlUGFydHMgZnVuY3Rpb24gaXMgYSBwcml2YXRlIGZ1bmN0aW9uIHRoYXQgaGVscHMgaW4gYnVpbGRpbmcgYSBtYXAgZnJvbSBhIHN1YmplY3Qgb2JqZWN0IGJhc2VkIG9uIGEgcHJvdmlkZWRcbiAqIHNlbGVjdG9yLiBUaGUgc2VsZWN0b3IgY2FuIGVpdGhlciBiZSBhIHN0cmluZyBvciBhIGNhbGxiYWNrIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIHVzZWQgYXMgYVxuICogaGVscGVyIGZ1bmN0aW9uIGJ5IG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgbW9kdWxlLlxuICpcbiAqIFRoZSBmdW5jdGlvbiB0YWtlcyBmb3VyIHBhcmFtZXRlcnM6XG4gKlxuICogc3ViamVjdDogVGhlIHN1YmplY3Qgb2JqZWN0IGZyb20gd2hpY2ggdGhlIG1hcCBpcyB0byBiZSBidWlsdFxuICogc2VsZWN0b3I6IFRoZSBzZWxlY3RvciB0byBkZXRlcm1pbmUgdGhlIHN0cnVjdHVyZSBvZiB0aGUgbWFwLiBJdCBjYW4gYmUgYSBzdHJpbmcgb3IgYSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqIGZpbHRlciAob3B0aW9uYWwpOiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gZmlsdGVyIHZhbHVlcyBiYXNlZCBvbiBzb21lIGNyaXRlcmlhLlxuICogY2FsbGJhY2s6IEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciBlYWNoIGVsZW1lbnQgaW4gdGhlIG1hcC5cbiAqIElmIHRoZSBzZWxlY3RvciBwYXJhbWV0ZXIgaXMgYSBjYWxsYmFjayBmdW5jdGlvbiwgaXQgaXMgZXhlY3V0ZWQgcGFzc2luZyB0aGUgc3ViamVjdCBhcyBpdHMgYXJndW1lbnQsXG4gKiBhbmQgdGhlIHJlc3VsdGluZyB2YWx1ZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIE1hcC4gT3RoZXJ3aXNlLCBpZiB0aGUgc2VsZWN0b3IgcGFyYW1ldGVyIGlzIGEgc3RyaW5nLFxuICogYnVpbGRGbGF0TWFwIGlzIGNhbGxlZCB0byBidWlsZCBhIGZsYXQgbWFwIHdpdGgga2V5cyBhbmQgdmFsdWVzIGV4dHJhY3RlZCBmcm9tIHRoZSBzdWJqZWN0IG9iamVjdCBiYXNlZCBvbiB0aGUgc2VsZWN0b3IuXG4gKlxuICogSWYgdGhlIGZpbHRlciBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQsIGl0IHdpbGwgYmUgdXNlZCB0byBmaWx0ZXIgb3V0IGNlcnRhaW4gZWxlbWVudHMgZnJvbSB0aGUgbWFwLCBiYXNlZCBvbiBzb21lXG4gKiBjcml0ZXJpYS4gVGhlIGNhbGxiYWNrIHdpbGwgYmUgcGFzc2VkIHRoZSB2YWx1ZSwga2V5LCBhbmQgbWFwIG9iamVjdCwgYW5kIGlmIGl0IHJldHVybnMgZmFsc2UsIHRoZSBlbGVtZW50IHdpbGwgYmUgc2tpcHBlZC5cbiAqXG4gKiBGb3IgZWFjaCBlbGVtZW50IGluIHRoZSBtYXAsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gKlxuICogdjogVGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50XG4gKiBrOiBUaGUga2V5IG9mIHRoZSBlbGVtZW50XG4gKiBtOiBUaGUgbWFwIG9iamVjdFxuICogVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBuZXcgbWFwIHdpdGggdGhlIHByb2Nlc3NlZCB2YWx1ZXMuIElmIG1hcCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgTWFwLCBhbiBlbXB0eSBtYXAgd2lsbCBiZSByZXR1cm5lZC5cbiAqXG4gKiBFeGFtcGxlIFVzYWdlOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGNvbnN0IG9iaiA9IHtcbiAqICAgbmFtZTogXCJKb2huXCIsXG4gKiAgIGFnZTogMzAsXG4gKiAgIGFkZHJlc3M6IHtcbiAqICAgICBjaXR5OiBcIk5ldyBZb3JrXCIsXG4gKiAgICAgc3RhdGU6IFwiTllcIixcbiAqICAgICBjb3VudHJ5OiBcIlVTQVwiLFxuICogICB9LFxuICogfTtcbiAqXG4gKiBjb25zdCBzZWxlY3RvciA9IFwiYWRkcmVzc1wiO1xuICpcbiAqIGNvbnN0IG1hcCA9IGFzc2VtYmxlUGFydHMob2JqLCBzZWxlY3RvciwgbnVsbCwgZnVuY3Rpb24gKHYsIGssIG0pIHtcbiAqICAgdGhpcy5zZXQoaywgdik7XG4gKiB9KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhtYXApO1xuICogLy8gT3V0cHV0OiBNYXAoMykge1xuICogLy8gICBcImFkZHJlc3MuY2l0eVwiID0+IFwiTmV3IFlvcmtcIixcbiAqIC8vICAgXCJhZGRyZXNzLnN0YXRlXCIgPT4gXCJOWVwiLFxuICogLy8gICBcImFkZHJlc3MuY291bnRyeVwiID0+IFwiVVNBXCJcbiAqIC8vIH1cbiAqIGBgYFxuICpcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSBzdWJqZWN0IC0gVGhlIHN1YmplY3Qgb2JqZWN0IGZyb20gd2hpY2ggdGhlIG1hcCBpcyB0byBiZSBidWlsdC5cbiAqIEBwYXJhbSB7c3RyaW5nfE1vbnN0ZXIuRGF0YX5leGFtcGxlU2VsZWN0b3JDYWxsYmFja30gc2VsZWN0b3IgLSBUaGUgc2VsZWN0b3IgdG8gZGV0ZXJtaW5lIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG1hcC4gSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGEgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge01vbnN0ZXIuRGF0YX5leGFtcGxlRmlsdGVyQ2FsbGJhY2t9IFtmaWx0ZXJdIC0gQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGZpbHRlciB2YWx1ZXMgYmFzZWQgb24gc29tZSBjcml0ZXJpYS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgbWFwLlxuICogQHJldHVybiB7TWFwfSAtIEEgbmV3IG1hcCB3aXRoIHRoZSBwcm9jZXNzZWQgdmFsdWVzLlxuICogQHRocm93cyB7VHlwZUVycm9yfSAtIFdoZW4gc2VsZWN0b3IgaXMgbmVpdGhlciBhIHN0cmluZyBub3IgYSBmdW5jdGlvbi5cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRhdGFcbiAqL1xuZnVuY3Rpb24gYXNzZW1ibGVQYXJ0cyhzdWJqZWN0LCBzZWxlY3RvciwgZmlsdGVyLCBjYWxsYmFjaykge1xuXHRjb25zdCByZXN1bHQgPSBuZXcgTWFwKCk7XG5cblx0bGV0IG1hcDtcblx0aWYgKGlzRnVuY3Rpb24oc2VsZWN0b3IpKSB7XG5cdFx0bWFwID0gc2VsZWN0b3Ioc3ViamVjdCk7XG5cdFx0aWYgKCEobWFwIGluc3RhbmNlb2YgTWFwKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInRoZSBzZWxlY3RvciBjYWxsYmFjayBtdXN0IHJldHVybiBhIG1hcFwiKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoaXNTdHJpbmcoc2VsZWN0b3IpKSB7XG5cdFx0bWFwID0gbmV3IE1hcCgpO1xuXHRcdGJ1aWxkRmxhdE1hcC5jYWxsKG1hcCwgc3ViamVjdCwgc2VsZWN0b3IpO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJzZWxlY3RvciBpcyBuZWl0aGVyIGEgc3RyaW5nIG5vciBhIGZ1bmN0aW9uXCIpO1xuXHR9XG5cblx0aWYgKCEobWFwIGluc3RhbmNlb2YgTWFwKSkge1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRtYXAuZm9yRWFjaCgodiwgaywgbSkgPT4ge1xuXHRcdGlmIChpc0Z1bmN0aW9uKGZpbHRlcikpIHtcblx0XHRcdGlmIChmaWx0ZXIuY2FsbChtLCB2LCBrKSAhPT0gdHJ1ZSkgcmV0dXJuO1xuXHRcdH1cblxuXHRcdGNhbGxiYWNrLmNhbGwocmVzdWx0LCB2LCBrLCBtKTtcblx0fSk7XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHN1YmplY3RcbiAqIEBwYXJhbSBzZWxlY3RvclxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIHBhcmVudE1hcFxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gYnVpbGRGbGF0TWFwKHN1YmplY3QsIHNlbGVjdG9yLCBrZXksIHBhcmVudE1hcCkge1xuXHRjb25zdCBjdXJyZW50TWFwID0gbmV3IE1hcCgpO1xuXG5cdGNvbnN0IHJlc3VsdExlbmd0aCA9IHRoaXMuc2l6ZTtcblxuXHRpZiAoa2V5ID09PSB1bmRlZmluZWQpIGtleSA9IFtdO1xuXG5cdGNvbnN0IHBhcnRzID0gc2VsZWN0b3Iuc3BsaXQoREVMSU1JVEVSKTtcblx0bGV0IGN1cnJlbnQgPSBcIlwiO1xuXHRjb25zdCBjdXJyZW50UGF0aCA9IFtdO1xuXHRkbyB7XG5cdFx0Y3VycmVudCA9IHBhcnRzLnNoaWZ0KCk7XG5cdFx0Y3VycmVudFBhdGgucHVzaChjdXJyZW50KTtcblxuXHRcdGlmIChjdXJyZW50ID09PSBXSUxEQ0FSRCkge1xuXHRcdFx0Y29uc3QgZmluZGVyID0gbmV3IFBhdGhmaW5kZXIoc3ViamVjdCk7XG5cdFx0XHRsZXQgbWFwO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRtYXAgPSBmaW5kZXIuZ2V0VmlhKGN1cnJlbnRQYXRoLmpvaW4oREVMSU1JVEVSKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGNvbnN0IGEgPSBlO1xuXHRcdFx0XHRtYXAgPSBuZXcgTWFwKCk7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoY29uc3QgW2ssIG9dIG9mIG1hcCkge1xuXHRcdFx0XHRjb25zdCBjb3B5S2V5ID0gY2xvbmUoa2V5KTtcblxuXHRcdFx0XHRjdXJyZW50UGF0aC5tYXAoKGEpID0+IHtcblx0XHRcdFx0XHRjb3B5S2V5LnB1c2goYSA9PT0gV0lMRENBUkQgPyBrIDogYSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGNvbnN0IGtrID0gY29weUtleS5qb2luKERFTElNSVRFUik7XG5cdFx0XHRcdGNvbnN0IHN1YiA9IGJ1aWxkRmxhdE1hcC5jYWxsKFxuXHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0byxcblx0XHRcdFx0XHRwYXJ0cy5qb2luKERFTElNSVRFUiksXG5cdFx0XHRcdFx0Y29weUtleSxcblx0XHRcdFx0XHRvLFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGlmIChpc09iamVjdChzdWIpICYmIHBhcmVudE1hcCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0c3ViW1BBUkVOVF0gPSBwYXJlbnRNYXA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjdXJyZW50TWFwLnNldChraywgc3ViKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gd2hpbGUgKHBhcnRzLmxlbmd0aCA+IDApO1xuXG5cdC8vIG5vIHNldCBpbiBjaGlsZCBydW5cblx0aWYgKHJlc3VsdExlbmd0aCA9PT0gdGhpcy5zaXplKSB7XG5cdFx0Zm9yIChjb25zdCBbaywgb10gb2YgY3VycmVudE1hcCkge1xuXHRcdFx0dGhpcy5zZXQoaywgbyk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHN1YmplY3Q7XG59XG5cbi8qKlxuICogV2l0aCB0aGUgaGVscCBvZiB0aGlzIGZpbHRlciBjYWxsYmFjaywgdmFsdWVzIGNhbiBiZSBmaWx0ZXJlZCBvdXQuIE9ubHkgaWYgdGhlIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUsIHRoZSB2YWx1ZSBpcyB0YWtlbiBmb3IgdGhlIG1hcC5cbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5EYXRhfmV4YW1wbGVGaWx0ZXJDYWxsYmFja1xuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAgS2V5XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKiBAc2VlIHtAbGluayBNb25zdGVyLkRhdGEuYnVpbGRNYXB9XG4gKi9cblxuLyoqXG4gKiBBbHRlcm5hdGl2ZWx5IHRvIGEgc3RyaW5nIHNlbGVjdG9yIGEgY2FsbGJhY2sgY2FuIGJlIHNwZWNpZmllZC4gdGhpcyBtdXN0IHJldHVybiBhIG1hcC5cbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHtidWlsZE1hcH0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvZGF0YS9idWlsZG1hcC5tanMnO1xuICpcbiAqIGxldCBvYmogPSB7XG4gKiAgICAgICAgICAgICAgICBcImRhdGFcIjogW1xuICogICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxMCxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiQ2Fzc2FuZHJhXCIsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwiZW5yaWNobWVudFwiOiB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAxLCBsYWJlbDogXCJYWFNcIiwgcHJpY2U6IFtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQyd9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJ31cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDIsIGxhYmVsOiBcIlhTXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAzLCBsYWJlbDogXCJTXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiA0LCBsYWJlbDogXCJMXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKlxuICogICAgICAgICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICAgICAgfSxcbiAqICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMjAsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIlllc3NleSFcIixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgXCJlbnJpY2htZW50XCI6IHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDEsIGxhYmVsOiBcIlhYU1wiLCBwcmljZTogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMiwgbGFiZWw6IFwiWFNcIiwgcHJpY2U6IFtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQyd9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJ31cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDMsIGxhYmVsOiBcIlNcIiwgcHJpY2U6IFtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQyd9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJ31cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDQsIGxhYmVsOiBcIkxcIiwgcHJpY2U6IFtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQyd9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJ31cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAqICAgICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgIH07XG4gKlxuICogbGV0IGNhbGxiYWNrID0gZnVuY3Rpb24gKHN1YmplY3QpIHtcbiAqICAgICAgICAgICAgICAgIGxldCBtID0gbmV3IE1hcDtcbiAqXG4gKiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtpLCBiXSBvZiBPYmplY3QuZW50cmllcyhzdWJqZWN0LmRhdGEpKSB7XG4gKlxuICogICAgICAgICAgICAgICAgICAgIGxldCBrZXkxID0gaTtcbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaiwgY10gb2YgT2JqZWN0LmVudHJpZXMoYi5lbnJpY2htZW50LnZhcmlhbnRzKSkge1xuICogICAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5MiA9IGo7XG4gKlxuICogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCBkXSBvZiBPYmplY3QuZW50cmllcyhjLnByaWNlKSkge1xuICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkzID0gaztcbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLm5hbWUgPSBiLm5hbWU7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmxhYmVsID0gYy5sYWJlbDtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuaWQgPSBba2V5MSwga2V5Miwga2V5M10uam9pbignLicpO1xuICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0uc2V0KGQuaWQsIGQpO1xuICogICAgICAgICAgICAgICAgICAgICAgICB9XG4gKlxuICogICAgICAgICAgICAgICAgICAgIH1cbiAqICAgICAgICAgICAgICAgIH1cbiAqICAgICAgICAgICAgICAgIHJldHVybiBtO1xuICogICAgICAgICAgICB9XG4gKlxuICogbGV0IG1hcCA9IGJ1aWxkTWFwKG9iaiwgY2FsbGJhY2ssICcke25hbWV9ICR7dmt9JywgJyR7aWR9JylcbiAqXG4gKiAvLyBcdTIxQTYgTWFwKDMpIHtcbiAqIC8vICBcIjAuMC4wXCI6XCJDYXNzYW5kcmEgMTIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIwLjAuMVwiOlwiQ2Fzc2FuZHJhIDEyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMC4xLjBcIjpcIkNhc3NhbmRyYSAyMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjAuMS4xXCI6XCJDYXNzYW5kcmEgMjIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIwLjIuMFwiOlwiQ2Fzc2FuZHJhIDMyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMC4yLjFcIjpcIkNhc3NhbmRyYSAzMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjAuMy4wXCI6XCJDYXNzYW5kcmEgNDIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIwLjMuMVwiOlwiQ2Fzc2FuZHJhIDQyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMS4wLjBcIjpcIlllc3NleSEgMTIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIxLjAuMVwiOlwiWWVzc2V5ISAxMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjEuMS4wXCI6XCJZZXNzZXkhIDIyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMS4xLjFcIjpcIlllc3NleSEgMjIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIxLjIuMFwiOlwiWWVzc2V5ISAzMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjEuMi4xXCI6XCJZZXNzZXkhIDMyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMS4zLjBcIjpcIlllc3NleSEgNDIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIxLjMuMVwiOlwiWWVzc2V5ISA0Mi4xMiBcdTIwQUNcIlxuICogLy8gfVxuICpcbiAqIEBjYWxsYmFjayBNb25zdGVyLkRhdGF+ZXhhbXBsZVNlbGVjdG9yQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gc3ViamVjdCBzdWJqZWN0XG4gKiBAcmV0dXJuIE1hcFxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNy4wXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKiBAc2VlIHtAbGluayBNb25zdGVyLkRhdGEuYnVpbGRNYXB9XG4gKi9cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSBzdWJqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IGRlZmluaXRpb25cbiAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICovXG5mdW5jdGlvbiBidWlsZChzdWJqZWN0LCBkZWZpbml0aW9uLCBkZWZhdWx0VmFsdWUpIHtcblx0aWYgKGRlZmluaXRpb24gPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRWYWx1ZSA/IGRlZmF1bHRWYWx1ZSA6IHN1YmplY3Q7XG5cdHZhbGlkYXRlU3RyaW5nKGRlZmluaXRpb24pO1xuXG5cdGNvbnN0IHJlZ2V4cCA9IC8oPzxwbGFjZWhvbGRlcj5cXCR7KD88cGF0aD5bYS16XFxeQS1aLlxcLV8wLTldKil9KS9nbTtcblx0Y29uc3QgYXJyYXkgPSBbLi4uZGVmaW5pdGlvbi5tYXRjaEFsbChyZWdleHApXTtcblxuXHRjb25zdCBmaW5kZXIgPSBuZXcgUGF0aGZpbmRlcihzdWJqZWN0KTtcblxuXHRpZiAoYXJyYXkubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIGZpbmRlci5nZXRWaWEoZGVmaW5pdGlvbik7XG5cdH1cblxuXHRhcnJheS5mb3JFYWNoKChhKSA9PiB7XG5cdFx0Y29uc3QgZ3JvdXBzID0gYT8uW1wiZ3JvdXBzXCJdO1xuXHRcdGNvbnN0IHBsYWNlaG9sZGVyID0gZ3JvdXBzPy5bXCJwbGFjZWhvbGRlclwiXTtcblx0XHRpZiAocGxhY2Vob2xkZXIgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgcGF0aCA9IGdyb3Vwcz8uW1wicGF0aFwiXTtcblxuXHRcdGxldCB2ID0gZmluZGVyLmdldFZpYShwYXRoKTtcblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSB2ID0gZGVmYXVsdFZhbHVlO1xuXG5cdFx0ZGVmaW5pdGlvbiA9IGRlZmluaXRpb24ucmVwbGFjZUFsbChwbGFjZWhvbGRlciwgdik7XG5cdH0pO1xuXG5cdHJldHVybiBkZWZpbml0aW9uO1xufVxuIiwgImNvbnN0IHNpZGVzID0gWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXTtcbmNvbnN0IGFsaWdubWVudHMgPSBbJ3N0YXJ0JywgJ2VuZCddO1xuY29uc3QgcGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9zaWRlcy5yZWR1Y2UoKGFjYywgc2lkZSkgPT4gYWNjLmNvbmNhdChzaWRlLCBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnRzWzBdLCBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnRzWzFdKSwgW10pO1xuY29uc3QgbWluID0gTWF0aC5taW47XG5jb25zdCBtYXggPSBNYXRoLm1heDtcbmNvbnN0IHJvdW5kID0gTWF0aC5yb3VuZDtcbmNvbnN0IGZsb29yID0gTWF0aC5mbG9vcjtcbmNvbnN0IGNyZWF0ZUNvb3JkcyA9IHYgPT4gKHtcbiAgeDogdixcbiAgeTogdlxufSk7XG5jb25zdCBvcHBvc2l0ZVNpZGVNYXAgPSB7XG4gIGxlZnQ6ICdyaWdodCcsXG4gIHJpZ2h0OiAnbGVmdCcsXG4gIGJvdHRvbTogJ3RvcCcsXG4gIHRvcDogJ2JvdHRvbSdcbn07XG5jb25zdCBvcHBvc2l0ZUFsaWdubWVudE1hcCA9IHtcbiAgc3RhcnQ6ICdlbmQnLFxuICBlbmQ6ICdzdGFydCdcbn07XG5mdW5jdGlvbiBjbGFtcChzdGFydCwgdmFsdWUsIGVuZCkge1xuICByZXR1cm4gbWF4KHN0YXJ0LCBtaW4odmFsdWUsIGVuZCkpO1xufVxuZnVuY3Rpb24gZXZhbHVhdGUodmFsdWUsIHBhcmFtKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgPyB2YWx1ZShwYXJhbSkgOiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGdldFNpZGUocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzFdO1xufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVBeGlzKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd4JyA/ICd5JyA6ICd4Jztcbn1cbmZ1bmN0aW9uIGdldEF4aXNMZW5ndGgoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xufVxuZnVuY3Rpb24gZ2V0U2lkZUF4aXMocGxhY2VtZW50KSB7XG4gIHJldHVybiBbJ3RvcCcsICdib3R0b20nXS5pbmNsdWRlcyhnZXRTaWRlKHBsYWNlbWVudCkpID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGdldE9wcG9zaXRlQXhpcyhnZXRTaWRlQXhpcyhwbGFjZW1lbnQpKTtcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudFNpZGVzKHBsYWNlbWVudCwgcmVjdHMsIHJ0bCkge1xuICBpZiAocnRsID09PSB2b2lkIDApIHtcbiAgICBydGwgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50QXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChhbGlnbm1lbnRBeGlzKTtcbiAgbGV0IG1haW5BbGlnbm1lbnRTaWRlID0gYWxpZ25tZW50QXhpcyA9PT0gJ3gnID8gYWxpZ25tZW50ID09PSAocnRsID8gJ2VuZCcgOiAnc3RhcnQnKSA/ICdyaWdodCcgOiAnbGVmdCcgOiBhbGlnbm1lbnQgPT09ICdzdGFydCcgPyAnYm90dG9tJyA6ICd0b3AnO1xuICBpZiAocmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gPiByZWN0cy5mbG9hdGluZ1tsZW5ndGhdKSB7XG4gICAgbWFpbkFsaWdubWVudFNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluQWxpZ25tZW50U2lkZSk7XG4gIH1cbiAgcmV0dXJuIFttYWluQWxpZ25tZW50U2lkZSwgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpbkFsaWdubWVudFNpZGUpXTtcbn1cbmZ1bmN0aW9uIGdldEV4cGFuZGVkUGxhY2VtZW50cyhwbGFjZW1lbnQpIHtcbiAgY29uc3Qgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGFsaWdubWVudCA9PiBvcHBvc2l0ZUFsaWdubWVudE1hcFthbGlnbm1lbnRdKTtcbn1cbmZ1bmN0aW9uIGdldFNpZGVMaXN0KHNpZGUsIGlzU3RhcnQsIHJ0bCkge1xuICBjb25zdCBsciA9IFsnbGVmdCcsICdyaWdodCddO1xuICBjb25zdCBybCA9IFsncmlnaHQnLCAnbGVmdCddO1xuICBjb25zdCB0YiA9IFsndG9wJywgJ2JvdHRvbSddO1xuICBjb25zdCBidCA9IFsnYm90dG9tJywgJ3RvcCddO1xuICBzd2l0Y2ggKHNpZGUpIHtcbiAgICBjYXNlICd0b3AnOlxuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICBpZiAocnRsKSByZXR1cm4gaXNTdGFydCA/IHJsIDogbHI7XG4gICAgICByZXR1cm4gaXNTdGFydCA/IGxyIDogcmw7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuIGlzU3RhcnQgPyB0YiA6IGJ0O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gW107XG4gIH1cbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMocGxhY2VtZW50LCBmbGlwQWxpZ25tZW50LCBkaXJlY3Rpb24sIHJ0bCkge1xuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgbGV0IGxpc3QgPSBnZXRTaWRlTGlzdChnZXRTaWRlKHBsYWNlbWVudCksIGRpcmVjdGlvbiA9PT0gJ3N0YXJ0JywgcnRsKTtcbiAgaWYgKGFsaWdubWVudCkge1xuICAgIGxpc3QgPSBsaXN0Lm1hcChzaWRlID0+IHNpZGUgKyBcIi1cIiArIGFsaWdubWVudCk7XG4gICAgaWYgKGZsaXBBbGlnbm1lbnQpIHtcbiAgICAgIGxpc3QgPSBsaXN0LmNvbmNhdChsaXN0Lm1hcChnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGlzdDtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLCBzaWRlID0+IG9wcG9zaXRlU2lkZU1hcFtzaWRlXSk7XG59XG5mdW5jdGlvbiBleHBhbmRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgLi4ucGFkZGluZ1xuICB9O1xufVxuZnVuY3Rpb24gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKSB7XG4gIHJldHVybiB0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBleHBhbmRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpIDoge1xuICAgIHRvcDogcGFkZGluZyxcbiAgICByaWdodDogcGFkZGluZyxcbiAgICBib3R0b206IHBhZGRpbmcsXG4gICAgbGVmdDogcGFkZGluZ1xuICB9O1xufVxuZnVuY3Rpb24gcmVjdFRvQ2xpZW50UmVjdChyZWN0KSB7XG4gIHJldHVybiB7XG4gICAgLi4ucmVjdCxcbiAgICB0b3A6IHJlY3QueSxcbiAgICBsZWZ0OiByZWN0LngsXG4gICAgcmlnaHQ6IHJlY3QueCArIHJlY3Qud2lkdGgsXG4gICAgYm90dG9tOiByZWN0LnkgKyByZWN0LmhlaWdodFxuICB9O1xufVxuXG5leHBvcnQgeyBhbGlnbm1lbnRzLCBjbGFtcCwgY3JlYXRlQ29vcmRzLCBldmFsdWF0ZSwgZXhwYW5kUGFkZGluZ09iamVjdCwgZmxvb3IsIGdldEFsaWdubWVudCwgZ2V0QWxpZ25tZW50QXhpcywgZ2V0QWxpZ25tZW50U2lkZXMsIGdldEF4aXNMZW5ndGgsIGdldEV4cGFuZGVkUGxhY2VtZW50cywgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQsIGdldE9wcG9zaXRlQXhpcywgZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cywgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQsIGdldFBhZGRpbmdPYmplY3QsIGdldFNpZGUsIGdldFNpZGVBeGlzLCBtYXgsIG1pbiwgcGxhY2VtZW50cywgcmVjdFRvQ2xpZW50UmVjdCwgcm91bmQsIHNpZGVzIH07XG4iLCAiaW1wb3J0IHsgZ2V0U2lkZUF4aXMsIGdldEFsaWdubWVudEF4aXMsIGdldEF4aXNMZW5ndGgsIGdldFNpZGUsIGdldEFsaWdubWVudCwgZXZhbHVhdGUsIGdldFBhZGRpbmdPYmplY3QsIHJlY3RUb0NsaWVudFJlY3QsIG1pbiwgY2xhbXAsIHBsYWNlbWVudHMsIGdldEFsaWdubWVudFNpZGVzLCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQsIGdldEV4cGFuZGVkUGxhY2VtZW50cywgZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cywgc2lkZXMsIG1heCwgZ2V0T3Bwb3NpdGVBeGlzIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcbmV4cG9ydCB7IHJlY3RUb0NsaWVudFJlY3QgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMnO1xuXG5mdW5jdGlvbiBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChfcmVmLCBwbGFjZW1lbnQsIHJ0bCkge1xuICBsZXQge1xuICAgIHJlZmVyZW5jZSxcbiAgICBmbG9hdGluZ1xuICB9ID0gX3JlZjtcbiAgY29uc3Qgc2lkZUF4aXMgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnRBeGlzID0gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbkxlbmd0aCA9IGdldEF4aXNMZW5ndGgoYWxpZ25tZW50QXhpcyk7XG4gIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gIGNvbnN0IGlzVmVydGljYWwgPSBzaWRlQXhpcyA9PT0gJ3knO1xuICBjb25zdCBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZmxvYXRpbmcud2lkdGggLyAyO1xuICBjb25zdCBjb21tb25ZID0gcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0IC8gMiAtIGZsb2F0aW5nLmhlaWdodCAvIDI7XG4gIGNvbnN0IGNvbW1vbkFsaWduID0gcmVmZXJlbmNlW2FsaWduTGVuZ3RoXSAvIDIgLSBmbG9hdGluZ1thbGlnbkxlbmd0aF0gLyAyO1xuICBsZXQgY29vcmRzO1xuICBzd2l0Y2ggKHNpZGUpIHtcbiAgICBjYXNlICd0b3AnOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSAtIGZsb2F0aW5nLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBmbG9hdGluZy53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54LFxuICAgICAgICB5OiByZWZlcmVuY2UueVxuICAgICAgfTtcbiAgfVxuICBzd2l0Y2ggKGdldEFsaWdubWVudChwbGFjZW1lbnQpKSB7XG4gICAgY2FzZSAnc3RhcnQnOlxuICAgICAgY29vcmRzW2FsaWdubWVudEF4aXNdIC09IGNvbW1vbkFsaWduICogKHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2VuZCc6XG4gICAgICBjb29yZHNbYWxpZ25tZW50QXhpc10gKz0gY29tbW9uQWxpZ24gKiAocnRsICYmIGlzVmVydGljYWwgPyAtMSA6IDEpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGNvb3Jkcztcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgYHhgIGFuZCBgeWAgY29vcmRpbmF0ZXMgdGhhdCB3aWxsIHBsYWNlIHRoZSBmbG9hdGluZyBlbGVtZW50XG4gKiBuZXh0IHRvIGEgcmVmZXJlbmNlIGVsZW1lbnQgd2hlbiBpdCBpcyBnaXZlbiBhIGNlcnRhaW4gcG9zaXRpb25pbmcgc3RyYXRlZ3kuXG4gKlxuICogVGhpcyBleHBvcnQgZG9lcyBub3QgaGF2ZSBhbnkgYHBsYXRmb3JtYCBpbnRlcmZhY2UgbG9naWMuIFlvdSB3aWxsIG5lZWQgdG9cbiAqIHdyaXRlIG9uZSBmb3IgdGhlIHBsYXRmb3JtIHlvdSBhcmUgdXNpbmcgRmxvYXRpbmcgVUkgd2l0aC5cbiAqL1xuY29uc3QgY29tcHV0ZVBvc2l0aW9uID0gYXN5bmMgKHJlZmVyZW5jZSwgZmxvYXRpbmcsIGNvbmZpZykgPT4ge1xuICBjb25zdCB7XG4gICAgcGxhY2VtZW50ID0gJ2JvdHRvbScsXG4gICAgc3RyYXRlZ3kgPSAnYWJzb2x1dGUnLFxuICAgIG1pZGRsZXdhcmUgPSBbXSxcbiAgICBwbGF0Zm9ybVxuICB9ID0gY29uZmlnO1xuICBjb25zdCB2YWxpZE1pZGRsZXdhcmUgPSBtaWRkbGV3YXJlLmZpbHRlcihCb29sZWFuKTtcbiAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChmbG9hdGluZykpO1xuICBsZXQgcmVjdHMgPSBhd2FpdCBwbGF0Zm9ybS5nZXRFbGVtZW50UmVjdHMoe1xuICAgIHJlZmVyZW5jZSxcbiAgICBmbG9hdGluZyxcbiAgICBzdHJhdGVneVxuICB9KTtcbiAgbGV0IHtcbiAgICB4LFxuICAgIHlcbiAgfSA9IGNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50KHJlY3RzLCBwbGFjZW1lbnQsIHJ0bCk7XG4gIGxldCBzdGF0ZWZ1bFBsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgbGV0IG1pZGRsZXdhcmVEYXRhID0ge307XG4gIGxldCByZXNldENvdW50ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWxpZE1pZGRsZXdhcmUubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB7XG4gICAgICBuYW1lLFxuICAgICAgZm5cbiAgICB9ID0gdmFsaWRNaWRkbGV3YXJlW2ldO1xuICAgIGNvbnN0IHtcbiAgICAgIHg6IG5leHRYLFxuICAgICAgeTogbmV4dFksXG4gICAgICBkYXRhLFxuICAgICAgcmVzZXRcbiAgICB9ID0gYXdhaXQgZm4oe1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBpbml0aWFsUGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQ6IHN0YXRlZnVsUGxhY2VtZW50LFxuICAgICAgc3RyYXRlZ3ksXG4gICAgICBtaWRkbGV3YXJlRGF0YSxcbiAgICAgIHJlY3RzLFxuICAgICAgcGxhdGZvcm0sXG4gICAgICBlbGVtZW50czoge1xuICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgIGZsb2F0aW5nXG4gICAgICB9XG4gICAgfSk7XG4gICAgeCA9IG5leHRYICE9IG51bGwgPyBuZXh0WCA6IHg7XG4gICAgeSA9IG5leHRZICE9IG51bGwgPyBuZXh0WSA6IHk7XG4gICAgbWlkZGxld2FyZURhdGEgPSB7XG4gICAgICAuLi5taWRkbGV3YXJlRGF0YSxcbiAgICAgIFtuYW1lXToge1xuICAgICAgICAuLi5taWRkbGV3YXJlRGF0YVtuYW1lXSxcbiAgICAgICAgLi4uZGF0YVxuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHJlc2V0ICYmIHJlc2V0Q291bnQgPD0gNTApIHtcbiAgICAgIHJlc2V0Q291bnQrKztcbiAgICAgIGlmICh0eXBlb2YgcmVzZXQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChyZXNldC5wbGFjZW1lbnQpIHtcbiAgICAgICAgICBzdGF0ZWZ1bFBsYWNlbWVudCA9IHJlc2V0LnBsYWNlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzZXQucmVjdHMpIHtcbiAgICAgICAgICByZWN0cyA9IHJlc2V0LnJlY3RzID09PSB0cnVlID8gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICAgICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgICAgIGZsb2F0aW5nLFxuICAgICAgICAgICAgc3RyYXRlZ3lcbiAgICAgICAgICB9KSA6IHJlc2V0LnJlY3RzO1xuICAgICAgICB9XG4gICAgICAgICh7XG4gICAgICAgICAgeCxcbiAgICAgICAgICB5XG4gICAgICAgIH0gPSBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChyZWN0cywgc3RhdGVmdWxQbGFjZW1lbnQsIHJ0bCkpO1xuICAgICAgfVxuICAgICAgaSA9IC0xO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5LFxuICAgIHBsYWNlbWVudDogc3RhdGVmdWxQbGFjZW1lbnQsXG4gICAgc3RyYXRlZ3ksXG4gICAgbWlkZGxld2FyZURhdGFcbiAgfTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgb2Ygb3ZlcmZsb3cgc2lkZSBvZmZzZXRzIHRoYXQgZGV0ZXJtaW5lIGhvdyBtdWNoIHRoZVxuICogZWxlbWVudCBpcyBvdmVyZmxvd2luZyBhIGdpdmVuIGNsaXBwaW5nIGJvdW5kYXJ5IG9uIGVhY2ggc2lkZS5cbiAqIC0gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgYm91bmRhcnkgYnkgdGhhdCBudW1iZXIgb2YgcGl4ZWxzXG4gKiAtIG5lZ2F0aXZlID0gaG93IG1hbnkgcGl4ZWxzIGxlZnQgYmVmb3JlIGl0IHdpbGwgb3ZlcmZsb3dcbiAqIC0gMCA9IGxpZXMgZmx1c2ggd2l0aCB0aGUgYm91bmRhcnlcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9kZXRlY3RPdmVyZmxvd1xuICovXG5hc3luYyBmdW5jdGlvbiBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX2F3YWl0JHBsYXRmb3JtJGlzRWxlO1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGNvbnN0IHtcbiAgICB4LFxuICAgIHksXG4gICAgcGxhdGZvcm0sXG4gICAgcmVjdHMsXG4gICAgZWxlbWVudHMsXG4gICAgc3RyYXRlZ3lcbiAgfSA9IHN0YXRlO1xuICBjb25zdCB7XG4gICAgYm91bmRhcnkgPSAnY2xpcHBpbmdBbmNlc3RvcnMnLFxuICAgIHJvb3RCb3VuZGFyeSA9ICd2aWV3cG9ydCcsXG4gICAgZWxlbWVudENvbnRleHQgPSAnZmxvYXRpbmcnLFxuICAgIGFsdEJvdW5kYXJ5ID0gZmFsc2UsXG4gICAgcGFkZGluZyA9IDBcbiAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gIGNvbnN0IGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gJ2Zsb2F0aW5nJyA/ICdyZWZlcmVuY2UnIDogJ2Zsb2F0aW5nJztcbiAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW2FsdEJvdW5kYXJ5ID8gYWx0Q29udGV4dCA6IGVsZW1lbnRDb250ZXh0XTtcbiAgY29uc3QgY2xpcHBpbmdDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChhd2FpdCBwbGF0Zm9ybS5nZXRDbGlwcGluZ1JlY3Qoe1xuICAgIGVsZW1lbnQ6ICgoX2F3YWl0JHBsYXRmb3JtJGlzRWxlID0gYXdhaXQgKHBsYXRmb3JtLmlzRWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNFbGVtZW50KGVsZW1lbnQpKSkgIT0gbnVsbCA/IF9hd2FpdCRwbGF0Zm9ybSRpc0VsZSA6IHRydWUpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgKGF3YWl0IChwbGF0Zm9ybS5nZXREb2N1bWVudEVsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldERvY3VtZW50RWxlbWVudChlbGVtZW50cy5mbG9hdGluZykpKSxcbiAgICBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnksXG4gICAgc3RyYXRlZ3lcbiAgfSkpO1xuICBjb25zdCByZWN0ID0gZWxlbWVudENvbnRleHQgPT09ICdmbG9hdGluZycgPyB7XG4gICAgLi4ucmVjdHMuZmxvYXRpbmcsXG4gICAgeCxcbiAgICB5XG4gIH0gOiByZWN0cy5yZWZlcmVuY2U7XG4gIGNvbnN0IG9mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBvZmZzZXRTY2FsZSA9IChhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQob2Zmc2V0UGFyZW50KSkpID8gKGF3YWl0IChwbGF0Zm9ybS5nZXRTY2FsZSA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0U2NhbGUob2Zmc2V0UGFyZW50KSkpIHx8IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfSA6IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfTtcbiAgY29uc3QgZWxlbWVudENsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KHBsYXRmb3JtLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0ID8gYXdhaXQgcGxhdGZvcm0uY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Qoe1xuICAgIHJlY3QsXG4gICAgb2Zmc2V0UGFyZW50LFxuICAgIHN0cmF0ZWd5XG4gIH0pIDogcmVjdCk7XG4gIHJldHVybiB7XG4gICAgdG9wOiAoY2xpcHBpbmdDbGllbnRSZWN0LnRvcCAtIGVsZW1lbnRDbGllbnRSZWN0LnRvcCArIHBhZGRpbmdPYmplY3QudG9wKSAvIG9mZnNldFNjYWxlLnksXG4gICAgYm90dG9tOiAoZWxlbWVudENsaWVudFJlY3QuYm90dG9tIC0gY2xpcHBpbmdDbGllbnRSZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSAvIG9mZnNldFNjYWxlLnksXG4gICAgbGVmdDogKGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCkgLyBvZmZzZXRTY2FsZS54LFxuICAgIHJpZ2h0OiAoZWxlbWVudENsaWVudFJlY3QucmlnaHQgLSBjbGlwcGluZ0NsaWVudFJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0KSAvIG9mZnNldFNjYWxlLnhcbiAgfTtcbn1cblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIHBvc2l0aW9uIGFuIGlubmVyIGVsZW1lbnQgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgc28gdGhhdCBpdFxuICogYXBwZWFycyBjZW50ZXJlZCB0byB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXJyb3dcbiAqL1xuY29uc3QgYXJyb3cgPSBvcHRpb25zID0+ICh7XG4gIG5hbWU6ICdhcnJvdycsXG4gIG9wdGlvbnMsXG4gIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgY29uc3Qge1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBwbGFjZW1lbnQsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHMsXG4gICAgICBtaWRkbGV3YXJlRGF0YVxuICAgIH0gPSBzdGF0ZTtcbiAgICAvLyBTaW5jZSBgZWxlbWVudGAgaXMgcmVxdWlyZWQsIHdlIGRvbid0IFBhcnRpYWw8PiB0aGUgdHlwZS5cbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcGFkZGluZyA9IDBcbiAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpIHx8IHt9O1xuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgeCxcbiAgICAgIHlcbiAgICB9O1xuICAgIGNvbnN0IGF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gICAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChheGlzKTtcbiAgICBjb25zdCBhcnJvd0RpbWVuc2lvbnMgPSBhd2FpdCBwbGF0Zm9ybS5nZXREaW1lbnNpb25zKGVsZW1lbnQpO1xuICAgIGNvbnN0IGlzWUF4aXMgPSBheGlzID09PSAneSc7XG4gICAgY29uc3QgbWluUHJvcCA9IGlzWUF4aXMgPyAndG9wJyA6ICdsZWZ0JztcbiAgICBjb25zdCBtYXhQcm9wID0gaXNZQXhpcyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICBjb25zdCBjbGllbnRQcm9wID0gaXNZQXhpcyA/ICdjbGllbnRIZWlnaHQnIDogJ2NsaWVudFdpZHRoJztcbiAgICBjb25zdCBlbmREaWZmID0gcmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gKyByZWN0cy5yZWZlcmVuY2VbYXhpc10gLSBjb29yZHNbYXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIGNvbnN0IHN0YXJ0RGlmZiA9IGNvb3Jkc1theGlzXSAtIHJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgICBjb25zdCBhcnJvd09mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50KSk7XG4gICAgbGV0IGNsaWVudFNpemUgPSBhcnJvd09mZnNldFBhcmVudCA/IGFycm93T2Zmc2V0UGFyZW50W2NsaWVudFByb3BdIDogMDtcblxuICAgIC8vIERPTSBwbGF0Zm9ybSBjYW4gcmV0dXJuIGB3aW5kb3dgIGFzIHRoZSBgb2Zmc2V0UGFyZW50YC5cbiAgICBpZiAoIWNsaWVudFNpemUgfHwgIShhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoYXJyb3dPZmZzZXRQYXJlbnQpKSkpIHtcbiAgICAgIGNsaWVudFNpemUgPSBlbGVtZW50cy5mbG9hdGluZ1tjbGllbnRQcm9wXSB8fCByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIH1cbiAgICBjb25zdCBjZW50ZXJUb1JlZmVyZW5jZSA9IGVuZERpZmYgLyAyIC0gc3RhcnREaWZmIC8gMjtcblxuICAgIC8vIElmIHRoZSBwYWRkaW5nIGlzIGxhcmdlIGVub3VnaCB0aGF0IGl0IGNhdXNlcyB0aGUgYXJyb3cgdG8gbm8gbG9uZ2VyIGJlXG4gICAgLy8gY2VudGVyZWQsIG1vZGlmeSB0aGUgcGFkZGluZyBzbyB0aGF0IGl0IGlzIGNlbnRlcmVkLlxuICAgIGNvbnN0IGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcgPSBjbGllbnRTaXplIC8gMiAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiAtIDE7XG4gICAgY29uc3QgbWluUGFkZGluZyA9IG1pbihwYWRkaW5nT2JqZWN0W21pblByb3BdLCBsYXJnZXN0UG9zc2libGVQYWRkaW5nKTtcbiAgICBjb25zdCBtYXhQYWRkaW5nID0gbWluKHBhZGRpbmdPYmplY3RbbWF4UHJvcF0sIGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcpO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBmbG9hdGluZyBlbGVtZW50IGlmIHRoZSBjZW50ZXJcbiAgICAvLyBwb2ludCBpcyBvdXRzaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50J3MgYm91bmRzLlxuICAgIGNvbnN0IG1pbiQxID0gbWluUGFkZGluZztcbiAgICBjb25zdCBtYXggPSBjbGllbnRTaXplIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLSBtYXhQYWRkaW5nO1xuICAgIGNvbnN0IGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gICAgY29uc3Qgb2Zmc2V0ID0gY2xhbXAobWluJDEsIGNlbnRlciwgbWF4KTtcblxuICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGwgZW5vdWdoIHRoYXQgdGhlIGFycm93J3MgcGFkZGluZyBjYXVzZXMgaXQgdG9cbiAgICAvLyB0byBwb2ludCB0byBub3RoaW5nIGZvciBhbiBhbGlnbmVkIHBsYWNlbWVudCwgYWRqdXN0IHRoZSBvZmZzZXQgb2YgdGhlXG4gICAgLy8gZmxvYXRpbmcgZWxlbWVudCBpdHNlbGYuIFRvIGVuc3VyZSBgc2hpZnQoKWAgY29udGludWVzIHRvIHRha2UgYWN0aW9uLFxuICAgIC8vIGEgc2luZ2xlIHJlc2V0IGlzIHBlcmZvcm1lZCB3aGVuIHRoaXMgaXMgdHJ1ZS5cbiAgICBjb25zdCBzaG91bGRBZGRPZmZzZXQgPSAhbWlkZGxld2FyZURhdGEuYXJyb3cgJiYgZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT0gbnVsbCAmJiBjZW50ZXIgIT0gb2Zmc2V0ICYmIHJlY3RzLnJlZmVyZW5jZVtsZW5ndGhdIC8gMiAtIChjZW50ZXIgPCBtaW4kMSA/IG1pblBhZGRpbmcgOiBtYXhQYWRkaW5nKSAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiA8IDA7XG4gICAgY29uc3QgYWxpZ25tZW50T2Zmc2V0ID0gc2hvdWxkQWRkT2Zmc2V0ID8gY2VudGVyIDwgbWluJDEgPyBjZW50ZXIgLSBtaW4kMSA6IGNlbnRlciAtIG1heCA6IDA7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtheGlzXTogY29vcmRzW2F4aXNdICsgYWxpZ25tZW50T2Zmc2V0LFxuICAgICAgZGF0YToge1xuICAgICAgICBbYXhpc106IG9mZnNldCxcbiAgICAgICAgY2VudGVyT2Zmc2V0OiBjZW50ZXIgLSBvZmZzZXQgLSBhbGlnbm1lbnRPZmZzZXQsXG4gICAgICAgIC4uLihzaG91bGRBZGRPZmZzZXQgJiYge1xuICAgICAgICAgIGFsaWdubWVudE9mZnNldFxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIHJlc2V0OiBzaG91bGRBZGRPZmZzZXRcbiAgICB9O1xuICB9XG59KTtcblxuZnVuY3Rpb24gZ2V0UGxhY2VtZW50TGlzdChhbGlnbm1lbnQsIGF1dG9BbGlnbm1lbnQsIGFsbG93ZWRQbGFjZW1lbnRzKSB7XG4gIGNvbnN0IGFsbG93ZWRQbGFjZW1lbnRzU29ydGVkQnlBbGlnbm1lbnQgPSBhbGlnbm1lbnQgPyBbLi4uYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSA9PT0gYWxpZ25tZW50KSwgLi4uYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSAhPT0gYWxpZ25tZW50KV0gOiBhbGxvd2VkUGxhY2VtZW50cy5maWx0ZXIocGxhY2VtZW50ID0+IGdldFNpZGUocGxhY2VtZW50KSA9PT0gcGxhY2VtZW50KTtcbiAgcmV0dXJuIGFsbG93ZWRQbGFjZW1lbnRzU29ydGVkQnlBbGlnbm1lbnQuZmlsdGVyKHBsYWNlbWVudCA9PiB7XG4gICAgaWYgKGFsaWdubWVudCkge1xuICAgICAgcmV0dXJuIGdldEFsaWdubWVudChwbGFjZW1lbnQpID09PSBhbGlnbm1lbnQgfHwgKGF1dG9BbGlnbm1lbnQgPyBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpICE9PSBwbGFjZW1lbnQgOiBmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcbn1cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IGNob29zaW5nIHRoZSBwbGFjZW1lbnRcbiAqIHRoYXQgaGFzIHRoZSBtb3N0IHNwYWNlIGF2YWlsYWJsZSBhdXRvbWF0aWNhbGx5LCB3aXRob3V0IG5lZWRpbmcgdG8gc3BlY2lmeSBhXG4gKiBwcmVmZXJyZWQgcGxhY2VtZW50LiBBbHRlcm5hdGl2ZSB0byBgZmxpcGAuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXV0b1BsYWNlbWVudFxuICovXG5jb25zdCBhdXRvUGxhY2VtZW50ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdhdXRvUGxhY2VtZW50JyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJGF1dG9QLCBfbWlkZGxld2FyZURhdGEkYXV0b1AyLCBfcGxhY2VtZW50c1RoYXRGaXRPbkU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJlY3RzLFxuICAgICAgICBtaWRkbGV3YXJlRGF0YSxcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgZWxlbWVudHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY3Jvc3NBeGlzID0gZmFsc2UsXG4gICAgICAgIGFsaWdubWVudCxcbiAgICAgICAgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLFxuICAgICAgICBhdXRvQWxpZ25tZW50ID0gdHJ1ZSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgcGxhY2VtZW50cyQxID0gYWxpZ25tZW50ICE9PSB1bmRlZmluZWQgfHwgYWxsb3dlZFBsYWNlbWVudHMgPT09IHBsYWNlbWVudHMgPyBnZXRQbGFjZW1lbnRMaXN0KGFsaWdubWVudCB8fCBudWxsLCBhdXRvQWxpZ25tZW50LCBhbGxvd2VkUGxhY2VtZW50cykgOiBhbGxvd2VkUGxhY2VtZW50cztcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZXggPSAoKF9taWRkbGV3YXJlRGF0YSRhdXRvUCA9IG1pZGRsZXdhcmVEYXRhLmF1dG9QbGFjZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkYXV0b1AuaW5kZXgpIHx8IDA7XG4gICAgICBjb25zdCBjdXJyZW50UGxhY2VtZW50ID0gcGxhY2VtZW50cyQxW2N1cnJlbnRJbmRleF07XG4gICAgICBpZiAoY3VycmVudFBsYWNlbWVudCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFsaWdubWVudFNpZGVzID0gZ2V0QWxpZ25tZW50U2lkZXMoY3VycmVudFBsYWNlbWVudCwgcmVjdHMsIGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZWxlbWVudHMuZmxvYXRpbmcpKSk7XG5cbiAgICAgIC8vIE1ha2UgYGNvbXB1dGVDb29yZHNgIHN0YXJ0IGZyb20gdGhlIHJpZ2h0IHBsYWNlLlxuICAgICAgaWYgKHBsYWNlbWVudCAhPT0gY3VycmVudFBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudHMkMVswXVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnRPdmVyZmxvd3MgPSBbb3ZlcmZsb3dbZ2V0U2lkZShjdXJyZW50UGxhY2VtZW50KV0sIG92ZXJmbG93W2FsaWdubWVudFNpZGVzWzBdXSwgb3ZlcmZsb3dbYWxpZ25tZW50U2lkZXNbMV1dXTtcbiAgICAgIGNvbnN0IGFsbE92ZXJmbG93cyA9IFsuLi4oKChfbWlkZGxld2FyZURhdGEkYXV0b1AyID0gbWlkZGxld2FyZURhdGEuYXV0b1BsYWNlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRhdXRvUDIub3ZlcmZsb3dzKSB8fCBbXSksIHtcbiAgICAgICAgcGxhY2VtZW50OiBjdXJyZW50UGxhY2VtZW50LFxuICAgICAgICBvdmVyZmxvd3M6IGN1cnJlbnRPdmVyZmxvd3NcbiAgICAgIH1dO1xuICAgICAgY29uc3QgbmV4dFBsYWNlbWVudCA9IHBsYWNlbWVudHMkMVtjdXJyZW50SW5kZXggKyAxXTtcblxuICAgICAgLy8gVGhlcmUgYXJlIG1vcmUgcGxhY2VtZW50cyB0byBjaGVjay5cbiAgICAgIGlmIChuZXh0UGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGN1cnJlbnRJbmRleCArIDEsXG4gICAgICAgICAgICBvdmVyZmxvd3M6IGFsbE92ZXJmbG93c1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogbmV4dFBsYWNlbWVudFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZSA9IGFsbE92ZXJmbG93cy5tYXAoZCA9PiB7XG4gICAgICAgIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChkLnBsYWNlbWVudCk7XG4gICAgICAgIHJldHVybiBbZC5wbGFjZW1lbnQsIGFsaWdubWVudCAmJiBjcm9zc0F4aXMgP1xuICAgICAgICAvLyBDaGVjayBhbG9uZyB0aGUgbWFpbkF4aXMgYW5kIG1haW4gY3Jvc3NBeGlzIHNpZGUuXG4gICAgICAgIGQub3ZlcmZsb3dzLnNsaWNlKDAsIDIpLnJlZHVjZSgoYWNjLCB2KSA9PiBhY2MgKyB2LCAwKSA6XG4gICAgICAgIC8vIENoZWNrIG9ubHkgdGhlIG1haW5BeGlzLlxuICAgICAgICBkLm92ZXJmbG93c1swXSwgZC5vdmVyZmxvd3NdO1xuICAgICAgfSkuc29ydCgoYSwgYikgPT4gYVsxXSAtIGJbMV0pO1xuICAgICAgY29uc3QgcGxhY2VtZW50c1RoYXRGaXRPbkVhY2hTaWRlID0gcGxhY2VtZW50c1NvcnRlZEJ5TW9zdFNwYWNlLmZpbHRlcihkID0+IGRbMl0uc2xpY2UoMCxcbiAgICAgIC8vIEFsaWduZWQgcGxhY2VtZW50cyBzaG91bGQgbm90IGNoZWNrIHRoZWlyIG9wcG9zaXRlIGNyb3NzQXhpc1xuICAgICAgLy8gc2lkZS5cbiAgICAgIGdldEFsaWdubWVudChkWzBdKSA/IDIgOiAzKS5ldmVyeSh2ID0+IHYgPD0gMCkpO1xuICAgICAgY29uc3QgcmVzZXRQbGFjZW1lbnQgPSAoKF9wbGFjZW1lbnRzVGhhdEZpdE9uRSA9IHBsYWNlbWVudHNUaGF0Rml0T25FYWNoU2lkZVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wbGFjZW1lbnRzVGhhdEZpdE9uRVswXSkgfHwgcGxhY2VtZW50c1NvcnRlZEJ5TW9zdFNwYWNlWzBdWzBdO1xuICAgICAgaWYgKHJlc2V0UGxhY2VtZW50ICE9PSBwbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBpbmRleDogY3VycmVudEluZGV4ICsgMSxcbiAgICAgICAgICAgIG92ZXJmbG93czogYWxsT3ZlcmZsb3dzXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiByZXNldFBsYWNlbWVudFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBmbGlwcGluZyB0aGUgYHBsYWNlbWVudGBcbiAqIGluIG9yZGVyIHRvIGtlZXAgaXQgaW4gdmlldyB3aGVuIHRoZSBwcmVmZXJyZWQgcGxhY2VtZW50KHMpIHdpbGwgb3ZlcmZsb3cgdGhlXG4gKiBjbGlwcGluZyBib3VuZGFyeS4gQWx0ZXJuYXRpdmUgdG8gYGF1dG9QbGFjZW1lbnRgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2ZsaXBcbiAqL1xuY29uc3QgZmxpcCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnZmxpcCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRhcnJvdywgX21pZGRsZXdhcmVEYXRhJGZsaXA7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBpbml0aWFsUGxhY2VtZW50LFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgZWxlbWVudHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFpbkF4aXM6IGNoZWNrTWFpbkF4aXMgPSB0cnVlLFxuICAgICAgICBjcm9zc0F4aXM6IGNoZWNrQ3Jvc3NBeGlzID0gdHJ1ZSxcbiAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzOiBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICAgIGZhbGxiYWNrU3RyYXRlZ3kgPSAnYmVzdEZpdCcsXG4gICAgICAgIGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24gPSAnbm9uZScsXG4gICAgICAgIGZsaXBBbGlnbm1lbnQgPSB0cnVlLFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG5cbiAgICAgIC8vIElmIGEgcmVzZXQgYnkgdGhlIGFycm93IHdhcyBjYXVzZWQgZHVlIHRvIGFuIGFsaWdubWVudCBvZmZzZXQgYmVpbmdcbiAgICAgIC8vIGFkZGVkLCB3ZSBzaG91bGQgc2tpcCBhbnkgbG9naWMgbm93IHNpbmNlIGBmbGlwKClgIGhhcyBhbHJlYWR5IGRvbmUgaXRzXG4gICAgICAvLyB3b3JrLlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8yNTQ5I2lzc3VlY29tbWVudC0xNzE5NjAxNjQzXG4gICAgICBpZiAoKF9taWRkbGV3YXJlRGF0YSRhcnJvdyA9IG1pZGRsZXdhcmVEYXRhLmFycm93KSAhPSBudWxsICYmIF9taWRkbGV3YXJlRGF0YSRhcnJvdy5hbGlnbm1lbnRPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGlzQmFzZVBsYWNlbWVudCA9IGdldFNpZGUoaW5pdGlhbFBsYWNlbWVudCkgPT09IGluaXRpYWxQbGFjZW1lbnQ7XG4gICAgICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gICAgICBjb25zdCBmYWxsYmFja1BsYWNlbWVudHMgPSBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgfHwgKGlzQmFzZVBsYWNlbWVudCB8fCAhZmxpcEFsaWdubWVudCA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChpbml0aWFsUGxhY2VtZW50KV0gOiBnZXRFeHBhbmRlZFBsYWNlbWVudHMoaW5pdGlhbFBsYWNlbWVudCkpO1xuICAgICAgaWYgKCFzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgJiYgZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiAhPT0gJ25vbmUnKSB7XG4gICAgICAgIGZhbGxiYWNrUGxhY2VtZW50cy5wdXNoKC4uLmdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMoaW5pdGlhbFBsYWNlbWVudCwgZmxpcEFsaWdubWVudCwgZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiwgcnRsKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBwbGFjZW1lbnRzID0gW2luaXRpYWxQbGFjZW1lbnQsIC4uLmZhbGxiYWNrUGxhY2VtZW50c107XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3dzID0gW107XG4gICAgICBsZXQgb3ZlcmZsb3dzRGF0YSA9ICgoX21pZGRsZXdhcmVEYXRhJGZsaXAgPSBtaWRkbGV3YXJlRGF0YS5mbGlwKSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGZsaXAub3ZlcmZsb3dzKSB8fCBbXTtcbiAgICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICAgIG92ZXJmbG93cy5wdXNoKG92ZXJmbG93W3NpZGVdKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGVja0Nyb3NzQXhpcykge1xuICAgICAgICBjb25zdCBzaWRlcyA9IGdldEFsaWdubWVudFNpZGVzKHBsYWNlbWVudCwgcmVjdHMsIHJ0bCk7XG4gICAgICAgIG92ZXJmbG93cy5wdXNoKG92ZXJmbG93W3NpZGVzWzBdXSwgb3ZlcmZsb3dbc2lkZXNbMV1dKTtcbiAgICAgIH1cbiAgICAgIG92ZXJmbG93c0RhdGEgPSBbLi4ub3ZlcmZsb3dzRGF0YSwge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIG92ZXJmbG93c1xuICAgICAgfV07XG5cbiAgICAgIC8vIE9uZSBvciBtb3JlIHNpZGVzIGlzIG92ZXJmbG93aW5nLlxuICAgICAgaWYgKCFvdmVyZmxvd3MuZXZlcnkoc2lkZSA9PiBzaWRlIDw9IDApKSB7XG4gICAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkZmxpcDIsIF9vdmVyZmxvd3NEYXRhJGZpbHRlcjtcbiAgICAgICAgY29uc3QgbmV4dEluZGV4ID0gKCgoX21pZGRsZXdhcmVEYXRhJGZsaXAyID0gbWlkZGxld2FyZURhdGEuZmxpcCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRmbGlwMi5pbmRleCkgfHwgMCkgKyAxO1xuICAgICAgICBjb25zdCBuZXh0UGxhY2VtZW50ID0gcGxhY2VtZW50c1tuZXh0SW5kZXhdO1xuICAgICAgICBpZiAobmV4dFBsYWNlbWVudCkge1xuICAgICAgICAgIC8vIFRyeSBuZXh0IHBsYWNlbWVudCBhbmQgcmUtcnVuIHRoZSBsaWZlY3ljbGUuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgaW5kZXg6IG5leHRJbmRleCxcbiAgICAgICAgICAgICAgb3ZlcmZsb3dzOiBvdmVyZmxvd3NEYXRhXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgICAgcGxhY2VtZW50OiBuZXh0UGxhY2VtZW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpcnN0LCBmaW5kIHRoZSBjYW5kaWRhdGVzIHRoYXQgZml0IG9uIHRoZSBtYWluQXhpcyBzaWRlIG9mIG92ZXJmbG93LFxuICAgICAgICAvLyB0aGVuIGZpbmQgdGhlIHBsYWNlbWVudCB0aGF0IGZpdHMgdGhlIGJlc3Qgb24gdGhlIG1haW4gY3Jvc3NBeGlzIHNpZGUuXG4gICAgICAgIGxldCByZXNldFBsYWNlbWVudCA9IChfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIgPSBvdmVyZmxvd3NEYXRhLmZpbHRlcihkID0+IGQub3ZlcmZsb3dzWzBdIDw9IDApLnNvcnQoKGEsIGIpID0+IGEub3ZlcmZsb3dzWzFdIC0gYi5vdmVyZmxvd3NbMV0pWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX292ZXJmbG93c0RhdGEkZmlsdGVyLnBsYWNlbWVudDtcblxuICAgICAgICAvLyBPdGhlcndpc2UgZmFsbGJhY2suXG4gICAgICAgIGlmICghcmVzZXRQbGFjZW1lbnQpIHtcbiAgICAgICAgICBzd2l0Y2ggKGZhbGxiYWNrU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Jlc3RGaXQnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIF9vdmVyZmxvd3NEYXRhJG1hcCRzbztcbiAgICAgICAgICAgICAgICBjb25zdCBwbGFjZW1lbnQgPSAoX292ZXJmbG93c0RhdGEkbWFwJHNvID0gb3ZlcmZsb3dzRGF0YS5tYXAoZCA9PiBbZC5wbGFjZW1lbnQsIGQub3ZlcmZsb3dzLmZpbHRlcihvdmVyZmxvdyA9PiBvdmVyZmxvdyA+IDApLnJlZHVjZSgoYWNjLCBvdmVyZmxvdykgPT4gYWNjICsgb3ZlcmZsb3csIDApXSkuc29ydCgoYSwgYikgPT4gYVsxXSAtIGJbMV0pWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX292ZXJmbG93c0RhdGEkbWFwJHNvWzBdO1xuICAgICAgICAgICAgICAgIGlmIChwbGFjZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgIHJlc2V0UGxhY2VtZW50ID0gcGxhY2VtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnaW5pdGlhbFBsYWNlbWVudCc6XG4gICAgICAgICAgICAgIHJlc2V0UGxhY2VtZW50ID0gaW5pdGlhbFBsYWNlbWVudDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwbGFjZW1lbnQgIT09IHJlc2V0UGxhY2VtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICAgIHBsYWNlbWVudDogcmVzZXRQbGFjZW1lbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3QpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IG92ZXJmbG93LnRvcCAtIHJlY3QuaGVpZ2h0LFxuICAgIHJpZ2h0OiBvdmVyZmxvdy5yaWdodCAtIHJlY3Qud2lkdGgsXG4gICAgYm90dG9tOiBvdmVyZmxvdy5ib3R0b20gLSByZWN0LmhlaWdodCxcbiAgICBsZWZ0OiBvdmVyZmxvdy5sZWZ0IC0gcmVjdC53aWR0aFxuICB9O1xufVxuZnVuY3Rpb24gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG92ZXJmbG93KSB7XG4gIHJldHVybiBzaWRlcy5zb21lKHNpZGUgPT4gb3ZlcmZsb3dbc2lkZV0gPj0gMCk7XG59XG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdG8gaGlkZSB0aGUgZmxvYXRpbmcgZWxlbWVudCBpbiBhcHBsaWNhYmxlIHNpdHVhdGlvbnMsIHN1Y2ggYXNcbiAqIHdoZW4gaXQgaXMgbm90IGluIHRoZSBzYW1lIGNsaXBwaW5nIGNvbnRleHQgYXMgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2hpZGVcbiAqL1xuY29uc3QgaGlkZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnaGlkZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICByZWN0c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBzdHJhdGVneSA9ICdyZWZlcmVuY2VIaWRkZW4nLFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBzd2l0Y2ggKHN0cmF0ZWd5KSB7XG4gICAgICAgIGNhc2UgJ3JlZmVyZW5jZUhpZGRlbic6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnMsXG4gICAgICAgICAgICAgIGVsZW1lbnRDb250ZXh0OiAncmVmZXJlbmNlJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3RzLnJlZmVyZW5jZSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlSGlkZGVuT2Zmc2V0czogb2Zmc2V0cyxcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VIaWRkZW46IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvZmZzZXRzKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAnZXNjYXBlZCc6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnMsXG4gICAgICAgICAgICAgIGFsdEJvdW5kYXJ5OiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdHMuZmxvYXRpbmcpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGVzY2FwZWRPZmZzZXRzOiBvZmZzZXRzLFxuICAgICAgICAgICAgICAgIGVzY2FwZWQ6IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvZmZzZXRzKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0cykge1xuICBjb25zdCBtaW5YID0gbWluKC4uLnJlY3RzLm1hcChyZWN0ID0+IHJlY3QubGVmdCkpO1xuICBjb25zdCBtaW5ZID0gbWluKC4uLnJlY3RzLm1hcChyZWN0ID0+IHJlY3QudG9wKSk7XG4gIGNvbnN0IG1heFggPSBtYXgoLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5yaWdodCkpO1xuICBjb25zdCBtYXhZID0gbWF4KC4uLnJlY3RzLm1hcChyZWN0ID0+IHJlY3QuYm90dG9tKSk7XG4gIHJldHVybiB7XG4gICAgeDogbWluWCxcbiAgICB5OiBtaW5ZLFxuICAgIHdpZHRoOiBtYXhYIC0gbWluWCxcbiAgICBoZWlnaHQ6IG1heFkgLSBtaW5ZXG4gIH07XG59XG5mdW5jdGlvbiBnZXRSZWN0c0J5TGluZShyZWN0cykge1xuICBjb25zdCBzb3J0ZWRSZWN0cyA9IHJlY3RzLnNsaWNlKCkuc29ydCgoYSwgYikgPT4gYS55IC0gYi55KTtcbiAgY29uc3QgZ3JvdXBzID0gW107XG4gIGxldCBwcmV2UmVjdCA9IG51bGw7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkUmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCByZWN0ID0gc29ydGVkUmVjdHNbaV07XG4gICAgaWYgKCFwcmV2UmVjdCB8fCByZWN0LnkgLSBwcmV2UmVjdC55ID4gcHJldlJlY3QuaGVpZ2h0IC8gMikge1xuICAgICAgZ3JvdXBzLnB1c2goW3JlY3RdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JvdXBzW2dyb3Vwcy5sZW5ndGggLSAxXS5wdXNoKHJlY3QpO1xuICAgIH1cbiAgICBwcmV2UmVjdCA9IHJlY3Q7XG4gIH1cbiAgcmV0dXJuIGdyb3Vwcy5tYXAocmVjdCA9PiByZWN0VG9DbGllbnRSZWN0KGdldEJvdW5kaW5nUmVjdChyZWN0KSkpO1xufVxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdpbmxpbmUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBzdHJhdGVneVxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgLy8gQSBNb3VzZUV2ZW50J3MgY2xpZW50e1gsWX0gY29vcmRzIGNhbiBiZSB1cCB0byAyIHBpeGVscyBvZmYgYVxuICAgICAgLy8gQ2xpZW50UmVjdCdzIGJvdW5kcywgZGVzcGl0ZSB0aGUgZXZlbnQgbGlzdGVuZXIgYmVpbmcgdHJpZ2dlcmVkLiBBXG4gICAgICAvLyBwYWRkaW5nIG9mIDIgc2VlbXMgdG8gaGFuZGxlIHRoaXMgaXNzdWUuXG4gICAgICBjb25zdCB7XG4gICAgICAgIHBhZGRpbmcgPSAyLFxuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgbmF0aXZlQ2xpZW50UmVjdHMgPSBBcnJheS5mcm9tKChhd2FpdCAocGxhdGZvcm0uZ2V0Q2xpZW50UmVjdHMgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldENsaWVudFJlY3RzKGVsZW1lbnRzLnJlZmVyZW5jZSkpKSB8fCBbXSk7XG4gICAgICBjb25zdCBjbGllbnRSZWN0cyA9IGdldFJlY3RzQnlMaW5lKG5hdGl2ZUNsaWVudFJlY3RzKTtcbiAgICAgIGNvbnN0IGZhbGxiYWNrID0gcmVjdFRvQ2xpZW50UmVjdChnZXRCb3VuZGluZ1JlY3QobmF0aXZlQ2xpZW50UmVjdHMpKTtcbiAgICAgIGNvbnN0IHBhZGRpbmdPYmplY3QgPSBnZXRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpO1xuICAgICAgZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkge1xuICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIHJlY3RzIGFuZCB0aGV5IGFyZSBkaXNqb2luZWQuXG4gICAgICAgIGlmIChjbGllbnRSZWN0cy5sZW5ndGggPT09IDIgJiYgY2xpZW50UmVjdHNbMF0ubGVmdCA+IGNsaWVudFJlY3RzWzFdLnJpZ2h0ICYmIHggIT0gbnVsbCAmJiB5ICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBGaW5kIHRoZSBmaXJzdCByZWN0IGluIHdoaWNoIHRoZSBwb2ludCBpcyBmdWxseSBpbnNpZGUuXG4gICAgICAgICAgcmV0dXJuIGNsaWVudFJlY3RzLmZpbmQocmVjdCA9PiB4ID4gcmVjdC5sZWZ0IC0gcGFkZGluZ09iamVjdC5sZWZ0ICYmIHggPCByZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodCAmJiB5ID4gcmVjdC50b3AgLSBwYWRkaW5nT2JqZWN0LnRvcCAmJiB5IDwgcmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSkgfHwgZmFsbGJhY2s7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGVyZSBhcmUgMiBvciBtb3JlIGNvbm5lY3RlZCByZWN0cy5cbiAgICAgICAgaWYgKGNsaWVudFJlY3RzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgaWYgKGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5Jykge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RSZWN0ID0gY2xpZW50UmVjdHNbMF07XG4gICAgICAgICAgICBjb25zdCBsYXN0UmVjdCA9IGNsaWVudFJlY3RzW2NsaWVudFJlY3RzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgY29uc3QgaXNUb3AgPSBnZXRTaWRlKHBsYWNlbWVudCkgPT09ICd0b3AnO1xuICAgICAgICAgICAgY29uc3QgdG9wID0gZmlyc3RSZWN0LnRvcDtcbiAgICAgICAgICAgIGNvbnN0IGJvdHRvbSA9IGxhc3RSZWN0LmJvdHRvbTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBpc1RvcCA/IGZpcnN0UmVjdC5sZWZ0IDogbGFzdFJlY3QubGVmdDtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gaXNUb3AgPyBmaXJzdFJlY3QucmlnaHQgOiBsYXN0UmVjdC5yaWdodDtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gYm90dG9tIC0gdG9wO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgICBib3R0b20sXG4gICAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICAgIHJpZ2h0LFxuICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICB4OiBsZWZ0LFxuICAgICAgICAgICAgICB5OiB0b3BcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGlzTGVmdFNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCkgPT09ICdsZWZ0JztcbiAgICAgICAgICBjb25zdCBtYXhSaWdodCA9IG1heCguLi5jbGllbnRSZWN0cy5tYXAocmVjdCA9PiByZWN0LnJpZ2h0KSk7XG4gICAgICAgICAgY29uc3QgbWluTGVmdCA9IG1pbiguLi5jbGllbnRSZWN0cy5tYXAocmVjdCA9PiByZWN0LmxlZnQpKTtcbiAgICAgICAgICBjb25zdCBtZWFzdXJlUmVjdHMgPSBjbGllbnRSZWN0cy5maWx0ZXIocmVjdCA9PiBpc0xlZnRTaWRlID8gcmVjdC5sZWZ0ID09PSBtaW5MZWZ0IDogcmVjdC5yaWdodCA9PT0gbWF4UmlnaHQpO1xuICAgICAgICAgIGNvbnN0IHRvcCA9IG1lYXN1cmVSZWN0c1swXS50b3A7XG4gICAgICAgICAgY29uc3QgYm90dG9tID0gbWVhc3VyZVJlY3RzW21lYXN1cmVSZWN0cy5sZW5ndGggLSAxXS5ib3R0b207XG4gICAgICAgICAgY29uc3QgbGVmdCA9IG1pbkxlZnQ7XG4gICAgICAgICAgY29uc3QgcmlnaHQgPSBtYXhSaWdodDtcbiAgICAgICAgICBjb25zdCB3aWR0aCA9IHJpZ2h0IC0gbGVmdDtcbiAgICAgICAgICBjb25zdCBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICByaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgeDogbGVmdCxcbiAgICAgICAgICAgIHk6IHRvcFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbGxiYWNrO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzZXRSZWN0cyA9IGF3YWl0IHBsYXRmb3JtLmdldEVsZW1lbnRSZWN0cyh7XG4gICAgICAgIHJlZmVyZW5jZToge1xuICAgICAgICAgIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuICAgICAgICB9LFxuICAgICAgICBmbG9hdGluZzogZWxlbWVudHMuZmxvYXRpbmcsXG4gICAgICAgIHN0cmF0ZWd5XG4gICAgICB9KTtcbiAgICAgIGlmIChyZWN0cy5yZWZlcmVuY2UueCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2UueCB8fCByZWN0cy5yZWZlcmVuY2UueSAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2UueSB8fCByZWN0cy5yZWZlcmVuY2Uud2lkdGggIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLndpZHRoIHx8IHJlY3RzLnJlZmVyZW5jZS5oZWlnaHQgIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLmhlaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICByZWN0czogcmVzZXRSZWN0c1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG4vLyBGb3IgdHlwZSBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSwgdGhlIGBPZmZzZXRPcHRpb25zYCB0eXBlIHdhcyBhbHNvXG4vLyBEZXJpdmFibGUuXG5hc3luYyBmdW5jdGlvbiBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgcGxhY2VtZW50LFxuICAgIHBsYXRmb3JtLFxuICAgIGVsZW1lbnRzXG4gIH0gPSBzdGF0ZTtcbiAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgaXNWZXJ0aWNhbCA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgY29uc3QgbWFpbkF4aXNNdWx0aSA9IFsnbGVmdCcsICd0b3AnXS5pbmNsdWRlcyhzaWRlKSA/IC0xIDogMTtcbiAgY29uc3QgY3Jvc3NBeGlzTXVsdGkgPSBydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMTtcbiAgY29uc3QgcmF3VmFsdWUgPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICBsZXQge1xuICAgIG1haW5BeGlzLFxuICAgIGNyb3NzQXhpcyxcbiAgICBhbGlnbm1lbnRBeGlzXG4gIH0gPSB0eXBlb2YgcmF3VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiByYXdWYWx1ZSxcbiAgICBjcm9zc0F4aXM6IDAsXG4gICAgYWxpZ25tZW50QXhpczogbnVsbFxuICB9IDoge1xuICAgIG1haW5BeGlzOiAwLFxuICAgIGNyb3NzQXhpczogMCxcbiAgICBhbGlnbm1lbnRBeGlzOiBudWxsLFxuICAgIC4uLnJhd1ZhbHVlXG4gIH07XG4gIGlmIChhbGlnbm1lbnQgJiYgdHlwZW9mIGFsaWdubWVudEF4aXMgPT09ICdudW1iZXInKSB7XG4gICAgY3Jvc3NBeGlzID0gYWxpZ25tZW50ID09PSAnZW5kJyA/IGFsaWdubWVudEF4aXMgKiAtMSA6IGFsaWdubWVudEF4aXM7XG4gIH1cbiAgcmV0dXJuIGlzVmVydGljYWwgPyB7XG4gICAgeDogY3Jvc3NBeGlzICogY3Jvc3NBeGlzTXVsdGksXG4gICAgeTogbWFpbkF4aXMgKiBtYWluQXhpc011bHRpXG4gIH0gOiB7XG4gICAgeDogbWFpbkF4aXMgKiBtYWluQXhpc011bHRpLFxuICAgIHk6IGNyb3NzQXhpcyAqIGNyb3NzQXhpc011bHRpXG4gIH07XG59XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHBsYWNlbWVudCBieSB0cmFuc2xhdGluZyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGVcbiAqIHNwZWNpZmllZCBheGVzLlxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxuICogb2JqZWN0IG1heSBiZSBwYXNzZWQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0XG4gKi9cbmNvbnN0IG9mZnNldCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0gMDtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3QgZGlmZkNvb3JkcyA9IGF3YWl0IGNvbnZlcnRWYWx1ZVRvQ29vcmRzKHN0YXRlLCBvcHRpb25zKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHggKyBkaWZmQ29vcmRzLngsXG4gICAgICAgIHk6IHkgKyBkaWZmQ29vcmRzLnksXG4gICAgICAgIGRhdGE6IGRpZmZDb29yZHNcbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdzaGlmdCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnRcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFpbkF4aXM6IGNoZWNrTWFpbkF4aXMgPSB0cnVlLFxuICAgICAgICBjcm9zc0F4aXM6IGNoZWNrQ3Jvc3NBeGlzID0gZmFsc2UsXG4gICAgICAgIGxpbWl0ZXIgPSB7XG4gICAgICAgICAgZm46IF9yZWYgPT4ge1xuICAgICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgeVxuICAgICAgICAgICAgfSA9IF9yZWY7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICB5XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9O1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IGNyb3NzQXhpcyA9IGdldFNpZGVBeGlzKGdldFNpZGUocGxhY2VtZW50KSk7XG4gICAgICBjb25zdCBtYWluQXhpcyA9IGdldE9wcG9zaXRlQXhpcyhjcm9zc0F4aXMpO1xuICAgICAgbGV0IG1haW5BeGlzQ29vcmQgPSBjb29yZHNbbWFpbkF4aXNdO1xuICAgICAgbGV0IGNyb3NzQXhpc0Nvb3JkID0gY29vcmRzW2Nyb3NzQXhpc107XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBjb25zdCBtaW5TaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgICAgICBjb25zdCBtYXhTaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICAgICAgY29uc3QgbWluID0gbWFpbkF4aXNDb29yZCArIG92ZXJmbG93W21pblNpZGVdO1xuICAgICAgICBjb25zdCBtYXggPSBtYWluQXhpc0Nvb3JkIC0gb3ZlcmZsb3dbbWF4U2lkZV07XG4gICAgICAgIG1haW5BeGlzQ29vcmQgPSBjbGFtcChtaW4sIG1haW5BeGlzQ29vcmQsIG1heCk7XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgY29uc3QgbWluU2lkZSA9IGNyb3NzQXhpcyA9PT0gJ3knID8gJ3RvcCcgOiAnbGVmdCc7XG4gICAgICAgIGNvbnN0IG1heFNpZGUgPSBjcm9zc0F4aXMgPT09ICd5JyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICAgICAgY29uc3QgbWluID0gY3Jvc3NBeGlzQ29vcmQgKyBvdmVyZmxvd1ttaW5TaWRlXTtcbiAgICAgICAgY29uc3QgbWF4ID0gY3Jvc3NBeGlzQ29vcmQgLSBvdmVyZmxvd1ttYXhTaWRlXTtcbiAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBjbGFtcChtaW4sIGNyb3NzQXhpc0Nvb3JkLCBtYXgpO1xuICAgICAgfVxuICAgICAgY29uc3QgbGltaXRlZENvb3JkcyA9IGxpbWl0ZXIuZm4oe1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgW21haW5BeGlzXTogbWFpbkF4aXNDb29yZCxcbiAgICAgICAgW2Nyb3NzQXhpc106IGNyb3NzQXhpc0Nvb3JkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmxpbWl0ZWRDb29yZHMsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB4OiBsaW1pdGVkQ29vcmRzLnggLSB4LFxuICAgICAgICAgIHk6IGxpbWl0ZWRDb29yZHMueSAtIHlcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuLyoqXG4gKiBCdWlsdC1pbiBgbGltaXRlcmAgdGhhdCB3aWxsIHN0b3AgYHNoaWZ0KClgIGF0IGEgY2VydGFpbiBwb2ludC5cbiAqL1xuY29uc3QgbGltaXRTaGlmdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBvcHRpb25zLFxuICAgIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG9mZnNldCA9IDAsXG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IHRydWVcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH07XG4gICAgICBjb25zdCBjcm9zc0F4aXMgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgbWFpbkF4aXMgPSBnZXRPcHBvc2l0ZUF4aXMoY3Jvc3NBeGlzKTtcbiAgICAgIGxldCBtYWluQXhpc0Nvb3JkID0gY29vcmRzW21haW5BeGlzXTtcbiAgICAgIGxldCBjcm9zc0F4aXNDb29yZCA9IGNvb3Jkc1tjcm9zc0F4aXNdO1xuICAgICAgY29uc3QgcmF3T2Zmc2V0ID0gZXZhbHVhdGUob2Zmc2V0LCBzdGF0ZSk7XG4gICAgICBjb25zdCBjb21wdXRlZE9mZnNldCA9IHR5cGVvZiByYXdPZmZzZXQgPT09ICdudW1iZXInID8ge1xuICAgICAgICBtYWluQXhpczogcmF3T2Zmc2V0LFxuICAgICAgICBjcm9zc0F4aXM6IDBcbiAgICAgIH0gOiB7XG4gICAgICAgIG1haW5BeGlzOiAwLFxuICAgICAgICBjcm9zc0F4aXM6IDAsXG4gICAgICAgIC4uLnJhd09mZnNldFxuICAgICAgfTtcbiAgICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICAgIGNvbnN0IGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgICAgIGNvbnN0IGxpbWl0TWluID0gcmVjdHMucmVmZXJlbmNlW21haW5BeGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbl0gKyBjb21wdXRlZE9mZnNldC5tYWluQXhpcztcbiAgICAgICAgY29uc3QgbGltaXRNYXggPSByZWN0cy5yZWZlcmVuY2VbbWFpbkF4aXNdICsgcmVjdHMucmVmZXJlbmNlW2xlbl0gLSBjb21wdXRlZE9mZnNldC5tYWluQXhpcztcbiAgICAgICAgaWYgKG1haW5BeGlzQ29vcmQgPCBsaW1pdE1pbikge1xuICAgICAgICAgIG1haW5BeGlzQ29vcmQgPSBsaW1pdE1pbjtcbiAgICAgICAgfSBlbHNlIGlmIChtYWluQXhpc0Nvb3JkID4gbGltaXRNYXgpIHtcbiAgICAgICAgICBtYWluQXhpc0Nvb3JkID0gbGltaXRNYXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaGVja0Nyb3NzQXhpcykge1xuICAgICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJG9mZnNlLCBfbWlkZGxld2FyZURhdGEkb2Zmc2UyO1xuICAgICAgICBjb25zdCBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgICAgICBjb25zdCBpc09yaWdpblNpZGUgPSBbJ3RvcCcsICdsZWZ0J10uaW5jbHVkZXMoZ2V0U2lkZShwbGFjZW1lbnQpKTtcbiAgICAgICAgY29uc3QgbGltaXRNaW4gPSByZWN0cy5yZWZlcmVuY2VbY3Jvc3NBeGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbl0gKyAoaXNPcmlnaW5TaWRlID8gKChfbWlkZGxld2FyZURhdGEkb2Zmc2UgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2VbY3Jvc3NBeGlzXSkgfHwgMCA6IDApICsgKGlzT3JpZ2luU2lkZSA/IDAgOiBjb21wdXRlZE9mZnNldC5jcm9zc0F4aXMpO1xuICAgICAgICBjb25zdCBsaW1pdE1heCA9IHJlY3RzLnJlZmVyZW5jZVtjcm9zc0F4aXNdICsgcmVjdHMucmVmZXJlbmNlW2xlbl0gKyAoaXNPcmlnaW5TaWRlID8gMCA6ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlMiA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZTJbY3Jvc3NBeGlzXSkgfHwgMCkgLSAoaXNPcmlnaW5TaWRlID8gY29tcHV0ZWRPZmZzZXQuY3Jvc3NBeGlzIDogMCk7XG4gICAgICAgIGlmIChjcm9zc0F4aXNDb29yZCA8IGxpbWl0TWluKSB7XG4gICAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBsaW1pdE1pbjtcbiAgICAgICAgfSBlbHNlIGlmIChjcm9zc0F4aXNDb29yZCA+IGxpbWl0TWF4KSB7XG4gICAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBsaW1pdE1heDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW21haW5BeGlzXTogbWFpbkF4aXNDb29yZCxcbiAgICAgICAgW2Nyb3NzQXhpc106IGNyb3NzQXhpc0Nvb3JkXG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IFx1MjAxNFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnc2l6ZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgZWxlbWVudHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYXBwbHkgPSAoKSA9PiB7fSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGlzWUF4aXMgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpID09PSAneSc7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHRcbiAgICAgIH0gPSByZWN0cy5mbG9hdGluZztcbiAgICAgIGxldCBoZWlnaHRTaWRlO1xuICAgICAgbGV0IHdpZHRoU2lkZTtcbiAgICAgIGlmIChzaWRlID09PSAndG9wJyB8fCBzaWRlID09PSAnYm90dG9tJykge1xuICAgICAgICBoZWlnaHRTaWRlID0gc2lkZTtcbiAgICAgICAgd2lkdGhTaWRlID0gYWxpZ25tZW50ID09PSAoKGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZWxlbWVudHMuZmxvYXRpbmcpKSkgPyAnc3RhcnQnIDogJ2VuZCcpID8gJ2xlZnQnIDogJ3JpZ2h0JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpZHRoU2lkZSA9IHNpZGU7XG4gICAgICAgIGhlaWdodFNpZGUgPSBhbGlnbm1lbnQgPT09ICdlbmQnID8gJ3RvcCcgOiAnYm90dG9tJztcbiAgICAgIH1cbiAgICAgIGNvbnN0IG92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0ID0gaGVpZ2h0IC0gb3ZlcmZsb3dbaGVpZ2h0U2lkZV07XG4gICAgICBjb25zdCBvdmVyZmxvd0F2YWlsYWJsZVdpZHRoID0gd2lkdGggLSBvdmVyZmxvd1t3aWR0aFNpZGVdO1xuICAgICAgY29uc3Qgbm9TaGlmdCA9ICFzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdDtcbiAgICAgIGxldCBhdmFpbGFibGVIZWlnaHQgPSBvdmVyZmxvd0F2YWlsYWJsZUhlaWdodDtcbiAgICAgIGxldCBhdmFpbGFibGVXaWR0aCA9IG92ZXJmbG93QXZhaWxhYmxlV2lkdGg7XG4gICAgICBpZiAoaXNZQXhpcykge1xuICAgICAgICBjb25zdCBtYXhpbXVtQ2xpcHBpbmdXaWR0aCA9IHdpZHRoIC0gb3ZlcmZsb3cubGVmdCAtIG92ZXJmbG93LnJpZ2h0O1xuICAgICAgICBhdmFpbGFibGVXaWR0aCA9IGFsaWdubWVudCB8fCBub1NoaWZ0ID8gbWluKG92ZXJmbG93QXZhaWxhYmxlV2lkdGgsIG1heGltdW1DbGlwcGluZ1dpZHRoKSA6IG1heGltdW1DbGlwcGluZ1dpZHRoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nSGVpZ2h0ID0gaGVpZ2h0IC0gb3ZlcmZsb3cudG9wIC0gb3ZlcmZsb3cuYm90dG9tO1xuICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBhbGlnbm1lbnQgfHwgbm9TaGlmdCA/IG1pbihvdmVyZmxvd0F2YWlsYWJsZUhlaWdodCwgbWF4aW11bUNsaXBwaW5nSGVpZ2h0KSA6IG1heGltdW1DbGlwcGluZ0hlaWdodDtcbiAgICAgIH1cbiAgICAgIGlmIChub1NoaWZ0ICYmICFhbGlnbm1lbnQpIHtcbiAgICAgICAgY29uc3QgeE1pbiA9IG1heChvdmVyZmxvdy5sZWZ0LCAwKTtcbiAgICAgICAgY29uc3QgeE1heCA9IG1heChvdmVyZmxvdy5yaWdodCwgMCk7XG4gICAgICAgIGNvbnN0IHlNaW4gPSBtYXgob3ZlcmZsb3cudG9wLCAwKTtcbiAgICAgICAgY29uc3QgeU1heCA9IG1heChvdmVyZmxvdy5ib3R0b20sIDApO1xuICAgICAgICBpZiAoaXNZQXhpcykge1xuICAgICAgICAgIGF2YWlsYWJsZVdpZHRoID0gd2lkdGggLSAyICogKHhNaW4gIT09IDAgfHwgeE1heCAhPT0gMCA/IHhNaW4gKyB4TWF4IDogbWF4KG92ZXJmbG93LmxlZnQsIG92ZXJmbG93LnJpZ2h0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXZhaWxhYmxlSGVpZ2h0ID0gaGVpZ2h0IC0gMiAqICh5TWluICE9PSAwIHx8IHlNYXggIT09IDAgPyB5TWluICsgeU1heCA6IG1heChvdmVyZmxvdy50b3AsIG92ZXJmbG93LmJvdHRvbSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCBhcHBseSh7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBhdmFpbGFibGVXaWR0aCxcbiAgICAgICAgYXZhaWxhYmxlSGVpZ2h0XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5leHREaW1lbnNpb25zID0gYXdhaXQgcGxhdGZvcm0uZ2V0RGltZW5zaW9ucyhlbGVtZW50cy5mbG9hdGluZyk7XG4gICAgICBpZiAod2lkdGggIT09IG5leHREaW1lbnNpb25zLndpZHRoIHx8IGhlaWdodCAhPT0gbmV4dERpbWVuc2lvbnMuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHJlY3RzOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgc2hpZnQsIHNpemUgfTtcbiIsICJmdW5jdGlvbiBnZXROb2RlTmFtZShub2RlKSB7XG4gIGlmIChpc05vZGUobm9kZSkpIHtcbiAgICByZXR1cm4gKG5vZGUubm9kZU5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgLy8gTW9ja2VkIG5vZGVzIGluIHRlc3RpbmcgZW52aXJvbm1lbnRzIG1heSBub3QgYmUgaW5zdGFuY2VzIG9mIE5vZGUuIEJ5XG4gIC8vIHJldHVybmluZyBgI2RvY3VtZW50YCBhbiBpbmZpbml0ZSBsb29wIHdvbid0IG9jY3VyLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzIzMTdcbiAgcmV0dXJuICcjZG9jdW1lbnQnO1xufVxuZnVuY3Rpb24gZ2V0V2luZG93KG5vZGUpIHtcbiAgdmFyIF9ub2RlJG93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiAobm9kZSA9PSBudWxsID8gdm9pZCAwIDogKF9ub2RlJG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSB8fCB3aW5kb3c7XG59XG5mdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQobm9kZSkge1xuICB2YXIgX3JlZjtcbiAgcmV0dXJuIChfcmVmID0gKGlzTm9kZShub2RlKSA/IG5vZGUub3duZXJEb2N1bWVudCA6IG5vZGUuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9yZWYuZG9jdW1lbnRFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNOb2RlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIE5vZGUgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLk5vZGU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRWxlbWVudCB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkhUTUxFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNTaGFkb3dSb290KHZhbHVlKSB7XG4gIC8vIEJyb3dzZXJzIHdpdGhvdXQgYFNoYWRvd1Jvb3RgIHN1cHBvcnQuXG4gIGlmICh0eXBlb2YgU2hhZG93Um9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgU2hhZG93Um9vdCB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuU2hhZG93Um9vdDtcbn1cbmZ1bmN0aW9uIGlzT3ZlcmZsb3dFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3Qge1xuICAgIG92ZXJmbG93LFxuICAgIG92ZXJmbG93WCxcbiAgICBvdmVyZmxvd1ksXG4gICAgZGlzcGxheVxuICB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgcmV0dXJuIC9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbnxjbGlwLy50ZXN0KG92ZXJmbG93ICsgb3ZlcmZsb3dZICsgb3ZlcmZsb3dYKSAmJiAhWydpbmxpbmUnLCAnY29udGVudHMnXS5pbmNsdWRlcyhkaXNwbGF5KTtcbn1cbmZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIFsndGFibGUnLCAndGQnLCAndGgnXS5pbmNsdWRlcyhnZXROb2RlTmFtZShlbGVtZW50KSk7XG59XG5mdW5jdGlvbiBpc0NvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIGNvbnN0IHdlYmtpdCA9IGlzV2ViS2l0KCk7XG4gIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgcmV0dXJuIGNzcy50cmFuc2Zvcm0gIT09ICdub25lJyB8fCBjc3MucGVyc3BlY3RpdmUgIT09ICdub25lJyB8fCAoY3NzLmNvbnRhaW5lclR5cGUgPyBjc3MuY29udGFpbmVyVHlwZSAhPT0gJ25vcm1hbCcgOiBmYWxzZSkgfHwgIXdlYmtpdCAmJiAoY3NzLmJhY2tkcm9wRmlsdGVyID8gY3NzLmJhY2tkcm9wRmlsdGVyICE9PSAnbm9uZScgOiBmYWxzZSkgfHwgIXdlYmtpdCAmJiAoY3NzLmZpbHRlciA/IGNzcy5maWx0ZXIgIT09ICdub25lJyA6IGZhbHNlKSB8fCBbJ3RyYW5zZm9ybScsICdwZXJzcGVjdGl2ZScsICdmaWx0ZXInXS5zb21lKHZhbHVlID0+IChjc3Mud2lsbENoYW5nZSB8fCAnJykuaW5jbHVkZXModmFsdWUpKSB8fCBbJ3BhaW50JywgJ2xheW91dCcsICdzdHJpY3QnLCAnY29udGVudCddLnNvbWUodmFsdWUgPT4gKGNzcy5jb250YWluIHx8ICcnKS5pbmNsdWRlcyh2YWx1ZSkpO1xufVxuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgbGV0IGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmICFpc0xhc3RUcmF2ZXJzYWJsZU5vZGUoY3VycmVudE5vZGUpKSB7XG4gICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrKGN1cnJlbnROb2RlKSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoY3VycmVudE5vZGUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzV2ViS2l0KCkge1xuICBpZiAodHlwZW9mIENTUyA9PT0gJ3VuZGVmaW5lZCcgfHwgIUNTUy5zdXBwb3J0cykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gQ1NTLnN1cHBvcnRzKCctd2Via2l0LWJhY2tkcm9wLWZpbHRlcicsICdub25lJyk7XG59XG5mdW5jdGlvbiBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUobm9kZSkge1xuICByZXR1cm4gWydodG1sJywgJ2JvZHknLCAnI2RvY3VtZW50J10uaW5jbHVkZXMoZ2V0Tm9kZU5hbWUobm9kZSkpO1xufVxuZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn1cbmZ1bmN0aW9uIGdldE5vZGVTY3JvbGwoZWxlbWVudCkge1xuICBpZiAoaXNFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5wYWdlWE9mZnNldCxcbiAgICBzY3JvbGxUb3A6IGVsZW1lbnQucGFnZVlPZmZzZXRcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhcmVudE5vZGUobm9kZSkge1xuICBpZiAoZ2V0Tm9kZU5hbWUobm9kZSkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBub2RlO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9XG4gIC8vIFN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlLlxuICBub2RlLmFzc2lnbmVkU2xvdCB8fFxuICAvLyBET00gRWxlbWVudCBkZXRlY3RlZC5cbiAgbm9kZS5wYXJlbnROb2RlIHx8XG4gIC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWQuXG4gIGlzU2hhZG93Um9vdChub2RlKSAmJiBub2RlLmhvc3QgfHxcbiAgLy8gRmFsbGJhY2suXG4gIGdldERvY3VtZW50RWxlbWVudChub2RlKTtcbiAgcmV0dXJuIGlzU2hhZG93Um9vdChyZXN1bHQpID8gcmVzdWx0Lmhvc3QgOiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3Rvcihub2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKG5vZGUpO1xuICBpZiAoaXNMYXN0VHJhdmVyc2FibGVOb2RlKHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudCA/IG5vZGUub3duZXJEb2N1bWVudC5ib2R5IDogbm9kZS5ib2R5O1xuICB9XG4gIGlmIChpc0hUTUxFbGVtZW50KHBhcmVudE5vZGUpICYmIGlzT3ZlcmZsb3dFbGVtZW50KHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIHBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKHBhcmVudE5vZGUpO1xufVxuZnVuY3Rpb24gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMobm9kZSwgbGlzdCwgdHJhdmVyc2VJZnJhbWVzKSB7XG4gIHZhciBfbm9kZSRvd25lckRvY3VtZW50MjtcbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuICBpZiAodHJhdmVyc2VJZnJhbWVzID09PSB2b2lkIDApIHtcbiAgICB0cmF2ZXJzZUlmcmFtZXMgPSB0cnVlO1xuICB9XG4gIGNvbnN0IHNjcm9sbGFibGVBbmNlc3RvciA9IGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKG5vZGUpO1xuICBjb25zdCBpc0JvZHkgPSBzY3JvbGxhYmxlQW5jZXN0b3IgPT09ICgoX25vZGUkb3duZXJEb2N1bWVudDIgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50Mi5ib2R5KTtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KHNjcm9sbGFibGVBbmNlc3Rvcik7XG4gIGlmIChpc0JvZHkpIHtcbiAgICByZXR1cm4gbGlzdC5jb25jYXQod2luLCB3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzT3ZlcmZsb3dFbGVtZW50KHNjcm9sbGFibGVBbmNlc3RvcikgPyBzY3JvbGxhYmxlQW5jZXN0b3IgOiBbXSwgd2luLmZyYW1lRWxlbWVudCAmJiB0cmF2ZXJzZUlmcmFtZXMgPyBnZXRPdmVyZmxvd0FuY2VzdG9ycyh3aW4uZnJhbWVFbGVtZW50KSA6IFtdKTtcbiAgfVxuICByZXR1cm4gbGlzdC5jb25jYXQoc2Nyb2xsYWJsZUFuY2VzdG9yLCBnZXRPdmVyZmxvd0FuY2VzdG9ycyhzY3JvbGxhYmxlQW5jZXN0b3IsIFtdLCB0cmF2ZXJzZUlmcmFtZXMpKTtcbn1cblxuZXhwb3J0IHsgZ2V0Q29tcHV0ZWRTdHlsZSwgZ2V0Q29udGFpbmluZ0Jsb2NrLCBnZXREb2N1bWVudEVsZW1lbnQsIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yLCBnZXROb2RlTmFtZSwgZ2V0Tm9kZVNjcm9sbCwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMsIGdldFBhcmVudE5vZGUsIGdldFdpbmRvdywgaXNDb250YWluaW5nQmxvY2ssIGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNMYXN0VHJhdmVyc2FibGVOb2RlLCBpc05vZGUsIGlzT3ZlcmZsb3dFbGVtZW50LCBpc1NoYWRvd1Jvb3QsIGlzVGFibGVFbGVtZW50LCBpc1dlYktpdCB9O1xuIiwgImltcG9ydCB7IHJlY3RUb0NsaWVudFJlY3QsIGNvbXB1dGVQb3NpdGlvbiBhcyBjb21wdXRlUG9zaXRpb24kMSB9IGZyb20gJ0BmbG9hdGluZy11aS9jb3JlJztcbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBkZXRlY3RPdmVyZmxvdywgZmxpcCwgaGlkZSwgaW5saW5lLCBsaW1pdFNoaWZ0LCBvZmZzZXQsIHNoaWZ0LCBzaXplIH0gZnJvbSAnQGZsb2F0aW5nLXVpL2NvcmUnO1xuaW1wb3J0IHsgcm91bmQsIGNyZWF0ZUNvb3JkcywgbWF4LCBtaW4sIGZsb29yIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcbmltcG9ydCB7IGdldENvbXB1dGVkU3R5bGUsIGlzSFRNTEVsZW1lbnQsIGlzRWxlbWVudCwgZ2V0V2luZG93LCBpc1dlYktpdCwgZ2V0RG9jdW1lbnRFbGVtZW50LCBnZXROb2RlTmFtZSwgaXNPdmVyZmxvd0VsZW1lbnQsIGdldE5vZGVTY3JvbGwsIGdldE92ZXJmbG93QW5jZXN0b3JzLCBnZXRQYXJlbnROb2RlLCBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUsIGlzQ29udGFpbmluZ0Jsb2NrLCBpc1RhYmxlRWxlbWVudCwgZ2V0Q29udGFpbmluZ0Jsb2NrIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzL2RvbSc7XG5leHBvcnQgeyBnZXRPdmVyZmxvd0FuY2VzdG9ycyB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuXG5mdW5jdGlvbiBnZXRDc3NEaW1lbnNpb25zKGVsZW1lbnQpIHtcbiAgY29uc3QgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgLy8gSW4gdGVzdGluZyBlbnZpcm9ubWVudHMsIHRoZSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzIGFyZSBlbXB0eVxuICAvLyBzdHJpbmdzIGZvciBTVkcgZWxlbWVudHMsIHJldHVybmluZyBOYU4uIEZhbGxiYWNrIHRvIGAwYCBpbiB0aGlzIGNhc2UuXG4gIGxldCB3aWR0aCA9IHBhcnNlRmxvYXQoY3NzLndpZHRoKSB8fCAwO1xuICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChjc3MuaGVpZ2h0KSB8fCAwO1xuICBjb25zdCBoYXNPZmZzZXQgPSBpc0hUTUxFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBvZmZzZXRXaWR0aCA9IGhhc09mZnNldCA/IGVsZW1lbnQub2Zmc2V0V2lkdGggOiB3aWR0aDtcbiAgY29uc3Qgb2Zmc2V0SGVpZ2h0ID0gaGFzT2Zmc2V0ID8gZWxlbWVudC5vZmZzZXRIZWlnaHQgOiBoZWlnaHQ7XG4gIGNvbnN0IHNob3VsZEZhbGxiYWNrID0gcm91bmQod2lkdGgpICE9PSBvZmZzZXRXaWR0aCB8fCByb3VuZChoZWlnaHQpICE9PSBvZmZzZXRIZWlnaHQ7XG4gIGlmIChzaG91bGRGYWxsYmFjaykge1xuICAgIHdpZHRoID0gb2Zmc2V0V2lkdGg7XG4gICAgaGVpZ2h0ID0gb2Zmc2V0SGVpZ2h0O1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICQ6IHNob3VsZEZhbGxiYWNrXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVud3JhcEVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gIWlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgOiBlbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRTY2FsZShlbGVtZW50KSB7XG4gIGNvbnN0IGRvbUVsZW1lbnQgPSB1bndyYXBFbGVtZW50KGVsZW1lbnQpO1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZG9tRWxlbWVudCkpIHtcbiAgICByZXR1cm4gY3JlYXRlQ29vcmRzKDEpO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBkb21FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZG9tRWxlbWVudCk7XG4gIGxldCB4ID0gKCQgPyByb3VuZChyZWN0LndpZHRoKSA6IHJlY3Qud2lkdGgpIC8gd2lkdGg7XG4gIGxldCB5ID0gKCQgPyByb3VuZChyZWN0LmhlaWdodCkgOiByZWN0LmhlaWdodCkgLyBoZWlnaHQ7XG5cbiAgLy8gMCwgTmFOLCBvciBJbmZpbml0eSBzaG91bGQgYWx3YXlzIGZhbGxiYWNrIHRvIDEuXG5cbiAgaWYgKCF4IHx8ICFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICB4ID0gMTtcbiAgfVxuICBpZiAoIXkgfHwgIU51bWJlci5pc0Zpbml0ZSh5KSkge1xuICAgIHkgPSAxO1xuICB9XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmNvbnN0IG5vT2Zmc2V0cyA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb29yZHMoMCk7XG5mdW5jdGlvbiBnZXRWaXN1YWxPZmZzZXRzKGVsZW1lbnQpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBpZiAoIWlzV2ViS2l0KCkgfHwgIXdpbi52aXN1YWxWaWV3cG9ydCkge1xuICAgIHJldHVybiBub09mZnNldHM7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCxcbiAgICB5OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wXG4gIH07XG59XG5mdW5jdGlvbiBzaG91bGRBZGRWaXN1YWxPZmZzZXRzKGVsZW1lbnQsIGlzRml4ZWQsIGZsb2F0aW5nT2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cbiAgaWYgKCFmbG9hdGluZ09mZnNldFBhcmVudCB8fCBpc0ZpeGVkICYmIGZsb2F0aW5nT2Zmc2V0UGFyZW50ICE9PSBnZXRXaW5kb3coZWxlbWVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzRml4ZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSwgb2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBkb21FbGVtZW50ID0gdW53cmFwRWxlbWVudChlbGVtZW50KTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBpZiAoaW5jbHVkZVNjYWxlKSB7XG4gICAgaWYgKG9mZnNldFBhcmVudCkge1xuICAgICAgaWYgKGlzRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHNjYWxlID0gZ2V0U2NhbGUob2Zmc2V0UGFyZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2NhbGUgPSBnZXRTY2FsZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IHNob3VsZEFkZFZpc3VhbE9mZnNldHMoZG9tRWxlbWVudCwgaXNGaXhlZFN0cmF0ZWd5LCBvZmZzZXRQYXJlbnQpID8gZ2V0VmlzdWFsT2Zmc2V0cyhkb21FbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgbGV0IHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgdmlzdWFsT2Zmc2V0cy54KSAvIHNjYWxlLng7XG4gIGxldCB5ID0gKGNsaWVudFJlY3QudG9wICsgdmlzdWFsT2Zmc2V0cy55KSAvIHNjYWxlLnk7XG4gIGxldCB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZS54O1xuICBsZXQgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZS55O1xuICBpZiAoZG9tRWxlbWVudCkge1xuICAgIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhkb21FbGVtZW50KTtcbiAgICBjb25zdCBvZmZzZXRXaW4gPSBvZmZzZXRQYXJlbnQgJiYgaXNFbGVtZW50KG9mZnNldFBhcmVudCkgPyBnZXRXaW5kb3cob2Zmc2V0UGFyZW50KSA6IG9mZnNldFBhcmVudDtcbiAgICBsZXQgY3VycmVudElGcmFtZSA9IHdpbi5mcmFtZUVsZW1lbnQ7XG4gICAgd2hpbGUgKGN1cnJlbnRJRnJhbWUgJiYgb2Zmc2V0UGFyZW50ICYmIG9mZnNldFdpbiAhPT0gd2luKSB7XG4gICAgICBjb25zdCBpZnJhbWVTY2FsZSA9IGdldFNjYWxlKGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY29uc3QgaWZyYW1lUmVjdCA9IGN1cnJlbnRJRnJhbWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY29uc3QgbGVmdCA9IGlmcmFtZVJlY3QubGVmdCArIChjdXJyZW50SUZyYW1lLmNsaWVudExlZnQgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nTGVmdCkpICogaWZyYW1lU2NhbGUueDtcbiAgICAgIGNvbnN0IHRvcCA9IGlmcmFtZVJlY3QudG9wICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50VG9wICsgcGFyc2VGbG9hdChjc3MucGFkZGluZ1RvcCkpICogaWZyYW1lU2NhbGUueTtcbiAgICAgIHggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIHkgKj0gaWZyYW1lU2NhbGUueTtcbiAgICAgIHdpZHRoICo9IGlmcmFtZVNjYWxlLng7XG4gICAgICBoZWlnaHQgKj0gaWZyYW1lU2NhbGUueTtcbiAgICAgIHggKz0gbGVmdDtcbiAgICAgIHkgKz0gdG9wO1xuICAgICAgY3VycmVudElGcmFtZSA9IGdldFdpbmRvdyhjdXJyZW50SUZyYW1lKS5mcmFtZUVsZW1lbnQ7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0VG9DbGllbnRSZWN0KHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdChfcmVmKSB7XG4gIGxldCB7XG4gICAgcmVjdCxcbiAgICBvZmZzZXRQYXJlbnQsXG4gICAgc3RyYXRlZ3lcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgaWYgKG9mZnNldFBhcmVudCA9PT0gZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIHJlY3Q7XG4gIH1cbiAgbGV0IHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICBsZXQgc2NhbGUgPSBjcmVhdGVDb29yZHMoMSk7XG4gIGNvbnN0IG9mZnNldHMgPSBjcmVhdGVDb29yZHMoMCk7XG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgc3RyYXRlZ3kgIT09ICdmaXhlZCcpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG4gICAgaWYgKGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgY29uc3Qgb2Zmc2V0UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQpO1xuICAgICAgc2NhbGUgPSBnZXRTY2FsZShvZmZzZXRQYXJlbnQpO1xuICAgICAgb2Zmc2V0cy54ID0gb2Zmc2V0UmVjdC54ICsgb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgPSBvZmZzZXRSZWN0LnkgKyBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoOiByZWN0LndpZHRoICogc2NhbGUueCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0ICogc2NhbGUueSxcbiAgICB4OiByZWN0LnggKiBzY2FsZS54IC0gc2Nyb2xsLnNjcm9sbExlZnQgKiBzY2FsZS54ICsgb2Zmc2V0cy54LFxuICAgIHk6IHJlY3QueSAqIHNjYWxlLnkgLSBzY3JvbGwuc2Nyb2xsVG9wICogc2NhbGUueSArIG9mZnNldHMueVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0cyhlbGVtZW50KSB7XG4gIHJldHVybiBBcnJheS5mcm9tKGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKSk7XG59XG5cbmZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCkge1xuICAvLyBJZiA8aHRtbD4gaGFzIGEgQ1NTIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgdmlld3BvcnQsIHRoZW4gdGhpcyB3aWxsIGJlXG4gIC8vIGluY29ycmVjdCBmb3IgUlRMLlxuICByZXR1cm4gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkubGVmdCArIGdldE5vZGVTY3JvbGwoZWxlbWVudCkuc2Nyb2xsTGVmdDtcbn1cblxuLy8gR2V0cyB0aGUgZW50aXJlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgZG9jdW1lbnQgYXJlYSwgZXZlbiBleHRlbmRpbmcgb3V0c2lkZVxuLy8gb2YgdGhlIGA8aHRtbD5gIGFuZCBgPGJvZHk+YCByZWN0IGJvdW5kcyBpZiBob3Jpem9udGFsbHkgc2Nyb2xsYWJsZS5cbmZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIGNvbnN0IGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IHNjcm9sbCA9IGdldE5vZGVTY3JvbGwoZWxlbWVudCk7XG4gIGNvbnN0IGJvZHkgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgY29uc3Qgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keS5zY3JvbGxXaWR0aCwgYm9keS5jbGllbnRXaWR0aCk7XG4gIGNvbnN0IGhlaWdodCA9IG1heChodG1sLnNjcm9sbEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGJvZHkuc2Nyb2xsSGVpZ2h0LCBib2R5LmNsaWVudEhlaWdodCk7XG4gIGxldCB4ID0gLXNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgY29uc3QgeSA9IC1zY3JvbGwuc2Nyb2xsVG9wO1xuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShib2R5KS5kaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgeCArPSBtYXgoaHRtbC5jbGllbnRXaWR0aCwgYm9keS5jbGllbnRXaWR0aCkgLSB3aWR0aDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgY29uc3QgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgY29uc3QgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIGxldCB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIGxldCBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgbGV0IHggPSAwO1xuICBsZXQgeSA9IDA7XG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0O1xuICAgIGNvbnN0IHZpc3VhbFZpZXdwb3J0QmFzZWQgPSBpc1dlYktpdCgpO1xuICAgIGlmICghdmlzdWFsVmlld3BvcnRCYXNlZCB8fCB2aXN1YWxWaWV3cG9ydEJhc2VkICYmIHN0cmF0ZWd5ID09PSAnZml4ZWQnKSB7XG4gICAgICB4ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdDtcbiAgICAgIHkgPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3A7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG4vLyBSZXR1cm5zIHRoZSBpbm5lciBjbGllbnQgcmVjdCwgc3VidHJhY3Rpbmcgc2Nyb2xsYmFycyBpZiBwcmVzZW50LlxuZnVuY3Rpb24gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgY29uc3QgY2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCB0cnVlLCBzdHJhdGVneSA9PT0gJ2ZpeGVkJyk7XG4gIGNvbnN0IHRvcCA9IGNsaWVudFJlY3QudG9wICsgZWxlbWVudC5jbGllbnRUb3A7XG4gIGNvbnN0IGxlZnQgPSBjbGllbnRSZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudExlZnQ7XG4gIGNvbnN0IHNjYWxlID0gaXNIVE1MRWxlbWVudChlbGVtZW50KSA/IGdldFNjYWxlKGVsZW1lbnQpIDogY3JlYXRlQ29vcmRzKDEpO1xuICBjb25zdCB3aWR0aCA9IGVsZW1lbnQuY2xpZW50V2lkdGggKiBzY2FsZS54O1xuICBjb25zdCBoZWlnaHQgPSBlbGVtZW50LmNsaWVudEhlaWdodCAqIHNjYWxlLnk7XG4gIGNvbnN0IHggPSBsZWZ0ICogc2NhbGUueDtcbiAgY29uc3QgeSA9IHRvcCAqIHNjYWxlLnk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGNsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KSB7XG4gIGxldCByZWN0O1xuICBpZiAoY2xpcHBpbmdBbmNlc3RvciA9PT0gJ3ZpZXdwb3J0Jykge1xuICAgIHJlY3QgPSBnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpO1xuICB9IGVsc2UgaWYgKGNsaXBwaW5nQW5jZXN0b3IgPT09ICdkb2N1bWVudCcpIHtcbiAgICByZWN0ID0gZ2V0RG9jdW1lbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSk7XG4gIH0gZWxzZSBpZiAoaXNFbGVtZW50KGNsaXBwaW5nQW5jZXN0b3IpKSB7XG4gICAgcmVjdCA9IGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGNsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB2aXN1YWxPZmZzZXRzID0gZ2V0VmlzdWFsT2Zmc2V0cyhlbGVtZW50KTtcbiAgICByZWN0ID0ge1xuICAgICAgLi4uY2xpcHBpbmdBbmNlc3RvcixcbiAgICAgIHg6IGNsaXBwaW5nQW5jZXN0b3IueCAtIHZpc3VhbE9mZnNldHMueCxcbiAgICAgIHk6IGNsaXBwaW5nQW5jZXN0b3IueSAtIHZpc3VhbE9mZnNldHMueVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3QocmVjdCk7XG59XG5mdW5jdGlvbiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgc3RvcE5vZGUpIHtcbiAgY29uc3QgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIGlmIChwYXJlbnROb2RlID09PSBzdG9wTm9kZSB8fCAhaXNFbGVtZW50KHBhcmVudE5vZGUpIHx8IGlzTGFzdFRyYXZlcnNhYmxlTm9kZShwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnROb2RlKS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJyB8fCBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IocGFyZW50Tm9kZSwgc3RvcE5vZGUpO1xufVxuXG4vLyBBIFwiY2xpcHBpbmcgYW5jZXN0b3JcIiBpcyBhbiBgb3ZlcmZsb3dgIGVsZW1lbnQgd2l0aCB0aGUgY2hhcmFjdGVyaXN0aWMgb2Zcbi8vIGNsaXBwaW5nIChvciBoaWRpbmcpIGNoaWxkIGVsZW1lbnRzLiBUaGlzIHJldHVybnMgYWxsIGNsaXBwaW5nIGFuY2VzdG9yc1xuLy8gb2YgdGhlIGdpdmVuIGVsZW1lbnQgdXAgdGhlIHRyZWUuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnMoZWxlbWVudCwgY2FjaGUpIHtcbiAgY29uc3QgY2FjaGVkUmVzdWx0ID0gY2FjaGUuZ2V0KGVsZW1lbnQpO1xuICBpZiAoY2FjaGVkUmVzdWx0KSB7XG4gICAgcmV0dXJuIGNhY2hlZFJlc3VsdDtcbiAgfVxuICBsZXQgcmVzdWx0ID0gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoZWxlbWVudCwgW10sIGZhbHNlKS5maWx0ZXIoZWwgPT4gaXNFbGVtZW50KGVsKSAmJiBnZXROb2RlTmFtZShlbCkgIT09ICdib2R5Jyk7XG4gIGxldCBjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA9IG51bGw7XG4gIGNvbnN0IGVsZW1lbnRJc0ZpeGVkID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJztcbiAgbGV0IGN1cnJlbnROb2RlID0gZWxlbWVudElzRml4ZWQgPyBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIDogZWxlbWVudDtcblxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuICB3aGlsZSAoaXNFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKGN1cnJlbnROb2RlKSkge1xuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnROb2RlKTtcbiAgICBjb25zdCBjdXJyZW50Tm9kZUlzQ29udGFpbmluZyA9IGlzQ29udGFpbmluZ0Jsb2NrKGN1cnJlbnROb2RlKTtcbiAgICBpZiAoIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgc2hvdWxkRHJvcEN1cnJlbnROb2RlID0gZWxlbWVudElzRml4ZWQgPyAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlIDogIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdzdGF0aWMnICYmICEhY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgJiYgWydhYnNvbHV0ZScsICdmaXhlZCddLmluY2x1ZGVzKGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlLnBvc2l0aW9uKSB8fCBpc092ZXJmbG93RWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvcihlbGVtZW50LCBjdXJyZW50Tm9kZSk7XG4gICAgaWYgKHNob3VsZERyb3BDdXJyZW50Tm9kZSkge1xuICAgICAgLy8gRHJvcCBub24tY29udGFpbmluZyBibG9ja3MuXG4gICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKGFuY2VzdG9yID0+IGFuY2VzdG9yICE9PSBjdXJyZW50Tm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlY29yZCBsYXN0IGNvbnRhaW5pbmcgYmxvY2sgZm9yIG5leHQgaXRlcmF0aW9uLlxuICAgICAgY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgPSBjb21wdXRlZFN0eWxlO1xuICAgIH1cbiAgICBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoY3VycmVudE5vZGUpO1xuICB9XG4gIGNhY2hlLnNldChlbGVtZW50LCByZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBHZXRzIHRoZSBtYXhpbXVtIGFyZWEgdGhhdCB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIGR1ZSB0byBhbnkgbnVtYmVyIG9mXG4vLyBjbGlwcGluZyBhbmNlc3RvcnMuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ1JlY3QoX3JlZikge1xuICBsZXQge1xuICAgIGVsZW1lbnQsXG4gICAgYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5LFxuICAgIHN0cmF0ZWd5XG4gIH0gPSBfcmVmO1xuICBjb25zdCBlbGVtZW50Q2xpcHBpbmdBbmNlc3RvcnMgPSBib3VuZGFyeSA9PT0gJ2NsaXBwaW5nQW5jZXN0b3JzJyA/IGdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9ycyhlbGVtZW50LCB0aGlzLl9jKSA6IFtdLmNvbmNhdChib3VuZGFyeSk7XG4gIGNvbnN0IGNsaXBwaW5nQW5jZXN0b3JzID0gWy4uLmVsZW1lbnRDbGlwcGluZ0FuY2VzdG9ycywgcm9vdEJvdW5kYXJ5XTtcbiAgY29uc3QgZmlyc3RDbGlwcGluZ0FuY2VzdG9yID0gY2xpcHBpbmdBbmNlc3RvcnNbMF07XG4gIGNvbnN0IGNsaXBwaW5nUmVjdCA9IGNsaXBwaW5nQW5jZXN0b3JzLnJlZHVjZSgoYWNjUmVjdCwgY2xpcHBpbmdBbmNlc3RvcikgPT4ge1xuICAgIGNvbnN0IHJlY3QgPSBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpO1xuICAgIGFjY1JlY3QudG9wID0gbWF4KHJlY3QudG9wLCBhY2NSZWN0LnRvcCk7XG4gICAgYWNjUmVjdC5yaWdodCA9IG1pbihyZWN0LnJpZ2h0LCBhY2NSZWN0LnJpZ2h0KTtcbiAgICBhY2NSZWN0LmJvdHRvbSA9IG1pbihyZWN0LmJvdHRvbSwgYWNjUmVjdC5ib3R0b20pO1xuICAgIGFjY1JlY3QubGVmdCA9IG1heChyZWN0LmxlZnQsIGFjY1JlY3QubGVmdCk7XG4gICAgcmV0dXJuIGFjY1JlY3Q7XG4gIH0sIGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBmaXJzdENsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KSk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IGNsaXBwaW5nUmVjdC5yaWdodCAtIGNsaXBwaW5nUmVjdC5sZWZ0LFxuICAgIGhlaWdodDogY2xpcHBpbmdSZWN0LmJvdHRvbSAtIGNsaXBwaW5nUmVjdC50b3AsXG4gICAgeDogY2xpcHBpbmdSZWN0LmxlZnQsXG4gICAgeTogY2xpcHBpbmdSZWN0LnRvcFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXREaW1lbnNpb25zKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldENzc0RpbWVuc2lvbnMoZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGVsZW1lbnQsIG9mZnNldFBhcmVudCwgc3RyYXRlZ3kpIHtcbiAgY29uc3QgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBpc0ZpeGVkID0gc3RyYXRlZ3kgPT09ICdmaXhlZCc7XG4gIGNvbnN0IHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgaXNGaXhlZCwgb2Zmc2V0UGFyZW50KTtcbiAgbGV0IHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgfHwgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSB7XG4gICAgaWYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fCBpc092ZXJmbG93RWxlbWVudChkb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCkge1xuICAgICAgY29uc3Qgb2Zmc2V0UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQsIHRydWUsIGlzRml4ZWQsIG9mZnNldFBhcmVudCk7XG4gICAgICBvZmZzZXRzLnggPSBvZmZzZXRSZWN0LnggKyBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSA9IG9mZnNldFJlY3QueSArIG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfSBlbHNlIGlmIChkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIG9mZnNldHMueCA9IGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4OiByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCxcbiAgICB5OiByZWN0LnRvcCArIHNjcm9sbC5zY3JvbGxUb3AgLSBvZmZzZXRzLnksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHBvbHlmaWxsKSB7XG4gICAgcmV0dXJuIHBvbHlmaWxsKGVsZW1lbnQpO1xuICB9XG4gIHJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudDtcbn1cblxuLy8gR2V0cyB0aGUgY2xvc2VzdCBhbmNlc3RvciBwb3NpdGlvbmVkIGVsZW1lbnQuIEhhbmRsZXMgc29tZSBlZGdlIGNhc2VzLFxuLy8gc3VjaCBhcyB0YWJsZSBhbmNlc3RvcnMgYW5kIGNyb3NzIGJyb3dzZXIgYnVncy5cbmZ1bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50LCBwb2x5ZmlsbCkge1xuICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cbiAgbGV0IG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpO1xuICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQob2Zmc2V0UGFyZW50LCBwb2x5ZmlsbCk7XG4gIH1cbiAgaWYgKG9mZnNldFBhcmVudCAmJiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2h0bWwnIHx8IGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdib2R5JyAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnICYmICFpc0NvbnRhaW5pbmdCbG9jayhvZmZzZXRQYXJlbnQpKSkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cbiAgcmV0dXJuIG9mZnNldFBhcmVudCB8fCBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkgfHwgd2luZG93O1xufVxuXG5jb25zdCBnZXRFbGVtZW50UmVjdHMgPSBhc3luYyBmdW5jdGlvbiAoX3JlZikge1xuICBsZXQge1xuICAgIHJlZmVyZW5jZSxcbiAgICBmbG9hdGluZyxcbiAgICBzdHJhdGVneVxuICB9ID0gX3JlZjtcbiAgY29uc3QgZ2V0T2Zmc2V0UGFyZW50Rm4gPSB0aGlzLmdldE9mZnNldFBhcmVudCB8fCBnZXRPZmZzZXRQYXJlbnQ7XG4gIGNvbnN0IGdldERpbWVuc2lvbnNGbiA9IHRoaXMuZ2V0RGltZW5zaW9ucztcbiAgcmV0dXJuIHtcbiAgICByZWZlcmVuY2U6IGdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KHJlZmVyZW5jZSwgYXdhaXQgZ2V0T2Zmc2V0UGFyZW50Rm4oZmxvYXRpbmcpLCBzdHJhdGVneSksXG4gICAgZmxvYXRpbmc6IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwLFxuICAgICAgLi4uKGF3YWl0IGdldERpbWVuc2lvbnNGbihmbG9hdGluZykpXG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNSVEwoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5kaXJlY3Rpb24gPT09ICdydGwnO1xufVxuXG5jb25zdCBwbGF0Zm9ybSA9IHtcbiAgY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QsXG4gIGdldERvY3VtZW50RWxlbWVudCxcbiAgZ2V0Q2xpcHBpbmdSZWN0LFxuICBnZXRPZmZzZXRQYXJlbnQsXG4gIGdldEVsZW1lbnRSZWN0cyxcbiAgZ2V0Q2xpZW50UmVjdHMsXG4gIGdldERpbWVuc2lvbnMsXG4gIGdldFNjYWxlLFxuICBpc0VsZW1lbnQsXG4gIGlzUlRMXG59O1xuXG4vLyBodHRwczovL3NhbXRob3IuYXUvMjAyMS9vYnNlcnZpbmctZG9tL1xuZnVuY3Rpb24gb2JzZXJ2ZU1vdmUoZWxlbWVudCwgb25Nb3ZlKSB7XG4gIGxldCBpbyA9IG51bGw7XG4gIGxldCB0aW1lb3V0SWQ7XG4gIGNvbnN0IHJvb3QgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgaW8gJiYgaW8uZGlzY29ubmVjdCgpO1xuICAgIGlvID0gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiByZWZyZXNoKHNraXAsIHRocmVzaG9sZCkge1xuICAgIGlmIChza2lwID09PSB2b2lkIDApIHtcbiAgICAgIHNraXAgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRocmVzaG9sZCA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJlc2hvbGQgPSAxO1xuICAgIH1cbiAgICBjbGVhbnVwKCk7XG4gICAgY29uc3Qge1xuICAgICAgbGVmdCxcbiAgICAgIHRvcCxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0XG4gICAgfSA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKCFza2lwKSB7XG4gICAgICBvbk1vdmUoKTtcbiAgICB9XG4gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluc2V0VG9wID0gZmxvb3IodG9wKTtcbiAgICBjb25zdCBpbnNldFJpZ2h0ID0gZmxvb3Iocm9vdC5jbGllbnRXaWR0aCAtIChsZWZ0ICsgd2lkdGgpKTtcbiAgICBjb25zdCBpbnNldEJvdHRvbSA9IGZsb29yKHJvb3QuY2xpZW50SGVpZ2h0IC0gKHRvcCArIGhlaWdodCkpO1xuICAgIGNvbnN0IGluc2V0TGVmdCA9IGZsb29yKGxlZnQpO1xuICAgIGNvbnN0IHJvb3RNYXJnaW4gPSAtaW5zZXRUb3AgKyBcInB4IFwiICsgLWluc2V0UmlnaHQgKyBcInB4IFwiICsgLWluc2V0Qm90dG9tICsgXCJweCBcIiArIC1pbnNldExlZnQgKyBcInB4XCI7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHJvb3RNYXJnaW4sXG4gICAgICB0aHJlc2hvbGQ6IG1heCgwLCBtaW4oMSwgdGhyZXNob2xkKSkgfHwgMVxuICAgIH07XG4gICAgbGV0IGlzRmlyc3RVcGRhdGUgPSB0cnVlO1xuICAgIGZ1bmN0aW9uIGhhbmRsZU9ic2VydmUoZW50cmllcykge1xuICAgICAgY29uc3QgcmF0aW8gPSBlbnRyaWVzWzBdLmludGVyc2VjdGlvblJhdGlvO1xuICAgICAgaWYgKHJhdGlvICE9PSB0aHJlc2hvbGQpIHtcbiAgICAgICAgaWYgKCFpc0ZpcnN0VXBkYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJhdGlvKSB7XG4gICAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZWZyZXNoKGZhbHNlLCAxZS03KTtcbiAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZnJlc2goZmFsc2UsIHJhdGlvKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaXNGaXJzdFVwZGF0ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIE9sZGVyIGJyb3dzZXJzIGRvbid0IHN1cHBvcnQgYSBgZG9jdW1lbnRgIGFzIHRoZSByb290IGFuZCB3aWxsIHRocm93IGFuXG4gICAgLy8gZXJyb3IuXG4gICAgdHJ5IHtcbiAgICAgIGlvID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGhhbmRsZU9ic2VydmUsIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgLy8gSGFuZGxlIDxpZnJhbWU+c1xuICAgICAgICByb290OiByb290Lm93bmVyRG9jdW1lbnRcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlvID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGhhbmRsZU9ic2VydmUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpby5vYnNlcnZlKGVsZW1lbnQpO1xuICB9XG4gIHJlZnJlc2godHJ1ZSk7XG4gIHJldHVybiBjbGVhbnVwO1xufVxuXG4vKipcbiAqIEF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgd2hlbiBuZWNlc3NhcnkuXG4gKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgZmxvYXRpbmcgZWxlbWVudCBpcyBtb3VudGVkIG9uIHRoZSBET00gb3JcbiAqIHZpc2libGUgb24gdGhlIHNjcmVlbi5cbiAqIEByZXR1cm5zIGNsZWFudXAgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgaW52b2tlZCB3aGVuIHRoZSBmbG9hdGluZyBlbGVtZW50IGlzXG4gKiByZW1vdmVkIGZyb20gdGhlIERPTSBvciBoaWRkZW4gZnJvbSB0aGUgc2NyZWVuLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9VcGRhdGVcbiAqL1xuZnVuY3Rpb24gYXV0b1VwZGF0ZShyZWZlcmVuY2UsIGZsb2F0aW5nLCB1cGRhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBjb25zdCB7XG4gICAgYW5jZXN0b3JTY3JvbGwgPSB0cnVlLFxuICAgIGFuY2VzdG9yUmVzaXplID0gdHJ1ZSxcbiAgICBlbGVtZW50UmVzaXplID0gdHlwZW9mIFJlc2l6ZU9ic2VydmVyID09PSAnZnVuY3Rpb24nLFxuICAgIGxheW91dFNoaWZ0ID0gdHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyID09PSAnZnVuY3Rpb24nLFxuICAgIGFuaW1hdGlvbkZyYW1lID0gZmFsc2VcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJlZmVyZW5jZUVsID0gdW53cmFwRWxlbWVudChyZWZlcmVuY2UpO1xuICBjb25zdCBhbmNlc3RvcnMgPSBhbmNlc3RvclNjcm9sbCB8fCBhbmNlc3RvclJlc2l6ZSA/IFsuLi4ocmVmZXJlbmNlRWwgPyBnZXRPdmVyZmxvd0FuY2VzdG9ycyhyZWZlcmVuY2VFbCkgOiBbXSksIC4uLmdldE92ZXJmbG93QW5jZXN0b3JzKGZsb2F0aW5nKV0gOiBbXTtcbiAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgIGFuY2VzdG9yU2Nyb2xsICYmIGFuY2VzdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZVxuICAgIH0pO1xuICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gIH0pO1xuICBjb25zdCBjbGVhbnVwSW8gPSByZWZlcmVuY2VFbCAmJiBsYXlvdXRTaGlmdCA/IG9ic2VydmVNb3ZlKHJlZmVyZW5jZUVsLCB1cGRhdGUpIDogbnVsbDtcbiAgbGV0IHJlb2JzZXJ2ZUZyYW1lID0gLTE7XG4gIGxldCByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gIGlmIChlbGVtZW50UmVzaXplKSB7XG4gICAgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoX3JlZiA9PiB7XG4gICAgICBsZXQgW2ZpcnN0RW50cnldID0gX3JlZjtcbiAgICAgIGlmIChmaXJzdEVudHJ5ICYmIGZpcnN0RW50cnkudGFyZ2V0ID09PSByZWZlcmVuY2VFbCAmJiByZXNpemVPYnNlcnZlcikge1xuICAgICAgICAvLyBQcmV2ZW50IHVwZGF0ZSBsb29wcyB3aGVuIHVzaW5nIHRoZSBgc2l6ZWAgbWlkZGxld2FyZS5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8xNzQwXG4gICAgICAgIHJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZShmbG9hdGluZyk7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJlb2JzZXJ2ZUZyYW1lKTtcbiAgICAgICAgcmVvYnNlcnZlRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIHJlc2l6ZU9ic2VydmVyICYmIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUoZmxvYXRpbmcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZSgpO1xuICAgIH0pO1xuICAgIGlmIChyZWZlcmVuY2VFbCAmJiAhYW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUocmVmZXJlbmNlRWwpO1xuICAgIH1cbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgfVxuICBsZXQgZnJhbWVJZDtcbiAgbGV0IHByZXZSZWZSZWN0ID0gYW5pbWF0aW9uRnJhbWUgPyBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKSA6IG51bGw7XG4gIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgIGZyYW1lTG9vcCgpO1xuICB9XG4gIGZ1bmN0aW9uIGZyYW1lTG9vcCgpIHtcbiAgICBjb25zdCBuZXh0UmVmUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChyZWZlcmVuY2UpO1xuICAgIGlmIChwcmV2UmVmUmVjdCAmJiAobmV4dFJlZlJlY3QueCAhPT0gcHJldlJlZlJlY3QueCB8fCBuZXh0UmVmUmVjdC55ICE9PSBwcmV2UmVmUmVjdC55IHx8IG5leHRSZWZSZWN0LndpZHRoICE9PSBwcmV2UmVmUmVjdC53aWR0aCB8fCBuZXh0UmVmUmVjdC5oZWlnaHQgIT09IHByZXZSZWZSZWN0LmhlaWdodCkpIHtcbiAgICAgIHVwZGF0ZSgpO1xuICAgIH1cbiAgICBwcmV2UmVmUmVjdCA9IG5leHRSZWZSZWN0O1xuICAgIGZyYW1lSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnJhbWVMb29wKTtcbiAgfVxuICB1cGRhdGUoKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBhbmNlc3RvcnMuZm9yRWFjaChhbmNlc3RvciA9PiB7XG4gICAgICBhbmNlc3RvclNjcm9sbCAmJiBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB1cGRhdGUpO1xuICAgICAgYW5jZXN0b3JSZXNpemUgJiYgYW5jZXN0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlKTtcbiAgICB9KTtcbiAgICBjbGVhbnVwSW8gJiYgY2xlYW51cElvKCk7XG4gICAgcmVzaXplT2JzZXJ2ZXIgJiYgcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIHJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgICBpZiAoYW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGZyYW1lSWQpO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgYHhgIGFuZCBgeWAgY29vcmRpbmF0ZXMgdGhhdCB3aWxsIHBsYWNlIHRoZSBmbG9hdGluZyBlbGVtZW50XG4gKiBuZXh0IHRvIGEgcmVmZXJlbmNlIGVsZW1lbnQgd2hlbiBpdCBpcyBnaXZlbiBhIGNlcnRhaW4gQ1NTIHBvc2l0aW9uaW5nXG4gKiBzdHJhdGVneS5cbiAqL1xuY29uc3QgY29tcHV0ZVBvc2l0aW9uID0gKHJlZmVyZW5jZSwgZmxvYXRpbmcsIG9wdGlvbnMpID0+IHtcbiAgLy8gVGhpcyBjYWNoZXMgdGhlIGV4cGVuc2l2ZSBgZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzYCBmdW5jdGlvbiBzbyB0aGF0XG4gIC8vIG11bHRpcGxlIGxpZmVjeWNsZSByZXNldHMgcmUtdXNlIHRoZSBzYW1lIHJlc3VsdC4gSXQgb25seSBsaXZlcyBmb3IgYVxuICAvLyBzaW5nbGUgY2FsbC4gSWYgb3RoZXIgZnVuY3Rpb25zIGJlY29tZSBleHBlbnNpdmUsIHdlIGNhbiBhZGQgdGhlbSBhcyB3ZWxsLlxuICBjb25zdCBjYWNoZSA9IG5ldyBNYXAoKTtcbiAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IHtcbiAgICBwbGF0Zm9ybSxcbiAgICAuLi5vcHRpb25zXG4gIH07XG4gIGNvbnN0IHBsYXRmb3JtV2l0aENhY2hlID0ge1xuICAgIC4uLm1lcmdlZE9wdGlvbnMucGxhdGZvcm0sXG4gICAgX2M6IGNhY2hlXG4gIH07XG4gIHJldHVybiBjb21wdXRlUG9zaXRpb24kMShyZWZlcmVuY2UsIGZsb2F0aW5nLCB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucyxcbiAgICBwbGF0Zm9ybTogcGxhdGZvcm1XaXRoQ2FjaGVcbiAgfSk7XG59O1xuXG5leHBvcnQgeyBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24sIHBsYXRmb3JtIH07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQge1xuXHRhcnJvdyxcblx0YXV0b1BsYWNlbWVudCxcblx0YXV0b1VwZGF0ZSxcblx0ZGV0ZWN0T3ZlcmZsb3csXG5cdGNvbXB1dGVQb3NpdGlvbixcblx0b2Zmc2V0LFxuXHRmbGlwLFxuXHRzaXplLFxuXHRzaGlmdCxcbn0gZnJvbSBcIkBmbG9hdGluZy11aS9kb21cIjtcbmltcG9ydCB7IFByb2Nlc3NpbmcgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9wcm9jZXNzaW5nLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZywgaXNBcnJheSwgaXNPYmplY3QsIGlzRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5cbmV4cG9ydCB7IHBvc2l0aW9uUG9wcGVyIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBjb250cm9sRWxlbWVudFxuICogQHBhcmFtIHBvcHBlckVsZW1lbnRcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJucyB7UHJvbWlzZXwqfVxuICovXG5mdW5jdGlvbiBwb3NpdGlvblBvcHBlcihjb250cm9sRWxlbWVudCwgcG9wcGVyRWxlbWVudCwgb3B0aW9ucykge1xuXHRjb25zdCBib2R5ID0gZ2V0RG9jdW1lbnQoKS5ib2R5O1xuXG5cdHJldHVybiBuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0Y29uc3QgYXJyb3dFbGVtZW50ID0gY29udHJvbEVsZW1lbnQucXVlcnlTZWxlY3Rvcihcblx0XHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWFycm93XVwiLFxuXHRcdCk7XG5cblx0XHRjb25zdCBjb25maWcgPSBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHR7XG5cdFx0XHRcdHBsYWNlbWVudDogXCJ0b3BcIixcblx0XHRcdH0sXG5cdFx0XHRvcHRpb25zLFxuXHRcdCk7XG5cblx0XHRjb25zdCBtaWRkbGV3YXJlID0gY29uZmlnPy5bXCJtaWRkbGV3YXJlXCJdO1xuXHRcdGlmICghaXNBcnJheShtaWRkbGV3YXJlKSkge1xuXHRcdFx0aWYgKGlzU3RyaW5nKG1pZGRsZXdhcmUpKSB7XG5cdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl0gPSBtaWRkbGV3YXJlLnNwbGl0KFwiLFwiKS5maWx0ZXIoKGxpbmUpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gbGluZS50cmltKCkubGVuZ3RoID4gMDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25maWdbXCJtaWRkbGV3YXJlXCJdID0gW107XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gbWlkZGxld2FyZSkge1xuXHRcdFx0Y29uc3QgbGluZSA9IG1pZGRsZXdhcmVba2V5XTtcblx0XHRcdGlmIChpc0Z1bmN0aW9uKGxpbmUpKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNPYmplY3QobGluZSkpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghaXNTdHJpbmcobGluZSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdGBNaWRkbGV3YXJlIG11c3QgYmUgYSBzdHJpbmcsIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0LiBHb3QgJHt0eXBlb2YgbGluZX1gLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBrdiA9IGxpbmUuc3BsaXQoXCI6XCIpO1xuXHRcdFx0Y29uc3QgZm4gPSBrdi5zaGlmdCgpO1xuXG5cdFx0XHRzd2l0Y2ggKGZuKSB7XG5cdFx0XHRcdGNhc2UgXCJmbGlwXCI6XG5cdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gZmxpcCgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwic2hpZnRcIjpcblx0XHRcdFx0XHRjb25maWdbXCJtaWRkbGV3YXJlXCJdW2tleV0gPSBzaGlmdCgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiYXV0b1BsYWNlbWVudFwiOlxuXHRcdFx0XHRcdGxldCBkZWZhdWx0QWxsb3dlZFBsYWNlbWVudHMgPSBbXCJ0b3BcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCIsIFwicmlnaHRcIl07XG5cblx0XHRcdFx0XHRjb25zdCBkZWZQbGFjZW1lbnQgPSBrdj8uc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAoaXNTdHJpbmcoZGVmUGxhY2VtZW50KSAmJiBkZWZQbGFjZW1lbnQudHJpbSgpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGRlZmF1bHRBbGxvd2VkUGxhY2VtZW50cyA9IGRlZlBsYWNlbWVudFxuXHRcdFx0XHRcdFx0XHQuc3BsaXQoXCIsXCIpXG5cdFx0XHRcdFx0XHRcdC5maWx0ZXIoKGxpbmUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbGluZS50cmltKCkubGVuZ3RoID4gMDtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGRlZmF1bHRBbGxvd2VkUGxhY2VtZW50cy5pbmNsdWRlcyhjb25maWcucGxhY2VtZW50KSkge1xuXHRcdFx0XHRcdFx0ZGVmYXVsdEFsbG93ZWRQbGFjZW1lbnRzLnNwbGljZShcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdEFsbG93ZWRQbGFjZW1lbnRzLmluZGV4T2YoY29uZmlnLnBsYWNlbWVudCksXG5cdFx0XHRcdFx0XHRcdDEsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkZWZhdWx0QWxsb3dlZFBsYWNlbWVudHMudW5zaGlmdChjb25maWcucGxhY2VtZW50KTtcblxuXHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IGF1dG9QbGFjZW1lbnQoe1xuXHRcdFx0XHRcdFx0Y3Jvc3NBeGlzOiB0cnVlLFxuXHRcdFx0XHRcdFx0YXV0b0FsaWdubWVudDogdHJ1ZSxcblx0XHRcdFx0XHRcdGFsbG93ZWRQbGFjZW1lbnRzOiBkZWZhdWx0QWxsb3dlZFBsYWNlbWVudHMsXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImRldGVjdE92ZXJmbG93XCI6XG5cdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gZGV0ZWN0T3ZlcmZsb3coKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImFycm93XCI6XG5cdFx0XHRcdFx0aWYgKGFycm93RWxlbWVudCkge1xuXHRcdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gYXJyb3coeyBlbGVtZW50OiBhcnJvd0VsZW1lbnQgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwic2l6ZVwiOlxuXHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IHNpemUoe1xuXHRcdFx0XHRcdFx0YXBwbHkoeyBhdmFpbGFibGVXaWR0aCwgYXZhaWxhYmxlSGVpZ2h0LCBlbGVtZW50cyB9KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG1heFdpZHRoID0gYm9keS5jbGllbnRXaWR0aDtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWF4SGVpZ2h0ID0gYm9keS5jbGllbnRIZWlnaHQ7XG5cblx0XHRcdFx0XHRcdFx0aWYgKGF2YWlsYWJsZVdpZHRoIDwgMCkge1xuXHRcdFx0XHRcdFx0XHRcdGF2YWlsYWJsZVdpZHRoID0gMDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChhdmFpbGFibGVIZWlnaHQgPCAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXZhaWxhYmxlSGVpZ2h0ID0gMDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChhdmFpbGFibGVXaWR0aCA+IG1heFdpZHRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXZhaWxhYmxlV2lkdGggPSBtYXhXaWR0aDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChhdmFpbGFibGVIZWlnaHQgPiBtYXhIZWlnaHQpIHtcblx0XHRcdFx0XHRcdFx0XHRhdmFpbGFibGVIZWlnaHQgPSBtYXhIZWlnaHQ7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRPYmplY3QuYXNzaWduKGVsZW1lbnRzLmZsb2F0aW5nLnN0eWxlLCB7XG5cdFx0XHRcdFx0XHRcdFx0Ym94U2l6aW5nOiBcImJvcmRlci1ib3hcIixcblx0XHRcdFx0XHRcdFx0XHRtYXhXaWR0aDogYCR7YXZhaWxhYmxlV2lkdGh9cHhgLFxuXHRcdFx0XHRcdFx0XHRcdG1heEhlaWdodDogYCR7YXZhaWxhYmxlSGVpZ2h0fXB4YCxcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwib2Zmc2V0XCI6XG5cdFx0XHRcdFx0Y29uc3QgbyA9IGt2Py5zaGlmdCgpO1xuXHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IG9mZnNldChwYXJzZUludChvKSB8fCAxMCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJoaWRlXCI6XG5cdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gaGlkZSgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgVW5rbm93biBmdW5jdGlvbjogJHtmbn1gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRwb3BwZXJFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KFwidmlzaWJpbGl0eVwiKTtcblx0XHRwb3BwZXJFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG5cblx0XHRhdXRvVXBkYXRlKGNvbnRyb2xFbGVtZW50LCBwb3BwZXJFbGVtZW50LCAoKSA9PiB7XG5cdFx0XHRjb21wdXRlUG9zaXRpb24oY29udHJvbEVsZW1lbnQsIHBvcHBlckVsZW1lbnQsIGNvbmZpZykudGhlbihcblx0XHRcdFx0KHsgeCwgeSwgcGxhY2VtZW50LCBtaWRkbGV3YXJlRGF0YSB9KSA9PiB7XG5cdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihwb3BwZXJFbGVtZW50LnN0eWxlLCB7XG5cdFx0XHRcdFx0XHR0b3A6IFwiMFwiLFxuXHRcdFx0XHRcdFx0bGVmdDogXCIwXCIsXG5cdFx0XHRcdFx0XHR0cmFuc2Zvcm06IGB0cmFuc2xhdGUoJHtyb3VuZEJ5RFBSKHgpfXB4LCR7cm91bmRCeURQUih5KX1weClgLFxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0aWYgKG1pZGRsZXdhcmVEYXRhLmFycm93KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzaWRlID0gcGxhY2VtZW50LnNwbGl0KFwiLVwiKVswXTtcblxuXHRcdFx0XHRcdFx0Y29uc3Qgc3RhdGljU2lkZSA9IHtcblx0XHRcdFx0XHRcdFx0dG9wOiBcImJvdHRvbVwiLFxuXHRcdFx0XHRcdFx0XHRyaWdodDogXCJsZWZ0XCIsXG5cdFx0XHRcdFx0XHRcdGJvdHRvbTogXCJ0b3BcIixcblx0XHRcdFx0XHRcdFx0bGVmdDogXCJyaWdodFwiLFxuXHRcdFx0XHRcdFx0fVtzaWRlXTtcblxuXHRcdFx0XHRcdFx0Ly8gbW9uc3Rlci1ib3JkZXItd2lkdGggPSArIDQgKDIqMikgKHNob3VsZCBjb21lIGZyb20gY3NzKVxuXHRcdFx0XHRcdFx0Y29uc3QgYXJyb3dMZW4gPSBhcnJvd0VsZW1lbnQub2Zmc2V0V2lkdGggKyA0O1xuXG5cdFx0XHRcdFx0XHRjb25zdCBib3JkZXJTdHlsZSA9IHtcblx0XHRcdFx0XHRcdFx0Ym9yZGVyTGVmdDogXCJ0cmFuc3BhcmVudFwiLFxuXHRcdFx0XHRcdFx0XHRib3JkZXJSaWdodDogXCJ0cmFuc3BhcmVudFwiLFxuXHRcdFx0XHRcdFx0XHRib3JkZXJCb3R0b206IFwidHJhbnNwYXJlbnRcIixcblx0XHRcdFx0XHRcdFx0Ym9yZGVyVG9wOiBcInRyYW5zcGFyZW50XCIsXG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRjb25zdCBkZWZhdWx0Qm9yZGVyID1cblx0XHRcdFx0XHRcdFx0XCJ2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KVwiO1xuXG5cdFx0XHRcdFx0XHRzd2l0Y2ggKHNpZGUpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcInRvcFwiOlxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlclJpZ2h0ID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJCb3R0b20gPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJib3R0b21cIjpcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJUb3AgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlckxlZnQgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJsZWZ0XCI6XG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUuYm9yZGVyUmlnaHQgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlclRvcCA9IGRlZmF1bHRCb3JkZXI7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0Y2FzZSBcInJpZ2h0XCI6XG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUuYm9yZGVyQm90dG9tID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJMZWZ0ID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgeyB4LCB5IH0gPSBtaWRkbGV3YXJlRGF0YS5hcnJvdztcblxuXHRcdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihcblx0XHRcdFx0XHRcdFx0YXJyb3dFbGVtZW50LnN0eWxlLFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bGVmdDogeCAhPSBudWxsID8gYCR7eH1weGAgOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdHRvcDogeSAhPSBudWxsID8gYCR7eX1weGAgOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdC8vIEVuc3VyZSB0aGUgc3RhdGljIHNpZGUgZ2V0cyB1bnNldCB3aGVuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gZmxpcHBpbmcgdG8gb3RoZXIgcGxhY2VtZW50cycgYXhlcy5cblx0XHRcdFx0XHRcdFx0XHRyaWdodDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRib3R0b206IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0W3N0YXRpY1NpZGVdOiBgJHstYXJyb3dMZW4gLyAyfXB4YCxcblx0XHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm06IFwicm90YXRlKDQ1ZGVnKVwiLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZSxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblx0XHR9KTtcblx0fSkucnVuKCk7XG59XG5cbmZ1bmN0aW9uIHJvdW5kQnlEUFIodmFsdWUpIHtcblx0Y29uc3QgZHByID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcblx0cmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBkcHIpIC8gZHByO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFNlbGVjdFN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFNlbGVjdFN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRTZWxlY3RTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHNlbGVjdCB7IFxuLmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd30ubW9uc3Rlci1iYWRnZS1wcmltYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5LC5tb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LC5tb25zdGVyLWJhZGdlLXNlY29uZGFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LC5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUsLm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUtcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3N7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MsLm1vbnN0ZXItYmFkZ2Utc3VjY2Vzcy1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1zdWNjZXNzLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utd2FybmluZ3twYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utd2FybmluZywubW9uc3Rlci1iYWRnZS13YXJuaW5nLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXdhcm5pbmctcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1lcnJvcntwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtZXJyb3IsLm1vbnN0ZXItYmFkZ2UtZXJyb3ItcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1lcnJvci1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJde2FsaWduLWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6bm9uZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtsZWZ0OjA7cGFkZGluZzoxLjFlbTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDotbW96LW1heC1jb250ZW50O3dpZHRoOm1heC1jb250ZW50O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXSBkaXZbZGF0YS1tb25zdGVyLXJvbGU9YXJyb3dde2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2hlaWdodDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7ei1pbmRleDotMX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udGFpbmVyXXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7ZmxleDo0IDAgOTAlO21pbi1oZWlnaHQ6MS40ZW19LmQtbm9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fWRpdltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7cG9zaXRpb246cmVsYXRpdmV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl0ub3BlbntiYWNrZ3JvdW5kLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J003LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMGw2IDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDUuNzA3bC01LjY0NiA1LjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOGw2LTZ6Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl0uY2xlYXJ7YmFja2dyb3VuZC1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOHonLyUzRSUzQy9zdmclM0VcXFwiKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17YWNjZW50LWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7LW8tYm9yZGVyLWltYWdlOmluaXRpYWw7Ym9yZGVyLWltYWdlOmluaXRpYWw7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnRoaW47Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKTtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6MTAwJTttYXJnaW46MDtvdXRsaW5lOm5vbmU7cGFkZGluZzouNHJlbSAuNnJlbX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmxpZ2h0KXtbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDoycHh9fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXTpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1zZWxlY3Rpb25de2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwO2dhcDo1cHg7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7bWFyZ2luOjVweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uLWNvbnRyb2xde21hcmdpbi1yaWdodDo4cHh9W2RhdGEtbW9uc3Rlci1yb2xlPWJhZGdlXXtkaXNwbGF5OmlubGluZS1mbGV4fVtkYXRhLW1vbnN0ZXItcm9sZT1iYWRnZS1sYWJlbF17YWxpZ24tY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7Z2FwOjdweDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn1bZGF0YS1tb25zdGVyLXJvbGU9cmVtb3ZlLWJhZGdlXXtiYWNrZ3JvdW5kLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4eicvJTNFJTNDL3N2ZyUzRVxcXCIpO2JhY2tncm91bmQtcG9zaXRpb246MTAwJSAxMDAlO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6MTZweDtoZWlnaHQ6MTZweDttYXJnaW4tbGVmdDo1cHg7bWluLWhlaWdodDoxNnB4O29yZGVyOjI7d2lkdGg6MTZweH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmxpZ2h0KXtbZGF0YS1tb25zdGVyLXJvbGU9cmVtb3ZlLWJhZGdlXXtmaWx0ZXI6aW52ZXJ0KDEpfX1bZGF0YS1tb25zdGVyLXJvbGU9ZmlsdGVyXSxbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyLWZpbHRlcl17ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoyMDA7b3JkZXI6OTk5OTk5OTk7dmlzaWJpbGl0eTpoaWRkZW59W2RhdGEtbW9uc3Rlci1yb2xlPWZpbHRlcl0uYWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2JvcmRlcjowO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKTttaW4td2lkdGg6NDAlO291dGxpbmU6bm9uZTt2aXNpYmlsaXR5OnZpc2libGV9LmFjdGl2ZVtkYXRhLW1vbnN0ZXItcm9sZT1maWx0ZXJdW25hbWU9cG9wcGVyLWZpbHRlcl17aGVpZ2h0OjEuNWVtO21hcmdpbjoyLjVlbTtwYWRkaW5nOjJweDt3aWR0aDpjYWxjKDEwMCUgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkqMil9Lm9wdGlvbi1maWx0ZXItY29udHJvbHthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7ZGlzcGxheTpmbGV4O2hlaWdodDoyLjVlbTttYXJnaW46LTEuMWVtIC0xLjFlbSAuM2VtfS5zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc3std2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNMS42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCAxMC4yOTNsNS42NDYtNS42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOGwtNiA2YS41LjUgMCAwIDEtLjcwOCAwbC02LTZhLjUuNSAwIDAgMSAwLS43MDh6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZToxNnB4O21pbi1oZWlnaHQ6MTZweDt3aWR0aDoxNnB4fVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc10ub3BlbntiYWNrZ3JvdW5kLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J003LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMGw2IDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDUuNzA3bC01LjY0NiA1LjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOGw2LTZ6Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXS5lbXB0eXtiYWNrZ3JvdW5kLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS1kYXNoLWNpcmNsZSclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTR6bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2eicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOHonLyUzRSUzQy9zdmclM0VcXFwiKX1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNdLmNsZWFye2JhY2tncm91bmQtaW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvciclM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDh6Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXS5sb2FkaW5ne2FuaW1hdGlvbi1kdXJhdGlvbjoxczthbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlO2FuaW1hdGlvbi1uYW1lOmFjdGl2aXR5O2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsMCwuMiwxKTtiYWNrZ3JvdW5kLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdhY3Rpdml0eSclM0UlM0NjaXJjbGUgY3g9JzgnIGN5PSc4JyByPSc4Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9QGtleWZyYW1lcyBhY3Rpdml0eXswJXt0cmFuc2Zvcm06c2NhbGUoMSl9NTAle3RyYW5zZm9ybTpzY2FsZSguMSl9dG97dHJhbnNmb3JtOnNjYWxlKDEpfX1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uc117Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1ncm93OjF9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl17YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7cGFkZGluZzo2cHggNXB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dIGxhYmVse2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl0gbGFiZWw+ZGl2e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1uby1vcHRpb25zXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMik7bWFyZ2luOjEuMWVtIDAgMCAxLjFlbX0uc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1maWx0ZXJlZD10cnVlXSxbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eT1oaWRkZW5de2Rpc3BsYXk6bm9uZX1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItZm9jdXNlZD10cnVlXXtvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMik7b3V0bGluZS1vZmZzZXQ6MnB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dPmlucHV0OmZvY3VzLFtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dPmxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgYnVpbGRNYXAgfSBmcm9tIFwiLi4vLi4vZGF0YS9idWlsZG1hcC5tanNcIjtcbmltcG9ydCB7IERlYWRNYW5zU3dpdGNoIH0gZnJvbSBcIi4uLy4uL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzXCI7XG5pbXBvcnQgeyBwb3NpdGlvblBvcHBlciB9IGZyb20gXCIuL3V0aWwvZmxvYXRpbmctdWkubWpzXCI7XG5pbXBvcnQge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbixcblx0ZmluZENsb3Nlc3RCeUF0dHJpYnV0ZSxcblx0cmVtb3ZlQXR0cmlidXRlVG9rZW4sXG59IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9QUkVGSVgsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEN1c3RvbUNvbnRyb2wgfSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWNvbnRyb2wubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Z2V0U2xvdHRlZEVsZW1lbnRzLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7XG5cdGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50LFxuXHRmaXJlQ3VzdG9tRXZlbnQsXG5cdGZpcmVFdmVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IEZvcm1hdHRlciB9IGZyb20gXCIuLi8uLi90ZXh0L2Zvcm1hdHRlci5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbCB9IGZyb20gXCIuLi8uLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBJRCB9IGZyb20gXCIuLi8uLi90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7XG5cdGlzQXJyYXksXG5cdGlzRnVuY3Rpb24sXG5cdGlzSW50ZWdlcixcblx0aXNJdGVyYWJsZSxcblx0aXNPYmplY3QsXG5cdGlzUHJpbWl0aXZlLFxuXHRpc1N0cmluZyxcbn0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBQcm94eU9ic2VydmVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUFycmF5LCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IFByb2Nlc3NpbmcgfSBmcm9tIFwiLi4vLi4vdXRpbC9wcm9jZXNzaW5nLm1qc1wiO1xuaW1wb3J0IHsgU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgU2VsZWN0U3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvc2VsZWN0Lm1qc1wiO1xuaW1wb3J0IHtcblx0Z2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMsXG5cdFRyYW5zbGF0aW9ucyxcbn0gZnJvbSBcIi4uLy4uL2kxOG4vdHJhbnNsYXRpb25zLm1qc1wiO1xuXG5leHBvcnQge1xuXHRTZWxlY3QsXG5cdHBvcHBlckVsZW1lbnRTeW1ib2wsXG5cdGdldFN1bW1hcnlUZW1wbGF0ZSxcblx0Z2V0U2VsZWN0aW9uVGVtcGxhdGUsXG59O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBub09wdGlvbnNBdmFpbGFibGVNZXNzYWdlID0gXCJObyBvcHRpb25zIGF2YWlsYWJsZS5cIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdGltZXJDYWxsYmFja1N5bWJvbCA9IFN5bWJvbChcInRpbWVyQ2FsbGJhY2tcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY2xvc2VFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJjbG9zZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjbGVhck9wdGlvbkV2ZW50SGFuZGxlciA9IFN5bWJvbChcImNsZWFyT3B0aW9uRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlc2l6ZU9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFwicmVzaXplT2JzZXJ2ZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qga2V5RXZlbnRIYW5kbGVyID0gU3ltYm9sKFwia2V5RXZlbnRIYW5kbGVyXCIpO1xuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnB1dEV2ZW50SGFuZGxlciA9IFN5bWJvbChcImlucHV0RXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNoYW5nZUV2ZW50SGFuZGxlciA9IFN5bWJvbChcImNoYW5nZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250cm9sRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRyb2xFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHNlbGVjdGlvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJzZWxlY3Rpb25FbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRhaW5lckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250YWluZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJwb3BwZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGlubGluZUZpbHRlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJpbmxpbmVGaWx0ZXJFbGVtZW50XCIpO1xuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyRmlsdGVyRWxlbWVudFwiKTtcbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcblx0XCJwb3BwZXJGaWx0ZXJDb250YWluZXJFbGVtZW50XCIsXG4pO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG9wdGlvbnNFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwib3B0aW9uc0VsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgbm9PcHRpb25zQXZhaWxhYmxlRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIm5vT3B0aW9uc0F2YWlsYWJsZUVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3RhdHVzT3JSZW1vdmVCYWRnZXNFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic3RhdHVzT3JSZW1vdmVCYWRnZXNFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBhcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbCA9IFN5bWJvbChcIkBAYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IEZPQ1VTX0RJUkVDVElPTl9VUCA9IDE7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5jb25zdCBGT0NVU19ESVJFQ1RJT05fRE9XTiA9IDI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEZJTFRFUl9NT0RFX1JFTU9URSA9IFwicmVtb3RlXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEZJTFRFUl9NT0RFX09QVElPTlMgPSBcIm9wdGlvbnNcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRklMVEVSX01PREVfRElTQUJMRUQgPSBcImRpc2FibGVkXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEZJTFRFUl9QT1NJVElPTl9QT1BQRVIgPSBcInBvcHBlclwiO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRklMVEVSX1BPU0lUSU9OX0lOTElORSA9IFwiaW5saW5lXCI7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2VsZWN0aW9uXG4gKiBAcHJvcGVydHkgeyp9IHZhbHVlXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbGFiZWxcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHNpbmNlIDEuMi4wXG4gKi9cblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgY3JlYXRlcyBhIHNlbGVjdCBlbGVtZW50IHdpdGggYSB2YXJpZXR5IG9mIG9wdGlvbnMuXG4gKiBJdCBzdXBwb3J0cyBmaWx0ZXJpbmcsIGxvY2FsIGFuZCByZW1vdGUsIG11bHRpcGxlIHNlbGVjdGlvbiBhbmQgaGFzIGFcbiAqIHRlbXBsYXRlIHN5c3RlbSBmb3IgZGlzcGxheWluZyB0aGUgb3B0aW9ucy5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL3NlbGVjdC5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnlcbiAqIGFzIHdlbGwgYXMgW3Bvb3BlcmpzXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pLlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgYDxtb25zdGVyLXNlbGVjdCAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zZWxlY3QnKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1zZWxlY3Q+PC9tb25zdGVyLXNlbGVjdD5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQge1NlbGVjdH0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL3NlbGVjdC5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXNlbGVjdCcpO1xuICogYGBgXG4gKlxuICogIyMgRXZlbnRzXG4gKlxuICogVGhlIGV2ZW50IGBtb25zdGVyLWNoYW5nZWAgaXMgc2VudCBhcyBzb29uIGFzIHNvbWVvbmUgaGFzIGNsaWNrZWQgb24gYSBpbnB1dCBjb250cm9sLlxuICogYG1vbnN0ZXItY2hhbmdlZGAgaXMgc2VudCBhcyBzb29uIGFzIHRoZSBjb250cm9sIGhhcyBwcm9jZXNzZWQgdGhpcyBpbnB1dC5cbiAqIFRoZSBgbW9uc3Rlci1jaGFuZ2VkYCBldmVudCBpcyBzZW50IHdoZW4gc2V0dGluZyBhIHNlbGVjdGlvbi4gSWYgdGhlIG9wdGlvbnMgaGF2ZSBiZWVuIHNldCwgdGhlIGBtb25zdGVyLW9wdGlvbnMtc2V0YCBldmVudCBpcyBzZW50LlxuICpcbiAqIFRoZSBDdXN0b21FdmVudCBoYXMgdGhlIHByb3BlcnR5IFtgZGV0YWlsYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0N1c3RvbUV2ZW50L2RldGFpbCkuXG4gKlxuICogYGBgXG4gKiBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ21vbnN0ZXItY2hhbmdlJywoZSk9PmNvbnNvbGUubG9nKGUuZGV0YWlsKSlcbiAqIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignbW9uc3Rlci1jaGFuZ2VkJywoZSk9PmNvbnNvbGUubG9nKGUuZGV0YWlsKSlcbiAqIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignbW9uc3Rlci1zZWxlY3RlZCcsKGUpPT5jb25zb2xlLmxvZyhlLmRldGFpbCkpXG4gKiBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ21vbnN0ZXItb3B0aW9ucy1zZXQnLChlKT0+Y29uc29sZS5sb2coZS5kZXRhaWwpKVxuICogYGBgXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi9leGFtcGxlL3NlbGVjdC5tanNcbiAqIEBzdGFydHVtbCBzZWxlY3QucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDdXN0b21Db250cm9sXG4gKiBDdXN0b21Db250cm9sIDx8LS0gU2VsZWN0XG4gKiBAZW5kdW1sXG4gKlxuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc3VtbWFyeSBBIGhpZ2hseSBjb25maWd1cmFibGUgc2VsZWN0IGNvbnRyb2xcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5ldmVudDptb25zdGVyLW9wdGlvbnMtc2V0XG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkZvcm0uZXZlbnQ6bW9uc3Rlci1zZWxlY3RlZFxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLmV2ZW50Om1vbnN0ZXItY2hhbmdlXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkZvcm0uZXZlbnQ6bW9uc3Rlci1jaGFuZ2VkXG4gKi9cbmNsYXNzIFNlbGVjdCBleHRlbmRzIEN1c3RvbUNvbnRyb2wge1xuXHQvKipcblx0ICogQGV4dGVuZHMgQ3VzdG9tQ29udHJvbFxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHRpbml0T3B0aW9uT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9jb21wb25lbnQtZm9ybS9zZWxlY3RAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBjdXJyZW50IHNlbGVjdGlvbiBvZiB0aGUgU2VsZWN0XG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci1zZWxlY3QnKTtcblx0ICogY29uc29sZS5sb2coZS52YWx1ZSlcblx0ICogLy8gXHUyMUE2IDFcblx0ICogLy8gXHUyMUE2IFsnMScsJzInXVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd8YXJyYXl9XG5cdCAqL1xuXHRnZXQgdmFsdWUoKSB7XG5cdFx0cmV0dXJuIGNvbnZlcnRTZWxlY3Rpb25Ub1ZhbHVlLmNhbGwodGhpcywgdGhpcy5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIikpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9hdHRhY2hJbnRlcm5hbHN9XG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IGZvcm1Bc3NvY2lhdGVkKCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBzZWxlY3Rpb25cblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXNlbGVjdCcpO1xuXHQgKiBlLnZhbHVlPTFcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfGFycmF5fSB2YWx1ZVxuXHQgKiBAc2luY2UgMS4yLjBcblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkgeztcblxuXHRcdGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRWYWx1ZVRvU2VsZWN0aW9uLmNhbGwodGhpcywgdmFsdWUpO1xuXHRcdHNldFNlbGVjdGlvblxuXHRcdFx0LmNhbGwodGhpcywgcmVzdWx0LnNlbGVjdGlvbilcblx0XHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBodG1sIHRhZyB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRvZ2dsZUV2ZW50VHlwZT1jbGljayx0b3VjaCBMaXN0IG9mIGV2ZW50IHR5cGVzIHRvIGJlIG9ic2VydmVkIGZvciBvcGVuaW5nIHRoZSBkcm9wZG93blxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGRlbGVnYXRlc0ZvY3VzPWZhbHNlIGxvcmVtIFtzZWUgbW96aWxsYS5vcmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TaGFkb3dSb290L2RlbGVnYXRlc0ZvY3VzKVxuXHQgKiBAcHJvcGVydHkge09iamVjdFtdfSBvcHRpb25zIFNlbGVjdGlvbiBvZiBrZXkgaWRlbnRpZmllciBwYWlycyBhdmFpbGFibGUgZm9yIHNlbGVjdGlvbiBhbmQgZGlzcGxheWVkIGluIHRoZSBkcm9wZG93bi5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG9wdGlvbnNbXS5sYWJlbCBMYWJlbFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gb3B0aW9uc1tdLnZhbHVlIFZhbHVlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBvcHRpb25zW10udmlzaWJpbGl0eSBoaWRkZW4gb3IgdmlzaWJsZVxuXHQgKiBAcHJvcGVydHkge0FycmF5fSBzZWxlY3Rpb24gU2VsZWN0ZWQgb3B0aW9uc1xuXHQgKiBAcHJvcGVydHkge0ludGVnZXJ9IHNob3dNYXhPcHRpb25zPTEwIE1heGltdW0gbnVtYmVyIG9mIHZpc2libGUgb3B0aW9ucyBiZWZvcmUgYSBzY3JvbGwgYmFyIHNob3VsZCBiZSBkaXNwbGF5ZWQuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlPXJhZGlvIE11bHRpcGxlIChjaGVja2JveCkgb3Igc2luZ2xlIHNlbGVjdGlvbiAocmFkaW8pXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lPShyYW5kb20gaWQpIE5hbWUgb2YgdGhlIGZvcm0gZmllbGRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHVybCBMb2FkIG9wdGlvbnMgZnJvbSBzZXJ2ZXIgcGVyIHVybFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2ggRmV0Y2ggW3NlZSBVc2luZyBGZXRjaCBtb3ppbGxhLm9yZ10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZldGNoX0FQSS9Vc2luZ19GZXRjaClcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLnJlZGlyZWN0PWVycm9yXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tZXRob2Q9R0VUXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tb2RlPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5jcmVkZW50aWFscz1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2guaGVhZGVycz17XCJhY2NlcHRcIjpcImFwcGxpY2F0aW9uL2pzb25cIn19XG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsYWJlbHNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5jYW5ub3QtYmUtbG9hZGVkIGNhbm5vdCBiZSBsb2FkZWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5uby1vcHRpb25zLWF2YWlsYWJsZSBubyBvcHRpb25zIGF2YWlsYWJsZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLnNlbGVjdC1hbi1vcHRpb24gc2VsZWN0IGFuIG9wdGlvblxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLm5vLW9wdGlvbiBubyBvcHRpb24gaW4gdGhlIGxpc3QsIG1heWJlIHlvdSBoYXZlIHRvIGNoYW5nZSB0aGUgZmlsdGVyXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZWF0dXJlcyBMaXN0IHdpdGggZmVhdHVyZXNcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy5jbGVhckFsbD10cnVlIERpc3BsYXkgb2YgYSBkZWxldGUgYnV0dG9uIHRvIGRlbGV0ZSB0aGUgZW50aXJlIHNlbGVjdGlvblxuXHQgKiBAcHJvcGVydHkge0Jvb2xlYW59IGZlYXR1cmVzLmNsZWFyPXRydWUgRGlzcGxheSBvZiBhIGRlbGV0ZSBrZXkgZm9yIGRlbGV0aW5nIHRoZSBzcGVjaWZpYyBzZWxlY3Rpb25cblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy5sb2FkT25PcGVuPWZhbHNlIExvYWQgb3B0aW9ucyB3aGVuIG9wZW5pbmcgdGhlIGRyb3Bkb3duXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZmlsdGVyLmRlZmF1bHRWYWx1ZT0qIERlZmF1bHQgZmlsdGVyIHZhbHVlLCBpZiB0aGUgZmlsdGVyIGlzIGVtcHR5XG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZmlsdGVyLm1vZGU9b3B0aW9ucyBGaWx0ZXIgbW9kZSwgdmFsdWVzOiBvcHRpb25zLCByZW1vdGUsIGRpc2FibGVkXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlTWFwcGluZyBNYXBwaW5nIG9mIHRoZSB0ZW1wbGF0ZSBwbGFjZWhvbGRlcnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlTWFwcGluZy5zZWxlY3RlZCBTZWxlY3RlZCBUZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcG9wcGVyIFtQb3BwZXJKUyBPcHRpb25zXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwb3BwZXIucGxhY2VtZW50PWJvdHRvbSBQb3BwZXJKUyBwbGFjZW1lbnRcblx0ICogQHByb3BlcnR5IHtPYmplY3RbXX0gbW9kaWZpZXJzPXtuYW1lOm9mZnNldH0gUG9wcGVySlMgcGxhY2VtZW50XG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBtYXBwaW5nXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtYXBwaW5nLnNlbGVjdG9yPSogUGF0aCB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcubGFiZWxUZW1wbGF0ZT1cIlwiIHRlbXBsYXRlIHdpdGggdGhlIGxhYmVsIHBsYWNlaG9sZGVycyBpbiB0aGUgZm9ybSAke25hbWV9LCB3aGVyZSBuYW1lIGlzIHRoZSBrZXkgKCoqKVxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gbWFwcGluZy52YWx1ZVRlbXBsYXRlPVwiXCIgdGVtcGxhdGUgd2l0aCB0aGUgdmFsdWUgcGxhY2Vob2xkZXJzIGluIHRoZSBmb3JtICR7bmFtZX0sIHdoZXJlIG5hbWUgaXMgdGhlIGtleVxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVGaWx0ZXJDYWxsYmFja3x1bmRlZmluZWR9IG1hcHBpbmcuZmlsdGVyIEZpbHRlcmluZyBvZiB2YWx1ZXMgdmlhIGEgZnVuY3Rpb25cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZvcm1hdHRlclxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmZvcm1hdHRlclNlbGVjdGlvbkNhbGxiYWNrfHVuZGVmaW5lZH0gZm9ybWF0dGVyLnNlbGVjdGlvbiBmb3JtYXQgc2VsZWN0aW9uIGxhYmVsXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdFx0e1xuXHRcdFx0XHR0b2dnbGVFdmVudFR5cGU6IFtcImNsaWNrXCIsIFwidG91Y2hcIl0sXG5cdFx0XHRcdGRlbGVnYXRlc0ZvY3VzOiBmYWxzZSxcblx0XHRcdFx0b3B0aW9uczogW10sXG5cdFx0XHRcdHNlbGVjdGlvbjogW10sXG5cdFx0XHRcdHNob3dNYXhPcHRpb25zOiAxMCxcblx0XHRcdFx0dHlwZTogXCJyYWRpb1wiLFxuXHRcdFx0XHRuYW1lOiBuZXcgSUQoXCJzXCIpLnRvU3RyaW5nKCksXG5cdFx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdFx0Y2xlYXJBbGw6IHRydWUsXG5cdFx0XHRcdFx0Y2xlYXI6IHRydWUsXG5cdFx0XHRcdFx0bG9hZE9uT3BlbjogZmFsc2UsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHVybDogbnVsbCxcblx0XHRcdFx0bGFiZWxzOiB7XG5cdFx0XHRcdFx0XCJjYW5ub3QtYmUtbG9hZGVkXCI6IFwiQ2Fubm90IGJlIGxvYWRlZFwiLFxuXHRcdFx0XHRcdFwibm8tb3B0aW9ucy1hdmFpbGFibGVcIjogXCJObyBvcHRpb25zIGF2YWlsYWJsZVwiLFxuXHRcdFx0XHRcdFwic2VsZWN0LWFuLW9wdGlvblwiOiBcIlNlbGVjdCBhbiBvcHRpb25cIixcblx0XHRcdFx0XHRcInN1bW1hcnktdGV4dFwiOiB7XG5cdFx0XHRcdFx0XHR6ZXJvOiBcIk5vIGVudHJpZXMgd2VyZSBzZWxlY3RlZFwiLFxuXHRcdFx0XHRcdFx0b25lOiAnPHNwYW4gY2xhc3M9XCJtb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbFwiPjE8L3NwYW4+IGVudHJ5IHdhcyBzZWxlY3RlZCcsXG5cdFx0XHRcdFx0XHRvdGhlcjpcblx0XHRcdFx0XHRcdFx0JzxzcGFuIGNsYXNzPVwibW9uc3Rlci1iYWRnZS1wcmltYXJ5LXBpbGxcIj4ke2NvdW50fTwvc3Bhbj4gZW50cmllcyB3ZXJlIHNlbGVjdGVkJyxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFwibm8tb3B0aW9uc1wiOlxuXHRcdFx0XHRcdFx0XCJVbmZvcnR1bmF0ZWx5LCB0aGVyZSBhcmUgbm8gb3B0aW9ucyBhdmFpbGFibGUgaW4gdGhlIGxpc3QuXCIsXG5cdFx0XHRcdFx0XCJuby1vcHRpb25zLWZvdW5kXCI6XG5cdFx0XHRcdFx0XHRcIk5vIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgbGlzdC4gUGxlYXNlIGNvbnNpZGVyIG1vZGlmeWluZyB0aGUgZmlsdGVyLlwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtZXNzYWdlczoge1xuXHRcdFx0XHRcdGNvbnRyb2w6IG51bGwsXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6IG51bGwsXG5cdFx0XHRcdFx0ZW1wdHlPcHRpb25zOiBudWxsLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRmZXRjaDoge1xuXHRcdFx0XHRcdHJlZGlyZWN0OiBcImVycm9yXCIsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdG1vZGU6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0XHRjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IHtcblx0XHRcdFx0XHRcdGFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0ZmlsdGVyOiB7XG5cdFx0XHRcdFx0ZGVmYXVsdFZhbHVlOiBcIipcIixcblx0XHRcdFx0XHRtb2RlOiBcImRpc2FibGVkXCIsXG5cdFx0XHRcdFx0cG9zaXRpb246IFwiaW5saW5lXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0XHRiYWRnZTogXCJtb25zdGVyLWJhZGdlLXByaW1hcnlcIixcblx0XHRcdFx0XHRzdGF0dXNPclJlbW92ZUJhZGdlOiBcImVtcHR5XCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1hcHBpbmc6IHtcblx0XHRcdFx0XHRzZWxlY3RvcjogXCIqXCIsXG5cdFx0XHRcdFx0bGFiZWxUZW1wbGF0ZTogXCJcIixcblx0XHRcdFx0XHR2YWx1ZVRlbXBsYXRlOiBcIlwiLFxuXHRcdFx0XHRcdGZpbHRlcjogbnVsbCxcblx0XHRcdFx0fSxcblx0XHRcdFx0Zm9ybWF0dGVyOiB7XG5cdFx0XHRcdFx0c2VsZWN0aW9uOiBidWlsZFNlbGVjdGlvbkxhYmVsLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR0ZW1wbGF0ZU1hcHBpbmc6IHtcblx0XHRcdFx0XHQvKiogd2l0aCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItc2VsZWN0ZWQtdGVtcGxhdGVgIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIHNlbGVjdGVkIG9wdGlvbnMgY2FuIGJlIGRlZmluZWQuICovXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6IGdldFNlbGVjdGlvblRlbXBsYXRlKCksXG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0cG9wcGVyOiB7XG5cdFx0XHRcdFx0cGxhY2VtZW50OiBcImJvdHRvbVwiLFxuXHRcdFx0XHRcdG1pZGRsZXdhcmU6IFtcImZsaXBcIiwgXCJvZmZzZXQ6MVwiXSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMuY2FsbCh0aGlzKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlNlbGVjdH1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbChzZWxmKTtcblx0XHRpbml0RXZlbnRoYW5kbGVyLmNhbGwoc2VsZik7XG5cblx0XHRpZiAoXG5cdFx0XHRzZWxmLmdldE9wdGlvbihcInVybFwiKSAhPT0gbnVsbCAmJlxuXHRcdFx0c2VsZi5nZXRPcHRpb24oXCJmZWF0dXJlcy5sb2FkT25PcGVuXCIpICE9PSB0cnVlXG5cdFx0KSB7XG5cdFx0XHRzZWxmXG5cdFx0XHRcdC5mZXRjaCgpXG5cdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRsZXQgcmVzdWx0O1xuXHRcdFx0XHRcdGlmIChzZWxmLmhhc0F0dHJpYnV0ZShcInZhbHVlXCIpKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPSBzZXRTZWxlY3Rpb24uY2FsbChzZWxmLCBzZWxmLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID0gc2V0U2VsZWN0aW9uLmNhbGwoc2VsZiwgW10pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJlc3VsdFxuXHRcdFx0XHRcdFx0LnRoZW4oKCkgPT4ge30pXG5cdFx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oc2VsZiwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihzZWxmLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuXHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGxldCBsYXN0VmFsdWUgPSBzZWxmLnZhbHVlO1xuXHRcdHNlbGZbaW50ZXJuYWxTeW1ib2xdLmF0dGFjaE9ic2VydmVyKFxuXHRcdFx0bmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0aWYgKGlzT2JqZWN0KHRoaXMpICYmIHRoaXMgaW5zdGFuY2VvZiBQcm94eU9ic2VydmVyKSB7XG5cdFx0XHRcdFx0Y29uc3QgbiA9IHRoaXMuZ2V0U3ViamVjdCgpPy5vcHRpb25zPy52YWx1ZTtcblxuXHRcdFx0XHRcdGlmIChsYXN0VmFsdWUgIT09IG4pIHtcblx0XHRcdFx0XHRcdGxhc3RWYWx1ZSA9IG47XG5cdFx0XHRcdFx0XHRzZXRTZWxlY3Rpb25cblx0XHRcdFx0XHRcdFx0LmNhbGwoc2VsZiwgbilcblx0XHRcdFx0XHRcdFx0LnRoZW4oKCkgPT4ge30pXG5cdFx0XHRcdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHNlbGYsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGAke2V9YCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0KTtcblxuXHRcdGFyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0LmNhbGwoc2VsZik7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmNsaWNrKCkgbWV0aG9kIHNpbXVsYXRlcyBhIGNsaWNrIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvY2xpY2t9XG5cdCAqL1xuXHRjbGljaygpIHs7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0b2dnbGUuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmZvY3VzKCkgbWV0aG9kIHNldHMgZm9jdXMgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9mb2N1c31cblx0ICovXG5cdGZvY3VzKG9wdGlvbnMpIHs7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0XHRnYXRoZXJTdGF0ZS5jYWxsKHRoaXMpO1xuXHRcdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0XHR9KVxuXHRcdFx0LnJ1bigpXG5cdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uYmx1cigpIG1ldGhvZCByZW1vdmVzIGZvY3VzIGZyb20gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKiBAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvYmx1clxuXHQgKi9cblx0Ymx1cigpIHs7XG5cdFx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdFx0Z2F0aGVyU3RhdGUuY2FsbCh0aGlzKTtcblx0XHRcdGJsdXJGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHR9KVxuXHRcdFx0LnJ1bigpXG5cdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIElmIG5vIHVybCBpcyBzcGVjaWZpZWQsIHRoZSBvcHRpb25zIGFyZSB0YWtlbiBmcm9tIHRoZSBDb21wb25lbnQgaXRzZWxmLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybCBVUkwgdG8gZmV0Y2ggdGhlIG9wdGlvbnNcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGZldGNoKHVybCkgeztcblxuXHRcdGlmICh1cmwgaW5zdGFuY2VvZiBVUkwpIHtcblx0XHRcdHVybCA9IHVybC50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdGlmICh1cmwgIT09IHVuZGVmaW5lZCAmJiB1cmwgIT09IG51bGwpIHtcblx0XHRcdHVybCA9IHZhbGlkYXRlU3RyaW5nKHVybCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZldGNoRGF0YS5jYWxsKHRoaXMsIHVybCkudGhlbigobWFwKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGlzT2JqZWN0KG1hcCkgfHxcblx0XHRcdFx0aXNBcnJheShtYXApIHwgKG1hcCBpbnN0YW5jZW9mIFNldCkgfHxcblx0XHRcdFx0bWFwIGluc3RhbmNlb2YgTWFwXG5cdFx0XHQpIHtcblx0XHRcdFx0dGhpcy5pbXBvcnRPcHRpb25zKG1hcCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cdFx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpOztcblxuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cblx0XHRwYXJzZVNsb3RzVG9PcHRpb25zLmNhbGwodGhpcyk7XG5cdFx0YXR0YWNoUmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0XHR1cGRhdGVQb3BwZXIuY2FsbCh0aGlzKTtcblxuXHRcdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRcdGdhdGhlclN0YXRlLmNhbGwodGhpcyk7XG5cdFx0XHRmb2N1c0ZpbHRlci5jYWxsKHRoaXMpO1xuXHRcdH0pLnJ1bigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXHRcdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTs7XG5cblx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblxuXHRcdGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEltcG9ydCBTZWxlY3QgT3B0aW9ucyBmcm9tIGRhdGFzZXRcblx0ICogTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdGhlIGNvbnRyb2wgZGVmYXVsdHMvb3B0aW9uc1xuXHQgKlxuXHQgKiBAc2luY2UgMC4xNi4wXG5cdCAqIEBwYXJhbSB7YXJyYXl8b2JqZWN0fE1hcHxTZXR9IGRhdGFcblx0ICogQHJldHVybiB7U2VsZWN0fVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWFwIGlzIG5vdCBpdGVyYWJsZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBsYWJlbCBjb25maWd1cmF0aW9uXG5cdCAqL1xuXHRpbXBvcnRPcHRpb25zKGRhdGEpIHs7XG5cblx0XHRjb25zdCBtYXBwaW5nT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZ1wiLCB7fSk7XG5cdFx0Y29uc3Qgc2VsZWN0b3IgPSBtYXBwaW5nT3B0aW9ucz8uW1wic2VsZWN0b3JcIl07XG5cdFx0Y29uc3QgbGFiZWxUZW1wbGF0ZSA9IG1hcHBpbmdPcHRpb25zPy5bXCJsYWJlbFRlbXBsYXRlXCJdO1xuXHRcdGNvbnN0IHZhbHVlVGVtcGxhdGUgPSBtYXBwaW5nT3B0aW9ucz8uW1widmFsdWVUZW1wbGF0ZVwiXTtcblx0XHRjb25zdCBmaWx0ZXIgPSBtYXBwaW5nT3B0aW9ucz8uW1wiZmlsdGVyXCJdO1xuXG5cdFx0bGV0IGZsYWcgPSBmYWxzZTtcblx0XHRpZiAobGFiZWxUZW1wbGF0ZSA9PT0gXCJcIikge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgXCJlbXB0eSBsYWJlbCB0ZW1wbGF0ZVwiKTtcblx0XHRcdGZsYWcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICh2YWx1ZVRlbXBsYXRlID09PSBcIlwiKSB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBcImVtcHR5IHZhbHVlIHRlbXBsYXRlXCIpO1xuXHRcdFx0ZmxhZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGZsYWcgPT09IHRydWUpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgbGFiZWwgY29uZmlndXJhdGlvblwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBtYXAgPSBidWlsZE1hcChkYXRhLCBzZWxlY3RvciwgbGFiZWxUZW1wbGF0ZSwgdmFsdWVUZW1wbGF0ZSwgZmlsdGVyKTtcblxuXHRcdGNvbnN0IG9wdGlvbnMgPSBbXTtcblx0XHRpZiAoIWlzSXRlcmFibGUobWFwKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWFwIGlzIG5vdCBpdGVyYWJsZVwiKTtcblx0XHR9XG5cblx0XHRjb25zdCB2aXNpYmlsaXR5ID0gXCJ2aXNpYmxlXCI7XG5cblx0XHRtYXAuZm9yRWFjaCgobGFiZWwsIHZhbHVlKSA9PiB7XG5cdFx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0bGFiZWwsXG5cdFx0XHRcdHZpc2liaWxpdHksXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHJ1bkFzT3B0aW9uTGVuZ3RoQ2hhbmdlZC5jYWxsKHRoaXMsIG1hcC5zaXplKTtcblx0XHR0aGlzLnNldE9wdGlvbihcIm9wdGlvbnNcIiwgb3B0aW9ucyk7XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLW9wdGlvbnMtc2V0XCIsIHtcblx0XHRcdG9wdGlvbnMsXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5TZWxlY3R9XG5cdCAqL1xuXHRjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbigpIHtcblx0XHRjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbi5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1zZWxlY3RcIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1NlbGVjdFN0eWxlU2hlZXRdO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBgYGBcbiAqIDxtb25zdGVyLXNlbGVjdCBkYXRhLW1vbnN0ZXItdXJsPVwiaHR0cHM6Ly9leGFtcGxlLmNvbS9cIj48L21vbnN0ZXItc2VsZWN0PlxuICogYGBgXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzKCkgeztcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdGNvbnN0IHRlbXBsYXRlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItc2VsZWN0ZWQtdGVtcGxhdGVcIik7XG5cdGlmIChpc1N0cmluZyh0ZW1wbGF0ZSkpIHtcblx0XHRpZiAoIW9wdGlvbnNbXCJ0ZW1wbGF0ZU1hcHBpbmdcIl0pIG9wdGlvbnNbXCJ0ZW1wbGF0ZU1hcHBpbmdcIl0gPSB7fTtcblxuXHRcdHN3aXRjaCAodGVtcGxhdGUpIHtcblx0XHRcdGNhc2UgXCJzdW1tYXJ5XCI6XG5cdFx0XHRjYXNlIFwiZGVmYXVsdFwiOlxuXHRcdFx0XHRvcHRpb25zW1widGVtcGxhdGVNYXBwaW5nXCJdW1wic2VsZWN0ZWRcIl0gPSBnZXRTdW1tYXJ5VGVtcGxhdGUoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwic2VsZWN0ZWRcIjpcblx0XHRcdFx0b3B0aW9uc1tcInRlbXBsYXRlTWFwcGluZ1wiXVtcInNlbGVjdGVkXCJdID0gZ2V0U2VsZWN0aW9uVGVtcGxhdGUoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdFx0XCJpbnZhbGlkIHRlbXBsYXRlLCB1c2Ugc3VtbWFyeSBvciBzZWxlY3RlZFwiLFxuXHRcdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvcHRpb25zO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFJlc2l6ZU9ic2VydmVyKCkgeztcblxuXHQvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcblx0XHRpZiAodGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSBpbnN0YW5jZW9mIERlYWRNYW5zU3dpdGNoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdLnRvdWNoKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSA9IG5ldyBEZWFkTWFuc1N3aXRjaCgyMDAsICgpID0+IHtcblx0XHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUodGhpcy5wYXJlbnRFbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCkgeztcblx0aWYgKHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdIGluc3RhbmNlb2YgUmVzaXplT2JzZXJ2ZXIpIHtcblx0XHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5kaXNjb25uZWN0KCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uVGVtcGxhdGUoKSB7XG5cdHJldHVybiBgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInNlbGVjdGlvblwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJzZWxlY3Rpb24gcGF0aDpzZWxlY3Rpb25cIiByb2xlPVwic2VhcmNoXCJcbiAgICAgICAgICAgID48aW5wdXQgdHlwZT1cInRleHRcIiByb2xlPVwic2VhcmNoYm94XCJcbiAgICAgICAgICAgICAgICAgICAgcGFydD1cImlubGluZS1maWx0ZXJcIiBuYW1lPVwiaW5saW5lLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgID48ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDptZXNzYWdlcy5jb250cm9sXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5gO1xufVxuXG5mdW5jdGlvbiBnZXRTdW1tYXJ5VGVtcGxhdGUoKSB7XG5cdHJldHVybiBgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInNlbGVjdGlvblwiIHJvbGU9XCJzZWFyY2hcIj5cbiAgICA8aW5wdXQgdHlwZT1cInRleHRcIiByb2xlPVwic2VhcmNoYm94XCJcbiAgICAgICAgICAgcGFydD1cImlubGluZS1maWx0ZXJcIiBuYW1lPVwiaW5saW5lLWZpbHRlclwiXG4gICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiZmlsdGVyXCJcbiAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICA+XG4gICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bWVzc2FnZXMuc2VsZWN0ZWRcIj48L2Rpdj4gICAgXG48L2Rpdj5gO1xufVxuXG4vKipcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBwYXJzZVNsb3RzVG9PcHRpb25zKCkgeztcblxuXHRsZXQgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwib3B0aW9uc1wiKTtcblx0aWYgKCFpc0l0ZXJhYmxlKG9wdGlvbnMpKSB7XG5cdFx0b3B0aW9ucyA9IFtdO1xuXHR9XG5cblx0bGV0IGNvdW50ZXIgPSAxO1xuXHRnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzLCBcImRpdlwiKS5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0bGV0IHZhbHVlID0gU3RyaW5nKGNvdW50ZXIrKyk7XG5cdFx0bGV0IHZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcblxuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci12YWx1ZVwiKSkge1xuXHRcdFx0dmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci12YWx1ZVwiKTtcblx0XHR9XG5cblx0XHRpZiAobm9kZS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIikge1xuXHRcdFx0dmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGFiZWwgPSBub2RlLm91dGVySFRNTDtcblxuXHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHR2YWx1ZSxcblx0XHRcdGxhYmVsLFxuXHRcdFx0dmlzaWJpbGl0eSxcblx0XHR9KTtcblx0fSk7XG5cblx0cnVuQXNPcHRpb25MZW5ndGhDaGFuZ2VkLmNhbGwodGhpcywgb3B0aW9ucy5sZW5ndGgpO1xuXHR0aGlzLnNldE9wdGlvbihcIm9wdGlvbnNcIiwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogd2FpdCB1bnRpbCBhbGwgb3B0aW9ucyBhcmUgZmluaXNoZWQgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7aW50fSB0YXJnZXRMZW5ndGhcbiAqL1xuZnVuY3Rpb24gcnVuQXNPcHRpb25MZW5ndGhDaGFuZ2VkKHRhcmdldExlbmd0aCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRpZiAoIXNlbGZbb3B0aW9uc0VsZW1lbnRTeW1ib2xdKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgY2FsbGJhY2sgPSBmdW5jdGlvbiAobXV0YXRpb25zTGlzdCwgb2JzZXJ2ZXIpIHtcblx0XHRjb25zdCBydW4gPSBmYWxzZTtcblx0XHRmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9uc0xpc3QpIHtcblx0XHRcdGlmIChtdXRhdGlvbi50eXBlID09PSBcImNoaWxkTGlzdFwiKSB7XG5cdFx0XHRcdGNvbnN0IHJ1biA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChydW4gPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IG5vZGVzID0gc2VsZltvcHRpb25zRWxlbWVudFN5bWJvbF0ucXVlcnlTZWxlY3RvckFsbChcblx0XHRcdFx0YGRpdlske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dYCxcblx0XHRcdCk7XG5cblx0XHRcdGlmIChub2Rlcy5sZW5ndGggPT09IHRhcmdldExlbmd0aCkge1xuXHRcdFx0XHRjaGVja09wdGlvblN0YXRlLmNhbGwoc2VsZik7XG5cdFx0XHRcdG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjayk7XG5cdG9ic2VydmVyLm9ic2VydmUoc2VsZltvcHRpb25zRWxlbWVudFN5bWJvbF0sIHtcblx0XHRhdHRyaWJ1dGVzOiBmYWxzZSxcblx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0c3VidHJlZTogdHJ1ZSxcblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkU2VsZWN0aW9uTGFiZWwodmFsdWUpIHs7XG5cdGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcIm9wdGlvbnNcIik7XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgbyA9IG9wdGlvbnM/LltpXTtcblx0XHRpZiAoaXNPYmplY3QobykgJiYgbz8uW1widmFsdWVcIl0gPT09IHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gbz8uW1wibGFiZWxcIl07XG5cdFx0fSBlbHNlIGlmIChpc1ByaW1pdGl2ZShvKSAmJiBvID09PSB2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIG87XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICogQHRocm93cyB7RXJyb3J9IG5vIHZhbHVlIGZvdW5kXG4gKi9cbmZ1bmN0aW9uIGdldFNlbGVjdGlvbkxhYmVsKHZhbHVlKSB7O1xuXG5cdGNvbnN0IGNhbGxiYWNrID0gdGhpcy5nZXRPcHRpb24oXCJmb3JtYXR0ZXIuc2VsZWN0aW9uXCIpO1xuXHRpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcblx0XHRjb25zdCBsYWJlbCA9IGNhbGxiYWNrLmNhbGwodGhpcywgdmFsdWUpO1xuXHRcdGlmIChpc1N0cmluZyhsYWJlbCkpIHJldHVybiBsYWJlbDtcblx0fVxuXG5cdGlmIChpc1N0cmluZyh2YWx1ZSkgfHwgaXNJbnRlZ2VyKHZhbHVlKSkge1xuXHRcdHJldHVybiBgJHt2YWx1ZX1gO1xuXHR9XG5cblx0cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLmNhbm5vdC1iZS1sb2FkZWRcIiwgdmFsdWUpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICovXG5mdW5jdGlvbiBoYW5kbGVUb2dnbGVLZXlib2FyZEV2ZW50cyhldmVudCkgeztcblxuXHRzd2l0Y2ggKGV2ZW50Py5bXCJjb2RlXCJdKSB7XG5cdFx0Y2FzZSBcIkVzY2FwZVwiOlxuXHRcdFx0dG9nZ2xlLmNhbGwodGhpcyk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlNwYWNlXCI6XG5cdFx0XHR0b2dnbGUuY2FsbCh0aGlzKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0fVxufVxuXG4vKipcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTUuMFxuICogQHByaXZhdGVcbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbk9ic2VydmVyKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRzZWxmLmF0dGFjaE9ic2VydmVyKFxuXHRcdG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c2VsZi51cGRhdGVJMThuKCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHt9XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0YXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXQuY2FsbChzZWxmKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdFx0XHRzZXRTdW1tYXJ5QW5kQ29udHJvbFRleHQuY2FsbChzZWxmKTtcblx0XHRcdH0pLnJ1bigpO1xuXHRcdH0pLFxuXHQpO1xufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0VHJhbnNsYXRpb24oKSB7O1xuXG5cdGNvbnN0IHRyYW5zbGF0aW9uID0gbmV3IFRyYW5zbGF0aW9ucyhcImVuXCIpLmFzc2lnblRyYW5zbGF0aW9ucyhcblx0XHR0aGlzLmdldE9wdGlvbihcImxhYmVsc1wiLCB7fSksXG5cdCk7XG5cblx0dHJ5IHtcblx0XHRjb25zdCBkb2MgPSBnZXREb2N1bWVudFRyYW5zbGF0aW9ucygpO1xuXHRcdHRyYW5zbGF0aW9uLmxvY2FsZSA9IGRvYy5sb2NhbGU7XG5cdH0gY2F0Y2ggKGUpIHt9XG5cblx0cmV0dXJuIHRyYW5zbGF0aW9uO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB7c3RyaW5nfCp9XG4gKi9cbmZ1bmN0aW9uIHNldFN1bW1hcnlBbmRDb250cm9sVGV4dCgpIHs7XG5cblx0Y29uc3QgdHJhbnNsYXRpb25zID0gZ2V0RGVmYXVsdFRyYW5zbGF0aW9uLmNhbGwodGhpcyk7XG5cdGNvbnN0IHNlbGVjdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcInNlbGVjdGlvblwiKTtcblxuXHRjb25zdCB0ZXh0ID0gdHJhbnNsYXRpb25zLmdldFBsdXJhbFJ1bGVUZXh0KFxuXHRcdFwic3VtbWFyeS10ZXh0XCIsXG5cdFx0c2VsZWN0aW9ucy5sZW5ndGgsXG5cdFx0XCJcIixcblx0KTtcblxuXHRjb25zdCBzZWxlY3RlZFRleHQgPSBuZXcgRm9ybWF0dGVyKHtcblx0XHRjb3VudDogU3RyaW5nKHNlbGVjdGlvbnMubGVuZ3RoKSxcblx0fSkuZm9ybWF0KHRleHQpO1xuXG5cdHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZXMuc2VsZWN0ZWRcIiwgc2VsZWN0ZWRUZXh0KTtcblxuXHRjb25zdCBjdXJyZW50ID0gdGhpcy5nZXRPcHRpb24oXCJtZXNzYWdlcy5jb250cm9sXCIpO1xuXHRjb25zdCBtc2cgPSB0aGlzLmdldE9wdGlvbihcImxhYmVscy5zZWxlY3QtYW4tb3B0aW9uXCIpO1xuXG5cdGlmIChcblx0XHRjdXJyZW50ID09PSBcIlwiIHx8XG5cdFx0Y3VycmVudCA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0Y3VycmVudCA9PT0gbXNnIHx8XG5cdFx0Y3VycmVudCA9PT0gbnVsbFxuXHQpIHtcblx0XHRpZiAoc2VsZWN0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHNlbGVjdGlvbnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLmNvbnRyb2xcIiwgbXNnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5jb250cm9sXCIsIFwiXCIpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtOb2RlTGlzdH1cbiAqL1xuZnVuY3Rpb24gZ2V0T3B0aW9uRWxlbWVudHMoKSB7XG5cdHJldHVybiB0aGlzW29wdGlvbnNFbGVtZW50U3ltYm9sXS5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09b3B0aW9uXWAsXG5cdCk7XG59XG5cbi8qKlxuICogV2l0aCB0aGUgaGVscCBvZiB0aGlzIGZpbHRlciBjYWxsYmFjaywgdmFsdWVzIGNhbiBiZSBmaWx0ZXJlZCBvdXQuIE9ubHkgaWYgdGhlIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUsIHRoZSB2YWx1ZSBpcyB0YWtlbiBmb3IgdGhlIG1hcC5cbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1+ZXhhbXBsZUZpbHRlckNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5ICBLZXlcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHNlZSBNb25zdGVyLkRhdGEuYnVpbGRNYXBcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1+Zm9ybWF0dGVyU2VsZWN0aW9uQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzZWUgTW9uc3Rlci5EYXRhLmJ1aWxkTWFwXG4gKi9cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbigpIHs7XG5cblx0Y29uc3Qgb3B0aW9ucyA9IGdldE9wdGlvbkVsZW1lbnRzLmNhbGwodGhpcyk7XG5cdGNvbnN0IGNvbnRhaW5lciA9IHRoaXNbb3B0aW9uc0VsZW1lbnRTeW1ib2xdO1xuXHRpZiAoIShjb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBvcHRpb25zIGluc3RhbmNlb2YgTm9kZUxpc3QpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0bGV0IHZpc2libGUgPSAwO1xuXHRsZXQgb3B0aW9uSGVpZ2h0ID0gMDtcblx0Y29uc3QgbWF4ID0gdGhpcy5nZXRPcHRpb24oXCJzaG93TWF4T3B0aW9uc1wiLCAxMCk7XG5cblx0bGV0IHNjcm9sbEZsYWcgPSBmYWxzZTtcblx0Zm9yIChjb25zdCBbLCBvcHRpb25dIG9mIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMpKSB7XG5cdFx0Y29uc3QgY29tcHV0ZWRTdHlsZSA9IGdldEdsb2JhbCgpLmdldENvbXB1dGVkU3R5bGUob3B0aW9uKTtcblx0XHRpZiAoY29tcHV0ZWRTdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIikgY29udGludWU7XG5cblx0XHRsZXQgaCA9IG9wdGlvbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG5cdFx0aCArPSBwYXJzZUludChjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJtYXJnaW4tdG9wXCIpLCAxMCk7XG5cdFx0aCArPSBwYXJzZUludChjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJtYXJnaW4tYm90dG9tXCIpLCAxMCk7XG5cdFx0b3B0aW9uSGVpZ2h0ID0gTWF0aC5tYXgob3B0aW9uSGVpZ2h0LCBoKTtcblxuXHRcdHZpc2libGUrKztcblx0XHRpZiAodmlzaWJsZSA+IG1heCkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHZpc2libGUgPiBtYXgpIHtcblx0XHR2aXNpYmxlID0gbWF4O1xuXHRcdHNjcm9sbEZsYWcgPSB0cnVlO1xuXHR9XG5cblx0aWYgKHZpc2libGUgPT09IDApIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5zZXRPcHRpb24oXG5cdFx0XHRcdFwibWVzc2FnZXMuZW1wdHlPcHRpb25zXCIsXG5cdFx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLm5vLW9wdGlvbnMtYXZhaWxhYmxlXCIpLFxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXRPcHRpb24oXG5cdFx0XHRcdFwibWVzc2FnZXMuZW1wdHlPcHRpb25zXCIsXG5cdFx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLm5vLW9wdGlvbnMtZm91bmRcIiksXG5cdFx0XHQpO1xuXHRcdH1cblx0XHR0aGlzW25vT3B0aW9uc0F2YWlsYWJsZUVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJkLW5vbmVcIik7XG5cdH0gZWxzZSB7XG5cdFx0dGhpc1tub09wdGlvbnNBdmFpbGFibGVFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiZC1ub25lXCIpO1xuXHR9XG5cblx0Y29uc3Qgc3R5bGVzID0gZ2V0R2xvYmFsKCkuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzW29wdGlvbnNFbGVtZW50U3ltYm9sXSk7XG5cdGxldCBwYWRkaW5nID0gcGFyc2VJbnQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nLXRvcFwiKSwgMTApO1xuXHRwYWRkaW5nICs9IHBhcnNlSW50KHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGluZy1ib3R0b21cIiksIDEwKTtcblxuXHRsZXQgbWFyZ2luID0gcGFyc2VJbnQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoXCJtYXJnaW4tdG9wXCIpLCAxMCk7XG5cdG1hcmdpbiArPSBwYXJzZUludChzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1hcmdpbi1ib3R0b21cIiksIDEwKTtcblxuXHRjb25zdCBjb250YWluZXJIZWlnaHQgPSBvcHRpb25IZWlnaHQgKiB2aXNpYmxlICsgcGFkZGluZyArIG1hcmdpbjtcblx0Y29udGFpbmVyLnN0eWxlLmhlaWdodCA9IGAke2NvbnRhaW5lckhlaWdodH1weGA7XG5cblx0aWYgKHNjcm9sbEZsYWcgPT09IHRydWUpIHtcblx0XHRjb250YWluZXIuc3R5bGUub3ZlcmZsb3dZID0gXCJzY3JvbGxcIjtcblx0fSBlbHNlIHtcblx0XHRjb250YWluZXIuc3R5bGUub3ZlcmZsb3dZID0gXCJhdXRvXCI7XG5cdH1cblxuXHRjb25zdCBkb21SZWN0ID0gdGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS53aWR0aCA9IGAke2RvbVJlY3Qud2lkdGh9cHhgO1xuXHRjb250YWluZXIuc3R5bGUub3ZlcmZsb3dYID0gXCJhdXRvXCI7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJlY3Rpb25cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGFjdGl2YXRlQ3VycmVudE9wdGlvbihkaXJlY3Rpb24pIHs7XG5cblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0bGV0IGZvY3VzZWQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgWyR7QVRUUklCVVRFX1BSRUZJWH1mb2N1c2VkXWApO1xuXG5cdGlmIChcblx0XHQhKGZvY3VzZWQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgfHxcblx0XHRmb2N1c2VkLm1hdGNoZXMoXCJbZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9aGlkZGVuXVwiKVxuXHQpIHtcblx0XHRmb3IgKGNvbnN0IFssIGVdIG9mIE9iamVjdC5lbnRyaWVzKFxuXHRcdFx0dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoYFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dYCksXG5cdFx0KSkge1xuXHRcdFx0aWYgKGUubWF0Y2hlcyhcIltkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eT12aXNpYmxlXVwiKSkge1xuXHRcdFx0XHRmb2N1c2VkID0gZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmIChkaXJlY3Rpb24gPT09IEZPQ1VTX0RJUkVDVElPTl9ET1dOKSB7XG5cdFx0XHR3aGlsZSAoZm9jdXNlZC5uZXh0U2libGluZykge1xuXHRcdFx0XHRmb2N1c2VkID0gZm9jdXNlZC5uZXh0U2libGluZztcblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0Zm9jdXNlZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG5cdFx0XHRcdFx0Zm9jdXNlZC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpICYmXG5cdFx0XHRcdFx0Zm9jdXNlZC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpID09PSBcIm9wdGlvblwiICYmXG5cdFx0XHRcdFx0Zm9jdXNlZC5tYXRjaGVzKFwiW2RhdGEtbW9uc3Rlci12aXNpYmlsaXR5PXZpc2libGVdXCIpICYmXG5cdFx0XHRcdFx0Zm9jdXNlZC5tYXRjaGVzKFwiOm5vdChbZGF0YS1tb25zdGVyLWZpbHRlcmVkPXRydWVdKVwiKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR3aGlsZSAoZm9jdXNlZC5wcmV2aW91c1NpYmxpbmcpIHtcblx0XHRcdFx0Zm9jdXNlZCA9IGZvY3VzZWQucHJldmlvdXNTaWJsaW5nO1xuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRmb2N1c2VkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcblx0XHRcdFx0XHRmb2N1c2VkLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgJiZcblx0XHRcdFx0XHRmb2N1c2VkLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgPT09IFwib3B0aW9uXCIgJiZcblx0XHRcdFx0XHRmb2N1c2VkLm1hdGNoZXMoXCJbZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9dmlzaWJsZV1cIikgJiZcblx0XHRcdFx0XHRmb2N1c2VkLm1hdGNoZXMoXCI6bm90KFtkYXRhLW1vbnN0ZXItZmlsdGVyZWQ9dHJ1ZV0pXCIpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdGlmIChmb2N1c2VkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdHRoaXMuc2hhZG93Um9vdFxuXHRcdFx0XHQucXVlcnlTZWxlY3RvckFsbChgWyR7QVRUUklCVVRFX1BSRUZJWH1mb2N1c2VkXWApXG5cdFx0XHRcdC5mb3JFYWNoKChlKSA9PiB7XG5cdFx0XHRcdFx0ZS5yZW1vdmVBdHRyaWJ1dGUoYCR7QVRUUklCVVRFX1BSRUZJWH1mb2N1c2VkYCk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRmb2N1c2VkLmZvY3VzKCk7XG5cdFx0XHRmb2N1c2VkLnNldEF0dHJpYnV0ZShgJHtBVFRSSUJVVEVfUFJFRklYfWZvY3VzZWRgLCB0cnVlKTtcblx0XHR9XG5cdH0pLnJ1bigpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGZpbHRlck9wdGlvbnMoKSB7O1xuXG5cdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRsZXQgZmlsdGVyVmFsdWU7XG5cblx0XHRzd2l0Y2ggKHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLnBvc2l0aW9uXCIpKSB7XG5cdFx0XHRjYXNlIEZJTFRFUl9QT1NJVElPTl9JTkxJTkU6XG5cdFx0XHRcdGlmICh0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0XHRmaWx0ZXJWYWx1ZSA9IHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0udmFsdWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgRklMVEVSX1BPU0lUSU9OX1BPUFBFUjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGlmICh0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuXHRcdFx0XHRcdGZpbHRlclZhbHVlID0gdGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXS52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcIm9wdGlvbnNcIik7XG5cdFx0Zm9yIChjb25zdCBbaSwgb3B0aW9uXSBvZiBPYmplY3QuZW50cmllcyhvcHRpb25zKSkge1xuXHRcdFx0aWYgKG9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZmlsdGVyVmFsdWUpID09PSAtMSkge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihgb3B0aW9ucy4ke2l9LmZpbHRlcmVkYCwgXCJ0cnVlXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYG9wdGlvbnMuJHtpfS5maWx0ZXJlZGAsIHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KVxuXHRcdC5ydW4oKVxuXHRcdC50aGVuKCgpID0+IHtcblx0XHRcdG5ldyBQcm9jZXNzaW5nKDEwLCAoKSA9PiB7XG5cdFx0XHRcdGNhbGNBbmRTZXRPcHRpb25zRGltZW5zaW9uLmNhbGwodGhpcyk7XG5cdFx0XHRcdGZvY3VzRmlsdGVyLmNhbGwodGhpcyk7XG5cdFx0XHR9KS5ydW4oKTtcblx0XHR9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAqL1xuZnVuY3Rpb24gaGFuZGxlRmlsdGVyS2V5Ym9hcmRFdmVudHMoZXZlbnQpIHs7XG5cblx0Y29uc3Qgc2hpZnRLZXkgPSBldmVudD8uW1wic2hpZnRLZXlcIl07XG5cblx0c3dpdGNoIChldmVudD8uW1wiY29kZVwiXSkge1xuXHRcdGNhc2UgXCJUYWJcIjpcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9ET1dOKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRXNjYXBlXCI6XG5cdFx0XHR0b2dnbGUuY2FsbCh0aGlzKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVGFiXCIgJiYgc2hpZnRLZXkgPT09IHRydWU6XG5cdFx0Y2FzZSBcIkFycm93VXBcIjpcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9VUCk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlRhYlwiICYmICFzaGlmdEtleTpcblx0XHRjYXNlIFwiQXJyb3dEb3duXCI6XG5cdFx0XHRhY3RpdmF0ZUN1cnJlbnRPcHRpb24uY2FsbCh0aGlzLCBGT0NVU19ESVJFQ1RJT05fRE9XTik7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZpbHRlci5tb2RlXCIpICE9PSBGSUxURVJfTU9ERV9SRU1PVEUpIHtcblx0XHRcdFx0ZmlsdGVyT3B0aW9ucy5jYWxsKHRoaXMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZmlsdGVyRnJvbVJlbW90ZS5jYWxsKHRoaXMpLmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBmaWx0ZXJGcm9tUmVtb3RlKCkgeztcblxuXHRpZiAoISh0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3Qgb3B0aW9uVXJsID0gdGhpcy5nZXRPcHRpb24oXCJ1cmxcIik7XG5cdGlmICghb3B0aW9uVXJsKSB7XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHR0aGlzLFxuXHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFwiTWlzc2luZyBVUkwgZm9yIFJlbW90ZSBGaWx0ZXIuXCIsXG5cdFx0KTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRyZXR1cm4gbmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdGNvbnN0IGZpbHRlclZhbHVlID0gZW5jb2RlVVJJKFxuXHRcdFx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS52YWx1ZS50b0xvd2VyQ2FzZSgpLFxuXHRcdCk7XG5cdFx0bGV0IHVybCA9IG9wdGlvblVybDtcblx0XHRpZiAoZmlsdGVyVmFsdWUubGVuZ3RoID4gMCkge1xuXHRcdFx0dXJsID0gbmV3IEZvcm1hdHRlcih7IGZpbHRlcjogZmlsdGVyVmFsdWUgfSkuZm9ybWF0KG9wdGlvblVybCk7XG5cdFx0fVxuXG5cdFx0dGhpc1xuXHRcdFx0LmZldGNoKHVybClcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0Y2hlY2tPcHRpb25TdGF0ZS5jYWxsKHRoaXMpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0fSk7XG5cdH0pLnJ1bigpO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaGFuZGxlT3B0aW9uS2V5Ym9hcmRFdmVudHMoZXZlbnQpIHs7XG5cblx0Y29uc3Qgc2hpZnRLZXkgPSBldmVudD8uW1wic2hpZnRLZXlcIl07XG5cblx0c3dpdGNoIChldmVudD8uW1wiY29kZVwiXSkge1xuXHRcdGNhc2UgXCJFc2NhcGVcIjpcblx0XHRcdHRvZ2dsZS5jYWxsKHRoaXMpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJFbnRlclwiOlxuXHRcdGNhc2UgXCJTcGFjZVwiOlxuXHRcdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdFx0Y29uc3QgZWxlbWVudCA9IHBhdGg/LlswXTtcblxuXHRcdFx0ZmlyZUV2ZW50KGVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKSwgXCJjbGlja1wiKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJUYWJcIiAmJiBzaGlmdEtleSA9PT0gdHJ1ZTpcblx0XHRjYXNlIFwiQXJyb3dVcFwiOlxuXHRcdFx0YWN0aXZhdGVDdXJyZW50T3B0aW9uLmNhbGwodGhpcywgRk9DVVNfRElSRUNUSU9OX1VQKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJUYWJcIiAmJiAhc2hpZnRLZXk6XG5cdFx0Y2FzZSBcIkFycm93TGVmdFwiOlxuXHRcdGNhc2UgXCJBcnJvd1JpZ2h0XCI6XG5cdFx0XHQvLyBoYW5kbGVkIGJ5IHRyZWUgc2VsZWN0XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQXJyb3dEb3duXCI6XG5cdFx0XHRhY3RpdmF0ZUN1cnJlbnRPcHRpb24uY2FsbCh0aGlzLCBGT0NVU19ESVJFQ1RJT05fRE9XTik7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGNvbnN0IHAgPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblx0XHRcdGlmIChwPy5bMF0gaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGZvY3VzRmlsdGVyLmNhbGwodGhpcyk7XG5cdFx0XHRicmVhaztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRGaWx0ZXJNb2RlKCkgeztcblxuXHRzd2l0Y2ggKHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLm1vZGVcIikpIHtcblx0XHRjYXNlIEZJTFRFUl9NT0RFX09QVElPTlM6XG5cdFx0XHRyZXR1cm4gRklMVEVSX01PREVfT1BUSU9OUztcblx0XHRjYXNlIEZJTFRFUl9NT0RFX1JFTU9URTpcblx0XHRcdHJldHVybiBGSUxURVJfTU9ERV9SRU1PVEU7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBGSUxURVJfTU9ERV9ESVNBQkxFRDtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGJsdXJGaWx0ZXIoKSB7O1xuXG5cdGlmICghKHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoZ2V0RmlsdGVyTW9kZS5jYWxsKHRoaXMpID09PSBGSUxURVJfTU9ERV9ESVNBQkxFRCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblx0dGhpc1twb3BwZXJGaWx0ZXJDb250YWluZXJFbGVtZW50U3ltYm9sXS5ibHVyKCk7XG5cblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuXHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmJsdXIoKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZvY3VzT3B0aW9uc1xuICovXG5mdW5jdGlvbiBmb2N1c1BvcHBlckZpbHRlcihmb2N1c09wdGlvbnMpIHs7XG5cblx0dGhpc1twb3BwZXJGaWx0ZXJDb250YWluZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiZC1ub25lXCIpO1xuXHR0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG5cdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiZC1ub25lXCIpO1xuXG5cdGlmICghKHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdHRoaXMsXG5cdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XCJNaXNzaW5nIFBvcHBlciBGaWx0ZXIgRWxlbWVudC5cIixcblx0XHQpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIHZpc2liaWxpdHkgaXMgc2V0IHRvIHZpc2libGUsIGJlY2F1c2UgZm9jdXMoKSBkb2VzIG5vdCB3b3JrIG9uIGludmlzaWJsZSBlbGVtZW50c1xuXHQvLyBhbmQgdGhlIGNsYXNzIGRlZmluaXRpb24gaXMgYXNzaWduZWQgbGF0ZXIgaW4gdGhlIHByb2Nlc3Npbmdcblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0aWYgKGZvY3VzT3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IGZvY3VzT3B0aW9ucyA9PT0gbnVsbCkge1xuXHRcdFx0dGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXS5mb2N1cygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdLmZvY3VzKGZvY3VzT3B0aW9ucyk7XG5cdFx0fVxuXHR9LCAxMDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZm9jdXNPcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGZvY3VzSW5saW5lRmlsdGVyKGZvY3VzT3B0aW9ucykgeztcblxuXHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuXHRpZiAoXG5cdFx0KCFpc0FycmF5KG9wdGlvbnMpIHx8IG9wdGlvbnMubGVuZ3RoID09PSAwKSAmJlxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLm1vZGVcIikgIT09IEZJTFRFUl9NT0RFX1JFTU9URVxuXHQpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW3BvcHBlckZpbHRlckNvbnRhaW5lckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJkLW5vbmVcIik7XG5cdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiZC1ub25lXCIpO1xuXG5cdC8vIHZpc2liaWxpdHkgaXMgc2V0IHRvIHZpc2libGUsIGJlY2F1c2UgZm9jdXMoKSBkb2VzIG5vdCB3b3JrIG9uIGludmlzaWJsZSBlbGVtZW50c1xuXHQvLyBhbmQgdGhlIGNsYXNzIGRlZmluaXRpb24gaXMgYXNzaWduZWQgbGF0ZXIgaW4gdGhlIHByb2Nlc3Npbmdcblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0aWYgKGZvY3VzT3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IGZvY3VzT3B0aW9ucyA9PT0gbnVsbCkge1xuXHRcdFx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5mb2N1cygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmZvY3VzKGZvY3VzT3B0aW9ucyk7XG5cdFx0fVxuXHR9LCAxMDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGZvY3VzRmlsdGVyKGZvY3VzT3B0aW9ucykgeztcblxuXHRpZiAoZ2V0RmlsdGVyTW9kZS5jYWxsKHRoaXMpID09PSBGSUxURVJfTU9ERV9ESVNBQkxFRCkge1xuXHRcdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImQtbm9uZVwiKTtcblx0XHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJkLW5vbmVcIik7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLnBvc2l0aW9uXCIpID09PSBGSUxURVJfUE9TSVRJT05fSU5MSU5FKSB7XG5cdFx0cmV0dXJuIGZvY3VzSW5saW5lRmlsdGVyLmNhbGwodGhpcywgZm9jdXNPcHRpb25zKTtcblx0fVxuXG5cdHJldHVybiBmb2N1c1BvcHBlckZpbHRlci5jYWxsKHRoaXMsIGZvY3VzT3B0aW9ucyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2FycmF5fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKi9cbmZ1bmN0aW9uIGdhdGhlclN0YXRlKCkgeztcblxuXHRjb25zdCB0eXBlID0gdGhpcy5nZXRPcHRpb24oXCJ0eXBlXCIpO1xuXHRpZiAoW1wicmFkaW9cIiwgXCJjaGVja2JveFwiXS5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIHR5cGVcIik7XG5cdH1cblxuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRjb25zdCBzZWxlY3Rpb24gPSBbXTtcblx0Y29uc3QgZWxlbWVudHMgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChcblx0XHRgaW5wdXRbdHlwZT0ke3R5cGV9XTpjaGVja2VkYCxcblx0KTtcblx0Zm9yIChjb25zdCBlIG9mIGVsZW1lbnRzKSB7XG5cdFx0c2VsZWN0aW9uLnB1c2goe1xuXHRcdFx0bGFiZWw6IGdldFNlbGVjdGlvbkxhYmVsLmNhbGwodGhpcywgZS52YWx1ZSksXG5cdFx0XHR2YWx1ZTogZS52YWx1ZSxcblx0XHR9KTtcblx0fVxuXG5cdHNldFNlbGVjdGlvblxuXHRcdC5jYWxsKHRoaXMsIHNlbGVjdGlvbilcblx0XHQudGhlbigoKSA9PiB7fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGAke2V9YCk7XG5cdFx0fSk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICovXG5mdW5jdGlvbiBjbGVhclNlbGVjdGlvbigpIHs7XG5cblx0Y29uc3QgdHlwZSA9IHRoaXMuZ2V0T3B0aW9uKFwidHlwZVwiKTtcblx0aWYgKFtcInJhZGlvXCIsIFwiY2hlY2tib3hcIl0uaW5kZXhPZih0eXBlKSA9PT0gLTEpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCB0eXBlXCIpO1xuXHR9XG5cblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0c2V0U2VsZWN0aW9uXG5cdFx0LmNhbGwodGhpcywgW10pXG5cdFx0LnRoZW4oKCkgPT4ge30pXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGFyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0KCkgeztcblxuXHQvLyBwcmV2ZW50IG11bHRpcGxlIGNhbGxzXG5cdGlmICh0aGlzW2FyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0U3ltYm9sXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhpc1thcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbF0gPSAwO1xuXHR9XG5cblx0aWYgKHRoaXNbYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXRTeW1ib2xdID4gMCkge1xuXHRcdHRoaXNbYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXRTeW1ib2xdLS07XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHR0aGlzW2FyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0U3ltYm9sXSsrO1xuXG5cdGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcIm9wdGlvbnNcIik7XG5cblx0aWYgKFxuXHRcdG9wdGlvbnMgPT09IHVuZGVmaW5lZCB8fFxuXHRcdG9wdGlvbnMgPT09IG51bGwgfHxcblx0XHQoaXNBcnJheShvcHRpb25zKSAmJiBvcHRpb25zLmxlbmd0aCA9PT0gMClcblx0KSB7XG5cdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImVtcHR5XCIpO1xuXG5cdFx0aGlkZS5jYWxsKHRoaXMpO1xuXG5cdFx0dGhpcy5zZXRPcHRpb24oXG5cdFx0XHRcIm1lc3NhZ2VzLmNvbnRyb2xcIixcblx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLm5vLW9wdGlvbnMtYXZhaWxhYmxlXCIpLFxuXHRcdCk7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5zdW1tYXJ5XCIsIFwiXCIpO1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwic2VsZWN0aW9uXCIsIFtdKTtcblx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBub09wdGlvbnNBdmFpbGFibGVNZXNzYWdlKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRjb25zdCBzZWxlY3Rpb25zID0gdGhpcy5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIik7XG5cdGlmIChcblx0XHRzZWxlY3Rpb25zID09PSB1bmRlZmluZWQgfHxcblx0XHRzZWxlY3Rpb25zID09PSBudWxsIHx8XG5cdFx0c2VsZWN0aW9ucy5sZW5ndGggPT09IDBcblx0KSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXG5cdFx0XHRcIm1lc3NhZ2VzLmNvbnRyb2xcIixcblx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLnNlbGVjdC1hbi1vcHRpb25cIiksXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLmNvbnRyb2xcIiwgXCJcIik7XG5cdH1cblxuXHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLnN1bW1hcnlcIiwgc2V0U3VtbWFyeUFuZENvbnRyb2xUZXh0LmNhbGwodGhpcykpO1xuXG5cdGxldCB1cGRhdGVkID0gZmFsc2U7XG5cdGxldCB2YWx1ZUNvdW50ZXIgPSAxO1xuXHRmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG5cdFx0aWYgKG9wdGlvbj8udmlzaWJpbGl0eSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb24udmlzaWJpbGl0eSA9IFwidmlzaWJsZVwiO1xuXHRcdFx0dXBkYXRlZCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKG9wdGlvbj8udmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvcHRpb24/LmxhYmVsID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG9wdGlvbi52YWx1ZSA9IGAke3ZhbHVlQ291bnRlcisrfWA7XG5cdFx0XHRvcHRpb24ubGFiZWwgPSBvcHRpb24udmFsdWU7XG5cdFx0XHR1cGRhdGVkID0gdHJ1ZTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb24/LnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG9wdGlvbi52YWx1ZSA9IG9wdGlvbi5sYWJlbDtcblx0XHRcdHVwZGF0ZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb24/LmxhYmVsID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG9wdGlvbi5sYWJlbCA9IG9wdGlvbi52YWx1ZTtcblx0XHRcdHVwZGF0ZWQgPSB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdGlmICh1cGRhdGVkKSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJvcHRpb25zXCIsIG9wdGlvbnMpO1xuXHR9XG5cblx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcInN0YXR1c1wiKTtcblxuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBub09wdGlvbnNBdmFpbGFibGVNZXNzYWdlKTtcblx0cmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT3B0aW9uU3RhdGUoKSB7O1xuXG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdGNvbnN0IGVsZW1lbnRzID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dIGlucHV0YCxcblx0KTtcblxuXHRsZXQgc2VsZWN0aW9uID0gdGhpcy5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIik7XG5cdGlmICghaXNBcnJheShzZWxlY3Rpb24pKSB7XG5cdFx0c2VsZWN0aW9uID0gW107XG5cdH1cblxuXHRjb25zdCBjaGVja2VkVmFsdWVzID0gc2VsZWN0aW9uLm1hcCgoYSkgPT4ge1xuXHRcdHJldHVybiBhLnZhbHVlO1xuXHR9KTtcblxuXHRmb3IgKGNvbnN0IGUgb2YgZWxlbWVudHMpIHtcblx0XHRpZiAoY2hlY2tlZFZhbHVlcy5pbmRleE9mKGUudmFsdWUpICE9PSAtMSkge1xuXHRcdFx0aWYgKGUuY2hlY2tlZCAhPT0gdHJ1ZSkgZS5jaGVja2VkID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGUuY2hlY2tlZCAhPT0gZmFsc2UpIGUuY2hlY2tlZCA9IGZhbHNlO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRWYWx1ZVRvU2VsZWN0aW9uKHZhbHVlKSB7O1xuXHRjb25zdCBzZWxlY3Rpb24gPSBbXTtcblxuXHRpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG5cdFx0dmFsdWUgPSB2YWx1ZVxuXHRcdFx0LnNwbGl0KFwiLFwiKVxuXHRcdFx0Lm1hcCgoYSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYS50cmltKCk7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbHRlcigoYSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYSAhPT0gXCJcIjtcblx0XHRcdH0pO1xuXHR9XG5cblx0aWYgKGlzU3RyaW5nKHZhbHVlKSB8fCBpc0ludGVnZXIodmFsdWUpKSB7XG5cdFx0c2VsZWN0aW9uLnB1c2goe1xuXHRcdFx0bGFiZWw6IGdldFNlbGVjdGlvbkxhYmVsLmNhbGwodGhpcywgdmFsdWUpLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG5cdFx0Zm9yIChjb25zdCB2IG9mIHZhbHVlKSB7XG5cdFx0XHRzZWxlY3Rpb24ucHVzaCh7XG5cdFx0XHRcdGxhYmVsOiBnZXRTZWxlY3Rpb25MYWJlbC5jYWxsKHRoaXMsIHYpLFxuXHRcdFx0XHR2YWx1ZTogdixcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHZhbHVlID0gdmFsdWUuam9pbihcIixcIik7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgdHlwZVwiKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0c2VsZWN0aW9uOiBzZWxlY3Rpb24sXG5cdFx0dmFsdWU6IHZhbHVlLFxuXHR9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2FycmF5fSBzZWxlY3Rpb25cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29udmVydFNlbGVjdGlvblRvVmFsdWUoc2VsZWN0aW9uKSB7O1xuXG5cdGNvbnN0IHZhbHVlID0gW107XG5cblx0aWYgKGlzQXJyYXkoc2VsZWN0aW9uKSkge1xuXHRcdGZvciAoY29uc3Qgb2JqIG9mIHNlbGVjdGlvbikge1xuXHRcdFx0Y29uc3QgdiA9IG9iaj8uW1widmFsdWVcIl07XG5cdFx0XHRpZiAodiAhPT0gdW5kZWZpbmVkKSB2YWx1ZS5wdXNoKHYpO1xuXHRcdH1cblx0fVxuXG5cdGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gdmFsdWUucG9wKCk7XG5cdH1cblxuXHRyZXR1cm4gdmFsdWUuam9pbihcIixcIik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7YXJyYXl9IHNlbGVjdGlvblxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIHNldFNlbGVjdGlvbihzZWxlY3Rpb24pIHs7XG5cblx0aWYgKGlzU3RyaW5nKHNlbGVjdGlvbikpIHtcblx0XHRjb25zdCByZXN1bHQgPSBjb252ZXJ0VmFsdWVUb1NlbGVjdGlvbi5jYWxsKHRoaXMsIHNlbGVjdGlvbik7XG5cdFx0c2VsZWN0aW9uID0gcmVzdWx0Py5zZWxlY3Rpb247XG5cdH0gZWxzZSBpZiAoc2VsZWN0aW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRzZWxlY3Rpb24gPSBbXTtcblx0fVxuXG5cdHRoaXMuc2V0T3B0aW9uKFwic2VsZWN0aW9uXCIsIHZhbGlkYXRlQXJyYXkoc2VsZWN0aW9uKSk7XG5cdGNoZWNrT3B0aW9uU3RhdGUuY2FsbCh0aGlzKTtcblxuXHR0cnkge1xuXHRcdHRoaXM/LnNldEZvcm1WYWx1ZSh0aGlzLnZhbHVlKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdH1cblxuXHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLXNlbGVjdGVkXCIsIHtcblx0XHRzZWxlY3Rpb24sXG5cdH0pO1xuXG5cdHJldHVybiBuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0Y29uc3QgQ0xBU1NOQU1FID0gXCJzZWxlY3RlZFwiO1xuXG5cdFx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgbm90U2VsZWN0ZWQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChcIjpub3QoOmNoZWNrZWQpXCIpO1xuXG5cdFx0aWYgKG5vdFNlbGVjdGVkKSB7XG5cdFx0XHRub3RTZWxlY3RlZC5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhcmVudCA9IG5vZGUuY2xvc2VzdChgWyR7QVRUUklCVVRFX1JPTEV9PW9wdGlvbl1gKTtcblx0XHRcdFx0aWYgKHBhcmVudCkge1xuXHRcdFx0XHRcdHBhcmVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTTkFNRSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6Y2hlY2tlZFwiKTtcblx0XHRpZiAoc2VsZWN0ZWQpIHtcblx0XHRcdHNlbGVjdGVkLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRcdFx0Y29uc3QgcGFyZW50ID0gbm9kZS5jbG9zZXN0KGBbJHtBVFRSSUJVVEVfUk9MRX09b3B0aW9uXWApO1xuXHRcdFx0XHRpZiAocGFyZW50KSB7XG5cdFx0XHRcdFx0cGFyZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NOQU1FKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KS5ydW4oKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdGhlIHJlc3VsdCBjYW5ub3QgYmUgcGFyc2VkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGZldGNoRGF0YSh1cmwpIHs7XG5cblx0aWYgKCF1cmwpIHVybCA9IHRoaXMuZ2V0T3B0aW9uKFwidXJsXCIpO1xuXHRpZiAoIXVybCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXG5cdGNvbnN0IGZldGNoT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwiZmV0Y2hcIiwge30pO1xuXG5cdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJsb2FkaW5nXCIpO1xuXHR1cmwgPSBuZXcgRm9ybWF0dGVyKHsgZmlsdGVyOiB0aGlzLmdldE9wdGlvbihcImZpbHRlci5kZWZhdWx0VmFsdWVcIikgfSkuZm9ybWF0KFxuXHRcdHVybCxcblx0KTtcblxuXHRjb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblx0cmV0dXJuIGdsb2JhbFxuXHRcdC5mZXRjaCh1cmwsIGZldGNoT3B0aW9ucylcblx0XHQudGhlbigocmVzcG9uc2UpID0+IHtcblx0XHRcdGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIik7XG5cdFx0XHRpZiAoY29udGVudFR5cGUgJiYgY29udGVudFR5cGUuaW5kZXhPZihcImFwcGxpY2F0aW9uL2pzb25cIikgIT09IC0xKSB7XG5cdFx0XHRcdHJldHVybiByZXNwb25zZS50ZXh0KCk7XG5cdFx0XHR9XG5cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYHVuc3VwcG9ydGVkIHJlc3BvbnNlICR7Y29udGVudFR5cGV9YCk7XG5cdFx0fSlcblx0XHQudGhlbigodGV4dCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShKU09OLnBhcnNlKFN0cmluZyh0ZXh0KSkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidGhlIHJlc3VsdCBjYW5ub3QgYmUgcGFyc2VkXCIpO1xuXHRcdFx0fVxuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGhpZGUoKSB7O1xuXG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwic3RhdHVzXCIpO1xuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbih0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSwgXCJjbGFzc1wiLCBcIm9wZW5cIik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2hvdygpIHs7XG5cblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIiwgdW5kZWZpbmVkKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGZvY3VzRmlsdGVyLmNhbGwodGhpcyk7XG5cdGNvbnN0IG9wdGlvbnNBdmFpbGFibGUgPSBhcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdC5jYWxsKHRoaXMpO1xuXHRjb25zdCByZW1vdGVGaWx0ZXJGbGFnID0gdGhpcy5nZXRPcHRpb24oXCJmaWx0ZXIubW9kZVwiKSA9PT0gRklMVEVSX01PREVfUkVNT1RFO1xuXG5cdGlmIChvcHRpb25zQXZhaWxhYmxlID09PSBmYWxzZSAmJiByZW1vdGVGaWx0ZXJGbGFnICE9PSB0cnVlKSB7XG5cdFx0Y29uc3QgbG9hZE9uT3BlbkZsYWcgPSB0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmxvYWRPbk9wZW5cIik7XG5cdFx0aWYgKGxvYWRPbk9wZW5GbGFnID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzLnNldE9wdGlvbihcImZlYXR1cmVzLmxvYWRPbk9wZW5cIiwgZmFsc2UpO1xuXHRcdFx0dGhpcy5zZXRPcHRpb24oXCJjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIiwgXCJsb2FkaW5nXCIpO1xuXHRcdFx0dGhpcy5mZXRjaCgpLnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRzaG93LmNhbGwodGhpcyk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0s7XG5cdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJvcGVuXCIpO1xuXG5cdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdLCBcImNsYXNzXCIsIFwib3BlblwiKTtcblxuXHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0Y2FsY0FuZFNldE9wdGlvbnNEaW1lbnNpb24uY2FsbCh0aGlzKTtcblx0XHRmb2N1c0ZpbHRlci5jYWxsKHRoaXMpO1xuXHRcdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJ2aXNpYmlsaXR5XCIpO1xuXHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHR9KVxuXHRcdC5ydW4oKVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0b2dnbGUoKSB7XG5cdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdGhpZGUuY2FsbCh0aGlzKTtcblx0fSBlbHNlIHtcblx0XHRzaG93LmNhbGwodGhpcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLmV2ZW50Om1vbnN0ZXItc2VsZWN0aW9uLXJlbW92ZWRcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5ldmVudDptb25zdGVyLXNlbGVjdGlvbi1jbGVhcmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudGhhbmRsZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0c2VsZltjbGVhck9wdGlvbkV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XCJyZW1vdmUtYmFkZ2VcIixcblx0XHQpO1xuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGNvbnN0IGJhZGdlID0gZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShlbGVtZW50LCBBVFRSSUJVVEVfUk9MRSwgXCJiYWRnZVwiKTtcblx0XHRcdGlmIChiYWRnZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gYmFkZ2UuZ2V0QXR0cmlidXRlKGAke0FUVFJJQlVURV9QUkVGSVh9dmFsdWVgKTtcblxuXHRcdFx0XHRsZXQgc2VsZWN0aW9uID0gc2VsZi5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIik7XG5cdFx0XHRcdHNlbGVjdGlvbiA9IHNlbGVjdGlvbi5maWx0ZXIoKGIpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgIT09IGIudmFsdWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHNldFNlbGVjdGlvblxuXHRcdFx0XHRcdC5jYWxsKHNlbGYsIHNlbGVjdGlvbilcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLXNlbGVjdGlvbi1yZW1vdmVkXCIsIHtcblx0XHRcdFx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oc2VsZiwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHRzZWxmW2Nsb3NlRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblxuXHRcdGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXMocGF0aCkpIHtcblx0XHRcdGlmIChlbGVtZW50ID09PSBzZWxmKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0aGlkZS5jYWxsKHNlbGYpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0c2VsZltpbnB1dEV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cdFx0Y29uc3QgZWxlbWVudCA9IHBhdGg/LlswXTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0ZWxlbWVudC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpICYmXG5cdFx0XHRcdGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSA9PT0gXCJvcHRpb24tY29udHJvbFwiXG5cdFx0XHQpIHtcblx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1jaGFuZ2VcIiwge1xuXHRcdFx0XHRcdHR5cGU6IGV2ZW50LnR5cGUsXG5cdFx0XHRcdFx0dmFsdWU6IGVsZW1lbnQudmFsdWUsXG5cdFx0XHRcdFx0Y2hlY2tlZDogZWxlbWVudC5jaGVja2VkLFxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdGVsZW1lbnQuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSAmJlxuXHRcdFx0XHRlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgPT09IFwiZmlsdGVyXCJcblx0XHRcdCkge1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHNlbGZbY2hhbmdlRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGdhdGhlclN0YXRlLmNhbGwoc2VsZik7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1jaGFuZ2VkXCIsIGV2ZW50Py5kZXRhaWwpO1xuXHR9O1xuXG5cdHNlbGZba2V5RXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblx0XHRjb25zdCBlbGVtZW50ID0gcGF0aC5zaGlmdCgpO1xuXG5cdFx0bGV0IHJvbGU7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpKSB7XG5cdFx0XHRcdHJvbGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSk7XG5cdFx0XHR9IGVsc2UgaWYgKGVsZW1lbnQgPT09IHRoaXMpIHtcblx0XHRcdFx0c2hvdy5jYWxsKHRoaXMpO1xuXHRcdFx0XHQvLyBmb2N1c0ZpbHRlci5jYWxsKHNlbGYpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZSA9IGVsZW1lbnQuY2xvc2VzdChgWyR7QVRUUklCVVRFX1JPTEV9XWApO1xuXHRcdFx0XHRpZiAoZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGUuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSkge1xuXHRcdFx0XHRcdHJvbGUgPSBlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHN3aXRjaCAocm9sZSkge1xuXHRcdFx0Y2FzZSBcImZpbHRlclwiOlxuXHRcdFx0XHRoYW5kbGVGaWx0ZXJLZXlib2FyZEV2ZW50cy5jYWxsKHNlbGYsIGV2ZW50KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwib3B0aW9uLWxhYmVsXCI6XG5cdFx0XHRjYXNlIFwib3B0aW9uLWNvbnRyb2xcIjpcblx0XHRcdGNhc2UgXCJvcHRpb25cIjpcblx0XHRcdFx0aGFuZGxlT3B0aW9uS2V5Ym9hcmRFdmVudHMuY2FsbChzZWxmLCBldmVudCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImNvbnRyb2xcIjpcblx0XHRcdGNhc2UgXCJ0b2dnbGVcIjpcblx0XHRcdFx0aGFuZGxlVG9nZ2xlS2V5Ym9hcmRFdmVudHMuY2FsbChzZWxmLCBldmVudCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fTtcblxuXHRjb25zdCB0eXBlcyA9IHNlbGYuZ2V0T3B0aW9uKFwidG9nZ2xlRXZlbnRUeXBlXCIsIFtcImNsaWNrXCJdKTtcblxuXHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKHR5cGVzKSkge1xuXHRcdHNlbGZbY29udHJvbEVsZW1lbnRTeW1ib2xdXG5cdFx0XHQucXVlcnlTZWxlY3RvcihgWyR7QVRUUklCVVRFX1JPTEV9PVwiY29udGFpbmVyXCJdYClcblx0XHRcdC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmN0aW9uIChldmVudCkge1xuXHRcdFx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcdFx0XCJyZW1vdmUtYmFkZ2VcIixcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRvZ2dsZS5jYWxsKHNlbGYpO1xuXHRcdFx0fSk7XG5cblx0XHRzZWxmW2NvbnRyb2xFbGVtZW50U3ltYm9sXVxuXHRcdFx0LnF1ZXJ5U2VsZWN0b3IoYFske0FUVFJJQlVURV9ST0xFfT1cInN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXCJdYClcblx0XHRcdC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmN0aW9uIChldmVudCkge1xuXHRcdFx0XHRpZiAoc2VsZi5nZXRPcHRpb24oXCJkaXNhYmxlZFwiLCB1bmRlZmluZWQpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdFx0XHRjb25zdCBlbGVtZW50ID0gcGF0aD8uWzBdO1xuXHRcdFx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0Y29uc3QgY29udHJvbCA9IGVsZW1lbnQuY2xvc2VzdChcblx0XHRcdFx0XHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09XCJzdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc1wiXWAsXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAoY29udHJvbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRpZiAoY29udHJvbC5jbGFzc0xpc3QuY29udGFpbnMoXCJjbGVhclwiKSkge1xuXHRcdFx0XHRcdFx0XHRjbGVhclNlbGVjdGlvbi5jYWxsKHNlbGYpO1xuXG5cdFx0XHRcdFx0XHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItc2VsZWN0aW9uLWNsZWFyZWRcIiwge30pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRcdFx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XHRcdFx0XHRcdFwicmVtb3ZlLWJhZGdlXCIsXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR0b2dnbGUuY2FsbChzZWxmKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0Ly8gYmFkZ2UsIHNlbGVjdGlvblxuXHRcdHNlbGYuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBzZWxmW2NsZWFyT3B0aW9uRXZlbnRIYW5kbGVyXSk7XG5cdH1cblxuXHRzZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJtb25zdGVyLWNoYW5nZVwiLCBzZWxmW2NoYW5nZUV2ZW50SGFuZGxlcl0pO1xuXHRzZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBzZWxmW2lucHV0RXZlbnRIYW5kbGVyXSk7XG5cdHNlbGYuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgc2VsZltrZXlFdmVudEhhbmRsZXJdKTtcblxuXHRyZXR1cm4gc2VsZjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICovXG5mdW5jdGlvbiBzZXRTdGF0dXNPclJlbW92ZUJhZGdlcyhzdWdnZXN0aW9uKSB7O1xuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldE9wdGlvbihcInNlbGVjdGlvblwiKTtcblx0XHRjb25zdCBjbGVhckFsbEZsYWcgPVxuXHRcdFx0aXNBcnJheShzZWxlY3Rpb24pICYmXG5cdFx0XHRzZWxlY3Rpb24ubGVuZ3RoID4gMCAmJlxuXHRcdFx0dGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5jbGVhckFsbFwiKSA9PT0gdHJ1ZTtcblxuXHRcdGlmIChjbGVhckFsbEZsYWcpIHtcblx0XHRcdC8vdGhpc1tzdGF0dXNPclJlbW92ZUJhZGdlc0VsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJzdGF0dXNcIik7XG5cdFx0XHQvL3RoaXNbc3RhdHVzT3JSZW1vdmVCYWRnZXNFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiY2xlYXJcIik7XG5cdFx0XHR0aGlzLnNldE9wdGlvbihcImNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZVwiLCBcImNsZWFyXCIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChzdWdnZXN0aW9uID09PSBcImxvYWRpbmdcIikge1xuXHRcdFx0dGhpcy5zZXRPcHRpb24oXCJjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIiwgXCJsb2FkaW5nXCIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuY29udGFpbnMoXCJvcGVuXCIpKSB7XG5cdFx0XHR0aGlzLnNldE9wdGlvbihcImNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZVwiLCBcIm9wZW5cIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwib3B0aW9uc1wiKTtcblx0XHRpZiAoXG5cdFx0XHRvcHRpb25zID09PSB1bmRlZmluZWQgfHxcblx0XHRcdG9wdGlvbnMgPT09IG51bGwgfHxcblx0XHRcdChpc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMubGVuZ3RoID09PSAwKVxuXHRcdCkge1xuXHRcdFx0dGhpcy5zZXRPcHRpb24oXCJjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIiwgXCJlbXB0eVwiKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoc3VnZ2VzdGlvbikge1xuXHRcdFx0dGhpcy5zZXRPcHRpb24oXCJjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIiwgc3VnZ2VzdGlvbik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHR9LCAyKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkgeztcblxuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udHJvbF1gLFxuXHQpO1xuXHR0aGlzW3NlbGVjdGlvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1zZWxlY3Rpb25dYCxcblx0KTtcblx0dGhpc1tjb250YWluZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udGFpbmVyXWAsXG5cdCk7XG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PXBvcHBlcl1gLFxuXHQpO1xuXHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1maWx0ZXJdW25hbWU9XCJpbmxpbmUtZmlsdGVyXCJdYCxcblx0KTtcblx0dGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09ZmlsdGVyXVtuYW1lPVwicG9wcGVyLWZpbHRlclwiXWAsXG5cdCk7XG5cdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0gPVxuXHRcdHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0ucGFyZW50RWxlbWVudDtcblx0dGhpc1tvcHRpb25zRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PW9wdGlvbnNdYCxcblx0KTtcblx0dGhpc1tub09wdGlvbnNBdmFpbGFibGVFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09XCJuby1vcHRpb25zXCJdYCxcblx0KTtcblx0dGhpc1tzdGF0dXNPclJlbW92ZUJhZGdlc0VsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc11gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVBvcHBlcigpIHs7XG5cblx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSAhPT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIiwgZmFsc2UpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdGNhbGNBbmRTZXRPcHRpb25zRGltZW5zaW9uLmNhbGwodGhpcyk7XG5cdFx0cG9zaXRpb25Qb3BwZXIuY2FsbChcblx0XHRcdHRoaXMsXG5cdFx0XHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSxcblx0XHRcdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0sXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcInBvcHBlclwiLCB7fSksXG5cdFx0KTtcblx0fSkucnVuKCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHRlbXBsYXRlIGlkPVwib3B0aW9uc1wiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cIm9wdGlvblwiIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItZmlsdGVyZWQgcGF0aDpvcHRpb25zLmZpbHRlcmVkLFxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eSBwYXRoOm9wdGlvbnMudmlzaWJpbGl0eVwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBwYXJ0PVwib3B0aW9uXCIgcm9sZT1cIm9wdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZGF0YS1tb25zdGVyLXJvbGU9XCJvcHRpb24tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgdHlwZSBwYXRoOnR5cGUsXG4gICAgICAgICAgICByb2xlIHBhdGg6cm9sZSxcbiAgICAgICAgICAgIHZhbHVlIHBhdGg6b3B0aW9ucyB8IGluZGV4OnZhbHVlLCBcbiAgICAgICAgICAgIG5hbWUgcGF0aDpuYW1lLCBcbiAgICAgICAgICAgIHBhcnQgcGF0aDp0eXBlIHwgcHJlZml4Om9wdGlvbi0gfCBzdWZmaXg6IGZvcm0sXG4gICAgICAgICAgICBjbGFzcyBwYXRoOm9wdGlvbnMuY2xhc3MgXG4gICAgICAgICAgICBcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm9wdGlvbnMgfCBpbmRleDpsYWJlbFwiIHBhcnQ9XCJvcHRpb24tbGFiZWxcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPHRlbXBsYXRlIGlkPVwic2VsZWN0aW9uXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgICBwYXJ0PVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItdmFsdWUgcGF0aDpzZWxlY3Rpb24gfCBpbmRleDp2YWx1ZSwgXG4gICAgICAgICAgICAgICAgIGNsYXNzIHBhdGg6Y2xhc3NlcyB8IGluZGV4OmJhZGdlLCBcbiAgICAgICAgcGFydCBwYXRoOnR5cGUgfCBzdWZmaXg6LW9wdGlvbiB8IHByZWZpeDogZm9ybS1cIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6c2VsZWN0aW9uIHwgaW5kZXg6bGFiZWxcIiBwYXJ0PVwiYmFkZ2UtbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJiYWRnZS1sYWJlbFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cInJlbW92ZS1iYWRnZVwiIGRhdGEtbW9uc3Rlci1zZWxlY3QtdGhpc1xuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmZlYXR1cmVzLmNsZWFyIHwgPzo6aGlkZGVuIFwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cInJlbW92ZS1iYWRnZVwiIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDxzbG90IGNsYXNzPVwiaGlkZGVuXCI+PC9zbG90PlxuXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIiB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICBcXCR7c2VsZWN0ZWR9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJtb25zdGVyLWNvbG9yLXByaW1hcnktMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb24tZmlsdGVyLWNvbnRyb2xcIiByb2xlPVwic2VhcmNoXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHJvbGU9XCJzZWFyY2hib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydD1cInBvcHBlci1maWx0ZXJcIiBuYW1lPVwicG9wcGVyLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwiY29udGVudFwiIGNsYXNzPVwiZmxleFwiIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cIm9wdGlvbnNcIiBkYXRhLW1vbnN0ZXItcm9sZT1cIm9wdGlvbnNcIiBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwib3B0aW9ucyBwYXRoOm9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJuby1vcHRpb25zXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJuby1vcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDptZXNzYWdlcy5lbXB0eU9wdGlvbnNcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBwYXJ0PVwic3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIiBkYXRhLW1vbnN0ZXItcm9sZT1cInN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZSB8IHN1ZmZpeDpcXFxcIHN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIGA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChTZWxlY3QpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFBvcHBlclN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFBvcHBlclN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRQb3BwZXJTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHBvcHBlciB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJde2FsaWduLWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6bm9uZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtsZWZ0OjA7cGFkZGluZzoxLjFlbTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDotbW96LW1heC1jb250ZW50O3dpZHRoOm1heC1jb250ZW50O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXSBkaXZbZGF0YS1tb25zdGVyLXJvbGU9YXJyb3dde2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2hlaWdodDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7ei1pbmRleDotMX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbixcblx0cmVtb3ZlQXR0cmlidXRlVG9rZW4sXG59IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9ST0xFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuL2J1dHRvbi5tanNcIjtcbmltcG9ydCB7IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IHBvc2l0aW9uUG9wcGVyIH0gZnJvbSBcIi4vdXRpbC9mbG9hdGluZy11aS5tanNcIjtcbmltcG9ydCB7IEN1c3RvbUNvbnRyb2wgfSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWNvbnRyb2wubWpzXCI7XG5pbXBvcnQgeyBQb3BwZXJTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9wb3BwZXIubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuXG5leHBvcnQgeyBQb3BwZXIgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdGltZXJDYWxsYmFja1N5bWJvbCA9IFN5bWJvbChcInRpbWVyQ2FsbGJhY2tcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVzaXplT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJyZXNpemVPYnNlcnZlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjbG9zZUV2ZW50SGFuZGxlciA9IFN5bWJvbChcImNsb3NlRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250cm9sRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRyb2xFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBidXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiYnV0dG9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBhcnJvd0VsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJhcnJvd0VsZW1lbnRcIik7XG5cbi8qKlxuICogVGhpcyBhY3Rpb24gY2FsbGJhY2sgZXhlY3V0ZXMgdGhlIGFjdGlvbnMgd2hlbiBhIGJ1dHRvbiBpcyBjbGlja2VkLlxuICpcbiAqIEBjYWxsYmFjayBNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5leGFtcGxlQWN0aW9uQ2FsbGJhY2tcbiAqIEBwYXJhbSB7RXZlbnR9IGUgRXZlbnRcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHRoaXMge0N1c3RvbUNvbnRyb2x9XG4gKi9cblxuLyoqXG4gKiBUaGUgUG9wcGVyIGlzdCBhbiBlbGVtZW50IHRoYXQgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSBhIHBvcHBlci5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL3BvcHBlci5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnlcbiAqIGFzIHdlbGwgYXMgW3Bvb3BlcmpzXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pLlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItcG9wcGVyLWJ1dHRvbiAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1wb3BwZXInKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1wb3BwZXI+PC9tb25zdGVyLXBvcHBlcj5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQge1BvcHBlcn0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL3BvcHBlci5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXBvcHBlcicpO1xuICogYGBgXG4gKlxuICogQHN0YXJ0dW1sIHBvcHBlci1idXR0b24ucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDdXN0b21Db250cm9sXG4gKiBDdXN0b21Db250cm9sIDx8LS0gUG9wcGVyXG4gKiBAZW5kdW1sXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHN1bW1hcnkgQSBwb3BwZXIgYnV0dG9uXG4gKi9cbmNsYXNzIFBvcHBlciBleHRlbmRzIEN1c3RvbUNvbnRyb2wge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9jb21wb25lbnQtZm9ybS9wb3BwZXJAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIGh0bWwgdGFnIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIC0gVGhlIHRlbXBsYXRlcyBmb3IgdGhlIGNvbnRyb2wuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiAtIFRoZSBtYWluIHRlbXBsYXRlLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbW9kZSAtIFRoZSBtb2RlIG9mIHRoZSBwb3BwZXIuIFBvc3NpYmxlIHZhbHVlcyBhcmUgYGNsaWNrYCwgYGVudGVyYCBgaG92ZXJgLCBgbWFudWFsYCwgYGZvY3VzYCwgXCJhdXRvXCIgb3IgYSBjb21iaW5hdGlvbiBvZiB0aGVtLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY29udGVudCAtIFRoZSBjb250ZW50IG9mIHRoZSBwb3BwZXIuXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBwb3BwZXIgLSBUaGUgcG9wcGVyIG9wdGlvbnMuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwb3BwZXIucGxhY2VtZW50IC0gVGhlIHBsYWNlbWVudCBvZiB0aGUgcG9wcGVyLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGB0b3BgLCBgYm90dG9tYCwgYGxlZnRgIGFuZCBgcmlnaHRgLlxuXHQgKiBAcHJvcGVydHkge0FycmF5PGZ1bmN0aW9uPn0gcG9wcGVyLm1pZGRsZXdhcmUgLSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbnMgb2YgdGhlIHBvcHBlci5cblx0ICogQHByb3BlcnR5IHtBcnJheTxmdW5jdGlvbj59IHBvcHBlci5taWRkbGV3YXJlSW5pdCAtIFRoZSBtaWRkbGV3YXJlIGluaXQgZnVuY3Rpb25zIG9mIHRoZSBwb3BwZXIuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZWF0dXJlcyAtIFRoZSBmZWF0dXJlcyBvZiB0aGUgcG9wcGVyLlxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLnByZXZlbnRQcm9wYWdhdGVPcGVuRXZlbnRzIC0gUHJldmVudHMgdGhlIG9wZW4gZXZlbnQgZnJvbSBiZWluZyBzZW50LlxuXHQgKiBAZXh0ZW5kcyB7QnV0dG9ufVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0bW9kZTogXCJob3ZlciBmb2N1c1wiLFxuXHRcdFx0Y29udGVudDogXCI8c2xvdD5TaG91bGQgSSBTdGF5IG9yIFNob3VsZCBJIEdvPzwvc2xvdD5cIixcblx0XHRcdHBvcHBlcjoge1xuXHRcdFx0XHRwbGFjZW1lbnQ6IFwidG9wXCIsXG5cdFx0XHRcdG1pZGRsZXdhcmU6IFtcImF1dG9QbGFjZW1lbnRcIiwgXCJvZmZzZXQ6MTBcIiwgXCJhcnJvd1wiXSxcblx0XHRcdH0sXG5cdFx0XHRmZWF0dXJlczoge1xuXHRcdFx0XHRwcmV2ZW50T3BlbkV2ZW50U2VudDogZmFsc2UsXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlcn1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7O1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudGhhbmRsZXIuY2FsbCh0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1wb3BwZXJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtBcnJheTxDU1NTdHlsZVNoZWV0Pn1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbUG9wcGVyU3R5bGVTaGVldF07XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7O1xuXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblxuXHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdGF0dGFjaFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblxuXHRcdGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlcn1cblx0ICovXG5cdHNob3dEaWFsb2coKSB7XG5cdFx0c2hvdy5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlcn1cblx0ICovXG5cdGhpZGVEaWFsb2coKSB7XG5cdFx0aGlkZS5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlcn1cblx0ICovXG5cdHRvZ2dsZURpYWxvZygpIHtcblx0XHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRcdHRoaXMuaGlkZURpYWxvZygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNob3dEaWFsb2coKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUG9wcGVyfVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRoYW5kbGVyKCkgeztcblxuXHR0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblxuXHRcdGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXMocGF0aCkpIHtcblx0XHRcdGlmIChlbGVtZW50ID09PSB0aGlzKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0aGlkZS5jYWxsKHRoaXMpO1xuXHR9O1xuXG5cdGxldCBtb2RlcyA9IG51bGw7XG5cdGNvbnN0IG1vZGVPcHRpb24gPSB0aGlzLmdldE9wdGlvbihcIm1vZGVcIik7XG5cdGlmICh0eXBlb2YgbW9kZU9wdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdG1vZGVzID0gbW9kZU9wdGlvbi5zcGxpdChcIiBcIik7XG5cdH1cblxuXHRpZiAoXG5cdFx0bW9kZXMgPT09IG51bGwgfHxcblx0XHRtb2RlcyA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0aXNBcnJheShtb2RlcykgPT09IGZhbHNlIHx8XG5cdFx0bW9kZXMubGVuZ3RoID09PSAwXG5cdCkge1xuXHRcdG1vZGVzID0gW1wibWFudWFsXCJdO1xuXHR9XG5cblx0Zm9yIChjb25zdCBbLCBtb2RlXSBvZiBPYmplY3QuZW50cmllcyhtb2RlcykpIHtcblx0XHRpbml0RXZlbnRIYW5kbGVyQnlNb2RlLmNhbGwodGhpcywgbW9kZSk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlckJ5TW9kZShtb2RlKSB7O1xuXG5cdHN3aXRjaCAobW9kZSkge1xuXHRcdGNhc2UgXCJtYW51YWxcIjpcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcImZvY3VzXCI6XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucHJldmVudE9wZW5FdmVudFNlbnRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2hvd0RpYWxvZygpO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wcmV2ZW50T3BlbkV2ZW50U2VudFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5oaWRlRGlhbG9nKCk7XG5cdFx0XHR9KTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcImNsaWNrXCI6XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucHJldmVudE9wZW5FdmVudFNlbnRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMudG9nZ2xlRGlhbG9nKCk7XG5cdFx0XHR9KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJlbnRlclwiOlxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucHJldmVudE9wZW5FdmVudFNlbnRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2hvd0RpYWxvZygpO1xuXHRcdFx0fSk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJhdXRvXCI6IC8vIGlzIGhvdmVyXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wcmV2ZW50T3BlbkV2ZW50U2VudFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zaG93RGlhbG9nKCk7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnByZXZlbnRPcGVuRXZlbnRTZW50XCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmhpZGVEaWFsb2coKTtcblx0XHRcdH0pO1xuXHRcdFx0YnJlYWs7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhdHRhY2hSZXNpemVPYnNlcnZlcigpIHs7XG5cblx0Ly8gYWdhaW5zdCBmbGlja2VyaW5nXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG5cdFx0aWYgKHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gaW5zdGFuY2VvZiBEZWFkTWFuc1N3aXRjaCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXS50b3VjaCgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gPSBuZXcgRGVhZE1hbnNTd2l0Y2goMjAwLCAoKSA9PiB7XG5cdFx0XHR1cGRhdGVQb3BwZXIuY2FsbCh0aGlzKTtcblx0XHR9KTtcblx0fSk7XG5cblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0ub2JzZXJ2ZSh0aGlzLnBhcmVudEVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIoKSB7O1xuXHRpZiAodGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gaW5zdGFuY2VvZiBSZXNpemVPYnNlcnZlcikge1xuXHRcdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLmRpc2Nvbm5lY3QoKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGhpZGUoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItcG9wcGVyLWhpZGVcIiwge1xuXHRcdHNlbGYsXG5cdH0pO1xuXG5cdHNlbGZbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbihzZWxmW2NvbnRyb2xFbGVtZW50U3ltYm9sXSwgXCJjbGFzc1wiLCBcIm9wZW5cIik7XG5cblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1wb3BwZXItaGlkZGVuXCIsIHtcblx0XHRcdHNlbGYsXG5cdFx0fSk7XG5cdH0sIDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhpcyBQb3BwZXJCdXR0b25cbiAqL1xuZnVuY3Rpb24gc2hvdygpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0aWYgKHNlbGYuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIiwgZmFsc2UpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHNlbGZbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9PT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1wb3BwZXItb3BlblwiLCB7XG5cdFx0c2VsZixcblx0fSk7XG5cblx0c2VsZltwb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcblx0c2VsZltwb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLO1xuXG5cdGFkZEF0dHJpYnV0ZVRva2VuKHNlbGZbY29udHJvbEVsZW1lbnRTeW1ib2xdLCBcImNsYXNzXCIsIFwib3BlblwiKTtcblx0dXBkYXRlUG9wcGVyLmNhbGwoc2VsZik7XG5cblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1wb3BwZXItb3BlbmVkXCIsIHtcblx0XHRcdHNlbGYsXG5cdFx0fSk7XG5cdH0sIDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVBvcHBlcigpIHs7XG5cblx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSAhPT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIiwgZmFsc2UpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0cG9zaXRpb25Qb3BwZXIuY2FsbChcblx0XHR0aGlzLFxuXHRcdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdLFxuXHRcdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0sXG5cdFx0dGhpcy5nZXRPcHRpb24oXCJwb3BwZXJcIiwge30pLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJ9XG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNvbnRyb2xdYCxcblx0KTtcblx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09YnV0dG9uXWAsXG5cdCk7XG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PXBvcHBlcl1gLFxuXHQpO1xuXHR0aGlzW2Fycm93RWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWFycm93XWAsXG5cdCk7XG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxzbG90IG5hbWU9XCJidXR0b25cIiBkYXRhLW1vbnN0ZXItcm9sZT1cImJ1dHRvblwiPjwvc2xvdD5cblxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJtb25zdGVyLWNvbG9yLXByaW1hcnktMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJhcnJvd1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cImNvbnRlbnRcIiBjbGFzcz1cImZsZXhcIiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y29udGVudFwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIGA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChQb3BwZXIpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFBvcHBlckJ1dHRvblN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFBvcHBlckJ1dHRvblN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRQb3BwZXJCdXR0b25TdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHBvcHBlcmJ1dHRvbiB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJde2FsaWduLWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6bm9uZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtsZWZ0OjA7cGFkZGluZzoxLjFlbTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDotbW96LW1heC1jb250ZW50O3dpZHRoOm1heC1jb250ZW50O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXSBkaXZbZGF0YS1tb25zdGVyLXJvbGU9YXJyb3dde2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2hlaWdodDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7ei1pbmRleDotMX0ubW9uc3Rlci1idXR0b24tcHJpbWFyeSxidXR0b257YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5LC5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5LC5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXNlY29uZGFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH1idXR0b246YWN0aXZlLGJ1dHRvbjpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfWJ1dHRvbjphY3RpdmV7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9Lm1vbnN0ZXItYnV0dG9uLWJhciwubW9uc3Rlci1idXR0b24tZ3JvdXB7YWxpZ24tY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6c3RyZXRjaDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2JveC1zaXppbmc6Ym9yZGVyLWJveDtnYXA6MDttYXJnaW46MXJlbSAwfS5tb25zdGVyLWJ1dHRvbi1ncm91cD46bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6Y2FsYyh2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkqLTEpfS5tb25zdGVyLWJ1dHRvbi1ncm91cCA6aG92ZXJ7Ym94LXNoYWRvdzpub25lfWJ1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6bGlnaHQpe2J1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlfVtkYXRhLW1vbnN0ZXItcm9sZT1idXR0b25de3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6ZmlsbC1hdmFpbGFibGV9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2hlaWdodDoxMDAlfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IERlYWRNYW5zU3dpdGNoIH0gZnJvbSBcIi4uLy4uL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzXCI7XG5pbXBvcnQgeyBQb3BwZXIgfSBmcm9tIFwiLi9wb3BwZXIubWpzXCI7XG5pbXBvcnQgeyBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0sgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBQb3BwZXJCdXR0b25TdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9wb3BwZXItYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgcG9zaXRpb25Qb3BwZXIgfSBmcm9tIFwiLi91dGlsL2Zsb2F0aW5nLXVpLm1qc1wiO1xuaW1wb3J0IFwiLi9idXR0b24ubWpzXCI7XG5cbmV4cG9ydCB7IFBvcHBlckJ1dHRvbiB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB0aW1lckNhbGxiYWNrU3ltYm9sID0gU3ltYm9sKFwidGltZXJDYWxsYmFja1wiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZXNpemVPYnNlcnZlclN5bWJvbCA9IFN5bWJvbChcInJlc2l6ZU9ic2VydmVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNsb3NlRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiY2xvc2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRyb2xFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udHJvbEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGJ1dHRvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJidXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJwb3BwZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGFycm93RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImFycm93RWxlbWVudFwiKTtcblxuLyoqXG4gKiBUaGlzIGFjdGlvbiBjYWxsYmFjayBleGVjdXRlcyB0aGUgYWN0aW9ucyB3aGVuIGEgYnV0dG9uIGlzIGNsaWNrZWQuXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVBY3Rpb25DYWxsYmFja1xuICogQHBhcmFtIHtFdmVudH0gZSBFdmVudFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAdGhpcyB7Q3VzdG9tQ29udHJvbH1cbiAqL1xuXG4vKipcbiAqIFRoZSBQb3BwZXJCdXR0b24gaXMgYSBidXR0b24gdGhhdCBvcGVucyBhIHBvcHBlciBlbGVtZW50LlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvcG9wcGVyLWJ1dHRvbi5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnlcbiAqIGFzIHdlbGwgYXMgW3Bvb3BlcmpzXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pLlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItcG9wcGVyLWJ1dHRvbiAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1wb3BwZXItYnV0dG9uJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItcG9wcGVyLWJ1dHRvbj48L21vbnN0ZXItcG9wcGVyLWJ1dHRvbj5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQge1BvcHBlckJ1dHRvbn0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL3BvcHBlci1idXR0b24uanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1wb3BwZXItYnV0dG9uJyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgYGRhdGEtbW9uc3Rlci1vcHRpb24tY2xhc3Nlcy1idXR0b25gIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIENTUyBjbGFzcyBvZiB0aGUgYnV0dG9uLlxuICpcbiAqIEBzdGFydHVtbCBwb3BwZXItYnV0dG9uLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gQ3VzdG9tQ29udHJvbFxuICogQ3VzdG9tQ29udHJvbCA8fC0tIFBvcHBlclxuICogUG9wcGVyIDx8LS0gUG9wcGVyQnV0dG9uXG4gKiBAZW5kdW1sXG4gKlxuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc3VtbWFyeSBBIHBvcHBlciBidXR0b25cbiAqL1xuY2xhc3MgUG9wcGVyQnV0dG9uIGV4dGVuZHMgUG9wcGVyIHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL2NvbXBvbmVudC1mb3JtL3BvcHBlci1idXR0b25AQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIGh0bWwgdGFnIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIC0gVGhlIHRlbXBsYXRlcyBmb3IgdGhlIGNvbnRyb2wuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiAtIFRoZSBtYWluIHRlbXBsYXRlLlxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gbGFiZWxzIC0gVGhlIGxhYmVscyBmb3IgdGhlIGNvbnRyb2wuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMuYnV0dG9uIC0gVGhlIGxhYmVsIGZvciB0aGUgYnV0dG9uLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY29udGVudCAtIFRoZSBjb250ZW50IG9mIHRoZSBwb3BwZXIuXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBwb3BwZXIgLSBUaGUgcG9wcGVyIG9wdGlvbnMuXG5cdCAqIEBleHRlbmRzIHtCdXR0b24uZGVmYXVsdHN9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7O1xuXG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRhY3Rpb25zOiB7XG5cdFx0XHRcdGNsaWNrOiAoZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMudG9nZ2xlRGlhbG9nKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0Y2xhc3Nlczoge1xuXHRcdFx0XHRidXR0b246IFwibW9uc3Rlci1idXR0b25cIixcblx0XHRcdH0sXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0YnV0dG9uOiAnPHNsb3QgbmFtZT1cImJ1dHRvblwiPjwvc2xvdD4nLFxuXHRcdFx0fSxcblx0XHRcdG1vZGU6IFwiY2xpY2tcIixcblx0XHRcdHZhbHVlOiBudWxsLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlckJ1dHRvbn1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7O1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudGhhbmRsZXIuY2FsbCh0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1wb3BwZXItYnV0dG9uXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0Y29uc3Qgc3R5bGVzID0gc3VwZXIuZ2V0Q1NTU3R5bGVTaGVldCgpO1xuXHRcdHN0eWxlcy5wdXNoKFBvcHBlckJ1dHRvblN0eWxlU2hlZXQpO1xuXHRcdHJldHVybiBzdHlsZXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7O1xuXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblxuXHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdGF0dGFjaFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblxuXHRcdGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uY2xpY2soKSBtZXRob2Qgc2ltdWxhdGVzIGEgY2xpY2sgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9jbGlja31cblx0ICovXG5cdGNsaWNrKCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmNsaWNrKVxuXHRcdCkge1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5jbGljaygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmZvY3VzKCkgbWV0aG9kIHNldHMgZm9jdXMgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9mb2N1c31cblx0ICovXG5cdGZvY3VzKG9wdGlvbnMpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5mb2N1cylcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZm9jdXMob3B0aW9ucyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uYmx1cigpIG1ldGhvZCByZW1vdmVzIGZvY3VzIGZyb20gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKi9cblx0Ymx1cigpIHtcblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYmx1cilcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYmx1cigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvYXR0YWNoSW50ZXJuYWxzfVxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0c3RhdGljIGdldCBmb3JtQXNzb2NpYXRlZCgpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudCBzZWxlY3Rpb24gb2YgdGhlIFNlbGVjdFxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItc2VsZWN0Jyk7XG5cdCAqIGNvbnNvbGUubG9nKGUudmFsdWUpXG5cdCAqIC8vIFx1MjFBNiAxXG5cdCAqIC8vIFx1MjFBNiBbJzEnLCcyJ11cblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfGFycmF5fVxuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcInZhbHVlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBzZWxlY3Rpb25cblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXNlbGVjdCcpO1xuXHQgKiBlLnZhbHVlPTFcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfGFycmF5fSB2YWx1ZVxuXHQgKiBAc2luY2UgMS4yLjBcblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwidmFsdWVcIiwgdmFsdWUpO1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzPy5zZXRGb3JtVmFsdWUodGhpcy52YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7aW5pdEV2ZW50aGFuZGxlcn1cbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50aGFuZGxlcigpIHs7XG5cblx0dGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHBhdGgpKSB7XG5cdFx0XHRpZiAoZWxlbWVudCA9PT0gdGhpcykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuaGlkZURpYWxvZygpO1xuXHR9O1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFJlc2l6ZU9ic2VydmVyKCkgeztcblxuXHQvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdGlmICh0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0udG91Y2goKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRkZWxldGUgdGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdID0gbmV3IERlYWRNYW5zU3dpdGNoKDIwMCwgKCkgPT4ge1xuXHRcdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUodGhpcy5wYXJlbnRFbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCkgeztcblx0aWYgKHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdIGluc3RhbmNlb2YgUmVzaXplT2JzZXJ2ZXIpIHtcblx0XHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5kaXNjb25uZWN0KCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVQb3BwZXIoKSB7O1xuXG5cdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgIT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIsIGZhbHNlKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHBvc2l0aW9uUG9wcGVyLmNhbGwoXG5cdFx0dGhpcyxcblx0XHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSxcblx0XHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwicG9wcGVyXCIsIHt9KSxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jb250cm9sXWAsXG5cdCk7XG5cdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWJ1dHRvbl1gLFxuXHQpO1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1wb3BwZXJdYCxcblx0KTtcblx0dGhpc1thcnJvd0VsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1hcnJvd11gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxidXR0b24gZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkaXNhYmxlZCBwYXRoOmRpc2FibGVkIHwgaWY6dHJ1ZSwgY2xhc3MgcGF0aDpjbGFzc2VzLmJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgcGFydD1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMuYnV0dG9uXCI+PC9idXR0b24+XG5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXJcIiBwYXJ0PVwicG9wcGVyXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwibW9uc3Rlci1jb2xvci1wcmltYXJ5LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYXJyb3dcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJjb250ZW50XCIgY2xhc3M9XCJmbGV4XCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoUG9wcGVyQnV0dG9uKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBDb25maXJtQnV0dG9uU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgQ29uZmlybUJ1dHRvblN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRDb25maXJtQnV0dG9uU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBjb25maXJtYnV0dG9uIHsgXG4uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fS5tb25zdGVyLWgxLGgxe2ZvbnQtc2l6ZTozcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxO21hcmdpbi1ib3R0b206MS4yNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfS5tb25zdGVyLWgzLGgze2ZvbnQtc2l6ZToycmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OmNhbGMoNHB4ICsgMmV4KTttYXJnaW4tYm90dG9tOjEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6Y2FsYyg0cHggKyAyZXgpO21hcmdpbi1ib3R0b206MS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3t0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xKSAwLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMikgNTAlLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMykgMTAwJSk7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLXNpemU6Y292ZXI7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXXthbGlnbi1jb250ZW50OmNlbnRlcjtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bGVmdDowO3BhZGRpbmc6MS4xZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1tb2RhbCl9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl0gZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWFycm93XXtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtoZWlnaHQ6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3otaW5kZXg6LTF9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWRlY2lzaW9uXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1ldmVubHk7bWFyZ2luOjFyZW0gMCAuNHJlbTt3aWR0aDoxMDAlfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtoZWlnaHQ6MTAwJX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgTWVzc2FnZVN0YXRlQnV0dG9uU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgTWVzc2FnZVN0YXRlQnV0dG9uU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdE1lc3NhZ2VTdGF0ZUJ1dHRvblN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgbWVzc2FnZXN0YXRlYnV0dG9uIHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWJ1dHRvbl17d2lkdGg6MTAwJX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX1JPTEUgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXksIGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBQb3BwZXIgfSBmcm9tIFwiLi9wb3BwZXIubWpzXCI7XG5pbXBvcnQgeyBNZXNzYWdlU3RhdGVCdXR0b25TdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanNcIjtcbmltcG9ydCB7IFN0YXRlQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvc3RhdGUtYnV0dG9uLm1qc1wiO1xuaW1wb3J0IFwiLi9zdGF0ZS1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuXG5leHBvcnQgeyBNZXNzYWdlU3RhdGVCdXR0b24gfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYnV0dG9uRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImJ1dHRvbkVsZW1lbnRcIik7XG5cbi8qKlxuICogVGhpcyBDdXN0b21Db250cm9sIGNyZWF0ZXMgYSBidXR0b24gZWxlbWVudCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvbWVzc2FnZS1zdGF0ZS1idXR0b24ucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5XG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyA8bW9uc3Rlci1tZXNzYWdlLXN0YXRlLWJ1dHRvbiAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1tZXNzYWdlLXN0YXRlLWJ1dHRvbicpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLW1lc3NhZ2Utc3RhdGUtYnV0dG9uPjwvbW9uc3Rlci1tZXNzYWdlLXN0YXRlLWJ1dHRvbj5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQge2NsYXNzIE1lc3NhZ2VTdGF0ZUJ1dHRvbiBleHRlbmRzIFBvcHBlckJ1dHRvbiB7fSBmcm9tICdAc2NodWthaS9jb21wb25lbnQtZm9ybS9zb3VyY2UvbWVzc2FnZS1zdGF0ZS1idXR0b24uanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zdGF0ZS1idXR0b24nKTtcbiAqIGBgYFxuICpcbiAqIEBzdGFydHVtbCBtZXNzYWdlLXN0YXRlLWJ1dHRvbi5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEN1c3RvbUNvbnRyb2xcbiAqIEN1c3RvbUNvbnRyb2wgPHwtLSBQb3BwZXJcbiAqIFBvcHBlciA8fC0tIE1lc3NhZ2VTdGF0ZUJ1dHRvblxuICogQGVuZHVtbFxuICpcbiAqIEBzaW5jZSAyLjExLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzdW1tYXJ5IEEgc3RhdGUgYnV0dG9uIHdpdGggaWNvbnMgYW5kIGEgbWVzc2FnZVxuICovXG5jbGFzcyBNZXNzYWdlU3RhdGVCdXR0b24gZXh0ZW5kcyBQb3BwZXIge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vbWVzc2FnZS1zdGF0ZS1idXR0b25AQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RhdGV9IHN0YXRlXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0XG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLk1lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Vcblx0ICovXG5cdHNldFN0YXRlKHN0YXRlLCB0aW1lb3V0KSB7XG5cdFx0cmV0dXJuIHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0U3RhdGUoc3RhdGUsIHRpbWVvdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLk1lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICovXG5cdHJlbW92ZVN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLnJlbW92ZVN0YXRlKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXMuU3RhdGV8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0U3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZ2V0U3RhdGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBodG1sIHRhZyB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gbGFiZWxzIExhYmVsIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMuYnV0dG9uIEJ1dHRvbiBsYWJlbFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gbW9kZSBNb2RlIGRlZmluaXRpb25zIChtYW51YWwsIHN1Ym1pdClcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdG1lc3NhZ2U6IHtcblx0XHRcdFx0dGl0bGU6IHVuZGVmaW5lZCxcblx0XHRcdFx0Y29udGVudDogdW5kZWZpbmVkLFxuXHRcdFx0XHRpY29uOiB1bmRlZmluZWQsXG5cdFx0XHR9LFxuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0bW9kZTogXCJtYW51YWxcIixcblx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRidXR0b246IFwiPHNsb3Q+PC9zbG90PlwiLFxuXHRcdFx0fSxcblx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIm1vbnN0ZXItYnV0dG9uLXByaW1hcnlcIixcblx0XHRcdH0sXG5cdFx0XHRhY3Rpb25zOiB7XG5cdFx0XHRcdGNsaWNrOiAoZSkgPT4ge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBjbGljayBhY3Rpb24gaXMgbm90IGRlZmluZWRcIik7XG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpOztcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblxuXHRcdGxldCBtb2RlcyA9IG51bGw7XG5cdFx0Y29uc3QgbW9kZU9wdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKFwibW9kZVwiKTtcblx0XHRpZiAodHlwZW9mIG1vZGVPcHRpb24gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdG1vZGVzID0gbW9kZU9wdGlvbi5zcGxpdChcIiBcIik7XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0bW9kZXMgPT09IG51bGwgfHxcblx0XHRcdG1vZGVzID09PSB1bmRlZmluZWQgfHxcblx0XHRcdGlzQXJyYXkobW9kZXMpID09PSBmYWxzZSB8fFxuXHRcdFx0bW9kZXMubGVuZ3RoID09PSAwXG5cdFx0KSB7XG5cdFx0XHRtb2RlcyA9IFtcIm1hbnVhbFwiXTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFssIG1vZGVdIG9mIE9iamVjdC5lbnRyaWVzKG1vZGVzKSkge1xuXHRcdFx0aW5pdEV2ZW50SGFuZGxlckJ5TW9kZS5jYWxsKHRoaXMsIG1vZGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIG1lc3NhZ2Vcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8SFRNTEVsZW1lbnR9bWVzc2FnZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IGljb25cblx0ICogQHJldHVybnMge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLk1lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICovXG5cdHNldE1lc3NhZ2UobWVzc2FnZSwgdGl0bGUsIGljb24pIHtcblx0XHRpZiAoaXNTdHJpbmcobWVzc2FnZSkpIHtcblx0XHRcdGlmIChtZXNzYWdlID09PSBcIlwiKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJtZXNzYWdlIG11c3Qgbm90IGJlIGVtcHR5XCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBjb250YWluZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0Y29uc3QgbWVzc2FnZURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHRjb25zdCB0aXRsZURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHR0aXRsZURpdi5zZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItcm9sZVwiLCBcIm1lc3NhZ2UtdGl0bGUtYm94XCIpO1xuXG5cdFx0XHRsZXQgdGl0bGVFbGVtZW50LCBpY29uRWxlbWVudDtcblx0XHRcdGlmICh0aXRsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRpdGxlID0gdmFsaWRhdGVTdHJpbmcodGl0bGUpO1xuXHRcdFx0XHR0aXRsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0XHR0aXRsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJcIik7XG5cdFx0XHRcdHRpdGxlRWxlbWVudC5pbm5lckhUTUwgPSB0aXRsZTtcblx0XHRcdFx0dGl0bGVFbGVtZW50LnNldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1yb2xlXCIsIFwibWVzc2FnZS10aXRsZVwiKTtcblx0XHRcdFx0dGl0bGVEaXYuYXBwZW5kQ2hpbGQodGl0bGVFbGVtZW50KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGljb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpY29uID0gdmFsaWRhdGVTdHJpbmcoaWNvbik7XG5cdFx0XHRcdGljb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdFx0aWNvbkVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJcIik7XG5cdFx0XHRcdGljb25FbGVtZW50LmlubmVySFRNTCA9IGljb247XG5cdFx0XHRcdGljb25FbGVtZW50LnNldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1yb2xlXCIsIFwibWVzc2FnZS1pY29uXCIpO1xuXHRcdFx0XHR0aXRsZURpdi5hcHBlbmRDaGlsZChpY29uRWxlbWVudCk7XG5cdFx0XHR9XG5cblx0XHRcdG1lc3NhZ2VEaXYuaW5uZXJIVE1MID0gbWVzc2FnZTtcblx0XHRcdGNvbnRhaW5lckRpdi5hcHBlbmRDaGlsZCh0aXRsZURpdik7XG5cdFx0XHRjb250YWluZXJEaXYuYXBwZW5kQ2hpbGQobWVzc2FnZURpdik7XG5cblx0XHRcdHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZS5jb250ZW50XCIsIGNvbnRhaW5lckRpdik7XG5cdFx0fSBlbHNlIGlmIChtZXNzYWdlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZS5jb250ZW50XCIsIG1lc3NhZ2UpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XHRcIm1lc3NhZ2UgbXVzdCBiZSBhIHN0cmluZyBvciBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFwiLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge251bWJlcn0gdGltZW91dFxuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uTWVzc2FnZVN0YXRlQnV0dG9ufVxuXHQgKi9cblx0c2hvd01lc3NhZ2UodGltZW91dCkgeztcblx0XHRzdXBlci5zaG93RGlhbG9nKCk7XG5cblx0XHRpZiAodGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0c3VwZXIuaGlkZURpYWxvZygpO1xuXHRcdFx0fSwgdGltZW91dCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLk1lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICovXG5cdGhpZGVNZXNzYWdlKCkge1xuXHRcdHN1cGVyLmhpZGVEaWFsb2coKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uTWVzc2FnZVN0YXRlQnV0dG9ufVxuXHQgKi9cblx0dG9nZ2xlTWVzc2FnZSgpIHtcblx0XHRzdXBlci50b2dnbGVEaWFsb2coKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fVxuXHQgKi9cblx0Z2V0TWVzc2FnZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJtZXNzYWdlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1tZXNzYWdlLXN0YXRlLWJ1dHRvblwiO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0FycmF5PENTU1N0eWxlU2hlZXQ+fVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0Y29uc3Qgc3R5bGVzID0gUG9wcGVyLmdldENTU1N0eWxlU2hlZXQoKTtcblx0XHRzdHlsZXMucHVzaChTdGF0ZUJ1dHRvblN0eWxlU2hlZXQpO1xuXHRcdHN0eWxlcy5wdXNoKE1lc3NhZ2VTdGF0ZUJ1dHRvblN0eWxlU2hlZXQpO1xuXHRcdHJldHVybiBzdHlsZXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5jbGljaygpIG1ldGhvZCBzaW11bGF0ZXMgYSBjbGljayBvbiB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2NsaWNrfVxuXHQgKi9cblx0Y2xpY2soKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uY2xpY2spXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmNsaWNrKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uZm9jdXMoKSBtZXRob2Qgc2V0cyBmb2N1cyBvbiB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2ZvY3VzfVxuXHQgKi9cblx0Zm9jdXMob3B0aW9ucykge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmZvY3VzKVxuXHRcdCkge1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5mb2N1cyhvcHRpb25zKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5ibHVyKCkgbWV0aG9kIHJlbW92ZXMgZm9jdXMgZnJvbSB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqL1xuXHRibHVyKCkge1xuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5ibHVyKVxuXHRcdCkge1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5ibHVyKCk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXJCeU1vZGUobW9kZSkgeztcblxuXHRzd2l0Y2ggKG1vZGUpIHtcblx0XHRjYXNlIFwibWFudWFsXCI6XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLnNldE9wdGlvbihcImFjdGlvbnMuY2xpY2tcIiwgKGUpID0+IHtcblx0XHRcdFx0Y29uc3QgY2FsbGJhY2sgPSB0aGlzLmdldE9wdGlvbihcImFjdGlvbnMuY2xpY2tcIik7XG5cdFx0XHRcdGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInN1Ym1pdFwiOlxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXCJhY3Rpb25zLmNsaWNrXCIsIChlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGZvcm0gPSB0aGlzLmZvcm07XG5cblx0XHRcdFx0aWYgKGZvcm0gaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnQpIHtcblx0XHRcdFx0XHRmb3JtLnJlcXVlc3RTdWJtaXQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGJyZWFrO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkgeztcblx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09YnV0dG9uXWAsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuXG4gICAgICAgICAgICA8bW9uc3Rlci1zdGF0ZS1idXR0b24gZXhwb3J0cGFydHM9XCJidXR0b246YnV0dG9uLWJ1dHRvbixjb250cm9sOmJ1dHRvbi1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1vcHRpb24tY2xhc3Nlcy1idXR0b24gcGF0aDpjbGFzc2VzLmJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydD1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmJ1dHRvblwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvbW9uc3Rlci1zdGF0ZS1idXR0b24+XG5cblxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJtb25zdGVyLWNvbG9yLXByaW1hcnktMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJhcnJvd1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJtZXNzYWdlXCIgcGFydD1cIm1lc3NhZ2VcIiBjbGFzcz1cImZsZXhcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm1lc3NhZ2UuY29udGVudFwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoTWVzc2FnZVN0YXRlQnV0dG9uKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfUk9MRSB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgdHlwZU9mIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVvZi5tanNcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuL2J1dHRvbi5tanNcIjtcbmltcG9ydCB7IFBvcHBlckJ1dHRvbiB9IGZyb20gXCIuL3BvcHBlci1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBDb25maXJtQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvY29uZmlybS1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcblxuaW1wb3J0IFwiLi9idXR0b24ubWpzXCI7XG5pbXBvcnQgXCIuL21lc3NhZ2Utc3RhdGUtYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgUG9wcGVyQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvcG9wcGVyLWJ1dHRvbi5tanNcIjtcbmltcG9ydCB7IFN0YXRlQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvc3RhdGUtYnV0dG9uLm1qc1wiO1xuXG5leHBvcnQgeyBDb25maXJtQnV0dG9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29uZmlybUJ1dHRvbkVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNhbmNlbEJ1dHRvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjYW5jZWxCdXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIFRoaXMgYWN0aW9uIGNhbGxiYWNrIGV4ZWN1dGVzIHRoZSBhY3Rpb25zIHdoZW4gYSBidXR0b24gaXMgY2xpY2tlZC5cbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1+ZXhhbXBsZUFjdGlvbkNhbGxiYWNrXG4gKiBAcGFyYW0ge0V2ZW50fSBlIEV2ZW50XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEB0aGlzIHtDdXN0b21Db250cm9sfVxuICovXG5cbi8qKlxuICogVGhpcyBDdXN0b21Db250cm9sIGNyZWF0ZXMgYSBjb25maXJtIGJ1dHRvbiBlbGVtZW50IHdpdGggYSB2YXJpZXR5IG9mIG9wdGlvbnMuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9jb25maXJtLWJ1dHRvbi5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnlcbiAqIGFzIHdlbGwgYXMgW3Bvb3BlcmpzXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pLlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItY29uZmlybS1idXR0b24gLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY29uZmlybS1idXR0b24nKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1jb25maXJtLWJ1dHRvbj48L21vbnN0ZXItY29uZmlybS1idXR0b24+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IHtDb25maXJtQnV0dG9ufSBmcm9tICdAc2NodWthaS9jb21wb25lbnQtZm9ybS9zb3VyY2UvY29uZmlybS1idXR0b24uanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jb25maXJtLWJ1dHRvbicpO1xuICogYGBgXG4gKiBUaGUgYGRhdGEtbW9uc3Rlci1idXR0b24tY2xhc3NgIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIENTUyBjbGFzcyBvZiB0aGUgYnV0dG9uLlxuICpcbiAqIEBzdGFydHVtbCBjb25maXJtLWJ1dHRvbi5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEN1c3RvbUNvbnRyb2xcbiAqIEN1c3RvbUNvbnRyb2wgPHwtLSBCdXR0b25cbiAqIEJ1dHRvbiA8fC0tIFBvcHBlckJ1dHRvblxuICogUG9wcGVyQnV0dG9uIDx8LS0gQ29uZmlybUJ1dHRvblxuICogQGVuZHVtbFxuICpcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHN1bW1hcnkgQSBjb25maXJtIGJ1dHRvblxuICovXG5jbGFzcyBDb25maXJtQnV0dG9uIGV4dGVuZHMgUG9wcGVyQnV0dG9uIHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL2NvbXBvbmVudC1mb3JtL2NvbmZpcm0tYnV0dG9uQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBodG1sIHRhZyB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRvZ2dsZUV2ZW50VHlwZT1jbGljayx0b3VjaCBMaXN0IG9mIGV2ZW50IHR5cGVzIHRvIGJlIG9ic2VydmVkIGZvciBvcGVuaW5nIHRoZSBjb25maXJtIG1lc3NhZ2Vcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLmJ1dHRvbj0nPHNsb3QgbmFtZT1cImJ1dHRvblwiPjwvc2xvdD4nIEJ1dHRvbiBsYWJlbFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLm1lc3NhZ2U9JzxzbG90PlNob3VsZCBJIFN0YXkgb3IgU2hvdWxkIEkgR28/PC9zbG90PicgTWVzc2FnZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLmNvbmZpcm09JzxzbG90IG5hbWU9XCJjb25maXJtXCI+Q29uZmlybTwvc2xvdD4nIENvbmZpcm0gYnV0dG9uIGxhYmVsXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMuY2FuY2VsPSc8c2xvdCBuYW1lPVwiY2FuY2VsXCI+Q2FuY2VsPC9zbG90PicgQ2FuY2VsIGJ1dHRvbiBsYWJlbFxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVBY3Rpb25DYWxsYmFja30gYWN0aW9ucy5jb25maXJtXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm1+ZXhhbXBsZUFjdGlvbkNhbGxiYWNrfSBhY3Rpb25zLmNhbmNlbCBMaXN0IG9mIGV2ZW50IHR5cGVzIHRvIGJlIG9ic2VydmVkIGZvciBvcGVuaW5nIHRoZSBkcm9wZG93blxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcG9wcGVyIFtQb3BwZXJKUyBPcHRpb25zXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwb3BwZXIucGxhY2VtZW50PXRvcCBQb3BwZXJKUyBwbGFjZW1lbnRcblx0ICogQGV4dGVuZHMge1BvcHBlckJ1dHRvbn1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHs7XG5cblx0XHRjb25zdCBvYmogPSBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0bGFiZWxzOiB7XG5cdFx0XHRcdGJ1dHRvbjogJzxzbG90IG5hbWU9XCJidXR0b25cIj48L3Nsb3Q+Jyxcblx0XHRcdFx0bWVzc2FnZTogXCI8c2xvdD5TaG91bGQgSSBTdGF5IG9yIFNob3VsZCBJIEdvPzwvc2xvdD5cIixcblx0XHRcdFx0Y29uZmlybTogJzxzbG90IG5hbWU9XCJjb25maXJtXCI+Q29uZmlybTwvc2xvdD4nLFxuXHRcdFx0XHRjYW5jZWw6ICc8c2xvdCBuYW1lPVwiY2FuY2VsXCI+Q2FuY2VsPC9zbG90PicsXG5cdFx0XHR9LFxuXHRcdH0pO1xuXG5cdFx0b2JqW1wiY2xhc3Nlc1wiXVtcImNvbmZpcm1CdXR0b25cIl0gPSBcIm1vbnN0ZXItYnV0dG9uLXByaW1hcnlcIjtcblx0XHRvYmpbXCJjbGFzc2VzXCJdW1wiY2FuY2VsQnV0dG9uXCJdID0gXCJtb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnlcIjtcblx0XHRvYmpbXCJhY3Rpb25zXCJdW1wiY2FuY2VsXCJdID0gKGUpID0+IHtcblx0XHRcdHRoaXMuaGlkZURpYWxvZygpO1xuXHRcdH07XG5cblx0XHRvYmpbXCJhY3Rpb25zXCJdW1wiY29uZmlybVwiXSA9IChlKSA9PiB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGlzIGNhbGxiYWNrIG11c3QgYmUgaW1wbGVtZW50ZWRcIik7XG5cdFx0fTtcblxuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHRoaWRlRGlhbG9nKCkgeztcblx0XHRzdXBlci5oaWRlRGlhbG9nKCk7XG5cdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0ucmVtb3ZlU3RhdGUoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJCdXR0b259XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpOztcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRoYW5kbGVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWNvbmZpcm0tYnV0dG9uXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7QXJyYXl9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRjb25zdCBzdHlsZXMgPSBQb3BwZXJCdXR0b24uZ2V0Q1NTU3R5bGVTaGVldCgpO1xuXHRcdHN0eWxlcy5wdXNoKENvbmZpcm1CdXR0b25TdHlsZVNoZWV0KTtcblx0XHRyZXR1cm4gc3R5bGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJCdXR0b259XG5cdCAqL1xuXHRzaG93RGlhbG9nKCkgeztcblx0XHRjb25zdCBjb25maXJtQnV0dG9uQ2xhc3MgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuY29uZmlybUJ1dHRvblwiKTtcblx0XHRpZiAoY29uZmlybUJ1dHRvbkNsYXNzKSB7XG5cdFx0XHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XHRcdFwiY2xhc3Nlcy5idXR0b25cIixcblx0XHRcdFx0Y29uZmlybUJ1dHRvbkNsYXNzLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRjb25zdCBjYW5jZWxCdXR0b25DbGFzcyA9IHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5jYW5jZWxCdXR0b25cIik7XG5cdFx0aWYgKGNhbmNlbEJ1dHRvbkNsYXNzKSB7XG5cdFx0XHR0aGlzW2NhbmNlbEJ1dHRvbkVsZW1lbnRTeW1ib2xdLnNldE9wdGlvbihcblx0XHRcdFx0XCJjbGFzc2VzLmJ1dHRvblwiLFxuXHRcdFx0XHRjYW5jZWxCdXR0b25DbGFzcyxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHN1cGVyLnNob3dEaWFsb2coKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGNvbmZpcm0gYnV0dG9uIHN0YXRlXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZVxuXHQgKiBAcGFyYW0ge251bWJlcn0gdGltZW91dFxuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uQ29uZmlybUJ1dHRvbn1cblx0ICovXG5cdHNldENvbmZpcm1CdXR0b25TdGF0ZShzdGF0ZSwgdGltZW91dCkgeztcblx0XHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRTdGF0ZShzdGF0ZSwgdGltZW91dCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGFuZCBzaG93IHRoZSBjb25maXJtIGJ1dHRvbiBtZXNzYWdlXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0XG5cdCAqIEByZXR1cm5zIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Db25maXJtQnV0dG9ufVxuXHQgKi9cblx0c2hvd0NvbmZpcm1CdXR0b25NZXNzYWdlKG1lc3NhZ2UsIHRpbWVvdXQpIHs7XG5cdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0TWVzc2FnZShtZXNzYWdlKTtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXNbY29uZmlybUJ1dHRvbkVsZW1lbnRTeW1ib2xdLnNob3dNZXNzYWdlKHRpbWVvdXQpO1xuXHRcdH0sIDApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB0eXBlXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aW9uKHR5cGUpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIChldmVudCkgeztcblxuXHRcdGNvbnN0IGNhbGxiYWNrID0gc2VsZi5nZXRPcHRpb24oYGFjdGlvbnMuJHt0eXBlfWApO1xuXHRcdGlmICh0eXBlT2YoY2FsbGJhY2spICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjYWxsYmFjay5jYWxsKHRoaXMsIGV2ZW50KTtcblx0fTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7aW5pdEV2ZW50aGFuZGxlcn1cbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJCdXR0b24jbW9uc3Rlci1jb25maXJtXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUG9wcGVyQnV0dG9uI21vbnN0ZXItY29uZmlybWVkXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudGhhbmRsZXIoKSB7O1xuXG5cdHRoaXNbY2FuY2VsQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFxuXHRcdFwiY2xpY2tFdmVudFR5cGVcIixcblx0XHR0aGlzLmdldE9wdGlvbihcImNsaWNrRXZlbnRUeXBlXCIsIFtcImNsaWNrXCJdKSxcblx0KTtcblx0dGhpc1tjYW5jZWxCdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XCJhY3Rpb25zLmNsaWNrXCIsXG5cdFx0Z2V0QWN0aW9uLmNhbGwodGhpcywgXCJjYW5jZWxcIiksXG5cdCk7XG5cblx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFxuXHRcdFwiY2xpY2tFdmVudFR5cGVcIixcblx0XHR0aGlzLmdldE9wdGlvbihcImNsaWNrRXZlbnRUeXBlXCIsIFtcImNsaWNrXCJdKSxcblx0KTtcblx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiLCAoKSA9PiB7XG5cdFx0Y29uc3QgY2FsbGJhY2sgPSBnZXRBY3Rpb24uY2FsbCh0aGlzLCBcImNvbmZpcm1cIik7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1jb25maXJtXCIsIHt9KTtcblx0XHRjYWxsYmFjay5jYWxsKHRoaXMpO1xuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItY29uZmlybWVkXCIsIHt9KTtcblx0fSk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkgeztcblx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNvbmZpcm1dYCxcblx0KTtcblx0dGhpc1tjYW5jZWxCdXR0b25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y2FuY2VsXWAsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcblxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiZGlzYWJsZWQgcGF0aDpkaXNhYmxlZCB8IGlmOnRydWUsIGNsYXNzIHBhdGg6Y2xhc3Nlcy5idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIHBhcnQ9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmJ1dHRvblwiPjwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwicG9wcGVyXCIgcGFydD1cInBvcHBlclwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cIm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImFycm93XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwibWVzc2FnZVwiIGNsYXNzPVwiZmxleFwiIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMubWVzc2FnZVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJkZWNpc2lvblwiPlxuICAgICAgICAgICAgICAgICAgICA8bW9uc3Rlci1tZXNzYWdlLXN0YXRlLWJ1dHRvbiBleHBvcnRwYXJ0cz1cIm1vbnN0ZXItc3RhdGUtYnV0dG9uOmNvbmZpcm0tYnV0dG9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbDpjb25maXJtLWNvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24tYnV0dG9uOmNvbmZpcm0tY29udHJvbC1idXR0b24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24tY29udHJvbDpjb25maXJtLWJ1dHRvbi1jb250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wcGVyOmNvbmZpcm0tcG9wcGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpjb25maXJtLXBvcHBlci1tZXNzYWdlLW1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOmNvbmZpcm0tcG9wcGVyLW1lc3NhZ2UtaWNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOmNvbmZpcm0tcG9wcGVyLW1lc3NhZ2UtdGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1idXR0b24tY2xhc3MgcGF0aDpjbGFzc2VzLmNvbmZpcm1CdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbmZpcm1cIiBwYXJ0PVwiY29uZmlybVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5jb25maXJtXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L21vbnN0ZXItbWVzc2FnZS1zdGF0ZS1idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgPG1vbnN0ZXItYnV0dG9uIGV4cG9ydHBhcnRzPVwiYnV0dG9uOmNhbmNlbC1idXR0b24sY29udHJvbDpjYW5jZWwtY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1idXR0b24tY2xhc3MgcGF0aDpjbGFzc2VzLmNhbmNlbEJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImNhbmNlbFwiIHBhcnQ9XCJjYW5jZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMuY2FuY2VsXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L21vbnN0ZXItYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIGA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChDb25maXJtQnV0dG9uKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IHBhcnNlRGF0YVVSTCB9IGZyb20gXCIuLi90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBQcm94eU9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi9wYXRoZmluZGVyLm1qc1wiO1xuXG5leHBvcnQgeyBEYXRhc291cmNlIH07XG5cbi8qKlxuICogVGhpcyBjYWxsYmFjayBjYW4gYmUgcGFzc2VkIHRvIGEgZGF0YXNvdXJjZSBhbmQgaXMgdXNlZCB0byBhZGFwdCBkYXRhIHN0cnVjdHVyZXMuXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlfmV4YW1wbGVDYWxsYmFja1xuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAgS2V5XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKiBAc2VlIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlXG4gKi9cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRhdGFcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBpbnRlcm5hbERhdGFTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL0BAZGF0YVwiLFxuKTtcblxuLyoqXG4gKiBUaGUgZGF0YXNvdXJjZSBjbGFzcyBpcyB0aGUgYmFzaXMgZm9yIGRlYWxpbmcgd2l0aCBkaWZmZXJlbnQgZGF0YSBzb3VyY2VzLlxuICogSXQgcHJvdmlkZXMgYSB1bmlmaWVkIGludGVyZmFjZSBmb3IgYWNjZXNzaW5nIGRhdGFcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9kYXRhL2RhdGFzb3VyY2UubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIyLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKiBAc3VtbWFyeSBUaGUgZGF0YXNvdXJjZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMuXG4gKi9cbmNsYXNzIERhdGFzb3VyY2UgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIGNyZWF0ZXMgYSBuZXcgZGF0YXNvdXJjZVxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gbmV3IFByb3h5T2JzZXJ2ZXIoe1xuXHRcdFx0b3B0aW9uczogZXh0ZW5kKHt9LCB0aGlzLmRlZmF1bHRzKSxcblx0XHR9KTtcblxuXHRcdHRoaXNbaW50ZXJuYWxEYXRhU3ltYm9sXSA9IG5ldyBQcm94eU9ic2VydmVyKHt9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBhdHRhY2ggYSBuZXcgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybnMge0RhdGFzb3VyY2V9XG5cdCAqL1xuXHRhdHRhY2hPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHRoaXNbaW50ZXJuYWxEYXRhU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogZGV0YWNoIGEgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybnMge0RhdGFzb3VyY2V9XG5cdCAqL1xuXHRkZXRhY2hPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHRoaXNbaW50ZXJuYWxEYXRhU3ltYm9sXS5kZXRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRjb250YWluc09ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxEYXRhU3ltYm9sXS5jb250YWluc09ic2VydmVyKG9ic2VydmVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXJpdmVkIGNsYXNzZXMgY2FuIG92ZXJyaWRlIGFuZCBleHRlbmQgdGhpcyBtZXRob2QgYXMgZm9sbG93cy5cblx0ICpcblx0ICogYGBgXG5cdCAqIGdldCBkZWZhdWx0cygpIHtcblx0ICogICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdCAqICAgICAgICBteVZhbHVlOnRydWVcblx0ICogICAgfSk7XG5cdCAqIH1cblx0ICogYGBgXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBvcHRpb25cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKi9cblx0c2V0T3B0aW9uKHBhdGgsIHZhbHVlKSB7XG5cdFx0bmV3IFBhdGhmaW5kZXIodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpW1wib3B0aW9uc1wiXSkuc2V0VmlhKFxuXHRcdFx0cGF0aCxcblx0XHRcdHZhbHVlLFxuXHRcdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge0RhdGFzb3VyY2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uXG5cdCAqL1xuXHRzZXRPcHRpb25zKG9wdGlvbnMpIHtcblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSBwYXJzZU9wdGlvbnNKU09OKG9wdGlvbnMpO1xuXHRcdH1cblx0XHRleHRlbmQoXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJvcHRpb25zXCJdLFxuXHRcdFx0dGhpcy5kZWZhdWx0cyxcblx0XHRcdG9wdGlvbnMsXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIG5lc3RlZCBvcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgYnkgcGF0aCBgYS5iLmNgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRnZXRPcHRpb24ocGF0aCwgZGVmYXVsdFZhbHVlKSB7XG5cdFx0bGV0IHZhbHVlO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhbHVlID0gbmV3IFBhdGhmaW5kZXIoXG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLFxuXHRcdFx0KS5nZXRWaWEocGF0aCk7XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZGVmYXVsdFZhbHVlO1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXMuXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRyZWFkKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlcy5cblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgcmVhbCBvYmplY3Rcblx0ICpcblx0ICogQHJldHVybiB7T2JqZWN0fEFycmF5fVxuXHQgKi9cblx0Z2V0KCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdHxBcnJheX0gZGF0YVxuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKi9cblx0c2V0KGRhdGEpIHtcblx0XHR0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uc2V0U3ViamVjdChkYXRhKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZVwiKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGF0YVxuICogQHJldHVybiB7T2JqZWN0fVxuICogQHRocm93cyB7RXJyb3J9IHRoZSBvcHRpb25zIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBqc29uIGRlZmluaXRpb25cbiAqL1xuZnVuY3Rpb24gcGFyc2VPcHRpb25zSlNPTihkYXRhKSB7XG5cdGlmIChpc1N0cmluZyhkYXRhKSkge1xuXHRcdC8vIHRoZSBjb25maWd1cmF0aW9uIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBkYXRhIHVybC5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZGF0YVVybCA9IHBhcnNlRGF0YVVSTChkYXRhKTtcblx0XHRcdGRhdGEgPSBkYXRhVXJsLmNvbnRlbnQ7XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBvYmogPSBKU09OLnBhcnNlKGRhdGEpO1xuXHRcdFx0dmFsaWRhdGVPYmplY3Qob2JqKTtcblx0XHRcdHJldHVybiBvYmo7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgdGhlIG9wdGlvbnMgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gZGVmaW5pdGlvbiAoYWN0dWFsOiAke2RhdGF9KS5gLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge307XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBEYXRhc291cmNlIH0gZnJvbSBcIi4uL2RhdGFzb3VyY2UubWpzXCI7XG5cbmV4cG9ydCB7IFN0b3JhZ2UsIHN0b3JhZ2VPYmplY3RTeW1ib2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3RvcmFnZU9iamVjdFN5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9AQHN0b3JhZ2VPYmplY3RcIixcbik7XG5cbi8qKlxuICogVGhlIGNsYXNzIHJlcHJlc2VudHMgYSByZWNvcmQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlXG4gKiBAc3VtbWFyeSBUaGUgU3RvcmFnZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMgb3ZlciBXZWJTdG9yYWdlQVBJLlxuICovXG5jbGFzcyBTdG9yYWdlIGV4dGVuZHMgRGF0YXNvdXJjZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5IExvY2FsU3RvcmFnZSBLZXlcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICovXG5cdGNvbnN0cnVjdG9yKGtleSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJrZXlcIiwgdmFsaWRhdGVTdHJpbmcoa2V5KSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30ga2V5PXVuZGVmaW5lZCBMb2NhbFN0b3JhZ2UgS2V5XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRrZXk6IHVuZGVmaW5lZCxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXMuXG5cdCAqIEByZXR1cm4ge2V4dGVybmFsOlN0b3JhZ2V9XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRbc3RvcmFnZU9iamVjdFN5bWJvbF0oKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXNcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBvcHRpb25zIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBqc29uIGRlZmluaXRpb25cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3Rcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBkYXRhIGNhbm5vdCBiZSByZWFkXG5cdCAqL1xuXHRyZWFkKCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdFx0Y29uc3Qgc3RvcmFnZSA9IHNlbGZbc3RvcmFnZU9iamVjdFN5bWJvbF0oKTtcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdFx0Y29uc3QgZGF0YSA9IEpTT04ucGFyc2Uoc3RvcmFnZS5nZXRJdGVtKHNlbGYuZ2V0T3B0aW9uKFwia2V5XCIpKSk7XG5cdFx0XHRzZWxmLnNldChkYXRhID8/IHt9KTtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTdG9yYWdlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGRhdGEgY2Fubm90IGJlIHdyaXR0ZW5cblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdFx0Y29uc3Qgc3RvcmFnZSA9IHNlbGZbc3RvcmFnZU9iamVjdFN5bWJvbF0oKTtcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdFx0Y29uc3QgZGF0YSA9IHNlbGYuZ2V0KCk7XG5cdFx0XHRpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHN0b3JhZ2UucmVtb3ZlSXRlbShzZWxmLmdldE9wdGlvbihcImtleVwiKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzdG9yYWdlLnNldEl0ZW0oc2VsZi5nZXRPcHRpb24oXCJrZXlcIiksIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1N0b3JhZ2V9XG5cdCAqL1xuXHRnZXRDbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFN0b3JhZ2UodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0ua2V5KTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgRGF0YXNvdXJjZSB9IGZyb20gXCIuLi9kYXRhc291cmNlLm1qc1wiO1xuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHsgUGlwZSB9IGZyb20gXCIuLi9waXBlLm1qc1wiO1xuXG5leHBvcnQgeyBTZXJ2ZXIgfTtcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgc2VydmVyIGRhdGFzb3VyY2VzXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy40LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhLkRhdGFzb3VyY2VcbiAqIEBzdW1tYXJ5IFRoZSBTZXJ2ZXIgY2xhc3MgZW5jYXBzdWxhdGVzIHRoZSBhY2Nlc3MgdG8gYSBzZXJ2ZXIgZGF0YXNvdXJjZVxuICovXG5jbGFzcyBTZXJ2ZXIgZXh0ZW5kcyBEYXRhc291cmNlIHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgcHJlcGFyZXMgdGhlIGRhdGEgdGhhdCBjb21lcyBmcm9tIHRoZSBzZXJ2ZXIuXG5cdCAqIFNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGF5bG9hZFxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fVxuXHQgKi9cblx0dHJhbnNmb3JtU2VydmVyUGF5bG9hZChwYXlsb2FkKSB7XG5cdFx0cGF5bG9hZCA9IGRvVHJhbnNmb3JtLmNhbGwodGhpcywgXCJyZWFkXCIsIHBheWxvYWQpO1xuXG5cdFx0Y29uc3QgZGF0YVBhdGggPSB0aGlzLmdldE9wdGlvbihcInJlYWQucGF0aFwiKTtcblx0XHRpZiAoZGF0YVBhdGgpIHtcblx0XHRcdHBheWxvYWQgPSBuZXcgUGF0aGZpbmRlcihwYXlsb2FkKS5nZXRWaWEoZGF0YVBhdGgpO1xuXHRcdH1cblxuXHRcdHJldHVybiBwYXlsb2FkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgcHJlcGFyZXMgdGhlIGRhdGEgZm9yIHdyaXRpbmcgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGF5bG9hZFxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fVxuXHQgKi9cblx0cHJlcGFyZVNlcnZlclBheWxvYWQocGF5bG9hZCkge1xuXHRcdHBheWxvYWQgPSBkb1RyYW5zZm9ybS5jYWxsKHRoaXMsIFwid3JpdGVcIiwgcGF5bG9hZCk7XG5cblx0XHRjb25zdCBzaGVhdGhpbmdPYmplY3QgPSB0aGlzLmdldE9wdGlvbihcIndyaXRlLnNoZWF0aGluZy5vYmplY3RcIik7XG5cdFx0Y29uc3Qgc2hlYXRoaW5nUGF0aCA9IHRoaXMuZ2V0T3B0aW9uKFwid3JpdGUuc2hlYXRoaW5nLnBhdGhcIik7XG5cblx0XHRpZiAoc2hlYXRoaW5nT2JqZWN0ICYmIHNoZWF0aGluZ1BhdGgpIHtcblx0XHRcdGNvbnN0IHN1YiA9IHBheWxvYWQ7XG5cdFx0XHRwYXlsb2FkID0gc2hlYXRoaW5nT2JqZWN0O1xuXHRcdFx0bmV3IFBhdGhmaW5kZXIocGF5bG9hZCkuc2V0VmlhKHNoZWF0aGluZ1BhdGgsIHN1Yik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBheWxvYWQ7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHNlbGZcbiAqIEBwYXJhbSBvYmpcbiAqIEByZXR1cm5zIHsqfVxuICovXG5mdW5jdGlvbiBkb1RyYW5zZm9ybSh0eXBlLCBvYmopIHtcblx0Y29uc3QgdHJhbnNmb3JtYXRpb24gPSB0aGlzLmdldE9wdGlvbihgJHt0eXBlfS5tYXBwaW5nLnRyYW5zZm9ybWVyYCk7XG5cdGlmICh0cmFuc2Zvcm1hdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Y29uc3QgcGlwZSA9IG5ldyBQaXBlKHRyYW5zZm9ybWF0aW9uKTtcblx0XHRjb25zdCBjYWxsYmFja3MgPSB0aGlzLmdldE9wdGlvbihgJHt0eXBlfS5tYXBwaW5nLmNhbGxiYWNrc2ApO1xuXG5cdFx0aWYgKGlzT2JqZWN0KGNhbGxiYWNrcykpIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIGNhbGxiYWNrcykge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0Y2FsbGJhY2tzLmhhc093blByb3BlcnR5KGtleSkgJiZcblx0XHRcdFx0XHR0eXBlb2YgY2FsbGJhY2tzW2tleV0gPT09IFwiZnVuY3Rpb25cIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRwaXBlLnNldENhbGxiYWNrKGtleSwgY2FsbGJhY2tzW2tleV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0b2JqID0gcGlwZS5ydW4ob2JqKTtcblx0fVxuXG5cdHJldHVybiBvYmo7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBXcml0ZUVycm9yIH07XG5cbi8qKlxuICogRXJyb3IgbWVzc2FnZSBmb3IgQVBJIHJlcXVlc3RzIHdpdGggZXh0ZW5zaW9uIG9mIHJlcXVlc3QgYW5kIHZhbGlkYXRpb24uXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlLlNlcnZlci5SZXN0QVBJXG4gKiBAc3VtbWFyeSB0aGUgZXJyb3IgaXMgdGhyb3duIGJ5IHRoZSByZXN0IGFwaSBpbiBjYXNlIG9mIGVycm9yXG4gKi9cbmNsYXNzIFdyaXRlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuXHQgKiBAcGFyYW0ge1Jlc3BvbnNlfSByZXNwb25zZVxuXHQgKi9cblx0Y29uc3RydWN0b3IobWVzc2FnZSwgcmVzcG9uc2UsIHZhbGlkYXRpb24pIHtcblx0XHRzdXBlcihtZXNzYWdlKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdHJlc3BvbnNlOiByZXNwb25zZSxcblx0XHRcdHZhbGlkYXRpb246IHZhbGlkYXRpb24sXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL3dyaXRlZXJyb3JcIixcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Jlc3BvbnNlfVxuXHQgKi9cblx0Z2V0UmVzcG9uc2UoKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wicmVzcG9uc2VcIl07XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7T2JqZWN0fVxuXHQgKi9cblx0Z2V0VmFsaWRhdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJ2YWxpZGF0aW9uXCJdO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBEYXRhRmV0Y2hFcnJvciB9O1xuXG4vKipcbiAqIEVycm9yIG1lc3NhZ2UgZm9yIEFQSSByZXF1ZXN0c1xuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNDMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRhdGEuRGF0YXNvdXJjZS5TZXJ2ZXIuUmVzdEFQSVxuICogQHN1bW1hcnkgdGhlIGVycm9yIGlzIHRocm93biBieSB0aGUgcmVzdCBhcGkgaW4gY2FzZSBvZiBlcnJvclxuICovXG5jbGFzcyBEYXRhRmV0Y2hFcnJvciBleHRlbmRzIEVycm9yIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG5cdCAqIEBwYXJhbSB7UmVzcG9uc2V9IHJlc3BvbnNlXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihtZXNzYWdlLCByZXNwb25zZSkge1xuXHRcdHN1cGVyKG1lc3NhZ2UpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0cmVzcG9uc2U6IHJlc3BvbnNlLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFxuXHRcdFx0XCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS9kYXRhZmV0Y2hlcnJvckBAaW5zdGFuY2VcIixcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Jlc3BvbnNlfVxuXHQgKi9cblx0Z2V0UmVzcG9uc2UoKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wicmVzcG9uc2VcIl07XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCwgaXNGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IFNlcnZlciB9IGZyb20gXCIuLi9zZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBXcml0ZUVycm9yIH0gZnJvbSBcIi4vcmVzdGFwaS93cml0ZWVycm9yLm1qc1wiO1xuaW1wb3J0IHsgRGF0YUZldGNoRXJyb3IgfSBmcm9tIFwiLi9yZXN0YXBpL2RhdGEtZmV0Y2gtZXJyb3IubWpzXCI7XG5cbmV4cG9ydCB7IFJlc3RBUEkgfTtcblxuLyoqXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQG1lbWJlck9mIE1vbnN0ZXJcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuMTIuMFxuICovXG5jb25zdCByYXdEYXRhU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS9yYXdkYXRhXCIsXG4pO1xuXG4vKipcbiAqIFRoZSBSZXN0QVBJIGlzIGEgY2xhc3MgdGhhdCBlbmFibGVzIGEgUkVTVCBBUEkgc2VydmVyLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vLi4vLi4vZXhhbXBsZS9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3Jlc3RhcGkubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIyLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhLkRhdGFzb3VyY2UuU2VydmVyXG4gKiBAc3VtbWFyeSBUaGUgUmVzdEFQSSBpcyBhIGNsYXNzIHRoYXQgYmluZHMgYSBSRVNUIEFQSSBzZXJ2ZXIuXG4gKi9cbmNsYXNzIFJlc3RBUEkgZXh0ZW5kcyBTZXJ2ZXIge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBvcHRpb25zIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciB0aGUgZGF0YXNvdXJjZS5cblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKGlzT2JqZWN0KG9wdGlvbnMpKSB7XG5cdFx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZT17fSBPcHRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5pbml0PXt9IEFuIG9wdGlvbnMgb2JqZWN0IGNvbnRhaW5pbmcgYW55IGN1c3RvbSBzZXR0aW5ncyB0aGF0IHlvdSB3YW50IHRvIGFwcGx5IHRvIHRoZSByZXF1ZXN0LiBUaGUgcGFyYW1ldGVycyBhcmUgaWRlbnRpY2FsIHRvIHRob3NlIG9mIHRoZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1JlcXVlc3QvUmVxdWVzdHxSZXF1ZXN0IGNvbnN0cnVjdG9yfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gd3JpdGUuaW5pdC5tZXRob2Q9UE9TVFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUuaW5pdC5oZWFkZXJzIE9iamVjdCBjb250YWluaW5nIGFueSBjdXN0b20gaGVhZGVycyB0aGF0IHlvdSB3YW50IHRvIGFwcGx5IHRvIHRoZSByZXF1ZXN0LlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gd3JpdGUucmVzcG9uc2VDYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgcmVxdWVzdCBoYXMgYmVlbiBjb21wbGV0ZWQuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3cml0ZS5hY2NlcHRlZFN0YXR1cz1bMjAwLDIwMV1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHdyaXRlLnVybCBVUkxcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLm1hcHBpbmcgdGhlIG1hcHBpbmcgaXMgYXBwbGllZCBiZWZvcmUgd3JpdGluZy5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHdyaXRlLm1hcHBpbmcudHJhbnNmb3JtZXIgVHJhbnNmb3JtZXIgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBlbnRyaWVzXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5EYXRhLkRhdGFzb3VyY2V+ZXhhbXBsZUNhbGxiYWNrW119IHdyaXRlLm1hcHBpbmcuY2FsbGJhY2sgd2l0aCB0aGUgaGVscCBvZiB0aGUgY2FsbGJhY2ssIHRoZSBzdHJ1Y3R1cmVzIGNhbiBiZSBhZGp1c3RlZCBiZWZvcmUgd3JpdGluZy5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLnJlcG9ydFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gd3JpdGUucmVwb3J0LnBhdGggUGF0aCB0byB2YWxpZGF0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUuc2hlYXRoaW5nXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5zaGVhdGhpbmcub2JqZWN0IE9iamVjdCB0byBiZSB3cmFwcGVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3cml0ZS5zaGVhdGhpbmcucGF0aCBQYXRoIHRvIHRoZSBkYXRhXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSByZWFkPXt9IE9wdGlvbnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlYWQuaW5pdD17fSBBbiBvcHRpb25zIG9iamVjdCBjb250YWluaW5nIGFueSBjdXN0b20gc2V0dGluZ3MgdGhhdCB5b3Ugd2FudCB0byBhcHBseSB0byB0aGUgcmVxdWVzdC4gVGhlIHBhcmFtZXRlcnMgYXJlIGlkZW50aWNhbCB0byB0aG9zZSBvZiB0aGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9SZXF1ZXN0L1JlcXVlc3R8UmVxdWVzdCBjb25zdHJ1Y3Rvcn1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlYWQuaW5pdC5tZXRob2Q9R0VUXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWFkLmFjY2VwdGVkU3RhdHVzPVsyMDBdXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWFkLnVybCBVUkxcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlYWQubWFwcGluZyB0aGUgbWFwcGluZyBpcyBhcHBsaWVkIGFmdGVyIHJlYWRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSByZWFkLm1hcHBpbmcudHJhbnNmb3JtZXIgVHJhbnNmb3JtZXIgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBlbnRyaWVzXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5EYXRhLkRhdGFzb3VyY2V+ZXhhbXBsZUNhbGxiYWNrW119IHJlYWQubWFwcGluZy5jYWxsYmFjayB3aXRoIHRoZSBoZWxwIG9mIHRoZSBjYWxsYmFjaywgdGhlIHN0cnVjdHVyZXMgY2FuIGJlIGFkanVzdGVkIGFmdGVyIHJlYWRpbmcuXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR3cml0ZToge1xuXHRcdFx0XHRpbml0OiB7XG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVzcG9uc2VDYWxsYmFjazogdW5kZWZpbmVkLFxuXHRcdFx0XHRhY2NlcHRlZFN0YXR1czogWzIwMCwgMjAxXSxcblx0XHRcdFx0dXJsOiB1bmRlZmluZWQsXG5cdFx0XHRcdG1hcHBpbmc6IHtcblx0XHRcdFx0XHR0cmFuc2Zvcm1lcjogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNhbGxiYWNrczogW10sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNoZWF0aGluZzoge1xuXHRcdFx0XHRcdG9iamVjdDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdHBhdGg6IHVuZGVmaW5lZCxcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVwb3J0OiB7XG5cdFx0XHRcdFx0cGF0aDogdW5kZWZpbmVkLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHJlYWQ6IHtcblx0XHRcdFx0aW5pdDoge1xuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVzcG9uc2VDYWxsYmFjazogdW5kZWZpbmVkLFxuXHRcdFx0XHRhY2NlcHRlZFN0YXR1czogWzIwMF0sXG5cdFx0XHRcdHVybDogdW5kZWZpbmVkLFxuXHRcdFx0XHRtYXBwaW5nOiB7XG5cdFx0XHRcdFx0dHJhbnNmb3JtZXI6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRjYWxsYmFja3M6IFtdLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9wdGlvbnMgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gZGVmaW5pdGlvblxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGRhdGEgY2Fubm90IGJlIHJlYWRcblx0ICovXG5cdHJlYWQoKSB7XG5cdFx0bGV0IGluaXQgPSB0aGlzLmdldE9wdGlvbihcInJlYWQuaW5pdFwiKTtcblx0XHRpZiAoIWlzT2JqZWN0KGluaXQpKSBpbml0ID0ge307XG5cdFx0aWYgKCFpbml0W1wibWV0aG9kXCJdKSBpbml0W1wibWV0aG9kXCJdID0gXCJHRVRcIjtcblxuXHRcdGxldCBjYWxsYmFjayA9IHRoaXMuZ2V0T3B0aW9uKFwicmVhZC5yZXNwb25zZUNhbGxiYWNrXCIpO1xuXHRcdGlmICghY2FsbGJhY2spXG5cdFx0XHRjYWxsYmFjayA9IChvYmopID0+IHtcblx0XHRcdFx0dGhpcy5zZXQodGhpcy50cmFuc2Zvcm1TZXJ2ZXJQYXlsb2FkLmNhbGwodGhpcywgb2JqKSk7XG5cdFx0XHR9O1xuXG5cdFx0cmV0dXJuIGZldGNoRGF0YS5jYWxsKHRoaXMsIGluaXQsIFwicmVhZFwiLCBjYWxsYmFjayk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICogQHRocm93cyB7V3JpdGVFcnJvcn0gdGhlIGRhdGEgY2Fubm90IGJlIHdyaXR0ZW5cblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdGxldCBpbml0ID0gdGhpcy5nZXRPcHRpb24oXCJ3cml0ZS5pbml0XCIpO1xuXHRcdGlmICghaXNPYmplY3QoaW5pdCkpIGluaXQgPSB7fTtcblx0XHRpZiAodHlwZW9mIGluaXRbXCJoZWFkZXJzXCJdICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRpbml0W1wiaGVhZGVyc1wiXSA9IHtcblx0XHRcdFx0XCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRpZiAoIWluaXRbXCJtZXRob2RcIl0pIGluaXRbXCJtZXRob2RcIl0gPSBcIlBPU1RcIjtcblxuXHRcdGNvbnN0IG9iaiA9IHRoaXMucHJlcGFyZVNlcnZlclBheWxvYWQodGhpcy5nZXQoKSk7XG5cdFx0aW5pdFtcImJvZHlcIl0gPSBKU09OLnN0cmluZ2lmeShvYmopO1xuXG5cdFx0Y29uc3QgY2FsbGJhY2sgPSB0aGlzLmdldE9wdGlvbihcIndyaXRlLnJlc3BvbnNlQ2FsbGJhY2tcIik7XG5cdFx0cmV0dXJuIGZldGNoRGF0YS5jYWxsKHRoaXMsIGluaXQsIFwid3JpdGVcIiwgY2FsbGJhY2spO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Jlc3RBUEl9XG5cdCAqL1xuXHRnZXRDbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFJlc3RBUEkoXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXS5yZWFkLFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0ud3JpdGUsXG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gaW5pdFxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fVxuICovXG5mdW5jdGlvbiBmZXRjaERhdGEoaW5pdCwga2V5LCBjYWxsYmFjaykge1xuXHRsZXQgcmVzcG9uc2U7XG5cblx0cmV0dXJuIGZldGNoKHRoaXMuZ2V0T3B0aW9uKGAke2tleX0udXJsYCksIGluaXQpXG5cdFx0LnRoZW4oKHJlc3ApID0+IHtcblx0XHRcdHJlc3BvbnNlID0gcmVzcDtcblxuXHRcdFx0Y29uc3QgYWNjZXB0ZWRTdGF0dXMgPSB0aGlzLmdldE9wdGlvbihgJHtrZXl9LmFjY2VwdGVkU3RhdHVzYCwgWzIwMF0pO1xuXG5cdFx0XHRpZiAoYWNjZXB0ZWRTdGF0dXMuaW5kZXhPZihyZXNwLnN0YXR1cykgPT09IC0xKSB7XG5cdFx0XHRcdHRocm93IG5ldyBEYXRhRmV0Y2hFcnJvcihcblx0XHRcdFx0XHRgdGhlIHJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gYSBhY2NlcHRlZCBzdGF0dXMgKGFjdHVhbDogJHtyZXNwLnN0YXR1c30pLmAsXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXNwLnRleHQoKTtcblx0XHR9KVxuXHRcdC50aGVuKChib2R5KSA9PiB7XG5cdFx0XHRsZXQgb2JqO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRvYmogPSBKU09OLnBhcnNlKGJvZHkpO1xuXG5cdFx0XHRcdHJlc3BvbnNlW3Jhd0RhdGFTeW1ib2xdID0gb2JqO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRpZiAoYm9keS5sZW5ndGggPiAxMDApIHtcblx0XHRcdFx0XHRib2R5ID0gYCR7Ym9keS5zdWJzdHJpbmcoMCwgOTcpfS4uLmA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aHJvdyBuZXcgRGF0YUZldGNoRXJyb3IoXG5cdFx0XHRcdFx0YHRoZSByZXNwb25zZSBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiAoYWN0dWFsOiAke2JvZHl9KS5gLFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcblx0XHRcdFx0Y2FsbGJhY2sob2JqKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlO1xuXHRcdH0pO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgUXVldWUgfSBmcm9tIFwiLi9xdWV1ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sLCBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlckxpc3QgfSBmcm9tIFwiLi9vYnNlcnZlcmxpc3QubWpzXCI7XG5cbmV4cG9ydCB7IE9ic2VydmFibGVRdWV1ZSB9O1xuXG4vKipcbiAqIEFuIG9ic2VydmFibGUgcXVldWUgaXMgYSBsaXN0IG9mIGl0ZW1zIHRoYXQgYXJlIHByb2Nlc3NlZCBvbmUgYWZ0ZXIgYW5vdGhlciAoZmlyc3QgaW4sIGZpcnN0IG91dCkuXG4gKlxuICogYFF1ZXVlLmFkZCgpYCBhbmQgYFF1ZXVlLmNsZWFyKClgIG5vdGlmeSBhbGwgb2JzZXJ2ZXJzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9xdWV1ZS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEBzdW1tYXJ5IEFuIG9ic2VydmFibGUgUXVldWUgKEZpZm8pXG4gKi9cbmNsYXNzIE9ic2VydmFibGVRdWV1ZSBleHRlbmRzIFF1ZXVlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0b2JzZXJ2ZXJzOiBuZXcgT2JzZXJ2ZXJMaXN0KCksXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL29ic2VydmFibGVxdWV1ZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgYSBuZXcgZWxlbWVudCB0byB0aGUgZW5kIG9mIHRoZSBxdWV1ZS5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJucyB7UXVldWV9XG5cdCAqL1xuXHRhZGQodmFsdWUpIHtcblx0XHRzdXBlci5hZGQodmFsdWUpO1xuXHRcdHRoaXMubm90aWZ5T2JzZXJ2ZXJzKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmVtb3ZlIGFsbCBlbnRyaWVzXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtRdWV1ZX1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHN1cGVyLmNsZWFyKCk7XG5cdFx0dGhpcy5ub3RpZnlPYnNlcnZlcnMoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBBdHRhY2ggYSBuZXcgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybnMge1Byb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHRhdHRhY2hPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLm9ic2VydmVycy5hdHRhY2gob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGFjaCBhIG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5vYnNlcnZlcnMuZGV0YWNoKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBOb3RpZnkgYWxsIG9ic2VydmVyXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKi9cblx0bm90aWZ5T2JzZXJ2ZXJzKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5vYnNlcnZlcnMubm90aWZ5KHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Y29udGFpbnNPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5vYnNlcnZlcnMuY29udGFpbnMob2JzZXJ2ZXIpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IE1lc3NhZ2UgfTtcblxuY29uc3QgZGF0YVN5bWJvbCA9IFN5bWJvbChcIkBAZGF0YVwiKTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXZWJTb2NrZXQgbWVzc2FnZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLk5ldC5XZWJTb2NrZXRcbiAqIEBzdW1tYXJ5IFRoZSBNZXNzYWdlIGNsYXNzIGVuY2Fwc3VsYXRlcyBhIFdlYlNvY2tldCBtZXNzYWdlLlxuICovXG5jbGFzcyBNZXNzYWdlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZGF0YVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuXHQgKi9cblx0Y29uc3RydWN0b3IoZGF0YSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpc1tkYXRhU3ltYm9sXSA9IHZhbGlkYXRlT2JqZWN0KGRhdGEpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHJhdyBtZXNzYWdlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fVxuXHQgKi9cblx0Z2V0RGF0YSgpIHtcblx0XHRyZXR1cm4gdGhpc1tkYXRhU3ltYm9sXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Kn1cblx0ICovXG5cdHRvSlNPTigpIHtcblx0XHRyZXR1cm4gdGhpc1tkYXRhU3ltYm9sXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30ganNvblxuXHQgKiBAcmV0dXJucyB7TWVzc2FnZX1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICovXG5cdHN0YXRpYyBmcm9tSlNPTihqc29uKSB7XG5cdFx0dmFsaWRhdGVTdHJpbmcoanNvbik7XG5cdFx0cmV0dXJuIG5ldyBNZXNzYWdlKEpTT04ucGFyc2UoanNvbikpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpc0ludGVnZXIsIGlzU3RyaW5nLCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IEJhc2VXaXRoT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlUXVldWUgfSBmcm9tIFwiLi4vdHlwZXMvb2JzZXJ2YWJsZXF1ZXVlLm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gXCIuL3dlYmNvbm5lY3QvbWVzc2FnZS5tanNcIjtcblxuZXhwb3J0IHsgV2ViQ29ubmVjdCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCByZWNlaXZlUXVldWVTeW1ib2wgPSBTeW1ib2woXCJyZWNlaXZlUXVldWVcIik7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBzZW5kUXVldWVTeW1ib2wgPSBTeW1ib2woXCJzZW5kUXVldWVcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKlxuICogaGludDogdGhpcyBuYW1lIGlzIHVzZWQgaW4gdGhlIHRlc3RzLiBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgaXQsIHBsZWFzZSBjaGFuZ2UgaXQgaW4gdGhlIHRlc3RzIGFzIHdlbGwuXG4gKi9cbmNvbnN0IGNvbm5lY3Rpb25TeW1ib2wgPSBTeW1ib2woXCJjb25uZWN0aW9uXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBtYW51YWxDbG9zZVN5bWJvbCA9IFN5bWJvbChcIm1hbnVhbENsb3NlXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2NDU1Lmh0bWwjc2VjdGlvbi03LjQuMVxuICogQHR5cGUge3tcIjEwMDBcIjogc3RyaW5nLCBcIjEwMTFcIjogc3RyaW5nLCBcIjEwMTBcIjogc3RyaW5nLCBcIjEwMDhcIjogc3RyaW5nLCBcIjEwMDdcIjogc3RyaW5nLCBcIjEwMDZcIjogc3RyaW5nLCBcIjEwMDVcIjogc3RyaW5nLCBcIjEwMDRcIjogc3RyaW5nLCBcIjEwMTVcIjogc3RyaW5nLCBcIjEwMDNcIjogc3RyaW5nLCBcIjEwMDJcIjogc3RyaW5nLCBcIjEwMDFcIjogc3RyaW5nLCBcIjEwMDlcIjogc3RyaW5nfX1cbiAqL1xuY29uc3QgY29ubmVjdGlvblN0YXR1c0NvZGUgPSB7XG5cdDEwMDA6IFwiTm9ybWFsIGNsb3N1cmVcIixcblx0MTAwMTogXCJHb2luZyBhd2F5XCIsXG5cdDEwMDI6IFwiUHJvdG9jb2wgZXJyb3JcIixcblx0MTAwMzogXCJVbnN1cHBvcnRlZCBkYXRhXCIsXG5cdDEwMDQ6IFwiUmVzZXJ2ZWRcIixcblx0MTAwNTogXCJObyBzdGF0dXMgY29kZVwiLFxuXHQxMDA2OiBcIkNvbm5lY3Rpb24gY2xvc2VkIGFibm9ybWFsbHlcIixcblx0MTAwNzogXCJJbnZhbGlkIGZyYW1lIHBheWxvYWQgZGF0YVwiLFxuXHQxMDA4OiBcIlBvbGljeSB2aW9sYXRpb25cIixcblx0MTAwOTogXCJNZXNzYWdlIHRvbyBiaWdcIixcblx0MTAxMDogXCJNYW5kYXRvcnkgZXh0ZW5zaW9uXCIsXG5cdDEwMTE6IFwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsXG5cdDEwMTU6IFwiVExTIGhhbmRzaGFrZVwiLFxufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRoaXMge1dlYkNvbm5lY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gTm8gdXJsIGRlZmluZWQgZm9yIHdlYnNvY2tldCBkYXRhc291cmNlLlxuICovXG5mdW5jdGlvbiBjb25uZWN0U2VydmVyKHJlc29sdmUsIHJlamVjdCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRjb25zdCB1cmwgPSBzZWxmLmdldE9wdGlvbihcInVybFwiKTtcblx0aWYgKCF1cmwpIHtcblx0XHRyZWplY3QoXCJObyB1cmwgZGVmaW5lZCBmb3Igd2ViY29ubmVjdC5cIik7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0bGV0IHByb21pc2VBbGxyZWR5UmVzb2x2ZWQgPSBmYWxzZTtcblxuXHRsZXQgY29ubmVjdGlvblRpbWVvdXQgPSBzZWxmLmdldE9wdGlvbihcImNvbm5lY3Rpb24udGltZW91dFwiKTtcblx0aWYgKCFpc0ludGVnZXIoY29ubmVjdGlvblRpbWVvdXQpIHx8IGNvbm5lY3Rpb25UaW1lb3V0IDwgMTAwKSB7XG5cdFx0Y29ubmVjdGlvblRpbWVvdXQgPSA1MDAwO1xuXHR9XG5cblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0aWYgKHByb21pc2VBbGxyZWR5UmVzb2x2ZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0cmVqZWN0KG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gdGltZW91dFwiKSk7XG5cdH0sIGNvbm5lY3Rpb25UaW1lb3V0KTtcblxuXHRsZXQgcmVjb25uZWN0VGltZW91dCA9IHNlbGYuZ2V0T3B0aW9uKFwiY29ubmVjdGlvbi5yZWNvbm5lY3QudGltZW91dFwiKTtcblx0aWYgKCFpc0ludGVnZXIocmVjb25uZWN0VGltZW91dCkgfHwgcmVjb25uZWN0VGltZW91dCA8IDEwMDApXG5cdFx0cmVjb25uZWN0VGltZW91dCA9IDEwMDA7XG5cdGxldCByZWNvbm5lY3RBdHRlbXB0cyA9IHNlbGYuZ2V0T3B0aW9uKFwiY29ubmVjdGlvbi5yZWNvbm5lY3QuYXR0ZW1wdHNcIik7XG5cdGlmICghaXNJbnRlZ2VyKHJlY29ubmVjdEF0dGVtcHRzKSB8fCByZWNvbm5lY3RBdHRlbXB0cyA8IDEpXG5cdFx0cmVjb25uZWN0QXR0ZW1wdHMgPSAxO1xuXHRsZXQgcmVjb25uZWN0RW5hYmxlZCA9IHNlbGYuZ2V0T3B0aW9uKFwiY29ubmVjdGlvbi5yZWNvbm5lY3QuZW5hYmxlZFwiKTtcblx0aWYgKHJlY29ubmVjdEVuYWJsZWQgIT09IHRydWUpIHJlY29ubmVjdEVuYWJsZWQgPSBmYWxzZTtcblxuXHRzZWxmW21hbnVhbENsb3NlU3ltYm9sXSA9IGZhbHNlO1xuXHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnJlY29ubmVjdENvdW50ZXIrKztcblxuXHRpZiAoXG5cdFx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQgJiZcblx0XHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldC5yZWFkeVN0YXRlIDwgMlxuXHQpIHtcblx0XHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldC5jbG9zZSgpO1xuXHR9XG5cdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0ID0gbnVsbDtcblx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQgPSBuZXcgV2ViU29ja2V0KHVybCk7XG5cblx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0aWYgKGV2ZW50LmRhdGEgaW5zdGFuY2VvZiBCbG9iKSB7XG5cdFx0XHRjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXHRcdFx0cmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkZW5kXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0c2VsZltyZWNlaXZlUXVldWVTeW1ib2xdLmFkZChuZXcgTWVzc2FnZShyZWFkZXIucmVzdWx0KSk7XG5cdFx0XHR9KTtcblx0XHRcdHJlYWRlci5yZWFkQXNUZXh0KG5ldyBNZXNzYWdlKGV2ZW50LmRhdGEpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZltyZWNlaXZlUXVldWVTeW1ib2xdLmFkZChNZXNzYWdlLmZyb21KU09OKGV2ZW50LmRhdGEpKTtcblx0XHR9XG5cdH07XG5cblx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQub25vcGVuID0gZnVuY3Rpb24gKCkge1xuXHRcdHNlbGZbY29ubmVjdGlvblN5bWJvbF0ucmVjb25uZWN0Q291bnRlciA9IDA7XG5cdFx0aWYgKHR5cGVvZiByZXNvbHZlID09PSBcImZ1bmN0aW9uXCIgJiYgIXByb21pc2VBbGxyZWR5UmVzb2x2ZWQpIHtcblx0XHRcdHByb21pc2VBbGxyZWR5UmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH1cblx0fTtcblxuXHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldC5jbG9zZSA9IGZ1bmN0aW9uIChldmVudCkge1xuXHRcdGlmIChzZWxmW21hbnVhbENsb3NlU3ltYm9sXSkge1xuXHRcdFx0c2VsZlttYW51YWxDbG9zZVN5bWJvbF0gPSBmYWxzZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRyZWNvbm5lY3RFbmFibGVkICYmXG5cdFx0XHR0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnJlY29ubmVjdENvdW50ZXIgPCByZWNvbm5lY3RBdHRlbXB0c1xuXHRcdCkge1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHNlbGYuY29ubmVjdCgpO1xuXHRcdFx0fSwgcmVjb25uZWN0VGltZW91dCAqIHRoaXNbY29ubmVjdGlvblN5bWJvbF0ucmVjb25uZWN0Q291bnRlcik7XG5cdFx0fVxuXHR9O1xuXG5cdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0Lm9uZXJyb3IgPSAoZXJyb3IpID0+IHtcblx0XHRpZiAoXG5cdFx0XHRyZWNvbm5lY3RFbmFibGVkICYmXG5cdFx0XHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnJlY29ubmVjdENvdW50ZXIgPCByZWNvbm5lY3RBdHRlbXB0c1xuXHRcdCkge1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHNlbGYuY29ubmVjdCgpO1xuXHRcdFx0fSwgcmVjb25uZWN0VGltZW91dCAqIHRoaXNbY29ubmVjdGlvblN5bWJvbF0ucmVjb25uZWN0Q291bnRlcik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0eXBlb2YgcmVqZWN0ID09PSBcImZ1bmN0aW9uXCIgJiYgIXByb21pc2VBbGxyZWR5UmVzb2x2ZWQpIHtcblx0XHRcdFx0cHJvbWlzZUFsbHJlZHlSZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIFRoZSBSZXN0QVBJIGlzIGEgY2xhc3MgdGhhdCBlbmFibGVzIGEgUkVTVCBBUEkgc2VydmVyLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9uZXQvd2ViY29ubmVjdC5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuMS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuTmV0XG4gKiBAc3VtbWFyeSBUaGUgTG9jYWxTdG9yYWdlIGNsYXNzIGVuY2Fwc3VsYXRlcyB0aGUgYWNjZXNzIHRvIGRhdGEgb2JqZWN0cy5cbiAqL1xuY2xhc3MgV2ViQ29ubmVjdCBleHRlbmRzIEJhc2VXaXRoT3B0aW9ucyB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIG9wdGlvbnMgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHRoZSB3ZWJjb25uZWN0LlxuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuXHRcdFx0b3B0aW9ucyA9IHsgdXJsOiBvcHRpb25zIH07XG5cdFx0fVxuXG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cblx0XHR0aGlzW3JlY2VpdmVRdWV1ZVN5bWJvbF0gPSBuZXcgT2JzZXJ2YWJsZVF1ZXVlKCk7XG5cdFx0dGhpc1tzZW5kUXVldWVTeW1ib2xdID0gbmV3IE9ic2VydmFibGVRdWV1ZSgpO1xuXG5cdFx0dGhpc1tjb25uZWN0aW9uU3ltYm9sXSA9IHt9O1xuXHRcdHRoaXNbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0ID0gbnVsbDtcblx0XHR0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnJlY29ubmVjdENvdW50ZXIgPSAwO1xuXHRcdHRoaXNbbWFudWFsQ2xvc2VTeW1ib2xdID0gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRjb25uZWN0KCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25uZWN0U2VydmVyLmNhbGwodGhpcywgcmVzb2x2ZSwgcmVqZWN0KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGlzQ29ubmVjdGVkKCkge1xuXHRcdHJldHVybiB0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdPy5zb2NrZXQ/LnJlYWR5U3RhdGUgPT09IDE7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL25ldC93ZWJjb25uZWN0XCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmw9dW5kZWZpbmVkIERlZmluZXMgdGhlIHJlc291cmNlIHRoYXQgeW91IHdpc2ggdG8gZmV0Y2guXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjb25uZWN0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjb25uZWN0aW9uLnRpbWVvdXQ9NTAwMCBEZWZpbmVzIHRoZSB0aW1lb3V0IGZvciB0aGUgY29ubmVjdGlvbi5cblx0ICogQHByb3BlcnR5IHtOdW1iZXJ9IGNvbm5lY3Rpb24ucmVjb25uZWN0LnRpbWVvdXQgVGhlIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB0aGUgcmVjb25uZWN0LlxuXHQgKiBAcHJvcGVydHkge051bWJlcn0gY29ubmVjdGlvbi5yZWNvbm5lY3QuYXR0ZW1wdHMgVGhlIG1heGltdW0gbnVtYmVyIG9mIHJlY29ubmVjdHMuXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbH0gY29ubmVjdGlvbi5yZWNvbm5lY3QuZW5hYmxlZCBJZiB0aGUgcmVjb25uZWN0IGlzIGVuYWJsZWQuXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR1cmw6IHVuZGVmaW5lZCxcblx0XHRcdGNvbm5lY3Rpb246IHtcblx0XHRcdFx0dGltZW91dDogNTAwMCxcblx0XHRcdFx0cmVjb25uZWN0OiB7XG5cdFx0XHRcdFx0dGltZW91dDogMTAwMCxcblx0XHRcdFx0XHRhdHRlbXB0czogMSxcblx0XHRcdFx0XHRlbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgY2xvc2VzIHRoZSBjb25uZWN0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2NvZGU9MTAwMF0gVGhlIGNsb3NlIGNvZGUuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbcmVhc29uPVwiXCJdIFRoZSBjbG9zZSByZWFzb24uXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2NDU1Lmh0bWwjc2VjdGlvbi03LjQuMVxuXHQgKi9cblx0Y2xvc2Uoc3RhdHVzQ29kZSwgcmVhc29uKSB7XG5cdFx0aWYgKCFpc0ludGVnZXIoc3RhdHVzQ29kZSkgfHwgc3RhdHVzQ29kZSA8IDEwMDAgfHwgc3RhdHVzQ29kZSA+IDQ5OTkpIHtcblx0XHRcdHN0YXR1c0NvZGUgPSAxMDAwO1xuXHRcdH1cblx0XHRpZiAoIWlzU3RyaW5nKHJlYXNvbikpIHtcblx0XHRcdHJlYXNvbiA9IFwiXCI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXNbbWFudWFsQ2xvc2VTeW1ib2xdID0gdHJ1ZTtcblx0XHRcdFx0aWYgKHRoaXNbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0KSB7XG5cdFx0XHRcdFx0dGhpc1tjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQuY2xvc2Uoc3RhdHVzQ29kZSwgcmVhc29uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0cmVqZWN0KGVycm9yKTtcblx0XHRcdH1cblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQb2xscyB0aGUgcmVjZWl2ZSBxdWV1ZSBmb3IgbmV3IG1lc3NhZ2VzLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7TWVzc2FnZX1cblx0ICovXG5cdHBvbGwoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcmVjZWl2ZVF1ZXVlU3ltYm9sXS5wb2xsKCk7XG5cdH1cblxuXHQvKipcblx0ICogQXJlIHRoZXJlIGFueSBtZXNzYWdlcyBpbiB0aGUgcmVjZWl2ZSBxdWV1ZT9cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRkYXRhUmVjZWl2ZWQoKSB7XG5cdFx0cmV0dXJuICF0aGlzW3JlY2VpdmVRdWV1ZVN5bWJvbF0uaXNFbXB0eSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBNZXNzYWdlIGZyb20gdGhlIHJlY2VpdmUgcXVldWUsIGJ1dCBkbyBub3QgcmVtb3ZlIGl0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fVxuXHQgKi9cblx0cGVlaygpIHtcblx0XHRyZXR1cm4gdGhpc1tyZWNlaXZlUXVldWVTeW1ib2xdLnBlZWsoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBdHRhY2ggYSBuZXcgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybnMge1Byb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHRhdHRhY2hPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHRoaXNbcmVjZWl2ZVF1ZXVlU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogRGV0YWNoIGEgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybnMge1Byb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHRkZXRhY2hPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHRoaXNbcmVjZWl2ZVF1ZXVlU3ltYm9sXS5kZXRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRjb250YWluc09ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0cmV0dXJuIHRoaXNbcmVjZWl2ZVF1ZXVlU3ltYm9sXS5jb250YWluc09ic2VydmVyKG9ic2VydmVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge01lc3NhZ2V8T2JqZWN0fSBtZXNzYWdlXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRzZW5kKG1lc3NhZ2UpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0aWYgKHRoaXNbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0LnJlYWR5U3RhdGUgIT09IDEpIHtcblx0XHRcdFx0cmVqZWN0KFwidGhlIHNvY2tldCBpcyBub3QgcmVhZHlcIik7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXNbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpO1xuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH0pO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcsIGlzT2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgV2ViQ29ubmVjdCBhcyBOZXRXZWJDb25uZWN0IH0gZnJvbSBcIi4uLy4uLy4uL25ldC93ZWJjb25uZWN0Lm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gXCIuLi8uLi8uLi9uZXQvd2ViY29ubmVjdC9tZXNzYWdlLm1qc1wiO1xuaW1wb3J0IHsgU2VydmVyIH0gZnJvbSBcIi4uL3NlcnZlci5tanNcIjtcblxuZXhwb3J0IHsgV2ViQ29ubmVjdCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICpcbiAqIGhpbnQ6IHRoaXMgbmFtZSBpcyB1c2VkIGluIHRoZSB0ZXN0cy4gaWYgeW91IHdhbnQgdG8gY2hhbmdlIGl0LCBwbGVhc2UgY2hhbmdlIGl0IGluIHRoZSB0ZXN0cyBhcyB3ZWxsLlxuICovXG5jb25zdCB3ZWJDb25uZWN0U3ltYm9sID0gU3ltYm9sKFwiY29ubmVjdGlvblwiKTtcblxuLyoqXG4gKiBUaGUgUmVzdEFQSSBpcyBhIGNsYXNzIHRoYXQgZW5hYmxlcyBhIFJFU1QgQVBJIHNlcnZlci5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uLy4uLy4uL2V4YW1wbGUvZGF0YS9kYXRhc291cmNlL3NlcnZlci93ZWJjb25uZWN0Lm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy4xLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhLkRhdGFzb3VyY2UuU2VydmVyXG4gKiBAc3VtbWFyeSBUaGUgTG9jYWxTdG9yYWdlIGNsYXNzIGVuY2Fwc3VsYXRlcyB0aGUgYWNjZXNzIHRvIGRhdGEgb2JqZWN0cy5cbiAqL1xuY2xhc3MgV2ViQ29ubmVjdCBleHRlbmRzIFNlcnZlciB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIG9wdGlvbnMgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHRoZSBkYXRhc291cmNlLlxuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSB7IHVybDogb3B0aW9ucyB9O1xuXHRcdH1cblxuXHRcdGlmICghaXNPYmplY3Qob3B0aW9ucykpIG9wdGlvbnMgPSB7fTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0dGhpc1t3ZWJDb25uZWN0U3ltYm9sXSA9IG5ldyBOZXRXZWJDb25uZWN0KHtcblx0XHRcdHVybDogdGhpcy5nZXRPcHRpb24oXCJ1cmxcIiksXG5cdFx0XHRjb25uZWN0aW9uOiB7XG5cdFx0XHRcdHRpbWVvdXQ6IHRoaXMuZ2V0T3B0aW9uKFwiY29ubmVjdGlvbi50aW1lb3V0XCIpLFxuXHRcdFx0XHRyZWNvbm5lY3Q6IHtcblx0XHRcdFx0XHR0aW1lb3V0OiB0aGlzLmdldE9wdGlvbihcImNvbm5lY3Rpb24ucmVjb25uZWN0LnRpbWVvdXRcIiksXG5cdFx0XHRcdFx0YXR0ZW1wdHM6IHRoaXMuZ2V0T3B0aW9uKFwiY29ubmVjdGlvbi5yZWNvbm5lY3QuYXR0ZW1wdHNcIiksXG5cdFx0XHRcdFx0ZW5hYmxlZDogdGhpcy5nZXRPcHRpb24oXCJjb25uZWN0aW9uLnJlY29ubmVjdC5lbmFibGVkXCIpLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICovXG5cdGNvbm5lY3QoKSB7XG5cdFx0cmV0dXJuIHRoaXNbd2ViQ29ubmVjdFN5bWJvbF0uY29ubmVjdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aXNDb25uZWN0ZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXNbd2ViQ29ubmVjdFN5bWJvbF0uaXNDb25uZWN0ZWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlci93ZWJjb25uZWN0XCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmw9dW5kZWZpbmVkIERlZmluZXMgdGhlIHJlc291cmNlIHRoYXQgeW91IHdpc2ggdG8gZmV0Y2guXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjb25uZWN0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjb25uZWN0aW9uLnRpbWVvdXQ9NTAwMCBEZWZpbmVzIHRoZSB0aW1lb3V0IGZvciB0aGUgY29ubmVjdGlvbi5cblx0ICogQHByb3BlcnR5IHtOdW1iZXJ9IGNvbm5lY3Rpb24ucmVjb25uZWN0LnRpbWVvdXQgVGhlIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB0aGUgcmVjb25uZWN0LlxuXHQgKiBAcHJvcGVydHkge051bWJlcn0gY29ubmVjdGlvbi5yZWNvbm5lY3QuYXR0ZW1wdHMgVGhlIG1heGltdW0gbnVtYmVyIG9mIHJlY29ubmVjdHMuXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbH0gY29ubmVjdGlvbi5yZWNvbm5lY3QuZW5hYmxlZCBJZiB0aGUgcmVjb25uZWN0IGlzIGVuYWJsZWQuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZT17fSBPcHRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5tYXBwaW5nIHRoZSBtYXBwaW5nIGlzIGFwcGxpZWQgYmVmb3JlIHdyaXRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB3cml0ZS5tYXBwaW5nLnRyYW5zZm9ybWVyIFRyYW5zZm9ybWVyIHRvIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgZW50cmllc1xuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuRGF0YS5EYXRhc291cmNlfmV4YW1wbGVDYWxsYmFja1tdfSB3cml0ZS5tYXBwaW5nLmNhbGxiYWNrIHdpdGggdGhlIGhlbHAgb2YgdGhlIGNhbGxiYWNrLCB0aGUgc3RydWN0dXJlcyBjYW4gYmUgYWRqdXN0ZWQgYmVmb3JlIHdyaXRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5zaGVhdGhpbmdcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLnNoZWF0aGluZy5vYmplY3QgT2JqZWN0IHRvIGJlIHdyYXBwZWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHdyaXRlLnNoZWF0aGluZy5wYXRoIFBhdGggdG8gdGhlIGRhdGFcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlYWQ9e30gT3B0aW9uc1xuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gcmVhZC5wYXRoIFBhdGggdG8gZGF0YVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcmVhZC5tYXBwaW5nIHRoZSBtYXBwaW5nIGlzIGFwcGxpZWQgYWZ0ZXIgcmVhZGluZy5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHJlYWQubWFwcGluZy50cmFuc2Zvcm1lciBUcmFuc2Zvcm1lciB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkRhdGEuRGF0YXNvdXJjZX5leGFtcGxlQ2FsbGJhY2tbXX0gcmVhZC5tYXBwaW5nLmNhbGxiYWNrIHdpdGggdGhlIGhlbHAgb2YgdGhlIGNhbGxiYWNrLCB0aGUgc3RydWN0dXJlcyBjYW4gYmUgYWRqdXN0ZWQgYWZ0ZXIgcmVhZGluZy5cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHVybDogdW5kZWZpbmVkLFxuXHRcdFx0d3JpdGU6IHtcblx0XHRcdFx0bWFwcGluZzoge1xuXHRcdFx0XHRcdHRyYW5zZm9ybWVyOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0Y2FsbGJhY2tzOiB7fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0c2hlYXRoaW5nOiB7XG5cdFx0XHRcdFx0b2JqZWN0OiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0cGF0aDogdW5kZWZpbmVkLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHJlYWQ6IHtcblx0XHRcdFx0bWFwcGluZzoge1xuXHRcdFx0XHRcdHRyYW5zZm9ybWVyOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0Y2FsbGJhY2tzOiB7fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0cGF0aDogdW5kZWZpbmVkLFxuXHRcdFx0fSxcblx0XHRcdGNvbm5lY3Rpb246IHtcblx0XHRcdFx0dGltZW91dDogNTAwMCxcblx0XHRcdFx0cmVjb25uZWN0OiB7XG5cdFx0XHRcdFx0dGltZW91dDogMTAwMCxcblx0XHRcdFx0XHRhdHRlbXB0czogMSxcblx0XHRcdFx0XHRlbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgY2xvc2VzIHRoZSBjb25uZWN0aW9uLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICovXG5cdGNsb3NlKCkge1xuXHRcdHJldHVybiB0aGlzW3dlYkNvbm5lY3RTeW1ib2xdLmNsb3NlKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHJlYWQoKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHdoaWxlICh0aGlzW3dlYkNvbm5lY3RTeW1ib2xdLmRhdGFSZWNlaXZlZCgpID09PSB0cnVlKSB7XG5cdFx0XHRcdGxldCBvYmogPSB0aGlzW3dlYkNvbm5lY3RTeW1ib2xdLnBvbGwoKTtcblx0XHRcdFx0aWYgKCFpc09iamVjdChvYmopKSB7XG5cdFx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIlRoZSByZWNlaXZlZCBkYXRhIGlzIG5vdCBhbiBvYmplY3QuXCIpKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIShvYmogaW5zdGFuY2VvZiBNZXNzYWdlKSkge1xuXHRcdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJUaGUgcmVjZWl2ZWQgZGF0YSBpcyBub3QgYSBNZXNzYWdlLlwiKSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0b2JqID0gb2JqLmdldERhdGEoKTtcblx0XHRcdFx0b2JqID0gdGhpcy50cmFuc2Zvcm1TZXJ2ZXJQYXlsb2FkLmNhbGwodGhpcywgb2JqKTtcblx0XHRcdFx0dGhpcy5zZXQob2JqKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzb2x2ZSh0aGlzLmdldCgpKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0d3JpdGUoKSB7XG5cdFx0Y29uc3Qgb2JqID0gdGhpcy5wcmVwYXJlU2VydmVyUGF5bG9hZCh0aGlzLmdldCgpKTtcblx0XHRyZXR1cm4gdGhpc1t3ZWJDb25uZWN0U3ltYm9sXS5zZW5kKG9iaik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UmVzdEFQSX1cblx0ICovXG5cdGdldENsb25lKCkge1xuXHRcdHJldHVybiBuZXcgV2ViQ29ubmVjdCh0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXSk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgRGF0YXNvdXJjZSB9IGZyb20gXCIuLi8uLi9kYXRhc291cmNlLm1qc1wiO1xuaW1wb3J0IHsgU3RvcmFnZSwgc3RvcmFnZU9iamVjdFN5bWJvbCB9IGZyb20gXCIuLi9zdG9yYWdlLm1qc1wiO1xuXG5leHBvcnQgeyBMb2NhbFN0b3JhZ2UgfTtcblxuLyoqXG4gKiBUaGUgTG9jYWxTdG9yYWdlIERhdGFzb3VyY2UgcHJvdmlkZXMgYSBkYXRhIHN0b3JlIGluIHRoZSBicm93c2VyIGxvY2FsU3RvcmFnZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIyLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhLkRhdGFzb3VyY2UuU3RvcmFnZVxuICogQHN1bW1hcnkgVGhlIExvY2FsU3RvcmFnZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMuXG4gKi9cbmNsYXNzIExvY2FsU3RvcmFnZSBleHRlbmRzIFN0b3JhZ2Uge1xuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzLlxuXHQgKiBAcmV0dXJuIHtleHRlcm5hbDpsb2NhbFN0b3JhZ2V9XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRbc3RvcmFnZU9iamVjdFN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIGdldEdsb2JhbE9iamVjdChcImxvY2FsU3RvcmFnZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL2xvY2Fsc3RvcmFnZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgY2xvbmVcblx0ICogQHJldHVybiB7TG9jYWxTdG9yYWdlfVxuXHQgKi9cblx0Z2V0Q2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBMb2NhbFN0b3JhZ2UoXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXS5rZXksXG5cdFx0KTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBEYXRhc291cmNlIH0gZnJvbSBcIi4uLy4uL2RhdGFzb3VyY2UubWpzXCI7XG5pbXBvcnQgeyBTdG9yYWdlLCBzdG9yYWdlT2JqZWN0U3ltYm9sIH0gZnJvbSBcIi4uL3N0b3JhZ2UubWpzXCI7XG5cbmV4cG9ydCB7IFNlc3Npb25TdG9yYWdlIH07XG5cbi8qKlxuICogVGhlIFNlc3Npb25TdG9yYWdlIGNsYXNzIHByb3ZpZGVzIGEgZGF0YSBzb3VyY2UgdGhhdCB1c2VzIHRoZSBTZXNzaW9uU3RvcmFnZSBBUEkgb24gdGhlIGNsaWVudC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIyLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhLkRhdGFzb3VyY2UuU3RvcmFnZVxuICogQHN1bW1hcnkgVGhlIExvY2FsU3RvcmFnZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMuXG4gKi9cbmNsYXNzIFNlc3Npb25TdG9yYWdlIGV4dGVuZHMgU3RvcmFnZSB7XG5cdC8qKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXMuXG5cdCAqIEByZXR1cm4ge2V4dGVybmFsOnNlc3Npb25TdG9yYWdlfVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0W3N0b3JhZ2VPYmplY3RTeW1ib2xdKCkge1xuXHRcdHJldHVybiBnZXRHbG9iYWxPYmplY3QoXCJzZXNzaW9uU3RvcmFnZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2Uvc2Vzc2lvbi1zdG9yYWdlXCIsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgQ2xvbmVcblx0ICpcblx0ICogQHJldHVybiB7U2Vzc2lvblN0b3JhZ2V9XG5cdCAqL1xuXHRnZXRDbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFNlc3Npb25TdG9yYWdlKFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0ua2V5LFxuXHRcdCk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBGb3JtU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgRm9ybVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRGb3JtU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBmb3JtIHsgXG4uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXNoYWRvdzpub25lO2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWZvcm17YWNjZW50LWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtd3JhcDpub3dyYXA7cG9zaXRpb246cmVsYXRpdmV9Lm1vbnN0ZXItZm9ybSBsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7ZGlzcGxheTpncmlkfS5tb25zdGVyLWZvcm0gbGFiZWw6aGFzKGlucHV0W3R5cGU9cmFkaW9dKXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9Lm1vbnN0ZXItZm9ybSBsYWJlbDpoYXMoaW5wdXRbdHlwZT1yYWRpb10pIGlucHV0e21hcmdpbi1sZWZ0Oi40cmVtO21hcmdpbi1yaWdodDouNHJlbX0ubW9uc3Rlci1mb3JtIGxhYmVsOmhhcyhpbnB1dFt0eXBlPXJhZGlvXSl+bGFiZWw6aGFzKGlucHV0W3R5cGU9cmFkaW9dKXttYXJnaW4tdG9wOi4ycmVtfS5tb25zdGVyLWZvcm0gbGFiZWw6aGFzKGlucHV0W3R5cGU9Y2hlY2tib3hdKXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9Lm1vbnN0ZXItZm9ybSBsYWJlbDpoYXMoaW5wdXRbdHlwZT1jaGVja2JveF0pIGlucHV0e21hcmdpbi1sZWZ0Oi40cmVtO21hcmdpbi1yaWdodDouNHJlbX0ubW9uc3Rlci1mb3JtIGxhYmVsOmhhcyhpbnB1dFt0eXBlPWNoZWNrYm94XSl+bGFiZWw6aGFzKGlucHV0W3R5cGU9Y2hlY2tib3hdKXttYXJnaW4tdG9wOi4ycmVtfS5tb25zdGVyLWZvcm0gbGFiZWx+ZmllbGRzZXQsLm1vbnN0ZXItZm9ybSBsYWJlbH5sYWJlbHttYXJnaW4tdG9wOjFyZW19Lm1vbnN0ZXItZm9ybSBidXR0b24sLm1vbnN0ZXItZm9ybSBpbnB1dCwubW9uc3Rlci1mb3JtIHNlbGVjdCwubW9uc3Rlci1mb3JtIHRleHRhcmVhe2FjY2VudC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOjEwMCU7bWFyZ2luOjA7b3V0bGluZTpub25lO3BhZGRpbmc6LjRyZW0gLjZyZW19Lm1vbnN0ZXItZm9ybSBidXR0b257Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWZvcm0gb3B0aW9uOmNoZWNrZWQsLm1vbnN0ZXItZm9ybSBvcHRpb246Zm9jdXMsLm1vbnN0ZXItZm9ybSBvcHRpb246aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWZvcm0gaW5wdXQsLm1vbnN0ZXItZm9ybSBzZWxlY3QsLm1vbnN0ZXItZm9ybSB0ZXh0YXJlYXtib3JkZXItYm90dG9tLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3JkZXI6MDtib3JkZXItYm90dG9tOnRoaW4gdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp0aGlufS5tb25zdGVyLWZvcm0gYnV0dG9uLC5tb25zdGVyLWZvcm0gaW5wdXQ6bm90KFt0eXBlPXJhZGlvXSk6bm90KFt0eXBlPWNoZWNrYm94XSksLm1vbnN0ZXItZm9ybSBsYWJlbCwubW9uc3Rlci1mb3JtIHNlbGVjdCwubW9uc3Rlci1mb3JtIHRleHRhcmVhe3dpZHRoOjEwMCV9Lm1vbnN0ZXItZm9ybSBsYWJlbCBpbnB1dDpub3QoW3R5cGU9cmFkaW9dKTpub3QoW3R5cGU9Y2hlY2tib3hdKSwubW9uc3Rlci1mb3JtIGxhYmVsIHNlbGVjdCwubW9uc3Rlci1mb3JtIGxhYmVsIHRleHRhcmVhLC5tb25zdGVyLWZvcm0gbGFiZWwraW5wdXQ6bm90KFt0eXBlPXJhZGlvXSk6bm90KFt0eXBlPWNoZWNrYm94XSksLm1vbnN0ZXItZm9ybSBsYWJlbCtzZWxlY3QsLm1vbnN0ZXItZm9ybSBsYWJlbCt0ZXh0YXJlYXttYXJnaW4tdG9wOi4ycmVtO3dpZHRoOjEwMCV9Lm1vbnN0ZXItZm9ybSBmaWVsZHNldHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXI6MnB4IHNvbGlkIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO21hcmdpbjowO291dGxpbmU6bm9uZTtwYWRkaW5nOjIuNXJlbSAycmVtIDJyZW07cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX0ubW9uc3Rlci1mb3JtIGZpZWxkc2V0IGxlZ2VuZHtmb250LXNpemU6LjhyZW07bWF4LXdpZHRoOjk1JTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMXJlbSAycmVtIC4ycmVtIC41cmVtO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dGV4dC1hbGlnbjpyaWdodDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt0b3A6MDt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItZm9ybSBmaWVsZHNldH5maWVsZHNldHttYXJnaW4tdG9wOjFyZW19Lm1vbnN0ZXItZm9ybSBidXR0b257bWFyZ2luOi4ycmVtIDB9Lm1vbnN0ZXItZm9ybSBidXR0b246Zmlyc3Qtb2YtdHlwZXttYXJnaW4tdG9wOjFyZW19Lm1vbnN0ZXItZm9ybSBidXR0b246bGFzdC1vZi10eXBle21hcmdpbi1ib3R0b206MXJlbX0ubW9uc3Rlci1mb3JtIGlucHV0OmZvY3VzLXZpc2libGV7b3V0bGluZTpub25lfS5tb25zdGVyLWZvcm0gYnV0dG9uOmZvY3VzLC5tb25zdGVyLWZvcm0gaW5wdXQ6Zm9jdXMsLm1vbnN0ZXItZm9ybSBzZWxlY3Q6Zm9jdXMsLm1vbnN0ZXItZm9ybSB0ZXh0YXJlYTpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCk7b3V0bGluZS1vZmZzZXQ6MnB4fUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6bGlnaHQpey5tb25zdGVyLWZvcm0gYnV0dG9uLC5tb25zdGVyLWZvcm0gaW5wdXQsLm1vbnN0ZXItZm9ybSBzZWxlY3QsLm1vbnN0ZXItZm9ybSB0ZXh0YXJlYXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1mb3JtIGJ1dHRvbjpmb2N1cywubW9uc3Rlci1mb3JtIGlucHV0OmZvY3VzLC5tb25zdGVyLWZvcm0gc2VsZWN0OmZvY3VzLC5tb25zdGVyLWZvcm0gdGV4dGFyZWE6Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpO291dGxpbmUtb2Zmc2V0OjJweH19Lm1vbnN0ZXItZm9ybSBidXR0b246aG92ZXIsLm1vbnN0ZXItZm9ybSBpbnB1dDpob3Zlcjpub3QoW3R5cGU9cmFkaW9dKTpub3QoW3R5cGU9Y2hlY2tib3hdKTpub3QoW3R5cGU9cmFuZ2VdKSwubW9uc3Rlci1mb3JtIHNlbGVjdDpob3ZlciwubW9uc3Rlci1mb3JtIHRleHRhcmVhOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpSYWxld2F5O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFGSjRBQklBQUFBQXQzQUFBRklRQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHb0U4Rys0NkhJVThCbUEvVTFSQlZFUUFoUWdJZ1FvSm54UVJDQXFCdWd5Qm1uQUxoQ0lBQVRZQ0pBT0lRQVFnQllVVUJ5QU1neHdiZmFRWGFKZWZtTnowWm9sM3Y2MGNQZVpNcEc0SEpTams1cUlJTmc2Q0dNZ2xaZi8vbjNGMGpPR0dEUkExclhlSW5jSklVa05IR242OXFNUkRVOFphampzOVVic210bnFuRTN2M3ZxaVFtZlJRcExrS1c2UVp3YWw2czVJVWlKTlVTVUcvT3dvRFk2QjY3NU9qU2prRFNTTXUycGVkcHU5dkpJTFVsSmQ3MDdEK2VMSHBqWURJNGUxdURuTGpISHZ4cERYR015ZHVMTG4xcXQwRkNRT3lGc0paRTEra0pxM1QrSWU3QkpGSU5PQU5iaTl2VFV6aEk3VzRHbVVMMGxXalQvRlFRaS9tKyt4dVBQMDJvbVJIZTVwbjREZ2ZOWmZuK1I5ejk3OXRtRWVOYXExUnhScUhUalRQTkEySkZFZ3JIZG8vbnQvVy81emJnR0N4aWE2RWtWaUEyRmhZR0l0Um1FMVp2VlV2cXRTdGI3TXZyZDNXNyt0MiswWGRvVG56empZYnA3bVNITEFDa2hNV2dDVEw2czBXdjBBVW9oSmZFcUUzb3BQZDU4aWtKbktsbyszdWFlU0hZSjZmY0ljWGpkK3JLVUVzYUVsVHFsVWxWUm0vTitlLzhpUDBMNUFLb3pObEozLzlpQndzaE02djVKSVVKeWtnVDNmZHJPbXE2TGNzK1orcS9Yc0FYRnhFRWlRSVVhS29zRm43Y3RUKzdCQlM1ZHFEb2xKWHVuYmw3cnR0ekQvdjM4NExmdEphZ0ZGQUxZUEU1QTdnbk1yWkJodDRsWHFzYlpLbWJkcTBUdE9tcG1nTml1Z00yUFlCYzczTXJqcTdHTHNvWEhjVHB0OXVQdkZEejhlTjNnK3N4clBRQXc2RFRGTnAvT1pJOWlpbk5pdFpoUm1wUU9Da2RvQmRBTmpWV2xhdk1pdHdETkpYL3BZSUFrVnduT1Avdlc1eHpvTXc3U0FGQUtVK1p6L2tuUC9aOWorT2Rmckw4S2UydmRLYm1waHV4SlN1TDhFVUFnZ0hJaUJIUCs0NDRFRHp2MVBUUTNZa09jT1NsVEhtajZVc2RmbzJMKy9qcFllN0lIV2NRVWdjZ2twTEZSMVlUVzhDR0tRWDliOEdGQUFBSDl0bzRSSFE2R0x2RlJyaTREaXdUekFBRERNS0RQci9mWjNWL3FkZ1Bta0d6S1RFbVdFWGI3UTN0dGdUWXFvMm5QNi8rOTdYZitGLzlKSEFWc0lJY0FDQlp3UnlrR1Q3Z0NSOFZvaEpjVU9PU0RqaVNiQXBoTW96bTJKUnB0QnRVVzY5WGJORkczSVZ5MktMb2s0OC9MZnNtNTI3SWFxQkxNdUJiT0ZJd2VGVWQwMXZlTCtZOHhXaHR6Y3FUbTJDSVRjNWVMSndTSTRmWWxMWUZJVkhBcy8vVDUzTjQvWXgxaEtHVStIU3FFcmRwUFBuczZmcXFXSnNOYlphQ2xRdGpsT0xVTXNoY2RvQTVUUXNzNEpMYzkwU3hDT01NVUs0S1A5TnNocHpwWDR2d3hLQ2hDQVNSRVJFL0xLc1dSbEp3TktBY1RuWEFoRXkzcjFLSGNaYS9ZZFg1ODQyMC9pYVhtdEdob0NBaUlpQVIyM3YvUDkrS1RBQ0FONWhka0MzeFVDNEVMc2dndmtSMmtyRWpZU0V2MEJLU21IQ2hJdllPQ0FKa0tRZ3lZTU0yUW9VTXpDbzE2Qko4NXFBV0NDZEhlazNBQjBPREwxTHEwUGdUZTNoU3cyZmhpNFhoUHVldVFXRUg2eHRJRVFBYkcyTm01b1Y1NFFGUCt5S2dPMkQ0VDV0L3d6MlhXOTIvcnBxcExUU0lQOHFWOXZMdk9kczBOTFd5WDUxSzZvZmJ2UFpFMXBhZjd3MzE4QzladGhxN2YzMmJmdUw2NFZaSHc1MTRZc201bGdmTmJmRzdXOWxzVUE0RUd6NzIzdnh3R3pwNGZSUittUDhMczVCN0tCMmVESlhjNnh3bEc2OTAydWc3QXpMQThOWTIxQjJkQi9QNXFmT1Y4dDFvbnlMNWpaRERmUUk1Umc4RDk4RnZIc3ZjbEh1SnNyZHZzSnJwYy9Uci9ndS9FZlpKelhVenBXYURqN003K1VQOC84RWtBQVZhQVMvQ1IrWHMvSk40WWFJY08xeEhaY1VhTU1ia2xycEt5N05mUUpLUWNVUmFnb0dtQ1crSEE2RU52YmczM3NsMnBJWVJtRTliSUhiMG1BNmtrNmxONUdkeU1ONUVibVFoeEhLbHdNZ1Q1OGNndzdwZFVSejduZk1jUWZjVTN2SWN6VmtkcmhYOFhIcTQwMTJ0Rk9kN2tUL2E3cDdtODNXQTcxRjdhTzlNK2RqdmRkNmo3ZnhtK0QxUHUzejN1aXJ2bXV5emE1M3RydjkzbFRiODJSVDJLYUZWVUtNTlAzNkJ2UU1DbzBHc0Vka0w4cyt6TGcxRXhiTTBOZ0NXQXhnemY4MkRHMUtYTWZjNHJqTmNRZkhLeFNDdVJ1Qkk1QW9kREREa0dkVjhDblZWRW1FTWFpbjRTYTBBWFRJMFJCTnBPWUFMVnExYVY5dnhKaVV6SEtXQ2lzNm1wMEJ1a3gwNjlHcjc0c25WTmJzb0Nta1ZNb3A1K3BER2FXejJzTERyMmlOdCtvWk8wYjM2WVNJaldjeHZubE4weDBWaGxZb1c0VVJqWFhLeUxHM1kzcW9MZEVhekhBRUVvVnVNbDNERGVFUlZwRy9qZVRFUjBDVVpFVTFtb3RxRm9pd0pGS1VhREZpYWNTbEJKckVqU1FLSi9DU0ZTbVNLazE2MVFsa2RLZXlTWFl6c2RYS2k2STlpa05KTXRDVUtsT3VRcVVxMVZIVDF6cTYrbHpmUU5BSWE1SnBSb3ZXYUVQN1p4dU5tVGpNTEJZdXEzWFVUZ05kUkRkNlVxOUEzM2NieEF6eERET04wSXhhTlZheGQvL3MvYWp4QUU2Sm5QYkZHWmt1QzN1YU5VOEVzRFNMWlZteE9qMVBkOEhReFhTcGVka1hhd2JXNndabzgrNkRyaXVRRkZ3NUlwdm5KaDYvWmdGSks5MzBhRU0yWEozeUpCMERIb3BoYnFnMHVya3ZNSWdZbHRiR1JQY2RrZDdWai9OVjRwYkFiYSsvRTRCakNnOXA1WmVyaS9wZE0wQ0cvN3RYWk54VkUrNmJZYXZRbjZ1bVd3eTNGWGY2Z2crWG5BdEhEZ2prUE5pVWJxcG93dkRVdmJSbGNqNVhaSFl6VjhKaTRObDF2anNPaHJNYXhPSHhlRHdlanovVklISlhuNkgwd2hnNnFGT0VVcVFvMFdMRTBvaExDVEtKMHlRNUxVOXlSUXBTcFVsZlpuQVNCa1dwbENsWG9WS1Y2cWliVEJ0TW1RS1lZV0hWVVVmdEdJdDYybGRuTUgzRXBpVTBxVlFxSGJDTHhPVStFNC8xWExmQkVoektoZ1VjZ1VTaGZ4d21EejlHNUVSQUFITDdGSFJLUXlybnd1eFFmNXJoSEJFQlJJb1NMVVlzelViYzRydE1kcGwyNkZnZDU1dGdRRzh4L2ZBWjJKekl2R2JtbHJjWEFtM3dYS2E3RWxmUGNTMnR4ZnErZWdmaUhHb0RNeHlCUktIdnkzU0ozMFE2VjgrNm1kZlpzYUZWM2VPVUtzV015bmtoeUwxdTRWSTBMMVNKTEl4WHlZenBMeU5xaVd6MFhUcGthVHluMVpEdGk5MG1ZMDJ2MHRVcXR6U0NsK3FySzdySXV2MXY5UkQwc2d4cUdiSm9HR2ZFa2xFMVl6cjI4TzFsMktld1g5TjRBRGFOMWI3TDBJYVJUWE91eTl5aXU4MnBPd0hRQkMrcGxkQ3JPbUswTWcvcjF2UllFbTNEQkVjZ1VlZ21VeDAzRzQrd2l0UWdPZkVSRUNWWlVZM200dG1FSXZ3VUtVcTBHTEUwNGxJQ1R1STB5VHF0RmNsRUNsS2xTYTg2V0VaM0pKdnNGV2k3SXhLSk9Cd09oOFBoY0VUclJOM3REcGxNSnBOaFJJYWlxQWlHWVJnbWNia3N5NE5vei9yb2ZRTDdLY2FsTkQwRk9XM1JHWnVPQlIyeG1WTXhrVWdrRGwwWDd1Sml1dFM4Yk5HYUUrdi9aUU93cWU4NkdJSWVFc0N1b3ZXWWZDcTJ0dnBNT0JON016TzY4R1dYTGh0bWdXMmZmZUhwMU11N3F3WDVORHdUa3BDU2NlZkJreGR2ZmluQVJJUklVYUxGaUtVUmx4SUFpWkUwclZxNjVJb1VTWlVtdmVxVU1ycHMvejFaV0VaNVlCZ0dBQUFBQUFDQTBXWnNkMUNwK0h3K24yL2NPbGs0ckRwU2wxSzNIcjM2amcxQ1R0d3pPY051Q1hZTmdpRFlob3RIMW9nT0xSU3V4OG5pbDRyMmlZYXYwbm9yelh2WjJuWmpaTGZhS0QrVlJnSC9mZ05tcGtGYmhnaUdpVWFjR2ZYTm1LNDlGUHZZOXR2YmNUbTc1KzNmZGFtVzZZU3R3a2R6YUNIWmN2cTBDUzRpVTVabU54TFhHQmUvclFvSGpNUDEvUUVHVk1aRkpnYkRESi81VDNleUJjdkdQU3FUaW1KY0MrWVFVanFHdjJuQzdxM25CMERPcXYyRzNWdmxJaEtJVzhNUlNCUzZ5WlRpTkdGWCtSR0NESHM4UFlJZFRqZEFVQXl2UWt3U0NwcGhOZDIwbXB1TWpRWEtCUWtXSWpRcG1KUlVLWXhLWGNMRGM2a0lmSGFUS2FPTVNjNE1zVlJZUTBlelU2RkxwVnVQM3RMSHV3cHJZZnRoaXdpSEZBV2tTcG1XUnQrNm5KNlUxOEN1eUo4NWoyeDBiMGQ3TjlwaWJxMGxiNE5uVStwTzd0RVVMaWhkVU8yaHJwdGdZWENzeEJGQTNsUTJubUZjM0ZiUmpHQmdDZDZCVUg3cW5YQmJhY2pzSzk5UmZJRE1BRmtCc29PK25aZzhQMEJCZ01JQXRRRWFuOVdRRXM5TUFITkc4NTU0d2ErQXJucXZUVGpwR1M3ZS9pbFBtakFSUG1uc3hXa2RBQVJ5T0w5eUFoeW14N1NHS2xrN0doNDh2RHZOZmRnK0lUQlpwRDlnemdNSUJ3d0JrNXRta0VYSXFxTU1hRVRnL0hVZTI2b0xUVHA0dzRnOVVrWjViZ2J4RUh0Q3lUTFlQSG1KVXEzdUpwcXp2U05jdW1iQmRYWVFza3UxQzkyTjhqVHZERkVVMHJ2ODE3Z21xc0dqUGZSdU5qdmVyVERtSENFNHErcWJ6T2p1SUl2UmFEaHpaMS9WSlVwaGhpT1FLSFF3c1o1VGpndUFCOEN1S3IrWUlNS2V3SW9NTzV4eDllNEFFQlREU1lwbTJPVHk4b0lveVlvYWplalVRYjhKd0QvWEI1aVNzd1VpZ2hBc1JHaFMwQ2d6SnpYTUNUVTFYRVpIYVRBWFRDUVNpY1hiWTRWQ29SZ0xFeHN0bGRDdHhaMWFVbmx1dEdodE9RdDE4L1JVZFZwa0RCdmJTNG5Fb05Gb05CcU5GaWRYbjBXSkxKQ3JVOENVYnFxTWhaR3BtK0Y4RWJCSVVhTEZpS1VSbHhLRUVpVlZMVk55UmdwU3BVbXZ1Z0FaaEFHbHlwU3JVS2xLdGJwbUE2d3JRTGNldmZxYUU3RFRXczZZSG0wRTJkY2xpV1dzV0Uzbm1TN0c1YjZ1R1ZuUG5OdXl5V2JId3hEanBXazZNK2oyMGVZTUxRLzAzVk1tS200Wm5nbEpTTW00OCtESml6ZS9LcmRDa1ZNbEtzeUltbWVaZjBHUXl3SkJFRnhDL3JnZ0NJSWdDSUl6OTBiREV3TVRqOGZqQVVBeGRTNlZzRGNzMWc4d2ZZQ1hyTmQ5OFNIOGdhams1dnVVUHFnNFhEUDlKbTdvR1d2R1h4U2RFTExmcnNFU0VzbVdYVGNNM2NMdEhGU0diU0hCQWpjQ2lVSVhKcUhuTWxPTFJCTGFzblVLMlN1eDF6cW5NQi9aTUdPeC96UHU4b2hEQURBQU9BQUNBQW1BQWtBRFlIZ2xDa0N1TFZBaVNJS0ZDUDBraFdOS1BGVXdiZHlMK3NEQnllZ2thSjJXRU10V3JFNi80dnBXN0c2ZTRtRHcwQmZ4WmhGdDlHdmZoUEVBbXlkNGNNdFVxc1BsNGF5N0d1YWs1dDBONTJPT3dKYUJnU05Ic2syTmg3cUVXWllWcThlK2tzeGpqM0VLU1hnOExOaWxRcUZRekUxZnY1dHZwUVFGdEZJbXlMdGl2VGVXa1FDazVaUmUyUWlKMlpyTFlEVjg2TUJZV1g1eEFQdW5rMXludFoyeDZhYk5yaVhBc2hXcmNma1U2M3kvai9tK2duek44STNZdHh6ZkNlT2lBUGk3WWgxd0JCS0Z6czcyV3JsaWZXYjNuK3NPbWtTaXpYSFRYcG12QW5PZ2VhKzdTOEYxRUhQOG5VNEluRlk0UTVtV3AzQkFMbGVzYTdCejRGdU9iRTRFWFJuaXlrOGh0Q09pazh2bGNzV1lJS3I0L2NITTNYWEljY3lPRHNCWEg5UjNOSUJqVXNkMWZpZGowaWluSDVyaVpmVU9EVGlGUXVsemVheDcrakhaVnl4ZjM4VTN4TGRyK1U3dTQzSDU5S2VnSzk1SnZ3dnlxbjNJZ3hMeVVHMlk0UWdrQ3YxQlREK0l2Q01QTWcwbFZZUkJuU0lRa2FKRWl4RkxJeTRsQ0NUMmhtMHNFQWdFSlREcnFiNGdKMkpZb3pTVUtWZWhVcFhxYk5yWitaaGVqYis1ckhyR3pjY0xRaEpTTXU0OGVQTGl6YS9LelFuTUNFS3dFS0ZKWVlHeU55SzFsdEpVL0o2V21GeFVxTHNJblhTczM0czRBSm5UTlA5SlY4MVpXMDhid294d2pNb0dnKzFnUFB4d0FNZVprQkVFK1ZzdXBzeG85Y1dTNWl2bmFTVXBGSlExVEVidGV5S2pNQUxsU1FoNlJLM2dDQ1FLM2VRVTRqYkVDN3VxL0F5Q0RIdUNCUVRzY01iVnV3TVVCQlREUTl5UUZNMnd5Um55RVN4S3NxSkdVM1JpRURQWEw5RFo1RjRJcEF1U1lDRkNrOElHWlZNRkNkT2tMdUUxSUtWRmxHZ3hZbW5FTmVOQkNWU0prbkpFaitTTUZFbVZKcjNxbURLSXpHbGtTYmJkOUhMazFmeCszZStWQ3BtS29oZ2x5VUJWcWt5NUNwV3FWS2NhVUczVWxmcG9rTWJheE5Bc0xWcTFhVTlHSWxPZnZKbE1wcGpKWkRKYlJqdGFOV2svcnpXb01JSWFOV2VzYXV0MDN5TU8yUHhJSTZNQkU5MXFmb0R5eENTd2dDT1FLSFNUNlFWdURoNWhGWGxwdHJnTWp5QktzcUlhTDE3R2Nka0E1OEE4Z0NZLzMyUExid2tuQ1FCQU5tdEN3Nk5vQnJWSXF6YnRPVXNXVTQwNWxDd1oxdER4NXAxbzdURWRKQmdTR0w3NzdCRWpvOTRhbzlvanRLOWJ2NS9oQU04UmE0NlNqZ21kZUx6TkRNaGlVSG51N1FtRERCWitJVUZpVGNKb0hjbElrU3BOK21aR2NUY0g1SWNCcGNxVVIwV29WS1U2NnFaM3VzZWdGM21uK2JGbHJpcTlCbW1uVjdQYjdHMFJ0Q2FzT3dLUVpFZ2g0ODZESnkvZS9KNkpyejJydnoxMThQazhQcC9QNXkvOU5QSmlyOWdKd3lsS3JVeTVDcFdxVkVmZFZGTnRocldnVlp2MlpJU1llcmVCb0pkSEtlYWVnMEo3VUJlcVI4U08xYW4zcEZBTUtMd0l0VlNKKytGbW5pSEVzRkVRVytwZWtvTTVIcWY1MGx4QkxMdjl6Q01BWlRQUTE3bjlYNWtIRlg3YzZRMkp2YitLU0lzU0xVWXNqYmhtdkpFRVd4TEhKRFhNU0s1SWtWUnAwcXVPSUtPTHpHbGtTYmJkOUhMa3lWZWdNQlc1VUt3a0dXd3BWYVpjaFVwVnFxT21qOXA1cWxOVDMvLzF4c2lBUkNLUlNBQkFCUURBZ0VBZ0VGNGtjSFBBNHkvZjJtN1lHbzVBb3RDVlNTSWFUZVZHRkFBbHgxUklaUnZHYzVqMEpJZW9jeHp6cEt0Y2F5Y3hJMWhTeVYrNjEvR0N3dXpBTWZRTXc2TFRLZDhvc0ZBY3JOVkRQSWVGczZMSEZ4bE55dGllRGpiOEdPUVFiaFNJdGowMmdJZzhPVmJVZmdGL0d0a2FDc01NUnlCUjZENTVtY1BqTGJZa0k4SjB3SndYZi9NMW5vOWRqVFZkV2hwaUQ0TWprQ2owR1lZNmtZMU41UTRFS2dVaFdJalFwTkNqYktvU0NOT2lYb1piVkY5L3pzTGRHWUdnVmJNendKd3o4K21xVTJzalkxQnJjamwzZkcvc2Z6NnE3b2cyWTM0dmZwZFVoZS9DWjJISDh5QUEveFE4RDNteUFJRE5BVnNDQUpiWm54aTJjSDVzMmNSSndWYU9tMldXc3RQR1p4WVpBMUtJUjdtdDNBekFtdGtGVUk1aWxEY0FtMlF3b2pGWEI2cjNJc0J5VnE1bCt0TmFiY3RyRitRckFRK2xraVVXemlIR0tXYzV1MUZVZE1LTWhueGl4bkFVNGxrYUFuby9uaHVTY0VuSHJRNlFFZG9SMkZJUTRHRm5ZSGtmQmdKVHdObDQyclFIN2RWNklCS3g0R0RJUFRTUEF0WUhjdWEvVXplUDFlcFpKTmF0T0FTcUZFUWtZQ1dTaktvbWN2SjRRL2xZbVI2YldpRVdXVklGQU5hSVRPVncyWlZIenI1TXpDLzBpL0Qxa3dFV1ZEL3pUOWI2REc2MzJpSzRVcUM3VFAyVU5ibmtFWTg2NFhZaUtsVytCUzNGVUt4SERRWW8rOEI5eXoxdzRoMDdCYTRRa2t6TDBMR0pHSXJyWitjTlh1QjNQdzZjZWRwQU1VNkd6UlFxRFc3bnRCK2NXaXNGeW8zV0NtUWpMME1tWG9CcU5XUkZJWkk3Z0RYaHRTY3Q4THBCZmtIc1JRNlhwVmZJUnZaQlU4cDg1RjRoSDhFS254bUVZbXUrSzZjWVkzZ1FlMSsvVHpKQUlSRjFjS3ZObW4yUTBNOGFPV3NYalQ5anZCQ3I1MjF4cXRXVkk2YXBMcGVoS2N4WnVXOUJXTEozUUdxZjlKVGl1dnZVMHdkZ2h3LzhJQlJJWDFWdU5ReXNCcVN0Vk5QWFpEdEwrTml2Y3dpMVBnRC81TzBveW0ySis3OG9uMHJ4Z0E5T0NsYTBnTjBKRVBIWS9ZUDRuaElhd2JFSjJIbFVuUjlEYnpmV01QQXZ4a3J0QTE0eDZqckFtWVVjZ1JmUmxabm5ZeHMyeStvd0xEd2tTMlZrM2RmakFBVVZJSmV3RDA2dHorQXV3NnBJcXhUbDRkbWpvR2xZUVhETWIzMUZKUHMrNjdqOVJOZ3NIWWd3d09jWXR1Zks2VmhDTE11YzRORlRidjlwRVFqRk5qTnIwTFdBSkIzWEdIbTR4N25CUmZYbUhRaFEwYnpxbU90VlRueWVTNngxSGJDL2Fyai9YZS83cU1PbDdNMGVVbkRQZ2h5aXNGOHFJb0ZiaGZFZ3F5RDRvM28ySzVSTHJNSllDYUM1Z3JId3VwRE5zVm9YRkkzKzlXWVBhMWx3dk9wOTFmdmFuR2hvbUppcDk3dXBOSG1PSCt5YjEraExJcGRkcjIxUmlBMTNKaWI3OWs2cFRCM2RGQW83MTRwUTF5UlpiVFhNeWRBN21RRTlSRkdoTC9PeHJIamRSbm8wWGRmOXlFZTBuWEZmT2VyelkrRE8zZmlCV0JGTUFtcUZiT2Vna0FxWFRWbzVmUzY2eU9JVmxMQ1NkY3A2OHVlNHlKZWxoVVB0VTZWbTJqbk5BUHF3V2FObm52MXc3SlA2eFFaYXdTSVBsT0ZNRVVHdXpQQ0JiMmRKVXlnWTZROXdyNkpVakpyNk5aY2JFWXdML2N4WmZlYzgyTE9zTUs0OXhYNjI4UDhOcTNUREVjSUFQWnd3aEx3NThoUEtrNUpTb0RCSmdpVExFU3RQQTUwbTdTcVltTlN4NkZOdjBpU2pVMDR6bVRiTllzNENxemZKZmxtQy9ZWkpnTkJ3REFhQmk4ZUJIVDVIQWs0SVFrS3VSRVIyY2VIQ2pTdFhZaEplTU42OEVmejR3Zmp6SnhFZ2dKU2NuRXlnVUF3bEpYZGgxSnlFQytjaGdnWXBUaHhLdkhoMkVpUnlsaVNKcDJUcEtEbzZXMlRJc0ZXbVRGNnk1RUR5NUVNS0ZQQldxQkJma1JJQ0JsVm8xYXBSYXRTeVU2Zk9WdlhxK1dqUXdGZVRKbjZhdGVNd01mRm4wY0ZlcDA0QnVuVFpvbHMzcEVjUHZsNjlrRDU5K0NaTjJ1YVVVNFJPTzQxcjJqU3VPZk4yV3JCQTZFMHlaTWtNNGJ3NWh3c1duQzVhY3Joa3hlbXlOWnNyTnR5dTJ2SzRac2R0elo3SE9zd0dFd3Voa1JpTTdUZzRFQzRlbkIxbmlKQVFib3VkRUJHUkhWeUlJUkxlY0Q1OElYNzg0UHo1UXdJRTJFbE9UcVFSWEhBUTE2VTRoQzdnZ0NFQWcwWUFCd29LRHJ1RWw2K0dxYkZOUExXR0F4REEyKzJtVVNOT2lCZzd0MFNrUzMxb3hlTWtqckZuMklJakp6ak1TVWhPdWtrb0VKU2lqeUdneDJJYS85WmMwM2IrbjgrZ3FrZ1MyOHM3NTZjalVwM3p3VHIrUlBlNlNlcmxVZFQ1YWV1Z2UvQUhnQno5RjRpbndFOHErSDRPdklXMzlGYmVXcnkvQnFNdnYvS1N1cGk5SGtyVmVmRzVaNElhdmZqeVd5K3A0c1ZYeWhlVlQ1bnhJcS96YnZiam9xWFgxWmUwaGowQVlGTVFaczJCa0FnRklHRnd4SFlOQjlYZGFtd3IzczcvQ0lmZ1laaWZoVDlnYTEweXd0emRaWS9oY25lVFlhL2tpejhLQ0JvcmhGWjRnMWxYQkdHV0tBNzUyRWxJZDlhTEs0U0ZOZFYzMjliRzdSSUlLVTRHRXZoanI4TFUxd2pBMjNzOUJtZ2JHalE5N29VS3dxaU92eVBaRVJJQ0tJekE2V1RwV1F3VjZvSmxlM1ZUbGo1VHlQS09qbTROYnZPZy9UOUdWZnhOQTloRmhRRFN3L2ZSanBDRjJXOE9BNjhpQ3lUK2YySC9ERzhDNmUrbTF4L0lJODc5TkEzNXJ3QUE2OFFXQVlnbFRUQXNZQUNFcWVOKzZteTN3WW9BNEYrak5vV2NOUzhPaWFqUVFQN3lNRmF3SWpRUmdTVU1MSTBRN24xUkFYNlJGOFlLSUlKVW9aM3lnQytRMlFvc0NrdE81bHVNSEdVYUUzZUxlOFZqMGhxcFdBcElFYWxPYXBHNnJkVys3cVJBRmNDZVlpa0E0QlBUc0xoL3dVV2ZPYng5UjZVOHFmQTRTS241ZzdZQ1hBU1FDUUJZTjNrQS8vMU4xZi9rNlMvMFkvMW9Ccjc0R1h4eCsyTmYwdSsvN2d2cUMvTHp6MEVmOU9SQnFqbjFQZ0xvWlE4YisxWjBjOGdOL2wvMkRXZk5tZktwWDEwMzd6Mkx4bjNsdEJYVGJFNVo4SVB2ZkcvR0pvU0R5NDZBTXhZMkRnRWhFVEVKR1NVTVRvV2dwa2N4TURKNzI0UjMvZUgxOFNDQ1M0SWt5WFF5Wk1xU3IwQ2hJc1VNYXRTcDE2QkpNeU1UTTR0T2Ivbk5XMzd5dnYvNTJPYys4WVhmL1RzdTNMTE1lVDliZFh0MmNOZXZYdkx5YVBqRkRVK05nUmNOdU9CMXIzbkRMQklHUnlOUUdEeE95am1vVklPTGg2K1VHQXdBa29QOHdKT09oaGJKQk5VdmhwVU5MWnFEVTZKMEtWS2x5Yk9iWGc2dEVoVktsYWxTN2x1VjJyVm8xY2FxVmdkdm5hTVFDY3VXWEhIVjVjaTRXVVFtVW1VME1NQW10Z1FzQlN6dEYzUmJCQmV3RklBdzVsNDFpamNiQm1RcDZ5M0FFTnQ4MmRBa3dqeG56N1A3OFZVVURCL1ZtdUFkK3g1NmNQKyt2WHZHUmtlR2gxWXNYN1oweWVqSThPS2JGeTFjTURRNE1IL2UzRG16Ky90NmU3cTdPanZhMjNLdExkbE1PcFZzYm1yY2dXQTA3UGNlZmVUaGg3cWRkcXZadVArdWRHMjFsc1RBUCtmejZkcjFtb3ArMExKMVRFZ2dTNkN1dkM1b3lBaXViMDEzWVBNTGJZelRiT0RBVFg1WUVpWXljcFU1SVZjUGZKRGxKK29PdWRzdkxPVXlDSEEwZXBTaFJkNGR1SDRLZ0VwTUVPV1pHYjVFRmNNalZKa0JVQlVCUlprQTJaS05Sc0FOMSsxMHhLOHRpNUx2dTlDUU9jWnd4b2J0VkpZU05ZU0ZJMy9lendpTEpkUUVsVkFWcWJGZlZqN0dGWUtVd2lMMk05Y1NkZ05tOExIY3NBSWx2M3QrcFR6aWtnalM4TGhucFJBNHlEcGJPN0JjZWtoTElSdHlyc28zaE9GYmlVMjlGZ21LWTVKODJ4UmQ4cXlsc0ZXa0VIL2JhbjhsbkR2M1p5NWU0RFZHaVozT1FSREJENDY0WG5XVG1vRkRSNTJ1WEpremxmeUNSTjBqRlVMZXFaVkxOUUVYbVZFbERvdFpOT2ZpelE0UkxiaTBLM1ZmUWl1T0tPRVNNRlR2MTNUdmk2Q1Z5VTdXeE1tS1czVWJ0RG1uSTE3eVgzSGNud2pnb2ZvVTRtYVNVbExuSVBvZDB3OHl2NjZvV0lNZFNpR1BVdjJ0Z21BNEVkYTEwRnJudFFtL2VsdGhmd3VoQUhXS3MrSnMvM3pxdFR4U2ZjWmRXdk1Ca0VrbzJPV2Q1aDhWeGtsMXdRMHRXcWZYeGpuYlhUd0R3NW9tV1o1cWR2SElEYktZeHlnOTcwcEp2ekF6OG4zNU9MUmtmU2JkRFRwWmdOTTlsUUptMmlVMy9IMG5neHZIMjlkQWVZMlFEUXZ4WjR6U2hwUWJoQWpCbXdWYkk3RjdJdko3a2lOMUZKR1dOdUFuMHpNRXlSbDBoMk4xN0pDS2lnQ1BLZnk5bkhOT3R6d25JendtZ3V2WlovVE1CY1FsSEFmdzVFeEhEc1hHdUZ1U2VvM3lDSm5aUmIzVzdVZjNhTlo3M0VZSzdrT1NsVkpzd1lZeUpDdGNHTTFHcmo5OGNuSGhrRm11N1BkT3duMVd6UjBoeFRuUlU4YUJKbXhxSDl3UUlJYy9mVVdCSGo4cXJJU2piTzJoUFc3bFJJYW9ESnBLcDZXclZIYjBvbDVMbktMeUZqMlRIZ215OTZBcFo2L2xxMWlOUFk4dndES3o1Z3MrRS9DWklDUHdjYWNxY25SaXIxUnpQc25DZ1FWYWc1VU1yS0dKNnk0K3lQWVpJN3lqS1RKS1NVTjRvVVQ3R1RkaXhPMERrZmNUVWRta2FCenFQYmk1U2lLZkphSkRES1kxWmwxMnUxUkFPa3dTcDd6SG42UWthaXBOTHI2RTBwSGdtSVEwTzN4Qm5XU3lZMjBjdUgyeldZeE5RM3cybUZ3UDh4azVjS2VEc2RVYWtLbExITkpHOHM1eHp5aE50dEVCaVJETlFzY0NsMnYyWkFuMUNpdHhNRWpMTXdHOXAxZER0ZHFpd0pUTkNmTFNxUlMwQXRWdXFRUElzUUNSWkltOHg2NklOd3BUQ01KQzJ2WUhyTk1XTXc1VHhKNFZpNEhnUlJva2lnRktQVHBuNDVKWWd4cWgwYm9xZ3VIUDZJZ2tRVEtWUHA5Qm1DdHlTT0pkNmJ5RTBsUTFkbmt0bGNpR1VtcFFPOXRCbjZBQlJCdlliaC9vWGFwbkNDNzVHR0l4bDhXK1paT2pvSFVodTdOQzI1VUpvTGRvdkMxVm9BaTJGQVhwK000TjFEeUF6VVVqZVN2NXdHN1piZjlFY1Q2ak1ic0oxQnBZL0p0b2w3TjBqcFFoZ0xoY1lmWWVVWjJCWHFHVUg4NVE4UlJ0ejJmUWRuem5sbEIxOGRDRE0zQk0wUlZtTFhHUEZWUmpFZFFoTFA5RGlKdnBOem9VQXZlZzlaQUxmSWpUVmI0ZXQ1dlBNOUFVVkMxMUpZQk15RXBKb0xhd0hWczNBMENORDBjZzIveG5YSk4rSUpXNEFLZjFHU1VhM1ZCY3VNclhsVVlUdWdab096UGZXS1J1YzhxWU1tbE9NS3dsN3gwa0t0c3dsZjJaUnNyajFoZzJ5enFCYVBsQWFNbGtSQzd6RzRXYUhjOEFCcmx5MG1EVmdQaEtnNjBLSUdzbG4xRkZRR29CSFkxVEd2OUtnSnAzVm9vM09CSXVBNDg1b3JoMGMwTkcyTFg2eVNBOXNHY0JhbjJRaG9iZ25pSjZGZXR1S1NIWExwNWVjTjFGaTFvM01nTW1LZHcwSXJGaGo4MUtpVUxEdlJKREk1S1NVbEtBRklLeFZ6Q3VnVXhYcEdnWmZBZ1BFRTkwTmV6S3pweHZIYlBUVnEyZE9hcTg0MkVOOXV5VHpLMkZZdCtXZFFaRGU0VWJlQjE4c3d2bFFVQ2lGcmJMK3lDN1dxbHpaT1ViMlZwWVFadTFtUFVrVDJYeTcyNk5qMGdwVW1vRVdJZXIvRkprZ2tnYkFBTDREaC8wbG81SkRCTUM3a2cwRHR6UG9nRjBLN0xXTFhSMDZQRU4wb29ISDFsdWVKa1FEUElXVTZNWk82TGEyc2d1bkY1MDhDMmxZR1pQbGN4MlhKMXR1WEZicmU1MUNJVVdTaGI0Zm9qNkxnR2NtbGcrVUNpU2l4Y0g5cko2VFRKZEFDMjRBcEdic2E1aGEvTklyK2g5SWVhWElDaVp1OEM0Skx6V1Q3Z0tZVDc2MzkrQUFqTGxwcGRYQUxibXQvemNkWjhuZkkvc3dYTmJaZHc5bVIxU083SWZnWktDLzRNQ3dwQ3c1c0QxajQwd0l1YmR0cEJOY3NWSG11VVB2aGFrc3hNOUY4Qkxrc1EzNk0vQk9KQVF0OFRCQlNVYlNvandLMzJFWWJlUXJ6dVlHYTluV0ZoT0tUbFFCdzlDRmo5alRHNEozTmdEdmV1QWcxVU9oYjRLQXA5cEhnYU1KS2IwU2xvTDdEb2RIc0xqcHRYaGt2T2Fhb2UwQ0hqRFU2dGtLQ0I0MmdaSnpSRGNQbzJ4TmVKclpEeGNYZVYzVjI4SndrMEhKaFUwOEx0R0RRTXFLT1AzVEdvQUk2WW5iRWtSd0RSazNPNGtpNjFJbnFUODEyeEtiaWlvQk1HRTVETHBNS3JpT3BvdkZMdGJJZTl4cU1xL1NUWXN5MFpRRjV5YVphdnAvYStIN3ViRG5wU3NpQndKRmFnQk1pN3dWV2M3VUhxbG13M2ZjTHZ2bW5WUlNGWVJRRW5neG5IdnV4OFExQ1Y3QUlBdUFJRGRBSDFBK0x3ZytnSGdQNEM5UUxnQkFOYWV2T1R3b3FNSFVvTmdtVm1FeURJN0xyeExIRFhYRWs3WkFNSTl6T2JHeUNHRGJrNkc1VWduVHBQYzMralpRTWpZR1V5dU5YZytNL1RpYkkyY0J4Z0p3a2IwYmdpNGZaZjVBQkNXVDdCRFNNOFllUy9KOG5vNElzeFFZazUxd1pLbTQ0Q2p3NnBUZlFqWGpVTHY5ZWpQT1ZLSjNQaFMyaUlmdWxBSzZzTUx1elk1T24vYkh6aFpETjJHYVBoNDY2WkxVVVpFbVdKM1hSRys4QSt2NVlPT2xGSU1SRkI0K0xqV3l1U3VTT2VwM3FyUFdyTkJvUnZHRFdiZ3FjdTk3MTVrWHoyQkVNRlVaWGZodkw5VUQvT3VtNjR3ejgxSWtzU1h2WnVJT3FjWVJDcHQrRFVpZ3N1RTNRN2J2Zzh6OXFFemY4bWZlSEZuNTVzSlJVdUxZeFEzZk1IWnVPN3ZoazhNMDkxUXhMQloxU2UyaVFOVjBkakV1Q0ZUYm55amVhcU5XdERVT2JxSmVKc0J1bklRN1BLV3F2SFBQRnhFWFRNS1JqZkFEYytNOWI3NVdpdEtlTjJUVHdQTWIwUEE5cTJGVVVHU2FMaHNsakRBVUFNTUxkS1lRSFZqY3dwZ1lLb3dhVVFDMTZycmh4QkRSVS9hWmdiRW9VcytBMTBUeGtzbmtTTGpaYXl5UmErUGhLS05qQlQ4TG9TcXJxQkdpcUdTUmlGNVRCQzdoNTNDaW9lRjRXRk1WMXpLNWpEUG9iakhnUDVhOXNCREQxaU84NFdjTDk0Q281RWRjSWtIbE5mSnRmbW1BRXQrQXAxSmF0dzd2NUx4YlNVM21lS0NXczEzY29kUVVZbEpWdis4dG11ckFHb0UxbnBNaFpleFRMb1BMMGtnN1VleTJNTEV1dk0weTQ1S2x3R2xXeEFobkhmTmpaYVdOY002ckpiTWltaTArc3p2OUJCcU91dGZQVkVqSGpJYk5kNXBhYU5tYkgzRkxKdmkxdGxPeE5zb3RkaU93VDluZVBPNytlU0dGRlR6MFRhZDlZZG1BL3BKOHFGYTVnc2Zhb2lzdzYxQW50OE92aisyNDJXSzNSVnIrY3lPQ0dUWFRaN1pxM3lISlFMUitxZnVTYmdQbDRVb1VubkZNcWx1SDlBUDhSaU8xa2Fsc3hlZUhYbmt1TkllOSs2MDZ6aWgxczhPSzg2ZWtNcjZxc0JzOHJ1VXE2eEZIMGdVZlZzT1lhbjNXU3RBUmY3RjUwdjZ3ZHVLYjBZdjJic3AydkN3U3FGYU1BcnJJTHZZVjBxeC9UczZjRDkvUjB2bWI3cStVajRRSkRIZkx3cWExTDJZU2FLZTZvY1dYVDZFaCtWd3VhUnlIc3BMdGlVTWVmcEpSVVlJdmRPcDVZRisvTWhnQkIycGZ3R2prS2NjZit3U0krQlZ6T1hMR2cxY3hXNERWZjlIT2FhSGlTczAvUjNkZlNpOGhkRnhZaDdNd2xGL2p5aHdEYWdGL0NlMnowaHd3RjRYNUpiRHNGSnVBd00wTnF0anNHTURDVjZHSzE5aGpVQURiUk43eUdkaE9oOHV3SEwzMEd6cXlsbWN2N2FJZzdRb2x6UG5Md3JiamNOdjM2WEthRlp6NGk4UFZIaGVRM29RcGFxTEpESTNTRGtFWExITUNKVFphUEt5ZlFUVVdyODZxSGNXNlpUZTVvTTd2YXRORFhrRmxja1VQNkdTVVFoVldpdEYyVzcxOWZQT1pIZTdnOFdyN0ZtMjR5OGhIa1RtUmdWN3ZqUFJYUHE0ZEQ4MGEwYVpnNDNmQlY1dFd2dkk2QUJZT2dmR3V0aThpL2txeFF1TEVHb0cxbzVmVG1tNm5zV1pyZGx1RTJicjBMZ2tkU2g3RjFNUzVwRDBEWkR3OFVpdFdLRm11c3gySDIxeEQvYm03eHhzOE9IMWxpWUpTVnc0WXVqd2h4UzMwQncyNUI3YUNiR3RnSFpVTEltNnVlYXR4ZXlwclZrcStsRm5CbVJWQWQyb1VUNUNWNlBMa1hYNGthS2JkZ1RtRmhqZXNvL0tqQzhJbWxnYkx5ckdLMzhTN0pqcXQxRTVhQ01pWG93YStVUGd5M2JKNTZkb0hJZ3hQUGdid0pyZFd0bE9HSjdNQ04rMDVpNlY3VW1qaWpoU21JL2VvZFhqSTJXeFFIamFtZlZPU1B5bldEdDU4Ym95OHl2TE40cTkzSmhwTDVwV0JuUkc2bGFhMXBFVjVtL3VJQXBSTjdSWG5UaklybW5BMnNIa1pwR2NHNnlzNlplV1h6NmQ4blRUZnRaaFFPYmFCWG1MVk1WcVprZ05ERmdEaTZYbFRZbTljVTJXWWpwelNTRkFTQnRxcXNTb2xpVVBLVWZiQUQxK3BpYldaNXlhWXppL2ZtV3NIUlhpY2ovOU5wMFp6ZmladEozMTExZWRnZkF0WDhXK21tdjI1MWRmRXdGQXRxRzh0ejJ5RHpMaUR0dmFiZXJXK0pxTmJoQ3h0U2dyTTZxNHNsVEpTNDF4YUNwQkdocHBEcnJpUVFXVjdOZ2RqNEY2aFNVam1vTFNCc3RaVGR2ZGZoQVluckJqVWl6bStnd1Z1OHpxaHNXYjN4L0YrNVhFVURVVFFYUUN4d2RIeHk1dmk2WUhuczI4VWlKaDBuN3hJV0MzNWwyc0dWUXFTTEhmMUNON2dDUUtrZUdnUjhhVFdxVy9CbGY1S0NBUWdUbXVMQ3hNelJqakxJc1I0UWczVmpvNithdlh0bXNDSm9aTU9rY2J6RjFLT0hHRDdaR3lrbGNXTXhzZWlEc1NtVXdDU1JieE0rT01WWWd4S2d3dlI1Wk5NQ1I0MU9RdUhzenVRMSthNyt1ZjNnTWVQM0dSR1hITTBHT2RiR2hmZjd6SWFSRUIrT3h2VGgwOThCczNmL0RBWTNwb0R5clFVdTZURUh5VWg1ZHRjaWMrT0NoUUZqZUYrUkR6NHR2cWREOUZ0T0NpQTJrZklIdmVrMlBMUmZ0QU84ZHhZdTRlMExpejdXQnl5K3dEeFg2Wkd1clphYnJ1ekd6V29PK21DK1pGa25Hc0tUdUx6TkhDSkM1SDhnVXpGczUzV3JCVk1nSzNJbE9CRkwvQkVRV205alRtY1I4VUVrMExKL1FFTURmZ1BIVFpDcXFXRi9vS2VldjRVUjRxR1ZVUzV6eEIwTmZ5clFkblQ4d2ZkRWFMdHBjajNKaDRGYS9HVDZZYzVadUFpMkRqdXdjK0liK25PSTd3Nk1hcU8rQ3ZLYTBqemFlZjREcVFvZVVJQWtka201dTVuUE83Wm13VHpBQTVWVWZ4b3VTMkdGQUlNQWhBMVMrZllZVklwUGNYaUZMRkNqbWdlT0V3QVVkRElIdzYwUGdwSk5EMk9GUkZid0lNRWF4aHBLV1c3Mlg3bG13OE9ZV09GdzJkWnNuMmROdjhKcCtmRkk0WmhtVDl3WmNaYTlnU3VBQlRydThodzVrMG1lQ2o3U3NlOWRLZ2dKUFJSZ1VzZVVWSGFrK3h4OE1RMUZHRGhNcWF1bG1uUExuQXREWUFDUzlPVzZKZXhlMUYrNHc5dkprejVVeCtxZ1c4NWpreHd6dzV3V0FXNW1IWnlmek9SYk5NekNPYzVqZFZwaFpzVXBzZStwR2dScHhtWjQrWjg5aTlwTzN4eGhnNVJoKy80YlVDakVwaDYwT1AxL0dXWnJXb3JpN2FaV3VRaStMWkp3WXAwYk5NZWZaaHd4NDk5aW42RkpjQUs0RG1BR1RJaUZXSnhEVHp3bEhmemZ6YXZRWWQ0eVlNeURTWVBDTE5tSkN6dUZGYnBvNUV1aWlRWkptUWxySXprRXhCR21LcDJMVGppa2lQc0tmUHZGMkpkRDR2MUUvczJlMjZzeGdDcnVDQjZNeVpMYnNJUDJUZDl1bk03cnNzdFAySDZGQmdVbE9CNjBDL3pZNHEzUXkwcHJuY0FTN0paTTgxMnlZZEpaTDQ0Z0lETnU0NjJZUmFUenk1SEtxN0xqeGpGT2NieGFYWnBCMHJiWmJVUFRPYi83cXhrZlRQT2daL2RLS1JnR3o3YmZJc29RMER4djN6OTgzTE40WW92b2FibU5aMm5qT0tIblo5c1JkVEdqSnF4SU9ZTWlkbkp3UlpEcGtUMjJwcGtkSVVOWEZTQmhYS0hHdUJoK2hsMytqNWJTcjJYTU83U0IzVkthWDJCanJPTW0xNHErUnNPR0JIc3dZRk5yK2tZTHpxQU0wM25qQjk5R2pxamthRHhNZk9hTnJXNkU5Vk1sQmlsVFZ4Y1dSaUFKZXYvUCtUNGE0TmJZcUVza2RzUzRhNHJWS0xLUUpOQkpRRmJTcmZqdEJtTW9FVUtTdmpmQWxBbFlUalMwUmgxTkhVdE1XSFc0Rm4zMFlVMEk0STlBUFU5cnd0dU4rYmVubFNjdGlFVFJZbTRnNGo3dDRBSkpHb2Nlb2tPUmdRTTh6MGZIOU5MTGFTUVJFOFdjQzRGZmthc0NiWmhYNms0c1NiR1hOTkxkSXZtUUhPQkdvR1Y0dGdOSzBzOTN4ZkF2cmk3ZW1NQWhhVWdjR0l5eWZmZVhTcGJIZzkvZDhtOTV1OC90K1R1Ny90KzdhNFR4L3NvL2U1TlB3enNwdktSck5UajF6cC9rL2Ivelgyb0UvLy8yU1dlK05xdmdtUmRVMGFLandSSXYxNnBFNUZVZW56YjNvNzVBamdIRU9rSUY5K0dYSTlmRU5ZS0g5Y1JrUHlxUTFHaFBYUytMTEdubVgyZUc1OWs1VFp1eXJGWE05RG1UN0tsNExtbVJ6WVlMaTVSMmZEa3NLSWJmQzVya3hnQURiNlIydVRmZW8xL0phSlA0WjJ0UWJ2NzVpYnVHOXZRYStvTStYYXVpS2FIWnM5MXJJeVFXK3JCbUlvZ3Y0WUV6aDMxOWZkdDZlZ3I4NjVkV1Y1NjRySitKU0srRzdpVStJZWJqL2VMeGZJOWhGWE92RXhjVmROQzk1U3h4MHA5SS9hVXoyYVZZeFh2YXE1YTlqaW03Mm1TY2JzQXoyTGEwT09icjB2Q1E5WUhkaEFwTGxYYS9XTXVvdytjLytxVnYwRHlxTXBYTEptZkVMWDhFYURidTF4ditFV3RKQnZvb1QwYStrVzJPbG00MlkzQWtSbURRWVg2UHJqWld2OTJwSmtVQk5pWDZnbzJkTGhlOFlqRVFPMXd5cWN2L1AyajJ1aTVIMlB5eXRPZDNKT0FNN3UxRTIyL0ZxbmZVUnJkdmIwNGk3b1g0TkRyeWZKTFJvdURJN2FtcnZWcTl3KzdhcDAxNGpGRnhxeE4vZXFWN3I4MmFtYWM3MTI1VUN3dVVkWDYraWxBaWxrdnNXdUdBaFZxbzJPK1ZPSytkV0NmUWNaN1NxQytPcTkvcnJNUElNenVNU2E3S0cyRmpOZ2lMY2szLytvNVZ0RE4xRnhEalJwc2l4TTNqWnd5d1NrQ3NJcnhCR2xtZXhLT3V5WFNxd1gxSXdXaktuVWFOU3J4djdtenFOdVRsVVVWWnEwM2NsYSt3L0xkQk82Vzg1c1VidElLSVlWS0w2SDdIaFdVck9yNENGcVpQRHhtKy9XaDVSUEhxWDRMUk55SWdqUEYwZVVsRElUdEhPZXFyYnVuL1ZUaWZVS3dXaWhtSXBBbzE0Ti9wL2dTcXpnN2x1ajByN1dLS042T0NQeGw0WExCMUJid0tFR3ZZd3F5elViTzduTnF2ckhtN3RvZnFCTTBkTG5kcXV2ZEVMQjhtQjVuMXpQV09qYTVKQXFTRVFyWGRDSDNQRGV3bjJoK3dvSmEvV1N3c1loSzlNaldzbDA2N290M0FGRHNsWG44N2RTaGlSbnZ2bWE2Qk92OG5RT21IVVFUUnd2WFc5L0Q2clFjUzAyWGozM0RiSS92eitmWElidVNwVnZWcXZIMVhmTnZYdXVtaGczVm15K3JRaHlqVjl5WG5SYTJiMmxMZGEvakg4YmJhVXQ3TjZhNFBpbFRaYzNtYmxqSmJveXpvdmNvdTh1ei91UElORHo4ODRST2o2d1cyMTB0eU8wb3JGVW9QWFhOUWJrOVpKWEdWa3JvRzZaTXk5WFVQTGEwejZyU2dxbGdYS2xiVkJicTQwcWNYOTMvdDBQY1p2c2tWSmx0TTFPeWJodktreXRLT1lNL3VWMHNWZ1RVZUlCRldGZzJ1VU8wRGZ6RjliV0JYdGpEanZTSUhsVjI4MmtuQmxML2IvOU5qcTR3TStNQmd0bkVSZUQ1bHpXWURTMkdxMHYvMENibTZSYTEzd0g1QS9ya3R5ZkxlM1kyczhxOXJ4Yi9LdXJHSWptSEhwUS9zYTlGKzNHMWpSbE5tWW9RdzVYMDhYMmZ2clRQbUtTWkR4ZGpNdlVwTEpIcERrZEJiY3h3UlQ2QnhHQ0JzUXgxS3J0U1Rtc2VBQ1pCeDJ3a1YzamZMVFkwSUo2Z2tpN0tlUWNYdWdMK3ViUWo1WFBidERvekJtem9jdFJhK3pOMmt5UXV3WWJLWDNuY29PMFdsa1FzSS9PQ1hyY2ZiN1BHSEpmeWY0VFB2OE9WaTJ0c0p5Yll6Y2JNcmdyQk9YR0pQdS9PaG1CRUpVZmpnbmlHQzZKN3dnQ3VHQzh4eVZSRk5rVW5kNUFWcUgzTEhBeTgxd2swdVJ5SldHZGI4ajcySUMwbGM3TmIyc2dmTTI2ZVVPMllmYncrMW1LU21YMEpsUFdaR3cxVVliNkRHa3laU2xEZXNOdDFiVVhsMFo1bzZFZmU1MEFXbXhzUWQxQnBNTVlkQTR2OVB1RFF3SFhpSDk2Q2I1c01lZlNCb01oWjhTYU0vcS85QzZiTEM1TkdZMHBLZ2haTy8zMnFUMFZVQVlxSFdER3FWYUpoOFRWSDk3TjBSbmlrYXBkeWwybkJKSVpWQnFqdzFDcmpnTGE2V0F6Wm5CM2VZRWhvc3JMNUFZSVoyYTJjeHJuYkwvV1JpVVJmZGkwNE14czI2VHNHMU9sWXYvUEg0Y0FoVG9nSittYXVFSWxpZTBJQXJKTEpORG1iSE1vRTBxci82aUxuQ1NqMTRkOE5INXFhVlc5UVJBdElvdTB5N05rdHV4RVhPTFVHYzZrMjJEOS9UYzJzL2pmblJBaEpJU2hqQXUrNlcyMTREMVFNZkVCZThuZ0krUWtlY09tTkgvNytTbWRNUEdkYmlFMHlhdGd2N052R3I4S0JiQ3lJQWwwMmxvY2RFZTYydXZjYTd1czJkY3V5Zks1eUNMMXN2SmVkNjJ6THJ3UzhuUjduZGloMlJXTkJ2aFN0N29wVzRzM0tHdjlKNEk0bjhmU0tDUHVYcU5BZWFOUlVDUXZObWFWVEJCdU54amhObmN3aXhvTUdkUnpybTh6R3VEMnpTbnpaMFlidWpKV2t5bHJNL1RZZDlZZEVveW1qTjNZYmIzclZyYndYQnpwb1BXSnZCM1VlYzg3MTUrNXNiWENLWk5wa0NLNDJEZmtjNDJFd3E3UlJYNmZQbzI1b3VmNWlkR1dldDg4cDJ0a1dxS3doRmdKV0hNdFJyTTVaNXkxLzY3VDNDUlI2MXN4WDR6VXU2TXBGRGRucklidVdnZlZ6YW5mMkZ0Sktjc24vNnJNclNuS2FFemEwK2MrSENwbStyei9lY2dUUk4rLy9iVldZd3AzaGFHYzNtOWRNanRRaHhOKzJDR0lvU3BKZkhzUXdnWGp2YVJsUDN0SENBSzArZE84MnBoUUdqZVljOVo5dU80dW5hdzBVK3V3cE5TT3FMUk5iZFgwTkR1c21BOE9WVDBua0RWOUpWQUY0QUZSbk04dE5qVGh0U0ZaVG05QTJsMkJOS2EzNXFuMkV5ZElUMkowTG83N29UblFremFkLzJzeEVVU0sveHBBcmJydWxCMWdKajM1ZlZHVzIwTVdhVlk5V3VSbTNWSXhyZWJmNHRwKzVaS094NXNoUFZObkpJRXVQOGNXOFlzY1NoM3BhcEpTOXJSODhQRE9MTEVHT2pjWEViKzVhLytsWnNsL2hHOU9ndnVidkNkL2NYMmRUaFZLS0EyVjZncjVKeHdJOFp4QUNGb3A5V3V1YXZOdDJsUXphYUxxRkdxdkdoVFNna3VSOG9iK3NCWU9lL1Zkb3U5RkZNOTU2cmhROE1PWWVGTkFHWGlHZkdaVU9icE1tT1ZMdmlUNS9tTTRDYmZUclM0OGp0aTlmL25KQ2RjeDZTMnpOUG5KL0x4SHROanJxYXRmS0RLUzVNMXZaMUN2ZmY3NjUyU0lWcCtlUWJvQXZxQU1HVjZQcjUzNGRQYU5wczlVM2ljOVR4S1Z0bis4U0FNekh0bFl2dnpocnkzdkY3NVhZSG5vcTJYTEh2N0svRzdCZTRVMWc0Zi9XVlcvUmlIeEM3MC96NkNPZnY3YTV6cmgvcHovSkwxSzh3YXJhT2J0MWxmNjVBOUNjMStaSTMrVTd3R21WWVRKb2g2U2tqMWcxNWNjMlM1NWQ4L0x3dUxZUE9BZUVJQUlCTTRnTDdvV3EyTC95VGNPclBMZTVZTFU4TTdPN3RzK2ZCc21Wdko5Y05WVUVYbnE2Q25TZ0RzckVQV1JSc0RaTUpzbisrYUZXNktZaHJHVTUyb1M1UmdhNXZtVkZRdVZDOHNoZVlWWkZqQVoxRnZqOVFuSEg5TFhlS3krOWljVEV5eTZpNVd6ZWh1aCsrcTcxeHg3RmxIdFhNU0VKNlpoaGVTUTVENXovVVVWaTVTTFhJbGR1T3kreEVmTUM1RDBzUXpwcmlYVTlSYW4vVE9KcWtFdFdIZTJ6S055ZWlKKzVvN2kwVlZZMjZ6cFh3Q2x4Y2ZTWkQ5Qzc1MS9wY3lZTXZDMTR6TEpWZXhVUmgvWDRuVnFVcFVJWExkcnNBdXBWdFZ0ZnV3WnI5Z0xNUElpUk1zVmpxOWdhSnpHclZKQ1NjZW13WWpmUHhBQm5sVHFRRlFkakk1SE5vZTFDNU8wMVpLaWdZV0JMWUJkTE5Zay9aZGV4Um9WNFNCMmZMdzFjMFhDSXZtenEwcXJ5RktCU2ppVGtmb1ladlRvN3dzckFNSFpmelJBNTlZakJaVzZQMTArdnNwZWorRWVCWnJaOHVlZDA4NTZ5c0M1QkRmdysxY3VFb3BvcmFaVWw5WVZHbkxzalJCWkV4UE5KZ0tCMXNabUhsNlRhQXpZOEcxZUdXRk5HNktDYytQMUlvMHRxOUxIS1lYVWZady9mOFdSTk43M0JmaDVra2dlcWY4WldTMll2a3MzRWo3cGZxaTcxbTVvSk1nR0k2Vk4xT0Y2TW8yL3I0bHVibEFUUnQ2cEJrQk45NW50WFl6SDJUL1B6TVYrWWVpNTg1eHVUVDFZUy84MlY3ZW5OVlpyYTNWUzZPR0JnQyt5c0lWK1kzZUtYcjNBRS9BTzBzNzVsOVlZMHBTTEdxbFVCa2lvRFIveFZEcXQ1Ny9BM2FrKzFUZHVMdUc5YVdmU0F4cVhiNDdSbGpXcThZQ2JEQW0zWUJBR082K0hPUXA1bUhNZHBqRVl1MU40RDZOWEJQZ0l0b2xoQStvbWhjbW5SZEJSTndzZ211VW1mKzh5RkkySUVIbFliRzFaTVF6QjBMRGtOd0hrRTdUVzRmenUzQzB4aHpWM2IybDYxWkFuNkJtU0tlRmFLU01JR0tsa2VBOXg2NHE5K1hOZHZuNW9tWTJXcnd6MTlkY3kvdG1NZnc2MDNPS1Vyd2oxenE1VjkzQWs4NnlaUnFQRmxyUlljcUk1cFBHOGp6M1RiRFRWV0MydHYrOHFGcXNJSTdHaFp5cysrVDFMWFRQM3k0L3p5TGNhYlQ3TjdkQUUzZFR0aWJqTW96eWtWb0tlQUdZMnhxRzZzMktJZTdSSmFnM2tUT29NWmNEOGJuVkVKcVlGNFZySGE2TDdpVEpwa2JNWGMwVHFPR3pLblZHYURVMkkxb1dwelV3ZjVBTlZZTStnbXlFMDdnUk1NaDBXSXNaeVVVbWhodW5YV1pNbTVmKy9IYnZzMDhtREtyT3JjYTVhc0c1aURqN2FKYlk0MFhuT3NFWmNVcXdiRHYvbGZyRGJVZFdweVhxSGF0Y3hiWFRUVGdiZUo3OGVYRjVuM3p5TFpQRnZyT0RnbmhPQnAvdkhUYVdMV2hINlRkbjgzZlI3c3RFeS9YNXY3c3JRSzFYWHZGMk5hWVBSTnFScURCaTQwZi9uNnhRbCtMNVE3WVorNDNwa0VOOVR6QUNZbW9HdWNUeFNpT2N0WW9BM0poQlp5S1hWd2p1Y3ZCbzVHSFJxMWNpS09ML3N1Z1Q0Q0dobStndzdLOEVLeHp2U3ZQNHhCOVlKbVdVN0p5OCtJcFU2REVBMS82NFJQYzBJTlQ2M1N5TVpHd1B2MzhlUHM2NEM3RmNMYXh1MHFjNnE2dDBRNlZFQ2NFTEpjS1ZjMmd1Q0lJMnFsWjkrdS9uWjF3Y2xHQ05va3dESHhyNGVScVNIdlh6dTFPeWZwSC8vejc5aEJzeXpUMjk5YlZVNGRobDFpWWNSNUVtdkJOTkVsTkkxQWxvcTF6RVVKbEY2Uk5MTjB3RDg4TGZ2N3AwK0NiNE9iSmVxMlhOV3cxdTlvQW9OSXAvbUpYd3BLL3ptaDkzNVBnUVBaUmFOUk5KTlBwVWZ2T2ZlT05sZGhGQW8yZ3FBVzhWQ1FkbFdGMjczRFpENmFaTnlWbTZPN0ZsZkRhcnlpcnZFOG1mUTN5NUxwSGZSSEFDNGVKZEU4dXZNclRYYUdxWkRKT3JVODJzYUZ3akVYZkRwanpnbFU0Zy9kUU00SjZhMDRqei8xVUxjaitUZi9ORlRpTldYeXV2OUhVQXczQXZlQlNNSC9DRHV5elNIUjlNTGZRK0JXOHNFUXRFMkVGZ21GQXFKcGRYZmgvU3k4M1dPZXllNUxGaUhnS0VwSjNobC83V0JiNEYxcmw1T1d3WElQaktaQngxeG9YQzE4OXdkdngvaXp1RmRYanFDUEkxUFZGOENPSzk2ajRkTWRqa0JkS3JpdFNIVTduZ0ozZC8zZjd6L0oxazhFelQzenhTTkJhcGgrYjZ5MVRXMHJGcU1Lb2RjKzFTMUZIMHlMcURDQXZEcHZMZy9iVUVxdGZGZnA2cHhwdGxMK0tDRFRzQjExeDJKbDRvNEwxeXZLY205VXVNVllNY3Y2WlFja3U5V091dU9za3VyYis0Y1BwVlBudC8xNFpzYlNDZE9CZVVZNWdPM0FVZTYwU0x2dytCU3NhcGF5cmVFSjBwc1pmLzNXaE9mRkh6bzdvTit6enp2LzNsOGpNVnByc3k4d0VsV1pTcU82SVJNZHVYa1Q0OUlwV29LcUM2K3EwR3ZjUWsxSHNhbGtUd3hkc043NnZoSHJJdkFQMllSWFpMaU5MOHJIc1hmTEpsUzNNV3d0ekhjdkRjZzMrZm1ibTlUOXY1YkgzOWMzRGorekxqbDJmRVMxNlZ1dkx1b29KRFgwOFBqOUN6bWNXL3U1ZkI2dTR0Y2h4dXhSdlJ6eXhWdDhiSm9WYk91bVJVdFl4cnh4bkRNdzJFenZOeDM1M1RueU85NmREM3NXLzhsKzV6V2JKM3NLVjM4MlhMeXl3M0tXM1JmNFBvdlBrMjNNcVJjb3Z0eXZYeW41aU5jKzlHbmk4REN5V3NDOWlrakhOVGVTek1mZkZOZjdjd2NDdkVlZk5aTGU4Z2xobUZHNFBpYjRqdE5DUkVLdWJuekpWNDF1bW1ELzhGTVd6K0Z2dEdCZDNDMHB2SmQwNGN6UlRXYSs1aHhFWmRBOHhmRmM1cmpJdXhkQSt4NHo3TGN5OC8yQ0E2cERnR0g4RVBsbnByRHFzT3p2SWNiOFVaRlhxNW1OMXdkNVNMam40K2JQeHN2Y2FxSU5VUlJvL3pXMlRhOXBYamR2OWYzRmt1TldLem96d3FncXJ4U1VYYW1lUWFYcFN5TVlXVzZsN0JZb1pMRm5lSDdyMHdobTZvQ0ttN01pR0ZHYWZINmYyN3NLV2FYcGVVbDNSajFBb1dWTkdPR0Z3eFlkMGxKUUxJbi9ycXh0VE9tU3NKZDNCNTFoQm16cFJvUDJWYklWaFI5bXJSTFY5aFgzTnRvVFRGakVUV25CK25DazdsT1UydnM5U0xYWmVJaWtUcWZhSmFldndKRnhibERxdmQzdnI5RGRXNy8rNkpGQVByL3YwN3IyUTZqUWZUUWU2THpXUFBCamcrdWQvNFFoSHdkTnZVZmRLUHN0bXhadGlxcnk3S3lnYThZeHlzb2JWOUdxdHRqNEN0Z3RiT0d2aXZycU03b002eU9zbHQ1WlpoL2tzcXFod2ZBQnJVOUpFdHIzS2JGZlJGUDRjMlNtNFA1N2ZTdXFXVlI3Ti9YUlM1dWNHbnByeDVUdlFDZS84VW9SZVRxSE1qTEQ4WXIvdWFHNUhzbnV4NlJBWTkyZWJ4UGVMM1R6UktKV2U3M0R2czlIWThDd080T3Izdlk2Mm1ucGVicGJzOGRtczhVc1hFWW5vQ2NjZ1ZFajhQUVY1Q3JCS3JVTElJS2x1NDZlMmNCeUlPVzZ5WmJDclpoL1Q5MVE3NjZRZFRxY0pXYk9pbzZYMEorMUY5ZDNJR29PM1FrQjFVaElyTE50SlQxL2RmLzZ0ZDlQL245MDYrWEZja3BCd1BtT29UTzZIVStYR2NJakh3T3lMUkRIcVduRUMwdyt1ZkoxSktnZ3BFd2NqVVJqdUVhZmRiMHlmOUxJbG9VWE1DRHdMOFZMbkZZQzhUVTdxVlYraXJScnkveFdTK05MZDAxUnlCQ1VUR3Y5MmI1WFYxSlpQNS9OVHZnSFVkMVI3ZkQyNFdmRGlDcE0yM20xM054Sm1LeDl1a3JybGhGN3pDNlpydDgrMXJmdGUyNFZlNGk5SGEwYU5VSit4WExCL1dmWmZFcnlwY3RYN0hpSHo5bDVOTG1CSjdBVEhFOGZ2SXdkanZHZDMrQ1lBamFUa2tsMy96M3dCVmo4dk1tenZEQVZiYXNBZ0tHMU9mQWpJbUoyV0VQWnNGTTJJWmI1TGRzU0wrN0JNejV3cnZONlJxeFNGVEQvK1c3QWlEL1R2T0lXSnI5azh0NTVYaCsxYVgyVTZxbmx4TXpHMmFRY0x2ekdYYWZ0MG9PY0ZXdkVWMlpxUXJCdERVTzRETEt2RDhmSmlVdlArZnRoQWZraWdHUWlsTkFqdEJVWXFYNC82ZUZrcyt1QzBYSHpxZEtXMDd5TmtKVHpudTIrL1JHNkRIZ2VsYWJtM3o5YlVkNVh6cTQydGpaWTlwU1h4a3NkLzdtbHN0bUh2RytPNlhVZTJJQk16bFN6OFZ4VDhVRmtoMmVReUorM3RmL0cySkNsZUhzYnpQOTBCYlJuQ2F1OUFtdWM2WlBHQ1JYcEhQRGxOYzlTbVl6MVBLUW4xeWViaDJodk1wUXRmYkl3cnBxTkxURzFObGwyaHh2c0czcWFWOUxiYXc1K2RiR2F2UXBOMXNIT3l1MndKTGY1VksrVU9ucEhUMm9veHY0cU1vZFZXZ0pIN0JOZ1pIZU92dGZkL3N0S0lOcmNuVlN6TnhDdXBQUWtBUDM0eXNUblFObXQ3VmJaYSszVU5wWWdqNVpIakJza0tLMFFRdHR6eGRYWHB4OGRjT0RydEp2QjNZdFgzOUc2ZjFUWlkvYlZmWkUvb2lKN3NVRExsdDl0L0taRGMxNXIvZGtldU1iNHVDdVY0OVpFUXlrbjJSWU10bTlSUU4vbDNXR0FCWGtGTDZJb0hmOG42ZHZBa2hHTHloN2JlZ3ZoYzRVU0NvSWNQbmVxYWVYWHZnZ3dBZWR3dDJ3STY0NURYbksxMjFIaFlCeWpWSzA2Tks0LzQ4YUx2b1hVeTJ0NFNwZS9rVjJ6L1RZV3FxajNiQTJHakdzN1dqYm83SFlPbXJXb0NVU1BiTjJ1Q1ZSc1crRVNEWHJSdngrY2lTWkd0WDRmYjVSS3FVZDlubnRWQnArOUl4MFluRUpiVVVhS1dWTkhjWFVLOHkxblpSN2lvOURMUHlmUFN5WFRDVngxNzRucWxsNDlva2IzYXdJTEtodVBhTFdQWFhOdXp1OTJ1SEVPYUo0K2VqNXZhK05xRjVEeG1RMEtIdHl4am5qMDZwNUI5YTk0ZjNhcDZvL01WVWF2ZjB6V1BKQTdoSjhLWWVjNWVXVEF2aE02a1ZKOHNVemlJRE12S1hVYjVCK0pKVzV0OUpSbWZRb1RoK3RabjE0b29wMXRMR3RlR1o3VTlPMG1jNWx5ZFdiQXpZWGJkeDJwK3BPL0M4elNRVkdqTy9CM3RsRDdPODgzRmsyTnFWV0hwcHBXcG5FazFuL21wWm9WNmFKZEpIbU83TzlRVkpTdjBodGE3Q1U0SnR5Y2JndC9tbERyZjRVWjhFUGdLVWcvQ2NJL2dHREpmV043RWtlK3dTYjlUdVhOMWttM0NCZUM3STVudDRDb0RBbG1pNFExRE44UVhkdkFWZzQyMDd4OWZmQklyaW8vcnMvSzF4YVY2UnM5eHM3WHprb1NDM2pReW1Cb0FuYzBmTUdwQmhocHJQZXR2eDlycmRYc3ptZTRRS2dzSjhZUHIwYWFidW5xZ0F4TVFUUUR2K05QY3d4ajJPeU02ZHUvM2ZubWovR3YxMWtQUUlCZk5CY0N3S1R3M1VnUzV3RnJBQWRSeFZ3UmdXOHFRSXVoMXRIS2xPa3I5cll5MThmYW93aVcyc2c2N1lHTDFqSlpNSlV3b2NxNFR1VnlCMi83UUtLN1hRYm9QR3dCcUxXUUQ3V1FMN1hRSDZ6WVEwSUkzN282KzJnYUFINzEyM2QzN2MvUERkY0swSUFoL3ViRVhLM0NXd0hwMkV5UE95Ykg5clltZjBCMlBzaEFQTXNTSFptY2V2NEZzZnV4ZjM5eGYyelYvLzdENHNYa2JnWmh0bDhxd1lPcUlFSDFHQ2YrOEVmTDlOcU01K0d6VmYybjIvK01FZTBtVWV0WmNCZS9TSG9ja1ljY0o3NEJyeDZkUmdBb0QwNEIwNzBxY2hvellMa1dvYjY1YTV2OG1lV0ptb21BR3B3bVBJZlFCZ1c1TzhXYWpBSHZvMWR2L3lpNDhiN2Jmd1RQWjNzeEFHdi9hZW9ZUUFndmw5S0V3RHM2UjY0MGZ2MXdiSHhTOUgrVDk4OXJTck5icTNuTkwxZkhsd0ErRVJET0lBZmgxemt3UlZIV2d1UFRtRWZXSy8vM1h0TjcwY2V6cVhiUkgvL3M2RDNiMytRc3p6c2xOSms3N2Q5R3hsc1RDSHB4ekk4dSsvVDc3ODRRdFc4c29IM1ErakpCSENSOGtyNFJ5QStmNnVETXo0TWNqWVA5N1NodjlIQ25wOEtmM2lHVWd2YmcvZER1TkR4U2FJQUtNVC8yMWNaOEtEOERMM3h1VGhGY1cyaTRwOVY3aFhMVzBCVkgxeUhsNHQ3UEwyL2xRdW91emhYNzRyd2h2MGFrYktucDg5N1BOTzdGSHpqb2l1V2xGTmVzK1Avc0JiUC8yS25IZHo4dW12clBaU3hGYkxpd1Z4eURVb3hwUmszbCsvOHpNZVBoNVIxR0FjQTdzclYrNC9wQW1KWDI1VnNpNGd2QXdxeFdEVGFFRkp1eURRMkVjbldYcWxLb3BLcHVhblJBRFRBaFpPMDdYWmJLamtibG5XcDdSM1lhQU5UUGI0cEdUZHp1VU9xZFkxV2llOG1EM2pvY1QwNlV5d1FBVWxBMjBZQm9LSmxYUkFKRE1sTmtNWjd5U290WkVRalFJL0VVY2xXbGRXT1hWUm1DbGVPZ3JZV1ZJMUJMN21iKzcyZTBkTnJzTDBDNGRaczNvRUtoYXh1TnNuQkViRnhNa1NFUisrWmpMWkhZaEpWVjNteG95VlJhVVQwcWpvdnJlZ2NWZFJzWGprbWFGRnRFZUpsamVRRlZRcG1VMDRRY2JDSGpBejFpVUlhd3ZsT1hrTzZMUjZrWGVvbVhNb2paUk5WM2ZxcXgzN0hoN2ZVZWdEVkMxK1pxRXdscTY2M3pjeTkzcTU3NCtxdUFyMHR0QlVxZitKdGpGaXBjMEJhK3lsNWE4Y203WXpOcktOQStJUUZPM3BmMWZyVmJlMURTcGhOV1J0b0hlSk5oZnNYUmVleHF2c0ZxU2ZVNzU2RTFpeXJzbkJaV3hwWWFHWW1JUkt2V1M3ejdPZy83aTRnZG00SkRhUmNtaGpySzFNNk4vUmFjbU9KaEdobDlZMDRIS3hralovY0d2S0NuQXJ0ZHV3SWRLMUlSaWhXdHN2b2I1SFlXVmFoQ0w1N2laWlM5U1VxK0RUSDg5MXVBSWp5bFZlbk5hMXRTaUdiSFNuMnpYbG5wOHVxZDducW1QbW5Dd1hteDIxWDh1UEh4emdmRUl0RXk1OXR0OSt1djdMWGRsUG95NWw2NzFsNE1BSjFvNVdvS0lGMkYrNlhaMVR0NjJMTjVndXhXV1dsRXRNa3hQZmR2TnhGcllnUjEyMVJsMnZhc29EOGVnNjNzRjR0UTdsUWVHeGJQZUxNQ1RpcXIxd0RMK3ZTSmZWMis2TVhmVzljRU1QSzBMLzg3a0VpOFkycmI5VkR0K1A5R3lMdjVjQldKMW91N2NLZEV4V2VyOGpQNHd2RFNzK3o2QnVQYUdLT0wvQ21saVNhNGJ5aUx1ZyttUkJSUmZCQU43R1NaMDJDNFhIOGVwZFdyL0NCOGdiVVpVcGVTczV4TlFESU9ZVkExRW1JZWlLWFdLWlJBMVZHVENUeG9tT29nT2pRRGNmWCt6MXJsT3loblV3dEVQWmlRRFNsU1EwWEhPVjVzaTllNlozcTY5Qm50QzIrNnZQb1B2Qys0KzBWYlR0NC8xLzh3WEl4RzQ2bUU0d24wSGkzL1hBUXBpTGdBRlpnMExqNUtIKzFYQnJIUW5waFRaMHYrM09qSXArNmIwZ3M2dW9TRTdxVndqdTN0ZWg5SjlCT1hjL0N3RHkvL2FVbUZxbEZMTW1INWxVMVI5aFJVdzRTYUkzMHFGSFdBbm1tU2xxbythdHVHNFhzc1MxNXpmMVNzeWw1YlozYjRwRlg4N2F5QWNkbWNaK3pvZWh6em9YRWRhUVNaa29vTHZtVjRMbXp1eDZ2RXdXN1JWQ0V0V3QzZEFVSzNmRmlaMWFkaTZWT1FYY2g2bXpHenoyaHpqZk1LUXFUamlqMnUyYXBqaVRQcmFSR0o3N2FOalRwY2Q2Z1BKQldBUDlYdGFwY1dQOXgrakw4amRQUHphL3dxaU51ZkRBdzYzYlhLa2xybXNBZStRVThKZnlmQTJ2cUYrUlAzWW4xM2VoaDUrdTVIcmJNUklZdzlQTHRvWDh3T1lHMWtYZUM0ZWE5WjAyTTNhTWF1bno5Y255YXZYcjdMRVFQSHErcXBoaUpIeTBKZ0pnQXlzem9tejNUbGxZQkNkYkl2Uk9jVWVMZ05aTHRMT3BGcHJYMDRXS09nVjVBbGl3OWV4MmJNMndmblkrbk52TVYvaXZ1L2hPenhGSFZibEpEV2FOSjZTUmx1Vkc5c1ZxMHhyVkVYVGZVS0J1TXE2Z1BRWGRVczFJeVZ0U3dKV3h2aGQraW5YUTlJQzVLaHhITE10NGZuSm9zdXRZTXRxWEFMQnZuUUZRQm1IT1dkbFZyK0RUUHhsSWdkMkdNcThsaFA0OFJEWE91RVFNWmk4OStZaWNTa3RnSklMbm1MaDRPaDBPMGVNcXpkbzlieW9md21PMzd1aFBySklkY0w3MnNFNXg4enFpb1ZZbWt4VkZGYTUvYmxhbzNBS2doL2tFT0FtUHV4NWJETk9RcTFiSUt3VW1KaGlZSEMzQ2NtWkx2a1dGVmtRNVplam5FOWNCL3NDSWk0bFUwa1k2ZXRSVU5hWHVvUUx5dEowTm95Mm9NQ2dyTGlKQ2RRUjNEQk9mK3l4VUNqdkxmUUZiRWVhL1RsNzJTdU5PdXBsVCtuQnRhV2dybHl6TmNST3hzYlgvVEZkSnkvMmd4UGEzb1UyR3BZYkNoTDJ2NUgyYXlJTldOUUwvem1LellxVUNzclYyYXNyZVhSTDcvY2w0YVQ2N1NNVEF4RWZKTHdoT2hOaFhPSnUvcDB3Ti92Q1ZNcUN6eE9qZk41ZUxSTE9DS0ljK01yMXhlNmZBd2JGc1c0TDRjMjdtK2F0b0FkQVRicGwvTjNSSmdiQjBuZk0yNkxmdUtrUFJzRFNFQTBWTVRqZERYWTdKNGY3OCtZRi9QNCtzaFYraGNsWlRHZnlQVG05MHVWS1BSY0JodXRLNUNLV1llOXBnYThjdUNxUmpoY01vNXhOaDRRY1k2SlIzYWs1WTQxbTVTUkI0V0ZGVXRzaXFBVWpVU01CWjY3UGNNSWRCTWEyaWNGSjdVN2oxV3NmMU9heUdjcXpFekMzaUFXVWE1Q2pXYWMzaXYwN0NTSlJJbUdGUGJpZDNPcjVXQ3dMZjIrNEoyTHNiVTJVRmhWU3dUckZxRHpJYzRDbUJOakpEV2xWYlRhRFFhNG1Za1hwZHNreUozZFRVZVQxeEd0bFRJSnVGTU9HbmhPbEhLa2hORUdoSno5QmwrakFsRE1Db0RRbXFaekJXeVVWU0lQSFZjNjJRRFpnOVBITndGWlRERWtJa2xtZ1FpWUxCUWtENEhZOVZvckt0YUFvU0xLQUZwTmNaVVNobXdJTzJzbFJXVE5qV21WbEI4ZjRSUnZ1RmV4d29xUTFaa0JhdmpodUppM2dvZHlmREpLd0x6QUZEdm9oYVdoRFJpSjkyalRvd245MzZ0dXdUaTNKbFlsTXR3T0N5dDE1dkYxYUJsQW1aQTgyb3RPZElHQ3gwV1FKb094Ni8zWTFuWm9mZm5sRGxvM2IvSDlyMFNJRExtd1lPdUpjOWRhZjJ0V1JLQUxhM0RWOXBCR0x0bWJ2YTNwQzRhSjYwUjZYcWJHYTdSKy9lVC9kNVFxbitvOG9kWTlXQytwdXlWMDFoaUNId2NvMjRVcFZGMUhSMFNtdjE0SWNxVXNOQmpwWXJhWG9wQkY1SmFoNmNxT2svSmFGWG1wOGxrMEphTWdoQ2tGQnZRRFB6ckZwUXVBT0lzYVkydjkyWXdwMTBnTkZFcGNyZGg3dGFlTUxSdFRNa3hHeVV4U1ZWZ0ZTbVhaYU5Qc3hzWStJWnA4SkdreHBPYkFGOU5kMGFXMFBQd25ycjhIakNiQkN0N3BjcmROeStIMjhtNlErcFhqNDgrVU1IS0MyRk5qMlEzZWYrM2FScUh1UkQrbWIvNVNlZnc5NE1hTUxDZkdWWlpDU2Y2UzQrSmUvUGhCK1NtSzFKZk9EVTZFMVpVcTVNdDZ2V2M5emFPVTlWbGtndnE1SXpoZVhxTGhZM3A5ZE1QNzVvLy9jWGhMR2VmSGV6YUs4OHpKVjFmOC81NWk2cjY5ZVFmWlhEMzFsNzRwT2JqZXJQWmZSazNjNGZ4L0xVeGVZZ3RiTTd1dy8xcW9lOXpiWW5wK1R5TUI3ZFcwOS9CZHl6S2JxdGVLSGtzR2x5UVVGYkt4ZDdOTmR4ZEVrWkFBQkE4aWxNUEd6dlJTZ0dCRUR6WU1Ybm5VRnpSVEhVU2dOWjdWVVQ2a2VBZTI1cHFmOVFYMWY4NHNXRGlJOVBIRWJVNFpXdExZTFBFVDZWMFFObTllbDlpMExROUhlOTRRdkNsdW5JRUdpUmNSbXBQbVpRcERRbm1GNmtoQUFQeHZ4OS8zMy8vOThMSC8xdFNOS0lmQU1CYSt3OFo1QUY4UEcvOXM2SW4rZTVzRGdHZ1lBQUFFTUMvSDhnanQ2dnIvMGE5VTc3WFgwQm9LQlZDZW83ZzNZU050NnZWUTZXZDRuL3dsZXE5UWxaTlptMUl6eS8yeXVjTC9Bb0lSeTREcGZ1TVEzMndKTXJQNkNMUFVEZmg2dWVCbGxyaFJmQWI4SU41VzVlU1ZjYXBPK3JhUGkreGJ6cmZYYXpvN09kOC83TFkxUTZnLzU2bDBwZVpCQXFvL3I0dDRGOHkzK2hpQ0dlNG5rQWowK1hXVWdrdS9teWNmVjJ2eEUwWkR2cTdUK2FVdGhPVXpWZjlPSkFWV0FtQXJ5NXZ3RDRuelNPZmVZMmRwVXR0MithQWZaNnFkME5sTHNjNCs0azRKV0Z2ZjlRVHF2dEdMZVJqWmhPQzl4WjUxY0wzc0lEOVE1VWpaZHV4MndXcWtLcHRGR1VJTFpsSEx3clpJVDdGVUpjaXBCRDhmS0U5dSs4LzRpMFg4dHZidk9ZRTNCQ1BqYkhsSGp0bUl0a3h2aXNpMm9FdWZKeTBJUVlOekQyNm84K0swYkZzbDR2WS91SUpRSFlvZU44K1dRUTZkd0pQUzFpSndrK3oyRlMycHllNnJjMHRiVDNCODFMZmgyUzdoaGZVbXJGeUxxMEVvbWlJYjUzK1lLVmU3NUxNZEF3RGtKc0NjLzBTQ3NUc3hVK1lXbS9LZXVmSytXamNzRjdaWkZ6YmhURWozcG41eXhVdEQ1VldEc3N1ZUN0aWMvQzJNZGZJNTd6STlyMlFIdU5TZkwyOEp5bHo1ZGs3RW5JUlAwdnRYd3h2TzJEck12YXJ4R0pFcTVYWExMK0xGOVJ4d2VsSWRoTngwYlRIdEpvUlBSS1VUaW55bFpJRTRFOVhuYVVUUURnb3hCMk1BcEFuU2tOSzVKN3U0U3ZCdG5PL3NtZS8zdDAwQXViSi9NSGZSK2s4WkVjRnlnTUFCTkNRZnJRMkZJd0R0VHNCK2g4Y2c4TUJDSXpEb1NZSEFKYkJ0d2JFM1hzYzY5Mi9OT0RVcmpZbEdrZzdGOUpBa1U3WElLQllXNE1EM3A3ZHo5SE1NcnNDQXJBcjcwSStmb2FjM1ZlUThMWDVSSUoyUmozTUd0VnJZQ1ZHMHRBNktOV3dvZHJlT3BWYS9ualhVNnlIV0p4WnV5Yko2dTZnVTRkNHcxN2F6RUpNb1Y4cjR3RCt5a3Jrb0VaOTFGWnE1SEx4OWlYb0F3OCtIREFJTTJwcVdYRHd6b2ZYUE53YnNnMmZSKzlrNnlLRmdMc0hKa1g4UXBmbWpWY2RZbUZTZ054ZXIyT1pZZ29FRFpLQjlYMW1zbVJLRW5scklEUU5RUGxBVURZdWxTZkdXTWN4ZUllZmVxTUk2dkJDMWF4dzQ5NXZJYmZ3QldId3hWVXZVSXlXanRUd1cxVGcrY1pURGIxOWphcnArZlZWRWdwNWZYN3M0MEs4TmpucXJqbjB0WTIxRmRNYjdZb3BpVTF4VldLVlB5YXh5S2NrNWxSTmlHMkViUnZnVWlrb1RnOTFTWFNnYkJKY2JTMHdhNlFCcGlScW1VMUlwYW9rS2k1V01aR05pcnBHU3VHVVJDWlFwVFdxaEsrS2VhcUlxd281OFFLYVA1WGgwZEZXa2FseGNGdlkvUFczUXJyNnc5ZGMxM2FsSm0yN3JpdnQybHdWaFY1RklscGtwYW9CRVZaNVlWYXhFRlhhQk5hL3RwamZ4ZFplenV0dytEYytJUC9KLzR5eTROemdyZ2JJd1gwRUdiVkNaYVd3bHJTU2NqNk8vRTArSUJGaDBkMGkrNDV2MzdkbU5aWEs5VFh3R3Y4TWZQYmV0Q3g2WEwrQXBDbERXL0hqTmlLKzd2cnExU3M0MjEyOGJiRy9NdmlNYzVHbzVKYzNLbWRkWjI4bzdFVTdWckNHQlBaNE50TDg5L3RsWEYwYklZbU5Jd0JCQVE9PSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlF1aWNrc2FuZDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBREkwQUJBQUFBQUFkWEFBQURIVEFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR2x3Ym5GWWNoekFHWUQ5VFZFRlVIQUNGQUJFSUNvR3FJSUdHVmd1RUtBQUJOZ0lrQTRoTUJDQUZoVUlISUF3SEcycGdSUWRpMkRnQWFQQVpGa1d3Y1FBRm0rOFRSZGttblVqMi95bEJtekdoZGVoYlpTRjBSN3VvN2hrWkNaR1Q2aG5wb2JaVFd4eTZjT0RoMEVnLzlvMEZSK0hBOHMzSjFiM3R3NTlYb3pnY0NOd2pabXR0d0NWeFg0aExvcEVrVGFSWHQwWklZMkl0NGpmOTJYc0N2TVJMVXdqMlFvMElraGN4S2tZcTVpUXRjZm5pbXJwWjBqcUh0R25nSmJsL3REcXppaXFkcXdBem9RMFRMeDg2TXpwWDV0STVUL3p2OTY5NzVyNEFvb3NSQkRKZkJibWtXZ3NJdG9xTmJHMlhKOUNrZW9iSGJmM3pCQm1vR0ExSTVhZ3hHTzFHVGFvTkVGVE02N0l1b245Rlh2emYraXVpd1FFSy9XL2FobWlieitWZEViVlZSNFlOK1BkL2pjekNUTzdMbndXZ0lxRmw1UUFsMjFZQjJwNUtKRmxMNkpmN1plQnpmdTRjRkozcStBT0M4UVY2NnpvYld3WWhXd0QvVjVzbXZFWG96RW1FVFd2dEtHMlRQRzNoV2NwUW05blFPdlI4SkZJVmdaQmQybWJGYytJMWZZWHZ3TlFrWml2cXlQMGU5Mzg2eTFiYTlkM3pCcUdMcXdBWDNYcHpiVEg2K3RiWHpHZ2tBMnVKZlF5ZWxmV2VKU3ZnQzBKRlVGMWF4TmRUVTJIVHBTajdsSmwvbmVtcTcrOXZTTWsvNkphZEdzc3FyZ0dlZXRuYU5WUEw0eitkN3F4L3NneG5GMlQ1ZWdIU1VXeVg3QUREVk1LeG94ejBCY2h1WHhpMkFzQ2F0VFB5dmdPT05UT2JyT1NjY0d1Q1FsemhFYktCL3ZydHoxaXJIOGhzWm5hNzluSW5oeTB5UkVMQ0p5TGdXZjg2LzNBZ1REQUFBTHBqTkVnM0pOTlFaTGhzWkxveXBGdzFwazRkY3RoaDVLaWp5QWtuRU1JQlFwK3VKL2lsa2hpcHVDUEhlZytHOWxwRm9RL2EreE9LYzZIRkF4QjJ6cnAzb3pBWGFpQnV4Vk04Vm1Da1dtVjd0dDgzVXFsNmk2eHd5YXN3Q3BWOStjelU1T2Zqck1ySC9CMWJkc1NaSzdtU1cvYS90Q212S29KRWloWWpWaUtQUHJ5bUtWRGtQLzlyTU1Nc2N5MncwRkxMckxQUkRudGRjeDB6S3pNL0U2aUFwQ2o2TC9rL2FLQTNBMjhPeVZ4YUM0T2xUNWFkdVBNUFdmWkIwdkJrUnRuY1lBR2RoU3VXYmxvMjUxclQ5ZUNPQ0tMZ2ZiWUdrcUJKNlZReWE0S1RHSUhVZzVmaHFSU1lFak1IUnhJSEkrbEozRlR6dE4wcFdoN0REREZQcHRvcHVONDRKL0FJa2cxU2VPcGNpOWhQMFJUUUVpV093enhOMDBaSFUrVXBTMUdGOEJZUEVEM0FCTEYxbnFMRmZBdFNJZHM0dFpRckVKQ3o5VEt0WjJUTVVWaGF4SE9MVzNpWVN0MHBvRWNZZ29TeDQ3VkRxY3loa2drRlBZSGR2TVN4OVY5K3Q3Nk5MWnFEQjJtOVlZaG10bXY0ejBsNzFhRFgvaGN6T3dRdXhxNmsxbFVDN25tbnRHL1AzU3p6S0dRL2Z3UlVEL2NPTVFpRElwVGdqeHZ2Yi9QYndFOXNsQTZpakxJVHhia0dscDJtWGhmVTFPNUEveUhlYWJSV0l6SWRXaldaMlcwOThTM05KbXhJVXhEMEpTMklRcWg3L0RMT1ZGVVk5SS8wNzFkcUpGeTRnTjlTTnlQc0Fxa2xKR1hQYWZlTSt4YkY1cUlZYy9JQUJ4bWxtNEJjQitvUE9SejE5Q00yb3VoMm9HdEVOTjJBSkZyQ1Z6TzROb0QzZXhXU0VLRzRzak1EdE9WSlNnWUxWM29TYUxZZWU2T3JFNTlKV3RJN1hxNkZNTkI2cEJhRHptU0c3eDlQL25jb0FRQzBZTzY1QVYvOFZxUjVwQzdPMEtKUlNUaVhNSGVhanp2cThmRDZURWF0ZFNlRWRDeUp5T1A3SFMwSE5zY2puNEVVSDdJVnY1QjlOY0h0NlErUXhyNU5nSmxFWXBCYmw3aVdGVGcyU3ZzdE5McGsxd2QwRU9CL0hLT1A1MW9Ba0tIYmswY3hnYVVTbUVkenZ2UkVYZlhuVUVxeHFHZ2R4LzFwVUJuNnlTVWJpTDhia0lsQ3BPQzJIRi9ZMHg1cXB4VEw2TG1sVVBiRk9KTWpZUURlWUpJY1lBaHRLVnFmckZLSW5nbWpPSTVleCtXYlNVQXJDR053aElEaWFLUFFWMTJlemFkQTA0Q0hHODVMWW1oMmdpTUVvaGd1RkNFN1d0MlJucFpPUDBMQW16akpOSk1sMUZxUTJ3ZmJVQkpiOCtnZGZpU0dTVzFnQzF0WjB6N1FWUWRkb1RTeXNqU2Viem9sZnlvaFN0Z2dCZWVMQ0hPRGZNeW8yQk9TOGExMmhpZHIzWVVoUkRWWFRBSXhFNnh3bXMwREVnMU1SRkhBR3RHWkpMRTZDdEJabDVKMkE3dWxUUDIwTWpRWHUrRkdjUmhqQ29WWHRvd1ppdGhlQWlnYmxuT1pJUmdEQ2dZS2VqakJRb1E2aFJoMkxJYXJHV0I3eitZaXRLQXVxRU1BbDlRRElnSGM5UnNZaVV6QU5nTXNaR0xMb1VheGFra1ZyZkRveksyMTBaYkswNFpwaTZDRUJWb3NNT0FBVVZnUWl3VjJITWpCRHVLVWdKT0lneVhoRU1uc1VDbFNhYVN4dzZUcmlPbU1SVjI0V1NHL0FyMW9iOExOOU1GYWZiRm9xTnJjY0NOeTRraWpxSXdCSmxOd0JDOG1XVmdsRyt0TVordjU1T01WNEVpRjJLQ0liVlNzbEZvWk5wbUZ3ODJYV3N3b0M1NktEK3FVcm9JekttbnU0R0FaZUpaL0VBQk00UVdRUnBGcWhvVllDUWZQZHBPaEhHYVd1eDRldUZpSG51NDAwcG8xTjdDWFZNbmZLalIyWWRGaXNjV3FGcXVCZE52QWE5ZHk4dEVUUCs3MTNMd2NEUHh2RGQwYXcrOW5leWZnZC9ZMzhDRUw1c0ppV0FuciszMy93WktjUW53S2pyWGlNQUJwRHVDb2FVaWtHSVNoQ0FFRnlFRVY1SmVsRmNIQnA5TG5lL2UvYTdiTUV3OEtwUDZaWlZtVlI4UzVvYkFtVlpKV09NNXkwajhCQUJRWVFUVW1ReWFaR0VUMXg5SERDVWtNRzJNMkhFT2h1WDVIalR1QnBTcEFLd2lYT21zcUJxREFYelFVSXdaK2ZPQkh2Z1poWWhQRzMvalZ5SXZKT0RkQklDMGpLNXNLbk43NnFVeHNJNVJqdEFwaXZ3Y21lQVFLOUZZS0dzRVN0Q1FRb2c3Nkc0WmVtcVRKVEFSVzFEOHlCVklRQlZNSWhhWnUvVkg3aFNPQlJGS1JtalFrU2JrZ1FIb2lyWXpoS0ZYWDdMSUpvTEM1YWFuaTB4Z1dMZ1JnVGdsa3JPYTFXTUp3blE5WHpsY2ZtQURzaFE0SDlFb2VueTVTb3JIcldnOXRzMHBJN3YvM3NFZXdBYXpydUMrR0NQQ2Z4cmtUOUNZQTlDOWJBNUJ4U0tLM2R4MEFZSS9leWlxbXRCdUFvMHRjTnVicjgwd2w0K200TVBqOW1LYVdQL0ZKMXRsdFBkVXpPNEcvaEw5V2pwVE5zbFZ1SXlmSTZYSlh1VmllRXdxdDRkYm1majhBQ0NKelNmZG40cE1vNDNLc2tYV3lzUVZwakQ5U3dtMEY5QVBBdndPQU54MnV2Y2IyQzl1QUM5K0VDODk0enpxZkdhUDdLT2Jocm5NN3oyMEJBWUJFUUg4bmdON0s5M1oxZXVWek5QcW43VFBISXZNY2RkVjFpNjJ6M245T21XV1QrWmFhYVlrTHpqbHZnV3VJaGlSUXNHYTBtb3RnWUdSaVpoRWxXcXc0ZGc1T2laSWtTNUZtamYrdDlRQUhva0o2Yi8zZ2JqTDExa2RmT2JRM2dCaDY2bXU5c3Y2M1R1ZFRvRkNSWW1WV3VXZTFTL2FiNjdEampqamh2cHNSY1V1TkxTN2I3SGJVdU91aTMvMFJEbGZjMEJBZXY2bTExVC8rOXErRkJBeEhoU2RTQ3hBdVJLZ3drVnJRMFFzaWE4MnFwYlphT2FPTkJDN3hGS2xpVE5OZUJyZU8ydW1nazY1NjZhNkhub1lZWUtCQlBFYWJZS3h4SmhudnJJbnk1Y2lWcDhSVXBXd21SMDJFalRiWWFaY2RDQTIvRUFCb0RRQnNQOUJ5UUw4Rk1QOEE4SjhETndjQUFEWjJGYnlFaE9NVUxDV3FvcGhJaUZGR1A2L0pTYmJubkpnVXhWMUR6TFFBaENKSXVFYkJvM2d5YVNVSlJTTmRFTEhTSHRJTTNISEdzU054ZmV3RW5jZnI2Y0NnTVdsN2phYUowMGV4UXRRUjlpaUc0Q1V3OGdTaUpubndTYjJyc0FpcFJFbG54Q1lNczZjU3lJK2UyUng2RXFiK0NyR0VIbU9vTkFPRnBKU3lObEFUaEhUTlBvQjlIUU9yeDRqNVhrek9nNFFPQ1dtY1BqUnhUQzNVOFlQb3VVVTdYN3pNdnJraVdvN2RKc1puUVFBRTdubjEvdDVmWjJSRVFtbzB3ZWl1dkprTGxnK3dST2tzNXhTOE04V0xsVG9FeEtSSnVONVpsdWM5VnhtR3AzWG9oU0ZaZzYwMmgwUHBmUWpnSEhMZFU5ZFlHWkdVakY4eEdQYWZwQ2lOQnE5VjZpMDZUMDRZWXA0b0sxNG9jM2VsckNpVkVZRGMvai95UVNuUE90YUpuekhCYWFoY0EwQ2ZBQ3E4Uzc1WnRBazBwVG5LTkF1dU1RV1FiRml2dG5QVXhuTUxRT3UyZkVtTmIxWnE1NUlNYzVRWnRtcDhWeWxSK0ZCWW95bFhwWDdWQkRBbWRtSXRIVjJGUnd4cTNmNHpKb3g0dDNLWmZwc2p5OHUvVldiVWc3WjFSOU1ncGJqSjR0bTRXQURNUWs0NXdEU2tVUmd0eUVtdzJNS1JUV0RGWmROL0ZHYVJmWkhiYTdPTFlPL3VUNGlIQjRxTWNxdEg3S1Z2MGJxd09aRi90ZVkrRFE0b0hVUVloUTRPVlFvYlRXTjFTN0RCOFBYYyt6dXg2T1EzeE8xRmRtRXFBL3Z5aUszdHVhSFNSYVc0ME9ZMDhaVkFQVFdNWHdLNFpFT3hCaEM4ZlR3YXNHaHhLU3Q3eVFsQm9UNTBvcngra05xb21HK3FJTTE0VHlYVmhTSUQxMHVFSTJDY3VGT3E1NENjUXZOengvcGNmOEdvZE5ZL1MzeG1hVit6Slpzdzc5aWxlOUYvVThyaFBWQzRtUWxjTURyYm9EWVM2Q05iNEFLd3hwK1JFRlZTMVRJNlVNWnc0d1lXUU5QUVc1dE5UbkZQZE5ndzBGTStkcWdIZzgyNko4c2lWaTN1blE0VGxzaTlnYjdHNDVtV0xuZC9EeisvUm5hOFJMRWU1OW1xcHI3U2hvcXRWd1NJdmZtR2RWMnY4eXBxalU3djVqNm5yUDExMXBnc2lMeE5qZTFXSEI4Yk1qcFdKODFkdFMycGFud1Rnd25OMjMzV3F3NGJESlNaR2xCSlRTRGxIZU1ZWlhadE85ZnVsV00vZTBETjNaek5GYnpmL2RzMnVYSUxLZ3hka3dOOVdFVFp1N2xzNXJrd3dSS3d5VnVWMkZNMmVhbGZHVmFoM0xVMHI1MXRXZk01V0ZIQ0ovV01ZWVVqaFd5K2NFbzhleVdCTVhFeldDVkxreWJZamoxdnJWSmRuT1JYZXhzcmdVRExxYmFoMm9pRDg1N0VTR0xhdnRrVExKUmZtTldFOGVhRzI5MFdtNUlzWGk1VGg3V3dsTzhjM0xTbjNldWk3V1I1SDh4RFkxMkxDYkN5RXhWKzZ4NGYzdFF3VURHcjNodGxPZkFHNjMxOHhrcnptc2picXdZdEVWU1c4dlI5S0xlaFo3b0ozb2thNWpXTFZuOXBXcWNybUQyVnZHT2FKOGVuK0tpT2RVYmtQWEpRZlc1eFpiN1cyUmVEdE9KVGEwTmJOend0UkpQQVo5UnRxU2F4MHFHbExrOTJndjFEWDVPVVErKzNZNnUwVUszUFB5RFJjOGVJbG1rU2NFWnAwd1MydzZ3Y0szK0txbkozNHllTmFidkY1L1J5RFIwajc4SHc4NUhtekdWT1MwV0lnOUpBZWxnTzQ5d05rdEk3aEEwVzlrd0p1ajlDRWwyR2FCTDVxa0pYSm1nc3NTNmFnTlZ2N29vR2lBZ3hhbCszcXdUWGZUaWxyQ21sVmxvOFkwTE0yRC9BTmhmdWlTSnJOWFZzQngwV3RQYmtWa3ZOYUhsa3dnQTFjT1F0SXl5RVVnME9ISGx6ZDkxUVczcmwzVzAvczNkd25mWUswZ0NPV3p3UHRJQ0hWbk5YN2VCZ1JuUmNHUVNyaml1YzF3bndxV1VsMTZ2Ulo5VmhYU2VNSVMwa2ZKQzcyOGtQay9yMkRFZFRQSTkwR0tBSm10dVJnMHBqSGFFNVMvbG15N0hRQ1kzZ0Jxa2Jia3BEaXQ3S01QcDlMa1FRU1ovUDVJcUR3UkNlUFJ6N2QzNjBPZ2FGVGpzZU41L0RPOG1hNGxDeGw1MVdjcE84VG55ZHVGbG1maGZ6Vm10NmVjaDhMZW04bitnUUtLS2hndzJFWCtwL0Rlc2k5R0FSVmdLOWtUbE9MVGtRSWFyWE1iSlp0YUVEMDZiNWJkSTRhSitFVFgrQWlRNUpkdHVjUTFYYUR6dkRGcTFzTGFKYzN0eEtRM3RRTGV5VXF5S1dWUTNGL3EwZEZqOFlEOGs2eWRkVkZhNStWcytEU0c2dUMvbk45Y2VudUVOcWxqSi80Y290L243ZitwaVllWVVwbytGWk9sRkd4UnZWMVd5NFZFUEdLTEpwWDdBQjN1Q3RMRjJibVdhSUJpTkY2aEI5MjNHL1QybXVkdElFMWZ6NjZUVXczQWJyUXJhbHdFRmhPM1pMTFpKR3pXend6d0xqRHMrejhvWms4NGdPd29IVUFIQWdMdzhYaDJhRk1yNjZqczVTb3hrdEpZQmVUclJqWDV6bkJrZG1JOU0rLzFocmNZall0ZFpyZ2JyVlRSNmMwNm8zbXVhQ2tOWmNqcmZQc1hsaXBhak5Md2F1Zkw1RVZTS0VBSGd6bzdFTXhZSlcwL29pSnh1TnRrbzBXbVUvTzQ0TmRVV3pJdXNOa2RaZmpkZlNWbzJ4OE9ESEg2THpUSHV6MnB3T1QvT2NCRWpKMVJValI4Yjg3NU5JRUJCdW0zQnR0NnpFb2RiMWhNZG9NaHJHR3FYVTQyQjBtNzNreUx1Um9hNThSeG5HaUt4bUlId3RnTlN1dmtBcXV2UjBLTkp3djM0WWU0WTkrcHZXMzVFMHRzRkYxZ3V1alRMVTM1ZnBVOER3bEFmUG5HN0gwM3pXOFgwZEpubXZKenlZNDV4OGxoRDZnMkpBVEVSNW14L3JFdDNtTnpxM09rYVV3SnZJZkd1K2ZxNVhmQk9IamFmdlFENklvd2hoYjluUWF4VDZKRGZTYjhWa3hybVZWbnF1NXJYSTVScTdSSHlNSlJpTkpuT0h0OGttdmJnZ3pZamduVG40ZHlleGNTek8zdlF5RG9KOWxXSWp1SXNSS1I4ZmJBQVhtenZzbHZNdWJib3ZUYW1jN0syYlJVZjJIMHlSakx0SnFlVHV5QWplOFlRY0pKQTFkY2R0enVWQ2UwL0VyaFlOSXd1MFlPekV0ZWIrU2xNS09VUXNFOXV1WnV2dVFYV2JYcFhsQ2J1dkpBUlhQeUFtekZHaEkrdU9HTUJIN0RQTzBvRFV3MU03OEFOM2hKNkVCK3FvMFlSaEk1OGJCWENJVUxJbXlnaFdWc2F5c0lTUUI1NmhxQjJISXBYek96TzlFbEZzZHh1Qk9YMGlQaFN4TlA5ZVZoeVNTSXAyRXpYa2FiUjdmZlF4a2VpVEQ0TDBGWUNHR2lOek1EZElqWGhoZHpYUHplUTZzSFV3RHlnZFVzd3grdW1LaXE0OW81UXJ5NEVKUGNodlgzMm1KMUVaUHZMcko2cGNhVnVtQzNwUXFYemoyZXZYNG9wVTd2TnUyYStPVitlcnh2SWoyVWJsNkEzblJza3hrV3c5Zk5BZWpWd01JRTVSSEVTbzV4cjF4TktzN2NjTjhOdzMxTWYvOXRSQUtORExIRDdjTDY1bW1lcGFvaGtuUGVMWW5jYitaR0FWczNRbWVzNXlCR3Y0eGJKUjdSdVdqS0lXd1E2bGZDdEZ0SEFlMFdDb28xREMrU0I2SnNkbnBFbVBnQjJnU1E2SlVpOFZGb0lCaFYza2hDaGYwMll4ajlKdmVnL1RLcVR3ZzNlSFBPNXNWa1dEWXZHQ1NhQnVxSTduYUE5b05CODcyTmdvdUlRYmtFckhiODhKMmROalM2SnBEclRmVjdyaDhXcnhrcjhjQjNaaDEyS25NbUtxSG8xcE9lbmh0RjQ2YXpFOUxhODd1Y1J2M0pSMnl5UTdtSU5sZmRuR2puVUpldC9GMXVqZStxTzZTdzZ2WVNwNkRSc2lHZ0o1QmN4WFZvM1I1TFYrWVYxdXV6aHZpWEQrYWIxWkdORHgyUHg0bnJhbWFjYnRxSEtvY3l2MzBlekIyOEdya2pYZTAreEFrQndhVE16TGRZbUZPOU8vZzJHSWVIQVNWTnJUejRVeHJJOFR4S2pqVkpxcnQxWHJkSTdETSszRGUrQ1ExZlc1L1YzVFhIZGZ4b3JFd01QVGJ4cnNSYVlwbmxLSE14eFpIcytKY2ZNYjdYR3BQQldtTGZ1Q1EvZlN6ZXYyUFJhdUN6NkFsbC9CNEVDRXZ0Rm85QnJHRWRacG5JT0krTGdnbjVCYnFPd1NiamkvMWhxQmEzNG45Zko5QUQzVThpYnVhbUdHZDNXMUx1UmxOb2h6bkxrdWlQZUQxajNDRERwNVRWTkdBK0ZoZFhvYVlFeU1UMHFUeDJSbndwczhJdEI5ZkhKM3lhNUZlZ0NsZlAwclJsbDlkN0NaMzMzai9oZzNHMk10YXZNMWZCVU5Cck4xVGVGV0Ywb2M3aXdDb1F2S21lU3BoQlJlSHR5dzB5aXc5MG42eHBnQ1l5a21vTktHaG1oMElWWlk4S0JrTzBXMXBxWUlpOU1pVFZHOTRKMmpoK2N2T1MwUnNlUUs1Z1VEOEVBcVAyQ2FyOUlqVmh0VjNzd1BWTnpUQjN2d1lDa2lXQlU3cjczTjQyQkFuNk4xRzlmbDlOWC9ENUErSjNrOVI2TlVXL055YnFUclZzenc1emZPRDhObzFvdFl2WDJTZ1lOWDEwRGM1WW9QdUpMVWo2NmRUdGNPbC9QRWJZWlBocmkzK08rL0U5K045amJlYVFyT1E1Z0oxN3gwQ0oybURvWVlvTkJsVE5XTkh1enhhL0R1Zmpyd3ZyRzBvZytZWWJGQ2IwVEJELzNvN2l0ek43ZHpYR29kejdmSjM2eHNET2t5T1NBNDROOHJIUHYvK1RNYURGcEpuNDM0Tjg1TS9tY3ErQ0tvaWdoeXdkamtsVnpTOThIZzZRR0JHVitrU2FhMUswbHlSNVRrRGNETi9ZSlRwUi96ZmJ6U2trNWV2RjdSdWRGWUtKcW1JaEVpUkVpcjA3RkVCTmF6NEVLejc4MEJOM3FLOXJPYis0WW8xOHo3NThuY2tnUzZPK1BnTEhaayt2WGVyN0lidThCcXRyYnMxZjMzbXg1MkhleVpKeDNvaUc4MFh6ZGJBNVMvK0VKN0x4RWZzMmRQejRZZ2FzZWh3UlJhTEtMVGtZZ1FKWGtQUmJBaDFqcVhtU3JkenZnbWZFKzJUWi9mbTRqdHkrZGorL2ZHODBpUjI2bi82NTFqK2JPZEVlVjNlWkw3NFFVaXNJYlJyM1NKRjVUb25XeGpmaUlHZWQzeGFjdVhZSS9YQzlYdGhZQVlrRFVZM3QxRWdUTk9Sa2dFOFE0VURTZ1VRY09IRUF1Z1BKNkY5dlVaUUo0bkxkUXIvKzlWK0dnYTR2c1F4Q0ROWDc1OTV5TlhwTS9mV3hBbnA5dytDNmpOSW4yNVU1b3NxUUdyR0hYcEJPNE5qYmN1Nnk1ZmN2Sm9kckh3bnBXYUZYV0RWR0ZxWGYzWld1Tno3RjlldnRyeWpHNWhhVG9IUDdYdnhiV3phMmlGZ05sWHB1S2NIeUs2dEhMNUpraXhTKzFqdXVudXdscUQzNy9XMEYzUVRjZElMVVcwR05nM0ZjMmtwNk5LaTVsQVRtZW1vQWtJVDVyWnhYejNmZG1wK1FObUc2UkZ4eDNHNnllWGlvcFprVnpmbGRZclRmVFp6eFk5Z28yK2dZWG1ZSWhTM2NrdDZFRVBlelkyM1pIaGpHMHdQdUh0MXpzejdZc2RHZVB1WllsZU1NSXNLYTBtYlRGcnVsTUd5M3NtSmVSQ3NwZjhQdXpRNEhJUnFkYUlYTGhFODY3WWdZQmRudFhrYzM2YlUvUDR3L2twWlQ4VTlGME0wQjBob0Zub05hMHVjV3d4Rmk1MHM3VDE1d04wd3FUWmZCN3JMVjh5bWhicWJjT0YvamFkYXZVZk4yc2haMEdRMXBiNE40MmtkR24wY1ZURDkxL1dNeWNuNWVxSVJULzErZEZrYjB2VDFnT0p1VnZyQ0lmMjJVdUtwcDkzNlNGVzBxbHNxRnVtSlBXT1RDendVNzRYc0tBK1dCeG5xRE5Wa0FmQXFJM2pXcXNoeW45SE1hOTlTdlpCbUd3L0tjQjFlalF5b1BGWTVzdS9PRVBENzBUeVdvUS9pZlZSM2w4cVRTQXV2VFVYNEY0U2VZMGFORnpRQWlWUUZnM1pEN0cvMzBFS04vcGNFc0FCU2pCWFk5ZGk3NHJsWHBKYzRkVjQ4amFJQnJBeTR3ekx3SURWWnUrM1dnZnN1ME5wT2NZd3czdlhIWlFjclJDM050UXNMUEdtRU1YMUE4c0gzMFladWdCWXVqeENMdzdlKzVORFRkZFE4ZWJHQitZZzVhWDBLcHF3SXVwU0xyM3lENUpuRnhUdmZhbnA2T0cwKzErZG1GMzZJZ0dzdzlCQmNQNTNuZkhQN05uM1FaWHBzeE0rS3B4RE5uMStBcVdCNGtkamJpYVl2dlBxUDdXUTRLL0RqRFVaNzEzL0RiRjdCR0tTS0owOFgrTDFUUlJ5eCtWVzcyb092QTEzQVF1clh1MDQ5dDNOOUZLWUU0VzNjNkU5NmEwMXlZZHZpNzcrREJSWHc5bVJDLzdMUEdKbGtBKzdSNzIyMWNHUWZjV295NlVLY3JmeEF2QWZCeUQ2Y05hY3RlcUhDYWUrcENsbUxHdEdCZ21DU1A3akJIUjF0ZDBYOTR1MzYxYkQrWWwyZ1lzOTl0a29BMXVjODY0UGZCVGljYXBxZXZocVhCZmUyYlBsaStQMUhqTVpGYXU0Qkd1Vk1HbDI2SWFLRGxKNHo2OVhSOUd4eFhIczUwV2JMYmk4QTE4UlRlRXJoNTFXWlpUMWhUVEZncHg4V2o3U1BpcVQ2c2syT0tIODVyNEM2NFVzREt6cW5CR1hmVVVvYUY4OTZuVUpua1N2K21IdlJJaUtNQmhVUU9uenpHdkgwcTkrYXNtWTlhcHFacXdXYzhhR0RPTUVNbGdlUXFCU2gwVWFRRDIySTdzZWZUYXJrRmdMTm5PcEEwZUgrcXdkNmcvb2RYK1Z5V3cwQjFhMW0veUxQYzVWUVo5ejFaSk84TFhiNFlvcmJkMS9XTG1lN1VFQjdCcjEyRmNGZy9aVm8yNlhJc0E5SnRpQktkYXpsb3hGUDBRUXdPSnBRVW9Famd3OTNWc1EzcHQwckNLTm9oNm5KeVhWR2NPd3dmTWFkY1hRK1VSdkgvNTM1KzAwZVk0RWc1L1pMK3dmVXkxcEdKVWtuWk9qbmJqRW1IRVlodXdZMHAreG00eFpNMUswMncxRFdjYzhic2luTXRtaVpXTnl1Q0JaL3RuaEhZanovZ1pPcUx1c2d3QnpRVmR0UEZRWGVZRHZIbFJ4Y3d0c1IySTFqUjlTS2lkdk9iMnBrN0QwL2tpS3VPWHgzcG1EdzVGQUhSYm1YVmxaK2FsU3hlKzRIU3VkaXhmYS9QSllZNkVlbW8wa3RKcjY4aDUyWWNHS3ZzSDlEN3g5RlY3TDlTN3dkS3dLQnVYbUJXN2ZiTXRaMEJJUnpGbFBjYjFtWThudHBzWDJZZ0F1czBjTTBxeFJMUFd0MTFLeHZmY2pxcmdDOWFyRTNtOEo3ZmVKUmNRVkpBZXM4NHI2dS9tZ2JVbnFkei9nMEMydUpvVjdrazkvS1dDVkxvd1c1T1JTN2x2WjJqLzZxQ09rZXcrZjUySTJyeXFqeDQrcTI1Ly8xeVQ5dERvL215K1NsWmx6OWxyOE9kZGp1Q0hHbGRyREJuRUdFd25KWEJYbWRKN1hxK0pLdEJQbVBSZXBld21XOTRST0dWRVk5SzQ4K3I4aUVoQXpuVHhnVkdkRTlPSzBFWG5TQ0ZkeHZGOGE0S1RDMU55OFpxMjc3Qk5MaUZjQ0hNRDVIZWhZdGNoRCtoWjc4RldCb0JBTitraEx5bXl5QUlHV2NsYTdMVzgxbGdpY0NRZHRkaWE4TVBBSGRrSHlIcUczcEl1aHVldk0vYml4Z1B5c1plNFJ3cjRzNExjdkgzVzVCRThnVi82dzErUndlak16Q1IrSnY4L0c5RVc4UXorUXdlSXhaS0NqQStuWDRjNnRuOVlhZlVOZmw4VStjMVdNZHd2WEE4ZGE2WjNSUnVEc1hhZ0FWdlQwWng5UTZway9xc0NLU0F6ODF6WHRmdEZmRUROVHcvbk1iaDZRV1JaVFk0S241L09GWGZmU0FqLzc2YkJBZGlZb1JGcDdjMk1yd1hCVFp0NXBEMXNtMkdJVmNFZnd0cDIwYWRmMmlaVVhJM3dEV2xDQVZaSTVWTGY2Nm1Nd0dZQXh6Q3ZsaUdvKzd2aUwxOVlqNElLejA3Wm9zTVBXL1BxZjAvckl6cCttUC9PN0p4eEgwTHpUWjh6R3RHc08zRUlUNXg2VlRyWFcrTDlsZ2U5VU1MUDVaYmZDdk9ZbEduT2llQnBFblJTQnhOKy9lQk5mMGpidHdFRTZCYW96VnhWNHFXT0xRNys2aWtmZEcrQkt3dXhDeUkrcjJiK2cyTk10a1g3UjdjZlZES1dpL2dDRWtEMWMxS3k4c0xYaHZnZU9Qdmg0cUpaNkU4R3I3TlRiRUZQYzJ2RHNXMlc4bWxqdEZwNmNDWldvc3J5UkhLM1E5RHZSODhtMjlOa1ZuWHVyaVFJT2lTc2FEcCt2MjFNNGZsVWNMellldkJBQzlyK01WcU52b0RSQ2dWRmpjeWdOWEs3Q3hZRmpiL2xvMDdWdlpRdGwwbXpuL090ditkSjExZHRyd0hrMVVBNnRkQ3dlczNrMG5VMkxTeHN4N05NU1BaZXRzbWFNdWtKSG9QWGRDUjlINm96b3hHbXIyV1l5SlpMT1pGQWRndzJrOUJDejNYNjkzT0x5R1RzeTNxK2VlSkpzZTkyeWFJZzY3MS9mOGVnbjRQQU14UUsyWHcwTHZmZEo5QjdjK1FkU1RQU3ZsQ3JaNExoLzJocW03dGJhWERiekFsaHVkU0VvN0FldVdtcXB6eTFYS1YxeTFWQnJwS1JMcVZTNWxacWVOOXE5QnNUbU5Vb1FNV1JOSUlHR0kwWGt5c0VTY2dWWm83SGhZckEwYUFsU293bzhGVmZ1eStYRm1vcmhPRUVvbjh1NXhzRjVZSXc1Y2lvbm9NSUZoMjFYUjBzSGl1dW1EdEpmdytubjVoU1ZGV0wrVjlSVTNGWXlJRkp2U0d3MnBOVXlpZ1g4S3VjRG1qYU9PM0J2bjA2WHNRaGJmT2FVZFBibnVTRFdtaklrazUyVFlWMWFOSTNobGtoV3JLRVpQaXdER3J5UGNQYjcvSXhsejdhcEhrVGgvWVd2Zm1zc0Y2UzRraGJ2RDNxSmtRVVdYQlhuZmlDVVVraUpqUUpsOExYdEU4cWRJNmpGYmRGMko3bXUyN3lYbDQzejk3QzlnMVNOMld3RW8rRERrT2JQZWxwRUhYa2QwbTNETklrdWpWTktORjlUSWV6ZjFxeHBwZENJbWhmOE53bmFydjRQL1ZPTU0vM3dRY3c2NERJSnUzQm5qeER3SURVak4zbmFNbW9qZXptNlBERGNGeCtPbDhPNVF1dzE4R1FtNEM4YTVoL1JTejZQY0ZXNmdCVEYyVEdWeFZRcU9uR1pJYUtHWXlhZE9CVXdXaHdwRk00WTFNcFlBZ0hYcS9CdGVPK2FLYmNHSVVXZ01LS3lOU1I2Tmg5dXVnWXM3Q0NxSEN6MHdxZ3AzWWZZYkhuRWxFWmhnV2ZKUDU0M2ZkK09TNDFJTXFzekdqTTZKR21VdnZnOXRIeUVndkNJWlRLM1dFSEFSQ0xtY2lkaVI4VEIzaVFCcXoxQnFScVdKL0RBUkU4UzFKL1U0SXhMMEVXQmdiNkkrUUx4NXhlUHhyZFY1U2ZyWitGMkdFanNVWlhWTkhnYURNZE5Xa3NRTlovSEFLY05HbVUwbnZFRUJJK3pPbUUxaXh4WFBtNG0xYkJKSFQra1ZIa3dvOHBYRUFrYXNad1RXQzJBRmZSVll3MC9VWTR0THExWXFMU2paeXVhUjZqNXdKYjRBbSt5VDNHV1ZYdWMzWWdOVTgzZ2JibGM4SktzZlVqUTBMNWozcFVGY1hJR2NvQVYwQzd3K2I1cVJpSld4QkVya244WnVYZXlXQW9XZmVtbEF4ZHB2TGR3L3JocVhidmFzRVhZOHNDMWhmeUtjcEI4YjdsYnlQMVhBZTRXc2NMenhVTmJkM1gyMU5ZM1BFRnp3WHVMdHQ1UmY1aUtQU1dRSWpzSXZyL1ZyWWJ3L09DN0NMOHZNL0JUSEhaNTVZYUpNcERPdDdSdGF0cFpPZHcybjE1RGgrdExqUzhBZnVYalBSemV1YjlRQnpWdmRyWUpoUUVVSDJta3YweTQ5OEJHd25mdmlqdG9GYlUzU2RxMlgvZDBTM3RMeXpTTDkxTno4Mk9nQlBnc2F1K3lnVCt0T0FnNTFIQ2ZYZEdmeW5HcUVSVHZhOEEycVBMN1BhMk4zTHMvblpkQUs5OXk2Q2syNTY1RExXM1V4TEpSWSsydDkveHV2clBaMHRwU1diNnQwcmZWMHJTUDA5SFd1cTYxZGJ5MVRRdWlFcnhNcEpmY3ByZERGVFVQVmJORk56dFlhajFsK2RXOG41cGJYdVEwcTF1YUQ0TW5vRkNpMzkwbnVoamY5eURZdnh5eUkzU2FGMTBYeDBybEppdzYzYTNrVTZwMUsyZHdrdnl4V3h5cjFjOFRPa0ZPWFdLS3FqM2JpdklFWDJIR2JicEFZdVhEanFwRDFzRStuMVp0bmNSSnJtbWdjbmlWRE91d3ZQV1NDdXl3bm45YVk3VXYwMURONnhEVHQxcWxROWU3aFV0YmhNS1dwY0pFQlNGYjllVVlYQUpINW5xMGt2c2hEbTFGcldXMzhvN0IyOUJsejg1OVd5UFBBMStiandhcCtQeGtodGQxSUtJdzlmemx5azdWMms1TW5tdVZYc210dFVOenJIM3h0dFlINkpxak9LSzJRK2VtdjE3NVBxUTM4VCs5bTZTN3lmVThxOEQrQnhoVFJlSEN2alRuV2tBTTkxSlkyUWtiNUFHUFFxV0pxQTc2bmx3K3cvZTlPWUJpcGk0ZDJrdEllT1JPdjFCRmNXK2FnQ2hBM2VzbEVYVUdiY0lHQVJUYzRuaFQxMUJaNjZYWHpURkxGTnlaSVQ1TUxXK3J5Qm1vZFcyVnJFWERSTVpxUkQvMnF5TUw3MlhnUXBHRUxmTm96NzBndm83QmtCenhXcDZlaEFWYWNucGV0WGtONnhKR2RnaUp5aHBKaDdhQ01JZ0RNY3BSVDhxaWFMdkw3R2FOVStabjR1aWxyZ2EzWW9NK2lLc0hIcWo5R3U0bmdycEZIb1dydmxGUVBzUGNweGxqcU9Mc3ZkbW1qYnJlbXNIcmE5K3VTc0dEK29WdXBic09iN0Z4WllVNnNxeFJiZHgwbldPeGtra2l1czR2bncvSzBXQ0pSNXVJNzVYWFQzMTRCcys5RFRuQnhieVJtTkc1d3c1QmdXUFVKaG5ac2wyV1czTjUrM1VyZGlVMExpcXhJQzlmSmh1Zk5sK1dUSnF1MExjU2treFg0ekZBZTVSV1JMVmNQajVUTTFORlJ0UDViYmZrYy9ZYk5OVUlpTG5wVEJMVHNyc3BnQ01aeDJuRmFrTXZKdWNvaWp3YVVNYUtlTDdRUXVlajZLTzIzSkZsUUl0VXVqWXpPL1NZdUUwN2ZidklSTkc4TW5jcG81ZDNsNWxLMGpJam1kdTQ5WTliWDZvMjZZbFpjN1BmSGY5MHZNZG1IbHdaUVR5SEROWDFHbDVrMWo3Y1A0LzVNTkVwNDBRSnpUTTNHTGl2MEpyZkJSNHVBZmYwcUJCTVcwS1U0Vm1xMk9NcWNMTWRURGV2YVBpQ21iWTR3WXlWTDFnWk5uVlJzajRITHBhQXVlYW5xNExjQ3BsWHBSS2lreW1VNllhYzRldStFSW8rMS9ONStzOUZ3aTkwUVAyTnJnQ0tHcFRETERLV0xhUlc2a2JQYW1OM0VabUtSSVFReWRVZWJFUzArWEdxZHFoYmdNU200dUg5aGI3d0FhcU9JVjJDNEtQVXZtSUVMMUFQZkEzNEs1bG1peFYzNkc4MEtMc2JVbzFDbnVyQ3lCUkY3a2NGUys5RXNZWC96UWZmOEIvYmZkUGt5enNwTUk0cWpwbnNYcnJBbzcvMXFkZm5TMFRNM0FhUzJVVHZSOGVMVnVMZWp1d0xsSGRid25VV1haRlZtb3hobmFMTGpqQ2JOZmlaMlFKSkxnaUsyOHFPdWt5bHl4WnlldUpQM0MvcEliUTZURjJ1aFhnYWNLWldGYnZnejNHdndoNWdhR2R0SUNIWmRBUHdQYUN6SXVqYWUxZk1kT0Y5MmQ0UXdXSHZPWDJMS0RKbGoyaTZOamZvaHFzZ2hGdXVHOWhLcmFYTjBvaFYwRU9rR2FMTEx6T012dWhYRTh2VTVkYm9jc1pvRE1sTUlUTnkrVFdpMEpLSUw1RFUrMC9wZDBmMFE0bTZDWFdwOE1IUUkrVjluaG5jd1NES01jb1EvY2h6Vjc5YktjKy92dmc1L1NGd083OTA3UEQ1dS9kVXl2ZXY5RDJqWDBaWmRBZVNSaS92ZjZxODNXT3pKeGlZV2hqS0g5cDZEbUtVZHR3MzVmNFN4cXRiSDdvalNjV0hGcm5XK0Q3bFltMU5rK0htYXlyd2RQUkN2ZlltOE1zbGp4b2ZFYzJNdURYMzJ3L01NK2lsdXZ6ckRad1RjZWx0dXA5dWh0MEdsNDhkK1FuSFcwNVVzanpYYS9ubjJiTnM4M1Q5RUhab3U4bnQ0OHNGT1BzMTc4OTNDYlhiMnNOTFdUR05qcFU0QU1PVHJMaFd5NDVQWHF1VlJxeE9WUVRXU0dOV2h5cjh5QjU0OG9KV1lBUFpYY0RoemNLTzkzKzhCK081Ujh4S3FONWNtb3lrRkNvMXJoWUZZSzJvaEdlelJ0UVZqRzZwOGpuQU9sVXBqK1BxYmNTL25sSUNOV1E0QzdCRWNQMU9iOS9ZbmM2dGE0STNMbkpJVmtiN05tSGRXS2oyd3I5WnpLVGk3NXNYSzFORGU1eGRZNG9wejhyRS9RZW5IL2NzV1hZcUZkbWJjUWpYMkFmaXRwQkVHcEc3ZlBJdXZmQ3JLeFZhdjlZUVltV2tqZzQzcUFMVGZKZHR6S29VeG54RS8zZlJPbS9SaktpN3V6QW5PYWdnU0ZuWG5wYnJJSEMyTE5lV292RmwycFpxcmduLzVLTGtzakVpSU1OaS9JaEVvL1JGWlpnL2F4WURLUy9ZSlV6clU3dGdoOXVEbTdqdHBDRklXYjg5MngySTJ5cXlNU3JlYnI5SXEyUFdzSjJNWHJ3ck5TSWgzUUE1QTIvWlVJSzAxZmJ3dm1ZRUY4cUdxcEJpTEdYcVhTOGV1d1ppTEk3VjlxYVBMaGoyMFVKUDkycVZGNlY0dlVRZFlzMzhsOUJWZ1NuY1lPRzdaVmt0aXRyZmZ2dEIyYjdRSitLR21uTmV2SlVqV2V2aGlCQ3ZVaUdOUGR5R2VBWEx0MEo0ZnBDYzJHa0Y5OVhUVWtHNFYvdHFwS1hIOWVtcEJ4Vm52MnVEWFhwZkU4bXNtbU5XbE9NWTJGK3d5VkRNR1NkQ1llUG1ZbTZUb2RPeUN6blQ1bkRJTkZIUUlpWDRZblU2b1YzcTlVZ3duY3lsT0dhU1pvK1hTYVFtVmp1ekJrM0dhS1FYUnhaeHVnMUp2cy8wdzJENGYxdnh5VVFlR0JaNXZUSUQrNGRjOHNkNFQrM1F2bGZBWEIrYUk3K1V6Yzd6RkErTE9aeGY1S0M4UW0xdmY4eElBZEJvVXpsMU5LUCtSSGRGNGZpcDVsY2FtblkzZDFTMXYxYi90V1BJWWk4UmhMMms1UTVuYVVHZzhUb2ExMmlUbUZtYlVBMFVUV2gwQ1RPbVMrcGlnSGNscERoeDhHYW92U1dqTFhRcjBWSUVvaC96MUtVVHRuM1hlT2c3OURDKzVDU1U2UnJkUGVtVFgvMXNpZHY2RDVnVmFWWnNKVFBuVXpzbFY2dkZVdlhWRXVuVkhJbEVjN1ZYWnBOTGJiS3ZNYkJzYjYva3MzK0xvZVhUVjlJUXNnTU45bDBiMmdKWm5QTnBPTTd1dlo0dVdiWWQ1OVJUT1R3M0pHWHBudnFxaGJYK0cwREtWQ3RnRWwxVUxSUGYzZXJna045UEY2NEVFSFdaUnQzRTI2MjFmUFNIYWoreFNMMkhobHp3ZFQyenF2aC93WmRzQ0VqTm80b3VJTGQ3SWNlMWJSSHdmcFZXQlpoamZaaVpUQXRGTlZNTGc2Z1dNaGhxbVdoSzBSM0Vwb0t0eHl1V3pTMXE1bXJwT3dxOGVWeTNDL0ZSZVJNSUhLZVpLRUkrZVlpdW9tbDJDUG9NRmpYNnE4Qmx2MGNFM1Z1b1FrOEs1eWVNcGROSElJa3MzeGhMQ1NYbGZFOHF2M3granc5UVlwaFM0ekxITmYzenRyRW1NSjA0RzAxMlVzUFg1K3RxdWtYYlYyaEtiVWtSVEk2YytEeERmbE1oeG9zQ0ljL3pnSmhIRlV0ZGp5bHZXQ2twdUw0MmRXRGZwT2x1YXFsWjFoTkJ0TnNMZkJHUnFVSm1JU3Y5WjRGRWVrdmdqV3RzYkdyOFFlNTJJN2k5SmZnUlhnT1F2VjdiSk5hdCtPdHRZL1F3eWt1TndINGpDMWI1WlV2WnA3K3VxMkZrdXJzNG1nT2hkclcvZDlqZ1RRNjdwZ0tEcjhobS9rN285bzdzNTA2eTJDZWVZM1B1TzhGbW5ienZidFlQTGEzL1cvclpGSlo3R2dJTTM2N1h3UFlqZ01wci9FTWc0WG9EbTVHdWwxZ0hzNy9DSVNhYjN6dWdrMDRNYUEwSVZFVXZybTN1cFdEUjhEY0tobHRRTUZ5TmdpRVRJL2duZTYya1RkNmMyZGJrNVdIRHJ4N1pKSXNxY0tZdlN1SlJsSWFpb0J0RndUc29DdjZVb2dUQWRjZ0pMY2dKenlJblBJS2M4S0dVb2k5MHdmU2FSdXdBb28rb3FicVIydWNScGc0L2NqM0JUSmo5S2VaeDRHZmptbUFYNVRtV1lDbFRNTnltendRbHhXbURSOVYrL2lPY0pQWmZtQjZIbCtBR2pZMG80dFJ0MXZjSHU0YkZhbjJ5eitBYlJqTmI4bzFTVGpkR0dxTk94WDRTSVRWcHlDUFhJOHloaVQzQkFpWWUzeklWK0toazVpUkNQbWpUKzNTbGVwK3VCdm5nNURHTFFmRVhBOEVBOW5icm5Yb0FzWHd4ZTcrdUl0QUlmbzM2OFVnM1FtQnErd2pvYmZReCtnUjlpajVEbjZNdndKZmdQZWtyVXZ3YXFTSytWZDdENytEM3pBOGUydmgySXpEOXRlbnhWRDZKQzQ1MTJ4dDhsajVIZlQ5UGZ4cCtvczRIdEFWZHdZektuS3ErUXN6eGV4bzNyR3dMY3JkMlZkUVFOMW1YeDFQY3dDMXU0c1BiekJORUx2MkxhTERkVXRQMm9iUXhLOGF6SG9PNFczaUQzVDQ5ZldlVTJlZlIzZjcveUxGWVptRFFYdmM5SzlsYWdVVUFNZUxlZnhhc0FqQ0hmVmdBWkI2SWRZczUwWHUxM2JxTEY5YjI0STlaRDJzRGJpMTQvejhneTFpeGx0amd2T1VCNUxvQWdCWFl6YWxKZ3NhTXJSMXRYWWRSUmxHSDlSUWRzRSs2eG1SZzh5SWVvOG94UnVNUUJTb1B1TU9NWU1MZHM0eEdDSitIMlNNaTVhYnVzL3dDVlk1dE5BMFhtMHk5eEdNMEp0QU9xMXBnSzBCZEtBZjdES0d2ME1mb3k5Ri9aR2xhbE52bHdubENjaGd0Ukw5bFc2QXI0S04rb1NkZ0l4WHBJSnlGMjdnTzJPL05BbGgxVlhlTk95UGQ5LzNTSUtBL1ZDazM5WTRFUFlpdUhlTUJISnBXa20zUWVKRUxQRVlMMFc5Z2daS2E5ekdIenY4Ykk3REhlLzRZYmhmZTJFOWlvTzlKTTMyM2J1YnNTa1F2aU13K24zUU5KVWU4dE90cnp5NXYyRWE2N0EyeFZaVHM0dTh5MWpqbnU1M05DM2tFYmlFL1pqc2l1bE9qMjBRNjhVNllFaW10eGt1dUMzdkw4WVpMbzJzRkVhZFF4dXZHOWxFMGV0Nitsays3TVFIb04wUFlsc2FYYit2YU4zdHIxeTQyZFZta2ZTYlY1eGkzQmJWMXUxMU05d0QwbE96TFhuWUNSOTB0NHd0K3JpdW9LQTE5eXV3RDJwTEFKd1E3WjN5K2NJbmk4a2c2MThuVVNBVDJPNlZLLzNXQklhMWhUMmV3N0VvRlNyYU1JaitUV0UwKzk0cmFIQUp3RVQ5K1o3cGxYRWpxM3hESDNRRGc1SUdPKzVMOEwyK0ovK2l3enhQTXhnRWlCZ0FJL2l5Wm9IQW1NUDAvZUU1azl5NmlOZTFrNnc3V3o0dWNycVRweHlaM0JlVUp2MlJ5cDNYRlRQWWR5TDdKSXdSNFJranpON2F6WGkyQ0lNRTBwVFhvZFpjN0lTamQrckw0Rkh4R0V5M0FSSFVBeDFWL0xadmlqbDh3V1YybTFmU0NmK3N3YzBXMDZPcWE1bTZTS3p5dFJuaFFWYWdNNk1jaFJna0pNWFlFOFloQjl1bUtvb1RwR1JxTmtLNGZ4NE9XK3UrNENyY0dZcmdUWjV2bUc5VFVqdGZuaXFZWlVXVDZVZzBlRTNoa2lVRzVuQnBnakYxNERYYm8rRFFSYmZwVjEzek1wbElKQ3VjK1ZMSnhHZ2F6eEZ3V0kzWkxuajY1WDUwMHhCMDNvWjBNTDRhU1A2R3ZRWEtidVBNclVxdm1hUWgzVUdaclJVWk5pWW85dFhUUlU3eEdsZFN5cFk0NWJBckxVTE16dEFiNjVpbWRJT2FSRFlwSVVGNUJzSW83S1E2L1V6U3d0STJTZWRTMWs3UW9JWFBTYzBHVEY0dXpXaHhMeHZ3TnhGN2g5cjEyTExZWElkOUZENXNyTy9TMzJiS2VXelpQSnFYL0FNM1FoMXB1ZlN0NzZqaVF2WUVsMW1NMGVNN1RNa3dBQTN0OVNEbTc2WmFYS0xaNTY1dnBPMGl4dmZReUNJMmo1Qk9oVi9rMlBpVjNzUnQ0S3FGbC9tRHVEblV6Nm03VnY3OFJQYjNJMWpQTVhWQ3FWWWlmK0VURkhuVzNyY2hNYjUxZTF1dVZwekwwbGdHVElBVU1hUlVGY0tBRHNJRUUwUUlabUtmeURVbEZaWWNvMmE2LzQzUURDYVhza2NNR09LMnM1S0Z6cVB5aTdzamZKOVM4TlZvamo4b1gxTWp1eWZFRVFJQ1BjV2ltQVdnakxCd2tKcTBPSmppZEhaejJpWTNPWnpzRWtkbnJFTmx5blNOWVlsNXloREtYWWc4ajFicVRDQWhzbkM3eTVLdFFLSnRYbG1JeWhVdThOTExCQlppeXVRT1V5RGJKZEVVbXlEV1pyTDlDZWFhWlloSUg3VVMwdUpYbWViVElpalpCY3JGODAyODZKeWV2N0V5MXhFUU9xc21UdzduS3RkQVVaZXp5VGVEbGt5M1hCR1VaNDNMS3BoN1FISzd4cWVBUWV2dG9jV1JsRXRKbEEwMVJaTXBSS1RWRlhlcnB4VnhGeGI2OG5GN2pzcTdHYmRVMjBCdWVJVkpPd3NmRnE0VFBCSVVTT0xpNEpNclFWejk5ZFpNaGFQQzRXVHNZeWdFblpxczRtcndZS2R4ZXVQbFlLVExKcURTL1Y0bzRoQ28rRHZOUWIvUUkrdkhvcmVmZ01UUE1tNFk1dTA3NVA2SklYaEgvZTEveW53RUEpIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9Ym9keSxodG1se2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjR9aHRtbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItcGFyYWdyYXBoLHB7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH0ubW9uc3Rlci1oMSxoMXtmb250LXNpemU6M3JlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MTttYXJnaW4tYm90dG9tOjEuMjVyZW19Lm1vbnN0ZXItaDIsaDJ7Zm9udC1zaXplOjIuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6Y2FsYyg0cHggKyAyZXgpO21hcmdpbi1ib3R0b206MS4yNXJlbX0ubW9uc3Rlci1oMyxoM3tmb250LXNpemU6MnJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6Y2FsYyg0cHggKyAyZXgpO21hcmdpbi1ib3R0b206MS4yNXJlbX0ubW9uc3Rlci1oNCxoNHtmb250LXNpemU6MS41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfS5tb25zdGVyLWg1LGg1e2ZvbnQtc2l6ZToxLjRyZW07Zm9udC13ZWlnaHQ6Ym9sZGVyO2xpbmUtaGVpZ2h0OmNhbGMoNHB4ICsgMmV4KTttYXJnaW4tYm90dG9tOjEuMjVyZW19Lm1vbnN0ZXItaDYsaDZ7Zm9udC1zaXplOjEuM3JlbTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6Y2FsYyg0cHggKyAyZXgpO21hcmdpbi1ib3R0b206MS4yNXJlbX1wK2gxe21hcmdpbi10b3A6My43NXJlbX1wK2gye21hcmdpbi10b3A6M3JlbX1wK2gze21hcmdpbi10b3A6Mi4yNXJlbX1wK2g0e21hcmdpbi10b3A6MS41cmVtfXAraDV7bWFyZ2luLXRvcDouNzVyZW19ZGl2K2gxLGRpditoMixkaXYraDMsZGl2K2g0LGRpditoNSxkaXYraDYscCtoNnttYXJnaW4tdG9wOjB9LmRlY297dGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMSkgMCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTIpIDUwJSx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTMpIDEwMCUpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1zaXplOmNvdmVyO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfTo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX06OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfWtiZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtib3JkZXItcmFkaXVzOjEwcmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3BhZGRpbmc6LjI1ZW0gLjZlbTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9ZGV0YWlsc3ttYXJnaW4tYm90dG9tOjFyZW19c3VtbWFyeXtjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo3MDA7cGFkZGluZzouNnJlbSAxcmVtfWRldGFpbHNbb3Blbl17cGFkZGluZzouNnJlbSAxcmVtIC43NXJlbX1kZXRhaWxzW29wZW5dIHN1bW1hcnl7bWFyZ2luLWJvdHRvbTouNXJlbTtwYWRkaW5nOjB9Lm1vbnN0ZXItbm8tdXNlci1zZWxlY3R7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfUBrZXlmcmFtZXMgZGV0YWlscy1zaG93ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjVlbSl9fWRldGFpbHNbb3Blbl0+Om5vdChzdW1tYXJ5KXthbmltYXRpb246ZGV0YWlscy1zaG93IC4xNXMgZWFzZS1pbi1vdXR9ZGV0YWlsc1tvcGVuXT46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtwb3NpdGlvbjpyZWxhdGl2ZX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgRGF0YXNvdXJjZSB9IGZyb20gXCIuLi8uLi9kYXRhL2RhdGFzb3VyY2UubWpzXCI7XG5pbXBvcnQgeyBSZXN0QVBJIH0gZnJvbSBcIi4uLy4uL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS5tanNcIjtcbmltcG9ydCB7IFdlYkNvbm5lY3QgfSBmcm9tIFwiLi4vLi4vZGF0YS9kYXRhc291cmNlL3NlcnZlci93ZWJjb25uZWN0Lm1qc1wiO1xuaW1wb3J0IHsgV3JpdGVFcnJvciB9IGZyb20gXCIuLi8uLi9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3Jlc3RhcGkvd3JpdGVlcnJvci5tanNcIjtcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi8uLi9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9sb2NhbHN0b3JhZ2UubWpzXCI7XG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9IGZyb20gXCIuLi8uLi9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9zZXNzaW9uc3RvcmFnZS5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9ESVNBQkxFRCxcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1BSRUZJWCxcblx0QVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFUyxcblx0QVRUUklCVVRFX1VQREFURVJfSU5TRVJULFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9SRU1PVkUsXG5cdEFUVFJJQlVURV9VUERBVEVSX1JFUExBQ0UsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL3VwZGF0ZXIubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi8uLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgUHJvY2Vzc2luZyB9IGZyb20gXCIuLi8uLi91dGlsL3Byb2Nlc3NpbmcubWpzXCI7XG5pbXBvcnQgeyBNZXNzYWdlU3RhdGVCdXR0b24gfSBmcm9tIFwiLi9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9GT1JNX0RBVEFTT1VSQ0UsXG5cdEFUVFJJQlVURV9GT1JNX0RBVEFTT1VSQ0VfQVJHVU1FTlRTLFxufSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBTdGF0ZUJ1dHRvbiB9IGZyb20gXCIuL3N0YXRlLWJ1dHRvbi5tanNcIjtcbmltcG9ydCB7IGdldFNsb3R0ZWRFbGVtZW50cyB9IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IEZvcm1TdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9mb3JtLm1qc1wiO1xuXG5leHBvcnQgeyBGb3JtIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBzaW5jZSAzLjEuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0ZPUk1fREFUQVNPVVJDRV9BQ1RJT04gPSBgJHtBVFRSSUJVVEVfUFJFRklYfWRhdGFzb3VyY2UtYWN0aW9uYDtcblxuLyoqXG4gKiBGb3JtIGRhdGEgaXMgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmb3JtIGRhdGFcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBzaW5jZSAxLjcuMFxuICovXG5jb25zdCBmb3JtRGF0YVN5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc2NodWthaS9jb21wb25lbnQtZm9ybS9mb3JtQEBmb3JtZGF0YVwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBzaW5jZSAyLjguMFxuICovXG5jb25zdCBmb3JtRGF0YVVwZGF0ZXJTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL2NvbXBvbmVudC1mb3JtL2Zvcm1AQGZvcm1kYXRhLXVwZGF0ZXItbGlua1wiLFxuKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBzaW5jZSAxLjcuMFxuICovXG5jb25zdCBmb3JtRWxlbWVudFN5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vZm9ybUBAZm9ybS1lbGVtZW50XCIsXG4pO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQHNpbmNlIDIuNS4wXG4gKi9cbmNvbnN0IHJlZ2lzdGVyZWREYXRhc291cmNlc1N5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vZm9ybUBAcmVnaXN0ZXJlZC1kYXRhc291cmNlc1wiLFxuKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHNpbmNlIDEuNy4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBQUk9QRVJUWV9WQUxJREFUSU9OX0tFWSA9IFwiX192YWxpZGF0aW9uXCI7XG5cbi8qKlxuICogVGhpcyBDdXN0b21Db250cm9sIGNyZWF0ZXMgYSBmb3JtIGVsZW1lbnQgd2l0aCBhIHZhcmlldHkgb2Ygb3B0aW9ucy5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL2Zvcm0ucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5LlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgYDxtb25zdGVyLWZvcm0gLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItZm9ybScpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLWZvcm0+PC9tb25zdGVyLWZvcm0+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IHtGb3JtfSBmcm9tICdAc2NodWthaS9jb21wb25lbnQtZm9ybS9zb3VyY2UvZm9ybS5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWZvcm0nKTtcbiAqIGBgYFxuICpcbiAqIEBzdGFydHVtbCBmb3JtLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gRm9ybVxuICogQGVuZHVtbFxuICpcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHN1bW1hcnkgQSBjb25maWd1cmFibGUgZm9ybSBjb250cm9sXG4gKi9cbmNsYXNzIEZvcm0gZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb3B0aW9ucyBhdHRyaWJ1dGUgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gZGVmaW5pdGlvbi5cblx0ICogQHNpbmNlIDEuNy4wXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbZm9ybURhdGFTeW1ib2xdID0gbmV3IFByb3h5T2JzZXJ2ZXIoe30pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL2NvbXBvbmVudC1mb3JtL2Zvcm1cIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtEYXRhc291cmNlfSBkYXRhc291cmNlIGRhdGEgc291cmNlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSByZXBvcnRWYWxpZGl0eVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVwb3J0VmFsaWRpdHkuc2VsZWN0b3Igd2hpY2ggZWxlbWVudCBzaG91bGQgYmUgdXNlZCB0byByZXBvcnQgdGhlIHZhbGlkaXR5XG5cdCAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IHJlcG9ydFZhbGlkaXR5LmVycm9ySGFuZGxlciBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIGVycm9yXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjbGFzc2VzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzc2VzLmJ1dHRvbiBjbGFzcyBmb3IgdGhlIGZvcm1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0XHR7XG5cdFx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGRhdGFzb3VyY2U6IHVuZGVmaW5lZCxcblx0XHRcdFx0cmVwb3J0VmFsaWRpdHk6IHtcblx0XHRcdFx0XHRzZWxlY3RvcjogXCJpbnB1dCxzZWxlY3QsdGV4dGFyZWFcIixcblx0XHRcdFx0XHRlcnJvckhhbmRsZXI6IHVuZGVmaW5lZCxcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2xhc3Nlczoge1xuXHRcdFx0XHRcdGZvcm06IFwibW9uc3Rlci1mb3JtXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0aW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzLmNhbGwodGhpcyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgZXZlcnkgdGltZSB0aGUgZWxlbWVudCBpcyBpbnNlcnRlZCBpbnRvIHRoZSBET00uIFVzZWZ1bCBmb3IgcnVubmluZyBzZXR1cCBjb2RlLCBzdWNoIGFzXG5cdCAqIGZldGNoaW5nIHJlc291cmNlcyBvciByZW5kZXJpbmcuIEdlbmVyYWxseSwgeW91IHNob3VsZCB0cnkgdG8gZGVsYXkgd29yayB1bnRpbCB0aGlzIHRpbWUuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlcltcImNvbm5lY3RlZENhbGxiYWNrXCJdKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHJlZnJlc2ggbWV0aG9kIGlzIGNhbGxlZCB0byB1cGRhdGUgdGhlIGNvbnRyb2wgYWZ0ZXIgYSBjaGFuZ2Ugd2l0aCBmcmVzaCBkYXRhLlxuXHQgKlxuXHQgKiBUaGVyZWZvcmUsIHRoZSBkYXRhIHNvdXJjZSBpcyBjYWxsZWQgYWdhaW4gYW5kIHRoZSBkYXRhIGlzIHVwZGF0ZWQuXG5cdCAqXG5cdCAqIElmIHlvdSBoYXZlIHVwZGF0ZWQgdGhlIGRhdGEgc291cmNlIHdpdGggYHNldE9wdGlvbignZGF0YXNvdXJjZScsZGF0YXNvdXJjZSksIHlvdSBtdXN0IGNhbGwgdGhpcyBtZXRob2QuXG5cdCAqXG5cdCAqIEByZXR1cm4ge0Zvcm19XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgZGF0YXNvdXJjZVxuXHQgKi9cblx0cmVmcmVzaCgpIHs7XG5cblx0XHR0cnkge1xuXHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0RJU0FCTEVELCBcIlwiKTtcblx0XHRcdGNvbnN0IGRhdGFzb3VyY2UgPSB0aGlzLmdldE9wdGlvbihcImRhdGFzb3VyY2VcIik7XG5cblx0XHRcdGlmICghKGRhdGFzb3VyY2UgaW5zdGFuY2VvZiBEYXRhc291cmNlKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bmRlZmluZWQgZGF0YXNvdXJjZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGFzb3VyY2Vcblx0XHRcdFx0LnJlYWQoKVxuXHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0dGhpc1tmb3JtRGF0YVN5bWJvbF0uc2V0U3ViamVjdChkYXRhc291cmNlLmdldCgpKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9ESVNBQkxFRCk7XG5cdFx0XHRcdFx0fSkucnVuKCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9ESVNBQkxFRCk7XG5cdFx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdHRoaXMucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9ESVNBQkxFRCk7XG5cdFx0XHR0aHJvdyBlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Gb3JtfVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHs7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RGF0YXNvdXJjZS5jYWxsKHRoaXMpO1xuXHRcdGluaXRVcGRhdGVyLmNhbGwodGhpcyk7XG5cdFx0aW5pdE9ic2VydmVyLmNhbGwodGhpcyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0Z2V0VmFsdWVzKCkge1xuXHRcdHJldHVybiB0aGlzW2Zvcm1EYXRhU3ltYm9sXS5nZXRTdWJqZWN0KCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWZvcm1cIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0fVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtGb3JtU3R5bGVTaGVldF07XG5cdH1cblxuXHRzdGF0aWMgW3JlZ2lzdGVyZWREYXRhc291cmNlc1N5bWJvbF0gPSBuZXcgTWFwKFtcblx0XHRbXCJyZXN0YXBpXCIsIFJlc3RBUEldLFxuXHRcdFtcImxvY2Fsc3RvcmFnZVwiLCBMb2NhbFN0b3JhZ2VdLFxuXHRcdFtcInNlc3Npb25zdG9yYWdlXCIsIFNlc3Npb25TdG9yYWdlXSxcblx0XHRbXCJ3ZWJjb25uZWN0XCIsIFdlYkNvbm5lY3RdLFxuXHRdKTtcblxuXHQvKipcblx0ICogUmVnaXN0ZXIgYSBuZXcgZGF0YXNvdXJjZVxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuXHQgKiBAcGFyYW0ge01vbnN0ZXIuRGF0YS5EYXRhc291cmNlfSBkYXRhc291cmNlXG5cdCAqL1xuXHRzdGF0aWMgcmVnaXN0ZXJEYXRhc291cmNlKG5hbWUsIGRhdGFzb3VyY2UpIHtcblx0XHRGb3JtW3JlZ2lzdGVyZWREYXRhc291cmNlc1N5bWJvbF0uc2V0KG5hbWUsIGRhdGFzb3VyY2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVucmVnaXN0ZXIgYSByZWdpc3RlcmVkIGRhdGFzb3VyY2Vcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICovXG5cdHN0YXRpYyB1bnJlZ2lzdGVyRGF0YXNvdXJjZShuYW1lKSB7XG5cdFx0Rm9ybVtyZWdpc3RlcmVkRGF0YXNvdXJjZXNTeW1ib2xdLmRlbGV0ZShuYW1lKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgcmVnaXN0ZXJlZCBkYXRhIHNvdXJjZXNcblx0ICpcblx0ICogQHJldHVybiB7TWFwfVxuXHQgKi9cblx0c3RhdGljIGdldERhdGFzb3VyY2VzKCkge1xuXHRcdHJldHVybiBGb3JtW3JlZ2lzdGVyZWREYXRhc291cmNlc1N5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogUnVuIHJlcG9ydFZhbGlkYXRpb24gb24gYWxsIGNoaWxkIGh0bWwgZm9ybSBjb250cm9scy5cblx0ICpcblx0ICogQHNpbmNlIDIuMTAuMFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHJlcG9ydFZhbGlkaXR5KCkge1xuXHRcdGxldCB2YWxpZCA9IHRydWU7XG5cblx0XHRjb25zdCBzZWxlY3RvciA9IHRoaXMuZ2V0T3B0aW9uKFwicmVwb3J0VmFsaWRpdHkuc2VsZWN0b3JcIik7XG5cdFx0Y29uc3Qgbm9kZXMgPSBnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzLCBzZWxlY3Rvcik7XG5cdFx0bm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdFx0aWYgKHR5cGVvZiBub2RlLnJlcG9ydFZhbGlkaXR5ID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0aWYgKG5vZGUucmVwb3J0VmFsaWRpdHkoKSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHR2YWxpZCA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdmFsaWQ7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0VXBkYXRlcigpIHs7XG5cblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0Y29uc3Qgc2xvdHMgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChcInNsb3RcIik7XG5cdGZvciAoY29uc3QgWywgc2xvdF0gb2YgT2JqZWN0LmVudHJpZXMoc2xvdHMpKSB7XG5cdFx0Zm9yIChjb25zdCBbLCBub2RlXSBvZiBPYmplY3QuZW50cmllcyhzbG90LmFzc2lnbmVkTm9kZXMoKSkpIHtcblx0XHRcdGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHF1ZXJ5ID0gYFske0FUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVN9XSxbJHtBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFfV0sWyR7QVRUUklCVVRFX1VQREFURVJfUkVNT1ZFfV0sWyR7QVRUUklCVVRFX1VQREFURVJfSU5TRVJUfV1gO1xuXHRcdFx0Y29uc3QgY29udHJvbHMgPSBub2RlLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpO1xuXG5cdFx0XHRjb25zdCBsaXN0ID0gbmV3IFNldChbLi4uY29udHJvbHNdKTtcblxuXHRcdFx0aWYgKG5vZGUubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdFx0bGlzdC5hZGQobm9kZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChsaXN0LnNpemUgPT09IDApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGFkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50LmNhbGwoXG5cdFx0XHRcdG5vZGUsXG5cdFx0XHRcdGxpc3QsXG5cdFx0XHRcdGZvcm1EYXRhVXBkYXRlclN5bWJvbCxcblx0XHRcdFx0dGhpc1tmb3JtRGF0YVN5bWJvbF0sXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXREYXRhc291cmNlKCkgeztcblxuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRjb25zdCBzbG90cyA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKFwic2xvdFwiKTtcblx0Zm9yIChjb25zdCBbLCBzbG90XSBvZiBPYmplY3QuZW50cmllcyhzbG90cykpIHtcblx0XHRmb3IgKGNvbnN0IFssIG5vZGVdIG9mIE9iamVjdC5lbnRyaWVzKHNsb3QuYXNzaWduZWROb2RlcygpKSkge1xuXHRcdFx0aWYgKCEobm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgcXVlcnkgPSBgWyR7QVRUUklCVVRFX0ZPUk1fREFUQVNPVVJDRV9BQ1RJT059PXdyaXRlXWA7XG5cdFx0XHRjb25zdCBjb250cm9scyA9IG5vZGUucXVlcnlTZWxlY3RvckFsbChxdWVyeSk7XG5cblx0XHRcdGNvbnN0IGxpc3QgPSBuZXcgU2V0KFsuLi5jb250cm9sc10pO1xuXG5cdFx0XHRpZiAobm9kZS5tYXRjaGVzKHF1ZXJ5KSkge1xuXHRcdFx0XHRsaXN0LmFkZChub2RlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGxpc3Quc2l6ZSA9PT0gMCkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aW5pdFdyaXRlQWN0aW9ucy5jYWxsKHRoaXMsIGxpc3QpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZWxlbWVudHNcbiAqL1xuZnVuY3Rpb24gaW5pdFdyaXRlQWN0aW9ucyhlbGVtZW50cykgeztcblxuXHRlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuXHRcdFx0XHRydW5Xcml0ZUNhbGxiYWNrLmNhbGwodGhpcywgZWxlbWVudCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0Y29uc3QgZyA9IGVsZW1lbnQ/LmdldE9wdGlvbjtcblx0XHRcdGlmICghaXNGdW5jdGlvbihnKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHMgPSBlbGVtZW50Py5zZXRPcHRpb247XG5cdFx0XHRpZiAoIWlzRnVuY3Rpb24ocykpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBmbiA9IGVsZW1lbnQuZ2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiKTtcblxuXHRcdFx0aWYgKCFpc0Z1bmN0aW9uKGZuKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIGRpc2FibGUgY29uc29sZS5sb2cgb2Ygc3RhbmRhcmQgY2xpY2sgZXZlbnRcblx0XHRcdGVsZW1lbnQuc2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdC8vIGRvIG5vdGhpbmchXG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBydW5Xcml0ZUNhbGxiYWNrKGJ1dHRvbikgeztcblxuXHRpZiAodHlwZW9mIHRoaXMucmVwb3J0VmFsaWRpdHkgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdGlmICh0aGlzLnJlcG9ydFZhbGlkaXR5KCkgPT09IGZhbHNlKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGJ1dHRvbiBpbnN0YW5jZW9mIFN0YXRlQnV0dG9uIHx8XG5cdFx0XHRcdGJ1dHRvbiBpbnN0YW5jZW9mIE1lc3NhZ2VTdGF0ZUJ1dHRvblxuXHRcdFx0KSB7XG5cdFx0XHRcdGJ1dHRvbi5zZXRTdGF0ZShcImZhaWxlZFwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBkYXRhc291cmNlID0gdGhpcy5nZXRPcHRpb24oXCJkYXRhc291cmNlXCIpO1xuXHRpZiAoIShkYXRhc291cmNlIGluc3RhbmNlb2YgRGF0YXNvdXJjZSkpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoYnV0dG9uIGluc3RhbmNlb2YgU3RhdGVCdXR0b24gfHwgYnV0dG9uIGluc3RhbmNlb2YgTWVzc2FnZVN0YXRlQnV0dG9uKSB7XG5cdFx0YnV0dG9uLnNldFN0YXRlKFwiYWN0aXZpdHlcIik7XG5cdH1cblxuXHQvL2NvbnN0IGRhdGEgPSBmb3JtPy5bZm9ybURhdGFTeW1ib2xdPy5nZXRSZWFsU3ViamVjdCgpO1xuXHRjb25zdCB3cml0ZVByb21pc2UgPSBkYXRhc291cmNlXG5cdFx0LnNldCh0aGlzW2Zvcm1EYXRhU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpKVxuXHRcdC53cml0ZSgpO1xuXHRpZiAoISh3cml0ZVByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcImRhdGFzb3VyY2Uud3JpdGUoKSBtdXN0IHJldHVybiBhIHByb21pc2VcIik7XG5cdH1cblxuXHR3cml0ZVByb21pc2Vcblx0XHQudGhlbigocikgPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRidXR0b24gaW5zdGFuY2VvZiBTdGF0ZUJ1dHRvbiB8fFxuXHRcdFx0XHRidXR0b24gaW5zdGFuY2VvZiBNZXNzYWdlU3RhdGVCdXR0b25cblx0XHRcdCkge1xuXHRcdFx0XHRidXR0b24uc2V0U3RhdGUoXCJzdWNjZXNzZnVsXCIpO1xuXHRcdFx0fVxuXHRcdFx0dGhpc1tmb3JtRGF0YVN5bWJvbF0uZ2V0U3ViamVjdCgpW1BST1BFUlRZX1ZBTElEQVRJT05fS0VZXSA9IHt9O1xuXHRcdH0pXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRpZiAoZSBpbnN0YW5jZW9mIFdyaXRlRXJyb3IpIHtcblx0XHRcdFx0dGhpc1tmb3JtRGF0YVN5bWJvbF0uZ2V0U3ViamVjdCgpW1BST1BFUlRZX1ZBTElEQVRJT05fS0VZXSA9XG5cdFx0XHRcdFx0ZS5nZXRWYWxpZGF0aW9uKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChcblx0XHRcdFx0YnV0dG9uIGluc3RhbmNlb2YgU3RhdGVCdXR0b24gfHxcblx0XHRcdFx0YnV0dG9uIGluc3RhbmNlb2YgTWVzc2FnZVN0YXRlQnV0dG9uXG5cdFx0XHQpIHtcblx0XHRcdFx0YnV0dG9uLnNldFN0YXRlKFwiZmFpbGVkXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYnV0dG9uIGluc3RhbmNlb2YgTWVzc2FnZVN0YXRlQnV0dG9uKSB7XG5cdFx0XHRcdGJ1dHRvbi5zZXRNZXNzYWdlKGUubWVzc2FnZSk7XG5cdFx0XHRcdGJ1dHRvbi5zaG93TWVzc2FnZSgpO1xuXHRcdFx0fVxuXHRcdH0pO1xufVxuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIHBhc3MgYSBVUkwgdG8gdGhpcyBzZWxlY3QuXG4gKlxuICogYGBgXG4gKiA8bW9uc3Rlci1mb3JtIGRhdGEtbW9uc3Rlci1kYXRhc291cmNlPVwicmVzdGFwaTouLi4uLlwiPjwvbW9uc3Rlci1mb3JtPlxuICogYGBgXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzKCkgeztcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdGNvbnN0IGRhdGFzb3VyY2UgPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9EQVRBU09VUkNFKTtcblx0aWYgKGlzU3RyaW5nKGRhdGFzb3VyY2UpKSB7XG5cdFx0Zm9yIChjb25zdCBba2V5LCBjbGFzc09iamVjdF0gb2YgRm9ybS5nZXREYXRhc291cmNlcygpKSB7XG5cdFx0XHRpZiAoZGF0YXNvdXJjZSA9PT0ga2V5KSB7XG5cdFx0XHRcdGxldCBhcmdzID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fREFUQVNPVVJDRV9BUkdVTUVOVFMpO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0YXJncyA9IEpTT04ucGFyc2UoYXJncyk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRvcHRpb25zW1wiZGF0YXNvdXJjZVwiXSA9IG5ldyBjbGFzc09iamVjdChhcmdzKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9wdGlvbnNbXCJkYXRhc291cmNlXCJdIGluc3RhbmNlb2YgRGF0YXNvdXJjZSkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRoaXMgRm9ybVxuICovXG5mdW5jdGlvbiBpbml0T2JzZXJ2ZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGxldCBsYXN0RGF0YXNvdXJjZSA9IG51bGw7XG5cdHNlbGZbaW50ZXJuYWxTeW1ib2xdLmF0dGFjaE9ic2VydmVyKFxuXHRcdG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zdCBkYXRhc291cmNlID0gc2VsZi5nZXRPcHRpb24oXCJkYXRhc291cmNlXCIpO1xuXHRcdFx0aWYgKGRhdGFzb3VyY2UgIT09IGxhc3REYXRhc291cmNlKSB7XG5cdFx0XHRcdG5ldyBQcm9jZXNzaW5nKDEwMCwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHNlbGYucmVmcmVzaCgpO1xuXHRcdFx0XHR9KS5ydW4oKTtcblx0XHRcdH1cblxuXHRcdFx0bGFzdERhdGFzb3VyY2UgPSBkYXRhc291cmNlO1xuXHRcdH0pLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Gb3JtfVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7O1xuXG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbZm9ybUVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9Zm9ybV1cIixcblx0KTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPGZvcm0gZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkaXNhYmxlZCBwYXRoOmRpc2FibGVkIHwgIGlmOnRydWUsIGNsYXNzIHBhdGg6Y2xhc3Nlcy5mb3JtXCJcbiAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiZm9ybVwiXG4gICAgICAgICAgICAgICAgICBwYXJ0PVwiZm9ybVwiPlxuICAgICAgICAgICAgICAgIDxzbG90IGRhdGEtbW9uc3Rlci1yb2xlPVwic2xvdFwiPjwvc2xvdD5cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KEZvcm0pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaXNBcnJheSwgaXNJbnN0YW5jZSB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gXCIuL25vZGUubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBOb2RlTGlzdCB9O1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIHRoZSBpbnN0YW5jZSB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5UeXBlcy5Ob2RlTGlzdCgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI2LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHN1bW1hcnkgQSBOb2RlTGlzdCBjbGFzc1xuICovXG5jbGFzcyBOb2RlTGlzdCBleHRlbmRzIFNldCB7XG5cdC8qKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gaW52YWxpZCB2YWx1ZSB0eXBlXG5cdCAqIEBwYXJhbSB7Tm9kZUxpc3R8Tm9kZXxBcnJheTxOb2RlPn12YWx1ZXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHZhbHVlcykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAodmFsdWVzID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuXHRcdGlmIChpc0FycmF5KHZhbHVlcykpIHtcblx0XHRcdHZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4gdGhpcy5hZGQodmFsdWUpKTtcblx0XHR9IGVsc2UgaWYgKGlzSW5zdGFuY2UodmFsdWVzLCBOb2RlTGlzdCkpIHtcblx0XHRcdHZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4gdGhpcy5hZGQodmFsdWUpKTtcblx0XHR9IGVsc2UgaWYgKGlzSW5zdGFuY2UodmFsdWVzLCBOb2RlKSkge1xuXHRcdFx0dGhpcy5hZGQodmFsdWVzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCB2YWx1ZSB0eXBlXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL25vZGUtbGlzdFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Ob2RlTGlzdH1cblx0ICovXG5cdGFkZChub2RlKSB7XG5cdFx0c3VwZXIuYWRkKHZhbGlkYXRlSW5zdGFuY2Uobm9kZSwgTm9kZSkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuXHQgKiBAcmV0dXJucyB7Tm9kZUxpc3R9XG5cdCAqL1xuXHRyZW1vdmUobm9kZSkge1xuXHRcdHN1cGVyLmRlbGV0ZSh2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRoYXMobm9kZSkge1xuXHRcdHJldHVybiBzdXBlci5oYXModmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge05vZGVMaXN0fVxuXHQgKi9cblx0Y2xlYXIoKSB7XG5cdFx0c3VwZXIuY2xlYXIoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Tm9kZUxpc3R9XG5cdCAqL1xuXHR0b0FycmF5KCkge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtOb2RlTGlzdH1cblx0ICovXG5cdHRvSlNPTigpIHtcblx0XHRyZXR1cm4gdGhpcy50b0FycmF5KCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge05vZGVMaXN0fVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0Y29uc3QgcGFydHMgPSBbXTtcblxuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLnRvQXJyYXkoKSkge1xuXHRcdFx0cGFydHMucHVzaChub2RlLnRvU3RyaW5nKCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBwYXJ0cy5qb2luKFwiXFxuXCIpO1xuXHR9XG5cblx0Z2V0IGxlbmd0aCgpIHtcblx0XHRyZXR1cm4gc3VwZXIuc2l6ZTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc1ByaW1pdGl2ZSB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgTm9kZUxpc3QgfSBmcm9tIFwiLi9ub2RlbGlzdC5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgTm9kZSB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcm5hbFZhbHVlU3ltYm9sID0gU3ltYm9sKFwiaW50ZXJuYWxEYXRhXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB0cmVlU3RydWN0dXJlU3ltYm9sID0gU3ltYm9sKFwidHJlZVN0cnVjdHVyZVwiKTtcblxuLyoqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGUgaW5zdGFuY2UgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgbmV3IE1vbnN0ZXIuVHlwZXMuTm9kZSgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI2LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHN1bW1hcnkgQSBOb2RlIENsYXNzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0l0ZXJhdGlvbl9wcm90b2NvbHNcbiAqL1xuY2xhc3MgTm9kZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQHBhcmFtIHsqfSBbdmFsdWVdXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpc1tpbnRlcm5hbFZhbHVlU3ltYm9sXSA9IHZhbHVlO1xuXG5cdFx0dGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXSA9IHtcblx0XHRcdHBhcmVudDogbnVsbCxcblx0XHRcdGNoaWxkTm9kZXM6IG5ldyBOb2RlTGlzdCgpLFxuXHRcdFx0bGV2ZWw6IDAsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL25vZGVcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHsqfVxuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsVmFsdWVTeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7Kn1cblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF0gPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuVHlwZXMuTm9kZXxudWxsfVxuXHQgKi9cblx0Z2V0IHBhcmVudCgpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5wYXJlbnQ7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtpbnRlZ2VyfVxuXHQgKi9cblx0Z2V0IGxldmVsKCkge1xuXHRcdHJldHVybiB0aGlzW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmxldmVsO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7Tm9kZUxpc3R9XG5cdCAqL1xuXHRnZXQgY2hpbGROb2RlcygpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7Tm9kZUxpc3R9XG5cdCAqL1xuXHRzZXQgY2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG5cdFx0dGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzID0gdmFsaWRhdGVJbnN0YW5jZShcblx0XHRcdGNoaWxkTm9kZXMsXG5cdFx0XHROb2RlTGlzdCxcblx0XHQpO1xuXHRcdHNldENoaWxkTGV2ZWxBbmRQYXJlbnQuY2FsbCh0aGlzLCB0aGlzLCAxKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLk5vZGV9XG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuXHQgKi9cblx0YXBwZW5kQ2hpbGQobm9kZSkge1xuXHRcdHRoaXNbdHJlZVN0cnVjdHVyZVN5bWJvbF0uY2hpbGROb2Rlcy5hZGQodmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKSk7XG5cdFx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5wYXJlbnQgPSB0aGlzO1xuXG5cdFx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5sZXZlbCA9IHRoaXMubGV2ZWwgKyAxO1xuXHRcdHNldENoaWxkTGV2ZWxBbmRQYXJlbnQuY2FsbCh0aGlzLCBub2RlLCAxKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLk5vZGV9XG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuXHQgKi9cblx0cmVtb3ZlQ2hpbGQobm9kZSkge1xuXHRcdHRoaXNbdHJlZVN0cnVjdHVyZVN5bWJvbF0uY2hpbGROb2Rlcy5yZW1vdmUodmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKSk7XG5cdFx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5wYXJlbnQgPSBudWxsO1xuXG5cdFx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5sZXZlbCA9IDA7XG5cdFx0c2V0Q2hpbGRMZXZlbEFuZFBhcmVudC5jYWxsKHRoaXMsIG5vZGUsIC0xKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aGFzQ2hpbGROb2RlcygpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmxlbmd0aCA+IDA7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Ob2RlfVxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICovXG5cdGhhc0NoaWxkKG5vZGUpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmhhcyhcblx0XHRcdHZhbGlkYXRlSW5zdGFuY2Uobm9kZSwgTm9kZSksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMS4yOC4wXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdGNvbnN0IHBhcnRzID0gW107XG5cdFx0aWYgKHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF0pIHtcblx0XHRcdGxldCBsYWJlbCA9IHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF07XG5cdFx0XHRpZiAoIWlzUHJpbWl0aXZlKGxhYmVsKSlcblx0XHRcdFx0bGFiZWwgPSBKU09OLnN0cmluZ2lmeSh0aGlzW2ludGVybmFsVmFsdWVTeW1ib2xdKTtcblxuXHRcdFx0cGFydHMucHVzaChsYWJlbCk7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0cmV0dXJuIHBhcnRzLmpvaW4oXCJcXG5cIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY291bnQgPSB0aGlzLmNoaWxkTm9kZXMubGVuZ3RoO1xuXHRcdGxldCBjb3VudGVyID0gMDtcblxuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLmNoaWxkTm9kZXMpIHtcblx0XHRcdGNvdW50ZXIrKztcblx0XHRcdGNvbnN0IHByZWZpeCA9IChjb3VudCA9PT0gY291bnRlciA/IFwiXHUyNTE0XCIgOiBcIlx1MjUxQ1wiKS5wYWRTdGFydChcblx0XHRcdFx0MiAqIG5vZGUubGV2ZWwsXG5cdFx0XHRcdFwiIHxcIixcblx0XHRcdCk7XG5cdFx0XHRwYXJ0cy5wdXNoKHByZWZpeCArIG5vZGUudG9TdHJpbmcoKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBhcnRzLmpvaW4oXCJcXG5cIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKiBAcGFyYW0ge2ludH0gb3BlcmFuZFxuICogQHJldHVybiB7c2V0Q2hpbGRMZXZlbEFuZFBhcmVudH1cbiAqL1xuZnVuY3Rpb24gc2V0Q2hpbGRMZXZlbEFuZFBhcmVudChub2RlLCBvcGVyYW5kKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGlmIChub2RlICE9PSB0aGlzKSB7XG5cdFx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5wYXJlbnQgPSB0aGlzO1xuXHR9XG5cblx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG5cdFx0Y2hpbGRbdHJlZVN0cnVjdHVyZVN5bWJvbF0ucGFyZW50ID0gbm9kZTtcblx0XHRjaGlsZFt0cmVlU3RydWN0dXJlU3ltYm9sXS5sZXZlbCA9XG5cdFx0XHRub2RlW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmxldmVsICsgb3BlcmFuZDtcblx0XHRzZXRDaGlsZExldmVsQW5kUGFyZW50LmNhbGwoc2VsZiwgY2hpbGQsIG9wZXJhbmQpO1xuXHR9KTtcblx0cmV0dXJuIHRoaXM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE5vZGUgfSBmcm9tIFwiLi4vdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7IE5vZGVMaXN0IH0gZnJvbSBcIi4uL3R5cGVzL25vZGVsaXN0Lm1qc1wiO1xuaW1wb3J0IHsgYXNzZW1ibGVQYXJ0cyB9IGZyb20gXCIuL2J1aWxkbWFwLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4vZXh0ZW5kLm1qc1wiO1xuXG5leHBvcnQgeyBidWlsZFRyZWUgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcGFyZW50U3ltYm9sID0gU3ltYm9sKFwicGFyZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByb290U3ltYm9sID0gU3ltYm9sKFwicm9vdFwiKTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBidWlsZFRyZWVPcHRpb25zXG4gKiBAcHJvcGVydHkge2FycmF5fSBvcHRpb25zLnJvb3RSZWZlcmVuY2VzPVtudWxsLCB1bmRlZmluZWRdIGRlZmluZXMgdGhlIHZhbHVlcyBmb3IgZWxlbWVudHMgd2l0aG91dCBwYXJlbnRzXG4gKiBAcHJvcGVydHkge01vbnN0ZXIuRGF0YX5leGFtcGxlRmlsdGVyQ2FsbGJhY2t9IG9wdGlvbnMuZmlsdGVyIGZpbHRlcmluZyBvZiB0aGUgdmFsdWVzXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGEgdHJlZSBzdHJ1Y3R1cmUgZnJvbSBhIGdpdmVuIHN1YmplY3QgdXNpbmcgYSBzZWxlY3RvciBhbmQgc3BlY2lmaWVkIElEIGFuZCBwYXJlbnQgSUQga2V5cy5cbiAqXG4gKiBUaGUgYnVpbGRUcmVlIGZ1bmN0aW9uIGlzIGEgcG93ZXJmdWwgdG9vbCBmb3IgY3JlYXRpbmcgdHJlZS1saWtlIGRhdGEgc3RydWN0dXJlcyBmcm9tIHBsYWluIEphdmFTY3JpcHRcbiAqIG9iamVjdHMuIEl0IHRha2VzIGluIGZvdXIgcmVxdWlyZWQgcGFyYW1ldGVyczogdGhlIHN1YmplY3Qgb2JqZWN0IHRoYXQgeW91IHdhbnQgdG8gdHVybiBpbnRvIGEgdHJlZSwgYVxuICogc2VsZWN0b3IgdGhhdCBpZGVudGlmaWVzIHdoaWNoIHBhcnRzIG9mIHRoZSBzdWJqZWN0IHRvIHVzZSB3aGVuIGJ1aWxkaW5nIHRoZSB0cmVlLCBhbmQgdHdvIGtleXNcbiAqIChpZEtleSBhbmQgcGFyZW50SURLZXkpIHRoYXQgc3BlY2lmeSB3aGljaCBwcm9wZXJ0aWVzIGluIHRoZSBzdWJqZWN0IHJlcHJlc2VudCB0aGUgdW5pcXVlIGlkZW50aWZpZXJzXG4gKiBhbmQgcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBub2RlcyBpbiB0aGUgdHJlZS5cbiAqXG4gKiBPcHRpb25hbGx5LCB5b3UgY2FuIGFsc28gcGFzcyBpbiBhbiBvcHRpb25zIG9iamVjdCB0byBmdXJ0aGVyIGNvbmZpZ3VyZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGZ1bmN0aW9uLFxuICogc3VjaCBhcyBzcGVjaWZ5aW5nIHdoaWNoIHZhbHVlcyBzaG91bGQgYmUgdHJlYXRlZCBhcyByb290cyBvZiB0aGUgdHJlZSwgb3IgcHJvdmlkaW5nIGEgY3VzdG9tIGZpbHRlclxuICogZnVuY3Rpb24gdG8gb25seSBpbmNsdWRlIGNlcnRhaW4gbm9kZXMgaW4gdGhlIGZpbmFsIG91dHB1dC5cbiAqXG4gKiBUaGUgYnVpbGRUcmVlIGZ1bmN0aW9uIHdvcmtzIGJ5IGZpcnN0IHVzaW5nIHRoZSBhc3NlbWJsZVBhcnRzIGhlbHBlciBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSByZWxldmFudFxuICogcGFydHMgb2YgdGhlIHN1YmplY3QgYmFzZWQgb24gdGhlIHNlbGVjdG9yLCBhbmQgdGhlbiBpdGVyYXRlcyBvdmVyIHRoZSByZXN1bHRpbmcgbWFwIHRvIGNyZWF0ZSBOb2RlXG4gKiBvYmplY3RzIGFuZCBvcmdhbml6ZSB0aGVtIGludG8gcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcHMgYmFzZWQgb24gdGhlIHZhbHVlcyBvZiB0aGUgaWRLZXkgYW5kIHBhcmVudElES2V5IHByb3BlcnRpZXMuXG4gKlxuICogVGhlIHJlc3VsdGluZyBOb2RlTGlzdCByZXByZXNlbnRzIHRoZSB0cmVlIHN0cnVjdHVyZSwgd2l0aCBlYWNoIE5vZGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsXG4gKiBvYmplY3QgZGF0YSBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgbWV0YWRhdGEgYWJvdXQgaXRzIHBvc2l0aW9uIGluIHRoZSB0cmVlLiBZb3UgY2FuIHRoZW4gdXNlIHRoZSBjaGlsZE5vZGVzXG4gKiBwcm9wZXJ0eSBvZiBlYWNoIE5vZGUgdG8gYWNjZXNzIGl0cyBjaGlsZHJlbiwgb3IgdGhlIHBhcmVudCBwcm9wZXJ0eSB0byBhY2Nlc3MgaXRzIHBhcmVudC5cbiAqXG4gKiBPdmVyYWxsLCB0aGUgYnVpbGRUcmVlIGZ1bmN0aW9uIGlzIGEgZmxleGlibGUgYW5kIHBvd2VyZnVsIHdheSB0byB0cmFuc2Zvcm0gZmxhdCBkYXRhIGludG8gaGllcmFyY2hpY2FsXG4gKiBzdHJ1Y3R1cmVzLCBhbmQgY2FuIGJlIGVzcGVjaWFsbHkgdXNlZnVsIGluIHNjZW5hcmlvcyBzdWNoIGFzIGRpc3BsYXlpbmcgZm9sZGVyIHN0cnVjdHVyZXMgb3JcbiAqIHZpc3VhbGl6aW5nIGNvbXBsZXggZGF0YSByZWxhdGlvbnNoaXBzLlxuICpcbiAqIExldCdzIHNheSB5b3UgaGF2ZSBhbiBhcnJheSBvZiBkYXRhIG9iamVjdHMgcmVwcmVzZW50aW5nIGEgZmlsZSBzeXN0ZW0gZGlyZWN0b3J5IHN0cnVjdHVyZSwgYW5kIHlvdSB3YW50XG4gKiB0byB0dXJuIGl0IGludG8gYSB0cmVlLWxpa2Ugc3RydWN0dXJlIHdoZXJlIGVhY2ggbm9kZSByZXByZXNlbnRzIGEgZm9sZGVyIG9yIGZpbGUsIGFuZCBjaGlsZCBub2Rlc1xuICogcmVwcmVzZW50IHRoZSBjb250ZW50cyBvZiB0aGUgZm9sZGVyOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGNvbnN0IGZpbGVTeXN0ZW0gPSBbXG4gKiAgIHsgaWQ6ICdmb2xkZXIxJywgbmFtZTogJ0ZvbGRlciAxJywgdHlwZTogJ2ZvbGRlcicsIHBhcmVudDogbnVsbCB9LFxuICogICB7IGlkOiAnZmlsZTEnLCBuYW1lOiAnRmlsZSAxJywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdmb2xkZXIxJyB9LFxuICogICB7IGlkOiAnZmlsZTInLCBuYW1lOiAnRmlsZSAyJywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdmb2xkZXIxJyB9LFxuICogICB7IGlkOiAnc3ViZm9sZGVyMScsIG5hbWU6ICdTdWJmb2xkZXIgMScsIHR5cGU6ICdmb2xkZXInLCBwYXJlbnQ6ICdmb2xkZXIxJyB9LFxuICogICB7IGlkOiAnZmlsZTMnLCBuYW1lOiAnRmlsZSAzJywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdzdWJmb2xkZXIxJyB9LFxuICogICB7IGlkOiAnZmlsZTQnLCBuYW1lOiAnRmlsZSA0JywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdzdWJmb2xkZXIxJyB9LFxuICogICB7IGlkOiAnc3ViZm9sZGVyMicsIG5hbWU6ICdTdWJmb2xkZXIgMicsIHR5cGU6ICdmb2xkZXInLCBwYXJlbnQ6ICdmb2xkZXIxJyB9LFxuICogICB7IGlkOiAnZmlsZTUnLCBuYW1lOiAnRmlsZSA1JywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdzdWJmb2xkZXIyJyB9LFxuICogICB7IGlkOiAnZmlsZTYnLCBuYW1lOiAnRmlsZSA2JywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdzdWJmb2xkZXIyJyB9LFxuICogICB7IGlkOiAnZm9sZGVyMicsIG5hbWU6ICdGb2xkZXIgMicsIHR5cGU6ICdmb2xkZXInLCBwYXJlbnQ6IG51bGwgfSxcbiAqICAgeyBpZDogJ2ZpbGU3JywgbmFtZTogJ0ZpbGUgNycsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnZm9sZGVyMicgfSxcbiAqICAgeyBpZDogJ2ZpbGU4JywgbmFtZTogJ0ZpbGUgOCcsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnZm9sZGVyMicgfSxcbiAqICAgeyBpZDogJ3N1YmZvbGRlcjMnLCBuYW1lOiAnU3ViZm9sZGVyIDMnLCB0eXBlOiAnZm9sZGVyJywgcGFyZW50OiAnZm9sZGVyMicgfSxcbiAqICAgeyBpZDogJ2ZpbGU5JywgbmFtZTogJ0ZpbGUgOScsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMycgfSxcbiAqICAgeyBpZDogJ2ZpbGUxMCcsIG5hbWU6ICdGaWxlIDEwJywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdzdWJmb2xkZXIzJyB9LFxuICogXTtcbiAqXG4gKiBjb25zdCB0cmVlID0gYnVpbGRUcmVlKGZpbGVTeXN0ZW0sICdpZCcsICdpZCcsICdwYXJlbnQnLCB7IHJvb3RSZWZlcmVuY2VzOiBbbnVsbF0gfSk7XG4gKlxuICogY29uc29sZS5sb2codHJlZS50b1N0cmluZygpKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBidWlsZFRyZWUgZnVuY3Rpb24gdGFrZXMgaW4gdGhlIGFycmF5IG9mIGRhdGEgb2JqZWN0cywgYXMgd2VsbCBhcyBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzcGVjaWZ5aW5nXG4gKiB0aGUga2V5cyB0byB1c2UgZm9yIGlkZW50aWZ5aW5nIG5vZGVzIGFuZCB0aGVpciBwYXJlbnQtY2hpbGQgcmVsYXRpb25zaGlwcy4gSW4gdGhpcyBleGFtcGxlLCB3ZSB1c2UgdGhlIGlkXG4gKiBrZXkgdG8gaWRlbnRpZnkgbm9kZXMsIGFuZCB0aGUgcGFyZW50IGtleSB0byBzcGVjaWZ5IHRoZSBwYXJlbnQgb2YgZWFjaCBub2RlLlxuICpcbiAqIFRoZSByZXN1bHRpbmcgdHJlZSBvYmplY3QgaXMgYSBuZXN0ZWQgdHJlZSBzdHJ1Y3R1cmUsIHdoZXJlIGVhY2ggbm9kZSBpcyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgZmlsZSBvclxuICogZm9sZGVyLCBhbmQgaGFzIGNoaWxkIG5vZGVzIHJlcHJlc2VudGluZyBpdHMgY29udGVudHMuIFRoZSB0b1N0cmluZyBtZXRob2Qgb2YgdGhlIHRyZWUgb2JqZWN0XG4gKiBjYW4gYmUgdXNlZCB0byBwcmludCBvdXQgdGhlIHRyZWUgaW4gYSByZWFkYWJsZSBmb3JtYXQ6XG4gKlxuICogYGBgbWFya2Rvd25cbiAqIC0gRm9sZGVyIDFcbiAqICAgLSBGaWxlIDFcbiAqICAgLSBGaWxlIDJcbiAqICAgLSBTdWJmb2xkZXIgMVxuICogICAgIC0gRmlsZSAzXG4gKiAgICAgLSBGaWxlIDRcbiAqICAgLSBTdWJmb2xkZXIgMlxuICogICAgIC0gRmlsZSA1XG4gKiAgICAgLSBGaWxlIDZcbiAqIC0gRm9sZGVyIDJcbiAqICAgLSBGaWxlIDdcbiAqICAgLSBGaWxlIDhcbiAqICAgLSBTdWJmb2xkZXIgM1xuICogICAgIC0gRmlsZSA5XG4gKiAgICAgLSBGaWxlIDEwXG4gKiBgYGBcbiAqXG4gKiBAbWVtYmVyb2YgTW9uc3Rlci5EYXRhXG4gKlxuICogQHBhcmFtIHsqfSBzdWJqZWN0IC0gVGhlIG9iamVjdCBvciBhcnJheSB0byBidWlsZCB0aGUgdHJlZSBmcm9tLlxuICogQHBhcmFtIHtzdHJpbmd8TW9uc3Rlci5EYXRhfmV4YW1wbGVTZWxlY3RvckNhbGxiYWNrfSBzZWxlY3RvciAtIEVpdGhlciBhIHN0cmluZyB0byBzcGVjaWZ5IGEgcHJvcGVydHkgb2YgZWFjaCBvYmplY3QgdG8gdXNlIGFzIGEgc2VsZWN0b3IsIG9yIGEgc2VsZWN0b3IgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSBtYXAgb2Ygb2JqZWN0cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZEtleSAtIFRoZSBwcm9wZXJ0eSBrZXkgdG8gdXNlIGFzIHRoZSB1bmlxdWUgSUQgb2YgZWFjaCBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudElES2V5IC0gVGhlIHByb3BlcnR5IGtleSB0byB1c2UgYXMgdGhlIHBhcmVudCBJRCBvZiBlYWNoIG5vZGUuXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gQWRkaXRpb25hbCBvcHRpb25zIHRvIG1vZGlmeSB0aGUgZnVuY3Rpb24gYmVoYXZpb3IuXG4gKiBAcGFyYW0ge0FycmF5PCo+fSBbb3B0aW9ucy5yb290UmVmZXJlbmNlcz1bbnVsbCwgdW5kZWZpbmVkXV0gLSBBbiBhcnJheSBvZiB2YWx1ZXMgdG8gdHJlYXQgYXMgcm9vdCByZWZlcmVuY2VzIHdoZW4gY3JlYXRpbmcgdGhlIHRyZWUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbb3B0aW9ucy5maWx0ZXJdIC0gQSBmaWx0ZXIgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBub2RlLlxuICpcbiAqIEByZXR1cm4geyp9IFRoZSByZXN1bHRpbmcgdHJlZSBzdHJ1Y3R1cmUgYXMgYSBOb2RlTGlzdC5cbiAqXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHNlbGVjdG9yIGlzIG5laXRoZXIgYSBzdHJpbmcgbm9yIGEgZnVuY3Rpb24uXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHRoZSBzZWxlY3RvciBjYWxsYmFjayBtdXN0IHJldHVybiBhIG1hcC5cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb2JqZWN0IGhhcyBubyB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBpZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqXG4gKiBAc2luY2UgMS4yNi4wXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVHJlZShzdWJqZWN0LCBzZWxlY3RvciwgaWRLZXksIHBhcmVudElES2V5LCBvcHRpb25zKSB7XG5cdGNvbnN0IG5vZGVzID0gbmV3IE1hcCgpO1xuXG5cdGlmICghaXNPYmplY3Qob3B0aW9ucykpIHtcblx0XHRvcHRpb25zID0ge307XG5cdH1cblxuXHRvcHRpb25zID0gZXh0ZW5kKFxuXHRcdHt9LFxuXHRcdHtcblx0XHRcdHJvb3RSZWZlcmVuY2VzOiBbbnVsbCwgdW5kZWZpbmVkXSxcblx0XHRcdGZpbHRlcjogdW5kZWZpbmVkLFxuXHRcdH0sXG5cdFx0b3B0aW9ucyxcblx0KTtcblxuXHRjb25zdCBmaWx0ZXIgPSBvcHRpb25zPy5maWx0ZXI7XG5cdGxldCByb290UmVmZXJlbmNlcyA9IG9wdGlvbnMucm9vdFJlZmVyZW5jZXM7XG5cdGlmICghaXNBcnJheShyb290UmVmZXJlbmNlcykpIHtcblx0XHRyb290UmVmZXJlbmNlcyA9IFtyb290UmVmZXJlbmNlc107XG5cdH1cblxuXHRjb25zdCBjaGlsZE1hcCA9IGFzc2VtYmxlUGFydHMoc3ViamVjdCwgc2VsZWN0b3IsIGZpbHRlciwgZnVuY3Rpb24gKG8sIGssIG0pIHtcblx0XHRjb25zdCBrZXkgPSBvPy5baWRLZXldO1xuXHRcdGxldCByZWYgPSBvPy5bcGFyZW50SURLZXldO1xuXHRcdGlmIChyb290UmVmZXJlbmNlcy5pbmRleE9mKHJlZikgIT09IC0xKSByZWYgPSByb290U3ltYm9sO1xuXG5cdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgb2JqZWN0IGhhcyBubyB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBpZFwiKTtcblx0XHR9XG5cblx0XHRvW3BhcmVudFN5bWJvbF0gPSByZWY7XG5cblx0XHRjb25zdCBub2RlID0gbmV3IE5vZGUobyk7XG5cdFx0dGhpcy5oYXMocmVmKVxuXHRcdFx0PyB0aGlzLmdldChyZWYpLmFkZChub2RlKVxuXHRcdFx0OiB0aGlzLnNldChyZWYsIG5ldyBOb2RlTGlzdCgpLmFkZChub2RlKSk7XG5cdFx0bm9kZXMuc2V0KGtleSwgbm9kZSk7XG5cdH0pO1xuXG5cdG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRjb25zdCBpZCA9IG5vZGU/LltcInZhbHVlXCJdPy5baWRLZXldO1xuXG5cdFx0aWYgKGNoaWxkTWFwLmhhcyhpZCkpIHtcblx0XHRcdG5vZGUuY2hpbGROb2RlcyA9IGNoaWxkTWFwLmdldChpZCk7XG5cdFx0XHRjaGlsZE1hcC5kZWxldGUoaWQpO1xuXHRcdH1cblx0fSk7XG5cblx0Y29uc3QgbGlzdCA9IG5ldyBOb2RlTGlzdCgpO1xuXG5cdGNoaWxkTWFwLmZvckVhY2goKHMpID0+IHtcblx0XHRpZiAocyBpbnN0YW5jZW9mIFNldCkge1xuXHRcdFx0cy5mb3JFYWNoKChuKSA9PiB7XG5cdFx0XHRcdGxpc3QuYWRkKG4pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gbGlzdDtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc0luc3RhbmNlIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSBcIi4vbm9kZS5tanNcIjtcbmltcG9ydCB7IE5vZGVMaXN0IH0gZnJvbSBcIi4vbm9kZWxpc3QubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IE5vZGVSZWN1cnNpdmVJdGVyYXRvciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpc05vZGVMaXN0U3ltYm9sID0gU3ltYm9sKFwiaXNOb2RlTGlzdFwiKTtcblxuLyoqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGUgaW5zdGFuY2UgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgbmV3IE1vbnN0ZXIuVHlwZXMuTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKClgLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9ub2RlcmVjdXJzaXZlaXRlcmF0b3IubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI2LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHN1bW1hcnkgQW4gaXRlcmF0b3IgdG8gcnVuIHJlY3Vyc2l2ZWx5IHRocm91Z2ggYSB0cmVlIG9mIG5vZGVzXG4gKi9cbmNsYXNzIE5vZGVSZWN1cnNpdmVJdGVyYXRvciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQHBhcmFtIHtOb2RlfSBbZGF0YV1cblx0ICovXG5cdGNvbnN0cnVjdG9yKG5vZGUpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpc1tpc05vZGVMaXN0U3ltYm9sXSA9IGZhbHNlO1xuXG5cdFx0Ly8gaXRlcmF0b3IgaXMgYSBub2RlbGlzdFxuXHRcdGlmIChpc0luc3RhbmNlKG5vZGUsIE5vZGVMaXN0KSkge1xuXHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBub2RlO1xuXHRcdFx0bm9kZSA9IG5ldyBOb2RlKCk7XG5cdFx0XHRub2RlLmNoaWxkTm9kZXMgPSBjaGlsZHJlbjtcblx0XHRcdHRoaXNbaXNOb2RlTGlzdFN5bWJvbF0gPSB0cnVlO1xuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gdmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09wZXJhdG9ycy95aWVsZFxuXHQgKi9cblx0W1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiogKCkge1xuXHRcdC8qKlxuXHRcdCAqIFRoZSBlbmQgb2YgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiBpcyByZWFjaGVkLiBJbiB0aGlzIGNhc2UsIGV4ZWN1dGlvbiBvZiB0aGUgZ2VuZXJhdG9yXG5cdFx0ICogZW5kcyBhbmQgYW4gSXRlcmF0b3JSZXN1bHQgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciBpbiB3aGljaCB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkIGFuZCBkb25lIGlzIHRydWUuXG5cdFx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PcGVyYXRvcnMveWllbGRcblx0XHQgKi9cblx0XHRpZiAodGhpc1tpbnRlcm5hbFN5bWJvbF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGl0ZXJhdG9yIGlzIGEgbm9kZWxpc3QgYW5kIHRoZSBtYWluIG5vZGUgaXMgb25seSBhIHBsYWNlaG9sZGVyXG5cdFx0aWYgKHRoaXNbaXNOb2RlTGlzdFN5bWJvbF0gIT09IHRydWUpIHtcblx0XHRcdHlpZWxkIHRoaXNbaW50ZXJuYWxTeW1ib2xdO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXS5oYXNDaGlsZE5vZGVzKCkpIHtcblx0XHRcdGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5jaGlsZE5vZGVzO1xuXG5cdFx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgY2hpbGROb2Rlcykge1xuXHRcdFx0XHR5aWVsZCogbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihub2RlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm47XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuVHlwZXMuTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yfVxuXHQgKi9cblx0Zm9yRWFjaChjYWxsYmFjaykge1xuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzKSB7XG5cdFx0XHRjYWxsYmFjayhub2RlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBUcmVlU2VsZWN0U3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgVHJlZVNlbGVjdFN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRUcmVlU2VsZWN0U3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciB0cmVlc2VsZWN0IHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9YmFkZ2Vde2Rpc3BsYXk6aW5saW5lLWZsZXh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl17ZGlzcGxheTpmbGV4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1zdGF0ZT1vcGVuXVtkYXRhLW1vbnN0ZXItaGFzLWNoaWxkcmVuPXRydWVdIFtkYXRhLW1vbnN0ZXItcm9sZT1mb2xkZXItaGFuZGxlcl17Y29udGVudDp1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDsgdXRmOCwgPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHdpZHRoPVxcXCIxNlxcXCIgaGVpZ2h0PVxcXCIxNlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiPjxwYXRoIGQ9XFxcIk0yLjUgMGMtLjE2NiAwLS4zMy4wMTYtLjQ4Ny4wNDhsLjE5NC45OEExLjUxIDEuNTEgMCAwIDEgMi41IDFoLjQ1OFYwSDIuNXptMi4yOTIgMGgtLjkxN3YxaC45MTdWMHptMS44MzMgMGgtLjkxN3YxaC45MTdWMHptMS44MzMgMGgtLjkxNnYxaC45MTZWMHptMS44MzQgMGgtLjkxN3YxaC45MTdWMHptMS44MzMgMGgtLjkxN3YxaC45MTdWMHpNMTMuNSAwaC0uNDU4djFoLjQ1OGMuMSAwIC4xOTkuMDEuMjkzLjAyOWwuMTk0LS45ODFBMi41MSAyLjUxIDAgMCAwIDEzLjUgMHptMi4wNzkgMS4xMWEyLjUxMSAyLjUxMSAwIDAgMC0uNjktLjY4OWwtLjU1Ni44MzFjLjE2NC4xMS4zMDUuMjUxLjQxNS40MTVsLjgzLS41NTZ6TTEuMTEuNDIxYTIuNTExIDIuNTExIDAgMCAwLS42ODkuNjlsLjgzMS41NTZjLjExLS4xNjQuMjUxLS4zMDUuNDE1LS40MTVMMS4xMS40MjJ6TTE2IDIuNWMwLS4xNjYtLjAxNi0uMzMtLjA0OC0uNDg3bC0uOTguMTk0Yy4wMTguMDk0LjAyOC4xOTIuMDI4LjI5M3YuNDU4aDFWMi41ek0uMDQ4IDIuMDEzQTIuNTEgMi41MSAwIDAgMCAwIDIuNXYuNDU4aDFWMi41YzAtLjEuMDEtLjE5OS4wMjktLjI5M2wtLjk4MS0uMTk0ek0wIDMuODc1di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXpNMCA1LjcwOHYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6TTAgNy41NDJ2LjkxNmgxdi0uOTE2SDB6bTE1IC45MTZoMXYtLjkxNmgtMXYuOTE2ek0wIDkuMzc1di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXptLTE2IC45MTZ2LjkxN2gxdi0uOTE3SDB6bTE2IC45MTd2LS45MTdoLTF2LjkxN2gxem0tMTYgLjkxN3YuNDU4YzAgLjE2Ni4wMTYuMzMuMDQ4LjQ4N2wuOTgtLjE5NEExLjUxIDEuNTEgMCAwIDEgMSAxMy41di0uNDU4SDB6bTE2IC40NTh2LS40NThoLTF2LjQ1OGMwIC4xLS4wMS4xOTktLjAyOS4yOTNsLjk4MS4xOTRjLjAzMi0uMTU4LjA0OC0uMzIuMDQ4LS40ODd6TS40MjEgMTQuODljLjE4My4yNzIuNDE3LjUwNi42OS42ODlsLjU1Ni0uODMxYTEuNTEgMS41MSAwIDAgMS0uNDE1LS40MTVsLS44My41NTZ6bTE0LjQ2OS42ODljLjI3Mi0uMTgzLjUwNi0uNDE3LjY4OS0uNjlsLS44MzEtLjU1NmMtLjExLjE2NC0uMjUxLjMwNS0uNDE1LjQxNWwuNTU2Ljgzem0tMTIuODc3LjM3M2MuMTU4LjAzMi4zMi4wNDguNDg3LjA0OGguNDU4di0xSDIuNWMtLjEgMC0uMTk5LS4wMS0uMjkzLS4wMjlsLS4xOTQuOTgxek0xMy41IDE2Yy4xNjYgMCAuMzMtLjAxNi40ODctLjA0OGwtLjE5NC0uOThBMS41MSAxLjUxIDAgMCAxIDEzLjUgMTVoLS40NTh2MWguNDU4em0tOS42MjUgMGguOTE3di0xaC0uOTE3djF6bTEuODMzIDBoLjkxN3YtMWgtLjkxN3Yxem0xLjgzNCAwaC45MTZ2LTFoLS45MTZ2MXptMS44MzMgMGguOTE3di0xaC0uOTE3djF6bTEuODMzIDBoLjkxN3YtMWgtLjkxN3Yxek00LjUgNy41YS41LjUgMCAwIDAgMCAxaDdhLjUuNSAwIDAgMCAwLTFoLTd6XFxcIi8+PC9zdmc+Jyk7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTNweDttYXJnaW4tcmlnaHQ6OHB4O3dpZHRoOjEzcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLXN0YXRlPWNsb3NlXVtkYXRhLW1vbnN0ZXItaGFzLWNoaWxkcmVuPXRydWVdIFtkYXRhLW1vbnN0ZXItcm9sZT1mb2xkZXItaGFuZGxlcl17Y29udGVudDp1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDsgdXRmOCwgPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHdpZHRoPVxcXCIxNlxcXCIgaGVpZ2h0PVxcXCIxNlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiPjxwYXRoIGQ9XFxcIk0yLjUgMGMtLjE2NiAwLS4zMy4wMTYtLjQ4Ny4wNDhsLjE5NC45OEExLjUxIDEuNTEgMCAwIDEgMi41IDFoLjQ1OFYwSDIuNXptMi4yOTIgMGgtLjkxN3YxaC45MTdWMHptMS44MzMgMGgtLjkxN3YxaC45MTdWMHptMS44MzMgMGgtLjkxNnYxaC45MTZWMHptMS44MzQgMGgtLjkxN3YxaC45MTdWMHptMS44MzMgMGgtLjkxN3YxaC45MTdWMHpNMTMuNSAwaC0uNDU4djFoLjQ1OGMuMSAwIC4xOTkuMDEuMjkzLjAyOWwuMTk0LS45ODFBMi41MSAyLjUxIDAgMCAwIDEzLjUgMHptMi4wNzkgMS4xMWEyLjUxMSAyLjUxMSAwIDAgMC0uNjktLjY4OWwtLjU1Ni44MzFjLjE2NC4xMS4zMDUuMjUxLjQxNS40MTVsLjgzLS41NTZ6TTEuMTEuNDIxYTIuNTExIDIuNTExIDAgMCAwLS42ODkuNjlsLjgzMS41NTZjLjExLS4xNjQuMjUxLS4zMDUuNDE1LS40MTVMMS4xMS40MjJ6TTE2IDIuNWMwLS4xNjYtLjAxNi0uMzMtLjA0OC0uNDg3bC0uOTguMTk0Yy4wMTguMDk0LjAyOC4xOTIuMDI4LjI5M3YuNDU4aDFWMi41ek0uMDQ4IDIuMDEzQTIuNTEgMi41MSAwIDAgMCAwIDIuNXYuNDU4aDFWMi41YzAtLjEuMDEtLjE5OS4wMjktLjI5M2wtLjk4MS0uMTk0ek0wIDMuODc1di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXpNMCA1LjcwOHYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6TTAgNy41NDJ2LjkxNmgxdi0uOTE2SDB6bTE1IC45MTZoMXYtLjkxNmgtMXYuOTE2ek0wIDkuMzc1di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXptLTE2IC45MTZ2LjkxN2gxdi0uOTE3SDB6bTE2IC45MTd2LS45MTdoLTF2LjkxN2gxem0tMTYgLjkxN3YuNDU4YzAgLjE2Ni4wMTYuMzMuMDQ4LjQ4N2wuOTgtLjE5NEExLjUxIDEuNTEgMCAwIDEgMSAxMy41di0uNDU4SDB6bTE2IC40NTh2LS40NThoLTF2LjQ1OGMwIC4xLS4wMS4xOTktLjAyOS4yOTNsLjk4MS4xOTRjLjAzMi0uMTU4LjA0OC0uMzIuMDQ4LS40ODd6TS40MjEgMTQuODljLjE4My4yNzIuNDE3LjUwNi42OS42ODlsLjU1Ni0uODMxYTEuNTEgMS41MSAwIDAgMS0uNDE1LS40MTVsLS44My41NTZ6bTE0LjQ2OS42ODljLjI3Mi0uMTgzLjUwNi0uNDE3LjY4OS0uNjlsLS44MzEtLjU1NmMtLjExLjE2NC0uMjUxLjMwNS0uNDE1LjQxNWwuNTU2Ljgzem0tMTIuODc3LjM3M2MuMTU4LjAzMi4zMi4wNDguNDg3LjA0OGguNDU4di0xSDIuNWMtLjEgMC0uMTk5LS4wMS0uMjkzLS4wMjlsLS4xOTQuOTgxek0xMy41IDE2Yy4xNjYgMCAuMzMtLjAxNi40ODctLjA0OGwtLjE5NC0uOThBMS41MSAxLjUxIDAgMCAxIDEzLjUgMTVoLS40NTh2MWguNDU4em0tOS42MjUgMGguOTE3di0xaC0uOTE3djF6bTEuODMzIDBoLjkxN3YtMWgtLjkxN3Yxem0xLjgzNC0xdjFoLjkxNnYtMWgtLjkxNnptMS44MzMgMWguOTE3di0xaC0uOTE3djF6bTEuODMzIDBoLjkxN3YtMWgtLjkxN3Yxek04LjUgNC41YS41LjUgMCAwIDAtMSAwdjNoLTNhLjUuNSAwIDAgMCAwIDFoM3YzYS41LjUgMCAwIDAgMSAwdi0zaDNhLjUuNSAwIDAgMCAwLTFoLTN2LTN6XFxcIi8+PC9zdmc+Jyk7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTNweDttYXJnaW4tcmlnaHQ6OHB4O3dpZHRoOjEzcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9aGlkZGVuXXtkaXNwbGF5Om5vbmV9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9dmlzaWJsZV17ZGlzcGxheTpmbGV4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1oYXMtY2hpbGRyZW49ZmFsc2VdIFtkYXRhLW1vbnN0ZXItcm9sZT1mb2xkZXItaGFuZGxlcl17Y29udGVudDpcXFwiIFxcXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTNweDttYXJnaW4tcmlnaHQ6OHB4O3dpZHRoOjEzcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiMFxcXCJde2Rpc3BsYXk6ZmxleDttYXJnaW46MH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaW50ZW5kPVxcXCIxXFxcIl17bWFyZ2luOjAgMCAwIDIwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiMlxcXCJde21hcmdpbjowIDAgMCA0MHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjNcXFwiXXttYXJnaW46MCAwIDAgNjBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaW50ZW5kPVxcXCI0XFxcIl17bWFyZ2luOjAgMCAwIDgwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiNVxcXCJde21hcmdpbjowIDAgMCAxMDBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaW50ZW5kPVxcXCI2XFxcIl17bWFyZ2luOjAgMCAwIDExMHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjdcXFwiXXttYXJnaW46MCAwIDAgMTIwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiOFxcXCJde21hcmdpbjowIDAgMCAxMzBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItZmlsdGVyZWQ9dHJ1ZV17ZGlzcGxheTpub25lfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGJ1aWxkVHJlZSB9IGZyb20gXCIuLi8uLi9kYXRhL2J1aWxkdHJlZS5tanNcIjtcbmltcG9ydCB7IGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUgfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfUk9MRSxcblx0QVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCwgZmlyZUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBGb3JtYXR0ZXIgfSBmcm9tIFwiLi4vLi4vdGV4dC9mb3JtYXR0ZXIubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE5vZGUgfSBmcm9tIFwiLi4vLi4vdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7IE5vZGVSZWN1cnNpdmVJdGVyYXRvciB9IGZyb20gXCIuLi8uLi90eXBlcy9ub2RlcmVjdXJzaXZlaXRlcmF0b3IubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0ZPUk1fVVJMLCBBVFRSSUJVVEVfSU5URU5EIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSBcIi4vc2VsZWN0Lm1qc1wiO1xuaW1wb3J0IHsgU2VsZWN0U3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvc2VsZWN0Lm1qc1wiO1xuaW1wb3J0IHsgVHJlZVNlbGVjdFN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3RyZWUtc2VsZWN0Lm1qc1wiO1xuXG5leHBvcnQgeyBUcmVlU2VsZWN0LCBmb3JtYXRIaWVyYXJjaGljYWxTZWxlY3Rpb24gfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWxOb2Rlc1N5bWJvbCA9IFN5bWJvbChcImludGVybmFsTm9kZXNcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGtleUV2ZW50SGFuZGxlciA9IFN5bWJvbChcImtleUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgY3JlYXRlcyBhIHNlbGVjdCBlbGVtZW50IHdpdGggYSB2YXJpZXR5IG9mIG9wdGlvbnMuXG4gKiBJdCBzdXBwb3J0cyBmaWx0ZXJpbmcsIGxvY2FsIGFuZCByZW1vdGUsIG11bHRpcGxlIHNlbGVjdGlvbiBhbmQgaGFzIGFcbiAqIHRlbXBsYXRlIHN5c3RlbSBmb3IgZGlzcGxheWluZyB0aGUgb3B0aW9ucy5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL3RyZWVzZWxlY3QucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5XG4gKiBhcyB3ZWxsIGFzIFtwb29wZXJqc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIGA8bW9uc3Rlci1zZWxlY3QgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItc2VsZWN0Jyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItc2VsZWN0PjwvbW9uc3Rlci1zZWxlY3Q+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IHtUcmVlU2VsZWN0fSBmcm9tICdAc2NodWthaS9jb21wb25lbnQtZm9ybS9zb3VyY2UvdHJlZXNlbGVjdC5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRyZWUtc2VsZWN0Jyk7XG4gKiBgYGBcbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uL2V4YW1wbGUvdHJlZS1zZWxlY3QubWpzXG4gKiBAc3RhcnR1bWwgdHJlZXNlbGVjdC5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEN1c3RvbUNvbnRyb2xcbiAqIEN1c3RvbUNvbnRyb2wgPHwtLSBTZWxlY3RcbiAqIFNlbGVjdCA8fC0tIFRyZWVTZWxlY3RcbiAqIEBlbmR1bWxcbiAqXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzdW1tYXJ5IEEgaGlnaGx5IGNvbmZpZ3VyYWJsZSBzZWxlY3QgY29udHJvbFxuICovXG5jbGFzcyBUcmVlU2VsZWN0IGV4dGVuZHMgU2VsZWN0IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL2NvbXBvbmVudC1mb3JtL3RyZWUtc2VsZWN0QEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBodG1sIHRhZyB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQGV4dGVuZHMgTW9uc3Rlci5Db21wb25lbnRzLkZvcm0uU2VsZWN0XG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtYXBwaW5nLnJvb3RSZWZlcmVuY2VzPVsnMCcsIHVuZGVmaW5lZCwgbnVsbF1cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcuaWRUZW1wbGF0ZT1pZFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gbWFwcGluZy5wYXJlbnRUZW1wbGF0ZT1wYXJlbnRcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcuc2VsZWN0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmb3JtYXR0ZXJcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZvcm1hdHRlci5zZXBhcmF0b3I9XCIgLyBcIlxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHtcblx0XHRcdFx0bWFwcGluZzoge1xuXHRcdFx0XHRcdHJvb3RSZWZlcmVuY2VzOiBbXCIwXCIsIHVuZGVmaW5lZCwgbnVsbF0sXG5cdFx0XHRcdFx0aWRUZW1wbGF0ZTogXCJpZFwiLFxuXHRcdFx0XHRcdHBhcmVudFRlbXBsYXRlOiBcInBhcmVudFwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRmb3JtYXR0ZXI6IHtcblx0XHRcdFx0XHRzZWxlY3Rpb246IGZvcm1hdEhpZXJhcmNoaWNhbFNlbGVjdGlvbixcblx0XHRcdFx0XHRzZXBhcmF0b3I6IFwiIC8gXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0aW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzLmNhbGwodGhpcyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItdHJlZS1zZWxlY3RcIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1NlbGVjdFN0eWxlU2hlZXQsIFRyZWVTZWxlY3RTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbXBvcnQgU2VsZWN0IE9wdGlvbnMgZnJvbSBkYXRhc2V0XG5cdCAqIE5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHRoZSBjb250cm9sIGRlZmF1bHRzL29wdGlvbnNcblx0ICpcblx0ICogQHNpbmNlIDAuMTYuMFxuXHQgKiBAcGFyYW0ge2FycmF5fG9iamVjdHxNYXB8U2V0fSBkYXRhXG5cdCAqIEByZXR1cm4ge1NlbGVjdH1cblx0ICogQHRocm93cyB7RXJyb3J9IG1hcCBpcyBub3QgaXRlcmFibGVcblx0ICovXG5cdGltcG9ydE9wdGlvbnMoZGF0YSkgeztcblxuXHRcdHRoaXNbaW50ZXJuYWxOb2Rlc1N5bWJvbF0gPSBuZXcgTWFwKCk7XG5cblx0XHRjb25zdCBtYXBwaW5nT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZ1wiLCB7fSk7XG5cblx0XHRjb25zdCBmaWx0ZXIgPSBtYXBwaW5nT3B0aW9ucz8uW1wiZmlsdGVyXCJdO1xuXHRcdGNvbnN0IHJvb3RSZWZlcmVuY2VzID0gbWFwcGluZ09wdGlvbnM/LltcInJvb3RSZWZlcmVuY2VzXCJdO1xuXG5cdFx0Y29uc3QgaWQgPSB0aGlzLmdldE9wdGlvbihcIm1hcHBpbmcuaWRUZW1wbGF0ZVwiLCBcImlkXCIpO1xuXHRcdGNvbnN0IHBhcmVudElEID0gdGhpcy5nZXRPcHRpb24oXCJtYXBwaW5nLnBhcmVudFRlbXBsYXRlXCIsIFwicGFyZW50XCIpO1xuXG5cdFx0Y29uc3Qgc2VsZWN0b3IgPSBtYXBwaW5nT3B0aW9ucz8uW1wic2VsZWN0b3JcIl07XG5cblx0XHRjb25zdCBub2RlcyA9IGJ1aWxkVHJlZShkYXRhLCBzZWxlY3RvciwgaWQsIHBhcmVudElELCB7XG5cdFx0XHRmaWx0ZXIsXG5cdFx0XHRyb290UmVmZXJlbmNlcyxcblx0XHR9KTtcblxuXHRcdGNvbnN0IG9wdGlvbnMgPSBbXTtcblx0XHRmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcblx0XHRcdGNvbnN0IGl0ZXJhdG9yID0gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihub2RlKTtcblx0XHRcdGZvciAoY29uc3QgbiBvZiBpdGVyYXRvcikge1xuXHRcdFx0XHRjb25zdCBmb3JtYXR0ZWRWYWx1ZXMgPSBmb3JtYXRLZXlMYWJlbC5jYWxsKHRoaXMsIG4pO1xuXG5cdFx0XHRcdGNvbnN0IGxhYmVsID0gZm9ybWF0dGVkVmFsdWVzLmxhYmVsO1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGZvcm1hdHRlZFZhbHVlcy52YWx1ZTtcblx0XHRcdFx0Y29uc3QgaW50ZW5kID0gbi5sZXZlbDtcblxuXHRcdFx0XHRjb25zdCB2aXNpYmlsaXR5ID0gaW50ZW5kID4gMCA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcblx0XHRcdFx0Y29uc3Qgc3RhdGUgPSBcImNsb3NlXCI7XG5cblx0XHRcdFx0dGhpc1tpbnRlcm5hbE5vZGVzU3ltYm9sXS5zZXQodmFsdWUsIG4pO1xuXG5cdFx0XHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdFx0bGFiZWwsXG5cdFx0XHRcdFx0aW50ZW5kLFxuXHRcdFx0XHRcdHN0YXRlLFxuXHRcdFx0XHRcdHZpc2liaWxpdHksXG5cdFx0XHRcdFx0W1wiaGFzLWNoaWxkcmVuXCJdOiBuLmhhc0NoaWxkTm9kZXMoKSxcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5zZXRPcHRpb24oXCJvcHRpb25zXCIsIG9wdGlvbnMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlNlbGVjdH1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdEV2ZW50aGFuZGxlci5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBldmVudFxuICovXG5mdW5jdGlvbiBoYW5kbGVPcHRpb25LZXlib2FyZEV2ZW50cyhldmVudCkgeztcblxuXHRzd2l0Y2ggKGV2ZW50Py5bXCJjb2RlXCJdKSB7XG5cdFx0Y2FzZSBcIkFycm93TGVmdFwiOlxuXHRcdFx0Y2xvc2VPck9wZW5DdXJyZW50T3B0aW9uLmNhbGwodGhpcywgZXZlbnQsIFwiY2xvc2VcIik7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkFycm93UmlnaHRcIjpcblx0XHRcdGNsb3NlT3JPcGVuQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIGV2ZW50LCBcIm9wZW5cIik7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtldmVudH0gZXZlbnRcbiAqL1xuZnVuY3Rpb24gY2xvc2VPck9wZW5DdXJyZW50T3B0aW9uKGV2ZW50LCBtb2RlKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZXZlbnQsIEV2ZW50KTtcblxuXHRpZiAodHlwZW9mIGV2ZW50LmNvbXBvc2VkUGF0aCAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgZXZlbnRcIik7XG5cdH1cblxuXHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cdGNvbnN0IG9wdGlvbk5vZGUgPSBwYXRoLnNoaWZ0KCk7XG5cblx0Y29uc3Qgc3RhdGUgPSBvcHRpb25Ob2RlLmdldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1zdGF0ZVwiKTtcblx0aWYgKHN0YXRlICE9PSBtb2RlKSB7XG5cdFx0Y29uc3QgaGFuZGxlciA9IG9wdGlvbk5vZGUucXVlcnlTZWxlY3Rvcihcblx0XHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWZvbGRlci1oYW5kbGVyXVwiLFxuXHRcdCk7XG5cdFx0aWYgKGhhbmRsZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0ZmlyZUV2ZW50KGhhbmRsZXIsIFwiY2xpY2tcIik7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICogQHJldHVybiB7YXJyYXk8bGFiZWwsIHZhbHVlPn1cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZm9ybWF0S2V5TGFiZWwobm9kZSkgeztcblx0dmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKTtcblxuXHRjb25zdCBsYWJlbCA9IG5ldyBGb3JtYXR0ZXIobm9kZS52YWx1ZSkuZm9ybWF0KFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZy5sYWJlbFRlbXBsYXRlXCIsIFwiXCIpLFxuXHQpO1xuXHRjb25zdCB2YWx1ZSA9IG5ldyBGb3JtYXR0ZXIobm9kZS52YWx1ZSkuZm9ybWF0KFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZy52YWx1ZVRlbXBsYXRlXCIsIFwiXCIpLFxuXHQpO1xuXG5cdHJldHVybiB7XG5cdFx0dmFsdWUsXG5cdFx0bGFiZWwsXG5cdH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVHJlZUxhYmVscyh2YWx1ZSkgeztcblx0bGV0IG5vZGUgPSB0aGlzW2ludGVybmFsTm9kZXNTeW1ib2xdLmdldCh2YWx1ZSk7XG5cdGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcblx0XHRub2RlID0gdGhpc1tpbnRlcm5hbE5vZGVzU3ltYm9sXS5nZXQocGFyc2VJbnQodmFsdWUpKTtcblx0fVxuXG5cdGNvbnN0IHBhcnRzID0gW107XG5cblx0aWYgKG5vZGUgaW5zdGFuY2VvZiBOb2RlKSB7XG5cdFx0bGV0IHB0ciA9IG5vZGU7XG5cdFx0d2hpbGUgKHB0cikge1xuXHRcdFx0Y29uc3QgZm9ybWF0dGVkVmFsdWVzID0gZm9ybWF0S2V5TGFiZWwuY2FsbCh0aGlzLCBwdHIpO1xuXHRcdFx0cGFydHMudW5zaGlmdChmb3JtYXR0ZWRWYWx1ZXMubGFiZWwpO1xuXHRcdFx0cHRyID0gcHRyLnBhcmVudDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcGFydHM7XG59XG5cbi8qKlxuICogVGhpcyBmb3JtYXR0ZXIgY2FuIGZvcm1hdCBhIGxhYmVsIGhpZXJhcmNoaWNhbGx5LlxuICogVGhlIG9wdGlvbiBgZm9ybWF0dGVyLnNlcGFyYXRvcmAgZGV0ZXJtaW5lcyB0aGUgc2VwYXJhdG9yLlxuICpcbiAqIGBgYFxuICogYSAvIGIgLyBjXG4gKiBgYGBcbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBwYXNzZWQgYXMgYXJndW1lbnQgb2YgdGhlIG9wdGlvbiBgZm9ybWF0dGVyLnNlbGVjdGlvbjpgLlxuICpcbiAqIEBzaW5jZSAxLjkuMFxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdEhpZXJhcmNoaWNhbFNlbGVjdGlvbih2YWx1ZSkgeztcblx0cmV0dXJuIGJ1aWxkVHJlZUxhYmVsc1xuXHRcdC5jYWxsKHRoaXMsIHZhbHVlKVxuXHRcdC5qb2luKHRoaXMuZ2V0T3B0aW9uKFwiZm9ybWF0dGVyLnNlcGFyYXRvclwiLCBcIiAvIFwiKSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG9wZW5PcHRpb25FdmVudEhhbmRsZXIgPSBTeW1ib2woXCJvcGVuT3B0aW9uRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRoYW5kbGVyKCkgeztcblxuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW29wZW5PcHRpb25FdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdFwiZm9sZGVyLWhhbmRsZXJcIixcblx0XHQpO1xuXHRcdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBjb250YWluZXIgPSBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGVsZW1lbnQsIEFUVFJJQlVURV9ST0xFLCBcIm9wdGlvblwiKTtcblx0XHRjb25zdCBpbmRleCA9IGNvbnRhaW5lclxuXHRcdFx0LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFKVxuXHRcdFx0LnNwbGl0KFwiLVwiKVxuXHRcdFx0LnBvcCgpO1xuXG5cdFx0Y29uc3QgY3VycmVudFN0YXRlID0gdGhpcy5nZXRPcHRpb24oYG9wdGlvbnMuJHtpbmRleH0uc3RhdGVgKTtcblxuXHRcdGNvbnN0IG5ld1N0YXRlID0gY3VycmVudFN0YXRlID09PSBcImNsb3NlXCIgPyBcIm9wZW5cIiA6IFwiY2xvc2VcIjtcblx0XHR0aGlzLnNldE9wdGlvbihgb3B0aW9ucy4ke2luZGV4fS5zdGF0ZWAsIG5ld1N0YXRlKTtcblxuXHRcdGNvbnN0IG5ld1Zpc2liaWxpdHkgPSBuZXdTdGF0ZSA9PT0gXCJvcGVuXCIgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCI7XG5cblx0XHRpZiAoY29udGFpbmVyLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfSU5URU5EKSkge1xuXHRcdFx0Y29uc3QgaW50ZW5kID0gY29udGFpbmVyLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfSU5URU5EKTtcblxuXHRcdFx0bGV0IHJlZiA9IGNvbnRhaW5lci5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdFx0XHRjb25zdCBjaGlsZEludGVuZCA9IHBhcnNlSW50KGludGVuZCkgKyAxO1xuXG5cdFx0XHRjb25zdCBjbXAgPSAoYSwgYikgPT4ge1xuXHRcdFx0XHRpZiAobmV3U3RhdGUgPT09IFwib3BlblwiKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGEgPT09IGI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gYSA+PSBiO1xuXHRcdFx0fTtcblxuXHRcdFx0d2hpbGUgKFxuXHRcdFx0XHRyZWY/Lmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfSU5URU5EKSAmJlxuXHRcdFx0XHRjbXAocGFyc2VJbnQocmVmLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfSU5URU5EKSksIGNoaWxkSW50ZW5kKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IHJlZkluZGV4ID0gcmVmXG5cdFx0XHRcdFx0LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFKVxuXHRcdFx0XHRcdC5zcGxpdChcIi1cIilcblx0XHRcdFx0XHQucG9wKCk7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKGBvcHRpb25zLiR7cmVmSW5kZXh9LnZpc2liaWxpdHlgLCBuZXdWaXNpYmlsaXR5KTtcblxuXHRcdFx0XHRpZiAobmV3U3RhdGUgPT09IFwiY2xvc2VcIikge1xuXHRcdFx0XHRcdHRoaXMuc2V0T3B0aW9uKGBvcHRpb25zLiR7cmVmSW5kZXh9LnN0YXRlYCwgXCJjbG9zZVwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJlZiA9IHJlZi5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHRoaXNba2V5RXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblx0XHRjb25zdCBlbGVtZW50ID0gcGF0aD8uWzBdO1xuXG5cdFx0bGV0IHJvbGU7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpKSB7XG5cdFx0XHRcdHJvbGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSk7XG5cdFx0XHR9IGVsc2UgaWYgKGVsZW1lbnQgPT09IHRoaXMpIHtcblx0XHRcdFx0c2hvdy5jYWxsKHRoaXMpO1xuXHRcdFx0XHRmb2N1c0ZpbHRlci5jYWxsKHRoaXMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZSA9IGVsZW1lbnQuY2xvc2VzdChgWyR7QVRUUklCVVRFX1JPTEV9XWApO1xuXHRcdFx0XHRpZiAoZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGUuaGFzQXR0cmlidXRlKCkpIHtcblx0XHRcdFx0XHRyb2xlID0gZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRzd2l0Y2ggKHJvbGUpIHtcblx0XHRcdGNhc2UgXCJvcHRpb24tbGFiZWxcIjpcblx0XHRcdGNhc2UgXCJvcHRpb24tY29udHJvbFwiOlxuXHRcdFx0Y2FzZSBcIm9wdGlvblwiOlxuXHRcdFx0XHRoYW5kbGVPcHRpb25LZXlib2FyZEV2ZW50cy5jYWxsKHRoaXMsIGV2ZW50KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9O1xuXG5cdHRoaXMuc2hhZG93Um9vdC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzW2tleUV2ZW50SGFuZGxlcl0pO1xuXHR0aGlzLnNoYWRvd1Jvb3QuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXNbb3Blbk9wdGlvbkV2ZW50SGFuZGxlcl0pO1xufVxuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIHBhc3MgYSBVUkwgdG8gdGhpcyBzZWxlY3QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItc2VsZWN0IGRhdGEtbW9uc3Rlci11cmw9XCJodHRwczovL2V4YW1wbGUuY29tL1wiPjwvbW9uc3Rlci1zZWxlY3Q+XG4gKiBgYGBcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMoKSB7O1xuXHRjb25zdCBvcHRpb25zID0ge307XG5cblx0Y29uc3QgdXJsID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKTtcblx0aWYgKGlzU3RyaW5nKHVybCkpIHtcblx0XHRvcHRpb25zW1widXJsXCJdID0gbmV3IFVSTCh1cmwpLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8dGVtcGxhdGUgaWQ9XCJvcHRpb25zXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1pbnRlbmQgcGF0aDpvcHRpb25zLmludGVuZCwgXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1zdGF0ZSBwYXRoOm9wdGlvbnMuc3RhdGUsIFxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eSBwYXRoOm9wdGlvbnMudmlzaWJpbGl0eSwgXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1maWx0ZXJlZCBwYXRoOm9wdGlvbnMuZmlsdGVyZWQsXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1oYXMtY2hpbGRyZW4gcGF0aDpvcHRpb25zLmhhcy1jaGlsZHJlblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJmb2xkZXItaGFuZGxlclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBwYXJ0PVwib3B0aW9uXCIgcm9sZT1cIm9wdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZGF0YS1tb25zdGVyLXJvbGU9XCJvcHRpb24tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgdHlwZSBwYXRoOnR5cGUsXG4gICAgICAgICAgICByb2xlIHBhdGg6cm9sZSxcbiAgICAgICAgICAgIHZhbHVlIHBhdGg6b3B0aW9ucy52YWx1ZSwgXG4gICAgICAgICAgICBuYW1lIHBhdGg6bmFtZSwgXG4gICAgICAgICAgICBwYXJ0IHBhdGg6dHlwZSB8IHByZWZpeDpvcHRpb24tIHwgc3VmZml4OiBmb3JtXG4gICAgICAgICAgICBcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpvcHRpb25zIHwgaW5kZXg6bGFiZWxcIiBwYXJ0PVwib3B0aW9uLWxhYmVsXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8dGVtcGxhdGUgaWQ9XCJzZWxlY3Rpb25cIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJiYWRnZVwiXG4gICAgICAgICAgICAgICAgIHBhcnQ9XCJiYWRnZVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci12YWx1ZSBwYXRoOnNlbGVjdGlvbiB8IGluZGV4OnZhbHVlLCBcbiAgICAgICAgICAgICAgICAgY2xhc3MgcGF0aDpjbGFzc2VzIHwgaW5kZXg6YmFkZ2UsIFxuICAgICAgICBwYXJ0IHBhdGg6dHlwZSB8IHN1ZmZpeDotb3B0aW9uIHwgcHJlZml4OiBmb3JtLVwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpzZWxlY3Rpb24gfCBpbmRleDpsYWJlbFwiIHBhcnQ9XCJiYWRnZS1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImJhZGdlLWxhYmVsXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwicmVtb3ZlLWJhZGdlXCIgZGF0YS1tb25zdGVyLXNlbGVjdC10aGlzXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6ZmVhdHVyZXMuY2xlYXIgfCA/OjpoaWRkZW4gXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwicmVtb3ZlLWJhZGdlXCIgdGFiaW5kZXg9XCItMVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPHNsb3QgY2xhc3M9XCJoaWRkZW5cIj48L3Nsb3Q+XG5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiIHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIFxcJHtzZWxlY3RlZH1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwicG9wcGVyXCIgcGFydD1cInBvcHBlclwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cIm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1maWx0ZXItY29udHJvbFwiIHJvbGU9XCJzZWFyY2hcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcm9sZT1cInNlYXJjaGJveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0PVwicG9wcGVyLWZpbHRlclwiIG5hbWU9XCJwb3BwZXItZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJjb250ZW50XCIgY2xhc3M9XCJmbGV4XCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwib3B0aW9uc1wiIGRhdGEtbW9uc3Rlci1yb2xlPVwib3B0aW9uc1wiIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJvcHRpb25zIHBhdGg6b3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cIm5vLW9wdGlvbnNcIiBkYXRhLW1vbnN0ZXItcm9sZT1cIm5vLW9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm1lc3NhZ2VzLmVtcHR5T3B0aW9uc1wiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHBhcnQ9XCJzdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc1wiIGRhdGEtbW9uc3Rlci1yb2xlPVwic3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlIHwgc3VmZml4OlxcXFwgc3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFRyZWVTZWxlY3QpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRpbml0TWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXksIGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0ZPUk1fUkVMT0FELCBBVFRSSUJVVEVfRk9STV9VUkwgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBsb2FkQW5kQXNzaWduQ29udGVudCB9IGZyb20gXCIuL3V0aWwvZmV0Y2gubWpzXCI7XG5cbmV4cG9ydCB7IFRlbXBsYXRlIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGludGVyc2VjdGlvbk9ic2VydmVyV2FzSW5pdGlhbGl6ZWQgPSBTeW1ib2woXCJ3YXNJbml0aWFsaXplZFwiKTtcblxuLyoqXG4gKiBUaGlzIEN1c3RvbUVsZW1lbnQgYG1vbnN0ZXItdGVtcGxhdGVgIHJlbG9hZHMgYSBjb250ZW50IGFuZCBhZGRzIGl0IHRvIHRoZSBTaGFkb3dSb290LlxuICogVGhlIGNvbnRlbnQgaXMgc2V0IHRvIG5vdCB2aXNpYmxlLFxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvdGVtcGxhdGUucG5nXCI+XG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyBgPG1vbnN0ZXItdGVtcGxhdGUgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdGVtcGxhdGUnKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci10ZW1wbGF0ZT48L21vbnN0ZXItdGVtcGxhdGU+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IHtUZW1wbGF0ZX0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL3RlbXBsYXRlLmpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdGVtcGxhdGUnKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBjb250ZW50IHdpbGwgbm90IGJlIGxvYWRlZCB1bnRpbCB0aGlzIGVsZW1lbnQgaXMgdmlzaWJsZS4gSWYgdGhlIGVsZW1lbnQgaXMgaW52aXNpYmxlIGFnYWluIGFuZCBiZWNvbWVzIHZpc2libGUgYWdhaW4sXG4gKiB0aGUgY29udGVudCBpcyByZWxvYWRlZCBhcyB3ZWxsLiB5b3UgY2FuIGRpc2FibGUgdGhpcyBiZWhhdmlvciBieSBzZXR0aW5nIGByZWxvYWQ9b25zaG93YC4gKlxuICpcbiAqIEBzdGFydHVtbCB0ZW1wbGF0ZS5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEN1c3RvbUNvbnRyb2xcbiAqIEN1c3RvbUNvbnRyb2wgPHwtLSBUZW1wbGF0ZVxuICogQGVuZHVtbFxuICpcbiAqIEBzaW5jZSAxLjExLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzdW1tYXJ5IEEgdGVtcGxhdGUgY29udHJvbFxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLmV2ZW50Om1vbnN0ZXItZmV0Y2hlZFxuICovXG5jbGFzcyBUZW1wbGF0ZSBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vdGVtcGxhdGVcIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHVybD11bmRlZmluZWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlbG9hZD11bmRlZmluZWQgIGN1cnJlbnRseSB0aGUgb25seSB2YWx1ZSBkZWZpbmVkIGlzIGBvbnNob3dgLiBDdXJyZW50bHkgdGhlIG9ubHkgdmFsdWUgZGVmaW5lZCBpcyBvbnNob3cuIHRoaXMgcmVtb3ZlcyB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuIHRoaXMgbWVhbnMgdGhhdCB0aGUgY29udGVudCBpcyBvbmx5IGxvYWRlZCBvbmNlLiByZWxvYWRpbmcgb2YgdGhlIGNvbnRlbnQgZG9lcyBub3Qgb2NjdXIuXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUHJvY2Vzc29yW119IHByb2Nlc3NvcnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoIEZldGNoIFtzZWUgVXNpbmcgRmV0Y2ggbW96aWxsYS5vcmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEkvVXNpbmdfRmV0Y2gpXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5yZWRpcmVjdD1lcnJvclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubWV0aG9kPUdFVFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubW9kZT1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2guY3JlZGVudGlhbHM9c2FtZS1vcmlnaW5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoLmhlYWRlcnM9e1wiYWNjZXB0XCI6XCJ0ZXh0L2h0bWxcIn19XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdFx0e1xuXHRcdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR1cmw6IHVuZGVmaW5lZCxcblx0XHRcdFx0cmVsb2FkOiB1bmRlZmluZWQsXG5cdFx0XHRcdHByb2Nlc3NvcnM6IFtdLFxuXHRcdFx0XHRmZXRjaDoge1xuXHRcdFx0XHRcdHJlZGlyZWN0OiBcImVycm9yXCIsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdG1vZGU6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0XHRjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IHtcblx0XHRcdFx0XHRcdGFjY2VwdDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cy5jYWxsKHRoaXMpLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZSBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcblx0XHRjb25zdCBsaXN0ID0gc3VwZXIub2JzZXJ2ZWRBdHRyaWJ1dGVzO1xuXHRcdGxpc3QucHVzaChBVFRSSUJVVEVfRk9STV9VUkwpO1xuXHRcdHJldHVybiBsaXN0O1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRbaW5pdE1ldGhvZFN5bWJvbF0oKSB7O1xuXHRcdHN1cGVyW2luaXRNZXRob2RTeW1ib2xdKCk7XG5cblx0XHQvLyBkYXRhLW1vbnN0ZXItb3B0aW9uc1xuXHRcdHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW0FUVFJJQlVURV9GT1JNX1VSTF0gPSAodXJsKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKSkge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcInVybFwiLCBuZXcgVVJMKHVybCwgZG9jdW1lbnQubG9jYXRpb24pLnRvU3RyaW5nKCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJ1cmxcIiwgdW5kZWZpbmVkKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGRlZmF1bHQgc2xvdFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyB1cmxcblx0ICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gcmVxdWVzdCBmYWlsZWRcblx0ICogQHRocm93cyB7RXJyb3J9IG5vdCBmb3VuZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG5cdCAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5ldmVudDptb25zdGVyLWZldGNoZWRcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uRm9ybX1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7O1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRJbnRlcnNlY3Rpb25PYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItdGVtcGxhdGVcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBsb2FkIGNvbnRlbnQgZnJvbSB1cmxcblx0ICpcblx0ICogSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgdGhhdCB3aXRoIHRoaXMgZnVuY3Rpb24gdGhlIGxvYWRpbmcgaXMgZXhlY3V0ZWRcblx0ICogZGlyZWN0bHkuIGl0IGlzIGxvYWRlZCBhcyB3ZWxsIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IHZpc2libGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gdXJsXG5cdCAqL1xuXHRmZXRjaCh1cmwpIHtcblx0XHRpZiAoaXNTdHJpbmcodXJsKSB8fCB1cmwgaW5zdGFuY2VvZiBVUkwpIHtcblx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCwgYCR7dXJsfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBsb2FkQ29udGVudC5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUHJvY2Vzc29yXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZGVzdGluYXRpb25cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBzb3VyY2VcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHNpbmNlIDEuMTEuOFxuICovXG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBgYGBcbiAqIDxtb25zdGVyLXNlbGVjdCBkYXRhLW1vbnN0ZXItdXJsPVwiaHR0cHM6Ly9leGFtcGxlLmNvbS9cIj48L21vbnN0ZXItc2VsZWN0PlxuICogYGBgXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzKCkgeztcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdGNvbnN0IHVybCA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cblx0aWYgKGlzU3RyaW5nKHVybCkpIHtcblx0XHRvcHRpb25zW1widXJsXCJdID0gbmV3IFVSTCh1cmwsIGRvY3VtZW50LmxvY2F0aW9uKS50b1N0cmluZygpO1xuXHR9XG5cblx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1JFTE9BRCkpIHtcblx0XHRvcHRpb25zW1wicmVsb2FkXCJdID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKS50b0xvd2VyQ2FzZSgpO1xuXHR9XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGRlZmF1bHQgc2xvdFxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIHVybFxuICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuICogQHRocm93cyB7RXJyb3J9IHJlcXVlc3QgZmFpbGVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IGZvdW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkZvcm0uZXZlbnQ6bW9uc3Rlci1mZXRjaGVkXG4gKi9cbmZ1bmN0aW9uIGluaXRJbnRlcnNlY3Rpb25PYnNlcnZlcigpIHs7XG5cblx0aWYgKHRoaXNbaW50ZXJzZWN0aW9uT2JzZXJ2ZXJXYXNJbml0aWFsaXplZF0gPT09IHRydWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW2ludGVyc2VjdGlvbk9ic2VydmVyV2FzSW5pdGlhbGl6ZWRdID0gdHJ1ZTtcblxuXHRjb25zdCBvcHRpb25zID0ge1xuXHRcdHRocmVzaG9sZDogWzAuNV0sXG5cdH07XG5cblx0Y29uc3QgY2FsbGJhY2sgPSAoZW50cmllcywgb2JzZXJ2ZXIpID0+IHtcblx0XHRmb3IgKGNvbnN0IFssIGVudHJ5XSBvZiBlbnRyaWVzLmVudHJpZXMoKSkge1xuXHRcdFx0aWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nID09PSB0cnVlKSB7XG5cdFx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcInJlbG9hZFwiKSA9PT0gXCJvbnNob3dcIikge1xuXHRcdFx0XHRcdG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0bG9hZENvbnRlbnQuY2FsbCh0aGlzKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoY2FsbGJhY2ssIG9wdGlvbnMpO1xuXHRvYnNlcnZlci5vYnNlcnZlKHRoaXMpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBkZWZhdWx0IHNsb3RcbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyB1cmxcbiAqIEB0aHJvd3Mge0Vycm9yfSB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGFcbiAqIEB0aHJvd3Mge0Vycm9yfSByZXF1ZXN0IGZhaWxlZFxuICogQHRocm93cyB7RXJyb3J9IG5vdCBmb3VuZFxuICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IGNsaWVudCBlcnJvclxuICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2ZcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkZvcm0uZXZlbnQ6bW9uc3Rlci1mZXRjaGVkXG4gKi9cbmZ1bmN0aW9uIGxvYWRDb250ZW50KCkgeztcblxuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRjb25zdCB1cmwgPSB0aGlzLmdldE9wdGlvbihcInVybFwiLCB1bmRlZmluZWQpO1xuXHRpZiAoIWlzU3RyaW5nKHVybCkgfHwgdXJsID09PSBcIlwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyB1cmxcIik7XG5cdH1cblxuXHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJmZXRjaFwiLCB7fSk7XG5cblx0Y29uc3QgZGVmYXVsdFNsb3QgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcInNsb3RbbmFtZT1kZWZhdWx0XVwiKTtcblx0aWYgKCEoZGVmYXVsdFNsb3QgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIGRlZmF1bHQgc2xvdFwiKTtcblx0fVxuXG5cdGRlZmF1bHRTbG90LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG5cblx0bGV0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udGFpbmVyXWAsXG5cdCk7XG5cdGlmICghKGNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0Y29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0XHRjb250YWluZXIuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFLCBcImNvbnRhaW5lclwiKTtcblx0XHR0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcblx0fVxuXG5cdGxvYWRBbmRBc3NpZ25Db250ZW50KGNvbnRhaW5lciwgdXJsLCBvcHRpb25zKVxuXHRcdC50aGVuKCgpID0+IHtcblx0XHRcdGRlZmF1bHRTbG90LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0XHRcdHJ1blByb2Nlc3NvcnMuY2FsbCh0aGlzKTtcblx0XHR9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7cnVuUHJvY2Vzc29yc31cbiAqL1xuZnVuY3Rpb24gcnVuUHJvY2Vzc29ycygpIHs7XG5cblx0Y29uc3QgcHJvY2Vzc29ycyA9IHRoaXMuZ2V0T3B0aW9uKFwicHJvY2Vzc29yc1wiKTtcblx0aWYgKCFpc0FycmF5KHByb2Nlc3NvcnMpKSByZXR1cm47XG5cblx0Zm9yIChjb25zdCBbLCBwcm9jZXNzb3JdIG9mIHByb2Nlc3NvcnMuZW50cmllcygpKSB7XG5cdFx0Y29uc3Qgc291cmNlID0gcHJvY2Vzc29yPy5zb3VyY2U7XG5cdFx0Y29uc3QgZGVzdGluYXRpb24gPSBwcm9jZXNzb3I/LmRlc3RpbmF0aW9uO1xuXG5cdFx0aWYgKGlzU3RyaW5nKHNvdXJjZSkgJiYgaXNTdHJpbmcoZGVzdGluYXRpb24pKSB7XG5cdFx0XHRjb25zdCBzb3VyY2VOb2RlID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3Ioc291cmNlKTtcblx0XHRcdGNvbnN0IGRlc3RpbmF0aW9uTm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZGVzdGluYXRpb24pO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdHNvdXJjZU5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcdFx0XHRkZXN0aW5hdGlvbk5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudFxuXHRcdFx0KSB7XG5cdFx0XHRcdGRlc3RpbmF0aW9uTm9kZS5pbm5lckhUTUwgPSBzb3VyY2VOb2RlLmNsb25lTm9kZSh0cnVlKS5pbm5lckhUTUw7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHNsb3QgbmFtZT1cImRlZmF1bHRcIj48L3Nsb3Q+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFRlbXBsYXRlKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBNZXNzYWdlU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgTWVzc2FnZVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRNZXNzYWdlU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBtZXNzYWdlIHsgXG46d2hlcmUoaHRtbCl7bGluZS1oZWlnaHQ6MS4xNX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUocHJlKXtmb250LWZhbWlseTptb25vc3BhY2UsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19OndoZXJlKGFiYnJbdGl0bGVdKXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9OndoZXJlKGIsc3Ryb25nKXtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKGNvZGUsa2JkLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlO21pbi1oZWlnaHQ6MTAwJX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDttaW4taGVpZ2h0Ojk5JTtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItc2hhZG93Om5vbmU7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWdyYXktMTojZjZmNmY2Oy0tbW9uc3Rlci1jb2xvci1ncmF5LTI6I2UyZTJlMjstLW1vbnN0ZXItY29sb3ItZ3JheS0zOiM4YjhiOGI7LS1tb25zdGVyLWNvbG9yLWdyYXktNDojNmY2ZjZmOy0tbW9uc3Rlci1jb2xvci1ncmF5LTU6IzNlM2UzZTstLW1vbnN0ZXItY29sb3ItZ3JheS02OiMyMjI7LS1tb25zdGVyLWNvbG9yLXJvc2UtMTojZmZmN2Y5Oy0tbW9uc3Rlci1jb2xvci1yb3NlLTI6I2ZmZGNlNTstLW1vbnN0ZXItY29sb3Itcm9zZS0zOiNmZjNiOGQ7LS1tb25zdGVyLWNvbG9yLXJvc2UtNDojZGIwMDcyOy0tbW9uc3Rlci1jb2xvci1yb3NlLTU6IzgwMDA0MDstLW1vbnN0ZXItY29sb3Itcm9zZS02OiM0YzAwMjM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0xOiNmZmY4Zjg7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0yOiNmZmRkZGY7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0zOiNmZjQyNmM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS00OiNkZTAwNTE7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS01OiM4MjAwMmM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS02OiM1MTAwMTg7LS1tb25zdGVyLWNvbG9yLXJlZC0xOiNmZmY4ZjY7LS1tb25zdGVyLWNvbG9yLXJlZC0yOiNmZmRkZDg7LS1tb25zdGVyLWNvbG9yLXJlZC0zOiNmZjQ2NDc7LS1tb25zdGVyLWNvbG9yLXJlZC00OiNlMDAwMmI7LS1tb25zdGVyLWNvbG9yLXJlZC01OiM4MzAwMTQ7LS1tb25zdGVyLWNvbG9yLXJlZC02OiM1MzAwMDM7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xOiNmZmY4ZjU7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yOiNmZmRlZDE7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zOiNmZDRkMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS00OiNjZDNjMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS01OiM3NTIxMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS02OiM0MDE2MDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTE6I2ZmZjhmMzstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMjojZmZkZmM2Oy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0zOiNkNTczMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTQ6I2FjNWMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNTojNjMzMzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi02OiMzNzFkMDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTE6I2ZmZjhlZjstLW1vbnN0ZXItY29sb3ItYW1iZXItMjojZmZlMGIyOy0tbW9uc3Rlci1jb2xvci1hbWJlci0zOiNiOTgzMDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTQ6IzkyNjcwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNTojNTIzODAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci02OiMzMDIxMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0xOiNmZmY5ZTU7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0yOiNmZmU1M2U7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0zOiM5YzhiMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy00OiM3ZDZmMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy01OiM0NjNkMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy02OiMyOTIzMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtMTojZjdmZmFjOy0tbW9uc3Rlci1jb2xvci1saW1lLTI6I2Q1ZjIwMDstLW1vbnN0ZXItY29sb3ItbGltZS0zOiM4MTkzMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNDojNjc3NjAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTU6IzM5NDEwMDstLW1vbnN0ZXItY29sb3ItbGltZS02OiMyMjI2MDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMTojZTVmZmMzOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTI6Izk4ZmIwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0zOiM1YzliMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNDojNDk3YzAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTU6IzI2NDUwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS02OiMxODI2MDA7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTE6I2UwZmZkOTstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMjojNzJmZjZjOy0tbW9uc3Rlci1jb2xvci1ncmVlbi0zOiMwMGEyMWY7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTQ6IzAwODIxNzstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNTojMDA0OTA4Oy0tbW9uc3Rlci1jb2xvci1ncmVlbi02OiMwNjI4MDA7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMTojZGNmZmU2Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTI6IzVkZmZhMjstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0zOiMwMGEwNWE7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNDojMDA4MTQ3Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTU6IzAwNDgyNTstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC02OiMwMDI4MTI7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMTojZGFmZmVmOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTI6IzQyZmZjNjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0zOiMwMDlmNzg7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNDojMDA3ZjVmOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTU6IzAwNDczNDstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS02OiMwMDI4MWI7LS1tb25zdGVyLWNvbG9yLXRlYWwtMTojZDdmZmY3Oy0tbW9uc3Rlci1jb2xvci10ZWFsLTI6IzAwZmZlNDstLW1vbnN0ZXItY29sb3ItdGVhbC0zOiMwMDllOGM7LS1tb25zdGVyLWNvbG9yLXRlYWwtNDojMDA3YzZlOy0tbW9uc3Rlci1jb2xvci10ZWFsLTU6IzAwNDQzYzstLW1vbnN0ZXItY29sb3ItdGVhbC02OiMwMDI3MjI7LS1tb25zdGVyLWNvbG9yLWN5YW4tMTojYzRmZmZlOy0tbW9uc3Rlci1jb2xvci1jeWFuLTI6IzAwZmFmYjstLW1vbnN0ZXItY29sb3ItY3lhbi0zOiMwMDk5OWE7LS1tb25zdGVyLWNvbG9yLWN5YW4tNDojMDA3YTdiOy0tbW9uc3Rlci1jb2xvci1jeWFuLTU6IzAwNDM0NDstLW1vbnN0ZXItY29sb3ItY3lhbi02OiMwMDI1MjU7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0xOiNkYWZhZmY7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0yOiM4ZGYwZmY7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0zOiMwMDk4YTk7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci00OiMwMDc5ODc7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci01OiMwMDQwNDg7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci02OiMwMDIyMjc7LS1tb25zdGVyLWNvbG9yLXNreS0xOiNlM2Y3ZmY7LS1tb25zdGVyLWNvbG9yLXNreS0yOiNhZWU5ZmY7LS1tb25zdGVyLWNvbG9yLXNreS0zOiMwMDk0YjQ7LS1tb25zdGVyLWNvbG9yLXNreS00OiMwMDc1OTA7LS1tb25zdGVyLWNvbG9yLXNreS01OiMwMDQwNGY7LS1tb25zdGVyLWNvbG9yLXNreS02OiMwMDFmMjg7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTE6I2U4ZjZmZjstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMjojYjllM2ZmOy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0zOiMwMDkyYzU7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTQ6IzAwNzQ5ZDstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNTojMDAzYzU0Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi02OiMwMDFkMmE7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTE6I2U4ZjJmZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtMjojYzZlMGZmOy0tbW9uc3Rlci1jb2xvci1henVyZS0zOiMwMDhmZGI7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTQ6IzAwNzFhZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtNTojMDAzYjVlOy0tbW9uc3Rlci1jb2xvci1henVyZS02OiMwMDFjMzA7LS1tb25zdGVyLWNvbG9yLWJsdWUtMTojZjBmNGZmOy0tbW9uc3Rlci1jb2xvci1ibHVlLTI6I2Q0ZTBmZjstLW1vbnN0ZXItY29sb3ItYmx1ZS0zOiMwMDg5ZmM7LS1tb25zdGVyLWNvbG9yLWJsdWUtNDojMDA2ZGNhOy0tbW9uc3Rlci1jb2xvci1ibHVlLTU6IzAwMzg2ZDstLW1vbnN0ZXItY29sb3ItYmx1ZS02OiMwMDFhMzk7LS1tb25zdGVyLWNvbG9yLWluZGlnby0xOiNmM2YzZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby0yOiNkZWRkZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby0zOiM2NTdlZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby00OiMwMDYxZmM7LS1tb25zdGVyLWNvbG9yLWluZGlnby01OiMwMDMyOGE7LS1tb25zdGVyLWNvbG9yLWluZGlnby02OiMwMDE2NDk7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0xOiNmN2YxZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0yOiNlOGRhZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0zOiM5YjcwZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC00OiM3OTRhZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC01OiMyZDBmYmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC02OiMwYjAwNzQ7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0xOiNmZGY0ZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0yOiNmN2Q5ZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0zOiNkMTUwZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS00OiNiMDFmZTM7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS01OiM2NjAwODc7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS02OiMzYTAwNGY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMTojZmZmM2ZjOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTI6I2ZmZDdmNjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0zOiNmOTExZTA7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNDojY2EwMGI2Oy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTU6Izc0MDA2ODstLW1vbnN0ZXItY29sb3ItbWFnZW50YS02OiM0NDAwM2M7LS1tb25zdGVyLWNvbG9yLXBpbmstMTojZmZmN2ZiOy0tbW9uc3Rlci1jb2xvci1waW5rLTI6I2ZmZGNlYzstLW1vbnN0ZXItY29sb3ItcGluay0zOiNmZjJmYjI7LS1tb25zdGVyLWNvbG9yLXBpbmstNDojZDIwMDhmOy0tbW9uc3Rlci1jb2xvci1waW5rLTU6Izc5MDA1MTstLW1vbnN0ZXItY29sb3ItcGluay02OiM0YjAwMzB9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci10aGVtZS1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTEpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMXtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0yKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTJ7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLWNvbG9yLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLXRoZW1lLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMyl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ze2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci10aGVtZS1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTQpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtNHtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtvdXRsaW5lOm5vbmV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXgsW2RhdGEtbW9uc3Rlci1yb2xlPW1lc3NhZ2Vde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fVtkYXRhLW1vbnN0ZXItcm9sZT1tZXNzYWdlXXtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtwYWRkaW5nOjhweDt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250ZW50XXtmbGV4LWdyb3c6MjtAbWl4aW5zIHBhcmFncmFwaH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWNsb3NlXXtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6MTZweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotMTBweDt0b3A6LTVweDt3aWR0aDoxNnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXkpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9Y2xvc2VdOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjEwMCV9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1BSRUZJWCxcblx0QVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdGluaXRNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZVN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L21lc3NhZ2UubWpzXCI7XG5cbmV4cG9ydCB7IE1lc3NhZ2UgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250cm9sRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVtb3ZlRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInJlbW92ZUVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHRpbWVyU3ltYm9sID0gU3ltYm9sKFwidGltZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG1vdXNlZW50ZXJFdmVudEhhbmRsZXJTeW1ib2wgPSBTeW1ib2woXCJtb3VzZWVudGVyRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBtb3VzZWxlYXZlRXZlbnRIYW5kbGVyU3ltYm9sID0gU3ltYm9sKFwibW91c2VsZWF2ZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVtb3ZlRXZlbnRIYW5kbGVyU3ltYm9sID0gU3ltYm9sKFwicmVtb3ZlRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIFRoaXMgQ3VzdG9tQ29udHJvbCBjcmVhdGVzIGEgbm90aWZpY2F0aW9uIGVsZW1lbnQgd2l0aCBhIHZhcmlldHkgb2Ygb3B0aW9ucy5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL21lc3NhZ2UucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5LlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgYDxtb25zdGVyLW5vdGlmeS1tZXNzYWdlIC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTFxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLW5vdGlmeS1tZXNzYWdlPjwvbW9uc3Rlci1ub3RpZnktbWVzc2FnZT5cbiAqIGBgYFxuICpcbiAqIG9yIHVzaW5nIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ub3RpZnknKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL2NvbXBvbmVudHMvbm90aWZ5L21lc3NhZ2UuanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ub3RpZnktbWVzc2FnZScpO1xuICogYGBgXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi9leGFtcGxlL21lc3NhZ2UubWpzXG4gKiBAc3RhcnR1bWwgbWVzc2FnZS5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIE1lc3NhZ2VcbiAqIEBlbmR1bWxcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuTm90aWZ5XG4gKiBAc3VtbWFyeSBBIGhpZ2hseSBjb25maWd1cmFibGUgc2VsZWN0IGNvbnRyb2xcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuTm90aWZ5LmV2ZW50Om1vbnN0ZXIteHh4eFxuICovXG5jbGFzcyBNZXNzYWdlIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGUgZGVmYXVsdHMgY2FuIGJlIHNldCBlaXRoZXIgZGlyZWN0bHkgaW4gdGhlIG9iamVjdCBvciB2aWEgYW4gYXR0cmlidXRlIGluIHRoZSBIVE1MIHRhZy5cblx0ICogVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBpbiB0aGUgSFRNTCB0YWcgbXVzdCBiZSBhIEpTT04gc3RyaW5nLlxuXHQgKlxuXHQgKiBgYGBcblx0ICogPG1vbnN0ZXItbWVzc2FnZSBkYXRhLW1vbnN0ZXItb3B0aW9ucz1cInt9XCI+PC9tb25zdGVyLW1lc3NhZ2U+XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBTaW5jZSAxLjE4LjAgdGhlIEpTT04gY2FuIGJlIHNwZWNpZmllZCBhcyBhIERhdGFVUkkuXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBuZXcgTW9uc3Rlci5UeXBlcy5EYXRhVXJsKGJ0b2EoSlNPTi5zdHJpbmdpZnkoe1xuXHQgKiAgICAgICAgdGltZW91dDogMzAwMCxcblx0ICogICAgICAgIGZlYXR1cmVzOiB7XG5cdCAqICAgICAgICAgIGNsZWFyOiB0cnVlLFxuXHQgKiAgICAgICAgICBkaXNhcHBlYXI6IHRydWVcblx0ICogICAgICAgIH1cblx0ICogICAgfSkpLCdhcHBsaWNhdGlvbi9qc29uJyx0cnVlKS50b1N0cmluZygpXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtpbnRlZ2VyfSB0aW1lb3V0IHRpbWUgaW4gbWlsbGlzZWNvbmRzIHVudGlsIHRoZSBtZXNzYWdlIHNob3VsZCBiZSByZW1vdmVkLiBUaGUgdGltZW91dCBjYW4gYmUgZGlzYWJsZWQgdmlhIHRoZSBmZWF0dXJlIGBkaXNhcHBlYXJgLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmVhdHVyZXNcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5jbGVhciBzaG93IGNsZWFyIGJ1dHRvblxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLmRpc2FwcGVhciBhdXRvbWF0aWNhbGx5IHJlbW92ZSB0aGUgbWVzc2FnZSBhZnRlciB0aGUgdGltZW91dFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKlxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHtcblx0XHRcdFx0dGltZW91dDogNjAwMCxcblx0XHRcdFx0ZmVhdHVyZXM6IHtcblx0XHRcdFx0XHRjbGVhcjogdHJ1ZSxcblx0XHRcdFx0XHRkaXNhcHBlYXI6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNvbnRlbnQ6IFwiPHNsb3Q+PC9zbG90PlwiLFxuXHRcdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cy5jYWxsKHRoaXMpLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLk5vdGlmeS5NZXNzYWdlfVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTs7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50aGFuZGxlci5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1ub3RpZnktbWVzc2FnZVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbTWVzc2FnZVN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRbaW5pdE1ldGhvZFN5bWJvbF0oKSB7O1xuXHRcdHN1cGVyW2luaXRNZXRob2RTeW1ib2xdKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7O1xuXG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMuZGlzYXBwZWFyXCIpID09PSB0cnVlKSB7XG5cdFx0XHRzdGFydEZhZGVvdXQuY2FsbCh0aGlzKTtcblx0XHRcdHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIiwgdGhpc1ttb3VzZWVudGVyRXZlbnRIYW5kbGVyU3ltYm9sXSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXHRcdHN0b3BGYWRlb3V0LmNhbGwodGhpcyk7O1xuXG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMuZGlzYXBwZWFyXCIpID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdFwibW91c2VlbnRlclwiLFxuXHRcdFx0XHR0aGlzW21vdXNlZW50ZXJFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdFx0KTtcblx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XCJtb3VzZWVudGVyXCIsXG5cdFx0XHRcdHRoaXNbbW91c2VsZWF2ZUV2ZW50SGFuZGxlclN5bWJvbF0sXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0RmFkZW91dCgpIHs7XG5cdGlmICghdGhpcz8uW3RpbWVyU3ltYm9sXSkge1xuXHRcdHRoaXNbdGltZXJTeW1ib2xdID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRyZW1vdmVTZWxmLmNhbGwodGhpcyk7XG5cdFx0fSwgdGhpcy5nZXRPcHRpb24oXCJ0aW1lb3V0XCIsIDEwMDApKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW1vdmVTZWxmKCkgeztcblxuXHRzdG9wRmFkZW91dCgpO1xuXHR0aGlzLmNsYXNzTGlzdC5hZGQoXCJmYWRlb3V0XCIpO1xuXG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdHRoaXMucmVtb3ZlKCk7XG5cdH0sIDIwMCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc3RvcEZhZGVvdXQoKSB7O1xuXHRpZiAodGhpcz8uW3RpbWVyU3ltYm9sXSkge1xuXHRcdGNsZWFyVGltZW91dCh0aGlzW3RpbWVyU3ltYm9sXSk7XG5cdFx0dGhpc1t0aW1lclN5bWJvbF0gPSB1bmRlZmluZWQ7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBwYXNzIGEgVVJMIHRvIHRoaXMgc2VsZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cygpIHs7XG5cdGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuXHRjb25zdCB0aW1lb3V0ID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1BSRUZJWCArIFwidGltZW91dFwiKTtcblx0aWYgKGlzU3RyaW5nKHRpbWVvdXQpKSB7XG5cdFx0dHJ5IHtcblx0XHRcdG9wdGlvbnNbXCJ0aW1lb3V0XCJdID0gcGFyc2VJbnQodGltZW91dCwgMTApO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKFxuXHRcdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XHR0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFICsgXCIsIFwiICsgZS50b1N0cmluZygpKSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge01lc3NhZ2V9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7O1xuXG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbXCIgKyBBVFRSSUJVVEVfUk9MRSArIFwiPWNvbnRyb2xdXCIsXG5cdCk7XG5cdHRoaXNbcmVtb3ZlRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltcIiArIEFUVFJJQlVURV9ST0xFICsgXCI9cmVtb3ZlXVwiLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudGhhbmRsZXIoKSB7O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1ttb3VzZWVudGVyRXZlbnRIYW5kbGVyU3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdGV2ZW50LFxuXHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcImNvbnRyb2xcIixcblx0XHQpO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKFxuXHRcdFx0XHRcIm1vdXNlZW50ZXJcIixcblx0XHRcdFx0dGhpc1ttb3VzZWVudGVyRXZlbnRIYW5kbGVyU3ltYm9sXSxcblx0XHRcdCk7XG5cdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsIHRoaXNbbW91c2VsZWF2ZUV2ZW50SGFuZGxlclN5bWJvbF0pO1xuXHRcdFx0c3RvcEZhZGVvdXQuY2FsbCh0aGlzKTtcblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHR0aGlzW21vdXNlbGVhdmVFdmVudEhhbmRsZXJTeW1ib2xdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdFwiY29udHJvbFwiLFxuXHRcdCk7XG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKFxuXHRcdFx0XHRcIm1vdXNlbGVhdmVcIixcblx0XHRcdFx0dGhpc1ttb3VzZWxlYXZlRXZlbnRIYW5kbGVyU3ltYm9sXSxcblx0XHRcdCk7XG5cdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIHRoaXNbbW91c2VlbnRlckV2ZW50SGFuZGxlclN5bWJvbF0pO1xuXHRcdFx0c3RhcnRGYWRlb3V0LmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1tyZW1vdmVFdmVudEhhbmRsZXJTeW1ib2xdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KGV2ZW50LCBBVFRSSUJVVEVfUk9MRSwgXCJyZW1vdmVcIik7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRyZW1vdmVTZWxmLmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmNsb3NlXCIpID09PSB0cnVlKSB7XG5cdFx0dGhpc1tyZW1vdmVFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XCJjbGlja1wiLFxuXHRcdFx0dGhpc1tyZW1vdmVFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdCk7XG5cdFx0dGhpc1tyZW1vdmVFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XCJ0b3VjaFwiLFxuXHRcdFx0dGhpc1tyZW1vdmVFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCIgY2xhc3M9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJtZXNzYWdlXCIgcGFydD1cIm1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1vcmllbnRhdGlvbiBwYXRoOm9yaWVudGF0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y29udGVudFwiIHBhcnQ9XCJjb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGVudFwiPlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwicmVtb3ZlXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpmZWF0dXJlcy5jbGVhciB8ID86OmhpZGRlbiBcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjbG9zZVwiIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoTWVzc2FnZSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgTm90aWZ5U3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgTm90aWZ5U3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdE5vdGlmeVN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgbm90aWZ5IHsgXG4uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXNoYWRvdzpub25lO2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd31kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17YWxpZ24taXRlbXM6ZmxleC1zdGFydDtib3JkZXI6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW46MDttYXgtaGVpZ2h0OjEwMHZIO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7d2lkdGg6MjVyZW07ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdW2RhdGEtbW9uc3Rlci1vcmllbnRhdGlvbio9bGVmdF17bGVmdDowO3JpZ2h0OmF1dG99W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdW2RhdGEtbW9uc3Rlci1vcmllbnRhdGlvbio9cmlnaHRde2xlZnQ6YXV0bztyaWdodDowfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXVtkYXRhLW1vbnN0ZXItb3JpZW50YXRpb24qPWNlbnRlcl17bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF1bZGF0YS1tb25zdGVyLW9yaWVudGF0aW9uKj1ib3R0b21de2FsaWduLWl0ZW1zOmZsZXgtZW5kO2JvdHRvbTowfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXVtkYXRhLW1vbnN0ZXItb3JpZW50YXRpb24qPXRvcF17YWxpZ24taXRlbXM6ZmxleC1zdGFydDt0b3A6MH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udGFpbmVyXXt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1tZXNzYWdlXXtiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1ib3JkZXItY29sb3IscmdiYSgwLDAsMCwuMSkpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1tZXNzYWdlLWJvcmRlci1yYWRpdXMsLjI1cmVtKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1tZXNzYWdlLWJvcmRlci1zdHlsZSxzb2xpZCk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1ib3JkZXItd2lkdGgsMXB4KTtib3gtc2hhZG93OjAgLjVyZW0gMXJlbSByZ2JhKDAsMCwwLC4xNSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6ZmxleDtmb250LXNpemU6Ljg3NXJlbTttYXJnaW46dmFyKC0tbW9uc3Rlci1tZXNzYWdlLW1hcmdpbi10b3AsMTVweCkgdmFyKC0tbW9uc3Rlci1tZXNzYWdlLW1hcmdpbi1yaWdodCw1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1tYXJnaW4tYm90dG9tLDApIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1tYXJnaW4tbGVmdCwwKTttYXgtaGVpZ2h0OjIwMHB4O21heC13aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1wYWRkaW5nLXRvcCw1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1wYWRkaW5nLXJpZ2h0LDVweCkgdmFyKC0tbW9uc3Rlci1tZXNzYWdlLXBhZGRpbmctYm90dG9tLDVweCkgdmFyKC0tbW9uc3Rlci1tZXNzYWdlLXBhZGRpbmctbGVmdCw1cHgpO3BvaW50ZXItZXZlbnRzOmF1dG87cG9zaXRpb246cmVsYXRpdmU7dGV4dC1vdmVyZmxvdzplbGxpcHNpczstd2Via2l0LXVzZXItc2VsZWN0OnRleHQ7LW1vei11c2VyLXNlbGVjdDp0ZXh0O3VzZXItc2VsZWN0OnRleHQ7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9bWVzc2FnZV06Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfVtkYXRhLW1vbnN0ZXItcm9sZT1tZXNzYWdlXS5mYWRlb3V0e2JvcmRlcjowO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWF4LWhlaWdodDowO3BhZGRpbmctYm90dG9tOjA7cGFkZGluZy10b3A6MDt0cmFuc2l0aW9uOmFsbCAuMnMgY3ViaWMtYmV6aWVyKDEsLS4wNCwwLDEuMDMpfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIyLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL2NvbXBvbmVudC1mb3JtXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBBVFRSSUJVVEVfUk9MRSB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSBcIi4vbWVzc2FnZS5tanNcIjtcbmltcG9ydCB7IE5vdGlmeVN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L25vdGlmeS5tanNcIjtcbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3F1ZXVlLm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5cbmV4cG9ydCB7IE5vdGlmeSB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250cm9sRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRyb2xFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250YWluZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udGFpbmVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcXVldWVTeW1ib2wgPSBTeW1ib2woXCJxdWV1ZVwiKTtcblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgY3JlYXRlcyBhIG5vdGlmaWNhdGlvbiBlbGVtZW50IHdpdGggYSB2YXJpZXR5IG9mIG9wdGlvbnMuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9ub3RpZnkucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5LlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgYDxtb25zdGVyLW5vdGlmeSAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUxcbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1ub3RpZnk+PC9tb25zdGVyLW5vdGlmeT5cbiAqIGBgYFxuICpcbiAqIG9yIHVzaW5nIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ub3RpZnknKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0ICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9ub3RpZnkuanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ub3RpZnknKTtcbiAqIGBgYFxuICpcbiAqICMjIEV2ZW50c1xuICpcbiAqIFRoZSBDdXN0b21FdmVudCBoYXMgdGhlIHByb3BlcnR5IFtgZGV0YWlsYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0N1c3RvbUV2ZW50L2RldGFpbCkuXG4gKlxuICogYGBgXG4gKiBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ21vbnN0ZXItbm90aWZ5LW1lc3NhZ2UnLChlKT0+Y29uc29sZS5sb2coZS5kZXRhaWwpKVxuICogYGBgXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi9leGFtcGxlL25vdGlmeS5tanNcbiAqIEBzdGFydHVtbCBub3RpZnkucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBOb3RpZnlcbiAqIEBlbmR1bWxcbiAqXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLk5vdGlmeVxuICogQHN1bW1hcnkgQSBoaWdobHkgY29uZmlndXJhYmxlIHNlbGVjdCBjb250cm9sXG4gKi9cbmNsYXNzIE5vdGlmeSBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbcXVldWVTeW1ib2xdID0gbmV3IFF1ZXVlKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGRlZmF1bHRzIGNhbiBiZSBzZXQgZWl0aGVyIGRpcmVjdGx5IGluIHRoZSBvYmplY3Qgb3IgdmlhIGFuIGF0dHJpYnV0ZSBpbiB0aGUgSFRNTCB0YWcuXG5cdCAqIFRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgaW4gdGhlIEhUTUwgdGFnIG11c3QgYmUgYSBKU09OIHN0cmluZy5cblx0ICpcblx0ICogYGBgaHRtbFxuXHQgKiA8bW9uc3Rlci1ub3RpZnkgZGF0YS1tb25zdGVyLW9wdGlvbnM9XCJ7fVwiPjwvbW9uc3Rlci1ub3RpZnk+XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBTaW5jZSAxLjE4LjAgdGhlIEpTT04gY2FuIGJlIHNwZWNpZmllZCBhcyBhIERhdGFVUkkuXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBuZXcgTW9uc3Rlci5UeXBlcy5EYXRhVXJsKGJ0b2EoSlNPTi5zdHJpbmdpZnkoe1xuXHQgKiAgICAgICAgb3JpZW50YXRpb246ICdyaWdodCB0b3AnXG5cdCAqICAgIH0pKSwnYXBwbGljYXRpb24vanNvbicsdHJ1ZSkudG9TdHJpbmcoKVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdFx0e1xuXHRcdFx0XHRvcmllbnRhdGlvbjogXCJsZWZ0IHRvcFwiLFxuXHRcdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cy5jYWxsKHRoaXMpLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7Tm90aWZ5fVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTs7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cblx0XHRpZiAodGhpc1tjb250YWluZXJFbGVtZW50U3ltYm9sXSkge1xuXHRcdFx0d2hpbGUgKHRoaXNbcXVldWVTeW1ib2xdLmlzRW1wdHkoKSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0dGhpcy5wdXNoKHRoaXNbcXVldWVTeW1ib2xdLnBvbGwoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLW5vdGlmeVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbTm90aWZ5U3R5bGVTaGVldF07XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtNb25zdGVyLkNvbXBvbmVudHMuTm90aWZ5Lk1hc3NhZ2V8U3RyaW5nfSBtZXNzYWdlXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ob3RpZnkuTm90aWZ5fVxuXHQgKi9cblx0cHVzaChtZXNzYWdlKSB7O1xuXG5cdFx0bGV0IG1lc3NhZ2VFbGVtZW50ID0gbWVzc2FnZTtcblx0XHRpZiAoIShtZXNzYWdlIGluc3RhbmNlb2YgTWVzc2FnZSkpIHtcblx0XHRcdGNvbnN0IHRleHQgPSB2YWxpZGF0ZVN0cmluZyhtZXNzYWdlKTtcblx0XHRcdG1lc3NhZ2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm1vbnN0ZXItbm90aWZ5LW1lc3NhZ2VcIik7XG5cdFx0XHRtZXNzYWdlRWxlbWVudC5zZXRPcHRpb24oXCJjb250ZW50XCIsIHRleHQpO1xuXHRcdH1cblxuXHRcdHZhbGlkYXRlSW5zdGFuY2UobWVzc2FnZUVsZW1lbnQsIE1lc3NhZ2UpO1xuXHRcdG1lc3NhZ2VFbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSwgXCJtZXNzYWdlXCIpO1xuXG5cdFx0Ly8gaWYgbm90IGNvbm5lY3RlZCwgYWRkIHRvIHF1ZXVlXG5cdFx0aWYgKCF0aGlzW2NvbnRhaW5lckVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0XHR0aGlzW3F1ZXVlU3ltYm9sXS5hZGQobWVzc2FnZUVsZW1lbnQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1ub3RpZnktbWVzc2FnZVwiLCB7XG5cdFx0XHRtZXNzYWdlRWxlbWVudCxcblx0XHR9KTtcblxuXHRcdHRoaXNbY29udGFpbmVyRWxlbWVudFN5bWJvbF0uYXBwZW5kQ2hpbGQobWVzc2FnZUVsZW1lbnQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBgYGBcbiAqIDxtb25zdGVyLXNlbGVjdCBkYXRhLW1vbnN0ZXItdXJsPVwiaHR0cHM6Ly9leGFtcGxlLmNvbS9cIj48L21vbnN0ZXItc2VsZWN0PlxuICogYGBgXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzKCkgeztcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdHJldHVybiBvcHRpb25zO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7O1xuXG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbXCIgKyBBVFRSSUJVVEVfUk9MRSArIFwiPWNvbnRyb2xdXCIsXG5cdCk7XG5cdHRoaXNbY29udGFpbmVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltcIiArIEFUVFJJQlVURV9ST0xFICsgXCI9Y29udGFpbmVyXVwiLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIiBjbGFzcz1cImNlbnRlclwiXG4gICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItb3JpZW50YXRpb24gcGF0aDpvcmllbnRhdGlvblwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIGA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChOb3RpZnkpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEhvc3RTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBIb3N0U3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdEhvc3RTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIGhvc3QgeyBcbi5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufTp3aGVyZShodG1sKXtsaW5lLWhlaWdodDoxLjE1fTp3aGVyZShoMSl7Zm9udC1zaXplOjJlbTttYXJnaW4tYmxvY2stZW5kOi42N2VtO21hcmdpbi1ibG9jay1zdGFydDouNjdlbX06d2hlcmUoZGwsb2wsdWwpIDp3aGVyZShkbCxvbCx1bCl7bWFyZ2luLWJsb2NrLWVuZDowO21hcmdpbi1ibG9jay1zdGFydDowfTp3aGVyZShocil7Ym94LXNpemluZzpjb250ZW50LWJveDtjb2xvcjppbmhlcml0O2hlaWdodDowfTp3aGVyZShwcmUpe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoYWJiclt0aXRsZV0pe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH06d2hlcmUoYixzdHJvbmcpe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoY29kZSxrYmQsc2FtcCl7Zm9udC1mYW1pbHk6bW9ub3NwYWNlLG1vbm9zcGFjZTtmb250LXNpemU6MWVtfTp3aGVyZShzbWFsbCl7Zm9udC1zaXplOjgwJX06d2hlcmUodGFibGUpe2JvcmRlci1jb2xvcjpjdXJyZW50Q29sb3I7dGV4dC1pbmRlbnQ6MH06d2hlcmUoYnV0dG9uLGlucHV0LHNlbGVjdCl7bWFyZ2luOjB9OndoZXJlKGJ1dHRvbil7dGV4dC10cmFuc2Zvcm06bm9uZX06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9ufTp3aGVyZShwcm9ncmVzcyl7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9OndoZXJlKHNlbGVjdCl7dGV4dC10cmFuc2Zvcm06bm9uZX06d2hlcmUodGV4dGFyZWEpe21hcmdpbjowfTp3aGVyZShpbnB1dFt0eXBlPXNlYXJjaCBpXSl7LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDtvdXRsaW5lLW9mZnNldDotMnB4fTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiw6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOmluaGVyaXQ7b3BhY2l0eTouNTR9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtmb250OmluaGVyaXR9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyLXN0eWxlOm5vbmU7cGFkZGluZzowfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzcmluZ3tvdXRsaW5lOjFweCBkb3R0ZWQgQnV0dG9uVGV4dH06d2hlcmUoOi1tb3otdWktaW52YWxpZCl7Ym94LXNoYWRvdzpub25lfTp3aGVyZShkaWFsb2cpe2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6c29saWQ7Y29sb3I6IzAwMDtoZWlnaHQ6LW1vei1maXQtY29udGVudDtoZWlnaHQ6Zml0LWNvbnRlbnQ7bGVmdDowO21hcmdpbjphdXRvO3BhZGRpbmc6MWVtO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7d2lkdGg6LW1vei1maXQtY29udGVudDt3aWR0aDpmaXQtY29udGVudH06d2hlcmUoZGlhbG9nOm5vdChbb3Blbl0pKXtkaXNwbGF5Om5vbmV9OndoZXJlKHN1bW1hcnkpe2Rpc3BsYXk6bGlzdC1pdGVtfWh0bWx7aGVpZ2h0OjEwMCU7bWluLWhlaWdodDoxMDAlfWJvZHl7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO21pbi1oZWlnaHQ6OTklO3BhZGRpbmc6MDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1mb3Jte2FjY2VudC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQ7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LXdyYXA6bm93cmFwO3Bvc2l0aW9uOnJlbGF0aXZlfS5tb25zdGVyLWZvcm0gbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6Z3JpZH0ubW9uc3Rlci1mb3JtIGxhYmVsOmhhcyhpbnB1dFt0eXBlPXJhZGlvXSl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5tb25zdGVyLWZvcm0gbGFiZWw6aGFzKGlucHV0W3R5cGU9cmFkaW9dKSBpbnB1dHttYXJnaW4tbGVmdDouNHJlbTttYXJnaW4tcmlnaHQ6LjRyZW19Lm1vbnN0ZXItZm9ybSBsYWJlbDpoYXMoaW5wdXRbdHlwZT1yYWRpb10pfmxhYmVsOmhhcyhpbnB1dFt0eXBlPXJhZGlvXSl7bWFyZ2luLXRvcDouMnJlbX0ubW9uc3Rlci1mb3JtIGxhYmVsOmhhcyhpbnB1dFt0eXBlPWNoZWNrYm94XSl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5tb25zdGVyLWZvcm0gbGFiZWw6aGFzKGlucHV0W3R5cGU9Y2hlY2tib3hdKSBpbnB1dHttYXJnaW4tbGVmdDouNHJlbTttYXJnaW4tcmlnaHQ6LjRyZW19Lm1vbnN0ZXItZm9ybSBsYWJlbDpoYXMoaW5wdXRbdHlwZT1jaGVja2JveF0pfmxhYmVsOmhhcyhpbnB1dFt0eXBlPWNoZWNrYm94XSl7bWFyZ2luLXRvcDouMnJlbX0ubW9uc3Rlci1mb3JtIGxhYmVsfmZpZWxkc2V0LC5tb25zdGVyLWZvcm0gbGFiZWx+bGFiZWx7bWFyZ2luLXRvcDoxcmVtfS5tb25zdGVyLWZvcm0gYnV0dG9uLC5tb25zdGVyLWZvcm0gaW5wdXQsLm1vbnN0ZXItZm9ybSBzZWxlY3QsLm1vbnN0ZXItZm9ybSB0ZXh0YXJlYXthY2NlbnQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZToxMDAlO21hcmdpbjowO291dGxpbmU6bm9uZTtwYWRkaW5nOi40cmVtIC42cmVtfS5tb25zdGVyLWZvcm0gYnV0dG9ue2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1mb3JtIG9wdGlvbjpjaGVja2VkLC5tb25zdGVyLWZvcm0gb3B0aW9uOmZvY3VzLC5tb25zdGVyLWZvcm0gb3B0aW9uOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1mb3JtIGlucHV0LC5tb25zdGVyLWZvcm0gc2VsZWN0LC5tb25zdGVyLWZvcm0gdGV4dGFyZWF7Ym9yZGVyLWJvdHRvbS1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItYm90dG9tLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym9yZGVyOjA7Ym9yZGVyLWJvdHRvbTp0aGluIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dGhpbn0ubW9uc3Rlci1mb3JtIGJ1dHRvbiwubW9uc3Rlci1mb3JtIGlucHV0Om5vdChbdHlwZT1yYWRpb10pOm5vdChbdHlwZT1jaGVja2JveF0pLC5tb25zdGVyLWZvcm0gbGFiZWwsLm1vbnN0ZXItZm9ybSBzZWxlY3QsLm1vbnN0ZXItZm9ybSB0ZXh0YXJlYXt3aWR0aDoxMDAlfS5tb25zdGVyLWZvcm0gbGFiZWwgaW5wdXQ6bm90KFt0eXBlPXJhZGlvXSk6bm90KFt0eXBlPWNoZWNrYm94XSksLm1vbnN0ZXItZm9ybSBsYWJlbCBzZWxlY3QsLm1vbnN0ZXItZm9ybSBsYWJlbCB0ZXh0YXJlYSwubW9uc3Rlci1mb3JtIGxhYmVsK2lucHV0Om5vdChbdHlwZT1yYWRpb10pOm5vdChbdHlwZT1jaGVja2JveF0pLC5tb25zdGVyLWZvcm0gbGFiZWwrc2VsZWN0LC5tb25zdGVyLWZvcm0gbGFiZWwrdGV4dGFyZWF7bWFyZ2luLXRvcDouMnJlbTt3aWR0aDoxMDAlfS5tb25zdGVyLWZvcm0gZmllbGRzZXR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyOjJweCBzb2xpZCB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTttYXJnaW46MDtvdXRsaW5lOm5vbmU7cGFkZGluZzoyLjVyZW0gMnJlbSAycmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCV9Lm1vbnN0ZXItZm9ybSBmaWVsZHNldCBsZWdlbmR7Zm9udC1zaXplOi44cmVtO21heC13aWR0aDo5NSU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjFyZW0gMnJlbSAuMnJlbSAuNXJlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RleHQtYWxpZ246cmlnaHQ7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7dG9wOjA7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWZvcm0gZmllbGRzZXR+ZmllbGRzZXR7bWFyZ2luLXRvcDoxcmVtfS5tb25zdGVyLWZvcm0gYnV0dG9ue21hcmdpbjouMnJlbSAwfS5tb25zdGVyLWZvcm0gYnV0dG9uOmZpcnN0LW9mLXR5cGV7bWFyZ2luLXRvcDoxcmVtfS5tb25zdGVyLWZvcm0gYnV0dG9uOmxhc3Qtb2YtdHlwZXttYXJnaW4tYm90dG9tOjFyZW19Lm1vbnN0ZXItZm9ybSBpbnB1dDpmb2N1cy12aXNpYmxle291dGxpbmU6bm9uZX0ubW9uc3Rlci1mb3JtIGJ1dHRvbjpmb2N1cywubW9uc3Rlci1mb3JtIGlucHV0OmZvY3VzLC5tb25zdGVyLWZvcm0gc2VsZWN0OmZvY3VzLC5tb25zdGVyLWZvcm0gdGV4dGFyZWE6Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpO291dGxpbmUtb2Zmc2V0OjJweH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmxpZ2h0KXsubW9uc3Rlci1mb3JtIGJ1dHRvbiwubW9uc3Rlci1mb3JtIGlucHV0LC5tb25zdGVyLWZvcm0gc2VsZWN0LC5tb25zdGVyLWZvcm0gdGV4dGFyZWF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItZm9ybSBidXR0b246Zm9jdXMsLm1vbnN0ZXItZm9ybSBpbnB1dDpmb2N1cywubW9uc3Rlci1mb3JtIHNlbGVjdDpmb2N1cywubW9uc3Rlci1mb3JtIHRleHRhcmVhOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDoycHh9fS5tb25zdGVyLWZvcm0gYnV0dG9uOmhvdmVyLC5tb25zdGVyLWZvcm0gaW5wdXQ6aG92ZXI6bm90KFt0eXBlPXJhZGlvXSk6bm90KFt0eXBlPWNoZWNrYm94XSk6bm90KFt0eXBlPXJhbmdlXSksLm1vbnN0ZXItZm9ybSBzZWxlY3Q6aG92ZXIsLm1vbnN0ZXItZm9ybSB0ZXh0YXJlYTpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UmFsZXdheTtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBRko0QUJJQUFBQUF0M0FBQUZJUUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR29FOEcrNDZISVU4Qm1BL1UxUkJWRVFBaFFnSWdRb0pueFFSQ0FxQnVneUJtbkFMaENJQUFUWUNKQU9JUUFRZ0JZVVVCeUFNZ3h3YmZhUVhhSmVmbU56MFpvbDN2NjBjUGVaTXBHNEhKU2prNXFJSU5nNkNHTWdsWmYvL24zRjBqT0dHRFJBMXJYZUluY0pJVWtOSEduNjlxTVJEVThaYWpqczlVYnNtdG5xbkUzdjN2cWlRbWZSUXBMa0tXNlFad2FsNnM1SVVpSk5VU1VHL093b0RZNkI2NzVPalNqa0RTU011MnBlZHB1OXZKSUxVbEpkNzA3RCtlTEhwallESTRlMXVEbkxqSEh2eHBEWEdNeWR1TExuMXF0MEZDUU95RnNKWkUxK2tKcTNUK0llN0JKRklOT0FOYmk5dlRVemhJN1c0R21VTDBsV2pUL0ZRUWkvbSsreHVQUDAyb21SSGU1cG40RGdmTlpmbitSOXo5Nzl0bUVlTmFxMVJ4UnFIVGpUUE5BMkpGRWdySGRvL250L1cvNXpiZ0dDeGlhNkVrVmlBMkZoWUdJdFJtRTFadlZVdnF0U3RiN012cmQzVzcrdDIrMFhkb1RuenpqWWJwN21TSExBQ2toTVdnQ1RMNnMwV3YwQVVvaEpmRXFFM29wUGQ1OGlrSm5LbG8rM3VhZVNIWUo2ZmNJY1hqZCtyS1VFc2FFbFRxbFVsVlJtL04rZS84aVAwTDVBS296TmxKMy85aUJ3c2hNNnY1SklVSnlrZ1QzZmRyT21xNkxjcytaK3EvWHNBWEZ4RUVpUUlVYUtvc0ZuN2N0VCs3QkJTNWRxRG9sSlh1bmJsN3J0dHpEL3YzODRMZnRKYWdGRkFMWVBFNUE3Z25NclpCaHQ0bFhxc2JaS21iZHEwVHRPbXBtZ05pdWdNMlBZQmM3M01yanE3R0xzb1hIY1RwdDl1UHZGRHo4ZU4zZytzeHJQUUF3NkRURk5wL09aSTlpaW5OaXRaaFJtcFFPQ2tkb0JkQU5qVldsYXZNaXR3RE5KWC9wWUlBa1Z3bk9QL3ZXNXh6b013N1NBRkFLVStaei9rblAvWjlqK09kZnJMOEtlMnZkS2JtcGh1eEpTdUw4RVVBZ2dISWlCSFArNDQ0RUR6djFQVFEzWWtPY09TbFRIbWo2VXNkZm8yTCsvanBZZTdJSFdjUVVnY2drcExGUjFZVFc4Q0dLUVg5YjhHRkFBQUg5dG80UkhRNkdMdkZScmk0RGl3VHpBQURETUtEUHIvZlozVi9xZGdQbWtHektURW1XRVhiN1EzdHRnVFlxbzJuUDYvKzk3WGYrRi85SkhBVnNJSWNBQ0Jad1J5a0dUN2dDUjhWb2hKY1VPT1NEamlTYkFwaE1vem0ySlJwdEJ0VVc2OVhiTkZHM0lWeTJLTG9rNDgvTGZzbTUyN0lhcUJMTXVCYk9GSXdlRlVkMDF2ZUwrWTh4V2h0emNxVG0yQ0lUYzVlTEp3U0k0ZllsTFlGSVZIQXMvL1Q1M040L1l4MWhLR1UrSFNxRXJkcFBQbnM2ZnFxV0pzTmJaYUNsUXRqbE9MVU1zaGNkb0E1VFFzczRKTGM5MFN4Q09NTVVLNEtQOU5zaHB6cFg0dnd4S0NoQ0FTUkVSRS9MS3NXUmxKd05LQWNUblhBaEV5M3IxS0hjWmEvWWRYNTg0MjAvaWFYbXRHaG9DQWlJaUFSMjN2L1A5K0tUQUNBTjVoZGtDM3hVQzRFTHNnZ3ZrUjJrckVqWVNFdjBCS1NtSENoSXZZT0NBSmtLUWd5WU1NMlFvVU16Q28xNkJKODVxQVdDQ2RIZWszQUIwT0RMMUxxMFBnVGUzaFN3MmZoaTRYaFB1ZXVRV0VINnh0SUVRQWJHMk5tNW9WNTRRRlAreUtnTzJENFQ1dC93ejJYVzkyL3JwcXBMVFNJUDhxVjl2THZPZHMwTkxXeVg1MUs2b2ZidlBaRTFwYWY3dzMxOEM5WnRocTdmMzJiZnVMNjRWWkh3NTE0WXNtNWxnZk5iZkc3Vzlsc1VBNEVHejcyM3Z4d0d6cDRmUlIrbVA4THM1QjdLQjJlREpYYzZ4d2xHNjkwMnVnN0F6TEE4TlkyMUIyZEIvUDVxZk9WOHQxb255TDVqWkREZlFJNVJnOEQ5OEZ2SHN2Y2xIdUpzcmR2c0pycGMvVHIvZ3UvRWZaSnpYVXpwV2FEajdNNytVUDgvOEVrQUFWYUFTL0NSK1hzL0pONFlhSWNPMXhIWmNVYU1NYmtscnBLeTdOZlFKS1FjVVJhZ29HbUNXK0hBNkVOdmJnMzNzbDJwSVlSbUU5YklIYjBtQTZrazZsTjVHZHlNTjVFYm1RaHhIS2x3TWdUNThjZ3c3cGRVUno3bmZNY1FmY1UzdkljelZrZHJoWDhYSHE0MDEydEZPZDdrVC9hN3A3bTgzV0E3MUY3YU85TStkanZkZDZqN2Z4bStEMVB1M3ozdWlydm11eXphNTN0cnY5M2xUYjgyUlQyS2FGVlVLTU5QMzZCdlFNQ28wR3NFZGtMOHMrekxnMUV4Yk0wTmdDV0F4Z3pmODJERzFLWE1mYzRyak5jUWZIS3hTQ3VSdUJJNUFvZERERGtHZFY4Q25WVkVtRU1haW40U2EwQVhUSTBSQk5wT1lBTFZxMWFWOXZ4SmlVekhLV0NpczZtcDBCdWt4MDY5R3I3NHNuVk5ic29DbWtWTW9wNStwREdhV3oyc0xEcjJpTnQrb1pPMGIzNllTSWpXY3h2bmxOMHgwVmhsWW9XNFVSalhYS3lMRzNZM3FvTGRFYXpIQUVFb1Z1TWwzRERlRVJWcEcvamVURVIwQ1VaRVUxbW90cUZvaXdKRktVYURGaWFjU2xCSnJFalNRS0ovQ1NGU21TS2sxNjFRbGtkS2V5U1hZenNkWEtpNkk5aWtOSk10Q1VLbE91UXFVcTFWSFQxenE2K2x6ZlFOQUlhNUpwUm92V2FFUDdaeHVObVRqTUxCWXVxM1hVVGdOZFJEZDZVcTlBMzNjYnhBenhERE9OMEl4YU5WYXhkLy9zL2FqeEFFNkpuUGJGR1prdUMzdWFOVThFc0RTTFpWbXhPajFQZDhIUXhYU3BlZGtYYXdiVzZ3Wm84KzZEcml1UUZGdzVJcHZuSmg2L1pnRkpLOTMwYUVNMlhKM3lKQjBESG9waGJxZzB1cmt2TUlnWWx0YkdSUGNka2Q3VmovTlY0cGJBYmErL0U0QmpDZzlwNVplcmkvcGRNMENHLzd0WFpOeFZFKzZiWWF2UW42dW1Xd3kzRlhmNmdnK1huQXRIRGdqa1BOaVVicXBvd3ZEVXZiUmxjajVYWkhZelY4Smk0TmwxdmpzT2hyTWF4T0h4ZUR3ZWp6L1ZJSEpYbjZIMHdoZzZxRk9FVXFRbzBXTEUwb2hMQ1RLSjB5UTVMVTl5UlFwU3BVbGZabkFTQmtXcGxDbFhvVktWNnFpYlRCdE1tUUtZWVdIVlVVZnRHSXQ2Mmxkbk1IM0VwaVUwcVZRcUhiQ0x4T1UrRTQvMVhMZkJFaHpLaGdVY2dVU2hmeHdtRHo5RzVFUkFBSEw3RkhSS1F5cm53dXhRZjVyaEhCRUJSSW9TTFVZc3pVYmM0cnRNZHBsMjZGZ2Q1NXRnUUc4eC9mQVoySnpJdkdibWxyY1hBbTN3WEthN0VsZlBjUzJ0eGZxK2VnZmlIR29ETXh5QlJLSHZ5M1NKMzBRNlY4KzZtZGZac2FGVjNlT1VLc1dNeW5raHlMMXU0VkkwTDFTSkxJeFh5WXpwTHlOcWlXejBYVHBrYVR5bjFaRHRpOTBtWTAydjB0VXF0elNDbCtxcks3ckl1djF2OVJEMHNneHFHYkpvR0dmRWtsRTFZenIyOE8xbDJLZXdYOU40QURhTjFiN0wwSWFSVFhPdXk5eWl1ODJwT3dIUUJDK3BsZENyT21LME1nL3IxdlJZRW0zREJFY2dVZWdtVXgwM0c0K3dpdFFnT2ZFUkVDVlpVWTNtNHRtRUl2d1VLVXEwR0xFMDRsSUNUdUkweVRxdEZjbEVDbEtsU2E4NldFWjNKSnZzRldpN0l4S0pPQndPaDhQaGNFVHJSTjN0RHBsTUpwTmhSSWFpcUFpR1lSZ21jYmtzeTROb3ovcm9mUUw3S2NhbE5EMEZPVzNSR1p1T0JSMnhtVk14a1Vna0RsMFg3dUppdXRTOGJOR2FFK3YvWlFPd3FlODZHSUllRXNDdW92V1lmQ3EydHZwTU9CTjdNek82OEdXWExodG1nVzJmZmVIcDFNdTdxd1g1TkR3VGtwQ1NjZWZCa3hkdmZpbkFSSVJJVWFMRmlLVVJseElBaVpFMHJWcTY1SW9VU1pVbXZlcVVNcnBzL3oxWldFWjVZQmdHQUFBQUFBQ0EwV1pzZDFDcCtIdytuMi9jT2xrNHJEcFNsMUszSHIzNmpnMUNUdHd6T2NOdUNYWU5naURZaG90SDFvZ09MUlN1eDhuaWw0cjJpWWF2MG5vcnpYdloyblpqWkxmYUtEK1ZSZ0gvZmdObXBrRmJoZ2lHaVVhY0dmWE5tSzQ5RlB2WTl0dmJjVG03NSszZmRhbVc2WVN0d2tkemFDSFpjdnEwQ1M0aVU1Wm1OeExYR0JlL3JRb0hqTVAxL1FFR1ZNWkZKZ2JEREovNVQzZXlCY3ZHUFNxVGltSmNDK1lRVWpxR3YybkM3cTNuQjBET3F2MkczVnZsSWhLSVc4TVJTQlM2eVpUaU5HRlgrUkdDREhzOFBZSWRUamRBVUF5dlFrd1NDcHBoTmQyMG1wdU1qUVhLQlFrV0lqUXBtSlJVS1l4S1hjTERjNmtJZkhhVEthT01TYzRNc1ZSWVEwZXpVNkZMcFZ1UDN0TEh1d3ByWWZ0aGl3aUhGQVdrU3BtV1J0KzZuSjZVMThDdXlKODVqMngwYjBkN045cGlicTBsYjROblUrcE83dEVVTGloZFVPMmhycHRnWVhDc3hCRkEzbFEybm1GYzNGYlJqR0JnQ2Q2QlVIN3FuWEJiYWNqc0s5OVJmSURNQUZrQnNvTytuWmc4UDBCQmdNSUF0UUVhbjlXUUVzOU1BSE5HODU1NHdhK0FybnF2VFRqcEdTN2UvaWxQbWpBUlBtbnN4V2tkQUFSeU9MOXlBaHlteDdTR0tsazdHaDQ4dkR2TmZkZytJVEJacEQ5Z3pnTUlCd3dCazV0bWtFWElxcU1NYUVUZy9IVWUyNm9MVFRwNHc0ZzlVa1o1YmdieEVIdEN5VExZUEhtSlVxM3VKcHF6dlNOY3VtYkJkWFlRc2t1MUM5Mk44alR2REZFVTBydjgxN2dtcXNHalBmUnVOanZlclREbUhDRTRxK3Fiek9qdUlJdlJhRGh6WjEvVkpVcGhoaU9RS0hRd3NaNVRqZ3VBQjhDdUtyK1lJTUtld0lvTU81eHg5ZTRBRUJURFNZcG0yT1R5OG9Jb3lZb2FqZWpVUWI4SndEL1hCNWlTc3dVaWdoQXNSR2hTMENnekp6WE1DVFUxWEVaSGFUQVhUQ1FTaWNYYlk0VkNvUmdMRXhzdGxkQ3R4WjFhVW5sdXRHaHRPUXQxOC9SVWRWcGtEQnZiUzRuRW9ORm9OQnFORmlkWG4wV0pMSkNyVThDVWJxcU1oWkdwbStGOEViQklVYUxGaUtVUmx4S0VFaVZWTFZOeVJncFNwVW12dWdBWmhBR2x5cFNyVUtsS3RicG1BNndyUUxjZXZmcWFFN0RUV3M2WUhtMEUyZGNsaVdXc1dFM25tUzdHNWI2dUdWblBuTnV5eVdiSHd4RGpwV2s2TStqMjBlWU1MUS8wM1ZNbUttNFpuZ2xKU01tNDgrREppemUvS3JkQ2tWTWxLc3lJbW1lWmYwR1F5d0pCRUZ4Qy9yZ2dDSUlnQ0lJejkwYkRFd01UajhmakFVQXhkUzZWc0RjczFnOHdmWUNYck5kOThTSDhnYWprNXZ1VVBxZzRYRFA5Sm03b0dXdkdYeFNkRUxMZnJzRVNFc21XWFRjTTNjTHRIRlNHYlNIQkFqY0NpVUlYSnFIbk1sT0xSQkxhc25VSzJTdXgxenFuTUIvWk1HT3gvelB1OG9oREFEQUFPQUFDQUFtQUFrQURZSGdsQ2tDdUxWQWlTSUtGQ1Awa2hXTktQRlV3YmR5TCtzREJ5ZWdrYUoyV0VNdFdyRTYvNHZwVzdHNmU0bUR3MEJmeFpoRnQ5R3ZmaFBFQW15ZDRjTXRVcXNQbDRheTdHdWFrNXQwTjUyT093SmFCZ1NOSHNrMk5oN3FFV1pZVnE4ZStrc3hqajNFS1NYZzhMTmlsUXFGUXpFMWZ2NXR2cFFRRnRGSW15THRpdlRlV2tRQ2s1WlJlMlFpSjJackxZRFY4Nk1CWVdYNXhBUHVuazF5bnRaMng2YWJOcmlYQXNoV3JjZmtVNjN5L2ovbStnbnpOOEkzWXR4emZDZU9pQVBpN1loMXdCQktGenM3MldybGlmV2IzbitzT21rU2l6WEhUWHBtdkFuT2dlYSs3UzhGMUVIUDhuVTRJbkZZNFE1bVdwM0JBTGxlc2E3Qno0RnVPYkU0RVhSbml5azhodENPaWs4dmxjc1dZSUtyNC9jSE0zWFhJY2N5T0RzQlhIOVIzTklCalVzZDFmaWRqMGlpbkg1cmlaZlVPRFRpRlF1bHplYXg3K2pIWlZ5eGYzOFUzeExkcitVN3U0M0g1OUtlZ0s5NUp2d3Z5cW4zSWd4THlVRzJZNFFna0N2MUJURCtJdkNNUE1nMGxWWVJCblNJUWthSkVpeEZMSXk0bENDVDJobTBzRUFnRUpURHJxYjRnSjJKWW96U1VLVmVoVXBYcWJOclorWmhlamIrNXJIckd6Y2NMUWhKU011NDhlUExpemEvS3pRbk1DRUt3RUtGSllZR3lOeUsxbHRKVS9KNldtRnhVcUxzSW5YU3MzNHM0QUpuVE5QOUpWODFaVzA4YndveHdqTW9HZysxZ1BQeHdBTWVaa0JFRStWc3Vwc3hvOWNXUzVpdm5hU1VwRkpRMVRFYnRleUtqTUFMbFNRaDZSSzNnQ0NRSzNlUVU0amJFQzd1cS9BeUNESHVDQlFUc2NNYlZ1d01VQkJURFE5eVFGTTJ3eVJueUVTeEtzcUpHVTNSaUVEUFhMOURaNUY0SXBBdVNZQ0ZDazhJR1pWTUZDZE9rTHVFMUlLVkZsR2d4WW1uRU5lTkJDVlNKa25KRWorU01GRW1WSnIzcW1ES0l6R2xrU2JiZDlITGsxZngrM2UrVkNwbUtvaGdseVVCVnFreTVDcFdxVktjYVVHM1VsZnBva01iYXhOQXNMVnExYVU5R0lsT2Z2SmxNcHBqSlpESmJSanRhTldrL3J6V29NSUlhTldlc2F1dDAzeU1PMlB4SUk2TUJFOTFxZm9EeXhDU3dnQ09RS0hTVDZRVnVEaDVoRlhscHRyZ01qeUJLc3FJYUwxN0djZGtBNThBOGdDWS8zMlBMYndrbkNRQkFObXRDdzZOb0JyVklxemJ0T1VzV1U0MDVsQ3daMXREeDVwMW83VEVkSkJnU0dMNzc3QkVqbzk0YW85b2p0SzlidjUvaEFNOFJhNDZTamdtZGVMek5ETWhpVUhudTdRbUREQlorSVVGaVRjSm9IY2xJa1NwTittWkdjVGNINUljQnBjcVVSMFdvVktVNjZxWjN1c2VnRjNtbitiRmxyaXE5Qm1tblY3UGI3RzBSdENhc093S1FaRWdoNDg2REp5L2UvSjZKcnoycnZ6MTE4UGs4UHAvUDV5LzlOUEppcjlnSnd5bEtyVXk1Q3BXcVZFZmRWRk50aHJXZ1ZadjJaSVNZZXJlQm9KZEhLZWFlZzBKN1VCZXFSOFNPMWFuM3BGQU1LTHdJdFZTSisrRm1uaUhFc0ZFUVcrcGVrb001SHFmNTBseEJMTHY5ekNNQVpUUFExN245WDVrSEZYN2M2UTJKdmIrS1NJc1NMVVlzamJobXZKRUVXeExISkRYTVNLNUlrVlJwMHF1T0lLT0x6R2xrU2JiZDlITGt5VmVnTUJXNVVLd2tHV3dwVmFaY2hVcFZxcU9tajlwNXFsTlQzLy8xeHNpQVJDS1JTQUJBQlFEQWdFQWdFRjRrY0hQQTR5L2YybTdZR281QW90Q1ZTU0lhVGVWR0ZBQWx4MVJJWlJ2R2M1ajBKSWVvY3h6enBLdGNheWN4STFoU3lWKzYxL0dDd3V6QU1mUU13NkxUS2Q4b3NGQWNyTlZEUEllRnM2TEhGeGxOeXRpZURqYjhHT1FRYmhTSXRqMDJnSWc4T1ZiVWZnRi9HdGthQ3NNTVJ5QlI2RDU1bWNQakxiWWtJOEowd0p3WGYvTTFubzlkalRWZFdocGlENE1qa0NqMEdZWTZrWTFONVE0RUtnVWhXSWpRcE5DamJLb1NDTk9pWG9aYlZGOS96c0xkR1lHZ1ZiTXp3Snd6OCttcVUyc2pZMUJyY2psM2ZHL3NmejZxN29nMlkzNHZmcGRVaGUvQ1oySEg4eUFBL3hROEQzbXlBSUROQVZzQ0FKYlpueGkyY0g1czJjUkp3VmFPbTJXV3N0UEdaeFlaQTFLSVI3bXQzQXpBbXRrRlVJNWlsRGNBbTJRd29qRlhCNnIzSXNCeVZxNWwrdE5hYmN0ckYrUXJBUStsa2lVV3ppSEdLV2M1dTFGVWRNS01obnhpeG5BVTRsa2FBbm8vbmh1U2NFbkhyUTZRRWRvUjJGSVE0R0ZuWUhrZkJnSlR3Tmw0MnJRSDdkVjZJQkt4NEdESVBUU1BBdFlIY3VhL1V6ZVAxZXBaSk5hdE9BU3FGRVFrWUNXU2pLb21jdko0US9sWW1SNmJXaUVXV1ZJRkFOYUlUT1Z3MlpWSHpyNU16Qy8waS9EMWt3RVdWRC96VDliNkRHNjMyaUs0VXFDN1RQMlVOYm5rRVk4NjRYWWlLbFcrQlMzRlVLeEhEUVlvKzhCOXl6MXc0aDA3QmE0UWtrekwwTEdKR0lyclorY05YdUIzUHc2Y2VkcEFNVTZHelJRcURXN250QitjV2lzRnlvM1dDbVFqTDBNbVhvQnFOV1JGSVpJN2dEWGh0U2N0OExwQmZrSHNSUTZYcFZmSVJ2WkJVOHA4NUY0aEg4RUtueG1FWW11K0s2Y1lZM2dRZTErL1R6SkFJUkYxY0t2Tm1uMlEwTThhT1dzWGpUOWp2QkNyNTIxeHF0V1ZJNmFwTHBlaEtjeFp1VzlCV0xKM1FHcWY5SlRpdXZ2VTB3ZGdody84SUJSSVgxVnVOUXlzQnFTdFZOUFhaRHRMK05pdmN3aTFQZ0QvNU8wb3ltMkorNzhvbjByeGdBOU9DbGEwZ04wSkVQSFkvWVA0bmhJYXdiRUoySGxVblI5RGJ6ZldNUEF2eGtydEExNHg2anJBbVlVY2dSZlJsWm5uWXhzMnkrb3dMRHdrUzJWazNkZmpBQVVWSUpld0QwNnR6K0F1dzZwSXF4VGw0ZG1qb0dsWVFYRE1iMzFGSlBzKzY3ajlSTmdzSFlnd3dPY1l0dWZLNlZoQ0xNdWM0TkZUYnY5cEVRakZOak5yMExXQUpCM1hHSG00eDduQlJmWG1IUWhRMGJ6cW1PdFZUbnllUzZ4MUhiQy9hcmovWGUvN3FNT2w3TTBlVW5EUGdoeWlzRjhxSW9GYmhmRWdxeUQ0bzNvMks1UkxyTUpZQ2FDNWdySHd1cEROc1ZvWEZJMys5V1lQYTFsd3ZPcDkxZnZhbkdob21KaXA5N3VwTkhtT0greWIxK2hMSXBkZHIyMVJpQTEzSmliNzlrNnBUQjNkRkFvNzE0cFExeVJaYlRYTXlkQTdtUUU5UkZHaEwvT3hySGpkUm5vMFhkZjl5RWUwblhGZk9lcnpZK0RPM2ZpQldCRk1BbXFGYk9lZ2tBcVhUVm81ZlM2NnlPSVZsTENTZGNwNjh1ZTR5SmVsaFVQdFU2Vm0yam5OQVBxd1dhTm5udjF3N0pQNnhRWmF3U0lQbE9GTUVVR3V6UENCYjJkSlV5Z1k2UTl3cjZKVWpKcjZOWmNiRVl3TC9jeFpmZWM4MkxPc01LNDl4WDYyOFA4TnEzVERFY0lBUFp3d2hMdzU4aFBLazVKU29EQkpnaVRMRVN0UEE1MG03U3FZbU5TeDZGTnYwaVNqVTA0em1UYk5ZczRDcXpmSmZsbUMvWVpKZ05Cd0RBYUJpOGVCSFQ1SEFrNElRa0t1UkVSMmNlSENqU3RYWWhKZU1ONjhFZno0d2Zqekp4RWdnSlNjbkV5Z1VBd2xKWGRoMUp5RUMrY2hnZ1lwVGh4S3ZIaDJFaVJ5bGlTSnAyVHBLRG82VzJUSXNGV21URjZ5NUVEeTVFTUtGUEJXcUJCZmtSSUNCbFZvMWFwUmF0U3lVNmZPVnZYcStXalF3RmVUSm42YXRlTXdNZkZuMGNGZXAwNEJ1blRab2xzM3BFY1B2bDY5a0Q1OStDWk4ydWFVVTRST080MXIyalN1T2ZOMldyQkE2RTB5Wk1rTTRidzVod3NXbkM1YWNyaGt4ZW15Tlpzck50eXUydks0WnNkdHpaN0hPc3dHRXd1aGtSaU03VGc0RUM0ZW5CMW5pSkFRYm91ZEVCR1JIVnlJSVJMZWNENThJWDc4NFB6NVF3SUUyRWxPVHFRUlhIQVExNlU0aEM3Z2dDRUFnMFlBQndvS0RydUVsNitHcWJGTlBMV0dBeERBMisybVVTTk9pQmc3dDBTa1MzMW94ZU1ranJGbjJJSWpKempNU1VoT3Vra29FSlNpanlHZ3gySWEvOVpjMDNiK244K2dxa2dTMjhzNzU2Y2pVcDN6d1RyK1JQZTZTZXJsVWRUNWFldWdlL0FIZ0J6OUY0aW53RThxK0g0T3ZJVzM5RmJlV3J5L0JxTXZ2L0tTdXBpOUhrclZlZkc1WjRJYXZmanlXeStwNHNWWHloZVZUNW54SXEvemJ2YmpvcVhYMVplMGhqMEFZRk1RWnMyQmtBZ0ZJR0Z3eEhZTkI5WGRhbXdyM3M3L0NJZmdZWmlmaFQ5Z2ExMHl3dHpkWlkvaGNuZVRZYS9raXo4S0NCb3JoRlo0ZzFsWEJHR1dLQTc1MkVsSWQ5YUxLNFNGTmRWMzI5Ykc3UklJS1U0R0V2aGpyOExVMXdqQTIzczlCbWdiR2pROTdvVUt3cWlPdnlQWkVSSUNLSXpBNldUcFdRd1Y2b0psZTNWVGxqNVR5UEtPam00TmJ2T2cvVDlHVmZ4TkE5aEZoUURTdy9mUmpwQ0YyVzhPQTY4aUN5VCtmMkgvREc4QzZlK20xeC9JSTg3OU5BMzVyd0FBNjhRV0FZZ2xUVEFzWUFDRXFlTis2bXkzd1lvQTRGK2pOb1djTlM4T2lhalFRUDd5TUZhd0lqUVJnU1VNTEkwUTduMVJBWDZSRjhZS0lJSlVvWjN5Z0MrUTJRb3NDa3RPNWx1TUhHVWFFM2VMZThWajBocXBXQXBJRWFsT2FwRzZyZFcrN3FSQUZjQ2VZaWtBNEJQVHNMaC93VVdmT2J4OVI2VThxZkE0U0tuNWc3WUNYQVNRQ1FCWU4za0EvLzFOMWYvazZTLzBZLzFvQnI3NEdYeHgrMk5mMHUrLzdndnFDL0x6ejBFZjlPUkJxam4xUGdMb1pROGIrMVowYzhnTi9sLzJEV2ZObWZLcFgxMDM3ejJMeG4zbHRCWFRiRTVaOElQdmZHL0dKb1NEeTQ2QU14WTJEZ0VoRVRFSkdTVU1Ub1dncGtjeE1ESjcyNFIzL2VIMThTQ0NTNElreVhReVpNcVNyMENoSXNVTWF0U3AxNkJKTXlNVE00dE9iL25OVzM3eXZ2LzUyT2MrOFlYZi9Uc3UzTExNZVQ5YmRYdDJjTmV2WHZMeWFQakZEVStOZ1JjTnVPQjFyM25ETEJJR1J5TlFHRHhPeWptb1ZJT0xoNitVR0F3QWtvUDh3Sk9PaGhiSkJOVXZocFVOTFpxRFU2SjBLVktseWJPYlhnNnRFaFZLbGFsUzdsdVYyclZvMWNhcVZnZHZuYU1RQ2N1V1hISFY1Y2k0V1VRbVVtVTBNTUFtdGdRc0JTenRGM1JiQkJld0ZJQXc1bDQxaWpjYkJtUXA2eTNBRU50ODJkQWt3anhuejdQNzhWVVVEQi9WbXVBZCt4NTZjUCsrdlh2R1JrZUdoMVlzWDdaMHllakk4T0tiRnkxY01EUTRNSC9lM0RteisvdDZlN3E3T2p2YTIzS3RMZGxNT3BWc2JtcmNnV0EwN1BjZWZlVGhoN3FkZHF2WnVQK3VkRzIxbHNUQVArZno2ZHIxbW9wKzBMSjFURWdnUzZDdXZDNW95QWl1YjAxM1lQTUxiWXpUYk9EQVRYNVlFaVl5Y3BVNUlWY1BmSkRsSitvT3Vkc3ZMT1V5Q0hBMGVwU2hSZDRkdUg0S2dFcE1FT1daR2I1RUZjTWpWSmtCVUJVQlJaa0EyWktOUnNBTjErMTB4Szh0aTVMdnU5Q1FPY1p3eG9idFZKWVNOWVNGSTMvZXp3aUxKZFFFbFZBVnFiRmZWajdHRllLVXdpTDJNOWNTZGdObThMSGNzQUlsdjN0K3BUemlrZ2pTOExobnBSQTR5RHBiTzdCY2VraExJUnR5cnNvM2hPRmJpVTI5RmdtS1k1SjgyeFJkOHF5bHNGV2tFSC9iYW44bG5EdjNaeTVlNERWR2laM09RUkRCRDQ2NFhuV1Rtb0ZEUjUydVhKa3psZnlDUk4wakZVTGVxWlZMTlFFWG1WRWxEb3RaTk9maXpRNFJMYmkwSzNWZlFpdU9LT0VTTUZUdjEzVHZpNkNWeVU3V3hNbUtXM1VidERtbkkxN3lYM0hjbndqZ29mb1U0bWFTVWxMbklQb2Qwdzh5djY2b1dJTWRTaUdQVXYydGdtQTRFZGExMEZybnRRbS9lbHRoZnd1aEFIV0tzK0pzLzN6cXRUeFNmY1pkV3ZNQmtFa28yT1dkNWg4VnhrbDF3UTB0V3FmWHhqbmJYVHdEdzVvbVdaNXFkdkhJRGJLWXh5Zzk3MHBKdnpBejhuMzVPTFJrZlNiZERUcFpnTk05bFFKbTJpVTMvSDBuZ3h2SDI5ZEFlWTJRRFF2eFo0elNocFFiaEFqQm13VmJJN0Y3SXZKN2tpTjFGSkdXTnVBbjB6TUV5UmwwaDJOMTdKQ0tpZ0NQS2Z5OW5ITk90enduSXp3bWd1dlpaL1RNQmNRbEhBZnc1RXhIRHNYR3VGdVNlbzN5Q0puWlJiM1c3VWYzYU5aNzNFWUs3a09TbFZKc3dZWXlKQ3RjR00xR3JqOThjbkhoa0ZtdTdQZE93bjFXelIwaHhUblJVOGFCSm14cUg5d1FJSWMvZlVXQkhqOHFySVNqYk8yaFBXN2xSSWFvREpwS3A2V3JWSGIwb2w1TG5LTHlGajJUSGdteTk2QXBaNi9scTFpTlBZOHZ3REt6NWdzK0UvQ1pJQ1B3Y2FjcWNuUmlyMVJ6UHNuQ2dRVmFnNVVNcktHSjZ5NCt5UFlaSTd5aktUSktTVU40b1VUN0dUZGl4TzBEa2ZjVFVkbWthQnpxUGJpNVNpS2ZKYUpEREtZMVpsMTJ1MVJBT2t3U3A3ekhuNlFrYWlwTkxyNkUwcEhnbUlRME8zeEJuV1N5WTIwY3VIMnpXWXhOUTN3Mm1Gd1A4eGs1Y0tlRHNkVWFrS2xMSE5KRzhzNXh6eWhOdHRFQmlSRE5Rc2NDbDJ2MlpBbjFDaXR4TUVqTE13RzlwMWREdGRxaXdKVE5DZkxTcVJTMEF0VnVxUVBJc1FDUlpJbTh4NjZJTndwVENNSkMydllIck5NV013NVR4SjRWaTRIZ1JSb2tpZ0ZLUFRwbjQ1SllneHFoMGJvcWd1SFA2SWdrUVRLVlBwOUJtQ3R5U09KZDZieUUwbFExZG5rdGxjaUdVbXBRTzl0Qm42QUJSQnZZYmgvb1hhcG5DQzc1R0dJeGw4VytaWk9qb0hVaHU3TkMyNVVKb0xkb3ZDMVZvQWkyRkFYcCtNNE4xRHlBelVVamVTdjV3RzdaYmY5RWNUNmpNYnNKMUJwWS9KdG9sN04wanBRaGdMaGNZZlllVVoyQlhxR1VIODVROFJSdHoyZlFkbnpubGxCMThkQ0RNM0JNMFJWbUxYR1BGVlJqRWRRaExQOURpSnZwTnpvVUF2ZWc5WkFMZklqVFZiNGV0NXZQTTlBVVZDMTFKWUJNeUVwSm9MYXdIVnMzQTBDTkQwY2cyL3huWEpOK0lKVzRBS2YxR1NVYTNWQmN1TXJYbFVZVHVnWm9PelBmV0tSdWM4cVlNbWxPTUt3bDd4MGtLdHN3bGYyWlJzcmoxaGcyeXpxQmFQbEFhTWxrUkM3ekc0V2FIYzhBQnJseTBtRFZnUGhLZzYwS0lHc2xuMUZGUUdvQkhZMVRHdjlLZ0pwM1ZvbzNPQkl1QTQ4NW9yaDBjME5HMkxYNnlTQTlzR2NCYW4yUWhvYmduaUo2RmV0dUtTSFhMcDVlY04xRmkxbzNNZ01tS2R3MElyRmhqODFLaVVMRHZSSkRJNUtTVWxLQUZJS3hWekN1Z1V4WHBHZ1pmQWdQRUU5ME5lekt6cHh2SGJQVFZxMmRPYXE4NDJFTjl1eVR6SzJGWXQrV2RRWkRlNFViZUIxOHN3dmxRVUNpRnJiTCt5QzdXcWx6Wk9VYjJWcFlRWnUxbVBVa1QyWHk3MjZOajBncFVtb0VXSWVyL0ZKa2drZ2JBQUw0RGgvMGxvNUpEQk1DN2tnMER0elBvZ0YwSzdMV0xYUjA2UEVOMG9vSEgxbHVlSmtRRFBJV1U2TVpPNkxhMnNndW5GNTA4QzJsWUdaUGxjeDJYSjF0dVhGYnJlNTFDSVVXU2hiNGZvajZMZ0djbWxnK1VDaVNpeGNIOXJKNlRUSmRBQzI0QXBHYnNhNWhhL05JcitoOUllYVhJQ2ladThDNEpMeldUN2dLWVQ3NjM5K0FBakxscHBkWEFMYm10L3pjZFo4bmZJL3N3WE5iWmR3OW1SMVNPN0lmZ1pLQy80TUN3cEN3NXNEMWo0MHdJdWJkdHBCTmNzVkhtdVVQdmhha3N4TTlGOEJMa3NRMzZNL0JPSkFRdDhUQkJTVWJTb2p3SzMyRVliZVFyenVZR2E5bldGaE9LVGxRQnc5Q0ZqOWpURzRKM05nRHZldUFnMVVPaGI0S0FwOXBIZ2FNSktiMFNsb0w3RG9kSHNManB0WGhrdk9hYW9lMENIakRVNnRrS0NCNDJnWkp6UkRjUG8yeE5lSnJaRHhjWGVWM1YyOEp3azBISmhVMDhMdEdEUU1xS09QM1RHb0FJNlluYkVrUndEUmszTzRraTYxSW5xVDgxMnhLYmlpb0JNR0U1RExwTUtyaU9wb3ZGTHRiSWU5eHFNcS9TVFlzeTBaUUY1eWFaYXZwL2ErSDd1YkRucFNzaUJ3SkZhZ0JNaTd3VldjN1VIcWxtdzNmY0x2dm1uVlJTRllSUUVuZ3huSHZ1eDhRMUNWN0FJQXVBSURkQUgxQStMd2crZ0hnUDRDOVFMZ0JBTmFldk9Ud29xTUhVb05nbVZtRXlESTdMcnhMSERYWEVrN1pBTUk5ek9iR3lDR0RiazZHNVVnblRwUGMzK2paUU1qWUdVeXVOWGcrTS9UaWJJMmNCeGdKd2tiMGJnaTRmWmY1QUJDV1Q3QkRTTThZZVMvSjhubzRJc3hRWWs1MXdaS200NENqdzZwVGZRalhqVUx2OWVqUE9WS0ozUGhTMmlJZnVsQUs2c01MdXpZNU9uL2JIemhaRE4yR2FQaDQ2NlpMVVVaRW1XSjNYUkcrOEErdjVZT09sRklNUkZCNCtMald5dVN1U09lcDNxclBXck5Cb1J2R0RXYmdxY3U5NzE1a1h6MkJFTUZVWlhmaHZMOVVEL091bTY0d3o4MUlrc1NYdlp1SU9xY1lSQ3B0K0RVaWdzdUUzUTdidmc4ejlxRXpmOG1mZUhGbjU1c0pSVXVMWXhRM2ZNSFp1Tzd2aGs4TTA5MVF4TEJaMVNlMmlRTlYwZGpFdUNGVGJueWplYXFOV3REVU9icUplSnNCdW5JUTdQS1dxdkhQUEZ4RVhUTUtSamZBRGMrTTliNzVXaXRLZU4yVFR3UE1iMFBBOXEyRlVVR1NhTGhzbGpEQVVBTU1MZEtZUUhWamN3cGdZS293YVVRQzE2cnJoeEJEUlUvYVpnYkVvVXMrQTEwVHhrc25rU0xqWmF5eVJhK1BoS0tOakJUOExvU3FycUJHaXFHU1JpRjVUQkM3aDUzQ2lvZUY0V0ZNVjF6SzVqRFBvYmpIZ1A1YTlzQkREMWlPODRXY0w5NENvNUVkY0lrSGxOZkp0Zm1tQUV0K0FwMUphdHc3djVMeGJTVTNtZUtDV3MxM2NvZFFVWWxKVnYrOHRtdXJBR29FMW5wTWhaZXhUTG9QTDBrZzdVZXkyTUxFdXZNMHk0NUtsd0dsV3hBaG5IZk5qWmFXTmNNNnJKYk1pbWkwK3N6djlCQnFPdXRmUFZFakhqSWJOZDVwYWFObWJIM0ZMSnZpMXRsT3hOc290ZGlPd1Q5bmVQTzcrZVNHRkZUejBUYWQ5WWRtQS9wSjhxRmE1Z3NmYW9pc3c2MUFudDhPdmorMjQyV0szUlZyK2N5T0NHVFhUWjdacTN5SEpRTFIrcWZ1U2JnUGw0VW9Vbm5GTXFsdUg5QVA4UmlPMWthbHN4ZWVIWG5rdU5JZTkrNjA2emloMXM4T0s4NmVrTXI2cXNCczhydVVxNnhGSDBnVWZWc09ZYW4zV1N0QVJmN0Y1MHY2d2R1S2IwWXYyYnNwMnZDd1NxRmFNQXJySUx2WVYwcXgvVHM2Y0Q5L1Iwdm1iN3ErVWo0UUpESGZMd3FhMUwyWVNhS2U2b2NXWFQ2RWgrVnd1YVJ5SHNwTHRpVU1lZnBKUlVZSXZkT3A1WUYrL01oZ0JCMnBmd0dqa0tjY2Yrd1NJK0JWek9YTEdnMWN4VzREVmY5SE9hYUhpU3MwL1IzZGZTaThoZEZ4WWg3TXdsRi9qeWh3RGFnRi9DZTJ6MGh3d0Y0WDVKYkRzRkp1QXdNME5xdGpzR01EQ1Y2R0sxOWhqVUFEYlJON3lHZGhPaDh1d0hMMzBHenF5bG1jdjdhSWc3UW9selBuTHdyYmpjTnYzNlhLYUZaejRpOFBWSGhlUTNvUXBhcUxKREkzU0RrRVhMSE1DSlRaYVBLeWZRVFVXcjg2cUhjVzZaVGU1b003dmF0TkRYa0ZsY2tVUDZHU1VRaFZXaXRGMlc3MTlmUE9aSGU3ZzhXcjdGbTI0eThoSGtUbVJnVjd2alBSWFBxNGREODBhMGFaZzQzZkJWNXRXdnZJNkFCWU9nZkd1dGk4aS9rcXhRdUxFR29HMW81ZlRtbTZuc1dacmRsdUUyYnIwTGdrZFNoN0YxTVM1cEQwRFpEdzhVaXRXS0ZtdXN4MkgyMXhEL2JtN3h4czhPSDFsaVlKU1Z3NFl1andoeFMzMEJ3MjVCN2FDYkd0Z0haVUxJbTZ1ZWF0eGV5cHJWa3ErbEZuQm1SVkFkMm9VVDVDVjZQTGtYWDRrYUtiZGdUbUZoamVzby9LakM4SW1sZ2JMeXJHSzM4UzdKanF0MUU1YUNNaVhvd2ErVVBneTNiSjU2ZG9ISWd4UFBnYndKcmRXdGxPR0o3TUNOKzA1aTZWN1VtamlqaFNtSS9lb2RYakkyV3hRSGphbWZWT1NQeW5XRHQ1OGJveTh5dkxONHE5M0pocEw1cFdCblJHNmxhYTFwRVY1bS91SUFwUk43UlhuVGpJcm1uQTJzSGtacEdjRzZ5czZaZVdYejZkOG5UVGZ0WmhRT2JhQlhtTFZNVnFaa2dOREZnRGk2WGxUWW05Y1UyV1lqcHpTU0ZBU0J0cXFzU29saVVQS1VmYkFEMStwaWJXWjV5YVl6aS9mbVdzSFJYaWNqLzlOcDBaemZpWnRKMzExMWVkZ2ZBdFg4VyttbXYyNTFkZkV3RkF0cUc4dHoyeUR6TGlEdHZhYmVyVytKcU5iaEN4dFNnck02cTRzbFRKUzQxeGFDcEJHaHBwRHJyaVFRV1Y3TmdkajRGNmhTVWptb0xTQnN0WlRkdmRmaEFZbnJCalVpem0rZ3dWdTh6cWhzV2IzeC9GKzVYRVVEVVRRWFFDeHdkSHh5NXZpNllIbnMyOFVpSmgwbjd4SVdDMzVsMnNHVlFxU0xIZjFDTjdnQ1FLa2VHZ1I4YVRXcVcvQmxmNUtDQVFnVG11TEN4TXpSampMSXNSNFFnM1ZqbzYrYXZYdG1zQ0pvWk1Pa2NiekYxS09IR0Q3Wkd5a2xjV014c2VpRHNTbVV3Q1NSYnhNK09NVllneEtnd3ZSNVpOTUNSNDFPUXVIc3p1UTErYTcrdWYzZ01lUDNHUkdYSE0wR09kYkdoZmY3eklhUkVCK094dlRoMDk4QnMzZi9EQVkzcG9EeXJRVXU2VEVIeVVoNWR0Y2ljK09DaFFGamVGK1JEejR0dnFkRDlGdE9DaUEya2ZJSHZlazJQTFJmdEFPOGR4WXU0ZTBMaXo3V0J5eSt3RHhYNlpHdXJaYWJydXpHeldvTyttQytaRmtuR3NLVHVMek5IQ0pDNUg4Z1V6RnM1M1dyQlZNZ0szSWxPQkZML0JFUVdtOWpUbWNSOFVFazBMSi9RRU1EZmdQSFRaQ3FxV0Yvb0tlZXY0VVI0cUdWVVM1enhCME5meXJRZG5UOHdmZEVhTHRwY2ozSmg0RmEvR1Q2WWM1WnVBaTJEanV3YytJYituT0k3dzZNYXFPK0N2S2EwanphZWY0RHFRb2VVSUFrZGttNXU1blBPN1ptd1R6QUE1VlVmeG91UzJHRkFJTUFoQTFTK2ZZWVZJcFBjWGlGTEZDam1nZU9Fd0FVZERJSHc2MFBncEpORDJPRlJGYndJTUVheGhwS1dXNzJYN2xtdzhPWVdPRncyZFpzbjJkTnY4SnArZkZJNFpobVQ5d1pjWmE5Z1N1QUJUcnU4aHc1azBtZUNqN1NzZTlkS2dnSlBSUmdVc2VVVkhhayt4eDhNUTFGR0RoTXFhdWxtblBMbkF0RFlBQ1M5T1c2SmV4ZTFGKzR3OXZKa3o1VXgrcWdXODVqa3h3enc1d1dBVzVtSFp5ZnpPUmJOTXpDT2M1amRWcGhac1Vwc2UrcEdnUnB4bVo0K1o4OWk5cE8zeHhoZzVSaCsvNGJVQ2pFcGg2ME9QMS9HV1pyV29yaTdhWld1UWkrTFpKd1lwMGJOTWVmWmh3eDQ5OWluNkZKY0FLNERtQUdUSWlGV0p4RFR6d2xIZnpmemF2UVlkNHlZTXlEU1lQQ0xObUpDenVGRmJwbzVFdWlpUVpKbVFsckl6a0V4QkdtS3AyTFRqaWtpUHNLZlB2RjJKZEQ0djFFL3MyZTI2c3hnQ3J1Q0I2TXlaTGJzSVAyVGQ5dW5NN3Jzc3RQMkg2RkJnVWxPQjYwQy96WTRxM1F5MHBybmNBUzdKWk04MTJ5WWRKWkw0NGdJRE51NDYyWVJhVHp5NUhLcTdManhqRk9jYnhhWFpwQjByYlpiVVBUT2IvN3F4a2ZUUE9nWi9kS0tSZ0d6N2JmSXNvUTBEeHYzejk4M0xONFlvdm9hYm1OWjJuak9LSG5aOXNSZFRHakpxeElPWU1pZG5Kd1JaRHBrVDIycHBrZElVTlhGU0JoWEtIR3VCaCtobDMrajViU3IyWE1PN1NCM1ZLYVgyQmpyT01tMTRxK1JzT0dCSHN3WUZOcitrWUx6cUFNMDNuakI5OUdqcWprYUR4TWZPYU5yVzZFOVZNbEJpbFRWeGNXUmlBSmV2L1ArVDRhNE5iWXFFc2tkc1M0YTRyVktMS1FKTkJKUUZiU3JmanRCbU1vRVVLU3ZqZkFsQWxZVGpTMFJoMU5IVXRNV0hXNEZuMzBZVTBJNEk5QVBVOXJ3dHVOK2JlbmxTY3RpRVRSWW00ZzRqN3Q0QUpKR29jZW9rT1JnUU04ejBmSDlOTExhU1FSRThXY0M0RmZrYXNDYlpoWDZrNHNTYkdYTk5MZEl2bVFIT0JHb0dWNHRnTkswczkzeGZBdnJpN2VtTUFoYVVnY0dJeXlmZmVYU3BiSGc5L2Q4bTk1dTgvdCtUdTcvdCs3YTRUeC9zby9lNU5Qd3pzcHZLUnJOVGoxenAvay9iL3pYMm9FLy8vMlNXZStOcXZnbVJkVTBhS2p3Ukl2MTZwRTVGVWVuemIzbzc1QWpnSEVPa0lGOStHWEk5ZkVOWUtIOWNSa1B5cVExR2hQWFMrTExHbm1YMmVHNTlrNVRadXlyRlhNOURtVDdLbDRMbW1SellZTGk1UjJmRGtzS0liZkM1cmt4Z0FEYjZSMnVUZmVvMS9KYUpQNFoydFFidjc1aWJ1Rzl2UWErb00rWGF1aUthSFpzOTFySXlRVytyQm1Jb2d2NFlFemgzMTlmZHQ2ZWdyODY1ZFdWNTY0ckorSlNLK0c3aVUrSWViai9lTHhmSTloRlhPdkV4Y1ZkTkM5NVN4eDBwOUkvYVV6MmFWWXhYdmFxNWE5amltNzJtU2Nic0F6MkxhME9PYnIwdkNROVlIZGhBcExsWGEvV011b3crYy8rcVZ2MER5cU1wWExKbWZFTFg4RWFEYnUxeHYrRVd0SkJ2b29UMGEra1cyT2xtNDJZM0FrUm1EUVlYNlByalpXdjkycEprVUJOaVg2Z28yZExoZThZakVRTzF3eXFjdi9QMmoydWk1SDJQeXl0T2QzSk9BTTd1MUUyMi9GcW5mVVJyZHZiMDRpN29YNE5EcnlmSkxSb3VESTdhbXJ2VnE5dys3YXAwMTRqRkZ4cXhOL2VxVjdyODJhbWFjNzEyNVVDd3VVZFg2K2lsQWlsa3ZzV3VHQWhWcW8yTytWT0srZFdDZlFjWjdTcUMrT3E5L3JyTVBJTXp1TVNhN0tHMkZqTmdpTGNrMy8rbzVWdEROMUZ4RGpScHNpeE0zalp3eXdTa0NzSXJ4QkdsbWV4S091eVhTcXdYMUl3V2pLblVhTlNyeHY3bXpxTnVUbFVVVlpxMDNjbGErdy9MZEJPNlc4NXNVYnRJS0lZVktMNkg3SGhXVXJPcjRDRnFaUER4bSsvV2g1UlBIcVg0TFJOeUlnalBGMGVVbERJVHRIT2VxcmJ1bi9WVGlmVUt3V2lobUlwQW8xNE4vcC9nU3F6ZzdsdWowcjdXS0tONk9DUHhsNFhMQjFCYndLRUd2WXdxeXpVYk83bk5xdnJIbTd0b2ZxQk0wZExuZHF1dmRFTEI4bUI1bjF6UFdPamE1SkFxU0VRclhkQ0gzUERld24yaCt3b0phL1dTd3NZaEs5TWpXc2wwNjdvdDNBRkRzbFhuODdkU2hpUm52dm1hNkJPdjhuUU9tSFVRVFJ3dlhXOS9ENnJRY1MwMlhqMzNEYkkvdnorZlhJYnVTcFZ2VnF2SDFYZk52WHV1bWhnM1ZteStyUWh5alY5eVhuUmEyYjJsTGRhL2pIOGJiYVV0N042YTRQaWxUWmMzbWJsakpib3l6b3Zjb3U4dXovdVBJTkR6ODg0Uk9qNndXMjEwdHlPMG9yRlVvUFhYTlFiazlaSlhHVmtyb0c2Wk15OVhVUExhMHo2clNncWxnWEtsYlZCYnE0MHFjWDkzL3QwUGNadnNrVkpsdE0xT3liaHZLa3l0S09ZTS91VjBzVmdUVWVJQkZXRmcydVVPMERmekY5YldCWHRqRGp2U0lIbFYyODJrbkJsTC9iLzlOanE0d00rTUJndG5FUmVENWx6V1lEUzJHcTB2LzBDYm02UmExM3dINUEvcmt0eWZMZTNZMnM4cTlyeGIvS3VyR0lqbUhIcFEvc2E5RiszRzFqUmxObVlvUXc1WDA4WDJmdnJUUG1LU1pEeGRqTXZVcExKSHBEa2RCYmN4d1JUNkJ4R0NCc1F4MUtydFNUbXNlQUNaQngyd2tWM2pmTFRZMElKNmdraTdLZVFjWHVnTCt1YlFqNVhQYnREb3pCbXpvY3RSYSt6TjJreVF1d1liS1gzbmNvTzBXbGtRc0kvT0NYcmNmYjdQR0hKZnlmNFRQdjhPVmkydHNKeWJZemNiTXJnckJPWEdKUHUvT2htQkVKVWZqZ25pR0M2Sjd3Z0N1R0M4eHlWUkZOa1VuZDVBVnFIM0xIQXk4MXdrMHVSeUpXR2RiOGo3MklDMGxjN05iMnNnZk0yNmVVTzJZZmJ3KzFtS1NtWDBKbFBXWkd3MVVZYjZER2t5WlNsRGVzTnQxYlVYbDBaNW82RWZlNTBBV214c1FkMUJwTU1ZZEE0djlQdURRd0hYaUg5NkNiNXNNZWZTQm9NaFo4U2FNL3EvOUM2YkxDNU5HWTBwS2doWk8vMzJxVDBWVUFZcUhXREdxVmFKaDhUVkg5N04wUm5pa2FwZHlsMm5CSklaVkJxancxQ3JqZ0xhNldBelpuQjNlWUVob3NyTDVBWUlaMmEyY3hybmJML1dSaVVSZmRpMDRNeHMyNlRzRzFPbFl2L1BINGNBaFRvZ0orbWF1RUlsaWUwSUFySkxKTkRtYkhNb0UwcXIvNmlMbkNTajE0ZDhOSDVxYVZXOVFSQXRJb3UweTdOa3R1eEVYT0xVR2M2azIyRDkvVGMycy9qZm5SQWhKSVNoakF1KzZXMjE0RDFRTWZFQmU4bmdJK1FrZWNPbU5ILzcrU21kTVBHZGJpRTB5YXRndjdOdkdyOEtCYkN5SUFsMDJsb2NkRWU2MnV2Y2E3dXMyZGN1eWZLNXlDTDFzdkplZDYyekxyd1M4blI3bmRpaDJSV05CdmhTdDdvcFc0czNLR3Y5SjRJNG44ZlNLQ1B1WHFOQWVhTlJVQ1F2Tm1hVlRCQnVOeGpoTm5jd2l4b01HZFJ6cm04ekd1RDJ6U256WjBZYnVqSldreWxyTS9UWWQ5WWRFb3ltak4zWWJiM3JWcmJ3WEJ6cG9QV0p2QjNVZWM4NzE1KzVzYlhDS1pOcGtDSzQyRGZrYzQyRXdxN1JSWDZmUG8yNW91ZjVpZEdXZXQ4OHAydGtXcUt3aEZnSldITXRSck01WjV5MS82N1QzQ1JSNjFzeFg0elV1Nk1wRkRkbnJJYnVXZ2ZWemFuZjJGdEpLY3NuLzZyTXJTbkthRXphMCtjK0hDcG0rcnovZWNnVFJOKy8vYlZXWXdwM2hhR2MzbTlkTWp0UWh4TisyQ0dJb1NwSmZIc1F3Z1hqdmFSbFAzdEhDQUswK2RPODJwaFFHamVZYzlaOXVPNHVuYXcwVSt1d3BOU09xTFJOYmRYME5EdXNtQThPVlQwbmtEVjlKVkFGNEFGUm5NOHROalRodFNGWlRtOUEybDJCTkthMzVxbjJFeWRJVDJKMExvNzdvVG5Ra3phZC8yc3hFVVNLL3hwQXJicnVsQjFnSmozNWZWR1cyME1XYVZZOVd1Um0zVkl4cmViZjR0cCs1WktPeDVzaFBWTm5KSUV1UDhjVzhZc2NTaDNwYXBKUzlyUjg4UERPTExFR09qY1hFYis1YS8rbFpzbC9oRzlPZ3Z1YnZDZC9jWDJkVGhWS0tBMlY2Z3I1Snh3SThaeEFDRm9wOVd1dWF2TnQybFF6YWFMcUZHcXZHaFRTZ2t1UjhvYitzQllPZS9WZG91OUZGTTk1NnJoUThNT1llRk5BR1hpR2ZHWlVPYnBNbU9WTHZpVDUvbU00Q2JmVHJTNDhqdGk5Zi9uSkNkY3g2UzJ6TlBuSi9MeEh0TmpycWF0ZktES1M1TTF2WjFDdmZmNzY1MlNJVnArZVFib0F2cUFNR1Y2UHI1MzRkUGFOcHM5VTNpYzlUeEtWdG4rOFNBTXpIdGxZdnZ6aHJ5M3ZGNzVYWUhub3EyWExIdjdLL0c3QmU0VTFnNGYvV1ZXL1JpSHhDNzAvejZDT2Z2N2E1enJoL3B6L0pMMUs4d2FyYU9idDFsZjY1QTlDYzErWkkzK1U3d0dtVllUSm9oNlNrajFnMTVjYzJTNTVkOC9Md3VMWVBPQWVFSUFJQk00Z0w3b1dxMkwveVRjT3JQTGU1WUxVOE03Tzd0cytmQnNtVnZKOWNOVlVFWG5xNkNuU2dEc3JFUFdSUnNEWk1Kc24rK2FGVzZLWWhyR1U1Mm9TNVJnYTV2bVZGUXVWQzhzaGVZVlpGakFaMUZ2ajlRbkhIOUxYZUt5KzlpY1RFeXk2aTVXemVodWgrK3E3MXh4N0ZsSHRYTVNFSjZaaGhlU1E1RDV6L1VVVmk1U0xYSWxkdU95K3hFZk1DNUQwc1F6cHJpWFU5UmFuL1RPSnFrRXRXSGUyektOeWVpSis1bzdpMFZWWTI2enBYd0NseGNmU1pEOUM3NTEvcGN5WU12QzE0ekxKVmV4VVJoL1g0blZxVXBVSVhMZHJzQXVwVnRWdGZ1d1pyOWdMTVBJaVJNc1ZqcTlnYUp6R3JWSkNTY2Vtd1lqZlB4QUJubFRxUUZRZGpJNUhOb2UxQzVPMDFaS2lnWVdCTFlCZExOWWsvWmRleFJvVjRTQjJmTHcxYzBYQ0l2bXpxMHFyeUZLQlNqaVRrZm9ZWnZUbzd3c3JBTUhaZnpSQTU5WWpCWlc2UDEwK3ZzcGVqK0VlQlpyWjh1ZWQwODU2eXNDNUJEZncrMWN1RW9wb3JhWlVsOVlWR25Mc2pSQlpFeFBOSmdLQjFzWm1IbDZUYUF6WThHMWVHV0ZORzZLQ2MrUDFJbzB0cTlMSEtZWFVmWncvZjhXUk5ONzNCZmg1a2tnZXFmOFpXUzJZdmtzM0VqN3BmcWk3MW01b0pNZ0dJNlZOMU9GNk1vMi9yNGx1YmxBVFJ0NnBCa0JOOTVudFhZekgyVC9Qek1WK1llaTU4NXh1VFQxWVMvODJWN2VuTlZacmEzVlM2T0dCZ0MreXNJVitZM2VLWHIzQUUvQU8wczc1bDlZWTBwU0xHcWxVQmtpb0RSL3hWRHF0NTcvQTNhaysxVGR1THVHOWFXZlNBeHFYYjQ3UmxqV3E4WUNiREFtM1lCQUdPNitIT1FwNW1ITWRwakVZdTFONEQ2TlhCUGdJdG9saEErb21oY21uUmRCUk53c2dtdVVtZis4eUZJMklFSGxZYkcxWk1RekIwTERrTndIa0U3VFc0Znp1M0MweGh6VjNiMmw2MVpBbjZCbVNLZUZhS1NNSUdLbGtlQTl4NjRxOStYTmR2bjVvbVkyV3J3ejE5ZGN5L3RtTWZ3NjAzT0tVcndqMXpxNVY5M0FrODZ5WlJxUEZsclJZY3FJNXBQRzhqejNUYkRUVldDMnR2KzhxRnFzSUk3R2haeXMrK1QxTFhUUDN5NC96eUxjYWJUN043ZEFFM2RUdGliak1venlrVm9LZUFHWTJ4cUc2czJLSWU3UkphZzNrVE9vTVpjRDhiblZFSnFZRjRWckhhNkw3aVRKcGtiTVhjMFRxT0d6S25WR2FEVTJJMW9XcHpVd2Y1QU5WWU0rZ215RTA3Z1JNTWgwV0lzWnlVVW1oaHVuWFdaTW01ZisvSGJ2czA4bURLck9yY2E1YXNHNWlEajdhSmJZNDBYbk9zRVpjVXF3YkR2L2xmckRiVWRXcHlYcUhhdGN4YlhUVFRnYmVKNzhlWEY1bjN6eUxaUEZ2ck9EZ25oT0JwL3ZIVGFXTFdoSDZUZG44M2ZSN3N0RXkvWDV2N3NyUUsxWFh2RjJOYVlQUk5xUnFEQmk0MGYvbjZ4UWwrTDVRN1laKzQzcGtFTjlUekFDWW1vR3VjVHhTaU9jdFlvQTNKaEJaeUtYVndqdWN2Qm81R0hScTFjaUtPTC9zdWdUNENHaG0rZ3c3SzhFS3h6dlN2UDR4QjlZSm1XVTdKeTgrSXBVNkRFQTEvNjRSUGMwSU5UNjNTeU1aR3dQdjM4ZVBzNjRDN0ZjTGF4dTBxYzZxNnQwUTZWRUNjRUxKY0tWYzJndUNJSTJxbFo5K3Uvbloxd2NsR0NOb2t3REh4cjRlUnFTSHZYenUxT3lmcEgvL3o3OWhCc3l6VDI5OWJWVTRkaGwxaVljUjVFbXZCTk5FbE5JMUFsb3ExekVVSmxGNlJOTE4wd0Q4OExmdjdwMCtDYjRPYkplcTJYTld3MXU5b0FvTklwL21KWHdwSy96bWg5MzVQZ1FQWlJhTlJOSk5QcFVmdk9mZU9ObGRoRkFvMmdxQVc4VkNRZGxXRjI3M0RaRDZhWk55Vm02TzdGbGZEYXJ5aXJ2RThtZlEzeTVMcEhmUkhBQzRlSmRFOHV2TXJUWGFHcVpESk9yVTgyc2FGd2pFWGZEcGp6Z2xVNGcvZFFNNEo2YTA0anovMVVMY2orVGYvTkZUaU5XWHl1djlIVUF3M0F2ZUJTTUgvQ0R1eXpTSFI5TUxmUStCVzhzRVF0RTJFRmdtRkFxSnBkWGZoL1N5ODNXT2V5ZTVMRmlIZ0tFcEozaGwvN1dCYjRGMXJsNU9Xd1hJUGpLWkJ4MXhvWEMxODl3ZHZ4L2l6dUZkWGpxQ1BJMVBWRjhDT0s5Nmo0ZE1kamtCZEtyaXRTSFU3bmdKM2QvM2Y3ei9KMWs4RXpUM3p4U05CYXBoK2I2eTFUVzByRnFNS29kYysxUzFGSDB5THFEQ0F2RHB2TGcvYlVFcXRmRmZwNnB4cHRsTCtLQ0RUc0IxMXgySmw0bzRMMXl2S2NtOVV1TVZZTWN2NlpRY2t1OVdPdXVPc2t1cmIrNGNQcFZQbnQvMTRac2JTQ2RPQmVVWTVnTzNBVWU2MFNMdncrQlNzYXBheXJlRUowcHNaZi8zV2hPZkZIem83b04renp6di8zbDhqTVZwcnN5OHdFbFdaU3FPNklSTWR1WGtUNDlJcFdvS3FDNitxMEd2Y1FrMUhzYWxrVHd4ZHNONzZ2aEhySXZBUDJZUlhaTGlOTDhySHNYZkxKbFMzTVd3dHpIY3ZEY2czK2ZtYm05VDl2NWJIMzljM0RqK3pMamwyZkVTMTZWdXZMdW9vSkRYMDhQajlDem1jVy91NWZCNnU0dGNoeHV4UnZSenl4VnQ4YkpvVmJPdW1SVXRZeHJ4eG5ETXcyRXp2TngzNTNUbnlPOTZkRDNzVy84bCs1eldiSjNzS1YzODJYTHl5dzNLVzNSZjRQb3ZQazIzTXFSY292dHl2WHluNWlOYys5R25pOERDeVdzQzlpa2pITlRlU3pNZmZGTmY3Y3djQ3ZFZWZOWkxlOGdsaG1GRzRQaWI0anROQ1JFS3VibnpKVjQxdW1tRC84Rk1XeitGdnRHQmQzQzBwdkpkMDRjelJUV2ErNWh4RVpkQTh4ZkZjNXJqSXV4ZEEreDR6N0xjeTgvMkNBNnBEZ0dIOEVQbG5wckRxc096dkljYjhVWkZYcTVtTjF3ZDVTTGpuNCtiUHhzdmNhcUlOVVJSby96VzJUYTlwWGpkdjlmM0ZrdU5XS3pvendxZ3FyeFNVWGFtZVFhWHBTeU1ZV1c2bDdCWW9aTEZuZUg3cjB3aG02b0NLbTdNaUdGR2FmSDZmMjdzS1dhWHBlVWwzUmoxQW9XVk5HT0dGd3hZZDBsSlFMSW4vcnF4dFRPbVNzSmQzQjUxaEJtenBSb1AyVmJJVmhSOW1yUkxWOWhYM050b1RURmpFVFduQituQ2s3bE9VMnZzOVNMWFplSWlrVHFmYUphZXZ3SkZ4YmxEcXZkM3ZyOURkVzcvKzZKRkFQci92MDdyMlE2alFmVFFlNkx6V1BQQmpnK3VkLzRRaEh3ZE52VWZkS1BzdG14WnRpcXJ5N0t5Z2E4WXh5c29iVjlHcXR0ajRDdGd0Yk9Hdml2cnFNN29NNnlPc2x0NVpaaC9rc3FxaHdmQUJyVTlKRXRyM0tiRmZSRlA0YzJTbTRQNTdmU3VxV1ZSN04vWFJTNXVjR25wcng1VHZRQ2UvOFVvUmVUcUhNakxEOFlyL3VhRzVIc251eDZSQVk5MmVieFBlTDNUelJLSldlNzNEdnM5SFk4Q3dPNE9yM3ZZNjJtbnBlYnBiczhkbXM4VXNYRVlub0NjY2dWRWo4UFFWNUNyQktyVUxJSUtsdTQ2ZTJjQnlJT1c2eVpiQ3JaaC9UOTFRNzY2UWRUcWNKV2JPaW82WDBKKzFGOWQzSUdvTzNRa0IxVWhJckxOdEpUMS9kZi82dGQ5UC9uOTA2K1hGY2twQndQbU9vVE82SFUrWEdjSWpId095TFJESHFXbkVDMHcrdWZKMUpLZ2dwRXdjalVSanVFYWZkYjB5ZjlMSWxvVVhNQ0R3TDhWTG5GWUM4VFU3cVZWK2lyUnJ5L3hXUytOTGQwMVJ5QkNVVEd2OTJiNVhWMUpaUDUvTlR2Z0hVZDFSN2ZEMjRXZkRpQ3BNMjNtMTNOeEptS3g5dWtycmxoRjd6QzZacnQ4KzFyZnRlMjRWZTRpOUhhMGFOVUoreFhMQi9XZlpmRXJ5cGN0WDdIaUh6OWw1TkxtQko3QVRIRThmdkl3ZGp2R2QzK0NZQWphVGtrbDMvejN3QlZqOHZNbXp2REFWYmFzQWdLRzFPZkFqSW1KMldFUFpzRk0ySVpiNUxkc1NMKzdCTXo1d3J2TjZScXhTRlRELytXN0FpRC9Udk9JV0pyOWs4dDU1WGgrMWFYMlU2cW5seE16RzJhUWNMdnpHWGFmdDBvT2NGV3ZFVjJacVFyQnREVU80RExLdkQ4ZkppVXZQK2Z0aEFma2lnR1FpbE5BanRCVVlxWDQvNmVGa3MrdUMwWEh6cWRLVzA3eU5rSlR6bnUyKy9SRzZESGdlbGFibTN6OWJVZDVYenE0MnRqWlk5cFNYeGtzZC83bWxzdG1IdkcrTzZYVWUySUJNemxTejhWeFQ4VUZraDJlUXlKKzN0Zi9HMkpDbGVIc2J6UDkwQmJSbkNhdTlBbXVjNlpQR0NSWHBIUERsTmM5U21ZejFQS1FuMXllYmgyaHZNcFF0ZmJJd3JwcU5MVEcxTmxsMmh4dnNHM3FhVjlMYmF3NStkYkdhdlFwTjFzSE95dTJ3SkxmNVZLK1VPbnBIVDJvb3h2NHFNb2RWV2dKSDdCTmdaSGVPdnRmZC9zdEtJTnJjblZTek54Q3VwUFFrQVAzNHlzVG5RTm10N1ZiWmErM1VOcFlnajVaSGpCc2tLSzBRUXR0enhkWFhweDhkY09EcnRKdkIzWXRYMzlHNmYxVFpZL2JWZlpFL29pSjdzVURMbHQ5dC9LWkRjMTVyL2RrZXVNYjR1Q3VWNDlaRVF5a24yUllNdG05UlFOL2wzV0dBQlhrRkw2SW9IZjhuNmR2QWtoR0x5aDdiZWd2aGM0VVNDb0ljUG5lcWFlWFh2Z2d3QWVkd3Qyd0k2NDVEWG5LMTIxSGhZQnlqVkswNk5LNC80OGFMdm9YVXkydDRTcGUva1Yyei9UWVdxcWozYkEyR2pHczdXamJvN0hZT21yV29DVVNQYk4ydUNWUnNXK0VTRFhyUnZ4K2NpU1pHdFg0ZmI1UktxVWQ5bm50VkJwKzlJeDBZbkVKYlVVYUtXVk5IY1hVSzh5MW5aUjdpbzlETFB5ZlBTeVhUQ1Z4MTc0bnFsbDQ5b2tiM2F3SUxLaHVQYUxXUFhYTnV6dTkydUhFT2FKNCtlajV2YStOcUY1RHhtUTBLSHR5eGpuajA2cDVCOWE5NGYzYXA2by9NVlVhdmYweldQSkE3aEo4S1llYzVlV1RBdmhNNmtWSjhzVXppSURNdktYVWI1QitKSlc1dDlKUm1mUW9UaCt0Wm4xNG9vcDF0TEd0ZUdaN1U5TzBtYzVseWRXYkF6WVhiZHgycCtwTy9DOHpTUVZHak8vQjN0bEQ3Tzg4M0ZrMk5xVldIcHBwV3BuRWsxbi9tcFpvVjZhSmRKSG1PN085UVZKU3YwaHRhN0NVNEp0eWNiZ3QvbWxEcmY0VVo4RVBnS1VnL0NjSS9nR0RKZldON0VrZSt3U2I5VHVYTjFrbTNDQmVDN0k1bnQ0Q29EQWxtaTRRMUROOFFYZHZBVmc0MjA3eDlmZkJJcmlvL3JzL0sxeGFWNlJzOXhzN1h6a29TQzNqUXltQm9BbmMwZk1HcEJoaHByUGV0dng5cnJkWHN6bWU0UUtnc0o4WVByMGFhYnVucWdBeE1RVFFEditOUGN3eGoyT3lNNmR1LzNmbm1qL0d2MTFrUFFJQmZOQmNDd0tUdzNVZ1M1d0ZyQUFkUnhWd1JnVzhxUUl1aDF0SEtsT2tyOXJZeTE4ZmFvd2lXMnNnNjdZR0wxakpaTUpVd29jcTRUdVZ5QjIvN1FLSzdYUWJvUEd3QnFMV1FEN1dRTDdYUUg2ellRMElJMzdvNisyZ2FBSDcxMjNkMzdjL1BEZGNLMElBaC91YkVYSzNDV3dIcDJFeVBPeWJIOXJZbWYwQjJQc2hBUE1zU0habWNldjRGc2Z1eGYzOXhmMnpWLy83RDRzWGtiZ1podGw4cXdZT3FJRUgxR0NmKzhFZkw5TnFNNStHelZmMm4yLytNRWUwbVVldFpjQmUvU0hvY2tZY2NKNzRCcng2ZFJnQW9EMDRCMDcwcWNob3pZTGtXb2I2NWE1djhtZVdKbW9tQUdwd21QSWZRQmdXNU84V2FqQUh2bzFkdi95aTQ4YjdiZndUUFozc3hBR3YvYWVvWVFBZ3ZsOUtFd0RzNlI2NDBmdjF3Ykh4UzlIK1Q5ODlyU3JOYnEzbk5MMWZIbHdBK0VSRE9JQWZoMXprd1JWSFdndVBUbUVmV0svLzNYdE43MGNlenFYYlJILy9zNkQzYjMrUXN6enNsTkprNzdkOUd4bHNUQ0hweHpJOHUrL1Q3Nzg0UXRXOHNvSDNRK2pKQkhDUjhrcjRSeUErZjZ1RE16NE1jallQOTdTaHY5SENucDhLZjNpR1VndmJnL2REdU5EeFNhSUFLTVQvMjFjWjhLRDhETDN4dVRoRmNXMmk0cDlWN2hYTFcwQlZIMXlIbDR0N1BMMi9sUXVvdXpoWDc0cndodjBha2JLbnA4OTdQTk83Rkh6am9pdVdsRk5lcytQL3NCYlAvMktuSGR6OHVtdnJQWlN4RmJMaXdWeHlEVW94cFJrM2wrLzh6TWVQaDVSMUdBY0E3c3JWKzQvcEFtSlgyNVZzaTRndkF3cXhXRFRhRUZKdXlEUTJFY25XWHFsS29wS3B1YW5SQURUQWhaTzA3WFpiS2prYmxuV3A3UjNZYUFOVFBiNHBHVGR6dVVPcWRZMVdpZThtRDNqb2NUMDZVeXdRQVVsQTIwWUJvS0psWFJBSkRNbE5rTVo3eVNvdFpFUWpRSS9FVWNsV2xkV09YVlJtQ2xlT2dyWVdWSTFCTDdtYis3MmUwZE5yc0wwQzRkWnMzb0VLaGF4dU5zbkJFYkZ4TWtTRVIrK1pqTFpIWWhKVlYzbXhveVZSYVVUMHFqb3ZyZWdjVmRSc1hqa21hRkZ0RWVKbGplUUZWUXBtVTA0UWNiQ0hqQXoxaVVJYXd2bE9Ya082TFI2a1hlb21YTW9qWlJOVjNmcXF4MzdIaDdmVWVnRFZDMStacUV3bHE2NjN6Y3k5M3E1NzQrcXVBcjB0dEJVcWYrSnRqRmlwYzBCYSt5bDVhOGNtN1l6TnJLTkErSVFGTzNwZjFmclZiZTFEU3BoTldSdG9IZUpOaGZzWFJlZXhxdnNGcVNmVTc1NkUxaXlyc25CWld4cFlhR1ltSVJLdldTN3o3T2cvN2k0Z2RtNEpEYVJjbWhqcksxTTZOL1JhY21PSmhHaGw5WTA0SEt4a2paL2NHdktDbkFydGR1d0lkSzFJUmloV3Rzdm9iNUhZV1ZhaENMNTdpWlpTOVNVcStEVEg4OTF1QUlqeWxWZW5OYTF0U2lHYkhTbjJ6WGxucDh1cWQ3bnFtUG1uQ3dYbXgyMVg4dVBIeHpnZkVJdEV5NTl0dDkrdXY3TFhkbFBveTVsNjcxbDRNQUoxbzVXb0tJRjJGKzZYWjFUdDYyTE41Z3V4V1dXbEV0TWt4UGZkdk54RnJZZ1IxMjFSbDJ2YXNvRDhlZzYzc0Y0dFE3bFFlR3hiUGVMTUNUaXFyMXdETCt2U0pmVjIrNk1YZlc5Y0VNUEswTC84N2tFaThZMnJiOVZEdCtQOUd5THY1Y0JXSjFvdTdjS2RFeFdlcjhqUDR3dkRTcyt6NkJ1UGFHS09ML0NtbGlTYTRieWlMdWcrbVJCUlJmQkFON0dTWjAyQzRYSDhlcGRXci9DQjhnYlVaVXBlU3M1eE5RRElPWVZBMUVtSWVpS1hXS1pSQTFWR1RDVHhvbU9vZ09qUURjZlgrejFybE95aG5Vd3RFUFppUURTbFNRMFhIT1Y1c2k5ZTZaM3E2OUJudEMyKzZ2UG9QdkMrNCswVmJUdDQvMS84d1hJeEc0Nm1FNHduMEhpMy9YQVFwaUxnQUZaZzBMajVLSCsxWEJySFFucGhUWjB2KzNPaklwKzZiMGdzNnVvU0U3cVZ3anUzdGVoOUo5Qk9YYy9Dd0R5Ly9hVW1GcWxGTE1tSDVsVTFSOWhSVXc0U2FJMzBxRkhXQW5tbVNscW8rYXR1RzRYc3NTMTV6ZjFTc3lsNWJaM2I0cEZYODdheUFjZG1jWit6b2VoenpvWEVkYVFTWmtvb0x2bVY0TG16dXg2dkV3VzdSVkNFdFd0M2RBVUszZkZpWjFhZGk2Vk9RWGNoNm16R3p6Mmh6amZNS1FxVGppajJ1MmFwamlUUHJhUkdKNzdhTmpUcGNkNmdQSkJXQVA5WHRhcGNXUDl4K2pMOGpkUFB6YS93cWlOdWZEQXc2M2JYS2tscm1zQWUrUVU4SmZ5ZkEydnFGK1JQM1luMTNlaGg1K3U1SHJiTVJJWXc5UEx0b1g4d09ZRzFrWGVDNGVhOVowMk0zYU1hdW56OWNueWF2WHI3TEVRUEhxK3FwaGlKSHkwSmdKZ0F5c3pvbXozVGxsWUJDZGJJdlJPY1VlTGdOWkx0TE9wRnByWDA0V0tPZ1Y1QWxpdzlleDJiTTJ3Zm5ZK25Odk1WL2l2dS9oT3p4RkhWYmxKRFdhTko2U1JsdVZHOXNWcTB4clZFWFRmVUtCdU1xNmdQUVhkVXMxSXlWdFN3Sld4dmhkK2luWFE5SUM1S2h4SExNdDRmbkpvc3V0WU10cVhBTEJ2blFGUUJtSE9XZGxWcitEVFB4bElnZDJHTXE4bGhQNDhSRFhPdUVRTVppODkrWWljU2t0Z0pJTG5tTGg0T2gwTzBlTXF6ZG85YnlvZndtTzM3dWhQckpJZGNMNzJzRTV4OHpxaW9WWW1reFZGRmE1L2JsYW8zQUtnaC9rRU9BbVB1eDViRE5PUXExYklLd1VtSmhpWUhDM0NjbVpMdmtXRlZrUTVaZWpuRTljQi9zQ0lpNGxVMGtZNmV0UlVOYVh1b1FMeXRKME5veTJvTUNnckxpSkNkUVIzREJPZit5eFVDanZMZlFGYkVlYS9UbDcyU3VOT3VwbFQrbkJ0YVdncmx5ek5jUk94c2JYL1RGZEp5LzJneFBhM29VMkdwWWJDaEwydjVIMmF5SU5XTlFML3ptS3pZcVVDc3JWMmFzcmVYUkw3L2NsNGFUNjdTTVRBeEVmSkx3aE9oTmhYT0p1L3Awd04vdkNWTXFDenhPamZONWVMUkxPQ0tJYytNcjF4ZTZmQXdiRnNXNEw0YzI3bSthdG9BZEFUYnBsL04zUkpnYkIwbmZNMjZMZnVLa1BSc0RTRUEwVk1UamREWFk3SjRmNzgrWUYvUDQrc2hWK2hjbFpUR2Z5UFRtOTB1VktQUmNCaHV0SzVDS1dZZTlwZ2E4Y3VDcVJqaGNNbzV4Tmg0UWNZNkpSM2FrNVk0MW01U1JCNFdGRlV0c2lxQVVqVVNNQlo2N1BjTUlkQk1hMmljRko3VTdqMVdzZjFPYXlHY3F6RXpDM2lBV1VhNUNqV2FjM2l2MDdDU0pSSW1HRlBiaWQzT3I1V0N3TGYyKzRKMkxzYlUyVUZoVlN3VHJGcUR6SWM0Q21CTmpKRFdsVmJUYURRYTRtWWtYcGRza3lKM2RUVWVUMXhHdGxUSUp1Rk1PR25oT2xIS2toTkVHaEp6OUJsK2pBbERNQ29EUW1xWnpCV3lVVlNJUEhWYzYyUURaZzlQSE53RlpUREVrSWtsbWdRaVlMQlFrRDRIWTlWb3JLdGFBb1NMS0FGcE5jWlVTaG13SU8yc2xSV1ROaldtVmxCOGY0UlJ2dUZleHdvcVExWmtCYXZqaHVKaTNnb2R5ZkRKS3dMekFGRHZvaGFXaERSaUo5MmpUb3duOTM2dHV3VGkzSmxZbE10d09DeXQxNXZGMWFCbEFtWkE4Mm90T2RJR0N4MFdRSm9PeDYvM1kxblpvZmZubERsbzNiL0g5cjBTSURMbXdZT3VKYzlkYWYydFdSS0FMYTNEVjlwQkdMdG1idmEzcEM0YUo2MFI2WHFiR2E3UisvZVQvZDVRcW4rbzhvZFk5V0MrcHV5VjAxaGlDSHdjbzI0VXBWRjFIUjBTbXYxNEljcVVzTkJqcFlyYVhvcEJGNUphaDZjcU9rL0phRlhtcDhsazBKYU1naENrRkJ2UURQenJGcFF1QU9Jc2FZMnY5Mll3cDEwZ05GRXBjcmRoN3RhZU1MUnRUTWt4R3lVeFNWVmdGU21YWmFOUHN4c1krSVpwOEpHa3hwT2JBRjlOZDBhVzBQUHducnI4SGpDYkJDdDdwY3JkTnkrSDI4bTZRK3BYajQ4K1VNSEtDMkZOajJRM2VmKzNhUnFIdVJEK21iLzVTZWZ3OTRNYU1MQ2ZHVlpaQ1NmNlM0K0plL1BoQitTbUsxSmZPRFU2RTFaVXE1TXQ2dldjOXphT1U5VmxrZ3ZxNUl6aGVYcUxoWTNwOWRNUDc1by8vY1hoTEdlZkhlemFLODh6SlYxZjgvNTVpNnI2OWVRZlpYRDMxbDc0cE9iamVyUFpmUmszYzRmeC9MVXhlWWd0Yk03dXcvMXFvZTl6YllucCtUeU1CN2RXMDkvQmR5ekticXRlS0hrc0dseVFVRmJLeGQ3Tk5keGRFa1pBQUJBOGlsTVBHenZSU2dHQkVEellNWG5uVUZ6UlRIVVNnTlo3VlVUNmtlQWUyNXBxZjlRWDFmODRzV0RpSTlQSEViVTRaV3RMWUxQRVQ2VjBRTm05ZWw5aTBMUTlIZTk0UXZDbHVuSUVHaVJjUm1wUG1aUXBEUW5tRjZraEFBUHh2eDkvMzMvLzk4TEgvMXRTTktJZkFNQmErdzhaNUFGOFBHLzlzNkluK2U1c0RnR2dZQUFBRU1DL0g4Z2p0NnZyLzBhOVU3N1hYMEJvS0JWQ2VvN2czWVNOdDZ2VlE2V2Q0bi93bGVxOVFsWk5abTFJenkvMnl1Y0wvQW9JUnk0RHBmdU1RMzJ3Sk1yUDZDTFBVRGZoNnVlQmxscmhSZkFiOElONVc1ZVNWY2FwTytyYVBpK3hienJmWGF6bzdPZDgvN0xZMVE2Zy81NmwwcGVaQkFxby9yNHQ0Rjh5MytoaUNHZTRua0FqMCtYV1Vna3UvbXljZlYydnhFMFpEdnE3VCthVXRoT1V6VmY5T0pBVldBbUFyeTV2d0Q0bnpTT2ZlWTJkcFV0dDIrYUFmWjZxZDBObExzYzQrNGs0SldGdmY5UVRxdnRHTGVSalpoT0M5eFo1MWNMM3NJRDlRNVVqWmR1eDJ3V3FrS3B0RkdVSUxabEhMd3JaSVQ3RlVKY2lwQkQ4ZktFOXUrOC80aTBYOHR2YnZPWUUzQkNQamJIbEhqdG1JdGt4dmlzaTJvRXVmSnkwSVFZTnpEMjZvOCtLMGJGc2w0dlkvdUlKUUhZb2VOOCtXUVE2ZHdKUFMxaUp3ayt6MkZTMnB5ZTZyYzB0YlQzQjgxTGZoMlM3aGhmVW1yRnlMcTBFb21pSWI1MytZS1ZlNzVMTWRBd0RrSnNDYy8wU0NzVHN4VStZV20vS2V1ZksrV2pjc0Y3WlpGemJoVEVqM3BuNXl4VXRENVZXRHNzdWVDdGljL0MyTWRmSTU3ekk5cjJRSHVOU2ZMMjhKeWx6NWRrN0VuSVJQMHZ0WHd4dk8yRHJNdmFyeEdKRXE1WFhMTCtMRjlSeHdlbElkaE54MGJUSHRKb1JQUktVVGlueWxaSUU0RTlYbmFVVFFEZ294QjJNQXBBblNrTks1Sjd1NFN2QnRuTy9zbWUvM3QwMEF1YkovTUhmUitrOFpFY0Z5Z01BQk5DUWZyUTJGSXdEdFRzQitoOGNnOE1CQ0l6RG9TWUhBSmJCdHdiRTNYc2M2OTIvTk9EVXJqWWxHa2c3RjlKQWtVN1hJS0JZVzRNRDNwN2R6OUhNTXJzQ0FyQXI3MEkrZm9hYzNWZVE4TFg1UklKMlJqM01HdFZyWUNWRzB0QTZLTld3b2RyZU9wVmEvbmpYVTZ5SFdKeFp1eWJKNnU2Z1U0ZDR3MTdhekVKTW9WOHI0d0QreWtya29FWjkxRlpxNUhMeDlpWG9BdzgrSERBSU0ycHFXWER3em9mWFBOd2JzZzJmUis5azZ5S0ZnTHNISmtYOFFwZm1qVmNkWW1GU2dOeGVyMk9aWWdvRURaS0I5WDFtc21SS0VubHJJRFFOUVBsQVVEWXVsU2ZHV01jeGVJZWZlcU1JNnZCQzFheHc0OTV2SWJmd0JXSHd4VlV2VUl5V2p0VHdXMVRnK2NaVERiMTlqYXJwK2ZWVkVncDVmWDdzNDBLOE5qbnFyam4wdFkyMUZkTWI3WW9waVUxeFZXS1ZQeWF4eUtjazVsUk5pRzJFYlJ2Z1Vpa29UZzkxU1hTZ2JCSmNiUzB3YTZRQnBpUnFtVTFJcGFva0tpNVdNWkdOaXJwR1N1R1VSQ1pRcFRXcWhLK0tlYXFJcXdvNThRS2FQNVhoMGRGV2thbHhjRnZZL1BXM1FycjZ3OWRjMTNhbEptMjdyaXZ0Mmx3VmhWNUZJbHBrcGFvQkVWWjVZVmF4RUZYYUJOYS90cGpmeGRaZXp1dHcrRGMrSVAvSi80eXk0TnpncmdiSXdYMEVHYlZDWmFXd2xyU1NjajZPL0UwK0lCRmgwZDBpKzQ1djM3ZG1OWlhLOVRYd0d2OE1mUGJldEN4NlhMK0FwQ2xEVy9Iak5pSys3dnJxMVNzNDIxMjhiYkcvTXZpTWM1R281SmMzS21kZFoyOG83RVU3VnJDR0JQWjROdEw4OS90bFhGMGJJWW1OSXdCQkFRPT0pIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpRdWlja3NhbmQ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQURJMEFCQUFBQUFBZFhBQUFESFRBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdsd2JuRlljaHpBR1lEOVRWRUZVSEFDRkFCRUlDb0dxSUlHR1ZndUVLQUFCTmdJa0E0aE1CQ0FGaFVJSElBd0hHMnBnUlFkaTJEZ0FhUEFaRmtXd2NRQUZtKzhUUmRrbW5VajIveWxCbXpHaGRlaGJaU0YwUjd1bzdoa1pDWkdUNmhucG9iWlRXeHk2Y09EaDBFZy85bzBGUitIQThzM0oxYjN0dzU5WG96Z2NDTndqWm10dHdDVnhYNGhMb3BFa1RhUlh0MFpJWTJJdDRqZjkyWHNDdk1STFV3ajJRbzBJa2hjeEtrWXE1aVF0Y2ZuaW1ycFowanFIdEduZ0pibC90RHF6aWlxZHF3QXpvUTBUTHg4Nk16cFg1dEk1VC96djk2OTc1cjRBb29zUkJESmZCYm1rV2dzSXRvcU5iRzJYSjlDa2VvYkhiZjN6QkJtb0dBMUk1YWd4R08xR1Rhb05FRlRNNjdJdW9uOUZYdnpmK2l1aXdRRUsvVy9haG1pYnorVmRFYlZWUjRZTitQZC9qY3pDVE83TG53V2dJcUZsNVFBbDIxWUIycDVLSkZsTDZKZjdaZUJ6ZnU0Y0ZKM3ErQU9DOFFWNjZ6b2JXd1loV3dEL1Y1c212RVhvekVtRVRXdnRLRzJUUEczaFdjcFFtOW5RT3ZSOEpGSVZnWkJkMm1iRmMrSTFmWVh2d05Ra1ppdnF5UDBlOTM4NnkxYmE5ZDN6QnFHTHF3QVgzWHB6YlRINit0Ylh6R2drQTJ1SmZReWVsZldlSlN2Z0MwSkZVRjFheE5kVFUySFRwU2o3bEpsL25lbXE3Kzl2U01rLzZKYWRHc3NxcmdHZWV0bmFOVlBMNHorZDdxeC9zZ3huRjJUNWVnSFNVV3lYN0FERFZNS3hveHowQmNodVh4aTJBc0NhdFRQeXZnT09OVE9ick9TY2NHdUNRbHpoRWJLQi92cnR6MWlySDhoc1puYTc5bkluaHkweVJFTENKeUxnV2Y4Ni8zQWdUREFBQUxwak5FZzNKTk5RWkxoc1pMb3lwRncxcGs0ZGN0aGg1S2lqeUFrbkVNSUJRcCt1Si9pbGtoaXB1Q1BIZWcrRzlscEZvUS9hK3hPS2M2SEZBeEIyenJwM296QVhhaUJ1eFZNOFZtQ2tXbVY3dHQ4M1VxbDZpNnh3eWFzd0NwVjkrY3pVNU9manJNckgvQjFiZHNTWks3bVNXL2EvdENtdktvSkVpaFlqVmlLUFByeW1LVkRrUC85ck1NTXNjeTJ3MEZMTHJMUFJEbnRkY3gwekt6TS9FNmlBcENqNkwvay9hS0EzQTI4T3lWeGFDNE9sVDVhZHVQTVBXZlpCMHZCa1J0bmNZQUdkaFN1V2JsbzI1MXJUOWVDT0NLTGdmYllHa3FCSjZWUXlhNEtUR0lIVWc1ZmhxUlNZRWpNSFJ4SUhJK2xKM0ZUenROMHBXaDdERERGUHB0b3B1TjQ0Si9BSWtnMVNlT3BjaTloUDBSVFFFaVdPd3p4TjAwWkhVK1VwUzFHRjhCWVBFRDNBQkxGMW5xTEZmQXRTSWRzNHRaUXJFSkN6OVRLdFoyVE1VVmhheEhPTFczaVlTdDBwb0VjWWdvU3g0N1ZEcWN5aGtna0ZQWUhkdk1TeDlWOSt0NzZOTFpxREIybTlZWWhtdG12NHowbDcxYURYL2hjek93UXV4cTZrMWxVQzdubW50Ry9QM1N6ektHUS9md1JVRC9jT01RaURJcFRnanh2dmIvUGJ3RTlzbEE2aWpMSVR4YmtHbHAybVhoZlUxTzVBL3lIZWFiUldJeklkV2pXWjJXMDk4UzNOSm14SVV4RDBKUzJJUXFoNy9ETE9WRlVZOUkvMDcxZHFKRnk0Z045U055UHNBcWtsSkdYUGFmZU0reGJGNXFJWWMvSUFCeG1sbTRCY0Irb1BPUnoxOUNNMm91aDJvR3RFTk4yQUpGckNWek80Tm9EM2V4V1NFS0c0c2pNRHRPVkpTZ1lMVjNvU2FMWWVlNk9yRTU5Sld0STdYcTZGTU5CNnBCYUR6bVNHN3g5UC9uY29BUUMwWU82NUFWLzhWcVI1cEM3TzBLSlJTVGlYTUhlYWp6dnE4ZkQ2VEVhdGRTZUVkQ3lKeU9QN0hTMEhOc2NqbjRFVUg3SVZ2NUI5TmNIdDZRK1F4cjVOZ0psRVlwQmJsN2lXRlRnMlN2c3ROTHBrMXdkMEVPQi9IS09QNTFvQWtLSGJrMGN4Z2FVU21FZHp2dlJFWGZYblVFcXhxR2dkeC8xcFVCbjZ5U1ViaUw4YmtJbENwT0MySEYvWTB4NXFweFRMNkxtbFVQYkZPSk1qWVFEZVlKSWNZQWh0S1ZxZnJGS0luZ21qT0k1ZXgrV2JTVUFyQ0dOd2hJRGlhS1BRVjEyZXphZEEwNENIRzg1TFltaDJnaU1Fb2hndUZDRTdXdDJSbnBaT1AwTEFtempKTkpNbDFGcVEyd2ZiVUJKYjgrZ2RmaVNHU1cxZ0MxdFowejdRVlFkZG9UU3lzalNlYnpvbGZ5b2hTdGdnQmVlTENIT0RmTXlvMkJPUzhhMTJoaWRyM1lVaFJEVlhUQUl4RTZ4d21zMERFZzFNUkZIQUd0R1pKTEU2Q3RCWmw1SjJBN3VsVFAyME1qUVh1K0ZHY1JoakNvVlh0b3daaXRoZUFpZ2Jsbk9aSVJnRENnWUtlampCUW9RNmhSaDJMSWFyR1dCN3orWWl0S0F1cUVNQWw5UURJZ0hjOVJzWWlVekFOZ01zWkdMTG9VYXhha2tWcmZEb3pLMjEwWmJLMDRacGk2Q0VCVm9zTU9BQVVWZ1Fpd1YySE1qQkR1S1VnSk9JZ3lYaEVNbnNVQ2xTYWFTeHc2VHJpT21NUlYyNFdTRy9BcjFvYjhMTjlNRmFmYkZvcU5yY2NDTnk0a2lqcUl3QkpsTndCQzhtV1ZnbEcrdE1aK3Y1NU9NVjRFaUYyS0NJYlZTc2xGb1pOcG1GdzgyWFdzd29DNTZLRCtxVXJvSXpLbW51NEdBWmVKWi9FQUJNNFFXUVJwRnFob1ZZQ1FmUGRwT2hIR2FXdXg0ZXVGaUhudTQwMHBvMU43Q1hWTW5mS2pSMllkRmlzY1dxRnF1QmROdkFhOWR5OHRFVFArNzEzTHdjRFB4dkRkMGF3KzluZXlmZ2QvWTM4Q0VMNXNKaVdBbnIrMzMvd1pLY1Fud0tqclhpTUFCcER1Q29hVWlrR0lTaENBRUZ5RUVWNUplbEZjSEJwOUxuZS9lL2E3Yk1FdzhLcFA2WlpWbVZSOFM1b2JBbVZaSldPTTV5MGo4QkFCUVlRVFVtUXlhWkdFVDF4OUhEQ1VrTUcyTTJIRU9odVg1SGpUdUJwU3BBS3dpWE9tc3FCcURBWHpRVUl3WitmT0JIdmdaaFloUEczL2pWeUl2Sk9EZEJJQzBqSzVzS25ONzZxVXhzSTVSanRBcGl2d2NtZUFRSzlGWUtHc0VTdENRUW9nNzZHNFplbXFUSlRBUlcxRDh5QlZJUUJWTUloYVp1L1ZIN2hTT0JSRktSbWpRa1Nia2dRSG9pcll6aEtGWFg3TElKb0xDNWFhbmkweGdXTGdSZ1RnbGtyT2ExV01Kd25ROVh6bGNmbUFEc2hRNEg5RW9lbnk1U29ySHJXZzl0czBwSTd2LzNzRWV3QWF6cnVDK0dDUENmeHJrVDlDWUE5QzliQTVCeFNLSzNkeDBBWUkvZXlpcW10QnVBbzB0Y051YnI4MHdsNCttNE1QajltS2FXUC9GSjF0bHRQZFV6TzRHL2hMOVdqcFROc2xWdUl5Zkk2WEpYdVZpZUV3cXQ0ZGJtZmo4QUNDSnpTZmRuNHBNbzQzS3NrWFd5c1FWcGpEOVN3bTBGOUFQQXZ3T0FOeDJ1dmNiMkM5dUFDOStFQzg5NHp6cWZHYVA3S09iaHJuTTd6MjBCQVlCRVFIOG5nTjdLOTNaMWV1VnpOUHFuN1RQSEl2TWNkZFYxaTYyejNuOU9tV1dUK1phYWFZa0x6amx2Z1d1SWhpUlFzR2EwbW90Z1lHUmlaaEVsV3F3NGRnNU9pWklrUzVGbWpmK3Q5UUFIb2tKNmIvM2diakwxMWtkZk9iUTNnQmg2Nm11OXN2NjNUdWRUb0ZDUlltVld1V2UxUy9hYjY3RGpqampodnBzUmNVdU5MUzdiN0hiVXVPdWkzLzBSRGxmYzBCQWV2Nm0xMVQvKzlxK0ZCQXhIaFNkU0N4QXVSS2d3a1ZyUTBRc2lhODJxcGJaYU9hT05CQzd4RktsaVROTmVCcmVPMnVtZ2s2NTY2YTZIbm9ZWVlLQkJQRWFiWUt4eEpobnZySW55NWNpVnA4UlVwV3dtUjAyRWpUYllhWmNkQ0EyL0VBQm9EUUJzUDlCeVFMOEZNUDhBOEo4RE53Y0FBRFoyRmJ5RWhPTVVMQ1dxb3BoSWlGRkdQNi9KU2Jibm5KZ1V4VjFEekxRQWhDSkl1RWJCbzNneWFTVUpSU05kRUxIU0h0SU0zSEhHc1NOeGZld0VuY2ZyNmNDZ01XbDdqYWFKMDBleFF0UVI5aWlHNENVdzhnU2lKbm53U2IycnNBaXBSRWxueENZTXM2Y1N5SStlMlJ4NkVxYitDckdFSG1Pb05BT0ZwSlN5TmxBVGhIVE5Qb0I5SFFPcng0ajVYa3pPZzRRT0NXbWNQalJ4VEMzVThZUG91VVU3WDd6TXZya2lXbzdkSnNablFRQUU3bm4xL3Q1ZloyUkVRbW8wd2VpdXZKa0xsZyt3Uk9rczV4UzhNOFdMbFRvRXhLUkp1TjVabHVjOVZ4bUdwM1hvaFNGWmc2MDJoMFBwZlFqZ0hITGRVOWRZR1pHVWpGOHhHUGFmcENpTkJxOVY2aTA2VDA0WVlwNG9LMTRvYzNlbHJDaVZFWURjL2oveVFTblBPdGFKbnpIQmFhaGNBMENmQUNxOFM3NVp0QWswcFRuS05BdXVNUVdRYkZpdnRuUFV4bk1MUU91MmZFbU5iMVpxNTVJTWM1UVp0bXA4VnlsUitGQllveWxYcFg3VkJEQW1kbUl0SFYyRlJ3eHEzZjR6Sm94NHQzS1pmcHNqeTh1L1ZXYlVnN1oxUjlNZ3Biako0dG00V0FETVFrNDV3RFNrVVJndHlFbXcyTUtSVFdERlpkTi9GR2FSZlpIYmE3T0xZTy91VDRpSEI0cU1jcXRIN0tWdjBicXdPWkYvdGVZK0RRNG9IVVFZaFE0T1ZRb2JUV04xUzdEQjhQWGMrenV4Nk9RM3hPMUZkbUVxQS92eWlLM3R1YUhTUmFXNDBPWTA4WlZBUFRXTVh3SzRaRU94QmhDOGZUd2FzR2h4S1N0N3lRbEJvVDUwb3J4K2tOcW9tRytxSU0xNFR5WFZoU0lEMTB1RUkyQ2N1Rk9xNTRDY1F2Tnp4L3BjZjhHb2ROWS9TM3htYVYrekpac3c3OWlsZTlGL1U4cmhQVkM0bVFsY01EcmJvRFlTNkNOYjRBS3d4cCtSRUZWUzFUSTZVTVp3NHdZV1FOUFFXNXROVG5GUGROZ3cwRk0rZHFnSGc4MjZKOHNpVmkzdW5RNFRsc2k5Z2I3RzQ1bVdMbmQvRHorL1JuYThSTEVlNTltcXByN1Nob3F0VndTSXZmbUdkVjJ2OHlwcWpVN3Y1ajZuclAxMTFwZ3NpTHhOamUxV0hCOGJNanBXSjgxZHRTMnBhbndUZ3duTjIzM1dxdzRiREpTWkdsQkpUU0RsSGVNWVpYWnRPOWZ1bFdNL2UwRE4zWnpORmJ6Zi9kczJ1WElMS2d4ZGt3TjlXRVRadTdsczVya3d3Ukt3eVZ1VjJGTTJlYWxmR1ZhaDNMVTByNTF0V2ZNNVdGSENKL1dNWVlVamhXeStjRW84ZXlXQk1YRXpXQ1ZMa3liWWpqMXZyVkpkbk9SWGV4c3JnVURMcWJhaDJvaUQ4NTdFU0dMYXZ0a1RMSlJmbU5XRThlYUcyOTBXbTVJc1hpNVRoN1d3bE84YzNMU24zZXVpN1dSNUg4eERZMTJMQ2JDeUV4Vis2eDRmM3RRd1VER3IzaHRsT2ZBRzYzMTh4a3J6bXNqYnF3WXRFVlNXOHZSOUtMZWhaN29KM29rYTVqV0xWbjlwV3Fjcm1EMlZ2R09hSjhlbitLaU9kVWJrUFhKUWZXNXhaYjdXMlJlRHRPSlRhME5iTnp3dFJKUEFaOVJ0cVNheDBxR2xMazkyZ3YxRFg1T1VRKyszWTZ1MFVLM1BQeURSYzhlSWxta1NjRVpwMHdTMnc2d2NLMytLcW5KMzR5ZU5hYnZGNS9SeURSMGo3OEh3ODVIbXpHVk9TMFdJZzlKQWVsZ080OXdOa3RJN2hBMFc5a3dKdWo5Q0VsMkdhQkw1cWtKWEptZ3NzUzZhZ05Wdjdvb0dpQWd4YWwrM3F3VFhmVGlsckNtbFZsbzhZMExNMkQvQU5oZnVpU0pyTlhWc0J4MFd0UGJrVmt2TmFIbGt3Z0ExY09RdEl5eUVVZzBPSEhsemQ5MVFXM3JsM1cwL3MzZHduZllLMGdDT1d6d1B0SUNIVm5OWDdlQmdSblJjR1FTcmppdWMxd253cVdVbDE2dlJaOVZoWFNlTUlTMGtmSkM3MjhrUGsvcjJERWRUUEk5MEdLQUptdHVSZzBwakhhRTVTL2xteTdIUUNZM2dCcWtiYmtwRGl0N0tNUHA5TGtRUVNaL1A1SXFEd1JDZVBSejdkMzYwT2dhRlRqc2VONS9ETzhtYTRsQ3hsNTFXY3BPOFRueWR1RmxtZmhmelZtdDZlY2g4TGVtOG4rZ1FLS0toZ3cyRVgrcC9EZXNpOUdBUlZnSzlrVGxPTFRrUUlhclhNYkpadGFFRDA2YjViZEk0YUorRVRYK0FpUTVKZHR1Y1ExWGFEenZERnExc0xhSmMzdHhLUTN0UUxleVVxeUtXVlEzRi9xMGRGajhZRDhrNnlkZFZGYTUrVnMrRFNHNnVDL25OOWNlbnVFTnFsakovNGNvdC9uN2YrcGlZZVlVcG8rRlpPbEZHeFJ2VjFXeTRWRVBHS0xKcFg3QUIzdUN0TEYyYm1XYUlCaU5GNmhCOTIzRy9UMm11ZHRJRTFmejY2VFV3M0FiclFyYWx3RUZoTzNaTExaSkd6V3p3endMakRzK3o4b1prODRnT3dvSFVBSEFnTHc4WGgyYUZNcjY2anM1U294a3RKWUJlVHJSalg1em5Ca2RtSTlNKy8xaHJjWWpZdGRacmdiclZUUjZjMDZvM211YUNrTlpjanJmUHNYbGlwYWpOTHdhdWZMNUVWU0tFQUhnem83RU14WUpXMC9vaUp4dU50a28wV21VL080NE5kVVd6SXVzTmtkWmZqZGZTVm8yeDhPREhINkx6VEh1ejJwd09UL09jQkVqSjFSVWpSOGI4NzVOSUVCQnVtM0J0dDZ6RW9kYjFoTWRvTWhyR0dxWFU0MkIwbTcza3lMdVJvYTU4UnhuR2lLeG1JSHd0Z05TdXZrQXF1dlIwS05Kd3YzNFllNFk5K3B2VzM1RTB0c0ZGMWd1dWpUTFUzNWZwVThEd2xBZlBuRzdIMDN6VzhYMGRKbm12Snp5WTQ1eDhsaEQ2ZzJKQVRFUjVteC9yRXQzbU56cTNPa2FVd0p2SWZHdStmcTVYZkJPSGphZnZRRDZJb3doaGI5blFheFQ2SkRmU2I4Vmt4cm1WVm5xdTVyWEk1UnE3Ukh5TUpSaU5Kbk9IdDhrbXZiZ2d6WWpnblRuNGR5ZXhjU3pPM3ZReURvSjlsV0lqdUlzUktSOGZiQUFYbXp2c2x2TXViYm92VGFtYzdLMmJSVWYySDB5UmpMdEpxZVR1eUFqZThZUWNKSkExZGNkdHp1VkNlMC9FcmhZTkl3dTBZT3pFdGViK1NsTUtPVVFzRTl1dVp1dnVRWFdiWHBYbENidXZKQVJYUHlBbXpGR2hJK3VPR01CSDdEUE8wb0RVdzFNNzhBTjNoSjZFQitxbzBZUmhJNThiQlhDSVVMSW15Z2hXVnNheXNJU1FCNTZocUIySElwWHpPek85RWxGc2R4dUJPWDBpUGhTeE5QOWVWaHlTU0lwMkV6WGthYlI3ZmZReGtlaVRENEwwRllDR0dpTnpNRGRJalhoaGR6WFB6ZVE2c0hVd0R5Z2RVc3d4K3VtS2lxNDlvNVFyeTRFSlBjaHZYMzJtSjFFWlB2THJKNnBjYVZ1bUMzcFFxWHpqMmV2WDRvcFU3dk51MmErT1YrZXJ4dklqMlVibDZBM25Sc2t4a1d3OWZOQWVqVndNSUU1UkhFU281eHIxeE5LczdjY044TnczMU1mLzl0UkFLTkRMSEQ3Y0w2NW1tZXBhb2hrblBlTFluY2IrWkdBVnMzUW1lczV5Qkd2NHhiSlI3UnVXaktJV3dRNmxmQ3RGdEhBZTBXQ29vMURDK1NCNkpzZG5wRW1QZ0IyZ1NRNkpVaThWRm9JQmhWM2toQ2hmMDJZeGo5SnZlZy9US3FUd2czZUhQTzVzVmtXRFl2R0NTYUJ1cUk3bmFBOW9OQjg3Mk5nb3VJUWJrRXJIYjg4SjJkTmpTNkpwRHJUZlY3cmg4V3J4a3I4Y0IzWmgxMktuTW1LcUhvMXBPZW5odEY0NmF6RTlMYTg3dWNSdjNKUjJ5eVE3bUlObGZkbkdqblVKZXQvRjF1amUrcU82U3c2dllTcDZEUnNpR2dKNUJjeFhWbzNSNUxWK1lWMXV1emh2aVhEK2FiMVpHTkR4MlB4NG5yYW1hY2J0cUhLb2N5djMwZXpCMjhHcmtqWGUwK3hBa0J3YVRNekxkWW1GTzlPL2cyR0llSEFTVk5yVHo0VXhySThUeEtqalZKcXJ0MVhyZEk3RE0rM0RlK0NRMWZXNS9WM1RYSGRmeG9yRXdNUFRieHJzUmFZcG5sS0hNeHhaSHMrSmNmTWI3WEdwUEJXbUxmdUNRL2ZTemV2MlBSYXVDejZBbGwvQjRFQ0V2dEZvOUJyR0VkWnBuSU9JK0xnZ241QmJxT3dTYmppLzFocUJhMzRuOWZKOUFEM1U4aWJ1YW1HR2QzVzFMdVJsTm9oem5Ma3VpUGVEMWozQ0REcDVUVk5HQStGaGRYb2FZRXlNVDBxVHgyUm53cHM4SXRCOWZISjN5YTVGZWdDbGZQMHJSbGw5ZDdDWjMzM2ovaGczRzJNdGF2TTFmQlVOQnJOMVRlRldGMG9jN2l3Q29RdkttZVNwaEJSZUh0eXcweWl3OTBuNnhwZ0NZeWttb05LR2htaDBJVlpZOEtCa08wVzFwcVlJaTlNaVRWRzk0SjJqaCtjdk9TMFJzZVFLNWdVRDhFQXFQMkNhcjlJalZodFYzc3dQVk56VEIzdndZQ2tpV0JVN3I3M040MkJBbjZOMUc5Zmw5TlgvRDVBK0ozazlSNk5VVy9OeWJxVHJWc3p3NXpmT0Q4Tm8xb3RZdlgyU2dZTlgxMERjNVlvUHVKTFVqNjZkVHRjT2wvUEViWVpQaHJpMytPKy9FOStOOWpiZWFRck9RNWdKMTd4MENKMm1Eb1lZb05CbFROV05IdXp4YS9EdWZqcnd2ckcwb2crWVliRkNiMFRCRC8zbzdpdHpON2R6WEdvZHo3ZkozNnhzRE9reU9TQTQ0TjhySFB2LytUTWFERnBKbjQzNE44NU0vbWNxK0NLb2lnaHl3ZGprbFZ6Uzk4SGc2UUdCR1Yra1NhYTFLMGx5UjVUa0RjRE4vWUpUcFIvemZielNrazVldkY3UnVkRllLSnFtSWhFaVJFaXIwN0ZFQk5hejRFS3o3ODBCTjNxSzlyT2IrNFlvMTh6NzU4bmNrZ1M2TytQZ0xIWmsrdlhlcjdJYnU4QnF0cmJzMWYzM214NTJIZXlaSngzb2lHODBYemRiQTVTLytFSjdMeEVmczJkUHo0WWdhc2Vod1JSYUxLTFRrWWdRSlhrUFJiQWgxanFYbVNyZHp2Z21mRSsyVFovZm00anR5K2RqKy9mRzgwaVIyNm4vNjUxaitiT2RFZVYzZVpMNzRRVWlzSWJScjNTSkY1VG9uV3hqZmlJR2VkM3hhY3VYWUkvWEM5WHRoWUFZa0RVWTN0MUVnVE5PUmtnRThRNFVEU2dVUWNPSEVBdWdQSjZGOXZVWlFKNG5MZFFyLys5VitHZ2E0dnNReENETlg3NTk1eU5YcE0vZld4QW5wOXcrQzZqTkluMjVVNW9zcVFHckdIWHBCTzROamJjdTZ5NWZjdkpvZHJId25wV2FGWFdEVkdGcVhmM1pXdU56N0Y5ZXZ0cnlqRzVoYVRvSFA3WHZ4Yld6YTJpRmdObFhwdUtjSHlLNnRITDVKa2l4UysxanV1bnV3bHFEMzcvVzBGM1FUY2RJTFVXMEdOZzNGYzJrcDZOS2k1bEFUbWVtb0FrSVQ1clp4WHozZmRtcCtRTm1HNlJGeHgzRzZ5ZVhpb3Baa1Z6ZmxkWXJUZlRaenhZOWdvMitnWVhtWUloUzNja3Q2RUVQZXpZMjNaSGhqRzB3UHVIdDF6c3o3WXNkR2VQdVpZbGVNTUlzS2EwbWJURnJ1bE1HeTNzbUplUkNzcGY4UHV6UTRISVJxZGFJWExoRTg2N1lnWUJkbnRYa2MzNmJVL1A0dy9rcFpUOFU5RjBNMEIwaG9Gbm9OYTB1Y1d3eEZpNTBzN1QxNXdOMHdxVFpmQjdyTFY4eW1oYnFiY09GL2phZGF2VWZOMnNoWjBHUTFwYjRONDJrZEduMGNWVEQ5MS9XTXljbjVlcUlSVC8xK2RGa2IwdlQxZ09KdVZ2ckNJZjIyVXVLcHA5MzZTRlcwcWxzcUZ1bUpQV09UQ3p3VTc0WHNLQStXQnhucUROVmtBZkFxSTNqV3FzaHluOUhNYTk5U3ZaQm1Hdy9LY0IxZWpReW9QRlk1c3UvT0VQRDcwVHlXb1EvaWZWUjNsOHFUU0F1dlRVWDRGNFNlWTBhTkZ6UUFpVlFGZzNaRDdHLzMwRUtOL3BjRXNBQlNqQlhZOWRpNzRybFhwSmM0ZFY0OGphSUJyQXk0d3pMd0lEVlp1KzNXZ2ZzdTBOcE9jWXd3M3ZYSFpRY3JSQzNOdFFzTFBHbUVNWDFBOHNIMzBZWnVnQll1anhDTHc3ZSs1TkRUZGRROGViR0IrWWc1YVgwS3Bxd0l1cFNMcjN5RDVKbkZ4VHZmYW5wNk9HMCsxK2RtRjM2SWdHc3c5QkJjUDUzbmZIUDdObjNRWlhwc3hNK0tweERObjErQXFXQjRrZGpiaWFZdnZQcVA3V1E0Sy9EakRVWjcxMy9EYkY3QkdLU0tKMDhYK0wxVFJSeXgrVlc3Mm9PdkExM0FRdXJYdTA0OXQzTjlGS1lFNFczYzZFOTZhMDF5WWR2aTc3K0RCUlh3OW1SQy83TFBHSmxrQSs3UjcyMjFjR1FmY1dveTZVS2NyZnhBdkFmQnlENmNOYWN0ZXFIQ2FlK3BDbG1MR3RHQmdtQ1NQN2pCSFIxdGQwWDk0dTM2MWJEK1lsMmdZczk5dGtvQTF1Yzg2NFBmQlRpY2FwcWV2aHFYQmZlMmJQbGkrUDFIak1aRmF1NEJHdVZNR2wyNklhS0RsSjR6NjlYUjlHeHhYSHM1MFdiTGJpOEExOFJUZUVyaDUxV1paVDFoVFRGZ3B4OFdqN1NQaXFUNnNrMk9LSDg1cjRDNjRVc0RLenFuQkdYZlVVb2FGODk2blVKbmtTdittSHZSSWlLTUJoVVFPbnp6R3ZIMHE5K2FzbVk5YXBxWnF3V2M4YUdET01FTWxnZVFxQlNoMFVhUUQyMkk3c2VmVGFya0ZnTE5uT3BBMGVIK3F3ZDZnL29kWCtWeVd3MEIxYTFtL3lMUGM1VlFaOXoxWkpPOExYYjRZb3JiZDEvV0xtZTdVRUI3QnIxMkZjRmcvWlZvMjZYSXNBOUp0aUJLZGF6bG94RlAwUVF3T0pwUVVvRWpndzkzVnNRM3B0MHJDS05vaDZuSnlYVkdjT3d3Zk1hZGNYUStVUnZILzUzNSswMGVZNEVnNS9aTCt3ZlV5MXBHSlVrblpPam5iakVtSEVZaHV3WTBwK3htNHhaTTFLMDJ3MURXY2M4YnNpbk10bWlaV055dUNCWi90bmhIWWp6L2daT3FMdXNnd0J6UVZkdFBGUVhlWUR2SGxSeGN3dHNSMkkxalI5U0tpZHZPYjJwazdEMC9raUt1T1h4M3BtRHc1RkFIUmJtWFZsWithbFN4ZSs0SFN1ZGl4ZmEvUEpZWTZFZW1vMGt0SnI2OGg1MlljR0t2c0g5RDd4OUZWN0w5Uzd3ZEt3S0J1WG1CVzdmYk10WjBCSVJ6RmxQY2IxbVk4bnRwc1gyWWdBdXMwY00wcXhSTFBXdDExS3h2ZmNqcXJnQzlhckUzbThKN2ZlSlJjUVZKQWVzODRyNnUvbWdiVW5xZHovZzBDMnVKb1Y3a2s5L0tXQ1ZMb3dXNU9SUzdsdloyai82cUNPa2V3K2Y1Mkkycnlxang0K3EyNS8vMXlUOXREby9teStTbFpsejlscjhPZGRqdUNIR2xkckRCbkVHRXduSlhCWG1kSjdYcStKS3RCUG1QUmVwZXdtVzk0Uk9HVkVZOUs0OCtyOGlFaEF6blR4Z1ZHZEU5T0swRVhuU0NGZHh2RjhhNEtUQzFOeThacTI3N0JOTGlGY0NITUQ1SGVoWXRjaEQraFo3OEZXQm9CQU4ra2hMeW15eUFJR1djbGE3TFc4MWxnaWNDUWR0ZGlhOE1QQUhka0h5SHFHM3BJdWh1ZXZNL2JpeGdQeXNaZTRSd3I0czRMY3ZIM1c1QkU4Z1YvNncxK1J3ZWpNekNSK0p2OC9HOUVXOFF6K1F3ZUl4WktDakErblg0YzZ0bjlZYWZVTmZsOFUrYzFXTWR3dlhBOGRhNlozUlJ1RHNYYWdBVnZUMFp4OVE2cGsvcXNDS1NBejgxelh0ZnRGZkVETlR3L25NYmg2UVdSWlRZNEtuNS9PRlhmZlNBai83NmJCQWRpWW9SRnA3YzJNcndYQlRadDVwRDFzbTJHSVZjRWZ3dHAyMGFkZjJpWlVYSTN3RFdsQ0FWWkk1VkxmNjZtTXdHWUF4ekN2bGlHbys3dmlMMTlZajRJS3owN1pvc01QVy9QcWYwL3JJenArbVAvTzdKeHhIMEx6VFo4ekd0R3NPM0VJVDV4NlZUclhXK0w5bGdlOVVNTFA1WmJmQ3ZPWWxHbk9pZUJwRW5SU0J4TisvZUJOZjBqYnR3RUU2QmFvelZ4VjRxV09MUTcrNmlrZmRHK0JLd3V4Q3lJK3IyYitnMk5NdGtYN1I3Y2ZWREtXaS9nQ0VrRDFjMUt5OHNMWGh2Z2VPUHZoNHFKWjZFOEdyN05UYkVGUGMydkRzVzJXOG1sanRGcDZjQ1pXb3NyeVJISzNROUR2Ujg4bTI5TmtWblh1cmlRSU9pU3NhRHArdjIxTTRmbFVjTHpZZXZCQUM5citNVnFOdm9EUkNnVkZqY3lnTlhLN0N4WUZqYi9sbzA3VnZaUXRsMG16bi9PdHYrZEoxMWR0cndIazFVQTZ0ZEN3ZXMzazBuVTJMU3hzeDdOTVNQWmV0c21hTXVrSkhvUFhkQ1I5SDZvem94R21yMldZeUpaTE9aRkFkZ3cyazlCQ3ozWDY5M09MeUdUc3kzcStlZUpKc2U5MnlhSWc2NzEvZjhlZ240UEFNeFFLMlh3MEx2ZmRKOUI3YytRZFNUUFN2bENyWjRMaC8yaHFtN3RiYVhEYnpBbGh1ZFNFbzdBZXVXbXFwenkxWEtWMXkxVkJycEtSTHFWUzVsWnFlTjlxOUJzVG1OVW9RTVdSTklJR0dJMFhreXNFU2NnVlpvN0hoWXJBMGFBbFNvd284RlZmdXkrWEZtb3JoT0VFb244dTV4c0Y1WUl3NWNpb25vTUlGaDIxWFIwc0hpdXVtRHRKZncrbm41aFNWRldMK1Y5UlUzRll5SUZKdlNHdzJwTlV5aWdYOEt1Y0RtamFPTzNCdm4wNlhzUWhiZk9hVWRQYm51U0RXbWpJa2s1MlRZVjFhTkkzaGxraFdyS0VaUGl3REdyeVBjUGI3L0l4bHo3YXBIa1RoL1lXdmZtc3NGNlM0a2hidkQzcUprUVVXWEJYbmZpQ1VVa2lKalFKbDhMWHRFOHFkSTZqRmJkRjJKN211Mjd5WGw0M3o5N0M5ZzFTTjJXd0VvK0REa09iUGVscEVIWGtkMG0zRE5Ja3VqVk5LTkY5VEllemYxcXhwcGRDSW1oZjhOd25hcnY0UC9WT01NLzN3UWN3NjRESUp1M0JuanhEd0lEVWpOM25hTW1vamV6bTZQRERjRngrT2w4TzVRdXcxOEdRbTRDOGE1aC9SU3o2UGNGVzZnQlRGMlRHVnhWUXFPbkdaSWFLR1l5YWRPQlV3V2h3cEZNNFkxTXBZQWdIWHEvQnRlTythS2JjR0lVV2dNS0t5TlNSNk5oOXV1Z1lzN0NDcUhDejB3cWdwM1lmWWJIbkVsRVpoZ1dmSlA1NDNmZCtPUzQxSU1xc3pHak02SkdtVXZ2Zzl0SHlFZ3ZDSVpUSzNXRUhBUkNMbWNpZGlSOFRCM2lRQnF6MUJxUnFXSi9EQVJFOFMxSi9VNEl4TDBFV0JnYjZJK1FMeDV4ZVB4cmRWNVNmclorRjJHRWpzVVpYVk5IZ2FETWROV2tzUU5aL0hBS2NOR21VMG52RUVCSSt6T21FMWl4eFhQbTRtMWJCSkhUK2tWSGt3bzhwWEVBa2FzWndUV0MyQUZmUlZZdzAvVVk0dExxMVlxTFNqWnl1YVI2ajV3SmI0QW0reVQzR1dWWHVjM1lnTlU4M2diYmxjOEpLc2ZValEwTDVqM3BVRmNYSUdjb0FWMEM3dytiNXFSaUpXeEJFcmtuOFp1WGV5V0FvV2ZlbWxBeGRwdkxkdy9yaHFYYnZhc0VYWThzQzFoZnlLY3BCOGI3bGJ5UDFYQWU0V3NjTHp4VU5iZDNYMjFOWTNQRUZ6d1h1THR0NVJmNWlLUFNXUUlqc0l2ci9Wcllidy9PQzdDTDh2TS9CVEhIWjU1WWFKTXBET3Q3UnRhdHBaT2R3Mm4xNURoK3RMalM4QWZ1WGpQUnpldWI5UUJ6VnZkcllKaFFFVUgybWt2MHk0OThCR3duZnZpanRvRmJVM1NkcTJYL2QwUzN0THl6U0w5MU56ODJPZ0JQZ3NhdSt5Z1QrdE9BZzUxSENmWGRHZnluR3FFUlR2YThBMnFQTDdQYTJOM0xzL25aZEFLOTl5NkNrMjU2NURMVzNVeExKUlkrMnQ5L3h1dnJQWjB0cFNXYjZ0MHJmVjByU1AwOUhXdXE2MWRieTFUUXVpRXJ4TXBKZmNwcmRERlRVUFZiTkZOenRZYWoxbCtkVzhuNXBiWHVRMHExdWFENE1ub0ZDaTM5MG51aGpmOXlEWXZ4eXlJM1NhRjEwWHgwcmxKaXc2M2Eza1U2cDFLMmR3a3Z5eFd4eXIxYzhUT2tGT1hXS0txajNiaXZJRVgySEdiYnBBWXVYRGpxcEQxc0UrbjFadG5jUkpybW1nY25pVkRPdXd2UFdTQ3V5d25uOWFZN1V2MDFETjZ4RFR0MXFsUTllN2hVdGJoTUtXcGNKRUJTRmI5ZVVZWEFKSDVucTBrdnNoRG0xRnJXVzM4bzdCMjlCbHo4NTlXeVBQQTErYmp3YXArUHhraHRkMUlLSXc5ZnpseWs3VjJrNU1ubXVWWHNtdHRVTnpySDN4dHRZSDZKcWpPS0syUStlbXYxNzVQcVEzOFQrOW02Uzd5ZlU4cThEK0J4aFRSZUhDdmpUbldrQU05MUpZMlFrYjVBR1BRcVdKcUE3Nm5sdyt3L2U5T1lCaXBpNGQya3RJZU9ST3YxQkZjVythZ0NoQTNlc2xFWFVHYmNJR0FSVGM0bmhUMTFCWjY2WFh6VEZMRk55WklUNU1MVytyeUJtb2RXMlZyRVhEUk1acVJELzJxeU1MNzJYZ1FwR0VMZk5vejcwZ3ZvN0JrQnp4V3A2ZWhBVmFjbnBldFhrTjZ4SkdkZ2lKeWhwSmg3YUNNSWdETWNwUlQ4cWlhTHZMN0dhTlUrWm40dWlscmdhM1lvTStpS3NISHFqOUd1NG5ncnBGSG9XcnZsRlFQc1BjcHhsanFPTHN2ZG1tamJyZW1zSHJhOSt1U3NHRCtvVnVwYnNPYjdGeFpZVTZzcXhSYmR4MG5XT3hra2tpdXM0dm53L0swV0NKUjV1STc1WFhUMzE0QnMrOURUbkJ4YnlSbU5HNXd3NUJnV1BVSmhuWnNsMldXM041KzNVcmRpVTBMaXF4SUM5ZkpodWZObCtXVEpxdTBMY1Nra3hYNHpGQWU1UldSTFZjUGo1VE0xTkZSdFA1YmJma2MvWWJOTlVJaUxucFRCTFRzcnNwZ0NNWngybkZha012SnVjb2lqd2FVTWFLZUw3UVF1ZWo2S08yM0pGbFFJdFV1all6Ty9TWXVFMDdmYnZJUk5HOE1uY3BvNWQzbDVsSzBqSWptZHU0OVk5Ylg2bzI2WWxaYzdQZkhmOTB2TWRtSGx3WlFUeUhETlgxR2w1azFqN2NQNC81TU5FcDQwUUp6VE0zR0xpdjBKcmZCUjR1QWZmMHFCQk1XMEtVNFZtcTJPTXFjTE1kVERldmFQaUNtYlk0d1l5VkwxZ1pOblZSc2o0SExwYUF1ZWFucTRMY0NwbFhwUktpa3ltVTZZYWM0ZXUrRUlvKzEvTjUrczlGd2k5MFFQMk5yZ0NLR3BURExES1dMYVJXNmtiUGFtTjNFWm1LUklRUXlkVWViRVMwK1hHcWRxaGJnTVNtNHVIOWhiN3dBYXFPSVYyQzRLUFV2bUlFTDFBUGZBMzRLNWxtaXhWMzZHODBLTHNiVW8xQ251ckN5QlJGN2tjRlMrOUVzWVgvelFmZjhCL2JmZFBreXpzcE1JNHFqcG5zWHJyQW83LzFxZGZuUzBUTTNBYVMyVVR2UjhlTFZ1TGVqdXdMbEhkYnduVVdYWkZWbW94aG5hTExqakNiTmZpWjJRSkpMZ2lLMjhxT3VreWx5eFp5ZXVKUDNDL3BJYlE2VEYydWhYZ2FjS1pXRmJ2Z3ozR3Z3aDVnYUdkdElDSFpkQVB3UGFDekl1amFlMWZNZE9GOTJkNFF3V0h2T1gyTEtESmxqMmk2Tmpmb2hxc2doRnV1RzloS3JhWE4wb2hWMEVPa0dhTExMek9NdnVoWEU4dlU1ZGJvY3Nab0RNbE1JVE55K1RXaTBKS0lMNURVKzAvcGQwZjBRNG02Q1hXcDhNSFFJK1Y5bmhuY3dTREtNY29RL2NoelY3OWJLYysvdnZnNS9TRndPNzkwN1BENXUvZFV5dmV2OUQyalgwWlpkQWVTUmkvdmY2cTgzV096SnhpWVdoaktIOXA2RG1LVWR0dzM1ZjRTeHF0Ykg3b2pTY1dIRnJuVytEN2xZbTFOaytIbWF5cndkUFJDdmZZbThNc2xqeG9mRWMyTXVEWDMydy9NTStpbHV2enJEWndUY2VsdHVwOXVodDBHbDQ4ZCtRbkhXMDVVc2p6WGEvbm4yYk5zODNUOUVIWm91OG50NDhzRk9QczE3ODkzQ2JYYjJzTkxXVEdOanBVNEFNT1RyTGhXeTQ1UFhxdVZScXhPVlFUV1NHTldoeXI4eUI1NDhvSldZQVBaWGNEaHpjS085Mys4QitPNVI4eEtxTjVjbW95a0ZDbzFyaFlGWUsyb2hHZXpSdFFWakc2cDhqbkFPbFVwaitQcWJjUy9ubElDTldRNEM3QkVjUDFPYjkvWW5jNnRhNEkzTG5KSVZrYjdObUhkV0tqMndyOVp6S1RpNzVzWEsxTkRlNXhkWTRvcHo4ckUvUWVuSC9jc1dYWXFGZG1iY1FqWDJBZml0cEJFR3BHN2ZQSXV2ZkNyS3hWYXY5WVFZbVdramc0M3FBTFRmSmR0ektvVXhueEUvM2ZST20vUmpLaTd1ekFuT2FnZ1NGblhucGJySUhDMkxOZVdvdkZsMnBacXJnbi81S0xrc2pFaUlNTmkvSWhFby9SRlpaZy9heFlES1MvWUpVenJVN3RnaDl1RG03anRwQ0ZJV2I4OTJ4MkkyeXF5TVNyZWJyOUlxMlBXc0oyTVhyd3JOU0loM1FBNUEyL1pVSUswMWZid3ZtWUVGOHFHcXBCaUxHWHFYUzhldXdaaUxJN1Y5cWFQTGhqMjBVSlA5MnFWRjZWNHZVUWRZczM4bDlCVmdTbmNZT0c3WlZrdGl0cmZmdnRCMmI3UUorS0dtbk5ldkpValdldmhpQkN2VWlHTlBkeUdlQVhMdDBKNGZwQ2MyR2tGOTlYVFVrRzRWL3RxcEtYSDllbXBCeFZudjJ1RFhYcGZFOG1zbW1OV2xPTVkyRit3eVZETUdTZENZZVBtWW02VG9kT3lDem5UNW5ESU5GSFFJaVg0WW5VNm9WM3E5VWd3bmN5bE9HYVNabytYU2FRbVZqdXpCazNHYUtRWFJ4Wnh1ZzFKdnMvMHcyRDRmMXZ4eVVRZUdCWjV2VElEKzRkYzhzZDRUKzNRdmxmQVhCK2FJNytVemM3ekZBK0xPWnhmNUtDOFFtMXZmOHhJQWRCb1V6bDFOS1ArUkhkRjRmaXA1bGNhbW5ZM2QxUzF2MWIvdFdQSVlpOFJoTDJrNVE1bmFVR2c4VG9hMTJpVG1GbWJVQTBVVFdoMENUT21TK3BpZ0hjbHBEaHg4R2FvdlNXakxYUXIwVklFb2gvejFLVVR0bjNYZU9nNzlEQys1Q1NVNlJyZFBlbVRYLzFzaWR2NkQ1Z1ZhVlpzSlRQblV6c2xWNnZGVXZYVkV1blZISWxFYzdWWFpwTkxiYkt2TWJCc2I2L2tzMytMb2VYVFY5SVFzZ01OOWwwYjJnSlpuUE5wT003dXZaNHVXYllkNTlSVE9UdzNKR1hwbnZxcWhiWCtHMERLVkN0Z0VsMVVMUlBmM2VyZ2tOOVBGNjRFRUhXWlJ0M0UyNjIxZlBTSGFqK3hTTDJIaGx6d2RUMnpxdmgvd1pkc0NFak5vNG91SUxkN0ljZTFiUkh3ZnBWV0JaaGpmWmlaVEF0Rk5WTUxnNmdXTWhocW1XaEswUjNFcG9LdHh5dVd6UzFxNW1ycE93cThlVnkzQy9GUmVSTUlIS2VaS0VJK2VZaXVvbWwyQ1BvTUZqWDZxOEJsdjBjRTNWdW9RazhLNXllTXBkTkhJSWtzM3hoTENTWGxmRThxdjN4K2p3OVFZcGhTNHpMSE5mM3p0ckVtTUowNEcwMTJVc1BYNSt0cXVrWGJWMmhLYlVrUlRJNmMrRHhEZmxNaHhvc0NJYy96Z0poSEZVdGRqeWx2V0NrcHVMNDJkV0RmcE9sdWFxbFoxaE5CdE5zTGZCR1JxVUptSVN2OVo0RkVla3Znald0c2JHcjhRZTUySTdpOUpmZ1JYZ09RdlY3YkpOYXQrT3R0WS9Rd3lrdU53SDRqQzFiNVpVdlpwNyt1cTJGa3VyczRtZ09oZHJXL2Q5amdUUTY3cGdLRHI4aG0vazdvOW83czUwNnkyQ2VlWTNQdU84Rm1uYnp2YnRZUExhMy9XL3JaRkpaN0dnSU0zNjdYd1BZamdNcHIvRU1nNFhvRG01R3VsMWdIczcvQ0lTYWIzenVnazA0TWFBMElWRVV2cm0zdXBXRFI4RGNLaGx0UU1GeU5naUVUSS9nbmU2MmtUZDZjMmRiazVXSERyeDdaSklzcWNLWXZTdUpSbElhaW9CdEZ3VHNvQ3Y2VW9nVEFkY2dKTGNnSnp5SW5QSUtjOEtHVW9pOTB3ZlNhUnV3QW9vK29xYnFSMnVjUnBnNC9jajNCVEpqOUtlWng0R2ZqbW1BWDVUbVdZQ2xUTU55bXp3UWx4V21EUjlWKy9pT2NKUFpmbUI2SGwrQUdqWTBvNHRSdDF2Y0h1NGJGYW4yeXorQWJSak5iOG8xU1RqZEdHcU5PeFg0U0lUVnB5Q1BYSTh5aGlUM0JBaVllM3pJVitLaGs1aVJDUG1qVCszU2xlcCt1QnZuZzVER0xRZkVYQThFQTluYnJuWG9Bc1h3eGU3K3VJdEFJZm8zNjhVZzNRbUJxK3dqb2JmUXgrZ1I5aWo1RG42TXZ3SmZnUGVrclV2d2FxU0srVmQ3RDcrRDN6QThlMnZoMkl6RDl0ZW54VkQ2SkM0NTEyeHQ4bGo1SGZUOVBmeHArb3M0SHRBVmR3WXpLbktxK1FzenhleG8zckd3TGNyZDJWZFFRTjFtWHgxUGN3QzF1NHNQYnpCTkVMdjJMYUxEZFV0UDJvYlF4SzhhekhvTzRXM2lEM1Q0OWZXZVUyZWZSM2Y3L3lMRllabURRWHZjOUs5bGFnVVVBTWVMZWZ4YXNBakNIZlZnQVpCNklkWXM1MFh1MTNicUxGOWIyNEk5WkQyc0RiaTE0L3o4Z3kxaXhsdGpndk9VQjVMb0FnQlhZemFsSmdzYU1yUjF0WFlkUlJsR0g5UlFkc0UrNnhtUmc4eUllbzhveFJ1TVFCU29QdU1PTVlNTGRzNHhHQ0orSDJTTWk1YWJ1cy93Q1ZZNXROQTBYbTB5OXhHTTBKdEFPcTFwZ0swQmRLQWY3REtHdjBNZm95OUYvWkdsYWxOdmx3bmxDY2hndFJMOWxXNkFyNEtOK29TZGdJeFhwSUp5RjI3Z08yTy9OQWxoMVZYZU5PeVBkOS8zU0lLQS9WQ2szOVk0RVBZaXVIZU1CSEpwV2ttM1FlSkVMUEVZTDBXOWdnWkthOXpHSHp2OGJJN0RIZS80WWJoZmUyRTlpb085Sk0zMjNidWJzU2tRdmlNdytuM1FOSlVlOHRPdHJ6eTV2MkVhNjdBMnhWWlRzNHU4eTFqam51NTNOQzNrRWJpRS9aanNpdWxPajIwUTY4VTZZRWltdHhrdXVDM3ZMOFlaTG8yc0ZFYWRReHV2RzlsRTBldDYrbGsrN01RSG9OMFBZbHNhWGIrdmFOM3RyMXk0MmRWbWtmU2JWNXhpM0JiVjF1MTFNOXdEMGxPekxYbllDUjkwdDR3dCtyaXVvS0ExOXl1d0QycExBSndRN1ozeStjSW5pOGtnNjE4blVTQVQyTzZWSy8zV0JJYTFoVDJldzdFb0ZTcmFNSWorVFdFMCs5NHJhSEFKd0VUOStaN3BsWEVqcTN4REgzUURnNUlHTys1TDhMMitKLytpd3p4UE14Z0VpQmdBSS9peVpvSEFtTVAwL2VFNWs5eTZpTmUxazZ3N1d6NHVjcnFUcHh5WjNCZVVKdjJSeXAzWEZUUFlkeUw3Skl3UjRSa2p6TjdhelhpMkNJTUUwcFRYb2RaYzdJU2pkK3JMNEZIeEdFeTNBUkhVQXgxVi9MWnZpamw4d1dWMm0xZlNDZitzd2MwVzA2T3FhNW02U0t6eXRSbmhRVmFnTTZNY2hSZ2tKTVhZRThZaEI5dW1Lb29UcEdScU5rSzRmeDRPVyt1KzRDcmNHWXJnVFo1dm1HOVRVanRmbmlxWVpVV1Q2VWcwZUUzaGtpVUc1bkJwZ2pGMTREWGJvK0RRUmJmcFYxM3pNcGxJSkN1YytWTEp4R2dhenhGd1dJM1pMbmo2NVg1MDB4QjAzb1owTUw0YVNQNkd2UVhLYnVQTXJVcXZtYVFoM1VHWnJSVVpOaVlvOXRYVFJVN3hHbGRTeXBZNDViQXJMVUxNenRBYjY1aW1kSU9hUkRZcElVRjVCc0lvN0tRNi9VelN3dEkyU2VkUzFrN1FvSVhQU2MwR1RGNHV6V2h4THh2d054RjdoOXIxMkxMWVhJZDlGRDVzck8vUzMyYktlV3paUEpxWC9BTTNRaDFwdWZTdDc2amlRdllFbDFtTTBlTTdUTWt3QUEzdDlTRG03NlphWEtMWjU2NXZwTzBpeHZmUXlDSTJqNUJPaFYvazJQaVYzc1J0NEtxRmwvbUR1RG5VejZtN1Z2NzhSUGIzSTFqUE1YVkNxVllpZitFVEZIblczcmNoTWI1MWUxdXVWcHpMMGxnR1RJQVVNYVJVRmNLQURzSUVFMFFJWm1LZnlEVWxGWlljbzJhNi80M1FEQ2FYc2tjTUdPSzJzNUtGenFQeWk3c2pmSjlTOE5Wb2pqOG9YMU1qdXlmRUVRSUNQY1dpbUFXZ2pMQndrSnEwT0pqaWRIWnoyaVkzT1p6c0VrZG5yRU5seW5TTllZbDV5aERLWFlnOGoxYnFUQ0Foc25DN3k1S3RRS0p0WGxtSXloVXU4TkxMQkJaaXl1UU9VeURiSmRFVW15RFdackw5Q2VhYVpZaElIN1VTMHVKWG1lYlRJaWpaQmNyRjgwMjg2SnlldjdFeTF4RVFPcXNtVHc3bkt0ZEFVWmV6eVRlRGxreTNYQkdVWjQzTEtwaDdRSEs3eHFlQVFldnRvY1dSbEV0SmxBMDFSWk1wUktUVkZYZXJweFZ4RnhiNjhuRjdqc3E3R2JkVTIwQnVlSVZKT3dzZkZxNFRQQklVU09MaTRKTXJRVno5OWRaTWhhUEM0V1RzWXlnRW5acXM0bXJ3WUtkeGV1UGxZS1RMSnFEUy9WNG80aENvK0R2TlFiL1FJK3ZIb3JlZmdNVFBNbTRZNXUwNzVQNkpJWGhIL2UxL3lud0VBKSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfWJvZHksaHRtbHtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fWh0bWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXBhcmFncmFwaCxwe2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjR9Lm1vbnN0ZXItaDEsaDF7Zm9udC1zaXplOjNyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjE7bWFyZ2luLWJvdHRvbToxLjI1cmVtfS5tb25zdGVyLWgyLGgye2ZvbnQtc2l6ZToyLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OmNhbGMoNHB4ICsgMmV4KTttYXJnaW4tYm90dG9tOjEuMjVyZW19Lm1vbnN0ZXItaDMsaDN7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OmNhbGMoNHB4ICsgMmV4KTttYXJnaW4tYm90dG9tOjEuMjVyZW19Lm1vbnN0ZXItaDQsaDR7Zm9udC1zaXplOjEuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6Y2FsYyg0cHggKyAyZXgpO21hcmdpbi1ib3R0b206MS4yNXJlbX0ubW9uc3Rlci1oNSxoNXtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OmJvbGRlcjtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfS5tb25zdGVyLWg2LGg2e2ZvbnQtc2l6ZToxLjNyZW07Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OmNhbGMoNHB4ICsgMmV4KTttYXJnaW4tYm90dG9tOjEuMjVyZW19cCtoMXttYXJnaW4tdG9wOjMuNzVyZW19cCtoMnttYXJnaW4tdG9wOjNyZW19cCtoM3ttYXJnaW4tdG9wOjIuMjVyZW19cCtoNHttYXJnaW4tdG9wOjEuNXJlbX1wK2g1e21hcmdpbi10b3A6Ljc1cmVtfWRpditoMSxkaXYraDIsZGl2K2gzLGRpditoNCxkaXYraDUsZGl2K2g2LHAraDZ7bWFyZ2luLXRvcDowfS5kZWNve3RleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX06Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9OjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX1rYmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Ym9yZGVyLXJhZGl1czoxMHJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtwYWRkaW5nOi4yNWVtIC42ZW07dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfWRldGFpbHN7bWFyZ2luLWJvdHRvbToxcmVtfXN1bW1hcnl7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NzAwO3BhZGRpbmc6LjZyZW0gMXJlbX1kZXRhaWxzW29wZW5de3BhZGRpbmc6LjZyZW0gMXJlbSAuNzVyZW19ZGV0YWlsc1tvcGVuXSBzdW1tYXJ5e21hcmdpbi1ib3R0b206LjVyZW07cGFkZGluZzowfS5tb25zdGVyLW5vLXVzZXItc2VsZWN0ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX1Aa2V5ZnJhbWVzIGRldGFpbHMtc2hvd3swJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41ZW0pfX1kZXRhaWxzW29wZW5dPjpub3Qoc3VtbWFyeSl7YW5pbWF0aW9uOmRldGFpbHMtc2hvdyAuMTVzIGVhc2UtaW4tb3V0fWRldGFpbHNbb3Blbl0+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsXFxcIlF1aWNrc2FuZFxcXCIsXFxcIlNlZ29lIFVJXFxcIixcXFwiUm9ib3RvXFxcIixcXFwiT3h5Z2VuXFxcIixcXFwiVWJ1bnR1XFxcIixcXFwiQ2FudGFyZWxsXFxcIixcXFwiRmlyYSBTYW5zXFxcIixcXFwiRHJvaWQgU2Fuc1xcXCIsXFxcIkhlbHZldGljYSBOZXVlXFxcIixBcmlhbCxzYW5zLXNlcmlmLFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIjstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi02KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNik7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTE6IzgzM2FiNDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMjojZmQxZDFkOy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zOiNmY2IwNDU7LS1tb25zdGVyLWJveC1zaGFkb3ctMTpub25lOy0tbW9uc3Rlci1ib3gtc2hhZG93LTI6LTFweCAxcHggMTBweCAxcHggaHNsYSgwLDAlLDc2JSwuNjEpOy0tbW9uc3Rlci10ZXh0LXNoYWRvdzpub25lOy0tbW9uc3Rlci1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLWJvcmRlci13aWR0aDoycHg7LS1tb25zdGVyLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2U6LTRweDstLW1vbnN0ZXItei1pbmRleC1kZWZhdWx0OjA7LS1tb25zdGVyLXotaW5kZXgtb3V0bGluZToxMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bjoyMDA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd24tb3ZlcmxheToyMTA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5OjMwMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3ktb3ZlcmxheTozMTA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQ6NDAwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkLW92ZXJsYXk6NDEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wOjUwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcC1vdmVybGF5OjUxMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXM6NjAwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhcy1vdmVybGF5OjYxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbDo3MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheTo3MTA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlcjo4MDA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlci1vdmVybGF5OjgxMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwOjgwMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwLW92ZXJsYXk6OTEwOy0tbW9uc3Rlci1zcGFjZS0wOjA7LS1tb25zdGVyLXNwYWNlLTE6MnB4Oy0tbW9uc3Rlci1zcGFjZS0yOjRweDstLW1vbnN0ZXItc3BhY2UtMzo2cHg7LS1tb25zdGVyLXNwYWNlLTQ6MTBweDstLW1vbnN0ZXItc3BhY2UtNToxNnB4Oy0tbW9uc3Rlci1zcGFjZS02OjI2cHg7LS1tb25zdGVyLXNwYWNlLTc6NDJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0wOjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTQ6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNzo3NjhweDstLW1vbnN0ZXItYnJlYWtwb2ludC05Ojk5MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTEyOjEyMDBweH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtib3JkZXI6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LXdyYXA6bm93cmFwO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O21hcmdpbjowO21pbi1oZWlnaHQ6MTAwdmg7cGFkZGluZzowfVtkYXRhLW1vbnN0ZXItcm9sZT1oZWFkZXJde2hlaWdodDo2NHB4O21hcmdpbjowIDAgMCA2MHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250ZW50XSxbZGF0YS1tb25zdGVyLXJvbGU9Zm9vdGVyXSxbZGF0YS1tb25zdGVyLXJvbGU9aGVhZGVyXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBwYXJzZUxvY2FsZSB9IGZyb20gXCIuLi9sb2NhbGUubWpzXCI7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gXCIuLi9wcm92aWRlci5tanNcIjtcbmltcG9ydCB7IFRyYW5zbGF0aW9ucyB9IGZyb20gXCIuLi90cmFuc2xhdGlvbnMubWpzXCI7XG5cbmV4cG9ydCB7IEVtYmVkIH07XG5cbi8qKlxuICogVGhlIEVtYmVkIHByb3ZpZGVyIHJldHJpZXZlcyBhIEpTT04gZmlsZSBmcm9tIHRoZSBnaXZlbiBTY3JpcHQgVGFnLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vLi4vZXhhbXBsZS9pMThuL3Byb3ZpZGVycy9lbWJlZC5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkkxOG4uUHJvdmlkZXJzXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzMwNjZ9XG4gKiBAdHV0b3JpYWwgaTE4bi1sb2NhbGUtYW5kLWZvcm1hdHRlclxuICovXG5jbGFzcyBFbWJlZCBleHRlbmRzIFByb3ZpZGVyIHtcblx0LyoqXG5cdCAqIGBgYGh0bWxcblx0ICogPHNjcmlwdCBpZD1cInRyYW5zbGF0aW9uc1wiIHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCI+XG5cdCAqIHtcblx0ICogICAgIFwiaGVsbG9cIjogXCJIYWxsb1wiXG5cdCAqIH1cblx0ICogPC9zY3JpcHQ+XG5cdCAqIGBgYFxuXHQgKlxuXHQgKlxuXHQgKiBgYGBqYXZhc2NyaXB0XG5cdCAqIG5ldyBFbWJlZCgndHJhbnNsYXRpb25zJylcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8c3RyaW5nfSBlbGVtZW50T3JJZFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHQgKi9cblx0Y29uc3RydWN0b3IoZWxlbWVudE9ySWQsIG9wdGlvbnMpIHtcblx0XHRzdXBlcihvcHRpb25zKTtcblxuXHRcdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG9wdGlvbnMgPSB7fTtcblx0XHR9XG5cblx0XHRpZiAoZWxlbWVudE9ySWQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBAcHJvcGVydHkge0hUTUxFbGVtZW50fHN0cmluZ31cblx0XHRcdCAqL1xuXHRcdFx0dGhpcy50cmFuc2xhdGVFbGVtZW50ID0gZWxlbWVudE9ySWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogQHByb3BlcnR5IHtIVE1MRWxlbWVudHxzdHJpbmd9XG5cdFx0XHQgKi9cblx0XHRcdHRoaXMudHJhbnNsYXRlRWxlbWVudCA9IGdldERvY3VtZW50KCkuZ2V0RWxlbWVudEJ5SWQoXG5cdFx0XHRcdHZhbGlkYXRlU3RyaW5nKGVsZW1lbnRPcklkKSxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcHJvcGVydHkge09iamVjdH0gb3B0aW9uc1xuXHRcdCAqL1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gZXh0ZW5kKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHRoaXMuZGVmYXVsdHMsXG5cdFx0XHR2YWxpZGF0ZU9iamVjdChvcHRpb25zKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmF1bHRzXG5cdCAqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEl9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7TG9jYWxlfHN0cmluZ30gbG9jYWxlXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRnZXRUcmFuc2xhdGlvbnMobG9jYWxlKSB7XG5cdFx0aWYgKGlzU3RyaW5nKGxvY2FsZSkpIHtcblx0XHRcdGxvY2FsZSA9IHBhcnNlTG9jYWxlKGxvY2FsZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGlmICh0aGlzLnRyYW5zbGF0ZUVsZW1lbnQgPT09IG51bGwpIHtcblx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIlRleHQgbm90IGZvdW5kXCIpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoISh0aGlzLnRyYW5zbGF0ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MU2NyaXB0RWxlbWVudCkpIHtcblx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIkVsZW1lbnQgaXMgbm90IGEgc2NyaXB0IHRhZ1wiKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMudHJhbnNsYXRlRWxlbWVudC50eXBlICE9PSBcImFwcGxpY2F0aW9uL2pzb25cIikge1xuXHRcdFx0XHRyZWplY3QoXG5cdFx0XHRcdFx0bmV3IEVycm9yKFwiRWxlbWVudCBpcyBub3QgYSBzY3JpcHQgdGFnIHdpdGggdHlwZSBhcHBsaWNhdGlvbi9qc29uXCIpLFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGxldCB0cmFuc2xhdGlvbnMgPSBudWxsO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dHJhbnNsYXRpb25zID0gSlNPTi5wYXJzZSh0aGlzLnRyYW5zbGF0ZUVsZW1lbnQuaW5uZXJIVE1MLnRyaW0oKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodHJhbnNsYXRpb25zID09PSBudWxsKSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJUcmFuc2xhdGlvbnMgbm90IGZvdW5kIG9yIGludmFsaWRcIikpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHQgPSBuZXcgVHJhbnNsYXRpb25zKGxvY2FsZSk7XG5cdFx0XHR0LmFzc2lnblRyYW5zbGF0aW9ucyh0cmFuc2xhdGlvbnMpO1xuXG5cdFx0XHRyZXNvbHZlKHQpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSB0cmFuc2xhdGlvbnMgZm9yIHRoZSBjdXJyZW50IGRvY3VtZW50LlxuXHQgKlxuXHQgKiBgc2NyaXB0W2RhdGEtbW9uc3Rlci1yb2xlPXRyYW5zbGF0aW9uc11gIGlzIHNlYXJjaGVkIGZvciBhbmQgdGhlIHRyYW5zbGF0aW9ucyBhcmUgYXNzaWduZWQgdG8gdGhlIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBlbGVtZW50XG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd25bXT59XG5cdCAqL1xuXHRzdGF0aWMgYXNzaWduVHJhbnNsYXRpb25zVG9FbGVtZW50KGVsZW1lbnQpIHtcblx0XHRjb25zdCBkID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRcdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRcdGVsZW1lbnQgPSBkLnF1ZXJ5U2VsZWN0b3IoXCJib2R5XCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxpc3QgPSBkLnF1ZXJ5U2VsZWN0b3JBbGwoXCJzY3JpcHRbZGF0YS1tb25zdGVyLXJvbGU9dHJhbnNsYXRpb25zXVwiKTtcblx0XHRpZiAobGlzdCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHByb21pc2VzID0gW107XG5cblx0XHRsaXN0LmZvckVhY2goKHRyYW5zbGF0aW9uRWxlbWVudCkgPT4ge1xuXHRcdFx0Y29uc3QgcCA9IG5ldyBFbWJlZCh0cmFuc2xhdGlvbkVsZW1lbnQpO1xuXHRcdFx0cHJvbWlzZXMucHVzaChwLmFzc2lnblRvRWxlbWVudCh1bmRlZmluZWQsIGVsZW1lbnQpKTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGdldERvY3VtZW50LCBnZXRXaW5kb3cgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuXG5leHBvcnQgeyBkb21SZWFkeSwgd2luZG93UmVhZHkgfTtcblxuLyoqXG4gKiBUaGlzIHZhcmlhYmxlIGlzIGEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCBhcyBzb29uIGFzIHRoZSBkb20gaXMgYXZhaWxhYmxlLlxuICpcbiAqIFRoZSBET01Db250ZW50TG9hZGVkIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIG9yaWdpbmFsIEhUTUwgZG9jdW1lbnQgaXMgZnVsbHkgbG9hZGVkIGFuZCBwYXJzZWRcbiAqIHdpdGhvdXQgd2FpdGluZyBmb3Igc3R5bGVzaGVldHMsIGltYWdlcywgYW5kIHN1YmZyYW1lcyB0byBmaW5pc2ggbG9hZGluZy5cbiAqXG4gKiBkb2N1bWVudC5yZWFkeVN0YXRlIGNoYW5nZXMgdG8gaW50ZXJhY3RpdmVcbiAqIHdpbmRvdydzIERPTUNvbnRlbnRMb2FkZWQgZXZlbnQgZ2V0cyBmaXJlZFxuICogZG9jdW1lbnQucmVhZHlTdGF0ZSBjaGFuZ2VzIHRvIGNvbXBsZXRlXG4gKiB3aW5kb3cncyBsb2FkIGV2ZW50IGdldHMgZmlyZWQgbG9hZFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMzEuMFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAc3VtbWFyeSB2YXJpYWJsZSB0byBjaGVjayBpZiBkb20gaXMgcmVhZHlcbiAqIEB0eXBlIHtQcm9taXNlfVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRG9jdW1lbnQvRE9NQ29udGVudExvYWRlZF9ldmVudFxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRG9jdW1lbnQvcmVhZHlTdGF0ZVxuICovXG5jb25zdCBkb21SZWFkeSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJsb2FkaW5nXCIpIHtcblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCByZXNvbHZlKTtcblx0fSBlbHNlIHtcblx0XHRyZXNvbHZlKCk7XG5cdH1cbn0pO1xuXG4vKipcbiAqIFRoaXMgdmFyaWFibGUgaXMgYSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIGFzIHNvb24gYXMgdGhlIHdpbmRvd3MgaXMgYXZhaWxhYmxlLlxuICpcbiAqIFRoZSBsb2FkIGV2ZW50IGZpcmVzIHdoZW4gdGhlIGVudGlyZSBwYWdlIGlzIGxvYWRlZCwgaW5jbHVkaW5nIGFsbCBkZXBlbmRlbnQgcmVzb3VyY2VzIHN1Y2ggYXMgc3R5bGVzaGVldHMsXG4gKiBhc3NldHMsIGFuZCBpbWFnZXMuIFVubGlrZSBET01Db250ZW50TG9hZGVkLCB3aGljaCBmaXJlcyBhcyBzb29uIGFzIHRoZSBET00gb2YgdGhlIHBhZ2UgaXMgbG9hZGVkLFxuICogd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgcmVzb3VyY2VzIHRvIGZpbmlzaCBsb2FkaW5nLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMzEuMFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAc3VtbWFyeSB2YXJpYWJsZSB0byBjaGVjayBpZiB3aW5kb3cgaXMgcmVhZHlcbiAqIEB0eXBlIHtQcm9taXNlfVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93L2xvYWRfZXZlbnRcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L3JlYWR5U3RhdGVcbiAqL1xuY29uc3Qgd2luZG93UmVhZHkgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cdGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuXG5cdGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHtcblx0XHRyZXNvbHZlKCk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHJlc29sdmUpO1xuXHR9XG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IEJhc2VXaXRoT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IFN0YWNrIH0gZnJvbSBcIi4uL3R5cGVzL3N0YWNrLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBGb2N1c01hbmFnZXIgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgS0VZX0RPQ1VNRU5UID0gXCJkb2N1bWVudFwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBLRVlfQ09OVEVYVCA9IFwiY29udGV4dFwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBzdGFja1N5bWJvbCA9IFN5bWJvbChcInN0YWNrXCIpO1xuXG4vKipcbiAqIFdpdGggdGhlIGZvY3VzIG1hbmFnZXIgdGhlIGZvY3VzIGNhbiBiZSBzdG9yZWQgaW4gYSBkb2N1bWVudCwgcmVjYWxsZWQgYW5kIG1vdmVkLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGxvY2FsZVxuICogQHN1bW1hcnkgSGFuZGxlIHRoZSBmb2N1c1xuICovXG5jbGFzcyBGb2N1c01hbmFnZXIgZXh0ZW5kcyBCYXNlV2l0aE9wdGlvbnMge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R8dW5kZWZpbmVkfSBvcHRpb25zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZSh0aGlzLmdldE9wdGlvbihLRVlfRE9DVU1FTlQpLCBIVE1MRG9jdW1lbnQpO1xuXG5cdFx0dGhpc1tzdGFja1N5bWJvbF0gPSBuZXcgU3RhY2soKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9mb2N1c21hbmFnZXJcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtIVE1MRG9jdW1lbnR9IGRvY3VtZW50IHRoZSBkb2N1bWVudCBvYmplY3QgaW50byB3aGljaCB0aGUgbm9kZSBpcyB0byBiZSBhcHBlbmRlZFxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRbS0VZX0RPQ1VNRU5UXTogZ2V0R2xvYmFsT2JqZWN0KFwiZG9jdW1lbnRcIiksXG5cdFx0XHRbS0VZX0NPTlRFWFRdOiB1bmRlZmluZWQsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtZW1iZXJzIHRoZSBjdXJyZW50IGZvY3VzIG9uIGEgc3RhY2suXG5cdCAqIFNldmVyYWwgZm9jdXMgY2FuIGJlIHN0b3JlZC5cblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uRm9jdXNNYW5hZ2VyfVxuXHQgKi9cblx0c3RvcmVGb2N1cygpIHtcblx0XHRjb25zdCBhY3RpdmUgPSB0aGlzLmdldEFjdGl2ZSgpO1xuXHRcdGlmIChhY3RpdmUgaW5zdGFuY2VvZiBOb2RlKSB7XG5cdFx0XHR0aGlzW3N0YWNrU3ltYm9sXS5wdXNoKGFjdGl2ZSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBsYXN0IGZvY3VzIG9uIHRoZSBzdGFjayBpcyBzZXQgYWdhaW5cblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uRm9jdXNNYW5hZ2VyfVxuXHQgKi9cblx0cmVzdG9yZUZvY3VzKCkge1xuXHRcdGNvbnN0IGxhc3QgPSB0aGlzW3N0YWNrU3ltYm9sXS5wb3AoKTtcblx0XHRpZiAobGFzdCBpbnN0YW5jZW9mIE5vZGUpIHtcblx0XHRcdHRoaXMuZm9jdXMobGFzdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBlbGVtZW50XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJldmVudFNjcm9sbFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5Gb2N1c01hbmFnZXJ9XG5cdCAqL1xuXHRmb2N1cyhlbGVtZW50LCBwcmV2ZW50U2Nyb2xsKSB7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBOb2RlKTtcblxuXHRcdGVsZW1lbnQuZm9jdXMoe1xuXHRcdFx0cHJldmVudFNjcm9sbDogcHJldmVudFNjcm9sbCA/PyBmYWxzZSxcblx0XHR9KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0VsZW1lbnR9XG5cdCAqL1xuXHRnZXRBY3RpdmUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKEtFWV9ET0NVTUVOVCkuYWN0aXZlRWxlbWVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZWxlY3QgYWxsIGVsZW1lbnRzIHRoYXQgY2FuIGJlIGZvY3VzZWRcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBxdWVyeVxuXHQgKiBAcmV0dXJuIHthcnJheX1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2Zcblx0ICovXG5cdGdldEZvY3VzYWJsZShxdWVyeSkge1xuXHRcdGxldCBjb250ZXh0RWxlbWVudCA9IHRoaXMuZ2V0T3B0aW9uKEtFWV9DT05URVhUKTtcblx0XHRpZiAoY29udGV4dEVsZW1lbnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29udGV4dEVsZW1lbnQgPSB0aGlzLmdldE9wdGlvbihLRVlfRE9DVU1FTlQpO1xuXHRcdH1cblxuXHRcdHZhbGlkYXRlSW5zdGFuY2UoY29udGV4dEVsZW1lbnQsIE5vZGUpO1xuXG5cdFx0aWYgKHF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHF1ZXJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0Li4uY29udGV4dEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcblx0XHRcdFx0J2RldGFpbHMsIGJ1dHRvbiwgaW5wdXQsIFt0YWJpbmRleF06bm90KFt0YWJpbmRleD1cIi0xXCJdKSwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgYm9keScsXG5cdFx0XHQpLFxuXHRcdF0uZmlsdGVyKChlbGVtZW50KSA9PiB7XG5cdFx0XHRpZiAocXVlcnkgIT09IHVuZGVmaW5lZCAmJiAhZWxlbWVudC5tYXRjaGVzKHF1ZXJ5KSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImRpc2FibGVkXCIpKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJhcmlhLWhpZGRlblwiKSA9PT0gXCJ0cnVlXCIpIHJldHVybiBmYWxzZTtcblxuXHRcdFx0Y29uc3QgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRpZiAocmVjdC53aWR0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0aWYgKHJlY3QuaGVpZ2h0ID09PSAwKSByZXR1cm4gZmFsc2U7XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeVxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5Gb2N1c01hbmFnZXJ9XG5cdCAqL1xuXHRmb2N1c05leHQocXVlcnkpIHtcblx0XHRjb25zdCBjdXJyZW50ID0gdGhpcy5nZXRBY3RpdmUoKTtcblx0XHRjb25zdCBmb2N1c2FibGUgPSB0aGlzLmdldEZvY3VzYWJsZShxdWVyeSk7XG5cblx0XHRpZiAoIWlzQXJyYXkoZm9jdXNhYmxlKSB8fCBmb2N1c2FibGUubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRpZiAoY3VycmVudCBpbnN0YW5jZW9mIE5vZGUpIHtcblx0XHRcdGNvbnN0IGluZGV4ID0gZm9jdXNhYmxlLmluZGV4T2YoY3VycmVudCk7XG5cblx0XHRcdGlmIChpbmRleCA+IC0xKSB7XG5cdFx0XHRcdHRoaXMuZm9jdXMoZm9jdXNhYmxlW2luZGV4ICsgMV0gfHwgZm9jdXNhYmxlWzBdKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZm9jdXMoZm9jdXNhYmxlWzBdKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mb2N1cyhmb2N1c2FibGVbMF0pO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeVxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5Gb2N1c01hbmFnZXJ9XG5cdCAqL1xuXHRmb2N1c1ByZXYocXVlcnkpIHtcblx0XHRjb25zdCBjdXJyZW50ID0gdGhpcy5nZXRBY3RpdmUoKTtcblx0XHRjb25zdCBmb2N1c2FibGUgPSB0aGlzLmdldEZvY3VzYWJsZShxdWVyeSk7XG5cblx0XHRpZiAoIWlzQXJyYXkoZm9jdXNhYmxlKSB8fCBmb2N1c2FibGUubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRpZiAoY3VycmVudCBpbnN0YW5jZW9mIE5vZGUpIHtcblx0XHRcdGNvbnN0IGluZGV4ID0gZm9jdXNhYmxlLmluZGV4T2YoY3VycmVudCk7XG5cblx0XHRcdGlmIChpbmRleCA+IC0xKSB7XG5cdFx0XHRcdHRoaXMuZm9jdXMoZm9jdXNhYmxlW2luZGV4IC0gMV0gfHwgZm9jdXNhYmxlW2ZvY3VzYWJsZS5sZW5ndGggLSAxXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmZvY3VzKGZvY3VzYWJsZVtmb2N1c2FibGUubGVuZ3RoIC0gMV0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmZvY3VzKGZvY3VzYWJsZVtmb2N1c2FibGUubGVuZ3RoIC0gMV0pO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi9kYXRhL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQgeyBwYXJzZURhdGFVUkwgfSBmcm9tIFwiLi9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi9pcy5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4vb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBQcm94eU9ic2VydmVyIH0gZnJvbSBcIi4vcHJveHlvYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0IH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gXCIuL2lzLm1qc1wiO1xuXG5leHBvcnQgeyBlcXVpcFdpdGhJbnRlcm5hbCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBwcm9wZXJ0eU5hbWUgPSBcImludGVybmFsRGVmYXVsdHNcIjtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGV4dGVuZHMgdGhlIGdpdmVuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgbWV0aG9kczpcbiAqXG4gKiAtIGF0dGFjaEludGVybmFsT2JzZXJ2ZXJcbiAqIC0gZGV0YWNoSW50ZXJuYWxPYnNlcnZlclxuICogLSBjb250YWluc0ludGVybmFsT2JzZXJ2ZXJcbiAqIC0gc2V0SW50ZXJuYWxcbiAqIC0gc2V0SW50ZXJuYWxzXG4gKiAtIGdldEludGVybmFsXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy4xNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuZnVuY3Rpb24gZXF1aXBXaXRoSW50ZXJuYWwoKSB7XG5cdHZhbGlkYXRlT2JqZWN0KHRoaXMpO1xuXG5cdGlmICghaGFzR2V0dGVyKHRoaXMsIHByb3BlcnR5TmFtZSkpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlOYW1lLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdGNvbnN0IGRlZmF1bHRzID0gZXh0ZW5kKHt9LCB0aGlzW3Byb3BlcnR5TmFtZV0gfHwge30pO1xuXHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IG5ldyBQcm94eU9ic2VydmVyKGRlZmF1bHRzKTtcblxuXHQvKipcblx0ICogQXR0YWNoIGEgbmV3IG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0dGhpc1tcImF0dGFjaEludGVybmFsT2JzZXJ2ZXJcIl0gPSAob2JzZXJ2ZXIpID0+IHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0LyoqXG5cdCAqIERldGFjaCBhIG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0dGhpc1tcImRldGFjaEludGVybmFsT2JzZXJ2ZXJcIl0gPSAob2JzZXJ2ZXIpID0+IHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5kZXRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIGEgb2JzZXJ2ZXIgaXMgYXR0YWNoZWRcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHR0aGlzW1wiY29udGFpbnNJbnRlcm5hbE9ic2VydmVyXCJdID0gKG9ic2VydmVyKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBTZXQgYW4gaW50ZXJuYWwgdmFsdWUsIG5lc3RlZCBpbnRlcm5hbHMgY2FuIGJlIHNwZWNpZmllZCBieSBwYXRoIGBhLmIuY2Bcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKi9cblx0dGhpc1tcInNldEludGVybmFsXCJdID0gKHBhdGgsIHZhbHVlKSA9PiB7XG5cdFx0bmV3IFBhdGhmaW5kZXIodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpKS5zZXRWaWEocGF0aCwgdmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBzZXQgbXVsdGlwbGUgaW50ZXJuYWxzIGF0IG9uY2Vcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge0RhdGFzb3VyY2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uXG5cdCAqL1xuXHR0aGlzW1wic2V0SW50ZXJuYWxzXCJdID0gKG9wdGlvbnMpID0+IHtcblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSBwYXJzZU9wdGlvbnNKU09OKG9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdGV4dGVuZCh0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCksIGRlZmF1bHRzLCBvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKipcblx0ICogbmVzdGVkIGludGVybmFscyBjYW4gYmUgc3BlY2lmaWVkIGJ5IHBhdGggYGEuYi5jYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuXHQgKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZVxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0dGhpc1tcImdldEludGVybmFsXCJdID0gKHBhdGgsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuXHRcdGxldCB2YWx1ZTtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YWx1ZSA9IG5ldyBQYXRoZmluZGVyKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KCkpLmdldFZpYShcblx0XHRcdFx0cGF0aCxcblx0XHRcdCk7XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZGVmYXVsdFZhbHVlO1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG9ialxuICogQHBhcmFtIHByb3BcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc0dldHRlcihvYmosIHByb3ApIHtcblx0d2hpbGUgKGlzT2JqZWN0KG9iaikpIHtcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3ApPy5bXCJnZXRcIl0pIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRvYmogPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gcGFyc2VPcHRpb25zSlNPTihkYXRhKSB7XG5cdGxldCBvYmogPSB7fTtcblxuXHRpZiAoIWlzU3RyaW5nKGRhdGEpKSB7XG5cdFx0cmV0dXJuIG9iajtcblx0fVxuXG5cdC8vIHRoZSBjb25maWd1cmF0aW9uIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBkYXRhIHVybC5cblx0dHJ5IHtcblx0XHRjb25zdCBkYXRhVXJsID0gcGFyc2VEYXRhVVJMKGRhdGEpO1xuXHRcdGRhdGEgPSBkYXRhVXJsLmNvbnRlbnQ7XG5cdH0gY2F0Y2ggKGUpIHt9XG5cblx0dHJ5IHtcblx0XHRvYmogPSBKU09OLnBhcnNlKGRhdGEpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0dGhyb3cgZTtcblx0fVxuXG5cdHJldHVybiB2YWxpZGF0ZU9iamVjdChvYmopO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTdGF0ZVN5bWJvbCwgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgQmFzZVdpdGhPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2V3aXRob3B0aW9ucy5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBJRCB9IGZyb20gXCIuLi90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBQcm94eU9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfQ0xBU1MsXG5cdEFUVFJJQlVURV9JRCxcblx0QVRUUklCVVRFX1RJVExFLFxufSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFJlc291cmNlLCBLRVlfRE9DVU1FTlQsIEtFWV9RVUVSWSwgcmVmZXJlbmNlU3ltYm9sIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEtFWV9ET0NVTUVOVCA9IFwiZG9jdW1lbnRcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgS0VZX1FVRVJZID0gXCJxdWVyeVwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBLRVlfVElNRU9VVCA9IFwidGltZW91dFwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZWZlcmVuY2VTeW1ib2wgPSBTeW1ib2woXCJyZWZlcmVuY2VcIik7XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgYWxsIHJlc291cmNlcyB0byBiZSBsb2FkZWQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAc3VtbWFyeSBBIFJlc291cmNlIGNsYXNzXG4gKi9cbmNsYXNzIFJlc291cmNlIGV4dGVuZHMgQmFzZVdpdGhPcHRpb25zIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fHVuZGVmaW5lZH0gb3B0aW9uc1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKG9wdGlvbnMpO1xuXG5cdFx0bGV0IHVyaSA9IHRoaXMuZ2V0T3B0aW9uKHRoaXMuY29uc3RydWN0b3IuZ2V0VVJMQXR0cmlidXRlKCkpO1xuXG5cdFx0aWYgKHVyaSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIHNvdXJjZVwiKTtcblx0XHR9IGVsc2UgaWYgKHVyaSBpbnN0YW5jZW9mIFVSTCkge1xuXHRcdFx0dXJpID0gdXJpLnRvU3RyaW5nKCk7XG5cdFx0fSBlbHNlIGlmICghaXNTdHJpbmcodXJpKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgdXJsIHR5cGVcIik7XG5cdFx0fVxuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bdGhpcy5jb25zdHJ1Y3Rvci5nZXRVUkxBdHRyaWJ1dGUoKV0gPSB1cmk7XG5cdFx0dGhpc1tpbnRlcm5hbFN0YXRlU3ltYm9sXSA9IG5ldyBQcm94eU9ic2VydmVyKHtcblx0XHRcdGxvYWRlZDogZmFsc2UsXG5cdFx0XHRlcnJvcjogdW5kZWZpbmVkLFxuXHRcdH0pO1xuXG5cdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0Nvbm5lY3RlZCgpIHtcblx0XHRpZiAodGhpc1tyZWZlcmVuY2VTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdHJldHVybiB0aGlzW3JlZmVyZW5jZVN5bWJvbF0uaXNDb25uZWN0ZWQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIG92ZXJyaWRkZW4gYnkgdGhlIHNwZWNpYWwgY2xhc3NlcyBhbmQgY3JlYXRlcyB0aGUgRE9NIG9iamVjdC5cblx0ICogVGhpcyBtZXRob2QgaXMgYWxzbyBjYWxsZWQgaW1wbGljaXRseSwgaWYgbm90IHlldCBkb25lIGV4cGxpY2l0bHksIGJ5IGNhbGxpbmcgYGNvbm5lY3QoKWAuXG5cdCAqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlc1xuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZX1cblx0ICovXG5cdGNyZWF0ZSgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlc1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIHRoZSBIVE1MRWxlbWVudCB0byB0aGUgc3BlY2lmaWVkIGRvY3VtZW50LlxuXHQgKiBJZiB0aGUgZWxlbWVudCBoYXMgbm90IHlldCBiZWVuIGNyZWF0ZWQsIGBjcmVhdGUoKWAgaXMgY2FsbGVkIGltcGxpY2l0bHkuXG5cdCAqXG5cdCAqIHRocm93cyB7RXJyb3J9IHRhcmdldCBub3QgZm91bmRcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2V9XG5cdCAqL1xuXHRjb25uZWN0KCkge1xuXHRcdGlmICghKHRoaXNbcmVmZXJlbmNlU3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0dGhpcy5jcmVhdGUoKTtcblx0XHR9XG5cblx0XHRhcHBlbmRUb0RvY3VtZW50LmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtEb2N1bWVudH0gZG9jdW1lbnQgdGhlIGRvY3VtZW50IG9iamVjdCBpbnRvIHdoaWNoIHRoZSBub2RlIGlzIHRvIGJlIGFwcGVuZGVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzcmMvaHJlZiB1cmwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmVzb3VyY2Vcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHF1ZXJ5IGRlZmluZXMgdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSByZXNvdXJjZSBpcyB0byBiZSBob29rZWQgaW50byB0aGUgZG9tLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gaWQgZWxlbWVudCBhdHRyaWJ1dGUgaWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRpdGxlIGVsZW1lbnQgYXR0cmlidXRlIHRpdGxlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzcyBlbGVtZW50IGF0dHJpYnV0ZSBjbGFzc1xuXHQgKiBAcHJvcGVydHkge2ludH0gdGltZW91dCB0aW1lb3V0XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdFt0aGlzLmNvbnN0cnVjdG9yLmdldFVSTEF0dHJpYnV0ZSgpXTogdW5kZWZpbmVkLFxuXHRcdFx0W0tFWV9ET0NVTUVOVF06IGdldEdsb2JhbE9iamVjdChcImRvY3VtZW50XCIpLFxuXHRcdFx0W0tFWV9RVUVSWV06IFwiaGVhZFwiLFxuXHRcdFx0W0tFWV9USU1FT1VUXTogMTAwMDAsXG5cdFx0XHRbQVRUUklCVVRFX0lEXTogbmV3IElEKFwicmVzb3VyY2VcIikudG9TdHJpbmcoKSxcblx0XHRcdFtBVFRSSUJVVEVfQ0xBU1NdOiB1bmRlZmluZWQsXG5cdFx0XHRbQVRUUklCVVRFX1RJVExFXTogdW5kZWZpbmVkLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpdGggYGF2YWlsYWJsZSgpYCB5b3UgY2FuIGNoZWNrIGlmIGEgcmVzb3VyY2UgaXMgYXZhaWxhYmxlLlxuXHQgKiBUaGlzIGlzIHRoZSBjYXNlIHdoZW4gdGhlIHRhZyBpcyBpbmNsdWRlZCBhbmQgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cblx0ICpcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGF2YWlsYWJsZSgpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRpZiAoIShzZWxmW3JlZmVyZW5jZVN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcIm5vIGVsZW1lbnRcIik7XG5cdFx0fVxuXG5cdFx0aWYgKCFzZWxmLmlzQ29ubmVjdGVkKCkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcImVsZW1lbnQgbm90IGNvbm5lY3RlZFwiKTtcblx0XHR9XG5cblx0XHRpZiAoc2VsZltpbnRlcm5hbFN0YXRlU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJsb2FkZWRcIl0gPT09IHRydWUpIHtcblx0XHRcdGlmIChzZWxmW2ludGVybmFsU3RhdGVTeW1ib2xdLmdldFN1YmplY3QoKVtcImVycm9yXCJdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KHNlbGZbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uZ2V0U3ViamVjdCgpW1wiZXJyb3JcIl0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0cmVqZWN0KFwidGltZW91dFwiKTtcblx0XHRcdH0sIHNlbGYuZ2V0T3B0aW9uKFwidGltZW91dFwiKSk7XG5cblx0XHRcdGNvbnN0IG9ic2VydmVyID0gbmV3IE9ic2VydmVyKCgpID0+IHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHRzZWxmW2ludGVybmFsU3RhdGVTeW1ib2xdLmRldGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHNlbGZbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uYXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRVUkxBdHRyaWJ1dGUoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXNcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vcmVzb3VyY2VcIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqIHRocm93cyB7RXJyb3J9IHRhcmdldCBub3QgZm91bmRcbiAqL1xuZnVuY3Rpb24gYXBwZW5kVG9Eb2N1bWVudCgpIHtcblx0Y29uc3QgdGFyZ2V0Tm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRPcHRpb24oS0VZX1FVRVJZLCBcImhlYWRcIikpO1xuXHRpZiAoISh0YXJnZXROb2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGFyZ2V0IG5vdCBmb3VuZFwiKTtcblx0fVxuXG5cdGFkZEV2ZW50cy5jYWxsKHRoaXMpO1xuXHR0YXJnZXROb2RlLmFwcGVuZENoaWxkKHRoaXNbcmVmZXJlbmNlU3ltYm9sXSk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2FkZEV2ZW50c31cbiAqL1xuZnVuY3Rpb24gYWRkRXZlbnRzKCkge1xuXHRjb25zdCBvbkVycm9yID0gKCkgPT4ge1xuXHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXS5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25FcnJvcik7XG5cdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIG9uTG9hZCk7XG5cblx0XHR0aGlzW2ludGVybmFsU3RhdGVTeW1ib2xdLnNldFN1YmplY3Qoe1xuXHRcdFx0bG9hZGVkOiB0cnVlLFxuXHRcdFx0ZXJyb3I6IGAke1xuXHRcdFx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF1bdGhpcy5jb25zdHJ1Y3Rvci5nZXRVUkxBdHRyaWJ1dGUoKV1cblx0XHRcdH0gaXMgbm90IGF2YWlsYWJsZWAsXG5cdFx0fSk7XG5cblx0XHRyZXR1cm47XG5cdH07XG5cblx0Y29uc3Qgb25Mb2FkID0gKCkgPT4ge1xuXHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXS5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25FcnJvcik7XG5cdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIG9uTG9hZCk7XG5cdFx0dGhpc1tpbnRlcm5hbFN0YXRlU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJsb2FkZWRcIl0gPSB0cnVlO1xuXHRcdHJldHVybjtcblx0fTtcblxuXHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgb25Mb2FkLCBmYWxzZSk7XG5cdHRoaXNbcmVmZXJlbmNlU3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25FcnJvciwgZmFsc2UpO1xuXG5cdHJldHVybiB0aGlzO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTdGF0ZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfQ0xBU1MsXG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9JRCxcblx0QVRUUklCVVRFX1NSQyxcblx0QVRUUklCVVRFX1RJVExFLFxuXHRBVFRSSUJVVEVfVFlQRSxcblx0VEFHX1NDUklQVCxcbn0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdEtFWV9ET0NVTUVOVCxcblx0S0VZX1FVRVJZLFxuXHRyZWZlcmVuY2VTeW1ib2wsXG5cdFJlc291cmNlLFxufSBmcm9tIFwiLi4vcmVzb3VyY2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBEYXRhIH07XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB1c2VkIGJ5IHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIGVtYmVkIGRhdGEuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NLlJlc291cmNlXG4gKiBAc3VtbWFyeSBBIERhdGEgUmVzb3VyY2UgY2xhc3NcbiAqL1xuY2xhc3MgRGF0YSBleHRlbmRzIFJlc291cmNlIHtcblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtb2RlPWNvcnMgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL2ZldGNoXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjcmVkZW50aWFscz1zYW1lLW9yaWdpbiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvZmV0Y2hcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGU9YXBwbGljYXRpb24vanNvbiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLXR5cGV9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdG1vZGU6IFwiY29yc1wiLFxuXHRcdFx0Y3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdHR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlLkRhdGF9XG5cdCAqL1xuXHRjcmVhdGUoKSB7XG5cdFx0Y3JlYXRlRWxlbWVudC5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgdGhlIEhUTUxFbGVtZW50IHRvIHRoZSBzcGVjaWZpZWQgZG9jdW1lbnRcblx0ICpcblx0ICogdGhyb3dzIHtFcnJvcn0gdGFyZ2V0IG5vdCBmb3VuZFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZX1cblx0ICovXG5cdGNvbm5lY3QoKSB7XG5cdFx0aWYgKCEodGhpc1tyZWZlcmVuY2VTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHR0aGlzLmNyZWF0ZSgpO1xuXHRcdH1cblxuXHRcdGFwcGVuZFRvRG9jdW1lbnQuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9yZXNvdXJjZS9kYXRhXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRVUkxBdHRyaWJ1dGUoKSB7XG5cdFx0cmV0dXJuIEFUVFJJQlVURV9TUkM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2UuRGF0YX1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSB0aGlzLmdldE9wdGlvbihLRVlfRE9DVU1FTlQpO1xuXHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFRBR19TQ1JJUFQpO1xuXG5cdGZvciAoY29uc3Qga2V5IG9mIFtcblx0XHRBVFRSSUJVVEVfVFlQRSxcblx0XHRBVFRSSUJVVEVfSUQsXG5cdFx0QVRUUklCVVRFX0NMQVNTLFxuXHRcdEFUVFJJQlVURV9USVRMRSxcblx0XSkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihrZXkpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXVtrZXldID0gdGhpcy5nZXRPcHRpb24oa2V5KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqIHRocm93cyB7RXJyb3J9IHRhcmdldCBub3QgZm91bmRcbiAqL1xuZnVuY3Rpb24gYXBwZW5kVG9Eb2N1bWVudCgpIHtcblx0Y29uc3QgdGFyZ2V0Tm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRPcHRpb24oS0VZX1FVRVJZLCBcImhlYWRcIikpO1xuXHRpZiAoISh0YXJnZXROb2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGFyZ2V0IG5vdCBmb3VuZFwiKTtcblx0fVxuXG5cdHRhcmdldE5vZGUuYXBwZW5kQ2hpbGQodGhpc1tyZWZlcmVuY2VTeW1ib2xdKTtcblxuXHRnZXRHbG9iYWxGdW5jdGlvbihcImZldGNoXCIpKHRoaXMuZ2V0T3B0aW9uKEFUVFJJQlVURV9TUkMpLCB7XG5cdFx0bWV0aG9kOiBcIkdFVFwiLCAvLyAqR0VULCBQT1NULCBQVVQsIERFTEVURSwgZXRjLlxuXHRcdG1vZGU6IHRoaXMuZ2V0T3B0aW9uKFwibW9kZVwiLCBcImNvcnNcIiksIC8vIG5vLWNvcnMsICpjb3JzLCBzYW1lLW9yaWdpblxuXHRcdGNhY2hlOiBcIm5vLWNhY2hlXCIsIC8vICpkZWZhdWx0LCBuby1jYWNoZSwgcmVsb2FkLCBmb3JjZS1jYWNoZSwgb25seS1pZi1jYWNoZWRcblx0XHRjcmVkZW50aWFsczogdGhpcy5nZXRPcHRpb24oXCJjcmVkZW50aWFsc1wiLCBcInNhbWUtb3JpZ2luXCIpLCAvLyBpbmNsdWRlLCAqc2FtZS1vcmlnaW4sIG9taXRcblx0XHRoZWFkZXJzOiB7XG5cdFx0XHRBY2NlcHQ6IHRoaXMuZ2V0T3B0aW9uKFwidHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIiksXG5cdFx0fSxcblx0XHRyZWRpcmVjdDogXCJmb2xsb3dcIiwgLy8gbWFudWFsLCAqZm9sbG93LCBlcnJvclxuXHRcdHJlZmVycmVyUG9saWN5OiBcIm5vLXJlZmVycmVyXCIsIC8vIG5vLXJlZmVycmVyLFxuXHR9KVxuXHRcdC50aGVuKChyZXNwb25zZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcblx0XHR9KVxuXHRcdC50aGVuKCh0ZXh0KSA9PiB7XG5cdFx0XHRjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpO1xuXHRcdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLmFwcGVuZENoaWxkKHRleHROb2RlKTtcblxuXHRcdFx0dGhpc1tpbnRlcm5hbFN0YXRlU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJsb2FkZWRcIl0gPSB0cnVlO1xuXHRcdH0pXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHR0aGlzW2ludGVybmFsU3RhdGVTeW1ib2xdLnNldFN1YmplY3Qoe1xuXHRcdFx0XHRsb2FkZWQ6IHRydWUsXG5cdFx0XHRcdGVycm9yOiBlLnRvU3RyaW5nKCksXG5cdFx0XHR9KTtcblxuXHRcdFx0dGFyZ2V0Tm9kZS5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHR9KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9DTEFTUyxcblx0QVRUUklCVVRFX0hSRUYsXG5cdEFUVFJJQlVURV9JRCxcblx0QVRUUklCVVRFX05PTkNFLFxuXHRBVFRSSUJVVEVfU1JDLFxuXHRBVFRSSUJVVEVfVElUTEUsXG5cdEFUVFJJQlVURV9UWVBFLFxuXHRUQUdfTElOSyxcbn0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEtFWV9ET0NVTUVOVCwgcmVmZXJlbmNlU3ltYm9sLCBSZXNvdXJjZSB9IGZyb20gXCIuLi9yZXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IExpbmsgfTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHVzZWQgYnkgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gZW1iZWQgZXh0ZXJuYWwgcmVzb3VyY2VzLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTS5SZXNvdXJjZVxuICogQHN1bW1hcnkgQSBSZXNvdXJjZSBjbGFzc1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGlua1xuICovXG5jbGFzcyBMaW5rIGV4dGVuZHMgUmVzb3VyY2Uge1xuXHQvKipcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGFzIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLWFzfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY3Jvc3NPcmlnaW49YW5vbnltb3VzIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItY3Jvc3NvcmlnaW59XG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZGlzYWJsZWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGhyZWYge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItaHJlZn1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGhyZWZsYW5nIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLWhyZWZsYW5nfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gaW1hZ2VzaXplcyB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1pbWFnZXNpemVzfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gaW1hZ2VzcmNzZXQge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItaW1hZ2VzcmNzZXR9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpbnRlZ3JpdHkge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItaW50ZWdyaXR5fVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbWVkaWEge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItbWVkaWF9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcmVmZXRjaCB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1wcmVmZXRjaH1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlZmVycmVycG9saWN5IHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLXJlZmVycmVycG9saWN5fVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVsIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLXJlbH1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItdHlwZX1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHNpemVzIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLXNpemVzfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbm9uY2Uge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci1ub25jZX1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0YXM6IHVuZGVmaW5lZCxcblx0XHRcdGNyb3NzT3JpZ2luOiBcImFub255bW91c1wiLFxuXHRcdFx0ZGlzYWJsZWQ6IHVuZGVmaW5lZCxcblx0XHRcdGhyZWY6IHVuZGVmaW5lZCxcblx0XHRcdGhyZWZsYW5nOiB1bmRlZmluZWQsXG5cdFx0XHRpbWFnZXNpemVzOiB1bmRlZmluZWQsXG5cdFx0XHRpbWFnZXNyY3NldDogdW5kZWZpbmVkLFxuXHRcdFx0aW50ZWdyaXR5OiB1bmRlZmluZWQsXG5cdFx0XHRtZWRpYTogdW5kZWZpbmVkLFxuXHRcdFx0cHJlZmV0Y2g6IHVuZGVmaW5lZCxcblx0XHRcdHJlZmVycmVycG9saWN5OiB1bmRlZmluZWQsXG5cdFx0XHRyZWw6IHVuZGVmaW5lZCxcblx0XHRcdHNpemVzOiB1bmRlZmluZWQsXG5cdFx0XHR0eXBlOiB1bmRlZmluZWQsXG5cdFx0XHRub25jZTogdW5kZWZpbmVkLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL3Jlc291cmNlL2xpbmtcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2UuTGlua31cblx0ICovXG5cdGNyZWF0ZSgpIHtcblx0XHRjcmVhdGVFbGVtZW50LmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFVSTEF0dHJpYnV0ZSgpIHtcblx0XHRyZXR1cm4gQVRUUklCVVRFX0hSRUY7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2UuTGlua31cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSB0aGlzLmdldE9wdGlvbihLRVlfRE9DVU1FTlQpO1xuXHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFRBR19MSU5LKTtcblxuXHRmb3IgKGNvbnN0IGtleSBvZiBbXG5cdFx0XCJhc1wiLFxuXHRcdFwiY3Jvc3NPcmlnaW5cIixcblx0XHRcImRpc2FibGVkXCIsXG5cdFx0XCJocmVmXCIsXG5cdFx0XCJocmVmbGFuZ1wiLFxuXHRcdFwiaW1hZ2VzaXplc1wiLFxuXHRcdFwiaW1hZ2VzcmNzZXRcIixcblx0XHRcImludGVncml0eVwiLFxuXHRcdFwibWVkaWFcIixcblx0XHRcInByZWZldGNoXCIsXG5cdFx0XCJyZWZlcnJlcnBvbGljeVwiLFxuXHRcdFwic2l6ZXNcIixcblx0XHRcInJlbFwiLFxuXHRcdFwidHlwZVwiLFxuXHRcdEFUVFJJQlVURV9IUkVGLFxuXHRcdEFUVFJJQlVURV9JRCxcblx0XHRBVFRSSUJVVEVfQ0xBU1MsXG5cdFx0QVRUUklCVVRFX1RJVExFLFxuXHRcdEFUVFJJQlVURV9OT05DRSxcblx0XSkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihrZXkpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXVtrZXldID0gdGhpcy5nZXRPcHRpb24oa2V5KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IExpbmsgfSBmcm9tIFwiLi4vbGluay5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IFN0eWxlc2hlZXQgfTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHVzZWQgYnkgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gZW1iZWQgZXh0ZXJuYWwgcmVzb3VyY2VzLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTS5SZXNvdXJjZVxuICogQHN1bW1hcnkgQSBSZXNvdXJjZSBjbGFzc1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGlua1xuICovXG5jbGFzcyBTdHlsZXNoZWV0IGV4dGVuZHMgTGluayB7XG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVsIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLXJlbH1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0cmVsOiBcInN0eWxlc2hlZXRcIixcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9yZXNvdXJjZS9saW5rL3N0eWxlc2hlZXRcIik7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9DTEFTUyxcblx0QVRUUklCVVRFX0lELFxuXHRBVFRSSUJVVEVfTk9OQ0UsXG5cdEFUVFJJQlVURV9TUkMsXG5cdEFUVFJJQlVURV9USVRMRSxcblx0QVRUUklCVVRFX1RZUEUsXG5cdFRBR19TQ1JJUFQsXG59IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBLRVlfRE9DVU1FTlQsIHJlZmVyZW5jZVN5bWJvbCwgUmVzb3VyY2UgfSBmcm9tIFwiLi4vcmVzb3VyY2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBTY3JpcHQgfTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHVzZWQgYnkgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gZW1iZWQgc2NyaXB0cy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET00uUmVzb3VyY2VcbiAqIEBzdW1tYXJ5IEEgUmVzb3VyY2UgY2xhc3NcbiAqL1xuY2xhc3MgU2NyaXB0IGV4dGVuZHMgUmVzb3VyY2Uge1xuXHQvKipcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBhc3luYz10cnVlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItYXN5bmN9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjcm9zc09yaWdpbj1hbm9ueW1vdXMge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci1jcm9zc29yaWdpbn1cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBkZWZlcj1mYWxzZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLWRlZmVyfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gaW50ZWdyaXR5IHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItaW50ZWdyaXR5fVxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IG5vbW9kdWxlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItbm9tb2R1bGV9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBub25jZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLW5vbmNlfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVmZXJyZXJwb2xpY3kge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci1yZWZlcnJlcnBvbGljeX1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci10eXBlfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdGNyb3NzT3JpZ2luOiBcImFub255bW91c1wiLFxuXHRcdFx0ZGVmZXI6IGZhbHNlLFxuXHRcdFx0aW50ZWdyaXR5OiB1bmRlZmluZWQsXG5cdFx0XHRub21vZHVsZTogZmFsc2UsXG5cdFx0XHRub25jZTogdW5kZWZpbmVkLFxuXHRcdFx0cmVmZXJyZXJwb2xpY3k6IHVuZGVmaW5lZCxcblx0XHRcdHR5cGU6IFwidGV4dC9qYXZhc2NyaXB0XCIsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vcmVzb3VyY2Uvc2NyaXB0XCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlLlNjcmlwdH1cblx0ICovXG5cdGNyZWF0ZSgpIHtcblx0XHRjcmVhdGVFbGVtZW50LmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFVSTEF0dHJpYnV0ZSgpIHtcblx0XHRyZXR1cm4gQVRUUklCVVRFX1NSQztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZS5TY3JpcHR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoKSB7XG5cdGNvbnN0IGRvY3VtZW50ID0gdGhpcy5nZXRPcHRpb24oS0VZX0RPQ1VNRU5UKTtcblx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChUQUdfU0NSSVBUKTtcblxuXHRmb3IgKGNvbnN0IGtleSBvZiBbXG5cdFx0XCJjcm9zc09yaWdpblwiLFxuXHRcdFwiZGVmZXJcIixcblx0XHRcImFzeW5jXCIsXG5cdFx0XCJpbnRlZ3JpdHlcIixcblx0XHRcIm5vbW9kdWxlXCIsXG5cdFx0QVRUUklCVVRFX05PTkNFLFxuXHRcdFwicmVmZXJyZXJwb2xpY3lcIixcblx0XHRBVFRSSUJVVEVfVFlQRSxcblx0XHRBVFRSSUJVVEVfU1JDLFxuXHRcdEFUVFJJQlVURV9JRCxcblx0XHRBVFRSSUJVVEVfQ0xBU1MsXG5cdFx0QVRUUklCVVRFX1RJVExFLFxuXHRdKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKGtleSkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdW2tleV0gPSB0aGlzLmdldE9wdGlvbihrZXkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IGVxdWlwV2l0aEludGVybmFsIH0gZnJvbSBcIi4uL3R5cGVzL2ludGVybmFsLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9IUkVGLCBBVFRSSUJVVEVfU1JDIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgUmVzb3VyY2UgfSBmcm9tIFwiLi9yZXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IERhdGEgfSBmcm9tIFwiLi9yZXNvdXJjZS9kYXRhLm1qc1wiO1xuaW1wb3J0IHsgU3R5bGVzaGVldCB9IGZyb20gXCIuL3Jlc291cmNlL2xpbmsvc3R5bGVzaGVldC5tanNcIjtcbmltcG9ydCB7IFNjcmlwdCB9IGZyb20gXCIuL3Jlc291cmNlL3NjcmlwdC5tanNcIjtcblxuZXhwb3J0IHsgUmVzb3VyY2VNYW5hZ2VyIH07XG5cbi8qKlxuICogVGhlIFJlc291cmNlTWFuYWdlciBpcyBhIHNpbmdsZXRvbiB0aGF0IG1hbmFnZXMgYWxsIHJlc291cmNlcy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBzdW1tYXJ5IEEgUmVzb3VyY2UgY2xhc3NcbiAqL1xuY2xhc3MgUmVzb3VyY2VNYW5hZ2VyIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHQgKiB0aHJvdyB7RXJyb3J9IHVuc3VwcG9ydGVkIGRvY3VtZW50IHR5cGVcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRzdXBlcihvcHRpb25zKTtcblx0XHRlcXVpcFdpdGhJbnRlcm5hbC5jYWxsKHRoaXMpO1xuXG5cdFx0aWYgKCEodGhpcy5nZXRPcHRpb24oXCJkb2N1bWVudFwiKSBpbnN0YW5jZW9mIERvY3VtZW50KSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgZG9jdW1lbnQgdHlwZVwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQgc2luY2UgMy4xNS4wIHVzZSBnZXRJbnRlcm5hbCBpbnN0ZWFkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBiYXNldXJsXG5cdCAqL1xuXHRnZXRPcHRpb24oa2V5KSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0SW50ZXJuYWwoa2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYmFzZXVybFxuXHQgKi9cblx0Z2V0QmFzZVVSTCgpIHtcblx0XHR0aGlzLmdldE9wdGlvbihcImRvY3VtZW50XCIpPy5iYXNlVVJMO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBiYXNldXJsXG5cdCAqIEBkZXByZWNhdGVkIHNpbmNlIDMuMTUuMCB1c2UgaW50ZXJuYWxEZWZhdWx0cyBpbnN0ZWFkXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuaW50ZXJuYWxEZWZhdWx0cztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge0hUTUxEb2N1bWVudH0gZG9jdW1lbnQ9ZG9jdW1lbnQgRG9jdW1lbnRcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlc291cmNlc1xuXHQgKiBAcHJvcGVydHkge0FycmF5fSByZXNvdXJjZXMuc2NyaXB0cz1bXSBhcnJheSB3aXRoIHtAbGluayBNb25zdGVyLkRPTS5SZXNvdXJjZS5TY3JpcHR9IG9iamVjdHNcblx0ICogQHByb3BlcnR5IHtBcnJheX0gcmVzb3VyY2VzLnN0eWxlc2hlZXRzPVtdIGFycmF5IHdpdGgge0BsaW5rIE1vbnN0ZXIuRE9NLlJlc291cmNlLkxpbmsuU3R5bGVzaGVldH0gb2JqZWN0c1xuXHQgKiBAcHJvcGVydHkge0FycmF5fSByZXNvdXJjZXMuZGF0YT1bXSBhcnJheSB3aXRoIHtAbGluayBNb25zdGVyLkRPTS5SZXNvdXJjZS5EYXRhfSBvYmplY3RzXG5cdCAqL1xuXHRnZXQgaW50ZXJuYWxEZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0e1xuXHRcdFx0XHRkb2N1bWVudDogZ2V0R2xvYmFsT2JqZWN0KFwiZG9jdW1lbnRcIiksXG5cdFx0XHRcdHJlc291cmNlczoge1xuXHRcdFx0XHRcdHNjcmlwdHM6IFtdLFxuXHRcdFx0XHRcdHN0eWxlc2hlZXRzOiBbXSxcblx0XHRcdFx0XHRkYXRhOiBbXSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBlbmQgVGFncyB0byBET01cblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2VNYW5hZ2VyfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgcmVzb3VyY2UgZGVmaW5pdGlvblxuXHQgKi9cblx0Y29ubmVjdCgpIHtcblx0XHRydW5SZXNvdXJjZU1ldGhvZC5jYWxsKHRoaXMsIFwiY29ubmVjdFwiKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiBhdmFpbGFibGVcblx0ICpcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIHJlc291cmNlIGRlZmluaXRpb25cblx0ICovXG5cdGF2YWlsYWJsZSgpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwocnVuUmVzb3VyY2VNZXRob2QuY2FsbCh0aGlzLCBcImF2YWlsYWJsZVwiKSk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgc2NyaXB0XG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG5cdCAqIEBwYXJhbSBbT2JqZWN0fHVuZGVmaW5lZH0gb3B0aW9uc1xuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZU1hbmFnZXJ9XG5cdCAqIEBzZWUgTW9uc3Rlci5ET00uUmVzb3VyY2UuU2NyaXB0XG5cdCAqL1xuXHRhZGRTY3JpcHQodXJsLCBvcHRpb25zKSB7XG5cdFx0cmV0dXJuIGFkZFJlc291cmNlLmNhbGwodGhpcywgXCJzY3JpcHRzXCIsIHVybCwgb3B0aW9ucyk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIFN0eWxlc2hlZXRcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcblx0ICogQHBhcmFtIFtPYmplY3R8dW5kZWZpbmVkfSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlcn1cblx0ICogQHNlZSBNb25zdGVyLkRPTS5SZXNvdXJjZS5MaW5rLlN0eWxlc2hlZXRcblx0ICovXG5cdGFkZFN0eWxlc2hlZXQodXJsLCBvcHRpb25zKSB7XG5cdFx0cmV0dXJuIGFkZFJlc291cmNlLmNhbGwodGhpcywgXCJzdHlsZXNoZWV0c1wiLCB1cmwsIG9wdGlvbnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBEYXRhIFRhZ1xuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuXHQgKiBAcGFyYW0gW09iamVjdHx1bmRlZmluZWR9IG9wdGlvbnNcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2VNYW5hZ2VyfVxuXHQgKiBAc2VlIE1vbnN0ZXIuRE9NLlJlc291cmNlLkRhdGFcblx0ICovXG5cdGFkZERhdGEodXJsLCBvcHRpb25zKSB7XG5cdFx0cmV0dXJuIGFkZFJlc291cmNlLmNhbGwodGhpcywgXCJkYXRhXCIsIHVybCwgb3B0aW9ucyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZFxuICogQHJldHVybiB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHJ1blJlc291cmNlTWV0aG9kKG1ldGhvZCkge1xuXHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRmb3IgKGNvbnN0IHR5cGUgb2YgW1wic2NyaXB0c1wiLCBcInN0eWxlc2hlZXRzXCIsIFwiZGF0YVwiXSkge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMuZ2V0T3B0aW9uKGByZXNvdXJjZXMuJHt0eXBlfWApO1xuXHRcdGlmICghaXNBcnJheShyZXNvdXJjZXMpKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcykge1xuXHRcdFx0aWYgKCEocmVzb3VyY2UgaW5zdGFuY2VvZiBSZXNvdXJjZSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgcmVzb3VyY2UgZGVmaW5pdGlvblwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzdWx0LnB1c2gocmVzb3VyY2VbbWV0aG9kXSgpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAqIEBwYXJhbSBbT2JqZWN0fHVuZGVmaW5lZH0gb3B0aW9uc1xuICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2VNYW5hZ2VyfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYWRkUmVzb3VyY2UodHlwZSwgdXJsLCBvcHRpb25zKSB7XG5cdGlmICh1cmwgaW5zdGFuY2VvZiBVUkwpIHtcblx0XHR1cmwgPSB1cmwudG9TdHJpbmcoKTtcblx0fVxuXG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdGxldCByZXNvdXJjZTtcblx0c3dpdGNoICh0eXBlKSB7XG5cdFx0Y2FzZSBcInNjcmlwdHNcIjpcblx0XHRcdHJlc291cmNlID0gbmV3IFNjcmlwdChleHRlbmQoe30sIG9wdGlvbnMsIHsgW0FUVFJJQlVURV9TUkNdOiB1cmwgfSkpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInN0eWxlc2hlZXRzXCI6XG5cdFx0XHRyZXNvdXJjZSA9IG5ldyBTdHlsZXNoZWV0KGV4dGVuZCh7fSwgb3B0aW9ucywgeyBbQVRUUklCVVRFX0hSRUZdOiB1cmwgfSkpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImRhdGFcIjpcblx0XHRcdHJlc291cmNlID0gbmV3IERhdGEoZXh0ZW5kKHt9LCBvcHRpb25zLCB7IFtBVFRSSUJVVEVfU1JDXTogdXJsIH0pKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIHR5cGUgJHt0eXBlfWApO1xuXHR9XG5cblx0dGhpcy5nZXRPcHRpb24oXCJyZXNvdXJjZXNcIik/Llt0eXBlXS5wdXNoKHJlc291cmNlKTtcblx0cmV0dXJuIHRoaXM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgQ29uZmlnTWFuYWdlclN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IENvbmZpZ01hbmFnZXJTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0Q29uZmlnTWFuYWdlclN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgY29uZmlnbWFuYWdlciB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2Rpc3BsYXk6bm9uZX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBzY2h1a2FpIEdtYkhcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IENvbmZpZ01hbmFnZXJTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9jb25maWctbWFuYWdlci5tanNcIjtcbmltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgQ29uZmlnTWFuYWdlciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbmRleERCSW5zdGFuY2VTeW1ib2wgPSBTeW1ib2woXCJpbmRleERCSW5zdGFuY2VcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGluaXRpYWxpemVkUHJvbWlzZVN5bWJvbCA9IFN5bWJvbChcImluaXRpYWxpemVkUHJvbWlzZVN5bWJvbFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgTU9ERV9SRUFET05MWSA9IFwicmVhZG9ubHlcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgTU9ERV9SRUFEX1dSSVRFID0gXCJyZWFkd3JpdGVcIjtcblxuLyoqXG4gKiBUaGUgQ29uZmlnIE1hbmFnZXIgY29tcG9uZW50IGlzIHVzZWQgdG8gZW5jYXBzdWxhdGUgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGFwcGxpY2F0aW9uLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvY29uZmlnLW1hbmFnZXIucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5XG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyA8bW9uc3Rlci1ob3N0IC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWhvc3QnKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1jb25maWctbWFuYWdlcj48L21vbnN0ZXItY29uZmlnLW1hbmFnZXI+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0ICdAc2NodWthaS9jb21wb25lbnQtc3RhdGUvc291cmNlL2NvbmZpZy1tYW5hZ2VyLm1qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbmZpZy1tYW5hZ2VyJyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgQm9keSBzaG91bGQgaGF2ZSBhIGNsYXNzIFwiaGlkZGVuXCIgdG8gZW5zdXJlIHRoYXQgdGhlIHN0eWxlcyBhcmUgYXBwbGllZCBjb3JyZWN0bHkuXG4gKlxuICogYGBgY3NzXG4gKiBib2R5LmhpZGRlbiB7XG4gKiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAc3RhcnR1bWwgY29uZmlnLW1hbmFnZXIucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDb25maWdNYW5hZ2VyXG4gKiBAZW5kdW1sXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuSG9zdFxuICogQHN1bW1hcnkgQSBjb25maWcgbWFuYWdlciBjb21wb25lbnRcbiAqL1xuY2xhc3MgQ29uZmlnTWFuYWdlciBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9jb21wb25lbnQtaG9zdC9jb25maWctbWFuYWdlckBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0LyoqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAdHlwZSB7c3ltYm9sfVxuXHRcdCAqL1xuXHRcdHRoaXNbaW5pdGlhbGl6ZWRQcm9taXNlU3ltYm9sXSA9IFtdO1xuXHRcdHRoaXNbaW5kZXhEQkluc3RhbmNlU3ltYm9sXSA9IG51bGw7XG5cdFx0dGhpc1tpbml0aWFsaXplZFByb21pc2VTeW1ib2xdLnB1c2gob3BlbkRhdGFiYXNlLmNhbGwodGhpcykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPEF3YWl0ZWQ8dW5rbm93bj5bXT59XG5cdCAqL1xuXHRyZWFkeSgpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwodGhpc1tpbml0aWFsaXplZFByb21pc2VTeW1ib2xdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBodG1sIHRhZyB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0aW5kZXhEQjoge1xuXHRcdFx0XHRuYW1lOiBcIm1vbnN0ZXJcIixcblx0XHRcdFx0dmVyc2lvbjogMixcblx0XHRcdFx0b2JqZWN0U3RvcmU6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbmZpZ1wiLFxuXHRcdFx0XHRcdGtleVBhdGg6IFwia2V5XCIsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59XG5cdCAqL1xuXHRnZXRDb25maWcoa2V5KSB7O1xuXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKS50aGVuKCgpID0+IHtcblx0XHRcdHJldHVybiBnZXRCbG9iLmNhbGwodGhpcywga2V5KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59XG5cdCAqL1xuXHRzZXRDb25maWcoa2V5LCB2YWx1ZSkgeztcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpLnRoZW4oKCkgPT4ge1xuXHRcdFx0cmV0dXJuIHNldEJsb2IuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItY29uZmlnLW1hbmFnZXJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW0NvbmZpZ01hbmFnZXJTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Ib3N0fVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0fVxufVxuXG5mdW5jdGlvbiBvcGVuRGF0YWJhc2UoKSB7O1xuXHRjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coKTtcblxuXHRjb25zdCBuYW1lID0gdGhpcy5nZXRPcHRpb24oXCJpbmRleERCLm5hbWVcIik7XG5cdGNvbnN0IHZlcnNpb24gPSB0aGlzLmdldE9wdGlvbihcImluZGV4REIudmVyc2lvblwiKTtcblx0Y29uc3Qgc3RvcmFnZU5hbWUgPSB0aGlzLmdldE9wdGlvbihcImluZGV4REIub2JqZWN0U3RvcmUubmFtZVwiKTtcblx0Y29uc3QgS2V5UGF0aCA9IHRoaXMuZ2V0T3B0aW9uKFwiaW5kZXhEQi5vYmplY3RTdG9yZS5rZXlQYXRoXCIpO1xuXG5cdGlmICghbmFtZSB8fCAhdmVyc2lvbikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBkYXRhYmFzZSBuYW1lIGFuZCB2ZXJzaW9uIG11c3QgYmUgc2V0LlwiKTtcblx0fVxuXG5cdGNvbnN0IHJlcXVlc3QgPSB3aW5kb3cuaW5kZXhlZERCLm9wZW4obmFtZSwgdmVyc2lvbik7XG5cblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoZXZlbnQpID0+IHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJFcnJvciBvcGVuaW5nIGRhdGFiYXNlXCIsIGV2ZW50KTtcblx0XHRcdHJlamVjdChyZXF1ZXN0LmVycm9yKTtcblx0XHR9O1xuXG5cdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZXZlbnQpID0+IHtcblx0XHRcdHRoaXNbaW5kZXhEQkluc3RhbmNlU3ltYm9sXSA9IGV2ZW50Py50YXJnZXQ/LnJlc3VsdDtcblx0XHRcdHJlc29sdmUocmVxdWVzdC5yZXN1bHQpO1xuXHRcdH07XG5cblx0XHRyZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IChldmVudCkgPT4ge1xuXHRcdFx0Y29uc3QgZGIgPSBldmVudC50YXJnZXQucmVzdWx0O1xuXG5cdFx0XHRsZXQgb2JqZWN0U3RvcmU7XG5cdFx0XHRpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoc3RvcmFnZU5hbWUpKSB7XG5cdFx0XHRcdG9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoc3RvcmFnZU5hbWUsIHsga2V5UGF0aDogS2V5UGF0aCB9KTtcblx0XHRcdH1cblxuXHRcdFx0b2JqZWN0U3RvcmUudHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IChldmVudCkgPT4ge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhcIkRhdGFiYXNlIHVwZ3JhZGUgY29tcGxldGVcIik7XG5cdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdH07XG5cdFx0fTtcblx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGUgZWl0aGVyIFwicmVhZG9ubHlcIiBvciBcInJlYWR3cml0ZVwiXG4gKi9cbmZ1bmN0aW9uIGdldE9iamVjdFN0b3JlKG1vZGUpIHs7XG5cdGNvbnN0IHN0b3JhZ2VOYW1lID0gdGhpcy5nZXRPcHRpb24oXCJpbmRleERCLm9iamVjdFN0b3JlLm5hbWVcIik7XG5cblx0aWYgKCF0aGlzW2luZGV4REJJbnN0YW5jZVN5bWJvbF0pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgZGF0YWJhc2UgaXMgbm90IG9wZW4uXCIpO1xuXHR9XG5cblx0Ly8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSURCRGF0YWJhc2UvdHJhbnNhY3Rpb25cblx0Ly8gdHJhbnNhY3Rpb24oc3RvcmVOYW1lcywgbW9kZSwgb3B0aW9ucylcblx0Y29uc3QgdHggPSB0aGlzW2luZGV4REJJbnN0YW5jZVN5bWJvbF0udHJhbnNhY3Rpb24oc3RvcmFnZU5hbWUsIG1vZGUpO1xuXHRyZXR1cm4gdHgub2JqZWN0U3RvcmUoc3RvcmFnZU5hbWUpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fVxuICovXG5mdW5jdGlvbiBjbGVhck9iamVjdFN0b3JlKCkgeztcblxuXHRjb25zdCBzdG9yZSA9IGdldE9iamVjdFN0b3JlLmNhbGwodGhpcywgXCJyZWFkd3JpdGVcIik7XG5cblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRjb25zdCByZXEgPSBzdG9yZS5jbGVhcigpO1xuXHRcdHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRjb25zb2xlLmxvZyhcImNsZWFyT2JqZWN0U3RvcmUgY29tcGxldGVkXCIpO1xuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH07XG5cdFx0cmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiY2xlYXJPYmplY3RTdG9yZTpcIiwgZXZ0LnRhcmdldC5lcnJvckNvZGUpO1xuXHRcdFx0cmVqZWN0KGV2dC50YXJnZXQuZXJyb3JDb2RlKTtcblx0XHR9O1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0QmxvYihrZXkpIHs7XG5cdGNvbnN0IHN0b3JlID0gZ2V0T2JqZWN0U3RvcmUuY2FsbCh0aGlzLCBNT0RFX1JFQURPTkxZKTtcblxuXHRjb25zdCByZXEgPSBzdG9yZS5nZXQoa2V5KTtcblxuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IGV2dC50YXJnZXQucmVzdWx0O1xuXHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdHJlc29sdmUodmFsdWUuYmxvYik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHJlamVjdCgpO1xuXHRcdH07XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBzZXRCbG9iKGtleSwgYmxvYikgeztcblx0Y29uc3Qgc3RvcmUgPSBnZXRPYmplY3RTdG9yZS5jYWxsKHRoaXMsIE1PREVfUkVBRF9XUklURSk7XG5cblx0Y29uc3QgS2V5UGF0aCA9IHRoaXMuZ2V0T3B0aW9uKFwiaW5kZXhEQi5vYmplY3RTdG9yZS5rZXlQYXRoXCIpO1xuXHRjb25zdCBvYmogPSB7fTtcblx0b2JqW0tleVBhdGhdID0ga2V5O1xuXHRvYmouYmxvYiA9IGJsb2I7XG5cdGNvbnN0IHJlcSA9IHN0b3JlLnB1dChvYmopO1xuXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0cmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChldnQpIHtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9O1xuXG5cdFx0cmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwic2V0QmxvYjpcIiwgZXZ0LnRhcmdldC5lcnJvckNvZGUpO1xuXHRcdFx0cmVqZWN0KGV2dC50YXJnZXQuZXJyb3JDb2RlKTtcblx0XHR9O1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoQ29uZmlnTWFuYWdlcik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBzY2h1a2FpIEdtYkhcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCBcIi4uL25vdGlmeS9ub3RpZnkubWpzXCI7XG5pbXBvcnQgeyBIb3N0U3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvaG9zdC5tanNcIjtcbmltcG9ydCB7IGdldExvY2FsZU9mRG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IEVtYmVkIH0gZnJvbSBcIi4uLy4uL2kxOG4vcHJvdmlkZXJzL2VtYmVkLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMgfSBmcm9tIFwiLi4vLi4vaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQgeyB3aW5kb3dSZWFkeSB9IGZyb20gXCIuLi8uLi9kb20vcmVhZHkubWpzXCI7XG5pbXBvcnQgeyBGb2N1c01hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZG9tL2ZvY3VzbWFuYWdlci5tanNcIjtcbmltcG9ydCB7IFJlc291cmNlTWFuYWdlciB9IGZyb20gXCIuLi8uLi9kb20vcmVzb3VyY2VtYW5hZ2VyLm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBpc0l0ZXJhYmxlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IFwiLi9jb25maWctbWFuYWdlci5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgSG9zdCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwcm9taXNlc1N5bWJvbCA9IFN5bWJvbChcInByb21pc2VzU3ltYm9sXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBub3RpZnlFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwibm90aWZ5RWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgb3ZlcmxheUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJvdmVybGF5RWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29uZmlnTWFuYWdlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb25maWdNYW5hZ2VyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZm9jdXNNYW5hZ2VyU3ltYm9sID0gU3ltYm9sKFwiZm9jdXNNYW5hZ2VyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZXNvdXJjZU1hbmFnZXJTeW1ib2wgPSBTeW1ib2woXCJyZXNvdXJjZU1hbmFnZXJcIik7XG5cbi8qKlxuICogVGhlIEhvc3QgY29tcG9uZW50IGlzIHVzZWQgdG8gZW5jYXBzdWxhdGUgdGhlIGNvbnRlbnQgb2YgYSB3ZWIgYXBwLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvaG9zdC5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnlcbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIDxtb25zdGVyLWhvc3QgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItaG9zdCcpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLWhvc3Q+PC9tb25zdGVyLWhvc3Q+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0ICdAc2NodWthaS9jb21wb25lbnQtc3RhdGUvc291cmNlL2hvc3QubWpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItaG9zdCcpO1xuICogYGBgXG4gKlxuICogVGhlIEJvZHkgc2hvdWxkIGhhdmUgYSBjbGFzcyBcImhpZGRlblwiIHRvIGVuc3VyZSB0aGF0IHRoZSBzdHlsZXMgYXJlIGFwcGxpZWQgY29ycmVjdGx5LlxuICpcbiAqIGBgYGNzc1xuICogYm9keS5oaWRkZW4ge1xuICogICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICogfVxuICogYGBgXG4gKlxuICogQHN0YXJ0dW1sIGhvc3QucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBIb3N0XG4gKiBAZW5kdW1sXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuSG9zdFxuICogQHN1bW1hcnkgQSBzaW1wbGUgaG9zdCBjb21wb25lbnRcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Ib3N0I21vbnN0ZXItaG9zdC1jb25uZWN0ZWRcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Ib3N0I21vbnN0ZXItaG9zdC1kaXNjb25uZWN0ZWRcbiAqL1xuY2xhc3MgSG9zdCBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9jb21wb25lbnQtaG9zdC9Ib3N0QEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBodG1sIHRhZyB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmVhdHVyZXMgRmVhdHVyZSBkZWZpbml0aW9uc1xuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSBrZXlcblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRnZXRDb25maWcoa2V5KSB7XG5cdFx0aWYgKHRoaXNbY29uZmlnTWFuYWdlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBjb25maWcgbWFuYWdlciBlbGVtZW50XCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0uZ2V0Q29uZmlnKGtleSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKi9cblx0c2V0Q29uZmlnKGtleSwgdmFsdWUpIHtcblx0XHRpZiAodGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIGNvbmZpZyBtYW5hZ2VyIGVsZW1lbnRcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNbY29uZmlnTWFuYWdlckVsZW1lbnRTeW1ib2xdLnNldENvbmZpZyhrZXksIHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuSG9zdCNtb25zdGVyLWhvc3QtY29ubmVjdGVkXG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0LyoqXG5cdFx0ICogc2hvdyB0aGUgc2Nyb2xsIGJhciBhbHdheXNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqL1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSBcInNjcm9sbFwiO1xuXG5cdFx0Y29uc3QgY2xhc3NOYW1lcyA9IHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5ib2R5XCIpO1xuXG5cdFx0aWYgKGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZXMpKSB7XG5cdFx0XHRkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lcyk7XG5cdFx0fVxuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1ob3N0LWNvbm5lY3RlZFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuSG9zdCNtb25zdGVyLWhvc3QtZGlzY29ubmVjdGVkXG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHs7XG5cblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSBcIlwiO1xuXG5cdFx0Y29uc3QgY2xhc3NOYW1lcyA9IHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5ib2R5XCIpO1xuXHRcdGlmICghZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lcykpIHtcblx0XHRcdGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChjbGFzc05hbWVzKTtcblx0XHR9XG5cblx0XHRpZiAoaXNJdGVyYWJsZSh0aGlzW3Byb21pc2VzU3ltYm9sXSkgPT09IGZhbHNlKSB7XG5cdFx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXSA9IFtdO1xuXHRcdH1cblxuXHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdLnB1c2goXG5cdFx0XHRuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XHRcIm1vbnN0ZXItaG9zdC1jb25uZWN0ZWRcIixcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7IG9uY2U6IHRydWUgfSxcblx0XHRcdFx0KTtcblx0XHRcdH0pLFxuXHRcdCk7XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLWhvc3QtZGlzY29ubmVjdGVkXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lkhvc3R9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkgeztcblxuXHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdID0gW107XG5cdFx0dGhpc1twcm9taXNlc1N5bWJvbF0ucHVzaCh3aW5kb3dSZWFkeSk7XG5cblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblxuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblx0XHRpbml0VHJhbnNsYXRpb25zLmNhbGwodGhpcyk7XG5cblx0XHR0aGlzW2ZvY3VzTWFuYWdlclN5bWJvbF0gPSBuZXcgRm9jdXNNYW5hZ2VyKHRoaXMpO1xuXHRcdHRoaXNbcmVzb3VyY2VNYW5hZ2VyU3ltYm9sXSA9IG5ldyBSZXNvdXJjZU1hbmFnZXIodGhpcyk7XG5cblx0XHR0cnkge1xuXHRcdFx0dGhpc1twcm9taXNlc1N5bWJvbF0ucHVzaCh0aGlzW3Jlc291cmNlTWFuYWdlclN5bWJvbF0uYXZhaWxhYmxlKCkpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5pc0Nvbm5lY3RlZCA9PT0gZmFsc2UpIHtcblx0XHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdLnB1c2goXG5cdFx0XHRcdG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdFx0XHRcIm1vbnN0ZXItaG9zdC1jb25uZWN0ZWRcIixcblx0XHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHsgb25jZTogdHJ1ZSB9LFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIFByb21pc2UgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBjb25uZWN0ZWQgdG8gdGhlIERPTSBhbmQgYWxsIHJlc291cmNlcyBhcmUgYXZhaWxhYmxlLlxuXHQgKiBJZiB0aGUgZWxlbWVudCBpcyBub3QgY29ubmVjdGVkIHRvIHRoZSBET00sIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0b25SZWFkeSgpIHs7XG5cblx0XHRpZiAoaXNJdGVyYWJsZSh0aGlzW3Byb21pc2VzU3ltYm9sXSkgPT09IGZhbHNlKSB7XG5cdFx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXSA9IFtdO1xuXHRcdH1cblxuXHRcdHJldHVybiBQcm9taXNlLmFsbCh0aGlzW3Byb21pc2VzU3ltYm9sXSkudGhlbigoKSA9PiB7XG5cdFx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXSA9IFtdO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy9tb25zdGVyL01vbnN0ZXIuRE9NLkZvY3VzTWFuYWdlci5odG1sfE1vbnN0ZXIuRE9NLkZvY3VzTWFuYWdlcn1cblx0ICogQHJldHVybnMgeyp9XG5cdCAqL1xuXHRnZXQgZm9jdXNNYW5hZ2VyKCkge1xuXHRcdHJldHVybiB0aGlzW2ZvY3VzTWFuYWdlclN5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy9tb25zdGVyL01vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlci5odG1sfE1vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlcn1cblx0ICogQHJldHVybnMgeyp9XG5cdCAqL1xuXHRnZXQgcmVzb3VyY2VNYW5hZ2VyKCkge1xuXHRcdHJldHVybiB0aGlzW3Jlc291cmNlTWFuYWdlclN5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge01vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lkhvc3R9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBUaGVyZSBpcyBubyBvdmVybGF5IGVsZW1lbnQgZGVmaW5lZC5cblx0ICovXG5cdHRvZ2dsZU92ZXJsYXkoKSB7XG5cdFx0aWYgKHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBvdmVybGF5IGVsZW1lbnQgZGVmaW5lZC5cIik7XG5cdFx0fVxuXG5cdFx0dGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0udG9nZ2xlKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7SG9zdH1cblx0ICogQHRocm93cyB7RXJyb3J9IFRoZXJlIGlzIG5vIG92ZXJsYXkgZWxlbWVudCBkZWZpbmVkLlxuXHQgKi9cblx0b3Blbk92ZXJsYXkoKSB7XG5cdFx0aWYgKHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBvdmVybGF5IGVsZW1lbnQgZGVmaW5lZC5cIik7XG5cdFx0fVxuXG5cdFx0dGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0ub3BlbigpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0hvc3R9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBUaGVyZSBpcyBubyBvdmVybGF5IGVsZW1lbnQgZGVmaW5lZC5cblx0ICovXG5cdGNsb3NlT3ZlcmxheSgpIHtcblx0XHRpZiAodGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIG92ZXJsYXkgZWxlbWVudCBkZWZpbmVkLlwiKTtcblx0XHR9XG5cblx0XHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXS5jbG9zZSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1ob3N0XCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtIb3N0U3R5bGVTaGVldF07XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge01vbnN0ZXIuSTE4bi5Mb2NhbGV9XG5cdCAqL1xuXHRnZXQgbG9jYWxlKCkge1xuXHRcdHJldHVybiBnZXRMb2NhbGVPZkRvY3VtZW50KCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge1RyYW5zbGF0aW9uc31cblx0ICovXG5cdGdldCB0cmFuc2xhdGlvbnMoKSB7XG5cdFx0cmV0dXJuIGdldERvY3VtZW50VHJhbnNsYXRpb25zKCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8TWVzc2FnZX0gbWVzc2FnZVxuXHQgKi9cblx0cHVzaE5vdGlmaWNhdGlvbihtZXNzYWdlKSB7O1xuXHRcdGlmICh0aGlzW25vdGlmeUVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBub3RpZnkgZWxlbWVudCBkZWZpbmVkLlwiKTtcblx0XHR9XG5cblx0XHR0aGlzW25vdGlmeUVsZW1lbnRTeW1ib2xdLnB1c2gobWVzc2FnZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkgeztcblxuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXSA9IHRoaXMucXVlcnlTZWxlY3RvcihcIm1vbnN0ZXItb3ZlcmxheVwiKTtcblx0dGhpc1tub3RpZnlFbGVtZW50U3ltYm9sXSA9IHRoaXMucXVlcnlTZWxlY3RvcihcIm1vbnN0ZXItbm90aWZ5XCIpO1xuXHR0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMucXVlcnlTZWxlY3Rvcihcblx0XHRcIm1vbnN0ZXItY29uZmlnLW1hbmFnZXJcIixcblx0KTtcbn1cblxuZnVuY3Rpb24gaW5pdFRyYW5zbGF0aW9ucygpIHs7XG5cblx0aWYgKGlzSXRlcmFibGUodGhpc1twcm9taXNlc1N5bWJvbF0pID09PSBmYWxzZSkge1xuXHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdID0gW107XG5cdH1cblxuXHR0aGlzW3Byb21pc2VzU3ltYm9sXS5wdXNoKEVtYmVkLmFzc2lnblRyYW5zbGF0aW9uc1RvRWxlbWVudCgpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkgeztcblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHRlbXBsYXRlIGlkPVwiaG9zdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmhvc3QtY29udGFpbmVyLmNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInBhcnQgcGF0aDpob3N0LWNvbnRhaW5lci5uYW1lLCBkYXRhLW1vbnN0ZXItcm9sZSBwYXRoOmhvc3QtY29udGFpbmVyLm5hbWVcIj48L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiaG9zdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KEhvc3QpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IE92ZXJsYXlTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBPdmVybGF5U3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdE92ZXJsYXlTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIG92ZXJsYXkgeyBcbjp3aGVyZShodG1sKXtsaW5lLWhlaWdodDoxLjE1fTp3aGVyZShoMSl7Zm9udC1zaXplOjJlbTttYXJnaW4tYmxvY2stZW5kOi42N2VtO21hcmdpbi1ibG9jay1zdGFydDouNjdlbX06d2hlcmUoZGwsb2wsdWwpIDp3aGVyZShkbCxvbCx1bCl7bWFyZ2luLWJsb2NrLWVuZDowO21hcmdpbi1ibG9jay1zdGFydDowfTp3aGVyZShocil7Ym94LXNpemluZzpjb250ZW50LWJveDtjb2xvcjppbmhlcml0O2hlaWdodDowfTp3aGVyZShwcmUpe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoYWJiclt0aXRsZV0pe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH06d2hlcmUoYixzdHJvbmcpe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoY29kZSxrYmQsc2FtcCl7Zm9udC1mYW1pbHk6bW9ub3NwYWNlLG1vbm9zcGFjZTtmb250LXNpemU6MWVtfTp3aGVyZShzbWFsbCl7Zm9udC1zaXplOjgwJX06d2hlcmUodGFibGUpe2JvcmRlci1jb2xvcjpjdXJyZW50Q29sb3I7dGV4dC1pbmRlbnQ6MH06d2hlcmUoYnV0dG9uLGlucHV0LHNlbGVjdCl7bWFyZ2luOjB9OndoZXJlKGJ1dHRvbil7dGV4dC10cmFuc2Zvcm06bm9uZX06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9ufTp3aGVyZShwcm9ncmVzcyl7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9OndoZXJlKHNlbGVjdCl7dGV4dC10cmFuc2Zvcm06bm9uZX06d2hlcmUodGV4dGFyZWEpe21hcmdpbjowfTp3aGVyZShpbnB1dFt0eXBlPXNlYXJjaCBpXSl7LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDtvdXRsaW5lLW9mZnNldDotMnB4fTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiw6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOmluaGVyaXQ7b3BhY2l0eTouNTR9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtmb250OmluaGVyaXR9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyLXN0eWxlOm5vbmU7cGFkZGluZzowfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzcmluZ3tvdXRsaW5lOjFweCBkb3R0ZWQgQnV0dG9uVGV4dH06d2hlcmUoOi1tb3otdWktaW52YWxpZCl7Ym94LXNoYWRvdzpub25lfTp3aGVyZShkaWFsb2cpe2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6c29saWQ7Y29sb3I6IzAwMDtoZWlnaHQ6LW1vei1maXQtY29udGVudDtoZWlnaHQ6Zml0LWNvbnRlbnQ7bGVmdDowO21hcmdpbjphdXRvO3BhZGRpbmc6MWVtO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7d2lkdGg6LW1vei1maXQtY29udGVudDt3aWR0aDpmaXQtY29udGVudH06d2hlcmUoZGlhbG9nOm5vdChbb3Blbl0pKXtkaXNwbGF5Om5vbmV9OndoZXJlKHN1bW1hcnkpe2Rpc3BsYXk6bGlzdC1pdGVtfWh0bWx7aGVpZ2h0OjEwMCU7bWluLWhlaWdodDoxMDAlfWJvZHl7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO21pbi1oZWlnaHQ6OTklO3BhZGRpbmc6MDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1mb3Jte2FjY2VudC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQ7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LXdyYXA6bm93cmFwO3Bvc2l0aW9uOnJlbGF0aXZlfS5tb25zdGVyLWZvcm0gbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6Z3JpZH0ubW9uc3Rlci1mb3JtIGxhYmVsOmhhcyhpbnB1dFt0eXBlPXJhZGlvXSl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5tb25zdGVyLWZvcm0gbGFiZWw6aGFzKGlucHV0W3R5cGU9cmFkaW9dKSBpbnB1dHttYXJnaW4tbGVmdDouNHJlbTttYXJnaW4tcmlnaHQ6LjRyZW19Lm1vbnN0ZXItZm9ybSBsYWJlbDpoYXMoaW5wdXRbdHlwZT1yYWRpb10pfmxhYmVsOmhhcyhpbnB1dFt0eXBlPXJhZGlvXSl7bWFyZ2luLXRvcDouMnJlbX0ubW9uc3Rlci1mb3JtIGxhYmVsOmhhcyhpbnB1dFt0eXBlPWNoZWNrYm94XSl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5tb25zdGVyLWZvcm0gbGFiZWw6aGFzKGlucHV0W3R5cGU9Y2hlY2tib3hdKSBpbnB1dHttYXJnaW4tbGVmdDouNHJlbTttYXJnaW4tcmlnaHQ6LjRyZW19Lm1vbnN0ZXItZm9ybSBsYWJlbDpoYXMoaW5wdXRbdHlwZT1jaGVja2JveF0pfmxhYmVsOmhhcyhpbnB1dFt0eXBlPWNoZWNrYm94XSl7bWFyZ2luLXRvcDouMnJlbX0ubW9uc3Rlci1mb3JtIGxhYmVsfmZpZWxkc2V0LC5tb25zdGVyLWZvcm0gbGFiZWx+bGFiZWx7bWFyZ2luLXRvcDoxcmVtfS5tb25zdGVyLWZvcm0gYnV0dG9uLC5tb25zdGVyLWZvcm0gaW5wdXQsLm1vbnN0ZXItZm9ybSBzZWxlY3QsLm1vbnN0ZXItZm9ybSB0ZXh0YXJlYXthY2NlbnQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZToxMDAlO21hcmdpbjowO291dGxpbmU6bm9uZTtwYWRkaW5nOi40cmVtIC42cmVtfS5tb25zdGVyLWZvcm0gYnV0dG9ue2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1mb3JtIG9wdGlvbjpjaGVja2VkLC5tb25zdGVyLWZvcm0gb3B0aW9uOmZvY3VzLC5tb25zdGVyLWZvcm0gb3B0aW9uOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1mb3JtIGlucHV0LC5tb25zdGVyLWZvcm0gc2VsZWN0LC5tb25zdGVyLWZvcm0gdGV4dGFyZWF7Ym9yZGVyLWJvdHRvbS1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItYm90dG9tLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym9yZGVyOjA7Ym9yZGVyLWJvdHRvbTp0aGluIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dGhpbn0ubW9uc3Rlci1mb3JtIGJ1dHRvbiwubW9uc3Rlci1mb3JtIGlucHV0Om5vdChbdHlwZT1yYWRpb10pOm5vdChbdHlwZT1jaGVja2JveF0pLC5tb25zdGVyLWZvcm0gbGFiZWwsLm1vbnN0ZXItZm9ybSBzZWxlY3QsLm1vbnN0ZXItZm9ybSB0ZXh0YXJlYXt3aWR0aDoxMDAlfS5tb25zdGVyLWZvcm0gbGFiZWwgaW5wdXQ6bm90KFt0eXBlPXJhZGlvXSk6bm90KFt0eXBlPWNoZWNrYm94XSksLm1vbnN0ZXItZm9ybSBsYWJlbCBzZWxlY3QsLm1vbnN0ZXItZm9ybSBsYWJlbCB0ZXh0YXJlYSwubW9uc3Rlci1mb3JtIGxhYmVsK2lucHV0Om5vdChbdHlwZT1yYWRpb10pOm5vdChbdHlwZT1jaGVja2JveF0pLC5tb25zdGVyLWZvcm0gbGFiZWwrc2VsZWN0LC5tb25zdGVyLWZvcm0gbGFiZWwrdGV4dGFyZWF7bWFyZ2luLXRvcDouMnJlbTt3aWR0aDoxMDAlfS5tb25zdGVyLWZvcm0gZmllbGRzZXR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyOjJweCBzb2xpZCB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTttYXJnaW46MDtvdXRsaW5lOm5vbmU7cGFkZGluZzoyLjVyZW0gMnJlbSAycmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCV9Lm1vbnN0ZXItZm9ybSBmaWVsZHNldCBsZWdlbmR7Zm9udC1zaXplOi44cmVtO21heC13aWR0aDo5NSU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjFyZW0gMnJlbSAuMnJlbSAuNXJlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RleHQtYWxpZ246cmlnaHQ7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7dG9wOjA7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWZvcm0gZmllbGRzZXR+ZmllbGRzZXR7bWFyZ2luLXRvcDoxcmVtfS5tb25zdGVyLWZvcm0gYnV0dG9ue21hcmdpbjouMnJlbSAwfS5tb25zdGVyLWZvcm0gYnV0dG9uOmZpcnN0LW9mLXR5cGV7bWFyZ2luLXRvcDoxcmVtfS5tb25zdGVyLWZvcm0gYnV0dG9uOmxhc3Qtb2YtdHlwZXttYXJnaW4tYm90dG9tOjFyZW19Lm1vbnN0ZXItZm9ybSBpbnB1dDpmb2N1cy12aXNpYmxle291dGxpbmU6bm9uZX0ubW9uc3Rlci1mb3JtIGJ1dHRvbjpmb2N1cywubW9uc3Rlci1mb3JtIGlucHV0OmZvY3VzLC5tb25zdGVyLWZvcm0gc2VsZWN0OmZvY3VzLC5tb25zdGVyLWZvcm0gdGV4dGFyZWE6Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpO291dGxpbmUtb2Zmc2V0OjJweH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmxpZ2h0KXsubW9uc3Rlci1mb3JtIGJ1dHRvbiwubW9uc3Rlci1mb3JtIGlucHV0LC5tb25zdGVyLWZvcm0gc2VsZWN0LC5tb25zdGVyLWZvcm0gdGV4dGFyZWF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItZm9ybSBidXR0b246Zm9jdXMsLm1vbnN0ZXItZm9ybSBpbnB1dDpmb2N1cywubW9uc3Rlci1mb3JtIHNlbGVjdDpmb2N1cywubW9uc3Rlci1mb3JtIHRleHRhcmVhOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDoycHh9fS5tb25zdGVyLWZvcm0gYnV0dG9uOmhvdmVyLC5tb25zdGVyLWZvcm0gaW5wdXQ6aG92ZXI6bm90KFt0eXBlPXJhZGlvXSk6bm90KFt0eXBlPWNoZWNrYm94XSk6bm90KFt0eXBlPXJhbmdlXSksLm1vbnN0ZXItZm9ybSBzZWxlY3Q6aG92ZXIsLm1vbnN0ZXItZm9ybSB0ZXh0YXJlYTpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UmFsZXdheTtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBRko0QUJJQUFBQUF0M0FBQUZJUUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR29FOEcrNDZISVU4Qm1BL1UxUkJWRVFBaFFnSWdRb0pueFFSQ0FxQnVneUJtbkFMaENJQUFUWUNKQU9JUUFRZ0JZVVVCeUFNZ3h3YmZhUVhhSmVmbU56MFpvbDN2NjBjUGVaTXBHNEhKU2prNXFJSU5nNkNHTWdsWmYvL24zRjBqT0dHRFJBMXJYZUluY0pJVWtOSEduNjlxTVJEVThaYWpqczlVYnNtdG5xbkUzdjN2cWlRbWZSUXBMa0tXNlFad2FsNnM1SVVpSk5VU1VHL093b0RZNkI2NzVPalNqa0RTU011MnBlZHB1OXZKSUxVbEpkNzA3RCtlTEhwallESTRlMXVEbkxqSEh2eHBEWEdNeWR1TExuMXF0MEZDUU95RnNKWkUxK2tKcTNUK0llN0JKRklOT0FOYmk5dlRVemhJN1c0R21VTDBsV2pUL0ZRUWkvbSsreHVQUDAyb21SSGU1cG40RGdmTlpmbitSOXo5Nzl0bUVlTmFxMVJ4UnFIVGpUUE5BMkpGRWdySGRvL250L1cvNXpiZ0dDeGlhNkVrVmlBMkZoWUdJdFJtRTFadlZVdnF0U3RiN012cmQzVzcrdDIrMFhkb1RuenpqWWJwN21TSExBQ2toTVdnQ1RMNnMwV3YwQVVvaEpmRXFFM29wUGQ1OGlrSm5LbG8rM3VhZVNIWUo2ZmNJY1hqZCtyS1VFc2FFbFRxbFVsVlJtL04rZS84aVAwTDVBS296TmxKMy85aUJ3c2hNNnY1SklVSnlrZ1QzZmRyT21xNkxjcytaK3EvWHNBWEZ4RUVpUUlVYUtvc0ZuN2N0VCs3QkJTNWRxRG9sSlh1bmJsN3J0dHpEL3YzODRMZnRKYWdGRkFMWVBFNUE3Z25NclpCaHQ0bFhxc2JaS21iZHEwVHRPbXBtZ05pdWdNMlBZQmM3M01yanE3R0xzb1hIY1RwdDl1UHZGRHo4ZU4zZytzeHJQUUF3NkRURk5wL09aSTlpaW5OaXRaaFJtcFFPQ2tkb0JkQU5qVldsYXZNaXR3RE5KWC9wWUlBa1Z3bk9QL3ZXNXh6b013N1NBRkFLVStaei9rblAvWjlqK09kZnJMOEtlMnZkS2JtcGh1eEpTdUw4RVVBZ2dISWlCSFArNDQ0RUR6djFQVFEzWWtPY09TbFRIbWo2VXNkZm8yTCsvanBZZTdJSFdjUVVnY2drcExGUjFZVFc4Q0dLUVg5YjhHRkFBQUg5dG80UkhRNkdMdkZScmk0RGl3VHpBQURETUtEUHIvZlozVi9xZGdQbWtHektURW1XRVhiN1EzdHRnVFlxbzJuUDYvKzk3WGYrRi85SkhBVnNJSWNBQ0Jad1J5a0dUN2dDUjhWb2hKY1VPT1NEamlTYkFwaE1vem0ySlJwdEJ0VVc2OVhiTkZHM0lWeTJLTG9rNDgvTGZzbTUyN0lhcUJMTXVCYk9GSXdlRlVkMDF2ZUwrWTh4V2h0emNxVG0yQ0lUYzVlTEp3U0k0ZllsTFlGSVZIQXMvL1Q1M040L1l4MWhLR1UrSFNxRXJkcFBQbnM2ZnFxV0pzTmJaYUNsUXRqbE9MVU1zaGNkb0E1VFFzczRKTGM5MFN4Q09NTVVLNEtQOU5zaHB6cFg0dnd4S0NoQ0FTUkVSRS9MS3NXUmxKd05LQWNUblhBaEV5M3IxS0hjWmEvWWRYNTg0MjAvaWFYbXRHaG9DQWlJaUFSMjN2L1A5K0tUQUNBTjVoZGtDM3hVQzRFTHNnZ3ZrUjJrckVqWVNFdjBCS1NtSENoSXZZT0NBSmtLUWd5WU1NMlFvVU16Q28xNkJKODVxQVdDQ2RIZWszQUIwT0RMMUxxMFBnVGUzaFN3MmZoaTRYaFB1ZXVRV0VINnh0SUVRQWJHMk5tNW9WNTRRRlAreUtnTzJENFQ1dC93ejJYVzkyL3JwcXBMVFNJUDhxVjl2THZPZHMwTkxXeVg1MUs2b2ZidlBaRTFwYWY3dzMxOEM5WnRocTdmMzJiZnVMNjRWWkh3NTE0WXNtNWxnZk5iZkc3Vzlsc1VBNEVHejcyM3Z4d0d6cDRmUlIrbVA4THM1QjdLQjJlREpYYzZ4d2xHNjkwMnVnN0F6TEE4TlkyMUIyZEIvUDVxZk9WOHQxb255TDVqWkREZlFJNVJnOEQ5OEZ2SHN2Y2xIdUpzcmR2c0pycGMvVHIvZ3UvRWZaSnpYVXpwV2FEajdNNytVUDgvOEVrQUFWYUFTL0NSK1hzL0pONFlhSWNPMXhIWmNVYU1NYmtscnBLeTdOZlFKS1FjVVJhZ29HbUNXK0hBNkVOdmJnMzNzbDJwSVlSbUU5YklIYjBtQTZrazZsTjVHZHlNTjVFYm1RaHhIS2x3TWdUNThjZ3c3cGRVUno3bmZNY1FmY1UzdkljelZrZHJoWDhYSHE0MDEydEZPZDdrVC9hN3A3bTgzV0E3MUY3YU85TStkanZkZDZqN2Z4bStEMVB1M3ozdWlydm11eXphNTN0cnY5M2xUYjgyUlQyS2FGVlVLTU5QMzZCdlFNQ28wR3NFZGtMOHMrekxnMUV4Yk0wTmdDV0F4Z3pmODJERzFLWE1mYzRyak5jUWZIS3hTQ3VSdUJJNUFvZERERGtHZFY4Q25WVkVtRU1haW40U2EwQVhUSTBSQk5wT1lBTFZxMWFWOXZ4SmlVekhLV0NpczZtcDBCdWt4MDY5R3I3NHNuVk5ic29DbWtWTW9wNStwREdhV3oyc0xEcjJpTnQrb1pPMGIzNllTSWpXY3h2bmxOMHgwVmhsWW9XNFVSalhYS3lMRzNZM3FvTGRFYXpIQUVFb1Z1TWwzRERlRVJWcEcvamVURVIwQ1VaRVUxbW90cUZvaXdKRktVYURGaWFjU2xCSnJFalNRS0ovQ1NGU21TS2sxNjFRbGtkS2V5U1hZenNkWEtpNkk5aWtOSk10Q1VLbE91UXFVcTFWSFQxenE2K2x6ZlFOQUlhNUpwUm92V2FFUDdaeHVObVRqTUxCWXVxM1hVVGdOZFJEZDZVcTlBMzNjYnhBenhERE9OMEl4YU5WYXhkLy9zL2FqeEFFNkpuUGJGR1prdUMzdWFOVThFc0RTTFpWbXhPajFQZDhIUXhYU3BlZGtYYXdiVzZ3Wm84KzZEcml1UUZGdzVJcHZuSmg2L1pnRkpLOTMwYUVNMlhKM3lKQjBESG9waGJxZzB1cmt2TUlnWWx0YkdSUGNka2Q3VmovTlY0cGJBYmErL0U0QmpDZzlwNVplcmkvcGRNMENHLzd0WFpOeFZFKzZiWWF2UW42dW1Xd3kzRlhmNmdnK1huQXRIRGdqa1BOaVVicXBvd3ZEVXZiUmxjajVYWkhZelY4Smk0TmwxdmpzT2hyTWF4T0h4ZUR3ZWp6L1ZJSEpYbjZIMHdoZzZxRk9FVXFRbzBXTEUwb2hMQ1RLSjB5UTVMVTl5UlFwU3BVbGZabkFTQmtXcGxDbFhvVktWNnFpYlRCdE1tUUtZWVdIVlVVZnRHSXQ2Mmxkbk1IM0VwaVUwcVZRcUhiQ0x4T1UrRTQvMVhMZkJFaHpLaGdVY2dVU2hmeHdtRHo5RzVFUkFBSEw3RkhSS1F5cm53dXhRZjVyaEhCRUJSSW9TTFVZc3pVYmM0cnRNZHBsMjZGZ2Q1NXRnUUc4eC9mQVoySnpJdkdibWxyY1hBbTN3WEthN0VsZlBjUzJ0eGZxK2VnZmlIR29ETXh5QlJLSHZ5M1NKMzBRNlY4KzZtZGZac2FGVjNlT1VLc1dNeW5raHlMMXU0VkkwTDFTSkxJeFh5WXpwTHlOcWlXejBYVHBrYVR5bjFaRHRpOTBtWTAydjB0VXF0elNDbCtxcks3ckl1djF2OVJEMHNneHFHYkpvR0dmRWtsRTFZenIyOE8xbDJLZXdYOU40QURhTjFiN0wwSWFSVFhPdXk5eWl1ODJwT3dIUUJDK3BsZENyT21LME1nL3IxdlJZRW0zREJFY2dVZWdtVXgwM0c0K3dpdFFnT2ZFUkVDVlpVWTNtNHRtRUl2d1VLVXEwR0xFMDRsSUNUdUkweVRxdEZjbEVDbEtsU2E4NldFWjNKSnZzRldpN0l4S0pPQndPaDhQaGNFVHJSTjN0RHBsTUpwTmhSSWFpcUFpR1lSZ21jYmtzeTROb3ovcm9mUUw3S2NhbE5EMEZPVzNSR1p1T0JSMnhtVk14a1Vna0RsMFg3dUppdXRTOGJOR2FFK3YvWlFPd3FlODZHSUllRXNDdW92V1lmQ3EydHZwTU9CTjdNek82OEdXWExodG1nVzJmZmVIcDFNdTdxd1g1TkR3VGtwQ1NjZWZCa3hkdmZpbkFSSVJJVWFMRmlLVVJseElBaVpFMHJWcTY1SW9VU1pVbXZlcVVNcnBzL3oxWldFWjVZQmdHQUFBQUFBQ0EwV1pzZDFDcCtIdytuMi9jT2xrNHJEcFNsMUszSHIzNmpnMUNUdHd6T2NOdUNYWU5naURZaG90SDFvZ09MUlN1eDhuaWw0cjJpWWF2MG5vcnpYdloyblpqWkxmYUtEK1ZSZ0gvZmdObXBrRmJoZ2lHaVVhY0dmWE5tSzQ5RlB2WTl0dmJjVG03NSszZmRhbVc2WVN0d2tkemFDSFpjdnEwQ1M0aVU1Wm1OeExYR0JlL3JRb0hqTVAxL1FFR1ZNWkZKZ2JEREovNVQzZXlCY3ZHUFNxVGltSmNDK1lRVWpxR3YybkM3cTNuQjBET3F2MkczVnZsSWhLSVc4TVJTQlM2eVpUaU5HRlgrUkdDREhzOFBZSWRUamRBVUF5dlFrd1NDcHBoTmQyMG1wdU1qUVhLQlFrV0lqUXBtSlJVS1l4S1hjTERjNmtJZkhhVEthT01TYzRNc1ZSWVEwZXpVNkZMcFZ1UDN0TEh1d3ByWWZ0aGl3aUhGQVdrU3BtV1J0KzZuSjZVMThDdXlKODVqMngwYjBkN045cGlicTBsYjROblUrcE83dEVVTGloZFVPMmhycHRnWVhDc3hCRkEzbFEybm1GYzNGYlJqR0JnQ2Q2QlVIN3FuWEJiYWNqc0s5OVJmSURNQUZrQnNvTytuWmc4UDBCQmdNSUF0UUVhbjlXUUVzOU1BSE5HODU1NHdhK0FybnF2VFRqcEdTN2UvaWxQbWpBUlBtbnN4V2tkQUFSeU9MOXlBaHlteDdTR0tsazdHaDQ4dkR2TmZkZytJVEJacEQ5Z3pnTUlCd3dCazV0bWtFWElxcU1NYUVUZy9IVWUyNm9MVFRwNHc0ZzlVa1o1YmdieEVIdEN5VExZUEhtSlVxM3VKcHF6dlNOY3VtYkJkWFlRc2t1MUM5Mk44alR2REZFVTBydjgxN2dtcXNHalBmUnVOanZlclREbUhDRTRxK3Fiek9qdUlJdlJhRGh6WjEvVkpVcGhoaU9RS0hRd3NaNVRqZ3VBQjhDdUtyK1lJTUtld0lvTU81eHg5ZTRBRUJURFNZcG0yT1R5OG9Jb3lZb2FqZWpVUWI4SndEL1hCNWlTc3dVaWdoQXNSR2hTMENnekp6WE1DVFUxWEVaSGFUQVhUQ1FTaWNYYlk0VkNvUmdMRXhzdGxkQ3R4WjFhVW5sdXRHaHRPUXQxOC9SVWRWcGtEQnZiUzRuRW9ORm9OQnFORmlkWG4wV0pMSkNyVThDVWJxcU1oWkdwbStGOEViQklVYUxGaUtVUmx4S0VFaVZWTFZOeVJncFNwVW12dWdBWmhBR2x5cFNyVUtsS3RicG1BNndyUUxjZXZmcWFFN0RUV3M2WUhtMEUyZGNsaVdXc1dFM25tUzdHNWI2dUdWblBuTnV5eVdiSHd4RGpwV2s2TStqMjBlWU1MUS8wM1ZNbUttNFpuZ2xKU01tNDgrREppemUvS3JkQ2tWTWxLc3lJbW1lWmYwR1F5d0pCRUZ4Qy9yZ2dDSUlnQ0lJejkwYkRFd01UajhmakFVQXhkUzZWc0RjczFnOHdmWUNYck5kOThTSDhnYWprNXZ1VVBxZzRYRFA5Sm03b0dXdkdYeFNkRUxMZnJzRVNFc21XWFRjTTNjTHRIRlNHYlNIQkFqY0NpVUlYSnFIbk1sT0xSQkxhc25VSzJTdXgxenFuTUIvWk1HT3gvelB1OG9oREFEQUFPQUFDQUFtQUFrQURZSGdsQ2tDdUxWQWlTSUtGQ1Awa2hXTktQRlV3YmR5TCtzREJ5ZWdrYUoyV0VNdFdyRTYvNHZwVzdHNmU0bUR3MEJmeFpoRnQ5R3ZmaFBFQW15ZDRjTXRVcXNQbDRheTdHdWFrNXQwTjUyT093SmFCZ1NOSHNrMk5oN3FFV1pZVnE4ZStrc3hqajNFS1NYZzhMTmlsUXFGUXpFMWZ2NXR2cFFRRnRGSW15THRpdlRlV2tRQ2s1WlJlMlFpSjJackxZRFY4Nk1CWVdYNXhBUHVuazF5bnRaMng2YWJOcmlYQXNoV3JjZmtVNjN5L2ovbStnbnpOOEkzWXR4emZDZU9pQVBpN1loMXdCQktGenM3MldybGlmV2IzbitzT21rU2l6WEhUWHBtdkFuT2dlYSs3UzhGMUVIUDhuVTRJbkZZNFE1bVdwM0JBTGxlc2E3Qno0RnVPYkU0RVhSbml5azhodENPaWs4dmxjc1dZSUtyNC9jSE0zWFhJY2N5T0RzQlhIOVIzTklCalVzZDFmaWRqMGlpbkg1cmlaZlVPRFRpRlF1bHplYXg3K2pIWlZ5eGYzOFUzeExkcitVN3U0M0g1OUtlZ0s5NUp2d3Z5cW4zSWd4THlVRzJZNFFna0N2MUJURCtJdkNNUE1nMGxWWVJCblNJUWthSkVpeEZMSXk0bENDVDJobTBzRUFnRUpURHJxYjRnSjJKWW96U1VLVmVoVXBYcWJOclorWmhlamIrNXJIckd6Y2NMUWhKU011NDhlUExpemEvS3pRbk1DRUt3RUtGSllZR3lOeUsxbHRKVS9KNldtRnhVcUxzSW5YU3MzNHM0QUpuVE5QOUpWODFaVzA4YndveHdqTW9HZysxZ1BQeHdBTWVaa0JFRStWc3Vwc3hvOWNXUzVpdm5hU1VwRkpRMVRFYnRleUtqTUFMbFNRaDZSSzNnQ0NRSzNlUVU0amJFQzd1cS9BeUNESHVDQlFUc2NNYlZ1d01VQkJURFE5eVFGTTJ3eVJueUVTeEtzcUpHVTNSaUVEUFhMOURaNUY0SXBBdVNZQ0ZDazhJR1pWTUZDZE9rTHVFMUlLVkZsR2d4WW1uRU5lTkJDVlNKa25KRWorU01GRW1WSnIzcW1ES0l6R2xrU2JiZDlITGsxZngrM2UrVkNwbUtvaGdseVVCVnFreTVDcFdxVktjYVVHM1VsZnBva01iYXhOQXNMVnExYVU5R0lsT2Z2SmxNcHBqSlpESmJSanRhTldrL3J6V29NSUlhTldlc2F1dDAzeU1PMlB4SUk2TUJFOTFxZm9EeXhDU3dnQ09RS0hTVDZRVnVEaDVoRlhscHRyZ01qeUJLc3FJYUwxN0djZGtBNThBOGdDWS8zMlBMYndrbkNRQkFObXRDdzZOb0JyVklxemJ0T1VzV1U0MDVsQ3daMXREeDVwMW83VEVkSkJnU0dMNzc3QkVqbzk0YW85b2p0SzlidjUvaEFNOFJhNDZTamdtZGVMek5ETWhpVUhudTdRbUREQlorSVVGaVRjSm9IY2xJa1NwTittWkdjVGNINUljQnBjcVVSMFdvVktVNjZxWjN1c2VnRjNtbitiRmxyaXE5Qm1tblY3UGI3RzBSdENhc093S1FaRWdoNDg2REp5L2UvSjZKcnoycnZ6MTE4UGs4UHAvUDV5LzlOUEppcjlnSnd5bEtyVXk1Q3BXcVZFZmRWRk50aHJXZ1ZadjJaSVNZZXJlQm9KZEhLZWFlZzBKN1VCZXFSOFNPMWFuM3BGQU1LTHdJdFZTSisrRm1uaUhFc0ZFUVcrcGVrb001SHFmNTBseEJMTHY5ekNNQVpUUFExN245WDVrSEZYN2M2UTJKdmIrS1NJc1NMVVlzamJobXZKRUVXeExISkRYTVNLNUlrVlJwMHF1T0lLT0x6R2xrU2JiZDlITGt5VmVnTUJXNVVLd2tHV3dwVmFaY2hVcFZxcU9tajlwNXFsTlQzLy8xeHNpQVJDS1JTQUJBQlFEQWdFQWdFRjRrY0hQQTR5L2YybTdZR281QW90Q1ZTU0lhVGVWR0ZBQWx4MVJJWlJ2R2M1ajBKSWVvY3h6enBLdGNheWN4STFoU3lWKzYxL0dDd3V6QU1mUU13NkxUS2Q4b3NGQWNyTlZEUEllRnM2TEhGeGxOeXRpZURqYjhHT1FRYmhTSXRqMDJnSWc4T1ZiVWZnRi9HdGthQ3NNTVJ5QlI2RDU1bWNQakxiWWtJOEowd0p3WGYvTTFubzlkalRWZFdocGlENE1qa0NqMEdZWTZrWTFONVE0RUtnVWhXSWpRcE5DamJLb1NDTk9pWG9aYlZGOS96c0xkR1lHZ1ZiTXp3Snd6OCttcVUyc2pZMUJyY2psM2ZHL3NmejZxN29nMlkzNHZmcGRVaGUvQ1oySEg4eUFBL3hROEQzbXlBSUROQVZzQ0FKYlpueGkyY0g1czJjUkp3VmFPbTJXV3N0UEdaeFlaQTFLSVI3bXQzQXpBbXRrRlVJNWlsRGNBbTJRd29qRlhCNnIzSXNCeVZxNWwrdE5hYmN0ckYrUXJBUStsa2lVV3ppSEdLV2M1dTFGVWRNS01obnhpeG5BVTRsa2FBbm8vbmh1U2NFbkhyUTZRRWRvUjJGSVE0R0ZuWUhrZkJnSlR3Tmw0MnJRSDdkVjZJQkt4NEdESVBUU1BBdFlIY3VhL1V6ZVAxZXBaSk5hdE9BU3FGRVFrWUNXU2pLb21jdko0US9sWW1SNmJXaUVXV1ZJRkFOYUlUT1Z3MlpWSHpyNU16Qy8waS9EMWt3RVdWRC96VDliNkRHNjMyaUs0VXFDN1RQMlVOYm5rRVk4NjRYWWlLbFcrQlMzRlVLeEhEUVlvKzhCOXl6MXc0aDA3QmE0UWtrekwwTEdKR0lyclorY05YdUIzUHc2Y2VkcEFNVTZHelJRcURXN250QitjV2lzRnlvM1dDbVFqTDBNbVhvQnFOV1JGSVpJN2dEWGh0U2N0OExwQmZrSHNSUTZYcFZmSVJ2WkJVOHA4NUY0aEg4RUtueG1FWW11K0s2Y1lZM2dRZTErL1R6SkFJUkYxY0t2Tm1uMlEwTThhT1dzWGpUOWp2QkNyNTIxeHF0V1ZJNmFwTHBlaEtjeFp1VzlCV0xKM1FHcWY5SlRpdXZ2VTB3ZGdody84SUJSSVgxVnVOUXlzQnFTdFZOUFhaRHRMK05pdmN3aTFQZ0QvNU8wb3ltMkorNzhvbjByeGdBOU9DbGEwZ04wSkVQSFkvWVA0bmhJYXdiRUoySGxVblI5RGJ6ZldNUEF2eGtydEExNHg2anJBbVlVY2dSZlJsWm5uWXhzMnkrb3dMRHdrUzJWazNkZmpBQVVWSUpld0QwNnR6K0F1dzZwSXF4VGw0ZG1qb0dsWVFYRE1iMzFGSlBzKzY3ajlSTmdzSFlnd3dPY1l0dWZLNlZoQ0xNdWM0TkZUYnY5cEVRakZOak5yMExXQUpCM1hHSG00eDduQlJmWG1IUWhRMGJ6cW1PdFZUbnllUzZ4MUhiQy9hcmovWGUvN3FNT2w3TTBlVW5EUGdoeWlzRjhxSW9GYmhmRWdxeUQ0bzNvMks1UkxyTUpZQ2FDNWdySHd1cEROc1ZvWEZJMys5V1lQYTFsd3ZPcDkxZnZhbkdob21KaXA5N3VwTkhtT0greWIxK2hMSXBkZHIyMVJpQTEzSmliNzlrNnBUQjNkRkFvNzE0cFExeVJaYlRYTXlkQTdtUUU5UkZHaEwvT3hySGpkUm5vMFhkZjl5RWUwblhGZk9lcnpZK0RPM2ZpQldCRk1BbXFGYk9lZ2tBcVhUVm81ZlM2NnlPSVZsTENTZGNwNjh1ZTR5SmVsaFVQdFU2Vm0yam5OQVBxd1dhTm5udjF3N0pQNnhRWmF3U0lQbE9GTUVVR3V6UENCYjJkSlV5Z1k2UTl3cjZKVWpKcjZOWmNiRVl3TC9jeFpmZWM4MkxPc01LNDl4WDYyOFA4TnEzVERFY0lBUFp3d2hMdzU4aFBLazVKU29EQkpnaVRMRVN0UEE1MG03U3FZbU5TeDZGTnYwaVNqVTA0em1UYk5ZczRDcXpmSmZsbUMvWVpKZ05Cd0RBYUJpOGVCSFQ1SEFrNElRa0t1UkVSMmNlSENqU3RYWWhKZU1ONjhFZno0d2Zqekp4RWdnSlNjbkV5Z1VBd2xKWGRoMUp5RUMrY2hnZ1lwVGh4S3ZIaDJFaVJ5bGlTSnAyVHBLRG82VzJUSXNGV21URjZ5NUVEeTVFTUtGUEJXcUJCZmtSSUNCbFZvMWFwUmF0U3lVNmZPVnZYcStXalF3RmVUSm42YXRlTXdNZkZuMGNGZXAwNEJ1blRab2xzM3BFY1B2bDY5a0Q1OStDWk4ydWFVVTRST080MXIyalN1T2ZOMldyQkE2RTB5Wk1rTTRidzVod3NXbkM1YWNyaGt4ZW15Tlpzck50eXUydks0WnNkdHpaN0hPc3dHRXd1aGtSaU03VGc0RUM0ZW5CMW5pSkFRYm91ZEVCR1JIVnlJSVJMZWNENThJWDc4NFB6NVF3SUUyRWxPVHFRUlhIQVExNlU0aEM3Z2dDRUFnMFlBQndvS0RydUVsNitHcWJGTlBMV0dBeERBMisybVVTTk9pQmc3dDBTa1MzMW94ZU1ranJGbjJJSWpKempNU1VoT3Vra29FSlNpanlHZ3gySWEvOVpjMDNiK244K2dxa2dTMjhzNzU2Y2pVcDN6d1RyK1JQZTZTZXJsVWRUNWFldWdlL0FIZ0J6OUY0aW53RThxK0g0T3ZJVzM5RmJlV3J5L0JxTXZ2L0tTdXBpOUhrclZlZkc1WjRJYXZmanlXeStwNHNWWHloZVZUNW54SXEvemJ2YmpvcVhYMVplMGhqMEFZRk1RWnMyQmtBZ0ZJR0Z3eEhZTkI5WGRhbXdyM3M3L0NJZmdZWmlmaFQ5Z2ExMHl3dHpkWlkvaGNuZVRZYS9raXo4S0NCb3JoRlo0ZzFsWEJHR1dLQTc1MkVsSWQ5YUxLNFNGTmRWMzI5Ykc3UklJS1U0R0V2aGpyOExVMXdqQTIzczlCbWdiR2pROTdvVUt3cWlPdnlQWkVSSUNLSXpBNldUcFdRd1Y2b0psZTNWVGxqNVR5UEtPam00TmJ2T2cvVDlHVmZ4TkE5aEZoUURTdy9mUmpwQ0YyVzhPQTY4aUN5VCtmMkgvREc4QzZlK20xeC9JSTg3OU5BMzVyd0FBNjhRV0FZZ2xUVEFzWUFDRXFlTis2bXkzd1lvQTRGK2pOb1djTlM4T2lhalFRUDd5TUZhd0lqUVJnU1VNTEkwUTduMVJBWDZSRjhZS0lJSlVvWjN5Z0MrUTJRb3NDa3RPNWx1TUhHVWFFM2VMZThWajBocXBXQXBJRWFsT2FwRzZyZFcrN3FSQUZjQ2VZaWtBNEJQVHNMaC93VVdmT2J4OVI2VThxZkE0U0tuNWc3WUNYQVNRQ1FCWU4za0EvLzFOMWYvazZTLzBZLzFvQnI3NEdYeHgrMk5mMHUrLzdndnFDL0x6ejBFZjlPUkJxam4xUGdMb1pROGIrMVowYzhnTi9sLzJEV2ZObWZLcFgxMDM3ejJMeG4zbHRCWFRiRTVaOElQdmZHL0dKb1NEeTQ2QU14WTJEZ0VoRVRFSkdTVU1Ub1dncGtjeE1ESjcyNFIzL2VIMThTQ0NTNElreVhReVpNcVNyMENoSXNVTWF0U3AxNkJKTXlNVE00dE9iL25OVzM3eXZ2LzUyT2MrOFlYZi9Uc3UzTExNZVQ5YmRYdDJjTmV2WHZMeWFQakZEVStOZ1JjTnVPQjFyM25ETEJJR1J5TlFHRHhPeWptb1ZJT0xoNitVR0F3QWtvUDh3Sk9PaGhiSkJOVXZocFVOTFpxRFU2SjBLVktseWJPYlhnNnRFaFZLbGFsUzdsdVYyclZvMWNhcVZnZHZuYU1RQ2N1V1hISFY1Y2k0V1VRbVVtVTBNTUFtdGdRc0JTenRGM1JiQkJld0ZJQXc1bDQxaWpjYkJtUXA2eTNBRU50ODJkQWt3anhuejdQNzhWVVVEQi9WbXVBZCt4NTZjUCsrdlh2R1JrZUdoMVlzWDdaMHllakk4T0tiRnkxY01EUTRNSC9lM0RteisvdDZlN3E3T2p2YTIzS3RMZGxNT3BWc2JtcmNnV0EwN1BjZWZlVGhoN3FkZHF2WnVQK3VkRzIxbHNUQVArZno2ZHIxbW9wKzBMSjFURWdnUzZDdXZDNW95QWl1YjAxM1lQTUxiWXpUYk9EQVRYNVlFaVl5Y3BVNUlWY1BmSkRsSitvT3Vkc3ZMT1V5Q0hBMGVwU2hSZDRkdUg0S2dFcE1FT1daR2I1RUZjTWpWSmtCVUJVQlJaa0EyWktOUnNBTjErMTB4Szh0aTVMdnU5Q1FPY1p3eG9idFZKWVNOWVNGSTMvZXp3aUxKZFFFbFZBVnFiRmZWajdHRllLVXdpTDJNOWNTZGdObThMSGNzQUlsdjN0K3BUemlrZ2pTOExobnBSQTR5RHBiTzdCY2VraExJUnR5cnNvM2hPRmJpVTI5RmdtS1k1SjgyeFJkOHF5bHNGV2tFSC9iYW44bG5EdjNaeTVlNERWR2laM09RUkRCRDQ2NFhuV1Rtb0ZEUjUydVhKa3psZnlDUk4wakZVTGVxWlZMTlFFWG1WRWxEb3RaTk9maXpRNFJMYmkwSzNWZlFpdU9LT0VTTUZUdjEzVHZpNkNWeVU3V3hNbUtXM1VidERtbkkxN3lYM0hjbndqZ29mb1U0bWFTVWxMbklQb2Qwdzh5djY2b1dJTWRTaUdQVXYydGdtQTRFZGExMEZybnRRbS9lbHRoZnd1aEFIV0tzK0pzLzN6cXRUeFNmY1pkV3ZNQmtFa28yT1dkNWg4VnhrbDF3UTB0V3FmWHhqbmJYVHdEdzVvbVdaNXFkdkhJRGJLWXh5Zzk3MHBKdnpBejhuMzVPTFJrZlNiZERUcFpnTk05bFFKbTJpVTMvSDBuZ3h2SDI5ZEFlWTJRRFF2eFo0elNocFFiaEFqQm13VmJJN0Y3SXZKN2tpTjFGSkdXTnVBbjB6TUV5UmwwaDJOMTdKQ0tpZ0NQS2Z5OW5ITk90enduSXp3bWd1dlpaL1RNQmNRbEhBZnc1RXhIRHNYR3VGdVNlbzN5Q0puWlJiM1c3VWYzYU5aNzNFWUs3a09TbFZKc3dZWXlKQ3RjR00xR3JqOThjbkhoa0ZtdTdQZE93bjFXelIwaHhUblJVOGFCSm14cUg5d1FJSWMvZlVXQkhqOHFySVNqYk8yaFBXN2xSSWFvREpwS3A2V3JWSGIwb2w1TG5LTHlGajJUSGdteTk2QXBaNi9scTFpTlBZOHZ3REt6NWdzK0UvQ1pJQ1B3Y2FjcWNuUmlyMVJ6UHNuQ2dRVmFnNVVNcktHSjZ5NCt5UFlaSTd5aktUSktTVU40b1VUN0dUZGl4TzBEa2ZjVFVkbWthQnpxUGJpNVNpS2ZKYUpEREtZMVpsMTJ1MVJBT2t3U3A3ekhuNlFrYWlwTkxyNkUwcEhnbUlRME8zeEJuV1N5WTIwY3VIMnpXWXhOUTN3Mm1Gd1A4eGs1Y0tlRHNkVWFrS2xMSE5KRzhzNXh6eWhOdHRFQmlSRE5Rc2NDbDJ2MlpBbjFDaXR4TUVqTE13RzlwMWREdGRxaXdKVE5DZkxTcVJTMEF0VnVxUVBJc1FDUlpJbTh4NjZJTndwVENNSkMydllIck5NV013NVR4SjRWaTRIZ1JSb2tpZ0ZLUFRwbjQ1SllneHFoMGJvcWd1SFA2SWdrUVRLVlBwOUJtQ3R5U09KZDZieUUwbFExZG5rdGxjaUdVbXBRTzl0Qm42QUJSQnZZYmgvb1hhcG5DQzc1R0dJeGw4VytaWk9qb0hVaHU3TkMyNVVKb0xkb3ZDMVZvQWkyRkFYcCtNNE4xRHlBelVVamVTdjV3RzdaYmY5RWNUNmpNYnNKMUJwWS9KdG9sN04wanBRaGdMaGNZZlllVVoyQlhxR1VIODVROFJSdHoyZlFkbnpubGxCMThkQ0RNM0JNMFJWbUxYR1BGVlJqRWRRaExQOURpSnZwTnpvVUF2ZWc5WkFMZklqVFZiNGV0NXZQTTlBVVZDMTFKWUJNeUVwSm9MYXdIVnMzQTBDTkQwY2cyL3huWEpOK0lKVzRBS2YxR1NVYTNWQmN1TXJYbFVZVHVnWm9PelBmV0tSdWM4cVlNbWxPTUt3bDd4MGtLdHN3bGYyWlJzcmoxaGcyeXpxQmFQbEFhTWxrUkM3ekc0V2FIYzhBQnJseTBtRFZnUGhLZzYwS0lHc2xuMUZGUUdvQkhZMVRHdjlLZ0pwM1ZvbzNPQkl1QTQ4NW9yaDBjME5HMkxYNnlTQTlzR2NCYW4yUWhvYmduaUo2RmV0dUtTSFhMcDVlY04xRmkxbzNNZ01tS2R3MElyRmhqODFLaVVMRHZSSkRJNUtTVWxLQUZJS3hWekN1Z1V4WHBHZ1pmQWdQRUU5ME5lekt6cHh2SGJQVFZxMmRPYXE4NDJFTjl1eVR6SzJGWXQrV2RRWkRlNFViZUIxOHN3dmxRVUNpRnJiTCt5QzdXcWx6Wk9VYjJWcFlRWnUxbVBVa1QyWHk3MjZOajBncFVtb0VXSWVyL0ZKa2drZ2JBQUw0RGgvMGxvNUpEQk1DN2tnMER0elBvZ0YwSzdMV0xYUjA2UEVOMG9vSEgxbHVlSmtRRFBJV1U2TVpPNkxhMnNndW5GNTA4QzJsWUdaUGxjeDJYSjF0dVhGYnJlNTFDSVVXU2hiNGZvajZMZ0djbWxnK1VDaVNpeGNIOXJKNlRUSmRBQzI0QXBHYnNhNWhhL05JcitoOUllYVhJQ2ladThDNEpMeldUN2dLWVQ3NjM5K0FBakxscHBkWEFMYm10L3pjZFo4bmZJL3N3WE5iWmR3OW1SMVNPN0lmZ1pLQy80TUN3cEN3NXNEMWo0MHdJdWJkdHBCTmNzVkhtdVVQdmhha3N4TTlGOEJMa3NRMzZNL0JPSkFRdDhUQkJTVWJTb2p3SzMyRVliZVFyenVZR2E5bldGaE9LVGxRQnc5Q0ZqOWpURzRKM05nRHZldUFnMVVPaGI0S0FwOXBIZ2FNSktiMFNsb0w3RG9kSHNManB0WGhrdk9hYW9lMENIakRVNnRrS0NCNDJnWkp6UkRjUG8yeE5lSnJaRHhjWGVWM1YyOEp3azBISmhVMDhMdEdEUU1xS09QM1RHb0FJNlluYkVrUndEUmszTzRraTYxSW5xVDgxMnhLYmlpb0JNR0U1RExwTUtyaU9wb3ZGTHRiSWU5eHFNcS9TVFlzeTBaUUY1eWFaYXZwL2ErSDd1YkRucFNzaUJ3SkZhZ0JNaTd3VldjN1VIcWxtdzNmY0x2dm1uVlJTRllSUUVuZ3huSHZ1eDhRMUNWN0FJQXVBSURkQUgxQStMd2crZ0hnUDRDOVFMZ0JBTmFldk9Ud29xTUhVb05nbVZtRXlESTdMcnhMSERYWEVrN1pBTUk5ek9iR3lDR0RiazZHNVVnblRwUGMzK2paUU1qWUdVeXVOWGcrTS9UaWJJMmNCeGdKd2tiMGJnaTRmWmY1QUJDV1Q3QkRTTThZZVMvSjhubzRJc3hRWWs1MXdaS200NENqdzZwVGZRalhqVUx2OWVqUE9WS0ozUGhTMmlJZnVsQUs2c01MdXpZNU9uL2JIemhaRE4yR2FQaDQ2NlpMVVVaRW1XSjNYUkcrOEErdjVZT09sRklNUkZCNCtMald5dVN1U09lcDNxclBXck5Cb1J2R0RXYmdxY3U5NzE1a1h6MkJFTUZVWlhmaHZMOVVEL091bTY0d3o4MUlrc1NYdlp1SU9xY1lSQ3B0K0RVaWdzdUUzUTdidmc4ejlxRXpmOG1mZUhGbjU1c0pSVXVMWXhRM2ZNSFp1Tzd2aGs4TTA5MVF4TEJaMVNlMmlRTlYwZGpFdUNGVGJueWplYXFOV3REVU9icUplSnNCdW5JUTdQS1dxdkhQUEZ4RVhUTUtSamZBRGMrTTliNzVXaXRLZU4yVFR3UE1iMFBBOXEyRlVVR1NhTGhzbGpEQVVBTU1MZEtZUUhWamN3cGdZS293YVVRQzE2cnJoeEJEUlUvYVpnYkVvVXMrQTEwVHhrc25rU0xqWmF5eVJhK1BoS0tOakJUOExvU3FycUJHaXFHU1JpRjVUQkM3aDUzQ2lvZUY0V0ZNVjF6SzVqRFBvYmpIZ1A1YTlzQkREMWlPODRXY0w5NENvNUVkY0lrSGxOZkp0Zm1tQUV0K0FwMUphdHc3djVMeGJTVTNtZUtDV3MxM2NvZFFVWWxKVnYrOHRtdXJBR29FMW5wTWhaZXhUTG9QTDBrZzdVZXkyTUxFdXZNMHk0NUtsd0dsV3hBaG5IZk5qWmFXTmNNNnJKYk1pbWkwK3N6djlCQnFPdXRmUFZFakhqSWJOZDVwYWFObWJIM0ZMSnZpMXRsT3hOc290ZGlPd1Q5bmVQTzcrZVNHRkZUejBUYWQ5WWRtQS9wSjhxRmE1Z3NmYW9pc3c2MUFudDhPdmorMjQyV0szUlZyK2N5T0NHVFhUWjdacTN5SEpRTFIrcWZ1U2JnUGw0VW9Vbm5GTXFsdUg5QVA4UmlPMWthbHN4ZWVIWG5rdU5JZTkrNjA2emloMXM4T0s4NmVrTXI2cXNCczhydVVxNnhGSDBnVWZWc09ZYW4zV1N0QVJmN0Y1MHY2d2R1S2IwWXYyYnNwMnZDd1NxRmFNQXJySUx2WVYwcXgvVHM2Y0Q5L1Iwdm1iN3ErVWo0UUpESGZMd3FhMUwyWVNhS2U2b2NXWFQ2RWgrVnd1YVJ5SHNwTHRpVU1lZnBKUlVZSXZkT3A1WUYrL01oZ0JCMnBmd0dqa0tjY2Yrd1NJK0JWek9YTEdnMWN4VzREVmY5SE9hYUhpU3MwL1IzZGZTaThoZEZ4WWg3TXdsRi9qeWh3RGFnRi9DZTJ6MGh3d0Y0WDVKYkRzRkp1QXdNME5xdGpzR01EQ1Y2R0sxOWhqVUFEYlJON3lHZGhPaDh1d0hMMzBHenF5bG1jdjdhSWc3UW9selBuTHdyYmpjTnYzNlhLYUZaejRpOFBWSGhlUTNvUXBhcUxKREkzU0RrRVhMSE1DSlRaYVBLeWZRVFVXcjg2cUhjVzZaVGU1b003dmF0TkRYa0ZsY2tVUDZHU1VRaFZXaXRGMlc3MTlmUE9aSGU3ZzhXcjdGbTI0eThoSGtUbVJnVjd2alBSWFBxNGREODBhMGFaZzQzZkJWNXRXdnZJNkFCWU9nZkd1dGk4aS9rcXhRdUxFR29HMW81ZlRtbTZuc1dacmRsdUUyYnIwTGdrZFNoN0YxTVM1cEQwRFpEdzhVaXRXS0ZtdXN4MkgyMXhEL2JtN3h4czhPSDFsaVlKU1Z3NFl1andoeFMzMEJ3MjVCN2FDYkd0Z0haVUxJbTZ1ZWF0eGV5cHJWa3ErbEZuQm1SVkFkMm9VVDVDVjZQTGtYWDRrYUtiZGdUbUZoamVzby9LakM4SW1sZ2JMeXJHSzM4UzdKanF0MUU1YUNNaVhvd2ErVVBneTNiSjU2ZG9ISWd4UFBnYndKcmRXdGxPR0o3TUNOKzA1aTZWN1VtamlqaFNtSS9lb2RYakkyV3hRSGphbWZWT1NQeW5XRHQ1OGJveTh5dkxONHE5M0pocEw1cFdCblJHNmxhYTFwRVY1bS91SUFwUk43UlhuVGpJcm1uQTJzSGtacEdjRzZ5czZaZVdYejZkOG5UVGZ0WmhRT2JhQlhtTFZNVnFaa2dOREZnRGk2WGxUWW05Y1UyV1lqcHpTU0ZBU0J0cXFzU29saVVQS1VmYkFEMStwaWJXWjV5YVl6aS9mbVdzSFJYaWNqLzlOcDBaemZpWnRKMzExMWVkZ2ZBdFg4VyttbXYyNTFkZkV3RkF0cUc4dHoyeUR6TGlEdHZhYmVyVytKcU5iaEN4dFNnck02cTRzbFRKUzQxeGFDcEJHaHBwRHJyaVFRV1Y3TmdkajRGNmhTVWptb0xTQnN0WlRkdmRmaEFZbnJCalVpem0rZ3dWdTh6cWhzV2IzeC9GKzVYRVVEVVRRWFFDeHdkSHh5NXZpNllIbnMyOFVpSmgwbjd4SVdDMzVsMnNHVlFxU0xIZjFDTjdnQ1FLa2VHZ1I4YVRXcVcvQmxmNUtDQVFnVG11TEN4TXpSampMSXNSNFFnM1ZqbzYrYXZYdG1zQ0pvWk1Pa2NiekYxS09IR0Q3Wkd5a2xjV014c2VpRHNTbVV3Q1NSYnhNK09NVllneEtnd3ZSNVpOTUNSNDFPUXVIc3p1UTErYTcrdWYzZ01lUDNHUkdYSE0wR09kYkdoZmY3eklhUkVCK094dlRoMDk4QnMzZi9EQVkzcG9EeXJRVXU2VEVIeVVoNWR0Y2ljK09DaFFGamVGK1JEejR0dnFkRDlGdE9DaUEya2ZJSHZlazJQTFJmdEFPOGR4WXU0ZTBMaXo3V0J5eSt3RHhYNlpHdXJaYWJydXpHeldvTyttQytaRmtuR3NLVHVMek5IQ0pDNUg4Z1V6RnM1M1dyQlZNZ0szSWxPQkZML0JFUVdtOWpUbWNSOFVFazBMSi9RRU1EZmdQSFRaQ3FxV0Yvb0tlZXY0VVI0cUdWVVM1enhCME5meXJRZG5UOHdmZEVhTHRwY2ozSmg0RmEvR1Q2WWM1WnVBaTJEanV3YytJYituT0k3dzZNYXFPK0N2S2EwanphZWY0RHFRb2VVSUFrZGttNXU1blBPN1ptd1R6QUE1VlVmeG91UzJHRkFJTUFoQTFTK2ZZWVZJcFBjWGlGTEZDam1nZU9Fd0FVZERJSHc2MFBncEpORDJPRlJGYndJTUVheGhwS1dXNzJYN2xtdzhPWVdPRncyZFpzbjJkTnY4SnArZkZJNFpobVQ5d1pjWmE5Z1N1QUJUcnU4aHc1azBtZUNqN1NzZTlkS2dnSlBSUmdVc2VVVkhhayt4eDhNUTFGR0RoTXFhdWxtblBMbkF0RFlBQ1M5T1c2SmV4ZTFGKzR3OXZKa3o1VXgrcWdXODVqa3h3enc1d1dBVzVtSFp5ZnpPUmJOTXpDT2M1amRWcGhac1Vwc2UrcEdnUnB4bVo0K1o4OWk5cE8zeHhoZzVSaCsvNGJVQ2pFcGg2ME9QMS9HV1pyV29yaTdhWld1UWkrTFpKd1lwMGJOTWVmWmh3eDQ5OWluNkZKY0FLNERtQUdUSWlGV0p4RFR6d2xIZnpmemF2UVlkNHlZTXlEU1lQQ0xObUpDenVGRmJwbzVFdWlpUVpKbVFsckl6a0V4QkdtS3AyTFRqaWtpUHNLZlB2RjJKZEQ0djFFL3MyZTI2c3hnQ3J1Q0I2TXlaTGJzSVAyVGQ5dW5NN3Jzc3RQMkg2RkJnVWxPQjYwQy96WTRxM1F5MHBybmNBUzdKWk04MTJ5WWRKWkw0NGdJRE51NDYyWVJhVHp5NUhLcTdManhqRk9jYnhhWFpwQjByYlpiVVBUT2IvN3F4a2ZUUE9nWi9kS0tSZ0d6N2JmSXNvUTBEeHYzejk4M0xONFlvdm9hYm1OWjJuak9LSG5aOXNSZFRHakpxeElPWU1pZG5Kd1JaRHBrVDIycHBrZElVTlhGU0JoWEtIR3VCaCtobDMrajViU3IyWE1PN1NCM1ZLYVgyQmpyT01tMTRxK1JzT0dCSHN3WUZOcitrWUx6cUFNMDNuakI5OUdqcWprYUR4TWZPYU5yVzZFOVZNbEJpbFRWeGNXUmlBSmV2L1ArVDRhNE5iWXFFc2tkc1M0YTRyVktMS1FKTkJKUUZiU3JmanRCbU1vRVVLU3ZqZkFsQWxZVGpTMFJoMU5IVXRNV0hXNEZuMzBZVTBJNEk5QVBVOXJ3dHVOK2JlbmxTY3RpRVRSWW00ZzRqN3Q0QUpKR29jZW9rT1JnUU04ejBmSDlOTExhU1FSRThXY0M0RmZrYXNDYlpoWDZrNHNTYkdYTk5MZEl2bVFIT0JHb0dWNHRnTkswczkzeGZBdnJpN2VtTUFoYVVnY0dJeXlmZmVYU3BiSGc5L2Q4bTk1dTgvdCtUdTcvdCs3YTRUeC9zby9lNU5Qd3pzcHZLUnJOVGoxenAvay9iL3pYMm9FLy8vMlNXZStOcXZnbVJkVTBhS2p3Ukl2MTZwRTVGVWVuemIzbzc1QWpnSEVPa0lGOStHWEk5ZkVOWUtIOWNSa1B5cVExR2hQWFMrTExHbm1YMmVHNTlrNVRadXlyRlhNOURtVDdLbDRMbW1SellZTGk1UjJmRGtzS0liZkM1cmt4Z0FEYjZSMnVUZmVvMS9KYUpQNFoydFFidjc1aWJ1Rzl2UWErb00rWGF1aUthSFpzOTFySXlRVytyQm1Jb2d2NFlFemgzMTlmZHQ2ZWdyODY1ZFdWNTY0ckorSlNLK0c3aVUrSWViai9lTHhmSTloRlhPdkV4Y1ZkTkM5NVN4eDBwOUkvYVV6MmFWWXhYdmFxNWE5amltNzJtU2Nic0F6MkxhME9PYnIwdkNROVlIZGhBcExsWGEvV011b3crYy8rcVZ2MER5cU1wWExKbWZFTFg4RWFEYnUxeHYrRVd0SkJ2b29UMGEra1cyT2xtNDJZM0FrUm1EUVlYNlByalpXdjkycEprVUJOaVg2Z28yZExoZThZakVRTzF3eXFjdi9QMmoydWk1SDJQeXl0T2QzSk9BTTd1MUUyMi9GcW5mVVJyZHZiMDRpN29YNE5EcnlmSkxSb3VESTdhbXJ2VnE5dys3YXAwMTRqRkZ4cXhOL2VxVjdyODJhbWFjNzEyNVVDd3VVZFg2K2lsQWlsa3ZzV3VHQWhWcW8yTytWT0srZFdDZlFjWjdTcUMrT3E5L3JyTVBJTXp1TVNhN0tHMkZqTmdpTGNrMy8rbzVWdEROMUZ4RGpScHNpeE0zalp3eXdTa0NzSXJ4QkdsbWV4S091eVhTcXdYMUl3V2pLblVhTlNyeHY3bXpxTnVUbFVVVlpxMDNjbGErdy9MZEJPNlc4NXNVYnRJS0lZVktMNkg3SGhXVXJPcjRDRnFaUER4bSsvV2g1UlBIcVg0TFJOeUlnalBGMGVVbERJVHRIT2VxcmJ1bi9WVGlmVUt3V2lobUlwQW8xNE4vcC9nU3F6ZzdsdWowcjdXS0tONk9DUHhsNFhMQjFCYndLRUd2WXdxeXpVYk83bk5xdnJIbTd0b2ZxQk0wZExuZHF1dmRFTEI4bUI1bjF6UFdPamE1SkFxU0VRclhkQ0gzUERld24yaCt3b0phL1dTd3NZaEs5TWpXc2wwNjdvdDNBRkRzbFhuODdkU2hpUm52dm1hNkJPdjhuUU9tSFVRVFJ3dlhXOS9ENnJRY1MwMlhqMzNEYkkvdnorZlhJYnVTcFZ2VnF2SDFYZk52WHV1bWhnM1ZteStyUWh5alY5eVhuUmEyYjJsTGRhL2pIOGJiYVV0N042YTRQaWxUWmMzbWJsakpib3l6b3Zjb3U4dXovdVBJTkR6ODg0Uk9qNndXMjEwdHlPMG9yRlVvUFhYTlFiazlaSlhHVmtyb0c2Wk15OVhVUExhMHo2clNncWxnWEtsYlZCYnE0MHFjWDkzL3QwUGNadnNrVkpsdE0xT3liaHZLa3l0S09ZTS91VjBzVmdUVWVJQkZXRmcydVVPMERmekY5YldCWHRqRGp2U0lIbFYyODJrbkJsTC9iLzlOanE0d00rTUJndG5FUmVENWx6V1lEUzJHcTB2LzBDYm02UmExM3dINUEvcmt0eWZMZTNZMnM4cTlyeGIvS3VyR0lqbUhIcFEvc2E5RiszRzFqUmxObVlvUXc1WDA4WDJmdnJUUG1LU1pEeGRqTXZVcExKSHBEa2RCYmN4d1JUNkJ4R0NCc1F4MUtydFNUbXNlQUNaQngyd2tWM2pmTFRZMElKNmdraTdLZVFjWHVnTCt1YlFqNVhQYnREb3pCbXpvY3RSYSt6TjJreVF1d1liS1gzbmNvTzBXbGtRc0kvT0NYcmNmYjdQR0hKZnlmNFRQdjhPVmkydHNKeWJZemNiTXJnckJPWEdKUHUvT2htQkVKVWZqZ25pR0M2Sjd3Z0N1R0M4eHlWUkZOa1VuZDVBVnFIM0xIQXk4MXdrMHVSeUpXR2RiOGo3MklDMGxjN05iMnNnZk0yNmVVTzJZZmJ3KzFtS1NtWDBKbFBXWkd3MVVZYjZER2t5WlNsRGVzTnQxYlVYbDBaNW82RWZlNTBBV214c1FkMUJwTU1ZZEE0djlQdURRd0hYaUg5NkNiNXNNZWZTQm9NaFo4U2FNL3EvOUM2YkxDNU5HWTBwS2doWk8vMzJxVDBWVUFZcUhXREdxVmFKaDhUVkg5N04wUm5pa2FwZHlsMm5CSklaVkJxancxQ3JqZ0xhNldBelpuQjNlWUVob3NyTDVBWUlaMmEyY3hybmJML1dSaVVSZmRpMDRNeHMyNlRzRzFPbFl2L1BINGNBaFRvZ0orbWF1RUlsaWUwSUFySkxKTkRtYkhNb0UwcXIvNmlMbkNTajE0ZDhOSDVxYVZXOVFSQXRJb3UweTdOa3R1eEVYT0xVR2M2azIyRDkvVGMycy9qZm5SQWhKSVNoakF1KzZXMjE0RDFRTWZFQmU4bmdJK1FrZWNPbU5ILzcrU21kTVBHZGJpRTB5YXRndjdOdkdyOEtCYkN5SUFsMDJsb2NkRWU2MnV2Y2E3dXMyZGN1eWZLNXlDTDFzdkplZDYyekxyd1M4blI3bmRpaDJSV05CdmhTdDdvcFc0czNLR3Y5SjRJNG44ZlNLQ1B1WHFOQWVhTlJVQ1F2Tm1hVlRCQnVOeGpoTm5jd2l4b01HZFJ6cm04ekd1RDJ6U256WjBZYnVqSldreWxyTS9UWWQ5WWRFb3ltak4zWWJiM3JWcmJ3WEJ6cG9QV0p2QjNVZWM4NzE1KzVzYlhDS1pOcGtDSzQyRGZrYzQyRXdxN1JSWDZmUG8yNW91ZjVpZEdXZXQ4OHAydGtXcUt3aEZnSldITXRSck01WjV5MS82N1QzQ1JSNjFzeFg0elV1Nk1wRkRkbnJJYnVXZ2ZWemFuZjJGdEpLY3NuLzZyTXJTbkthRXphMCtjK0hDcG0rcnovZWNnVFJOKy8vYlZXWXdwM2hhR2MzbTlkTWp0UWh4TisyQ0dJb1NwSmZIc1F3Z1hqdmFSbFAzdEhDQUswK2RPODJwaFFHamVZYzlaOXVPNHVuYXcwVSt1d3BOU09xTFJOYmRYME5EdXNtQThPVlQwbmtEVjlKVkFGNEFGUm5NOHROalRodFNGWlRtOUEybDJCTkthMzVxbjJFeWRJVDJKMExvNzdvVG5Ra3phZC8yc3hFVVNLL3hwQXJicnVsQjFnSmozNWZWR1cyME1XYVZZOVd1Um0zVkl4cmViZjR0cCs1WktPeDVzaFBWTm5KSUV1UDhjVzhZc2NTaDNwYXBKUzlyUjg4UERPTExFR09qY1hFYis1YS8rbFpzbC9oRzlPZ3Z1YnZDZC9jWDJkVGhWS0tBMlY2Z3I1Snh3SThaeEFDRm9wOVd1dWF2TnQybFF6YWFMcUZHcXZHaFRTZ2t1UjhvYitzQllPZS9WZG91OUZGTTk1NnJoUThNT1llRk5BR1hpR2ZHWlVPYnBNbU9WTHZpVDUvbU00Q2JmVHJTNDhqdGk5Zi9uSkNkY3g2UzJ6TlBuSi9MeEh0TmpycWF0ZktES1M1TTF2WjFDdmZmNzY1MlNJVnArZVFib0F2cUFNR1Y2UHI1MzRkUGFOcHM5VTNpYzlUeEtWdG4rOFNBTXpIdGxZdnZ6aHJ5M3ZGNzVYWUhub3EyWExIdjdLL0c3QmU0VTFnNGYvV1ZXL1JpSHhDNzAvejZDT2Z2N2E1enJoL3B6L0pMMUs4d2FyYU9idDFsZjY1QTlDYzErWkkzK1U3d0dtVllUSm9oNlNrajFnMTVjYzJTNTVkOC9Md3VMWVBPQWVFSUFJQk00Z0w3b1dxMkwveVRjT3JQTGU1WUxVOE03Tzd0cytmQnNtVnZKOWNOVlVFWG5xNkNuU2dEc3JFUFdSUnNEWk1Kc24rK2FGVzZLWWhyR1U1Mm9TNVJnYTV2bVZGUXVWQzhzaGVZVlpGakFaMUZ2ajlRbkhIOUxYZUt5KzlpY1RFeXk2aTVXemVodWgrK3E3MXh4N0ZsSHRYTVNFSjZaaGhlU1E1RDV6L1VVVmk1U0xYSWxkdU95K3hFZk1DNUQwc1F6cHJpWFU5UmFuL1RPSnFrRXRXSGUyektOeWVpSis1bzdpMFZWWTI2enBYd0NseGNmU1pEOUM3NTEvcGN5WU12QzE0ekxKVmV4VVJoL1g0blZxVXBVSVhMZHJzQXVwVnRWdGZ1d1pyOWdMTVBJaVJNc1ZqcTlnYUp6R3JWSkNTY2Vtd1lqZlB4QUJubFRxUUZRZGpJNUhOb2UxQzVPMDFaS2lnWVdCTFlCZExOWWsvWmRleFJvVjRTQjJmTHcxYzBYQ0l2bXpxMHFyeUZLQlNqaVRrZm9ZWnZUbzd3c3JBTUhaZnpSQTU5WWpCWlc2UDEwK3ZzcGVqK0VlQlpyWjh1ZWQwODU2eXNDNUJEZncrMWN1RW9wb3JhWlVsOVlWR25Mc2pSQlpFeFBOSmdLQjFzWm1IbDZUYUF6WThHMWVHV0ZORzZLQ2MrUDFJbzB0cTlMSEtZWFVmWncvZjhXUk5ONzNCZmg1a2tnZXFmOFpXUzJZdmtzM0VqN3BmcWk3MW01b0pNZ0dJNlZOMU9GNk1vMi9yNGx1YmxBVFJ0NnBCa0JOOTVudFhZekgyVC9Qek1WK1llaTU4NXh1VFQxWVMvODJWN2VuTlZacmEzVlM2T0dCZ0MreXNJVitZM2VLWHIzQUUvQU8wczc1bDlZWTBwU0xHcWxVQmtpb0RSL3hWRHF0NTcvQTNhaysxVGR1THVHOWFXZlNBeHFYYjQ3UmxqV3E4WUNiREFtM1lCQUdPNitIT1FwNW1ITWRwakVZdTFONEQ2TlhCUGdJdG9saEErb21oY21uUmRCUk53c2dtdVVtZis4eUZJMklFSGxZYkcxWk1RekIwTERrTndIa0U3VFc0Znp1M0MweGh6VjNiMmw2MVpBbjZCbVNLZUZhS1NNSUdLbGtlQTl4NjRxOStYTmR2bjVvbVkyV3J3ejE5ZGN5L3RtTWZ3NjAzT0tVcndqMXpxNVY5M0FrODZ5WlJxUEZsclJZY3FJNXBQRzhqejNUYkRUVldDMnR2KzhxRnFzSUk3R2haeXMrK1QxTFhUUDN5NC96eUxjYWJUN043ZEFFM2RUdGliak1venlrVm9LZUFHWTJ4cUc2czJLSWU3UkphZzNrVE9vTVpjRDhiblZFSnFZRjRWckhhNkw3aVRKcGtiTVhjMFRxT0d6S25WR2FEVTJJMW9XcHpVd2Y1QU5WWU0rZ215RTA3Z1JNTWgwV0lzWnlVVW1oaHVuWFdaTW01ZisvSGJ2czA4bURLck9yY2E1YXNHNWlEajdhSmJZNDBYbk9zRVpjVXF3YkR2L2xmckRiVWRXcHlYcUhhdGN4YlhUVFRnYmVKNzhlWEY1bjN6eUxaUEZ2ck9EZ25oT0JwL3ZIVGFXTFdoSDZUZG44M2ZSN3N0RXkvWDV2N3NyUUsxWFh2RjJOYVlQUk5xUnFEQmk0MGYvbjZ4UWwrTDVRN1laKzQzcGtFTjlUekFDWW1vR3VjVHhTaU9jdFlvQTNKaEJaeUtYVndqdWN2Qm81R0hScTFjaUtPTC9zdWdUNENHaG0rZ3c3SzhFS3h6dlN2UDR4QjlZSm1XVTdKeTgrSXBVNkRFQTEvNjRSUGMwSU5UNjNTeU1aR3dQdjM4ZVBzNjRDN0ZjTGF4dTBxYzZxNnQwUTZWRUNjRUxKY0tWYzJndUNJSTJxbFo5K3Uvbloxd2NsR0NOb2t3REh4cjRlUnFTSHZYenUxT3lmcEgvL3o3OWhCc3l6VDI5OWJWVTRkaGwxaVljUjVFbXZCTk5FbE5JMUFsb3ExekVVSmxGNlJOTE4wd0Q4OExmdjdwMCtDYjRPYkplcTJYTld3MXU5b0FvTklwL21KWHdwSy96bWg5MzVQZ1FQWlJhTlJOSk5QcFVmdk9mZU9ObGRoRkFvMmdxQVc4VkNRZGxXRjI3M0RaRDZhWk55Vm02TzdGbGZEYXJ5aXJ2RThtZlEzeTVMcEhmUkhBQzRlSmRFOHV2TXJUWGFHcVpESk9yVTgyc2FGd2pFWGZEcGp6Z2xVNGcvZFFNNEo2YTA0anovMVVMY2orVGYvTkZUaU5XWHl1djlIVUF3M0F2ZUJTTUgvQ0R1eXpTSFI5TUxmUStCVzhzRVF0RTJFRmdtRkFxSnBkWGZoL1N5ODNXT2V5ZTVMRmlIZ0tFcEozaGwvN1dCYjRGMXJsNU9Xd1hJUGpLWkJ4MXhvWEMxODl3ZHZ4L2l6dUZkWGpxQ1BJMVBWRjhDT0s5Nmo0ZE1kamtCZEtyaXRTSFU3bmdKM2QvM2Y3ei9KMWs4RXpUM3p4U05CYXBoK2I2eTFUVzByRnFNS29kYysxUzFGSDB5THFEQ0F2RHB2TGcvYlVFcXRmRmZwNnB4cHRsTCtLQ0RUc0IxMXgySmw0bzRMMXl2S2NtOVV1TVZZTWN2NlpRY2t1OVdPdXVPc2t1cmIrNGNQcFZQbnQvMTRac2JTQ2RPQmVVWTVnTzNBVWU2MFNMdncrQlNzYXBheXJlRUowcHNaZi8zV2hPZkZIem83b04renp6di8zbDhqTVZwcnN5OHdFbFdaU3FPNklSTWR1WGtUNDlJcFdvS3FDNitxMEd2Y1FrMUhzYWxrVHd4ZHNONzZ2aEhySXZBUDJZUlhaTGlOTDhySHNYZkxKbFMzTVd3dHpIY3ZEY2czK2ZtYm05VDl2NWJIMzljM0RqK3pMamwyZkVTMTZWdXZMdW9vSkRYMDhQajlDem1jVy91NWZCNnU0dGNoeHV4UnZSenl4VnQ4YkpvVmJPdW1SVXRZeHJ4eG5ETXcyRXp2TngzNTNUbnlPOTZkRDNzVy84bCs1eldiSjNzS1YzODJYTHl5dzNLVzNSZjRQb3ZQazIzTXFSY292dHl2WHluNWlOYys5R25pOERDeVdzQzlpa2pITlRlU3pNZmZGTmY3Y3djQ3ZFZWZOWkxlOGdsaG1GRzRQaWI0anROQ1JFS3VibnpKVjQxdW1tRC84Rk1XeitGdnRHQmQzQzBwdkpkMDRjelJUV2ErNWh4RVpkQTh4ZkZjNXJqSXV4ZEEreDR6N0xjeTgvMkNBNnBEZ0dIOEVQbG5wckRxc096dkljYjhVWkZYcTVtTjF3ZDVTTGpuNCtiUHhzdmNhcUlOVVJSby96VzJUYTlwWGpkdjlmM0ZrdU5XS3pvendxZ3FyeFNVWGFtZVFhWHBTeU1ZV1c2bDdCWW9aTEZuZUg3cjB3aG02b0NLbTdNaUdGR2FmSDZmMjdzS1dhWHBlVWwzUmoxQW9XVk5HT0dGd3hZZDBsSlFMSW4vcnF4dFRPbVNzSmQzQjUxaEJtenBSb1AyVmJJVmhSOW1yUkxWOWhYM050b1RURmpFVFduQituQ2s3bE9VMnZzOVNMWFplSWlrVHFmYUphZXZ3SkZ4YmxEcXZkM3ZyOURkVzcvKzZKRkFQci92MDdyMlE2alFmVFFlNkx6V1BQQmpnK3VkLzRRaEh3ZE52VWZkS1BzdG14WnRpcXJ5N0t5Z2E4WXh5c29iVjlHcXR0ajRDdGd0Yk9Hdml2cnFNN29NNnlPc2x0NVpaaC9rc3FxaHdmQUJyVTlKRXRyM0tiRmZSRlA0YzJTbTRQNTdmU3VxV1ZSN04vWFJTNXVjR25wcng1VHZRQ2UvOFVvUmVUcUhNakxEOFlyL3VhRzVIc251eDZSQVk5MmVieFBlTDNUelJLSldlNzNEdnM5SFk4Q3dPNE9yM3ZZNjJtbnBlYnBiczhkbXM4VXNYRVlub0NjY2dWRWo4UFFWNUNyQktyVUxJSUtsdTQ2ZTJjQnlJT1c2eVpiQ3JaaC9UOTFRNzY2UWRUcWNKV2JPaW82WDBKKzFGOWQzSUdvTzNRa0IxVWhJckxOdEpUMS9kZi82dGQ5UC9uOTA2K1hGY2twQndQbU9vVE82SFUrWEdjSWpId095TFJESHFXbkVDMHcrdWZKMUpLZ2dwRXdjalVSanVFYWZkYjB5ZjlMSWxvVVhNQ0R3TDhWTG5GWUM4VFU3cVZWK2lyUnJ5L3hXUytOTGQwMVJ5QkNVVEd2OTJiNVhWMUpaUDUvTlR2Z0hVZDFSN2ZEMjRXZkRpQ3BNMjNtMTNOeEptS3g5dWtycmxoRjd6QzZacnQ4KzFyZnRlMjRWZTRpOUhhMGFOVUoreFhMQi9XZlpmRXJ5cGN0WDdIaUh6OWw1TkxtQko3QVRIRThmdkl3ZGp2R2QzK0NZQWphVGtrbDMvejN3QlZqOHZNbXp2REFWYmFzQWdLRzFPZkFqSW1KMldFUFpzRk0ySVpiNUxkc1NMKzdCTXo1d3J2TjZScXhTRlRELytXN0FpRC9Udk9JV0pyOWs4dDU1WGgrMWFYMlU2cW5seE16RzJhUWNMdnpHWGFmdDBvT2NGV3ZFVjJacVFyQnREVU80RExLdkQ4ZkppVXZQK2Z0aEFma2lnR1FpbE5BanRCVVlxWDQvNmVGa3MrdUMwWEh6cWRLVzA3eU5rSlR6bnUyKy9SRzZESGdlbGFibTN6OWJVZDVYenE0MnRqWlk5cFNYeGtzZC83bWxzdG1IdkcrTzZYVWUySUJNemxTejhWeFQ4VUZraDJlUXlKKzN0Zi9HMkpDbGVIc2J6UDkwQmJSbkNhdTlBbXVjNlpQR0NSWHBIUERsTmM5U21ZejFQS1FuMXllYmgyaHZNcFF0ZmJJd3JwcU5MVEcxTmxsMmh4dnNHM3FhVjlMYmF3NStkYkdhdlFwTjFzSE95dTJ3SkxmNVZLK1VPbnBIVDJvb3h2NHFNb2RWV2dKSDdCTmdaSGVPdnRmZC9zdEtJTnJjblZTek54Q3VwUFFrQVAzNHlzVG5RTm10N1ZiWmErM1VOcFlnajVaSGpCc2tLSzBRUXR0enhkWFhweDhkY09EcnRKdkIzWXRYMzlHNmYxVFpZL2JWZlpFL29pSjdzVURMbHQ5dC9LWkRjMTVyL2RrZXVNYjR1Q3VWNDlaRVF5a24yUllNdG05UlFOL2wzV0dBQlhrRkw2SW9IZjhuNmR2QWtoR0x5aDdiZWd2aGM0VVNDb0ljUG5lcWFlWFh2Z2d3QWVkd3Qyd0k2NDVEWG5LMTIxSGhZQnlqVkswNk5LNC80OGFMdm9YVXkydDRTcGUva1Yyei9UWVdxcWozYkEyR2pHczdXamJvN0hZT21yV29DVVNQYk4ydUNWUnNXK0VTRFhyUnZ4K2NpU1pHdFg0ZmI1UktxVWQ5bm50VkJwKzlJeDBZbkVKYlVVYUtXVk5IY1hVSzh5MW5aUjdpbzlETFB5ZlBTeVhUQ1Z4MTc0bnFsbDQ5b2tiM2F3SUxLaHVQYUxXUFhYTnV6dTkydUhFT2FKNCtlajV2YStOcUY1RHhtUTBLSHR5eGpuajA2cDVCOWE5NGYzYXA2by9NVlVhdmYweldQSkE3aEo4S1llYzVlV1RBdmhNNmtWSjhzVXppSURNdktYVWI1QitKSlc1dDlKUm1mUW9UaCt0Wm4xNG9vcDF0TEd0ZUdaN1U5TzBtYzVseWRXYkF6WVhiZHgycCtwTy9DOHpTUVZHak8vQjN0bEQ3Tzg4M0ZrMk5xVldIcHBwV3BuRWsxbi9tcFpvVjZhSmRKSG1PN085UVZKU3YwaHRhN0NVNEp0eWNiZ3QvbWxEcmY0VVo4RVBnS1VnL0NjSS9nR0RKZldON0VrZSt3U2I5VHVYTjFrbTNDQmVDN0k1bnQ0Q29EQWxtaTRRMUROOFFYZHZBVmc0MjA3eDlmZkJJcmlvL3JzL0sxeGFWNlJzOXhzN1h6a29TQzNqUXltQm9BbmMwZk1HcEJoaHByUGV0dng5cnJkWHN6bWU0UUtnc0o4WVByMGFhYnVucWdBeE1RVFFEditOUGN3eGoyT3lNNmR1LzNmbm1qL0d2MTFrUFFJQmZOQmNDd0tUdzNVZ1M1d0ZyQUFkUnhWd1JnVzhxUUl1aDF0SEtsT2tyOXJZeTE4ZmFvd2lXMnNnNjdZR0wxakpaTUpVd29jcTRUdVZ5QjIvN1FLSzdYUWJvUEd3QnFMV1FEN1dRTDdYUUg2ellRMElJMzdvNisyZ2FBSDcxMjNkMzdjL1BEZGNLMElBaC91YkVYSzNDV3dIcDJFeVBPeWJIOXJZbWYwQjJQc2hBUE1zU0habWNldjRGc2Z1eGYzOXhmMnpWLy83RDRzWGtiZ1podGw4cXdZT3FJRUgxR0NmKzhFZkw5TnFNNStHelZmMm4yLytNRWUwbVVldFpjQmUvU0hvY2tZY2NKNzRCcng2ZFJnQW9EMDRCMDcwcWNob3pZTGtXb2I2NWE1djhtZVdKbW9tQUdwd21QSWZRQmdXNU84V2FqQUh2bzFkdi95aTQ4YjdiZndUUFozc3hBR3YvYWVvWVFBZ3ZsOUtFd0RzNlI2NDBmdjF3Ykh4UzlIK1Q5ODlyU3JOYnEzbk5MMWZIbHdBK0VSRE9JQWZoMXprd1JWSFdndVBUbUVmV0svLzNYdE43MGNlenFYYlJILy9zNkQzYjMrUXN6enNsTkprNzdkOUd4bHNUQ0hweHpJOHUrL1Q3Nzg0UXRXOHNvSDNRK2pKQkhDUjhrcjRSeUErZjZ1RE16NE1jallQOTdTaHY5SENucDhLZjNpR1VndmJnL2REdU5EeFNhSUFLTVQvMjFjWjhLRDhETDN4dVRoRmNXMmk0cDlWN2hYTFcwQlZIMXlIbDR0N1BMMi9sUXVvdXpoWDc0cndodjBha2JLbnA4OTdQTk83Rkh6am9pdVdsRk5lcytQL3NCYlAvMktuSGR6OHVtdnJQWlN4RmJMaXdWeHlEVW94cFJrM2wrLzh6TWVQaDVSMUdBY0E3c3JWKzQvcEFtSlgyNVZzaTRndkF3cXhXRFRhRUZKdXlEUTJFY25XWHFsS29wS3B1YW5SQURUQWhaTzA3WFpiS2prYmxuV3A3UjNZYUFOVFBiNHBHVGR6dVVPcWRZMVdpZThtRDNqb2NUMDZVeXdRQVVsQTIwWUJvS0psWFJBSkRNbE5rTVo3eVNvdFpFUWpRSS9FVWNsV2xkV09YVlJtQ2xlT2dyWVdWSTFCTDdtYis3MmUwZE5yc0wwQzRkWnMzb0VLaGF4dU5zbkJFYkZ4TWtTRVIrK1pqTFpIWWhKVlYzbXhveVZSYVVUMHFqb3ZyZWdjVmRSc1hqa21hRkZ0RWVKbGplUUZWUXBtVTA0UWNiQ0hqQXoxaVVJYXd2bE9Ya082TFI2a1hlb21YTW9qWlJOVjNmcXF4MzdIaDdmVWVnRFZDMStacUV3bHE2NjN6Y3k5M3E1NzQrcXVBcjB0dEJVcWYrSnRqRmlwYzBCYSt5bDVhOGNtN1l6TnJLTkErSVFGTzNwZjFmclZiZTFEU3BoTldSdG9IZUpOaGZzWFJlZXhxdnNGcVNmVTc1NkUxaXlyc25CWld4cFlhR1ltSVJLdldTN3o3T2cvN2k0Z2RtNEpEYVJjbWhqcksxTTZOL1JhY21PSmhHaGw5WTA0SEt4a2paL2NHdktDbkFydGR1d0lkSzFJUmloV3Rzdm9iNUhZV1ZhaENMNTdpWlpTOVNVcStEVEg4OTF1QUlqeWxWZW5OYTF0U2lHYkhTbjJ6WGxucDh1cWQ3bnFtUG1uQ3dYbXgyMVg4dVBIeHpnZkVJdEV5NTl0dDkrdXY3TFhkbFBveTVsNjcxbDRNQUoxbzVXb0tJRjJGKzZYWjFUdDYyTE41Z3V4V1dXbEV0TWt4UGZkdk54RnJZZ1IxMjFSbDJ2YXNvRDhlZzYzc0Y0dFE3bFFlR3hiUGVMTUNUaXFyMXdETCt2U0pmVjIrNk1YZlc5Y0VNUEswTC84N2tFaThZMnJiOVZEdCtQOUd5THY1Y0JXSjFvdTdjS2RFeFdlcjhqUDR3dkRTcyt6NkJ1UGFHS09ML0NtbGlTYTRieWlMdWcrbVJCUlJmQkFON0dTWjAyQzRYSDhlcGRXci9DQjhnYlVaVXBlU3M1eE5RRElPWVZBMUVtSWVpS1hXS1pSQTFWR1RDVHhvbU9vZ09qUURjZlgrejFybE95aG5Vd3RFUFppUURTbFNRMFhIT1Y1c2k5ZTZaM3E2OUJudEMyKzZ2UG9QdkMrNCswVmJUdDQvMS84d1hJeEc0Nm1FNHduMEhpMy9YQVFwaUxnQUZaZzBMajVLSCsxWEJySFFucGhUWjB2KzNPaklwKzZiMGdzNnVvU0U3cVZ3anUzdGVoOUo5Qk9YYy9Dd0R5Ly9hVW1GcWxGTE1tSDVsVTFSOWhSVXc0U2FJMzBxRkhXQW5tbVNscW8rYXR1RzRYc3NTMTV6ZjFTc3lsNWJaM2I0cEZYODdheUFjZG1jWit6b2VoenpvWEVkYVFTWmtvb0x2bVY0TG16dXg2dkV3VzdSVkNFdFd0M2RBVUszZkZpWjFhZGk2Vk9RWGNoNm16R3p6Mmh6amZNS1FxVGppajJ1MmFwamlUUHJhUkdKNzdhTmpUcGNkNmdQSkJXQVA5WHRhcGNXUDl4K2pMOGpkUFB6YS93cWlOdWZEQXc2M2JYS2tscm1zQWUrUVU4SmZ5ZkEydnFGK1JQM1luMTNlaGg1K3U1SHJiTVJJWXc5UEx0b1g4d09ZRzFrWGVDNGVhOVowMk0zYU1hdW56OWNueWF2WHI3TEVRUEhxK3FwaGlKSHkwSmdKZ0F5c3pvbXozVGxsWUJDZGJJdlJPY1VlTGdOWkx0TE9wRnByWDA0V0tPZ1Y1QWxpdzlleDJiTTJ3Zm5ZK25Odk1WL2l2dS9oT3p4RkhWYmxKRFdhTko2U1JsdVZHOXNWcTB4clZFWFRmVUtCdU1xNmdQUVhkVXMxSXlWdFN3Sld4dmhkK2luWFE5SUM1S2h4SExNdDRmbkpvc3V0WU10cVhBTEJ2blFGUUJtSE9XZGxWcitEVFB4bElnZDJHTXE4bGhQNDhSRFhPdUVRTVppODkrWWljU2t0Z0pJTG5tTGg0T2gwTzBlTXF6ZG85YnlvZndtTzM3dWhQckpJZGNMNzJzRTV4OHpxaW9WWW1reFZGRmE1L2JsYW8zQUtnaC9rRU9BbVB1eDViRE5PUXExYklLd1VtSmhpWUhDM0NjbVpMdmtXRlZrUTVaZWpuRTljQi9zQ0lpNGxVMGtZNmV0UlVOYVh1b1FMeXRKME5veTJvTUNnckxpSkNkUVIzREJPZit5eFVDanZMZlFGYkVlYS9UbDcyU3VOT3VwbFQrbkJ0YVdncmx5ek5jUk94c2JYL1RGZEp5LzJneFBhM29VMkdwWWJDaEwydjVIMmF5SU5XTlFML3ptS3pZcVVDc3JWMmFzcmVYUkw3L2NsNGFUNjdTTVRBeEVmSkx3aE9oTmhYT0p1L3Awd04vdkNWTXFDenhPamZONWVMUkxPQ0tJYytNcjF4ZTZmQXdiRnNXNEw0YzI3bSthdG9BZEFUYnBsL04zUkpnYkIwbmZNMjZMZnVLa1BSc0RTRUEwVk1UamREWFk3SjRmNzgrWUYvUDQrc2hWK2hjbFpUR2Z5UFRtOTB1VktQUmNCaHV0SzVDS1dZZTlwZ2E4Y3VDcVJqaGNNbzV4Tmg0UWNZNkpSM2FrNVk0MW01U1JCNFdGRlV0c2lxQVVqVVNNQlo2N1BjTUlkQk1hMmljRko3VTdqMVdzZjFPYXlHY3F6RXpDM2lBV1VhNUNqV2FjM2l2MDdDU0pSSW1HRlBiaWQzT3I1V0N3TGYyKzRKMkxzYlUyVUZoVlN3VHJGcUR6SWM0Q21CTmpKRFdsVmJUYURRYTRtWWtYcGRza3lKM2RUVWVUMXhHdGxUSUp1Rk1PR25oT2xIS2toTkVHaEp6OUJsK2pBbERNQ29EUW1xWnpCV3lVVlNJUEhWYzYyUURaZzlQSE53RlpUREVrSWtsbWdRaVlMQlFrRDRIWTlWb3JLdGFBb1NMS0FGcE5jWlVTaG13SU8yc2xSV1ROaldtVmxCOGY0UlJ2dUZleHdvcVExWmtCYXZqaHVKaTNnb2R5ZkRKS3dMekFGRHZvaGFXaERSaUo5MmpUb3duOTM2dHV3VGkzSmxZbE10d09DeXQxNXZGMWFCbEFtWkE4Mm90T2RJR0N4MFdRSm9PeDYvM1kxblpvZmZubERsbzNiL0g5cjBTSURMbXdZT3VKYzlkYWYydFdSS0FMYTNEVjlwQkdMdG1idmEzcEM0YUo2MFI2WHFiR2E3UisvZVQvZDVRcW4rbzhvZFk5V0MrcHV5VjAxaGlDSHdjbzI0VXBWRjFIUjBTbXYxNEljcVVzTkJqcFlyYVhvcEJGNUphaDZjcU9rL0phRlhtcDhsazBKYU1naENrRkJ2UURQenJGcFF1QU9Jc2FZMnY5Mll3cDEwZ05GRXBjcmRoN3RhZU1MUnRUTWt4R3lVeFNWVmdGU21YWmFOUHN4c1krSVpwOEpHa3hwT2JBRjlOZDBhVzBQUHducnI4SGpDYkJDdDdwY3JkTnkrSDI4bTZRK3BYajQ4K1VNSEtDMkZOajJRM2VmKzNhUnFIdVJEK21iLzVTZWZ3OTRNYU1MQ2ZHVlpaQ1NmNlM0K0plL1BoQitTbUsxSmZPRFU2RTFaVXE1TXQ2dldjOXphT1U5VmxrZ3ZxNUl6aGVYcUxoWTNwOWRNUDc1by8vY1hoTEdlZkhlemFLODh6SlYxZjgvNTVpNnI2OWVRZlpYRDMxbDc0cE9iamVyUFpmUmszYzRmeC9MVXhlWWd0Yk03dXcvMXFvZTl6YllucCtUeU1CN2RXMDkvQmR5ekticXRlS0hrc0dseVFVRmJLeGQ3Tk5keGRFa1pBQUJBOGlsTVBHenZSU2dHQkVEellNWG5uVUZ6UlRIVVNnTlo3VlVUNmtlQWUyNXBxZjlRWDFmODRzV0RpSTlQSEViVTRaV3RMWUxQRVQ2VjBRTm05ZWw5aTBMUTlIZTk0UXZDbHVuSUVHaVJjUm1wUG1aUXBEUW5tRjZraEFBUHh2eDkvMzMvLzk4TEgvMXRTTktJZkFNQmErdzhaNUFGOFBHLzlzNkluK2U1c0RnR2dZQUFBRU1DL0g4Z2p0NnZyLzBhOVU3N1hYMEJvS0JWQ2VvN2czWVNOdDZ2VlE2V2Q0bi93bGVxOVFsWk5abTFJenkvMnl1Y0wvQW9JUnk0RHBmdU1RMzJ3Sk1yUDZDTFBVRGZoNnVlQmxscmhSZkFiOElONVc1ZVNWY2FwTytyYVBpK3hienJmWGF6bzdPZDgvN0xZMVE2Zy81NmwwcGVaQkFxby9yNHQ0Rjh5MytoaUNHZTRua0FqMCtYV1Vna3UvbXljZlYydnhFMFpEdnE3VCthVXRoT1V6VmY5T0pBVldBbUFyeTV2d0Q0bnpTT2ZlWTJkcFV0dDIrYUFmWjZxZDBObExzYzQrNGs0SldGdmY5UVRxdnRHTGVSalpoT0M5eFo1MWNMM3NJRDlRNVVqWmR1eDJ3V3FrS3B0RkdVSUxabEhMd3JaSVQ3RlVKY2lwQkQ4ZktFOXUrOC80aTBYOHR2YnZPWUUzQkNQamJIbEhqdG1JdGt4dmlzaTJvRXVmSnkwSVFZTnpEMjZvOCtLMGJGc2w0dlkvdUlKUUhZb2VOOCtXUVE2ZHdKUFMxaUp3ayt6MkZTMnB5ZTZyYzB0YlQzQjgxTGZoMlM3aGhmVW1yRnlMcTBFb21pSWI1MytZS1ZlNzVMTWRBd0RrSnNDYy8wU0NzVHN4VStZV20vS2V1ZksrV2pjc0Y3WlpGemJoVEVqM3BuNXl4VXRENVZXRHNzdWVDdGljL0MyTWRmSTU3ekk5cjJRSHVOU2ZMMjhKeWx6NWRrN0VuSVJQMHZ0WHd4dk8yRHJNdmFyeEdKRXE1WFhMTCtMRjlSeHdlbElkaE54MGJUSHRKb1JQUktVVGlueWxaSUU0RTlYbmFVVFFEZ294QjJNQXBBblNrTks1Sjd1NFN2QnRuTy9zbWUvM3QwMEF1YkovTUhmUitrOFpFY0Z5Z01BQk5DUWZyUTJGSXdEdFRzQitoOGNnOE1CQ0l6RG9TWUhBSmJCdHdiRTNYc2M2OTIvTk9EVXJqWWxHa2c3RjlKQWtVN1hJS0JZVzRNRDNwN2R6OUhNTXJzQ0FyQXI3MEkrZm9hYzNWZVE4TFg1UklKMlJqM01HdFZyWUNWRzB0QTZLTld3b2RyZU9wVmEvbmpYVTZ5SFdKeFp1eWJKNnU2Z1U0ZDR3MTdhekVKTW9WOHI0d0QreWtya29FWjkxRlpxNUhMeDlpWG9BdzgrSERBSU0ycHFXWER3em9mWFBOd2JzZzJmUis5azZ5S0ZnTHNISmtYOFFwZm1qVmNkWW1GU2dOeGVyMk9aWWdvRURaS0I5WDFtc21SS0VubHJJRFFOUVBsQVVEWXVsU2ZHV01jeGVJZWZlcU1JNnZCQzFheHc0OTV2SWJmd0JXSHd4VlV2VUl5V2p0VHdXMVRnK2NaVERiMTlqYXJwK2ZWVkVncDVmWDdzNDBLOE5qbnFyam4wdFkyMUZkTWI3WW9waVUxeFZXS1ZQeWF4eUtjazVsUk5pRzJFYlJ2Z1Vpa29UZzkxU1hTZ2JCSmNiUzB3YTZRQnBpUnFtVTFJcGFva0tpNVdNWkdOaXJwR1N1R1VSQ1pRcFRXcWhLK0tlYXFJcXdvNThRS2FQNVhoMGRGV2thbHhjRnZZL1BXM1FycjZ3OWRjMTNhbEptMjdyaXZ0Mmx3VmhWNUZJbHBrcGFvQkVWWjVZVmF4RUZYYUJOYS90cGpmeGRaZXp1dHcrRGMrSVAvSi80eXk0TnpncmdiSXdYMEVHYlZDWmFXd2xyU1NjajZPL0UwK0lCRmgwZDBpKzQ1djM3ZG1OWlhLOVRYd0d2OE1mUGJldEN4NlhMK0FwQ2xEVy9Iak5pSys3dnJxMVNzNDIxMjhiYkcvTXZpTWM1R281SmMzS21kZFoyOG83RVU3VnJDR0JQWjROdEw4OS90bFhGMGJJWW1OSXdCQkFRPT0pIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpRdWlja3NhbmQ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQURJMEFCQUFBQUFBZFhBQUFESFRBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdsd2JuRlljaHpBR1lEOVRWRUZVSEFDRkFCRUlDb0dxSUlHR1ZndUVLQUFCTmdJa0E0aE1CQ0FGaFVJSElBd0hHMnBnUlFkaTJEZ0FhUEFaRmtXd2NRQUZtKzhUUmRrbW5VajIveWxCbXpHaGRlaGJaU0YwUjd1bzdoa1pDWkdUNmhucG9iWlRXeHk2Y09EaDBFZy85bzBGUitIQThzM0oxYjN0dzU5WG96Z2NDTndqWm10dHdDVnhYNGhMb3BFa1RhUlh0MFpJWTJJdDRqZjkyWHNDdk1STFV3ajJRbzBJa2hjeEtrWXE1aVF0Y2ZuaW1ycFowanFIdEduZ0pibC90RHF6aWlxZHF3QXpvUTBUTHg4Nk16cFg1dEk1VC96djk2OTc1cjRBb29zUkJESmZCYm1rV2dzSXRvcU5iRzJYSjlDa2VvYkhiZjN6QkJtb0dBMUk1YWd4R08xR1Rhb05FRlRNNjdJdW9uOUZYdnpmK2l1aXdRRUsvVy9haG1pYnorVmRFYlZWUjRZTitQZC9qY3pDVE83TG53V2dJcUZsNVFBbDIxWUIycDVLSkZsTDZKZjdaZUJ6ZnU0Y0ZKM3ErQU9DOFFWNjZ6b2JXd1loV3dEL1Y1c212RVhvekVtRVRXdnRLRzJUUEczaFdjcFFtOW5RT3ZSOEpGSVZnWkJkMm1iRmMrSTFmWVh2d05Ra1ppdnF5UDBlOTM4NnkxYmE5ZDN6QnFHTHF3QVgzWHB6YlRINit0Ylh6R2drQTJ1SmZReWVsZldlSlN2Z0MwSkZVRjFheE5kVFUySFRwU2o3bEpsL25lbXE3Kzl2U01rLzZKYWRHc3NxcmdHZWV0bmFOVlBMNHorZDdxeC9zZ3huRjJUNWVnSFNVV3lYN0FERFZNS3hveHowQmNodVh4aTJBc0NhdFRQeXZnT09OVE9ick9TY2NHdUNRbHpoRWJLQi92cnR6MWlySDhoc1puYTc5bkluaHkweVJFTENKeUxnV2Y4Ni8zQWdUREFBQUxwak5FZzNKTk5RWkxoc1pMb3lwRncxcGs0ZGN0aGg1S2lqeUFrbkVNSUJRcCt1Si9pbGtoaXB1Q1BIZWcrRzlscEZvUS9hK3hPS2M2SEZBeEIyenJwM296QVhhaUJ1eFZNOFZtQ2tXbVY3dHQ4M1VxbDZpNnh3eWFzd0NwVjkrY3pVNU9manJNckgvQjFiZHNTWks3bVNXL2EvdENtdktvSkVpaFlqVmlLUFByeW1LVkRrUC85ck1NTXNjeTJ3MEZMTHJMUFJEbnRkY3gwekt6TS9FNmlBcENqNkwvay9hS0EzQTI4T3lWeGFDNE9sVDVhZHVQTVBXZlpCMHZCa1J0bmNZQUdkaFN1V2JsbzI1MXJUOWVDT0NLTGdmYllHa3FCSjZWUXlhNEtUR0lIVWc1ZmhxUlNZRWpNSFJ4SUhJK2xKM0ZUenROMHBXaDdERERGUHB0b3B1TjQ0Si9BSWtnMVNlT3BjaTloUDBSVFFFaVdPd3p4TjAwWkhVK1VwUzFHRjhCWVBFRDNBQkxGMW5xTEZmQXRTSWRzNHRaUXJFSkN6OVRLdFoyVE1VVmhheEhPTFczaVlTdDBwb0VjWWdvU3g0N1ZEcWN5aGtna0ZQWUhkdk1TeDlWOSt0NzZOTFpxREIybTlZWWhtdG12NHowbDcxYURYL2hjek93UXV4cTZrMWxVQzdubW50Ry9QM1N6ektHUS9md1JVRC9jT01RaURJcFRnanh2dmIvUGJ3RTlzbEE2aWpMSVR4YmtHbHAybVhoZlUxTzVBL3lIZWFiUldJeklkV2pXWjJXMDk4UzNOSm14SVV4RDBKUzJJUXFoNy9ETE9WRlVZOUkvMDcxZHFKRnk0Z045U055UHNBcWtsSkdYUGFmZU0reGJGNXFJWWMvSUFCeG1sbTRCY0Irb1BPUnoxOUNNMm91aDJvR3RFTk4yQUpGckNWek80Tm9EM2V4V1NFS0c0c2pNRHRPVkpTZ1lMVjNvU2FMWWVlNk9yRTU5Sld0STdYcTZGTU5CNnBCYUR6bVNHN3g5UC9uY29BUUMwWU82NUFWLzhWcVI1cEM3TzBLSlJTVGlYTUhlYWp6dnE4ZkQ2VEVhdGRTZUVkQ3lKeU9QN0hTMEhOc2NqbjRFVUg3SVZ2NUI5TmNIdDZRK1F4cjVOZ0psRVlwQmJsN2lXRlRnMlN2c3ROTHBrMXdkMEVPQi9IS09QNTFvQWtLSGJrMGN4Z2FVU21FZHp2dlJFWGZYblVFcXhxR2dkeC8xcFVCbjZ5U1ViaUw4YmtJbENwT0MySEYvWTB4NXFweFRMNkxtbFVQYkZPSk1qWVFEZVlKSWNZQWh0S1ZxZnJGS0luZ21qT0k1ZXgrV2JTVUFyQ0dOd2hJRGlhS1BRVjEyZXphZEEwNENIRzg1TFltaDJnaU1Fb2hndUZDRTdXdDJSbnBaT1AwTEFtempKTkpNbDFGcVEyd2ZiVUJKYjgrZ2RmaVNHU1cxZ0MxdFowejdRVlFkZG9UU3lzalNlYnpvbGZ5b2hTdGdnQmVlTENIT0RmTXlvMkJPUzhhMTJoaWRyM1lVaFJEVlhUQUl4RTZ4d21zMERFZzFNUkZIQUd0R1pKTEU2Q3RCWmw1SjJBN3VsVFAyME1qUVh1K0ZHY1JoakNvVlh0b3daaXRoZUFpZ2Jsbk9aSVJnRENnWUtlampCUW9RNmhSaDJMSWFyR1dCN3orWWl0S0F1cUVNQWw5UURJZ0hjOVJzWWlVekFOZ01zWkdMTG9VYXhha2tWcmZEb3pLMjEwWmJLMDRacGk2Q0VCVm9zTU9BQVVWZ1Fpd1YySE1qQkR1S1VnSk9JZ3lYaEVNbnNVQ2xTYWFTeHc2VHJpT21NUlYyNFdTRy9BcjFvYjhMTjlNRmFmYkZvcU5yY2NDTnk0a2lqcUl3QkpsTndCQzhtV1ZnbEcrdE1aK3Y1NU9NVjRFaUYyS0NJYlZTc2xGb1pOcG1GdzgyWFdzd29DNTZLRCtxVXJvSXpLbW51NEdBWmVKWi9FQUJNNFFXUVJwRnFob1ZZQ1FmUGRwT2hIR2FXdXg0ZXVGaUhudTQwMHBvMU43Q1hWTW5mS2pSMllkRmlzY1dxRnF1QmROdkFhOWR5OHRFVFArNzEzTHdjRFB4dkRkMGF3KzluZXlmZ2QvWTM4Q0VMNXNKaVdBbnIrMzMvd1pLY1Fud0tqclhpTUFCcER1Q29hVWlrR0lTaENBRUZ5RUVWNUplbEZjSEJwOUxuZS9lL2E3Yk1FdzhLcFA2WlpWbVZSOFM1b2JBbVZaSldPTTV5MGo4QkFCUVlRVFVtUXlhWkdFVDF4OUhEQ1VrTUcyTTJIRU9odVg1SGpUdUJwU3BBS3dpWE9tc3FCcURBWHpRVUl3WitmT0JIdmdaaFloUEczL2pWeUl2Sk9EZEJJQzBqSzVzS25ONzZxVXhzSTVSanRBcGl2d2NtZUFRSzlGWUtHc0VTdENRUW9nNzZHNFplbXFUSlRBUlcxRDh5QlZJUUJWTUloYVp1L1ZIN2hTT0JSRktSbWpRa1Nia2dRSG9pcll6aEtGWFg3TElKb0xDNWFhbmkweGdXTGdSZ1RnbGtyT2ExV01Kd25ROVh6bGNmbUFEc2hRNEg5RW9lbnk1U29ySHJXZzl0czBwSTd2LzNzRWV3QWF6cnVDK0dDUENmeHJrVDlDWUE5QzliQTVCeFNLSzNkeDBBWUkvZXlpcW10QnVBbzB0Y051YnI4MHdsNCttNE1QajltS2FXUC9GSjF0bHRQZFV6TzRHL2hMOVdqcFROc2xWdUl5Zkk2WEpYdVZpZUV3cXQ0ZGJtZmo4QUNDSnpTZmRuNHBNbzQzS3NrWFd5c1FWcGpEOVN3bTBGOUFQQXZ3T0FOeDJ1dmNiMkM5dUFDOStFQzg5NHp6cWZHYVA3S09iaHJuTTd6MjBCQVlCRVFIOG5nTjdLOTNaMWV1VnpOUHFuN1RQSEl2TWNkZFYxaTYyejNuOU9tV1dUK1phYWFZa0x6amx2Z1d1SWhpUlFzR2EwbW90Z1lHUmlaaEVsV3F3NGRnNU9pWklrUzVGbWpmK3Q5UUFIb2tKNmIvM2diakwxMWtkZk9iUTNnQmg2Nm11OXN2NjNUdWRUb0ZDUlltVld1V2UxUy9hYjY3RGpqampodnBzUmNVdU5MUzdiN0hiVXVPdWkzLzBSRGxmYzBCQWV2Nm0xMVQvKzlxK0ZCQXhIaFNkU0N4QXVSS2d3a1ZyUTBRc2lhODJxcGJaYU9hT05CQzd4RktsaVROTmVCcmVPMnVtZ2s2NTY2YTZIbm9ZWVlLQkJQRWFiWUt4eEpobnZySW55NWNpVnA4UlVwV3dtUjAyRWpUYllhWmNkQ0EyL0VBQm9EUUJzUDlCeVFMOEZNUDhBOEo4RE53Y0FBRFoyRmJ5RWhPTVVMQ1dxb3BoSWlGRkdQNi9KU2Jibm5KZ1V4VjFEekxRQWhDSkl1RWJCbzNneWFTVUpSU05kRUxIU0h0SU0zSEhHc1NOeGZld0VuY2ZyNmNDZ01XbDdqYWFKMDBleFF0UVI5aWlHNENVdzhnU2lKbm53U2IycnNBaXBSRWxueENZTXM2Y1N5SStlMlJ4NkVxYitDckdFSG1Pb05BT0ZwSlN5TmxBVGhIVE5Qb0I5SFFPcng0ajVYa3pPZzRRT0NXbWNQalJ4VEMzVThZUG91VVU3WDd6TXZya2lXbzdkSnNablFRQUU3bm4xL3Q1ZloyUkVRbW8wd2VpdXZKa0xsZyt3Uk9rczV4UzhNOFdMbFRvRXhLUkp1TjVabHVjOVZ4bUdwM1hvaFNGWmc2MDJoMFBwZlFqZ0hITGRVOWRZR1pHVWpGOHhHUGFmcENpTkJxOVY2aTA2VDA0WVlwNG9LMTRvYzNlbHJDaVZFWURjL2oveVFTblBPdGFKbnpIQmFhaGNBMENmQUNxOFM3NVp0QWswcFRuS05BdXVNUVdRYkZpdnRuUFV4bk1MUU91MmZFbU5iMVpxNTVJTWM1UVp0bXA4VnlsUitGQllveWxYcFg3VkJEQW1kbUl0SFYyRlJ3eHEzZjR6Sm94NHQzS1pmcHNqeTh1L1ZXYlVnN1oxUjlNZ3Biako0dG00V0FETVFrNDV3RFNrVVJndHlFbXcyTUtSVFdERlpkTi9GR2FSZlpIYmE3T0xZTy91VDRpSEI0cU1jcXRIN0tWdjBicXdPWkYvdGVZK0RRNG9IVVFZaFE0T1ZRb2JUV04xUzdEQjhQWGMrenV4Nk9RM3hPMUZkbUVxQS92eWlLM3R1YUhTUmFXNDBPWTA4WlZBUFRXTVh3SzRaRU94QmhDOGZUd2FzR2h4S1N0N3lRbEJvVDUwb3J4K2tOcW9tRytxSU0xNFR5WFZoU0lEMTB1RUkyQ2N1Rk9xNTRDY1F2Tnp4L3BjZjhHb2ROWS9TM3htYVYrekpac3c3OWlsZTlGL1U4cmhQVkM0bVFsY01EcmJvRFlTNkNOYjRBS3d4cCtSRUZWUzFUSTZVTVp3NHdZV1FOUFFXNXROVG5GUGROZ3cwRk0rZHFnSGc4MjZKOHNpVmkzdW5RNFRsc2k5Z2I3RzQ1bVdMbmQvRHorL1JuYThSTEVlNTltcXByN1Nob3F0VndTSXZmbUdkVjJ2OHlwcWpVN3Y1ajZuclAxMTFwZ3NpTHhOamUxV0hCOGJNanBXSjgxZHRTMnBhbndUZ3duTjIzM1dxdzRiREpTWkdsQkpUU0RsSGVNWVpYWnRPOWZ1bFdNL2UwRE4zWnpORmJ6Zi9kczJ1WElMS2d4ZGt3TjlXRVRadTdsczVya3d3Ukt3eVZ1VjJGTTJlYWxmR1ZhaDNMVTByNTF0V2ZNNVdGSENKL1dNWVlVamhXeStjRW84ZXlXQk1YRXpXQ1ZMa3liWWpqMXZyVkpkbk9SWGV4c3JnVURMcWJhaDJvaUQ4NTdFU0dMYXZ0a1RMSlJmbU5XRThlYUcyOTBXbTVJc1hpNVRoN1d3bE84YzNMU24zZXVpN1dSNUg4eERZMTJMQ2JDeUV4Vis2eDRmM3RRd1VER3IzaHRsT2ZBRzYzMTh4a3J6bXNqYnF3WXRFVlNXOHZSOUtMZWhaN29KM29rYTVqV0xWbjlwV3Fjcm1EMlZ2R09hSjhlbitLaU9kVWJrUFhKUWZXNXhaYjdXMlJlRHRPSlRhME5iTnp3dFJKUEFaOVJ0cVNheDBxR2xMazkyZ3YxRFg1T1VRKyszWTZ1MFVLM1BQeURSYzhlSWxta1NjRVpwMHdTMnc2d2NLMytLcW5KMzR5ZU5hYnZGNS9SeURSMGo3OEh3ODVIbXpHVk9TMFdJZzlKQWVsZ080OXdOa3RJN2hBMFc5a3dKdWo5Q0VsMkdhQkw1cWtKWEptZ3NzUzZhZ05Wdjdvb0dpQWd4YWwrM3F3VFhmVGlsckNtbFZsbzhZMExNMkQvQU5oZnVpU0pyTlhWc0J4MFd0UGJrVmt2TmFIbGt3Z0ExY09RdEl5eUVVZzBPSEhsemQ5MVFXM3JsM1cwL3MzZHduZllLMGdDT1d6d1B0SUNIVm5OWDdlQmdSblJjR1FTcmppdWMxd253cVdVbDE2dlJaOVZoWFNlTUlTMGtmSkM3MjhrUGsvcjJERWRUUEk5MEdLQUptdHVSZzBwakhhRTVTL2xteTdIUUNZM2dCcWtiYmtwRGl0N0tNUHA5TGtRUVNaL1A1SXFEd1JDZVBSejdkMzYwT2dhRlRqc2VONS9ETzhtYTRsQ3hsNTFXY3BPOFRueWR1RmxtZmhmelZtdDZlY2g4TGVtOG4rZ1FLS0toZ3cyRVgrcC9EZXNpOUdBUlZnSzlrVGxPTFRrUUlhclhNYkpadGFFRDA2YjViZEk0YUorRVRYK0FpUTVKZHR1Y1ExWGFEenZERnExc0xhSmMzdHhLUTN0UUxleVVxeUtXVlEzRi9xMGRGajhZRDhrNnlkZFZGYTUrVnMrRFNHNnVDL25OOWNlbnVFTnFsakovNGNvdC9uN2YrcGlZZVlVcG8rRlpPbEZHeFJ2VjFXeTRWRVBHS0xKcFg3QUIzdUN0TEYyYm1XYUlCaU5GNmhCOTIzRy9UMm11ZHRJRTFmejY2VFV3M0FiclFyYWx3RUZoTzNaTExaSkd6V3p3endMakRzK3o4b1prODRnT3dvSFVBSEFnTHc4WGgyYUZNcjY2anM1U294a3RKWUJlVHJSalg1em5Ca2RtSTlNKy8xaHJjWWpZdGRacmdiclZUUjZjMDZvM211YUNrTlpjanJmUHNYbGlwYWpOTHdhdWZMNUVWU0tFQUhnem83RU14WUpXMC9vaUp4dU50a28wV21VL080NE5kVVd6SXVzTmtkWmZqZGZTVm8yeDhPREhINkx6VEh1ejJwd09UL09jQkVqSjFSVWpSOGI4NzVOSUVCQnVtM0J0dDZ6RW9kYjFoTWRvTWhyR0dxWFU0MkIwbTcza3lMdVJvYTU4UnhuR2lLeG1JSHd0Z05TdXZrQXF1dlIwS05Kd3YzNFllNFk5K3B2VzM1RTB0c0ZGMWd1dWpUTFUzNWZwVThEd2xBZlBuRzdIMDN6VzhYMGRKbm12Snp5WTQ1eDhsaEQ2ZzJKQVRFUjVteC9yRXQzbU56cTNPa2FVd0p2SWZHdStmcTVYZkJPSGphZnZRRDZJb3doaGI5blFheFQ2SkRmU2I4Vmt4cm1WVm5xdTVyWEk1UnE3Ukh5TUpSaU5Kbk9IdDhrbXZiZ2d6WWpnblRuNGR5ZXhjU3pPM3ZReURvSjlsV0lqdUlzUktSOGZiQUFYbXp2c2x2TXViYm92VGFtYzdLMmJSVWYySDB5UmpMdEpxZVR1eUFqZThZUWNKSkExZGNkdHp1VkNlMC9FcmhZTkl3dTBZT3pFdGViK1NsTUtPVVFzRTl1dVp1dnVRWFdiWHBYbENidXZKQVJYUHlBbXpGR2hJK3VPR01CSDdEUE8wb0RVdzFNNzhBTjNoSjZFQitxbzBZUmhJNThiQlhDSVVMSW15Z2hXVnNheXNJU1FCNTZocUIySElwWHpPek85RWxGc2R4dUJPWDBpUGhTeE5QOWVWaHlTU0lwMkV6WGthYlI3ZmZReGtlaVRENEwwRllDR0dpTnpNRGRJalhoaGR6WFB6ZVE2c0hVd0R5Z2RVc3d4K3VtS2lxNDlvNVFyeTRFSlBjaHZYMzJtSjFFWlB2THJKNnBjYVZ1bUMzcFFxWHpqMmV2WDRvcFU3dk51MmErT1YrZXJ4dklqMlVibDZBM25Sc2t4a1d3OWZOQWVqVndNSUU1UkhFU281eHIxeE5LczdjY044TnczMU1mLzl0UkFLTkRMSEQ3Y0w2NW1tZXBhb2hrblBlTFluY2IrWkdBVnMzUW1lczV5Qkd2NHhiSlI3UnVXaktJV3dRNmxmQ3RGdEhBZTBXQ29vMURDK1NCNkpzZG5wRW1QZ0IyZ1NRNkpVaThWRm9JQmhWM2toQ2hmMDJZeGo5SnZlZy9US3FUd2czZUhQTzVzVmtXRFl2R0NTYUJ1cUk3bmFBOW9OQjg3Mk5nb3VJUWJrRXJIYjg4SjJkTmpTNkpwRHJUZlY3cmg4V3J4a3I4Y0IzWmgxMktuTW1LcUhvMXBPZW5odEY0NmF6RTlMYTg3dWNSdjNKUjJ5eVE3bUlObGZkbkdqblVKZXQvRjF1amUrcU82U3c2dllTcDZEUnNpR2dKNUJjeFhWbzNSNUxWK1lWMXV1emh2aVhEK2FiMVpHTkR4MlB4NG5yYW1hY2J0cUhLb2N5djMwZXpCMjhHcmtqWGUwK3hBa0J3YVRNekxkWW1GTzlPL2cyR0llSEFTVk5yVHo0VXhySThUeEtqalZKcXJ0MVhyZEk3RE0rM0RlK0NRMWZXNS9WM1RYSGRmeG9yRXdNUFRieHJzUmFZcG5sS0hNeHhaSHMrSmNmTWI3WEdwUEJXbUxmdUNRL2ZTemV2MlBSYXVDejZBbGwvQjRFQ0V2dEZvOUJyR0VkWnBuSU9JK0xnZ241QmJxT3dTYmppLzFocUJhMzRuOWZKOUFEM1U4aWJ1YW1HR2QzVzFMdVJsTm9oem5Ma3VpUGVEMWozQ0REcDVUVk5HQStGaGRYb2FZRXlNVDBxVHgyUm53cHM4SXRCOWZISjN5YTVGZWdDbGZQMHJSbGw5ZDdDWjMzM2ovaGczRzJNdGF2TTFmQlVOQnJOMVRlRldGMG9jN2l3Q29RdkttZVNwaEJSZUh0eXcweWl3OTBuNnhwZ0NZeWttb05LR2htaDBJVlpZOEtCa08wVzFwcVlJaTlNaVRWRzk0SjJqaCtjdk9TMFJzZVFLNWdVRDhFQXFQMkNhcjlJalZodFYzc3dQVk56VEIzdndZQ2tpV0JVN3I3M040MkJBbjZOMUc5Zmw5TlgvRDVBK0ozazlSNk5VVy9OeWJxVHJWc3p3NXpmT0Q4Tm8xb3RZdlgyU2dZTlgxMERjNVlvUHVKTFVqNjZkVHRjT2wvUEViWVpQaHJpMytPKy9FOStOOWpiZWFRck9RNWdKMTd4MENKMm1Eb1lZb05CbFROV05IdXp4YS9EdWZqcnd2ckcwb2crWVliRkNiMFRCRC8zbzdpdHpON2R6WEdvZHo3ZkozNnhzRE9reU9TQTQ0TjhySFB2LytUTWFERnBKbjQzNE44NU0vbWNxK0NLb2lnaHl3ZGprbFZ6Uzk4SGc2UUdCR1Yra1NhYTFLMGx5UjVUa0RjRE4vWUpUcFIvemZielNrazVldkY3UnVkRllLSnFtSWhFaVJFaXIwN0ZFQk5hejRFS3o3ODBCTjNxSzlyT2IrNFlvMTh6NzU4bmNrZ1M2TytQZ0xIWmsrdlhlcjdJYnU4QnF0cmJzMWYzM214NTJIZXlaSngzb2lHODBYemRiQTVTLytFSjdMeEVmczJkUHo0WWdhc2Vod1JSYUxLTFRrWWdRSlhrUFJiQWgxanFYbVNyZHp2Z21mRSsyVFovZm00anR5K2RqKy9mRzgwaVIyNm4vNjUxaitiT2RFZVYzZVpMNzRRVWlzSWJScjNTSkY1VG9uV3hqZmlJR2VkM3hhY3VYWUkvWEM5WHRoWUFZa0RVWTN0MUVnVE5PUmtnRThRNFVEU2dVUWNPSEVBdWdQSjZGOXZVWlFKNG5MZFFyLys5VitHZ2E0dnNReENETlg3NTk1eU5YcE0vZld4QW5wOXcrQzZqTkluMjVVNW9zcVFHckdIWHBCTzROamJjdTZ5NWZjdkpvZHJId25wV2FGWFdEVkdGcVhmM1pXdU56N0Y5ZXZ0cnlqRzVoYVRvSFA3WHZ4Yld6YTJpRmdObFhwdUtjSHlLNnRITDVKa2l4UysxanV1bnV3bHFEMzcvVzBGM1FUY2RJTFVXMEdOZzNGYzJrcDZOS2k1bEFUbWVtb0FrSVQ1clp4WHozZmRtcCtRTm1HNlJGeHgzRzZ5ZVhpb3Baa1Z6ZmxkWXJUZlRaenhZOWdvMitnWVhtWUloUzNja3Q2RUVQZXpZMjNaSGhqRzB3UHVIdDF6c3o3WXNkR2VQdVpZbGVNTUlzS2EwbWJURnJ1bE1HeTNzbUplUkNzcGY4UHV6UTRISVJxZGFJWExoRTg2N1lnWUJkbnRYa2MzNmJVL1A0dy9rcFpUOFU5RjBNMEIwaG9Gbm9OYTB1Y1d3eEZpNTBzN1QxNXdOMHdxVFpmQjdyTFY4eW1oYnFiY09GL2phZGF2VWZOMnNoWjBHUTFwYjRONDJrZEduMGNWVEQ5MS9XTXljbjVlcUlSVC8xK2RGa2IwdlQxZ09KdVZ2ckNJZjIyVXVLcHA5MzZTRlcwcWxzcUZ1bUpQV09UQ3p3VTc0WHNLQStXQnhucUROVmtBZkFxSTNqV3FzaHluOUhNYTk5U3ZaQm1Hdy9LY0IxZWpReW9QRlk1c3UvT0VQRDcwVHlXb1EvaWZWUjNsOHFUU0F1dlRVWDRGNFNlWTBhTkZ6UUFpVlFGZzNaRDdHLzMwRUtOL3BjRXNBQlNqQlhZOWRpNzRybFhwSmM0ZFY0OGphSUJyQXk0d3pMd0lEVlp1KzNXZ2ZzdTBOcE9jWXd3M3ZYSFpRY3JSQzNOdFFzTFBHbUVNWDFBOHNIMzBZWnVnQll1anhDTHc3ZSs1TkRUZGRROGViR0IrWWc1YVgwS3Bxd0l1cFNMcjN5RDVKbkZ4VHZmYW5wNk9HMCsxK2RtRjM2SWdHc3c5QkJjUDUzbmZIUDdObjNRWlhwc3hNK0tweERObjErQXFXQjRrZGpiaWFZdnZQcVA3V1E0Sy9EakRVWjcxMy9EYkY3QkdLU0tKMDhYK0wxVFJSeXgrVlc3Mm9PdkExM0FRdXJYdTA0OXQzTjlGS1lFNFczYzZFOTZhMDF5WWR2aTc3K0RCUlh3OW1SQy83TFBHSmxrQSs3UjcyMjFjR1FmY1dveTZVS2NyZnhBdkFmQnlENmNOYWN0ZXFIQ2FlK3BDbG1MR3RHQmdtQ1NQN2pCSFIxdGQwWDk0dTM2MWJEK1lsMmdZczk5dGtvQTF1Yzg2NFBmQlRpY2FwcWV2aHFYQmZlMmJQbGkrUDFIak1aRmF1NEJHdVZNR2wyNklhS0RsSjR6NjlYUjlHeHhYSHM1MFdiTGJpOEExOFJUZUVyaDUxV1paVDFoVFRGZ3B4OFdqN1NQaXFUNnNrMk9LSDg1cjRDNjRVc0RLenFuQkdYZlVVb2FGODk2blVKbmtTdittSHZSSWlLTUJoVVFPbnp6R3ZIMHE5K2FzbVk5YXBxWnF3V2M4YUdET01FTWxnZVFxQlNoMFVhUUQyMkk3c2VmVGFya0ZnTE5uT3BBMGVIK3F3ZDZnL29kWCtWeVd3MEIxYTFtL3lMUGM1VlFaOXoxWkpPOExYYjRZb3JiZDEvV0xtZTdVRUI3QnIxMkZjRmcvWlZvMjZYSXNBOUp0aUJLZGF6bG94RlAwUVF3T0pwUVVvRWpndzkzVnNRM3B0MHJDS05vaDZuSnlYVkdjT3d3Zk1hZGNYUStVUnZILzUzNSswMGVZNEVnNS9aTCt3ZlV5MXBHSlVrblpPam5iakVtSEVZaHV3WTBwK3htNHhaTTFLMDJ3MURXY2M4YnNpbk10bWlaV055dUNCWi90bmhIWWp6L2daT3FMdXNnd0J6UVZkdFBGUVhlWUR2SGxSeGN3dHNSMkkxalI5U0tpZHZPYjJwazdEMC9raUt1T1h4M3BtRHc1RkFIUmJtWFZsWithbFN4ZSs0SFN1ZGl4ZmEvUEpZWTZFZW1vMGt0SnI2OGg1MlljR0t2c0g5RDd4OUZWN0w5Uzd3ZEt3S0J1WG1CVzdmYk10WjBCSVJ6RmxQY2IxbVk4bnRwc1gyWWdBdXMwY00wcXhSTFBXdDExS3h2ZmNqcXJnQzlhckUzbThKN2ZlSlJjUVZKQWVzODRyNnUvbWdiVW5xZHovZzBDMnVKb1Y3a2s5L0tXQ1ZMb3dXNU9SUzdsdloyai82cUNPa2V3K2Y1Mkkycnlxang0K3EyNS8vMXlUOXREby9teStTbFpsejlscjhPZGRqdUNIR2xkckRCbkVHRXduSlhCWG1kSjdYcStKS3RCUG1QUmVwZXdtVzk0Uk9HVkVZOUs0OCtyOGlFaEF6blR4Z1ZHZEU5T0swRVhuU0NGZHh2RjhhNEtUQzFOeThacTI3N0JOTGlGY0NITUQ1SGVoWXRjaEQraFo3OEZXQm9CQU4ra2hMeW15eUFJR1djbGE3TFc4MWxnaWNDUWR0ZGlhOE1QQUhka0h5SHFHM3BJdWh1ZXZNL2JpeGdQeXNaZTRSd3I0czRMY3ZIM1c1QkU4Z1YvNncxK1J3ZWpNekNSK0p2OC9HOUVXOFF6K1F3ZUl4WktDakErblg0YzZ0bjlZYWZVTmZsOFUrYzFXTWR3dlhBOGRhNlozUlJ1RHNYYWdBVnZUMFp4OVE2cGsvcXNDS1NBejgxelh0ZnRGZkVETlR3L25NYmg2UVdSWlRZNEtuNS9PRlhmZlNBai83NmJCQWRpWW9SRnA3YzJNcndYQlRadDVwRDFzbTJHSVZjRWZ3dHAyMGFkZjJpWlVYSTN3RFdsQ0FWWkk1VkxmNjZtTXdHWUF4ekN2bGlHbys3dmlMMTlZajRJS3owN1pvc01QVy9QcWYwL3JJenArbVAvTzdKeHhIMEx6VFo4ekd0R3NPM0VJVDV4NlZUclhXK0w5bGdlOVVNTFA1WmJmQ3ZPWWxHbk9pZUJwRW5SU0J4TisvZUJOZjBqYnR3RUU2QmFvelZ4VjRxV09MUTcrNmlrZmRHK0JLd3V4Q3lJK3IyYitnMk5NdGtYN1I3Y2ZWREtXaS9nQ0VrRDFjMUt5OHNMWGh2Z2VPUHZoNHFKWjZFOEdyN05UYkVGUGMydkRzVzJXOG1sanRGcDZjQ1pXb3NyeVJISzNROUR2Ujg4bTI5TmtWblh1cmlRSU9pU3NhRHArdjIxTTRmbFVjTHpZZXZCQUM5citNVnFOdm9EUkNnVkZqY3lnTlhLN0N4WUZqYi9sbzA3VnZaUXRsMG16bi9PdHYrZEoxMWR0cndIazFVQTZ0ZEN3ZXMzazBuVTJMU3hzeDdOTVNQWmV0c21hTXVrSkhvUFhkQ1I5SDZvem94R21yMldZeUpaTE9aRkFkZ3cyazlCQ3ozWDY5M09MeUdUc3kzcStlZUpKc2U5MnlhSWc2NzEvZjhlZ240UEFNeFFLMlh3MEx2ZmRKOUI3YytRZFNUUFN2bENyWjRMaC8yaHFtN3RiYVhEYnpBbGh1ZFNFbzdBZXVXbXFwenkxWEtWMXkxVkJycEtSTHFWUzVsWnFlTjlxOUJzVG1OVW9RTVdSTklJR0dJMFhreXNFU2NnVlpvN0hoWXJBMGFBbFNvd284RlZmdXkrWEZtb3JoT0VFb244dTV4c0Y1WUl3NWNpb25vTUlGaDIxWFIwc0hpdXVtRHRKZncrbm41aFNWRldMK1Y5UlUzRll5SUZKdlNHdzJwTlV5aWdYOEt1Y0RtamFPTzNCdm4wNlhzUWhiZk9hVWRQYm51U0RXbWpJa2s1MlRZVjFhTkkzaGxraFdyS0VaUGl3REdyeVBjUGI3L0l4bHo3YXBIa1RoL1lXdmZtc3NGNlM0a2hidkQzcUprUVVXWEJYbmZpQ1VVa2lKalFKbDhMWHRFOHFkSTZqRmJkRjJKN211Mjd5WGw0M3o5N0M5ZzFTTjJXd0VvK0REa09iUGVscEVIWGtkMG0zRE5Ja3VqVk5LTkY5VEllemYxcXhwcGRDSW1oZjhOd25hcnY0UC9WT01NLzN3UWN3NjRESUp1M0JuanhEd0lEVWpOM25hTW1vamV6bTZQRERjRngrT2w4TzVRdXcxOEdRbTRDOGE1aC9SU3o2UGNGVzZnQlRGMlRHVnhWUXFPbkdaSWFLR1l5YWRPQlV3V2h3cEZNNFkxTXBZQWdIWHEvQnRlTythS2JjR0lVV2dNS0t5TlNSNk5oOXV1Z1lzN0NDcUhDejB3cWdwM1lmWWJIbkVsRVpoZ1dmSlA1NDNmZCtPUzQxSU1xc3pHak02SkdtVXZ2Zzl0SHlFZ3ZDSVpUSzNXRUhBUkNMbWNpZGlSOFRCM2lRQnF6MUJxUnFXSi9EQVJFOFMxSi9VNEl4TDBFV0JnYjZJK1FMeDV4ZVB4cmRWNVNmclorRjJHRWpzVVpYVk5IZ2FETWROV2tzUU5aL0hBS2NOR21VMG52RUVCSSt6T21FMWl4eFhQbTRtMWJCSkhUK2tWSGt3bzhwWEVBa2FzWndUV0MyQUZmUlZZdzAvVVk0dExxMVlxTFNqWnl1YVI2ajV3SmI0QW0reVQzR1dWWHVjM1lnTlU4M2diYmxjOEpLc2ZValEwTDVqM3BVRmNYSUdjb0FWMEM3dytiNXFSaUpXeEJFcmtuOFp1WGV5V0FvV2ZlbWxBeGRwdkxkdy9yaHFYYnZhc0VYWThzQzFoZnlLY3BCOGI3bGJ5UDFYQWU0V3NjTHp4VU5iZDNYMjFOWTNQRUZ6d1h1THR0NVJmNWlLUFNXUUlqc0l2ci9Wcllidy9PQzdDTDh2TS9CVEhIWjU1WWFKTXBET3Q3UnRhdHBaT2R3Mm4xNURoK3RMalM4QWZ1WGpQUnpldWI5UUJ6VnZkcllKaFFFVUgybWt2MHk0OThCR3duZnZpanRvRmJVM1NkcTJYL2QwUzN0THl6U0w5MU56ODJPZ0JQZ3NhdSt5Z1QrdE9BZzUxSENmWGRHZnluR3FFUlR2YThBMnFQTDdQYTJOM0xzL25aZEFLOTl5NkNrMjU2NURMVzNVeExKUlkrMnQ5L3h1dnJQWjB0cFNXYjZ0MHJmVjByU1AwOUhXdXE2MWRieTFUUXVpRXJ4TXBKZmNwcmRERlRVUFZiTkZOenRZYWoxbCtkVzhuNXBiWHVRMHExdWFENE1ub0ZDaTM5MG51aGpmOXlEWXZ4eXlJM1NhRjEwWHgwcmxKaXc2M2Eza1U2cDFLMmR3a3Z5eFd4eXIxYzhUT2tGT1hXS0txajNiaXZJRVgySEdiYnBBWXVYRGpxcEQxc0UrbjFadG5jUkpybW1nY25pVkRPdXd2UFdTQ3V5d25uOWFZN1V2MDFETjZ4RFR0MXFsUTllN2hVdGJoTUtXcGNKRUJTRmI5ZVVZWEFKSDVucTBrdnNoRG0xRnJXVzM4bzdCMjlCbHo4NTlXeVBQQTErYmp3YXArUHhraHRkMUlLSXc5ZnpseWs3VjJrNU1ubXVWWHNtdHRVTnpySDN4dHRZSDZKcWpPS0syUStlbXYxNzVQcVEzOFQrOW02Uzd5ZlU4cThEK0J4aFRSZUhDdmpUbldrQU05MUpZMlFrYjVBR1BRcVdKcUE3Nm5sdyt3L2U5T1lCaXBpNGQya3RJZU9ST3YxQkZjVythZ0NoQTNlc2xFWFVHYmNJR0FSVGM0bmhUMTFCWjY2WFh6VEZMRk55WklUNU1MVytyeUJtb2RXMlZyRVhEUk1acVJELzJxeU1MNzJYZ1FwR0VMZk5vejcwZ3ZvN0JrQnp4V3A2ZWhBVmFjbnBldFhrTjZ4SkdkZ2lKeWhwSmg3YUNNSWdETWNwUlQ4cWlhTHZMN0dhTlUrWm40dWlscmdhM1lvTStpS3NISHFqOUd1NG5ncnBGSG9XcnZsRlFQc1BjcHhsanFPTHN2ZG1tamJyZW1zSHJhOSt1U3NHRCtvVnVwYnNPYjdGeFpZVTZzcXhSYmR4MG5XT3hra2tpdXM0dm53L0swV0NKUjV1STc1WFhUMzE0QnMrOURUbkJ4YnlSbU5HNXd3NUJnV1BVSmhuWnNsMldXM041KzNVcmRpVTBMaXF4SUM5ZkpodWZObCtXVEpxdTBMY1Nra3hYNHpGQWU1UldSTFZjUGo1VE0xTkZSdFA1YmJma2MvWWJOTlVJaUxucFRCTFRzcnNwZ0NNWngybkZha012SnVjb2lqd2FVTWFLZUw3UVF1ZWo2S08yM0pGbFFJdFV1all6Ty9TWXVFMDdmYnZJUk5HOE1uY3BvNWQzbDVsSzBqSWptZHU0OVk5Ylg2bzI2WWxaYzdQZkhmOTB2TWRtSGx3WlFUeUhETlgxR2w1azFqN2NQNC81TU5FcDQwUUp6VE0zR0xpdjBKcmZCUjR1QWZmMHFCQk1XMEtVNFZtcTJPTXFjTE1kVERldmFQaUNtYlk0d1l5VkwxZ1pOblZSc2o0SExwYUF1ZWFucTRMY0NwbFhwUktpa3ltVTZZYWM0ZXUrRUlvKzEvTjUrczlGd2k5MFFQMk5yZ0NLR3BURExES1dMYVJXNmtiUGFtTjNFWm1LUklRUXlkVWViRVMwK1hHcWRxaGJnTVNtNHVIOWhiN3dBYXFPSVYyQzRLUFV2bUlFTDFBUGZBMzRLNWxtaXhWMzZHODBLTHNiVW8xQ251ckN5QlJGN2tjRlMrOUVzWVgvelFmZjhCL2JmZFBreXpzcE1JNHFqcG5zWHJyQW83LzFxZGZuUzBUTTNBYVMyVVR2UjhlTFZ1TGVqdXdMbEhkYnduVVdYWkZWbW94aG5hTExqakNiTmZpWjJRSkpMZ2lLMjhxT3VreWx5eFp5ZXVKUDNDL3BJYlE2VEYydWhYZ2FjS1pXRmJ2Z3ozR3Z3aDVnYUdkdElDSFpkQVB3UGFDekl1amFlMWZNZE9GOTJkNFF3V0h2T1gyTEtESmxqMmk2Tmpmb2hxc2doRnV1RzloS3JhWE4wb2hWMEVPa0dhTExMek9NdnVoWEU4dlU1ZGJvY3Nab0RNbE1JVE55K1RXaTBKS0lMNURVKzAvcGQwZjBRNG02Q1hXcDhNSFFJK1Y5bmhuY3dTREtNY29RL2NoelY3OWJLYysvdnZnNS9TRndPNzkwN1BENXUvZFV5dmV2OUQyalgwWlpkQWVTUmkvdmY2cTgzV096SnhpWVdoaktIOXA2RG1LVWR0dzM1ZjRTeHF0Ykg3b2pTY1dIRnJuVytEN2xZbTFOaytIbWF5cndkUFJDdmZZbThNc2xqeG9mRWMyTXVEWDMydy9NTStpbHV2enJEWndUY2VsdHVwOXVodDBHbDQ4ZCtRbkhXMDVVc2p6WGEvbm4yYk5zODNUOUVIWm91OG50NDhzRk9QczE3ODkzQ2JYYjJzTkxXVEdOanBVNEFNT1RyTGhXeTQ1UFhxdVZScXhPVlFUV1NHTldoeXI4eUI1NDhvSldZQVBaWGNEaHpjS085Mys4QitPNVI4eEtxTjVjbW95a0ZDbzFyaFlGWUsyb2hHZXpSdFFWakc2cDhqbkFPbFVwaitQcWJjUy9ubElDTldRNEM3QkVjUDFPYjkvWW5jNnRhNEkzTG5KSVZrYjdObUhkV0tqMndyOVp6S1RpNzVzWEsxTkRlNXhkWTRvcHo4ckUvUWVuSC9jc1dYWXFGZG1iY1FqWDJBZml0cEJFR3BHN2ZQSXV2ZkNyS3hWYXY5WVFZbVdramc0M3FBTFRmSmR0ektvVXhueEUvM2ZST20vUmpLaTd1ekFuT2FnZ1NGblhucGJySUhDMkxOZVdvdkZsMnBacXJnbi81S0xrc2pFaUlNTmkvSWhFby9SRlpaZy9heFlES1MvWUpVenJVN3RnaDl1RG03anRwQ0ZJV2I4OTJ4MkkyeXF5TVNyZWJyOUlxMlBXc0oyTVhyd3JOU0loM1FBNUEyL1pVSUswMWZid3ZtWUVGOHFHcXBCaUxHWHFYUzhldXdaaUxJN1Y5cWFQTGhqMjBVSlA5MnFWRjZWNHZVUWRZczM4bDlCVmdTbmNZT0c3WlZrdGl0cmZmdnRCMmI3UUorS0dtbk5ldkpValdldmhpQkN2VWlHTlBkeUdlQVhMdDBKNGZwQ2MyR2tGOTlYVFVrRzRWL3RxcEtYSDllbXBCeFZudjJ1RFhYcGZFOG1zbW1OV2xPTVkyRit3eVZETUdTZENZZVBtWW02VG9kT3lDem5UNW5ESU5GSFFJaVg0WW5VNm9WM3E5VWd3bmN5bE9HYVNabytYU2FRbVZqdXpCazNHYUtRWFJ4Wnh1ZzFKdnMvMHcyRDRmMXZ4eVVRZUdCWjV2VElEKzRkYzhzZDRUKzNRdmxmQVhCK2FJNytVemM3ekZBK0xPWnhmNUtDOFFtMXZmOHhJQWRCb1V6bDFOS1ArUkhkRjRmaXA1bGNhbW5ZM2QxUzF2MWIvdFdQSVlpOFJoTDJrNVE1bmFVR2c4VG9hMTJpVG1GbWJVQTBVVFdoMENUT21TK3BpZ0hjbHBEaHg4R2FvdlNXakxYUXIwVklFb2gvejFLVVR0bjNYZU9nNzlEQys1Q1NVNlJyZFBlbVRYLzFzaWR2NkQ1Z1ZhVlpzSlRQblV6c2xWNnZGVXZYVkV1blZISWxFYzdWWFpwTkxiYkt2TWJCc2I2L2tzMytMb2VYVFY5SVFzZ01OOWwwYjJnSlpuUE5wT003dXZaNHVXYllkNTlSVE9UdzNKR1hwbnZxcWhiWCtHMERLVkN0Z0VsMVVMUlBmM2VyZ2tOOVBGNjRFRUhXWlJ0M0UyNjIxZlBTSGFqK3hTTDJIaGx6d2RUMnpxdmgvd1pkc0NFak5vNG91SUxkN0ljZTFiUkh3ZnBWV0JaaGpmWmlaVEF0Rk5WTUxnNmdXTWhocW1XaEswUjNFcG9LdHh5dVd6UzFxNW1ycE93cThlVnkzQy9GUmVSTUlIS2VaS0VJK2VZaXVvbWwyQ1BvTUZqWDZxOEJsdjBjRTNWdW9RazhLNXllTXBkTkhJSWtzM3hoTENTWGxmRThxdjN4K2p3OVFZcGhTNHpMSE5mM3p0ckVtTUowNEcwMTJVc1BYNSt0cXVrWGJWMmhLYlVrUlRJNmMrRHhEZmxNaHhvc0NJYy96Z0poSEZVdGRqeWx2V0NrcHVMNDJkV0RmcE9sdWFxbFoxaE5CdE5zTGZCR1JxVUptSVN2OVo0RkVla3Znald0c2JHcjhRZTUySTdpOUpmZ1JYZ09RdlY3YkpOYXQrT3R0WS9Rd3lrdU53SDRqQzFiNVpVdlpwNyt1cTJGa3VyczRtZ09oZHJXL2Q5amdUUTY3cGdLRHI4aG0vazdvOW83czUwNnkyQ2VlWTNQdU84Rm1uYnp2YnRZUExhMy9XL3JaRkpaN0dnSU0zNjdYd1BZamdNcHIvRU1nNFhvRG01R3VsMWdIczcvQ0lTYWIzenVnazA0TWFBMElWRVV2cm0zdXBXRFI4RGNLaGx0UU1GeU5naUVUSS9nbmU2MmtUZDZjMmRiazVXSERyeDdaSklzcWNLWXZTdUpSbElhaW9CdEZ3VHNvQ3Y2VW9nVEFkY2dKTGNnSnp5SW5QSUtjOEtHVW9pOTB3ZlNhUnV3QW9vK29xYnFSMnVjUnBnNC9jajNCVEpqOUtlWng0R2ZqbW1BWDVUbVdZQ2xUTU55bXp3UWx4V21EUjlWKy9pT2NKUFpmbUI2SGwrQUdqWTBvNHRSdDF2Y0h1NGJGYW4yeXorQWJSak5iOG8xU1RqZEdHcU5PeFg0U0lUVnB5Q1BYSTh5aGlUM0JBaVllM3pJVitLaGs1aVJDUG1qVCszU2xlcCt1QnZuZzVER0xRZkVYQThFQTluYnJuWG9Bc1h3eGU3K3VJdEFJZm8zNjhVZzNRbUJxK3dqb2JmUXgrZ1I5aWo1RG42TXZ3SmZnUGVrclV2d2FxU0srVmQ3RDcrRDN6QThlMnZoMkl6RDl0ZW54VkQ2SkM0NTEyeHQ4bGo1SGZUOVBmeHArb3M0SHRBVmR3WXpLbktxK1FzenhleG8zckd3TGNyZDJWZFFRTjFtWHgxUGN3QzF1NHNQYnpCTkVMdjJMYUxEZFV0UDJvYlF4SzhhekhvTzRXM2lEM1Q0OWZXZVUyZWZSM2Y3L3lMRllabURRWHZjOUs5bGFnVVVBTWVMZWZ4YXNBakNIZlZnQVpCNklkWXM1MFh1MTNicUxGOWIyNEk5WkQyc0RiaTE0L3o4Z3kxaXhsdGpndk9VQjVMb0FnQlhZemFsSmdzYU1yUjF0WFlkUlJsR0g5UlFkc0UrNnhtUmc4eUllbzhveFJ1TVFCU29QdU1PTVlNTGRzNHhHQ0orSDJTTWk1YWJ1cy93Q1ZZNXROQTBYbTB5OXhHTTBKdEFPcTFwZ0swQmRLQWY3REtHdjBNZm95OUYvWkdsYWxOdmx3bmxDY2hndFJMOWxXNkFyNEtOK29TZGdJeFhwSUp5RjI3Z08yTy9OQWxoMVZYZU5PeVBkOS8zU0lLQS9WQ2szOVk0RVBZaXVIZU1CSEpwV2ttM1FlSkVMUEVZTDBXOWdnWkthOXpHSHp2OGJJN0RIZS80WWJoZmUyRTlpb085Sk0zMjNidWJzU2tRdmlNdytuM1FOSlVlOHRPdHJ6eTV2MkVhNjdBMnhWWlRzNHU4eTFqam51NTNOQzNrRWJpRS9aanNpdWxPajIwUTY4VTZZRWltdHhrdXVDM3ZMOFlaTG8yc0ZFYWRReHV2RzlsRTBldDYrbGsrN01RSG9OMFBZbHNhWGIrdmFOM3RyMXk0MmRWbWtmU2JWNXhpM0JiVjF1MTFNOXdEMGxPekxYbllDUjkwdDR3dCtyaXVvS0ExOXl1d0QycExBSndRN1ozeStjSW5pOGtnNjE4blVTQVQyTzZWSy8zV0JJYTFoVDJldzdFb0ZTcmFNSWorVFdFMCs5NHJhSEFKd0VUOStaN3BsWEVqcTN4REgzUURnNUlHTys1TDhMMitKLytpd3p4UE14Z0VpQmdBSS9peVpvSEFtTVAwL2VFNWs5eTZpTmUxazZ3N1d6NHVjcnFUcHh5WjNCZVVKdjJSeXAzWEZUUFlkeUw3Skl3UjRSa2p6TjdhelhpMkNJTUUwcFRYb2RaYzdJU2pkK3JMNEZIeEdFeTNBUkhVQXgxVi9MWnZpamw4d1dWMm0xZlNDZitzd2MwVzA2T3FhNW02U0t6eXRSbmhRVmFnTTZNY2hSZ2tKTVhZRThZaEI5dW1Lb29UcEdScU5rSzRmeDRPVyt1KzRDcmNHWXJnVFo1dm1HOVRVanRmbmlxWVpVV1Q2VWcwZUUzaGtpVUc1bkJwZ2pGMTREWGJvK0RRUmJmcFYxM3pNcGxJSkN1YytWTEp4R2dhenhGd1dJM1pMbmo2NVg1MDB4QjAzb1owTUw0YVNQNkd2UVhLYnVQTXJVcXZtYVFoM1VHWnJSVVpOaVlvOXRYVFJVN3hHbGRTeXBZNDViQXJMVUxNenRBYjY1aW1kSU9hUkRZcElVRjVCc0lvN0tRNi9VelN3dEkyU2VkUzFrN1FvSVhQU2MwR1RGNHV6V2h4THh2d054RjdoOXIxMkxMWVhJZDlGRDVzck8vUzMyYktlV3paUEpxWC9BTTNRaDFwdWZTdDc2amlRdllFbDFtTTBlTTdUTWt3QUEzdDlTRG03NlphWEtMWjU2NXZwTzBpeHZmUXlDSTJqNUJPaFYvazJQaVYzc1J0NEtxRmwvbUR1RG5VejZtN1Z2NzhSUGIzSTFqUE1YVkNxVllpZitFVEZIblczcmNoTWI1MWUxdXVWcHpMMGxnR1RJQVVNYVJVRmNLQURzSUVFMFFJWm1LZnlEVWxGWlljbzJhNi80M1FEQ2FYc2tjTUdPSzJzNUtGenFQeWk3c2pmSjlTOE5Wb2pqOG9YMU1qdXlmRUVRSUNQY1dpbUFXZ2pMQndrSnEwT0pqaWRIWnoyaVkzT1p6c0VrZG5yRU5seW5TTllZbDV5aERLWFlnOGoxYnFUQ0Foc25DN3k1S3RRS0p0WGxtSXloVXU4TkxMQkJaaXl1UU9VeURiSmRFVW15RFdackw5Q2VhYVpZaElIN1VTMHVKWG1lYlRJaWpaQmNyRjgwMjg2SnlldjdFeTF4RVFPcXNtVHc3bkt0ZEFVWmV6eVRlRGxreTNYQkdVWjQzTEtwaDdRSEs3eHFlQVFldnRvY1dSbEV0SmxBMDFSWk1wUktUVkZYZXJweFZ4RnhiNjhuRjdqc3E3R2JkVTIwQnVlSVZKT3dzZkZxNFRQQklVU09MaTRKTXJRVno5OWRaTWhhUEM0V1RzWXlnRW5acXM0bXJ3WUtkeGV1UGxZS1RMSnFEUy9WNG80aENvK0R2TlFiL1FJK3ZIb3JlZmdNVFBNbTRZNXUwNzVQNkpJWGhIL2UxL3lud0VBKSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfWJvZHksaHRtbHtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fWh0bWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXBhcmFncmFwaCxwe2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjR9Lm1vbnN0ZXItaDEsaDF7Zm9udC1zaXplOjNyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjE7bWFyZ2luLWJvdHRvbToxLjI1cmVtfS5tb25zdGVyLWgyLGgye2ZvbnQtc2l6ZToyLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OmNhbGMoNHB4ICsgMmV4KTttYXJnaW4tYm90dG9tOjEuMjVyZW19Lm1vbnN0ZXItaDMsaDN7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OmNhbGMoNHB4ICsgMmV4KTttYXJnaW4tYm90dG9tOjEuMjVyZW19Lm1vbnN0ZXItaDQsaDR7Zm9udC1zaXplOjEuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6Y2FsYyg0cHggKyAyZXgpO21hcmdpbi1ib3R0b206MS4yNXJlbX0ubW9uc3Rlci1oNSxoNXtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OmJvbGRlcjtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfS5tb25zdGVyLWg2LGg2e2ZvbnQtc2l6ZToxLjNyZW07Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OmNhbGMoNHB4ICsgMmV4KTttYXJnaW4tYm90dG9tOjEuMjVyZW19cCtoMXttYXJnaW4tdG9wOjMuNzVyZW19cCtoMnttYXJnaW4tdG9wOjNyZW19cCtoM3ttYXJnaW4tdG9wOjIuMjVyZW19cCtoNHttYXJnaW4tdG9wOjEuNXJlbX1wK2g1e21hcmdpbi10b3A6Ljc1cmVtfWRpditoMSxkaXYraDIsZGl2K2gzLGRpditoNCxkaXYraDUsZGl2K2g2LHAraDZ7bWFyZ2luLXRvcDowfS5kZWNve3RleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX06Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9OjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX1rYmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Ym9yZGVyLXJhZGl1czoxMHJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtwYWRkaW5nOi4yNWVtIC42ZW07dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfWRldGFpbHN7bWFyZ2luLWJvdHRvbToxcmVtfXN1bW1hcnl7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NzAwO3BhZGRpbmc6LjZyZW0gMXJlbX1kZXRhaWxzW29wZW5de3BhZGRpbmc6LjZyZW0gMXJlbSAuNzVyZW19ZGV0YWlsc1tvcGVuXSBzdW1tYXJ5e21hcmdpbi1ib3R0b206LjVyZW07cGFkZGluZzowfS5tb25zdGVyLW5vLXVzZXItc2VsZWN0ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX1Aa2V5ZnJhbWVzIGRldGFpbHMtc2hvd3swJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41ZW0pfX1kZXRhaWxzW29wZW5dPjpub3Qoc3VtbWFyeSl7YW5pbWF0aW9uOmRldGFpbHMtc2hvdyAuMTVzIGVhc2UtaW4tb3V0fWRldGFpbHNbb3Blbl0+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsXFxcIlF1aWNrc2FuZFxcXCIsXFxcIlNlZ29lIFVJXFxcIixcXFwiUm9ib3RvXFxcIixcXFwiT3h5Z2VuXFxcIixcXFwiVWJ1bnR1XFxcIixcXFwiQ2FudGFyZWxsXFxcIixcXFwiRmlyYSBTYW5zXFxcIixcXFwiRHJvaWQgU2Fuc1xcXCIsXFxcIkhlbHZldGljYSBOZXVlXFxcIixBcmlhbCxzYW5zLXNlcmlmLFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIjstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi02KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNik7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTE6IzgzM2FiNDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMjojZmQxZDFkOy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zOiNmY2IwNDU7LS1tb25zdGVyLWJveC1zaGFkb3ctMTpub25lOy0tbW9uc3Rlci1ib3gtc2hhZG93LTI6LTFweCAxcHggMTBweCAxcHggaHNsYSgwLDAlLDc2JSwuNjEpOy0tbW9uc3Rlci10ZXh0LXNoYWRvdzpub25lOy0tbW9uc3Rlci1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLWJvcmRlci13aWR0aDoycHg7LS1tb25zdGVyLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2U6LTRweDstLW1vbnN0ZXItei1pbmRleC1kZWZhdWx0OjA7LS1tb25zdGVyLXotaW5kZXgtb3V0bGluZToxMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bjoyMDA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd24tb3ZlcmxheToyMTA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5OjMwMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3ktb3ZlcmxheTozMTA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQ6NDAwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkLW92ZXJsYXk6NDEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wOjUwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcC1vdmVybGF5OjUxMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXM6NjAwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhcy1vdmVybGF5OjYxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbDo3MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheTo3MTA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlcjo4MDA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlci1vdmVybGF5OjgxMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwOjgwMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwLW92ZXJsYXk6OTEwOy0tbW9uc3Rlci1zcGFjZS0wOjA7LS1tb25zdGVyLXNwYWNlLTE6MnB4Oy0tbW9uc3Rlci1zcGFjZS0yOjRweDstLW1vbnN0ZXItc3BhY2UtMzo2cHg7LS1tb25zdGVyLXNwYWNlLTQ6MTBweDstLW1vbnN0ZXItc3BhY2UtNToxNnB4Oy0tbW9uc3Rlci1zcGFjZS02OjI2cHg7LS1tb25zdGVyLXNwYWNlLTc6NDJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0wOjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTQ6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNzo3NjhweDstLW1vbnN0ZXItYnJlYWtwb2ludC05Ojk5MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTEyOjEyMDBweH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19W2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXldLmhpZGUtZW1wdHl7ZGlzcGxheTpub25lfVtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5XXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMik7aGVpZ2h0OjEwMCU7bGVmdDowO292ZXJmbG93LXg6aGlkZGVuO3Bvc2l0aW9uOmZpeGVkO3RvcDowO3RyYW5zaXRpb246LjVzO3dpZHRoOjA7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzKX1bZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheV0gW2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXktY2xvc2Vde2N1cnNvcjpwb2ludGVyO2hlaWdodDo0MHB4O2xlZnQ6MTBweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTBweDt3aWR0aDo0MHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5XSBbZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheS1jbG9zZV06YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvciclM0UlM0NwYXRoIGQ9J00yLjE0NiAyLjg1NGEuNS41IDAgMSAxIC43MDgtLjcwOEw4IDcuMjkzbDUuMTQ2LTUuMTQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGw1LjE0NyA1LjE0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTUuMTQ2IDUuMTQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggMi4xNDYgMi44NTRaJy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyUzRSUzQ3BhdGggZD0nTTIuMTQ2IDIuODU0YS41LjUgMCAxIDEgLjcwOC0uNzA4TDggNy4yOTNsNS4xNDYtNS4xNDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDUuMTQ3IDUuMTQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtNS4xNDYgNS4xNDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCAyLjE0NiAyLjg1NFonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXktb3Blbl17Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OjQwcHg7bGVmdDoxMHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMHB4O3dpZHRoOjQwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXktb3Blbl06YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvciclM0UlM0NwYXRoIGQ9J00xIDJhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMVYyem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDdhMSAxIDAgMCAxLTEtMVYyem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxaC0yYTEgMSAwIDAgMS0xLTFWMnpNMSA3YTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTFWN3ptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUg3YTEgMSAwIDAgMS0xLTFWN3ptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtMmExIDEgMCAwIDEtMS0xVjd6TTEgMTJhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMXYtMnptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUg3YTEgMSAwIDAgMS0xLTF2LTJ6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAxLTEtMXYtMnonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InJTNFJTNDcGF0aCBkPSdNMSAyYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTFWMnptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUg3YTEgMSAwIDAgMS0xLTFWMnptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtMmExIDEgMCAwIDEtMS0xVjJ6TTEgN2ExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xVjd6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIN2ExIDEgMCAwIDEtMS0xVjd6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAxLTEtMVY3ek0xIDEyYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTF2LTJ6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIN2ExIDEgMCAwIDEtMS0xdi0yem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxaC0yYTEgMSAwIDAgMS0xLTF2LTJ6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5XS5vcGVue3dpZHRoOjEwMCV9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgc2NodWthaSBHbWJIXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgXCIuLi9ub3RpZnkvbm90aWZ5Lm1qc1wiO1xuaW1wb3J0IHsgT3ZlcmxheVN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L292ZXJsYXkubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfUk9MRSB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0ZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQsXG5cdGZpcmVDdXN0b21FdmVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IE92ZXJsYXkgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgb3ZlcmxheUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJvdmVybGF5RWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgb3ZlcmxheUNsb3NlRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIm92ZXJsYXlDbG9zZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBvdmVybGF5T3BlbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJvdmVybGF5T3BlbkVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNsb3NlRXZlbnRIYW5kbGVyU3ltYm9sID0gU3ltYm9sKFwiY2xvc2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG9wZW5FdmVudEhhbmRsZXJTeW1ib2wgPSBTeW1ib2woXCJvcGVuRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfVkFMVUVfT1ZFUkxBWV9PUEVOID0gXCJvdmVybGF5LW9wZW5cIjtcblxuLyoqXG4gKiBUaGUgT3ZlcmxheSBjb21wb25lbnQgaXMgdXNlZCB0byBzaG93IGFuIG92ZXJsYXkgYW5kIGEgYnV0dG9uIHRvIG9wZW4gdGhlIG92ZXJsYXkuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9vdmVybGF5LnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItb3ZlcmxheSAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1vdmVybGF5Jyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItb3ZlcmxheT48L21vbnN0ZXItb3ZlcmxheT5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgJ0BzY2h1a2FpL2NvbXBvbmVudC1zdGF0ZS9zb3VyY2Uvb3ZlcmxheS5tanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1vdmVybGF5Jyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgQm9keSBzaG91bGQgaGF2ZSBhIGNsYXNzIFwiaGlkZGVuXCIgdG8gZW5zdXJlIHRoYXQgdGhlIHN0eWxlcyBhcmUgYXBwbGllZCBjb3JyZWN0bHkuXG4gKlxuICogYGBgY3NzXG4gKiBib2R5LmhpZGRlbiB7XG4gKiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAc3RhcnR1bWwgb3ZlcmxheS5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEN1c3RvbUNvbnRyb2xcbiAqIEN1c3RvbUNvbnRyb2wgPHwtLSBPdmVybGF5XG4gKiBAZW5kdW1sXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuSG9zdFxuICogQHN1bW1hcnkgQSBzaW1wbGUgb3ZlcmxheSBjb21wb25lbnRcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5PdmVybGF5LmV2ZW50Om1vbnN0ZXItb3ZlcmxheS1iZWZvcmUtb3BlblxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lk92ZXJsYXkuZXZlbnQ6bW9uc3Rlci1vdmVybGF5LW9wZW5cbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5PdmVybGF5LmV2ZW50Om1vbnN0ZXItb3ZlcmxheS1iZWZvcmUtY2xvc2VcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5PdmVybGF5LmV2ZW50Om1vbnN0ZXItb3ZlcmxheS1jbG9zZWRcbiAqL1xuY2xhc3MgT3ZlcmxheSBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9jb21wb25lbnQtaG9zdC9vdmVybGF5QEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBodG1sIHRhZyB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY29udGFpbmVyIENvbnRhaW5lciBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge2FycmF5fSBjb250YWluZXIgQ29udGFpbmVyIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250YWluZXJbXS5uYW1lIE5hbWUgb2YgdGhlIGNvbnRhaW5lclxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY29udGFpbmVyW10uY29udGVudCBDb250ZW50IG9mIHRoZSBjb250YWluZXJcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbnRhaW5lcltdLmNsYXNzIENzcyBjbGFzcyBvZiB0aGUgY29udGFpbmVyXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjbGFzc2VzIENzcyBjbGFzc2VzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzc2VzLmJvZHkgQ3NzIGNsYXNzIHRvIGhpZGUgdGhlIGJvZHkuIFRoaXMgY2xhc3MgaXMgcmVtb3ZlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgcmVhZHkuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzc2VzLm92ZXJsYXkgQ3NzIGNsYXNzIHRvIGhpZGUgdGhlIG92ZXJsYXkuIFRoaXMgY2xhc3MgaXMgcmVtb3ZlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgcmVhZHkuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZWF0dXJlcyBGZWF0dXJlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMuZXNjYXBlS2V5IElmIHRydWUgdGhlIG92ZXJsYXkgY2FuIGJlIGNsb3NlZCB3aXRoIHRoZSBlc2NhcGUga2V5XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRvdmVybGF5OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRlbnRcIixcblx0XHRcdFx0XHRjb250ZW50OiBcIjxzbG90Pjwvc2xvdD5cIixcblx0XHRcdFx0XHRjbGFzczogXCJcIixcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGJvZHk6IFwiaGlkZGVuXCIsXG5cdFx0XHRcdG92ZXJsYXk6IFwiaGlkZS1lbXB0eVwiLFxuXHRcdFx0fSxcblx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdGVzY2FwZUtleTogdHJ1ZSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHQvKipcblx0XHQgKiBzaG93IHRoZSBzY3JvbGwgYmFyIGFsd2F5c1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICovXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93WSA9IFwic2Nyb2xsXCI7XG5cblx0XHRjb25zdCBjbGFzc05hbWVzID0gdGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLmJvZHlcIik7XG5cblx0XHRpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lcykpIHtcblx0XHRcdGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWVzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge01vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lk92ZXJsYXl9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5PdmVybGF5fVxuXHQgKi9cblx0dG9nZ2xlKCkge1xuXHRcdGlmICh0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuY29udGFpbnMoXCJvcGVuXCIpKSB7XG5cdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMub3BlbigpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuT3ZlcmxheX1cblx0ICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lk92ZXJsYXkuZXZlbnQ6bW9uc3Rlci1vdmVybGF5LWJlZm9yZS1vcGVuXG5cdCAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5PdmVybGF5LmV2ZW50Om1vbnN0ZXItb3ZlcmxheS1vcGVuXG5cdCAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5PdmVybGF5LmV2ZW50Om1vbnN0ZXItb3ZlcmxheS1iZWZvcmUtY2xvc2Vcblx0ICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lk92ZXJsYXkuZXZlbnQ6bW9uc3Rlci1vdmVybGF5LWNsb3NlZFxuXHQgKi9cblx0b3BlbigpIHs7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1vdmVybGF5LWJlZm9yZS1vcGVuXCIsIHt9KTtcblxuXHRcdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRlLWVtcHR5XCIpO1xuXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwib3BlblwiKTtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLW92ZXJsYXktb3BlblwiLCB7fSk7XG5cdFx0XHR9LCAwKTtcblx0XHR9LCAwKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5PdmVybGF5fVxuXHQgKi9cblx0Y2xvc2UoKSB7O1xuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItb3ZlcmxheS1iZWZvcmUtY2xvc2VcIiwge30pO1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcIm9wZW5cIik7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1vdmVybGF5LWNsb3NlZFwiLCB7fSk7XG5cdFx0XHR9LCAwKTtcblx0XHR9LCAwKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItb3ZlcmxheVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbT3ZlcmxheVN0eWxlU2hlZXRdO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHs7XG5cblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQoXCJvdmVybGF5XCIpO1xuXHR0aGlzW292ZXJsYXlDbG9zZUVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheS1jbG9zZV1cIixcblx0KTtcblx0dGhpc1tvdmVybGF5T3BlbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheS1vcGVuXVwiLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1tjbG9zZUV2ZW50SGFuZGxlclN5bWJvbF0gPSAoZXZlbnQpID0+IHtcblx0XHR0aGlzLmNsb3NlKCk7XG5cdH07XG5cblx0dGhpc1tvdmVybGF5Q2xvc2VFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFwiY2xpY2tcIixcblx0XHR0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyU3ltYm9sXSxcblx0KTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbb3BlbkV2ZW50SGFuZGxlclN5bWJvbF0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0QVRUUklCVVRFX1ZBTFVFX09WRVJMQVlfT1BFTixcblx0XHQpO1xuXHRcdGlmIChlbGVtZW50KSB7XG5cdFx0XHR0aGlzLm9wZW4oKTtcblx0XHR9XG5cdH07XG5cblx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpc1tvcGVuRXZlbnRIYW5kbGVyU3ltYm9sXSk7XG5cblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMuZXNjYXBlS2V5XCIpID09PSB0cnVlKSB7XG5cdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcblx0XHRcdFx0Y29uc3QgaXNOb3RDb21iaW5lZEtleSA9ICEoXG5cdFx0XHRcdFx0ZXZlbnQuY3RybEtleSB8fFxuXHRcdFx0XHRcdGV2ZW50LmFsdEtleSB8fFxuXHRcdFx0XHRcdGV2ZW50LnNoaWZ0S2V5XG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChpc05vdENvbWJpbmVkS2V5KSB7XG5cdFx0XHRcdFx0dGhpcy50b2dnbGVPdmVybGF5KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDx0ZW1wbGF0ZSBpZD1cImhvc3Qtb3ZlcmxheVwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6aG9zdC1vdmVybGF5LmNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInBhcnQgcGF0aDpob3N0LW92ZXJsYXkubmFtZSwgZGF0YS1tb25zdGVyLXJvbGUgcGF0aDpob3N0LWNvbnRhaW5lci5vdmVybGF5XCI+PC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cIm92ZXJsYXktb3BlblwiIHBhcnQ9XCJvcGVuXCI+PC9kaXY+XG5cbiAgICAgICAgPGRpdiBpZD1cIm92ZXJsYXlcIiBkYXRhLW1vbnN0ZXItcm9sZT1cIm92ZXJsYXlcIiBwYXJ0PVwib3ZlcmxheVwiIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJob3N0LW92ZXJsYXkgcGF0aDpvdmVybGF5XCJcbiAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y2xhc3Nlcy5vdmVybGF5XCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwib3ZlcmxheS1jbG9zZVwiIHBhcnQ9XCJjbG9zZVwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoT3ZlcmxheSk7XG4iLCAiaW1wb3J0IHsgZ2V0V2luZG93IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuXG5leHBvcnQgeyBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleSB9O1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgdW5pcXVlIGNvbmZpZ3VyYXRpb24ga2V5IGJhc2VkIG9uIHRoZSBjdXJyZW50IGJyb3dzZXIgbG9jYXRpb24sXG4gKiBjb21wb25lbnQgbmFtZSwgaWQsIGFuZCBhIHByZWZpeC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBjb21wb25lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY29tcG9uZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeCAtIEEgcHJlZml4IHRvIHVzZSBpbiB0aGUgdW5pcXVlIGtleS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBnZW5lcmF0ZWQgdW5pcXVlIGNvbmZpZ3VyYXRpb24ga2V5LlxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleShjb21wb25lbnROYW1lLCBpZCwgcHJlZml4KSB7XG5cdC8vIEdldCB0aGUgYnJvd3NlciBsb2NhdGlvbiB3aXRob3V0IHBhcmFtZXRlcnNcblx0Y29uc3QgdXJsV2l0aG91dFBhcmFtcyA9IGdldFdpbmRvdygpLmxvY2F0aW9uLmhyZWYuc3BsaXQoXCI/XCIpWzBdO1xuXG5cdC8vIENvbWJpbmUgdGhlIHBhcnRzIHRvIGNyZWF0ZSBhIHVuaXF1ZSBrZXlcblx0Y29uc3QgdW5pcXVlS2V5ID0gYCR7cHJlZml4fV8ke3VybFdpdGhvdXRQYXJhbXN9XyR7Y29tcG9uZW50TmFtZX1fJHtpZH1gO1xuXG5cdC8vIFJlcGxhY2UgYW55IHNwZWNpYWwgY2hhcmFjdGVycyBhbmQgc3BhY2VzIHdpdGggdW5kZXJzY29yZXNcblx0cmV0dXJuIHVuaXF1ZUtleS5yZXBsYWNlKC9bXlxcd1xcc10vZ2ksIFwiX1wiKS5yZXBsYWNlKC9cXHMrL2csIFwiX1wiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBEZXRhaWxzU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgRGV0YWlsc1N0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHREZXRhaWxzU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBkZXRhaWxzIHsgXG46d2hlcmUoaHRtbCl7bGluZS1oZWlnaHQ6MS4xNX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUocHJlKXtmb250LWZhbWlseTptb25vc3BhY2UsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19OndoZXJlKGFiYnJbdGl0bGVdKXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9OndoZXJlKGIsc3Ryb25nKXtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKGNvZGUsa2JkLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlO21pbi1oZWlnaHQ6MTAwJX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDttaW4taGVpZ2h0Ojk5JTtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5LGJ1dHRvbnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnksLm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnksLm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofWJ1dHRvbjphY3RpdmUsYnV0dG9uOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9YnV0dG9uOmFjdGl2ZXt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX0ubW9uc3Rlci1idXR0b24tYmFyLC5tb25zdGVyLWJ1dHRvbi1ncm91cHthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpzdHJldGNoO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ubW9uc3Rlci1idXR0b24tZ3JvdXB7Ym94LXNpemluZzpib3JkZXItYm94O2dhcDowO21hcmdpbjoxcmVtIDB9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwPjpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1yaWdodDpjYWxjKHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSotMSl9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwIDpob3Zlcntib3gtc2hhZG93Om5vbmV9YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsXFxcIlF1aWNrc2FuZFxcXCIsXFxcIlNlZ29lIFVJXFxcIixcXFwiUm9ib3RvXFxcIixcXFwiT3h5Z2VuXFxcIixcXFwiVWJ1bnR1XFxcIixcXFwiQ2FudGFyZWxsXFxcIixcXFwiRmlyYSBTYW5zXFxcIixcXFwiRHJvaWQgU2Fuc1xcXCIsXFxcIkhlbHZldGljYSBOZXVlXFxcIixBcmlhbCxzYW5zLXNlcmlmLFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIjstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi02KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNik7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTE6IzgzM2FiNDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMjojZmQxZDFkOy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zOiNmY2IwNDU7LS1tb25zdGVyLWJveC1zaGFkb3ctMTpub25lOy0tbW9uc3Rlci1ib3gtc2hhZG93LTI6LTFweCAxcHggMTBweCAxcHggaHNsYSgwLDAlLDc2JSwuNjEpOy0tbW9uc3Rlci10ZXh0LXNoYWRvdzpub25lOy0tbW9uc3Rlci1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLWJvcmRlci13aWR0aDoycHg7LS1tb25zdGVyLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2U6LTRweDstLW1vbnN0ZXItei1pbmRleC1kZWZhdWx0OjA7LS1tb25zdGVyLXotaW5kZXgtb3V0bGluZToxMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bjoyMDA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd24tb3ZlcmxheToyMTA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5OjMwMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3ktb3ZlcmxheTozMTA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQ6NDAwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkLW92ZXJsYXk6NDEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wOjUwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcC1vdmVybGF5OjUxMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXM6NjAwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhcy1vdmVybGF5OjYxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbDo3MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheTo3MTA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlcjo4MDA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlci1vdmVybGF5OjgxMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwOjgwMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwLW92ZXJsYXk6OTEwOy0tbW9uc3Rlci1zcGFjZS0wOjA7LS1tb25zdGVyLXNwYWNlLTE6MnB4Oy0tbW9uc3Rlci1zcGFjZS0yOjRweDstLW1vbnN0ZXItc3BhY2UtMzo2cHg7LS1tb25zdGVyLXNwYWNlLTQ6MTBweDstLW1vbnN0ZXItc3BhY2UtNToxNnB4Oy0tbW9uc3Rlci1zcGFjZS02OjI2cHg7LS1tb25zdGVyLXNwYWNlLTc6NDJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0wOjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTQ6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNzo3NjhweDstLW1vbnN0ZXItYnJlYWtwb2ludC05Ojk5MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTEyOjEyMDBweH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19c3Bhbi5tb25zdGVyLWZ4LXJpcHBsZXthbmltYXRpb246bW9uc3Rlci1meC1yaXBwbGUgLjZzIGxpbmVhcjtiYWNrZ3JvdW5kLWNvbG9yOmhzbGEoMCwwJSwxMDAlLC43KTtib3JkZXItcmFkaXVzOjUwJTtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm06c2NhbGUoMCl9QGtleWZyYW1lcyBtb25zdGVyLWZ4LXJpcHBsZXt0b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKDQpfX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17ZmxleC1kaXJlY3Rpb246Y29sdW1ufSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIyLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL2NvbXBvbmVudC1mb3JtXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBBVFRSSUJVVEVfUFJFRklYIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1idXR0b24tbGFiZWxgIGNhbiBiZSB1c2VkIHRvIHBhc3MgbGFiZWxzLlxuICpcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuSG9zdFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0JVVFRPTl9MQUJFTCA9IGAke0FUVFJJQlVURV9QUkVGSVh9YnV0dG9uLWxhYmVsYDtcblxuZXhwb3J0IHsgQVRUUklCVVRFX0JVVFRPTl9MQUJFTCB9O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IENvbGxhcHNlU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgQ29sbGFwc2VTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0Q29sbGFwc2VTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIGNvbGxhcHNlIHsgXG46d2hlcmUoaHRtbCl7bGluZS1oZWlnaHQ6MS4xNX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUocHJlKXtmb250LWZhbWlseTptb25vc3BhY2UsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19OndoZXJlKGFiYnJbdGl0bGVdKXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9OndoZXJlKGIsc3Ryb25nKXtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKGNvZGUsa2JkLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlO21pbi1oZWlnaHQ6MTAwJX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDttaW4taGVpZ2h0Ojk5JTtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5LGJ1dHRvbnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnksLm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnksLm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofWJ1dHRvbjphY3RpdmUsYnV0dG9uOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9YnV0dG9uOmFjdGl2ZXt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX0ubW9uc3Rlci1idXR0b24tYmFyLC5tb25zdGVyLWJ1dHRvbi1ncm91cHthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpzdHJldGNoO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ubW9uc3Rlci1idXR0b24tZ3JvdXB7Ym94LXNpemluZzpib3JkZXItYm94O2dhcDowO21hcmdpbjoxcmVtIDB9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwPjpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1yaWdodDpjYWxjKHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSotMSl9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwIDpob3Zlcntib3gtc2hhZG93Om5vbmV9YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsXFxcIlF1aWNrc2FuZFxcXCIsXFxcIlNlZ29lIFVJXFxcIixcXFwiUm9ib3RvXFxcIixcXFwiT3h5Z2VuXFxcIixcXFwiVWJ1bnR1XFxcIixcXFwiQ2FudGFyZWxsXFxcIixcXFwiRmlyYSBTYW5zXFxcIixcXFwiRHJvaWQgU2Fuc1xcXCIsXFxcIkhlbHZldGljYSBOZXVlXFxcIixBcmlhbCxzYW5zLXNlcmlmLFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIjstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi02KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNik7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTE6IzgzM2FiNDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMjojZmQxZDFkOy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zOiNmY2IwNDU7LS1tb25zdGVyLWJveC1zaGFkb3ctMTpub25lOy0tbW9uc3Rlci1ib3gtc2hhZG93LTI6LTFweCAxcHggMTBweCAxcHggaHNsYSgwLDAlLDc2JSwuNjEpOy0tbW9uc3Rlci10ZXh0LXNoYWRvdzpub25lOy0tbW9uc3Rlci1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLWJvcmRlci13aWR0aDoycHg7LS1tb25zdGVyLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2U6LTRweDstLW1vbnN0ZXItei1pbmRleC1kZWZhdWx0OjA7LS1tb25zdGVyLXotaW5kZXgtb3V0bGluZToxMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bjoyMDA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd24tb3ZlcmxheToyMTA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5OjMwMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3ktb3ZlcmxheTozMTA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQ6NDAwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkLW92ZXJsYXk6NDEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wOjUwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcC1vdmVybGF5OjUxMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXM6NjAwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhcy1vdmVybGF5OjYxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbDo3MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheTo3MTA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlcjo4MDA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlci1vdmVybGF5OjgxMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwOjgwMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwLW92ZXJsYXk6OTEwOy0tbW9uc3Rlci1zcGFjZS0wOjA7LS1tb25zdGVyLXNwYWNlLTE6MnB4Oy0tbW9uc3Rlci1zcGFjZS0yOjRweDstLW1vbnN0ZXItc3BhY2UtMzo2cHg7LS1tb25zdGVyLXNwYWNlLTQ6MTBweDstLW1vbnN0ZXItc3BhY2UtNToxNnB4Oy0tbW9uc3Rlci1zcGFjZS02OjI2cHg7LS1tb25zdGVyLXNwYWNlLTc6NDJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0wOjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTQ6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNzo3NjhweDstLW1vbnN0ZXItYnJlYWtwb2ludC05Ojk5MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTEyOjEyMDBweH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19c3Bhbi5tb25zdGVyLWZ4LXJpcHBsZXthbmltYXRpb246bW9uc3Rlci1meC1yaXBwbGUgLjZzIGxpbmVhcjtiYWNrZ3JvdW5kLWNvbG9yOmhzbGEoMCwwJSwxMDAlLC43KTtib3JkZXItcmFkaXVzOjUwJTtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm06c2NhbGUoMCl9QGtleWZyYW1lcyBtb25zdGVyLWZ4LXJpcHBsZXt0b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKDQpfX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH0ub3ZlcmZsb3ctaGlkZGVuW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde292ZXJmbG93OmhpZGRlbn1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gYnV0dG9ue2JvcmRlci1sZWZ0OjA7Ym9yZGVyLXJpZ2h0OjA7Ym9yZGVyLXRvcDowfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuYnV0dG9uOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1kZXRhaWxde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMik7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2hlaWdodDowO2xpbmUtaGVpZ2h0OjEuNDt0cmFuc2l0aW9uOmhlaWdodCAuNHMgZWFzZS1pbi1vdXQ7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWRldGFpbF0gLnBhZGRpbmd7cGFkZGluZzoxcmVtfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9ZGV0YWlsXSAuZGVjby1saW5le2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMSkgMCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTIpIDUwJSx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTMpIDEwMCUpO2JvcmRlcjowO2hlaWdodDoycHg7bWFyZ2luOjA7cGFkZGluZzowfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1kZXRhaWxdIC5kZWNvLWxpbmV7YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuYWN0aXZlW2RhdGEtbW9uc3Rlci1yb2xlPWRldGFpbF17aGVpZ2h0OnZhcigtLW1vbnN0ZXItaGVpZ2h0KX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBzY2h1a2FpIEdtYkhcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRnZXRTbG90dGVkRWxlbWVudHMsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgQ29sbGFwc2VTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9jb2xsYXBzZS5tanNcIjtcbmltcG9ydCB7IGZpcmVDdXN0b21FdmVudCB9IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEhvc3QgfSBmcm9tIFwiLi9ob3N0Lm1qc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgQ29sbGFwc2UsIG5hbWVTeW1ib2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdGltZXJDYWxsYmFja1N5bWJvbCA9IFN5bWJvbChcInRpbWVyQ2FsbGJhY2tcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRldGFpbHNFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiZGV0YWlsc0VsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRyb2xFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udHJvbEVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVzaXplT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJyZXNpemVPYnNlcnZlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZGV0YWlsc1Nsb3RFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiZGV0YWlsc1Nsb3RFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImRldGFpbHNDb250YWluZXJFbGVtZW50XCIpO1xuLyoqXG5cbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkZXRhaWxzRGVjb0VsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJkZXRhaWxzRGVjb0VsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG5hbWVTeW1ib2wgPSBTeW1ib2woXCJuYW1lXCIpO1xuXG4vKipcbiAqIFRoZSBDb2xsYXBzZSBjb21wb25lbnQgaXMgdXNlZCB0byBzaG93IGEgZGV0YWlscy5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL2NvbGxhcHNlLnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItY29sbGFwc2UgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY29sbGFwc2UnKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1jb2xsYXBzZT48L21vbnN0ZXItY29sbGFwc2U+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0ICdAc2NodWthaS9jb21wb25lbnQtc3RhdGUvc291cmNlL2NvbGxhcHNlLm1qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbGxhcHNlJyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgQm9keSBzaG91bGQgaGF2ZSBhIGNsYXNzIFwiaGlkZGVuXCIgdG8gZW5zdXJlIHRoYXQgdGhlIHN0eWxlcyBhcmUgYXBwbGllZCBjb3JyZWN0bHkuXG4gKlxuICogYGBgY3NzXG4gKiBib2R5LmhpZGRlbiB7XG4gKiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAc3RhcnR1bWwgY29sbGFwc2UucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDb2xsYXBzZVxuICogQGVuZHVtbFxuICpcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkhvc3RcbiAqIEBzdW1tYXJ5IEEgc2ltcGxlIGNvbGxhcHNlIGNvbXBvbmVudFxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0LkNvbGxhcHNlLmV2ZW50Om1vbnN0ZXItY29sbGFwc2UtYmVmb3JlLW9wZW5cbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Db2xsYXBzZS5ldmVudDptb25zdGVyLWNvbGxhcHNlLW9wZW5cbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Db2xsYXBzZS5ldmVudDptb25zdGVyLWNvbGxhcHNlLWJlZm9yZS1jbG9zZVxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0LkNvbGxhcHNlLmV2ZW50Om1vbnN0ZXItY29sbGFwc2UtY2xvc2VkXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuQ29sbGFwc2UuZXZlbnQ6bW9uc3Rlci1jb2xsYXBzZS1hZGp1c3QtaGVpZ2h0XG4gKi9cbmNsYXNzIENvbGxhcHNlIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL2NvbXBvbmVudC1ob3N0L2NvbGxhcHNlQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHQvLyB0aGUgbmFtZSBpcyBvbmx5IHVzZWQgZm9yIHRoZSBob3N0IGNvbmZpZyBhbmQgdGhlIGV2ZW50IG5hbWVcblx0XHR0aGlzW25hbWVTeW1ib2xdID0gXCJjb2xsYXBzZVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIGh0bWwgdGFnIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjbGFzc2VzIENTUyBjbGFzc2VzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzc2VzLmNvbnRhaW5lciBDU1MgY2xhc3MgZm9yIHRoZSBjb250YWluZXJcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzIEZlYXR1cmUgY29uZmlndXJhdGlvblxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLmFjY29yZGlvbiBFbmFibGUgYWNjb3JkaW9uIG1vZGVcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5wZXJzaXN0U3RhdGUgRW5hYmxlIHBlcnNpc3Qgc3RhdGUgKEhvc3QgYW5kIENvbmZpZy1NYW5hZ2VyIHJlcXVpcmVkKVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0Y2xhc3Nlczoge1xuXHRcdFx0XHRjb250YWluZXI6IFwicGFkZGluZ1wiLFxuXHRcdFx0fSxcblx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdGFjY29yZGlvbjogdHJ1ZSxcblx0XHRcdFx0cGVyc2lzdFN0YXRlOiB0cnVlLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuQ29sbGFwc2V9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRTdGF0ZUZyb21Ib3N0Q29uZmlnLmNhbGwodGhpcyk7XG5cdFx0aW5pdFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXHRcdHVwZGF0ZVJlc2l6ZU9ic2VydmVyT2JzZXJ2YXRpb24uY2FsbCh0aGlzKTtcblx0XHQvLyAgdGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0ub2JzZXJ2ZShnZXREb2N1bWVudCgpLmJvZHkpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXHRcdC8vdGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0uZGlzY29ubmVjdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Db2xsYXBzZX1cblx0ICovXG5cdHRvZ2dsZSgpIHs7XG5cdFx0aWYgKHRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5jb250YWlucyhcImFjdGl2ZVwiKSkge1xuXHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9wZW4oKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0Nsb3NlZCgpIHtcblx0XHRyZXR1cm4gIXRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5jb250YWlucyhcImFjdGl2ZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGlzT3BlbigpIHtcblx0XHRyZXR1cm4gIXRoaXMuaXNDbG9zZWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuQ29sbGFwc2V9XG5cdCAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Db2xsYXBzZS5ldmVudDptb25zdGVyLWNvbGxhcHNlLWJlZm9yZS1vcGVuXG5cdCAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Db2xsYXBzZS5ldmVudDptb25zdGVyLWNvbGxhcHNlLW9wZW5cblx0ICovXG5cdG9wZW4oKSB7XG5cdFx0bGV0IG5vZGU7O1xuXHRcdGlmICh0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItXCIgKyB0aGlzW25hbWVTeW1ib2xdICsgXCItYmVmb3JlLW9wZW5cIiwge30pO1xuXG5cdFx0YWRqdXN0SGVpZ2h0LmNhbGwodGhpcyk7XG5cdFx0dGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcblxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmFjY29yZGlvblwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0bm9kZSA9IHRoaXM7XG5cdFx0XHR3aGlsZSAobm9kZS5uZXh0RWxlbWVudFNpYmxpbmcgaW5zdGFuY2VvZiBDb2xsYXBzZSkge1xuXHRcdFx0XHRub2RlID0gbm9kZS5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdFx0XHRcdG5vZGUuY2xvc2UoKTtcblx0XHRcdH1cblxuXHRcdFx0bm9kZSA9IHRoaXM7XG5cdFx0XHR3aGlsZSAobm9kZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nIGluc3RhbmNlb2YgQ29sbGFwc2UpIHtcblx0XHRcdFx0bm9kZSA9IG5vZGUucHJldmlvdXNFbGVtZW50U2libGluZztcblx0XHRcdFx0bm9kZS5jbG9zZSgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHVwZGF0ZVN0YXRlQ29uZmlnLmNhbGwodGhpcyk7XG5cdFx0XHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItXCIgKyB0aGlzW25hbWVTeW1ib2xdICsgXCItb3BlblwiLCB7fSk7XG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJvdmVyZmxvdy1oaWRkZW5cIik7XG5cdFx0XHRcdH0sIDUwMCk7XG5cdFx0XHR9LCAwKTtcblx0XHR9LCAwKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Db2xsYXBzZX1cblx0ICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0LkNvbGxhcHNlLmV2ZW50Om1vbnN0ZXItY29sbGFwc2UtYmVmb3JlLWNsb3NlXG5cdCAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Db2xsYXBzZS5ldmVudDptb25zdGVyLWNvbGxhcHNlLWNsb3NlZFxuXHQgKi9cblx0Y2xvc2UoKSB7O1xuXHRcdGlmICghdGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLVwiICsgdGhpc1tuYW1lU3ltYm9sXSArIFwiLWJlZm9yZS1jbG9zZVwiLCB7fSk7XG5cdFx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcIm92ZXJmbG93LWhpZGRlblwiKTtcblxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR1cGRhdGVTdGF0ZUNvbmZpZy5jYWxsKHRoaXMpO1xuXHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLVwiICsgdGhpc1tuYW1lU3ltYm9sXSArIFwiLWNsb3NlZFwiLCB7fSk7XG5cdFx0XHR9LCAwKTtcblx0XHR9LCAwKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1jb2xsYXBzZVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0FycmF5PENTU1N0eWxlU2hlZXQ+fVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtDb2xsYXBzZVN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGluc2VydGVkIGludG8gYSBkb2N1bWVudCwgaW5jbHVkaW5nIGludG8gYSBzaGFkb3cgdHJlZS5cblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuQ29sbGFwc2V9XG5cdCAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Db2xsYXBzZS5ldmVudDptb25zdGVyLWNvbGxhcHNlLWFkanVzdC1oZWlnaHRcblx0ICovXG5cdGFkanVzdEhlaWdodCgpIHs7XG5cdFx0YWRqdXN0SGVpZ2h0LmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuZnVuY3Rpb24gYWRqdXN0SGVpZ2h0KCkgeztcblxuXHRsZXQgaGVpZ2h0ID0gMDtcblxuXHRpZiAodGhpc1tkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbF0pIHtcblx0XHRoZWlnaHQgKz0gdGhpc1tkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uc2Nyb2xsSGVpZ2h0O1xuXHR9XG5cblx0aWYgKHRoaXNbZGV0YWlsc0RlY29FbGVtZW50U3ltYm9sXSkge1xuXHRcdGhlaWdodCArPSB0aGlzW2RldGFpbHNEZWNvRWxlbWVudFN5bWJvbF0uc2Nyb2xsSGVpZ2h0ICsgMTtcblx0fVxuXG5cdGlmIChoZWlnaHQgPT09IDApIHtcblx0XHRoZWlnaHQgPSB0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5zY3JvbGxIZWlnaHQ7XG5cdFx0aWYgKGhlaWdodCA9PT0gMCkge1xuXHRcdFx0aGVpZ2h0ID0gXCJhdXRvXCI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGhlaWdodCArPSBcInB4XCI7XG5cdH1cblxuXHR0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5zdHlsZS5zZXRQcm9wZXJ0eShcblx0XHRcIi0tbW9uc3Rlci1oZWlnaHRcIixcblx0XHRoZWlnaHQsXG5cdFx0XCJpbXBvcnRhbnRcIixcblx0KTtcblx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1cIiArIHRoaXNbbmFtZVN5bWJvbF0gKyBcIi1hZGp1c3QtaGVpZ2h0XCIsIHt9KTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUmVzaXplT2JzZXJ2ZXJPYnNlcnZhdGlvbigpIHs7XG5cblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0uZGlzY29ubmVjdCgpO1xuXG5cdGNvbnN0IHNsb3R0ZWROb2RlcyA9IGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMpO1xuXHRzbG90dGVkTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUobm9kZSk7XG5cdH0pO1xuXG5cdGlmICh0aGlzW2RldGFpbHNDb250YWluZXJFbGVtZW50U3ltYm9sXSkge1xuXHRcdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUodGhpc1tkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbF0pO1xuXHR9XG5cblx0dGhpcy5hZGp1c3RIZWlnaHQoKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkgeztcblxuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRpbml0U2xvdENoYW5nZWRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBpbml0U2xvdENoYW5nZWRIYW5kbGVyKCkgeztcblxuXHR0aGlzW2RldGFpbHNTbG90RWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcInNsb3RjaGFuZ2VcIiwgKCkgPT4ge1xuXHRcdHVwZGF0ZVJlc2l6ZU9ic2VydmVyT2JzZXJ2YXRpb24uY2FsbCh0aGlzKTtcblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHs7XG5cblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXVwiLFxuXHQpO1xuXHR0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWRldGFpbF1cIixcblx0KTtcblx0dGhpc1tkZXRhaWxzU2xvdEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCJzbG90XCIpO1xuXHR0aGlzW2RldGFpbHNDb250YWluZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl1cIixcblx0KTtcblx0dGhpc1tkZXRhaWxzRGVjb0VsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9ZGVjb11cIixcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0Q29uZmlnS2V5KCkgeztcblx0cmV0dXJuIGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5KHRoaXNbbmFtZVN5bWJvbF0sIHRoaXMuaWQsIFwic3RhdGVcIik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdXBkYXRlU3RhdGVDb25maWcoKSB7O1xuXG5cdGlmICghdGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wZXJzaXN0U3RhdGVcIikpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoIXRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXHRjb25zdCBob3N0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIm1vbnN0ZXItaG9zdFwiKTtcblx0aWYgKCEoaG9zdCAmJiB0aGlzLmlkKSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IGNvbmZpZ0tleSA9IGdldENvbmZpZ0tleS5jYWxsKHRoaXMpO1xuXG5cdHRyeSB7XG5cdFx0aG9zdC5zZXRDb25maWcoY29uZmlnS2V5LCB0aGlzLmlzT3BlbigpKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBTdHJpbmcoZXJyb3IpKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAqL1xuZnVuY3Rpb24gaW5pdFN0YXRlRnJvbUhvc3RDb25maWcoKSB7O1xuXG5cdGlmICghdGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wZXJzaXN0U3RhdGVcIikpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblx0Y29uc3QgaG9zdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJtb25zdGVyLWhvc3RcIik7XG5cblx0aWYgKCEoaG9zdCAmJiB0aGlzLmlkKSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0Ly8gTm90IHdvcmtpbmcgcHJvcHBlclxuXHQvLyBpZiAoIShob3N0IGluc3RhbmNlb2YgSG9zdCkpIHtcblx0Ly8gICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0aGUgaG9zdCBtdXN0IGJlIGEgbW9uc3Rlci1ob3N0XCIpO1xuXHQvLyB9XG5cblx0Y29uc3QgY29uZmlnS2V5ID0gZ2V0Q29uZmlnS2V5LmNhbGwodGhpcyk7XG5cdHJldHVybiBob3N0XG5cdFx0LmdldENvbmZpZyhjb25maWdLZXkpXG5cdFx0LnRoZW4oKHN0YXRlKSA9PiB7XG5cdFx0XHRpZiAoc3RhdGUgPT09IHRydWUpIHtcblx0XHRcdFx0dGhpcy5vcGVuKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuY2F0Y2goKGVycm9yKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBTdHJpbmcoZXJyb3IpKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0UmVzaXplT2JzZXJ2ZXIoKSB7O1xuXG5cdC8vIGFnYWluc3QgZmxpY2tlcmluZ1xuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuXHRcdGlmICh0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0udG91Y2goKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRkZWxldGUgdGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdID0gbmV3IERlYWRNYW5zU3dpdGNoKDIwMCwgKCkgPT4ge1xuXHRcdFx0Y2hlY2tBbmRSZWFycmFuZ2VDb250ZW50LmNhbGwodGhpcyk7XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBjaGVja0FuZFJlYXJyYW5nZUNvbnRlbnQoKSB7O1xuXHR0aGlzLmFkanVzdEhlaWdodCgpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIiBjbGFzcz1cIm92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImRldGFpbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMuY29udGFpbmVyXCIgcGFydD1cImNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlY28tbGluZVwiIGRhdGEtbW9uc3Rlci1yb2xlPVwiZGVjb1wiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChDb2xsYXBzZSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBzY2h1a2FpIEdtYkhcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IEhvc3QgfSBmcm9tIFwiLi9ob3N0Lm1qc1wiO1xuaW1wb3J0IHsgRGV0YWlsc1N0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L2RldGFpbHMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfQlVUVE9OX0xBQkVMIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleSB9IGZyb20gXCIuL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBDb2xsYXBzZSwgbmFtZVN5bWJvbCB9IGZyb20gXCIuL2NvbGxhcHNlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBEZXRhaWxzIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGJ1dHRvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJidXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBidXR0b25FdmVudEhhbmRsZXJTeW1ib2wgPSBTeW1ib2woXCJidXR0b25FdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogVGhlIERldGFpbHMgY29tcG9uZW50IGlzIHVzZWQgdG8gc2hvdyBhIGRldGFpbHMuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9kZXRhaWxzLnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItZGV0YWlscyAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1kZXRhaWxzJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItZGV0YWlscz48L21vbnN0ZXItZGV0YWlscz5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgJ0BzY2h1a2FpL2NvbXBvbmVudC1zdGF0ZS9zb3VyY2UvZGV0YWlscy5tanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1kZXRhaWxzJyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgQm9keSBzaG91bGQgaGF2ZSBhIGNsYXNzIFwiaGlkZGVuXCIgdG8gZW5zdXJlIHRoYXQgdGhlIHN0eWxlcyBhcmUgYXBwbGllZCBjb3JyZWN0bHkuXG4gKlxuICogYGBgY3NzXG4gKiBib2R5LmhpZGRlbiB7XG4gKiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAc3RhcnR1bWwgZGV0YWlscy5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIENvbGxhcHNlXG4gKiBDb2xsYXBzZSA8fC0tIERldGFpbHNcbiAqIEBlbmR1bWxcbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0XG4gKiBAc3VtbWFyeSBBIHNpbXBsZSBkZXRhaWxzIGNvbXBvbmVudFxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0LkRldGFpbHMuZXZlbnQ6bW9uc3Rlci1kZXRhaWxzLWJlZm9yZS1vcGVuXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuRGV0YWlscy5ldmVudDptb25zdGVyLWRldGFpbHMtb3BlblxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0LkRldGFpbHMuZXZlbnQ6bW9uc3Rlci1kZXRhaWxzLWJlZm9yZS1jbG9zZVxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0LkRldGFpbHMuZXZlbnQ6bW9uc3Rlci1kZXRhaWxzLWNsb3NlZFxuICovXG5jbGFzcyBEZXRhaWxzIGV4dGVuZHMgQ29sbGFwc2Uge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9jb21wb25lbnQtaG9zdC9kZXRhaWxzQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHQvLyB0aGUgbmFtZSBpcyBvbmx5IHVzZWQgZm9yIHRoZSBob3N0IGNvbmZpZyBhbmQgdGhlIGV2ZW50IG5hbWVcblx0XHR0aGlzW25hbWVTeW1ib2xdID0gXCJkZXRhaWxzXCI7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNsYXNzZXMgQ1NTIGNsYXNzZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzZXMuYnV0dG9uIENTUyBjbGFzcyBmb3IgdGhlIGJ1dHRvblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gYnV0dG9uIEJ1dHRvbiBjb25maWd1cmF0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBidXR0b24ubGFiZWwgQnV0dG9uIGxhYmVsXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZWF0dXJlcyBGZWF0dXJlIGNvbmZpZ3VyYXRpb25cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5hY2NvcmRpb24gRW5hYmxlIGFjY29yZGlvbiBtb2RlXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMucGVyc2lzdFN0YXRlIFBlcnNpc3QgdGhlIHN0YXRlIGluIHRoZSBob3N0IGNvbmZpZ3VyYXRpb25cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRidXR0b246IFwiRGV0YWlsc1wiLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuRGV0YWlsc31cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0QnV0dG9uTGFiZWwuY2FsbCh0aGlzKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHs7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdGNvbnN0IGNvbnRhaW5Eb2N1bWVudCA9IHRoaXMuc2hhZG93Um9vdDtcblxuXHRcdGlmIChjb250YWluRG9jdW1lbnQgIT09IG51bGwpIHtcblx0XHRcdGNvbnN0IHByZXZpb3VzRWxlbWVudCA9IHRoaXMucHJldmlvdXNFbGVtZW50U2libGluZztcblx0XHRcdGlmIChwcmV2aW91c0VsZW1lbnQgJiYgcHJldmlvdXNFbGVtZW50LnRhZ05hbWUgPT09IFwiTU9OU1RFUi1ERVRBSUxTXCIpIHtcblx0XHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5zdHlsZS5ib3JkZXJUb3AgPSBcIjBcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWRldGFpbHNcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtBcnJheTxDU1NTdHlsZVNoZWV0Pn1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdGNvbnN0IGNzcyA9IHN1cGVyLmdldENTU1N0eWxlU2hlZXQoKTtcblx0XHRjc3MucHVzaChEZXRhaWxzU3R5bGVTaGVldCk7XG5cdFx0cmV0dXJuIGNzcztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7O1xuXG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1idXR0b25dXCIsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHs7XG5cblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tidXR0b25FdmVudEhhbmRsZXJTeW1ib2xdID0gKGV2ZW50KSA9PiB7XG5cdFx0dGhpcy50b2dnbGUoKTtcblx0fTtcblxuXHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XCJjbGlja1wiLFxuXHRcdHRoaXNbYnV0dG9uRXZlbnRIYW5kbGVyU3ltYm9sXSxcblx0KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBpbml0QnV0dG9uTGFiZWwoKSB7O1xuXG5cdGxldCBsYWJlbDtcblx0Y29uc3Qgc2V0TGFiZWwgPSBmYWxzZTtcblx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9CVVRUT05fTEFCRUwpKSB7XG5cdFx0bGFiZWwgPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMKTtcblx0fSBlbHNlIHtcblx0XHRsYWJlbCA9IHRoaXMuaW5uZXJUZXh0O1xuXHR9XG5cblx0aWYgKCFpc1N0cmluZyhsYWJlbCkpIHtcblx0XHRsYWJlbCA9IFwiXCI7XG5cdH1cblxuXHRsYWJlbCA9IGxhYmVsLnRyaW0oKTtcblxuXHRpZiAobGFiZWwgPT09IFwiXCIpIHtcblx0XHRsYWJlbCA9IHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLmJ1dHRvblwiLCBcIkRldGFpbHNcIik7XG5cdH1cblxuXHRpZiAobGFiZWwubGVuZ3RoID4gMTAwKSB7XG5cdFx0bGFiZWwgPSBgJHtsYWJlbC5zdWJzdHJpbmcoMCwgOTkpfVx1MjAyNmA7XG5cdH1cblxuXHR0aGlzLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMLCBsYWJlbCk7XG5cdHRoaXMuc2V0T3B0aW9uKFwibGFiZWxzLmJ1dHRvblwiLCBsYWJlbCk7XG5cblx0cmV0dXJuIGxhYmVsO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRDb25maWdLZXkoKSB7O1xuXHRyZXR1cm4gZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkoXCJkZXRhaWxzXCIsIHRoaXMuaWQsIFwic3RhdGVcIik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiIGNsYXNzPVwib3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3VtbWFyeVwiIHBhcnQ9XCJzdW1tYXJ5XCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBwYXJ0PVwiYnV0dG9uXCIgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMuYnV0dG9uIHwgZGVmYXVsdDpjbGljayBtZVwiPmNsaWNrIG1lXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJkZXRhaWxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjbGFzc2VzLmNvbnRhaW5lclwiIHBhcnQ9XCJjb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWNvLWxpbmVcIiBkYXRhLW1vbnN0ZXItcm9sZT1cImRlY29cIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoRGV0YWlscyk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyByYW5kb20gfSBmcm9tIFwiLi4vbWF0aC9yYW5kb20ubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBJRCB9IGZyb20gXCIuL2lkLm1qc1wiO1xuXG5leHBvcnQgeyBSYW5kb21JRCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5sZXQgaW50ZXJuYWxDb3VudGVyID0gMDtcblxuLyoqXG4gKiBUaGUgYFJhbmRvbUlEYCBjbGFzcyBwcm92aWRlcyBhIHVuaXF1ZSBJRCBmb3IgYW4gaXRlbS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAc3VtbWFyeSBjbGFzcyB0byBnZW5lcmF0ZSByYW5kb20gbnVtYmVyc1xuICovXG5jbGFzcyBSYW5kb21JRCBleHRlbmRzIElEIHtcblx0LyoqXG5cdCAqIGNyZWF0ZSBuZXcgb2JqZWN0XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aW50ZXJuYWxDb3VudGVyICs9IDE7XG5cblx0XHR0aGlzLmlkID1cblx0XHRcdGdldEdsb2JhbCgpXG5cdFx0XHRcdC5idG9hKHJhbmRvbSgxLCAxMDAwMCkpXG5cdFx0XHRcdC5yZXBsYWNlKC89L2csIFwiXCIpXG5cdFx0XHRcdC8qKiBObyBudW1iZXJzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIElELCBiZWNhdXNlIG9mIHBvc3NpYmxlIHByb2JsZW1zIHdpdGggRE9NICovXG5cdFx0XHRcdC5yZXBsYWNlKC9eWzAtOV0rLywgXCJYXCIpICsgaW50ZXJuYWxDb3VudGVyO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyByYW5kb20gfSBmcm9tIFwiLi4vbWF0aC9yYW5kb20ubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4vZ2xvYmFsLm1qc1wiO1xuXG5leHBvcnQgeyBVVUlEIH07XG5cbi8qKlxuICogVGhlIFVVSUQgY2xhc3MgbWFrZXMgaXQgcG9zc2libGUgdG8gZ2V0IGEgdW5pcXVlIFVVSUQgZm9yIGFuIG9iamVjdC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkXG4gKi9cbmNsYXNzIFVVSUQgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0bGV0IHV1aWQgPSBjcmVhdGVXaXRoQ3J5cHRvKCk7XG5cblx0XHRpZiAodXVpZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR1dWlkID0gY3JlYXRlV2l0aFJhbmRvbSgpO1xuXHRcdH1cblxuXHRcdGlmICh1dWlkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkXCIpO1xuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0dmFsdWU6IHV1aWQsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJ2YWx1ZVwiXTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuICovXG5mdW5jdGlvbiBjcmVhdGVXaXRoUmFuZG9tKCkge1xuXHRyZXR1cm4gXCJ4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHhcIi5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XG5cdFx0Y29uc3QgciA9IChyYW5kb20oMCwgNjUwMDApICogMTYpIHwgMDtcblx0XHRjb25zdCB2ID0gYyA9PT0gXCJ4XCIgPyByIDogKHIgJiAweDMpIHwgMHg4O1xuXHRcdHJldHVybiB2LnRvU3RyaW5nKDE2KVswXTtcblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVdpdGhDcnlwdG8oKSB7XG5cdGNvbnN0IGNyeXB0ID0gZ2V0R2xvYmFsT2JqZWN0KFwiY3J5cHRvXCIpO1xuXHRpZiAoIWlzT2JqZWN0KGNyeXB0KSkgcmV0dXJuO1xuXHRpZiAodHlwZW9mIGNyeXB0Py5bXCJyYW5kb21VVUlEXCJdKSByZXR1cm47XG5cdHJldHVybiBjcnlwdC5yYW5kb21VVUlEKCk7XG59XG4iLCAiaWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSB7XG5cbiAgICAoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBzYXlzd2hvID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQsIHRlbSxcbiAgICAgICAgICAgICAgICBNID0gdWEubWF0Y2goLyhvcGVyYXxjaHJvbWV8c2FmYXJpfGZpcmVmb3h8bXNpZXx0cmlkZW50KD89XFwvKSlcXC8/XFxzKihcXGQrKS9pKSB8fCBbXTtcbiAgICAgICAgICAgIGlmICgvdHJpZGVudC9pLnRlc3QoTVsxXSkpIHtcbiAgICAgICAgICAgICAgICB0ZW0gPSAvXFxicnZbIDpdKyhcXGQrKS9nLmV4ZWModWEpIHx8IFtdO1xuICAgICAgICAgICAgICAgIHJldHVybiAnSUUgJyArICh0ZW1bMV0gfHwgJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1bMV0gPT09ICdDaHJvbWUnKSB7XG4gICAgICAgICAgICAgICAgdGVtID0gdWEubWF0Y2goL1xcYihPUFJ8RWRnZSlcXC8oXFxkKykvKTtcbiAgICAgICAgICAgICAgICBpZiAodGVtICE9IG51bGwpIHJldHVybiB0ZW0uc2xpY2UoMSkuam9pbignICcpLnJlcGxhY2UoJ09QUicsICdPcGVyYScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgTSA9IE1bMl0gPyBbTVsxXSwgTVsyXV0gOiBbbmF2aWdhdG9yLmFwcE5hbWUsIG5hdmlnYXRvci5hcHBWZXJzaW9uLCAnLT8nXTtcbiAgICAgICAgICAgIGlmICgodGVtID0gdWEubWF0Y2goL3ZlcnNpb25cXC8oXFxkKykvaSkpICE9IG51bGwpIE0uc3BsaWNlKDEsIDEsIHRlbVsxXSk7XG4gICAgICAgICAgICByZXR1cm4gTS5qb2luKCcgJyk7XG4gICAgICAgIH0pKCk7XG5cblxuICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2gxJylcbiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgKz0gXCIgXCIgKyBzYXlzd2hvO1xuXG4gICAgfSkoKTtcblxuXG59XG4iLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IGNoYWkgZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7c2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlck1vY2t9IGZyb20gXCIuLi8uLi8uLi91dGlsL2ludGVyc2VjdGlvbi1tb2NrLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5sZXQgbW9ja2ludGVyc2VjdGlvbm9ic2VydmVyO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5kZXNjcmliZSgnUmVsb2FkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgLy8ganNkb20tdGVzdGluZy1tb2NrcyBuZWVkIGplc3RcbiAgICBsZXQgUmVsb2FkLCB2aWV3cG9ydCwgbW9ja1ZpZXdwb3J0O1xuXG4gICAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXIucmVzdG9yZSgpO1xuICAgIH0pXG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXIgPSBzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyTW9jaygpO1xuXG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3JlbG9hZC5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFJlbG9hZCA9IG1bJ1JlbG9hZCddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCduZXcgUmVsb2FkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICAvLyBsYW5ndWFnZT1IVE1MXG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtb25zdGVyLXJlbG9hZD48L21vbnN0ZXItcmVsb2FkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci1yZWxvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDInKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci1yZWxvYWQnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiByZWxvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItcmVsb2FkJykpLmlzLmluc3RhbmNlb2YoUmVsb2FkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbW9ja3M7XG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhcyBubyBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3QgcmVsb2FkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1yZWxvYWQnKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHJlbG9hZCk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXJlbG9hZCcpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnbG9hZCBjb250ZW50JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBtb2NrcywgZmV0Y2hSZWZlcmVuY2UsIGludGVyc2VjdGlvbk9ic2VydmVyO1xuICAgICAgICBiZWZvcmVFYWNoKChkb25lKSA9PiB7XG4gICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgLy8gbGFuZ3VhZ2U9SFRNTFxuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0aGlzLWNvbnRlbnRcIj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYDtcblxuICAgICAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxbJ2ZldGNoJ107XG5cbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0gbmV3IE1hcDtcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvaHRtbCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvazp0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOjIwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0MikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlMignaGVsbG8gd29ybGQhJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2FkIGNvbnRlbnQgZnJvbSB1cmwnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCByZWxvYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXJlbG9hZCcpO1xuICAgICAgICAgICAgcmVsb2FkLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXVybCcsICdodHRwOi8vbG9jYWxob3N0LycpXG5cbiAgICAgICAgICAgIHJlbG9hZC5hZGRFdmVudExpc3RlbmVyKCdtb25zdGVyLWZldGNoZWQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci1yZWxvYWQnKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnaGVsbG8gd29ybGQnKTtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChyZWxvYWQpO1xuICAgICAgICAgICAgbW9ja2ludGVyc2VjdGlvbm9ic2VydmVyLmdldEluc3RhbmNlKCkuZW50ZXJOb2RlKCk7XG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCBjaGFpIGZyb20gJy4vaW5kZXguanMnO1xuXG5leHBvcnQgY29uc3QgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5leHBvcnQgY29uc3QgdmVyc2lvbiA9IGNoYWkudmVyc2lvbjtcbmV4cG9ydCBjb25zdCBBc3NlcnRpb24gPSBjaGFpLkFzc2VydGlvbjtcbmV4cG9ydCBjb25zdCBBc3NlcnRpb25FcnJvciA9IGNoYWkuQXNzZXJ0aW9uRXJyb3I7XG5leHBvcnQgY29uc3QgdXRpbCA9IGNoYWkudXRpbDtcbmV4cG9ydCBjb25zdCBjb25maWcgPSBjaGFpLmNvbmZpZztcbmV4cG9ydCBjb25zdCB1c2UgPSBjaGFpLnVzZTtcbmV4cG9ydCBjb25zdCBzaG91bGQgPSBjaGFpLnNob3VsZDtcbmV4cG9ydCBjb25zdCBhc3NlcnQgPSBjaGFpLmFzc2VydDtcbmV4cG9ydCBjb25zdCBjb3JlID0gY2hhaS5jb3JlO1xuXG5leHBvcnQgZGVmYXVsdCBjaGFpO1xuIiwgIi8qKioqKioqKlxuXG4gQ29udmVydCBjaGFpLWRvbSAxLjguMSB0byBlcyBtb2R1bGUsIHdpdGhvdXQgYW55IG90aGVyIG1vZGlmaWNhdGlvbi5cbiBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9uYXRoYW5ib2t0YWUvY2hhaS1kb20vYmxvYi84NmMzNDIzL2NoYWktZG9tLmpzXG4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uYXRoYW5ib2t0YWUvY2hhaS1kb20vaXNzdWVzLzM4XG5cbiBVc2FnZTpcbiBpbXBvcnQgeyBjaGFpRG9tIH0gZnJvbSAnPHBhdGgtdG8+L2NoYWktZG9tJztcbiBjaGFpLnVzZShjaGFpRG9tKTtcblxuIENvcHlyaWdodCAoYykgMjAxNSBOYXRoYW4gQmxhY2sgYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuXG4gVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUIGxpY2Vuc2UuIEZvciBhIGNvcHksIHNlZSA8aHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQ+LlxuXG4gKioqKioqKioqKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYWlEb20oY2hhaSwgdXRpbHMpIHtcbiAgICB2YXIgZmxhZyA9IHV0aWxzLmZsYWcsXG5cbiAgICAgICAgZWxUb1N0cmluZyA9IGZ1bmN0aW9uKGVsKSB7XG4gICAgICAgICAgICBsZXQgZGVzY1xuICAgICAgICAgICAgaWYgKGlzTm9kZUxpc3QoZWwpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsLmxlbmd0aCA9PT0gMCkgcmV0dXJuICdlbXB0eSBOb2RlTGlzdCdcbiAgICAgICAgICAgICAgICBkZXNjID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWwsIDAsIDUpLm1hcChlbFRvU3RyaW5nKS5qb2luKCcsICcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsLmxlbmd0aCA+IDUgPyBkZXNjICsgJy4uLiAoKycgKyAoZWwubGVuZ3RoIC0gNSkgKyAnIG1vcmUpJyA6IGRlc2NcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNIVE1MRWxlbWVudChlbCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZXNjID0gZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICBpZiAoZWwuaWQpIHtcbiAgICAgICAgICAgICAgICBkZXNjICs9ICcjJyArIGVsLmlkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWwuY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICAgICAgZGVzYyArPSAnLicgKyBTdHJpbmcoZWwuY2xhc3NOYW1lKS5yZXBsYWNlKC9cXHMrL2csICcuJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZWwuYXR0cmlidXRlcywgZnVuY3Rpb24oYXR0cikge1xuICAgICAgICAgICAgICAgIGlmIChhdHRyLm5hbWUgIT09ICdjbGFzcycgJiYgYXR0ci5uYW1lICE9PSAnaWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2MgKz0gJ1snICsgYXR0ci5uYW1lICsgKGF0dHIudmFsdWUgPyAnPVwiJyArIGF0dHIudmFsdWUgKyAnXCJdJyA6ICddJylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcmV0dXJuIGRlc2NcbiAgICAgICAgfSxcblxuICAgICAgICBhdHRyQXNzZXJ0ID0gZnVuY3Rpb24obmFtZSwgdmFsKSB7XG4gICAgICAgICAgICBsZXQgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKSwgYWN0dWFsID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpXG5cbiAgICAgICAgICAgIGlmICghZmxhZyh0aGlzLCAnbmVnYXRlJykgfHwgdW5kZWZpbmVkID09PSB2YWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgISFlbC5hdHRyaWJ1dGVzW25hbWVdXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gaGF2ZSBhbiBhdHRyaWJ1dGUgI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIG5vdCB0byBoYXZlIGFuIGF0dHJpYnV0ZSAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICwgbmFtZVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHVuZGVmaW5lZCAhPT0gdmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9PT0gYWN0dWFsXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gaGF2ZSBhbiBhdHRyaWJ1dGUgJyArIHV0aWxzLmluc3BlY3QobmFtZSkgKyAnIHdpdGggdGhlIHZhbHVlICN7ZXhwfSwgYnV0IHRoZSB2YWx1ZSB3YXMgI3thY3R9J1xuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIG5vdCB0byBoYXZlIGFuIGF0dHJpYnV0ZSAnICsgdXRpbHMuaW5zcGVjdChuYW1lKSArICcgd2l0aCB0aGUgdmFsdWUgI3thY3R9J1xuICAgICAgICAgICAgICAgICAgICAsIHZhbFxuICAgICAgICAgICAgICAgICAgICAsIGFjdHVhbFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmxhZyh0aGlzLCAnb2JqZWN0JywgYWN0dWFsKVxuICAgICAgICB9LFxuXG4gICAgICAgIGlzSFRNTEVsZW1lbnQgPSBmdW5jdGlvbihlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGVsLm5vZGVUeXBlID09PSAxIC8vIHdpbmRvdy5Ob2RlLkVMRU1FTlRfTk9ERVxuICAgICAgICB9LFxuXG4gICAgICAgIGlzTm9kZUxpc3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgTm9kZUxpc3RdJ1xuICAgICAgICB9XG5cbiAgICB1dGlscy5lbFRvU3RyaW5nID0gZWxUb1N0cmluZ1xuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnYXR0cicsIGF0dHJBc3NlcnQpXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCdhdHRyaWJ1dGUnLCBhdHRyQXNzZXJ0KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCdjbGFzcycsIGZ1bmN0aW9uKGNsYXNzTmFtZSkge1xuICAgICAgICB2YXIgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGhhdmUgY2xhc3MgI3tleHB9J1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyBub3QgdG8gaGF2ZSBjbGFzcyAje2V4cH0nXG4gICAgICAgICAgICAsIGNsYXNzTmFtZVxuICAgICAgICApXG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnaWQnLCBmdW5jdGlvbihpZCkge1xuICAgICAgICB2YXIgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgIGVsLmlkID09IGlkXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGhhdmUgaWQgI3tleHB9J1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyBub3QgdG8gaGF2ZSBpZCAje2V4cH0nXG4gICAgICAgICAgICAsIGlkXG4gICAgICAgIClcbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCdodG1sJywgZnVuY3Rpb24oaHRtbCkge1xuICAgICAgICB2YXIgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKSwgYWN0dWFsID0gZmxhZyh0aGlzLCAnb2JqZWN0JykuaW5uZXJIVE1MXG5cbiAgICAgICAgaWYgKGZsYWcodGhpcywgJ2NvbnRhaW5zJykpIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgIGFjdHVhbC5pbmRleE9mKGh0bWwpID49IDBcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAje2FjdH0gdG8gY29udGFpbiBIVE1MICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAje2FjdH0gbm90IHRvIGNvbnRhaW4gSFRNTCAje2V4cH0nXG4gICAgICAgICAgICAgICAgLCBodG1sXG4gICAgICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgIGFjdHVhbCA9PT0gaHRtbFxuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gaGF2ZSBIVE1MICN7ZXhwfSwgYnV0IHRoZSBIVE1MIHdhcyAje2FjdH0nXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyBub3QgdG8gaGF2ZSBIVE1MICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAsIGh0bWxcbiAgICAgICAgICAgICAgICAsIGFjdHVhbFxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZCgndHJpbW1lZCcsIG51bGwsIGZ1bmN0aW9uKCkge1xuICAgICAgICBmbGFnKHRoaXMsICd0cmltLXRleHQnLCB0cnVlKVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ3RleHQnLCBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKSwgY29udGFpbnMgPSBmbGFnKHRoaXMsICdjb250YWlucycpLFxuICAgICAgICAgICAgdHJpbSA9IGZsYWcodGhpcywgJ3RyaW0tdGV4dCcpLCBhY3R1YWwsIHJlc3VsdFxuXG4gICAgICAgIGlmIChpc05vZGVMaXN0KG9iaikpIHtcbiAgICAgICAgICAgIGFjdHVhbCA9IEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChvYmosIGZ1bmN0aW9uKGVsKSB7IHJldHVybiB0cmltID8gZWwudGV4dENvbnRlbnQudHJpbSgpIDogZWwudGV4dENvbnRlbnQgfSlcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRleHQpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29udGFpbnMgP1xuICAgICAgICAgICAgICAgICAgICB0ZXh0W2ZsYWcodGhpcywgJ25lZ2F0ZScpID8gJ3NvbWUnIDogJ2V2ZXJ5J10oZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zb21lLmNhbGwob2JqLCBmdW5jdGlvbihlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodHJpbSA/IGVsLnRleHRDb250ZW50LnRyaW0oKSA6IGVsLnRleHRDb250ZW50KSA9PT0gdFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICB1dGlscy5lcWwoYWN0dWFsLCB0ZXh0KVxuXG4gICAgICAgICAgICAgICAgYWN0dWFsID0gYWN0dWFsLmpvaW4oKVxuICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LmpvaW4oKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhY3R1YWwgPSBhY3R1YWwuam9pbignJylcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBjb250YWlucyA/IGFjdHVhbC5pbmRleE9mKHRleHQpID49IDAgOiBhY3R1YWwgPT09IHRleHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjdHVhbCA9IHRyaW0gPyBvYmoudGV4dENvbnRlbnQudHJpbSgpIDogb2JqLnRleHRDb250ZW50XG4gICAgICAgICAgICByZXN1bHQgPSBjb250YWlucyA/IGFjdHVhbC5pbmRleE9mKHRleHQpID49IDAgOiBhY3R1YWwgPT09IHRleHRcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvYmpEZXNjID0gZWxUb1N0cmluZyhvYmopLCB0ZXh0TXNnID0gdHJpbSA/ICd0cmltbWVkIHRleHQnIDogJ3RleHQnXG4gICAgICAgIGlmIChjb250YWlucykge1xuICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgcmVzdWx0XG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIG9iakRlc2MgKyAnIHRvIGNvbnRhaW4gI3tleHB9LCBidXQgdGhlICcgKyB0ZXh0TXNnICsgJyB3YXMgI3thY3R9J1xuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBvYmpEZXNjICsgJyBub3QgdG8gY29udGFpbiAje2V4cH0sIGJ1dCB0aGUgJyArIHRleHRNc2cgKyAnIHdhcyAje2FjdH0nXG4gICAgICAgICAgICAgICAgLCB0ZXh0XG4gICAgICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgIHJlc3VsdFxuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBvYmpEZXNjICsgJyB0byBoYXZlICcgKyB0ZXh0TXNnICsgJyAje2V4cH0sIGJ1dCB0aGUgJyArIHRleHRNc2cgKyAnIHdhcyAje2FjdH0nXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIG9iakRlc2MgKyAnIG5vdCB0byBoYXZlICcgKyB0ZXh0TXNnICsgJyAje2V4cH0nXG4gICAgICAgICAgICAgICAgLCB0ZXh0XG4gICAgICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ3ZhbHVlJywgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdmFyIGVsID0gZmxhZyh0aGlzLCAnb2JqZWN0JyksIGFjdHVhbCA9IGZsYWcodGhpcywgJ29iamVjdCcpLnZhbHVlXG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgZmxhZyh0aGlzLCAnb2JqZWN0JykudmFsdWUgPT09IHZhbHVlXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGhhdmUgdmFsdWUgI3tleHB9LCBidXQgdGhlIHZhbHVlIHdhcyAje2FjdH0nXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIG5vdCB0byBoYXZlIHZhbHVlICN7ZXhwfSdcbiAgICAgICAgICAgICwgdmFsdWVcbiAgICAgICAgICAgICwgYWN0dWFsXG4gICAgICAgIClcbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24ub3ZlcndyaXRlUHJvcGVydHkoJ2V4aXN0JywgZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICAgICAgaWYgKGlzTm9kZUxpc3Qob2JqKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICBvYmoubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCBhbiBlbXB0eSBOb2RlTGlzdCB0byBoYXZlIG5vZGVzJ1xuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgZXhpc3QnKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLm92ZXJ3cml0ZVByb3BlcnR5KCdlbXB0eScsIGZ1bmN0aW9uKF9zdXBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICAgICAgIGlmIChpc0hUTUxFbGVtZW50KG9iaikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgb2JqLmNoaWxkcmVuLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBiZSBlbXB0eSdcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGJlIGVtcHR5JylcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlTGlzdChvYmopKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgIG9iai5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gYmUgZW1wdHknXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBiZSBlbXB0eScpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24ub3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kKCdsZW5ndGgnLFxuICAgICAgICBmdW5jdGlvbihfc3VwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICAgICAgICAgICBpZiAoaXNOb2RlTGlzdChvYmopIHx8IGlzSFRNTEVsZW1lbnQob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYWN0dWFsTGVuZ3RoID0gb2JqLmNoaWxkcmVuID8gb2JqLmNoaWxkcmVuLmxlbmd0aCA6IG9iai5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxMZW5ndGggPT09IGxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gaGF2ZSAje2V4cH0gY2hpbGRyZW4gYnV0IGl0IGhhZCAje2FjdH0gY2hpbGRyZW4nXG4gICAgICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgaGF2ZSAje2V4cH0gY2hpbGRyZW4nXG4gICAgICAgICAgICAgICAgICAgICAgICAsIGxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgLCBhY3R1YWxMZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmdW5jdGlvbihfc3VwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKVxuXG5cbiAgICBjaGFpLkFzc2VydGlvbi5vdmVyd3JpdGVNZXRob2QoJ21hdGNoJywgZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAgICAgICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAgICAgICBpZiAoaXNIVE1MRWxlbWVudChvYmopKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgIG9iai5tYXRjaGVzKHNlbGVjdG9yKVxuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBtYXRjaCAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBtYXRjaCAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICwgc2VsZWN0b3JcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTm9kZUxpc3Qob2JqKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICAoISFvYmoubGVuZ3RoICYmIEFycmF5LnByb3RvdHlwZS5ldmVyeS5jYWxsKG9iaiwgZnVuY3Rpb24oZWwpIHsgcmV0dXJuIGVsLm1hdGNoZXMoc2VsZWN0b3IpIH0pKVxuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBtYXRjaCAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBtYXRjaCAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICwgc2VsZWN0b3JcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24ub3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kKCdjb250YWluJyxcbiAgICAgICAgZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc3ViaXRlbSkge1xuICAgICAgICAgICAgICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICAgICAgICAgIGlmIChpc0hUTUxFbGVtZW50KG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzdWJpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgISFvYmoucXVlcnlTZWxlY3RvcihzdWJpdGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIGNvbnRhaW4gI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBjb250YWluICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHN1Yml0ZW0pXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmouY29udGFpbnMoc3ViaXRlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBjb250YWluICcgKyBlbFRvU3RyaW5nKHN1Yml0ZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGNvbnRhaW4gJyArIGVsVG9TdHJpbmcoc3ViaXRlbSkpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgX3N1cGVyLmNhbGwodGhpcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIClcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZGVzY2VuZGFudCcsIGZ1bmN0aW9uKHN1Yml0ZW0pIHtcbiAgICAgICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpLCBhY3R1YWwgPSBzdWJpdGVtXG5cbiAgICAgICAgaWYgKHR5cGVvZiBzdWJpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgYWN0dWFsID0gb2JqLnF1ZXJ5U2VsZWN0b3Ioc3ViaXRlbSlcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICEhYWN0dWFsXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gaGF2ZSBkZXNjZW5kYW50ICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgaGF2ZSBkZXNjZW5kYW50ICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAsIHN1Yml0ZW0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICBvYmouY29udGFpbnMoc3ViaXRlbSlcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBjb250YWluICcgKyBlbFRvU3RyaW5nKHN1Yml0ZW0pXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGNvbnRhaW4gJyArIGVsVG9TdHJpbmcoc3ViaXRlbSkpXG4gICAgICAgIH1cblxuICAgICAgICBmbGFnKHRoaXMsICdvYmplY3QnLCBhY3R1YWwpXG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZGVzY2VuZGFudHMnLCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JyksXG4gICAgICAgICAgICBhY3R1YWwgPSBvYmoucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcilcbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAhIWFjdHVhbC5sZW5ndGhcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIGhhdmUgZGVzY2VuZGFudHMgI3tleHB9J1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGhhdmUgZGVzY2VuZGFudHMgI3tleHB9J1xuICAgICAgICAgICAgLCBzZWxlY3RvcilcbiAgICAgICAgZmxhZyh0aGlzLCAnb2JqZWN0JywgYWN0dWFsKVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnZGlzcGxheWVkJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlbCA9IGZsYWcodGhpcywgJ29iamVjdCcpLFxuICAgICAgICAgICAgYWN0dWFsID0gZG9jdW1lbnQuYm9keS5jb250YWlucyhlbCkgPyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCkuZGlzcGxheSA6IGVsLnN0eWxlLmRpc3BsYXlcblxuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgIGFjdHVhbCAhPT0gJ25vbmUnXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGJlIGRpc3BsYXllZCwgYnV0IGl0IHdhcyBub3QnXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIG5vdCBiZSBkaXNwbGF5ZWQsIGJ1dCBpdCB3YXMgYXMgJyArIGFjdHVhbFxuICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgKVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRQcm9wZXJ0eSgndmlzaWJsZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKSxcbiAgICAgICAgICAgIGFjdHVhbCA9IGRvY3VtZW50LmJvZHkuY29udGFpbnMoZWwpID8gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLnZpc2liaWxpdHkgOiBlbC5zdHlsZS52aXNpYmlsaXR5XG5cbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICBhY3R1YWwgIT09ICdoaWRkZW4nICYmIGFjdHVhbCAhPT0gJ2NvbGxhcHNlJ1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBiZSB2aXNpYmxlLCBidXQgaXQgd2FzICcgKyAoYWN0dWFsID09PSAnaGlkZGVuJyA/ICdoaWRkZW4nIDogJ2NvbGxhcHNlZCcpXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIG5vdCBiZSB2aXNpYmxlLCBidXQgaXQgd2FzJ1xuICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgKVxuICAgIH0pXG59IiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyTW9jayhcbiAgICB7XG4gICAgICAgIHJvb3QgPSBudWxsLFxuICAgICAgICByb290TWFyZ2luID0gJycsXG4gICAgICAgIHRocmVzaG9sZHMgPSBbXSxcbiAgICAgICAgZGlzY29ubmVjdCA9ICgpID0+IG51bGwsXG4gICAgICAgIG9ic2VydmUgPSAoKSA9PiBudWxsLFxuICAgICAgICB0YWtlUmVjb3JkcyA9ICgpID0+IFtdLFxuICAgICAgICB1bm9ic2VydmUgPSAoKSA9PiBudWxsLFxuICAgIH0gPSB7fSkge1xuXG4gICAgY29uc3Qgc2F2ZWRJbXBsZW1lbnRhdGlvbiA9IHdpbmRvdy5JbnRlcnNlY3Rpb25PYnNlcnZlcjtcblxuICAgIGxldCBsYXN0T2JqZWN0O1xuXG4gICAgY2xhc3MgTW9ja0ludGVyc2VjdGlvbk9ic2VydmVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgICAgICAgICB0aGlzLnJvb3RNYXJnaW4gPSByb290TWFyZ2luO1xuICAgICAgICAgICAgdGhpcy50aHJlc2hvbGRzID0gdGhyZXNob2xkcztcbiAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdCA9IGRpc2Nvbm5lY3Q7XG4gICAgICAgICAgICB0aGlzLm9ic2VydmUgPSBvYnNlcnZlO1xuICAgICAgICAgICAgdGhpcy50YWtlUmVjb3JkcyA9IHRha2VSZWNvcmRzO1xuICAgICAgICAgICAgdGhpcy51bm9ic2VydmUgPSB1bm9ic2VydmU7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgICAgICAgICBsYXN0T2JqZWN0ID0gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIGVudGVyTm9kZSgpIHtcblxuICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IFtdO1xuICAgICAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpc0ludGVyc2VjdGluZzogdHJ1ZVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgdGhpc1snY2FsbGJhY2snXShlbnRyaWVzLCB0aGlzKTtcbiAgICAgICAgfVxuXG5cbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInLCB7XG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBNb2NrSW50ZXJzZWN0aW9uT2JzZXJ2ZXJcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWwsICdJbnRlcnNlY3Rpb25PYnNlcnZlcicsIHtcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IE1vY2tJbnRlcnNlY3Rpb25PYnNlcnZlclxuICAgIH0pO1xuXG5cbiAgICByZXR1cm4ge1xuICAgICAgICByZXN0b3JlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBzYXZlZEltcGxlbWVudGF0aW9uO1xuICAgICAgICB9LFxuICAgICAgICBnZXRJbnN0YW5jZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RPYmplY3Q7XG4gICAgICAgIH1cbiAgICB9XG59IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHRlbmR9IGZyb20gXCIuLi8uLi9zb3VyY2UvZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG4vL2ltcG9ydCBTdG9yYWdlIGZyb20gXCJkb20tc3RvcmFnZVwiO1xuXG5leHBvcnQgY29uc3QgaXNCcm93c2VyID0gbmV3IEZ1bmN0aW9uKFwidHJ5IHtyZXR1cm4gdGhpcz09PXdpbmRvdzt9Y2F0Y2goZSl7IHJldHVybiBmYWxzZTt9XCIpO1xuZXhwb3J0IGNvbnN0IGlzTm9kZSA9IG5ldyBGdW5jdGlvbihcInRyeSB7cmV0dXJuIHRoaXM9PT1nbG9iYWw7fWNhdGNoKGUpe3JldHVybiBmYWxzZTt9XCIpO1xuXG5sZXQgSlNET01FeHBvcnQgPSBudWxsO1xuXG4vKipcbiAqIHRoaXMgaGVscGVyIGZ1bmN0aW9uIGNyZWF0ZXMgdGhlIGRvbSBzdGFjayBpbiB0aGUgbm9kZSBlbnZpcm9ubWVudFxuICpcbiAqIEByZXR1cm4ge1Byb21pc2U8dW5rbm93bj58UHJvbWlzZTx2b2lkPn1cbiAqL1xuZnVuY3Rpb24gaW5pdEpTRE9NKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiAmJiB3aW5kb3dbJ0RPTVBhcnNlciddKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICBjb25zdCBnID0gZ2V0R2xvYmFsKCk7XG5cbiAgICBvcHRpb25zID0gZXh0ZW5kKHt9LCB7XG4gICAgICAgIHByZXRlbmRUb0JlVmlzdWFsOiB0cnVlLFxuICAgICAgICBjb250ZW50VHlwZTogXCJ0ZXh0L2h0bWxcIixcbiAgICAgICAgaW5jbHVkZU5vZGVMb2NhdGlvbnM6IHRydWUsXG4gICAgICAgIHN0b3JhZ2VRdW90YTogMTAwMDAwMDAsXG4gICAgICAgIHJ1blNjcmlwdHM6IFwiZGFuZ2Vyb3VzbHlcIixcbiAgICAgICAgcmVzb3VyY2VzOiBcInVzYWJsZVwiXG4gICAgfSwgb3B0aW9ucyB8fCB7fSlcblxuICAgIHJldHVybiBpbXBvcnQoXCJqc2RvbVwiKS50aGVuKCh7SlNET019KSA9PiB7XG4gICAgICAgIEpTRE9NRXhwb3J0ID0gSlNET007XG4gICAgICAgIGNvbnN0IHt3aW5kb3d9ID0gbmV3IEpTRE9NKGA8aHRtbD5cbjxoZWFkPlxuPC9oZWFkPlxuPGJvZHk+XG48ZGl2IGlkPVwibW9ja3NcIj48L2Rpdj5cbjwvYm9keT5gLCBvcHRpb25zKTtcblxuICAgICAgICBnWyd3aW5kb3cnXSA9IHdpbmRvdztcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PlxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsICgpID0+IHtcblxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgJ0Jsb2InLFxuICAgICAgICAgICAgICAgICAgICAnQ1NTU3R5bGVTaGVldCcsXG4gICAgICAgICAgICAgICAgICAgICdjdXN0b21FbGVtZW50cycsXG4gICAgICAgICAgICAgICAgICAgICdDdXN0b21FdmVudCcsXG4gICAgICAgICAgICAgICAgICAgICdkb2N1bWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdEb2N1bWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdEb2N1bWVudEZyYWdtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0RPTVBhcnNlcicsXG4gICAgICAgICAgICAgICAgICAgICdFbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0VsZW1lbnRJbnRlcm5hbHMnLFxuICAgICAgICAgICAgICAgICAgICAnRXZlbnQnLFxuICAgICAgICAgICAgICAgICAgICAnRXZlbnRUYXJnZXQnLFxuICAgICAgICAgICAgICAgICAgICAnZ2V0Q29tcHV0ZWRTdHlsZScsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MQnV0dG9uRWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MQ29sbGVjdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MRGl2RWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MRG9jdW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTEVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTEZvcm1FbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxJbnB1dEVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTFNjcmlwdEVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTFNlbGVjdEVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTFRlbXBsYXRlRWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MVGV4dEFyZWFFbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0lucHV0RXZlbnQnLFxuICAgICAgICAgICAgICAgICAgICAnS2V5Ym9hcmRFdmVudCcsXG4gICAgICAgICAgICAgICAgICAgICdNdXRhdGlvbk9ic2VydmVyJyxcbiAgICAgICAgICAgICAgICAgICAgJ25hdmlnYXRvcicsXG4gICAgICAgICAgICAgICAgICAgICdOb2RlJyxcbiAgICAgICAgICAgICAgICAgICAgJ05vZGVGaWx0ZXInLFxuICAgICAgICAgICAgICAgICAgICAnTm9kZUxpc3QnLFxuICAgICAgICAgICAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgICAgICAgICAgICdTaGFkb3dSb290JyxcbiAgICAgICAgICAgICAgICAgICAgJ1hNTFNlcmlhbGl6ZXInLFxuICAgICAgICAgICAgICAgIF0uZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBnW2tleV0gPSB3aW5kb3dba2V5XVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgZy5sb2NhbFN0b3JhZ2UgPSBuZXcgU3RvcmFnZShudWxsLCB7IHN0cmljdDogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICBnLnNlc3Npb25TdG9yYWdlID0gbmV3IFN0b3JhZ2UobnVsbCwgeyBzdHJpY3Q6IHRydWUgfSk7XG5cbiAgICAgICAgICAgICAgICB3aW5kb3dbJ2xvY2FsU3RvcmFnZSddID0gZy5sb2NhbFN0b3JhZ2U7XG4gICAgICAgICAgICAgICAgd2luZG93WydzZXNzaW9uU3RvcmFnZSddID0gZy5zZXNzaW9uU3RvcmFnZTtcblxuICAgICAgICAgICAgICAgIHJlc29sdmUoZyk7XG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cblxuICAgIH0pO1xufVxuXG5leHBvcnQge2luaXRKU0RPTSwgSlNET01FeHBvcnR9IFxuXG4iLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IGNoYWkgZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5cbi8vIGxhbmd1YWdlPWh0bWxcbmxldCBodG1sMSA9IGBcbiAgICA8bW9uc3Rlci10YWJzIGlkPVwibXl0YWJzXCI+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbD1cIlRBQjFcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgRGFzIGlzdCB0YWIgMVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbD1cIlRBQjJcIj5cbiAgICAgICAgICAgIERhcyBpc3QgdGFiIDJcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICBEYXMgaXN0IHRhYiAzIG9obmUgYnV0dG9uXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PjwvZGl2PlxuICAgIDwvbW9uc3Rlci10YWJzPlxuYDtcblxubGV0IFRhYnM7XG5cbmRlc2NyaWJlKCdUYWJzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuXG4gICAgICAgICAgICBpZiAoIWdsb2JhbFsnY3J5cHRvJ10pIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBDcnlwdG8gPSBtWydDcnlwdG8nXTtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsWydjcnlwdG8nXSA9IG5ldyBDcnlwdG8oKTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90YWJzLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgVGFicyA9IG1bJ1RhYnMnXTtcbiAgICAgICAgICAgIH0pKVxuXG4gICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKT0+e1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGFzIGJ1dHRvbnMgYW5kIHRhYnMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215dGFicycpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0YWJzKS5pcy5pbnN0YW5jZW9mKFRhYnMpO1xuXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5hdiA9IHRhYnMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCduYXYnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1dHRvbnMgPSB0YWJzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uW3BhcnQ9YnV0dG9uXScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGJ1dHRvbnNbMF0pLmlzLmluc3RhbmNlb2YoSFRNTEJ1dHRvbkVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG5hdi5oYXNDaGlsZE5vZGVzKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoYnV0dG9ucy5sZW5ndGgpLnRvLmJlLmVxdWFsKDQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LCAxMDApXG5cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCBjaGFpIGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge1Jlc2l6ZU9ic2VydmVyTW9ja30gZnJvbSBcIi4uLy4uLy4uL3V0aWwvcmVzaXplLW9ic2VydmVyLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICA8bW9uc3Rlci1zdGF0ZS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6dmFsdWVzLmNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1vcHRpb25zPSd7XG4gIFwidXJsXCI6IFwibW9jay1kYXRhLmpzb25cIixcbiAgXCJtYXBwaW5nXCI6IHtcbiAgICBcInZhbHVlUGF0aFwiOiBcIlxcJHtmaXJzdF9uYW1lfSBcXCR7bGFzdF9uYW1lfVwiLFxuICAgIFwia2V5UGF0aFwiOiBcImlkXCJcbiAgfSxcbiAgICAgIFwidHlwZVwiOlwiY2hlY2tib3hcIlxuXG59Jz48L21vbnN0ZXItc3RhdGUtYnV0dG9uPlxuICAgIDwvZGl2PlxuYDtcblxubGV0IFN0YXRlQnV0dG9uO1xuXG5kZXNjcmliZSgnU3RhdGVCdXR0b24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBhZnRlcihmdW5jdGlvbiAoKSB7XG4gICAgfSlcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICAgICAgaWYoIWdsb2JhbC5SZXNpemVPYnNlcnZlcikge1xuICAgICAgICAgICAgICAgIGdsb2JhbC5SZXNpemVPYnNlcnZlciA9IFJlc2l6ZU9ic2VydmVyTW9jaztcbiAgICAgICAgICAgIH0gICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdGF0ZS1idXR0b24ubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBTdGF0ZUJ1dHRvbiA9IG1bJ1N0YXRlQnV0dG9uJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldyBTdGF0ZUJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItc3RhdGUtYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItc3RhdGUtYnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2Ygc3RhdGUtYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXN0YXRlLWJ1dHRvbicpKS5pcy5pbnN0YW5jZW9mKFN0YXRlQnV0dG9uKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGFzIG5vIG9wdGlvbnMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItc3RhdGUtYnV0dG9uJyk7XG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChidXR0b24pO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gYnV0dG9uLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignYnV0dG9uJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMpLmlzLmluc3RhbmNlb2YoSFRNTEJ1dHRvbkVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucy5oYXNDaGlsZE5vZGVzKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgIlxuXG5cbmV4cG9ydCB7UmVzaXplT2JzZXJ2ZXJNb2NrfVxuXG5cbmNsYXNzIFJlc2l6ZU9ic2VydmVyTW9jayB7XG4gICAgY29uc3RydWN0b3IoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICB0aGlzLmVsZW1lbnRzID0gW107XG4gICAgfVxuXG4gICAgb2JzZXJ2ZShlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICB9XG5cbiAgICB1bm9ic2VydmUoZWxlbWVudCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRzID0gdGhpcy5lbGVtZW50cy5maWx0ZXIoKGVsKSA9PiBlbCAhPT0gZWxlbWVudCk7XG4gICAgfVxuXG4gICAgZGlzY29ubmVjdCgpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50cyA9IFtdO1xuICAgIH1cblxuICAgIHRyaWdnZXJSZXNpemUoZW50cmllcykge1xuICAgICAgICB0aGlzLmNhbGxiYWNrKGVudHJpZXMsIHRoaXMpO1xuICAgIH1cbn1cblxuIiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCBjaGFpIGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxubGV0IGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYDtcblxubGV0IGh0bWwyID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgIDxtb25zdGVyLXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDp2YWx1ZXMuY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLW9wdGlvbnM9J3tcbiAgXCJ1cmxcIjogXCJtb2NrLWRhdGEuanNvblwiLFxuICBcIm1hcHBpbmdcIjoge1xuICAgIFwic2VsZWN0b3JcIjogXCIqXCIsXG4gICAgXCJ2YWx1ZVRlbXBsYXRlXCI6IFwiXFwke2ZpcnN0X25hbWV9IFxcJHtsYXN0X25hbWV9XCIsXG4gICAgXCJsYWJlbFRlbXBsYXRlXCI6IFwiaWRcIlxuICB9LFxuICAgICAgXCJ0eXBlXCI6XCJjaGVja2JveFwiXG5cbn0nPjwvbW9uc3Rlci1zZWxlY3Q+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgU2VsZWN0LCBmZXRjaFJlZmVyZW5jZTtcblxuZGVzY3JpYmUoJ1NlbGVjdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxbJ2ZldGNoJ107XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc2VsZWN0Lm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgU2VsZWN0ID0gbVsnU2VsZWN0J107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ1dpdGggZmV0Y2gnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBNYXA7XG4gICAgICAgICAgICAgICAgaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0MikgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqc29uID0gSlNPTi5wYXJzZShgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyc3RfbmFtZVwiOiBcIkFsZXhpYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhc3RfbmFtZVwiOiBcIk91Z2h0cmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbWFpbFwiOiBcImFvdWdodHJpZ2h0MEBleGJsb2cuanBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnZW5kZXJcIjogXCJBZ2VuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY291bnRyeVwiOiBcIm1uXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyc3RfbmFtZVwiOiBcIkJldGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYXN0X25hbWVcIjogXCJCb2RkaW5ndG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJiYm9kZGluZ3RvbjFAc3RhdGNvdW50ZXIuY29tXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZGVyXCI6IFwiTm9uLWJpbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvdW50cnlcIjogXCJzeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyc3RfbmFtZVwiOiBcIlNoZWxsaVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhc3RfbmFtZVwiOiBcIkEnQmFycm93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJzYWJhcnJvdzJAZ29vZ2xlLmNvLnVrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZGVyXCI6IFwiUG9seWdlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvdW50cnlcIjogXCJub1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF1gKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlMihKU09OLnN0cmluZ2lmeShqc29uKSlcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIH07XG5cblxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLXNlbGVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXNlbGVjdCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIHNlbGVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXNlbGVjdCcpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzZWxlY3QpLmlzLmluc3RhbmNlb2YoU2VsZWN0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGhhcyBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgc2VsZWN0LnNldE9wdGlvbigndXJsJywgJ2h0dHBzOi8vZXhhbXBsZS5jb20nKVxuICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRPcHRpb24oJ21hcHBpbmcuc2VsZWN0b3InLCAnKicpXG4gICAgICAgICAgICAgICAgc2VsZWN0LnNldE9wdGlvbignbWFwcGluZy5sYWJlbFRlbXBsYXRlJywgJyR7aWR9JylcbiAgICAgICAgICAgICAgICBzZWxlY3Quc2V0T3B0aW9uKCdtYXBwaW5nLnZhbHVlVGVtcGxhdGUnLCAnJHtpZH0nKVxuXG4gICAgICAgICAgICAgICAgY29uc3QgbXV0YXRpb25vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFssIG11dGF0aW9uXSBvZiBtdXRhdGlvbnMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobXV0YXRpb24uYWRkZWROb2Rlc1swXS50YWdOYW1lID09PSAnTU9OU1RFUi1TRUxFQ1QnKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRpb25vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBzZWxlY3Quc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMyBvcHRpb25zIChzZWUgZmV0Y2ggYWJvdmUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucy5sZW5ndGgpLmlzLmVxdWFsKDMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25IdG1sID0gc2VsZWN0LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbnNdJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9uSHRtbCkuY29udGFpbi5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtMFwiJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9uSHRtbCkuY29udGFpbi5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtMVwiJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9uSHRtbCkuY29udGFpbi5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtMlwiJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9uSHRtbCkuY29udGFpbi5ub3QuaHRtbCgnZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJvcHRpb25zLTNcIicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIG11dGF0aW9ub2JzZXJ2ZXIub2JzZXJ2ZShtb2Nrcywge2NoaWxkTGlzdDogdHJ1ZX0pO1xuICAgICAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHNlbGVjdCk7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXMgbm8gb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zZWxlY3QnKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHNlbGVjdCk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBzZWxlY3Quc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uc10nKTtcblxuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucykuaXMuaW5zdGFuY2VvZihIVE1MRGl2RWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IG9wdGlvbnMucGFyZW50Tm9kZS5vdXRlckhUTUw7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGIgPSBvcHRpb25zLmNoaWxkTm9kZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucy5oYXNDaGlsZE5vZGVzKCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7RGF0YVVybH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuXG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtSZXNpemVPYnNlcnZlck1vY2t9IGZyb20gXCIuLi8uLi8uLi91dGlsL3Jlc2l6ZS1vYnNlcnZlci5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5sZXQgaHRtbDEsIG9wdGlvbnMsIGh0bWwyLCBDb25maXJtQnV0dG9uO1xuXG5kZXNjcmliZSgnQ29uZmlybUJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7ICAgIFxuICAgICAgICBcbiAgICAgICAgaWYoIWdsb2JhbC5SZXNpemVPYnNlcnZlcikge1xuICAgICAgICAgICAgZ2xvYmFsLlJlc2l6ZU9ic2VydmVyID0gUmVzaXplT2JzZXJ2ZXJNb2NrO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucyA9IG5ldyBEYXRhVXJsKGJ0b2EoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgcG9wcGVyOiB7XG4gICAgICAgICAgICAgICAgcGxhY2VtZW50OiBcInRvcFwiXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSksICdhcHBsaWNhdGlvbi9qc29uJywgdHJ1ZSkudG9TdHJpbmcoKVxuXG4gICAgICAgIGh0bWwyID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgIDxtb25zdGVyLWNvbmZpcm0tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnZhbHVlcy5jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItb3B0aW9ucz1cImAgKyBvcHRpb25zICsgYFwiPjwvbW9uc3Rlci1jb25maXJtLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbmA7XG5cbiAgICAgICAgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gXG5cblxuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9jb25maXJtLWJ1dHRvbi5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIENvbmZpcm1CdXR0b24gPSBtWydDb25maXJtQnV0dG9uJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldyBDb25maXJtQnV0dG9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci1jb25maXJtLWJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWNvbmZpcm0tYnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbmZpcm0tYnV0dG9uJykpLmlzLmluc3RhbmNlb2YoQ29uZmlybUJ1dHRvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhcyBjaGlsZHMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY29uZmlybS1idXR0b24nKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKGJ1dHRvbik7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBidXR0b24uc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLWJ1dHRvbicpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoY29udGVudC5oYXNDaGlsZE5vZGVzKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCBjaGFpIGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge0RhdGFzb3VyY2V9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlLm1qc1wiO1xuaW1wb3J0IHtQcm9jZXNzaW5nfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3V0aWwvcHJvY2Vzc2luZy5tanNcIjtcblxuaW1wb3J0IHtzdG9yYWdlT2JqZWN0U3ltYm9sfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8bW9uc3Rlci1mb3JtIGlkPVwiZm9ybTFcIj48L21vbnN0ZXItZm9ybT5cbiAgICA8L2Rpdj5cbmA7XG5sZXQgaHRtbDIgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgICAgIDxtb25zdGVyLWZvcm0gaWQ9XCJmb3JtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWRhdGFzb3VyY2U9XCJsb2NhbHN0b3JhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1kYXRhc291cmNlLWFyZ3VtZW50cz0nXCJ0ZXN0LWtleVwiJz5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJjb250cm9sMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbnRyb2wxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDphXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJjb250cm9sMlwiXG4gICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDpiXCI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L21vbnN0ZXItZm9ybT5cbiAgICA8L2Rpdj5cbmA7XG5sZXQgaHRtbDMgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QzXCI+XG4gICAgICAgIDxtb25zdGVyLWZvcm0gaWQ9XCJmb3JtM1wiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImNvbnRyb2wxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29udHJvbDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOmFcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImNvbnRyb2wyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmJcIlxuICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6YlwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIGlkPVwiYnV0dG9uMVwiIGRhdGEtbW9uc3Rlci1kYXRhc291cmNlLWhhbmRsZXI9XCJ3cml0ZVwiPkJ1dHRvbjwvYnV0dG9uPlxuXG4gICAgICAgIDwvbW9uc3Rlci1mb3JtPlxuICAgIDwvZGl2PlxuYDtcblxuZGVzY3JpYmUoJ0Zvcm0nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgZm9ybTtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIFxuICAgICAgICBpbml0SlNET00oKS50aGVuKCh4KSA9PiB7XG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL2Zvcm0ubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtID0gbVsnRm9ybSddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCd0ZXN0LWtleScpXG4gICAgfSlcblxuXG4gICAgZGVzY3JpYmUoXCJyZWdpc3RlciBvd24gZGF0YXNvdXJjZXNcIiwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IHN5bSA9IFN5bWJvbC5mb3IoJ0BzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL0BAZGF0YScpO1xuXG4gICAgICAgIGxldCB0ZXN0M0RhdGFzb3VyY2UgPSBjbGFzcyBleHRlbmRzIERhdGFzb3VyY2Uge1xuICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVhZCgpIHtcbiAgICAgICAgICAgICAgICB0aGlzW3N5bV0uc2V0U3ViamVjdCh7YTogXCJ0ZXN0M1wiLCBiOiBcInRlc3QzXCJ9KVxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmW3N5bV0uZ2V0UmVhbFN1YmplY3QoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwzO1xuXG4gICAgICAgICAgICAvLyByZWdpc3RlciBvd24gZGF0YXNvdXJjZSwgYWZ0ZXIgdGhlIGZvcm0gaXMgbG9hZGVkXG4gICAgICAgICAgICAvLyBiZWNhdXNlIGluIHRoZSB3aWxkLCB0aGUgZm9ybSBpcyBwYXJzZWQgYmVmb3JlIHRoZSBkYXRhc291cmNlIGlzIHJlZ2lzdGVyZWRcbiAgICAgICAgICAgIGZvcm0ucmVnaXN0ZXJEYXRhc291cmNlKCd0ZXN0MycsIHRlc3QzRGF0YXNvdXJjZSk7XG5cblxuICAgICAgICB9KTtcblxuICAgICAgICBpdChcInNob3VsZCBiZSBhYmxlIHRvIHJlZ2lzdGVyIG93biBkYXRhc291cmNlc1wiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IG0gPSBmb3JtLmdldERhdGFzb3VyY2VzKCd0ZXN0MycpXG4gICAgICAgICAgICBleHBlY3QobS5nZXQoJ3Rlc3QzJykpLmlzLmEuZXF1YWwodGVzdDNEYXRhc291cmNlKTtcblxuICAgICAgICAgICAgY29uc3QgdGVzdERhdGFzb3VyY2UgPSBuZXcgdGVzdDNEYXRhc291cmNlKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZvcm1FbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0zJyk7XG4gICAgICAgICAgICBmb3JtRWxlbWVudC5zZXRPcHRpb24oXCJkYXRhc291cmNlXCIsIHRlc3REYXRhc291cmNlKTtcbiAgICAgICAgICAgIGZvcm1FbGVtZW50LnJlZnJlc2goKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2ID0gZm9ybUVsZW1lbnQuZ2V0VmFsdWVzKClcbiAgICAgICAgICAgICAgICBleHBlY3QodikuaXMuZGVlcC5lcXVhbCh7YTogXCJ0ZXN0M1wiLCBiOiBcInRlc3QzXCJ9KVxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuXG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cbiAgICBkZXNjcmliZShcInJlZ2lzdGVyIGFuZCB1bnJlZ2lzdGVyIGRhdGFzb3VyY2VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgVGVzdERhdGFzb3VyY2UgPSBjbGFzcyBleHRlbmRzIERhdGFzb3VyY2Uge1xuICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGl0KFwic2hvdWxkIHJlZ2lzdGVyIG5ldyBkYXRhc291cmNlXCIsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgZm9ybS5yZWdpc3RlckRhdGFzb3VyY2UoJ3Rlc3QnLCBUZXN0RGF0YXNvdXJjZSk7XG4gICAgICAgICAgICBsZXQgbSA9IGZvcm0uZ2V0RGF0YXNvdXJjZXMoJ3Rlc3QnKVxuICAgICAgICAgICAgZXhwZWN0KG0uZ2V0KCd0ZXN0JykpLmlzLmEuZXF1YWwoVGVzdERhdGFzb3VyY2UpO1xuXG4gICAgICAgICAgICBmb3JtLnVucmVnaXN0ZXJEYXRhc291cmNlKCd0ZXN0Jyk7XG4gICAgICAgICAgICBtID0gZm9ybS5nZXREYXRhc291cmNlcygndGVzdCcpXG5cbiAgICAgICAgICAgIGV4cGVjdChtLmdldCgndGVzdCcpKS50by5iZS51bmRlZmluZWQ7XG4gICAgICAgIH0pXG5cbiAgICB9KVxuXG5cbiAgICBkZXNjcmliZShcImV4YW1wbGU0LWRvY1wiLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGl0KFwic2hvdWxkIGluaXQgYnV0dG9uIHdpdGggY2xpY2sgZXZlbnRcIiwgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGNsYXNzIE1vY2tEYXRhc291cmNlIGV4dGVuZHMgRGF0YXNvdXJjZSB7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVhZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgd3JpdGUoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgW3N0b3JhZ2VPYmplY3RTeW1ib2xdKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybTQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWZvcm0nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhc291cmNlNCA9IG5ldyBNb2NrRGF0YXNvdXJjZSgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkYXRhc291cmNlNCBpbnN0YW5jZW9mIERhdGFzb3VyY2UpLmlzLnRydWU7XG4gICAgICAgICAgICAgICAgZm9ybTQuc2V0T3B0aW9uKCdkYXRhc291cmNlJywgZGF0YXNvdXJjZTQpXG5cbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dDQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpXG4gICAgICAgICAgICAgICAgaW5wdXQ0LnNldEF0dHJpYnV0ZSgnbmFtZScsICdmaWVsZCcpO1xuICAgICAgICAgICAgICAgIGlucHV0NC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzJywgJ3ZhbHVlIHBhdGg6aGVhZGVycy5Ib3N0Jyk7XG4gICAgICAgICAgICAgICAgaW5wdXQ0LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLWJpbmQnLCAncGF0aDpoZWFkZXJzLkhvc3QnKTtcbiAgICAgICAgICAgICAgICBmb3JtNC5hcHBlbmRDaGlsZChpbnB1dDQpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYnV0dG9uNCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItc3RhdGUtYnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgYnV0dG9uNC5zZXRPcHRpb24oJ2xhYmVscy5idXR0b24nLCAnY2xpY2shJylcbiAgICAgICAgICAgICAgICBidXR0b240LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLWRhdGFzb3VyY2UtaGFuZGxlcicsICd3cml0ZScpXG4gICAgICAgICAgICAgICAgYnV0dG9uNC5zZXRPcHRpb24oJ2FjdGlvbnMuY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICBmb3JtNC5hcHBlbmRDaGlsZChidXR0b240KTtcblxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpLmFwcGVuZENoaWxkKGZvcm00KTtcblxuICAgICAgICAgICAgICAgIG5ldyBQcm9jZXNzaW5nKCkuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbjQuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICkucnVuKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIH1cbiAgICApXG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgY29udGFpbiBvYmplY3RsaW5rJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItZm9ybScpO1xuICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQoZm9ybUNvbnRyb2wpO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItZm9ybSBkYXRhLW1vbnN0ZXItb2JqZWN0bGluaz1cIlN5bWJvbChAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAb3B0aW9ucy11cGRhdGVyLWxpbmspXCI+PC9tb25zdGVyLWZvcm0+JylcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIH0sIDApXG5cblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0hUTUwtVGVtcGxhdGVzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZSBodG1sMScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0ZXN0LWtleScsICd7fScpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLWZvcm0nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWZvcm0nKTtcbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlIGh0bWwyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBiZWZvcmVFYWNoKChkb25lKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3Rlc3Qta2V5JywgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICBhOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBiOiA3LFxuICAgICAgICAgICAgICAgICAgICBjOiBbMSwgNSwgNl0sXG4gICAgICAgICAgICAgICAgICAgIGQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLWZvcm0nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDInKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci1mb3JtJyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBjbGljaycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDInKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci1mb3JtJyk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0yJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZm9ybS5zaGFkb3dSb290KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShuZXcgRXJyb3IoJ25vIHNoYWRvd1Jvb3QnKSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sMSA9IGZvcm0uc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdzbG90JykuYXNzaWduZWRFbGVtZW50cygpWzBdLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JylcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbDEuY2xpY2soKTtcblxuXG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9LCAxKVxuXG4gICAgICAgICAgICB9KTtcblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG59KVxuIiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCBjaGFpIGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxubGV0IGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYDtcblxubGV0IGh0bWwyID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgIDxtb25zdGVyLXRyZWUtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnZhbHVlcy5jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItb3B0aW9ucz0ne1xuICBcInVybFwiOiBcIm1vY2stZGF0YS5qc29uXCIsXG4gIFwibWFwcGluZ1wiOiB7XG4gICAgXCJ2YWx1ZVRlbXBsYXRlXCI6IFwiXFwke2ZpcnN0X25hbWV9IFxcJHtsYXN0X25hbWV9XCIsXG4gICAgXCJsYWJlbFRlbXBsYXRlXCI6IFwiaWRcIixcbiAgICBcInNlbGVjdG9yXCI6IFwiKlwiXG4gIH0sXG4gICAgICBcInR5cGVcIjpcImNoZWNrYm94XCJcblxufSc+PC9tb25zdGVyLXRyZWUtc2VsZWN0PlxuICAgIDwvZGl2PlxuYDtcblxubGV0IFRyZWVTZWxlY3QsIGZldGNoUmVmZXJlbmNlO1xuXG5kZXNjcmliZSgnVHJlZXNlbGVjdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgICAgICBmZXRjaFJlZmVyZW5jZSA9IGdsb2JhbFsnZmV0Y2gnXTtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90cmVlLXNlbGVjdC5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFRyZWVTZWxlY3QgPSBtWydUcmVlU2VsZWN0J107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ1dpdGggZmV0Y2gnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBNYXA7XG4gICAgICAgICAgICAgICAgaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0MikgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqc29uID0gSlNPTi5wYXJzZShgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyc3RfbmFtZVwiOiBcIkFsZXhpYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhc3RfbmFtZVwiOiBcIk91Z2h0cmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbWFpbFwiOiBcImFvdWdodHJpZ2h0MEBleGJsb2cuanBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnZW5kZXJcIjogXCJBZ2VuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY291bnRyeVwiOiBcIm1uXCIgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInBhcmVudFwiOiBcIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZpcnN0X25hbWVcIjogXCJCZXRoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGFzdF9uYW1lXCI6IFwiQm9kZGluZ3RvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVtYWlsXCI6IFwiYmJvZGRpbmd0b24xQHN0YXRjb3VudGVyLmNvbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdlbmRlclwiOiBcIk5vbi1iaW5hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb3VudHJ5XCI6IFwic3lcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwYXJlbnRcIjogXCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXJzdF9uYW1lXCI6IFwiU2hlbGxpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGFzdF9uYW1lXCI6IFwiQSdCYXJyb3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbWFpbFwiOiBcInNhYmFycm93MkBnb29nbGUuY28udWtcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnZW5kZXJcIjogXCJQb2x5Z2VuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY291bnRyeVwiOiBcIm5vXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFyZW50XCI6IFwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF1gKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlMihKU09OLnN0cmluZ2lmeShqc29uKSlcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIH07XG5cblxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLXRyZWUtc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItdHJlZS1zZWxlY3QnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBzZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdHJlZS1zZWxlY3QnKSkuaXMuaW5zdGFuY2VvZihUcmVlU2VsZWN0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGhhcyBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyZWVzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRyZWUtc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgdHJlZXNlbGVjdC5zZXRPcHRpb24oJ3VybCcsICdodHRwczovL2V4YW1wbGUuY29tJylcblxuICAgICAgICAgICAgICAgIHRyZWVzZWxlY3Quc2V0T3B0aW9uKCdtYXBwaW5nLnNlbGVjdG9yJywgJyonKTtcbiAgICAgICAgICAgICAgICB0cmVlc2VsZWN0LnNldE9wdGlvbignbWFwcGluZy5sYWJlbFRlbXBsYXRlJywgJyR7bGFzdF9uYW1lfScpO1xuICAgICAgICAgICAgICAgIHRyZWVzZWxlY3Quc2V0T3B0aW9uKCdtYXBwaW5nLnZhbHVlVGVtcGxhdGUnLCAnJHtpZCB8IHRvc3RyaW5nIH0nKTtcblxuICAgICAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHRyZWVzZWxlY3QpO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdHJlZXNlbGVjdC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMgb3B0aW9ucyAoc2VlIGZldGNoIGFib3ZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMubGVuZ3RoKS5pcy5lcXVhbCgzKTtcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25IdG1sID0gdHJlZXNlbGVjdC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25zXScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4uaHRtbCgnZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJvcHRpb25zLTBcIicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4uaHRtbCgnZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJvcHRpb25zLTFcIicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4uaHRtbCgnZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJvcHRpb25zLTJcIicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4ubm90Lmh0bWwoJ2RhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwib3B0aW9ucy0zXCInKTtcblxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXMgbm8gb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10cmVlLXNlbGVjdCcpO1xuICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQoc2VsZWN0KTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHNlbGVjdC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25zXScpO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zKS5pcy5pbnN0YW5jZW9mKEhUTUxEaXZFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMuaGFzQ2hpbGROb2RlcygpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0sIDApXG5cblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICA8bW9uc3Rlci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6dmFsdWVzLmNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1vcHRpb25zPSd7XG4gIFwidXJsXCI6IFwibW9jay1kYXRhLmpzb25cIixcbiAgXCJtYXBwaW5nXCI6IHtcbiAgICBcInZhbHVlUGF0aFwiOiBcIlxcJHtmaXJzdF9uYW1lfSBcXCR7bGFzdF9uYW1lfVwiLFxuICAgIFwia2V5UGF0aFwiOiBcImlkXCJcbiAgfSxcbiAgICAgIFwidHlwZVwiOlwiY2hlY2tib3hcIlxuXG59Jz48L21vbnN0ZXItYnV0dG9uPlxuICAgIDwvZGl2PlxuYDtcblxubGV0IEJ1dHRvbjtcblxuZGVzY3JpYmUoJ0J1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9idXR0b24ubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBCdXR0b24gPSBtWydCdXR0b24nXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbmV3IEJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItYnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWJ1dHRvbicpKS5pcy5pbnN0YW5jZW9mKEJ1dHRvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhcyBubyBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWJ1dHRvbicpO1xuICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGJ1dHRvbi5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zKS5pcy5pbnN0YW5jZW9mKEhUTUxCdXR0b25FbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMuaGFzQ2hpbGROb2RlcygpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyTW9ja30gZnJvbSBcIi4uLy4uLy4uL3V0aWwvaW50ZXJzZWN0aW9uLW1vY2subWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcbmxldCBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXI7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmRlc2NyaWJlKCdUZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIC8vIGpzZG9tLXRlc3RpbmctbW9ja3MgbmVlZCBqZXN0XG4gICAgbGV0IFRlbXBsYXRlLCB2aWV3cG9ydCwgbW9ja1ZpZXdwb3J0O1xuXG4gICAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXIucmVzdG9yZSgpO1xuICAgIH0pXG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgICAgICBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXIgPSBzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyTW9jaygpO1xuXG4gICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdGVtcGxhdGUubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBUZW1wbGF0ZSA9IG1bJ1RlbXBsYXRlJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldyBUZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cblxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgLy8gbGFuZ3VhZ2U9SFRNTFxuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bW9uc3Rlci10ZW1wbGF0ZT48L21vbnN0ZXItdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLXRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItdGVtcGxhdGUnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZW1wbGF0ZScpKS5pcy5pbnN0YW5jZW9mKFRlbXBsYXRlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbW9ja3M7XG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhcyBubyBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlbXBsYXRlJyk7XG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZCh0ZW1wbGF0ZSk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXRlbXBsYXRlJyk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdsb2FkIGNvbnRlbnQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG1vY2tzLCBmZXRjaFJlZmVyZW5jZSwgaW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG4gICAgICAgIGJlZm9yZUVhY2goKGRvbmUpID0+IHtcbiAgICAgICAgICAgIG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAvLyBsYW5ndWFnZT1IVE1MXG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cInRoaXMtY29udGVudFwiPlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICBmZXRjaFJlZmVyZW5jZSA9IGdsb2JhbFsnZmV0Y2gnXTtcblxuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuXG4gICAgICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgTWFwO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9odG1sJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9rOnRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6MjAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUyKCdoZWxsbyB3b3JsZCEnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGxvYWQgY29udGVudCBmcm9tIHVybCcsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZW1wbGF0ZScpO1xuICAgICAgICAgICAgdGVtcGxhdGUuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItdXJsJywgJ2h0dHA6Ly9sb2NhbGhvc3QvJylcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHRlbXBsYXRlKTtcblxuICAgICAgICAgICAgdGVtcGxhdGUuYWRkRXZlbnRMaXN0ZW5lcignbW9uc3Rlci1mZXRjaGVkJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItdGVtcGxhdGUnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGVsZW1lbnQuc2hhZG93Um9vdDtcblxuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChzaGFkb3dSb290KS5jb250YWluLmh0bWwoJ2hlbGxvIHdvcmxkJyk7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlci5nZXRJbnN0YW5jZSgpLmVudGVyTm9kZSgpO1xuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICJcbmltcG9ydCBjaGFpIGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5cblxubGV0IE1lc3NhZ2U7XG5cbmRlc2NyaWJlKCdNZXNzYWdlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvbWVzc2FnZS5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIE1lc3NhZ2UgPSBtWydNZXNzYWdlJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBNZXNzYWdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ub3RpZnktbWVzc2FnZScpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udHJvbCkuaXMuaW5zdGFuY2VvZihNZXNzYWdlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSlcbiIsICIvL2ltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCBjaGFpIGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG4vLyBjb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcbi8vXG4vLyBsZXQgaHRtbDEgPSBgXG4vLyAgICAgPGRpdiBpZD1cInRlc3QxXCI+XG4vLyAgICAgPC9kaXY+XG4vLyBgO1xuLy9cbi8vIC8vIGxhbmd1YWdlPUhUTUxcbi8vIGxldCBodG1sMiA9IGBcbi8vICAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbi8vICAgICAgICAgPG1vbnN0ZXItbm90aWZ5IGRhdGEtbW9uc3Rlci1vcHRpb25zPSd7fSc+PC9tb25zdGVyLW5vdGl0Znk+XG4vLyAgICAgPC9kaXY+XG4vLyBgO1xuXG5sZXQgTm90aWZ5LCBmZXRjaFJlZmVyZW5jZTtcblxuZGVzY3JpYmUoJ05vdGlmeScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9ub3RpZnkubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBOb3RpZnkgPSBtWydOb3RpZnknXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIG5vdGlmeScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5JykpLmlzLmluc3RhbmNlb2YoTm90aWZ5KTtcbiAgICAgICAgICAgIFxuXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIG1lc3NhZ2VzJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBjb25zdCBub3RpZnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLW5vdGlmeScpO1xuICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgbm90aWZ5LnB1c2goXCJ0aGlzIGlzIG1lc3NhZ2UgXCIgKyBpKyspO1xuICAgICAgICAgICAgbm90aWZ5LnB1c2goXCJ0aGlzIGlzIG1lc3NhZ2UgXCIgKyBpKyspO1xuICAgICAgICAgICAgbm90aWZ5LnB1c2goXCJ0aGlzIGlzIG1lc3NhZ2UgXCIgKyBpKyspO1xuXG4gICAgICAgICAgICBjb25zdCBtdXRhdGlvbm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbLCBtdXRhdGlvbl0gb2YgbXV0YXRpb25zLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobXV0YXRpb24uYWRkZWROb2Rlc1swXS50YWdOYW1lID09PSAnTU9OU1RFUi1OT1RJRlknKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0aW9ub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZXMgPSBub3RpZnkuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdtb25zdGVyLW5vdGlmeS1tZXNzYWdlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMgb3B0aW9ucyAoc2VlIGZldGNoIGFib3ZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QobWVzc2FnZXMubGVuZ3RoKS5pcy5lcXVhbCgzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDApXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBtdXRhdGlvbm9ic2VydmVyLm9ic2VydmUobW9ja3MsIHtjaGlsZExpc3Q6IHRydWV9KTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKG5vdGlmeSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KVxuIiwgImltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCBjaGFpIGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxuXG5kZXNjcmliZSgnSG9zdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBob3N0O1xuICAgIGxldCBodG1sMSA9IGBcbiAgICAgICAgPG1vbnN0ZXItaG9zdCBpZD1cImhvc3QxXCI+PC9tb25zdGVyLWhvc3Q+XG4gICAgYDtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3QvaG9zdC5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIGhvc3QgPSBtWydIb3N0J107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICAgICAgLy8gcmVnaXN0ZXIgb3duIGRhdGFzb3VyY2UsIGFmdGVyIHRoZSBmb3JtIGlzIGxvYWRlZFxuICAgICAgICAvLyBiZWNhdXNlIGluIHRoZSB3aWxkLCB0aGUgZm9ybSBpcyBwYXJzZWQgYmVmb3JlIHRoZSBkYXRhc291cmNlIGlzIHJlZ2lzdGVyZWRcbiAgICAgICAgLy9mb3JtLnJlZ2lzdGVyRGF0YXNvdXJjZSgndGVzdDMnLCB0ZXN0M0RhdGFzb3VyY2UpO1xuXG5cbiAgICB9KTsgICAgXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3Rlc3Qta2V5JylcbiAgICB9KVxuICAgIFxuICAgIFxuICAgIGl0KCdzaG91bGQgcnVuJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWhvc3QnKTtcbiAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQoZm9ybUNvbnRyb2wpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItaG9zdCBkYXRhLW1vbnN0ZXItb2JqZWN0bGluaz1cIlN5bWJvbChAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAb3B0aW9ucy11cGRhdGVyLWxpbmspXCI+PC9tb25zdGVyLWhvc3Q+JylcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9LCAwKVxuXG5cblxuXG5cbiAgICB9KTtcblxuXG59KTtcbiIsICJpbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuXG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxuXG5kZXNjcmliZSgnT3ZlcmxheScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBob3N0O1xuICAgIGxldCBodG1sMSA9IGBcbiAgICAgICAgPG1vbnN0ZXItb3ZlcmxheSBpZD1cImRldGFpbHMxXCI+PC9tb25zdGVyLW92ZXJsYXk+XG4gICAgYDtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3Qvb3ZlcmxheS5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIGhvc3QgPSBtWydEZXRhaWxzJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgfSk7ICAgIFxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgfSlcbiAgICBcbiAgICBcbiAgICBpdCgnc2hvdWxkIHJ1bicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIGNvbnN0IGZvcm1Db250cm9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1vdmVybGF5Jyk7XG4gICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKGZvcm1Db250cm9sKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpKS5jb250YWluLmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICcgPG1vbnN0ZXItb3ZlcmxheSBkYXRhLW1vbnN0ZXItb2JqZWN0bGluaz1cIlN5bWJvbChAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAb3B0aW9ucy11cGRhdGVyLWxpbmspXCI+PC9tb25zdGVyLW92ZXJsYXk+JylcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9LCAwKVxuXG4gICAgfSk7XG5cbn0pO1xuIiwgIi8vIEltcG9ydCB0aGUgcmVxdWlyZWQgbGlicmFyaWVzXG5pbXBvcnQgeyBleHBlY3QgfSBmcm9tICdjaGFpJztcbi8vaW1wb3J0IHsgSlNET00gfSBmcm9tICdqc2RvbSc7XG5pbXBvcnQgeyBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleSB9IGZyb20gJy4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3QvdXRpbC5tanMnO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG4vLyBDcmVhdGUgYSBKU0RPTSBpbnN0YW5jZSB0byBzaW11bGF0ZSB0aGUgYnJvd3NlciBlbnZpcm9ubWVudFxuLy9jb25zdCBkb20gPSBuZXcgSlNET00oKTtcblxuXG4vLyBUZXN0IHN1aXRlIGZvciB0aGUgZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkgZnVuY3Rpb25cbmRlc2NyaWJlKCdnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleScsICgpID0+IHtcblxuICAgIC8vbGV0IG9yaWdpbmFsV2luZG93O1xuXG4gICAgLy8gYmVmb3JlKCgpID0+IHtcbiAgICAvLyAgICAgLy8gU3RvcmUgdGhlIG9yaWdpbmFsIHdpbmRvdyBvYmplY3RcbiAgICAvLyAgICAgb3JpZ2luYWxXaW5kb3cgPSBnbG9iYWxUaGlzLndpbmRvdztcbiAgICAvL1xuICAgIC8vICAgICAvLyBDcmVhdGUgYSBKU0RPTSBpbnN0YW5jZSB0byBzaW11bGF0ZSB0aGUgYnJvd3NlciBlbnZpcm9ubWVudFxuICAgIC8vICAgICBjb25zdCBkb20gPSBuZXcgSlNET00oKTtcbiAgICAvLyAgICAgZ2xvYmFsVGhpcy53aW5kb3cgPSBkb20ud2luZG93O1xuICAgIC8vIH0pO1xuXG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pO1xuICAgIH0pICAgIFxuXG4gICAgLy8gLi4uIChzYW1lIHRlc3QgY2FzZXMgYXMgYmVmb3JlKVxuXG4gICAgYWZ0ZXIoKCkgPT4ge1xuICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCB3aW5kb3cgb2JqZWN0XG4gICAgICAgLy8gZ2xvYmFsVGhpcy53aW5kb3cgPSBvcmlnaW5hbFdpbmRvdztcbiAgICB9KTsgICAgXG4gICAgXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBhIHVuaXF1ZSBrZXkgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycycsICgpID0+IHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50TmFtZSA9ICdNeUNvbXBvbmVudCc7XG4gICAgICAgIGNvbnN0IGlkID0gJzEyMyc7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9ICdteVByZWZpeCc7XG5cbiAgICAgICAgY29uc3QgdW5pcXVlS2V5ID0gZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkoY29tcG9uZW50TmFtZSwgaWQsIHByZWZpeCk7XG5cbiAgICAgICAgLy8gRW5zdXJlIHRoZSB1bmlxdWUga2V5IGNvbnRhaW5zIHRoZSBnaXZlbiBwYXJhbWV0ZXJzIGFuZCBmb2xsb3dzIHRoZSBleHBlY3RlZCBmb3JtYXRcbiAgICAgICAgZXhwZWN0KHVuaXF1ZUtleSkudG8uaW5jbHVkZShwcmVmaXgpO1xuICAgICAgICBleHBlY3QodW5pcXVlS2V5KS50by5pbmNsdWRlKGNvbXBvbmVudE5hbWUpO1xuICAgICAgICBleHBlY3QodW5pcXVlS2V5KS50by5pbmNsdWRlKGlkKTtcbiAgICAgICAgZXhwZWN0KHVuaXF1ZUtleSkudG8ubWF0Y2goL15bYS16QS1aMC05X10rJC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXBsYWNlIHNwZWNpYWwgY2hhcmFjdGVycyBhbmQgc3BhY2VzIHdpdGggdW5kZXJzY29yZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSAnTXkkQ29tcG9uZW50JztcbiAgICAgICAgY29uc3QgaWQgPSAnMTIjMyc7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9ICdteSBQcmVmaXgnO1xuXG4gICAgICAgIGNvbnN0IHVuaXF1ZUtleSA9IGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5KGNvbXBvbmVudE5hbWUsIGlkLCBwcmVmaXgpO1xuXG4gICAgICAgIC8vIEVuc3VyZSB0aGUgdW5pcXVlIGtleSBkb2VzIG5vdCBjb250YWluIGFueSBzcGVjaWFsIGNoYXJhY3RlcnMgb3Igc3BhY2VzXG4gICAgICAgIGV4cGVjdCh1bmlxdWVLZXkpLnRvLm1hdGNoKC9eW2EtekEtWjAtOV9dKyQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaW5jbHVkZSB0aGUgYnJvd3NlciBsb2NhdGlvbiB3aXRob3V0IHBhcmFtZXRlcnMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSAnTXlDb21wb25lbnQnO1xuICAgICAgICBjb25zdCBpZCA9ICcxMjMnO1xuICAgICAgICBjb25zdCBwcmVmaXggPSAnbXlQcmVmaXgnO1xuXG4gICAgICAgIGNvbnN0IHVuaXF1ZUtleSA9IGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5KGNvbXBvbmVudE5hbWUsIGlkLCBwcmVmaXgpO1xuXG4gICAgICAgIC8vIEVuc3VyZSB0aGUgdW5pcXVlIGtleSBjb250YWlucyB0aGUgYnJvd3NlciBsb2NhdGlvbiB3aXRob3V0IHBhcmFtZXRlcnNcbiAgICAgICAgY29uc3QgdXJsV2l0aG91dFBhcmFtcyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KCc/JylbMF07XG4gICAgICAgIGNvbnN0IHNhbml0aXplZFVybCA9IHVybFdpdGhvdXRQYXJhbXMucmVwbGFjZSgvW15cXHdcXHNdL2dpLCAnXycpLnJlcGxhY2UoL1xccysvZywgJ18nKTtcbiAgICAgICAgZXhwZWN0KHVuaXF1ZUtleSkudG8uaW5jbHVkZShzYW5pdGl6ZWRVcmwpO1xuICAgIH0pO1xuXG4gICAgXG4gICAgXG59KSIsICJpbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtSZXNpemVPYnNlcnZlck1vY2t9IGZyb20gXCIuLi8uLi8uLi91dGlsL3Jlc2l6ZS1vYnNlcnZlci5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5cbmRlc2NyaWJlKCdEZXRhaWxzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGhvc3Q7XG4gICAgbGV0IGh0bWwxID0gYFxuICAgICAgICA8bW9uc3Rlci1kZXRhaWxzIGlkPVwiZGV0YWlsczFcIj48L21vbnN0ZXItZGV0YWlscz5cbiAgICBgO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9kZXRhaWxzLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgaG9zdCA9IG1bJ0RldGFpbHMnXTtcblxuICAgICAgICAgICAgICAgIGlmKCFnbG9iYWwuUmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsLlJlc2l6ZU9ic2VydmVyID0gUmVzaXplT2JzZXJ2ZXJNb2NrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIFxuICAgICAgICBcbiAgICB9KVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICB9KTsgICAgXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9KVxuICAgIFxuICAgIFxuICAgIGl0KCdzaG91bGQgcnVuJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWRldGFpbHMnKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpKS5jb250YWluLmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICc8bW9uc3Rlci1kZXRhaWxzIGlkPVwiZGV0YWlsczFcIiBkYXRhLW1vbnN0ZXItb2JqZWN0bGluaz1cIlN5bWJvbChAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAb3B0aW9ucy11cGRhdGVyLWxpbmspXCIgZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbD1cIkRldGFpbHNcIj48L21vbnN0ZXItZGV0YWlscz4nKVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0sIDApXG5cbiAgICB9KTtcblxufSk7XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Rm9ybWF0dGVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3RleHQvZm9ybWF0dGVyLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdGb3JtYXR0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAvLyBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy80N1xuICAgIGRlc2NyaWJlKCdleGFtcGxlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmZjIGV4YW1wbGUgc2hvdWxkIHJ1bicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgRm9ybWF0dGVyKHtcblxuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzogXCJIZWxsb1wiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGQ6IFwiV29ybGRcIixcbiAgICAgICAgICAgICAgICAgICAgZTogMVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSkuZm9ybWF0KFwiJHthLmIuY30gJHthLmQgfCB0b3VwcGVyfSFcIikpLnRvLmJlLmVxdWFsKCdIZWxsbyBXT1JMRCEnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnZG9jIGV4YW1wbGUgc2hvdWxkIHJ1bicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgRm9ybWF0dGVyKHtcblxuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzogXCJIZWxsb1wiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGQ6IFwid29ybGRcIixcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pLmZvcm1hdChcIiR7YS5iLmN9ICR7YS5kIHwgdWNmaXJzdH0hXCIpKS50by5iZS5lcXVhbCgnSGVsbG8gV29ybGQhJyk7XG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnc2V0IG1hcmtlcigpJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWycjYSMnLCAnIycsIHVuZGVmaW5lZCwgJ3Rlc3QnXSxcbiAgICAgICAgICAgIFsne2F9JywgJ3snLCAnfScsICd0ZXN0J10sXG4gICAgICAgICAgICBbJ2kxOG57YX0nLCAnaTE4bnsnLCAnfScsICd0ZXN0J10sXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBkID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdmb3JtYXQgJyArIGEgKyAnIHdpdGggbWFya2VyICcgKyBiICsgJyBhbmQgJyArIGMgKyAnIHNob3VsZCByZXR1cm4gICcgKyBiLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBGb3JtYXR0ZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgYTogXCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgfSkuc2V0TWFya2VyKGIsIGMpLmZvcm1hdChhKVxuICAgICAgICAgICAgICAgICkudG8uZXF1YWwoZClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdleGFtcGxlcygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnJHthIHwgdG9qc29ufScsIFwie1xcXCJiXFxcIjp7XFxcImNcXFwiOlxcXCJIZWxsb1xcXCJ9LFxcXCJkXFxcIjpcXFwiV29ybGRcXFwiLFxcXCJlXFxcIjoxfVwiXSxcbiAgICAgICAgICAgIFsnY2xpY2sgJHthLmR9IHRpbWVzJywgXCJjbGljayBXb3JsZCB0aW1lc1wiXSxcbiAgICAgICAgICAgIFsnICR7YS5iLmN9ICcsICcgSGVsbG8gJ10sXG4gICAgICAgICAgICBbJyAke2EuYi5jfScsICcgSGVsbG8nXSxcbiAgICAgICAgICAgIFsnJHthLmIuY30gJywgJ0hlbGxvICddLFxuICAgICAgICAgICAgWycke2EuYi5jfScsICdIZWxsbyddLFxuICAgICAgICAgICAgWycke2EuYi5jfSR7YS5iLmN9JywgJ0hlbGxvSGVsbG8nXSxcbiAgICAgICAgICAgIFsnJHthLmIuY30gJHthLmIuY30nLCAnSGVsbG8gSGVsbG8nXSxcbiAgICAgICAgICAgIFsnJHthLmIuY30gJHthLmIuY30gJywgJ0hlbGxvIEhlbGxvICddLFxuICAgICAgICAgICAgWycgJHthLmIuY30gJHthLmIuY30gJywgJyBIZWxsbyBIZWxsbyAnXSxcbiAgICAgICAgICAgIFsnICR7YS5iLmN9ICR7YS5kfSAnLCAnIEhlbGxvIFdvcmxkICddLFxuICAgICAgICAgICAgWycgJHthLmIuY30gJHthLmIuYyB8IHRvdXBwZXIgfCBsZW5ndGggfCB0b3N0cmluZ30gJywgJyBIZWxsbyA1ICddLFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2Zvcm1hdCAnICsgYSArICcgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiSGVsbG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ6IFwiV29ybGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGU6IDFcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBGb3JtYXR0ZXIob2JqKS5mb3JtYXQoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdNYXJrZXIgaW4gbWFya2VyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCB0ZXh0ID0gJyR7bXlrZXkke3N1YmtleX19JztcbiAgICAgICAgbGV0IGV4cGVjdGVkID0gJzEnO1xuXG4gICAgICAgIGl0KCdmb3JtYXQgJyArIHRleHQgKyAnIHNob3VsZCAnICsgZXhwZWN0ZWQsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBteWtleTI6IFwiMVwiLFxuICAgICAgICAgICAgICAgIHN1YmtleTogXCIyXCJcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGV4cGVjdChuZXcgRm9ybWF0dGVyKG9iaikuZm9ybWF0KHRleHQpKS5pcy5lcXVhbChleHBlY3RlZClcblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc2V0UGFyYW1ldGVyQ2hhcnMoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2V0UGFyYW1ldGVyQ2hhcnMoKSBzaG91bGQgcmV0dXJuIEluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBGb3JtYXR0ZXIoe30pLnNldFBhcmFtZXRlckNoYXJzKCdhJywgJ2InKSkuaXMuaW5zdGFuY2VvZihGb3JtYXR0ZXIpO1xuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ3dpdGggY2FsbGJhY2tzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdhZGQgY2FsbGJhY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHtcbiAgICAgICAgICAgICAgICB4OiAnMSdcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgbXk6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiIVwiICsgdmFsdWUgKyBcIiFcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChmb3JtYXR0ZXIuZm9ybWF0KCcke3ggfCBjYWxsOm15fScpKS5pcy5lcXVhbCgnITEhJyk7XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ01hcmtlciBpbiBtYXJrZXIgd2l0aCBwYXJhbWV0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IHRleHQgPSAnJHtteWtleTo6bXlrZXk9JHtzdWJrZXl9fSc7XG4gICAgICAgIGxldCBleHBlY3RlZCA9ICcyJztcblxuICAgICAgICBpdCgnZm9ybWF0ICcgKyB0ZXh0ICsgJyBzaG91bGQgJyArIGV4cGVjdGVkLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgc3Via2V5OiBcIjJcIlxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZXhwZWN0KG5ldyBGb3JtYXR0ZXIob2JqKS5mb3JtYXQodGV4dCkpLmlzLmVxdWFsKGV4cGVjdGVkKVxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2V4Y2VwdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWycke2EuYi54fScsIFR5cGVFcnJvcl0sXG4gICAgICAgICAgICBbJyR7YS5iLmQgfCB0b3VwcGVyIHwgbGVuZ3RofScsIFR5cGVFcnJvcl0sXG4gICAgICAgICAgICBbJyR7YS5iLmR9JywgVHlwZUVycm9yXSwgIC8vIGEuYi5kIHJldHVybiB1bmRlZmluZWQgYnkgcGF0aGZpbmRlciBcbiAgICAgICAgICAgIFsnJHthLmIuZCB8IHRvbG93ZXJ9JywgVHlwZUVycm9yXSwgIC8vIGEuYi5kIHJldHVybiB1bmRlZmluZWQgYnkgcGF0aGZpbmRlciBcbiAgICAgICAgICAgIFsnJHthIHwgfScsIEVycm9yXSxcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdmb3JtYXQgJyArIGEgKyAnIHNob3VsZCB0aHJvdyAnICsgdHlwZW9mIGIsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRm9ybWF0dGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwidGVzdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDogNFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuZm9ybWF0KGEpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApLnRvLnRocm93KGIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxuXG5cbiAgICBkZXNjcmliZSgnRm9ybWF0dGVyJywgKCkgPT4ge1xuICAgICAgICBpdCgnc2hvdWxkIGZvcm1hdCBhIGJhc2ljIHN0cmluZyB3aXRoIG9iamVjdCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHtuYW1lOiAnSm9obicsIGFnZTogMzB9KTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdHRlci5mb3JtYXQoJ015IG5hbWUgaXMgJHtuYW1lfSBhbmQgSSBhbSAke2FnZSB8IHRvc3RyaW5nfSB5ZWFycyBvbGQuJyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCdNeSBuYW1lIGlzIEpvaG4gYW5kIEkgYW0gMzAgeWVhcnMgb2xkLicpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZvcm1hdCBhIHN0cmluZyB3aXRoIG5lc3RlZCBtYXJrZXJzJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9ICcke215a2V5JHtzdWJrZXl9fSc7XG4gICAgICAgICAgICBjb25zdCBvYmogPSB7bXlrZXkyOiAnMScsIHN1YmtleTogJzInfTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIob2JqKTtcblxuICAgICAgICAgICAgZXhwZWN0KGZvcm1hdHRlci5mb3JtYXQodGV4dCkpLnRvLmVxdWFsKCcxJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZm9ybWF0IGEgc3RyaW5nIHdpdGggY3VzdG9tIG1hcmtlcnMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHtuYW1lOiAnSm9obicsIGFnZTogMzB9KTtcbiAgICAgICAgICAgIGZvcm1hdHRlci5zZXRNYXJrZXIoJ1snLCAnXScpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0dGVyLmZvcm1hdCgnTXkgbmFtZSBpcyBbbmFtZV0gYW5kIEkgYW0gW2FnZSB8IHRvc3RyaW5nXSB5ZWFycyBvbGQuJyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCdNeSBuYW1lIGlzIEpvaG4gYW5kIEkgYW0gMzAgeWVhcnMgb2xkLicpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZvcm1hdCBhIHN0cmluZyB1c2luZyBjYWxsYmFjaycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIoe3g6ICcxJ30sIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgcXVvdGU6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcIicgKyB2YWx1ZSArICdcIic7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBleHBlY3QoZm9ybWF0dGVyLmZvcm1hdCgnJHt4IHwgY2FsbDpxdW90ZX0nKSkudG8uZXF1YWwoJ1wiMVwiJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZm9ybWF0IGEgc3RyaW5nIHdpdGggcGFyYW1ldGVycycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGM6ICdIZWxsbycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGQ6ICd3b3JsZCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKG9iaik7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXR0ZXIuZm9ybWF0KCcke2EuYi5jfSAke2EuZCB8IHVjZmlyc3R9IScpO1xuXG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgnSGVsbG8gV29ybGQhJyk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhIHRvbyBkZWVwIG5lc3RpbmcgZXJyb3InLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHtuYW1lOiAnSm9obid9KTtcbiAgICAgICAgICAgIGNvbnN0IG5lc3RlZFRleHQgPSAnJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lfX19fX19fX19fX19fX19fX19JztcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBmb3JtYXR0ZXIuZm9ybWF0KG5lc3RlZFRleHQpKS50by50aHJvdygnc3ludGF4IGVycm9yIGluIGZvcm1hdHRlciB0ZW1wbGF0ZScpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGEgdG9vIGRlZXAgbmVzdGluZyBlcnJvcicsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0T2JqID0ge1xuICAgICAgICAgICAgICAgIG15a2V5OiAnJHtteWtleX0nLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcihpbnB1dE9iaik7XG5cbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSAnJHtteWtleX0nO1xuICAgICAgICAgICAgbGV0IGZvcm1hdHRlZFRleHQgPSB0ZXh0O1xuXG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBzdHJpbmcgd2l0aCAyMSBsZXZlbHMgb2YgbmVzdGluZ1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVkVGV4dCA9ICckeycgKyBmb3JtYXR0ZWRUZXh0ICsgJ30nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZm9ybWF0dGVyLmZvcm1hdChmb3JtYXR0ZWRUZXh0KSkudG8udGhyb3coJ3RvbyBkZWVwIG5lc3RpbmcnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgIH0pO1xuXG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmV4cG9ydCB7IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbiB9O1xuXG4vKipcbiAqIFRoZSBgZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKClgIGZ1bmN0aW9uIGlzIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gKiBvZiBhIGNvbXBhcmlzb24gZXhwcmVzc2lvbiBiYXNlZCBvbiBhIHJhbmdlIG9mIHZhbHVlcy4gSXQgdGFrZXMgdGhyZWUgYXJndW1lbnRzOlxuICpcbiAqIC0gZXhwcmVzc2lvbiAocmVxdWlyZWQpOiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHJhbmdlIG9mIHZhbHVlcyBpbiB0aGUgZm9ybWF0IG9mIHN0YXJ0MS1lbmQxLHN0YXJ0Mi1lbmQyLHZhbHVlMy4uLi5cbiAqIC0gdmFsdWVOYW1lIChyZXF1aXJlZCk6IGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgdmFsdWUgdGhhdCBpcyBiZWluZyBjb21wYXJlZCB0byB0aGUgcmFuZ2Ugb2YgdmFsdWVzLlxuICogLSBvcHRpb25zIChvcHRpb25hbCk6IGFuIG9iamVjdCBjb250YWluaW5nIGFkZGl0aW9uYWwgb3B0aW9ucyB0byBjdXN0b21pemUgdGhlIGNvbXBhcmlzb24gZXhwcmVzc2lvbi5cbiAqXG4gKiBUaGUgZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKCkgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tcGFyaXNvbiBleHByZXNzaW9uLlxuICpcbiAqICMjIE9wdGlvbnNcbiAqIFRoZSBvcHRpb25zIHBhcmFtZXRlciBpcyBhbiBvYmplY3QgdGhhdCBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogdXJsRW5jb2RlIChib29sZWFuLCBkZWZhdWx0OiBmYWxzZSk6IGlmIHNldCB0byB0cnVlLCBVUkwgZW5jb2RlcyB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMuXG4gKiBhbmRPcCAoc3RyaW5nLCBkZWZhdWx0OiAnJiYnKTogdGhlIGxvZ2ljYWwgQU5EIG9wZXJhdG9yIHRvIHVzZSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAqIG9yT3AgKHN0cmluZywgZGVmYXVsdDogJ3x8Jyk6IHRoZSBsb2dpY2FsIE9SIG9wZXJhdG9yIHRvIHVzZSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAqIGVxT3AgKHN0cmluZywgZGVmYXVsdDogJz09Jyk6IHRoZSBlcXVhbGl0eSBvcGVyYXRvciB0byB1c2UgaW4gdGhlIGV4cHJlc3Npb24uXG4gKiBnZU9wIChzdHJpbmcsIGRlZmF1bHQ6ICc+PScpOiB0aGUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG9wZXJhdG9yIHRvIHVzZSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAqIGxlT3AgKHN0cmluZywgZGVmYXVsdDogJzw9Jyk6IHRoZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gb3BlcmF0b3IgdG8gdXNlIGluIHRoZSBleHByZXNzaW9uLlxuICpcbiAqIEV4YW1wbGVzXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogY29uc3QgZXhwcmVzc2lvbiA9ICcwLTEwLDIwLTMwJztcbiAqIGNvbnN0IHZhbHVlTmFtZSA9ICdhZ2UnO1xuICogY29uc3Qgb3B0aW9ucyA9IHsgdXJsRW5jb2RlOiB0cnVlLCBhbmRPcDogJ2FuZCcsIG9yT3A6ICdvcicsIGVxT3A6ICc9JywgZ2VPcDogJz49JywgbGVPcDogJzw9JyB9O1xuICogY29uc3QgY29tcGFyaXNvbkV4cHJlc3Npb24gPSBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lLCBvcHRpb25zKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhjb21wYXJpc29uRXhwcmVzc2lvbik7IC8vIGFnZSUzRSUzRDAlMjBhbmQlMjBhZ2UlM0MlM0QxMCUyMG9yJTIwYWdlJTNFJTNEMjAlMjBhbmQlMjBhZ2UlM0MlM0QzMFxuICogYGBgXG4gKlxuICogSW4gdGhpcyBleGFtcGxlLCB0aGUgZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKCkgZnVuY3Rpb24gZ2VuZXJhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21wYXJpc29uXG4gKiBleHByZXNzaW9uIGZvciB0aGUgZXhwcmVzc2lvbiBhbmQgdmFsdWVOYW1lIHBhcmFtZXRlcnMgd2l0aCB0aGUgc3BlY2lmaWVkIG9wdGlvbnMuIFRoZSByZXN1bHRpbmcgY29tcGFyaXNvblxuICogZXhwcmVzc2lvbiBpcyAnYWdlPj0wIGFuZCBhZ2U8PTEwIG9yIGFnZT49MjAgYW5kIGFnZTw9MzAnLCBVUkwgZW5jb2RlZCBhY2NvcmRpbmcgdG8gdGhlIHVybEVuY29kZSBvcHRpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gLSBUaGUgc3RyaW5nIGV4cHJlc3Npb24gdG8gZ2VuZXJhdGUgdGhlIGNvbXBhcmlzb24gZm9yLlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB2YWx1ZSB0byBjb21wYXJlIGFnYWluc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gVGhlIG9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnVybEVuY29kZT1mYWxzZV0gLSBXaGV0aGVyIHRvIGVuY29kZSBjb21wYXJpc29uIG9wZXJhdG9ycyBmb3IgdXNlIGluIGEgVVJMLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFuZE9wPScmJiddIC0gVGhlIGxvZ2ljYWwgQU5EIG9wZXJhdG9yIHRvIHVzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5vck9wPSd8fCddIC0gVGhlIGxvZ2ljYWwgT1Igb3BlcmF0b3IgdG8gdXNlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmVxT3A9Jz09J10gLSBUaGUgY29tcGFyaXNvbiBvcGVyYXRvciBmb3IgZXF1YWxpdHkgdG8gdXNlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmdlT3A9Jz49J10gLSBUaGUgY29tcGFyaXNvbiBvcGVyYXRvciBmb3IgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRvIHVzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sZU9wPSc8PSddIC0gVGhlIGNvbXBhcmlzb24gb3BlcmF0b3IgZm9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0byB1c2UuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZ2VuZXJhdGVkIGNvbXBhcmlzb24gZXhwcmVzc2lvbi5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgaW5wdXQgaXMgaW52YWxpZC5cbiAqIEBtZW1iZXJPZiBNb25zdGVyLlRleHRcbiAqIEBzdW1tYXJ5IEdlbmVyYXRlcyBhIGNvbXBhcmlzb24gZXhwcmVzc2lvbiBiYXNlZCBvbiBhIHJhbmdlIG9mIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKFxuXHRleHByZXNzaW9uLFxuXHR2YWx1ZU5hbWUsXG5cdG9wdGlvbnMgPSB7fSxcbikge1xuXHRjb25zdCB7XG5cdFx0dXJsRW5jb2RlID0gZmFsc2UsXG5cdFx0YW5kT3AgPSBcIiYmXCIsXG5cdFx0b3JPcCA9IFwifHxcIixcblx0XHRlcU9wID0gXCI9PVwiLFxuXHRcdGdlT3AgPSBcIj49XCIsXG5cdFx0bGVPcCA9IFwiPD1cIixcblx0fSA9IG9wdGlvbnM7XG5cdGNvbnN0IHJhbmdlcyA9IGV4cHJlc3Npb24uc3BsaXQoXCIsXCIpO1xuXHRsZXQgY29tcGFyaXNvbiA9IFwiXCI7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgcmFuZ2UgPSByYW5nZXNbaV0udHJpbSgpO1xuXHRcdGlmIChyYW5nZSA9PT0gXCJcIikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHJhbmdlICcke3JhbmdlfSdgKTtcblx0XHR9IGVsc2UgaWYgKHJhbmdlLmluY2x1ZGVzKFwiLVwiKSkge1xuXHRcdFx0Y29uc3QgW3N0YXJ0LCBlbmRdID0gcmFuZ2Vcblx0XHRcdFx0LnNwbGl0KFwiLVwiKVxuXHRcdFx0XHQubWFwKChzKSA9PiAocyA9PT0gXCJcIiA/IG51bGwgOiBwYXJzZUZsb2F0KHMpKSk7XG5cdFx0XHRpZiAoKHN0YXJ0ICE9PSBudWxsICYmIGlzTmFOKHN0YXJ0KSkgfHwgKGVuZCAhPT0gbnVsbCAmJiBpc05hTihlbmQpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmFsdWUgaW4gcmFuZ2UgJyR7cmFuZ2V9J2ApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHN0YXJ0ICE9PSBudWxsICYmIGVuZCAhPT0gbnVsbCAmJiBzdGFydCA+IGVuZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcmFuZ2UgJyR7cmFuZ2V9J2ApO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY29tcFN0YXJ0ID1cblx0XHRcdFx0c3RhcnQgIT09IG51bGxcblx0XHRcdFx0XHQ/IGAke3ZhbHVlTmFtZX0ke3VybEVuY29kZSA/IGVuY29kZVVSSUNvbXBvbmVudChnZU9wKSA6IGdlT3B9JHtzdGFydH1gXG5cdFx0XHRcdFx0OiBcIlwiO1xuXHRcdFx0Y29uc3QgY29tcEVuZCA9XG5cdFx0XHRcdGVuZCAhPT0gbnVsbFxuXHRcdFx0XHRcdD8gYCR7dmFsdWVOYW1lfSR7dXJsRW5jb2RlID8gZW5jb2RlVVJJQ29tcG9uZW50KGxlT3ApIDogbGVPcH0ke2VuZH1gXG5cdFx0XHRcdFx0OiBcIlwiO1xuXHRcdFx0Y29uc3QgY29tcFJhbmdlID0gYCR7Y29tcFN0YXJ0fSR7XG5cdFx0XHRcdGNvbXBTdGFydCAmJiBjb21wRW5kID8gYCAke2FuZE9wfSBgIDogXCJcIlxuXHRcdFx0fSR7Y29tcEVuZH1gO1xuXHRcdFx0Y29tcGFyaXNvbiArPSByYW5nZXMubGVuZ3RoID4gMSA/IGAoJHtjb21wUmFuZ2V9KWAgOiBjb21wUmFuZ2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdChyYW5nZSk7XG5cdFx0XHRpZiAoaXNOYU4odmFsdWUpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YWx1ZSAnJHtyYW5nZX0nYCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBjb21wVmFsdWUgPSBgJHt2YWx1ZU5hbWV9JHtcblx0XHRcdFx0dXJsRW5jb2RlID8gZW5jb2RlVVJJQ29tcG9uZW50KGVxT3ApIDogZXFPcFxuXHRcdFx0fSR7dmFsdWV9YDtcblx0XHRcdGNvbXBhcmlzb24gKz0gcmFuZ2VzLmxlbmd0aCA+IDEgPyBgKCR7Y29tcFZhbHVlfSlgIDogY29tcFZhbHVlO1xuXHRcdH1cblx0XHRpZiAoaSA8IHJhbmdlcy5sZW5ndGggLSAxKSB7XG5cdFx0XHRjb21wYXJpc29uICs9IGAgJHtvck9wfSBgO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gY29tcGFyaXNvbjtcbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb259IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdGV4dC91dGlsLm1qc1wiO1xuXG5kZXNjcmliZSgnZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgY29ycmVjdCBjb21wYXJpc29uIGV4cHJlc3Npb24gZm9yIHNpbmdsZSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnMSwzLDUnO1xuICAgICAgICBjb25zdCB2YWx1ZU5hbWUgPSAneCc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uLCB2YWx1ZU5hbWUpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgnKHg9PTEpIHx8ICh4PT0zKSB8fCAoeD09NSknKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgY29ycmVjdCBjb21wYXJpc29uIGV4cHJlc3Npb24gZm9yIHJhbmdlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9ICcxLTMsNi04JztcbiAgICAgICAgY29uc3QgdmFsdWVOYW1lID0gJ3gnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoJyh4Pj0xICYmIHg8PTMpIHx8ICh4Pj02ICYmIHg8PTgpJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGNvcnJlY3QgY29tcGFyaXNvbiBleHByZXNzaW9uIGZvciBtaXhlZCByYW5nZXMgYW5kIHNpbmdsZSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnMS0zLDUsNy05JztcbiAgICAgICAgY29uc3QgdmFsdWVOYW1lID0gJ3gnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoJyh4Pj0xICYmIHg8PTMpIHx8ICh4PT01KSB8fCAoeD49NyAmJiB4PD05KScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBmb3IgaW52YWxpZCByYW5nZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9ICcxLTMsNS00JztcbiAgICAgICAgY29uc3QgdmFsdWVOYW1lID0gJ3gnO1xuICAgICAgICBleHBlY3QoKCkgPT4gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHJlc3Npb24sIHZhbHVlTmFtZSkpLnRvLnRocm93KGBJbnZhbGlkIHJhbmdlICc1LTQnYCk7XG4gICAgfSk7XG5cblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgZm9yIGludmFsaWQgdmFsdWUnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnMS0zLGEnO1xuICAgICAgICBjb25zdCB2YWx1ZU5hbWUgPSAneCc7XG4gICAgICAgIGV4cGVjdCgoKSA9PiBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lKSkudG8udGhyb3coJ0ludmFsaWQgdmFsdWUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgY29ycmVjdCBjb21wYXJpc29uIGV4cHJlc3Npb24gd2l0aCBjdXN0b20gb3BlcmF0b3JzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gJzEtMyw1JztcbiAgICAgICAgY29uc3QgdmFsdWVOYW1lID0gJ3gnO1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgYW5kT3A6ICdBTkQnLFxuICAgICAgICAgICAgb3JPcDogJ09SJyxcbiAgICAgICAgICAgIGVxT3A6ICc9PT0nLFxuICAgICAgICAgICAgZ2VPcDogJz49JyxcbiAgICAgICAgICAgIGxlT3A6ICc8PScsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uLCB2YWx1ZU5hbWUsIG9wdGlvbnMpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgnKHg+PTEgQU5EIHg8PTMpIE9SICh4PT09NSknKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgY29ycmVjdCBjb21wYXJpc29uIGV4cHJlc3Npb24gd2l0aCB1cmxFbmNvZGUgb3B0aW9uJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXN0Q2FzZXMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogJzEsMyw1JyxcbiAgICAgICAgICAgICAgICB2YWx1ZU5hbWU6ICd4JyxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogJyh4JTNEJTNEMSkgfHwgKHglM0QlM0QzKSB8fCAoeCUzRCUzRDUpJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogJy0xMCcsXG4gICAgICAgICAgICAgICAgdmFsdWVOYW1lOiAneCcsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICd4JTNDJTNEMTAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAnMTAtJyxcbiAgICAgICAgICAgICAgICB2YWx1ZU5hbWU6ICd4JyxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogJ3glM0UlM0QxMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICcxLTMsNi04JyxcbiAgICAgICAgICAgICAgICB2YWx1ZU5hbWU6ICd5JyxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogJyh5JTNFJTNEMSAmJiB5JTNDJTNEMykgfHwgKHklM0UlM0Q2ICYmIHklM0MlM0Q4KScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICcxLTMsNSw3LTknLFxuICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogJ3onLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiAnKHolM0UlM0QxICYmIHolM0MlM0QzKSB8fCAoeiUzRCUzRDUpIHx8ICh6JTNFJTNENyAmJiB6JTNDJTNEOSknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICB0ZXN0Q2FzZXMuZm9yRWFjaCgoe2V4cHJlc3Npb24sIHZhbHVlTmFtZSwgZXhwZWN0ZWR9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lLCB7dXJsRW5jb2RlOiB0cnVlfSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbChleHBlY3RlZCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBjb3JyZWN0IGNvbXBhcmlzb24gZXhwcmVzc2lvbiBmb3Igb3Blbi1lbmRlZCByYW5nZXMgd2l0aCB1cmxFbmNvZGUgb3B0aW9uJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXN0Q2FzZXMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogJzEwLScsXG4gICAgICAgICAgICAgICAgdmFsdWVOYW1lOiAneCcsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICd4JTNFJTNEMTAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAnLTEwJyxcbiAgICAgICAgICAgICAgICB2YWx1ZU5hbWU6ICd5JyxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogJ3klM0MlM0QxMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIHRlc3RDYXNlcy5mb3JFYWNoKCh7ZXhwcmVzc2lvbiwgdmFsdWVOYW1lLCBleHBlY3RlZH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uLCB2YWx1ZU5hbWUsIHt1cmxFbmNvZGU6IHRydWV9KTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKGV4cGVjdGVkKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5leHBvcnQgeyBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaCwgY3JlYXRlQnJhY2tldGVkS2V5VmFsdWVIYXNoIH07XG5cbi8qKlxuICogUGFyc2VzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYnJhY2tldGVkIGtleS12YWx1ZSBwYWlycyBhbmQgcmV0dXJucyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwYXJzZWQgcmVzdWx0LlxuICpcbiAqIC0gVGhlIHN0cmluZyBzdGFydHMgd2l0aCBhIGhhc2ggc3ltYm9sICMuXG4gKiAtIEFmdGVyIHRoZSBoYXNoIHN5bWJvbCwgdGhlcmUgYXJlIG9uZSBvciBtb3JlIHNlbGVjdG9yIHN0cmluZ3MsIHNlcGFyYXRlZCBieSBhIHNlbWljb2xvbiA7LlxuICogLSBFYWNoIHNlbGVjdG9yIHN0cmluZyBoYXMgdGhlIGZvcm1hdCBzZWxlY3Rvck5hbWUoa2V5MT12YWx1ZTEsa2V5Mj12YWx1ZTIsLi4uKS5cbiAqIC0gVGhlIHNlbGVjdG9yIG5hbWUgaXMgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuXG4gKiAtIFRoZSBrZXktdmFsdWUgcGFpcnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMgLCBhbmQgYXJlIG9mIHRoZSBmb3JtIGtleT12YWx1ZS5cbiAqIC0gVGhlIGtleSBpcyBhIHN0cmluZyBvZiBvbmUgb3IgbW9yZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycy5cbiAqIC0gVGhlIHZhbHVlIGNhbiBiZSBhbiBlbXB0eSBzdHJpbmcgb3IgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUgY2hhcmFjdGVycy5cbiAqIC0gSWYgdGhlIHZhbHVlIGNvbnRhaW5zIGNvbW1hcywgaXQgbXVzdCBiZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzIFwiLlxuICogLSBUaGUgZW50aXJlIGtleS12YWx1ZSBwYWlyIG11c3QgYmUgVVJMLWVuY29kZWQuXG4gKiAtIFRoZSBjbG9zaW5nIHBhcmVudGhlc2lzICkgZm9yIGVhY2ggc2VsZWN0b3IgbXVzdCBiZSBwcmVzZW50LCBldmVuIGlmIHRoZXJlIGFyZSBubyBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiAvLyBFeGFtcGxlIDE6XG4gKiBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcjEoa2V5MT12YWx1ZTEsa2V5Mj12YWx1ZTIpO3NlbGVjdG9yMihrZXkzPXZhbHVlMyknO1xuICogY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gKiAvLyByZXN1bHQgPT4geyBzZWxlY3RvcjE6IHsga2V5MTogXCJ2YWx1ZTFcIiwga2V5MjogXCJ2YWx1ZTJcIiB9LCBzZWxlY3RvcjI6IHsga2V5MzogXCJ2YWx1ZTNcIiB9IH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogLy8gRXhhbXBsZSAyOlxuICogY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3IxKGtleTE9dmFsdWUxLGtleTI9dmFsdWUyKTtzZWxlY3RvcjIoJztcbiAqIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICogLy8gcmVzdWx0ID0+IHt9XG4gKiBgYGBcbiAqXG4gKiBAc2luY2UgMy4zNy4wXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaFN0cmluZyAtIFRoZSBzdHJpbmcgdG8gcGFyc2UsIGNvbnRhaW5pbmcgYnJhY2tldGVkIGtleS12YWx1ZSBwYWlycy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IC0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcGFyc2VkIHJlc3VsdCwgd2l0aCBrZXlzIHJlcHJlc2VudGluZyB0aGUgc2VsZWN0b3JzIGFuZCB2YWx1ZXMgcmVwcmVzZW50aW5nIHRoZSBrZXktdmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggc2VsZWN0b3IuXG4gKiAgICAgICAgICAgICAgICAgICAgLSBSZXR1cm5zIGFuIGVtcHR5IG9iamVjdCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgZHVyaW5nIHBhcnNpbmcuICovXG5mdW5jdGlvbiBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKSB7XG5cdGNvbnN0IHNlbGVjdG9ycyA9IHt9O1xuXHQvL2NvbnN0IHNlbGVjdG9yU3RhY2sgPSBbXTtcblx0Ly9jb25zdCBrZXlWYWx1ZVN0YWNrID0gW107XG5cblx0Y29uc3QgdHJpbW1lZEhhc2hTdHJpbmcgPSBoYXNoU3RyaW5nLnRyaW0oKTtcblx0Y29uc3QgY2xlYW5lZEhhc2hTdHJpbmcgPVxuXHRcdHRyaW1tZWRIYXNoU3RyaW5nLmNoYXJBdCgwKSA9PT0gXCIjXCJcblx0XHRcdD8gdHJpbW1lZEhhc2hTdHJpbmcuc2xpY2UoMSlcblx0XHRcdDogdHJpbW1lZEhhc2hTdHJpbmc7XG5cblx0Ly9jb25zdCBzZWxlY3RvcnMgPSAoa2V5VmFsdWVTdGFjay5sZW5ndGggPiAwKSA/IHJlc3VsdFtzZWxlY3RvclN0YWNrW3NlbGVjdG9yU3RhY2subGVuZ3RoIC0gMV1dIDogcmVzdWx0O1xuXHRsZXQgY3VycmVudFNlbGVjdG9yID0gXCJcIjtcblxuXHRmdW5jdGlvbiBhZGRUb1Jlc3VsdChrZXksIHZhbHVlKSB7XG5cdFx0aWYgKGN1cnJlbnRTZWxlY3RvciAmJiBrZXkpIHtcblx0XHRcdGlmICghc2VsZWN0b3JzW2N1cnJlbnRTZWxlY3Rvcl0pIHtcblx0XHRcdFx0c2VsZWN0b3JzW2N1cnJlbnRTZWxlY3Rvcl0gPSB7fTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZWN0b3JzW2N1cnJlbnRTZWxlY3Rvcl1ba2V5XSA9IHZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdGxldCBjdXJyZW50S2V5ID0gXCJcIjtcblx0bGV0IGN1cnJlbnRWYWx1ZSA9IFwiXCI7XG5cdGxldCBpbktleSA9IHRydWU7XG5cdGxldCBpblZhbHVlID0gZmFsc2U7XG5cdGxldCBpblF1b3RlZFZhbHVlID0gZmFsc2U7XG5cdGxldCBpblNlbGVjdG9yID0gdHJ1ZTtcblx0bGV0IGVzY2FwZWQgPSBmYWxzZTtcblx0bGV0IHF1b3RlZFZhbHVlU3RhcnRDaGFyID0gXCJcIjtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGNsZWFuZWRIYXNoU3RyaW5nLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgYyA9IGNsZWFuZWRIYXNoU3RyaW5nW2ldO1xuXHRcdGNvbnN0IG5leHRDaGFyID0gY2xlYW5lZEhhc2hTdHJpbmc/LltpICsgMV07XG5cblx0XHRpZiAoYyA9PT0gXCJcXFxcXCIgJiYgIWVzY2FwZWQpIHtcblx0XHRcdGVzY2FwZWQgPSB0cnVlO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGVzY2FwZWQpIHtcblx0XHRcdGlmIChpblNlbGVjdG9yKSB7XG5cdFx0XHRcdGN1cnJlbnRTZWxlY3RvciArPSBjO1xuXHRcdFx0fSBlbHNlIGlmIChpbktleSkge1xuXHRcdFx0XHRjdXJyZW50S2V5ICs9IGM7XG5cdFx0XHR9IGVsc2UgaWYgKGluVmFsdWUpIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlICs9IGM7XG5cdFx0XHR9XG5cdFx0XHRlc2NhcGVkID0gZmFsc2U7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoaW5RdW90ZWRWYWx1ZSAmJiBxdW90ZWRWYWx1ZVN0YXJ0Q2hhciAhPT0gYykge1xuXHRcdFx0aWYgKGluU2VsZWN0b3IpIHtcblx0XHRcdFx0Y3VycmVudFNlbGVjdG9yICs9IGM7XG5cdFx0XHR9IGVsc2UgaWYgKGluS2V5KSB7XG5cdFx0XHRcdGN1cnJlbnRLZXkgKz0gYztcblx0XHRcdH0gZWxzZSBpZiAoaW5WYWx1ZSkge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgKz0gYztcblx0XHRcdH1cblxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGMgPT09IFwiO1wiICYmIGluU2VsZWN0b3IpIHtcblx0XHRcdGluU2VsZWN0b3IgPSB0cnVlO1xuXHRcdFx0Y3VycmVudFNlbGVjdG9yID0gXCJcIjtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChpblNlbGVjdG9yID09PSB0cnVlICYmIGMgIT09IFwiKFwiKSB7XG5cdFx0XHRjdXJyZW50U2VsZWN0b3IgKz0gYztcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChjID09PSBcIihcIiAmJiBpblNlbGVjdG9yKSB7XG5cdFx0XHRpblNlbGVjdG9yID0gZmFsc2U7XG5cdFx0XHRpbktleSA9IHRydWU7XG5cblx0XHRcdGN1cnJlbnRLZXkgPSBcIlwiO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGluS2V5ID09PSB0cnVlICYmIGMgIT09IFwiPVwiKSB7XG5cdFx0XHRjdXJyZW50S2V5ICs9IGM7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoYyA9PT0gXCI9XCIgJiYgaW5LZXkpIHtcblx0XHRcdGluS2V5ID0gZmFsc2U7XG5cdFx0XHRpblZhbHVlID0gdHJ1ZTtcblxuXHRcdFx0aWYgKG5leHRDaGFyID09PSAnXCInIHx8IG5leHRDaGFyID09PSBcIidcIikge1xuXHRcdFx0XHRpblF1b3RlZFZhbHVlID0gdHJ1ZTtcblx0XHRcdFx0cXVvdGVkVmFsdWVTdGFydENoYXIgPSBuZXh0Q2hhcjtcblx0XHRcdFx0aSsrO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y3VycmVudFZhbHVlID0gXCJcIjtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChpblZhbHVlID09PSB0cnVlKSB7XG5cdFx0XHRpZiAoaW5RdW90ZWRWYWx1ZSkge1xuXHRcdFx0XHRpZiAoYyA9PT0gcXVvdGVkVmFsdWVTdGFydENoYXIpIHtcblx0XHRcdFx0XHRpblF1b3RlZFZhbHVlID0gZmFsc2U7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjdXJyZW50VmFsdWUgKz0gYztcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjID09PSBcIixcIikge1xuXHRcdFx0XHRpblZhbHVlID0gZmFsc2U7XG5cdFx0XHRcdGluS2V5ID0gdHJ1ZTtcblx0XHRcdFx0Y29uc3QgZGVjb2RlZEN1cnJlbnRWYWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudChjdXJyZW50VmFsdWUpO1xuXHRcdFx0XHRhZGRUb1Jlc3VsdChjdXJyZW50S2V5LCBkZWNvZGVkQ3VycmVudFZhbHVlKTtcblx0XHRcdFx0Y3VycmVudEtleSA9IFwiXCI7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IFwiXCI7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYyA9PT0gXCIpXCIpIHtcblx0XHRcdFx0aW5WYWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHQvL2luS2V5ID0gdHJ1ZTtcblx0XHRcdFx0aW5TZWxlY3RvciA9IHRydWU7XG5cblx0XHRcdFx0Y29uc3QgZGVjb2RlZEN1cnJlbnRWYWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudChjdXJyZW50VmFsdWUpO1xuXHRcdFx0XHRhZGRUb1Jlc3VsdChjdXJyZW50S2V5LCBkZWNvZGVkQ3VycmVudFZhbHVlKTtcblx0XHRcdFx0Y3VycmVudEtleSA9IFwiXCI7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IFwiXCI7XG5cdFx0XHRcdGN1cnJlbnRTZWxlY3RvciA9IFwiXCI7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjdXJyZW50VmFsdWUgKz0gYztcblxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGluU2VsZWN0b3IpIHtcblx0XHRyZXR1cm4gc2VsZWN0b3JzO1xuXHR9XG5cblx0cmV0dXJuIHt9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIHNlbGVjdG9yIHN0cmluZyBmcm9tIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IC0gVGhlIG9iamVjdCBjb250YWluaW5nIHNlbGVjdG9ycyBhbmQga2V5LXZhbHVlIHBhaXJzLlxuICogQHBhcmFtIHtib29sZWFufSBhZGRIYXNoUHJlZml4IC0gV2hldGhlciB0byBhZGQgdGhlIGhhc2ggcHJlZml4ICMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGhhc2ggc2VsZWN0b3Igc3RyaW5nLlxuICogQHNpbmNlIDMuMzcuMFxuICovXG5mdW5jdGlvbiBjcmVhdGVCcmFja2V0ZWRLZXlWYWx1ZUhhc2gob2JqZWN0LCBhZGRIYXNoUHJlZml4ID0gdHJ1ZSkge1xuXHRpZiAoIW9iamVjdCkge1xuXHRcdHJldHVybiBhZGRIYXNoUHJlZml4ID8gXCIjXCIgOiBcIlwiO1xuXHR9XG5cblx0bGV0IGhhc2hTdHJpbmcgPSBcIlwiO1xuXG5cdGZ1bmN0aW9uIGVuY29kZUtleVZhbHVlKGtleSwgdmFsdWUpIHtcblx0XHRyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGtleSkgKyBcIj1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG5cdH1cblxuXHRmb3IgKGNvbnN0IHNlbGVjdG9yIGluIG9iamVjdCkge1xuXHRcdGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoc2VsZWN0b3IpKSB7XG5cdFx0XHRjb25zdCBrZXlWYWx1ZVBhaXJzID0gb2JqZWN0W3NlbGVjdG9yXTtcblx0XHRcdGxldCBzZWxlY3RvclN0cmluZyA9IHNlbGVjdG9yO1xuXHRcdFx0bGV0IGtleVZhbHVlU3RyaW5nID0gXCJcIjtcblxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4ga2V5VmFsdWVQYWlycykge1xuXHRcdFx0XHRpZiAoa2V5VmFsdWVQYWlycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSBrZXlWYWx1ZVBhaXJzW2tleV07XG5cdFx0XHRcdFx0a2V5VmFsdWVTdHJpbmcgKz0ga2V5VmFsdWVTdHJpbmcubGVuZ3RoID09PSAwID8gXCJcIiA6IFwiLFwiO1xuXHRcdFx0XHRcdGtleVZhbHVlU3RyaW5nICs9IGVuY29kZUtleVZhbHVlKGtleSwgdmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChrZXlWYWx1ZVN0cmluZy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHNlbGVjdG9yU3RyaW5nICs9IFwiKFwiICsga2V5VmFsdWVTdHJpbmcgKyBcIilcIjtcblx0XHRcdFx0aGFzaFN0cmluZyArPSBoYXNoU3RyaW5nLmxlbmd0aCA9PT0gMCA/IFwiXCIgOiBcIjtcIjtcblx0XHRcdFx0aGFzaFN0cmluZyArPSBzZWxlY3RvclN0cmluZztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYWRkSGFzaFByZWZpeCA/IFwiI1wiICsgaGFzaFN0cmluZyA6IGhhc2hTdHJpbmc7XG59XG4iLCAiLy8gdGVzdC5qc1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCI7XG5pbXBvcnQge1xuICAgIHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoLFxuICAgIGNyZWF0ZUJyYWNrZXRlZEtleVZhbHVlSGFzaFxufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3RleHQvYnJhY2tldGVkLWtleS12YWx1ZS1oYXNoLm1qc1wiO1xuXG5kZXNjcmliZShcInBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGZvciBhbiBlbXB0eSBzdHJpbmdcIiwgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IFwiXCI7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge307XG4gICAgICAgIGV4cGVjdChwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCkpLnRvLmRlZXAuZXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcGFyc2UgYSBzaW5nbGUgc2VsZWN0b3Igd2l0aCBvbmUga2V5LXZhbHVlIHBhaXJcIiwgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IFwiI3NlbGVjdG9yMShrZXkxPXZhbHVlMSlcIjtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7XG4gICAgICAgICAgICBzZWxlY3RvcjE6IHtcbiAgICAgICAgICAgICAgICBrZXkxOiBcInZhbHVlMVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgZXhwZWN0KHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGlucHV0KSkudG8uZGVlcC5lcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBwYXJzZSBtdWx0aXBsZSBzZWxlY3RvcnMgd2l0aCBtdWx0aXBsZSBrZXktdmFsdWUgcGFpcnNcIiwgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IFwiI3NlbGVjdG9yMShrZXkxPXZhbHVlMSxrZXkyPXZhbHVlMik7c2VsZWN0b3IyKGtleTM9dmFsdWUzLGtleTQ9dmFsdWU0KVwiO1xuICAgICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHtcbiAgICAgICAgICAgIHNlbGVjdG9yMToge1xuICAgICAgICAgICAgICAgIGtleTE6IFwidmFsdWUxXCIsXG4gICAgICAgICAgICAgICAga2V5MjogXCJ2YWx1ZTJcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWxlY3RvcjI6IHtcbiAgICAgICAgICAgICAgICBrZXkzOiBcInZhbHVlM1wiLFxuICAgICAgICAgICAgICAgIGtleTQ6IFwidmFsdWU0XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBleHBlY3QocGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQpKS50by5kZWVwLmVxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGRlY29kZSBVUkwtZW5jb2RlZCB2YWx1ZXNcIiwgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IFwiI3NlbGVjdG9yMShrZXkxPXZhbHVlMSUyQ3dpdGglMjBjb21tYSlcIjtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7XG4gICAgICAgICAgICBzZWxlY3RvcjE6IHtcbiAgICAgICAgICAgICAgICBrZXkxOiBcInZhbHVlMSx3aXRoIGNvbW1hXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQuc2VsZWN0b3IxLmtleTEpLnRvLmVxdWFsKGV4cGVjdGVkUmVzdWx0LnNlbGVjdG9yMS5rZXkxKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBpbnB1dCB3aXRob3V0IGEgbGVhZGluZyBoYXNoXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBcInNlbGVjdG9yMShrZXkxPXZhbHVlMSlcIjtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7XG4gICAgICAgICAgICBzZWxlY3RvcjE6IHtcbiAgICAgICAgICAgICAgICBrZXkxOiBcInZhbHVlMVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgZXhwZWN0KHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGlucHV0KSkudG8uZGVlcC5lcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGZvciBpbnZhbGlkIGlucHV0XCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBcIiNzZWxlY3RvcjEoa2V5MT12YWx1ZTEsa2V5MlwiO1xuICAgICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHt9O1xuICAgICAgICBleHBlY3QocGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQpKS50by5kZWVwLmVxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBmb3IgYW4gZW1wdHkgaW5wdXQgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBmb3IgYW4gaW52YWxpZCBpbnB1dCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI2ludmFsaWQnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhcnNlIGEgc2ltcGxlIGlucHV0IHN0cmluZyB3aXRoIG9uZSBzZWxlY3RvciBhbmQgb25lIGtleS12YWx1ZSBwYWlyJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXk9dmFsdWUpJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe3NlbGVjdG9yOiB7a2V5OiAndmFsdWUnfX0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBhbiBpbnB1dCBzdHJpbmcgd2l0aCBtdWx0aXBsZSBzZWxlY3RvcnMgYW5kIGtleS12YWx1ZSBwYWlycycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3IxKGtleTE9dmFsdWUxKTtzZWxlY3RvcjIoa2V5Mj12YWx1ZTIpJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe3NlbGVjdG9yMToge2tleTE6ICd2YWx1ZTEnfSwgc2VsZWN0b3IyOiB7a2V5MjogJ3ZhbHVlMid9fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBlbXB0eSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yKGtleTE9LGtleTI9KSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHtzZWxlY3Rvcjoge2tleTE6ICcnLCBrZXkyOiAnJ319KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHBlcmNlbnQtZW5jb2RlZCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yKGtleTE9dmFsdWUlMjAxLGtleTI9dmFsdWUlMkMyKSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHtzZWxlY3Rvcjoge2tleTE6ICd2YWx1ZSAxJywga2V5MjogJ3ZhbHVlLDInfX0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZG91YmxlLXF1b3RlZCB2YWx1ZXMgd2l0aCBjb21tYXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yKGtleTE9XCJ2YWx1ZSwxXCIsa2V5Mj1cInZhbHVlLDJcIiknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7c2VsZWN0b3I6IHtrZXkxOiAndmFsdWUsMScsIGtleTI6ICd2YWx1ZSwyJ319KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaWdub3JlIGxlYWRpbmcgaGFzaCBzeW1ib2wgKCMpJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJ3NlbGVjdG9yKGtleT12YWx1ZSknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7c2VsZWN0b3I6IHtrZXk6ICd2YWx1ZSd9fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGlnbm9yZSBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZSBzcGFjZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcgICNzZWxlY3RvcihrZXk9dmFsdWUpICAnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7c2VsZWN0b3I6IHtrZXk6ICd2YWx1ZSd9fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGlucHV0IHN0cmluZyBlbmRzIHByZW1hdHVyZWx5JywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXk9dmFsdWUnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgYSBzZWxlY3RvciBpcyBtaXNzaW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyMoa2V5PXZhbHVlKSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBpZiBhIGtleSBpcyBtaXNzaW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3Rvcig9dmFsdWUpJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmYSB2YWx1ZSBpcyBtaXNzaW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXk9KSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiB7XG4gICAgICAgICAgICAgICAga2V5OiAnJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIHRoZXJlIGlzIG5vIGNsb3NpbmcgcGFyZW50aGVzaXMgZm9yIGEgc2VsZWN0b3InLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yKGtleT12YWx1ZTsnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlcmUgaXMgbm8gc2VtaWNvbG9uIGFmdGVyIGEgc2VsZWN0b3InLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yKGtleT12YWx1ZSlzZWxlY3RvcjIoa2V5Mj12YWx1ZTIpJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe1xuICAgICAgICAgICAgc2VsZWN0b3I6IHtcbiAgICAgICAgICAgICAgICBrZXk6ICd2YWx1ZScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VsZWN0b3IyOiB7XG4gICAgICAgICAgICAgICAga2V5MjogJ3ZhbHVlMicsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjcmVhdGVCcmFja2V0ZWRLZXlWYWx1ZUhhc2gnLCAoKSA9PiB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGhhc2ggc3RyaW5nIGZvciBhIHNpbXBsZSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHtcbiAgICAgICAgICAgICAgICAnLmV4YW1wbGUnOiB7XG4gICAgICAgICAgICAgICAgICAgICdjb2xvcic6ICdyZWQnLFxuICAgICAgICAgICAgICAgICAgICAnZm9udC1zaXplJzogJzE0cHgnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnLm90aGVyJzoge1xuICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZCc6ICdibHVlJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFwiIy5leGFtcGxlKGNvbG9yPXJlZCxmb250LXNpemU9MTRweCk7Lm90aGVyKGJhY2tncm91bmQ9Ymx1ZSlcIik7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSB1cmwtZW5jb2RlZCBoYXNoIHN0cmluZyBmb3IgYSBzaW1wbGUgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB7XG4gICAgICAgICAgICAgICAgJy5leGFtcGxlJzoge1xuICAgICAgICAgICAgICAgICAgICAnY29sb3InOiAnclwiZWQnLFxuICAgICAgICAgICAgICAgICAgICAnZm9udC1zaXplJzogJzE0cHgnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnLm90aGVyJzoge1xuICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZCc6ICdibHVlJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCwgdHJ1ZSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFwiIy5leGFtcGxlKGNvbG9yPXIlMjJlZCxmb250LXNpemU9MTRweCk7Lm90aGVyKGJhY2tncm91bmQ9Ymx1ZSlcIik7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGZvciBhbiBlbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHt9O1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY3JlYXRlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGlucHV0LGZhbHNlKTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoXCJcIik7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGZvciBhbiBlbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHt9O1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY3JlYXRlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGlucHV0LGZhbHNlKTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoXCJcIik7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICB9KTtcblxuXG59KTtcbiIsICIvKiogbm9kZWpzIGRvZXNudCBzdXBwb3J0IHdpbmRvdy5jcnlwdCAqL1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ01hdGgnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgcmFuZG9tID0gKCkgPT4ge31cbiAgICBcbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuICAgICAgICBpZiAoIWdsb2JhbFRoaXNbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbihtID0+IHtcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzWydjcnlwdG8nXSA9IG5ldyBtLkNyeXB0bygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgIH1cblxuICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS9tYXRoL3JhbmRvbS5tanNcIikudGhlbihtID0+IHtcbiAgICAgICAgICAgIHJhbmRvbSA9IG0ucmFuZG9tO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pKVxuXG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnJhbmRvbSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdhIGdyZWF0ZXIgYiBzaG91bGQgdGhyb3cgZXJyb3IgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IHJhbmRvbSgxMCwgMikpLnRvLnRocm93KEVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJyBzaG91bGQgcmV0dXJuIGEgbnVtYmVyICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCByID0gcmFuZG9tKCk7XG4gICAgICAgICAgICBleHBlY3QocikudGhhdC5pcy5hKCdudW1iZXInKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJyBzaG91bGQgcmV0dXJuIGEgbnVtYmVyICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiByYW5kb20oNSwgNikpLnRvLnRocm93KEVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJyBzaG91bGQgdGhyb3cgRXJyb3Igd2UgY2Fubm90IGdlbmVyYXRlIG51bWJlcnMgbGFyZ2VyIHRoYW4gNTMgYml0cy4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gcmFuZG9tKC05OTk5OTk5OTksIDk5OTk5OTk5OTk5OTk5OTk5OTk5KSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnIHNob3VsZCB0aHJvdyBFcnJvciB3ZSBjYW5ub3QgZ2VuZXJhdGUgbnVtYmVycyBsYXJnZXIgdGhhbiA1MyBiaXRzLicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsxLCAxMDBdLFxuICAgICAgICAgICAgICAgIFs1MDAsIDYwMF0sXG4gICAgICAgICAgICAgICAgWzEwMCwgMTAwMF1cbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICAgICAgbGV0IHIgPSByYW5kb20oYSwgYik7XG5cbiAgICAgICAgICAgICAgICBpdChyICsgJyBzaG91bGQgcmV0dXJuIHZhbHVlIGJldHdlZW4gJyArIGEgKyAnICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChyID49IGEpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChyIDw9IGIpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsxLCAxMDBdLFxuICAgICAgICAgICAgICAgIFs1MDAsIDYwMF0sXG4gICAgICAgICAgICAgICAgWzEwMCwgMTAwMF1cbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICAgICAgbGV0IHN1bSA9IDA7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm91bmRzID0gNTAwXG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbWF4ID0gcm91bmRzOyBpIDwgbWF4OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgc3VtICs9IHJhbmRvbShhLCBiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgYXZnID0gc3VtIC8gcm91bmRzO1xuXG4gICAgICAgICAgICAgICAgaXQoYXZnICsgJyBzaG91bGQgYmV0d2VlbiAnICsgYSArICcgJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGF2ZyA+IGEpLnRvLmJlLnRydWVcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGF2ZyA8IGIpLnRvLmJlLnRydWVcbiAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfSlcblxuXG4gICAgfSlcblxuXG59KSIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHt0cmltU3BhY2VzfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvdHJpbXNwYWNlcy5tanNcIjtcblxuXG5kZXNjcmliZSgndHJpbVNwYWNlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBbXG4gICAgICAgIC8vIG9uZSBzdHJva2UgaXMgZXNjcGVkIGJ5IHRoZSBqYXZhc2NyaXB0IGludGVycHJldGVyLCB0aGUgc2Vjb25kIHN0cm9rZSBlc2NhcGVzIHRoZSBzdHJva2VcbiAgICAgICAgWycgdmFsdWUgJywgJ3ZhbHVlJ10sXG4gICAgICAgIFsnIHZhbHVlXFxcXCAnLCAndmFsdWVcXFxcICddLFxuICAgICAgICBbJ1xcXFwgdmFsdWVcXFxcICcsICdcXFxcIHZhbHVlXFxcXCAnXSxcbiAgICAgICAgWydcXCB2YWx1ZVxcICcsICd2YWx1ZSddLCAgIFxuICAgICAgICBbXCIgICB2YWx1ZSBcXCBcIiwgJ3ZhbHVlJ10sIFxuXG4gICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICBpdCgndHJpbVNwYWNlcygnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBKU09OLnN0cmluZ2lmeShiKSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHRyaW1TcGFjZXMoYSkpLnRvLmJlLmVxdWFsKGIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn0pO1xuICAgICIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtQcm9jZXNzaW5nfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvcHJvY2Vzc2luZy5tanNcIjtcblxuXG5kZXNjcmliZSgnUHJvY2Vzc2luZycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdydW4gaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gbWFueSBmdW5jdGlvbicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBjb3VudGVyID0gMDtcbiAgICAgICAgICAgIGxldCB0ID0gK25ldyBEYXRlKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRlc2lyZWREZWxheSA9IDIwMDtcbiAgICAgICAgICAgIHRoaXMudGltZW91dChkZXNpcmVkRGVsYXkrMTAwKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gZGVsYXkgMTIgXG4gICAgICAgICAgICBuZXcgUHJvY2Vzc2luZygodikgPT4ge1xuICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgIH0sICh2KSA9PiB7XG4gICAgICAgICAgICAgICAgY291bnRlcisrXG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGNvdW50ZXIrK1xuICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgfSwgZGVzaXJlZERlbGF5LGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgY291bnRlcisrXG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9KS5ydW4oJ3Rlc3QnKS50aGVuKCh2KSA9PiB7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoY291bnRlcikudG8uYmUuZXF1YWwoNCk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2ID09PSAndGVzdCcpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGRlbGF5XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgrbmV3IERhdGUoKSA+IHQgKyBkZXNpcmVkRGVsYXkrMSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJ1biBvbmUgZnVuY3Rpb24nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG5cbiAgICAgICAgICAgIG5ldyBQcm9jZXNzaW5nKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvdW50ZXIrK1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0pLnJ1bigndGVzdCcpLnRoZW4oKHYpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodiA9PT0gJ3Rlc3QnKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gbm8gZnVuY3Rpb24nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG5cbiAgICAgICAgICAgIG5ldyBQcm9jZXNzaW5nKCkucnVuKCd0ZXN0JykudGhlbigodikgPT4ge1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHYgPT09ICd0ZXN0JykudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjcmVhdGUgbmV3IGluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgUHJvY2Vzc2luZyBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFByb2Nlc3NpbmcoKSkudG8uYmUuYSgnb2JqZWN0Jyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgUHJvY2Vzc2luZyBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFByb2Nlc3NpbmcoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgfSkpLnRvLmJlLmEoJ29iamVjdCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IFR5cGVFcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgUHJvY2Vzc2luZyh0cnVlKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBUeXBlRXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IFByb2Nlc3NpbmcoXCJ0ZXN0XCIpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbn0pOyIsICJpbXBvcnQge0RlYWRNYW5zU3dpdGNofSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0RlYWRNYW5zU3dpdGNoJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ3J1biBpbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJ1bicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IG1zMSA9ICBEYXRlLm5vdygpO1xuXG4gICAgICAgICAgICBuZXcgRGVhZE1hbnNTd2l0Y2goMTAwLCAoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBtczIgPSAgRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBtczIgLSBtczE7XG4gICAgICAgICAgICAgICAgaWYgKGRpZmYgPCAxMDApIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgndG8gc2hvcnQgJyArIGRpZmYpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdydW4gaW5zdGFuY2UgYW5kIHRvdWNoJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3QgbXMxID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgY29uc3QgZGVhZG1hbnNzd2l0Y2ggPSBuZXcgRGVhZE1hbnNTd2l0Y2goMTAwLCAoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBtczIgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZGlmZiA9IG1zMiAtIG1zMTtcblxuICAgICAgICAgICAgICAgIGlmIChtczEgPiBtczIpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoJ3RpbWluZyBlcnJvcicpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkaWZmIDwgNjAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKCd0byBzaG9ydCAnICsgZGlmZikpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIC8vICAgMCBtczogaW5pdCgpIC0+IHdhaXQgMTAwIG1zIFxuICAgICAgICAgICAgLy8gIDUwIG1zOiB0b3VjaCgpIC0+IHdhaXQgMTAwIG1zXG4gICAgICAgICAgICAvLyAgICAgICAgICAtPiB3YWl0IDEwMFxuICAgICAgICAgICAgLy8gMTAwIG1zOiB0b3VjaCg1MDApIC0+IHdhaXQgNTAwIG1zXG4gICAgICAgICAgICAvLyAgICAgICAgICAtPiB3YWl0IDUwMFxuICAgICAgICAgICAgLy8gNjAwIG1zOiBleGVjdXRlIGNhbGxiYWNrXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBkZWFkbWFuc3N3aXRjaC50b3VjaCgpXG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGVhZG1hbnNzd2l0Y2gudG91Y2goNTAwKVxuICAgICAgICAgICAgICAgIH0sIDUwKVxuXG4gICAgICAgICAgICB9LCA1MClcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG59KTsiLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuXG5leHBvcnQgeyBDb21wYXJhdG9yIH07XG5cbi8qKlxuICogVGhlIGNvbXBhcmF0b3IgYWxsb3dzIGEgY29tcGFyaXNvbiBmdW5jdGlvbiB0byBiZSBhYnN0cmFjdGVkLlxuICpcbiAqIFRoZSBmb2xsb3dpbmcgYXJlIHNvbWUgZXhhbXBsZXMgb2YgdGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBjbGFzcy5cbiAqXG4gKiBgYGBcbiAqIG5ldyBDb21wYXJhdG9yKCkubGVzc1RoYW5PckVxdWFsKDIsIDUpIC8vIFx1MjFBNiB0cnVlXG4gKiBuZXcgQ29tcGFyYXRvcigpLmdyZWF0ZXJUaGFuKDQsIDIpIC8vIFx1MjFBNiB0cnVlXG4gKiBuZXcgQ29tcGFyYXRvcigpLmVxdWFsKDQsIDQpIC8vIFx1MjFBNiB0cnVlXG4gKiBuZXcgQ29tcGFyYXRvcigpLmVxdWFsKDQsIDUpIC8vIFx1MjFBNiBmYWxzZVxuICogYGBgXG4gKlxuICogWW91IGNhbiBhbHNvIHBhc3MgeW91ciBvd24gY29tcGFyaXNvbiBmdW5jdGlvbiwgYW5kIHRodXMgZGVmaW5lIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uLlxuICpcbiAqIGBgYFxuICogbmV3IENvbXBhcmF0b3IoZnVuY3Rpb24gKGEsIGIpIHtcbiAqICAgICAgaWYgKGEudiA9PT0gYi52KSByZXR1cm4gMDtcbiAqICAgICAgICAgcmV0dXJuIGEudiA8IGIudiA/IC0xIDogMTtcbiAqICAgICAgfSkuZXF1YWwoe3Y6IDJ9LCB7djogMn0pOyAgLy8gXHUyMUE2IHRydWVcbiAqIGBgYFxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS91dGlsL2NvbXBhcmF0b3IubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVXRpbFxuICovXG5jbGFzcyBDb21wYXJhdG9yIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBjcmVhdGUgbmV3IGNvbXBhcmF0b3Jcblx0ICpcblx0ICogQHBhcmFtIHtNb25zdGVyLlV0aWx+ZXhhbXBsZUNhbGxiYWNrfSBbY2FsbGJhY2tdIENvbXBhcmF0b3IgY2FsbGJhY2tcblx0ICogQHRocm93IHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICogQHRocm93IHtUeXBlRXJyb3J9IGltcHJhY3RpY2FsIGNvbXBhcmlzb25cblx0ICovXG5cdGNvbnN0cnVjdG9yKGNhbGxiYWNrKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuXHRcdFx0dGhpcy5jb21wYXJlID0gY2FsbGJhY2s7XG5cdFx0fSBlbHNlIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidW5zdXBwb3J0ZWQgdHlwZVwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gZGVmYXVsdCBjb21wYXJlIGZ1bmN0aW9uXG5cblx0XHRcdC8qKlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7Kn0gYVxuXHRcdFx0ICogQHBhcmFtIHsqfSBiXG5cdFx0XHQgKiBAcmV0dXJuIHtpbnRlZ2VyfSAtMSwgMCBvciAxXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMuY29tcGFyZSA9IGZ1bmN0aW9uIChhLCBiKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW1wcmFjdGljYWwgY29tcGFyaXNvblwiLCBcInR5cGVzL2NvbXBhcmF0b3IubWpzXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGEgPT09IGIpIHtcblx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gYSA8IGIgPyAtMSA6IDE7XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBjaGFuZ2VzIHRoZSBvcmRlciBvZiB0aGUgb3BlcmF0b3JzXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NvbXBhcmF0b3J9XG5cdCAqL1xuXHRyZXZlcnNlKCkge1xuXHRcdGNvbnN0IG9yaWdpbmFsID0gdGhpcy5jb21wYXJlO1xuXHRcdHRoaXMuY29tcGFyZSA9IChhLCBiKSA9PiBvcmlnaW5hbChiLCBhKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdHdvIHZhcmlhYmxlcyBhcmUgZXF1YWwuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYVxuXHQgKiBAcGFyYW0geyp9IGJcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGVxdWFsKGEsIGIpIHtcblx0XHRyZXR1cm4gdGhpcy5jb21wYXJlKGEsIGIpID09PSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB2YXJpYWJsZSBgYWAgaXMgZ3JlYXRlciB0aGFuIGBiYFxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFcblx0ICogQHBhcmFtIHsqfSBiXG5cdCAqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRncmVhdGVyVGhhbihhLCBiKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29tcGFyZShhLCBiKSA+IDA7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHZhcmlhYmxlIGBhYCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYGJgXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYVxuXHQgKiBAcGFyYW0geyp9IGJcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGdyZWF0ZXJUaGFuT3JFcXVhbChhLCBiKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ3JlYXRlclRoYW4oYSwgYikgfHwgdGhpcy5lcXVhbChhLCBiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdmFyaWFibGUgYGFgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgYmBcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhXG5cdCAqIEBwYXJhbSB7Kn0gYlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0bGVzc1RoYW5PckVxdWFsKGEsIGIpIHtcblx0XHRyZXR1cm4gdGhpcy5sZXNzVGhhbihhLCBiKSB8fCB0aGlzLmVxdWFsKGEsIGIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB2YXJpYWJsZSBhIGlzIGxlc3MgdGhhbiBiXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYVxuXHQgKiBAcGFyYW0geyp9IGJcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGxlc3NUaGFuKGEsIGIpIHtcblx0XHRyZXR1cm4gdGhpcy5jb21wYXJlKGEsIGIpIDwgMDtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCBieSB0aGUgb3BlcmF0b3JcbiAqXG4gKiBgYGBcbiAqIG5ldyBDb21wYXJhdG9yKGZ1bmN0aW9uIChhLCBiKSB7XG4gKiAgICAgIGlmIChhLnYgPT09IGIudikgcmV0dXJuIDA7XG4gKiAgICAgICAgIHJldHVybiBhLnYgPCBiLnYgPyAtMSA6IDE7XG4gKiAgICAgIH0pLmVxdWFsKHt2OiAyfSwge3Y6IDJ9KTsgIC8vIFx1MjFBNiB0cnVlXG4gKiBgYGBcbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5VdGlsfmV4YW1wbGVDYWxsYmFja1xuICogQHBhcmFtIHsqfSBhXG4gKiBAcGFyYW0geyp9IGJcbiAqIEByZXR1cm4ge2ludGVnZXJ9IC0xLCAwIG9yIDFcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlV0aWxcbiAqIEBzZWUgTW9uc3Rlci5VdGlsLkNvbXBhcmF0b3JcbiAqL1xuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0NvbXBhcmF0b3J9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdXRpbC9jb21wYXJhdG9yLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdDb21wYXJhdG9yJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ2NyZWF0ZSBuZXcgaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBjb21wYXJhdG9yIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpKS50by5iZS5hKCdvYmplY3QnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBjb21wYXJhdG9yIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB9KSkudG8uYmUuYSgnb2JqZWN0Jyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgVHlwZUVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBDb21wYXJhdG9yKHRydWUpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IFR5cGVFcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgQ29tcGFyYXRvcihcInRlc3RcIikpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdlcXVhbCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBcInRlc3RcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWzUuMSwgNSwgZmFsc2VdLFxuICAgICAgICAgICAgWzUuMSwgNS4xLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbLTQsIC00LCB0cnVlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb21wYXJlICcgKyBhICsgJyBhbmQgJyArIGIgKyAnIHJldHVybiAnICsgYywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmVxdWFsKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZXF1YWwoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdHJ1ZV0sXG4gICAgICAgICAgICBbJ3Rlc3QxJywgNV0sXG4gICAgICAgICAgICBbJ3Rlc3QxJywgbnVsbF0sXG4gICAgICAgICAgICBbJ3Rlc3QxJywgcGFyc2VJbnQoXCJhXCIpXSxcbiAgICAgICAgICAgIFtmYWxzZSwgNV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBudWxsXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgdGhyb3cgVHlwZUVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgQ29tcGFyYXRvcigpLmVxdWFsKGEsIGIpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ3JlYXRlclRoYW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0XCIsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LjEsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgLTQsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgNCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkuZ3JlYXRlclRoYW4oYSwgYikpLmlzLmVxdWFsKGMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdyZXZlcnNlKCkuZ3JlYXRlclRoYW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0XCIsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LjEsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgLTQsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgNCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkucmV2ZXJzZSgpLmdyZWF0ZXJUaGFuKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ3JlYXRlclRoYW5PckVxdWFsKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIFwidGVzdFwiLCB0cnVlXSxcbiAgICAgICAgICAgIFs1LjEsIDUsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNS4xLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbLTQsIC00LCB0cnVlXSxcbiAgICAgICAgICAgIFstNCwgNCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkuZ3JlYXRlclRoYW5PckVxdWFsKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbGVzc1RoYW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0XCIsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LjEsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgLTQsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgNCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkubGVzc1RoYW4oYSwgYikpLmlzLmVxdWFsKGMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudGF0aW9ucycsIGZ1bmN0aW9uICgpIHtcblxuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIC4uLicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmxlc3NUaGFuT3JFcXVhbCgyLCA1KSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmdyZWF0ZXJUaGFuKDQsIDIpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkuZXF1YWwoNCwgNCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoKS5lcXVhbCg0LCA1KSkudG8uYmUuZmFsc2U7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gd2l0aCBvd24gZnVuY3Rpb24gLi4uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGEudiA9PT0gYi52KSByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS52IDwgYi52ID8gLTEgOiAxO1xuICAgICAgICAgICAgfSkuZXF1YWwoe3Y6IDJ9LCB7djogMn0pKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdsZXNzVGhhbk9yRXF1YWwoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0XCIsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LjEsIHRydWVdLFxuICAgICAgICAgICAgW3RydWUsIHRydWUsIHRydWVdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFstNCwgLTQsIHRydWVdLFxuICAgICAgICAgICAgWy00LCA0LCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgY29tcGFyZSAnICsgYSArICcgYW5kICcgKyBiICsgJyByZXR1cm4gJyArIGMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoKS5sZXNzVGhhbk9yRXF1YWwoYSwgYikpLmlzLmVxdWFsKGMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgZGVlcEZyZWV6ZSB9O1xuXG4vKipcbiAqIERlZXAgZnJlZXplIGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCBvYmplY3QgdG8gYmUgZnJlZXplXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQHJldHVybnMge29iamVjdH1cbiAqIEBtZW1iZXJPZiBNb25zdGVyLlV0aWxcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuICovXG5mdW5jdGlvbiBkZWVwRnJlZXplKG9iamVjdCkge1xuXHR2YWxpZGF0ZU9iamVjdChvYmplY3QpO1xuXG5cdC8vIFJldHJpZXZlIHRoZSBkZWZpbmVkIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBvYmplY3Rcblx0dmFyIHByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7XG5cblx0Ly8gRnJlZXplIHByb3BlcnRpZXMgYmVmb3JlIGZyZWV6aW5nIHlvdXJzZWxmXG5cdGZvciAoY29uc3QgbmFtZSBvZiBwcm9wTmFtZXMpIHtcblx0XHRjb25zdCB2YWx1ZSA9IG9iamVjdFtuYW1lXTtcblxuXHRcdG9iamVjdFtuYW1lXSA9XG5cdFx0XHR2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgPyBkZWVwRnJlZXplKHZhbHVlKSA6IHZhbHVlO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdC5mcmVlemUob2JqZWN0KTtcbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtkZWVwRnJlZXplfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvZnJlZXplLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdkZWVwRnJlZXplJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ2RlZXBGcmVlemUgYW4gb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgZnJlZXplIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG9iajEgPSB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjOjFcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBvYmoyID0ge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzoyXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBleHBlY3Qob2JqMikudG8ubm90LmVxbChvYmoxKVxuICAgICAgICAgICAgb2JqMS5hLmIuYyA9IDI7XG4gICAgICAgICAgICBleHBlY3Qob2JqMikudG8uZXFsKG9iajEpO1xuXG4gICAgICAgICAgICBjb25zdCBvYmoxRnJlZXplZCA9IGRlZXBGcmVlemUob2JqMSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChvYmoyKS50by5lcWwob2JqMUZyZWV6ZWQpO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9mcmVlemVcbiAgICAgICAgICAgICAgICAvLyBubyBjaGFuZ2UgdG8gdGhlIG9iamVjdCwgZXhjZXB0aW9uIGRlcGVuZHMgb24gbW9kZSAoc3RyaWN0IEVTIDIwMTUsIGV0YylcbiAgICAgICAgICAgICAgICBvYmoxRnJlZXplZC5hLmIuYyA9IDMgICAgXG4gICAgICAgICAgICB9IGNhdGNoIChfKSB7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhwZWN0KG9iajIpLnRvLmVxbChvYmoxRnJlZXplZCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2Nsb25lfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvY2xvbmUubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnQ2xvbmUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBjbGFzcyBBIHtcbiAgICAgICAgY29uc3RydWN0b3IoYikge1xuICAgICAgICAgICAgdGhpcy5iID0gYlxuICAgICAgICB9XG5cbiAgICAgICAgYSgpIHtcblxuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIGNsYXNzIEIge1xuICAgICAgICBjb25zdHJ1Y3RvcihiKSB7XG4gICAgICAgICAgICB0aGlzLmIgPSBiXG4gICAgICAgIH1cblxuICAgICAgICBhKCkge1xuXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGdldENsb25lKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiRE9ORVwiXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgfVxuXG4gICAgZGVzY3JpYmUoJy5jbG9uZShCKSB3aXRoIGdldENsb25lJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnLmNsb25lKEIpIHNob3VsZCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgYiA9IG5ldyBCKHtcbiAgICAgICAgICAgICAgICB4OiB7XG4gICAgICAgICAgICAgICAgICAgIHk6IDEsIGQ6IG5ldyBBKDEpLCB6OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCByID0gY2xvbmUoYik7XG4gICAgICAgICAgICBleHBlY3QoYikudG8uYmUuaW5zdGFuY2VPZihCKVxuICAgICAgICAgICAgZXhwZWN0KHIpLm5vdC5lcXVhbChiKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShyKSkuZXF1YWwoSlNPTi5zdHJpbmdpZnkoJ0RPTkUnKSk7XG5cbiAgICAgICAgfSk7XG4gICAgfSlcbiAgICBcbiAgICBkZXNjcmliZSgnLmNsb25lKEEpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnLmNsb25lKEEpIHNob3VsZCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgYSA9IG5ldyBBKHtcbiAgICAgICAgICAgICAgICB4OiB7XG4gICAgICAgICAgICAgICAgICAgIHk6IDEsIGQ6IG5ldyBBKDEpLCB6OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBiID0gY2xvbmUoYSk7XG4gICAgICAgICAgICBleHBlY3QoYSkudG8uYmUuaW5zdGFuY2VPZihBKVxuICAgICAgICAgICAgZXhwZWN0KGIpLnRvLmJlLmluc3RhbmNlT2YoQSlcbiAgICAgICAgICAgIGV4cGVjdChiKS5ub3QuZXF1YWwoYSk7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoYSkpLmVxdWFsKEpTT04uc3RyaW5naWZ5KGIpKTtcblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgLy8gbm9kZWpzIGRvZXMgbm90IGhhdmUgYSBET01cbiAgICBpZiAodHlwZW9mIERvY3VtZW50RnJhZ21lbnQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgZGVzY3JpYmUoJy5jbG9uZShEb2N1bWVudEZyYWdtZW50KScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCcuY2xvbmUoRG9jdW1lbnRGcmFnbWVudCkgc2hvdWxkIHNhbWUgRG9jdW1lbnRGcmFnbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGNsb25lKGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChiKS5lcXVhbChhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGRlc2NyaWJlKCcuY2xvbmUobnVsbCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIHR5cGVvZiBudWxsIHJlc3VsdHMgaW4gJ29iamVjdCcuICBodHRwczovLzJhbGl0eS5jb20vMjAxMy8xMC90eXBlb2YtbnVsbC5odG1sXG4gICAgICAgIGl0KCcuY2xvbmUobnVsbCkgc2hvdWxkICBudWxsJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGEgPSBudWxsXG4gICAgICAgICAgICBsZXQgYiA9IGNsb25lKGEpO1xuICAgICAgICAgICAgZXhwZWN0KGIpLmVxdWFsKGEpO1xuICAgICAgICAgICAgZXhwZWN0KGIpLnRvLmJlLm51bGw7XG4gICAgICAgICAgICBleHBlY3QoYSkudG8uYmUubnVsbDtcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCcuY2xvbmUodW5kZWZpbmVkKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJy5jbG9uZSh1bmRlZmluZWQpIHNob3VsZCAgdW5kZWZpbmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGEgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGxldCBiID0gY2xvbmUoYSk7XG4gICAgICAgICAgICBleHBlY3QoYSA9PT0gYikudG8uYmUudHJ1ZVxuICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBiID09PSAndW5kZWZpbmVkJykudG8uYmUudHJ1ZVxuICAgICAgICAgICAgZXhwZWN0KGEgPT09IHVuZGVmaW5lZCkudG8uYmUudHJ1ZVxuICAgICAgICAgICAgZXhwZWN0KGIgPT09IHVuZGVmaW5lZCkudG8uYmUudHJ1ZVxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJy5jbG9uZShvYmplY3QpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCcuY2xvbmUoe30pIHNob3VsZCAgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGEgPSB7fVxuICAgICAgICAgICAgbGV0IGIgPSBjbG9uZShhKTtcbiAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgYiA9PT0gJ29iamVjdCcpLnRvLmJlLnRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJy5jbG9uZSh7eDoxfSkgc2hvdWxkICBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgYSA9IHt4OiAxfVxuICAgICAgICAgICAgbGV0IGIgPSBjbG9uZShhKTtcbiAgICAgICAgICAgIGV4cGVjdChhLngpLmlzLmVxdWFsKGIueClcbiAgICAgICAgfSk7XG4gICAgfSlcbiAgICBkZXNjcmliZSgnLmNsb25lKGZ1bmN0aW9uKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnLmNsb25lKGZ1bmN0aW9uKSBzaG91bGQgIGZ1bmN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGEgPSAoKSA9PiB7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgYiA9IGNsb25lKGEpO1xuICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBiID09PSAnZnVuY3Rpb24nKS50by5iZS50cnVlXG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCcuY2xvbmUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgJ3N0cmluZyddLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgJ3VuZGVmaW5lZCddLFxuICAgICAgICAgICAgW251bGwsICdvYmplY3QnXSwgLy8gdHlwZW9mIG51bGwgcmVzdWx0cyBpbiAnb2JqZWN0Jy4gIGh0dHBzOi8vMmFsaXR5LmNvbS8yMDEzLzEwL3R5cGVvZi1udWxsLmh0bWxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCAnZnVuY3Rpb24nXSxcbiAgICAgICAgICAgIFsyLCAnbnVtYmVyJ10sXG4gICAgICAgICAgICBbZmFsc2UsICdib29sZWFuJ10sXG4gICAgICAgICAgICBbdHJ1ZSwgJ2Jvb2xlYW4nXSxcbiAgICAgICAgICAgIFs0LjUsICdudW1iZXInXSxcbiAgICAgICAgICAgIFt7fSwgJ29iamVjdCddLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgJ29iamVjdCddLCAvLyBhcnJheSBpc3QgYXVjaCB0eXBlIG9iamVjdFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgJ3N5bWJvbCddLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICAgICAgaXQoJy5jbG9uZSgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKSBzaG91bGQgICcgKyBiICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGMgPSBjbG9uZShhKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodHlwZW9mIGMpLmlzLmVxdWFsKGIpO1xuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbn0pO1xuXG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgSGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVyLm1qc1wiO1xuaW1wb3J0IHsgTG9nRW50cnkgfSBmcm9tIFwiLi4vbG9nZW50cnkubWpzXCI7XG5pbXBvcnQgeyBUUkFDRSwgV0FSTiwgREVCVUcsIEVSUk9SLCBGQVRBTCwgSU5GTyB9IGZyb20gXCIuLi9sb2dnZXIubWpzXCI7XG5cbmV4cG9ydCB7IENvbnNvbGVIYW5kbGVyIH07XG5cbi8qKlxuICogWW91IGNhbiBjcmVhdGUgYW4gb2JqZWN0IG9mIHRoZSBjbGFzcyBzaW1wbHkgYnkgdXNpbmcgdGhlIG5hbWVzcGFjZSBgbmV3IE1vbnN0ZXIuTG9nZ2luZy5IYW5kbGVyLkNvbnNvbGVIYW5kbGVyKClgLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuTG9nZ2luZy5IYW5kbGVyXG4gKi9cbmNsYXNzIENvbnNvbGVIYW5kbGVyIGV4dGVuZHMgSGFuZGxlciB7XG5cdC8qKlxuXHQgKiBUaGlzIGlzIHRoZSBjZW50cmFsIGxvZyBmdW5jdGlvbi4gdGhpcyBtZXRob2QgbXVzdCBiZVxuXHQgKiBvdmVyd3JpdHRlbiBieSBkZXJpdmVkIGhhbmRsZXJzIHdpdGggdGhlaXIgb3duIGxvZ2ljLlxuXHQgKlxuXHQgKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGICAoQUxMID0gMHhmZjtPRkYgPSAweDAwO1xuXHQgKlxuXHQgKiBAcGFyYW0ge0xvZ0VudHJ5fSBlbnRyeVxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGxvZyhlbnRyeSkge1xuXHRcdGlmIChzdXBlci5sb2coZW50cnkpKSB7XG5cdFx0XHRjb25zdCBjb25zb2xlID0gZ2V0R2xvYmFsT2JqZWN0KFwiY29uc29sZVwiKTtcblx0XHRcdGlmICghY29uc29sZSkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRpZiAoIWNvbnNvbGUuZXJyb3IpIGNvbnNvbGUuZXJyb3IgPSBjb25zb2xlLmxvZztcblx0XHRcdGlmICghY29uc29sZS53YXJuKSBjb25zb2xlLndhcm4gPSBjb25zb2xlLmxvZztcblxuXHRcdFx0c3dpdGNoIChlbnRyeS5nZXRMb2dMZXZlbCgpKSB7XG5cdFx0XHRcdGNhc2UgVFJBQ0U6XG5cdFx0XHRcdGNhc2UgREVCVUc6XG5cdFx0XHRcdGNhc2UgSU5GTzpcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhlbnRyeS50b1N0cmluZygpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGQVRBTDpcblx0XHRcdFx0Y2FzZSBFUlJPUjpcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVudHJ5LnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFdBUk46XG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKGVudHJ5LnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGVudHJ5LnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlSW50ZWdlciB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IExvZ0VudHJ5IH0gZnJvbSBcIi4vbG9nZW50cnkubWpzXCI7XG5pbXBvcnQgeyBBTEwsIERFQlVHLCBFUlJPUiwgRkFUQUwsIElORk8sIE9GRiwgVFJBQ0UsIFdBUk4gfSBmcm9tIFwiLi9sb2dnZXIubWpzXCI7XG5cbmV4cG9ydCB7IEhhbmRsZXIgfTtcblxuLyoqXG4gKiBUaGUgbG9nIGhhbmRsZXIgaXMgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBsb2cgZW50cmllcyBhbmQgdGhlIGxvZyBsaXN0ZW5lcnMuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Mb2dnaW5nXG4gKi9cbmNsYXNzIEhhbmRsZXIgZXh0ZW5kcyBCYXNlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdC8qKlxuXHRcdCAqIExvZ2xldmVsXG5cdFx0ICpcblx0XHQgKiBAdHlwZSB7aW50ZWdlcn1cblx0XHQgKi9cblx0XHR0aGlzLmxvZ2xldmVsID0gT0ZGO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgbG9nIGZ1bmN0aW9uLiB0aGlzIG1ldGhvZCBtdXN0IGJlXG5cdCAqIG92ZXJ3cml0dGVuIGJ5IGRlcml2ZWQgaGFuZGxlcnMgd2l0aCB0aGVpciBvd24gbG9naWMuXG5cdCAqXG5cdCAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkYgIChBTEwgPSAweGZmO09GRiA9IDB4MDA7XG5cdCAqXG5cdCAqIEBwYXJhbSB7TG9nRW50cnl9IGVudHJ5XG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0bG9nKGVudHJ5KSB7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZShlbnRyeSwgTG9nRW50cnkpO1xuXG5cdFx0aWYgKHRoaXMubG9nbGV2ZWwgPCBlbnRyeS5nZXRMb2dMZXZlbCgpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogc2V0IGxvZ2xldmVsXG5cdCAqXG5cdCAqIEBwYXJhbSB7aW50ZWdlcn0gbG9nbGV2ZWxcblx0ICogQHJldHVybnMge0hhbmRsZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0TG9nTGV2ZWwobG9nbGV2ZWwpIHtcblx0XHR2YWxpZGF0ZUludGVnZXIobG9nbGV2ZWwpO1xuXHRcdHRoaXMubG9nbGV2ZWwgPSBsb2dsZXZlbDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBnZXQgbG9nbGV2ZWxcblx0ICpcblx0ICogQHJldHVybnMge2ludGVnZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0Z2V0TG9nTGV2ZWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMubG9nbGV2ZWw7XG5cdH1cblxuXHQvKipcblx0ICogIFNldCBsb2cgbGV2ZWwgdG8gQWxsXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtIYW5kbGVyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdHNldEFsbCgpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKEFMTCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGxvZyBsZXZlbCB0byBUcmFjZVxuXHQgKlxuXHQgKiBAcmV0dXJucyB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRUcmFjZSgpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKFRSQUNFKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgbG9nIGxldmVsIHRvIERlYnVnXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtIYW5kbGVyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdHNldERlYnVnKCkge1xuXHRcdHRoaXMuc2V0TG9nTGV2ZWwoREVCVUcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBsb2cgbGV2ZWwgdG8gSW5mb1xuXHQgKlxuXHQgKiBAcmV0dXJucyB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRJbmZvKCkge1xuXHRcdHRoaXMuc2V0TG9nTGV2ZWwoSU5GTyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGxvZyBsZXZlbCB0byBXYXJuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0V2FybigpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKFdBUk4pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBsb2cgbGV2ZWwgdG8gRXJyb3Jcblx0ICpcblx0ICogQHJldHVybnMge0hhbmRsZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0RXJyb3IoKSB7XG5cdFx0dGhpcy5zZXRMb2dMZXZlbChFUlJPUik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGxvZyBsZXZlbCB0byBGYXRhbFxuXHQgKlxuXHQgKiBAcmV0dXJucyB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRGYXRhbCgpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKEZBVEFMKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgbG9nIGxldmVsIHRvIE9mZlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRPZmYoKSB7XG5cdFx0dGhpcy5zZXRMb2dMZXZlbChPRkYpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUludGVnZXIgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IExvZ0VudHJ5IH07XG5cbi8qKlxuICogQSBsb2cgZW50cnkgZm9yIHRoZSBsb2dnZXJcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkxvZ2dpbmdcbiAqL1xuY2xhc3MgTG9nRW50cnkgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7SW50ZWdlcn0gbG9nbGV2ZWxcblx0ICogQHBhcmFtIHsuLi4qfSBhcmdzXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihsb2dsZXZlbCwgLi4uYXJncykge1xuXHRcdHN1cGVyKCk7XG5cdFx0dmFsaWRhdGVJbnRlZ2VyKGxvZ2xldmVsKTtcblxuXHRcdHRoaXMubG9nbGV2ZWwgPSBsb2dsZXZlbDtcblx0XHR0aGlzLmFyZ3VtZW50cyA9IGFyZ3M7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge2ludGVnZXJyfVxuXHQgKi9cblx0Z2V0TG9nTGV2ZWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMubG9nbGV2ZWw7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge2FycmF5fVxuXHQgKi9cblx0Z2V0QXJndW1lbnRzKCkge1xuXHRcdHJldHVybiB0aGlzLmFyZ3VtZW50cztcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgSGFuZGxlciB9IGZyb20gXCIuLi9sb2dnaW5nL2hhbmRsZXIubWpzXCI7XG5pbXBvcnQgeyBMb2dFbnRyeSB9IGZyb20gXCIuLi9sb2dnaW5nL2xvZ2VudHJ5Lm1qc1wiO1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUludGVnZXIsXG5cdHZhbGlkYXRlT2JqZWN0LFxuXHR2YWxpZGF0ZVN0cmluZyxcbn0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBMb2dnZXIsIEFMTCwgVFJBQ0UsIERFQlVHLCBJTkZPLCBXQVJOLCBFUlJPUiwgRkFUQUwsIE9GRiB9O1xuXG4vKipcbiAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkZcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Mb2dnaW5nXG4gKi9cbmNvbnN0IEFMTCA9IDI1NTtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkxvZ2dpbmdcbiAqL1xuY29uc3QgVFJBQ0UgPSA2NDtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkxvZ2dpbmdcbiAqL1xuY29uc3QgREVCVUcgPSAzMjtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkxvZ2dpbmdcbiAqL1xuY29uc3QgSU5GTyA9IDE2O1xuLyoqXG4gKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGXG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQG1lbWJlck9mIE1vbnN0ZXIuTG9nZ2luZ1xuICovXG5jb25zdCBXQVJOID0gODtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkxvZ2dpbmdcbiAqL1xuY29uc3QgRVJST1IgPSA0O1xuLyoqXG4gKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGXG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQG1lbWJlck9mIE1vbnN0ZXIuTG9nZ2luZ1xuICovXG5jb25zdCBGQVRBTCA9IDI7XG4vKipcbiAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkZcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Mb2dnaW5nXG4gKi9cbmNvbnN0IE9GRiA9IDA7XG5cbi8qKlxuICogVGhlIGxvZ2dlciBpcyBhIGNsYXNzIHRoYXQgdGFrZXMgY2FyZSBvZiBsb2dnaW5nLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuTG9nZ2luZ1xuICovXG5jbGFzcyBMb2dnZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuaGFuZGxlciA9IG5ldyBTZXQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hhbmRsZXJ9IGhhbmRsZXJcblx0ICogQHJldHVybnMge0xvZ2dlcn1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBoYW5kbGVyIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgSGFuZGxlclxuXHQgKi9cblx0YWRkSGFuZGxlcihoYW5kbGVyKSB7XG5cdFx0dmFsaWRhdGVPYmplY3QoaGFuZGxlcik7XG5cdFx0aWYgKCEoaGFuZGxlciBpbnN0YW5jZW9mIEhhbmRsZXIpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgaGFuZGxlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIEhhbmRsZXJcIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5oYW5kbGVyLmFkZChoYW5kbGVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hhbmRsZXJ9IGhhbmRsZXJcblx0ICogQHJldHVybnMge0xvZ2dlcn1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBoYW5kbGVyIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgSGFuZGxlclxuXHQgKi9cblx0cmVtb3ZlSGFuZGxlcihoYW5kbGVyKSB7XG5cdFx0dmFsaWRhdGVPYmplY3QoaGFuZGxlcik7XG5cdFx0aWYgKCEoaGFuZGxlciBpbnN0YW5jZW9mIEhhbmRsZXIpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgaGFuZGxlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIEhhbmRsZXJcIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5oYW5kbGVyLmRlbGV0ZShoYW5kbGVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBsb2cgVHJhY2UgbWVzc2FnZVxuXHQgKlxuXHQgKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGICAoQUxMID0gMHhmZjtPRkYgPSAweDAwO1xuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyB7TG9nZ2VyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdGxvZ1RyYWNlKC4uLmFyZ3MpIHtcblx0XHRpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgfHwgYXJnc1swXSA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuXHRcdH1cblxuXHRcdHRyaWdnZXJMb2cuYXBwbHkodGhpcywgW1RSQUNFLCAuLi5hcmdzXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbG9nIERlYnVnIG1lc3NhZ2Vcblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhcmd1bWVudHNcblx0ICogQHJldHVybnMge0xvZ2dlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRsb2dEZWJ1ZyguLi5hcmdzKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdFwiKTtcblx0XHR9XG5cblx0XHR0cmlnZ2VyTG9nLmFwcGx5KHRoaXMsIFtERUJVRywgLi4uYXJnc10pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGxvZyBJbmZvIG1lc3NhZ2Vcblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhcmd1bWVudHNcblx0ICogQHJldHVybnMge0xvZ2dlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRsb2dJbmZvKC4uLmFyZ3MpIHtcblx0XHRpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgfHwgYXJnc1swXSA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuXHRcdH1cblxuXHRcdHRyaWdnZXJMb2cuYXBwbHkodGhpcywgW0lORk8sIC4uLmFyZ3NdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBsb2cgV2FybiBtZXNzYWdlXG5cdCAqXG5cdCAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkYgIChBTEwgPSAweGZmO09GRiA9IDB4MDA7XG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIHtMb2dnZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0bG9nV2FybiguLi5hcmdzKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdFwiKTtcblx0XHR9XG5cblx0XHR0cmlnZ2VyTG9nLmFwcGx5KHRoaXMsIFtXQVJOLCAuLi5hcmdzXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbG9nIEVycm9yIG1lc3NhZ2Vcblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhcmd1bWVudHNcblx0ICogQHJldHVybnMge0xvZ2dlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRsb2dFcnJvciguLi5hcmdzKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdFwiKTtcblx0XHR9XG5cblx0XHR0cmlnZ2VyTG9nLmFwcGx5KHRoaXMsIFtFUlJPUiwgLi4uYXJnc10pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGxvZyBGYXRhbCBtZXNzYWdlXG5cdCAqXG5cdCAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkYgIChBTEwgPSAweGZmO09GRiA9IDB4MDA7XG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIHtMb2dnZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0bG9nRmF0YWwoLi4uYXJncykge1xuXHRcdGlmICh0eXBlb2YgYXJncyAhPT0gXCJvYmplY3RcIiB8fCBhcmdzWzBdID09PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3RcIik7XG5cdFx0fVxuXG5cdFx0dHJpZ2dlckxvZy5hcHBseSh0aGlzLCBbRkFUQUwsIC4uLmFyZ3NdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBMYWJlbHNcblx0ICpcblx0ICogQHBhcmFtIHtpbnRlZ2VyfSBsZXZlbFxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0TGFiZWwobGV2ZWwpIHtcblx0XHR2YWxpZGF0ZUludGVnZXIobGV2ZWwpO1xuXG5cdFx0aWYgKGxldmVsID09PSBBTEwpIHJldHVybiBcIkFMTFwiO1xuXHRcdGlmIChsZXZlbCA9PT0gVFJBQ0UpIHJldHVybiBcIlRSQUNFXCI7XG5cdFx0aWYgKGxldmVsID09PSBERUJVRykgcmV0dXJuIFwiREVCVUdcIjtcblx0XHRpZiAobGV2ZWwgPT09IElORk8pIHJldHVybiBcIklORk9cIjtcblx0XHRpZiAobGV2ZWwgPT09IFdBUk4pIHJldHVybiBcIldBUk5cIjtcblx0XHRpZiAobGV2ZWwgPT09IEVSUk9SKSByZXR1cm4gXCJFUlJPUlwiO1xuXHRcdGlmIChsZXZlbCA9PT0gRkFUQUwpIHJldHVybiBcIkZBVEFMXCI7XG5cdFx0aWYgKGxldmVsID09PSBPRkYpIHJldHVybiBcIk9GRlwiO1xuXG5cdFx0cmV0dXJuIFwidW5rbm93blwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIExldmVsXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbFxuXHQgKiBAcmV0dXJucyB7aW50ZWdlcn1cblx0ICovXG5cdGdldExldmVsKGxhYmVsKSB7XG5cdFx0dmFsaWRhdGVTdHJpbmcobGFiZWwpO1xuXG5cdFx0aWYgKGxhYmVsID09PSBcIkFMTFwiKSByZXR1cm4gQUxMO1xuXHRcdGlmIChsYWJlbCA9PT0gXCJUUkFDRVwiKSByZXR1cm4gVFJBQ0U7XG5cdFx0aWYgKGxhYmVsID09PSBcIkRFQlVHXCIpIHJldHVybiBERUJVRztcblx0XHRpZiAobGFiZWwgPT09IFwiSU5GT1wiKSByZXR1cm4gSU5GTztcblx0XHRpZiAobGFiZWwgPT09IFwiV0FSTlwiKSByZXR1cm4gV0FSTjtcblx0XHRpZiAobGFiZWwgPT09IFwiRVJST1JcIikgcmV0dXJuIEVSUk9SO1xuXHRcdGlmIChsYWJlbCA9PT0gXCJGQVRBTFwiKSByZXR1cm4gRkFUQUw7XG5cdFx0aWYgKGxhYmVsID09PSBcIk9GRlwiKSByZXR1cm4gT0ZGO1xuXG5cdFx0cmV0dXJuIDA7XG5cdH1cbn1cblxuLyoqXG4gKiBMb2cgdHJpZ2dlcm5cbiAqXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGxvZ2xldmVsXG4gKiBAcGFyYW0geyp9IGFyZ3NcbiAqIEByZXR1cm5zIHtMb2dnZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0cmlnZ2VyTG9nKGxvZ2xldmVsLCAuLi5hcmdzKSB7XG5cdGZvciAoY29uc3QgaGFuZGxlciBvZiB0aGlzLmhhbmRsZXIpIHtcblx0XHRoYW5kbGVyLmxvZyhuZXcgTG9nRW50cnkobG9nbGV2ZWwsIGFyZ3MpKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiO1xuaW1wb3J0IHtDb25zb2xlSGFuZGxlcn0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9sb2dnaW5nL2hhbmRsZXIvY29uc29sZS5tanNcIjtcbmltcG9ydCB7TG9nRW50cnl9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dlbnRyeS5tanNcIjtcbmltcG9ydCB7VFJBQ0UsIFdBUk4sIERFQlVHLCBFUlJPUiwgRkFUQUwsIElORk99IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dnZXIubWpzXCI7XG5cbmRlc2NyaWJlKCdMb2dnaW5nJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ0NvbnNvbGVIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgY3JlYXRlIENvbnNvbGVIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb25zb2xlSGFuZGxlcigpKS50by5iZS5pbnN0YW5jZW9mKENvbnNvbGVIYW5kbGVyKVxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGxvZyB0byBjb25zb2xlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb25zb2xlSGFuZGxlcigpLnNldEFsbCgpLmxvZyhuZXcgTG9nRW50cnkoRkFUQUwsIFsxLCB0cnVlLCAnZmF0YWwnXSkpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGxvZyB0byBjb25zb2xlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb25zb2xlSGFuZGxlcigpLnNldEFsbCgpLmxvZyhuZXcgTG9nRW50cnkoVFJBQ0UsIFsxLCB0cnVlLCAndHJhY2UnXSkpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGxvZyB0byBjb25zb2xlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb25zb2xlSGFuZGxlcigpLnNldEFsbCgpLmxvZyhuZXcgTG9nRW50cnkoV0FSTiwgWzEsIHRydWUsICd3YXJuJ10pKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2cgdG8gY29uc29sZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKS5zZXRBbGwoKS5sb2cobmV3IExvZ0VudHJ5KERFQlVHLCBbMSwgdHJ1ZSwgJ2RlYnVnJ10pKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2cgdG8gY29uc29sZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKS5zZXRBbGwoKS5sb2cobmV3IExvZ0VudHJ5KEVSUk9SLCBbMSwgdHJ1ZSwgJ2Vycm9yJ10pKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2cgdG8gY29uc29sZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKS5zZXRBbGwoKS5sb2cobmV3IExvZ0VudHJ5KElORk8sIFsxLCB0cnVlLCAnaW5mbyddKSkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtMb2dnZXIsIE9GRiwgQUxMLCBUUkFDRSwgREVCVUcsIElORk8sIFdBUk4sIEVSUk9SLCBGQVRBTH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9sb2dnaW5nL2xvZ2dlci5tanNcIjtcblxuXG5kZXNjcmliZSgnTG9nZ2luZycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCduZXcgTG9nZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkpLnRvLmluc3RhbmNlT2YoTG9nZ2VyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnTG9nZ2VyLmxvZ1RyYWNlKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgTG9nZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2dnZXIoKS5sb2dUcmFjZShcInRlc3RcIikpLnRvLmluc3RhbmNlT2YoTG9nZ2VyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgXG4gICAgZGVzY3JpYmUoJ0xvZ2dlci5sb2dEZWJ1ZygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkubG9nRGVidWcoXCJ0ZXN0XCIpKS50by5pbnN0YW5jZU9mKExvZ2dlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCdMb2dnZXIubG9nSW5mbygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkubG9nSW5mbyhcInRlc3RcIikpLnRvLmluc3RhbmNlT2YoTG9nZ2VyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgXG4gICAgZGVzY3JpYmUoJ0xvZ2dlci5sb2dXYXJuKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgTG9nZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2dnZXIoKS5sb2dXYXJuKFwidGVzdFwiKSkudG8uaW5zdGFuY2VPZihMb2dnZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBcbiAgICBkZXNjcmliZSgnTG9nZ2VyLmxvZ0Vycm9yKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgTG9nZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2dnZXIoKS5sb2dFcnJvcihcInRlc3RcIikpLnRvLmluc3RhbmNlT2YoTG9nZ2VyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgXG4gICAgZGVzY3JpYmUoJ0xvZ2dlci5sb2dGYXRhbCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkubG9nRmF0YWwoXCJ0ZXN0XCIpKS50by5pbnN0YW5jZU9mKExvZ2dlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCdMb2dnZXIuZ2V0TGV2ZWwoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgW1xuICAgICAgICAgICAgWydBTEwnLCBBTExdLFxuICAgICAgICAgICAgWydUUkFDRScsIFRSQUNFXSxcbiAgICAgICAgICAgIFsnREVCVUcnLCBERUJVR10sXG4gICAgICAgICAgICBbJ0lORk8nLCBJTkZPXSxcbiAgICAgICAgICAgIFsnV0FSTicsIFdBUk5dLFxuICAgICAgICAgICAgWydFUlJPUicsIEVSUk9SXSxcbiAgICAgICAgICAgIFsnRkFUQUwnLCBGQVRBTF0sXG4gICAgICAgICAgICBbJ09GRicsIE9GRl0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoYSArICcgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkuZ2V0TGV2ZWwoYSkpLnRvLmJlLmVxdWFscyhiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnTG9nZ2VyLmdldExhYmVsKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnQUxMJywgQUxMXSxcbiAgICAgICAgICAgIFsnVFJBQ0UnLCBUUkFDRV0sXG4gICAgICAgICAgICBbJ0RFQlVHJywgREVCVUddLFxuICAgICAgICAgICAgWydJTkZPJywgSU5GT10sXG4gICAgICAgICAgICBbJ1dBUk4nLCBXQVJOXSxcbiAgICAgICAgICAgIFsnRVJST1InLCBFUlJPUl0sXG4gICAgICAgICAgICBbJ0ZBVEFMJywgRkFUQUxdLFxuICAgICAgICAgICAgWydPRkYnLCBPRkZdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KGEgKyAnIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpLmdldExhYmVsKGIpKS50by5iZS5lcXVhbHMoYSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCI7XG5pbXBvcnQge0FMTCwgVFJBQ0UsIERFQlVHLCBJTkZPLCBXQVJOLCBFUlJPUiwgRkFUQUwsIE9GRn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9sb2dnaW5nL2xvZ2dlci5tanNcIjtcbmltcG9ydCB7SGFuZGxlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9sb2dnaW5nL2hhbmRsZXIubWpzXCI7XG5pbXBvcnQge0xvZ0VudHJ5fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2xvZ2dpbmcvbG9nZW50cnkubWpzXCI7XG5cbmRlc2NyaWJlKCdMb2dnaW5nJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuc2V0TG9nTGV2ZWwoKS5nZXRMb2dMZXZlbCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtBTExdLCBbVFJBQ0VdLCBbREVCVUddLCBbSU5GT10sIFtXQVJOXSwgW0VSUk9SXSwgW0ZBVEFMXSwgW09GRl0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgndGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gdGhlIHNldCB2YWx1ZSAnICsgYSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldExvZ0xldmVsKGEpLmdldExvZ0xldmVsKCkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnSGFuZGxlci5sb2coKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkubG9nKG5ldyBMb2dFbnRyeSgwLCBcInRlc3RcIikpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdIYW5kbGVyLmxvZygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBoYW5kbGVyO1xuXG4gICAgICAgIGNsYXNzIFRlc3RIYW5kbGVyIGV4dGVuZHMgSGFuZGxlciB7XG4gICAgICAgICAgICBsb2coZW50cnkpIHtcbiAgICAgICAgICAgICAgICBzdXBlci5sb2coZW50cnkpO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBoYW5kbGVyID0gbmV3IFRlc3RIYW5kbGVyKCk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkubG9nKG5ldyBMb2dFbnRyeSgwLCBcInRlc3RcIikpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmxvZygpIHdpdGggbG9nbGV2ZWwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IFRlc3RIYW5kbGVyO1xuXG4gICAgICAgIGJlZm9yZSgoKSA9PiB7XG4gICAgICAgICAgICBUZXN0SGFuZGxlciA9IGNsYXNzIGV4dGVuZHMgSGFuZGxlciB7XG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbHMgPSAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxvZyhsb2dsZXZlbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3VwZXIubG9nKGxvZ2xldmVsKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxscysrXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBbIC8vIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkYgIChBTEwgPSAweGZmO09GRiA9IDB4MDA7XG4gICAgICAgICAgICBbQUxMLCA2XSxcbiAgICAgICAgICAgIFtUUkFDRSwgNl0sXG4gICAgICAgICAgICBbREVCVUcsIDVdLFxuICAgICAgICAgICAgW0lORk8sIDRdLFxuICAgICAgICAgICAgW1dBUk4sIDNdLFxuICAgICAgICAgICAgW0VSUk9SLCAyXSxcbiAgICAgICAgICAgIFtGQVRBTCwgMV0sXG4gICAgICAgICAgICBbT0ZGLCAwXVxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5sb2coJyArIGEgKyAnKSBzaG91bGQgbG9nICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGhhbmRsZXIgPSBuZXcgVGVzdEhhbmRsZXIoKS5zZXRMb2dMZXZlbChhKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyLmxvZyhuZXcgTG9nRW50cnkoVFJBQ0UpKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyLmxvZyhuZXcgTG9nRW50cnkoREVCVUcpKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyLmxvZyhuZXcgTG9nRW50cnkoSU5GTykpO1xuICAgICAgICAgICAgICAgIGhhbmRsZXIubG9nKG5ldyBMb2dFbnRyeShXQVJOKSk7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5sb2cobmV3IExvZ0VudHJ5KEVSUk9SKSk7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5sb2cobmV3IExvZ0VudHJ5KEZBVEFMKSk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoaGFuZGxlci5jYWxscykuaXMuZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldExvZ0xldmVsKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldExvZ0xldmVsKEFMTCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuZ2V0TG9nTGV2ZWwoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ25ldyBsb2dnZXIgc2hvdWxkIGJlIDAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5nZXRMb2dMZXZlbCgpKS50by5iZS5lcXVhbChPRkYpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldEFsbCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnIHNob3VsZCBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRBbGwoKSkudG8uaW5zdGFuY2VPZihIYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuc2V0VHJhY2UoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ25ldyBsb2dnZXIgc2hvdWxkIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldFRyYWNlKCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldERlYnVnKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCcgc2hvdWxkIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldERlYnVnKCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldEluZm8oKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkuc2V0SW5mbygpKS50by5pbnN0YW5jZU9mKEhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnSGFuZGxlci5zZXRXYXJuKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCcgc2hvdWxkIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldFdhcm4oKSkudG8uaW5zdGFuY2VPZihIYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuc2V0RXJyb3IoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkuc2V0RXJyb3IoKSkudG8uaW5zdGFuY2VPZihIYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuc2V0RmF0YWwoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkuc2V0RmF0YWwoKSkudG8uaW5zdGFuY2VPZihIYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuc2V0T2ZmKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldE9mZigpKS50by5pbnN0YW5jZU9mKEhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtMb2dFbnRyeX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9sb2dnaW5nL2xvZ2VudHJ5Lm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdMb2cnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnbmV3IExvZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBMb2cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IExvZ0VudHJ5KDEsICdhJywgJ2InLCAnYycpKS50by5pbnN0YW5jZU9mKExvZ0VudHJ5KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnTG9nLmxvZ2xldmVsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBsb2c7XG5cbiAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsb2cgPSBuZXcgTG9nRW50cnkoMSwgZmFsc2UsICd0ZXN0JywgOTksIHthOiB0cnVlfSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gbG9nbGV2ZWwgMScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChsb2cuZ2V0TG9nTGV2ZWwoKSkudG8uYmUuZXF1YWwoMSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYXJndW1lbnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGxvZy5nZXRBcmd1bWVudHMoKSkudG8uaGF2ZS5kZWVwLm1lbWJlcnMoW2ZhbHNlLCAndGVzdCcsIDk5LCB7YTogdHJ1ZX1dKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1dlYkNvbm5lY3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvbmV0L3dlYmNvbm5lY3QubWpzXCI7XG5pbXBvcnQge01lc3NhZ2V9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvbmV0L3dlYmNvbm5lY3QvbWVzc2FnZS5tanNcIjtcbmltcG9ydCB7T2JzZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQge2luaXRXZWJTb2NrZXR9IGZyb20gXCIuLi8uLi91dGlsL3dlYnNvY2tldC5tanNcIjtcblxuY29uc3QgdGVzdFVybCA9IFwid3NzOi8vd3MucG9zdG1hbi1lY2hvLmNvbS9yYXdcIlxuXG5kZXNjcmliZSgnV2Vic29ja2V0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGRzID0gdW5kZWZpbmVkXG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdFdlYlNvY2tldCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBkb25lKGUpXG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaWYgKGRzKSB7XG4gICAgICAgICAgICBkcy5jbG9zZSgpXG4gICAgICAgIH1cblxuICAgICAgICAvLyB3aXRob3V0IHRoaXMsIHRoZSBub2RlIHRlc3Qgd2lsbCBoYW5nIFxuICAgICAgICBmb3IgKGNvbnN0IHN5bSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGRzKSkge1xuICAgICAgICAgICAgaWYgKHN5bS50b1N0cmluZygpID09PSAnU3ltYm9sKGNvbm5lY3Rpb24pJykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZHNbc3ltXT8uc29ja2V0Py50ZXJtaW5hdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgZHNbc3ltXT8uc29ja2V0Py5bJ3Rlcm1pbmF0ZSddKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkb25lKClcbiAgICB9KTtcblxuXG4gICAgaXQoJ3Nob3VsZCB0cmFuc2Zvcm0gZGF0YScsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgZHMgPSBuZXcgV2ViQ29ubmVjdCgge1xuICAgICAgICAgICAgdXJsOiB0ZXN0VXJsLFxuICAgICAgICB9KVxuXG4gICAgICAgIGRzLmNvbm5lY3QoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZHMuYXR0YWNoT2JzZXJ2ZXIobmV3IE9ic2VydmVyKCgpPT4ge1xuICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZHMuc2VuZCh7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBcIkhlbGxvIFdvcmxkXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBkb25lKGUpXG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cbiAgICBpdCgnc2hvdWxkIGNvbm5lY3QnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBkcyA9IG5ldyBXZWJDb25uZWN0KHtcbiAgICAgICAgICAgIHVybDogdGVzdFVybCxcbiAgICAgICAgICAgIHJlY29ubmVjdDoge1xuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBkcy5jb25uZWN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgfSlcblxuXG4gICAgfSlcblxuICAgIGl0KCdzaG91bGQgc2VuZCBtZXNzYWdlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgZHMgPSBuZXcgV2ViQ29ubmVjdCh7XG4gICAgICAgICAgICB1cmw6IHRlc3RVcmwsXG4gICAgICAgICAgICByZWNvbm5lY3Q6IHtcbiAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZHMuY29ubmVjdCgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBkcy5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoKCk9PiB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRzLmRhdGFSZWNlaXZlZCgpKS50by5iZS50cnVlXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnID0gZHMucG9sbCgpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChtc2cpLnRvLmJlLmluc3RhbmNlT2YoTWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IG1zZy5nZXREYXRhKClcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRhdGEpLnRvLmJlLmRlZXAuZXF1YWwoe21lc3NhZ2U6IFwiSGVsbG8gV29ybGRcIn0pXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pKVxuXG4gICAgICAgICAgICBkcy5zZW5kKHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXCJIZWxsbyBXb3JsZFwiXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBkb25lKGUpXG4gICAgICAgIH0pXG5cblxuICAgIH0pLnRpbWVvdXQoMTAwMDApO1xuXG59KTtcbiIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5cbmZ1bmN0aW9uIGluaXRXZWJTb2NrZXQoKSB7XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8IHByb2Nlc3MudGl0bGUgIT09ICdub2RlJykge1xuICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBpbXBvcnQoXCJ3c1wiKS50aGVuKCh3cykgPT4ge1xuICAgICAgICBnZXRHbG9iYWwoKS5XZWJTb2NrZXQgPSBjbGFzcyBleHRlbmRzIHdzWydXZWJTb2NrZXQnXSB7XG4gICAgICAgICAgICBjb25zdHJ1Y3Rvcih1cmwsIHByb3RvY29scykge1xuICAgICAgICAgICAgICAgIHN1cGVyKHVybCwgcHJvdG9jb2xzLCB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRzaGFrZVRpbWVvdXQ6IDEwMDAsXG4gICAgICAgICAgICAgICAgICAgIG1heFBheWxvYWQ6IDEwMjQgKiAxMDI0ICogMTAyNCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgfSk7XG5cblxufVxuXG5leHBvcnQge2luaXRXZWJTb2NrZXR9IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge01lc3NhZ2V9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvbmV0L3dlYmNvbm5lY3QvbWVzc2FnZS5tanNcIjtcblxuZGVzY3JpYmUoJ01lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBpdCgnY29uc3RydWN0IHdpdGhvdXRoIHBhcmFtZXRlcnMgc2hvdWxkIHRocm93JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgTWVzc2FnZSgpO1xuICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoJ3Nob3VsZCB0aHJvdycpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9XG5cbiAgICB9KVxuICAgIFxuICAgIGl0KCdmcm9tIGpzb24gc2hvdWxkICcgLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAgXCJpZFwiOiBcIjEyM1wiLFxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwidGVzdFwiLFxuICAgICAgICAgICAgXCJkYXRhXCI6IHtcbiAgICAgICAgICAgICAgICBcInRlc3RcIjogXCJ0ZXN0XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXNzYWdlID0gTWVzc2FnZS5mcm9tSlNPTihKU09OLnN0cmluZ2lmeShqc29uKSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBtZXNzYWdlLmdldERhdGEoKTtcbiAgICAgICAgZXhwZWN0KGRhdGEuaWQpLnRvLmVxdWFsKGpzb24uaWQpO1xuICAgICAgICBleHBlY3QoZGF0YS50eXBlKS50by5lcXVhbChqc29uLnR5cGUpO1xuICAgICAgICBleHBlY3QoZGF0YS5kYXRhKS50by5kZWVwLmVxdWFsKGpzb24uZGF0YSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICB9KVxuICAgIFxuICAgIGl0IChcInRvIGpzb24gc2hvdWxkXCIsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIFwiaWRcIjogXCIxMjNcIixcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInRlc3RcIixcbiAgICAgICAgICAgIFwiZGF0YVwiOiB7XG4gICAgICAgICAgICAgICAgXCJ0ZXN0XCI6IFwidGVzdFwiXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IG5ldyBNZXNzYWdlKG9iaik7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShtZXNzYWdlKTtcbiAgICAgICAgZXhwZWN0KGRhdGEpLnRvLmVxdWFsKCd7XCJpZFwiOlwiMTIzXCIsXCJ0eXBlXCI6XCJ0ZXN0XCIsXCJkYXRhXCI6e1widGVzdFwiOlwidGVzdFwifX0nKTtcbiAgICAgICAgZG9uZSgpO1xuICAgIH0pXG5cblxuXG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBWZXJzaW9uLCBnZXRNb25zdGVyVmVyc2lvbiB9O1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9iamVjdCBjb250YWlucyBhIHNlbWFudGljIHZlcnNpb24gbnVtYmVyXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL3ZlcnNpb24tMS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAYXV0aG9yIHNjaHVrYWkgR21iSFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAc3VtbWFyeSBUaGUgdmVyc2lvbiBvYmplY3QgY29udGFpbnMgYSBzZW1hdGljIHZlcnNpb24gbnVtYmVyXG4gKi9cbmNsYXNzIFZlcnNpb24gZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBtYWpvclxuXHQgKiBAcGFyYW0gbWlub3Jcblx0ICogQHBhcmFtIHBhdGNoXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtYWpvciBpcyBub3QgYSBudW1iZXJcblx0ICogQHRocm93cyB7RXJyb3J9IG1pbm9yIGlzIG5vdCBhIG51bWJlclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gcGF0Y2ggaXMgbm90IGEgbnVtYmVyXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihtYWpvciwgbWlub3IsIHBhdGNoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChcblx0XHRcdHR5cGVvZiBtYWpvciA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0bWlub3IgPT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0cGF0Y2ggPT09IHVuZGVmaW5lZFxuXHRcdCkge1xuXHRcdFx0Y29uc3QgcGFydHMgPSBtYWpvci50b1N0cmluZygpLnNwbGl0KFwiLlwiKTtcblx0XHRcdG1ham9yID0gcGFyc2VJbnQocGFydHNbMF0gfHwgMCk7XG5cdFx0XHRtaW5vciA9IHBhcnNlSW50KHBhcnRzWzFdIHx8IDApO1xuXHRcdFx0cGF0Y2ggPSBwYXJzZUludChwYXJ0c1syXSB8fCAwKTtcblx0XHR9XG5cblx0XHRpZiAobWFqb3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWFqb3IgdmVyc2lvbiBpcyB1bmRlZmluZWRcIik7XG5cdFx0fVxuXG5cdFx0aWYgKG1pbm9yID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG1pbm9yID0gMDtcblx0XHR9XG5cblx0XHRpZiAocGF0Y2ggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGF0Y2ggPSAwO1xuXHRcdH1cblxuXHRcdHRoaXMubWFqb3IgPSBwYXJzZUludChtYWpvcik7XG5cdFx0dGhpcy5taW5vciA9IHBhcnNlSW50KG1pbm9yKTtcblx0XHR0aGlzLnBhdGNoID0gcGFyc2VJbnQocGF0Y2gpO1xuXG5cdFx0aWYgKGlzTmFOKHRoaXMubWFqb3IpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtYWpvciBpcyBub3QgYSBudW1iZXJcIik7XG5cdFx0fVxuXG5cdFx0aWYgKGlzTmFOKHRoaXMubWlub3IpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaW5vciBpcyBub3QgYSBudW1iZXJcIik7XG5cdFx0fVxuXG5cdFx0aWYgKGlzTmFOKHRoaXMucGF0Y2gpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJwYXRjaCBpcyBub3QgYSBudW1iZXJcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvdmVyc2lvblwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIGAke3RoaXMubWFqb3J9LiR7dGhpcy5taW5vcn0uJHt0aGlzLnBhdGNofWA7XG5cdH1cblxuXHQvKipcblx0ICogcmV0dXJucyAwIGlmIGVxdWFsLCAtMSBpZiB0aGUgb2JqZWN0IHZlcnNpb24gaXMgbGVzcyBhbmQgMSBpZiBncmVhdGVyXG5cdCAqIHRoYW4gdGhlIGNvbXBhcmVkIHZlcnNpb25cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8VmVyc2lvbn0gdmVyc2lvbiBWZXJzaW9uIHRvIGNvbXBhcmVcblx0ICogQHJldHVybnMge251bWJlcn1cblx0ICovXG5cdGNvbXBhcmVUbyh2ZXJzaW9uKSB7XG5cdFx0aWYgKHZlcnNpb24gaW5zdGFuY2VvZiBWZXJzaW9uKSB7XG5cdFx0XHR2ZXJzaW9uID0gdmVyc2lvbi50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgdmVyc2lvbiAhPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBleGNlcHRpb25cIik7XG5cdFx0fVxuXG5cdFx0aWYgKHZlcnNpb24gPT09IHRoaXMudG9TdHJpbmcoKSkge1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYSA9IFt0aGlzLm1ham9yLCB0aGlzLm1pbm9yLCB0aGlzLnBhdGNoXTtcblx0XHRjb25zdCBiID0gdmVyc2lvbi5zcGxpdChcIi5cIik7XG5cdFx0Y29uc3QgbGVuID0gTWF0aC5tYXgoYS5sZW5ndGgsIGIubGVuZ3RoKTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDEpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0KGFbaV0gJiYgIWJbaV0gJiYgcGFyc2VJbnQoYVtpXSkgPiAwKSB8fFxuXHRcdFx0XHRwYXJzZUludChhW2ldKSA+IHBhcnNlSW50KGJbaV0pXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHQoYltpXSAmJiAhYVtpXSAmJiBwYXJzZUludChiW2ldKSA+IDApIHx8XG5cdFx0XHRcdHBhcnNlSW50KGFbaV0pIDwgcGFyc2VJbnQoYltpXSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIDA7XG5cdH1cbn1cblxubGV0IG1vbnN0ZXJWZXJzaW9uO1xuXG4vKipcbiAqIFZlcnNpb24gb2YgbW9uc3RlclxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy92ZXJzaW9uLTIubWpzXG4gKiBAcmV0dXJucyB7TW9uc3Rlci5UeXBlcy5WZXJzaW9ufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAYXV0aG9yIHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXJcbiAqL1xuZnVuY3Rpb24gZ2V0TW9uc3RlclZlcnNpb24oKSB7XG5cdGlmIChtb25zdGVyVmVyc2lvbiBpbnN0YW5jZW9mIFZlcnNpb24pIHtcblx0XHRyZXR1cm4gbW9uc3RlclZlcnNpb247XG5cdH1cblxuXHQvKiogZG9uJ3QgdG91Y2gsIHJlcGxhY2VkIGJ5IG1ha2Ugd2l0aCBwYWNrYWdlLmpzb24gdmVyc2lvbiAqL1xuXHRtb25zdGVyVmVyc2lvbiA9IG5ldyBWZXJzaW9uKFwiNC4wLjBcIik7XG5cblx0cmV0dXJuIG1vbnN0ZXJWZXJzaW9uO1xufVxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1ZlcnNpb24sIGdldE1vbnN0ZXJWZXJzaW9ufSBmcm9tIFwiLi4vLi4vc291cmNlL3R5cGVzL3ZlcnNpb24ubWpzXCI7XG5cbmRlc2NyaWJlKCdNb25zdGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy5nZXRNb25zdGVyVmVyc2lvbigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgbW9uc3RlclZlcnNpb25cblxuICAgICAgICAvKiogZG9uXHUwMEI0dCB0b3VjaCwgcmVwbGFjZWQgYnkgbWFrZSB3aXRoIHBhY2thZ2UuanNvbiB2ZXJzaW9uICovXG4gICAgICAgIG1vbnN0ZXJWZXJzaW9uID0gbmV3IFZlcnNpb24oXCI0LjAuMFwiKVxuXG4gICAgICAgIGxldCBtID0gZ2V0TW9uc3RlclZlcnNpb24oKTtcblxuICAgICAgICBpdCgnc2hvdWxkICcgKyBtb25zdGVyVmVyc2lvbiArICcgaXMgJyArIG0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChtLmNvbXBhcmVUbyhtb25zdGVyVmVyc2lvbikpLmlzLmVxdWFsKDApO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gXCIuL3V0aWwubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgY29udmVydFRvUGl4ZWxzLCBnZXREZXZpY2VEUEkgfTtcblxuLyoqXG4gKiBTdG9yZXMgdGhlIERQSSBvZiB0aGUgZGV2aWNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICogQHNpbmNlIDMuMzQuMFxuICogQHR5cGUge251bWJlcnxmdW5jdGlvbn1cbiAqL1xubGV0IENVUlJFTlRfREVWSUNFX0RQSSA9IGZ1bmN0aW9uICgpIHtcblx0bGV0IGkgPSAwO1xuXHRmb3IgKGkgPSA1NjsgaSA8IDIwMDA7IGkrKykge1xuXHRcdGlmIChnZXRXaW5kb3coKS5tYXRjaE1lZGlhKGAobWF4LXJlc29sdXRpb246ICR7aX1kcGkpYCkubWF0Y2hlcyA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuIGk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBEUEkgb2YgdGhlIGRldmljZS5cbiAqXG4gKiBAc2luY2UgMy4zNC4wXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldERldmljZURQSSgpIHtcblx0Ly8gb25seSBjYWxsIHRoZSBmdW5jdGlvbiBvbmNlXG5cdGlmICh0eXBlb2YgQ1VSUkVOVF9ERVZJQ0VfRFBJID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRDVVJSRU5UX0RFVklDRV9EUEkgPSBDVVJSRU5UX0RFVklDRV9EUEkoKTtcblx0fVxuXG5cdHJldHVybiBnZXRXaW5kb3coKS5kZXZpY2VQaXhlbFJhdGlvICogQ1VSUkVOVF9ERVZJQ0VfRFBJO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgQ1NTIHZhbHVlIHRvIHBpeGVscy5cbiAqXG4gKiBBcyBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiBjb252ZXJ0VG9QaXhlbHMoJzFlbScpIC8vIHJldHVybnMgdGhlIGN1cnJlbnQgZm9udCBzaXplIGluIHBpeGVsc1xuICogY29udmVydFRvUGl4ZWxzKCcxcmVtJykgLy8gcmV0dXJucyB0aGUgY3VycmVudCByb290IGZvbnQgc2l6ZSBpbiBwaXhlbHNcbiAqIGNvbnZlcnRUb1BpeGVscygnMXB4JykgLy8gcmV0dXJucyAxXG4gKiBjb252ZXJ0VG9QaXhlbHMoJzEwMCUnKSAvLyByZXR1cm5zIHRoZSBjdXJyZW50IHdpZHRoIG9mIHRoZSBwYXJlbnQgZWxlbWVudCBpbiBwaXhlbHNcbiAqIGBgYFxuICpcbiAqIEZvbGxvd2luZyB1bml0cyBhcmUgc3VwcG9ydGVkOlxuICogLSBweFxuICogLSBlbVxuICogLSByZW1cbiAqIC0gJVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gW3BhcmVudEVsZW1lbnQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gW2ZvbnRTaXplRWxlbWVudD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy4zNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IFVuc3VwcG9ydGVkIHVuaXRcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7RXJyb3J9IEludmFsaWQgdmFsdWUgZm9ybWF0XG4gKi9cblxuZnVuY3Rpb24gY29udmVydFRvUGl4ZWxzKFxuXHR2YWx1ZSxcblx0cGFyZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0Zm9udFNpemVFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuKSB7XG5cdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblxuXHRjb25zdCByZWdleCA9IC9eKC0/W1xcZC5dKykoLiopJC87XG5cdGNvbnN0IG1hdGNoUmVzdWx0ID0gdmFsdWUubWF0Y2gocmVnZXgpO1xuXG5cdGlmICghbWF0Y2hSZXN1bHQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmFsdWUgZm9ybWF0OiAke3ZhbHVlfWApO1xuXHR9XG5cblx0Y29uc3QgWywgbnVtLCB1bml0XSA9IG1hdGNoUmVzdWx0O1xuXHRjb25zdCBudW1iZXIgPSBwYXJzZUZsb2F0KG51bSk7XG5cdGNvbnN0IGRwaSA9IGdldERldmljZURQSSgpO1xuXG5cdGlmICh1bml0ID09PSBcInB4XCIpIHtcblx0XHRyZXR1cm4gbnVtYmVyO1xuXHR9IGVsc2UgaWYgKHVuaXQgPT09IFwiZW1cIikge1xuXHRcdGNvbnN0IGZvbnRTaXplID0gcGFyc2VGbG9hdChcblx0XHRcdHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGZvbnRTaXplRWxlbWVudCkuZm9udFNpemUsXG5cdFx0KTtcblx0XHRyZXR1cm4gbnVtYmVyICogZm9udFNpemU7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJyZW1cIikge1xuXHRcdGNvbnN0IHJvb3RGb250U2l6ZSA9IHBhcnNlRmxvYXQoXG5cdFx0XHR3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnRFbGVtZW50KS5mb250U2l6ZSxcblx0XHQpO1xuXHRcdHJldHVybiBudW1iZXIgKiByb290Rm9udFNpemU7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCIlXCIpIHtcblx0XHRjb25zdCBwYXJlbnRXaWR0aCA9IHBhcnNlRmxvYXQoXG5cdFx0XHR3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnRFbGVtZW50KS53aWR0aCxcblx0XHQpO1xuXHRcdHJldHVybiAobnVtYmVyICogcGFyZW50V2lkdGgpIC8gMTAwO1xuXHR9IGVsc2UgaWYgKHVuaXQgPT09IFwiaW5cIikge1xuXHRcdHJldHVybiBudW1iZXIgKiBkcGk7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJjbVwiKSB7XG5cdFx0cmV0dXJuIChudW1iZXIgKiBkcGkpIC8gMi41NDtcblx0fSBlbHNlIGlmICh1bml0ID09PSBcIm1tXCIpIHtcblx0XHRyZXR1cm4gKG51bWJlciAqIGRwaSkgLyAyNS40O1xuXHR9IGVsc2UgaWYgKHVuaXQgPT09IFwicHRcIikge1xuXHRcdHJldHVybiAobnVtYmVyICogZHBpKSAvIDcyO1xuXHR9IGVsc2UgaWYgKHVuaXQgPT09IFwicGNcIikge1xuXHRcdHJldHVybiAobnVtYmVyICogZHBpKSAvIDY7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB1bml0OiAke3VuaXR9YCk7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NvbnZlcnRUb1BpeGVscywgZ2V0RGV2aWNlRFBJfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9kaW1lbnNpb24ubWpzXCI7XG5pbXBvcnQge2dldFdpbmRvd30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NLCBpc0Jyb3dzZXIsIEpTRE9NRXhwb3J0IGFzIEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7ZGV0ZWN0UnVudGltZUVudmlyb25tZW50fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvcnVudGltZS5tanNcIjtcblxuXG5mdW5jdGlvbiBnZXRNb2NrV2luZG93KGRwaSkge1xuXG4gICAgaWYoZGV0ZWN0UnVudGltZUVudmlyb25tZW50KCkgPT09ICdicm93c2VyJykge1xuICAgICAgICByZXR1cm4gZ2V0V2luZG93KCk7XG4gICAgfVxuICAgIFxuICAgIFxuICAgIGNvbnN0IGRvbSA9IG5ldyBKU0RPTSgnJywge1xuICAgICAgICBwcmV0ZW5kVG9CZVZpc3VhbDogdHJ1ZSxcbiAgICAgICAgcmVzb3VyY2VzOiAndXNhYmxlJyxcbiAgICB9KTtcblxuICAgIGRvbS53aW5kb3cubWF0Y2hNZWRpYSA9IChxdWVyeSkgPT4ge1xuICAgICAgICBjb25zdCBkcGlSZWdleCA9IC9cXChtYXgtcmVzb2x1dGlvbjogKFxcZCspZHBpXFwpLztcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBxdWVyeS5tYXRjaChkcGlSZWdleCk7XG5cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBjb25zdCBtYXhEcGkgPSBwYXJzZUludChtYXRjaFsxXSwgMTApO1xuICAgICAgICAgICAgcmV0dXJuIHttYXRjaGVzOiBkcGkgPD0gbWF4RHBpfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7bWF0Y2hlczogZmFsc2V9O1xuICAgIH07XG5cbiAgICByZXR1cm4gZG9tLndpbmRvdztcbn1cblxuZGVzY3JpYmUoJ2RpbWVuc2lvbicsICgpID0+IHtcbiAgICBsZXQgY3VycmVudEVudmlyb25tZW50O1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy9jaGFpRG9tKGdldERvY3VtZW50KCkpO1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgY29uc3QgdGVzdERwaSA9IDk2O1xuICAgICAgICBjb25zdCB0ZXN0V2luZG93ID0gZ2V0TW9ja1dpbmRvdyh0ZXN0RHBpKTtcbiAgICAgICAgZ2V0R2xvYmFsKCkud2luZG93ID0gdGVzdFdpbmRvdztcblxuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgZGVsZXRlIGdldEdsb2JhbCgpLndpbmRvdztcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjb252ZXJ0VG9QaXhlbHMnLCAoKSA9PiB7XG4gICAgICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGNvbnZlcnQgcHggdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udmVydFRvUGl4ZWxzKCcxMDBweCcpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoMTAwKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiB0aGUgaW5wdXQgdmFsdWUgaGFzIGFuIGludmFsaWQgZm9ybWF0XCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGludmFsaWRWYWx1ZSA9IFwiaW52YWxpZF92YWx1ZVwiO1xuXG4gICAgICAgICAgICBjb25zdCBlcnJvckZuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnZlcnRUb1BpeGVscyhpbnZhbGlkVmFsdWUpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZXhwZWN0KGVycm9yRm4pLnRvLnRocm93KEVycm9yLCBgSW52YWxpZCB2YWx1ZSBmb3JtYXQ6ICR7aW52YWxpZFZhbHVlfWApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChcInNob3VsZCBoYW5kbGUgbmVnYXRpdmUgdmFsdWVzIGNvcnJlY3RseVwiLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZWdhdGl2ZVZhbHVlID0gXCItMTBweFwiO1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSAtMTA7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUb1BpeGVscyhuZWdhdGl2ZVZhbHVlKTtcblxuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBjb252ZXJ0IGVtIHZhbHVlcycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0ZXN0RWxlbWVudC5zdHlsZS5mb250U2l6ZSA9ICcxNnB4JztcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVzdEVsZW1lbnQpO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VG9QaXhlbHMoJzJlbScsIHRlc3RFbGVtZW50LCB0ZXN0RWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgzMik7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGVzdEVsZW1lbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBjb252ZXJ0IHJlbSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGVzdEVsZW1lbnQuc3R5bGUuZm9udFNpemUgPSAnMTZweCc7XG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodGVzdEVsZW1lbnQpO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VG9QaXhlbHMoJzJyZW0nLCB0ZXN0RWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgzMik7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0ZXN0RWxlbWVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGNvbnZlcnQgcGVyY2VudGFnZSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGVzdEVsZW1lbnQuc3R5bGUud2lkdGggPSAnNTAwcHgnO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXN0RWxlbWVudCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUb1BpeGVscygnNTAlJywgdGVzdEVsZW1lbnQpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoMjUwKTtcblxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXN0RWxlbWVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgZm9yIHVuc3VwcG9ydGVkIHVuaXRzJywgKCkgPT4ge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGNvbnZlcnRUb1BpeGVscygnMTB1bnN1cHBvcnRlZFVuaXQnKSkudG8udGhyb3coJ1Vuc3VwcG9ydGVkIHVuaXQ6IHVuc3VwcG9ydGVkVW5pdCcpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ2dldERldmljZURQSScsICgpID0+IHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgZGV2aWNlIERQSScsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3REcGkgPSA5NjtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RXaW5kb3cgPSBnZXRNb2NrV2luZG93KHRlc3REcGkpO1xuICAgICAgICAgICAgZ2V0R2xvYmFsKCkud2luZG93ID0gdGVzdFdpbmRvdztcblxuICAgICAgICAgICAgY29uc3QgZGV2aWNlRHBpID0gZ2V0RGV2aWNlRFBJKCk7XG4gICAgICAgICAgICBleHBlY3QoZGV2aWNlRHBpKS50by5lcXVhbCh0ZXN0RHBpICogdGVzdFdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKTtcblxuICAgICAgICAgICAgZGVsZXRlIGdldEdsb2JhbCgpLndpbmRvdztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBjYWNoZSB0aGUgcmVzdWx0IGFuZCByZXR1cm4gdGhlIHNhbWUgdmFsdWUnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0RHBpID0gOTY7XG4gICAgICAgICAgICBjb25zdCB0ZXN0V2luZG93ID0gZ2V0TW9ja1dpbmRvdyh0ZXN0RHBpKTtcbiAgICAgICAgICAgIGdldEdsb2JhbCgpLndpbmRvdyA9IHRlc3RXaW5kb3c7XG5cbiAgICAgICAgICAgIGNvbnN0IGRldmljZURwaTEgPSBnZXREZXZpY2VEUEkoKTtcbiAgICAgICAgICAgIGNvbnN0IGRldmljZURwaTIgPSBnZXREZXZpY2VEUEkoKTtcbiAgICAgICAgICAgIGV4cGVjdChkZXZpY2VEcGkxKS50by5lcXVhbChkZXZpY2VEcGkyKTtcblxuICAgICAgICAgICAgZGVsZXRlIGdldEdsb2JhbCgpLndpbmRvdztcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuVXRpbFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRU5WX0FXU19MQU1CREEgPSBcImF3cy1sYW1iZGFcIjtcbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuVXRpbFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRU5WX0dPT0dMRV9GVU5DVElPTlMgPSBcImdvb2dsZS1mdW5jdGlvbnNcIjtcbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuVXRpbFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRU5WX0VMRUNUUk9OID0gXCJlbGVjdHJvblwiO1xuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBFTlZfTk9ERSA9IFwibm9kZVwiO1xuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBFTlZfQlJPV1NFUiA9IFwiYnJvd3NlclwiO1xuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBFTlZfV0VCX1dPUktFUiA9IFwid2ViLXdvcmtlclwiO1xuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBFTlZfREVOTyA9IFwiZGVub1wiO1xuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBFTlZfVU5LTk9XTiA9IFwidW5rbm93blwiO1xuXG4vKipcbiAqIERldGVjdHMgYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgcnVudGltZSBlbnZpcm9ubWVudC5cbiAqXG4gKiAtICdhd3MtbGFtYmRhJzogQVdTIExhbWJkYSBlbnZpcm9ubWVudFxuICogLSAnZ29vZ2xlLWZ1bmN0aW9ucyc6IEdvb2dsZSBDbG91ZCBGdW5jdGlvbnMgZW52aXJvbm1lbnRcbiAqIC0gJ2VsZWN0cm9uJzogRWxlY3Ryb24gZW52aXJvbm1lbnRcbiAqIC0gJ25vZGUnOiBOb2RlLmpzIGVudmlyb25tZW50XG4gKiAtICdicm93c2VyJzogQnJvd3NlciBlbnZpcm9ubWVudFxuICogLSAnd2ViLXdvcmtlcic6IFdlYiBXb3JrZXIgZW52aXJvbm1lbnRcbiAqIC0gJ2Rlbm8nOiBEZW5vIGVudmlyb25tZW50XG4gKiAtICdyZWFjdC1uYXRpdmUnOiBSZWFjdCBOYXRpdmUgZW52aXJvbm1lbnRcbiAqIC0gJ3Vua25vd24nOiBVbmtub3duIGVudmlyb25tZW50XG4gKlxuICogQHNpbmNlIDMuMzQuMFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVXRpbFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGRldGVjdGVkIHJ1bnRpbWUgZW52aXJvbm1lbnQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG4gKi9cbmZ1bmN0aW9uIGRldGVjdFJ1bnRpbWVFbnZpcm9ubWVudCgpIHtcblx0Ly8gQVdTIExhbWJkYSBlbnZpcm9ubWVudFxuXHRpZiAoXG5cdFx0dHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRwcm9jZXNzLmVudiAhPSBudWxsICYmXG5cdFx0cHJvY2Vzcy5lbnYuQVdTX0xBTUJEQV9GVU5DVElPTl9OQU1FXG5cdCkge1xuXHRcdHJldHVybiBFTlZfQVdTX0xBTUJEQTtcblx0fVxuXG5cdC8vIEdvb2dsZSBDbG91ZCBGdW5jdGlvbnMgZW52aXJvbm1lbnRcblx0aWYgKFxuXHRcdHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0cHJvY2Vzcy5lbnYgIT0gbnVsbCAmJlxuXHRcdHByb2Nlc3MuZW52LkZVTkNUSU9OX05BTUVcblx0KSB7XG5cdFx0cmV0dXJuIEVOVl9HT09HTEVfRlVOQ1RJT05TO1xuXHR9XG5cblx0Ly8gTm9kZS5qcyBlbnZpcm9ubWVudFxuXHRpZiAoXG5cdFx0dHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRwcm9jZXNzLnZlcnNpb25zICE9IG51bGwgJiZcblx0XHRwcm9jZXNzLnZlcnNpb25zLm5vZGUgIT0gbnVsbFxuXHQpIHtcblx0XHQvLyBFbGVjdHJvbiBlbnZpcm9ubWVudFxuXHRcdGlmIChwcm9jZXNzLnZlcnNpb25zLmVsZWN0cm9uICE9IG51bGwpIHtcblx0XHRcdHJldHVybiBFTlZfRUxFQ1RST047XG5cdFx0fVxuXHRcdHJldHVybiBFTlZfTk9ERTtcblx0fVxuXG5cdC8vIEJyb3dzZXIgZW52aXJvbm1lbnRcblx0aWYgKFxuXHRcdHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHR0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0dHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdHR5cGVvZiBuYXZpZ2F0b3IudXNlckFnZW50ID09PSBcInN0cmluZ1wiXG5cdCkge1xuXHRcdC8vIFdlYiBXb3JrZXIgZW52aXJvbm1lbnRcblx0XHRpZiAodHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIGltcG9ydFNjcmlwdHMgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0cmV0dXJuIEVOVl9XRUJfV09SS0VSO1xuXHRcdH1cblx0XHRyZXR1cm4gRU5WX0JST1dTRVI7XG5cdH1cblxuXHQvLyBEZW5vIGVudmlyb25tZW50XG5cdGlmICh0eXBlb2YgRGVubyAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdHJldHVybiBFTlZfREVOTztcblx0fVxuXG5cdC8vIFVua25vd24gZW52aXJvbm1lbnRcblx0cmV0dXJuIEVOVl9VTktOT1dOO1xufVxuXG5leHBvcnQge1xuXHRFTlZfQVdTX0xBTUJEQSxcblx0RU5WX0dPT0dMRV9GVU5DVElPTlMsXG5cdEVOVl9FTEVDVFJPTixcblx0RU5WX05PREUsXG5cdEVOVl9CUk9XU0VSLFxuXHRFTlZfV0VCX1dPUktFUixcblx0RU5WX0RFTk8sXG5cdEVOVl9VTktOT1dOLFxuXHRkZXRlY3RSdW50aW1lRW52aXJvbm1lbnQsXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGNoYWkgZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtTdHlsZXNoZWV0fSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS9saW5rL3N0eWxlc2hlZXQubWpzXCI7XG5pbXBvcnQge0RhdGFVcmx9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZGF0YXVybC5tanNcIjtcbmltcG9ydCB7SUR9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtjbGVhbnVwRE9NRnJvbVRlc3RpbmcsIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZ30gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWwvY2xlYW51cGRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuXG5jaGFpLnVzZShjaGFpRG9tKTtcblxubGV0IGh0bWwxID0gYFxuXG5gO1xuXG5cbmRlc2NyaWJlKCdTdHlsZXNoZWV0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSh7XG4gICAgICAgICAgICBydW5TY3JpcHRzOiBcImRhbmdlcm91c2x5XCIsXG4gICAgICAgICAgICByZXNvdXJjZXM6IFwidXNhYmxlXCJcbiAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ1N0eWxlc2hlZXQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ2Nvbm5lY3QoKS5hdmFpbGFibGUoKScsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHN0eWxlc2hlZXQgPSBuZXcgU3R5bGVzaGVldCh7XG4gICAgICAgICAgICAgICAgaHJlZjogbmV3IERhdGFVcmwoJycsICd0ZXh0L2NzcycpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgc3R5bGVzaGVldC5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBzdHlsZXNoZWV0LmdldE9wdGlvbignaWQnKVxuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0V4dGVybmFsIFN0eWxlc2hlZXQnLCAoKSA9PiB7XG5cbiAgICAgICAgbGV0IGlkID0gbmV3IElEKCdTdHlsZXNoZWV0JykudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IHN0eWxlc2hlZXQsIHVybCA9ICdodHRwczovL21vbnN0ZXJqcy5vcmcvYXNzZXRzL2VtcHR5LmNzcz8nICsgaWQ7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgIHN0eWxlc2hlZXQgPSBuZXcgU3R5bGVzaGVldCh7XG4gICAgICAgICAgICAgICAgaHJlZjogdXJsLFxuICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdhcHBlbmQgYW5kIHJlbW92ZSBTdHlsZXNoZWV0ICcsIChkb25lKSA9PiB7XG5cbiAgICAgICAgICAgIGV4cGVjdChzdHlsZXNoZWV0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICBzdHlsZXNoZWV0LmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc3R5bGVzaGVldC5pc0Nvbm5lY3RlZCgpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaHJlZj1cIicgKyB1cmwgKyAnXCJdJykpLnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzdHlsZXNoZWV0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaHJlZj1cIicgKyB1cmwgKyAnXCJdJykpLm5vdC50by5leGlzdDtcblxuICAgICAgICAgICAgICAgIHN0eWxlc2hlZXQuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3Qoc3R5bGVzaGVldC5pc0Nvbm5lY3RlZCgpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2hyZWY9XCInICsgdXJsICsgJ1wiXScpKS50by5leGlzdDtcblxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaHJlZj1cIicgKyB1cmwgKyAnXCJdJykpLm5vdC50by5leGlzdDtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHN0eWxlc2hlZXQuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbn0pOyIsICIndXNlIHN0cmljdCc7XG5cblxubGV0IGFkZGVkTm9kZXMsIG11dGF0aW9ub2JzZXJ2ZXI7XG5cbmZ1bmN0aW9uIGluaXQoKSB7XG5cbiAgICBhZGRlZE5vZGVzID0gW107XG4gICAgbXV0YXRpb25vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcbiAgICAgICAgbXV0YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAobXV0YXRpb24udHlwZSA9PT0gJ2NoaWxkTGlzdCcgJiYgbXV0YXRpb24ucmVtb3ZlZE5vZGVzKSB7XG5cbiAgICAgICAgICAgICAgICBtdXRhdGlvbi5hZGRlZE5vZGVzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWROb2Rlcy5wdXNoKG4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZygpIHtcblxuICAgIGlmIChtdXRhdGlvbm9ic2VydmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaW5pdCgpXG4gICAgfVxuXG4gICAgbXV0YXRpb25vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQnKSwge2NoaWxkTGlzdDogdHJ1ZX0pO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKSB7XG4gICAgbXV0YXRpb25vYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cbiAgICBmb3IgKGNvbnN0IG4gb2YgYWRkZWROb2Rlcykge1xuICAgICAgICBuLnJlbW92ZSgpO1xuICAgIH1cbn0iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0xpbmt9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL2xpbmsubWpzXCI7XG5pbXBvcnQge0RhdGFVcmx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZGF0YXVybC5tanNcIjtcbmltcG9ydCB7SUR9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtjbGVhbnVwRE9NRnJvbVRlc3RpbmcsIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZ30gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2xlYW51cGRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuXG5jaGFpLnVzZShjaGFpRG9tKTtcblxuXG5cbmRlc2NyaWJlKCdMaW5rJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZygpXG4gICAgfSlcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGNsZWFudXBET01Gcm9tVGVzdGluZygpO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnTGluaygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQoNTAwMCk7XG5cbiAgICAgICAgaXQoJ2Nvbm5lY3QoKS5hdmFpbGFibGUoKScsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGxpbmsgPSBuZXcgTGluayh7XG4gICAgICAgICAgICAgICAgaHJlZjogbmV3IERhdGFVcmwoJycsICd0ZXh0L2NzcycpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgcmVsOiAnc3R5bGVzaGVldCdcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBsaW5rLmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cbiAgICAgICAgfSlcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdFeHRlcm5hbCBMaW5rJywgKCkgPT4ge1xuICAgICAgICB0aGlzLnRpbWVvdXQoNTAwMCk7XG5cbiAgICAgICAgbGV0IGlkID0gbmV3IElEKCdsaW5rJykudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IGxpbmssIHVybCA9ICdodHRwczovL21vbnN0ZXJqcy5vcmcvYXNzZXRzL2VtcHR5LmNzcz8nICsgaWQ7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgIGxpbmsgPSBuZXcgTGluayh7XG4gICAgICAgICAgICAgICAgaHJlZjogdXJsLFxuICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgICAgICByZWw6ICdzdHlsZXNoZWV0J1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2FwcGVuZCBhbmQgcmVtb3ZlIExpbmsgJywgKGRvbmUpID0+IHtcblxuICAgICAgICAgICAgZXhwZWN0KGxpbmsuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG5cbiAgICAgICAgICAgIGxpbmsuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChsaW5rLmlzQ29ubmVjdGVkKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tocmVmPVwiJyArIHVybCArICdcIl0nKSkudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxpbmsuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tocmVmPVwiJyArIHVybCArICdcIl0nKSkubm90LnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgbGluay5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChsaW5rLmlzQ29ubmVjdGVkKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaHJlZj1cIicgKyB1cmwgKyAnXCJdJykpLnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tocmVmPVwiJyArIHVybCArICdcIl0nKSkubm90LnRvLmV4aXN0O1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QobGluay5pc0Nvbm5lY3RlZCgpKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxufSk7IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGNoYWkgZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtTY3JpcHR9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL3NjcmlwdC5tanNcIjtcbmltcG9ydCB7RGF0YVVybH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5cbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG5cbmA7XG5cblxuZGVzY3JpYmUoJ1NjcmlwdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ1NjcmlwdCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2V0RXZlbnRUeXBlcygpJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3Qgc2NyaXB0ID0gbmV3IFNjcmlwdCh7XG4gICAgICAgICAgICAgICAgc3JjOiBuZXcgRGF0YVVybCgnJywgJ3RleHQvamF2YXNjcmlwdCcpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgYXN5bmM6IHRydWUsXG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46ICdhbm9ueW1vdXMnLFxuICAgICAgICAgICAgICAgIGRlZmVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpbnRlZ3JpdHk6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBub21vZHVsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgbm9uY2U6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICByZWZlcnJlcnBvbGljeTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0L2phdmFzY3JpcHQnXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgc2NyaXB0LmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gc2NyaXB0LmdldE9wdGlvbignaWQnKVxuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0V4dGVybmFsIEpTJywgKCkgPT4ge1xuXG4gICAgICAgIGxldCBpZCA9IG5ldyBJRCgnc2NyaXB0JykudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IHNlcnZlciwgc2NyaXB0LCB1cmwgPSAnaHR0cHM6Ly9tb25zdGVyanMub3JnL2Fzc2V0cy9lbXB0eS5qcz8nICsgaWQ7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgIHNjcmlwdCA9IG5ldyBTY3JpcHQoe1xuICAgICAgICAgICAgICAgIHNyYzogdXJsLFxuICAgICAgICAgICAgICAgIGFzeW5jOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiAnYW5vbnltb3VzJyxcbiAgICAgICAgICAgICAgICBkZWZlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgaW50ZWdyaXR5OiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgbm9tb2R1bGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG5vbmNlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcmVmZXJyZXJwb2xpY3k6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dC9qYXZhc2NyaXB0JyxcbiAgICAgICAgICAgICAgICBpZDogaWRcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdhcHBlbmQgYW5kIHJlbW92ZSBzY3JpcHQgJywgKGRvbmUpID0+IHtcblxuICAgICAgICAgICAgZXhwZWN0KHNjcmlwdC5pc0Nvbm5lY3RlZCgpKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgc2NyaXB0LmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc2NyaXB0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tzcmM9XCInICsgdXJsICsgJ1wiXScpKS50by5leGlzdDtcblxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc2NyaXB0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbc3JjPVwiJyArIHVybCArICdcIl0nKSkubm90LnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgc2NyaXB0LmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHNjcmlwdC5pc0Nvbm5lY3RlZCgpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3NyYz1cIicgKyB1cmwgKyAnXCJdJykpLnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tzcmM9XCInICsgdXJsICsgJ1wiXScpKS5ub3QudG8uZXhpc3Q7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChzY3JpcHQuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbn0pOyIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBjaGFpIGZyb20gXCJjaGFpXCJcbmltcG9ydCB7RGF0YX0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2UvZGF0YS5tanNcIjtcbmltcG9ydCB7RGF0YVVybH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5cbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG5cbmA7XG5cblxuZGVzY3JpYmUoJ0RhdGEnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgZmV0Y2hSZWZlcmVuY2UsIHJldHVyblN0YXR1cywgbXV0YXRpb25vYnNlcnZlciwgYWRkZWROb2RlcyA9IFtdO1xuXG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuXG4gICAgICAgIHJldHVyblN0YXR1cyA9IDIwMDtcbiAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxUaGlzWydmZXRjaCddO1xuICAgICAgICBnbG9iYWxUaGlzWydmZXRjaCddID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuXG4gICAgICAgICAgICBpZiAoIXVybCkgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHVybCcpXG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogXCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogcmV0dXJuU3RhdHVzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH07XG5cblxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBnbG9iYWxUaGlzWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgIGNsZWFudXBET01Gcm9tVGVzdGluZygpO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnRGF0YSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2V0RXZlbnRUeXBlcygpJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBEYXRhKHtcbiAgICAgICAgICAgICAgICBzcmM6IG5ldyBEYXRhVXJsKCcnLCAndGV4dC9qYXZhc2NyaXB0JykudG9TdHJpbmcoKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRhdGEuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0V4dGVybmFsIERhdGEnLCAoKSA9PiB7XG5cbiAgICAgICAgbGV0IGlkID0gbmV3IElEKCdkYXRhJykudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IHNlcnZlciwgZGF0YSwgdXJsID0gJ2h0dHBzOi8vbW9uc3RlcmpzLm9yZy9hc3NldHMvZW1wdHkuanM/JyArIGlkO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgICAgICBkYXRhID0gbmV3IERhdGEoe1xuICAgICAgICAgICAgICAgIHNyYzogdXJsLFxuICAgICAgICAgICAgICAgIGlkOiBpZFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2RhdGEgaXMgbm90IGNvbm5lY3RlZCcsICgpID0+IHtcbiAgICAgICAgICAgIGV4cGVjdChkYXRhLmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdjb25uZWN0IGFuZCBjaGVjayBhdmFpbGFiaWxpdHknLCAoZG9uZSkgPT4ge1xuXG4gICAgICAgICAgICBkYXRhLmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZGF0YS5pc0Nvbm5lY3RlZCgpLCAnaXNDb25uZWN0ZWQgMScpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0eXBlPVwiYXBwbGljYXRpb24vanNvblwiXScpLCAnZXhpc3RzIDEnKS50by5leGlzdDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucGFyZW50RWxlbWVudDtcblxuXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRhdGEuaXNDb25uZWN0ZWQoKSwgJ2lzQ29ubmVjdGVkIDInKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3R5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCJdJyksICdleGlzdHMgMicpLm5vdC50by5leGlzdDtcblxuICAgICAgICAgICAgICAgIGRhdGEuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZGF0YS5pc0Nvbm5lY3RlZCgpLCAnaXNDb25uZWN0ZWQgMycpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIl0nKSwgJ2V4aXN0cyAzJykudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3R5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCJdJyksICdleGlzdHMgNCcpLm5vdC50by5leGlzdDtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRhdGEuaXNDb25uZWN0ZWQoKSwgJ2lzQ29ubmVjdGVkIDQnKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuZGVzY3JpYmUoJ2luaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMnLCAoKSA9PiB7XG4gICAgbGV0IGVsZW1lbnQ7XG4gICAgbGV0IG9wdGlvbnM7XG4gICAgbGV0IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXM7XG5cbiAgICBiZWZvcmUoIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC9pbml0LW9wdGlvbnMtZnJvbS1hdHRyaWJ1dGVzLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyA9IG1bJ2luaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMnXTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIG9wdGlvbnMgPSB7dXJsOiBcIlwiLCBrZXk6IHtzdWJrZXk6IFwiXCIsIGNhc2VTZW5zaXRpdmU6IHRydWV9fTtcbiAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIG9wdGlvbnMgd2l0aCBtYXRjaGluZyBhdHRyaWJ1dGVzJywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi11cmwnLCAnaHR0cHM6Ly9leGFtcGxlLmNvbScpO1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi1rZXktc3Via2V5JywgJ3Rlc3QnKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpO1xuICAgICAgICBleHBlY3QocmVzdWx0LmtleS5zdWJrZXkpLnRvLmVxdWFsKCd0ZXN0Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBtb2RpZnkgb3B0aW9ucyB3aXRob3V0IG1hdGNoaW5nIGF0dHJpYnV0ZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCcnKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5rZXkuc3Via2V5KS50by5lcXVhbCgnJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGlnbm9yZSBhdHRyaWJ1dGVzIHdpdGhvdXQgdGhlIGNvcnJlY3QgcHJlZml4JywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1zb21lLW9wdGlvbi11cmwnLCAnaHR0cHM6Ly9leGFtcGxlLmNvbScpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaWdub3JlIGF0dHJpYnV0ZXMgd2l0aCBpbnZhbGlkIG9wdGlvbiBwYXRocycsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24tbm9uZXhpc3RlbnQnLCAndmFsdWUnKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwob3B0aW9ucyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFwcGx5IG1hcHBpbmcgZm9yIGEgc2luZ2xlIGF0dHJpYnV0ZScsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24tdXJsJywgJ2V4YW1wbGUnKTtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgICd1cmwnOiAodmFsdWUpID0+ICdodHRwczovLycgKyB2YWx1ZSArICcuY29tJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucywgbWFwcGluZyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCdodHRwczovL2V4YW1wbGUuY29tJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFwcGx5IG1hcHBpbmcgZm9yIGEgbmVzdGVkIGF0dHJpYnV0ZScsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24ta2V5LXN1YmtleScsICcxMjMnKTtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgICdrZXkuc3Via2V5JzogKHZhbHVlKSA9PiBwYXJzZUludCh2YWx1ZSwgMTApICogMlxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucywgbWFwcGluZyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5rZXkuc3Via2V5KS50by5lcXVhbChcIjI0NlwiKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYXBwbHkgbXVsdGlwbGUgbWFwcGluZ3MnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLXVybCcsICdleGFtcGxlJyk7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLWtleS1zdWJrZXknLCAnMTIzJyk7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICAndXJsJzogKHZhbHVlKSA9PiAnaHR0cHM6Ly8nICsgdmFsdWUgKyAnLmNvbScsXG4gICAgICAgICAgICAna2V5LnN1YmtleSc6ICh2YWx1ZSkgPT4gcGFyc2VJbnQodmFsdWUsIDEwKSAqIDJcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpO1xuICAgICAgICBleHBlY3QocmVzdWx0LmtleS5zdWJrZXkpLnRvLmVxdWFsKFwiMjQ2XCIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpZ25vcmUgbWFwcGluZ3MgZm9yIG5vbi1leGlzdGluZyBhdHRyaWJ1dGVzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgICAgICAgJ3VybCc6ICh2YWx1ZSkgPT4gJ2h0dHBzOi8vJyArIHZhbHVlICsgJy5jb20nXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpZ25vcmUgbWFwcGluZ3MgZm9yIGludmFsaWQgb3B0aW9uIHBhdGhzJywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi1ub25leGlzdGVudCcsICd2YWx1ZScpO1xuICAgICAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgICAgICAgJ25vbmV4aXN0ZW50JzogKHZhbHVlKSA9PiB2YWx1ZSArICdiYXInXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKG9wdGlvbnMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhcHBseSBtYXBwaW5nIG9ubHkgdG8gc3BlY2lmaWVkIGF0dHJpYnV0ZXMnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLXVybCcsICdleGFtcGxlJyk7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLWtleS1zdWJrZXknLCAnMTIzJyk7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICAndXJsJzogKHZhbHVlKSA9PiAnaHR0cHM6Ly8nICsgdmFsdWUgKyAnLmNvbSdcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpO1xuICAgICAgICBleHBlY3QocmVzdWx0LmtleS5zdWJrZXkpLnRvLmVxdWFsKCcxMjMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGFwcGx5IG1hcHBpbmcgaWYgbm90IGEgZnVuY3Rpb24nLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLXVybCcsICdleGFtcGxlJyk7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICAndXJsJzogJ2h0dHBzOi8vZXhhbXBsZS5jb20nXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJ2V4YW1wbGUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYXBwbHkgbWFwcGluZyB3aXRoIGN1c3RvbSBwcmVmaXgnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWN1c3RvbS1vcHRpb24tdXJsJywgJ2V4YW1wbGUnKTtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgICd1cmwnOiAodmFsdWUpID0+ICdodHRwczovLycgKyB2YWx1ZSArICcuY29tJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucywgbWFwcGluZywgJ2RhdGEtY3VzdG9tLW9wdGlvbi0nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJ2h0dHBzOi8vZXhhbXBsZS5jb20nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGFwcGx5IG1hcHBpbmcgd2l0aCBpbmNvcnJlY3QgY3VzdG9tIHByZWZpeCcsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtY3VzdG9tLW9wdGlvbi11cmwnLCAnZXhhbXBsZScpO1xuICAgICAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgICAgICAgJ3VybCc6ICh2YWx1ZSkgPT4gJ2h0dHBzOi8vJyArIHZhbHVlICsgJy5jb20nXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhcHBseSBjYXNlIHNlbnNpdGl2ZSBtYXBwaW5nJywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi1rZXktY2FzZVNlbnNpdGl2ZScsICdmYWxzZScpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQua2V5LmNhc2VTZW5zaXRpdmUpLnRvLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxufSk7XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gJ2NoYWknO1xuaW1wb3J0IHtleHRyYWN0S2V5c30gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC9leHRyYWN0LWtleXMubWpzXCI7XG5cblxuZGVzY3JpYmUoJ2V4dHJhY3RLZXlzJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZXh0cmFjdCBrZXlzIGZyb20gdGhlIGdpdmVuIG9iamVjdCcsICgpID0+IHtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgZmlyc3ROYW1lOiAnSm9obicsXG4gICAgICAgICAgICBsYXN0TmFtZTogJ0RvZScsXG4gICAgICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgICAgICAgc3RyZWV0OiAnMTIzIE1haW4gU3QnLFxuICAgICAgICAgICAgICAgIGNpdHk6ICdOZXcgWW9yaycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gbmV3IE1hcChbXG4gICAgICAgICAgICBbJ2ZpcnN0bmFtZScsICdmaXJzdE5hbWUnXSxcbiAgICAgICAgICAgIFsnbGFzdG5hbWUnLCAnbGFzdE5hbWUnXSxcbiAgICAgICAgICAgIFsnYWRkcmVzcy1zdHJlZXQnLCAnYWRkcmVzcy5zdHJlZXQnXSxcbiAgICAgICAgICAgIFsnYWRkcmVzcy1jaXR5JywgJ2FkZHJlc3MuY2l0eSddLFxuICAgICAgICBdKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBleHRyYWN0S2V5cyhvYmopO1xuXG4gICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHJlc3VsdCkpKS50by5lcXVhbChKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKGV4cGVjdGVkKSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB1c2UgY3VzdG9tIGtleSBhbmQgdmFsdWUgc2VwYXJhdG9ycycsICgpID0+IHtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgZmlyc3ROYW1lOiAnSm9obicsXG4gICAgICAgICAgICBsYXN0TmFtZTogJ0RvZScsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBuZXcgTWFwKFtcbiAgICAgICAgICAgIFsncHJlZml4K2ZpcnN0bmFtZScsICdwcmVmaXgrZmlyc3ROYW1lJ10sXG4gICAgICAgICAgICBbJ3ByZWZpeCtsYXN0bmFtZScsICdwcmVmaXgrbGFzdE5hbWUnXSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0cmFjdEtleXMob2JqLCAncHJlZml4JywgJysnLCAnKycpO1xuXG4gICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHJlc3VsdCkpKS50by5lcXVhbChKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKGV4cGVjdGVkKSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NoZWNrIGlmIHZhbHVlIGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIGZpcnN0TmFtZTogJ0pvaG4nLFxuICAgICAgICAgICAgbGFzdE5hbWU6ICdEb2UnLFxuICAgICAgICAgICAgYWRkcmVzczogbnVsbCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBleHBlY3RlZCA9IG5ldyBNYXAoW1xuICAgICAgICAgICAgWydmaXJzdG5hbWUnLCAnZmlyc3ROYW1lJ10sXG4gICAgICAgICAgICBbJ2xhc3RuYW1lJywgJ2xhc3ROYW1lJ10sXG4gICAgICAgICAgICBbJ2FkZHJlc3MnLCAnYWRkcmVzcyddLFxuICAgICAgICAgICAgXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dHJhY3RLZXlzKG9iaik7XG5cbiAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20ocmVzdWx0KSkpLnRvLmVxdWFsKEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20oZXhwZWN0ZWQpKSk7XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgbW9yZSB0ZXN0IGNhc2VzIGFzIG5lZWRlZFxufSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWwsIGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgRmFjdG9yeSB9O1xuXG4vKipcbiAqIEEgZmFjdG9yeSBmb3IgY3JlYXRpbmcgd29ya2VyIGluc3RhbmNlcy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET00uV29ya2VyXG4gKiBAc3VtbWFyeSBBIHNtYWxsIGZhY3RvcnkgdG8gY3JlYXRlIHdvcmtlclxuICovXG5jbGFzcyBGYWN0b3J5IGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdHdvcmtlcjogbmV3IFdlYWtNYXAoKSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSB3b3JrZXIgZnJvbSBhIFVSTFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXNzYWdlSGFuZGxlclxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBlcnJvckhhbmRsZXJcblx0ICogQHJldHVybiB7V29ya2VyfVxuXHQgKi9cblx0Y3JlYXRlRnJvbVVSTCA9IGZ1bmN0aW9uICh1cmwsIG1lc3NhZ2VIYW5kbGVyLCBlcnJvckhhbmRsZXIpIHtcblx0XHRpZiAodXJsIGluc3RhbmNlb2YgVVJMKSB7XG5cdFx0XHR1cmwgPSB1cmwudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHRjb25zdCB3b3JrZXJDbGFzcyA9IGdldEdsb2JhbEZ1bmN0aW9uKFwiV29ya2VyXCIpO1xuXHRcdHZhciB3b3JrZXIgPSBuZXcgd29ya2VyQ2xhc3ModmFsaWRhdGVTdHJpbmcodXJsKSk7XG5cblx0XHRpZiAoaXNGdW5jdGlvbihtZXNzYWdlSGFuZGxlcikpIHtcblx0XHRcdHdvcmtlci5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0bWVzc2FnZUhhbmRsZXIuY2FsbCh3b3JrZXIsIGV2ZW50KTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aWYgKGlzRnVuY3Rpb24oZXJyb3JIYW5kbGVyKSkge1xuXHRcdFx0d29ya2VyLm9uZXJyb3IgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0ZXJyb3JIYW5kbGVyLmNhbGwod29ya2VyLCBldmVudCk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHJldHVybiB3b3JrZXI7XG5cdH07XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSB3b3JrZXIgZnJvbSBhIHNjcmlwdFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudFxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXNzYWdlSGFuZGxlclxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBlcnJvckhhbmRsZXJcblx0ICogQHJldHVybiB7V29ya2VyfVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0FQSS9VUkwvY3JlYXRlT2JqZWN0VVJMXG5cdCAqL1xuXHRjcmVhdGVGcm9tU2NyaXB0ID0gZnVuY3Rpb24gKGNvbnRlbnQsIG1lc3NhZ2VIYW5kbGVyLCBlcnJvckhhbmRsZXIpIHtcblx0XHRjb25zdCBibG9iRnVuY3Rpb24gPSBuZXcgZ2V0R2xvYmFsRnVuY3Rpb24oXCJCbG9iXCIpO1xuXHRcdGNvbnN0IGJsb2IgPSBuZXcgYmxvYkZ1bmN0aW9uKFt2YWxpZGF0ZVN0cmluZyhjb250ZW50KV0sIHtcblx0XHRcdHR5cGU6IFwic2NyaXB0L2phdmFzY3JpcHRcIixcblx0XHR9KTtcblxuXHRcdGNvbnN0IHVybCA9IGdldEdsb2JhbEZ1bmN0aW9uKFwiVVJMXCIpLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblx0XHRjb25zdCB3b3JrZXIgPSB0aGlzLmNyZWF0ZUZyb21VUkwodXJsLCBtZXNzYWdlSGFuZGxlciwgZXJyb3JIYW5kbGVyKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wid29ya2VyXCJdLnNldCh3b3JrZXIsIHVybCk7XG5cblx0XHRyZXR1cm4gd29ya2VyO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBUZXJtaW5hdGUgdGhlIHdvcmtlciBhbmQgY2FsbCByZXZva2VPYmplY3RVUkwgaWYgbmVjZXNzYXJ5LlxuXHQgKlxuXHQgKiBAcGFyYW0gd29ya2VyXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLldvcmtlci5GYWN0b3J5fVxuXHQgKi9cblx0dGVybWluYXRlKHdvcmtlcikge1xuXHRcdGNvbnN0IHdvcmtlckNsYXNzID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJXb3JrZXJcIik7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZSh3b3JrZXIsIHdvcmtlckNsYXNzKTtcblxuXHRcdHdvcmtlci50ZXJtaW5hdGUoKTtcblxuXHRcdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXVtcIndvcmtlclwiXS5oYXMod29ya2VyKSkge1xuXHRcdFx0Y29uc3QgdXJsID0gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJ3b3JrZXJcIl0uZ2V0KHdvcmtlcik7XG5cdFx0XHRVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5pbXBvcnQge0ZhY3Rvcnl9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvZG9tL3dvcmtlci9mYWN0b3J5Lm1qc1wiO1xuaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET00sIGlzTm9kZX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5kZXNjcmliZSgnV29ya2VyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgaWYgKGlzTm9kZSgpKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsWydVUkwnXSwgJ2NyZWF0ZU9iamVjdFVSTCcsIHtcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCIvZXhhbXBsZS5tanNcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGdsb2JhbFsnV29ya2VyJ10gPSBjbGFzcyB7XG4gICAgICAgICAgICAgICAgdGVybWluYXRlKCkge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvbmVycm9yKCkge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvbm1lc3NhZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGEgPSB0eXBlb2YgZ2xvYmFsWydXb3JrZXInXTtcbiAgICAgICAgICAgIGxldCBhMSA9IHR5cGVvZiBXb3JrZXI7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGpzZG9tID0gaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ0ZhY3RvcnknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2NyZWF0ZSB3b3JrZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgRmFjdG9yeSgpO1xuICAgICAgICAgICAgY29uc3Qgd29ya2VyID0gZmFjdG9yeS5jcmVhdGVGcm9tU2NyaXB0KCdjb25zb2xlLmxvZyhcImhlbGxvIHdvcmxkXCIpOycpXG4gICAgICAgICAgICBleHBlY3Qod29ya2VyKS5pcy5pbnN0YW5jZW9mKFdvcmtlcik7XG5cbiAgICAgICAgICAgIGV4cGVjdChmYWN0b3J5LnRlcm1pbmF0ZSh3b3JrZXIpKS5pcy5pbnN0YW5jZW9mKEZhY3RvcnkpXG5cblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBjaGFpIGZyb20gXCJjaGFpXCJcbmltcG9ydCB7VXBkYXRlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXBkYXRlci5tanNcIjtcbmltcG9ydCB7SUR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQge09ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHtQcm94eU9ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5cbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPHRlbXBsYXRlIGlkPVwiY3VycmVudFwiPlxuICAgICAgICA8bGkgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmN1cnJlbnQgfCB0b2pzb25cIj48L2xpPlxuICAgIDwvdGVtcGxhdGU+XG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgICAgIDx1bCBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwiY3VycmVudCBwYXRoOmEuYlwiPlxuICAgICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgICAgICA8dWwgZGF0YS1tb25zdGVyLWluc2VydD1cImN1cnJlbnQgcGF0aDphLmIgfCBkb2l0XCI+XG4gICAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBpZD1cInRlc3QzXCI+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmEuYlwiPlxuICAgICAgICAgICAgPGlucHV0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDphLmNcIiBpZD1cImlucHV0MVwiPlxuICAgICAgICAgICAgPGlucHV0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2hlY2tlZCBwYXRoOmEuY2hlY2tib3hcIiB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiY2hlY2tib3hcIiBpZD1cImNoZWNrYm94XCI+XG4gICAgICAgICAgICA8aW5wdXQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmEudGV4dFwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInRleHRcIiBpZD1cInRleHRcIj5cbiAgICAgICAgICAgIDxpbnB1dCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNoZWNrZWQgcGF0aDphLnJhZGlvXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cInJhZGlvXCIgdmFsdWU9XCJyMVwiIGlkPVwicmFkaW9cIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwicmFkaW9cIiB2YWx1ZT1cInIyXCIgaWQ9XCJyMlwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJyYWRpb1wiIHZhbHVlPVwicnhcIiBpZD1cInJ4XCI+XG5cbiAgICAgICAgICAgIDxzZWxlY3QgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmEuc2VsZWN0XCIgbmFtZT1cInNlbGVjdFwiIGlkPVwic2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm90aGVyLXZhbHVlXCI+dmFsdWUxPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTI8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuXG4gICAgICAgICAgICA8c2VsZWN0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDphLm11bHRpc2VsZWN0XCIgbmFtZT1cIm11bHRpc2VsZWN0XCIgbXVsdGlwbGUgaWQ9XCJtdWx0aXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWUxPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTI8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlMzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWU0PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm90aGVyLXZhbHVlNVwiPnZhbHVlNTwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG5cbiAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPVwidGV4dGFyZWFcIiBpZD1cInRleHRhcmVhXCIgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmEudGV4dGFyZWFcIj48L3RleHRhcmVhPlxuXG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOnRleHQgfCB0b2xvd2VyXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOnRleHQgfCBjYWxsOm15Zm9ybWF0dGVyXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJzdGF0aWM6aGVsbG9cXFxcIFwiPjwvZGl2PlxuICAgIDwvZGl2PlxuYDtcblxubGV0IGh0bWwzID0gYFxuXG4gICAgPHRlbXBsYXRlIGlkPVwibXlpbm5lcmlkXCI+XG4gICAgICAgIDxzcGFuIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpteWlubmVyaWQgfCB0b2pzb25cIj48L3NwYW4+XG4gICAgPC90ZW1wbGF0ZT5cblxuICAgIDx0ZW1wbGF0ZSBpZD1cIm15aWRcIj5cbiAgICAgICAgPHAgZGF0YS1tb25zdGVyLWluc2VydD1cIm15aW5uZXJpZCBwYXRoOmEuYlwiPjwvcD5cbiAgICA8L3RlbXBsYXRlPlxuXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWluc2VydD1cIm15aWQgcGF0aDphLmJcIj48L2Rpdj5cbiAgICA8L2Rpdj5cblxuYDtcblxubGV0IGh0bWw0ID0gYFxuICAgIDxkaXY+XG4gICAgICAgIDxmb3JtIGlkPVwiZm9ybTFcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cImNoZWNrZWRcIiBuYW1lPVwiY2hlY2tib3hcIiBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6c3RhdGVcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJ0ZXh0XCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInJhZGlvXCIgdmFsdWU9XCJyMVwiIGlkPVwicjFcIiBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6cmFkaW9cIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwicmFkaW9cIiB2YWx1ZT1cInIyXCIgaWQ9XCJyMlwiIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDpyYWRpb1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJyYWRpb1wiIHZhbHVlPVwicnhcIiBpZD1cInJ4XCIgZGF0YS1jb21tZW50PVwibm90IGNhbGxlZCBiZWNhdXNlIG5vIGJpbmQgYXR0cmlidXRlXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImJ1dHRvblwiIG5hbWU9XCJidXR0b25cIj5cblxuICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwic2VsZWN0MVwiIGlkPVwic2VsZWN0MVwiIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDpzZWxlY3RcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlMTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWUyPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cblxuICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwic2VsZWN0MlwiIG11bHRpcGxlIGlkPVwic2VsZWN0MlwiIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDptdWx0aXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWUxPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTI8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlMzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWU0PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTU8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuXG4gICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT1cInRleHRhcmVhXCIgaWQ9XCJ0ZXh0YXJlYVwiIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDp0ZXh0YXJlYVwiPlxuICAgICAgICAgICAgXG4gICAgICAgIDwvdGV4dGFyZWE+XG5cbiAgICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuXG5gO1xuXG5cbmRlc2NyaWJlKCdET00nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ1VwZGF0ZXIoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVzY3JpYmUoJ3Rlc3QgR2V0dGVyICYmIFNldHRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzZXRFdmVudFR5cGVzKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKVxuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgVXBkYXRlcihlbGVtZW50KS5zZXRFdmVudFR5cGVzKFsndG91Y2gnXSkpLnRvLmJlLmluc3RhbmNlb2YoVXBkYXRlcik7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgaXQoJ2dldFN1YmplY3QoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG4gICAgICAgICAgICAgICAgbGV0IHN1YmplY3QgPSB7YTogMX07XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBVcGRhdGVyKGVsZW1lbnQsIHN1YmplY3QpLmdldFN1YmplY3QoKS5hKS50by5iZS5lcXVhbCgxKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCd0ZXN0IGNvbnRyb2wgbWV0aG9kcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdlbmFibGVFdmVudFByb2Nlc3NpbmcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBVcGRhdGVyKGVsZW1lbnQpLmVuYWJsZUV2ZW50UHJvY2Vzc2luZygpKS50by5iZS5pbnN0YW5jZW9mKFVwZGF0ZXIpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoJ2Rpc2FibGVFdmVudFByb2Nlc3NpbmcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBVcGRhdGVyKGVsZW1lbnQpLmRpc2FibGVFdmVudFByb2Nlc3NpbmcoKSkudG8uYmUuaW5zdGFuY2VvZihVcGRhdGVyKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCd0ZXN0IEVycm9ycycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgRXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBVcGRhdGVyKCkpLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgdGhyb3cgdmFsdWUgaXMgd3JvbmcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG4gICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBVcGRhdGVyKGVsZW1lbnQsIG51bGwpKS50by50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIHRocm93IEVycm9yOiB0aGUgdmFsdWUgaXMgbm90IGl0ZXJhYmxlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG5cbiAgICAgICAgICAgICAgICBsZXQgdSA9IG5ldyBVcGRhdGVyKFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogW11cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG5cblxuICAgICAgICAgICAgICAgIHUucnVuKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKFwic2hvdWxkIG5ldmVyIGNhbGxlZCFcIikpO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChlKS5pcy5pbnN0YW5jZU9mKEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGUgKyBcIlwiKS50by5iZS5lcXVhbCgnRXJyb3I6IHRoZSB2YWx1ZSBpcyBub3QgaXRlcmFibGUnKTtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdVcGRhdGVyKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlc2NyaWJlKCduZXcgVXBkYXRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZG9jdW1lbnQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcblxuICAgICAgICAgICAgICAgIGxldCBkID0gbmV3IFVwZGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1VwZGF0ZXIoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVzY3JpYmUoJ1JlcGVhdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBidWlsZCA2IGxpIGVsZW1lbnRzJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IG5ldyBVcGRhdGVyKFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aTogJzAnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2k6ICcxJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpOiAnMid9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aTogJzMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2k6ICc0J30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpOiAnNSd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBkLnJ1bigpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGxpIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDphLmIuJyArIGkgKyAnIHwgdG9qc29uXCIgZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJjdXJyZW50LScgKyBpICsgJ1wiPntcImlcIjpcIicgKyBpICsgJ1wifTwvbGk+Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goXG4gICAgICAgICAgICAgICAgICAgIGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZSkpXG4gICAgICAgICAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnVXBkYXRlcigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sNDtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnRXZlbnRoYW5kbGluZycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IHVwZGF0ZXIsIGZvcm0xLCBwcm94eW9ic2VydmVyO1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcHJveHlvYnNlcnZlciA9IG5ldyBQcm94eU9ic2VydmVyKHt9KVxuICAgICAgICAgICAgICAgIHVwZGF0ZXIgPSBuZXcgVXBkYXRlcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybTEnKSwgcHJveHlvYnNlcnZlcik7XG4gICAgICAgICAgICAgICAgZm9ybTEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybTEnKTtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgLy8gaGVyZSBjbGljayBldmVudHMgYXJlIHRocm93biBvbiB0aGUgY2hlY2tib3ggYW5kIHRoZSBzZXR0aW5nIG9mIHRoZSB2YWx1ZSBpcyBvYnNlcnZlZCB2aWEgdGhlIHByb3h5b2JzZXJ2ZXIuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGhhbmRsZSBjaGVja2JveCBjbGljayBldmVudHMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblxuICAgICAgICAgICAgICAgIGxldCBzdWJqZWN0ID0gdXBkYXRlci5nZXRTdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHN1YmplY3QpLmlzLmVxdWFsKHByb3h5b2JzZXJ2ZXIuZ2V0U3ViamVjdCgpKTtcblxuICAgICAgICAgICAgICAgIGxldCBleHBlY3RlZCA9IFsnY2hlY2tlZCcsIHVuZGVmaW5lZCwgJ2NoZWNrZWQnXTtcbiAgICAgICAgICAgICAgICAvLyBoZXJlIHRoZSBub3RhdGlvbiB3aXRoIGZ1bmN0aW9uIGlzIGltcG9ydGFudCwgYmVjYXVzZSB0aGUgcG9pbnRlciBpcyBzZXQuXG4gICAgICAgICAgICAgICAgcHJveHlvYnNlcnZlci5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlID0gZXhwZWN0ZWQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT09IHVuZGVmaW5lZCAmJiBleHBlY3RlZC5sZW5ndGggPT09IDApIGRvbmUobmV3IEVycm9yKCd0byBtYW55IGNhbGxzJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldFN1YmplY3QoKVsnc3RhdGUnXSAhPT0gZSkgZG9uZShuZXcgRXJyb3IodGhpcy5nZXRTdWJqZWN0KClbJ3N0YXRlJ10gKyAnIHNob3VsZCAnICsgZSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwZWN0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0xLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPWNoZWNrYm94XScpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMClcblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm0xLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPWNoZWNrYm94XScpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfSwgMTApXG5cblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgcmFkaW8gY2xpY2sgZXZlbnRzIDEnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblxuICAgICAgICAgICAgICAgIGxldCBzdWJqZWN0ID0gdXBkYXRlci5nZXRTdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHN1YmplY3QpLmlzLmVxdWFsKHByb3h5b2JzZXJ2ZXIuZ2V0U3ViamVjdCgpKTtcblxuICAgICAgICAgICAgICAgIGxldCBleHBlY3RlZCA9IFsncjEnLCAncjInLCAncjEnXTtcbiAgICAgICAgICAgICAgICBsZXQgY2xpY2tUYXJnZXRzID0gWydyMicsICdyMSddXG4gICAgICAgICAgICAgICAgLy8gaGVyZSB0aGUgbm90YXRpb24gd2l0aCBmdW5jdGlvbiBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlIHRoaXMgcG9pbnRlciBpcyBzZXQuXG4gICAgICAgICAgICAgICAgcHJveHlvYnNlcnZlci5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlID0gZXhwZWN0ZWQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT09IHVuZGVmaW5lZCAmJiBleHBlY3RlZC5sZW5ndGggPT09IDApIGRvbmUobmV3IEVycm9yKCd0byBtYW55IGNhbGxzJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0gdGhpcy5nZXRTdWJqZWN0KClbJ3JhZGlvJ107XG4gICAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSBlKSBkb25lKG5ldyBFcnJvcih2ICsgJyBzaG91bGQgJyArIGUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY2xpY2tUYXJnZXRzLnNoaWZ0KCkpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMClcblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyMScpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfSwgMTApXG5cbiAgICAgICAgICAgICAgICAvLyBubyBoYW5kbGVyIC8vIGJpbmRcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3J4JykuY2xpY2soKTtcbiAgICAgICAgICAgICAgICB9LCAyMClcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgc2VsZWN0IGNsaWNrIGV2ZW50cyAyJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdDEnKTtcblxuICAgICAgICAgICAgICAgIHVwZGF0ZXIuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgc3ViamVjdCA9IHVwZGF0ZXIuZ2V0U3ViamVjdCgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzdWJqZWN0KS5pcy5lcXVhbChwcm94eW9ic2VydmVyLmdldFN1YmplY3QoKSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZXhwZWN0ZWQgPSBbJ3ZhbHVlMicsICd2YWx1ZTEnLCAndmFsdWUyJ107XG4gICAgICAgICAgICAgICAgLy8gaGVyZSB0aGUgbm90YXRpb24gd2l0aCBmdW5jdGlvbiBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlIHRoaXMgcG9pbnRlciBpcyBzZXQuXG4gICAgICAgICAgICAgICAgcHJveHlvYnNlcnZlci5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlID0gZXhwZWN0ZWQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT09IHVuZGVmaW5lZCAmJiBleHBlY3RlZC5sZW5ndGggPT09IDApIGRvbmUobmV3IEVycm9yKCd0byBtYW55IGNhbGxzJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0gdGhpcy5nZXRTdWJqZWN0KClbJ3NlbGVjdCddO1xuICAgICAgICAgICAgICAgICAgICBpZiAodiAhPT0gZSkgZG9uZShuZXcgRXJyb3IodiArICcgc2hvdWxkICcgKyBlKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9IHNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9PT0gMSA/IDAgOiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwKVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0IHZhbHVlIGFuZCBzaW11bGF0ZSBjbGljayBldmVudCBmb3IgYnViYmxlXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuY2xpY2soKTtcblxuICAgICAgICAgICAgICAgIH0sIDIwKVxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgdGV4dGFyZWEgZXZlbnRzJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCB0ZXh0YXJlYUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGV4dGFyZWEnKTtcblxuICAgICAgICAgICAgICAgIHVwZGF0ZXIuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgc3ViamVjdCA9IHVwZGF0ZXIuZ2V0U3ViamVjdCgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzdWJqZWN0KS5pcy5lcXVhbChwcm94eW9ic2VydmVyLmdldFN1YmplY3QoKSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZXhwZWN0ZWQgPSBbJ3Rlc3RYJywgJ2xvcmVtIGlwc3VtJywgJyddO1xuICAgICAgICAgICAgICAgIGxldCB0ZXN0VmFsdWVzID0gW1wibG9yZW0gaXBzdW1cIiwgXCJcIl07XG4gICAgICAgICAgICAgICAgLy8gaGVyZSB0aGUgbm90YXRpb24gd2l0aCBmdW5jdGlvbiBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlIHRoaXMgcG9pbnRlciBpcyBzZXQuXG4gICAgICAgICAgICAgICAgcHJveHlvYnNlcnZlci5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlID0gZXhwZWN0ZWQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT09IHVuZGVmaW5lZCAmJiBleHBlY3RlZC5sZW5ndGggPT09IDApIGRvbmUobmV3IEVycm9yKCd0byBtYW55IGNhbGxzJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0gdGhpcy5nZXRTdWJqZWN0KClbJ3RleHRhcmVhJ107XG4gICAgICAgICAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeSh2KSAhPT0gSlNPTi5zdHJpbmdpZnkoZSkpIGRvbmUobmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHYpICsgJyBzaG91bGQgJyArIEpTT04uc3RyaW5naWZ5KGUpKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRhcmVhRWxlbWVudC52YWx1ZSA9IHRlc3RWYWx1ZXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0YXJlYUVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwKVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAvLyBzZXQgdmFsdWUgYW5kIHNpbXVsYXRlIGNsaWNrIGV2ZW50IGZvciBidWJibGVcbiAgICAgICAgICAgICAgICAgICAgdGV4dGFyZWFFbGVtZW50LnZhbHVlID0gXCJ0ZXN0WFwiO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0YXJlYUVsZW1lbnQuY2xpY2soKTtcblxuICAgICAgICAgICAgICAgIH0sIDIwKVxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgbXVsdGlwbGUgc2VsZWN0IGV2ZW50cycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWxlY3QyJyk7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVyLmVuYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHN1YmplY3QgPSB1cGRhdGVyLmdldFN1YmplY3QoKTtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc3ViamVjdCkuaXMuZXF1YWwocHJveHlvYnNlcnZlci5nZXRTdWJqZWN0KCkpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGV4cGVjdGVkID0gW1xuICAgICAgICAgICAgICAgICAgICBbJ3ZhbHVlMSddLFxuICAgICAgICAgICAgICAgICAgICBbJ3ZhbHVlMicsICd2YWx1ZTMnLCAndmFsdWU0J10sXG4gICAgICAgICAgICAgICAgICAgIFsndmFsdWUxJywgJ3ZhbHVlNCddLFxuICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICBsZXQgdGVzdFNlbGVjdGlvbnMgPSBbXG4gICAgICAgICAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgICAgIFt0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgICAgIF1cblxuICAgICAgICAgICAgICAgIC8vIGhlcmUgdGhlIG5vdGF0aW9uIHdpdGggZnVuY3Rpb24gaXMgaW1wb3J0YW50LCBiZWNhdXNlIHRoZSB0aGlzIHBvaW50ZXIgaXMgc2V0LlxuICAgICAgICAgICAgICAgIHByb3h5b2JzZXJ2ZXIuYXR0YWNoT2JzZXJ2ZXIobmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgZSA9IGV4cGVjdGVkLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlID09PSB1bmRlZmluZWQgJiYgZXhwZWN0ZWQubGVuZ3RoID09PSAwKSBkb25lKG5ldyBFcnJvcigndG8gbWFueSBjYWxscycpKTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgdiA9IHRoaXMuZ2V0U3ViamVjdCgpWydtdWx0aXNlbGVjdCddO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeSh2KSAhPT0gSlNPTi5zdHJpbmdpZnkoZSkpIGRvbmUobmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHYpICsgJyBzaG91bGQgJyArIEpTT04uc3RyaW5naWZ5KGUpKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2ID0gdGVzdFNlbGVjdGlvbnMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm9wdGlvbnNbMF0uc2VsZWN0ZWQgPSB2WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1sxXS5zZWxlY3RlZCA9IHZbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5vcHRpb25zWzJdLnNlbGVjdGVkID0gdlsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm9wdGlvbnNbM10uc2VsZWN0ZWQgPSB2WzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwKVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm9wdGlvbnNbMF0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm9wdGlvbnNbMV0uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5vcHRpb25zWzJdLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1szXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50LmNsaWNrKCk7XG5cbiAgICAgICAgICAgICAgICB9LCAyMClcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG5cbiAgICBkZXNjcmliZSgnVXBkYXRlcigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnUmVwbGFjZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBhZGQgbG93ZXIgaGVsbG8gYW5kIEhFTExPeWVzIScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKVxuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBuZXcgVXBkYXRlcihcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogXCJIQUxMT1wiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZC5zZXRDYWxsYmFjaygnbXlmb3JtYXR0ZXInLCBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSArICd5ZXMhJ1xuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZC5ydW4oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgnb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDp0ZXh0IHwgdG9sb3dlclwiPmhhbGxvPC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDp0ZXh0IHwgY2FsbDpteWZvcm1hdHRlclwiPkhBTExPeWVzITwvZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInN0YXRpYzpoZWxsb1xcXFwgXCI+aGVsbG8gPC9kaXY+Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0sIDEwMClcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnVXBkYXRlcigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMztcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnUmVwbGFjZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCAnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcblxuICAgICAgICAgICAgICAgIGxldCBkID0gbmV3IFVwZGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpOiAnMCd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG5cblxuICAgICAgICAgICAgICAgIGQucnVuKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgnb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxkaXYgZGF0YS1tb25zdGVyLWluc2VydD1cIm15aWQgcGF0aDphLmJcIj4nKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPHAgZGF0YS1tb25zdGVyLWluc2VydD1cIm15aW5uZXJpZCBwYXRoOmEuYlwiIGRhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwibXlpZC0wXCI+Jyk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxzcGFuIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDphLmIuMCB8IHRvanNvblwiIGRhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwibXlpbm5lcmlkLTBcIj57XCJpXCI6XCIwXCJ9PC9zcGFuPicpO1xuXG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChcbiAgICAgICAgICAgICAgICAgICAgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihlKSlcbiAgICAgICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdVcGRhdGVyKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlc2NyaWJlKCdBdHRyaWJ1dGVzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNoYW5nZSBhdHRyaWJ1dGVzJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MycpXG5cbiAgICAgICAgICAgICAgICBsZXQgdGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXh0JylcbiAgICAgICAgICAgICAgICBleHBlY3QodGV4dC52YWx1ZSkudG8uYmUuZXF1YWwoXCJcIik7XG5cbiAgICAgICAgICAgICAgICBsZXQgcmFkaW8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmFkaW8nKVxuICAgICAgICAgICAgICAgIGV4cGVjdChyYWRpby5jaGVja2VkKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgICAgIGxldCBjaGVja2JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGVja2JveCcpXG4gICAgICAgICAgICAgICAgZXhwZWN0KGNoZWNrYm94LmNoZWNrZWQpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWxlY3QnKVxuICAgICAgICAgICAgICAgIGV4cGVjdChzZWxlY3Quc2VsZWN0ZWRJbmRleCkudG8uYmUuZXF1YWwoMCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgbXVsdGlzZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXVsdGlzZWxlY3QnKVxuICAgICAgICAgICAgICAgIGV4cGVjdChtdWx0aXNlbGVjdC5zZWxlY3RlZEluZGV4KS50by5iZS5lcXVhbCgtMSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgdGV4dGFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGV4dGFyZWEnKVxuICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXh0YXJlYS52YWx1ZSkudG8uYmUuZXF1YWwoXCJcIik7XG5cblxuICAgICAgICAgICAgICAgIGxldCBkID0gbmV3IFVwZGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOiBcImRpdi1jbGFzc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiaGVsbG9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBcImhlbGxvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaW86IFwidHJ1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRhcmVhOiBcInRlc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXNlbGVjdDogWyd2YWx1ZTMnLCAndmFsdWU0JywgJ290aGVyLXZhbHVlNSddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdDogXCJ2YWx1ZTJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveDogXCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG5cblxuICAgICAgICAgICAgICAgIGQucnVuKCkudGhlbigoKSA9PiB7XG5cblxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8ZGl2IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDphLmJcIiBjbGFzcz1cImRpdi1jbGFzc1wiPicpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8aW5wdXQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmEuY1wiIGlkPVwiaW5wdXQxXCIgdmFsdWU9XCJoZWxsb1wiPicpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8dGV4dGFyZWEgbmFtZT1cInRleHRhcmVhXCIgaWQ9XCJ0ZXh0YXJlYVwiIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDphLnRleHRhcmVhXCIgdmFsdWU9XCJ0ZXN0XCI+Jyk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxpbnB1dCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNoZWNrZWQgcGF0aDphLnJhZGlvXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cInJhZGlvXCIgdmFsdWU9XCJyMVwiIGlkPVwicmFkaW9cIiBjaGVja2VkPVwidHJ1ZVwiPicpO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXh0LnZhbHVlLCAndGV4dCBjb250cm9sJykudG8uYmUuZXF1YWwoZC5nZXRTdWJqZWN0KClbJ2EnXVsnYyddKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHJhZGlvLmNoZWNrZWQsICdyYWRpbyBjb250cm9sJykudG8uYmUuZXF1YWwodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXh0YXJlYS52YWx1ZSwgJ3RleHRhcmVhIGNvbnRyb2wnKS50by5iZS5lcXVhbChkLmdldFN1YmplY3QoKVsnYSddWyd0ZXh0YXJlYSddKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHNlbGVjdC5zZWxlY3RlZEluZGV4LCAnc2VsZWN0IGNvbnRyb2wnKS50by5iZS5lcXVhbCgxKTsgLy8gWzA9Pm90aGVyLXZhbHVlLCAxPT52YWx1ZTJdXG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IG11bHRpc2VsZWN0U2VsZWN0ZWRPcHRpb25zID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2luZGV4LCBvYmpdIG9mIE9iamVjdC5lbnRyaWVzKG11bHRpc2VsZWN0LnNlbGVjdGVkT3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpc2VsZWN0U2VsZWN0ZWRPcHRpb25zLnB1c2gob2JqLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KG11bHRpc2VsZWN0U2VsZWN0ZWRPcHRpb25zKSwgJ211bHRpc2VsZWN0IGNvbnRyb2wnKS50by5iZS5lcXVhbChKU09OLnN0cmluZ2lmeShkLmdldFN1YmplY3QoKVsnYSddWydtdWx0aXNlbGVjdCddKSk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChjaGVja2JveC5jaGVja2VkLCAnY2hlY2tib3ggY29udHJvbCcpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKFxuICAgICAgICAgICAgICAgICAgICBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKGUpKVxuICAgICAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdHZXQgQXR0cmlidXRlIFBpcGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBpZCwgbW9ja3M7XG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIGlkID0gbmV3IElEKCdtb25zdGVyJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgIDxkaXYgaWQ9XCJgICsgaWQgKyBgXCJcbiAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDphIHwgaWY6dmFsdWU6XFxcXCBcIj48L2Rpdj5gXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBpbmNsdWRlIHNwYWNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQudG9TdHJpbmcoKSlcblxuICAgICAgICAgICAgY29uc3QgcGlwZSA9IGRpdi5nZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1yZXBsYWNlJyk7XG4gICAgICAgICAgICBleHBlY3QocGlwZS5sZW5ndGgpLnRvLmJlLmVxdWFsKDIwKTtcblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ21hbnVlbCB1cGRhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBpZCwgbW9ja3M7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgaWQgPSBuZXcgSUQoJ21vbnN0ZXInKS50b1N0cmluZygpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYDxpbnB1dCBpZD1cImAgKyBpZCArIGBcImRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDpteXZhbHVlXCI+YFxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgZ2V0IHZhbHVlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkudmFsdWUgPSBcImhlbGxvXCI7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVyID0gbmV3IFVwZGF0ZXIobW9ja3MpO1xuICAgICAgICAgICAgY29uc3Qgc3ViamVjdCA9IHVwZGF0ZXIuZ2V0U3ViamVjdCgpO1xuXG4gICAgICAgICAgICBleHBlY3Qoc3ViamVjdCkudG8ubm90LmhhdmUucHJvcGVydHkoJ215dmFsdWUnKTtcbiAgICAgICAgICAgIHVwZGF0ZXIucmV0cmlldmUoKTtcbiAgICAgICAgICAgIGV4cGVjdChzdWJqZWN0KS50by5oYXZlLnByb3BlcnR5KCdteXZhbHVlJyk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgLyoqXG4gICAgICogaHR0cHM6Ly9naXRsYWIuc2NodWthaS5jb20vb3NzL2xpYnJhcmllcy9qYXZhc2NyaXB0L21vbnN0ZXIvLS9pc3N1ZXMvMTEyXG4gICAgICovXG4gICAgZGVzY3JpYmUoJ1VwZGF0ZXIoKSAyMDIyMDEwNycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgLy8gbGFuZ3VhZ2U9SFRNTFxuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpjb250ZW50XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgYDtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnQnVnZml4ICMxMTInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgYWRkICcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNvbnRhaW5lckVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJyk7XG4gICAgICAgICAgICAgICAgbGV0IG5ld0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTCA9ICd5ZWFoISA8Yj5UZXN0PC9iPiEnO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVySFRNTCA9IGNvbnRhaW5lckVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0hUTUwgPSBuZXdFbGVtZW50LmlubmVySFRNTDtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gbmV3IFVwZGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG5ld0VsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGQucnVuKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChjb250YWluZXJFbGVtZW50KS5jb250YWluLmh0bWwoJzxkaXY+eWVhaCEgPGI+VGVzdDwvYj4hPC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSwgMTAwKVxuXG4gICAgICAgICAgICAgICAgLy8gZC5zZXRDYWxsYmFjaygnbXlmb3JtYXR0ZXInLCBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gYSArICd5ZXMhJ1xuICAgICAgICAgICAgICAgIC8vIH0pXG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgZC5ydW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgnb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDp0ZXh0IHwgdG9sb3dlclwiPmhhbGxvPC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDp0ZXh0IHwgY2FsbDpteWZvcm1hdHRlclwiPkhBTExPeWVzITwvZGl2PicpO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInN0YXRpYzpoZWxsb1xcXFwgXCI+aGVsbG8gPC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIHJldHVybiBkb25lKCk7XG4gICAgICAgICAgICAgICAgLy8gICAgIH0pLmNhdGNoKFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgZSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZSkpXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC8vIH0sIDEwMClcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmltcG9ydCB7TG9jYWxlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHtnZXRMb2NhbGVPZkRvY3VtZW50fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9sb2NhbGUubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmRlc2NyaWJlKCdBdHRyaWJ1dGVzJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXRMb2NhbGVPZkRvY3VtZW50JywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW1wiZGVcIl0sXG4gICAgICAgICAgICBbXCJzbC1JVC1uZWRpc1wiXSxcbiAgICAgICAgICAgIFtcImVuLUdCXCJdLFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgICAgIGl0KCdyZXR1cm4gbGFuZ3VhZ2UgJyArIGEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdodG1sJyk7XG4gICAgICAgICAgICAgICAgbGV0IG5vZGUgPSBodG1sLml0ZW0oMCk7XG5cbiAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnbGFuZycsIGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChnZXRMb2NhbGVPZkRvY3VtZW50KCkudG9TdHJpbmcoKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbiAgICBpdCgncmV0dXJuIGxhbmd1YWdlIGVuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgaHRtbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdodG1sJyk7XG4gICAgICAgIGxldCBub2RlID0gaHRtbC5pdGVtKDApO1xuICAgICAgICBsZXQgbGFuZz0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2xhbmcnKTtcblxuICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZSgnbGFuZycpO1xuICAgICAgICBjb25zdCBsb2NhbGUgPSBnZXRMb2NhbGVPZkRvY3VtZW50KCk7XG4gICAgICAgIGV4cGVjdChsb2NhbGUpLnRvLmJlLmluc3RhbmNlT2YoTG9jYWxlKTtcbiAgICAgICAgZXhwZWN0KGxvY2FsZS5sb2NhbGVTdHJpbmcpLnRvLmJlLmVxdWFsKG5hdmlnYXRvci5sYW5ndWFnZSk7XG5cbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2xhbmcnLCBsYW5nKTtcbiAgICAgICAgXG4gICAgfSlcblxuXG59KSIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7Z2V0RG9jdW1lbnRGcmFnbWVudEZyb21TdHJpbmd9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtUaGVtZSwgZ2V0RG9jdW1lbnRUaGVtZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdGhlbWUubWpzXCI7XG5cbmRlc2NyaWJlKCdUaGVtZScsIGZ1bmN0aW9uICgpIHtcbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbmV3IFRoZW1lKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIFRoZW1lIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgVGhlbWUoJ215LXRoZW1lJykpLmlzLmEuaW5zdGFuY2VPZihUaGVtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBUaGVtZS1OYW1lJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBUaGVtZSgnbXktdGhlbWUnKS5nZXROYW1lKCkpLmlzLmVxdWFsKCdteS10aGVtZScpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBFcnJvciBiZWNhdXNlIGVtcHR5IGFyZ3VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBUaGVtZSgpKS50by50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHRocm93IEVycm9yIGJlY2F1c2Ugbm8gc3RyaW5nIGFyZ3VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBUaGVtZSgyKSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXREb2N1bWVudFRoZW1lKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIFRoZW1lIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChnZXREb2N1bWVudFRoZW1lKCkpLmlzLmEuaW5zdGFuY2VPZihUaGVtZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIERlZmF1bHQgVGhlbWUgbmFtZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChnZXREb2N1bWVudFRoZW1lKCkuZ2V0TmFtZSgpKS5pcy5lcXVhbCgnbW9uc3RlcicpO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldERvY3VtZW50VGhlbWUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci10aGVtZS1uYW1lJywgJ3Rlc3R0aGVtZScpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJykucmVtb3ZlQXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItdGhlbWUtbmFtZScpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRlc3R0aGVtZSBUaGVtZSBuYW1lJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGdldERvY3VtZW50VGhlbWUoKS5nZXROYW1lKCkpLmlzLmVxdWFsKCd0ZXN0dGhlbWUnKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcbn0pO1xuXG5cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBjaGFpIGZyb20gXCJjaGFpXCJcbmltcG9ydCB7aW50ZXJuYWxTeW1ib2x9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtBVFRSSUJVVEVfT1BUSU9OU30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtnZXREb2N1bWVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7UHJveHlPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHthZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXBkYXRlci5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8aW5wdXQgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOmFcIiBpZD1cInRlc3QyXCIgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmFcIj5cbmA7XG5cbi8vIGRlZmluZWQgaW4gY29uc3RhbnRzLm1qc1xuY29uc3QgdXBkYXRlclN5bWJvbEtleSA9IFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vY3VzdG9tLWVsZW1lbnRAQG9wdGlvbnMtdXBkYXRlci1saW5rXCJcbmNvbnN0IHVwZGF0ZXJTeW1ib2xTeW1ib2wgPSBTeW1ib2wuZm9yKHVwZGF0ZXJTeW1ib2xLZXkpO1xuXG5cblxuZGVzY3JpYmUoJ0RPTScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBDdXN0b21FbGVtZW50LCByZWdpc3RlckN1c3RvbUVsZW1lbnQsIFRlc3RDb21wb25lbnQsIGRvY3VtZW50LCBUZXN0Q29tcG9uZW50Mixhc3NpZ25VcGRhdGVyVG9FbGVtZW50O1xuXG5cbiAgICBkZXNjcmliZShcImFzc2lnblVwZGF0ZXJUb0VsZW1lbnRcIiwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21FbGVtZW50ID0gbVsnQ3VzdG9tRWxlbWVudCddO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduVXBkYXRlclRvRWxlbWVudD0gZnVuY3Rpb24gKGVsZW1lbnRzLCBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQuY2FsbCh0aGlzLCBlbGVtZW50cywgdXBkYXRlclN5bWJvbFN5bWJvbCwgb2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICAvKipcbiAgICAgICAgICogdGhpcyB0ZXN0IHRyeSB0byBzaW11bGF0ZSB0aGUgYnVnIHRoYXQgd2FzIGZvdW5kIGluIHRoZSBhc3NpZ25VcGRhdGVyVG9FbGVtZW50IGZ1bmN0aW9uLlxuICAgICAgICAgKiBUaGUgYnVnIHdhcyB0aGF0IHRoZSB1cGRhdGVyIHdhcyBub3QgYXNzaWduZWQgdG8gdGhlIGVsZW1lbnQgd2hlbiB0aGUgZWxlbWVudCB3YXMgY3JlYXRlZC5cbiAgICAgICAgICogXG4gICAgICAgICAqIHVuZm9ydHVuYXRlbHksIHRoaXMgdGVzdCBkb2VzIG5vdCByZXByb2R1Y2UgdGhlIGJ1Zy5cbiAgICAgICAgICovXG4gICAgICAgIGl0KFwic2hvdWxkIGFzc2lnbiBhbiB1cGRhdGVyIHRvIGFuIGVsZW1lbnRcIiwgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1vY2tzXCIpLmlubmVySFRNTCkudG8uZXF1YWwoaHRtbDIpO1xuXG4gICAgICAgICAgICBjb25zdCBhID0ge2E6IDF9O1xuICAgICAgICAgICAgY29uc3QgYiA9IHtiOiAyfTtcblxuICAgICAgICAgICAgY29uc3QgYXAgPSBuZXcgUHJveHlPYnNlcnZlcihhKTtcbiAgICAgICAgICAgIGNvbnN0IGJwID0gbmV3IFByb3h5T2JzZXJ2ZXIoYik7XG5cbiAgICAgICAgICAgIGNvbnN0IHggPSBhcC5nZXRTdWJqZWN0KClcbiAgICAgICAgICAgIGNvbnN0IHkgPSBicC5nZXRTdWJqZWN0KClcblxuICAgICAgICAgICAgY29uc3Qgc2V0ID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgc2V0LmFkZChlbGVtZW50KTtcblxuICAgICAgICAgICAgYXNzaWduVXBkYXRlclRvRWxlbWVudC5jYWxsKGVsZW1lbnQsIHNldCwgYXApO1xuICAgICAgICAgICAgYXNzaWduVXBkYXRlclRvRWxlbWVudC5jYWxsKGVsZW1lbnQsIHNldCwgYnApO1xuXG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoeCkpLnRvLmVxdWFsKCd7XCJhXCI6MX0nKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeSh5KSkudG8uZXF1YWwoJ3tcImJcIjoyfScpO1xuXG4gICAgICAgICAgICBjb25zdCBzeSA9IHVwZGF0ZXJTeW1ib2xTeW1ib2w7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCB2ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItb2JqZWN0bGlua1wiKTtcbiAgICAgICAgICAgIGV4cGVjdCh2KS50by5lcXVhbCgnU3ltYm9sKCcrdXBkYXRlclN5bWJvbEtleSsnKScpO1xuXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVyID0gZWxlbWVudFtzeV07XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiB1cGRhdGVyKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB1IG9mIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgdS5ydW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHUuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhwZWN0KHVwZGF0ZXIpLnRvLmJlLmFuLmluc3RhbmNlb2YoU2V0KTtcbiAgICAgICAgICAgIGV4cGVjdCh1cGRhdGVyKS50by5iZS5hKFwiU2V0XCIpO1xuXG4gICAgICAgICAgICB4LmEgPSAzO1xuICAgICAgICAgICAgYnAuZ2V0U3ViamVjdCgpLmIgPSA0O1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrSFRNTCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibW9ja3NcIik7XG5cbiAgICAgICAgICAgICAgICAvLyBodG1sIGV4cGV4dGVkOlxuICAgICAgICAgICAgICAgIC8vIDxpbnB1dCBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6YVwiIGlkPVwidGVzdDJcIiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInZhbHVlIHBhdGg6YVwiIGRhdGEtbW9uc3Rlci1vYmplY3RsaW5rPVwiU3ltYm9sKEBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAb2JqZWN0LXVwZGF0ZXItbGluaylcIiB2YWx1ZT1cIjNcIj5cblxuICAgICAgICAgICAgICAgIGV4cGVjdChtb2NrSFRNTC5xdWVyeVNlbGVjdG9yKFwiI3Rlc3QyXCIpKS50by5oYXZlLnZhbHVlKCczJylcbiAgICAgICAgICAgICAgICBleHBlY3QobW9ja0hUTUwucXVlcnlTZWxlY3RvcihcIiN0ZXN0MlwiKSkudG8uaGF2ZS5hdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vYmplY3RsaW5rJywgJ1N5bWJvbCgnK3VwZGF0ZXJTeW1ib2xLZXkrJyknKVxuICAgICAgICAgICAgICAgIC8vZXhwZWN0KG1vY2tIVE1MKS50by5oYXZlLmh0bWwocmVzdWx0SFRNTCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudC52YWx1ZSkudG8uZXF1YWwoXCIzXCIpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGFwLmdldFJlYWxTdWJqZWN0KCkpKS50by5lcXVhbCgne1wiYVwiOjN9Jyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGJwLmdldFJlYWxTdWJqZWN0KCkpKS50by5lcXVhbCgne1wiYlwiOjR9Jyk7XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9LCAxMClcblxuICAgICAgICB9KVxuXG4gICAgfSlcblxuXG4gICAgZGVzY3JpYmUoJ0N1c3RvbUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiKS50aGVuKChtKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUVsZW1lbnQgPSBtWydDdXN0b21FbGVtZW50J107XG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQgPSBtWydyZWdpc3RlckN1c3RvbUVsZW1lbnQnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RDb21wb25lbnQgPSBjbGFzcyBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm1vbnN0ZXItdGVzdGNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUZXN0Q29tcG9uZW50KVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBUZXN0Q29tcG9uZW50MiA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibW9uc3Rlci10ZXN0Y2xhc3MyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgZGVmYXVsdHMoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZW1vdGVzdDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbjogJzxoMT48L2gxPjxhcnRpY2xlPjxwPnRlc3Q8L3A+PGRpdiBpZD1cImNvbnRhaW5lclwiPjwvZGl2PjwvYXJ0aWNsZT4nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudDIpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnQ3VzdG9tRWxlbWVudCgpIHdpdGggQ29uZmlnJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZWFkIGNvbmZpZyBmcm9tIHRhZycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8c2NyaXB0IGlkPVwiY29uZmlnMVwiIHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCI+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImRlbW90ZXN0XCI6MTQyNVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3NjcmlwdD5cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8bW9uc3Rlci10ZXN0Y2xhc3MyIGlkPVwidGhpc2lzYXRlc3RcIiBkYXRhLW1vbnN0ZXItb3B0aW9ucy1zZWxlY3Rvcj1cIiNjb25maWcxXCI+XG4gICAgICAgICAgICAgICAgPC9tb25zdGVyLXRlc3RjbGFzczI+XG4gICAgICAgICAgICAgICAgYDtcblxuICAgICAgICAgICAgICAgIGxldCBtb25zdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RoaXNpc2F0ZXN0Jyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG1vbnN0ZXIuZ2V0T3B0aW9uKCdkZW1vdGVzdCcpKS5pcy5lcWwoMTQyNSk7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gY3VzdG9tLWVsZW1lbnQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gbmV3IFRlc3RDb21wb25lbnQoKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodHlwZW9mIGQpLmlzLmVxdWFsKCdvYmplY3QnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnY29ubmVjdCBlbXB0eSBlbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ2RvY3VtZW50IHNob3VsZCBjb250YWluIG1vbnN0ZXItdGVzdGNsYXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZXN0Y2xhc3MnKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKS5hcHBlbmRDaGlsZChkKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21vbnN0ZXItdGVzdGNsYXNzJykubGVuZ3RoKS5pcy5lcXVhbCgxKTtcbiAgICAgICAgICAgICAgICAvLyBubyBkYXRhLW1vbnN0ZXItb2JqZWN0bGluaz1cIlN5bWJvbChtb25zdGVyVXBkYXRlcilcIiBiZWNhdXNlIGl0IGhhcyBub3RoaW5nIHRvIHVwZGF0ZVxuICAgICAgICAgICAgICAgIC8vIGJ1dCBkYXRhLW1vbnN0ZXItZXJyb3I9XCJFcnJvcjogaHRtbCBpcyBub3Qgc2V0LlwiXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXRlc3RjbGFzcyBkYXRhLW1vbnN0ZXItZXJyb3I9XCJFcnJvcjogaHRtbCBpcyBub3Qgc2V0LlwiPjwvbW9uc3Rlci10ZXN0Y2xhc3M+Jyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2Nvbm5lY3QgZWxlbWVudCB3aXRoIGh0bWwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnZG9jdW1lbnQgc2hvdWxkIGNvbnRhaW4gbW9uc3Rlci10ZXN0Y2xhc3MyJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdGVzdGNsYXNzMicpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICAgICAgLy8gaW5zZXJ0IERPTSBydW4gaW4gZXh0cmEgcHJvY2VzcyB2aWEgc2V0VGltZW91dCFcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbW9uc3Rlci10ZXN0Y2xhc3MyJykubGVuZ3RoKS5pcy5lcXVhbCgxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbW9uc3Rlci10ZXN0Y2xhc3MyJykuaXRlbSgwKS5zaGFkb3dSb290LmlubmVySFRNTCkuaXMuZXF1YWwoJzxoMT48L2gxPjxhcnRpY2xlPjxwPnRlc3Q8L3A+PGRpdiBpZD1cImNvbnRhaW5lclwiPjwvZGl2PjwvYXJ0aWNsZT4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci10ZXN0Y2xhc3MyIGRhdGEtbW9uc3Rlci1vYmplY3RsaW5rPVwiU3ltYm9sKCcrdXBkYXRlclN5bWJvbEtleSsnKVwiPjwvbW9uc3Rlci10ZXN0Y2xhc3MyPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSwgMTApO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ09wdGlvbnMgY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnZGVsZWdhdGVzRm9jdXMgc2hvdWxkIGNoYW5nZSBmcm9tIHRydWUgdG8gZmFsc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlc3RjbGFzcycpXG5cbiAgICAgICAgICAgICAgICBjb25zdCBvID0gZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0ucmVhbFN1YmplY3Q7XG4gICAgICAgICAgICAgICAgZXhwZWN0KE9iamVjdC5pcyhlbGVtZW50W2ludGVybmFsU3ltYm9sXS5yZWFsU3ViamVjdCwgbykpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0ucmVhbFN1YmplY3Qub3B0aW9ucy5kZWxlZ2F0ZXNGb2N1cykudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5vcHRpb25zLmRlbGVnYXRlc0ZvY3VzKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldE9wdGlvbignZGVsZWdhdGVzRm9jdXMnKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoT2JqZWN0LmlzKGVsZW1lbnRbaW50ZXJuYWxTeW1ib2xdLnJlYWxTdWJqZWN0LCBvKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9PUFRJT05TLCBKU09OLnN0cmluZ2lmeSh7ZGVsZWdhdGVzRm9jdXM6IGZhbHNlfSkpO1xuICAgICAgICAgICAgICAgIC8vIGV4cGVjdChPYmplY3QuaXMoZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0ucmVhbFN1YmplY3QsIG8pKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gZXhwZWN0KGVsZW1lbnQuZ2V0T3B0aW9uKCdkZWxlZ2F0ZXNGb2N1cycpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBleHBlY3QoZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0ucmVhbFN1YmplY3Qub3B0aW9ucy5kZWxlZ2F0ZXNGb2N1cykudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gZXhwZWN0KE9iamVjdC5pcyhlbGVtZW50W2ludGVybmFsU3ltYm9sXS5yZWFsU3ViamVjdCwgbykpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdzZXRPcHRpb25zKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWydzaGFkb3dNb2RlJywgJ3gxJ10sXG4gICAgICAgICAgICAgICAgWyd0ZW1wbGF0ZXMubWFpbicsICd4MiddLCAvLyBpcyBleHBsaWNpdGx5IHNldCB0byB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBbJ2RlbGVnYXRlc0ZvY3VzJywgJ3g0J10sXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuXG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBuZXdWYWx1ZSA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICAgICAgbGV0IHRleHQgPSBrZXkgKyAnIHNob3VsZCByZXR1cm4gJyArIG5ld1ZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSBrZXkgKyAnIHdhcyBub3Qgc2V0LCB0aGVyZWZvcmUgZGVmYXVsdCAnICsgbmV3VmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICBpdCh0ZXh0LCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlc3RjbGFzcycpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZC5nZXRPcHRpb24oa2V5KSkudG8uYmUubm90LmVxdWFsKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHggPSBkLnNldE9wdGlvbihrZXksIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGQuZ2V0T3B0aW9uKGtleSkpLnRvLmJlLmVxdWFsKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdnZXRPcHRpb25zKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ3NoYWRvd01vZGUnLCAnb3BlbiddLFxuICAgICAgICAgICAgICAgIFsndGVtcGxhdGVzLm1haW4nLCB1bmRlZmluZWRdLCAvLyBpcyBleHBsaWNpdGx5IHNldCB0byB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBbJ2RlbGVnYXRlc0ZvY3VzJywgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgWyd4LnkueicsIHRydWUsIHRydWVdLCAvLyB4LnkueiBpc250IHNldCwgZGVmYXVsdFZhbHVlIGlzIHVzZWRcbiAgICAgICAgICAgICAgICBbJ3gnLCB0cnVlLCB0cnVlXSAvLyB4IGlzbnQgc2V0LCBkZWZhdWx0VmFsdWUgaXMgdXNlZFxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cblxuICAgICAgICAgICAgICAgIGxldCBrZXkgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgZGVmYXVsdFZhbHVlID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgICAgICBsZXQgdGV4dCA9IGtleSArICcgc2hvdWxkIHJldHVybiAnICsgdmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSBrZXkgKyAnIHdhcyBub3Qgc2V0LCB0aGVyZWZvcmUgZGVmYXVsdCAnICsgZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgaXQodGV4dCwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZXN0Y2xhc3MnKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHggPSBkLmdldE9wdGlvbihrZXksIGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh4KS50by5iZS5lcXVhbCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy8xMTNcbiAgICAgICAgICovXG4gICAgICAgIGRlc2NyaWJlKCdBc3NpZ24gQ1NTU3R5bGUgYXMgQXJyYXkgd2l0aCB3cm9uZyB0eXBlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCBodG1sVEFHID0gJ21vbnN0ZXItdGVzdGNsYXNzLXgxJztcblxuICAgICAgICAgICAgbGV0IG1vY2tzLCBUZXN0Q29tcG9uZW50WDE7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cblxuICAgICAgICAgICAgICAgIFRlc3RDb21wb25lbnRYMSA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbFRBR1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3RydWVdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGdldCBkZWZhdWx0cygpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW46ICc8aDE+dGVzdDwvaDE+J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudFgxKVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KGh0bWxUQUcgKyBcIiBzaG91bGQgdGhyb3cgRXhjZXB0aW9uXCIsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGh0bWxUQUcpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgICAgIGRpdi5hcHBlbmQoZCk7XG5cblxuICAgICAgICAgICAgICAgIGV4cGVjdChkaXYpLmNvbnRhaW4uaHRtbCgnZGF0YS1tb25zdGVyLWVycm9yPVwiVHlwZUVycm9yOiB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgQ1NTU3R5bGVTaGVldFwiJyk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSlcblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy8xMTNcbiAgICAgICAgICovXG4gICAgICAgIGRlc2NyaWJlKCdBc3NpZ24gQ1NTU3R5bGUgYXMgQXJyYXkgYW5kIENTU1N0eWxlc2hlZXQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGh0bWxUQUcgPSAnbW9uc3Rlci10ZXN0Y2xhc3MteDExMy0yJztcblxuICAgICAgICAgICAgbGV0IG1vY2tzLCBUZXN0Q29tcG9uZW50WDExM1gyO1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICAgICAgVGVzdENvbXBvbmVudFgxMTNYMiA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbFRBR1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGdldCBkZWZhdWx0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlczoge21haW46ICc8aDE+dGVzdDwvaDE+J30sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IChuZXcgQ1NTU3R5bGVTaGVldCgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcy5pbnNlcnRSdWxlKCdhIHsgY29sb3IgOiByZWR9Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbc107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudFgxMTNYMilcblxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdChodG1sVEFHICsgXCIgc2hvdWxkIHRocm93IEV4Y2VwdGlvbiAyXCIsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGh0bWxUQUcpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgICAgIGRpdi5hcHBlbmQoZCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5zaGFkb3dSb290LmlubmVySFRNTCkuaXMuZXEoJzxoMT50ZXN0PC9oMT4nKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzExM1xuICAgICAgICAgKi9cbiAgICAgICAgZGVzY3JpYmUoJ0Fzc2lnbiBDU1NTdHlsZSBhcyBBcnJheSBhbmQgQ1NTIGFzIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgaHRtbFRBRyA9ICdtb25zdGVyLXRlc3RjbGFzcy14MTEzLTIxJztcblxuICAgICAgICAgICAgbGV0IG1vY2tzLCBUZXN0Q29tcG9uZW50WDExM1gyMjtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICAgICAgICAgIFRlc3RDb21wb25lbnRYMTEzWDIyID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sVEFHXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZ2V0IGRlZmF1bHRzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7bWFpbjogJzxoMT50ZXN0PC9oMT4nfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdhIHsgY29sb3I6cmVkIH0nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50KFRlc3RDb21wb25lbnRYMTEzWDIyKVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KGh0bWxUQUcgKyBcIiBzaG91bGQgZXEgPHN0eWxlPmEgeyBjb2xvcjpyZWQgfTwvc3R5bGU+PGgxPnRlc3Q8L2gxPlwiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChodG1sVEFHKTtcblxuICAgICAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBkaXYuYXBwZW5kKGQpO1xuXG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5zaGFkb3dSb290LmlubmVySFRNTCkuaXMuZXEoJzxzdHlsZT5hIHsgY29sb3I6cmVkIH08L3N0eWxlPjxoMT50ZXN0PC9oMT4nKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy8xMTNcbiAgICAgICAgICovXG4gICAgICAgIGRlc2NyaWJlKCdBc3NpZ24gQ1NTU3R5bGUgYXMgQXJyYXkgYW5kIENTUyBhcyBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGh0bWxUQUcgPSAnbW9uc3Rlci10ZXN0Y2xhc3MteDExMy0yMic7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcywgVGVzdENvbXBvbmVudFgxMTNYMjIzO1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICAgICAgVGVzdENvbXBvbmVudFgxMTNYMjIzID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sVEFHXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZ2V0IGRlZmF1bHRzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7bWFpbjogJzxoMT50ZXN0PC9oMT4nfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsnYSB7IGNvbG9yOnJlZCB9J107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudFgxMTNYMjIzKVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KGh0bWxUQUcgKyBcIiBzaG91bGQgZXEgPHN0eWxlPmEgeyBjb2xvcjpyZWQgfTwvc3R5bGU+PGgxPnRlc3Q8L2gxPlwiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChodG1sVEFHKTtcblxuICAgICAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBkaXYuYXBwZW5kKGQpO1xuXG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5zaGFkb3dSb290LmlubmVySFRNTCkuaXMuZXEoJzxzdHlsZT5hIHsgY29sb3I6cmVkIH08L3N0eWxlPjxoMT50ZXN0PC9oMT4nKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2hhc05vZGUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzO1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdChcImhhc05vZGUgbW9uc3Rlci10ZXN0Y2xhc3Mgc2hvdWxkIHJldHVybiAuLi5cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZXN0Y2xhc3MnKTtcblxuICAgICAgICAgICAgICAgIGxldCBwMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcbiAgICAgICAgICAgICAgICBsZXQgdDEgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBwMS5hcHBlbmRDaGlsZCh0MSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGxldCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ3Rlc3QnKTtcbiAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKHAxKTtcbiAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKHQpO1xuICAgICAgICAgICAgICAgIGQuYXBwZW5kQ2hpbGQocCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICAgICAgZGl2LmFwcGVuZChkKTtcblxuXG4gICAgICAgICAgICAgICAgbGV0IG4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZShuMSkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUodCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZShwKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKHAxKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKHQxKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoXCJoYXNOb2RlIG1vbnN0ZXItdGVzdGNsYXNzMiBzaG91bGQgcmV0dXJuIC4uLlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlc3RjbGFzczInKTtcblxuICAgICAgICAgICAgICAgIGxldCBwMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcbiAgICAgICAgICAgICAgICBsZXQgdDEgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBwMS5hcHBlbmRDaGlsZCh0MSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGxldCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ3Rlc3QnKTtcbiAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKHAxKTtcbiAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKHQpO1xuXG5cbiAgICAgICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICAgICAgZGl2LmFwcGVuZChkKTtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZC5zaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKTtcblxuICAgICAgICAgICAgICAgIGQuc2hhZG93Um9vdC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuYXBwZW5kQ2hpbGQocCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKG4xKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZSh0KSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKHApKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUocDEpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUodDEpKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSlcblxuICAgIH0pO1xufSkiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIjtcbmltcG9ydCB7Rm9jdXNNYW5hZ2VyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9mb2N1c21hbmFnZXIubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnRm9jdXNNYW5hZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKTtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykuaW5uZXJIVE1MID0gJydcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIEZvY3VzTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgRm9jdXNNYW5hZ2VyKCkpLmlzLmluc3RhbmNlb2YoRm9jdXNNYW5hZ2VyKTtcbiAgICAgICAgfSlcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnc3RvcmUgYW5kIHJlc3RvcmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBtYW5hZ2VyO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbWFuYWdlciA9IG5ldyBGb2N1c01hbmFnZXIoKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpLmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInRlc3RpdFwiIGlkPVwidHgxXCI+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJ0ZXN0aXRcIiBpZD1cInR4MlwiPlxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwidGVzdGl0XCIgaWQ9XCJ0eDNcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInRlc3RpdFwiIGlkPVwidHg0XCI+XG4gICAgICAgICAgICA8cCBjbGFzcz1cInRlc3RpdFwiIHRhYmluZGV4PVwiMlwiIGlkPVwidHg1XCI+aGVsbG88L3A+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJ0ZXN0aXRcIiBpZD1cInR4NlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRlc3RpdFwiIGlkPVwidHg3XCI+PC9idXR0b24+XG4gICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50ZXN0aXQnKSkpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9ICgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjAwLFxuICAgICAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMjAwLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3J1biBpc3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIG1hbmFnZXIuZm9jdXMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3R4MScpKTtcbiAgICAgICAgICAgIG1hbmFnZXIuc3RvcmVGb2N1cygpO1xuXG4gICAgICAgICAgICBjb25zdCBlMSA9IG1hbmFnZXIuZ2V0QWN0aXZlKCk7XG4gICAgICAgICAgICBleHBlY3QoZTEuZ2V0QXR0cmlidXRlKCdpZCcpLCAnZXJyb3IxJykudG8uYmUuZXF1YWwoJ3R4MScpO1xuXG4gICAgICAgICAgICBtYW5hZ2VyLmZvY3VzKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0eDInKSk7XG5cbiAgICAgICAgICAgIG1hbmFnZXIuc3RvcmVGb2N1cygpO1xuICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuZ2V0QWN0aXZlKCkuZ2V0QXR0cmlidXRlKCdpZCcpLCAnZXJyb3IyJykudG8uYmUuZXF1YWwoJ3R4MicpO1xuICAgICAgICAgICAgbWFuYWdlci5mb2N1c05leHQoKTtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmdldEFjdGl2ZSgpLmdldEF0dHJpYnV0ZSgnaWQnKSwgJ2Vycm9yMycpLnRvLmJlLmVxdWFsKCd0eDQnKTtcbiAgICAgICAgICAgIG1hbmFnZXIuZm9jdXNOZXh0KCk7XG4gICAgICAgICAgICBleHBlY3QobWFuYWdlci5nZXRBY3RpdmUoKS5nZXRBdHRyaWJ1dGUoJ2lkJyksICdlcnJvcjQnKS50by5iZS5lcXVhbCgndHg1Jyk7XG4gICAgICAgICAgICBtYW5hZ2VyLnJlc3RvcmVGb2N1cygpO1xuICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuZ2V0QWN0aXZlKCkuZ2V0QXR0cmlidXRlKCdpZCcpLCAnZXJyb3I1JykudG8uYmUuZXF1YWwoJ3R4MicpO1xuICAgICAgICAgICAgbWFuYWdlci5yZXN0b3JlRm9jdXMoKTtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmdldEFjdGl2ZSgpLmdldEF0dHJpYnV0ZSgnaWQnKSwgJ2Vycm9yNicpLnRvLmJlLmVxdWFsKCd0eDEnKTtcbiAgICAgICAgICAgIG1hbmFnZXIucmVzdG9yZUZvY3VzKCk7XG4gICAgICAgICAgICBleHBlY3QobWFuYWdlci5nZXRBY3RpdmUoKS5nZXRBdHRyaWJ1dGUoJ2lkJyksICdlcnJvcjcnKS50by5iZS5lcXVhbCgndHgxJyk7XG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgncmV0dXJudHlwZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgZm9jdXNtYW5hZ2VyO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgZm9jdXNtYW5hZ2VyID0gbmV3IEZvY3VzTWFuYWdlcigpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdjaGVjayByZXR1cm5zJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBleHBlY3QoZm9jdXNtYW5hZ2VyLmdldEZvY3VzYWJsZSgpKS5pcy5pbnN0YW5jZW9mKEFycmF5KTtcbiAgICAgICAgICAgIGV4cGVjdChmb2N1c21hbmFnZXIuZ2V0QWN0aXZlKCkpLmlzLmluc3RhbmNlb2YoSFRNTEVsZW1lbnQpO1xuICAgICAgICAgICAgZXhwZWN0KGZvY3VzbWFuYWdlci5mb2N1c05leHQoKSkuaXMuaW5zdGFuY2VvZihGb2N1c01hbmFnZXIpO1xuICAgICAgICAgICAgZXhwZWN0KGZvY3VzbWFuYWdlci5mb2N1c1ByZXYoKSkuaXMuaW5zdGFuY2VvZihGb2N1c01hbmFnZXIpO1xuICAgICAgICAgICAgZXhwZWN0KGZvY3VzbWFuYWdlci5zdG9yZUZvY3VzKCkpLmlzLmluc3RhbmNlb2YoRm9jdXNNYW5hZ2VyKTtcbiAgICAgICAgICAgIGV4cGVjdChmb2N1c21hbmFnZXIuZm9jdXMoZG9jdW1lbnQuYm9keSkpLmlzLmluc3RhbmNlb2YoRm9jdXNNYW5hZ2VyKTtcbiAgICAgICAgICAgIGV4cGVjdChmb2N1c21hbmFnZXIucmVzdG9yZUZvY3VzKCkpLmlzLmluc3RhbmNlb2YoRm9jdXNNYW5hZ2VyKTtcblxuICAgICAgICB9KVxuXG4gICAgfSlcblxuXG59KTsiLCAiaW1wb3J0IHtcbiAgICBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHNcbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gJ2NoYWknO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5mdW5jdGlvbiBzZXR1cFRlc3RFbnZpcm9ubWVudCgpIHtcblxuXG4gICAgY2xhc3MgVGVzdENvbXBvbmVudCBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgdGhpcy5hdHRhY2hTaGFkb3coe21vZGU6ICdvcGVuJ30pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFjdXN0b21FbGVtZW50cy5nZXQoJ3Rlc3QtY29tcG9uZW50JykpIHtcbiAgICAgICAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKCd0ZXN0LWNvbXBvbmVudCcsIFRlc3RDb21wb25lbnQpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY2xlYW51cFRlc3RFbnZpcm9ubWVudCgpIHtcbiAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xufVxuXG5kZXNjcmliZSgnZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzJywgKCkgPT4ge1xuICAgIGJlZm9yZSgoZG9uZSkgPT4ge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHNldHVwVGVzdEVudmlyb25tZW50KCk7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBhZnRlcigoKSA9PiB7XG4gICAgICAgIGNsZWFudXBUZXN0RW52aXJvbm1lbnQoKTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAvLyBTZXQgdXAgdGhlIERPTVxuXG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICA8ZGl2IGlkPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgaWQ9XCJwYXJlbnRcIj5cbiAgICAgICAgICA8ZGl2IGlkPVwiY2hpbGRcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5gO1xuXG4gICAgICAgIGNvbnN0IHNoYWRvd0hvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzaGFkb3dIb3N0KTtcbiAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IHNoYWRvd0hvc3QuYXR0YWNoU2hhZG93KHttb2RlOiAnb3Blbid9KTtcbiAgICAgICAgY29uc3QgaW5uZXJFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGlubmVyRWxlbWVudC5pZCA9ICdpbm5lcic7XG4gICAgICAgIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoaW5uZXJFbGVtZW50KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmluZCB0aGUgZWxlbWVudCB3aXRoIHRoZSB0YXJnZXQgSUQgaW4gdGhlIG5vcm1hbCBET00nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoaWxkJyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhjaGlsZCwgJ3BhcmVudCcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFyZW50JykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmaW5kIHRoZSBlbGVtZW50IHdpdGggdGhlIHRhcmdldCBJRCBpbiB0aGUgc2hhZG93IERPTScsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5uZXJFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZGl2W3NoYWRvd3Jvb3RdID4gZGl2Jyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhpbm5lckVsZW1lbnQsICdpbm5lcicpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbChpbm5lckVsZW1lbnQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCBpZiB0aGUgZWxlbWVudCB3aXRoIHRoZSB0YXJnZXQgSUQgaXMgbm90IGZvdW5kJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGlsZCcpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMoY2hpbGQsICdub25leGlzdGVudCcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5iZS5udWxsO1xuICAgIH0pO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5cbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IHdpbmRvd1JlYWR5O1xubGV0IGRvbVJlYWR5O1xuXG5kZXNjcmliZSgnUmVhZHknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS9kb20vcmVhZHkubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBkb21SZWFkeSA9IG1bJ2RvbVJlYWR5J107XG4gICAgICAgICAgICAgICAgd2luZG93UmVhZHkgPSBtWyd3aW5kb3dSZWFkeSddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZG9tUmVhZHknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Jlc29sdmUgcHJvbWlzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBkb21SZWFkeS50aGVuKGRvbmUpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2luZG93UmVhZHknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Jlc29sdmUgcHJvbWlzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICB3aW5kb3dSZWFkeS50aGVuKGRvbmUpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7XG4gICAgZ2V0RG9jdW1lbnQsIGdldFdpbmRvdywgZ2V0RG9jdW1lbnRGcmFnbWVudEZyb21TdHJpbmdcbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcblxuaW1wb3J0IHtnZXRDb250YWluaW5nRG9jdW1lbnR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3V0aWwubWpzXCI7XG5cbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuXG5kZXNjcmliZSgnRE9NJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGluaXRKU0RPTSgpO1xuICAgIH0pXG4gICAgZGVzY3JpYmUoJ2dldERvY3VtZW50KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGRvY3VtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gZ2V0RG9jdW1lbnQoKTtcbiAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXRXaW5kb3coKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZG9jdW1lbnQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBnZXRXaW5kb3coKTtcbiAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXREb2N1bWVudEZyYWdtZW50RnJvbVN0cmluZygpJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyc8ZGl2PjwvZGl2PiddLFxuICAgICAgICAgICAgWyc8ZGl2PjxkaXY+MjwvZGl2PjwvZGl2PiddLFxuICAgICAgICAgICAgWyc8ZGl2PjxkaXY+MjwvZGl2PicsICc8ZGl2PjxkaXY+MjwvZGl2PjwvZGl2PiddLCAvLyB0ZXN0IGludmFsaWQgaHRtbFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmICghYikgYiA9IGE7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGRvY3VtZW50RnJhZ21lbnQgb2JqZWN0ICcgKyBhLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZyYWdtZW50ID0gZ2V0RG9jdW1lbnRGcmFnbWVudEZyb21TdHJpbmcoYSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGZyYWdtZW50KS50by5iZS5pbnN0YW5jZU9mKERvY3VtZW50RnJhZ21lbnQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChmcmFnbWVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkaXYuaW5uZXJIVE1MKS50by5iZS5lcXVhbChiKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdnZXRDb250YWluaW5nRG9jdW1lbnQnLCAoKSA9PiB7XG4gICAgICAgIGxldCAganNEb21Eb2N1bWVudDtcblxuICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAganNEb21Eb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgICAgICB9KTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgLy8gICAgIGRvbS53aW5kb3cuY2xvc2UoKTtcbiAgICAgICAgLy8gfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIGNhbGxlZCB3aXRoIGFuIGludmFsaWQgYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZ2V0Q29udGFpbmluZ0RvY3VtZW50KG51bGwpKS50by50aHJvdygnSW52YWxpZCBhcmd1bWVudC4gRXhwZWN0ZWQgYW4gSFRNTEVsZW1lbnQuJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBjb3JyZWN0IGNvbnRhaW5pbmcgZG9jdW1lbnQgZm9yIGFuIGVsZW1lbnQgaW4gdGhlIG1haW4gZG9jdW1lbnQnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0ganNEb21Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5pbmdEb2N1bWVudCA9IGdldENvbnRhaW5pbmdEb2N1bWVudChlbGVtZW50KTtcblxuICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5pbmdEb2N1bWVudCkudG8ubnVsbDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgY29udGFpbmluZyBkb2N1bWVudCBmb3IgYW4gZWxlbWVudCBpbnNpZGUgYSBzaGFkb3cgcm9vdCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhvc3QgPSBqc0RvbURvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogJ29wZW4nIH0pO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGpzRG9tRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgc2hhZG93Um9vdC5hcHBlbmRDaGlsZChlbGVtZW50KTtcblxuICAgICAgICAgICAgY29uc3QgY29udGFpbmluZ0RvY3VtZW50ID0gZ2V0Q29udGFpbmluZ0RvY3VtZW50KGVsZW1lbnQpO1xuICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5pbmdEb2N1bWVudCkudG8ubm90Lm51bGw7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBjb3JyZWN0IGNvbnRhaW5pbmcgZG9jdW1lbnQgZm9yIGFuIGVsZW1lbnQgaW5zaWRlIGEgbmVzdGVkIHNoYWRvdyByb290JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3V0ZXJIb3N0ID0ganNEb21Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnN0IG91dGVyU2hhZG93Um9vdCA9IG91dGVySG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiAnb3BlbicgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGlubmVySG9zdCA9IGpzRG9tRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBvdXRlclNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoaW5uZXJIb3N0KTtcblxuICAgICAgICAgICAgY29uc3QgaW5uZXJTaGFkb3dSb290ID0gaW5uZXJIb3N0LmF0dGFjaFNoYWRvdyh7IG1vZGU6ICdvcGVuJyB9KTtcblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGpzRG9tRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgaW5uZXJTaGFkb3dSb290LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuXG4gICAgICAgICAgICBjb25zdCBjb250YWluaW5nRG9jdW1lbnQgPSBnZXRDb250YWluaW5nRG9jdW1lbnQoZWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QoY29udGFpbmluZ0RvY3VtZW50KS50by5ub3QubnVsbDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIHRoZSBlbGVtZW50IGlzIG5vdCBhdHRhY2hlZCB0byBhbnkgZG9jdW1lbnQnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZXRhY2hlZEVsZW1lbnQgPSBqc0RvbURvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGV0YWNoZWRFbGVtZW50LnJlbW92ZSgpO1xuXG4gICAgICAgICAgICBjb25zdCBjb250YWluaW5nRG9jdW1lbnQgPSBnZXRDb250YWluaW5nRG9jdW1lbnQoZGV0YWNoZWRFbGVtZW50KTtcbiAgICAgICAgICAgIGV4cGVjdChjb250YWluaW5nRG9jdW1lbnQpLnRvLmJlLm51bGw7XG4gICAgICAgIH0pO1xuICAgIH0pOyAgICBcbiAgICBcbn0pOyIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBjaGFpIGZyb20gXCJjaGFpXCJcbi8vIGltcG9ydCB7aW50ZXJuYWxTeW1ib2x9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RhbnRzLm1qc1wiO1xuLy8gaW1wb3J0IHtBVFRSSUJVVEVfT1BUSU9OU30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtnZXREb2N1bWVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcbi8vIGltcG9ydCB7UHJveHlPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuLy8gaW1wb3J0IHthZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXBkYXRlci5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbi8vIGxldCBodG1sMSA9IGBcbi8vICAgICA8ZGl2IGlkPVwic2NyaXB0aG9zdFwiPlxuLy8gICAgIDwvZGl2PlxuLy8gICAgXG4vLyAgICAgPGRpdj5cbi8vICAgICA8XG4vLyA8L2Rpdj5cbi8vIGA7XG5cblxuLy8gZGVmaW5lZCBpbiBjb25zdGFudHMubWpzXG4vLyBjb25zdCB1cGRhdGVyU3ltYm9sS2V5ID0gXCJAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAb3B0aW9ucy11cGRhdGVyLWxpbmtcIlxuLy8gY29uc3QgdXBkYXRlclN5bWJvbFN5bWJvbCA9IFN5bWJvbC5mb3IodXBkYXRlclN5bWJvbEtleSk7XG5cblxuXG5kZXNjcmliZSgnRE9NJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IEN1c3RvbUVsZW1lbnQsIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCwgVGVzdENvbXBvbmVudCwgZG9jdW1lbnQsIFRlc3RDb21wb25lbnQyLGFzc2lnblVwZGF0ZXJUb0VsZW1lbnQ7XG5cbiAgICBkZXNjcmliZSgnaW5pdEZyb21TY3JpcHRIb3N0KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3QgcmFuZG9tVGFnTnVtYmVyID0gXCJtb25zdGVyLXRlc3RcIitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwKTtcbiAgICAgICAgXG4gICAgICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2N1c3RvbWVsZW1lbnQubWpzXCIpLnRoZW4oKG0pID0+IHtcblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRWxlbWVudCA9IG1bJ0N1c3RvbUVsZW1lbnQnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCA9IG1bJ3JlZ2lzdGVyQ3VzdG9tRWxlbWVudCddO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBUZXN0Q29tcG9uZW50MiA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmRvbVRhZ051bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgZGVmYXVsdHMoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbjogJzxoMT48L2gxPjxhcnRpY2xlPjxwPnRlc3Q8L3A+PGRpdiBpZD1cImNvbnRhaW5lclwiPjwvZGl2PjwvYXJ0aWNsZT4nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudDIpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NhbGwgY2FsbGJhY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIG5vdCBmb3VuZCBjYWxsYmFjayBhbmQgYWRkIGVycm9yIGF0dHJpYnV0ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGA8ZGl2IGlkPVwiY2FsbC1iYWNrLWhvc3RcIj48L2Rpdj48ZGl2IGlkPVwiY29udGFpbmVyXCI+PC9kaXY+YDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBsZXQgY29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocmFuZG9tVGFnTnVtYmVyKTtcbiAgICAgICAgICAgICAgICBjb250cm9sLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXNjcmlwdC1ob3N0JywgXCJjYWxsLWJhY2staG9zdFwiKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuYXBwZW5kQ2hpbGQoY29udHJvbCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRyb2wuZ2V0T3B0aW9uKCd0ZXN0JykpLmlzLmVxbCgwKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udHJvbC5oYXNBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1lcnJvcicpKS5pcy50cnVlO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBmb3VuZCBjYWxsYmFjayBpbml0Q3VzdG9tQ29udHJvbENhbGxiYWNrJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYDxkaXYgaWQ9XCJjYWxsLWJhY2staG9zdFwiPjwvZGl2PjxkaXYgaWQ9XCJjb250YWluZXJcIj48L2Rpdj5gO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYWxsLWJhY2staG9zdCcpO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pbml0Q3VzdG9tQ29udHJvbENhbGxiYWNrID0gZnVuY3Rpb24gKGNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbC5zZXRPcHRpb24oJ3Rlc3QnLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHJhbmRvbVRhZ051bWJlcik7XG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1zY3JpcHQtaG9zdCcsIFwiY2FsbC1iYWNrLWhvc3RcIik7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpLmFwcGVuZENoaWxkKGNvbnRyb2wpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChjb250cm9sLmdldE9wdGlvbigndGVzdCcpKS5pcy5lcWwoMSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRyb2wuaGFzQXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItZXJyb3InKSkuaXMuZmFsc2U7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGZvdW5kIGNhbGxiYWNrIGluaXRDdXN0b21Db250cm9sQ2FsbGJhY2sgZnJvbSBzZWxmJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYDxkaXYgaWQ9XCJjYWxsLWJhY2staG9zdFwiPjwvZGl2PjxkaXYgaWQ9XCJjb250YWluZXJcIj48L2Rpdj5gO1xuXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHJhbmRvbVRhZ051bWJlcik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRyb2wuZ2V0T3B0aW9uKCd0ZXN0JykpLmlzLmVxbCgwKTtcbiAgICAgICAgICAgICAgICBjb250cm9sLmluaXRDdXN0b21Db250cm9sQ2FsbGJhY2sgPSBmdW5jdGlvbiAoY29udHJvbCkge1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sLnNldE9wdGlvbigndGVzdCcsIDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb250cm9sLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXNjcmlwdC1ob3N0JywgXCJjYWxsLWJhY2staG9zdFwiKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuYXBwZW5kQ2hpbGQoY29udHJvbCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRyb2wuZ2V0T3B0aW9uKCd0ZXN0JykpLmlzLmVxbCgyKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udHJvbC5oYXNBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1lcnJvcicpKS5pcy5mYWxzZTtcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cbiAgICB9KTtcbn0pIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tICdjaGFpJztcbmltcG9ydCB7Z2V0U2xvdHRlZE5vZGVzfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9zbG90dGVkLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdnZXRTbG90dGVkTm9kZXMnLCAoKSA9PiB7XG5cblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IFNldCBpZiB0aGVyZSBpcyBubyBTaGFkb3dSb290JywgKCkgPT4ge1xuICAgICAgICBleHBlY3QoZ2V0U2xvdHRlZE5vZGVzKS5pcy5hKCdmdW5jdGlvbicpO1xuICAgIH0pO1xuXG5cbn0pO1xuXG4iLCAiXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5pbXBvcnQge1xuICAgIGFkZEF0dHJpYnV0ZVRva2VuLFxuICAgIGFkZFRvT2JqZWN0TGluayxcbiAgICBjbGVhckF0dHJpYnV0ZVRva2VucyxcbiAgICBjb250YWluc0F0dHJpYnV0ZVRva2VuLFxuICAgIGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUsXG4gICAgZmluZENsb3Nlc3RPYmplY3RMaW5rLFxuICAgIGdldExpbmtlZE9iamVjdHMsXG4gICAgaGFzT2JqZWN0TGluayxcbiAgICByZW1vdmVBdHRyaWJ1dGVUb2tlbixcbiAgICByZW1vdmVPYmplY3RMaW5rLFxuICAgIHJlcGxhY2VBdHRyaWJ1dGVUb2tlbixcbiAgICB0b2dnbGVBdHRyaWJ1dGVUb2tlbixcbiAgICBmaW5kQ2xvc2VzdEJ5Q2xhc3Ncbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vYXR0cmlidXRlcy5tanNcIjtcblxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgaHRtbDEsIGh0bWwyLCBodG1sMztcblxuZGVzY3JpYmUoJ0F0dHJpYnV0ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgaHRtbDEgPSBgPGRpdiBpZD1cInRlc3QxXCI+PC9kaXY+YDtcbiAgICAgICAgaHRtbDIgPSBgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPGRpdiBpZD1cInN1YjFcIj5cbiAgICAgICAgPGRpdiBpZD1cInN1YjJcIj5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJzdWIzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cInN1YjRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInN1YjVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuYDtcbiAgICAgICAgXG4gICAgICAgIGh0bWwzID0gYDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJ0ZXN0MVwiPlxuICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdWIxXCIgaWQ9XCJhMVwiIGNsYXNzPVwic3ViMVwiPlxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3ViMlwiIGlkPVwiYTJcIiBjbGFzcz1cInN1YjJcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdWIzXCIgaWQ9XCJhM1wiIGNsYXNzPVwic3ViM1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdWI0XCIgaWQ9XCJhNFwiIGNsYXNzPVwic3ViNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3ViNVwiIGlkPVwiYTVcIiBjbGFzcz1cInN1YjVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuYDtcblxuXG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnT2JqZWN0TGluaycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBjb25zdCBzeW1ib2wgPSBTeW1ib2woJ215dGVzdCcpO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGFuZGxlIG9iamVjdC1saW5rcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvYmogPSB7YTogMX07XG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgZXhwZWN0KGhhc09iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBhZGRUb09iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sLCBvYmopO1xuICAgICAgICAgICAgZXhwZWN0KGhhc09iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgbGV0IG8gPSBnZXRMaW5rZWRPYmplY3RzKGVsZW1lbnQsIHN5bWJvbCkubmV4dCgpO1xuICAgICAgICAgICAgZXhwZWN0KG8udmFsdWUpLnRvLmVxdWFsKG9iaik7XG5cbiAgICAgICAgICAgIHJlbW92ZU9iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sKTtcbiAgICAgICAgICAgIGV4cGVjdChoYXNPYmplY3RMaW5rKGVsZW1lbnQsIHN5bWJvbCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGdldExpbmtlZE9iamVjdHMoZWxlbWVudCwgc3ltYm9sKSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICB9KVxuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdmaW5kQ2xvc2VzdE9iamVjdExpbmsoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBjb25zdCBzeW1ib2wgPSBTeW1ib2woJ215dGVzdCcpO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIG9iamVjdGxpbmsnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBzdWI0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YjQnKVxuICAgICAgICAgICAgbGV0IHN1YjIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ViMicpXG5cbiAgICAgICAgICAgIGxldCBvYmogPSB7fTtcblxuICAgICAgICAgICAgZXhwZWN0KGhhc09iamVjdExpbmsoc3ViMiwgc3ltYm9sKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBhZGRUb09iamVjdExpbmsoc3ViMiwgc3ltYm9sLCBvYmopO1xuICAgICAgICAgICAgZXhwZWN0KGhhc09iamVjdExpbmsoc3ViMiwgc3ltYm9sKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBmaW5kQ2xvc2VzdE9iamVjdExpbmsoc3ViNCk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuaXMuaW5zdGFuY2VPZihIVE1MRGl2RWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJykpLnRvLmJlLmVxdWFsKCdzdWIyJyk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdBdHRyaWJ1dGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDM7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnZmluZCBjbG9zZXN0IEF0dHJpYnV0ZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ2E1JywgJ2RhdGEtbW9uc3Rlci1yb2xlJywgdW5kZWZpbmVkLCAnc3ViNSddLFxuICAgICAgICAgICAgICAgIFsnYTUnLCAnZGF0YS1tb25zdGVyLXJvbGUnLCAnc3ViMycsICdzdWIzJ10sXG4gICAgICAgICAgICAgICAgWydhNScsICdkYXRhLW1vbnN0ZXItcm9sZScsICdzdWIxJywgJ3N1YjEnXSxcbiAgICAgICAgICAgICAgICBbJ2E0JywgJ2RhdGEtbW9uc3Rlci1yb2xlJywgJ3N1YjEnLCAnc3ViMSddLFxuICAgICAgICAgICAgICAgIFsnYTMnLCAnZGF0YS1tb25zdGVyLXJvbGUnLCAnc3ViMScsICdzdWIxJ10sXG4gICAgICAgICAgICAgICAgWydhMicsICdkYXRhLW1vbnN0ZXItcm9sZScsIHVuZGVmaW5lZCwgJ3N1YjInXSxcbiAgICAgICAgICAgICAgICBbJ2E1JywgJ2RhdGEtbW9uc3Rlci1yb2xlJywgJ3N1YjUnLCAnc3ViNSddXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBkID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgICAgICBpdCgnZmluZENsb3Nlc3RCeUF0dHJpYnV0ZSgnICsgYSArICcsICcgKyBiICsgJywnICsgYyArICcpIHNob3VsZCByZXR1cm4gJyArIGQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSksIGIsIGMpLmdldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXJvbGUnKSkudG8uYmUuZXF1YWwoZCk7XG4gICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7IFxuICAgICAgICBcbiAgICAgICAgZGVzY3JpYmUoJ2ZpbmQgY2xvc2VzdCBFbGVtZW50IHdpdGggY2xhc3MnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ2E1JywgICdzdWIzJywgJ3N1YjMnXSxcbiAgICAgICAgICAgICAgICBbJ2E1JywgICdzdWIxJywgJ3N1YjEnXSxcbiAgICAgICAgICAgICAgICBbJ2E0JywgICdzdWIxJywgJ3N1YjEnXSxcbiAgICAgICAgICAgICAgICBbJ2EzJywgICdzdWIxJywgJ3N1YjEnXSxcbiAgICAgICAgICAgICAgICBbJ2E1JywgICdzdWI1JywgJ3N1YjUnXVxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBpdCgnZmluZENsb3Nlc3RCeUNsYXNzKCcgKyBhICsgJywgJyArIGIgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChmaW5kQ2xvc2VzdEJ5Q2xhc3MoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSksIGIpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkudG8uYmUuZXF1YWwoYyk7XG4gICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnQXR0cmlidXRlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBhdHJpYnV0ZUtleSA9ICdkYXRhLXRlc3QnO1xuXG4gICAgICAgIGl0KCd0b2dnbGVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHZhbHVlKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5oYXNBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGF0cmlidXRlS2V5LCAnYXBwbGUgYmFuYW5uYScpXG4gICAgICAgICAgICB0b2dnbGVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3BpbmFwcGxlJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgnYXBwbGUgYmFuYW5uYSBwaW5hcHBsZScpO1xuICAgICAgICAgICAgdG9nZ2xlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdwaW5hcHBsZScpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZXF1YWwoJ2FwcGxlIGJhbmFubmEnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnYWRkQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB2YWx1ZSknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuaGFzQXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBhZGRBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3BpbmFwcGxlJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgncGluYXBwbGUnKTtcbiAgICAgICAgICAgIGFkZEF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAnYmFuYW5uYScpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZXF1YWwoJ3BpbmFwcGxlIGJhbmFubmEnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgncmVtb3ZlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB2YWx1ZSknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXksICdhcHBsZSBiYW5hbm5hIGxlbW1vbicpXG4gICAgICAgICAgICByZW1vdmVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3BpbmFwcGxlJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgnYXBwbGUgYmFuYW5uYSBsZW1tb24nKTtcbiAgICAgICAgICAgIHJlbW92ZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAnYmFuYW5uYScpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZXF1YWwoJ2FwcGxlIGxlbW1vbicpO1xuXG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2NvbnRhaW5zQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB2YWx1ZSknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5zQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdwaW5hcHBsZScpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGF0cmlidXRlS2V5LCAnYXBwbGUgYmFuYW5uYScpXG4gICAgICAgICAgICBleHBlY3QoY29udGFpbnNBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3BpbmFwcGxlJykpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5zQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdiYW5hbm5hJykpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QoY29udGFpbnNBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ2FwcGxlJykpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnIHJlcGxhY2VBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHZhbHVlKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSwgJ2FwcGxlIGJhbmFubmEgdG9tYXRvJylcbiAgICAgICAgICAgIHJlcGxhY2VBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3RvbWF0bycsICdsZW1tb24nKTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSkpLnRvLmJlLmVxdWFsKCdhcHBsZSBiYW5hbm5hIGxlbW1vbicpO1xuICAgICAgICAgICAgcmVwbGFjZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAnYmFuYW5uYScsICdwZWFyJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgnYXBwbGUgcGVhciBsZW1tb24nKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnY2xlYXJBdHRyaWJ1dGVUb2tlbnMoZWxlbWVudCwga2V5KScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSwgJ2FwcGxlIGJhbmFubmEnKVxuICAgICAgICAgICAgY2xlYXJBdHRyaWJ1dGVUb2tlbnMoZWxlbWVudCwgYXRyaWJ1dGVLZXkpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZXF1YWwoJycpO1xuXG4gICAgICAgIH0pXG5cblxuICAgIH0pXG59KSIsICIndXNlIHN0cmljdCc7XG5cblxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmxldCBSZXNvdXJjZSxEZXJpdmVkUmVzb3VyY2U7XG5cblxuXG5kZXNjcmliZSgnUmVzb3VyY2UnLCBmdW5jdGlvbigpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFJlc291cmNlID0gbVsnUmVzb3VyY2UnXTtcblxuXG4gICAgICAgICAgICAgICAgRGVyaXZlZFJlc291cmNlID0gY2xhc3MgIGV4dGVuZHMgUmVzb3VyY2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtdXJsXCI6IFwiaHR0cDovL2V4YW1wbGUuY29tXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRVUkxBdHRyaWJ1dGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2RhdGEtdXJsJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdEZXJpdmVkUmVzb3VyY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZW9mIFJlc291cmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBEZXJpdmVkUmVzb3VyY2UoKSkudG8uYmUuYW4uaW5zdGFuY2VvZihSZXNvdXJjZSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtSZXNvdXJjZU1hbmFnZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlbWFuYWdlci5tanNcIjtcbmltcG9ydCB7Y2xlYW51cERPTUZyb21UZXN0aW5nLCBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3Rpbmd9IGZyb20gXCIuLi8uLi91dGlsL2NsZWFudXBkb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmRlc2NyaWJlKCdSZXNvdXJjZU1hbmFnZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgZmV0Y2hSZWZlcmVuY2UsIHJldHVyblN0YXR1cztcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgZ2xvYmFsVGhpc1snZmV0Y2gnXSA9IGZldGNoUmVmZXJlbmNlO1xuICAgICAgICBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKTtcbiAgICB9KVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nKClcblxuICAgICAgICByZXR1cm5TdGF0dXMgPSAyMDA7XG4gICAgICAgIGZldGNoUmVmZXJlbmNlID0gZ2xvYmFsVGhpc1snZmV0Y2gnXTtcbiAgICAgICAgZ2xvYmFsVGhpc1snZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgaWYgKCF1cmwpIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB1cmwnKVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IFwidGVzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHJldHVyblN0YXR1c1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICB9O1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCduZXcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgUmVzb3VyY2VNYW5hZ2VyKCkgc2hvdWxkIHJldHVybiBSZXNvdXJjZU1hbmFnZXIgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBuZXcgUmVzb3VyY2VNYW5hZ2VyKCk7XG4gICAgICAgICAgICBleHBlY3QoZCkudG8uYmUuaW5zdGFuY2VPZihSZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdsb2FkIHJlc291cmNlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbWFuYWdlcjtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG1hbmFnZXIgPSBuZXcgUmVzb3VyY2VNYW5hZ2VyKCk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2FkZCBzY3JpcHQgc2hvdWxkIGluc3RhbmNlIG9mIFJlc291cmNlTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZFNjcmlwdCgnL2V4YW1wbGUuanMnKSkudG8uYmUuaW5zdGFuY2VPZihSZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYWRkIHN0eWxlIHNob3VsZCBpbnN0YW5jZSBvZiBSZXNvdXJjZU1hbmFnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobWFuYWdlci5hZGRTdHlsZXNoZWV0KCcvc3R5bGUuanMnKSkudG8uYmUuaW5zdGFuY2VPZihSZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYWRkIGRhdGEgc2hvdWxkIGluc3RhbmNlIG9mIFJlc291cmNlTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZERhdGEoJy9kYXRhLmpzb24nKSkudG8uYmUuaW5zdGFuY2VPZihSZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnY29ubmVjdCByZXNvdXJjZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnYWRkIHNjcmlwdCBhbmQgY29ubmVjdCBzaG91bGQgaW5zdGFuY2Ugb2YgUmVzb3VyY2VNYW5hZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZFNjcmlwdCgnL2V4YW1wbGUuanMnKS5jb25uZWN0KCkpLnRvLmJlLmluc3RhbmNlT2YoUmVzb3VyY2VNYW5hZ2VyKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnYWRkIHN0eWxlIGFuZCBjb25uZWN0IHNob3VsZCBpbnN0YW5jZSBvZiBSZXNvdXJjZU1hbmFnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkU3R5bGVzaGVldCgnL3N0eWxlLmpzJykuY29ubmVjdCgpKS50by5iZS5pbnN0YW5jZU9mKFJlc291cmNlTWFuYWdlcik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ2FkZCBkYXRhIGFuZCBjb25uZWN0ICBzaG91bGQgaW5zdGFuY2Ugb2YgUmVzb3VyY2VNYW5hZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZERhdGEoJy9kYXRhLmpzb24nKS5jb25uZWN0KCkpLnRvLmJlLmluc3RhbmNlT2YoUmVzb3VyY2VNYW5hZ2VyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NoZWNrIGF2YWlsYWJpbGl0eSByZXNvdXJjZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnYWRkIHNjcmlwdCBhbmQgY2hlY2sgYXZhaWxhYmlsaXR5IHNob3VsZCByZXR1cm4gUHJvbWlzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobWFuYWdlci5hZGRTY3JpcHQoJy9leGFtcGxlLmpzJykuYXZhaWxhYmxlKCkpLnRvLmJlLmluc3RhbmNlT2YoUHJvbWlzZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ2FkZCBzdHlsZSBhbmQgY2hlY2sgYXZhaWxhYmlsaXR5IHNob3VsZCBzaG91bGQgcmV0dXJuIFByb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkU3R5bGVzaGVldCgnL3N0eWxlLmpzJykuYXZhaWxhYmxlKCkpLnRvLmJlLmluc3RhbmNlT2YoUHJvbWlzZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ2FkZCBkYXRhIGFuZCBjaGVjayBhdmFpbGFiaWxpdHkgIHNob3VsZCBzaG91bGQgcmV0dXJuIFByb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkRGF0YSgnL2RhdGEuanNvbicpLmF2YWlsYWJsZSgpKS50by5iZS5pbnN0YW5jZU9mKFByb21pc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NoZWNrIGF2YWlsYWJpbGl0eSBleGFtcGxlLmpzb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnYWRkIGRhdGEgYW5kIGNoZWNrIGNvbnRlbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIG1hbmFnZXIuYWRkRGF0YSgnaHR0cHM6Ly9leGFtcGxlLmNvbS9leGFtcGxlLmpzb24nKS5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbihyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKS5vdXRlckhUTUwpLmNvbnRhaW5zKCc+e1wiYVwiOlwidGVzdFwifTwvc2NyaXB0PjwvaGVhZD4nKTtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KVxuXG4gICAgfSk7XG5cblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsRnVuY3Rpb24gfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IEFUVFJJQlVURVBSRUZJWCwgQXNzZW1ibGVyIH07XG5cbi8qKlxuICogYXR0cmlidXRlIHByZWZpeFxuICpcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqL1xuY29uc3QgQVRUUklCVVRFUFJFRklYID0gXCJkYXRhLW1vbnN0ZXItXCI7XG5cbi8qKlxuICogQXNzZW1ibGVyIGNsYXNzXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBzdW1tYXJ5IEFsbG93cyB5b3UgdG8gYnVpbGQgYW4gaHRtbCBmcmFnbWVudFxuICovXG5jbGFzcyBBc3NlbWJsZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7RG9jdW1lbnRGcmFnbWVudH0gZnJhZ21lbnRcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2Zcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGZ1bmN0aW9uIGlzIG5vdCBkZWZpbmVkXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihmcmFnbWVudCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5hdHRyaWJ1dGVQcmVmaXggPSBBVFRSSUJVVEVQUkVGSVg7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZShmcmFnbWVudCwgZ2V0R2xvYmFsRnVuY3Rpb24oXCJEb2N1bWVudEZyYWdtZW50XCIpKTtcblx0XHR0aGlzLmZyYWdtZW50ID0gZnJhZ21lbnQ7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuXHQgKiBAcmV0dXJucyB7QXNzZW1ibGVyfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0c2V0QXR0cmlidXRlUHJlZml4KHByZWZpeCkge1xuXHRcdHZhbGlkYXRlU3RyaW5nKHByZWZpeCk7XG5cdFx0dGhpcy5hdHRyaWJ1dGVQcmVmaXggPSBwcmVmaXg7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGdldEF0dHJpYnV0ZVByZWZpeCgpIHtcblx0XHRyZXR1cm4gdGhpcy5hdHRyaWJ1dGVQcmVmaXg7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtQcm94eU9ic2VydmVyfHVuZGVmaW5lZH0gZGF0YVxuXHQgKiBAcmV0dXJuIHtEb2N1bWVudEZyYWdtZW50fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKi9cblx0Y3JlYXRlRG9jdW1lbnRGcmFnbWVudChkYXRhKSB7XG5cdFx0aWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZGF0YSA9IG5ldyBQcm94eU9ic2VydmVyKHt9KTtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZUluc3RhbmNlKGRhdGEsIFByb3h5T2JzZXJ2ZXIpO1xuXHRcdGNvbnN0IGZyYWdtZW50ID0gdGhpcy5mcmFnbWVudC5jbG9uZU5vZGUodHJ1ZSk7XG5cdFx0cmV0dXJuIGZyYWdtZW50O1xuXHR9XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtBVFRSSUJVVEVQUkVGSVgsIEFzc2VtYmxlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vYXNzZW1ibGVyLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnQXNzZW1ibGVyJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGluaXRKU0RPTSgpO1xuICAgIH0pXG4gICAgZGVzY3JpYmUoJ2NyZWF0ZURvY3VtZW50RnJhZ21lbnQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gPGRpdj5PbmU8L2Rpdj48ZGl2PlR3bzwvZGl2PicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoJzxkaXY+T25lPC9kaXY+PGRpdj5Ud288L2Rpdj4nKTtcblxuICAgICAgICAgICAgbGV0IGYgPSBuZXcgQXNzZW1ibGVyKGZyYWdtZW50KTtcblxuICAgICAgICAgICAgLy8gY29udmVydCB0byBzdHJpbmdcbiAgICAgICAgICAgIGxldCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChmLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKS5jbG9uZU5vZGUodHJ1ZSkpO1xuXG4gICAgICAgICAgICBleHBlY3QoY29udGFpbmVyLmlubmVySFRNTCkudG8uYmUuZXF1YWwoJzxkaXY+T25lPC9kaXY+PGRpdj5Ud288L2Rpdj4nKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBEb2N1bWVudEZyYWdtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gbmV3IEFzc2VtYmxlcihkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuICAgICAgICAgICAgZXhwZWN0KGQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS50by5iZS5pbnN0YW5jZU9mKERvY3VtZW50RnJhZ21lbnQpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCduZXcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgUmVuZGVyZXIoKSBzaG91bGQgcmV0dXJuIEFzc2VtYmxlciBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IG5ldyBBc3NlbWJsZXIoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAgICAgICAgICAgIGV4cGVjdChkKS50by5iZS5pbnN0YW5jZU9mKEFzc2VtYmxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldEF0dHJpYnV0ZVByZWZpeCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiAnICsgQVRUUklCVVRFUFJFRklYLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IG5ldyBBc3NlbWJsZXIoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAgICAgICAgICAgIGV4cGVjdChkLmdldEF0dHJpYnV0ZVByZWZpeCgpKS50by5iZS5lcXVhbChBVFRSSUJVVEVQUkVGSVgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdzZXRBdHRyaWJ1dGVQcmVmaXgoKS5nZXRBdHRyaWJ1dGVQcmVmaXgoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gc2FtZSB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gbmV3IEFzc2VtYmxlcihkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuICAgICAgICAgICAgZXhwZWN0KGQuc2V0QXR0cmlidXRlUHJlZml4KCd0ZXN0MDEnKS5nZXRBdHRyaWJ1dGVQcmVmaXgoKSkudG8uYmUuZXF1YWwoJ3Rlc3QwMScpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2dldERvY3VtZW50fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7Y2xlYW51cERPTUZyb21UZXN0aW5nLCBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3Rpbmd9IGZyb20gXCIuLi8uLi91dGlsL2NsZWFudXBkb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5kZXNjcmliZSgnRE9NJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IEN1c3RvbUNvbnRyb2wsIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCwgVGVzdENvbXBvbmVudCwgZG9jdW1lbnQsIGpzZG9tRmxhZztcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIG0ucG9seWZpbGwoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBqc2RvbSBkb2VzIG5vdCBzdXBwb3J0IEVsZW1lbnRJbnRlcm5hbHNcbiAgICAgICAgICAgIGpzZG9tRmxhZyA9IG5hdmlnYXRvci51c2VyQWdlbnQuaW5jbHVkZXMoXCJqc2RvbVwiKTtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQgPSBtWydyZWdpc3RlckN1c3RvbUVsZW1lbnQnXTtcblxuXG4gICAgICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS9jdXN0b21jb250cm9sLm1qc1wiKS50aGVuKChtKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21Db250cm9sID0gbVsnQ3VzdG9tQ29udHJvbCddO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBUZXN0Q29tcG9uZW50ID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21Db250cm9sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0VGFnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJtb25zdGVyLWN1c3RvbWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUZXN0Q29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICB9ICk7XG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnQ3VzdG9tQ29udHJvbCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nKClcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIGNsZWFudXBET01Gcm9tVGVzdGluZygpO1xuXG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGN1c3RvbS1lbGVtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IG5ldyBUZXN0Q29tcG9uZW50KCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZSkudG8uYmUubm90Lm51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgndW5kZWZpbmVkJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2Nvbm5lY3QgZW1wdHkgZWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdkb2N1bWVudCBzaG91bGQgY29udGFpbiBtb25zdGVyLWN1c3RvbWNvbnRyb2wnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpLmFwcGVuZENoaWxkKGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpLmxlbmd0aCkuaXMuZXF1YWwoMSk7XG4gICAgICAgICAgICAgICAgLy8gbm8gZGF0YS1tb25zdGVyLW9iamVjdGxpbms9XCJTeW1ib2wobW9uc3RlclVwZGF0ZXIpXCIgYmVjYXVzZSBpdCBoYXMgbm90aGluZyB0byB1cGRhdGUgXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWN1c3RvbWNvbnRyb2wgZGF0YS1tb25zdGVyLWVycm9yPVwiRXJyb3I6IGh0bWwgaXMgbm90IHNldC5cIj48L21vbnN0ZXItY3VzdG9tY29udHJvbD4nKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGRlc2NyaWJlKCdPcHRpb25zIGNoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgIGl0KCdkZWxlZ2F0ZXNGb2N1cyBzaG91bGQgY2hhbmdlIGZyb20gdHJ1ZSB0byBmYWxzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIC8vICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKVxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldE9wdGlvbignZGVsZWdhdGVzRm9jdXMnKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgLy8gICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX09QVElPTlMsIEpTT04uc3RyaW5naWZ5KHtkZWxlZ2F0ZXNGb2N1czogZmFsc2V9KSk7XG4gICAgICAgIC8vICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0T3B0aW9uKCdkZWxlZ2F0ZXNGb2N1cycpKS50by5iZS5mYWxzZTtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgfSwgMTApO1xuICAgICAgICAvLyAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgIH0pLnRpbWVvdXQoMTAwKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gfSlcblxuICAgICAgICBkZXNjcmliZSgnVGVzdCBFbGVtZW50SW50ZXJuYWxzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgZm9ybTtcblxuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KCdmb3JtQXNzb2NpYXRlZCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChkLmNvbnN0cnVjdG9yLmZvcm1Bc3NvY2lhdGVkKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ2Zvcm0nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5mb3JtKS50by5iZS5pbnN0YW5jZW9mKEhUTUxGb3JtRWxlbWVudClcblxuICAgICAgICAgICAgICAgIC8vIGlmIChqc2RvbUZsYWcpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgZXhwZWN0KCgpID0+IGQuZm9ybSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICAgICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGV4cGVjdChkLmZvcm0pLnRvLmJlLmluc3RhbmNlb2YoSFRNTEZvcm1FbGVtZW50KVxuICAgICAgICAgICAgICAgIC8vIH1cblxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3ZhbHVlIGdldHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBkLnZhbHVlKS50by50aHJvdyhFcnJvcik7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgndmFsdWUgc2V0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IGQudmFsdWUgPSA0KS50by50aHJvdyhFcnJvcik7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2V0Rm9ybVZhbHVlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCduYW1lIGdldHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChkLm5hbWUpLnRvLmJlLm51bGw7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgndHlwZSBnZXR0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC50eXBlKS50by5iZS5lcXVhbCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgndmFsaWRpdHkgZ2V0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3ZhbGlkYXRpb25NZXNzYWdlIGdldHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3dpbGxWYWxpZGF0ZSBnZXR0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpdCgnY2hlY2tWYWxpZGl0eSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgncmVwb3J0VmFsaWRpdHkoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuXG4gICAgICAgICAgICB9KTtcblxuXG4gICAgICAgICAgICBpdCgnc2V0VmFsaWRpdHkoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5zZXRWYWxpZGl0eSh7J3ZhbHVlTWlzc2luZyc6IHRydWV9LCBcIm15IG1lc3NhZ2VcIikpLnRvLmJlLnVuZGVmaW5lZDtcblxuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxufSk7XG5cblxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7QVRUUklCVVRFX1RIRU1FX05BTUV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2NvbnN0YW50cy5tanNcIjtcblxuaW1wb3J0IHtmaW5kRG9jdW1lbnRUZW1wbGF0ZSwgVGVtcGxhdGV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3RlbXBsYXRlLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdUZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGluaXRKU0RPTSgpO1xuICAgIH0pXG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZD1cIm15dGVtcGxhdGVcIj48L3RlbXBsYXRlPmA7XG4gICAgfSlcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnY3JlYXRlIEhUTUxGcmFnbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgW1xuICAgICAgICAgICAgW1wiPGRpdj5maXJzdDwvZGl2PjxkaXY+c2Vjb25kPC9kaXY+XCJdLFxuICAgICAgICAgICAgW1wiPGRpdj5maXJzdDwvZGl2PlwiXSxcbiAgICAgICAgICAgIFtcIjxkaXY+Zmlyc3Q8L2Rpdj48cD5zZWNvbmQ8L3A+XCJdXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCduZXcgVGVtcGxhdGUoKS5nZXROZXdEb2N1bWVudEZyYWdtZW50QXNTdHJpbmcoKSBzaG91bGQgcmV0dXJuIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpO1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGE7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBuZXcgVGVtcGxhdGUodGVtcGxhdGUpO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udGFpbmVyLmlubmVySFRNTCkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY3JlYXRlIGluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnbmV3IFRlbXBsYXRlKCkgc2hvdWxkIHJldHVybiBkb2N1bWVudCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IG5ldyBUZW1wbGF0ZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpKTtcbiAgICAgICAgICAgIGV4cGVjdChkKS50by5iZS5pbnN0YW5jZU9mKFRlbXBsYXRlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmdldFRlbXBsYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnbmV3IFRlbXBsYXRlKCkuZ2V0VGVtcGxhdGVFbGVtZW50KCkgc2hvdWxkIHJldHVybiBIVE1MVGVtcGxhdGVFbGVtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gbmV3IFRlbXBsYXRlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJykpO1xuICAgICAgICAgICAgZXhwZWN0KGQuZ2V0VGVtcGxhdGVFbGVtZW50KCkpLnRvLmJlLmluc3RhbmNlT2YoSFRNTFRlbXBsYXRlRWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5maW5kRG9jdW1lbnRUZW1wbGF0ZSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHRocm93IFRlbXBsYXRlIG5vdCBmb3VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm5vd2F5XCIsIGRpdilcbiAgICAgICAgICAgIH0pLnRvLnRocm93cyhFcnJvcik7XG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmZpbmREb2N1bWVudFRlbXBsYXRlKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlc2NyaWJlKCdUZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgZmluZCB0ZW1wbGF0ZSBvdmVyIG93bmVyRG9jdW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgZGl2LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGxldCB0ID0gZmluZERvY3VtZW50VGVtcGxhdGUoXCJteXRlbXBsYXRlXCIsIGRpdik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHQpLmlzLmluc3RhbmNlb2YoVGVtcGxhdGUpO1xuXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnVGhtZW5lZCBUZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBtZW1BdHRyaWJ1dGVWYWx1ZTtcblxuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaWQ9XCJteXRlbXBsYXRlXCI+PHA+MTwvcD48L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaWQ9XCJteXRlbXBsYXRlLW1vbnN0ZXJcIj48cD4yPC9wPjwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZD1cIm15dGVtcGxhdGUtdGVzdHRoZW1lXCI+PHA+NDwvcD48L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaWQ9XCJteXByZWZpeC1teXRlbXBsYXRlLW1vbnN0ZXJcIj48cD4zPC9wPjwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgYDtcblxuICAgICAgICAgICAgICAgIGxldCBodG1sID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpO1xuICAgICAgICAgICAgICAgIGlmIChodG1sLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfVEhFTUVfTkFNRSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtQXR0cmlidXRlVmFsdWUgPSBodG1sLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVEhFTUVfTkFNRSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcblxuICAgICAgICAgICAgICAgIGxldCBodG1sID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGh0bWwuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9USEVNRV9OQU1FKSkge1xuICAgICAgICAgICAgICAgICAgICBodG1sLnJlbW92ZUF0dHJpYnV0ZShBVFRSSUJVVEVfVEhFTUVfTkFNRSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1lbUF0dHJpYnV0ZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9USEVNRV9OQU1FLCBtZW1BdHRyaWJ1dGVWYWx1ZSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBmaW5kIHRlbXBsYXRlIG92ZXIgb3duZXJEb2N1bWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItdGVtcGxhdGUtcHJlZml4JywgJ215cHJlZml4JylcbiAgICAgICAgICAgICAgICBkaXYucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgbGV0IHQxID0gZmluZERvY3VtZW50VGVtcGxhdGUoXCJteXRlbXBsYXRlXCIsIGRpdik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHQxKS5pcy5pbnN0YW5jZW9mKFRlbXBsYXRlKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodDEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLnRleHRDb250ZW50KS5pcy5lcXVhbChcIjNcIik7XG5cbiAgICAgICAgICAgICAgICBkaXYucmVtb3ZlQXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItdGVtcGxhdGUtcHJlZml4JylcbiAgICAgICAgICAgICAgICBsZXQgdDIgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm15dGVtcGxhdGVcIiwgZGl2KTtcbiAgICAgICAgICAgICAgICBleHBlY3QodDIpLmlzLmluc3RhbmNlb2YoVGVtcGxhdGUpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0Mi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkudGV4dENvbnRlbnQpLmlzLmVxdWFsKFwiMlwiKTtcblxuICAgICAgICAgICAgICAgIGh0bWwuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9USEVNRV9OQU1FLCd0ZXN0dGhlbWUnKTtcbiAgICAgICAgICAgICAgICBsZXQgYT0gaHRtbC5vdXRlckhUTUw7XG4gICAgICAgICAgICAgICAgbGV0IHQzID0gZmluZERvY3VtZW50VGVtcGxhdGUoXCJteXRlbXBsYXRlXCIsIGRpdik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHQzKS5pcy5pbnN0YW5jZW9mKFRlbXBsYXRlKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodDMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLnRleHRDb250ZW50KS5pcy5lcXVhbChcIjRcIik7XG5cblxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xufSk7IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtmaXJlRXZlbnQsIGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50LCBmaXJlQ3VzdG9tRXZlbnR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuZGVzY3JpYmUoJ0V2ZW50cycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGluaXRKU0RPTSgpO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnZmluZCBvYmplY3QnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyJywgJ2hlbGxvJyk7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBlID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoZXZlbnQsICdkYXRhLW1vbnN0ZXInKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3RlcicpKS50by5iZS5lcXVhbCgnaGVsbG8nKVxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBmaXJlRXZlbnQoZGl2LCAnY2xpY2snKTtcbiAgICAgICAgICAgIH0sIDApXG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdmaXJlRXZlbnQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgY2xpY2sgZXZlbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBmaXJlRXZlbnQoZGl2LCAnY2xpY2snKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgdG91Y2ggZXZlbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBmaXJlRXZlbnQoZGl2LCAndG91Y2gnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgdG91Y2ggZXZlbnQgb24gY29sbGVjdGlvbicsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2gnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uID0gZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RpdicpO1xuXG5cbiAgICAgICAgICAgIGZpcmVFdmVudChjb2xsZWN0aW9uLCAndG91Y2gnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgdG91Y2ggZXZlbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4gICAgICAgICAgICBsZXQgY29sbGVjdGlvbiA9IGRpdi5xdWVyeVNlbGVjdG9yQWxsKCdkaXYnKTtcblxuXG4gICAgICAgICAgICBmaXJlRXZlbnQoY29sbGVjdGlvbiwgJ3RvdWNoJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZmlyZUV2ZW50KHt9LCAndG91Y2gnKSkudG8udGhyb3coRXJyb3IpO1xuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2ZpcmVDdXN0b21FdmVudCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGZpcmUgYSBjbGljayBldmVudCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGZpcmVDdXN0b21FdmVudChkaXYsICdjbGljaycpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZpcmUgYSB0b3VjaCBldmVudCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2gnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGZpcmVDdXN0b21FdmVudChkaXYsICd0b3VjaCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZpcmUgYSB0b3VjaCBldmVudCBvbiBjb2xsZWN0aW9uMScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2gnLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlLmRldGFpbC5kZXRhaWwgIT09ICdoZWxsbyB3b3JsZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgnZXJyb3InKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uID0gZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RpdicpO1xuXG4gICAgICAgICAgICBmaXJlQ3VzdG9tRXZlbnQoY29sbGVjdGlvbiwgJ3RvdWNoJywgXCJoZWxsbyB3b3JsZFwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgdG91Y2ggZXZlbnQgb24gY29sbGVjdGlvbjInLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoJywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS5kZXRhaWwuYSAhPT0gJ2hlbGxvIHdvcmxkJykge1xuICAgICAgICAgICAgICAgICAgICBkb25lKCdlcnJvcicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb24gPSBkaXYucXVlcnlTZWxlY3RvckFsbCgnZGl2Jyk7XG5cbiAgICAgICAgICAgIGZpcmVDdXN0b21FdmVudChjb2xsZWN0aW9uLCAndG91Y2gnLCB7YTogXCJoZWxsbyB3b3JsZFwifSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZmlyZSBhIHRvdWNoIGV2ZW50JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb24gPSBkaXYucXVlcnlTZWxlY3RvckFsbCgnZGl2Jyk7XG5cblxuICAgICAgICAgICAgZmlyZUN1c3RvbUV2ZW50KGNvbGxlY3Rpb24sICd0b3VjaCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGZpcmVDdXN0b21FdmVudCh7fSwgJ3RvdWNoJykpLnRvLnRocm93KEVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBEYXRhc291cmNlIH0gZnJvbSBcIi4uL2RhdGFzb3VyY2UubWpzXCI7XG5cbmV4cG9ydCB7IERvbVN0b3JhZ2UgfTtcblxuLyoqXG4gKiBUaGUgRG9tU3RvcmFnZSBpcyBhIGNsYXNzIHRoYXQgc3RvcmVzIGRhdGEgaW4gbWVtb3J5LlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRhdGEuRGF0YXNvdXJjZVxuICovXG5jbGFzcyBEb21TdG9yYWdlIGV4dGVuZHMgRGF0YXNvdXJjZSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIG9wdGlvbnMgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHRoZSBkYXRhc291cmNlLlxuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL2RvbS1zdG9yYWdlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkZWZhdWx0c1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZGVmYXVsdHMucmVhZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gZGVmYXVsdHMucmVhZC5zZWxlY3RvclxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZGVmYXVsdHMud3JpdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGRlZmF1bHRzLndyaXRlLnNlbGVjdG9yXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRyZWFkOiB7XG5cdFx0XHRcdHNlbGVjdG9yOiB1bmRlZmluZWQsXG5cdFx0XHR9LFxuXHRcdFx0d3JpdGU6IHtcblx0XHRcdFx0c2VsZWN0b3I6IHVuZGVmaW5lZCxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICogQHRocm93cyB7RXJyb3J9IFRoZSByZWFkIHNlbGVjdG9yIGlzIG5vdCBkZWZpbmVkXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBUaGVyZSBhcmUgbm8gc3RvcmFnZSBlbGVtZW50XG5cdCAqL1xuXHRyZWFkKCkge1xuXHRcdGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRPcHRpb24oXCJyZWFkLnNlbGVjdG9yXCIsIHVuZGVmaW5lZCk7XG5cdFx0aWYgKCFzZWxlY3Rvcikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlIHJlYWQgc2VsZWN0b3IgaXMgbm90IGRlZmluZWRcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3RvcmFnZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuXHRcdGlmICghc3RvcmFnZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgYXJlIG5vIHN0b3JhZ2UgZWxlbWVudFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgZGF0YSA9IEpTT04ucGFyc2Uoc3RvcmFnZS5pbm5lckhUTUwpO1xuXHRcdFx0XHR0aGlzLnNldChkYXRhKTtcblx0XHRcdFx0cmVzb2x2ZShkYXRhKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBUaGUgd3JpdGUgc2VsZWN0b3IgaXMgbm90IGRlZmluZWRcblx0ICogQHRocm93cyB7RXJyb3J9IFRoZXJlIGFyZSBubyBzdG9yYWdlIGVsZW1lbnRcblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRPcHRpb24oXCJ3cml0ZS5zZWxlY3RvclwiKTtcblx0XHRpZiAoIXNlbGVjdG9yKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgd3JpdGUgc2VsZWN0b3IgaXMgbm90IGRlZmluZWRcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3RvcmFnZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuXHRcdGlmICghc3RvcmFnZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgYXJlIG5vIHN0b3JhZ2UgZWxlbWVudFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0c3RvcmFnZS5pbm5lckhUTUwgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmdldCgpKTtcblx0XHRcdFx0cmVzb2x2ZShzdG9yYWdlKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7RG9tU3RvcmFnZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2UvZG9tLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdTZXJ2ZURvbXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBpdCgnc2hvdWxkIGluaXQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3QgZG9tID0gbmV3IERvbVN0b3JhZ2Uoe1xuICAgICAgICAgICAgXG4gICAgICAgIH0pXG5cbiAgICAgICAgZXhwZWN0KGRvbSkudG8uYmUubm90Lm51bGxcblxuXG4gICAgfSlcblxufSk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0xvY2FsU3RvcmFnZX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9sb2NhbHN0b3JhZ2UubWpzXCI7XG5pbXBvcnQge2NyZWF0ZVN0b3JhZ2V9IGZyb20gXCIuLi8uLi8uLi8uLi91dGlsL2xvY2Fsc3RvcmFnZS5tanNcIjtcblxuXG5sZXQgbG9jYWxTdG9yYWdlUmVmZXJlbmNlO1xuXG5kZXNjcmliZSgnTG9jYWxTdG9yYWdlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgZ2xvYmFsVGhpc1snbG9jYWxTdG9yYWdlJ10gPSBsb2NhbFN0b3JhZ2VSZWZlcmVuY2U7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsb2NhbFN0b3JhZ2VSZWZlcmVuY2UgPSBnbG9iYWxUaGlzWydsb2NhbFN0b3JhZ2UnXVxuICAgICAgICBnbG9iYWxUaGlzWydsb2NhbFN0b3JhZ2UnXSA9IGNyZWF0ZVN0b3JhZ2UoKTtcblxuICAgIH0pXG5cbiAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIExvY2FsU3RvcmFnZSAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTG9jYWxTdG9yYWdlKCdteWtleScpKS50by5iZS5pbnN0YW5jZW9mKExvY2FsU3RvcmFnZSlcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdydycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVhZCBzaG91bGQgcmV0dXJuIG9iamVjdCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdCBkcyA9IG5ldyBMb2NhbFN0b3JhZ2UoJ215a2V5JylcbiAgICAgICAgICAgIGRzLnJlYWQoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCd3cml0ZSBzaG91bGQgJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRzID0gbmV3IExvY2FsU3RvcmFnZSgnbXlrZXknKVxuICAgICAgICAgICAgZHMud3JpdGUoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG5cbn0pIiwgImZ1bmN0aW9uIGNyZWF0ZVN0b3JhZ2UoKSB7XG4gICAgXG4gICAgbGV0IFVOU0VUID0gU3ltYm9sKCk7XG4gICAgbGV0IHMgPSB7fSxcbiAgICAgICAgbm9vcENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICB9LFxuICAgICAgICBfaXRlbUluc2VydGlvbkNhbGxiYWNrID0gbm9vcENhbGxiYWNrO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsICdzZXRJdGVtJywge1xuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoaywgdiA9IFVOU0VUKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHYgPT09IFVOU0VUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEZhaWxlZCB0byBleGVjdXRlICdzZXRJdGVtJyBvbiAnU3RvcmFnZSc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSAxIHByZXNlbnQuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGsgPSBrICsgJyc7XG4gICAgICAgICAgICAgICAgaWYgKCFzLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAgICAgIF9pdGVtSW5zZXJ0aW9uQ2FsbGJhY2socy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzW2tdID0gdiArICcnO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCAnZ2V0SXRlbScsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gayA9PiB7XG4gICAgICAgICAgICAgICAgayA9IGsgKyAnJztcbiAgICAgICAgICAgICAgICBpZiAocy5oYXNPd25Qcm9wZXJ0eShrKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc1trXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsICdyZW1vdmVJdGVtJywge1xuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBrID0+IHtcbiAgICAgICAgICAgICAgICBrID0gayArICcnO1xuICAgICAgICAgICAgICAgIGlmIChzLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzW2tdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgJ2NsZWFyJywge1xuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgayBpbiBzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgc1trXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgJ2xlbmd0aCcsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMocykubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsIFwia2V5XCIsIHtcbiAgICAgICAgdmFsdWU6IGsgPT4ge1xuICAgICAgICAgICAgbGV0IGtleSA9IE9iamVjdC5rZXlzKHMpW2tdO1xuICAgICAgICAgICAgcmV0dXJuICgha2V5KSA/IG51bGwgOiBrZXk7XG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsICdpdGVtSW5zZXJ0aW9uQ2FsbGJhY2snLCB7XG4gICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIF9pdGVtSW5zZXJ0aW9uQ2FsbGJhY2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogdiA9PiB7XG4gICAgICAgICAgICBpZiAoIXYgfHwgdHlwZW9mIHYgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHYgPSBub29wQ2FsbGJhY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfaXRlbUluc2VydGlvbkNhbGxiYWNrID0gdjtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzO1xufVxuXG5cbmV4cG9ydCB7Y3JlYXRlU3RvcmFnZX07IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtTZXNzaW9uU3RvcmFnZX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9zZXNzaW9uc3RvcmFnZS5tanNcIjtcbmltcG9ydCB7Y3JlYXRlU3RvcmFnZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWwvbG9jYWxzdG9yYWdlLm1qc1wiO1xuXG5cbmxldCBzdG9yYWdlUmVmZXJlbmNlO1xuXG5kZXNjcmliZSgnU2Vzc2lvblN0b3JhZ2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBnbG9iYWxUaGlzWydzZXNzaW9uU3RvcmFnZSddID0gc3RvcmFnZVJlZmVyZW5jZTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHN0b3JhZ2VSZWZlcmVuY2UgPSBnbG9iYWxUaGlzWydzZXNzaW9uU3RvcmFnZSddXG4gICAgICAgIGdsb2JhbFRoaXNbJ3Nlc3Npb25TdG9yYWdlJ10gPSBjcmVhdGVTdG9yYWdlKCk7XG5cbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBTZXNzaW9uU3RvcmFnZSAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgU2Vzc2lvblN0b3JhZ2UoJ215a2V5JykpLnRvLmJlLmluc3RhbmNlb2YoU2Vzc2lvblN0b3JhZ2UpXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncncnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3JlYWQgc2hvdWxkIHJldHVybiBvYmplY3QnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3QgZHMgPSBuZXcgU2Vzc2lvblN0b3JhZ2UoJ215a2V5JylcbiAgICAgICAgICAgIGRzLnJlYWQoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCd3cml0ZSBzaG91bGQgJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRzID0gbmV3IFNlc3Npb25TdG9yYWdlKCdteWtleScpXG4gICAgICAgICAgICBkcy53cml0ZSgpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cblxufSkiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7U2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1NlcnZlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGl0KCdzaG91bGQgdHJhbnNmb3JtIGRhdGEnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IHdyaXRlQ2FsbGJhY2tDYWxsZWQgPSBmYWxzZVxuICAgICAgICBsZXQgcmVhZENhbGxiYWNrQ2FsbGVkID0gZmFsc2VcblxuICAgICAgICBjb25zdCBzZXJ2ZXIgPSBuZXcgU2VydmVyKHtcbiAgICAgICAgICAgIHdyaXRlOiB7XG4gICAgICAgICAgICAgICAgbWFwcGluZzoge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lcjogXCJjYWxsOm9uV3JpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbldyaXRlOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlQ2FsbGJhY2tDYWxsZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2hlYXRoaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVtbzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eXo6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBcImRhdGEueHl6XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWFkOiB7XG4gICAgICAgICAgICAgICAgbWFwcGluZzoge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lcjogXCJjYWxsOm9uUmVhZFwiLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uUmVhZDogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2FsbGJhY2tDYWxsZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcGF0aDogJ2RhdGEueHl6JyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBleHBlY3Qoc2VydmVyLnRyYW5zZm9ybVNlcnZlclBheWxvYWQoe2RlbW86IDEsIGRhdGE6IHt4eXo6IDJ9fSkpLnRvLmRlZXAuZXF1YWwoe2RlbW86IDEsIGRhdGE6IHt4eXo6IDJ9fSlcbiAgICAgICAgZXhwZWN0KHNlcnZlci5wcmVwYXJlU2VydmVyUGF5bG9hZCh7ZGVtbzogMSwgZGF0YToge3h5ejogMn19KSkudG8uZGVlcC5lcXVhbCh7ZGVtbzogMSwgZGF0YToge3h5ejogMn19KVxuXG5cbiAgICB9KVxuXG59KTtcbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtXZWJDb25uZWN0fSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvd2ViY29ubmVjdC5tanNcIjtcbmltcG9ydCB7aW5pdFdlYlNvY2tldH0gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWwvd2Vic29ja2V0Lm1qc1wiO1xuXG5jb25zdCB0ZXN0VXJsID0gXCJ3c3M6Ly93cy5wb3N0bWFuLWVjaG8uY29tL3Jhd1wiXG5cbi8vIGNvbnN0IGcgPSBnZXRHbG9iYWwoKTtcbi8vIGdbJ1dlYlNvY2tldCddID0gV1M7XG5cblxuZGVzY3JpYmUoJ1dlYnNvY2tldCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBkcyA9IHVuZGVmaW5lZFxuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRXZWJTb2NrZXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGlmIChkcykge1xuICAgICAgICAgICAgZHMuY2xvc2UoKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gd29ya2Fyb3VuZDogd2l0aG91dCB0aGlzLCB0aGUgbm9kZSB0ZXN0IHdpbGwgaGFuZyBcbiAgICAgICAgZm9yIChjb25zdCBzeW0gb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhkcykpIHtcbiAgICAgICAgICAgIGlmIChzeW0udG9TdHJpbmcoKSA9PT0gJ1N5bWJvbChjb25uZWN0aW9uKScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25uZWN0aW9uID0gZHNbc3ltXVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3ltMiBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGNvbm5lY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzeW0yLnRvU3RyaW5nKCkgPT09ICdTeW1ib2woY29ubmVjdGlvbiknKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzb2NrZXQgPSBjb25uZWN0aW9uW3N5bTJdPy5zb2NrZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc29ja2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzb2NrZXQ/LnRlcm1pbmF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQ/LlsndGVybWluYXRlJ10oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRvbmUoKVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZXQgY2xvbmUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgZHMgPSBuZXcgV2ViQ29ubmVjdCh0ZXN0VXJsKVxuICAgICAgICBjb25zdCBjbG9uZSA9IGRzLmdldENsb25lKClcblxuICAgICAgICBleHBlY3QoY2xvbmUpLnRvLmJlLmFuLmluc3RhbmNlb2YoV2ViQ29ubmVjdClcblxuXG4gICAgfSlcblxuICAgIGl0KCdzaG91bGQgdHJhbnNmb3JtIGRhdGEnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCB3cml0ZUNhbGxiYWNrQ2FsbGVkID0gZmFsc2VcbiAgICAgICAgbGV0IHJlYWRDYWxsYmFja0NhbGxlZCA9IGZhbHNlXG5cbiAgICAgICAgZHMgPSBuZXcgV2ViQ29ubmVjdCh7XG4gICAgICAgICAgICB1cmw6IHRlc3RVcmwsXG4gICAgICAgICAgICB3cml0ZToge1xuICAgICAgICAgICAgICAgIG1hcHBpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZXI6IFwiY2FsbDpvbldyaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgb25Xcml0ZTogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUNhbGxiYWNrQ2FsbGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNoZWF0aGluZzoge1xuICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbW86IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeHl6OiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogXCJkYXRhLnh5elwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVhZDoge1xuICAgICAgICAgICAgICAgIG1hcHBpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZXI6IFwiY2FsbDpvblJlYWRcIixcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvblJlYWQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENhbGxiYWNrQ2FsbGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBhdGg6ICdkYXRhLnh5eicsXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgZHMuY29ubmVjdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZHMuc2V0KHtcbiAgICAgICAgICAgICAgICBlbnZlbG9wOiB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiSGVsbG8gV29ybGRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRzLndyaXRlKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBkcy5zZXQoe30pXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRzLmdldCgpKS50by5iZS5kZWVwLmVxdWFsKHt9KTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG5cbiAgICAgICAgICAgICAgICAgICAgZHMucmVhZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRzLmdldCgpKS50by5iZS5kZWVwLmVxdWFsKHtlbnZlbG9wOnttZXNzYWdlOiBcIkhlbGxvIFdvcmxkXCJ9fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qod3JpdGVDYWxsYmFja0NhbGxlZCkudG8uYmUudHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHJlYWRDYWxsYmFja0NhbGxlZCkudG8uYmUudHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSwgMjAwKVxuXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgfSlcblxuXG4gICAgfSlcblxuICAgIGl0KCdzaG91bGQgY29ubmVjdCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGRzID0gbmV3IFdlYkNvbm5lY3Qoe1xuICAgICAgICAgICAgdXJsOiB0ZXN0VXJsLFxuICAgICAgICAgICAgcmVjb25uZWN0OiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRzLmNvbm5lY3QoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuXG5cbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCBzZW5kIG1lc3NhZ2UnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBkcyA9IG5ldyBXZWJDb25uZWN0KHtcbiAgICAgICAgICAgIHVybDogdGVzdFVybCxcbiAgICAgICAgICAgIHJlY29ubmVjdDoge1xuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBkcy5jb25uZWN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkcy5zZXQoe1xuICAgICAgICAgICAgICAgIGVudmVsb3A6IHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXCJIZWxsbyBXb3JsZFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZHMud3JpdGUoKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIGRzLnNldCh7fSlcbiAgICAgICAgICAgICAgICBleHBlY3QoZHMuZ2V0KCkpLnRvLmJlLmRlZXAuZXF1YWwoe30pO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgZHMucmVhZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZHMuZ2V0KCkpLnRvLmJlLmRlZXAuZXF1YWwoe2VudmVsb3A6e21lc3NhZ2U6IFwiSGVsbG8gV29ybGRcIn19KTtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSw1MDApXG4gICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuXG5cbiAgICB9KS50aW1lb3V0KDEwMDAwKTtcblxufSk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1Jlc3RBUEl9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpLm1qc1wiO1xuaW1wb3J0IHt2YWxpZGF0ZU9iamVjdH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZGVzY3JpYmUoJ1Jlc3RBUEknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgZmV0Y2hSZWZlcmVuY2U7XG4gICAgbGV0IHJldHVyblN0YXR1cztcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGdsb2JhbFRoaXNbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgIHJldHVyblN0YXR1cyA9IDIwMDtcbiAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxUaGlzWydmZXRjaCddO1xuICAgICAgICBnbG9iYWxUaGlzWydmZXRjaCddID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogXCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiByZXR1cm5TdGF0dXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfTtcblxuICAgIH0pXG5cbiAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIFJlc3RBUEkgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IFJlc3RBUEkoJ2h0dHBzOi8vbW9uc3RlcmpzLm9yZy9hc3NldHMvd29ybGQuanNvbicpKS50by5iZS5pbnN0YW5jZW9mKFJlc3RBUEkpXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncncnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3JlYWQgc2hvdWxkIHJldHVybiBvYmplY3QnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3QgZHMgPSBuZXcgUmVzdEFQSSh7dXJsOiAnaHR0cHM6Ly9tb25zdGVyanMub3JnL2Fzc2V0cy93b3JsZC5qc29uJ30pXG4gICAgICAgICAgICBkcy5yZWFkKCkudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZU9iamVjdChkYXRhKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnd3JpdGUgc2hvdWxkICcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdCBkcyA9IG5ldyBSZXN0QVBJKHtcbiAgICAgICAgICAgICAgICAgICAgcmVhZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnaHR0cHM6Ly9tb25zdGVyanMub3JnL2Fzc2V0cy93b3JsZC5qc29uJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB3cml0ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnaHR0cHM6Ly9tb25zdGVyanMub3JnL2Fzc2V0cy93b3JsZC5qc29uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdGVkU3RhdHVzOiBbOTldXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICAgICAgICBkcy53cml0ZSgpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShcInNob3VsZCBub3QgYmUgaGVyZVwiKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZSgpKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdydyB3aXRoIGVycm9ycycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVhZCBzaG91bGQgdGhyb3cgZXhjZXB0aW9uJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVyblN0YXR1cyA9IDQwMDsgLy8gZmV0Y2ggcmVzcG9uc2Ugd2l0aCA0MDBcblxuICAgICAgICAgICAgY29uc3QgZHMgPSBuZXcgUmVzdEFQSSh7dXJsOiAnaHR0cHM6Ly9tb25zdGVyanMub3JnL2Fzc2V0cy93b3JsZC5qc29uJ30pXG4gICAgICAgICAgICBkcy5yZWFkKCkudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKFwic2hvdWxkIG5vdCBydW4uXCIpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKCkpOyAvLyBzaG91bGQgdGhyb3cgZXhjZXB0aW9uIGJlY2F1c2UgcmV0dXJuU3RhdHVzPTQwMFxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnd3JpdGUgc2hvdWxkICcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm5TdGF0dXMgPSA0MDA7IC8vIGZldGNoIHJlc3BvbnNlIHdpdGggNDAwXG4gICAgICAgICAgICBjb25zdCBkcyA9IG5ldyBSZXN0QVBJKHt1cmw6ICdodHRwczovL21vbnN0ZXJqcy5vcmcvYXNzZXRzL3dvcmxkLmpzb24nfSwge3VybDogJ2h0dHBzOi8vbW9uc3RlcmpzLm9yZy9hc3NldHMvd29ybGQuanNvbid9KVxuICAgICAgICAgICAgZHMud3JpdGUoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlT2JqZWN0KGRhdGEpO1xuICAgICAgICAgICAgICAgIGRvbmUoXCJlcnJvclwiKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZSgpKTsgLy8gc2hvdWxkIHRocm93IGV4Y2VwdGlvbiBiZWNhdXNlIHJldHVyblN0YXR1cz00MDBcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cblxufSlcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7RGF0YXNvdXJjZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2UubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0RhdGFzb3VyY2UnLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgRGF0YXNvdXJjZSAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgRGF0YXNvdXJjZSgpKS50by5iZS5pbnN0YW5jZW9mKERhdGFzb3VyY2UpXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnT3B0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3NldE9wdGlvbiBzaG91bGQgY2hhbmdlIHZhbHVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZGF0YXNvdXJjZSA9IG5ldyBEYXRhc291cmNlKCk7XG4gICAgICAgICAgICBleHBlY3QoZGF0YXNvdXJjZS5nZXRPcHRpb24oJ2RlZmF1bHQnKSkudG8uYmUudW5kZWZpbmVkXG4gICAgICAgICAgICBkYXRhc291cmNlLnNldE9wdGlvbignZGVmYXVsdCcsIHRydWUpXG4gICAgICAgICAgICBleHBlY3QoZGF0YXNvdXJjZS5nZXRPcHRpb24oJ2RlZmF1bHQnKSkudG8uYmUudHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2V0T3B0aW9ucyBzaG91bGQgc2V0IGFsbCB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhc291cmNlID0gbmV3IERhdGFzb3VyY2UoKTtcbiAgICAgICAgICAgIGV4cGVjdChkYXRhc291cmNlLmdldE9wdGlvbignZGVmYXVsdCcpKS50by5iZS51bmRlZmluZWRcbiAgICAgICAgICAgIGRhdGFzb3VyY2Uuc2V0T3B0aW9ucyh7ZGVmYXVsdDogdHJ1ZX0pXG4gICAgICAgICAgICBleHBlY3QoZGF0YXNvdXJjZS5nZXRPcHRpb24oJ2RlZmF1bHQnKSkudG8uYmUudHJ1ZVxuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgncncnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGRhdGFzb3VyY2UgPSBuZXcgRGF0YXNvdXJjZSgpO1xuICAgICAgICBpdCgncmVhZCBzaG91bGQgdGhyb3cgZXhlcHRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZGF0YXNvdXJjZS5yZWFkKCkpLnRvLnRocm93KEVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpdCgnd3JpdGUgc2hvdWxkIHRocm93IGV4ZXB0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGRhdGFzb3VyY2UucmVhZCgpKS50by50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuICAgIFxuICAgIGRlc2NyaWJlKCdnZXQvc2V0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBkYXRhc291cmNlID0gbmV3IERhdGFzb3VyY2UoKTtcbiAgICAgICAgaXQoJ2dldCBzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCggZGF0YXNvdXJjZS5nZXQoKSkudG8uYmUuZXFsKHt9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpdCgnd3JpdGUgc2hvdWxkIHRocm93IGV4ZXB0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCBkYXRhc291cmNlLmdldCgpKS50by5iZS5lcWwoe30pO1xuICAgICAgICAgICAgZXhwZWN0KCBkYXRhc291cmNlLnNldCh7YTonbXl2YWx1ZSd9KSkudG8uYmUuaW5zdGFuY2VvZihEYXRhc291cmNlKTtcbiAgICAgICAgICAgIGV4cGVjdCggZGF0YXNvdXJjZS5nZXQoKSkudG8uYmUuZXFsKHthOidteXZhbHVlJ30pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuXG59KSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7YnVpbGRNYXB9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZGF0YS9idWlsZG1hcC5tanNcIjtcblxuXG5kZXNjcmliZSgnYnVpbGRNYXAnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgY29udmVydE1hcFJlc3VsdCA9IGZ1bmN0aW9uIChyKSB7XG4gICAgICAgIGlmIChyIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICByID0gT2JqZWN0LmZyb21FbnRyaWVzKHIpO1xuICAgICAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgICAgIHIgPSByLm1hcCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydE1hcFJlc3VsdChlKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIG9dIG9mIE9iamVjdC5lbnRyaWVzKHIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJba10gPSBjb252ZXJ0TWFwUmVzdWx0KG8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIGRlc2NyaWJlKCdidWlsZCBNYXAgd2l0aCBjYWxsYmFjaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ2RlZmluaXRpb24gc2hvdWxkIHJldHVybiBtYXAgd2l0aCBzdWIgYW5kIHBhcmVudCBrZXlzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgb2JqID0ge1xuICAgICAgICAgICAgICAgIFwiZGF0YVwiOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJDYXNzYW5kcmFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZW5yaWNobWVudFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAxLCBsYWJlbDogXCJYWFNcIiwgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDIsIGxhYmVsOiBcIlhTXCIsIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAzLCBsYWJlbDogXCJTXCIsIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiA0LCBsYWJlbDogXCJMXCIsIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiWWVzc2V5IVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlbnJpY2htZW50XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDEsIGxhYmVsOiBcIlhYU1wiLCBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQyd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMiwgbGFiZWw6IFwiWFNcIiwgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDMsIGxhYmVsOiBcIlNcIiwgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDQsIGxhYmVsOiBcIkxcIiwgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsZXQgY2FsbGJhY2sgPSBmdW5jdGlvbiAoc3ViamVjdCkge1xuICAgICAgICAgICAgICAgIGxldCBtID0gbmV3IE1hcDtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2ksIGJdIG9mIE9iamVjdC5lbnRyaWVzKHN1YmplY3QuZGF0YSkpIHtcblxuICAgICAgICAgICAgICAgICAgICBsZXQga2V5MSA9IGk7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaiwgY10gb2YgT2JqZWN0LmVudHJpZXMoYi5lbnJpY2htZW50LnZhcmlhbnRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleTIgPSBqO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCBkXSBvZiBPYmplY3QuZW50cmllcyhjLnByaWNlKSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleTMgPSBrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5uYW1lID0gYi5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQubGFiZWwgPSBjLmxhYmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuaWQgPSBba2V5MSwga2V5Miwga2V5M10uam9pbignLicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5zZXQoZC5pZCwgZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IG1hcCA9IGJ1aWxkTWFwKG9iaiwgY2FsbGJhY2ssICcke25hbWV9ICR7bGFiZWx9JywgJyR7aWR9JylcbiAgICAgICAgICAgIGxldCBpID0gY29udmVydE1hcFJlc3VsdChtYXApO1xuXG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoaSkpLnRvLmJlLmVxdWFsKCd7XCIwLjAuMFwiOlwiQ2Fzc2FuZHJhIFhYU1wiLFwiMC4wLjFcIjpcIkNhc3NhbmRyYSBYWFNcIixcIjAuMS4wXCI6XCJDYXNzYW5kcmEgWFNcIixcIjAuMS4xXCI6XCJDYXNzYW5kcmEgWFNcIixcIjAuMi4wXCI6XCJDYXNzYW5kcmEgU1wiLFwiMC4yLjFcIjpcIkNhc3NhbmRyYSBTXCIsXCIwLjMuMFwiOlwiQ2Fzc2FuZHJhIExcIixcIjAuMy4xXCI6XCJDYXNzYW5kcmEgTFwiLFwiMS4wLjBcIjpcIlllc3NleSEgWFhTXCIsXCIxLjAuMVwiOlwiWWVzc2V5ISBYWFNcIixcIjEuMS4wXCI6XCJZZXNzZXkhIFhTXCIsXCIxLjEuMVwiOlwiWWVzc2V5ISBYU1wiLFwiMS4yLjBcIjpcIlllc3NleSEgU1wiLFwiMS4yLjFcIjpcIlllc3NleSEgU1wiLFwiMS4zLjBcIjpcIlllc3NleSEgTFwiLFwiMS4zLjFcIjpcIlllc3NleSEgTFwifScpO1xuXG4gICAgICAgIH0pXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdidWlsZCBzdWJtYXAgd2l0aCAqJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnZGVmaW5pdGlvbiBzaG91bGQgcmV0dXJuIHtcIjEwXCI6XCJDYXNzYW5kcmEgMTBcIixcIjIwXCI6XCJZZXNzZXkhIDIwXCJ9JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgb2JqID0ge1xuICAgICAgICAgICAgICAgIFwiZGF0YVwiOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJDYXNzYW5kcmFcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiWWVzc2V5IVwiLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbGV0IG1hcCA9IGJ1aWxkTWFwKG9iaiwgJ2RhdGEuKicsICcke25hbWV9ICR7aWR9JywgJyR7aWR9JylcbiAgICAgICAgICAgIGxldCBpID0gY29udmVydE1hcFJlc3VsdChtYXApO1xuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGkpKS50by5iZS5lcXVhbCgne1wiMTBcIjpcIkNhc3NhbmRyYSAxMFwiLFwiMjBcIjpcIlllc3NleSEgMjBcIn0nKTtcblxuICAgICAgICB9KVxuICAgIH0pXG5cblxuICAgIGRlc2NyaWJlKCdidWlsZCBzdWJtYXAgd2l0aCAqKicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ2RlZmluaXRpb24gc2hvdWxkIHJldHVybiBNYXAnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgXCJkYXRhXCI6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIkNhc3NhbmRyYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlbnJpY2htZW50XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDEsIGxhYmVsOiBcIlhYU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnLCBpZDogMX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJywgaWQ6IDJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMiwgbGFiZWw6IFwiWFNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJywgaWQ6IDN9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQycsIGlkOiA0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDMsIGxhYmVsOiBcIlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJywgaWQ6IDV9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQycsIGlkOiA2fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDQsIGxhYmVsOiBcIkxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJywgaWQ6IDd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQycsIGlkOiA4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJZZXNzZXkhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVucmljaG1lbnRcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMSwgbGFiZWw6IFwiWFhTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQycsIGlkOiA5fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnLCBpZDogMTB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMiwgbGFiZWw6IFwiWFNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJywgaWQ6IDExfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnLCBpZDogMTJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMywgbGFiZWw6IFwiU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnLCBpZDogMTN9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQycsIGlkOiAxNH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnLCBpZDogMTV9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQycsIGlkOiAxNn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDQuMTIgXHUyMEFDJywgaWQ6IDE3fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsZXQgbWFwID0gYnVpbGRNYXAob2JqLCAnZGF0YS4qLmVucmljaG1lbnQudmFyaWFudHMuKi5wcmljZS4qJywgJyR7dmt9ICR7Xi5sYWJlbH0gJHteLl4ubmFtZX0nLCAnJHteLl4uc2t1fScpXG4gICAgICAgICAgICBsZXQgaSA9IGNvbnZlcnRNYXBSZXN1bHQobWFwKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShpKSkudG8uYmUuZXF1YWwoJ3tcImRhdGEuMC5lbnJpY2htZW50LnZhcmlhbnRzLjAucHJpY2UuMFwiOlwiMTIuMTIgXHUyMEFDIFhYUyBDYXNzYW5kcmFcIixcImRhdGEuMC5lbnJpY2htZW50LnZhcmlhbnRzLjAucHJpY2UuMVwiOlwiMTIuMTIgXHUyMEFDIFhYUyBDYXNzYW5kcmFcIixcImRhdGEuMC5lbnJpY2htZW50LnZhcmlhbnRzLjEucHJpY2UuMFwiOlwiMjIuMTIgXHUyMEFDIFhTIENhc3NhbmRyYVwiLFwiZGF0YS4wLmVucmljaG1lbnQudmFyaWFudHMuMS5wcmljZS4xXCI6XCIyMi4xMiBcdTIwQUMgWFMgQ2Fzc2FuZHJhXCIsXCJkYXRhLjAuZW5yaWNobWVudC52YXJpYW50cy4yLnByaWNlLjBcIjpcIjMyLjEyIFx1MjBBQyBTIENhc3NhbmRyYVwiLFwiZGF0YS4wLmVucmljaG1lbnQudmFyaWFudHMuMi5wcmljZS4xXCI6XCIzMi4xMiBcdTIwQUMgUyBDYXNzYW5kcmFcIixcImRhdGEuMC5lbnJpY2htZW50LnZhcmlhbnRzLjMucHJpY2UuMFwiOlwiNDIuMTIgXHUyMEFDIEwgQ2Fzc2FuZHJhXCIsXCJkYXRhLjAuZW5yaWNobWVudC52YXJpYW50cy4zLnByaWNlLjFcIjpcIjQyLjEyIFx1MjBBQyBMIENhc3NhbmRyYVwiLFwiZGF0YS4xLmVucmljaG1lbnQudmFyaWFudHMuMC5wcmljZS4wXCI6XCIxMi4xMiBcdTIwQUMgWFhTIFllc3NleSFcIixcImRhdGEuMS5lbnJpY2htZW50LnZhcmlhbnRzLjAucHJpY2UuMVwiOlwiMTIuMTIgXHUyMEFDIFhYUyBZZXNzZXkhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4xLnByaWNlLjBcIjpcIjIyLjEyIFx1MjBBQyBYUyBZZXNzZXkhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4xLnByaWNlLjFcIjpcIjIyLjEyIFx1MjBBQyBYUyBZZXNzZXkhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4yLnByaWNlLjBcIjpcIjMyLjEyIFx1MjBBQyBTIFllc3NleSFcIixcImRhdGEuMS5lbnJpY2htZW50LnZhcmlhbnRzLjIucHJpY2UuMVwiOlwiMzIuMTIgXHUyMEFDIFMgWWVzc2V5IVwiLFwiZGF0YS4xLmVucmljaG1lbnQudmFyaWFudHMuMy5wcmljZS4wXCI6XCI0Mi4xMiBcdTIwQUMgTCBZZXNzZXkhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4zLnByaWNlLjFcIjpcIjQyLjEyIFx1MjBBQyBMIFllc3NleSFcIixcImRhdGEuMS5lbnJpY2htZW50LnZhcmlhbnRzLjMucHJpY2UuMlwiOlwiNDQuMTIgXHUyMEFDIEwgWWVzc2V5IVwifScpO1xuXG4gICAgICAgIH0pXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdleGFtcGxlY29kZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGV4ZWN1dGUgZXhhbXBsZSBjb2RlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgb2JqID0ge1xuICAgICAgICAgICAgICAgIFwiZGF0YVwiOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJDYXNzYW5kcmFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRkcmVzc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdHJlZXRcIjogXCI0OTMtNDEwNSBWdWxwdXRhdGUgU3RyZWV0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjaXR5XCI6IFwiU2F1bXVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ6aXBcIjogXCI1MjYyOFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJIb2xseVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhZGRyZXNzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0cmVldFwiOiBcIjE3NjIgRWdldCBSZC5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNpdHlcIjogXCJTY2h3YWxiYWNoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ6aXBcIjogXCI5NTIzNDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDMwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiR3V5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFkZHJlc3NcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3RyZWV0XCI6IFwiOTU3LTM4OCBTb2xsaWNpdHVkaW4gQXZlbnVlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjaXR5XCI6IFwiUGFuY2hpXHUwMEUwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ6aXBcIjogXCI0MjA3MjlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbGV0IG1hcDtcbiAgICAgICAgICAgIG1hcCA9IGJ1aWxkTWFwKG9iaiwgJ2RhdGEuKicsICcke25hbWV9ICgke2FkZHJlc3MuemlwfSAke2FkZHJlc3MuY2l0eX0pJywgJ2lkJylcbiAgICAgICAgICAgIGV4cGVjdChtYXApLnRvLmJlLmluc3RhbmNlT2YoTWFwKTtcblxuICAgICAgICAgICAgbWFwID0gYnVpbGRNYXAob2JqLCAnZGF0YS4qJywgJyR7bmFtZX0gKCR7YWRkcmVzcy56aXB9ICR7YWRkcmVzcy5jaXR5fSknKVxuICAgICAgICAgICAgZXhwZWN0KG1hcCkudG8uYmUuaW5zdGFuY2VPZihNYXApO1xuXG4gICAgICAgICAgICBtYXAgPSBidWlsZE1hcChvYmosICdkYXRhLionLCAnJHtuYW1lfSAoJHthZGRyZXNzLnppcH0gJHthZGRyZXNzLmNpdHl9KScsICdpZCcsIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh2YWx1ZVsnaWQnXSA+PSAyMCkgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBleHBlY3QobWFwKS50by5iZS5pbnN0YW5jZU9mKE1hcCk7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdidWlsZG1hcCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBvYmoxID0ge1xuICAgICAgICAgICAgZGF0YXNldDoge1xuICAgICAgICAgICAgICAgIFwiMTAwODJcIjoge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgMVwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgMVwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjEwMDg0XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDJcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDJcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBNYXAgSW5zdGFuY2UuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGJ1aWxkTWFwKHt9LCAnJykpLnRvLmJlLmluc3RhbmNlT2YoTWFwKTtcbiAgICAgICAgfSk7XG5cblxuICAgICAgICBbXG4gICAgICAgICAgICBbb2JqMSwgJ2RhdGFzZXQuKicsICdhZGRyZXNzJywgJ3tcImRhdGFzZXQuMTAwODJcIjpcIkhlcmUgMVwiLFwiZGF0YXNldC4xMDA4NFwiOlwiSGVyZSAyXCJ9J10sXG4gICAgICAgICAgICBbb2JqMSwgJ3gnLCB1bmRlZmluZWQsICd7fSddLFxuICAgICAgICAgICAgW29iajEsICdkYXRhc2V0LionLCAnbmFtZScsICd7XCJkYXRhc2V0LjEwMDgyXCI6XCJUZXN0IDFcIixcImRhdGFzZXQuMTAwODRcIjpcIlRlc3QgMlwifSddLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2J1aWxkTWFwKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcsJyArIEpTT04uc3RyaW5naWZ5KGIpICsgJywnICsgSlNPTi5zdHJpbmdpZnkoYykgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBKU09OLnN0cmluZ2lmeShkKSArICcgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCB0ID0gYnVpbGRNYXAoYSwgYiwgYyk7XG4gICAgICAgICAgICAgICAgbGV0IG0gPSBKU09OLnN0cmluZ2lmeShjb252ZXJ0TWFwUmVzdWx0KHQpKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobSkudG8uYmUuZXF1YWwoZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xufSk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1RyYW5zZm9ybWVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvdHJhbnNmb3JtZXIubWpzXCI7XG5pbXBvcnQge0VtYmVkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXJzL2VtYmVkLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnVHJhbnNmb3JtZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuICAgICAgICBwcm9taXNlcy5wdXNoKGluaXRKU0RPTSgpKTtcbiAgICAgICAgaWYgKCFnbG9iYWxUaGlzWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpc1snY3J5cHRvJ10gPSBuZXcgbS5DcnlwdG8oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9XG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdUcmFuc2Zvcm1lci5ydW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ2RhdGV0aW1lZm9ybWF0JywgXCIyMDIzLTAyLTA0IDA4OjAyOjAxXCIsIFwiMDQuMDIuMjAyMywgMDg6MDI6MDFcIl0sXG4gICAgICAgICAgICBbJ2RhdGV0aW1lZm9ybWF0Omxvbmc6c2hvcnQnLCBcIjIwMjMtMDItMDQgMDg6MDI6MDFcIixcIjQuIEZlYnJ1YXIgMjAyMyB1bSAwODowMlwiXSxcbiAgICAgICAgICAgIFsnZGF0ZXRpbWVmb3JtYXQ6c2hvcnQ6c2hvcnQnLCBcIjIwMjMtMDItMDQgMDg6MDI6MDFcIiwgXCIwNC4wMi4yMywgMDg6MDJcIl0sXG4gICAgICAgICAgICBbJ2VxdWFsczphJywgXCJhXCIsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6YScsIFwiYlwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczozJywgMywgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczozJywgNiwgZmFsc2VdLFxuICAgICAgICAgICAgWydlcXVhbHM6b24nLCB0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOnRydWUnLCB0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOm9uJywgZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOnRydWUnLCBmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgWydlcXVhbHM6b2ZmJywgZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6ZmFsc2UnLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpvZmYnLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpmYWxzZScsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOjMnLCAzLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOjMnLCA2LCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczp1bmRlZmluZWQnLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6dW5kZWZpbmVkJywgMywgZmFsc2VdLFxuICAgICAgICAgICAgWydlcXVhbHM6bnVsbCcsIG51bGwsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6bnVsbCcsIDMsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOjMnLCA2LCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2N1cnJlbmN5JywgXCJFVVIwXCIsIFwiMCwwMFx1MDBBMFx1MjBBQ1wiXSxcbiAgICAgICAgICAgLy8gIFsnY3VycmVuY3k6MToyJywgXCJFVVIxNC4yNVwiLCBcIjE0LDJcdTAwQTBcdTIwQUNcIl0sICBub2RlanMgYW5kIGJyb3dzZXIgaGF2ZSBkaWZmZXJlbnQgcmVzdWx0cyAoaHR0cHM6Ly9naXRsYWIuc2NodWthaS5jb20vb3NzL2xpYnJhcmllcy9qYXZhc2NyaXB0L21vbnN0ZXIvLS9pc3N1ZXMvMTI0KSBcbiAgICAgICAgICAgIFsnY3VycmVuY3knLCBcIkVVUjE0LjI1XCIsIFwiMTQsMjVcdTAwQTBcdTIwQUNcIl0sXG4gICAgICAgICAgICBbJ2RhdGV0aW1lJywgXCIyMDIzLTAyLTE0IDE0OjEyOjEwXCIsIFwiMTQuMi4yMDIzLCAxNDoxMjoxMFwiXSxcbiAgICAgICAgICAgIFsnZGF0ZXRpbWUnLCBcIjIwMjMtMDItMTQgMDg6MDI6MDFcIiwgXCIxNC4yLjIwMjMsIDA4OjAyOjAxXCJdLFxuICAgICAgICAgICAgWydoYXMtZW50cmllcycsIHt9LCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2hhcy1lbnRyaWVzJywge2E6NH0sIHRydWVdLFxuICAgICAgICAgICAgWydoYXMtZW50cmllcycsIFtdLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2hhcy1lbnRyaWVzJywgXCJcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWydoYXMtZW50cmllcycsIFsxLDIsM10sIHRydWVdLFxuICAgICAgICAgICAgWydoYXMtZW50cmllcycsIFsxXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2hhcy1lbnRyaWVzJywgW1wiMVwiXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2hhcy1lbnRyaWVzJywgW3RydWVdLCB0cnVlXSxcbiAgICAgICAgICAgIFsnY29udGFpbnM6eCcsIFwiYXNkIHd4ZCBzZGZcIiwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2NvbnRhaW5zOngnLCBcImFzZCB3ZCBzZGZcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWydjb250YWluczpiJywgW1wiYVwiLFwiYlwiLFwiY1wiXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2NvbnRhaW5zOngnLCBbXCJhXCIsXCJiXCIsXCJjXCJdLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzdW5kZWZpbmVkJywgXCJhXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXN1bmRlZmluZWQnLCBudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzdW5kZWZpbmVkJywgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFsnaXNudWxsJywgXCJhXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXNudWxsJywgbnVsbCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2lzc2V0JywgbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWydpc3NldCcsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgWydpc3NldCcsIFwiXCIsIHRydWVdLFxuICAgICAgICAgICAgWydpc251bWJlcicsIFwiYVwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzbnVtYmVyJywgNCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2lzbnVtYmVyJywgNC41LCB0cnVlXSxcbiAgICAgICAgICAgIFsnaXNpbnRlZ2VyJywgNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzaW50ZWdlcicsIDQsIHRydWVdLFxuICAgICAgICAgICAgWydpc2Zsb2F0JywgNS42LCB0cnVlXSxcbiAgICAgICAgICAgIFsnaXNmbG9hdCcsIDUsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXNvYmplY3QnLCA0LCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzb2JqZWN0Jywge30sIHRydWVdLFxuICAgICAgICAgICAgWydpc2FycmF5JywgW3t9XSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2lzYXJyYXknLCBcImFcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWydub3QnLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ25vdCcsIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFsnbWFwOmE9NDpiPTU6Yz02JywgXCJhXCIsIFwiNFwiXSxcbiAgICAgICAgICAgIFsnZGF0ZScsIFwiMjAyMy0wMi0xNFwiLCBcIjE0LjIuMjAyM1wiXSxcbiAgICAgICAgICAgIFsneWVhcicsIFwiMjAyMy0wMi0xNFwiLCAyMDIzXSxcbiAgICAgICAgICAgIFsnbW9udGgnLCBcIjIwMjMtMDItMTRcIiwgMl0sXG4gICAgICAgICAgICBbJ2RheScsIFwiMjAyMy0wMi0xNFwiLCAxNF0sXG4gICAgICAgICAgICBbJ3dlZWtkYXknLCBcIjIwMjMtMDItMTRcIiwgMl0sXG4gICAgICAgICAgICBbJ21pbnV0ZXMnLCBcIjIwMjMtMDItMTQgMDY6MTI6MjFcIiwgMTJdLFxuICAgICAgICAgICAgWydzZWNvbmRzJywgXCIyMDIzLTAyLTE0IDA2OjEyOjIxXCIsIDIxXSxcbiAgICAgICAgICAgIFsnaG91cnMnLCBcIjIwMjMtMDItMTQgMDY6MTI6MjFcIiwgNl0sXG4gICAgICAgICAgICBbJ3RpbWUnLCBcIjIwMjMtMDItMTQgMDY6MTI6MjFcIiwgXCIwNjoxMjoyMVwiXSxcbiAgICAgICAgICAgIFsndGltZXN0YW1wJywgXCIyMDIzLTAyLTE0XCIsIDE2NzYzMzI4MDAwMDBdLFxuICAgICAgICAgICAgWydjb25jYXQ6YS5iLmM6dGVzdDphLmIuZCcsIHthOiB7Yjoge2M6IDQsIGQ6IDZ9fX0sIFwiNHRlc3Q2XCJdLFxuICAgICAgICAgICAgWydjb25jYXQ6YS5iLmM6XFxcXCBcXFxcIDphLmIuZCcsIHthOiB7Yjoge2M6IDQsIGQ6IDZ9fX0sIFwiNCAgNlwiXSxcbiAgICAgICAgICAgIFsnY29uY2F0OmEuYi5jOiw6YS5iLmQnLCB7YToge2I6IHtjOiA0LCBkOiA2fX19LCBcIjQsNlwiXSxcbiAgICAgICAgICAgIFsnY29uY2F0OmEuYi5jOiw6XFxcXCA6YS5iLmQnLCB7YToge2I6IHtjOiA0LCBkOiA2fX19LCBcIjQsIDZcIl0sXG4gICAgICAgICAgICBbJz8/OmEnLCBudWxsLCAnYSddLFxuICAgICAgICAgICAgWyc/PzphJywgdW5kZWZpbmVkLCAnYSddLFxuICAgICAgICAgICAgWyc/PzphJywgJ3RydWUnLCAndHJ1ZSddLFxuICAgICAgICAgICAgWyc/PzphJywgZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnIGlmOmE6ICcsIGZhbHNlLCB1bmRlZmluZWRdLCAvLyB3aXRob3V0IFxcXFxcbiAgICAgICAgICAgIFsnIGlmOmE6XFxcXCAnLCBmYWxzZSwgXCIgXCJdLFxuICAgICAgICAgICAgWycgaWY6YTpcXFxcICcsIHRydWUsIFwiYVwiXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDp5ZXMnLCBudWxsLCAneWVzJ10sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6eWVzJywgdW5kZWZpbmVkLCAneWVzJ10sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6MTpib29sJywgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDpvbjpib29sJywgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDp0cnVlOmJvb2wnLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgWydkZWZhdWx0Onllczpib29sJywgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDp1bmRlZmluZWQ6Ym9vbCcsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgWydkZWZhdWx0OmZhbHNlOmJvb2wnLCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDoxOmludCcsIHVuZGVmaW5lZCwgMV0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6MTpzdHJpbmcnLCB1bmRlZmluZWQsICcxJ10sXG4gICAgICAgICAgICBbJ2ZpcnN0LWtleScsIHthOiAxLCBjOiAzLCBiOiAyfSwgMV0sXG4gICAgICAgICAgICBbJ2xhc3Qta2V5Jywge2E6IDEsIGM6IDMsIGI6IDJ9LCAzXSxcbiAgICAgICAgICAgIFsnbnRoLWxhc3Qta2V5OjAnLCB7YTogMSwgYzogMywgYjogMn0sIDNdLFxuICAgICAgICAgICAgWydudGgtbGFzdC1rZXk6MScsIHthOiAxLCBjOiAzLCBiOiAyfSwgMl0sXG4gICAgICAgICAgICBbJ250aC1sYXN0LWtleToyJywge2E6IDEsIGM6IDMsIGI6IDJ9LCAxXSxcbiAgICAgICAgICAgIFsnbnRoLWtleToyJywge2E6IDEsIGI6IDIsIGM6IDN9LCAzXSxcbiAgICAgICAgICAgIFsnbnRoLWtleTowJywge2M6IDMsIGE6IDEsIGI6IDJ9LCAxXSxcbiAgICAgICAgICAgIFsnbnRoLWtleToyJywge2E6IDEsIGM6IDMsIGI6IDJ9LCAzXSxcbiAgICAgICAgICAgIFsncHJlZml4OkhlbGxvXFxcXCAnLCAndGVzdCcsIFwiSGVsbG8gdGVzdFwiXSxcbiAgICAgICAgICAgIFsndG9qc29uJywge2E6IDR9LCBcIntcXFwiYVxcXCI6NH1cIl0sXG4gICAgICAgICAgICBbJ3ByZWZpeDphXFxcXFxcXFw6ICcsICd0ZXN0JywgXCJhXFxcXHRlc3RcIl0sXG4gICAgICAgICAgICBbJ3ByZWZpeDphXFxcXCAnLCAndGVzdCcsIFwiYSB0ZXN0XCJdLFxuICAgICAgICAgICAgWydzdGF0aWM6YWJjOmE6Yjp4JywgXCJ0ZXN0XCIsIFwiYWJjOmE6Yjp4XCJdLFxuICAgICAgICAgICAgWyd0b2xvd2VyY2FzZScsIFwiQTpiOkNzZTRcIiwgXCJhOmI6Y3NlNFwiXSxcbiAgICAgICAgICAgIFsndG91cHBlcicsIFwiQTpiOkNzZTRcIiwgXCJBOkI6Q1NFNFwiXSxcbiAgICAgICAgICAgIFsndG9zdHJpbmcnLCA1LCBcIjVcIl0sXG4gICAgICAgICAgICBbJ3Rvc3RyaW5nJywgWzEsIDIsIDMsIHt9XSwgXCIxLDIsMyxbb2JqZWN0IE9iamVjdF1cIl0sXG4gICAgICAgICAgICBbJ3RvaW50ZWdlcicsIFwiNVwiLCA1XSxcbiAgICAgICAgICAgIFsndHJpbScsIFwiIDUgXCIsIFwiNVwiXSxcbiAgICAgICAgICAgIFsndHJpbScsIFwiIGFcIiwgXCJhXCJdLFxuICAgICAgICAgICAgWyd0cmltJywgXCIgXCIsIFwiXCJdLFxuICAgICAgICAgICAgWydyYXd1cmxlbmNvZGUnLCBcIlx1MDBGQ1x1MDBGNlx1MDBFNFwiLCBcIiVDMyVCQyVDMyVCNiVDMyVBNFwiXSxcbiAgICAgICAgICAgIFsnY2FsbDp0ZXN0Y2FsbGJhY2s6NDo1OjYnLCBcInRlc3RcIiwgXCJ0ZXN0NDU2XCJdLFxuICAgICAgICAgICAgWydwbGFpbicsICd0PGJyPmVzdCcsIFwidGVzdFwiXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywgdHJ1ZSwgXCJhXCJdLFxuICAgICAgICAgICAgWydpZjphOmInLCAnb24nLCBcImFcIl0sXG4gICAgICAgICAgICBbJ2lmOmE6YicsICd0cnVlJywgXCJhXCJdLFxuICAgICAgICAgICAgWydpZjphOmInLCAnZmFsc2UnLCBcImJcIl0sXG4gICAgICAgICAgICBbJ2lmOmE6YicsIDksIFwiYVwiXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywgJycsIFwiYlwiXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywgdW5kZWZpbmVkLCBcImJcIl0sXG4gICAgICAgICAgICBbJ2lmOmE6YicsIGZhbHNlLCBcImJcIl0sXG4gICAgICAgICAgICBbJ3VjZmlyc3QnLCAnY2FyJywgXCJDYXJcIl0sXG4gICAgICAgICAgICBbJ3VjZmlyc3QnLCAnY0FyJywgXCJDQXJcIl0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6dGVzdCcsICdhJywgXCJhXCJdLFxuICAgICAgICAgICAgWydkZWZhdWx0OnRlc3QnLCB1bmRlZmluZWQsIFwidGVzdFwiXSxcbiAgICAgICAgICAgIFsnZnJvbWpzb24nLCAne30nLCB7fV0sXG4gICAgICAgICAgICBbJ2Zyb21qc29uJywgJ3tcImFcIjoxfScsIHthOiAxfV0sXG4gICAgICAgICAgICBbJ3Vjd29yZHMnLCAnY0FyIHJ1bnMnLCBcIkNBciBSdW5zXCJdLFxuICAgICAgICAgICAgWyd0b2ludGVnZXInLCAnNicsIDZdLFxuICAgICAgICAgICAgWydsZW5ndGgnLCAndGVzdCcsIDRdLFxuICAgICAgICAgICAgWyd0by1iYXNlNjQnLCAnSGVsbG8gV29ybGQhJywgXCJTR1ZzYkc4Z1YyOXliR1FoXCJdLFxuICAgICAgICAgICAgWydmcm9tLWJhc2U2NCcsICdTR1ZzYkc4Z1YyOXliR1FoJywgXCJIZWxsbyBXb3JsZCFcIl0sXG4gICAgICAgICAgICBbJ3RvLWJhc2U2NCcsICd0ZXN0JywgXCJkR1Z6ZEE9PVwiXSxcbiAgICAgICAgICAgIFsnZnJvbS1iYXNlNjQnLCBcImRHVnpkQT09XCIsICd0ZXN0J10sXG4gICAgICAgICAgICBbJ3ByZWZpeDphJywgJ3Rlc3QnLCBcImF0ZXN0XCJdLFxuICAgICAgICAgICAgWydzdWZmaXg6YScsICd0ZXN0JywgXCJ0ZXN0YVwiXSxcbiAgICAgICAgICAgIFsnaW5kZXg6YScsIHthOiA0fSwgNF0sXG4gICAgICAgICAgICBbJ2luZGV4OjInLCBbMiwgNCwgN10sIDddLFxuICAgICAgICAgICAgWydpbmRleDp4OnRlc3QnLCBbMiwgNCwgN10sICd0ZXN0J10sXG4gICAgICAgICAgICBbJ3BhdGg6YS5iLmMnLCB7YToge2I6IHtjOiA0fX19LCA0XSxcbiAgICAgICAgICAgIFsncGF0aDphLmIuZCcsIHthOiB7Yjoge2M6IDR9fX0sIHVuZGVmaW5lZF0sXG4gICAgICAgICAgICBbJ2luZGV4OmEnLCBuZXcgTWFwKCkuc2V0KCdhJywgNSksIDVdLFxuICAgICAgICAgICAgWydzdWJzdHJpbmc6Mjo0JywgJ2FiY2RlZmdoaWprbG1ub3AnLCAnY2RlZiddLFxuICAgICAgICAgICAgWydub3AnLCAnYWJjZGVmZ2hpamtsbW5vcCcsICdhYmNkZWZnaGlqa2xtbm9wJ10sXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ1RyYW5zZm9ybWVyLnJ1bignICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKS5ydW4oJyArIEpTT04uc3RyaW5naWZ5KGIpICsgJykgc2hvdWxkIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoYyksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IG5ldyBUcmFuc2Zvcm1lcihhKTtcblxuICAgICAgICAgICAgICAgIHQuc2V0Q2FsbGJhY2soJ3Rlc3RjYWxsYmFjaycsIGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhICsgYiArIGMgKyBkO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgciA9IHQucnVuKGIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChyKS50by5iZS5lcWwoYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdUcmFuc2Zvcm1lci5ydW4oKSB0aHJvd3MgRXJyb3InLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0b2xvd2VyY2FzZScsIFtdXSxcbiAgICAgICAgICAgIFsndG9sb3dlcmNhc2UnLCB7fV0sXG4gICAgICAgICAgICBbJ3RvbG93ZXJjYXNlJywgNC41XSxcbiAgICAgICAgICAgIFsndG91cHBlcicsIHRydWVdLFxuICAgICAgICAgICAgWyd0b3VwcGVyJywgNV0sXG4gICAgICAgICAgICBbJ3RvaW50ZWdlcicsIFwiYVwiXSxcbiAgICAgICAgICAgIFsndHJpbScsIDVdLFxuICAgICAgICAgICAgWyd0cmltJywgdHJ1ZV0sXG4gICAgICAgICAgICBbJ3RyaW0nLCB7fV0sXG4gICAgICAgICAgICBbJ3RyaW0nLCBbXV0sXG4gICAgICAgICAgICBbJ3Jhd3VybGVuY29kZScsIFtdXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywge31dLFxuICAgICAgICAgICAgWyd1Y3dvcmRzJywge31dLFxuICAgICAgICAgICAgWyd1Y3dvcmRzJywgZmFsc2VdLFxuICAgICAgICAgICAgWyd1Y3dvcmRzJywgNF0sXG4gICAgICAgICAgICBbJ3BhdGg6YS5iLmMnLCBcIlwiLCA0XSxcbiAgICAgICAgICAgIFsndG9pbnRlZ2VyJywge31dLFxuICAgICAgICAgICAgWydiYXNlNjQnLCB7fV0sXG4gICAgICAgICAgICBbJ2Zyb21qc29uJywgJyddLFxuICAgICAgICAgICAgWydwcmVmaXgnLCB7fV0sXG4gICAgICAgICAgICBbJ3N1ZmZpeCcsIHt9XSxcbiAgICAgICAgICAgIFsnaW5kZXgnLCBcInRlc3RcIl0sXG4gICAgICAgICAgICBbJ3h4eHh4eCcsIFwidGVzdFwiXSwgLy8gdW5zdXBwb3J0ZWQgY29tbWFuZFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdUcmFuc2Zvcm1lci5ydW4oJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykucnVuKCcgKyBKU09OLnN0cmluZ2lmeShiKSArICcpIHNob3VsZCB0aHJvdyBFcnJvciAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBuZXcgVHJhbnNmb3JtZXIoYSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHQucnVuKGIpKS50by50aHJvdyhFcnJvcilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ25ldyBUcmFuc2Zvcm1lcigpLnJ1bihcInVuaXFpZFwiKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gU3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHQgPSBuZXcgVHJhbnNmb3JtZXIoJ3VuaXFpZCcpO1xuICAgICAgICAgICAgZXhwZWN0KHQucnVuKFwiXCIpKS50by5iZS5hKCdzdHJpbmcnKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCduZXcgVHJhbnNmb3JtZXIoKS5ydW4oXCJkZWZhdWx0OmV5SmlJam94ZlE9PTpvYmplY3RcIiknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIE9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB0ID0gbmV3IFRyYW5zZm9ybWVyKCdkZWZhdWx0OmV5SmlJam94ZlE9PTpvYmplY3QnKTtcbiAgICAgICAgICAgIGV4cGVjdCh0LnJ1bih1bmRlZmluZWQpKS50by5lcWwoe2I6IDF9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ25ldyBUcmFuc2Zvcm1lcigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIFRyYW5zZm9ybWVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBUcmFuc2Zvcm1lcihcIlwiKSkudG8uaW5zdGFuY2VPZihUcmFuc2Zvcm1lcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgVHJhbnNmb3JtZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFRyYW5zZm9ybWVyKFwic3VmZml4OmFiY1wiKSkudG8uaW5zdGFuY2VPZihUcmFuc2Zvcm1lcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdmYWxzZSBhcyBhcmd1bWVudCBzaG91bGQgdGhyb3cgVHlwZUVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBuZXcgVHJhbnNmb3JtZXIoZmFsc2UpXG4gICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnb2JqZWN0IGFzIGFyZ3VtZW50IHNob3VsZCB0aHJvdyBUeXBlRXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIG5ldyBUcmFuc2Zvcm1lcih7fSlcbiAgICAgICAgICAgIH0pLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnaTE4bicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgaHRtbDEgPSBgXG48ZGl2IGlkPVwibW9jay10cmFuc2xhdGlvbnNcIj48L2Rpdj5cbjxzY3JpcHQgdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIiBkYXRhLW1vbnN0ZXItcm9sZT1cInRyYW5zbGF0aW9uc1wiPlxuICAgIHtcbiAgICAgICAgXCJ0ZXN0MVwiOiBcInh5elwiLFxuICAgICAgICBcInRlc3QzXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ4eXpcIlxuICAgICAgICB9XG4gICAgfVxuPC9zY3JpcHQ+ICBcbmA7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoZG9uZSkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgICAgIGxldCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2stdHJhbnNsYXRpb25zJyk7XG4gICAgICAgICAgICBFbWJlZC5hc3NpZ25UcmFuc2xhdGlvbnNUb0VsZW1lbnQoZWxlbSkudGhlbigobykgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnaTE4bjp0ZXN0MScsIFwiXCIsIFwieHl6XCJdLFxuICAgICAgICAgICAgWydpMThuOicsIFwidGVzdDFcIiwgXCJ4eXpcIl0sIC8vIGtleSBieSB2YWx1ZVxuICAgICAgICAgICAgWydpMThuOjonLCBcInRlc3QxXCIsIFwieHl6XCJdLCAvLyBrZXkgYnkgdmFsdWUgbm8gZGVmYXVsdFxuICAgICAgICAgICAgWydpMThuOjplZWUnLCBcInRlc3QyXCIsIFwiZWVlXCJdLCAvLyBrZXkgYnkgdmFsdWUgd2l0aCBkZWZhdWx0XG4gICAgICAgICAgICBbJ2kxOG46OmRkZCcsIFwidGVzdDJcIiwgXCJkZGRcIl0sIC8vIGtleSBieSB2YWx1ZSBhbmQgZGVmYXVsdFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgdHJhbnNmb3JtKCcgKyBhICsgJykucnVuKCcgKyBiICsgJykgcmV0dXJuICcgKyBKU09OLnN0cmluZ2lmeShjKSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBuZXcgVHJhbnNmb3JtZXIoYSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHQucnVuKGIpKS50by5iZS5lcWwoYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9KVxuXG5cbn0pOyIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7ZGlmZn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kYXRhL2RpZmYubWpzXCI7XG5pbXBvcnQge1F1ZXVlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3F1ZXVlLm1qc1wiO1xuXG5kZXNjcmliZSgnRGlmZicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdEaWZmIHNwZWNpYWwgY2FzZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgdmFyIG9iajEsIG9iajI7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBvYmoxID0ge1xuICAgICAgICAgICAgICAgIFwiY291bnRcIjogMSxcbiAgICAgICAgICAgICAgICBcInJlYXNvblwiOiBudWxsLFxuICAgICAgICAgICAgICAgIFwiaW5mb1wiOiBcInRlc3RcIixcbiAgICAgICAgICAgICAgICBcImV4Y2hhbmdlXCI6IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgb2JqMiA9IHtcbiAgICAgICAgICAgICAgICBcImNvdW50XCI6IDIsXG4gICAgICAgICAgICAgICAgXCJyZWFzb25cIjogbnVsbCxcbiAgICAgICAgICAgICAgICBcImluZm9cIjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIFwiZXhjaGFuZ2VcIjogW11cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ0RpZmYgdmFsdWUgd2l0aCBudWxsICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gZGlmZihvYmoxLCBvYmoyKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShkKSkuaXMuZXF1YWwoJ1t7XCJvcGVyYXRvclwiOlwidXBkYXRlXCIsXCJwYXRoXCI6W1wiY291bnRcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6MSxcInR5cGVcIjpcIm51bWJlclwifSxcInNlY29uZFwiOntcInZhbHVlXCI6MixcInR5cGVcIjpcIm51bWJlclwifX0se1wib3BlcmF0b3JcIjpcImRlbGV0ZVwiLFwicGF0aFwiOltcImluZm9cIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6XCJ0ZXN0XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIn19XScpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnRGlmZiBpZGVudGljYWwgdmFsdWUgd2l0aCBudWxsICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gZGlmZihvYmoxLCBvYmoxKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShkKSkuaXMuZXF1YWwoJ1tdJyk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG4gICAgY29uc3QgZGF0ZTEgPSBuZXcgRGF0ZTtcblxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0RhdGUvcGFyc2VcbiAgICBjb25zdCBkYXRlMiA9IERhdGUucGFyc2UoJzAxIEphbiAxOTcwIDAwOjAwOjAwIEdNVCcpO1xuICAgIGNvbnN0IGRhdGUzID0gRGF0ZS5wYXJzZSgnMDQgRGVjIDE5OTUgMDA6MTI6MDAgR01UJyk7IC8vIE51bWJlclxuICAgIGNvbnN0IGRhdGU0ID0gRGF0ZS5wYXJzZSgnMDQgRGVjIDE5OTUgMDA6MTI6MDEgR01UJyk7IC8vIE51bWJlclxuXG4gICAgY29uc3QgZGF0ZTUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKCcwNCBEZWMgMTk5NSAwMDoxMjowMSBHTVQnKSk7IC8vIERhdGVcbiAgICBjb25zdCBkYXRlNiA9IG5ldyBEYXRlKERhdGUucGFyc2UoJzA0IERlYyAxOTk1IDAwOjEyOjAyIEdNVCcpKTsgLy8gRGF0ZVxuXG4gICAgW1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IG5ldyBRdWV1ZSgpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwiYWRkXCIsXCJwYXRoXCI6W1wiYVwiXSxcInNlY29uZFwiOntcInZhbHVlXCI6e1wiZGF0YVwiOltdfSxcInR5cGVcIjpcIm9iamVjdFwiLFwiaW5zdGFuY2VcIjpcIlF1ZXVlXCJ9fV0nXG4gICAgICAgIF0sXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjogMVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYzoge1xuICAgICAgICAgICAgICAgICAgICBkOiAyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGU6IDNcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGY6IHtcbiAgICAgICAgICAgICAgICAgICAgZDogMlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJkZWxldGVcIixcInBhdGhcIjpbXCJhXCIsXCJiXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOjEsXCJ0eXBlXCI6XCJudW1iZXJcIn19LHtcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJhXCIsXCJlXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjozLFwidHlwZVwiOlwibnVtYmVyXCJ9fSx7XCJvcGVyYXRvclwiOlwiZGVsZXRlXCIsXCJwYXRoXCI6W1wiY1wiXSxcImZpcnN0XCI6e1widmFsdWVcIjp7XCJkXCI6Mn0sXCJ0eXBlXCI6XCJvYmplY3RcIixcImluc3RhbmNlXCI6XCJPYmplY3RcIn19LHtcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJmXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjp7XCJkXCI6Mn0sXCJ0eXBlXCI6XCJvYmplY3RcIixcImluc3RhbmNlXCI6XCJPYmplY3RcIn19XSdcbiAgICAgICAgXSxcblxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogZGF0ZTEsXG4gICAgICAgICAgICAgICAgYzogZGF0ZTRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogZGF0ZTIsXG4gICAgICAgICAgICAgICAgYjogZGF0ZTNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJ1cGRhdGVcIixcInBhdGhcIjpbXCJhXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOlwiJyArIGRhdGUxLnRvSVNPU3RyaW5nKCkgKyAnXCIsXCJ0eXBlXCI6XCJvYmplY3RcIixcImluc3RhbmNlXCI6XCJEYXRlXCJ9LFwic2Vjb25kXCI6e1widmFsdWVcIjowLFwidHlwZVwiOlwibnVtYmVyXCJ9fSx7XCJvcGVyYXRvclwiOlwiZGVsZXRlXCIsXCJwYXRoXCI6W1wiY1wiXSxcImZpcnN0XCI6e1widmFsdWVcIjo4MTgwMzU5MjEwMDAsXCJ0eXBlXCI6XCJudW1iZXJcIn19LHtcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJiXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjo4MTgwMzU5MjAwMDAsXCJ0eXBlXCI6XCJudW1iZXJcIn19XSdcbiAgICAgICAgXSxcblxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogZGF0ZTVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYjogZGF0ZTZcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJkZWxldGVcIixcInBhdGhcIjpbXCJhXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOlwiMTk5NS0xMi0wNFQwMDoxMjowMS4wMDBaXCIsXCJ0eXBlXCI6XCJvYmplY3RcIixcImluc3RhbmNlXCI6XCJEYXRlXCJ9fSx7XCJvcGVyYXRvclwiOlwiYWRkXCIsXCJwYXRoXCI6W1wiYlwiXSxcInNlY29uZFwiOntcInZhbHVlXCI6XCIxOTk1LTEyLTA0VDAwOjEyOjAyLjAwMFpcIixcInR5cGVcIjpcIm9iamVjdFwiLFwiaW5zdGFuY2VcIjpcIkRhdGVcIn19XSdcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IGRhdGUxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IGRhdGUxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1tdJ1xuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBkYXRlM1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcImFkZFwiLFwicGF0aFwiOltcImFcIl0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOjgxODAzNTkyMDAwMCxcInR5cGVcIjpcIm51bWJlclwifX1dJ1xuICAgICAgICBdLFxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBkYXRlMlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBkYXRlM1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcInVwZGF0ZVwiLFwicGF0aFwiOltcImFcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6MCxcInR5cGVcIjpcIm51bWJlclwifSxcInNlY29uZFwiOntcInZhbHVlXCI6ODE4MDM1OTIwMDAwLFwidHlwZVwiOlwibnVtYmVyXCJ9fV0nXG4gICAgICAgIF0sXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogMlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcInVwZGF0ZVwiLFwicGF0aFwiOltcImFcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6MSxcInR5cGVcIjpcIm51bWJlclwifSxcInNlY29uZFwiOntcInZhbHVlXCI6MixcInR5cGVcIjpcIm51bWJlclwifX1dJ1xuICAgICAgICBdLFxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiAxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHg6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJkZWxldGVcIixcInBhdGhcIjpbXCJhXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOjEsXCJ0eXBlXCI6XCJudW1iZXJcIn19LHtcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJ4XCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjoxLFwidHlwZVwiOlwibnVtYmVyXCJ9fV0nXG4gICAgICAgIF0sXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogMixcbiAgICAgICAgICAgICAgICB4OiAxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwidXBkYXRlXCIsXCJwYXRoXCI6W1wiYVwiXSxcImZpcnN0XCI6e1widmFsdWVcIjoxLFwidHlwZVwiOlwibnVtYmVyXCJ9LFwic2Vjb25kXCI6e1widmFsdWVcIjoyLFwidHlwZVwiOlwibnVtYmVyXCJ9fSx7XCJvcGVyYXRvclwiOlwiYWRkXCIsXCJwYXRoXCI6W1wieFwiXSxcInNlY29uZFwiOntcInZhbHVlXCI6MSxcInR5cGVcIjpcIm51bWJlclwifX1dJ1xuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogbnVsbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwiZGVsZXRlXCIsXCJwYXRoXCI6W1wiYVwiXSxcImZpcnN0XCI6e1widmFsdWVcIjpudWxsLFwidHlwZVwiOlwib2JqZWN0XCJ9fV0nXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IG51bGxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW10nXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IG51bGxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJhXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjpudWxsLFwidHlwZVwiOlwib2JqZWN0XCJ9fV0nXG4gICAgICAgIF0sIFtcbiAgICAgICAge30sXG4gICAgICAgIHthOiB1bmRlZmluZWR9LFxuICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJhXCJdLFwic2Vjb25kXCI6e1widHlwZVwiOlwidW5kZWZpbmVkXCJ9fV0nXG4gICAgXVxuXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgaXQoJ0RpZmYgc2hvdWxkIHJlc3VsdCAnICsgYywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBkaWZmKGEsIGIpO1xuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGQpKS5pcy5lcXVhbChjKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG59KSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7YnVpbGRUcmVlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvYnVpbGR0cmVlLm1qc1wiO1xuaW1wb3J0IHtOb2RlTGlzdH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9ub2RlbGlzdC5tanNcIjtcblxuXG5kZXNjcmliZSgnYnVpbGRUcmVlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ2V4YW1wbGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gZXhhbXBsZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3Qgb2JqZWN0cyA9IHtcbiAgICAgICAgICAgICAgICBkYXRhc2V0OiB7XG4gICAgICAgICAgICAgICAgICAgIFwiMVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCIxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInZlaGljbGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogbnVsbFxuXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiMlwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCIyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcImNhclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjFcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIjNcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiM1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJ0cnVja1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjFcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIjRcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiNFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb3RvcmN5Y2xlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMVwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiNVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCI1XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNVVlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjJcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIjZcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzcG9ydHMgY2FyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMlwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gYnVpbGRUcmVlKG9iamVjdHMsICdkYXRhc2V0LionLCAnaWQnLCAncGFyZW50Jyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChub2RlcykudG8uYmUuaW5zdGFuY2VPZihOb2RlTGlzdCk7XG4gICAgICAgICAgICBleHBlY3Qobm9kZXMubGVuZ3RoKS50by5lcXVhbCgxKTtcbiAgICAgICAgICAgIGV4cGVjdChub2Rlcy50b1N0cmluZygpKS50by5iZS5lcXVhbCgne1wiaWRcIjpcIjFcIixcIm5hbWVcIjpcInZlaGljbGVcIixcInBhcmVudFwiOm51bGx9XFxuIFx1MjUxQ3tcImlkXCI6XCIyXCIsXCJuYW1lXCI6XCJjYXJcIixcInBhcmVudFwiOlwiMVwifVxcbiB8IFx1MjUxQ3tcImlkXCI6XCI1XCIsXCJuYW1lXCI6XCJTVVZcIixcInBhcmVudFwiOlwiMlwifVxcbiB8IFx1MjUxNHtcImlkXCI6XCI2XCIsXCJuYW1lXCI6XCJzcG9ydHMgY2FyXCIsXCJwYXJlbnRcIjpcIjJcIn1cXG4gXHUyNTFDe1wiaWRcIjpcIjNcIixcIm5hbWVcIjpcInRydWNrXCIsXCJwYXJlbnRcIjpcIjFcIn1cXG4gXHUyNTE0e1wiaWRcIjpcIjRcIixcIm5hbWVcIjpcIm1vdG9yY3ljbGVcIixcInBhcmVudFwiOlwiMVwifScgKTtcblxuXG4gICAgICAgIH0pXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdidWlsZFRyZWUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgb2JqMSA9IHtcbiAgICAgICAgICAgIGRhdGFzZXQ6IHtcbiAgICAgICAgICAgICAgICBcIjFcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCIxXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCAxXCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSAxXCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogbnVsbFxuXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjJcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCIyXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCAyXCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSAyXCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIxXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiM1wiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjNcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDNcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDNcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjJcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCI0XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiNFwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgNFwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgNFwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMlwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjVcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCI1XCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCA1XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSA1XCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIxXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiNlwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjZcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDZcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDZcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBOb2RlIEluc3RhbmNlLicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChidWlsZFRyZWUoe30sICcnKSkudG8uYmUuaW5zdGFuY2VPZihOb2RlTGlzdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtvYmoxLCAnZGF0YXNldC4qJywgJ3tcImlkXCI6XCIxXCIsXCJuYW1lXCI6XCJUZXN0IDFcIixcImFkZHJlc3NcIjpcIkhlcmUgMVwiLFwicGFyZW50XCI6bnVsbH1cXG4gXHUyNTFDe1wiaWRcIjpcIjJcIixcIm5hbWVcIjpcIlRlc3QgMlwiLFwiYWRkcmVzc1wiOlwiSGVyZSAyXCIsXCJwYXJlbnRcIjpcIjFcIn1cXG4gfCBcdTI1MUN7XCJpZFwiOlwiM1wiLFwibmFtZVwiOlwiVGVzdCAzXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDNcIixcInBhcmVudFwiOlwiMlwifVxcbiB8IFx1MjUxNHtcImlkXCI6XCI0XCIsXCJuYW1lXCI6XCJUZXN0IDRcIixcImFkZHJlc3NcIjpcIkhlcmUgNFwiLFwicGFyZW50XCI6XCIyXCJ9XFxuIHwgfCBcdTI1MTR7XCJpZFwiOlwiNlwiLFwibmFtZVwiOlwiVGVzdCA2XCIsXCJhZGRyZXNzXCI6XCJIZXJlIDZcIixcInBhcmVudFwiOlwiNFwifVxcbiBcdTI1MTR7XCJpZFwiOlwiNVwiLFwibmFtZVwiOlwiVGVzdCA1XCIsXCJhZGRyZXNzXCI6XCJIZXJlIDVcIixcInBhcmVudFwiOlwiMVwifSddLFxuICAgICAgICAgICAgW29iajEsICd4JywgJyddLFxuICAgICAgICAgICAgW29iajEsICdkYXRhc2V0LionLCAne1wiaWRcIjpcIjFcIixcIm5hbWVcIjpcIlRlc3QgMVwiLFwiYWRkcmVzc1wiOlwiSGVyZSAxXCIsXCJwYXJlbnRcIjpudWxsfVxcbiBcdTI1MUN7XCJpZFwiOlwiMlwiLFwibmFtZVwiOlwiVGVzdCAyXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDJcIixcInBhcmVudFwiOlwiMVwifVxcbiB8IFx1MjUxQ3tcImlkXCI6XCIzXCIsXCJuYW1lXCI6XCJUZXN0IDNcIixcImFkZHJlc3NcIjpcIkhlcmUgM1wiLFwicGFyZW50XCI6XCIyXCJ9XFxuIHwgXHUyNTE0e1wiaWRcIjpcIjRcIixcIm5hbWVcIjpcIlRlc3QgNFwiLFwiYWRkcmVzc1wiOlwiSGVyZSA0XCIsXCJwYXJlbnRcIjpcIjJcIn1cXG4gfCB8IFx1MjUxNHtcImlkXCI6XCI2XCIsXCJuYW1lXCI6XCJUZXN0IDZcIixcImFkZHJlc3NcIjpcIkhlcmUgNlwiLFwicGFyZW50XCI6XCI0XCJ9XFxuIFx1MjUxNHtcImlkXCI6XCI1XCIsXCJuYW1lXCI6XCJUZXN0IDVcIixcImFkZHJlc3NcIjpcIkhlcmUgNVwiLFwicGFyZW50XCI6XCIxXCJ9J10sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdidWlsZFRyZWUoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJywnICsgSlNPTi5zdHJpbmdpZnkoYikgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBKU09OLnN0cmluZ2lmeShjKSArICcgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBub2RlbGlzdCA9IGJ1aWxkVHJlZShhLCBiLCAnaWQnLCAncGFyZW50Jyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5vZGVsaXN0LnRvU3RyaW5nKCkpLnRvLmJlLmVxbChjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnYnVpbGRUcmVlKCkgdGVzdCAyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiAyXG4gICAgICAgICAqICAgIDFcbiAgICAgICAgICogICAgM1xuICAgICAgICAgKiA0XG4gICAgICAgICAqICAgIDZcbiAgICAgICAgICogNVxuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgbGV0IG9iajEgPSB7XG4gICAgICAgICAgICBkYXRhc2V0OiB7XG4gICAgICAgICAgICAgICAgXCIxXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiMVwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgMVwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgMVwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMlwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjJcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCIyXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCAyXCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSAyXCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIwXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiM1wiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjNcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDNcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDNcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjJcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCI0XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiNFwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgNFwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgNFwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjVcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCI1XCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCA1XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSA1XCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIwXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiNlwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjZcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDZcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDZcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjRcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCI3XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiN1wiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgN1wiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgN1wiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIE5vZGUgSW5zdGFuY2UuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGJ1aWxkVHJlZSh7fSwgJycpKS50by5iZS5pbnN0YW5jZU9mKE5vZGVMaXN0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW29iajEsICdkYXRhc2V0LionLCAne1wiaWRcIjpcIjJcIixcIm5hbWVcIjpcIlRlc3QgMlwiLFwiYWRkcmVzc1wiOlwiSGVyZSAyXCIsXCJwYXJlbnRcIjpcIjBcIn1cXG4gXHUyNTFDe1wiaWRcIjpcIjFcIixcIm5hbWVcIjpcIlRlc3QgMVwiLFwiYWRkcmVzc1wiOlwiSGVyZSAxXCIsXCJwYXJlbnRcIjpcIjJcIn1cXG4gfCBcdTI1MTR7XCJpZFwiOlwiN1wiLFwibmFtZVwiOlwiVGVzdCA3XCIsXCJhZGRyZXNzXCI6XCJIZXJlIDdcIixcInBhcmVudFwiOlwiMVwifVxcbiBcdTI1MTR7XCJpZFwiOlwiM1wiLFwibmFtZVwiOlwiVGVzdCAzXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDNcIixcInBhcmVudFwiOlwiMlwifVxcbntcImlkXCI6XCI0XCIsXCJuYW1lXCI6XCJUZXN0IDRcIixcImFkZHJlc3NcIjpcIkhlcmUgNFwiLFwicGFyZW50XCI6XCIwXCJ9XFxuIFx1MjUxNHtcImlkXCI6XCI2XCIsXCJuYW1lXCI6XCJUZXN0IDZcIixcImFkZHJlc3NcIjpcIkhlcmUgNlwiLFwicGFyZW50XCI6XCI0XCJ9XFxue1wiaWRcIjpcIjVcIixcIm5hbWVcIjpcIlRlc3QgNVwiLFwiYWRkcmVzc1wiOlwiSGVyZSA1XCIsXCJwYXJlbnRcIjpcIjBcIn0nXSxcbiAgICAgICAgICAgIFtvYmoxLCAneCcsICcnXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2J1aWxkVHJlZSgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnLCcgKyBKU09OLnN0cmluZ2lmeShiKSArICcpIHNob3VsZCByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGMpICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5vZGVsaXN0ID0gYnVpbGRUcmVlKGEsIGIsICdpZCcsICdwYXJlbnQnLCB7XG4gICAgICAgICAgICAgICAgICAgIHJvb3RSZWZlcmVuY2VzOiBbJzAnXVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5vZGVsaXN0LnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKGMpO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbn0pO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtQYXRoZmluZGVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcblxuZGVzY3JpYmUoJ1BhdGhmaW5kZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgY29udmVydE1hcFJlc3VsdCA9IGZ1bmN0aW9uIChyKSB7XG4gICAgICAgIGlmIChyIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICByID0gT2JqZWN0LmZyb21FbnRyaWVzKHIpO1xuICAgICAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgICAgIHIgPSByLm1hcCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydE1hcFJlc3VsdChlKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIG9dIG9mIE9iamVjdC5lbnRyaWVzKHIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJba10gPSBjb252ZXJ0TWFwUmVzdWx0KG8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByO1xuICAgIH1cblxuXG4gICAgZGVzY3JpYmUoJ3dpdGggV2lsZGNhcmQgYW5kIEl0ZXJhdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBwZiwgb2JqO1xuXG4gICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgb2JqID0ge1xuICAgICAgICAgICAgICAgIGE6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogXCIxLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBcIjEtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ6ICchJ1xuXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiMi0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogXCIyLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkOiAnPydcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBmID0gbmV3IFBhdGhmaW5kZXIob2JqKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWydhLiouYi4qJywgJ3tcIjBcIjp7XCIwXCI6e1wiY1wiOlwiMS0xXCJ9LFwiMVwiOntcImNcIjpcIjEtMlwifX0sXCIxXCI6e1wiMFwiOntcImNcIjpcIjItMVwifSxcIjFcIjp7XCJjXCI6XCIyLTJcIn19fSddLFxuICAgICAgICAgICAgWydhLiouYicsICd7XCIwXCI6W3tcImNcIjpcIjEtMVwifSx7XCJjXCI6XCIxLTJcIn1dLFwiMVwiOlt7XCJjXCI6XCIyLTFcIn0se1wiY1wiOlwiMi0yXCJ9XX0nXSxcbiAgICAgICAgICAgIFsnYS4xLmInLCAnW3tcImNcIjpcIjItMVwifSx7XCJjXCI6XCIyLTJcIn1dJ10sXG4gICAgICAgICAgICBbJ2EuMC5iJywgJ1t7XCJjXCI6XCIxLTFcIn0se1wiY1wiOlwiMS0yXCJ9XSddLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICAgICAgaXQoJy5zZXRWaWEoJyArIGEgKyAnKSBzaG91bGQgcmVzdWx0IGluICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHIgPSBwZi5nZXRWaWEoYSk7XG4gICAgICAgICAgICAgICAgbGV0IGkgPSBjb252ZXJ0TWFwUmVzdWx0KHIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShpKSkuaXMuZXF1YWwoYik7XG4gICAgICAgICAgICB9KTtcblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ2FwaSB0ZXN0cycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgcGF0aGZpbmRlciwgb2JqZWN0O1xuXG5cbiAgICAgICAgY2xhc3MgQSB7XG4gICAgICAgICAgICBnZXQgYSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgIG9iamVjdCA9IHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LCBcInRlc3QxXCIsIGZhbHNlLCB1bmRlZmluZWQsIHBhcnNlSW50KFwiYVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk6IFtcInRlc3QyXCJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGo6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgazogKG5ldyBNYXApLnNldCgnbScsIHtuOiAzfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBsOiAobmV3IFNldCkuYWRkKHtuOiA0fSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYjogbmV3IEFcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHBhdGhmaW5kZXIgPSBuZXcgUGF0aGZpbmRlcihvYmplY3QpO1xuXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBuZXcgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWzEyXSxcbiAgICAgICAgICAgICAgICBbdW5kZWZpbmVkXSxcbiAgICAgICAgICAgICAgICBbbnVsbF0sXG4gICAgICAgICAgICAgICAgW1widGVzdFwiXVxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBsYWJlbCA9IHR5cGVvZiBhO1xuICAgICAgICAgICAgICAgIGlmIChhID09PSBudWxsKSBsYWJlbCA9ICdudWxsJztcblxuXG4gICAgICAgICAgICAgICAgaXQobGFiZWwgKyAnIHNob3VsZCB0aHJvdyBlcnJvcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFBhdGhmaW5kZXIoYSlcbiAgICAgICAgICAgICAgICAgICAgfSkudG8udGhyb3coRXJyb3IpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnLnNldFZpYSh4KScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IHBmLCBvYmo7XG5cbiAgICAgICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIG9iaiA9IHt9XG4gICAgICAgICAgICAgICAgcGYgPSBuZXcgUGF0aGZpbmRlcihvYmopO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ2EuYi4wLjAuYycsIHRydWUsICd7XCJhXCI6e1wiYlwiOltbe1wiY1wiOnRydWV9XV19fSddLFxuICAgICAgICAgICAgICAgIFsnYS5iLjAuYycsIHRydWUsICd7XCJhXCI6e1wiYlwiOlt7XCJjXCI6dHJ1ZX1dfX0nXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi4zLmMnLCB0cnVlLCAne1wiYVwiOntcImJcIjpbbnVsbCxudWxsLG51bGwse1wiY1wiOnRydWV9XX19J10sXG4gICAgICAgICAgICAgICAgWydhLmIuYycsIHRydWUsICd7XCJhXCI6e1wiYlwiOntcImNcIjp0cnVlfX19J11cbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICAgICAgICAgIGl0KCcuc2V0VmlhKCcgKyBhICsgJywgJyArIGIgKyAnKSBzaG91bGQgcmVzdWx0IGluICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHBmLnNldFZpYShhLCBiKVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkob2JqKSkuaXMuZXF1YWwoYyk7XG4gICAgICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnLnNldFZpYSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgYTtcbiAgICAgICAgICAgIGxldCBiO1xuICAgICAgICAgICAgbGV0IGM7XG5cbiAgICAgICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGEgPSBcImEueFwiO1xuICAgICAgICAgICAgICAgIGIgPSBcInRydWVcIjtcbiAgICAgICAgICAgICAgICBjID0gXCJhLnkuZFwiO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoJy5zZXRWaWEoJyArIGEgKyAnLCAnICsgYiArICcpIHNob3VsZCByZXR1cm4gUGF0aGZpbmRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QocGF0aGZpbmRlci5zZXRWaWEoYSwgYikpLmlzLmluc3RhbmNlT2YoUGF0aGZpbmRlcik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJy5zZXRWaWEoJyArIGEgKyAnLCAnICsgYiArICcpIHNob3VsZCBjaGFuZ2Ugb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHBhdGhmaW5kZXIuc2V0VmlhKGEsIGIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShvYmplY3QpKS5pcy5lcXVhbCgne1wiYVwiOntcImJcIjp7XCJjXCI6WzQsXCJ0ZXN0MVwiLGZhbHNlLG51bGwsbnVsbF0sXCJlXCI6ZmFsc2UsXCJmXCI6W3tcImdcIjpmYWxzZSxcImhcIjozLFwiaVwiOltcInRlc3QyXCJdfV0sXCJqXCI6e30sXCJrXCI6e30sXCJsXCI6e319LFwieFwiOlwidHJ1ZVwifSxcImJcIjp7fX0nKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnLnNldFZpYSgnICsgYyArICcsICcgKyBiICsgJykgc2hvdWxkIGNoYW5nZSBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcGF0aGZpbmRlci5zZXRWaWEoYywgYik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KG9iamVjdCkpLmlzLmVxdWFsKCd7XCJhXCI6e1wiYlwiOntcImNcIjpbNCxcInRlc3QxXCIsZmFsc2UsbnVsbCxudWxsXSxcImVcIjpmYWxzZSxcImZcIjpbe1wiZ1wiOmZhbHNlLFwiaFwiOjMsXCJpXCI6W1widGVzdDJcIl19XSxcImpcIjp7fSxcImtcIjp7fSxcImxcIjp7fX0sXCJ5XCI6e1wiZFwiOlwidHJ1ZVwifX0sXCJiXCI6e319Jyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuXG4gICAgICAgIGRlc2NyaWJlKCcuZXhpc3RzKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWydhLmIuYy4xJywgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgWydiLmEnLCB0cnVlXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi54JywgZmFsc2VdLFxuICAgICAgICAgICAgICAgIFsnYS54JywgZmFsc2VdLFxuICAgICAgICAgICAgICAgIFsnYS5iLnEnLCBmYWxzZV0sXG4gICAgICAgICAgICAgICAgWydhLmIuYy4wJywgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgWydhLmIuZCcsIHRydWVdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmYuMC5nJywgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgWydhLmIuZi4wLmkuMCcsIHRydWVdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmYuMC5pLjInLCBmYWxzZV0sXG4gICAgICAgICAgICAgICAgWydhLmIuZScsIHRydWVdLFxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICAgICAgICAgIGl0KCcuZXhpc3RzKCcgKyBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiArICcgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QocGF0aGZpbmRlci5leGlzdHMoYSkpLmlzLmVxdWFsKGIpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJy5kZWxldGVWaWEoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ2EuYi5lJywgJ3tcImFcIjp7XCJiXCI6e1wiY1wiOls0LFwidGVzdDFcIixmYWxzZSxudWxsLG51bGxdLFwiZlwiOlt7XCJnXCI6ZmFsc2UsXCJoXCI6MyxcImlcIjpbXCJ0ZXN0MlwiXX1dLFwialwiOnt9LFwia1wiOnt9LFwibFwiOnt9fX0sXCJiXCI6e319J10sXG4gICAgICAgICAgICAgICAgWydhLmIuZicsICd7XCJhXCI6e1wiYlwiOntcImNcIjpbNCxcInRlc3QxXCIsZmFsc2UsbnVsbCxudWxsXSxcImVcIjpmYWxzZSxcImpcIjp7fSxcImtcIjp7fSxcImxcIjp7fX19LFwiYlwiOnt9fSddLFxuICAgICAgICAgICAgICAgIFsnYS5iLmonLCAne1wiYVwiOntcImJcIjp7XCJjXCI6WzQsXCJ0ZXN0MVwiLGZhbHNlLG51bGwsbnVsbF0sXCJlXCI6ZmFsc2UsXCJmXCI6W3tcImdcIjpmYWxzZSxcImhcIjozLFwiaVwiOltcInRlc3QyXCJdfV0sXCJrXCI6e30sXCJsXCI6e319fSxcImJcIjp7fX0nXSxcblxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgICAgICBpdCgnLmRlbGV0ZVZpYSgnICsgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIgKyAnICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aGZpbmRlci5kZWxldGVWaWEoYSlcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KG9iamVjdCkpLmlzLmVxdWFsKGIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCcuZ2V0VmlhKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkZXNjcmliZSgnLmdldFZpYSgpJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgICAgICBvYmplY3QgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LCBcInRlc3QxXCIsIGZhbHNlLCB1bmRlZmluZWQsIHBhcnNlSW50KFwiYVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOiBbXCJ0ZXN0MlwiXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazogKG5ldyBNYXApLnNldCgnbScsIHtuOiAzfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IChuZXcgU2V0KS5hZGQoe246IDR9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3A6IHtxOiAxLCByOiB0cnVlfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cDoge3E6IDIsIHI6IHRydWV9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwOiB7cTogMywgcjogdHJ1ZX19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3A6IHtxOiA0LCByOiB0cnVlfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cDoge3E6IDUsIHI6IHRydWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7YTogMX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7YTogMn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2OiB7YTogM30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiB7YTogNH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBwYXRoZmluZGVyID0gbmV3IFBhdGhmaW5kZXIob2JqZWN0KTtcblxuXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIFsnYS4qJywgJ1tbXCJiXCIse1wiY1wiOls0LFwidGVzdDFcIixmYWxzZSxudWxsLG51bGxdLFwiZVwiOmZhbHNlLFwiZlwiOlt7XCJnXCI6ZmFsc2UsXCJoXCI6MyxcImlcIjpbXCJ0ZXN0MlwiXX1dLFwialwiOnt9LFwia1wiOnt9LFwibFwiOnt9LFwib1wiOlt7XCJwXCI6e1wicVwiOjEsXCJyXCI6dHJ1ZX19LHtcInBcIjp7XCJxXCI6MixcInJcIjp0cnVlfX0se1wicFwiOntcInFcIjozLFwiclwiOnRydWV9fSx7XCJwXCI6e1wicVwiOjQsXCJyXCI6dHJ1ZX19LHtcInBcIjp7XCJxXCI6NSxcInJcIjp0cnVlfX1dLFwic1wiOntcInRcIjp7XCJhXCI6MX0sXCJ1XCI6e1wiYVwiOjJ9LFwidlwiOntcImFcIjozfSxcInhcIjp7XCJhXCI6NH19fV1dJ10sXG4gICAgICAgICAgICAgICAgICAgIFsnYS5iLnMuKi5hJywgJ1tbXCJ0XCIsMV0sW1widVwiLDJdLFtcInZcIiwzXSxbXCJ4XCIsNF1dJ10sXG4gICAgICAgICAgICAgICAgICAgIFsnYS5iLnMuKicsICdbW1widFwiLHtcImFcIjoxfV0sW1widVwiLHtcImFcIjoyfV0sW1widlwiLHtcImFcIjozfV0sW1wieFwiLHtcImFcIjo0fV1dJ10sXG4gICAgICAgICAgICAgICAgICAgIFsnYS5iLm8uKi5wLnEnLCAnW1tcIjBcIiwxXSxbXCIxXCIsMl0sW1wiMlwiLDNdLFtcIjNcIiw0XSxbXCI0XCIsNV1dJ10sXG4gICAgICAgICAgICAgICAgICAgIFsnYS5iLm8uKi5wLnInLCAnW1tcIjBcIix0cnVlXSxbXCIxXCIsdHJ1ZV0sW1wiMlwiLHRydWVdLFtcIjNcIix0cnVlXSxbXCI0XCIsdHJ1ZV1dJ10sXG4gICAgICAgICAgICAgICAgICAgIFsnYS5iLm8uKi5wJywgJ1tbXCIwXCIse1wicVwiOjEsXCJyXCI6dHJ1ZX1dLFtcIjFcIix7XCJxXCI6MixcInJcIjp0cnVlfV0sW1wiMlwiLHtcInFcIjozLFwiclwiOnRydWV9XSxbXCIzXCIse1wicVwiOjQsXCJyXCI6dHJ1ZX1dLFtcIjRcIix7XCJxXCI6NSxcInJcIjp0cnVlfV1dJ11cbiAgICAgICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICAgICAgICAgIGl0KCcuZ2V0VmlhKCcgKyBhICsgJykgc2hvdWxkIHJlc3VsdCAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHIgPSBwYXRoZmluZGVyLmdldFZpYShhKVxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20ocikpKS5pcy5lcXVhbChiKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoJy5nZXRWaWEoKSBzaG91bGQgcmVzdWx0ICcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBwID0gbmV3IFBhdGhmaW5kZXIoe1xuICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2M6IDF9LCB7YzogMn1cbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YzogMSwgZDogZmFsc2V9LCB7YzogMn1cbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgciA9IHAuZ2V0VmlhKFwiKi54LiouY1wiKVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gbWFwVG9PYmoobWFwKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB7fVxuICAgICAgICAgICAgICAgICAgICBtYXAuZm9yRWFjaChmdW5jdGlvbiAodiwgaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpba10gPSBtYXBUb09iaih2KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpba10gPSB2XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ialxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShtYXBUb09iaihyKSkpLmlzLmVxdWFsKCd7XCJhXCI6e1wiMFwiOjEsXCIxXCI6Mn0sXCJiXCI6e1wiMFwiOjEsXCIxXCI6Mn19Jyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJy5nZXRWaWEoYS5iLmwuMC5uKSB3aXRoIG1hcCBzaG91bGQgcmV0dXJuIDQgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChwYXRoZmluZGVyLmdldFZpYSgnYS5iLmwuMC5uJykpLmlzLmVxdWFsKDQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ2EuYi5rLm0ubicsIDNdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmwuMC5uJywgNF0sXG4gICAgICAgICAgICAgICAgWydhLngnLCB1bmRlZmluZWRdLFxuICAgICAgICAgICAgICAgIFsnYS5iLnEnLCB1bmRlZmluZWRdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmMuMScsIFwidGVzdDFcIl0sXG4gICAgICAgICAgICAgICAgWydhLmIuYy4wJywgNF0sXG4gICAgICAgICAgICAgICAgWydhLmIuZCcsIHVuZGVmaW5lZF0sXG4gICAgICAgICAgICAgICAgWydhLmIuZi4wLmcnLCBmYWxzZV0sXG4gICAgICAgICAgICAgICAgWydhLmIuZi4wLmkuMCcsIFwidGVzdDJcIl0sXG4gICAgICAgICAgICAgICAgWydhLmIuZScsIGZhbHNlXSxcbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgICAgICAgICBpdCgnLmdldFZpYSgnICsgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIgKyAnICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHBhdGhmaW5kZXIuZ2V0VmlhKGEpKS5pcy5lcXVhbChiKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsnYS5iLmQuZSddLFxuICAgICAgICAgICAgICAgIFsnYS5iLmQueCddLFxuICAgICAgICAgICAgICAgIFsnYS5iLmwuZS5uJ10sXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgICAgICBpdCgnLmdldFZpYSgnICsgYSArICcpIHNob3VsZCB0aHJvdyBFcnJvciAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBwYXRoZmluZGVyLmdldFZpYShhKSkudG8udGhyb3coRXJyb3IpXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG59KTtcblxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtQaXBlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvcGlwZS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7RW1iZWR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZW1iZWQubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1BpcGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuICAgICAgICBpZiAoIWdsb2JhbFRoaXNbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbihtID0+IHtcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzWydjcnlwdG8nXSA9IG5ldyBtLkNyeXB0bygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgIH1cblxuICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdydW4gZGlmZmVyZW50IHBpcGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBbXG4gICAgICAgICAgICBbJ3BhdGg6YiB8IGlmOng6XFxcXCAnLCB7YTogdHJ1ZX0sICcgJ10sICAgLy8gJ1xcXFwgJy5sZW5ndGggXHUyMUE2IDJcbiAgICAgICAgICAgIFsncGF0aDphIHwgaWY6eDpcXFxcICcsIHthOiB0cnVlfSwgJ3gnXSxcbiAgICAgICAgICAgIFsnbm9wJywgJ2FiY2RlZmdoaWprbG1ub3AnLCAnYWJjZGVmZ2hpamtsbW5vcCddLFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdQaXBlLnJ1bignICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKS5ydW4oJyArIEpTT04uc3RyaW5naWZ5KGIpICsgJykgc2hvdWxkIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoYyksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IG5ldyBQaXBlKGEpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgciA9IHQucnVuKGIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChyKS50by5iZS5lcWwoYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnbmV3IFBpcGUgc2hvdWxkIGNyZWF0ZSBuZXcgSW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gSW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFBpcGUoJycpKS50by5iZS5pbnN0YW5jZU9mKFBpcGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBJbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgUGlwZSgnaW5kZXg6YXx0b3VwcGVyIHxwcmVmaXg6YScpLnJ1bih7YTogXCJ0ZXN0XCJ9KSkudG8uYmUuZXF1YWwoJ2FURVNUJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnaW5kZXg6YXx0b3VwcGVyIHxwcmVmaXg6YScsIHthOiBcInRlc3RcIn0sICdhVEVTVCddLFxuICAgICAgICAgICAgWydwYXRoOmEuYi5jLmQgfCB0b3VwcGVyIHwgcHJlZml4OkhlbGxvXFxcXCAnLCB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZDogXCJ3b3JsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAnSGVsbG8gV09STEQnXSxcbiAgICAgICAgICAgIFsncGF0aDphLmIuY3xpbmRleDpkfHRvdXBwZXIgfHN1ZmZpeDp4Jywge2E6IHtiOiB7Yzoge2Q6IFwidGVzdFwifX19fSwgJ1RFU1R4J10sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCduZXcgUGlwZSgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKS5ydW4oJyArIEpTT04uc3RyaW5naWZ5KGIpICsgJykgc2hvdWxkIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoYykgKyAnICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IG5ldyBQaXBlKGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0LnJ1bihiKSkudG8uYmUuZXF1YWwoYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ25ldyBQaXBlIGFuZCBsb2NhbGUnLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgICAgICBsZXQgaHRtbDEgPSBgXG48ZGl2IGlkPVwibW9jay10cmFuc2xhdGlvbnNcIj48L2Rpdj5cbjxzY3JpcHQgdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIiBkYXRhLW1vbnN0ZXItcm9sZT1cInRyYW5zbGF0aW9uc1wiPlxuICAgIHtcbiAgICAgICAgXCI1MVwiOiBcInh5elwiLFxuICAgICAgICBcIjUyXCI6IFwiYWJjXCIsXG4gICAgICAgIFwiNTNcIjogXCJkZWZcIlxuICAgIH1cbjwvc2NyaXB0PiAgXG5gO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKGRvbmUpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrLXRyYW5zbGF0aW9ucycpO1xuICAgICAgICAgICAgRW1iZWQuYXNzaWduVHJhbnNsYXRpb25zVG9FbGVtZW50KGVsZW0pLnRoZW4oKG8pID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsncGF0aDpzdGF0dXMgfCB0b3N0cmluZyB8IGkxOG4nLCB7c3RhdHVzOiA1MX0sIFwieHl6XCJdXG5cblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IHBpcGUgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBvYmogPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBleHBlY3RlZCA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIHRyYW5zZm9ybSgnICsgcGlwZSArICcpLnJ1bignICsgSlNPTi5zdHJpbmdpZnkob2JqKSArICcpIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWQpLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBuZXcgUGlwZShwaXBlKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodC5ydW4ob2JqKSkudG8uYmUuZXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cblxufSk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXh0ZW5kfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuY2xhc3MgTW9ja0ZvckV4dGVuZHMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgIH1cbn1cblxuXG5kZXNjcmliZSgnZXh0ZW5kJywgZnVuY3Rpb24gKCkge1xuXG4gICAgW1xuICAgICAgICBbXG4gICAgICAgICAgICd7XCJ0aGVrZXlcIjp7fX0nLHt9LHt0aGVrZXk6bmV3IE1vY2tGb3JFeHRlbmRzfSBcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3tcImFcIjp7XCJiXCI6W1wiMVwiLFwiMlwiLFwiM1wiXX19JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiMVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIjNcIlxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSwgICAgICAgIFtcbiAgICAgICAgICAgICd7XCJhXCI6e1wiYlwiOjEsXCJkXCI6MX19JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IDFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgZDogMVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG5cbiAgICAgICAgW1xuICAgICAgICAgICAgJ3tcImFcIjp7XCJiXCI6MSxcImRcIjp7XCJ4XCI6W1wiY2FyXCJdLFwiZlwiOnRydWUsXCJnXCI6W119fX0nLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiAxLFxuICAgICAgICAgICAgICAgICAgICBkOiB7eDogW1wiY2FyXCJdfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZzogW11cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIF1cblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBkID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBhID0gZGF0YVxuXG4gICAgICAgIGl0KCcuZXh0ZW5kKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcpIHNob3VsZCByZXN1bHQgaW4gJyArIGQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB4ID0gZXh0ZW5kLmFwcGx5KHRoaXMsIGEpO1xuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KHgpKS5pcy5lcXVhbChkKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbiAgICBbXG5cblxuICAgICAgICBbXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IDEsXG4gICAgICAgICAgICAgICAgICAgIGQ6IFtcImNhclwiXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZzogW11cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7fVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICBdXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgYSA9IGRhdGFcblxuICAgICAgICBpdCgnLmV4dGVuZCgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKSBzaG91bGQgdGhyb3cgRXJyb3IgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGV4dGVuZC5hcHBseSh0aGlzLCBhKSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbn0pIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBBYnN0cmFjdENvbnN0cmFpbnQgfTtcblxuLyoqXG4gKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBkZWZpbmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJ5IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLlxuICpcbiAqIFRoZSB1bmlmb3JtIEFQSSBvZiB0aGUgY29uc3RyYWludHMgYWxsb3dzIGNoYWlucyB0byBiZSBmb3JtZWQuXG4gKlxuICogVGhlIGFic3RyYWN0IGNvbnN0cmFpbnQgZGVmaW5lcyB0aGUgYXBpIGZvciBhbGwgY29uc3RyYWludHMuIG1haW5seSB0aGUgbWV0aG9kIGlzVmFsaWQoKSBpcyBkZWZpbmVkLlxuICpcbiAqIERlcml2ZWQgY2xhc3NlcyBtdXN0IGltcGxlbWVudCB0aGUgbWV0aG9kIGlzVmFsaWQoKS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbnN0cmFpbnRzXG4gKiBAc3VtbWFyeSBUaGUgYWJzdHJhY3QgY29uc3RyYWludFxuICovXG5jbGFzcyBBYnN0cmFjdENvbnN0cmFpbnQgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIHRoaXMgbWV0aG9kIG11c3QgcmV0dXJuIGEgcHJvbWlzZSBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKi9cblx0aXNWYWxpZCh2YWx1ZSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdCh2YWx1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb25zdHJhaW50cy9hYnN0cmFjdC1jb25zdHJhaW50XCIpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBBYnN0cmFjdENvbnN0cmFpbnQgfSBmcm9tIFwiLi9hYnN0cmFjdC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IEludmFsaWQgfTtcblxuLyoqXG4gKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBkZWZpbmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJ5IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLlxuICpcbiAqIFRoZSB1bmlmb3JtIEFQSSBvZiB0aGUgY29uc3RyYWludHMgYWxsb3dzIGNoYWlucyB0byBiZSBmb3JtZWQuXG4gKlxuICogVGhlIGludmFsaWQgY29uc3RyYWludCBhbGxvd3MgYW4gYWx3YXlzIGludmFsaWQgcXVlcnkgdG8gYmUgcGVyZm9ybWVkLiB0aGlzIGNvbnN0cmFpbnQgaXMgbWFpbmx5IGludGVuZGVkIGZvciB0ZXN0aW5nLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9jb25zdHJhaW50cy9pbnZhbGlkLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db25zdHJhaW50c1xuICogQHN1bW1hcnkgQSBjb25zdHJhaW50IHRoYXQgYWx3YXlzIGludmFsaWRcbiAqL1xuY2xhc3MgSW52YWxpZCBleHRlbmRzIEFic3RyYWN0Q29uc3RyYWludCB7XG5cdC8qKlxuXHQgKiB0aGlzIG1ldGhvZCByZXR1cm4gYSByZWplY3RlZCBwcm9taXNlXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRpc1ZhbGlkKHZhbHVlKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbnN0cmFpbnRzL2ludmFsaWRcIik7XG5cdH1cbn1cbiIsICJpbXBvcnQge0ludmFsaWR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvaW52YWxpZC5tanNcIjtcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCdJbnZhbGlkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy5pc1ZhbGlkKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBpc3ZhbGlkID0gbmV3IEludmFsaWQoKVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmVzb2x2ZSBwcm9taXNlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGlzdmFsaWQuaXNWYWxpZCgpLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChlKS50by5iZS51bmRlZmluZWRcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgImltcG9ydCB7QmFzZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHtBYnN0cmFjdE9wZXJhdG9yfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2Fic3RyYWN0b3BlcmF0b3IubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5jbGFzcyBBYnN0cmFjdENvbnN0cmFpbnRNb2NrIGV4dGVuZHMgQmFzZSB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBpc1ZhbGlkKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh2YWx1ZSk7XG4gICAgfVxufVxuXG5cbmRlc2NyaWJlKCdBYnN0cmFjdE9wZXJhdG9yJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiB0aGUgY29uc3RyYWludCBpcyBub3QgY2FsbCB3aXRoIHBhcmFtZXRlcicsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgQWJzdHJhY3RPcGVyYXRvcigpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBub3QgYW4gZXJyb3Igd2hlbiB0aGUgY29uc3RyYWludCBpcyBub3QgY2FsbCB3aXRoIHBhcmFtZXRlcicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBuZXcgQWJzdHJhY3RPcGVyYXRvcihuZXcgQWJzdHJhY3RDb25zdHJhaW50TW9jaygpLCBuZXcgQWJzdHJhY3RDb25zdHJhaW50TW9jaygpKSAgICBcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgIFxuXG4gICAgfSk7XG59KTtcblxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQWJzdHJhY3RDb25zdHJhaW50IH0gZnJvbSBcIi4vYWJzdHJhY3QubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBBYnN0cmFjdE9wZXJhdG9yIH07XG5cbi8qKlxuICogQ29uc3RyYWludHMgYXJlIHVzZWQgdG8gZGVmaW5lIGNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldCBieSB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS5cbiAqXG4gKiBUaGUgdW5pZm9ybSBBUEkgb2YgdGhlIGNvbnN0cmFpbnRzIGFsbG93cyBjaGFpbnMgdG8gYmUgZm9ybWVkLlxuICpcbiAqIE9wZXJhdG9ycyBhbGxvdyB5b3UgdG8gbGluayBjb25zdHJhaW50cyB0b2dldGhlci4gZm9yIGV4YW1wbGUsIHlvdSBjYW4gY2hlY2sgd2hldGhlciBhIHZhbHVlIGlzXG4gKiBhbiBvYmplY3Qgb3IgYW4gYXJyYXkuIGVhY2ggb3BlcmF0b3IgaGFzIHR3byBvcGVyYW5kcyB0aGF0IGFyZSBsaW5rZWQgdG9nZXRoZXIuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db25zdHJhaW50c1xuICogQHN1bW1hcnkgVGhlIGFic3RyYWN0IG9wZXJhdG9yIGNvbnN0cmFpbnRcbiAqL1xuY2xhc3MgQWJzdHJhY3RPcGVyYXRvciBleHRlbmRzIEFic3RyYWN0Q29uc3RyYWludCB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0Fic3RyYWN0Q29uc3RyYWludH0gb3BlcmFudEFcblx0ICogQHBhcmFtIHtBYnN0cmFjdENvbnN0cmFpbnR9IG9wZXJhbnRCXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gXCJwYXJhbWV0ZXJzIG11c3QgYmUgZnJvbSB0eXBlIEFic3RyYWN0Q29uc3RyYWludFwiXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcGVyYW50QSwgb3BlcmFudEIpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKFxuXHRcdFx0IShcblx0XHRcdFx0b3BlcmFudEEgaW5zdGFuY2VvZiBBYnN0cmFjdENvbnN0cmFpbnQgJiZcblx0XHRcdFx0b3BlcmFudEIgaW5zdGFuY2VvZiBBYnN0cmFjdENvbnN0cmFpbnRcblx0XHRcdClcblx0XHQpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJwYXJhbWV0ZXJzIG11c3QgYmUgZnJvbSB0eXBlIEFic3RyYWN0Q29uc3RyYWludFwiKTtcblx0XHR9XG5cblx0XHR0aGlzLm9wZXJhbnRBID0gb3BlcmFudEE7XG5cdFx0dGhpcy5vcGVyYW50QiA9IG9wZXJhbnRCO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludHMvYWJzdHJhY3Qtb3BlcmF0b3JcIik7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEFic3RyYWN0Q29uc3RyYWludCB9IGZyb20gXCIuL2Fic3RyYWN0Lm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgVmFsaWQgfTtcblxuLyoqXG4gKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBkZWZpbmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJ5IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLlxuICpcbiAqIFRoZSB1bmlmb3JtIEFQSSBvZiB0aGUgY29uc3RyYWludHMgYWxsb3dzIGNoYWlucyB0byBiZSBmb3JtZWQuXG4gKlxuICogVGhlIHZhbGlkIGNvbnN0cmFpbnQgYWxsb3dzIGFuIGFsd2F5cyB2YWxpZCBxdWVyeSB0byBiZSBwZXJmb3JtZWQuIHRoaXMgY29uc3RyYWludCBpcyBtYWlubHkgaW50ZW5kZWQgZm9yIHRlc3RpbmcuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2NvbnN0cmFpbnRzL3ZhbGlkLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db25zdHJhaW50c1xuICogQHN1bW1hcnkgQSBjb25zdHJhaW50IHRoYXQgYWx3YXlzIHZhbGlkXG4gKi9cbmNsYXNzIFZhbGlkIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJhaW50IHtcblx0LyoqXG5cdCAqIHRoaXMgbWV0aG9kIHJldHVybiBhIHByb21pc2UgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSBjaGVjay5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICovXG5cdGlzVmFsaWQodmFsdWUpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbnN0cmFpbnRzL3ZhbGlkXCIpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBBYnN0cmFjdE9wZXJhdG9yIH0gZnJvbSBcIi4vYWJzdHJhY3RvcGVyYXRvci5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IE9yT3BlcmF0b3IgfTtcblxuLyoqXG4gKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBkZWZpbmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJ5IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLlxuICpcbiAqIFRoZSB1bmlmb3JtIEFQSSBvZiB0aGUgY29uc3RyYWludHMgYWxsb3dzIGNoYWlucyB0byBiZSBmb3JtZWQuXG4gKlxuICogVGhlIE9yT3BlcmF0b3IgaXMgdXNlZCB0byBsaW5rIHNldmVyYWwgY29uc3RyYWludHMuIFRoZSBjb25zdHJhaW50IGlzIGZ1bGZpbGxlZCBpZiBvbmUgb2YgdGhlIGNvbnN0cmFpbnRzIGlzIGZ1bGZpbGxlZC5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvY29uc3RyYWludHMvb3JvcGVyYXRvci5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29uc3RyYWludHNcbiAqIEBzdW1tYXJ5IEEgb3Igb3BlcmF0b3JcbiAqL1xuY2xhc3MgT3JPcGVyYXRvciBleHRlbmRzIEFic3RyYWN0T3BlcmF0b3Ige1xuXHQvKipcblx0ICogdGhpcyBtZXRob2QgcmV0dXJuIGEgcHJvbWlzZSBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKi9cblx0aXNWYWxpZCh2YWx1ZSkge1xuXHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRsZXQgYTtcblx0XHRcdGxldCBiO1xuXG5cdFx0XHRzZWxmLm9wZXJhbnRBXG5cdFx0XHRcdC5pc1ZhbGlkKHZhbHVlKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGEgPSBmYWxzZTtcblx0XHRcdFx0XHQvKiogYiBoYXMgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZCBhbmQgd2FzIG5vdCB0cnVlICovXG5cdFx0XHRcdFx0aWYgKGIgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0XHRyZWplY3QoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRzZWxmLm9wZXJhbnRCXG5cdFx0XHRcdC5pc1ZhbGlkKHZhbHVlKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGIgPSBmYWxzZTtcblx0XHRcdFx0XHQvKiogYiBoYXMgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZCBhbmQgd2FzIG5vdCB0cnVlICovXG5cdFx0XHRcdFx0aWYgKGEgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0XHRyZWplY3QoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludHMvb3Itb3BlcmF0b3JcIik7XG5cdH1cbn1cbiIsICJpbXBvcnQge1ZhbGlkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL3ZhbGlkLm1qc1wiO1xuaW1wb3J0IHtJbnZhbGlkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2ludmFsaWQubWpzXCI7XG5pbXBvcnQge09yT3BlcmF0b3J9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvb3JvcGVyYXRvci5tanNcIjtcblxuZGVzY3JpYmUoJ09yT3BlcmF0b3InLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmlzVmFsaWQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbbmV3IFZhbGlkKCksIG5ldyBWYWxpZCgpLCB0cnVlXSxcbiAgICAgICAgICAgIFtuZXcgVmFsaWQoKSwgbmV3IEludmFsaWQoKSwgdHJ1ZV0sXG4gICAgICAgICAgICBbbmV3IEludmFsaWQoKSwgbmV3IFZhbGlkKCksIHRydWVdLFxuICAgICAgICAgICAgW25ldyBJbnZhbGlkKCksIG5ldyBJbnZhbGlkKCksIGZhbHNlXVxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnY29uc3RyYWludC5pc1ZhbGlkKCkgc2hvdWxkIHJldHVybiAnICsgYywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBjb25zdHJhaW50ID0gbmV3IE9yT3BlcmF0b3IoYSwgYik7XG4gICAgICAgICAgICAgICAgY29uc3RyYWludC5pc1ZhbGlkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGMgPT09IHRydWUgPyBkb25lKCkgOiBkb25lKG5ldyBFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGMgPT09IHRydWUgPyBkb25lKG5ldyBFcnJvcigpKSA6IGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xufSk7XG5cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RDb25zdHJhaW50IH0gZnJvbSBcIi4vYWJzdHJhY3QubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBJc09iamVjdCB9O1xuXG4vKipcbiAqIENvbnN0cmFpbnRzIGFyZSB1c2VkIHRvIGRlZmluZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgYnkgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuXG4gKlxuICogVGhlIHVuaWZvcm0gQVBJIG9mIHRoZSBjb25zdHJhaW50cyBhbGxvd3MgY2hhaW5zIHRvIGJlIGZvcm1lZC5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvY29uc3RyYWludHMvaXNvYmplY3QubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbnN0cmFpbnRzXG4gKiBAc3VtbWFyeSBBIGNvbnN0cmFpbnQgdG8gY2hlY2sgaWYgYSB2YWx1ZSBpcyBhbiBvYmplY3RcbiAqL1xuY2xhc3MgSXNPYmplY3QgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cmFpbnQge1xuXHQvKipcblx0ICogdGhpcyBtZXRob2QgcmV0dXJuIGEgcHJvbWlzZSBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKi9cblx0aXNWYWxpZCh2YWx1ZSkge1xuXHRcdGlmIChpc09iamVjdCh2YWx1ZSkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdCh2YWx1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb25zdHJhaW50L2lzLW9iamVjdFwiKTtcblx0fVxufVxuIiwgImltcG9ydCB7SXNPYmplY3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvaXNvYmplY3QubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnSXNPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmlzVmFsaWQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGNvbnN0cmFpbnQgPSBuZXcgSXNPYmplY3QoKVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmVzb2x2ZSBwcm9taXNlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnQuaXNWYWxpZCh7fSkudGhlbihyID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3QocikuaXMuYSgnb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJzaG91bGQgbm90IHJlYWNoZWQ6IFwiICsgZSkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEFic3RyYWN0T3BlcmF0b3IgfSBmcm9tIFwiLi9hYnN0cmFjdG9wZXJhdG9yLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgQW5kT3BlcmF0b3IgfTtcblxuLyoqXG4gKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBkZWZpbmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJ5IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLlxuICpcbiAqIFRoZSB1bmlmb3JtIEFQSSBvZiB0aGUgY29uc3RyYWludHMgYWxsb3dzIGNoYWlucyB0byBiZSBmb3JtZWQuXG4gKlxuICogVGhlIEFuZE9wZXJhdG9yIGlzIHVzZWQgdG8gbGluayBzZXZlcmFsIGNvbnN0cmFpbnRzLiBUaGUgY29uc3RyYWludCBpcyBmdWxmaWxsZWQgaWYgYWxsIGNvbnN0cmFpbnRzIG9mIHRoZSBvcGVyYXRvcnMgYXJlIGZ1bGZpbGxlZC5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvY29uc3RyYWludHMvYW5kb3BlcmF0b3IubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbnN0cmFpbnRzXG4gKiBAc3VtbWFyeSBBIGFuZCBvcGVyYXRvciBjb25zdHJhaW50XG4gKi9cbmNsYXNzIEFuZE9wZXJhdG9yIGV4dGVuZHMgQWJzdHJhY3RPcGVyYXRvciB7XG5cdC8qKlxuXHQgKiB0aGlzIG1ldGhvZCByZXR1cm4gYSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2hlY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRpc1ZhbGlkKHZhbHVlKSB7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKFtcblx0XHRcdHRoaXMub3BlcmFudEEuaXNWYWxpZCh2YWx1ZSksXG5cdFx0XHR0aGlzLm9wZXJhbnRCLmlzVmFsaWQodmFsdWUpLFxuXHRcdF0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludHMvYW5kLW9wZXJhdG9yXCIpO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtWYWxpZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy92YWxpZC5tanNcIjtcbmltcG9ydCB7SW52YWxpZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pbnZhbGlkLm1qc1wiO1xuaW1wb3J0IHtBbmRPcGVyYXRvcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9hbmRvcGVyYXRvci5tanNcIjtcblxuZGVzY3JpYmUoJ0FuZE9wZXJhdG9yJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy5pc1ZhbGlkKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW25ldyBWYWxpZCgpLCBuZXcgVmFsaWQoKSwgdHJ1ZV0sXG4gICAgICAgICAgICBbbmV3IFZhbGlkKCksIG5ldyBJbnZhbGlkKCksIGZhbHNlXSxcbiAgICAgICAgICAgIFtuZXcgSW52YWxpZCgpLCBuZXcgVmFsaWQoKSwgZmFsc2VdLFxuICAgICAgICAgICAgW25ldyBJbnZhbGlkKCksIG5ldyBJbnZhbGlkKCksIGZhbHNlXVxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnY29uc3RyYWludC5pc1ZhbGlkKCkgc2hvdWxkIHJldHVybiAnICsgYywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBjb25zdHJhaW50ID0gbmV3IEFuZE9wZXJhdG9yKGEsIGIpO1xuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQuaXNWYWxpZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjID09PSB0cnVlID8gZG9uZSgpIDogZG9uZShuZXcgRXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjID09PSB0cnVlID8gZG9uZShuZXcgRXJyb3IoKSkgOiBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcbn0pO1xuXG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RDb25zdHJhaW50IH0gZnJvbSBcIi4vYWJzdHJhY3QubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBJc0FycmF5IH07XG5cbi8qKlxuICogQ29uc3RyYWludHMgYXJlIHVzZWQgdG8gZGVmaW5lIGNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldCBieSB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS5cbiAqXG4gKiBUaGUgdW5pZm9ybSBBUEkgb2YgdGhlIGNvbnN0cmFpbnRzIGFsbG93cyBjaGFpbnMgdG8gYmUgZm9ybWVkLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9jb25zdHJhaW50cy9pc2FycmF5Lm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db25zdHJhaW50c1xuICogQHN1bW1hcnkgQSBjb25zdHJhaW50IHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgYW4gYXJyYXlcbiAqL1xuY2xhc3MgSXNBcnJheSBleHRlbmRzIEFic3RyYWN0Q29uc3RyYWludCB7XG5cdC8qKlxuXHQgKiB0aGlzIG1ldGhvZCByZXR1cm4gYSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2hlY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRpc1ZhbGlkKHZhbHVlKSB7XG5cdFx0aWYgKGlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludC9pcy1hcnJheVwiKTtcblx0fVxufVxuIiwgImltcG9ydCB7SXNBcnJheX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pc2FycmF5Lm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ0lzQXJyYXknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmlzVmFsaWQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGNvbnN0cmFpbnQgPSBuZXcgSXNBcnJheSgpXG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXNvbHZlIHByb21pc2UnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3RyYWludC5pc1ZhbGlkKFsxLDIsM10pLnRoZW4ociA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHIpLmlzLmEoJ2FycmF5Jyk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJzaG91bGQgbm90IHJlYWNoZWQ6IFwiICsgZSkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICJpbXBvcnQge1ZhbGlkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL3ZhbGlkLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ1ZhbGlkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy5pc1ZhbGlkKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBjb25zdHJhaW50ID0gbmV3IFZhbGlkKClcblxuICAgICAgICBpdCgnc2hvdWxkIHJlc29sdmUgcHJvbWlzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50LmlzVmFsaWQoe30pLnRoZW4ociA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJzaG91bGQgbm90IHJlYWNoZWQ6IFwiICsgZSkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge05vZGV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7Tm9kZUxpc3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZWxpc3QubWpzXCI7XG5cbmRlc2NyaWJlKCdOb2RlTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBkZXNjcmliZSgnI2NvbnN0cnVjdG9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhbiBlbXB0eSBOb2RlTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdCgpO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZUxpc3Quc2l6ZSkudG8uZXF1YWwoMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY3JlYXRlIGEgTm9kZUxpc3QgZnJvbSBhbiBhcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdChbXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpLFxuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKSxcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JylcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZUxpc3Quc2l6ZSkudG8uZXF1YWwoMyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY3JlYXRlIGEgTm9kZUxpc3QgZnJvbSBhIE5vZGVMaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG5vZGVMaXN0ID0gbmV3IE5vZGVMaXN0KFtcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JyksXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpLFxuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKVxuICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIGxldCBub2RlTGlzdDIgPSBuZXcgTm9kZUxpc3Qobm9kZUxpc3QpO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZUxpc3QyLnNpemUpLnRvLmVxdWFsKDMpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgfSk7XG4gICAgXG4gICAgIFxuICAgIGl0KCdjcmVhdGUgTm9kZUxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKSkuaXMuaW5zdGFuY2VvZihOb2RlTGlzdCk7XG4gICAgfSlcblxuICAgIGl0KCdhZGQgTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLmFkZChuZXcgTm9kZSgpKSkudG8uYmUuaW5zdGFuY2VvZihOb2RlTGlzdCk7XG4gICAgfSlcblxuICAgIGl0KCdyZW1vdmUgTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLnJlbW92ZShuZXcgTm9kZSgpKSkudG8uYmUuaW5zdGFuY2VvZihOb2RlTGlzdCk7XG4gICAgfSlcblxuICAgIGl0KCdoYXMgdW5rbm93biBOb2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkuaGFzKG5ldyBOb2RlKSkudG8uYmUuZmFsc2U7XG4gICAgfSlcblxuICAgIGl0KCdoYXMgYWRkZWQgTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbiA9IG5ldyBOb2RlO1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkuYWRkKG4pLmhhcyhuKSkudG8uYmUudHJ1ZTtcbiAgICB9KVxuICAgIFxuICAgIGl0KCd0b1N0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbiA9IG5ldyBOb2RlO1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkuYWRkKG5ldyBOb2RlKCdhJykuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJ2InKSkpLnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKCdhXFxuIFx1MjUxNGInKTtcbiAgICB9KVxuXG4gICAgaXQoJ3Rocm93IGV4Y2VwdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBOb2RlTGlzdCgpLmFkZCgxKSkudG8udGhyb3coRXJyb3IpO1xuICAgIH0pXG5cblxufSk7IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtCYXNlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQge2luc3RhbmNlU3ltYm9sfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0YW50cy5tanNcIjtcblxuXG5cbmNsYXNzIEJhc2VEaWZmZXJlbnRSZWFsbSBleHRlbmRzIE9iamVjdCB7XG4gICAgXG5cbiAgICBzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG4gICAgICAgIHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9iYXNlXCIpO1xuICAgIH1cblxuXG59XG5cbmNsYXNzIFN1YmNsYXNzIGV4dGVuZHMgQmFzZURpZmZlcmVudFJlYWxtIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgc3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuICAgICAgICByZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvc3ViY2xhc3NcIik7XG4gICAgfVxufVxuXG5kZXNjcmliZSgnQmFzZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCduZXcgQmFzZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnaXMgaW5zdGFuY2Ugb2YgQmFzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQmFzZSkudG8uYmUuaW5zdGFuY2VPZihCYXNlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2lzIGluc3RhbmNlIG9mIE9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQmFzZSkudG8uYmUuaW5zdGFuY2VPZihPYmplY3QpO1xuICAgICAgICB9KTtcblxuICAgIH0pXG4gICAgXG4gICAgZGVzY3JpYmUoJ2luc3RhbmNvZicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnaXMgaW5zdGFuY2Ugb2YgQmFzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQmFzZSkudG8uYmUuaW5zdGFuY2VPZihCYXNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpdCgnc3ViY2xhc3MgaW5zdGFuY2VvZicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKG5ldyBTdWJjbGFzcyBpbnN0YW5jZW9mIEJhc2UpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QodHJ1ZSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSAge1xuICAgICAgICAgICAgICAgIGV4cGVjdChmYWxzZSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cbn0pIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7TWVkaWFUeXBlLCBwYXJzZU1lZGlhVHlwZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9tZWRpYXR5cGUubWpzXCI7XG5cbmRlc2NyaWJlKCdEYXRhdXJsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgW1xuICAgICAgICBbXCIqLypcIixcIipcIiwnKiddLFxuICAgICAgICBbXCJ0ZXh0LypcIixcInRleHRcIiwnKiddLFxuICAgICAgICBbXCIqL3Rlc3RcIixcIipcIiwndGVzdCddLFxuICAgICAgICBbXCJpbWFnZS9wbmdcIiwgXCJpbWFnZVwiLCBcInBuZ1wiXSxcbiAgICAgICAgW1wiYXVkaW8vbXAzXCIsIFwiYXVkaW9cIiwgXCJtcDNcIl0sXG4gICAgICAgIFtcInZpZGVvL21wZWdcIiwgXCJ2aWRlb1wiLCBcIm1wZWdcIl0sXG4gICAgICAgIFtcInRleHQvcGxhaW5cIiwgXCJ0ZXh0XCIsIFwicGxhaW5cIl0sXG4gICAgICAgIFtcInRleHQvaHRtbFwiLCBcInRleHRcIiwgXCJodG1sXCJdLFxuICAgICAgICBbXCJ0ZXh0L2h0bWw7Y2hhcnNldD1VUy1BU0NJSVwiLCBcInRleHRcIiwgXCJodG1sXCJdLFxuICAgICAgICBbXCJ0ZXh0L2h0bWw7Y2hhcnNldD1cXFwiVVMtQVNDSUlcXFwiXCIsIFwidGV4dFwiLCBcImh0bWxcIl0sXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgaXQoJ3BhcnNlTWVkaWFUeXBlKCcgKyBhICsgJyknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGQgPSBwYXJzZU1lZGlhVHlwZShhKTtcblxuICAgICAgICAgICAgZXhwZWN0KGQpLmlzLmluc3RhbmNlb2YoTWVkaWFUeXBlKTtcbiAgICAgICAgICAgIGV4cGVjdChkLnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgZXhwZWN0KGQudHlwZSkudG8uYmUuZXF1YWwoYik7XG4gICAgICAgICAgICBleHBlY3QoZC5zdWJ0eXBlKS50by5iZS5lcXVhbChjKTtcbiAgICAgICAgICAgIGV4cGVjdChkLnBhcmFtZXRlcikuaXMuaW5zdGFuY2VvZihNYXApXG4gICAgICAgIH0pXG5cbiAgICB9KTtcblxuICAgIFtcbiAgICAgICAgW1widmlkZW8vXCJdLFxuICAgICAgICBbXCJ0ZXh0XCJdLFxuICAgICAgICBbXCIvbXAzXCJdLFxuICAgICAgICBbXCJ0ZXh0L2h0bWw7Y2hhcnNldFVTLUFTQ0lJXCJdLFxuICAgICAgICBbXCJ0ZXh0L2h0bWw7Y2hhcnNldFxcXCJVUy1BU0NJSVxcXCJcIl0sXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgIGl0KCcnICsgYSArICcgc2hvdWxkIHRocm93IGV4Y2VwdGlvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgZXhwZWN0KCgpPT57cGFyc2VNZWRpYVR5cGUoYSl9KS50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgXG4gICAgICAgIH0pXG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7VG9rZW5MaXN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3Rva2VubGlzdC5tanNcIjtcblxuXG5kZXNjcmliZSgnVG9rZW5MaXN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy50b1N0cmluZygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgdG9rZW5MaXN0ID0gbmV3IFRva2VuTGlzdCgpXG4gICAgICAgIGxldCByZXN1bHQgPSB0b2tlbkxpc3QudG9TdHJpbmcoKTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmJlLmEoJ3N0cmluZycpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2V0IGFuZCByZW1vdmUgcmV0dXJuIGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uYmUuYSgnc3RyaW5nJyk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ2luaXQgd2l0aCBzdHJpbmcgaXRlcmFibGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoJyArIHR5cGVvZiBhICsgJykgdGhyb3cgVHlwZUVycm9yICcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IHRva2VucyA9IFtcImFiY1wiLCBcImRlZlwiLCBcImdoaVwiXVxuICAgICAgICAgICAgbGV0IGxpc3QgPSBuZXcgVG9rZW5MaXN0KHRva2Vucyk7XG4gICAgICAgICAgICBleHBlY3QobGlzdC50b1N0cmluZygpKS5pcy5lcXVhbChcImFiYyBkZWYgZ2hpXCIpO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2luaXQgd2l0aCBpdGVyYWJsZSB3aXRob3V0IHN0cmluZyB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoJyArIHR5cGVvZiBhICsgJykgdGhyb3cgVHlwZUVycm9yICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB0b2tlbnMgPSBbXCJhYmNcIiwgNCwgXCJnaGlcIl1cbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgVG9rZW5MaXN0KHRva2VucykpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnaW5pdCB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgLy8gY3VycmVudCwgZXhwZWN0ZWQsIHR5cGVycm9yXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0MVwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ3Rlc3QxIHRlc3QyJywgXCJ0ZXN0MSB0ZXN0MlwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBcIlwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIHVuZGVmaW5lZCwgdHJ1ZV0sIC8vIE5hTlxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbMiwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgWzQuNSwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFt7fSwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtbXCIxXCIsIFwiMlwiLCBcIjNcIl0sICcxIDIgMycsIGZhbHNlXSwgLy8gaXRlcmFibGUgc3RyaW5nc1xuICAgICAgICAgICAgW1sxLCAyLCAzXSwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBpdCgnbmV3IFRva2VuTGlzdCgnICsgdHlwZW9mIGEgKyAnKSB0aHJvdyBUeXBlRXJyb3IgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IFRva2VuTGlzdChhKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QobmV3IFRva2VuTGlzdChhKS50b1N0cmluZygpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdpdGVyYXRvciBwcm90b2NvbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbGlzdDtcbiAgICAgICAgaXQoJy5hZGQoJyArIFwic2Vjb25kXCIgKyAnKSBzaG91bGQgcmV0dXJuIFRva2VuTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5nZXRJdGVyYXRvcigpKS50by5iZS5hbignb2JqZWN0Jyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcuYWRkKCcgKyBcInNlY29uZFwiICsgJykgc2hvdWxkIHJldHVybiBUb2tlbkxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChbLi4ubGlzdF0pLnRvLmJlLmFuKCdhcnJheScpO1xuICAgICAgICAgICAgZXhwZWN0KFsuLi5saXN0XSkudG8uYmUuYW4oJ2FycmF5JykudG8uaW5jbHVkZSgnc3RhcnQnKS50by5pbmNsdWRlKCdlbmQnKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5lbnRyaWVzKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IGxpc3Q7XG4gICAgICAgIGl0KCcuZW50cmllcygpIHNob3VsZCByZXR1cm4gQXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0XCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuZW50cmllcygpKS50by5iZS5hbignYXJyYXknKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJy5lbnRyaWVzKCkgc2hvdWxkIHJldHVybiBBcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgZW5kXCIpLmVudHJpZXMoKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0KS50by5iZS5hbignYXJyYXknKS50by5pbmNsdWRlKCdzdGFydCcpLnRvLmluY2x1ZGUoJ2VuZCcpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmZvckVhY2goKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbGlzdDtcbiAgICAgICAgaXQoJy5mb3JFYWNoKCkgc2hvdWxkIGl0ZXJhdGUgb3ZlciB0b2tlbmxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcImFhYSBiYmIgY2NjIGRkZCBlZWUgZmZmXCIpO1xuXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIlxuICAgICAgICAgICAgbGlzdC5mb3JFYWNoKChhKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IFwiIVwiICsgYSArIFwiIVwiO1xuICAgICAgICAgICAgICAgIGV4cGVjdChhKS50by5iZS5hbignc3RyaW5nJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLmlzLmVxdWFsKFwiIWFhYSEhYmJiISFjY2MhIWRkZCEhZWVlISFmZmYhXCIpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcuZW50cmllcygpIHNob3VsZCByZXR1cm4gQXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IGVuZFwiKS5lbnRyaWVzKCk7XG4gICAgICAgICAgICBleHBlY3QobGlzdCkudG8uYmUuYW4oJ2FycmF5JykudG8uaW5jbHVkZSgnc3RhcnQnKS50by5pbmNsdWRlKCdlbmQnKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NvbnRhaW5zIHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGxpc3RcbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3Qoc3RhcnQsIG1pZGRsZSBlbmQpIHNob3VsZCBjb250YWluIG1pZGRsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgbWlkZGxlIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKCdzdGFydCcpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnMoJ21pZGRsZScpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnMoJ2VuZCcpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnMoWydlbmQnLCAnc3RhcnQnLCAnbWlkZGxlJ10pKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChzdGFydCwgbWlkZGxlIGVuZCkgc2hvdWxkIG5vdCBjb250YWluIHh5eicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgbWlkZGxlIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKCd4eXonKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5jb250YWlucyhbJ2VuZCcsICdzdGFydCcsICdtaWRkbGUnLCAneHl6J10pKS50by5iZS5mYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3Qoc3RhcnQsIG1pZGRsZSBlbmQpIHNob3VsZCBub3QgY29udGFpbiB1bmRlZmluZWQgbnVsbCBOYU4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IG1pZGRsZSBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5jb250YWlucyh1bmRlZmluZWQpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKHBhcnNlSW50KFwiYVwiKSkpLnRvLmJlLmZhbHNlOyAvLyBOYU5cbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKG51bGwpKS50by5iZS5mYWxzZTsgLy8gTmFOXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgndG9nZ2xlIHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGxpc3RcbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3Qoc3RhcnQgbWlkZGxlIGVuZCkudG9nZ2xlKG5ldy12YWx1ZSkgc2hvdWxkIGNvbnRhaW4gbmV3LXZhbHVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBtaWRkbGUgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QudG9nZ2xlKCduZXctdmFsdWUnKS50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IG1pZGRsZSBlbmQgbmV3LXZhbHVlXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChzdGFydCBtaWRkbGUgZW5kKS50b2dnbGUobWlkZGxlKSBzaG91bGQgbm90IGNvbnRhaW4gbWlkZGxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBtaWRkbGUgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QudG9nZ2xlKCdtaWRkbGUnKS50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IGVuZFwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoKS50b2dnbGUoKSBzaG91bGQgLi4uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBUb2tlbkxpc3QoXCJhYmMgZGVmIGdoaVwiKS50b2dnbGUoXCJkZWYgeHl6XCIpLnRvU3RyaW5nKCkpLnRvLmVxdWFsKFwiYWJjIGdoaSB4eXpcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KCkudG9nZ2xlKCkgc2hvdWxkIC4uLicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgVG9rZW5MaXN0KFwiYWJjIGRlZiBnaGlcIikudG9nZ2xlKFtcImFiY1wiLCBcInh5elwiXSkudG9TdHJpbmcoKSkudG8uZXF1YWwoXCJkZWYgZ2hpIHh5elwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoKS50b2dnbGUoKSBzaG91bGQgLi4uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBUb2tlbkxpc3QoXCJhYmMgZGVmIGdoaVwiKS50b2dnbGUodW5kZWZpbmVkKS50b1N0cmluZygpKS50by5lcXVhbChcImFiYyBkZWYgZ2hpXCIpO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbWFuaXB1bGF0ZSB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IGxpc3RcblxuICAgICAgICBpdCgncmVzdWx0IFRva2VuTGlzdChcIicgKyBcInN0YXJ0XCIgKyAnXCIpIHNob3VsZCBiZSBcIicgKyBcInN0YXJ0XCIgKyAnXCInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0XCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydFwiKVxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnLmFkZCgnICsgXCJzZWNvbmRcIiArICcpIHNob3VsZCByZXR1cm4gVG9rZW5MaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmFkZChcInNlY29uZFwiKSkudG8uYmUuYW4uaW5zdGFuY2VvZihUb2tlbkxpc3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnLmFkZCgnICsgXCJzZWNvbmRcIiArICcpLnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBcInN0YXJ0IHNlY29uZFwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5hZGQoXCJzZWNvbmRcIikudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCBzZWNvbmRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcuYWRkKCcgKyBcInNlY29uZCB0aGlyZFwiICsgJykudG9TdHJpbmcoKSBzaG91bGQgcmV0dXJuIFwic3RhcnQgc2Vjb25kIHRoaXJkXCIgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmFkZChcInNlY29uZCB0aGlyZFwiKS50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IHNlY29uZCB0aGlyZFwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJy5hZGQoJyArIFwiW3NlY29uZCx0aGlyZF1cIiArICcpLnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBcInN0YXJ0IHNlY29uZCB0aGlyZFwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5hZGQoW1wic2Vjb25kXCIsIFwidGhpcmRcIl0pLnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwic3RhcnQgc2Vjb25kIHRoaXJkXCIpO1xuICAgICAgICB9KTtcblxuXG4gICAgICAgIGl0KCcuY2xlYXIoKS50b1N0cmluZygpIHNob3VsZCBcIlwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5hZGQoW1wic2Vjb25kXCIsIFwidGhpcmRcIl0pLmNsZWFyKCkudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJcIik7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpLnJlbW92ZSgnICsgXCJzZWNvbmRcIiArICcpIHNob3VsZCByZXR1cm4gVG9rZW5MaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QucmVtb3ZlKFwic2Vjb25kXCIpKS50by5iZS5hbi5pbnN0YW5jZW9mKFRva2VuTGlzdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKS5yZW1vdmUoJyArIFwic2Vjb25kXCIgKyAnKS50b1N0cmluZygpIHNob3VsZCByZXR1cm4gXCJzdGFydCB0aGlyZCBlbmRcIiAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5yZW1vdmUoXCJzZWNvbmRcIikudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCB0aGlyZCBlbmRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKS5yZW1vdmUoJyArIFwic2Vjb25kIHRoaXJkXCIgKyAnKS50b1N0cmluZygpIHNob3VsZCByZXR1cm4gXCJzdGFydCBlbmRcIiAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5yZW1vdmUoXCJzZWNvbmQgdGhpcmRcIikudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCBlbmRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKS5yZW1vdmUoJyArIFwiW3NlY29uZCx0aGlyZF1cIiArICcpLnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBcInN0YXJ0IGVuZFwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnJlbW92ZShbXCJzZWNvbmRcIiwgXCJ0aGlyZFwiXSkudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCBlbmRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKS5yZXBsYWNlKHNlY29uZCwgeHl6KS50b1N0cmluZygpIHNob3VsZCByZXR1cm4gXCJzdGFydCB4eXogdGhpcmQgZW5kXCIgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QucmVwbGFjZShcInNlY29uZFwiLCBcInh5elwiKSkudG8uYmUuaW5zdGFuY2VPZihUb2tlbkxpc3QpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCB4eXogdGhpcmQgZW5kXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIikucmVwbGFjZShlbmQsIHh5eikudG9TdHJpbmcoKSBzaG91bGQgcmV0dXJuIFwic3RhcnQgc2Vjb25kIHRoaXJkIHh5elwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnJlcGxhY2UoXCJlbmRcIiwgXCJ4eXpcIikpLnRvLmJlLmluc3RhbmNlT2YoVG9rZW5MaXN0KTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwic3RhcnQgc2Vjb25kIHRoaXJkIHh5elwiKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHtpc09iamVjdH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7T2JzZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5cbmltcG9ydCB7UHJveHlPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuXG5kZXNjcmliZSgnUHJveHlPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdjcmVhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvID0gbmV3IFByb3h5T2JzZXJ2ZXIoe30pO1xuICAgICAgICAgICAgZXh0ZW5kKG8uZ2V0U3ViamVjdCgpLCB7YTogNH0pO1xuICAgICAgICAgICAgZXhwZWN0KG8uZ2V0UmVhbFN1YmplY3QoKSkuaXMuZXFsKHthOiA0fSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3NldFN1YmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcnVuIG9ic2VydmVyJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBvID0gbmV3IFByb3h5T2JzZXJ2ZXIoe2E6IDF9KTtcbiAgICAgICAgICAgIGV4cGVjdChvLmdldFJlYWxTdWJqZWN0KCkpLmlzLmVxbCh7YTogMX0pO1xuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgby5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdCh0aGlzKSAmJiB0aGlzIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcikge1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgb25lIGNoYW5nZSBhcyBub3RpZnkgcnVucyBsYXRlclxuICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoXCJjYWxsZWQgZm9yIGVycm9yXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJ0aGlzIGlzIG5vdCBQcm94eU9ic2VydmVyXCIpKVxuICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgIG8uZ2V0U3ViamVjdCgpLmMgPSA0O1xuICAgICAgICAgICAgZXhwZWN0KG8uZ2V0UmVhbFN1YmplY3QoKSkuaXMuZXFsKHthOiAxLCBjOiA0fSk7XG5cbiAgICAgICAgICAgIG8uc2V0U3ViamVjdCh7YjogMn0pO1xuICAgICAgICAgICAgZXhwZWN0KG8uZ2V0UmVhbFN1YmplY3QoKSkuaXMuZXFsKHtiOiAyfSk7XG5cbiAgICAgICAgICAgIG8uZ2V0U3ViamVjdCgpLmQgPSA1O1xuICAgICAgICAgICAgZXhwZWN0KG8uZ2V0UmVhbFN1YmplY3QoKSkuaXMuZXFsKHtiOiAyLCBkOiA1fSk7XG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjcmVhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvID0gbmV3IFByb3h5T2JzZXJ2ZXIoe30pO1xuICAgICAgICAgICAgZXhwZWN0KG8pLmlzLmluc3RhbmNlT2YoUHJveHlPYnNlcnZlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3Byb3h5IG9iamVjdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdQcm94eSBvYmplY3RzIHNob3VsZCBub3QgYmUgcmVjb21taXR0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgbyA9IG5ldyBQcm94eU9ic2VydmVyKHthOiB7YjogdHJ1ZX19KTtcbiAgICAgICAgICAgIG8uZ2V0U3ViamVjdCgpLmEuYiA9IG8uZ2V0U3ViamVjdCgpO1xuICAgICAgICAgICAgby5nZXRTdWJqZWN0KCkuYS5iLmEuYiA9IGZhbHNlO1xuICAgICAgICAgICAgLy9leHBlY3Qoby5nZXRTdWJqZWN0KCk9PT1wLmdldFN1YmplY3QoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbm90aWZ5IG9ic2VydmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGluZm9ybSBvYnNlcnZlcicsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgICAgICAvLyB0aGUgbWV0aG9kIGlzIGNhbGxlZCB0d2ljZSwgb25jZSBmb3IgZGVmaW5lUHJvcGVydHkgYW5kIGZvciBzZXQgdHJhcFxuICAgICAgICAgICAgbGV0IG8gPSBuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QodGhpcykgJiYgdGhpcyBpbnN0YW5jZW9mIFByb3h5T2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihcInRoaXMgaXMgbm90IFByb3h5T2JzZXJ2ZXJcIikpXG4gICAgICAgICAgICB9LCB0cnVlKVxuXG4gICAgICAgICAgICBsZXQgcmVhbFN1YmplY3QgPSB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGQ6IDVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBwID0gbmV3IFByb3h5T2JzZXJ2ZXIocmVhbFN1YmplY3QpO1xuICAgICAgICAgICAgZXhwZWN0KHApLmlzLmluc3RhbmNlT2YoUHJveHlPYnNlcnZlcik7XG4gICAgICAgICAgICBleHBlY3QocC5hdHRhY2hPYnNlcnZlcihvKSkuaXMuaW5zdGFuY2VPZihQcm94eU9ic2VydmVyKTtcblxuICAgICAgICAgICAgbGV0IHMgPSBwLmdldFN1YmplY3QoKTtcbiAgICAgICAgICAgIGxldCByID0gcC5nZXRSZWFsU3ViamVjdCgpO1xuXG4gICAgICAgICAgICBzLmEuZCA9IGZhbHNlO1xuICAgICAgICAgICAgcy5hLmIuZCA9IDI7XG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAc2VlIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzQzXG4gICAgICovXG4gICAgZGVzY3JpYmUoJ1JlZmxlY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2NoZWNrIFJlZmxlY3Quc2V0KCkgd2l0aCBTdWJqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHI7XG5cbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IChuZXcgUHJveHlPYnNlcnZlcih7fSkpLmdldFN1YmplY3QoKTtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwieWVzIVwiLFxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBcIm5vXCJcbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYmpbJ2RhdGEnXSA9IHZhbHVlXG4gICAgICAgICAgICAgICAgfSkudG8ubm90LnRocm93KCk7XG4gICAgICAgICAgICAgICAgLy9yID0gUmVmbGVjdC5zZXQob2JqLCAnZGF0YScsIHZhbHVlKVxuICAgICAgICAgICAgICAgIC8vZXhwZWN0KHIpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSk7XG5cblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3RoYXQnLCB7dGhhdDogJ2NoZWNrZWQxJ31dLFxuICAgICAgICAgICAgWyd0aGF0JywgbmV3IFByb3h5KHt0aGF0OiAnY2hlY2tlZDInfSwge30pXSxcbiAgICAgICAgICAgIFsndGhhdCcsIChuZXcgUHJveHlPYnNlcnZlcih7dGhhdDogJ2NoZWNrZWQzJ30pKS5nZXRSZWFsU3ViamVjdCgpXSxcbiAgICAgICAgICAgIFsndGhhdCcsIChuZXcgUHJveHlPYnNlcnZlcih7dGhhdDogJ2NoZWNrZWQ0J30pKS5nZXRTdWJqZWN0KCldXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQga2V5ID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgdGFyZ2V0ID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdjaGVjayBSZWZsZWN0LnNldCgnICsga2V5ICsgJywnICsgSlNPTi5zdHJpbmdpZnkodGFyZ2V0KSArICcpIHNob3VsZCB3cml0YWJsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWU7XG5cbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIFwiMVwiLFxuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LCBrZXkpWyd3cml0YWJsZSddLCAnd3JpdGFibGUgZm9yICcgKyB2YWx1ZSArICcgc2hvdWxkIHJldHVybiB0cnVlJykudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoUmVmbGVjdC5zZXQodGFyZ2V0LCBrZXksIHZhbHVlKSwgJ3NldCBmb3IgJyArIHZhbHVlICsgJyBzaG91bGQgcmV0dXJuIHRydWUnKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCwga2V5KVsnd3JpdGFibGUnXSwgJ3dyaXRhYmxlIGZvciAnICsgdmFsdWUgKyAnIHNob3VsZCByZXR1cm4gdHJ1ZScpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ25vdGlmeSBvYnNlcnZlciB3aXRoIGNoYW5nZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG9yaWdpbmFsLCBvYnNlcnZlciwgcHJveHk7XG5cbiAgICAgICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsID0ge307XG4gICAgICAgICAgICBwcm94eSA9IG5ldyBQcm94eU9ic2VydmVyKG9yaWdpbmFsKTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ2EnLCA0LCBKU09OLnN0cmluZ2lmeSh7YTogNH0pXSxcbiAgICAgICAgICAgIFsnYicsIDksIEpTT04uc3RyaW5naWZ5KHthOiA0LCBiOiA5fSldXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzZXQga2V5ICcgKyBhICsgJyB2YWx1ZSAnICsgYiArICcgZXhwZWN0ICcgKyBjLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgICAgIG9ic2VydmVyID0gbmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRSZWFsU3ViamVjdCgpKSkuaXMuZXF1YWwoYyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFjaE9ic2VydmVyKG9ic2VydmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICBwcm94eS5hdHRhY2hPYnNlcnZlcihvYnNlcnZlcilcbiAgICAgICAgICAgICAgICBsZXQgc3ViamVjdCA9IHByb3h5LmdldFN1YmplY3QoKVxuXG4gICAgICAgICAgICAgICAgc3ViamVjdFthXSA9IGI7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25vdGlmeSBvYnNlcnZlciAnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gcHJvbWlzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBwcm94eSA9IG5ldyBQcm94eU9ic2VydmVyKHt9KTtcbiAgICAgICAgICAgIGxldCBvYnNlcnZlciA9IG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcHJveHkuYXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpXG4gICAgICAgICAgICBleHBlY3QocHJveHkubm90aWZ5T2JzZXJ2ZXJzKCkpLmlzLmluc3RhbmNlT2YoUHJvbWlzZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG59KVxuXG4iLCAiaW1wb3J0IHtcbiAgICBWZXJzaW9uXG59IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvdmVyc2lvbi5tanNcIlxuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnVmVyc2lvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcuY29tcGFyZVRvKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWycxLjIuMycsICcxLjIuMycsIDBdLFxuICAgICAgICAgICAgWycxLjIuMicsICcxLjIuMycsIC0xXSxcbiAgICAgICAgICAgIFsnMicsICcyLjAuMCcsIDBdLFxuICAgICAgICAgICAgWycxLjIuNCcsICcxLjIuMycsIDFdXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuICcgKyBjICsgJyB3aGVuIHRoZSB2YWx1ZSAnICsgYSArICcgaXMgJyArIGIgKyAnJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgVmVyc2lvbihhKS5jb21wYXJlVG8oYikpLnRvLmJlLmVxdWFsKGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnRvU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWycxLjEuMScsICcyLjMnLCAzLCAnMS4yLjMnXSxcbiAgICAgICAgICAgIFsnMS4yLjQnLCAnMS4yLjMnLCA1LCAnMS4xLjUnXVxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gJyArIGQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IFZlcnNpb24oYSwgYiwgYykudG9TdHJpbmcoKSkudG8uYmUuZXF1YWwoZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSlcblxufSk7XG5cbiIsICJpbXBvcnQge2dldEdsb2JhbCwgZ2V0R2xvYmFsT2JqZWN0LCBnZXRHbG9iYWxGdW5jdGlvbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnR2xvYmFsJywgZnVuY3Rpb24gKCkge1xuICAgIGRlc2NyaWJlKCdnZXRHbG9iYWwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZ2xvYmFsIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB0ID0gdHlwZW9mIGdldEdsb2JhbCgpO1xuICAgICAgICAgICAgZXhwZWN0KHQpLnRvLmJlLmVxdWFsKCdvYmplY3QnKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdnZXRHbG9iYWxGdW5jdGlvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBnbG9iYWwgZnVuY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgdCA9IHR5cGVvZiBnZXRHbG9iYWxGdW5jdGlvbigncGFyc2VJbnQnKTtcbiAgICAgICAgICAgIGV4cGVjdCh0KS50by5iZS5lcXVhbCgnZnVuY3Rpb24nKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdnZXRHbG9iYWxPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZ2xvYmFsIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB0ID0gdHlwZW9mIGdldEdsb2JhbE9iamVjdCgnSlNPTicpO1xuICAgICAgICAgICAgZXhwZWN0KHQpLnRvLmJlLmVxdWFsKCdvYmplY3QnKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xufSk7XG5cbiIsICJpbXBvcnQge09ic2VydmVyTGlzdH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZlcmxpc3QubWpzXCI7XG5pbXBvcnQge09ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ09ic2VydmVyTGlzdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcuYXR0YWNoKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBPYnNlcnZlckxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgb2JzZXJ2ZXJMaXN0ID0gbmV3IE9ic2VydmVyTGlzdCgpXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gb2JzZXJ2ZXJMaXN0LmF0dGFjaChuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5iZS5pbnN0YW5jZU9mKE9ic2VydmVyTGlzdClcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5kZXRhY2goKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIE9ic2VydmVyTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvYnNlcnZlckxpc3QgPSBuZXcgT2JzZXJ2ZXJMaXN0KClcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBvYnNlcnZlckxpc3QuZGV0YWNoKG5ldyBPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmJlLmluc3RhbmNlT2YoT2JzZXJ2ZXJMaXN0KVxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLm5vdGlmeSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdFZhbHVlID0gXCJZZXMhXCI7XG4gICAgICAgIGxldCBvO1xuICAgICAgICBsZXQgb2JzZXJ2ZXJMaXN0O1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbyA9IG5ldyBPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFZhbHVlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgb2JzZXJ2ZXJMaXN0ID0gbmV3IE9ic2VydmVyTGlzdCgpXG4gICAgICAgICAgICBvYnNlcnZlckxpc3QuYXR0YWNoKG8pXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZW9mIFByb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0Lm5vdGlmeSh7fSkpLnRvLmJlLmluc3RhbmNlT2YoUHJvbWlzZSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gJyArIHJlc3VsdFZhbHVlLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgb2JqID0ge31cblxuICAgICAgICAgICAgb2JzZXJ2ZXJMaXN0Lm5vdGlmeShvYmopLnRoZW4ociA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHIpLnRvLmJlLmFuKCdhcnJheScpLnRoYXQuaW5jbHVkZXMocmVzdWx0VmFsdWUpO1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKGUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmNvbnRhaW5zKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG8xID0gbmV3IE9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBvMiA9IG5ldyBPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbm90IGNvbnRhaW4gbzEgYW5kIG8yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG9ic2VydmVyTGlzdCA9IG5ldyBPYnNlcnZlckxpc3QoKVxuXG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8xKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8yKSkudG8uYmUuZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY29udGFpbiBvMiBhbmQgbm90IG8xJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG9ic2VydmVyTGlzdCA9IG5ldyBPYnNlcnZlckxpc3QoKVxuICAgICAgICAgICAgb2JzZXJ2ZXJMaXN0LmF0dGFjaChvMilcbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3QuY29udGFpbnMobzEpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3QuY29udGFpbnMobzIpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW4gbzEgYW5kIG5vdCBvMicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvYnNlcnZlckxpc3QgPSBuZXcgT2JzZXJ2ZXJMaXN0KClcbiAgICAgICAgICAgIG9ic2VydmVyTGlzdC5hdHRhY2gobzEpXG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8xKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3QuY29udGFpbnMobzIpKS50by5iZS5mYWxzZTtcbiAgICAgICAgfSk7XG5cblxuICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW4gbzIgYW5kIG8xJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG9ic2VydmVyTGlzdCA9IG5ldyBPYnNlcnZlckxpc3QoKVxuICAgICAgICAgICAgb2JzZXJ2ZXJMaXN0LmF0dGFjaChvMikuYXR0YWNoKG8xKVxuICAgICAgICAgICAgZXhwZWN0KG9ic2VydmVyTGlzdC5jb250YWlucyhvMSkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8yKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbn0pO1xuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2VxdWlwV2l0aEludGVybmFsfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2ludGVybmFsLm1qc1wiO1xuaW1wb3J0IHtPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZlci5tanNcIjtcblxuY2xhc3MgU29tZVJhbmRvbUNsYXNzMSBleHRlbmRzIE9iamVjdCB7XG5cbiAgICBkb2l0KCkge1xuICAgICAgICByZXR1cm4gXCJkb25lXCI7XG4gICAgfVxufVxuXG5jbGFzcyBTb21lUmFuZG9tQ2xhc3MyIGV4dGVuZHMgT2JqZWN0IHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBlcXVpcFdpdGhJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIGdldCBkZWZhdWx0SW50ZXJuYWwoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXN0OiBcInRlc3RcIlxuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmRlc2NyaWJlKCdCYXNlIGluamVjdCB3aXRoIG9wdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnbmV3IFNvbWVSYW5kb21DbGFzcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnaXMgaW5zdGFuY2Ugb2YgU29tZVJhbmRvbUNsYXNzMScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgU29tZVJhbmRvbUNsYXNzMikubm90LnRvLmJlLmluc3RhbmNlT2YoU29tZVJhbmRvbUNsYXNzMSk7XG4gICAgICAgICAgICBleHBlY3QobmV3IFNvbWVSYW5kb21DbGFzczIpLnRvLmJlLmluc3RhbmNlT2YoU29tZVJhbmRvbUNsYXNzMik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdpcyBpbnN0YW5jZSBvZiBTb21lUmFuZG9tQ2xhc3MyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBTb21lUmFuZG9tQ2xhc3MxKS50by5iZS5pbnN0YW5jZU9mKFNvbWVSYW5kb21DbGFzczEpO1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBTb21lUmFuZG9tQ2xhc3MxKS5ub3QudG8uYmUuaW5zdGFuY2VPZihTb21lUmFuZG9tQ2xhc3MyKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ0V4dGVuZHMgU29tZVJhbmRvbUNsYXNzIHdpdGggaW50ZXJuYWxzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdhdHRhY2ggYW5kIG5vdGlmeSBpbnRlcm5hbCBvYnNlcnZlcicsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IFNvbWVSYW5kb21DbGFzczI7XG4gICAgICAgICAgICBjLmF0dGFjaEludGVybmFsT2JzZXJ2ZXIobmV3IE9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIGMuc2V0SW50ZXJuYWwoXCJ0ZXN0XCIsIFwidGVzdFwiKTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYXR0YWNoIGFuZCByZW1vdmUgaW50ZXJuYWwgb2JzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IFNvbWVSYW5kb21DbGFzczI7XG5cblxuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZXhwZWN0KGMuY29udGFpbnNJbnRlcm5hbE9ic2VydmVyKG9ic2VydmVyKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBjLmF0dGFjaEludGVybmFsT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuY29udGFpbnNJbnRlcm5hbE9ic2VydmVyKG9ic2VydmVyKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGMuZGV0YWNoSW50ZXJuYWxPYnNlcnZlcihvYnNlcnZlcik7XG4gICAgICAgICAgICBleHBlY3QoYy5jb250YWluc0ludGVybmFsT2JzZXJ2ZXIob2JzZXJ2ZXIpKS50by5iZS5mYWxzZTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdChcImdldEludGVybmFsIGFuZCBzZXRJbnRlcm5hbFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IFNvbWVSYW5kb21DbGFzczI7XG4gICAgICAgICAgICBleHBlY3QoYy5zZXRJbnRlcm5hbChcInRlc3RcIiwgXCJ5ZWFoXCIpKS50by5iZS5pbnN0YW5jZU9mKFNvbWVSYW5kb21DbGFzczIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0XCIpKS50by5iZS5lcXVhbChcInllYWhcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KFwiZGVhbCB3aXRoIGRlZmF1bHQgdmFsdWVzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RDbGFzcyA9IGNsYXNzIGV4dGVuZHMgT2JqZWN0IHtcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgZXF1aXBXaXRoSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBnZXQgaW50ZXJuYWxEZWZhdWx0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Q6IFwieHl6XCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IHRlc3RDbGFzcztcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdFwiKSkudG8uYmUuZXF1YWwoXCJ4eXpcIik7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3QyXCIsIFwiYWJjXCIpKS50by5iZS5lcXVhbChcImFiY1wiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJkZWFsIHdpdGggZGVmYXVsdHMgZnJvbSBkZWZhdWx0c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0Q2xhc3MgPSBjbGFzcyBleHRlbmRzIE9iamVjdCB7XG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIGVxdWlwV2l0aEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZ2V0IGludGVybmFsRGVmYXVsdHMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0OiBcInh5elwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRlc3RDbGFzczIgPSBjbGFzcyBleHRlbmRzIHRlc3RDbGFzcyB7XG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIGVxdWlwV2l0aEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZ2V0IGludGVybmFsRGVmYXVsdHMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5pbnRlcm5hbERlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0MjogXCJhYmNcIlxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYyA9IG5ldyB0ZXN0Q2xhc3MyO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0XCIpKS50by5iZS5lcXVhbChcInh5elwiKTtcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdDJcIikpLnRvLmJlLmVxdWFsKFwiYWJjXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KFwic2V0IG11bHRpcGxlIHZhbHVlc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IFNvbWVSYW5kb21DbGFzczI7XG4gICAgICAgICAgICBleHBlY3QoYy5zZXRJbnRlcm5hbHMoe1xuICAgICAgICAgICAgICAgIHRlc3Q6IFwieWVhaFwiLFxuICAgICAgICAgICAgICAgIHRlc3QyOiBcInllYWgyXCJcbiAgICAgICAgICAgIH0pKS50by5iZS5pbnN0YW5jZU9mKFNvbWVSYW5kb21DbGFzczIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0XCIpKS50by5iZS5lcXVhbChcInllYWhcIik7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3QyXCIpKS50by5iZS5lcXVhbChcInllYWgyXCIpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjLnNldEludGVybmFscyh7XG4gICAgICAgICAgICAgICAgdGVzdDI6IFwieWVhaDItbmV3XCIsXG4gICAgICAgICAgICAgICAgdGVzdDM6IFwieWVhaDNcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdFwiKSkudG8uYmUuZXF1YWwoXCJ5ZWFoXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0MlwiKSkudG8uYmUuZXF1YWwoXCJ5ZWFoMi1uZXdcIik7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3QzXCIpKS50by5iZS5lcXVhbChcInllYWgzXCIpO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge09ic2VydmFibGVRdWV1ZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZhYmxlcXVldWUubWpzXCI7XG5pbXBvcnQge09ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuXG5kZXNjcmliZSgnT2JzZXJ2YWJsZVF1ZXVlJywgZnVuY3Rpb24gKCkge1xuICAgIGRlc2NyaWJlKCdPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIG5vdGlmeScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgcXVldWUgPSBuZXcgT2JzZXJ2YWJsZVF1ZXVlO1xuICAgICAgICAgICAgbGV0IG8gPSBuZXcgT2JzZXJ2ZXIoKHEpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcXVldWUuYXR0YWNoT2JzZXJ2ZXIobyk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKCdhJykpLnRvLmJlLmluc3RhbmNlT2YoT2JzZXJ2YWJsZVF1ZXVlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KSIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge3BhcnNlRGF0YVVSTH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuXG5kZXNjcmliZSgnRGF0YXVybCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIFtcbiAgICAgICAgW1wiIGRhdGE6dGV4dC9odG1sLCUzQ2gxJTNFSGVsbG8lMkMlMjBXb3JsZCElM0MlMkZoMSUzRVwiXSxcbiAgICAgICAgW1wiZGF0YTp0ZXh0L2h0bWw7Y2hhcnNldD1VUy1BU0NJSSwlM0NoMSUzRUhlbGxvISUzQyUyRmgxJTNFXCJdLFxuICAgICAgICBbXCJkYXRhOixBJTIwYnJpZWYlMjBub3RlXCIsICdkYXRhOnRleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSSxBJTIwYnJpZWYlMjBub3RlJ10sXG4gICAgICAgIFtcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUFRTUFBQUFsUFcwaUFBQUFCbEJNVkVVQUFBRC8vLytsMlovZEFBQUFNMGxFUVZSNG5HUDQvNS9oLzErRy81OFpEckF6M0QvTWNIOHl3ODNORERlTkdlNFVnOUM5end6M2dWTE1EQS9BNlA5L0FGR0dGeWpPWFp0UUFBQUFBRWxGVGtTdVFtQ0NcIl0sXG4gICAgICAgIFtcIiBkYXRhOixIZWxsbyUyQyUyMFdvcmxkIVwiLCAnZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUksSGVsbG8lMkMlMjBXb3JsZCEnXSxcbiAgICAgICAgW1wiICAgZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBZ0FBQUFJQkFNQUFBQTJJYU80QUFBQUZWQk1WRVhrNU9UbjUrZnQ3ZTMxOWZYMjl2YjUrZm4vLy8rK0dVbVZBQUFBTFVsRVFWUUlIV05JQ25ZTFpuQUxUZ3BtTUdZSUZXWUlaVEEyWkZBelRURmxTREZWTXdWeVFobUF3c1lNQUtEYUJ5MGF4WC9pQUFBQUFFbEZUa1N1UW1DQyAgIFwiXSxcbiAgICAgICAgW1wiIGRhdGE6LEhlbGxvIFdvcmxkIVwiLCAnZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUksSGVsbG8lMjBXb3JsZCEnXSxcbiAgICAgICAgW1wiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBZ0FBQUFJQkFNQUFBQTJJYU80QUFBQUZWQk1WRVhrNU9UbjUrZnQ3ZTMxOWZYMjl2YjUrZm4vLy8rK0dVbVZBQUFBTFVsRVFWUUlIV05JQ25ZTFpuQUxUZ3BtTUdZSUZXWUlaVEEyWkZBelRURmxTREZWTXdWeVFobUF3c1lNQUtEYUJ5MGF4WC9pQUFBQUFFbEZUa1N1UW1DQ1wiXSxcbiAgICAgICAgW1wiIGRhdGE6dGV4dC9wbGFpbjtiYXNlNjQsU0dWc2JHOHNJRmR2Y214a0lRJTNEJTNEXCJdXG5cblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgaWYgKGIgPT09IHVuZGVmaW5lZCkgYiA9IGEudHJpbSgpO1xuXG5cbiAgICAgICAgaXQoJ3BhcnNlRGF0YVVSTCgnICsgYSArICcpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBleHBlY3QocGFyc2VEYXRhVVJMKGEpLnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKGIpO1xuICAgICAgICB9KVxuXG4gICAgfSk7XG5cbiAgICBbXG4gICAgICAgIFtcImRhdGF4YmFzZTY0XCJdLFxuICAgICAgICBbXCJkYXRhOkhlbGxvV29ybGRcIl0sXG4gICAgICAgIFtcImRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9LCUzQ2gxJTNFSGVsbG8hJTNDJTJGaDElM0VcIl0sXG4gICAgICAgIFtcImRhdGE6dGV4dC9odG1sO2NoYXJzZXQsJTNDaDElM0VIZWxsbyElM0MlMkZoMSUzRVwiLCBcImRhdGE6YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQVFNQUFBQWxQVzBpQUFBQUJsQk1WRVVBQUFELy8vK2wyWi9kQUFBQU0wbEVRVlI0bkdQNC81L2gvMStHLzU4WkRyQXozRC9NY0g4eXc4M05ERGVOR2U0VWc5Qzl6d3ozZ1ZMTURBL0E2UDkvQUZHR0Z5ak9YWnRRQUFBQUFFbEZUa1N1UW1DQ1wiXSxcbiAgICAgICAgW1wiXCJdLFxuICAgICAgICBbXCJodHRwOi8vd2lraXBlZGlhLm9yZ1wiXSxcbiAgICAgICAgW1wiYmFzZTY0XCJdLFxuICAgICAgICBbXCJpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUFRTUFBQUFsUFcwaUFBQUFCbEJNVkVVQUFBRC8vLytsMlovZEFBQUFNMGxFUVZSNG5HUDQvNS9oLzErRy81OFpEckF6M0QvTWNIOHl3ODNORERlTkdlNFVnOUM5end6M2dWTE1EQS9BNlA5L0FGR0dGeWpPWFp0UUFBQUFBRWxGVGtTdVFtQ0NcIl1cblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGV4Y2VwdGlvbiBwYXJzZURhdGFVUkwoJyArIGEgKyAnKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgZXhwZWN0KCgpID0+IHBhcnNlRGF0YVVSTChhKSkudGhyb3coVHlwZUVycm9yKVxuICAgICAgICB9KVxuXG4gICAgfSk7XG5cblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgdG9CaW5hcnksIGZyb21CaW5hcnkgfTtcblxuLyoqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIGZ1bmN0aW9uIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYE1vbnN0ZXIuVHlwZXMudG9CaW5hcnkoKWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGJpbmFyeVxuICogQHJldHVybiB7U3RyaW5nfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE4LjBcbiAqL1xuZnVuY3Rpb24gdG9CaW5hcnkoc3RyaW5nKSB7XG5cdGNvbnN0IGNvZGVVbml0cyA9IG5ldyBVaW50MTZBcnJheSh2YWxpZGF0ZVN0cmluZyhzdHJpbmcpLmxlbmd0aCk7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgY29kZVVuaXRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29kZVVuaXRzW2ldID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XG5cdH1cblxuXHRjb25zdCBjaGFyQ29kZXMgPSBuZXcgVWludDhBcnJheShjb2RlVW5pdHMuYnVmZmVyKTtcblx0bGV0IHJlc3VsdCA9IFwiXCI7XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjaGFyQ29kZXMuYnl0ZUxlbmd0aDsgaSsrKSB7XG5cdFx0cmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGVzW2ldKTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogWW91IGNhbiBjYWxsIHRoZSBmdW5jdGlvbiB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLlR5cGVzLmZyb21CaW5hcnkoKWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGJpbmFyeVxuICogQHJldHVybiB7U3RyaW5nfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE4LjBcbiAqL1xuZnVuY3Rpb24gZnJvbUJpbmFyeShiaW5hcnkpIHtcblx0Y29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheSh2YWxpZGF0ZVN0cmluZyhiaW5hcnkpLmxlbmd0aCk7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRieXRlc1tpXSA9IGJpbmFyeS5jaGFyQ29kZUF0KGkpO1xuXHR9XG5cdGNvbnN0IGNoYXJDb2RlcyA9IG5ldyBVaW50MTZBcnJheShieXRlcy5idWZmZXIpO1xuXHRsZXQgcmVzdWx0ID0gXCJcIjtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjaGFyQ29kZXMubGVuZ3RoOyBpKyspIHtcblx0XHRyZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZXNbaV0pO1xuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtmcm9tQmluYXJ5LCB0b0JpbmFyeX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9iaW5hcnkubWpzXCI7XG5cbmRlc2NyaWJlKCdCaW5hcnknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBbXG4gICAgICAgIFsnYScsICdhXFx1MDAwMCddLFxuICAgICAgICBbJ1x1MjYzOScsICc5JiddLFxuICAgICAgICBbJ0lcdTAwRjF0XHUwMEVCcm5cdTAwRTJ0aVx1MDBGNG5cdTAwRTBsaXpcdTAwRTZ0aVx1MDBGOG4nLCAnSVxcdTAwMDBcdTAwRjFcXHUwMDAwdFxcdTAwMDBcdTAwRUJcXHUwMDAwclxcdTAwMDBuXFx1MDAwMFx1MDBFMlxcdTAwMDB0XFx1MDAwMGlcXHUwMDAwXHUwMEY0XFx1MDAwMG5cXHUwMDAwXHUwMEUwXFx1MDAwMGxcXHUwMDAwaVxcdTAwMDB6XFx1MDAwMFx1MDBFNlxcdTAwMDB0XFx1MDAwMGlcXHUwMDAwXHUwMEY4XFx1MDAwMG5cXHUwMDAwJ11cblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgaXQoJ2Zyb21CaW5hcnkodG9CaW5hcnkoJyArIGEgKyAnKSkgc2hvdWxkIHdvcmsnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgciA9IHRvQmluYXJ5KGEpO1xuICAgICAgICAgICAgZXhwZWN0KHIpLnRvLmJlLmVxdWFsKGIpO1xuICAgICAgICAgICAgZXhwZWN0KGZyb21CaW5hcnkocikpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICB9KVxuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmltcG9ydCB7T2JzZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5cblxuZGVzY3JpYmUoJ09ic2VydmVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgIH07XG5cbiAgICBsZXQgb2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoY2FsbGJhY2spXG5cbiAgICBkZXNjcmliZSgnLmFkZFRhZygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnXSxcbiAgICAgICAgICAgIFsndGVzdDInXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdhZGRUYWcoJyArIGEgKyAnKSBzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgT2JzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG9ic2VydmVyLmFkZFRhZyhhKSkuaXMuaW5zdGFuY2VPZihPYnNlcnZlcilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5yZW1vdmVUYWcoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJ10sXG4gICAgICAgICAgICBbJ3Rlc3QyJ10sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgncmVtb3ZlVGFnKCcgKyBhICsgJykgc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIE9ic2VydmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlci5yZW1vdmVUYWcoYSkpLmlzLmluc3RhbmNlT2YoT2JzZXJ2ZXIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuaGFzVGFnKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIHRydWVdLFxuICAgICAgICAgICAgWyd0ZXN0MicsIHRydWVdLFxuICAgICAgICAgICAgWyd0ZXN0MycsIGZhbHNlXSxcbiAgICAgICAgICAgIFsndGVzdDQnLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgdGVtcE9ic2VydmVyID0gbmV3IE9ic2VydmVyKGNhbGxiYWNrKVxuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ29ic2VydmVyLmhhc3RUYWcoJyArIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoYiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0ZW1wT2JzZXJ2ZXIuYWRkVGFnKGEpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0ZW1wT2JzZXJ2ZXIuaGFzVGFnKGEpKS5pcy5iZS50cnVlXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHRlbXBPYnNlcnZlci5oYXNUYWcoYSkpLmlzLmJlLmZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnVwZGF0ZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBvYmogPSB7fVxuICAgICAgICBpdCgnb2JzZXJ2ZXIudXBkYXRlKCcgKyBvYmogKyAnKSBpcyAnICsgMSArIDMgKyA2LCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgdGVtcE9ic2VydmVyID0gbmV3IE9ic2VydmVyKGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgKyBiICsgY1xuICAgICAgICAgICAgfSwgMSwgMywgNilcblxuXG4gICAgICAgICAgICB0ZW1wT2JzZXJ2ZXIudXBkYXRlKG9iaikudGhlbihhID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3QoYSkuaXMuZXF1YWwoMSArIDMgKyA2KVxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3J1biBmdW5jdGlvbiAudXBkYXRlKCkgc2V2ZXJhbCB0aW1lcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgb2JqID0ge31cbiAgICAgICAgaXQoJ29ic2VydmVyLnVwZGF0ZSgnICsgb2JqICsgJykgaXMgJyArIDEgKyAzICsgNiwgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgbGV0IHRlbXBPYnNlcnZlciA9IG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHRlbXBPYnNlcnZlci51cGRhdGUob2JqKTtcbiAgICAgICAgICAgIHRlbXBPYnNlcnZlci51cGRhdGUob2JqKTtcbiAgICAgICAgICAgIHRlbXBPYnNlcnZlci51cGRhdGUob2JqKTtcbiAgICAgICAgICAgIHRlbXBPYnNlcnZlci51cGRhdGUob2JqKTtcbiAgICAgICAgICAgIHRlbXBPYnNlcnZlci51cGRhdGUob2JqKS50aGVuKF8gPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuZ2V0VGFncygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtbJ3Rlc3QxJywgJ3Rlc3QyJywgJ3Rlc3QzJywgJ3Rlc3Q0J10sIDRdLFxuICAgICAgICAgICAgW1sndGVzdDEnLCAndGVzdDEnLCAndGVzdDMnLCAndGVzdDQnXSwgM10sIC8vIGRvdWJsZSB0ZXN0MSAoc2V0IGlzIHVuaXF1ZXVlKVxuICAgICAgICAgICAgW1sndGVzdDEnLCAndGVzdDEnLCAndGVzdDEnLCAndGVzdDQnXSwgMl0sIC8vIG11bHRpcGxlIHRlc3QxIChzZXQgaXMgdW5pcXVldWUpXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgdGVtcE9ic2VydmVyID0gbmV3IE9ic2VydmVyKGNhbGxiYWNrKVxuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIG1heCA9IGEubGVuZ3RoOyBpIDwgbWF4OyBpKyspIHtcbiAgICAgICAgICAgICAgICB0ZW1wT2JzZXJ2ZXIuYWRkVGFnKGFbaV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpdCgnb2JzZXJ2ZXIuZ2V0VGFncygnICsgYSArICcpIGlzIGFycmF5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0ZW1wT2JzZXJ2ZXIuZ2V0VGFncygpKS50by5iZS5hbignYXJyYXknKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdvYnNlcnZlci5nZXRUYWdzKCcgKyBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiArIFwiIHRhZ3NcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0ZW1wT2JzZXJ2ZXIuZ2V0VGFncygpLmxlbmd0aCkuaXMuZXF1YWwoYik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IGVzY2FwZVN0cmluZyB9O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcHJlZml4ZXMgYWxsIHNwZWNpYWwgY2hhcmFjdGVycyB0aGF0IG1heSBhcHBlYXIgaW4gYSByZWdleCB3aXRoIGEgc2xhc2guXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI2LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZXNjYXBlU3RyaW5nKHZhbHVlKSB7XG5cdHJldHVybiB2YWxpZGF0ZVN0cmluZyh2YWx1ZSlcblx0XHQucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCsqPy5dL2csIFwiXFxcXCQmXCIpXG5cdFx0LnJlcGxhY2UoLy0vZywgXCJcXFxceDJkXCIpO1xufVxuIiwgIlxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7ZXNjYXBlU3RyaW5nfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3JlZ2V4Lm1qc1wiXG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cblxuZGVzY3JpYmUoJ2VzY2FwZVN0cmluZycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG4gICAgICAgIHByb21pc2VzLnB1c2goaW5pdEpTRE9NKCkpO1xuICAgICAgICBpZighZ2xvYmFsVGhpc1snY3J5cHRvJ10pIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXNbJ2NyeXB0byddID0gbmV3IG0uQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuXG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG4gICAgXG4gICAgW1xuICAgICAgICBbJ3Rlc3QxJywgJ3Rlc3QxJ10sXG4gICAgICAgIFsnJHsnLCAnXFxcXCRcXFxceyddLFxuICAgICAgICBbJ2kxOG57JywgJ2kxOG5cXFxceyddLFxuICAgICAgICBbJy8vJywgJy8vJ10sXG4gICAgICAgIFsnXFxcXCcsICdcXFxcXFxcXCddLFxuICAgICAgIFxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgaXQoJ2VzY2FwZVN0cmluZygnICsgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChlc2NhcGVTdHJpbmcoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ1JhbmRvbUlEJywgZnVuY3Rpb24gKCkge1xuXG4gICAgY2xhc3MgUmFuZG9tSUQge31cbiAgICBcbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuICAgICAgICBpZighZ2xvYmFsVGhpc1snY3J5cHRvJ10pIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXNbJ2NyeXB0byddID0gbmV3IG0uQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuXG4gICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3JhbmRvbWlkLm1qc1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgUmFuZG9tSUQgPSBtLlJhbmRvbUlEO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pKVxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcblxuICAgIH0pOyAgICBcbiAgICBcbiAgICBkZXNjcmliZSgnLnRvU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBpZCA9IG5ldyBSYW5kb21JRCgpXG4gICAgICAgIGxldCByZXN1bHQgPSBpZC50b1N0cmluZygpO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkuaXMuYSgnc3RyaW5nJylcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICJpbXBvcnQge0lEfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuZGVzY3JpYmUoJ0lEJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IHByb21pc2VzID0gW11cbiAgICAgICAgaWYoIWdsb2JhbFRoaXNbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbihtID0+IHtcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzWydjcnlwdG8nXSA9IG5ldyBtLkNyeXB0bygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgIH1cblxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcblxuICAgIH0pOyAgICBcbiAgICBcbiAgICBkZXNjcmliZSgnLnRvU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBpZCA9IG5ldyBJRCgpXG4gICAgICAgIGxldCByZXN1bHQgPSBpZC50b1N0cmluZygpO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkuaXMuYSgnc3RyaW5nJylcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSUQoJ3RleHQxNDI1aWQnKS50b1N0cmluZygpKS5pcy5lcXVhbCgndGV4dDE0MjVpZDEnKVxuICAgICAgICAgICAgZXhwZWN0KG5ldyBJRCgndGV4dDE0MjVpZCcpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKCd0ZXh0MTQyNWlkMicpXG4gICAgICAgICAgICBleHBlY3QobmV3IElEKCd0ZXh0MTQyNWlkJykudG9TdHJpbmcoKSkuaXMuZXF1YWwoJ3RleHQxNDI1aWQzJylcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnVVVJRCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGNsYXNzIFVVSUQge31cbiAgICBcbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuICAgICAgICBcbiAgICAgICAgaWYoIWdsb2JhbFRoaXNbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbihtID0+IHtcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzWydjcnlwdG8nXSA9IG5ldyBtLkNyeXB0bygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIFxuICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy91dWlkLm1qc1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgVVVJRCA9IG0uVVVJRDtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KSlcbiAgICAgICAgXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcblxuICAgIH0pOyAgICBcbiAgICBcbiAgICBkZXNjcmliZSgnLnRvU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHV1aWQgPSBuZXcgVVVJRCgpXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gdXVpZC50b1N0cmluZygpO1xuXG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS5pcy5hKCdzdHJpbmcnKVxuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdC5sZW5ndGgpLmlzLmVxdWFsKDM2KVxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgndGVzdCBmb3JtYXQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IHV1aWQgPSBuZXcgVVVJRCgpXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gdXVpZC50b1N0cmluZygpO1xuXG4gICAgICAgICAgICBjb25zdCByZWdleEV4cCA9IC9eW0EtRlxcZF17OH0tW0EtRlxcZF17NH0tNFtBLUZcXGRdezN9LVs4OUFCXVtBLUZcXGRdezN9LVtBLUZcXGRdezEyfSQvaTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMDAwOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gbmV3IFVVSUQoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSByZWdleEV4cC50ZXN0KHUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHIgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgnbm8gdXVpZCAnICsgdSArICcgPT4gJyArIHIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICJpbXBvcnQge1xuICAgIGlzUHJpbWl0aXZlLFxuICAgIGlzQm9vbGVhbixcbiAgICBpc1N0cmluZyxcbiAgICBpc09iamVjdCxcbiAgICBpc0FycmF5LFxuICAgIGlzSW5zdGFuY2UsXG4gICAgaXNGdW5jdGlvbixcbiAgICBpc0l0ZXJhYmxlLFxuICAgIGlzSW50ZWdlcixcbiAgICBpc1N5bWJvbFxufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2lzLm1qc1wiO1xuXG5cbmltcG9ydCB7SUR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzXCJcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuZGVzY3JpYmUoJ0lzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IHByb21pc2VzID0gW11cbiAgICAgICAgaWYoIWdsb2JhbFRoaXNbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbihtID0+IHtcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzWydjcnlwdG8nXSA9IG5ldyBtLkNyeXB0bygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgIH1cblxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcblxuICAgIH0pOyAgICBcbiAgICBcbiAgICBkZXNjcmliZSgnLmlzUHJpbWl0aXZlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIHRydWVdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbbnVsbCwgdHJ1ZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIHRydWVdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgdHJ1ZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgW3RydWUsIHRydWVdLFxuICAgICAgICAgICAgWzQuNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIHRydWVdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc1ByaW1pdGl2ZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzUHJpbWl0aXZlKGEpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcbiAgICBkZXNjcmliZSgnLmlzU3ltYm9sKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgdHJ1ZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2lzLmlzU3ltYm9sKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNTeW1ib2woYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5pc0ludGVnZXIoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgdHJ1ZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNJbnRlZ2VyKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNJbnRlZ2VyKGEpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuaXNJdGVyYWJsZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCB0cnVlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2lzLmlzSXRlcmFibGUoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc0l0ZXJhYmxlKGEpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuaXNCb29sZWFuKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNCb29sZWFuKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNCb29sZWFuKGEpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuaXNTdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdHJ1ZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNTdHJpbmcoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc1N0cmluZyhhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmlzSW5zdGFuY2UoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbbmV3IElEKCksIElELCAgdHJ1ZV0sXG4gICAgICAgICAgICBbbmV3IElEKCksICgpPT57fSwgIGZhbHNlXSxcbiAgICAgICAgICAgIFsndGVzdDEnLCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2lzLmlzSW5zdGFuY2UoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykgc2hvdWxkIHJldHVybiAnICsgdHlwZW9mIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNJbnN0YW5jZShhLCBiKSkuaXMuZXF1YWwoYylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBcbiAgICBcbiAgICBkZXNjcmliZSgnLmlzT2JqZWN0KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgdHJ1ZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2lzLmlzT2JqZWN0KCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNPYmplY3QoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnLmlzQXJyYXkoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCB0cnVlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNBcnJheSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzQXJyYXkoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmlzRnVuY3Rpb24oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCB0cnVlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNGdW5jdGlvbignICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzRnVuY3Rpb24oYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtcbiAgICB2YWxpZGF0ZVByaW1pdGl2ZSxcbiAgICB2YWxpZGF0ZUJvb2xlYW4sXG4gICAgdmFsaWRhdGVTdHJpbmcsXG4gICAgdmFsaWRhdGVPYmplY3QsXG4gICAgdmFsaWRhdGVBcnJheSxcbiAgICB2YWxpZGF0ZUZ1bmN0aW9uLFxuICAgIHZhbGlkYXRlSW50ZWdlcixcbiAgICB2YWxpZGF0ZUluc3RhbmNlLFxuICAgIHZhbGlkYXRlSXRlcmFibGUsXG4gICAgdmFsaWRhdGVTeW1ib2xcbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanNcIlxuXG5pbXBvcnQge0Jhc2V9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvYmFzZS5tanNcIlxuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIlxuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgndmFsaWRhdGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlUHJpbWl0aXZlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIHRydWVdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbbnVsbCwgdHJ1ZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIHRydWVdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFs0LjUsIHRydWVdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCB0cnVlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVQcmltaXRpdmUoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHZhbGlkYXRlUHJpbWl0aXZlKGEpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVQcmltaXRpdmUoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIG5vdCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2YWxpZGF0ZVByaW1pdGl2ZShhKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy52YWxpZGF0ZUludGVnZXIoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgdHJ1ZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVJbnRlZ2VyKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB2YWxpZGF0ZUludGVnZXIoYSkpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUludGVnZXIoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIG5vdCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2YWxpZGF0ZUludGVnZXIoYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcbiAgICBcbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlU3ltYm9sKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgdHJ1ZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlU3ltYm9sKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB2YWxpZGF0ZVN5bWJvbChhKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlU3ltYm9sKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVTeW1ib2woYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVJdGVyYWJsZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCB0cnVlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlSXRlcmFibGUoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlSXRlcmFibGUoYSlcbiAgICAgICAgICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVJdGVyYWJsZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlSXRlcmFibGUoYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVCb29sZWFuKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVCb29sZWFuKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUJvb2xlYW4oYSlcbiAgICAgICAgICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlQm9vbGVhbignICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlQm9vbGVhbihhKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIHRydWVdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlU3RyaW5nKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0cmluZyhhKVxuICAgICAgICAgICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZVN0cmluZygnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlU3RyaW5nKGEpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlT2JqZWN0KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgdHJ1ZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlT2JqZWN0KCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZU9iamVjdChhKVxuICAgICAgICAgICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZU9iamVjdCgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlT2JqZWN0KGEpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlSW5zdGFuY2UoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgT2JqZWN0XSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIE9iamVjdF0sXG4gICAgICAgICAgICBbbnVsbCwgT2JqZWN0XSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBPYmplY3RdLFxuICAgICAgICAgICAgWzIsIE9iamVjdF0sXG4gICAgICAgICAgICBbZmFsc2UsIE9iamVjdF0sXG4gICAgICAgICAgICBbdHJ1ZSwgT2JqZWN0XSxcbiAgICAgICAgICAgIFs0LjUsIE9iamVjdF0sXG4gICAgICAgICAgICBbe30sIEJhc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgT2JqZWN0XSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIE9iamVjdF0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuXG4gICAgICAgICAgICBpdCgnLnZhbGlkYXRlSW5zdGFuY2UoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUluc3RhbmNlKGEsIGIpXG4gICAgICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlSW5zdGFuY2UoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbe30sIE9iamVjdCwgdHJ1ZV0sXG4gICAgICAgICAgICBbbmV3IEJhc2UsIEJhc2UsIHRydWVdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCcudmFsaWRhdGVJbnN0YW5jZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVJbnN0YW5jZShhLCBiKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVBcnJheSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIHRydWVdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmIChiID09PSBmYWxzZSkge1xuXG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUFycmF5KCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUFycmF5KGEpXG4gICAgICAgICAgICAgICAgICAgIH0pLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlQXJyYXkoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIG5vdCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2YWxpZGF0ZUFycmF5KGEpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy52YWxpZGF0ZUZ1bmN0aW9uKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgdHJ1ZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlRnVuY3Rpb24oJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlRnVuY3Rpb24oYSlcbiAgICAgICAgICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVGdW5jdGlvbignICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlRnVuY3Rpb24oYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtTdGFja30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9zdGFjay5tanNcIjtcbmltcG9ydCB7XG4gICAgdHlwZU9mXG59IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvdHlwZW9mLm1qc1wiXG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCd0eXBlT2YnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLnR5cGVPZigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFt0cnVlLCAnYm9vbGVhbiddLFxuICAgICAgICAgICAgW251bGwsICdudWxsJ10sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCAndW5kZWZpbmVkJ10sXG4gICAgICAgICAgICBbUHJvbWlzZS5yZXNvbHZlKCksICdwcm9taXNlJ10sXG4gICAgICAgICAgICBbbmV3IFdlYWtNYXAoKSwgJ3dlYWttYXAnXSxcbiAgICAgICAgICAgIFtuZXcgTWFwKCksICdtYXAnXSxcbiAgICAgICAgICAgIFtOYU4sICdudW1iZXInXSxcbiAgICAgICAgICAgIFtmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgfSwgJ2dlbmVyYXRvcmZ1bmN0aW9uJ10sXG4gICAgICAgICAgICBbNSwgJ251bWJlciddLFxuICAgICAgICAgICAgW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIH0sICdmdW5jdGlvbiddLFxuICAgICAgICAgICAgWy9hLywgJ3JlZ2V4cCddLFxuICAgICAgICAgICAgW25ldyBEYXRlKCksICdkYXRlJ10sXG4gICAgICAgICAgICBbe30sICdvYmplY3QnXSxcbiAgICAgICAgICAgIFtbXSwgJ2FycmF5J10sXG4gICAgICAgICAgICBbJycsICdzdHJpbmcnXSxcbiAgICAgICAgICAgIFtuZXcgRXJyb3IsICdlcnJvciddLFxuICAgICAgICAgICAgW25ldyBTdGFjaywgJ3N0YWNrJ11cblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuICcgKyBiICsgJyB3aGVuIHRoZSB2YWx1ZSAnICsgdHlwZU9mKGEpLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHR5cGVPZihhKSkudG8uYmUuZXF1YWwoYik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTtcblxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1VuaXF1ZVF1ZXVlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3VuaXF1ZXF1ZXVlLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdVbmlxdWVRdWV1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcXVldWU7XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIHF1ZXVlID0gbmV3IFVuaXF1ZVF1ZXVlO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnaXNFbXB0eSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdmaXJzdCBpdCBzaG91bGQgZW1wdHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnYWRkIHNlcXVlbmNlIHBlZWsgYW5kIHBvbGwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Jlc3VsdCBhLGEsYSxiJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmFkZCh7YTogMX0pKS50by5iZS5pbnN0YW5jZU9mKFVuaXF1ZVF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmFkZCh7YTogMn0pKS50by5iZS5pbnN0YW5jZU9mKFVuaXF1ZVF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5hZGQoe2E6IDN9KSkudG8uYmUuaW5zdGFuY2VPZihVbmlxdWVRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucGVlaygpKS50by5kZWVwLmVxdWFsKHthOjF9KTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wZWVrKCkpLnRvLmRlZXAuZXF1YWwoe2E6MX0pO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBvbGwoKSkudG8uZGVlcC5lcXVhbCh7YToxfSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucG9sbCgpKS50by5kZWVwLmVxdWFsKHthOjJ9KTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBlZWsoKSkudG8uZGVlcC5lcXVhbCh7YTozfSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucG9sbCgpKS50by5kZWVwLmVxdWFsKHthOjN9KTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdhZGQgYW5kIGNsZWFyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgZW1wdHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmFkZCh7YTogMX0pKS50by5iZS5pbnN0YW5jZU9mKFVuaXF1ZVF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmNsZWFyKCkpLnRvLmJlLmluc3RhbmNlT2YoVW5pcXVlUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuICAgIFxuICAgIGRlc2NyaWJlKCdhZGQgbm8gb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpPT57cXVldWUuYWRkKFtdKX0pLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgICAgIGV4cGVjdCgoKT0+e3F1ZXVlLmFkZCgxKX0pLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgICAgIGV4cGVjdCgoKT0+e3F1ZXVlLmFkZCh0cnVlKX0pLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgICAgIGV4cGVjdCgoKT0+e3F1ZXVlLmFkZCgpfSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICAgICAgZXhwZWN0KCgpPT57cXVldWUuYWRkKFN5bWJvbChcIjFcIikpfSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICAgICAgZXhwZWN0KCgpPT57cXVldWUuYWRkKGZ1bmN0aW9uKCl7fSl9KS50by50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgIH0pO1xuXG4gICAgfSlcbn0pIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1N0YWNrfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3N0YWNrLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdTdGFjaycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgc3RhY2s7XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIHN0YWNrID0gbmV3IFN0YWNrO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnaXNFbXB0eSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdmaXJzdCBpdCBzaG91bGQgZW1wdHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2suaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnYWRkIHNlcXVlbmNlIHBlZWsgYW5kIHB1bGwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Jlc3VsdCBhLGEsYSxiJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLnB1c2goJ2EnKSkudG8uYmUuaW5zdGFuY2VPZihTdGFjayk7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2suaXNFbXB0eSgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5wdXNoKCdiJykpLnRvLmJlLmluc3RhbmNlT2YoU3RhY2spO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLnB1c2goJ2MnKSkudG8uYmUuaW5zdGFuY2VPZihTdGFjayk7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2sucGVlaygpKS50by5iZS5lcXVhbCgnYycpO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLnBlZWsoKSkudG8uYmUuZXF1YWwoJ2MnKTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5wb3AoKSkudG8uYmUuZXF1YWwoJ2MnKTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5wZWVrKCkpLnRvLmJlLmVxdWFsKCdiJyk7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2suaXNFbXB0eSgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2FkZCBhbmQgY2xlYXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2sucHVzaCgnYScpKS50by5iZS5pbnN0YW5jZU9mKFN0YWNrKTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLmNsZWFyKCkpLnRvLmJlLmluc3RhbmNlT2YoU3RhY2spO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxufSkiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0Jhc2VXaXRoT3B0aW9uc30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0Jhc2VXaXRoT3B0aW9ucycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCduZXcgQmFzZVdpdGhPcHRpb25zJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdpcyBpbnN0YW5jZSBvZiBCYXNlV2l0aE9wdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEJhc2VXaXRoT3B0aW9ucykudG8uYmUuaW5zdGFuY2VPZihCYXNlV2l0aE9wdGlvbnMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnaXMgaW5zdGFuY2Ugb2YgT2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBCYXNlV2l0aE9wdGlvbnMpLnRvLmJlLmluc3RhbmNlT2YoT2JqZWN0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2dldCBvcHRpb24gaXMgdHJ1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQmFzZVdpdGhPcHRpb25zKHthOiB0cnVlfSkuZ2V0T3B0aW9uKCdhJykpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxufSkiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtOb2RlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL25vZGUubWpzXCI7XG5pbXBvcnQge05vZGVMaXN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL25vZGVsaXN0Lm1qc1wiO1xuaW1wb3J0IHtOb2RlUmVjdXJzaXZlSXRlcmF0b3J9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZXJlY3Vyc2l2ZWl0ZXJhdG9yLm1qc1wiO1xuXG5kZXNjcmliZSgnTm9kZUxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVzY3JpYmUoJyNjb25zdHJ1Y3RvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBjcmVhdGUgYW4gZW1wdHkgTm9kZUxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgbm9kZUxpc3QgPSBuZXcgTm9kZUxpc3QoKTtcblxuICAgICAgICAgICAgZXhwZWN0KG5vZGVMaXN0LnNpemUpLnRvLmVxdWFsKDApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIE5vZGVMaXN0IGZyb20gYW4gYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgbm9kZUxpc3QgPSBuZXcgTm9kZUxpc3QoW1xuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKSxcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JyksXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpXG4gICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgZXhwZWN0KG5vZGVMaXN0LnNpemUpLnRvLmVxdWFsKDMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIE5vZGVMaXN0IGZyb20gYSBOb2RlTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdChbXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpLFxuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKSxcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JylcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBsZXQgbm9kZUxpc3QyID0gbmV3IE5vZGVMaXN0KG5vZGVMaXN0KTtcblxuICAgICAgICAgICAgZXhwZWN0KG5vZGVMaXN0Mi5zaXplKS50by5lcXVhbCgzKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnY3JlYXRlIE5vZGVMaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkpLmlzLmluc3RhbmNlb2YoTm9kZUxpc3QpO1xuICAgIH0pXG5cbiAgICBpdCgnYWRkIE5vZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKS5hZGQobmV3IE5vZGUoKSkpLnRvLmJlLmluc3RhbmNlb2YoTm9kZUxpc3QpO1xuICAgIH0pXG5cbiAgICBpdCgncmVtb3ZlIE5vZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKS5yZW1vdmUobmV3IE5vZGUoKSkpLnRvLmJlLmluc3RhbmNlb2YoTm9kZUxpc3QpO1xuICAgIH0pXG5cbiAgICBpdCgnaGFzIHVua25vd24gTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLmhhcyhuZXcgTm9kZSkpLnRvLmJlLmZhbHNlO1xuICAgIH0pXG5cbiAgICBpdCgnaGFzIGFkZGVkIE5vZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG4gPSBuZXcgTm9kZTtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLmFkZChuKS5oYXMobikpLnRvLmJlLnRydWU7XG4gICAgfSlcblxuICAgIGl0KCd0aHJvdyBleGNlcHRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgTm9kZUxpc3QoKS5hZGQoMSkpLnRvLnRocm93KEVycm9yKTtcbiAgICB9KVxuXG4gICAgaXQoJ2NoZWNrIGxldmVsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IHJvb3QgPSBuZXcgTm9kZSgncm9vdCcpO1xuXG4gICAgICAgIGNvbnN0IG4xID0gbmV3IE5vZGUoJ24xJyk7XG4gICAgICAgIGNvbnN0IG4yID0gbmV3IE5vZGUoJ24yJyk7XG4gICAgICAgIGNvbnN0IG4zID0gbmV3IE5vZGUoJ24zJyk7XG4gICAgICAgIGNvbnN0IG40ID0gbmV3IE5vZGUoJ240Jyk7XG5cbiAgICAgICAgY29uc3QgbjExID0gbmV3IE5vZGUoJ24xMScpO1xuICAgICAgICBjb25zdCBuMTIgPSBuZXcgTm9kZSgnbjEyJyk7XG4gICAgICAgIGNvbnN0IG4xMyA9IG5ldyBOb2RlKCduMTMnKTtcblxuICAgICAgICBjb25zdCBuMjEgPSBuZXcgTm9kZSgnbjIxJyk7XG4gICAgICAgIGNvbnN0IG4yMiA9IG5ldyBOb2RlKCduMjInKTtcbiAgICAgICAgY29uc3QgbjIzID0gbmV3IE5vZGUoJ24yMycpO1xuXG4gICAgICAgIGNvbnN0IG40MSA9IG5ldyBOb2RlKCduNDEnKTtcbiAgICAgICAgY29uc3QgbjQyID0gbmV3IE5vZGUoJ240MicpO1xuXG4gICAgICAgIGNvbnN0IG40MTEgPSBuZXcgTm9kZSgnbjQxMScpO1xuICAgICAgICBjb25zdCBuNDEyID0gbmV3IE5vZGUoJ240MTInKTtcbiAgICAgICAgY29uc3QgbjQxMyA9IG5ldyBOb2RlKCduNDEzJyk7XG5cbiAgICAgICAgY29uc3QgbjQxMjEgPSBuZXcgTm9kZSgnbjQxMjEnKTtcblxuICAgICAgICByb290LmFwcGVuZENoaWxkKG4xKS5hcHBlbmRDaGlsZChuMikuYXBwZW5kQ2hpbGQobjMpLmFwcGVuZENoaWxkKG40KTtcbiAgICAgICAgbjEuYXBwZW5kQ2hpbGQobjExKS5hcHBlbmRDaGlsZChuMTIpLmFwcGVuZENoaWxkKG4xMyk7XG4gICAgICAgIG4yLmFwcGVuZENoaWxkKG4yMSkuYXBwZW5kQ2hpbGQobjIyKS5hcHBlbmRDaGlsZChuMjMpO1xuICAgICAgICBuNC5hcHBlbmRDaGlsZChuNDEpLmFwcGVuZENoaWxkKG40Mik7XG4gICAgICAgIG40MS5hcHBlbmRDaGlsZChuNDExKS5hcHBlbmRDaGlsZChuNDEyKS5hcHBlbmRDaGlsZChuNDEzKTtcbiAgICAgICAgbjQxMi5hcHBlbmRDaGlsZChuNDEyMSk7XG5cbiAgICAgICAgbGV0IGl0ZXJhdG9yID0gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihyb290KTtcblxuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBpdGVyYXRvcikge1xuICAgICAgICAgICAgZXhwZWN0KG4pLnRvLmJlLmFuLmluc3RhbmNlb2YoTm9kZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuLnZhbHVlICsgXCI6XCIgKyBuLmxldmVsKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChbXG4gICAgICAgICAgICAncm9vdDowJyxcbiAgICAgICAgICAgICduMToxJyxcbiAgICAgICAgICAgICduMTE6MicsXG4gICAgICAgICAgICAnbjEyOjInLFxuICAgICAgICAgICAgJ24xMzoyJyxcbiAgICAgICAgICAgICduMjoxJyxcbiAgICAgICAgICAgICduMjE6MicsXG4gICAgICAgICAgICAnbjIyOjInLFxuICAgICAgICAgICAgJ24yMzoyJyxcbiAgICAgICAgICAgICduMzoxJyxcbiAgICAgICAgICAgICduNDoxJyxcbiAgICAgICAgICAgICduNDE6MicsXG4gICAgICAgICAgICAnbjQxMTozJyxcbiAgICAgICAgICAgICduNDEyOjMnLFxuICAgICAgICAgICAgJ240MTIxOjQnLFxuICAgICAgICAgICAgJ240MTM6MycsXG4gICAgICAgICAgICAnbjQyOjInXG5cbiAgICAgICAgXSk7XG5cbiAgICAgICAgbjQxMjEuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJ240MTIxMScpKTtcblxuICAgICAgICBpdGVyYXRvciA9IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3Iocm9vdCk7XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIGV4cGVjdChuKS50by5iZS5hbi5pbnN0YW5jZW9mKE5vZGUpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gobi52YWx1ZSArIFwiOlwiICsgbi5sZXZlbCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFtcbiAgICAgICAgICAgICdyb290OjAnLFxuICAgICAgICAgICAgJ24xOjEnLFxuICAgICAgICAgICAgJ24xMToyJyxcbiAgICAgICAgICAgICduMTI6MicsXG4gICAgICAgICAgICAnbjEzOjInLFxuICAgICAgICAgICAgJ24yOjEnLFxuICAgICAgICAgICAgJ24yMToyJyxcbiAgICAgICAgICAgICduMjI6MicsXG4gICAgICAgICAgICAnbjIzOjInLFxuICAgICAgICAgICAgJ24zOjEnLFxuICAgICAgICAgICAgJ240OjEnLFxuICAgICAgICAgICAgJ240MToyJyxcbiAgICAgICAgICAgICduNDExOjMnLFxuICAgICAgICAgICAgJ240MTI6MycsXG4gICAgICAgICAgICAnbjQxMjE6NCcsXG4gICAgICAgICAgICAnbjQxMjExOjUnLFxuICAgICAgICAgICAgJ240MTM6MycsXG4gICAgICAgICAgICAnbjQyOjInXG5cbiAgICAgICAgXSk7XG5cblxuICAgICAgICBjb25zdCBiYiA9IG5ldyBOb2RlKCdiYicpIC8vIGJpZyBiYW5nXG5cbiAgICAgICAgYmIuYXBwZW5kQ2hpbGQocm9vdCk7XG4gICAgICAgIGl0ZXJhdG9yID0gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihiYik7XG5cbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBpdGVyYXRvcikge1xuICAgICAgICAgICAgZXhwZWN0KG4pLnRvLmJlLmFuLmluc3RhbmNlb2YoTm9kZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuLnZhbHVlICsgXCI6XCIgKyBuLmxldmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoW1xuICAgICAgICAgICAgJ2JiOjAnLFxuICAgICAgICAgICAgJ3Jvb3Q6MScsXG4gICAgICAgICAgICAnbjE6MicsXG4gICAgICAgICAgICAnbjExOjMnLFxuICAgICAgICAgICAgJ24xMjozJyxcbiAgICAgICAgICAgICduMTM6MycsXG4gICAgICAgICAgICAnbjI6MicsXG4gICAgICAgICAgICAnbjIxOjMnLFxuICAgICAgICAgICAgJ24yMjozJyxcbiAgICAgICAgICAgICduMjM6MycsXG4gICAgICAgICAgICAnbjM6MicsXG4gICAgICAgICAgICAnbjQ6MicsXG4gICAgICAgICAgICAnbjQxOjMnLFxuICAgICAgICAgICAgJ240MTE6NCcsXG4gICAgICAgICAgICAnbjQxMjo0JyxcbiAgICAgICAgICAgICduNDEyMTo1JyxcbiAgICAgICAgICAgICduNDEyMTE6NicsXG4gICAgICAgICAgICAnbjQxMzo0JyxcbiAgICAgICAgICAgICduNDI6MydcblxuICAgICAgICBdKTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnTGV2ZWxzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCduMiBzaG91bGQgbGV2ZWwgMicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgbjAgPSBuZXcgTm9kZSgnYWJjJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IG4xID0gbmV3IE5vZGUoJ2RlZicpO1xuICAgICAgICAgICAgbjAuYXBwZW5kQ2hpbGQobjEpXG5cbiAgICAgICAgICAgIGNvbnN0IG4yID0gbmV3IE5vZGUoJ2doaScpO1xuICAgICAgICAgICAgbjEuYXBwZW5kQ2hpbGQobjIpO1xuXG4gICAgICAgICAgICBjb25zdCBuMyA9IG5ldyBOb2RlKCdqa2wnKTtcbiAgICAgICAgICAgIG4yLmFwcGVuZENoaWxkKG4zKTtcblxuICAgICAgICAgICAgZXhwZWN0KG4wLmxldmVsKS50by5iZS5lcXVhbCgwKTtcbiAgICAgICAgICAgIGV4cGVjdChuMS5sZXZlbCkudG8uYmUuZXF1YWwoMSk7XG4gICAgICAgICAgICBleHBlY3QobjIubGV2ZWwpLnRvLmJlLmVxdWFsKDIpO1xuICAgICAgICAgICAgZXhwZWN0KG4zLmxldmVsKS50by5iZS5lcXVhbCgzKTtcblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ3RvU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBvdXRwdXQgZW1wdHkgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBOb2RlKCk7XG4gICAgICAgICAgICBleHBlY3Qobm9kZS50b1N0cmluZygpKS5pcy5lcXVhbCgnJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgb3V0cHV0IHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IG4wID0gbmV3IE5vZGUoJ2FiYycpO1xuXG4gICAgICAgICAgICBjb25zdCBuMSA9IG5ldyBOb2RlKCdkZWYnKTtcbiAgICAgICAgICAgIG4wLmFwcGVuZENoaWxkKG4xKVxuXG4gICAgICAgICAgICBjb25zdCBuMTEgPSBuZXcgTm9kZSgnZ2hpJyk7XG4gICAgICAgICAgICBuMC5hcHBlbmRDaGlsZChuMTEpXG5cbiAgICAgICAgICAgIGNvbnN0IG4yID0gbmV3IE5vZGUoJ2prbCcpO1xuICAgICAgICAgICAgbjEuYXBwZW5kQ2hpbGQobjIpO1xuXG4gICAgICAgICAgICBjb25zdCBuMyA9IG5ldyBOb2RlKCdtbm8nKTtcbiAgICAgICAgICAgIG4xLmFwcGVuZENoaWxkKG4zKTtcblxuICAgICAgICAgICAgY29uc3QgbjQgPSBuZXcgTm9kZSgncHFyJyk7XG4gICAgICAgICAgICBuMi5hcHBlbmRDaGlsZChuNCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChuMi5sZXZlbCkudG8uYmUuZXF1YWwoMilcblxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhuMC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIC8vIGV4cGVjdChuMC50b1N0cmluZygpKS5pcy5lcXVhbCgnJyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtRdWV1ZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9xdWV1ZS5tanNcIjtcblxuZGVzY3JpYmUoJ1F1ZXVlJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBxdWV1ZTtcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgcXVldWUgPSBuZXcgUXVldWU7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdpc0VtcHR5KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2ZpcnN0IGl0IHNob3VsZCBlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdhZGQgc2VxdWVuY2UgcGVlayBhbmQgcG9sbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVzdWx0IGEsYSxhLGInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKCdhJykpLnRvLmJlLmluc3RhbmNlT2YoUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKCdiJykpLnRvLmJlLmluc3RhbmNlT2YoUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmFkZCgnYycpKS50by5iZS5pbnN0YW5jZU9mKFF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wZWVrKCkpLnRvLmJlLmVxdWFsKCdhJyk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucGVlaygpKS50by5iZS5lcXVhbCgnYScpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBvbGwoKSkudG8uYmUuZXF1YWwoJ2EnKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wZWVrKCkpLnRvLmJlLmVxdWFsKCdiJyk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2FkZCBhbmQgY2xlYXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKCdhJykpLnRvLmJlLmluc3RhbmNlT2YoUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuY2xlYXIoKSkudG8uYmUuaW5zdGFuY2VPZihRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cblxuICAgIFxufSkiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtOb2RlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL25vZGUubWpzXCI7XG5pbXBvcnQge05vZGVMaXN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL25vZGVsaXN0Lm1qc1wiO1xuaW1wb3J0IHtOb2RlUmVjdXJzaXZlSXRlcmF0b3J9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZXJlY3Vyc2l2ZWl0ZXJhdG9yLm1qc1wiO1xuXG5kZXNjcmliZSgnTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yJywgZnVuY3Rpb24gKCkge1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBleGVwdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3IoKSkudG8udGhyb3coRXJyb3IpXG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBiZSBhIGZ1bmN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QoTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKS50by5iZS5hKCdmdW5jdGlvbicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBiZSBhIGNvbnN0cnVjdG9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihuZXcgTm9kZSkpLnRvLmJlLmFuLmluc3RhbmNlb2YoTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT3BlcmF0b3JzL3lpZWxkXG4gICAgICovXG4gICAgaXQoJ3VuZGVmaW5lZCBzaG91bGQgbm90IHJlc3VsdCBpbiB1bmRlZmluZWQgbm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKG5ldyBOb2RlKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICBleHBlY3QobikudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG4udmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChbdW5kZWZpbmVkXSk7XG5cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaXRlcmF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9XG4gICAgICAgICAgICBuZXcgTm9kZSgnMScpXG4gICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQoXG4gICAgICAgICAgICAobmV3IE5vZGUoJzInKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzIuMScpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnMi4yJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCcyLjMnKSkpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCczJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCc0JykuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzQuMScpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnNC4yJykpKTtcblxuICAgICAgICBjb25zdCBpdGVyYXRvciA9IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3Iobm9kZSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBpdGVyYXRvcikge1xuICAgICAgICAgICAgZXhwZWN0KG4pLnRvLmJlLmFuLmluc3RhbmNlb2YoTm9kZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoWycxJywgJzInLCAnMi4xJywgJzIuMicsICcyLjMnLCAnMycsICc0JywgJzQuMScsICc0LjInXSk7XG5cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaXRlcmF0ZSBub2RlbGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgbm9kZUxpc3QgPSBuZXcgTm9kZUxpc3QoKTtcblxuICAgICAgICBub2RlTGlzdC5hZGQoXG4gICAgICAgICAgICAobmV3IE5vZGUoJzInKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzIuMScpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnMi4yJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCcyLjMnKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzMnKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzQnKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnNC4xJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCc0LjInKSkpKTtcblxuICAgICAgICBub2RlTGlzdC5hZGQobmV3IE5vZGUoJ3gnKSk7XG5cbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKG5vZGVMaXN0KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICBleHBlY3QobikudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG4udmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFsnMicsICcyLjEnLCAnMi4yJywgJzIuMycsICczJywgJzQnLCAnNC4xJywgJzQuMicsICd4J10pO1xuXG4gICAgfSk7XG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sLCBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5cbmltcG9ydCB7IEZvcm1hdHRlciBhcyBUZXh0Rm9ybWF0dGVyIH0gZnJvbSBcIi4uL3RleHQvZm9ybWF0dGVyLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbnMgfSBmcm9tIFwiLi90cmFuc2xhdGlvbnMubWpzXCI7XG5cbmV4cG9ydCB7IEZvcm1hdHRlciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcm5hbFRyYW5zbGF0aW9uU3ltYm9sID0gU3ltYm9sKFwiaW50ZXJuYWxUcmFuc2xhdGlvblwiKTtcblxuLyoqXG4gKiBUaGUgRm9ybWF0dGVyIGV4dGVuZHMgdGhlIFRleHQuRm9ybWF0dGVyIHdpdGggdGhlIHBvc3NpYmlsaXR5IHRvIHJlcGxhY2UgdGhlIGtleSBieSBhIHRyYW5zbGF0aW9uLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9pMThuL2Zvcm1hdHRlci5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkkxOG5cbiAqL1xuY2xhc3MgRm9ybWF0dGVyIGV4dGVuZHMgVGV4dEZvcm1hdHRlciB7XG5cdC8qKlxuXHQgKiBEZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG1hcmtlcnMgYXJlIGAke2AgYW5kIGB9YFxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvYmplY3QsIHRyYW5zbGF0aW9uLCBvcHRpb25zKSB7XG5cdFx0c3VwZXIob2JqZWN0LCBvcHRpb25zKTtcblx0XHR0aGlzW2ludGVybmFsVHJhbnNsYXRpb25TeW1ib2xdID0gdmFsaWRhdGVJbnN0YW5jZShcblx0XHRcdHRyYW5zbGF0aW9uLFxuXHRcdFx0VHJhbnNsYXRpb25zLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvaTE4bi9mb3JtYXR0ZXJAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBtYXJrZXJcblx0ICogQHByb3BlcnR5IHthcnJheX0gbWFya2VyLm9wZW49W1wiaTE4bntcIixcIiR7XCJdXG5cdCAqIEBwcm9wZXJ0eSB7YXJyYXl9IG1hcmtlci5jbG9zZT1bXCIke1wiXVxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gcGFyYW1ldGVyXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXJhbWV0ZXIuZGVsaW1pdGVyPVwiOjpcIlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcGFyYW1ldGVyLmFzc2lnbm1lbnQ9XCI9XCJcblx0ICogQHByb3BlcnR5IHtvYmplY3R9IGNhbGxiYWNrc1xuXHQgKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBjYWxsYmFja3MuaTE4bj0oKT0+e31cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0Y2FsbGJhY2tzOiB7XG5cdFx0XHRcdGkxOG46ICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzW2ludGVybmFsVHJhbnNsYXRpb25TeW1ib2xdLmdldFRleHQodmFsaWRhdGVTdHJpbmcodmFsdWUpKTtcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRtYXJrZXI6IHtcblx0XHRcdFx0b3BlbjogW1wiaTE4bntcIiwgXCIke1wiXSxcblx0XHRcdFx0Y2xvc2U6IFtcIn1cIl0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7RXJyb3J9IHRvbyBkZWVwIG5lc3Rpbmdcblx0ICogQHRocm93cyB7RXJyb3J9IGtleSBub3QgZm91bmRcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBjbG9zaW5nIG1hcmtlciBpcyBtaXNzaW5nXG5cdCAqL1xuXHRmb3JtYXQodGV4dCkge1xuXHRcdHZhbGlkYXRlU3RyaW5nKHRleHQpO1xuXG5cdFx0Y29uc3Qgb3Blbk1hcmtlciA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wib3BlblwiXT8uWzBdO1xuXHRcdGNvbnN0IGNsb3NlTWFya2VyID0gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJjbG9zZVwiXT8uWzBdO1xuXG5cdFx0aWYgKHRleHQuaW5kZXhPZihvcGVuTWFya2VyKSA9PT0gMCkge1xuXHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKG9wZW5NYXJrZXIubGVuZ3RoKTtcblxuXHRcdFx0aWYgKHRleHQuaW5kZXhPZihjbG9zZU1hcmtlcikgPT09IHRleHQubGVuZ3RoIC0gY2xvc2VNYXJrZXIubGVuZ3RoKSB7XG5cdFx0XHRcdHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCB0ZXh0Lmxlbmd0aCAtIGNsb3NlTWFya2VyLmxlbmd0aCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgY2xvc2luZyBtYXJrZXIgaXMgbWlzc2luZ1wiKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBwYXJ0cyA9IHZhbGlkYXRlU3RyaW5nKHRleHQpLnNwbGl0KFwiOjpcIik7XG5cdFx0Y29uc3QgdHJhbnNsYXRpb25LZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKTsgLy8ga2V5IHZhbHVlIGRlbGltaXRlclxuXHRcdGNvbnN0IHBhcmFtZXRlciA9IHBhcnRzLmpvaW4oXCI6OlwiKS50cmltKCk7XG5cblx0XHRsZXQgYXNzZW1ibGVkVGV4dCA9IGAke29wZW5NYXJrZXJ9c3RhdGljOiR7dHJhbnNsYXRpb25LZXl9IHwgY2FsbDppMThuYDtcblx0XHRpZiAocGFyYW1ldGVyLmxlbmd0aCA+IDApIHtcblx0XHRcdGFzc2VtYmxlZFRleHQgKz0gYDo6JHtwYXJhbWV0ZXJ9YDtcblx0XHR9XG5cdFx0YXNzZW1ibGVkVGV4dCArPSBjbG9zZU1hcmtlcjtcblx0XHRyZXR1cm4gc3VwZXIuZm9ybWF0KGFzc2VtYmxlZFRleHQpO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Rm9ybWF0dGVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vZm9ybWF0dGVyLm1qc1wiO1xuaW1wb3J0IHtUcmFuc2xhdGlvbnN9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0Zvcm1hdHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdleGFtcGxlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIHdpdGggbWFya2VyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBuZXcgVHJhbnNsYXRpb25zKCdlbicpXG4gICAgICAgICAgICAgICAgLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIHRoZWtleTogXCIke2FuaW1hbH0gaGFzIGVhdGVuIHRoZSAke2Zvb2R9IVwiXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGYgPSBuZXcgRm9ybWF0dGVyKHt9LCB0cmFuc2xhdGlvbnMpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBleHBlY3QoZi5mb3JtYXQoXCJpMThue3RoZWtleTo6YW5pbWFsPWRvZzo6Zm9vZD1jYWtlfVwiKSkudG8uYmUuZXF1YWwoJ2RvZyBoYXMgZWF0ZW4gdGhlIGNha2UhJyk7XG4gICAgICAgICAgICAvLyBcdTIxQTYgZG9nIGhhcyBlYXRlbiB0aGUgY2FrZSEgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpdCgnc2hvdWxkIHJ1biB3aXRob3V0IG1hcmtlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zID0gbmV3IFRyYW5zbGF0aW9ucygnZW4nKVxuICAgICAgICAgICAgICAgIC5hc3NpZ25UcmFuc2xhdGlvbnMoe1xuICAgICAgICAgICAgICAgICAgICB0aGVrZXk6IFwiJHthbmltYWx9IGhhcyBlYXRlbiB0aGUgJHtmb29kfSFcIlxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBtaXNzaW5nIG1hcmtlclxuICAgICAgICAgICAgZXhwZWN0KG5ldyBGb3JtYXR0ZXIoe30sIHRyYW5zbGF0aW9ucykuZm9ybWF0KFwidGhla2V5OjphbmltYWw9ZG9nOjpmb29kPWNha2VcIikpLnRvLmJlLmVxdWFsKCdkb2cgaGFzIGVhdGVuIHRoZSBjYWtlIScpO1xuICAgICAgICAgICAgLy8gXHUyMUE2IGRvZyBoYXMgZWF0ZW4gdGhlIGNha2UhICAgICAgICAgICAgICAgIFxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnZm9ybWF0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnaTE4bnt0cmFuc2xhdGlvbmtleTo6YT0zOjpiPTV9JywgJ3Rlc3QgaXMgMyBhbmQgNSddLFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2Zvcm1hdCAnICsgYSArICcgc2hvdWxkICcgKyBiLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBuZXcgVHJhbnNsYXRpb25zKCdkZScpLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9ua2V5OiBcInRlc3QgaXMgJHthfSBhbmQgJHtifVwiXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGV4cGVjdChcbiAgICAgICAgICAgICAgICAgICAgbmV3IEZvcm1hdHRlcih7fSwgdHJhbnNsYXRpb25zKS5mb3JtYXQoYSlcbiAgICAgICAgICAgICAgICApLnRvLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cblxufSlcbjsiLCAiXG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge3BhcnNlTG9jYWxlLCBMb2NhbGV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi9sb2NhbGUubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0xvY2FsZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCduZXcgaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgLy8gbGFuZ3VhZ2UsIHJlZ2lvbiwgc2NyaXB0LCB2YXJpYW50cywgZXh0bGFuZywgcHJpdmF0ZVVzZVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzU2NDYuaHRtbFxuICAgICAgICAgICAgWyd6aCcsIHVuZGVmaW5lZCwgJ0hhbnQnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnemgtSGFudCddLCAvLyB6aC1IYW50IChDaGluZXNlIHdyaXR0ZW4gdXNpbmcgdGhlIFRyYWRpdGlvbmFsIENoaW5lc2Ugc2NyaXB0KVxuICAgICAgICAgICAgWydkZScsICdDSCcsIHVuZGVmaW5lZCwgJzE5MDEnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJ2RlLUNILTE5MDEnXSwgIC8vIGRlLUNILTE5MDEgKEdlcm1hbiBhcyB1c2VkIGluIFN3aXR6ZXJsYW5kIHVzaW5nIHRoZSAxOTAxIHZhcmlhbnQgW29ydGhvZ3JhcGh5XSlcbiAgICAgICAgICAgIFsnc2wnLCAnSVQnLCB1bmRlZmluZWQsICduZWRpcycsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnc2wtSVQtbmVkaXMnXSwgIC8vIHNsLUlULW5lZGlzIChTbG92ZW5pYW4gYXMgdXNlZCBpbiBJdGFseSwgTmFkaXphIGRpYWxlY3QpXG4gICAgICAgICAgICBbJ2h5JywgJ0lUJywgJ0xhdG4nLCAnYXJldmVsYScsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnaHktTGF0bi1JVC1hcmV2ZWxhJ10sIC8vIGh5LUxhdG4tSVQtYXJldmVsYSAoRWFzdGVybiBBcm1lbmlhbiB3cml0dGVuIGluIExhdGluIHNjcmlwdCwgYXMgdXNlZCBpbiBJdGFseSlcbiAgICAgICAgICAgIFsnemgnLCAnQ04nLCAnSGFucycsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICd6aC1IYW5zLUNOJ10sIC8vIHpoLUhhbnMtQ04gKENoaW5lc2Ugd3JpdHRlbiB1c2luZyB0aGUgU2ltcGxpZmllZCBzY3JpcHQgYXMgdXNlZCBpbiAgbWFpbmxhbmQgQ2hpbmEpXG4gICAgICAgICAgICBbJ3NyJywgJ1JTJywgJ0xhdG4nLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnc3ItTGF0bi1SUyddLCAvLyBzci1MYXRuLVJTIChTZXJiaWFuIHdyaXR0ZW4gdXNpbmcgdGhlIExhdGluIHNjcmlwdCBhcyB1c2VkIGluIFNlcmJpYSlcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBlID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGcgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ25ldyBMb2NhbGUoJyArIGEgKyAnLCcgKyBiICsgJywnICsgYyArICcsJyArIGQgKyAnLCcgKyBlICsgJywnICsgZiArICcpIHNob3VsZCByZXR1cm4gJyArIGcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgTG9jYWxlKGEsIGIsIGMsIGQsIGUsIGYpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKGcpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdwYXJzZUxvY2FsZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcblxuICAgICAgICAgICAgLy8gbGFuZ3VhZ2UsIHJlZ2lvbiwgc2NyaXB0LCB2YXJpYW50cywgZXh0bGFuZywgcHJpdmF0ZVVzZVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzU2NDYuaHRtbFxuICAgICAgICAgICAgWyd6aCcsIHVuZGVmaW5lZCwgJ0hhbnQnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnemgtSGFudCddLCAvLyB6aC1IYW50IChDaGluZXNlIHdyaXR0ZW4gdXNpbmcgdGhlIFRyYWRpdGlvbmFsIENoaW5lc2Ugc2NyaXB0KVxuICAgICAgICAgICAgWydkZScsICdDSCcsIHVuZGVmaW5lZCwgJzE5MDEnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJ2RlLUNILTE5MDEnXSwgIC8vIGRlLUNILTE5MDEgKEdlcm1hbiBhcyB1c2VkIGluIFN3aXR6ZXJsYW5kIHVzaW5nIHRoZSAxOTAxIHZhcmlhbnQgW29ydGhvZ3JhcGh5XSlcbiAgICAgICAgICAgIFsnc2wnLCAnSVQnLCB1bmRlZmluZWQsICduZWRpcycsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnc2wtSVQtbmVkaXMnXSwgIC8vIHNsLUlULW5lZGlzIChTbG92ZW5pYW4gYXMgdXNlZCBpbiBJdGFseSwgTmFkaXphIGRpYWxlY3QpXG4gICAgICAgICAgICBbJ2h5JywgJ0lUJywgJ0xhdG4nLCAnYXJldmVsYScsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnaHktTGF0bi1JVC1hcmV2ZWxhJ10sIC8vIGh5LUxhdG4tSVQtYXJldmVsYSAoRWFzdGVybiBBcm1lbmlhbiB3cml0dGVuIGluIExhdGluIHNjcmlwdCwgYXMgdXNlZCBpbiBJdGFseSlcbiAgICAgICAgICAgIFsnemgnLCAnQ04nLCAnSGFucycsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICd6aC1IYW5zLUNOJ10sIC8vIHpoLUhhbnMtQ04gKENoaW5lc2Ugd3JpdHRlbiB1c2luZyB0aGUgU2ltcGxpZmllZCBzY3JpcHQgYXMgdXNlZCBpbiAgbWFpbmxhbmQgQ2hpbmEpXG4gICAgICAgICAgICBbJ3NyJywgJ1JTJywgJ0xhdG4nLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnc3ItTGF0bi1SUyddLCAvLyBzci1MYXRuLVJTIChTZXJiaWFuIHdyaXR0ZW4gdXNpbmcgdGhlIExhdGluIHNjcmlwdCBhcyB1c2VkIGluIFNlcmJpYSlcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBlID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGcgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ25ldyBMb2NhbGUoJyArIGEgKyAnLCcgKyBiICsgJywnICsgYyArICcsJyArIGQgKyAnLCcgKyBlICsgJywnICsgZiArICcpIHNob3VsZCByZXR1cm4gJyArIGcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsZSA9IHBhcnNlTG9jYWxlKGcpXG4gICAgICAgICAgICAgICAgZXhwZWN0KGxvY2FsZS5sb2NhbGVTdHJpbmcpLnRvLmJlLmVxdWFsKGcpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChsb2NhbGUubGFuZ3VhZ2UpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChsb2NhbGUucmVnaW9uKS50by5iZS5lcXVhbChiKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobG9jYWxlLnNjcmlwdCkudG8uYmUuZXF1YWwoYyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxvY2FsZS52YXJpYW50cykudG8uYmUuZXF1YWwoZCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxvY2FsZS5leHRsYW5nKS50by5iZS5lcXVhbChlKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobG9jYWxlLnByaXZhdGVVc2UpLnRvLmJlLmVxdWFsKGYpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2NhbGUoYSwgYiwgYywgZCwgZSwgZikudG9TdHJpbmcoKSkuaXMuZXF1YWwoZylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtBVFRSSUJVVEVfT0JKRUNUTElOS30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtnZXRMaW5rZWRPYmplY3RzfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtQcm92aWRlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVyLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtnZXREb2N1bWVudFRyYW5zbGF0aW9ucywgVHJhbnNsYXRpb25zfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vdHJhbnNsYXRpb25zLm1qc1wiO1xuXG5kZXNjcmliZSgnUHJvdmlkZXInLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgIGxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG5cbiAgICB9KVxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgfSlcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdQcm92aWRlciBhbmQgRG9tJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wgPSBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL3RyYW5zbGF0aW9uc0BAbGlua1wiKTtcblxuICAgICAgICBpdCgnYXNzaWduVG9FbGVtZW50JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBuZXcgUHJvdmlkZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IHIgPSBwLmFzc2lnblRvRWxlbWVudCh1bmRlZmluZWQsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgICByLnRoZW4oKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX09CSkVDVExJTkspO1xuICAgICAgICAgICAgICAgIGlmIChzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKFwiQXR0cmlidXRlIG5vdCBzZXRcIikpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaSA9IGdldExpbmtlZE9iamVjdHMoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbClcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihcIk5vIGxpbmtlZCBvYmplY3QgZm91bmRcIikpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBjb3VudGVyID0gMDtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IHYgb2YgaSkge1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ZXIgIT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJObyBsaW5rZWQgb2JqZWN0IGZvdW5kXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGRvY1RyYW5zID0gZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoZWxlbWVudClcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jVHJhbnMpLmlzLmluc3RhbmNlb2YoVHJhbnNsYXRpb25zKTtcblxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IEZvcm1hdHRlciB9IGZyb20gXCIuLi8uLi90ZXh0L2Zvcm1hdHRlci5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IGlzSW5zdGFuY2UsIGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgcGFyc2VMb2NhbGUgfSBmcm9tIFwiLi4vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tIFwiLi4vcHJvdmlkZXIubWpzXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbnMgfSBmcm9tIFwiLi4vdHJhbnNsYXRpb25zLm1qc1wiO1xuXG5leHBvcnQgeyBGZXRjaCB9O1xuXG4vKipcbiAqIFRoZSBmZXRjaCBwcm92aWRlciByZXRyaWV2ZXMgYSBKU09OIGZpbGUgZnJvbSB0aGUgZ2l2ZW4gVVJMIGFuZCByZXR1cm5zIGEgdHJhbnNsYXRpb24gb2JqZWN0LlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vLi4vZXhhbXBsZS9pMThuL3Byb3ZpZGVycy9mZXRjaC5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkkxOG4uUHJvdmlkZXJzXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzMwNjZ9XG4gKiBAdHV0b3JpYWwgaTE4bi1sb2NhbGUtYW5kLWZvcm1hdHRlclxuICovXG5jbGFzcyBGZXRjaCBleHRlbmRzIFByb3ZpZGVyIHtcblx0LyoqXG5cdCAqIEFzIG9wdGlvbnMgdGhlIGtleSBgZmV0Y2hgIGNhbiBiZSBwYXNzZWQuIFRoaXMgY29uZmlnIG9iamVjdCBpcyBwYXNzZWQgdG8gdGhlIGZldGNoIG1ldGhvZCBhcyBpbml0LlxuXHQgKlxuXHQgKiBUaGUgdXJsIG1heSBjb250YWluIHBsYWNlaG9sZGVycyAobGFuZ3VhZ2UsIHNjcmlwdCwgcmVnaW9uLCB2YXJpYW50cywgZXh0bGFuZywgcHJpdmF0ZVVzZSksIHNvIHlvdSBjYW4gc3BlY2lmeSBvbmUgdXJsIGZvciBhbGwgdHJhbnNsYXRpb25zLlxuXHQgKlxuXHQgKiBgYGBcblx0ICogbmV3IEZldGNoKCdodHRwczovL3d3dy5leGFtcGxlLmNvbS9hc3NldHMvJHtsYW5ndWFnZX0uanNvbicpXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBzZWUge0BsaW5rIE1vbnN0ZXIuSTE4bi5Qcm92aWRlcnMuRmV0Y2gjZGVmYXVsdHN9XG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9mZXRjaH1cblx0ICovXG5cdGNvbnN0cnVjdG9yKHVybCwgb3B0aW9ucykge1xuXHRcdHN1cGVyKG9wdGlvbnMpO1xuXG5cdFx0aWYgKGlzSW5zdGFuY2UodXJsLCBVUkwpKSB7XG5cdFx0XHR1cmwgPSB1cmwudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb25zID0ge307XG5cdFx0fVxuXG5cdFx0dmFsaWRhdGVTdHJpbmcodXJsKTtcblxuXHRcdC8qKlxuXHRcdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfVxuXHRcdCAqL1xuXHRcdHRoaXMudXJsID0gdXJsO1xuXG5cdFx0LyoqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcHJvcGVydHkge09iamVjdH0gb3B0aW9uc1xuXHRcdCAqL1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gZXh0ZW5kKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHRoaXMuZGVmYXVsdHMsXG5cdFx0XHR2YWxpZGF0ZU9iamVjdChvcHRpb25zKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmF1bHRzXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubWV0aG9kPUdFVFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubW9kZT1jb3JzXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5jYWNoZT1uby1jYWNoZVxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2guY3JlZGVudGlhbHM9b21pdFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gucmVkaXJlY3Q9Zm9sbG93XG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5yZWZlcnJlclBvbGljeT1uby1yZWZlcnJlclxuXHQgKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoXG5cdFx0XHR7XG5cdFx0XHRcdGZldGNoOiB7XG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLCAvLyAqR0VULCBQT1NULCBQVVQsIERFTEVURSwgZXRjLlxuXHRcdFx0XHRcdG1vZGU6IFwiY29yc1wiLCAvLyBuby1jb3JzLCAqY29ycywgc2FtZS1vcmlnaW5cblx0XHRcdFx0XHRjYWNoZTogXCJuby1jYWNoZVwiLCAvLyAqZGVmYXVsdCwgbm8tY2FjaGUsIHJlbG9hZCwgZm9yY2UtY2FjaGUsIG9ubHktaWYtY2FjaGVkXG5cdFx0XHRcdFx0Y3JlZGVudGlhbHM6IFwib21pdFwiLCAvLyBpbmNsdWRlLCAqc2FtZS1vcmlnaW4sIG9taXRcblx0XHRcdFx0XHRyZWRpcmVjdDogXCJmb2xsb3dcIiwgLy8gbWFudWFsLCAqZm9sbG93LCBlcnJvclxuXHRcdFx0XHRcdHJlZmVycmVyUG9saWN5OiBcIm5vLXJlZmVycmVyXCIsIC8vIG5vLXJlZmVycmVyLCAqbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUsIG9yaWdpbiwgb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luLCBzYW1lLW9yaWdpbiwgc3RyaWN0LW9yaWdpbiwgc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbiwgdW5zYWZlLXVybFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtMb2NhbGV8c3RyaW5nfSBsb2NhbGVcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGdldFRyYW5zbGF0aW9ucyhsb2NhbGUpIHtcblx0XHRpZiAoaXNTdHJpbmcobG9jYWxlKSkge1xuXHRcdFx0bG9jYWxlID0gcGFyc2VMb2NhbGUobG9jYWxlKTtcblx0XHR9XG5cblx0XHRjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKGxvY2FsZS5nZXRNYXAoKSk7XG5cblx0XHRyZXR1cm4gZ2V0R2xvYmFsRnVuY3Rpb24oXCJmZXRjaFwiKShcblx0XHRcdGZvcm1hdHRlci5mb3JtYXQodGhpcy51cmwpLFxuXHRcdFx0dGhpcy5nZXRPcHRpb24oXCJmZXRjaFwiLCB7fSksXG5cdFx0KVxuXHRcdFx0LnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5qc29uKCkpXG5cdFx0XHQudGhlbigoZGF0YSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFRyYW5zbGF0aW9ucyhsb2NhbGUpLmFzc2lnblRyYW5zbGF0aW9ucyhkYXRhKTtcblx0XHRcdH0pO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuXG5pbXBvcnQge0ZldGNofSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXJzL2ZldGNoLm1qc1wiO1xuaW1wb3J0IHtUcmFuc2xhdGlvbnN9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5cblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5sZXQgZmV0Y2hSZWZlcmVuY2U7XG5cblxuZGVzY3JpYmUoJ1RyYW5zbGF0aW9uIFByb3ZpZGVyIEZldGNoJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgIGZldGNoUmVmZXJlbmNlID0gZ2xvYmFsWydmZXRjaCddO1xuICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBqc29uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IFwidGVzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZmV0Y2ggbW9jayBkYXRhIGFuZCBjcmVhdGUgdHJhbnNsYXRpb24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2ZldGNoJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IHAgPSAobmV3IEZldGNoKG5ldyBVUkwoJ2h0dHA6Ly9leGFtcGxlLmNvbScpKSkuZ2V0VHJhbnNsYXRpb25zKCdlbicpO1xuXG4gICAgICAgICAgICBleHBlY3QocCkuaXMuaW5zdGFuY2VvZihQcm9taXNlKTtcblxuICAgICAgICAgICAgcC50aGVuKHIgPT4ge1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHIpLmlzLmluc3RhbmNlb2YoVHJhbnNsYXRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuXG5pbXBvcnQge0VtYmVkfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXJzL2VtYmVkLm1qc1wiO1xuaW1wb3J0IHtUcmFuc2xhdGlvbnN9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmNvbnN0IGh0bWwxID0gYFxuPHNjcmlwdCBpZD1cInRlbXBsb2NhbGVcIiB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiPlxue1xuICAgICAgICBcImtleVwiOiBcInRyYW5zbGF0aW9uXCJcbn1cbjwvc2NyaXB0PlxuYDtcblxuZGVzY3JpYmUoJ1RyYW5zbGF0aW9uIFByb3ZpZGVyIEVtYmVkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2dldCBtb2NrIGRhdGEgYW5kIGNyZWF0ZSB0cmFuc2xhdGlvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnZW1iZWQnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCBlID0gbmV3IEVtYmVkKCd0ZW1wbG9jYWxlJyk7XG4gICAgICAgICAgICBsZXQgcCA9IGUuZ2V0VHJhbnNsYXRpb25zKCdlbicpO1xuICAgICAgICAgICAgZXhwZWN0KHApLmlzLmluc3RhbmNlb2YoUHJvbWlzZSk7XG5cbiAgICAgICAgICAgIHAudGhlbihyID0+IHtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChyKS5pcy5pbnN0YW5jZW9mKFRyYW5zbGF0aW9ucyk7XG4gXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ID0gci5nZXRUZXh0KCdrZXknKVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QodCkuaXMuZXF1YWwoJ3RyYW5zbGF0aW9uJyk7XG5cblxuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtwYXJzZUxvY2FsZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7RW1iZWR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZW1iZWQubWpzXCI7XG5pbXBvcnQge1xuICAgIFRyYW5zbGF0aW9ucyxcbiAgICBnZXREb2N1bWVudFRyYW5zbGF0aW9uc1xuICAgIFxufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vdHJhbnNsYXRpb25zLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnVHJhbnNsYXRpb25zJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ0luc3RhbmNlIGFuZCBJbml0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCB0cmFuc2xhdGlvbjtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uID0gbmV3IFRyYW5zbGF0aW9ucyhwYXJzZUxvY2FsZSgnZW4tR0InKSk7XG5cbiAgICAgICAgICAgIHRyYW5zbGF0aW9uLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgdGVzdDE6IFwiYWJjXCIsXG4gICAgICAgICAgICAgICAgdGVzdDI6IHsnb3RoZXInOiAneHl6J31cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdjcmVhdGUgaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFRyYW5zbGF0aW9ucyhwYXJzZUxvY2FsZSgnZW4tR0InKSkpLmlzLmluc3RhbmNlb2YoVHJhbnNsYXRpb25zKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2luaXQgdHJhbnNsYXRpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHRyYW5zbGF0aW9uLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgdGVzdDE6IFwiYWJjXCIsXG4gICAgICAgICAgICAgICAgdGVzdDI6IHsnb3RoZXInOiAneHl6J31cbiAgICAgICAgICAgIH0pKS5pcy5pbnN0YW5jZW9mKFRyYW5zbGF0aW9ucyk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ2V0VGV4dCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgdHJhbnNsYXRpb247XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICB0cmFuc2xhdGlvbiA9IG5ldyBUcmFuc2xhdGlvbnMocGFyc2VMb2NhbGUoJ2VuLUdCJykpO1xuXG4gICAgICAgICAgICB0cmFuc2xhdGlvbi5hc3NpZ25UcmFuc2xhdGlvbnMoe1xuICAgICAgICAgICAgICAgIHRlc3QxOiBcImFiY1wiLFxuICAgICAgICAgICAgICAgIHRlc3QyOiB7J290aGVyJzogJ3h5eid9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnY3JlYXRlLCBzZXQgYW5kIGdldCBlbi1HQicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCh0cmFuc2xhdGlvbi5nZXRUZXh0KCd0ZXN0MScpKS5pcy5lcXVhbCgnYWJjJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdjcmVhdGUsIHNldCBhbmQgZ2V0ICBlbi1HQiB3aXRoIHBsdXJhbHJ1bGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHRyYW5zbGF0aW9uLmdldFRleHQoJ3Rlc3QyJykpLmlzLmVxdWFsKCd4eXonKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogaW5pdERvY3VtZW50VHJhbnNsYXRpb25cbiAgICAgKi9cblxuICAgIGRlc2NyaWJlKFwidGVzdCBpbml0RG9jdW1lbnRUcmFuc2xhdGlvbiBcIiwgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgbGV0IGh0bWwxID0gYDxkaXYgaWQ9XCJtb2NrLXRyYW5zbGF0aW9uc1wiPjwvZGl2PlxuICAgIFxuPHNjcmlwdCB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiIGRhdGEtbW9uc3Rlci1yb2xlPVwidHJhbnNsYXRpb25zXCI+XG4gICAge1xuICAgICAgICBcInRlc3QxXCI6IFwiYWJjXCIsXG4gICAgICAgIFwidGVzdDJcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcInh5elwiXG4gICAgICAgIH1cbiAgICB9XG48L3NjcmlwdD5cblxuPHNjcmlwdCB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiIGRhdGEtbW9uc3Rlci1yb2xlPVwidHJhbnNsYXRpb25zXCI+XG4gICAge1xuICAgICAgICBcInRlc3QxXCI6IFwieHl6XCIsXG4gICAgICAgIFwidGVzdDNcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcInh5elwiXG4gICAgICAgIH1cbiAgICB9XG48L3NjcmlwdD4gICAgXG4gICAgXG5gO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgICAgIGl0KCdJbml0IHRyYW5zbGF0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2stdHJhbnNsYXRpb25zJyk7XG4gICAgICAgICAgICBFbWJlZC5hc3NpZ25UcmFuc2xhdGlvbnNUb0VsZW1lbnQoZWxlbSkudGhlbigobykgPT4ge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gbm8gZXhjZXB0aW9uIGJlY2F1c2Ugb2YgZGVmYXVsdFxuICAgICAgICAgICAgICAgIGV4cGVjdChnZXREb2N1bWVudFRyYW5zbGF0aW9ucyhlbGVtKS5nZXRUZXh0KCduby1rZXknLCd3aXRoLWRlZmF1bHQnKSlcbiAgICAgICAgICAgICAgICAgICAgLmlzLmVxdWFsKCd3aXRoLWRlZmF1bHQnKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBleHBlY3QoZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoZWxlbSkuZ2V0VGV4dCgndGVzdDEnKSlcbiAgICAgICAgICAgICAgICAgICAgLmlzLmVxdWFsKCd4eXonKTtcblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG5cbn0pOyJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1DQSxXQUFTLFdBQVcsT0FBTztBQUMxQixRQUFJLFVBQVU7QUFBVyxhQUFPO0FBQ2hDLFFBQUksVUFBVTtBQUFNLGFBQU87QUFDM0IsV0FBTyxPQUFPLFFBQVEsT0FBTyxRQUFRLE1BQU07QUFBQSxFQUM1QztBQWVBLFdBQVMsWUFBWSxPQUFPO0FBQzNCLFFBQUk7QUFFSixRQUFJLFVBQVUsVUFBYSxVQUFVLE1BQU07QUFDMUMsYUFBTztBQUFBLElBQ1I7QUFFQSxXQUFPLE9BQU87QUFFZCxRQUNDLFNBQVMsWUFDVCxTQUFTLFlBQ1QsU0FBUyxhQUNULFNBQVMsVUFDUjtBQUNELGFBQU87QUFBQSxJQUNSO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFlQSxXQUFTLFNBQVMsT0FBTztBQUN4QixXQUFPLGFBQWEsT0FBTyxRQUFRLE9BQU87QUFBQSxFQUMzQztBQWVBLFdBQVMsVUFBVSxPQUFPO0FBQ3pCLFFBQUksVUFBVSxRQUFRLFVBQVUsT0FBTztBQUN0QyxhQUFPO0FBQUEsSUFDUjtBQUVBLFdBQU87QUFBQSxFQUNSO0FBZUEsV0FBUyxTQUFTLE9BQU87QUFDeEIsUUFBSSxVQUFVLFVBQWEsT0FBTyxVQUFVLFVBQVU7QUFDckQsYUFBTztBQUFBLElBQ1I7QUFDQSxXQUFPO0FBQUEsRUFDUjtBQWVBLFdBQVMsU0FBUyxPQUFPO0FBQ3hCLFFBQUksUUFBUSxLQUFLO0FBQUcsYUFBTztBQUMzQixRQUFJLFlBQVksS0FBSztBQUFHLGFBQU87QUFFL0IsUUFBSSxPQUFPLFVBQVUsVUFBVTtBQUM5QixhQUFPO0FBQUEsSUFDUjtBQUVBLFdBQU87QUFBQSxFQUNSO0FBZ0JBLFdBQVMsV0FBVyxPQUFPLFVBQVU7QUFDcEMsUUFBSSxDQUFDLFNBQVMsS0FBSztBQUFHLGFBQU87QUFDN0IsUUFBSSxDQUFDLFdBQVcsUUFBUTtBQUFHLGFBQU87QUFDbEMsUUFBSSxDQUFDLFNBQVMsZUFBZSxXQUFXO0FBQUcsYUFBTztBQUNsRCxXQUFPLGlCQUFpQixXQUFXLE9BQU87QUFBQSxFQUMzQztBQWdCQSxXQUFTLFFBQVEsT0FBTztBQUN2QixXQUFPLE1BQU0sUUFBUSxLQUFLO0FBQUEsRUFDM0I7QUFlQSxXQUFTLFdBQVcsT0FBTztBQUMxQixRQUFJLFFBQVEsS0FBSztBQUFHLGFBQU87QUFDM0IsUUFBSSxZQUFZLEtBQUs7QUFBRyxhQUFPO0FBRS9CLFFBQUksT0FBTyxVQUFVLFlBQVk7QUFDaEMsYUFBTztBQUFBLElBQ1I7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQWVBLFdBQVMsVUFBVSxPQUFPO0FBQ3pCLFdBQU8sT0FBTyxVQUFVLEtBQUs7QUFBQSxFQUM5QjtBQTNPQTtBQUFBO0FBQUE7QUFBQTs7O0FDdURBLFdBQVMsaUJBQWlCLE9BQU87QUFDaEMsUUFBSSxDQUFDLFdBQVcsS0FBSyxHQUFHO0FBQ3ZCLFlBQU0sSUFBSSxVQUFVLHVCQUF1QjtBQUFBLElBQzVDO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUF3QkEsV0FBUyxrQkFBa0IsT0FBTztBQUNqQyxRQUFJLENBQUMsWUFBWSxLQUFLLEdBQUc7QUFDeEIsWUFBTSxJQUFJLFVBQVUsMEJBQTBCO0FBQUEsSUFDL0M7QUFDQSxXQUFPO0FBQUEsRUFDUjtBQXVCQSxXQUFTLGdCQUFnQixPQUFPO0FBQy9CLFFBQUksQ0FBQyxVQUFVLEtBQUssR0FBRztBQUN0QixZQUFNLElBQUksVUFBVSx3QkFBd0I7QUFBQSxJQUM3QztBQUNBLFdBQU87QUFBQSxFQUNSO0FBcUJBLFdBQVMsZUFBZSxPQUFPO0FBQzlCLFFBQUksQ0FBQyxTQUFTLEtBQUssR0FBRztBQUNyQixZQUFNLElBQUksVUFBVSx1QkFBdUI7QUFBQSxJQUM1QztBQUNBLFdBQU87QUFBQSxFQUNSO0FBc0JBLFdBQVMsZUFBZSxPQUFPO0FBQzlCLFFBQUksQ0FBQyxTQUFTLEtBQUssR0FBRztBQUNyQixZQUFNLElBQUksVUFBVSx1QkFBdUI7QUFBQSxJQUM1QztBQUNBLFdBQU87QUFBQSxFQUNSO0FBc0JBLFdBQVMsaUJBQWlCLE9BQU8sVUFBVTtBQUMxQyxRQUFJLENBQUMsV0FBVyxPQUFPLFFBQVEsR0FBRztBQUNqQyxVQUFJLElBQUk7QUFDUixVQUFJLFNBQVMsUUFBUSxLQUFLLFdBQVcsUUFBUSxHQUFHO0FBQy9DLFlBQUksV0FBVyxNQUFNO0FBQUEsTUFDdEI7QUFFQSxVQUFJLEdBQUc7QUFDTixZQUFJLElBQUksQ0FBQztBQUFBLE1BQ1Y7QUFFQSxZQUFNLElBQUksVUFBVSw4QkFBOEIsQ0FBQyxFQUFFO0FBQUEsSUFDdEQ7QUFDQSxXQUFPO0FBQUEsRUFDUjtBQXFCQSxXQUFTLGNBQWMsT0FBTztBQUM3QixRQUFJLENBQUMsUUFBUSxLQUFLLEdBQUc7QUFDcEIsWUFBTSxJQUFJLFVBQVUsdUJBQXVCO0FBQUEsSUFDNUM7QUFDQSxXQUFPO0FBQUEsRUFDUjtBQXFCQSxXQUFTLGVBQWUsT0FBTztBQUM5QixRQUFJLENBQUMsU0FBUyxLQUFLLEdBQUc7QUFDckIsWUFBTSxJQUFJLFVBQVUsd0JBQXdCO0FBQUEsSUFDN0M7QUFDQSxXQUFPO0FBQUEsRUFDUjtBQXNCQSxXQUFTLGlCQUFpQixPQUFPO0FBQ2hDLFFBQUksQ0FBQyxXQUFXLEtBQUssR0FBRztBQUN2QixZQUFNLElBQUksVUFBVSx5QkFBeUI7QUFBQSxJQUM5QztBQUNBLFdBQU87QUFBQSxFQUNSO0FBc0JBLFdBQVMsZ0JBQWdCLE9BQU87QUFDL0IsUUFBSSxDQUFDLFVBQVUsS0FBSyxHQUFHO0FBQ3RCLFlBQU0sSUFBSSxVQUFVLHlCQUF5QjtBQUFBLElBQzlDO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUF4VEE7QUFBQTtBQU9BO0FBQUE7QUFBQTs7O0FDZ0VBLFdBQVMsWUFBWTtBQUNwQixXQUFPO0FBQUEsRUFDUjtBQWtDQSxXQUFTLGdCQUFnQixNQUFNO0FBQzlCLG1CQUFlLElBQUk7QUFDbkIsVUFBTSxJQUFJLGtCQUFrQixJQUFJO0FBQ2hDLFFBQUksT0FBTyxNQUFNO0FBQ2hCLFlBQU0sSUFBSSxNQUFNLGNBQWMsSUFBSSxpQkFBaUI7QUFDcEQsbUJBQWUsQ0FBQztBQUNoQixXQUFPO0FBQUEsRUFDUjtBQWdDQSxXQUFTLGtCQUFrQixNQUFNO0FBQ2hDLG1CQUFlLElBQUk7QUFDbkIsVUFBTSxJQUFJLGtCQUFrQixJQUFJO0FBQ2hDLFFBQUksT0FBTyxNQUFNO0FBQ2hCLFlBQU0sSUFBSSxNQUFNLGdCQUFnQixJQUFJLGlCQUFpQjtBQUN0RCxxQkFBaUIsQ0FBQztBQUNsQixXQUFPO0FBQUEsRUFDUjtBQXpKQSxNQW1CSTtBQW5CSjtBQUFBO0FBT0E7QUFrQkEsT0FBQyxXQUFZO0FBQ1osWUFBSSxPQUFPLGVBQWUsVUFBVTtBQUNuQyw0QkFBa0I7QUFDbEI7QUFBQSxRQUNEO0FBRUEsWUFBSSxPQUFPLFNBQVMsYUFBYTtBQUNoQyw0QkFBa0I7QUFDbEI7QUFBQSxRQUNELFdBQVcsT0FBTyxXQUFXLGFBQWE7QUFDekMsNEJBQWtCO0FBQ2xCO0FBQUEsUUFDRDtBQUVBLGVBQU8sZUFBZSxPQUFPLFdBQVcsZUFBZTtBQUFBLFVBQ3RELEtBQUssV0FBWTtBQUNoQixtQkFBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLGNBQWM7QUFBQSxRQUNmLENBQUM7QUFFRCxZQUFJLE9BQU8sZ0JBQWdCLFVBQVU7QUFDcEMsc0JBQVksYUFBYTtBQUN6QixpQkFBTyxPQUFPLFVBQVU7QUFFeEIsNEJBQWtCO0FBQ2xCO0FBQUEsUUFDRDtBQUVBLFlBQUk7QUFDSCw0QkFBa0IsU0FBUyxhQUFhLEVBQUU7QUFBQSxRQUMzQyxTQUFTLEdBQUc7QUFBQSxRQUFDO0FBRWIsY0FBTSxJQUFJLE1BQU0sMEJBQTBCO0FBQUEsTUFDM0MsR0FBRztBQUFBO0FBQUE7OztBQzNESDtBQUFBO0FBZUEsZUFBUyxVQUFXO0FBQ2xCLFlBQUksV0FBVyxDQUFDLEVBQUUsTUFBTSxLQUFLLFNBQVM7QUFFdEMsaUJBQVMsYUFBYyxLQUFLLEtBQUs7QUFDL0IsaUJBQU8sS0FBSyxHQUFHLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFDdEMsZ0JBQUksQ0FBQyxDQUFDLFNBQVMsUUFBUSxHQUFHO0FBQUcsa0JBQUksR0FBRyxJQUFJLElBQUksR0FBRztBQUFBLFVBQ2pELENBQUM7QUFBQSxRQUNIO0FBRUEsZUFBTyxTQUFTLGdCQUFpQjtBQUMvQixjQUFJLE9BQU8sQ0FBQyxFQUFFLE1BQU0sS0FBSyxTQUFTLEdBQzlCLElBQUksR0FDSixNQUFNLENBQUM7QUFFWCxpQkFBTyxJQUFJLEtBQUssUUFBUSxLQUFLO0FBQzNCLHlCQUFhLEtBQUssS0FBSyxDQUFDLENBQUM7QUFBQSxVQUMzQjtBQUVBLGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFNQSxhQUFPLFVBQVVBO0FBYWpCLGVBQVNBLGdCQUFnQixTQUFTLFFBQVEsS0FBSztBQUM3QyxZQUFJQyxVQUFTLFFBQVEsUUFBUSxXQUFXLFNBQVMsZUFBZSxRQUFRLEdBQ3BFLFFBQVFBLFFBQU8sVUFBVSxDQUFDLENBQUM7QUFHL0IsYUFBSyxVQUFVLFdBQVc7QUFDMUIsYUFBSyxXQUFXO0FBR2hCLGlCQUFTLE9BQU8sT0FBTztBQUNyQixlQUFLLEdBQUcsSUFBSSxNQUFNLEdBQUc7QUFBQSxRQUN2QjtBQUdBLGNBQU0sT0FBT0Q7QUFDYixZQUFJLE1BQU0sbUJBQW1CO0FBQzNCLGdCQUFNLGtCQUFrQixNQUFNLEdBQUc7QUFBQSxRQUNuQyxPQUFPO0FBQ0wsY0FBSTtBQUNGLGtCQUFNLElBQUksTUFBTTtBQUFBLFVBQ2xCLFNBQVEsR0FBRztBQUNULGlCQUFLLFFBQVEsRUFBRTtBQUFBLFVBQ2pCO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFNQSxNQUFBQSxnQkFBZSxZQUFZLE9BQU8sT0FBTyxNQUFNLFNBQVM7QUFNeEQsTUFBQUEsZ0JBQWUsVUFBVSxPQUFPO0FBTWhDLE1BQUFBLGdCQUFlLFVBQVUsY0FBY0E7QUFTdkMsTUFBQUEsZ0JBQWUsVUFBVSxTQUFTLFNBQVUsT0FBTztBQUNqRCxZQUFJQyxVQUFTLFFBQVEsZUFBZSxVQUFVLE9BQU8sR0FDakQsUUFBUUEsUUFBTyxFQUFFLE1BQU0sS0FBSyxLQUFLLEdBQUcsSUFBSTtBQUc1QyxZQUFJLFVBQVUsU0FBUyxLQUFLLE9BQU87QUFDakMsZ0JBQU0sUUFBUSxLQUFLO0FBQUEsUUFDckI7QUFFQSxlQUFPO0FBQUEsTUFDVDtBQUFBO0FBQUE7OztBQ25IQTtBQUFBO0FBQUE7QUE4Q0EsZUFBUyxZQUFZLEtBQUssTUFBTTtBQUM5QixZQUFJLE9BQU8sUUFBUSxlQUFlLFFBQVEsTUFBTTtBQUM5QyxpQkFBTztBQUFBLFFBQ1Q7QUFHQSxlQUFPLFFBQVEsT0FBTyxHQUFHO0FBQUEsTUFDM0I7QUFxQkEsZUFBUyxVQUFVLE1BQU07QUFDdkIsWUFBSSxNQUFNLEtBQUssUUFBUSxjQUFjLE1BQU07QUFDM0MsWUFBSSxRQUFRLElBQUksTUFBTSxpQkFBaUI7QUFDdkMsZUFBTyxNQUFNLElBQUksU0FBUyxXQUFXLE9BQU87QUFDMUMsY0FDRSxVQUFVLGlCQUNWLFVBQVUsZUFDVixVQUFVLGFBQ1Y7QUFDQSxtQkFBTyxDQUFDO0FBQUEsVUFDVjtBQUNBLGNBQUksU0FBUztBQUNiLGNBQUksT0FBTyxPQUFPLEtBQUssS0FBSztBQUM1QixjQUFJLFNBQVM7QUFDYixjQUFJLE1BQU07QUFDUixxQkFBUyxFQUFFLEdBQUcsV0FBVyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQUEsVUFDcEMsT0FBTztBQUNMLHFCQUFTLEVBQUUsR0FBRyxNQUFNLFFBQVEsZUFBZSxJQUFJLEVBQUU7QUFBQSxVQUNuRDtBQUVBLGlCQUFPO0FBQUEsUUFDVCxDQUFDO0FBQUEsTUFDSDtBQWlCQSxlQUFTLHFCQUFxQixLQUFLLFFBQVEsV0FBVztBQUNwRCxZQUFJLGlCQUFpQjtBQUNyQixZQUFJLE1BQU07QUFDVixvQkFBWSxPQUFPLGNBQWMsY0FBYyxPQUFPLFNBQVM7QUFFL0QsaUJBQVMsSUFBSSxHQUFHLElBQUksV0FBVyxLQUFLO0FBQ2xDLGNBQUksT0FBTyxPQUFPLENBQUM7QUFDbkIsY0FBSSxnQkFBZ0I7QUFDbEIsZ0JBQUksT0FBTyxLQUFLLE1BQU0sYUFBYTtBQUNqQywrQkFBaUIsZUFBZSxLQUFLLENBQUM7QUFBQSxZQUN4QyxPQUFPO0FBQ0wsK0JBQWlCLGVBQWUsS0FBSyxDQUFDO0FBQUEsWUFDeEM7QUFFQSxnQkFBSSxNQUFNLFlBQVksR0FBRztBQUN2QixvQkFBTTtBQUFBLFlBQ1I7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUVBLGVBQU87QUFBQSxNQUNUO0FBZ0JBLGVBQVMscUJBQXFCLEtBQUssS0FBSyxRQUFRO0FBQzlDLFlBQUksVUFBVTtBQUNkLFlBQUksWUFBWSxPQUFPO0FBQ3ZCLFlBQUksT0FBTztBQUVYLGlCQUFTLElBQUksR0FBRyxJQUFJLFdBQVcsS0FBSztBQUNsQyxjQUFJLFdBQVc7QUFDZixjQUFJLFVBQVU7QUFDZCxpQkFBTyxPQUFPLENBQUM7QUFHZixjQUFJLE1BQU0sWUFBWSxHQUFHO0FBQ3ZCLHVCQUFXLE9BQU8sS0FBSyxNQUFNLGNBQWMsS0FBSyxJQUFJLEtBQUs7QUFFekQsb0JBQVEsUUFBUSxJQUFJO0FBQUEsVUFDdEIsV0FBVyxPQUFPLEtBQUssTUFBTSxlQUFlLFFBQVEsS0FBSyxDQUFDLEdBQUc7QUFDM0Qsc0JBQVUsUUFBUSxLQUFLLENBQUM7QUFBQSxVQUMxQixXQUFXLE9BQU8sS0FBSyxNQUFNLGVBQWUsUUFBUSxLQUFLLENBQUMsR0FBRztBQUMzRCxzQkFBVSxRQUFRLEtBQUssQ0FBQztBQUFBLFVBQzFCLE9BQU87QUFFTCxnQkFBSSxPQUFPLE9BQU8sSUFBSSxDQUFDO0FBRXZCLHVCQUFXLE9BQU8sS0FBSyxNQUFNLGNBQWMsS0FBSyxJQUFJLEtBQUs7QUFFekQsc0JBQVUsT0FBTyxLQUFLLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQztBQUNoRCxvQkFBUSxRQUFRLElBQUk7QUFDcEIsc0JBQVUsUUFBUSxRQUFRO0FBQUEsVUFDNUI7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQXdCQSxlQUFTLFlBQVksS0FBSyxNQUFNO0FBQzlCLFlBQUksU0FBUyxVQUFVLElBQUk7QUFDM0IsWUFBSSxPQUFPLE9BQU8sT0FBTyxTQUFTLENBQUM7QUFDbkMsWUFBSSxPQUFPO0FBQUEsVUFDVCxRQUNFLE9BQU8sU0FBUyxJQUNkLHFCQUFxQixLQUFLLFFBQVEsT0FBTyxTQUFTLENBQUMsSUFDbkQ7QUFBQSxVQUNKLE1BQU0sS0FBSyxLQUFLLEtBQUs7QUFBQSxVQUNyQixPQUFPLHFCQUFxQixLQUFLLE1BQU07QUFBQSxRQUN6QztBQUNBLGFBQUssU0FBUyxZQUFZLEtBQUssUUFBUSxLQUFLLElBQUk7QUFFaEQsZUFBTztBQUFBLE1BQ1Q7QUFpQ0EsZUFBUyxhQUFhLEtBQUssTUFBTTtBQUMvQixZQUFJLE9BQU8sWUFBWSxLQUFLLElBQUk7QUFDaEMsZUFBTyxLQUFLO0FBQUEsTUFDZDtBQW1DQSxlQUFTLGFBQWEsS0FBSyxNQUFNLEtBQUs7QUFDcEMsWUFBSSxTQUFTLFVBQVUsSUFBSTtBQUMzQiw2QkFBcUIsS0FBSyxLQUFLLE1BQU07QUFDckMsZUFBTztBQUFBLE1BQ1Q7QUFFQSxhQUFPLFVBQVU7QUFBQSxRQUNmO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBO0FBQUE7OztBQzVTQTtBQUFBO0FBeUJBLGFBQU8sVUFBVSxTQUFTLEtBQUssS0FBSyxLQUFLLE9BQU87QUFDOUMsWUFBSSxRQUFRLElBQUksWUFBWSxJQUFJLFVBQVUsdUJBQU8sT0FBTyxJQUFJO0FBQzVELFlBQUksVUFBVSxXQUFXLEdBQUc7QUFDMUIsZ0JBQU0sR0FBRyxJQUFJO0FBQUEsUUFDZixPQUFPO0FBQ0wsaUJBQU8sTUFBTSxHQUFHO0FBQUEsUUFDbEI7QUFBQSxNQUNGO0FBQUE7QUFBQTs7O0FDaENBO0FBQUE7QUFVQSxVQUFJLE9BQU87QUFhWCxhQUFPLFVBQVUsU0FBUyxLQUFLLEtBQUssTUFBTTtBQUN4QyxZQUFJLFNBQVMsS0FBSyxLQUFLLFFBQVEsR0FDM0IsT0FBTyxLQUFLLENBQUM7QUFDakIsZUFBTyxTQUFTLENBQUMsT0FBTztBQUFBLE1BQzFCO0FBQUE7QUFBQTs7O0FDM0JBO0FBQUE7QUFBQSxPQUFDLFNBQVVDLFVBQVEsU0FBUztBQUMzQixlQUFPLFlBQVksWUFBWSxPQUFPLFdBQVcsY0FBYyxPQUFPLFVBQVUsUUFBUSxJQUN4RixPQUFPLFdBQVcsY0FBYyxPQUFPLE1BQU0sT0FBTyxPQUFPLElBQzFEQSxTQUFPLGFBQWEsUUFBUTtBQUFBLE1BQzlCLEdBQUUsU0FBTyxXQUFZO0FBQUU7QUFPdkIsWUFBSSxnQkFBZ0IsT0FBTyxZQUFZO0FBR3ZDLFlBQUksZUFBZSxPQUFPLFNBQVMsV0FBVyxPQUFPO0FBRXJELFlBQUksZUFBZSxPQUFPLFdBQVc7QUFDckMsWUFBSSxZQUFZLE9BQU8sUUFBUTtBQUMvQixZQUFJLFlBQVksT0FBTyxRQUFRO0FBQy9CLFlBQUksZ0JBQWdCLE9BQU8sWUFBWTtBQUN2QyxZQUFJLGdCQUFnQixPQUFPLFlBQVk7QUFDdkMsWUFBSSxpQkFBaUIsT0FBTyxhQUFhO0FBQ3pDLFlBQUksdUJBQXVCLGdCQUFnQixPQUFPLE9BQU8sYUFBYTtBQUN0RSxZQUFJLDBCQUEwQixnQkFBZ0IsT0FBTyxPQUFPLGdCQUFnQjtBQUM1RSxZQUFJLG1CQUFtQixhQUFhLE9BQU8sSUFBSSxVQUFVLFlBQVk7QUFDckUsWUFBSSxtQkFBbUIsYUFBYSxPQUFPLElBQUksVUFBVSxZQUFZO0FBQ3JFLFlBQUksdUJBQXVCLG9CQUFvQixPQUFPLGdCQUFlLG9CQUFJLElBQUksR0FBRSxRQUFRLENBQUM7QUFDeEYsWUFBSSx1QkFBdUIsb0JBQW9CLE9BQU8sZ0JBQWUsb0JBQUksSUFBSSxHQUFFLFFBQVEsQ0FBQztBQUN4RixZQUFJLHNCQUFzQix3QkFBd0IsT0FBTyxNQUFNLFVBQVUsT0FBTyxRQUFRLE1BQU07QUFDOUYsWUFBSSx5QkFBeUIsdUJBQXVCLE9BQU8sZUFBZSxDQUFDLEVBQUUsT0FBTyxRQUFRLEVBQUUsQ0FBQztBQUMvRixZQUFJLHVCQUF1Qix3QkFBd0IsT0FBTyxPQUFPLFVBQVUsT0FBTyxRQUFRLE1BQU07QUFDaEcsWUFBSSwwQkFBMEIsd0JBQXdCLE9BQU8sZUFBZSxHQUFHLE9BQU8sUUFBUSxFQUFFLENBQUM7QUFDakcsWUFBSSwwQkFBMEI7QUFDOUIsWUFBSSwyQkFBMkI7QUFXL0IsaUJBQVMsV0FBVyxLQUFLO0FBZXZCLGNBQUksWUFBWSxPQUFPO0FBQ3ZCLGNBQUksY0FBYyxVQUFVO0FBQzFCLG1CQUFPO0FBQUEsVUFDVDtBQVFBLGNBQUksUUFBUSxNQUFNO0FBQ2hCLG1CQUFPO0FBQUEsVUFDVDtBQWtCQSxjQUFJLFFBQVEsY0FBYztBQUN4QixtQkFBTztBQUFBLFVBQ1Q7QUFRQSxjQUNFLE1BQU0sUUFBUSxHQUFHLE1BQ2hCLDRCQUE0QixTQUFTLEVBQUUsT0FBTyxlQUFlLE9BQzlEO0FBQ0EsbUJBQU87QUFBQSxVQUNUO0FBSUEsY0FBSSxPQUFPLFdBQVcsWUFBWSxXQUFXLE1BQU07QUFRakQsZ0JBQUksT0FBTyxPQUFPLGFBQWEsWUFBWSxRQUFRLE9BQU8sVUFBVTtBQUNsRSxxQkFBTztBQUFBLFlBQ1Q7QUFxQkEsZ0JBQUksT0FBTyxPQUFPLGFBQWEsWUFBWSxRQUFRLE9BQU8sVUFBVTtBQUNsRSxxQkFBTztBQUFBLFlBQ1Q7QUFFQSxnQkFBSSxPQUFPLE9BQU8sY0FBYyxVQUFVO0FBT3hDLGtCQUFJLE9BQU8sT0FBTyxVQUFVLGNBQWMsWUFDdEMsUUFBUSxPQUFPLFVBQVUsV0FBVztBQUN0Qyx1QkFBTztBQUFBLGNBQ1Q7QUFRQSxrQkFBSSxPQUFPLE9BQU8sVUFBVSxZQUFZLFlBQ3BDLFFBQVEsT0FBTyxVQUFVLFNBQVM7QUFDcEMsdUJBQU87QUFBQSxjQUNUO0FBQUEsWUFDRjtBQUVBLGlCQUFLLE9BQU8sT0FBTyxnQkFBZ0IsY0FDL0IsT0FBTyxPQUFPLGdCQUFnQixhQUM5QixlQUFlLE9BQU8sYUFBYTtBQU9yQyxrQkFBSSxJQUFJLFlBQVksY0FBYztBQUNoQyx1QkFBTztBQUFBLGNBQ1Q7QUFjQSxrQkFBSSxJQUFJLFlBQVksTUFBTTtBQUN4Qix1QkFBTztBQUFBLGNBQ1Q7QUFjQSxrQkFBSSxJQUFJLFlBQVksTUFBTTtBQUN4Qix1QkFBTztBQUFBLGNBQ1Q7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQXdCQSxjQUFJLFlBQWEsMkJBQTJCLElBQUksT0FBTyxXQUFXO0FBQ2xFLGNBQUksT0FBTyxjQUFjLFVBQVU7QUFDakMsbUJBQU87QUFBQSxVQUNUO0FBRUEsY0FBSSxlQUFlLE9BQU8sZUFBZSxHQUFHO0FBUzVDLGNBQUksaUJBQWlCLE9BQU8sV0FBVztBQUNyQyxtQkFBTztBQUFBLFVBQ1Q7QUFRQSxjQUFJLGlCQUFpQixLQUFLLFdBQVc7QUFDbkMsbUJBQU87QUFBQSxVQUNUO0FBV0EsY0FBSSxpQkFBaUIsaUJBQWlCLFFBQVEsV0FBVztBQUN2RCxtQkFBTztBQUFBLFVBQ1Q7QUFRQSxjQUFJLGFBQWEsaUJBQWlCLElBQUksV0FBVztBQUMvQyxtQkFBTztBQUFBLFVBQ1Q7QUFRQSxjQUFJLGFBQWEsaUJBQWlCLElBQUksV0FBVztBQUMvQyxtQkFBTztBQUFBLFVBQ1Q7QUFRQSxjQUFJLGlCQUFpQixpQkFBaUIsUUFBUSxXQUFXO0FBQ3ZELG1CQUFPO0FBQUEsVUFDVDtBQVFBLGNBQUksaUJBQWlCLGlCQUFpQixRQUFRLFdBQVc7QUFDdkQsbUJBQU87QUFBQSxVQUNUO0FBUUEsY0FBSSxrQkFBa0IsaUJBQWlCLFNBQVMsV0FBVztBQUN6RCxtQkFBTztBQUFBLFVBQ1Q7QUFRQSxjQUFJLGFBQWEsaUJBQWlCLHNCQUFzQjtBQUN0RCxtQkFBTztBQUFBLFVBQ1Q7QUFRQSxjQUFJLGFBQWEsaUJBQWlCLHNCQUFzQjtBQUN0RCxtQkFBTztBQUFBLFVBQ1Q7QUFRQSxjQUFJLHVCQUF1QixpQkFBaUIsd0JBQXdCO0FBQ2xFLG1CQUFPO0FBQUEsVUFDVDtBQVFBLGNBQUksd0JBQXdCLGlCQUFpQix5QkFBeUI7QUFDcEUsbUJBQU87QUFBQSxVQUNUO0FBUUEsY0FBSSxpQkFBaUIsTUFBTTtBQUN6QixtQkFBTztBQUFBLFVBQ1Q7QUFFQSxpQkFBTyxPQUNKLFVBQ0EsU0FDQSxLQUFLLEdBQUcsRUFDUixNQUFNLHlCQUF5Qix3QkFBd0I7QUFBQSxRQUM1RDtBQUVBLGVBQU87QUFBQSxNQUVQLENBQUU7QUFBQTtBQUFBOzs7QUNuWUY7QUFBQTtBQW9CQSxVQUFJQyxrQkFBaUI7QUFDckIsVUFBSSxPQUFPO0FBQ1gsVUFBSSxPQUFPO0FBRVgsYUFBTyxVQUFVLFNBQVMsWUFBWSxLQUFLLE9BQU87QUFDaEQsWUFBSSxVQUFVLEtBQUssS0FBSyxTQUFTO0FBQ2pDLFlBQUksT0FBTyxLQUFLLEtBQUssTUFBTTtBQUUzQixrQkFBVSxVQUFVLFVBQVUsT0FBTztBQUVyQyxjQUFNLEtBQUssS0FBSyxRQUFRO0FBQ3hCLGdCQUFRLE1BQU0sSUFBSSxTQUFVLEdBQUc7QUFBRSxpQkFBTyxFQUFFLFlBQVk7QUFBQSxRQUFHLENBQUM7QUFDMUQsY0FBTSxLQUFLO0FBR1gsWUFBSSxNQUFNLE1BQU0sSUFBSSxTQUFVLEdBQUcsT0FBTztBQUN0QyxjQUFJLE1BQU0sQ0FBQyxDQUFFLEtBQUssS0FBSyxLQUFLLEtBQUssR0FBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLE9BQU87QUFDckUsY0FBSSxLQUFLLE1BQU0sU0FBUyxLQUFLLFVBQVUsTUFBTSxTQUFTLElBQUksUUFBUTtBQUNsRSxpQkFBTyxLQUFLLE1BQU0sTUFBTTtBQUFBLFFBQzFCLENBQUMsRUFBRSxLQUFLLElBQUk7QUFFWixZQUFJLFVBQVUsS0FBSyxHQUFHLEVBQUUsWUFBWTtBQUVwQyxZQUFJLENBQUMsTUFBTSxLQUFLLFNBQVUsVUFBVTtBQUFFLGlCQUFPLFlBQVk7QUFBQSxRQUFVLENBQUMsR0FBRztBQUNyRSxnQkFBTSxJQUFJQTtBQUFBLFlBQ1IsVUFBVSwyQkFBMkIsTUFBTSxXQUFXLFVBQVU7QUFBQSxZQUNoRTtBQUFBLFlBQ0E7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQTtBQUFBOzs7QUNsREE7QUFBQTtBQWlCQSxhQUFPLFVBQVUsU0FBUyxVQUFVLEtBQUssTUFBTTtBQUM3QyxlQUFPLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUk7QUFBQSxNQUN6QztBQUFBO0FBQUE7OztBQ25CQTtBQUFBO0FBQUE7QUFxQkEsVUFBSSxXQUFXLFNBQVMsVUFBVTtBQUNsQyxVQUFJLG9CQUFvQjtBQUN4QixVQUFJLDBCQUEwQjtBQUM5QixlQUFTLFlBQVksT0FBTztBQUMxQixZQUFJLE9BQU8sVUFBVSxZQUFZO0FBQy9CLGlCQUFPO0FBQUEsUUFDVDtBQUVBLFlBQUksT0FBTztBQUNYLFlBQUksT0FBTyxTQUFTLFVBQVUsU0FBUyxlQUFlLE9BQU8sTUFBTSxTQUFTLGFBQWE7QUFFdkYsY0FBSSxpQkFBaUIsU0FBUyxLQUFLLEtBQUs7QUFHeEMsY0FBSSxlQUFlLFFBQVEsR0FBRyxJQUFJLHlCQUF5QjtBQUN6RCxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxjQUFJLFFBQVEsZUFBZSxNQUFNLGlCQUFpQjtBQUNsRCxjQUFJLE9BQU87QUFDVCxtQkFBTyxNQUFNLENBQUM7QUFBQSxVQUNoQjtBQUFBLFFBQ0YsT0FBTztBQUVMLGlCQUFPLE1BQU07QUFBQSxRQUNmO0FBRUEsZUFBTztBQUFBLE1BQ1Q7QUFFQSxhQUFPLFVBQVU7QUFBQTtBQUFBOzs7Ozs7Ozs7QUNuRGpCO0FBQUE7QUFBQSxPQUFDLFNBQVVDLFVBQVEsU0FBUztBQUMxQixlQUFPLFlBQVksWUFBWSxPQUFPLFdBQVcsY0FBYyxRQUFRLE9BQU8sSUFDOUUsT0FBTyxXQUFXLGNBQWMsT0FBTyxNQUFNLE9BQU8sQ0FBQyxTQUFTLEdBQUcsT0FBTyxLQUN2RUEsV0FBUyxPQUFPLGVBQWUsY0FBYyxhQUFhQSxZQUFVLE1BQU0sUUFBUUEsU0FBTyxRQUFRLENBQUMsQ0FBQztBQUFBLE1BQ3RHLEdBQUUsU0FBTyxTQUFVQyxVQUFTO0FBQUU7QUFFNUIsaUJBQVMsUUFBUSxLQUFLO0FBQ3BCO0FBRUEsY0FBSSxPQUFPLFdBQVcsY0FBYyxPQUFPLE9BQU8sYUFBYSxVQUFVO0FBQ3ZFLHNCQUFVLFNBQVVDLE1BQUs7QUFDdkIscUJBQU8sT0FBT0E7QUFBQSxZQUNoQjtBQUFBLFVBQ0YsT0FBTztBQUNMLHNCQUFVLFNBQVVBLE1BQUs7QUFDdkIscUJBQU9BLFFBQU8sT0FBTyxXQUFXLGNBQWNBLEtBQUksZ0JBQWdCLFVBQVVBLFNBQVEsT0FBTyxZQUFZLFdBQVcsT0FBT0E7QUFBQSxZQUMzSDtBQUFBLFVBQ0Y7QUFFQSxpQkFBTyxRQUFRLEdBQUc7QUFBQSxRQUNwQjtBQUVBLGlCQUFTLGVBQWUsS0FBSyxHQUFHO0FBQzlCLGlCQUFPLGdCQUFnQixHQUFHLEtBQUssc0JBQXNCLEtBQUssQ0FBQyxLQUFLLDRCQUE0QixLQUFLLENBQUMsS0FBSyxpQkFBaUI7QUFBQSxRQUMxSDtBQUVBLGlCQUFTLGdCQUFnQixLQUFLO0FBQzVCLGNBQUksTUFBTSxRQUFRLEdBQUc7QUFBRyxtQkFBTztBQUFBLFFBQ2pDO0FBRUEsaUJBQVMsc0JBQXNCLEtBQUssR0FBRztBQUNyQyxjQUFJLE9BQU8sV0FBVyxlQUFlLEVBQUUsT0FBTyxZQUFZLE9BQU8sR0FBRztBQUFJO0FBQ3hFLGNBQUksT0FBTyxDQUFDO0FBQ1osY0FBSSxLQUFLO0FBQ1QsY0FBSSxLQUFLO0FBQ1QsY0FBSSxLQUFLO0FBRVQsY0FBSTtBQUNGLHFCQUFTLEtBQUssSUFBSSxPQUFPLFFBQVEsRUFBRSxHQUFHLElBQUksRUFBRSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsT0FBTyxLQUFLLE1BQU07QUFDbEYsbUJBQUssS0FBSyxHQUFHLEtBQUs7QUFFbEIsa0JBQUksS0FBSyxLQUFLLFdBQVc7QUFBRztBQUFBLFlBQzlCO0FBQUEsVUFDRixTQUFTLEtBQUs7QUFDWixpQkFBSztBQUNMLGlCQUFLO0FBQUEsVUFDUCxVQUFFO0FBQ0EsZ0JBQUk7QUFDRixrQkFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLEtBQUs7QUFBTSxtQkFBRyxRQUFRLEVBQUU7QUFBQSxZQUNoRCxVQUFFO0FBQ0Esa0JBQUk7QUFBSSxzQkFBTTtBQUFBLFlBQ2hCO0FBQUEsVUFDRjtBQUVBLGlCQUFPO0FBQUEsUUFDVDtBQUVBLGlCQUFTLDRCQUE0QixHQUFHLFFBQVE7QUFDOUMsY0FBSSxDQUFDO0FBQUc7QUFDUixjQUFJLE9BQU8sTUFBTTtBQUFVLG1CQUFPLGtCQUFrQixHQUFHLE1BQU07QUFDN0QsY0FBSSxJQUFJLE9BQU8sVUFBVSxTQUFTLEtBQUssQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUFFO0FBQ3JELGNBQUksTUFBTSxZQUFZLEVBQUU7QUFBYSxnQkFBSSxFQUFFLFlBQVk7QUFDdkQsY0FBSSxNQUFNLFNBQVMsTUFBTTtBQUFPLG1CQUFPLE1BQU0sS0FBSyxDQUFDO0FBQ25ELGNBQUksTUFBTSxlQUFlLDJDQUEyQyxLQUFLLENBQUM7QUFBRyxtQkFBTyxrQkFBa0IsR0FBRyxNQUFNO0FBQUEsUUFDakg7QUFFQSxpQkFBUyxrQkFBa0IsS0FBSyxLQUFLO0FBQ25DLGNBQUksT0FBTyxRQUFRLE1BQU0sSUFBSTtBQUFRLGtCQUFNLElBQUk7QUFFL0MsbUJBQVMsSUFBSSxHQUFHLE9BQU8sSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUs7QUFBSyxpQkFBSyxDQUFDLElBQUksSUFBSSxDQUFDO0FBRXBFLGlCQUFPO0FBQUEsUUFDVDtBQUVBLGlCQUFTLG1CQUFtQjtBQUMxQixnQkFBTSxJQUFJLFVBQVUsMklBQTJJO0FBQUEsUUFDaks7QUFFQSxZQUFJLGFBQWE7QUFBQSxVQUNmLE1BQU0sQ0FBQyxLQUFLLElBQUk7QUFBQSxVQUNoQixLQUFLLENBQUMsS0FBSyxJQUFJO0FBQUEsVUFDZixRQUFRLENBQUMsS0FBSyxJQUFJO0FBQUEsVUFDbEIsV0FBVyxDQUFDLEtBQUssSUFBSTtBQUFBO0FBQUEsVUFFckIsU0FBUyxDQUFDLEtBQUssSUFBSTtBQUFBLFVBQ25CLFFBQVEsQ0FBQyxLQUFLLElBQUk7QUFBQSxVQUNsQixRQUFRLENBQUMsS0FBSyxJQUFJO0FBQUE7QUFBQTtBQUFBLFVBR2xCLE9BQU8sQ0FBQyxNQUFNLElBQUk7QUFBQSxVQUNsQixLQUFLLENBQUMsTUFBTSxJQUFJO0FBQUEsVUFDaEIsT0FBTyxDQUFDLE1BQU0sSUFBSTtBQUFBLFVBQ2xCLFFBQVEsQ0FBQyxNQUFNLElBQUk7QUFBQSxVQUNuQixNQUFNLENBQUMsTUFBTSxJQUFJO0FBQUEsVUFDakIsU0FBUyxDQUFDLE1BQU0sSUFBSTtBQUFBLFVBQ3BCLE1BQU0sQ0FBQyxNQUFNLElBQUk7QUFBQSxVQUNqQixPQUFPLENBQUMsTUFBTSxJQUFJO0FBQUEsVUFDbEIsYUFBYSxDQUFDLFFBQVEsSUFBSTtBQUFBLFVBQzFCLFdBQVcsQ0FBQyxRQUFRLElBQUk7QUFBQSxVQUN4QixhQUFhLENBQUMsUUFBUSxJQUFJO0FBQUEsVUFDMUIsY0FBYyxDQUFDLFFBQVEsSUFBSTtBQUFBLFVBQzNCLFlBQVksQ0FBQyxRQUFRLElBQUk7QUFBQSxVQUN6QixlQUFlLENBQUMsUUFBUSxJQUFJO0FBQUEsVUFDNUIsWUFBWSxDQUFDLFFBQVEsSUFBSTtBQUFBLFVBQ3pCLGFBQWEsQ0FBQyxRQUFRLElBQUk7QUFBQSxVQUMxQixNQUFNLENBQUMsTUFBTSxJQUFJO0FBQUEsUUFDbkI7QUFDQSxZQUFJLFNBQVM7QUFBQSxVQUNYLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxVQUNSLFFBQVE7QUFBQSxVQUNSLFNBQVM7QUFBQSxVQUNULFdBQVc7QUFBQSxVQUNYLE1BQU07QUFBQSxVQUNOLFFBQVE7QUFBQSxVQUNSLFFBQVE7QUFBQSxVQUNSLE1BQU07QUFBQSxVQUNOLFFBQVE7QUFBQSxRQUNWO0FBQ0EsWUFBSSxZQUFZO0FBRWhCLGlCQUFTLFNBQVMsT0FBTyxXQUFXO0FBQ2xDLGNBQUksUUFBUSxXQUFXLE9BQU8sU0FBUyxDQUFDLEtBQUssV0FBVyxTQUFTO0FBRWpFLGNBQUksQ0FBQyxPQUFPO0FBQ1YsbUJBQU8sT0FBTyxLQUFLO0FBQUEsVUFDckI7QUFFQSxpQkFBTyxRQUFRLE9BQU8sTUFBTSxDQUFDLEdBQUcsR0FBRyxFQUFFLE9BQU8sT0FBTyxLQUFLLEdBQUcsT0FBTyxFQUFFLE9BQU8sTUFBTSxDQUFDLEdBQUcsR0FBRztBQUFBLFFBQzFGO0FBRUEsaUJBQVMsbUJBQW1CO0FBQzFCLGNBQUksT0FBTyxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FDNUUsa0JBQWtCLEtBQUssWUFDdkIsYUFBYSxvQkFBb0IsU0FBUyxRQUFRLGlCQUNsRCxhQUFhLEtBQUssT0FDbEIsUUFBUSxlQUFlLFNBQVMsSUFBSSxZQUNwQyxjQUFjLEtBQUssUUFDbkIsU0FBUyxnQkFBZ0IsU0FBUyxRQUFRLGFBQzFDLHFCQUFxQixLQUFLLGVBQzFCLGdCQUFnQix1QkFBdUIsU0FBUyxPQUFPLG9CQUN2RCxpQkFBaUIsS0FBSyxXQUN0QixZQUFZLG1CQUFtQixTQUFTLFFBQVEsZ0JBQ2hELHNCQUFzQixLQUFLLGdCQUMzQixpQkFBaUIsd0JBQXdCLFNBQVMsV0FBVyxxQkFDN0QsbUJBQW1CLEtBQUssYUFDeEIsY0FBYyxxQkFBcUIsU0FBUyxXQUFXLGtCQUN2RCxZQUFZLEtBQUssTUFDakIsT0FBTyxjQUFjLFNBQVMsQ0FBQyxJQUFJLFdBQ25DLGdCQUFnQixLQUFLLFVBQ3JCQyxZQUFXLGtCQUFrQixTQUFTLFdBQVcsZUFDakQsZUFBZSxLQUFLLFNBQ3BCLFVBQVUsaUJBQWlCLFNBQVMsU0FBUztBQUVqRCxjQUFJQyxXQUFVO0FBQUEsWUFDWixZQUFZLFFBQVEsVUFBVTtBQUFBLFlBQzlCLE9BQU8sT0FBTyxLQUFLO0FBQUEsWUFDbkIsUUFBUSxRQUFRLE1BQU07QUFBQSxZQUN0QixlQUFlLFFBQVEsYUFBYTtBQUFBLFlBQ3BDLFdBQVcsUUFBUSxTQUFTO0FBQUEsWUFDNUIsZ0JBQWdCLE9BQU8sY0FBYztBQUFBLFlBQ3JDLGFBQWEsT0FBTyxXQUFXO0FBQUEsWUFDL0IsVUFBVSxPQUFPRCxTQUFRO0FBQUEsWUFDekI7QUFBQSxZQUNBO0FBQUEsVUFDRjtBQUVBLGNBQUlDLFNBQVEsUUFBUTtBQUNsQixZQUFBQSxTQUFRLFVBQVU7QUFBQSxVQUNwQjtBQUVBLGlCQUFPQTtBQUFBLFFBQ1Q7QUFDQSxpQkFBUyxTQUFTLFFBQVEsUUFBUTtBQUNoQyxjQUFJLE9BQU8sVUFBVSxTQUFTLEtBQUssVUFBVSxDQUFDLE1BQU0sU0FBWSxVQUFVLENBQUMsSUFBSTtBQUMvRSxtQkFBUyxPQUFPLE1BQU07QUFDdEIsY0FBSSxhQUFhLEtBQUs7QUFDdEIsY0FBSSxlQUFlLE9BQU87QUFFMUIsY0FBSSxhQUFhLFVBQVUsZUFBZSxZQUFZO0FBQ3BELG1CQUFPO0FBQUEsVUFDVDtBQUVBLGNBQUksZUFBZSxVQUFVLGVBQWUsWUFBWTtBQUN0RCxtQkFBTyxHQUFHLE9BQU8sT0FBTyxNQUFNLEdBQUcsU0FBUyxVQUFVLENBQUMsRUFBRSxPQUFPLElBQUk7QUFBQSxVQUNwRTtBQUVBLGlCQUFPO0FBQUEsUUFDVDtBQUVBLGlCQUFTLFlBQVksTUFBTUEsVUFBUyxhQUFhO0FBQy9DLGNBQUksWUFBWSxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJO0FBQ3BGLHdCQUFjLGVBQWVBLFNBQVE7QUFDckMsY0FBSUMsUUFBTyxLQUFLO0FBQ2hCLGNBQUlBLFVBQVM7QUFBRyxtQkFBTztBQUN2QixjQUFJLGlCQUFpQkQsU0FBUTtBQUM3QixjQUFJLFNBQVM7QUFDYixjQUFJLE9BQU87QUFDWCxjQUFJLFlBQVk7QUFFaEIsbUJBQVMsSUFBSSxHQUFHLElBQUlDLE9BQU0sS0FBSyxHQUFHO0FBQ2hDLGdCQUFJLE9BQU8sSUFBSSxNQUFNLEtBQUs7QUFDMUIsZ0JBQUksZUFBZSxJQUFJLE1BQU0sS0FBSztBQUNsQyx3QkFBWSxHQUFHLE9BQU8sV0FBVyxHQUFHLEVBQUUsT0FBTyxLQUFLLFNBQVMsR0FBRyxHQUFHO0FBQ2pFLGdCQUFJLFFBQVEsS0FBSyxDQUFDO0FBRWxCLFlBQUFELFNBQVEsV0FBVyxpQkFBaUIsT0FBTyxVQUFVLE9BQU8sSUFBSSxVQUFVO0FBQzFFLGdCQUFJLFNBQVMsUUFBUSxZQUFZLE9BQU9BLFFBQU8sS0FBSyxPQUFPLEtBQUs7QUFDaEUsZ0JBQUksYUFBYSxPQUFPLFNBQVMsT0FBTztBQUN4QyxnQkFBSSxrQkFBa0IsYUFBYSxVQUFVO0FBRzdDLGdCQUFJLFFBQVEsYUFBYSxrQkFBa0IsT0FBTyxTQUFTLFVBQVUsVUFBVSxnQkFBZ0I7QUFDN0Y7QUFBQSxZQUNGO0FBSUEsZ0JBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLGtCQUFrQixnQkFBZ0I7QUFDOUQ7QUFBQSxZQUNGO0FBSUEsbUJBQU8sT0FBTyxLQUFLLFlBQVksS0FBSyxJQUFJLENBQUMsR0FBR0EsUUFBTyxLQUFLLGVBQWUsS0FBSztBQUc1RSxnQkFBSSxDQUFDLFFBQVEsZ0JBQWdCLGtCQUFrQixrQkFBa0IsYUFBYSxLQUFLLFNBQVMsZ0JBQWdCO0FBQzFHO0FBQUEsWUFDRjtBQUVBLHNCQUFVO0FBR1YsZ0JBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLGFBQWEsS0FBSyxVQUFVLGdCQUFnQjtBQUN4RSwwQkFBWSxHQUFHLE9BQU8sV0FBVyxHQUFHLEVBQUUsT0FBTyxLQUFLLFNBQVMsSUFBSSxHQUFHLEdBQUc7QUFDckU7QUFBQSxZQUNGO0FBRUEsd0JBQVk7QUFBQSxVQUNkO0FBRUEsaUJBQU8sR0FBRyxPQUFPLE1BQU0sRUFBRSxPQUFPLFNBQVM7QUFBQSxRQUMzQztBQUVBLGlCQUFTLGdCQUFnQixLQUFLO0FBQzVCLGNBQUksSUFBSSxNQUFNLDBCQUEwQixHQUFHO0FBQ3pDLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGlCQUFPLEtBQUssVUFBVSxHQUFHLEVBQUUsUUFBUSxNQUFNLEtBQUssRUFBRSxRQUFRLFFBQVEsR0FBRyxFQUFFLFFBQVEsWUFBWSxHQUFHO0FBQUEsUUFDOUY7QUFFQSxpQkFBUyxnQkFBZ0IsT0FBT0EsVUFBUztBQUN2QyxjQUFJLFFBQVEsZUFBZSxPQUFPLENBQUMsR0FDL0IsTUFBTSxNQUFNLENBQUMsR0FDYixRQUFRLE1BQU0sQ0FBQztBQUVuQixVQUFBQSxTQUFRLFlBQVk7QUFFcEIsY0FBSSxPQUFPLFFBQVEsVUFBVTtBQUMzQixrQkFBTSxnQkFBZ0IsR0FBRztBQUFBLFVBQzNCLFdBQVcsT0FBTyxRQUFRLFVBQVU7QUFDbEMsa0JBQU0sSUFBSSxPQUFPQSxTQUFRLFFBQVEsS0FBS0EsUUFBTyxHQUFHLEdBQUc7QUFBQSxVQUNyRDtBQUVBLFVBQUFBLFNBQVEsWUFBWSxJQUFJO0FBQ3hCLGtCQUFRQSxTQUFRLFFBQVEsT0FBT0EsUUFBTztBQUN0QyxpQkFBTyxHQUFHLE9BQU8sS0FBSyxJQUFJLEVBQUUsT0FBTyxLQUFLO0FBQUEsUUFDMUM7QUFFQSxpQkFBUyxhQUFhLE9BQU9BLFVBQVM7QUFHcEMsY0FBSSxxQkFBcUIsT0FBTyxLQUFLLEtBQUssRUFBRSxNQUFNLE1BQU0sTUFBTTtBQUM5RCxjQUFJLENBQUMsTUFBTSxVQUFVLENBQUMsbUJBQW1CO0FBQVEsbUJBQU87QUFDeEQsVUFBQUEsU0FBUSxZQUFZO0FBQ3BCLGNBQUksZUFBZSxZQUFZLE9BQU9BLFFBQU87QUFDN0MsVUFBQUEsU0FBUSxZQUFZLGFBQWE7QUFDakMsY0FBSSxtQkFBbUI7QUFFdkIsY0FBSSxtQkFBbUIsUUFBUTtBQUM3QiwrQkFBbUIsWUFBWSxtQkFBbUIsSUFBSSxTQUFVLEtBQUs7QUFDbkUscUJBQU8sQ0FBQyxLQUFLLE1BQU0sR0FBRyxDQUFDO0FBQUEsWUFDekIsQ0FBQyxHQUFHQSxVQUFTLGVBQWU7QUFBQSxVQUM5QjtBQUVBLGlCQUFPLEtBQUssT0FBTyxZQUFZLEVBQUUsT0FBTyxtQkFBbUIsS0FBSyxPQUFPLGdCQUFnQixJQUFJLElBQUksSUFBSTtBQUFBLFFBQ3JHO0FBcUJBLFlBQUksV0FBVyxTQUFTLFVBQVU7QUFDbEMsWUFBSSxvQkFBb0I7QUFDeEIsWUFBSSwwQkFBMEI7QUFDOUIsaUJBQVMsWUFBWSxPQUFPO0FBQzFCLGNBQUksT0FBTyxVQUFVLFlBQVk7QUFDL0IsbUJBQU87QUFBQSxVQUNUO0FBRUEsY0FBSSxPQUFPO0FBQ1gsY0FBSSxPQUFPLFNBQVMsVUFBVSxTQUFTLGVBQWUsT0FBTyxNQUFNLFNBQVMsYUFBYTtBQUV2RixnQkFBSSxpQkFBaUIsU0FBUyxLQUFLLEtBQUs7QUFHeEMsZ0JBQUksZUFBZSxRQUFRLEdBQUcsSUFBSSx5QkFBeUI7QUFDekQscUJBQU87QUFBQSxZQUNUO0FBRUEsZ0JBQUksUUFBUSxlQUFlLE1BQU0saUJBQWlCO0FBQ2xELGdCQUFJLE9BQU87QUFDVCxxQkFBTyxNQUFNLENBQUM7QUFBQSxZQUNoQjtBQUFBLFVBQ0YsT0FBTztBQUVMLG1CQUFPLE1BQU07QUFBQSxVQUNmO0FBRUEsaUJBQU87QUFBQSxRQUNUO0FBRUEsWUFBSSxnQkFBZ0I7QUFFcEIsWUFBSSxlQUFlLFNBQVNFLGNBQWEsT0FBTztBQUU5QyxjQUFJLE9BQU8sV0FBVyxjQUFjLGlCQUFpQixRQUFRO0FBQzNELG1CQUFPO0FBQUEsVUFDVDtBQUVBLGNBQUksTUFBTSxPQUFPLFdBQVcsR0FBRztBQUM3QixtQkFBTyxNQUFNLE9BQU8sV0FBVztBQUFBLFVBQ2pDO0FBRUEsaUJBQU8sY0FBYyxNQUFNLFdBQVc7QUFBQSxRQUN4QztBQUVBLGlCQUFTLGtCQUFrQixPQUFPRixVQUFTO0FBQ3pDLGNBQUksT0FBTyxhQUFhLEtBQUs7QUFDN0IsVUFBQUEsU0FBUSxZQUFZLEtBQUssU0FBUztBQUdsQyxjQUFJLHFCQUFxQixPQUFPLEtBQUssS0FBSyxFQUFFLE1BQU0sTUFBTSxNQUFNO0FBQzlELGNBQUksQ0FBQyxNQUFNLFVBQVUsQ0FBQyxtQkFBbUI7QUFBUSxtQkFBTyxHQUFHLE9BQU8sTUFBTSxJQUFJO0FBRzVFLGNBQUksU0FBUztBQUViLG1CQUFTLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQ3JDLGdCQUFJLFNBQVMsR0FBRyxPQUFPQSxTQUFRLFFBQVEsU0FBUyxNQUFNLENBQUMsR0FBR0EsU0FBUSxRQUFRLEdBQUcsUUFBUSxDQUFDLEVBQUUsT0FBTyxNQUFNLE1BQU0sU0FBUyxJQUFJLEtBQUssSUFBSTtBQUNqSSxZQUFBQSxTQUFRLFlBQVksT0FBTztBQUUzQixnQkFBSSxNQUFNLENBQUMsTUFBTSxNQUFNLFVBQVVBLFNBQVEsWUFBWSxHQUFHO0FBQ3RELHdCQUFVLEdBQUcsT0FBTyxXQUFXLEdBQUcsRUFBRSxPQUFPLE1BQU0sU0FBUyxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUc7QUFDM0U7QUFBQSxZQUNGO0FBRUEsc0JBQVU7QUFBQSxVQUNaO0FBRUEsY0FBSSxtQkFBbUI7QUFFdkIsY0FBSSxtQkFBbUIsUUFBUTtBQUM3QiwrQkFBbUIsWUFBWSxtQkFBbUIsSUFBSSxTQUFVLEtBQUs7QUFDbkUscUJBQU8sQ0FBQyxLQUFLLE1BQU0sR0FBRyxDQUFDO0FBQUEsWUFDekIsQ0FBQyxHQUFHQSxVQUFTLGVBQWU7QUFBQSxVQUM5QjtBQUVBLGlCQUFPLEdBQUcsT0FBTyxNQUFNLElBQUksRUFBRSxPQUFPLE1BQU0sRUFBRSxPQUFPLG1CQUFtQixLQUFLLE9BQU8sZ0JBQWdCLElBQUksSUFBSSxJQUFJO0FBQUEsUUFDaEg7QUFFQSxpQkFBUyxZQUFZLFlBQVlBLFVBQVM7QUFDeEMsY0FBSSx1QkFBdUIsV0FBVyxPQUFPO0FBRTdDLGNBQUkseUJBQXlCLE1BQU07QUFDakMsbUJBQU87QUFBQSxVQUNUO0FBRUEsY0FBSSxRQUFRLHFCQUFxQixNQUFNLEdBQUc7QUFDMUMsY0FBSSxPQUFPLE1BQU0sQ0FBQztBQUVsQixpQkFBT0EsU0FBUSxRQUFRLEdBQUcsT0FBTyxNQUFNLEdBQUcsRUFBRSxPQUFPLFNBQVMsTUFBTSxDQUFDLEdBQUdBLFNBQVEsV0FBVyxLQUFLLFNBQVMsQ0FBQyxDQUFDLEdBQUcsTUFBTTtBQUFBLFFBQ3BIO0FBRUEsaUJBQVMsZ0JBQWdCLE1BQU1BLFVBQVM7QUFDdEMsY0FBSSxPQUFPLGNBQWMsSUFBSTtBQUU3QixjQUFJLENBQUMsTUFBTTtBQUNULG1CQUFPQSxTQUFRLFFBQVEsY0FBYyxTQUFTO0FBQUEsVUFDaEQ7QUFFQSxpQkFBT0EsU0FBUSxRQUFRLGFBQWEsT0FBTyxTQUFTLE1BQU1BLFNBQVEsV0FBVyxFQUFFLEdBQUcsR0FBRyxHQUFHLFNBQVM7QUFBQSxRQUNuRztBQUVBLGlCQUFTLGdCQUFnQixNQUFNQSxVQUFTO0FBQ3RDLGNBQUksUUFBUSxlQUFlLE1BQU0sQ0FBQyxHQUM5QixNQUFNLE1BQU0sQ0FBQyxHQUNiLFFBQVEsTUFBTSxDQUFDO0FBRW5CLFVBQUFBLFNBQVEsWUFBWTtBQUNwQixnQkFBTUEsU0FBUSxRQUFRLEtBQUtBLFFBQU87QUFDbEMsVUFBQUEsU0FBUSxZQUFZLElBQUk7QUFDeEIsa0JBQVFBLFNBQVEsUUFBUSxPQUFPQSxRQUFPO0FBQ3RDLGlCQUFPLEdBQUcsT0FBTyxLQUFLLE1BQU0sRUFBRSxPQUFPLEtBQUs7QUFBQSxRQUM1QztBQUdBLGlCQUFTLGFBQWEsS0FBSztBQUN6QixjQUFJLFVBQVUsQ0FBQztBQUNmLGNBQUksUUFBUSxTQUFVLE9BQU8sS0FBSztBQUNoQyxvQkFBUSxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUM7QUFBQSxVQUMzQixDQUFDO0FBQ0QsaUJBQU87QUFBQSxRQUNUO0FBRUEsaUJBQVMsV0FBVyxLQUFLQSxVQUFTO0FBQ2hDLGNBQUlDLFFBQU8sSUFBSSxPQUFPO0FBRXRCLGNBQUlBLFNBQVEsR0FBRztBQUNiLG1CQUFPO0FBQUEsVUFDVDtBQUVBLFVBQUFELFNBQVEsWUFBWTtBQUNwQixpQkFBTyxRQUFRLE9BQU8sWUFBWSxhQUFhLEdBQUcsR0FBR0EsVUFBUyxlQUFlLEdBQUcsSUFBSTtBQUFBLFFBQ3RGO0FBRUEsWUFBSUcsU0FBUSxPQUFPLFNBQVMsU0FBVSxHQUFHO0FBQ3ZDLGlCQUFPLE1BQU07QUFBQSxRQUNmO0FBR0EsaUJBQVMsY0FBYyxRQUFRSCxVQUFTO0FBQ3RDLGNBQUlHLE9BQU0sTUFBTSxHQUFHO0FBQ2pCLG1CQUFPSCxTQUFRLFFBQVEsT0FBTyxRQUFRO0FBQUEsVUFDeEM7QUFFQSxjQUFJLFdBQVcsVUFBVTtBQUN2QixtQkFBT0EsU0FBUSxRQUFRLFlBQVksUUFBUTtBQUFBLFVBQzdDO0FBRUEsY0FBSSxXQUFXLFdBQVc7QUFDeEIsbUJBQU9BLFNBQVEsUUFBUSxhQUFhLFFBQVE7QUFBQSxVQUM5QztBQUVBLGNBQUksV0FBVyxHQUFHO0FBQ2hCLG1CQUFPQSxTQUFRLFFBQVEsSUFBSSxXQUFXLFdBQVcsT0FBTyxNQUFNLFFBQVE7QUFBQSxVQUN4RTtBQUVBLGlCQUFPQSxTQUFRLFFBQVEsU0FBUyxRQUFRQSxTQUFRLFFBQVEsR0FBRyxRQUFRO0FBQUEsUUFDckU7QUFFQSxpQkFBUyxjQUFjLFFBQVFBLFVBQVM7QUFDdEMsY0FBSSxPQUFPLFNBQVMsT0FBTyxTQUFTLEdBQUdBLFNBQVEsV0FBVyxDQUFDO0FBQzNELGNBQUksU0FBUztBQUFXLG9CQUFRO0FBQ2hDLGlCQUFPQSxTQUFRLFFBQVEsTUFBTSxRQUFRO0FBQUEsUUFDdkM7QUFFQSxpQkFBUyxjQUFjLE9BQU9BLFVBQVM7QUFDckMsY0FBSSxRQUFRLE1BQU0sU0FBUyxFQUFFLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekMsY0FBSSxlQUFlQSxTQUFRLFlBQVksSUFBSSxNQUFNO0FBQ2pELGNBQUksU0FBUyxNQUFNO0FBQ25CLGlCQUFPQSxTQUFRLFFBQVEsSUFBSSxPQUFPLFNBQVMsUUFBUSxZQUFZLEdBQUcsR0FBRyxFQUFFLE9BQU8sS0FBSyxHQUFHLFFBQVE7QUFBQSxRQUNoRztBQUVBLGlCQUFTLGFBQWEsS0FBSztBQUN6QixjQUFJLFNBQVMsQ0FBQztBQUNkLGNBQUksUUFBUSxTQUFVLE9BQU87QUFDM0IsbUJBQU8sS0FBSyxLQUFLO0FBQUEsVUFDbkIsQ0FBQztBQUNELGlCQUFPO0FBQUEsUUFDVDtBQUVBLGlCQUFTLFdBQVcsS0FBS0EsVUFBUztBQUNoQyxjQUFJLElBQUksU0FBUztBQUFHLG1CQUFPO0FBQzNCLFVBQUFBLFNBQVEsWUFBWTtBQUNwQixpQkFBTyxRQUFRLE9BQU8sWUFBWSxhQUFhLEdBQUcsR0FBR0EsUUFBTyxHQUFHLElBQUk7QUFBQSxRQUNyRTtBQUVBLFlBQUksb0JBQW9CLElBQUksT0FBTyxtSkFBd0osR0FBRztBQUM5TCxZQUFJLG1CQUFtQjtBQUFBLFVBQ3JCLE1BQU07QUFBQSxVQUNOLEtBQU07QUFBQSxVQUNOLE1BQU07QUFBQSxVQUNOLE1BQU07QUFBQSxVQUNOLE1BQU07QUFBQSxVQUNOLEtBQUs7QUFBQSxVQUNMLE1BQU07QUFBQSxRQUNSO0FBQ0EsWUFBSSxNQUFNO0FBQ1YsWUFBSSxnQkFBZ0I7QUFFcEIsaUJBQVNJLFFBQU8sTUFBTTtBQUNwQixpQkFBTyxpQkFBaUIsSUFBSSxLQUFLLE1BQU0sT0FBTyxPQUFPLE9BQU8sS0FBSyxXQUFXLENBQUMsRUFBRSxTQUFTLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUM7QUFBQSxRQUNySDtBQUVBLGlCQUFTLGNBQWMsUUFBUUosVUFBUztBQUN0QyxjQUFJLGtCQUFrQixLQUFLLE1BQU0sR0FBRztBQUNsQyxxQkFBUyxPQUFPLFFBQVEsbUJBQW1CSSxPQUFNO0FBQUEsVUFDbkQ7QUFFQSxpQkFBT0osU0FBUSxRQUFRLElBQUksT0FBTyxTQUFTLFFBQVFBLFNBQVEsV0FBVyxDQUFDLEdBQUcsR0FBRyxHQUFHLFFBQVE7QUFBQSxRQUMxRjtBQUVBLGlCQUFTLGNBQWMsT0FBTztBQUM1QixjQUFJLGlCQUFpQixPQUFPLFdBQVc7QUFDckMsbUJBQU8sTUFBTSxjQUFjLFVBQVUsT0FBTyxNQUFNLGFBQWEsR0FBRyxJQUFJO0FBQUEsVUFDeEU7QUFFQSxpQkFBTyxNQUFNLFNBQVM7QUFBQSxRQUN4QjtBQUVBLFlBQUksa0JBQWtCLFNBQVNLLG1CQUFrQjtBQUMvQyxpQkFBTztBQUFBLFFBQ1Q7QUFFQSxZQUFJO0FBQ0YsY0FBSSxtQkFBbUIsUUFBUSxRQUFRLE1BQU0sR0FDekMsb0JBQW9CLGlCQUFpQixtQkFDckMsV0FBVyxpQkFBaUIsVUFDNUIsWUFBWSxpQkFBaUI7QUFFakMsY0FBSSxNQUFNLFFBQVEsa0JBQWtCLFFBQVEsUUFBUSxDQUFDLENBQUMsR0FBRztBQUN2RCw4QkFBa0IsU0FBU0EsaUJBQWdCLE9BQU9MLFVBQVM7QUFDekQsa0JBQUkscUJBQXFCLGtCQUFrQixLQUFLLEdBQzVDLHNCQUFzQixlQUFlLG9CQUFvQixDQUFDLEdBQzFELFFBQVEsb0JBQW9CLENBQUMsR0FDN0IsYUFBYSxvQkFBb0IsQ0FBQztBQUV0QyxrQkFBSSxVQUFVLFVBQVU7QUFDdEIsdUJBQU87QUFBQSxjQUNUO0FBRUEscUJBQU8sVUFBVSxPQUFPLFVBQVUsWUFBWSxNQUFNLElBQUksR0FBRyxFQUFFLE9BQU9BLFNBQVEsUUFBUSxZQUFZQSxRQUFPLEdBQUcsR0FBRztBQUFBLFlBQy9HO0FBQUEsVUFDRjtBQUFBLFFBQ0YsU0FBUyxTQUFTO0FBQUEsUUFFbEI7QUFFQSxZQUFJLGlCQUFpQjtBQUVyQixpQkFBUyxjQUFjLFFBQVFBLFVBQVM7QUFDdEMsY0FBSSxhQUFhLE9BQU8sb0JBQW9CLE1BQU07QUFDbEQsY0FBSSxVQUFVLE9BQU8sd0JBQXdCLE9BQU8sc0JBQXNCLE1BQU0sSUFBSSxDQUFDO0FBRXJGLGNBQUksV0FBVyxXQUFXLEtBQUssUUFBUSxXQUFXLEdBQUc7QUFDbkQsbUJBQU87QUFBQSxVQUNUO0FBRUEsVUFBQUEsU0FBUSxZQUFZO0FBQ3BCLFVBQUFBLFNBQVEsT0FBT0EsU0FBUSxRQUFRLENBQUM7QUFFaEMsY0FBSUEsU0FBUSxLQUFLLFFBQVEsTUFBTSxLQUFLLEdBQUc7QUFDckMsbUJBQU87QUFBQSxVQUNUO0FBRUEsVUFBQUEsU0FBUSxLQUFLLEtBQUssTUFBTTtBQUN4QixjQUFJLG1CQUFtQixZQUFZLFdBQVcsSUFBSSxTQUFVLEtBQUs7QUFDL0QsbUJBQU8sQ0FBQyxLQUFLLE9BQU8sR0FBRyxDQUFDO0FBQUEsVUFDMUIsQ0FBQyxHQUFHQSxVQUFTLGVBQWU7QUFDNUIsY0FBSSxpQkFBaUIsWUFBWSxRQUFRLElBQUksU0FBVSxLQUFLO0FBQzFELG1CQUFPLENBQUMsS0FBSyxPQUFPLEdBQUcsQ0FBQztBQUFBLFVBQzFCLENBQUMsR0FBR0EsVUFBUyxlQUFlO0FBQzVCLFVBQUFBLFNBQVEsS0FBSyxJQUFJO0FBQ2pCLGNBQUksTUFBTTtBQUVWLGNBQUksb0JBQW9CLGdCQUFnQjtBQUN0QyxrQkFBTTtBQUFBLFVBQ1I7QUFFQSxpQkFBTyxLQUFLLE9BQU8sZ0JBQWdCLEVBQUUsT0FBTyxHQUFHLEVBQUUsT0FBTyxnQkFBZ0IsSUFBSTtBQUFBLFFBQzlFO0FBRUEsWUFBSSxjQUFjLE9BQU8sV0FBVyxlQUFlLE9BQU8sY0FBYyxPQUFPLGNBQWM7QUFDN0YsaUJBQVMsYUFBYSxPQUFPQSxVQUFTO0FBQ3BDLGNBQUksT0FBTztBQUVYLGNBQUksZUFBZSxlQUFlLE9BQU87QUFDdkMsbUJBQU8sTUFBTSxXQUFXO0FBQUEsVUFDMUI7QUFFQSxpQkFBTyxRQUFRLGNBQWMsTUFBTSxXQUFXO0FBRTlDLGNBQUksQ0FBQyxRQUFRLFNBQVMsVUFBVTtBQUM5QixtQkFBTztBQUFBLFVBQ1Q7QUFFQSxVQUFBQSxTQUFRLFlBQVksS0FBSztBQUN6QixpQkFBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLE9BQU8sY0FBYyxPQUFPQSxRQUFPLENBQUM7QUFBQSxRQUM3RDtBQUVBLGlCQUFTLGlCQUFpQixNQUFNQSxVQUFTO0FBQ3ZDLGNBQUksS0FBSyxXQUFXO0FBQUcsbUJBQU87QUFDOUIsVUFBQUEsU0FBUSxZQUFZO0FBQ3BCLGlCQUFPLGNBQWMsT0FBTyxZQUFZLE1BQU1BLFFBQU8sR0FBRyxJQUFJO0FBQUEsUUFDOUQ7QUFFQSxZQUFJLFlBQVksQ0FBQyxTQUFTLFFBQVEsVUFBVSxRQUFRLFdBQVcsWUFBWSxjQUFjLGdCQUFnQixVQUFVLGFBQWE7QUFDaEksaUJBQVMsZ0JBQWdCLE9BQU9BLFVBQVM7QUFDdkMsY0FBSSxhQUFhLE9BQU8sb0JBQW9CLEtBQUssRUFBRSxPQUFPLFNBQVUsS0FBSztBQUN2RSxtQkFBTyxVQUFVLFFBQVEsR0FBRyxNQUFNO0FBQUEsVUFDcEMsQ0FBQztBQUNELGNBQUksT0FBTyxNQUFNO0FBQ2pCLFVBQUFBLFNBQVEsWUFBWSxLQUFLO0FBQ3pCLGNBQUksVUFBVTtBQUVkLGNBQUksT0FBTyxNQUFNLFlBQVksVUFBVTtBQUNyQyxzQkFBVSxTQUFTLE1BQU0sU0FBU0EsU0FBUSxRQUFRO0FBQUEsVUFDcEQsT0FBTztBQUNMLHVCQUFXLFFBQVEsU0FBUztBQUFBLFVBQzlCO0FBRUEsb0JBQVUsVUFBVSxLQUFLLE9BQU8sT0FBTyxJQUFJO0FBQzNDLFVBQUFBLFNBQVEsWUFBWSxRQUFRLFNBQVM7QUFDckMsY0FBSSxtQkFBbUIsWUFBWSxXQUFXLElBQUksU0FBVSxLQUFLO0FBQy9ELG1CQUFPLENBQUMsS0FBSyxNQUFNLEdBQUcsQ0FBQztBQUFBLFVBQ3pCLENBQUMsR0FBR0EsVUFBUyxlQUFlO0FBQzVCLGlCQUFPLEdBQUcsT0FBTyxJQUFJLEVBQUUsT0FBTyxPQUFPLEVBQUUsT0FBTyxtQkFBbUIsTUFBTSxPQUFPLGtCQUFrQixJQUFJLElBQUksRUFBRTtBQUFBLFFBQzVHO0FBRUEsaUJBQVMsaUJBQWlCLE1BQU1BLFVBQVM7QUFDdkMsY0FBSSxRQUFRLGVBQWUsTUFBTSxDQUFDLEdBQzlCLE1BQU0sTUFBTSxDQUFDLEdBQ2IsUUFBUSxNQUFNLENBQUM7QUFFbkIsVUFBQUEsU0FBUSxZQUFZO0FBRXBCLGNBQUksQ0FBQyxPQUFPO0FBQ1YsbUJBQU8sR0FBRyxPQUFPQSxTQUFRLFFBQVEsS0FBSyxRQUFRLENBQUM7QUFBQSxVQUNqRDtBQUVBLGlCQUFPLEdBQUcsT0FBT0EsU0FBUSxRQUFRLEtBQUssUUFBUSxHQUFHLEdBQUcsRUFBRSxPQUFPQSxTQUFRLFFBQVEsSUFBSyxPQUFPLE9BQU8sR0FBSSxHQUFHLFFBQVEsQ0FBQztBQUFBLFFBQ2xIO0FBQ0EsaUJBQVMsc0JBQXNCLFlBQVlBLFVBQVM7QUFFbEQsaUJBQU8sWUFBWSxZQUFZQSxVQUFTLGFBQWEsSUFBSTtBQUFBLFFBQzNEO0FBQ0EsaUJBQVMsWUFBWSxTQUFTQSxVQUFTO0FBQ3JDLGNBQUksYUFBYSxRQUFRLGtCQUFrQjtBQUMzQyxjQUFJLE9BQU8sUUFBUSxRQUFRLFlBQVk7QUFDdkMsY0FBSSxPQUFPQSxTQUFRLFFBQVEsSUFBSSxPQUFPLElBQUksR0FBRyxTQUFTO0FBQ3RELGNBQUksWUFBWUEsU0FBUSxRQUFRLEtBQUssU0FBUztBQUM5QyxjQUFJLE9BQU9BLFNBQVEsUUFBUSxLQUFLLE9BQU8sTUFBTSxHQUFHLEdBQUcsU0FBUztBQUM1RCxVQUFBQSxTQUFRLFlBQVksS0FBSyxTQUFTLElBQUk7QUFDdEMsY0FBSSxtQkFBbUI7QUFFdkIsY0FBSSxXQUFXLFNBQVMsR0FBRztBQUN6QixnQ0FBb0I7QUFDcEIsZ0NBQW9CLFlBQVksV0FBVyxJQUFJLFNBQVUsS0FBSztBQUM1RCxxQkFBTyxDQUFDLEtBQUssUUFBUSxhQUFhLEdBQUcsQ0FBQztBQUFBLFlBQ3hDLENBQUMsR0FBR0EsVUFBUyxrQkFBa0IsR0FBRztBQUFBLFVBQ3BDO0FBRUEsVUFBQUEsU0FBUSxZQUFZLGlCQUFpQjtBQUNyQyxjQUFJRCxZQUFXQyxTQUFRO0FBQ3ZCLGNBQUksV0FBVyxzQkFBc0IsUUFBUSxVQUFVQSxRQUFPO0FBRTlELGNBQUksWUFBWSxTQUFTLFNBQVNELFdBQVU7QUFDMUMsdUJBQVcsR0FBRyxPQUFPLFdBQVcsR0FBRyxFQUFFLE9BQU8sUUFBUSxTQUFTLFFBQVEsR0FBRztBQUFBLFVBQzFFO0FBRUEsaUJBQU8sR0FBRyxPQUFPLElBQUksRUFBRSxPQUFPLGdCQUFnQixFQUFFLE9BQU8sU0FBUyxFQUFFLE9BQU8sUUFBUSxFQUFFLE9BQU8sSUFBSTtBQUFBLFFBQ2hHO0FBRUEsWUFBSSxtQkFBbUIsT0FBTyxXQUFXLGNBQWMsT0FBTyxPQUFPLFFBQVE7QUFDN0UsWUFBSSxjQUFjLG1CQUFtQixPQUFPLElBQUksY0FBYyxJQUFJO0FBQ2xFLFlBQUksY0FBYztBQUVsQixZQUFJO0FBRUYsY0FBSSxXQUFXO0FBRWYsd0JBQWMsU0FBUyxVQUFVLFNBQVMsUUFBUSxTQUFTO0FBQUEsUUFDN0QsU0FBUyxlQUFlO0FBQ3RCLHdCQUFjO0FBQUEsUUFDaEI7QUFFQSxpQkFBUyxVQUFVO0FBRWpCLGVBQUssTUFBTSxpQkFBaUIsS0FBSyxPQUFPLElBQUksS0FBSyxJQUFJO0FBQUEsUUFDdkQ7QUFFQSxnQkFBUSxZQUFZO0FBQUE7QUFBQSxVQUVsQixLQUFLLFNBQVMsSUFBSSxLQUFLO0FBQ3JCLG1CQUFPLElBQUksS0FBSyxHQUFHO0FBQUEsVUFDckI7QUFBQTtBQUFBLFVBRUEsS0FBSyxTQUFTLElBQUksS0FBSztBQUNyQixtQkFBTyxLQUFLLE9BQU87QUFBQSxVQUNyQjtBQUFBO0FBQUEsVUFFQSxLQUFLLFNBQVMsSUFBSSxLQUFLLE9BQU87QUFDNUIsZ0JBQUksT0FBTyxhQUFhLEdBQUcsR0FBRztBQUM1QixxQkFBTyxlQUFlLEtBQUssS0FBSyxLQUFLO0FBQUE7QUFBQSxnQkFFbkM7QUFBQSxnQkFDQSxjQUFjO0FBQUEsY0FDaEIsQ0FBQztBQUFBLFlBQ0g7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUNBLFlBQUksaUJBQWlCLEtBQUssT0FBTyxZQUFZLGFBQWEsVUFBVSxTQUFTO0FBQzdFLFlBQUksZUFBZSxDQUFDO0FBQ3BCLFlBQUksZUFBZTtBQUFBLFVBQ2pCLFdBQVcsU0FBUyxZQUFZLE9BQU9DLFVBQVM7QUFDOUMsbUJBQU9BLFNBQVEsUUFBUSxhQUFhLFdBQVc7QUFBQSxVQUNqRDtBQUFBLFVBQ0EsTUFBTSxTQUFTLE1BQU0sT0FBT0EsVUFBUztBQUNuQyxtQkFBT0EsU0FBUSxRQUFRLE1BQU0sTUFBTTtBQUFBLFVBQ3JDO0FBQUEsVUFDQSxTQUFTLFNBQVMsUUFBUSxPQUFPQSxVQUFTO0FBQ3hDLG1CQUFPQSxTQUFRLFFBQVEsT0FBTyxTQUFTO0FBQUEsVUFDekM7QUFBQSxVQUNBLFNBQVMsU0FBU00sU0FBUSxPQUFPTixVQUFTO0FBQ3hDLG1CQUFPQSxTQUFRLFFBQVEsT0FBTyxTQUFTO0FBQUEsVUFDekM7QUFBQSxVQUNBLFFBQVE7QUFBQSxVQUNSLFFBQVE7QUFBQSxVQUNSLFFBQVE7QUFBQSxVQUNSLFFBQVE7QUFBQSxVQUNSLFFBQVE7QUFBQSxVQUNSLFFBQVE7QUFBQSxVQUNSLFVBQVU7QUFBQSxVQUNWLFVBQVU7QUFBQSxVQUNWLFFBQVE7QUFBQTtBQUFBLFVBRVIsUUFBUTtBQUFBLFVBQ1IsT0FBTztBQUFBLFVBQ1AsTUFBTTtBQUFBLFVBQ04sS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsUUFBUTtBQUFBLFVBQ1IsU0FBUztBQUFBO0FBQUEsVUFFVCxTQUFTLFNBQVNPLFNBQVEsT0FBT1AsVUFBUztBQUN4QyxtQkFBT0EsU0FBUSxRQUFRLG1CQUFjLFNBQVM7QUFBQSxVQUNoRDtBQUFBLFVBQ0EsU0FBUyxTQUFTUSxTQUFRLE9BQU9SLFVBQVM7QUFDeEMsbUJBQU9BLFNBQVEsUUFBUSxtQkFBYyxTQUFTO0FBQUEsVUFDaEQ7QUFBQSxVQUNBLFdBQVc7QUFBQSxVQUNYLFdBQVc7QUFBQSxVQUNYLFlBQVk7QUFBQSxVQUNaLG1CQUFtQjtBQUFBLFVBQ25CLFlBQVk7QUFBQSxVQUNaLGFBQWE7QUFBQSxVQUNiLFlBQVk7QUFBQSxVQUNaLGFBQWE7QUFBQSxVQUNiLGNBQWM7QUFBQSxVQUNkLGNBQWM7QUFBQSxVQUNkLFdBQVcsU0FBUyxZQUFZO0FBQzlCLG1CQUFPO0FBQUEsVUFDVDtBQUFBLFVBQ0EsVUFBVSxTQUFTUyxZQUFXO0FBQzVCLG1CQUFPO0FBQUEsVUFDVDtBQUFBLFVBQ0EsYUFBYSxTQUFTQyxlQUFjO0FBQ2xDLG1CQUFPO0FBQUEsVUFDVDtBQUFBLFVBQ0EsT0FBTztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFFBQ1o7QUFFQSxZQUFJLGdCQUFnQixTQUFTQyxlQUFjLE9BQU9YLFVBQVMsTUFBTTtBQUMvRCxjQUFJLGVBQWUsU0FBUyxPQUFPLE1BQU0sV0FBVyxNQUFNLFlBQVk7QUFDcEUsbUJBQU8sTUFBTSxXQUFXLEVBQUVBLFFBQU87QUFBQSxVQUNuQztBQUVBLGNBQUksZUFBZSxlQUFlLFNBQVMsT0FBTyxNQUFNLFdBQVcsTUFBTSxZQUFZO0FBQ25GLG1CQUFPLE1BQU0sV0FBVyxFQUFFQSxTQUFRLE9BQU9BLFFBQU87QUFBQSxVQUNsRDtBQUVBLGNBQUksYUFBYSxTQUFTLE9BQU8sTUFBTSxZQUFZLFlBQVk7QUFDN0QsbUJBQU8sTUFBTSxRQUFRQSxTQUFRLE9BQU9BLFFBQU87QUFBQSxVQUM3QztBQUVBLGNBQUksaUJBQWlCLFNBQVMsZUFBZSxJQUFJLE1BQU0sV0FBVyxHQUFHO0FBQ25FLG1CQUFPLGVBQWUsSUFBSSxNQUFNLFdBQVcsRUFBRSxPQUFPQSxRQUFPO0FBQUEsVUFDN0Q7QUFFQSxjQUFJLGFBQWEsSUFBSSxHQUFHO0FBQ3RCLG1CQUFPLGFBQWEsSUFBSSxFQUFFLE9BQU9BLFFBQU87QUFBQSxVQUMxQztBQUVBLGlCQUFPO0FBQUEsUUFDVDtBQUVBLFlBQUksYUFBYSxPQUFPLFVBQVU7QUFFbEMsaUJBQVMsUUFBUSxPQUFPQSxVQUFTO0FBQy9CLFVBQUFBLFdBQVUsaUJBQWlCQSxRQUFPO0FBQ2xDLFVBQUFBLFNBQVEsVUFBVTtBQUNsQixjQUFJLFdBQVdBLFVBQ1gsZ0JBQWdCLFNBQVM7QUFDN0IsY0FBSSxPQUFPLFVBQVUsT0FBTyxTQUFTLFFBQVEsS0FBSztBQUVsRCxjQUFJLFNBQVMsVUFBVTtBQUNyQixtQkFBTyxXQUFXLEtBQUssS0FBSyxFQUFFLE1BQU0sR0FBRyxFQUFFO0FBQUEsVUFDM0M7QUFHQSxjQUFJLGFBQWEsSUFBSSxHQUFHO0FBQ3RCLG1CQUFPLGFBQWEsSUFBSSxFQUFFLE9BQU9BLFFBQU87QUFBQSxVQUMxQztBQUdBLGNBQUksaUJBQWlCLE9BQU87QUFDMUIsZ0JBQUksU0FBUyxjQUFjLE9BQU9BLFVBQVMsSUFBSTtBQUUvQyxnQkFBSSxRQUFRO0FBQ1Ysa0JBQUksT0FBTyxXQUFXO0FBQVUsdUJBQU87QUFDdkMscUJBQU8sUUFBUSxRQUFRQSxRQUFPO0FBQUEsWUFDaEM7QUFBQSxVQUNGO0FBRUEsY0FBSSxRQUFRLFFBQVEsT0FBTyxlQUFlLEtBQUssSUFBSTtBQUVuRCxjQUFJLFVBQVUsT0FBTyxhQUFhLFVBQVUsTUFBTTtBQUNoRCxtQkFBTyxjQUFjLE9BQU9BLFFBQU87QUFBQSxVQUNyQztBQUlBLGNBQUksU0FBUyxPQUFPLGdCQUFnQixjQUFjLGlCQUFpQixhQUFhO0FBQzlFLG1CQUFPLFlBQVksT0FBT0EsUUFBTztBQUFBLFVBQ25DO0FBRUEsY0FBSSxpQkFBaUIsT0FBTztBQUUxQixnQkFBSSxNQUFNLGdCQUFnQixRQUFRO0FBQ2hDLHFCQUFPLGFBQWEsT0FBT0EsUUFBTztBQUFBLFlBQ3BDO0FBR0EsbUJBQU8sY0FBYyxPQUFPQSxRQUFPO0FBQUEsVUFDckM7QUFHQSxjQUFJLFVBQVUsT0FBTyxLQUFLLEdBQUc7QUFDM0IsbUJBQU8sY0FBYyxPQUFPQSxRQUFPO0FBQUEsVUFDckM7QUFHQSxpQkFBT0EsU0FBUSxRQUFRLE9BQU8sS0FBSyxHQUFHLElBQUk7QUFBQSxRQUM1QztBQUNBLGlCQUFTLG9CQUFvQixhQUFhLFdBQVc7QUFDbkQsY0FBSSxlQUFlLElBQUksV0FBVyxHQUFHO0FBQ25DLG1CQUFPO0FBQUEsVUFDVDtBQUVBLHlCQUFlLElBQUksYUFBYSxTQUFTO0FBQ3pDLGlCQUFPO0FBQUEsUUFDVDtBQUNBLGlCQUFTLGtCQUFrQixXQUFXLFdBQVc7QUFDL0MsY0FBSSxhQUFhLGNBQWM7QUFDN0IsbUJBQU87QUFBQSxVQUNUO0FBRUEsdUJBQWEsU0FBUyxJQUFJO0FBQzFCLGlCQUFPO0FBQUEsUUFDVDtBQUNBLFlBQUksU0FBUztBQUViLFFBQUFILFNBQVEsU0FBUztBQUNqQixRQUFBQSxTQUFRLFVBQVU7QUFDbEIsUUFBQUEsU0FBUSxVQUFVO0FBQ2xCLFFBQUFBLFNBQVEsc0JBQXNCO0FBQzlCLFFBQUFBLFNBQVEsb0JBQW9CO0FBRTVCLGVBQU8sZUFBZUEsVUFBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxNQUU5RCxDQUFFO0FBQUE7QUFBQTs7O0FDMTNCRjtBQUFBO0FBQUEsYUFBTyxVQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFlZixjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFlZCxVQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQXNCVixtQkFBbUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFvQm5CLFVBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFvQlYsbUJBQW1CLENBQUMsUUFBUSxTQUFTLFdBQVcsUUFBUTtBQUFBLE1BQzFEO0FBQUE7QUFBQTs7O0FDN0ZBO0FBQUE7QUFHQSxVQUFJLFVBQVU7QUFDZCxVQUFJLFFBQVE7QUFDWixVQUFJZSxVQUFTO0FBRWIsYUFBTyxVQUFVO0FBaUJqQixlQUFTLFFBQVEsS0FBSyxZQUFZLE9BQU8sUUFBUTtBQUMvQyxZQUFJQyxXQUFVO0FBQUEsVUFDWjtBQUFBLFVBQ0EsT0FBUSxPQUFPLFVBQVUsY0FBYyxJQUFJO0FBQUEsVUFDM0M7QUFBQSxVQUNBLFVBQVVELFFBQU8sb0JBQW9CQSxRQUFPLG9CQUFvQjtBQUFBLFFBQ2xFO0FBQ0EsZUFBTyxNQUFNLFFBQVEsS0FBS0MsUUFBTztBQUFBLE1BQ25DO0FBQUE7QUFBQTs7O0FDaENBO0FBQUE7QUFVQSxVQUFJLFVBQVU7QUFDZCxVQUFJQyxVQUFTO0FBZ0JiLGFBQU8sVUFBVSxTQUFTLFdBQVcsS0FBSztBQUN4QyxZQUFJLE1BQU0sUUFBUSxHQUFHLEdBQ2pCLE9BQU8sT0FBTyxVQUFVLFNBQVMsS0FBSyxHQUFHO0FBRTdDLFlBQUlBLFFBQU8scUJBQXFCLElBQUksVUFBVUEsUUFBTyxtQkFBbUI7QUFDdEUsY0FBSSxTQUFTLHFCQUFxQjtBQUNoQyxtQkFBTyxDQUFDLElBQUksUUFBUSxJQUFJLFNBQVMsS0FDN0IsZUFDQSxnQkFBZ0IsSUFBSSxPQUFPO0FBQUEsVUFDakMsV0FBVyxTQUFTLGtCQUFrQjtBQUNwQyxtQkFBTyxhQUFhLElBQUksU0FBUztBQUFBLFVBQ25DLFdBQVcsU0FBUyxtQkFBbUI7QUFDckMsZ0JBQUksT0FBTyxPQUFPLEtBQUssR0FBRyxHQUN0QixPQUFPLEtBQUssU0FBUyxJQUNuQixLQUFLLE9BQU8sR0FBRyxDQUFDLEVBQUUsS0FBSyxJQUFJLElBQUksVUFDL0IsS0FBSyxLQUFLLElBQUk7QUFDcEIsbUJBQU8sZUFBZSxPQUFPO0FBQUEsVUFDL0IsT0FBTztBQUNMLG1CQUFPO0FBQUEsVUFDVDtBQUFBLFFBQ0YsT0FBTztBQUNMLGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFBQTtBQUFBOzs7QUNsREE7QUFBQTtBQVVBLFVBQUksT0FBTztBQUFYLFVBQ0ksWUFBWTtBQURoQixVQUVJLGFBQWE7QUFxQmpCLGFBQU8sVUFBVSxTQUFTLFdBQVcsS0FBSyxNQUFNO0FBQzlDLFlBQUksU0FBUyxLQUFLLEtBQUssUUFBUSxHQUMzQixNQUFNLEtBQUssS0FBSyxRQUFRLEdBQ3hCLFdBQVcsS0FBSyxDQUFDLEdBQ2pCLFNBQVMsVUFBVSxLQUFLLElBQUksR0FDNUIsTUFBTSxTQUFTLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUMvQixVQUFVLEtBQUssS0FBSyxTQUFTO0FBRWpDLFlBQUcsT0FBTyxRQUFRO0FBQVksZ0JBQU0sSUFBSTtBQUN4QyxjQUFNLE9BQU87QUFDYixjQUFNLElBQ0gsUUFBUSxjQUFjLFdBQVk7QUFBRSxpQkFBTyxXQUFXLEdBQUc7QUFBQSxRQUFHLENBQUMsRUFDN0QsUUFBUSxhQUFhLFdBQVk7QUFBRSxpQkFBTyxXQUFXLE1BQU07QUFBQSxRQUFHLENBQUMsRUFDL0QsUUFBUSxhQUFhLFdBQVk7QUFBRSxpQkFBTyxXQUFXLFFBQVE7QUFBQSxRQUFHLENBQUM7QUFFcEUsZUFBTyxVQUFVLFVBQVUsT0FBTyxNQUFNO0FBQUEsTUFDMUM7QUFBQTtBQUFBOzs7QUNqREE7QUFBQTtBQTZCQSxhQUFPLFVBQVUsU0FBUyxjQUFjLFdBQVcsUUFBUSxZQUFZO0FBQ3JFLFlBQUksUUFBUSxVQUFVLFlBQVksVUFBVSxVQUFVLHVCQUFPLE9BQU8sSUFBSTtBQUV4RSxZQUFJLENBQUMsT0FBTyxTQUFTO0FBQ25CLGlCQUFPLFVBQVUsdUJBQU8sT0FBTyxJQUFJO0FBQUEsUUFDckM7QUFFQSxxQkFBYSxVQUFVLFdBQVcsSUFBSSxhQUFhO0FBRW5ELGlCQUFTLFFBQVEsT0FBTztBQUN0QixjQUFJLGNBQ0MsU0FBUyxZQUFZLFNBQVMsVUFBVSxTQUFTLGNBQWMsUUFBUSxXQUFZO0FBQ3RGLG1CQUFPLFFBQVEsSUFBSSxJQUFJLE1BQU0sSUFBSTtBQUFBLFVBQ25DO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQTtBQUFBOzs7QUM1Q0E7QUFBQTtBQUFBO0FBUUEsVUFBSSxPQUFPO0FBQ1gsZUFBUyxVQUFVO0FBQ2pCLGFBQUssT0FBTyxvQkFBb0IsS0FBSyxPQUFPLElBQUksS0FBSyxJQUFJO0FBQUEsTUFDM0Q7QUFFQSxjQUFRLFlBQVk7QUFBQSxRQUNsQixLQUFLLFNBQVMsSUFBSSxLQUFLO0FBQ3JCLGlCQUFPLElBQUksS0FBSyxJQUFJO0FBQUEsUUFDdEI7QUFBQSxRQUNBLEtBQUssU0FBUyxJQUFJLEtBQUssT0FBTztBQUM1QixjQUFJLE9BQU8sYUFBYSxHQUFHLEdBQUc7QUFDNUIsbUJBQU8sZUFBZSxLQUFLLEtBQUssTUFBTTtBQUFBLGNBQ3BDO0FBQUEsY0FDQSxjQUFjO0FBQUEsWUFDaEIsQ0FBQztBQUFBLFVBQ0g7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLFVBQUksYUFBYSxPQUFPLFlBQVksYUFBYSxVQUFVO0FBUzNELGVBQVMsZUFBZSxpQkFBaUIsa0JBQWtCLFlBQVk7QUFFckUsWUFBSSxDQUFDLGNBQWNDLGFBQVksZUFBZSxLQUFLQSxhQUFZLGdCQUFnQixHQUFHO0FBQ2hGLGlCQUFPO0FBQUEsUUFDVDtBQUNBLFlBQUksY0FBYyxXQUFXLElBQUksZUFBZTtBQUNoRCxZQUFJLGFBQWE7QUFDZixjQUFJLFNBQVMsWUFBWSxJQUFJLGdCQUFnQjtBQUM3QyxjQUFJLE9BQU8sV0FBVyxXQUFXO0FBQy9CLG1CQUFPO0FBQUEsVUFDVDtBQUFBLFFBQ0Y7QUFDQSxlQUFPO0FBQUEsTUFDVDtBQVVBLGVBQVMsV0FBVyxpQkFBaUIsa0JBQWtCLFlBQVksUUFBUTtBQUV6RSxZQUFJLENBQUMsY0FBY0EsYUFBWSxlQUFlLEtBQUtBLGFBQVksZ0JBQWdCLEdBQUc7QUFDaEY7QUFBQSxRQUNGO0FBQ0EsWUFBSSxjQUFjLFdBQVcsSUFBSSxlQUFlO0FBQ2hELFlBQUksYUFBYTtBQUNmLHNCQUFZLElBQUksa0JBQWtCLE1BQU07QUFBQSxRQUMxQyxPQUFPO0FBQ0wsd0JBQWMsSUFBSSxXQUFXO0FBQzdCLHNCQUFZLElBQUksa0JBQWtCLE1BQU07QUFDeEMscUJBQVcsSUFBSSxpQkFBaUIsV0FBVztBQUFBLFFBQzdDO0FBQUEsTUFDRjtBQU1BLGFBQU8sVUFBVTtBQUNqQixhQUFPLFFBQVEsYUFBYTtBQWM1QixlQUFTLFVBQVUsaUJBQWlCLGtCQUFrQkMsVUFBUztBQUU3RCxZQUFJQSxZQUFXQSxTQUFRLFlBQVk7QUFDakMsaUJBQU8sbUJBQW1CLGlCQUFpQixrQkFBa0JBLFFBQU87QUFBQSxRQUN0RTtBQUVBLFlBQUksZUFBZSxZQUFZLGlCQUFpQixnQkFBZ0I7QUFDaEUsWUFBSSxpQkFBaUIsTUFBTTtBQUN6QixpQkFBTztBQUFBLFFBQ1Q7QUFHQSxlQUFPLG1CQUFtQixpQkFBaUIsa0JBQWtCQSxRQUFPO0FBQUEsTUFDdEU7QUFRQSxlQUFTLFlBQVksaUJBQWlCLGtCQUFrQjtBQUV0RCxZQUFJLG9CQUFvQixrQkFBa0I7QUFFeEMsaUJBQU8sb0JBQW9CLEtBQUssSUFBSSxvQkFBb0IsSUFBSTtBQUFBLFFBQzlEO0FBR0EsWUFDRSxvQkFBb0I7QUFBQSxRQUNwQixxQkFBcUIsa0JBQ3JCO0FBQ0EsaUJBQU87QUFBQSxRQUNUO0FBSUEsWUFBSUQsYUFBWSxlQUFlLEtBQUtBLGFBQVksZ0JBQWdCLEdBQUc7QUFFakUsaUJBQU87QUFBQSxRQUNUO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFjQSxlQUFTLG1CQUFtQixpQkFBaUIsa0JBQWtCQyxVQUFTO0FBQ3RFLFFBQUFBLFdBQVVBLFlBQVcsQ0FBQztBQUN0QixRQUFBQSxTQUFRLFVBQVVBLFNBQVEsWUFBWSxRQUFRLFFBQVFBLFNBQVEsV0FBVyxJQUFJLFdBQVc7QUFDeEYsWUFBSSxhQUFhQSxZQUFXQSxTQUFRO0FBR3BDLFlBQUksb0JBQW9CLGVBQWUsaUJBQWlCLGtCQUFrQkEsU0FBUSxPQUFPO0FBQ3pGLFlBQUksc0JBQXNCLE1BQU07QUFDOUIsaUJBQU87QUFBQSxRQUNUO0FBQ0EsWUFBSSxxQkFBcUIsZUFBZSxrQkFBa0IsaUJBQWlCQSxTQUFRLE9BQU87QUFDMUYsWUFBSSx1QkFBdUIsTUFBTTtBQUMvQixpQkFBTztBQUFBLFFBQ1Q7QUFHQSxZQUFJLFlBQVk7QUFDZCxjQUFJLG1CQUFtQixXQUFXLGlCQUFpQixnQkFBZ0I7QUFFbkUsY0FBSSxxQkFBcUIsU0FBUyxxQkFBcUIsTUFBTTtBQUMzRCx1QkFBVyxpQkFBaUIsa0JBQWtCQSxTQUFRLFNBQVMsZ0JBQWdCO0FBQy9FLG1CQUFPO0FBQUEsVUFDVDtBQUdBLGNBQUksZUFBZSxZQUFZLGlCQUFpQixnQkFBZ0I7QUFDaEUsY0FBSSxpQkFBaUIsTUFBTTtBQUV6QixtQkFBTztBQUFBLFVBQ1Q7QUFBQSxRQUNGO0FBRUEsWUFBSSxlQUFlLEtBQUssZUFBZTtBQUN2QyxZQUFJLGlCQUFpQixLQUFLLGdCQUFnQixHQUFHO0FBQzNDLHFCQUFXLGlCQUFpQixrQkFBa0JBLFNBQVEsU0FBUyxLQUFLO0FBQ3BFLGlCQUFPO0FBQUEsUUFDVDtBQUdBLG1CQUFXLGlCQUFpQixrQkFBa0JBLFNBQVEsU0FBUyxJQUFJO0FBRW5FLFlBQUksU0FBUyx5QkFBeUIsaUJBQWlCLGtCQUFrQixjQUFjQSxRQUFPO0FBQzlGLG1CQUFXLGlCQUFpQixrQkFBa0JBLFNBQVEsU0FBUyxNQUFNO0FBQ3JFLGVBQU87QUFBQSxNQUNUO0FBRUEsZUFBUyx5QkFBeUIsaUJBQWlCLGtCQUFrQixjQUFjQSxVQUFTO0FBQzFGLGdCQUFRLGNBQWM7QUFBQSxVQUNwQixLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBRUgsbUJBQU8sVUFBVSxnQkFBZ0IsUUFBUSxHQUFHLGlCQUFpQixRQUFRLENBQUM7QUFBQSxVQUN4RSxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU8sb0JBQW9CO0FBQUEsVUFDN0IsS0FBSztBQUNILG1CQUFPLFVBQVUsaUJBQWlCLGtCQUFrQixDQUFFLFFBQVEsV0FBVyxNQUFPLEdBQUdBLFFBQU87QUFBQSxVQUM1RixLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU8sY0FBYyxpQkFBaUIsa0JBQWtCQSxRQUFPO0FBQUEsVUFDakUsS0FBSztBQUNILG1CQUFPLFlBQVksaUJBQWlCLGdCQUFnQjtBQUFBLFVBQ3RELEtBQUs7QUFDSCxtQkFBTyxlQUFlLGlCQUFpQixrQkFBa0JBLFFBQU87QUFBQSxVQUNsRSxLQUFLO0FBQ0gsbUJBQU8sY0FBYyxJQUFJLFdBQVcsZ0JBQWdCLE1BQU0sR0FBRyxJQUFJLFdBQVcsaUJBQWlCLE1BQU0sR0FBR0EsUUFBTztBQUFBLFVBQy9HLEtBQUs7QUFDSCxtQkFBTyxjQUFjLElBQUksV0FBVyxlQUFlLEdBQUcsSUFBSSxXQUFXLGdCQUFnQixHQUFHQSxRQUFPO0FBQUEsVUFDakcsS0FBSztBQUNILG1CQUFPLGFBQWEsaUJBQWlCLGtCQUFrQkEsUUFBTztBQUFBLFVBQ2hFLEtBQUs7QUFDSCxtQkFBTyxhQUFhLGlCQUFpQixrQkFBa0JBLFFBQU87QUFBQSxVQUNoRSxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU8sZ0JBQWdCLE9BQU8sZ0JBQWdCO0FBQUEsVUFDaEQsS0FBSztBQUNILG1CQUFPLGdCQUFnQixNQUFNLGFBQWEsTUFBTSxpQkFBaUIsTUFBTSxhQUFhO0FBQUEsVUFDdEYsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPLGdCQUFnQixTQUFTLE1BQU0saUJBQWlCLFNBQVM7QUFBQSxVQUNsRTtBQUNFLG1CQUFPLFlBQVksaUJBQWlCLGtCQUFrQkEsUUFBTztBQUFBLFFBQ2pFO0FBQUEsTUFDRjtBQVVBLGVBQVMsWUFBWSxpQkFBaUIsa0JBQWtCO0FBQ3RELGVBQU8sZ0JBQWdCLFNBQVMsTUFBTSxpQkFBaUIsU0FBUztBQUFBLE1BQ2xFO0FBV0EsZUFBUyxhQUFhLGlCQUFpQixrQkFBa0JBLFVBQVM7QUFFaEUsWUFBSSxnQkFBZ0IsU0FBUyxpQkFBaUIsTUFBTTtBQUNsRCxpQkFBTztBQUFBLFFBQ1Q7QUFDQSxZQUFJLGdCQUFnQixTQUFTLEdBQUc7QUFDOUIsaUJBQU87QUFBQSxRQUNUO0FBQ0EsWUFBSSxnQkFBZ0IsQ0FBQztBQUNyQixZQUFJLGlCQUFpQixDQUFDO0FBQ3RCLHdCQUFnQixRQUFRLFNBQVMsY0FBYyxLQUFLLE9BQU87QUFDekQsd0JBQWMsS0FBSyxDQUFFLEtBQUssS0FBTSxDQUFDO0FBQUEsUUFDbkMsQ0FBQztBQUNELHlCQUFpQixRQUFRLFNBQVMsY0FBYyxLQUFLLE9BQU87QUFDMUQseUJBQWUsS0FBSyxDQUFFLEtBQUssS0FBTSxDQUFDO0FBQUEsUUFDcEMsQ0FBQztBQUNELGVBQU8sY0FBYyxjQUFjLEtBQUssR0FBRyxlQUFlLEtBQUssR0FBR0EsUUFBTztBQUFBLE1BQzNFO0FBV0EsZUFBUyxjQUFjLGlCQUFpQixrQkFBa0JBLFVBQVM7QUFDakUsWUFBSSxTQUFTLGdCQUFnQjtBQUM3QixZQUFJLFdBQVcsaUJBQWlCLFFBQVE7QUFDdEMsaUJBQU87QUFBQSxRQUNUO0FBQ0EsWUFBSSxXQUFXLEdBQUc7QUFDaEIsaUJBQU87QUFBQSxRQUNUO0FBQ0EsWUFBSSxRQUFRO0FBQ1osZUFBTyxFQUFFLFFBQVEsUUFBUTtBQUN2QixjQUFJLFVBQVUsZ0JBQWdCLEtBQUssR0FBRyxpQkFBaUIsS0FBSyxHQUFHQSxRQUFPLE1BQU0sT0FBTztBQUNqRixtQkFBTztBQUFBLFVBQ1Q7QUFBQSxRQUNGO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFXQSxlQUFTLGVBQWUsaUJBQWlCLGtCQUFrQkEsVUFBUztBQUNsRSxlQUFPLGNBQWMsb0JBQW9CLGVBQWUsR0FBRyxvQkFBb0IsZ0JBQWdCLEdBQUdBLFFBQU87QUFBQSxNQUMzRztBQVFBLGVBQVMsb0JBQW9CLFFBQVE7QUFDbkMsZUFBTyxPQUFPLFdBQVcsZUFDdkIsT0FBTyxXQUFXLFlBQ2xCLE9BQU8sT0FBTyxhQUFhLGVBQzNCLE9BQU8sT0FBTyxPQUFPLFFBQVEsTUFBTTtBQUFBLE1BQ3ZDO0FBU0EsZUFBUyxtQkFBbUIsUUFBUTtBQUNsQyxZQUFJLG9CQUFvQixNQUFNLEdBQUc7QUFDL0IsY0FBSTtBQUNGLG1CQUFPLG9CQUFvQixPQUFPLE9BQU8sUUFBUSxFQUFFLENBQUM7QUFBQSxVQUN0RCxTQUFTLGVBQWU7QUFDdEIsbUJBQU8sQ0FBQztBQUFBLFVBQ1Y7QUFBQSxRQUNGO0FBQ0EsZUFBTyxDQUFDO0FBQUEsTUFDVjtBQVFBLGVBQVMsb0JBQW9CLFdBQVc7QUFDdEMsWUFBSSxrQkFBa0IsVUFBVSxLQUFLO0FBQ3JDLFlBQUksY0FBYyxDQUFFLGdCQUFnQixLQUFNO0FBQzFDLGVBQU8sZ0JBQWdCLFNBQVMsT0FBTztBQUNyQyw0QkFBa0IsVUFBVSxLQUFLO0FBQ2pDLHNCQUFZLEtBQUssZ0JBQWdCLEtBQUs7QUFBQSxRQUN4QztBQUNBLGVBQU87QUFBQSxNQUNUO0FBUUEsZUFBUyxrQkFBa0IsUUFBUTtBQUNqQyxZQUFJLE9BQU8sQ0FBQztBQUNaLGlCQUFTLE9BQU8sUUFBUTtBQUN0QixlQUFLLEtBQUssR0FBRztBQUFBLFFBQ2Y7QUFDQSxlQUFPO0FBQUEsTUFDVDtBQUVBLGVBQVMscUJBQXFCLFFBQVE7QUFDcEMsWUFBSSxPQUFPLENBQUM7QUFDWixZQUFJLFVBQVUsT0FBTyxzQkFBc0IsTUFBTTtBQUNqRCxpQkFBUyxJQUFJLEdBQUcsSUFBSSxRQUFRLFFBQVEsS0FBSyxHQUFHO0FBQzFDLGNBQUksTUFBTSxRQUFRLENBQUM7QUFDbkIsY0FBSSxPQUFPLHlCQUF5QixRQUFRLEdBQUcsRUFBRSxZQUFZO0FBQzNELGlCQUFLLEtBQUssR0FBRztBQUFBLFVBQ2Y7QUFBQSxRQUNGO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFZQSxlQUFTLFVBQVUsaUJBQWlCLGtCQUFrQixNQUFNQSxVQUFTO0FBQ25FLFlBQUksU0FBUyxLQUFLO0FBQ2xCLFlBQUksV0FBVyxHQUFHO0FBQ2hCLGlCQUFPO0FBQUEsUUFDVDtBQUNBLGlCQUFTLElBQUksR0FBRyxJQUFJLFFBQVEsS0FBSyxHQUFHO0FBQ2xDLGNBQUksVUFBVSxnQkFBZ0IsS0FBSyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsS0FBSyxDQUFDLENBQUMsR0FBR0EsUUFBTyxNQUFNLE9BQU87QUFDckYsbUJBQU87QUFBQSxVQUNUO0FBQUEsUUFDRjtBQUNBLGVBQU87QUFBQSxNQUNUO0FBV0EsZUFBUyxZQUFZLGlCQUFpQixrQkFBa0JBLFVBQVM7QUFDL0QsWUFBSSxlQUFlLGtCQUFrQixlQUFlO0FBQ3BELFlBQUksZ0JBQWdCLGtCQUFrQixnQkFBZ0I7QUFDdEQsWUFBSSxrQkFBa0IscUJBQXFCLGVBQWU7QUFDMUQsWUFBSSxtQkFBbUIscUJBQXFCLGdCQUFnQjtBQUM1RCx1QkFBZSxhQUFhLE9BQU8sZUFBZTtBQUNsRCx3QkFBZ0IsY0FBYyxPQUFPLGdCQUFnQjtBQUVyRCxZQUFJLGFBQWEsVUFBVSxhQUFhLFdBQVcsY0FBYyxRQUFRO0FBQ3ZFLGNBQUksY0FBYyxXQUFXLFlBQVksRUFBRSxLQUFLLEdBQUcsV0FBVyxhQUFhLEVBQUUsS0FBSyxDQUFDLE1BQU0sT0FBTztBQUM5RixtQkFBTztBQUFBLFVBQ1Q7QUFDQSxpQkFBTyxVQUFVLGlCQUFpQixrQkFBa0IsY0FBY0EsUUFBTztBQUFBLFFBQzNFO0FBRUEsWUFBSSxrQkFBa0IsbUJBQW1CLGVBQWU7QUFDeEQsWUFBSSxtQkFBbUIsbUJBQW1CLGdCQUFnQjtBQUMxRCxZQUFJLGdCQUFnQixVQUFVLGdCQUFnQixXQUFXLGlCQUFpQixRQUFRO0FBQ2hGLDBCQUFnQixLQUFLO0FBQ3JCLDJCQUFpQixLQUFLO0FBQ3RCLGlCQUFPLGNBQWMsaUJBQWlCLGtCQUFrQkEsUUFBTztBQUFBLFFBQ2pFO0FBRUEsWUFBSSxhQUFhLFdBQVcsS0FDeEIsZ0JBQWdCLFdBQVcsS0FDM0IsY0FBYyxXQUFXLEtBQ3pCLGlCQUFpQixXQUFXLEdBQUc7QUFDakMsaUJBQU87QUFBQSxRQUNUO0FBRUEsZUFBTztBQUFBLE1BQ1Q7QUFXQSxlQUFTRCxhQUFZLE9BQU87QUFDMUIsZUFBTyxVQUFVLFFBQVEsT0FBTyxVQUFVO0FBQUEsTUFDNUM7QUFFQSxlQUFTLFdBQVcsS0FBSztBQUN2QixlQUFPLElBQUksSUFBSSxTQUFTLFVBQVUsT0FBTztBQUN2QyxjQUFJLE9BQU8sVUFBVSxVQUFVO0FBQzdCLG1CQUFPLE1BQU0sU0FBUztBQUFBLFVBQ3hCO0FBRUEsaUJBQU87QUFBQSxRQUNULENBQUM7QUFBQSxNQUNIO0FBQUE7QUFBQTs7O0FDNWVBO0FBQUE7QUFBQSxVQUFJRSxVQUFTO0FBbUJiLGFBQU8sVUFBVSxTQUFTLGlCQUFpQjtBQUN6QyxlQUFPQSxRQUFPLFlBQ1osT0FBTyxVQUFVLGVBQ2pCLE9BQU8sWUFBWTtBQUFBLE1BQ3ZCO0FBQUE7QUFBQTs7O0FDdkJBO0FBQUE7QUFNQSxVQUFJQyxRQUFPO0FBQ1gsVUFBSSxPQUFPO0FBQ1gsVUFBSSxpQkFBaUI7QUFDckIsVUFBSSxnQkFBZ0I7QUE0QnBCLGFBQU8sVUFBVSxTQUFTLFlBQVksS0FBSyxNQUFNLFFBQVE7QUFDdkQsaUJBQVMsV0FBVyxTQUFZLFdBQVk7QUFBQSxRQUFDLElBQUk7QUFFakQsZUFBTztBQUFBLFVBQWU7QUFBQSxVQUFLO0FBQUEsVUFDekI7QUFBQSxZQUFFLEtBQUssU0FBUyxpQkFBaUI7QUFnQjdCLGtCQUFJLENBQUMsZUFBZSxLQUFLLENBQUMsS0FBSyxNQUFNLFVBQVUsR0FBRztBQUNoRCxxQkFBSyxNQUFNLFFBQVEsY0FBYztBQUFBLGNBQ25DO0FBRUEsa0JBQUksU0FBUyxPQUFPLEtBQUssSUFBSTtBQUM3QixrQkFBSSxXQUFXO0FBQ2IsdUJBQU87QUFFVCxrQkFBSSxlQUFlLElBQUlBLE1BQUssVUFBVTtBQUN0Qyw0QkFBYyxNQUFNLFlBQVk7QUFDaEMscUJBQU87QUFBQSxZQUNUO0FBQUEsWUFDQSxjQUFjO0FBQUEsVUFDbEI7QUFBQSxRQUFDO0FBQUEsTUFDSDtBQUFBO0FBQUE7OztBQ3ZFQTtBQUFBO0FBQUEsVUFBSSxlQUFlLE9BQU8seUJBQXlCLFdBQVk7QUFBQSxNQUFDLEdBQUcsUUFBUTtBQTBDM0UsYUFBTyxVQUFVLFNBQVMsZUFBZ0JDLEtBQUksZUFBZSxhQUFhO0FBQ3hFLFlBQUksQ0FBQyxhQUFhO0FBQWMsaUJBQU9BO0FBRXZDLGVBQU8sZUFBZUEsS0FBSSxVQUFVO0FBQUEsVUFDbEMsS0FBSyxXQUFZO0FBQ2YsZ0JBQUksYUFBYTtBQUNmLG9CQUFNLE1BQU0sNEJBQTRCLGdCQUFnQiw2RUFFdEQsZ0JBQWdCLGFBQWEsZ0JBQWdCLHFCQUFxQjtBQUFBLFlBQ3RFO0FBRUEsa0JBQU0sTUFBTSw0QkFBNEIsZ0JBQWdCLDRDQUN0QixnQkFBZ0IsSUFBSTtBQUFBLFVBQ3hEO0FBQUEsUUFDRixDQUFDO0FBRUQsZUFBT0E7QUFBQSxNQUNUO0FBQUE7QUFBQTs7O0FDM0RBO0FBQUE7QUFtQkEsYUFBTyxVQUFVLFNBQVMsY0FBYyxRQUFRO0FBQzlDLFlBQUksU0FBUyxPQUFPLG9CQUFvQixNQUFNO0FBRTlDLGlCQUFTLFlBQVksVUFBVTtBQUM3QixjQUFJLE9BQU8sUUFBUSxRQUFRLE1BQU0sSUFBSTtBQUNuQyxtQkFBTyxLQUFLLFFBQVE7QUFBQSxVQUN0QjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLFFBQVEsT0FBTyxlQUFlLE1BQU07QUFDeEMsZUFBTyxVQUFVLE1BQU07QUFDckIsaUJBQU8sb0JBQW9CLEtBQUssRUFBRSxRQUFRLFdBQVc7QUFDckQsa0JBQVEsT0FBTyxlQUFlLEtBQUs7QUFBQSxRQUNyQztBQUVBLGVBQU87QUFBQSxNQUNUO0FBQUE7QUFBQTs7O0FDbkNBO0FBQUE7QUFBQSxVQUFJQyxVQUFTO0FBQ2IsVUFBSSxPQUFPO0FBQ1gsVUFBSSxnQkFBZ0I7QUFDcEIsVUFBSSxpQkFBaUI7QUEyQnJCLFVBQUksV0FBVyxDQUFDLFdBQVcsYUFBYSxRQUFRLFFBQVE7QUFFeEQsYUFBTyxVQUFVLFNBQVMsUUFBUSxLQUFLLHdCQUF3QjtBQUM3RCxZQUFJLENBQUMsZUFBZTtBQUFHLGlCQUFPO0FBRTlCLGVBQU8sSUFBSSxNQUFNLEtBQUs7QUFBQSxVQUNwQixLQUFLLFNBQVMsWUFBWSxRQUFRLFVBQVU7QUFLMUMsZ0JBQUksT0FBTyxhQUFhLFlBQ3BCQSxRQUFPLGtCQUFrQixRQUFRLFFBQVEsTUFBTSxNQUMvQyxDQUFDLFFBQVEsSUFBSSxRQUFRLFFBQVEsR0FBRztBQUVsQyxrQkFBSSx3QkFBd0I7QUFDMUIsc0JBQU0sTUFBTSw0QkFBNEIseUJBQXlCLE1BQy9ELFdBQVcscUNBQ1gseUJBQXlCLElBQUk7QUFBQSxjQUNqQztBQUtBLGtCQUFJLGFBQWE7QUFDakIsa0JBQUkscUJBQXFCO0FBQ3pCLDRCQUFjLE1BQU0sRUFBRSxRQUFRLFNBQVMsTUFBTTtBQUMzQyxvQkFDRSxDQUFDLE9BQU8sVUFBVSxlQUFlLElBQUksS0FDckMsU0FBUyxRQUFRLElBQUksTUFBTSxJQUMzQjtBQUNBLHNCQUFJLE9BQU87QUFBQSxvQkFDVDtBQUFBLG9CQUNBO0FBQUEsb0JBQ0E7QUFBQSxrQkFDRjtBQUNBLHNCQUFJLE9BQU8sb0JBQW9CO0FBQzdCLGlDQUFhO0FBQ2IseUNBQXFCO0FBQUEsa0JBQ3ZCO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNGLENBQUM7QUFFRCxrQkFBSSxlQUFlLE1BQU07QUFDdkIsc0JBQU0sTUFBTSw0QkFBNEIsV0FDdEMscUJBQXFCLGFBQWEsSUFBSTtBQUFBLGNBQzFDLE9BQU87QUFDTCxzQkFBTSxNQUFNLDRCQUE0QixRQUFRO0FBQUEsY0FDbEQ7QUFBQSxZQUNGO0FBY0EsZ0JBQUksU0FBUyxRQUFRLFFBQVEsTUFBTSxNQUFNLENBQUMsS0FBSyxRQUFRLFVBQVUsR0FBRztBQUNsRSxtQkFBSyxRQUFRLFFBQVEsV0FBVztBQUFBLFlBQ2xDO0FBRUEsbUJBQU8sUUFBUSxJQUFJLFFBQVEsUUFBUTtBQUFBLFVBQ3JDO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSDtBQVlBLGVBQVMscUJBQXFCLE1BQU0sTUFBTSxLQUFLO0FBQzdDLFlBQUksS0FBSyxJQUFJLEtBQUssU0FBUyxLQUFLLE1BQU0sS0FBSyxLQUFLO0FBQzlDLGlCQUFPO0FBQUEsUUFDVDtBQUVBLFlBQUksT0FBTyxDQUFDO0FBSVosaUJBQVMsSUFBSSxHQUFHLEtBQUssS0FBSyxRQUFRLEtBQUs7QUFDckMsZUFBSyxDQUFDLElBQUksTUFBTSxLQUFLLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQztBQUN2QyxlQUFLLENBQUMsRUFBRSxDQUFDLElBQUk7QUFBQSxRQUNmO0FBQ0EsaUJBQVMsSUFBSSxHQUFHLElBQUksS0FBSyxRQUFRLEtBQUs7QUFDcEMsZUFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJO0FBQUEsUUFDZjtBQUVBLGlCQUFTLElBQUksR0FBRyxLQUFLLEtBQUssUUFBUSxLQUFLO0FBQ3JDLGNBQUksS0FBSyxLQUFLLFdBQVcsSUFBSSxDQUFDO0FBQzlCLG1CQUFTLElBQUksR0FBRyxLQUFLLEtBQUssUUFBUSxLQUFLO0FBQ3JDLGdCQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLO0FBQzFCLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUk7QUFDYjtBQUFBLFlBQ0Y7QUFDQSxpQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUs7QUFBQSxjQUNoQixLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSTtBQUFBLGNBQ2pCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQUEsY0FDakIsS0FBSyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsS0FDZCxPQUFPLEtBQUssV0FBVyxJQUFJLENBQUMsSUFBSSxJQUFJO0FBQUEsWUFDekM7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUVBLGVBQU8sS0FBSyxLQUFLLE1BQU0sRUFBRSxLQUFLLE1BQU07QUFBQSxNQUN0QztBQUFBO0FBQUE7OztBQ2xKQTtBQUFBO0FBTUEsVUFBSSxpQkFBaUI7QUFDckIsVUFBSUMsUUFBTztBQUNYLFVBQUksT0FBTztBQUNYLFVBQUksVUFBVTtBQUNkLFVBQUksZ0JBQWdCO0FBNEJwQixhQUFPLFVBQVUsU0FBUyxVQUFVLEtBQUssTUFBTSxRQUFRO0FBQ3JELFlBQUksZ0JBQWdCLFdBQVk7QUFhOUIsY0FBSSxDQUFDLEtBQUssTUFBTSxVQUFVLEdBQUc7QUFDM0IsaUJBQUssTUFBTSxRQUFRLGFBQWE7QUFBQSxVQUNsQztBQUVBLGNBQUksU0FBUyxPQUFPLE1BQU0sTUFBTSxTQUFTO0FBQ3pDLGNBQUksV0FBVztBQUNiLG1CQUFPO0FBRVQsY0FBSSxlQUFlLElBQUlBLE1BQUssVUFBVTtBQUN0Qyx3QkFBYyxNQUFNLFlBQVk7QUFDaEMsaUJBQU87QUFBQSxRQUNUO0FBRUEsdUJBQWUsZUFBZSxNQUFNLEtBQUs7QUFDekMsWUFBSSxJQUFJLElBQUksUUFBUSxlQUFlLElBQUk7QUFBQSxNQUN6QztBQUFBO0FBQUE7OztBQ25FQTtBQUFBO0FBTUEsVUFBSUMsUUFBTztBQUNYLFVBQUksT0FBTztBQUNYLFVBQUksaUJBQWlCO0FBQ3JCLFVBQUksZ0JBQWdCO0FBb0NwQixhQUFPLFVBQVUsU0FBUyxrQkFBa0IsS0FBSyxNQUFNLFFBQVE7QUFDN0QsWUFBSSxPQUFPLE9BQU8seUJBQXlCLEtBQUssSUFBSSxHQUNoRCxTQUFTLFdBQVk7QUFBQSxRQUFDO0FBRTFCLFlBQUksUUFBUSxlQUFlLE9BQU8sS0FBSztBQUNyQyxtQkFBUyxLQUFLO0FBRWhCLGVBQU87QUFBQSxVQUFlO0FBQUEsVUFBSztBQUFBLFVBQ3pCO0FBQUEsWUFBRSxLQUFLLFNBQVMsNEJBQTRCO0FBZ0J4QyxrQkFBSSxDQUFDLGVBQWUsS0FBSyxDQUFDLEtBQUssTUFBTSxVQUFVLEdBQUc7QUFDaEQscUJBQUssTUFBTSxRQUFRLHlCQUF5QjtBQUFBLGNBQzlDO0FBS0Esa0JBQUksZUFBZSxLQUFLLE1BQU0sVUFBVTtBQUN4QyxtQkFBSyxNQUFNLFlBQVksSUFBSTtBQUMzQixrQkFBSSxTQUFTLE9BQU8sTUFBTSxFQUFFLEtBQUssSUFBSTtBQUNyQyxtQkFBSyxNQUFNLFlBQVksWUFBWTtBQUVuQyxrQkFBSSxXQUFXLFFBQVc7QUFDeEIsdUJBQU87QUFBQSxjQUNUO0FBRUEsa0JBQUksZUFBZSxJQUFJQSxNQUFLLFVBQVU7QUFDdEMsNEJBQWMsTUFBTSxZQUFZO0FBQ2hDLHFCQUFPO0FBQUEsWUFDVDtBQUFBLFlBQ0EsY0FBYztBQUFBLFVBQ2xCO0FBQUEsUUFBQztBQUFBLE1BQ0g7QUFBQTtBQUFBOzs7QUMzRkE7QUFBQTtBQU1BLFVBQUksaUJBQWlCO0FBQ3JCLFVBQUlDLFFBQU87QUFDWCxVQUFJLE9BQU87QUFDWCxVQUFJLFVBQVU7QUFDZCxVQUFJLGdCQUFnQjtBQW9DcEIsYUFBTyxVQUFVLFNBQVMsZ0JBQWdCLEtBQUssTUFBTSxRQUFRO0FBQzNELFlBQUksVUFBVSxJQUFJLElBQUksR0FDbEIsU0FBUyxXQUFZO0FBQ3JCLGdCQUFNLElBQUksTUFBTSxPQUFPLG9CQUFvQjtBQUFBLFFBQzdDO0FBRUYsWUFBSSxXQUFXLGVBQWUsT0FBTztBQUNuQyxtQkFBUztBQUVYLFlBQUksMkJBQTJCLFdBQVk7QUFhekMsY0FBSSxDQUFDLEtBQUssTUFBTSxVQUFVLEdBQUc7QUFDM0IsaUJBQUssTUFBTSxRQUFRLHdCQUF3QjtBQUFBLFVBQzdDO0FBS0EsY0FBSSxlQUFlLEtBQUssTUFBTSxVQUFVO0FBQ3hDLGVBQUssTUFBTSxZQUFZLElBQUk7QUFDM0IsY0FBSSxTQUFTLE9BQU8sTUFBTSxFQUFFLE1BQU0sTUFBTSxTQUFTO0FBQ2pELGVBQUssTUFBTSxZQUFZLFlBQVk7QUFFbkMsY0FBSSxXQUFXLFFBQVc7QUFDeEIsbUJBQU87QUFBQSxVQUNUO0FBRUEsY0FBSSxlQUFlLElBQUlBLE1BQUssVUFBVTtBQUN0Qyx3QkFBYyxNQUFNLFlBQVk7QUFDaEMsaUJBQU87QUFBQSxRQUNUO0FBRUEsdUJBQWUsMEJBQTBCLE1BQU0sS0FBSztBQUNwRCxZQUFJLElBQUksSUFBSSxRQUFRLDBCQUEwQixJQUFJO0FBQUEsTUFDcEQ7QUFBQTtBQUFBOzs7QUMzRkE7QUFBQTtBQVVBLFVBQUksaUJBQWlCO0FBQ3JCLFVBQUlDLFFBQU87QUFDWCxVQUFJLE9BQU87QUFDWCxVQUFJLFVBQVU7QUFDZCxVQUFJLGdCQUFnQjtBQU9wQixVQUFJLGtCQUFrQixPQUFPLE9BQU8sbUJBQW1CO0FBSXZELFVBQUksU0FBUyxXQUFXO0FBQUEsTUFBQztBQUN6QixVQUFJLGVBQWUsT0FBTyxvQkFBb0IsTUFBTSxFQUFFLE9BQU8sU0FBUyxNQUFNO0FBQzFFLFlBQUksV0FBVyxPQUFPLHlCQUF5QixRQUFRLElBQUk7QUFNM0QsWUFBSSxPQUFPLGFBQWE7QUFDdEIsaUJBQU87QUFFVCxlQUFPLENBQUMsU0FBUztBQUFBLE1BQ25CLENBQUM7QUFHRCxVQUFJLE9BQVEsU0FBUyxVQUFVO0FBQS9CLFVBQ0ksUUFBUSxTQUFTLFVBQVU7QUErQi9CLGFBQU8sVUFBVSxTQUFTLG1CQUFtQixLQUFLLE1BQU0sUUFBUSxrQkFBa0I7QUFDaEYsWUFBSSxPQUFPLHFCQUFxQixZQUFZO0FBQzFDLDZCQUFtQixXQUFZO0FBQUEsVUFBRTtBQUFBLFFBQ25DO0FBRUEsWUFBSSxvQkFBb0I7QUFBQSxVQUNwQjtBQUFBLFVBQ0E7QUFBQSxRQUNKO0FBR0EsWUFBSSxDQUFDLElBQUksV0FBVztBQUNsQixjQUFJLFlBQVksQ0FBQztBQUFBLFFBQ25CO0FBQ0EsWUFBSSxVQUFVLElBQUksSUFBSTtBQUV0QixlQUFPO0FBQUEsVUFBZTtBQUFBLFVBQUs7QUFBQSxVQUN6QjtBQUFBLFlBQUUsS0FBSyxTQUFTLHdCQUF3QjtBQUNwQyxnQ0FBa0IsaUJBQWlCLEtBQUssSUFBSTtBQUU1QyxrQkFBSSx5QkFBeUIsV0FBWTtBQWdCdkMsb0JBQUksQ0FBQyxLQUFLLE1BQU0sVUFBVSxHQUFHO0FBQzNCLHVCQUFLLE1BQU0sUUFBUSxzQkFBc0I7QUFBQSxnQkFDM0M7QUFFQSxvQkFBSSxTQUFTLGtCQUFrQixPQUFPLE1BQU0sTUFBTSxTQUFTO0FBQzNELG9CQUFJLFdBQVcsUUFBVztBQUN4Qix5QkFBTztBQUFBLGdCQUNUO0FBRUEsb0JBQUksZUFBZSxJQUFJQSxNQUFLLFVBQVU7QUFDdEMsOEJBQWMsTUFBTSxZQUFZO0FBQ2hDLHVCQUFPO0FBQUEsY0FDVDtBQUVBLDZCQUFlLHdCQUF3QixNQUFNLElBQUk7QUFHakQsa0JBQUksaUJBQWlCO0FBRW5CLG9CQUFJLFlBQVksT0FBTyxPQUFPLElBQUk7QUFFbEMsMEJBQVUsT0FBTztBQUNqQiwwQkFBVSxRQUFRO0FBQ2xCLHVCQUFPLGVBQWUsd0JBQXdCLFNBQVM7QUFBQSxjQUN6RCxPQUVLO0FBQ0gsb0JBQUksZ0JBQWdCLE9BQU8sb0JBQW9CLEdBQUc7QUFDbEQsOEJBQWMsUUFBUSxTQUFVLGNBQWM7QUFDNUMsc0JBQUksYUFBYSxRQUFRLFlBQVksTUFBTSxJQUFJO0FBQzdDO0FBQUEsa0JBQ0Y7QUFFQSxzQkFBSSxLQUFLLE9BQU8seUJBQXlCLEtBQUssWUFBWTtBQUMxRCx5QkFBTyxlQUFlLHdCQUF3QixjQUFjLEVBQUU7QUFBQSxnQkFDaEUsQ0FBQztBQUFBLGNBQ0g7QUFFQSw0QkFBYyxNQUFNLHNCQUFzQjtBQUMxQyxxQkFBTyxRQUFRLHNCQUFzQjtBQUFBLFlBQ3ZDO0FBQUEsWUFDQSxjQUFjO0FBQUEsVUFDbEI7QUFBQSxRQUFDO0FBQUEsTUFDSDtBQUFBO0FBQUE7OztBQ3ZKQTtBQUFBO0FBTUEsVUFBSUMsUUFBTztBQUNYLFVBQUksZ0JBQWdCO0FBbUNwQixhQUFPLFVBQVUsU0FBUyx5QkFBeUIsS0FBSyxNQUFNLFFBQVEsa0JBQWtCO0FBQ3RGLFlBQUksb0JBQW9CLElBQUksVUFBVSxJQUFJO0FBRTFDLFlBQUksb0JBQW9CLGtCQUFrQjtBQUMxQywwQkFBa0IsbUJBQW1CLFNBQVMsbUNBQW1DO0FBQy9FLGNBQUksU0FBUyxpQkFBaUIsaUJBQWlCLEVBQUUsS0FBSyxJQUFJO0FBQzFELGNBQUksV0FBVyxRQUFXO0FBQ3hCLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGNBQUksZUFBZSxJQUFJQSxNQUFLLFVBQVU7QUFDdEMsd0JBQWMsTUFBTSxZQUFZO0FBQ2hDLGlCQUFPO0FBQUEsUUFDVDtBQUVBLFlBQUksVUFBVSxrQkFBa0I7QUFDaEMsMEJBQWtCLFNBQVMsU0FBUyxvQ0FBb0M7QUFDdEUsY0FBSSxTQUFTLE9BQU8sT0FBTyxFQUFFLE1BQU0sTUFBTSxTQUFTO0FBQ2xELGNBQUksV0FBVyxRQUFXO0FBQ3hCLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGNBQUksZUFBZSxJQUFJQSxNQUFLLFVBQVU7QUFDdEMsd0JBQWMsTUFBTSxZQUFZO0FBQ2hDLGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFBQTtBQUFBOzs7QUNwRUE7QUFBQTtBQVVBLFVBQUksVUFBVTtBQWtCZCxhQUFPLFVBQVUsU0FBUyxpQkFBaUJDLElBQUcsR0FBRztBQUMvQyxlQUFPLFFBQVFBLEVBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLO0FBQUEsTUFDeEM7QUFBQTtBQUFBOzs7QUM5QkE7QUFBQTtBQW9CQSxhQUFPLFVBQVUsU0FBUyxnQ0FBZ0MsS0FBSztBQUM3RCxZQUFJLE9BQU8sT0FBTywwQkFBMEI7QUFBWSxpQkFBTyxDQUFDO0FBRWhFLGVBQU8sT0FBTyxzQkFBc0IsR0FBRyxFQUFFLE9BQU8sU0FBVSxLQUFLO0FBQzdELGlCQUFPLE9BQU8seUJBQXlCLEtBQUssR0FBRyxFQUFFO0FBQUEsUUFDbkQsQ0FBQztBQUFBLE1BQ0g7QUFBQTtBQUFBOzs7QUMxQkE7QUFBQTtBQVVBLFVBQUksa0NBQWtDO0FBZ0J0QyxhQUFPLFVBQVUsU0FBUywyQkFBMkIsS0FBSztBQUN4RCxlQUFPLE9BQU8sS0FBSyxHQUFHLEVBQUUsT0FBTyxnQ0FBZ0MsR0FBRyxDQUFDO0FBQUEsTUFDckU7QUFBQTtBQUFBOzs7QUM1QkE7QUFBQTtBQUFBO0FBUUEsVUFBSSxrQkFBa0I7QUF1QnRCLGVBQVMsbUJBQW1CLFFBQVEsV0FBVztBQUM3QyxlQUFPLHFCQUFxQixTQUFTLFdBQVc7QUFBQSxNQUNsRDtBQWtCQSxlQUFTLHNCQUFzQixRQUFRLFdBQVc7QUFDaEQsWUFBSSxxQkFBcUIsT0FBTztBQUU5QixpQkFBTyxPQUFPLGdCQUFnQixVQUFVLGVBQWUsa0JBQWtCLFVBQVU7QUFBQSxRQUNyRixXQUFXLFVBQVUscUJBQXFCLFNBQVMsY0FBYyxPQUFPO0FBRXRFLGlCQUFPLE9BQU8sZ0JBQWdCLGFBQWEsa0JBQWtCO0FBQUEsUUFDL0Q7QUFFQSxlQUFPO0FBQUEsTUFDVDtBQWdCQSxlQUFTLGtCQUFrQixRQUFRLFlBQVk7QUFDN0MsWUFBSSxtQkFBbUIsT0FBTyxXQUFXLFdBQVcsU0FBUyxPQUFPO0FBQ3BFLFlBQUksc0JBQXNCLFFBQVE7QUFDaEMsaUJBQU8sV0FBVyxLQUFLLGdCQUFnQjtBQUFBLFFBQ3pDLFdBQVcsT0FBTyxlQUFlLFVBQVU7QUFDekMsaUJBQU8saUJBQWlCLFFBQVEsVUFBVSxNQUFNO0FBQUEsUUFDbEQ7QUFFQSxlQUFPO0FBQUEsTUFDVDtBQWFBLGVBQVMsbUJBQW1CLFdBQVc7QUFDckMsWUFBSSxrQkFBa0I7QUFDdEIsWUFBSSxxQkFBcUIsT0FBTztBQUM5Qiw0QkFBa0IsZ0JBQWdCLFVBQVUsV0FBVztBQUFBLFFBQ3pELFdBQVcsT0FBTyxjQUFjLFlBQVk7QUFJMUMsNEJBQWtCLGdCQUFnQixTQUFTO0FBQzNDLGNBQUksb0JBQW9CLElBQUk7QUFDMUIsZ0JBQUkscUJBQXFCLGdCQUFnQixJQUFJLFVBQVUsQ0FBQztBQUN4RCw4QkFBa0Isc0JBQXNCO0FBQUEsVUFDMUM7QUFBQSxRQUNGO0FBRUEsZUFBTztBQUFBLE1BQ1Q7QUFlQSxlQUFTLFdBQVcsV0FBVztBQUM3QixZQUFJLE1BQU07QUFDVixZQUFJLGFBQWEsVUFBVSxTQUFTO0FBQ2xDLGdCQUFNLFVBQVU7QUFBQSxRQUNsQixXQUFXLE9BQU8sY0FBYyxVQUFVO0FBQ3hDLGdCQUFNO0FBQUEsUUFDUjtBQUVBLGVBQU87QUFBQSxNQUNUO0FBRUEsYUFBTyxVQUFVO0FBQUEsUUFDZjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUE7QUFBQTs7O0FDbkpBO0FBQUE7QUFrQkEsZUFBU0MsT0FBTSxPQUFPO0FBR3BCLGVBQU8sVUFBVTtBQUFBLE1BQ25CO0FBR0EsYUFBTyxVQUFVLE9BQU8sU0FBU0E7QUFBQTtBQUFBOzs7QUN6QmpDO0FBQUE7QUFBQSxVQUFJLE9BQU87QUFFWCxVQUFJLE9BQU87QUFFWCxlQUFTLGFBQWEsS0FBSztBQUN6QixZQUFJLGFBQWEsS0FBSyxHQUFHO0FBQ3pCLFlBQUksY0FBYyxDQUFDLFNBQVMsVUFBVSxVQUFVO0FBRWhELGVBQU8sWUFBWSxRQUFRLFVBQVUsTUFBTTtBQUFBLE1BQzdDO0FBa0JBLGFBQU8sVUFBVSxTQUFTQyxhQUFZLEtBQUssTUFBTTtBQUMvQyxZQUFJLFdBQVcsS0FBSyxLQUFLLFVBQVU7QUFDbkMsWUFBSSxTQUFTLEtBQUssS0FBSyxRQUFRO0FBQy9CLFlBQUksV0FBVyxLQUFLLENBQUM7QUFDckIsWUFBSSxNQUFNLFNBQVMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDO0FBRW5DLFlBQUksVUFBVTtBQUNaLGlCQUFPO0FBQUEsUUFDVDtBQUVBLFlBQUksT0FBTyxRQUFRO0FBQVksZ0JBQU0sSUFBSTtBQUV6QyxjQUFNLE9BQU87QUFDYixZQUFJLENBQUMsS0FBSztBQUNSLGlCQUFPO0FBQUEsUUFDVDtBQUVBLFlBQUksV0FBVyxLQUFLLEdBQUcsR0FBRztBQUN4QixpQkFBTztBQUFBLFFBQ1Q7QUFFQSxZQUFJQyxZQUFXLGFBQWEsUUFBUTtBQUNwQyxZQUFJLFVBQVUsS0FBSyxHQUFHLEdBQUc7QUFDdkIsaUJBQU9BLFlBQVcsdUJBQXVCO0FBQUEsUUFDM0M7QUFFQSxlQUFPQSxZQUFXLG9CQUFvQjtBQUFBLE1BQ3hDO0FBQUE7QUFBQTs7O0FDdERBO0FBQUE7QUFVQSxVQUFJLFVBQVU7QUFNZCxjQUFRLE9BQU87QUFNZixjQUFRLE9BQU87QUFLZixjQUFRLGNBQWM7QUFNdEIsY0FBUSxhQUFhO0FBTXJCLGNBQVEsWUFBWTtBQU1wQixjQUFRLFVBQVU7QUFNbEIsY0FBUSxhQUFhO0FBTXJCLGNBQVEsT0FBTztBQU1mLGNBQVEsZ0JBQWdCO0FBTXhCLGNBQVEsTUFBTTtBQU1kLGNBQVEsY0FBYyxRQUFRO0FBTTlCLGNBQVEsY0FBYyxRQUFRO0FBTTlCLGNBQVEsVUFBVTtBQU1sQixjQUFRLGNBQWM7QUFNdEIsY0FBUSxZQUFZO0FBTXBCLGNBQVEsb0JBQW9CO0FBTTVCLGNBQVEsa0JBQWtCO0FBTTFCLGNBQVEscUJBQXFCO0FBTTdCLGNBQVEsMkJBQTJCO0FBTW5DLGNBQVEsbUJBQW1CO0FBTTNCLGNBQVEsa0NBQWtDO0FBTTFDLGNBQVEsNkJBQTZCO0FBTXJDLGNBQVEsYUFBYTtBQU1yQixjQUFRLFVBQVU7QUFNbEIsY0FBUSxpQkFBaUI7QUFNekIsY0FBUSxpQkFBaUI7QUFNekIsY0FBUSxRQUFRO0FBTWhCLGNBQVEsY0FBYztBQUFBO0FBQUE7OztBQ2pMdEI7QUFBQTtBQU9BLFVBQUlDLFVBQVM7QUFFYixhQUFPLFVBQVUsU0FBVSxPQUFPQyxPQUFNO0FBS3RDLFlBQUlDLGtCQUFpQixNQUFNLGdCQUN2QixPQUFPRCxNQUFLO0FBTWhCLGNBQU0sWUFBWUU7QUF3Q2xCLGlCQUFTQSxXQUFXLEtBQUssS0FBSyxNQUFNLFVBQVU7QUFDNUMsZUFBSyxNQUFNLFFBQVEsUUFBUUEsVUFBUztBQUNwQyxlQUFLLE1BQU0sWUFBWSxRQUFRO0FBQy9CLGVBQUssTUFBTSxVQUFVLEdBQUc7QUFDeEIsZUFBSyxNQUFNLFdBQVcsR0FBRztBQUV6QixpQkFBT0YsTUFBSyxRQUFRLElBQUk7QUFBQSxRQUMxQjtBQUVBLGVBQU8sZUFBZUUsWUFBVyxnQkFBZ0I7QUFBQSxVQUMvQyxLQUFLLFdBQVc7QUFDZCxvQkFBUSxLQUFLLDZFQUE2RTtBQUMxRixtQkFBT0gsUUFBTztBQUFBLFVBQ2hCO0FBQUEsVUFDQSxLQUFLLFNBQVMsT0FBTztBQUNuQixvQkFBUSxLQUFLLDZFQUE2RTtBQUMxRixZQUFBQSxRQUFPLGVBQWU7QUFBQSxVQUN4QjtBQUFBLFFBQ0YsQ0FBQztBQUVELGVBQU8sZUFBZUcsWUFBVyxZQUFZO0FBQUEsVUFDM0MsS0FBSyxXQUFXO0FBQ2Qsb0JBQVEsS0FBSyxxRUFBcUU7QUFDbEYsbUJBQU9ILFFBQU87QUFBQSxVQUNoQjtBQUFBLFVBQ0EsS0FBSyxTQUFTLE9BQU87QUFDbkIsb0JBQVEsS0FBSyxxRUFBcUU7QUFDbEYsWUFBQUEsUUFBTyxXQUFXO0FBQUEsVUFDcEI7QUFBQSxRQUNGLENBQUM7QUFFRCxRQUFBRyxXQUFVLGNBQWMsU0FBVSxNQUFNQyxLQUFJO0FBQzFDLFVBQUFILE1BQUssWUFBWSxLQUFLLFdBQVcsTUFBTUcsR0FBRTtBQUFBLFFBQzNDO0FBRUEsUUFBQUQsV0FBVSxZQUFZLFNBQVUsTUFBTUMsS0FBSTtBQUN4QyxVQUFBSCxNQUFLLFVBQVUsS0FBSyxXQUFXLE1BQU1HLEdBQUU7QUFBQSxRQUN6QztBQUVBLFFBQUFELFdBQVUscUJBQXFCLFNBQVUsTUFBTUMsS0FBSSxrQkFBa0I7QUFDbkUsVUFBQUgsTUFBSyxtQkFBbUIsS0FBSyxXQUFXLE1BQU1HLEtBQUksZ0JBQWdCO0FBQUEsUUFDcEU7QUFFQSxRQUFBRCxXQUFVLG9CQUFvQixTQUFVLE1BQU1DLEtBQUk7QUFDaEQsVUFBQUgsTUFBSyxrQkFBa0IsS0FBSyxXQUFXLE1BQU1HLEdBQUU7QUFBQSxRQUNqRDtBQUVBLFFBQUFELFdBQVUsa0JBQWtCLFNBQVUsTUFBTUMsS0FBSTtBQUM5QyxVQUFBSCxNQUFLLGdCQUFnQixLQUFLLFdBQVcsTUFBTUcsR0FBRTtBQUFBLFFBQy9DO0FBRUEsUUFBQUQsV0FBVSwyQkFBMkIsU0FBVSxNQUFNQyxLQUFJLGtCQUFrQjtBQUN6RSxVQUFBSCxNQUFLLHlCQUF5QixLQUFLLFdBQVcsTUFBTUcsS0FBSSxnQkFBZ0I7QUFBQSxRQUMxRTtBQWlCQSxRQUFBRCxXQUFVLFVBQVUsU0FBUyxTQUFVLE1BQU0sS0FBSyxXQUFXLFVBQVUsU0FBUyxVQUFVO0FBQ3hGLGNBQUksS0FBS0YsTUFBSyxLQUFLLE1BQU0sU0FBUztBQUNsQyxjQUFJLFVBQVU7QUFBVSx1QkFBVztBQUNuQyxjQUFJLFdBQWMsWUFBWSxXQUFjO0FBQVMsdUJBQVc7QUFDaEUsY0FBSSxTQUFTRCxRQUFPO0FBQVUsdUJBQVc7QUFFekMsY0FBSSxDQUFDLElBQUk7QUFDUCxrQkFBTUMsTUFBSyxXQUFXLE1BQU0sU0FBUztBQUNyQyxnQkFBSSxTQUFTQSxNQUFLLFVBQVUsTUFBTSxTQUFTO0FBQzNDLGdCQUFJLGlDQUFpQztBQUFBLGNBQ2pDO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxZQUNKO0FBRUEsZ0JBQUksV0FBV0EsTUFBSyxZQUFZLE1BQU0sU0FBUztBQUMvQyxnQkFBSSxVQUFVO0FBQ1osNkNBQStCLFdBQVc7QUFBQSxZQUM1QztBQUVBLGtCQUFNLElBQUlDO0FBQUEsY0FDUjtBQUFBLGNBQ0E7QUFBQSxjQUNDRixRQUFPLGVBQWdCLEtBQUssU0FBUyxLQUFLLE1BQU0sTUFBTTtBQUFBLFlBQUM7QUFBQSxVQUM1RDtBQUFBLFFBQ0Y7QUFVQSxlQUFPO0FBQUEsVUFBZUcsV0FBVTtBQUFBLFVBQVc7QUFBQSxVQUN6QztBQUFBLFlBQUUsS0FBSyxXQUFZO0FBQ2YscUJBQU8sS0FBSyxNQUFNLFFBQVE7QUFBQSxZQUM1QjtBQUFBLFlBQ0EsS0FBSyxTQUFVLEtBQUs7QUFDbEIsbUJBQUssTUFBTSxVQUFVLEdBQUc7QUFBQSxZQUMxQjtBQUFBLFVBQ0o7QUFBQSxRQUFDO0FBQUEsTUFDSDtBQUFBO0FBQUE7OztBQzlLQTtBQUFBO0FBT0EsYUFBTyxVQUFVLFNBQVVFLE9BQU0sR0FBRztBQUNsQyxZQUFJQyxhQUFZRCxNQUFLLFdBQ2pCRSxrQkFBaUJGLE1BQUssZ0JBQ3RCLE9BQU8sRUFBRTtBQWlDYjtBQUFBLFVBQUU7QUFBQSxVQUFNO0FBQUEsVUFBTTtBQUFBLFVBQVE7QUFBQSxVQUNwQjtBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBUTtBQUFBLFVBQ3RCO0FBQUEsVUFBUTtBQUFBLFVBQVM7QUFBQSxVQUFNO0FBQUEsVUFDdkI7QUFBQSxVQUFRO0FBQUEsVUFBTztBQUFBLFVBQVE7QUFBQSxVQUFTO0FBQUEsUUFBTyxFQUFFLFFBQVEsU0FBVSxPQUFPO0FBQ2xFLFVBQUFDLFdBQVUsWUFBWSxLQUFLO0FBQUEsUUFDN0IsQ0FBQztBQXlCRCxRQUFBQSxXQUFVLFlBQVksT0FBTyxXQUFZO0FBQ3ZDLGVBQUssTUFBTSxVQUFVLElBQUk7QUFBQSxRQUMzQixDQUFDO0FBdUNELFFBQUFBLFdBQVUsWUFBWSxRQUFRLFdBQVk7QUFDeEMsZUFBSyxNQUFNLFFBQVEsSUFBSTtBQUFBLFFBQ3pCLENBQUM7QUF3QkQsUUFBQUEsV0FBVSxZQUFZLFVBQVUsV0FBWTtBQUMxQyxlQUFLLE1BQU0sVUFBVSxJQUFJO0FBQUEsUUFDM0IsQ0FBQztBQXdCRCxRQUFBQSxXQUFVLFlBQVksT0FBTyxXQUFZO0FBQ3ZDLGVBQUssTUFBTSxPQUFPLElBQUk7QUFBQSxRQUN4QixDQUFDO0FBc0JELFFBQUFBLFdBQVUsWUFBWSxXQUFXLFdBQVk7QUFDM0MsZUFBSyxNQUFNLFdBQVcsSUFBSTtBQUFBLFFBQzVCLENBQUM7QUFrQkQsUUFBQUEsV0FBVSxZQUFZLE9BQU8sV0FBWTtBQUN2QyxlQUFLLE1BQU0sT0FBTyxJQUFJO0FBQ3RCLGVBQUssTUFBTSxPQUFPLEtBQUs7QUFBQSxRQUN6QixDQUFDO0FBc0JELFFBQUFBLFdBQVUsWUFBWSxPQUFPLFdBQVk7QUFDdkMsZUFBSyxNQUFNLE9BQU8sSUFBSTtBQUN0QixlQUFLLE1BQU0sT0FBTyxLQUFLO0FBQUEsUUFDekIsQ0FBQztBQThERCxpQkFBUyxHQUFJLE1BQU0sS0FBSztBQUN0QixjQUFJO0FBQUssaUJBQUssTUFBTSxXQUFXLEdBQUc7QUFDbEMsaUJBQU8sS0FBSyxZQUFZO0FBQ3hCLGNBQUksTUFBTSxLQUFLLE1BQU0sUUFBUSxHQUN6QixVQUFVLENBQUMsQ0FBRSxLQUFLLEtBQUssS0FBSyxLQUFLLEdBQUksRUFBRSxRQUFRLEtBQUssT0FBTyxDQUFDLENBQUMsSUFBSSxRQUFRO0FBRTdFLGVBQUs7QUFBQSxZQUNELFNBQVMsRUFBRSxLQUFLLEdBQUcsRUFBRSxZQUFZO0FBQUEsWUFDakMsNEJBQTRCLFVBQVU7QUFBQSxZQUN0QyxnQ0FBZ0MsVUFBVTtBQUFBLFVBQzlDO0FBQUEsUUFDRjtBQUVBLFFBQUFBLFdBQVUsbUJBQW1CLE1BQU0sRUFBRTtBQUNyQyxRQUFBQSxXQUFVLG1CQUFtQixLQUFLLEVBQUU7QUFxSnBDLGlCQUFTLGNBQWNFLElBQUcsR0FBRztBQUMzQixpQkFBUSxFQUFFLE1BQU1BLEVBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFNQSxPQUFNO0FBQUEsUUFDN0M7QUFFQSxpQkFBUywwQkFBMkI7QUFDbEMsZUFBSyxNQUFNLFlBQVksSUFBSTtBQUFBLFFBQzdCO0FBRUEsaUJBQVMsUUFBUyxLQUFLLEtBQUs7QUFDMUIsY0FBSTtBQUFLLGlCQUFLLE1BQU0sV0FBVyxHQUFHO0FBRWxDLGNBQUksTUFBTSxLQUFLLE1BQU0sUUFBUSxHQUN6QixVQUFVLEVBQUUsS0FBSyxHQUFHLEVBQUUsWUFBWSxHQUNsQyxVQUFVLEtBQUssTUFBTSxTQUFTLEdBQzlCLFNBQVMsS0FBSyxNQUFNLFFBQVEsR0FDNUIsT0FBTyxLQUFLLE1BQU0sTUFBTSxHQUN4QixTQUFTLEtBQUssTUFBTSxNQUFNLEdBQzFCLGFBQWEsU0FBUyxVQUFVO0FBRXBDLG9CQUFVLFVBQVUsVUFBVSxPQUFPO0FBRXJDLGNBQUksV0FBVztBQUVmLGtCQUFRLFNBQVM7QUFBQSxZQUNmLEtBQUs7QUFDSCx5QkFBVyxJQUFJLFFBQVEsR0FBRyxNQUFNO0FBQ2hDO0FBQUEsWUFFRixLQUFLO0FBQ0gsa0JBQUksUUFBUTtBQUNWLHNCQUFNLElBQUlEO0FBQUEsa0JBQ1IsVUFBVTtBQUFBLGtCQUNWO0FBQUEsa0JBQ0E7QUFBQSxnQkFDRjtBQUFBLGNBQ0Y7QUFFQSx5QkFBVyxJQUFJLElBQUksR0FBRztBQUN0QjtBQUFBLFlBRUYsS0FBSztBQUNILGtCQUFJLFFBQVEsU0FBUyxFQUFFLE1BQU07QUFDN0Isa0JBQUksUUFBUSxTQUFVLE1BQU07QUFDMUIsMkJBQVcsWUFBWSxNQUFNLE1BQU0sR0FBRztBQUFBLGNBQ3hDLENBQUM7QUFDRDtBQUFBLFlBRUYsS0FBSztBQUNILGtCQUFJLFFBQVE7QUFDVixvQkFBSSxRQUFRLFNBQVUsTUFBTTtBQUMxQiw2QkFBVyxZQUFZLEVBQUUsSUFBSSxNQUFNLEdBQUc7QUFBQSxnQkFDeEMsQ0FBQztBQUFBLGNBQ0gsT0FBTztBQUNMLDJCQUFXLElBQUksSUFBSSxHQUFHO0FBQUEsY0FDeEI7QUFDQTtBQUFBLFlBRUYsS0FBSztBQUNILGtCQUFJLFFBQVE7QUFDViwyQkFBVyxJQUFJLEtBQUssU0FBVSxNQUFNO0FBQ2xDLHlCQUFPLEVBQUUsSUFBSSxNQUFNLEdBQUc7QUFBQSxnQkFDeEIsQ0FBQztBQUFBLGNBQ0gsT0FBTztBQUNMLDJCQUFXLElBQUksUUFBUSxHQUFHLE1BQU07QUFBQSxjQUNsQztBQUNBO0FBQUEsWUFFRjtBQUlFLGtCQUFJLFFBQVEsT0FBTyxHQUFHLEdBQUc7QUFDdkIsc0JBQU0sSUFBSUE7QUFBQSxrQkFDUixVQUFVLHlDQUNSLFVBQVUsVUFDVixFQUFFLEtBQUssR0FBRyxFQUFFLFlBQVksSUFBSSx5SEFJNUIsRUFBRSxLQUFLLEdBQUcsRUFBRSxZQUFZO0FBQUEsa0JBQzFCO0FBQUEsa0JBQ0E7QUFBQSxnQkFDRjtBQUFBLGNBQ0Y7QUFFQSxrQkFBSSxRQUFRLE9BQU8sS0FBSyxHQUFHLEdBQ3ZCLFdBQVcsTUFDWCxVQUFVO0FBRWQsb0JBQU0sUUFBUSxTQUFVLE1BQU07QUFDNUIsb0JBQUksZ0JBQWdCLElBQUlELFdBQVUsR0FBRztBQUNyQyxrQkFBRSxjQUFjLE1BQU0sZUFBZSxJQUFJO0FBQ3pDLHFCQUFLLGVBQWUsWUFBWSxJQUFJO0FBRXBDLG9CQUFJLENBQUMsVUFBVSxNQUFNLFdBQVcsR0FBRztBQUNqQyxnQ0FBYyxTQUFTLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDdEM7QUFBQSxnQkFDRjtBQUVBLG9CQUFJO0FBQ0YsZ0NBQWMsU0FBUyxNQUFNLElBQUksSUFBSSxDQUFDO0FBQUEsZ0JBQ3hDLFNBQVMsS0FBSztBQUNaLHNCQUFJLENBQUMsRUFBRSxXQUFXLHNCQUFzQixLQUFLQyxlQUFjLEdBQUc7QUFDNUQsMEJBQU07QUFBQSxrQkFDUjtBQUNBLHNCQUFJLGFBQWE7QUFBTSwrQkFBVztBQUNsQztBQUFBLGdCQUNGO0FBQUEsY0FDRixHQUFHLElBQUk7QUFNUCxrQkFBSSxVQUFVLE1BQU0sU0FBUyxLQUFLLFlBQVksTUFBTSxRQUFRO0FBQzFELHNCQUFNO0FBQUEsY0FDUjtBQUNBO0FBQUEsVUFDSjtBQUdBLGVBQUs7QUFBQSxZQUNIO0FBQUEsWUFDRSx5QkFBeUIsYUFBYSxhQUFhLEVBQUUsUUFBUSxHQUFHO0FBQUEsWUFDaEUsNkJBQTZCLGFBQWEsYUFBYSxFQUFFLFFBQVEsR0FBRztBQUFBLFVBQUM7QUFBQSxRQUMzRTtBQUVBLFFBQUFELFdBQVUsbUJBQW1CLFdBQVcsU0FBUyx1QkFBdUI7QUFDeEUsUUFBQUEsV0FBVSxtQkFBbUIsV0FBVyxTQUFTLHVCQUF1QjtBQUN4RSxRQUFBQSxXQUFVLG1CQUFtQixZQUFZLFNBQVMsdUJBQXVCO0FBQ3pFLFFBQUFBLFdBQVUsbUJBQW1CLFlBQVksU0FBUyx1QkFBdUI7QUFzQ3pFLFFBQUFBLFdBQVUsWUFBWSxNQUFNLFdBQVk7QUFDdEMsZUFBSztBQUFBLFlBQ0QsS0FBSyxNQUFNLFFBQVE7QUFBQSxZQUNuQjtBQUFBLFlBQ0E7QUFBQSxVQUE4QjtBQUFBLFFBQ3BDLENBQUM7QUE0QkQsUUFBQUEsV0FBVSxZQUFZLFFBQVEsV0FBWTtBQUN4QyxlQUFLO0FBQUEsWUFDRCxTQUFTLEtBQUssTUFBTSxRQUFRO0FBQUEsWUFDNUI7QUFBQSxZQUNBO0FBQUEsWUFDQSxLQUFLLE1BQU0sUUFBUSxJQUFJLFFBQVE7QUFBQSxVQUNuQztBQUFBLFFBQ0YsQ0FBQztBQTRCRCxRQUFBQSxXQUFVLFlBQVksU0FBUyxXQUFZO0FBQ3pDLGVBQUs7QUFBQSxZQUNELFVBQVUsS0FBSyxNQUFNLFFBQVE7QUFBQSxZQUM3QjtBQUFBLFlBQ0E7QUFBQSxZQUNBLEtBQUssTUFBTSxRQUFRLElBQUksT0FBTztBQUFBLFVBQ2xDO0FBQUEsUUFDRixDQUFDO0FBeUJELFFBQUFBLFdBQVUsWUFBWSxRQUFRLFdBQVk7QUFDeEMsZUFBSztBQUFBLFlBQ0QsU0FBUyxLQUFLLE1BQU0sUUFBUTtBQUFBLFlBQzVCO0FBQUEsWUFDQTtBQUFBLFVBQ0o7QUFBQSxRQUNGLENBQUM7QUF5QkQsUUFBQUEsV0FBVSxZQUFZLGFBQWEsV0FBWTtBQUM3QyxlQUFLO0FBQUEsWUFDRCxXQUFjLEtBQUssTUFBTSxRQUFRO0FBQUEsWUFDakM7QUFBQSxZQUNBO0FBQUEsVUFDSjtBQUFBLFFBQ0YsQ0FBQztBQXlCRCxRQUFBQSxXQUFVLFlBQVksT0FBTyxXQUFZO0FBQ3ZDLGVBQUs7QUFBQSxZQUNELEVBQUUsTUFBTSxLQUFLLE1BQU0sUUFBUSxDQUFDO0FBQUEsWUFDMUI7QUFBQSxZQUNBO0FBQUEsVUFDTjtBQUFBLFFBQ0YsQ0FBQztBQW1DRCxpQkFBUyxjQUFlO0FBQ3RCLGNBQUksTUFBTSxLQUFLLE1BQU0sUUFBUTtBQUM3QixlQUFLO0FBQUEsWUFDRCxRQUFRLFFBQVEsUUFBUTtBQUFBLFlBQ3hCO0FBQUEsWUFDQTtBQUFBLFVBQ0o7QUFBQSxRQUNGO0FBRUEsUUFBQUEsV0FBVSxZQUFZLFNBQVMsV0FBVztBQUMxQyxRQUFBQSxXQUFVLFlBQVksVUFBVSxXQUFXO0FBbUQzQyxRQUFBQSxXQUFVLFlBQVksU0FBUyxXQUFZO0FBQ3pDLGNBQUksTUFBTSxLQUFLLE1BQU0sUUFBUSxHQUN6QixPQUFPLEtBQUssTUFBTSxNQUFNLEdBQ3hCLFVBQVUsS0FBSyxNQUFNLFNBQVMsR0FDOUI7QUFFSixvQkFBVSxVQUFVLFVBQVUsT0FBTztBQUVyQyxrQkFBUSxFQUFFLEtBQUssR0FBRyxFQUFFLFlBQVksR0FBRztBQUFBLFlBQ2pDLEtBQUs7QUFBQSxZQUNMLEtBQUs7QUFDSCwyQkFBYSxJQUFJO0FBQ2pCO0FBQUEsWUFDRixLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQ0gsMkJBQWEsSUFBSTtBQUNqQjtBQUFBLFlBQ0YsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUNILG9CQUFNLElBQUlDO0FBQUEsZ0JBQ1IsVUFBVTtBQUFBLGdCQUNWO0FBQUEsZ0JBQ0E7QUFBQSxjQUNGO0FBQUEsWUFDRixLQUFLO0FBQ0gsa0JBQUksTUFBTSxVQUFVLGtDQUFrQyxFQUFFLFFBQVEsR0FBRztBQUNuRSxvQkFBTSxJQUFJQSxnQkFBZSxJQUFJLEtBQUssR0FBRyxRQUFXLElBQUk7QUFBQSxZQUN0RDtBQUNFLGtCQUFJLFFBQVEsT0FBTyxHQUFHLEdBQUc7QUFDdkIsc0JBQU0sSUFBSUE7QUFBQSxrQkFDUixVQUFVLDRDQUE0QyxFQUFFLFFBQVEsR0FBRztBQUFBLGtCQUNuRTtBQUFBLGtCQUNBO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNGO0FBQ0EsMkJBQWEsT0FBTyxLQUFLLEdBQUcsRUFBRTtBQUFBLFVBQ2xDO0FBRUEsZUFBSztBQUFBLFlBQ0QsTUFBTTtBQUFBLFlBQ047QUFBQSxZQUNBO0FBQUEsVUFDSjtBQUFBLFFBQ0YsQ0FBQztBQWdDRCxpQkFBUyxpQkFBa0I7QUFDekIsY0FBSSxNQUFNLEtBQUssTUFBTSxRQUFRLEdBQ3pCLE9BQU8sRUFBRSxLQUFLLEdBQUc7QUFDckIsZUFBSztBQUFBLFlBQ0QsZ0JBQWdCO0FBQUEsWUFDaEIsOENBQThDO0FBQUEsWUFDOUM7QUFBQSxVQUNKO0FBQUEsUUFDRjtBQUVBLFFBQUFELFdBQVUsWUFBWSxhQUFhLGNBQWM7QUFDakQsUUFBQUEsV0FBVSxZQUFZLGFBQWEsY0FBYztBQStDakQsaUJBQVMsWUFBYSxLQUFLLEtBQUs7QUFDOUIsY0FBSTtBQUFLLGlCQUFLLE1BQU0sV0FBVyxHQUFHO0FBQ2xDLGNBQUksTUFBTSxLQUFLLE1BQU0sUUFBUTtBQUM3QixjQUFJLEtBQUssTUFBTSxNQUFNLEdBQUc7QUFDdEIsZ0JBQUksZUFBZSxLQUFLLE1BQU0sVUFBVTtBQUN4QyxpQkFBSyxNQUFNLFlBQVksSUFBSTtBQUMzQixpQkFBSyxJQUFJLEdBQUc7QUFDWixpQkFBSyxNQUFNLFlBQVksWUFBWTtBQUFBLFVBQ3JDLE9BQU87QUFDTCxpQkFBSztBQUFBLGNBQ0QsUUFBUTtBQUFBLGNBQ1I7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0EsS0FBSztBQUFBLGNBQ0w7QUFBQSxZQUNKO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFFQSxRQUFBQSxXQUFVLFVBQVUsU0FBUyxXQUFXO0FBQ3hDLFFBQUFBLFdBQVUsVUFBVSxVQUFVLFdBQVc7QUFDekMsUUFBQUEsV0FBVSxVQUFVLE1BQU0sV0FBVztBQTJDckMsaUJBQVMsVUFBVSxLQUFLLEtBQUs7QUFDM0IsY0FBSTtBQUFLLGlCQUFLLE1BQU0sV0FBVyxHQUFHO0FBQ2xDLGVBQUs7QUFBQSxZQUNELEVBQUUsSUFBSSxLQUFLLEtBQUssTUFBTSxRQUFRLENBQUM7QUFBQSxZQUMvQjtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQSxLQUFLO0FBQUEsWUFDTDtBQUFBLFVBQ0o7QUFBQSxRQUNGO0FBRUEsUUFBQUEsV0FBVSxVQUFVLE9BQU8sU0FBUztBQUNwQyxRQUFBQSxXQUFVLFVBQVUsUUFBUSxTQUFTO0FBNkNyQyxpQkFBUyxZQUFhLEdBQUcsS0FBSztBQUM1QixjQUFJO0FBQUssaUJBQUssTUFBTSxXQUFXLEdBQUc7QUFDbEMsY0FBSSxNQUFNLEtBQUssTUFBTSxRQUFRLEdBQ3pCLFdBQVcsS0FBSyxNQUFNLFVBQVUsR0FDaEMsVUFBVSxLQUFLLE1BQU0sU0FBUyxHQUM5QixZQUFjLFVBQVcsVUFBVSxPQUFPLElBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0sR0FDeEIsVUFBVSxFQUFFLEtBQUssR0FBRyxFQUFFLFlBQVksR0FDbEMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLFlBQVksR0FDOUIsY0FDQSxjQUFjO0FBRWxCLGNBQUksWUFBWSxZQUFZLFNBQVMsWUFBWSxPQUFPO0FBQ3RELGdCQUFJQSxXQUFVLEtBQUssU0FBUyxNQUFNLElBQUksRUFBRSxHQUFHLEtBQUssU0FBUyxRQUFRO0FBQUEsVUFDbkU7QUFFQSxjQUFJLENBQUMsYUFBYSxZQUFZLFVBQVUsVUFBVSxTQUFTO0FBQ3pELDJCQUFlLFlBQVk7QUFBQSxVQUM3QixXQUFXLFVBQVUsYUFBYSxZQUFZLFlBQVksV0FBVztBQUNuRSwyQkFBZSxZQUFZO0FBQUEsVUFDN0IsV0FBVyxDQUFDLGFBQWEsWUFBWSxVQUFVLFlBQVksV0FBVztBQUNwRSxnQkFBSSxXQUFZLFlBQVksV0FBWSxNQUFNLE1BQU0sTUFBTTtBQUMxRCwyQkFBZSxZQUFZLGNBQWMsV0FBVztBQUFBLFVBQ3RELE9BQU87QUFDTCwwQkFBYztBQUFBLFVBQ2hCO0FBRUEsY0FBSSxhQUFhO0FBQ2Ysa0JBQU0sSUFBSUMsZ0JBQWUsY0FBYyxRQUFXLElBQUk7QUFBQSxVQUN4RDtBQUVBLGNBQUksVUFBVTtBQUNaLGdCQUFJLGFBQWEsVUFDYjtBQUNKLGdCQUFJLFlBQVksU0FBUyxZQUFZLE9BQU87QUFDMUMsMkJBQWE7QUFDYiwyQkFBYSxJQUFJO0FBQUEsWUFDbkIsT0FBTztBQUNMLDJCQUFhLElBQUk7QUFBQSxZQUNuQjtBQUNBLGlCQUFLO0FBQUEsY0FDRCxhQUFhO0FBQUEsY0FDYixnQ0FBZ0MsYUFBYTtBQUFBLGNBQzdDLG9DQUFvQyxhQUFhO0FBQUEsY0FDakQ7QUFBQSxjQUNBO0FBQUEsWUFDSjtBQUFBLFVBQ0YsT0FBTztBQUNMLGlCQUFLO0FBQUEsY0FDRCxNQUFNO0FBQUEsY0FDTjtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsWUFDSjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBRUEsUUFBQUQsV0FBVSxVQUFVLFNBQVMsV0FBVztBQUN4QyxRQUFBQSxXQUFVLFVBQVUsTUFBTSxXQUFXO0FBQ3JDLFFBQUFBLFdBQVUsVUFBVSxlQUFlLFdBQVc7QUE4QzlDLGlCQUFTLFlBQWEsR0FBRyxLQUFLO0FBQzVCLGNBQUk7QUFBSyxpQkFBSyxNQUFNLFdBQVcsR0FBRztBQUNsQyxjQUFJLE1BQU0sS0FBSyxNQUFNLFFBQVEsR0FDekIsV0FBVyxLQUFLLE1BQU0sVUFBVSxHQUNoQyxVQUFVLEtBQUssTUFBTSxTQUFTLEdBQzlCLFlBQWMsVUFBVyxVQUFVLE9BQU8sSUFDMUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxHQUN4QixVQUFVLEVBQUUsS0FBSyxHQUFHLEVBQUUsWUFBWSxHQUNsQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsWUFBWSxHQUM5QixjQUNBLGNBQWM7QUFFbEIsY0FBSSxZQUFZLFlBQVksU0FBUyxZQUFZLE9BQU87QUFDdEQsZ0JBQUlBLFdBQVUsS0FBSyxTQUFTLE1BQU0sSUFBSSxFQUFFLEdBQUcsS0FBSyxTQUFTLFFBQVE7QUFBQSxVQUNuRTtBQUVBLGNBQUksQ0FBQyxhQUFhLFlBQVksVUFBVSxVQUFVLFNBQVM7QUFDekQsMkJBQWUsWUFBWTtBQUFBLFVBQzdCLFdBQVcsVUFBVSxhQUFhLFlBQVksWUFBWSxXQUFXO0FBQ25FLDJCQUFlLFlBQVk7QUFBQSxVQUM3QixXQUFXLENBQUMsYUFBYSxZQUFZLFVBQVUsWUFBWSxXQUFXO0FBQ3BFLGdCQUFJLFdBQVksWUFBWSxXQUFZLE1BQU0sTUFBTSxNQUFNO0FBQzFELDJCQUFlLFlBQVksY0FBYyxXQUFXO0FBQUEsVUFDdEQsT0FBTztBQUNMLDBCQUFjO0FBQUEsVUFDaEI7QUFFQSxjQUFJLGFBQWE7QUFDZixrQkFBTSxJQUFJQyxnQkFBZSxjQUFjLFFBQVcsSUFBSTtBQUFBLFVBQ3hEO0FBRUEsY0FBSSxVQUFVO0FBQ1osZ0JBQUksYUFBYSxVQUNiO0FBQ0osZ0JBQUksWUFBWSxTQUFTLFlBQVksT0FBTztBQUMxQywyQkFBYTtBQUNiLDJCQUFhLElBQUk7QUFBQSxZQUNuQixPQUFPO0FBQ0wsMkJBQWEsSUFBSTtBQUFBLFlBQ25CO0FBQ0EsaUJBQUs7QUFBQSxjQUNELGNBQWM7QUFBQSxjQUNkLGdDQUFnQyxhQUFhO0FBQUEsY0FDN0MsZ0NBQWdDLGFBQWE7QUFBQSxjQUM3QztBQUFBLGNBQ0E7QUFBQSxZQUNKO0FBQUEsVUFDRixPQUFPO0FBQ0wsaUJBQUs7QUFBQSxjQUNELE9BQU87QUFBQSxjQUNQO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxZQUNKO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFFQSxRQUFBRCxXQUFVLFVBQVUsU0FBUyxXQUFXO0FBQ3hDLFFBQUFBLFdBQVUsVUFBVSxPQUFPLFdBQVc7QUFDdEMsUUFBQUEsV0FBVSxVQUFVLHNCQUFzQixXQUFXO0FBNkNyRCxpQkFBUyxZQUFhLEdBQUcsS0FBSztBQUM1QixjQUFJO0FBQUssaUJBQUssTUFBTSxXQUFXLEdBQUc7QUFDbEMsY0FBSSxNQUFNLEtBQUssTUFBTSxRQUFRLEdBQ3pCLFdBQVcsS0FBSyxNQUFNLFVBQVUsR0FDaEMsVUFBVSxLQUFLLE1BQU0sU0FBUyxHQUM5QixZQUFjLFVBQVcsVUFBVSxPQUFPLElBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0sR0FDeEIsVUFBVSxFQUFFLEtBQUssR0FBRyxFQUFFLFlBQVksR0FDbEMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLFlBQVksR0FDOUIsY0FDQSxjQUFjO0FBRWxCLGNBQUksWUFBWSxZQUFZLFNBQVMsWUFBWSxPQUFPO0FBQ3RELGdCQUFJQSxXQUFVLEtBQUssU0FBUyxNQUFNLElBQUksRUFBRSxHQUFHLEtBQUssU0FBUyxRQUFRO0FBQUEsVUFDbkU7QUFFQSxjQUFJLENBQUMsYUFBYSxZQUFZLFVBQVUsVUFBVSxTQUFTO0FBQ3pELDJCQUFlLFlBQVk7QUFBQSxVQUM3QixXQUFXLFVBQVUsYUFBYSxZQUFZLFlBQVksV0FBVztBQUNuRSwyQkFBZSxZQUFZO0FBQUEsVUFDN0IsV0FBVyxDQUFDLGFBQWEsWUFBWSxVQUFVLFlBQVksV0FBVztBQUNwRSxnQkFBSSxXQUFZLFlBQVksV0FBWSxNQUFNLE1BQU0sTUFBTTtBQUMxRCwyQkFBZSxZQUFZLGNBQWMsV0FBVztBQUFBLFVBQ3RELE9BQU87QUFDTCwwQkFBYztBQUFBLFVBQ2hCO0FBRUEsY0FBSSxhQUFhO0FBQ2Ysa0JBQU0sSUFBSUMsZ0JBQWUsY0FBYyxRQUFXLElBQUk7QUFBQSxVQUN4RDtBQUVBLGNBQUksVUFBVTtBQUNaLGdCQUFJLGFBQWEsVUFDYjtBQUNKLGdCQUFJLFlBQVksU0FBUyxZQUFZLE9BQU87QUFDMUMsMkJBQWE7QUFDYiwyQkFBYSxJQUFJO0FBQUEsWUFDbkIsT0FBTztBQUNMLDJCQUFhLElBQUk7QUFBQSxZQUNuQjtBQUNBLGlCQUFLO0FBQUEsY0FDRCxhQUFhO0FBQUEsY0FDYixnQ0FBZ0MsYUFBYTtBQUFBLGNBQzdDLG9DQUFvQyxhQUFhO0FBQUEsY0FDakQ7QUFBQSxjQUNBO0FBQUEsWUFDSjtBQUFBLFVBQ0YsT0FBTztBQUNMLGlCQUFLO0FBQUEsY0FDRCxNQUFNO0FBQUEsY0FDTjtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsWUFDSjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBRUEsUUFBQUQsV0FBVSxVQUFVLFNBQVMsV0FBVztBQUN4QyxRQUFBQSxXQUFVLFVBQVUsTUFBTSxXQUFXO0FBQ3JDLFFBQUFBLFdBQVUsVUFBVSxZQUFZLFdBQVc7QUE4QzNDLGlCQUFTLFdBQVksR0FBRyxLQUFLO0FBQzNCLGNBQUk7QUFBSyxpQkFBSyxNQUFNLFdBQVcsR0FBRztBQUNsQyxjQUFJLE1BQU0sS0FBSyxNQUFNLFFBQVEsR0FDekIsV0FBVyxLQUFLLE1BQU0sVUFBVSxHQUNoQyxVQUFVLEtBQUssTUFBTSxTQUFTLEdBQzlCLFlBQWMsVUFBVyxVQUFVLE9BQU8sSUFDMUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxHQUN4QixVQUFVLEVBQUUsS0FBSyxHQUFHLEVBQUUsWUFBWSxHQUNsQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsWUFBWSxHQUM5QixjQUNBLGNBQWM7QUFFbEIsY0FBSSxZQUFZLFlBQVksU0FBUyxZQUFZLE9BQU87QUFDdEQsZ0JBQUlBLFdBQVUsS0FBSyxTQUFTLE1BQU0sSUFBSSxFQUFFLEdBQUcsS0FBSyxTQUFTLFFBQVE7QUFBQSxVQUNuRTtBQUVBLGNBQUksQ0FBQyxhQUFhLFlBQVksVUFBVSxVQUFVLFNBQVM7QUFDekQsMkJBQWUsWUFBWTtBQUFBLFVBQzdCLFdBQVcsVUFBVSxhQUFhLFlBQVksWUFBWSxXQUFXO0FBQ25FLDJCQUFlLFlBQVk7QUFBQSxVQUM3QixXQUFXLENBQUMsYUFBYSxZQUFZLFVBQVUsWUFBWSxXQUFXO0FBQ3BFLGdCQUFJLFdBQVksWUFBWSxXQUFZLE1BQU0sTUFBTSxNQUFNO0FBQzFELDJCQUFlLFlBQVksY0FBYyxXQUFXO0FBQUEsVUFDdEQsT0FBTztBQUNMLDBCQUFjO0FBQUEsVUFDaEI7QUFFQSxjQUFJLGFBQWE7QUFDZixrQkFBTSxJQUFJQyxnQkFBZSxjQUFjLFFBQVcsSUFBSTtBQUFBLFVBQ3hEO0FBRUEsY0FBSSxVQUFVO0FBQ1osZ0JBQUksYUFBYSxVQUNiO0FBQ0osZ0JBQUksWUFBWSxTQUFTLFlBQVksT0FBTztBQUMxQywyQkFBYTtBQUNiLDJCQUFhLElBQUk7QUFBQSxZQUNuQixPQUFPO0FBQ0wsMkJBQWEsSUFBSTtBQUFBLFlBQ25CO0FBQ0EsaUJBQUs7QUFBQSxjQUNELGNBQWM7QUFBQSxjQUNkLGdDQUFnQyxhQUFhO0FBQUEsY0FDN0MsZ0NBQWdDLGFBQWE7QUFBQSxjQUM3QztBQUFBLGNBQ0E7QUFBQSxZQUNKO0FBQUEsVUFDRixPQUFPO0FBQ0wsaUJBQUs7QUFBQSxjQUNELE9BQU87QUFBQSxjQUNQO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxZQUNKO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFFQSxRQUFBRCxXQUFVLFVBQVUsUUFBUSxVQUFVO0FBQ3RDLFFBQUFBLFdBQVUsVUFBVSxPQUFPLFVBQVU7QUFDckMsUUFBQUEsV0FBVSxVQUFVLG1CQUFtQixVQUFVO0FBNkNqRCxRQUFBQSxXQUFVLFVBQVUsVUFBVSxTQUFVRyxRQUFPLFFBQVEsS0FBSztBQUMxRCxjQUFJO0FBQUssaUJBQUssTUFBTSxXQUFXLEdBQUc7QUFDbEMsY0FBSSxNQUFNLEtBQUssTUFBTSxRQUFRLEdBQ3pCLFdBQVcsS0FBSyxNQUFNLFVBQVUsR0FDaEMsVUFBVSxLQUFLLE1BQU0sU0FBUyxHQUM5QixZQUFjLFVBQVcsVUFBVSxPQUFPLElBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0sR0FDeEIsVUFBVSxFQUFFLEtBQUssR0FBRyxFQUFFLFlBQVksR0FDbEMsWUFBWSxFQUFFLEtBQUtBLE1BQUssRUFBRSxZQUFZLEdBQ3RDLGFBQWEsRUFBRSxLQUFLLE1BQU0sRUFBRSxZQUFZLEdBQ3hDLGNBQ0EsY0FBYyxNQUNkLFFBQVMsY0FBYyxVQUFVLGVBQWUsU0FDNUNBLE9BQU0sWUFBWSxJQUFJLE9BQU8sT0FBTyxZQUFZLElBQ2hEQSxTQUFRLE9BQU87QUFFdkIsY0FBSSxZQUFZLFlBQVksU0FBUyxZQUFZLE9BQU87QUFDdEQsZ0JBQUlILFdBQVUsS0FBSyxTQUFTLE1BQU0sSUFBSSxFQUFFLEdBQUcsS0FBSyxTQUFTLFFBQVE7QUFBQSxVQUNuRTtBQUVBLGNBQUksQ0FBQyxhQUFhLFlBQVksV0FBVyxjQUFjLFVBQVUsZUFBZSxVQUFVO0FBQ3hGLDJCQUFlLFlBQVk7QUFBQSxVQUM3QixZQUFZLGNBQWMsWUFBWSxlQUFlLGNBQWMsWUFBWSxZQUFZLFdBQVc7QUFDcEcsMkJBQWUsWUFBWTtBQUFBLFVBQzdCLFdBQVcsQ0FBQyxhQUFhLFlBQVksVUFBVSxZQUFZLFdBQVc7QUFDcEUsZ0JBQUksV0FBWSxZQUFZLFdBQVksTUFBTSxNQUFNLE1BQU07QUFDMUQsMkJBQWUsWUFBWSxjQUFjLFdBQVc7QUFBQSxVQUN0RCxPQUFPO0FBQ0wsMEJBQWM7QUFBQSxVQUNoQjtBQUVBLGNBQUksYUFBYTtBQUNmLGtCQUFNLElBQUlDLGdCQUFlLGNBQWMsUUFBVyxJQUFJO0FBQUEsVUFDeEQ7QUFFQSxjQUFJLFVBQVU7QUFDWixnQkFBSSxhQUFhLFVBQ2I7QUFDSixnQkFBSSxZQUFZLFNBQVMsWUFBWSxPQUFPO0FBQzFDLDJCQUFhO0FBQ2IsMkJBQWEsSUFBSTtBQUFBLFlBQ25CLE9BQU87QUFDTCwyQkFBYSxJQUFJO0FBQUEsWUFDbkI7QUFDQSxpQkFBSztBQUFBLGNBQ0QsY0FBY0UsVUFBUyxjQUFjO0FBQUEsY0FDckMsZ0NBQWdDLGFBQWEsYUFBYTtBQUFBLGNBQzFELG9DQUFvQyxhQUFhLGFBQWE7QUFBQSxZQUNsRTtBQUFBLFVBQ0YsT0FBTztBQUNMLGlCQUFLO0FBQUEsY0FDRCxPQUFPQSxVQUFTLE9BQU87QUFBQSxjQUN2QixtQ0FBbUM7QUFBQSxjQUNuQyx1Q0FBdUM7QUFBQSxZQUMzQztBQUFBLFVBQ0Y7QUFBQSxRQUNGLENBQUM7QUF5Q0QsaUJBQVMsaUJBQWtCLGFBQWEsS0FBSztBQUMzQyxjQUFJO0FBQUssaUJBQUssTUFBTSxXQUFXLEdBQUc7QUFFbEMsY0FBSSxTQUFTLEtBQUssTUFBTSxRQUFRO0FBQ2hDLGNBQUksT0FBTyxLQUFLLE1BQU0sTUFBTTtBQUM1QixjQUFJLFVBQVUsS0FBSyxNQUFNLFNBQVM7QUFFbEMsY0FBSTtBQUNGLGdCQUFJLGVBQWUsa0JBQWtCO0FBQUEsVUFDdkMsU0FBUyxLQUFLO0FBQ1osZ0JBQUksZUFBZSxXQUFXO0FBQzVCLHdCQUFVLFVBQVUsVUFBVSxPQUFPO0FBQ3JDLG9CQUFNLElBQUlGO0FBQUEsZ0JBQ1IsVUFBVSxzREFDTixFQUFFLEtBQUssV0FBVyxJQUFJO0FBQUEsZ0JBQzFCO0FBQUEsZ0JBQ0E7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUNBLGtCQUFNO0FBQUEsVUFDUjtBQUVBLGNBQUksT0FBTyxFQUFFLFFBQVEsV0FBVztBQUNoQyxjQUFJLFNBQVMsTUFBTTtBQUNqQixtQkFBTztBQUFBLFVBQ1Q7QUFFQSxlQUFLO0FBQUEsWUFDRDtBQUFBLFlBQ0EsMkNBQTJDO0FBQUEsWUFDM0MsK0NBQStDO0FBQUEsVUFDbkQ7QUFBQSxRQUNGO0FBQUM7QUFFRCxRQUFBRCxXQUFVLFVBQVUsY0FBYyxnQkFBZ0I7QUFDbEQsUUFBQUEsV0FBVSxVQUFVLGNBQWMsZ0JBQWdCO0FBa0hsRCxpQkFBUyxlQUFnQixNQUFNLEtBQUssS0FBSztBQUN2QyxjQUFJO0FBQUssaUJBQUssTUFBTSxXQUFXLEdBQUc7QUFFbEMsY0FBSSxXQUFXLEtBQUssTUFBTSxRQUFRLEdBQzlCLFFBQVEsS0FBSyxNQUFNLEtBQUssR0FDeEIsVUFBVSxLQUFLLE1BQU0sU0FBUyxHQUM5QixNQUFNLEtBQUssTUFBTSxRQUFRLEdBQ3pCLE9BQU8sS0FBSyxNQUFNLE1BQU0sR0FDeEIsV0FBVyxPQUFPO0FBRXRCLG9CQUFVLFVBQVUsVUFBVSxPQUFPO0FBRXJDLGNBQUksVUFBVTtBQUNaLGdCQUFJLGFBQWEsVUFBVTtBQUN6QixvQkFBTSxJQUFJQztBQUFBLGdCQUNSLFVBQVU7QUFBQSxnQkFDVjtBQUFBLGdCQUNBO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGLE9BQU87QUFDTCxnQkFBSSxhQUFhLFlBQVksYUFBYSxZQUFZLGFBQWEsVUFBVTtBQUMzRSxvQkFBTSxJQUFJQTtBQUFBLGdCQUNSLFVBQVU7QUFBQSxnQkFDVjtBQUFBLGdCQUNBO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsY0FBSSxZQUFZLE9BQU87QUFDckIsa0JBQU0sSUFBSUE7QUFBQSxjQUNSLFVBQVU7QUFBQSxjQUNWO0FBQUEsY0FDQTtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsY0FBSSxRQUFRLFFBQVEsUUFBUSxRQUFXO0FBQ3JDLGtCQUFNLElBQUlBO0FBQUEsY0FDUixVQUFVO0FBQUEsY0FDVjtBQUFBLGNBQ0E7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUVBLGNBQUksU0FBUyxLQUFLLE1BQU0sTUFBTSxHQUMxQixTQUFTLEtBQUssTUFBTSxRQUFRLEdBQzVCLFdBQVcsV0FBVyxFQUFFLFlBQVksS0FBSyxJQUFJLElBQUksTUFDakQsUUFBUSxXQUFXLFNBQVMsUUFBUSxJQUFJLElBQUk7QUFFaEQsY0FBSSxhQUFhO0FBQ2pCLGNBQUk7QUFBUSwwQkFBYztBQUMxQixjQUFJO0FBQU8sMEJBQWM7QUFDekIsY0FBSTtBQUFVLDBCQUFjO0FBQzVCLHdCQUFjO0FBRWQsY0FBSTtBQUNKLGNBQUk7QUFBTywwQkFBYyxPQUFPLFVBQVUsZUFBZSxLQUFLLEtBQUssSUFBSTtBQUFBLG1CQUM5RDtBQUFVLDBCQUFjLFNBQVM7QUFBQTtBQUNyQywwQkFBYyxFQUFFLFlBQVksS0FBSyxJQUFJO0FBTzFDLGNBQUksQ0FBQyxVQUFVLFVBQVUsV0FBVyxHQUFHO0FBQ3JDLGlCQUFLO0FBQUEsY0FDRDtBQUFBLGNBQ0EsOEJBQThCLGFBQWEsRUFBRSxRQUFRLElBQUk7QUFBQSxjQUN6RCxrQ0FBa0MsYUFBYSxFQUFFLFFBQVEsSUFBSTtBQUFBLFlBQUM7QUFBQSxVQUNwRTtBQUVBLGNBQUksVUFBVSxTQUFTLEdBQUc7QUFDeEIsaUJBQUs7QUFBQSxjQUNELGdCQUFnQixTQUFTLEVBQUUsSUFBSSxLQUFLLEtBQUssSUFBSSxRQUFRO0FBQUEsY0FDckQsOEJBQThCLGFBQWEsRUFBRSxRQUFRLElBQUksSUFBSTtBQUFBLGNBQzdELGtDQUFrQyxhQUFhLEVBQUUsUUFBUSxJQUFJLElBQUk7QUFBQSxjQUNqRTtBQUFBLGNBQ0E7QUFBQSxZQUNKO0FBQUEsVUFDRjtBQUVBLGVBQUssTUFBTSxVQUFVLEtBQUs7QUFBQSxRQUM1QjtBQUVBLFFBQUFELFdBQVUsVUFBVSxZQUFZLGNBQWM7QUFFOUMsaUJBQVMsa0JBQW1CLE1BQU0sT0FBTyxLQUFLO0FBQzVDLGVBQUssTUFBTSxPQUFPLElBQUk7QUFDdEIseUJBQWUsTUFBTSxNQUFNLFNBQVM7QUFBQSxRQUN0QztBQUVBLFFBQUFBLFdBQVUsVUFBVSxlQUFlLGlCQUFpQjtBQUNwRCxRQUFBQSxXQUFVLFVBQVUsbUJBQW1CLGlCQUFpQjtBQXlIeEQsaUJBQVMsNEJBQTZCLE1BQU0sWUFBWSxLQUFLO0FBQzNELGNBQUksT0FBTyxlQUFlLFVBQVU7QUFDbEMsa0JBQU07QUFDTix5QkFBYTtBQUFBLFVBQ2Y7QUFDQSxjQUFJO0FBQUssaUJBQUssTUFBTSxXQUFXLEdBQUc7QUFDbEMsY0FBSSxNQUFNLEtBQUssTUFBTSxRQUFRO0FBQzdCLGNBQUksbUJBQW1CLE9BQU8seUJBQXlCLE9BQU8sR0FBRyxHQUFHLElBQUk7QUFDeEUsY0FBSSxvQkFBb0IsWUFBWTtBQUNsQyxpQkFBSztBQUFBLGNBQ0QsRUFBRSxJQUFJLFlBQVksZ0JBQWdCO0FBQUEsY0FDbEMsOENBQThDLEVBQUUsUUFBUSxJQUFJLElBQUksMEJBQTBCLEVBQUUsUUFBUSxVQUFVLElBQUksV0FBVyxFQUFFLFFBQVEsZ0JBQWdCO0FBQUEsY0FDdkosOENBQThDLEVBQUUsUUFBUSxJQUFJLElBQUksOEJBQThCLEVBQUUsUUFBUSxVQUFVO0FBQUEsY0FDbEg7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLFlBQ0o7QUFBQSxVQUNGLE9BQU87QUFDTCxpQkFBSztBQUFBLGNBQ0Q7QUFBQSxjQUNBLDZEQUE2RCxFQUFFLFFBQVEsSUFBSTtBQUFBLGNBQzNFLGlFQUFpRSxFQUFFLFFBQVEsSUFBSTtBQUFBLFlBQ25GO0FBQUEsVUFDRjtBQUNBLGVBQUssTUFBTSxVQUFVLGdCQUFnQjtBQUFBLFFBQ3ZDO0FBRUEsUUFBQUEsV0FBVSxVQUFVLHlCQUF5QiwyQkFBMkI7QUFDeEUsUUFBQUEsV0FBVSxVQUFVLDZCQUE2QiwyQkFBMkI7QUE0RDVFLGlCQUFTLG9CQUFxQjtBQUM1QixlQUFLLE1BQU0sWUFBWSxJQUFJO0FBQUEsUUFDN0I7QUFFQSxpQkFBUyxhQUFjLEdBQUcsS0FBSztBQUM3QixjQUFJO0FBQUssaUJBQUssTUFBTSxXQUFXLEdBQUc7QUFDbEMsY0FBSSxNQUFNLEtBQUssTUFBTSxRQUFRLEdBQ3pCLFVBQVUsRUFBRSxLQUFLLEdBQUcsRUFBRSxZQUFZLEdBQ2xDLFVBQVUsS0FBSyxNQUFNLFNBQVMsR0FDOUIsT0FBTyxLQUFLLE1BQU0sTUFBTSxHQUN4QixhQUFhLFVBQ2I7QUFFSixrQkFBUSxTQUFTO0FBQUEsWUFDZixLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQ0gsMkJBQWE7QUFDYiwyQkFBYSxJQUFJO0FBQ2pCO0FBQUEsWUFDRjtBQUNFLGtCQUFJQSxXQUFVLEtBQUssU0FBUyxNQUFNLElBQUksRUFBRSxHQUFHLEtBQUssU0FBUyxRQUFRO0FBQ2pFLDJCQUFhLElBQUk7QUFBQSxVQUNyQjtBQUVBLGVBQUs7QUFBQSxZQUNELGNBQWM7QUFBQSxZQUNkLGdDQUFnQyxhQUFhO0FBQUEsWUFDN0Msb0NBQW9DLGFBQWE7QUFBQSxZQUNqRDtBQUFBLFlBQ0E7QUFBQSxVQUNKO0FBQUEsUUFDRjtBQUVBLFFBQUFBLFdBQVUsbUJBQW1CLFVBQVUsY0FBYyxpQkFBaUI7QUFDdEUsUUFBQUEsV0FBVSxtQkFBbUIsWUFBWSxjQUFjLGlCQUFpQjtBQTZCeEUsaUJBQVMsWUFBWSxJQUFJLEtBQUs7QUFDNUIsY0FBSTtBQUFLLGlCQUFLLE1BQU0sV0FBVyxHQUFHO0FBQ2xDLGNBQUksTUFBTSxLQUFLLE1BQU0sUUFBUTtBQUM3QixlQUFLO0FBQUEsWUFDRCxHQUFHLEtBQUssR0FBRztBQUFBLFlBQ1gsK0JBQStCO0FBQUEsWUFDL0IsbUNBQW1DO0FBQUEsVUFDdkM7QUFBQSxRQUNGO0FBRUEsUUFBQUEsV0FBVSxVQUFVLFNBQVMsV0FBVztBQUN4QyxRQUFBQSxXQUFVLFVBQVUsV0FBVyxXQUFXO0FBMkIxQyxRQUFBQSxXQUFVLFVBQVUsVUFBVSxTQUFVLEtBQUssS0FBSztBQUNoRCxjQUFJO0FBQUssaUJBQUssTUFBTSxXQUFXLEdBQUc7QUFDbEMsY0FBSSxNQUFNLEtBQUssTUFBTSxRQUFRLEdBQ3pCLFVBQVUsS0FBSyxNQUFNLFNBQVMsR0FDOUIsT0FBTyxLQUFLLE1BQU0sTUFBTTtBQUM1QixjQUFJQSxXQUFVLEtBQUssU0FBUyxNQUFNLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUTtBQUVyRCxlQUFLO0FBQUEsWUFDRCxDQUFDLElBQUksUUFBUSxHQUFHO0FBQUEsWUFDaEIsaUNBQWlDLEVBQUUsUUFBUSxHQUFHO0FBQUEsWUFDOUMscUNBQXFDLEVBQUUsUUFBUSxHQUFHO0FBQUEsVUFDdEQ7QUFBQSxRQUNGLENBQUM7QUEwR0QsaUJBQVMsV0FBWSxNQUFNO0FBQ3pCLGNBQUksTUFBTSxLQUFLLE1BQU0sUUFBUSxHQUN6QixVQUFVLEVBQUUsS0FBSyxHQUFHLEdBQ3BCLFdBQVcsRUFBRSxLQUFLLElBQUksR0FDdEIsT0FBTyxLQUFLLE1BQU0sTUFBTSxHQUN4QixTQUFTLEtBQUssTUFBTSxNQUFNLEdBQzFCLEtBQ0EsVUFBVSxJQUNWLFFBQ0EsS0FBSyxNQUNMLFVBQVUsS0FBSyxNQUFNLFNBQVM7QUFFbEMsb0JBQVUsVUFBVSxVQUFVLE9BQU87QUFDckMsY0FBSSxlQUFlLFVBQVU7QUFFN0IsY0FBSSxZQUFZLFNBQVMsWUFBWSxPQUFPO0FBQzFDLHNCQUFVLFNBQVMsWUFBWTtBQUMvQixxQkFBUyxDQUFDO0FBR1YsZ0JBQUksUUFBUSxTQUFVLEtBQUssS0FBSztBQUFFLHFCQUFPLEtBQUssR0FBRztBQUFBLFlBQUUsQ0FBQztBQUVwRCxnQkFBSSxhQUFhLFNBQVM7QUFDeEIscUJBQU8sTUFBTSxVQUFVLE1BQU0sS0FBSyxTQUFTO0FBQUEsWUFDN0M7QUFBQSxVQUNGLE9BQU87QUFDTCxxQkFBUyxFQUFFLDJCQUEyQixHQUFHO0FBRXpDLG9CQUFRLFVBQVU7QUFBQSxjQUNoQixLQUFLO0FBQ0gsb0JBQUksVUFBVSxTQUFTLEdBQUc7QUFDeEIsd0JBQU0sSUFBSUMsZ0JBQWUsY0FBYyxRQUFXLElBQUk7QUFBQSxnQkFDeEQ7QUFDQTtBQUFBLGNBQ0YsS0FBSztBQUNILG9CQUFJLFVBQVUsU0FBUyxHQUFHO0FBQ3hCLHdCQUFNLElBQUlBLGdCQUFlLGNBQWMsUUFBVyxJQUFJO0FBQUEsZ0JBQ3hEO0FBQ0EsdUJBQU8sT0FBTyxLQUFLLElBQUk7QUFDdkI7QUFBQSxjQUNGO0FBQ0UsdUJBQU8sTUFBTSxVQUFVLE1BQU0sS0FBSyxTQUFTO0FBQUEsWUFDL0M7QUFHQSxtQkFBTyxLQUFLLElBQUksU0FBVSxLQUFLO0FBQzdCLHFCQUFPLE9BQU8sUUFBUSxXQUFXLE1BQU0sT0FBTyxHQUFHO0FBQUEsWUFDbkQsQ0FBQztBQUFBLFVBQ0g7QUFFQSxjQUFJLENBQUMsS0FBSyxRQUFRO0FBQ2hCLGtCQUFNLElBQUlBLGdCQUFlLFVBQVUsaUJBQWlCLFFBQVcsSUFBSTtBQUFBLFVBQ3JFO0FBRUEsY0FBSSxNQUFNLEtBQUssUUFDWCxNQUFNLEtBQUssTUFBTSxLQUFLLEdBQ3RCLE1BQU0sS0FBSyxNQUFNLEtBQUssR0FDdEIsV0FBVztBQUVmLGNBQUksQ0FBQyxPQUFPLENBQUMsS0FBSztBQUNoQixrQkFBTTtBQUFBLFVBQ1I7QUFHQSxjQUFJLEtBQUs7QUFDUCxpQkFBSyxTQUFTLEtBQUssU0FBUyxhQUFhO0FBQ3ZDLHFCQUFPLE9BQU8sS0FBSyxTQUFTLFdBQVc7QUFDckMsb0JBQUksUUFBUTtBQUNWLHlCQUFPLEVBQUUsSUFBSSxhQUFhLFNBQVM7QUFBQSxnQkFDckMsT0FBTztBQUNMLHlCQUFPLGdCQUFnQjtBQUFBLGdCQUN6QjtBQUFBLGNBQ0YsQ0FBQztBQUFBLFlBQ0gsQ0FBQztBQUFBLFVBQ0g7QUFHQSxjQUFJLEtBQUs7QUFDUCxpQkFBSyxTQUFTLE1BQU0sU0FBUyxhQUFhO0FBQ3hDLHFCQUFPLE9BQU8sS0FBSyxTQUFTLFdBQVc7QUFDckMsb0JBQUksUUFBUTtBQUNWLHlCQUFPLEVBQUUsSUFBSSxhQUFhLFNBQVM7QUFBQSxnQkFDckMsT0FBTztBQUNMLHlCQUFPLGdCQUFnQjtBQUFBLGdCQUN6QjtBQUFBLGNBQ0YsQ0FBQztBQUFBLFlBQ0gsQ0FBQztBQUVELGdCQUFJLENBQUMsS0FBSyxNQUFNLFVBQVUsR0FBRztBQUMzQixtQkFBSyxNQUFNLEtBQUssVUFBVSxPQUFPO0FBQUEsWUFDbkM7QUFBQSxVQUNGO0FBR0EsY0FBSSxNQUFNLEdBQUc7QUFDWCxtQkFBTyxLQUFLLElBQUksU0FBUyxLQUFLO0FBQzVCLHFCQUFPLEVBQUUsUUFBUSxHQUFHO0FBQUEsWUFDdEIsQ0FBQztBQUNELGdCQUFJLE9BQU8sS0FBSyxJQUFJO0FBQ3BCLGdCQUFJLEtBQUs7QUFDUCxvQkFBTSxLQUFLLEtBQUssSUFBSSxJQUFJLFdBQVc7QUFBQSxZQUNyQztBQUNBLGdCQUFJLEtBQUs7QUFDUCxvQkFBTSxLQUFLLEtBQUssSUFBSSxJQUFJLFVBQVU7QUFBQSxZQUNwQztBQUFBLFVBQ0YsT0FBTztBQUNMLGtCQUFNLEVBQUUsUUFBUSxLQUFLLENBQUMsQ0FBQztBQUFBLFVBQ3pCO0FBR0EsaUJBQU8sTUFBTSxJQUFJLFVBQVUsVUFBVTtBQUdyQyxpQkFBTyxLQUFLLE1BQU0sVUFBVSxJQUFJLGFBQWEsV0FBVztBQUd4RCxlQUFLO0FBQUEsWUFDRDtBQUFBLFlBQ0EseUJBQXlCLFVBQVU7QUFBQSxZQUNuQyw2QkFBNkIsVUFBVTtBQUFBLFlBQ3ZDLFNBQVMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLGdCQUFnQjtBQUFBLFlBQ3pDLE9BQU8sS0FBSyxFQUFFLGdCQUFnQjtBQUFBLFlBQzlCO0FBQUEsVUFDSjtBQUFBLFFBQ0Y7QUFFQSxRQUFBRCxXQUFVLFVBQVUsUUFBUSxVQUFVO0FBQ3RDLFFBQUFBLFdBQVUsVUFBVSxPQUFPLFVBQVU7QUF1S3JDLGlCQUFTLGFBQWMsV0FBVyxlQUFlLEtBQUs7QUFDcEQsY0FBSTtBQUFLLGlCQUFLLE1BQU0sV0FBVyxHQUFHO0FBQ2xDLGNBQUksTUFBTSxLQUFLLE1BQU0sUUFBUSxHQUN6QixPQUFPLEtBQUssTUFBTSxNQUFNLEdBQ3hCLFVBQVUsS0FBSyxNQUFNLFNBQVMsR0FDOUIsU0FBUyxLQUFLLE1BQU0sUUFBUSxLQUFLO0FBQ3JDLGNBQUlBLFdBQVUsS0FBSyxTQUFTLE1BQU0sSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVO0FBRXZELGNBQUkscUJBQXFCLFVBQVUsT0FBTyxjQUFjLFVBQVU7QUFDaEUsNEJBQWdCO0FBQ2hCLHdCQUFZO0FBQUEsVUFDZDtBQUVBLGNBQUk7QUFDSixjQUFJO0FBQ0YsZ0JBQUk7QUFBQSxVQUNOLFNBQVMsS0FBSztBQUNaLHdCQUFZO0FBQUEsVUFDZDtBQUlBLGNBQUksc0JBQXNCLGNBQWMsVUFBYSxrQkFBa0I7QUFJdkUsY0FBSSxvQkFBb0IsUUFBUSxhQUFhLGFBQWE7QUFDMUQsY0FBSSxnQkFBZ0I7QUFDcEIsY0FBSSxvQkFBb0I7QUFHeEIsY0FBSSx1QkFBdUIsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRO0FBRTFELGdCQUFJLGtCQUFrQjtBQUN0QixnQkFBSSxxQkFBcUIsT0FBTztBQUM5QixnQ0FBa0I7QUFBQSxZQUNwQixXQUFXLFdBQVc7QUFDcEIsZ0NBQWtCLEVBQUUsV0FBVyxtQkFBbUIsU0FBUztBQUFBLFlBQzdEO0FBRUEsaUJBQUs7QUFBQSxjQUNEO0FBQUEsY0FDQSwrQkFBK0I7QUFBQSxjQUMvQjtBQUFBLGNBQ0EsYUFBYSxVQUFVLFNBQVM7QUFBQSxjQUMvQixxQkFBcUIsUUFDcEIsVUFBVSxTQUFTLElBQUssT0FBTyxjQUFjLFdBQVcsWUFBWSxhQUM1QyxFQUFFLFdBQVcsbUJBQW1CLFNBQVM7QUFBQSxZQUN2RTtBQUFBLFVBQ0Y7QUFFQSxjQUFJLGFBQWEsV0FBVztBQUUxQixnQkFBSSxxQkFBcUIsT0FBTztBQUM5QixrQkFBSSx1QkFBdUIsRUFBRSxXQUFXLG1CQUFtQixXQUFXLFNBQVM7QUFFL0Usa0JBQUkseUJBQXlCLFFBQVE7QUFHbkMsb0JBQUkscUJBQXFCLFFBQVE7QUFDL0Isa0NBQWdCO0FBQUEsZ0JBQ2xCLE9BQU87QUFDTCx1QkFBSztBQUFBLG9CQUNEO0FBQUEsb0JBQ0E7QUFBQSxvQkFDQSwwQ0FBMEMsYUFBYSxDQUFDLFNBQVMsMkJBQTJCO0FBQUEsb0JBQzVGLFVBQVUsU0FBUztBQUFBLG9CQUNuQixVQUFVLFNBQVM7QUFBQSxrQkFDdkI7QUFBQSxnQkFDRjtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBRUEsZ0JBQUksMEJBQTBCLEVBQUUsV0FBVyxzQkFBc0IsV0FBVyxTQUFTO0FBQ3JGLGdCQUFJLDRCQUE0QixRQUFRO0FBQ3RDLGtCQUFJLHFCQUFxQixRQUFRO0FBQzdCLGdDQUFnQjtBQUFBLGNBQ3BCLE9BQU87QUFDTCxxQkFBSztBQUFBLGtCQUNEO0FBQUEsa0JBQ0E7QUFBQSxrQkFDQSwwQ0FBMEMsWUFBWSwyQkFBMkI7QUFBQSxrQkFDaEYscUJBQXFCLFFBQVEsVUFBVSxTQUFTLElBQUksYUFBYSxFQUFFLFdBQVcsbUJBQW1CLFNBQVM7QUFBQSxrQkFDMUcscUJBQXFCLFFBQVEsVUFBVSxTQUFTLElBQUksYUFBYSxFQUFFLFdBQVcsbUJBQW1CLFNBQVM7QUFBQSxnQkFDL0c7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxjQUFJLGFBQWEsa0JBQWtCLFVBQWEsa0JBQWtCLE1BQU07QUFFdEUsZ0JBQUksY0FBYztBQUNsQixnQkFBSSx5QkFBeUIsUUFBUTtBQUNuQyw0QkFBYztBQUFBLFlBQ2hCO0FBRUEsZ0JBQUksc0JBQXNCLEVBQUUsV0FBVyxrQkFBa0IsV0FBVyxhQUFhO0FBQ2pGLGdCQUFJLHdCQUF3QixRQUFRO0FBQ2xDLGtCQUFJLHFCQUFxQixRQUFRO0FBQzdCLG9DQUFvQjtBQUFBLGNBQ3hCLE9BQU87QUFDTCxxQkFBSztBQUFBLGtCQUNIO0FBQUEsa0JBQ0UscUNBQXFDLGNBQWM7QUFBQSxrQkFDbkQseUNBQXlDLGNBQWM7QUFBQSxrQkFDdEQ7QUFBQSxrQkFDQSxFQUFFLFdBQVcsV0FBVyxTQUFTO0FBQUEsZ0JBQ3RDO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBR0EsY0FBSSxpQkFBaUIsbUJBQW1CO0FBQ3RDLGlCQUFLO0FBQUEsY0FDSDtBQUFBLGNBQ0U7QUFBQSxjQUNBLDBDQUEwQyxZQUFZLDJCQUEyQjtBQUFBLGNBQ2hGLHFCQUFxQixRQUFRLFVBQVUsU0FBUyxJQUFJLGFBQWEsRUFBRSxXQUFXLG1CQUFtQixTQUFTO0FBQUEsY0FDMUcscUJBQXFCLFFBQVEsVUFBVSxTQUFTLElBQUksYUFBYSxFQUFFLFdBQVcsbUJBQW1CLFNBQVM7QUFBQSxZQUMvRztBQUFBLFVBQ0Y7QUFFQSxlQUFLLE1BQU0sVUFBVSxTQUFTO0FBQUEsUUFDaEM7QUFBQztBQUVELFFBQUFBLFdBQVUsVUFBVSxTQUFTLFlBQVk7QUFDekMsUUFBQUEsV0FBVSxVQUFVLFVBQVUsWUFBWTtBQUMxQyxRQUFBQSxXQUFVLFVBQVUsU0FBUyxZQUFZO0FBbUV6QyxpQkFBUyxVQUFXLFFBQVEsS0FBSztBQUMvQixjQUFJO0FBQUssaUJBQUssTUFBTSxXQUFXLEdBQUc7QUFDbEMsY0FBSSxNQUFNLEtBQUssTUFBTSxRQUFRLEdBQ3pCLFNBQVMsS0FBSyxNQUFNLFFBQVEsR0FDNUIsVUFBVyxlQUFlLE9BQU8sT0FBTyxDQUFDLFNBQ3ZDLElBQUksVUFBVSxNQUFNLElBQ3BCLElBQUksTUFBTTtBQUVoQixlQUFLO0FBQUEsWUFDRCxlQUFlLE9BQU87QUFBQSxZQUN0QixvQ0FBb0MsRUFBRSxRQUFRLE1BQU07QUFBQSxZQUNwRCx3Q0FBd0MsRUFBRSxRQUFRLE1BQU07QUFBQSxVQUM1RDtBQUFBLFFBQ0Y7QUFFQSxRQUFBQSxXQUFVLFVBQVUsYUFBYSxTQUFTO0FBQzFDLFFBQUFBLFdBQVUsVUFBVSxjQUFjLFNBQVM7QUFzQjNDLFFBQUFBLFdBQVUsWUFBWSxVQUFVLFdBQVk7QUFDMUMsZUFBSyxNQUFNLFVBQVUsSUFBSTtBQUFBLFFBQzNCLENBQUM7QUF3Q0QsaUJBQVMsUUFBUyxTQUFTLEtBQUs7QUFDOUIsY0FBSTtBQUFLLGlCQUFLLE1BQU0sV0FBVyxHQUFHO0FBQ2xDLGNBQUksTUFBTSxLQUFLLE1BQU0sUUFBUTtBQUM3QixjQUFJLFNBQVMsUUFBUSxHQUFHO0FBQ3hCLGVBQUs7QUFBQSxZQUNEO0FBQUEsWUFDQSxpQ0FBaUMsRUFBRSxXQUFXLE9BQU87QUFBQSxZQUNyRCxvQ0FBb0MsRUFBRSxXQUFXLE9BQU87QUFBQSxZQUN4RCxLQUFLLE1BQU0sUUFBUSxJQUFJLFFBQVE7QUFBQSxZQUMvQjtBQUFBLFVBQ0o7QUFBQSxRQUNGO0FBRUEsUUFBQUEsV0FBVSxVQUFVLFdBQVcsT0FBTztBQUN0QyxRQUFBQSxXQUFVLFVBQVUsYUFBYSxPQUFPO0FBd0N4QyxpQkFBUyxRQUFRLFVBQVUsT0FBTyxLQUFLO0FBQ3JDLGNBQUk7QUFBSyxpQkFBSyxNQUFNLFdBQVcsR0FBRztBQUNsQyxjQUFJLE1BQU0sS0FBSyxNQUFNLFFBQVEsR0FDekIsVUFBVSxLQUFLLE1BQU0sU0FBUyxHQUM5QixPQUFPLEtBQUssTUFBTSxNQUFNO0FBRTVCLGNBQUlBLFdBQVUsS0FBSyxTQUFTLE1BQU0sSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRO0FBQ3JELGNBQUksT0FBTyxhQUFhLFlBQVksT0FBTyxVQUFVLFVBQVU7QUFDN0Qsc0JBQVUsVUFBVSxVQUFVLE9BQU87QUFDckMsZ0JBQUksZUFBZSxVQUFVLFNBQVksOEJBQThCO0FBQ3ZFLGtCQUFNLElBQUlDO0FBQUEsY0FDTixVQUFVLDhEQUE4RDtBQUFBLGNBQ3hFO0FBQUEsY0FDQTtBQUFBLFlBQ0o7QUFBQSxVQUNGO0FBRUEsZUFBSztBQUFBLFlBQ0QsS0FBSyxJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQUEsWUFDNUIscUNBQXFDLFdBQVcsVUFBVTtBQUFBLFlBQzFELHlDQUF5QyxXQUFXLFVBQVU7QUFBQSxVQUNsRTtBQUFBLFFBQ0Y7QUFFQSxRQUFBRCxXQUFVLFVBQVUsV0FBVyxPQUFPO0FBQ3RDLFFBQUFBLFdBQVUsVUFBVSxpQkFBaUIsT0FBTztBQUc1QyxpQkFBUyxXQUFXLFFBQVEsVUFBVSxLQUFLSSxXQUFVLFNBQVM7QUFDNUQsY0FBSSxDQUFDQSxXQUFVO0FBQ2IsZ0JBQUksT0FBTyxXQUFXLFNBQVM7QUFBUSxxQkFBTztBQUM5Qyx1QkFBVyxTQUFTLE1BQU07QUFBQSxVQUM1QjtBQUVBLGlCQUFPLE9BQU8sTUFBTSxTQUFTLE1BQU0sS0FBSztBQUN0QyxnQkFBSTtBQUFTLHFCQUFPLE1BQU0sSUFBSSxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQUksU0FBUyxTQUFTLEdBQUc7QUFFMUUsZ0JBQUksQ0FBQyxLQUFLO0FBQ1Isa0JBQUksV0FBVyxTQUFTLFFBQVEsSUFBSTtBQUNwQyxrQkFBSSxhQUFhO0FBQUksdUJBQU87QUFHNUIsa0JBQUksQ0FBQ0E7QUFBVSx5QkFBUyxPQUFPLFVBQVUsQ0FBQztBQUMxQyxxQkFBTztBQUFBLFlBQ1Q7QUFFQSxtQkFBTyxTQUFTLEtBQUssU0FBUyxPQUFPQyxXQUFVO0FBQzdDLGtCQUFJLENBQUMsSUFBSSxNQUFNLEtBQUs7QUFBRyx1QkFBTztBQUc5QixrQkFBSSxDQUFDRDtBQUFVLHlCQUFTLE9BQU9DLFdBQVUsQ0FBQztBQUMxQyxxQkFBTztBQUFBLFlBQ1QsQ0FBQztBQUFBLFVBQ0gsQ0FBQztBQUFBLFFBQ0g7QUF1RUEsUUFBQUwsV0FBVSxVQUFVLFdBQVcsU0FBVSxRQUFRLEtBQUs7QUFDcEQsY0FBSTtBQUFLLGlCQUFLLE1BQU0sV0FBVyxHQUFHO0FBQ2xDLGNBQUksTUFBTSxLQUFLLE1BQU0sUUFBUSxHQUN6QixVQUFVLEtBQUssTUFBTSxTQUFTLEdBQzlCLE9BQU8sS0FBSyxNQUFNLE1BQU07QUFFNUIsY0FBSUEsV0FBVSxLQUFLLFNBQVMsTUFBTSxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsT0FBTztBQUN4RCxjQUFJQSxXQUFVLFFBQVEsU0FBUyxNQUFNLElBQUksRUFBRSxHQUFHLEdBQUcsR0FBRyxPQUFPO0FBRTNELGNBQUlJLFlBQVcsS0FBSyxNQUFNLFVBQVU7QUFDcEMsY0FBSSxVQUFVLEtBQUssTUFBTSxTQUFTO0FBRWxDLGNBQUksU0FBUyxTQUFTO0FBRXRCLGNBQUlBLFdBQVU7QUFDWixzQkFBVSxVQUFVLHdCQUF3QjtBQUM1QyxzQkFBVSw0QkFBNEIsVUFBVTtBQUNoRCw0QkFBZ0IsZ0NBQWdDLFVBQVU7QUFBQSxVQUM1RCxPQUFPO0FBQ0wsc0JBQVUsVUFBVSxvQkFBb0I7QUFDeEMsc0JBQVUsdUNBQXVDLFVBQVU7QUFDM0QsNEJBQWdCLDJDQUEyQyxVQUFVO0FBQUEsVUFDdkU7QUFFQSxjQUFJLE1BQU0sS0FBSyxNQUFNLE1BQU0sSUFBSSxFQUFFLE1BQU07QUFFdkMsZUFBSztBQUFBLFlBQ0QsV0FBVyxRQUFRLEtBQUssS0FBS0EsV0FBVSxPQUFPO0FBQUEsWUFDOUM7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsVUFDSjtBQUFBLFFBQ0YsQ0FBQztBQXdDRCxpQkFBUyxNQUFPLE1BQU0sS0FBSztBQUN6QixjQUFJO0FBQUssaUJBQUssTUFBTSxXQUFXLEdBQUc7QUFDbEMsY0FBSSxXQUFXLEtBQUssTUFBTSxRQUFRLEdBQzlCLFVBQVUsS0FBSyxNQUFNLFNBQVMsR0FDOUIsT0FBTyxLQUFLLE1BQU0sTUFBTSxHQUN4QkEsWUFBVyxLQUFLLE1BQU0sVUFBVSxHQUNoQyxTQUFTLEtBQUssTUFBTSxNQUFNO0FBQzlCLGNBQUlKLFdBQVUsTUFBTSxTQUFTLE1BQU0sSUFBSSxFQUFFLEdBQUcsR0FBRyxHQUFHLE9BQU87QUFFekQsY0FBSUksV0FBVTtBQUNaLGlCQUFLO0FBQUEsY0FDSCxLQUFLLEtBQUssU0FBUyxhQUFhO0FBQUUsdUJBQU8sU0FBUyxRQUFRLFdBQVcsSUFBSTtBQUFBLGNBQUcsQ0FBQztBQUFBLGNBQzNFO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsWUFDSjtBQUFBLFVBQ0YsT0FBTztBQUNMLGdCQUFJLFFBQVE7QUFDVixtQkFBSztBQUFBLGdCQUNILEtBQUssS0FBSyxTQUFTLGFBQWE7QUFBRSx5QkFBTyxFQUFFLElBQUksVUFBVSxXQUFXO0FBQUEsZ0JBQUUsQ0FBQztBQUFBLGdCQUNyRTtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0E7QUFBQSxnQkFDQTtBQUFBLGNBQ0o7QUFBQSxZQUNGLE9BQU87QUFDTCxtQkFBSztBQUFBLGdCQUNILEtBQUssUUFBUSxRQUFRLElBQUk7QUFBQSxnQkFDdkI7QUFBQSxnQkFDQTtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0E7QUFBQSxjQUNKO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBRUEsUUFBQUosV0FBVSxVQUFVLFNBQVMsS0FBSztBQWlHbEMsaUJBQVMsY0FBZSxTQUFTLE1BQU0sS0FBSztBQUMxQyxjQUFJO0FBQUssaUJBQUssTUFBTSxXQUFXLEdBQUc7QUFDbEMsY0FBSU0sTUFBSyxLQUFLLE1BQU0sUUFBUSxHQUN4QixVQUFVLEtBQUssTUFBTSxTQUFTLEdBQzlCLE9BQU8sS0FBSyxNQUFNLE1BQU07QUFDNUIsY0FBSU4sV0FBVU0sS0FBSSxTQUFTLE1BQU0sSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVO0FBRXRELGNBQUk7QUFDSixjQUFJLENBQUMsTUFBTTtBQUNULGdCQUFJTixXQUFVLFNBQVMsU0FBUyxNQUFNLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVTtBQUMzRCxzQkFBVSxRQUFRO0FBQUEsVUFDcEIsT0FBTztBQUNMLGdCQUFJQSxXQUFVLFNBQVMsU0FBUyxNQUFNLElBQUksRUFBRSxHQUFHLEtBQUssU0FBUyxJQUFJO0FBQ2pFLHNCQUFVLFFBQVEsSUFBSTtBQUFBLFVBQ3hCO0FBRUEsVUFBQU0sSUFBRztBQUVILGNBQUksUUFBUSxTQUFTLFVBQWEsU0FBUyxPQUFPLFFBQVEsSUFBSSxRQUFRLElBQUk7QUFDMUUsY0FBSSxTQUFTLFNBQVMsVUFBYSxTQUFTLE9BQU8sVUFBVSxNQUFNO0FBR25FLGVBQUssTUFBTSxlQUFlLE1BQU07QUFDaEMsZUFBSyxNQUFNLHFCQUFxQixPQUFPO0FBQ3ZDLGVBQUssTUFBTSxtQkFBbUIsS0FBSztBQUNuQyxlQUFLLE1BQU0saUJBQWlCLFFBQVE7QUFDcEMsZUFBSyxNQUFNLGFBQWEsVUFBVSxPQUFPO0FBRXpDLGVBQUs7QUFBQSxZQUNILFlBQVk7QUFBQSxZQUNWLGNBQWMsU0FBUztBQUFBLFlBQ3ZCLGNBQWMsU0FBUztBQUFBLFVBQzNCO0FBQUEsUUFDRjtBQUVBLFFBQUFOLFdBQVUsVUFBVSxVQUFVLGFBQWE7QUFDM0MsUUFBQUEsV0FBVSxVQUFVLFdBQVcsYUFBYTtBQWlGNUMsaUJBQVMsZ0JBQWlCLFNBQVMsTUFBTSxLQUFLO0FBQzVDLGNBQUk7QUFBSyxpQkFBSyxNQUFNLFdBQVcsR0FBRztBQUNsQyxjQUFJTSxNQUFLLEtBQUssTUFBTSxRQUFRLEdBQ3hCLFVBQVUsS0FBSyxNQUFNLFNBQVMsR0FDOUIsT0FBTyxLQUFLLE1BQU0sTUFBTTtBQUM1QixjQUFJTixXQUFVTSxLQUFJLFNBQVMsTUFBTSxJQUFJLEVBQUUsR0FBRyxFQUFFLFVBQVU7QUFFdEQsY0FBSTtBQUNKLGNBQUksQ0FBQyxNQUFNO0FBQ1QsZ0JBQUlOLFdBQVUsU0FBUyxTQUFTLE1BQU0sSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVO0FBQzNELHNCQUFVLFFBQVE7QUFBQSxVQUNwQixPQUFPO0FBQ0wsZ0JBQUlBLFdBQVUsU0FBUyxTQUFTLE1BQU0sSUFBSSxFQUFFLEdBQUcsS0FBSyxTQUFTLElBQUk7QUFDakUsc0JBQVUsUUFBUSxJQUFJO0FBQUEsVUFDeEI7QUFHQSxjQUFJQSxXQUFVLFNBQVMsU0FBUyxNQUFNLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUTtBQUV6RCxVQUFBTSxJQUFHO0FBRUgsY0FBSSxRQUFRLFNBQVMsVUFBYSxTQUFTLE9BQU8sUUFBUSxJQUFJLFFBQVEsSUFBSTtBQUMxRSxjQUFJLFNBQVMsU0FBUyxVQUFhLFNBQVMsT0FBTyxVQUFVLE1BQU07QUFFbkUsZUFBSyxNQUFNLGVBQWUsTUFBTTtBQUNoQyxlQUFLLE1BQU0scUJBQXFCLE9BQU87QUFDdkMsZUFBSyxNQUFNLG1CQUFtQixLQUFLO0FBQ25DLGVBQUssTUFBTSxpQkFBaUIsVUFBVTtBQUN0QyxlQUFLLE1BQU0sYUFBYSxRQUFRLE9BQU87QUFFdkMsZUFBSztBQUFBLFlBQ0gsUUFBUSxVQUFVO0FBQUEsWUFDaEIsY0FBYyxTQUFTO0FBQUEsWUFDdkIsY0FBYyxTQUFTO0FBQUEsVUFDM0I7QUFBQSxRQUNGO0FBRUEsUUFBQU4sV0FBVSxVQUFVLFlBQVksZUFBZTtBQUMvQyxRQUFBQSxXQUFVLFVBQVUsYUFBYSxlQUFlO0FBaUZoRCxpQkFBUyxnQkFBaUIsU0FBUyxNQUFNLEtBQUs7QUFDNUMsY0FBSTtBQUFLLGlCQUFLLE1BQU0sV0FBVyxHQUFHO0FBQ2xDLGNBQUlNLE1BQUssS0FBSyxNQUFNLFFBQVEsR0FDeEIsVUFBVSxLQUFLLE1BQU0sU0FBUyxHQUM5QixPQUFPLEtBQUssTUFBTSxNQUFNO0FBQzVCLGNBQUlOLFdBQVVNLEtBQUksU0FBUyxNQUFNLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVTtBQUV0RCxjQUFJO0FBQ0osY0FBSSxDQUFDLE1BQU07QUFDVCxnQkFBSU4sV0FBVSxTQUFTLFNBQVMsTUFBTSxJQUFJLEVBQUUsR0FBRyxFQUFFLFVBQVU7QUFDM0Qsc0JBQVUsUUFBUTtBQUFBLFVBQ3BCLE9BQU87QUFDTCxnQkFBSUEsV0FBVSxTQUFTLFNBQVMsTUFBTSxJQUFJLEVBQUUsR0FBRyxLQUFLLFNBQVMsSUFBSTtBQUNqRSxzQkFBVSxRQUFRLElBQUk7QUFBQSxVQUN4QjtBQUdBLGNBQUlBLFdBQVUsU0FBUyxTQUFTLE1BQU0sSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRO0FBRXpELFVBQUFNLElBQUc7QUFFSCxjQUFJLFFBQVEsU0FBUyxVQUFhLFNBQVMsT0FBTyxRQUFRLElBQUksUUFBUSxJQUFJO0FBQzFFLGNBQUksU0FBUyxTQUFTLFVBQWEsU0FBUyxPQUFPLFVBQVUsTUFBTTtBQUVuRSxlQUFLLE1BQU0sZUFBZSxNQUFNO0FBQ2hDLGVBQUssTUFBTSxxQkFBcUIsT0FBTztBQUN2QyxlQUFLLE1BQU0sbUJBQW1CLEtBQUs7QUFDbkMsZUFBSyxNQUFNLGlCQUFpQixVQUFVO0FBQ3RDLGVBQUssTUFBTSxhQUFhLFVBQVUsS0FBSztBQUV2QyxlQUFLO0FBQUEsWUFDSCxRQUFRLFVBQVU7QUFBQSxZQUNoQixjQUFjLFNBQVM7QUFBQSxZQUN2QixjQUFjLFNBQVM7QUFBQSxVQUMzQjtBQUFBLFFBQ0Y7QUFFQSxRQUFBTixXQUFVLFVBQVUsWUFBWSxlQUFlO0FBQy9DLFFBQUFBLFdBQVUsVUFBVSxhQUFhLGVBQWU7QUFvRWhELGlCQUFTLFlBQVksT0FBTyxLQUFLO0FBQy9CLGNBQUk7QUFBSyxpQkFBSyxNQUFNLFdBQVcsR0FBRztBQUVsQyxjQUFJLFNBQVMsS0FBSyxNQUFNLGFBQWE7QUFDckMsY0FBSSxVQUFVLEtBQUssTUFBTSxtQkFBbUI7QUFDNUMsY0FBSSxRQUFRLEtBQUssTUFBTSxpQkFBaUI7QUFDeEMsY0FBSSxXQUFXLEtBQUssTUFBTSxlQUFlO0FBQ3pDLGNBQUksWUFBWSxLQUFLLE1BQU0sV0FBVztBQUV0QyxjQUFJO0FBQ0osY0FBSSxhQUFhLFVBQVU7QUFDekIseUJBQWEsS0FBSyxJQUFJLFFBQVEsT0FBTyxNQUFNLEtBQUssSUFBSSxLQUFLO0FBQUEsVUFDM0QsT0FBTztBQUNMLHlCQUFhLGNBQWMsS0FBSyxJQUFJLEtBQUs7QUFBQSxVQUMzQztBQUVBLGVBQUs7QUFBQSxZQUNIO0FBQUEsWUFDRSxjQUFjLFNBQVMsU0FBUyxXQUFXLFNBQVM7QUFBQSxZQUNwRCxjQUFjLFNBQVMsYUFBYSxXQUFXLFNBQVM7QUFBQSxVQUM1RDtBQUFBLFFBQ0Y7QUFFQSxRQUFBQSxXQUFVLFVBQVUsTUFBTSxXQUFXO0FBOEJyQyxRQUFBQSxXQUFVLFlBQVksY0FBYyxXQUFXO0FBQzdDLGNBQUksTUFBTSxLQUFLLE1BQU0sUUFBUTtBQU83QixjQUFJLGVBQWUsUUFBUSxPQUFPLEdBQUcsS0FBSyxPQUFPLGFBQWEsR0FBRztBQUVqRSxlQUFLO0FBQUEsWUFDSDtBQUFBLFlBQ0U7QUFBQSxZQUNBO0FBQUEsVUFDSjtBQUFBLFFBQ0YsQ0FBQztBQThCRCxRQUFBQSxXQUFVLFlBQVksVUFBVSxXQUFXO0FBQ3pDLGNBQUksTUFBTSxLQUFLLE1BQU0sUUFBUTtBQU83QixjQUFJLFdBQVcsUUFBUSxPQUFPLEdBQUcsSUFBSSxPQUFPLFNBQVMsR0FBRyxJQUFJO0FBRTVELGVBQUs7QUFBQSxZQUNIO0FBQUEsWUFDRTtBQUFBLFlBQ0E7QUFBQSxVQUNKO0FBQUEsUUFDRixDQUFDO0FBMkJELFFBQUFBLFdBQVUsWUFBWSxVQUFVLFdBQVc7QUFDekMsY0FBSSxNQUFNLEtBQUssTUFBTSxRQUFRO0FBTzdCLGNBQUksV0FBVyxRQUFRLE9BQU8sR0FBRyxJQUFJLE9BQU8sU0FBUyxHQUFHLElBQUk7QUFFNUQsZUFBSztBQUFBLFlBQ0g7QUFBQSxZQUNFO0FBQUEsWUFDQTtBQUFBLFVBQ0o7QUFBQSxRQUNGLENBQUM7QUFtREQsUUFBQUEsV0FBVSxZQUFZLFVBQVUsU0FBUyxLQUFLO0FBQzVDLGNBQUksTUFBTSxLQUFLLE1BQU0sUUFBUTtBQUU3QixlQUFLO0FBQUEsWUFDRCxPQUFPLFFBQVEsWUFBWSxTQUFTLEdBQUc7QUFBQSxZQUN2QztBQUFBLFlBQ0E7QUFBQSxVQUNKO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSDtBQUFBO0FBQUE7OztBQzV3SEE7QUFBQTtBQU1BLGFBQU8sVUFBVSxTQUFVTyxPQUFNQyxPQUFNO0FBQ3JDLFFBQUFELE1BQUssU0FBUyxTQUFVLEtBQUssU0FBUztBQUNwQyxpQkFBTyxJQUFJQSxNQUFLLFVBQVUsS0FBSyxPQUFPO0FBQUEsUUFDeEM7QUF3QkEsUUFBQUEsTUFBSyxPQUFPLE9BQU8sU0FBVSxRQUFRLFVBQVUsU0FBUyxVQUFVO0FBQ2hFLGNBQUksVUFBVSxTQUFTLEdBQUc7QUFDdEIsc0JBQVU7QUFDVixxQkFBUztBQUFBLFVBQ2I7QUFFQSxvQkFBVSxXQUFXO0FBQ3JCLGdCQUFNLElBQUlBLE1BQUssZUFBZSxTQUFTO0FBQUEsWUFDbkM7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0osR0FBR0EsTUFBSyxPQUFPLElBQUk7QUFBQSxRQUNyQjtBQUFBLE1BQ0Y7QUFBQTtBQUFBOzs7QUM5Q0E7QUFBQTtBQU1BLGFBQU8sVUFBVSxTQUFVRSxPQUFNQyxPQUFNO0FBQ3JDLFlBQUlDLGFBQVlGLE1BQUs7QUFFckIsaUJBQVMsYUFBYztBQUVyQixtQkFBUyxlQUFlO0FBQ3RCLGdCQUFJLGdCQUFnQixVQUNiLGdCQUFnQixVQUNoQixnQkFBZ0IsV0FDaEIsT0FBTyxXQUFXLGNBQWMsZ0JBQWdCLFVBQ2hELE9BQU8sV0FBVyxjQUFjLGdCQUFnQixRQUFRO0FBQzdELHFCQUFPLElBQUlFLFdBQVUsS0FBSyxRQUFRLEdBQUcsTUFBTSxZQUFZO0FBQUEsWUFDekQ7QUFDQSxtQkFBTyxJQUFJQSxXQUFVLE1BQU0sTUFBTSxZQUFZO0FBQUEsVUFDL0M7QUFDQSxtQkFBUyxhQUFhLE9BQU87QUFPM0IsbUJBQU8sZUFBZSxNQUFNLFVBQVU7QUFBQSxjQUNwQztBQUFBLGNBQ0EsWUFBWTtBQUFBLGNBQ1osY0FBYztBQUFBLGNBQ2QsVUFBVTtBQUFBLFlBQ1osQ0FBQztBQUFBLFVBQ0g7QUFFQSxpQkFBTyxlQUFlLE9BQU8sV0FBVyxVQUFVO0FBQUEsWUFDaEQsS0FBSztBQUFBLFlBQ0gsS0FBSztBQUFBLFlBQ0wsY0FBYztBQUFBLFVBQ2xCLENBQUM7QUFFRCxjQUFJQyxVQUFTLENBQUM7QUF5QmQsVUFBQUEsUUFBTyxPQUFPLFNBQVUsUUFBUSxVQUFVLFNBQVMsVUFBVTtBQUMzRCxnQkFBSSxVQUFVLFNBQVMsR0FBRztBQUN0Qix3QkFBVTtBQUNWLHVCQUFTO0FBQUEsWUFDYjtBQUVBLHNCQUFVLFdBQVc7QUFDckIsa0JBQU0sSUFBSUgsTUFBSyxlQUFlLFNBQVM7QUFBQSxjQUNuQztBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsWUFDSixHQUFHRyxRQUFPLElBQUk7QUFBQSxVQUNoQjtBQWlCQSxVQUFBQSxRQUFPLFFBQVEsU0FBVSxNQUFNLE1BQU0sS0FBSztBQUN4QyxnQkFBSUQsV0FBVSxNQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sSUFBSTtBQUFBLFVBQ3hDO0FBMEJBLFVBQUFDLFFBQU8sUUFBUSxTQUFVQyxLQUFJLE1BQU0sTUFBTSxLQUFLO0FBQzVDLGdCQUFJRixXQUFVRSxLQUFJLEdBQUcsRUFBRSxHQUFHLE1BQU0sTUFBTSxJQUFJO0FBQUEsVUFDNUM7QUFnQkEsVUFBQUQsUUFBTyxRQUFRLFNBQVUsS0FBSyxLQUFLO0FBQ2pDLGdCQUFJRCxXQUFVLEtBQUssR0FBRyxFQUFFLEdBQUc7QUFBQSxVQUM3QjtBQUdBLFVBQUFDLFFBQU8sTUFBTSxDQUFDO0FBaUJkLFVBQUFBLFFBQU8sSUFBSSxRQUFRLFNBQVUsTUFBTSxNQUFNLEtBQUs7QUFDNUMsZ0JBQUlELFdBQVUsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLE1BQU0sSUFBSTtBQUFBLFVBQzVDO0FBc0JBLFVBQUFDLFFBQU8sSUFBSSxRQUFRLFNBQVVDLEtBQUksTUFBTSxNQUFNLEtBQUs7QUFDaEQsZ0JBQUlGLFdBQVVFLEtBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQU0sSUFBSTtBQUFBLFVBQ2hEO0FBZ0JBLFVBQUFELFFBQU8sSUFBSSxRQUFRLFNBQVUsS0FBSyxLQUFLO0FBQ3JDLGdCQUFJRCxXQUFVLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSTtBQUFBLFVBQ2pDO0FBRUEsVUFBQUMsUUFBTyxPQUFPLElBQUlBLFFBQU8sT0FBTztBQUNoQyxVQUFBQSxRQUFPLElBQUksT0FBTyxJQUFJQSxRQUFPLElBQUksT0FBTztBQUV4QyxpQkFBT0E7QUFBQSxRQUNUO0FBQUM7QUFFRCxRQUFBSCxNQUFLLFNBQVM7QUFDZCxRQUFBQSxNQUFLLFNBQVM7QUFBQSxNQUNoQjtBQUFBO0FBQUE7OztBQzFOQTtBQUFBO0FBTUEsYUFBTyxVQUFVLFNBQVVLLE9BQU1DLE9BQU07QUFLckMsWUFBSUMsYUFBWUYsTUFBSyxXQUNqQixPQUFPQyxNQUFLO0FBcUJoQixZQUFJRSxVQUFTSCxNQUFLLFNBQVMsU0FBVSxTQUFTLFFBQVE7QUFDcEQsY0FBSSxPQUFPLElBQUlFLFdBQVUsTUFBTSxNQUFNRixNQUFLLFFBQVEsSUFBSTtBQUN0RCxlQUFLO0FBQUEsWUFDRDtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsVUFDSjtBQUFBLFFBQ0Y7QUF3QkEsUUFBQUcsUUFBTyxPQUFPLFNBQVUsUUFBUSxVQUFVLFNBQVMsVUFBVTtBQUMzRCxjQUFJLFVBQVUsU0FBUyxHQUFHO0FBR3RCLHNCQUFVO0FBQ1YscUJBQVM7QUFBQSxVQUNiO0FBRUEsb0JBQVUsV0FBVztBQUNyQixnQkFBTSxJQUFJSCxNQUFLLGVBQWUsU0FBUztBQUFBLFlBQ25DO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxVQUNKLEdBQUdHLFFBQU8sSUFBSTtBQUFBLFFBQ2hCO0FBa0JBLFFBQUFBLFFBQU8sT0FBTyxTQUFVLEtBQUssS0FBSztBQUNoQyxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxNQUFNLElBQUksRUFBRSxHQUFHO0FBQUEsUUFDaEQ7QUFrQkEsUUFBQUEsUUFBTyxVQUFVLFNBQVUsS0FBSyxLQUFLO0FBQ25DLGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLFNBQVMsSUFBSSxFQUFFLEdBQUcsSUFBSTtBQUFBLFFBQ3ZEO0FBaUJBLFFBQUFBLFFBQU8sUUFBUSxTQUFVLEtBQUssS0FBSyxLQUFLO0FBQ3RDLGNBQUksT0FBTyxJQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxPQUFPLElBQUk7QUFFckQsZUFBSztBQUFBLFlBQ0QsT0FBTyxLQUFLLE1BQU0sUUFBUTtBQUFBLFlBQzFCO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0o7QUFBQSxRQUNGO0FBaUJBLFFBQUFBLFFBQU8sV0FBVyxTQUFVLEtBQUssS0FBSyxLQUFLO0FBQ3pDLGNBQUksT0FBTyxJQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxVQUFVLElBQUk7QUFFeEQsZUFBSztBQUFBLFlBQ0QsT0FBTyxLQUFLLE1BQU0sUUFBUTtBQUFBLFlBQzFCO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0o7QUFBQSxRQUNGO0FBaUJBLFFBQUFBLFFBQU8sY0FBYyxTQUFVLEtBQUssS0FBSyxLQUFLO0FBQzVDLGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLGFBQWEsSUFBSSxFQUFFLEdBQUcsTUFBTSxHQUFHO0FBQUEsUUFDaEU7QUFpQkEsUUFBQUEsUUFBTyxpQkFBaUIsU0FBVSxLQUFLLEtBQUssS0FBSztBQUMvQyxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxnQkFBZ0IsSUFBSSxFQUFFLEdBQUcsSUFBSSxNQUFNLEdBQUc7QUFBQSxRQUN2RTtBQWtCQSxRQUFBQSxRQUFPLFlBQVlBLFFBQU8sa0JBQWtCLFNBQVUsS0FBSyxLQUFLLEtBQUs7QUFDbkUsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sV0FBVyxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUc7QUFBQSxRQUM1RDtBQWlCQSxRQUFBQSxRQUFPLGVBQWUsU0FBVSxLQUFLLEtBQUssS0FBSztBQUM3QyxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxjQUFjLElBQUksRUFBRSxHQUFHLElBQUksSUFBSSxHQUFHO0FBQUEsUUFDbkU7QUFpQkEsUUFBQUEsUUFBTyxVQUFVLFNBQVUsS0FBSyxLQUFLLEtBQUs7QUFDeEMsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sU0FBUyxJQUFJLEVBQUUsR0FBRyxHQUFHLE1BQU0sR0FBRztBQUFBLFFBQy9EO0FBa0JBLFFBQUFBLFFBQU8sWUFBWSxTQUFVLEtBQUssT0FBTyxLQUFLO0FBQzVDLGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLFdBQVcsSUFBSSxFQUFFLEdBQUcsR0FBRyxNQUFNLEtBQUs7QUFBQSxRQUNuRTtBQWlCQSxRQUFBQSxRQUFPLFVBQVUsU0FBVSxLQUFLLEtBQUssS0FBSztBQUN4QyxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxTQUFTLElBQUksRUFBRSxHQUFHLEdBQUcsTUFBTSxHQUFHO0FBQUEsUUFDL0Q7QUFrQkEsUUFBQUEsUUFBTyxXQUFXLFNBQVUsS0FBSyxPQUFPLEtBQUs7QUFDM0MsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sVUFBVSxJQUFJLEVBQUUsR0FBRyxHQUFHLEtBQUssS0FBSztBQUFBLFFBQ2pFO0FBaUJBLFFBQUFBLFFBQU8sU0FBUyxTQUFVLEtBQUssS0FBSztBQUNsQyxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxRQUFRLElBQUksRUFBRSxHQUFHLE1BQU07QUFBQSxRQUN4RDtBQWlCQSxRQUFBQSxRQUFPLFlBQVksU0FBVSxLQUFLLEtBQUs7QUFDckMsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sV0FBVyxJQUFJLEVBQUUsR0FBRyxJQUFJLE1BQU0sSUFBSTtBQUFBLFFBQ25FO0FBaUJBLFFBQUFBLFFBQU8sVUFBVSxTQUFVLEtBQUssS0FBSztBQUNuQyxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxTQUFTLElBQUksRUFBRSxHQUFHLE9BQU87QUFBQSxRQUMxRDtBQWlCQSxRQUFBQSxRQUFPLGFBQWEsU0FBVSxLQUFLLEtBQUs7QUFDdEMsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sWUFBWSxJQUFJLEVBQUUsR0FBRyxJQUFJLE1BQU0sS0FBSztBQUFBLFFBQ3JFO0FBZ0JBLFFBQUFBLFFBQU8sU0FBUyxTQUFVLEtBQUssS0FBSztBQUNsQyxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxRQUFRLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBSTtBQUFBLFFBQzVEO0FBaUJBLFFBQUFBLFFBQU8sWUFBWSxTQUFVLEtBQUssS0FBSztBQUNyQyxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxXQUFXLElBQUksRUFBRSxHQUFHLElBQUksTUFBTSxJQUFJO0FBQUEsUUFDbkU7QUFnQkEsUUFBQUEsUUFBTyxRQUFRLFNBQVUsS0FBSyxLQUFLO0FBQ2pDLGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLE9BQU8sSUFBSSxFQUFFLEdBQUcsR0FBRztBQUFBLFFBQ3BEO0FBZUEsUUFBQUEsUUFBTyxXQUFXLFNBQVUsS0FBSyxLQUFLO0FBQ3BDLGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLFVBQVUsSUFBSSxFQUFFLElBQUksR0FBRyxHQUFHO0FBQUEsUUFDM0Q7QUFrQkEsUUFBQUEsUUFBTyxTQUFTLFNBQVUsS0FBSyxLQUFLO0FBQ2xDLGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLFFBQVEsSUFBSSxFQUFFLEdBQUc7QUFBQSxRQUNsRDtBQW9CQSxRQUFBQSxRQUFPLFlBQVksU0FBVSxLQUFLLEtBQUs7QUFDckMsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sV0FBVyxJQUFJLEVBQUUsR0FBRyxJQUFJO0FBQUEsUUFDekQ7QUFpQkEsUUFBQUEsUUFBTyxjQUFjLFNBQVUsS0FBSyxLQUFLO0FBQ3ZDLGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLGFBQWEsSUFBSSxFQUFFLEdBQUcsTUFBTSxNQUFTO0FBQUEsUUFDdEU7QUFpQkEsUUFBQUEsUUFBTyxZQUFZLFNBQVUsS0FBSyxLQUFLO0FBQ3JDLGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLFdBQVcsSUFBSSxFQUFFLEdBQUcsSUFBSSxNQUFNLE1BQVM7QUFBQSxRQUN4RTtBQWlCQSxRQUFBQSxRQUFPLGFBQWEsU0FBVSxLQUFLLEtBQUs7QUFDdEMsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sWUFBWSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsVUFBVTtBQUFBLFFBQ3JFO0FBaUJBLFFBQUFBLFFBQU8sZ0JBQWdCLFNBQVUsS0FBSyxLQUFLO0FBQ3pDLGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLGVBQWUsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsVUFBVTtBQUFBLFFBQzVFO0FBa0JBLFFBQUFBLFFBQU8sV0FBVyxTQUFVLEtBQUssS0FBSztBQUNwQyxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxVQUFVLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxRQUFRO0FBQUEsUUFDakU7QUFrQkEsUUFBQUEsUUFBTyxjQUFjLFNBQVUsS0FBSyxLQUFLO0FBQ3ZDLGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLGFBQWEsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsUUFBUTtBQUFBLFFBQ3hFO0FBaUJBLFFBQUFBLFFBQU8sVUFBVSxTQUFVLEtBQUssS0FBSztBQUNuQyxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxTQUFTLElBQUksRUFBRSxHQUFHLEdBQUcsR0FBRyxPQUFPO0FBQUEsUUFDaEU7QUFpQkEsUUFBQUEsUUFBTyxhQUFhLFNBQVUsS0FBSyxLQUFLO0FBQ3RDLGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLFlBQVksSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsT0FBTztBQUFBLFFBQ3ZFO0FBaUJBLFFBQUFBLFFBQU8sV0FBVyxTQUFVLEtBQUssS0FBSztBQUNwQyxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxVQUFVLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxRQUFRO0FBQUEsUUFDakU7QUFpQkEsUUFBQUEsUUFBTyxjQUFjLFNBQVUsS0FBSyxLQUFLO0FBQ3ZDLGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLGFBQWEsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsUUFBUTtBQUFBLFFBQ3hFO0FBaUJBLFFBQUFBLFFBQU8sV0FBVyxTQUFVLEtBQUssS0FBSztBQUNwQyxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxVQUFVLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxRQUFRO0FBQUEsUUFDakU7QUFpQkEsUUFBQUEsUUFBTyxjQUFjLFNBQVUsS0FBSyxLQUFLO0FBQ3ZDLGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLGFBQWEsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsUUFBUTtBQUFBLFFBQ3hFO0FBbUJBLFFBQUFBLFFBQU8sV0FBVyxTQUFVLEtBQUssS0FBSztBQUNwQyxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxVQUFVLElBQUksRUFBRSxHQUFHLEdBQUc7QUFBQSxRQUN2RDtBQW9CQSxRQUFBQSxRQUFPLFlBQVksU0FBVSxLQUFLLEtBQUs7QUFDckMsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sV0FBVyxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsU0FBUztBQUFBLFFBQ25FO0FBb0JBLFFBQUFBLFFBQU8sZUFBZSxTQUFVLEtBQUssS0FBSztBQUN4QyxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxjQUFjLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLFNBQVM7QUFBQSxRQUMxRTtBQXVCQSxRQUFBQSxRQUFPLFNBQVMsU0FBVSxLQUFLLE1BQU0sS0FBSztBQUN4QyxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxRQUFRLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJO0FBQUEsUUFDM0Q7QUFrQkEsUUFBQUEsUUFBTyxZQUFZLFNBQVUsS0FBSyxNQUFNLEtBQUs7QUFDM0MsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sV0FBVyxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxJQUFJO0FBQUEsUUFDbEU7QUFvQkEsUUFBQUEsUUFBTyxhQUFhLFNBQVUsS0FBSyxNQUFNLEtBQUs7QUFDNUMsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sWUFBWSxJQUFJLEVBQUUsR0FBRyxHQUFHLFdBQVcsSUFBSTtBQUFBLFFBQ3hFO0FBb0JBLFFBQUFBLFFBQU8sZ0JBQWdCLFNBQVUsS0FBSyxNQUFNLEtBQUs7QUFDL0MsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sZUFBZSxJQUFJLEVBQy9DLEdBQUcsSUFBSSxHQUFHLFdBQVcsSUFBSTtBQUFBLFFBQzlCO0FBaUNBLFFBQUFBLFFBQU8sVUFBVSxTQUFVLEtBQUssS0FBSyxLQUFLO0FBQ3hDLGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLFNBQVMsSUFBSSxFQUFFLFFBQVEsR0FBRztBQUFBLFFBQzNEO0FBa0NBLFFBQUFBLFFBQU8sYUFBYSxTQUFVLEtBQUssS0FBSyxLQUFLO0FBQzNDLGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLFlBQVksSUFBSSxFQUFFLElBQUksUUFBUSxHQUFHO0FBQUEsUUFDbEU7QUF1QkEsUUFBQUEsUUFBTyxjQUFjLFNBQVUsS0FBSyxLQUFLLEtBQUs7QUFDNUMsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sYUFBYSxJQUFJLEVBQUUsS0FBSyxRQUFRLEdBQUc7QUFBQSxRQUNwRTtBQXVCQSxRQUFBQSxRQUFPLGlCQUFpQixTQUFVLEtBQUssS0FBSyxLQUFLO0FBQy9DLGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLGdCQUFnQixJQUFJLEVBQUUsSUFBSSxLQUFLLFFBQVEsR0FBRztBQUFBLFFBQzNFO0FBdUJBLFFBQUFBLFFBQU8sZ0JBQWdCLFNBQVUsS0FBSyxLQUFLLEtBQUs7QUFDOUMsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sZUFBZSxJQUFJLEVBQUUsT0FBTyxRQUFRLEdBQUc7QUFBQSxRQUN4RTtBQXVCQSxRQUFBQSxRQUFPLG1CQUFtQixTQUFVLEtBQUssS0FBSyxLQUFLO0FBQ2pELGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLGtCQUFrQixJQUFJLEVBQ2xELElBQUksT0FBTyxRQUFRLEdBQUc7QUFBQSxRQUMzQjtBQXVCQSxRQUFBQSxRQUFPLG9CQUFvQixTQUFTLEtBQUssS0FBSyxLQUFLO0FBQ2pELGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLG1CQUFtQixJQUFJLEVBQ25ELEtBQUssT0FBTyxRQUFRLEdBQUc7QUFBQSxRQUM1QjtBQXVCQSxRQUFBQSxRQUFPLHVCQUF1QixTQUFTLEtBQUssS0FBSyxLQUFLO0FBQ3BELGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLHNCQUFzQixJQUFJLEVBQ3RELElBQUksS0FBSyxPQUFPLFFBQVEsR0FBRztBQUFBLFFBQ2hDO0FBbUJBLFFBQUFBLFFBQU8sYUFBYSxTQUFTLEtBQUssS0FBSyxLQUFLO0FBQzFDLGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLFlBQVksSUFBSSxFQUFFLElBQUksUUFBUSxHQUFHO0FBQUEsUUFDbEU7QUFxQkEsUUFBQUEsUUFBTyxnQkFBZ0IsU0FBUyxLQUFLLEtBQUssS0FBSztBQUM3QyxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxlQUFlLElBQUksRUFBRSxJQUFJLElBQUksUUFBUSxHQUFHO0FBQUEsUUFDekU7QUFtQkEsUUFBQUEsUUFBTyxpQkFBaUIsU0FBUyxLQUFLLEtBQUssS0FBSztBQUM5QyxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxnQkFBZ0IsSUFBSSxFQUNoRCxLQUFLLElBQUksUUFBUSxHQUFHO0FBQUEsUUFDekI7QUFtQkEsUUFBQUEsUUFBTyxvQkFBb0IsU0FBUyxLQUFLLEtBQUssS0FBSztBQUNqRCxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxtQkFBbUIsSUFBSSxFQUNuRCxJQUFJLEtBQUssSUFBSSxRQUFRLEdBQUc7QUFBQSxRQUM3QjtBQWlCQSxRQUFBQSxRQUFPLFFBQVEsU0FBVSxLQUFLLElBQUksS0FBSztBQUNyQyxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxPQUFPLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRTtBQUFBLFFBQ3pEO0FBaUJBLFFBQUFBLFFBQU8sV0FBVyxTQUFVLEtBQUssSUFBSSxLQUFLO0FBQ3hDLGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLFVBQVUsSUFBSSxFQUFFLEdBQUcsSUFBSSxNQUFNLEVBQUU7QUFBQSxRQUNoRTtBQW1CQSxRQUFBQSxRQUFPLFdBQVcsU0FBVSxLQUFLLE1BQU0sS0FBSztBQUMxQyxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxVQUFVLElBQUksRUFBRSxHQUFHLEtBQUssU0FBUyxJQUFJO0FBQUEsUUFDdEU7QUFrQkEsUUFBQUEsUUFBTyxjQUFjLFNBQVUsS0FBSyxNQUFNLEtBQUs7QUFDN0MsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sYUFBYSxJQUFJLEVBQzdDLEdBQUcsSUFBSSxLQUFLLFNBQVMsSUFBSTtBQUFBLFFBQzlCO0FBb0JBLFFBQUFBLFFBQU8sY0FBYyxTQUFVLEtBQUssTUFBTSxLQUFLLEtBQUs7QUFDbEQsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sYUFBYSxJQUFJLEVBQzdDLEdBQUcsS0FBSyxTQUFTLE1BQU0sR0FBRztBQUFBLFFBQy9CO0FBcUJBLFFBQUFBLFFBQU8saUJBQWlCLFNBQVUsS0FBSyxNQUFNLEtBQUssS0FBSztBQUNyRCxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxnQkFBZ0IsSUFBSSxFQUNoRCxHQUFHLElBQUksS0FBSyxTQUFTLE1BQU0sR0FBRztBQUFBLFFBQ25DO0FBbUJBLFFBQUFBLFFBQU8sa0JBQWtCLFNBQVUsS0FBSyxNQUFNLEtBQUssS0FBSztBQUN0RCxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxpQkFBaUIsSUFBSSxFQUNqRCxHQUFHLEtBQUssS0FBSyxTQUFTLE1BQU0sR0FBRztBQUFBLFFBQ3BDO0FBcUJBLFFBQUFBLFFBQU8scUJBQXFCLFNBQVUsS0FBSyxNQUFNLEtBQUssS0FBSztBQUN6RCxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxvQkFBb0IsSUFBSSxFQUNwRCxHQUFHLElBQUksS0FBSyxLQUFLLFNBQVMsTUFBTSxHQUFHO0FBQUEsUUFDeEM7QUFpQkEsUUFBQUEsUUFBTyxjQUFjLFNBQVUsS0FBSyxNQUFNLEtBQUs7QUFDN0MsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sYUFBYSxJQUFJLEVBQzdDLEdBQUcsS0FBSyxJQUFJLFNBQVMsSUFBSTtBQUFBLFFBQzlCO0FBa0JBLFFBQUFBLFFBQU8saUJBQWlCLFNBQVUsS0FBSyxNQUFNLEtBQUs7QUFDaEQsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sZ0JBQWdCLElBQUksRUFDaEQsR0FBRyxJQUFJLEtBQUssSUFBSSxTQUFTLElBQUk7QUFBQSxRQUNsQztBQW1CQSxRQUFBQSxRQUFPLGlCQUFpQixTQUFVLEtBQUssTUFBTSxPQUFPLEtBQUs7QUFDdkQsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sZ0JBQWdCLElBQUksRUFDaEQsR0FBRyxLQUFLLElBQUksU0FBUyxNQUFNLEtBQUs7QUFBQSxRQUNyQztBQW9CQSxRQUFBQSxRQUFPLG9CQUFvQixTQUFVLEtBQUssTUFBTSxPQUFPLEtBQUs7QUFDMUQsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sbUJBQW1CLElBQUksRUFDbkQsR0FBRyxJQUFJLEtBQUssSUFBSSxTQUFTLE1BQU0sS0FBSztBQUFBLFFBQ3pDO0FBbUJBLFFBQUFBLFFBQU8scUJBQXFCLFNBQVUsS0FBSyxNQUFNLE9BQU8sS0FBSztBQUMzRCxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxvQkFBb0IsSUFBSSxFQUNwRCxHQUFHLEtBQUssS0FBSyxJQUFJLFNBQVMsTUFBTSxLQUFLO0FBQUEsUUFDMUM7QUFzQkEsUUFBQUEsUUFBTyx3QkFBd0IsU0FBVSxLQUFLLE1BQU0sT0FBTyxLQUFLO0FBQzlELGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLHVCQUF1QixJQUFJLEVBQ3ZELEdBQUcsSUFBSSxLQUFLLEtBQUssSUFBSSxTQUFTLE1BQU0sS0FBSztBQUFBLFFBQzlDO0FBbUJBLFFBQUFBLFFBQU8saUJBQWlCLFNBQVUsS0FBSyxNQUFNLEtBQUs7QUFDaEQsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sZ0JBQWdCLElBQUksRUFDaEQsR0FBRyxLQUFLLE9BQU8sU0FBUyxJQUFJO0FBQUEsUUFDakM7QUFtQkEsUUFBQUEsUUFBTyxvQkFBb0IsU0FBVSxLQUFLLE1BQU0sS0FBSztBQUNuRCxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxtQkFBbUIsSUFBSSxFQUNuRCxHQUFHLElBQUksS0FBSyxPQUFPLFNBQVMsSUFBSTtBQUFBLFFBQ3JDO0FBb0JBLFFBQUFBLFFBQU8sb0JBQW9CLFNBQVUsS0FBSyxNQUFNLEtBQUssS0FBSztBQUN4RCxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxtQkFBbUIsSUFBSSxFQUNuRCxHQUFHLEtBQUssT0FBTyxTQUFTLE1BQU0sR0FBRztBQUFBLFFBQ3RDO0FBcUJBLFFBQUFBLFFBQU8sdUJBQXVCLFNBQVUsS0FBSyxNQUFNLEtBQUssS0FBSztBQUMzRCxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxzQkFBc0IsSUFBSSxFQUN0RCxHQUFHLElBQUksS0FBSyxPQUFPLFNBQVMsTUFBTSxHQUFHO0FBQUEsUUFDMUM7QUFvQkEsUUFBQUEsUUFBTyx3QkFBd0IsU0FBVSxLQUFLLE1BQU0sS0FBSyxLQUFLO0FBQzVELGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLHVCQUF1QixJQUFJLEVBQ3ZELEdBQUcsS0FBSyxLQUFLLE9BQU8sU0FBUyxNQUFNLEdBQUc7QUFBQSxRQUMzQztBQXNCQSxRQUFBQSxRQUFPLDJCQUEyQixTQUFVLEtBQUssTUFBTSxLQUFLLEtBQUs7QUFDL0QsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sMEJBQTBCLElBQUksRUFDMUQsR0FBRyxJQUFJLEtBQUssS0FBSyxPQUFPLFNBQVMsTUFBTSxHQUFHO0FBQUEsUUFDL0M7QUFvQkEsUUFBQUEsUUFBTyxXQUFXLFNBQVUsS0FBSyxLQUFLLEtBQUs7QUFDekMsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sVUFBVSxJQUFJLEVBQUUsR0FBRyxLQUFLLFNBQVMsR0FBRztBQUFBLFFBQ3JFO0FBc0JBLFFBQUFBLFFBQU8sYUFBYSxTQUFVLEtBQUssTUFBTSxLQUFLO0FBQzVDLGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLFlBQVksSUFBSSxFQUFFLEdBQUcsS0FBSyxJQUFJLEtBQUssSUFBSTtBQUFBLFFBQ3hFO0FBc0JBLFFBQUFBLFFBQU8sYUFBYSxTQUFVLEtBQUssTUFBTSxLQUFLO0FBQzVDLGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLFlBQVksSUFBSSxFQUFFLEdBQUcsS0FBSyxJQUFJLEtBQUssSUFBSTtBQUFBLFFBQ3hFO0FBMEJBLFFBQUFBLFFBQU8sa0JBQWtCLFNBQVUsS0FBSyxNQUFNLEtBQUs7QUFDakQsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8saUJBQWlCLElBQUksRUFDakQsR0FBRyxRQUFRLElBQUksS0FBSyxJQUFJO0FBQUEsUUFDN0I7QUFzQkEsUUFBQUEsUUFBTyxxQkFBcUIsU0FBVSxLQUFLLE1BQU0sS0FBSztBQUNwRCxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxvQkFBb0IsSUFBSSxFQUNwRCxHQUFHLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSTtBQUFBLFFBQzlCO0FBc0JBLFFBQUFBLFFBQU8scUJBQXFCLFNBQVUsS0FBSyxNQUFNLEtBQUs7QUFDcEQsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sb0JBQW9CLElBQUksRUFDcEQsR0FBRyxJQUFJLEtBQUssSUFBSSxLQUFLLElBQUk7QUFBQSxRQUM5QjtBQTBCQSxRQUFBQSxRQUFPLGlCQUFpQixTQUFVLEtBQUssTUFBTSxLQUFLO0FBQ2hELGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLGdCQUFnQixJQUFJLEVBQ2hELEdBQUcsS0FBSyxJQUFJLEtBQUssS0FBSyxJQUFJO0FBQUEsUUFDL0I7QUF3QkEsUUFBQUEsUUFBTyxpQkFBaUIsU0FBVSxLQUFLLE1BQU0sS0FBSztBQUNoRCxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxnQkFBZ0IsSUFBSSxFQUNoRCxHQUFHLEtBQUssSUFBSSxLQUFLLEtBQUssSUFBSTtBQUFBLFFBQy9CO0FBd0JBLFFBQUFBLFFBQU8sc0JBQXNCLFNBQVUsS0FBSyxNQUFNLEtBQUs7QUFDckQsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8scUJBQXFCLElBQUksRUFDckQsR0FBRyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUk7QUFBQSxRQUNsQztBQXdCQSxRQUFBQSxRQUFPLHlCQUF5QixTQUFVLEtBQUssTUFBTSxLQUFLO0FBQ3hELGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLHdCQUF3QixJQUFJLEVBQ3hELEdBQUcsSUFBSSxLQUFLLElBQUksS0FBSyxLQUFLLElBQUk7QUFBQSxRQUNuQztBQXdCQSxRQUFBQSxRQUFPLHlCQUF5QixTQUFVLEtBQUssTUFBTSxLQUFLO0FBQ3hELGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLHdCQUF3QixJQUFJLEVBQ3hELEdBQUcsSUFBSSxLQUFLLElBQUksS0FBSyxLQUFLLElBQUk7QUFBQSxRQUNuQztBQWlDQSxRQUFBQSxRQUFPLFNBQVMsU0FBVUMsS0FBSSxXQUFXLGVBQWUsS0FBSztBQUMzRCxjQUFJLGFBQWEsT0FBTyxhQUFhLHFCQUFxQixRQUFRO0FBQ2hFLDRCQUFnQjtBQUNoQix3QkFBWTtBQUFBLFVBQ2Q7QUFFQSxjQUFJLFlBQVksSUFBSUYsV0FBVUUsS0FBSSxLQUFLRCxRQUFPLFFBQVEsSUFBSSxFQUN2RCxHQUFHLE1BQU0sV0FBVyxhQUFhO0FBQ3BDLGlCQUFPLEtBQUssV0FBVyxRQUFRO0FBQUEsUUFDakM7QUErQkEsUUFBQUEsUUFBTyxlQUFlLFNBQVVDLEtBQUksV0FBVyxlQUFlLEtBQUs7QUFDakUsY0FBSSxhQUFhLE9BQU8sYUFBYSxxQkFBcUIsUUFBUTtBQUNoRSw0QkFBZ0I7QUFDaEIsd0JBQVk7QUFBQSxVQUNkO0FBRUEsY0FBSUYsV0FBVUUsS0FBSSxLQUFLRCxRQUFPLGNBQWMsSUFBSSxFQUM3QyxHQUFHLElBQUksTUFBTSxXQUFXLGFBQWE7QUFBQSxRQUMxQztBQW1CQSxRQUFBQSxRQUFPLFdBQVcsU0FBVSxLQUFLLFVBQVUsTUFBTSxLQUFLO0FBQ3BELGNBQUk7QUFDSixrQkFBTyxVQUFVO0FBQUEsWUFDZixLQUFLO0FBQ0gsbUJBQUssT0FBTztBQUNaO0FBQUEsWUFDRixLQUFLO0FBQ0gsbUJBQUssUUFBUTtBQUNiO0FBQUEsWUFDRixLQUFLO0FBQ0gsbUJBQUssTUFBTTtBQUNYO0FBQUEsWUFDRixLQUFLO0FBQ0gsbUJBQUssT0FBTztBQUNaO0FBQUEsWUFDRixLQUFLO0FBQ0gsbUJBQUssTUFBTTtBQUNYO0FBQUEsWUFDRixLQUFLO0FBQ0gsbUJBQUssT0FBTztBQUNaO0FBQUEsWUFDRixLQUFLO0FBQ0gsbUJBQUssT0FBTztBQUNaO0FBQUEsWUFDRixLQUFLO0FBQ0gsbUJBQUssUUFBUTtBQUNiO0FBQUEsWUFDRjtBQUNFLG9CQUFNLE1BQU0sTUFBTSxPQUFPO0FBQ3pCLG9CQUFNLElBQUlILE1BQUs7QUFBQSxnQkFDYixNQUFNLHVCQUF1QixXQUFXO0FBQUEsZ0JBQ3hDO0FBQUEsZ0JBQ0FHLFFBQU87QUFBQSxjQUNUO0FBQUEsVUFDSjtBQUNBLGNBQUksT0FBTyxJQUFJRCxXQUFVLElBQUksS0FBS0MsUUFBTyxVQUFVLElBQUk7QUFDdkQsZUFBSztBQUFBLFlBQ0QsU0FBUyxLQUFLLE1BQU0sUUFBUTtBQUFBLFlBQzVCLGNBQWNGLE1BQUssUUFBUSxHQUFHLElBQUksWUFBWSxXQUFXLE1BQU1BLE1BQUssUUFBUSxJQUFJO0FBQUEsWUFDaEYsY0FBY0EsTUFBSyxRQUFRLEdBQUcsSUFBSSxnQkFBZ0IsV0FBVyxNQUFNQSxNQUFLLFFBQVEsSUFBSTtBQUFBLFVBQUU7QUFBQSxRQUM1RjtBQWtCQSxRQUFBRSxRQUFPLFVBQVUsU0FBVSxLQUFLLEtBQUssT0FBTyxLQUFLO0FBQy9DLGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLFNBQVMsSUFBSSxFQUFFLEdBQUcsR0FBRyxRQUFRLEtBQUssS0FBSztBQUFBLFFBQ3hFO0FBa0JBLFFBQUFBLFFBQU8sZ0JBQWdCLFNBQVUsS0FBSyxLQUFLLE9BQU8sS0FBSztBQUNyRCxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxlQUFlLElBQUksRUFDL0MsR0FBRyxHQUFHLGNBQWMsS0FBSyxLQUFLO0FBQUEsUUFDbkM7QUFrQkEsUUFBQUEsUUFBTyxjQUFjLFNBQVUsTUFBTSxNQUFNLEtBQUs7QUFDOUMsY0FBSUQsV0FBVSxNQUFNLEtBQUtDLFFBQU8sYUFBYSxJQUFJLEVBQzlDLEdBQUcsS0FBSyxLQUFLLFFBQVEsSUFBSTtBQUFBLFFBQzlCO0FBa0JBLFFBQUFBLFFBQU8saUJBQWlCLFNBQVUsTUFBTSxNQUFNLEtBQUs7QUFDakQsY0FBSUQsV0FBVSxNQUFNLEtBQUtDLFFBQU8sZ0JBQWdCLElBQUksRUFDakQsR0FBRyxJQUFJLEtBQUssS0FBSyxRQUFRLElBQUk7QUFBQSxRQUNsQztBQWtCQSxRQUFBQSxRQUFPLGtCQUFrQixTQUFVLE1BQU0sTUFBTSxLQUFLO0FBQ2xELGNBQUlELFdBQVUsTUFBTSxLQUFLQyxRQUFPLGlCQUFpQixJQUFJLEVBQ2xELEdBQUcsS0FBSyxLQUFLLEtBQUssUUFBUSxJQUFJO0FBQUEsUUFDbkM7QUFrQkEsUUFBQUEsUUFBTyxxQkFBcUIsU0FBVSxNQUFNLE1BQU0sS0FBSztBQUNyRCxjQUFJRCxXQUFVLE1BQU0sS0FBS0MsUUFBTyxvQkFBb0IsSUFBSSxFQUNyRCxHQUFHLElBQUksS0FBSyxLQUFLLEtBQUssUUFBUSxJQUFJO0FBQUEsUUFDdkM7QUFrQkEsUUFBQUEsUUFBTyxxQkFBcUIsU0FBVSxNQUFNLE1BQU0sS0FBSztBQUNyRCxjQUFJRCxXQUFVLE1BQU0sS0FBS0MsUUFBTyxvQkFBb0IsSUFBSSxFQUNyRCxHQUFHLEtBQUssS0FBSyxRQUFRLFFBQVEsSUFBSTtBQUFBLFFBQ3RDO0FBa0JBLFFBQUFBLFFBQU8sd0JBQXdCLFNBQVUsTUFBTSxNQUFNLEtBQUs7QUFDeEQsY0FBSUQsV0FBVSxNQUFNLEtBQUtDLFFBQU8sdUJBQXVCLElBQUksRUFDeEQsR0FBRyxJQUFJLEtBQUssS0FBSyxRQUFRLFFBQVEsSUFBSTtBQUFBLFFBQzFDO0FBa0JBLFFBQUFBLFFBQU8seUJBQXlCLFNBQVUsTUFBTSxNQUFNLEtBQUs7QUFDekQsY0FBSUQsV0FBVSxNQUFNLEtBQUtDLFFBQU8sd0JBQXdCLElBQUksRUFDekQsR0FBRyxLQUFLLEtBQUssS0FBSyxRQUFRLFFBQVEsSUFBSTtBQUFBLFFBQzNDO0FBbUJBLFFBQUFBLFFBQU8sNEJBQTRCLFNBQVUsTUFBTSxNQUFNLEtBQUs7QUFDNUQsY0FBSUQsV0FBVSxNQUFNLEtBQUtDLFFBQU8sMkJBQTJCLElBQUksRUFDNUQsR0FBRyxJQUFJLEtBQUssS0FBSyxLQUFLLFFBQVEsUUFBUSxJQUFJO0FBQUEsUUFDL0M7QUFrQkEsUUFBQUEsUUFBTyxpQkFBaUIsU0FBVSxVQUFVLFFBQVEsS0FBSztBQUN2RCxjQUFJRCxXQUFVLFVBQVUsS0FBS0MsUUFBTyxnQkFBZ0IsSUFBSSxFQUNyRCxHQUFHLFFBQVEsUUFBUSxNQUFNO0FBQUEsUUFDOUI7QUFrQkEsUUFBQUEsUUFBTyxvQkFBb0IsU0FBVSxVQUFVLFFBQVEsS0FBSztBQUMxRCxjQUFJRCxXQUFVLFVBQVUsS0FBS0MsUUFBTyxtQkFBbUIsSUFBSSxFQUN4RCxHQUFHLElBQUksUUFBUSxRQUFRLE1BQU07QUFBQSxRQUNsQztBQWtCQSxRQUFBQSxRQUFPLHFCQUFxQixTQUFVLFVBQVUsUUFBUSxLQUFLO0FBQzNELGNBQUlELFdBQVUsVUFBVSxLQUFLQyxRQUFPLG9CQUFvQixJQUFJLEVBQ3pELEdBQUcsUUFBUSxLQUFLLFFBQVEsTUFBTTtBQUFBLFFBQ25DO0FBa0JBLFFBQUFBLFFBQU8sd0JBQXdCLFNBQVUsVUFBVSxRQUFRLEtBQUs7QUFDOUQsY0FBSUQsV0FBVSxVQUFVLEtBQUtDLFFBQU8sdUJBQXVCLElBQUksRUFDNUQsR0FBRyxJQUFJLFFBQVEsS0FBSyxRQUFRLE1BQU07QUFBQSxRQUN2QztBQW1CQSxRQUFBQSxRQUFPLHdCQUF3QixTQUFVLFVBQVUsUUFBUSxLQUFLO0FBQzlELGNBQUlELFdBQVUsVUFBVSxLQUFLQyxRQUFPLHVCQUF1QixJQUFJLEVBQzVELEdBQUcsUUFBUSxRQUFRLFFBQVEsTUFBTTtBQUFBLFFBQ3RDO0FBb0JBLFFBQUFBLFFBQU8sMkJBQTJCLFNBQVUsVUFBVSxRQUFRLEtBQUs7QUFDakUsY0FBSUQsV0FBVSxVQUFVLEtBQUtDLFFBQU8sMEJBQTBCLElBQUksRUFDL0QsR0FBRyxJQUFJLFFBQVEsUUFBUSxRQUFRLE1BQU07QUFBQSxRQUMxQztBQW1CQSxRQUFBQSxRQUFPLDRCQUE0QixTQUFVLFVBQVUsUUFBUSxLQUFLO0FBQ2xFLGNBQUlELFdBQVUsVUFBVSxLQUFLQyxRQUFPLDJCQUEyQixJQUFJLEVBQ2hFLEdBQUcsUUFBUSxLQUFLLFFBQVEsUUFBUSxNQUFNO0FBQUEsUUFDM0M7QUFxQkEsUUFBQUEsUUFBTywrQkFBK0IsU0FBVSxVQUFVLFFBQVEsS0FBSztBQUNyRSxjQUFJRCxXQUFVLFVBQVUsS0FBS0MsUUFBTyw4QkFBOEIsSUFBSSxFQUNuRSxHQUFHLElBQUksUUFBUSxLQUFLLFFBQVEsUUFBUSxNQUFNO0FBQUEsUUFDL0M7QUFpQkEsUUFBQUEsUUFBTyxRQUFRLFNBQVUsUUFBUSxNQUFNLEtBQUs7QUFDMUMsY0FBSUQsV0FBVSxRQUFRLEtBQUtDLFFBQU8sT0FBTyxJQUFJLEVBQUUsR0FBRyxHQUFHLE1BQU0sSUFBSTtBQUFBLFFBQ2pFO0FBb0JBLFFBQUFBLFFBQU8sVUFBVSxTQUFVQyxLQUFJLEtBQUssTUFBTSxLQUFLO0FBQzdDLGNBQUksVUFBVSxXQUFXLEtBQUssT0FBTyxRQUFRLFlBQVk7QUFDdkQsa0JBQU07QUFDTixtQkFBTztBQUFBLFVBQ1Q7QUFFQSxjQUFJRixXQUFVRSxLQUFJLEtBQUtELFFBQU8sU0FBUyxJQUFJLEVBQUUsR0FBRyxPQUFPLEtBQUssSUFBSTtBQUFBLFFBQ2xFO0FBcUJBLFFBQUFBLFFBQU8sWUFBWSxTQUFVQyxLQUFJLEtBQUssTUFBTSxPQUFPLEtBQUs7QUFDdEQsY0FBSSxVQUFVLFdBQVcsS0FBSyxPQUFPLFFBQVEsWUFBWTtBQUN2RCxnQkFBSSxTQUFTO0FBQ2Isb0JBQVE7QUFDUixrQkFBTTtBQUFBLFVBQ1IsV0FBVyxVQUFVLFdBQVcsR0FBRztBQUNqQyxvQkFBUTtBQUNSLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGNBQUlGLFdBQVVFLEtBQUksS0FBS0QsUUFBTyxXQUFXLElBQUksRUFDMUMsR0FBRyxPQUFPLEtBQUssSUFBSSxFQUFFLEdBQUcsS0FBSztBQUFBLFFBQ2xDO0FBb0JBLFFBQUFBLFFBQU8sZ0JBQWdCLFNBQVVDLEtBQUksS0FBSyxNQUFNLEtBQUs7QUFDbkQsY0FBSSxVQUFVLFdBQVcsS0FBSyxPQUFPLFFBQVEsWUFBWTtBQUN2RCxrQkFBTTtBQUNOLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGlCQUFPLElBQUlGLFdBQVVFLEtBQUksS0FBS0QsUUFBTyxlQUFlLElBQUksRUFDckQsR0FBRyxJQUFJLE9BQU8sS0FBSyxJQUFJO0FBQUEsUUFDNUI7QUFxQkEsUUFBQUEsUUFBTyxrQkFBa0IsU0FBVUMsS0FBSSxLQUFLLE1BQU0sT0FBTyxLQUFLO0FBQzVELGNBQUksVUFBVSxXQUFXLEtBQUssT0FBTyxRQUFRLFlBQVk7QUFDdkQsZ0JBQUksU0FBUztBQUNiLG9CQUFRO0FBQ1Isa0JBQU07QUFBQSxVQUNSLFdBQVcsVUFBVSxXQUFXLEdBQUc7QUFDakMsb0JBQVE7QUFDUixtQkFBTztBQUFBLFVBQ1Q7QUFFQSxjQUFJRixXQUFVRSxLQUFJLEtBQUtELFFBQU8saUJBQWlCLElBQUksRUFDaEQsR0FBRyxPQUFPLEtBQUssSUFBSSxFQUFFLElBQUksSUFBSSxHQUFHLEtBQUs7QUFBQSxRQUMxQztBQW9CQSxRQUFBQSxRQUFPLFlBQVksU0FBVUMsS0FBSSxLQUFLLE1BQU0sS0FBSztBQUMvQyxjQUFJLFVBQVUsV0FBVyxLQUFLLE9BQU8sUUFBUSxZQUFZO0FBQ3ZELGtCQUFNO0FBQ04sbUJBQU87QUFBQSxVQUNUO0FBRUEsaUJBQU8sSUFBSUYsV0FBVUUsS0FBSSxLQUFLRCxRQUFPLFdBQVcsSUFBSSxFQUNqRCxHQUFHLFNBQVMsS0FBSyxJQUFJO0FBQUEsUUFDMUI7QUFxQkEsUUFBQUEsUUFBTyxjQUFjLFNBQVVDLEtBQUksS0FBSyxNQUFNLE9BQU8sS0FBSztBQUN4RCxjQUFJLFVBQVUsV0FBVyxLQUFLLE9BQU8sUUFBUSxZQUFZO0FBQ3ZELGdCQUFJLFNBQVM7QUFDYixvQkFBUTtBQUNSLGtCQUFNO0FBQUEsVUFDUixXQUFXLFVBQVUsV0FBVyxHQUFHO0FBQ2pDLG9CQUFRO0FBQ1IsbUJBQU87QUFBQSxVQUNUO0FBRUEsY0FBSUYsV0FBVUUsS0FBSSxLQUFLRCxRQUFPLGFBQWEsSUFBSSxFQUM1QyxHQUFHLFNBQVMsS0FBSyxJQUFJLEVBQUUsR0FBRyxLQUFLO0FBQUEsUUFDcEM7QUFvQkEsUUFBQUEsUUFBTyxrQkFBa0IsU0FBVUMsS0FBSSxLQUFLLE1BQU0sS0FBSztBQUNyRCxjQUFJLFVBQVUsV0FBVyxLQUFLLE9BQU8sUUFBUSxZQUFZO0FBQ3ZELGtCQUFNO0FBQ04sbUJBQU87QUFBQSxVQUNUO0FBRUEsaUJBQU8sSUFBSUYsV0FBVUUsS0FBSSxLQUFLRCxRQUFPLGlCQUFpQixJQUFJLEVBQ3ZELEdBQUcsSUFBSSxTQUFTLEtBQUssSUFBSTtBQUFBLFFBQzlCO0FBcUJBLFFBQUFBLFFBQU8sb0JBQW9CLFNBQVVDLEtBQUksS0FBSyxNQUFNLE9BQU8sS0FBSztBQUM5RCxjQUFJLFVBQVUsV0FBVyxLQUFLLE9BQU8sUUFBUSxZQUFZO0FBQ3ZELGdCQUFJLFNBQVM7QUFDYixvQkFBUTtBQUNSLGtCQUFNO0FBQUEsVUFDUixXQUFXLFVBQVUsV0FBVyxHQUFHO0FBQ2pDLG9CQUFRO0FBQ1IsbUJBQU87QUFBQSxVQUNUO0FBRUEsY0FBSUYsV0FBVUUsS0FBSSxLQUFLRCxRQUFPLG1CQUFtQixJQUFJLEVBQ2xELEdBQUcsU0FBUyxLQUFLLElBQUksRUFBRSxJQUFJLElBQUksR0FBRyxLQUFLO0FBQUEsUUFDNUM7QUFvQkEsUUFBQUEsUUFBTyxZQUFZLFNBQVVDLEtBQUksS0FBSyxNQUFNLEtBQUs7QUFDL0MsY0FBSSxVQUFVLFdBQVcsS0FBSyxPQUFPLFFBQVEsWUFBWTtBQUN2RCxrQkFBTTtBQUNOLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGlCQUFPLElBQUlGLFdBQVVFLEtBQUksS0FBS0QsUUFBTyxXQUFXLElBQUksRUFDakQsR0FBRyxTQUFTLEtBQUssSUFBSTtBQUFBLFFBQzFCO0FBcUJBLFFBQUFBLFFBQU8sY0FBYyxTQUFVQyxLQUFJLEtBQUssTUFBTSxPQUFPLEtBQUs7QUFDeEQsY0FBSSxVQUFVLFdBQVcsS0FBSyxPQUFPLFFBQVEsWUFBWTtBQUN2RCxnQkFBSSxTQUFTO0FBQ2Isb0JBQVE7QUFDUixrQkFBTTtBQUFBLFVBQ1IsV0FBVyxVQUFVLFdBQVcsR0FBRztBQUNqQyxvQkFBUTtBQUNSLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGNBQUlGLFdBQVVFLEtBQUksS0FBS0QsUUFBTyxhQUFhLElBQUksRUFDNUMsR0FBRyxTQUFTLEtBQUssSUFBSSxFQUFFLEdBQUcsS0FBSztBQUFBLFFBQ3BDO0FBb0JBLFFBQUFBLFFBQU8sa0JBQWtCLFNBQVVDLEtBQUksS0FBSyxNQUFNLEtBQUs7QUFDckQsY0FBSSxVQUFVLFdBQVcsS0FBSyxPQUFPLFFBQVEsWUFBWTtBQUN2RCxrQkFBTTtBQUNOLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGlCQUFPLElBQUlGLFdBQVVFLEtBQUksS0FBS0QsUUFBTyxpQkFBaUIsSUFBSSxFQUN2RCxHQUFHLElBQUksU0FBUyxLQUFLLElBQUk7QUFBQSxRQUM5QjtBQXFCQSxRQUFBQSxRQUFPLG9CQUFvQixTQUFVQyxLQUFJLEtBQUssTUFBTSxPQUFPLEtBQUs7QUFDOUQsY0FBSSxVQUFVLFdBQVcsS0FBSyxPQUFPLFFBQVEsWUFBWTtBQUN2RCxnQkFBSSxTQUFTO0FBQ2Isb0JBQVE7QUFDUixrQkFBTTtBQUFBLFVBQ1IsV0FBVyxVQUFVLFdBQVcsR0FBRztBQUNqQyxvQkFBUTtBQUNSLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGlCQUFPLElBQUlGLFdBQVVFLEtBQUksS0FBS0QsUUFBTyxtQkFBbUIsSUFBSSxFQUN6RCxHQUFHLElBQUksU0FBUyxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUs7QUFBQSxRQUN4QztBQXFCQSxRQUFBQSxRQUFPLG9CQUFvQixTQUFVQyxLQUFJLEtBQUssTUFBTSxPQUFPLEtBQUs7QUFDOUQsY0FBSSxVQUFVLFdBQVcsS0FBSyxPQUFPLFFBQVEsWUFBWTtBQUN2RCxnQkFBSSxTQUFTO0FBQ2Isb0JBQVE7QUFDUixrQkFBTTtBQUFBLFVBQ1IsV0FBVyxVQUFVLFdBQVcsR0FBRztBQUNqQyxvQkFBUTtBQUNSLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGNBQUlGLFdBQVVFLEtBQUksS0FBS0QsUUFBTyxtQkFBbUIsSUFBSSxFQUNsRCxHQUFHLFNBQVMsS0FBSyxJQUFJLEVBQUUsSUFBSSxJQUFJLEdBQUcsS0FBSztBQUFBLFFBQzVDO0FBa0JBLFFBQUFBLFFBQU8sVUFBVSxTQUFVLEtBQUs7QUFDOUIsY0FBSSxLQUFLO0FBQ1Asa0JBQU07QUFBQSxVQUNSO0FBQUEsUUFDRjtBQWlCQSxRQUFBQSxRQUFPLGVBQWUsU0FBVSxLQUFLLEtBQUs7QUFDeEMsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sY0FBYyxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQUEsUUFDM0Q7QUF1QkEsUUFBQUEsUUFBTyxrQkFBa0IsU0FBVSxLQUFLLEtBQUs7QUFDM0MsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8saUJBQWlCLElBQUksRUFBRSxHQUFHLElBQUksR0FBRztBQUFBLFFBQ2xFO0FBc0JBLFFBQUFBLFFBQU8sV0FBVyxTQUFVLEtBQUssS0FBSztBQUNwQyxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxVQUFVLElBQUksRUFBRSxHQUFHLEdBQUc7QUFBQSxRQUN2RDtBQWlCQSxRQUFBQSxRQUFPLGNBQWMsU0FBVSxLQUFLLEtBQUs7QUFDdkMsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sYUFBYSxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUc7QUFBQSxRQUM5RDtBQW1CQSxRQUFBQSxRQUFPLFdBQVcsU0FBVSxLQUFLLEtBQUs7QUFDcEMsY0FBSUQsV0FBVSxLQUFLLEtBQUtDLFFBQU8sVUFBVSxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQUEsUUFDdkQ7QUFpQkEsUUFBQUEsUUFBTyxjQUFjLFNBQVUsS0FBSyxLQUFLO0FBQ3ZDLGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLGFBQWEsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHO0FBQUEsUUFDOUQ7QUF3QkEsUUFBQUEsUUFBTyxVQUFVLFNBQVMsS0FBSyxLQUFLO0FBQ2xDLGNBQUlELFdBQVUsS0FBSyxLQUFLQyxRQUFPLFNBQVMsSUFBSSxFQUFFLEdBQUcsR0FBRztBQUFBLFFBQ3REO0FBd0JBLFFBQUFBLFFBQU8sYUFBYSxTQUFTLEtBQUssS0FBSztBQUNyQyxjQUFJRCxXQUFVLEtBQUssS0FBS0MsUUFBTyxZQUFZLElBQUksRUFBRSxHQUFHLElBQUksR0FBRztBQUFBLFFBQzdEO0FBTUEsU0FBQyxTQUFTLE1BQU0sTUFBTSxJQUFHO0FBQ3ZCLFVBQUFBLFFBQU8sRUFBRSxJQUFJQSxRQUFPLElBQUk7QUFDeEIsaUJBQU87QUFBQSxRQUNULEdBQ0MsUUFBUSxJQUFJLEVBQ1osV0FBVyxPQUFPLEVBQ2xCLFVBQVUsT0FBTyxFQUNqQixVQUFVLE9BQU8sRUFDakIsZ0JBQWdCLFlBQVksRUFDNUIsbUJBQW1CLGVBQWUsRUFDbEMsWUFBWSxRQUFRLEVBQ3BCLGVBQWUsV0FBVyxFQUMxQixZQUFZLFFBQVEsRUFDcEIsZUFBZSxXQUFXLEVBQzFCLFdBQVcsT0FBTyxFQUNsQixjQUFjLFVBQVU7QUFBQSxNQUMzQjtBQUFBO0FBQUE7OztBQ3hpR0E7QUFBQTtBQU1BLFVBQUksT0FBTyxDQUFDO0FBTVosY0FBUSxVQUFVO0FBTWxCLGNBQVEsaUJBQWlCO0FBTXpCLFVBQUlFLFFBQU87QUFZWCxjQUFRLE1BQU0sU0FBVUMsS0FBSTtBQUMxQixZQUFJLENBQUMsQ0FBQyxLQUFLLFFBQVFBLEdBQUUsR0FBRztBQUN0QixVQUFBQSxJQUFHLFNBQVNELEtBQUk7QUFDaEIsZUFBSyxLQUFLQyxHQUFFO0FBQUEsUUFDZDtBQUVBLGVBQU87QUFBQSxNQUNUO0FBTUEsY0FBUSxPQUFPRDtBQU1mLFVBQUlFLFVBQVM7QUFDYixjQUFRLFNBQVNBO0FBTWpCLFVBQUksWUFBWTtBQUNoQixjQUFRLElBQUksU0FBUztBQU1yQixVQUFJQyxRQUFPO0FBQ1gsY0FBUSxJQUFJQSxLQUFJO0FBTWhCLFVBQUlDLFdBQVM7QUFDYixjQUFRLElBQUlBLFFBQU07QUFNbEIsVUFBSUMsVUFBUztBQUNiLGNBQVEsSUFBSUEsT0FBTTtBQU1sQixVQUFJQyxVQUFTO0FBQ2IsY0FBUSxJQUFJQSxPQUFNO0FBQUE7QUFBQTs7O0FDM0ZsQixNQUFBQyxnQkFBQTtBQUFBO0FBQUEsYUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDcUJqQixXQUFTLE9BQU8sT0FBTztBQUN0QixRQUFJLE9BQU8sQ0FBQyxFQUFFLFNBQVMsS0FBSyxLQUFLLEVBQUUsTUFBTSxlQUFlLEVBQUUsQ0FBQztBQUMzRCxRQUFJLGFBQWEsTUFBTTtBQUN0QixZQUFNLE9BQU8sTUFBTSxZQUFZO0FBQy9CLFVBQUksTUFBTTtBQUNULGVBQU8sS0FBSyxZQUFZO0FBQUEsTUFDekI7QUFFQSxZQUFNLFVBQVUsNEJBQTRCO0FBQUEsUUFDM0MsTUFBTSxZQUFZLFNBQVM7QUFBQSxNQUM1QjtBQUNBLGFBQU8sV0FBVyxRQUFRLFNBQVMsSUFBSSxRQUFRLENBQUMsSUFBSTtBQUFBLElBQ3JEO0FBRUEsV0FBTyxLQUFLLFlBQVk7QUFBQSxFQUN6QjtBQXBDQTtBQUFBO0FBQUE7QUFBQTs7O0FDMkJBLFdBQVMsVUFBVSxNQUFNO0FBQ3hCLFFBQUk7QUFDSixRQUFJO0FBRUosUUFBSSxPQUFPLFNBQVMsWUFBWSxLQUFLLENBQUMsTUFBTSxNQUFNO0FBQ2pELFlBQU0sSUFBSSxNQUFNLHdCQUF3QixLQUFLLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQUEsSUFDbEU7QUFFQSxTQUFLLElBQUksR0FBRyxJQUFJLEtBQUssUUFBUSxLQUFLO0FBQ2pDLFlBQU1DLEtBQUksS0FBSyxDQUFDO0FBRWhCLFVBQUksRUFBRSxTQUFTQSxFQUFDLEtBQUssUUFBUUEsRUFBQyxJQUFJO0FBQ2pDLGNBQU0sSUFBSSxNQUFNLHdCQUF3QixLQUFLLFVBQVVBLEVBQUMsQ0FBQyxFQUFFO0FBQUEsTUFDNUQ7QUFFQSxVQUFJLE1BQU0sUUFBVztBQUNwQixZQUFJQTtBQUNKO0FBQUEsTUFDRDtBQUVBLGlCQUFXLEtBQUtBLElBQUc7QUFDbEIsY0FBTSxJQUFJQSxLQUFJLENBQUM7QUFFZixZQUFJLE1BQU0sSUFBSSxDQUFDLEdBQUc7QUFDakI7QUFBQSxRQUNEO0FBRUEsWUFBSyxTQUFTLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxZQUFhLFFBQVEsQ0FBQyxHQUFHO0FBQzFELGNBQUksRUFBRSxDQUFDLE1BQU0sUUFBVztBQUN2QixnQkFBSSxRQUFRLENBQUMsR0FBRztBQUNmLGdCQUFFLENBQUMsSUFBSSxDQUFDO0FBQUEsWUFDVCxPQUFPO0FBQ04sZ0JBQUUsQ0FBQyxJQUFJLENBQUM7QUFBQSxZQUNUO0FBQUEsVUFDRCxPQUFPO0FBQ04sZ0JBQUksT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxHQUFHO0FBQy9CLG9CQUFNLElBQUk7QUFBQSxnQkFDVCxrQkFBa0IsS0FBSyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSTtBQUFBLGtCQUN6QyxFQUFFLENBQUM7QUFBQSxnQkFDSixDQUFDLFFBQVEsS0FBSyxVQUFVLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDO0FBQUEsY0FDeEM7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUVBLFlBQUUsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQztBQUFBLFFBQ3RCLE9BQU87QUFDTixZQUFFLENBQUMsSUFBSTtBQUFBLFFBQ1I7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBLFdBQU87QUFBQSxFQUNSO0FBL0VBO0FBQUE7QUFPQTtBQUNBO0FBQUE7QUFBQTs7O0FDUkE7QUFBQTtBQUFBO0FBQUEsT0FBQyxXQUFZO0FBQ1Q7QUFFQSxjQUFNLFNBQVMsb0JBQUksUUFBUTtBQUMzQixjQUFNLGNBQWMsb0JBQUksUUFBUTtBQUNoQyxjQUFNLGlCQUFpQixvQkFBSSxRQUFRO0FBQ25DLGNBQU0sZUFBZSxvQkFBSSxRQUFRO0FBQ2pDLGNBQU0sdUJBQXVCLG9CQUFJLFFBQVE7QUFDekMsY0FBTSxXQUFXLG9CQUFJLFFBQVE7QUFDN0IsY0FBTSxpQkFBaUIsb0JBQUksUUFBUTtBQUNuQyxjQUFNLGtCQUFrQixvQkFBSSxRQUFRO0FBQ3BDLGNBQU0sY0FBYyxvQkFBSSxRQUFRO0FBQ2hDLGNBQU0sYUFBYSxvQkFBSSxRQUFRO0FBQy9CLGNBQU0sZ0JBQWdCLG9CQUFJLFFBQVE7QUFDbEMsY0FBTSxzQkFBc0Isb0JBQUksUUFBUTtBQUN4QyxjQUFNLHNCQUFzQixvQkFBSSxRQUFRO0FBQ3hDLGNBQU0sdUJBQXVCLG9CQUFJLFFBQVE7QUFDekMsY0FBTSxxQkFBcUIsb0JBQUksUUFBUTtBQUV2QyxjQUFNLE1BQU07QUFBQSxVQUNSLFlBQVk7QUFBQSxVQUNaLGtCQUFrQjtBQUFBLFVBQ2xCLFVBQVU7QUFBQSxVQUNWLGFBQWE7QUFBQSxVQUNiLGNBQWM7QUFBQSxVQUNkLGNBQWM7QUFBQSxVQUNkLGtCQUFrQjtBQUFBLFVBQ2xCLGFBQWE7QUFBQSxVQUNiLGFBQWE7QUFBQSxVQUNiLGNBQWM7QUFBQSxVQUNkLGNBQWM7QUFBQSxVQUNkLGNBQWM7QUFBQSxVQUNkLFlBQVk7QUFBQSxVQUNaLGFBQWE7QUFBQSxVQUNiLGtCQUFrQjtBQUFBLFVBQ2xCLFdBQVc7QUFBQSxVQUNYLFdBQVc7QUFBQSxVQUNYLFVBQVU7QUFBQSxVQUNWLFdBQVc7QUFBQSxVQUNYLGVBQWU7QUFBQSxVQUNmLHFCQUFxQjtBQUFBLFVBQ3JCLGlCQUFpQjtBQUFBLFVBQ2pCLGlCQUFpQjtBQUFBLFVBQ2pCLGNBQWM7QUFBQSxVQUNkLGFBQWE7QUFBQSxVQUNiLGNBQWM7QUFBQSxVQUNkLGNBQWM7QUFBQSxVQUNkLGNBQWM7QUFBQSxVQUNkLHFCQUFxQjtBQUFBLFVBQ3JCLGNBQWM7QUFBQSxVQUNkLGNBQWM7QUFBQSxVQUNkLGtCQUFrQjtBQUFBLFVBQ2xCLGFBQWE7QUFBQSxVQUNiLGNBQWM7QUFBQSxVQUNkLGFBQWE7QUFBQSxVQUNiLFVBQVU7QUFBQSxVQUNWLGNBQWM7QUFBQSxVQUNkLGNBQWM7QUFBQSxVQUNkLGNBQWM7QUFBQSxVQUNkLGVBQWU7QUFBQSxVQUNmLE1BQU07QUFBQSxRQUNWO0FBQ0EsY0FBTSxVQUFVLENBQUMsS0FBSyxjQUFjO0FBQ2hDLG1CQUFTLE9BQU8sS0FBSztBQUNqQixzQkFBVSxHQUFHLElBQUk7QUFDakIsZ0JBQUksZUFBZTtBQUNuQixrQkFBTSxnQkFBZ0IsSUFBSSxHQUFHO0FBQzdCLG1CQUFPLGVBQWUsV0FBVyxLQUFLO0FBQUEsY0FDbEMsTUFBTTtBQUNGLHVCQUFPO0FBQUEsY0FDWDtBQUFBLGNBQ0EsSUFBSSxPQUFPO0FBQ1AsK0JBQWU7QUFDZixvQkFBSSxJQUFJLGFBQWE7QUFDakIsc0JBQUksYUFBYSxlQUFlLEtBQUs7QUFBQSxnQkFDekMsT0FDSztBQUNELDZCQUFXLElBQUksS0FBSyxTQUFTO0FBQUEsZ0JBQ2pDO0FBQUEsY0FDSjtBQUFBLFlBQ0osQ0FBQztBQUFBLFVBQ0w7QUFBQSxRQUNKO0FBRUEsaUJBQVMsU0FBUyxNQUFNO0FBQ3BCLGdCQUFNLFlBQVksYUFBYSxJQUFJLElBQUk7QUFDdkMsZ0JBQU0sRUFBRSxLQUFLLElBQUk7QUFDakIsbUJBQVMsTUFBTSxNQUFNLFNBQVM7QUFDOUIscUJBQVcsTUFBTSxVQUFVLE1BQU07QUFBQSxRQUNyQztBQUNBLGNBQU0sZUFBZSxDQUFDLE1BQU0sY0FBYyxVQUFVO0FBQ2hELGdCQUFNLFNBQVMsU0FBUyxpQkFBaUIsTUFBTSxXQUFXLGNBQWM7QUFBQSxZQUNwRSxXQUFXQyxPQUFNO0FBQ2IscUJBQU8sYUFBYSxJQUFJQSxLQUFJLElBQ3hCLFdBQVcsZ0JBQWdCLFdBQVc7QUFBQSxZQUM5QztBQUFBLFVBQ0osQ0FBQztBQUNELGNBQUksVUFBVSxPQUFPLFNBQVM7QUFDOUIsZ0JBQU0sa0JBQW1CLENBQUMsZUFBZSxLQUFLO0FBQzlDLGlCQUFPLFNBQVM7QUFDWixnQkFBSSxRQUFRLHdCQUF3QixpQkFBaUI7QUFDakQsMEJBQVksU0FBUyxLQUFLLFFBQVE7QUFBQSxZQUN0QztBQUNBLHNCQUFVLE9BQU8sU0FBUztBQUFBLFVBQzlCO0FBQUEsUUFDSjtBQUNBLGNBQU0sK0JBQStCLEVBQUUsWUFBWSxNQUFNLGlCQUFpQixDQUFDLFlBQVksTUFBTSxFQUFFO0FBQy9GLGNBQU0seUJBQXlCLHVCQUF1QixJQUFJLElBQUksaUJBQWlCLENBQUMsa0JBQWtCO0FBQzlGLHFCQUFXLFlBQVksZUFBZTtBQUNsQyxrQkFBTSxTQUFTLFNBQVM7QUFDeEIsZ0JBQUksU0FBUyxrQkFBa0IsWUFBWTtBQUN2QyxrQkFBSSxPQUFPLFlBQVksZ0JBQWdCLEdBQUc7QUFDdEMsNEJBQVksUUFBUSxPQUFPLGFBQWEsVUFBVSxDQUFDO0FBQUEsY0FDdkQsV0FDUyxPQUFPLGNBQWMsWUFBWTtBQUN0Qyw2QkFBYSxNQUFNO0FBQUEsY0FDdkI7QUFBQSxZQUNKO0FBQ0EsZ0JBQUksU0FBUyxrQkFBa0IsUUFBUTtBQUNuQyxrQkFBSSxPQUFPLFlBQVksZ0JBQWdCLEdBQUc7QUFDdEMsc0JBQU0sWUFBWSxhQUFhLElBQUksTUFBTTtBQUN6QyxzQkFBTSxRQUFRLFlBQVksSUFBSSxNQUFNO0FBQ3BDLDBCQUFVLGFBQWEsS0FBSztBQUFBLGNBQ2hDO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKLENBQUMsSUFBSSxDQUFDO0FBQ04saUJBQVMsaUJBQWlCLGNBQWM7QUFDcEMsdUJBQWEsUUFBUSxvQkFBa0I7QUFDbkMsa0JBQU0sRUFBRSxZQUFBQyxhQUFZLGFBQWEsSUFBSTtBQUNyQyxrQkFBTSxRQUFRLE1BQU0sS0FBS0EsV0FBVTtBQUNuQyxrQkFBTSxVQUFVLE1BQU0sS0FBSyxZQUFZO0FBQ3ZDLGtCQUFNLFFBQVEsVUFBUTtBQUNsQixrQkFBSSxhQUFhLElBQUksSUFBSSxLQUFLLEtBQUssWUFBWSxnQkFBZ0IsR0FBRztBQUM5RCx5QkFBUyxJQUFJO0FBQUEsY0FDakI7QUFDQSxrQkFBSSxXQUFXLElBQUksSUFBSSxHQUFHO0FBQ3RCLHNCQUFNLFlBQVksV0FBVyxJQUFJLElBQUk7QUFDckMsc0JBQU0sVUFBVSxPQUFPLEtBQUssR0FBRztBQUMvQix3QkFDSyxPQUFPLFNBQU8sVUFBVSxHQUFHLE1BQU0sSUFBSSxFQUNyQyxRQUFRLFNBQU87QUFDaEIsdUJBQUssYUFBYSxJQUFJLEdBQUcsR0FBRyxVQUFVLEdBQUcsQ0FBQztBQUFBLGdCQUM5QyxDQUFDO0FBQ0QsMkJBQVcsT0FBTyxJQUFJO0FBQUEsY0FDMUI7QUFDQSxrQkFBSSxtQkFBbUIsSUFBSSxJQUFJLEdBQUc7QUFDOUIsc0JBQU0sWUFBWSxtQkFBbUIsSUFBSSxJQUFJO0FBQzdDLHFCQUFLLGFBQWEsbUJBQW1CLFVBQVUsU0FBUyxNQUFNLFNBQVMsQ0FBQztBQUN4RSxxQkFBSyxhQUFhLHNCQUFzQixDQUFDLFVBQVUsU0FBUyxPQUFPLFNBQVMsQ0FBQztBQUM3RSxxQkFBSyxhQUFhLGlCQUFpQixDQUFDLFVBQVUsU0FBUyxPQUFPLFNBQVMsQ0FBQztBQUN4RSxtQ0FBbUIsT0FBTyxJQUFJO0FBQUEsY0FDbEM7QUFDQSxrQkFBSSxLQUFLLGNBQWMsUUFBUTtBQUMzQixzQkFBTSxlQUFlLGdCQUFnQixJQUFJLElBQUk7QUFDN0Msc0JBQU0sU0FBUyxTQUFTLGlCQUFpQixNQUFNLFdBQVcsY0FBYztBQUFBLGtCQUNwRSxXQUFXRCxPQUFNO0FBQ2IsMkJBQVEsYUFBYSxJQUFJQSxLQUFJLEtBQUtBLE1BQUssWUFBWSxnQkFBZ0IsS0FBSyxFQUFFLGdCQUFnQixhQUFhLElBQUlBLEtBQUksS0FBTSxXQUFXLGdCQUFnQixXQUFXO0FBQUEsa0JBQy9KO0FBQUEsZ0JBQ0osQ0FBQztBQUNELG9CQUFJLFVBQVUsT0FBTyxTQUFTO0FBQzlCLHVCQUFPLFNBQVM7QUFDWiwyQkFBUyxPQUFPO0FBQ2hCLDRCQUFVLE9BQU8sU0FBUztBQUFBLGdCQUM5QjtBQUFBLGNBQ0o7QUFDQSxrQkFBSSxLQUFLLGNBQWMsWUFBWTtBQUMvQix1Q0FBdUIsVUFBVSxNQUFNLDRCQUE0QjtBQUNuRSw2QkFBYSxNQUFNLElBQUk7QUFBQSxjQUMzQjtBQUFBLFlBQ0osQ0FBQztBQUNELG9CQUFRLFFBQVEsVUFBUTtBQUNwQixvQkFBTSxZQUFZLGFBQWEsSUFBSSxJQUFJO0FBQ3ZDLGtCQUFJLGFBQWEsZUFBZSxJQUFJLFNBQVMsR0FBRztBQUM1QyxtQ0FBbUIsU0FBUztBQUFBLGNBQ2hDO0FBQ0Esa0JBQUksZUFBZSxJQUFJLElBQUksR0FBRztBQUMxQixzQkFBTSxXQUFXLGVBQWUsSUFBSSxJQUFJO0FBQ3hDLHlCQUFTLFdBQVc7QUFBQSxjQUN4QjtBQUFBLFlBQ0osQ0FBQztBQUFBLFVBQ0wsQ0FBQztBQUFBLFFBQ0w7QUFDQSxpQkFBUyx5QkFBeUIsY0FBYztBQUM1Qyx1QkFBYSxRQUFRLGNBQVk7QUFDN0Isa0JBQU0sRUFBRSxhQUFhLElBQUk7QUFDekIseUJBQWEsUUFBUSxVQUFRO0FBQ3pCLG9CQUFNLFdBQVcsb0JBQW9CLElBQUksU0FBUyxNQUFNO0FBQ3hELGtCQUFJLGFBQWEsSUFBSSxJQUFJLEdBQUc7QUFDeEIsaUNBQWlCLElBQUk7QUFBQSxjQUN6QjtBQUNBLHVCQUFTLFdBQVc7QUFBQSxZQUN4QixDQUFDO0FBQUEsVUFDTCxDQUFDO0FBQUEsUUFDTDtBQUNBLGNBQU0sZUFBZSxDQUFDLGFBQWE7QUFDL0IsZ0JBQU0sV0FBVyxJQUFJLGlCQUFpQix3QkFBd0I7QUFDOUQsbUJBQVMsVUFBVSxVQUFVLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFDaEQsOEJBQW9CLElBQUksVUFBVSxRQUFRO0FBQUEsUUFDOUM7QUFDQSwrQkFBdUIsSUFBSSxJQUFJLGlCQUFpQixnQkFBZ0IsSUFBSSxDQUFDO0FBQ3JFLGNBQU0saUJBQWlCO0FBQUEsVUFDbkIsV0FBVztBQUFBLFVBQ1gsU0FBUztBQUFBLFFBQ2I7QUFFQSxjQUFNLGNBQWMsQ0FBQyxLQUFLLGFBQWE7QUFDbkMsY0FBSSxnQkFBZ0Isc0JBQXNCLFFBQVE7QUFDbEQsY0FBSSxVQUFVO0FBQ1YsZ0JBQUksYUFBYSxpQkFBaUIsTUFBTTtBQUFBLFVBQzVDLE9BQ0s7QUFDRCxnQkFBSSxnQkFBZ0IsZUFBZTtBQUFBLFVBQ3ZDO0FBQ0EsY0FBSSxJQUFJLHNCQUFzQjtBQUMxQixnQkFBSSxxQkFBcUIsTUFBTSxLQUFLLENBQUMsUUFBUSxDQUFDO0FBQUEsVUFDbEQ7QUFBQSxRQUNKO0FBQ0EsY0FBTSxxQkFBcUIsQ0FBQyxjQUFjO0FBQ3RDLGdCQUFNLGVBQWUsZUFBZSxJQUFJLFNBQVM7QUFDakQsdUJBQWEsUUFBUSxpQkFBZTtBQUNoQyx3QkFBWSxPQUFPO0FBQUEsVUFDdkIsQ0FBQztBQUNELHlCQUFlLElBQUksV0FBVyxDQUFDLENBQUM7QUFBQSxRQUNwQztBQUNBLGNBQU0sb0JBQW9CLENBQUMsS0FBSyxjQUFjO0FBQzFDLGdCQUFNLFFBQVEsU0FBUyxjQUFjLE9BQU87QUFDNUMsZ0JBQU0sT0FBTztBQUNiLGdCQUFNLE9BQU8sSUFBSSxhQUFhLE1BQU07QUFDcEMsY0FBSSxNQUFNLEtBQUs7QUFDZix5QkFBZSxJQUFJLFNBQVMsRUFBRSxLQUFLLEtBQUs7QUFDeEMsaUJBQU87QUFBQSxRQUNYO0FBQ0EsY0FBTSxVQUFVLENBQUMsS0FBSyxjQUFjO0FBQ2hDLHlCQUFlLElBQUksV0FBVyxDQUFDLENBQUM7QUFDaEMsaUNBQXVCLFVBQVUsS0FBSyw0QkFBNEI7QUFBQSxRQUN0RTtBQUNBLGNBQU0sYUFBYSxDQUFDLEtBQUssV0FBVztBQUNoQyxjQUFJLE9BQU8sUUFBUTtBQUNmLGtCQUFNLEtBQUssTUFBTSxFQUFFLFFBQVEsV0FBUyxNQUFNLGlCQUFpQixTQUFTLElBQUksTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3hGLGdCQUFJLGVBQWUsT0FBTyxDQUFDLEVBQUU7QUFDN0IsZ0JBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJO0FBQ2YsNkJBQWUsR0FBRyxPQUFPLENBQUMsRUFBRSxPQUFPO0FBQ25DLHFCQUFPLENBQUMsRUFBRSxLQUFLO0FBQUEsWUFDbkI7QUFDQSxnQkFBSSxhQUFhLG1CQUFtQixZQUFZO0FBQUEsVUFDcEQ7QUFBQSxRQUNKO0FBQ0EsY0FBTSxrQkFBa0IsQ0FBQyxTQUFTO0FBQzlCLGdCQUFNLHdCQUF3QixNQUFNLEtBQUssS0FBSyxRQUFRLEVBQ2pELE9BQU8sQ0FBQyxZQUFZLENBQUMsUUFBUSxRQUFRLFNBQVMsR0FBRyxLQUFLLFFBQVEsUUFBUSxFQUN0RSxJQUFJLENBQUMsWUFBWSxRQUFRLFNBQVMsS0FBSztBQUM1QyxnQkFBTSxxQkFBcUIsZ0JBQWdCLElBQUksSUFBSSxLQUFLLENBQUM7QUFDekQsZ0JBQU0scUJBQXFCLE1BQU0sS0FBSyxrQkFBa0IsRUFDbkQsT0FBTyxhQUFXLFFBQVEsV0FBVyxFQUNyQyxJQUFJLENBQUMsWUFBWSxhQUFhLElBQUksT0FBTyxFQUFFLFNBQVMsS0FBSztBQUM5RCxnQkFBTSxhQUFhLENBQUMsR0FBRyx1QkFBdUIsR0FBRyxrQkFBa0IsRUFBRSxTQUFTLEtBQUs7QUFDbkYsZUFBSyxnQkFBZ0IscUJBQXFCLFVBQVU7QUFDcEQsZUFBSyxnQkFBZ0IsbUJBQW1CLENBQUMsVUFBVTtBQUFBLFFBQ3ZEO0FBQ0EsY0FBTSxvQkFBb0IsQ0FBQyxVQUFVO0FBQ2pDLDBCQUFnQixlQUFlLE1BQU0sTUFBTSxDQUFDO0FBQUEsUUFDaEQ7QUFDQSxjQUFNLHFCQUFxQixDQUFDLFVBQVU7QUFDbEMsMEJBQWdCLGVBQWUsTUFBTSxNQUFNLENBQUM7QUFBQSxRQUNoRDtBQUNBLGNBQU0sa0JBQWtCLENBQUMsU0FBUztBQUM5QixnQkFBTSx1QkFBdUIsQ0FBQyx1QkFBdUIsc0JBQXNCLG9CQUFvQixFQUMxRixJQUFJLFNBQU8sR0FBRyxHQUFHLGtCQUFrQixFQUNuQyxJQUFJLFNBQU8sR0FBRyxHQUFHLGVBQWUsS0FBSyxLQUFLLElBQUksR0FBRyxVQUFVLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUM3RSxLQUFLLEdBQUc7QUFDYixlQUFLLGlCQUFpQixTQUFTLFdBQVM7QUFDcEMsa0JBQU0sU0FBUyxNQUFNO0FBQ3JCLGdCQUFJLE9BQU8sUUFBUSxvQkFBb0IsR0FBRztBQUN0QyxvQkFBTSxXQUFXLGdCQUFnQixJQUFJLElBQUk7QUFDekMsa0JBQUksS0FBSyxZQUFZO0FBQ2pCO0FBQUEsY0FDSjtBQUNBLGtCQUFJLFNBQVMsTUFBTTtBQUNmLHNCQUFNLFFBQVEsTUFBTSxLQUFLLFFBQVE7QUFDakMsc0JBQU0sZUFBZSxNQUNoQixRQUFRLEVBQ1IsSUFBSSxVQUFRO0FBQ2Isd0JBQU0sWUFBWSxhQUFhLElBQUksSUFBSTtBQUN2Qyx5QkFBTyxVQUFVLGVBQWU7QUFBQSxnQkFDcEMsQ0FBQztBQUNELG9CQUFJLGFBQWEsU0FBUyxLQUFLLEdBQUc7QUFDOUIsd0JBQU0sZUFBZTtBQUFBLGdCQUN6QjtBQUFBLGNBQ0o7QUFBQSxZQUNKO0FBQUEsVUFDSixDQUFDO0FBQUEsUUFDTDtBQUNBLGNBQU0sb0JBQW9CLENBQUMsVUFBVTtBQUNqQyxnQkFBTSxXQUFXLGdCQUFnQixJQUFJLE1BQU0sTUFBTTtBQUNqRCxjQUFJLFlBQVksU0FBUyxNQUFNO0FBQzNCLHFCQUFTLFFBQVEsYUFBVztBQUN4QixrQkFBSSxRQUFRLFlBQVksa0JBQWtCLFFBQVEsbUJBQW1CO0FBQ2pFLHdCQUFRLGtCQUFrQixNQUFNLE9BQU87QUFBQSxjQUMzQztBQUFBLFlBQ0osQ0FBQztBQUFBLFVBQ0w7QUFBQSxRQUNKO0FBQ0EsY0FBTSxXQUFXLENBQUMsS0FBSyxNQUFNLGNBQWM7QUFDdkMsY0FBSSxNQUFNO0FBQ04sa0JBQU0sZUFBZSxnQkFBZ0IsSUFBSSxJQUFJO0FBQzdDLGdCQUFJLGNBQWM7QUFDZCwyQkFBYSxJQUFJLEdBQUc7QUFBQSxZQUN4QixPQUNLO0FBQ0Qsb0JBQU0sVUFBVSxvQkFBSSxJQUFJO0FBQ3hCLHNCQUFRLElBQUksR0FBRztBQUNmLDhCQUFnQixJQUFJLE1BQU0sT0FBTztBQUNqQyw4QkFBZ0IsSUFBSTtBQUNwQixtQkFBSyxpQkFBaUIsU0FBUyxpQkFBaUI7QUFDaEQsbUJBQUssaUJBQWlCLFNBQVMsaUJBQWlCO0FBQ2hELG1CQUFLLGlCQUFpQixVQUFVLGtCQUFrQjtBQUFBLFlBQ3REO0FBQ0EscUJBQVMsSUFBSSxNQUFNLEVBQUUsS0FBSyxVQUFVLENBQUM7QUFDckMsZ0JBQUksSUFBSSxZQUFZLGdCQUFnQixLQUFLLElBQUksd0JBQXdCO0FBQ2pFLHlCQUFXLE1BQU07QUFDYixvQkFBSSx1QkFBdUIsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQUEsY0FDaEQsR0FBRyxDQUFDO0FBQUEsWUFDUjtBQUNBLDRCQUFnQixJQUFJO0FBQUEsVUFDeEI7QUFBQSxRQUNKO0FBQ0EsY0FBTSxpQkFBaUIsQ0FBQyxTQUFTO0FBQzdCLGNBQUksU0FBUyxLQUFLO0FBQ2xCLGNBQUksVUFBVSxPQUFPLFlBQVksUUFBUTtBQUNyQyxxQkFBUyxlQUFlLE1BQU07QUFBQSxVQUNsQztBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUNBLGNBQU0sMkJBQTJCLENBQUMsS0FBSyxTQUFTLFlBQVksaUJBQWlCO0FBQ3pFLGNBQUksQ0FBQyxJQUFJLFlBQVksZ0JBQWdCLEdBQUc7QUFDcEMsa0JBQU0sSUFBSSxVQUFVLE9BQU87QUFBQSxVQUMvQjtBQUFBLFFBQ0o7QUFDQSxjQUFNLHFCQUFxQixDQUFDLE1BQU0sYUFBYSxXQUFXO0FBQ3RELGdCQUFNLFdBQVcsZ0JBQWdCLElBQUksSUFBSTtBQUN6QyxjQUFJLFlBQVksU0FBUyxNQUFNO0FBQzNCLHFCQUFTLFFBQVEsYUFBVztBQUN4QixvQkFBTSxZQUFZLGFBQWEsSUFBSSxPQUFPO0FBQzFDLG9CQUFNLFFBQVEsVUFBVSxNQUFNLEVBQUU7QUFDaEMsa0JBQUksQ0FBQyxPQUFPO0FBQ1IsOEJBQWM7QUFBQSxjQUNsQjtBQUFBLFlBQ0osQ0FBQztBQUFBLFVBQ0w7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFDQSxjQUFNLG1CQUFtQixDQUFDLFFBQVE7QUFDOUIsY0FBSSxJQUFJLFlBQVksZ0JBQWdCLEdBQUc7QUFDbkMsa0JBQU0sWUFBWSxhQUFhLElBQUksR0FBRztBQUN0QyxrQkFBTSxFQUFFLFFBQVEsS0FBSyxJQUFJO0FBQ3pCLHVCQUFXLEtBQUssTUFBTTtBQUN0QixxQkFBUyxLQUFLLE1BQU0sU0FBUztBQUFBLFVBQ2pDO0FBQUEsUUFDSjtBQUNBLGlCQUFTLHlCQUF5QjtBQUM5QixpQkFBTyxPQUFPLHFCQUFxQjtBQUFBLFFBQ3ZDO0FBQUEsUUFFQSxNQUFNLGNBQWM7QUFBQSxVQUNoQixjQUFjO0FBQ1YsaUJBQUssV0FBVztBQUNoQixpQkFBSyxjQUFjO0FBQ25CLGlCQUFLLGtCQUFrQjtBQUN2QixpQkFBSyxnQkFBZ0I7QUFDckIsaUJBQUssaUJBQWlCO0FBQ3RCLGlCQUFLLGVBQWU7QUFDcEIsaUJBQUssVUFBVTtBQUNmLGlCQUFLLFdBQVc7QUFDaEIsaUJBQUssZUFBZTtBQUNwQixpQkFBSyxRQUFRO0FBQ2IsaUJBQUssZUFBZTtBQUNwQixtQkFBTyxLQUFLLElBQUk7QUFBQSxVQUNwQjtBQUFBLFFBQ0o7QUFDQSxjQUFNLFdBQVcsQ0FBQyxtQkFBbUI7QUFDakMseUJBQWUsV0FBVztBQUMxQix5QkFBZSxjQUFjO0FBQzdCLHlCQUFlLGtCQUFrQjtBQUNqQyx5QkFBZSxnQkFBZ0I7QUFDL0IseUJBQWUsaUJBQWlCO0FBQ2hDLHlCQUFlLGVBQWU7QUFDOUIseUJBQWUsVUFBVTtBQUN6Qix5QkFBZSxXQUFXO0FBQzFCLHlCQUFlLGVBQWU7QUFDOUIseUJBQWUsUUFBUTtBQUN2Qix5QkFBZSxlQUFlO0FBQzlCLGlCQUFPO0FBQUEsUUFDWDtBQUNBLGNBQU0sb0JBQW9CLENBQUMsZ0JBQWdCLFVBQVUsU0FBUztBQUMxRCx5QkFBZSxRQUFRLFFBQVEsUUFBUTtBQUN2QyxpQkFBTyxLQUFLLFFBQVEsRUFBRSxRQUFRLFNBQU8sZUFBZSxHQUFHLElBQUksU0FBUyxHQUFHLENBQUM7QUFDeEUsY0FBSSxNQUFNO0FBQ04sNEJBQWdCLElBQUk7QUFBQSxVQUN4QjtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUNBLGNBQU0sVUFBVSxDQUFDLGtCQUFrQjtBQUMvQixjQUFJLFFBQVE7QUFDWixtQkFBUyxPQUFPLGVBQWU7QUFDM0IsZ0JBQUksUUFBUSxXQUFXLGNBQWMsR0FBRyxNQUFNLE9BQU87QUFDakQsc0JBQVE7QUFBQSxZQUNaO0FBQUEsVUFDSjtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUVBLGNBQU0saUJBQWlCLG9CQUFJLFFBQVE7QUFDbkMsaUJBQVMsU0FBUyxLQUFLLFdBQVc7QUFDOUIsY0FBSSxnQkFBZ0IsV0FBVyxJQUFJO0FBQ25DLGNBQUksSUFBSSxNQUFNO0FBQ1YsZ0JBQUksS0FBSyxJQUFJLFNBQVM7QUFBQSxVQUMxQjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU0sdUJBQXVCLElBQUk7QUFBQSxVQUM3QixXQUFXLGVBQWU7QUFDdEIsbUJBQU87QUFBQSxVQUNYO0FBQUEsVUFDQSxZQUFZLEtBQUs7QUFDYixrQkFBTTtBQUNOLGdCQUFJLENBQUMsT0FBTyxDQUFDLElBQUksV0FBVyxJQUFJLFFBQVEsUUFBUSxHQUFHLE1BQU0sSUFBSTtBQUN6RCxvQkFBTSxJQUFJLFVBQVUscUJBQXFCO0FBQUEsWUFDN0M7QUFDQSwyQkFBZSxJQUFJLE1BQU0sR0FBRztBQUFBLFVBQ2hDO0FBQUEsVUFDQSxJQUFJLE9BQU87QUFDUCxnQkFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLEtBQUssT0FBTyxVQUFVLFVBQVU7QUFDakQsb0JBQU0sSUFBSSxhQUFhLG9FQUFvRSxLQUFLLHdCQUF3QjtBQUFBLFlBQzVIO0FBQ0Esa0JBQU0sU0FBUyxNQUFNLElBQUksS0FBSztBQUM5QixrQkFBTSxNQUFNLGVBQWUsSUFBSSxJQUFJO0FBQ25DLGtCQUFNLFlBQVksUUFBUSxLQUFLO0FBQy9CLGdCQUFJLElBQUksYUFBYTtBQUNqQix1QkFBUyxLQUFLLFNBQVM7QUFBQSxZQUMzQixPQUNLO0FBQ0QseUJBQVcsTUFBTTtBQUNiLHlCQUFTLEtBQUssU0FBUztBQUFBLGNBQzNCLENBQUM7QUFBQSxZQUNMO0FBQ0EsbUJBQU87QUFBQSxVQUNYO0FBQUEsVUFDQSxRQUFRO0FBQ0oscUJBQVMsQ0FBQyxLQUFLLEtBQUssS0FBSyxRQUFRLEdBQUc7QUFDaEMsbUJBQUssT0FBTyxLQUFLO0FBQUEsWUFDckI7QUFDQSxrQkFBTSxNQUFNO0FBQUEsVUFDaEI7QUFBQSxVQUNBLE9BQU8sT0FBTztBQUNWLGtCQUFNLFNBQVMsTUFBTSxPQUFPLEtBQUs7QUFDakMsa0JBQU0sTUFBTSxlQUFlLElBQUksSUFBSTtBQUNuQyxnQkFBSSxJQUFJLGFBQWE7QUFDakIsa0JBQUksZ0JBQWdCLFFBQVEsS0FBSyxJQUFJLEtBQUs7QUFDMUMsa0JBQUksSUFBSSxNQUFNO0FBQ1Ysb0JBQUksS0FBSyxPQUFPLFFBQVEsS0FBSyxFQUFFO0FBQUEsY0FDbkM7QUFBQSxZQUNKLE9BQ0s7QUFDRCx5QkFBVyxNQUFNO0FBQ2Isb0JBQUksZ0JBQWdCLFFBQVEsS0FBSyxJQUFJLEtBQUs7QUFDMUMsb0JBQUksSUFBSSxNQUFNO0FBQ1Ysc0JBQUksS0FBSyxPQUFPLFFBQVEsS0FBSyxFQUFFO0FBQUEsZ0JBQ25DO0FBQUEsY0FDSixDQUFDO0FBQUEsWUFDTDtBQUNBLG1CQUFPO0FBQUEsVUFDWDtBQUFBLFFBQ0o7QUFFQSxpQkFBUyx1QkFBdUIsVUFBVSxPQUFPLE1BQU0sR0FBRztBQUN0RCxjQUFJLFNBQVMsT0FBTyxDQUFDO0FBQUcsa0JBQU0sSUFBSSxVQUFVLCtDQUErQztBQUMzRixjQUFJLE9BQU8sVUFBVSxhQUFhLGFBQWEsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksUUFBUTtBQUFHLGtCQUFNLElBQUksVUFBVSwwRUFBMEU7QUFDakwsaUJBQU8sU0FBUyxNQUFNLElBQUksU0FBUyxNQUFNLEVBQUUsS0FBSyxRQUFRLElBQUksSUFBSSxFQUFFLFFBQVEsTUFBTSxJQUFJLFFBQVE7QUFBQSxRQUNoRztBQUNBLGlCQUFTLHVCQUF1QixVQUFVLE9BQU8sT0FBTyxNQUFNLEdBQUc7QUFDN0QsY0FBSSxTQUFTO0FBQUssa0JBQU0sSUFBSSxVQUFVLGdDQUFnQztBQUN0RSxjQUFJLFNBQVMsT0FBTyxDQUFDO0FBQUcsa0JBQU0sSUFBSSxVQUFVLCtDQUErQztBQUMzRixjQUFJLE9BQU8sVUFBVSxhQUFhLGFBQWEsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksUUFBUTtBQUFHLGtCQUFNLElBQUksVUFBVSx5RUFBeUU7QUFDaEwsaUJBQVEsU0FBUyxNQUFNLEVBQUUsS0FBSyxVQUFVLEtBQUssSUFBSSxJQUFJLEVBQUUsUUFBUSxRQUFRLE1BQU0sSUFBSSxVQUFVLEtBQUssR0FBSTtBQUFBLFFBQ3hHO0FBRUEsWUFBSTtBQUFBLFFBQ0osTUFBTSwyQkFBMkI7QUFBQSxVQUM3QixZQUFZLFVBQVU7QUFDbEIsaURBQXFDLElBQUksTUFBTSxNQUFNO0FBQ3JELG1DQUF1QixNQUFNLHNDQUFzQyxVQUFVLEdBQUc7QUFDaEYscUJBQVMsSUFBSSxHQUFHLElBQUksU0FBUyxRQUFRLEtBQUs7QUFDdEMsa0JBQUksVUFBVSxTQUFTLENBQUM7QUFDeEIsbUJBQUssQ0FBQyxJQUFJO0FBQ1Ysa0JBQUksUUFBUSxhQUFhLE1BQU0sR0FBRztBQUM5QixxQkFBSyxRQUFRLGFBQWEsTUFBTSxDQUFDLElBQUk7QUFBQSxjQUN6QztBQUFBLFlBQ0o7QUFDQSxtQkFBTyxPQUFPLElBQUk7QUFBQSxVQUN0QjtBQUFBLFVBQ0EsSUFBSSxTQUFTO0FBQ1QsbUJBQU8sdUJBQXVCLE1BQU0sc0NBQXNDLEdBQUcsRUFBRTtBQUFBLFVBQ25GO0FBQUEsVUFDQSxFQUFFLHVDQUF1QyxvQkFBSSxRQUFRLEdBQUcsT0FBTyxTQUFTLElBQUk7QUFDeEUsbUJBQU8sdUJBQXVCLE1BQU0sc0NBQXNDLEdBQUcsRUFBRSxPQUFPLFFBQVEsRUFBRTtBQUFBLFVBQ3BHO0FBQUEsVUFDQSxLQUFLLEdBQUc7QUFDSixtQkFBTyxLQUFLLENBQUMsS0FBSyxPQUFPLE9BQU8sS0FBSyxDQUFDO0FBQUEsVUFDMUM7QUFBQSxVQUNBLFVBQVUsTUFBTTtBQUNaLG1CQUFPLEtBQUssSUFBSSxLQUFLLE9BQU8sT0FBTyxLQUFLLElBQUk7QUFBQSxVQUNoRDtBQUFBLFFBQ0o7QUFFQSxpQkFBUyxxQkFBcUI7QUFDMUIsZ0JBQU0sZ0JBQWdCLGdCQUFnQixVQUFVO0FBQ2hELDBCQUFnQixVQUFVLGdCQUFnQjtBQUMxQyxnQkFBTSxpQkFBaUIsZ0JBQWdCLFVBQVU7QUFDakQsMEJBQWdCLFVBQVUsaUJBQWlCO0FBQzNDLG1CQUFTLHlCQUF5QixNQUFNO0FBQ3BDLGdCQUFJLGNBQWMsY0FBYyxNQUFNLE1BQU0sSUFBSTtBQUNoRCxtQkFBTyxtQkFBbUIsTUFBTSxhQUFhLGVBQWU7QUFBQSxVQUNoRTtBQUNBLG1CQUFTLDBCQUEwQixNQUFNO0FBQ3JDLGdCQUFJLGNBQWMsZUFBZSxNQUFNLE1BQU0sSUFBSTtBQUNqRCxtQkFBTyxtQkFBbUIsTUFBTSxhQUFhLGdCQUFnQjtBQUFBLFVBQ2pFO0FBQ0EsZ0JBQU0sRUFBRSxJQUFJLElBQUksT0FBTyx5QkFBeUIsZ0JBQWdCLFdBQVcsVUFBVTtBQUNyRixpQkFBTyxlQUFlLGdCQUFnQixXQUFXLFlBQVk7QUFBQSxZQUN6RCxPQUFPLE1BQU07QUFDVCxvQkFBTSxXQUFXLElBQUksS0FBSyxNQUFNLEdBQUcsSUFBSTtBQUN2QyxvQkFBTSxxQkFBcUIsTUFBTSxLQUFLLGdCQUFnQixJQUFJLElBQUksS0FBSyxDQUFDLENBQUM7QUFDckUsa0JBQUksbUJBQW1CLFdBQVcsR0FBRztBQUNqQyx1QkFBTztBQUFBLGNBQ1g7QUFDQSxvQkFBTSxrQkFBa0IsTUFBTSxLQUFLLFFBQVEsRUFBRSxPQUFPLGtCQUFrQixFQUFFLEtBQUssQ0FBQ0UsSUFBRyxNQUFNO0FBQ25GLG9CQUFJQSxHQUFFLHlCQUF5QjtBQUMzQix5QkFBT0EsR0FBRSx3QkFBd0IsQ0FBQyxJQUFJLElBQUksSUFBSTtBQUFBLGdCQUNsRDtBQUNBLHVCQUFPO0FBQUEsY0FDWCxDQUFDO0FBQ0QscUJBQU8sSUFBSSwyQkFBMkIsZUFBZTtBQUFBLFlBQ3pEO0FBQUEsVUFDSixDQUFDO0FBQUEsUUFDTDtBQUFBLFFBRUEsTUFBTSxpQkFBaUI7QUFBQSxVQUNuQixXQUFXLGVBQWU7QUFDdEIsbUJBQU87QUFBQSxVQUNYO0FBQUEsVUFDQSxZQUFZLEtBQUs7QUFDYixnQkFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFdBQVcsSUFBSSxRQUFRLFFBQVEsR0FBRyxNQUFNLElBQUk7QUFDekQsb0JBQU0sSUFBSSxVQUFVLHFCQUFxQjtBQUFBLFlBQzdDO0FBQ0Esa0JBQU0sV0FBVyxJQUFJLFlBQVk7QUFDakMsa0JBQU0sV0FBVyxJQUFJLGNBQWM7QUFDbkMsaUJBQUssU0FBUyxJQUFJLGVBQWUsR0FBRztBQUNwQyxtQkFBTyxJQUFJLE1BQU0sR0FBRztBQUNwQix3QkFBWSxJQUFJLE1BQU0sUUFBUTtBQUM5Qix5QkFBYSxJQUFJLEtBQUssSUFBSTtBQUMxQixvQkFBUSxLQUFLLElBQUk7QUFDakIsb0JBQVEsS0FBSyxJQUFJO0FBQ2pCLG1CQUFPLEtBQUssSUFBSTtBQUNoQixnQkFBSSxvQkFBb0Isa0JBQWtCO0FBQ3RDLDJCQUFhLFFBQVE7QUFBQSxZQUN6QjtBQUFBLFVBQ0o7QUFBQSxVQUNBLGdCQUFnQjtBQUNaLGtCQUFNLE1BQU0sT0FBTyxJQUFJLElBQUk7QUFDM0IscUNBQXlCLEtBQUssc0hBQXNIO0FBQ3BKLGdCQUFJLENBQUMsS0FBSyxjQUFjO0FBQ3BCLHFCQUFPO0FBQUEsWUFDWDtBQUNBLGtCQUFNLFdBQVcsWUFBWSxJQUFJLElBQUk7QUFDckMsZ0JBQUksQ0FBQyxTQUFTLE9BQU87QUFDakIsb0JBQU0sZ0JBQWdCLElBQUksTUFBTSxXQUFXO0FBQUEsZ0JBQ3ZDLFNBQVM7QUFBQSxnQkFDVCxZQUFZO0FBQUEsZ0JBQ1osVUFBVTtBQUFBLGNBQ2QsQ0FBQztBQUNELGtCQUFJLGNBQWMsYUFBYTtBQUFBLFlBQ25DO0FBQ0EsbUJBQU8sU0FBUztBQUFBLFVBQ3BCO0FBQUEsVUFDQSxJQUFJLE9BQU87QUFDUCxrQkFBTSxNQUFNLE9BQU8sSUFBSSxJQUFJO0FBQzNCLHFDQUF5QixLQUFLLHlIQUF5SDtBQUN2SixnQkFBSTtBQUNKLGdCQUFJLElBQUksWUFBWSxnQkFBZ0IsTUFBTSxNQUFNO0FBQzVDLHFCQUFPLGVBQWUsR0FBRztBQUFBLFlBQzdCO0FBQ0EsbUJBQU87QUFBQSxVQUNYO0FBQUEsVUFDQSxJQUFJLFNBQVM7QUFDVCxrQkFBTSxNQUFNLE9BQU8sSUFBSSxJQUFJO0FBQzNCLHFDQUF5QixLQUFLLDJIQUEySDtBQUN6SixrQkFBTSxLQUFLLElBQUksYUFBYSxJQUFJO0FBQ2hDLGtCQUFNLFdBQVcsSUFBSSxZQUFZO0FBQ2pDLGdCQUFJLFlBQVksSUFBSTtBQUNoQixxQkFBTyxTQUFTLGlCQUFpQixTQUFTLEVBQUUsSUFBSTtBQUFBLFlBQ3BEO0FBQ0EsbUJBQU8sQ0FBQztBQUFBLFVBQ1o7QUFBQSxVQUNBLGlCQUFpQjtBQUNiLGtCQUFNLE1BQU0sT0FBTyxJQUFJLElBQUk7QUFDM0IscUNBQXlCLEtBQUssdUhBQXVIO0FBQ3JKLGdCQUFJLENBQUMsS0FBSyxjQUFjO0FBQ3BCLHFCQUFPO0FBQUEsWUFDWDtBQUNBLGtCQUFNLFFBQVEsS0FBSyxjQUFjO0FBQ2pDLGtCQUFNLFNBQVMsb0JBQW9CLElBQUksSUFBSTtBQUMzQyxnQkFBSSxVQUFVLENBQUMsSUFBSSxZQUFZLGdCQUFnQixHQUFHO0FBQzlDLG9CQUFNLElBQUksYUFBYSx1SEFBdUg7QUFBQSxZQUNsSjtBQUNBLGdCQUFJLENBQUMsU0FBUyxRQUFRO0FBQ2xCLGtCQUFJLE1BQU07QUFDVixxQkFBTyxNQUFNO0FBQUEsWUFDakI7QUFDQSxtQkFBTztBQUFBLFVBQ1g7QUFBQSxVQUNBLGFBQWEsT0FBTztBQUNoQixrQkFBTSxNQUFNLE9BQU8sSUFBSSxJQUFJO0FBQzNCLHFDQUF5QixLQUFLLHFIQUFxSDtBQUNuSiwrQkFBbUIsSUFBSTtBQUN2QixnQkFBSSxTQUFTLFFBQVEsRUFBRSxpQkFBaUIsV0FBVztBQUMvQyxrQkFBSSxJQUFJLGFBQWEsTUFBTSxHQUFHO0FBQzFCLHNCQUFNLGNBQWMsa0JBQWtCLEtBQUssSUFBSTtBQUMvQyw0QkFBWSxRQUFRO0FBQUEsY0FDeEI7QUFBQSxZQUNKLFdBQ1MsU0FBUyxRQUFRLGlCQUFpQixVQUFVO0FBQ2pELG9CQUFNLEtBQUssS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxhQUFhLGFBQWEsTUFBTTtBQUNsRSxvQkFBSSxPQUFPLGtCQUFrQixVQUFVO0FBQ25DLHdCQUFNLGNBQWMsa0JBQWtCLEtBQUssSUFBSTtBQUMvQyw4QkFBWSxPQUFPO0FBQ25CLDhCQUFZLFFBQVE7QUFBQSxnQkFDeEI7QUFBQSxjQUNKLENBQUM7QUFBQSxZQUNMO0FBQ0Esd0JBQVksSUFBSSxLQUFLLEtBQUs7QUFBQSxVQUM5QjtBQUFBLFVBQ0EsWUFBWSxpQkFBaUIsbUJBQW1CLFFBQVE7QUFDcEQsa0JBQU0sTUFBTSxPQUFPLElBQUksSUFBSTtBQUMzQixxQ0FBeUIsS0FBSyxvSEFBb0g7QUFDbEosZ0JBQUksQ0FBQyxpQkFBaUI7QUFDbEIsb0JBQU0sSUFBSSxVQUFVLGlHQUFxRztBQUFBLFlBQzdIO0FBQ0EsZ0NBQW9CLElBQUksTUFBTSxNQUFNO0FBQ3BDLGtCQUFNLFdBQVcsWUFBWSxJQUFJLElBQUk7QUFDckMsa0JBQU0scUJBQXFCLENBQUM7QUFDNUIsdUJBQVcsT0FBTyxpQkFBaUI7QUFDL0IsaUNBQW1CLEdBQUcsSUFBSSxnQkFBZ0IsR0FBRztBQUFBLFlBQ2pEO0FBQ0EsZ0JBQUksT0FBTyxLQUFLLGtCQUFrQixFQUFFLFdBQVcsR0FBRztBQUM5Qyx1QkFBUyxRQUFRO0FBQUEsWUFDckI7QUFDQSxrQkFBTSxRQUFRLEVBQUUsR0FBRyxVQUFVLEdBQUcsbUJBQW1CO0FBQ25ELG1CQUFPLE1BQU07QUFDYixrQkFBTSxFQUFFLE1BQU0sSUFBSSxrQkFBa0IsVUFBVSxPQUFPLEtBQUssSUFBSTtBQUM5RCxnQkFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUI7QUFDOUIsb0JBQU0sSUFBSSxhQUFhLHFKQUFxSjtBQUFBLFlBQ2hMO0FBQ0EsaUNBQXFCLElBQUksTUFBTSxRQUFRLEtBQUssaUJBQWlCO0FBQzdELGdCQUFJLElBQUksYUFBYTtBQUNqQixrQkFBSSxnQkFBZ0IscUJBQXFCLENBQUMsS0FBSztBQUMvQyxrQkFBSSxnQkFBZ0IsbUJBQW1CLEtBQUs7QUFDNUMsa0JBQUksYUFBYSxnQkFBZ0IsR0FBRyxDQUFDLEtBQUssRUFBRTtBQUFBLFlBQ2hELE9BQ0s7QUFDRCxpQ0FBbUIsSUFBSSxLQUFLLElBQUk7QUFBQSxZQUNwQztBQUFBLFVBQ0o7QUFBQSxVQUNBLElBQUksYUFBYTtBQUNiLGtCQUFNLE1BQU0sT0FBTyxJQUFJLElBQUk7QUFDM0Isa0JBQU0sYUFBYSxjQUFjLElBQUksR0FBRztBQUN4QyxnQkFBSSxZQUFZO0FBQ1oscUJBQU87QUFBQSxZQUNYO0FBQ0EsbUJBQU87QUFBQSxVQUNYO0FBQUEsVUFDQSxJQUFJLG9CQUFvQjtBQUNwQixrQkFBTSxNQUFNLE9BQU8sSUFBSSxJQUFJO0FBQzNCLHFDQUF5QixLQUFLLHNJQUFzSTtBQUNwSyxtQkFBTyxxQkFBcUIsSUFBSSxJQUFJO0FBQUEsVUFDeEM7QUFBQSxVQUNBLElBQUksV0FBVztBQUNYLGtCQUFNLE1BQU0sT0FBTyxJQUFJLElBQUk7QUFDM0IscUNBQXlCLEtBQUssNkhBQTZIO0FBQzNKLGtCQUFNLFdBQVcsWUFBWSxJQUFJLElBQUk7QUFDckMsbUJBQU87QUFBQSxVQUNYO0FBQUEsVUFDQSxJQUFJLGVBQWU7QUFDZixrQkFBTSxNQUFNLE9BQU8sSUFBSSxJQUFJO0FBQzNCLHFDQUF5QixLQUFLLGlJQUFpSTtBQUMvSixnQkFBSyxJQUFJLFlBQVksSUFBSSxhQUFhLFVBQVUsS0FDNUMsSUFBSSxhQUFhLFVBQVUsR0FBRztBQUM5QixxQkFBTztBQUFBLFlBQ1g7QUFDQSxtQkFBTztBQUFBLFVBQ1g7QUFBQSxRQUNKO0FBQ0EsaUJBQVMsOEJBQThCO0FBQ25DLGNBQUksT0FBTyxXQUFXLGVBQWUsQ0FBQyxPQUFPLG9CQUFvQixDQUFDLFlBQVksVUFBVSxpQkFBaUI7QUFDckcsbUJBQU87QUFBQSxVQUNYO0FBQUEsVUFDQSxNQUFNLHlDQUF5QyxZQUFZO0FBQUEsWUFDdkQsY0FBYztBQUNWLG9CQUFNO0FBQ04sbUJBQUssWUFBWSxLQUFLLGdCQUFnQjtBQUFBLFlBQzFDO0FBQUEsVUFDSjtBQUNBLGdCQUFNLGFBQWEsdUNBQXVDLEtBQUssT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLFFBQVEsWUFBWSxFQUFFLENBQUM7QUFDNUcseUJBQWUsT0FBTyxZQUFZLGdDQUFnQztBQUNsRSxnQkFBTSwwQkFBMEIsSUFBSSxpQ0FBaUM7QUFDckUsaUJBQU87QUFBQSxZQUNIO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsVUFDSixFQUFFLE1BQU0sVUFBUSxRQUFRLHdCQUF3QixTQUFTO0FBQUEsUUFDN0Q7QUFDQSxZQUFJLENBQUMsNEJBQTRCLEdBQUc7QUFDaEMsY0FBSSxPQUFPLFdBQVcsYUFBYTtBQUMvQixtQkFBTyxtQkFBbUI7QUFBQSxVQUM5QjtBQUNBLGNBQUksT0FBTywwQkFBMEIsYUFBYTtBQUM5QyxrQkFBTUMsVUFBUyxzQkFBc0IsVUFBVTtBQUMvQyxrQ0FBc0IsVUFBVSxTQUFTLFNBQVUsTUFBTSxhQUFhQyxVQUFTO0FBQzNFLGtCQUFJLFlBQVksZ0JBQWdCO0FBQzVCLHNCQUFNLG9CQUFvQixZQUFZLFVBQVU7QUFDaEQsNEJBQVksVUFBVSxvQkFBb0IsV0FBWTtBQUNsRCxzQkFBSSxDQUFDLHFCQUFxQixJQUFJLElBQUksR0FBRztBQUNqQyx5Q0FBcUIsSUFBSSxNQUFNLElBQUk7QUFDbkMsd0JBQUksS0FBSyxhQUFhLFVBQVUsR0FBRztBQUMvQixrQ0FBWSxNQUFNLElBQUk7QUFBQSxvQkFDMUI7QUFBQSxrQkFDSjtBQUNBLHNCQUFJLHFCQUFxQixNQUFNO0FBQzNCLHNDQUFrQixNQUFNLElBQUk7QUFBQSxrQkFDaEM7QUFDQSxtQ0FBaUIsSUFBSTtBQUFBLGdCQUN6QjtBQUFBLGNBQ0o7QUFDQSxjQUFBRCxRQUFPLEtBQUssTUFBTSxNQUFNLGFBQWFDLFFBQU87QUFBQSxZQUNoRDtBQUFBLFVBQ0o7QUFDQSxjQUFJLE9BQU8sZ0JBQWdCLGFBQWE7QUFDcEMsd0JBQVksVUFBVSxrQkFBa0IsV0FBWTtBQUNoRCxrQkFBSSxDQUFDLEtBQUssU0FBUztBQUNmLHVCQUFPLENBQUM7QUFBQSxjQUNaLFdBQ1MsS0FBSyxRQUFRLFFBQVEsR0FBRyxNQUFNLElBQUk7QUFDdkMsc0JBQU0sSUFBSSxNQUFNLGlIQUFpSDtBQUFBLGNBQ3JJO0FBQ0Esa0JBQUksYUFBYSxJQUFJLElBQUksR0FBRztBQUN4QixzQkFBTSxJQUFJLGFBQWEsc0lBQXNJO0FBQUEsY0FDaks7QUFDQSxxQkFBTyxJQUFJLGlCQUFpQixJQUFJO0FBQUEsWUFDcEM7QUFBQSxVQUNKO0FBQ0EsY0FBSSxPQUFPLFlBQVksYUFBYTtBQUNoQyxnQkFBUyx1QkFBVCxZQUFpQyxNQUFNO0FBQ25DLG9CQUFNLGFBQWEsYUFBYSxNQUFNLE1BQU0sSUFBSTtBQUNoRCw0QkFBYyxJQUFJLE1BQU0sVUFBVTtBQUNsQyxrQkFBSSx1QkFBdUIsR0FBRztBQUMxQixzQkFBTSxXQUFXLElBQUksaUJBQWlCLGdCQUFnQjtBQUN0RCxvQkFBSSxPQUFPLFVBQVU7QUFDakIsMkJBQVMsUUFBUSxNQUFNLGNBQWM7QUFBQSxnQkFDekMsT0FDSztBQUNELDJCQUFTLFFBQVEsWUFBWSxjQUFjO0FBQUEsZ0JBQy9DO0FBQ0EsK0JBQWUsSUFBSSxNQUFNLFFBQVE7QUFBQSxjQUNyQztBQUNBLHFCQUFPO0FBQUEsWUFDWDtBQUNBLGtCQUFNLGVBQWUsUUFBUSxVQUFVO0FBQ3ZDLG9CQUFRLFVBQVUsZUFBZTtBQUFBLFVBQ3JDO0FBQ0EsY0FBSSx1QkFBdUIsS0FBSyxPQUFPLGFBQWEsYUFBYTtBQUM3RCxrQkFBTSxtQkFBbUIsSUFBSSxpQkFBaUIsZ0JBQWdCO0FBQzlELDZCQUFpQixRQUFRLFNBQVMsaUJBQWlCLGNBQWM7QUFBQSxVQUNyRTtBQUNBLGNBQUksT0FBTyxvQkFBb0IsYUFBYTtBQUN4QywrQkFBbUI7QUFBQSxVQUN2QjtBQUNBLGNBQUksT0FBTyxXQUFXLGVBQWUsQ0FBQyxPQUFPLGdCQUFnQjtBQUN6RCxtQkFBTyxpQkFBaUI7QUFBQSxVQUM1QjtBQUFBLFFBQ0osV0FDUyxPQUFPLFdBQVcsZUFBZSxDQUFDLE9BQU8sZ0JBQWdCO0FBQzlELGlCQUFPLGlCQUFpQjtBQUN4QixnQkFBTSxrQkFBa0IsWUFBWSxVQUFVO0FBQzlDLHNCQUFZLFVBQVUsa0JBQWtCLFlBQWEsTUFBTTtBQUN2RCxrQkFBTSxZQUFZLGdCQUFnQixLQUFLLE1BQU0sSUFBSTtBQUNqRCxzQkFBVSxTQUFTLElBQUksZUFBZSxJQUFJO0FBQzFDLG1CQUFPO0FBQUEsVUFDWDtBQUFBLFFBQ0o7QUFBQSxNQUVKLEdBQUc7QUFBQTtBQUFBOzs7QUN0eUJILE1BbUJNLGdCQVNBLHFCQU1BO0FBbENOO0FBQUE7QUFtQkEsTUFBTSxpQkFBaUIsT0FBTyxJQUFJLDJCQUEyQjtBQVM3RCxNQUFNLHNCQUFzQixPQUFPLElBQUksd0JBQXdCO0FBTS9ELE1BQU0saUJBQWlCLE9BQU8sSUFBSSwyQkFBMkI7QUFBQTtBQUFBOzs7QUM4RDdELFdBQVMsb0JBQW9CLEtBQUs7QUFDakMsUUFBSSxLQUFLLGVBQWUsY0FBYyxNQUFNLE9BQU87QUFDbEQsYUFBTztBQUFBLElBQ1I7QUFFQSxVQUFNLFFBQVEsS0FBSztBQUNuQixRQUNDLFVBQVUsVUFDVixVQUFVLFFBQ1QsT0FBTyxVQUFVLFlBQVksT0FBTyxVQUFVLFlBQzlDO0FBQ0QsYUFBTztBQUFBLElBQ1I7QUFFQSxRQUFJLE1BQU0sZUFBZSxjQUFjLE1BQU0sTUFBTTtBQUNsRCxhQUFPLG9CQUFvQixNQUFNLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQztBQUFBLElBQ3ZEO0FBRUEsVUFBTUMsVUFBUyxNQUFNLGNBQWM7QUFDbkMsUUFBSUEsWUFBVyxRQUFXO0FBQ3pCLFVBQUksSUFBSSxXQUFXO0FBQ2xCLGVBQU8sb0JBQW9CLElBQUksU0FBUztBQUFBLE1BQ3pDLE9BQU87QUFDTixlQUFPO0FBQUEsTUFDUjtBQUFBLElBQ0Q7QUFFQSxRQUFJQSxZQUFXLEtBQUssY0FBYyxHQUFHO0FBQ3BDLGFBQU87QUFBQSxJQUNSO0FBRUEsV0FBTyxvQkFBb0IsTUFBTSxNQUFNLENBQUMsSUFBSSxTQUFTLENBQUM7QUFBQSxFQUN2RDtBQWhJQSxNQXFDTTtBQXJDTjtBQUFBO0FBT0E7QUE4QkEsTUFBTSxPQUFOLGNBQW1CLE9BQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS3pCLFdBQVc7QUFDVixpQkFBTyxLQUFLLFVBQVUsSUFBSTtBQUFBLFFBQzNCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLDZCQUE2QjtBQUFBLFFBQ2hEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxRQUFRLE9BQU8sV0FBVyxFQUFFLE1BQU07QUFDakMsY0FDQyxTQUFTLFVBQ1QsU0FBUyxRQUNSLE9BQU8sU0FBUyxZQUFZLE9BQU8sU0FBUyxZQUM1QztBQUNELG1CQUFPO0FBQUEsVUFDUjtBQUVBLGdCQUFNLFlBQVksT0FBTyxlQUFlLElBQUk7QUFDNUMsY0FDQyxjQUFjLFVBQ2QsY0FBYyxRQUNiLE9BQU8sY0FBYyxZQUFZLE9BQU8sY0FBYyxZQUN0RDtBQUNELG1CQUFPO0FBQUEsVUFDUjtBQUVBLGNBQUksb0JBQW9CLE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLE1BQU07QUFDMUQsbUJBQU87QUFBQSxVQUNSO0FBR0EsaUJBQU8sTUFBTSxPQUFPLFdBQVcsRUFBRSxJQUFJO0FBQUEsUUFDdEM7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDc0tBLFdBQVMsWUFBWSxPQUFPO0FBQzNCLFFBQUksRUFBRSxnQkFBZ0I7QUFDckIsWUFBTSxNQUFNLG9DQUFvQztBQUNqRCxtQkFBZSxLQUFLO0FBQ3BCLFlBQVEsTUFBTSxLQUFLO0FBQ25CLFFBQUksS0FBSyxTQUFTLEtBQUssR0FBRztBQUN6QixXQUFLLE9BQU8sS0FBSztBQUNqQixhQUFPO0FBQUEsSUFDUjtBQUNBLFNBQUssSUFBSSxLQUFLO0FBQ2QsV0FBTztBQUFBLEVBQ1I7QUF2UUEsTUEwQk07QUExQk47QUFBQTtBQU9BO0FBQ0E7QUFDQTtBQWlCQSxNQUFNLFlBQU4sY0FBd0IsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLNUIsWUFBWUMsT0FBTTtBQUNqQixnQkFBTTtBQUNOLGVBQUssU0FBUyxvQkFBSSxJQUFJO0FBRXRCLGNBQUksT0FBT0EsVUFBUyxhQUFhO0FBQ2hDLGlCQUFLLElBQUlBLEtBQUk7QUFBQSxVQUNkO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLGNBQWM7QUFDYixpQkFBTyxLQUFLLE9BQU8sUUFBUSxFQUFFO0FBQUEsUUFDOUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxDQUFDLE9BQU8sUUFBUSxJQUFJO0FBSW5CLGNBQUksUUFBUTtBQUNaLGdCQUFNLFVBQVUsS0FBSyxRQUFRO0FBRTdCLGlCQUFPO0FBQUEsWUFDTixNQUFNLE1BQU07QUFDWCxrQkFBSSxRQUFRLFFBQVEsUUFBUTtBQUMzQix1QkFBTyxFQUFFLE9BQU8sVUFBVSxPQUFPLEdBQUcsTUFBTSxNQUFNO0FBQUEsY0FDakQsT0FBTztBQUNOLHVCQUFPLEVBQUUsTUFBTSxLQUFLO0FBQUEsY0FDckI7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBU0EsU0FBUyxPQUFPO0FBQ2YsY0FBSSxTQUFTLEtBQUssR0FBRztBQUNwQixvQkFBUSxNQUFNLEtBQUs7QUFDbkIsZ0JBQUksVUFBVTtBQUNkLGtCQUFNLE1BQU0sR0FBRyxFQUFFLFFBQVEsQ0FBQyxVQUFVO0FBQ25DLGtCQUFJLEtBQUssT0FBTyxJQUFJLE1BQU0sS0FBSyxDQUFDLE1BQU07QUFBTyx1QkFBTztBQUNwRDtBQUFBLFlBQ0QsQ0FBQztBQUNELG1CQUFPLFVBQVUsSUFBSSxPQUFPO0FBQUEsVUFDN0I7QUFFQSxjQUFJLFdBQVcsS0FBSyxHQUFHO0FBQ3RCLGdCQUFJLFVBQVU7QUFDZCx1QkFBVyxTQUFTLE9BQU87QUFDMUIsNkJBQWUsS0FBSztBQUNwQixrQkFBSSxLQUFLLE9BQU8sSUFBSSxNQUFNLEtBQUssQ0FBQyxNQUFNO0FBQU8sdUJBQU87QUFDcEQ7QUFBQSxZQUNEO0FBQ0EsbUJBQU8sVUFBVSxJQUFJLE9BQU87QUFBQSxVQUM3QjtBQUVBLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVVBLElBQUksT0FBTztBQUNWLGNBQUksU0FBUyxLQUFLLEdBQUc7QUFDcEIsa0JBQU0sTUFBTSxHQUFHLEVBQUUsUUFBUSxDQUFDLFVBQVU7QUFDbkMsbUJBQUssT0FBTyxJQUFJLE1BQU0sS0FBSyxDQUFDO0FBQUEsWUFDN0IsQ0FBQztBQUFBLFVBQ0YsV0FBVyxXQUFXLEtBQUssR0FBRztBQUM3Qix1QkFBVyxTQUFTLE9BQU87QUFDMUIsNkJBQWUsS0FBSztBQUNwQixtQkFBSyxPQUFPLElBQUksTUFBTSxLQUFLLENBQUM7QUFBQSxZQUM3QjtBQUFBLFVBQ0QsV0FBVyxPQUFPLFVBQVUsYUFBYTtBQUN4QyxrQkFBTSxJQUFJLFVBQVUsbUJBQW1CO0FBQUEsVUFDeEM7QUFFQSxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxRQUFRO0FBQ1AsZUFBSyxPQUFPLE1BQU07QUFDbEIsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBVUEsT0FBTyxPQUFPO0FBQ2IsY0FBSSxTQUFTLEtBQUssR0FBRztBQUNwQixrQkFBTSxNQUFNLEdBQUcsRUFBRSxRQUFRLENBQUMsVUFBVTtBQUNuQyxtQkFBSyxPQUFPLE9BQU8sTUFBTSxLQUFLLENBQUM7QUFBQSxZQUNoQyxDQUFDO0FBQUEsVUFDRixXQUFXLFdBQVcsS0FBSyxHQUFHO0FBQzdCLHVCQUFXLFNBQVMsT0FBTztBQUMxQiw2QkFBZSxLQUFLO0FBQ3BCLG1CQUFLLE9BQU8sT0FBTyxNQUFNLEtBQUssQ0FBQztBQUFBLFlBQ2hDO0FBQUEsVUFDRCxXQUFXLE9BQU8sVUFBVSxhQUFhO0FBQ3hDLGtCQUFNLElBQUksVUFBVSxxQkFBcUIscUJBQXFCO0FBQUEsVUFDL0Q7QUFFQSxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBWUEsUUFBUSxPQUFPLFVBQVU7QUFDeEIseUJBQWUsS0FBSztBQUNwQix5QkFBZSxRQUFRO0FBQ3ZCLGNBQUksQ0FBQyxLQUFLLFNBQVMsS0FBSyxHQUFHO0FBQzFCLG1CQUFPO0FBQUEsVUFDUjtBQUVBLGdCQUFNQyxLQUFJLE1BQU0sS0FBSyxLQUFLLE1BQU07QUFDaEMsZ0JBQU0sSUFBSUEsR0FBRSxRQUFRLEtBQUs7QUFDekIsY0FBSSxNQUFNO0FBQUksbUJBQU87QUFFckIsVUFBQUEsR0FBRSxPQUFPLEdBQUcsR0FBRyxRQUFRO0FBQ3ZCLGVBQUssU0FBUyxvQkFBSSxJQUFJO0FBQ3RCLGVBQUssSUFBSUEsRUFBQztBQUVWLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVVBLE9BQU8sT0FBTztBQUNiLGNBQUksU0FBUyxLQUFLLEdBQUc7QUFDcEIsa0JBQU0sTUFBTSxHQUFHLEVBQUUsUUFBUSxDQUFDLFVBQVU7QUFDbkMsMEJBQVksS0FBSyxNQUFNLEtBQUs7QUFBQSxZQUM3QixDQUFDO0FBQUEsVUFDRixXQUFXLFdBQVcsS0FBSyxHQUFHO0FBQzdCLHVCQUFXLFNBQVMsT0FBTztBQUMxQiwwQkFBWSxLQUFLLE1BQU0sS0FBSztBQUFBLFlBQzdCO0FBQUEsVUFDRCxXQUFXLE9BQU8sVUFBVSxhQUFhO0FBQ3hDLGtCQUFNLElBQUksVUFBVSxxQkFBcUIscUJBQXFCO0FBQUEsVUFDL0Q7QUFFQSxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxVQUFVO0FBQ1QsaUJBQU8sTUFBTSxLQUFLLEtBQUssTUFBTTtBQUFBLFFBQzlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxRQUFRLFVBQVU7QUFDakIsMkJBQWlCLFFBQVE7QUFDekIsZUFBSyxPQUFPLFFBQVEsUUFBUTtBQUM1QixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxXQUFXO0FBQ1YsaUJBQU8sS0FBSyxRQUFRLEVBQUUsS0FBSyxHQUFHO0FBQUEsUUFDL0I7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDcFBBLE1BdUVNLGVBUUEsa0JBVUEsbUJBVUEsdUJBVUEsNEJBVUEseUJBVUEseUJBUUEsd0JBTUEsc0JBUUEsOEJBUUEsK0JBUUEsMkJBUUEsMEJBUUEsb0NBUUEsMEJBUUEsd0JBUUEsMkJBUUEsZ0JBUUEsb0JBZ0JBLHNCQVFBLHdCQVFBLHlCQVVBLGdDQVVBLFlBZ0JBLFVBU0EsY0FTQSxpQkFRQSxpQkFRQSxlQU9BLGdCQVFBLGdCQVFBO0FBNVZOLE1BQUFDLGtCQUFBO0FBQUE7QUF1RUEsTUFBTSxnQkFBZ0I7QUFRdEIsTUFBTSxtQkFBbUI7QUFVekIsTUFBTSxvQkFBb0IsR0FBRyxnQkFBZ0I7QUFVN0MsTUFBTSx3QkFBd0IsR0FBRyxnQkFBZ0I7QUFVakQsTUFBTSw2QkFBNkIsR0FBRyxnQkFBZ0I7QUFVdEQsTUFBTSwwQkFBMEIsR0FBRyxnQkFBZ0I7QUFVbkQsTUFBTSwwQkFBMEI7QUFRaEMsTUFBTSx5QkFBeUIsR0FBRyxnQkFBZ0I7QUFNbEQsTUFBTSx1QkFBdUIsR0FBRyxzQkFBc0I7QUFRdEQsTUFBTSwrQkFBK0IsR0FBRyxnQkFBZ0I7QUFReEQsTUFBTSxnQ0FBZ0MsR0FBRyxnQkFBZ0I7QUFRekQsTUFBTSw0QkFBNEIsR0FBRyxnQkFBZ0I7QUFRckQsTUFBTSwyQkFBMkIsR0FBRyxnQkFBZ0I7QUFRcEQsTUFBTSxxQ0FBcUMsR0FBRyxnQkFBZ0I7QUFROUQsTUFBTSwyQkFBMkIsR0FBRyxnQkFBZ0I7QUFRcEQsTUFBTSx5QkFBeUIsR0FBRyxnQkFBZ0I7QUFRbEQsTUFBTSw0QkFBNEIsR0FBRyxnQkFBZ0I7QUFRckQsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0I7QUFRMUMsTUFBTSxxQkFBcUI7QUFnQjNCLE1BQU0sdUJBQXVCLEdBQUcsZ0JBQWdCO0FBUWhELE1BQU0seUJBQXlCLEdBQUcsZ0JBQWdCO0FBUWxELE1BQU0sMEJBQTBCLE9BQU87QUFBQSxRQUN0QztBQUFBLE1BQ0Q7QUFRQSxNQUFNLGlDQUFpQyxPQUFPO0FBQUEsUUFDN0M7QUFBQSxNQUNEO0FBUUEsTUFBTSxhQUFhO0FBZ0JuQixNQUFNLFdBQVc7QUFTakIsTUFBTSxlQUFlO0FBU3JCLE1BQU0sa0JBQWtCO0FBUXhCLE1BQU0sa0JBQWtCO0FBUXhCLE1BQU0sZ0JBQWdCO0FBT3RCLE1BQU0saUJBQWlCO0FBUXZCLE1BQU0saUJBQWlCO0FBUXZCLE1BQU0sa0JBQWtCO0FBQUE7QUFBQTs7O0FDOVN4QixXQUFTLHNCQUFzQixTQUFTO0FBQ3ZDLFdBQU8sdUJBQXVCLFNBQVMsb0JBQW9CO0FBQUEsRUFDNUQ7QUFjQSxXQUFTLGdCQUFnQixTQUFTQyxTQUFRLFFBQVE7QUFDakQscUJBQWlCLFNBQVMsV0FBVztBQUNyQyxtQkFBZUEsT0FBTTtBQUVyQixRQUFJLFVBQVVBLE9BQU0sTUFBTSxRQUFXO0FBQ3BDLGNBQVFBLE9BQU0sSUFBSSxvQkFBSSxJQUFJO0FBQUEsSUFDM0I7QUFFQSxzQkFBa0IsU0FBUyxzQkFBc0JBLFFBQU8sU0FBUyxDQUFDO0FBQ2xFLFlBQVFBLE9BQU0sRUFBRSxJQUFJLE1BQU07QUFDMUIsV0FBTztBQUFBLEVBQ1I7QUFhQSxXQUFTLGlCQUFpQixTQUFTQSxTQUFRO0FBQzFDLHFCQUFpQixTQUFTLFdBQVc7QUFDckMsbUJBQWVBLE9BQU07QUFFckIsUUFBSSxVQUFVQSxPQUFNLE1BQU0sUUFBVztBQUNwQyxhQUFPO0FBQUEsSUFDUjtBQUVBLHlCQUFxQixTQUFTLHNCQUFzQkEsUUFBTyxTQUFTLENBQUM7QUFDckUsV0FBTyxRQUFRQSxPQUFNO0FBQ3JCLFdBQU87QUFBQSxFQUNSO0FBYUEsV0FBUyxjQUFjLFNBQVNBLFNBQVE7QUFDdkMscUJBQWlCLFNBQVMsV0FBVztBQUNyQyxtQkFBZUEsT0FBTTtBQUVyQixRQUFJLFVBQVVBLE9BQU0sTUFBTSxRQUFXO0FBQ3BDLGFBQU87QUFBQSxJQUNSO0FBRUEsV0FBTztBQUFBLE1BQ047QUFBQSxNQUNBO0FBQUEsTUFDQUEsUUFBTyxTQUFTO0FBQUEsSUFDakI7QUFBQSxFQUNEO0FBbUJBLFdBQVMsaUJBQWlCLFNBQVNBLFNBQVE7QUFDMUMscUJBQWlCLFNBQVMsV0FBVztBQUNyQyxtQkFBZUEsT0FBTTtBQUVyQixRQUFJLFVBQVVBLE9BQU0sTUFBTSxRQUFXO0FBQ3BDLFlBQU0sSUFBSSxNQUFNLCtCQUErQkEsUUFBTyxTQUFTLENBQUMsRUFBRTtBQUFBLElBQ25FO0FBRUEsV0FBTyxVQUFVQSxPQUFNLEVBQUUsT0FBTyxRQUFRLEVBQUU7QUFBQSxFQUMzQztBQWdCQSxXQUFTLHFCQUFxQixTQUFTLEtBQUssT0FBTztBQUNsRCxxQkFBaUIsU0FBUyxXQUFXO0FBQ3JDLG1CQUFlLEtBQUs7QUFDcEIsbUJBQWUsR0FBRztBQUVsQixRQUFJLENBQUMsUUFBUSxhQUFhLEdBQUcsR0FBRztBQUMvQixjQUFRLGFBQWEsS0FBSyxLQUFLO0FBQy9CLGFBQU87QUFBQSxJQUNSO0FBRUEsWUFBUTtBQUFBLE1BQ1A7QUFBQSxNQUNBLElBQUksVUFBVSxRQUFRLGFBQWEsR0FBRyxDQUFDLEVBQUUsT0FBTyxLQUFLLEVBQUUsU0FBUztBQUFBLElBQ2pFO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFjQSxXQUFTLGtCQUFrQixTQUFTLEtBQUssT0FBTztBQUMvQyxxQkFBaUIsU0FBUyxXQUFXO0FBQ3JDLG1CQUFlLEtBQUs7QUFDcEIsbUJBQWUsR0FBRztBQUVsQixRQUFJLENBQUMsUUFBUSxhQUFhLEdBQUcsR0FBRztBQUMvQixjQUFRLGFBQWEsS0FBSyxLQUFLO0FBQy9CLGFBQU87QUFBQSxJQUNSO0FBRUEsWUFBUTtBQUFBLE1BQ1A7QUFBQSxNQUNBLElBQUksVUFBVSxRQUFRLGFBQWEsR0FBRyxDQUFDLEVBQUUsSUFBSSxLQUFLLEVBQUUsU0FBUztBQUFBLElBQzlEO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFnQkEsV0FBUyxxQkFBcUIsU0FBUyxLQUFLLE9BQU87QUFDbEQscUJBQWlCLFNBQVMsV0FBVztBQUNyQyxtQkFBZSxLQUFLO0FBQ3BCLG1CQUFlLEdBQUc7QUFFbEIsUUFBSSxDQUFDLFFBQVEsYUFBYSxHQUFHLEdBQUc7QUFDL0IsYUFBTztBQUFBLElBQ1I7QUFFQSxZQUFRO0FBQUEsTUFDUDtBQUFBLE1BQ0EsSUFBSSxVQUFVLFFBQVEsYUFBYSxHQUFHLENBQUMsRUFBRSxPQUFPLEtBQUssRUFBRSxTQUFTO0FBQUEsSUFDakU7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQWdCQSxXQUFTLHVCQUF1QixTQUFTLEtBQUssT0FBTztBQUNwRCxxQkFBaUIsU0FBUyxXQUFXO0FBQ3JDLG1CQUFlLEtBQUs7QUFDcEIsbUJBQWUsR0FBRztBQUVsQixRQUFJLENBQUMsUUFBUSxhQUFhLEdBQUcsR0FBRztBQUMvQixhQUFPO0FBQUEsSUFDUjtBQUVBLFdBQU8sSUFBSSxVQUFVLFFBQVEsYUFBYSxHQUFHLENBQUMsRUFBRSxTQUFTLEtBQUs7QUFBQSxFQUMvRDtBQWVBLFdBQVMsc0JBQXNCLFNBQVMsS0FBSyxNQUFNLElBQUk7QUFDdEQscUJBQWlCLFNBQVMsV0FBVztBQUNyQyxtQkFBZSxJQUFJO0FBQ25CLG1CQUFlLEVBQUU7QUFDakIsbUJBQWUsR0FBRztBQUVsQixRQUFJLENBQUMsUUFBUSxhQUFhLEdBQUcsR0FBRztBQUMvQixhQUFPO0FBQUEsSUFDUjtBQUVBLFlBQVE7QUFBQSxNQUNQO0FBQUEsTUFDQSxJQUFJLFVBQVUsUUFBUSxhQUFhLEdBQUcsQ0FBQyxFQUFFLFFBQVEsTUFBTSxFQUFFLEVBQUUsU0FBUztBQUFBLElBQ3JFO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFhQSxXQUFTLHFCQUFxQixTQUFTLEtBQUs7QUFDM0MscUJBQWlCLFNBQVMsV0FBVztBQUNyQyxtQkFBZSxHQUFHO0FBRWxCLFFBQUksQ0FBQyxRQUFRLGFBQWEsR0FBRyxHQUFHO0FBQy9CLGFBQU87QUFBQSxJQUNSO0FBRUEsWUFBUSxhQUFhLEtBQUssRUFBRTtBQUU1QixXQUFPO0FBQUEsRUFDUjtBQStCQSxXQUFTLHVCQUF1QixTQUFTLEtBQUssT0FBTztBQUNwRCxxQkFBaUIsU0FBUyxrQkFBa0IsYUFBYSxDQUFDO0FBRTFELFFBQUksUUFBUSxhQUFhLEdBQUcsR0FBRztBQUM5QixVQUFJLFVBQVUsUUFBVztBQUN4QixlQUFPO0FBQUEsTUFDUjtBQUVBLFVBQUksUUFBUSxhQUFhLEdBQUcsTUFBTSxPQUFPO0FBQ3hDLGVBQU87QUFBQSxNQUNSO0FBQUEsSUFDRDtBQUVBLFFBQUksV0FBVyxlQUFlLEdBQUc7QUFDakMsUUFBSSxVQUFVO0FBQVcsa0JBQVksSUFBSSxlQUFlLEtBQUssQ0FBQztBQUM5RCxVQUFNLFNBQVMsUUFBUSxRQUFRLElBQUksUUFBUSxHQUFHO0FBQzlDLFFBQUksa0JBQWtCLGFBQWE7QUFDbEMsYUFBTztBQUFBLElBQ1I7QUFDQSxXQUFPO0FBQUEsRUFDUjtBQWlDQSxXQUFTLG1CQUFtQixTQUFTLFdBQVc7QUFDL0MscUJBQWlCLFNBQVMsa0JBQWtCLGFBQWEsQ0FBQztBQUUxRCxRQUFJLFNBQVMsV0FBVyxTQUFTLGVBQWUsU0FBUyxDQUFDLEdBQUc7QUFDNUQsYUFBTztBQUFBLElBQ1I7QUFFQSxVQUFNLFNBQVMsUUFBUSxRQUFRLElBQUksU0FBUyxFQUFFO0FBQzlDLFFBQUksa0JBQWtCLGFBQWE7QUFDbEMsYUFBTztBQUFBLElBQ1I7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQXRhQTtBQUFBO0FBT0E7QUFDQTtBQUNBO0FBS0EsTUFBQUM7QUFBQTtBQUFBOzs7QUMwQ0EsV0FBUyxjQUFjO0FBQ3RCLFVBQU1DLFlBQVcsVUFBVSxJQUFJLFVBQVU7QUFDekMsUUFBSSxPQUFPQSxjQUFhLFVBQVU7QUFDakMsWUFBTSxJQUFJLE1BQU0sMkJBQTJCO0FBQUEsSUFDNUM7QUFFQSxXQUFPQTtBQUFBLEVBQ1I7QUF5Q0EsV0FBUyxZQUFZO0FBQ3BCLFVBQU1DLFVBQVMsVUFBVSxJQUFJLFFBQVE7QUFDckMsUUFBSSxPQUFPQSxZQUFXLFVBQVU7QUFDL0IsWUFBTSxJQUFJLE1BQU0sMkJBQTJCO0FBQUEsSUFDNUM7QUFFQSxXQUFPQTtBQUFBLEVBQ1I7QUF3Q0EsV0FBUyw4QkFBOEIsTUFBTTtBQUM1QyxtQkFBZSxJQUFJO0FBRW5CLFVBQU1ELFlBQVcsWUFBWTtBQUM3QixVQUFNLFdBQVdBLFVBQVMsY0FBYyxVQUFVO0FBQ2xELGFBQVMsWUFBWTtBQUVyQixXQUFPLFNBQVM7QUFBQSxFQUNqQjtBQWNBLFdBQVMseUJBQXlCLFNBQVMsVUFBVTtBQUNwRCxRQUFJLENBQUMsU0FBUztBQUNiLGFBQU87QUFBQSxJQUNSO0FBR0EsUUFBSSxRQUFRLE9BQU8sVUFBVTtBQUM1QixhQUFPO0FBQUEsSUFDUjtBQUdBLFFBQUksUUFBUSxZQUFZO0FBQ3ZCLFlBQU0sU0FBUyxRQUFRLFdBQVcsZUFBZSxRQUFRO0FBQ3pELFVBQUksUUFBUTtBQUNYLGVBQU87QUFBQSxNQUNSO0FBQUEsSUFDRDtBQUdBLFFBQUksWUFBWSxTQUFTLGlCQUFpQjtBQUN6QyxZQUFNLFNBQVMsU0FBUyxlQUFlLFFBQVE7QUFDL0MsVUFBSSxRQUFRO0FBQ1gsZUFBTztBQUFBLE1BQ1I7QUFBQSxJQUNEO0FBR0EsVUFBTSxXQUFXLFFBQVEsWUFBWTtBQUNyQyxRQUFJLFlBQVksb0JBQW9CLFlBQVk7QUFDL0MsYUFBTyx5QkFBeUIsU0FBUyxNQUFNLFFBQVE7QUFBQSxJQUN4RDtBQUdBLFdBQU8seUJBQXlCLFFBQVEsZUFBZSxRQUFRO0FBQUEsRUFDaEU7QUFPQSxXQUFTLG9CQUFvQixTQUFTO0FBQ3JDLFFBQUksY0FBYyxRQUFRO0FBQzFCLFFBQUksZ0JBQWdCLFFBQVE7QUFFNUIsV0FDQyxpQkFDQSxjQUFjLGFBQWEsS0FBSyxpQkFDaEMsY0FBYyxhQUFhLEtBQUssd0JBQy9CO0FBQ0QsVUFBSSxlQUFlLFlBQVksWUFBWTtBQUMxQyx3QkFBZ0IsWUFBWTtBQUM1QixzQkFBYyxjQUFjO0FBQUEsTUFDN0IsV0FBVyxjQUFjLFlBQVk7QUFDcEMsd0JBQWdCLGNBQWM7QUFDOUIsc0JBQWM7QUFBQSxNQUNmLFdBQ0MsZUFDQSxZQUFZLFFBQ1osWUFBWSxLQUFLLGFBQWEsS0FBSyxlQUNsQztBQUNELHdCQUFnQixZQUFZO0FBQzVCLHNCQUFjO0FBQUEsTUFDZixPQUFPO0FBQ04sd0JBQWdCO0FBQ2hCLHNCQUFjO0FBQUEsTUFDZjtBQUFBLElBQ0Q7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQVdBLFdBQVMsc0JBQXNCLFNBQVM7QUFDdkMsUUFDQyxDQUFDLFdBQ0QsRUFDQyxtQkFBbUIsZUFDbkIsbUJBQW1CLFFBQVEsY0FBYyxZQUFZLGNBRXJEO0FBQ0QsWUFBTSxJQUFJLE1BQU0sNENBQTRDO0FBQUEsSUFDN0Q7QUFFQSxXQUFPLG9CQUFvQixPQUFPLEtBQUs7QUFBQSxFQUN4QztBQTFRQTtBQUFBO0FBT0E7QUFDQTtBQUFBO0FBQUE7OztBQ1JBLE1BbUJNO0FBbkJOO0FBQUE7QUFPQTtBQUNBO0FBV0EsTUFBTSxRQUFOLGNBQW9CLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUl4QixjQUFjO0FBQ2IsZ0JBQU07QUFDTixlQUFLLE9BQU8sQ0FBQztBQUFBLFFBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksOEJBQThCO0FBQUEsUUFDakQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLFVBQVU7QUFDVCxpQkFBTyxLQUFLLEtBQUssV0FBVztBQUFBLFFBQzdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsT0FBTztBQUNOLGNBQUksS0FBSyxRQUFRLEdBQUc7QUFDbkIsbUJBQU87QUFBQSxVQUNSO0FBRUEsaUJBQU8sS0FBSyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUM7QUFBQSxRQUN4QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsS0FBSyxPQUFPO0FBQ1gsZUFBSyxLQUFLLEtBQUssS0FBSztBQUNwQixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxRQUFRO0FBQ1AsZUFBSyxPQUFPLENBQUM7QUFDYixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBU0EsTUFBTTtBQUNMLGNBQUksS0FBSyxRQUFRLEdBQUc7QUFDbkIsbUJBQU87QUFBQSxVQUNSO0FBQ0EsaUJBQU8sS0FBSyxLQUFLLElBQUk7QUFBQSxRQUN0QjtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNtR0EsV0FBUyxRQUFRLFNBQVMsTUFBTSxPQUFPO0FBQ3RDLFFBQUksVUFBVSxRQUFXO0FBQ3hCLGNBQVE7QUFBQSxJQUNUO0FBQ0Esb0JBQWdCLEtBQUs7QUFFckIsVUFBTSxTQUFTLG9CQUFJLElBQUk7QUFFdkIsUUFBSSxRQUFRLElBQUksR0FBRztBQUNsQixhQUFPLEtBQUssS0FBSyxTQUFTO0FBQUEsSUFDM0I7QUFFQSxRQUFJLFNBQVMsT0FBTyxLQUFLLFFBQVEsT0FBTyxHQUFHO0FBQzFDLGlCQUFXLENBQUMsS0FBSyxLQUFLLEtBQUssT0FBTyxRQUFRLE9BQU8sR0FBRztBQUNuRCxlQUFPLElBQUksS0FBSyxnQkFBZ0IsS0FBSyxNQUFNLE9BQU8sTUFBTSxLQUFLLENBQUM7QUFBQSxNQUMvRDtBQUFBLElBQ0QsT0FBTztBQUNOLFlBQU0sTUFBTSxLQUFLLE1BQU0sU0FBUyxFQUFFLE1BQU07QUFDeEMsYUFBTyxJQUFJLEtBQUssZ0JBQWdCLEtBQUssTUFBTSxTQUFTLE1BQU0sS0FBSyxDQUFDO0FBQUEsSUFDakU7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQWFBLFdBQVMsZ0JBQWdCLFNBQVMsTUFBTSxPQUFPO0FBQzlDLFFBQUksVUFBVSxRQUFXO0FBQ3hCLGNBQVE7QUFBQSxJQUNUO0FBQ0Esb0JBQWdCLEtBQUs7QUFFckIsUUFBSSxFQUFFLFFBQVEsSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJO0FBQ3ZDLFlBQU0sSUFBSSxNQUFNLCtDQUErQztBQUFBLElBQ2hFO0FBRUEsUUFBSTtBQUNKLFFBQUksU0FBUyxJQUFJLEdBQUc7QUFDbkIsVUFBSSxTQUFTLElBQUk7QUFDaEIsZUFBTztBQUFBLE1BQ1I7QUFFQSxjQUFRLEtBQUssTUFBTSxTQUFTO0FBQUEsSUFDN0I7QUFFQSxRQUFJLFVBQVUsTUFBTSxNQUFNO0FBRTFCLFFBQUksWUFBWSxLQUFLLFVBQVU7QUFDOUIsYUFBTyxRQUFRLEtBQUssTUFBTSxTQUFTLE1BQU0sS0FBSyxTQUFTLEdBQUcsS0FBSztBQUFBLElBQ2hFO0FBRUEsUUFBSSxTQUFTLE9BQU8sS0FBSyxRQUFRLE9BQU8sR0FBRztBQUMxQyxVQUFJO0FBQ0osVUFBSSxtQkFBbUIsT0FBTyxtQkFBbUIsU0FBUztBQUN6RCxpQkFBUyxRQUFRLElBQUksT0FBTztBQUFBLE1BQzdCLFdBQVcsbUJBQW1CLE9BQU8sbUJBQW1CLFNBQVM7QUFDaEUsa0JBQVUsU0FBUyxPQUFPO0FBQzFCLHdCQUFnQixPQUFPO0FBQ3ZCLGlCQUFTLENBQUMsR0FBRyxPQUFPLElBQUksT0FBTztBQUFBLE1BQ2hDLFdBQVcsT0FBTyxZQUFZLGNBQWMsbUJBQW1CLFNBQVM7QUFDdkUsY0FBTSxNQUFNLHVDQUF1QztBQUFBLE1BQ3BELFdBQVcsUUFBUSxPQUFPLEdBQUc7QUFDNUIsa0JBQVUsU0FBUyxPQUFPO0FBQzFCLHdCQUFnQixPQUFPO0FBQ3ZCLGlCQUFTLFVBQVUsT0FBTztBQUFBLE1BQzNCLE9BQU87QUFDTixpQkFBUyxVQUFVLE9BQU87QUFBQSxNQUMzQjtBQUVBLFVBQUksU0FBUyxNQUFNLEtBQUssUUFBUSxNQUFNLEdBQUc7QUFDeEMsZUFBTyxnQkFBZ0IsS0FBSyxNQUFNLFFBQVEsTUFBTSxLQUFLLFNBQVMsR0FBRyxLQUFLO0FBQUEsTUFDdkU7QUFFQSxVQUFJLE1BQU0sU0FBUyxHQUFHO0FBQ3JCLGNBQU0sTUFBTSxrQ0FBa0MsTUFBTSxLQUFLLFNBQVMsQ0FBQyxHQUFHO0FBQUEsTUFDdkU7QUFFQSxVQUFJLFVBQVUsTUFBTTtBQUNuQixjQUFNLGFBQWEsT0FBTztBQUFBLFVBQ3pCLE9BQU8sZUFBZSxPQUFPO0FBQUEsVUFDN0I7QUFBQSxRQUNEO0FBRUEsWUFBSSxDQUFDLFFBQVEsZUFBZSxPQUFPLEtBQUssZUFBZSxRQUFXO0FBQ2pFLGdCQUFNLE1BQU0sZUFBZTtBQUFBLFFBQzVCO0FBQUEsTUFDRDtBQUVBLGFBQU87QUFBQSxJQUNSO0FBRUEsVUFBTSxVQUFVLG9CQUFvQixPQUFPLE9BQU8sRUFBRTtBQUFBLEVBQ3JEO0FBY0EsV0FBUyxnQkFBZ0IsU0FBUyxNQUFNLE9BQU87QUFDOUMsUUFBSSxFQUFFLFFBQVEsSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJO0FBQ3ZDLFlBQU0sSUFBSSxNQUFNLCtDQUErQztBQUFBLElBQ2hFO0FBRUEsUUFBSTtBQUNKLFFBQUksUUFBUSxJQUFJLEdBQUc7QUFDbEIsVUFBSSxLQUFLLFdBQVcsR0FBRztBQUN0QixlQUFPO0FBQUEsTUFDUjtBQUVBLGNBQVE7QUFBQSxJQUNULE9BQU87QUFDTixjQUFRLEtBQUssTUFBTSxTQUFTO0FBQUEsSUFDN0I7QUFFQSxRQUFJLE9BQU8sTUFBTSxJQUFJO0FBQ3JCLFVBQU0sVUFBVSxNQUFNLEtBQUssU0FBUztBQUVwQyxVQUFNLFFBQVEsSUFBSSxNQUFNO0FBQ3hCLFFBQUksVUFBVTtBQUNkLFdBQU8sTUFBTTtBQUNaLFVBQUk7QUFDSCx3QkFBZ0IsS0FBSyxNQUFNLFNBQVMsU0FBUyxJQUFJO0FBQ2pEO0FBQUEsTUFDRCxTQUFTLEdBQUc7QUFBQSxNQUFDO0FBRWIsWUFBTSxLQUFLLE9BQU87QUFDbEIsWUFBTSxJQUFJO0FBQ1YsZ0JBQVUsTUFBTSxLQUFLLFNBQVM7QUFFOUIsVUFBSSxZQUFZO0FBQUk7QUFBQSxJQUNyQjtBQUVBLFdBQU8sQ0FBQyxNQUFNLFFBQVEsR0FBRztBQUN4QixnQkFBVSxNQUFNLElBQUk7QUFDcEIsVUFBSSxNQUFNLENBQUM7QUFFWCxVQUFJLENBQUMsTUFBTSxRQUFRLEdBQUc7QUFDckIsY0FBTSxJQUFJLE1BQU0sS0FBSyxFQUFFLE1BQU0sU0FBUyxFQUFFLElBQUk7QUFDNUMsWUFBSSxVQUFVLFNBQVMsQ0FBQyxDQUFDLEdBQUc7QUFDM0IsZ0JBQU0sQ0FBQztBQUFBLFFBQ1I7QUFBQSxNQUNEO0FBRUEsc0JBQWdCLEtBQUssTUFBTSxTQUFTLFNBQVMsR0FBRztBQUFBLElBQ2pEO0FBRUEsVUFBTSxTQUFTLGdCQUFnQixLQUFLLE1BQU0sU0FBUyxPQUFPO0FBRTFELFFBQUksRUFBRSxTQUFTLE9BQU8sS0FBSyxRQUFRLE9BQU8sSUFBSTtBQUM3QyxZQUFNLFVBQVUscUJBQXFCLE9BQU8sT0FBTyxFQUFFO0FBQUEsSUFDdEQ7QUFFQSxRQUFJLGtCQUFrQixPQUFPLGtCQUFrQixTQUFTO0FBQ3ZELGFBQU8sSUFBSSxNQUFNLEtBQUs7QUFBQSxJQUN2QixXQUFXLGtCQUFrQixPQUFPLGtCQUFrQixTQUFTO0FBQzlELGFBQU8sT0FBTyxLQUFLO0FBQUEsSUFDcEIsV0FBVyxPQUFPLFlBQVksY0FBYyxrQkFBa0IsU0FBUztBQUN0RSxZQUFNLE1BQU0sdUNBQXVDO0FBQUEsSUFDcEQsV0FBVyxRQUFRLE1BQU0sR0FBRztBQUMzQixhQUFPLFNBQVMsSUFBSTtBQUNwQixzQkFBZ0IsSUFBSTtBQUNwQixxQkFBZSxRQUFRLE1BQU0sS0FBSztBQUFBLElBQ25DLE9BQU87QUFDTixxQkFBZSxRQUFRLE1BQU0sS0FBSztBQUFBLElBQ25DO0FBQUEsRUFDRDtBQVFBLFdBQVMsZUFBZSxRQUFRLEtBQUssT0FBTztBQUMzQyxRQUFJLENBQUMsT0FBTyxlQUFlLEdBQUcsR0FBRztBQUNoQyxhQUFPLEdBQUcsSUFBSTtBQUNkO0FBQUEsSUFDRDtBQUVBLFFBQUksVUFBVSxRQUFXO0FBQ3hCLGFBQU8sT0FBTyxHQUFHO0FBQUEsSUFDbEI7QUFFQSxXQUFPLEdBQUcsSUFBSTtBQUFBLEVBQ2Y7QUFlQSxXQUFTLG1CQUFtQixTQUFTLE1BQU07QUFDMUMsUUFBSSxFQUFFLFFBQVEsSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJO0FBQ3ZDLFlBQU0sSUFBSSxNQUFNLCtDQUErQztBQUFBLElBQ2hFO0FBRUEsUUFBSTtBQUNKLFFBQUksUUFBUSxJQUFJLEdBQUc7QUFDbEIsVUFBSSxLQUFLLFdBQVcsR0FBRztBQUN0QixlQUFPO0FBQUEsTUFDUjtBQUVBLGNBQVE7QUFBQSxJQUNULE9BQU87QUFDTixjQUFRLEtBQUssTUFBTSxTQUFTO0FBQUEsSUFDN0I7QUFFQSxRQUFJLE9BQU8sTUFBTSxJQUFJO0FBQ3JCLFVBQU0sVUFBVSxNQUFNLEtBQUssU0FBUztBQUVwQyxVQUFNLFNBQVMsZ0JBQWdCLEtBQUssTUFBTSxTQUFTLE9BQU87QUFFMUQsUUFBSSxrQkFBa0IsS0FBSztBQUMxQixhQUFPLE9BQU8sSUFBSTtBQUFBLElBQ25CLFdBQ0Msa0JBQWtCLE9BQ2xCLGtCQUFrQixXQUNsQixrQkFBa0IsV0FDakIsT0FBTyxZQUFZLGNBQWMsa0JBQWtCLFNBQ25EO0FBQ0QsWUFBTSxNQUFNLHVDQUF1QztBQUFBLElBQ3BELFdBQVcsUUFBUSxNQUFNLEdBQUc7QUFDM0IsYUFBTyxTQUFTLElBQUk7QUFDcEIsc0JBQWdCLElBQUk7QUFDcEIsYUFBTyxPQUFPLElBQUk7QUFBQSxJQUNuQixPQUFPO0FBQ04sYUFBTyxPQUFPLElBQUk7QUFBQSxJQUNuQjtBQUFBLEVBQ0Q7QUEzYkEsTUE4Qk0sV0FNQSxVQStDQTtBQW5GTjtBQUFBO0FBT0E7QUFDQTtBQU9BO0FBQ0E7QUFjQSxNQUFNLFlBQVk7QUFNbEIsTUFBTSxXQUFXO0FBK0NqQixNQUFNLGFBQU4sY0FBeUIsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU03QixZQUFZLFFBQVE7QUFDbkIsZ0JBQU07QUFFTixjQUFJLFlBQVksTUFBTSxHQUFHO0FBQ3hCLGtCQUFNLElBQUksTUFBTSx5Q0FBeUM7QUFBQSxVQUMxRDtBQUVBLGVBQUssU0FBUztBQUNkLGVBQUssV0FBVztBQUFBLFFBQ2pCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVNBLFlBQVksVUFBVTtBQUNyQix5QkFBZSxRQUFRO0FBQ3ZCLGVBQUssV0FBVztBQUNoQixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFhQSxPQUFPLE1BQU07QUFDWixpQkFBTyxnQkFBZ0IsS0FBSyxNQUFNLEtBQUssUUFBUSxJQUFJO0FBQUEsUUFDcEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFhQSxPQUFPLE1BQU0sT0FBTztBQUNuQiwwQkFBZ0IsS0FBSyxNQUFNLEtBQUssUUFBUSxNQUFNLEtBQUs7QUFDbkQsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBYUEsVUFBVSxNQUFNO0FBQ2YsNkJBQW1CLEtBQUssTUFBTSxLQUFLLFFBQVEsSUFBSTtBQUMvQyxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVdBLE9BQU8sTUFBTTtBQUNaLGNBQUk7QUFDSCw0QkFBZ0IsS0FBSyxNQUFNLEtBQUssUUFBUSxNQUFNLElBQUk7QUFDbEQsbUJBQU87QUFBQSxVQUNSLFNBQVMsR0FBRztBQUFBLFVBQUM7QUFFYixpQkFBTztBQUFBLFFBQ1I7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDbEpBLFdBQVMsTUFBTSxLQUFLO0FBRW5CLFFBQUksU0FBUyxLQUFLO0FBQ2pCLGFBQU87QUFBQSxJQUNSO0FBR0EsUUFBSSxZQUFZLEdBQUcsR0FBRztBQUNyQixhQUFPO0FBQUEsSUFDUjtBQUdBLFFBQUksV0FBVyxHQUFHLEdBQUc7QUFDcEIsYUFBTztBQUFBLElBQ1I7QUFHQSxRQUFJLFFBQVEsR0FBRyxHQUFHO0FBQ2pCLFlBQU0sT0FBTyxDQUFDO0FBQ2QsZUFBUyxJQUFJLEdBQUcsTUFBTSxJQUFJLFFBQVEsSUFBSSxLQUFLLEtBQUs7QUFDL0MsYUFBSyxDQUFDLElBQUksTUFBTSxJQUFJLENBQUMsQ0FBQztBQUFBLE1BQ3ZCO0FBRUEsYUFBTztBQUFBLElBQ1I7QUFFQSxRQUFJLFNBQVMsR0FBRyxHQUFHO0FBRWxCLFVBQUksZUFBZSxNQUFNO0FBQ3hCLGNBQU0sT0FBTyxvQkFBSSxLQUFLO0FBQ3RCLGFBQUssUUFBUSxJQUFJLFFBQVEsQ0FBQztBQUMxQixlQUFPO0FBQUEsTUFDUjtBQUdBLFVBQUksT0FBTyxZQUFZLGVBQWUsZUFBZTtBQUFTLGVBQU87QUFDckUsVUFBSSxPQUFPLGlCQUFpQixlQUFlLGVBQWU7QUFDekQsZUFBTztBQUNSLFVBQ0MsT0FBTyxxQkFBcUIsZUFDNUIsZUFBZTtBQUVmLGVBQU87QUFHUixVQUFJLFFBQVEsVUFBVTtBQUFHLGVBQU87QUFDaEMsVUFBSSxPQUFPLGtCQUFrQixlQUFlLFFBQVE7QUFDbkQsZUFBTztBQUNSLFVBQUksT0FBTyxXQUFXLGVBQWUsUUFBUTtBQUFRLGVBQU87QUFDNUQsVUFBSSxPQUFPLGFBQWEsZUFBZSxRQUFRO0FBQVUsZUFBTztBQUNoRSxVQUFJLE9BQU8sY0FBYyxlQUFlLFFBQVE7QUFBVyxlQUFPO0FBQ2xFLFVBQUksT0FBTyxTQUFTLGVBQWUsUUFBUTtBQUFNLGVBQU87QUFHeEQsVUFBSTtBQUVILFlBQUksZUFBZSxPQUFPO0FBQ3pCLGlCQUFPO0FBQUEsUUFDUjtBQUFBLE1BQ0QsU0FBUyxHQUFHO0FBQUEsTUFBQztBQUViLGFBQU8sWUFBWSxHQUFHO0FBQUEsSUFDdkI7QUFFQSxVQUFNLElBQUksTUFBTSxnREFBZ0Q7QUFBQSxFQUNqRTtBQVFBLFdBQVMsWUFBWSxLQUFLO0FBQ3pCLG1CQUFlLEdBQUc7QUFFbEIsVUFBTSxNQUFNLE1BQU0sYUFBYTtBQUcvQixRQUFJLE9BQU8sR0FBRyxNQUFNLFlBQVk7QUFDL0IsWUFBTSxZQUFZLEtBQUs7QUFDdkIsVUFBSSxPQUFPLGNBQWMsVUFBVTtBQUNsQyxZQUNDLFVBQVUsZUFBZSxVQUFVLEtBQ25DLE9BQU8sSUFBSSxRQUFRLE1BQU0sWUFDeEI7QUFDRCxpQkFBTyxJQUFJLFNBQVM7QUFBQSxRQUNyQjtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBRUEsUUFBSSxPQUFPLENBQUM7QUFDWixRQUNDLE9BQU8sSUFBSSxnQkFBZ0IsY0FDM0IsT0FBTyxJQUFJLFlBQVksU0FBUyxZQUMvQjtBQUNELGFBQU8sSUFBSSxJQUFJLFlBQVk7QUFBQSxJQUM1QjtBQUVBLGVBQVcsT0FBTyxLQUFLO0FBQ3RCLFVBQUksQ0FBQyxJQUFJLGVBQWUsR0FBRyxHQUFHO0FBQzdCO0FBQUEsTUFDRDtBQUVBLFVBQUksWUFBWSxJQUFJLEdBQUcsQ0FBQyxHQUFHO0FBQzFCLGFBQUssR0FBRyxJQUFJLElBQUksR0FBRztBQUNuQjtBQUFBLE1BQ0Q7QUFFQSxXQUFLLEdBQUcsSUFBSSxNQUFNLElBQUksR0FBRyxDQUFDO0FBQUEsSUFDM0I7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQWhKQTtBQUFBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBOzs7QUN5UEEsV0FBUyxZQUFZLFFBQVE7QUFDNUIsYUFBUyxlQUFlLE1BQU0sRUFBRSxRQUFRLE1BQU0sR0FBRztBQUVqRCxRQUFJO0FBQ0osUUFBSTtBQUNKLFFBQUk7QUFDSixRQUFJO0FBQ0osUUFBSTtBQUNKLFFBQUk7QUFDSixVQUFNLGVBQ0w7QUFDRCxVQUFNLGlCQUNMO0FBQ0QsVUFBTSxxQkFBcUIsSUFBSSxjQUFjLElBQUksWUFBWTtBQUM3RCxVQUFNLGtCQUFrQjtBQUN4QixVQUFNLGlCQUFpQjtBQUN2QixVQUFNLGlCQUFpQixJQUFJLGNBQWM7QUFDekMsVUFBTSxlQUFlO0FBQ3JCLFVBQU0sY0FBYztBQUNwQixVQUFNLGNBQWM7QUFDcEIsVUFBTSxlQUFlO0FBQ3JCLFVBQU0sZ0JBQWdCLG9CQUFvQixZQUFZO0FBQ3RELFVBQU0sZUFBZSxJQUFJLGFBQWEsS0FBSyxXQUFXLE9BQU8sV0FBVyxPQUFPLFlBQVksT0FBTyxjQUFjLE9BQU8sZUFBZTtBQUN0SSxVQUFNLG1CQUFtQixLQUFLLGtCQUFrQixJQUFJLFlBQVksSUFBSSxlQUFlO0FBQ25GLFVBQU0sUUFBUSxJQUFJLE9BQU8sZ0JBQWdCO0FBQ3pDLFFBQUk7QUFFSixTQUFLLFFBQVEsTUFBTSxLQUFLLE1BQU0sT0FBTyxNQUFNO0FBQzFDLFVBQUksTUFBTSxVQUFVLE1BQU0sV0FBVztBQUNwQyxjQUFNO0FBQUEsTUFDUDtBQUFBLElBQ0Q7QUFFQSxRQUFJLFVBQVUsVUFBYSxVQUFVLE1BQU07QUFDMUMsWUFBTSxJQUFJLE1BQU0sb0JBQW9CO0FBQUEsSUFDckM7QUFFQSxRQUFJLE1BQU0sQ0FBQyxNQUFNLFFBQVc7QUFDM0IsaUJBQVcsTUFBTSxDQUFDO0FBRWxCLGNBQVEsU0FBUyxNQUFNLEdBQUc7QUFDMUIsVUFBSSxNQUFNLFNBQVMsR0FBRztBQUNyQixtQkFBVyxNQUFNLENBQUM7QUFDbEIsa0JBQVUsTUFBTSxDQUFDO0FBQUEsTUFDbEI7QUFBQSxJQUNEO0FBRUEsUUFBSSxNQUFNLEVBQUUsTUFBTSxRQUFXO0FBQzVCLGVBQVMsTUFBTSxFQUFFO0FBQUEsSUFDbEI7QUFFQSxRQUFJLE1BQU0sRUFBRSxNQUFNLFFBQVc7QUFDNUIsZUFBUyxNQUFNLEVBQUU7QUFBQSxJQUNsQjtBQUVBLFFBQUksTUFBTSxFQUFFLE1BQU0sUUFBVztBQUM1QixpQkFBVyxNQUFNLEVBQUU7QUFBQSxJQUNwQjtBQUVBLFdBQU8sSUFBSSxPQUFPLFVBQVUsUUFBUSxRQUFRLFVBQVUsT0FBTztBQUFBLEVBQzlEO0FBL1RBLE1Ba0JNLGtCQU1BLG9CQTBDQTtBQWxFTjtBQUFBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFRQSxNQUFNLG1CQUFtQixPQUFPLFlBQVk7QUFNNUMsTUFBTSxxQkFBcUIsT0FBTyxjQUFjO0FBMENoRCxNQUFNLFNBQU4sY0FBcUIsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBVXpCLFlBQVksVUFBVSxRQUFRLFFBQVEsVUFBVSxTQUFTLFlBQVk7QUFDcEUsZ0JBQU07QUFFTixlQUFLLGdCQUFnQixJQUFJO0FBQUEsWUFDeEIsVUFBVSxhQUFhLFNBQVksU0FBWSxlQUFlLFFBQVE7QUFBQSxZQUN0RSxRQUFRLFdBQVcsU0FBWSxTQUFZLGVBQWUsTUFBTTtBQUFBLFlBQ2hFLFFBQVEsV0FBVyxTQUFZLFNBQVksZUFBZSxNQUFNO0FBQUEsWUFDaEUsVUFBVSxhQUFhLFNBQVksU0FBWSxlQUFlLFFBQVE7QUFBQSxZQUN0RSxTQUFTLFlBQVksU0FBWSxTQUFZLGVBQWUsT0FBTztBQUFBLFlBQ25FLFlBQ0MsZUFBZSxTQUFZLFNBQVksZUFBZSxVQUFVO0FBQUEsVUFDbEU7QUFFQSxnQkFBTSxJQUFJLENBQUM7QUFDWCxjQUFJLGFBQWE7QUFBVyxjQUFFLEtBQUssUUFBUTtBQUMzQyxjQUFJLFdBQVc7QUFBVyxjQUFFLEtBQUssTUFBTTtBQUN2QyxjQUFJLFdBQVc7QUFBVyxjQUFFLEtBQUssTUFBTTtBQUN2QyxjQUFJLGFBQWE7QUFBVyxjQUFFLEtBQUssUUFBUTtBQUMzQyxjQUFJLFlBQVk7QUFBVyxjQUFFLEtBQUssT0FBTztBQUN6QyxjQUFJLGVBQWU7QUFBVyxjQUFFLEtBQUssVUFBVTtBQUUvQyxjQUFJLEVBQUUsV0FBVyxHQUFHO0FBQ25CLGtCQUFNLElBQUksTUFBTSxvQkFBb0I7QUFBQSxVQUNyQztBQUVBLGVBQUssa0JBQWtCLElBQUksRUFBRSxLQUFLLEdBQUc7QUFBQSxRQUN0QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSx3Q0FBd0M7QUFBQSxRQUMzRDtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsSUFBSSxlQUFlO0FBQ2xCLGlCQUFPLEtBQUssa0JBQWtCO0FBQUEsUUFDL0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLElBQUksV0FBVztBQUNkLGlCQUFPLEtBQUssZ0JBQWdCLEVBQUU7QUFBQSxRQUMvQjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsSUFBSSxTQUFTO0FBQ1osaUJBQU8sS0FBSyxnQkFBZ0IsRUFBRTtBQUFBLFFBQy9CO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxJQUFJLFNBQVM7QUFDWixpQkFBTyxLQUFLLGdCQUFnQixFQUFFO0FBQUEsUUFDL0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLElBQUksV0FBVztBQUNkLGlCQUFPLEtBQUssZ0JBQWdCLEVBQUU7QUFBQSxRQUMvQjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsSUFBSSxVQUFVO0FBQ2IsaUJBQU8sS0FBSyxnQkFBZ0IsRUFBRTtBQUFBLFFBQy9CO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxJQUFJLGFBQWE7QUFDaEIsaUJBQU8sS0FBSyxnQkFBZ0IsRUFBRTtBQUFBLFFBQy9CO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxXQUFXO0FBQ1YsaUJBQU8sR0FBRyxLQUFLLFlBQVk7QUFBQSxRQUM1QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFNBQVM7QUFDUixpQkFBTyxNQUFNLEtBQUssZ0JBQWdCLENBQUM7QUFBQSxRQUNwQztBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUMzSUEsV0FBUyxzQkFBc0I7QUFDOUIsVUFBTUUsWUFBVyxZQUFZO0FBRTdCLFVBQU0sT0FBT0EsVUFBUyxjQUFjLE1BQU07QUFDMUMsUUFBSSxnQkFBZ0IsZUFBZSxLQUFLLGFBQWEsTUFBTSxHQUFHO0FBQzdELFlBQU0sU0FBUyxLQUFLLGFBQWEsTUFBTTtBQUN2QyxVQUFJLFFBQVE7QUFDWCxlQUFPLElBQUksWUFBWSxNQUFNO0FBQUEsTUFDOUI7QUFBQSxJQUNEO0FBRUEsVUFBTSxvQkFBb0IscUJBQXFCO0FBQy9DLFFBQUksbUJBQW1CO0FBQ3RCLGFBQU8sWUFBWSxpQkFBaUI7QUFBQSxJQUNyQztBQUVBLFdBQU8sWUFBWSxnQkFBZ0I7QUFBQSxFQUNwQztBQXZEQSxNQWlCTSxrQkE4Q0E7QUEvRE4sTUFBQUMsZUFBQTtBQUFBO0FBT0E7QUFDQTtBQUNBO0FBUUEsTUFBTSxtQkFBbUI7QUE4Q3pCLE1BQU0sdUJBQXVCLE1BQU07QUFDbEMsY0FBTUMsYUFBWSxnQkFBZ0IsV0FBVztBQUM3QyxZQUFJQSxlQUFjLFFBQVc7QUFDNUIsaUJBQU87QUFBQSxRQUNSO0FBRUEsWUFBSUEsV0FBVSxlQUFlLFVBQVUsR0FBRztBQUN6QyxnQkFBTSxXQUFXQSxXQUFVO0FBQzNCLGNBQUksT0FBTyxhQUFhLFlBQVksU0FBUyxTQUFTLEdBQUc7QUFDeEQsbUJBQU87QUFBQSxVQUNSO0FBQUEsUUFDRDtBQUVBLGNBQU0sWUFBWUEsWUFBVztBQUM3QixZQUFJLE1BQU0sUUFBUSxTQUFTLEtBQUssVUFBVSxTQUFTLEdBQUc7QUFDckQsaUJBQU8sVUFBVSxDQUFDO0FBQUEsUUFDbkI7QUFFQSxlQUFPO0FBQUEsTUFDUjtBQUFBO0FBQUE7OztBQ2xGQSxNQWdCTSxpQkFpQkE7QUFqQ047QUFBQTtBQU9BO0FBQ0E7QUFRQSxNQUFNLGtCQUFrQixvQkFBSSxJQUFJO0FBaUJoQyxNQUFNLEtBQU4sY0FBaUIsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1yQixZQUFZLFFBQVE7QUFDbkIsZ0JBQU07QUFFTixjQUFJLFdBQVcsUUFBVztBQUN6QixxQkFBUztBQUFBLFVBQ1Y7QUFFQSx5QkFBZSxNQUFNO0FBRXJCLGNBQUksQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLEdBQUc7QUFDakMsNEJBQWdCLElBQUksUUFBUSxDQUFDO0FBQUEsVUFDOUI7QUFFQSxjQUFJLFFBQVEsZ0JBQWdCLElBQUksTUFBTTtBQUN0QyxlQUFLLEtBQUssU0FBUztBQUVuQiwwQkFBZ0IsSUFBSSxRQUFRLEVBQUUsS0FBSztBQUFBLFFBQ3BDO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxXQUFXO0FBQ1YsaUJBQU8sS0FBSztBQUFBLFFBQ2I7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDaEVBLE1BOEJNO0FBOUJOO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbUJBLE1BQU0sa0JBQU4sY0FBOEIsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLbEMsWUFBWUMsVUFBUztBQUNwQixnQkFBTTtBQUVOLGNBQUlBLGFBQVksUUFBVztBQUMxQixZQUFBQSxXQUFVLENBQUM7QUFBQSxVQUNaO0FBRUEsZUFBSyxjQUFjLElBQUksT0FBTyxDQUFDLEdBQUcsS0FBSyxVQUFVLGVBQWVBLFFBQU8sQ0FBQztBQUFBLFFBQ3pFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWtCQSxJQUFJLFdBQVc7QUFDZCxpQkFBTyxDQUFDO0FBQUEsUUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVVBLFVBQVUsTUFBTSxjQUFjO0FBQzdCLGNBQUk7QUFFSixjQUFJO0FBQ0gsb0JBQVEsSUFBSSxXQUFXLEtBQUssY0FBYyxDQUFDLEVBQUUsT0FBTyxJQUFJO0FBQUEsVUFDekQsU0FBUyxHQUFHO0FBQUEsVUFBQztBQUViLGNBQUksVUFBVTtBQUFXLG1CQUFPO0FBQ2hDLGlCQUFPO0FBQUEsUUFDUjtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNuRkEsTUEyQk0sd0JBYUE7QUF4Q047QUFBQTtBQU9BO0FBQ0E7QUFLQSxNQUFBQztBQUNBO0FBQ0E7QUFDQTtBQVdBLE1BQU0seUJBQXlCLE9BQU87QUFBQSxRQUNyQztBQUFBLE1BQ0Q7QUFXQSxNQUFNLFdBQU4sY0FBdUIsZ0JBQWdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTXRDLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSwwQ0FBMEM7QUFBQSxRQUM3RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxnQkFBZ0IsUUFBUTtBQUN2QixjQUFJLFdBQVcsUUFBVztBQUN6QixxQkFBUyxvQkFBb0I7QUFBQSxVQUM5QjtBQUVBLGlCQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUN2QyxnQkFBSTtBQUNILHNCQUFRLElBQUksYUFBYSxNQUFNLENBQUM7QUFBQSxZQUNqQyxTQUFTLEdBQUc7QUFDWCxxQkFBTyxDQUFDO0FBQUEsWUFDVDtBQUFBLFVBQ0QsQ0FBQztBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxnQkFBZ0IsUUFBUSxTQUFTO0FBQ2hDLGNBQUksV0FBVyxRQUFXO0FBQ3pCLHFCQUFTLG9CQUFvQjtBQUFBLFVBQzlCO0FBRUEsY0FBSSxFQUFFLGtCQUFrQixTQUFTO0FBQ2hDLGtCQUFNLElBQUksTUFBTSxxQ0FBcUM7QUFBQSxVQUN0RDtBQUVBLGNBQUksRUFBRSxtQkFBbUIsY0FBYztBQUN0QyxzQkFBVSxTQUFTLGNBQWMsTUFBTTtBQUFBLFVBQ3hDO0FBRUEsY0FBSSxFQUFFLG1CQUFtQixjQUFjO0FBQ3RDLGtCQUFNLElBQUksTUFBTSwrQkFBK0I7QUFBQSxVQUNoRDtBQUVBLGlCQUFPLEtBQUssZ0JBQWdCLE1BQU0sRUFBRSxLQUFLLENBQUMsUUFBUTtBQUNqRCxnQkFBSSxlQUFlO0FBQ25CLGdCQUFJLGNBQWMsU0FBUyxzQkFBc0IsR0FBRztBQUNuRCxvQkFBTSxVQUFVLGlCQUFpQixTQUFTLHNCQUFzQjtBQUNoRSx5QkFBVyxLQUFLLFNBQVM7QUFDeEIsb0JBQUksYUFBYSxjQUFjO0FBQzlCLGlDQUFlO0FBQ2Y7QUFBQSxnQkFDRDtBQUFBLGNBQ0Q7QUFFQSxrQkFBSSxFQUFFLHdCQUF3QixlQUFlO0FBQzVDLHNCQUFNLElBQUksTUFBTSwyQ0FBMkM7QUFBQSxjQUM1RDtBQUVBLDJCQUFhLG1CQUFtQixHQUFHO0FBQUEsWUFDcEMsT0FBTztBQUNOLDhCQUFnQixTQUFTLHdCQUF3QixHQUFHO0FBQUEsWUFDckQ7QUFFQSxtQkFBTztBQUFBLFVBQ1IsQ0FBQztBQUFBLFFBQ0Y7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDd0dBLFdBQVMsd0JBQXdCLFNBQVM7QUFDekMsVUFBTUMsS0FBSSxZQUFZO0FBRXRCLFFBQUksRUFBRSxtQkFBbUIsY0FBYztBQUN0QyxnQkFBVUEsR0FBRTtBQUFBLFFBQ1gsSUFBSSxvQkFBb0IsTUFBTSx1QkFBdUIsU0FBUyxDQUFDO0FBQUEsTUFDaEU7QUFDQSxVQUFJLFlBQVksTUFBTTtBQUNyQixjQUFNLElBQUk7QUFBQSxVQUNUO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBRUEsUUFBSSxFQUFFLG1CQUFtQixjQUFjO0FBQ3RDLFlBQU0sSUFBSSxNQUFNLGdDQUFnQztBQUFBLElBQ2pEO0FBRUEsUUFBSSxDQUFDLGNBQWMsU0FBUyxzQkFBc0IsR0FBRztBQUNwRCxZQUFNLElBQUksTUFBTSxtQ0FBbUM7QUFBQSxJQUNwRDtBQUVBLFVBQU0sTUFBTSxpQkFBaUIsU0FBUyxzQkFBc0I7QUFFNUQsZUFBVyxLQUFLLEtBQUs7QUFDcEIsVUFBSSxhQUFhLGNBQWM7QUFDOUIsZUFBTztBQUFBLE1BQ1I7QUFBQSxJQUNEO0FBRUEsVUFBTSxJQUFJLE1BQU0sdUJBQXVCO0FBQUEsRUFDeEM7QUF4UEEsTUFpQ007QUFqQ047QUFBQTtBQU9BO0FBQ0E7QUFDQSxNQUFBQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQWNBLE1BQU0sZUFBTixNQUFNLHNCQUFxQixLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUsvQixZQUFZLFFBQVE7QUFDbkIsZ0JBQU07QUFFTixjQUFJLGtCQUFrQixRQUFRO0FBQzdCLGlCQUFLLFNBQVM7QUFBQSxVQUNmLE9BQU87QUFDTixpQkFBSyxTQUFTLFlBQVksZUFBZSxNQUFNLENBQUM7QUFBQSxVQUNqRDtBQUVBLGVBQUssVUFBVSxvQkFBSSxJQUFJO0FBQUEsUUFDeEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksOENBQThDO0FBQUEsUUFDakU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVdBLFFBQVEsS0FBSyxhQUFhO0FBQ3pCLGNBQUksQ0FBQyxLQUFLLFFBQVEsSUFBSSxHQUFHLEdBQUc7QUFDM0IsZ0JBQUksZ0JBQWdCLFFBQVc7QUFDOUIsb0JBQU0sSUFBSSxNQUFNLE9BQU8sR0FBRyxZQUFZO0FBQUEsWUFDdkM7QUFFQSxtQkFBTyxlQUFlLFdBQVc7QUFBQSxVQUNsQztBQUVBLGdCQUFNLElBQUksS0FBSyxRQUFRLElBQUksR0FBRztBQUM5QixjQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2hCLG1CQUFPLEtBQUssa0JBQWtCLEtBQUssU0FBUyxXQUFXO0FBQUEsVUFDeEQ7QUFFQSxpQkFBTyxLQUFLLFFBQVEsSUFBSSxHQUFHO0FBQUEsUUFDNUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFhQSxrQkFBa0IsS0FBSyxPQUFPLGFBQWE7QUFDMUMsY0FBSSxDQUFDLEtBQUssUUFBUSxJQUFJLEdBQUcsR0FBRztBQUMzQixtQkFBTyxlQUFlLFdBQVc7QUFBQSxVQUNsQztBQUVBLGdCQUFNLElBQUksZUFBZSxLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUM7QUFFOUMsY0FBSTtBQUNKLGNBQUksU0FBUyxLQUFLLEdBQUc7QUFDcEIsc0JBQVUsTUFBTSxlQUFlO0FBQUEsVUFDaEMsT0FBTztBQUNOLG9CQUFRLGdCQUFnQixLQUFLO0FBQzdCLGdCQUFJLFVBQVUsR0FBRztBQUVoQixrQkFBSSxFQUFFLGVBQWUsTUFBTSxHQUFHO0FBQzdCLHVCQUFPLGVBQWUsRUFBRSxNQUFNLENBQUM7QUFBQSxjQUNoQztBQUFBLFlBQ0Q7QUFFQSxzQkFBVSxJQUFJLEtBQUssWUFBWSxLQUFLLE9BQU8sU0FBUyxDQUFDLEVBQUU7QUFBQSxjQUN0RCxnQkFBZ0IsS0FBSztBQUFBLFlBQ3RCO0FBQUEsVUFDRDtBQUVBLGNBQUksRUFBRSxlQUFlLE9BQU8sR0FBRztBQUM5QixtQkFBTyxlQUFlLEVBQUUsT0FBTyxDQUFDO0FBQUEsVUFDakM7QUFRQSxpQkFBTyxlQUFlLFdBQVc7QUFBQSxRQUNsQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFxQkEsUUFBUSxLQUFLLE1BQU07QUFDbEIsY0FBSSxTQUFTLElBQUksS0FBSyxTQUFTLElBQUksR0FBRztBQUNyQyxpQkFBSyxRQUFRLElBQUksZUFBZSxHQUFHLEdBQUcsSUFBSTtBQUMxQyxtQkFBTztBQUFBLFVBQ1I7QUFFQSxnQkFBTSxJQUFJLFVBQVUsaUNBQWlDO0FBQUEsUUFDdEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQTZCQSxtQkFBbUIsY0FBYztBQUNoQyx5QkFBZSxZQUFZO0FBRTNCLGNBQUksd0JBQXdCLGVBQWM7QUFDekMseUJBQWEsUUFBUSxRQUFRLENBQUMsR0FBRyxNQUFNO0FBQ3RDLG1CQUFLLFFBQVEsR0FBRyxDQUFDO0FBQUEsWUFDbEIsQ0FBQztBQUNELG1CQUFPO0FBQUEsVUFDUjtBQUVBLHFCQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssT0FBTyxRQUFRLFlBQVksR0FBRztBQUNsRCxpQkFBSyxRQUFRLEdBQUcsQ0FBQztBQUFBLFVBQ2xCO0FBRUEsaUJBQU87QUFBQSxRQUNSO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQ3RHQSxXQUFTLFlBQVksU0FBUztBQUM3QixtQkFBZSxPQUFPO0FBRXRCLFVBQU0sY0FBYyxvQkFBSSxJQUFJO0FBQzVCLFVBQU0sUUFBUTtBQUlkLFVBQU0sU0FBUyxRQUFRLFNBQVMsS0FBSztBQUVyQyxlQUFXLEtBQUssUUFBUTtBQUN2QixZQUFNLElBQUksSUFBSSxRQUFRO0FBQ3RCLFVBQUksQ0FBQyxTQUFTLENBQUMsR0FBRztBQUNqQjtBQUFBLE1BQ0Q7QUFFQSxZQUFNLElBQUksSUFBSSxTQUFTO0FBQ3ZCLFlBQU0sSUFBSSxJQUFJLE1BQU07QUFFcEIsVUFBSSxLQUFLLEdBQUc7QUFDWCxjQUFNLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRSxTQUFTLENBQUM7QUFDbEMsb0JBQVksSUFBSSxHQUFHLENBQUM7QUFDcEIsa0JBQVUsUUFBUSxRQUFRLEdBQUcsQ0FBQztBQUFBLE1BQy9CO0FBQUEsSUFDRDtBQUNBLFFBQUksUUFBUSxRQUFRLE1BQU0sR0FBRztBQUU3QixZQUFRLE1BQU0sSUFBSSxTQUFVLE9BQU87QUFDbEMsVUFBSSxJQUFJLE1BQU0sS0FBSztBQUNuQixpQkFBVyxLQUFLLGFBQWE7QUFDNUIsWUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFBQSxNQUN6QjtBQUNBLGFBQU87QUFBQSxJQUNSLENBQUM7QUFFRCxXQUFPO0FBQUEsRUFDUjtBQVNBLFdBQVMsZ0JBQWdCLE9BQU87QUFDL0IsUUFBSSxTQUFTLEtBQUssS0FBSyxNQUFNLGVBQWUsVUFBVSxHQUFHO0FBQ3hELGNBQVEsTUFBTSxTQUFTO0FBQUEsSUFDeEI7QUFFQSxtQkFBZSxLQUFLO0FBQ3BCLFdBQU87QUFBQSxFQUNSO0FBWUEsV0FBUyxVQUFVLE9BQU87QUFDekIsVUFBTUMsV0FBVSxnQkFBZ0IsU0FBUztBQUV6QyxVQUFNLE9BQU8sTUFBTSxLQUFLLElBQUk7QUFDNUIsUUFBSTtBQUNKLFFBQUk7QUFFSixRQUFJO0FBQ0osUUFBSTtBQUNKLFFBQUk7QUFDSixRQUFJO0FBQ0osUUFBSTtBQUNKLFFBQUk7QUFFSixZQUFRLEtBQUssU0FBUztBQUFBLE1BQ3JCLEtBQUs7QUFDSixlQUFPLEtBQUssS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUUxQixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0osdUJBQWUsS0FBSztBQUNwQixlQUFPLE1BQU0sWUFBWTtBQUFBLE1BRTFCLEtBQUs7QUFDSixZQUFJLFNBQVMsS0FBSyxHQUFHO0FBQ3BCLGlCQUFPLE1BQU0sU0FBUyxLQUFLLENBQUMsQ0FBQztBQUFBLFFBQzlCO0FBRUEsWUFBSSxRQUFRLEtBQUssR0FBRztBQUNuQixpQkFBTyxNQUFNLFNBQVMsS0FBSyxDQUFDLENBQUM7QUFBQSxRQUM5QjtBQUVBLFlBQUksU0FBUyxLQUFLLEdBQUc7QUFDcEIsaUJBQU8sTUFBTSxlQUFlLEtBQUssQ0FBQyxDQUFDO0FBQUEsUUFDcEM7QUFFQSxlQUFPO0FBQUEsTUFFUixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0osWUFBSSxTQUFTLEtBQUssR0FBRztBQUNwQixpQkFBTyxPQUFPLEtBQUssS0FBSyxFQUFFLFNBQVM7QUFBQSxRQUNwQztBQUVBLFlBQUksUUFBUSxLQUFLLEdBQUc7QUFDbkIsaUJBQU8sTUFBTSxTQUFTO0FBQUEsUUFDdkI7QUFFQSxlQUFPO0FBQUEsTUFFUixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0osZUFBTyxVQUFVO0FBQUEsTUFFbEIsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNKLGVBQU8sVUFBVTtBQUFBLE1BRWxCLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSixlQUFPLFVBQVUsVUFBYSxVQUFVO0FBQUEsTUFFekMsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNKLGVBQU8sWUFBWSxLQUFLLEtBQUssQ0FBQyxNQUFNLEtBQUs7QUFBQSxNQUUxQyxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0osZUFBTyxZQUFZLEtBQUssS0FBSyxDQUFDLE1BQU0sS0FBSyxLQUFLLFFBQVEsTUFBTTtBQUFBLE1BRTdELEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSixlQUFPLFlBQVksS0FBSyxLQUFLLENBQUMsTUFBTSxLQUFLLEtBQUssUUFBUSxNQUFNO0FBQUEsTUFFN0QsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNKLGVBQU8sU0FBUyxLQUFLO0FBQUEsTUFFdEIsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNKLGVBQU8sTUFBTSxRQUFRLEtBQUs7QUFBQSxNQUUzQixLQUFLO0FBQ0osd0JBQWdCLEtBQUs7QUFDckIsZUFBTyxDQUFDO0FBQUEsTUFFVCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0osdUJBQWUsS0FBSztBQUNwQixlQUFPLE1BQU0sWUFBWTtBQUFBLE1BRTFCLEtBQUs7QUFDSixlQUFPLEdBQUcsS0FBSztBQUFBLE1BRWhCLEtBQUs7QUFDSixjQUFNLElBQUksU0FBUyxLQUFLO0FBQ3hCLHdCQUFnQixDQUFDO0FBQ2pCLGVBQU87QUFBQSxNQUVSLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSixlQUFPLEtBQUssVUFBVSxLQUFLO0FBQUEsTUFFNUIsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNKLGVBQU8sS0FBSyxNQUFNLEtBQUs7QUFBQSxNQUV4QixLQUFLO0FBQ0osdUJBQWUsS0FBSztBQUNwQixlQUFPLE1BQU0sS0FBSztBQUFBLE1BRW5CLEtBQUs7QUFDSix1QkFBZSxLQUFLO0FBQ3BCLGVBQU8sbUJBQW1CLEtBQUssRUFDN0IsUUFBUSxNQUFNLEtBQUssRUFDbkIsUUFBUSxNQUFNLEtBQUssRUFDbkIsUUFBUSxPQUFPLEtBQUssRUFDcEIsUUFBUSxPQUFPLEtBQUssRUFDcEIsUUFBUSxPQUFPLEtBQUs7QUFBQSxNQUV2QixLQUFLO0FBUUosWUFBSTtBQUNKLGNBQU0sZUFBZSxLQUFLLE1BQU07QUFDaEMsWUFBSSxVQUFVLFVBQVU7QUFFeEIsWUFBSSxTQUFTLEtBQUssS0FBSyxNQUFNLGVBQWUsWUFBWSxHQUFHO0FBQzFELHFCQUFXLE1BQU0sWUFBWTtBQUFBLFFBQzlCLFdBQVcsS0FBSyxVQUFVLElBQUksWUFBWSxHQUFHO0FBQzVDLGdCQUFNLElBQUksS0FBSyxVQUFVLElBQUksWUFBWTtBQUN6QyxxQkFBVyxJQUFJLFVBQVU7QUFDekIsb0JBQVUsSUFBSSxTQUFTO0FBQUEsUUFDeEIsV0FDQyxPQUFPLFdBQVcsWUFDbEIsT0FBTyxlQUFlLFlBQVksR0FDakM7QUFDRCxxQkFBVyxPQUFPLFlBQVk7QUFBQSxRQUMvQjtBQUNBLHlCQUFpQixRQUFRO0FBRXpCLGFBQUssUUFBUSxLQUFLO0FBQ2xCLGVBQU8sU0FBUyxLQUFLLFNBQVMsR0FBRyxJQUFJO0FBQUEsTUFFdEMsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNKLHVCQUFlLEtBQUs7QUFDcEIsY0FBTSxNQUFNLElBQUksVUFBVSxFQUFFLGdCQUFnQixPQUFPLFdBQVc7QUFDOUQsZUFBTyxJQUFJLEtBQUssZUFBZTtBQUFBLE1BRWhDLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSiwwQkFBa0IsS0FBSztBQUV2QixZQUFJLGdCQUFnQixLQUFLLE1BQU0sS0FBSztBQUNwQyxZQUFJLGlCQUFpQixLQUFLLE1BQU0sS0FBSztBQUVyQyxZQUFJLGtCQUFrQixTQUFTO0FBQzlCLDBCQUFnQjtBQUFBLFFBQ2pCO0FBQ0EsWUFBSSxrQkFBa0IsV0FBVztBQUNoQywwQkFBZ0I7QUFBQSxRQUNqQjtBQUVBLFlBQUksa0JBQWtCLGVBQWU7QUFDcEMsMEJBQWdCO0FBQUEsUUFDakI7QUFFQSxZQUFJLGtCQUFrQixVQUFVO0FBQy9CLDBCQUFnQjtBQUFBLFFBQ2pCO0FBRUEsWUFBSSxtQkFBbUIsU0FBUztBQUMvQiwyQkFBaUI7QUFBQSxRQUNsQjtBQUNBLFlBQUksbUJBQW1CLFdBQVc7QUFDakMsMkJBQWlCO0FBQUEsUUFDbEI7QUFFQSxZQUFJLG1CQUFtQixlQUFlO0FBQ3JDLDJCQUFpQjtBQUFBLFFBQ2xCO0FBRUEsWUFBSSxtQkFBbUIsVUFBVTtBQUNoQywyQkFBaUI7QUFBQSxRQUNsQjtBQUVBLGNBQU0sWUFDSixVQUFVLFVBQ1YsVUFBVSxNQUNWLFVBQVUsU0FDVixVQUFVLFdBQ1YsVUFBVSxTQUNYLFVBQVUsUUFDVixVQUFVLFVBQ1YsVUFBVTtBQUNYLGVBQU8sWUFBWSxnQkFBZ0I7QUFBQSxNQUVwQyxLQUFLO0FBQ0osdUJBQWUsS0FBSztBQUVwQixjQUFNLFlBQVksTUFBTSxPQUFPLENBQUMsRUFBRSxZQUFZO0FBQzlDLGVBQU8sWUFBWSxNQUFNLE9BQU8sQ0FBQztBQUFBLE1BQ2xDLEtBQUs7QUFDSix1QkFBZSxLQUFLO0FBRXBCLGVBQU8sTUFBTTtBQUFBLFVBQ1o7QUFBQSxVQUNBLFNBQVUsR0FBRztBQUNaLG1CQUFPLEVBQUUsWUFBWTtBQUFBLFVBQ3RCO0FBQUEsUUFDRDtBQUFBLE1BRUQsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNKLGFBQ0UsU0FBUyxLQUFLLEtBQUssU0FBUyxLQUFLLEtBQUssUUFBUSxLQUFLLE1BQ3BELE1BQU0sZUFBZSxRQUFRLEdBQzVCO0FBQ0QsaUJBQU8sTUFBTTtBQUFBLFFBQ2Q7QUFFQSxjQUFNLElBQUksVUFBVSxvQkFBb0IsT0FBTyxLQUFLLEVBQUU7QUFBQSxNQUV2RCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0osZUFBTyxLQUFLLGdCQUFnQixLQUFLLENBQUM7QUFBQSxNQUVuQyxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0osZUFBTyxLQUFLLGdCQUFnQixLQUFLLENBQUM7QUFBQSxNQUVuQyxLQUFLO0FBQ0osZUFBTztBQUFBLE1BRVIsS0FBSztBQUNKLGVBQU87QUFBQSxNQUVSLEtBQUs7QUFDSixZQUFJLFNBQVNBLFFBQU8sR0FBRztBQUN0QixVQUFBQSxTQUFRLElBQUksS0FBSztBQUFBLFFBQ2xCO0FBRUEsZUFBTztBQUFBLE1BRVIsS0FBSztBQUNKLHVCQUFlLEtBQUs7QUFDcEIsY0FBTSxTQUFTLE9BQU8sQ0FBQztBQUN2QixlQUFPLFNBQVM7QUFBQSxNQUVqQixLQUFLO0FBQ0osdUJBQWUsS0FBSztBQUNwQixjQUFNLFNBQVMsT0FBTyxDQUFDO0FBQ3ZCLGVBQU8sUUFBUTtBQUFBLE1BRWhCLEtBQUs7QUFDSixlQUFPLElBQUksR0FBRyxFQUFFLFNBQVM7QUFBQSxNQUUxQixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0osWUFBSSxDQUFDLFNBQVMsS0FBSyxHQUFHO0FBQ3JCLGdCQUFNLElBQUksTUFBTSxvQkFBb0I7QUFBQSxRQUNyQztBQUVBLGNBQU0sT0FBTyxPQUFPLEtBQUssS0FBSyxFQUFFLEtBQUs7QUFFckMsWUFBSSxLQUFLLFlBQVksYUFBYTtBQUNqQyxnQkFBTTtBQUFBLFFBQ1AsV0FBVyxLQUFLLFlBQVksWUFBWTtBQUN2QyxnQkFBTSxLQUFLLFNBQVM7QUFBQSxRQUNyQixPQUFPO0FBQ04sZ0JBQU0sZ0JBQWdCLFNBQVMsS0FBSyxNQUFNLENBQUMsQ0FBQztBQUU1QyxjQUFJLEtBQUssWUFBWSxnQkFBZ0I7QUFDcEMsa0JBQU0sS0FBSyxTQUFTLE1BQU07QUFBQSxVQUMzQjtBQUFBLFFBQ0Q7QUFFQSx1QkFBZSxLQUFLLE1BQU0sS0FBSztBQUUvQixjQUFNLFNBQVMsT0FBTyxHQUFHO0FBRXpCLFlBQUksUUFBUSxNQUFNLEdBQUc7QUFDcEIsaUJBQU8sUUFBUSxNQUFNO0FBQUEsUUFDdEI7QUFFQSxlQUFPO0FBQUEsTUFFUixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0osY0FBTSxLQUFLLE1BQU0sS0FBSztBQUV0QixZQUFJLFFBQVEsUUFBVztBQUN0QixnQkFBTSxJQUFJLE1BQU0sdUJBQXVCO0FBQUEsUUFDeEM7QUFFQSx1QkFBZSxLQUFLLE1BQU0sS0FBSztBQUUvQixZQUFJLGlCQUFpQixLQUFLO0FBQ3pCLGNBQUksQ0FBQyxNQUFNLElBQUksR0FBRyxHQUFHO0FBQ3BCLG1CQUFPO0FBQUEsVUFDUjtBQUNBLGlCQUFPLE1BQU0sSUFBSSxHQUFHO0FBQUEsUUFDckI7QUFFQSxZQUFJLFNBQVMsS0FBSyxLQUFLLFFBQVEsS0FBSyxHQUFHO0FBQ3RDLGNBQUksUUFBUSxHQUFHLEdBQUc7QUFDakIsbUJBQU8sUUFBUSxHQUFHO0FBQUEsVUFDbkI7QUFFQSxpQkFBTztBQUFBLFFBQ1I7QUFFQSxjQUFNLElBQUksTUFBTSxvQkFBb0I7QUFBQSxNQUVyQyxLQUFLO0FBQ0osY0FBTSxLQUFLLE1BQU07QUFDakIsWUFBSSxRQUFRLFFBQVc7QUFDdEIsZ0JBQU0sSUFBSSxNQUFNLHVCQUF1QjtBQUFBLFFBQ3hDO0FBRUEsZUFBTyxJQUFJLFdBQVcsS0FBSyxFQUFFLE9BQU8sR0FBRztBQUFBLE1BRXhDLEtBQUs7QUFDSixjQUFNLE1BQU0sSUFBSSxXQUFXLEtBQUs7QUFDaEMsWUFBSUMsVUFBUztBQUNiLGVBQU8sS0FBSyxTQUFTLEdBQUc7QUFDdkIsZ0JBQU0sS0FBSyxNQUFNO0FBQ2pCLGNBQUksUUFBUSxRQUFXO0FBQ3RCLGtCQUFNLElBQUksTUFBTSx1QkFBdUI7QUFBQSxVQUN4QztBQUdBLGNBQUksU0FBUyxHQUFHLEtBQUssSUFBSSxLQUFLLE1BQU0sSUFBSTtBQUN2QyxZQUFBQSxXQUFVO0FBQ1Y7QUFBQSxVQUNEO0FBRUEsY0FBSSxDQUFDLElBQUksT0FBTyxHQUFHLEdBQUc7QUFDckIsWUFBQUEsV0FBVTtBQUNWO0FBQUEsVUFDRDtBQUNBLGdCQUFNLElBQUksSUFBSSxPQUFPLEdBQUc7QUFDeEIsY0FBSSxDQUFDLFlBQVksQ0FBQyxHQUFHO0FBQ3BCLGtCQUFNLElBQUksTUFBTSx3QkFBd0I7QUFBQSxVQUN6QztBQUVBLFVBQUFBLFdBQVU7QUFBQSxRQUNYO0FBRUEsZUFBT0E7QUFBQSxNQUNSLEtBQUs7QUFDSixjQUFNLEtBQUssTUFBTTtBQUNqQixZQUFJLFFBQVEsUUFBVztBQUN0QixnQkFBTSxJQUFJLE1BQU0sdUJBQXVCO0FBQUEsUUFDeEM7QUFFQSxjQUFNLEtBQUssSUFBSSxXQUFXLEtBQUs7QUFFL0IsWUFBSSxDQUFDLEdBQUcsT0FBTyxHQUFHLEdBQUc7QUFDcEIsaUJBQU87QUFBQSxRQUNSO0FBRUEsZUFBTyxHQUFHLE9BQU8sR0FBRztBQUFBLE1BRXJCLEtBQUs7QUFDSix1QkFBZSxLQUFLO0FBRXBCLGNBQU1DLFNBQVEsU0FBUyxLQUFLLENBQUMsQ0FBQyxLQUFLO0FBQ25DLGNBQU1DLFFBQU8sU0FBUyxLQUFLLENBQUMsQ0FBQyxLQUFLLEtBQUtEO0FBRXZDLGVBQU8sTUFBTSxVQUFVQSxRQUFPQyxJQUFHO0FBQUEsTUFFbEMsS0FBSztBQUNKLGVBQU87QUFBQSxNQUVSLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSixZQUFJLFVBQVUsVUFBYSxVQUFVLE1BQU07QUFDMUMsaUJBQU87QUFBQSxRQUNSO0FBRUEsdUJBQWUsS0FBSyxNQUFNO0FBQzFCLFlBQUksY0FBYyxLQUFLLE1BQU07QUFDN0IsWUFBSSxnQkFBZ0IsUUFBVztBQUM5Qix3QkFBYztBQUFBLFFBQ2Y7QUFFQSxnQkFBUSxhQUFhO0FBQUEsVUFDcEIsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNKLG1CQUFPLFNBQVMsWUFBWTtBQUFBLFVBQzdCLEtBQUs7QUFDSixtQkFBTyxXQUFXLFlBQVk7QUFBQSxVQUMvQixLQUFLO0FBQ0osbUJBQU87QUFBQSxVQUNSLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSiwyQkFBZSxhQUFhLFlBQVk7QUFDeEMsbUJBQ0UsaUJBQWlCLGVBQ2pCLGlCQUFpQixNQUNqQixpQkFBaUIsU0FDakIsaUJBQWlCLFdBQ2pCLGlCQUFpQixXQUNsQixpQkFBaUIsUUFDakIsaUJBQWlCLFVBQ2pCLGlCQUFpQjtBQUFBLFVBRW5CLEtBQUs7QUFDSixtQkFBTyxHQUFHLFlBQVk7QUFBQSxVQUN2QixLQUFLO0FBQ0osbUJBQU8sS0FBSyxNQUFNLEtBQUssWUFBWSxDQUFDO0FBQUEsUUFDdEM7QUFFQSxjQUFNLElBQUksTUFBTSxvQkFBb0I7QUFBQSxNQUVyQyxLQUFLO0FBQ0osY0FBTSxvQkFBSSxJQUFJO0FBQ2QsZUFBTyxLQUFLLFNBQVMsR0FBRztBQUN2QixxQkFBVyxLQUFLLE1BQU07QUFDdEIsY0FBSSxhQUFhLFFBQVc7QUFDM0Isa0JBQU0sSUFBSSxNQUFNLHVCQUF1QjtBQUFBLFVBQ3hDO0FBRUEscUJBQVcsU0FBUyxNQUFNLEdBQUc7QUFDN0IsY0FBSSxJQUFJLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0FBQUEsUUFDakM7QUFFQSxlQUFPLElBQUksSUFBSSxLQUFLO0FBQUEsTUFFckIsS0FBSztBQUNKLFlBQUksS0FBSyxXQUFXLEdBQUc7QUFDdEIsZ0JBQU0sSUFBSSxNQUFNLHlCQUF5QjtBQUFBLFFBQzFDO0FBRUEsMEJBQWtCLEtBQUs7QUFFdkIsY0FBTSxjQUFjLEtBQUssTUFBTTtBQVEvQixZQUFJLFVBQVUsTUFBTTtBQUNuQixjQUFJLGdCQUFnQixRQUFRO0FBQzNCLG1CQUFPO0FBQUEsVUFDUjtBQUNBLGlCQUFPO0FBQUEsUUFDUjtBQUVBLGNBQU0sY0FBYyxPQUFPO0FBRTNCLGdCQUFRLGFBQWE7QUFBQSxVQUNwQixLQUFLO0FBQ0osbUJBQU8sVUFBVTtBQUFBLFVBQ2xCLEtBQUs7QUFDSixtQkFBTyxVQUFVLFdBQVcsV0FBVztBQUFBLFVBQ3hDLEtBQUs7QUFDSixtQkFBTyxXQUFXLGdCQUFnQixVQUFVLGdCQUFnQjtBQUFBLFVBQzdELEtBQUs7QUFDSixtQkFBTyxnQkFBZ0I7QUFBQSxVQUN4QjtBQUNDLGtCQUFNLElBQUksTUFBTSxvQkFBb0I7QUFBQSxRQUN0QztBQUFBLE1BRUQsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNKLFlBQUk7QUFDSCxtQkFBUyxvQkFBb0I7QUFBQSxRQUM5QixTQUFTLEdBQUc7QUFDWCxnQkFBTSxJQUFJLE1BQU0seUNBQXlDLEVBQUUsT0FBTyxHQUFHO0FBQUEsUUFDdEU7QUFFQSxjQUFNLFdBQVcsTUFBTSxVQUFVLEdBQUcsQ0FBQztBQUNyQyxZQUFJLENBQUMsVUFBVTtBQUNkLGdCQUFNLElBQUksTUFBTSw0QkFBNEI7QUFBQSxRQUM3QztBQUVBLGNBQU0sd0JBQXdCLE9BQU8sQ0FBQyxLQUFLO0FBQzNDLGNBQU0sb0JBQW9CLE9BQU8sQ0FBQyxLQUFLO0FBRXZDLGNBQU0sS0FBSyxJQUFJLEtBQUssYUFBYSxRQUFRO0FBQUEsVUFDeEMsT0FBTztBQUFBLFVBQ1A7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0QsQ0FBQztBQUVELGVBQU8sR0FBRyxPQUFPLE1BQU0sVUFBVSxDQUFDLENBQUM7QUFBQSxNQUVwQyxLQUFLO0FBQ0osZUFBTyxJQUFJLEtBQUssS0FBSztBQUNyQixvQkFBWSxLQUFLLFFBQVE7QUFDekIsWUFBSSxNQUFNLFNBQVMsR0FBRztBQUNyQixnQkFBTSxJQUFJLE1BQU0sY0FBYztBQUFBLFFBQy9CO0FBQ0EsZUFBTztBQUFBLE1BRVIsS0FBSztBQUNKLGVBQU8sSUFBSSxLQUFLLEtBQUs7QUFDckIsWUFBSSxNQUFNLEtBQUssUUFBUSxDQUFDLEdBQUc7QUFDMUIsZ0JBQU0sSUFBSSxNQUFNLGNBQWM7QUFBQSxRQUMvQjtBQUVBLFlBQUk7QUFDSCxtQkFBUyxvQkFBb0I7QUFDN0IsaUJBQU8sS0FBSyxtQkFBbUIsTUFBTTtBQUFBLFFBQ3RDLFNBQVMsR0FBRztBQUNYLGdCQUFNLElBQUksTUFBTSx5Q0FBeUMsRUFBRSxPQUFPLEdBQUc7QUFBQSxRQUN0RTtBQUFBLE1BRUQsS0FBSztBQUNKLGVBQU8sSUFBSSxLQUFLLEtBQUs7QUFDckIsWUFBSSxNQUFNLEtBQUssUUFBUSxDQUFDLEdBQUc7QUFDMUIsZ0JBQU0sSUFBSSxNQUFNLGNBQWM7QUFBQSxRQUMvQjtBQUVBLGNBQU1DLFdBQVU7QUFBQSxVQUNmLFdBQVcsS0FBSyxNQUFNLEtBQUs7QUFBQSxVQUMzQixXQUFXLEtBQUssTUFBTSxLQUFLO0FBQUEsUUFDNUI7QUFFQSxZQUFJO0FBQ0gsbUJBQVMsb0JBQW9CO0FBQzdCLGlCQUFPLElBQUksS0FBSyxlQUFlLFFBQVFBLFFBQU8sRUFBRSxPQUFPLElBQUk7QUFBQSxRQUM1RCxTQUFTLEdBQUc7QUFDWCxnQkFBTSxJQUFJLE1BQU0seUNBQXlDLEVBQUUsT0FBTyxHQUFHO0FBQUEsUUFDdEU7QUFBQSxNQUVELEtBQUs7QUFDSixlQUFPLElBQUksS0FBSyxLQUFLO0FBQ3JCLFlBQUksTUFBTSxLQUFLLFFBQVEsQ0FBQyxHQUFHO0FBQzFCLGdCQUFNLElBQUksTUFBTSxjQUFjO0FBQUEsUUFDL0I7QUFFQSxZQUFJO0FBQ0gsbUJBQVMsb0JBQW9CO0FBQzdCLGlCQUFPLEtBQUssZUFBZSxNQUFNO0FBQUEsUUFDbEMsU0FBUyxHQUFHO0FBQ1gsZ0JBQU0sSUFBSSxNQUFNLHlDQUF5QyxFQUFFLE9BQU8sR0FBRztBQUFBLFFBQ3RFO0FBQUEsTUFFRCxLQUFLO0FBQ0osZUFBTyxJQUFJLEtBQUssS0FBSztBQUNyQixZQUFJLE1BQU0sS0FBSyxRQUFRLENBQUMsR0FBRztBQUMxQixnQkFBTSxJQUFJLE1BQU0sY0FBYztBQUFBLFFBQy9CO0FBRUEsWUFBSTtBQUNILG1CQUFTLG9CQUFvQjtBQUM3QixpQkFBTyxLQUFLLG1CQUFtQixNQUFNO0FBQUEsUUFDdEMsU0FBUyxHQUFHO0FBQ1gsZ0JBQU0sSUFBSSxNQUFNLHlDQUF5QyxFQUFFLE9BQU8sR0FBRztBQUFBLFFBQ3RFO0FBQUEsTUFFRCxLQUFLO0FBQ0osZUFBTyxJQUFJLEtBQUssS0FBSztBQUNyQixZQUFJLE1BQU0sS0FBSyxRQUFRLENBQUMsR0FBRztBQUMxQixnQkFBTSxJQUFJLE1BQU0sY0FBYztBQUFBLFFBQy9CO0FBRUEsZUFBTyxLQUFLLFlBQVk7QUFBQSxNQUV6QixLQUFLO0FBQ0osZUFBTyxJQUFJLEtBQUssS0FBSztBQUNyQixZQUFJLE1BQU0sS0FBSyxRQUFRLENBQUMsR0FBRztBQUMxQixnQkFBTSxJQUFJLE1BQU0sY0FBYztBQUFBLFFBQy9CO0FBRUEsZUFBTyxLQUFLLFNBQVMsSUFBSTtBQUFBLE1BRTFCLEtBQUs7QUFDSixlQUFPLElBQUksS0FBSyxLQUFLO0FBQ3JCLFlBQUksTUFBTSxLQUFLLFFBQVEsQ0FBQyxHQUFHO0FBQzFCLGdCQUFNLElBQUksTUFBTSxjQUFjO0FBQUEsUUFDL0I7QUFFQSxlQUFPLEtBQUssUUFBUTtBQUFBLE1BRXJCLEtBQUs7QUFDSixlQUFPLElBQUksS0FBSyxLQUFLO0FBQ3JCLFlBQUksTUFBTSxLQUFLLFFBQVEsQ0FBQyxHQUFHO0FBQzFCLGdCQUFNLElBQUksTUFBTSxjQUFjO0FBQUEsUUFDL0I7QUFFQSxlQUFPLEtBQUssT0FBTztBQUFBLE1BRXBCLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSixlQUFPLElBQUksS0FBSyxLQUFLO0FBQ3JCLFlBQUksTUFBTSxLQUFLLFFBQVEsQ0FBQyxHQUFHO0FBQzFCLGdCQUFNLElBQUksTUFBTSxjQUFjO0FBQUEsUUFDL0I7QUFFQSxlQUFPLEtBQUssU0FBUztBQUFBLE1BRXRCLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSixlQUFPLElBQUksS0FBSyxLQUFLO0FBQ3JCLFlBQUksTUFBTSxLQUFLLFFBQVEsQ0FBQyxHQUFHO0FBQzFCLGdCQUFNLElBQUksTUFBTSxjQUFjO0FBQUEsUUFDL0I7QUFFQSxlQUFPLEtBQUssV0FBVztBQUFBLE1BRXhCLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSixlQUFPLElBQUksS0FBSyxLQUFLO0FBQ3JCLFlBQUksTUFBTSxLQUFLLFFBQVEsQ0FBQyxHQUFHO0FBQzFCLGdCQUFNLElBQUksTUFBTSxjQUFjO0FBQUEsUUFDL0I7QUFFQSxlQUFPLEtBQUssV0FBVztBQUFBLE1BRXhCLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSix1QkFBZSx3QkFBd0I7QUFDdkMsWUFBSSxFQUFFLHdCQUF3QixlQUFlO0FBQzVDLGdCQUFNLElBQUksTUFBTSxzQkFBc0I7QUFBQSxRQUN2QztBQUVBLGNBQU0sS0FBSyxNQUFNLEtBQUs7QUFDdEIsWUFBSSxRQUFRLFFBQVc7QUFDdEIsZ0JBQU07QUFBQSxRQUNQO0FBRUEsdUJBQWUsS0FBSyxNQUFNLEtBQUs7QUFDL0IsZUFBTyxhQUFhLFFBQVEsS0FBSyxZQUFZO0FBQUEsTUFFOUM7QUFDQyxjQUFNLElBQUksTUFBTSxtQkFBbUIsS0FBSyxPQUFPLEVBQUU7QUFBQSxJQUNuRDtBQUFBLEVBQ0Q7QUE1eUJBLE1BOENNO0FBOUNOO0FBQUE7QUFPQSxNQUFBQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQVFBO0FBQ0E7QUFxQkEsTUFBTSxjQUFOLGNBQTBCLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBSzlCLFlBQVksWUFBWTtBQUN2QixnQkFBTTtBQUNOLGVBQUssT0FBTyxZQUFZLFVBQVU7QUFDbEMsZUFBSyxVQUFVLEtBQUssS0FBSyxNQUFNO0FBQy9CLGVBQUssWUFBWSxvQkFBSSxJQUFJO0FBQUEsUUFDMUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVdBLFlBQVksTUFBTSxVQUFVLFNBQVM7QUFDcEMseUJBQWUsSUFBSTtBQUNuQiwyQkFBaUIsUUFBUTtBQUV6QixjQUFJLFlBQVksUUFBVztBQUMxQiwyQkFBZSxPQUFPO0FBQUEsVUFDdkI7QUFFQSxlQUFLLFVBQVUsSUFBSSxNQUFNO0FBQUEsWUFDeEI7QUFBQSxZQUNBO0FBQUEsVUFDRCxDQUFDO0FBRUQsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBVUEsSUFBSSxPQUFPO0FBQ1YsaUJBQU8sVUFBVSxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFBQSxRQUNyQztBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUM5RkEsTUFpQk1DLFlBZ0JBO0FBakNOO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFRQSxNQUFNQSxhQUFZO0FBZ0JsQixNQUFNLE9BQU4sY0FBbUIsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLdkIsWUFBWSxNQUFNO0FBQ2pCLGdCQUFNO0FBQ04seUJBQWUsSUFBSTtBQUVuQixlQUFLLE9BQU8sS0FBSyxNQUFNQSxVQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU07QUFDNUMsbUJBQU8sSUFBSSxZQUFZLENBQUM7QUFBQSxVQUN6QixDQUFDO0FBQUEsUUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVVBLFlBQVksTUFBTSxVQUFVLFNBQVM7QUFDcEMscUJBQVcsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLFFBQVEsS0FBSyxJQUFJLEdBQUc7QUFDOUMsY0FBRSxZQUFZLE1BQU0sVUFBVSxPQUFPO0FBQUEsVUFDdEM7QUFFQSxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLElBQUksT0FBTztBQUNWLGlCQUFPLEtBQUssS0FBSyxPQUFPLENBQUMsYUFBYSxhQUFhLGNBQWMsVUFBVTtBQUMxRSxtQkFBTyxZQUFZLElBQUksV0FBVztBQUFBLFVBQ25DLEdBQUcsS0FBSztBQUFBLFFBQ1Q7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDMEpBLFdBQVMsT0FBTyxNQUFNO0FBQ3JCLFNBQUssY0FBYztBQUNuQixRQUFJLEtBQUssY0FBYyxJQUFJLElBQUk7QUFDOUIsWUFBTSxJQUFJLE1BQU0sa0JBQWtCO0FBQUEsSUFDbkM7QUFFQSxVQUFNLGFBQ0wsS0FBSyxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sSUFBSSxLQUFLLHFCQUFxQixDQUFDO0FBQ3JFLFVBQU0sY0FDTCxLQUFLLGNBQWMsRUFBRSxRQUFRLEVBQUUsT0FBTyxJQUFJLEtBQUssc0JBQXNCLENBQUM7QUFHdkUsUUFBSSxLQUFLLFFBQVEsVUFBVSxNQUFNLE1BQU0sS0FBSyxRQUFRLFdBQVcsTUFBTSxJQUFJO0FBQ3hFLGFBQU87QUFBQSxJQUNSO0FBRUEsUUFBSSxTQUFTLFNBQVM7QUFBQSxNQUNyQjtBQUFBLE1BQ0EsZUFBZSxJQUFJO0FBQUEsTUFDbkI7QUFBQSxNQUNBO0FBQUEsSUFDRDtBQUVBLFFBQ0MsS0FBSyxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sSUFBSSxLQUFLLHFCQUFxQixJQUFJLENBQUMsR0FDdkU7QUFDRCxXQUFLLHFCQUFxQjtBQUFBLElBQzNCO0FBRUEsUUFDQyxLQUFLLGNBQWMsRUFBRSxRQUFRLEVBQUUsT0FBTyxJQUFJLEtBQUssc0JBQXNCLElBQUksQ0FBQyxHQUN6RTtBQUNELFdBQUssc0JBQXNCO0FBQUEsSUFDNUI7QUFFQSxhQUFTLE9BQU8sS0FBSyxNQUFNLE1BQU07QUFFakMsV0FBTztBQUFBLEVBQ1I7QUFTQSxXQUFTLFNBQVMsTUFBTSxZQUFZLGFBQWE7QUFDaEQsVUFBTSxZQUFZLENBQUM7QUFFbkIsVUFBTSxzQkFBc0IsS0FBSyxjQUFjLEVBQUUsV0FBVyxFQUFFLFlBQVk7QUFDMUUsVUFBTSxxQkFBcUIsS0FBSyxjQUFjLEVBQUUsV0FBVyxFQUFFLFdBQVc7QUFDeEUsVUFBTSxZQUFZLEtBQUssY0FBYyxFQUFFLFdBQVc7QUFFbEQsV0FBTyxNQUFNO0FBQ1osWUFBTSxhQUFhLEtBQUssUUFBUSxVQUFVO0FBRTFDLFVBQUksZUFBZSxJQUFJO0FBQ3RCLGtCQUFVLEtBQUssSUFBSTtBQUNuQjtBQUFBLE1BQ0QsV0FBVyxhQUFhLEdBQUc7QUFDMUIsa0JBQVUsS0FBSyxLQUFLLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDNUMsZUFBTyxLQUFLLFVBQVUsVUFBVTtBQUFBLE1BQ2pDO0FBRUEsVUFBSSxXQUFXLEtBQUssVUFBVSxXQUFXLE1BQU0sRUFBRSxRQUFRLFdBQVc7QUFDcEUsVUFBSSxhQUFhO0FBQUksb0JBQVksV0FBVztBQUM1QyxVQUFJLG1CQUFtQixLQUNyQixVQUFVLFdBQVcsTUFBTSxFQUMzQixRQUFRLFVBQVU7QUFDcEIsVUFBSSxxQkFBcUIsSUFBSTtBQUM1Qiw0QkFBb0IsV0FBVztBQUMvQixZQUFJLG1CQUFtQixVQUFVO0FBQ2hDLGdCQUFNLFNBQVMsU0FBUztBQUFBLFlBQ3ZCO0FBQUEsWUFDQSxLQUFLLFVBQVUsZ0JBQWdCO0FBQUEsWUFDL0I7QUFBQSxZQUNBO0FBQUEsVUFDRDtBQUNBLGlCQUFPLEtBQUssVUFBVSxHQUFHLGdCQUFnQixJQUFJO0FBQzdDLHFCQUFXLEtBQUssVUFBVSxXQUFXLE1BQU0sRUFBRSxRQUFRLFdBQVc7QUFDaEUsY0FBSSxhQUFhO0FBQUksd0JBQVksV0FBVztBQUFBLFFBQzdDO0FBQUEsTUFDRDtBQUVBLFVBQUksYUFBYSxJQUFJO0FBQ3BCLGNBQU0sSUFBSSxNQUFNLG9DQUFvQztBQUFBLE1BQ3JEO0FBRUEsWUFBTSxNQUFNLEtBQUssVUFBVSxXQUFXLFFBQVEsUUFBUTtBQUN0RCxZQUFNLFFBQVEsSUFBSSxNQUFNLGtCQUFrQjtBQUMxQyxZQUFNLGNBQWMsTUFBTSxNQUFNO0FBRWhDLFdBQUssaUJBQWlCLElBQUk7QUFBQSxRQUN6QixDQUFDO0FBQUEsUUFDRCxLQUFLLG9CQUFvQjtBQUFBLFFBQ3pCLEtBQUssaUJBQWlCO0FBQUEsTUFDdkI7QUFFQSxpQkFBVyxNQUFNLE9BQU87QUFDdkIsY0FBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxtQkFBbUI7QUFDM0MsYUFBSyxpQkFBaUIsRUFBRSxDQUFDLElBQUk7QUFBQSxNQUM5QjtBQUVBLFlBQU0sS0FBSyxJQUFJLE1BQU0sR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLO0FBQ3ZDLFlBQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLO0FBQ3ZDLFlBQU0sS0FBSyxHQUFHLE1BQU0sR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLO0FBQ3RDLFlBQU0sU0FBUyxLQUFLLGlCQUFpQixJQUFJLEVBQUUsSUFBSSxVQUFVO0FBRXpELFVBQUksVUFBVTtBQUNkLFVBQ0MsVUFDQSxJQUFJLFFBQVEsTUFBTSxNQUFNLEtBQ3hCLElBQUksUUFBUSxPQUFPLE1BQU0sS0FDekIsSUFBSSxRQUFRLFNBQVMsTUFBTSxHQUMxQjtBQUNELGtCQUFVO0FBQUEsTUFDWDtBQUVBLGlCQUFXO0FBRVgsWUFBTSxPQUFPLElBQUksS0FBSyxPQUFPO0FBRTdCLFVBQUksU0FBUyxTQUFTLEdBQUc7QUFDeEIsbUJBQVcsQ0FBQyxNQUFNLFFBQVEsS0FBSyxPQUFPLFFBQVEsU0FBUyxHQUFHO0FBQ3pELGVBQUssWUFBWSxNQUFNLFFBQVE7QUFBQSxRQUNoQztBQUFBLE1BQ0Q7QUFFQSxnQkFBVSxLQUFLLGVBQWUsS0FBSyxJQUFJLEtBQUssaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBRWhFLGFBQU8sS0FBSyxVQUFVLFdBQVcsWUFBWSxNQUFNO0FBQUEsSUFDcEQ7QUFFQSxXQUFPLFVBQVUsS0FBSyxFQUFFO0FBQUEsRUFDekI7QUEzV0EsTUFxQk0sc0JBTUEsZ0JBTUEsdUJBTUEsd0JBTUEsbUJBaUVBO0FBOUdOO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFRQSxNQUFNLHVCQUF1QixPQUFPLGdCQUFnQjtBQU1wRCxNQUFNLGlCQUFpQixPQUFPLFVBQVU7QUFNeEMsTUFBTSx3QkFBd0IsT0FBTyxpQkFBaUI7QUFNdEQsTUFBTSx5QkFBeUIsT0FBTyxrQkFBa0I7QUFNeEQsTUFBTSxvQkFBb0IsT0FBTyxhQUFhO0FBaUU5QyxNQUFNLFlBQU4sY0FBd0IsZ0JBQWdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPdkMsWUFBWSxRQUFRQyxVQUFTO0FBQzVCLGdCQUFNQSxRQUFPO0FBQ2IsZUFBSyxvQkFBb0IsSUFBSSxVQUFVLENBQUM7QUFDeEMsZUFBSyxxQkFBcUIsSUFBSTtBQUM5QixlQUFLLHNCQUFzQixJQUFJO0FBQUEsUUFDaEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVdBLElBQUksV0FBVztBQUNkLGlCQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sVUFBVTtBQUFBLFlBQ2pDLFFBQVE7QUFBQSxjQUNQLE1BQU0sQ0FBQyxJQUFJO0FBQUEsY0FDWCxPQUFPLENBQUMsR0FBRztBQUFBLFlBQ1o7QUFBQSxZQUNBLFdBQVc7QUFBQSxjQUNWLFdBQVc7QUFBQSxjQUNYLFlBQVk7QUFBQSxZQUNiO0FBQUEsWUFDQSxXQUFXLENBQUM7QUFBQSxVQUNiLENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBbUJBLGtCQUFrQixXQUFXLFlBQVk7QUFDeEMsY0FBSSxjQUFjLFFBQVc7QUFDNUIsaUJBQUssY0FBYyxFQUFFLFdBQVcsRUFBRSxXQUFXLElBQzVDLGVBQWUsU0FBUztBQUFBLFVBQzFCO0FBRUEsY0FBSSxlQUFlLFFBQVc7QUFDN0IsaUJBQUssY0FBYyxFQUFFLFdBQVcsRUFBRSxZQUFZLElBQzdDLGVBQWUsVUFBVTtBQUFBLFVBQzNCO0FBRUEsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBbUJBLFVBQVUsTUFBTSxPQUFPO0FBQ3RCLGNBQUksVUFBVSxRQUFXO0FBQ3hCLG9CQUFRO0FBQUEsVUFDVDtBQUVBLGNBQUksU0FBUyxJQUFJO0FBQUcsbUJBQU8sQ0FBQyxJQUFJO0FBQ2hDLGNBQUksU0FBUyxLQUFLO0FBQUcsb0JBQVEsQ0FBQyxLQUFLO0FBRW5DLGVBQUssY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLElBQUksY0FBYyxJQUFJO0FBQzNELGVBQUssY0FBYyxFQUFFLFFBQVEsRUFBRSxPQUFPLElBQUksY0FBYyxLQUFLO0FBQzdELGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFTQSxPQUFPLE1BQU07QUFDWixlQUFLLGNBQWMsSUFBSTtBQUN2QixlQUFLLHFCQUFxQixJQUFJO0FBQzlCLGVBQUssc0JBQXNCLElBQUk7QUFDL0IsZUFBSyxpQkFBaUIsSUFBSSxDQUFDO0FBQzNCLGlCQUFPLE9BQU8sS0FBSyxNQUFNLElBQUk7QUFBQSxRQUM5QjtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUMvREEsV0FBUyxlQUFlLFdBQVc7QUFDbEMsVUFBTSxRQUNMO0FBQ0QsVUFBTSxTQUFTLE1BQU0sS0FBSyxlQUFlLFNBQVMsQ0FBQztBQUVuRCxVQUFNLFNBQVMsU0FBUyxRQUFRO0FBQ2hDLFFBQUksV0FBVyxRQUFXO0FBQ3pCLFlBQU0sSUFBSSxVQUFVLGdDQUFnQztBQUFBLElBQ3JEO0FBRUEsVUFBTSxPQUFPLFNBQVMsTUFBTTtBQUM1QixVQUFNLFVBQVUsU0FBUyxTQUFTO0FBQ2xDLFVBQU0sWUFBWSxTQUFTLFdBQVc7QUFFdEMsUUFBSSxZQUFZLE1BQU0sU0FBUyxJQUFJO0FBQ2xDLFlBQU0sSUFBSSxVQUFVLDRCQUE0QjtBQUFBLElBQ2pEO0FBRUEsV0FBTyxJQUFJLFVBQVUsTUFBTSxTQUFTLGVBQWUsU0FBUyxDQUFDO0FBQUEsRUFDOUQ7QUFVQSxXQUFTLGVBQWUsV0FBVztBQUNsQyxRQUFJLENBQUMsU0FBUyxTQUFTLEdBQUc7QUFDekIsYUFBTztBQUFBLElBQ1I7QUFFQSxVQUFNLFNBQVMsQ0FBQztBQUVoQixjQUFVLE1BQU0sR0FBRyxFQUFFLFFBQVEsQ0FBQyxVQUFVO0FBQ3ZDLGNBQVEsTUFBTSxLQUFLO0FBQ25CLFVBQUksVUFBVSxJQUFJO0FBQ2pCO0FBQUEsTUFDRDtBQUVBLFlBQU0sS0FBSyxNQUFNLE1BQU0sR0FBRztBQUUxQixZQUFNLE1BQU0sZUFBZSxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUs7QUFDekMsWUFBTSxRQUFRLGVBQWUsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLO0FBRzNDLGFBQU8sS0FBSztBQUFBLFFBQ1g7QUFBQSxRQUNBO0FBQUEsTUFDRCxDQUFDO0FBQUEsSUFDRixDQUFDO0FBRUQsV0FBTztBQUFBLEVBQ1I7QUF0TkEsTUFpQk0sVUFpQkE7QUFsQ047QUFBQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBT0EsTUFBTSxXQUFXLE9BQU8sVUFBVTtBQWlCbEMsTUFBTSxZQUFOLGNBQXdCLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU81QixZQUFZLE1BQU0sU0FBUyxXQUFXO0FBQ3JDLGdCQUFNO0FBRU4sZUFBSyxRQUFRLElBQUk7QUFBQSxZQUNoQixNQUFNLGVBQWUsSUFBSSxFQUFFLFlBQVk7QUFBQSxZQUN2QyxTQUFTLGVBQWUsT0FBTyxFQUFFLFlBQVk7QUFBQSxZQUM3QyxXQUFXLENBQUM7QUFBQSxVQUNiO0FBRUEsY0FBSSxjQUFjLFFBQVc7QUFDNUIsaUJBQUssUUFBUSxFQUFFLFdBQVcsSUFBSSxjQUFjLFNBQVM7QUFBQSxVQUN0RDtBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksbUNBQW1DO0FBQUEsUUFDdEQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLElBQUksT0FBTztBQUNWLGlCQUFPLEtBQUssUUFBUSxFQUFFO0FBQUEsUUFDdkI7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLElBQUksVUFBVTtBQUNiLGlCQUFPLEtBQUssUUFBUSxFQUFFO0FBQUEsUUFDdkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFjQSxJQUFJLFlBQVk7QUFDZixnQkFBTSxTQUFTLG9CQUFJLElBQUk7QUFFdkIsZUFBSyxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxNQUFNO0FBQzFDLGdCQUFJLFFBQVEsRUFBRTtBQUdkLGdCQUFJLE1BQU0sV0FBVyxHQUFHLEtBQUssTUFBTSxTQUFTLEdBQUcsR0FBRztBQUNqRCxzQkFBUSxNQUFNLFVBQVUsR0FBRyxNQUFNLFNBQVMsQ0FBQztBQUFBLFlBQzVDO0FBRUEsbUJBQU8sSUFBSSxFQUFFLEtBQUssS0FBSztBQUFBLFVBQ3hCLENBQUM7QUFFRCxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsV0FBVztBQUNWLGdCQUFNLFlBQVksQ0FBQztBQUNuQixxQkFBV0MsTUFBSyxLQUFLLFFBQVEsRUFBRSxXQUFXO0FBQ3pDLHNCQUFVLEtBQUssR0FBR0EsR0FBRSxHQUFHLElBQUlBLEdBQUUsS0FBSyxFQUFFO0FBQUEsVUFDckM7QUFFQSxpQkFBTyxHQUFHLEtBQUssUUFBUSxFQUFFLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRSxPQUFPLEdBQ3RELFVBQVUsU0FBUyxJQUFJLElBQUksVUFBVSxLQUFLLEdBQUcsQ0FBQyxLQUFLLEVBQ3BEO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNUQSxXQUFTLGFBQWEsU0FBUztBQUM5QixtQkFBZSxPQUFPO0FBRXRCLGNBQVUsUUFBUSxLQUFLO0FBRXZCLFFBQUksUUFBUSxVQUFVLEdBQUcsQ0FBQyxNQUFNLFNBQVM7QUFDeEMsWUFBTSxJQUFJLFVBQVUsb0NBQW9DO0FBQUEsSUFDekQ7QUFFQSxjQUFVLFFBQVEsVUFBVSxDQUFDO0FBRTdCLFVBQU0sSUFBSSxRQUFRLFFBQVEsR0FBRztBQUM3QixRQUFJLE1BQU0sSUFBSTtBQUNiLFlBQU0sSUFBSSxVQUFVLG9CQUFvQjtBQUFBLElBQ3pDO0FBRUEsUUFBSSxVQUFVLFFBQVEsVUFBVSxJQUFJLENBQUM7QUFDckMsVUFBTSxxQkFBcUIsUUFBUSxVQUFVLEdBQUcsQ0FBQyxFQUFFLEtBQUs7QUFDeEQsUUFBSSxZQUFZO0FBQ2hCLFFBQUksYUFBYTtBQUVqQixRQUFJLHVCQUF1QixJQUFJO0FBQzlCLGtCQUFZO0FBQ1osVUFBSSxtQkFBbUIsU0FBUyxRQUFRLEdBQUc7QUFDMUMsY0FBTSxJQUFJLG1CQUFtQixZQUFZLEdBQUc7QUFDNUMsb0JBQVksbUJBQW1CLFVBQVUsR0FBRyxDQUFDO0FBQzdDLHFCQUFhO0FBQUEsTUFDZCxPQUFPO0FBQ04sa0JBQVUsbUJBQW1CLE9BQU87QUFBQSxNQUNyQztBQUVBLGtCQUFZLGVBQWUsU0FBUztBQUFBLElBQ3JDLE9BQU87QUFDTixnQkFBVSxtQkFBbUIsT0FBTztBQUFBLElBQ3JDO0FBRUEsV0FBTyxJQUFJLFFBQVEsU0FBUyxXQUFXLFVBQVU7QUFBQSxFQUNsRDtBQXJKQSxNQXNCTUMsV0FZQTtBQWxDTjtBQUFBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQU9BLE1BQU1BLFlBQVcsT0FBTyxVQUFVO0FBWWxDLE1BQU0sVUFBTixjQUFzQixLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPMUIsWUFBWSxTQUFTLFdBQVcsUUFBUTtBQUN2QyxnQkFBTTtBQUVOLGNBQUksU0FBUyxTQUFTLEdBQUc7QUFDeEIsd0JBQVksZUFBZSxTQUFTO0FBQUEsVUFDckM7QUFFQSxlQUFLQSxTQUFRLElBQUk7QUFBQSxZQUNoQixTQUFTLGVBQWUsT0FBTztBQUFBLFlBQy9CLFdBQVcsaUJBQWlCLFdBQVcsU0FBUztBQUFBLFlBQ2hELFFBQVEsZ0JBQWdCLFdBQVcsU0FBWSxPQUFPLE1BQU07QUFBQSxVQUM3RDtBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksaUNBQWlDO0FBQUEsUUFDcEQ7QUFBQSxRQUVBLElBQUksVUFBVTtBQUNiLGlCQUFPLEtBQUtBLFNBQVEsRUFBRSxTQUNuQixLQUFLLEtBQUtBLFNBQVEsRUFBRSxPQUFPLElBQzNCLEtBQUtBLFNBQVEsRUFBRTtBQUFBLFFBQ25CO0FBQUEsUUFFQSxJQUFJLFlBQVk7QUFDZixpQkFBTyxLQUFLQSxTQUFRLEVBQUU7QUFBQSxRQUN2QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFdBQVc7QUFDVixjQUFJLFVBQVUsS0FBS0EsU0FBUSxFQUFFO0FBRTdCLGNBQUksS0FBS0EsU0FBUSxFQUFFLFdBQVcsTUFBTTtBQUNuQyxzQkFBVSxXQUFXLE9BQU87QUFBQSxVQUM3QixPQUFPO0FBQ04sc0JBQVUsSUFBSSxtQkFBbUIsT0FBTyxDQUFDO0FBQUEsVUFDMUM7QUFFQSxpQkFBTyxRQUFRLEtBQUtBLFNBQVEsRUFBRSxVQUFVLFNBQVMsQ0FBQyxHQUFHLE9BQU87QUFBQSxRQUM3RDtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUMxRkEsTUE0Qk07QUE1Qk47QUFBQTtBQU9BO0FBQ0E7QUFvQkEsTUFBTSxRQUFOLGNBQW9CLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUl4QixjQUFjO0FBQ2IsZ0JBQU07QUFDTixlQUFLLE9BQU8sQ0FBQztBQUFBLFFBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksOEJBQThCO0FBQUEsUUFDakQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLFVBQVU7QUFDVCxpQkFBTyxLQUFLLEtBQUssV0FBVztBQUFBLFFBQzdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsT0FBTztBQUNOLGNBQUksS0FBSyxRQUFRLEdBQUc7QUFDbkIsbUJBQU87QUFBQSxVQUNSO0FBRUEsaUJBQU8sS0FBSyxLQUFLLENBQUM7QUFBQSxRQUNuQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsSUFBSSxPQUFPO0FBQ1YsZUFBSyxLQUFLLEtBQUssS0FBSztBQUNwQixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxRQUFRO0FBQ1AsZUFBSyxPQUFPLENBQUM7QUFDYixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLE9BQU87QUFDTixjQUFJLEtBQUssUUFBUSxHQUFHO0FBQ25CLG1CQUFPO0FBQUEsVUFDUjtBQUNBLGlCQUFPLEtBQUssS0FBSyxNQUFNO0FBQUEsUUFDeEI7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDbkdBLE1Bc0JNO0FBdEJOO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFhQSxNQUFNLGNBQU4sY0FBMEIsTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBSS9CLGNBQWM7QUFDYixnQkFBTTtBQUNOLGVBQUssY0FBYyxJQUFJO0FBQUEsWUFDdEIsUUFBUSxvQkFBSSxRQUFRO0FBQUEsVUFDckI7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVNBLElBQUksT0FBTztBQUNWLHlCQUFlLEtBQUs7QUFFcEIsY0FBSSxDQUFDLEtBQUssY0FBYyxFQUFFLE9BQU8sSUFBSSxLQUFLLEdBQUc7QUFDNUMsaUJBQUssY0FBYyxFQUFFLE9BQU8sSUFBSSxLQUFLO0FBQ3JDLGtCQUFNLElBQUksS0FBSztBQUFBLFVBQ2hCO0FBRUEsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsUUFBUTtBQUNQLGdCQUFNLE1BQU07QUFDWixlQUFLLGNBQWMsRUFBRSxTQUFTLG9CQUFJLFFBQVE7QUFDMUMsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxPQUFPO0FBQ04sY0FBSSxLQUFLLFFBQVEsR0FBRztBQUNuQixtQkFBTztBQUFBLFVBQ1I7QUFDQSxnQkFBTSxRQUFRLEtBQUssS0FBSyxNQUFNO0FBQzlCLGVBQUssY0FBYyxFQUFFLE9BQU8sT0FBTyxLQUFLO0FBQ3hDLGlCQUFPO0FBQUEsUUFDUjtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUM1RUEsTUE4Q007QUE5Q047QUFBQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFtQ0EsTUFBTSxXQUFOLGNBQXVCLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNM0IsWUFBWSxhQUFhLE1BQU07QUFDOUIsZ0JBQU07QUFFTixjQUFJLE9BQU8sYUFBYSxZQUFZO0FBQ25DLGtCQUFNLElBQUksTUFBTSxzQ0FBc0M7QUFBQSxVQUN2RDtBQUVBLGVBQUssV0FBVztBQUNoQixlQUFLLFlBQVk7QUFDakIsZUFBSyxPQUFPLElBQUksVUFBVTtBQUMxQixlQUFLLFFBQVEsSUFBSSxZQUFZO0FBQUEsUUFDOUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksaUNBQWlDO0FBQUEsUUFDcEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxPQUFPLEtBQUs7QUFDWCxlQUFLLEtBQUssSUFBSSxHQUFHO0FBQ2pCLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFVBQVUsS0FBSztBQUNkLGVBQUssS0FBSyxPQUFPLEdBQUc7QUFDcEIsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLFVBQVU7QUFDVCxpQkFBTyxLQUFLLEtBQUssUUFBUTtBQUFBLFFBQzFCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsT0FBTyxLQUFLO0FBQ1gsaUJBQU8sS0FBSyxLQUFLLFNBQVMsR0FBRztBQUFBLFFBQzlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsT0FBTyxTQUFTO0FBQ2YsZ0JBQU1DLFFBQU87QUFFYixpQkFBTyxJQUFJLFFBQVEsU0FBVSxTQUFTLFFBQVE7QUFDN0MsZ0JBQUksQ0FBQyxTQUFTLE9BQU8sR0FBRztBQUN2QixxQkFBTywyQkFBMkI7QUFDbEM7QUFBQSxZQUNEO0FBRUEsWUFBQUEsTUFBSyxNQUFNLElBQUksT0FBTztBQUV0Qix1QkFBVyxNQUFNO0FBQ2hCLGtCQUFJO0FBR0gsb0JBQUlBLE1BQUssTUFBTSxRQUFRLEdBQUc7QUFDekIsMEJBQVE7QUFDUjtBQUFBLGdCQUNEO0FBRUEsc0JBQU0sSUFBSUEsTUFBSyxNQUFNLEtBQUs7QUFDMUIsc0JBQU0sU0FBU0EsTUFBSyxTQUFTLE1BQU0sR0FBR0EsTUFBSyxTQUFTO0FBRXBELG9CQUFJLFNBQVMsTUFBTSxLQUFLLGtCQUFrQixTQUFTO0FBQ2xELHlCQUFPLEtBQUssT0FBTyxFQUFFLE1BQU0sTUFBTTtBQUNqQztBQUFBLGdCQUNEO0FBRUEsd0JBQVEsTUFBTTtBQUFBLGNBQ2YsU0FBUyxHQUFHO0FBQ1gsdUJBQU8sQ0FBQztBQUFBLGNBQ1Q7QUFBQSxZQUNELEdBQUcsQ0FBQztBQUFBLFVBQ0wsQ0FBQztBQUFBLFFBQ0Y7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDdkpBLE1BcUJNO0FBckJOO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFZQSxNQUFNLGVBQU4sY0FBMkIsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBLFFBSS9CLGNBQWM7QUFDYixnQkFBTTtBQUNOLGVBQUssWUFBWSxDQUFDO0FBQUEsUUFDbkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLE9BQU8sVUFBVTtBQUNoQiwyQkFBaUIsVUFBVSxRQUFRO0FBRW5DLGVBQUssVUFBVSxLQUFLLFFBQVE7QUFDNUIsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxPQUFPLFVBQVU7QUFDaEIsMkJBQWlCLFVBQVUsUUFBUTtBQUVuQyxjQUFJLElBQUk7QUFDUixjQUFJLElBQUksS0FBSyxVQUFVO0FBQ3ZCLGlCQUFPLElBQUksR0FBRyxLQUFLO0FBQ2xCLGdCQUFJLEtBQUssVUFBVSxDQUFDLE1BQU0sVUFBVTtBQUNuQyxtQkFBSyxVQUFVLE9BQU8sR0FBRyxDQUFDO0FBQUEsWUFDM0I7QUFBQSxVQUNEO0FBRUEsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxTQUFTLFVBQVU7QUFDbEIsMkJBQWlCLFVBQVUsUUFBUTtBQUNuQyxjQUFJLElBQUk7QUFDUixjQUFJLElBQUksS0FBSyxVQUFVO0FBQ3ZCLGlCQUFPLElBQUksR0FBRyxLQUFLO0FBQ2xCLGdCQUFJLEtBQUssVUFBVSxDQUFDLE1BQU0sVUFBVTtBQUNuQyxxQkFBTztBQUFBLFlBQ1I7QUFBQSxVQUNEO0FBQ0EsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsT0FBTyxTQUFTO0FBQ2YsZ0JBQU0sVUFBVSxDQUFDO0FBRWpCLGNBQUksSUFBSTtBQUNSLGdCQUFNLElBQUksS0FBSyxVQUFVO0FBQ3pCLGlCQUFPLElBQUksR0FBRyxLQUFLO0FBQ2xCLG9CQUFRLEtBQUssS0FBSyxVQUFVLENBQUMsRUFBRSxPQUFPLE9BQU8sQ0FBQztBQUFBLFVBQy9DO0FBRUEsaUJBQU8sUUFBUSxJQUFJLE9BQU87QUFBQSxRQUMzQjtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUMyQ0EsV0FBUyxhQUFhO0FBQ3JCLFVBQU0sUUFBUTtBQUdkLFVBQU0sVUFBVTtBQUFBO0FBQUEsTUFFZixLQUFLLFNBQVUsUUFBUSxLQUFLLFVBQVU7QUFDckMsY0FBTSxRQUFRLFFBQVEsSUFBSSxRQUFRLEtBQUssUUFBUTtBQUUvQyxZQUFJLE9BQU8sUUFBUSxVQUFVO0FBQzVCLGlCQUFPO0FBQUEsUUFDUjtBQUVBLFlBQUksWUFBWSxLQUFLLEdBQUc7QUFDdkIsaUJBQU87QUFBQSxRQUNSO0FBR0EsWUFBSSxRQUFRLEtBQUssS0FBSyxTQUFTLEtBQUssR0FBRztBQUN0QyxjQUFJLE1BQU0sVUFBVSxJQUFJLEtBQUssR0FBRztBQUMvQixtQkFBTyxNQUFNLFVBQVUsSUFBSSxLQUFLO0FBQUEsVUFDakMsV0FBVyxNQUFNLFNBQVMsSUFBSSxLQUFLLEdBQUc7QUFDckMsbUJBQU87QUFBQSxVQUNSLE9BQU87QUFDTixrQkFBTSxJQUFJLElBQUksTUFBTSxPQUFPLE9BQU87QUFDbEMsa0JBQU0sVUFBVSxJQUFJLE9BQU8sQ0FBQztBQUM1QixrQkFBTSxTQUFTLElBQUksR0FBRyxLQUFLO0FBQzNCLG1CQUFPO0FBQUEsVUFDUjtBQUFBLFFBQ0Q7QUFFQSxlQUFPO0FBQUEsTUFDUjtBQUFBO0FBQUEsTUFHQSxLQUFLLFNBQVUsUUFBUSxLQUFLLE9BQU8sVUFBVTtBQUM1QyxZQUFJLE1BQU0sU0FBUyxJQUFJLEtBQUssR0FBRztBQUM5QixrQkFBUSxNQUFNLFNBQVMsSUFBSSxLQUFLO0FBQUEsUUFDakM7QUFFQSxZQUFJLE1BQU0sU0FBUyxJQUFJLE1BQU0sR0FBRztBQUMvQixtQkFBUyxNQUFNLFNBQVMsSUFBSSxNQUFNO0FBQUEsUUFDbkM7QUFFQSxZQUFJLFVBQVUsUUFBUSxJQUFJLFFBQVEsS0FBSyxRQUFRO0FBQy9DLFlBQUksTUFBTSxTQUFTLElBQUksT0FBTyxHQUFHO0FBQ2hDLG9CQUFVLE1BQU0sU0FBUyxJQUFJLE9BQU87QUFBQSxRQUNyQztBQUVBLFlBQUksWUFBWSxPQUFPO0FBQ3RCLGlCQUFPO0FBQUEsUUFDUjtBQUVBLFlBQUk7QUFDSixZQUFJLGFBQWEsUUFBUSx5QkFBeUIsUUFBUSxHQUFHO0FBRTdELFlBQUksZUFBZSxRQUFXO0FBQzdCLHVCQUFhO0FBQUEsWUFDWixVQUFVO0FBQUEsWUFDVixZQUFZO0FBQUEsWUFDWixjQUFjO0FBQUEsVUFDZjtBQUFBLFFBQ0Q7QUFFQSxtQkFBVyxPQUFPLElBQUk7QUFDdEIsaUJBQVMsUUFBUSxlQUFlLFFBQVEsS0FBSyxVQUFVO0FBRXZELFlBQUksT0FBTyxRQUFRLFVBQVU7QUFDNUIsZ0JBQU0sVUFBVSxPQUFPLEtBQUs7QUFBQSxRQUM3QjtBQUVBLGVBQU87QUFBQSxNQUNSO0FBQUE7QUFBQSxNQUdBLGdCQUFnQixTQUFVLFFBQVEsS0FBSztBQUN0QyxZQUFJLE9BQU8sUUFBUTtBQUNsQixpQkFBTyxPQUFPLEdBQUc7QUFFakIsY0FBSSxPQUFPLFFBQVEsVUFBVTtBQUM1QixrQkFBTSxVQUFVLE9BQU8sS0FBSztBQUFBLFVBQzdCO0FBRUEsaUJBQU87QUFBQSxRQUNSO0FBQ0EsZUFBTztBQUFBLE1BQ1I7QUFBQTtBQUFBLE1BR0EsZ0JBQWdCLFNBQVUsUUFBUSxLQUFLLFlBQVk7QUFDbEQsY0FBTSxTQUFTLFFBQVEsZUFBZSxRQUFRLEtBQUssVUFBVTtBQUM3RCxZQUFJLE9BQU8sUUFBUSxVQUFVO0FBQzVCLGdCQUFNLFVBQVUsT0FBTyxLQUFLO0FBQUEsUUFDN0I7QUFDQSxlQUFPO0FBQUEsTUFDUjtBQUFBO0FBQUEsTUFHQSxnQkFBZ0IsU0FBVSxRQUFRLEtBQUs7QUFDdEMsY0FBTSxTQUFTLFFBQVEsZUFBZSxTQUFTLEdBQUc7QUFFbEQsWUFBSSxPQUFPLFFBQVEsVUFBVTtBQUM1QixnQkFBTSxVQUFVLE9BQU8sS0FBSztBQUFBLFFBQzdCO0FBRUEsZUFBTztBQUFBLE1BQ1I7QUFBQSxJQUNEO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUExUEEsTUE4Qk07QUE5Qk47QUFBQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBaUJBLE1BQU0sZ0JBQU4sY0FBNEIsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1oQyxZQUFZLFFBQVE7QUFDbkIsZ0JBQU07QUFFTixlQUFLLGNBQWMsZUFBZSxNQUFNO0FBQ3hDLGVBQUssVUFBVSxJQUFJLE1BQU0sUUFBUSxXQUFXLEtBQUssSUFBSSxDQUFDO0FBRXRELGVBQUssWUFBWSxvQkFBSSxRQUFRO0FBQzdCLGVBQUssVUFBVSxJQUFJLEtBQUssYUFBYSxLQUFLLE9BQU87QUFFakQsZUFBSyxXQUFXLG9CQUFJLFFBQVE7QUFDNUIsZUFBSyxTQUFTLElBQUksS0FBSyxTQUFTLEtBQUssV0FBVztBQUVoRCxlQUFLLFlBQVksSUFBSSxhQUFhO0FBQUEsUUFDbkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksdUNBQXVDO0FBQUEsUUFDMUQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLGFBQWE7QUFDWixpQkFBTyxLQUFLO0FBQUEsUUFDYjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFdBQVcsS0FBSztBQUNmLGNBQUk7QUFDSixnQkFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLE9BQU87QUFDbEMsZUFBSyxJQUFJLEdBQUcsSUFBSSxFQUFFLFFBQVEsS0FBSztBQUM5QixtQkFBTyxLQUFLLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFBQSxVQUN6QjtBQUVBLGVBQUssVUFBVSxPQUFPLEtBQUssU0FBUyxHQUFHO0FBQ3ZDLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFTQSxpQkFBaUI7QUFDaEIsaUJBQU8sS0FBSztBQUFBLFFBQ2I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLGVBQWUsVUFBVTtBQUN4QixlQUFLLFVBQVUsT0FBTyxRQUFRO0FBQzlCLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsZUFBZSxVQUFVO0FBQ3hCLGVBQUssVUFBVSxPQUFPLFFBQVE7QUFDOUIsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0Esa0JBQWtCO0FBQ2pCLGlCQUFPLEtBQUssVUFBVSxPQUFPLElBQUk7QUFBQSxRQUNsQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxpQkFBaUIsVUFBVTtBQUMxQixpQkFBTyxLQUFLLFVBQVUsU0FBUyxRQUFRO0FBQUEsUUFDeEM7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDN0RBLFdBQVMsbUJBQW1CO0FBQzNCLFVBQU1DLFlBQVcsZ0JBQWdCLFVBQVU7QUFDM0MsUUFBSSxPQUFPO0FBRVgsVUFBTSxVQUFVQSxVQUFTLGNBQWMsTUFBTTtBQUM3QyxRQUFJLG1CQUFtQixhQUFhO0FBQ25DLFlBQU0sUUFBUSxRQUFRLGFBQWEsb0JBQW9CO0FBQ3ZELFVBQUksT0FBTztBQUNWLGVBQU87QUFBQSxNQUNSO0FBQUEsSUFDRDtBQUVBLFdBQU8sSUFBSSxNQUFNLElBQUk7QUFBQSxFQUN0QjtBQXBGQSxNQXdCTTtBQXhCTjtBQUFBO0FBT0E7QUFDQTtBQUNBO0FBQ0EsTUFBQUM7QUFDQTtBQWFBLE1BQU0sUUFBTixjQUFvQixLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTXhCLFlBQVksTUFBTTtBQUNqQixnQkFBTTtBQUNOLHlCQUFlLElBQUk7QUFDbkIsZUFBSyxPQUFPO0FBQUEsUUFDYjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSw0QkFBNEI7QUFBQSxRQUMvQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxVQUFVO0FBQ1QsaUJBQU8sS0FBSztBQUFBLFFBQ2I7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDNkVPLFdBQVMscUJBQXFCLElBQUksYUFBYTtBQUNyRCxtQkFBZSxFQUFFO0FBRWpCLFVBQU1DLFlBQVcsZ0JBQWdCLFVBQVU7QUFDM0MsVUFBTUMsdUJBQXNCLGtCQUFrQixxQkFBcUI7QUFDbkUsVUFBTUMsb0JBQW1CLGtCQUFrQixrQkFBa0I7QUFDN0QsVUFBTUMsWUFBVyxrQkFBa0IsVUFBVTtBQUU3QyxRQUFJO0FBRUosUUFDQyxFQUNDLHVCQUF1QkEsYUFBWSx1QkFBdUJELG9CQUUxRDtBQUNELFVBQUksdUJBQXVCLE1BQU07QUFDaEMsWUFBSSxZQUFZLGFBQWEseUJBQXlCLEdBQUc7QUFDeEQscUJBQVcsWUFBWSxhQUFhLHlCQUF5QjtBQUFBLFFBQzlEO0FBRUEsc0JBQWMsWUFBWSxZQUFZO0FBRXRDLFlBQ0MsRUFDQyx1QkFBdUJDLGFBQ3ZCLHVCQUF1QkQsb0JBRXZCO0FBQ0Qsd0JBQWMsWUFBWTtBQUFBLFFBQzNCO0FBQUEsTUFDRDtBQUVBLFVBQ0MsRUFDQyx1QkFBdUJDLGFBQ3ZCLHVCQUF1QkQsb0JBRXZCO0FBQ0Qsc0JBQWNGO0FBQUEsTUFDZjtBQUFBLElBQ0Q7QUFFQSxRQUFJO0FBQ0osVUFBTSxRQUFRLGlCQUFpQjtBQUUvQixRQUFJLFVBQVU7QUFDYixZQUFNLGlCQUFpQixHQUFHLFFBQVEsSUFBSSxFQUFFLElBQUksTUFBTSxRQUFRLENBQUM7QUFHM0QsaUJBQVcsWUFBWSxlQUFlLGNBQWM7QUFDcEQsVUFBSSxvQkFBb0JDLHNCQUFxQjtBQUM1QyxlQUFPLElBQUksU0FBUyxRQUFRO0FBQUEsTUFDN0I7QUFHQSxpQkFBV0QsVUFBUyxlQUFlLGNBQWM7QUFDakQsVUFBSSxvQkFBb0JDLHNCQUFxQjtBQUM1QyxlQUFPLElBQUksU0FBUyxRQUFRO0FBQUEsTUFDN0I7QUFBQSxJQUNEO0FBRUEsVUFBTSxXQUFXLEdBQUcsRUFBRSxJQUFJLE1BQU0sUUFBUSxDQUFDO0FBR3pDLGVBQVcsWUFBWSxlQUFlLFFBQVE7QUFDOUMsUUFBSSxvQkFBb0JBLHNCQUFxQjtBQUM1QyxhQUFPLElBQUksU0FBUyxRQUFRO0FBQUEsSUFDN0I7QUFHQSxlQUFXRCxVQUFTLGVBQWUsUUFBUTtBQUMzQyxRQUFJLG9CQUFvQkMsc0JBQXFCO0FBQzVDLGFBQU8sSUFBSSxTQUFTLFFBQVE7QUFBQSxJQUM3QjtBQUdBLGVBQVcsWUFBWSxlQUFlLEVBQUU7QUFDeEMsUUFBSSxvQkFBb0JBLHNCQUFxQjtBQUM1QyxhQUFPLElBQUksU0FBUyxRQUFRO0FBQUEsSUFDN0I7QUFHQSxlQUFXRCxVQUFTLGVBQWUsRUFBRTtBQUNyQyxRQUFJLG9CQUFvQkMsc0JBQXFCO0FBQzVDLGFBQU8sSUFBSSxTQUFTLFFBQVE7QUFBQSxJQUM3QjtBQUVBLFVBQU0sSUFBSSxNQUFNLFlBQVksRUFBRSxhQUFhO0FBQUEsRUFDNUM7QUF6TkEsTUF3Qk07QUF4Qk47QUFBQTtBQU9BO0FBQ0E7QUFDQTtBQUNBLE1BQUFHO0FBQ0E7QUFDQTtBQVlBLE1BQU0sV0FBTixjQUF1QixLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVEzQixZQUFZLFVBQVU7QUFDckIsZ0JBQU07QUFDTixnQkFBTUgsdUJBQXNCLGtCQUFrQixxQkFBcUI7QUFDbkUsMkJBQWlCLFVBQVVBLG9CQUFtQjtBQUM5QyxlQUFLLFdBQVc7QUFBQSxRQUNqQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSx3Q0FBd0M7QUFBQSxRQUMzRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxxQkFBcUI7QUFDcEIsaUJBQU8sS0FBSztBQUFBLFFBQ2I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSx5QkFBeUI7QUFDeEIsaUJBQU8sS0FBSyxTQUFTLFFBQVEsVUFBVSxJQUFJO0FBQUEsUUFDNUM7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDdENBLFdBQVMsS0FBSyxPQUFPLFFBQVE7QUFDNUIsV0FBTyxPQUFPLE9BQU8sTUFBTTtBQUFBLEVBQzVCO0FBU0EsV0FBUyxRQUFRSSxJQUFHLEdBQUcsTUFBTTtBQUM1QixRQUFJLFFBQVEsSUFBSSxHQUFHO0FBQ2xCLFlBQU0sT0FDTEEsR0FBRSxTQUFTLEVBQUUsU0FBUyxJQUFJLE1BQU1BLEdBQUUsTUFBTSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU07QUFDL0QsV0FBSyxLQUFLLENBQUM7QUFDWCxhQUFPLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQUEsSUFDckM7QUFFQSxXQUFPLElBQUksSUFBSSxPQUFPLEtBQUtBLEVBQUMsRUFBRSxPQUFPLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQztBQUFBLEVBQ3JEO0FBVUEsV0FBUyxPQUFPQSxJQUFHLEdBQUcsTUFBTUMsT0FBTTtBQUNqQyxVQUFNLFFBQVEsT0FBT0QsRUFBQztBQUN0QixVQUFNLFFBQVEsT0FBTyxDQUFDO0FBRXRCLFVBQU0sV0FBVyxRQUFRLENBQUM7QUFDMUIsVUFBTSxXQUFXQyxTQUFRLENBQUM7QUFFMUIsUUFBSSxVQUFVLFVBQVUsVUFBVSxZQUFZLFVBQVUsVUFBVTtBQUNqRSxjQUFRRCxJQUFHLEdBQUcsS0FBSyxFQUFFLFFBQVEsQ0FBQyxNQUFNO0FBQ25DLFlBQUksQ0FBQyxPQUFPLFVBQVUsZUFBZSxLQUFLQSxJQUFHLENBQUMsR0FBRztBQUNoRCxtQkFBUyxLQUFLLFlBQVlBLEdBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLE9BQU8sU0FBUyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQUEsUUFDakUsV0FBVyxDQUFDLE9BQU8sVUFBVSxlQUFlLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDdkQsbUJBQVMsS0FBSyxZQUFZQSxHQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxVQUFVLFNBQVMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUFBLFFBQ3BFLE9BQU87QUFDTixpQkFBT0EsR0FBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsU0FBUyxPQUFPLENBQUMsR0FBRyxRQUFRO0FBQUEsUUFDaEQ7QUFBQSxNQUNELENBQUM7QUFBQSxJQUNGLE9BQU87QUFDTixZQUFNLElBQUksWUFBWUEsSUFBRyxHQUFHLE9BQU8sS0FBSztBQUN4QyxVQUFJLE1BQU0sUUFBVztBQUNwQixpQkFBUyxLQUFLLFlBQVlBLElBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztBQUFBLE1BQ3pDO0FBQUEsSUFDRDtBQUVBLFdBQU87QUFBQSxFQUNSO0FBV0EsV0FBUyxZQUFZQSxJQUFHLEdBQUcsVUFBVSxNQUFNO0FBQzFDLFVBQU0sU0FBUztBQUFBLE1BQ2Q7QUFBQSxNQUNBO0FBQUEsSUFDRDtBQUVBLFFBQUksYUFBYSxPQUFPO0FBQ3ZCLGFBQU8sUUFBUTtBQUFBLFFBQ2QsT0FBT0E7QUFBQSxRQUNQLE1BQU0sT0FBT0E7QUFBQSxNQUNkO0FBRUEsVUFBSSxTQUFTQSxFQUFDLEdBQUc7QUFDaEIsY0FBTSxPQUFPLE9BQU8sZUFBZUEsRUFBQyxHQUFHLGFBQWE7QUFDcEQsWUFBSSxTQUFTLFFBQVc7QUFDdkIsaUJBQU8sTUFBTSxXQUFXO0FBQUEsUUFDekI7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBLFFBQUksYUFBYSxTQUFTLGFBQWEsVUFBVTtBQUNoRCxhQUFPLFNBQVM7QUFBQSxRQUNmLE9BQU87QUFBQSxRQUNQLE1BQU0sT0FBTztBQUFBLE1BQ2Q7QUFFQSxVQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2hCLGNBQU0sT0FBTyxPQUFPLGVBQWUsQ0FBQyxHQUFHLGFBQWE7QUFDcEQsWUFBSSxTQUFTLFFBQVc7QUFDdkIsaUJBQU8sT0FBTyxXQUFXO0FBQUEsUUFDMUI7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBLFdBQU87QUFBQSxFQUNSO0FBUUEsV0FBUyxXQUFXQSxJQUFHLEdBQUc7QUFDekIsUUFBSSxPQUFPQSxPQUFNLE9BQU8sR0FBRztBQUMxQixhQUFPO0FBQUEsSUFDUjtBQUVBLFFBQUlBLGNBQWEsUUFBUSxhQUFhLE1BQU07QUFDM0MsYUFBT0EsR0FBRSxRQUFRLE1BQU0sRUFBRSxRQUFRO0FBQUEsSUFDbEM7QUFFQSxXQUFPQSxPQUFNO0FBQUEsRUFDZDtBQVFBLFdBQVMsWUFBWUEsSUFBRyxHQUFHO0FBSTFCLFFBQUk7QUFLSixVQUFNLFFBQVEsT0FBT0E7QUFLckIsVUFBTSxRQUFRLE9BQU87QUFFckIsUUFBSSxVQUFVLGVBQWUsVUFBVSxhQUFhO0FBQ25ELGlCQUFXO0FBQUEsSUFDWixXQUFXLFVBQVUsZUFBZSxVQUFVLGFBQWE7QUFDMUQsaUJBQVc7QUFBQSxJQUNaLFdBQVcsV0FBV0EsSUFBRyxDQUFDLEdBQUc7QUFDNUIsaUJBQVc7QUFBQSxJQUNaO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFsTEE7QUFBQTtBQU9BO0FBQ0E7QUFBQTtBQUFBOzs7QUM4QkEsV0FBUyxXQUFXLE9BQU87QUFDMUIsbUJBQWUsS0FBSztBQUVwQixVQUFNLGNBQWMsb0JBQUksSUFBSTtBQUM1QixVQUFNLFFBQVE7QUFJZCxVQUFNLFNBQVMsTUFBTSxTQUFTLEtBQUs7QUFFbkMsZUFBVyxLQUFLLFFBQVE7QUFDdkIsWUFBTSxJQUFJLElBQUksUUFBUTtBQUN0QixVQUFJLENBQUMsU0FBUyxDQUFDLEdBQUc7QUFDakI7QUFBQSxNQUNEO0FBRUEsWUFBTSxJQUFJLElBQUksU0FBUztBQUN2QixZQUFNLElBQUksSUFBSSxNQUFNO0FBRXBCLFVBQUksS0FBSyxHQUFHO0FBQ1gsY0FBTSxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUUsU0FBUyxDQUFDO0FBQ2xDLG9CQUFZLElBQUksR0FBRyxDQUFDO0FBQ3BCLGdCQUFRLE1BQU0sUUFBUSxHQUFHLENBQUM7QUFBQSxNQUMzQjtBQUFBLElBQ0Q7QUFFQSxZQUFRLE1BQU0sS0FBSztBQUNuQixnQkFBWSxRQUFRLENBQUMsR0FBRyxNQUFNO0FBQzdCLGNBQVEsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEVBQUU7QUFBQSxJQUNsQyxDQUFDO0FBRUQsV0FBTztBQUFBLEVBQ1I7QUF0RUE7QUFBQTtBQU9BO0FBQ0E7QUFDQTtBQUFBO0FBQUE7OztBQ2lCQSxXQUFTLFVBQVUsU0FBUyxNQUFNO0FBQ2pDLFVBQU1FLFlBQVcsWUFBWTtBQUU3QixRQUFJLG1CQUFtQixhQUFhO0FBQ25DLFVBQUksU0FBUyxTQUFTO0FBQ3JCLGdCQUFRLE1BQU07QUFDZDtBQUFBLE1BQ0Q7QUFHQSxZQUFNLFFBQVEsSUFBSSxNQUFNLGVBQWUsSUFBSSxHQUFHO0FBQUEsUUFDN0MsU0FBUztBQUFBLFFBQ1QsWUFBWTtBQUFBLFFBQ1osVUFBVTtBQUFBLE1BQ1gsQ0FBQztBQUVELGNBQVEsY0FBYyxLQUFLO0FBQUEsSUFDNUIsV0FBVyxtQkFBbUIsa0JBQWtCLG1CQUFtQixVQUFVO0FBQzVFLGlCQUFXLEtBQUssU0FBUztBQUN4QixrQkFBVSxHQUFHLElBQUk7QUFBQSxNQUNsQjtBQUFBLElBQ0QsT0FBTztBQUNOLFlBQU0sSUFBSTtBQUFBLFFBQ1Q7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFlQSxXQUFTLGdCQUFnQixTQUFTLE1BQU0sUUFBUTtBQUMvQyxVQUFNQSxZQUFXLFlBQVk7QUFFN0IsUUFBSSxtQkFBbUIsYUFBYTtBQUNuQyxVQUFJLENBQUMsU0FBUyxNQUFNLEdBQUc7QUFDdEIsaUJBQVMsRUFBRSxPQUFPO0FBQUEsTUFDbkI7QUFFQSxZQUFNLFFBQVEsSUFBSSxZQUFZLGVBQWUsSUFBSSxHQUFHO0FBQUEsUUFDbkQsU0FBUztBQUFBLFFBQ1QsWUFBWTtBQUFBLFFBQ1osVUFBVTtBQUFBLFFBQ1Y7QUFBQSxNQUNELENBQUM7QUFFRCxjQUFRLGNBQWMsS0FBSztBQUFBLElBQzVCLFdBQVcsbUJBQW1CLGtCQUFrQixtQkFBbUIsVUFBVTtBQUM1RSxpQkFBVyxLQUFLLFNBQVM7QUFDeEIsd0JBQWdCLEdBQUcsTUFBTSxNQUFNO0FBQUEsTUFDaEM7QUFBQSxJQUNELE9BQU87QUFDTixZQUFNLElBQUk7QUFBQSxRQUNUO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBa0JBLFdBQVMsMkJBQTJCLE9BQU8sZUFBZSxnQkFBZ0I7QUFDekUscUJBQWlCLE9BQU8sS0FBSztBQUU3QixRQUFJLE9BQU8sTUFBTSxpQkFBaUIsWUFBWTtBQUM3QyxZQUFNLElBQUksTUFBTSxtQkFBbUI7QUFBQSxJQUNwQztBQUVBLFVBQU0sT0FBTyxNQUFNLGFBQWE7QUFHaEMsUUFBSSxRQUFRLElBQUksR0FBRztBQUNsQixlQUFTLElBQUksR0FBRyxJQUFJLEtBQUssUUFBUSxLQUFLO0FBQ3JDLGNBQU0sSUFBSSxLQUFLLENBQUM7QUFFaEIsWUFDQyxhQUFhLGVBQ2IsRUFBRSxhQUFhLGFBQWEsTUFDM0IsbUJBQW1CLFVBQ25CLEVBQUUsYUFBYSxhQUFhLE1BQU0saUJBQ2xDO0FBQ0QsaUJBQU87QUFBQSxRQUNSO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQXhJQTtBQUFBO0FBT0E7QUFDQTtBQUNBO0FBQUE7QUFBQTs7O0FDa09BLFdBQVMsd0JBQXdCO0FBQ2hDLFdBQU8sU0FBVSxTQUFTO0FBRXpCLFVBQUksZ0JBQWdCLGtCQUFrQjtBQUNyQyxZQUFJLENBQUMsU0FBUyxVQUFVLEVBQUUsUUFBUSxLQUFLLElBQUksTUFBTSxJQUFJO0FBQ3BELGlCQUFPLEdBQUcsS0FBSyxLQUFLLE9BQU8sR0FBRyxPQUFPLEtBQUssU0FBUztBQUFBLFFBQ3BEO0FBQUEsTUFDRCxXQUFXLGdCQUFnQixtQkFBbUI7QUFDN0MsWUFBSSxRQUFRLE9BQU8sS0FBSyxRQUFRLFFBQVEsS0FBSyxLQUFLLE1BQU0sSUFBSTtBQUMzRCxpQkFBTztBQUFBLFFBQ1I7QUFFQSxlQUFPO0FBQUEsTUFDUjtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBYUEsV0FBUyx5QkFBeUI7QUFDakMsUUFBSSxLQUFLLE1BQU0sR0FBRztBQUNqQixhQUFPLEtBQUssTUFBTTtBQUFBLElBQ25CO0FBT0EsU0FBSyxNQUFNLElBQUksQ0FBQyxVQUFVO0FBQ3pCLFlBQU0sVUFBVSwyQkFBMkIsT0FBTyxzQkFBc0I7QUFFeEUsVUFBSSxZQUFZLFFBQVc7QUFDMUI7QUFBQSxNQUNEO0FBRUEsMEJBQW9CLEtBQUssTUFBTSxPQUFPO0FBQUEsSUFDdkM7QUFFQSxXQUFPLEtBQUssTUFBTTtBQUFBLEVBQ25CO0FBU0EsV0FBUyxvQkFBb0IsU0FBUztBQUNyQyxVQUFNLGFBQWEsSUFBSSxXQUFXLEtBQUssY0FBYyxFQUFFLFFBQVEsV0FBVyxDQUFDO0FBRTNFLFFBQUksT0FBTyxRQUFRLGFBQWEsc0JBQXNCO0FBQ3RELFFBQUksU0FBUztBQUNaLFlBQU0sSUFBSSxNQUFNLHFEQUFxRDtBQUV0RSxRQUFJLEtBQUssUUFBUSxPQUFPLE1BQU0sR0FBRztBQUNoQyxZQUFNLElBQUksTUFBTSxxREFBcUQ7QUFBQSxJQUN0RTtBQUVBLFdBQU8sS0FBSyxVQUFVLENBQUM7QUFFdkIsUUFBSTtBQUVKLFFBQUksbUJBQW1CLGtCQUFrQjtBQUN4QyxjQUFRLFFBQVEsTUFBTTtBQUFBLFFBQ3JCLEtBQUs7QUFDSixrQkFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRO0FBQzFDO0FBQUEsUUFDRDtBQUNDLGtCQUFRLFFBQVE7QUFDaEI7QUFBQSxNQUNGO0FBQUEsSUFDRCxXQUFXLG1CQUFtQixxQkFBcUI7QUFDbEQsY0FBUSxRQUFRO0FBQUEsSUFDakIsV0FBVyxtQkFBbUIsbUJBQW1CO0FBQ2hELGNBQVEsUUFBUSxNQUFNO0FBQUEsUUFDckIsS0FBSztBQUNKLGtCQUFRLFFBQVE7QUFDaEI7QUFBQSxRQUNELEtBQUs7QUFDSixrQkFBUSxRQUFRO0FBRWhCLGNBQUlDLFdBQVUsU0FBUztBQUN2QixjQUFJQSxhQUFZO0FBQ2YsWUFBQUEsV0FBVSxRQUFRLGlCQUFpQix1QkFBdUI7QUFDM0Qsa0JBQVEsTUFBTSxLQUFLQSxRQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsT0FBQUMsT0FBTSxNQUFNQSxNQUFLO0FBRXBEO0FBQUEsTUFDRjtBQUFBLElBR0QsV0FDRSxTQUFTLGFBQWEsYUFDdEIsQ0FBQyxDQUFDLE9BQU87QUFBQSxNQUNSLFFBQVEsWUFBWTtBQUFBLE1BQ3BCO0FBQUEsSUFDRCxJQUFJLEtBQUssS0FDVixRQUFRLGVBQWUsT0FBTyxHQUM3QjtBQUNELGNBQVEsVUFBVSxPQUFPO0FBQUEsSUFDMUIsT0FBTztBQUNOLFlBQU0sSUFBSSxNQUFNLG9CQUFvQjtBQUFBLElBQ3JDO0FBRUEsVUFBTSxPQUFPLE1BQU0sS0FBSyxjQUFjLEVBQUUsUUFBUSxlQUFlLENBQUM7QUFDaEUsVUFBTSxLQUFLLElBQUksV0FBVyxJQUFJO0FBQzlCLE9BQUcsT0FBTyxNQUFNLEtBQUs7QUFFckIsVUFBTSxhQUFhLEtBQUssTUFBTSxLQUFLLGNBQWMsRUFBRSxRQUFRLGVBQWUsQ0FBQztBQUUzRSxRQUFJLFdBQVcsU0FBUyxHQUFHO0FBQzFCLGlCQUFXLE9BQU8sTUFBTSxLQUFLO0FBQUEsSUFDOUI7QUFBQSxFQUNEO0FBUUEsV0FBUyx1QkFBdUI7QUFDL0IsUUFBSSxLQUFLLGNBQWMsRUFBRSxRQUFRLFFBQVEsSUFBSSxzQkFBc0IsR0FBRyxHQUFHO0FBQ3hFLDBCQUFvQixLQUFLLE1BQU0sS0FBSyxjQUFjLEVBQUUsT0FBTztBQUFBLElBQzVEO0FBRUEsZUFBVyxDQUFDLEVBQUUsT0FBTyxLQUFLLEtBQUssY0FBYyxFQUFFLFFBQzdDLGlCQUFpQixJQUFJLHNCQUFzQixHQUFHLEVBQzlDLFFBQVEsR0FBRztBQUNaLDBCQUFvQixLQUFLLE1BQU0sT0FBTztBQUFBLElBQ3ZDO0FBQUEsRUFDRDtBQVNBLFdBQVMsY0FBYyxRQUFRO0FBQzlCLGVBQVcsQ0FBQyxFQUFFLE9BQU8sS0FBSyxLQUFLLGNBQWMsRUFBRSxRQUM3QyxpQkFBaUIsV0FBVyx3QkFBd0IsR0FBRyxFQUN2RCxRQUFRLEdBQUc7QUFDWixjQUFRLFdBQVcsWUFBWSxPQUFPO0FBQUEsSUFDdkM7QUFBQSxFQUNEO0FBY0EsV0FBUyxjQUFjLFFBQVE7QUFDOUIsVUFBTSxVQUFVLEtBQUssY0FBYyxFQUFFLFFBQVEsZUFBZTtBQUU1RCxVQUFNLE1BQU0sb0JBQUksUUFBUTtBQUN4QixRQUFJLEtBQUs7QUFFVCxVQUFNLFlBQVksS0FBSyxjQUFjLEVBQUU7QUFFdkMsV0FBTyxNQUFNO0FBQ1osVUFBSSxRQUFRO0FBQ1o7QUFFQSxZQUFNLElBQUksTUFBTSxTQUFTLE1BQU0sQ0FBQztBQUNoQyxVQUFJLENBQUMsUUFBUSxDQUFDO0FBQUcsZUFBTztBQUV4QixhQUFPLEVBQUUsU0FBUyxHQUFHO0FBQ3BCLGNBQU0sVUFBVSxFQUFFLEtBQUssR0FBRztBQUUxQixZQUFJLFdBQVcsb0JBQUksSUFBSTtBQUN2QixjQUFNLFFBQVEsSUFBSSx3QkFBd0IsV0FBVyxPQUFPO0FBRTVELGNBQU0sSUFBSSxVQUFVLGlCQUFpQixLQUFLO0FBRTFDLFlBQUksRUFBRSxTQUFTLEdBQUc7QUFDakIscUJBQVcsb0JBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQUEsUUFDMUI7QUFFQSxZQUFJLFVBQVUsUUFBUSxLQUFLLEdBQUc7QUFDN0IsbUJBQVMsSUFBSSxTQUFTO0FBQUEsUUFDdkI7QUFFQSxtQkFBVyxDQUFDLEVBQUUsZ0JBQWdCLEtBQUssU0FBUyxRQUFRLEdBQUc7QUFDdEQsY0FBSSxJQUFJLElBQUksZ0JBQWdCO0FBQUc7QUFDL0IsY0FBSSxJQUFJLGdCQUFnQjtBQUV4QixrQkFBUTtBQUVSLGdCQUFNLGFBQWEsaUJBQWlCO0FBQUEsWUFDbkM7QUFBQSxVQUNEO0FBQ0EsY0FBSSxlQUFlO0FBQU07QUFFekIsZ0JBQU0sTUFBTSxXQUFXLFVBQVU7QUFDakMsZ0JBQU0sSUFBSSxJQUFJLFFBQVEsR0FBRztBQUN6QixnQkFBTSxNQUFNLFdBQVcsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLGdCQUFNLFlBQVksR0FBRyxHQUFHO0FBQ3hCLGdCQUFNLE1BQU0sV0FBVyxJQUFJLE9BQU8sQ0FBQyxDQUFDO0FBR3BDLGNBQUksSUFBSSxRQUFRLEdBQUcsSUFBSSxHQUFHO0FBQ3pCLGtCQUFNLElBQUksTUFBTSw0Q0FBNEM7QUFBQSxVQUM3RDtBQUVBLGdCQUFNLE9BQU8sSUFBSSxLQUFLLEdBQUc7QUFDekIsZUFBSyxjQUFjLEVBQUUsVUFBVSxRQUFRLENBQUMsR0FBRyxNQUFNO0FBQ2hELGlCQUFLLFlBQVksR0FBRyxDQUFDO0FBQUEsVUFDdEIsQ0FBQztBQUVELGNBQUk7QUFDSixjQUFJO0FBQ0gsNkJBQWlCLGdCQUFnQixzQkFBc0I7QUFDdkQsb0JBQVEsS0FBSyxJQUFJLE9BQU87QUFBQSxVQUN6QixTQUFTQyxJQUFHO0FBQ1gsNkJBQWlCLGFBQWEsd0JBQXdCQSxHQUFFLE9BQU87QUFBQSxVQUNoRTtBQUVBLGdCQUFNLFdBQVcsSUFBSSxNQUFNLEdBQUcsRUFBRSxJQUFJO0FBRXBDLGNBQUk7QUFDSixjQUFJLGlCQUFpQixjQUFjLEdBQUc7QUFDckMsMEJBQWMsaUJBQWlCO0FBQUEsVUFDaEM7QUFFQSxjQUFJLENBQUMsV0FBVyxLQUFLLEdBQUc7QUFDdkIsa0JBQU0sSUFBSSxNQUFNLDJCQUEyQjtBQUFBLFVBQzVDO0FBRUEsZ0JBQU0sWUFBWSxvQkFBSSxJQUFJO0FBRTFCLHFCQUFXLENBQUNDLElBQUcsR0FBRyxLQUFLLE9BQU8sUUFBUSxLQUFLLEdBQUc7QUFDN0Msa0JBQU0sTUFBTSxZQUFZQTtBQUN4QixrQkFBTSxjQUFjLEdBQUcsUUFBUSxJQUFJQSxFQUFDO0FBRXBDLHNCQUFVLElBQUksR0FBRztBQUNqQixrQkFBTSxhQUFhLGlCQUFpQjtBQUFBLGNBQ25DLElBQUksa0NBQWtDLEtBQUssR0FBRztBQUFBLFlBQy9DO0FBRUEsZ0JBQUksc0JBQXNCLGFBQWE7QUFDdEMsNEJBQWM7QUFDZDtBQUFBLFlBQ0Q7QUFFQSxzQ0FBMEIsa0JBQWtCLEtBQUssS0FBSyxXQUFXO0FBQUEsVUFDbEU7QUFFQSxnQkFBTSxRQUFRLGlCQUFpQjtBQUFBLFlBQzlCLElBQUksa0NBQWtDLE1BQU0sU0FBUztBQUFBLFVBQ3REO0FBRUEscUJBQVcsQ0FBQyxFQUFFLElBQUksS0FBSyxPQUFPLFFBQVEsS0FBSyxHQUFHO0FBQzdDLGdCQUNDLENBQUMsVUFBVTtBQUFBLGNBQ1YsS0FBSyxhQUFhLGtDQUFrQztBQUFBLFlBQ3JELEdBQ0M7QUFDRCxrQkFBSTtBQUNILGlDQUFpQixZQUFZLElBQUk7QUFBQSxjQUNsQyxTQUFTRCxJQUFHO0FBQ1gsaUNBQWlCO0FBQUEsa0JBQ2hCO0FBQUEsa0JBQ0EsR0FBRyxpQkFBaUIsYUFBYSxzQkFBc0IsQ0FBQyxLQUN2REEsR0FBRSxPQUNILEdBQUcsS0FBSztBQUFBLGdCQUNUO0FBQUEsY0FDRDtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUVBLFVBQUUsSUFBSTtBQUFBLE1BQ1A7QUFFQSxVQUFJLFVBQVU7QUFBTztBQUNyQixVQUFJLE9BQU8sS0FBSztBQUNmLGNBQU0sSUFBSSxNQUFNLGlEQUFpRDtBQUFBLE1BQ2xFO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFhQSxXQUFTLDBCQUEwQixXQUFXLEtBQUssS0FBSyxNQUFNO0FBQzdELFVBQU0sV0FBVyxxQkFBcUIsS0FBSyxTQUFTO0FBRXBELFVBQU0sUUFBUSxTQUFTLHVCQUF1QjtBQUM5QyxlQUFXLENBQUMsRUFBRSxJQUFJLEtBQUssT0FBTyxRQUFRLE1BQU0sVUFBVSxHQUFHO0FBQ3hELFVBQUksZ0JBQWdCLGFBQWE7QUFDaEMsdUJBQWUsTUFBTSxLQUFLLElBQUk7QUFDOUIsYUFBSyxhQUFhLG9DQUFvQyxHQUFHO0FBQUEsTUFDMUQ7QUFFQSxnQkFBVSxZQUFZLElBQUk7QUFBQSxJQUMzQjtBQUFBLEVBQ0Q7QUFXQSxXQUFTLGVBQWUsTUFBTSxLQUFLLE1BQU07QUFDeEMsUUFBSSxnQkFBZ0IsYUFBYTtBQUNoQyxVQUFJLEtBQUssYUFBYSx5QkFBeUIsR0FBRztBQUNqRCxjQUFNLFFBQVEsS0FBSyxhQUFhLHlCQUF5QjtBQUN6RCxhQUFLO0FBQUEsVUFDSjtBQUFBLFVBQ0EsTUFBTSxXQUFXLFFBQVEsR0FBRyxJQUFJLFFBQVEsSUFBSSxFQUFFO0FBQUEsUUFDL0M7QUFBQSxNQUNEO0FBRUEsVUFBSSxLQUFLLGFBQWEsNEJBQTRCLEdBQUc7QUFDcEQsY0FBTSxRQUFRLEtBQUssYUFBYSw0QkFBNEI7QUFDNUQsYUFBSztBQUFBLFVBQ0o7QUFBQSxVQUNBLE1BQU0sV0FBVyxRQUFRLEdBQUcsSUFBSSxRQUFRLElBQUksRUFBRTtBQUFBLFFBQy9DO0FBQUEsTUFDRDtBQUVBLGlCQUFXLENBQUMsRUFBRSxLQUFLLEtBQUssT0FBTyxRQUFRLEtBQUssVUFBVSxHQUFHO0FBQ3hELHVCQUFlLE9BQU8sS0FBSyxJQUFJO0FBQUEsTUFDaEM7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQVVBLFdBQVMsY0FBYyxRQUFRO0FBQzlCLFVBQU0sVUFBVSxLQUFLLGNBQWMsRUFBRSxRQUFRLGVBQWU7QUFFNUQsVUFBTSxJQUFJLE1BQU0sU0FBUyxNQUFNLENBQUM7QUFDaEMscUJBQWlCLEtBQUssTUFBTSxLQUFLLGNBQWMsRUFBRSxTQUFTLEdBQUcsT0FBTztBQUVwRSxVQUFNLFFBQVEsS0FBSyxjQUFjLEVBQUUsUUFBUSxpQkFBaUIsTUFBTTtBQUNsRSxRQUFJLE1BQU0sU0FBUyxHQUFHO0FBQ3JCLGlCQUFXLENBQUMsRUFBRSxJQUFJLEtBQUssT0FBTyxRQUFRLEtBQUssR0FBRztBQUM3QyxtQkFBVyxDQUFDLEVBQUUsT0FBTyxLQUFLLE9BQU8sUUFBUSxLQUFLLGNBQWMsQ0FBQyxHQUFHO0FBQy9ELDJCQUFpQixLQUFLLE1BQU0sU0FBUyxHQUFHLE9BQU87QUFBQSxRQUNoRDtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQVdBLFdBQVMsaUJBQWlCLFdBQVcsT0FBTyxTQUFTO0FBQ3BELFFBQUksQ0FBQyxRQUFRLEtBQUs7QUFBRztBQUNyQixRQUFJLEVBQUUscUJBQXFCO0FBQWM7QUFDekMsWUFBUSxNQUFNLEtBQUs7QUFFbkIsVUFBTSxNQUFNLG9CQUFJLFFBQVE7QUFFeEIsV0FBTyxNQUFNLFNBQVMsR0FBRztBQUN4QixZQUFNLFVBQVUsTUFBTSxLQUFLLEdBQUc7QUFDOUIsWUFBTSxJQUFJO0FBR1YsWUFBTSxRQUFRLElBQUkseUJBQXlCLFdBQVcsT0FBTyxRQUFRLHlCQUF5QixrQkFBa0IseUJBQXlCO0FBQ3pJLFlBQU0sSUFBSSxVQUFVLGlCQUFpQixHQUFHLEtBQUssRUFBRTtBQUUvQyxZQUFNLFdBQVcsb0JBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRS9CLFVBQUksVUFBVSxRQUFRLEtBQUssR0FBRztBQUM3QixpQkFBUyxJQUFJLFNBQVM7QUFBQSxNQUN2QjtBQUtBLGlCQUFXLENBQUMsT0FBTyxLQUFLLFNBQVMsUUFBUSxHQUFHO0FBQzNDLFlBQUksSUFBSSxJQUFJLE9BQU87QUFBRztBQUN0QixZQUFJLElBQUksT0FBTztBQUVmLGNBQU0sYUFBYSxRQUFRLGFBQWEseUJBQXlCO0FBQ2pFLGNBQU0sTUFBTSxXQUFXLFVBQVU7QUFFakMsY0FBTSxPQUFPLElBQUksS0FBSyxHQUFHO0FBQ3pCLGFBQUssY0FBYyxFQUFFLFVBQVUsUUFBUSxDQUFDLEdBQUcsTUFBTTtBQUNoRCxlQUFLLFlBQVksR0FBRyxDQUFDO0FBQUEsUUFDdEIsQ0FBQztBQUVELFlBQUk7QUFDSixZQUFJO0FBQ0gsa0JBQVEsZ0JBQWdCLHNCQUFzQjtBQUM5QyxrQkFBUSxLQUFLLElBQUksT0FBTztBQUFBLFFBQ3pCLFNBQVNBLElBQUc7QUFDWCxrQkFBUSxhQUFhLHdCQUF3QkEsR0FBRSxPQUFPO0FBQUEsUUFDdkQ7QUFFQSxZQUFJLGlCQUFpQixhQUFhO0FBQ2pDLGlCQUFPLFFBQVEsWUFBWTtBQUMxQixvQkFBUSxZQUFZLFFBQVEsVUFBVTtBQUFBLFVBQ3ZDO0FBRUEsY0FBSTtBQUNILG9CQUFRLFlBQVksS0FBSztBQUFBLFVBQzFCLFNBQVNBLElBQUc7QUFDWCxvQkFBUTtBQUFBLGNBQ1A7QUFBQSxjQUNBLEdBQUcsUUFBUSxhQUFhLHNCQUFzQixDQUFDLEtBQzlDQSxHQUFFLE9BQ0gsR0FBRyxLQUFLO0FBQUEsWUFDVDtBQUFBLFVBQ0Q7QUFBQSxRQUNELE9BQU87QUFDTixrQkFBUSxZQUFZO0FBQUEsUUFDckI7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFVQSxXQUFTLGlCQUFpQixRQUFRO0FBQ2pDLFVBQU0sVUFBVSxLQUFLLGNBQWMsRUFBRSxRQUFRLGVBQWU7QUFDNUQsVUFBTSxJQUFJLE1BQU0sU0FBUyxNQUFNLENBQUM7QUFDaEMsd0JBQW9CLEtBQUssTUFBTSxLQUFLLGNBQWMsRUFBRSxTQUFTLEdBQUcsT0FBTztBQUFBLEVBQ3hFO0FBVUEsV0FBUyxvQkFBb0IsV0FBVyxPQUFPLFNBQVM7QUFDdkQsUUFBSSxDQUFDLFFBQVEsS0FBSztBQUFHO0FBQ3JCLFlBQVEsTUFBTSxLQUFLO0FBRW5CLFVBQU0sTUFBTSxvQkFBSSxRQUFRO0FBRXhCLFdBQU8sTUFBTSxTQUFTLEdBQUc7QUFDeEIsWUFBTSxVQUFVLE1BQU0sS0FBSyxHQUFHO0FBQzlCLFlBQU0sSUFBSTtBQUVWLFVBQUksV0FBVyxvQkFBSSxJQUFJO0FBRXZCLFlBQU0sUUFBUSxJQUFJLDZCQUE2QixLQUFLLDRCQUE0QixPQUFPLDRCQUE0QixXQUFXLE9BQU8sUUFBUSw0QkFBNEIsa0JBQWtCLDRCQUE0QjtBQUV2TixZQUFNLElBQUksVUFBVSxpQkFBaUIsS0FBSztBQUUxQyxVQUFJLEVBQUUsU0FBUyxHQUFHO0FBQ2pCLG1CQUFXLG9CQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUFBLE1BQzFCO0FBRUEsVUFBSSxVQUFVLFFBQVEsS0FBSyxHQUFHO0FBQzdCLGlCQUFTLElBQUksU0FBUztBQUFBLE1BQ3ZCO0FBRUEsaUJBQVcsQ0FBQyxPQUFPLEtBQUssU0FBUyxRQUFRLEdBQUc7QUFDM0MsWUFBSSxJQUFJLElBQUksT0FBTztBQUFHO0FBQ3RCLFlBQUksSUFBSSxPQUFPO0FBR2YsWUFBSSxDQUFDLFFBQVEsYUFBYSw0QkFBNEIsR0FBRztBQUN4RDtBQUFBLFFBQ0Q7QUFFQSxjQUFNLGFBQWEsUUFBUSxhQUFhLDRCQUE0QjtBQUVwRSxpQkFBUyxDQUFDLEVBQUUsR0FBRyxLQUFLLE9BQU8sUUFBUSxXQUFXLE1BQU0sR0FBRyxDQUFDLEdBQUc7QUFDMUQsZ0JBQU0sV0FBVyxHQUFHO0FBQ3BCLGdCQUFNLElBQUksSUFBSSxRQUFRLEdBQUc7QUFDekIsZ0JBQU0sT0FBTyxXQUFXLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN4QyxnQkFBTSxNQUFNLFdBQVcsSUFBSSxPQUFPLENBQUMsQ0FBQztBQUVwQyxnQkFBTSxPQUFPLElBQUksS0FBSyxHQUFHO0FBRXpCLGVBQUssY0FBYyxFQUFFLFVBQVUsUUFBUSxDQUFDLEdBQUcsTUFBTTtBQUNoRCxpQkFBSyxZQUFZLEdBQUcsR0FBRyxPQUFPO0FBQUEsVUFDL0IsQ0FBQztBQUVELGNBQUk7QUFDSixjQUFJO0FBQ0gsb0JBQVEsZ0JBQWdCLHNCQUFzQjtBQUM5QyxvQkFBUSxLQUFLLElBQUksT0FBTztBQUFBLFVBQ3pCLFNBQVNBLElBQUc7QUFDWCxvQkFBUSxhQUFhLHdCQUF3QkEsR0FBRSxPQUFPO0FBQUEsVUFDdkQ7QUFFQSxjQUFJLFVBQVUsUUFBVztBQUN4QixvQkFBUSxnQkFBZ0IsSUFBSTtBQUFBLFVBQzdCLFdBQVcsUUFBUSxhQUFhLElBQUksTUFBTSxPQUFPO0FBQ2hELG9CQUFRLGFBQWEsTUFBTSxLQUFLO0FBQUEsVUFDakM7QUFFQSw0Q0FBa0MsS0FBSyxNQUFNLFNBQVMsTUFBTSxLQUFLO0FBQUEsUUFDbEU7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFXQSxXQUFTLGtDQUFrQyxTQUFTLE1BQU0sT0FBTztBQUNoRSxRQUFJLG1CQUFtQixtQkFBbUI7QUFDekMsY0FBUSxRQUFRLE1BQU07QUFBQSxRQUNyQixLQUFLO0FBQ0oscUJBQVcsQ0FBQyxPQUFPLEdBQUcsS0FBSyxPQUFPLFFBQVEsUUFBUSxPQUFPLEdBQUc7QUFDM0QsZ0JBQUksTUFBTSxRQUFRLElBQUksS0FBSyxNQUFNLElBQUk7QUFDcEMsa0JBQUksV0FBVztBQUFBLFlBQ2hCLE9BQU87QUFDTixrQkFBSSxXQUFXO0FBQUEsWUFDaEI7QUFBQSxVQUNEO0FBRUE7QUFBQSxRQUNELEtBQUs7QUFHSixxQkFBVyxDQUFDLE9BQU8sR0FBRyxLQUFLLE9BQU8sUUFBUSxRQUFRLE9BQU8sR0FBRztBQUMzRCxnQkFBSSxJQUFJLFVBQVUsT0FBTztBQUN4QixzQkFBUSxnQkFBZ0I7QUFDeEI7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUVBO0FBQUEsTUFDRjtBQUFBLElBQ0QsV0FBVyxtQkFBbUIsa0JBQWtCO0FBQy9DLGNBQVEsUUFBUSxNQUFNO0FBQUEsUUFDckIsS0FBSztBQUNKLGNBQUksU0FBUyxXQUFXO0FBQ3ZCLGdCQUFJLFVBQVUsUUFBVztBQUN4QixzQkFBUSxVQUFVO0FBQUEsWUFDbkIsT0FBTztBQUNOLHNCQUFRLFVBQVU7QUFBQSxZQUNuQjtBQUFBLFVBQ0Q7QUFFQTtBQUFBLFFBRUQsS0FBSztBQUNKLGNBQUksU0FBUyxXQUFXO0FBQ3ZCLGdCQUFJLFVBQVUsUUFBVztBQUN4QixzQkFBUSxVQUFVO0FBQUEsWUFDbkIsT0FBTztBQUNOLHNCQUFRLFVBQVU7QUFBQSxZQUNuQjtBQUFBLFVBQ0Q7QUFFQTtBQUFBLFFBQ0QsS0FBSztBQUFBLFFBQ0w7QUFDQyxjQUFJLFNBQVMsU0FBUztBQUNyQixvQkFBUSxRQUFRLFVBQVUsU0FBWSxLQUFLO0FBQUEsVUFDNUM7QUFFQTtBQUFBLE1BQ0Y7QUFBQSxJQUNELFdBQVcsbUJBQW1CLHFCQUFxQjtBQUNsRCxVQUFJLFNBQVMsU0FBUztBQUNyQixnQkFBUSxRQUFRLFVBQVUsU0FBWSxLQUFLO0FBQUEsTUFDNUM7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQWNBLFdBQVMsOEJBQThCLFVBQVVFLFNBQVEsUUFBUTtBQUNoRSxRQUFJLEVBQUUsZ0JBQWdCLGNBQWM7QUFDbkMsWUFBTSxJQUFJO0FBQUEsUUFDVDtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBRUEsUUFBSSxFQUFFLE9BQU9BLFlBQVcsV0FBVztBQUNsQyxZQUFNLElBQUksVUFBVSxzQ0FBc0M7QUFBQSxJQUMzRDtBQUVBLFVBQU0sV0FBVyxvQkFBSSxJQUFJO0FBRXpCLFFBQUksb0JBQW9CLFVBQVU7QUFDakMsaUJBQVcsb0JBQUksSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQUEsSUFDakMsV0FBVyxvQkFBb0IsYUFBYTtBQUMzQyxpQkFBVyxvQkFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQUEsSUFDOUIsV0FBVyxvQkFBb0IsS0FBSztBQUFBLElBQ3BDLE9BQU87QUFDTixZQUFNLElBQUk7QUFBQSxRQUNULDBDQUEwQyxPQUFPLFFBQVE7QUFBQSxNQUMxRDtBQUFBLElBQ0Q7QUFFQSxVQUFNLFNBQVMsQ0FBQztBQUVoQixhQUFTLFFBQVEsQ0FBQyxZQUFZO0FBQzdCLFVBQUksRUFBRSxtQkFBbUI7QUFBYztBQUN2QyxVQUFJLG1CQUFtQjtBQUFxQjtBQUU1QyxZQUFNLElBQUksSUFBSSxRQUFRLFNBQVMsTUFBTTtBQUNyQyxlQUFTLElBQUksQ0FBQztBQUVkLGFBQU87QUFBQSxRQUNOLEVBQUUsSUFBSSxFQUFFLEtBQUssTUFBTTtBQUNsQixpQkFBTyxFQUFFLHNCQUFzQjtBQUFBLFFBQ2hDLENBQUM7QUFBQSxNQUNGO0FBQUEsSUFDRCxDQUFDO0FBRUQsUUFBSSxTQUFTLE9BQU8sR0FBRztBQUN0QixzQkFBZ0IsTUFBTUEsU0FBUSxRQUFRO0FBQUEsSUFDdkM7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQTk0QkEsTUF5RE0sU0FzTUE7QUEvUE47QUFBQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBQUM7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTBCQSxNQUFNLFVBQU4sY0FBc0IsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVMxQixZQUFZLFNBQVMsU0FBUztBQUM3QixnQkFBTTtBQUtOLGNBQUksWUFBWTtBQUFXLHNCQUFVLENBQUM7QUFDdEMsY0FBSSxDQUFDLFdBQVcsU0FBUyxhQUFhLEdBQUc7QUFDeEMsc0JBQVUsSUFBSSxjQUFjLE9BQU87QUFBQSxVQUNwQztBQUVBLGVBQUssY0FBYyxJQUFJO0FBQUEsWUFDdEIsU0FBUyxpQkFBaUIsU0FBUyxXQUFXO0FBQUEsWUFDOUMsTUFBTSxDQUFDO0FBQUEsWUFDUCxXQUFXLG9CQUFJLElBQUk7QUFBQSxZQUNuQixZQUFZLENBQUMsU0FBUyxTQUFTLFVBQVUsUUFBUSxZQUFZLE9BQU87QUFBQSxZQUNwRTtBQUFBLFVBQ0Q7QUFFQSxlQUFLLGNBQWMsRUFBRSxVQUFVO0FBQUEsWUFDOUI7QUFBQSxZQUNBLHNCQUFzQixLQUFLLElBQUk7QUFBQSxVQUNoQztBQUVBLGVBQUssY0FBYyxFQUFFLFFBQVE7QUFBQSxZQUM1QixJQUFJLFNBQVMsTUFBTTtBQUNsQixvQkFBTSxJQUFJLEtBQUssY0FBYyxFQUFFLFFBQVEsZUFBZTtBQUV0RCxvQkFBTSxhQUFhLEtBQUssS0FBSyxjQUFjLEVBQUUsTUFBTSxDQUFDO0FBQ3BELG1CQUFLLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUVuQyx5QkFBVyxDQUFDLEVBQUUsTUFBTSxLQUFLLE9BQU8sUUFBUSxVQUFVLEdBQUc7QUFDcEQsOEJBQWMsS0FBSyxNQUFNLE1BQU07QUFDL0IsOEJBQWMsS0FBSyxNQUFNLE1BQU07QUFDL0IsOEJBQWMsS0FBSyxNQUFNLE1BQU07QUFDL0IsaUNBQWlCLEtBQUssTUFBTSxNQUFNO0FBQUEsY0FDbkM7QUFBQSxZQUNELENBQUM7QUFBQSxVQUNGO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVVBLGNBQWMsT0FBTztBQUNwQixlQUFLLGNBQWMsRUFBRSxhQUFhLGNBQWMsS0FBSztBQUNyRCxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBZUEsd0JBQXdCO0FBQ3ZCLGVBQUssdUJBQXVCO0FBRTVCLHFCQUFXLFFBQVEsS0FBSyxjQUFjLEVBQUUsWUFBWTtBQUVuRCxpQkFBSyxjQUFjLEVBQUUsUUFBUTtBQUFBLGNBQzVCO0FBQUEsY0FDQSx1QkFBdUIsS0FBSyxJQUFJO0FBQUEsY0FDaEM7QUFBQSxnQkFDQyxTQUFTO0FBQUEsZ0JBQ1QsU0FBUztBQUFBLGNBQ1Y7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUVBLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEseUJBQXlCO0FBQ3hCLHFCQUFXLFFBQVEsS0FBSyxjQUFjLEVBQUUsWUFBWTtBQUNuRCxpQkFBSyxjQUFjLEVBQUUsUUFBUTtBQUFBLGNBQzVCO0FBQUEsY0FDQSx1QkFBdUIsS0FBSyxJQUFJO0FBQUEsWUFDakM7QUFBQSxVQUNEO0FBRUEsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWVBLE1BQU07QUFHTCxlQUFLLGNBQWMsRUFBRSxPQUFPLEVBQUUsVUFBVSxLQUFLO0FBQzdDLGlCQUFPLEtBQUssY0FBYyxFQUFFLFFBQVEsZ0JBQWdCO0FBQUEsUUFDckQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLFdBQVc7QUFDViwrQkFBcUIsS0FBSyxJQUFJO0FBQzlCLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBV0EsYUFBYTtBQUNaLGlCQUFPLEtBQUssY0FBYyxFQUFFLFFBQVEsV0FBVztBQUFBLFFBQ2hEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVlBLFlBQVksTUFBTSxVQUFVO0FBQzNCLGVBQUssY0FBYyxFQUFFLFVBQVUsSUFBSSxNQUFNLFFBQVE7QUFDakQsaUJBQU87QUFBQSxRQUNSO0FBQUEsTUFDRDtBQTZCQSxNQUFNLFNBQVMsT0FBTyx3Q0FBd0M7QUFBQTtBQUFBOzs7QUNoUDlELFdBQVMsZ0JBQWdCLE9BQU8sTUFBTTtBQUNyQyxVQUFNLFNBQVMsb0JBQUksSUFBSTtBQUV2QixRQUFJLENBQUMsS0FBSyxZQUFZO0FBQ3JCLGFBQU87QUFBQSxJQUNSO0FBRUEsUUFBSSxXQUFXO0FBQ2YsUUFBSSxTQUFTLFFBQVc7QUFDdkIsVUFBSSxTQUFTLE1BQU07QUFDbEIsb0JBQVk7QUFBQSxNQUNiLE9BQU87QUFDTixvQkFBWSxTQUFTLGVBQWUsSUFBSSxDQUFDO0FBQUEsTUFDMUM7QUFBQSxJQUNEO0FBRUEsVUFBTSxRQUFRLEtBQUssV0FBVyxpQkFBaUIsUUFBUTtBQUV2RCxlQUFXLENBQUMsRUFBRSxJQUFJLEtBQUssT0FBTyxRQUFRLEtBQUssR0FBRztBQUM3QyxXQUFLLGNBQWMsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUM1QyxZQUFJLFNBQVMsUUFBUSxTQUFTLFFBQVc7QUFDeEM7QUFBQSxRQUNEO0FBRUEsWUFBSSxTQUFTLEtBQUssR0FBRztBQUNwQixlQUFLLGlCQUFpQixLQUFLLEVBQUUsUUFBUSxTQUFVLEdBQUc7QUFDakQsbUJBQU8sSUFBSSxDQUFDO0FBQUEsVUFDYixDQUFDO0FBRUQsY0FBSSxLQUFLLFFBQVEsS0FBSyxHQUFHO0FBQ3hCLG1CQUFPLElBQUksSUFBSTtBQUFBLFVBQ2hCO0FBQUEsUUFDRCxXQUFXLFVBQVUsUUFBVztBQUMvQixnQkFBTSxJQUFJLE1BQU0sd0JBQXdCO0FBQUEsUUFDekMsT0FBTztBQUNOLGlCQUFPLElBQUksSUFBSTtBQUFBLFFBQ2hCO0FBQUEsTUFDRCxDQUFDO0FBQUEsSUFDRjtBQUVBLFdBQU87QUFBQSxFQUNSO0FBWUEsV0FBUyxtQkFBbUIsT0FBTyxNQUFNO0FBQ3hDLFVBQU0sU0FBUyxvQkFBSSxJQUFJO0FBRXZCLFFBQUksRUFBRSxLQUFLLHNCQUFzQixhQUFhO0FBQzdDLGFBQU87QUFBQSxJQUNSO0FBRUEsUUFBSSxXQUFXO0FBQ2YsUUFBSSxTQUFTLFFBQVc7QUFDdkIsVUFBSSxTQUFTLE1BQU07QUFDbEIsb0JBQVk7QUFBQSxNQUNiLE9BQU87QUFDTixvQkFBWSxTQUFTLGVBQWUsSUFBSSxDQUFDO0FBQUEsTUFDMUM7QUFBQSxJQUNEO0FBRUEsVUFBTSxRQUFRLEtBQUssV0FBVyxpQkFBaUIsUUFBUTtBQUV2RCxlQUFXLENBQUMsRUFBRSxJQUFJLEtBQUssT0FBTyxRQUFRLEtBQUssR0FBRztBQUM3QyxXQUFLLGlCQUFpQixFQUFFLFFBQVEsU0FBVSxNQUFNO0FBQy9DLFlBQUksRUFBRSxnQkFBZ0I7QUFBYztBQUVwQyxZQUFJLFNBQVMsS0FBSyxHQUFHO0FBQ3BCLGVBQUssaUJBQWlCLEtBQUssRUFBRSxRQUFRLFNBQVUsR0FBRztBQUNqRCxtQkFBTyxJQUFJLENBQUM7QUFBQSxVQUNiLENBQUM7QUFFRCxjQUFJLEtBQUssUUFBUSxLQUFLLEdBQUc7QUFDeEIsbUJBQU8sSUFBSSxJQUFJO0FBQUEsVUFDaEI7QUFBQSxRQUNELFdBQVcsVUFBVSxRQUFXO0FBQy9CLGdCQUFNLElBQUksTUFBTSx3QkFBd0I7QUFBQSxRQUN6QyxPQUFPO0FBQ04saUJBQU8sSUFBSSxJQUFJO0FBQUEsUUFDaEI7QUFBQSxNQUNELENBQUM7QUFBQSxJQUNGO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUEzR0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBOzs7QUNrQkEsV0FBUyxZQUNSLEtBQ0EsWUFBWSxJQUNaLGVBQWUsS0FDZixpQkFBaUIsS0FDaEI7QUFDRCxVQUFNLFlBQVksb0JBQUksSUFBSTtBQUUxQixhQUFTLE9BQU8sWUFBWSxrQkFBa0Isb0JBQW9CO0FBQ2pFLGlCQUFXLE9BQU8sWUFBWTtBQUM3QixZQUNDLFdBQVcsR0FBRyxNQUFNLFFBQ3BCLE9BQU8sV0FBVyxHQUFHLE1BQU0sWUFDM0IsQ0FBQyxNQUFNLFFBQVEsV0FBVyxHQUFHLENBQUMsR0FDN0I7QUFDRCxnQkFBTSxlQUFlLG1CQUNsQixtQkFBbUIsZUFBZSxJQUFJLFlBQVksSUFDbEQsSUFBSSxZQUFZO0FBQ25CLGdCQUFNLGlCQUFpQixxQkFDcEIscUJBQXFCLGlCQUFpQixNQUN0QztBQUNILGlCQUFPLFdBQVcsR0FBRyxHQUFHLGNBQWMsY0FBYztBQUFBLFFBQ3JELE9BQU87QUFDTixnQkFBTSxXQUFXLG1CQUNkLG1CQUFtQixlQUFlLElBQUksWUFBWSxJQUNsRCxJQUFJLFlBQVk7QUFDbkIsZ0JBQU0sYUFBYSxxQkFDaEIscUJBQXFCLGlCQUFpQixNQUN0QztBQUNILG9CQUFVLElBQUksVUFBVSxVQUFVO0FBQUEsUUFDbkM7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBLFdBQU8sS0FBSyxXQUFXLFNBQVM7QUFDaEMsV0FBTztBQUFBLEVBQ1I7QUF2REE7QUFBQTtBQUFBO0FBQUE7OztBQ0FBO0FBQUE7QUFBQTtBQUFBO0FBMkNBLFdBQVMsMEJBQ1IsU0FDQUMsVUFDQSxVQUFVLENBQUMsR0FDWCxTQUFTLHdCQUNSO0FBQ0QsUUFBSSxFQUFFLG1CQUFtQjtBQUFjLGFBQU9BO0FBQzlDLFFBQUksQ0FBQyxRQUFRLGNBQWM7QUFBRyxhQUFPQTtBQUVyQyxVQUFNLFNBQVMsWUFBWUEsUUFBTztBQUVsQyxVQUFNLFNBQVMsSUFBSSxXQUFXQSxRQUFPO0FBRXJDLFlBQVEsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLFNBQVM7QUFDN0MsVUFBSSxDQUFDLEtBQUssV0FBVyxNQUFNO0FBQUc7QUFLOUIsWUFBTSxhQUFhLE9BQU8sSUFBSSxLQUFLLFVBQVUsT0FBTyxNQUFNLEVBQUUsWUFBWSxDQUFDO0FBQ3pFLFVBQUksQ0FBQyxPQUFPLE9BQU8sVUFBVTtBQUFHO0FBRWhDLFVBQUksUUFBUSxhQUFhLElBQUksR0FBRztBQUMvQixZQUFJLFFBQVEsUUFBUSxhQUFhLElBQUk7QUFDckMsWUFDQyxRQUFRLGVBQWUsVUFBVSxLQUNqQyxXQUFXLFFBQVEsVUFBVSxDQUFDLEdBQzdCO0FBQ0Qsa0JBQVEsUUFBUSxVQUFVLEVBQUUsS0FBSztBQUFBLFFBQ2xDO0FBRUEsWUFBSSxjQUFjLE9BQU8sT0FBTyxVQUFVO0FBQzFDLFlBQUksZ0JBQWdCLFFBQVEsZ0JBQWdCLFFBQVc7QUFDdEQsd0JBQWM7QUFBQSxRQUNmO0FBRUEsY0FBTSxvQkFBb0IsT0FBTztBQUNqQyxZQUFJLGdCQUFnQixRQUFRLGdCQUFnQixRQUFXO0FBQ3RELGtCQUFRO0FBQUEsUUFDVCxXQUFXLHNCQUFzQixXQUFXO0FBQzNDLGtCQUFRLFVBQVU7QUFBQSxRQUNuQixXQUFXLHNCQUFzQixVQUFVO0FBQzFDLGtCQUFRLE9BQU8sS0FBSztBQUFBLFFBQ3JCLFdBQVcsc0JBQXNCLFVBQVU7QUFDMUMsa0JBQVEsT0FBTyxLQUFLO0FBQUEsUUFDckIsV0FBVyxzQkFBc0IsVUFBVTtBQUMxQyxrQkFBUSxLQUFLLE1BQU0sS0FBSztBQUFBLFFBQ3pCO0FBRUEsZUFBTyxPQUFPLFlBQVksS0FBSztBQUFBLE1BQ2hDO0FBQUEsSUFDRCxDQUFDO0FBRUQsV0FBT0E7QUFBQSxFQUNSO0FBakdBO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7OztBQ2tDQSxXQUFTLHVCQUNSLFNBQ0EsTUFDQUMsVUFDQSxVQUFVLENBQUMsR0FDWCxTQUFTLHdCQUNSO0FBQ0QsUUFBSSxFQUFFLG1CQUFtQjtBQUFjLGFBQU9BO0FBQzlDLFFBQUksQ0FBQyxRQUFRLGNBQWM7QUFBRyxhQUFPQTtBQUVyQyxVQUFNLFNBQVMsWUFBWUEsUUFBTztBQUNsQyxVQUFNLFNBQVMsSUFBSSxXQUFXQSxRQUFPO0FBS3JDLFVBQU0sYUFBYSxPQUFPLElBQUksS0FBSyxVQUFVLE9BQU8sTUFBTSxFQUFFLFlBQVksQ0FBQztBQUN6RSxRQUFJLENBQUMsT0FBTyxPQUFPLFVBQVU7QUFBRztBQUVoQyxRQUFJLENBQUMsUUFBUSxhQUFhLElBQUksR0FBRztBQUNoQyxhQUFPQTtBQUFBLElBQ1I7QUFFQSxRQUFJLFFBQVEsUUFBUSxhQUFhLElBQUk7QUFDckMsUUFBSSxRQUFRLGVBQWUsVUFBVSxLQUFLLFdBQVcsUUFBUSxVQUFVLENBQUMsR0FBRztBQUMxRSxjQUFRLFFBQVEsVUFBVSxFQUFFLEtBQUs7QUFBQSxJQUNsQztBQUVBLFVBQU0sb0JBQW9CLE9BQU8sT0FBTyxPQUFPLFVBQVU7QUFDekQsUUFBSSxzQkFBc0IsV0FBVztBQUNwQyxjQUFRLFVBQVU7QUFBQSxJQUNuQixXQUFXLHNCQUFzQixVQUFVO0FBQzFDLGNBQVEsT0FBTyxLQUFLO0FBQUEsSUFDckIsV0FBVyxzQkFBc0IsVUFBVTtBQUMxQyxjQUFRLE9BQU8sS0FBSztBQUFBLElBQ3JCLFdBQVcsc0JBQXNCLFVBQVU7QUFDMUMsY0FBUSxLQUFLLE1BQU0sS0FBSztBQUFBLElBQ3pCO0FBRUEsV0FBTyxPQUFPLFlBQVksS0FBSztBQUUvQixXQUFPQTtBQUFBLEVBQ1I7QUF0RkE7QUFBQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTs7O0FDVkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBc3JCQSxXQUFTLG9CQUFvQix5QkFBeUIsTUFBTTtBQUMzRCxRQUFJLENBQUMsU0FBUyxvQkFBb0IsS0FBSyx5QkFBeUIsSUFBSTtBQUNuRTtBQUFBLElBQ0Q7QUFFQSxRQUFJLHdCQUF3QixNQUFNO0FBQ2pDLGFBQU8sS0FBSyxvQkFBb0IsRUFBRSxNQUFNLEdBQUcsSUFBSTtBQUFBLElBQ2hEO0FBRUEsUUFBSSxDQUFDLEtBQUssYUFBYSxxQkFBcUIsR0FBRztBQUM5QztBQUFBLElBQ0Q7QUFFQSxRQUFJLEtBQUssdUJBQXVCLEVBQUUsV0FBVyxHQUFHO0FBQy9DLFlBQU0sV0FBVyxLQUFLLGFBQWEscUJBQXFCO0FBQ3hELFVBQUksQ0FBQyxVQUFVO0FBQ2Q7QUFBQSxNQUNEO0FBRUEsWUFBTSxPQUFPLFNBQVMsTUFBTSxHQUFHO0FBQy9CLGlCQUFXLE1BQU0sTUFBTTtBQUN0QixjQUFNLE9BQU8seUJBQXlCLE1BQU0sUUFBUTtBQUNwRCxZQUFJLEVBQUUsZ0JBQWdCLGNBQWM7QUFDbkM7QUFBQSxRQUNEO0FBRUEsYUFBSyx1QkFBdUIsRUFBRSxLQUFLLElBQUk7QUFBQSxNQUN4QztBQUFBLElBQ0Q7QUFFQSxlQUFXLFFBQVEsS0FBSyx1QkFBdUIsR0FBRztBQUNqRCxVQUFJLHdCQUF3QixNQUFNO0FBQ2pDLFlBQUk7QUFDSCxpQkFBTyxLQUFLLG9CQUFvQixFQUFFLE1BQU0sR0FBRyxJQUFJO0FBQUEsUUFDaEQsU0FBUyxHQUFHO0FBQ1gsNEJBQWtCLE1BQU0sd0JBQXdCLEVBQUUsU0FBUyxDQUFDO0FBQUEsUUFDN0Q7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBO0FBQUEsTUFDQztBQUFBLE1BQ0E7QUFBQSxNQUNBLFlBQVksb0JBQW9CO0FBQUEsSUFDakM7QUFBQSxFQUNEO0FBZUEsV0FBUyx1QkFBdUI7QUFFL0IsUUFBSSx1QkFBdUI7QUFHM0IsUUFBSSxLQUFLLGFBQWEsdUJBQXVCLEdBQUc7QUFDL0MsNkJBQXVCLEtBQUssYUFBYSx1QkFBdUI7QUFBQSxJQUNqRTtBQUdBLHdCQUFvQixLQUFLLE1BQU0sb0JBQW9CO0FBQUEsRUFDcEQ7QUFRQSxXQUFTLHdDQUF3QztBQUNoRCxVQUFNQyxRQUFPO0FBRWIsUUFBSSxPQUFPQSxNQUFLLCtCQUErQixNQUFNLGFBQWE7QUFDakU7QUFBQSxJQUNEO0FBRUEsSUFBQUEsTUFBSywrQkFBK0IsSUFBSSxJQUFJLGlCQUFpQixTQUM1RCxXQUNBLFVBQ0M7QUFDRCxpQkFBVyxZQUFZLFdBQVc7QUFDakMsWUFBSSxTQUFTLFNBQVMsY0FBYztBQUNuQyxVQUFBQSxNQUFLO0FBQUEsWUFDSixTQUFTO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxTQUFTLE9BQU8sYUFBYSxTQUFTLGFBQWE7QUFBQSxVQUNwRDtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsSUFDRCxDQUFDO0FBRUQsUUFBSTtBQUNILE1BQUFBLE1BQUssK0JBQStCLEVBQUUsUUFBUUEsT0FBTTtBQUFBLFFBQ25ELFlBQVk7QUFBQSxRQUNaLG1CQUFtQjtBQUFBLE1BQ3BCLENBQUM7QUFBQSxJQUNGLFNBQVMsR0FBRztBQUNYLHdCQUFrQkEsT0FBTSx3QkFBd0IsRUFBRSxTQUFTLENBQUM7QUFBQSxJQUM3RDtBQUFBLEVBQ0Q7QUFRQSxXQUFTLGlCQUFpQixNQUFNO0FBQy9CLFFBQUksS0FBSyxTQUFTLElBQUksR0FBRztBQUN4QixhQUFPO0FBQUEsSUFDUjtBQUVBLGVBQVcsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLFFBQVEsS0FBSyxVQUFVLEdBQUc7QUFDcEQsVUFBSSxFQUFFLFNBQVMsSUFBSSxHQUFHO0FBQ3JCLGVBQU87QUFBQSxNQUNSO0FBRUEsdUJBQWlCLEtBQUssR0FBRyxJQUFJO0FBQUEsSUFDOUI7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQVFBLFdBQVMscUJBQXFCO0FBQzdCLFVBQU1BLFFBQU87QUFFYixRQUFJLG9CQUFvQjtBQUN4QixJQUFBQSxNQUFLO0FBQUEsTUFDSixJQUFJLFNBQVMsV0FBWTtBQUN4QixjQUFNLE9BQU9BLE1BQUssVUFBVSxVQUFVO0FBRXRDLFlBQUksU0FBUyxtQkFBbUI7QUFDL0I7QUFBQSxRQUNEO0FBRUEsNEJBQW9CO0FBRXBCLFlBQUksRUFBRUEsTUFBSyxzQkFBc0IsYUFBYTtBQUM3QztBQUFBLFFBQ0Q7QUFFQSxjQUFNLFFBQ0w7QUFDRCxjQUFNLFdBQVdBLE1BQUssV0FBVyxpQkFBaUIsS0FBSztBQUV2RCxZQUFJO0FBQ0osWUFBSTtBQUNILHFCQUFXLG9CQUFJLElBQUk7QUFBQSxZQUNsQixHQUFHO0FBQUEsWUFDSCxHQUFHLG1CQUFtQixLQUFLQSxPQUFNLEtBQUs7QUFBQSxVQUN2QyxDQUFDO0FBQUEsUUFDRixTQUFTLEdBQUc7QUFDWCxxQkFBVztBQUFBLFFBQ1o7QUFFQSxtQkFBVyxXQUFXLENBQUMsR0FBRyxRQUFRLEdBQUc7QUFDcEMsY0FBSSxTQUFTLE1BQU07QUFDbEIsb0JBQVEsYUFBYSxvQkFBb0IsRUFBRTtBQUFBLFVBQzVDLE9BQU87QUFDTixvQkFBUSxnQkFBZ0Isa0JBQWtCO0FBQUEsVUFDM0M7QUFBQSxRQUNEO0FBQUEsTUFDRCxDQUFDO0FBQUEsSUFDRjtBQUVBLElBQUFBLE1BQUs7QUFBQSxNQUNKLElBQUksU0FBUyxXQUFZO0FBRXhCLFlBQUksQ0FBQyxjQUFjQSxPQUFNLDhCQUE4QixHQUFHO0FBQ3pEO0FBQUEsUUFDRDtBQUVBLGNBQU0sV0FBVyxpQkFBaUJBLE9BQU0sOEJBQThCO0FBRXRFLG1CQUFXLFFBQVEsVUFBVTtBQUM1QixxQkFBVyxXQUFXLE1BQU07QUFDM0Isa0JBQU1DLEtBQUksTUFBTUQsTUFBSyxjQUFjLEVBQUUsZUFBZSxFQUFFLFNBQVMsQ0FBQztBQUNoRSxtQkFBTyxPQUFPLFFBQVEsV0FBVyxHQUFHQyxFQUFDO0FBQUEsVUFDdEM7QUFBQSxRQUNEO0FBQUEsTUFDRCxDQUFDO0FBQUEsSUFDRjtBQUdBLElBQUFELE1BQUssdUJBQXVCLEVBQUUsa0JBQWtCLElBQUksTUFBTTtBQUN6RCxVQUFJQSxNQUFLLGFBQWEsa0JBQWtCLEdBQUc7QUFDMUMsUUFBQUEsTUFBSyxVQUFVLG9CQUFvQixJQUFJO0FBQUEsTUFDeEMsT0FBTztBQUNOLFFBQUFBLE1BQUssVUFBVSxvQkFBb0IsTUFBUztBQUFBLE1BQzdDO0FBQUEsSUFDRDtBQUdBLElBQUFBLE1BQUssdUJBQXVCLEVBQUUsaUJBQWlCLElBQUksTUFBTTtBQUN4RCxZQUFNRSxXQUFVLHlCQUF5QixLQUFLRixLQUFJO0FBQ2xELFVBQUksU0FBU0UsUUFBTyxLQUFLLE9BQU8sS0FBS0EsUUFBTyxFQUFFLFNBQVMsR0FBRztBQUN6RCxRQUFBRixNQUFLLFdBQVdFLFFBQU87QUFBQSxNQUN4QjtBQUFBLElBQ0Q7QUFHQSxJQUFBRixNQUFLLHVCQUF1QixFQUFFLDBCQUEwQixJQUFJLE1BQU07QUFDakUsWUFBTUUsV0FBVSx3QkFBd0IsS0FBS0YsS0FBSTtBQUNqRCxVQUFJLFNBQVNFLFFBQU8sS0FBSyxPQUFPLEtBQUtBLFFBQU8sRUFBRSxTQUFTLEdBQUc7QUFDekQsUUFBQUYsTUFBSyxXQUFXRSxRQUFPO0FBQUEsTUFDeEI7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQU9BLFdBQVMsMEJBQTBCO0FBQ2xDLFFBQUksQ0FBQyxLQUFLLGFBQWEsMEJBQTBCLEdBQUc7QUFDbkQsYUFBTyxDQUFDO0FBQUEsSUFDVDtBQUVBLFVBQU0sT0FBTyxTQUFTO0FBQUEsTUFDckIsS0FBSyxhQUFhLDBCQUEwQjtBQUFBLElBQzdDO0FBQ0EsUUFBSSxFQUFFLGdCQUFnQixvQkFBb0I7QUFDekM7QUFBQSxRQUNDO0FBQUEsUUFDQTtBQUFBLFFBQ0EsZ0JBQWdCLDBCQUEwQiwrQkFBK0IsS0FBSztBQUFBLFVBQzdFO0FBQUEsUUFDRCxDQUFDO0FBQUEsTUFDRjtBQUNBLGFBQU8sQ0FBQztBQUFBLElBQ1Q7QUFFQSxRQUFJLE1BQU0sQ0FBQztBQUVYLFFBQUk7QUFDSCxZQUFNLGlCQUFpQixLQUFLLE1BQU0sS0FBSyxZQUFZLEtBQUssQ0FBQztBQUFBLElBQzFELFNBQVMsR0FBRztBQUNYO0FBQUEsUUFDQztBQUFBLFFBQ0E7QUFBQSxRQUNBLDRFQUE0RSxDQUFDO0FBQUEsTUFDOUU7QUFBQSxJQUNEO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFNQSxXQUFTLDJCQUEyQjtBQUNuQyxRQUFJLEtBQUssYUFBYSxpQkFBaUIsR0FBRztBQUN6QyxVQUFJO0FBQ0gsZUFBTyxpQkFBaUIsS0FBSyxNQUFNLEtBQUssYUFBYSxpQkFBaUIsQ0FBQztBQUFBLE1BQ3hFLFNBQVMsR0FBRztBQUNYO0FBQUEsVUFDQztBQUFBLFVBQ0E7QUFBQSxVQUNBLHlCQUF5QixpQkFBaUIsc0RBQXNELEtBQUs7QUFBQSxZQUNwRztBQUFBLFVBQ0QsQ0FBQyxLQUFLLENBQUM7QUFBQSxRQUNSO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxXQUFPLENBQUM7QUFBQSxFQUNUO0FBT0EsV0FBUyxpQkFBaUIsTUFBTTtBQUMvQixRQUFJLE1BQU0sQ0FBQztBQUVYLFFBQUksQ0FBQyxTQUFTLElBQUksR0FBRztBQUNwQixhQUFPO0FBQUEsSUFDUjtBQUdBLFFBQUk7QUFDSCxZQUFNLFVBQVUsYUFBYSxJQUFJO0FBQ2pDLGFBQU8sUUFBUTtBQUFBLElBQ2hCLFNBQVMsR0FBRztBQUFBLElBQUM7QUFFYixRQUFJO0FBQ0gsWUFBTSxLQUFLLE1BQU0sSUFBSTtBQUFBLElBQ3RCLFNBQVMsR0FBRztBQUNYLFlBQU07QUFBQSxJQUNQO0FBRUEsV0FBTyxlQUFlLEdBQUc7QUFBQSxFQUMxQjtBQU1BLFdBQVMsa0JBQWtCO0FBQzFCLFFBQUk7QUFDSCxZQUFNLFdBQVcscUJBQXFCLEtBQUssWUFBWSxPQUFPLENBQUM7QUFDL0QsV0FBSyxZQUFZLFNBQVMsdUJBQXVCLENBQUM7QUFBQSxJQUNuRCxTQUFTLEdBQUc7QUFDWCxVQUFJLE9BQU8sS0FBSyxVQUFVLGtCQUFrQixFQUFFO0FBQzlDLFVBQUksU0FBUyxJQUFJLEtBQUssS0FBSyxTQUFTLEdBQUc7QUFDdEMsY0FBTSxVQUFVLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxDQUFDO0FBQ3BELFlBQUksU0FBUyxPQUFPLEdBQUc7QUFDdEIsaUJBQU8sSUFBSSxVQUFVLE9BQU8sRUFBRSxPQUFPLElBQUk7QUFBQSxRQUMxQztBQUNBLGFBQUssWUFBWTtBQUFBLE1BQ2xCO0FBQUEsSUFDRDtBQUVBLFdBQU87QUFBQSxFQUNSO0FBV0EsV0FBUyxvQkFBb0I7QUFDNUIsUUFBSSxFQUFFLEtBQUssc0JBQXNCLGFBQWE7QUFDN0MsYUFBTztBQUFBLElBQ1I7QUFFQSxVQUFNLGFBQWEsS0FBSyxZQUFZLGlCQUFpQjtBQUVyRCxRQUFJLHNCQUFzQixlQUFlO0FBQ3hDLFVBQUksV0FBVyxTQUFTLFNBQVMsR0FBRztBQUNuQyxhQUFLLFdBQVcscUJBQXFCLENBQUMsVUFBVTtBQUFBLE1BQ2pEO0FBQUEsSUFDRCxXQUFXLFFBQVEsVUFBVSxHQUFHO0FBQy9CLFlBQU0sU0FBUyxDQUFDO0FBQ2hCLGlCQUFXLEtBQUssWUFBWTtBQUMzQixZQUFJLFNBQVMsQ0FBQyxHQUFHO0FBQ2hCLGdCQUFNLG1CQUFtQixFQUFFLEtBQUs7QUFDaEMsY0FBSSxxQkFBcUIsSUFBSTtBQUM1QixrQkFBTSxRQUFRLFNBQVMsY0FBYyxPQUFPO0FBQzVDLGtCQUFNLFlBQVk7QUFDbEIsaUJBQUssV0FBVyxRQUFRLEtBQUs7QUFBQSxVQUM5QjtBQUNBO0FBQUEsUUFDRDtBQUVBLHlCQUFpQixHQUFHLGFBQWE7QUFFakMsWUFBSSxFQUFFLFNBQVMsU0FBUyxHQUFHO0FBQzFCLGlCQUFPLEtBQUssQ0FBQztBQUFBLFFBQ2Q7QUFBQSxNQUNEO0FBRUEsVUFBSSxPQUFPLFNBQVMsR0FBRztBQUN0QixhQUFLLFdBQVcscUJBQXFCO0FBQUEsTUFDdEM7QUFBQSxJQUNELFdBQVcsU0FBUyxVQUFVLEdBQUc7QUFDaEMsWUFBTSxtQkFBbUIsV0FBVyxLQUFLO0FBQ3pDLFVBQUkscUJBQXFCLElBQUk7QUFDNUIsY0FBTSxRQUFRLFNBQVMsY0FBYyxPQUFPO0FBQzVDLGNBQU0sWUFBWTtBQUNsQixhQUFLLFdBQVcsUUFBUSxLQUFLO0FBQUEsTUFDOUI7QUFBQSxJQUNEO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFXQSxXQUFTLGlCQUFpQjtBQUN6QixRQUFJO0FBQ0osUUFBSTtBQUVKLFFBQUk7QUFDSCxpQkFBVyxxQkFBcUIsS0FBSyxZQUFZLE9BQU8sQ0FBQztBQUFBLElBQzFELFNBQVMsR0FBRztBQUNYLGFBQU8sS0FBSyxVQUFVLGtCQUFrQixFQUFFO0FBQzFDLFVBQUksQ0FBQyxTQUFTLElBQUksS0FBSyxTQUFTLFVBQWEsU0FBUyxJQUFJO0FBQ3pELGNBQU0sSUFBSSxNQUFNLGtCQUFrQjtBQUFBLE1BQ25DO0FBQUEsSUFDRDtBQUVBLFNBQUssYUFBYTtBQUFBLE1BQ2pCLE1BQU0sS0FBSyxVQUFVLGNBQWMsTUFBTTtBQUFBLE1BQ3pDLGdCQUFnQixLQUFLLFVBQVUsa0JBQWtCLElBQUk7QUFBQSxJQUN0RCxDQUFDO0FBRUQsUUFBSSxvQkFBb0IsVUFBVTtBQUNqQyxXQUFLLFdBQVcsWUFBWSxTQUFTLHVCQUF1QixDQUFDO0FBQzdELGFBQU87QUFBQSxJQUNSO0FBRUEsVUFBTSxVQUFVLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxDQUFDO0FBQ3BELFFBQUksU0FBUyxPQUFPLEdBQUc7QUFDdEIsYUFBTyxJQUFJLFVBQVUsT0FBTyxFQUFFLE9BQU8sSUFBSTtBQUFBLElBQzFDO0FBRUEsU0FBSyxXQUFXLFlBQVk7QUFDNUIsV0FBTztBQUFBLEVBQ1I7QUFhQSxXQUFTLHNCQUFzQixTQUFTO0FBQ3ZDLHFCQUFpQixPQUFPO0FBQ3hCLFVBQU1DLGtCQUFpQixnQkFBZ0IsZ0JBQWdCO0FBQ3ZELFFBQUlBLG9CQUFtQixRQUFXO0FBQ2pDLFlBQU0sSUFBSSxNQUFNLGtDQUFrQztBQUFBLElBQ25EO0FBRUEsVUFBTSxNQUFNLFNBQVMsT0FBTztBQUM1QixRQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssUUFBUSxJQUFJO0FBQ2pDLFlBQU0sSUFBSSxNQUFNLGlCQUFpQjtBQUFBLElBQ2xDO0FBRUEsUUFBSUEsZ0JBQWUsSUFBSSxHQUFHLE1BQU0sUUFBVztBQUMxQztBQUFBLElBQ0Q7QUFFQSxJQUFBQSxnQkFBZSxPQUFPLEtBQUssT0FBTztBQUFBLEVBQ25DO0FBam9DQSxNQXNFTSxrQkFNQSxzQkFTQSx5QkFRQSxpQ0FRQSx5QkE2SEE7QUFsT047QUFBQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBS0EsTUFBQUM7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQWVBLE1BQU0sbUJBQW1CLE9BQU8sSUFBSSx5Q0FBeUM7QUFNN0UsTUFBTSx1QkFBdUIsT0FBTztBQUFBLFFBQ25DO0FBQUEsTUFDRDtBQU9BLE1BQU0sMEJBQTBCLE9BQU87QUFBQSxRQUN0QztBQUFBLE1BQ0Q7QUFNQSxNQUFNLGtDQUFrQztBQUFBLFFBQ3ZDO0FBQUEsTUFDRDtBQU1BLE1BQU0sMEJBQTBCLE9BQU8sbUJBQW1CO0FBNkgxRCxNQUFNLGdCQUFOLGNBQTRCLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVV2QyxjQUFjO0FBQ2IsZ0JBQU07QUFFTixlQUFLLHVCQUF1QixJQUFJLENBQUM7QUFDakMsZUFBSyxjQUFjLElBQUksSUFBSSxjQUFjO0FBQUEsWUFDeEMsU0FBUywwQkFBMEIsTUFBTSxPQUFPLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQztBQUFBLFVBQ25FLENBQUM7QUFDRCxlQUFLLGdCQUFnQixFQUFFO0FBQ3ZCLDZCQUFtQixLQUFLLElBQUk7QUFDNUIsZUFBSyx1QkFBdUIsSUFBSSxDQUFDO0FBQUEsUUFDbEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksK0NBQStDO0FBQUEsUUFDbEU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQSxXQUFXLHFCQUFxQjtBQUMvQixpQkFBTyxDQUFDO0FBQUEsUUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEscUJBQXFCLFdBQVcsVUFBVTtBQUN6QywyQkFBaUIsUUFBUTtBQUN6QixlQUFLLHVCQUF1QixFQUFFLFNBQVMsSUFBSTtBQUMzQyxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSx3QkFBd0IsV0FBVztBQUNsQyxpQkFBTyxLQUFLLHVCQUF1QixFQUFFLFNBQVM7QUFDOUMsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQXdCQSxJQUFJLFdBQVc7QUFDZCxpQkFBTztBQUFBLFlBQ04sVUFBVTtBQUFBLFlBQ1YsWUFBWTtBQUFBLFlBQ1osZ0JBQWdCO0FBQUEsWUFDaEIsV0FBVztBQUFBLGNBQ1YsTUFBTTtBQUFBLFlBQ1A7QUFBQSxZQUNBLGlCQUFpQixDQUFDO0FBQUEsVUFDbkI7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBYUEsYUFBYTtBQUNaLGdCQUFNLGVBQWUsd0JBQXdCO0FBQzdDLGNBQUksQ0FBQyxjQUFjO0FBQ2xCLG1CQUFPO0FBQUEsVUFDUjtBQUVBLGdCQUFNLFNBQVMsS0FBSyxVQUFVLFFBQVE7QUFDdEMsY0FBSSxFQUFFLFNBQVMsTUFBTSxLQUFLLFdBQVcsTUFBTSxJQUFJO0FBQzlDLG1CQUFPO0FBQUEsVUFDUjtBQUVBLHFCQUFXLE9BQU8sUUFBUTtBQUN6QixrQkFBTSxNQUFNLE9BQU8sR0FBRztBQUV0QixnQkFBSSxTQUFTLEdBQUcsR0FBRztBQUNsQixvQkFBTSxPQUFPLGFBQWEsUUFBUSxLQUFLLEdBQUc7QUFDMUMsa0JBQUksU0FBUyxLQUFLO0FBQ2pCLHFCQUFLLFVBQVUsVUFBVSxHQUFHLElBQUksSUFBSTtBQUFBLGNBQ3JDO0FBQ0E7QUFBQSxZQUNELFdBQVcsU0FBUyxHQUFHLEdBQUc7QUFDekIseUJBQVcsS0FBSyxLQUFLO0FBQ3BCLHNCQUFNSCxLQUFJLElBQUksQ0FBQztBQUVmLHNCQUFNLE9BQU8sYUFBYSxrQkFBa0IsS0FBSyxHQUFHQSxFQUFDO0FBQ3JELG9CQUFJLENBQUMsU0FBUyxJQUFJLEdBQUc7QUFDcEIsd0JBQU0sSUFBSSxNQUFNLDJCQUEyQjtBQUFBLGdCQUM1QztBQUNBLG9CQUFJLFNBQVNBLElBQUc7QUFDZix1QkFBSyxVQUFVLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJO0FBQUEsZ0JBQzFDO0FBQUEsY0FDRDtBQUNBO0FBQUEsWUFDRDtBQUVBLGtCQUFNLElBQUksTUFBTSwyQkFBMkI7QUFBQSxVQUM1QztBQUNBLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFlQSxPQUFPLFNBQVM7QUFDZixnQkFBTSxJQUFJO0FBQUEsWUFDVDtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFnQ0EsT0FBTyxtQkFBbUI7QUFDekIsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxlQUFlLFVBQVU7QUFDeEIsZUFBSyxjQUFjLEVBQUUsZUFBZSxRQUFRO0FBQzVDLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsZUFBZSxVQUFVO0FBQ3hCLGVBQUssY0FBYyxFQUFFLGVBQWUsUUFBUTtBQUM1QyxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsaUJBQWlCLFVBQVU7QUFDMUIsaUJBQU8sS0FBSyxjQUFjLEVBQUUsaUJBQWlCLFFBQVE7QUFBQSxRQUN0RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVVBLFVBQVUsTUFBTSxjQUFjO0FBQzdCLGNBQUk7QUFFSixjQUFJO0FBQ0gsb0JBQVEsSUFBSTtBQUFBLGNBQ1gsS0FBSyxjQUFjLEVBQUUsZUFBZSxFQUFFLFNBQVM7QUFBQSxZQUNoRCxFQUFFLE9BQU8sSUFBSTtBQUFBLFVBQ2QsU0FBUyxHQUFHO0FBQUEsVUFBQztBQUViLGNBQUksVUFBVTtBQUFXLG1CQUFPO0FBQ2hDLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVVBLFVBQVUsTUFBTSxPQUFPO0FBQ3RCLGNBQUksV0FBVyxLQUFLLGNBQWMsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUU7QUFBQSxZQUM1RDtBQUFBLFlBQ0E7QUFBQSxVQUNEO0FBQ0EsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsV0FBV0MsVUFBUztBQUNuQixjQUFJLFNBQVNBLFFBQU8sR0FBRztBQUN0QixZQUFBQSxXQUFVLGlCQUFpQixLQUFLLE1BQU1BLFFBQU87QUFBQSxVQUM5QztBQUNBO0FBQUEsWUFDQyxLQUFLLGNBQWMsRUFBRSxXQUFXLEVBQUUsU0FBUztBQUFBLFlBQzNDLEtBQUs7QUFBQSxZQUNMQTtBQUFBLFVBQ0Q7QUFFQSxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLENBQUMsZ0JBQWdCLElBQUk7QUFDcEIsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBYUEsQ0FBQyxvQkFBb0IsSUFBSTtBQUN4QixjQUFJO0FBQ0osY0FBSTtBQUdKLGdCQUFNLG1CQUFtQix5QkFBeUIsS0FBSyxJQUFJO0FBQzNELGNBQ0MsU0FBUyxnQkFBZ0IsS0FDekIsT0FBTyxLQUFLLGdCQUFnQixFQUFFLFNBQVMsR0FDdEM7QUFDRCxpQkFBSyxXQUFXLGdCQUFnQjtBQUFBLFVBQ2pDO0FBR0EsZ0JBQU0sZ0JBQWdCLHdCQUF3QixLQUFLLElBQUk7QUFDdkQsY0FBSSxTQUFTLGFBQWEsS0FBSyxPQUFPLEtBQUssYUFBYSxFQUFFLFNBQVMsR0FBRztBQUNyRSxpQkFBSyxXQUFXLGFBQWE7QUFBQSxVQUM5QjtBQUdBLGNBQUksS0FBSyxVQUFVLGNBQWMsS0FBSyxNQUFNLE9BQU87QUFDbEQsZ0JBQUk7QUFDSCw2QkFBZSxLQUFLLElBQUk7QUFDeEIseUJBQVcsS0FBSyxXQUFXO0FBQUEsWUFDNUIsU0FBUyxHQUFHO0FBQ1gsZ0NBQWtCLE1BQU0sd0JBQXdCLEVBQUUsU0FBUyxDQUFDO0FBQUEsWUFDN0Q7QUFFQSxnQkFBSTtBQUNILGdDQUFrQixLQUFLLElBQUk7QUFBQSxZQUM1QixTQUFTLEdBQUc7QUFDWCxnQ0FBa0IsTUFBTSx3QkFBd0IsRUFBRSxTQUFTLENBQUM7QUFBQSxZQUM3RDtBQUFBLFVBQ0Q7QUFHQSxjQUFJLEVBQUUsb0JBQW9CLFdBQVc7QUFDcEMsNEJBQWdCLEtBQUssSUFBSTtBQUN6Qix1QkFBVyxLQUFLO0FBQUEsVUFDakI7QUFHQSwrQkFBcUIsS0FBSyxJQUFJO0FBQzlCLGNBQUk7QUFDSCx1QkFBVyxvQkFBSSxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsbUJBQW1CLEtBQUssSUFBSSxDQUFDLENBQUM7QUFBQSxVQUNuRSxTQUFTLEdBQUc7QUFDWCx1QkFBVztBQUFBLFVBQ1o7QUFDQSx3Q0FBOEI7QUFBQSxZQUM3QjtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQSxNQUFNLEtBQUssY0FBYyxFQUFFLGVBQWUsRUFBRSxTQUFTLENBQUM7QUFBQSxVQUN2RDtBQUdBLGdEQUFzQyxLQUFLLElBQUk7QUFFL0MsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBVUEsb0JBQW9CO0FBRW5CLGNBQUksQ0FBQyxjQUFjLE1BQU0sOEJBQThCLEdBQUc7QUFFekQsaUJBQUssb0JBQW9CLEVBQUU7QUFBQSxVQUM1QjtBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLHVCQUF1QjtBQUFBLFFBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVF4QixrQkFBa0I7QUFBQSxRQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBYW5CLHlCQUF5QixVQUFVLFFBQVEsUUFBUTtBQUNsRCxjQUFJLFNBQVMsV0FBVyxzQkFBc0IsR0FBRztBQUNoRDtBQUFBLGNBQ0M7QUFBQSxjQUNBO0FBQUEsY0FDQSxLQUFLLGNBQWMsRUFBRSxXQUFXLEVBQUUsU0FBUztBQUFBLFlBQzVDO0FBQUEsVUFDRDtBQUVBLGdCQUFNLFdBQVcsS0FBSyx1QkFBdUIsSUFBSSxRQUFRO0FBQ3pELGNBQUksV0FBVyxRQUFRLEdBQUc7QUFDekIsZ0JBQUk7QUFDSCx1QkFBUyxLQUFLLE1BQU0sUUFBUSxNQUFNO0FBQUEsWUFDbkMsU0FBUyxHQUFHO0FBQ1gsZ0NBQWtCLE1BQU0sd0JBQXdCLEVBQUUsU0FBUyxDQUFDO0FBQUEsWUFDN0Q7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFTQSxRQUFRLE1BQU07QUFDYixjQUFJLGlCQUFpQixLQUFLLE1BQU0saUJBQWlCLE1BQU0sSUFBSSxDQUFDLEdBQUc7QUFDOUQsbUJBQU87QUFBQSxVQUNSO0FBRUEsY0FBSSxFQUFFLEtBQUssc0JBQXNCLGFBQWE7QUFDN0MsbUJBQU87QUFBQSxVQUNSO0FBRUEsaUJBQU8saUJBQWlCLEtBQUssS0FBSyxZQUFZLElBQUk7QUFBQSxRQUNuRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFTQSxhQUFhLE1BQU0sTUFBTTtBQUN4QixpQkFBTyxvQkFBb0IsS0FBSyxNQUFNLE1BQU0sR0FBRyxJQUFJO0FBQUEsUUFDcEQ7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDL3FCQSxNQWNNLDBCQVNBLG9CQVdBLHVCQVNBLHNCQVNBLHdCQVNBLGtCQVNBLHdCQVNBLDJCQVNBLHFDQVNBO0FBakdOLE1BQUFHLGtCQUFBO0FBQUE7QUFPQSxNQUFBQTtBQU9BLE1BQU0sMkJBQTJCO0FBU2pDLE1BQU0scUJBQXFCLEdBQUcsZ0JBQWdCO0FBVzlDLE1BQU0sd0JBQXdCLEdBQUcsZ0JBQWdCO0FBU2pELE1BQU0sdUJBQXVCLEdBQUcsZ0JBQWdCO0FBU2hELE1BQU0seUJBQXlCLEdBQUcsZ0JBQWdCO0FBU2xELE1BQU0sbUJBQW1CLEdBQUcsZ0JBQWdCO0FBUzVDLE1BQU0seUJBQXlCLEdBQUcsZ0JBQWdCO0FBU2xELE1BQU0sNEJBQTRCLEdBQUcsZ0JBQWdCO0FBU3JELE1BQU0sc0NBQXNDLEdBQUcsZ0JBQWdCO0FBUy9ELE1BQU0seUJBQXlCLEdBQUcsZ0JBQWdCO0FBQUE7QUFBQTs7O0FDdEZsRCxXQUFTLGVBQWUsU0FBUztBQUNoQyxRQUFJLG1CQUFtQjtBQUFZLGFBQU87QUFDMUMsUUFBSSxDQUFDLFFBQVE7QUFBWSxhQUFPO0FBQ2hDLFdBQU8sZUFBZSxRQUFRLFVBQVU7QUFBQSxFQUN6QztBQWVBLFdBQVMscUJBQXFCLFNBQVMsS0FBS0MsVUFBUyxRQUFRO0FBQzVELFdBQU8sWUFBWSxLQUFLQSxRQUFPLEVBQUUsS0FBSyxDQUFDLGFBQWE7QUFDbkQsVUFBSSxVQUFVLFNBQVM7QUFFdkIsVUFBSSxTQUFTLE1BQU0sS0FBSyxXQUFXLElBQUk7QUFDdEMsY0FBTUMsS0FBSSxTQUFTLGNBQWMsS0FBSztBQUN0QyxjQUFNLElBQUksU0FBUyxjQUFjLEtBQUs7QUFDdEMsVUFBRSxZQUFZO0FBQ2QsbUJBQVcsQ0FBQyxFQUFFLElBQUksS0FBSyxFQUFFLGlCQUFpQixNQUFNLEVBQUUsUUFBUSxHQUFHO0FBQzVELFVBQUFBLEdBQUUsWUFBWSxJQUFJO0FBQUEsUUFDbkI7QUFFQSxrQkFBVUEsR0FBRTtBQUFBLE1BQ2I7QUFFQSxZQUFNLElBQUksU0FBUyxjQUFjLEtBQUs7QUFDdEMsUUFBRSxZQUFZO0FBRWQsWUFBTSxVQUFVLEVBQUUsaUJBQWlCLFFBQVE7QUFDM0MsaUJBQVcsQ0FBQyxFQUFFLE1BQU0sS0FBSyxRQUFRLFFBQVEsR0FBRztBQUMzQyxjQUFNLElBQUksU0FBUyxjQUFjLFFBQVE7QUFDekMsVUFBRSxZQUFZLE9BQU87QUFDckIsWUFBSSxPQUFPO0FBQUssWUFBRSxNQUFNLE9BQU87QUFDL0IsWUFBSSxPQUFPO0FBQU0sWUFBRSxPQUFPLE9BQU87QUFDakMsWUFBSSxPQUFPO0FBQU8sWUFBRSxRQUFRLE9BQU87QUFDbkMsWUFBSSxPQUFPO0FBQU8sWUFBRSxRQUFRLE9BQU87QUFDbkMsWUFBSSxPQUFPO0FBQWEsWUFBRSxjQUFjLE9BQU87QUFDL0MsWUFBSSxPQUFPO0FBQVcsWUFBRSxZQUFZLE9BQU87QUFDM0MsWUFBSSxPQUFPO0FBQWdCLFlBQUUsaUJBQWlCLE9BQU87QUFDckQsaUJBQVMsS0FBSyxZQUFZLENBQUM7QUFDM0IsVUFBRSxZQUFZLE1BQU07QUFBQSxNQUNyQjtBQUVBLHVCQUFpQixTQUFTLFdBQVcsRUFBRSxZQUFZLEVBQUU7QUFFckQsWUFBTSxPQUFPLGVBQWUsT0FBTztBQUNuQyxVQUFJLFNBQVMsTUFBTTtBQUNsQixrQkFBVSxLQUFLO0FBQUEsTUFDaEI7QUFFQSxzQkFBZ0IsU0FBUyxtQkFBbUI7QUFBQSxRQUMzQztBQUFBLE1BQ0QsQ0FBQztBQUVELGFBQU87QUFBQSxJQUNSLENBQUM7QUFBQSxFQUNGO0FBWUEsV0FBUyxZQUFZLEtBQUtELFVBQVM7QUFDbEMsUUFBSSxlQUFlLEtBQUs7QUFDdkIsWUFBTSxJQUFJLFNBQVM7QUFBQSxJQUNwQjtBQUVBLFdBQU8sTUFBTSxlQUFlLEdBQUcsR0FBR0EsUUFBTyxFQUFFLEtBQUssQ0FBQyxhQUFhO0FBRzdELFVBQUksVUFBVSxPQUFPLE1BQU07QUFFMUIsWUFDQyxDQUFDLFNBQVMsVUFBVSxnQkFBZ0IsRUFBRSxRQUFRLFVBQVUsSUFBSSxNQUFNLElBQ2pFO0FBQ0QsZ0JBQU0sSUFBSTtBQUFBLFlBQ1Qsc0NBQXNDLFVBQVUsSUFBSTtBQUFBLFVBQ3JEO0FBQUEsUUFDRDtBQUVBLGNBQU0sY0FBYyxHQUFHLFVBQVUsTUFBTSxHQUFHLFVBQVUsR0FBRyxDQUFDO0FBQ3hELGdCQUFRLGFBQWE7QUFBQSxVQUNwQixLQUFLO0FBQ0osa0JBQU0sSUFBSSxNQUFNLGdCQUFnQixVQUFVLFVBQVUsRUFBRTtBQUN0RDtBQUFBLFVBQ0Q7QUFDQyxrQkFBTSxJQUFJO0FBQUEsY0FDVCxxQkFBcUIsVUFBVSxNQUFNLE1BQU0sVUFBVSxVQUFVLGNBQWMsVUFBVSxJQUFJO0FBQUEsWUFDNUY7QUFBQSxRQUNGO0FBQUEsTUFDRDtBQUVBLGFBQU8sSUFBSSxRQUFRLFNBQVUsU0FBUyxRQUFRO0FBQzdDLGlCQUNFLEtBQUssRUFDTCxLQUFLLENBQUMsWUFBWTtBQUNsQixrQkFBUTtBQUFBLFlBQ1A7QUFBQSxZQUNBLE1BQU0sU0FBUyxRQUFRLElBQUksY0FBYztBQUFBLFVBQzFDLENBQUM7QUFBQSxRQUNGLENBQUMsRUFDQSxNQUFNLE1BQU07QUFBQSxNQUNmLENBQUM7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNGO0FBbElBO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFBQTtBQUFBOzs7QUNUQTtBQUFBO0FBQUE7QUFBQTtBQTBPQSxXQUFTLDJCQUEyQjtBQUFDO0FBQ3BDLFVBQU1FLFdBQVUsQ0FBQztBQUVqQixVQUFNLE1BQU0sS0FBSyxhQUFhLGtCQUFrQjtBQUVoRCxRQUFJLFNBQVMsR0FBRyxHQUFHO0FBQ2xCLE1BQUFBLFNBQVEsS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLFNBQVMsUUFBUSxFQUFFLFNBQVM7QUFBQSxJQUMzRDtBQUVBLFFBQUksS0FBSyxhQUFhLHFCQUFxQixHQUFHO0FBQzdDLE1BQUFBLFNBQVEsUUFBUSxJQUFJLEtBQUssYUFBYSxxQkFBcUIsRUFBRSxZQUFZO0FBQUEsSUFDMUU7QUFFQSxXQUFPQTtBQUFBLEVBQ1I7QUFhQSxXQUFTLDJCQUEyQjtBQUFDO0FBRXBDLFFBQUksS0FBSyxrQ0FBa0MsTUFBTSxNQUFNO0FBQ3REO0FBQUEsSUFDRDtBQUVBLFNBQUssa0NBQWtDLElBQUk7QUFFM0MsVUFBTUEsV0FBVTtBQUFBLE1BQ2YsV0FBVyxDQUFDLEdBQUc7QUFBQSxJQUNoQjtBQUVBLFVBQU0sV0FBVyxDQUFDLFNBQVNDLGNBQWE7QUFDdkMsaUJBQVcsQ0FBQyxFQUFFLEtBQUssS0FBSyxRQUFRLFFBQVEsR0FBRztBQUMxQyxZQUFJLE1BQU0sbUJBQW1CLE1BQU07QUFFbEMsY0FBSSxLQUFLLFVBQVUsUUFBUSxNQUFNLFVBQVU7QUFDMUMsWUFBQUEsVUFBUyxXQUFXO0FBQUEsVUFDckI7QUFFQSxjQUFJO0FBQ0gsWUFBQUMsYUFBWSxLQUFLLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTTtBQUNuQyxnQ0FBa0IsTUFBTSx3QkFBd0IsRUFBRSxTQUFTLENBQUM7QUFBQSxZQUM3RCxDQUFDO0FBQUEsVUFDRixTQUFTLEdBQUc7QUFDWCw4QkFBa0IsTUFBTSx3QkFBd0IsRUFBRSxTQUFTLENBQUM7QUFBQSxVQUM3RDtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBLFVBQU0sV0FBVyxJQUFJLHFCQUFxQixVQUFVRixRQUFPO0FBQzNELGFBQVMsUUFBUSxJQUFJO0FBQUEsRUFDdEI7QUFrQkEsV0FBU0UsZUFBYztBQUFDO0FBRXZCLFVBQU0sTUFBTSxLQUFLLFVBQVUsT0FBTyxNQUFTO0FBQzNDLFFBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxRQUFRLElBQUk7QUFDakMsWUFBTSxJQUFJLE1BQU0sYUFBYTtBQUFBLElBQzlCO0FBRUEsVUFBTUYsV0FBVSxLQUFLLFVBQVUsU0FBUyxDQUFDLENBQUM7QUFFMUMsUUFBSSxhQUFhO0FBQ2pCLFFBQUksS0FBSyxZQUFZO0FBQ3BCLG1CQUFhLEtBQUs7QUFBQSxJQUNuQjtBQUVBLFFBQUksWUFBWSxXQUFXLGNBQWMsSUFBSSxjQUFjLGFBQWE7QUFDeEUsUUFBSSxxQkFBcUIsV0FBVyxPQUFPO0FBRTNDLFFBQUksdUJBQXVCLFFBQVc7QUFDckMsMkJBQXFCO0FBQUEsSUFDdEI7QUFFQSxRQUFJLEVBQUUscUJBQXFCLGNBQWM7QUFDeEMsa0JBQVksU0FBUyxjQUFjLEtBQUs7QUFDeEMsZ0JBQVUsTUFBTSxVQUFVO0FBQzFCLGdCQUFVLGFBQWEsZ0JBQWdCLFdBQVc7QUFDbEQsaUJBQVcsWUFBWSxTQUFTO0FBQUEsSUFDakM7QUFFQSxXQUFPLHFCQUFxQixXQUFXLEtBQUtBLFVBQVMsS0FBSyxVQUFVLFFBQVEsQ0FBQyxFQUMzRSxLQUFLLE1BQU07QUFDWCxVQUFJLHVCQUF1QixRQUFXO0FBQ3JDLGtCQUFVLE1BQU0sVUFBVTtBQUFBLE1BQzNCO0FBQUEsSUFDRCxDQUFDLEVBQ0EsTUFBTSxDQUFDLE1BQU07QUFDYixZQUFNO0FBQUEsSUFDUCxDQUFDO0FBQUEsRUFDSDtBQU1BLFdBQVMsY0FBYztBQUN0QixXQUFPLEtBQUs7QUFBQSxFQUNiO0FBcldBLE1BNkJNLG9DQXNFQTtBQW5HTjtBQUFBO0FBTUE7QUFDQTtBQUNBLE1BQUFHO0FBSUE7QUFPQTtBQUNBLE1BQUFBO0FBQ0E7QUFRQSxNQUFNLHFDQUFxQyxPQUFPLGdCQUFnQjtBQXNFbEUsTUFBTSxTQUFOLGNBQXFCLGNBQWM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNbEMsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLGdDQUFnQztBQUFBLFFBQ25EO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQXFCQSxJQUFJLFdBQVc7QUFDZCxpQkFBTyxPQUFPO0FBQUEsWUFDYixDQUFDO0FBQUEsWUFDRCxNQUFNO0FBQUEsWUFDTjtBQUFBLGNBQ0MsV0FBVztBQUFBLGdCQUNWLE1BQU0sWUFBWSxLQUFLLElBQUk7QUFBQSxjQUM1QjtBQUFBLGNBQ0EsWUFBWTtBQUFBLGNBQ1osS0FBSztBQUFBLGNBQ0wsUUFBUTtBQUFBLGNBQ1IsUUFBUTtBQUFBLGNBQ1IsT0FBTztBQUFBLGdCQUNOLFVBQVU7QUFBQSxnQkFDVixRQUFRO0FBQUEsZ0JBQ1IsTUFBTTtBQUFBLGdCQUNOLGFBQWE7QUFBQSxnQkFDYixTQUFTO0FBQUEsa0JBQ1IsUUFBUTtBQUFBLGdCQUNUO0FBQUEsY0FDRDtBQUFBLFlBQ0Q7QUFBQSxZQUNBLHlCQUF5QixLQUFLLElBQUk7QUFBQSxVQUNuQztBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxXQUFXLHFCQUFxQjtBQUMvQixnQkFBTSxPQUFPLE1BQU07QUFDbkIsZUFBSyxLQUFLLGtCQUFrQjtBQUM1QixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLENBQUMsZ0JBQWdCLElBQUk7QUFBQztBQUNyQixnQkFBTSxnQkFBZ0IsRUFBRTtBQUd4QixlQUFLLHVCQUF1QixFQUFFLGtCQUFrQixJQUFJLENBQUMsUUFBUTtBQUM1RCxnQkFBSSxLQUFLLGFBQWEsa0JBQWtCLEdBQUc7QUFDMUMsbUJBQUssVUFBVSxPQUFPLElBQUksSUFBSSxLQUFLLFNBQVMsUUFBUSxFQUFFLFNBQVMsQ0FBQztBQUFBLFlBQ2pFLE9BQU87QUFDTixtQkFBSyxVQUFVLE9BQU8sTUFBUztBQUFBLFlBQ2hDO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWNBLENBQUMsb0JBQW9CLElBQUk7QUFBQztBQUN6QixnQkFBTSxvQkFBb0IsRUFBRTtBQUM1QixtQ0FBeUIsS0FBSyxJQUFJO0FBQUEsUUFDbkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxPQUFPLFNBQVM7QUFDZixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQSxNQUFNLEtBQUs7QUFDVixjQUFJLFNBQVMsR0FBRyxLQUFLLGVBQWUsS0FBSztBQUN4QyxpQkFBSyxhQUFhLG9CQUFvQixHQUFHLEdBQUcsRUFBRTtBQUFBLFVBQy9DO0FBRUEsaUJBQU9ELGFBQVksS0FBSyxJQUFJO0FBQUEsUUFDN0I7QUFBQSxNQUNEO0FBeUlBLDRCQUFzQixNQUFNO0FBQUE7QUFBQTs7O0FDdlc1QjtBQUFBO0FBQUE7QUEyQkEsVUFBTSxvQkFBb0I7QUFDMUIsVUFBTUUseUJBQU4sTUFBTSx1QkFBc0I7QUFBQSxRQUN4QixPQUFPLGNBQWMsTUFBTTtBQUN2QixpQkFBTyxPQUFPLFVBQVUsU0FBUyxLQUFLLElBQUksTUFBTTtBQUFBLFFBQ3BEO0FBQUEsUUFDQSxPQUFPLGNBQWMsTUFBTTtBQUN2QixjQUFJLEtBQUssY0FBYyxJQUFJLEdBQUc7QUFDMUIsbUJBQU87QUFBQSxVQUNYO0FBQ0EsY0FBSSxLQUFLLGVBQWUsS0FBSyxPQUFPLFlBQVk7QUFDNUMsbUJBQU8sS0FBSztBQUFBLFVBQ2hCO0FBQ0EsY0FBSSxLQUFLLGVBQWUsS0FBSyxLQUFLLGVBQWUsS0FBSyxPQUFPLFlBQVk7QUFDckUsbUJBQU8sS0FBSztBQUFBLFVBQ2hCO0FBQ0EsaUJBQU8sS0FBSyxhQUFhLEtBQUssTUFBTSxFQUMvQixNQUFNLEtBQUssWUFBWSxLQUFLLGFBQWEsS0FBSyxVQUFVLEVBQ3hEO0FBQUEsUUFDVDtBQUFBLFFBQ0EsT0FBTyxhQUFhLE1BQU07QUFDdEIsaUJBQU8sS0FBSyxPQUFPLE1BQU0sVUFBVTtBQUFBLFFBQ3ZDO0FBQUEsUUFDQSxPQUFPLE9BQU8sTUFBTSxNQUFNO0FBQ3RCLGNBQUksS0FBSyxnQkFBZ0IsTUFBTTtBQUMzQixtQkFBTztBQUFBLFVBQ1g7QUFDQSxjQUFJLEtBQUssY0FBYyxJQUFJLEdBQUc7QUFDMUIsbUJBQU8sSUFBSSxLQUFLLElBQUk7QUFBQSxVQUN4QjtBQUNBLGNBQUksS0FBSyxrQkFBa0IsSUFBSSxHQUFHO0FBQzlCLG1CQUFPLElBQUksS0FBSyxLQUFLLFFBQVEsS0FBSyxZQUFZLEtBQUssVUFBVTtBQUFBLFVBQ2pFO0FBQ0EsZ0JBQU0sSUFBSSxVQUFVLHNFQUFzRTtBQUFBLFFBQzlGO0FBQUEsUUFDQSxPQUFPLGVBQWUsTUFBTTtBQUN4QixpQkFBTyxLQUFLLGtCQUFrQixJQUFJLEtBQzNCLEtBQUssY0FBYyxJQUFJO0FBQUEsUUFDbEM7QUFBQSxRQUNBLE9BQU8sa0JBQWtCLE1BQU07QUFDM0IsaUJBQU8sWUFBWSxPQUFPLElBQUksS0FDdEIsUUFBUSxLQUFLLGNBQWMsS0FBSyxNQUFNO0FBQUEsUUFDbEQ7QUFBQSxRQUNBLE9BQU8sUUFBUUMsSUFBRyxHQUFHO0FBQ2pCLGdCQUFNLFFBQVEsdUJBQXNCLGFBQWFBLEVBQUM7QUFDbEQsZ0JBQU0sUUFBUSx1QkFBc0IsYUFBYSxDQUFDO0FBQ2xELGNBQUksTUFBTSxXQUFXLE1BQU0sWUFBWTtBQUNuQyxtQkFBTztBQUFBLFVBQ1g7QUFDQSxtQkFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztBQUNuQyxnQkFBSSxNQUFNLENBQUMsTUFBTSxNQUFNLENBQUMsR0FBRztBQUN2QixxQkFBTztBQUFBLFlBQ1g7QUFBQSxVQUNKO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxPQUFPLFVBQVUsTUFBTTtBQUNuQixjQUFJO0FBQ0osY0FBSSxNQUFNLFFBQVEsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxhQUFhLFdBQVc7QUFDMUQsc0JBQVUsS0FBSyxDQUFDO0FBQUEsVUFDcEIsV0FDUyxNQUFNLFFBQVEsS0FBSyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsYUFBYSxVQUFVO0FBQzVELHNCQUFVLEtBQUssQ0FBQztBQUFBLFVBQ3BCLE9BQ0s7QUFDRCxnQkFBSSxLQUFLLEtBQUssU0FBUyxDQUFDLGFBQWEsVUFBVTtBQUMzQyx3QkFBVSxLQUFLLE1BQU0sR0FBRyxLQUFLLFNBQVMsQ0FBQztBQUFBLFlBQzNDLE9BQ0s7QUFDRCx3QkFBVTtBQUFBLFlBQ2Q7QUFBQSxVQUNKO0FBQ0EsY0FBSUMsUUFBTztBQUNYLHFCQUFXLFVBQVUsU0FBUztBQUMxQixZQUFBQSxTQUFRLE9BQU87QUFBQSxVQUNuQjtBQUNBLGdCQUFNLE1BQU0sSUFBSSxXQUFXQSxLQUFJO0FBQy9CLGNBQUlDLFVBQVM7QUFDYixxQkFBVyxVQUFVLFNBQVM7QUFDMUIsa0JBQU0sT0FBTyxLQUFLLGFBQWEsTUFBTTtBQUNyQyxnQkFBSSxJQUFJLE1BQU1BLE9BQU07QUFDcEIsWUFBQUEsV0FBVSxLQUFLO0FBQUEsVUFDbkI7QUFDQSxjQUFJLEtBQUssS0FBSyxTQUFTLENBQUMsYUFBYSxVQUFVO0FBQzNDLG1CQUFPLEtBQUssT0FBTyxLQUFLLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQztBQUFBLFVBQ2pEO0FBQ0EsaUJBQU8sSUFBSTtBQUFBLFFBQ2Y7QUFBQSxNQUNKO0FBRUEsVUFBTSxjQUFjO0FBQ3BCLFVBQU0sWUFBWTtBQUNsQixVQUFNLGVBQWU7QUFDckIsVUFBTSxrQkFBa0I7QUFDeEIsVUFBTSxnQkFBTixNQUFvQjtBQUFBLFFBQ2hCLE9BQU8sV0FBVyxNQUFNO0FBQ3BCLGdCQUFNLElBQUksU0FBUyxtQkFBbUIsSUFBSSxDQUFDO0FBQzNDLGdCQUFNLFlBQVksSUFBSSxXQUFXLEVBQUUsTUFBTTtBQUN6QyxtQkFBUyxJQUFJLEdBQUcsSUFBSSxFQUFFLFFBQVEsS0FBSztBQUMvQixzQkFBVSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUM7QUFBQSxVQUNqQztBQUNBLGlCQUFPLFVBQVU7QUFBQSxRQUNyQjtBQUFBLFFBQ0EsT0FBTyxTQUFTLFFBQVE7QUFDcEIsZ0JBQU0sTUFBTUgsdUJBQXNCLGFBQWEsTUFBTTtBQUNyRCxjQUFJLGdCQUFnQjtBQUNwQixtQkFBUyxJQUFJLEdBQUcsSUFBSSxJQUFJLFFBQVEsS0FBSztBQUNqQyw2QkFBaUIsT0FBTyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQUEsVUFDL0M7QUFDQSxnQkFBTSxnQkFBZ0IsbUJBQW1CLE9BQU8sYUFBYSxDQUFDO0FBQzlELGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFDQSxVQUFNLGlCQUFOLE1BQXFCO0FBQUEsUUFDakIsT0FBTyxTQUFTLFFBQVEsZUFBZSxPQUFPO0FBQzFDLGdCQUFNLGNBQWNBLHVCQUFzQixjQUFjLE1BQU07QUFDOUQsZ0JBQU0sV0FBVyxJQUFJLFNBQVMsV0FBVztBQUN6QyxjQUFJLE1BQU07QUFDVixtQkFBUyxJQUFJLEdBQUcsSUFBSSxZQUFZLFlBQVksS0FBSyxHQUFHO0FBQ2hELGtCQUFNLE9BQU8sU0FBUyxVQUFVLEdBQUcsWUFBWTtBQUMvQyxtQkFBTyxPQUFPLGFBQWEsSUFBSTtBQUFBLFVBQ25DO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxPQUFPLFdBQVcsTUFBTSxlQUFlLE9BQU87QUFDMUMsZ0JBQU0sTUFBTSxJQUFJLFlBQVksS0FBSyxTQUFTLENBQUM7QUFDM0MsZ0JBQU0sV0FBVyxJQUFJLFNBQVMsR0FBRztBQUNqQyxtQkFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLFFBQVEsS0FBSztBQUNsQyxxQkFBUyxVQUFVLElBQUksR0FBRyxLQUFLLFdBQVcsQ0FBQyxHQUFHLFlBQVk7QUFBQSxVQUM5RDtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFDQSxVQUFNSSxXQUFOLE1BQU0sU0FBUTtBQUFBLFFBQ1YsT0FBTyxNQUFNLE1BQU07QUFDZixpQkFBTyxPQUFPLFNBQVMsZUFDaEIsVUFBVSxLQUFLLElBQUk7QUFBQSxRQUM5QjtBQUFBLFFBQ0EsT0FBTyxTQUFTLE1BQU07QUFDbEIsaUJBQU8sT0FBTyxTQUFTLGVBQ2hCLGFBQWEsS0FBSyxJQUFJO0FBQUEsUUFDakM7QUFBQSxRQUNBLE9BQU8sWUFBWSxNQUFNO0FBQ3JCLGlCQUFPLE9BQU8sU0FBUyxlQUNoQixnQkFBZ0IsS0FBSyxJQUFJO0FBQUEsUUFDcEM7QUFBQSxRQUNBLE9BQU8sU0FBUyxRQUFRLE1BQU0sUUFBUTtBQUNsQyxnQkFBTSxNQUFNSix1QkFBc0IsYUFBYSxNQUFNO0FBQ3JELGtCQUFRLElBQUksWUFBWSxHQUFHO0FBQUEsWUFDdkIsS0FBSztBQUNELHFCQUFPLEtBQUssYUFBYSxHQUFHO0FBQUEsWUFDaEMsS0FBSztBQUNELHFCQUFPLEtBQUssU0FBUyxHQUFHO0FBQUEsWUFDNUIsS0FBSztBQUNELHFCQUFPLEtBQUssTUFBTSxHQUFHO0FBQUEsWUFDekIsS0FBSztBQUNELHFCQUFPLEtBQUssU0FBUyxHQUFHO0FBQUEsWUFDNUIsS0FBSztBQUNELHFCQUFPLEtBQUssWUFBWSxHQUFHO0FBQUEsWUFDL0IsS0FBSztBQUNELHFCQUFPLGVBQWUsU0FBUyxLQUFLLElBQUk7QUFBQSxZQUM1QyxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQ0QscUJBQU8sZUFBZSxTQUFTLEdBQUc7QUFBQSxZQUN0QztBQUNJLG9CQUFNLElBQUksTUFBTSw2QkFBNkIsR0FBRyxHQUFHO0FBQUEsVUFDM0Q7QUFBQSxRQUNKO0FBQUEsUUFDQSxPQUFPLFdBQVcsS0FBSyxNQUFNLFFBQVE7QUFDakMsY0FBSSxDQUFDLEtBQUs7QUFDTixtQkFBTyxJQUFJLFlBQVksQ0FBQztBQUFBLFVBQzVCO0FBQ0Esa0JBQVEsSUFBSSxZQUFZLEdBQUc7QUFBQSxZQUN2QixLQUFLO0FBQ0QscUJBQU8sS0FBSyxlQUFlLEdBQUc7QUFBQSxZQUNsQyxLQUFLO0FBQ0QscUJBQU8sS0FBSyxXQUFXLEdBQUc7QUFBQSxZQUM5QixLQUFLO0FBQ0QscUJBQU8sS0FBSyxRQUFRLEdBQUc7QUFBQSxZQUMzQixLQUFLO0FBQ0QscUJBQU8sS0FBSyxXQUFXLEdBQUc7QUFBQSxZQUM5QixLQUFLO0FBQ0QscUJBQU8sS0FBSyxjQUFjLEdBQUc7QUFBQSxZQUNqQyxLQUFLO0FBQ0QscUJBQU8sZUFBZSxXQUFXLEtBQUssSUFBSTtBQUFBLFlBQzlDLEtBQUs7QUFBQSxZQUNMLEtBQUs7QUFDRCxxQkFBTyxlQUFlLFdBQVcsR0FBRztBQUFBLFlBQ3hDO0FBQ0ksb0JBQU0sSUFBSSxNQUFNLDZCQUE2QixHQUFHLEdBQUc7QUFBQSxVQUMzRDtBQUFBLFFBQ0o7QUFBQSxRQUNBLE9BQU8sU0FBUyxRQUFRO0FBQ3BCLGdCQUFNLE1BQU1BLHVCQUFzQixhQUFhLE1BQU07QUFDckQsY0FBSSxPQUFPLFNBQVMsYUFBYTtBQUM3QixrQkFBTSxTQUFTLEtBQUssU0FBUyxLQUFLLFFBQVE7QUFDMUMsbUJBQU8sS0FBSyxNQUFNO0FBQUEsVUFDdEIsT0FDSztBQUNELG1CQUFPLE9BQU8sS0FBSyxHQUFHLEVBQUUsU0FBUyxRQUFRO0FBQUEsVUFDN0M7QUFBQSxRQUNKO0FBQUEsUUFDQSxPQUFPLFdBQVcsUUFBUTtBQUN0QixnQkFBTSxZQUFZLEtBQUssYUFBYSxNQUFNO0FBQzFDLGNBQUksQ0FBQyxXQUFXO0FBQ1osbUJBQU8sSUFBSSxZQUFZLENBQUM7QUFBQSxVQUM1QjtBQUNBLGNBQUksQ0FBQyxTQUFRLFNBQVMsU0FBUyxHQUFHO0FBQzlCLGtCQUFNLElBQUksVUFBVSw2Q0FBNkM7QUFBQSxVQUNyRTtBQUNBLGNBQUksT0FBTyxTQUFTLGFBQWE7QUFDN0IsbUJBQU8sS0FBSyxXQUFXLEtBQUssU0FBUyxDQUFDO0FBQUEsVUFDMUMsT0FDSztBQUNELG1CQUFPLElBQUksV0FBVyxPQUFPLEtBQUssV0FBVyxRQUFRLENBQUMsRUFBRTtBQUFBLFVBQzVEO0FBQUEsUUFDSjtBQUFBLFFBQ0EsT0FBTyxjQUFjLFdBQVc7QUFDNUIsZ0JBQU0sWUFBWSxLQUFLLGFBQWEsU0FBUztBQUM3QyxjQUFJLENBQUMsV0FBVztBQUNaLG1CQUFPLElBQUksWUFBWSxDQUFDO0FBQUEsVUFDNUI7QUFDQSxjQUFJLENBQUMsU0FBUSxZQUFZLFNBQVMsR0FBRztBQUNqQyxrQkFBTSxJQUFJLFVBQVUsK0NBQStDO0FBQUEsVUFDdkU7QUFDQSxpQkFBTyxLQUFLLFdBQVcsS0FBSyxjQUFjLFVBQVUsUUFBUSxPQUFPLEdBQUcsRUFBRSxRQUFRLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFBQSxRQUNoRztBQUFBLFFBQ0EsT0FBTyxZQUFZLE1BQU07QUFDckIsaUJBQU8sS0FBSyxTQUFTLElBQUksRUFBRSxRQUFRLE9BQU8sR0FBRyxFQUFFLFFBQVEsT0FBTyxHQUFHLEVBQUUsUUFBUSxPQUFPLEVBQUU7QUFBQSxRQUN4RjtBQUFBLFFBQ0EsT0FBTyxlQUFlLE1BQU0sV0FBVyxTQUFRLHVCQUF1QjtBQUNsRSxrQkFBUSxVQUFVO0FBQUEsWUFDZCxLQUFLO0FBQ0QscUJBQU8sS0FBSyxXQUFXLElBQUk7QUFBQSxZQUMvQixLQUFLO0FBQ0QscUJBQU8sY0FBYyxXQUFXLElBQUk7QUFBQSxZQUN4QyxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQ0QscUJBQU8sZUFBZSxXQUFXLElBQUk7QUFBQSxZQUN6QyxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQ0QscUJBQU8sZUFBZSxXQUFXLE1BQU0sSUFBSTtBQUFBLFlBQy9DO0FBQ0ksb0JBQU0sSUFBSSxNQUFNLDZCQUE2QixRQUFRLEdBQUc7QUFBQSxVQUNoRTtBQUFBLFFBQ0o7QUFBQSxRQUNBLE9BQU8sYUFBYSxRQUFRLFdBQVcsU0FBUSx1QkFBdUI7QUFDbEUsa0JBQVEsVUFBVTtBQUFBLFlBQ2QsS0FBSztBQUNELHFCQUFPLEtBQUssU0FBUyxNQUFNO0FBQUEsWUFDL0IsS0FBSztBQUNELHFCQUFPLGNBQWMsU0FBUyxNQUFNO0FBQUEsWUFDeEMsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUNELHFCQUFPLGVBQWUsU0FBUyxNQUFNO0FBQUEsWUFDekMsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUNELHFCQUFPLGVBQWUsU0FBUyxRQUFRLElBQUk7QUFBQSxZQUMvQztBQUNJLG9CQUFNLElBQUksTUFBTSw2QkFBNkIsUUFBUSxHQUFHO0FBQUEsVUFDaEU7QUFBQSxRQUNKO0FBQUEsUUFDQSxPQUFPLFdBQVcsTUFBTTtBQUNwQixnQkFBTSxlQUFlLEtBQUs7QUFDMUIsZ0JBQU0sYUFBYSxJQUFJLFdBQVcsWUFBWTtBQUM5QyxtQkFBUyxJQUFJLEdBQUcsSUFBSSxjQUFjLEtBQUs7QUFDbkMsdUJBQVcsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDO0FBQUEsVUFDckM7QUFDQSxpQkFBTyxXQUFXO0FBQUEsUUFDdEI7QUFBQSxRQUNBLE9BQU8sU0FBUyxRQUFRO0FBQ3BCLGdCQUFNLE1BQU1BLHVCQUFzQixhQUFhLE1BQU07QUFDckQsY0FBSSxNQUFNO0FBQ1YsbUJBQVMsSUFBSSxHQUFHLElBQUksSUFBSSxRQUFRLEtBQUs7QUFDakMsbUJBQU8sT0FBTyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQUEsVUFDckM7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLE9BQU8sTUFBTSxRQUFRO0FBQ2pCLGdCQUFNLE1BQU1BLHVCQUFzQixhQUFhLE1BQU07QUFDckQsY0FBSSxTQUFTO0FBQ2IsZ0JBQU0sTUFBTSxJQUFJO0FBQ2hCLG1CQUFTLElBQUksR0FBRyxJQUFJLEtBQUssS0FBSztBQUMxQixrQkFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixnQkFBSSxPQUFPLElBQUk7QUFDWCx3QkFBVTtBQUFBLFlBQ2Q7QUFDQSxzQkFBVSxLQUFLLFNBQVMsRUFBRTtBQUFBLFVBQzlCO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxPQUFPLFFBQVEsV0FBVztBQUN0QixjQUFJLFlBQVksS0FBSyxhQUFhLFNBQVM7QUFDM0MsY0FBSSxDQUFDLFdBQVc7QUFDWixtQkFBTyxJQUFJLFlBQVksQ0FBQztBQUFBLFVBQzVCO0FBQ0EsY0FBSSxDQUFDLFNBQVEsTUFBTSxTQUFTLEdBQUc7QUFDM0Isa0JBQU0sSUFBSSxVQUFVLHlDQUF5QztBQUFBLFVBQ2pFO0FBQ0EsY0FBSSxVQUFVLFNBQVMsR0FBRztBQUN0Qix3QkFBWSxJQUFJLFNBQVM7QUFBQSxVQUM3QjtBQUNBLGdCQUFNLE1BQU0sSUFBSSxXQUFXLFVBQVUsU0FBUyxDQUFDO0FBQy9DLG1CQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxJQUFJLElBQUksR0FBRztBQUM3QyxrQkFBTSxJQUFJLFVBQVUsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNsQyxnQkFBSSxJQUFJLENBQUMsSUFBSSxTQUFTLEdBQUcsRUFBRTtBQUFBLFVBQy9CO0FBQ0EsaUJBQU8sSUFBSTtBQUFBLFFBQ2Y7QUFBQSxRQUNBLE9BQU8sY0FBYyxRQUFRLGVBQWUsT0FBTztBQUMvQyxpQkFBTyxlQUFlLFNBQVMsUUFBUSxZQUFZO0FBQUEsUUFDdkQ7QUFBQSxRQUNBLE9BQU8sZ0JBQWdCLE1BQU0sZUFBZSxPQUFPO0FBQy9DLGlCQUFPLGVBQWUsV0FBVyxNQUFNLFlBQVk7QUFBQSxRQUN2RDtBQUFBLFFBQ0EsT0FBTyxjQUFjLFFBQVE7QUFDekIsZ0JBQU0sV0FBVyxJQUFLLE9BQU8sU0FBUztBQUN0QyxjQUFJLFdBQVcsR0FBRztBQUNkLHFCQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsS0FBSztBQUMvQix3QkFBVTtBQUFBLFlBQ2Q7QUFBQSxVQUNKO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxPQUFPLGFBQWEsTUFBTTtBQUN0QixrQkFBUSxTQUFTLFFBQVEsU0FBUyxTQUFTLFNBQVMsS0FBSyxRQUFRLGNBQWMsRUFBRSxNQUFNO0FBQUEsUUFDM0Y7QUFBQSxNQUNKO0FBQ0EsTUFBQUksU0FBUSx3QkFBd0I7QUFFaEMsZUFBUyxPQUFPLFdBQVcsU0FBUztBQUNoQyxjQUFNLE1BQU0sVUFBVSxDQUFDO0FBQ3ZCLGlCQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQ3ZDLGdCQUFNLE1BQU0sVUFBVSxDQUFDO0FBQ3ZCLHFCQUFXLFFBQVEsS0FBSztBQUNwQixnQkFBSSxJQUFJLElBQUksSUFBSSxJQUFJO0FBQUEsVUFDeEI7QUFBQSxRQUNKO0FBQ0EsZUFBTztBQUFBLE1BQ1g7QUFDQSxlQUFTQyxZQUFXLEtBQUs7QUFDckIsY0FBTSxrQkFBa0IsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRSxPQUFPLENBQUMsTUFBTSxRQUFRLE9BQU8sR0FBRztBQUMzRixjQUFNLE1BQU0sSUFBSSxXQUFXLGVBQWU7QUFDMUMsWUFBSSxhQUFhO0FBQ2pCLFlBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxXQUFXLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxRQUFRO0FBQ3JELHFCQUFXLFNBQVMsS0FBSztBQUNyQixnQkFBSSxZQUFZLElBQUk7QUFBQSxVQUN4QjtBQUFBLFFBQ0osQ0FBQztBQUNELGVBQU8sSUFBSTtBQUFBLE1BQ2Y7QUFDQSxlQUFTLFFBQVEsUUFBUSxRQUFRO0FBQzdCLFlBQUksRUFBRSxVQUFVLFNBQVM7QUFDckIsaUJBQU87QUFBQSxRQUNYO0FBQ0EsWUFBSSxPQUFPLGVBQWUsT0FBTyxZQUFZO0FBQ3pDLGlCQUFPO0FBQUEsUUFDWDtBQUNBLGNBQU0sS0FBSyxJQUFJLFdBQVcsTUFBTTtBQUNoQyxjQUFNLEtBQUssSUFBSSxXQUFXLE1BQU07QUFDaEMsaUJBQVMsSUFBSSxHQUFHLElBQUksT0FBTyxZQUFZLEtBQUs7QUFDeEMsY0FBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRztBQUNqQixtQkFBTztBQUFBLFVBQ1g7QUFBQSxRQUNKO0FBQ0EsZUFBTztBQUFBLE1BQ1g7QUFFQSxjQUFRLHdCQUF3Qkw7QUFDaEMsY0FBUSxVQUFVSTtBQUNsQixjQUFRLFNBQVM7QUFDakIsY0FBUSxVQUFVQztBQUNsQixjQUFRLFVBQVU7QUFBQTtBQUFBOzs7QUMzVmxCLFdBQVMsYUFBYSxhQUFhLFdBQVc7QUFDMUMsUUFBSSxTQUFTO0FBQ2IsUUFBSSxZQUFZLFdBQVcsR0FBRztBQUMxQixhQUFPLFlBQVksQ0FBQztBQUFBLElBQ3hCO0FBQ0EsYUFBUyxJQUFLLFlBQVksU0FBUyxHQUFJLEtBQUssR0FBRyxLQUFLO0FBQ2hELGdCQUFVLFlBQWEsWUFBWSxTQUFTLElBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxHQUFHLFlBQVksQ0FBQztBQUFBLElBQ25GO0FBQ0EsV0FBTztBQUFBLEVBQ1g7QUFDQSxXQUFTLFdBQVcsT0FBTyxNQUFNLFdBQVksSUFBSztBQUM5QyxVQUFNLG1CQUFtQjtBQUN6QixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLFNBQVM7QUFDYixRQUFJLFVBQVUsS0FBSyxJQUFJLEdBQUcsSUFBSTtBQUM5QixhQUFTLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSztBQUN4QixVQUFJLFFBQVEsU0FBUztBQUNqQixZQUFJO0FBQ0osWUFBSSxtQkFBbUIsR0FBRztBQUN0QixtQkFBUyxJQUFJLFlBQVksQ0FBQztBQUMxQixtQkFBUztBQUFBLFFBQ2IsT0FDSztBQUNELGNBQUksbUJBQW1CLEdBQUc7QUFDdEIsbUJBQVEsSUFBSSxZQUFZLENBQUM7QUFBQSxVQUM3QjtBQUNBLG1CQUFTLElBQUksWUFBWSxnQkFBZ0I7QUFDekMsbUJBQVM7QUFBQSxRQUNiO0FBQ0EsY0FBTSxVQUFVLElBQUksV0FBVyxNQUFNO0FBQ3JDLGlCQUFTLElBQUssSUFBSSxHQUFJLEtBQUssR0FBRyxLQUFLO0FBQy9CLGdCQUFNLFFBQVEsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJO0FBQ2xDLGtCQUFRLFNBQVMsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLGdCQUFnQixLQUFLO0FBQzFELDJCQUFrQixRQUFRLFNBQVMsSUFBSSxDQUFDLElBQUs7QUFBQSxRQUNqRDtBQUNBLGVBQU87QUFBQSxNQUNYO0FBQ0EsaUJBQVcsS0FBSyxJQUFJLEdBQUcsSUFBSTtBQUFBLElBQy9CO0FBQ0EsV0FBTyxJQUFJLFlBQVksQ0FBQztBQUFBLEVBQzVCO0FBZUEsV0FBUyxrQkFBa0IsT0FBTztBQUM5QixRQUFJLGVBQWU7QUFDbkIsUUFBSSxhQUFhO0FBQ2pCLGVBQVcsUUFBUSxPQUFPO0FBQ3RCLHNCQUFnQixLQUFLO0FBQUEsSUFDekI7QUFDQSxVQUFNLFNBQVMsSUFBSSxZQUFZLFlBQVk7QUFDM0MsVUFBTSxVQUFVLElBQUksV0FBVyxNQUFNO0FBQ3JDLGVBQVcsUUFBUSxPQUFPO0FBQ3RCLGNBQVEsSUFBSSxNQUFNLFVBQVU7QUFDNUIsb0JBQWMsS0FBSztBQUFBLElBQ3ZCO0FBQ0EsV0FBTztBQUFBLEVBQ1g7QUFDQSxXQUFTLGVBQWU7QUFDcEIsVUFBTSxNQUFNLElBQUksV0FBVyxLQUFLLFFBQVE7QUFDeEMsUUFBSSxLQUFLLFNBQVMsY0FBYyxHQUFHO0FBQy9CLFlBQU0sYUFBYyxJQUFJLENBQUMsTUFBTSxPQUFVLElBQUksQ0FBQyxJQUFJO0FBQ2xELFlBQU0sYUFBYyxJQUFJLENBQUMsTUFBTSxNQUFXLElBQUksQ0FBQyxJQUFJLFNBQVU7QUFDN0QsVUFBSSxjQUFjLFlBQVk7QUFDMUIsYUFBSyxTQUFTLEtBQUssd0JBQXdCO0FBQUEsTUFDL0M7QUFBQSxJQUNKO0FBQ0EsVUFBTSxlQUFlLElBQUksWUFBWSxLQUFLLFNBQVMsVUFBVTtBQUM3RCxVQUFNLGFBQWEsSUFBSSxXQUFXLFlBQVk7QUFDOUMsYUFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLFNBQVMsWUFBWSxLQUFLO0FBQy9DLGlCQUFXLENBQUMsSUFBSTtBQUFBLElBQ3BCO0FBQ0EsZUFBVyxDQUFDLElBQUssSUFBSSxDQUFDLElBQUk7QUFDMUIsVUFBTSxTQUFTLGFBQWEsWUFBWSxDQUFDO0FBQ3pDLFVBQU0saUJBQWlCLElBQUksWUFBWSxLQUFLLFNBQVMsVUFBVTtBQUMvRCxVQUFNLGVBQWUsSUFBSSxXQUFXLGNBQWM7QUFDbEQsYUFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLFNBQVMsWUFBWSxLQUFLO0FBQy9DLG1CQUFhLENBQUMsSUFBSSxJQUFJLENBQUM7QUFBQSxJQUMzQjtBQUNBLGlCQUFhLENBQUMsS0FBSztBQUNuQixVQUFNLFdBQVcsYUFBYSxjQUFjLENBQUM7QUFDN0MsV0FBUSxXQUFXO0FBQUEsRUFDdkI7QUFDQSxXQUFTLGFBQWEsT0FBTztBQUN6QixVQUFNLFdBQVksUUFBUSxJQUFNLFFBQVMsS0FBTztBQUNoRCxRQUFJLFNBQVM7QUFDYixhQUFTLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSztBQUN4QixVQUFJLFlBQVksUUFBUTtBQUNwQixZQUFJLFFBQVEsR0FBRztBQUNYLGdCQUFNLFdBQVcsU0FBUztBQUMxQixnQkFBTUMsVUFBUyxXQUFXLFVBQVUsR0FBRyxDQUFDO0FBQ3hDLGdCQUFNQyxXQUFVLElBQUksV0FBV0QsT0FBTTtBQUNyQyxVQUFBQyxTQUFRLENBQUMsS0FBSztBQUNkLGlCQUFPRDtBQUFBLFFBQ1g7QUFDQSxZQUFJLFNBQVMsV0FBVyxVQUFVLEdBQUcsQ0FBQztBQUN0QyxZQUFJLFVBQVUsSUFBSSxXQUFXLE1BQU07QUFDbkMsWUFBSSxRQUFRLENBQUMsSUFBSSxLQUFNO0FBQ25CLGdCQUFNLFVBQVUsT0FBTyxNQUFNLENBQUM7QUFDOUIsZ0JBQU0sV0FBVyxJQUFJLFdBQVcsT0FBTztBQUN2QyxtQkFBUyxJQUFJLFlBQVksT0FBTyxhQUFhLENBQUM7QUFDOUMsb0JBQVUsSUFBSSxXQUFXLE1BQU07QUFDL0IsbUJBQVMsSUFBSSxHQUFHLElBQUksUUFBUSxZQUFZLEtBQUs7QUFDekMsb0JBQVEsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDO0FBQUEsVUFDL0I7QUFDQSxrQkFBUSxDQUFDLElBQUk7QUFBQSxRQUNqQjtBQUNBLGVBQU87QUFBQSxNQUNYO0FBQ0EsZ0JBQVUsS0FBSyxJQUFJLEdBQUcsQ0FBQztBQUFBLElBQzNCO0FBQ0EsV0FBUSxJQUFJLFlBQVksQ0FBQztBQUFBLEVBQzdCO0FBQ0EsV0FBUyxjQUFjLGNBQWMsY0FBYztBQUMvQyxRQUFJLGFBQWEsZUFBZSxhQUFhLFlBQVk7QUFDckQsYUFBTztBQUFBLElBQ1g7QUFDQSxVQUFNLFFBQVEsSUFBSSxXQUFXLFlBQVk7QUFDekMsVUFBTSxRQUFRLElBQUksV0FBVyxZQUFZO0FBQ3pDLGFBQVMsSUFBSSxHQUFHLElBQUksTUFBTSxRQUFRLEtBQUs7QUFDbkMsVUFBSSxNQUFNLENBQUMsTUFBTSxNQUFNLENBQUMsR0FBRztBQUN2QixlQUFPO0FBQUEsTUFDWDtBQUFBLElBQ0o7QUFDQSxXQUFPO0FBQUEsRUFDWDtBQUNBLFdBQVMsVUFBVSxhQUFhLFlBQVk7QUFDeEMsVUFBTSxNQUFNLFlBQVksU0FBUyxFQUFFO0FBQ25DLFFBQUksYUFBYSxJQUFJLFFBQVE7QUFDekIsYUFBTztBQUFBLElBQ1g7QUFDQSxVQUFNLE1BQU0sYUFBYSxJQUFJO0FBQzdCLFVBQU0sVUFBVSxJQUFJLE1BQU0sR0FBRztBQUM3QixhQUFTLElBQUksR0FBRyxJQUFJLEtBQUssS0FBSztBQUMxQixjQUFRLENBQUMsSUFBSTtBQUFBLElBQ2pCO0FBQ0EsVUFBTSxnQkFBZ0IsUUFBUSxLQUFLLEVBQUU7QUFDckMsV0FBTyxjQUFjLE9BQU8sR0FBRztBQUFBLEVBQ25DO0FBeE1BLE1BcVVNO0FBclVOO0FBQUE7QUFxVUEsTUFBTSxPQUFPLEtBQUssSUFBSSxDQUFDO0FBQUE7QUFBQTs7O0FDclV2QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUFBRTtBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUFBQUM7QUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFxQ0EsV0FBUyxlQUFlO0FBQ3BCLFFBQUksT0FBTyxXQUFXLGFBQWE7QUFDL0IsWUFBTSxJQUFJLE1BQU0sbUVBQW1FO0FBQUEsSUFDdkY7QUFBQSxFQUNKO0FBQ0EsV0FBUyxPQUFPLFNBQVM7QUFDckIsUUFBSSxlQUFlO0FBQ25CLFFBQUksYUFBYTtBQUNqQixhQUFTLElBQUksR0FBRyxJQUFJLFFBQVEsUUFBUSxLQUFLO0FBQ3JDLFlBQU0sU0FBUyxRQUFRLENBQUM7QUFDeEIsc0JBQWdCLE9BQU87QUFBQSxJQUMzQjtBQUNBLFVBQU0sVUFBVSxJQUFJLFdBQVcsWUFBWTtBQUMzQyxhQUFTLElBQUksR0FBRyxJQUFJLFFBQVEsUUFBUSxLQUFLO0FBQ3JDLFlBQU0sU0FBUyxRQUFRLENBQUM7QUFDeEIsY0FBUSxJQUFJLElBQUksV0FBVyxNQUFNLEdBQUcsVUFBVTtBQUM5QyxvQkFBYyxPQUFPO0FBQUEsSUFDekI7QUFDQSxXQUFPLFFBQVE7QUFBQSxFQUNuQjtBQUNBLFdBQVMsa0JBQWtCLFdBQVcsYUFBYSxhQUFhLGFBQWE7QUFDekUsUUFBSSxFQUFFLHVCQUF1QixhQUFhO0FBQ3RDLGdCQUFVLFFBQVE7QUFDbEIsYUFBTztBQUFBLElBQ1g7QUFDQSxRQUFJLENBQUMsWUFBWSxZQUFZO0FBQ3pCLGdCQUFVLFFBQVE7QUFDbEIsYUFBTztBQUFBLElBQ1g7QUFDQSxRQUFJLGNBQWMsR0FBRztBQUNqQixnQkFBVSxRQUFRO0FBQ2xCLGFBQU87QUFBQSxJQUNYO0FBQ0EsUUFBSSxjQUFjLEdBQUc7QUFDakIsZ0JBQVUsUUFBUTtBQUNsQixhQUFPO0FBQUEsSUFDWDtBQUNBLFFBQUssWUFBWSxhQUFhLGNBQWMsY0FBZSxHQUFHO0FBQzFELGdCQUFVLFFBQVE7QUFDbEIsYUFBTztBQUFBLElBQ1g7QUFDQSxXQUFPO0FBQUEsRUFDWDtBQWlDQSxXQUFTLFNBQVMsV0FBVztBQUN6QixRQUFJQztBQUNKLFdBQU9BLE1BQUssTUFBTSxhQUFhLFVBQVU7QUFBQSxNQUNqQyxlQUFlLE1BQU07QUFDakIsWUFBSUE7QUFDSixjQUFNLEdBQUcsSUFBSTtBQUNiLGNBQU0sU0FBUyxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQzNCLGFBQUssYUFBYUEsTUFBSyxPQUFPLGVBQWUsUUFBUUEsUUFBTyxTQUFTQSxNQUFLO0FBQzFFLGFBQUssZUFBZSxPQUFPLFdBQXFCLGdDQUFzQixhQUFhLE9BQU8sUUFBUSxJQUFJO0FBQUEsTUFDMUc7QUFBQSxNQUNBLElBQUksV0FBVztBQUNYLGVBQU8sS0FBSyxhQUFhLE1BQU0sRUFBRTtBQUFBLE1BQ3JDO0FBQUEsTUFDQSxJQUFJLFNBQVMsT0FBTztBQUNoQixhQUFLLGVBQWUsSUFBSSxXQUFXLEtBQUs7QUFBQSxNQUM1QztBQUFBLE1BQ0EsUUFBUSxhQUFhLGFBQWEsYUFBYTtBQUMzQyxjQUFNLE9BQU8sdUJBQXVCLGNBQWMsSUFBSSxXQUFXLFdBQVcsSUFBSTtBQUNoRixZQUFJLENBQUMsa0JBQWtCLE1BQU0sTUFBTSxhQUFhLFdBQVcsR0FBRztBQUMxRCxpQkFBTztBQUFBLFFBQ1g7QUFDQSxjQUFNLFlBQVksY0FBYztBQUNoQyxhQUFLLGVBQWUsS0FBSyxTQUFTLGFBQWEsU0FBUztBQUN4RCxZQUFJLENBQUMsS0FBSyxhQUFhLFFBQVE7QUFDM0IsZUFBSyxTQUFTLEtBQUssb0JBQW9CO0FBQ3ZDLGlCQUFPO0FBQUEsUUFDWDtBQUNBLGFBQUssY0FBYztBQUNuQixlQUFPO0FBQUEsTUFDWDtBQUFBLE1BQ0EsTUFBTSxXQUFXLE9BQU87QUFDcEIsWUFBSSxDQUFDLEtBQUssV0FBVztBQUNqQixlQUFLLFFBQVE7QUFDYixpQkFBTztBQUFBLFFBQ1g7QUFDQSxZQUFJLFVBQVU7QUFDVixpQkFBTyxJQUFJLFlBQVksS0FBSyxhQUFhLFVBQVU7QUFBQSxRQUN2RDtBQUNBLGVBQVEsS0FBSyxhQUFhLGVBQWUsS0FBSyxhQUFhLE9BQU8sYUFDNUQsS0FBSyxhQUFhLFNBQ2xCLEtBQUssYUFBYSxNQUFNLEVBQUU7QUFBQSxNQUNwQztBQUFBLE1BQ0EsU0FBUztBQUNMLGVBQU87QUFBQSxVQUNILEdBQUcsTUFBTSxPQUFPO0FBQUEsVUFDaEIsV0FBVyxLQUFLO0FBQUEsVUFDaEIsVUFBb0Isa0JBQVEsTUFBTSxLQUFLLFlBQVk7QUFBQSxRQUN2RDtBQUFBLE1BQ0o7QUFBQSxJQUNKLEdBQ0FBLElBQUcsT0FBTyxZQUNWQTtBQUFBLEVBQ1I7QUE4WUEsV0FBUyxzQkFBc0IsV0FBVztBQUN0QyxRQUFJLHFCQUFxQixVQUFVLGFBQWE7QUFDNUMsaUJBQVcsU0FBUyxVQUFVLFdBQVcsT0FBTztBQUM1QyxZQUFJLHNCQUFzQixLQUFLLEdBQUc7QUFDOUIsb0JBQVUsU0FBUyxtQkFBbUI7QUFBQSxRQUMxQztBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQ0EsV0FBTyxDQUFDLENBQUMsVUFBVSxTQUFTO0FBQUEsRUFDaEM7QUF5REEsV0FBUyxnQkFBZ0IsYUFBYSxTQUFTO0FBQzNDLFFBQUksdUJBQXVCLFNBQVM7QUFDaEMsYUFBTztBQUFBLElBQ1g7QUFDQSxVQUFNLFlBQVksSUFBSSxRQUFRO0FBQzlCLGNBQVUsVUFBVSxZQUFZO0FBQ2hDLGNBQVUsV0FBVyxZQUFZO0FBQ2pDLGNBQVUsV0FBVyxZQUFZO0FBQ2pDLGNBQVUsd0JBQXdCLFlBQVk7QUFDOUMsV0FBTztBQUFBLEVBQ1g7QUFDQSxXQUFTLGFBQWEsYUFBYSxjQUFjLEdBQUcsY0FBYyxZQUFZLFFBQVE7QUFDbEYsVUFBTSxpQkFBaUI7QUFDdkIsUUFBSSxlQUFlLElBQUksVUFBVSxDQUFDLEdBQUcsVUFBVTtBQUMvQyxVQUFNLFlBQVksSUFBSSxlQUFlO0FBQ3JDLFFBQUksQ0FBQyxrQkFBa0IsV0FBVyxhQUFhLGFBQWEsV0FBVyxHQUFHO0FBQ3RFLG1CQUFhLFFBQVEsVUFBVTtBQUMvQixhQUFPO0FBQUEsUUFDSCxRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsTUFDWjtBQUFBLElBQ0o7QUFDQSxVQUFNLFlBQVksWUFBWSxTQUFTLGFBQWEsY0FBYyxXQUFXO0FBQzdFLFFBQUksQ0FBQyxVQUFVLFFBQVE7QUFDbkIsbUJBQWEsUUFBUTtBQUNyQixhQUFPO0FBQUEsUUFDSCxRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsTUFDWjtBQUFBLElBQ0o7QUFDQSxRQUFJLGVBQWUsYUFBYSxRQUFRLFFBQVEsYUFBYSxhQUFhLFdBQVc7QUFDckYsUUFBSSxhQUFhLFFBQVEsU0FBUyxRQUFRO0FBQ3RDLG1CQUFhLFNBQVMsT0FBTyxhQUFhLFFBQVEsUUFBUTtBQUFBLElBQzlEO0FBQ0EsUUFBSSxpQkFBaUIsSUFBSTtBQUNyQixtQkFBYSxRQUFRLGFBQWEsUUFBUTtBQUMxQyxhQUFPO0FBQUEsUUFDSCxRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsTUFDWjtBQUFBLElBQ0o7QUFDQSxrQkFBYztBQUNkLG1CQUFlLGFBQWEsUUFBUTtBQUNwQyxtQkFBZSxhQUFhLFNBQVMsUUFBUSxhQUFhLGFBQWEsV0FBVztBQUNsRixRQUFJLGFBQWEsU0FBUyxTQUFTLFFBQVE7QUFDdkMsbUJBQWEsU0FBUyxPQUFPLGFBQWEsU0FBUyxRQUFRO0FBQUEsSUFDL0Q7QUFDQSxRQUFJLGlCQUFpQixJQUFJO0FBQ3JCLG1CQUFhLFFBQVEsYUFBYSxTQUFTO0FBQzNDLGFBQU87QUFBQSxRQUNILFFBQVE7QUFBQSxRQUNSLFFBQVE7QUFBQSxNQUNaO0FBQUEsSUFDSjtBQUNBLGtCQUFjO0FBQ2QsbUJBQWUsYUFBYSxTQUFTO0FBQ3JDLFFBQUksQ0FBQyxhQUFhLFFBQVEsaUJBQ3RCLGFBQWEsU0FBUyxrQkFBa0I7QUFDeEMsbUJBQWEsUUFBUTtBQUNyQixhQUFPO0FBQUEsUUFDSCxRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsTUFDWjtBQUFBLElBQ0o7QUFDQSxRQUFJLGNBQWM7QUFDbEIsWUFBUSxhQUFhLFFBQVEsVUFBVTtBQUFBLE1BQ25DLEtBQUs7QUFDRCxZQUFLLGFBQWEsUUFBUSxhQUFhLE1BQ2xDLGFBQWEsUUFBUSxjQUFjLE9BQVE7QUFDNUMsdUJBQWEsUUFBUTtBQUNyQixpQkFBTztBQUFBLFlBQ0gsUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLFVBQ1o7QUFBQSxRQUNKO0FBQ0EsZ0JBQVEsYUFBYSxRQUFRLFdBQVc7QUFBQSxVQUNwQyxLQUFLO0FBQ0QsZ0JBQUssYUFBYSxRQUFRLGlCQUNyQixhQUFhLFNBQVMsU0FBUyxHQUFJO0FBQ3BDLDJCQUFhLFFBQVE7QUFDckIscUJBQU87QUFBQSxnQkFDSCxRQUFRO0FBQUEsZ0JBQ1IsUUFBUTtBQUFBLGNBQ1o7QUFBQSxZQUNKO0FBQ0EsMEJBQWMsVUFBVTtBQUN4QjtBQUFBLFVBQ0osS0FBSztBQUNELDBCQUFjLFVBQVU7QUFDeEI7QUFBQSxVQUNKLEtBQUs7QUFDRCwwQkFBYyxVQUFVO0FBQ3hCO0FBQUEsVUFDSixLQUFLO0FBQ0QsMEJBQWMsVUFBVTtBQUN4QjtBQUFBLFVBQ0osS0FBSztBQUNELDBCQUFjLFVBQVU7QUFDeEI7QUFBQSxVQUNKLEtBQUs7QUFDRCwwQkFBYyxVQUFVO0FBQ3hCO0FBQUEsVUFDSixLQUFLO0FBQ0QsMEJBQWMsVUFBVTtBQUN4QjtBQUFBLFVBQ0osS0FBSztBQUNELDBCQUFjLFVBQVU7QUFDeEI7QUFBQSxVQUNKLEtBQUs7QUFDRCwwQkFBYyxVQUFVO0FBQ3hCO0FBQUEsVUFDSixLQUFLO0FBQ0QsMEJBQWMsVUFBVTtBQUN4QjtBQUFBLFVBQ0osS0FBSztBQUNELDBCQUFjLFVBQVU7QUFDeEI7QUFBQSxVQUNKLEtBQUs7QUFDRCx5QkFBYSxRQUFRO0FBQ3JCLG1CQUFPO0FBQUEsY0FDSCxRQUFRO0FBQUEsY0FDUixRQUFRO0FBQUEsWUFDWjtBQUFBLFVBQ0osS0FBSztBQUNELDBCQUFjLFVBQVU7QUFDeEI7QUFBQSxVQUNKLEtBQUs7QUFDRCwwQkFBYyxVQUFVO0FBQ3hCO0FBQUEsVUFDSixLQUFLO0FBQ0QsMEJBQWMsVUFBVTtBQUN4QjtBQUFBLFVBQ0osS0FBSztBQUNELDBCQUFjLFVBQVU7QUFDeEI7QUFBQSxVQUNKLEtBQUs7QUFDRCwwQkFBYyxVQUFVO0FBQ3hCO0FBQUEsVUFDSixLQUFLO0FBQ0QsMEJBQWMsVUFBVTtBQUN4QjtBQUFBLFVBQ0osS0FBSztBQUNELDBCQUFjLFVBQVU7QUFDeEI7QUFBQSxVQUNKLEtBQUs7QUFDRCwwQkFBYyxVQUFVO0FBQ3hCO0FBQUEsVUFDSixLQUFLO0FBQ0QsMEJBQWMsVUFBVTtBQUN4QjtBQUFBLFVBQ0osS0FBSztBQUNELDBCQUFjLFVBQVU7QUFDeEI7QUFBQSxVQUNKLEtBQUs7QUFDRCwwQkFBYyxVQUFVO0FBQ3hCO0FBQUEsVUFDSixLQUFLO0FBQ0QsMEJBQWMsVUFBVTtBQUN4QjtBQUFBLFVBQ0osS0FBSztBQUNELDBCQUFjLFVBQVU7QUFDeEI7QUFBQSxVQUNKLEtBQUs7QUFDRCwwQkFBYyxVQUFVO0FBQ3hCO0FBQUEsVUFDSixLQUFLO0FBQ0QsMEJBQWMsVUFBVTtBQUN4QjtBQUFBLFVBQ0osS0FBSztBQUNELDBCQUFjLFVBQVU7QUFDeEI7QUFBQSxVQUNKLEtBQUs7QUFDRCwwQkFBYyxVQUFVO0FBQ3hCO0FBQUEsVUFDSixLQUFLO0FBQ0QsMEJBQWMsVUFBVTtBQUN4QjtBQUFBLFVBQ0osS0FBSztBQUNELDBCQUFjLFVBQVU7QUFDeEI7QUFBQSxVQUNKLFNBQVM7QUFDTCxrQkFBTSxZQUFZLGFBQWEsUUFBUSxnQkFDakMsSUFBSSxVQUFVLFlBQVksSUFDMUIsSUFBSSxVQUFVLFVBQVU7QUFDOUIsc0JBQVUsVUFBVSxhQUFhO0FBQ2pDLHNCQUFVLFdBQVcsYUFBYTtBQUNsQyxzQkFBVSxXQUFXLGFBQWE7QUFDbEMsMkJBQWU7QUFBQSxVQUNuQjtBQUFBLFFBQ0o7QUFDQTtBQUFBLE1BQ0osS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsU0FBUztBQUNMLHNCQUFjLGFBQWEsUUFBUSxnQkFDN0IsVUFBVSxjQUNWLFVBQVU7QUFBQSxNQUNwQjtBQUFBLElBQ0o7QUFDQSxtQkFBZSxnQkFBZ0IsY0FBYyxXQUFXO0FBQ3hELG1CQUFlLGFBQWEsUUFBUSxhQUFhLGFBQWEsYUFBYSxTQUFTLG1CQUFtQixjQUFjLGFBQWEsU0FBUyxNQUFNO0FBQ2pKLGlCQUFhLHdCQUF3QixZQUFZLFNBQVMsZ0JBQWdCLGlCQUFpQixhQUFhLFdBQVc7QUFDbkgsV0FBTztBQUFBLE1BQ0gsUUFBUTtBQUFBLE1BQ1IsUUFBUTtBQUFBLElBQ1o7QUFBQSxFQUNKO0FBQ0EsV0FBUyxRQUFRLGFBQWE7QUFDMUIsUUFBSSxDQUFDLFlBQVksWUFBWTtBQUN6QixZQUFNLFNBQVMsSUFBSSxVQUFVLENBQUMsR0FBRyxVQUFVO0FBQzNDLGFBQU8sUUFBUTtBQUNmLGFBQU87QUFBQSxRQUNILFFBQVE7QUFBQSxRQUNSO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFDQSxXQUFPLGFBQXVCLGdDQUFzQixhQUFhLFdBQVcsRUFBRSxNQUFNLEdBQUcsR0FBRyxZQUFZLFVBQVU7QUFBQSxFQUNwSDtBQUVBLFdBQVMsU0FBUyxrQkFBa0IsUUFBUTtBQUN4QyxRQUFJLGtCQUFrQjtBQUNsQixhQUFPO0FBQUEsSUFDWDtBQUNBLFdBQU87QUFBQSxFQUNYO0FBd2ZBLFdBQVMsUUFBUSxPQUFPLFFBQVE7QUFDNUIsVUFBTSxJQUFJLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQztBQUM1QixVQUFNLFlBQVksSUFBSSxXQUFXLEtBQUs7QUFDdEMsVUFBTSxhQUFhLElBQUksV0FBVyxNQUFNO0FBQ3hDLFFBQUksZ0JBQWdCLFVBQVUsTUFBTSxDQUFDO0FBQ3JDLFVBQU0sc0JBQXNCLGNBQWMsU0FBUztBQUNuRCxVQUFNLGlCQUFpQixXQUFXLE1BQU0sQ0FBQztBQUN6QyxVQUFNLHVCQUF1QixlQUFlLFNBQVM7QUFDckQsUUFBSSxRQUFRO0FBQ1osVUFBTUMsT0FBTyx1QkFBdUIsc0JBQXVCLHNCQUFzQjtBQUNqRixRQUFJLFVBQVU7QUFDZCxhQUFTLElBQUlBLE1BQUssS0FBSyxHQUFHLEtBQUssV0FBVztBQUN0QyxjQUFRLE1BQU07QUFBQSxRQUNWLEtBQU0sVUFBVSxlQUFlO0FBQzNCLGtCQUFRLGNBQWMsc0JBQXNCLE9BQU8sSUFBSSxlQUFlLHVCQUF1QixPQUFPLElBQUksRUFBRSxDQUFDO0FBQzNHO0FBQUEsUUFDSjtBQUNJLGtCQUFRLGNBQWMsc0JBQXNCLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFBQSxNQUNsRTtBQUNBLFFBQUUsQ0FBQyxJQUFJLFFBQVE7QUFDZixjQUFRLE1BQU07QUFBQSxRQUNWLEtBQU0sV0FBVyxjQUFjO0FBQzNCLDBCQUF3QixlQUFlLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsYUFBYTtBQUNsRjtBQUFBLFFBQ0o7QUFDSSx3QkFBYyxzQkFBc0IsT0FBTyxJQUFJLFFBQVE7QUFBQSxNQUMvRDtBQUFBLElBQ0o7QUFDQSxRQUFJLEVBQUUsQ0FBQyxJQUFJO0FBQ1Asc0JBQXdCLGVBQWUsR0FBRyxhQUFhO0FBQzNELFdBQU87QUFBQSxFQUNYO0FBQ0EsV0FBUyxPQUFPLEdBQUc7QUFDZixRQUFJLEtBQUssUUFBUSxRQUFRO0FBQ3JCLGVBQVMsSUFBSSxRQUFRLFFBQVEsS0FBSyxHQUFHLEtBQUs7QUFDdEMsY0FBTSxJQUFJLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQztBQUM1QixZQUFJLFNBQVUsUUFBUSxJQUFJLENBQUMsRUFBRyxNQUFNLENBQUM7QUFDckMsaUJBQVMsSUFBSyxPQUFPLFNBQVMsR0FBSSxLQUFLLEdBQUcsS0FBSztBQUMzQyxnQkFBTSxXQUFXLElBQUksV0FBVyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6RCxZQUFFLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSTtBQUNyQixpQkFBTyxDQUFDLElBQUksU0FBUyxDQUFDLElBQUk7QUFBQSxRQUM5QjtBQUNBLFlBQUksRUFBRSxDQUFDLElBQUk7QUFDUCxtQkFBaUIsZUFBZSxHQUFHLE1BQU07QUFDN0MsZ0JBQVEsS0FBSyxNQUFNO0FBQUEsTUFDdkI7QUFBQSxJQUNKO0FBQ0EsV0FBTyxRQUFRLENBQUM7QUFBQSxFQUNwQjtBQUNBLFdBQVMsUUFBUSxPQUFPLFFBQVE7QUFDNUIsUUFBSSxJQUFJO0FBQ1IsVUFBTSxZQUFZLElBQUksV0FBVyxLQUFLO0FBQ3RDLFVBQU0sYUFBYSxJQUFJLFdBQVcsTUFBTTtBQUN4QyxVQUFNLGdCQUFnQixVQUFVLE1BQU0sQ0FBQztBQUN2QyxVQUFNLHNCQUFzQixjQUFjLFNBQVM7QUFDbkQsVUFBTSxpQkFBaUIsV0FBVyxNQUFNLENBQUM7QUFDekMsVUFBTSx1QkFBdUIsZUFBZSxTQUFTO0FBQ3JELFFBQUk7QUFDSixRQUFJLFVBQVU7QUFDZCxhQUFTLElBQUksc0JBQXNCLEtBQUssR0FBRyxLQUFLLFdBQVc7QUFDdkQsY0FBUSxjQUFjLHNCQUFzQixPQUFPLElBQUksZUFBZSx1QkFBdUIsT0FBTyxJQUFJO0FBQ3hHLGNBQVEsTUFBTTtBQUFBLFFBQ1YsS0FBTSxRQUFRO0FBQ1YsY0FBSTtBQUNKLHdCQUFjLHNCQUFzQixPQUFPLElBQUksUUFBUTtBQUN2RDtBQUFBLFFBQ0o7QUFDSSxjQUFJO0FBQ0osd0JBQWMsc0JBQXNCLE9BQU8sSUFBSTtBQUFBLE1BQ3ZEO0FBQUEsSUFDSjtBQUNBLFFBQUksSUFBSSxHQUFHO0FBQ1AsZUFBUyxJQUFLLHNCQUFzQix1QkFBdUIsR0FBSSxLQUFLLEdBQUcsS0FBSyxXQUFXO0FBQ25GLGdCQUFRLGNBQWMsc0JBQXNCLE9BQU8sSUFBSTtBQUN2RCxZQUFJLFFBQVEsR0FBRztBQUNYLGNBQUk7QUFDSix3QkFBYyxzQkFBc0IsT0FBTyxJQUFJLFFBQVE7QUFBQSxRQUMzRCxPQUNLO0FBQ0QsY0FBSTtBQUNKLHdCQUFjLHNCQUFzQixPQUFPLElBQUk7QUFDL0M7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFDQSxXQUFPLGNBQWMsTUFBTTtBQUFBLEVBQy9CO0FBbTFDQSxXQUFTLGNBQWMsTUFBTSxXQUFXLGFBQWE7QUFDakQsUUFBSSx1QkFBdUIsUUFBUTtBQUMvQixlQUFTLElBQUksR0FBRyxJQUFJLFlBQVksTUFBTSxRQUFRLEtBQUs7QUFDL0MsY0FBTSxTQUFTLGNBQWMsTUFBTSxXQUFXLFlBQVksTUFBTSxDQUFDLENBQUM7QUFDbEUsWUFBSSxPQUFPLFVBQVU7QUFDakIsaUJBQU87QUFBQSxZQUNILFVBQVU7QUFBQSxZQUNWLFFBQVE7QUFBQSxVQUNaO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFDQTtBQUNJLGNBQU0sVUFBVTtBQUFBLFVBQ1osVUFBVTtBQUFBLFVBQ1YsUUFBUTtBQUFBLFlBQ0osT0FBTztBQUFBLFVBQ1g7QUFBQSxRQUNKO0FBQ0EsWUFBSSxZQUFZLGVBQWUsSUFBSTtBQUMvQixrQkFBUSxPQUFPLFlBQVk7QUFDL0IsZUFBTztBQUFBLE1BQ1g7QUFBQSxJQUNKO0FBQ0EsUUFBSSx1QkFBdUIsS0FBSztBQUM1QixVQUFJLFlBQVksZUFBZSxJQUFJO0FBQy9CLGFBQUssWUFBWSxJQUFJLElBQUk7QUFDN0IsYUFBTztBQUFBLFFBQ0gsVUFBVTtBQUFBLFFBQ1YsUUFBUTtBQUFBLE1BQ1o7QUFBQSxJQUNKO0FBQ0EsUUFBSyxnQkFBZ0IsV0FBWSxPQUFPO0FBQ3BDLGFBQU87QUFBQSxRQUNILFVBQVU7QUFBQSxRQUNWLFFBQVEsRUFBRSxPQUFPLG9CQUFvQjtBQUFBLE1BQ3pDO0FBQUEsSUFDSjtBQUNBLFFBQUsscUJBQXFCLFdBQVksT0FBTztBQUN6QyxhQUFPO0FBQUEsUUFDSCxVQUFVO0FBQUEsUUFDVixRQUFRLEVBQUUsT0FBTyxtQkFBbUI7QUFBQSxNQUN4QztBQUFBLElBQ0o7QUFDQSxRQUFLLHVCQUF1QixXQUFZLE9BQU87QUFDM0MsYUFBTztBQUFBLFFBQ0gsVUFBVTtBQUFBLFFBQ1YsUUFBUSxFQUFFLE9BQU8scUJBQXFCO0FBQUEsTUFDMUM7QUFBQSxJQUNKO0FBQ0EsUUFBSyxZQUFZLGdCQUFpQixPQUFPO0FBQ3JDLGFBQU87QUFBQSxRQUNILFVBQVU7QUFBQSxRQUNWLFFBQVEsRUFBRSxPQUFPLHFCQUFxQjtBQUFBLE1BQzFDO0FBQUEsSUFDSjtBQUNBLFFBQUssWUFBWSxZQUFZLFlBQWEsT0FBTztBQUM3QyxhQUFPO0FBQUEsUUFDSCxVQUFVO0FBQUEsUUFDVixRQUFRLEVBQUUsT0FBTyxxQkFBcUI7QUFBQSxNQUMxQztBQUFBLElBQ0o7QUFDQSxRQUFLLFVBQVUsWUFBWSxZQUFhLE9BQU87QUFDM0MsYUFBTztBQUFBLFFBQ0gsVUFBVTtBQUFBLFFBQ1YsUUFBUSxFQUFFLE9BQU8scUJBQXFCO0FBQUEsTUFDMUM7QUFBQSxJQUNKO0FBQ0EsVUFBTSxZQUFZLFlBQVksUUFBUSxNQUFNLEtBQUs7QUFDakQsUUFBSSxVQUFVLGVBQWUsR0FBRztBQUM1QixhQUFPO0FBQUEsUUFDSCxVQUFVO0FBQUEsUUFDVixRQUFRLEVBQUUsT0FBTywwQ0FBMEM7QUFBQSxNQUMvRDtBQUFBLElBQ0o7QUFDQSxVQUFNLGdCQUFnQixZQUFZLFFBQVEsUUFBUSxXQUFXLEdBQUcsVUFBVSxVQUFVO0FBQ3BGLFFBQUksa0JBQWtCLElBQUk7QUFDdEIsYUFBTztBQUFBLFFBQ0gsVUFBVTtBQUFBLFFBQ1YsUUFBUSxFQUFFLE9BQU8sMENBQTBDO0FBQUEsTUFDL0Q7QUFBQSxJQUNKO0FBQ0EsUUFBSSxZQUFZLFFBQVEsZUFBZSxTQUFTLE1BQU0sT0FBTztBQUN6RCxhQUFPO0FBQUEsUUFDSCxVQUFVO0FBQUEsUUFDVixRQUFRLEVBQUUsT0FBTyxxQkFBcUI7QUFBQSxNQUMxQztBQUFBLElBQ0o7QUFDQSxRQUFJLFlBQVksUUFBUSxhQUFhLFVBQVUsUUFBUSxVQUFVO0FBQzdELGFBQU87QUFBQSxRQUNILFVBQVU7QUFBQSxRQUNWLFFBQVE7QUFBQSxNQUNaO0FBQUEsSUFDSjtBQUNBLFFBQUksWUFBWSxRQUFRLGVBQWUsVUFBVSxNQUFNLE9BQU87QUFDMUQsYUFBTztBQUFBLFFBQ0gsVUFBVTtBQUFBLFFBQ1YsUUFBUSxFQUFFLE9BQU8scUJBQXFCO0FBQUEsTUFDMUM7QUFBQSxJQUNKO0FBQ0EsUUFBSSxZQUFZLFFBQVEsY0FBYyxVQUFVLFFBQVEsV0FBVztBQUMvRCxhQUFPO0FBQUEsUUFDSCxVQUFVO0FBQUEsUUFDVixRQUFRO0FBQUEsTUFDWjtBQUFBLElBQ0o7QUFDQSxRQUFJLFlBQVksUUFBUSxlQUFlLGNBQWMsTUFBTSxPQUFPO0FBQzlELGFBQU87QUFBQSxRQUNILFVBQVU7QUFBQSxRQUNWLFFBQVEsRUFBRSxPQUFPLHFCQUFxQjtBQUFBLE1BQzFDO0FBQUEsSUFDSjtBQUNBLFFBQUksWUFBWSxRQUFRLGtCQUFrQixVQUFVLFFBQVEsZUFBZTtBQUN2RSxhQUFPO0FBQUEsUUFDSCxVQUFVO0FBQUEsUUFDVixRQUFRO0FBQUEsTUFDWjtBQUFBLElBQ0o7QUFDQSxRQUFJLEVBQUUsZUFBZSxZQUFZLFVBQVU7QUFDdkMsYUFBTztBQUFBLFFBQ0gsVUFBVTtBQUFBLFFBQ1YsUUFBUSxFQUFFLE9BQU8scUJBQXFCO0FBQUEsTUFDMUM7QUFBQSxJQUNKO0FBQ0EsUUFBSSxZQUFZLFFBQVEsY0FBYyxVQUFVLFFBQVEsV0FBVztBQUMvRCxhQUFPO0FBQUEsUUFDSCxVQUFVO0FBQUEsUUFDVixRQUFRO0FBQUEsTUFDWjtBQUFBLElBQ0o7QUFDQSxRQUFJLFlBQVksUUFBUSxXQUFXO0FBQy9CLFVBQUssa0JBQWtCLFlBQVksWUFBYSxPQUFPO0FBQ25ELGVBQU87QUFBQSxVQUNILFVBQVU7QUFBQSxVQUNWLFFBQVEsRUFBRSxPQUFPLHFCQUFxQjtBQUFBLFFBQzFDO0FBQUEsTUFDSjtBQUNBLFlBQU0sYUFBYSxZQUFZLFFBQVE7QUFDdkMsWUFBTSxXQUFXLFVBQVUsUUFBUTtBQUNuQyxVQUFJLFdBQVcsV0FBVyxTQUFTLFFBQVE7QUFDdkMsZUFBTztBQUFBLFVBQ0gsVUFBVTtBQUFBLFVBQ1YsUUFBUTtBQUFBLFFBQ1o7QUFBQSxNQUNKO0FBQ0EsZUFBUyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUN4QyxZQUFJLFdBQVcsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxHQUFHO0FBQy9CLGlCQUFPO0FBQUEsWUFDSCxVQUFVO0FBQUEsWUFDVixRQUFRO0FBQUEsVUFDWjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUNBLFFBQUksWUFBWSxNQUFNO0FBQ2xCLGtCQUFZLE9BQU8sWUFBWSxLQUFLLFFBQVEsY0FBYyxZQUFZO0FBQ3RFLFVBQUksWUFBWTtBQUNaLGFBQUssWUFBWSxJQUFJLElBQUk7QUFBQSxJQUNqQztBQUNBLFFBQUksdUJBQXVCLFVBQVUsYUFBYTtBQUM5QyxVQUFJLFlBQVk7QUFDaEIsVUFBSSxTQUFTO0FBQUEsUUFDVCxVQUFVO0FBQUEsUUFDVixRQUFRO0FBQUEsVUFDSixPQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFDQSxVQUFJLFlBQVksWUFBWSxXQUFXLE1BQU07QUFDN0MsVUFBSSxZQUFZLEdBQUc7QUFDZixZQUFJLFlBQVksV0FBVyxNQUFNLENBQUMsYUFBYSxVQUFVO0FBQ3JELHNCQUFZLFVBQVUsV0FBVyxNQUFNO0FBQUEsUUFDM0M7QUFBQSxNQUNKO0FBQ0EsVUFBSSxjQUFjLEdBQUc7QUFDakIsZUFBTztBQUFBLFVBQ0gsVUFBVTtBQUFBLFVBQ1YsUUFBUTtBQUFBLFFBQ1o7QUFBQSxNQUNKO0FBQ0EsVUFBSyxVQUFVLFdBQVcsTUFBTSxXQUFXLEtBQ3RDLFlBQVksV0FBVyxNQUFNLFdBQVcsR0FBSTtBQUM3QyxZQUFJLFlBQVk7QUFDaEIsaUJBQVMsSUFBSSxHQUFHLElBQUksWUFBWSxXQUFXLE1BQU0sUUFBUTtBQUNyRCxzQkFBWSxjQUFjLFlBQVksV0FBVyxNQUFNLENBQUMsRUFBRSxZQUFZO0FBQzFFLFlBQUksV0FBVztBQUNYLGlCQUFPO0FBQUEsWUFDSCxVQUFVO0FBQUEsWUFDVixRQUFRO0FBQUEsVUFDWjtBQUFBLFFBQ0o7QUFDQSxZQUFJLFlBQVksTUFBTTtBQUNsQixzQkFBWSxPQUFPLFlBQVksS0FBSyxRQUFRLGNBQWMsWUFBWTtBQUN0RSxjQUFJLFlBQVk7QUFDWixtQkFBTyxLQUFLLFlBQVksSUFBSTtBQUFBLFFBQ3BDO0FBQ0EsYUFBSyxRQUFRO0FBQ2IsZUFBTztBQUFBLFVBQ0gsVUFBVTtBQUFBLFVBQ1YsUUFBUTtBQUFBLFFBQ1o7QUFBQSxNQUNKO0FBQ0EsZUFBUyxJQUFJLEdBQUcsSUFBSSxXQUFXLEtBQUs7QUFDaEMsWUFBSyxJQUFJLGFBQWMsVUFBVSxXQUFXLE1BQU0sUUFBUTtBQUN0RCxjQUFJLFlBQVksV0FBVyxNQUFNLENBQUMsRUFBRSxhQUFhLE9BQU87QUFDcEQsa0JBQU0sVUFBVTtBQUFBLGNBQ1osVUFBVTtBQUFBLGNBQ1YsUUFBUTtBQUFBLFlBQ1o7QUFDQSxpQkFBSyxRQUFRO0FBQ2IsZ0JBQUksWUFBWSxNQUFNO0FBQ2xCLDBCQUFZLE9BQU8sWUFBWSxLQUFLLFFBQVEsY0FBYyxZQUFZO0FBQ3RFLGtCQUFJLFlBQVksTUFBTTtBQUNsQix1QkFBTyxLQUFLLFlBQVksSUFBSTtBQUM1Qix3QkFBUSxPQUFPLFlBQVk7QUFBQSxjQUMvQjtBQUFBLFlBQ0o7QUFDQSxtQkFBTztBQUFBLFVBQ1g7QUFBQSxRQUNKLE9BQ0s7QUFDRCxjQUFJLFlBQVksV0FBVyxNQUFNLENBQUMsYUFBYSxVQUFVO0FBQ3JELHFCQUFTLGNBQWMsTUFBTSxVQUFVLFdBQVcsTUFBTSxDQUFDLEdBQUcsWUFBWSxXQUFXLE1BQU0sQ0FBQyxFQUFFLEtBQUs7QUFDakcsZ0JBQUksT0FBTyxhQUFhLE9BQU87QUFDM0Isa0JBQUksWUFBWSxXQUFXLE1BQU0sQ0FBQyxFQUFFO0FBQ2hDO0FBQUEsbUJBQ0M7QUFDRCxvQkFBSSxZQUFZLE1BQU07QUFDbEIsOEJBQVksT0FBTyxZQUFZLEtBQUssUUFBUSxjQUFjLFlBQVk7QUFDdEUsc0JBQUksWUFBWTtBQUNaLDJCQUFPLEtBQUssWUFBWSxJQUFJO0FBQUEsZ0JBQ3BDO0FBQ0EsdUJBQU87QUFBQSxjQUNYO0FBQUEsWUFDSjtBQUNBLGdCQUFLLFFBQVEsWUFBWSxXQUFXLE1BQU0sQ0FBQyxLQUFPLFlBQVksV0FBVyxNQUFNLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FBSTtBQUNoRyxrQkFBSSxZQUFZLENBQUM7QUFDakIsa0JBQUssU0FBUyxZQUFZLFdBQVcsTUFBTSxDQUFDLEtBQU8sWUFBWSxXQUFXLE1BQU0sQ0FBQyxFQUFFO0FBQy9FLDRCQUFZO0FBQUE7QUFFWiw0QkFBWTtBQUNoQixrQkFBSSxPQUFPLFVBQVUsWUFBWSxXQUFXLE1BQU0sQ0FBQyxFQUFFLElBQUksTUFBTTtBQUMzRCwwQkFBVSxZQUFZLFdBQVcsTUFBTSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUM7QUFDdkQsd0JBQVUsWUFBWSxXQUFXLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLFVBQVUsV0FBVyxNQUFNLENBQUMsQ0FBQztBQUFBLFlBQ3RGO0FBQUEsVUFDSixPQUNLO0FBQ0QscUJBQVMsY0FBYyxNQUFNLFVBQVUsV0FBVyxNQUFNLElBQUksU0FBUyxHQUFHLFlBQVksV0FBVyxNQUFNLENBQUMsQ0FBQztBQUN2RyxnQkFBSSxPQUFPLGFBQWEsT0FBTztBQUMzQixrQkFBSSxZQUFZLFdBQVcsTUFBTSxDQUFDLEVBQUU7QUFDaEM7QUFBQSxtQkFDQztBQUNELG9CQUFJLFlBQVksTUFBTTtBQUNsQiw4QkFBWSxPQUFPLFlBQVksS0FBSyxRQUFRLGNBQWMsWUFBWTtBQUN0RSxzQkFBSSxZQUFZO0FBQ1osMkJBQU8sS0FBSyxZQUFZLElBQUk7QUFBQSxnQkFDcEM7QUFDQSx1QkFBTztBQUFBLGNBQ1g7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQ0EsVUFBSSxPQUFPLGFBQWEsT0FBTztBQUMzQixjQUFNLFVBQVU7QUFBQSxVQUNaLFVBQVU7QUFBQSxVQUNWLFFBQVE7QUFBQSxRQUNaO0FBQ0EsWUFBSSxZQUFZLE1BQU07QUFDbEIsc0JBQVksT0FBTyxZQUFZLEtBQUssUUFBUSxjQUFjLFlBQVk7QUFDdEUsY0FBSSxZQUFZLE1BQU07QUFDbEIsbUJBQU8sS0FBSyxZQUFZLElBQUk7QUFDNUIsb0JBQVEsT0FBTyxZQUFZO0FBQUEsVUFDL0I7QUFBQSxRQUNKO0FBQ0EsZUFBTztBQUFBLE1BQ1g7QUFDQSxhQUFPO0FBQUEsUUFDSCxVQUFVO0FBQUEsUUFDVixRQUFRO0FBQUEsTUFDWjtBQUFBLElBQ0o7QUFDQSxRQUFJLFlBQVksbUJBQ1gsa0JBQWtCLFVBQVUsWUFBYTtBQUMxQyxZQUFNLE9BQU8sYUFBYSxVQUFVLFdBQVcsWUFBWTtBQUMzRCxVQUFJLEtBQUssV0FBVyxJQUFJO0FBQ3BCLGNBQU0sVUFBVTtBQUFBLFVBQ1osVUFBVTtBQUFBLFVBQ1YsUUFBUSxLQUFLO0FBQUEsUUFDakI7QUFDQSxZQUFJLFlBQVksTUFBTTtBQUNsQixzQkFBWSxPQUFPLFlBQVksS0FBSyxRQUFRLGNBQWMsWUFBWTtBQUN0RSxjQUFJLFlBQVksTUFBTTtBQUNsQixtQkFBTyxLQUFLLFlBQVksSUFBSTtBQUM1QixvQkFBUSxPQUFPLFlBQVk7QUFBQSxVQUMvQjtBQUFBLFFBQ0o7QUFDQSxlQUFPO0FBQUEsTUFDWDtBQUNBLGFBQU8sY0FBYyxNQUFNLEtBQUssUUFBUSxZQUFZLGVBQWU7QUFBQSxJQUN2RTtBQUNBLFdBQU87QUFBQSxNQUNILFVBQVU7QUFBQSxNQUNWLFFBQVE7QUFBQSxJQUNaO0FBQUEsRUFDSjtBQUNBLFdBQVMsYUFBYSxhQUFhLGFBQWE7QUFDNUMsUUFBSyx1QkFBdUIsV0FBWSxPQUFPO0FBQzNDLGFBQU87QUFBQSxRQUNILFVBQVU7QUFBQSxRQUNWLFFBQVEsRUFBRSxPQUFPLDBCQUEwQjtBQUFBLE1BQy9DO0FBQUEsSUFDSjtBQUNBLFVBQU0sT0FBTyxhQUF1QixnQ0FBc0IsYUFBYSxXQUFXLENBQUM7QUFDbkYsUUFBSSxLQUFLLFdBQVcsSUFBSTtBQUNwQixhQUFPO0FBQUEsUUFDSCxVQUFVO0FBQUEsUUFDVixRQUFRLEtBQUs7QUFBQSxNQUNqQjtBQUFBLElBQ0o7QUFDQSxXQUFPLGNBQWMsS0FBSyxRQUFRLEtBQUssUUFBUSxXQUFXO0FBQUEsRUFDOUQ7QUFyakdBLE1Ba0NBLFdBK0NNLFlBWUEsU0FDQSxjQUNBLE1BQ0EsZ0JBQ0EsYUFDQSxVQUNBLFdBQ0EsWUFDQSxnQkFDQSxVQUNBLFFBQ0EsT0FDQSxjQUNBLGNBQ0EsWUFDQSxxQkFDQSxtQkFDQSxpQkF3REEsZ0JBNEJBLFlBVUEsMEJBNEtBLGtCQW1HQSxXQUVBLFdBZ0dBLGlCQWtDQSwwQkFRRixNQUNFLFdBOE9BLDRCQWtFRixNQUNFLGFBdUNBLDZCQVVGLE1BQ0UsY0FhRixNQUNFLE1BMENBLHdCQWlERixNQUNFSCxVQXNCQSw0QkFtREYsTUFDRSxhQXFFQSwwQkEyRkYsTUFDRSxXQTRDRixNQXdGRSx3QkEySUYsTUFDRSxTQTBERixNQUNFLFlBYUEsb0JBbUhBLGlDQStIRixNQUNFLGtCQTRCQSw0QkFpRkEseUNBc0ZGLE1BQ0UsMEJBNEJGLE1BQ0UsVUFhRixNQUNFQyxNQWFBLHVCQWVBLDZCQUlBLHdCQWlCQSwyQkFrQkYsTUFDRSxZQWFBLDBCQVlGLE1BQ0UsV0FhQSxnQ0E2QkYsTUFDRSxpQkFhRixNQUNFLGVBYUYsTUFDRSxpQkFhRixNQUNFLGVBYUYsTUFDRSxnQkFhRixNQUNFLFdBYUYsTUFDRSxlQWFGLE1BQ0UsZUFhRixNQUNFLGVBYUYsTUFDRSxpQkFhRixNQUNFLFNBaUdGLE1BQ0UsaUJBcUxGLE1BQ0UsTUFhRixNQUNFLFdBYUYsTUFDRSxVQWFGLE1BQ0UsVUFhRixJQUNFLE1BYUEsS0FPQSxRQU9BLFVBUUE7QUFsdUZOO0FBQUE7QUFrQ0Esa0JBQTJCO0FBQzNCO0FBOENBLE1BQU0sYUFBTixNQUFpQjtBQUFBLFFBQ2IsY0FBYztBQUNWLGVBQUssUUFBUSxDQUFDO0FBQUEsUUFDbEI7QUFBQSxRQUNBLE1BQU0sS0FBSztBQUNQLGVBQUssTUFBTSxLQUFLLEdBQUc7QUFBQSxRQUN2QjtBQUFBLFFBQ0EsUUFBUTtBQUNKLGlCQUFPLE9BQU8sS0FBSyxLQUFLO0FBQUEsUUFDNUI7QUFBQSxNQUNKO0FBRUEsTUFBTSxVQUFVLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsTUFBTSxlQUFlO0FBQ3JCLE1BQU0sT0FBTztBQUNiLE1BQU0saUJBQWlCO0FBQ3ZCLE1BQU0sY0FBYztBQUNwQixNQUFNLFdBQVc7QUFDakIsTUFBTSxZQUFZO0FBQ2xCLE1BQU0sYUFBYTtBQUNuQixNQUFNLGlCQUFpQjtBQUN2QixNQUFNLFdBQVc7QUFDakIsTUFBTSxTQUFTO0FBQ2YsTUFBTSxRQUFRO0FBQ2QsTUFBTSxlQUFlO0FBQ3JCLE1BQU0sZUFBZSxJQUFJLFlBQVksQ0FBQztBQUN0QyxNQUFNLGFBQWEsSUFBSSxXQUFXLENBQUM7QUFDbkMsTUFBTSxzQkFBc0I7QUFDNUIsTUFBTSxvQkFBb0I7QUFDMUIsTUFBTSxrQkFBa0I7QUF3RHhCLE1BQU0saUJBQU4sTUFBcUI7QUFBQSxRQUNqQixZQUFZLEVBQUUsY0FBYyxHQUFHLFFBQVEsY0FBYyxXQUFXLENBQUMsR0FBRyxvQkFBb0IsV0FBWSxJQUFJLENBQUMsR0FBRztBQUN4RyxlQUFLLGNBQWM7QUFDbkIsZUFBSyxRQUFRO0FBQ2IsZUFBSyxXQUFXO0FBQ2hCLGVBQUssd0JBQWtDLGdDQUFzQixhQUFhLGlCQUFpQjtBQUFBLFFBQy9GO0FBQUEsUUFDQSxPQUFPLFlBQVk7QUFDZixpQkFBTyxLQUFLO0FBQUEsUUFDaEI7QUFBQSxRQUNBLElBQUksb0JBQW9CO0FBQ3BCLGlCQUFPLEtBQUssc0JBQXNCLE1BQU0sRUFBRTtBQUFBLFFBQzlDO0FBQUEsUUFDQSxJQUFJLGtCQUFrQixPQUFPO0FBQ3pCLGVBQUssd0JBQXdCLElBQUksV0FBVyxLQUFLO0FBQUEsUUFDckQ7QUFBQSxRQUNBLFNBQVM7QUFDTCxpQkFBTztBQUFBLFlBQ0gsV0FBVyxLQUFLLFlBQVk7QUFBQSxZQUM1QixhQUFhLEtBQUs7QUFBQSxZQUNsQixPQUFPLEtBQUs7QUFBQSxZQUNaLFVBQVUsS0FBSztBQUFBLFlBQ2YsbUJBQTZCLGtCQUFRLE1BQU0sS0FBSyxxQkFBcUI7QUFBQSxVQUN6RTtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQ0EscUJBQWUsT0FBTztBQUV0QixNQUFNLGFBQU4sY0FBeUIsZUFBZTtBQUFBLFFBQ3BDLFFBQVEsYUFBYSxhQUFhLGFBQWE7QUFDM0MsZ0JBQU0sVUFBVSw2RUFBNkU7QUFBQSxRQUNqRztBQUFBLFFBQ0EsTUFBTSxVQUFVLFFBQVE7QUFDcEIsZ0JBQU0sVUFBVSw2RUFBNkU7QUFBQSxRQUNqRztBQUFBLE1BQ0o7QUFDQSxpQkFBVyxPQUFPO0FBRWxCLE1BQU0sMkJBQU4sY0FBdUMsU0FBUyxjQUFjLEVBQUU7QUFBQSxRQUM1RCxZQUFZLEVBQUUsVUFBVSxDQUFDLEVBQUcsSUFBSSxDQUFDLEdBQUc7QUFDaEMsY0FBSUMsS0FBSSxJQUFJLElBQUk7QUFDaEIsZ0JBQU07QUFDTixjQUFJLFNBQVM7QUFDVCxpQkFBSyxhQUFhQSxNQUFLLFFBQVEsZUFBZSxRQUFRQSxRQUFPLFNBQVNBLE1BQUs7QUFDM0UsaUJBQUssZUFBZSxRQUFRLFdBQXFCLGdDQUFzQixhQUFhLFFBQVEsUUFBUSxJQUFJO0FBQ3hHLGlCQUFLLFlBQVksS0FBSyxRQUFRLGNBQWMsUUFBUSxPQUFPLFNBQVMsS0FBSztBQUN6RSxpQkFBSyxhQUFhLEtBQUssUUFBUSxlQUFlLFFBQVEsT0FBTyxTQUFTLEtBQUs7QUFDM0UsaUJBQUssaUJBQWlCLEtBQUssUUFBUSxtQkFBbUIsUUFBUSxPQUFPLFNBQVMsS0FBSztBQUFBLFVBQ3ZGLE9BQ0s7QUFDRCxpQkFBSyxXQUFXO0FBQ2hCLGlCQUFLLFlBQVk7QUFDakIsaUJBQUssZ0JBQWdCO0FBQUEsVUFDekI7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNLFdBQVcsT0FBTztBQUNwQixjQUFJLGFBQWE7QUFDakIsa0JBQVEsS0FBSyxVQUFVO0FBQUEsWUFDbkIsS0FBSztBQUNELDRCQUFjO0FBQ2Q7QUFBQSxZQUNKLEtBQUs7QUFDRCw0QkFBYztBQUNkO0FBQUEsWUFDSixLQUFLO0FBQ0QsNEJBQWM7QUFDZDtBQUFBLFlBQ0osS0FBSztBQUNELDRCQUFjO0FBQ2Q7QUFBQSxZQUNKO0FBQ0ksbUJBQUssUUFBUTtBQUNiLHFCQUFPO0FBQUEsVUFDZjtBQUNBLGNBQUksS0FBSztBQUNMLDBCQUFjO0FBQ2xCLGNBQUksS0FBSyxZQUFZLE1BQU0sQ0FBQyxLQUFLLFdBQVc7QUFDeEMsa0JBQU1FLFdBQVUsSUFBSSxXQUFXLENBQUM7QUFDaEMsZ0JBQUksQ0FBQyxVQUFVO0FBQ1gsa0JBQUksU0FBUyxLQUFLO0FBQ2xCLHdCQUFVO0FBQ1YsNEJBQWM7QUFDZCxjQUFBQSxTQUFRLENBQUMsSUFBSTtBQUFBLFlBQ2pCO0FBQ0EsbUJBQU9BLFNBQVE7QUFBQSxVQUNuQjtBQUNBLGNBQUksQ0FBQyxLQUFLLFdBQVc7QUFDakIsa0JBQU0sYUFBcUIsV0FBVyxLQUFLLFdBQVcsQ0FBQztBQUN2RCxrQkFBTSxjQUFjLElBQUksV0FBVyxVQUFVO0FBQzdDLGtCQUFNQyxRQUFPLFdBQVc7QUFDeEIsa0JBQU1ELFdBQVUsSUFBSSxXQUFXQyxRQUFPLENBQUM7QUFDdkMsWUFBQUQsU0FBUSxDQUFDLElBQUssYUFBYTtBQUMzQixnQkFBSSxDQUFDLFVBQVU7QUFDWCx1QkFBUyxJQUFJLEdBQUcsSUFBS0MsUUFBTyxHQUFJO0FBQzVCLGdCQUFBRCxTQUFRLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxJQUFJO0FBQ3RDLGNBQUFBLFNBQVFDLEtBQUksSUFBSSxZQUFZQSxRQUFPLENBQUM7QUFBQSxZQUN4QztBQUNBLG1CQUFPRCxTQUFRO0FBQUEsVUFDbkI7QUFDQSxnQkFBTSxVQUFVLElBQUksV0FBVyxLQUFLLGFBQWEsYUFBYSxDQUFDO0FBQy9ELGtCQUFRLENBQUMsSUFBSyxhQUFhO0FBQzNCLGNBQUksQ0FBQyxVQUFVO0FBQ1gsa0JBQU0sVUFBVSxLQUFLO0FBQ3JCLHFCQUFTLElBQUksR0FBRyxJQUFLLFFBQVEsU0FBUyxHQUFJO0FBQ3RDLHNCQUFRLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJO0FBQ2xDLG9CQUFRLEtBQUssYUFBYSxVQUFVLElBQUksUUFBUSxRQUFRLFNBQVMsQ0FBQztBQUFBLFVBQ3RFO0FBQ0EsaUJBQU8sUUFBUTtBQUFBLFFBQ25CO0FBQUEsUUFDQSxRQUFRLGFBQWEsYUFBYSxhQUFhO0FBQzNDLGdCQUFNLFlBQXNCLGdDQUFzQixhQUFhLFdBQVc7QUFDMUUsY0FBSSxDQUFDLGtCQUFrQixNQUFNLFdBQVcsYUFBYSxXQUFXLEdBQUc7QUFDL0QsbUJBQU87QUFBQSxVQUNYO0FBQ0EsZ0JBQU0sWUFBWSxVQUFVLFNBQVMsYUFBYSxjQUFjLFdBQVc7QUFDM0UsY0FBSSxVQUFVLFdBQVcsR0FBRztBQUN4QixpQkFBSyxRQUFRO0FBQ2IsbUJBQU87QUFBQSxVQUNYO0FBQ0EsZ0JBQU0sZUFBZSxVQUFVLENBQUMsSUFBSTtBQUNwQyxrQkFBUSxjQUFjO0FBQUEsWUFDbEIsS0FBSztBQUNELG1CQUFLLFdBQVk7QUFDakI7QUFBQSxZQUNKLEtBQUs7QUFDRCxtQkFBSyxXQUFZO0FBQ2pCO0FBQUEsWUFDSixLQUFLO0FBQ0QsbUJBQUssV0FBWTtBQUNqQjtBQUFBLFlBQ0osS0FBSztBQUNELG1CQUFLLFdBQVk7QUFDakI7QUFBQSxZQUNKO0FBQ0ksbUJBQUssUUFBUTtBQUNiLHFCQUFPO0FBQUEsVUFDZjtBQUNBLGVBQUssaUJBQWlCLFVBQVUsQ0FBQyxJQUFJLFFBQVU7QUFDL0MsZUFBSyxZQUFZO0FBQ2pCLGdCQUFNLGdCQUFnQixVQUFVLENBQUMsSUFBSTtBQUNyQyxjQUFJLGtCQUFrQixJQUFNO0FBQ3hCLGlCQUFLLFlBQWE7QUFDbEIsaUJBQUssY0FBYztBQUFBLFVBQ3ZCLE9BQ0s7QUFDRCxnQkFBSSxRQUFRO0FBQ1osZ0JBQUkscUJBQXFCLEtBQUssZUFBZSxJQUFJLFdBQVcsR0FBRztBQUMvRCxnQkFBSSwyQkFBMkI7QUFDL0IsbUJBQU8sVUFBVSxLQUFLLElBQUksS0FBTTtBQUM1QixpQ0FBbUIsUUFBUSxDQUFDLElBQUksVUFBVSxLQUFLLElBQUk7QUFDbkQ7QUFDQSxrQkFBSSxTQUFTLFVBQVUsUUFBUTtBQUMzQixxQkFBSyxRQUFRO0FBQ2IsdUJBQU87QUFBQSxjQUNYO0FBQ0Esa0JBQUksVUFBVSwwQkFBMEI7QUFDcEMsNENBQTRCO0FBQzVCLHNCQUFNRSxrQkFBaUIsSUFBSSxXQUFXLHdCQUF3QjtBQUM5RCx5QkFBUyxJQUFJLEdBQUcsSUFBSSxtQkFBbUIsUUFBUTtBQUMzQyxrQkFBQUEsZ0JBQWUsQ0FBQyxJQUFJLG1CQUFtQixDQUFDO0FBQzVDLHFDQUFxQixLQUFLLGVBQWUsSUFBSSxXQUFXLHdCQUF3QjtBQUFBLGNBQ3BGO0FBQUEsWUFDSjtBQUNBLGlCQUFLLGNBQWUsUUFBUTtBQUM1QiwrQkFBbUIsUUFBUSxDQUFDLElBQUksVUFBVSxLQUFLLElBQUk7QUFDbkQsa0JBQU0saUJBQWlCLElBQUksV0FBVyxLQUFLO0FBQzNDLHFCQUFTLElBQUksR0FBRyxJQUFJLE9BQU87QUFDdkIsNkJBQWUsQ0FBQyxJQUFJLG1CQUFtQixDQUFDO0FBQzVDLGlDQUFxQixLQUFLLGVBQWUsSUFBSSxXQUFXLEtBQUs7QUFDN0QsK0JBQW1CLElBQUksY0FBYztBQUNyQyxnQkFBSSxLQUFLLGVBQWU7QUFDcEIsbUJBQUssWUFBb0IsYUFBYSxvQkFBb0IsQ0FBQztBQUFBLGlCQUMxRDtBQUNELG1CQUFLLFlBQVk7QUFDakIsbUJBQUssU0FBUyxLQUFLLHdDQUF3QztBQUFBLFlBQy9EO0FBQUEsVUFDSjtBQUNBLGNBQU0sS0FBSyxhQUFhLEtBQ25CLEtBQUssZUFBZ0I7QUFDdEIsb0JBQVEsS0FBSyxXQUFXO0FBQUEsY0FDcEIsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNELHFCQUFLLFFBQVE7QUFDYix1QkFBTztBQUFBLFlBQ2Y7QUFBQSxVQUNKO0FBQ0EsaUJBQVEsY0FBYyxLQUFLO0FBQUEsUUFDL0I7QUFBQSxRQUNBLFNBQVM7QUFDTCxpQkFBTztBQUFBLFlBQ0gsR0FBRyxNQUFNLE9BQU87QUFBQSxZQUNoQixVQUFVLEtBQUs7QUFBQSxZQUNmLFdBQVcsS0FBSztBQUFBLFlBQ2hCLGVBQWUsS0FBSztBQUFBLFVBQ3hCO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFDQSwrQkFBeUIsT0FBTztBQUVoQyxNQUFNLG1CQUFOLGNBQStCLGVBQWU7QUFBQSxRQUMxQyxZQUFZLEVBQUUsV0FBVyxDQUFDLEVBQUcsSUFBSSxDQUFDLEdBQUc7QUFDakMsY0FBSUosS0FBSSxJQUFJO0FBQ1osZ0JBQU07QUFDTixlQUFLLG9CQUFvQkEsTUFBSyxTQUFTLHNCQUFzQixRQUFRQSxRQUFPLFNBQVNBLE1BQUs7QUFDMUYsZUFBSyxnQkFBZ0IsS0FBSyxTQUFTLGtCQUFrQixRQUFRLE9BQU8sU0FBUyxLQUFLO0FBQ2xGLGVBQUssVUFBVSxLQUFLLFNBQVMsWUFBWSxRQUFRLE9BQU8sU0FBUyxLQUFLO0FBQUEsUUFDMUU7QUFBQSxRQUNBLFFBQVEsYUFBYSxhQUFhLGFBQWE7QUFDM0MsZ0JBQU0sT0FBaUIsZ0NBQXNCLGFBQWEsV0FBVztBQUNyRSxjQUFJLENBQUMsa0JBQWtCLE1BQU0sTUFBTSxhQUFhLFdBQVcsR0FBRztBQUMxRCxtQkFBTztBQUFBLFVBQ1g7QUFDQSxnQkFBTSxZQUFZLEtBQUssU0FBUyxhQUFhLGNBQWMsV0FBVztBQUN0RSxjQUFJLFVBQVUsV0FBVyxHQUFHO0FBQ3hCLGlCQUFLLFFBQVE7QUFDYixtQkFBTztBQUFBLFVBQ1g7QUFDQSxjQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQU07QUFDdkIsaUJBQUssUUFBUTtBQUNiLG1CQUFPO0FBQUEsVUFDWDtBQUNBLGVBQUssbUJBQW1CLFVBQVUsQ0FBQyxNQUFNO0FBQ3pDLGNBQUksS0FBSyxrQkFBa0I7QUFDdkIsaUJBQUssY0FBYztBQUNuQixtQkFBUSxjQUFjLEtBQUs7QUFBQSxVQUMvQjtBQUNBLGVBQUssZUFBZSxDQUFDLEVBQUUsVUFBVSxDQUFDLElBQUk7QUFDdEMsY0FBSSxLQUFLLGlCQUFpQixPQUFPO0FBQzdCLGlCQUFLLFNBQVUsVUFBVSxDQUFDO0FBQzFCLGlCQUFLLGNBQWM7QUFDbkIsbUJBQVEsY0FBYyxLQUFLO0FBQUEsVUFDL0I7QUFDQSxnQkFBTSxRQUFRLFVBQVUsQ0FBQyxJQUFJO0FBQzdCLGNBQUksUUFBUSxHQUFHO0FBQ1gsaUJBQUssUUFBUTtBQUNiLG1CQUFPO0FBQUEsVUFDWDtBQUNBLGNBQUssUUFBUSxJQUFLLFVBQVUsUUFBUTtBQUNoQyxpQkFBSyxRQUFRO0FBQ2IsbUJBQU87QUFBQSxVQUNYO0FBQ0EsZ0JBQU0sWUFBWSxjQUFjO0FBQ2hDLGdCQUFNLG1CQUFtQixLQUFLLFNBQVMsV0FBVyxZQUFZLEtBQUs7QUFDbkUsY0FBSSxpQkFBaUIsUUFBUSxDQUFDLE1BQU07QUFDaEMsaUJBQUssU0FBUyxLQUFLLGdDQUFnQztBQUN2RCxlQUFLLFNBQWlCLGFBQWEsa0JBQWtCLENBQUM7QUFDdEQsY0FBSSxLQUFLLGdCQUFpQixLQUFLLFVBQVU7QUFDckMsaUJBQUssU0FBUyxLQUFLLHVDQUF1QztBQUM5RCxlQUFLLGNBQWMsUUFBUTtBQUMzQixpQkFBUSxjQUFjLEtBQUs7QUFBQSxRQUMvQjtBQUFBLFFBQ0EsTUFBTSxXQUFXLE9BQU87QUFDcEIsY0FBSTtBQUNKLGNBQUk7QUFDSixjQUFJLEtBQUssU0FBUztBQUNkLGlCQUFLLGVBQWU7QUFDeEIsY0FBSSxLQUFLLGtCQUFrQjtBQUN2QixxQkFBUyxJQUFJLFlBQVksQ0FBQztBQUMxQixnQkFBSSxhQUFhLE9BQU87QUFDcEIsd0JBQVUsSUFBSSxXQUFXLE1BQU07QUFDL0Isc0JBQVEsQ0FBQyxJQUFJO0FBQUEsWUFDakI7QUFDQSxtQkFBTztBQUFBLFVBQ1g7QUFDQSxjQUFJLEtBQUssY0FBYztBQUNuQixrQkFBTSxhQUFxQixXQUFXLEtBQUssUUFBUSxDQUFDO0FBQ3BELGdCQUFJLFdBQVcsYUFBYSxLQUFLO0FBQzdCLG1CQUFLLFFBQVE7QUFDYixxQkFBUTtBQUFBLFlBQ1o7QUFDQSxxQkFBUyxJQUFJLFlBQVksV0FBVyxhQUFhLENBQUM7QUFDbEQsZ0JBQUk7QUFDQSxxQkFBTztBQUNYLGtCQUFNLGNBQWMsSUFBSSxXQUFXLFVBQVU7QUFDN0Msc0JBQVUsSUFBSSxXQUFXLE1BQU07QUFDL0Isb0JBQVEsQ0FBQyxJQUFJLFdBQVcsYUFBYTtBQUNyQyxxQkFBUyxJQUFJLEdBQUcsSUFBSSxXQUFXLFlBQVk7QUFDdkMsc0JBQVEsSUFBSSxDQUFDLElBQUksWUFBWSxDQUFDO0FBQ2xDLG1CQUFPO0FBQUEsVUFDWDtBQUNBLG1CQUFTLElBQUksWUFBWSxDQUFDO0FBQzFCLGNBQUksYUFBYSxPQUFPO0FBQ3BCLHNCQUFVLElBQUksV0FBVyxNQUFNO0FBQy9CLG9CQUFRLENBQUMsSUFBSSxLQUFLO0FBQUEsVUFDdEI7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLFNBQVM7QUFDTCxpQkFBTztBQUFBLFlBQ0gsR0FBRyxNQUFNLE9BQU87QUFBQSxZQUNoQixrQkFBa0IsS0FBSztBQUFBLFlBQ3ZCLGNBQWMsS0FBSztBQUFBLFlBQ25CLFFBQVEsS0FBSztBQUFBLFVBQ2pCO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFDQSx1QkFBaUIsT0FBTztBQUV4QixNQUFNLFlBQVksQ0FBQztBQUVuQixNQUFNLFlBQU4sY0FBd0IsZUFBZTtBQUFBLFFBQ25DLFlBQVksRUFBRSxPQUFPLGNBQWMsV0FBVyxPQUFPLGlCQUFpQixHQUFHLFdBQVcsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCO0FBQ3hHLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxPQUFPO0FBQ1osZUFBSyxXQUFXO0FBQ2hCLGNBQUksaUJBQWlCO0FBQ2pCLGlCQUFLLGtCQUFrQjtBQUFBLFVBQzNCO0FBQ0EsZUFBSyxVQUFVLElBQUkseUJBQXlCLFVBQVU7QUFDdEQsZUFBSyxXQUFXLElBQUksaUJBQWlCLFVBQVU7QUFDL0MsZUFBSyxhQUFhLGlCQUFpQixJQUFJLGVBQWUsVUFBVSxJQUFJLElBQUksV0FBVyxVQUFVO0FBQUEsUUFDakc7QUFBQSxRQUNBLFFBQVEsYUFBYSxhQUFhLGFBQWE7QUFDM0MsZ0JBQU0sZUFBZSxLQUFLLFdBQVcsUUFBUSxhQUFhLGFBQWMsS0FBSyxTQUFTLG1CQUFvQixjQUFjLEtBQUssU0FBUyxNQUFNO0FBQzVJLGNBQUksaUJBQWlCLElBQUk7QUFDckIsaUJBQUssUUFBUSxLQUFLLFdBQVc7QUFDN0IsbUJBQU87QUFBQSxVQUNYO0FBQ0EsY0FBSSxDQUFDLEtBQUssUUFBUSxNQUFNO0FBQ3BCLGlCQUFLLGVBQWUsS0FBSyxRQUFRO0FBQ3JDLGNBQUksQ0FBQyxLQUFLLFNBQVMsTUFBTTtBQUNyQixpQkFBSyxlQUFlLEtBQUssU0FBUztBQUN0QyxjQUFJLENBQUMsS0FBSyxXQUFXLE1BQU07QUFDdkIsaUJBQUssZUFBZSxLQUFLLFdBQVc7QUFDeEMsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxNQUFNLFVBQVUsUUFBUTtBQUNwQixnQkFBTSxVQUFVLFVBQVUsSUFBSSxXQUFXO0FBQ3pDLGNBQUksQ0FBQyxRQUFRO0FBQ1Qsa0NBQXNCLElBQUk7QUFBQSxVQUM5QjtBQUNBLGdCQUFNLGFBQWEsS0FBSyxRQUFRLE1BQU0sUUFBUTtBQUM5QyxrQkFBUSxNQUFNLFVBQVU7QUFDeEIsY0FBSSxLQUFLLFNBQVMsa0JBQWtCO0FBQ2hDLG9CQUFRLE1BQU0sSUFBSSxXQUFXLENBQUMsR0FBSSxDQUFDLEVBQUUsTUFBTTtBQUMzQyxpQkFBSyxXQUFXLE1BQU0sVUFBVSxPQUFPO0FBQ3ZDLG9CQUFRLE1BQU0sSUFBSSxZQUFZLENBQUMsQ0FBQztBQUFBLFVBQ3BDLE9BQ0s7QUFDRCxrQkFBTSxnQkFBZ0IsS0FBSyxXQUFXLE1BQU0sUUFBUTtBQUNwRCxpQkFBSyxTQUFTLFNBQVMsY0FBYztBQUNyQyxrQkFBTSxjQUFjLEtBQUssU0FBUyxNQUFNLFFBQVE7QUFDaEQsb0JBQVEsTUFBTSxXQUFXO0FBQ3pCLG9CQUFRLE1BQU0sYUFBYTtBQUFBLFVBQy9CO0FBQ0EsY0FBSSxDQUFDLFFBQVE7QUFDVCxtQkFBTyxRQUFRLE1BQU07QUFBQSxVQUN6QjtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsU0FBUztBQUNMLGdCQUFNLFNBQVM7QUFBQSxZQUNYLEdBQUcsTUFBTSxPQUFPO0FBQUEsWUFDaEIsU0FBUyxLQUFLLFFBQVEsT0FBTztBQUFBLFlBQzdCLFVBQVUsS0FBSyxTQUFTLE9BQU87QUFBQSxZQUMvQixZQUFZLEtBQUssV0FBVyxPQUFPO0FBQUEsWUFDbkMsTUFBTSxLQUFLO0FBQUEsWUFDWCxVQUFVLEtBQUs7QUFBQSxVQUNuQjtBQUNBLGNBQUksS0FBSztBQUNMLG1CQUFPLGtCQUFrQixLQUFLLGdCQUFnQixPQUFPO0FBQ3pELGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsU0FBUyxXQUFXLFNBQVM7QUFDekIsY0FBSSxhQUFhLFNBQVM7QUFDdEIsbUJBQU8sS0FBSyxnQkFBZ0I7QUFBQSxVQUNoQztBQUNBLGlCQUFpQixrQkFBUSxNQUFNLEtBQUssTUFBTSxDQUFDO0FBQUEsUUFDL0M7QUFBQSxRQUNBLGtCQUFrQjtBQUNkLGlCQUFPLEdBQUcsS0FBSyxZQUFZLElBQUksTUFBZ0Isa0JBQVEsTUFBTSxLQUFLLFdBQVcscUJBQXFCLENBQUM7QUFBQSxRQUN2RztBQUFBLFFBQ0EsUUFBUSxPQUFPO0FBQ1gsY0FBSSxTQUFTLE9BQU87QUFDaEIsbUJBQU87QUFBQSxVQUNYO0FBQ0EsY0FBSSxFQUFFLGlCQUFpQixLQUFLLGNBQWM7QUFDdEMsbUJBQU87QUFBQSxVQUNYO0FBQ0EsZ0JBQU0sVUFBVSxLQUFLLE1BQU07QUFDM0IsZ0JBQU0sV0FBVyxNQUFNLE1BQU07QUFDN0IsaUJBQWUsY0FBYyxTQUFTLFFBQVE7QUFBQSxRQUNsRDtBQUFBLE1BQ0o7QUFDQSxnQkFBVSxPQUFPO0FBWWpCLE1BQU0sa0JBQU4sY0FBOEIsVUFBVTtBQUFBLFFBQ3BDLFlBQVksRUFBRSxRQUFRLGNBQWMsR0FBRyxXQUFXLElBQUksQ0FBQyxHQUFHLHNCQUFzQjtBQUM1RSxnQkFBTSxZQUFZLG9CQUFvQjtBQUN0QyxjQUFJLE9BQU87QUFDUCxpQkFBSyxXQUFXLEtBQUs7QUFBQSxVQUN6QjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFDUCxpQkFBTyxLQUFLLFdBQVc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsU0FBUyxPQUFPO0FBQ1osZUFBSyxXQUFXLFFBQVE7QUFBQSxRQUM1QjtBQUFBLFFBQ0EsUUFBUSxhQUFhLGFBQWEsYUFBYTtBQUMzQyxnQkFBTSxlQUFlLEtBQUssV0FBVyxRQUFRLGFBQWEsYUFBYyxLQUFLLFNBQVMsbUJBQW9CLGNBQWMsS0FBSyxTQUFTLE1BQU07QUFDNUksY0FBSSxpQkFBaUIsSUFBSTtBQUNyQixpQkFBSyxRQUFRLEtBQUssV0FBVztBQUM3QixtQkFBTztBQUFBLFVBQ1g7QUFDQSxlQUFLLFdBQVcsS0FBSyxXQUFXLFlBQVk7QUFDNUMsY0FBSSxDQUFDLEtBQUssUUFBUSxNQUFNO0FBQ3BCLGlCQUFLLGVBQWUsS0FBSyxRQUFRO0FBQ3JDLGNBQUksQ0FBQyxLQUFLLFNBQVMsTUFBTTtBQUNyQixpQkFBSyxlQUFlLEtBQUssU0FBUztBQUN0QyxjQUFJLENBQUMsS0FBSyxXQUFXLE1BQU07QUFDdkIsaUJBQUssZUFBZSxLQUFLLFdBQVc7QUFDeEMsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxrQkFBa0I7QUFDZCxpQkFBTyxHQUFHLEtBQUssWUFBWSxJQUFJLE9BQU8sS0FBSyxXQUFXLEtBQUs7QUFBQSxRQUMvRDtBQUFBLE1BQ0o7QUFDQSxzQkFBZ0IsT0FBTztBQUV2QixNQUFNLDJCQUFOLGNBQXVDLFNBQVMsVUFBVSxFQUFFO0FBQUEsUUFDeEQsWUFBWSxFQUFFLFlBQVksTUFBTSxHQUFHLFdBQVcsSUFBSSxDQUFDLEdBQUc7QUFDbEQsZ0JBQU0sVUFBVTtBQUNoQixlQUFLLFlBQVk7QUFBQSxRQUNyQjtBQUFBLE1BQ0o7QUFDQSwrQkFBeUIsT0FBTztBQUdoQyxNQUFNLFlBQU4sY0FBd0IsVUFBVTtBQUFBLFFBQzlCLFlBQVksYUFBYSxDQUFDLEdBQUc7QUFDekIsZ0JBQU0sWUFBWSx3QkFBd0I7QUFDMUMsZUFBSyxRQUFRLGdCQUFnQjtBQUFBLFFBQ2pDO0FBQUEsTUFDSjtBQUNBLGFBQU87QUFDUCxPQUFDLE1BQU07QUFDSCxrQkFBVSxZQUFZO0FBQUEsTUFDMUIsR0FBRztBQUNILGdCQUFVLE9BQU87QUFvT2pCLE1BQU0sNkJBQU4sY0FBeUMsV0FBVztBQUFBLFFBQ2hELFlBQVksRUFBRSxRQUFRLENBQUMsR0FBRyxtQkFBbUIsT0FBTyxHQUFHLFdBQVcsSUFBSSxDQUFDLEdBQUc7QUFDdEUsZ0JBQU0sVUFBVTtBQUNoQixlQUFLLFFBQVE7QUFDYixlQUFLLG1CQUFtQjtBQUFBLFFBQzVCO0FBQUEsUUFDQSxRQUFRLGFBQWEsYUFBYSxhQUFhO0FBQzNDLGdCQUFNLE9BQWlCLGdDQUFzQixhQUFhLFdBQVc7QUFDckUsY0FBSSxDQUFDLGtCQUFrQixNQUFNLE1BQU0sYUFBYSxXQUFXLEdBQUc7QUFDMUQsbUJBQU87QUFBQSxVQUNYO0FBQ0EsZUFBSyx3QkFBd0IsS0FBSyxTQUFTLGFBQWEsY0FBYyxXQUFXO0FBQ2pGLGNBQUksS0FBSyxzQkFBc0IsV0FBVyxHQUFHO0FBQ3pDLGlCQUFLLFNBQVMsS0FBSyxvQkFBb0I7QUFDdkMsbUJBQU87QUFBQSxVQUNYO0FBQ0EsY0FBSSxnQkFBZ0I7QUFDcEIsaUJBQU8sU0FBUyxLQUFLLGtCQUFrQixXQUFXLElBQUksR0FBRztBQUNyRCxrQkFBTSxlQUFlLGFBQWEsTUFBTSxlQUFlLFdBQVc7QUFDbEUsZ0JBQUksYUFBYSxXQUFXLElBQUk7QUFDNUIsbUJBQUssUUFBUSxhQUFhLE9BQU87QUFDakMsbUJBQUssU0FBUyxPQUFPLGFBQWEsT0FBTyxRQUFRO0FBQ2pELHFCQUFPO0FBQUEsWUFDWDtBQUNBLDRCQUFnQixhQUFhO0FBQzdCLGlCQUFLLGVBQWUsYUFBYSxPQUFPO0FBQ3hDLDJCQUFlLGFBQWEsT0FBTztBQUNuQyxpQkFBSyxNQUFNLEtBQUssYUFBYSxNQUFNO0FBQ25DLGdCQUFJLEtBQUssb0JBQW9CLGFBQWEsT0FBTyxZQUFZLFNBQVMscUJBQXFCO0FBQ3ZGO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFDQSxjQUFJLEtBQUssa0JBQWtCO0FBQ3ZCLGdCQUFJLEtBQUssTUFBTSxLQUFLLE1BQU0sU0FBUyxDQUFDLEVBQUUsWUFBWSxTQUFTLHFCQUFxQjtBQUM1RSxtQkFBSyxNQUFNLElBQUk7QUFBQSxZQUNuQixPQUNLO0FBQ0QsbUJBQUssU0FBUyxLQUFLLCtCQUErQjtBQUFBLFlBQ3REO0FBQUEsVUFDSjtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsTUFBTSxVQUFVLFFBQVE7QUFDcEIsZ0JBQU0sVUFBVSxVQUFVLElBQUksV0FBVztBQUN6QyxtQkFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLE1BQU0sUUFBUSxLQUFLO0FBQ3hDLGlCQUFLLE1BQU0sQ0FBQyxFQUFFLE1BQU0sVUFBVSxPQUFPO0FBQUEsVUFDekM7QUFDQSxjQUFJLENBQUMsUUFBUTtBQUNULG1CQUFPLFFBQVEsTUFBTTtBQUFBLFVBQ3pCO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxTQUFTO0FBQ0wsZ0JBQU0sU0FBUztBQUFBLFlBQ1gsR0FBRyxNQUFNLE9BQU87QUFBQSxZQUNoQixrQkFBa0IsS0FBSztBQUFBLFlBQ3ZCLE9BQU8sQ0FBQztBQUFBLFVBQ1o7QUFDQSxxQkFBVyxTQUFTLEtBQUssT0FBTztBQUM1QixtQkFBTyxNQUFNLEtBQUssTUFBTSxPQUFPLENBQUM7QUFBQSxVQUNwQztBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFDQSxpQ0FBMkIsT0FBTztBQUdsQyxNQUFNLGNBQU4sY0FBMEIsVUFBVTtBQUFBLFFBQ2hDLFlBQVksYUFBYSxDQUFDLEdBQUc7QUFDekIsZ0JBQU0sWUFBWSwwQkFBMEI7QUFDNUMsZUFBSyxRQUFRLGdCQUFnQjtBQUFBLFFBQ2pDO0FBQUEsUUFDQSxRQUFRLGFBQWEsYUFBYSxhQUFhO0FBQzNDLGVBQUssV0FBVyxtQkFBbUIsS0FBSyxTQUFTO0FBQ2pELGdCQUFNLGVBQWUsS0FBSyxXQUFXLFFBQVEsYUFBYSxhQUFjLEtBQUssU0FBUyxtQkFBb0IsY0FBYyxLQUFLLFNBQVMsTUFBTTtBQUM1SSxjQUFJLGlCQUFpQixJQUFJO0FBQ3JCLGlCQUFLLFFBQVEsS0FBSyxXQUFXO0FBQzdCLG1CQUFPO0FBQUEsVUFDWDtBQUNBLGNBQUksQ0FBQyxLQUFLLFFBQVEsTUFBTTtBQUNwQixpQkFBSyxlQUFlLEtBQUssUUFBUTtBQUNyQyxjQUFJLENBQUMsS0FBSyxTQUFTLE1BQU07QUFDckIsaUJBQUssZUFBZSxLQUFLLFNBQVM7QUFDdEMsY0FBSSxDQUFDLEtBQUssV0FBVyxNQUFNO0FBQ3ZCLGlCQUFLLGVBQWUsS0FBSyxXQUFXO0FBQ3hDLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0Esa0JBQWtCO0FBQ2QsZ0JBQU0sU0FBUyxDQUFDO0FBQ2hCLHFCQUFXLFNBQVMsS0FBSyxXQUFXLE9BQU87QUFDdkMsbUJBQU8sS0FBSyxNQUFNLFNBQVMsT0FBTyxFQUFFLE1BQU0sSUFBSSxFQUFFLElBQUksT0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDO0FBQUEsVUFDakY7QUFDQSxnQkFBTSxZQUFZLEtBQUssUUFBUSxhQUFhLElBQ3RDLElBQUksS0FBSyxRQUFRLFNBQVMsTUFDMUIsS0FBSyxZQUFZO0FBQ3ZCLGlCQUFPLE9BQU8sU0FDUixHQUFHLFNBQVM7QUFBQSxFQUFPLE9BQU8sS0FBSyxJQUFJLENBQUMsS0FDcEMsR0FBRyxTQUFTO0FBQUEsUUFDdEI7QUFBQSxNQUNKO0FBQ0EsYUFBTztBQUNQLE9BQUMsTUFBTTtBQUNILGtCQUFVLGNBQWM7QUFBQSxNQUM1QixHQUFHO0FBQ0gsa0JBQVksT0FBTztBQUVuQixNQUFNLDhCQUFOLGNBQTBDLFdBQVc7QUFBQSxRQUNqRCxRQUFRLGFBQWEsYUFBYSxhQUFhO0FBQzNDLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsTUFBTSxVQUFVO0FBQ1osaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUNBLGtDQUE0QixXQUFXO0FBR3ZDLE1BQU0sZUFBTixjQUEyQixVQUFVO0FBQUEsUUFDakMsWUFBWSxhQUFhLENBQUMsR0FBRztBQUN6QixnQkFBTSxZQUFZLDJCQUEyQjtBQUM3QyxlQUFLLFFBQVEsV0FBVztBQUN4QixlQUFLLFFBQVEsWUFBWTtBQUFBLFFBQzdCO0FBQUEsTUFDSjtBQUNBLGFBQU87QUFDUCxPQUFDLE1BQU07QUFDSCxrQkFBVSxlQUFlO0FBQUEsTUFDN0IsR0FBRztBQUNILG1CQUFhLE9BQU87QUFHcEIsTUFBTSxPQUFOLGNBQW1CLFVBQVU7QUFBQSxRQUN6QixZQUFZLGFBQWEsQ0FBQyxHQUFHO0FBQ3pCLGdCQUFNLFlBQVksVUFBVTtBQUM1QixlQUFLLFFBQVEsV0FBVztBQUN4QixlQUFLLFFBQVEsWUFBWTtBQUFBLFFBQzdCO0FBQUEsUUFDQSxRQUFRLGFBQWEsYUFBYSxhQUFhO0FBQzNDLGNBQUksS0FBSyxTQUFTLFNBQVM7QUFDdkIsaUJBQUssU0FBUyxLQUFLLDhDQUE4QztBQUNyRSxjQUFJLENBQUMsS0FBSyxRQUFRLE1BQU07QUFDcEIsaUJBQUssZUFBZSxLQUFLLFFBQVE7QUFDckMsY0FBSSxDQUFDLEtBQUssU0FBUyxNQUFNO0FBQ3JCLGlCQUFLLGVBQWUsS0FBSyxTQUFTO0FBQ3RDLGVBQUssZUFBZTtBQUNwQixjQUFLLGNBQWMsY0FBZSxZQUFZLFlBQVk7QUFDdEQsaUJBQUssUUFBUTtBQUNiLG1CQUFPO0FBQUEsVUFDWDtBQUNBLGlCQUFRLGNBQWM7QUFBQSxRQUMxQjtBQUFBLFFBQ0EsTUFBTSxVQUFVLFFBQVE7QUFDcEIsZ0JBQU0sU0FBUyxJQUFJLFlBQVksQ0FBQztBQUNoQyxjQUFJLENBQUMsVUFBVTtBQUNYLGtCQUFNLFVBQVUsSUFBSSxXQUFXLE1BQU07QUFDckMsb0JBQVEsQ0FBQyxJQUFJO0FBQ2Isb0JBQVEsQ0FBQyxJQUFJO0FBQUEsVUFDakI7QUFDQSxjQUFJLFFBQVE7QUFDUixtQkFBTyxNQUFNLE1BQU07QUFBQSxVQUN2QjtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0Esa0JBQWtCO0FBQ2QsaUJBQU8sR0FBRyxLQUFLLFlBQVksSUFBSTtBQUFBLFFBQ25DO0FBQUEsTUFDSjtBQUNBLGFBQU87QUFDUCxPQUFDLE1BQU07QUFDSCxrQkFBVSxPQUFPO0FBQUEsTUFDckIsR0FBRztBQUNILFdBQUssT0FBTztBQUVaLE1BQU0seUJBQU4sY0FBcUMsU0FBUyxVQUFVLEVBQUU7QUFBQSxRQUN0RCxZQUFZLEVBQUUsT0FBTyxHQUFHLFdBQVcsSUFBSSxDQUFDLEdBQUc7QUFDdkMsZ0JBQU0sVUFBVTtBQUNoQixjQUFJLFdBQVcsVUFBVTtBQUNyQixpQkFBSyxlQUF5QixnQ0FBc0IsYUFBYSxXQUFXLFFBQVE7QUFBQSxVQUN4RixPQUNLO0FBQ0QsaUJBQUssZUFBZSxJQUFJLFdBQVcsQ0FBQztBQUFBLFVBQ3hDO0FBQ0EsY0FBSSxPQUFPO0FBQ1AsaUJBQUssUUFBUTtBQUFBLFVBQ2pCO0FBQUEsUUFDSjtBQUFBLFFBQ0EsSUFBSSxRQUFRO0FBQ1IscUJBQVcsU0FBUyxLQUFLLGNBQWM7QUFDbkMsZ0JBQUksUUFBUSxHQUFHO0FBQ1gscUJBQU87QUFBQSxZQUNYO0FBQUEsVUFDSjtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsSUFBSSxNQUFNLE9BQU87QUFDYixlQUFLLGFBQWEsQ0FBQyxJQUFJLFFBQVEsTUFBTztBQUFBLFFBQzFDO0FBQUEsUUFDQSxRQUFRLGFBQWEsYUFBYSxhQUFhO0FBQzNDLGdCQUFNLFlBQXNCLGdDQUFzQixhQUFhLFdBQVc7QUFDMUUsY0FBSSxDQUFDLGtCQUFrQixNQUFNLFdBQVcsYUFBYSxXQUFXLEdBQUc7QUFDL0QsbUJBQU87QUFBQSxVQUNYO0FBQ0EsZUFBSyxlQUFlLFVBQVUsU0FBUyxhQUFhLGNBQWMsV0FBVztBQUM3RSxjQUFJLGNBQWM7QUFDZCxpQkFBSyxTQUFTLEtBQUssNENBQTRDO0FBQ25FLGVBQUssWUFBWTtBQUNqQixVQUFRLGFBQWEsS0FBSyxJQUFJO0FBQzlCLGVBQUssY0FBYztBQUNuQixpQkFBUSxjQUFjO0FBQUEsUUFDMUI7QUFBQSxRQUNBLFFBQVE7QUFDSixpQkFBTyxLQUFLLGFBQWEsTUFBTTtBQUFBLFFBQ25DO0FBQUEsUUFDQSxTQUFTO0FBQ0wsaUJBQU87QUFBQSxZQUNILEdBQUcsTUFBTSxPQUFPO0FBQUEsWUFDaEIsT0FBTyxLQUFLO0FBQUEsVUFDaEI7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUNBLDZCQUF1QixPQUFPO0FBRzlCLE1BQU1GLFdBQU4sY0FBc0IsVUFBVTtBQUFBLFFBQzVCLFlBQVksYUFBYSxDQUFDLEdBQUc7QUFDekIsZ0JBQU0sWUFBWSxzQkFBc0I7QUFDeEMsZUFBSyxRQUFRLFdBQVc7QUFDeEIsZUFBSyxRQUFRLFlBQVk7QUFBQSxRQUM3QjtBQUFBLFFBQ0EsV0FBVztBQUNQLGlCQUFPLEtBQUssV0FBVztBQUFBLFFBQzNCO0FBQUEsUUFDQSxTQUFTLE9BQU87QUFDWixlQUFLLFdBQVcsUUFBUTtBQUFBLFFBQzVCO0FBQUEsUUFDQSxrQkFBa0I7QUFDZCxpQkFBTyxHQUFHLEtBQUssWUFBWSxJQUFJLE1BQU0sS0FBSyxRQUFRO0FBQUEsUUFDdEQ7QUFBQSxNQUNKO0FBQ0EsYUFBT0E7QUFDUCxPQUFDLE1BQU07QUFDSCxrQkFBVSxVQUFVO0FBQUEsTUFDeEIsR0FBRztBQUNILE1BQUFBLFNBQVEsT0FBTztBQUVmLE1BQU0sNkJBQU4sY0FBeUMsU0FBUywwQkFBMEIsRUFBRTtBQUFBLFFBQzFFLFlBQVksRUFBRSxnQkFBZ0IsT0FBTyxHQUFHLFdBQVcsSUFBSSxDQUFDLEdBQUc7QUFDdkQsZ0JBQU0sVUFBVTtBQUNoQixlQUFLLGdCQUFnQjtBQUFBLFFBQ3pCO0FBQUEsUUFDQSxRQUFRLGFBQWEsYUFBYSxhQUFhO0FBQzNDLGNBQUksZUFBZTtBQUNuQixjQUFJLEtBQUssZUFBZTtBQUNwQixpQkFBSyxZQUFZO0FBQ2pCLDJCQUFlLDJCQUEyQixVQUFVLFFBQVEsS0FBSyxNQUFNLGFBQWEsYUFBYSxXQUFXO0FBQzVHLGdCQUFJLGlCQUFpQjtBQUNqQixxQkFBTztBQUNYLHFCQUFTLElBQUksR0FBRyxJQUFJLEtBQUssTUFBTSxRQUFRLEtBQUs7QUFDeEMsb0JBQU0sbUJBQW1CLEtBQUssTUFBTSxDQUFDLEVBQUUsWUFBWTtBQUNuRCxrQkFBSSxxQkFBcUIscUJBQXFCO0FBQzFDLG9CQUFJLEtBQUs7QUFDTDtBQUFBLHFCQUNDO0FBQ0QsdUJBQUssUUFBUTtBQUNiLHlCQUFPO0FBQUEsZ0JBQ1g7QUFBQSxjQUNKO0FBQ0Esa0JBQUkscUJBQXFCLG1CQUFtQjtBQUN4QyxxQkFBSyxRQUFRO0FBQ2IsdUJBQU87QUFBQSxjQUNYO0FBQUEsWUFDSjtBQUFBLFVBQ0osT0FDSztBQUNELGlCQUFLLFlBQVk7QUFDakIsMkJBQWUsTUFBTSxRQUFRLGFBQWEsYUFBYSxXQUFXO0FBQ2xFLGlCQUFLLGNBQWM7QUFBQSxVQUN2QjtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsTUFBTSxVQUFVLFFBQVE7QUFDcEIsY0FBSSxLQUFLO0FBQ0wsbUJBQU8sMkJBQTJCLFVBQVUsTUFBTSxLQUFLLE1BQU0sVUFBVSxNQUFNO0FBQ2pGLGlCQUFPLFdBQ0QsSUFBSSxZQUFZLEtBQUssYUFBYSxVQUFVLElBQzVDLEtBQUssYUFBYSxNQUFNLEVBQUU7QUFBQSxRQUNwQztBQUFBLFFBQ0EsU0FBUztBQUNMLGlCQUFPO0FBQUEsWUFDSCxHQUFHLE1BQU0sT0FBTztBQUFBLFlBQ2hCLGVBQWUsS0FBSztBQUFBLFVBQ3hCO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFDQSxpQ0FBMkIsT0FBTztBQUdsQyxNQUFNLGNBQU4sTUFBTSxxQkFBb0IsVUFBVTtBQUFBLFFBQ2hDLFlBQVksRUFBRSxVQUFVLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxHQUFHLFdBQVcsSUFBSSxDQUFDLEdBQUc7QUFDN0QsY0FBSSxJQUFJO0FBQ1IsV0FBQyxLQUFLLFdBQVcsbUJBQW1CLFFBQVEsT0FBTyxTQUFTLEtBQU0sV0FBVyxnQkFBZ0IsQ0FBQyxHQUFHLEtBQUssV0FBVyxXQUFXLFFBQVEsT0FBTyxTQUFTLFNBQVMsR0FBRztBQUNoSyxnQkFBTTtBQUFBLFlBQ0YsU0FBUztBQUFBLGNBQ0wsZUFBZSxXQUFXO0FBQUEsY0FDMUIsR0FBRztBQUFBLFlBQ1A7QUFBQSxZQUNBLFVBQVU7QUFBQSxjQUNOLEdBQUc7QUFBQSxjQUNILGtCQUFrQixDQUFDLENBQUMsV0FBVztBQUFBLFlBQ25DO0FBQUEsWUFDQSxHQUFHO0FBQUEsVUFDUCxHQUFHLDBCQUEwQjtBQUM3QixlQUFLLFFBQVEsV0FBVztBQUN4QixlQUFLLFFBQVEsWUFBWTtBQUFBLFFBQzdCO0FBQUEsUUFDQSxRQUFRLGFBQWEsYUFBYSxhQUFhO0FBQzNDLGVBQUssV0FBVyxnQkFBZ0IsS0FBSyxRQUFRO0FBQzdDLGVBQUssV0FBVyxtQkFBbUIsS0FBSyxTQUFTO0FBQ2pELGNBQUksZ0JBQWdCLEdBQUc7QUFDbkIsZ0JBQUksS0FBSyxRQUFRLE1BQU0sV0FBVztBQUM5QixtQkFBSyxlQUFlLEtBQUssUUFBUTtBQUNyQyxnQkFBSSxLQUFLLFNBQVMsTUFBTSxXQUFXO0FBQy9CLG1CQUFLLGVBQWUsS0FBSyxTQUFTO0FBQ3RDLG1CQUFPO0FBQUEsVUFDWDtBQUNBLGNBQUksQ0FBQyxLQUFLLFdBQVcsZUFBZTtBQUNoQyxrQkFBTSxPQUFPLHVCQUF1QixjQUFjLElBQUksV0FBVyxXQUFXLElBQUk7QUFDaEYsa0JBQU0sTUFBTSxLQUFLLFNBQVMsYUFBYSxjQUFjLFdBQVc7QUFDaEUsZ0JBQUk7QUFDQSxrQkFBSSxJQUFJLFlBQVk7QUFDaEIsc0JBQU0sTUFBTSxhQUFhLEtBQUssR0FBRyxJQUFJLFVBQVU7QUFDL0Msb0JBQUksSUFBSSxXQUFXLE1BQU0sSUFBSSxXQUFXLGFBQWE7QUFDakQsdUJBQUssV0FBVyxRQUFRLENBQUMsSUFBSSxNQUFNO0FBQUEsZ0JBQ3ZDO0FBQUEsY0FDSjtBQUFBLFlBQ0osU0FDTyxHQUFHO0FBQUEsWUFDVjtBQUFBLFVBQ0o7QUFDQSxpQkFBTyxNQUFNLFFBQVEsYUFBYSxhQUFhLFdBQVc7QUFBQSxRQUM5RDtBQUFBLFFBQ0Esa0JBQWtCO0FBQ2QsY0FBSSxLQUFLLFdBQVcsaUJBQWtCLEtBQUssV0FBVyxTQUFTLEtBQUssV0FBVyxNQUFNLFFBQVM7QUFDMUYsbUJBQU8sWUFBWSxVQUFVLGdCQUFnQixLQUFLLElBQUk7QUFBQSxVQUMxRDtBQUNBLGlCQUFPLEdBQUcsS0FBSyxZQUFZLElBQUksTUFBZ0Isa0JBQVEsTUFBTSxLQUFLLFdBQVcsWUFBWSxDQUFDO0FBQUEsUUFDOUY7QUFBQSxRQUNBLFdBQVc7QUFDUCxjQUFJLENBQUMsS0FBSyxRQUFRLGVBQWU7QUFDN0IsbUJBQU8sS0FBSyxXQUFXLGFBQWEsTUFBTSxFQUFFO0FBQUEsVUFDaEQ7QUFDQSxnQkFBTSxRQUFRLENBQUM7QUFDZixxQkFBVyxXQUFXLEtBQUssV0FBVyxPQUFPO0FBQ3pDLGdCQUFJLG1CQUFtQixjQUFhO0FBQ2hDLG9CQUFNLEtBQUssUUFBUSxXQUFXLFlBQVk7QUFBQSxZQUM5QztBQUFBLFVBQ0o7QUFDQSxpQkFBaUIsZ0NBQXNCLE9BQU8sS0FBSztBQUFBLFFBQ3ZEO0FBQUEsTUFDSjtBQUNBLGFBQU87QUFDUCxPQUFDLE1BQU07QUFDSCxrQkFBVSxjQUFjO0FBQUEsTUFDNUIsR0FBRztBQUNILGtCQUFZLE9BQU87QUFFbkIsTUFBTSwyQkFBTixjQUF1QyxTQUFTLDBCQUEwQixFQUFFO0FBQUEsUUFDeEUsWUFBWSxFQUFFLGFBQWEsR0FBRyxnQkFBZ0IsT0FBTyxHQUFHLFdBQVcsSUFBSSxDQUFDLEdBQUc7QUFDdkUsZ0JBQU0sVUFBVTtBQUNoQixlQUFLLGFBQWE7QUFDbEIsZUFBSyxnQkFBZ0I7QUFDckIsZUFBSyxjQUFjLEtBQUssYUFBYTtBQUFBLFFBQ3pDO0FBQUEsUUFDQSxRQUFRLGFBQWEsYUFBYSxhQUFhO0FBQzNDLGNBQUksQ0FBQyxhQUFhO0FBQ2QsbUJBQU87QUFBQSxVQUNYO0FBQ0EsY0FBSSxlQUFlO0FBQ25CLGNBQUksS0FBSyxlQUFlO0FBQ3BCLDJCQUFlLDJCQUEyQixVQUFVLFFBQVEsS0FBSyxNQUFNLGFBQWEsYUFBYSxXQUFXO0FBQzVHLGdCQUFJLGlCQUFpQjtBQUNqQixxQkFBTztBQUNYLHVCQUFXLFNBQVMsS0FBSyxPQUFPO0FBQzVCLG9CQUFNLG1CQUFtQixNQUFNLFlBQVk7QUFDM0Msa0JBQUkscUJBQXFCLHFCQUFxQjtBQUMxQyxvQkFBSSxLQUFLO0FBQ0w7QUFBQSxxQkFDQztBQUNELHVCQUFLLFFBQVE7QUFDYix5QkFBTztBQUFBLGdCQUNYO0FBQUEsY0FDSjtBQUNBLGtCQUFJLHFCQUFxQixpQkFBaUI7QUFDdEMscUJBQUssUUFBUTtBQUNiLHVCQUFPO0FBQUEsY0FDWDtBQUNBLG9CQUFNLGFBQWEsTUFBTTtBQUN6QixrQkFBSyxLQUFLLGFBQWEsS0FBTyxXQUFXLGFBQWEsR0FBSTtBQUN0RCxxQkFBSyxRQUFRO0FBQ2IsdUJBQU87QUFBQSxjQUNYO0FBQ0EsbUJBQUssYUFBYSxXQUFXO0FBQUEsWUFDakM7QUFDQSxtQkFBTztBQUFBLFVBQ1g7QUFDQSxnQkFBTSxZQUFzQixnQ0FBc0IsYUFBYSxXQUFXO0FBQzFFLGNBQUksQ0FBQyxrQkFBa0IsTUFBTSxXQUFXLGFBQWEsV0FBVyxHQUFHO0FBQy9ELG1CQUFPO0FBQUEsVUFDWDtBQUNBLGdCQUFNLFlBQVksVUFBVSxTQUFTLGFBQWEsY0FBYyxXQUFXO0FBQzNFLGVBQUssYUFBYSxVQUFVLENBQUM7QUFDN0IsY0FBSSxLQUFLLGFBQWEsR0FBRztBQUNyQixpQkFBSyxRQUFRO0FBQ2IsbUJBQU87QUFBQSxVQUNYO0FBQ0EsY0FBSSxDQUFDLEtBQUssWUFBWTtBQUNsQixrQkFBTSxNQUFNLFVBQVUsU0FBUyxDQUFDO0FBQ2hDLGdCQUFJO0FBQ0Esa0JBQUksSUFBSSxZQUFZO0FBQ2hCLHNCQUFNLE1BQU0sYUFBYSxLQUFLLEdBQUcsSUFBSSxVQUFVO0FBQy9DLG9CQUFJLElBQUksV0FBVyxNQUFNLElBQUksV0FBWSxjQUFjLEdBQUk7QUFDdkQsdUJBQUssUUFBUSxDQUFDLElBQUksTUFBTTtBQUFBLGdCQUM1QjtBQUFBLGNBQ0o7QUFBQSxZQUNKLFNBQ08sR0FBRztBQUFBLFlBQ1Y7QUFBQSxVQUNKO0FBQ0EsZUFBSyxlQUFlLFVBQVUsU0FBUyxDQUFDO0FBQ3hDLGVBQUssY0FBYyxVQUFVO0FBQzdCLGlCQUFRLGNBQWM7QUFBQSxRQUMxQjtBQUFBLFFBQ0EsTUFBTSxVQUFVLFFBQVE7QUFDcEIsY0FBSSxLQUFLLGVBQWU7QUFDcEIsbUJBQU8sMkJBQTJCLFVBQVUsTUFBTSxLQUFLLE1BQU0sVUFBVSxNQUFNO0FBQUEsVUFDakY7QUFDQSxjQUFJLFVBQVU7QUFDVixtQkFBTyxJQUFJLFlBQVksS0FBSyxhQUFhLGFBQWEsQ0FBQztBQUFBLFVBQzNEO0FBQ0EsY0FBSSxDQUFDLEtBQUssYUFBYSxZQUFZO0FBQy9CLG1CQUFPO0FBQUEsVUFDWDtBQUNBLGdCQUFNLFVBQVUsSUFBSSxXQUFXLEtBQUssYUFBYSxTQUFTLENBQUM7QUFDM0Qsa0JBQVEsQ0FBQyxJQUFJLEtBQUs7QUFDbEIsa0JBQVEsSUFBSSxLQUFLLGNBQWMsQ0FBQztBQUNoQyxpQkFBTyxRQUFRO0FBQUEsUUFDbkI7QUFBQSxRQUNBLFNBQVM7QUFDTCxpQkFBTztBQUFBLFlBQ0gsR0FBRyxNQUFNLE9BQU87QUFBQSxZQUNoQixZQUFZLEtBQUs7QUFBQSxZQUNqQixlQUFlLEtBQUs7QUFBQSxVQUN4QjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQ0EsK0JBQXlCLE9BQU87QUFHaEMsTUFBTSxZQUFOLGNBQXdCLFVBQVU7QUFBQSxRQUM5QixZQUFZLEVBQUUsVUFBVSxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsR0FBRyxXQUFXLElBQUksQ0FBQyxHQUFHO0FBQzdELGNBQUksSUFBSTtBQUNSLFdBQUMsS0FBSyxXQUFXLG1CQUFtQixRQUFRLE9BQU8sU0FBUyxLQUFNLFdBQVcsZ0JBQWdCLENBQUMsR0FBRyxLQUFLLFdBQVcsV0FBVyxRQUFRLE9BQU8sU0FBUyxTQUFTLEdBQUc7QUFDaEssZ0JBQU07QUFBQSxZQUNGLFNBQVM7QUFBQSxjQUNMLGVBQWUsV0FBVztBQUFBLGNBQzFCLEdBQUc7QUFBQSxZQUNQO0FBQUEsWUFDQSxVQUFVO0FBQUEsY0FDTixHQUFHO0FBQUEsY0FDSCxrQkFBa0IsQ0FBQyxDQUFDLFdBQVc7QUFBQSxZQUNuQztBQUFBLFlBQ0EsR0FBRztBQUFBLFVBQ1AsR0FBRyx3QkFBd0I7QUFDM0IsZUFBSyxRQUFRLFdBQVc7QUFDeEIsZUFBSyxRQUFRLFlBQVk7QUFBQSxRQUM3QjtBQUFBLFFBQ0EsUUFBUSxhQUFhLGFBQWEsYUFBYTtBQUMzQyxlQUFLLFdBQVcsZ0JBQWdCLEtBQUssUUFBUTtBQUM3QyxlQUFLLFdBQVcsbUJBQW1CLEtBQUssU0FBUztBQUNqRCxpQkFBTyxNQUFNLFFBQVEsYUFBYSxhQUFhLFdBQVc7QUFBQSxRQUM5RDtBQUFBLFFBQ0Esa0JBQWtCO0FBQ2QsY0FBSSxLQUFLLFdBQVcsaUJBQWtCLEtBQUssV0FBVyxTQUFTLEtBQUssV0FBVyxNQUFNLFFBQVM7QUFDMUYsbUJBQU8sWUFBWSxVQUFVLGdCQUFnQixLQUFLLElBQUk7QUFBQSxVQUMxRCxPQUNLO0FBQ0Qsa0JBQU0sT0FBTyxDQUFDO0FBQ2Qsa0JBQU0sV0FBVyxLQUFLLFdBQVc7QUFDakMsdUJBQVcsUUFBUSxVQUFVO0FBQ3pCLG1CQUFLLEtBQUssS0FBSyxTQUFTLENBQUMsRUFBRSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQUEsWUFDL0M7QUFDQSxrQkFBTSxVQUFVLEtBQUssS0FBSyxFQUFFO0FBQzVCLG1CQUFPLEdBQUcsS0FBSyxZQUFZLElBQUksTUFBTSxRQUFRLFVBQVUsR0FBRyxRQUFRLFNBQVMsS0FBSyxXQUFXLFVBQVUsQ0FBQztBQUFBLFVBQzFHO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQ1AsT0FBQyxNQUFNO0FBQ0gsa0JBQVUsWUFBWTtBQUFBLE1BQzFCLEdBQUc7QUFDSCxnQkFBVSxPQUFPO0FBMEZqQixNQUFNLHlCQUFOLGNBQXFDLFNBQVMsVUFBVSxFQUFFO0FBQUEsUUFDdEQsWUFBWSxFQUFFLE9BQU8sR0FBRyxXQUFXLElBQUksQ0FBQyxHQUFHO0FBQ3ZDLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxZQUFZO0FBQ2pCLGNBQUksV0FBVyxVQUFVO0FBQ3JCLGlCQUFLLFlBQVk7QUFBQSxVQUNyQjtBQUNBLGNBQUksVUFBVSxRQUFXO0FBQ3JCLGlCQUFLLFdBQVc7QUFBQSxVQUNwQjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFDVixjQUFJLEtBQUssYUFBYSxVQUFVLEdBQUc7QUFDL0IsaUJBQUssU0FBUyxLQUFLLHdDQUF3QztBQUMzRCxpQkFBSyxZQUFZO0FBQ2pCLGlCQUFLLFlBQVk7QUFBQSxVQUNyQixPQUNLO0FBQ0QsaUJBQUssWUFBWTtBQUNqQixnQkFBSSxLQUFLLGFBQWEsU0FBUyxHQUFHO0FBQzlCLG1CQUFLLFlBQW9CLGFBQWEsS0FBSyxJQUFJO0FBQUEsWUFDbkQ7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLFFBQ0EsSUFBSSxTQUFTLEdBQUc7QUFDWixlQUFLLFlBQVk7QUFDakIsZUFBSyxZQUFZO0FBQ2pCLGVBQUssZUFBZSxJQUFJLFdBQW1CLGFBQWEsQ0FBQyxDQUFDO0FBQUEsUUFDOUQ7QUFBQSxRQUNBLElBQUksV0FBVztBQUNYLGlCQUFPLEtBQUs7QUFBQSxRQUNoQjtBQUFBLFFBQ0EsUUFBUSxhQUFhLGFBQWEsYUFBYSxpQkFBaUIsR0FBRztBQUMvRCxnQkFBTU8sVUFBUyxLQUFLLFFBQVEsYUFBYSxhQUFhLFdBQVc7QUFDakUsY0FBSUEsWUFBVztBQUNYLG1CQUFPQTtBQUNYLGdCQUFNLE9BQU8sS0FBSztBQUNsQixjQUFLLEtBQUssQ0FBQyxNQUFNLE1BQVcsS0FBSyxDQUFDLElBQUksU0FBVSxHQUFJO0FBQ2hELGlCQUFLLGVBQWUsS0FBSyxTQUFTLENBQUM7QUFBQSxVQUN2QyxPQUNLO0FBQ0QsZ0JBQUksbUJBQW1CLEdBQUc7QUFDdEIsa0JBQUksS0FBSyxTQUFTLGdCQUFnQjtBQUM5QixvQkFBSyxpQkFBaUIsS0FBSyxTQUFVO0FBQ2pDLG1DQUFpQixLQUFLLFNBQVM7QUFDbkMscUJBQUssZUFBZSxLQUFLLFNBQVMsaUJBQWlCLEtBQUssTUFBTTtBQUFBLGNBQ2xFO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFDQSxpQkFBT0E7QUFBQSxRQUNYO0FBQUEsUUFDQSxNQUFNLFdBQVcsT0FBTztBQUNwQixnQkFBTSxPQUFPLEtBQUs7QUFDbEIsa0JBQVEsTUFBTTtBQUFBLFlBQ1YsTUFBTyxLQUFLLENBQUMsSUFBSSxTQUFVO0FBQ3ZCO0FBQ0ksc0JBQU0sY0FBYyxJQUFJLFdBQVcsS0FBSyxhQUFhLFNBQVMsQ0FBQztBQUMvRCw0QkFBWSxDQUFDLElBQUk7QUFDakIsNEJBQVksSUFBSSxNQUFNLENBQUM7QUFDdkIscUJBQUssZUFBZTtBQUFBLGNBQ3hCO0FBQ0E7QUFBQSxZQUNKLE1BQU8sS0FBSyxDQUFDLE1BQU0sTUFBVyxLQUFLLENBQUMsSUFBSSxTQUFVO0FBQzlDO0FBQ0kscUJBQUssZUFBZSxLQUFLLGFBQWEsU0FBUyxDQUFDO0FBQUEsY0FDcEQ7QUFDQTtBQUFBLFVBQ1I7QUFDQSxpQkFBTyxLQUFLLE1BQU0sUUFBUTtBQUFBLFFBQzlCO0FBQUEsUUFDQSxRQUFRLGFBQWEsYUFBYSxhQUFhO0FBQzNDLGdCQUFNLGVBQWUsTUFBTSxRQUFRLGFBQWEsYUFBYSxXQUFXO0FBQ3hFLGNBQUksaUJBQWlCLElBQUk7QUFDckIsbUJBQU87QUFBQSxVQUNYO0FBQ0EsZUFBSyxZQUFZO0FBQ2pCLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsTUFBTSxVQUFVO0FBQ1osaUJBQU8sV0FDRCxJQUFJLFlBQVksS0FBSyxhQUFhLE1BQU0sSUFDeEMsS0FBSyxhQUFhLE1BQU0sRUFBRTtBQUFBLFFBQ3BDO0FBQUEsUUFDQSxTQUFTO0FBQ0wsaUJBQU87QUFBQSxZQUNILEdBQUcsTUFBTSxPQUFPO0FBQUEsWUFDaEIsVUFBVSxLQUFLO0FBQUEsVUFDbkI7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQ1AsZ0JBQU0sV0FBWSxLQUFLLGFBQWEsU0FBUyxJQUFLO0FBQ2xELGNBQUksU0FBUyxJQUFJLFdBQVksS0FBSyxhQUFhLFNBQVMsSUFBSyxDQUFDO0FBQzlELGNBQUksWUFBWTtBQUNoQixjQUFJO0FBQ0osZ0JBQU0sV0FBVyxLQUFLO0FBQ3RCLGNBQUksU0FBUztBQUNiLGNBQUksT0FBTztBQUNYLG1CQUFTLGFBQWMsU0FBUyxhQUFhLEdBQUksY0FBYyxHQUFHLGNBQWM7QUFDNUUsMEJBQWMsU0FBUyxVQUFVO0FBQ2pDLHFCQUFTLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSztBQUN4QixtQkFBSyxjQUFjLE9BQU8sR0FBRztBQUN6Qix3QkFBUSxXQUFXO0FBQUEsa0JBQ2YsS0FBSztBQUNELDZCQUFTLFFBQVEsT0FBTyxTQUFTLEdBQUcsTUFBTTtBQUMxQyw2QkFBUztBQUNUO0FBQUEsa0JBQ0o7QUFDSSw2QkFBUyxRQUFRLFFBQVEsT0FBTyxTQUFTLENBQUM7QUFBQSxnQkFDbEQ7QUFBQSxjQUNKO0FBQ0E7QUFDQSw4QkFBZ0I7QUFBQSxZQUNwQjtBQUFBLFVBQ0o7QUFDQSxtQkFBUyxJQUFJLEdBQUcsSUFBSSxPQUFPLFFBQVEsS0FBSztBQUNwQyxnQkFBSSxPQUFPLENBQUM7QUFDUixxQkFBTztBQUNYLGdCQUFJO0FBQ0Esd0JBQVUsYUFBYSxPQUFPLE9BQU8sQ0FBQyxDQUFDO0FBQUEsVUFDL0M7QUFDQSxjQUFJLFNBQVM7QUFDVCxzQkFBVSxhQUFhLE9BQU8sQ0FBQztBQUNuQyxpQkFBTztBQUFBLFFBQ1g7QUFBQSxNQUNKO0FBQ0EsYUFBTztBQUNQLDZCQUF1QixPQUFPO0FBQzlCLE9BQUMsTUFBTTtBQUNILGVBQU8sZUFBZSxLQUFLLFdBQVcsWUFBWTtBQUFBLFVBQzlDLEtBQUssU0FBVSxHQUFHO0FBQ2QsaUJBQUssZUFBZSxJQUFJLFdBQVcsQ0FBQztBQUNwQyxpQkFBSyxZQUFZO0FBQUEsVUFDckI7QUFBQSxVQUNBLEtBQUssV0FBWTtBQUNiLG1CQUFPLEtBQUssYUFBYSxNQUFNLEVBQUU7QUFBQSxVQUNyQztBQUFBLFFBQ0osQ0FBQztBQUFBLE1BQ0wsR0FBRztBQUdILE1BQU0sVUFBTixNQUFNLGlCQUFnQixVQUFVO0FBQUEsUUFDNUIsWUFBWSxhQUFhLENBQUMsR0FBRztBQUN6QixnQkFBTSxZQUFZLHNCQUFzQjtBQUN4QyxlQUFLLFFBQVEsV0FBVztBQUN4QixlQUFLLFFBQVEsWUFBWTtBQUFBLFFBQzdCO0FBQUEsUUFDQSxXQUFXO0FBQ1AsdUJBQWE7QUFDYixpQkFBTyxPQUFPLEtBQUssV0FBVyxTQUFTLENBQUM7QUFBQSxRQUM1QztBQUFBLFFBQ0EsT0FBTyxXQUFXLE9BQU87QUFDckIsdUJBQWE7QUFDYixnQkFBTSxjQUFjLE9BQU8sS0FBSztBQUNoQyxnQkFBTSxTQUFTLElBQUksV0FBVztBQUM5QixnQkFBTSxNQUFNLFlBQVksU0FBUyxFQUFFLEVBQUUsUUFBUSxNQUFNLEVBQUU7QUFDckQsZ0JBQU0sT0FBTyxJQUFJLFdBQXFCLGtCQUFRLFFBQVEsR0FBRyxDQUFDO0FBQzFELGNBQUksY0FBYyxHQUFHO0FBQ2pCLGtCQUFNLFFBQVEsSUFBSSxXQUFXLEtBQUssVUFBVSxLQUFLLENBQUMsSUFBSSxNQUFPLElBQUksRUFBRTtBQUNuRSxrQkFBTSxDQUFDLEtBQUs7QUFDWixrQkFBTSxXQUFXLE9BQU8sS0FBZSxrQkFBUSxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzdELGtCQUFNLFlBQVksV0FBVztBQUM3QixrQkFBTSxTQUFtQixnQ0FBc0IsYUFBdUIsa0JBQVEsUUFBUSxVQUFVLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDN0csbUJBQU8sQ0FBQyxLQUFLO0FBQ2IsbUJBQU8sTUFBTSxNQUFNO0FBQUEsVUFDdkIsT0FDSztBQUNELGdCQUFJLEtBQUssQ0FBQyxJQUFJLEtBQU07QUFDaEIscUJBQU8sTUFBTSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUFBLFlBQ3BDO0FBQ0EsbUJBQU8sTUFBTSxJQUFJO0FBQUEsVUFDckI7QUFDQSxnQkFBTSxNQUFNLElBQUksU0FBUTtBQUFBLFlBQ3BCLFVBQVUsT0FBTyxNQUFNO0FBQUEsVUFDM0IsQ0FBQztBQUNELGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsZUFBZTtBQUNYLGdCQUFNLFVBQVUsSUFBSSxTQUFRLEVBQUUsVUFBVSxLQUFLLFdBQVcsYUFBYSxDQUFDO0FBQ3RFLGtCQUFRLFdBQVcsTUFBTTtBQUN6QixpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLGlCQUFpQjtBQUNiLGlCQUFPLElBQUksU0FBUTtBQUFBLFlBQ2YsVUFBVSxLQUFLLFdBQVcsYUFBYSxDQUFDLE1BQU0sSUFDeEMsS0FBSyxXQUFXLGFBQWEsU0FBUyxDQUFDLElBQ3ZDLEtBQUssV0FBVztBQUFBLFVBQzFCLENBQUM7QUFBQSxRQUNMO0FBQUEsUUFDQSxrQkFBa0I7QUFDZCxpQkFBTyxHQUFHLEtBQUssWUFBWSxJQUFJLE1BQU0sS0FBSyxXQUFXLFNBQVMsQ0FBQztBQUFBLFFBQ25FO0FBQUEsTUFDSjtBQUNBLGFBQU87QUFDUCxPQUFDLE1BQU07QUFDSCxrQkFBVSxVQUFVO0FBQUEsTUFDeEIsR0FBRztBQUNILGNBQVEsT0FBTztBQUdmLE1BQU0sYUFBTixjQUF5QixRQUFRO0FBQUEsUUFDN0IsWUFBWSxhQUFhLENBQUMsR0FBRztBQUN6QixnQkFBTSxVQUFVO0FBQ2hCLGVBQUssUUFBUSxXQUFXO0FBQ3hCLGVBQUssUUFBUSxZQUFZO0FBQUEsUUFDN0I7QUFBQSxNQUNKO0FBQ0EsYUFBTztBQUNQLE9BQUMsTUFBTTtBQUNILGtCQUFVLGFBQWE7QUFBQSxNQUMzQixHQUFHO0FBQ0gsaUJBQVcsT0FBTztBQUVsQixNQUFNLHFCQUFOLGNBQWlDLFNBQVMsVUFBVSxFQUFFO0FBQUEsUUFDbEQsWUFBWSxFQUFFLFdBQVcsSUFBSSxhQUFhLE9BQU8sR0FBRyxXQUFXLElBQUksQ0FBQyxHQUFHO0FBQ25FLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxXQUFXO0FBQ2hCLGVBQUssYUFBYTtBQUFBLFFBQ3RCO0FBQUEsUUFDQSxRQUFRLGFBQWEsYUFBYSxhQUFhO0FBQzNDLGNBQUksQ0FBQyxhQUFhO0FBQ2QsbUJBQU87QUFBQSxVQUNYO0FBQ0EsZ0JBQU0sWUFBc0IsZ0NBQXNCLGFBQWEsV0FBVztBQUMxRSxjQUFJLENBQUMsa0JBQWtCLE1BQU0sV0FBVyxhQUFhLFdBQVcsR0FBRztBQUMvRCxtQkFBTztBQUFBLFVBQ1g7QUFDQSxnQkFBTSxZQUFZLFVBQVUsU0FBUyxhQUFhLGNBQWMsV0FBVztBQUMzRSxlQUFLLGVBQWUsSUFBSSxXQUFXLFdBQVc7QUFDOUMsbUJBQVMsSUFBSSxHQUFHLElBQUksYUFBYSxLQUFLO0FBQ2xDLGlCQUFLLGFBQWEsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJO0FBQ3RDLGlCQUFLO0FBQ0wsaUJBQUssVUFBVSxDQUFDLElBQUksU0FBVTtBQUMxQjtBQUFBLFVBQ1I7QUFDQSxnQkFBTSxXQUFXLElBQUksV0FBVyxLQUFLLFdBQVc7QUFDaEQsbUJBQVMsSUFBSSxHQUFHLElBQUksS0FBSyxhQUFhLEtBQUs7QUFDdkMscUJBQVMsQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDO0FBQUEsVUFDckM7QUFDQSxlQUFLLGVBQWU7QUFDcEIsZUFBSyxVQUFVLEtBQUssY0FBYyxDQUFDLElBQUksU0FBVSxHQUFNO0FBQ25ELGlCQUFLLFFBQVE7QUFDYixtQkFBTztBQUFBLFVBQ1g7QUFDQSxjQUFJLEtBQUssYUFBYSxDQUFDLE1BQU07QUFDekIsaUJBQUssU0FBUyxLQUFLLHdDQUF3QztBQUMvRCxjQUFJLEtBQUssZUFBZTtBQUNwQixpQkFBSyxXQUFtQixhQUFhLEtBQUssY0FBYyxDQUFDO0FBQUEsZUFDeEQ7QUFDRCxpQkFBSyxZQUFZO0FBQ2pCLGlCQUFLLFNBQVMsS0FBSyxvQ0FBb0M7QUFBQSxVQUMzRDtBQUNBLGlCQUFRLGNBQWMsS0FBSztBQUFBLFFBQy9CO0FBQUEsUUFDQSxJQUFJLFlBQVksT0FBTztBQUNuQix1QkFBYTtBQUNiLGNBQUksT0FBTyxPQUFPLEtBQUssRUFBRSxTQUFTLENBQUM7QUFDbkMsaUJBQU8sS0FBSyxTQUFTLEdBQUc7QUFDcEIsbUJBQU8sTUFBTTtBQUFBLFVBQ2pCO0FBQ0EsZ0JBQU0sUUFBUSxJQUFJLFdBQVcsS0FBSyxTQUFTLENBQUM7QUFDNUMsbUJBQVMsSUFBSSxHQUFHLElBQUksTUFBTSxRQUFRLEtBQUs7QUFDbkMsa0JBQU0sQ0FBQyxJQUFJLFNBQVMsS0FBSyxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLElBQUksTUFBTSxTQUFTLE1BQU87QUFBQSxVQUMxRjtBQUNBLGVBQUssUUFBUSxNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU07QUFBQSxRQUM5QztBQUFBLFFBQ0EsTUFBTSxVQUFVO0FBQ1osY0FBSSxLQUFLLFdBQVc7QUFDaEIsZ0JBQUk7QUFDQSxxQkFBUSxJQUFJLFlBQVksS0FBSyxhQUFhLFVBQVU7QUFDeEQsa0JBQU0sVUFBVSxLQUFLO0FBQ3JCLGtCQUFNSCxXQUFVLElBQUksV0FBVyxLQUFLLFdBQVc7QUFDL0MscUJBQVMsSUFBSSxHQUFHLElBQUssS0FBSyxjQUFjLEdBQUk7QUFDeEMsY0FBQUEsU0FBUSxDQUFDLElBQUksUUFBUSxDQUFDLElBQUk7QUFDOUIsWUFBQUEsU0FBUSxLQUFLLGNBQWMsQ0FBQyxJQUFJLFFBQVEsS0FBSyxjQUFjLENBQUM7QUFDNUQsbUJBQU9BLFNBQVE7QUFBQSxVQUNuQjtBQUNBLGdCQUFNLGFBQXFCLFdBQVcsS0FBSyxVQUFVLENBQUM7QUFDdEQsY0FBSSxXQUFXLGVBQWUsR0FBRztBQUM3QixpQkFBSyxRQUFRO0FBQ2IsbUJBQU87QUFBQSxVQUNYO0FBQ0EsZ0JBQU0sVUFBVSxJQUFJLFdBQVcsV0FBVyxVQUFVO0FBQ3BELGNBQUksQ0FBQyxVQUFVO0FBQ1gsa0JBQU0sY0FBYyxJQUFJLFdBQVcsVUFBVTtBQUM3QyxrQkFBTSxNQUFNLFdBQVcsYUFBYTtBQUNwQyxxQkFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLO0FBQ3JCLHNCQUFRLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSTtBQUNsQyxvQkFBUSxHQUFHLElBQUksWUFBWSxHQUFHO0FBQUEsVUFDbEM7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLFdBQVc7QUFDUCxjQUFJLFNBQVM7QUFDYixjQUFJLEtBQUs7QUFDTCxxQkFBbUIsa0JBQVEsTUFBTSxLQUFLLFlBQVk7QUFBQSxlQUNqRDtBQUNELGdCQUFJLEtBQUssWUFBWTtBQUNqQixrQkFBSSxXQUFXLEtBQUs7QUFDcEIsa0JBQUksS0FBSyxZQUFZO0FBQ2pCLHlCQUFTO0FBQUEsbUJBQ1I7QUFDRCxvQkFBSSxLQUFLLFlBQVksSUFBSTtBQUNyQiwyQkFBUztBQUNULDhCQUFZO0FBQUEsZ0JBQ2hCLE9BQ0s7QUFDRCwyQkFBUztBQUNULDhCQUFZO0FBQUEsZ0JBQ2hCO0FBQUEsY0FDSjtBQUNBLHdCQUFVLFNBQVMsU0FBUztBQUFBLFlBQ2hDO0FBRUksdUJBQVMsS0FBSyxTQUFTLFNBQVM7QUFBQSxVQUN4QztBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsU0FBUztBQUNMLGlCQUFPO0FBQUEsWUFDSCxHQUFHLE1BQU0sT0FBTztBQUFBLFlBQ2hCLFVBQVUsS0FBSztBQUFBLFlBQ2YsWUFBWSxLQUFLO0FBQUEsVUFDckI7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUNBLHlCQUFtQixPQUFPO0FBRTFCLE1BQU0sa0NBQU4sY0FBOEMsV0FBVztBQUFBLFFBQ3JELFlBQVksRUFBRSxRQUFRLGNBQWMsR0FBRyxXQUFXLElBQUksQ0FBQyxHQUFHO0FBQ3RELGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxRQUFRLENBQUM7QUFDZCxjQUFJLE9BQU87QUFDUCxpQkFBSyxXQUFXLEtBQUs7QUFBQSxVQUN6QjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFFBQVEsYUFBYSxhQUFhLGFBQWE7QUFDM0MsY0FBSSxlQUFlO0FBQ25CLGlCQUFPLGNBQWMsR0FBRztBQUNwQixrQkFBTSxXQUFXLElBQUksbUJBQW1CO0FBQ3hDLDJCQUFlLFNBQVMsUUFBUSxhQUFhLGNBQWMsV0FBVztBQUN0RSxnQkFBSSxpQkFBaUIsSUFBSTtBQUNyQixtQkFBSyxjQUFjO0FBQ25CLG1CQUFLLFFBQVEsU0FBUztBQUN0QixxQkFBTztBQUFBLFlBQ1g7QUFDQSxnQkFBSSxLQUFLLE1BQU0sV0FBVztBQUN0Qix1QkFBUyxhQUFhO0FBQzFCLGlCQUFLLGVBQWUsU0FBUztBQUM3QiwyQkFBZSxTQUFTO0FBQ3hCLGlCQUFLLE1BQU0sS0FBSyxRQUFRO0FBQUEsVUFDNUI7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLE1BQU0sVUFBVTtBQUNaLGdCQUFNLGFBQWEsQ0FBQztBQUNwQixtQkFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLE1BQU0sUUFBUSxLQUFLO0FBQ3hDLGtCQUFNLFdBQVcsS0FBSyxNQUFNLENBQUMsRUFBRSxNQUFNLFFBQVE7QUFDN0MsZ0JBQUksU0FBUyxlQUFlLEdBQUc7QUFDM0IsbUJBQUssUUFBUSxLQUFLLE1BQU0sQ0FBQyxFQUFFO0FBQzNCLHFCQUFPO0FBQUEsWUFDWDtBQUNBLHVCQUFXLEtBQUssUUFBUTtBQUFBLFVBQzVCO0FBQ0EsaUJBQU8sT0FBTyxVQUFVO0FBQUEsUUFDNUI7QUFBQSxRQUNBLFdBQVcsUUFBUTtBQUNmLGVBQUssUUFBUSxDQUFDO0FBQ2QsY0FBSSxPQUFPO0FBQ1gsY0FBSSxPQUFPO0FBQ1gsY0FBSSxNQUFNO0FBQ1YsY0FBSSxPQUFPO0FBQ1gsYUFBRztBQUNDLG1CQUFPLE9BQU8sUUFBUSxLQUFLLElBQUk7QUFDL0IsZ0JBQUksU0FBUztBQUNULG9CQUFNLE9BQU8sVUFBVSxJQUFJO0FBQUE7QUFFM0Isb0JBQU0sT0FBTyxVQUFVLE1BQU0sSUFBSTtBQUNyQyxtQkFBTyxPQUFPO0FBQ2QsZ0JBQUksTUFBTTtBQUNOLG9CQUFNLFdBQVcsS0FBSyxNQUFNLENBQUM7QUFDN0Isa0JBQUksT0FBTztBQUNYLHNCQUFRLFNBQVMsVUFBVTtBQUFBLGdCQUN2QixLQUFLO0FBQ0Q7QUFBQSxnQkFDSixLQUFLO0FBQ0QseUJBQU87QUFDUDtBQUFBLGdCQUNKLEtBQUs7QUFDRCx5QkFBTztBQUNQO0FBQUEsZ0JBQ0o7QUFDSSx1QkFBSyxRQUFRLENBQUM7QUFDZDtBQUFBLGNBQ1I7QUFDQSxvQkFBTSxZQUFZLFNBQVMsS0FBSyxFQUFFO0FBQ2xDLGtCQUFJLE1BQU0sU0FBUztBQUNmO0FBQ0osdUJBQVMsV0FBVyxZQUFZO0FBQ2hDLHFCQUFPO0FBQUEsWUFDWCxPQUNLO0FBQ0Qsb0JBQU0sV0FBVyxJQUFJLG1CQUFtQjtBQUN4QyxrQkFBSSxNQUFNLE9BQU8sa0JBQWtCO0FBQy9CLDZCQUFhO0FBQ2Isc0JBQU0sV0FBVyxPQUFPLEdBQUc7QUFDM0IseUJBQVMsY0FBYztBQUFBLGNBQzNCLE9BQ0s7QUFDRCx5QkFBUyxXQUFXLFNBQVMsS0FBSyxFQUFFO0FBQ3BDLG9CQUFJLE1BQU0sU0FBUyxRQUFRO0FBQ3ZCO0FBQUEsY0FDUjtBQUNBLGtCQUFJLENBQUMsS0FBSyxNQUFNLFFBQVE7QUFDcEIseUJBQVMsYUFBYTtBQUN0Qix1QkFBTztBQUFBLGNBQ1g7QUFDQSxtQkFBSyxNQUFNLEtBQUssUUFBUTtBQUFBLFlBQzVCO0FBQUEsVUFDSixTQUFTLFNBQVM7QUFBQSxRQUN0QjtBQUFBLFFBQ0EsV0FBVztBQUNQLGNBQUksU0FBUztBQUNiLGNBQUksWUFBWTtBQUNoQixtQkFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLE1BQU0sUUFBUSxLQUFLO0FBQ3hDLHdCQUFZLEtBQUssTUFBTSxDQUFDLEVBQUU7QUFDMUIsZ0JBQUksU0FBUyxLQUFLLE1BQU0sQ0FBQyxFQUFFLFNBQVM7QUFDcEMsZ0JBQUksTUFBTTtBQUNOLHVCQUFTLEdBQUcsTUFBTTtBQUN0QixnQkFBSSxXQUFXO0FBQ1gsdUJBQVMsSUFBSSxNQUFNO0FBQ25CLGtCQUFJLEtBQUssTUFBTSxDQUFDLEVBQUU7QUFDZCx5QkFBUyxNQUFNLE1BQU07QUFBQTtBQUVyQiwwQkFBVTtBQUFBLFlBQ2xCO0FBRUksd0JBQVU7QUFBQSxVQUNsQjtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsU0FBUztBQUNMLGdCQUFNLFNBQVM7QUFBQSxZQUNYLEdBQUcsTUFBTSxPQUFPO0FBQUEsWUFDaEIsT0FBTyxLQUFLLFNBQVM7QUFBQSxZQUNyQixVQUFVLENBQUM7QUFBQSxVQUNmO0FBQ0EsbUJBQVMsSUFBSSxHQUFHLElBQUksS0FBSyxNQUFNLFFBQVEsS0FBSztBQUN4QyxtQkFBTyxTQUFTLEtBQUssS0FBSyxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUM7QUFBQSxVQUMvQztBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFDQSxzQ0FBZ0MsT0FBTztBQUd2QyxNQUFNLG1CQUFOLGNBQStCLFVBQVU7QUFBQSxRQUNyQyxZQUFZLGFBQWEsQ0FBQyxHQUFHO0FBQ3pCLGdCQUFNLFlBQVksK0JBQStCO0FBQ2pELGVBQUssUUFBUSxXQUFXO0FBQ3hCLGVBQUssUUFBUSxZQUFZO0FBQUEsUUFDN0I7QUFBQSxRQUNBLFdBQVc7QUFDUCxpQkFBTyxLQUFLLFdBQVcsU0FBUztBQUFBLFFBQ3BDO0FBQUEsUUFDQSxTQUFTLE9BQU87QUFDWixlQUFLLFdBQVcsV0FBVyxLQUFLO0FBQUEsUUFDcEM7QUFBQSxRQUNBLGtCQUFrQjtBQUNkLGlCQUFPLEdBQUcsS0FBSyxZQUFZLElBQUksTUFBTSxLQUFLLFdBQVcsU0FBUyxLQUFLLE9BQU87QUFBQSxRQUM5RTtBQUFBLFFBQ0EsU0FBUztBQUNMLGlCQUFPO0FBQUEsWUFDSCxHQUFHLE1BQU0sT0FBTztBQUFBLFlBQ2hCLE9BQU8sS0FBSyxTQUFTO0FBQUEsVUFDekI7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUNBLGFBQU87QUFDUCxPQUFDLE1BQU07QUFDSCxrQkFBVSxtQkFBbUI7QUFBQSxNQUNqQyxHQUFHO0FBQ0gsdUJBQWlCLE9BQU87QUFFeEIsTUFBTSw2QkFBTixjQUF5QyxTQUFTLGNBQWMsRUFBRTtBQUFBLFFBQzlELFlBQVksRUFBRSxXQUFXLEdBQUcsR0FBRyxXQUFXLElBQUksQ0FBQyxHQUFHO0FBQzlDLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxXQUFXO0FBQUEsUUFDcEI7QUFBQSxRQUNBLFFBQVEsYUFBYSxhQUFhLGFBQWE7QUFDM0MsY0FBSSxnQkFBZ0I7QUFDaEIsbUJBQU87QUFDWCxnQkFBTSxZQUFzQixnQ0FBc0IsYUFBYSxXQUFXO0FBQzFFLGNBQUksQ0FBQyxrQkFBa0IsTUFBTSxXQUFXLGFBQWEsV0FBVztBQUM1RCxtQkFBTztBQUNYLGdCQUFNLFlBQVksVUFBVSxTQUFTLGFBQWEsY0FBYyxXQUFXO0FBQzNFLGVBQUssZUFBZSxJQUFJLFdBQVcsV0FBVztBQUM5QyxtQkFBUyxJQUFJLEdBQUcsSUFBSSxhQUFhLEtBQUs7QUFDbEMsaUJBQUssYUFBYSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUk7QUFDdEMsaUJBQUs7QUFDTCxpQkFBSyxVQUFVLENBQUMsSUFBSSxTQUFVO0FBQzFCO0FBQUEsVUFDUjtBQUNBLGdCQUFNLFdBQVcsSUFBSSxXQUFXLEtBQUssV0FBVztBQUNoRCxtQkFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLGFBQWE7QUFDbEMscUJBQVMsQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDO0FBQ3JDLGVBQUssZUFBZTtBQUNwQixlQUFLLFVBQVUsS0FBSyxjQUFjLENBQUMsSUFBSSxTQUFVLEdBQU07QUFDbkQsaUJBQUssUUFBUTtBQUNiLG1CQUFPO0FBQUEsVUFDWDtBQUNBLGNBQUksS0FBSyxhQUFhLENBQUMsTUFBTTtBQUN6QixpQkFBSyxTQUFTLEtBQUssd0NBQXdDO0FBQy9ELGNBQUksS0FBSyxlQUFlO0FBQ3BCLGlCQUFLLFdBQW1CLGFBQWEsS0FBSyxjQUFjLENBQUM7QUFBQSxlQUN4RDtBQUNELGlCQUFLLFlBQVk7QUFDakIsaUJBQUssU0FBUyxLQUFLLG9DQUFvQztBQUFBLFVBQzNEO0FBQ0EsaUJBQVEsY0FBYyxLQUFLO0FBQUEsUUFDL0I7QUFBQSxRQUNBLE1BQU0sVUFBVTtBQUNaLGNBQUksS0FBSyxXQUFXO0FBQ2hCLGdCQUFJO0FBQ0EscUJBQVEsSUFBSSxZQUFZLEtBQUssYUFBYSxVQUFVO0FBQ3hELGtCQUFNLFVBQVUsS0FBSztBQUNyQixrQkFBTUEsV0FBVSxJQUFJLFdBQVcsS0FBSyxXQUFXO0FBQy9DLHFCQUFTLElBQUksR0FBRyxJQUFLLEtBQUssY0FBYyxHQUFJO0FBQ3hDLGNBQUFBLFNBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJO0FBQzlCLFlBQUFBLFNBQVEsS0FBSyxjQUFjLENBQUMsSUFBSSxRQUFRLEtBQUssY0FBYyxDQUFDO0FBQzVELG1CQUFPQSxTQUFRO0FBQUEsVUFDbkI7QUFDQSxnQkFBTSxhQUFxQixXQUFXLEtBQUssVUFBVSxDQUFDO0FBQ3RELGNBQUksV0FBVyxlQUFlLEdBQUc7QUFDN0IsaUJBQUssUUFBUTtBQUNiLG1CQUFPO0FBQUEsVUFDWDtBQUNBLGdCQUFNLFVBQVUsSUFBSSxXQUFXLFdBQVcsVUFBVTtBQUNwRCxjQUFJLENBQUMsVUFBVTtBQUNYLGtCQUFNLGNBQWMsSUFBSSxXQUFXLFVBQVU7QUFDN0Msa0JBQU0sTUFBTSxXQUFXLGFBQWE7QUFDcEMscUJBQVMsSUFBSSxHQUFHLElBQUksS0FBSztBQUNyQixzQkFBUSxDQUFDLElBQUksWUFBWSxDQUFDLElBQUk7QUFDbEMsb0JBQVEsR0FBRyxJQUFJLFlBQVksR0FBRztBQUFBLFVBQ2xDO0FBQ0EsaUJBQU8sUUFBUTtBQUFBLFFBQ25CO0FBQUEsUUFDQSxXQUFXO0FBQ1AsY0FBSSxTQUFTO0FBQ2IsY0FBSSxLQUFLO0FBQ0wscUJBQW1CLGtCQUFRLE1BQU0sS0FBSyxZQUFZO0FBQUEsZUFDakQ7QUFDRCxxQkFBUyxLQUFLLFNBQVMsU0FBUztBQUFBLFVBQ3BDO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxTQUFTO0FBQ0wsaUJBQU87QUFBQSxZQUNILEdBQUcsTUFBTSxPQUFPO0FBQUEsWUFDaEIsVUFBVSxLQUFLO0FBQUEsVUFDbkI7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUNBLGlDQUEyQixPQUFPO0FBRWxDLE1BQU0sMENBQU4sY0FBc0QsV0FBVztBQUFBLFFBQzdELFlBQVksRUFBRSxRQUFRLGNBQWMsR0FBRyxXQUFXLElBQUksQ0FBQyxHQUFHO0FBQ3RELGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxRQUFRLENBQUM7QUFDZCxjQUFJLE9BQU87QUFDUCxpQkFBSyxXQUFXLEtBQUs7QUFBQSxVQUN6QjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFFBQVEsYUFBYSxhQUFhLGFBQWE7QUFDM0MsY0FBSSxlQUFlO0FBQ25CLGlCQUFPLGNBQWMsR0FBRztBQUNwQixrQkFBTSxXQUFXLElBQUksMkJBQTJCO0FBQ2hELDJCQUFlLFNBQVMsUUFBUSxhQUFhLGNBQWMsV0FBVztBQUN0RSxnQkFBSSxpQkFBaUIsSUFBSTtBQUNyQixtQkFBSyxjQUFjO0FBQ25CLG1CQUFLLFFBQVEsU0FBUztBQUN0QixxQkFBTztBQUFBLFlBQ1g7QUFDQSxpQkFBSyxlQUFlLFNBQVM7QUFDN0IsMkJBQWUsU0FBUztBQUN4QixpQkFBSyxNQUFNLEtBQUssUUFBUTtBQUFBLFVBQzVCO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxNQUFNLFVBQVUsUUFBUTtBQUNwQixnQkFBTSxhQUFhLENBQUM7QUFDcEIsbUJBQVMsSUFBSSxHQUFHLElBQUksS0FBSyxNQUFNLFFBQVEsS0FBSztBQUN4QyxrQkFBTSxXQUFXLEtBQUssTUFBTSxDQUFDLEVBQUUsTUFBTSxRQUFRO0FBQzdDLGdCQUFJLFNBQVMsZUFBZSxHQUFHO0FBQzNCLG1CQUFLLFFBQVEsS0FBSyxNQUFNLENBQUMsRUFBRTtBQUMzQixxQkFBTztBQUFBLFlBQ1g7QUFDQSx1QkFBVyxLQUFLLFFBQVE7QUFBQSxVQUM1QjtBQUNBLGlCQUFPLE9BQU8sVUFBVTtBQUFBLFFBQzVCO0FBQUEsUUFDQSxXQUFXLFFBQVE7QUFDZixlQUFLLFFBQVEsQ0FBQztBQUNkLGNBQUksT0FBTztBQUNYLGNBQUksT0FBTztBQUNYLGNBQUksTUFBTTtBQUNWLGFBQUc7QUFDQyxtQkFBTyxPQUFPLFFBQVEsS0FBSyxJQUFJO0FBQy9CLGdCQUFJLFNBQVM7QUFDVCxvQkFBTSxPQUFPLFVBQVUsSUFBSTtBQUFBO0FBRTNCLG9CQUFNLE9BQU8sVUFBVSxNQUFNLElBQUk7QUFDckMsbUJBQU8sT0FBTztBQUNkLGtCQUFNLFdBQVcsSUFBSSwyQkFBMkI7QUFDaEQscUJBQVMsV0FBVyxTQUFTLEtBQUssRUFBRTtBQUNwQyxnQkFBSSxNQUFNLFNBQVMsUUFBUTtBQUN2QixxQkFBTztBQUNYLGlCQUFLLE1BQU0sS0FBSyxRQUFRO0FBQUEsVUFDNUIsU0FBUyxTQUFTO0FBQ2xCLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsV0FBVztBQUNQLGNBQUksU0FBUztBQUNiLGNBQUksWUFBWTtBQUNoQixtQkFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLE1BQU0sUUFBUSxLQUFLO0FBQ3hDLHdCQUFZLEtBQUssTUFBTSxDQUFDLEVBQUU7QUFDMUIsZ0JBQUksU0FBUyxLQUFLLE1BQU0sQ0FBQyxFQUFFLFNBQVM7QUFDcEMsZ0JBQUksTUFBTTtBQUNOLHVCQUFTLEdBQUcsTUFBTTtBQUN0QixnQkFBSSxXQUFXO0FBQ1gsdUJBQVMsSUFBSSxNQUFNO0FBQ25CLHdCQUFVO0FBQUEsWUFDZDtBQUVJLHdCQUFVO0FBQUEsVUFDbEI7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLFNBQVM7QUFDTCxnQkFBTSxTQUFTO0FBQUEsWUFDWCxHQUFHLE1BQU0sT0FBTztBQUFBLFlBQ2hCLE9BQU8sS0FBSyxTQUFTO0FBQUEsWUFDckIsVUFBVSxDQUFDO0FBQUEsVUFDZjtBQUNBLG1CQUFTLElBQUksR0FBRyxJQUFJLEtBQUssTUFBTSxRQUFRO0FBQ25DLG1CQUFPLFNBQVMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxFQUFFLE9BQU8sQ0FBQztBQUMvQyxpQkFBTztBQUFBLFFBQ1g7QUFBQSxNQUNKO0FBQ0EsOENBQXdDLE9BQU87QUFHL0MsTUFBTSwyQkFBTixjQUF1QyxVQUFVO0FBQUEsUUFDN0MsWUFBWSxhQUFhLENBQUMsR0FBRztBQUN6QixnQkFBTSxZQUFZLHVDQUF1QztBQUN6RCxlQUFLLFFBQVEsV0FBVztBQUN4QixlQUFLLFFBQVEsWUFBWTtBQUFBLFFBQzdCO0FBQUEsUUFDQSxXQUFXO0FBQ1AsaUJBQU8sS0FBSyxXQUFXLFNBQVM7QUFBQSxRQUNwQztBQUFBLFFBQ0EsU0FBUyxPQUFPO0FBQ1osZUFBSyxXQUFXLFdBQVcsS0FBSztBQUFBLFFBQ3BDO0FBQUEsUUFDQSxrQkFBa0I7QUFDZCxpQkFBTyxHQUFHLEtBQUssWUFBWSxJQUFJLE1BQU0sS0FBSyxXQUFXLFNBQVMsS0FBSyxPQUFPO0FBQUEsUUFDOUU7QUFBQSxRQUNBLFNBQVM7QUFDTCxpQkFBTztBQUFBLFlBQ0gsR0FBRyxNQUFNLE9BQU87QUFBQSxZQUNoQixPQUFPLEtBQUssU0FBUztBQUFBLFVBQ3pCO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQ1AsT0FBQyxNQUFNO0FBQ0gsa0JBQVUsMkJBQTJCO0FBQUEsTUFDekMsR0FBRztBQUNILCtCQUF5QixPQUFPO0FBR2hDLE1BQU0sV0FBTixjQUF1QixZQUFZO0FBQUEsUUFDL0IsWUFBWSxhQUFhLENBQUMsR0FBRztBQUN6QixnQkFBTSxVQUFVO0FBQ2hCLGVBQUssUUFBUSxXQUFXO0FBQ3hCLGVBQUssUUFBUSxZQUFZO0FBQUEsUUFDN0I7QUFBQSxNQUNKO0FBQ0EsYUFBTztBQUNQLE9BQUMsTUFBTTtBQUNILGtCQUFVLFdBQVc7QUFBQSxNQUN6QixHQUFHO0FBQ0gsZUFBUyxPQUFPO0FBR2hCLE1BQU1ILE9BQU4sY0FBa0IsWUFBWTtBQUFBLFFBQzFCLFlBQVksYUFBYSxDQUFDLEdBQUc7QUFDekIsZ0JBQU0sVUFBVTtBQUNoQixlQUFLLFFBQVEsV0FBVztBQUN4QixlQUFLLFFBQVEsWUFBWTtBQUFBLFFBQzdCO0FBQUEsTUFDSjtBQUNBLGFBQU9BO0FBQ1AsT0FBQyxNQUFNO0FBQ0gsa0JBQVUsTUFBTTtBQUFBLE1BQ3BCLEdBQUc7QUFDSCxNQUFBQSxLQUFJLE9BQU87QUFFWCxNQUFNLHdCQUFOLGNBQW9DLFNBQVMsVUFBVSxFQUFFO0FBQUEsUUFDckQsWUFBWSxFQUFFLEdBQUcsV0FBVyxJQUFJLENBQUMsR0FBRztBQUNoQyxnQkFBTSxVQUFVO0FBQ2hCLGVBQUssWUFBWTtBQUNqQixlQUFLLFFBQVE7QUFBQSxRQUNqQjtBQUFBLFFBQ0EsU0FBUztBQUNMLGlCQUFPO0FBQUEsWUFDSCxHQUFHLE1BQU0sT0FBTztBQUFBLFlBQ2hCLE9BQU8sS0FBSztBQUFBLFVBQ2hCO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFDQSw0QkFBc0IsT0FBTztBQUU3QixNQUFNLDhCQUFOLGNBQTBDLHNCQUFzQjtBQUFBLE1BQ2hFO0FBQ0Esa0NBQTRCLE9BQU87QUFFbkMsTUFBTSx5QkFBTixjQUFxQyxnQkFBZ0I7QUFBQSxRQUNqRCxZQUFZLEVBQUUsR0FBRyxXQUFXLElBQUksQ0FBQyxHQUFHO0FBQ2hDLGdCQUFNLFlBQVksMkJBQTJCO0FBQUEsUUFDakQ7QUFBQSxRQUNBLFdBQVcsYUFBYTtBQUNwQixlQUFLLFdBQVcsUUFBUSxPQUFPLGFBQWEsTUFBTSxNQUFnQixnQ0FBc0IsYUFBYSxXQUFXLENBQUM7QUFBQSxRQUNySDtBQUFBLFFBQ0EsV0FBVyxhQUFhO0FBQ3BCLGdCQUFNLFNBQVMsWUFBWTtBQUMzQixnQkFBTSxPQUFPLEtBQUssV0FBVyxlQUFlLElBQUksV0FBVyxNQUFNO0FBQ2pFLG1CQUFTLElBQUksR0FBRyxJQUFJLFFBQVE7QUFDeEIsaUJBQUssQ0FBQyxJQUFJLFlBQVksV0FBVyxDQUFDO0FBQ3RDLGVBQUssV0FBVyxRQUFRO0FBQUEsUUFDNUI7QUFBQSxNQUNKO0FBQ0EsNkJBQXVCLE9BQU87QUFFOUIsTUFBTSw0QkFBTixjQUF3Qyx1QkFBdUI7QUFBQSxRQUMzRCxXQUFXLGFBQWE7QUFDcEIsZUFBSyxXQUFXLGVBQXlCLGdDQUFzQixhQUFhLFdBQVc7QUFDdkYsY0FBSTtBQUNBLGlCQUFLLFdBQVcsUUFBa0Isa0JBQVEsYUFBYSxXQUFXO0FBQUEsVUFDdEUsU0FDTyxJQUFJO0FBQ1AsaUJBQUssU0FBUyxLQUFLLHNDQUFzQyxFQUFFLG9CQUFvQjtBQUMvRSxpQkFBSyxXQUFXLFFBQWtCLGtCQUFRLFNBQVMsV0FBVztBQUFBLFVBQ2xFO0FBQUEsUUFDSjtBQUFBLFFBQ0EsV0FBVyxhQUFhO0FBQ3BCLGVBQUssV0FBVyxlQUFlLElBQUksV0FBcUIsa0JBQVEsZUFBZSxXQUFXLENBQUM7QUFDM0YsZUFBSyxXQUFXLFFBQVE7QUFBQSxRQUM1QjtBQUFBLE1BQ0o7QUFDQSxnQ0FBMEIsT0FBTztBQUdqQyxNQUFNLGFBQU4sY0FBeUIsMEJBQTBCO0FBQUEsUUFDL0MsWUFBWSxhQUFhLENBQUMsR0FBRztBQUN6QixnQkFBTSxVQUFVO0FBQ2hCLGVBQUssUUFBUSxXQUFXO0FBQ3hCLGVBQUssUUFBUSxZQUFZO0FBQUEsUUFDN0I7QUFBQSxNQUNKO0FBQ0EsYUFBTztBQUNQLE9BQUMsTUFBTTtBQUNILGtCQUFVLGFBQWE7QUFBQSxNQUMzQixHQUFHO0FBQ0gsaUJBQVcsT0FBTztBQUVsQixNQUFNLDJCQUFOLGNBQXVDLHVCQUF1QjtBQUFBLFFBQzFELFdBQVcsYUFBYTtBQUNwQixlQUFLLFdBQVcsUUFBa0Isa0JBQVEsY0FBYyxXQUFXO0FBQ25FLGVBQUssV0FBVyxlQUF5QixnQ0FBc0IsYUFBYSxXQUFXO0FBQUEsUUFDM0Y7QUFBQSxRQUNBLFdBQVcsYUFBYTtBQUNwQixlQUFLLFdBQVcsUUFBUTtBQUN4QixlQUFLLFdBQVcsZUFBZSxJQUFJLFdBQXFCLGtCQUFRLGdCQUFnQixXQUFXLENBQUM7QUFBQSxRQUNoRztBQUFBLE1BQ0o7QUFDQSwrQkFBeUIsT0FBTztBQUdoQyxNQUFNLFlBQU4sY0FBd0IseUJBQXlCO0FBQUEsUUFDN0MsWUFBWSxFQUFFLEdBQUcsV0FBVyxJQUFJLENBQUMsR0FBRztBQUNoQyxnQkFBTSxVQUFVO0FBQ2hCLGVBQUssUUFBUSxXQUFXO0FBQ3hCLGVBQUssUUFBUSxZQUFZO0FBQUEsUUFDN0I7QUFBQSxNQUNKO0FBQ0EsYUFBTztBQUNQLE9BQUMsTUFBTTtBQUNILGtCQUFVLFlBQVk7QUFBQSxNQUMxQixHQUFHO0FBQ0gsZ0JBQVUsT0FBTztBQUVqQixNQUFNLGlDQUFOLGNBQTZDLHVCQUF1QjtBQUFBLFFBQ2hFLFdBQVcsYUFBYTtBQUNwQixnQkFBTSxhQUFhLFlBQVksT0FBTyxXQUFXLElBQUksWUFBWSxNQUFNLEVBQUUsU0FBUyxZQUFZLE1BQU0sQ0FBQztBQUNyRyxnQkFBTSxZQUFZLElBQUksV0FBVyxVQUFVO0FBQzNDLG1CQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLLEdBQUc7QUFDMUMsc0JBQVUsQ0FBQyxJQUFJLFVBQVUsSUFBSSxDQUFDO0FBQzlCLHNCQUFVLElBQUksQ0FBQyxJQUFJLFVBQVUsSUFBSSxDQUFDO0FBQ2xDLHNCQUFVLElBQUksQ0FBQyxJQUFJO0FBQ25CLHNCQUFVLElBQUksQ0FBQyxJQUFJO0FBQUEsVUFDdkI7QUFDQSxlQUFLLFdBQVcsUUFBUSxPQUFPLGFBQWEsTUFBTSxNQUFNLElBQUksWUFBWSxVQUFVLENBQUM7QUFBQSxRQUN2RjtBQUFBLFFBQ0EsV0FBVyxhQUFhO0FBQ3BCLGdCQUFNLFlBQVksWUFBWTtBQUM5QixnQkFBTSxlQUFlLEtBQUssV0FBVyxlQUFlLElBQUksV0FBVyxZQUFZLENBQUM7QUFDaEYsbUJBQVMsSUFBSSxHQUFHLElBQUksV0FBVyxLQUFLO0FBQ2hDLGtCQUFNLFVBQWtCLFdBQVcsWUFBWSxXQUFXLENBQUMsR0FBRyxDQUFDO0FBQy9ELGtCQUFNLFdBQVcsSUFBSSxXQUFXLE9BQU87QUFDdkMsZ0JBQUksU0FBUyxTQUFTO0FBQ2xCO0FBQ0osa0JBQU0sTUFBTSxJQUFJLFNBQVM7QUFDekIscUJBQVMsSUFBSyxTQUFTLFNBQVMsR0FBSSxLQUFLLEdBQUc7QUFDeEMsMkJBQWEsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQztBQUFBLFVBQ2xEO0FBQ0EsZUFBSyxXQUFXLFFBQVE7QUFBQSxRQUM1QjtBQUFBLE1BQ0o7QUFDQSxxQ0FBK0IsT0FBTztBQUd0QyxNQUFNLGtCQUFOLGNBQThCLCtCQUErQjtBQUFBLFFBQ3pELFlBQVksRUFBRSxHQUFHLFdBQVcsSUFBSSxDQUFDLEdBQUc7QUFDaEMsZ0JBQU0sVUFBVTtBQUNoQixlQUFLLFFBQVEsV0FBVztBQUN4QixlQUFLLFFBQVEsWUFBWTtBQUFBLFFBQzdCO0FBQUEsTUFDSjtBQUNBLGFBQU87QUFDUCxPQUFDLE1BQU07QUFDSCxrQkFBVSxrQkFBa0I7QUFBQSxNQUNoQyxHQUFHO0FBQ0gsc0JBQWdCLE9BQU87QUFHdkIsTUFBTSxnQkFBTixjQUE0Qix1QkFBdUI7QUFBQSxRQUMvQyxZQUFZLGFBQWEsQ0FBQyxHQUFHO0FBQ3pCLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxRQUFRLFdBQVc7QUFDeEIsZUFBSyxRQUFRLFlBQVk7QUFBQSxRQUM3QjtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQ1AsT0FBQyxNQUFNO0FBQ0gsa0JBQVUsZ0JBQWdCO0FBQUEsTUFDOUIsR0FBRztBQUNILG9CQUFjLE9BQU87QUFHckIsTUFBTSxrQkFBTixjQUE4Qix1QkFBdUI7QUFBQSxRQUNqRCxZQUFZLGFBQWEsQ0FBQyxHQUFHO0FBQ3pCLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxRQUFRLFdBQVc7QUFDeEIsZUFBSyxRQUFRLFlBQVk7QUFBQSxRQUM3QjtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQ1AsT0FBQyxNQUFNO0FBQ0gsa0JBQVUsa0JBQWtCO0FBQUEsTUFDaEMsR0FBRztBQUNILHNCQUFnQixPQUFPO0FBR3ZCLE1BQU0sZ0JBQU4sY0FBNEIsdUJBQXVCO0FBQUEsUUFDL0MsWUFBWSxhQUFhLENBQUMsR0FBRztBQUN6QixnQkFBTSxVQUFVO0FBQ2hCLGVBQUssUUFBUSxXQUFXO0FBQ3hCLGVBQUssUUFBUSxZQUFZO0FBQUEsUUFDN0I7QUFBQSxNQUNKO0FBQ0EsYUFBTztBQUNQLE9BQUMsTUFBTTtBQUNILGtCQUFVLGdCQUFnQjtBQUFBLE1BQzlCLEdBQUc7QUFDSCxvQkFBYyxPQUFPO0FBR3JCLE1BQU0saUJBQU4sY0FBNkIsdUJBQXVCO0FBQUEsUUFDaEQsWUFBWSxhQUFhLENBQUMsR0FBRztBQUN6QixnQkFBTSxVQUFVO0FBQ2hCLGVBQUssUUFBUSxXQUFXO0FBQ3hCLGVBQUssUUFBUSxZQUFZO0FBQUEsUUFDN0I7QUFBQSxNQUNKO0FBQ0EsYUFBTztBQUNQLE9BQUMsTUFBTTtBQUNILGtCQUFVLGlCQUFpQjtBQUFBLE1BQy9CLEdBQUc7QUFDSCxxQkFBZSxPQUFPO0FBR3RCLE1BQU0sWUFBTixjQUF3Qix1QkFBdUI7QUFBQSxRQUMzQyxZQUFZLGFBQWEsQ0FBQyxHQUFHO0FBQ3pCLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxRQUFRLFdBQVc7QUFDeEIsZUFBSyxRQUFRLFlBQVk7QUFBQSxRQUM3QjtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQ1AsT0FBQyxNQUFNO0FBQ0gsa0JBQVUsWUFBWTtBQUFBLE1BQzFCLEdBQUc7QUFDSCxnQkFBVSxPQUFPO0FBR2pCLE1BQU0sZ0JBQU4sY0FBNEIsdUJBQXVCO0FBQUEsUUFDL0MsWUFBWSxhQUFhLENBQUMsR0FBRztBQUN6QixnQkFBTSxVQUFVO0FBQ2hCLGVBQUssUUFBUSxXQUFXO0FBQ3hCLGVBQUssUUFBUSxZQUFZO0FBQUEsUUFDN0I7QUFBQSxNQUNKO0FBQ0EsYUFBTztBQUNQLE9BQUMsTUFBTTtBQUNILGtCQUFVLGdCQUFnQjtBQUFBLE1BQzlCLEdBQUc7QUFDSCxvQkFBYyxPQUFPO0FBR3JCLE1BQU0sZ0JBQU4sY0FBNEIsdUJBQXVCO0FBQUEsUUFDL0MsWUFBWSxhQUFhLENBQUMsR0FBRztBQUN6QixnQkFBTSxVQUFVO0FBQ2hCLGVBQUssUUFBUSxXQUFXO0FBQ3hCLGVBQUssUUFBUSxZQUFZO0FBQUEsUUFDN0I7QUFBQSxNQUNKO0FBQ0EsYUFBTztBQUNQLE9BQUMsTUFBTTtBQUNILGtCQUFVLGdCQUFnQjtBQUFBLE1BQzlCLEdBQUc7QUFDSCxvQkFBYyxPQUFPO0FBR3JCLE1BQU0sZ0JBQU4sY0FBNEIsdUJBQXVCO0FBQUEsUUFDL0MsWUFBWSxhQUFhLENBQUMsR0FBRztBQUN6QixnQkFBTSxVQUFVO0FBQ2hCLGVBQUssUUFBUSxXQUFXO0FBQ3hCLGVBQUssUUFBUSxZQUFZO0FBQUEsUUFDN0I7QUFBQSxNQUNKO0FBQ0EsYUFBTztBQUNQLE9BQUMsTUFBTTtBQUNILGtCQUFVLGdCQUFnQjtBQUFBLE1BQzlCLEdBQUc7QUFDSCxvQkFBYyxPQUFPO0FBR3JCLE1BQU0sa0JBQU4sY0FBOEIsdUJBQXVCO0FBQUEsUUFDakQsWUFBWSxhQUFhLENBQUMsR0FBRztBQUN6QixnQkFBTSxVQUFVO0FBQ2hCLGVBQUssUUFBUSxXQUFXO0FBQ3hCLGVBQUssUUFBUSxZQUFZO0FBQUEsUUFDN0I7QUFBQSxNQUNKO0FBQ0EsYUFBTztBQUNQLE9BQUMsTUFBTTtBQUNILGtCQUFVLGtCQUFrQjtBQUFBLE1BQ2hDLEdBQUc7QUFDSCxzQkFBZ0IsT0FBTztBQUd2QixNQUFNLFVBQU4sY0FBc0IsY0FBYztBQUFBLFFBQ2hDLFlBQVksRUFBRSxPQUFPLFdBQVcsR0FBRyxXQUFXLElBQUksQ0FBQyxHQUFHO0FBQ2xELGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxPQUFPO0FBQ1osZUFBSyxRQUFRO0FBQ2IsZUFBSyxNQUFNO0FBQ1gsZUFBSyxPQUFPO0FBQ1osZUFBSyxTQUFTO0FBQ2QsZUFBSyxTQUFTO0FBQ2QsY0FBSSxPQUFPO0FBQ1AsaUJBQUssV0FBVyxLQUFLO0FBQ3JCLGlCQUFLLFdBQVcsZUFBZSxJQUFJLFdBQVcsTUFBTSxNQUFNO0FBQzFELHFCQUFTLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUTtBQUM5QixtQkFBSyxXQUFXLGFBQWEsQ0FBQyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQUEsVUFDNUQ7QUFDQSxjQUFJLFdBQVc7QUFDWCxpQkFBSyxTQUFTLFNBQVM7QUFDdkIsaUJBQUssV0FBVyxlQUFlLElBQUksV0FBVyxLQUFLLFNBQVMsQ0FBQztBQUFBLFVBQ2pFO0FBQ0EsZUFBSyxRQUFRLFdBQVc7QUFDeEIsZUFBSyxRQUFRLFlBQVk7QUFBQSxRQUM3QjtBQUFBLFFBQ0EsV0FBVyxhQUFhO0FBQ3BCLGVBQUssV0FBVyxPQUFPLGFBQWEsTUFBTSxNQUFnQixnQ0FBc0IsYUFBYSxXQUFXLENBQUMsQ0FBQztBQUFBLFFBQzlHO0FBQUEsUUFDQSxXQUFXO0FBQ1AsZ0JBQU0sTUFBTSxLQUFLLFNBQVM7QUFDMUIsZ0JBQU0sU0FBUyxJQUFJLFlBQVksSUFBSSxNQUFNO0FBQ3pDLGdCQUFNLE9BQU8sSUFBSSxXQUFXLE1BQU07QUFDbEMsbUJBQVMsSUFBSSxHQUFHLElBQUksSUFBSSxRQUFRO0FBQzVCLGlCQUFLLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQztBQUM5QixpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLFNBQVMsV0FBVztBQUNoQixlQUFLLE9BQU8sVUFBVSxlQUFlO0FBQ3JDLGVBQUssUUFBUSxVQUFVLFlBQVksSUFBSTtBQUN2QyxlQUFLLE1BQU0sVUFBVSxXQUFXO0FBQ2hDLGVBQUssT0FBTyxVQUFVLFlBQVk7QUFDbEMsZUFBSyxTQUFTLFVBQVUsY0FBYztBQUN0QyxlQUFLLFNBQVMsVUFBVSxjQUFjO0FBQUEsUUFDMUM7QUFBQSxRQUNBLFNBQVM7QUFDTCxpQkFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLEtBQUssTUFBTSxLQUFLLFFBQVEsR0FBRyxLQUFLLEtBQUssS0FBSyxNQUFNLEtBQUssUUFBUSxLQUFLLE1BQU0sQ0FBQztBQUFBLFFBQ3ZHO0FBQUEsUUFDQSxXQUFXLGFBQWE7QUFDcEIsZ0JBQU0sU0FBUztBQUNmLGdCQUFNLGNBQWMsT0FBTyxLQUFLLFdBQVc7QUFDM0MsY0FBSSxnQkFBZ0IsTUFBTTtBQUN0QixpQkFBSyxRQUFRO0FBQ2I7QUFBQSxVQUNKO0FBQ0EsZ0JBQU0sT0FBTyxTQUFTLFlBQVksQ0FBQyxHQUFHLEVBQUU7QUFDeEMsY0FBSSxRQUFRO0FBQ1IsaUJBQUssT0FBTyxPQUFPO0FBQUE7QUFFbkIsaUJBQUssT0FBTyxNQUFPO0FBQ3ZCLGVBQUssUUFBUSxTQUFTLFlBQVksQ0FBQyxHQUFHLEVBQUU7QUFDeEMsZUFBSyxNQUFNLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRTtBQUN0QyxlQUFLLE9BQU8sU0FBUyxZQUFZLENBQUMsR0FBRyxFQUFFO0FBQ3ZDLGVBQUssU0FBUyxTQUFTLFlBQVksQ0FBQyxHQUFHLEVBQUU7QUFDekMsZUFBSyxTQUFTLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRTtBQUFBLFFBQzdDO0FBQUEsUUFDQSxTQUFTLFdBQVcsT0FBTztBQUN2QixjQUFJLGFBQWEsT0FBTztBQUNwQixrQkFBTSxjQUFjLElBQUksTUFBTSxDQUFDO0FBQy9CLHdCQUFZLENBQUMsSUFBWSxVQUFZLEtBQUssT0FBTyxNQUFTLEtBQUssT0FBTyxPQUFTLEtBQUssT0FBTyxLQUFRLENBQUM7QUFDcEcsd0JBQVksQ0FBQyxJQUFZLFVBQVUsS0FBSyxPQUFPLENBQUM7QUFDaEQsd0JBQVksQ0FBQyxJQUFZLFVBQVUsS0FBSyxLQUFLLENBQUM7QUFDOUMsd0JBQVksQ0FBQyxJQUFZLFVBQVUsS0FBSyxNQUFNLENBQUM7QUFDL0Msd0JBQVksQ0FBQyxJQUFZLFVBQVUsS0FBSyxRQUFRLENBQUM7QUFDakQsd0JBQVksQ0FBQyxJQUFZLFVBQVUsS0FBSyxRQUFRLENBQUM7QUFDakQsd0JBQVksQ0FBQyxJQUFJO0FBQ2pCLG1CQUFPLFlBQVksS0FBSyxFQUFFO0FBQUEsVUFDOUI7QUFDQSxpQkFBTyxNQUFNLFNBQVMsUUFBUTtBQUFBLFFBQ2xDO0FBQUEsUUFDQSxrQkFBa0I7QUFDZCxpQkFBTyxHQUFHLEtBQUssWUFBWSxJQUFJLE1BQU0sS0FBSyxPQUFPLEVBQUUsWUFBWSxDQUFDO0FBQUEsUUFDcEU7QUFBQSxRQUNBLFNBQVM7QUFDTCxpQkFBTztBQUFBLFlBQ0gsR0FBRyxNQUFNLE9BQU87QUFBQSxZQUNoQixNQUFNLEtBQUs7QUFBQSxZQUNYLE9BQU8sS0FBSztBQUFBLFlBQ1osS0FBSyxLQUFLO0FBQUEsWUFDVixNQUFNLEtBQUs7QUFBQSxZQUNYLFFBQVEsS0FBSztBQUFBLFlBQ2IsUUFBUSxLQUFLO0FBQUEsVUFDakI7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUNBLGFBQU87QUFDUCxPQUFDLE1BQU07QUFDSCxrQkFBVSxVQUFVO0FBQUEsTUFDeEIsR0FBRztBQUNILGNBQVEsT0FBTztBQUdmLE1BQU0sa0JBQU4sY0FBOEIsUUFBUTtBQUFBLFFBQ2xDLFlBQVksYUFBYSxDQUFDLEdBQUc7QUFDekIsY0FBSTtBQUNKLGdCQUFNLFVBQVU7QUFDaEIsV0FBQyxLQUFLLEtBQUssaUJBQWlCLFFBQVEsT0FBTyxTQUFTLEtBQU0sS0FBSyxjQUFjO0FBQzdFLGVBQUssUUFBUSxXQUFXO0FBQ3hCLGVBQUssUUFBUSxZQUFZO0FBQUEsUUFDN0I7QUFBQSxRQUNBLFNBQVMsV0FBVztBQUNoQixnQkFBTSxTQUFTLFNBQVM7QUFDeEIsZUFBSyxjQUFjLFVBQVUsbUJBQW1CO0FBQUEsUUFDcEQ7QUFBQSxRQUNBLFNBQVM7QUFDTCxpQkFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLEtBQUssTUFBTSxLQUFLLFFBQVEsR0FBRyxLQUFLLEtBQUssS0FBSyxNQUFNLEtBQUssUUFBUSxLQUFLLFFBQVEsS0FBSyxXQUFXLENBQUM7QUFBQSxRQUN6SDtBQUFBLFFBQ0EsV0FBVyxhQUFhO0FBQ3BCLGNBQUksUUFBUTtBQUNaLGNBQUksYUFBYTtBQUNqQixjQUFJLGlCQUFpQjtBQUNyQixjQUFJLGVBQWU7QUFDbkIsY0FBSTtBQUNKLGNBQUksaUJBQWlCO0FBQ3JCLGNBQUksbUJBQW1CO0FBQ3ZCLGNBQUksWUFBWSxZQUFZLFNBQVMsQ0FBQyxNQUFNLEtBQUs7QUFDN0MseUJBQWEsWUFBWSxVQUFVLEdBQUcsWUFBWSxTQUFTLENBQUM7QUFDNUQsb0JBQVE7QUFBQSxVQUNaLE9BQ0s7QUFDRCxrQkFBTSxTQUFTLElBQUksT0FBTyxZQUFZLFlBQVksU0FBUyxDQUFDLENBQUM7QUFDN0QsZ0JBQUksTUFBTSxPQUFPLFFBQVEsQ0FBQztBQUN0QixvQkFBTSxJQUFJLE1BQU0sbUNBQW1DO0FBQ3ZELHlCQUFhO0FBQUEsVUFDakI7QUFDQSxjQUFJLE9BQU87QUFDUCxnQkFBSSxXQUFXLFFBQVEsR0FBRyxNQUFNO0FBQzVCLG9CQUFNLElBQUksTUFBTSxtQ0FBbUM7QUFDdkQsZ0JBQUksV0FBVyxRQUFRLEdBQUcsTUFBTTtBQUM1QixvQkFBTSxJQUFJLE1BQU0sbUNBQW1DO0FBQUEsVUFDM0QsT0FDSztBQUNELGdCQUFJLGFBQWE7QUFDakIsZ0JBQUkscUJBQXFCLFdBQVcsUUFBUSxHQUFHO0FBQy9DLGdCQUFJLG1CQUFtQjtBQUN2QixnQkFBSSx1QkFBdUIsSUFBSTtBQUMzQixtQ0FBcUIsV0FBVyxRQUFRLEdBQUc7QUFDM0MsMkJBQWE7QUFBQSxZQUNqQjtBQUNBLGdCQUFJLHVCQUF1QixJQUFJO0FBQzNCLGlDQUFtQixXQUFXLFVBQVUscUJBQXFCLENBQUM7QUFDOUQsMkJBQWEsV0FBVyxVQUFVLEdBQUcsa0JBQWtCO0FBQ3ZELGtCQUFLLGlCQUFpQixXQUFXLEtBQU8saUJBQWlCLFdBQVc7QUFDaEUsc0JBQU0sSUFBSSxNQUFNLG1DQUFtQztBQUN2RCxrQkFBSSxTQUFTLFNBQVMsaUJBQWlCLFVBQVUsR0FBRyxDQUFDLEdBQUcsRUFBRTtBQUMxRCxrQkFBSSxNQUFNLE9BQU8sUUFBUSxDQUFDO0FBQ3RCLHNCQUFNLElBQUksTUFBTSxtQ0FBbUM7QUFDdkQsK0JBQWlCLGFBQWE7QUFDOUIsa0JBQUksaUJBQWlCLFdBQVcsR0FBRztBQUMvQix5QkFBUyxTQUFTLGlCQUFpQixVQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUU7QUFDdEQsb0JBQUksTUFBTSxPQUFPLFFBQVEsQ0FBQztBQUN0Qix3QkFBTSxJQUFJLE1BQU0sbUNBQW1DO0FBQ3ZELG1DQUFtQixhQUFhO0FBQUEsY0FDcEM7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUNBLGNBQUksd0JBQXdCLFdBQVcsUUFBUSxHQUFHO0FBQ2xELGNBQUksMEJBQTBCO0FBQzFCLG9DQUF3QixXQUFXLFFBQVEsR0FBRztBQUNsRCxjQUFJLDBCQUEwQixJQUFJO0FBQzlCLGtCQUFNLG9CQUFvQixJQUFJLE9BQU8sSUFBSSxXQUFXLFVBQVUscUJBQXFCLENBQUMsRUFBRTtBQUN0RixnQkFBSSxNQUFNLGtCQUFrQixRQUFRLENBQUM7QUFDakMsb0JBQU0sSUFBSSxNQUFNLG1DQUFtQztBQUN2RCwyQkFBZSxrQkFBa0IsUUFBUTtBQUN6Qyw2QkFBaUIsV0FBVyxVQUFVLEdBQUcscUJBQXFCO0FBQUEsVUFDbEU7QUFFSSw2QkFBaUI7QUFDckIsa0JBQVEsTUFBTTtBQUFBLFlBQ1YsS0FBTSxlQUFlLFdBQVc7QUFDNUIsdUJBQVM7QUFDVCxrQkFBSSwwQkFBMEI7QUFDMUIsc0JBQU0sSUFBSSxNQUFNLG1DQUFtQztBQUN2RDtBQUFBLFlBQ0osS0FBTSxlQUFlLFdBQVc7QUFDNUIsdUJBQVM7QUFDVCxrQkFBSSwwQkFBMEIsSUFBSTtBQUM5QixvQkFBSSxpQkFBaUIsS0FBSztBQUMxQixxQkFBSyxTQUFTLEtBQUssTUFBTSxjQUFjO0FBQ3ZDLGlDQUFpQixNQUFNLGlCQUFpQixLQUFLO0FBQzdDLHFCQUFLLFNBQVMsS0FBSyxNQUFNLGNBQWM7QUFDdkMsaUNBQWlCLE9BQVEsaUJBQWlCLEtBQUs7QUFDL0MscUJBQUssY0FBYyxLQUFLLE1BQU0sY0FBYztBQUFBLGNBQ2hEO0FBQ0E7QUFBQSxZQUNKLEtBQU0sZUFBZSxXQUFXO0FBQzVCLHVCQUFTO0FBQ1Qsa0JBQUksMEJBQTBCLElBQUk7QUFDOUIsb0JBQUksaUJBQWlCLEtBQUs7QUFDMUIscUJBQUssU0FBUyxLQUFLLE1BQU0sY0FBYztBQUN2QyxpQ0FBaUIsT0FBUSxpQkFBaUIsS0FBSztBQUMvQyxxQkFBSyxjQUFjLEtBQUssTUFBTSxjQUFjO0FBQUEsY0FDaEQ7QUFDQTtBQUFBLFlBQ0osS0FBTSxlQUFlLFdBQVc7QUFDNUIsdUJBQVM7QUFDVCxrQkFBSSwwQkFBMEIsSUFBSTtBQUM5QixzQkFBTSxpQkFBaUIsTUFBTztBQUM5QixxQkFBSyxjQUFjLEtBQUssTUFBTSxjQUFjO0FBQUEsY0FDaEQ7QUFDQTtBQUFBLFlBQ0o7QUFDSSxvQkFBTSxJQUFJLE1BQU0sbUNBQW1DO0FBQUEsVUFDM0Q7QUFDQSxnQkFBTSxjQUFjLE9BQU8sS0FBSyxjQUFjO0FBQzlDLGNBQUksZ0JBQWdCO0FBQ2hCLGtCQUFNLElBQUksTUFBTSxtQ0FBbUM7QUFDdkQsbUJBQVMsSUFBSSxHQUFHLElBQUksWUFBWSxRQUFRLEtBQUs7QUFDekMsb0JBQVEsR0FBRztBQUFBLGNBQ1AsS0FBSztBQUNELHFCQUFLLE9BQU8sU0FBUyxZQUFZLENBQUMsR0FBRyxFQUFFO0FBQ3ZDO0FBQUEsY0FDSixLQUFLO0FBQ0QscUJBQUssUUFBUSxTQUFTLFlBQVksQ0FBQyxHQUFHLEVBQUU7QUFDeEM7QUFBQSxjQUNKLEtBQUs7QUFDRCxxQkFBSyxNQUFNLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRTtBQUN0QztBQUFBLGNBQ0osS0FBSztBQUNELHFCQUFLLE9BQU8sU0FBUyxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUk7QUFDM0M7QUFBQSxjQUNKLEtBQUs7QUFDRCxxQkFBSyxTQUFTLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFJO0FBQzdDO0FBQUEsY0FDSixLQUFLO0FBQ0QscUJBQUssU0FBUyxTQUFTLFlBQVksQ0FBQyxHQUFHLEVBQUU7QUFDekM7QUFBQSxjQUNKO0FBQ0ksc0JBQU0sSUFBSSxNQUFNLG1DQUFtQztBQUFBLFlBQzNEO0FBQUEsVUFDSjtBQUNBLGNBQUksVUFBVSxPQUFPO0FBQ2pCLGtCQUFNLFdBQVcsSUFBSSxLQUFLLEtBQUssTUFBTSxLQUFLLE9BQU8sS0FBSyxLQUFLLEtBQUssTUFBTSxLQUFLLFFBQVEsS0FBSyxRQUFRLEtBQUssV0FBVztBQUNoSCxpQkFBSyxPQUFPLFNBQVMsZUFBZTtBQUNwQyxpQkFBSyxRQUFRLFNBQVMsWUFBWTtBQUNsQyxpQkFBSyxNQUFNLFNBQVMsVUFBVTtBQUM5QixpQkFBSyxPQUFPLFNBQVMsWUFBWTtBQUNqQyxpQkFBSyxTQUFTLFNBQVMsY0FBYztBQUNyQyxpQkFBSyxTQUFTLFNBQVMsY0FBYztBQUNyQyxpQkFBSyxjQUFjLFNBQVMsbUJBQW1CO0FBQUEsVUFDbkQ7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTLFdBQVcsT0FBTztBQUN2QixjQUFJLGFBQWEsT0FBTztBQUNwQixrQkFBTSxjQUFjLENBQUM7QUFDckIsd0JBQVksS0FBYSxVQUFVLEtBQUssTUFBTSxDQUFDLENBQUM7QUFDaEQsd0JBQVksS0FBYSxVQUFVLEtBQUssT0FBTyxDQUFDLENBQUM7QUFDakQsd0JBQVksS0FBYSxVQUFVLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDL0Msd0JBQVksS0FBYSxVQUFVLEtBQUssTUFBTSxDQUFDLENBQUM7QUFDaEQsd0JBQVksS0FBYSxVQUFVLEtBQUssUUFBUSxDQUFDLENBQUM7QUFDbEQsd0JBQVksS0FBYSxVQUFVLEtBQUssUUFBUSxDQUFDLENBQUM7QUFDbEQsZ0JBQUksS0FBSyxnQkFBZ0IsR0FBRztBQUN4QiwwQkFBWSxLQUFLLEdBQUc7QUFDcEIsMEJBQVksS0FBYSxVQUFVLEtBQUssYUFBYSxDQUFDLENBQUM7QUFBQSxZQUMzRDtBQUNBLHdCQUFZLEtBQUssR0FBRztBQUNwQixtQkFBTyxZQUFZLEtBQUssRUFBRTtBQUFBLFVBQzlCO0FBQ0EsaUJBQU8sTUFBTSxTQUFTLFFBQVE7QUFBQSxRQUNsQztBQUFBLFFBQ0EsU0FBUztBQUNMLGlCQUFPO0FBQUEsWUFDSCxHQUFHLE1BQU0sT0FBTztBQUFBLFlBQ2hCLGFBQWEsS0FBSztBQUFBLFVBQ3RCO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQ1AsT0FBQyxNQUFNO0FBQ0gsa0JBQVUsa0JBQWtCO0FBQUEsTUFDaEMsR0FBRztBQUNILHNCQUFnQixPQUFPO0FBR3ZCLE1BQU0sT0FBTixjQUFtQixXQUFXO0FBQUEsUUFDMUIsWUFBWSxhQUFhLENBQUMsR0FBRztBQUN6QixnQkFBTSxVQUFVO0FBQ2hCLGVBQUssUUFBUSxXQUFXO0FBQ3hCLGVBQUssUUFBUSxZQUFZO0FBQUEsUUFDN0I7QUFBQSxNQUNKO0FBQ0EsYUFBTztBQUNQLE9BQUMsTUFBTTtBQUNILGtCQUFVLE9BQU87QUFBQSxNQUNyQixHQUFHO0FBQ0gsV0FBSyxPQUFPO0FBR1osTUFBTSxZQUFOLGNBQXdCLFdBQVc7QUFBQSxRQUMvQixZQUFZLGFBQWEsQ0FBQyxHQUFHO0FBQ3pCLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxRQUFRLFdBQVc7QUFDeEIsZUFBSyxRQUFRLFlBQVk7QUFBQSxRQUM3QjtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQ1AsT0FBQyxNQUFNO0FBQ0gsa0JBQVUsWUFBWTtBQUFBLE1BQzFCLEdBQUc7QUFDSCxnQkFBVSxPQUFPO0FBR2pCLE1BQU0sV0FBTixjQUF1QixXQUFXO0FBQUEsUUFDOUIsWUFBWSxhQUFhLENBQUMsR0FBRztBQUN6QixnQkFBTSxVQUFVO0FBQ2hCLGVBQUssUUFBUSxXQUFXO0FBQ3hCLGVBQUssUUFBUSxZQUFZO0FBQUEsUUFDN0I7QUFBQSxNQUNKO0FBQ0EsYUFBTztBQUNQLE9BQUMsTUFBTTtBQUNILGtCQUFVLFdBQVc7QUFBQSxNQUN6QixHQUFHO0FBQ0gsZUFBUyxPQUFPO0FBR2hCLE1BQU0sV0FBTixjQUF1QixXQUFXO0FBQUEsUUFDOUIsWUFBWSxhQUFhLENBQUMsR0FBRztBQUN6QixnQkFBTSxVQUFVO0FBQ2hCLGVBQUssUUFBUSxXQUFXO0FBQ3hCLGVBQUssUUFBUSxZQUFZO0FBQUEsUUFDN0I7QUFBQSxNQUNKO0FBQ0EsYUFBTztBQUNQLE9BQUMsTUFBTTtBQUNILGtCQUFVLFdBQVc7QUFBQSxNQUN6QixHQUFHO0FBQ0gsZUFBUyxPQUFPO0FBR2hCLE1BQU0sT0FBTixjQUFtQixXQUFXO0FBQUEsUUFDMUIsWUFBWSxhQUFhLENBQUMsR0FBRztBQUN6QixnQkFBTSxVQUFVO0FBQ2hCLGVBQUssUUFBUSxXQUFXO0FBQ3hCLGVBQUssUUFBUSxZQUFZO0FBQUEsUUFDN0I7QUFBQSxNQUNKO0FBQ0EsV0FBSztBQUNMLE9BQUMsTUFBTTtBQUNILGtCQUFVLE9BQU87QUFBQSxNQUNyQixHQUFHO0FBQ0gsV0FBSyxPQUFPO0FBRVosTUFBTSxNQUFOLE1BQVU7QUFBQSxRQUNOLFlBQVksRUFBRSxPQUFPLGNBQWMsV0FBVyxNQUFPLElBQUksQ0FBQyxHQUFHO0FBQ3pELGVBQUssT0FBTztBQUNaLGVBQUssV0FBVztBQUFBLFFBQ3BCO0FBQUEsTUFDSjtBQUVBLE1BQU0sU0FBTixjQUFxQixJQUFJO0FBQUEsUUFDckIsWUFBWSxFQUFFLFFBQVEsQ0FBQyxHQUFHLEdBQUcsV0FBVyxJQUFJLENBQUMsR0FBRztBQUM1QyxnQkFBTSxVQUFVO0FBQ2hCLGVBQUssUUFBUTtBQUFBLFFBQ2pCO0FBQUEsTUFDSjtBQUVBLE1BQU0sV0FBTixjQUF1QixJQUFJO0FBQUEsUUFDdkIsWUFBWSxFQUFFLFFBQVEsSUFBSSxJQUFJLEdBQUcsUUFBUSxPQUFPLEdBQUcsV0FBVyxJQUFJLENBQUMsR0FBRztBQUNsRSxnQkFBTSxVQUFVO0FBQ2hCLGVBQUssUUFBUTtBQUNiLGVBQUssUUFBUTtBQUFBLFFBQ2pCO0FBQUEsTUFDSjtBQUVBLE1BQU0sVUFBTixNQUFjO0FBQUEsUUFDVixZQUFZLEVBQUUsT0FBTyxXQUFXLElBQUksQ0FBQyxHQUFHO0FBQ3BDLGVBQUssV0FBcUIsZ0NBQXNCLGFBQWEsSUFBSTtBQUFBLFFBQ3JFO0FBQUEsUUFDQSxJQUFJLE9BQU87QUFDUCxpQkFBTyxLQUFLLFNBQVMsTUFBTSxFQUFFO0FBQUEsUUFDakM7QUFBQSxRQUNBLElBQUksS0FBSyxPQUFPO0FBQ1osZUFBSyxXQUFxQixnQ0FBc0IsYUFBYSxLQUFLO0FBQUEsUUFDdEU7QUFBQSxRQUNBLFFBQVEsYUFBYSxhQUFhLGFBQWE7QUFDM0MsZ0JBQU0sWUFBWSxjQUFjO0FBQ2hDLGVBQUssV0FBcUIsZ0NBQXNCLGFBQWEsV0FBVyxFQUFFLFNBQVMsYUFBYSxTQUFTO0FBQ3pHLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsTUFBTSxVQUFVO0FBQ1osaUJBQU8sS0FBSyxTQUFTLE1BQU0sRUFBRTtBQUFBLFFBQ2pDO0FBQUEsTUFDSjtBQUFBO0FBQUE7OztBQ3B2RkEsTUFBVyxjQU1BO0FBTlg7QUFBQTtBQUNBLE9BQUMsU0FBVU8sZUFBYztBQUNyQixRQUFBQSxjQUFhQSxjQUFhLFVBQVUsSUFBSSxDQUFDLElBQUk7QUFDN0MsUUFBQUEsY0FBYUEsY0FBYSxLQUFLLElBQUksQ0FBQyxJQUFJO0FBQ3hDLFFBQUFBLGNBQWFBLGNBQWEsUUFBUSxJQUFJLENBQUMsSUFBSTtBQUFBLE1BQy9DLEdBQUcsaUJBQWlCLGVBQWUsQ0FBQyxFQUFFO0FBRXRDLE9BQUMsU0FBVUMsZUFBYztBQUNyQixRQUFBQSxjQUFhQSxjQUFhLEtBQUssSUFBSSxDQUFDLElBQUk7QUFDeEMsUUFBQUEsY0FBYUEsY0FBYSxTQUFTLElBQUksQ0FBQyxJQUFJO0FBQzVDLFFBQUFBLGNBQWFBLGNBQWEsYUFBYSxJQUFJLENBQUMsSUFBSTtBQUNoRCxRQUFBQSxjQUFhQSxjQUFhLFdBQVcsSUFBSSxDQUFDLElBQUk7QUFDOUMsUUFBQUEsY0FBYUEsY0FBYSxTQUFTLElBQUksQ0FBQyxJQUFJO0FBQzVDLFFBQUFBLGNBQWFBLGNBQWEsWUFBWSxJQUFJLENBQUMsSUFBSTtBQUMvQyxRQUFBQSxjQUFhQSxjQUFhLGtCQUFrQixJQUFJLENBQUMsSUFBSTtBQUNyRCxRQUFBQSxjQUFhQSxjQUFhLFlBQVksSUFBSSxDQUFDLElBQUk7QUFDL0MsUUFBQUEsY0FBYUEsY0FBYSxXQUFXLElBQUksQ0FBQyxJQUFJO0FBQzlDLFFBQUFBLGNBQWFBLGNBQWEsaUJBQWlCLElBQUksRUFBRSxJQUFJO0FBQ3JELFFBQUFBLGNBQWFBLGNBQWEsZUFBZSxJQUFJLEVBQUUsSUFBSTtBQUNuRCxRQUFBQSxjQUFhQSxjQUFhLGlCQUFpQixJQUFJLEVBQUUsSUFBSTtBQUNyRCxRQUFBQSxjQUFhQSxjQUFhLGVBQWUsSUFBSSxFQUFFLElBQUk7QUFDbkQsUUFBQUEsY0FBYUEsY0FBYSxnQkFBZ0IsSUFBSSxFQUFFLElBQUk7QUFDcEQsUUFBQUEsY0FBYUEsY0FBYSxXQUFXLElBQUksRUFBRSxJQUFJO0FBQy9DLFFBQUFBLGNBQWFBLGNBQWEsZUFBZSxJQUFJLEVBQUUsSUFBSTtBQUNuRCxRQUFBQSxjQUFhQSxjQUFhLGVBQWUsSUFBSSxFQUFFLElBQUk7QUFDbkQsUUFBQUEsY0FBYUEsY0FBYSxlQUFlLElBQUksRUFBRSxJQUFJO0FBQ25ELFFBQUFBLGNBQWFBLGNBQWEsaUJBQWlCLElBQUksRUFBRSxJQUFJO0FBQ3JELFFBQUFBLGNBQWFBLGNBQWEsU0FBUyxJQUFJLEVBQUUsSUFBSTtBQUM3QyxRQUFBQSxjQUFhQSxjQUFhLGlCQUFpQixJQUFJLEVBQUUsSUFBSTtBQUNyRCxRQUFBQSxjQUFhQSxjQUFhLE1BQU0sSUFBSSxFQUFFLElBQUk7QUFDMUMsUUFBQUEsY0FBYUEsY0FBYSxXQUFXLElBQUksRUFBRSxJQUFJO0FBQy9DLFFBQUFBLGNBQWFBLGNBQWEsVUFBVSxJQUFJLEVBQUUsSUFBSTtBQUM5QyxRQUFBQSxjQUFhQSxjQUFhLFVBQVUsSUFBSSxFQUFFLElBQUk7QUFDOUMsUUFBQUEsY0FBYUEsY0FBYSxNQUFNLElBQUksRUFBRSxJQUFJO0FBQzFDLFFBQUFBLGNBQWFBLGNBQWEsTUFBTSxJQUFJLEVBQUUsSUFBSTtBQUFBLE1BQzlDLEdBQUcsaUJBQWlCLGVBQWUsQ0FBQyxFQUFFO0FBQUE7QUFBQTs7O0FDbkN0QyxNQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0EseUJBQXNDO0FBQUE7QUFBQTs7O0FDRHRDLE1BQ0FDO0FBREE7QUFBQTtBQUFBO0FBQ0EsTUFBQUEsb0JBQXNDO0FBQUE7QUFBQTs7O0FDRHRDO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTs7O0FDcURBLFdBQVMsc0JBQXNCLFVBQVU7QUFDckMsV0FBTztBQUFBLE1BQ0gsU0FBUyxDQUFDLFVBQVUsTUFBTSxXQUFXO0FBQUEsTUFDckMsT0FBTyxDQUFDLFVBQVUsSUFBSSxTQUFTLEVBQUUsTUFBTSxDQUFDO0FBQUEsSUFDNUM7QUFBQSxFQUNKO0FBMkJPLFdBQVMsaUJBQWlCLE1BQU07QUFDbkMsWUFBUSxNQUFNO0FBQUEsTUFDVixLQUFLLGFBQWE7QUFDZCxlQUFPO0FBQUEsTUFDWCxLQUFLLGFBQWE7QUFDZCxlQUFPO0FBQUEsTUFDWCxLQUFLLGFBQWE7QUFDZCxlQUFPO0FBQUEsTUFDWCxLQUFLLGFBQWE7QUFDZCxlQUFPO0FBQUEsTUFDWCxLQUFLLGFBQWE7QUFDZCxlQUFPO0FBQUEsTUFDWCxLQUFLLGFBQWE7QUFDZCxlQUFPO0FBQUEsTUFDWCxLQUFLLGFBQWE7QUFDZCxlQUFPO0FBQUEsTUFDWCxLQUFLLGFBQWE7QUFDZCxlQUFPO0FBQUEsTUFDWCxLQUFLLGFBQWE7QUFDZCxlQUFPO0FBQUEsTUFDWCxLQUFLLGFBQWE7QUFDZCxlQUFPO0FBQUEsTUFDWCxLQUFLLGFBQWE7QUFDZCxlQUFPO0FBQUEsTUFDWCxLQUFLLGFBQWE7QUFDZCxlQUFPO0FBQUEsTUFDWCxLQUFLLGFBQWE7QUFDZCxlQUFPO0FBQUEsTUFDWCxLQUFLLGFBQWE7QUFDZCxlQUFPO0FBQUEsTUFDWCxLQUFLLGFBQWE7QUFDZCxlQUFPO0FBQUEsTUFDWCxLQUFLLGFBQWE7QUFDZCxlQUFPO0FBQUEsTUFDWCxLQUFLLGFBQWE7QUFDZCxlQUFPO0FBQUEsTUFDWCxLQUFLLGFBQWE7QUFDZCxlQUFPO0FBQUEsTUFDWCxLQUFLLGFBQWE7QUFDZCxlQUFPO0FBQUEsTUFDWCxLQUFLLGFBQWE7QUFDZCxlQUFPO0FBQUEsTUFDWCxLQUFLLGFBQWE7QUFDZCxlQUFPO0FBQUEsTUFDWCxLQUFLLGFBQWE7QUFDZCxlQUFPO0FBQUEsTUFDWDtBQUNJLGVBQU87QUFBQSxJQUNmO0FBQUEsRUFDSjtBQXZJQSxNQUdhLGlCQWFBLHFCQU1BLHdCQVlBLHVCQUlBLDhCQUlBLHFCQUlBLHlCQWNBLHdCQUNBLHVCQUNBLDZCQUNBLDJCQUNBLDZCQUNBLDJCQUNBLDRCQUNBLHVCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDZCQUNBLHFCQUlBLDZCQUlBO0FBaEZiO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDTyxNQUFNLGtCQUFrQjtBQUFBLFFBQzNCLFNBQVMsQ0FBQyxVQUFVLGlCQUF3QixPQUFPLE9BQU8sTUFBTTtBQUFBLFFBQ2hFLE9BQU8sQ0FBQyxVQUFVO0FBQ2QsY0FBSSxVQUFVLE1BQU07QUFDaEIsbUJBQU8sSUFBVyxLQUFLO0FBQUEsVUFDM0I7QUFDQSxnQkFBTSxTQUFnQixRQUFRLEtBQUs7QUFDbkMsY0FBSSxPQUFPLE9BQU8sT0FBTztBQUNyQixrQkFBTSxJQUFJLE1BQU0sT0FBTyxPQUFPLEtBQUs7QUFBQSxVQUN2QztBQUNBLGlCQUFPLE9BQU87QUFBQSxRQUNsQjtBQUFBLE1BQ0o7QUFDTyxNQUFNLHNCQUFzQjtBQUFBLFFBQy9CLFNBQVMsQ0FBQyxVQUFVLE1BQU0sV0FBVyxhQUFhLGNBQWMsSUFDMUQsTUFBTSxXQUFXLFNBQVMsSUFDMUIsTUFBTSxXQUFXO0FBQUEsUUFDdkIsT0FBTyxDQUFDLFVBQVUsSUFBVyxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUFBLE1BQzFEO0FBQ08sTUFBTSx5QkFBeUI7QUFBQSxRQUNsQyxTQUFTLENBQUMsVUFBVSxNQUFNLFdBQVc7QUFBQSxRQUNyQyxPQUFPLENBQUMsVUFBVSxJQUFXLFdBQVcsRUFBRSxNQUFNLENBQUM7QUFBQSxNQUNyRDtBQVNPLE1BQU0sd0JBQXdCO0FBQUEsUUFDakMsU0FBUyxDQUFDLFVBQVUsTUFBTSxXQUFXO0FBQUEsUUFDckMsT0FBTyxDQUFDLFVBQVUsSUFBVyxVQUFVLEVBQUUsVUFBVSxNQUFNLENBQUM7QUFBQSxNQUM5RDtBQUNPLE1BQU0sK0JBQStCO0FBQUEsUUFDeEMsU0FBUyxDQUFDLFVBQVUsTUFBTSxXQUFXLFNBQVM7QUFBQSxRQUM5QyxPQUFPLENBQUMsVUFBVSxJQUFXLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztBQUFBLE1BQzNEO0FBQ08sTUFBTSxzQkFBc0I7QUFBQSxRQUMvQixTQUFTLENBQUMsVUFBVSxNQUFNLFdBQVc7QUFBQSxRQUNyQyxPQUFPLENBQUMsVUFBVSxJQUFXQyxTQUFRLEVBQUUsTUFBTSxDQUFDO0FBQUEsTUFDbEQ7QUFDTyxNQUFNLDBCQUEwQjtBQUFBLFFBQ25DLFNBQVMsQ0FBQyxVQUFVLE1BQU0sV0FBVztBQUFBLFFBQ3JDLE9BQU8sQ0FBQyxVQUFVLElBQVcsWUFBWSxFQUFFLFVBQVUsTUFBTSxDQUFDO0FBQUEsTUFDaEU7QUFXTyxNQUFNLHlCQUF5QixzQkFBNkIsVUFBVTtBQUN0RSxNQUFNLHdCQUF3QixzQkFBNkIsU0FBUztBQUNwRSxNQUFNLDhCQUE4QixzQkFBNkIsZUFBZTtBQUNoRixNQUFNLDRCQUE0QixzQkFBNkIsYUFBYTtBQUM1RSxNQUFNLDhCQUE4QixzQkFBNkIsZUFBZTtBQUNoRixNQUFNLDRCQUE0QixzQkFBNkIsYUFBYTtBQUM1RSxNQUFNLDZCQUE2QixzQkFBNkIsY0FBYztBQUM5RSxNQUFNLHdCQUF3QixzQkFBNkIsU0FBUztBQUNwRSxNQUFNLDRCQUE0QixzQkFBNkIsYUFBYTtBQUM1RSxNQUFNLDRCQUE0QixzQkFBNkIsYUFBYTtBQUM1RSxNQUFNLDRCQUE0QixzQkFBNkIsYUFBYTtBQUM1RSxNQUFNLDhCQUE4QixzQkFBNkIsZUFBZTtBQUNoRixNQUFNLHNCQUFzQjtBQUFBLFFBQy9CLFNBQVMsQ0FBQyxVQUFVLE1BQU0sT0FBTztBQUFBLFFBQ2pDLE9BQU8sQ0FBQyxVQUFVLElBQVcsUUFBUSxFQUFFLFdBQVcsTUFBTSxDQUFDO0FBQUEsTUFDN0Q7QUFDTyxNQUFNLDhCQUE4QjtBQUFBLFFBQ3ZDLFNBQVMsQ0FBQyxVQUFVLE1BQU0sT0FBTztBQUFBLFFBQ2pDLE9BQU8sQ0FBQyxVQUFVLElBQVcsZ0JBQWdCLEVBQUUsV0FBVyxNQUFNLENBQUM7QUFBQSxNQUNyRTtBQUNPLE1BQU0sbUJBQW1CO0FBQUEsUUFDNUIsU0FBUyxNQUFNO0FBQUEsUUFDZixPQUFPLE1BQU07QUFDVCxpQkFBTyxJQUFXLEtBQUs7QUFBQSxRQUMzQjtBQUFBLE1BQ0o7QUFBQTtBQUFBOzs7QUNyRk8sV0FBUyxjQUFjLFFBQVE7QUFDbEMsUUFBSSxPQUFPLFdBQVcsY0FBYyxPQUFPLFdBQVc7QUFDbEQsVUFBSSxPQUFPLFVBQVUsU0FBUyxPQUFPLFVBQVUsU0FBUztBQUNwRCxlQUFPO0FBQUEsTUFDWCxPQUNLO0FBQ0QsZUFBTyxjQUFjLE9BQU8sU0FBUztBQUFBLE1BQ3pDO0FBQUEsSUFDSixPQUNLO0FBQ0QsYUFBTyxDQUFDLEVBQUUsVUFBVSxPQUFPLFdBQVcsWUFBWSxXQUFXLFVBQVUsYUFBYTtBQUFBLElBQ3hGO0FBQUEsRUFDSjtBQUNPLFdBQVMsY0FBYyxRQUFRO0FBQ2xDLFFBQUlDO0FBQ0osUUFBSSxRQUFRO0FBQ1IsWUFBTSxRQUFRLE9BQU8sZUFBZSxNQUFNO0FBQzFDLFlBQU1BLE1BQUssVUFBVSxRQUFRLFVBQVUsU0FBUyxTQUFTLE1BQU0sZUFBZSxRQUFRQSxRQUFPLFNBQVMsU0FBU0EsSUFBRyxpQkFBaUIsT0FBTztBQUN0SSxlQUFPO0FBQUEsTUFDWDtBQUNBLGFBQU8sY0FBYyxLQUFLO0FBQUEsSUFDOUI7QUFDQSxXQUFPO0FBQUEsRUFDWDtBQUNPLFdBQVMsYUFBYSxRQUFRLFFBQVE7QUFDekMsUUFBSSxFQUFFLFVBQVUsU0FBUztBQUNyQixhQUFPO0FBQUEsSUFDWDtBQUNBLFFBQUksT0FBTyxlQUFlLE9BQU8sWUFBWTtBQUN6QyxhQUFPO0FBQUEsSUFDWDtBQUNBLFVBQU0sS0FBSyxJQUFJLFdBQVcsTUFBTTtBQUNoQyxVQUFNLEtBQUssSUFBSSxXQUFXLE1BQU07QUFDaEMsYUFBUyxJQUFJLEdBQUcsSUFBSSxPQUFPLFlBQVksS0FBSztBQUN4QyxVQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHO0FBQ2pCLGVBQU87QUFBQSxNQUNYO0FBQUEsSUFDSjtBQUNBLFdBQU87QUFBQSxFQUNYO0FBdkNBO0FBQUE7QUFBQTtBQUFBOzs7QUNBQSxNQUdhO0FBSGI7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNPLE1BQU0sbUJBQU4sTUFBdUI7QUFBQSxRQUMxQixjQUFjO0FBQ1YsZUFBSyxRQUFRLG9CQUFJLFFBQVE7QUFBQSxRQUM3QjtBQUFBLFFBQ0EsSUFBSSxRQUFRO0FBQ1IsaUJBQU8sS0FBSyxNQUFNLElBQUksTUFBTTtBQUFBLFFBQ2hDO0FBQUEsUUFDQSxJQUFJLFFBQVEsY0FBYyxPQUFPO0FBQzdCLGdCQUFNLFNBQVMsS0FBSyxNQUFNLElBQUksTUFBTTtBQUNwQyxjQUFJLENBQUMsUUFBUTtBQUNULGtCQUFNLElBQUksTUFBTSwwQkFBMEIsT0FBTyxVQUFVLFlBQVksSUFBSSxVQUFVO0FBQUEsVUFDekY7QUFDQSxjQUFJLGVBQWUsQ0FBQyxPQUFPLFFBQVE7QUFDL0Isa0JBQU0sSUFBSSxNQUFNLFdBQVcsT0FBTyxVQUFVLFlBQVksSUFBSSxnRUFBZ0U7QUFBQSxVQUNoSTtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsTUFBTSxRQUFRO0FBQ1YsZ0JBQU0sU0FBUyxLQUFLLElBQUksTUFBTTtBQUM5QixjQUFJLENBQUMsT0FBTyxRQUFRO0FBQ2hCLG1CQUFPLFNBQVMsS0FBSyxPQUFPLFFBQVEsSUFBSTtBQUFBLFVBQzVDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsY0FBYyxRQUFRO0FBQ2xCLGdCQUFNLFNBQVM7QUFBQSxZQUNYLE1BQU0sYUFBYTtBQUFBLFlBQ25CLE9BQU8sQ0FBQztBQUFBLFVBQ1o7QUFDQSxnQkFBTSxlQUFlLEtBQUssaUJBQWlCLE1BQU07QUFDakQsY0FBSSxjQUFjO0FBQ2QsbUJBQU8sT0FBTyxRQUFRLFlBQVk7QUFDbEMsbUJBQU8sUUFBUSxPQUFPLE9BQU8sQ0FBQyxHQUFHLE9BQU8sT0FBTyxhQUFhLEtBQUs7QUFBQSxVQUNyRTtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsT0FBTyxRQUFRLFVBQVU7QUFDckIsZ0JBQU0sU0FBUyxLQUFLLE1BQU0sSUFBSSxNQUFNLEtBQUssS0FBSyxjQUFjLE1BQU07QUFDbEUsZ0JBQU0sWUFBWSxDQUFDO0FBQ25CLHFCQUFXLE9BQU8sT0FBTyxPQUFPO0FBQzVCLGtCQUFNLE9BQU8sT0FBTyxNQUFNLEdBQUc7QUFDN0Isa0JBQU0sT0FBTyxXQUFXLE1BQU07QUFDOUIsZ0JBQUk7QUFDSixnQkFBSSxPQUFRLEtBQUssU0FBVSxVQUFVO0FBQ2pDLG9CQUFNLGVBQWUsYUFBYSxLQUFLLElBQUk7QUFDM0Msb0JBQU0sV0FBVyxpQkFBTyxZQUFZO0FBQ3BDLGtCQUFJLENBQUMsVUFBVTtBQUNYLHNCQUFNLElBQUksTUFBTSxrQ0FBa0MsWUFBWSxHQUFHO0FBQUEsY0FDckU7QUFDQSx5QkFBVyxJQUFJLFNBQVMsRUFBRSxLQUFLLENBQUM7QUFBQSxZQUNwQyxXQUNTLGNBQWMsS0FBSyxJQUFJLEdBQUc7QUFDL0Isb0JBQU0sV0FBVyxJQUFJLEtBQUssS0FBSztBQUMvQix5QkFBVyxTQUFTLFNBQVMsSUFBSTtBQUFBLFlBQ3JDLFdBQ1MsS0FBSyxVQUFVO0FBQ3BCLG9CQUFNLGFBQWEsS0FBSyxJQUFJLEtBQUssSUFBSTtBQUNyQyxrQkFBSSxXQUFXLFNBQVMsYUFBYSxRQUFRO0FBQ3pDLDJCQUFXLElBQVcsSUFBSSxFQUFFLEtBQUssQ0FBQztBQUFBLGNBQ3RDLE9BQ0s7QUFDRCwyQkFBVyxLQUFLLE9BQU8sS0FBSyxNQUFNLEtBQUs7QUFDdkMseUJBQVMsT0FBTztBQUFBLGNBQ3BCO0FBQUEsWUFDSixPQUNLO0FBQ0QseUJBQVcsSUFBVyxJQUFJLEVBQUUsS0FBSyxDQUFDO0FBQUEsWUFDdEM7QUFDQSxrQkFBTSxXQUFXLENBQUMsQ0FBQyxLQUFLLFlBQVksS0FBSyxpQkFBaUI7QUFDMUQsZ0JBQUksS0FBSyxVQUFVO0FBQ2YsdUJBQVMsT0FBTztBQUNoQixvQkFBTSxZQUFZLEtBQUssYUFBYSxRQUN2QkMsT0FDQTtBQUNiLHlCQUFXLElBQUksVUFBVTtBQUFBLGdCQUNyQixNQUFNO0FBQUEsZ0JBQ04sT0FBTztBQUFBLGtCQUNILElBQVcsU0FBUztBQUFBLG9CQUNoQjtBQUFBLG9CQUNBLE9BQU87QUFBQSxrQkFDWCxDQUFDO0FBQUEsZ0JBQ0w7QUFBQSxjQUNKLENBQUM7QUFBQSxZQUNMO0FBQ0EsZ0JBQUksS0FBSyxZQUFZLFFBQVEsS0FBSyxZQUFZLFFBQVc7QUFDckQsa0JBQUksS0FBSyxVQUFVO0FBQ2Ysb0JBQUksT0FBTyxLQUFLLFNBQVMsWUFBWSxjQUFjLEtBQUssSUFBSSxHQUFHO0FBQzNELHdCQUFNLFlBQVksS0FBSyxXQUNWLGNBQ0E7QUFDYiw0QkFBVSxLQUFLLElBQUksVUFBVTtBQUFBLG9CQUN6QjtBQUFBLG9CQUNBO0FBQUEsb0JBQ0EsU0FBUztBQUFBLHNCQUNMLFVBQVU7QUFBQSxzQkFDVixXQUFXLEtBQUs7QUFBQSxvQkFDcEI7QUFBQSxrQkFDSixDQUFDLENBQUM7QUFBQSxnQkFDTixPQUNLO0FBQ0QsdUJBQUssTUFBTSxLQUFLLElBQUk7QUFDcEIsd0JBQU0sYUFBYSxDQUFDLENBQUMsS0FBSztBQUMxQixzQkFBSSxRQUFRLENBQUMsYUFDUCxLQUFLLElBQUksS0FBSyxNQUFNLElBQUksRUFBRSxTQUMxQjtBQUNOLDBCQUFRLGdCQUFnQixRQUFRLE1BQU0sV0FBVyxRQUFRLE1BQU07QUFDL0QsNEJBQVUsS0FBSyxJQUFXLFlBQVk7QUFBQSxvQkFDbEMsTUFBTSxDQUFDLGFBQWEsT0FBTztBQUFBLG9CQUMzQjtBQUFBLG9CQUNBLFNBQVM7QUFBQSxzQkFDTCxVQUFVO0FBQUEsc0JBQ1YsV0FBVyxLQUFLO0FBQUEsb0JBQ3BCO0FBQUEsb0JBQ0E7QUFBQSxrQkFDSixDQUFDLENBQUM7QUFBQSxnQkFDTjtBQUFBLGNBQ0osT0FDSztBQUNELDBCQUFVLEtBQUssSUFBVyxZQUFZO0FBQUEsa0JBQ2xDO0FBQUEsa0JBQ0EsU0FBUztBQUFBLG9CQUNMLFVBQVU7QUFBQSxvQkFDVixXQUFXLEtBQUs7QUFBQSxrQkFDcEI7QUFBQSxrQkFDQSxPQUFPLENBQUMsUUFBUTtBQUFBLGdCQUNwQixDQUFDLENBQUM7QUFBQSxjQUNOO0FBQUEsWUFDSixPQUNLO0FBQ0QsdUJBQVMsV0FBVztBQUNwQix3QkFBVSxLQUFLLFFBQVE7QUFBQSxZQUMzQjtBQUFBLFVBQ0o7QUFDQSxrQkFBUSxPQUFPLE1BQU07QUFBQSxZQUNqQixLQUFLLGFBQWE7QUFDZCxxQkFBTyxJQUFXLFNBQVMsRUFBRSxPQUFPLFdBQVcsTUFBTSxHQUFHLENBQUM7QUFBQSxZQUM3RCxLQUFLLGFBQWE7QUFDZCxxQkFBTyxJQUFXQSxLQUFJLEVBQUUsT0FBTyxXQUFXLE1BQU0sR0FBRyxDQUFDO0FBQUEsWUFDeEQsS0FBSyxhQUFhO0FBQ2QscUJBQU8sSUFBVyxPQUFPLEVBQUUsT0FBTyxXQUFXLE1BQU0sR0FBRyxDQUFDO0FBQUEsWUFDM0Q7QUFDSSxvQkFBTSxJQUFJLE1BQU0sOEJBQThCO0FBQUEsVUFDdEQ7QUFBQSxRQUNKO0FBQUEsUUFDQSxJQUFJLFFBQVEsUUFBUTtBQUNoQixlQUFLLE1BQU0sSUFBSSxRQUFRLE1BQU07QUFDN0IsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxpQkFBaUIsUUFBUTtBQUNyQixnQkFBTSxTQUFTLE9BQU8sZUFBZSxNQUFNO0FBQzNDLGNBQUksUUFBUTtBQUNSLGtCQUFNLFNBQVMsS0FBSyxNQUFNLElBQUksTUFBTTtBQUNwQyxtQkFBTyxVQUFVLEtBQUssaUJBQWlCLE1BQU07QUFBQSxVQUNqRDtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFBQTtBQUFBOzs7QUM5SkEsTUFDYTtBQURiO0FBQUE7QUFBQTtBQUNPLE1BQU0sZ0JBQWdCLElBQUksaUJBQWlCO0FBQUE7QUFBQTs7O0FDRGxELE1BR2EsU0FjQTtBQWpCYjtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ08sTUFBTSxVQUFVLENBQUNDLGFBQVksQ0FBQyxXQUFXO0FBQzVDLFlBQUk7QUFDSixZQUFJLENBQUMsY0FBYyxJQUFJLE1BQU0sR0FBRztBQUM1QixtQkFBUyxjQUFjLGNBQWMsTUFBTTtBQUMzQyx3QkFBYyxJQUFJLFFBQVEsTUFBTTtBQUFBLFFBQ3BDLE9BQ0s7QUFDRCxtQkFBUyxjQUFjLElBQUksTUFBTTtBQUFBLFFBQ3JDO0FBQ0EsZUFBTyxPQUFPLFFBQVFBLFFBQU87QUFBQSxNQUNqQztBQUlPLE1BQU0sVUFBVSxDQUFDQSxhQUFZLENBQUMsUUFBUSxnQkFBZ0I7QUFDekQsWUFBSTtBQUNKLFlBQUksQ0FBQyxjQUFjLElBQUksT0FBTyxXQUFXLEdBQUc7QUFDeEMsbUJBQVMsY0FBYyxjQUFjLE9BQU8sV0FBVztBQUN2RCx3QkFBYyxJQUFJLE9BQU8sYUFBYSxNQUFNO0FBQUEsUUFDaEQsT0FDSztBQUNELG1CQUFTLGNBQWMsSUFBSSxPQUFPLFdBQVc7QUFBQSxRQUNqRDtBQUNBLGNBQU0sY0FBYyxPQUFPLE9BQU8sQ0FBQyxHQUFHQSxRQUFPO0FBQzdDLFlBQUksT0FBTyxZQUFZLFNBQVMsWUFBWSxDQUFDLFlBQVksV0FBVztBQUNoRSxnQkFBTUMsb0JBQThCLGlCQUFpQkQsU0FBUSxJQUFJO0FBQ2pFLGNBQUksQ0FBQ0MsbUJBQWtCO0FBQ25CLGtCQUFNLElBQUksTUFBTSw4Q0FBOEMsV0FBVyxRQUFRLE9BQU8sWUFBWSxJQUFJLEVBQUU7QUFBQSxVQUM5RztBQUNBLHNCQUFZLFlBQVlBO0FBQUEsUUFDNUI7QUFDQSxlQUFPLE1BQU0sV0FBVyxJQUFJO0FBQUEsTUFDaEM7QUFBQTtBQUFBOzs7QUNuQ0EsTUFBYTtBQUFiO0FBQUE7QUFBTyxNQUFNLDJCQUFOLGNBQXVDLE1BQU07QUFBQSxRQUNoRCxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssVUFBVSxDQUFDO0FBQUEsUUFDcEI7QUFBQSxNQUNKO0FBQUE7QUFBQTs7O0FDTEE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDQUEsTUFNYTtBQU5iO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxNQUFNLFlBQU4sTUFBZ0I7QUFBQSxRQUNuQixPQUFPLE1BQU0sTUFBTSxRQUFRO0FBQ3ZCLGdCQUFNLGFBQW9CLFFBQVEsSUFBSTtBQUN0QyxjQUFJLFdBQVcsT0FBTyxPQUFPO0FBQ3pCLGtCQUFNLElBQUksTUFBTSxXQUFXLE9BQU8sS0FBSztBQUFBLFVBQzNDO0FBQ0EsZ0JBQU0sTUFBTSxLQUFLLFFBQVEsV0FBVyxRQUFRLE1BQU07QUFDbEQsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxPQUFPLFFBQVEsWUFBWSxRQUFRO0FBQy9CLGNBQUlDO0FBQ0osY0FBSTtBQUNBLGdCQUFJLGNBQWMsTUFBTSxHQUFHO0FBQ3ZCLG9CQUFNLFFBQVEsSUFBSSxPQUFPO0FBQ3pCLHFCQUFPLE1BQU0sUUFBUSxVQUFVO0FBQUEsWUFDbkM7QUFDQSxrQkFBTSxTQUFTLGNBQWMsSUFBSSxNQUFNO0FBQ3ZDLDBCQUFjLE1BQU0sTUFBTTtBQUMxQixnQkFBSSxlQUFlLE9BQU87QUFDMUIsZ0JBQUksV0FBVyxnQkFBdUIsZUFBZSxPQUFPLFNBQVMsYUFBYSxRQUFRO0FBQ3RGLDZCQUFlLElBQVcsWUFBWTtBQUFBLGdCQUNsQyxTQUFTO0FBQUEsa0JBQ0wsVUFBVTtBQUFBLGtCQUNWLFdBQVcsV0FBVyxRQUFRO0FBQUEsZ0JBQ2xDO0FBQUEsZ0JBQ0EsT0FBTyxPQUFPLE9BQU8sV0FBVztBQUFBLGNBQ3BDLENBQUM7QUFDRCx5QkFBVyxPQUFPLE9BQU8sT0FBTztBQUM1Qix1QkFBTyxXQUFXLEdBQUc7QUFBQSxjQUN6QjtBQUFBLFlBQ0o7QUFDQSxrQkFBTSxxQkFBNEIsY0FBYyxDQUFDLEdBQUcsWUFBWSxZQUFZO0FBQzVFLGdCQUFJLENBQUMsbUJBQW1CLFVBQVU7QUFDOUIsb0JBQU0sSUFBSSx5QkFBeUIsMEJBQTBCLE9BQU8sSUFBSSxpQkFBaUIsbUJBQW1CLE9BQU8sS0FBSyxFQUFFO0FBQUEsWUFDOUg7QUFDQSxrQkFBTSxNQUFNLElBQUksT0FBTztBQUN2QixnQkFBSSxjQUFjLE1BQU0sR0FBRztBQUN2QixrQkFBSSxFQUFFLFdBQVcsV0FBVyxjQUFjLE1BQU0sUUFBUSxXQUFXLFdBQVcsS0FBSyxJQUFJO0FBQ25GLHNCQUFNLElBQUksTUFBTSxnRkFBZ0Y7QUFBQSxjQUNwRztBQUNBLG9CQUFNLFdBQVcsT0FBTztBQUN4QixrQkFBSSxPQUFPLGFBQWEsVUFBVTtBQUM5QixzQkFBTSxZQUF1QixpQkFBaUIsUUFBUTtBQUN0RCxvQkFBSSxDQUFDLFdBQVc7QUFDWix3QkFBTSxJQUFJLE1BQU0sa0RBQWtELE9BQU8sSUFBSSxjQUFjO0FBQUEsZ0JBQy9GO0FBQ0EsdUJBQU8sT0FBTyxLQUFLLFdBQVcsV0FBVyxPQUFPLENBQUMsWUFBWSxVQUFVLFFBQVEsT0FBTyxDQUFDO0FBQUEsY0FDM0YsT0FDSztBQUNELHVCQUFPLE9BQU8sS0FBSyxXQUFXLFdBQVcsT0FBTyxDQUFDLFlBQVksS0FBSyxRQUFRLFNBQVMsUUFBUSxDQUFDO0FBQUEsY0FDaEc7QUFBQSxZQUNKO0FBQ0EsdUJBQVcsT0FBTyxPQUFPLE9BQU87QUFDNUIsb0JBQU0sa0JBQWtCLG1CQUFtQixPQUFPLEdBQUc7QUFDckQsa0JBQUksQ0FBQyxpQkFBaUI7QUFDbEI7QUFBQSxjQUNKO0FBQ0Esb0JBQU0sYUFBYSxPQUFPLE1BQU0sR0FBRztBQUNuQyxvQkFBTSxpQkFBaUIsV0FBVztBQUNsQyxrQkFBSSxPQUFPLG1CQUFtQixZQUFZLGNBQWMsY0FBYyxHQUFHO0FBQ3JFLHNCQUFNLGFBQWFBLE1BQUssV0FBVyxlQUFlLFFBQVFBLFFBQU8sU0FBU0EsTUFBTSxjQUFjLGNBQWMsSUFDdEcsSUFBSSxlQUFlLElBQ25CO0FBQ04sb0JBQUksQ0FBQyxXQUFXO0FBQ1osd0JBQU0sSUFBSSxNQUFNLG9CQUFvQjtBQUFBLGdCQUN4QztBQUNBLG9CQUFJLFdBQVcsVUFBVTtBQUNyQixzQkFBSSxXQUFXLFVBQVU7QUFDckIsMEJBQU0sWUFBWSxXQUFXLGFBQWEsYUFDN0IsV0FDQUM7QUFDYiwwQkFBTSxVQUFVLElBQUksVUFBVTtBQUM5Qiw0QkFBUSxhQUFhLGdCQUFnQjtBQUNyQywwQkFBTSxhQUFvQixRQUFRLFFBQVEsTUFBTSxLQUFLLENBQUM7QUFDdEQsd0JBQUksV0FBVyxXQUFXLElBQUk7QUFDMUIsNEJBQU0sSUFBSSxNQUFNLGdDQUFnQyxXQUFXLE9BQU8sS0FBSyxFQUFFO0FBQUEsb0JBQzdFO0FBQ0Esd0JBQUksRUFBRSxXQUFXLFdBQVcsT0FBTyxjQUFjLE1BQU0sUUFBUSxXQUFXLE9BQU8sV0FBVyxLQUFLLElBQUk7QUFDakcsNEJBQU0sSUFBSSxNQUFNLGdGQUFnRjtBQUFBLG9CQUNwRztBQUNBLDBCQUFNLFFBQVEsV0FBVyxPQUFPLFdBQVc7QUFDM0Msd0JBQUksR0FBRyxJQUFJLE1BQU0sS0FBSyxPQUFPLENBQUMsWUFBWSxVQUFVLFFBQVEsT0FBTyxDQUFDO0FBQUEsa0JBQ3hFLE9BQ0s7QUFDRCx3QkFBSSxHQUFHLElBQUksTUFBTSxLQUFLLGlCQUFpQixDQUFDLFlBQVksVUFBVSxRQUFRLE9BQU8sQ0FBQztBQUFBLGtCQUNsRjtBQUFBLGdCQUNKLE9BQ0s7QUFDRCxzQkFBSSxRQUFRO0FBQ1osc0JBQUksV0FBVyxVQUFVO0FBQ3JCLHdCQUFJO0FBQ0osd0JBQUksY0FBYyxjQUFjLEdBQUc7QUFDL0IsZ0NBQVUsSUFBSSxlQUFlLEVBQUUsU0FBUyxFQUFFO0FBQUEsb0JBQzlDLE9BQ0s7QUFDRCw0QkFBTSxlQUFlLGFBQWEsY0FBYztBQUNoRCw0QkFBTSxXQUFXLGlCQUFPLFlBQVk7QUFDcEMsMEJBQUksQ0FBQyxVQUFVO0FBQ1gsOEJBQU0sSUFBSSxNQUFNLGVBQWUsWUFBWSw0QkFBNEI7QUFBQSxzQkFDM0U7QUFDQSxnQ0FBVSxJQUFJLFNBQVM7QUFBQSxvQkFDM0I7QUFDQSw0QkFBUSxhQUFhLE1BQU07QUFDM0IsNEJBQWUsUUFBUSxRQUFRLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFBQSxrQkFDakQ7QUFDQSxzQkFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBQSxnQkFDdEM7QUFBQSxjQUNKLE9BQ0s7QUFDRCxvQkFBSSxXQUFXLFVBQVU7QUFDckIsc0JBQUksQ0FBQyxNQUFNLFFBQVEsZUFBZSxHQUFHO0FBQ2pDLDBCQUFNLElBQUksTUFBTSx1RkFBdUY7QUFBQSxrQkFDM0c7QUFDQSxzQkFBSSxHQUFHLElBQUksTUFBTSxLQUFLLGlCQUFpQixDQUFDLFlBQVksS0FBSyxRQUFRLFNBQVMsY0FBYyxDQUFDO0FBQUEsZ0JBQzdGLE9BQ0s7QUFDRCxzQkFBSSxHQUFHLElBQUksS0FBSyxRQUFRLGlCQUFpQixjQUFjO0FBQUEsZ0JBQzNEO0FBQUEsY0FDSjtBQUFBLFlBQ0o7QUFDQSxtQkFBTztBQUFBLFVBQ1gsU0FDTyxPQUFPO0FBQ1YsZ0JBQUksaUJBQWlCLDBCQUEwQjtBQUMzQyxvQkFBTSxRQUFRLEtBQUssT0FBTyxJQUFJO0FBQUEsWUFDbEM7QUFDQSxrQkFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBO0FBQUE7OztBQ3ZJQSxNQUthO0FBTGI7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxNQUFNLGdCQUFOLE1BQU0sZUFBYztBQUFBLFFBQ3ZCLE9BQU8sVUFBVSxLQUFLO0FBQ2xCLGNBQUksZUFBc0IsV0FBVztBQUNqQyxtQkFBTyxJQUFJLE1BQU0sS0FBSztBQUFBLFVBQzFCO0FBQ0EsaUJBQU8sS0FBSyxNQUFNLEdBQUcsRUFBRSxNQUFNLEtBQUs7QUFBQSxRQUN0QztBQUFBLFFBQ0EsT0FBTyxNQUFNLEtBQUs7QUFDZCxjQUFJLE9BQU8sT0FBTyxRQUFRLFlBQVksY0FBYyxHQUFHLEdBQUc7QUFDdEQsbUJBQU8sSUFBSSxNQUFNO0FBQUEsVUFDckI7QUFDQSxjQUFJLEVBQUUsT0FBTyxPQUFPLFFBQVEsV0FBVztBQUNuQyxrQkFBTSxJQUFJLFVBQVUsdUNBQXVDO0FBQUEsVUFDL0Q7QUFDQSxnQkFBTSxTQUFTLElBQUk7QUFDbkIsZ0JBQU0sU0FBUyxjQUFjLElBQUksTUFBTTtBQUN2Qyx3QkFBYyxNQUFNLE1BQU07QUFDMUIsY0FBSSxZQUFZLENBQUM7QUFDakIsY0FBSSxPQUFPLFVBQVU7QUFDakIsZ0JBQUksQ0FBQyxNQUFNLFFBQVEsR0FBRyxHQUFHO0FBQ3JCLG9CQUFNLElBQUksVUFBVSxzQ0FBc0M7QUFBQSxZQUM5RDtBQUNBLGdCQUFJLE9BQU8sT0FBTyxhQUFhLFVBQVU7QUFDckMsb0JBQU0sWUFBdUIsaUJBQWlCLE9BQU8sUUFBUTtBQUM3RCxrQkFBSSxDQUFDLFdBQVc7QUFDWixzQkFBTSxJQUFJLE1BQU0sa0RBQWtELE9BQU8sSUFBSSxjQUFjO0FBQUEsY0FDL0Y7QUFDQSwwQkFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLFVBQVUsTUFBTSxDQUFDLENBQUM7QUFBQSxZQUNqRCxPQUNLO0FBQ0QsMEJBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxNQUFNLE9BQU8sU0FBUyxHQUFHLE1BQU0sUUFBUSxDQUFDLENBQUM7QUFBQSxZQUN6RjtBQUFBLFVBQ0osT0FDSztBQUNELHVCQUFXLE9BQU8sT0FBTyxPQUFPO0FBQzVCLG9CQUFNLGFBQWEsT0FBTyxNQUFNLEdBQUc7QUFDbkMsb0JBQU0sVUFBVSxJQUFJLEdBQUc7QUFDdkIsa0JBQUksWUFBWSxVQUNULFdBQVcsaUJBQWlCLFdBQzNCLE9BQU8sV0FBVyxpQkFBaUIsWUFBWSxPQUFPLFlBQVksWUFDL0QsYUFBYSxLQUFLLFVBQVUsV0FBVyxZQUFZLEdBQUcsS0FBSyxVQUFVLE9BQU8sQ0FBQyxHQUFJO0FBQ3hGO0FBQUEsY0FDSjtBQUNBLG9CQUFNLFdBQVcsZUFBYyxVQUFVLFlBQVksS0FBSyxRQUFRLE9BQU87QUFDekUsa0JBQUksT0FBTyxXQUFXLFlBQVksVUFBVTtBQUN4QyxvQkFBSSxXQUFXLFVBQVU7QUFDckIsc0JBQUksQ0FBQyxXQUFXLGFBQ1IsT0FBTyxXQUFXLFNBQVMsWUFBWSxjQUFjLFdBQVcsSUFBSSxJQUFJO0FBQzVFLDBCQUFNLFFBQVEsQ0FBQztBQUNmLDBCQUFNLFdBQVcsb0JBQTJCLE9BQU8sU0FBUyx3QkFBd0IsU0FBUyxXQUFXLE1BQU07QUFDOUcsOEJBQVUsS0FBSyxJQUFXLFVBQVU7QUFBQSxzQkFDaEMsVUFBVSxXQUFXO0FBQUEsc0JBQ3JCLFNBQVM7QUFBQSx3QkFDTCxVQUFVO0FBQUEsd0JBQ1YsV0FBVyxXQUFXO0FBQUEsc0JBQzFCO0FBQUEsc0JBQ0EsR0FBRztBQUFBLG9CQUNQLENBQUMsQ0FBQztBQUFBLGtCQUNOLE9BQ0s7QUFDRCw4QkFBVSxLQUFLLElBQVcsWUFBWTtBQUFBLHNCQUNsQyxVQUFVLFdBQVc7QUFBQSxzQkFDckIsU0FBUztBQUFBLHdCQUNMLFVBQVU7QUFBQSx3QkFDVixXQUFXLFdBQVc7QUFBQSxzQkFDMUI7QUFBQSxzQkFDQSxPQUFPLFNBQVMsV0FBVztBQUFBLG9CQUMvQixDQUFDLENBQUM7QUFBQSxrQkFDTjtBQUFBLGdCQUNKLE9BQ0s7QUFDRCw0QkFBVSxLQUFLLElBQVcsWUFBWTtBQUFBLG9CQUNsQyxVQUFVLFdBQVc7QUFBQSxvQkFDckIsU0FBUztBQUFBLHNCQUNMLFVBQVU7QUFBQSxzQkFDVixXQUFXLFdBQVc7QUFBQSxvQkFDMUI7QUFBQSxvQkFDQSxPQUFPLENBQUMsUUFBUTtBQUFBLGtCQUNwQixDQUFDLENBQUM7QUFBQSxnQkFDTjtBQUFBLGNBQ0osV0FDUyxXQUFXLFVBQVU7QUFDMUIsNEJBQVksVUFBVSxPQUFPLFFBQVE7QUFBQSxjQUN6QyxPQUNLO0FBQ0QsMEJBQVUsS0FBSyxRQUFRO0FBQUEsY0FDM0I7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUNBLGNBQUk7QUFDSixrQkFBUSxPQUFPLE1BQU07QUFBQSxZQUNqQixLQUFLLGFBQWE7QUFDZCwwQkFBWSxJQUFXLFNBQVMsRUFBRSxPQUFPLFVBQVUsQ0FBQztBQUNwRDtBQUFBLFlBQ0osS0FBSyxhQUFhO0FBQ2QsMEJBQVksSUFBV0MsS0FBSSxFQUFFLE9BQU8sVUFBVSxDQUFDO0FBQy9DO0FBQUEsWUFDSixLQUFLLGFBQWE7QUFDZCxrQkFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHO0FBQ2Ysc0JBQU0sSUFBSSxNQUFNLFdBQVcsT0FBTyxJQUFJLDJDQUEyQztBQUFBLGNBQ3JGO0FBQ0EsMEJBQVksVUFBVSxDQUFDO0FBQ3ZCO0FBQUEsVUFDUjtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsT0FBTyxVQUFVLFlBQVksS0FBSyxRQUFRLFNBQVM7QUFDL0MsY0FBSTtBQUNKLGNBQUksT0FBUSxXQUFXLFNBQVUsVUFBVTtBQUN2QyxrQkFBTSxZQUFZLFdBQVc7QUFDN0IsZ0JBQUksQ0FBQyxXQUFXO0FBQ1osb0JBQU0sSUFBSSxNQUFNLGFBQWEsR0FBRyxxQ0FBcUMsYUFBYSxXQUFXLElBQUksQ0FBQyxlQUFlLE9BQU8sSUFBSSxHQUFHO0FBQUEsWUFDbkk7QUFDQSxnQkFBSSxXQUFXLFVBQVU7QUFDckIsa0JBQUksQ0FBQyxNQUFNLFFBQVEsT0FBTyxHQUFHO0FBQ3pCLHNCQUFNLElBQUksVUFBVSw4Q0FBOEM7QUFBQSxjQUN0RTtBQUNBLG9CQUFNLFFBQVEsTUFBTSxLQUFLLFNBQVMsQ0FBQyxZQUFZLFVBQVUsTUFBTSxPQUFPLENBQUM7QUFDdkUsb0JBQU0sWUFBWSxXQUFXLGFBQWEsYUFDN0IsV0FDQUE7QUFDYix5QkFBVyxJQUFJLFVBQVU7QUFBQSxnQkFDckIsT0FBTztBQUFBLGNBQ1gsQ0FBQztBQUFBLFlBQ0wsT0FDSztBQUNELHlCQUFXLFVBQVUsTUFBTSxPQUFPO0FBQUEsWUFDdEM7QUFBQSxVQUNKLE9BQ0s7QUFDRCxnQkFBSSxXQUFXLFVBQVU7QUFDckIsa0JBQUksQ0FBQyxNQUFNLFFBQVEsT0FBTyxHQUFHO0FBQ3pCLHNCQUFNLElBQUksVUFBVSw4Q0FBOEM7QUFBQSxjQUN0RTtBQUNBLG9CQUFNLFFBQVEsTUFBTSxLQUFLLFNBQVMsQ0FBQyxZQUFZLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDbEUsb0JBQU0sWUFBWSxXQUFXLGFBQWEsYUFDN0IsV0FDQUE7QUFDYix5QkFBVyxJQUFJLFVBQVU7QUFBQSxnQkFDckIsT0FBTztBQUFBLGNBQ1gsQ0FBQztBQUFBLFlBQ0wsT0FDSztBQUNELHlCQUFXLEtBQUssTUFBTSxPQUFPO0FBQUEsWUFDakM7QUFBQSxVQUNKO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUFBO0FBQUE7OztBQ3pKQTtBQUFBO0FBQUE7QUFBQTs7O0FDQUEsTUFDQUMsbUJBR2E7QUFKYjtBQUFBO0FBQUE7QUFDQSxNQUFBQSxvQkFBc0M7QUFDdEM7QUFDQTtBQUNPLE1BQU0sYUFBTixNQUFNLFlBQVc7QUFBQSxRQUNwQixPQUFPLFVBQVUsS0FBSztBQUNsQixpQkFBTyxjQUFjLFVBQVUsR0FBRztBQUFBLFFBQ3RDO0FBQUEsUUFDQSxPQUFPLE1BQU0sTUFBTSxRQUFRO0FBQ3ZCLGlCQUFPLFVBQVUsTUFBTSxNQUFNLE1BQU07QUFBQSxRQUN2QztBQUFBLFFBQ0EsT0FBTyxTQUFTLE1BQU07QUFDbEIsZ0JBQU0sTUFBTSx3Q0FBc0IsZUFBZSxJQUFJLElBQy9DLHdDQUFzQixjQUFjLElBQUksSUFDeEMsWUFBVyxVQUFVLElBQUk7QUFDL0IsZ0JBQU0sTUFBYSxRQUFRLEdBQUc7QUFDOUIsY0FBSSxJQUFJLFdBQVcsSUFBSTtBQUNuQixrQkFBTSxJQUFJLE1BQU0sNkJBQTZCLElBQUksT0FBTyxLQUFLLEVBQUU7QUFBQSxVQUNuRTtBQUNBLGlCQUFPLElBQUksT0FBTyxTQUFTO0FBQUEsUUFDL0I7QUFBQSxNQUNKO0FBQUE7QUFBQTs7O0FDckJBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBOzs7QUM4Q08sV0FBUyxXQUFXLFlBQVksUUFBUSxLQUFLLE1BQU07QUFDeEQsUUFBSSxJQUFJLFVBQVUsUUFBUSxJQUFJLElBQUksSUFBSSxTQUFTLFNBQVMsT0FBTyxPQUFPLE9BQU8seUJBQXlCLFFBQVEsR0FBRyxJQUFJLE1BQU1DO0FBQzNILFFBQUksT0FBTyxZQUFZLFlBQVksT0FBTyxRQUFRLGFBQWE7QUFBWSxVQUFJLFFBQVEsU0FBUyxZQUFZLFFBQVEsS0FBSyxJQUFJO0FBQUE7QUFDeEgsZUFBUyxJQUFJLFdBQVcsU0FBUyxHQUFHLEtBQUssR0FBRztBQUFLLFlBQUlBLEtBQUksV0FBVyxDQUFDO0FBQUcsZUFBSyxJQUFJLElBQUlBLEdBQUUsQ0FBQyxJQUFJLElBQUksSUFBSUEsR0FBRSxRQUFRLEtBQUssQ0FBQyxJQUFJQSxHQUFFLFFBQVEsR0FBRyxNQUFNO0FBQ2hKLFdBQU8sSUFBSSxLQUFLLEtBQUssT0FBTyxlQUFlLFFBQVEsS0FBSyxDQUFDLEdBQUc7QUFBQSxFQUM5RDtBQTNEQTtBQUFBO0FBQUE7QUFBQTs7O0FDcURBLFdBQVMsVUFBVSxPQUFPLE1BQU07QUFDNUIsWUFBUSxNQUFNO0FBQUEsTUFDVixLQUFLLGNBQWM7QUFDZixlQUFPLE9BQU8sVUFBVTtBQUFBLE1BQzVCLEtBQUssY0FBYztBQUNmLGVBQU8sT0FBTyxVQUFVO0FBQUEsTUFDNUIsS0FBSyxjQUFjO0FBQ2YsZUFBTyxPQUFPLFVBQVU7QUFBQSxJQUNoQztBQUNBLFdBQU87QUFBQSxFQUNYO0FBQ0EsV0FBUyxtQkFBbUIsT0FBTyxNQUFNO0FBQ3JDLFFBQUksQ0FBQyxVQUFVLE9BQU8sSUFBSSxHQUFHO0FBQ3pCLFlBQU0sSUFBSSxVQUFVLGlCQUFpQixjQUFjLElBQUksQ0FBQyxFQUFFO0FBQUEsSUFDOUQ7QUFBQSxFQUNKO0FBQ0EsV0FBU0MsZUFBYyxRQUFRO0FBQzNCLFFBQUksVUFBVSxPQUFPLFdBQVc7QUFDNUIsVUFBSSxPQUFPLFVBQVUsVUFBVSxPQUFPLFVBQVUsVUFBVTtBQUN0RCxlQUFPO0FBQUEsTUFDWCxPQUNLO0FBQ0QsZUFBT0EsZUFBYyxPQUFPLFNBQVM7QUFBQSxNQUN6QztBQUFBLElBQ0osT0FDSztBQUNELGFBQU8sQ0FBQyxFQUFFLFVBQVUsT0FBTyxVQUFVLE9BQU87QUFBQSxJQUNoRDtBQUFBLEVBQ0o7QUFrVkEsV0FBUyxlQUFlLE1BQU07QUFDMUIsVUFBTSxjQUFjLENBQUM7QUFDckIsUUFBSSxLQUFLLFNBQVM7QUFDZCxrQkFBWSxLQUFLLElBQUksa0JBQWtCLEtBQUssT0FBTyxDQUFDO0FBQUEsSUFDeEQ7QUFDQSxRQUFJLEtBQUssU0FBUyxjQUFjLFVBQVUsS0FBSyxTQUFTLGNBQWMsS0FBSztBQUN2RSxVQUFJLEtBQUssaUJBQWlCLFVBQWEsS0FBSyxpQkFBaUIsUUFBVztBQUNwRSxvQkFBWSxLQUFLLElBQUksb0JBQW9CLEtBQUssY0FBYyxLQUFLLFlBQVksQ0FBQztBQUFBLE1BQ2xGO0FBQ0EsVUFBSSxLQUFLLGlCQUFpQixVQUFhLEtBQUssaUJBQWlCLFFBQVc7QUFDcEUsb0JBQVksS0FBSyxJQUFJLG9CQUFvQixLQUFLLGNBQWMsS0FBSyxZQUFZLENBQUM7QUFBQSxNQUNsRjtBQUNBLFVBQUksS0FBSyxnQkFBZ0IsUUFBVztBQUNoQyxvQkFBWSxLQUFLLElBQUksc0JBQXNCLEtBQUssV0FBVyxDQUFDO0FBQUEsTUFDaEU7QUFBQSxJQUNKO0FBQ0EsUUFBSSxLQUFLLFNBQVMsY0FBYyxVQUFVLEtBQUssWUFBWSxLQUFLLFNBQVMsY0FBYyxLQUFLO0FBQ3hGLFVBQUksS0FBSyxXQUFXLFVBQWEsS0FBSyxjQUFjLFVBQWEsS0FBSyxjQUFjLFFBQVc7QUFDM0Ysb0JBQVksS0FBSyxJQUFJLGlCQUFpQixLQUFLLFFBQVEsS0FBSyxXQUFXLEtBQUssU0FBUyxDQUFDO0FBQUEsTUFDdEY7QUFBQSxJQUNKO0FBQ0EsV0FBTztBQUFBLEVBQ1g7QUF6YkEsTUFJTSxXQVVBLGdCQU9BLGFBTUEsaUJBR0EsaUJBT0EsVUFRRixlQXNDRSxtQkF5Q0EsZ0JBQ0FDLGdCQUVBLG1CQWVBLHFCQWVBLHFCQWVBLGtCQTBCQSx1QkFZQSxlQThCQSxnQkF3RkEsWUFrSEE7QUExYk4sTUFBQUMsaUJBQUE7QUFBQTtBQUlBLE1BQU0sWUFBTixjQUF3QixNQUFNO0FBQUEsUUFDMUIsWUFBWSxTQUFTLFlBQVk7QUFDN0IsZ0JBQU0sYUFDQSxHQUFHLE9BQU8sZ0RBQ1YsT0FBTztBQUNiLGVBQUssVUFBVTtBQUNmLGVBQUssYUFBYTtBQUFBLFFBQ3RCO0FBQUEsTUFDSjtBQUVBLE1BQU0saUJBQU4sY0FBNkIsVUFBVTtBQUFBLFFBQ25DLFlBQVksUUFBUSxTQUFTLFlBQVk7QUFDckMsZ0JBQU0sU0FBUyxVQUFVO0FBQ3pCLGVBQUssU0FBUztBQUFBLFFBQ2xCO0FBQUEsTUFDSjtBQUVBLE1BQU0sY0FBTixjQUEwQixlQUFlO0FBQUEsUUFDckMsWUFBWSxRQUFRLFNBQVMsWUFBWTtBQUNyQyxnQkFBTSxRQUFRLDBCQUEwQixPQUFPLE9BQU8sSUFBSSxhQUFhLE9BQU8sSUFBSSxVQUFVO0FBQUEsUUFDaEc7QUFBQSxNQUNKO0FBRUEsTUFBTSxrQkFBTixjQUE4QixVQUFVO0FBQUEsTUFDeEM7QUFFQSxNQUFNLGtCQUFOLGNBQThCLFVBQVU7QUFBQSxRQUNwQyxZQUFZLFlBQVksU0FBUyxZQUFZO0FBQ3pDLGdCQUFNLHdCQUF3QixVQUFVLGFBQWEsT0FBTyxJQUFJLFVBQVU7QUFDMUUsZUFBSyxhQUFhO0FBQUEsUUFDdEI7QUFBQSxNQUNKO0FBRUEsTUFBTSxXQUFOLGNBQXVCLFlBQVk7QUFBQSxRQUMvQixZQUFZLFFBQVEsTUFBTSxTQUFTLENBQUMsR0FBRztBQUNuQyxnQkFBTSxRQUFRLG1DQUFtQztBQUNqRCxlQUFLLE9BQU87QUFDWixlQUFLLFNBQVM7QUFBQSxRQUNsQjtBQUFBLE1BQ0o7QUFHQSxPQUFDLFNBQVVDLGdCQUFlO0FBQ3RCLFFBQUFBLGVBQWNBLGVBQWMsS0FBSyxJQUFJLENBQUMsSUFBSTtBQUMxQyxRQUFBQSxlQUFjQSxlQUFjLFNBQVMsSUFBSSxDQUFDLElBQUk7QUFDOUMsUUFBQUEsZUFBY0EsZUFBYyxRQUFRLElBQUksQ0FBQyxJQUFJO0FBQzdDLFFBQUFBLGVBQWNBLGVBQWMsUUFBUSxJQUFJLENBQUMsSUFBSTtBQUFBLE1BQ2pELEdBQUcsa0JBQWtCLGdCQUFnQixDQUFDLEVBQUU7QUFnQ3hDLE1BQU0sb0JBQU4sTUFBd0I7QUFBQSxRQUNwQixjQUFjO0FBQ1YsZUFBSyxRQUFRLG9CQUFJLElBQUk7QUFBQSxRQUN6QjtBQUFBLFFBQ0EsSUFBSSxRQUFRO0FBQ1IsaUJBQU8sS0FBSyxNQUFNLElBQUksTUFBTSxLQUFLLENBQUMsQ0FBQyxLQUFLLGlCQUFpQixNQUFNO0FBQUEsUUFDbkU7QUFBQSxRQUNBLElBQUksUUFBUTtBQUNSLGdCQUFNLFNBQVMsS0FBSyxNQUFNLElBQUksTUFBTSxLQUFLLEtBQUssaUJBQWlCLE1BQU07QUFDckUsY0FBSSxDQUFDLFFBQVE7QUFDVCxrQkFBTSxJQUFJLE1BQU0sc0NBQXNDO0FBQUEsVUFDMUQ7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLE9BQU8sUUFBUTtBQUNYLGdCQUFNLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRTtBQUMzQixnQkFBTSxlQUFlLEtBQUssaUJBQWlCLE1BQU07QUFDakQsY0FBSSxjQUFjO0FBQ2QsbUJBQU8sT0FBTyxRQUFRLFlBQVk7QUFDbEMsbUJBQU8sUUFBUSxDQUFDO0FBQ2hCLHVCQUFXLFFBQVEsYUFBYSxPQUFPO0FBQ25DLHFCQUFPLE1BQU0sSUFBSSxJQUFJLE9BQU8sT0FBTyxDQUFDLEdBQUcsYUFBYSxNQUFNLElBQUksQ0FBQztBQUFBLFlBQ25FO0FBQUEsVUFDSjtBQUNBLGlCQUFPLFNBQVM7QUFDaEIsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxJQUFJLFFBQVEsUUFBUTtBQUNoQixlQUFLLE1BQU0sSUFBSSxRQUFRLE1BQU07QUFDN0IsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxpQkFBaUIsUUFBUTtBQUNyQixnQkFBTSxTQUFTLE9BQU87QUFDdEIsY0FBSSxRQUFRO0FBQ1Isa0JBQU0sU0FBUyxLQUFLLE1BQU0sSUFBSSxNQUFNO0FBQ3BDLG1CQUFPLFVBQVUsS0FBSyxpQkFBaUIsTUFBTTtBQUFBLFVBQ2pEO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUVBLE1BQU0saUJBQWlCO0FBQ3ZCLE1BQU1GLGlCQUFnQixJQUFJLGtCQUFrQjtBQUU1QyxNQUFNLG9CQUFOLE1BQXdCO0FBQUEsUUFDcEIsWUFBWSxTQUFTO0FBQ2pCLGVBQUssVUFBVSxJQUFJLE9BQU8sT0FBTztBQUFBLFFBQ3JDO0FBQUEsUUFDQSxTQUFTLE9BQU87QUFDWixnQkFBTSxVQUFVLElBQUksT0FBTyxLQUFLLFFBQVEsUUFBUSxLQUFLLFFBQVEsS0FBSztBQUNsRSxjQUFJLE9BQU8sVUFBVSxVQUFVO0FBQzNCLGtCQUFNLElBQUksZ0JBQWdCLCtCQUErQjtBQUFBLFVBQzdEO0FBQ0EsY0FBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLEdBQUc7QUFDdEIsa0JBQU0sSUFBSSxnQkFBZ0IsbUNBQW1DLFFBQVEsU0FBUyxDQUFDLEdBQUc7QUFBQSxVQUN0RjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsTUFBTSxzQkFBTixNQUEwQjtBQUFBLFFBQ3RCLFlBQVlHLE9BQU0sT0FBTyxXQUFXQyxPQUFNLE9BQU8sV0FBVztBQUN4RCxlQUFLLE1BQU1EO0FBQ1gsZUFBSyxNQUFNQztBQUFBLFFBQ2Y7QUFBQSxRQUNBLFNBQVMsT0FBTztBQUNaLDZCQUFtQixPQUFPLGNBQWMsTUFBTTtBQUM5QyxjQUFJLEVBQUUsS0FBSyxPQUFPLFNBQVMsU0FBUyxLQUFLLE1BQU07QUFDM0Msa0JBQU1ELE9BQU0sS0FBSyxRQUFRLE9BQU8sWUFBWSxRQUFRLEtBQUs7QUFDekQsa0JBQU1DLE9BQU0sS0FBSyxRQUFRLE9BQU8sWUFBWSxRQUFRLEtBQUs7QUFDekQsa0JBQU0sSUFBSSxnQkFBZ0Isb0NBQW9DRCxJQUFHLElBQUlDLElBQUcsR0FBRztBQUFBLFVBQy9FO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNLHNCQUFOLE1BQTBCO0FBQUEsUUFDdEIsWUFBWUQsT0FBTSxPQUFPLFdBQVdDLE9BQU0sT0FBTyxXQUFXO0FBQ3hELGVBQUssTUFBTUQ7QUFDWCxlQUFLLE1BQU1DO0FBQUEsUUFDZjtBQUFBLFFBQ0EsU0FBUyxPQUFPO0FBQ1osNkJBQW1CLE9BQU8sY0FBYyxNQUFNO0FBQzlDLGNBQUksRUFBRSxLQUFLLE1BQU0sU0FBUyxRQUFRLEtBQUssTUFBTTtBQUN6QyxrQkFBTUQsT0FBTSxLQUFLLFFBQVEsT0FBTyxZQUFZLFFBQVEsS0FBSztBQUN6RCxrQkFBTUMsT0FBTSxLQUFLLFFBQVEsT0FBTyxZQUFZLFFBQVEsS0FBSztBQUN6RCxrQkFBTSxJQUFJLGdCQUFnQixvQ0FBb0NELElBQUcsSUFBSUMsSUFBRyxHQUFHO0FBQUEsVUFDL0U7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUVBLE1BQU0sbUJBQU4sTUFBdUI7QUFBQSxRQUNuQixZQUFZLFFBQVEsV0FBVyxXQUFXO0FBQ3RDLGVBQUssU0FBUztBQUNkLGVBQUssWUFBWTtBQUNqQixlQUFLLFlBQVk7QUFBQSxRQUNyQjtBQUFBLFFBQ0EsU0FBUyxPQUFPO0FBQ1osY0FBSSxLQUFLLFdBQVcsUUFBVztBQUMzQixnQkFBSSxNQUFNLFdBQVcsS0FBSyxRQUFRO0FBQzlCLG9CQUFNLElBQUksZ0JBQWdCLGdDQUFnQyxLQUFLLE1BQU0sR0FBRztBQUFBLFlBQzVFO0FBQ0E7QUFBQSxVQUNKO0FBQ0EsY0FBSSxLQUFLLGNBQWMsUUFBVztBQUM5QixnQkFBSSxNQUFNLFNBQVMsS0FBSyxXQUFXO0FBQy9CLG9CQUFNLElBQUksZ0JBQWdCLGtDQUFrQyxLQUFLLFNBQVMsR0FBRztBQUFBLFlBQ2pGO0FBQUEsVUFDSjtBQUNBLGNBQUksS0FBSyxjQUFjLFFBQVc7QUFDOUIsZ0JBQUksTUFBTSxTQUFTLEtBQUssV0FBVztBQUMvQixvQkFBTSxJQUFJLGdCQUFnQixrQ0FBa0MsS0FBSyxTQUFTLEdBQUc7QUFBQSxZQUNqRjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUVBLE1BQU0sd0JBQU4sTUFBNEI7QUFBQSxRQUN4QixZQUFZLGFBQWE7QUFDckIsZUFBSyxjQUFjO0FBQUEsUUFDdkI7QUFBQSxRQUNBLFNBQVMsT0FBTztBQUNaLDZCQUFtQixPQUFPLGNBQWMsTUFBTTtBQUM5QyxjQUFJLENBQUMsS0FBSyxZQUFZLFNBQVMsS0FBSyxHQUFHO0FBQ25DLGtCQUFNLElBQUksZ0JBQWdCLHdCQUF3QixLQUFLLFlBQVksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFO0FBQUEsVUFDeEc7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUVBLE1BQU0sZ0JBQU4sTUFBb0I7QUFBQSxRQUNoQixPQUFPLFlBQVksTUFBTSxZQUFZO0FBQ2pDLGdCQUFNLFNBQVMsTUFBTSxRQUFRLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSTtBQUNqRCxxQkFBVyxTQUFTLFFBQVE7QUFDeEIsdUJBQVcsY0FBYyxXQUFXLGFBQWE7QUFDN0Msa0JBQUksc0JBQXNCLG9CQUFvQixXQUFXLFVBQVU7QUFDL0QsMkJBQVcsU0FBUyxJQUFJO0FBQUEsY0FDNUIsT0FDSztBQUNELDJCQUFXLFNBQVMsS0FBSztBQUFBLGNBQzdCO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsUUFDQSxPQUFPLFdBQVcsT0FBTyxZQUFZO0FBQ2pDLGNBQUksV0FBVyxZQUFZLENBQUMsTUFBTSxRQUFRLEtBQUssR0FBRztBQUM5QyxrQkFBTSxJQUFJLFVBQVUscUJBQXFCO0FBQUEsVUFDN0M7QUFDQSxjQUFJLE9BQU8sV0FBVyxTQUFTLFVBQVU7QUFDckMsa0JBQU0sU0FBUyxNQUFNLFFBQVEsS0FBSyxJQUFJLFFBQVEsQ0FBQyxLQUFLO0FBQ3BELHVCQUFXLEtBQUssUUFBUTtBQUNwQixpQ0FBbUIsR0FBRyxXQUFXLElBQUk7QUFBQSxZQUN6QztBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsUUFDQSxPQUFPLGdCQUFnQixRQUFRLE9BQU8sZ0JBQWdCO0FBQ2xELGlCQUFPLEVBQUUsR0FBRyxPQUFPLE1BQU0sY0FBYyxHQUFHLEdBQUcsT0FBTyxNQUFNLElBQUksRUFBRTtBQUFBLFFBQ3BFO0FBQUEsTUFDSjtBQUVBLE1BQU0saUJBQU4sY0FBNkIsY0FBYztBQUFBLFFBQ3ZDLE9BQU8sVUFBVSxLQUFLQyxVQUFTLFVBQVUsT0FBTztBQUM1QyxnQkFBTSxPQUFPLEtBQUssT0FBTyxLQUFLQSxRQUFPO0FBQ3JDLGlCQUFPLEtBQUssVUFBVSxNQUFNLFVBQVUsS0FBSztBQUFBLFFBQy9DO0FBQUEsUUFDQSxPQUFPLE9BQU8sS0FBS0EsV0FBVSxDQUFDLEdBQUc7QUFDN0IsY0FBSTtBQUNKLGNBQUksZUFBZUEsU0FBUTtBQUMzQixnQkFBTSxhQUFhQSxTQUFRLGNBQWM7QUFDekMsY0FBSU4sZUFBYyxHQUFHLEdBQUc7QUFDcEIsbUJBQU8sSUFBSSxPQUFPO0FBQUEsVUFDdEI7QUFDQSxjQUFJLE1BQU0sUUFBUSxHQUFHLEdBQUc7QUFDcEIsa0JBQU0sQ0FBQztBQUNQLHVCQUFXLFFBQVEsS0FBSztBQUNwQixrQkFBSSxLQUFLLEtBQUssT0FBTyxNQUFNTSxRQUFPLENBQUM7QUFBQSxZQUN2QztBQUFBLFVBQ0osV0FDUyxPQUFPLFFBQVEsVUFBVTtBQUM5QixnQkFBSSxnQkFBZ0IsQ0FBQ0wsZUFBYyxJQUFJLFlBQVksR0FBRztBQUNsRCxvQkFBTSxJQUFJLFVBQVUsNENBQTRDO0FBQUEsWUFDcEU7QUFDQSwyQkFBZ0IsZ0JBQWdCLElBQUk7QUFDcEMsZ0JBQUlBLGVBQWMsSUFBSSxZQUFZLEdBQUc7QUFDakMsb0JBQU0sU0FBU0EsZUFBYyxJQUFJLFlBQVk7QUFDN0Msb0JBQU0sQ0FBQztBQUNQLG9CQUFNLGNBQWMsS0FBSyxnQkFBZ0IsUUFBUSxVQUFVO0FBQzNELHlCQUFXLE9BQU8sYUFBYTtBQUMzQixvQkFBSTtBQUNBLHdCQUFNLE9BQU8sWUFBWSxHQUFHO0FBQzVCLHdCQUFNLFVBQVUsSUFBSSxHQUFHO0FBQ3ZCLHNCQUFJO0FBQ0osc0JBQUssS0FBSyxZQUFZLFlBQVksVUFDMUIsS0FBSyxpQkFBaUIsVUFBYSxZQUFZLEtBQUssY0FBZTtBQUN2RTtBQUFBLGtCQUNKO0FBQ0Esc0JBQUksQ0FBQyxLQUFLLFlBQVksWUFBWSxRQUFXO0FBQ3pDLDBCQUFNLElBQUksZ0JBQWdCLGFBQWEsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCO0FBQUEsa0JBQ2pGO0FBQ0Esc0JBQUksT0FBTyxLQUFLLFNBQVMsVUFBVTtBQUMvQix3QkFBSSxLQUFLLFdBQVc7QUFDaEIsMEJBQUksS0FBSyxVQUFVO0FBQ2YsZ0NBQVEsUUFBUSxJQUFJLENBQUMsT0FBTyxLQUFLLFVBQVUsT0FBTyxJQUFJLEdBQUcsQ0FBQztBQUFBLHNCQUM5RCxPQUNLO0FBQ0QsZ0NBQVEsS0FBSyxVQUFVLE9BQU8sU0FBUyxHQUFHO0FBQUEsc0JBQzlDO0FBQUEsb0JBQ0osT0FDSztBQUNELDhCQUFRO0FBQUEsb0JBQ1o7QUFBQSxrQkFDSixPQUNLO0FBQ0Qsd0JBQUksS0FBSyxVQUFVO0FBQ2YsOEJBQVEsUUFBUSxJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU8sSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQUEsb0JBQy9ELE9BQ0s7QUFDRCw4QkFBUSxLQUFLLE9BQU8sU0FBUyxFQUFFLFdBQVcsQ0FBQztBQUFBLG9CQUMvQztBQUFBLGtCQUNKO0FBQ0EsdUJBQUssV0FBVyxPQUFPLElBQUk7QUFDM0IsdUJBQUssWUFBWSxPQUFPLElBQUk7QUFDNUIsc0JBQUksS0FBSyxRQUFRLEdBQUcsSUFBSTtBQUFBLGdCQUM1QixTQUNPLEdBQUc7QUFDTixzQkFBSSxhQUFhLGlCQUFpQjtBQUM5QiwwQkFBTTtBQUFBLGtCQUNWLE9BQ0s7QUFDRCwwQkFBTSxJQUFJLGdCQUFnQixPQUFPLE9BQU8sTUFBTSxhQUFhLEdBQUcsZUFBZSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQUEsa0JBQy9GO0FBQUEsZ0JBQ0o7QUFBQSxjQUNKO0FBQUEsWUFDSixPQUNLO0FBQ0Qsb0JBQU0sQ0FBQztBQUNQLHlCQUFXLE9BQU8sS0FBSztBQUNuQixvQkFBSSxHQUFHLElBQUksS0FBSyxPQUFPLElBQUksR0FBRyxHQUFHLEVBQUUsV0FBVyxDQUFDO0FBQUEsY0FDbkQ7QUFBQSxZQUNKO0FBQUEsVUFDSixPQUNLO0FBQ0Qsa0JBQU07QUFBQSxVQUNWO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUVBLE1BQU0sYUFBTixNQUFNLG9CQUFtQixjQUFjO0FBQUEsUUFDbkMsT0FBTyxNQUFNLE1BQU1LLFVBQVM7QUFDeEIsZ0JBQU0sTUFBTSxLQUFLLE1BQU0sSUFBSTtBQUMzQixpQkFBTyxLQUFLLFNBQVMsS0FBS0EsUUFBTztBQUFBLFFBQ3JDO0FBQUEsUUFDQSxPQUFPLFNBQVMsUUFBUUEsVUFBUztBQUM3QixnQkFBTSxlQUFlQSxTQUFRO0FBQzdCLGdCQUFNLGFBQWFBLFNBQVEsY0FBYztBQUN6QyxnQkFBTSxNQUFNLElBQUksYUFBYTtBQUM3QixjQUFJTixlQUFjLEdBQUcsR0FBRztBQUNwQixtQkFBTyxJQUFJLFNBQVMsTUFBTTtBQUFBLFVBQzlCO0FBQ0EsZ0JBQU0sU0FBU0MsZUFBYyxJQUFJLFlBQVk7QUFDN0MsZ0JBQU0sY0FBYyxLQUFLLGdCQUFnQixRQUFRLFVBQVU7QUFDM0QsZ0JBQU0sWUFBWSxDQUFDO0FBQ25CLGNBQUlLLFNBQVEsa0JBQWtCLENBQUMsTUFBTSxRQUFRLE1BQU0sR0FBRztBQUNsRCx3QkFBVyxvQkFBb0IsUUFBUSxhQUFhLE1BQU07QUFBQSxVQUM5RDtBQUNBLHFCQUFXLE9BQU8sYUFBYTtBQUMzQixnQkFBSTtBQUNBLG9CQUFNLE9BQU8sWUFBWSxHQUFHO0FBQzVCLG9CQUFNLE9BQU8sS0FBSyxRQUFRO0FBQzFCLG9CQUFNLFFBQVEsT0FBTyxJQUFJO0FBQ3pCLGtCQUFJLFVBQVUsV0FBYyxLQUFLLFlBQVksS0FBSyxpQkFBaUIsU0FBWTtBQUMzRTtBQUFBLGNBQ0o7QUFDQSxrQkFBSSxDQUFDLEtBQUssWUFBWSxVQUFVLFFBQVc7QUFDdkMsc0JBQU0sSUFBSSxZQUFZLFFBQVEsYUFBYSxJQUFJLGdCQUFnQjtBQUFBLGNBQ25FO0FBQ0EsbUJBQUssV0FBVyxPQUFPLElBQUk7QUFDM0IsbUJBQUssWUFBWSxPQUFPLElBQUk7QUFDNUIsa0JBQUksT0FBUSxLQUFLLFNBQVUsVUFBVTtBQUNqQyxvQkFBSSxLQUFLLFdBQVc7QUFDaEIsc0JBQUksS0FBSyxVQUFVO0FBQ2Ysd0JBQUksR0FBRyxJQUFJLE1BQU0sSUFBSSxDQUFDLE9BQU8sS0FBSyxVQUFVLFNBQVMsSUFBSSxHQUFHLENBQUM7QUFBQSxrQkFDakUsT0FDSztBQUNELHdCQUFJLEdBQUcsSUFBSSxLQUFLLFVBQVUsU0FBUyxPQUFPLEdBQUc7QUFBQSxrQkFDakQ7QUFBQSxnQkFDSixPQUNLO0FBQ0Qsc0JBQUksR0FBRyxJQUFJO0FBQUEsZ0JBQ2Y7QUFBQSxjQUNKLE9BQ0s7QUFDRCxzQkFBTSxhQUFhO0FBQUEsa0JBQ2YsR0FBR0E7QUFBQSxrQkFDSCxjQUFjLEtBQUs7QUFBQSxrQkFDbkI7QUFBQSxnQkFDSjtBQUNBLG9CQUFJLEtBQUssVUFBVTtBQUNmLHNCQUFJLEdBQUcsSUFBSSxNQUFNLElBQUksQ0FBQyxPQUFPLEtBQUssU0FBUyxJQUFJLFVBQVUsQ0FBQztBQUFBLGdCQUM5RCxPQUNLO0FBQ0Qsc0JBQUksR0FBRyxJQUFJLEtBQUssU0FBUyxPQUFPLFVBQVU7QUFBQSxnQkFDOUM7QUFBQSxjQUNKO0FBQUEsWUFDSixTQUNPLEdBQUc7QUFDTixrQkFBSSxFQUFFLGFBQWEsY0FBYztBQUM3QixvQkFBSSxJQUFJLFlBQVksUUFBUSxhQUFhLEdBQUcsZUFBZSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQUEsY0FDN0U7QUFDQSxrQkFBSUEsU0FBUSxlQUFlO0FBQ3ZCLDBCQUFVLEdBQUcsSUFBSTtBQUFBLGNBQ3JCLE9BQ0s7QUFDRCxzQkFBTTtBQUFBLGNBQ1Y7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUNBLGdCQUFNLE9BQU8sT0FBTyxLQUFLLFNBQVM7QUFDbEMsY0FBSSxLQUFLLFFBQVE7QUFDYixrQkFBTSxJQUFJLFNBQVMsUUFBUSxNQUFNLFNBQVM7QUFBQSxVQUM5QztBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsT0FBTyxvQkFBb0IsUUFBUSxhQUFhLFFBQVE7QUFDcEQsZ0JBQU0sWUFBWSxPQUFPLEtBQUssTUFBTTtBQUNwQyxnQkFBTSxjQUFjLE9BQU8sS0FBSyxXQUFXO0FBQzNDLGdCQUFNLE9BQU8sQ0FBQztBQUNkLHFCQUFXLE9BQU8sV0FBVztBQUN6QixnQkFBSSxZQUFZLFFBQVEsR0FBRyxNQUFNLElBQUk7QUFDakMsbUJBQUssS0FBSyxHQUFHO0FBQUEsWUFDakI7QUFBQSxVQUNKO0FBQ0EsY0FBSSxLQUFLLFFBQVE7QUFDYixrQkFBTSxJQUFJLFNBQVMsUUFBUSxJQUFJO0FBQUEsVUFDbkM7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQXlCQSxNQUFNLFdBQVcsQ0FBQ0EsV0FBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLGdCQUFnQjtBQUN4RCxjQUFNLGVBQWUsdUJBQXVCLFdBQVcsZ0JBQWdCLE9BQU8sWUFBWSxJQUFJO0FBQzlGLFlBQUk7QUFDSixZQUFJLENBQUNMLGVBQWMsSUFBSSxPQUFPLFdBQVcsR0FBRztBQUN4QyxtQkFBU0EsZUFBYyxPQUFPLE9BQU8sV0FBVztBQUNoRCxVQUFBQSxlQUFjLElBQUksT0FBTyxhQUFhLE1BQU07QUFBQSxRQUNoRCxPQUNLO0FBQ0QsbUJBQVNBLGVBQWMsSUFBSSxPQUFPLFdBQVc7QUFDN0MsY0FBSSxPQUFPLFdBQVcsT0FBTyxhQUFhO0FBQ3RDLHFCQUFTQSxlQUFjLE9BQU8sT0FBTyxXQUFXO0FBQ2hELFlBQUFBLGVBQWMsSUFBSSxPQUFPLGFBQWEsTUFBTTtBQUFBLFVBQ2hEO0FBQUEsUUFDSjtBQUNBLGNBQU0sZ0JBQWdCO0FBQUEsVUFDbEIsTUFBTSxjQUFjO0FBQUEsVUFDcEIsYUFBYSxDQUFDO0FBQUEsUUFDbEI7QUFDQSxjQUFNLGNBQWMsT0FBTyxPQUFPLGVBQWVLLFFBQU87QUFDeEQsb0JBQVksY0FBYyxlQUFlLFdBQVc7QUFDcEQsWUFBSSxPQUFPLFlBQVksU0FBUyxVQUFVO0FBQ3RDLGNBQUksQ0FBQ0wsZUFBYyxJQUFJLFlBQVksSUFBSSxLQUFLLENBQUNELGVBQWMsWUFBWSxJQUFJLEdBQUc7QUFDMUUsa0JBQU0sSUFBSSxNQUFNLEdBQUcsWUFBWSx1Q0FBdUM7QUFBQSxVQUMxRTtBQUFBLFFBQ0o7QUFDQSxZQUFJO0FBQ0osWUFBSSxNQUFNLFFBQVFNLFNBQVEsTUFBTSxHQUFHO0FBQy9CLHdCQUFjQSxTQUFRO0FBQUEsUUFDMUIsT0FDSztBQUNELHdCQUFjLENBQUNBLFNBQVEsVUFBVSxjQUFjO0FBQUEsUUFDbkQ7QUFDQSxtQkFBVyxjQUFjLGFBQWE7QUFDbEMsY0FBSSxDQUFDLE9BQU8sTUFBTSxVQUFVLEdBQUc7QUFDM0IsbUJBQU8sTUFBTSxVQUFVLElBQUksQ0FBQztBQUFBLFVBQ2hDO0FBQ0EsZ0JBQU0sY0FBYyxPQUFPLE1BQU0sVUFBVTtBQUMzQyxzQkFBWSxXQUFXLElBQUk7QUFBQSxRQUMvQjtBQUFBLE1BQ0o7QUFBQTtBQUFBOzs7QUNsWUEsV0FBUyxNQUFNLE1BQU07QUFDakIsV0FBTyxPQUFPLFNBQVMsWUFBWSxTQUFTO0FBQUEsRUFDaEQ7QUFqR0EsTUFJQUMsbUJBQ0FBLG1CQU1NLGFBR0EsZ0JBR0EsMkJBTUEsZ0JBR0EsdUJBeUVBLGdCQWtNQSxhQW9CQSxnQkFpQkEsaUJBaUJBLGdCQXdCQSxnQkFRQSxnQkFnQ0EsZUFRQSxhQThCQSxhQTZCQSxnQkFXQSxnQkFvQkEsaUJBaUJBLGtCQWVBLGVBaUJBLFdBQ0EsV0FpQkEsY0F3QkEsZ0JBUUEsZUFZRkMsbUJBY0UscUJBaUJBLGdCQW9CQSxlQWFBLG1DQUtBLGdDQXFCQSxlQW9EQSxjQWVGLGFBMENFLGNBMENBLG1DQWtCRixTQUtFLFNBd0VBLGdCQTBCQSxrQkFNRixjQXlCQSxhQTRCQSxpQkFVRSxhQUNBLGlCQUNBLGFBQ0EsYUFDQSxhQUNBLGNBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsVUFDQSxRQUNBLFdBQ0EsU0FFRixTQTBDRSxVQWtEQSxjQW9DQSxnQkE4QkEsY0EyQkEsZUFzQkEsa0JBUUEsa0JBUUEsUUFhQSxpQkFpQ0E7QUFqMENOO0FBQUE7QUFJQSxNQUFBRCxvQkFBd0Q7QUFDeEQsTUFBQUEsb0JBQXNDO0FBQ3RDO0FBQ0E7QUFDQSxNQUFBRTtBQUNBO0FBRUEsTUFBTSxjQUFOLGNBQTBCLE1BQU07QUFBQSxNQUNoQztBQUVBLE1BQU0saUJBQU4sY0FBNkIsWUFBWTtBQUFBLE1BQ3pDO0FBRUEsTUFBTSw0QkFBTixjQUF3QyxZQUFZO0FBQUEsUUFDaEQsWUFBWSxZQUFZO0FBQ3BCLGdCQUFNLDBCQUEwQixhQUFhLEdBQUcsVUFBVSxLQUFLLEVBQUUsRUFBRTtBQUFBLFFBQ3ZFO0FBQUEsTUFDSjtBQUVBLE1BQU0saUJBQU4sY0FBNkIsWUFBWTtBQUFBLE1BQ3pDO0FBRUEsTUFBTSx3QkFBTixjQUFvQyxZQUFZO0FBQUEsUUFDNUMsWUFBWSxVQUFVO0FBQ2xCLGdCQUFNLEdBQUcsUUFBUSw2QkFBNkI7QUFBQSxRQUNsRDtBQUFBLE1BQ0o7QUFxRUEsTUFBTSxpQkFBTixNQUFxQjtBQUFBLFFBQ2pCLE1BQU0sVUFBVSxNQUFNO0FBQ2xCLGVBQUssWUFBWSxNQUFNLE1BQU0sSUFBSTtBQUNqQyxpQkFBTyxLQUFLLFNBQVMsTUFBTSxNQUFNLElBQUk7QUFBQSxRQUN6QztBQUFBLFFBQ0EsWUFBWSxXQUFXLE1BQU07QUFDekIsZUFBSyxtQkFBbUIsU0FBUztBQUFBLFFBQ3JDO0FBQUEsUUFDQSxNQUFNLFNBQVMsV0FBVyxNQUFNO0FBQzVCLGdCQUFNLElBQUksMEJBQTBCLFFBQVE7QUFBQSxRQUNoRDtBQUFBLFFBQ0EsTUFBTSxlQUFlLE1BQU07QUFDdkIsZUFBSyxpQkFBaUIsTUFBTSxNQUFNLElBQUk7QUFDdEMsaUJBQU8sS0FBSyxjQUFjLE1BQU0sTUFBTSxJQUFJO0FBQUEsUUFDOUM7QUFBQSxRQUNBLGlCQUFpQixXQUFXLGFBQWEsY0FBYyxNQUFNO0FBQ3pELGVBQUssbUJBQW1CLFNBQVM7QUFDakMsZUFBSyx1QkFBdUIsU0FBUztBQUNyQyxjQUFJLEVBQUUsYUFBYSxVQUFVLFNBQVM7QUFDbEMsa0JBQU0sSUFBSSxVQUFVLDZDQUE2QztBQUFBLFVBQ3JFO0FBQ0EsY0FBSTtBQUNKLGNBQUksTUFBTSxRQUFRLEtBQUssTUFBTSxHQUFHO0FBQzVCLDRCQUFnQixLQUFLO0FBQUEsVUFDekIsT0FDSztBQUNELDRCQUFnQixLQUFLLE9BQU8sV0FBVyxPQUFPLEtBQUssT0FBTyxTQUFTO0FBQUEsVUFDdkU7QUFDQSxlQUFLLGVBQWUsV0FBVyxhQUFhO0FBQUEsUUFDaEQ7QUFBQSxRQUNBLHVCQUF1QixXQUFXO0FBQUEsUUFDbEM7QUFBQSxRQUNBLE1BQU0sY0FBYyxXQUFXLGFBQWEsY0FBYyxNQUFNO0FBQzVELGdCQUFNLElBQUksMEJBQTBCLGFBQWE7QUFBQSxRQUNyRDtBQUFBLFFBQ0EsTUFBTSxRQUFRLE1BQU07QUFDaEIsZUFBSyxVQUFVLE1BQU0sTUFBTSxJQUFJO0FBQy9CLGlCQUFPLEtBQUssT0FBTyxNQUFNLE1BQU0sSUFBSTtBQUFBLFFBQ3ZDO0FBQUEsUUFDQSxVQUFVLFdBQVcsS0FBSyxTQUFTLE1BQU07QUFDckMsZUFBSyxtQkFBbUIsU0FBUztBQUNqQyxlQUFLLHFCQUFxQixTQUFTO0FBQ25DLGVBQUssZUFBZSxLQUFLLE1BQU07QUFBQSxRQUNuQztBQUFBLFFBQ0EsTUFBTSxPQUFPLFdBQVcsS0FBSyxTQUFTLE1BQU07QUFDeEMsZ0JBQU0sSUFBSSwwQkFBMEIsTUFBTTtBQUFBLFFBQzlDO0FBQUEsUUFDQSxNQUFNLFVBQVUsTUFBTTtBQUNsQixlQUFLLFlBQVksTUFBTSxNQUFNLElBQUk7QUFDakMsaUJBQU8sS0FBSyxTQUFTLE1BQU0sTUFBTSxJQUFJO0FBQUEsUUFDekM7QUFBQSxRQUNBLFlBQVksV0FBVyxLQUFLLFdBQVcsU0FBUyxNQUFNO0FBQ2xELGVBQUssbUJBQW1CLFNBQVM7QUFDakMsZUFBSyxxQkFBcUIsU0FBUztBQUNuQyxlQUFLLGVBQWUsS0FBSyxRQUFRO0FBQUEsUUFDckM7QUFBQSxRQUNBLE1BQU0sU0FBUyxXQUFXLEtBQUssV0FBVyxTQUFTLE1BQU07QUFDckQsZ0JBQU0sSUFBSSwwQkFBMEIsUUFBUTtBQUFBLFFBQ2hEO0FBQUEsUUFDQSxNQUFNLFdBQVcsTUFBTTtBQUNuQixlQUFLLGFBQWEsTUFBTSxNQUFNLElBQUk7QUFDbEMsaUJBQU8sS0FBSyxVQUFVLE1BQU0sTUFBTSxJQUFJO0FBQUEsUUFDMUM7QUFBQSxRQUNBLGFBQWEsV0FBVyxLQUFLLE1BQU1DLFdBQVUsQ0FBQyxNQUFNLE1BQU07QUFDdEQsZUFBSyxtQkFBbUIsU0FBUztBQUNqQyxlQUFLLHFCQUFxQixTQUFTO0FBQ25DLGVBQUssZUFBZSxLQUFLQSxTQUFRLFdBQVcsWUFBWSxNQUFNO0FBQUEsUUFDbEU7QUFBQSxRQUNBLE1BQU0sVUFBVSxXQUFXLEtBQUssU0FBUyxNQUFNO0FBQzNDLGdCQUFNLElBQUksMEJBQTBCLFNBQVM7QUFBQSxRQUNqRDtBQUFBLFFBQ0EsTUFBTSxXQUFXLE1BQU07QUFDbkIsZUFBSyxhQUFhLE1BQU0sTUFBTSxJQUFJO0FBQ2xDLGlCQUFPLEtBQUssVUFBVSxNQUFNLE1BQU0sSUFBSTtBQUFBLFFBQzFDO0FBQUEsUUFDQSxhQUFhLFdBQVcsS0FBSyxNQUFNQSxXQUFVLENBQUMsTUFBTSxNQUFNO0FBQ3RELGVBQUssbUJBQW1CLFNBQVM7QUFDakMsZUFBSyxxQkFBcUIsU0FBUztBQUNuQyxlQUFLLGVBQWUsS0FBS0EsU0FBUSxXQUFXLFlBQVksTUFBTTtBQUFBLFFBQ2xFO0FBQUEsUUFDQSxNQUFNLFVBQVUsV0FBVyxLQUFLLFNBQVMsTUFBTTtBQUMzQyxnQkFBTSxJQUFJLDBCQUEwQixTQUFTO0FBQUEsUUFDakQ7QUFBQSxRQUNBLE1BQU0sY0FBYyxNQUFNO0FBQ3RCLGVBQUssZ0JBQWdCLE1BQU0sTUFBTSxJQUFJO0FBQ3JDLGlCQUFPLEtBQUssYUFBYSxNQUFNLE1BQU0sSUFBSTtBQUFBLFFBQzdDO0FBQUEsUUFDQSxnQkFBZ0IsV0FBVyxTQUFTLFFBQVFBLFdBQVUsQ0FBQyxNQUFNLE1BQU07QUFDL0QsZUFBSyxtQkFBbUIsU0FBUztBQUNqQyxlQUFLLHFCQUFxQixTQUFTO0FBQ25DLGVBQUssZUFBZSxTQUFTQSxTQUFRLFdBQVcsZUFBZSxNQUFNO0FBQ3JFLGNBQUksU0FBUyxNQUFNLEdBQUc7QUFDbEIsa0JBQU0sSUFBSSxlQUFlLDhCQUE4QjtBQUFBLFVBQzNEO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTSxhQUFhLFdBQVcsU0FBUyxXQUFXLE1BQU07QUFDcEQsZ0JBQU0sSUFBSSwwQkFBMEIsWUFBWTtBQUFBLFFBQ3BEO0FBQUEsUUFDQSxNQUFNLGFBQWEsTUFBTTtBQUNyQixlQUFLLGVBQWUsTUFBTSxNQUFNLElBQUk7QUFDcEMsaUJBQU8sS0FBSyxZQUFZLE1BQU0sTUFBTSxJQUFJO0FBQUEsUUFDNUM7QUFBQSxRQUNBLGVBQWVDLFNBQVEsUUFBUSxNQUFNO0FBQ2pDLGVBQUssZUFBZUEsT0FBTTtBQUMxQixlQUFLLGVBQWUsR0FBRztBQUN2QixjQUFJLENBQUMsSUFBSSxhQUFhO0FBQ2xCLGtCQUFNLElBQUksWUFBWSx5QkFBeUI7QUFBQSxVQUNuRDtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU0sWUFBWUEsU0FBUSxRQUFRLE1BQU07QUFDcEMsZ0JBQU0sSUFBSSwwQkFBMEIsV0FBVztBQUFBLFFBQ25EO0FBQUEsUUFDQSxNQUFNLGFBQWEsTUFBTTtBQUNyQixlQUFLLGVBQWUsTUFBTSxNQUFNLElBQUk7QUFDcEMsaUJBQU8sS0FBSyxZQUFZLE1BQU0sTUFBTSxJQUFJO0FBQUEsUUFDNUM7QUFBQSxRQUNBLGVBQWVBLFNBQVEsU0FBUyxXQUFXLGFBQWEsY0FBYyxNQUFNO0FBQ3hFLGVBQUssZUFBZUEsT0FBTTtBQUMxQixlQUFLLGFBQWFBLFNBQVEsT0FBTztBQUNqQyxlQUFLLG1CQUFtQixTQUFTO0FBQ2pDLGVBQUssa0JBQWtCLFNBQVM7QUFDaEMsY0FBSSxNQUFNLFFBQVEsS0FBSyxNQUFNLEdBQUc7QUFDNUIsaUJBQUssZUFBZSxXQUFXLEtBQUssTUFBTTtBQUFBLFVBQzlDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTSxZQUFZQSxTQUFRLFNBQVMsV0FBVyxhQUFhLGNBQWMsTUFBTTtBQUMzRSxnQkFBTSxJQUFJLDBCQUEwQixXQUFXO0FBQUEsUUFDbkQ7QUFBQSxRQUNBLG1CQUFtQixXQUFXO0FBQzFCLGNBQUksVUFBVSxLQUFLLFlBQVksTUFBTSxLQUFLLEtBQUssWUFBWSxHQUFHO0FBQzFELGtCQUFNLElBQUksZUFBZSxtQkFBbUI7QUFBQSxVQUNoRDtBQUFBLFFBQ0o7QUFBQSxRQUNBLHFCQUFxQixXQUFXO0FBQUEsUUFDaEM7QUFBQSxRQUNBLHNCQUFzQixXQUFXO0FBQUEsUUFDakM7QUFBQSxRQUNBLGVBQWUsUUFBUSxTQUFTO0FBQzVCLHFCQUFXLFNBQVMsUUFBUTtBQUN4QixnQkFBSSxRQUFRLFFBQVEsS0FBSyxNQUFNLElBQUk7QUFDL0Isb0JBQU0sSUFBSSxVQUFVLG9EQUFvRDtBQUFBLFlBQzVFO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGVBQWUsS0FBSyxVQUFVO0FBQzFCLGVBQUssbUJBQW1CLElBQUksU0FBUztBQUNyQyxjQUFJLFlBQVksSUFBSSxPQUFPLFFBQVEsUUFBUSxNQUFNLElBQUk7QUFDakQsa0JBQU0sSUFBSSxZQUFZLHNDQUFzQztBQUFBLFVBQ2hFO0FBQUEsUUFDSjtBQUFBLFFBQ0Esc0JBQXNCLE1BQU0sVUFBVTtBQUNsQyxjQUFJLEVBQUUsWUFBWSxPQUFPO0FBQ3JCLGtCQUFNLElBQUksc0JBQXNCLFFBQVE7QUFBQSxVQUM1QztBQUFBLFFBQ0o7QUFBQSxRQUNBLG1CQUFtQixXQUFXLGdCQUFnQjtBQUMxQyxxQkFBVyxRQUFRLGdCQUFnQjtBQUMvQixnQkFBSSxLQUFLLFlBQVksTUFBTSxVQUFVLEtBQUssWUFBWSxHQUFHO0FBQ3JEO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFDQSxnQkFBTSxJQUFJLGVBQWUsd0JBQXdCLGVBQWUsS0FBSyxJQUFJLENBQUMsRUFBRTtBQUFBLFFBQ2hGO0FBQUEsUUFDQSxrQkFBa0IsV0FBVztBQUFBLFFBQzdCO0FBQUEsUUFDQSxlQUFlQSxTQUFRO0FBQ25CLGtCQUFRQSxTQUFRO0FBQUEsWUFDWixLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQ0Q7QUFBQSxZQUNKO0FBQ0ksb0JBQU0sSUFBSSxVQUFVLG9FQUFvRTtBQUFBLFVBQ2hHO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYUEsU0FBUSxTQUFTO0FBQzFCLGNBQUksQ0FBQyxTQUFTO0FBQ1Ysa0JBQU0sSUFBSSxVQUFVLG9EQUFvRDtBQUFBLFVBQzVFO0FBQ0EsY0FBSUEsWUFBVyxPQUFPO0FBQ2xCLGdCQUFJLENBQUMsTUFBTSxPQUFPLEdBQUc7QUFDakIsb0JBQU0sSUFBSSxVQUFVLDhCQUE4QjtBQUFBLFlBQ3REO0FBQUEsVUFDSixXQUNTLENBQUMsd0NBQXNCLGVBQWUsT0FBTyxHQUFHO0FBQ3JELGtCQUFNLElBQUksVUFBVSxnREFBZ0Q7QUFBQSxVQUN4RTtBQUFBLFFBQ0o7QUFBQSxRQUNBLFlBQVksTUFBTTtBQUNkLGlCQUFPLHdDQUFzQixjQUFjLElBQUk7QUFBQSxRQUNuRDtBQUFBLE1BQ0o7QUFFQSxNQUFNLGNBQU4sY0FBMEIsZUFBZTtBQUFBLFFBQ3JDLHVCQUF1QixXQUFXO0FBQzlCLGVBQUssc0JBQXNCLFdBQVcsUUFBUTtBQUM5QyxjQUFJLE9BQU8sVUFBVSxXQUFXLFVBQVU7QUFDdEMsa0JBQU0sSUFBSSxVQUFVLCtCQUErQjtBQUFBLFVBQ3ZEO0FBQ0Esa0JBQVEsVUFBVSxRQUFRO0FBQUEsWUFDdEIsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUNEO0FBQUEsWUFDSjtBQUNJLG9CQUFNLElBQUksVUFBVSxrQ0FBa0M7QUFBQSxVQUM5RDtBQUFBLFFBQ0o7QUFBQSxRQUNBLHNCQUFzQixXQUFXO0FBQzdCLGVBQUssdUJBQXVCLFNBQVM7QUFBQSxRQUN6QztBQUFBLE1BQ0o7QUFFQSxNQUFNLGlCQUFOLGNBQTZCLFlBQVk7QUFBQSxRQUNyQyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTztBQUNaLGVBQUssU0FBUyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVc7QUFBQSxRQUMvRDtBQUFBLFFBQ0EscUJBQXFCLFdBQVc7QUFDNUIsZUFBSyxzQkFBc0IsV0FBVyxJQUFJO0FBQzFDLGNBQUksRUFBRSxVQUFVLGNBQWMsZUFBZSxZQUFZLE9BQU8sVUFBVSxFQUFFLElBQUk7QUFDNUUsa0JBQU0sSUFBSSxVQUFVLHVEQUF1RDtBQUFBLFVBQy9FO0FBQ0EsY0FBSSxVQUFVLEdBQUcsZUFBZSxJQUFJO0FBQ2hDLGtCQUFNLElBQUksVUFBVSwrQkFBK0I7QUFBQSxVQUN2RDtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsTUFBTSxrQkFBTixjQUE4QixZQUFZO0FBQUEsUUFDdEMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLE9BQU87QUFDWixlQUFLLFNBQVMsQ0FBQyxRQUFRLFFBQVE7QUFBQSxRQUNuQztBQUFBLFFBQ0EscUJBQXFCLFdBQVc7QUFDNUIsZUFBSyxzQkFBc0IsV0FBVyxRQUFRO0FBQzlDLGNBQUksT0FBTyxVQUFVLFdBQVcsVUFBVTtBQUN0QyxrQkFBTSxJQUFJLFVBQVUseUJBQXlCO0FBQUEsVUFDakQ7QUFDQSxjQUFJLFVBQVUsU0FBUyxHQUFHO0FBQ3RCLGtCQUFNLElBQUksZUFBZSw2QkFBNkI7QUFBQSxVQUMxRDtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsTUFBTSxpQkFBTixjQUE2QixZQUFZO0FBQUEsUUFDckMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLE9BQU87QUFDWixlQUFLLFNBQVMsQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXO0FBQUEsUUFDL0Q7QUFBQSxRQUNBLHFCQUFxQixXQUFXO0FBQzVCLGVBQUssc0JBQXNCLFdBQVcsU0FBUztBQUMvQyxjQUFJLEVBQUUsVUFBVSxtQkFBbUIsZUFBZSxZQUFZLE9BQU8sVUFBVSxPQUFPLElBQUk7QUFDdEYsa0JBQU0sSUFBSSxVQUFVLDREQUE0RDtBQUFBLFVBQ3BGO0FBQ0EsY0FBSSxVQUFVLFFBQVEsZUFBZSxJQUFJO0FBQ3JDLGtCQUFNLElBQUksVUFBVSwrQkFBK0I7QUFBQSxVQUN2RDtBQUNBLGVBQUssc0JBQXNCLFdBQVcsUUFBUTtBQUM5QyxjQUFJLE9BQU8sVUFBVSxXQUFXLFVBQVU7QUFDdEMsa0JBQU0sSUFBSSxVQUFVLHlCQUF5QjtBQUFBLFVBQ2pEO0FBQ0EsY0FBSSxVQUFVLFNBQVMsR0FBRztBQUN0QixrQkFBTSxJQUFJLGVBQWUsNkJBQTZCO0FBQUEsVUFDMUQ7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUVBLE1BQU0saUJBQU4sY0FBNkIsWUFBWTtBQUFBLFFBQ3JDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxPQUFPO0FBQ1osZUFBSyxTQUFTLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVztBQUFBLFFBQy9EO0FBQUEsTUFDSjtBQUVBLE1BQU0saUJBQU4sY0FBNkIsWUFBWTtBQUFBLFFBQ3JDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxPQUFPO0FBQ1osZUFBSyxTQUFTLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVztBQUFBLFFBQy9EO0FBQUEsUUFDQSxxQkFBcUIsV0FBVztBQUM1QixlQUFLLHNCQUFzQixXQUFXLElBQUk7QUFDMUMsY0FBSSxFQUFFLFVBQVUsY0FBYyxlQUFlLFlBQVksT0FBTyxVQUFVLEVBQUUsSUFBSTtBQUM1RSxrQkFBTSxJQUFJLFVBQVUsdURBQXVEO0FBQUEsVUFDL0U7QUFDQSxjQUFJLFVBQVUsR0FBRyxhQUFhLEdBQUc7QUFDN0Isa0JBQU0sSUFBSSxlQUFlLHlEQUF5RDtBQUFBLFVBQ3RGO0FBQ0EsY0FBSSxFQUFFLGVBQWUsWUFBWTtBQUM3QixzQkFBVSxZQUFZO0FBQUEsVUFDMUI7QUFDQSxrQkFBUSxVQUFVLFdBQVc7QUFBQSxZQUN6QixLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQ0Q7QUFBQSxZQUNKO0FBQ0ksb0JBQU0sSUFBSSxlQUFlLDREQUE0RDtBQUFBLFVBQzdGO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNLGdCQUFOLGNBQTRCLFlBQVk7QUFBQSxRQUNwQyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTztBQUNaLGVBQUssU0FBUyxDQUFDLFdBQVcsV0FBVztBQUFBLFFBQ3pDO0FBQUEsTUFDSjtBQUVBLE1BQU0sY0FBTixjQUEwQixlQUFlO0FBQUEsUUFDckMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLFNBQVMsQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXO0FBQUEsUUFDL0Q7QUFBQSxRQUNBLHFCQUFxQixXQUFXO0FBQzVCLGNBQUksS0FBSyxRQUFRO0FBQ2IsaUJBQUssc0JBQXNCLFdBQVcsSUFBSTtBQUMxQyxnQkFBSSxFQUFFLFVBQVUsY0FBYyxlQUFlLFlBQVksT0FBTyxVQUFVLEVBQUUsSUFBSTtBQUM1RSxvQkFBTSxJQUFJLFVBQVUsdURBQXVEO0FBQUEsWUFDL0U7QUFDQSxnQkFBSSxVQUFVLEdBQUcsZUFBZSxLQUFLLFFBQVE7QUFDekMsb0JBQU0sSUFBSSxVQUFVLHdCQUF3QixLQUFLLE1BQU0sUUFBUTtBQUFBLFlBQ25FO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHVCQUF1QixXQUFXO0FBQzlCLGVBQUssc0JBQXNCLFdBQVcsUUFBUTtBQUM5QyxjQUFJLE9BQU8sVUFBVSxXQUFXLFVBQVU7QUFDdEMsa0JBQU0sSUFBSSxVQUFVLCtCQUErQjtBQUFBLFVBQ3ZEO0FBQ0EsY0FBSSxVQUFVLFdBQVcsS0FBSyxhQUFhO0FBQ3ZDLGtCQUFNLElBQUksZUFBZSw2QkFBNkIsS0FBSyxXQUFXLEVBQUU7QUFBQSxVQUM1RTtBQUFBLFFBQ0o7QUFBQSxRQUNBLHNCQUFzQixXQUFXO0FBQzdCLGVBQUssdUJBQXVCLFNBQVM7QUFBQSxRQUN6QztBQUFBLE1BQ0o7QUFFQSxNQUFNLGNBQU4sY0FBMEIsZUFBZTtBQUFBLFFBQ3JDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxpQkFBaUIsQ0FBQyxTQUFTLFdBQVcsV0FBVyxTQUFTO0FBQUEsUUFDbkU7QUFBQSxRQUNBLHVCQUF1QixXQUFXO0FBQzlCLGVBQUssc0JBQXNCLFdBQVcsTUFBTTtBQUM1QyxlQUFLLG1CQUFtQixVQUFVLE1BQU0sS0FBSyxjQUFjO0FBQzNELGVBQUssc0JBQXNCLFdBQVcsZ0JBQWdCO0FBQ3RELGNBQUksRUFBRSxVQUFVLGtCQUFrQixVQUFVLDBCQUEwQixhQUFhO0FBQy9FLGtCQUFNLElBQUksVUFBVSw2Q0FBNkM7QUFBQSxVQUNyRTtBQUNBLGdCQUFNLGlCQUFpQiwwQkFBUSxTQUFTLFVBQVUsY0FBYztBQUNoRSxjQUFJLEVBQUUsbUJBQW1CLFVBQVUsbUJBQW1CLFNBQVM7QUFDM0Qsa0JBQU0sSUFBSSxVQUFVLHdDQUF3QztBQUFBLFVBQ2hFO0FBQ0EsZUFBSyxzQkFBc0IsV0FBVyxlQUFlO0FBQ3JELGNBQUksVUFBVSxnQkFBZ0IsS0FDdkIsVUFBVSxnQkFBZ0IsT0FDMUIsVUFBVSxnQkFBZ0IsT0FBTztBQUNwQyxrQkFBTSxJQUFJLFVBQVUseUVBQXlFO0FBQUEsVUFDakc7QUFBQSxRQUNKO0FBQUEsUUFDQSxrQkFBa0IsV0FBVztBQUN6QixlQUFLLHNCQUFzQixXQUFXLE1BQU07QUFDNUMsZUFBSyxtQkFBbUIsVUFBVSxNQUFNLEtBQUssY0FBYztBQUFBLFFBQy9EO0FBQUEsTUFDSjtBQUVBLE1BQU0saUJBQU4sY0FBNkIsWUFBWTtBQUFBLFFBQ3JDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxPQUFPO0FBQ1osZUFBSyxTQUFTO0FBQUEsWUFDVixZQUFZLENBQUMsTUFBTTtBQUFBLFlBQ25CLFdBQVcsQ0FBQyxRQUFRO0FBQUEsVUFDeEI7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUVBLE1BQU0saUJBQU4sY0FBNkIsWUFBWTtBQUFBLFFBQ3JDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxPQUFPO0FBQ1osZUFBSyxTQUFTO0FBQUEsWUFDVixZQUFZLENBQUMsTUFBTTtBQUFBLFlBQ25CLFdBQVcsQ0FBQyxRQUFRO0FBQUEsVUFDeEI7QUFBQSxRQUNKO0FBQUEsUUFDQSxxQkFBcUIsV0FBVztBQUM1QixlQUFLLHNCQUFzQixXQUFXLFlBQVk7QUFDbEQsY0FBSSxPQUFPLFVBQVUsZUFBZSxVQUFVO0FBQzFDLGtCQUFNLElBQUksVUFBVSw2QkFBNkI7QUFBQSxVQUNyRDtBQUNBLGNBQUksVUFBVSxhQUFhLEdBQUc7QUFDMUIsa0JBQU0sSUFBSSxXQUFXLHFDQUFxQztBQUFBLFVBQzlEO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNLGtCQUFOLGNBQThCLFlBQVk7QUFBQSxRQUN0QyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTztBQUNaLGVBQUssU0FBUztBQUFBLFlBQ1YsWUFBWSxDQUFDLFdBQVcsV0FBVztBQUFBLFlBQ25DLFdBQVcsQ0FBQyxXQUFXLFNBQVM7QUFBQSxVQUNwQztBQUFBLFFBQ0o7QUFBQSxRQUNBLHFCQUFxQixXQUFXO0FBQzVCLGNBQUksVUFBVSxTQUNQLEVBQUUsVUFBVSxpQkFBaUIsZUFBZSxZQUFZLE9BQU8sVUFBVSxLQUFLLElBQUk7QUFDckYsa0JBQU0sSUFBSSxVQUFVLDBEQUEwRDtBQUFBLFVBQ2xGO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNLG1CQUFOLGNBQStCLGVBQWU7QUFBQSxRQUMxQyx1QkFBdUIsV0FBVztBQUM5QixlQUFLLHNCQUFzQixXQUFXLFlBQVk7QUFDbEQsZUFBSyxnQkFBZ0IsVUFBVSxVQUFVO0FBQUEsUUFDN0M7QUFBQSxRQUNBLGdCQUFnQixZQUFZO0FBQ3hCLHFCQUFXLFFBQVEsS0FBSyxhQUFhO0FBQ2pDLGdCQUFJLEtBQUssWUFBWSxNQUFNLFdBQVcsWUFBWSxHQUFHO0FBQ2pEO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFDQSxnQkFBTSxJQUFJLGVBQWUsOEJBQThCLEtBQUssWUFBWSxLQUFLLElBQUksQ0FBQyxFQUFFO0FBQUEsUUFDeEY7QUFBQSxNQUNKO0FBRUEsTUFBTSxnQkFBTixjQUE0QixpQkFBaUI7QUFBQSxRQUN6QyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTztBQUNaLGVBQUssaUJBQWlCLENBQUMsU0FBUyxXQUFXLFdBQVcsU0FBUztBQUMvRCxlQUFLLFNBQVM7QUFBQSxZQUNWLFlBQVksQ0FBQyxNQUFNO0FBQUEsWUFDbkIsV0FBVyxDQUFDLFFBQVE7QUFBQSxVQUN4QjtBQUNBLGVBQUssY0FBYyxDQUFDLFNBQVMsU0FBUyxTQUFTLE9BQU87QUFBQSxRQUMxRDtBQUFBLFFBQ0EscUJBQXFCLFdBQVc7QUFDNUIsZUFBSyxzQkFBc0IsV0FBVyxNQUFNO0FBQzVDLGVBQUssbUJBQW1CLFVBQVUsTUFBTSxLQUFLLGNBQWM7QUFBQSxRQUMvRDtBQUFBLE1BQ0o7QUFFQSxNQUFNLFlBQVksQ0FBQyxVQUFVLFdBQVcsUUFBUTtBQUNoRCxNQUFNLFlBQU4sTUFBZ0I7QUFBQSxRQUNaLE9BQU8sT0FBTyxXQUFXLE1BQU0sYUFBYSxRQUFRO0FBQ2hELGdCQUFNLE1BQU0sSUFBSSxLQUFLO0FBQ3JCLGNBQUksWUFBWTtBQUNoQixjQUFJLE9BQU87QUFDWCxjQUFJLGNBQWM7QUFDbEIsY0FBSSxTQUFTO0FBQ2IsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxPQUFPLFVBQVUsTUFBTTtBQUNuQixpQkFBTyxVQUFVLFFBQVEsSUFBSSxNQUFNO0FBQUEsUUFDdkM7QUFBQSxRQUNBLEtBQUssT0FBTyxXQUFXLElBQUk7QUFDdkIsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUVBLE1BQU0sZUFBTixjQUEyQixpQkFBaUI7QUFBQSxRQUN4QyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTztBQUNaLGVBQUssU0FBUztBQUFBLFlBQ1YsWUFBWSxDQUFDLGNBQWMsV0FBVztBQUFBLFlBQ3RDLFdBQVcsQ0FBQztBQUFBLFVBQ2hCO0FBQ0EsZUFBSyxjQUFjLENBQUMsU0FBUyxTQUFTLFNBQVMsT0FBTztBQUFBLFFBQzFEO0FBQUEsUUFDQSxxQkFBcUIsV0FBVztBQUM1QixlQUFLLHNCQUFzQixXQUFXLFFBQVE7QUFDOUMsY0FBSSxFQUFFLFVBQVUsa0JBQWtCLFlBQVk7QUFDMUMsa0JBQU0sSUFBSSxVQUFVLDRCQUE0QjtBQUFBLFVBQ3BEO0FBQ0EsY0FBSSxVQUFVLE9BQU8sU0FBUyxVQUFVO0FBQ3BDLGtCQUFNLElBQUksZUFBZSw2QkFBNkI7QUFBQSxVQUMxRDtBQUNBLGNBQUksVUFBVSxPQUFPLFVBQVUsU0FBUyxLQUFLLE1BQU07QUFDL0Msa0JBQU0sSUFBSSxlQUFlLGtCQUFrQixLQUFLLElBQUksTUFBTTtBQUFBLFVBQzlEO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNLGlCQUFOLGNBQTZCLGFBQWE7QUFBQSxRQUN0QyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTztBQUNaLGVBQUssY0FBYyxDQUFDLFVBQVUsTUFBTTtBQUFBLFFBQ3hDO0FBQUEsTUFDSjtBQUVBLE1BQU0sZ0JBQU4sY0FBNEIsaUJBQWlCO0FBQUEsUUFDekMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLE9BQU87QUFDWixlQUFLLFNBQVM7QUFBQSxZQUNWLFlBQVksQ0FBQyxNQUFNO0FBQUEsWUFDbkIsV0FBVyxDQUFDLFFBQVE7QUFBQSxVQUN4QjtBQUNBLGVBQUssY0FBYyxDQUFDLFdBQVcsT0FBTztBQUFBLFFBQzFDO0FBQUEsTUFDSjtBQUVBLE1BQUlILG9CQUFtQixNQUFNQSxrQkFBaUI7QUFBQSxRQUMxQyxZQUFZLE9BQU87QUFDZixjQUFJLE9BQU87QUFDUCxpQkFBSyxRQUFRO0FBQUEsVUFDakI7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUNBLGlCQUFXO0FBQUEsUUFDUCxRQUFRLEVBQUUsTUFBTSxhQUFhLGlCQUFpQixDQUFDO0FBQUEsTUFDbkQsR0FBR0Esa0JBQWlCLFdBQVcsU0FBUyxNQUFNO0FBQzlDLE1BQUFBLG9CQUFtQixXQUFXO0FBQUEsUUFDMUIsUUFBUSxFQUFFLE1BQU0sYUFBYSxPQUFPLENBQUM7QUFBQSxNQUN6QyxHQUFHQSxpQkFBZ0I7QUFFbkIsTUFBTSxzQkFBTixNQUEwQjtBQUFBLFFBQ3RCLFlBQVksUUFBUTtBQUNoQixpQkFBTyxPQUFPLE1BQU0sTUFBTTtBQUFBLFFBQzlCO0FBQUEsTUFDSjtBQUNBLGlCQUFXO0FBQUEsUUFDUCxRQUFRO0FBQUEsVUFDSixNQUFNLGFBQWE7QUFBQSxRQUN2QixDQUFDO0FBQUEsTUFDTCxHQUFHLG9CQUFvQixXQUFXLGFBQWEsTUFBTTtBQUNyRCxpQkFBVztBQUFBLFFBQ1AsUUFBUTtBQUFBLFVBQ0osTUFBTSxhQUFhO0FBQUEsVUFDbkIsVUFBVTtBQUFBLFFBQ2QsQ0FBQztBQUFBLE1BQ0wsR0FBRyxvQkFBb0IsV0FBVyxjQUFjLE1BQU07QUFFdEQsTUFBTSxpQkFBTixNQUFxQjtBQUFBLFFBQ2pCLGNBQWM7QUFDVixlQUFLLFVBQVU7QUFDZixlQUFLLHNCQUFzQixJQUFJLG9CQUFvQjtBQUNuRCxlQUFLLGFBQWEsSUFBSSxZQUFZLENBQUM7QUFBQSxRQUN2QztBQUFBLE1BQ0o7QUFDQSxpQkFBVztBQUFBLFFBQ1AsUUFBUSxFQUFFLE1BQU0sYUFBYSxRQUFRLENBQUM7QUFBQSxNQUMxQyxHQUFHLGVBQWUsV0FBVyxXQUFXLE1BQU07QUFDOUMsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQUEsTUFDekMsR0FBRyxlQUFlLFdBQVcsdUJBQXVCLE1BQU07QUFDMUQsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxNQUFNLGFBQWEsWUFBWSxDQUFDO0FBQUEsTUFDOUMsR0FBRyxlQUFlLFdBQVcsY0FBYyxNQUFNO0FBQ2pELGlCQUFXO0FBQUEsUUFDUCxRQUFRLEVBQUUsTUFBTSxhQUFhLEtBQUssVUFBVSxLQUFLLENBQUM7QUFBQSxNQUN0RCxHQUFHLGVBQWUsV0FBVyxjQUFjLE1BQU07QUFFakQsTUFBTSxnQkFBTixNQUFvQjtBQUFBLFFBQ2hCLGNBQWM7QUFDVixlQUFLLHFCQUFxQixJQUFJLG9CQUFvQjtBQUNsRCxlQUFLLFlBQVksSUFBSSxZQUFZLENBQUM7QUFBQSxRQUN0QztBQUFBLE1BQ0o7QUFDQSxpQkFBVztBQUFBLFFBQ1AsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFBQSxNQUN6QyxHQUFHLGNBQWMsV0FBVyxzQkFBc0IsTUFBTTtBQUN4RCxpQkFBVztBQUFBLFFBQ1AsUUFBUSxFQUFFLE1BQU0sYUFBYSxVQUFVLENBQUM7QUFBQSxNQUM1QyxHQUFHLGNBQWMsV0FBVyxhQUFhLE1BQU07QUFFL0MsTUFBTSxvQ0FBb0M7QUFBQSxRQUN0QyxVQUFVLENBQUMsVUFBVSwwQkFBUSxjQUFjLEtBQUs7QUFBQSxRQUNoRCxRQUFRLENBQUMsVUFBVSwwQkFBUSxZQUFZLElBQUksV0FBVyxLQUFLLENBQUM7QUFBQSxNQUNoRTtBQUVBLE1BQU0saUNBQWlDO0FBQUEsUUFDbkMsU0FBUyxDQUFDLFVBQVU7QUFDaEIsZ0JBQU0sV0FBVyxNQUFNLFdBQVc7QUFDbEMsaUJBQU8sQ0FBRSxJQUFJLFdBQVcsUUFBUSxFQUFFLENBQUMsSUFDN0IsTUFBTSxXQUFXLFNBQVMsTUFBTSxDQUFDLElBQ2pDLE1BQU0sV0FBVztBQUFBLFFBQzNCO0FBQUEsUUFDQSxPQUFPLENBQUMsVUFBVTtBQUNkLGdCQUFNLFdBQVcsSUFBSSxXQUFXLEtBQUssRUFBRSxDQUFDLElBQUksVUFDdEMsMkJBQVEsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxLQUFLLElBQ3pDO0FBQ04saUJBQU8sSUFBUyxRQUFRLEVBQUUsU0FBUyxDQUFDO0FBQUEsUUFDeEM7QUFBQSxNQUNKO0FBUUEsTUFBTSxnQkFBTixNQUFvQjtBQUFBLFFBQ2hCLGNBQWM7QUFDVixlQUFLLFVBQVU7QUFDZixlQUFLLFVBQVUsSUFBSSxZQUFZLENBQUM7QUFDaEMsZUFBSyxpQkFBaUIsSUFBSSxZQUFZLENBQUM7QUFDdkMsZUFBSyxrQkFBa0IsSUFBSSxZQUFZLENBQUM7QUFDeEMsZUFBSyxTQUFTLElBQUksWUFBWSxDQUFDO0FBQy9CLGVBQUssU0FBUyxJQUFJLFlBQVksQ0FBQztBQUMvQixlQUFLLFlBQVksSUFBSSxZQUFZLENBQUM7QUFDbEMsZUFBSyxZQUFZLElBQUksWUFBWSxDQUFDO0FBQ2xDLGVBQUssY0FBYyxJQUFJLFlBQVksQ0FBQztBQUFBLFFBQ3hDO0FBQUEsTUFDSjtBQUNBLGlCQUFXO0FBQUEsUUFDUCxRQUFRLEVBQUUsTUFBTSxhQUFhLFNBQVMsV0FBVyxvQkFBb0IsQ0FBQztBQUFBLE1BQzFFLEdBQUcsY0FBYyxXQUFXLFdBQVcsTUFBTTtBQUM3QyxpQkFBVztBQUFBLFFBQ1AsUUFBUSxFQUFFLE1BQU0sYUFBYSxTQUFTLFdBQVcsK0JBQStCLENBQUM7QUFBQSxRQUNqRixTQUFTLEVBQUUsTUFBTSxLQUFLLFdBQVcsa0NBQWtDLENBQUM7QUFBQSxNQUN4RSxHQUFHLGNBQWMsV0FBVyxXQUFXLE1BQU07QUFDN0MsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxNQUFNLGFBQWEsU0FBUyxXQUFXLCtCQUErQixDQUFDO0FBQUEsUUFDakYsU0FBUyxFQUFFLE1BQU0sS0FBSyxXQUFXLGtDQUFrQyxDQUFDO0FBQUEsTUFDeEUsR0FBRyxjQUFjLFdBQVcsa0JBQWtCLE1BQU07QUFDcEQsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxNQUFNLGFBQWEsU0FBUyxXQUFXLCtCQUErQixDQUFDO0FBQUEsUUFDakYsU0FBUyxFQUFFLE1BQU0sS0FBSyxXQUFXLGtDQUFrQyxDQUFDO0FBQUEsTUFDeEUsR0FBRyxjQUFjLFdBQVcsbUJBQW1CLE1BQU07QUFDckQsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxNQUFNLGFBQWEsU0FBUyxXQUFXLCtCQUErQixDQUFDO0FBQUEsUUFDakYsU0FBUyxFQUFFLE1BQU0sS0FBSyxXQUFXLGtDQUFrQyxDQUFDO0FBQUEsTUFDeEUsR0FBRyxjQUFjLFdBQVcsVUFBVSxNQUFNO0FBQzVDLGlCQUFXO0FBQUEsUUFDUCxRQUFRLEVBQUUsTUFBTSxhQUFhLFNBQVMsV0FBVywrQkFBK0IsQ0FBQztBQUFBLFFBQ2pGLFNBQVMsRUFBRSxNQUFNLEtBQUssV0FBVyxrQ0FBa0MsQ0FBQztBQUFBLE1BQ3hFLEdBQUcsY0FBYyxXQUFXLFVBQVUsTUFBTTtBQUM1QyxpQkFBVztBQUFBLFFBQ1AsUUFBUSxFQUFFLE1BQU0sYUFBYSxTQUFTLFdBQVcsK0JBQStCLENBQUM7QUFBQSxRQUNqRixTQUFTLEVBQUUsTUFBTSxNQUFNLFdBQVcsa0NBQWtDLENBQUM7QUFBQSxNQUN6RSxHQUFHLGNBQWMsV0FBVyxhQUFhLE1BQU07QUFDL0MsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxNQUFNLGFBQWEsU0FBUyxXQUFXLCtCQUErQixDQUFDO0FBQUEsUUFDakYsU0FBUyxFQUFFLE1BQU0sTUFBTSxXQUFXLGtDQUFrQyxDQUFDO0FBQUEsTUFDekUsR0FBRyxjQUFjLFdBQVcsYUFBYSxNQUFNO0FBQy9DLGlCQUFXO0FBQUEsUUFDUCxRQUFRLEVBQUUsTUFBTSxhQUFhLFNBQVMsV0FBVywrQkFBK0IsQ0FBQztBQUFBLFFBQ2pGLFNBQVMsRUFBRSxNQUFNLE1BQU0sV0FBVyxrQ0FBa0MsQ0FBQztBQUFBLE1BQ3pFLEdBQUcsY0FBYyxXQUFXLGVBQWUsTUFBTTtBQUNqRCxpQkFBVztBQUFBLFFBQ1AsUUFBUSxFQUFFLE1BQU0sYUFBYSxLQUFLLFVBQVUsS0FBSyxDQUFDO0FBQUEsTUFDdEQsR0FBRyxjQUFjLFdBQVcsbUJBQW1CLE1BQU07QUFFckQsTUFBTSxlQUFOLE1BQW1CO0FBQUEsUUFDZixjQUFjO0FBQ1YsZUFBSyxVQUFVLElBQUksWUFBWSxDQUFDO0FBQ2hDLGVBQUssaUJBQWlCLElBQUksWUFBWSxDQUFDO0FBQUEsUUFDM0M7QUFBQSxNQUNKO0FBQ0EsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxNQUFNLGFBQWEsU0FBUyxXQUFXLCtCQUErQixDQUFDO0FBQUEsUUFDakYsU0FBUyxFQUFFLE1BQU0sS0FBSyxXQUFXLGtDQUFrQyxDQUFDO0FBQUEsTUFDeEUsR0FBRyxhQUFhLFdBQVcsV0FBVyxNQUFNO0FBQzVDLGlCQUFXO0FBQUEsUUFDUCxRQUFRLEVBQUUsTUFBTSxhQUFhLFNBQVMsV0FBVywrQkFBK0IsQ0FBQztBQUFBLFFBQ2pGLFNBQVMsRUFBRSxNQUFNLEtBQUssV0FBVyxrQ0FBa0MsQ0FBQztBQUFBLE1BQ3hFLEdBQUcsYUFBYSxXQUFXLGtCQUFrQixNQUFNO0FBRW5ELE1BQUksY0FBYyxNQUFNSSxhQUFZO0FBQUEsUUFDaEMsWUFBWSxPQUFPO0FBQ2YsZUFBSyxRQUFRLElBQUksWUFBWSxDQUFDO0FBQzlCLGNBQUksT0FBTztBQUNQLGlCQUFLLFFBQVE7QUFBQSxVQUNqQjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFDTCxjQUFJLFFBQVEsSUFBSSxXQUFXLEtBQUssS0FBSztBQUNyQyxjQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQU07QUFDbkIsa0JBQU0sSUFBSSxZQUFZLHdFQUF3RTtBQUFBLFVBQ2xHO0FBQ0Esa0JBQVEsSUFBSSxXQUFXLEtBQUssTUFBTSxNQUFNLENBQUMsQ0FBQztBQUMxQyxnQkFBTUMsUUFBTyxNQUFNLFNBQVM7QUFDNUIsZ0JBQU1DLFVBQVM7QUFDZixnQkFBTSxPQUFPO0FBQUEsWUFDVCxHQUFHLDBCQUFRLFlBQVksTUFBTSxPQUFPLE1BQU1BLFNBQVFBLFVBQVNELEtBQUksQ0FBQztBQUFBLFlBQ2hFLEdBQUcsMEJBQVEsWUFBWSxNQUFNLE9BQU8sTUFBTUMsVUFBU0QsT0FBTUMsVUFBU0QsUUFBT0EsS0FBSSxDQUFDO0FBQUEsVUFDbEY7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLFNBQVMsTUFBTTtBQUNYLGNBQUksRUFBRSxPQUFPLE9BQU87QUFDaEIsa0JBQU0sSUFBSSxNQUFNLDhCQUE4QjtBQUFBLFVBQ2xEO0FBQ0EsY0FBSSxFQUFFLE9BQU8sT0FBTztBQUNoQixrQkFBTSxJQUFJLE1BQU0sOEJBQThCO0FBQUEsVUFDbEQ7QUFDQSxnQkFBTSxJQUFJLDBCQUFRLGNBQWMsS0FBSyxDQUFDO0FBQ3RDLGdCQUFNLElBQUksMEJBQVEsY0FBYyxLQUFLLENBQUM7QUFDdEMsZ0JBQU0sWUFBUSwyQkFBUSxJQUFJLFdBQVcsQ0FBQyxDQUFJLENBQUMsRUFBRSxRQUFRLEdBQUcsQ0FBQztBQUN6RCxlQUFLLFFBQVEsSUFBSSxXQUFXLEtBQUssRUFBRTtBQUNuQyxpQkFBTztBQUFBLFFBQ1g7QUFBQSxNQUNKO0FBQ0EsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxNQUFNLGFBQWEsWUFBWSxDQUFDO0FBQUEsTUFDOUMsR0FBRyxZQUFZLFdBQVcsU0FBUyxNQUFNO0FBQ3pDLG9CQUFjLFdBQVc7QUFBQSxRQUNyQixRQUFRLEVBQUUsTUFBTSxhQUFhLE9BQU8sQ0FBQztBQUFBLE1BQ3pDLEdBQUcsV0FBVztBQUVkLE1BQU0sZUFBTixNQUFtQjtBQUFBLFFBQ2YsY0FBYztBQUNWLGVBQUssVUFBVTtBQUNmLGVBQUssYUFBYSxJQUFJLFlBQVksQ0FBQztBQUFBLFFBQ3ZDO0FBQUEsUUFDQSxTQUFTLE1BQU07QUFDWCxjQUFJLEVBQUUsT0FBTyxPQUFPO0FBQ2hCLGtCQUFNLElBQUksTUFBTSw4QkFBOEI7QUFBQSxVQUNsRDtBQUNBLGVBQUssYUFBYSwwQkFBUSxjQUFjLEtBQUssQ0FBQztBQUM5QyxjQUFJLE9BQU8sTUFBTTtBQUNiLGtCQUFNLFlBQVksSUFBSSxZQUFZO0FBQ2xDLHNCQUFVLFNBQVMsSUFBSTtBQUN2QixrQkFBTSxNQUFNLGNBQWMsTUFBTSxTQUFTO0FBQ3pDLGdCQUFJLGNBQWMsSUFBSSxZQUFZO0FBQzlCLG1CQUFLLFlBQVksSUFBSSxXQUFXO0FBQUEsWUFDcEM7QUFBQSxVQUNKO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxTQUFTO0FBQ0wsZ0JBQU0sTUFBTSxDQUFDO0FBQ2IsY0FBSSxJQUFJLDBCQUFRLFlBQVksS0FBSyxVQUFVO0FBQzNDLGNBQUksS0FBSyxXQUFXO0FBQ2hCLG1CQUFPLE9BQU8sS0FBSyxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUUsT0FBTyxDQUFDO0FBQUEsVUFDL0Q7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxNQUNKO0FBQ0EsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxNQUFNLGFBQWEsU0FBUyxXQUFXLG9CQUFvQixDQUFDO0FBQUEsTUFDMUUsR0FBRyxhQUFhLFdBQVcsV0FBVyxNQUFNO0FBQzVDLGlCQUFXO0FBQUEsUUFDUCxRQUFRLEVBQUUsTUFBTSxhQUFhLFlBQVksQ0FBQztBQUFBLE1BQzlDLEdBQUcsYUFBYSxXQUFXLGNBQWMsTUFBTTtBQUMvQyxpQkFBVztBQUFBLFFBQ1AsUUFBUSxFQUFFLFNBQVMsR0FBRyxNQUFNLGFBQWEsS0FBSyxVQUFVLEtBQUssQ0FBQztBQUFBLE1BQ2xFLEdBQUcsYUFBYSxXQUFXLGNBQWMsTUFBTTtBQUMvQyxpQkFBVztBQUFBLFFBQ1AsUUFBUSxFQUFFLFNBQVMsR0FBRyxNQUFNLGFBQWEsV0FBVyxVQUFVLEtBQUssQ0FBQztBQUFBLE1BQ3hFLEdBQUcsYUFBYSxXQUFXLGFBQWEsTUFBTTtBQUU5QyxNQUFNLG9DQUFvQztBQUFBLFFBQ3RDLFNBQVMsQ0FBQyxVQUFVO0FBQ2hCLGdCQUFNLFFBQVEsSUFBSSxXQUFXLE1BQU0sV0FBVyxRQUFRO0FBQ3RELGlCQUFRLE1BQU0sQ0FBQyxNQUFNLElBQ2YsTUFBTSxPQUFPLE1BQU0sQ0FBQyxJQUNwQixNQUFNO0FBQUEsUUFDaEI7QUFBQSxRQUNBLE9BQU8sQ0FBQyxVQUFVO0FBQ2QsZ0JBQU0sUUFBUSxJQUFJLFdBQVcsS0FBSztBQUNsQyxjQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUs7QUFDaEIsa0JBQU0sV0FBVyxJQUFJLFdBQVcsTUFBTSxTQUFTLENBQUM7QUFDaEQscUJBQVMsSUFBSSxPQUFPLENBQUM7QUFDckIsbUJBQU8sSUFBUyxRQUFRLEVBQUUsVUFBVSxTQUFTLE9BQU8sQ0FBQztBQUFBLFVBQ3pEO0FBQ0EsaUJBQU8sSUFBUyxRQUFRLEVBQUUsVUFBVSxNQUFNLENBQUM7QUFBQSxRQUMvQztBQUFBLE1BQ0o7QUFFQSxNQUFJLFVBQXVCLHVCQUFPLE9BQU87QUFBQSxRQUN2QyxXQUFXO0FBQUEsUUFDWDtBQUFBLE1BQ0YsQ0FBQztBQUVELE1BQU0sVUFBTixNQUFjO0FBQUEsUUFDVixPQUFPLFlBQVksTUFBTSxXQUFXO0FBQ2hDLGdCQUFNLE9BQU8sd0NBQXNCLGFBQWEsSUFBSTtBQUNwRCxjQUFLLEtBQUssV0FBVyxLQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUk7QUFDeEMsa0JBQU0sSUFBSSxNQUFNLDBDQUEwQztBQUFBLFVBQzlEO0FBQ0EsZ0JBQU0sS0FBSyxLQUFLLFNBQVMsS0FBSztBQUM5QixjQUFJLE1BQU8sS0FBSyxLQUFLLFlBQVksQ0FBQyxHQUFJO0FBQ2xDLGtCQUFNLElBQUksTUFBTSxpQ0FBaUM7QUFBQSxVQUNyRDtBQUNBLGdCQUFNLEtBQUssS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzlCLGdCQUFNLEtBQUssS0FBSyxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQztBQUN0QyxpQkFBTyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUc7QUFBQSxRQUMxQjtBQUFBLFFBQ0EsT0FBTyxZQUFZLE9BQU8sV0FBVztBQUNqQyxnQkFBTUEsUUFBTyxLQUFLLEtBQUssWUFBWSxDQUFDO0FBQ3BDLGNBQUksTUFBTSxFQUFFLGVBQWVBLFNBQVEsTUFBTSxFQUFFLGVBQWVBLE9BQU07QUFDNUQsa0JBQU0sSUFBSSxNQUFNLGlEQUFpRDtBQUFBLFVBQ3JFO0FBQ0EsZ0JBQU0sSUFBSSx3Q0FBc0IsYUFBYSxNQUFNLENBQUM7QUFDcEQsZ0JBQU0sSUFBSSx3Q0FBc0IsYUFBYSxNQUFNLENBQUM7QUFDcEQsZ0JBQU0sTUFBTSxJQUFJLFdBQVdBLFFBQU8sSUFBSSxDQUFDO0FBQ3ZDLGNBQUksQ0FBQyxJQUFJO0FBQ1QsY0FBSSxJQUFJLEdBQUcsQ0FBQztBQUNaLGNBQUksSUFBSSxHQUFHQSxRQUFPLENBQUM7QUFDbkIsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxPQUFPLFFBQVEsV0FBVztBQUN0QixpQkFBTyxLQUFLLEtBQUssWUFBWSxDQUFDO0FBQUEsUUFDbEM7QUFBQSxRQUNBLE9BQU8sZ0JBQWdCLFdBQVcsV0FBVztBQUN6QyxnQkFBTUEsUUFBTyxLQUFLLFFBQVEsU0FBUztBQUNuQyxnQkFBTSxJQUFJLHdDQUFzQixhQUFhLFVBQVUsQ0FBQztBQUN4RCxnQkFBTSxJQUFJLHdDQUFzQixhQUFhLFVBQVUsQ0FBQztBQUN4RCxnQkFBTSxNQUFNLElBQUksV0FBV0EsUUFBTyxDQUFDO0FBQ25DLGNBQUksSUFBSSxLQUFLLFNBQVMsR0FBR0EsS0FBSSxDQUFDO0FBQzlCLGNBQUksSUFBSSxLQUFLLFNBQVMsR0FBR0EsS0FBSSxHQUFHQSxLQUFJO0FBQ3BDLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsT0FBTyxnQkFBZ0IsTUFBTSxXQUFXO0FBQ3BDLGdCQUFNQSxRQUFPLEtBQUssUUFBUSxTQUFTO0FBQ25DLGdCQUFNLE9BQU8sd0NBQXNCLGFBQWEsSUFBSTtBQUNwRCxjQUFJLEtBQUssV0FBWUEsUUFBTyxHQUFJO0FBQzVCLGtCQUFNLElBQUksTUFBTSxpQ0FBaUM7QUFBQSxVQUNyRDtBQUNBLGdCQUFNLElBQUksS0FBSyxNQUFNLEdBQUdBLEtBQUk7QUFDNUIsZ0JBQU0sSUFBSSxLQUFLLE1BQU1BLEtBQUk7QUFDekIsaUJBQU87QUFBQSxZQUNILEdBQUcsS0FBSyxVQUFVLENBQUM7QUFBQSxZQUNuQixHQUFHLEtBQUssVUFBVSxDQUFDO0FBQUEsVUFDdkI7QUFBQSxRQUNKO0FBQUEsUUFDQSxPQUFPLFVBQVUsTUFBTTtBQUNuQixjQUFJLElBQUk7QUFDUixpQkFBUSxJQUFJLEtBQUssU0FBUyxLQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUk7QUFDN0M7QUFBQSxVQUNKO0FBQ0EsY0FBSSxNQUFNLEdBQUc7QUFDVCxtQkFBTztBQUFBLFVBQ1g7QUFDQSxpQkFBTyxLQUFLLE1BQU0sR0FBRyxLQUFLLE1BQU07QUFBQSxRQUNwQztBQUFBLFFBQ0EsT0FBTyxTQUFTLE1BQU1BLE9BQU07QUFDeEIsY0FBSUEsVUFBUyxLQUFLLFFBQVE7QUFDdEIsbUJBQU87QUFBQSxVQUNYO0FBQ0EsZ0JBQU0sTUFBTSxJQUFJLFdBQVdBLEtBQUk7QUFDL0IsY0FBSSxJQUFJLE1BQU1BLFFBQU8sS0FBSyxNQUFNO0FBQ2hDLGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFFQSxNQUFNLGlCQUFOLE1BQU0sZ0JBQWU7QUFBQSxRQUNqQixjQUFjO0FBQ1YsZUFBSyxJQUFJLElBQUksWUFBWSxDQUFDO0FBQzFCLGVBQUssSUFBSSxJQUFJLFlBQVksQ0FBQztBQUFBLFFBQzlCO0FBQUEsUUFDQSxPQUFPLHVCQUF1QixPQUFPO0FBQ2pDLGdCQUFNLFlBQVksTUFBTSxhQUFhO0FBQ3JDLGdCQUFNLFFBQVEsUUFBUSxnQkFBZ0IsT0FBTyxZQUFZLENBQUM7QUFDMUQsZ0JBQU0sY0FBYyxJQUFJLGdCQUFlO0FBQ3ZDLHNCQUFZLElBQUksd0NBQXNCLGNBQWMsTUFBTSxDQUFDO0FBQzNELHNCQUFZLElBQUksd0NBQXNCLGNBQWMsTUFBTSxDQUFDO0FBQzNELGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EscUJBQXFCLFdBQVc7QUFDNUIsd0JBQWMsUUFBUSxjQUFjLFNBQVMsWUFBYSxZQUFZLEtBQUssSUFBSSxLQUFLLEVBQUUsWUFBWSxLQUFLLEVBQUUsVUFBVSxJQUFJO0FBQ3ZILGdCQUFNLFlBQVksUUFBUSxnQkFBZ0IsTUFBTSxTQUFTO0FBQ3pELGlCQUFPLFVBQVU7QUFBQSxRQUNyQjtBQUFBLE1BQ0o7QUFDQSxpQkFBVztBQUFBLFFBQ1AsUUFBUSxFQUFFLE1BQU0sYUFBYSxTQUFTLFdBQVcsa0NBQWtDLENBQUM7QUFBQSxNQUN4RixHQUFHLGVBQWUsV0FBVyxLQUFLLE1BQU07QUFDeEMsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxNQUFNLGFBQWEsU0FBUyxXQUFXLGtDQUFrQyxDQUFDO0FBQUEsTUFDeEYsR0FBRyxlQUFlLFdBQVcsS0FBSyxNQUFNO0FBRXhDLE1BQU0sbUJBQU4sY0FBK0IsZUFBZTtBQUFBLE1BQzlDO0FBQ0EsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxTQUFTLEdBQUcsVUFBVSxNQUFNLE1BQU0sYUFBYSxXQUFXLFVBQVUsS0FBSyxDQUFDO0FBQUEsTUFDeEYsR0FBRyxpQkFBaUIsV0FBVyxhQUFhLE1BQU07QUFFbEQsTUFBSSxlQUFlLE1BQU1FLGNBQWE7QUFBQSxRQUNsQyxjQUFjO0FBQ1YsZUFBSyxRQUFRLElBQUksWUFBWSxDQUFDO0FBQUEsUUFDbEM7QUFBQSxRQUNBLFNBQVMsTUFBTTtBQUNYLGNBQUksQ0FBQyxLQUFLLEdBQUc7QUFDVCxrQkFBTSxJQUFJLE1BQU0sOEJBQThCO0FBQUEsVUFDbEQ7QUFDQSxlQUFLLFFBQVEsMEJBQVEsY0FBYyxLQUFLLENBQUM7QUFDekMsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxTQUFTO0FBQ0wsZ0JBQU0sTUFBTTtBQUFBLFlBQ1IsR0FBRywwQkFBUSxZQUFZLEtBQUssS0FBSztBQUFBLFVBQ3JDO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUNBLGlCQUFXO0FBQUEsUUFDUCxRQUFRLEVBQUUsTUFBTSxhQUFhLFlBQVksQ0FBQztBQUFBLE1BQzlDLEdBQUcsYUFBYSxXQUFXLFNBQVMsTUFBTTtBQUMxQyxxQkFBZSxXQUFXO0FBQUEsUUFDdEIsUUFBUSxFQUFFLE1BQU0sYUFBYSxPQUFPLENBQUM7QUFBQSxNQUN6QyxHQUFHLFlBQVk7QUFFZixNQUFJLGNBQWMsTUFBTUMsYUFBWTtBQUFBLFFBQ2hDLFlBQVksT0FBTztBQUNmLGVBQUssUUFBUSxJQUFJLFlBQVksQ0FBQztBQUM5QixjQUFJLE9BQU87QUFDUCxpQkFBSyxRQUFRO0FBQUEsVUFDakI7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQ0wsZ0JBQU0sT0FBTztBQUFBLFlBQ1QsR0FBRywwQkFBUSxZQUFZLEtBQUssS0FBSztBQUFBLFVBQ3JDO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxTQUFTLE1BQU07QUFDWCxjQUFJLEVBQUUsT0FBTyxPQUFPO0FBQ2hCLGtCQUFNLElBQUksTUFBTSw4QkFBOEI7QUFBQSxVQUNsRDtBQUNBLGVBQUssUUFBUSwwQkFBUSxjQUFjLEtBQUssQ0FBQztBQUN6QyxpQkFBTztBQUFBLFFBQ1g7QUFBQSxNQUNKO0FBQ0EsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxNQUFNLGFBQWEsVUFBVSxDQUFDO0FBQUEsTUFDNUMsR0FBRyxZQUFZLFdBQVcsU0FBUyxNQUFNO0FBQ3pDLG9CQUFjLFdBQVc7QUFBQSxRQUNyQixRQUFRLEVBQUUsTUFBTSxhQUFhLE9BQU8sQ0FBQztBQUFBLE1BQ3pDLEdBQUcsV0FBVztBQUVkLE1BQUksa0JBQWtCLE1BQU1DLGlCQUFnQjtBQUFBLE1BQzVDO0FBQ0EsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxNQUFNLGFBQWEsWUFBWSxDQUFDO0FBQUEsUUFDMUMsU0FBUyxFQUFFLE1BQU0sY0FBYyxRQUFRLFdBQVcsa0NBQWtDLENBQUM7QUFBQSxNQUN6RixHQUFHLGdCQUFnQixXQUFXLEtBQUssTUFBTTtBQUN6Qyx3QkFBa0IsV0FBVztBQUFBLFFBQ3pCLFFBQVEsRUFBRSxNQUFNLGFBQWEsT0FBTyxDQUFDO0FBQUEsTUFDekMsR0FBRyxlQUFlO0FBRWxCLE1BQU0sY0FBYztBQUNwQixNQUFNLGtCQUFrQjtBQUN4QixNQUFNLGNBQWMsR0FBRyxlQUFlO0FBQ3RDLE1BQU0sY0FBYyxHQUFHLGVBQWU7QUFDdEMsTUFBTSxjQUFjLEdBQUcsZUFBZTtBQUN0QyxNQUFNLGVBQWU7QUFDckIsTUFBTSxvQkFBb0IsR0FBRyxZQUFZO0FBQ3pDLE1BQU0sb0JBQW9CLEdBQUcsWUFBWTtBQUN6QyxNQUFNLG9CQUFvQixHQUFHLFlBQVk7QUFDekMsTUFBTSxvQkFBb0IsR0FBRyxZQUFZO0FBQ3pDLE1BQU0sb0JBQW9CLEdBQUcsWUFBWTtBQUN6QyxNQUFNLG9CQUFvQixHQUFHLFlBQVk7QUFDekMsTUFBTSxvQkFBb0IsR0FBRyxZQUFZO0FBQ3pDLE1BQU0sb0JBQW9CLEdBQUcsWUFBWTtBQUN6QyxNQUFNLG9CQUFvQixHQUFHLFlBQVk7QUFDekMsTUFBTSxvQkFBb0IsR0FBRyxZQUFZO0FBQ3pDLE1BQU0sb0JBQW9CLEdBQUcsWUFBWTtBQUN6QyxNQUFNLG9CQUFvQixHQUFHLFlBQVk7QUFDekMsTUFBTSxvQkFBb0IsR0FBRyxZQUFZO0FBQ3pDLE1BQU0sb0JBQW9CLEdBQUcsWUFBWTtBQUN6QyxNQUFNLFdBQVc7QUFDakIsTUFBTSxTQUFTO0FBQ2YsTUFBTSxZQUFZO0FBQ2xCLE1BQU0sVUFBVTtBQUVoQixNQUFJLFVBQXVCLHVCQUFPLE9BQU87QUFBQSxRQUN2QyxXQUFXO0FBQUEsUUFDWDtBQUFBLFFBQ0EsSUFBSSxrQkFBbUI7QUFBRSxpQkFBTztBQUFBLFFBQWlCO0FBQUEsUUFDakQ7QUFBQSxRQUNBO0FBQUEsUUFDQSxJQUFJLGNBQWU7QUFBRSxpQkFBTztBQUFBLFFBQWE7QUFBQSxRQUN6QyxJQUFJLGVBQWdCO0FBQUUsaUJBQU87QUFBQSxRQUFjO0FBQUEsUUFDM0MsSUFBSSxjQUFlO0FBQUUsaUJBQU87QUFBQSxRQUFhO0FBQUEsUUFDekMsSUFBSSxtQkFBb0I7QUFBRSxpQkFBT1Q7QUFBQSxRQUFrQjtBQUFBLFFBQ25EO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0EsWUFBWTtBQUFBLFFBQ1o7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsQ0FBQztBQUVELE1BQU0sV0FBTixNQUFlO0FBQUEsUUFDWCxjQUFjO0FBQUEsUUFBRTtBQUFBLFFBQ2hCLE9BQU8sU0FBUyxNQUFNO0FBQ2xCLGdCQUFNLE1BQU0sSUFBSUEsa0JBQWlCO0FBQ2pDLGNBQUksUUFBUSxLQUFLO0FBQ2pCLGdCQUFNLE1BQU0sV0FBVyxVQUFVLEdBQUc7QUFDcEMsZUFBSyxNQUFNLEtBQUs7QUFBQSxZQUNaLEdBQUc7QUFBQSxZQUNIO0FBQUEsVUFDSixDQUFDO0FBQ0QsZUFBSyxNQUFNLEtBQUssS0FBSyxJQUFJO0FBQUEsUUFDN0I7QUFBQSxRQUNBLE9BQU8sS0FBSyxVQUFVO0FBQ2xCLHFCQUFXLFNBQVMsWUFBWTtBQUNoQyxxQkFBVyxRQUFRLEtBQUssT0FBTztBQUMzQixnQkFBSSxLQUFLLEtBQUssWUFBWSxNQUFNLFlBQVksS0FBSyxHQUFHLFlBQVksTUFBTSxVQUFVO0FBQzVFLHFCQUFPO0FBQUEsWUFDWDtBQUFBLFVBQ0o7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLE9BQU8sSUFBSSxVQUFVO0FBQ2pCLGdCQUFNLE1BQU0sS0FBSyxLQUFLLFFBQVE7QUFDOUIsY0FBSSxDQUFDLEtBQUs7QUFDTixrQkFBTSxJQUFJLE1BQU0sK0JBQStCLFFBQVEsR0FBRztBQUFBLFVBQzlEO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUNBLGVBQVMsUUFBUSxDQUFDO0FBQ2xCLGVBQVMsUUFBUSxDQUFDO0FBQ2xCLGVBQVMsU0FBUyxFQUFFLE1BQU0sU0FBUyxJQUFJLGFBQWEsTUFBTSxJQUFJLENBQUM7QUFDL0QsZUFBUyxTQUFTLEVBQUUsTUFBTSxTQUFTLElBQUksYUFBYSxNQUFNLElBQUksQ0FBQztBQUMvRCxlQUFTLFNBQVMsRUFBRSxNQUFNLFNBQVMsSUFBSSxhQUFhLE1BQU0sSUFBSSxDQUFDO0FBQy9ELGVBQVMsU0FBUyxFQUFFLE1BQU0sU0FBUyxJQUFJLGFBQWEsTUFBTSxJQUFJLENBQUM7QUFDL0QsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFFL0UsTUFBTSxlQUFOLGNBQTJCLGVBQWU7QUFBQSxRQUN0QyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTztBQUNaLGVBQUssaUJBQWlCLENBQUMsU0FBUyxXQUFXLFdBQVcsU0FBUztBQUMvRCxlQUFLLFNBQVMsQ0FBQyxRQUFRLFFBQVE7QUFBQSxRQUNuQztBQUFBLFFBQ0EsaUJBQWlCLFNBQVM7QUFDdEIsa0JBQVEsUUFBUSxZQUFZLEdBQUc7QUFBQSxZQUMzQixLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQ0QscUJBQU87QUFBQSxZQUNYO0FBQ0ksb0JBQU0sSUFBSSxNQUFNLDJCQUEyQixPQUFPLEdBQUc7QUFBQSxVQUM3RDtBQUFBLFFBQ0o7QUFBQSxRQUNBLHVCQUF1QixXQUFXO0FBQzlCLGVBQUssc0JBQXNCLFdBQVcsTUFBTTtBQUM1QyxlQUFLLG1CQUFtQixVQUFVLE1BQU0sS0FBSyxjQUFjO0FBQzNELGNBQUksWUFBWSxXQUFXO0FBQ3ZCLGdCQUFJLE9BQU8sVUFBVSxXQUFXLFVBQVU7QUFDdEMsb0JBQU0sSUFBSSxVQUFVLHlCQUF5QjtBQUFBLFlBQ2pEO0FBQ0EsZ0JBQUksVUFBVSxTQUFTLEdBQUc7QUFDdEIsb0JBQU0sSUFBSSxXQUFXLGdDQUFnQztBQUFBLFlBQ3pEO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGtCQUFrQixXQUFXO0FBQ3pCLGVBQUssc0JBQXNCLFdBQVcsTUFBTTtBQUM1QyxlQUFLLG1CQUFtQixVQUFVLE1BQU0sS0FBSyxjQUFjO0FBQUEsUUFDL0Q7QUFBQSxNQUNKO0FBRUEsTUFBTSxpQkFBTixjQUE2QixlQUFlO0FBQUEsUUFDeEMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLE9BQU87QUFDWixlQUFLLGlCQUFpQixDQUFDLFNBQVMsV0FBVyxXQUFXLFNBQVM7QUFDL0QsZUFBSyxTQUFTLENBQUMsY0FBYyxXQUFXO0FBQUEsUUFDNUM7QUFBQSxRQUNBLHFCQUFxQixXQUFXO0FBQzVCLGVBQUssc0JBQXNCLFdBQVcsTUFBTTtBQUM1QyxlQUFLLG1CQUFtQixVQUFVLE1BQU0sS0FBSyxjQUFjO0FBQzNELGVBQUssc0JBQXNCLFdBQVcsTUFBTTtBQUM1QyxjQUFJLEVBQUUsVUFBVSxnQkFBZ0IsZUFBZSxZQUFZLE9BQU8sVUFBVSxJQUFJLElBQUk7QUFDaEYsa0JBQU0sSUFBSSxVQUFVLHlEQUF5RDtBQUFBLFVBQ2pGO0FBQ0EsZUFBSyxzQkFBc0IsV0FBVyxZQUFZO0FBQ2xELGNBQUksT0FBTyxVQUFVLGVBQWUsVUFBVTtBQUMxQyxrQkFBTSxJQUFJLFVBQVUsNkJBQTZCO0FBQUEsVUFDckQ7QUFDQSxjQUFJLFVBQVUsYUFBYSxHQUFHO0FBQzFCLGtCQUFNLElBQUksVUFBVSw0QkFBNEI7QUFBQSxVQUNwRDtBQUFBLFFBQ0o7QUFBQSxRQUNBLGVBQWVHLFNBQVEsU0FBUyxXQUFXLGFBQWEsY0FBYyxNQUFNO0FBQ3hFLGdCQUFNLGVBQWVBLFNBQVEsU0FBUyxXQUFXLGFBQWEsU0FBUztBQUN2RSxjQUFJLGFBQWE7QUFDYixrQkFBTSxJQUFJLFlBQVksOEJBQThCO0FBQUEsVUFDeEQ7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUVBLE1BQU0sZUFBTixjQUEyQixlQUFlO0FBQUEsUUFDdEMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLE9BQU87QUFDWixlQUFLLGlCQUFpQixDQUFDLFNBQVMsV0FBVyxXQUFXLFNBQVM7QUFDL0QsZUFBSyxTQUFTLENBQUMsYUFBYSxZQUFZO0FBQUEsUUFDNUM7QUFBQSxRQUNBLHFCQUFxQixXQUFXO0FBQzVCLGVBQUssc0JBQXNCLFdBQVcsTUFBTTtBQUM1QyxlQUFLLG1CQUFtQixVQUFVLE1BQU0sS0FBSyxjQUFjO0FBQzNELGVBQUssc0JBQXNCLFdBQVcsTUFBTTtBQUM1QyxjQUFJLENBQUMsd0NBQXNCLGVBQWUsVUFBVSxJQUFJLEdBQUc7QUFDdkQsa0JBQU0sSUFBSSxVQUFVLHlEQUF5RDtBQUFBLFVBQ2pGO0FBQ0EsZUFBSyxzQkFBc0IsV0FBVyxNQUFNO0FBQzVDLGNBQUksQ0FBQyx3Q0FBc0IsZUFBZSxVQUFVLElBQUksR0FBRztBQUN2RCxrQkFBTSxJQUFJLFVBQVUseURBQXlEO0FBQUEsVUFDakY7QUFBQSxRQUNKO0FBQUEsUUFDQSxlQUFlQSxTQUFRLFNBQVMsV0FBVyxhQUFhLGNBQWMsTUFBTTtBQUN4RSxnQkFBTSxlQUFlQSxTQUFRLFNBQVMsV0FBVyxhQUFhLFNBQVM7QUFDdkUsY0FBSSxhQUFhO0FBQ2Isa0JBQU0sSUFBSSxZQUFZLDhCQUE4QjtBQUFBLFVBQ3hEO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNLGdCQUFOLGNBQTRCLGVBQWU7QUFBQSxRQUN2QyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssU0FBUyxDQUFDO0FBQ2YsZUFBSyxnQkFBZ0I7QUFBQSxRQUN6QjtBQUFBLFFBQ0EsVUFBVSxNQUFNO0FBQ1osZUFBSyxDQUFDLElBQUksRUFBRSxRQUFRLEtBQUssZUFBZSxHQUFHLEtBQUssQ0FBQyxFQUFFO0FBQ25ELGlCQUFPLE1BQU0sT0FBTyxNQUFNLE1BQU0sSUFBSTtBQUFBLFFBQ3hDO0FBQUEsUUFDQSxZQUFZLFdBQVcsTUFBTTtBQUN6QixnQkFBTSxZQUFZLFdBQVcsSUFBSTtBQUNqQyxnQkFBTSxTQUFTLFVBQVUsVUFBVTtBQUNuQyxjQUFJLE9BQU8sV0FBVyxVQUFVO0FBQzVCLGtCQUFNLElBQUksVUFBVSx5QkFBeUI7QUFBQSxVQUNqRDtBQUNBLGNBQUksU0FBUyxHQUFHO0FBQ1osa0JBQU0sSUFBSSxVQUFVLHFCQUFxQjtBQUFBLFVBQzdDO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNLG1CQUFOLGNBQStCLGNBQWM7QUFBQSxRQUN6QyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTztBQUNaLGVBQUssZ0JBQWdCO0FBQUEsUUFDekI7QUFBQSxNQUNKO0FBRUEsTUFBTSxtQkFBTixjQUErQixjQUFjO0FBQUEsUUFDekMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLE9BQU87QUFDWixlQUFLLGdCQUFnQjtBQUFBLFFBQ3pCO0FBQUEsTUFDSjtBQUVBLE1BQU0sU0FBTixNQUFhO0FBQUEsUUFDVCxLQUFLLE9BQU8sV0FBVyxJQUFJO0FBQ3ZCLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsYUFBYTtBQUNULGdCQUFNLElBQUksS0FBSyxnQkFBZ0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUNqRCxZQUFFLENBQUMsSUFBSyxFQUFFLENBQUMsSUFBSSxLQUFRO0FBQ3ZCLFlBQUUsQ0FBQyxJQUFLLEVBQUUsQ0FBQyxJQUFJLEtBQVE7QUFDdkIsZ0JBQU0sT0FBTywwQkFBUSxNQUFNLENBQUMsRUFBRSxZQUFZO0FBQzFDLGlCQUFPLEdBQUcsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxVQUFVLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxVQUFVLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztBQUFBLFFBQ3JJO0FBQUEsTUFDSjtBQUVBLE1BQU0sa0JBQU4sTUFBc0I7QUFBQSxRQUNsQixjQUFjO0FBQ1YsZUFBSyxRQUFRLENBQUM7QUFBQSxRQUNsQjtBQUFBLFFBQ0EsSUFBSSxlQUFlO0FBQ2YsaUJBQU8sS0FBSyxNQUFNLGNBQWMsWUFBWSxDQUFDLEtBQUs7QUFBQSxRQUN0RDtBQUFBLFFBQ0EsSUFBSSxVQUFVO0FBQ1YsZUFBSyxNQUFNLFNBQVMsS0FBSyxZQUFZLENBQUMsSUFBSTtBQUFBLFFBQzlDO0FBQUEsUUFDQSxTQUFTLGVBQWU7QUFDcEIsZ0JBQU0sV0FBVyxLQUFLLElBQUksY0FBYyxZQUFZLENBQUM7QUFDckQsY0FBSSxVQUFVO0FBQ1YsbUJBQU8sS0FBSyxNQUFNLGFBQWE7QUFBQSxVQUNuQztBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsSUFBSSxNQUFNO0FBQ04saUJBQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJO0FBQUEsUUFDMUI7QUFBQSxRQUNBLElBQUksU0FBUztBQUNULGlCQUFPLE9BQU8sS0FBSyxLQUFLLEtBQUssRUFBRTtBQUFBLFFBQ25DO0FBQUEsUUFDQSxJQUFJLGFBQWE7QUFDYixnQkFBTSxhQUFhLENBQUM7QUFDcEIscUJBQVcsT0FBTyxLQUFLLE9BQU87QUFDMUIsa0JBQU0sV0FBVyxLQUFLLE1BQU0sR0FBRztBQUMvQix1QkFBVyxLQUFLLFNBQVMsSUFBSTtBQUFBLFVBQ2pDO0FBQ0EsaUJBQU8sV0FBVyxLQUFLO0FBQUEsUUFDM0I7QUFBQSxNQUNKO0FBRUEsTUFBTSxlQUFOLE1BQU0sY0FBYTtBQUFBLFFBQ2YsY0FBYztBQUNWLGVBQUssWUFBWSxJQUFJLGdCQUFnQjtBQUFBLFFBQ3pDO0FBQUEsUUFDQSxPQUFPLGtCQUFrQixNQUFNO0FBQzNCLGlCQUFPLFFBQ0EsT0FBTyxTQUFTLFlBQ2hCLFVBQVUsUUFDVixVQUFVLE9BQ1gsT0FDQTtBQUFBLFFBQ1Y7QUFBQSxRQUNBLEtBQUssT0FBTyxXQUFXLElBQUk7QUFDdkIsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxNQUFNLFVBQVUsTUFBTTtBQUNsQixlQUFLLHVCQUF1QixNQUFNLEdBQUcsUUFBUTtBQUM3QyxnQkFBTSxDQUFDLFdBQVcsTUFBTSxHQUFHLE1BQU0sSUFBSTtBQUNyQyxnQkFBTSxvQkFBb0IsS0FBSyxpQkFBaUIsU0FBUztBQUN6RCxnQkFBTSxlQUFlLHdDQUFzQixjQUFjLElBQUk7QUFDN0QsZ0JBQU0sV0FBVyxLQUFLLFlBQVksa0JBQWtCLElBQUk7QUFDeEQsZ0JBQU0sU0FBUyxNQUFNLFNBQVMsT0FBTyxtQkFBbUIsY0FBYyxHQUFHLE1BQU07QUFDL0UsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxNQUFNLGVBQWUsTUFBTTtBQUN2QixlQUFLLHVCQUF1QixNQUFNLEdBQUcsYUFBYTtBQUNsRCxnQkFBTSxDQUFDLFdBQVcsYUFBYSxXQUFXLEdBQUcsTUFBTSxJQUFJO0FBQ3ZELGdCQUFNLG9CQUFvQixLQUFLLGlCQUFpQixTQUFTO0FBQ3pELGdCQUFNLFdBQVcsS0FBSyxZQUFZLGtCQUFrQixJQUFJO0FBQ3hELGdCQUFNLFNBQVMsTUFBTSxTQUFTLFlBQVksRUFBRSxHQUFHLG1CQUFtQixNQUFNLFNBQVMsS0FBSyxHQUFHLGFBQWEsV0FBVyxHQUFHLE1BQU07QUFDMUgsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxNQUFNLFFBQVEsTUFBTTtBQUNoQixlQUFLLHVCQUF1QixNQUFNLEdBQUcsTUFBTTtBQUMzQyxnQkFBTSxDQUFDLFdBQVcsS0FBSyxNQUFNLEdBQUcsTUFBTSxJQUFJO0FBQzFDLGVBQUssZUFBZSxHQUFHO0FBQ3ZCLGdCQUFNLG9CQUFvQixLQUFLLGlCQUFpQixTQUFTO0FBQ3pELGdCQUFNLGVBQWUsd0NBQXNCLGNBQWMsSUFBSTtBQUM3RCxnQkFBTSxXQUFXLEtBQUssWUFBWSxrQkFBa0IsSUFBSTtBQUN4RCxnQkFBTSxTQUFTLE1BQU0sU0FBUyxLQUFLLEVBQUUsR0FBRyxtQkFBbUIsTUFBTSxTQUFTLEtBQUssR0FBRyxLQUFLLGNBQWMsR0FBRyxNQUFNO0FBQzlHLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsTUFBTSxVQUFVLE1BQU07QUFDbEIsZUFBSyx1QkFBdUIsTUFBTSxHQUFHLFFBQVE7QUFDN0MsZ0JBQU0sQ0FBQyxXQUFXLEtBQUssV0FBVyxNQUFNLEdBQUcsTUFBTSxJQUFJO0FBQ3JELGVBQUssZUFBZSxHQUFHO0FBQ3ZCLGdCQUFNLG9CQUFvQixLQUFLLGlCQUFpQixTQUFTO0FBQ3pELGdCQUFNLGVBQWUsd0NBQXNCLGNBQWMsSUFBSTtBQUM3RCxnQkFBTSxvQkFBb0Isd0NBQXNCLGNBQWMsU0FBUztBQUN2RSxnQkFBTSxXQUFXLEtBQUssWUFBWSxrQkFBa0IsSUFBSTtBQUN4RCxnQkFBTSxTQUFTLE1BQU0sU0FBUyxPQUFPLEVBQUUsR0FBRyxtQkFBbUIsTUFBTSxTQUFTLEtBQUssR0FBRyxLQUFLLG1CQUFtQixjQUFjLEdBQUcsTUFBTTtBQUNuSSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLE1BQU0sV0FBVyxNQUFNO0FBQ25CLGVBQUssdUJBQXVCLE1BQU0sR0FBRyxTQUFTO0FBQzlDLGdCQUFNLENBQUMsV0FBVyxLQUFLLE1BQU0sR0FBRyxNQUFNLElBQUk7QUFDMUMsZUFBSyxlQUFlLEdBQUc7QUFDdkIsZ0JBQU0sb0JBQW9CLEtBQUssaUJBQWlCLFNBQVM7QUFDekQsZ0JBQU0sZUFBZSx3Q0FBc0IsY0FBYyxJQUFJO0FBQzdELGdCQUFNLFdBQVcsS0FBSyxZQUFZLGtCQUFrQixJQUFJO0FBQ3hELGdCQUFNLFNBQVMsTUFBTSxTQUFTLFFBQVEsRUFBRSxHQUFHLG1CQUFtQixNQUFNLFNBQVMsS0FBSyxHQUFHLEtBQUssY0FBYyxFQUFFLFVBQVUsS0FBSyxHQUFHLEdBQUcsTUFBTTtBQUNySSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLE1BQU0sV0FBVyxNQUFNO0FBQ25CLGVBQUssdUJBQXVCLE1BQU0sR0FBRyxTQUFTO0FBQzlDLGdCQUFNLENBQUMsV0FBVyxLQUFLLE1BQU0sR0FBRyxNQUFNLElBQUk7QUFDMUMsZUFBSyxlQUFlLEdBQUc7QUFDdkIsZ0JBQU0sb0JBQW9CLEtBQUssaUJBQWlCLFNBQVM7QUFDekQsZ0JBQU0sZUFBZSx3Q0FBc0IsY0FBYyxJQUFJO0FBQzdELGdCQUFNLFdBQVcsS0FBSyxZQUFZLGtCQUFrQixJQUFJO0FBQ3hELGdCQUFNLFNBQVMsTUFBTSxTQUFTLFFBQVEsRUFBRSxHQUFHLG1CQUFtQixNQUFNLFNBQVMsS0FBSyxHQUFHLEtBQUssY0FBYyxFQUFFLFVBQVUsS0FBSyxHQUFHLEdBQUcsTUFBTTtBQUNySSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLE1BQU0sY0FBYyxNQUFNO0FBQ3RCLGVBQUssdUJBQXVCLE1BQU0sR0FBRyxZQUFZO0FBQ2pELGdCQUFNLENBQUMsV0FBVyxTQUFTLFFBQVEsR0FBRyxNQUFNLElBQUk7QUFDaEQsZUFBSyxlQUFlLE9BQU87QUFDM0IsZ0JBQU0sb0JBQW9CLEtBQUssaUJBQWlCLFNBQVM7QUFDekQsZ0JBQU0sV0FBVyxLQUFLLFlBQVksa0JBQWtCLElBQUk7QUFDeEQsZ0JBQU0sU0FBUyxNQUFNLFNBQVMsV0FBVyxFQUFFLEdBQUcsbUJBQW1CLE1BQU0sU0FBUyxLQUFLLEdBQUcsU0FBUyxRQUFRLEVBQUUsVUFBVSxLQUFLLEdBQUcsR0FBRyxNQUFNO0FBQ3RJLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsTUFBTSxhQUFhLE1BQU07QUFDckIsZUFBSyx1QkFBdUIsTUFBTSxHQUFHLFdBQVc7QUFDaEQsZ0JBQU0sQ0FBQyxXQUFXLFNBQVMsZ0JBQWdCLGFBQWEsV0FBVyxHQUFHLE1BQU0sSUFBSTtBQUNoRixnQkFBTSx5QkFBeUIsS0FBSyxpQkFBaUIsY0FBYztBQUNuRSxnQkFBTSxpQkFBaUIsS0FBSyxZQUFZLHVCQUF1QixJQUFJO0FBQ25FLHlCQUFlLHNCQUFzQixzQkFBc0I7QUFDM0QsZ0JBQU0sb0JBQW9CLEtBQUssaUJBQWlCLFNBQVM7QUFDekQsZ0JBQU0sV0FBVyxLQUFLLFlBQVksa0JBQWtCLElBQUk7QUFDeEQsbUJBQVMsZUFBZSxTQUFTLFdBQVc7QUFDNUMsZ0JBQU0sY0FBYyxNQUFNLFNBQVMsV0FBVyxFQUFFLEdBQUcsbUJBQW1CLE1BQU0sU0FBUyxLQUFLLEdBQUcsU0FBUyxlQUFlLFVBQVUsS0FBSyxFQUFFLFVBQVUsTUFBTSxHQUFHLEdBQUcsTUFBTTtBQUNsSyxpQkFBTyxLQUFLLFVBQVUsT0FBTyxhQUFhLGdCQUFnQixhQUFhLFdBQVcsR0FBRyxNQUFNO0FBQUEsUUFDL0Y7QUFBQSxRQUNBLE1BQU0sYUFBYSxNQUFNO0FBQ3JCLGVBQUssdUJBQXVCLE1BQU0sR0FBRyxXQUFXO0FBQ2hELGdCQUFNLENBQUNBLFNBQVEsS0FBSyxHQUFHLE1BQU0sSUFBSTtBQUNqQyxlQUFLLGVBQWUsR0FBRztBQUN2QixnQkFBTSxXQUFXLEtBQUssWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUNwRCxnQkFBTSxTQUFTLE1BQU0sU0FBUyxVQUFVQSxTQUFRLEtBQUssR0FBRyxNQUFNO0FBQzlELGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsTUFBTSxhQUFhLE1BQU07QUFDckIsZUFBSyx1QkFBdUIsTUFBTSxHQUFHLFdBQVc7QUFDaEQsZ0JBQU0sQ0FBQ0EsU0FBUSxTQUFTLFdBQVcsYUFBYSxXQUFXLEdBQUcsTUFBTSxJQUFJO0FBQ3hFLGdCQUFNLG9CQUFvQixLQUFLLGlCQUFpQixTQUFTO0FBQ3pELGdCQUFNLFdBQVcsS0FBSyxZQUFZLGtCQUFrQixJQUFJO0FBQ3hELGNBQUksQ0FBQyxTQUFTLFFBQVEsS0FBSyxFQUFFLFFBQVFBLE9BQU0sTUFBTSxJQUFJO0FBQ2pELGtCQUFNLGVBQWUsd0NBQXNCLGNBQWMsT0FBTztBQUNoRSxtQkFBTyxTQUFTLFVBQVVBLFNBQVEsY0FBYyxFQUFFLEdBQUcsbUJBQW1CLE1BQU0sU0FBUyxLQUFLLEdBQUcsYUFBYSxXQUFXLEdBQUcsTUFBTTtBQUFBLFVBQ3BJLE9BQ0s7QUFDRCxnQkFBSSxDQUFDLFFBQVEsS0FBSztBQUNkLG9CQUFNLElBQUksVUFBVSxzQkFBc0I7QUFBQSxZQUM5QztBQUFBLFVBQ0o7QUFDQSxpQkFBTyxTQUFTLFVBQVVBLFNBQVEsU0FBUyxFQUFFLEdBQUcsbUJBQW1CLE1BQU0sU0FBUyxLQUFLLEdBQUcsYUFBYSxXQUFXLEdBQUcsTUFBTTtBQUFBLFFBQy9IO0FBQUEsUUFDQSxNQUFNLFFBQVFBLFNBQVEsS0FBSyxhQUFhLGtCQUFrQixNQUFNO0FBQzVELGNBQUksVUFBVSxNQUFNLEtBQUssVUFBVUEsU0FBUSxLQUFLLEdBQUcsSUFBSTtBQUN2RCxjQUFJQSxZQUFXLE9BQU87QUFDbEIsa0JBQU0sT0FBTyxLQUFLLFVBQVUsT0FBTztBQUNuQyxzQkFBVSwwQkFBUSxlQUFlLElBQUk7QUFBQSxVQUN6QztBQUNBLGdCQUFNLG9CQUFvQixLQUFLLGlCQUFpQixhQUFhO0FBQzdELGdCQUFNLGVBQWUsd0NBQXNCLGNBQWMsT0FBTztBQUNoRSxnQkFBTSxXQUFXLEtBQUssWUFBWSxrQkFBa0IsSUFBSTtBQUN4RCxpQkFBTyxTQUFTLFFBQVEsRUFBRSxHQUFHLG1CQUFtQixNQUFNLFNBQVMsS0FBSyxHQUFHLGFBQWEsY0FBYyxFQUFFLFVBQVUsTUFBTSxHQUFHLEdBQUcsSUFBSTtBQUFBLFFBQ2xJO0FBQUEsUUFDQSxNQUFNLFVBQVVBLFNBQVEsWUFBWSxlQUFlLGlCQUFpQix1QkFBdUIsYUFBYSxjQUFjLE1BQU07QUFDeEgsZ0JBQU0sb0JBQW9CLEtBQUssaUJBQWlCLGVBQWU7QUFDL0QsZ0JBQU0sZUFBZSx3Q0FBc0IsY0FBYyxVQUFVO0FBQ25FLGdCQUFNLFdBQVcsS0FBSyxZQUFZLGtCQUFrQixJQUFJO0FBQ3hELGNBQUksVUFBVSxNQUFNLFNBQVMsUUFBUSxFQUFFLEdBQUcsbUJBQW1CLE1BQU0sU0FBUyxLQUFLLEdBQUcsZUFBZSxjQUFjLEVBQUUsVUFBVSxNQUFNLEdBQUcsR0FBRyxJQUFJO0FBQzdJLGNBQUlBLFlBQVcsT0FBTztBQUNsQixnQkFBSTtBQUNBLHdCQUFVLEtBQUssTUFBTSwwQkFBUSxhQUFhLE9BQU8sQ0FBQztBQUFBLFlBQ3RELFNBQ08sR0FBRztBQUNOLG9CQUFNLFFBQVEsSUFBSSxVQUFVLDJCQUEyQjtBQUN2RCxvQkFBTSxXQUFXO0FBQ2pCLG9CQUFNO0FBQUEsWUFDVjtBQUFBLFVBQ0o7QUFDQSxpQkFBTyxLQUFLLFVBQVVBLFNBQVEsU0FBUyx1QkFBdUIsYUFBYSxXQUFXLEdBQUcsSUFBSTtBQUFBLFFBQ2pHO0FBQUEsUUFDQSx1QkFBdUIsTUFBTUUsT0FBTSxZQUFZO0FBQzNDLGNBQUksS0FBSyxTQUFTQSxPQUFNO0FBQ3BCLGtCQUFNLElBQUksVUFBVSxzQkFBc0IsVUFBVSx3QkFBd0JBLEtBQUksaUNBQWlDLEtBQUssTUFBTSxVQUFVO0FBQUEsVUFDMUk7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUIsV0FBVztBQUN4QixjQUFJLE9BQU8sY0FBYyxVQUFVO0FBQy9CLG1CQUFPO0FBQUEsY0FDSCxNQUFNO0FBQUEsWUFDVjtBQUFBLFVBQ0o7QUFDQSxjQUFJLGNBQWEsa0JBQWtCLFNBQVMsR0FBRztBQUMzQyxrQkFBTSxvQkFBb0IsRUFBRSxHQUFHLFVBQVU7QUFDekMsOEJBQWtCLE9BQU8sS0FBSyxpQkFBaUIsVUFBVSxJQUFJO0FBQzdELG1CQUFPO0FBQUEsVUFDWDtBQUNBLGlCQUFPLEVBQUUsR0FBRyxVQUFVO0FBQUEsUUFDMUI7QUFBQSxRQUNBLFlBQVksTUFBTTtBQUNkLGdCQUFNLFdBQVcsS0FBSyxVQUFVLElBQUksSUFBSTtBQUN4QyxjQUFJLENBQUMsVUFBVTtBQUNYLGtCQUFNLElBQUksZUFBZSxtQkFBbUI7QUFBQSxVQUNoRDtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsZUFBZSxLQUFLO0FBQ2hCLGNBQUksRUFBRSxlQUFlLFlBQVk7QUFDN0Isa0JBQU0sSUFBSSxVQUFVLGdDQUFnQztBQUFBLFVBQ3hEO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQTtBQUFBOzs7QUNqL0NBO0FBQUE7QUFBQSxrQkFBQUs7QUFBQSxJQUFBO0FBQUE7QUFzUEEsV0FBUyxhQUFhLEtBQUs7QUFDdkIsVUFBTSxNQUFNLFdBQVcsSUFBSSxHQUFHO0FBQzlCLFFBQUksQ0FBQyxLQUFLO0FBQ04sWUFBTSxJQUFTLGVBQWUsMENBQTBDO0FBQUEsSUFDNUU7QUFDQSxXQUFPO0FBQUEsRUFDWDtBQUNBLFdBQVMsYUFBYSxPQUFPO0FBQ3pCLFVBQU0sTUFBVyxVQUFVLE9BQU8sTUFBTSxXQUFXLE1BQU0sTUFBTSxNQUFNLGFBQWEsTUFBTSxNQUFNO0FBQzlGLFdBQU8sT0FBTyxHQUFHO0FBQ2pCLGVBQVcsSUFBSSxLQUFLLEtBQUs7QUFDekIsV0FBTztBQUFBLEVBQ1g7QUFrQ0EsV0FBUyxhQUFhLFFBQVE7QUFDMUIsVUFBTSxVQUFVLE9BQU8sTUFBTSxPQUFPLE1BQU07QUFDMUMsVUFBTSxPQUFPLE9BQU8sU0FBUztBQUM3QixhQUFTLFFBQVEsR0FBRyxRQUFRLE1BQU0sU0FBUztBQUN2QyxjQUFRLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSztBQUNsQyxVQUFJLE9BQU8sUUFBUSxDQUFDLElBQUksS0FBTTtBQUMxQixnQkFBUSxLQUFLLEtBQUs7QUFBQSxNQUN0QjtBQUFBLElBQ0o7QUFDQSxZQUFRLElBQUksSUFBSSxPQUFPLElBQUksS0FBSztBQUNoQyxXQUFPO0FBQUEsRUFDWDtBQUNBLFdBQVMsSUFBSUMsSUFBRyxHQUFHO0FBQ2YsVUFBTSxTQUFTLEtBQUssSUFBSUEsR0FBRSxRQUFRLEVBQUUsTUFBTTtBQUMxQyxVQUFNLFNBQVMsT0FBTyxNQUFNLE1BQU07QUFDbEMsYUFBUyxRQUFRLEdBQUcsUUFBUSxRQUFRLFNBQVM7QUFDekMsYUFBTyxLQUFLLElBQUlBLEdBQUUsS0FBSyxJQUFJLEVBQUUsS0FBSztBQUFBLElBQ3RDO0FBQ0EsV0FBTztBQUFBLEVBQ1g7QUFDQSxXQUFTLElBQUksS0FBSyxTQUFTO0FBQ3ZCLFVBQU0sU0FBZ0Isc0JBQWUsTUFBTSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssSUFBSTtBQUN2RSxVQUFNLFNBQVMsT0FBTyxPQUFPLE9BQU87QUFDcEMsV0FBTyxNQUFNO0FBQ2IsV0FBTztBQUFBLEVBQ1g7QUFDQSxXQUFTLGdCQUFnQixTQUFTLFlBQVk7QUFDMUMsVUFBTSxRQUFRLE9BQU8sTUFBTSxTQUFTO0FBQ3BDLFVBQU1DLFNBQVEsYUFBYTtBQUMzQixVQUFNQyxPQUFNRCxTQUFRO0FBQ3BCLFlBQVEsS0FBSyxPQUFPLEdBQUdBLFFBQU9DLElBQUc7QUFDakMsV0FBTztBQUFBLEVBQ1g7QUFDQSxXQUFTLHNCQUFzQixTQUFTLFlBQVk7QUFDaEQsVUFBTSxRQUFRLE9BQU8sTUFBTSxTQUFTO0FBQ3BDLFVBQU1ELFNBQVEsYUFBYTtBQUMzQixVQUFNQyxPQUFNLFFBQVE7QUFDcEIsVUFBTSxLQUFLLENBQUM7QUFDWixZQUFRLEtBQUssT0FBTyxHQUFHRCxRQUFPQyxJQUFHO0FBQ2pDLFVBQU1BLE9BQU1ELE1BQUssSUFBSTtBQUNyQixXQUFPO0FBQUEsRUFDWDtBQUNBLFdBQVMsZ0JBQWdCLEtBQUs7QUFDMUIsVUFBTSxJQUFJLElBQUksS0FBSyxJQUFJO0FBQ3ZCLFFBQUksVUFBVSxhQUFhLENBQUM7QUFDNUIsUUFBSSxFQUFFLENBQUMsSUFBSSxLQUFNO0FBQ2IsZ0JBQVUsSUFBSSxTQUFTLEVBQUU7QUFBQSxJQUM3QjtBQUNBLFFBQUksVUFBVSxhQUFhLE9BQU87QUFDbEMsUUFBSSxRQUFRLENBQUMsSUFBSSxLQUFNO0FBQ25CLGdCQUFVLElBQUksU0FBUyxFQUFFO0FBQUEsSUFDN0I7QUFDQSxXQUFPLEVBQUUsU0FBUyxRQUFRO0FBQUEsRUFDOUI7QUFDQSxXQUFTLFFBQVEsS0FBSyxTQUFTO0FBQzNCLFVBQU0sVUFBVSxnQkFBZ0IsR0FBRztBQUNuQyxRQUFJLGFBQWEsS0FBSyxLQUFLLFFBQVEsU0FBUyxTQUFTO0FBQ3JELFFBQUk7QUFDSixRQUFJO0FBQ0osUUFBSSxlQUFlLEdBQUc7QUFDbEIsbUJBQWE7QUFDYiw4QkFBd0I7QUFBQSxJQUM1QixPQUNLO0FBQ0QsOEJBQXlCLFFBQVEsU0FBUyxjQUFjO0FBQUEsSUFDNUQ7QUFDQSxVQUFNLGlCQUFpQixhQUFhO0FBQ3BDLFFBQUksdUJBQXVCO0FBQ3ZCLGtCQUFZLElBQUksZ0JBQWdCLFNBQVMsY0FBYyxHQUFHLFFBQVEsT0FBTztBQUFBLElBQzdFLE9BQ0s7QUFDRCxrQkFBWSxJQUFJLHNCQUFzQixTQUFTLGNBQWMsR0FBRyxRQUFRLE9BQU87QUFBQSxJQUNuRjtBQUNBLFFBQUksSUFBSTtBQUNSLFFBQUk7QUFDSixhQUFTLFFBQVEsR0FBRyxRQUFRLGdCQUFnQixTQUFTO0FBQ2pELFVBQUksSUFBSSxHQUFHLGdCQUFnQixTQUFTLEtBQUssQ0FBQztBQUMxQyxVQUFJLElBQUksS0FBSyxDQUFDO0FBQUEsSUFDbEI7QUFDQSxRQUFJLElBQUksV0FBVyxDQUFDO0FBQ3BCLFdBQU8sSUFBSSxLQUFLLENBQUM7QUFBQSxFQUNyQjtBQTBVQSxXQUFTLGdCQUFnQixXQUFXO0FBQ2hDLFlBQVEsVUFBVSxLQUFLLFlBQVksR0FBRztBQUFBLE1BQ2xDLEtBQUssWUFBWTtBQUNiLGNBQU0sU0FBUyxTQUFTLEtBQUssVUFBVSxLQUFLLElBQUksRUFBRSxDQUFDO0FBQ25ELGVBQU8sV0FBVyxXQUFXLE1BQU0sSUFBSSxNQUFNLEtBQUssRUFBRTtBQUFBLE1BQ3hEO0FBQUEsTUFDQSxLQUFLO0FBQ0QsZUFBTyxLQUFLLFNBQVMsS0FBSyxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztBQUFBLE1BQ3JELEtBQUs7QUFDRCxlQUFPLEtBQUssU0FBUyxLQUFLLFVBQVUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQUEsTUFDckQsS0FBSztBQUNELGVBQU87QUFBQSxNQUNYO0FBQ0ksY0FBTSxJQUFTLGVBQWUsOEJBQThCO0FBQUEsSUFDcEU7QUFBQSxFQUNKO0FBb29CQSxXQUFTLHFCQUFxQixZQUFZO0FBQ3RDLFVBQU0sTUFBTSxVQUFVLFVBQVU7QUFDaEMsUUFBSSxDQUFDLEtBQUs7QUFDTixZQUFNLElBQVMsZUFBZSx5Q0FBeUMsVUFBVSxVQUFVO0FBQUEsSUFDL0Y7QUFDQSxXQUFPO0FBQUEsRUFDWDtBQThaQSxXQUFTLG1CQUFtQixZQUFZO0FBQ3BDLFVBQU0sTUFBTSxPQUFPLFdBQVcsWUFBWSxDQUFDO0FBQzNDLFFBQUksQ0FBQyxLQUFLO0FBQ04sWUFBTSxJQUFTLGVBQWUseUNBQXlDLFVBQVUsVUFBVTtBQUFBLElBQy9GO0FBQ0EsV0FBTztBQUFBLEVBQ1g7QUE1dkRBLE1BT0EsUUFDQSxlQUNBRSxVQUdBQyxtQkFHTSx3QkFLQUMsWUF5QkEsY0FRQSxlQUdBLGNBMEJBLFdBbUtBLFlBZUFDLGlCQTZCQSxNQUNBLElBQ0EsV0FtRkFDLGtCQStCQUMsaUJBNkJBQyxpQkE2QkFDLGdCQTZCQUMsaUJBNkJBLGNBa0JBLFdBd0ZBLGdCQXNDQSxvQkF1REFDLGdCQTZCQUMsZUE2QkEsV0FnTkFDLGlCQXlDQUMsaUJBeUNBLFdBOENBQyxrQkEySUEsZUF1RUEsV0E4Q0FDLGVBaUNBQyxjQWlDQSxjQVdBLGdCQVdBLGdCQVdBLGdCQVdBLGlCQVdBLGlCQVdBLGlCQVdBLFVBc0xBQyxnQkEwQ0FDLGVBbUNBLFFBa0JBQyxlQWdDQUMsY0FvQ0EsVUEwSUFDLGdCQTBCQUMsaUJBd0JBLGdCQUdBQyxpQkFrQ0EsZUFZQUMsZUFrRUEsZUFHQUMsZUFxQ0EsYUFRQUMsbUJBTUFDLG1CQU1BQyxlQWtEQS9CO0FBL3RFTjtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0EsZUFBd0I7QUFDeEIsc0JBQTRCO0FBQzVCLE1BQUFJLFdBQXlCO0FBQ3pCO0FBQ0EsTUFBQTRCO0FBQ0EsTUFBQTNCLG9CQUErQztBQUMvQztBQUVBLE1BQU0seUJBQXlCO0FBQUEsUUFDM0IsVUFBVSxDQUFDLFVBQVUsT0FBTyxLQUFLLDBCQUFRLGNBQWMsS0FBSyxDQUFDO0FBQUEsUUFDN0QsUUFBUSxDQUFDLFVBQVUsMEJBQVEsWUFBWSxLQUFLO0FBQUEsTUFDaEQ7QUFFQSxNQUFNQyxhQUFOLGNBQTZCLFVBQVU7QUFBQSxRQUNuQyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTyxPQUFPLE1BQU0sQ0FBQztBQUMxQixlQUFLLFlBQVksRUFBRSxNQUFNLEdBQUc7QUFDNUIsZUFBSyxjQUFjO0FBQ25CLGVBQUssT0FBTztBQUNaLGVBQUssU0FBUyxDQUFDO0FBQ2YsZUFBSyxNQUFNO0FBQ1gsZUFBSyxNQUFNO0FBQUEsUUFDZjtBQUFBLE1BQ0o7QUFDQSxpQkFBVztBQUFBLFFBQ1AsU0FBUyxFQUFFLE1BQU0sT0FBTyxNQUFNLGNBQWMsU0FBUyxVQUFVLEtBQUssQ0FBQztBQUFBLE1BQ3pFLEdBQUdBLFdBQVUsV0FBVyxlQUFlLE1BQU07QUFDN0MsaUJBQVc7QUFBQSxRQUNQLFNBQVMsRUFBRSxNQUFNLFdBQVcsTUFBTSxjQUFjLFFBQVEsVUFBVSxNQUFNLFVBQVUsS0FBSyxDQUFDO0FBQUEsTUFDNUYsR0FBR0EsV0FBVSxXQUFXLFVBQVUsTUFBTTtBQUN4QyxpQkFBVztBQUFBLFFBQ1AsU0FBUyxFQUFFLE1BQU0sY0FBYyxPQUFPLENBQUM7QUFBQSxNQUMzQyxHQUFHQSxXQUFVLFdBQVcsT0FBTyxNQUFNO0FBQ3JDLGlCQUFXO0FBQUEsUUFDUCxTQUFTLEVBQUUsTUFBTSxjQUFjLFFBQVEsVUFBVSxLQUFLLENBQUM7QUFBQSxNQUMzRCxHQUFHQSxXQUFVLFdBQVcsT0FBTyxNQUFNO0FBRXJDLE1BQU0sZUFBTixjQUEyQkEsV0FBVTtBQUFBLFFBQ2pDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxNQUFNO0FBQ1gsZUFBSyxPQUFPO0FBQUEsUUFDaEI7QUFBQSxNQUNKO0FBRUEsTUFBTSxnQkFBTixjQUE0QkEsV0FBVTtBQUFBLE1BQ3RDO0FBRUEsTUFBTSxlQUFOLGNBQTJCLGFBQWE7QUFBQSxRQUNwQyxJQUFJLE1BQU07QUFDTixrQkFBUSxLQUFLLFVBQVUsS0FBSyxZQUFZLEdBQUc7QUFBQSxZQUN2QyxLQUFLO0FBQ0QscUJBQU8sSUFBSSxLQUFLLFVBQVUsTUFBTTtBQUFBLFlBQ3BDLEtBQUs7QUFDRCxxQkFBTyxJQUFJLEtBQUssVUFBVSxNQUFNO0FBQUEsWUFDcEMsS0FBSztBQUNELHFCQUFPLElBQUksS0FBSyxVQUFVLE1BQU07QUFBQSxZQUNwQyxLQUFLO0FBQ0QscUJBQU8sSUFBSSxLQUFLLFVBQVUsTUFBTTtBQUFBLFlBQ3BDLEtBQUs7QUFDRCxxQkFBTyxJQUFJLEtBQUssVUFBVSxNQUFNO0FBQUEsWUFDcEMsS0FBSztBQUNELHFCQUFPLElBQUksS0FBSyxVQUFVLE1BQU07QUFBQSxZQUNwQztBQUNJLG9CQUFNLElBQVMsZUFBZSw0QkFBNEI7QUFBQSxVQUNsRTtBQUFBLFFBQ0o7QUFBQSxRQUNBLElBQUksSUFBSSxPQUFPO0FBQUEsUUFDZjtBQUFBLE1BQ0o7QUFDQSxpQkFBVztBQUFBLFFBQ1AsU0FBUyxFQUFFLE1BQU0sS0FBSyxXQUFXLHVCQUF1QixDQUFDO0FBQUEsTUFDN0QsR0FBRyxhQUFhLFdBQVcsUUFBUSxNQUFNO0FBRXpDLE1BQU0sWUFBTixNQUFnQjtBQUFBLFFBQ1osYUFBYSxZQUFZLFdBQVcsYUFBYSxXQUFXO0FBQ3hELGdCQUFNLE1BQU0sSUFBSSxhQUFhO0FBQzdCLGNBQUksWUFBWTtBQUNoQixjQUFJLGNBQWM7QUFDbEIsY0FBSSxTQUFTO0FBQ2IsY0FBSSxPQUFPLGNBQUEyQixRQUFnQixZQUFZLFVBQVUsVUFBVSxDQUFDO0FBQzVELGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsYUFBYSxVQUFVQyxTQUFRLEtBQUs7QUFDaEMsY0FBSSxFQUFFLGVBQWUsZUFBZTtBQUNoQyxrQkFBTSxJQUFJLE1BQU0sMEJBQTBCO0FBQUEsVUFDOUM7QUFDQSxrQkFBUUEsUUFBTyxZQUFZLEdBQUc7QUFBQSxZQUMxQixLQUFLO0FBQ0QscUJBQU8sZUFBZSxPQUFPLEdBQUc7QUFBQSxZQUNwQyxLQUFLO0FBQ0QscUJBQU8sSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFO0FBQUEsWUFDcEM7QUFDSSxvQkFBTSxJQUFTLGVBQWUsZ0NBQWdDO0FBQUEsVUFDdEU7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhLFVBQVVBLFNBQVEsU0FBUyxXQUFXLGFBQWEsV0FBVztBQUN2RSxjQUFJO0FBQ0osa0JBQVFBLFFBQU8sWUFBWSxHQUFHO0FBQUEsWUFDMUIsS0FBSztBQUNELG9CQUFNLFdBQVcsU0FBUyxTQUFTLEVBQUUsY0FBYyxhQUFhLENBQUM7QUFDakU7QUFBQSxZQUNKLEtBQUs7QUFDRCxvQkFBTSxJQUFJLGFBQWE7QUFDdkIsa0JBQUksT0FBTyxPQUFPLEtBQUssT0FBTztBQUM5QjtBQUFBLFlBQ0o7QUFDSSxvQkFBTSxJQUFTLGVBQWUsZ0NBQWdDO0FBQUEsVUFDdEU7QUFDQSxjQUFJLFlBQVk7QUFDaEIsY0FBSSxVQUFVLFNBQVMsSUFBSSxLQUFLLFVBQVU7QUFDMUMsY0FBSSxjQUFjO0FBQ2xCLGNBQUksU0FBUztBQUNiLGtCQUFRLElBQUksVUFBVSxRQUFRO0FBQUEsWUFDMUIsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUNEO0FBQUEsWUFDSjtBQUNJLG9CQUFNLElBQVMsZUFBZSw4QkFBOEI7QUFBQSxVQUNwRTtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsYUFBYSxRQUFRLFdBQVcsS0FBSyxNQUFNO0FBQ3ZDLGtCQUFRLFVBQVUsS0FBSyxZQUFZLEdBQUc7QUFBQSxZQUNsQyxLQUFLO0FBQ0QscUJBQU8sS0FBSyxjQUFjLFdBQVcsS0FBSyxPQUFPLEtBQUssSUFBSSxDQUFDO0FBQUEsWUFDL0QsS0FBSztBQUNELHFCQUFPLEtBQUssY0FBYyxXQUFXLEtBQUssT0FBTyxLQUFLLElBQUksQ0FBQztBQUFBLFlBQy9ELEtBQUs7QUFDRCxxQkFBTyxLQUFLLGNBQWMsV0FBVyxLQUFLLE9BQU8sS0FBSyxJQUFJLENBQUM7QUFBQSxZQUMvRCxLQUFLO0FBQ0QscUJBQU8sS0FBSyxhQUFhLFdBQVcsS0FBSyxPQUFPLEtBQUssSUFBSSxDQUFDO0FBQUEsWUFDOUQsS0FBSztBQUNELHFCQUFPLEtBQUssY0FBYyxXQUFXLEtBQUssT0FBTyxLQUFLLElBQUksQ0FBQztBQUFBLFlBQy9EO0FBQ0ksb0JBQU0sSUFBUyxlQUFlLDhCQUE4QjtBQUFBLFVBQ3BFO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYSxRQUFRLFdBQVcsS0FBSyxNQUFNO0FBQ3ZDLGNBQUksRUFBRSxlQUFlLGVBQWU7QUFDaEMsa0JBQU0sSUFBSSxNQUFNLDBCQUEwQjtBQUFBLFVBQzlDO0FBQ0Esa0JBQVEsVUFBVSxLQUFLLFlBQVksR0FBRztBQUFBLFlBQ2xDLEtBQUs7QUFDRCxxQkFBTyxLQUFLLGNBQWMsV0FBVyxLQUFLLE9BQU8sS0FBSyxJQUFJLENBQUM7QUFBQSxZQUMvRCxLQUFLO0FBQ0QscUJBQU8sS0FBSyxjQUFjLFdBQVcsS0FBSyxPQUFPLEtBQUssSUFBSSxDQUFDO0FBQUEsWUFDL0QsS0FBSztBQUNELHFCQUFPLEtBQUssY0FBYyxXQUFXLEtBQUssT0FBTyxLQUFLLElBQUksQ0FBQztBQUFBLFlBQy9ELEtBQUs7QUFDRCxxQkFBTyxLQUFLLGFBQWEsV0FBVyxLQUFLLE9BQU8sS0FBSyxJQUFJLENBQUM7QUFBQSxZQUM5RCxLQUFLO0FBQ0QscUJBQU8sS0FBSyxjQUFjLFdBQVcsS0FBSyxPQUFPLEtBQUssSUFBSSxDQUFDO0FBQUEsWUFDL0Q7QUFDSSxvQkFBTSxJQUFTLGVBQWUsOEJBQThCO0FBQUEsVUFDcEU7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhLGNBQWMsV0FBVyxLQUFLLE1BQU07QUFDN0MsZ0JBQU0sU0FBUyxjQUFBRCxRQUFnQixlQUFlLE9BQU8sSUFBSSxVQUFVLE1BQU0sUUFBUSxJQUFJLE1BQU0sSUFBSSxXQUFXLFVBQVUsRUFBRSxDQUFDO0FBQ3ZILGNBQUksTUFBTSxPQUFPLE9BQU8sSUFBSTtBQUM1QixnQkFBTSxPQUFPLE9BQU8sQ0FBQyxLQUFLLE9BQU8sTUFBTSxDQUFDLENBQUM7QUFDekMsZ0JBQU0sTUFBTSxJQUFJLFdBQVcsR0FBRyxFQUFFO0FBQ2hDLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsYUFBYSxjQUFjLFdBQVcsS0FBSyxNQUFNO0FBQzdDLGdCQUFNLFdBQVcsY0FBQUEsUUFBZ0IsaUJBQWlCLE9BQU8sSUFBSSxVQUFVLE1BQU0sUUFBUSxJQUFJLE1BQU0sSUFBSSxXQUFXLFVBQVUsRUFBRSxDQUFDO0FBQzNILGNBQUksTUFBTSxTQUFTLE9BQU8sSUFBSTtBQUM5QixnQkFBTSxPQUFPLE9BQU8sQ0FBQyxLQUFLLFNBQVMsTUFBTSxDQUFDLENBQUM7QUFDM0MsaUJBQU8sSUFBSSxXQUFXLEdBQUcsRUFBRTtBQUFBLFFBQy9CO0FBQUEsUUFDQSxhQUFhLGNBQWMsV0FBVyxLQUFLLE1BQU07QUFDN0MsZ0JBQU0sU0FBUyxjQUFBQSxRQUFnQixlQUFlLE9BQU8sSUFBSSxVQUFVLE1BQU0sUUFBUSxJQUFJLE1BQU0sT0FBTyxLQUFLLFVBQVUsT0FBTyxDQUFDO0FBQ3pILGNBQUksTUFBTSxPQUFPLE9BQU8sSUFBSTtBQUM1QixnQkFBTSxPQUFPLE9BQU8sQ0FBQyxLQUFLLE9BQU8sTUFBTSxDQUFDLENBQUM7QUFDekMsZ0JBQU0sTUFBTSxJQUFJLFdBQVcsR0FBRyxFQUFFO0FBQ2hDLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsYUFBYSxjQUFjLFdBQVcsS0FBSyxNQUFNO0FBQzdDLGdCQUFNLFdBQVcsY0FBQUEsUUFBZ0IsaUJBQWlCLE9BQU8sSUFBSSxVQUFVLE1BQU0sUUFBUSxJQUFJLE1BQU0sSUFBSSxXQUFXLFVBQVUsT0FBTyxDQUFDO0FBQ2hJLGNBQUksTUFBTSxTQUFTLE9BQU8sSUFBSTtBQUM5QixnQkFBTSxPQUFPLE9BQU8sQ0FBQyxLQUFLLFNBQVMsTUFBTSxDQUFDLENBQUM7QUFDM0MsaUJBQU8sSUFBSSxXQUFXLEdBQUcsRUFBRTtBQUFBLFFBQy9CO0FBQUEsUUFDQSxhQUFhLGNBQWMsV0FBVyxLQUFLLE1BQU07QUFDN0MsZ0JBQU0sU0FBUyxjQUFBQSxRQUFnQixlQUFlLE9BQU8sSUFBSSxVQUFVLE1BQU0sUUFBUSxJQUFJLE1BQU0sT0FBTyxLQUFLLFVBQVUsRUFBRSxHQUFHO0FBQUEsWUFDbEgsZ0JBQWdCLFVBQVUsYUFBYSxRQUFRO0FBQUEsVUFDbkQsQ0FBQztBQUNELGNBQUksVUFBVSxnQkFBZ0I7QUFDMUIsbUJBQU8sT0FBTyxPQUFPLEtBQUssVUFBVSxjQUFjLENBQUM7QUFBQSxVQUN2RDtBQUNBLGNBQUksTUFBTSxPQUFPLE9BQU8sSUFBSTtBQUM1QixnQkFBTSxPQUFPLE9BQU8sQ0FBQyxLQUFLLE9BQU8sTUFBTSxHQUFHLE9BQU8sV0FBVyxDQUFDLENBQUM7QUFDOUQsZ0JBQU0sTUFBTSxJQUFJLFdBQVcsR0FBRyxFQUFFO0FBQ2hDLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsYUFBYSxjQUFjLFdBQVcsS0FBSyxNQUFNO0FBQzdDLGdCQUFNLFdBQVcsY0FBQUEsUUFBZ0IsaUJBQWlCLE9BQU8sSUFBSSxVQUFVLE1BQU0sUUFBUSxJQUFJLE1BQU0sSUFBSSxXQUFXLFVBQVUsRUFBRSxDQUFDO0FBQzNILGdCQUFNLGFBQWEsVUFBVSxhQUFhLFFBQVE7QUFDbEQsZ0JBQU0sTUFBTSxLQUFLLE1BQU0sR0FBRyxLQUFLLFNBQVMsU0FBUztBQUNqRCxnQkFBTSxNQUFNLEtBQUssTUFBTSxLQUFLLFNBQVMsU0FBUztBQUM5QyxjQUFJLFVBQVUsZ0JBQWdCO0FBQzFCLHFCQUFTLE9BQU8sT0FBTyxLQUFLLFVBQVUsY0FBYyxDQUFDO0FBQUEsVUFDekQ7QUFDQSxtQkFBUyxXQUFXLEdBQUc7QUFDdkIsY0FBSSxNQUFNLFNBQVMsT0FBTyxHQUFHO0FBQzdCLGdCQUFNLE9BQU8sT0FBTyxDQUFDLEtBQUssU0FBUyxNQUFNLENBQUMsQ0FBQztBQUMzQyxpQkFBTyxJQUFJLFdBQVcsR0FBRyxFQUFFO0FBQUEsUUFDL0I7QUFBQSxRQUNBLGFBQWEsYUFBYSxXQUFXLEtBQUssTUFBTTtBQUM1QyxnQkFBTSxTQUFTLGNBQUFBLFFBQWdCLGVBQWUsU0FBUyxJQUFJLFVBQVUsTUFBTSxTQUFTLElBQUksTUFBTSxLQUFLLFNBQVM7QUFDNUcsY0FBSSxNQUFNLE9BQU8sT0FBTyxJQUFJO0FBQzVCLGdCQUFNLE9BQU8sT0FBTyxDQUFDLEtBQUssT0FBTyxNQUFNLENBQUMsQ0FBQztBQUN6QyxpQkFBTyxJQUFJLFdBQVcsR0FBRyxFQUFFO0FBQUEsUUFDL0I7QUFBQSxRQUNBLGFBQWEsYUFBYSxXQUFXLEtBQUssTUFBTTtBQUM1QyxnQkFBTSxXQUFXLGNBQUFBLFFBQWdCLGlCQUFpQixTQUFTLElBQUksVUFBVSxNQUFNLFNBQVMsSUFBSSxNQUFNLEtBQUssU0FBUztBQUNoSCxjQUFJLE1BQU0sU0FBUyxPQUFPLElBQUk7QUFDOUIsZ0JBQU0sT0FBTyxPQUFPLENBQUMsS0FBSyxTQUFTLE1BQU0sQ0FBQyxDQUFDO0FBQzNDLGlCQUFPLElBQUksV0FBVyxHQUFHLEVBQUU7QUFBQSxRQUMvQjtBQUFBLFFBQ0EsYUFBYSxjQUFjLFdBQVcsS0FBSyxNQUFNO0FBQzdDLGdCQUFNLFNBQVMsY0FBQUEsUUFBZ0IsZUFBZSxPQUFPLElBQUksVUFBVSxNQUFNLFFBQVEsSUFBSSxNQUFNLElBQUksV0FBVyxDQUFDLENBQUM7QUFDNUcsY0FBSSxNQUFNLE9BQU8sT0FBTyxJQUFJO0FBQzVCLGdCQUFNLE9BQU8sT0FBTyxDQUFDLEtBQUssT0FBTyxNQUFNLENBQUMsQ0FBQztBQUN6QyxnQkFBTSxNQUFNLElBQUksV0FBVyxHQUFHLEVBQUU7QUFDaEMsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxhQUFhLGNBQWMsV0FBVyxLQUFLLE1BQU07QUFDN0MsZ0JBQU0sV0FBVyxjQUFBQSxRQUFnQixpQkFBaUIsT0FBTyxJQUFJLFVBQVUsTUFBTSxRQUFRLElBQUksTUFBTSxJQUFJLFdBQVcsQ0FBQyxDQUFDO0FBQ2hILGNBQUksTUFBTSxTQUFTLE9BQU8sSUFBSTtBQUM5QixnQkFBTSxPQUFPLE9BQU8sQ0FBQyxLQUFLLFNBQVMsTUFBTSxDQUFDLENBQUM7QUFDM0MsaUJBQU8sSUFBSSxXQUFXLEdBQUcsRUFBRTtBQUFBLFFBQy9CO0FBQUEsTUFDSjtBQUNBLGdCQUFVLFlBQVksT0FBTyxLQUFLLG9CQUFvQixLQUFLO0FBRTNELE1BQU0sYUFBYSxvQkFBSSxRQUFRO0FBZS9CLE1BQU0xQixrQkFBTixjQUFrQyxlQUFlO0FBQUEsUUFDN0MsTUFBTSxjQUFjLFdBQVcsYUFBYSxXQUFXO0FBQ25ELGdCQUFNLE1BQU0sTUFBTSxVQUFVLFlBQVk7QUFBQSxZQUNwQyxNQUFNLEtBQUs7QUFBQSxZQUNYLFFBQVEsVUFBVTtBQUFBLFVBQ3RCLEdBQUcsYUFBYSxTQUFTO0FBQ3pCLGlCQUFPLGFBQWEsR0FBRztBQUFBLFFBQzNCO0FBQUEsUUFDQSxNQUFNLFVBQVUsV0FBVyxLQUFLLE1BQU07QUFDbEMsaUJBQU8sVUFBVSxRQUFRLFdBQVcsYUFBYSxHQUFHLEdBQUcsSUFBSSxXQUFXLElBQUksQ0FBQztBQUFBLFFBQy9FO0FBQUEsUUFDQSxNQUFNLFVBQVUsV0FBVyxLQUFLLE1BQU07QUFDbEMsaUJBQU8sVUFBVSxRQUFRLFdBQVcsYUFBYSxHQUFHLEdBQUcsSUFBSSxXQUFXLElBQUksQ0FBQztBQUFBLFFBQy9FO0FBQUEsUUFDQSxNQUFNLFlBQVkyQixTQUFRLEtBQUs7QUFDM0IsaUJBQU8sVUFBVSxVQUFVQSxTQUFRLGFBQWEsR0FBRyxDQUFDO0FBQUEsUUFDeEQ7QUFBQSxRQUNBLE1BQU0sWUFBWUEsU0FBUSxTQUFTLFdBQVcsYUFBYSxXQUFXO0FBQ2xFLGdCQUFNLE1BQU0sTUFBTSxVQUFVLFVBQVVBLFNBQVEsU0FBUyxFQUFFLE1BQU0sVUFBVSxLQUFLLEdBQUcsYUFBYSxTQUFTO0FBQ3ZHLGlCQUFPLGFBQWEsR0FBRztBQUFBLFFBQzNCO0FBQUEsUUFDQSxlQUFlLEtBQUssVUFBVTtBQUMxQixnQkFBTSxlQUFlLEtBQUssUUFBUTtBQUNsQyxjQUFJLEVBQUUsYUFBYSxHQUFHLGFBQWEsZUFBZTtBQUM5QyxrQkFBTSxJQUFJLFVBQVUsNEJBQTRCO0FBQUEsVUFDcEQ7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUVBLE1BQU0sT0FBTyxPQUFPLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDekUsTUFBTSxLQUFLLE9BQU8sS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN6RSxNQUFNLFlBQVk7QUFtRmxCLE1BQU0xQixtQkFBTixjQUFtQyxnQkFBZ0I7QUFBQSxRQUMvQyxNQUFNLGNBQWMsV0FBVyxhQUFhLFdBQVc7QUFDbkQsZ0JBQU0sTUFBTSxNQUFNLFVBQVUsWUFBWTtBQUFBLFlBQ3BDLE1BQU0sS0FBSztBQUFBLFlBQ1gsUUFBUSxVQUFVO0FBQUEsVUFDdEIsR0FBRyxhQUFhLFNBQVM7QUFDekIsaUJBQU8sYUFBYSxHQUFHO0FBQUEsUUFDM0I7QUFBQSxRQUNBLE1BQU0sT0FBTyxXQUFXLEtBQUssTUFBTTtBQUMvQixnQkFBTSxTQUFTLFFBQVEsYUFBYSxHQUFHLEVBQUUsTUFBTSxPQUFPLEtBQUssSUFBSSxDQUFDO0FBQ2hFLGlCQUFPLElBQUksV0FBVyxNQUFNLEVBQUU7QUFBQSxRQUNsQztBQUFBLFFBQ0EsTUFBTSxTQUFTLFdBQVcsS0FBSyxXQUFXLE1BQU07QUFDNUMsZ0JBQU0sYUFBYSxNQUFNLEtBQUssS0FBSyxXQUFXLEtBQUssSUFBSTtBQUN2RCxpQkFBTyxPQUFPLEtBQUssU0FBUyxFQUFFLFFBQVEsT0FBTyxLQUFLLFVBQVUsQ0FBQyxNQUFNO0FBQUEsUUFDdkU7QUFBQSxRQUNBLE1BQU0sWUFBWTBCLFNBQVEsS0FBSztBQUMzQixpQkFBTyxVQUFVLFVBQVVBLFNBQVEsYUFBYSxHQUFHLENBQUM7QUFBQSxRQUN4RDtBQUFBLFFBQ0EsTUFBTSxZQUFZQSxTQUFRLFNBQVMsV0FBVyxhQUFhLFdBQVc7QUFDbEUsZ0JBQU0sTUFBTSxNQUFNLFVBQVUsVUFBVUEsU0FBUSxTQUFTLEVBQUUsTUFBTSxVQUFVLEtBQUssR0FBRyxhQUFhLFNBQVM7QUFDdkcsaUJBQU8sYUFBYSxHQUFHO0FBQUEsUUFDM0I7QUFBQSxRQUNBLGVBQWUsS0FBSyxVQUFVO0FBQzFCLGdCQUFNLGVBQWUsS0FBSyxRQUFRO0FBQ2xDLGNBQUksRUFBRSxhQUFhLEdBQUcsYUFBYSxlQUFlO0FBQzlDLGtCQUFNLElBQUksVUFBVSw0QkFBNEI7QUFBQSxVQUNwRDtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsTUFBTXpCLGtCQUFOLGNBQWtDLGVBQWU7QUFBQSxRQUM3QyxNQUFNLGNBQWMsV0FBVyxhQUFhLFdBQVc7QUFDbkQsZ0JBQU0sTUFBTSxNQUFNLFVBQVUsWUFBWTtBQUFBLFlBQ3BDLE1BQU0sS0FBSztBQUFBLFlBQ1gsUUFBUSxVQUFVO0FBQUEsVUFDdEIsR0FBRyxhQUFhLFNBQVM7QUFDekIsaUJBQU8sYUFBYSxHQUFHO0FBQUEsUUFDM0I7QUFBQSxRQUNBLE1BQU0sVUFBVSxXQUFXLEtBQUssTUFBTTtBQUNsQyxpQkFBTyxVQUFVLFFBQVEsV0FBVyxhQUFhLEdBQUcsR0FBRyxJQUFJLFdBQVcsSUFBSSxDQUFDO0FBQUEsUUFDL0U7QUFBQSxRQUNBLE1BQU0sVUFBVSxXQUFXLEtBQUssTUFBTTtBQUNsQyxpQkFBTyxVQUFVLFFBQVEsV0FBVyxhQUFhLEdBQUcsR0FBRyxJQUFJLFdBQVcsSUFBSSxDQUFDO0FBQUEsUUFDL0U7QUFBQSxRQUNBLE1BQU0sWUFBWXlCLFNBQVEsS0FBSztBQUMzQixpQkFBTyxVQUFVLFVBQVVBLFNBQVEsYUFBYSxHQUFHLENBQUM7QUFBQSxRQUN4RDtBQUFBLFFBQ0EsTUFBTSxZQUFZQSxTQUFRLFNBQVMsV0FBVyxhQUFhLFdBQVc7QUFDbEUsZ0JBQU0sTUFBTSxNQUFNLFVBQVUsVUFBVUEsU0FBUSxTQUFTLEVBQUUsTUFBTSxVQUFVLEtBQUssR0FBRyxhQUFhLFNBQVM7QUFDdkcsaUJBQU8sYUFBYSxHQUFHO0FBQUEsUUFDM0I7QUFBQSxRQUNBLGVBQWUsS0FBSyxVQUFVO0FBQzFCLGdCQUFNLGVBQWUsS0FBSyxRQUFRO0FBQ2xDLGNBQUksRUFBRSxhQUFhLEdBQUcsYUFBYSxlQUFlO0FBQzlDLGtCQUFNLElBQUksVUFBVSw0QkFBNEI7QUFBQSxVQUNwRDtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsTUFBTXhCLGtCQUFOLGNBQWtDLGVBQWU7QUFBQSxRQUM3QyxNQUFNLGNBQWMsV0FBVyxhQUFhLFdBQVc7QUFDbkQsZ0JBQU0sTUFBTSxNQUFNLFVBQVUsWUFBWTtBQUFBLFlBQ3BDLE1BQU0sS0FBSztBQUFBLFlBQ1gsUUFBUSxVQUFVO0FBQUEsVUFDdEIsR0FBRyxhQUFhLFNBQVM7QUFDekIsaUJBQU8sYUFBYSxHQUFHO0FBQUEsUUFDM0I7QUFBQSxRQUNBLE1BQU0sVUFBVSxXQUFXLEtBQUssTUFBTTtBQUNsQyxpQkFBTyxVQUFVLFFBQVEsV0FBVyxhQUFhLEdBQUcsR0FBRyxJQUFJLFdBQVcsSUFBSSxDQUFDO0FBQUEsUUFDL0U7QUFBQSxRQUNBLE1BQU0sVUFBVSxXQUFXLEtBQUssTUFBTTtBQUNsQyxpQkFBTyxVQUFVLFFBQVEsV0FBVyxhQUFhLEdBQUcsR0FBRyxJQUFJLFdBQVcsSUFBSSxDQUFDO0FBQUEsUUFDL0U7QUFBQSxRQUNBLE1BQU0sWUFBWXdCLFNBQVEsS0FBSztBQUMzQixpQkFBTyxVQUFVLFVBQVVBLFNBQVEsYUFBYSxHQUFHLENBQUM7QUFBQSxRQUN4RDtBQUFBLFFBQ0EsTUFBTSxZQUFZQSxTQUFRLFNBQVMsV0FBVyxhQUFhLFdBQVc7QUFDbEUsZ0JBQU0sTUFBTSxNQUFNLFVBQVUsVUFBVUEsU0FBUSxTQUFTLEVBQUUsTUFBTSxVQUFVLEtBQUssR0FBRyxhQUFhLFNBQVM7QUFDdkcsaUJBQU8sYUFBYSxHQUFHO0FBQUEsUUFDM0I7QUFBQSxRQUNBLGVBQWUsS0FBSyxVQUFVO0FBQzFCLGdCQUFNLGVBQWUsS0FBSyxRQUFRO0FBQ2xDLGNBQUksRUFBRSxhQUFhLEdBQUcsYUFBYSxlQUFlO0FBQzlDLGtCQUFNLElBQUksVUFBVSw0QkFBNEI7QUFBQSxVQUNwRDtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsTUFBTXZCLGlCQUFOLGNBQWlDLGNBQWM7QUFBQSxRQUMzQyxNQUFNLGNBQWMsV0FBVyxhQUFhLFdBQVc7QUFDbkQsZ0JBQU0sTUFBTSxNQUFNLFVBQVUsWUFBWTtBQUFBLFlBQ3BDLE1BQU0sS0FBSztBQUFBLFlBQ1gsUUFBUSxVQUFVO0FBQUEsVUFDdEIsR0FBRyxhQUFhLFNBQVM7QUFDekIsaUJBQU8sYUFBYSxHQUFHO0FBQUEsUUFDM0I7QUFBQSxRQUNBLE1BQU0sWUFBWXVCLFNBQVEsS0FBSztBQUMzQixpQkFBTyxVQUFVLFVBQVVBLFNBQVEsYUFBYSxHQUFHLENBQUM7QUFBQSxRQUN4RDtBQUFBLFFBQ0EsTUFBTSxZQUFZQSxTQUFRLFNBQVMsV0FBVyxhQUFhLFdBQVc7QUFDbEUsZ0JBQU0sTUFBTSxNQUFNLFVBQVUsVUFBVUEsU0FBUSxTQUFTLEVBQUUsTUFBTSxVQUFVLEtBQUssR0FBRyxhQUFhLFNBQVM7QUFDdkcsaUJBQU8sYUFBYSxHQUFHO0FBQUEsUUFDM0I7QUFBQSxRQUNBLE1BQU0sVUFBVSxXQUFXLEtBQUssTUFBTTtBQUNsQyxpQkFBTyxVQUFVLFFBQVEsV0FBVyxhQUFhLEdBQUcsR0FBRyxJQUFJLFdBQVcsSUFBSSxDQUFDO0FBQUEsUUFDL0U7QUFBQSxRQUNBLE1BQU0sVUFBVSxXQUFXLEtBQUssTUFBTTtBQUNsQyxpQkFBTyxVQUFVLFFBQVEsV0FBVyxhQUFhLEdBQUcsR0FBRyxJQUFJLFdBQVcsSUFBSSxDQUFDO0FBQUEsUUFDL0U7QUFBQSxRQUNBLGVBQWUsS0FBSyxVQUFVO0FBQzFCLGdCQUFNLGVBQWUsS0FBSyxRQUFRO0FBQ2xDLGNBQUksRUFBRSxhQUFhLEdBQUcsYUFBYSxlQUFlO0FBQzlDLGtCQUFNLElBQUksVUFBVSw0QkFBNEI7QUFBQSxVQUNwRDtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsTUFBTXRCLGtCQUFOLGNBQWtDLGVBQWU7QUFBQSxRQUM3QyxNQUFNLGNBQWMsV0FBVyxhQUFhLFdBQVc7QUFDbkQsZ0JBQU0sTUFBTSxNQUFNLFVBQVUsWUFBWTtBQUFBLFlBQ3BDLE1BQU0sS0FBSztBQUFBLFlBQ1gsUUFBUSxVQUFVO0FBQUEsVUFDdEIsR0FBRyxhQUFhLFNBQVM7QUFDekIsaUJBQU8sYUFBYSxHQUFHO0FBQUEsUUFDM0I7QUFBQSxRQUNBLE1BQU0sVUFBVSxXQUFXLEtBQUssTUFBTTtBQUNsQyxpQkFBTyxVQUFVLFFBQVEsV0FBVyxhQUFhLEdBQUcsR0FBRyxJQUFJLFdBQVcsSUFBSSxDQUFDO0FBQUEsUUFDL0U7QUFBQSxRQUNBLE1BQU0sVUFBVSxXQUFXLEtBQUssTUFBTTtBQUNsQyxpQkFBTyxVQUFVLFFBQVEsV0FBVyxhQUFhLEdBQUcsR0FBRyxJQUFJLFdBQVcsSUFBSSxDQUFDO0FBQUEsUUFDL0U7QUFBQSxRQUNBLE1BQU0sWUFBWXNCLFNBQVEsS0FBSztBQUMzQixpQkFBTyxVQUFVLFVBQVVBLFNBQVEsYUFBYSxHQUFHLENBQUM7QUFBQSxRQUN4RDtBQUFBLFFBQ0EsTUFBTSxZQUFZQSxTQUFRLFNBQVMsV0FBVyxhQUFhLFdBQVc7QUFDbEUsZ0JBQU0sTUFBTSxNQUFNLFVBQVUsVUFBVUEsU0FBUSxTQUFTLEVBQUUsTUFBTSxVQUFVLEtBQUssR0FBRyxhQUFhLFNBQVM7QUFDdkcsaUJBQU8sYUFBYSxHQUFHO0FBQUEsUUFDM0I7QUFBQSxRQUNBLGVBQWUsS0FBSyxVQUFVO0FBQzFCLGdCQUFNLGVBQWUsS0FBSyxRQUFRO0FBQ2xDLGNBQUksRUFBRSxhQUFhLEdBQUcsYUFBYSxlQUFlO0FBQzlDLGtCQUFNLElBQUksVUFBVSw0QkFBNEI7QUFBQSxVQUNwRDtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsTUFBTSxlQUFOLGNBQTJCLGFBQWE7QUFBQSxRQUNwQyxJQUFJLE1BQU07QUFDTixrQkFBUSxLQUFLLFVBQVUsS0FBSyxZQUFZLEdBQUc7QUFBQSxZQUN2QyxLQUFLO0FBQ0QscUJBQU87QUFBQSxZQUNYLEtBQUs7QUFDRCxxQkFBTztBQUFBLFlBQ1g7QUFDSSxvQkFBTSxJQUFTLGVBQWUsNEJBQTRCO0FBQUEsVUFDbEU7QUFBQSxRQUNKO0FBQUEsUUFDQSxJQUFJLElBQUksT0FBTztBQUFBLFFBQ2Y7QUFBQSxNQUNKO0FBQ0EsaUJBQVc7QUFBQSxRQUNQLFNBQVMsRUFBRSxNQUFNLEtBQUssV0FBVyx1QkFBdUIsQ0FBQztBQUFBLE1BQzdELEdBQUcsYUFBYSxXQUFXLFFBQVEsTUFBTTtBQUV6QyxNQUFNLFlBQU4sTUFBZ0I7QUFBQSxRQUNaLGFBQWEsWUFBWSxXQUFXLGFBQWEsV0FBVztBQUN4RCxnQkFBTSxNQUFNLElBQUksYUFBYTtBQUM3QixjQUFJLFlBQVk7QUFDaEIsY0FBSSxjQUFjO0FBQ2xCLGNBQUksU0FBUztBQUNiLGNBQUksT0FBTyxjQUFBRCxRQUFnQixZQUFZLFVBQVUsVUFBVSxDQUFDO0FBQzVELGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsYUFBYSxVQUFVQyxTQUFRLEtBQUs7QUFDaEMsa0JBQVFBLFFBQU8sWUFBWSxHQUFHO0FBQUEsWUFDMUIsS0FBSztBQUNELHFCQUFPLGVBQWUsT0FBTyxHQUFHO0FBQUEsWUFDcEMsS0FBSztBQUNELHFCQUFPLElBQUksV0FBVyxJQUFJLElBQUksRUFBRTtBQUFBLFlBQ3BDO0FBQ0ksb0JBQU0sSUFBUyxlQUFlLGdDQUFnQztBQUFBLFVBQ3RFO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYSxVQUFVQSxTQUFRLFNBQVMsV0FBVyxhQUFhLFdBQVc7QUFDdkUsY0FBSTtBQUNKLGtCQUFRQSxRQUFPLFlBQVksR0FBRztBQUFBLFlBQzFCLEtBQUs7QUFDRCxvQkFBTSxXQUFXLFNBQVMsU0FBUyxFQUFFLGNBQWMsYUFBYSxDQUFDO0FBQ2pFO0FBQUEsWUFDSixLQUFLO0FBQ0Qsb0JBQU0sSUFBSSxhQUFhO0FBQ3ZCLGtCQUFJLE9BQU8sT0FBTyxLQUFLLE9BQU87QUFDOUI7QUFBQSxZQUNKO0FBQ0ksb0JBQU0sSUFBUyxlQUFlLGdDQUFnQztBQUFBLFVBQ3RFO0FBQ0EsY0FBSSxZQUFZO0FBQ2hCLGNBQUksY0FBYztBQUNsQixjQUFJLFNBQVM7QUFDYixpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLGFBQWEsUUFBUSxXQUFXLEtBQUssTUFBTTtBQUN2QyxrQkFBUSxVQUFVLEtBQUssWUFBWSxHQUFHO0FBQUEsWUFDbEMsS0FBSztBQUNELHFCQUFPLEtBQUssY0FBYyxXQUFXLEtBQUssT0FBTyxLQUFLLElBQUksQ0FBQztBQUFBLFlBQy9ELEtBQUs7QUFDRCxxQkFBTyxLQUFLLGtCQUFrQixXQUFXLEtBQUssT0FBTyxLQUFLLElBQUksQ0FBQztBQUFBLFlBQ25FO0FBQ0ksb0JBQU0sSUFBUyxlQUFlLDhCQUE4QjtBQUFBLFVBQ3BFO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYSxRQUFRLFdBQVcsS0FBSyxNQUFNO0FBQ3ZDLGNBQUksRUFBRSxlQUFlLGVBQWU7QUFDaEMsa0JBQU0sSUFBSSxNQUFNLDBCQUEwQjtBQUFBLFVBQzlDO0FBQ0Esa0JBQVEsVUFBVSxLQUFLLFlBQVksR0FBRztBQUFBLFlBQ2xDLEtBQUs7QUFDRCxxQkFBTyxLQUFLLGNBQWMsV0FBVyxLQUFLLE9BQU8sS0FBSyxJQUFJLENBQUM7QUFBQSxZQUMvRCxLQUFLO0FBQ0QscUJBQU8sS0FBSyxrQkFBa0IsV0FBVyxLQUFLLE9BQU8sS0FBSyxJQUFJLENBQUM7QUFBQSxZQUNuRTtBQUNJLG9CQUFNLElBQVMsZUFBZSw4QkFBOEI7QUFBQSxVQUNwRTtBQUFBLFFBQ0o7QUFBQSxRQUNBLGFBQWEsY0FBYyxXQUFXLEtBQUssTUFBTTtBQUM3QyxnQkFBTSxTQUFTLGNBQUFELFFBQWdCLGVBQWUsV0FBVyxJQUFJLE1BQU0sSUFBSSxXQUFXLFVBQVUsRUFBRSxDQUFDO0FBQy9GLGNBQUksTUFBTSxPQUFPLE9BQU8sSUFBSTtBQUM1QixnQkFBTSxPQUFPLE9BQU8sQ0FBQyxLQUFLLE9BQU8sTUFBTSxDQUFDLENBQUM7QUFDekMsZ0JBQU0sTUFBTSxJQUFJLFdBQVcsR0FBRyxFQUFFO0FBQ2hDLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsYUFBYSxjQUFjLFdBQVcsS0FBSyxNQUFNO0FBQzdDLGdCQUFNLFdBQVcsY0FBQUEsUUFBZ0IsaUJBQWlCLFdBQVcsSUFBSSxNQUFNLElBQUksV0FBVyxVQUFVLEVBQUUsQ0FBQztBQUNuRyxjQUFJLE1BQU0sU0FBUyxPQUFPLElBQUk7QUFDOUIsZ0JBQU0sT0FBTyxPQUFPLENBQUMsS0FBSyxTQUFTLE1BQU0sQ0FBQyxDQUFDO0FBQzNDLGlCQUFPLElBQUksV0FBVyxHQUFHLEVBQUU7QUFBQSxRQUMvQjtBQUFBLFFBQ0EsYUFBYSxrQkFBa0IsV0FBVyxLQUFLLE1BQU07QUFDakQsZ0JBQU0sU0FBUyxjQUFBQSxRQUFnQixlQUFlLGdCQUFnQixJQUFJLE1BQU0sT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO0FBQ2pHLGNBQUksTUFBTSxPQUFPLE9BQU8sSUFBSTtBQUM1QixnQkFBTSxPQUFPLE9BQU8sQ0FBQyxLQUFLLE9BQU8sTUFBTSxDQUFDLENBQUM7QUFDekMsZ0JBQU0sTUFBTSxJQUFJLFdBQVcsR0FBRyxFQUFFO0FBQ2hDLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsYUFBYSxrQkFBa0IsV0FBVyxLQUFLLE1BQU07QUFDakQsZ0JBQU0sV0FBVyxjQUFBQSxRQUFnQixpQkFBaUIsZ0JBQWdCLElBQUksTUFBTSxJQUFJLFdBQVcsVUFBVSxFQUFFLENBQUM7QUFDeEcsY0FBSSxNQUFNLFNBQVMsT0FBTyxJQUFJO0FBQzlCLGdCQUFNLE9BQU8sT0FBTyxDQUFDLEtBQUssU0FBUyxNQUFNLENBQUMsQ0FBQztBQUMzQyxpQkFBTyxJQUFJLFdBQVcsR0FBRyxFQUFFO0FBQUEsUUFDL0I7QUFBQSxNQUNKO0FBRUEsTUFBTSxpQkFBTixjQUFrQyxZQUFZO0FBQUEsUUFDMUMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLGNBQWM7QUFDbkIsZUFBSyxTQUFTO0FBQ2QsZUFBSyxPQUFPO0FBQUEsUUFDaEI7QUFBQSxRQUNBLE1BQU0sY0FBYyxXQUFXLGFBQWEsV0FBVztBQUNuRCxnQkFBTSxNQUFNLE1BQU0sVUFBVSxZQUFZO0FBQUEsWUFDcEMsTUFBTSxLQUFLO0FBQUEsWUFDWCxRQUFRLEtBQUs7QUFBQSxVQUNqQixHQUFHLGFBQWEsU0FBUztBQUN6QixpQkFBTyxhQUFhLEdBQUc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsTUFBTSxVQUFVLFdBQVcsS0FBSyxNQUFNO0FBQ2xDLGlCQUFPLFVBQVUsUUFBUSxXQUFXLGFBQWEsR0FBRyxHQUFHLElBQUksV0FBVyxJQUFJLENBQUM7QUFBQSxRQUMvRTtBQUFBLFFBQ0EsTUFBTSxVQUFVLFdBQVcsS0FBSyxNQUFNO0FBQ2xDLGlCQUFPLFVBQVUsUUFBUSxXQUFXLGFBQWEsR0FBRyxHQUFHLElBQUksV0FBVyxJQUFJLENBQUM7QUFBQSxRQUMvRTtBQUFBLFFBQ0EsTUFBTSxZQUFZQyxTQUFRLEtBQUs7QUFDM0IsaUJBQU8sVUFBVSxVQUFVQSxTQUFRLGFBQWEsR0FBRyxDQUFDO0FBQUEsUUFDeEQ7QUFBQSxRQUNBLE1BQU0sWUFBWUEsU0FBUSxTQUFTLFdBQVcsYUFBYSxXQUFXO0FBQ2xFLGdCQUFNLE1BQU0sTUFBTSxVQUFVLFVBQVVBLFNBQVEsU0FBUyxFQUFFLE1BQU0sS0FBSyxNQUFNLFFBQVEsS0FBSyxZQUFZLEdBQUcsYUFBYSxTQUFTO0FBQzVILGNBQUksSUFBSSxLQUFLLFdBQVksS0FBSyxlQUFlLEdBQUk7QUFDN0Msa0JBQU0sSUFBUyxlQUFlLHlCQUF5QjtBQUFBLFVBQzNEO0FBQ0EsaUJBQU8sYUFBYSxHQUFHO0FBQUEsUUFDM0I7QUFBQSxRQUNBLGVBQWUsS0FBSyxVQUFVO0FBQzFCLGdCQUFNLGVBQWUsS0FBSyxRQUFRO0FBQ2xDLGNBQUksRUFBRSxhQUFhLEdBQUcsYUFBYSxlQUFlO0FBQzlDLGtCQUFNLElBQUksVUFBVSw0QkFBNEI7QUFBQSxVQUNwRDtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsTUFBTSxxQkFBTixjQUFzQyxZQUFZO0FBQUEsUUFDOUMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLGNBQWM7QUFDbkIsZUFBSyxTQUFTO0FBQ2QsZUFBSyxPQUFPO0FBQUEsUUFDaEI7QUFBQSxRQUNBLE1BQU0sY0FBYyxXQUFXLGFBQWEsV0FBVztBQUNuRCxnQkFBTSxNQUFNLE1BQU0sVUFBVSxZQUFZO0FBQUEsWUFDcEMsTUFBTSxLQUFLO0FBQUEsWUFDWCxRQUFRLEtBQUs7QUFBQSxVQUNqQixHQUFHLGFBQWEsU0FBUztBQUN6QixpQkFBTyxhQUFhLEdBQUc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsTUFBTSxVQUFVLFdBQVcsS0FBSyxNQUFNO0FBQ2xDLGlCQUFPLFVBQVUsUUFBUSxXQUFXLGFBQWEsR0FBRyxHQUFHLElBQUksV0FBVyxJQUFJLENBQUM7QUFBQSxRQUMvRTtBQUFBLFFBQ0EsTUFBTSxVQUFVLFdBQVcsS0FBSyxNQUFNO0FBQ2xDLGlCQUFPLFVBQVUsUUFBUSxXQUFXLGFBQWEsR0FBRyxHQUFHLElBQUksV0FBVyxJQUFJLENBQUM7QUFBQSxRQUMvRTtBQUFBLFFBQ0EsTUFBTSxZQUFZQSxTQUFRLEtBQUs7QUFDM0IsaUJBQU8sVUFBVSxVQUFVQSxTQUFRLGFBQWEsR0FBRyxDQUFDO0FBQUEsUUFDeEQ7QUFBQSxRQUNBLE1BQU0sWUFBWUEsU0FBUSxTQUFTLFdBQVcsYUFBYSxXQUFXO0FBQ2xFLGdCQUFNLE1BQU0sTUFBTSxVQUFVLFVBQVVBLFNBQVEsU0FBUyxFQUFFLE1BQU0sS0FBSyxNQUFNLFFBQVEsS0FBSyxZQUFZLEdBQUcsYUFBYSxTQUFTO0FBQzVILGNBQUksSUFBSSxLQUFLLFdBQVksS0FBSyxlQUFlLEdBQUk7QUFDN0Msa0JBQU0sSUFBUyxlQUFlLHlCQUF5QjtBQUFBLFVBQzNEO0FBQ0EsaUJBQU8sYUFBYSxHQUFHO0FBQUEsUUFDM0I7QUFBQSxRQUNBLGVBQWUsS0FBSyxVQUFVO0FBQzFCLGdCQUFNLGVBQWUsS0FBSyxRQUFRO0FBQ2xDLGNBQUksRUFBRSxhQUFhLEdBQUcsYUFBYSxlQUFlO0FBQzlDLGtCQUFNLElBQUksVUFBVSw0QkFBNEI7QUFBQSxVQUNwRDtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBbUJBLE1BQU1yQixpQkFBTixjQUE0QixjQUFjO0FBQUEsUUFDdEMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLE9BQU87QUFBQSxRQUNoQjtBQUFBLFFBQ0EsU0FBUztBQUNMLGdCQUFNLFVBQVUsVUFBVSxNQUFNLEtBQUssTUFBVyxRQUFLLGNBQWM7QUFDbkUsaUJBQU8sVUFBVSxNQUFNLFFBQVEsWUFBaUIsUUFBSyxhQUFhO0FBQUEsUUFDdEU7QUFBQSxRQUNBLFNBQVM7QUFDTCxnQkFBTSxNQUFNLEtBQUssT0FBTztBQUN4QixnQkFBTSxPQUFPO0FBQUEsWUFDVCxLQUFLO0FBQUEsWUFDTCxLQUFLLGdCQUFnQixLQUFLLFNBQVM7QUFBQSxZQUNuQyxTQUFTLEtBQUs7QUFBQSxZQUNkLEtBQUssS0FBSztBQUFBLFVBQ2Q7QUFDQSxpQkFBTyxPQUFPLE9BQU8sTUFBTSxlQUFlLE9BQU8sR0FBRyxDQUFDO0FBQUEsUUFDekQ7QUFBQSxRQUNBLFNBQVMsTUFBTTtBQUNYLGdCQUFNLE1BQU0sV0FBVyxTQUFTLE1BQU0sRUFBRSxjQUFtQixRQUFLLGNBQWMsQ0FBQztBQUMvRSxnQkFBTSxVQUFVLElBQVMsUUFBSyxlQUFlO0FBQzdDLGtCQUFRLG9CQUFvQixZQUFZO0FBQ3hDLGtCQUFRLG9CQUFvQixhQUFhO0FBQ3pDLGtCQUFRLGFBQWEsY0FBYyxVQUFVLEdBQUc7QUFDaEQsZUFBSyxPQUFPLE9BQU8sS0FBSyxjQUFjLFVBQVUsT0FBTyxDQUFDO0FBQUEsUUFDNUQ7QUFBQSxNQUNKO0FBRUEsTUFBTUMsZ0JBQU4sY0FBMkIsY0FBYztBQUFBLFFBQ3JDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxPQUFPO0FBQUEsUUFDaEI7QUFBQSxRQUNBLFNBQVM7QUFDTCxnQkFBTSxVQUFVLFVBQVUsTUFBTSxLQUFLLE1BQVcsUUFBSyxhQUFhO0FBQ2xFLGlCQUFPLFVBQVUsTUFBTSxRQUFRLFdBQWdCLFFBQUssWUFBWTtBQUFBLFFBQ3BFO0FBQUEsUUFDQSxTQUFTO0FBQ0wsZ0JBQU0sTUFBTSxLQUFLLE9BQU87QUFDeEIsZ0JBQU0sT0FBTztBQUFBLFlBQ1QsS0FBSztBQUFBLFlBQ0wsS0FBSyxnQkFBZ0IsS0FBSyxTQUFTO0FBQUEsWUFDbkMsU0FBUyxLQUFLO0FBQUEsWUFDZCxLQUFLLEtBQUs7QUFBQSxVQUNkO0FBQ0EsaUJBQU8sT0FBTyxPQUFPLE1BQU0sZUFBZSxPQUFPLEdBQUcsQ0FBQztBQUFBLFFBQ3pEO0FBQUEsUUFDQSxTQUFTLE1BQU07QUFDWCxnQkFBTSxNQUFNLFdBQVcsU0FBUyxNQUFNLEVBQUUsY0FBbUIsUUFBSyxhQUFhLENBQUM7QUFDOUUsZ0JBQU0sVUFBVSxJQUFTLFFBQUssY0FBYztBQUM1QyxrQkFBUSxtQkFBbUIsWUFBWTtBQUN2QyxrQkFBUSxtQkFBbUIsYUFBYTtBQUN4QyxrQkFBUSxZQUFZLGNBQWMsVUFBVSxHQUFHO0FBQy9DLGVBQUssT0FBTyxPQUFPLEtBQUssY0FBYyxVQUFVLE9BQU8sQ0FBQztBQUFBLFFBQzVEO0FBQUEsTUFDSjtBQUVBLE1BQU0sWUFBTixNQUFnQjtBQUFBLFFBQ1osYUFBYSxZQUFZLFdBQVcsYUFBYSxXQUFXO0FBQ3hELGdCQUFNLGFBQWEsSUFBSUQsZUFBYztBQUNyQyxxQkFBVyxZQUFZO0FBQ3ZCLHFCQUFXLGNBQWM7QUFDekIscUJBQVcsU0FBUyxVQUFVLE9BQU8sQ0FBQyxVQUFVLEtBQUssaUJBQWlCLFFBQVEsS0FBSyxNQUFNLEVBQUU7QUFDM0YsZ0JBQU0sWUFBWSxJQUFJQyxjQUFhO0FBQ25DLG9CQUFVLFlBQVk7QUFDdEIsb0JBQVUsY0FBYztBQUN4QixvQkFBVSxTQUFTLFVBQVUsT0FBTyxDQUFDLFVBQVUsS0FBSyxnQkFBZ0IsUUFBUSxLQUFLLE1BQU0sRUFBRTtBQUN6RixnQkFBTSxpQkFBaUIsT0FBTyxPQUFPO0FBQUEsWUFDakMsT0FBTyxNQUFNLElBQUksVUFBVSxlQUFlLFlBQVksQ0FBQztBQUFBLFlBQ3ZELE9BQU8sS0FBSyxVQUFVLGNBQWM7QUFBQSxVQUN4QyxDQUFDLEVBQUUsWUFBWSxDQUFDO0FBQ2hCLGdCQUFNLE9BQU8sY0FBQW1CLFFBQWdCLG9CQUFvQixPQUFPO0FBQUEsWUFDcEQsZUFBZSxVQUFVO0FBQUEsWUFDekI7QUFBQSxZQUNBLG1CQUFtQjtBQUFBLGNBQ2YsUUFBUTtBQUFBLGNBQ1IsTUFBTTtBQUFBLFlBQ1Y7QUFBQSxZQUNBLG9CQUFvQjtBQUFBLGNBQ2hCLFFBQVE7QUFBQSxjQUNSLE1BQU07QUFBQSxZQUNWO0FBQUEsVUFDSixDQUFDO0FBQ0QscUJBQVcsT0FBTyxLQUFLO0FBQ3ZCLG9CQUFVLE9BQU8sS0FBSztBQUN0QixnQkFBTSxNQUFNO0FBQUEsWUFDUjtBQUFBLFlBQ0E7QUFBQSxVQUNKO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxhQUFhLFVBQVVDLFNBQVEsS0FBSztBQUNoQyxrQkFBUUEsUUFBTyxZQUFZLEdBQUc7QUFBQSxZQUMxQixLQUFLO0FBQ0QscUJBQU8sZUFBZSxPQUFPLEdBQUc7QUFBQSxZQUNwQyxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQ0QscUJBQU8sSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFO0FBQUEsWUFDcEM7QUFDSSxvQkFBTSxJQUFTLGVBQWUsMENBQTBDO0FBQUEsVUFDaEY7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhLFVBQVVBLFNBQVEsU0FBUyxXQUFXLGFBQWEsV0FBVztBQUN2RSxrQkFBUUEsUUFBTyxZQUFZLEdBQUc7QUFBQSxZQUMxQixLQUFLLE9BQU87QUFDUixvQkFBTSxNQUFNO0FBQ1osa0JBQUksSUFBSSxHQUFHO0FBQ1Asc0JBQU0sU0FBUyxXQUFXLFNBQVMsU0FBUyxFQUFFLGNBQW1CLFFBQUssY0FBYyxDQUFDO0FBQ3JGLHVCQUFPLEtBQUssaUJBQWlCLFFBQVEsV0FBVyxhQUFhLFNBQVM7QUFBQSxjQUMxRSxPQUNLO0FBQ0Qsc0JBQU0sU0FBUyxXQUFXLFNBQVMsU0FBUyxFQUFFLGNBQW1CLFFBQUssYUFBYSxDQUFDO0FBQ3BGLHVCQUFPLEtBQUssZ0JBQWdCLFFBQVEsV0FBVyxhQUFhLFNBQVM7QUFBQSxjQUN6RTtBQUFBLFlBQ0o7QUFBQSxZQUNBLEtBQUssUUFBUTtBQUNULG9CQUFNLFVBQVUsVUFBVSxNQUFNLElBQUksV0FBVyxPQUFPLEdBQVEsUUFBSyxhQUFhO0FBQ2hGLG9CQUFNLFNBQVMsVUFBVSxNQUFNLFFBQVEsV0FBZ0IsUUFBSyxZQUFZO0FBQ3hFLHFCQUFPLEtBQUssZ0JBQWdCLFFBQVEsV0FBVyxhQUFhLFNBQVM7QUFBQSxZQUN6RTtBQUFBLFlBQ0EsS0FBSyxTQUFTO0FBQ1Ysb0JBQU0sVUFBVSxVQUFVLE1BQU0sSUFBSSxXQUFXLE9BQU8sR0FBUSxRQUFLLGNBQWM7QUFDakYsb0JBQU0sU0FBUyxVQUFVLE1BQU0sUUFBUSxZQUFpQixRQUFLLGFBQWE7QUFDMUUscUJBQU8sS0FBSyxpQkFBaUIsUUFBUSxXQUFXLGFBQWEsU0FBUztBQUFBLFlBQzFFO0FBQUEsWUFDQTtBQUNJLG9CQUFNLElBQVMsZUFBZSwwQ0FBMEM7QUFBQSxVQUNoRjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGFBQWEsS0FBSyxXQUFXLEtBQUssTUFBTTtBQUNwQyxrQkFBUSxVQUFVLEtBQUssWUFBWSxHQUFHO0FBQUEsWUFDbEMsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUNELHFCQUFPLEtBQUssUUFBUSxXQUFXLEtBQUssSUFBSTtBQUFBLFlBQzVDO0FBQ0ksb0JBQU0sSUFBUyxlQUFlLDhCQUE4QjtBQUFBLFVBQ3BFO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYSxPQUFPLFdBQVcsS0FBSyxXQUFXLE1BQU07QUFDakQsa0JBQVEsVUFBVSxLQUFLLFlBQVksR0FBRztBQUFBLFlBQ2xDLEtBQUs7QUFBQSxZQUNMLEtBQUs7QUFDRCxxQkFBTyxLQUFLLFVBQVUsV0FBVyxLQUFLLE1BQU0sU0FBUztBQUFBLFlBQ3pEO0FBQ0ksb0JBQU0sSUFBUyxlQUFlLDhCQUE4QjtBQUFBLFVBQ3BFO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYSxRQUFRLFdBQVcsS0FBSyxNQUFNO0FBQ3ZDLGtCQUFRLFVBQVUsS0FBSyxZQUFZLEdBQUc7QUFBQSxZQUNsQyxLQUFLO0FBQ0QscUJBQU8sS0FBSyxZQUFZLFdBQVcsS0FBSyxJQUFJO0FBQUEsWUFDaEQ7QUFDSSxvQkFBTSxJQUFTLGVBQWUsOEJBQThCO0FBQUEsVUFDcEU7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhLFFBQVEsV0FBVyxLQUFLLE1BQU07QUFDdkMsa0JBQVEsVUFBVSxLQUFLLFlBQVksR0FBRztBQUFBLFlBQ2xDLEtBQUs7QUFDRCxxQkFBTyxLQUFLLFlBQVksV0FBVyxLQUFLLElBQUk7QUFBQSxZQUNoRDtBQUNJLG9CQUFNLElBQVMsZUFBZSw4QkFBOEI7QUFBQSxVQUNwRTtBQUFBLFFBQ0o7QUFBQSxRQUNBLE9BQU8saUJBQWlCLFFBQVEsV0FBVyxhQUFhLFdBQVc7QUFDL0QsZ0JBQU0sVUFBVSxJQUFTLFFBQUssZUFBZTtBQUM3QyxrQkFBUSxvQkFBb0IsWUFBWTtBQUN4QyxrQkFBUSxvQkFBb0IsYUFBYTtBQUN6QyxrQkFBUSxhQUFhLGNBQWMsVUFBVSxNQUFNO0FBQ25ELGdCQUFNLE1BQU0sSUFBSXJCLGVBQWM7QUFDOUIsY0FBSSxPQUFPLE9BQU8sS0FBSyxjQUFjLFVBQVUsT0FBTyxDQUFDO0FBQ3ZELGNBQUksWUFBWSxPQUFPLE9BQU8sQ0FBQyxHQUFHLFNBQVM7QUFDM0MsY0FBSSxVQUFVLGlCQUFpQixJQUFJLFdBQVcsT0FBTyxjQUFjO0FBQ25FLGNBQUksVUFBVSxnQkFBZ0IsT0FBTyxRQUFRLGNBQWM7QUFDM0QsY0FBSSxjQUFjO0FBQ2xCLGNBQUksU0FBUztBQUNiLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsT0FBTyxnQkFBZ0IsUUFBUSxXQUFXLGFBQWEsV0FBVztBQUM5RCxnQkFBTSxVQUFVLElBQVMsUUFBSyxjQUFjO0FBQzVDLGtCQUFRLG1CQUFtQixZQUFZO0FBQ3ZDLGtCQUFRLG1CQUFtQixhQUFhO0FBQ3hDLGtCQUFRLFlBQVksY0FBYyxVQUFVLE1BQU07QUFDbEQsZ0JBQU0sTUFBTSxJQUFJQyxjQUFhO0FBQzdCLGNBQUksT0FBTyxPQUFPLEtBQUssY0FBYyxVQUFVLE9BQU8sQ0FBQztBQUN2RCxjQUFJLFlBQVksT0FBTyxPQUFPLENBQUMsR0FBRyxTQUFTO0FBQzNDLGNBQUksVUFBVSxpQkFBaUIsSUFBSSxXQUFXLE9BQU8sY0FBYztBQUNuRSxjQUFJLFVBQVUsZ0JBQWdCLE9BQU8sUUFBUSxjQUFjO0FBQzNELGNBQUksY0FBYztBQUNsQixjQUFJLFNBQVM7QUFDYixpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLE9BQU8sbUJBQW1CLEtBQUs7QUFDM0Isa0JBQVEsSUFBSSxLQUFLLEtBQUssWUFBWSxHQUFHO0FBQUEsWUFDakMsS0FBSztBQUNELHFCQUFPO0FBQUEsWUFDWCxLQUFLO0FBQ0QscUJBQU87QUFBQSxZQUNYLEtBQUs7QUFDRCxxQkFBTztBQUFBLFlBQ1gsS0FBSztBQUNELHFCQUFPO0FBQUEsWUFDWCxLQUFLO0FBQ0QscUJBQU87QUFBQSxZQUNYLEtBQUs7QUFDRCxxQkFBTztBQUFBLFlBQ1gsS0FBSztBQUNELHFCQUFPO0FBQUEsWUFDWDtBQUNJLG9CQUFNLElBQVMsZUFBZSxtQ0FBbUM7QUFBQSxVQUN6RTtBQUFBLFFBQ0o7QUFBQSxRQUNBLE9BQU8sUUFBUSxXQUFXLEtBQUssTUFBTTtBQUNqQyxnQkFBTSxZQUFZLEtBQUssbUJBQW1CLElBQUksU0FBUztBQUN2RCxnQkFBTSxTQUFTLGNBQUFtQixRQUFnQixXQUFXLFNBQVM7QUFDbkQsaUJBQU8sT0FBTyxPQUFPLEtBQUssSUFBSSxDQUFDO0FBQy9CLGNBQUksQ0FBQyxJQUFJLEtBQUs7QUFDVixnQkFBSSxNQUFNO0FBQUEsRUFBZ0MsSUFBSSxLQUFLLFNBQVMsUUFBUSxDQUFDO0FBQUE7QUFBQSxVQUN6RTtBQUNBLGdCQUFNRSxXQUFVO0FBQUEsWUFDWixLQUFLLElBQUk7QUFBQSxVQUNiO0FBQ0EsY0FBSSxVQUFVLEtBQUssWUFBWSxNQUFNLFdBQVc7QUFDNUMsWUFBQUEsU0FBUSxVQUFVLGNBQUFGLFFBQWdCLFVBQVU7QUFDNUMsWUFBQUUsU0FBUSxhQUFhLFVBQVU7QUFBQSxVQUNuQztBQUNBLGdCQUFNLFlBQVksT0FBTyxLQUFLQSxRQUFPO0FBQ3JDLGlCQUFPLElBQUksV0FBVyxTQUFTLEVBQUU7QUFBQSxRQUNyQztBQUFBLFFBQ0EsT0FBTyxVQUFVLFdBQVcsS0FBSyxNQUFNLFdBQVc7QUFDOUMsZ0JBQU0sWUFBWSxLQUFLLG1CQUFtQixJQUFJLFNBQVM7QUFDdkQsZ0JBQU0sU0FBUyxjQUFBRixRQUFnQixhQUFhLFNBQVM7QUFDckQsaUJBQU8sT0FBTyxPQUFPLEtBQUssSUFBSSxDQUFDO0FBQy9CLGNBQUksQ0FBQyxJQUFJLEtBQUs7QUFDVixnQkFBSSxNQUFNO0FBQUEsRUFBK0IsSUFBSSxLQUFLLFNBQVMsUUFBUSxDQUFDO0FBQUE7QUFBQSxVQUN4RTtBQUNBLGdCQUFNRSxXQUFVO0FBQUEsWUFDWixLQUFLLElBQUk7QUFBQSxVQUNiO0FBQ0EsY0FBSSxVQUFVLEtBQUssWUFBWSxNQUFNLFdBQVc7QUFDNUMsWUFBQUEsU0FBUSxVQUFVLGNBQUFGLFFBQWdCLFVBQVU7QUFDNUMsWUFBQUUsU0FBUSxhQUFhLFVBQVU7QUFBQSxVQUNuQztBQUNBLGdCQUFNLEtBQUssT0FBTyxPQUFPQSxVQUFTLFNBQVM7QUFDM0MsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxPQUFPLFlBQVksV0FBVyxLQUFLLE1BQU07QUFDckMsZ0JBQU1BLFdBQVU7QUFBQSxZQUNaLEtBQUs7QUFBQSxFQUErQixJQUFJLEtBQUssU0FBUyxRQUFRLENBQUM7QUFBQTtBQUFBLFlBQy9ELFNBQVMsY0FBQUYsUUFBZ0IsVUFBVTtBQUFBLFVBQ3ZDO0FBQ0EsY0FBSSxVQUFVO0FBQU87QUFDckIsaUJBQU8sSUFBSSxXQUFXLGNBQUFBLFFBQWdCLGNBQWNFLFVBQVMsSUFBSSxDQUFDLEVBQUU7QUFBQSxRQUN4RTtBQUFBLFFBQ0EsT0FBTyxZQUFZLFdBQVcsS0FBSyxNQUFNO0FBQ3JDLGdCQUFNQSxXQUFVO0FBQUEsWUFDWixLQUFLO0FBQUEsRUFBZ0MsSUFBSSxLQUFLLFNBQVMsUUFBUSxDQUFDO0FBQUE7QUFBQSxZQUNoRSxTQUFTLGNBQUFGLFFBQWdCLFVBQVU7QUFBQSxVQUN2QztBQUNBLGNBQUksVUFBVTtBQUFPO0FBQ3JCLGlCQUFPLElBQUksV0FBVyxjQUFBQSxRQUFnQixlQUFlRSxVQUFTLElBQUksQ0FBQyxFQUFFO0FBQUEsUUFDekU7QUFBQSxNQUNKO0FBQ0EsZ0JBQVUsa0JBQWtCLENBQUMsVUFBVSxXQUFXLFNBQVM7QUFDM0QsZ0JBQVUsbUJBQW1CLENBQUMsUUFBUSxXQUFXLFdBQVc7QUFFNUQsTUFBTXBCLGtCQUFOLGNBQWtDLGVBQWU7QUFBQSxRQUM3QyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssaUJBQWlCO0FBQUEsWUFDbEI7QUFBQSxZQUFTO0FBQUEsWUFBVztBQUFBLFlBQVc7QUFBQSxZQUMvQjtBQUFBLFlBQVk7QUFBQSxZQUNaO0FBQUEsWUFBWTtBQUFBLFlBQVk7QUFBQSxVQUM1QjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU0sY0FBYyxXQUFXLGFBQWEsV0FBVztBQUNuRCxnQkFBTSxPQUFPLE1BQU0sVUFBVSxZQUFZO0FBQUEsWUFDckMsR0FBRztBQUFBLFlBQ0gsTUFBTSxLQUFLO0FBQUEsVUFDZixHQUFHLGFBQWEsU0FBUztBQUN6QixpQkFBTztBQUFBLFlBQ0gsWUFBWSxhQUFhLEtBQUssVUFBVTtBQUFBLFlBQ3hDLFdBQVcsYUFBYSxLQUFLLFNBQVM7QUFBQSxVQUMxQztBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU0sT0FBTyxXQUFXLEtBQUssTUFBTTtBQUMvQixpQkFBTyxVQUFVLEtBQUssV0FBVyxhQUFhLEdBQUcsR0FBRyxJQUFJLFdBQVcsSUFBSSxDQUFDO0FBQUEsUUFDNUU7QUFBQSxRQUNBLE1BQU0sU0FBUyxXQUFXLEtBQUssV0FBVyxNQUFNO0FBQzVDLGlCQUFPLFVBQVUsT0FBTyxXQUFXLGFBQWEsR0FBRyxHQUFHLElBQUksV0FBVyxTQUFTLEdBQUcsSUFBSSxXQUFXLElBQUksQ0FBQztBQUFBLFFBQ3pHO0FBQUEsUUFDQSxNQUFNLFlBQVltQixTQUFRLEtBQUs7QUFDM0IsaUJBQU8sVUFBVSxVQUFVQSxTQUFRLGFBQWEsR0FBRyxDQUFDO0FBQUEsUUFDeEQ7QUFBQSxRQUNBLE1BQU0sWUFBWUEsU0FBUSxTQUFTLFdBQVcsYUFBYSxXQUFXO0FBQ2xFLGdCQUFNLE1BQU0sTUFBTSxVQUFVLFVBQVVBLFNBQVEsU0FBUyxFQUFFLEdBQUcsV0FBVyxNQUFNLEtBQUssS0FBSyxHQUFHLGFBQWEsU0FBUztBQUNoSCxpQkFBTyxhQUFhLEdBQUc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsZUFBZSxLQUFLLFVBQVU7QUFDMUIsZ0JBQU0sZUFBZSxLQUFLLFFBQVE7QUFDbEMsZ0JBQU0sY0FBYyxhQUFhLEdBQUc7QUFDcEMsY0FBSSxFQUFFLHVCQUF1QnJCLGtCQUFpQix1QkFBdUJDLGdCQUFlO0FBQ2hGLGtCQUFNLElBQUksVUFBVSwyQkFBMkI7QUFBQSxVQUNuRDtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsTUFBTUUsa0JBQU4sY0FBa0MsZUFBZTtBQUFBLFFBQzdDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxpQkFBaUI7QUFBQSxZQUNsQjtBQUFBLFlBQVM7QUFBQSxZQUFXO0FBQUEsWUFBVztBQUFBLFlBQy9CO0FBQUEsWUFBWTtBQUFBLFlBQ1o7QUFBQSxZQUFZO0FBQUEsWUFBWTtBQUFBLFVBQzVCO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTSxjQUFjLFdBQVcsYUFBYSxXQUFXO0FBQ25ELGdCQUFNLE9BQU8sTUFBTSxVQUFVLFlBQVk7QUFBQSxZQUNyQyxHQUFHO0FBQUEsWUFDSCxNQUFNLEtBQUs7QUFBQSxVQUNmLEdBQUcsYUFBYSxTQUFTO0FBQ3pCLGlCQUFPO0FBQUEsWUFDSCxZQUFZLGFBQWEsS0FBSyxVQUFVO0FBQUEsWUFDeEMsV0FBVyxhQUFhLEtBQUssU0FBUztBQUFBLFVBQzFDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTSxPQUFPLFdBQVcsS0FBSyxNQUFNO0FBQy9CLGlCQUFPLFVBQVUsS0FBSyxXQUFXLGFBQWEsR0FBRyxHQUFHLElBQUksV0FBVyxJQUFJLENBQUM7QUFBQSxRQUM1RTtBQUFBLFFBQ0EsTUFBTSxTQUFTLFdBQVcsS0FBSyxXQUFXLE1BQU07QUFDNUMsaUJBQU8sVUFBVSxPQUFPLFdBQVcsYUFBYSxHQUFHLEdBQUcsSUFBSSxXQUFXLFNBQVMsR0FBRyxJQUFJLFdBQVcsSUFBSSxDQUFDO0FBQUEsUUFDekc7QUFBQSxRQUNBLE1BQU0sWUFBWWtCLFNBQVEsS0FBSztBQUMzQixpQkFBTyxVQUFVLFVBQVVBLFNBQVEsYUFBYSxHQUFHLENBQUM7QUFBQSxRQUN4RDtBQUFBLFFBQ0EsTUFBTSxZQUFZQSxTQUFRLFNBQVMsV0FBVyxhQUFhLFdBQVc7QUFDbEUsZ0JBQU0sTUFBTSxNQUFNLFVBQVUsVUFBVUEsU0FBUSxTQUFTLEVBQUUsR0FBRyxXQUFXLE1BQU0sS0FBSyxLQUFLLEdBQUcsYUFBYSxTQUFTO0FBQ2hILGlCQUFPLGFBQWEsR0FBRztBQUFBLFFBQzNCO0FBQUEsUUFDQSxlQUFlLEtBQUssVUFBVTtBQUMxQixnQkFBTSxlQUFlLEtBQUssUUFBUTtBQUNsQyxnQkFBTSxjQUFjLGFBQWEsR0FBRztBQUNwQyxjQUFJLEVBQUUsdUJBQXVCckIsa0JBQWlCLHVCQUF1QkMsZ0JBQWU7QUFDaEYsa0JBQU0sSUFBSSxVQUFVLDJCQUEyQjtBQUFBLFVBQ25EO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNLFlBQU4sTUFBZ0I7QUFBQSxRQUNaLE9BQU8sS0FBSyxXQUFXO0FBQ25CLGtCQUFRLFVBQVUsS0FBSyxZQUFZLEdBQUc7QUFBQSxZQUNsQyxLQUFLO0FBQ0QscUJBQU87QUFBQSxZQUNYLEtBQUs7QUFBQSxZQUNMLEtBQUs7QUFDRCxxQkFBTztBQUFBLFlBQ1gsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUNELHFCQUFPO0FBQUEsWUFDWCxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQ0QscUJBQU87QUFBQSxZQUNYO0FBQ0ksb0JBQU0sSUFBSSxNQUFNLG1CQUFtQjtBQUFBLFVBQzNDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsT0FBTyxpQkFBaUIsV0FBVztBQUMvQixrQkFBUSxVQUFVLEtBQUssWUFBWSxHQUFHO0FBQUEsWUFDbEMsS0FBSztBQUNELHFCQUFPO0FBQUEsWUFDWCxLQUFLO0FBQ0QscUJBQU87QUFBQSxZQUNYLEtBQUs7QUFDRCxxQkFBTztBQUFBLFlBQ1gsS0FBSztBQUNELHFCQUFPO0FBQUEsWUFDWCxLQUFLO0FBQ0QscUJBQU87QUFBQSxZQUNYLEtBQUs7QUFDRCxxQkFBTztBQUFBLFlBQ1gsS0FBSztBQUNELHFCQUFPO0FBQUEsWUFDWDtBQUNJLG9CQUFNLElBQUksTUFBTSxtQkFBbUI7QUFBQSxVQUMzQztBQUFBLFFBQ0o7QUFBQSxRQUNBLE9BQU8sT0FBTyxXQUFXLE1BQU07QUFDM0IsZ0JBQU0sVUFBVSxLQUFLLGlCQUFpQixTQUFTO0FBQy9DLGdCQUFNc0IsUUFBTyxjQUFBSCxRQUFnQixXQUFXLE9BQU8sRUFDMUMsT0FBTyxPQUFPLEtBQUssSUFBSSxDQUFDLEVBQUUsT0FBTztBQUN0QyxpQkFBTyxJQUFJLFdBQVdHLEtBQUksRUFBRTtBQUFBLFFBQ2hDO0FBQUEsTUFDSjtBQUVBLE1BQU1uQixtQkFBTixjQUFtQyxnQkFBZ0I7QUFBQSxRQUMvQyxNQUFNLGNBQWMsV0FBVyxhQUFhLFdBQVc7QUFDbkQsZ0JBQU0sT0FBTyxNQUFNLFVBQVUsWUFBWTtBQUFBLFlBQ3JDLEdBQUc7QUFBQSxZQUNILE1BQU0sS0FBSztBQUFBLFVBQ2YsR0FBRyxhQUFhLFNBQVM7QUFDekIsaUJBQU87QUFBQSxZQUNILFlBQVksYUFBYSxLQUFLLFVBQVU7QUFBQSxZQUN4QyxXQUFXLGFBQWEsS0FBSyxTQUFTO0FBQUEsVUFDMUM7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNLFVBQVUsV0FBVyxLQUFLLE1BQU07QUFDbEMsZ0JBQU0sY0FBYyxhQUFhLEdBQUc7QUFDcEMsZ0JBQU0sV0FBVyxJQUFJLFdBQVcsSUFBSTtBQUNwQyxnQkFBTSxVQUFVLEtBQUssS0FBSyxZQUFZLFVBQVUsaUJBQWlCLENBQUM7QUFDbEUsZ0JBQU0sV0FBVyxVQUFVLEtBQUssWUFBWSxVQUFVLElBQUksS0FBSztBQUMvRCxnQkFBTSxhQUFhLFNBQVM7QUFDNUIsZ0JBQU0sV0FBVyxVQUFVLGFBQWEsSUFBSSxXQUFXO0FBQ3ZELGNBQUksYUFBYSxVQUFVLElBQUksV0FBVyxHQUFHO0FBQ3pDLGtCQUFNLElBQUksTUFBTSxnQkFBZ0I7QUFBQSxVQUNwQztBQUNBLGdCQUFNLFVBQVUsSUFBSSxXQUFXLE9BQU87QUFDdEMsZ0JBQU0sT0FBTyxRQUFRLFNBQVMsR0FBRyxXQUFXLENBQUM7QUFDN0MsZ0JBQU0sWUFBWSxRQUFRLFNBQVMsV0FBVyxDQUFDO0FBQy9DLG9CQUFVLElBQUksVUFBVSxXQUFXLFdBQVcsQ0FBQztBQUMvQyxnQkFBTSxZQUFZLGNBQUFnQixRQUFnQixXQUFXLFlBQVksVUFBVSxLQUFLLEtBQUssUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUN4RixPQUFZLHdDQUFzQixhQUFhLFVBQVUsU0FBUyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFDcEYsT0FBTztBQUNaLG9CQUFVLElBQUksV0FBVyxDQUFDO0FBQzFCLG9CQUFVLFdBQVcsUUFBUSxJQUFJO0FBQ2pDLHdCQUFBQSxRQUFnQixlQUFlLElBQUk7QUFDbkMsZ0JBQU0sZ0JBQWdCLEtBQUssS0FBSyxZQUFZLFVBQVUsTUFBTSxNQUFNLFVBQVUsTUFBTTtBQUNsRixtQkFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUN2QyxzQkFBVSxDQUFDLEtBQUssY0FBYyxDQUFDO0FBQUEsVUFDbkM7QUFDQSxnQkFBTSxXQUFXLEtBQUssS0FBSyxZQUFZLFVBQVUsTUFBTSxXQUFXLEtBQUssTUFBTTtBQUM3RSxtQkFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLFFBQVEsS0FBSztBQUNsQyxpQkFBSyxDQUFDLEtBQUssU0FBUyxDQUFDO0FBQUEsVUFDekI7QUFDQSxjQUFJLENBQUMsWUFBWSxLQUFLO0FBQ2xCLHdCQUFZLE1BQU07QUFBQSxFQUErQixZQUFZLEtBQUssU0FBUyxRQUFRLENBQUM7QUFBQTtBQUFBLFVBQ3hGO0FBQ0EsZ0JBQU0sUUFBUSxjQUFBQSxRQUFnQixjQUFjO0FBQUEsWUFDeEMsS0FBSyxZQUFZO0FBQUEsWUFDakIsU0FBUyxjQUFBQSxRQUFnQixVQUFVO0FBQUEsVUFDdkMsR0FBRyxPQUFPLEtBQUssT0FBTyxDQUFDO0FBQ3ZCLGlCQUFPLElBQUksV0FBVyxLQUFLLEVBQUU7QUFBQSxRQUNqQztBQUFBLFFBQ0EsTUFBTSxVQUFVLFdBQVcsS0FBSyxNQUFNO0FBQ2xDLGdCQUFNLGNBQWMsYUFBYSxHQUFHO0FBQ3BDLGdCQUFNLFVBQVUsS0FBSyxLQUFLLFlBQVksVUFBVSxpQkFBaUIsQ0FBQztBQUNsRSxnQkFBTSxXQUFXLFVBQVUsS0FBSyxZQUFZLFVBQVUsSUFBSSxLQUFLO0FBQy9ELGdCQUFNLGFBQWEsS0FBSztBQUN4QixjQUFJLGVBQWUsU0FBUztBQUN4QixrQkFBTSxJQUFJLE1BQU0sVUFBVTtBQUFBLFVBQzlCO0FBQ0EsY0FBSSxDQUFDLFlBQVksS0FBSztBQUNsQix3QkFBWSxNQUFNO0FBQUEsRUFBZ0MsWUFBWSxLQUFLLFNBQVMsUUFBUSxDQUFDO0FBQUE7QUFBQSxVQUN6RjtBQUNBLGNBQUksUUFBUSxjQUFBQSxRQUFnQixlQUFlO0FBQUEsWUFDdkMsS0FBSyxZQUFZO0FBQUEsWUFDakIsU0FBUyxjQUFBQSxRQUFnQixVQUFVO0FBQUEsVUFDdkMsR0FBRyxPQUFPLEtBQUssSUFBSSxDQUFDO0FBQ3BCLGdCQUFNLElBQUksTUFBTSxDQUFDO0FBQ2pCLGdCQUFNLE9BQU8sTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDO0FBQzNDLGdCQUFNLFlBQVksTUFBTSxTQUFTLFdBQVcsQ0FBQztBQUM3QyxjQUFJLE1BQU0sR0FBRztBQUNULGtCQUFNLElBQUksTUFBTSxtQkFBbUI7QUFBQSxVQUN2QztBQUNBLGdCQUFNLFdBQVcsS0FBSyxLQUFLLFlBQVksVUFBVSxNQUFNLFdBQVcsS0FBSyxNQUFNO0FBQzdFLG1CQUFTLElBQUksR0FBRyxJQUFJLEtBQUssUUFBUSxLQUFLO0FBQ2xDLGlCQUFLLENBQUMsS0FBSyxTQUFTLENBQUM7QUFBQSxVQUN6QjtBQUNBLGdCQUFNLGdCQUFnQixLQUFLLEtBQUssWUFBWSxVQUFVLE1BQU0sTUFBTSxVQUFVLE1BQU07QUFDbEYsbUJBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFDdkMsc0JBQVUsQ0FBQyxLQUFLLGNBQWMsQ0FBQztBQUFBLFVBQ25DO0FBQ0EsZ0JBQU0sWUFBWSxjQUFBQSxRQUFnQixXQUFXLFlBQVksVUFBVSxLQUFLLEtBQUssUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUN4RixPQUFZLHdDQUFzQixhQUFhLFVBQVUsU0FBUyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFDcEYsT0FBTztBQUNaLG1CQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsS0FBSztBQUMvQixnQkFBSSxVQUFVLENBQUMsTUFBTSxVQUFVLENBQUMsR0FBRztBQUMvQixvQkFBTSxJQUFJLE1BQU0sbUJBQW1CO0FBQUEsWUFDdkM7QUFBQSxVQUNKO0FBQ0EsY0FBSSxRQUFRO0FBQ1osaUJBQU8sUUFBUSxVQUFVLFFBQVEsU0FBUztBQUN0QyxrQkFBTSxNQUFNLFVBQVUsS0FBSztBQUMzQixnQkFBSSxRQUFRLEdBQUc7QUFDWDtBQUFBLFlBQ0o7QUFDQSxnQkFBSSxRQUFRLEdBQUc7QUFDWCxvQkFBTSxJQUFJLE1BQU0sbUJBQW1CO0FBQUEsWUFDdkM7QUFBQSxVQUNKO0FBQ0EsY0FBSSxVQUFVLFVBQVUsUUFBUTtBQUM1QixrQkFBTSxJQUFJLE1BQU0sbUJBQW1CO0FBQUEsVUFDdkM7QUFDQSxrQkFBUSxVQUFVLFNBQVMsUUFBUSxDQUFDO0FBQ3BDLGlCQUFPLElBQUksV0FBVyxLQUFLLEVBQUU7QUFBQSxRQUNqQztBQUFBLFFBQ0EsTUFBTSxZQUFZQyxTQUFRLEtBQUs7QUFDM0IsaUJBQU8sVUFBVSxVQUFVQSxTQUFRLGFBQWEsR0FBRyxDQUFDO0FBQUEsUUFDeEQ7QUFBQSxRQUNBLE1BQU0sWUFBWUEsU0FBUSxTQUFTLFdBQVcsYUFBYSxXQUFXO0FBQ2xFLGdCQUFNLE1BQU0sTUFBTSxVQUFVLFVBQVVBLFNBQVEsU0FBUyxFQUFFLEdBQUcsV0FBVyxNQUFNLEtBQUssS0FBSyxHQUFHLGFBQWEsU0FBUztBQUNoSCxpQkFBTyxhQUFhLEdBQUc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsZUFBZSxLQUFLLFVBQVU7QUFDMUIsZ0JBQU0sZUFBZSxLQUFLLFFBQVE7QUFDbEMsZ0JBQU0sY0FBYyxhQUFhLEdBQUc7QUFDcEMsY0FBSSxFQUFFLHVCQUF1QnJCLGtCQUFpQix1QkFBdUJDLGdCQUFlO0FBQ2hGLGtCQUFNLElBQUksVUFBVSwyQkFBMkI7QUFBQSxVQUNuRDtBQUFBLFFBQ0o7QUFBQSxRQUNBLEtBQUssV0FBVyxNQUFNLFNBQVMsR0FBRztBQUM5QixnQkFBTSxXQUFXLFVBQVUsS0FBSyxTQUFTLEtBQUs7QUFDOUMsZ0JBQU0sT0FBTyxJQUFJLFdBQVcsTUFBTTtBQUNsQyxnQkFBTSxVQUFVLElBQUksV0FBVyxDQUFDO0FBQ2hDLGdCQUFNLFNBQVMsS0FBSyxLQUFLLFNBQVMsUUFBUTtBQUMxQyxtQkFBUyxJQUFJLEdBQUcsSUFBSSxRQUFRLEtBQUs7QUFDN0Isb0JBQVEsQ0FBQyxJQUFJLE1BQU07QUFDbkIsb0JBQVEsQ0FBQyxJQUFLLE1BQU0sS0FBTTtBQUMxQixvQkFBUSxDQUFDLElBQUssTUFBTSxJQUFLO0FBQ3pCLG9CQUFRLENBQUMsSUFBSSxJQUFJO0FBQ2pCLGtCQUFNLFVBQVUsS0FBSyxTQUFTLElBQUksUUFBUTtBQUMxQyxnQkFBSSxRQUFRLGNBQUFtQixRQUFnQixXQUFXLFVBQVUsS0FBSyxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQ2pFLE9BQU8sSUFBSSxFQUNYLE9BQU8sT0FBTyxFQUNkLE9BQU87QUFDWixnQkFBSSxNQUFNLFNBQVMsUUFBUSxRQUFRO0FBQy9CLHNCQUFRLE1BQU0sU0FBUyxHQUFHLFFBQVEsTUFBTTtBQUFBLFlBQzVDO0FBQ0Esb0JBQVEsSUFBSSxLQUFLO0FBQUEsVUFDckI7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxNQUNKO0FBRUEsTUFBTSxnQkFBTixjQUFpQyxlQUFlO0FBQUEsUUFDNUMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLE9BQU87QUFDWixlQUFLLFNBQVM7QUFBQSxZQUNWLFdBQVcsQ0FBQyxXQUFXLFNBQVM7QUFBQSxZQUNoQyxZQUFZLENBQUMsV0FBVyxXQUFXO0FBQUEsVUFDdkM7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNLGNBQWMsV0FBVyxhQUFhLFdBQVc7QUFDbkQsZ0JBQU0sT0FBTyxNQUFNLFVBQVUsWUFBWTtBQUFBLFlBQ3JDLEdBQUc7QUFBQSxZQUNILE1BQU0sS0FBSztBQUFBLFVBQ2YsR0FBRyxhQUFhLFNBQVM7QUFDekIsaUJBQU87QUFBQSxZQUNILFlBQVksYUFBYSxLQUFLLFVBQVU7QUFBQSxZQUN4QyxXQUFXLGFBQWEsS0FBSyxTQUFTO0FBQUEsVUFDMUM7QUFBQSxRQUNKO0FBQUEsUUFDQSx1QkFBdUIsV0FBVztBQUM5QixlQUFLLHNCQUFzQixXQUFXLGdCQUFnQjtBQUN0RCxjQUFJLEVBQUUsVUFBVSxrQkFBa0IsVUFBVSwwQkFBMEIsYUFBYTtBQUMvRSxrQkFBTSxJQUFJLFVBQVUsNkNBQTZDO0FBQUEsVUFDckU7QUFDQSxnQkFBTSxpQkFBaUIsMEJBQVEsU0FBUyxVQUFVLGNBQWM7QUFDaEUsY0FBSSxFQUFFLG1CQUFtQixVQUFVLG1CQUFtQixTQUFTO0FBQzNELGtCQUFNLElBQUksVUFBVSx3Q0FBd0M7QUFBQSxVQUNoRTtBQUNBLGVBQUssc0JBQXNCLFdBQVcsZUFBZTtBQUNyRCxrQkFBUSxVQUFVLGVBQWU7QUFBQSxZQUM3QixLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQ0Q7QUFBQSxZQUNKO0FBQ0ksb0JBQU0sSUFBSSxVQUFVLDRDQUE0QztBQUFBLFVBQ3hFO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTSxVQUFVLFdBQVcsS0FBSyxNQUFNO0FBQ2xDLGdCQUFNRSxXQUFVLEtBQUssZ0JBQWdCLEdBQUc7QUFDeEMsZ0JBQU0sTUFBYSxxQkFBY0EsVUFBUyxJQUFJLFdBQVcsSUFBSSxDQUFDO0FBQzlELGlCQUFPLElBQUksV0FBVyxHQUFHLEVBQUU7QUFBQSxRQUMvQjtBQUFBLFFBQ0EsTUFBTSxVQUFVLFdBQVcsS0FBSyxNQUFNO0FBQ2xDLGdCQUFNQSxXQUFVLEtBQUssZ0JBQWdCLEdBQUc7QUFDeEMsZ0JBQU0sTUFBYSxzQkFBZUEsVUFBUyxJQUFJLFdBQVcsSUFBSSxDQUFDO0FBQy9ELGlCQUFPLElBQUksV0FBVyxHQUFHLEVBQUU7QUFBQSxRQUMvQjtBQUFBLFFBQ0EsTUFBTSxZQUFZRCxTQUFRLEtBQUs7QUFDM0IsaUJBQU8sVUFBVSxVQUFVQSxTQUFRLGFBQWEsR0FBRyxDQUFDO0FBQUEsUUFDeEQ7QUFBQSxRQUNBLE1BQU0sWUFBWUEsU0FBUSxTQUFTLFdBQVcsYUFBYSxXQUFXO0FBQ2xFLGdCQUFNLE1BQU0sTUFBTSxVQUFVLFVBQVVBLFNBQVEsU0FBUyxFQUFFLEdBQUcsV0FBVyxNQUFNLEtBQUssS0FBSyxHQUFHLGFBQWEsU0FBUztBQUNoSCxpQkFBTyxhQUFhLEdBQUc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsZUFBZSxLQUFLLFVBQVU7QUFDMUIsZ0JBQU0sZUFBZSxLQUFLLFFBQVE7QUFDbEMsZ0JBQU0sY0FBYyxhQUFhLEdBQUc7QUFDcEMsY0FBSSxFQUFFLHVCQUF1QnJCLGtCQUFpQix1QkFBdUJDLGdCQUFlO0FBQ2hGLGtCQUFNLElBQUksVUFBVSwyQkFBMkI7QUFBQSxVQUNuRDtBQUFBLFFBQ0o7QUFBQSxRQUNBLGdCQUFnQixLQUFLO0FBQ2pCLGdCQUFNLE9BQU8sSUFBSSxLQUFLLFlBQVk7QUFDbEMsaUJBQU87QUFBQSxZQUNILEtBQUssY0FBYyxJQUFJO0FBQUEsRUFBYyxhQUFhLEdBQUcsRUFBRSxLQUFLLFNBQVMsUUFBUSxDQUFDO0FBQUEsV0FBYyxJQUFJO0FBQUEsWUFDaEcsU0FBZ0IsaUJBQVU7QUFBQSxVQUM5QjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsTUFBTSxZQUFZO0FBQUEsUUFDZCx1QkFBdUI7QUFBQSxRQUN2QixTQUFTO0FBQUEsUUFDVCxnQkFBZ0I7QUFBQSxRQUNoQixTQUFTO0FBQUEsUUFDVCxnQkFBZ0I7QUFBQSxRQUNoQixTQUFTO0FBQUEsUUFDVCxnQkFBZ0I7QUFBQSxRQUNoQixTQUFTO0FBQUEsUUFDVCxtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixtQkFBbUI7QUFBQSxRQUNuQix3QkFBd0I7QUFBQSxRQUN4QixtQkFBbUI7QUFBQSxRQUNuQix5QkFBeUI7QUFBQSxRQUN6QixtQkFBbUI7QUFBQSxRQUNuQix5QkFBeUI7QUFBQSxRQUN6QixtQkFBbUI7QUFBQSxRQUNuQix5QkFBeUI7QUFBQSxRQUN6QixtQkFBbUI7QUFBQSxRQUNuQix5QkFBeUI7QUFBQSxRQUN6QixtQkFBbUI7QUFBQSxRQUNuQix5QkFBeUI7QUFBQSxNQUM3QjtBQVNBLE1BQU1JLGdCQUFOLGNBQTJCLGNBQWM7QUFBQSxRQUNyQyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTztBQUFBLFFBQ2hCO0FBQUEsUUFDQSxTQUFTO0FBQ0wsZ0JBQU0sVUFBVSxVQUFVLE1BQU0sS0FBSyxNQUFXLFFBQUssY0FBYztBQUNuRSxpQkFBTyxVQUFVLE1BQU0sUUFBUSxZQUFpQixRQUFLLFlBQVk7QUFBQSxRQUNyRTtBQUFBLFFBQ0EsU0FBUztBQUNMLGdCQUFNLE1BQU0sS0FBSyxPQUFPO0FBQ3hCLGdCQUFNLE9BQU87QUFBQSxZQUNULEtBQUs7QUFBQSxZQUNMLEtBQUssS0FBSyxVQUFVO0FBQUEsWUFDcEIsU0FBUyxLQUFLO0FBQUEsWUFDZCxLQUFLLEtBQUs7QUFBQSxVQUNkO0FBQ0EsaUJBQU8sT0FBTyxPQUFPLE1BQU0sZUFBZSxPQUFPLEdBQUcsQ0FBQztBQUFBLFFBQ3pEO0FBQUEsUUFDQSxTQUFTLE1BQU07QUFDWCxjQUFJLENBQUMsS0FBSyxLQUFLO0FBQ1gsa0JBQU0sSUFBUyxlQUFlLDZEQUE2RDtBQUFBLFVBQy9GO0FBQ0EsZ0JBQU0sVUFBVSxJQUFTLFFBQUssZUFBZTtBQUM3QyxrQkFBUSxvQkFBb0IsWUFBWTtBQUN4QyxrQkFBUSxvQkFBb0IsYUFBYSxjQUFjLFVBQVUsSUFBUyxRQUFLLGlCQUFpQixxQkFBcUIsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUMvSCxnQkFBTSxNQUFNLFdBQVcsU0FBUyxNQUFNLEVBQUUsY0FBbUIsUUFBSyxhQUFhLENBQUM7QUFDOUUsa0JBQVEsYUFBYSxjQUFjLFVBQVUsR0FBRztBQUNoRCxlQUFLLE9BQU8sT0FBTyxLQUFLLGNBQWMsVUFBVSxPQUFPLENBQUM7QUFDeEQsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUVBLE1BQU1DLGVBQU4sY0FBMEIsY0FBYztBQUFBLFFBQ3BDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxPQUFPO0FBQUEsUUFDaEI7QUFBQSxRQUNBLFNBQVM7QUFDTCxnQkFBTSxVQUFVLFVBQVUsTUFBTSxLQUFLLE1BQVcsUUFBSyxhQUFhO0FBQ2xFLGlCQUFPLElBQVMsUUFBSyxZQUFZLFFBQVEsU0FBUztBQUFBLFFBQ3REO0FBQUEsUUFDQSxTQUFTO0FBQ0wsZ0JBQU0sTUFBTSxLQUFLLE9BQU87QUFDeEIsZ0JBQU0sT0FBTztBQUFBLFlBQ1QsS0FBSztBQUFBLFlBQ0wsS0FBSyxLQUFLLFVBQVU7QUFBQSxZQUNwQixTQUFTLEtBQUs7QUFBQSxZQUNkLEtBQUssS0FBSztBQUFBLFVBQ2Q7QUFDQSxpQkFBTyxPQUFPLE9BQU8sTUFBTSxlQUFlLE9BQU8sR0FBRyxDQUFDO0FBQUEsUUFDekQ7QUFBQSxRQUNBLFNBQVMsTUFBTTtBQUNYLGNBQUksQ0FBQyxLQUFLLEtBQUs7QUFDWCxrQkFBTSxJQUFTLGVBQWUsNkRBQTZEO0FBQUEsVUFDL0Y7QUFDQSxnQkFBTSxNQUFNLFdBQVcsU0FBUyxNQUFNLEVBQUUsY0FBbUIsUUFBSyxZQUFZLENBQUM7QUFDN0UsZ0JBQU0sVUFBVSxJQUFTLFFBQUssY0FBYztBQUM1QyxrQkFBUSxtQkFBbUIsWUFBWTtBQUN2QyxrQkFBUSxtQkFBbUIsYUFBYSxjQUFjLFVBQVUsSUFBUyxRQUFLLGlCQUFpQixxQkFBcUIsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM5SCxrQkFBUSxZQUFZLGNBQWMsTUFBTSxHQUFHLEVBQUU7QUFDN0MsZUFBSyxPQUFPLE9BQU8sS0FBSyxjQUFjLFVBQVUsT0FBTyxDQUFDO0FBQ3hELGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFFQSxNQUFNLGVBQU4sY0FBZ0MsZUFBZTtBQUFBLFFBQzNDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxPQUFPO0FBQ1osZUFBSyxTQUFTLENBQUM7QUFBQSxRQUNuQjtBQUFBLFFBQ0EsTUFBTSxTQUFTLFdBQVcsTUFBTTtBQUM1QixpQkFBTyxVQUFVLE9BQU8sV0FBVyxJQUFJO0FBQUEsUUFDM0M7QUFBQSxNQUNKO0FBRUEsTUFBTSxpQkFBTixjQUFrQyxlQUFlO0FBQUEsUUFDN0MsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLE9BQU87QUFDWixlQUFLLFNBQVMsQ0FBQztBQUFBLFFBQ25CO0FBQUEsUUFDQSxNQUFNLFNBQVMsV0FBVyxNQUFNO0FBQzVCLGlCQUFPLFVBQVUsT0FBTyxXQUFXLElBQUk7QUFBQSxRQUMzQztBQUFBLE1BQ0o7QUFFQSxNQUFNLGlCQUFOLGNBQWtDLGVBQWU7QUFBQSxRQUM3QyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTztBQUNaLGVBQUssU0FBUyxDQUFDO0FBQUEsUUFDbkI7QUFBQSxRQUNBLE1BQU0sU0FBUyxXQUFXLE1BQU07QUFDNUIsaUJBQU8sVUFBVSxPQUFPLFdBQVcsSUFBSTtBQUFBLFFBQzNDO0FBQUEsTUFDSjtBQUVBLE1BQU0saUJBQU4sY0FBa0MsZUFBZTtBQUFBLFFBQzdDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxPQUFPO0FBQ1osZUFBSyxTQUFTLENBQUM7QUFBQSxRQUNuQjtBQUFBLFFBQ0EsTUFBTSxTQUFTLFdBQVcsTUFBTTtBQUM1QixpQkFBTyxVQUFVLE9BQU8sV0FBVyxJQUFJO0FBQUEsUUFDM0M7QUFBQSxNQUNKO0FBRUEsTUFBTSxrQkFBTixjQUFtQyxlQUFlO0FBQUEsUUFDOUMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLE9BQU87QUFDWixlQUFLLFNBQVMsQ0FBQztBQUFBLFFBQ25CO0FBQUEsUUFDQSxNQUFNLFNBQVMsV0FBVyxNQUFNO0FBQzVCLGlCQUFPLFVBQVUsT0FBTyxXQUFXLElBQUk7QUFBQSxRQUMzQztBQUFBLE1BQ0o7QUFFQSxNQUFNLGtCQUFOLGNBQW1DLGVBQWU7QUFBQSxRQUM5QyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTztBQUNaLGVBQUssU0FBUyxDQUFDO0FBQUEsUUFDbkI7QUFBQSxRQUNBLE1BQU0sU0FBUyxXQUFXLE1BQU07QUFDNUIsaUJBQU8sVUFBVSxPQUFPLFdBQVcsSUFBSTtBQUFBLFFBQzNDO0FBQUEsTUFDSjtBQUVBLE1BQU0sa0JBQU4sY0FBbUMsZUFBZTtBQUFBLFFBQzlDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxPQUFPO0FBQ1osZUFBSyxTQUFTLENBQUM7QUFBQSxRQUNuQjtBQUFBLFFBQ0EsTUFBTSxTQUFTLFdBQVcsTUFBTTtBQUM1QixpQkFBTyxVQUFVLE9BQU8sV0FBVyxJQUFJO0FBQUEsUUFDM0M7QUFBQSxNQUNKO0FBRUEsTUFBTSxXQUFOLE1BQWU7QUFBQSxRQUNYLGFBQWEsWUFBWSxXQUFXLGFBQWEsV0FBVztBQUN4RCxnQkFBTSxhQUFhLElBQUlELGNBQWE7QUFDcEMscUJBQVcsWUFBWTtBQUN2QixxQkFBVyxjQUFjO0FBQ3pCLHFCQUFXLFNBQVMsVUFBVSxPQUFPLENBQUMsVUFBVSxLQUFLLGlCQUFpQixRQUFRLEtBQUssTUFBTSxFQUFFO0FBQzNGLGdCQUFNLFlBQVksSUFBSUMsYUFBWTtBQUNsQyxvQkFBVSxZQUFZO0FBQ3RCLG9CQUFVLGNBQWM7QUFDeEIsb0JBQVUsU0FBUyxVQUFVLE9BQU8sQ0FBQyxVQUFVLEtBQUssZ0JBQWdCLFFBQVEsS0FBSyxNQUFNLEVBQUU7QUFDekYsZ0JBQU0sT0FBTyxjQUFBYyxRQUFnQixvQkFBb0IsTUFBTTtBQUFBLFlBQ25ELFlBQVksS0FBSyxxQkFBcUIsVUFBVSxVQUFVO0FBQUEsWUFDMUQsbUJBQW1CO0FBQUEsY0FDZixRQUFRO0FBQUEsY0FDUixNQUFNO0FBQUEsWUFDVjtBQUFBLFlBQ0Esb0JBQW9CO0FBQUEsY0FDaEIsUUFBUTtBQUFBLGNBQ1IsTUFBTTtBQUFBLFlBQ1Y7QUFBQSxVQUNKLENBQUM7QUFDRCxxQkFBVyxPQUFPLEtBQUs7QUFDdkIsb0JBQVUsT0FBTyxLQUFLO0FBQ3RCLGdCQUFNLE1BQU07QUFBQSxZQUNSO0FBQUEsWUFDQTtBQUFBLFVBQ0o7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLGFBQWEsS0FBSyxXQUFXLEtBQUssTUFBTTtBQUNwQyxnQkFBTSxZQUFZLFVBQVUsaUJBQWlCLFVBQVUsSUFBSTtBQUMzRCxnQkFBTSxTQUFTLGNBQUFBLFFBQWdCLFdBQVcsU0FBUztBQUNuRCxpQkFBTyxPQUFPLE9BQU8sS0FBSyxJQUFJLENBQUM7QUFDL0IsY0FBSSxDQUFDLElBQUksS0FBSztBQUNWLGdCQUFJLE1BQU07QUFBQSxFQUFnQyxJQUFJLEtBQUssU0FBUyxRQUFRLENBQUM7QUFBQTtBQUFBLFVBQ3pFO0FBQ0EsZ0JBQU1FLFdBQVU7QUFBQSxZQUNaLEtBQUssSUFBSTtBQUFBLFVBQ2I7QUFDQSxnQkFBTSxZQUFZLE9BQU8sS0FBS0EsUUFBTztBQUNyQyxnQkFBTSxjQUFjLFVBQVUsTUFBTSxXQUFnQixRQUFLLGNBQWM7QUFDdkUsZ0JBQU0sZUFBb0IsUUFBUSxnQkFBZ0IsYUFBa0IsU0FBUyxJQUFJLElBQUksVUFBVSxVQUFVLEVBQUUsSUFBSTtBQUMvRyxpQkFBTyxhQUFhO0FBQUEsUUFDeEI7QUFBQSxRQUNBLGFBQWEsT0FBTyxXQUFXLEtBQUssV0FBVyxNQUFNO0FBQ2pELGdCQUFNLFlBQVksVUFBVSxpQkFBaUIsVUFBVSxJQUFJO0FBQzNELGdCQUFNLFNBQVMsY0FBQUYsUUFBZ0IsYUFBYSxTQUFTO0FBQ3JELGlCQUFPLE9BQU8sT0FBTyxLQUFLLElBQUksQ0FBQztBQUMvQixjQUFJLENBQUMsSUFBSSxLQUFLO0FBQ1YsZ0JBQUksTUFBTTtBQUFBLEVBQStCLElBQUksS0FBSyxTQUFTLFFBQVEsQ0FBQztBQUFBO0FBQUEsVUFDeEU7QUFDQSxnQkFBTUUsV0FBVTtBQUFBLFlBQ1osS0FBSyxJQUFJO0FBQUEsVUFDYjtBQUNBLGdCQUFNLGNBQWMsSUFBUyxRQUFLLGVBQWU7QUFDakQsZ0JBQU0sYUFBa0IsU0FBUyxJQUFJLElBQUksVUFBVSxVQUFVO0FBQzdELGdCQUFNLGlCQUFzQixRQUFRLGdCQUFnQixXQUFXLFdBQVcsSUFBSTtBQUM5RSxzQkFBWSxJQUFJLHdDQUFzQixjQUFjLGVBQWUsQ0FBQztBQUNwRSxzQkFBWSxJQUFJLHdDQUFzQixjQUFjLGVBQWUsQ0FBQztBQUNwRSxnQkFBTSxpQkFBaUIsT0FBTyxLQUFLLGNBQWMsVUFBVSxXQUFXLENBQUM7QUFDdkUsZ0JBQU0sS0FBSyxPQUFPLE9BQU9BLFVBQVMsY0FBYztBQUNoRCxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLGFBQWEsV0FBVyxXQUFXLFNBQVMsUUFBUTtBQUNoRCxnQkFBTSxZQUFZLEtBQUsscUJBQXFCLFFBQVEsVUFBVSxVQUFVO0FBQ3hFLGdCQUFNLE9BQU8sY0FBQUYsUUFBZ0IsV0FBVyxTQUFTO0FBQ2pELGdCQUFNLGdCQUFnQixVQUFVLE1BQU0sUUFBUSxNQUFXLFFBQUssY0FBYztBQUM1RSxnQkFBTSxrQkFBa0IsVUFBVSxNQUFNLGNBQWMsWUFBaUIsUUFBSyxZQUFZO0FBQ3hGLGVBQUssY0FBYyxPQUFPLEtBQUssZ0JBQWdCLFVBQVUsQ0FBQztBQUMxRCxnQkFBTSxlQUFlLFVBQVUsTUFBTSxVQUFVLE9BQU8sTUFBVyxRQUFLLGFBQWE7QUFDbkYsZ0JBQU0sT0FBTyxLQUFLLGNBQWMsT0FBTyxLQUFLLGFBQWEsU0FBUyxDQUFDO0FBQ25FLGNBQUksV0FBVyxNQUFNO0FBQ2pCLG1CQUFPO0FBQUEsVUFDWDtBQUNBLGlCQUFPLElBQUksV0FBVyxJQUFJLEVBQUUsT0FBTyxNQUFNLEdBQUcsVUFBVSxDQUFDO0FBQUEsUUFDM0Q7QUFBQSxRQUNBLGFBQWEsVUFBVUMsU0FBUSxLQUFLO0FBQ2hDLGtCQUFRQSxRQUFPLFlBQVksR0FBRztBQUFBLFlBQzFCLEtBQUs7QUFDRCxxQkFBTyxlQUFlLE9BQU8sR0FBRztBQUFBLFlBQ3BDLEtBQUs7QUFBQSxZQUNMLEtBQUs7QUFDRCxxQkFBTyxJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUU7QUFBQSxZQUNwQyxLQUFLLE9BQU87QUFDUixvQkFBTSxnQkFBZ0IsVUFBVSxNQUFNLElBQUksTUFBVyxRQUFLLGFBQWE7QUFDdkUscUJBQU8sY0FBYztBQUFBLFlBQ3pCO0FBQUEsWUFDQTtBQUNJLG9CQUFNLElBQVMsZUFBZSxnREFBZ0Q7QUFBQSxVQUN0RjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGFBQWEsVUFBVUEsU0FBUSxTQUFTLFdBQVcsYUFBYSxXQUFXO0FBQ3ZFLGtCQUFRQSxRQUFPLFlBQVksR0FBRztBQUFBLFlBQzFCLEtBQUssT0FBTztBQUNSLG9CQUFNLE1BQU07QUFDWixrQkFBSSxJQUFJLEdBQUc7QUFDUCxzQkFBTSxTQUFTLFdBQVcsU0FBUyxTQUFTLEVBQUUsY0FBbUIsUUFBSyxhQUFhLENBQUM7QUFDcEYsdUJBQU8sS0FBSyxpQkFBaUIsUUFBUSxXQUFXLGFBQWEsU0FBUztBQUFBLGNBQzFFLE9BQ0s7QUFDRCxzQkFBTSxTQUFTLFdBQVcsU0FBUyxTQUFTLEVBQUUsY0FBbUIsUUFBSyxZQUFZLENBQUM7QUFDbkYsdUJBQU8sS0FBSyxnQkFBZ0IsUUFBUSxXQUFXLGFBQWEsU0FBUztBQUFBLGNBQ3pFO0FBQUEsWUFDSjtBQUFBLFlBQ0EsS0FBSyxPQUFPO0FBQ1Isb0JBQU0sU0FBUyxJQUFTLFFBQUssWUFBWSxPQUFPO0FBQ2hELHFCQUFPLEtBQUssZ0JBQWdCLFFBQVEsV0FBVyxhQUFhLFNBQVM7QUFBQSxZQUN6RTtBQUFBLFlBQ0EsS0FBSyxRQUFRO0FBQ1Qsb0JBQU0sVUFBVSxVQUFVLE1BQU0sSUFBSSxXQUFXLE9BQU8sR0FBUSxRQUFLLGFBQWE7QUFDaEYsb0JBQU0sU0FBUyxJQUFTLFFBQUssWUFBWSxRQUFRLFNBQVM7QUFDMUQsbUJBQUssb0JBQW9CLFFBQVEsbUJBQW1CLFlBQVksVUFBVSxVQUFVO0FBQ3BGLHFCQUFPLEtBQUssZ0JBQWdCLFFBQVEsV0FBVyxhQUFhLFNBQVM7QUFBQSxZQUN6RTtBQUFBLFlBQ0EsS0FBSyxTQUFTO0FBQ1Ysb0JBQU0sVUFBVSxVQUFVLE1BQU0sSUFBSSxXQUFXLE9BQU8sR0FBUSxRQUFLLGNBQWM7QUFDakYsb0JBQU0sU0FBUyxVQUFVLE1BQU0sUUFBUSxZQUFpQixRQUFLLFlBQVk7QUFDekUsbUJBQUssb0JBQW9CLFFBQVEsb0JBQW9CLFlBQVksVUFBVSxVQUFVO0FBQ3JGLHFCQUFPLEtBQUssaUJBQWlCLFFBQVEsV0FBVyxhQUFhLFNBQVM7QUFBQSxZQUMxRTtBQUFBLFlBQ0E7QUFDSSxvQkFBTSxJQUFTLGVBQWUsaURBQWlEO0FBQUEsVUFDdkY7QUFBQSxRQUNKO0FBQUEsUUFDQSxPQUFPLG9CQUFvQixZQUFZLFlBQVk7QUFDL0MsY0FBSSxDQUFDLFlBQVk7QUFDYixrQkFBTSxJQUFTLFlBQVksMkNBQTJDO0FBQUEsVUFDMUU7QUFDQSxjQUFJLHVCQUF1QjtBQUMzQixjQUFJO0FBQ0EsbUNBQXVCLFVBQVUsTUFBTSxZQUFpQixRQUFLLGdCQUFnQixFQUFFO0FBQUEsVUFDbkYsU0FDTyxHQUFHO0FBQ04sa0JBQU0sSUFBUyxZQUFZLGlDQUFpQztBQUFBLFVBQ2hFO0FBQ0EsY0FBSSxxQkFBcUIsVUFBVSxNQUFNLHNCQUFzQjtBQUMzRCxrQkFBTSxJQUFTLFlBQVksaURBQWlEO0FBQUEsVUFDaEY7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhLGlCQUFpQixRQUFRLFdBQVcsYUFBYSxXQUFXO0FBQ3JFLGdCQUFNLFVBQVUsSUFBUyxRQUFLLGVBQWU7QUFDN0Msa0JBQVEsb0JBQW9CLFlBQVk7QUFDeEMsa0JBQVEsb0JBQW9CLGFBQWEsY0FBYyxVQUFVLElBQVMsUUFBSyxpQkFBaUIscUJBQXFCLFVBQVUsVUFBVSxDQUFDLENBQUM7QUFDM0ksa0JBQVEsYUFBYSxjQUFjLFVBQVUsTUFBTTtBQUNuRCxnQkFBTSxNQUFNLElBQUloQixjQUFhO0FBQzdCLGNBQUksT0FBTyxPQUFPLEtBQUssY0FBYyxVQUFVLE9BQU8sQ0FBQztBQUN2RCxjQUFJLFlBQVksT0FBTyxPQUFPLENBQUMsR0FBRyxTQUFTO0FBQzNDLGNBQUksY0FBYztBQUNsQixjQUFJLFNBQVM7QUFDYixpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLGFBQWEsZ0JBQWdCLFFBQVEsV0FBVyxhQUFhLFdBQVc7QUFDcEUsZ0JBQU0sVUFBVSxJQUFTLFFBQUssY0FBYztBQUM1QyxrQkFBUSxtQkFBbUIsWUFBWTtBQUN2QyxnQkFBTSxhQUFhLHFCQUFxQixVQUFVLFVBQVU7QUFDNUQsa0JBQVEsbUJBQW1CLGFBQWEsY0FBYyxVQUFVLElBQVMsUUFBSyxpQkFBaUIsVUFBVSxDQUFDO0FBQzFHLGtCQUFRLFlBQVksT0FBTztBQUMzQixnQkFBTSxNQUFNLElBQUlDLGFBQVk7QUFDNUIsY0FBSSxPQUFPLE9BQU8sS0FBSyxjQUFjLFVBQVUsT0FBTyxDQUFDO0FBQ3ZELGNBQUksWUFBWSxPQUFPLE9BQU8sQ0FBQyxHQUFHLFNBQVM7QUFDM0MsY0FBSSxjQUFjO0FBQ2xCLGNBQUksU0FBUztBQUNiLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsT0FBTyxxQkFBcUIsT0FBTztBQUMvQixrQkFBUSxNQUFNLFlBQVksR0FBRztBQUFBLFlBQ3pCLEtBQUs7QUFDRCxxQkFBTztBQUFBLFlBQ1gsS0FBSztBQUNELHFCQUFPO0FBQUEsWUFDWCxLQUFLO0FBQ0QscUJBQU87QUFBQSxZQUNYLEtBQUs7QUFDRCxxQkFBTztBQUFBLFlBQ1g7QUFDSSxxQkFBTztBQUFBLFVBQ2Y7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUNBLGVBQVMsa0JBQWtCLENBQUMsUUFBUTtBQUNwQyxlQUFTLG1CQUFtQixDQUFDLFFBQVEsYUFBYSxZQUFZO0FBRTlELE1BQU1DLGlCQUFOLGNBQWlDLGNBQWM7QUFBQSxRQUMzQyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssY0FBbUIsU0FBUztBQUNqQyxlQUFLLGlCQUFpQjtBQUFBLFlBQ2xCO0FBQUEsWUFBUztBQUFBLFlBQVc7QUFBQSxZQUFXO0FBQUEsWUFDL0I7QUFBQSxZQUFZO0FBQUEsWUFDWjtBQUFBLFlBQVk7QUFBQSxZQUFZO0FBQUEsVUFDNUI7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNLGNBQWMsV0FBVyxhQUFhLFdBQVc7QUFDbkQsZ0JBQU0sT0FBTyxNQUFNLFNBQVMsWUFBWTtBQUFBLFlBQ3BDLEdBQUc7QUFBQSxZQUNILE1BQU0sS0FBSztBQUFBLFVBQ2YsR0FBRyxhQUFhLFNBQVM7QUFDekIsaUJBQU87QUFBQSxZQUNILFlBQVksYUFBYSxLQUFLLFVBQVU7QUFBQSxZQUN4QyxXQUFXLGFBQWEsS0FBSyxTQUFTO0FBQUEsVUFDMUM7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNLE9BQU8sV0FBVyxLQUFLLE1BQU07QUFDL0IsaUJBQU8sU0FBUyxLQUFLLFdBQVcsYUFBYSxHQUFHLEdBQUcsSUFBSSxXQUFXLElBQUksQ0FBQztBQUFBLFFBQzNFO0FBQUEsUUFDQSxNQUFNLFNBQVMsV0FBVyxLQUFLLFdBQVcsTUFBTTtBQUM1QyxpQkFBTyxTQUFTLE9BQU8sV0FBVyxhQUFhLEdBQUcsR0FBRyxJQUFJLFdBQVcsU0FBUyxHQUFHLElBQUksV0FBVyxJQUFJLENBQUM7QUFBQSxRQUN4RztBQUFBLFFBQ0EsTUFBTSxZQUFZYyxTQUFRLEtBQUs7QUFDM0IsaUJBQU8sU0FBUyxVQUFVQSxTQUFRLGFBQWEsR0FBRyxDQUFDO0FBQUEsUUFDdkQ7QUFBQSxRQUNBLE1BQU0sWUFBWUEsU0FBUSxTQUFTLFdBQVcsYUFBYSxXQUFXO0FBQ2xFLGdCQUFNLE1BQU0sTUFBTSxTQUFTLFVBQVVBLFNBQVEsU0FBUyxFQUFFLEdBQUcsV0FBVyxNQUFNLEtBQUssS0FBSyxHQUFHLGFBQWEsU0FBUztBQUMvRyxpQkFBTyxhQUFhLEdBQUc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsZUFBZSxLQUFLLFVBQVU7QUFDMUIsZ0JBQU0sZUFBZSxLQUFLLFFBQVE7QUFDbEMsZ0JBQU0sY0FBYyxhQUFhLEdBQUc7QUFDcEMsY0FBSSxFQUFFLHVCQUF1QmhCLGlCQUFnQix1QkFBdUJDLGVBQWM7QUFDOUUsa0JBQU0sSUFBSSxVQUFVLDBCQUEwQjtBQUFBLFVBQ2xEO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNRSxnQkFBTixjQUFnQyxhQUFhO0FBQUEsUUFDekMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLGNBQW1CLFNBQVM7QUFBQSxRQUNyQztBQUFBLFFBQ0EsTUFBTSxjQUFjLFdBQVcsYUFBYSxXQUFXO0FBQ25ELGdCQUFNLE9BQU8sTUFBTSxTQUFTLFlBQVk7QUFBQSxZQUNwQyxHQUFHO0FBQUEsWUFDSCxNQUFNLEtBQUs7QUFBQSxVQUNmLEdBQUcsYUFBYSxTQUFTO0FBQ3pCLGlCQUFPO0FBQUEsWUFDSCxZQUFZLGFBQWEsS0FBSyxVQUFVO0FBQUEsWUFDeEMsV0FBVyxhQUFhLEtBQUssU0FBUztBQUFBLFVBQzFDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTSxZQUFZYSxTQUFRLEtBQUs7QUFDM0IsaUJBQU8sU0FBUyxVQUFVQSxTQUFRLGFBQWEsR0FBRyxDQUFDO0FBQUEsUUFDdkQ7QUFBQSxRQUNBLE1BQU0sWUFBWUEsU0FBUSxTQUFTLFdBQVcsYUFBYSxXQUFXO0FBQ2xFLGdCQUFNLE1BQU0sTUFBTSxTQUFTLFVBQVVBLFNBQVEsU0FBUyxFQUFFLEdBQUcsV0FBVyxNQUFNLEtBQUssS0FBSyxHQUFHLGFBQWEsU0FBUztBQUMvRyxpQkFBTyxhQUFhLEdBQUc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsZUFBZSxLQUFLLFVBQVU7QUFDMUIsZ0JBQU0sZUFBZSxLQUFLLFFBQVE7QUFDbEMsZ0JBQU0sY0FBYyxhQUFhLEdBQUc7QUFDcEMsY0FBSSxFQUFFLHVCQUF1QmhCLGlCQUFnQix1QkFBdUJDLGVBQWM7QUFDOUUsa0JBQU0sSUFBSSxVQUFVLDBCQUEwQjtBQUFBLFVBQ2xEO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTSxhQUFhLFdBQVcsU0FBUyxRQUFRO0FBQzNDLGdCQUFNLE9BQU8sTUFBTSxTQUFTLFdBQVcsRUFBRSxHQUFHLFdBQVcsUUFBUSxhQUFhLFVBQVUsTUFBTSxFQUFFLEdBQUcsYUFBYSxPQUFPLEdBQUcsTUFBTTtBQUM5SCxpQkFBTztBQUFBLFFBQ1g7QUFBQSxNQUNKO0FBRUEsTUFBTSxTQUFTO0FBQUEsUUFDWCxDQUFNLFFBQUssT0FBTyxHQUFHO0FBQUEsUUFDckIsU0FBYyxRQUFLO0FBQUEsUUFDbkIsQ0FBTSxRQUFLLE1BQU0sR0FBRztBQUFBLFFBQ3BCLFFBQWEsUUFBSztBQUFBLFFBQ2xCLENBQU0sUUFBSyxTQUFTLEdBQUc7QUFBQSxRQUN2QixXQUFnQixRQUFLO0FBQUEsUUFDckIsQ0FBTSxRQUFLLFFBQVEsR0FBRztBQUFBLFFBQ3RCLFVBQWUsUUFBSztBQUFBLE1BQ3hCO0FBU0EsTUFBTUcsZ0JBQU4sY0FBMkIsY0FBYztBQUFBLFFBQ3JDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxPQUFPO0FBQUEsUUFDaEI7QUFBQSxRQUNBLFNBQVM7QUFDTCxnQkFBTSxVQUFVLFVBQVUsTUFBTSxLQUFLLE1BQVcsUUFBSyxjQUFjO0FBQ25FLGlCQUFPLFVBQVUsTUFBTSxRQUFRLFlBQWlCLFFBQUssZUFBZTtBQUFBLFFBQ3hFO0FBQUEsUUFDQSxTQUFTO0FBQ0wsZ0JBQU0sTUFBTSxLQUFLLE9BQU87QUFDeEIsZ0JBQU0sT0FBTztBQUFBLFlBQ1QsS0FBSztBQUFBLFlBQ0wsS0FBSyxLQUFLLFVBQVU7QUFBQSxZQUNwQixTQUFTLEtBQUs7QUFBQSxZQUNkLEtBQUssS0FBSztBQUFBLFVBQ2Q7QUFDQSxpQkFBTyxPQUFPLE9BQU8sTUFBTSxlQUFlLE9BQU8sR0FBRyxDQUFDO0FBQUEsUUFDekQ7QUFBQSxRQUNBLFNBQVMsTUFBTTtBQUNYLGNBQUksQ0FBQyxLQUFLLEtBQUs7QUFDWCxrQkFBTSxJQUFTLGVBQWUsNkRBQTZEO0FBQUEsVUFDL0Y7QUFDQSxnQkFBTSxVQUFVLElBQVMsUUFBSyxlQUFlO0FBQzdDLGtCQUFRLG9CQUFvQixZQUFZLG1CQUFtQixLQUFLLEdBQUc7QUFDbkUsZ0JBQU0sTUFBTSxXQUFXLFNBQVMsTUFBTSxFQUFFLGNBQW1CLFFBQUssZ0JBQWdCLENBQUM7QUFDakYsa0JBQVEsYUFBYSxjQUFjLFVBQVUsR0FBRztBQUNoRCxlQUFLLE9BQU8sT0FBTyxLQUFLLGNBQWMsVUFBVSxPQUFPLENBQUM7QUFDeEQsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUVBLE1BQU1DLGVBQU4sY0FBMEIsY0FBYztBQUFBLFFBQ3BDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxPQUFPO0FBQUEsUUFDaEI7QUFBQSxRQUNBLFNBQVM7QUFDTCxnQkFBTSxVQUFVLFVBQVUsTUFBTSxLQUFLLE1BQVcsUUFBSyxhQUFhO0FBQ2xFLGlCQUFPLFFBQVE7QUFBQSxRQUNuQjtBQUFBLFFBQ0EsU0FBUztBQUNMLGdCQUFNLE1BQU0sS0FBSyxPQUFPO0FBQ3hCLGdCQUFNLE9BQU87QUFBQSxZQUNULEtBQUs7QUFBQSxZQUNMLEtBQUssS0FBSyxVQUFVO0FBQUEsWUFDcEIsU0FBUyxLQUFLO0FBQUEsWUFDZCxLQUFLLEtBQUs7QUFBQSxVQUNkO0FBQ0EsaUJBQU8sT0FBTyxPQUFPLE1BQU07QUFBQSxZQUN2QixHQUFHLDBCQUFRLFlBQVksR0FBRztBQUFBLFVBQzlCLENBQUM7QUFBQSxRQUNMO0FBQUEsUUFDQSxTQUFTLE1BQU07QUFDWCxjQUFJLENBQUMsS0FBSyxLQUFLO0FBQ1gsa0JBQU0sSUFBUyxlQUFlLDZEQUE2RDtBQUFBLFVBQy9GO0FBQ0EsY0FBSSxDQUFDLEtBQUssR0FBRztBQUNULGtCQUFNLElBQVMsZUFBZSx3REFBd0Q7QUFBQSxVQUMxRjtBQUNBLGdCQUFNLFVBQVUsSUFBUyxRQUFLLGNBQWM7QUFDNUMsa0JBQVEsbUJBQW1CLFlBQVksbUJBQW1CLEtBQUssR0FBRztBQUNsRSxrQkFBUSxZQUFZLDBCQUFRLGNBQWMsS0FBSyxDQUFDO0FBQ2hELGVBQUssT0FBTyxPQUFPLEtBQUssY0FBYyxVQUFVLE9BQU8sQ0FBQztBQUN4RCxpQkFBTztBQUFBLFFBQ1g7QUFBQSxNQUNKO0FBRUEsTUFBTSxXQUFOLE1BQWU7QUFBQSxRQUNYLGFBQWEsWUFBWSxXQUFXLGFBQWEsV0FBVztBQUN4RCxnQkFBTSxhQUFhLElBQUlELGNBQWE7QUFDcEMscUJBQVcsWUFBWTtBQUN2QixxQkFBVyxjQUFjO0FBQ3pCLHFCQUFXLFNBQVMsVUFBVSxPQUFPLENBQUMsVUFBVSxLQUFLLGlCQUFpQixRQUFRLEtBQUssTUFBTSxFQUFFO0FBQzNGLGdCQUFNLFlBQVksSUFBSUMsYUFBWTtBQUNsQyxvQkFBVSxZQUFZO0FBQ3RCLG9CQUFVLGNBQWM7QUFDeEIsb0JBQVUsU0FBUyxVQUFVLE9BQU8sQ0FBQyxVQUFVLEtBQUssZ0JBQWdCLFFBQVEsS0FBSyxNQUFNLEVBQUU7QUFDekYsZ0JBQU0sT0FBTyxVQUFVLFdBQVcsWUFBWTtBQUM5QyxnQkFBTSxPQUFPLGNBQUFVLFFBQWdCLG9CQUFvQixNQUFNO0FBQUEsWUFDbkQsbUJBQW1CO0FBQUEsY0FDZixRQUFRO0FBQUEsY0FDUixNQUFNO0FBQUEsWUFDVjtBQUFBLFlBQ0Esb0JBQW9CO0FBQUEsY0FDaEIsUUFBUTtBQUFBLGNBQ1IsTUFBTTtBQUFBLFlBQ1Y7QUFBQSxVQUNKLENBQUM7QUFDRCxxQkFBVyxPQUFPLEtBQUs7QUFDdkIsb0JBQVUsT0FBTyxLQUFLO0FBQ3RCLGdCQUFNLE1BQU07QUFBQSxZQUNSO0FBQUEsWUFDQTtBQUFBLFVBQ0o7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLGFBQWEsS0FBSyxXQUFXLEtBQUssTUFBTTtBQUNwQyxjQUFJLENBQUMsSUFBSSxLQUFLO0FBQ1YsZ0JBQUksTUFBTTtBQUFBLEVBQWdDLElBQUksS0FBSyxTQUFTLFFBQVEsQ0FBQztBQUFBO0FBQUEsVUFDekU7QUFDQSxnQkFBTUUsV0FBVTtBQUFBLFlBQ1osS0FBSyxJQUFJO0FBQUEsVUFDYjtBQUNBLGdCQUFNLFlBQVksY0FBQUYsUUFBZ0IsS0FBSyxNQUFNLE9BQU8sS0FBSyxJQUFJLEdBQUdFLFFBQU87QUFDdkUsaUJBQVksd0NBQXNCLGNBQWMsU0FBUztBQUFBLFFBQzdEO0FBQUEsUUFDQSxhQUFhLE9BQU8sV0FBVyxLQUFLLFdBQVcsTUFBTTtBQUNqRCxjQUFJLENBQUMsSUFBSSxLQUFLO0FBQ1YsZ0JBQUksTUFBTTtBQUFBLEVBQStCLElBQUksS0FBSyxTQUFTLFFBQVEsQ0FBQztBQUFBO0FBQUEsVUFDeEU7QUFDQSxnQkFBTUEsV0FBVTtBQUFBLFlBQ1osS0FBSyxJQUFJO0FBQUEsVUFDYjtBQUNBLGdCQUFNLEtBQUssY0FBQUYsUUFBZ0IsT0FBTyxNQUFNLE9BQU8sS0FBSyxJQUFJLEdBQUdFLFVBQVMsT0FBTyxLQUFLLFNBQVMsQ0FBQztBQUMxRixpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLGFBQWEsV0FBVyxXQUFXLFNBQVMsUUFBUTtBQUNoRCxnQkFBTSxZQUFZLGNBQUFGLFFBQWdCLGdCQUFnQjtBQUFBLFlBQzlDLEtBQUssVUFBVSxPQUFPO0FBQUEsWUFDdEIsUUFBUTtBQUFBLFlBQ1IsTUFBTTtBQUFBLFVBQ1YsQ0FBQztBQUNELGdCQUFNLGFBQWEsY0FBQUEsUUFBZ0IsaUJBQWlCO0FBQUEsWUFDaEQsS0FBSyxRQUFRO0FBQUEsWUFDYixRQUFRO0FBQUEsWUFDUixNQUFNO0FBQUEsVUFDVixDQUFDO0FBQ0QsZ0JBQU0sT0FBTyxjQUFBQSxRQUFnQixjQUFjO0FBQUEsWUFDdkM7QUFBQSxZQUNBO0FBQUEsVUFDSixDQUFDO0FBQ0QsaUJBQU8sSUFBSSxXQUFXLElBQUksRUFBRSxPQUFPLE1BQU0sR0FBRyxVQUFVLENBQUM7QUFBQSxRQUMzRDtBQUFBLFFBQ0EsYUFBYSxVQUFVQyxTQUFRLEtBQUs7QUFDaEMsa0JBQVFBLFFBQU8sWUFBWSxHQUFHO0FBQUEsWUFDMUIsS0FBSztBQUNELHFCQUFPLGVBQWUsT0FBTyxHQUFHO0FBQUEsWUFDcEMsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUNELHFCQUFPLElBQUksV0FBVyxJQUFJLElBQUksRUFBRTtBQUFBLFlBQ3BDLEtBQUssT0FBTztBQUNSLG9CQUFNLGdCQUFnQixVQUFVLE1BQU0sSUFBSSxNQUFXLFFBQUssYUFBYTtBQUN2RSxxQkFBTyxjQUFjO0FBQUEsWUFDekI7QUFBQSxZQUNBO0FBQ0ksb0JBQU0sSUFBUyxlQUFlLGdEQUFnRDtBQUFBLFVBQ3RGO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYSxVQUFVQSxTQUFRLFNBQVMsV0FBVyxhQUFhLFdBQVc7QUFDdkUsa0JBQVFBLFFBQU8sWUFBWSxHQUFHO0FBQUEsWUFDMUIsS0FBSyxPQUFPO0FBQ1Isb0JBQU0sTUFBTTtBQUNaLGtCQUFJLElBQUksR0FBRztBQUNQLHNCQUFNLFNBQVMsV0FBVyxTQUFTLFNBQVMsRUFBRSxjQUFtQixRQUFLLGdCQUFnQixDQUFDO0FBQ3ZGLHVCQUFPLEtBQUssaUJBQWlCLFFBQVEsV0FBVyxhQUFhLFNBQVM7QUFBQSxjQUMxRSxPQUNLO0FBQ0Qsb0JBQUksQ0FBQyxJQUFJLEdBQUc7QUFDUix3QkFBTSxJQUFJLFVBQVUsd0NBQXdDO0FBQUEsZ0JBQ2hFO0FBQ0EsdUJBQU8sS0FBSyxnQkFBZ0IsMEJBQVEsY0FBYyxJQUFJLENBQUMsR0FBRyxXQUFXLGFBQWEsU0FBUztBQUFBLGNBQy9GO0FBQUEsWUFDSjtBQUFBLFlBQ0EsS0FBSyxPQUFPO0FBQ1IscUJBQU8sS0FBSyxnQkFBZ0IsU0FBUyxXQUFXLGFBQWEsU0FBUztBQUFBLFlBQzFFO0FBQUEsWUFDQSxLQUFLLFFBQVE7QUFDVCxvQkFBTSxVQUFVLFVBQVUsTUFBTSxJQUFJLFdBQVcsT0FBTyxHQUFRLFFBQUssYUFBYTtBQUNoRixxQkFBTyxLQUFLLGdCQUFnQixRQUFRLFdBQVcsV0FBVyxhQUFhLFNBQVM7QUFBQSxZQUNwRjtBQUFBLFlBQ0EsS0FBSyxTQUFTO0FBQ1Ysb0JBQU0sVUFBVSxVQUFVLE1BQU0sSUFBSSxXQUFXLE9BQU8sR0FBUSxRQUFLLGNBQWM7QUFDakYsb0JBQU0sU0FBUyxVQUFVLE1BQU0sUUFBUSxZQUFpQixRQUFLLGVBQWU7QUFDNUUscUJBQU8sS0FBSyxpQkFBaUIsUUFBUSxXQUFXLGFBQWEsU0FBUztBQUFBLFlBQzFFO0FBQUEsWUFDQTtBQUNJLG9CQUFNLElBQVMsZUFBZSxpREFBaUQ7QUFBQSxVQUN2RjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE9BQU8saUJBQWlCLFFBQVEsV0FBVyxhQUFhLFdBQVc7QUFDL0QsZ0JBQU0sTUFBTSxJQUFJWixjQUFhO0FBQzdCLGNBQUksU0FBUztBQUFBLFlBQ1QsS0FBSyxVQUFVO0FBQUEsWUFDZixHQUFHLDBCQUFRLFlBQVksT0FBTyxDQUFDO0FBQUEsVUFDbkMsQ0FBQztBQUNELGNBQUksWUFBWSxPQUFPLE9BQU8sQ0FBQyxHQUFHLFNBQVM7QUFDM0MsY0FBSSxjQUFjO0FBQ2xCLGNBQUksU0FBUztBQUNiLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsYUFBYSxnQkFBZ0IsUUFBUSxXQUFXLGFBQWEsV0FBVztBQUNwRSxnQkFBTSxNQUFNLElBQUlDLGFBQVk7QUFDNUIsY0FBSSxTQUFTO0FBQUEsWUFDVCxLQUFLLFVBQVU7QUFBQSxZQUNmLEdBQUcsMEJBQVEsWUFBWSxNQUFNO0FBQUEsVUFDakMsQ0FBQztBQUNELGNBQUksWUFBWSxPQUFPLE9BQU8sQ0FBQyxHQUFHLFNBQVM7QUFDM0MsY0FBSSxjQUFjO0FBQ2xCLGNBQUksU0FBUztBQUNiLGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFDQSxlQUFTLGtCQUFrQixDQUFDLFFBQVE7QUFDcEMsZUFBUyxtQkFBbUIsQ0FBQyxRQUFRLGFBQWEsWUFBWTtBQUU5RCxNQUFNQyxpQkFBTixjQUFpQyxjQUFjO0FBQUEsUUFDM0MsTUFBTSxjQUFjLFdBQVcsYUFBYSxXQUFXO0FBQ25ELGdCQUFNLE9BQU8sTUFBTSxTQUFTLFlBQVk7QUFBQSxZQUNwQyxNQUFNLEtBQUs7QUFBQSxZQUNYLFlBQVksVUFBVSxXQUFXLFFBQVEsUUFBUSxJQUFJO0FBQUEsVUFDekQsR0FBRyxhQUFhLFNBQVM7QUFDekIsaUJBQU87QUFBQSxZQUNILFlBQVksYUFBYSxLQUFLLFVBQVU7QUFBQSxZQUN4QyxXQUFXLGFBQWEsS0FBSyxTQUFTO0FBQUEsVUFDMUM7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNLE9BQU8sV0FBVyxLQUFLLE1BQU07QUFDL0IsaUJBQU8sU0FBUyxLQUFLLFdBQVcsYUFBYSxHQUFHLEdBQUcsSUFBSSxXQUFXLElBQUksQ0FBQztBQUFBLFFBQzNFO0FBQUEsUUFDQSxNQUFNLFNBQVMsV0FBVyxLQUFLLFdBQVcsTUFBTTtBQUM1QyxpQkFBTyxTQUFTLE9BQU8sV0FBVyxhQUFhLEdBQUcsR0FBRyxJQUFJLFdBQVcsU0FBUyxHQUFHLElBQUksV0FBVyxJQUFJLENBQUM7QUFBQSxRQUN4RztBQUFBLFFBQ0EsTUFBTSxZQUFZVSxTQUFRLEtBQUs7QUFDM0IsaUJBQU8sU0FBUyxVQUFVQSxTQUFRLGFBQWEsR0FBRyxDQUFDO0FBQUEsUUFDdkQ7QUFBQSxRQUNBLE1BQU0sWUFBWUEsU0FBUSxTQUFTLFdBQVcsYUFBYSxXQUFXO0FBQ2xFLGdCQUFNLE1BQU0sTUFBTSxTQUFTLFVBQVVBLFNBQVEsU0FBUyxFQUFFLEdBQUcsV0FBVyxNQUFNLEtBQUssS0FBSyxHQUFHLGFBQWEsU0FBUztBQUMvRyxpQkFBTyxhQUFhLEdBQUc7QUFBQSxRQUMzQjtBQUFBLE1BQ0o7QUFFQSxNQUFNVCxrQkFBTixjQUFrQyxlQUFlO0FBQUEsUUFDN0MsTUFBTSxjQUFjLFdBQVcsYUFBYSxXQUFXO0FBQ25ELGdCQUFNLE9BQU8sTUFBTSxTQUFTLFlBQVk7QUFBQSxZQUNwQyxNQUFNLEtBQUs7QUFBQSxZQUNYLFlBQVksVUFBVSxXQUFXLFlBQVk7QUFBQSxVQUNqRCxHQUFHLGFBQWEsU0FBUztBQUN6QixpQkFBTztBQUFBLFlBQ0gsWUFBWSxhQUFhLEtBQUssVUFBVTtBQUFBLFlBQ3hDLFdBQVcsYUFBYSxLQUFLLFNBQVM7QUFBQSxVQUMxQztBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU0sYUFBYSxXQUFXLFNBQVMsUUFBUTtBQUMzQyxnQkFBTSxPQUFPLE1BQU0sU0FBUyxXQUFXLEVBQUUsR0FBRyxXQUFXLFFBQVEsYUFBYSxVQUFVLE1BQU0sRUFBRSxHQUFHLGFBQWEsT0FBTyxHQUFHLE1BQU07QUFDOUgsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxNQUFNLFlBQVlTLFNBQVEsS0FBSztBQUMzQixpQkFBTyxTQUFTLFVBQVVBLFNBQVEsYUFBYSxHQUFHLENBQUM7QUFBQSxRQUN2RDtBQUFBLFFBQ0EsTUFBTSxZQUFZQSxTQUFRLFNBQVMsV0FBVyxhQUFhLFdBQVc7QUFDbEUsZ0JBQU0sTUFBTSxNQUFNLFNBQVMsVUFBVUEsU0FBUSxTQUFTLEVBQUUsR0FBRyxXQUFXLE1BQU0sS0FBSyxLQUFLLEdBQUcsYUFBYSxTQUFTO0FBQy9HLGlCQUFPLGFBQWEsR0FBRztBQUFBLFFBQzNCO0FBQUEsTUFDSjtBQUVBLE1BQU0saUJBQU4sY0FBNkI1QixXQUFVO0FBQUEsTUFDdkM7QUFFQSxNQUFNb0Isa0JBQU4sY0FBa0MsZUFBZTtBQUFBLFFBQzdDLE1BQU0sYUFBYSxXQUFXLFNBQVMsUUFBUTtBQUMzQyxpQkFBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDcEMsa0JBQU0sT0FBWSx3Q0FBc0IsY0FBYyxVQUFVLElBQUk7QUFDcEUsa0JBQU1VLFFBQU8sVUFBVSxLQUFLLEtBQUssUUFBUSxLQUFLLEVBQUU7QUFDaEQsMEJBQUFILFFBQWdCLE9BQU8sYUFBYSxPQUFPLEVBQUUsTUFBTSxPQUFPLEtBQUssSUFBSSxHQUFHLFVBQVUsWUFBWSxVQUFVLEdBQUdHLE9BQU0sQ0FBQyxLQUFLLGdCQUFnQjtBQUNqSSxrQkFBSSxLQUFLO0FBQ0wsdUJBQU8sR0FBRztBQUFBLGNBQ2QsT0FDSztBQUNELHdCQUFRLElBQUksV0FBVyxXQUFXLEVBQUUsTUFBTTtBQUFBLGNBQzlDO0FBQUEsWUFDSixDQUFDO0FBQUEsVUFDTCxDQUFDO0FBQUEsUUFDTDtBQUFBLFFBQ0EsTUFBTSxZQUFZRixTQUFRLFNBQVMsV0FBVyxhQUFhLFdBQVc7QUFDbEUsY0FBSUEsWUFBVyxPQUFPO0FBQ2xCLGtCQUFNLE1BQU0sSUFBSSxlQUFlO0FBQy9CLGdCQUFJLE9BQU8sT0FBTyxLQUFLLE9BQU87QUFDOUIsZ0JBQUksWUFBWSxFQUFFLE1BQU0sS0FBSyxLQUFLO0FBQ2xDLGdCQUFJLGNBQWM7QUFDbEIsZ0JBQUksU0FBUztBQUNiLG1CQUFPLGFBQWEsR0FBRztBQUFBLFVBQzNCO0FBQ0EsZ0JBQU0sSUFBUyxlQUFlLHVCQUF1QjtBQUFBLFFBQ3pEO0FBQUEsUUFDQSxlQUFlLEtBQUssVUFBVTtBQUMxQixnQkFBTSxlQUFlLEtBQUssUUFBUTtBQUNsQyxjQUFJLEVBQUUsYUFBYSxHQUFHLGFBQWEsaUJBQWlCO0FBQ2hELGtCQUFNLElBQUksVUFBVSw2QkFBNkI7QUFBQSxVQUNyRDtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsTUFBTSxnQkFBTixjQUE0QjVCLFdBQVU7QUFBQSxRQUNsQyxJQUFJLE1BQU07QUFDTixnQkFBTThCLFFBQU8sS0FBSyxVQUFVLEtBQUssS0FBSyxZQUFZO0FBQ2xELGlCQUFPLEtBQUtBLE1BQUssUUFBUSxRQUFRLEVBQUUsQ0FBQztBQUFBLFFBQ3hDO0FBQUEsUUFDQSxJQUFJLElBQUksT0FBTztBQUFBLFFBQ2Y7QUFBQSxNQUNKO0FBQ0EsaUJBQVc7QUFBQSxRQUNQLFNBQVMsRUFBRSxNQUFNLEtBQUssV0FBVyx1QkFBdUIsQ0FBQztBQUFBLE1BQzdELEdBQUcsY0FBYyxXQUFXLFFBQVEsTUFBTTtBQUUxQyxNQUFNVCxnQkFBTixjQUFnQyxhQUFhO0FBQUEsUUFDekMsTUFBTSxjQUFjLFdBQVcsYUFBYSxXQUFXO0FBQ25ELGdCQUFNLFVBQVUsVUFBVSxVQUFVLEtBQUssaUJBQWlCLFVBQVUsS0FBSyxJQUFJLE1BQU0sS0FBSztBQUN4RixnQkFBTSxNQUFNLElBQUksY0FBYztBQUM5QixjQUFJLFlBQVk7QUFBQSxZQUNaLEdBQUc7QUFBQSxZQUNIO0FBQUEsWUFDQSxNQUFNLEtBQUs7QUFBQSxVQUNmO0FBQ0EsY0FBSSxjQUFjO0FBQ2xCLGNBQUksU0FBUztBQUNiLGNBQUksT0FBTyxjQUFBTSxRQUFnQixZQUFZLFVBQVUsQ0FBQztBQUNsRCxpQkFBTyxhQUFhLEdBQUc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsTUFBTSxPQUFPLFdBQVcsS0FBSyxNQUFNO0FBQy9CLGdCQUFNLFlBQVksVUFBVSxpQkFBaUIsSUFBSSxVQUFVLElBQUk7QUFDL0QsZ0JBQU0sT0FBTyxjQUFBQSxRQUFnQixXQUFXLFdBQVcsYUFBYSxHQUFHLEVBQUUsSUFBSSxFQUNwRSxPQUFPLE9BQU8sS0FBSyxJQUFJLENBQUMsRUFBRSxPQUFPO0FBQ3RDLGlCQUFPLElBQUksV0FBVyxJQUFJLEVBQUU7QUFBQSxRQUNoQztBQUFBLFFBQ0EsTUFBTSxTQUFTLFdBQVcsS0FBSyxXQUFXLE1BQU07QUFDNUMsZ0JBQU0sWUFBWSxVQUFVLGlCQUFpQixJQUFJLFVBQVUsSUFBSTtBQUMvRCxnQkFBTSxPQUFPLGNBQUFBLFFBQWdCLFdBQVcsV0FBVyxhQUFhLEdBQUcsRUFBRSxJQUFJLEVBQ3BFLE9BQU8sT0FBTyxLQUFLLElBQUksQ0FBQyxFQUFFLE9BQU87QUFDdEMsaUJBQU8sS0FBSyxRQUFRLE9BQU8sS0FBSyxTQUFTLENBQUMsTUFBTTtBQUFBLFFBQ3BEO0FBQUEsUUFDQSxNQUFNLFlBQVlDLFNBQVEsU0FBUyxXQUFXLGFBQWEsV0FBVztBQUNsRSxjQUFJO0FBQ0osa0JBQVFBLFFBQU8sWUFBWSxHQUFHO0FBQUEsWUFDMUIsS0FBSztBQUNELG9CQUFNLFdBQVcsU0FBUyxTQUFTLEVBQUUsY0FBYyxjQUFjLENBQUM7QUFDbEU7QUFBQSxZQUNKLEtBQUs7QUFDRCxvQkFBTSxJQUFJLGNBQWM7QUFDeEIsa0JBQUksT0FBTyxPQUFPLEtBQUssT0FBTztBQUM5QjtBQUFBLFlBQ0o7QUFDSSxvQkFBTSxJQUFTLGVBQWUsZ0NBQWdDO0FBQUEsVUFDdEU7QUFDQSxjQUFJLFlBQVk7QUFBQSxZQUNaLE1BQU0sRUFBRSxNQUFNLFVBQVUsS0FBSyxLQUFLO0FBQUEsWUFDbEMsTUFBTSxLQUFLO0FBQUEsWUFDWCxRQUFRLElBQUksS0FBSyxVQUFVO0FBQUEsVUFDL0I7QUFDQSxjQUFJLGNBQWM7QUFDbEIsY0FBSSxTQUFTO0FBQ2IsaUJBQU8sYUFBYSxHQUFHO0FBQUEsUUFDM0I7QUFBQSxRQUNBLE1BQU0sWUFBWUEsU0FBUSxLQUFLO0FBQzNCLGtCQUFRQSxRQUFPLFlBQVksR0FBRztBQUFBLFlBQzFCLEtBQUs7QUFDRCxxQkFBTyxlQUFlLE9BQU8sYUFBYSxHQUFHLENBQUM7QUFBQSxZQUNsRCxLQUFLO0FBQ0QscUJBQU8sSUFBSSxXQUFXLGFBQWEsR0FBRyxFQUFFLElBQUksRUFBRTtBQUFBLFlBQ2xEO0FBQ0ksb0JBQU0sSUFBUyxlQUFlLGdDQUFnQztBQUFBLFVBQ3RFO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZUFBZSxLQUFLLFVBQVU7QUFDMUIsZ0JBQU0sZUFBZSxLQUFLLFFBQVE7QUFDbEMsY0FBSSxFQUFFLGFBQWEsR0FBRyxhQUFhLGdCQUFnQjtBQUMvQyxrQkFBTSxJQUFJLFVBQVUsNEJBQTRCO0FBQUEsVUFDcEQ7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUVBLE1BQU0sZ0JBQU4sY0FBNEI1QixXQUFVO0FBQUEsTUFDdEM7QUFFQSxNQUFNc0IsZ0JBQU4sY0FBZ0MsYUFBYTtBQUFBLFFBQ3pDLE1BQU0sWUFBWU0sU0FBUSxTQUFTLFdBQVcsYUFBYSxXQUFXO0FBQ2xFLGNBQUlBLFFBQU8sWUFBWSxNQUFNLE9BQU87QUFDaEMsa0JBQU0sSUFBUyxlQUFlLHlCQUF5QjtBQUFBLFVBQzNEO0FBQ0EsZ0JBQU0sTUFBTSxJQUFJLGNBQWM7QUFDOUIsY0FBSSxPQUFPLE9BQU8sS0FBSyxPQUFPO0FBQzlCLGNBQUksWUFBWSxFQUFFLE1BQU0sS0FBSyxLQUFLO0FBQ2xDLGNBQUksY0FBYztBQUNsQixjQUFJLFNBQVM7QUFDYixpQkFBTyxhQUFhLEdBQUc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsTUFBTSxhQUFhLFFBQVEsU0FBUyxRQUFRO0FBQ3hDLGdCQUFNRSxRQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsS0FBSyxFQUFFO0FBQzdDLGdCQUFNLGFBQWEsY0FBQUgsUUFBZ0IsV0FBV0csS0FBSSxFQUFFLE9BQU8sRUFBRTtBQUM3RCxnQkFBTSxhQUFhLFNBQVM7QUFDNUIsZ0JBQU0sT0FBTyx3Q0FBd0IsYUFBYSxPQUFPLElBQUk7QUFDN0QsZ0JBQU0sTUFBTSxjQUFBSCxRQUFnQixXQUFXRyxPQUFNLHdDQUF3QixhQUFhLE9BQU8sSUFBSSxDQUFDLEVBQ3pGLE9BQU8sd0NBQXdCLGFBQWEsYUFBYSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQ3ZFLE9BQU87QUFDWixnQkFBTSxTQUFTLENBQUMsT0FBTyxNQUFNLENBQUMsQ0FBQztBQUMvQixnQkFBTSxhQUFhLEtBQUssS0FBSyxhQUFhLFVBQVUsSUFBSTtBQUN4RCxtQkFBUyxJQUFJLEdBQUcsSUFBSSxZQUFZLEVBQUUsR0FBRztBQUNqQyxtQkFBTyxLQUFLLGNBQUFILFFBQWdCLFdBQVdHLE9BQU0sR0FBRyxFQUMzQyxPQUFPLE9BQU8sT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsTUFBTSxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDN0QsT0FBTyxDQUFDO0FBQUEsVUFDakI7QUFDQSxpQkFBTyxPQUFPLE9BQU8sTUFBTSxFQUFFLE1BQU0sR0FBRyxVQUFVO0FBQUEsUUFDcEQ7QUFBQSxRQUNBLGVBQWUsS0FBSyxVQUFVO0FBQzFCLGdCQUFNLGVBQWUsS0FBSyxRQUFRO0FBQ2xDLGNBQUksRUFBRSxhQUFhLEdBQUcsYUFBYSxnQkFBZ0I7QUFDL0Msa0JBQU0sSUFBSSxVQUFVLDRCQUE0QjtBQUFBLFVBQ3BEO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNLGNBQU4sTUFBa0I7QUFBQSxRQUNkLE9BQU8sT0FBTyxXQUFXLE1BQU07QUFDM0IsZ0JBQU1BLFFBQU8sY0FBQUgsUUFBZ0IsV0FBVyxVQUFVLEtBQUssWUFBWSxHQUFHLEVBQUUsY0FBYyxVQUFVLE9BQU8sQ0FBQyxFQUNuRyxPQUFPLE9BQU8sS0FBSyxJQUFJLENBQUMsRUFBRSxPQUFPO0FBQ3RDLGlCQUFPLElBQUksV0FBV0csS0FBSSxFQUFFO0FBQUEsUUFDaEM7QUFBQSxNQUNKO0FBRUEsTUFBTVAsb0JBQU4sY0FBb0MsaUJBQWlCO0FBQUEsUUFDakQsTUFBTSxTQUFTLFdBQVcsTUFBTTtBQUM1QixpQkFBTyxZQUFZLE9BQU8sV0FBVyxJQUFJO0FBQUEsUUFDN0M7QUFBQSxNQUNKO0FBRUEsTUFBTUMsb0JBQU4sY0FBb0MsaUJBQWlCO0FBQUEsUUFDakQsTUFBTSxTQUFTLFdBQVcsTUFBTTtBQUM1QixpQkFBTyxZQUFZLE9BQU8sV0FBVyxJQUFJO0FBQUEsUUFDN0M7QUFBQSxNQUNKO0FBRUEsTUFBTUMsZ0JBQU4sY0FBZ0MsYUFBYTtBQUFBLFFBQ3pDLGNBQWM7QUFDVixjQUFJTTtBQUNKLGdCQUFNO0FBQ04sZUFBSyxVQUFVLElBQUksSUFBSTlCLGdCQUFlLENBQUM7QUFDdkMsZUFBSyxVQUFVLElBQUksSUFBSUUsZ0JBQWUsQ0FBQztBQUN2QyxlQUFLLFVBQVUsSUFBSSxJQUFJQyxnQkFBZSxDQUFDO0FBQ3ZDLGVBQUssVUFBVSxJQUFJLElBQUlGLGlCQUFnQixDQUFDO0FBQ3hDLGVBQUssVUFBVSxJQUFJLElBQUlHLGVBQWMsQ0FBQztBQUN0QyxlQUFLLFVBQVUsSUFBSSxJQUFJQyxnQkFBZSxDQUFDO0FBQ3ZDLGdCQUFNLFVBQWlCLGtCQUFXO0FBQ2xDLGNBQUksUUFBUSxTQUFTLFNBQVMsR0FBRztBQUM3QixpQkFBSyxVQUFVLElBQUksSUFBSSxlQUFlLENBQUM7QUFBQSxVQUMzQztBQUNBLGVBQUssVUFBVSxJQUFJLElBQUksbUJBQW1CLENBQUM7QUFDM0MsZUFBSyxVQUFVLElBQUksSUFBSUcsZ0JBQWUsQ0FBQztBQUN2QyxlQUFLLFVBQVUsSUFBSSxJQUFJQyxnQkFBZSxDQUFDO0FBQ3ZDLGVBQUssVUFBVSxJQUFJLElBQUlDLGlCQUFnQixDQUFDO0FBQ3hDLGVBQUssVUFBVSxJQUFJLElBQUksY0FBYyxDQUFDO0FBQ3RDLGVBQUssVUFBVSxJQUFJLElBQUlHLGVBQWMsQ0FBQztBQUN0QyxlQUFLLFVBQVUsSUFBSSxJQUFJQyxjQUFhLENBQUM7QUFDckMsZUFBSyxVQUFVLElBQUksSUFBSSxhQUFhLENBQUM7QUFDckMsZUFBSyxVQUFVLElBQUksSUFBSSxlQUFlLENBQUM7QUFDdkMsZUFBSyxVQUFVLElBQUksSUFBSSxlQUFlLENBQUM7QUFDdkMsZUFBSyxVQUFVLElBQUksSUFBSSxlQUFlLENBQUM7QUFDdkMsZUFBSyxVQUFVLElBQUksSUFBSUssZ0JBQWUsQ0FBQztBQUN2QyxlQUFLLFVBQVUsSUFBSSxJQUFJQyxjQUFhLENBQUM7QUFDckMsZUFBSyxVQUFVLElBQUksSUFBSUMsY0FBYSxDQUFDO0FBQ3JDLGdCQUFNLG9CQUFvQlMsTUFBSyxVQUFVLEtBQWEsZ0JBQU8sT0FBTyxRQUFRQSxRQUFPLFNBQVMsU0FBU0EsSUFBRyxDQUFDO0FBQ3pHLGNBQUksb0JBQW9CLFNBQVMsa0JBQWtCLEVBQUUsS0FBSyxJQUFJO0FBQzFELGlCQUFLLFVBQVUsSUFBSSxJQUFJUixrQkFBaUIsQ0FBQztBQUN6QyxpQkFBSyxVQUFVLElBQUksSUFBSUMsa0JBQWlCLENBQUM7QUFBQSxVQUM3QztBQUNBLGdCQUFNLFNBQWdCLGlCQUFVO0FBQ2hDLGNBQUksT0FBTyxTQUFTLFVBQVUsR0FBRztBQUM3QixpQkFBSyxVQUFVLElBQUksSUFBSSxnQkFBZ0IsQ0FBQztBQUFBLFVBQzVDO0FBQ0EsY0FBSSxPQUFPLFNBQVMsVUFBVSxHQUFHO0FBQzdCLGlCQUFLLFVBQVUsSUFBSSxJQUFJLGdCQUFnQixDQUFDO0FBQUEsVUFDNUM7QUFDQSxjQUFJLE9BQU8sU0FBUyxVQUFVLEdBQUc7QUFDN0IsaUJBQUssVUFBVSxJQUFJLElBQUksZ0JBQWdCLENBQUM7QUFBQSxVQUM1QztBQUNBLGNBQUksb0JBQW9CLFNBQVMsa0JBQWtCLEVBQUUsS0FBSyxJQUFJO0FBQzFELGlCQUFLLFVBQVUsSUFBSSxJQUFJTixlQUFjLENBQUM7QUFDdEMsaUJBQUssVUFBVSxJQUFJLElBQUlDLGdCQUFlLENBQUM7QUFBQSxVQUMzQztBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsTUFBTXpCLFVBQU4sY0FBMEIsT0FBTztBQUFBLFFBQzdCLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxTQUFTLElBQUkrQixjQUFhO0FBQUEsUUFDbkM7QUFBQSxRQUNBLGdCQUFnQixPQUFPO0FBQ25CLGNBQUksQ0FBQyxZQUFZLE9BQU8sS0FBSyxHQUFHO0FBQzVCLGtCQUFNLElBQUksVUFBVSwrRkFBK0Y7QUFBQSxVQUN2SDtBQUNBLGdCQUFNLFNBQVMsT0FBTyxLQUFLLE1BQU0sUUFBUSxNQUFNLFlBQVksTUFBTSxVQUFVO0FBQzNFLHdCQUFBRSxRQUFnQixlQUFlLE1BQU07QUFDckMsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUFBO0FBQUE7OztBQzV1RUEsTUFBVyxLQUNBLFFBQ0EsT0FDQSxNQUNBLE1BQ0EsZ0JBQ0EsT0FDQSxLQUNBLGlCQUNBLFVBQ0EsUUFDQSxXQUNBLHFCQUdBLFlBSUEsWUFDQSxNQUNBLFdBRUEsWUFDQSxNQUNBLFdBRUEsYUFDQSxPQUNBLFlBQ0E7QUE5QlgsTUFBQUssY0FBQTtBQUFBO0FBQU8sTUFBSSxNQUFNO0FBQ1YsTUFBSSxTQUFTO0FBQ2IsTUFBSSxRQUFRO0FBQ1osTUFBSSxPQUFPO0FBQ1gsTUFBSSxPQUFPO0FBQ1gsTUFBSSxpQkFBaUIsQ0FBQyxLQUFLLFFBQVEsT0FBTyxJQUFJO0FBQzlDLE1BQUksUUFBUTtBQUNaLE1BQUksTUFBTTtBQUNWLE1BQUksa0JBQWtCO0FBQ3RCLE1BQUksV0FBVztBQUNmLE1BQUksU0FBUztBQUNiLE1BQUksWUFBWTtBQUNoQixNQUFJLHNCQUFtQywrQkFBZSxPQUFPLFNBQVUsS0FBSyxXQUFXO0FBQzVGLGVBQU8sSUFBSSxPQUFPLENBQUMsWUFBWSxNQUFNLE9BQU8sWUFBWSxNQUFNLEdBQUcsQ0FBQztBQUFBLE1BQ3BFLEdBQUcsQ0FBQyxDQUFDO0FBQ0UsTUFBSSxhQUEwQixpQkFBQyxFQUFFLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxTQUFVLEtBQUssV0FBVztBQUN0RyxlQUFPLElBQUksT0FBTyxDQUFDLFdBQVcsWUFBWSxNQUFNLE9BQU8sWUFBWSxNQUFNLEdBQUcsQ0FBQztBQUFBLE1BQy9FLEdBQUcsQ0FBQyxDQUFDO0FBRUUsTUFBSSxhQUFhO0FBQ2pCLE1BQUksT0FBTztBQUNYLE1BQUksWUFBWTtBQUVoQixNQUFJLGFBQWE7QUFDakIsTUFBSSxPQUFPO0FBQ1gsTUFBSSxZQUFZO0FBRWhCLE1BQUksY0FBYztBQUNsQixNQUFJLFFBQVE7QUFDWixNQUFJLGFBQWE7QUFDakIsTUFBSSxpQkFBaUIsQ0FBQyxZQUFZLE1BQU0sV0FBVyxZQUFZLE1BQU0sV0FBVyxhQUFhLE9BQU8sVUFBVTtBQUFBO0FBQUE7OztBQzlCdEcsV0FBUixZQUE2QixTQUFTO0FBQzNDLFdBQU8sV0FBVyxRQUFRLFlBQVksSUFBSSxZQUFZLElBQUk7QUFBQSxFQUM1RDtBQUZBO0FBQUE7QUFBQTtBQUFBOzs7QUNBZSxXQUFSQyxXQUEyQixNQUFNO0FBQ3RDLFFBQUksUUFBUSxNQUFNO0FBQ2hCLGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBSSxLQUFLLFNBQVMsTUFBTSxtQkFBbUI7QUFDekMsVUFBSSxnQkFBZ0IsS0FBSztBQUN6QixhQUFPLGdCQUFnQixjQUFjLGVBQWUsU0FBUztBQUFBLElBQy9EO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFYQTtBQUFBO0FBQUE7QUFBQTs7O0FDRUEsV0FBUyxVQUFVLE1BQU07QUFDdkIsUUFBSSxhQUFhQyxXQUFVLElBQUksRUFBRTtBQUNqQyxXQUFPLGdCQUFnQixjQUFjLGdCQUFnQjtBQUFBLEVBQ3ZEO0FBRUEsV0FBUyxjQUFjLE1BQU07QUFDM0IsUUFBSSxhQUFhQSxXQUFVLElBQUksRUFBRTtBQUNqQyxXQUFPLGdCQUFnQixjQUFjLGdCQUFnQjtBQUFBLEVBQ3ZEO0FBRUEsV0FBUyxhQUFhLE1BQU07QUFFMUIsUUFBSSxPQUFPLGVBQWUsYUFBYTtBQUNyQyxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksYUFBYUEsV0FBVSxJQUFJLEVBQUU7QUFDakMsV0FBTyxnQkFBZ0IsY0FBYyxnQkFBZ0I7QUFBQSxFQUN2RDtBQXBCQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNJQSxXQUFTLFlBQVksTUFBTTtBQUN6QixRQUFJLFFBQVEsS0FBSztBQUNqQixXQUFPLEtBQUssTUFBTSxRQUFRLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFDbEQsVUFBSSxRQUFRLE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQztBQUNuQyxVQUFJLGFBQWEsTUFBTSxXQUFXLElBQUksS0FBSyxDQUFDO0FBQzVDLFVBQUksVUFBVSxNQUFNLFNBQVMsSUFBSTtBQUVqQyxVQUFJLENBQUMsY0FBYyxPQUFPLEtBQUssQ0FBQyxZQUFZLE9BQU8sR0FBRztBQUNwRDtBQUFBLE1BQ0Y7QUFLQSxhQUFPLE9BQU8sUUFBUSxPQUFPLEtBQUs7QUFDbEMsYUFBTyxLQUFLLFVBQVUsRUFBRSxRQUFRLFNBQVVDLE9BQU07QUFDOUMsWUFBSSxRQUFRLFdBQVdBLEtBQUk7QUFFM0IsWUFBSSxVQUFVLE9BQU87QUFDbkIsa0JBQVEsZ0JBQWdCQSxLQUFJO0FBQUEsUUFDOUIsT0FBTztBQUNMLGtCQUFRLGFBQWFBLE9BQU0sVUFBVSxPQUFPLEtBQUssS0FBSztBQUFBLFFBQ3hEO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSCxDQUFDO0FBQUEsRUFDSDtBQUVBLFdBQVMsT0FBTyxPQUFPO0FBQ3JCLFFBQUksUUFBUSxNQUFNO0FBQ2xCLFFBQUksZ0JBQWdCO0FBQUEsTUFDbEIsUUFBUTtBQUFBLFFBQ04sVUFBVSxNQUFNLFFBQVE7QUFBQSxRQUN4QixNQUFNO0FBQUEsUUFDTixLQUFLO0FBQUEsUUFDTCxRQUFRO0FBQUEsTUFDVjtBQUFBLE1BQ0EsT0FBTztBQUFBLFFBQ0wsVUFBVTtBQUFBLE1BQ1o7QUFBQSxNQUNBLFdBQVcsQ0FBQztBQUFBLElBQ2Q7QUFDQSxXQUFPLE9BQU8sTUFBTSxTQUFTLE9BQU8sT0FBTyxjQUFjLE1BQU07QUFDL0QsVUFBTSxTQUFTO0FBRWYsUUFBSSxNQUFNLFNBQVMsT0FBTztBQUN4QixhQUFPLE9BQU8sTUFBTSxTQUFTLE1BQU0sT0FBTyxjQUFjLEtBQUs7QUFBQSxJQUMvRDtBQUVBLFdBQU8sV0FBWTtBQUNqQixhQUFPLEtBQUssTUFBTSxRQUFRLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFDbEQsWUFBSSxVQUFVLE1BQU0sU0FBUyxJQUFJO0FBQ2pDLFlBQUksYUFBYSxNQUFNLFdBQVcsSUFBSSxLQUFLLENBQUM7QUFDNUMsWUFBSSxrQkFBa0IsT0FBTyxLQUFLLE1BQU0sT0FBTyxlQUFlLElBQUksSUFBSSxNQUFNLE9BQU8sSUFBSSxJQUFJLGNBQWMsSUFBSSxDQUFDO0FBRTlHLFlBQUksUUFBUSxnQkFBZ0IsT0FBTyxTQUFVQyxRQUFPLFVBQVU7QUFDNUQsVUFBQUEsT0FBTSxRQUFRLElBQUk7QUFDbEIsaUJBQU9BO0FBQUEsUUFDVCxHQUFHLENBQUMsQ0FBQztBQUVMLFlBQUksQ0FBQyxjQUFjLE9BQU8sS0FBSyxDQUFDLFlBQVksT0FBTyxHQUFHO0FBQ3BEO0FBQUEsUUFDRjtBQUVBLGVBQU8sT0FBTyxRQUFRLE9BQU8sS0FBSztBQUNsQyxlQUFPLEtBQUssVUFBVSxFQUFFLFFBQVEsU0FBVSxXQUFXO0FBQ25ELGtCQUFRLGdCQUFnQixTQUFTO0FBQUEsUUFDbkMsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBekVBLE1BNEVPO0FBNUVQO0FBQUE7QUFBQTtBQUNBO0FBMkVBLE1BQU8sc0JBQVE7QUFBQSxRQUNiLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxRQUNULE9BQU87QUFBQSxRQUNQLElBQUk7QUFBQSxRQUNKO0FBQUEsUUFDQSxVQUFVLENBQUMsZUFBZTtBQUFBLE1BQzVCO0FBQUE7QUFBQTs7O0FDbEZlLFdBQVIsaUJBQWtDLFdBQVc7QUFDbEQsV0FBTyxVQUFVLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFBQSxFQUMvQjtBQUhBO0FBQUE7QUFBQTtBQUFBOzs7QUNBQSxNQUFXLEtBQ0EsS0FDQTtBQUZYO0FBQUE7QUFBTyxNQUFJLE1BQU0sS0FBSztBQUNmLE1BQUksTUFBTSxLQUFLO0FBQ2YsTUFBSSxRQUFRLEtBQUs7QUFBQTtBQUFBOzs7QUNGVCxXQUFSLGNBQStCO0FBQ3BDLFFBQUksU0FBUyxVQUFVO0FBRXZCLFFBQUksVUFBVSxRQUFRLE9BQU8sVUFBVSxNQUFNLFFBQVEsT0FBTyxNQUFNLEdBQUc7QUFDbkUsYUFBTyxPQUFPLE9BQU8sSUFBSSxTQUFVLE1BQU07QUFDdkMsZUFBTyxLQUFLLFFBQVEsTUFBTSxLQUFLO0FBQUEsTUFDakMsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUFBLElBQ2I7QUFFQSxXQUFPLFVBQVU7QUFBQSxFQUNuQjtBQVZBO0FBQUE7QUFBQTtBQUFBOzs7QUNDZSxXQUFSLG1CQUFvQztBQUN6QyxXQUFPLENBQUMsaUNBQWlDLEtBQUssWUFBWSxDQUFDO0FBQUEsRUFDN0Q7QUFIQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNJZSxXQUFSLHNCQUF1QyxTQUFTLGNBQWMsaUJBQWlCO0FBQ3BGLFFBQUksaUJBQWlCLFFBQVE7QUFDM0IscUJBQWU7QUFBQSxJQUNqQjtBQUVBLFFBQUksb0JBQW9CLFFBQVE7QUFDOUIsd0JBQWtCO0FBQUEsSUFDcEI7QUFFQSxRQUFJLGFBQWEsUUFBUSxzQkFBc0I7QUFDL0MsUUFBSSxTQUFTO0FBQ2IsUUFBSSxTQUFTO0FBRWIsUUFBSSxnQkFBZ0IsY0FBYyxPQUFPLEdBQUc7QUFDMUMsZUFBUyxRQUFRLGNBQWMsSUFBSSxNQUFNLFdBQVcsS0FBSyxJQUFJLFFBQVEsZUFBZSxJQUFJO0FBQ3hGLGVBQVMsUUFBUSxlQUFlLElBQUksTUFBTSxXQUFXLE1BQU0sSUFBSSxRQUFRLGdCQUFnQixJQUFJO0FBQUEsSUFDN0Y7QUFFQSxRQUFJLE9BQU8sVUFBVSxPQUFPLElBQUlDLFdBQVUsT0FBTyxJQUFJLFFBQ2pELGlCQUFpQixLQUFLO0FBRTFCLFFBQUksbUJBQW1CLENBQUMsaUJBQWlCLEtBQUs7QUFDOUMsUUFBSSxLQUFLLFdBQVcsUUFBUSxvQkFBb0IsaUJBQWlCLGVBQWUsYUFBYSxNQUFNO0FBQ25HLFFBQUksS0FBSyxXQUFXLE9BQU8sb0JBQW9CLGlCQUFpQixlQUFlLFlBQVksTUFBTTtBQUNqRyxRQUFJLFFBQVEsV0FBVyxRQUFRO0FBQy9CLFFBQUksU0FBUyxXQUFXLFNBQVM7QUFDakMsV0FBTztBQUFBLE1BQ0w7QUFBQSxNQUNBO0FBQUEsTUFDQSxLQUFLO0FBQUEsTUFDTCxPQUFPLElBQUk7QUFBQSxNQUNYLFFBQVEsSUFBSTtBQUFBLE1BQ1osTUFBTTtBQUFBLE1BQ047QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUF4Q0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTs7O0FDQWUsV0FBUixjQUErQixTQUFTO0FBQzdDLFFBQUksYUFBYSxzQkFBc0IsT0FBTztBQUc5QyxRQUFJLFFBQVEsUUFBUTtBQUNwQixRQUFJLFNBQVMsUUFBUTtBQUVyQixRQUFJLEtBQUssSUFBSSxXQUFXLFFBQVEsS0FBSyxLQUFLLEdBQUc7QUFDM0MsY0FBUSxXQUFXO0FBQUEsSUFDckI7QUFFQSxRQUFJLEtBQUssSUFBSSxXQUFXLFNBQVMsTUFBTSxLQUFLLEdBQUc7QUFDN0MsZUFBUyxXQUFXO0FBQUEsSUFDdEI7QUFFQSxXQUFPO0FBQUEsTUFDTCxHQUFHLFFBQVE7QUFBQSxNQUNYLEdBQUcsUUFBUTtBQUFBLE1BQ1g7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUF4QkE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDQ2UsV0FBUixTQUEwQixRQUFRLE9BQU87QUFDOUMsUUFBSSxXQUFXLE1BQU0sZUFBZSxNQUFNLFlBQVk7QUFFdEQsUUFBSSxPQUFPLFNBQVMsS0FBSyxHQUFHO0FBQzFCLGFBQU87QUFBQSxJQUNULFdBQ1MsWUFBWSxhQUFhLFFBQVEsR0FBRztBQUN6QyxVQUFJLE9BQU87QUFFWCxTQUFHO0FBQ0QsWUFBSSxRQUFRLE9BQU8sV0FBVyxJQUFJLEdBQUc7QUFDbkMsaUJBQU87QUFBQSxRQUNUO0FBR0EsZUFBTyxLQUFLLGNBQWMsS0FBSztBQUFBLE1BQ2pDLFNBQVM7QUFBQSxJQUNYO0FBR0YsV0FBTztBQUFBLEVBQ1Q7QUF0QkE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDQ2UsV0FBUixpQkFBa0MsU0FBUztBQUNoRCxXQUFPQyxXQUFVLE9BQU8sRUFBRSxpQkFBaUIsT0FBTztBQUFBLEVBQ3BEO0FBSEE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDQ2UsV0FBUixlQUFnQyxTQUFTO0FBQzlDLFdBQU8sQ0FBQyxTQUFTLE1BQU0sSUFBSSxFQUFFLFFBQVEsWUFBWSxPQUFPLENBQUMsS0FBSztBQUFBLEVBQ2hFO0FBSEE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDQ2UsV0FBUixtQkFBb0MsU0FBUztBQUVsRCxhQUFTLFVBQVUsT0FBTyxJQUFJLFFBQVE7QUFBQTtBQUFBLE1BQ3RDLFFBQVE7QUFBQSxVQUFhLE9BQU8sVUFBVTtBQUFBLEVBQ3hDO0FBTEE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDR2UsV0FBUixjQUErQixTQUFTO0FBQzdDLFFBQUksWUFBWSxPQUFPLE1BQU0sUUFBUTtBQUNuQyxhQUFPO0FBQUEsSUFDVDtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFHRSxRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsT0FDUixhQUFhLE9BQU8sSUFBSSxRQUFRLE9BQU87QUFBQTtBQUFBLE1BRXZDLG1CQUFtQixPQUFPO0FBQUE7QUFBQSxFQUc5QjtBQWxCQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTs7O0FDTUEsV0FBUyxvQkFBb0IsU0FBUztBQUNwQyxRQUFJLENBQUMsY0FBYyxPQUFPO0FBQUEsSUFDMUIsaUJBQWlCLE9BQU8sRUFBRSxhQUFhLFNBQVM7QUFDOUMsYUFBTztBQUFBLElBQ1Q7QUFFQSxXQUFPLFFBQVE7QUFBQSxFQUNqQjtBQUlBLFdBQVMsbUJBQW1CLFNBQVM7QUFDbkMsUUFBSSxZQUFZLFdBQVcsS0FBSyxZQUFZLENBQUM7QUFDN0MsUUFBSSxPQUFPLFdBQVcsS0FBSyxZQUFZLENBQUM7QUFFeEMsUUFBSSxRQUFRLGNBQWMsT0FBTyxHQUFHO0FBRWxDLFVBQUksYUFBYSxpQkFBaUIsT0FBTztBQUV6QyxVQUFJLFdBQVcsYUFBYSxTQUFTO0FBQ25DLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUVBLFFBQUksY0FBYyxjQUFjLE9BQU87QUFFdkMsUUFBSSxhQUFhLFdBQVcsR0FBRztBQUM3QixvQkFBYyxZQUFZO0FBQUEsSUFDNUI7QUFFQSxXQUFPLGNBQWMsV0FBVyxLQUFLLENBQUMsUUFBUSxNQUFNLEVBQUUsUUFBUSxZQUFZLFdBQVcsQ0FBQyxJQUFJLEdBQUc7QUFDM0YsVUFBSSxNQUFNLGlCQUFpQixXQUFXO0FBSXRDLFVBQUksSUFBSSxjQUFjLFVBQVUsSUFBSSxnQkFBZ0IsVUFBVSxJQUFJLFlBQVksV0FBVyxDQUFDLGFBQWEsYUFBYSxFQUFFLFFBQVEsSUFBSSxVQUFVLE1BQU0sTUFBTSxhQUFhLElBQUksZUFBZSxZQUFZLGFBQWEsSUFBSSxVQUFVLElBQUksV0FBVyxRQUFRO0FBQ3BQLGVBQU87QUFBQSxNQUNULE9BQU87QUFDTCxzQkFBYyxZQUFZO0FBQUEsTUFDNUI7QUFBQSxJQUNGO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFJZSxXQUFSLGdCQUFpQyxTQUFTO0FBQy9DLFFBQUlDLFVBQVNDLFdBQVUsT0FBTztBQUM5QixRQUFJLGVBQWUsb0JBQW9CLE9BQU87QUFFOUMsV0FBTyxnQkFBZ0IsZUFBZSxZQUFZLEtBQUssaUJBQWlCLFlBQVksRUFBRSxhQUFhLFVBQVU7QUFDM0cscUJBQWUsb0JBQW9CLFlBQVk7QUFBQSxJQUNqRDtBQUVBLFFBQUksaUJBQWlCLFlBQVksWUFBWSxNQUFNLFVBQVUsWUFBWSxZQUFZLE1BQU0sVUFBVSxpQkFBaUIsWUFBWSxFQUFFLGFBQWEsV0FBVztBQUMxSixhQUFPRDtBQUFBLElBQ1Q7QUFFQSxXQUFPLGdCQUFnQixtQkFBbUIsT0FBTyxLQUFLQTtBQUFBLEVBQ3hEO0FBcEVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7OztBQ05lLFdBQVIseUJBQTBDLFdBQVc7QUFDMUQsV0FBTyxDQUFDLE9BQU8sUUFBUSxFQUFFLFFBQVEsU0FBUyxLQUFLLElBQUksTUFBTTtBQUFBLEVBQzNEO0FBRkE7QUFBQTtBQUFBO0FBQUE7OztBQ0NPLFdBQVMsT0FBT0UsTUFBSyxPQUFPQyxNQUFLO0FBQ3RDLFdBQU8sSUFBUUQsTUFBSyxJQUFRLE9BQU9DLElBQUcsQ0FBQztBQUFBLEVBQ3pDO0FBQ08sV0FBUyxlQUFlRCxNQUFLLE9BQU9DLE1BQUs7QUFDOUMsUUFBSSxJQUFJLE9BQU9ELE1BQUssT0FBT0MsSUFBRztBQUM5QixXQUFPLElBQUlBLE9BQU1BLE9BQU07QUFBQSxFQUN6QjtBQVBBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0FlLFdBQVIscUJBQXNDO0FBQzNDLFdBQU87QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLE1BQU07QUFBQSxJQUNSO0FBQUEsRUFDRjtBQVBBO0FBQUE7QUFBQTtBQUFBOzs7QUNDZSxXQUFSLG1CQUFvQyxlQUFlO0FBQ3hELFdBQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxtQkFBbUIsR0FBRyxhQUFhO0FBQUEsRUFDOUQ7QUFIQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNBZSxXQUFSLGdCQUFpQyxPQUFPLE1BQU07QUFDbkQsV0FBTyxLQUFLLE9BQU8sU0FBVSxTQUFTLEtBQUs7QUFDekMsY0FBUSxHQUFHLElBQUk7QUFDZixhQUFPO0FBQUEsSUFDVCxHQUFHLENBQUMsQ0FBQztBQUFBLEVBQ1A7QUFMQTtBQUFBO0FBQUE7QUFBQTs7O0FDaUJBLFdBQVMsTUFBTSxNQUFNO0FBQ25CLFFBQUk7QUFFSixRQUFJLFFBQVEsS0FBSyxPQUNiLE9BQU8sS0FBSyxNQUNaQyxXQUFVLEtBQUs7QUFDbkIsUUFBSSxlQUFlLE1BQU0sU0FBUztBQUNsQyxRQUFJQyxpQkFBZ0IsTUFBTSxjQUFjO0FBQ3hDLFFBQUksZ0JBQWdCLGlCQUFpQixNQUFNLFNBQVM7QUFDcEQsUUFBSSxPQUFPLHlCQUF5QixhQUFhO0FBQ2pELFFBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxFQUFFLFFBQVEsYUFBYSxLQUFLO0FBQ3pELFFBQUksTUFBTSxhQUFhLFdBQVc7QUFFbEMsUUFBSSxDQUFDLGdCQUFnQixDQUFDQSxnQkFBZTtBQUNuQztBQUFBLElBQ0Y7QUFFQSxRQUFJLGdCQUFnQixnQkFBZ0JELFNBQVEsU0FBUyxLQUFLO0FBQzFELFFBQUksWUFBWSxjQUFjLFlBQVk7QUFDMUMsUUFBSSxVQUFVLFNBQVMsTUFBTSxNQUFNO0FBQ25DLFFBQUksVUFBVSxTQUFTLE1BQU0sU0FBUztBQUN0QyxRQUFJLFVBQVUsTUFBTSxNQUFNLFVBQVUsR0FBRyxJQUFJLE1BQU0sTUFBTSxVQUFVLElBQUksSUFBSUMsZUFBYyxJQUFJLElBQUksTUFBTSxNQUFNLE9BQU8sR0FBRztBQUNySCxRQUFJLFlBQVlBLGVBQWMsSUFBSSxJQUFJLE1BQU0sTUFBTSxVQUFVLElBQUk7QUFDaEUsUUFBSSxvQkFBb0IsZ0JBQWdCLFlBQVk7QUFDcEQsUUFBSSxhQUFhLG9CQUFvQixTQUFTLE1BQU0sa0JBQWtCLGdCQUFnQixJQUFJLGtCQUFrQixlQUFlLElBQUk7QUFDL0gsUUFBSSxvQkFBb0IsVUFBVSxJQUFJLFlBQVk7QUFHbEQsUUFBSUMsT0FBTSxjQUFjLE9BQU87QUFDL0IsUUFBSUMsT0FBTSxhQUFhLFVBQVUsR0FBRyxJQUFJLGNBQWMsT0FBTztBQUM3RCxRQUFJLFNBQVMsYUFBYSxJQUFJLFVBQVUsR0FBRyxJQUFJLElBQUk7QUFDbkQsUUFBSUMsVUFBUyxPQUFPRixNQUFLLFFBQVFDLElBQUc7QUFFcEMsUUFBSSxXQUFXO0FBQ2YsVUFBTSxjQUFjLElBQUksS0FBSyx3QkFBd0IsQ0FBQyxHQUFHLHNCQUFzQixRQUFRLElBQUlDLFNBQVEsc0JBQXNCLGVBQWVBLFVBQVMsUUFBUTtBQUFBLEVBQzNKO0FBRUEsV0FBU0MsUUFBTyxPQUFPO0FBQ3JCLFFBQUksUUFBUSxNQUFNLE9BQ2RMLFdBQVUsTUFBTTtBQUNwQixRQUFJLG1CQUFtQkEsU0FBUSxTQUMzQixlQUFlLHFCQUFxQixTQUFTLHdCQUF3QjtBQUV6RSxRQUFJLGdCQUFnQixNQUFNO0FBQ3hCO0FBQUEsSUFDRjtBQUdBLFFBQUksT0FBTyxpQkFBaUIsVUFBVTtBQUNwQyxxQkFBZSxNQUFNLFNBQVMsT0FBTyxjQUFjLFlBQVk7QUFFL0QsVUFBSSxDQUFDLGNBQWM7QUFDakI7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLFFBQUksQ0FBQyxTQUFTLE1BQU0sU0FBUyxRQUFRLFlBQVksR0FBRztBQUNsRDtBQUFBLElBQ0Y7QUFFQSxVQUFNLFNBQVMsUUFBUTtBQUFBLEVBQ3pCO0FBOUVBLE1BVUksaUJBdUVHO0FBakZQO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBQU07QUFFQSxNQUFJLGtCQUFrQixTQUFTQyxpQkFBZ0IsU0FBUyxPQUFPO0FBQzdELGtCQUFVLE9BQU8sWUFBWSxhQUFhLFFBQVEsT0FBTyxPQUFPLENBQUMsR0FBRyxNQUFNLE9BQU87QUFBQSxVQUMvRSxXQUFXLE1BQU07QUFBQSxRQUNuQixDQUFDLENBQUMsSUFBSTtBQUNOLGVBQU8sbUJBQW1CLE9BQU8sWUFBWSxXQUFXLFVBQVUsZ0JBQWdCLFNBQVMsY0FBYyxDQUFDO0FBQUEsTUFDNUc7QUFrRUEsTUFBTyxnQkFBUTtBQUFBLFFBQ2IsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLFFBQ1QsT0FBTztBQUFBLFFBQ1AsSUFBSTtBQUFBLFFBQ0osUUFBUUY7QUFBQSxRQUNSLFVBQVUsQ0FBQyxlQUFlO0FBQUEsUUFDMUIsa0JBQWtCLENBQUMsaUJBQWlCO0FBQUEsTUFDdEM7QUFBQTtBQUFBOzs7QUN6RmUsV0FBUixhQUE4QixXQUFXO0FBQzlDLFdBQU8sVUFBVSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQUEsRUFDL0I7QUFGQTtBQUFBO0FBQUE7QUFBQTs7O0FDa0JBLFdBQVMsa0JBQWtCLE1BQU0sS0FBSztBQUNwQyxRQUFJLElBQUksS0FBSyxHQUNULElBQUksS0FBSztBQUNiLFFBQUksTUFBTSxJQUFJLG9CQUFvQjtBQUNsQyxXQUFPO0FBQUEsTUFDTCxHQUFHLE1BQU0sSUFBSSxHQUFHLElBQUksT0FBTztBQUFBLE1BQzNCLEdBQUcsTUFBTSxJQUFJLEdBQUcsSUFBSSxPQUFPO0FBQUEsSUFDN0I7QUFBQSxFQUNGO0FBRU8sV0FBUyxZQUFZLE9BQU87QUFDakMsUUFBSTtBQUVKLFFBQUlHLFVBQVMsTUFBTSxRQUNmLGFBQWEsTUFBTSxZQUNuQixZQUFZLE1BQU0sV0FDbEIsWUFBWSxNQUFNLFdBQ2xCLFVBQVUsTUFBTSxTQUNoQixXQUFXLE1BQU0sVUFDakIsa0JBQWtCLE1BQU0saUJBQ3hCLFdBQVcsTUFBTSxVQUNqQixlQUFlLE1BQU0sY0FDckIsVUFBVSxNQUFNO0FBQ3BCLFFBQUksYUFBYSxRQUFRLEdBQ3JCLElBQUksZUFBZSxTQUFTLElBQUksWUFDaEMsYUFBYSxRQUFRLEdBQ3JCLElBQUksZUFBZSxTQUFTLElBQUk7QUFFcEMsUUFBSSxRQUFRLE9BQU8saUJBQWlCLGFBQWEsYUFBYTtBQUFBLE1BQzVEO0FBQUEsTUFDQTtBQUFBLElBQ0YsQ0FBQyxJQUFJO0FBQUEsTUFDSDtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBRUEsUUFBSSxNQUFNO0FBQ1YsUUFBSSxNQUFNO0FBQ1YsUUFBSSxPQUFPLFFBQVEsZUFBZSxHQUFHO0FBQ3JDLFFBQUksT0FBTyxRQUFRLGVBQWUsR0FBRztBQUNyQyxRQUFJLFFBQVE7QUFDWixRQUFJLFFBQVE7QUFDWixRQUFJLE1BQU07QUFFVixRQUFJLFVBQVU7QUFDWixVQUFJLGVBQWUsZ0JBQWdCQSxPQUFNO0FBQ3pDLFVBQUksYUFBYTtBQUNqQixVQUFJLFlBQVk7QUFFaEIsVUFBSSxpQkFBaUJDLFdBQVVELE9BQU0sR0FBRztBQUN0Qyx1QkFBZSxtQkFBbUJBLE9BQU07QUFFeEMsWUFBSSxpQkFBaUIsWUFBWSxFQUFFLGFBQWEsWUFBWSxhQUFhLFlBQVk7QUFDbkYsdUJBQWE7QUFDYixzQkFBWTtBQUFBLFFBQ2Q7QUFBQSxNQUNGO0FBR0EscUJBQWU7QUFFZixVQUFJLGNBQWMsUUFBUSxjQUFjLFFBQVEsY0FBYyxVQUFVLGNBQWMsS0FBSztBQUN6RixnQkFBUTtBQUNSLFlBQUksVUFBVSxXQUFXLGlCQUFpQixPQUFPLElBQUksaUJBQWlCLElBQUksZUFBZTtBQUFBO0FBQUEsVUFDekYsYUFBYSxVQUFVO0FBQUE7QUFDdkIsYUFBSyxVQUFVLFdBQVc7QUFDMUIsYUFBSyxrQkFBa0IsSUFBSTtBQUFBLE1BQzdCO0FBRUEsVUFBSSxjQUFjLFNBQVMsY0FBYyxPQUFPLGNBQWMsV0FBVyxjQUFjLEtBQUs7QUFDMUYsZ0JBQVE7QUFDUixZQUFJLFVBQVUsV0FBVyxpQkFBaUIsT0FBTyxJQUFJLGlCQUFpQixJQUFJLGVBQWU7QUFBQTtBQUFBLFVBQ3pGLGFBQWEsU0FBUztBQUFBO0FBQ3RCLGFBQUssVUFBVSxXQUFXO0FBQzFCLGFBQUssa0JBQWtCLElBQUk7QUFBQSxNQUM3QjtBQUFBLElBQ0Y7QUFFQSxRQUFJLGVBQWUsT0FBTyxPQUFPO0FBQUEsTUFDL0I7QUFBQSxJQUNGLEdBQUcsWUFBWSxVQUFVO0FBRXpCLFFBQUksUUFBUSxpQkFBaUIsT0FBTyxrQkFBa0I7QUFBQSxNQUNwRDtBQUFBLE1BQ0E7QUFBQSxJQUNGLEdBQUdDLFdBQVVELE9BQU0sQ0FBQyxJQUFJO0FBQUEsTUFDdEI7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUVBLFFBQUksTUFBTTtBQUNWLFFBQUksTUFBTTtBQUVWLFFBQUksaUJBQWlCO0FBQ25CLFVBQUk7QUFFSixhQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsZUFBZSxpQkFBaUIsQ0FBQyxHQUFHLGVBQWUsS0FBSyxJQUFJLE9BQU8sTUFBTSxJQUFJLGVBQWUsS0FBSyxJQUFJLE9BQU8sTUFBTSxJQUFJLGVBQWUsYUFBYSxJQUFJLG9CQUFvQixNQUFNLElBQUksZUFBZSxJQUFJLFNBQVMsSUFBSSxRQUFRLGlCQUFpQixJQUFJLFNBQVMsSUFBSSxVQUFVLGVBQWU7QUFBQSxJQUNsVDtBQUVBLFdBQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxlQUFlLGtCQUFrQixDQUFDLEdBQUcsZ0JBQWdCLEtBQUssSUFBSSxPQUFPLElBQUksT0FBTyxJQUFJLGdCQUFnQixLQUFLLElBQUksT0FBTyxJQUFJLE9BQU8sSUFBSSxnQkFBZ0IsWUFBWSxJQUFJLGdCQUFnQjtBQUFBLEVBQzlNO0FBRUEsV0FBUyxjQUFjLE9BQU87QUFDNUIsUUFBSSxRQUFRLE1BQU0sT0FDZEUsV0FBVSxNQUFNO0FBQ3BCLFFBQUksd0JBQXdCQSxTQUFRLGlCQUNoQyxrQkFBa0IsMEJBQTBCLFNBQVMsT0FBTyx1QkFDNUQsb0JBQW9CQSxTQUFRLFVBQzVCLFdBQVcsc0JBQXNCLFNBQVMsT0FBTyxtQkFDakQsd0JBQXdCQSxTQUFRLGNBQ2hDLGVBQWUsMEJBQTBCLFNBQVMsT0FBTztBQUM3RCxRQUFJLGVBQWU7QUFBQSxNQUNqQixXQUFXLGlCQUFpQixNQUFNLFNBQVM7QUFBQSxNQUMzQyxXQUFXLGFBQWEsTUFBTSxTQUFTO0FBQUEsTUFDdkMsUUFBUSxNQUFNLFNBQVM7QUFBQSxNQUN2QixZQUFZLE1BQU0sTUFBTTtBQUFBLE1BQ3hCO0FBQUEsTUFDQSxTQUFTLE1BQU0sUUFBUSxhQUFhO0FBQUEsSUFDdEM7QUFFQSxRQUFJLE1BQU0sY0FBYyxpQkFBaUIsTUFBTTtBQUM3QyxZQUFNLE9BQU8sU0FBUyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sT0FBTyxRQUFRLFlBQVksT0FBTyxPQUFPLENBQUMsR0FBRyxjQUFjO0FBQUEsUUFDdkcsU0FBUyxNQUFNLGNBQWM7QUFBQSxRQUM3QixVQUFVLE1BQU0sUUFBUTtBQUFBLFFBQ3hCO0FBQUEsUUFDQTtBQUFBLE1BQ0YsQ0FBQyxDQUFDLENBQUM7QUFBQSxJQUNMO0FBRUEsUUFBSSxNQUFNLGNBQWMsU0FBUyxNQUFNO0FBQ3JDLFlBQU0sT0FBTyxRQUFRLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxPQUFPLE9BQU8sWUFBWSxPQUFPLE9BQU8sQ0FBQyxHQUFHLGNBQWM7QUFBQSxRQUNyRyxTQUFTLE1BQU0sY0FBYztBQUFBLFFBQzdCLFVBQVU7QUFBQSxRQUNWLFVBQVU7QUFBQSxRQUNWO0FBQUEsTUFDRixDQUFDLENBQUMsQ0FBQztBQUFBLElBQ0w7QUFFQSxVQUFNLFdBQVcsU0FBUyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sV0FBVyxRQUFRO0FBQUEsTUFDbkUseUJBQXlCLE1BQU07QUFBQSxJQUNqQyxDQUFDO0FBQUEsRUFDSDtBQS9KQSxNQVNJLFlBeUpHO0FBbEtQO0FBQUE7QUFBQSxNQUFBQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBSSxhQUFhO0FBQUEsUUFDZixLQUFLO0FBQUEsUUFDTCxPQUFPO0FBQUEsUUFDUCxRQUFRO0FBQUEsUUFDUixNQUFNO0FBQUEsTUFDUjtBQW9KQSxNQUFPLHdCQUFRO0FBQUEsUUFDYixNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsUUFDVCxPQUFPO0FBQUEsUUFDUCxJQUFJO0FBQUEsUUFDSixNQUFNLENBQUM7QUFBQSxNQUNUO0FBQUE7QUFBQTs7O0FDbEtBLFdBQVNDLFFBQU8sTUFBTTtBQUNwQixRQUFJLFFBQVEsS0FBSyxPQUNiLFdBQVcsS0FBSyxVQUNoQkMsV0FBVSxLQUFLO0FBQ25CLFFBQUksa0JBQWtCQSxTQUFRLFFBQzFCLFNBQVMsb0JBQW9CLFNBQVMsT0FBTyxpQkFDN0Msa0JBQWtCQSxTQUFRLFFBQzFCLFNBQVMsb0JBQW9CLFNBQVMsT0FBTztBQUNqRCxRQUFJQyxVQUFTQyxXQUFVLE1BQU0sU0FBUyxNQUFNO0FBQzVDLFFBQUksZ0JBQWdCLENBQUMsRUFBRSxPQUFPLE1BQU0sY0FBYyxXQUFXLE1BQU0sY0FBYyxNQUFNO0FBRXZGLFFBQUksUUFBUTtBQUNWLG9CQUFjLFFBQVEsU0FBVSxjQUFjO0FBQzVDLHFCQUFhLGlCQUFpQixVQUFVLFNBQVMsUUFBUSxPQUFPO0FBQUEsTUFDbEUsQ0FBQztBQUFBLElBQ0g7QUFFQSxRQUFJLFFBQVE7QUFDVixNQUFBRCxRQUFPLGlCQUFpQixVQUFVLFNBQVMsUUFBUSxPQUFPO0FBQUEsSUFDNUQ7QUFFQSxXQUFPLFdBQVk7QUFDakIsVUFBSSxRQUFRO0FBQ1Ysc0JBQWMsUUFBUSxTQUFVLGNBQWM7QUFDNUMsdUJBQWEsb0JBQW9CLFVBQVUsU0FBUyxRQUFRLE9BQU87QUFBQSxRQUNyRSxDQUFDO0FBQUEsTUFDSDtBQUVBLFVBQUksUUFBUTtBQUNWLFFBQUFBLFFBQU8sb0JBQW9CLFVBQVUsU0FBUyxRQUFRLE9BQU87QUFBQSxNQUMvRDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBdENBLE1BRUksU0F1Q0c7QUF6Q1A7QUFBQTtBQUFBO0FBRUEsTUFBSSxVQUFVO0FBQUEsUUFDWixTQUFTO0FBQUEsTUFDWDtBQXFDQSxNQUFPLHlCQUFRO0FBQUEsUUFDYixNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsUUFDVCxPQUFPO0FBQUEsUUFDUCxJQUFJLFNBQVMsS0FBSztBQUFBLFFBQUM7QUFBQSxRQUNuQixRQUFRRjtBQUFBLFFBQ1IsTUFBTSxDQUFDO0FBQUEsTUFDVDtBQUFBO0FBQUE7OztBQzFDZSxXQUFSLHFCQUFzQyxXQUFXO0FBQ3RELFdBQU8sVUFBVSxRQUFRLDBCQUEwQixTQUFVLFNBQVM7QUFDcEUsYUFBTyxLQUFLLE9BQU87QUFBQSxJQUNyQixDQUFDO0FBQUEsRUFDSDtBQVZBLE1BQUk7QUFBSjtBQUFBO0FBQUEsTUFBSSxPQUFPO0FBQUEsUUFDVCxNQUFNO0FBQUEsUUFDTixPQUFPO0FBQUEsUUFDUCxRQUFRO0FBQUEsUUFDUixLQUFLO0FBQUEsTUFDUDtBQUFBO0FBQUE7OztBQ0RlLFdBQVIsOEJBQStDLFdBQVc7QUFDL0QsV0FBTyxVQUFVLFFBQVEsY0FBYyxTQUFVLFNBQVM7QUFDeEQsYUFBT0ksTUFBSyxPQUFPO0FBQUEsSUFDckIsQ0FBQztBQUFBLEVBQ0g7QUFSQSxNQUFJQTtBQUFKO0FBQUE7QUFBQSxNQUFJQSxRQUFPO0FBQUEsUUFDVCxPQUFPO0FBQUEsUUFDUCxLQUFLO0FBQUEsTUFDUDtBQUFBO0FBQUE7OztBQ0ZlLFdBQVIsZ0JBQWlDLE1BQU07QUFDNUMsUUFBSSxNQUFNQyxXQUFVLElBQUk7QUFDeEIsUUFBSSxhQUFhLElBQUk7QUFDckIsUUFBSSxZQUFZLElBQUk7QUFDcEIsV0FBTztBQUFBLE1BQ0w7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFUQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNHZSxXQUFSLG9CQUFxQyxTQUFTO0FBUW5ELFdBQU8sc0JBQXNCLG1CQUFtQixPQUFPLENBQUMsRUFBRSxPQUFPLGdCQUFnQixPQUFPLEVBQUU7QUFBQSxFQUM1RjtBQVpBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBOzs7QUNFZSxXQUFSLGdCQUFpQyxTQUFTLFVBQVU7QUFDekQsUUFBSSxNQUFNQyxXQUFVLE9BQU87QUFDM0IsUUFBSSxPQUFPLG1CQUFtQixPQUFPO0FBQ3JDLFFBQUksaUJBQWlCLElBQUk7QUFDekIsUUFBSSxRQUFRLEtBQUs7QUFDakIsUUFBSSxTQUFTLEtBQUs7QUFDbEIsUUFBSSxJQUFJO0FBQ1IsUUFBSSxJQUFJO0FBRVIsUUFBSSxnQkFBZ0I7QUFDbEIsY0FBUSxlQUFlO0FBQ3ZCLGVBQVMsZUFBZTtBQUN4QixVQUFJLGlCQUFpQixpQkFBaUI7QUFFdEMsVUFBSSxrQkFBa0IsQ0FBQyxrQkFBa0IsYUFBYSxTQUFTO0FBQzdELFlBQUksZUFBZTtBQUNuQixZQUFJLGVBQWU7QUFBQSxNQUNyQjtBQUFBLElBQ0Y7QUFFQSxXQUFPO0FBQUEsTUFDTDtBQUFBLE1BQ0E7QUFBQSxNQUNBLEdBQUcsSUFBSSxvQkFBb0IsT0FBTztBQUFBLE1BQ2xDO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUE5QkE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTs7O0FDSWUsV0FBUixnQkFBaUMsU0FBUztBQUMvQyxRQUFJO0FBRUosUUFBSSxPQUFPLG1CQUFtQixPQUFPO0FBQ3JDLFFBQUksWUFBWSxnQkFBZ0IsT0FBTztBQUN2QyxRQUFJLFFBQVEsd0JBQXdCLFFBQVEsa0JBQWtCLE9BQU8sU0FBUyxzQkFBc0I7QUFDcEcsUUFBSSxRQUFRLElBQUksS0FBSyxhQUFhLEtBQUssYUFBYSxPQUFPLEtBQUssY0FBYyxHQUFHLE9BQU8sS0FBSyxjQUFjLENBQUM7QUFDNUcsUUFBSSxTQUFTLElBQUksS0FBSyxjQUFjLEtBQUssY0FBYyxPQUFPLEtBQUssZUFBZSxHQUFHLE9BQU8sS0FBSyxlQUFlLENBQUM7QUFDakgsUUFBSSxJQUFJLENBQUMsVUFBVSxhQUFhLG9CQUFvQixPQUFPO0FBQzNELFFBQUksSUFBSSxDQUFDLFVBQVU7QUFFbkIsUUFBSSxpQkFBaUIsUUFBUSxJQUFJLEVBQUUsY0FBYyxPQUFPO0FBQ3RELFdBQUssSUFBSSxLQUFLLGFBQWEsT0FBTyxLQUFLLGNBQWMsQ0FBQyxJQUFJO0FBQUEsSUFDNUQ7QUFFQSxXQUFPO0FBQUEsTUFDTDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBNUJBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTs7O0FDSGUsV0FBUixlQUFnQyxTQUFTO0FBRTlDLFFBQUksb0JBQW9CLGlCQUFpQixPQUFPLEdBQzVDLFdBQVcsa0JBQWtCLFVBQzdCLFlBQVksa0JBQWtCLFdBQzlCLFlBQVksa0JBQWtCO0FBRWxDLFdBQU8sNkJBQTZCLEtBQUssV0FBVyxZQUFZLFNBQVM7QUFBQSxFQUMzRTtBQVRBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0llLFdBQVIsZ0JBQWlDLE1BQU07QUFDNUMsUUFBSSxDQUFDLFFBQVEsUUFBUSxXQUFXLEVBQUUsUUFBUSxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUc7QUFFakUsYUFBTyxLQUFLLGNBQWM7QUFBQSxJQUM1QjtBQUVBLFFBQUksY0FBYyxJQUFJLEtBQUssZUFBZSxJQUFJLEdBQUc7QUFDL0MsYUFBTztBQUFBLElBQ1Q7QUFFQSxXQUFPLGdCQUFnQixjQUFjLElBQUksQ0FBQztBQUFBLEVBQzVDO0FBZkE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTs7O0FDUWUsV0FBUixrQkFBbUMsU0FBUyxNQUFNO0FBQ3ZELFFBQUk7QUFFSixRQUFJLFNBQVMsUUFBUTtBQUNuQixhQUFPLENBQUM7QUFBQSxJQUNWO0FBRUEsUUFBSSxlQUFlLGdCQUFnQixPQUFPO0FBQzFDLFFBQUksU0FBUyxtQkFBbUIsd0JBQXdCLFFBQVEsa0JBQWtCLE9BQU8sU0FBUyxzQkFBc0I7QUFDeEgsUUFBSSxNQUFNQyxXQUFVLFlBQVk7QUFDaEMsUUFBSSxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxJQUFJLGtCQUFrQixDQUFDLEdBQUcsZUFBZSxZQUFZLElBQUksZUFBZSxDQUFDLENBQUMsSUFBSTtBQUNqSCxRQUFJLGNBQWMsS0FBSyxPQUFPLE1BQU07QUFDcEMsV0FBTyxTQUFTO0FBQUE7QUFBQSxNQUNoQixZQUFZLE9BQU8sa0JBQWtCLGNBQWMsTUFBTSxDQUFDLENBQUM7QUFBQTtBQUFBLEVBQzdEO0FBekJBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7OztBQ0hlLFdBQVIsaUJBQWtDLE1BQU07QUFDN0MsV0FBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU07QUFBQSxNQUM3QixNQUFNLEtBQUs7QUFBQSxNQUNYLEtBQUssS0FBSztBQUFBLE1BQ1YsT0FBTyxLQUFLLElBQUksS0FBSztBQUFBLE1BQ3JCLFFBQVEsS0FBSyxJQUFJLEtBQUs7QUFBQSxJQUN4QixDQUFDO0FBQUEsRUFDSDtBQVBBO0FBQUE7QUFBQTtBQUFBOzs7QUNlQSxXQUFTLDJCQUEyQixTQUFTLFVBQVU7QUFDckQsUUFBSSxPQUFPLHNCQUFzQixTQUFTLE9BQU8sYUFBYSxPQUFPO0FBQ3JFLFNBQUssTUFBTSxLQUFLLE1BQU0sUUFBUTtBQUM5QixTQUFLLE9BQU8sS0FBSyxPQUFPLFFBQVE7QUFDaEMsU0FBSyxTQUFTLEtBQUssTUFBTSxRQUFRO0FBQ2pDLFNBQUssUUFBUSxLQUFLLE9BQU8sUUFBUTtBQUNqQyxTQUFLLFFBQVEsUUFBUTtBQUNyQixTQUFLLFNBQVMsUUFBUTtBQUN0QixTQUFLLElBQUksS0FBSztBQUNkLFNBQUssSUFBSSxLQUFLO0FBQ2QsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLDJCQUEyQixTQUFTLGdCQUFnQixVQUFVO0FBQ3JFLFdBQU8sbUJBQW1CLFdBQVcsaUJBQWlCLGdCQUFnQixTQUFTLFFBQVEsQ0FBQyxJQUFJLFVBQVUsY0FBYyxJQUFJLDJCQUEyQixnQkFBZ0IsUUFBUSxJQUFJLGlCQUFpQixnQkFBZ0IsbUJBQW1CLE9BQU8sQ0FBQyxDQUFDO0FBQUEsRUFDOU87QUFLQSxXQUFTLG1CQUFtQixTQUFTO0FBQ25DLFFBQUlDLG1CQUFrQixrQkFBa0IsY0FBYyxPQUFPLENBQUM7QUFDOUQsUUFBSSxvQkFBb0IsQ0FBQyxZQUFZLE9BQU8sRUFBRSxRQUFRLGlCQUFpQixPQUFPLEVBQUUsUUFBUSxLQUFLO0FBQzdGLFFBQUksaUJBQWlCLHFCQUFxQixjQUFjLE9BQU8sSUFBSSxnQkFBZ0IsT0FBTyxJQUFJO0FBRTlGLFFBQUksQ0FBQyxVQUFVLGNBQWMsR0FBRztBQUM5QixhQUFPLENBQUM7QUFBQSxJQUNWO0FBR0EsV0FBT0EsaUJBQWdCLE9BQU8sU0FBVSxnQkFBZ0I7QUFDdEQsYUFBTyxVQUFVLGNBQWMsS0FBSyxTQUFTLGdCQUFnQixjQUFjLEtBQUssWUFBWSxjQUFjLE1BQU07QUFBQSxJQUNsSCxDQUFDO0FBQUEsRUFDSDtBQUllLFdBQVIsZ0JBQWlDLFNBQVMsVUFBVSxjQUFjLFVBQVU7QUFDakYsUUFBSSxzQkFBc0IsYUFBYSxvQkFBb0IsbUJBQW1CLE9BQU8sSUFBSSxDQUFDLEVBQUUsT0FBTyxRQUFRO0FBQzNHLFFBQUlBLG1CQUFrQixDQUFDLEVBQUUsT0FBTyxxQkFBcUIsQ0FBQyxZQUFZLENBQUM7QUFDbkUsUUFBSSxzQkFBc0JBLGlCQUFnQixDQUFDO0FBQzNDLFFBQUksZUFBZUEsaUJBQWdCLE9BQU8sU0FBVSxTQUFTLGdCQUFnQjtBQUMzRSxVQUFJLE9BQU8sMkJBQTJCLFNBQVMsZ0JBQWdCLFFBQVE7QUFDdkUsY0FBUSxNQUFNLElBQUksS0FBSyxLQUFLLFFBQVEsR0FBRztBQUN2QyxjQUFRLFFBQVEsSUFBSSxLQUFLLE9BQU8sUUFBUSxLQUFLO0FBQzdDLGNBQVEsU0FBUyxJQUFJLEtBQUssUUFBUSxRQUFRLE1BQU07QUFDaEQsY0FBUSxPQUFPLElBQUksS0FBSyxNQUFNLFFBQVEsSUFBSTtBQUMxQyxhQUFPO0FBQUEsSUFDVCxHQUFHLDJCQUEyQixTQUFTLHFCQUFxQixRQUFRLENBQUM7QUFDckUsaUJBQWEsUUFBUSxhQUFhLFFBQVEsYUFBYTtBQUN2RCxpQkFBYSxTQUFTLGFBQWEsU0FBUyxhQUFhO0FBQ3pELGlCQUFhLElBQUksYUFBYTtBQUM5QixpQkFBYSxJQUFJLGFBQWE7QUFDOUIsV0FBTztBQUFBLEVBQ1Q7QUFyRUE7QUFBQTtBQUFBLE1BQUFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBOzs7QUNUZSxXQUFSLGVBQWdDLE1BQU07QUFDM0MsUUFBSUMsYUFBWSxLQUFLLFdBQ2pCLFVBQVUsS0FBSyxTQUNmLFlBQVksS0FBSztBQUNyQixRQUFJLGdCQUFnQixZQUFZLGlCQUFpQixTQUFTLElBQUk7QUFDOUQsUUFBSSxZQUFZLFlBQVksYUFBYSxTQUFTLElBQUk7QUFDdEQsUUFBSSxVQUFVQSxXQUFVLElBQUlBLFdBQVUsUUFBUSxJQUFJLFFBQVEsUUFBUTtBQUNsRSxRQUFJLFVBQVVBLFdBQVUsSUFBSUEsV0FBVSxTQUFTLElBQUksUUFBUSxTQUFTO0FBQ3BFLFFBQUk7QUFFSixZQUFRLGVBQWU7QUFBQSxNQUNyQixLQUFLO0FBQ0gsa0JBQVU7QUFBQSxVQUNSLEdBQUc7QUFBQSxVQUNILEdBQUdBLFdBQVUsSUFBSSxRQUFRO0FBQUEsUUFDM0I7QUFDQTtBQUFBLE1BRUYsS0FBSztBQUNILGtCQUFVO0FBQUEsVUFDUixHQUFHO0FBQUEsVUFDSCxHQUFHQSxXQUFVLElBQUlBLFdBQVU7QUFBQSxRQUM3QjtBQUNBO0FBQUEsTUFFRixLQUFLO0FBQ0gsa0JBQVU7QUFBQSxVQUNSLEdBQUdBLFdBQVUsSUFBSUEsV0FBVTtBQUFBLFVBQzNCLEdBQUc7QUFBQSxRQUNMO0FBQ0E7QUFBQSxNQUVGLEtBQUs7QUFDSCxrQkFBVTtBQUFBLFVBQ1IsR0FBR0EsV0FBVSxJQUFJLFFBQVE7QUFBQSxVQUN6QixHQUFHO0FBQUEsUUFDTDtBQUNBO0FBQUEsTUFFRjtBQUNFLGtCQUFVO0FBQUEsVUFDUixHQUFHQSxXQUFVO0FBQUEsVUFDYixHQUFHQSxXQUFVO0FBQUEsUUFDZjtBQUFBLElBQ0o7QUFFQSxRQUFJLFdBQVcsZ0JBQWdCLHlCQUF5QixhQUFhLElBQUk7QUFFekUsUUFBSSxZQUFZLE1BQU07QUFDcEIsVUFBSSxNQUFNLGFBQWEsTUFBTSxXQUFXO0FBRXhDLGNBQVEsV0FBVztBQUFBLFFBQ2pCLEtBQUs7QUFDSCxrQkFBUSxRQUFRLElBQUksUUFBUSxRQUFRLEtBQUtBLFdBQVUsR0FBRyxJQUFJLElBQUksUUFBUSxHQUFHLElBQUk7QUFDN0U7QUFBQSxRQUVGLEtBQUs7QUFDSCxrQkFBUSxRQUFRLElBQUksUUFBUSxRQUFRLEtBQUtBLFdBQVUsR0FBRyxJQUFJLElBQUksUUFBUSxHQUFHLElBQUk7QUFDN0U7QUFBQSxRQUVGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQXJFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0EsTUFBQUM7QUFBQTtBQUFBOzs7QUNPZSxXQUFSLGVBQWdDLE9BQU9DLFVBQVM7QUFDckQsUUFBSUEsYUFBWSxRQUFRO0FBQ3RCLE1BQUFBLFdBQVUsQ0FBQztBQUFBLElBQ2I7QUFFQSxRQUFJLFdBQVdBLFVBQ1gscUJBQXFCLFNBQVMsV0FDOUIsWUFBWSx1QkFBdUIsU0FBUyxNQUFNLFlBQVksb0JBQzlELG9CQUFvQixTQUFTLFVBQzdCLFdBQVcsc0JBQXNCLFNBQVMsTUFBTSxXQUFXLG1CQUMzRCxvQkFBb0IsU0FBUyxVQUM3QixXQUFXLHNCQUFzQixTQUFTLGtCQUFrQixtQkFDNUQsd0JBQXdCLFNBQVMsY0FDakMsZUFBZSwwQkFBMEIsU0FBUyxXQUFXLHVCQUM3RCx3QkFBd0IsU0FBUyxnQkFDakMsaUJBQWlCLDBCQUEwQixTQUFTLFNBQVMsdUJBQzdELHVCQUF1QixTQUFTLGFBQ2hDLGNBQWMseUJBQXlCLFNBQVMsUUFBUSxzQkFDeEQsbUJBQW1CLFNBQVMsU0FDNUIsVUFBVSxxQkFBcUIsU0FBUyxJQUFJO0FBQ2hELFFBQUksZ0JBQWdCLG1CQUFtQixPQUFPLFlBQVksV0FBVyxVQUFVLGdCQUFnQixTQUFTLGNBQWMsQ0FBQztBQUN2SCxRQUFJLGFBQWEsbUJBQW1CLFNBQVMsWUFBWTtBQUN6RCxRQUFJLGFBQWEsTUFBTSxNQUFNO0FBQzdCLFFBQUksVUFBVSxNQUFNLFNBQVMsY0FBYyxhQUFhLGNBQWM7QUFDdEUsUUFBSSxxQkFBcUIsZ0JBQWdCLFVBQVUsT0FBTyxJQUFJLFVBQVUsUUFBUSxrQkFBa0IsbUJBQW1CLE1BQU0sU0FBUyxNQUFNLEdBQUcsVUFBVSxjQUFjLFFBQVE7QUFDN0ssUUFBSSxzQkFBc0Isc0JBQXNCLE1BQU0sU0FBUyxTQUFTO0FBQ3hFLFFBQUlDLGlCQUFnQixlQUFlO0FBQUEsTUFDakMsV0FBVztBQUFBLE1BQ1gsU0FBUztBQUFBLE1BQ1QsVUFBVTtBQUFBLE1BQ1Y7QUFBQSxJQUNGLENBQUM7QUFDRCxRQUFJLG1CQUFtQixpQkFBaUIsT0FBTyxPQUFPLENBQUMsR0FBRyxZQUFZQSxjQUFhLENBQUM7QUFDcEYsUUFBSSxvQkFBb0IsbUJBQW1CLFNBQVMsbUJBQW1CO0FBR3ZFLFFBQUksa0JBQWtCO0FBQUEsTUFDcEIsS0FBSyxtQkFBbUIsTUFBTSxrQkFBa0IsTUFBTSxjQUFjO0FBQUEsTUFDcEUsUUFBUSxrQkFBa0IsU0FBUyxtQkFBbUIsU0FBUyxjQUFjO0FBQUEsTUFDN0UsTUFBTSxtQkFBbUIsT0FBTyxrQkFBa0IsT0FBTyxjQUFjO0FBQUEsTUFDdkUsT0FBTyxrQkFBa0IsUUFBUSxtQkFBbUIsUUFBUSxjQUFjO0FBQUEsSUFDNUU7QUFDQSxRQUFJLGFBQWEsTUFBTSxjQUFjO0FBRXJDLFFBQUksbUJBQW1CLFVBQVUsWUFBWTtBQUMzQyxVQUFJQyxVQUFTLFdBQVcsU0FBUztBQUNqQyxhQUFPLEtBQUssZUFBZSxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQ2xELFlBQUksV0FBVyxDQUFDLE9BQU8sTUFBTSxFQUFFLFFBQVEsR0FBRyxLQUFLLElBQUksSUFBSTtBQUN2RCxZQUFJLE9BQU8sQ0FBQyxLQUFLLE1BQU0sRUFBRSxRQUFRLEdBQUcsS0FBSyxJQUFJLE1BQU07QUFDbkQsd0JBQWdCLEdBQUcsS0FBS0EsUUFBTyxJQUFJLElBQUk7QUFBQSxNQUN6QyxDQUFDO0FBQUEsSUFDSDtBQUVBLFdBQU87QUFBQSxFQUNUO0FBaEVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBQUM7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBOzs7QUNKZSxXQUFSLHFCQUFzQyxPQUFPQyxVQUFTO0FBQzNELFFBQUlBLGFBQVksUUFBUTtBQUN0QixNQUFBQSxXQUFVLENBQUM7QUFBQSxJQUNiO0FBRUEsUUFBSSxXQUFXQSxVQUNYLFlBQVksU0FBUyxXQUNyQixXQUFXLFNBQVMsVUFDcEIsZUFBZSxTQUFTLGNBQ3hCLFVBQVUsU0FBUyxTQUNuQixpQkFBaUIsU0FBUyxnQkFDMUIsd0JBQXdCLFNBQVMsdUJBQ2pDLHdCQUF3QiwwQkFBMEIsU0FBUyxhQUFnQjtBQUMvRSxRQUFJLFlBQVksYUFBYSxTQUFTO0FBQ3RDLFFBQUlDLGNBQWEsWUFBWSxpQkFBaUIsc0JBQXNCLG9CQUFvQixPQUFPLFNBQVVDLFlBQVc7QUFDbEgsYUFBTyxhQUFhQSxVQUFTLE1BQU07QUFBQSxJQUNyQyxDQUFDLElBQUk7QUFDTCxRQUFJLG9CQUFvQkQsWUFBVyxPQUFPLFNBQVVDLFlBQVc7QUFDN0QsYUFBTyxzQkFBc0IsUUFBUUEsVUFBUyxLQUFLO0FBQUEsSUFDckQsQ0FBQztBQUVELFFBQUksa0JBQWtCLFdBQVcsR0FBRztBQUNsQywwQkFBb0JEO0FBQUEsSUFDdEI7QUFHQSxRQUFJLFlBQVksa0JBQWtCLE9BQU8sU0FBVSxLQUFLQyxZQUFXO0FBQ2pFLFVBQUlBLFVBQVMsSUFBSSxlQUFlLE9BQU87QUFBQSxRQUNyQyxXQUFXQTtBQUFBLFFBQ1g7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsQ0FBQyxFQUFFLGlCQUFpQkEsVUFBUyxDQUFDO0FBQzlCLGFBQU87QUFBQSxJQUNULEdBQUcsQ0FBQyxDQUFDO0FBQ0wsV0FBTyxPQUFPLEtBQUssU0FBUyxFQUFFLEtBQUssU0FBVUMsSUFBRyxHQUFHO0FBQ2pELGFBQU8sVUFBVUEsRUFBQyxJQUFJLFVBQVUsQ0FBQztBQUFBLElBQ25DLENBQUM7QUFBQSxFQUNIO0FBMUNBO0FBQUE7QUFBQTtBQUNBLE1BQUFDO0FBQ0E7QUFDQTtBQUFBO0FBQUE7OztBQ0tBLFdBQVMsOEJBQThCLFdBQVc7QUFDaEQsUUFBSSxpQkFBaUIsU0FBUyxNQUFNLE1BQU07QUFDeEMsYUFBTyxDQUFDO0FBQUEsSUFDVjtBQUVBLFFBQUksb0JBQW9CLHFCQUFxQixTQUFTO0FBQ3RELFdBQU8sQ0FBQyw4QkFBOEIsU0FBUyxHQUFHLG1CQUFtQiw4QkFBOEIsaUJBQWlCLENBQUM7QUFBQSxFQUN2SDtBQUVBLFdBQVMsS0FBSyxNQUFNO0FBQ2xCLFFBQUksUUFBUSxLQUFLLE9BQ2JDLFdBQVUsS0FBSyxTQUNmLE9BQU8sS0FBSztBQUVoQixRQUFJLE1BQU0sY0FBYyxJQUFJLEVBQUUsT0FBTztBQUNuQztBQUFBLElBQ0Y7QUFFQSxRQUFJLG9CQUFvQkEsU0FBUSxVQUM1QixnQkFBZ0Isc0JBQXNCLFNBQVMsT0FBTyxtQkFDdEQsbUJBQW1CQSxTQUFRLFNBQzNCLGVBQWUscUJBQXFCLFNBQVMsT0FBTyxrQkFDcEQsOEJBQThCQSxTQUFRLG9CQUN0QyxVQUFVQSxTQUFRLFNBQ2xCLFdBQVdBLFNBQVEsVUFDbkIsZUFBZUEsU0FBUSxjQUN2QixjQUFjQSxTQUFRLGFBQ3RCLHdCQUF3QkEsU0FBUSxnQkFDaEMsaUJBQWlCLDBCQUEwQixTQUFTLE9BQU8sdUJBQzNELHdCQUF3QkEsU0FBUTtBQUNwQyxRQUFJLHFCQUFxQixNQUFNLFFBQVE7QUFDdkMsUUFBSSxnQkFBZ0IsaUJBQWlCLGtCQUFrQjtBQUN2RCxRQUFJLGtCQUFrQixrQkFBa0I7QUFDeEMsUUFBSSxxQkFBcUIsZ0NBQWdDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLHFCQUFxQixrQkFBa0IsQ0FBQyxJQUFJLDhCQUE4QixrQkFBa0I7QUFDM0wsUUFBSUMsY0FBYSxDQUFDLGtCQUFrQixFQUFFLE9BQU8sa0JBQWtCLEVBQUUsT0FBTyxTQUFVLEtBQUtDLFlBQVc7QUFDaEcsYUFBTyxJQUFJLE9BQU8saUJBQWlCQSxVQUFTLE1BQU0sT0FBTyxxQkFBcUIsT0FBTztBQUFBLFFBQ25GLFdBQVdBO0FBQUEsUUFDWDtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUMsSUFBSUEsVUFBUztBQUFBLElBQ2hCLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBSSxnQkFBZ0IsTUFBTSxNQUFNO0FBQ2hDLFFBQUksYUFBYSxNQUFNLE1BQU07QUFDN0IsUUFBSSxZQUFZLG9CQUFJLElBQUk7QUFDeEIsUUFBSSxxQkFBcUI7QUFDekIsUUFBSSx3QkFBd0JELFlBQVcsQ0FBQztBQUV4QyxhQUFTLElBQUksR0FBRyxJQUFJQSxZQUFXLFFBQVEsS0FBSztBQUMxQyxVQUFJLFlBQVlBLFlBQVcsQ0FBQztBQUU1QixVQUFJLGlCQUFpQixpQkFBaUIsU0FBUztBQUUvQyxVQUFJLG1CQUFtQixhQUFhLFNBQVMsTUFBTTtBQUNuRCxVQUFJLGFBQWEsQ0FBQyxLQUFLLE1BQU0sRUFBRSxRQUFRLGNBQWMsS0FBSztBQUMxRCxVQUFJLE1BQU0sYUFBYSxVQUFVO0FBQ2pDLFVBQUksV0FBVyxlQUFlLE9BQU87QUFBQSxRQUNuQztBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUM7QUFDRCxVQUFJLG9CQUFvQixhQUFhLG1CQUFtQixRQUFRLE9BQU8sbUJBQW1CLFNBQVM7QUFFbkcsVUFBSSxjQUFjLEdBQUcsSUFBSSxXQUFXLEdBQUcsR0FBRztBQUN4Qyw0QkFBb0IscUJBQXFCLGlCQUFpQjtBQUFBLE1BQzVEO0FBRUEsVUFBSSxtQkFBbUIscUJBQXFCLGlCQUFpQjtBQUM3RCxVQUFJLFNBQVMsQ0FBQztBQUVkLFVBQUksZUFBZTtBQUNqQixlQUFPLEtBQUssU0FBUyxjQUFjLEtBQUssQ0FBQztBQUFBLE1BQzNDO0FBRUEsVUFBSSxjQUFjO0FBQ2hCLGVBQU8sS0FBSyxTQUFTLGlCQUFpQixLQUFLLEdBQUcsU0FBUyxnQkFBZ0IsS0FBSyxDQUFDO0FBQUEsTUFDL0U7QUFFQSxVQUFJLE9BQU8sTUFBTSxTQUFVLE9BQU87QUFDaEMsZUFBTztBQUFBLE1BQ1QsQ0FBQyxHQUFHO0FBQ0YsZ0NBQXdCO0FBQ3hCLDZCQUFxQjtBQUNyQjtBQUFBLE1BQ0Y7QUFFQSxnQkFBVSxJQUFJLFdBQVcsTUFBTTtBQUFBLElBQ2pDO0FBRUEsUUFBSSxvQkFBb0I7QUFFdEIsVUFBSSxpQkFBaUIsaUJBQWlCLElBQUk7QUFFMUMsVUFBSSxRQUFRLFNBQVNFLE9BQU1DLEtBQUk7QUFDN0IsWUFBSSxtQkFBbUJILFlBQVcsS0FBSyxTQUFVQyxZQUFXO0FBQzFELGNBQUlHLFVBQVMsVUFBVSxJQUFJSCxVQUFTO0FBRXBDLGNBQUlHLFNBQVE7QUFDVixtQkFBT0EsUUFBTyxNQUFNLEdBQUdELEdBQUUsRUFBRSxNQUFNLFNBQVUsT0FBTztBQUNoRCxxQkFBTztBQUFBLFlBQ1QsQ0FBQztBQUFBLFVBQ0g7QUFBQSxRQUNGLENBQUM7QUFFRCxZQUFJLGtCQUFrQjtBQUNwQixrQ0FBd0I7QUFDeEIsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRjtBQUVBLGVBQVMsS0FBSyxnQkFBZ0IsS0FBSyxHQUFHLE1BQU07QUFDMUMsWUFBSSxPQUFPLE1BQU0sRUFBRTtBQUVuQixZQUFJLFNBQVM7QUFBUztBQUFBLE1BQ3hCO0FBQUEsSUFDRjtBQUVBLFFBQUksTUFBTSxjQUFjLHVCQUF1QjtBQUM3QyxZQUFNLGNBQWMsSUFBSSxFQUFFLFFBQVE7QUFDbEMsWUFBTSxZQUFZO0FBQ2xCLFlBQU0sUUFBUTtBQUFBLElBQ2hCO0FBQUEsRUFDRjtBQXRJQSxNQXlJTztBQXpJUDtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUFFO0FBQ0E7QUFtSUEsTUFBTyxlQUFRO0FBQUEsUUFDYixNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsUUFDVCxPQUFPO0FBQUEsUUFDUCxJQUFJO0FBQUEsUUFDSixrQkFBa0IsQ0FBQyxRQUFRO0FBQUEsUUFDM0IsTUFBTTtBQUFBLFVBQ0osT0FBTztBQUFBLFFBQ1Q7QUFBQSxNQUNGO0FBQUE7QUFBQTs7O0FDL0lBLFdBQVMsZUFBZSxVQUFVLE1BQU0sa0JBQWtCO0FBQ3hELFFBQUkscUJBQXFCLFFBQVE7QUFDL0IseUJBQW1CO0FBQUEsUUFDakIsR0FBRztBQUFBLFFBQ0gsR0FBRztBQUFBLE1BQ0w7QUFBQSxJQUNGO0FBRUEsV0FBTztBQUFBLE1BQ0wsS0FBSyxTQUFTLE1BQU0sS0FBSyxTQUFTLGlCQUFpQjtBQUFBLE1BQ25ELE9BQU8sU0FBUyxRQUFRLEtBQUssUUFBUSxpQkFBaUI7QUFBQSxNQUN0RCxRQUFRLFNBQVMsU0FBUyxLQUFLLFNBQVMsaUJBQWlCO0FBQUEsTUFDekQsTUFBTSxTQUFTLE9BQU8sS0FBSyxRQUFRLGlCQUFpQjtBQUFBLElBQ3REO0FBQUEsRUFDRjtBQUVBLFdBQVMsc0JBQXNCLFVBQVU7QUFDdkMsV0FBTyxDQUFDLEtBQUssT0FBTyxRQUFRLElBQUksRUFBRSxLQUFLLFNBQVUsTUFBTTtBQUNyRCxhQUFPLFNBQVMsSUFBSSxLQUFLO0FBQUEsSUFDM0IsQ0FBQztBQUFBLEVBQ0g7QUFFQSxXQUFTQyxNQUFLLE1BQU07QUFDbEIsUUFBSSxRQUFRLEtBQUssT0FDYixPQUFPLEtBQUs7QUFDaEIsUUFBSSxnQkFBZ0IsTUFBTSxNQUFNO0FBQ2hDLFFBQUksYUFBYSxNQUFNLE1BQU07QUFDN0IsUUFBSSxtQkFBbUIsTUFBTSxjQUFjO0FBQzNDLFFBQUksb0JBQW9CLGVBQWUsT0FBTztBQUFBLE1BQzVDLGdCQUFnQjtBQUFBLElBQ2xCLENBQUM7QUFDRCxRQUFJLG9CQUFvQixlQUFlLE9BQU87QUFBQSxNQUM1QyxhQUFhO0FBQUEsSUFDZixDQUFDO0FBQ0QsUUFBSSwyQkFBMkIsZUFBZSxtQkFBbUIsYUFBYTtBQUM5RSxRQUFJLHNCQUFzQixlQUFlLG1CQUFtQixZQUFZLGdCQUFnQjtBQUN4RixRQUFJLG9CQUFvQixzQkFBc0Isd0JBQXdCO0FBQ3RFLFFBQUksbUJBQW1CLHNCQUFzQixtQkFBbUI7QUFDaEUsVUFBTSxjQUFjLElBQUksSUFBSTtBQUFBLE1BQzFCO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUNBLFVBQU0sV0FBVyxTQUFTLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxXQUFXLFFBQVE7QUFBQSxNQUNuRSxnQ0FBZ0M7QUFBQSxNQUNoQyx1QkFBdUI7QUFBQSxJQUN6QixDQUFDO0FBQUEsRUFDSDtBQW5EQSxNQXNETztBQXREUDtBQUFBO0FBQUEsTUFBQUM7QUFDQTtBQXFEQSxNQUFPLGVBQVE7QUFBQSxRQUNiLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxRQUNULE9BQU87QUFBQSxRQUNQLGtCQUFrQixDQUFDLGlCQUFpQjtBQUFBLFFBQ3BDLElBQUlEO0FBQUEsTUFDTjtBQUFBO0FBQUE7OztBQ3pETyxXQUFTLHdCQUF3QixXQUFXLE9BQU9FLFNBQVE7QUFDaEUsUUFBSSxnQkFBZ0IsaUJBQWlCLFNBQVM7QUFDOUMsUUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsRUFBRSxRQUFRLGFBQWEsS0FBSyxJQUFJLEtBQUs7QUFFcEUsUUFBSSxPQUFPLE9BQU9BLFlBQVcsYUFBYUEsUUFBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE9BQU87QUFBQSxNQUN4RTtBQUFBLElBQ0YsQ0FBQyxDQUFDLElBQUlBLFNBQ0YsV0FBVyxLQUFLLENBQUMsR0FDakIsV0FBVyxLQUFLLENBQUM7QUFFckIsZUFBVyxZQUFZO0FBQ3ZCLGdCQUFZLFlBQVksS0FBSztBQUM3QixXQUFPLENBQUMsTUFBTSxLQUFLLEVBQUUsUUFBUSxhQUFhLEtBQUssSUFBSTtBQUFBLE1BQ2pELEdBQUc7QUFBQSxNQUNILEdBQUc7QUFBQSxJQUNMLElBQUk7QUFBQSxNQUNGLEdBQUc7QUFBQSxNQUNILEdBQUc7QUFBQSxJQUNMO0FBQUEsRUFDRjtBQUVBLFdBQVMsT0FBTyxPQUFPO0FBQ3JCLFFBQUksUUFBUSxNQUFNLE9BQ2RDLFdBQVUsTUFBTSxTQUNoQixPQUFPLE1BQU07QUFDakIsUUFBSSxrQkFBa0JBLFNBQVEsUUFDMUJELFVBQVMsb0JBQW9CLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSTtBQUNuRCxRQUFJLE9BQU8sV0FBVyxPQUFPLFNBQVUsS0FBSyxXQUFXO0FBQ3JELFVBQUksU0FBUyxJQUFJLHdCQUF3QixXQUFXLE1BQU0sT0FBT0EsT0FBTTtBQUN2RSxhQUFPO0FBQUEsSUFDVCxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUksd0JBQXdCLEtBQUssTUFBTSxTQUFTLEdBQzVDLElBQUksc0JBQXNCLEdBQzFCLElBQUksc0JBQXNCO0FBRTlCLFFBQUksTUFBTSxjQUFjLGlCQUFpQixNQUFNO0FBQzdDLFlBQU0sY0FBYyxjQUFjLEtBQUs7QUFDdkMsWUFBTSxjQUFjLGNBQWMsS0FBSztBQUFBLElBQ3pDO0FBRUEsVUFBTSxjQUFjLElBQUksSUFBSTtBQUFBLEVBQzlCO0FBNUNBLE1BK0NPO0FBL0NQO0FBQUE7QUFBQTtBQUNBLE1BQUFFO0FBOENBLE1BQU8saUJBQVE7QUFBQSxRQUNiLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxRQUNULE9BQU87QUFBQSxRQUNQLFVBQVUsQ0FBQyxlQUFlO0FBQUEsUUFDMUIsSUFBSTtBQUFBLE1BQ047QUFBQTtBQUFBOzs7QUNuREEsV0FBUyxjQUFjLE1BQU07QUFDM0IsUUFBSSxRQUFRLEtBQUssT0FDYixPQUFPLEtBQUs7QUFLaEIsVUFBTSxjQUFjLElBQUksSUFBSSxlQUFlO0FBQUEsTUFDekMsV0FBVyxNQUFNLE1BQU07QUFBQSxNQUN2QixTQUFTLE1BQU0sTUFBTTtBQUFBLE1BQ3JCLFVBQVU7QUFBQSxNQUNWLFdBQVcsTUFBTTtBQUFBLElBQ25CLENBQUM7QUFBQSxFQUNIO0FBZkEsTUFrQk87QUFsQlA7QUFBQTtBQUFBO0FBa0JBLE1BQU8sd0JBQVE7QUFBQSxRQUNiLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxRQUNULE9BQU87QUFBQSxRQUNQLElBQUk7QUFBQSxRQUNKLE1BQU0sQ0FBQztBQUFBLE1BQ1Q7QUFBQTtBQUFBOzs7QUN4QmUsV0FBUixXQUE0QixNQUFNO0FBQ3ZDLFdBQU8sU0FBUyxNQUFNLE1BQU07QUFBQSxFQUM5QjtBQUZBO0FBQUE7QUFBQTtBQUFBOzs7QUNZQSxXQUFTLGdCQUFnQixNQUFNO0FBQzdCLFFBQUksUUFBUSxLQUFLLE9BQ2JDLFdBQVUsS0FBSyxTQUNmLE9BQU8sS0FBSztBQUNoQixRQUFJLG9CQUFvQkEsU0FBUSxVQUM1QixnQkFBZ0Isc0JBQXNCLFNBQVMsT0FBTyxtQkFDdEQsbUJBQW1CQSxTQUFRLFNBQzNCLGVBQWUscUJBQXFCLFNBQVMsUUFBUSxrQkFDckQsV0FBV0EsU0FBUSxVQUNuQixlQUFlQSxTQUFRLGNBQ3ZCLGNBQWNBLFNBQVEsYUFDdEIsVUFBVUEsU0FBUSxTQUNsQixrQkFBa0JBLFNBQVEsUUFDMUIsU0FBUyxvQkFBb0IsU0FBUyxPQUFPLGlCQUM3Qyx3QkFBd0JBLFNBQVEsY0FDaEMsZUFBZSwwQkFBMEIsU0FBUyxJQUFJO0FBQzFELFFBQUksV0FBVyxlQUFlLE9BQU87QUFBQSxNQUNuQztBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0YsQ0FBQztBQUNELFFBQUksZ0JBQWdCLGlCQUFpQixNQUFNLFNBQVM7QUFDcEQsUUFBSSxZQUFZLGFBQWEsTUFBTSxTQUFTO0FBQzVDLFFBQUksa0JBQWtCLENBQUM7QUFDdkIsUUFBSSxXQUFXLHlCQUF5QixhQUFhO0FBQ3JELFFBQUksVUFBVSxXQUFXLFFBQVE7QUFDakMsUUFBSUMsaUJBQWdCLE1BQU0sY0FBYztBQUN4QyxRQUFJLGdCQUFnQixNQUFNLE1BQU07QUFDaEMsUUFBSSxhQUFhLE1BQU0sTUFBTTtBQUM3QixRQUFJLG9CQUFvQixPQUFPLGlCQUFpQixhQUFhLGFBQWEsT0FBTyxPQUFPLENBQUMsR0FBRyxNQUFNLE9BQU87QUFBQSxNQUN2RyxXQUFXLE1BQU07QUFBQSxJQUNuQixDQUFDLENBQUMsSUFBSTtBQUNOLFFBQUksOEJBQThCLE9BQU8sc0JBQXNCLFdBQVc7QUFBQSxNQUN4RSxVQUFVO0FBQUEsTUFDVixTQUFTO0FBQUEsSUFDWCxJQUFJLE9BQU8sT0FBTztBQUFBLE1BQ2hCLFVBQVU7QUFBQSxNQUNWLFNBQVM7QUFBQSxJQUNYLEdBQUcsaUJBQWlCO0FBQ3BCLFFBQUksc0JBQXNCLE1BQU0sY0FBYyxTQUFTLE1BQU0sY0FBYyxPQUFPLE1BQU0sU0FBUyxJQUFJO0FBQ3JHLFFBQUksT0FBTztBQUFBLE1BQ1QsR0FBRztBQUFBLE1BQ0gsR0FBRztBQUFBLElBQ0w7QUFFQSxRQUFJLENBQUNBLGdCQUFlO0FBQ2xCO0FBQUEsSUFDRjtBQUVBLFFBQUksZUFBZTtBQUNqQixVQUFJO0FBRUosVUFBSSxXQUFXLGFBQWEsTUFBTSxNQUFNO0FBQ3hDLFVBQUksVUFBVSxhQUFhLE1BQU0sU0FBUztBQUMxQyxVQUFJLE1BQU0sYUFBYSxNQUFNLFdBQVc7QUFDeEMsVUFBSUMsVUFBU0QsZUFBYyxRQUFRO0FBQ25DLFVBQUlFLE9BQU1ELFVBQVMsU0FBUyxRQUFRO0FBQ3BDLFVBQUlFLE9BQU1GLFVBQVMsU0FBUyxPQUFPO0FBQ25DLFVBQUksV0FBVyxTQUFTLENBQUMsV0FBVyxHQUFHLElBQUksSUFBSTtBQUMvQyxVQUFJLFNBQVMsY0FBYyxRQUFRLGNBQWMsR0FBRyxJQUFJLFdBQVcsR0FBRztBQUN0RSxVQUFJLFNBQVMsY0FBYyxRQUFRLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUc7QUFHeEUsVUFBSSxlQUFlLE1BQU0sU0FBUztBQUNsQyxVQUFJLFlBQVksVUFBVSxlQUFlLGNBQWMsWUFBWSxJQUFJO0FBQUEsUUFDckUsT0FBTztBQUFBLFFBQ1AsUUFBUTtBQUFBLE1BQ1Y7QUFDQSxVQUFJLHFCQUFxQixNQUFNLGNBQWMsa0JBQWtCLElBQUksTUFBTSxjQUFjLGtCQUFrQixFQUFFLFVBQVUsbUJBQW1CO0FBQ3hJLFVBQUksa0JBQWtCLG1CQUFtQixRQUFRO0FBQ2pELFVBQUksa0JBQWtCLG1CQUFtQixPQUFPO0FBTWhELFVBQUksV0FBVyxPQUFPLEdBQUcsY0FBYyxHQUFHLEdBQUcsVUFBVSxHQUFHLENBQUM7QUFDM0QsVUFBSSxZQUFZLGtCQUFrQixjQUFjLEdBQUcsSUFBSSxJQUFJLFdBQVcsV0FBVyxrQkFBa0IsNEJBQTRCLFdBQVcsU0FBUyxXQUFXLGtCQUFrQiw0QkFBNEI7QUFDNU0sVUFBSSxZQUFZLGtCQUFrQixDQUFDLGNBQWMsR0FBRyxJQUFJLElBQUksV0FBVyxXQUFXLGtCQUFrQiw0QkFBNEIsV0FBVyxTQUFTLFdBQVcsa0JBQWtCLDRCQUE0QjtBQUM3TSxVQUFJLG9CQUFvQixNQUFNLFNBQVMsU0FBUyxnQkFBZ0IsTUFBTSxTQUFTLEtBQUs7QUFDcEYsVUFBSSxlQUFlLG9CQUFvQixhQUFhLE1BQU0sa0JBQWtCLGFBQWEsSUFBSSxrQkFBa0IsY0FBYyxJQUFJO0FBQ2pJLFVBQUksdUJBQXVCLHdCQUF3Qix1QkFBdUIsT0FBTyxTQUFTLG9CQUFvQixRQUFRLE1BQU0sT0FBTyx3QkFBd0I7QUFDM0osVUFBSSxZQUFZQSxVQUFTLFlBQVksc0JBQXNCO0FBQzNELFVBQUksWUFBWUEsVUFBUyxZQUFZO0FBQ3JDLFVBQUksa0JBQWtCLE9BQU8sU0FBUyxJQUFRQyxNQUFLLFNBQVMsSUFBSUEsTUFBS0QsU0FBUSxTQUFTLElBQVFFLE1BQUssU0FBUyxJQUFJQSxJQUFHO0FBQ25ILE1BQUFILGVBQWMsUUFBUSxJQUFJO0FBQzFCLFdBQUssUUFBUSxJQUFJLGtCQUFrQkM7QUFBQSxJQUNyQztBQUVBLFFBQUksY0FBYztBQUNoQixVQUFJO0FBRUosVUFBSSxZQUFZLGFBQWEsTUFBTSxNQUFNO0FBRXpDLFVBQUksV0FBVyxhQUFhLE1BQU0sU0FBUztBQUUzQyxVQUFJLFVBQVVELGVBQWMsT0FBTztBQUVuQyxVQUFJLE9BQU8sWUFBWSxNQUFNLFdBQVc7QUFFeEMsVUFBSSxPQUFPLFVBQVUsU0FBUyxTQUFTO0FBRXZDLFVBQUksT0FBTyxVQUFVLFNBQVMsUUFBUTtBQUV0QyxVQUFJLGVBQWUsQ0FBQyxLQUFLLElBQUksRUFBRSxRQUFRLGFBQWEsTUFBTTtBQUUxRCxVQUFJLHdCQUF3Qix5QkFBeUIsdUJBQXVCLE9BQU8sU0FBUyxvQkFBb0IsT0FBTyxNQUFNLE9BQU8seUJBQXlCO0FBRTdKLFVBQUksYUFBYSxlQUFlLE9BQU8sVUFBVSxjQUFjLElBQUksSUFBSSxXQUFXLElBQUksSUFBSSx1QkFBdUIsNEJBQTRCO0FBRTdJLFVBQUksYUFBYSxlQUFlLFVBQVUsY0FBYyxJQUFJLElBQUksV0FBVyxJQUFJLElBQUksdUJBQXVCLDRCQUE0QixVQUFVO0FBRWhKLFVBQUksbUJBQW1CLFVBQVUsZUFBZSxlQUFlLFlBQVksU0FBUyxVQUFVLElBQUksT0FBTyxTQUFTLGFBQWEsTUFBTSxTQUFTLFNBQVMsYUFBYSxJQUFJO0FBRXhLLE1BQUFBLGVBQWMsT0FBTyxJQUFJO0FBQ3pCLFdBQUssT0FBTyxJQUFJLG1CQUFtQjtBQUFBLElBQ3JDO0FBRUEsVUFBTSxjQUFjLElBQUksSUFBSTtBQUFBLEVBQzlCO0FBcElBLE1BdUlPO0FBdklQO0FBQUE7QUFBQSxNQUFBSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBNkhBLE1BQU8sMEJBQVE7QUFBQSxRQUNiLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxRQUNULE9BQU87QUFBQSxRQUNQLElBQUk7QUFBQSxRQUNKLGtCQUFrQixDQUFDLFFBQVE7QUFBQSxNQUM3QjtBQUFBO0FBQUE7OztBQzdJQTtBQUFBO0FBQUE7QUFBQTs7O0FDQWUsV0FBUixxQkFBc0MsU0FBUztBQUNwRCxXQUFPO0FBQUEsTUFDTCxZQUFZLFFBQVE7QUFBQSxNQUNwQixXQUFXLFFBQVE7QUFBQSxJQUNyQjtBQUFBLEVBQ0Y7QUFMQTtBQUFBO0FBQUE7QUFBQTs7O0FDSWUsV0FBUixjQUErQixNQUFNO0FBQzFDLFFBQUksU0FBU0MsV0FBVSxJQUFJLEtBQUssQ0FBQyxjQUFjLElBQUksR0FBRztBQUNwRCxhQUFPLGdCQUFnQixJQUFJO0FBQUEsSUFDN0IsT0FBTztBQUNMLGFBQU8scUJBQXFCLElBQUk7QUFBQSxJQUNsQztBQUFBLEVBQ0Y7QUFWQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBOzs7QUNNQSxXQUFTLGdCQUFnQixTQUFTO0FBQ2hDLFFBQUksT0FBTyxRQUFRLHNCQUFzQjtBQUN6QyxRQUFJLFNBQVMsTUFBTSxLQUFLLEtBQUssSUFBSSxRQUFRLGVBQWU7QUFDeEQsUUFBSSxTQUFTLE1BQU0sS0FBSyxNQUFNLElBQUksUUFBUSxnQkFBZ0I7QUFDMUQsV0FBTyxXQUFXLEtBQUssV0FBVztBQUFBLEVBQ3BDO0FBSWUsV0FBUixpQkFBa0MseUJBQXlCLGNBQWMsU0FBUztBQUN2RixRQUFJLFlBQVksUUFBUTtBQUN0QixnQkFBVTtBQUFBLElBQ1o7QUFFQSxRQUFJLDBCQUEwQixjQUFjLFlBQVk7QUFDeEQsUUFBSSx1QkFBdUIsY0FBYyxZQUFZLEtBQUssZ0JBQWdCLFlBQVk7QUFDdEYsUUFBSSxrQkFBa0IsbUJBQW1CLFlBQVk7QUFDckQsUUFBSSxPQUFPLHNCQUFzQix5QkFBeUIsc0JBQXNCLE9BQU87QUFDdkYsUUFBSSxTQUFTO0FBQUEsTUFDWCxZQUFZO0FBQUEsTUFDWixXQUFXO0FBQUEsSUFDYjtBQUNBLFFBQUksVUFBVTtBQUFBLE1BQ1osR0FBRztBQUFBLE1BQ0gsR0FBRztBQUFBLElBQ0w7QUFFQSxRQUFJLDJCQUEyQixDQUFDLDJCQUEyQixDQUFDLFNBQVM7QUFDbkUsVUFBSSxZQUFZLFlBQVksTUFBTTtBQUFBLE1BQ2xDLGVBQWUsZUFBZSxHQUFHO0FBQy9CLGlCQUFTLGNBQWMsWUFBWTtBQUFBLE1BQ3JDO0FBRUEsVUFBSSxjQUFjLFlBQVksR0FBRztBQUMvQixrQkFBVSxzQkFBc0IsY0FBYyxJQUFJO0FBQ2xELGdCQUFRLEtBQUssYUFBYTtBQUMxQixnQkFBUSxLQUFLLGFBQWE7QUFBQSxNQUM1QixXQUFXLGlCQUFpQjtBQUMxQixnQkFBUSxJQUFJLG9CQUFvQixlQUFlO0FBQUEsTUFDakQ7QUFBQSxJQUNGO0FBRUEsV0FBTztBQUFBLE1BQ0wsR0FBRyxLQUFLLE9BQU8sT0FBTyxhQUFhLFFBQVE7QUFBQSxNQUMzQyxHQUFHLEtBQUssTUFBTSxPQUFPLFlBQVksUUFBUTtBQUFBLE1BQ3pDLE9BQU8sS0FBSztBQUFBLE1BQ1osUUFBUSxLQUFLO0FBQUEsSUFDZjtBQUFBLEVBQ0Y7QUF6REE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBOzs7QUNMQSxXQUFTLE1BQU0sV0FBVztBQUN4QixRQUFJLE1BQU0sb0JBQUksSUFBSTtBQUNsQixRQUFJLFVBQVUsb0JBQUksSUFBSTtBQUN0QixRQUFJLFNBQVMsQ0FBQztBQUNkLGNBQVUsUUFBUSxTQUFVLFVBQVU7QUFDcEMsVUFBSSxJQUFJLFNBQVMsTUFBTSxRQUFRO0FBQUEsSUFDakMsQ0FBQztBQUVELGFBQVMsS0FBSyxVQUFVO0FBQ3RCLGNBQVEsSUFBSSxTQUFTLElBQUk7QUFDekIsVUFBSSxXQUFXLENBQUMsRUFBRSxPQUFPLFNBQVMsWUFBWSxDQUFDLEdBQUcsU0FBUyxvQkFBb0IsQ0FBQyxDQUFDO0FBQ2pGLGVBQVMsUUFBUSxTQUFVLEtBQUs7QUFDOUIsWUFBSSxDQUFDLFFBQVEsSUFBSSxHQUFHLEdBQUc7QUFDckIsY0FBSSxjQUFjLElBQUksSUFBSSxHQUFHO0FBRTdCLGNBQUksYUFBYTtBQUNmLGlCQUFLLFdBQVc7QUFBQSxVQUNsQjtBQUFBLFFBQ0Y7QUFBQSxNQUNGLENBQUM7QUFDRCxhQUFPLEtBQUssUUFBUTtBQUFBLElBQ3RCO0FBRUEsY0FBVSxRQUFRLFNBQVUsVUFBVTtBQUNwQyxVQUFJLENBQUMsUUFBUSxJQUFJLFNBQVMsSUFBSSxHQUFHO0FBRS9CLGFBQUssUUFBUTtBQUFBLE1BQ2Y7QUFBQSxJQUNGLENBQUM7QUFDRCxXQUFPO0FBQUEsRUFDVDtBQUVlLFdBQVIsZUFBZ0MsV0FBVztBQUVoRCxRQUFJLG1CQUFtQixNQUFNLFNBQVM7QUFFdEMsV0FBTyxlQUFlLE9BQU8sU0FBVSxLQUFLLE9BQU87QUFDakQsYUFBTyxJQUFJLE9BQU8saUJBQWlCLE9BQU8sU0FBVSxVQUFVO0FBQzVELGVBQU8sU0FBUyxVQUFVO0FBQUEsTUFDNUIsQ0FBQyxDQUFDO0FBQUEsSUFDSixHQUFHLENBQUMsQ0FBQztBQUFBLEVBQ1A7QUEzQ0E7QUFBQTtBQUFBLE1BQUFDO0FBQUE7QUFBQTs7O0FDQWUsV0FBUixTQUEwQkMsS0FBSTtBQUNuQyxRQUFJO0FBQ0osV0FBTyxXQUFZO0FBQ2pCLFVBQUksQ0FBQyxTQUFTO0FBQ1osa0JBQVUsSUFBSSxRQUFRLFNBQVUsU0FBUztBQUN2QyxrQkFBUSxRQUFRLEVBQUUsS0FBSyxXQUFZO0FBQ2pDLHNCQUFVO0FBQ1Ysb0JBQVFBLElBQUcsQ0FBQztBQUFBLFVBQ2QsQ0FBQztBQUFBLFFBQ0gsQ0FBQztBQUFBLE1BQ0g7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFkQTtBQUFBO0FBQUE7QUFBQTs7O0FDQWUsV0FBUixZQUE2QixXQUFXO0FBQzdDLFFBQUksU0FBUyxVQUFVLE9BQU8sU0FBVUMsU0FBUSxTQUFTO0FBQ3ZELFVBQUksV0FBV0EsUUFBTyxRQUFRLElBQUk7QUFDbEMsTUFBQUEsUUFBTyxRQUFRLElBQUksSUFBSSxXQUFXLE9BQU8sT0FBTyxDQUFDLEdBQUcsVUFBVSxTQUFTO0FBQUEsUUFDckUsU0FBUyxPQUFPLE9BQU8sQ0FBQyxHQUFHLFNBQVMsU0FBUyxRQUFRLE9BQU87QUFBQSxRQUM1RCxNQUFNLE9BQU8sT0FBTyxDQUFDLEdBQUcsU0FBUyxNQUFNLFFBQVEsSUFBSTtBQUFBLE1BQ3JELENBQUMsSUFBSTtBQUNMLGFBQU9BO0FBQUEsSUFDVCxHQUFHLENBQUMsQ0FBQztBQUVMLFdBQU8sT0FBTyxLQUFLLE1BQU0sRUFBRSxJQUFJLFNBQVUsS0FBSztBQUM1QyxhQUFPLE9BQU8sR0FBRztBQUFBLElBQ25CLENBQUM7QUFBQSxFQUNIO0FBYkE7QUFBQTtBQUFBO0FBQUE7OztBQ2VBLFdBQVMsbUJBQW1CO0FBQzFCLGFBQVMsT0FBTyxVQUFVLFFBQVEsT0FBTyxJQUFJLE1BQU0sSUFBSSxHQUFHLE9BQU8sR0FBRyxPQUFPLE1BQU0sUUFBUTtBQUN2RixXQUFLLElBQUksSUFBSSxVQUFVLElBQUk7QUFBQSxJQUM3QjtBQUVBLFdBQU8sQ0FBQyxLQUFLLEtBQUssU0FBVSxTQUFTO0FBQ25DLGFBQU8sRUFBRSxXQUFXLE9BQU8sUUFBUSwwQkFBMEI7QUFBQSxJQUMvRCxDQUFDO0FBQUEsRUFDSDtBQUVPLFdBQVMsZ0JBQWdCLGtCQUFrQjtBQUNoRCxRQUFJLHFCQUFxQixRQUFRO0FBQy9CLHlCQUFtQixDQUFDO0FBQUEsSUFDdEI7QUFFQSxRQUFJLG9CQUFvQixrQkFDcEIsd0JBQXdCLGtCQUFrQixrQkFDMUNDLG9CQUFtQiwwQkFBMEIsU0FBUyxDQUFDLElBQUksdUJBQzNELHlCQUF5QixrQkFBa0IsZ0JBQzNDLGlCQUFpQiwyQkFBMkIsU0FBUyxrQkFBa0I7QUFDM0UsV0FBTyxTQUFTQyxjQUFhQyxZQUFXQyxTQUFRQyxVQUFTO0FBQ3ZELFVBQUlBLGFBQVksUUFBUTtBQUN0QixRQUFBQSxXQUFVO0FBQUEsTUFDWjtBQUVBLFVBQUksUUFBUTtBQUFBLFFBQ1YsV0FBVztBQUFBLFFBQ1gsa0JBQWtCLENBQUM7QUFBQSxRQUNuQixTQUFTLE9BQU8sT0FBTyxDQUFDLEdBQUcsaUJBQWlCLGNBQWM7QUFBQSxRQUMxRCxlQUFlLENBQUM7QUFBQSxRQUNoQixVQUFVO0FBQUEsVUFDUixXQUFXRjtBQUFBLFVBQ1gsUUFBUUM7QUFBQSxRQUNWO0FBQUEsUUFDQSxZQUFZLENBQUM7QUFBQSxRQUNiLFFBQVEsQ0FBQztBQUFBLE1BQ1g7QUFDQSxVQUFJLG1CQUFtQixDQUFDO0FBQ3hCLFVBQUksY0FBYztBQUNsQixVQUFJLFdBQVc7QUFBQSxRQUNiO0FBQUEsUUFDQSxZQUFZLFNBQVMsV0FBVyxrQkFBa0I7QUFDaEQsY0FBSUMsV0FBVSxPQUFPLHFCQUFxQixhQUFhLGlCQUFpQixNQUFNLE9BQU8sSUFBSTtBQUN6RixpQ0FBdUI7QUFDdkIsZ0JBQU0sVUFBVSxPQUFPLE9BQU8sQ0FBQyxHQUFHLGdCQUFnQixNQUFNLFNBQVNBLFFBQU87QUFDeEUsZ0JBQU0sZ0JBQWdCO0FBQUEsWUFDcEIsV0FBVyxVQUFVRixVQUFTLElBQUksa0JBQWtCQSxVQUFTLElBQUlBLFdBQVUsaUJBQWlCLGtCQUFrQkEsV0FBVSxjQUFjLElBQUksQ0FBQztBQUFBLFlBQzNJLFFBQVEsa0JBQWtCQyxPQUFNO0FBQUEsVUFDbEM7QUFHQSxjQUFJLG1CQUFtQixlQUFlLFlBQVksQ0FBQyxFQUFFLE9BQU9ILG1CQUFrQixNQUFNLFFBQVEsU0FBUyxDQUFDLENBQUM7QUFFdkcsZ0JBQU0sbUJBQW1CLGlCQUFpQixPQUFPLFNBQVUsR0FBRztBQUM1RCxtQkFBTyxFQUFFO0FBQUEsVUFDWCxDQUFDO0FBQ0QsNkJBQW1CO0FBQ25CLGlCQUFPLFNBQVMsT0FBTztBQUFBLFFBQ3pCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsYUFBYSxTQUFTLGNBQWM7QUFDbEMsY0FBSSxhQUFhO0FBQ2Y7QUFBQSxVQUNGO0FBRUEsY0FBSSxrQkFBa0IsTUFBTSxVQUN4QkUsYUFBWSxnQkFBZ0IsV0FDNUJDLFVBQVMsZ0JBQWdCO0FBRzdCLGNBQUksQ0FBQyxpQkFBaUJELFlBQVdDLE9BQU0sR0FBRztBQUN4QztBQUFBLFVBQ0Y7QUFHQSxnQkFBTSxRQUFRO0FBQUEsWUFDWixXQUFXLGlCQUFpQkQsWUFBVyxnQkFBZ0JDLE9BQU0sR0FBRyxNQUFNLFFBQVEsYUFBYSxPQUFPO0FBQUEsWUFDbEcsUUFBUSxjQUFjQSxPQUFNO0FBQUEsVUFDOUI7QUFNQSxnQkFBTSxRQUFRO0FBQ2QsZ0JBQU0sWUFBWSxNQUFNLFFBQVE7QUFLaEMsZ0JBQU0saUJBQWlCLFFBQVEsU0FBVSxVQUFVO0FBQ2pELG1CQUFPLE1BQU0sY0FBYyxTQUFTLElBQUksSUFBSSxPQUFPLE9BQU8sQ0FBQyxHQUFHLFNBQVMsSUFBSTtBQUFBLFVBQzdFLENBQUM7QUFFRCxtQkFBUyxRQUFRLEdBQUcsUUFBUSxNQUFNLGlCQUFpQixRQUFRLFNBQVM7QUFDbEUsZ0JBQUksTUFBTSxVQUFVLE1BQU07QUFDeEIsb0JBQU0sUUFBUTtBQUNkLHNCQUFRO0FBQ1I7QUFBQSxZQUNGO0FBRUEsZ0JBQUksd0JBQXdCLE1BQU0saUJBQWlCLEtBQUssR0FDcERFLE1BQUssc0JBQXNCLElBQzNCLHlCQUF5QixzQkFBc0IsU0FDL0MsV0FBVywyQkFBMkIsU0FBUyxDQUFDLElBQUksd0JBQ3BELE9BQU8sc0JBQXNCO0FBRWpDLGdCQUFJLE9BQU9BLFFBQU8sWUFBWTtBQUM1QixzQkFBUUEsSUFBRztBQUFBLGdCQUNUO0FBQUEsZ0JBQ0EsU0FBUztBQUFBLGdCQUNUO0FBQUEsZ0JBQ0E7QUFBQSxjQUNGLENBQUMsS0FBSztBQUFBLFlBQ1I7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBO0FBQUE7QUFBQSxRQUdBLFFBQVEsU0FBUyxXQUFZO0FBQzNCLGlCQUFPLElBQUksUUFBUSxTQUFVLFNBQVM7QUFDcEMscUJBQVMsWUFBWTtBQUNyQixvQkFBUSxLQUFLO0FBQUEsVUFDZixDQUFDO0FBQUEsUUFDSCxDQUFDO0FBQUEsUUFDRCxTQUFTLFNBQVMsVUFBVTtBQUMxQixpQ0FBdUI7QUFDdkIsd0JBQWM7QUFBQSxRQUNoQjtBQUFBLE1BQ0Y7QUFFQSxVQUFJLENBQUMsaUJBQWlCSCxZQUFXQyxPQUFNLEdBQUc7QUFDeEMsZUFBTztBQUFBLE1BQ1Q7QUFFQSxlQUFTLFdBQVdDLFFBQU8sRUFBRSxLQUFLLFNBQVVFLFFBQU87QUFDakQsWUFBSSxDQUFDLGVBQWVGLFNBQVEsZUFBZTtBQUN6QyxVQUFBQSxTQUFRLGNBQWNFLE1BQUs7QUFBQSxRQUM3QjtBQUFBLE1BQ0YsQ0FBQztBQU1ELGVBQVMscUJBQXFCO0FBQzVCLGNBQU0saUJBQWlCLFFBQVEsU0FBVSxNQUFNO0FBQzdDLGNBQUksT0FBTyxLQUFLLE1BQ1osZUFBZSxLQUFLLFNBQ3BCRixXQUFVLGlCQUFpQixTQUFTLENBQUMsSUFBSSxjQUN6Q0csVUFBUyxLQUFLO0FBRWxCLGNBQUksT0FBT0EsWUFBVyxZQUFZO0FBQ2hDLGdCQUFJLFlBQVlBLFFBQU87QUFBQSxjQUNyQjtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQSxTQUFTSDtBQUFBLFlBQ1gsQ0FBQztBQUVELGdCQUFJLFNBQVMsU0FBU0ksVUFBUztBQUFBLFlBQUM7QUFFaEMsNkJBQWlCLEtBQUssYUFBYSxNQUFNO0FBQUEsVUFDM0M7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBRUEsZUFBUyx5QkFBeUI7QUFDaEMseUJBQWlCLFFBQVEsU0FBVUgsS0FBSTtBQUNyQyxpQkFBT0EsSUFBRztBQUFBLFFBQ1osQ0FBQztBQUNELDJCQUFtQixDQUFDO0FBQUEsTUFDdEI7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFuTUEsTUFTSTtBQVRKO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0EsTUFBSSxrQkFBa0I7QUFBQSxRQUNwQixXQUFXO0FBQUEsUUFDWCxXQUFXLENBQUM7QUFBQSxRQUNaLFVBQVU7QUFBQSxNQUNaO0FBQUE7QUFBQTs7O0FDYkEsTUFVSSxrQkFDQTtBQVhKO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVVBO0FBVEEsTUFBSSxtQkFBbUIsQ0FBQyx3QkFBZ0IsdUJBQWUsdUJBQWUscUJBQWEsZ0JBQVEsY0FBTSx5QkFBaUIsZUFBTyxZQUFJO0FBQzdILE1BQUksZUFBNEIsZ0NBQWdCO0FBQUEsUUFDOUM7QUFBQSxNQUNGLENBQUM7QUFBQTtBQUFBOzs7QUNiRDtBQUFBO0FBQUEsTUFBQUk7QUFDQTtBQUlBO0FBQUE7QUFBQTs7O0FDTEE7QUFBQTtBQUFBO0FBQUE7QUEwQkEsV0FBUyxPQUFPQyxNQUFLQyxNQUFLO0FBQ3pCLFFBQUlELFNBQVEsUUFBVztBQUN0QixNQUFBQSxPQUFNO0FBQUEsSUFDUDtBQUNBLFFBQUlDLFNBQVEsUUFBVztBQUN0QixNQUFBQSxPQUFNO0FBQUEsSUFDUDtBQUVBLFFBQUlBLE9BQU1ELE1BQUs7QUFDZCxZQUFNLElBQUksTUFBTSw4QkFBOEI7QUFBQSxJQUMvQztBQUVBLFdBQU8sS0FBSyxNQUFNLE9BQU9BLE1BQUtDLElBQUcsQ0FBQztBQUFBLEVBQ25DO0FBd0JBLFdBQVMsT0FBT0QsTUFBS0MsTUFBSztBQUN6QixRQUFJO0FBQ0osVUFBTUMsbUJBQWtCLFVBQVU7QUFFbEMsWUFDQ0EsbUJBQWtCLFFBQVEsS0FDMUJBLG1CQUFrQixVQUFVLEtBQzVCQSxtQkFBa0IsUUFBUSxLQUMxQjtBQUVELFFBQUksT0FBTyxVQUFVLGFBQWE7QUFDakMsWUFBTSxJQUFJLE1BQU0sZUFBZTtBQUFBLElBQ2hDO0FBRUEsUUFBSSxPQUFPO0FBQ1gsVUFBTSxRQUFRRCxPQUFNRDtBQUNwQixRQUFJLFFBQVEsR0FBRztBQUNkLFlBQU0sSUFBSSxNQUFNLHNEQUFzRDtBQUFBLElBQ3ZFO0FBRUEsVUFBTSxhQUFhLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxDQUFDO0FBQzdDLFFBQUksYUFBYSxJQUFJO0FBQ3BCLFlBQU0sSUFBSSxNQUFNLGlEQUFpRDtBQUFBLElBQ2xFO0FBQ0EsVUFBTSxjQUFjLEtBQUssS0FBSyxhQUFhLENBQUM7QUFDNUMsVUFBTSxPQUFPLEtBQUssSUFBSSxHQUFHLFVBQVUsSUFBSTtBQUV2QyxVQUFNLFlBQVksSUFBSSxXQUFXLFdBQVc7QUFDNUMsVUFBTSxnQkFBZ0IsU0FBUztBQUUvQixRQUFJLEtBQUssY0FBYyxLQUFLO0FBQzVCLGFBQVMsSUFBSSxHQUFHLElBQUksYUFBYSxLQUFLO0FBQ3JDLGNBQVEsVUFBVSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQztBQUNwQyxXQUFLO0FBQUEsSUFDTjtBQUVBLFdBQU8sT0FBTztBQUVkLFFBQUksUUFBUSxPQUFPO0FBQ2xCLGFBQU8sT0FBT0EsTUFBS0MsSUFBRztBQUFBLElBQ3ZCO0FBRUEsUUFBSSxPQUFPRCxNQUFLO0FBQ2YsY0FBUUE7QUFBQSxJQUNUO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUE5R0EsTUE2Q007QUE3Q047QUFBQTtBQU9BO0FBc0NBLE1BQU0sTUFBTTtBQUVaLFdBQUssT0FDSixLQUFLLFFBQ0wsU0FBVSxHQUFHO0FBQ1osZUFBTyxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDO0FBQUEsTUFDaEM7QUFBQTtBQUFBOzs7QUNlRCxXQUFTLGVBQWU7QUFDdkIsU0FBSyxjQUFjLEVBQUUsT0FBTyxJQUFJLFdBQVcsTUFBTTtBQUNoRCxXQUFLLGNBQWMsRUFBRSxjQUFjLElBQUk7QUFDdkMsV0FBSyxjQUFjLEVBQUUsVUFBVSxFQUFFO0FBQUEsSUFDbEMsR0FBRyxLQUFLLGNBQWMsRUFBRSxPQUFPLENBQUM7QUFBQSxFQUNqQztBQU9BLFdBQVMsS0FBSyxPQUFPLFVBQVU7QUFDOUIsU0FBSyxjQUFjLElBQUk7QUFBQSxNQUN0QjtBQUFBLE1BQ0E7QUFBQSxNQUNBLGNBQWM7QUFBQSxNQUNkLE9BQU87QUFBQSxJQUNSO0FBRUEsaUJBQWEsS0FBSyxJQUFJO0FBQUEsRUFDdkI7QUF2RkEsTUF5Qk07QUF6Qk47QUFBQTtBQU9BO0FBRUE7QUFDQTtBQUNBO0FBY0EsTUFBTSxpQkFBTixjQUE2QixLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBU2pDLFlBQVksT0FBTyxVQUFVO0FBQzVCLGdCQUFNO0FBRU4sZUFBSyxLQUFLLE1BQU0sZ0JBQWdCLEtBQUssR0FBRyxpQkFBaUIsUUFBUSxDQUFDO0FBQUEsUUFDbkU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsTUFBTSxPQUFPO0FBQ1osY0FBSSxLQUFLLGNBQWMsRUFBRSxjQUFjLE1BQU0sTUFBTTtBQUNsRCxrQkFBTSxJQUFJLE1BQU0saUJBQWlCO0FBQUEsVUFDbEM7QUFFQSxjQUFJLFVBQVUsS0FBSyxHQUFHO0FBQ3JCLGlCQUFLLGNBQWMsRUFBRSxPQUFPLElBQUk7QUFBQSxVQUNqQyxXQUFXLFVBQVUsUUFBVztBQUMvQixrQkFBTSxJQUFJLE1BQU0sc0JBQXNCO0FBQUEsVUFDdkM7QUFFQSx1QkFBYSxLQUFLLGNBQWMsRUFBRSxPQUFPLENBQUM7QUFFMUMsdUJBQWEsS0FBSyxJQUFJO0FBRXRCLGlCQUFPO0FBQUEsUUFDUjtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUM3REEsTUFtQk0sVUF1REE7QUExRU47QUFBQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BLE1BQU0sV0FBTixNQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBU2QsWUFBWSxVQUFVLE1BQU07QUFDM0IsZUFBSyxjQUFjLElBQUk7QUFBQSxZQUN0QixVQUFVLGlCQUFpQixRQUFRO0FBQUEsWUFDbkMsTUFBTSxnQkFBZ0IsUUFBUSxDQUFDO0FBQUEsVUFDaEM7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsSUFBSSxNQUFNO0FBQ1QsaUJBQU8sSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ3ZDLDhCQUFrQixZQUFZLEVBQUUsTUFBTTtBQUNyQyxrQkFBSTtBQUNILHdCQUFRLEtBQUssY0FBYyxFQUFFLFNBQVMsSUFBSSxDQUFDO0FBQUEsY0FDNUMsU0FBUyxHQUFHO0FBQ1gsdUJBQU8sQ0FBQztBQUFBLGNBQ1Q7QUFBQSxZQUNELEdBQUcsS0FBSyxjQUFjLEVBQUUsSUFBSTtBQUFBLFVBQzdCLENBQUM7QUFBQSxRQUNGO0FBQUEsTUFDRDtBQXVCQSxNQUFNLGFBQU4sY0FBeUIsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBZ0I3QixlQUFlLE1BQU07QUFDcEIsZ0JBQU07QUFFTixlQUFLLGNBQWMsSUFBSTtBQUFBLFlBQ3RCLE9BQU8sSUFBSSxNQUFNO0FBQUEsVUFDbEI7QUFFQSxjQUFJLE9BQU87QUFFWCxjQUFJLE9BQU8sU0FBUyxZQUFZLEtBQUssQ0FBQyxNQUFNLE1BQU07QUFDakQsa0JBQU0sSUFBSSxVQUFVLG1EQUFtRDtBQUFBLFVBQ3hFO0FBRUEscUJBQVcsQ0FBQyxFQUFFLEdBQUcsS0FBSyxPQUFPLFFBQVEsSUFBSSxHQUFHO0FBQzNDLGdCQUFJLFVBQVUsR0FBRyxLQUFLLE9BQU8sR0FBRztBQUMvQixxQkFBTztBQUFBLFlBQ1IsV0FBVyxXQUFXLEdBQUcsR0FBRztBQUMzQixtQkFBSyxjQUFjLEVBQUUsTUFBTSxJQUFJLElBQUksU0FBUyxLQUFLLElBQUksQ0FBQztBQUFBLFlBQ3ZELE9BQU87QUFDTixvQkFBTSxJQUFJO0FBQUEsZ0JBQ1Q7QUFBQSxjQUNEO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFXQSxJQUFJLFVBQVUsTUFBTTtBQUNuQixlQUFLLGNBQWMsRUFBRSxNQUFNLElBQUksSUFBSSxTQUFTLFVBQVUsSUFBSSxDQUFDO0FBQzNELGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsSUFBSSxNQUFNO0FBQ1QsY0FBSSxLQUFLLGNBQWMsRUFBRSxNQUFNLFFBQVEsR0FBRztBQUN6QyxtQkFBTyxRQUFRLFFBQVEsSUFBSTtBQUFBLFVBQzVCO0FBRUEsZ0JBQU0sV0FBVyxLQUFLLGNBQWMsRUFBRSxNQUFNLEtBQUs7QUFFakQsY0FBSSxhQUFhLFFBQVEsYUFBYSxRQUFXO0FBQ2hELG1CQUFPLFFBQVEsUUFBUSxJQUFJO0FBQUEsVUFDNUI7QUFFQSxpQkFBTyxTQUFTLElBQUksSUFBSSxFQUFFLEtBQUssQ0FBQyxXQUFXO0FBQzFDLG1CQUFPLEtBQUssSUFBSSxNQUFNO0FBQUEsVUFDdkIsQ0FBQztBQUFBLFFBQ0Y7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDdkpBLE1BZ0JNO0FBaEJOO0FBQUE7QUFPQTtBQUNBLE1BQUFHO0FBUUEsTUFBTSxpQkFBaUIsSUFBSSxjQUFjO0FBRXpDLFVBQUk7QUFDSCx1QkFBZTtBQUFBLFVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUlBO0FBQUEsUUFDRDtBQUFBLE1BQ0QsU0FBUyxHQUFHO0FBQ1g7QUFBQSxVQUNDLFNBQVMsWUFBWSxFQUFFLGNBQWMsTUFBTTtBQUFBLFVBQzNDO0FBQUEsVUFDQSxJQUFJO0FBQUEsUUFDTDtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNSQSxXQUFTLDJCQUEyQixNQUFNO0FBQUM7QUFFMUMsVUFBTUMsV0FBVSxPQUFPLENBQUMsR0FBRyxLQUFLLFVBQVUsUUFBUSxDQUFDO0FBQ25ELFVBQU0sWUFBWUEsV0FBVSxXQUFXO0FBRXZDLFFBQUksQ0FBQyxRQUFRLFNBQVMsR0FBRztBQUN4QixNQUFBQSxTQUFRLFdBQVcsSUFBSSxDQUFDO0FBQUEsSUFDekI7QUFFQSxRQUNDQSxTQUFRLFdBQVcsRUFBRSxPQUFPLENBQUMsVUFBVTtBQUN0QyxVQUFJLFFBQVEsTUFBTSxNQUFNLGtCQUFrQjtBQUV6QyxjQUFNLFNBQVMsSUFBSSxnQkFBZ0IsSUFBSTtBQUFBLE1BQ3hDO0FBQUEsSUFDRCxDQUFDLEVBQUUsV0FBVyxHQUNiO0FBQ0QsTUFBQUEsU0FBUSxXQUFXLEVBQUUsS0FBSztBQUFBLFFBQ3pCLE1BQU07QUFBQSxRQUNOLFNBQVMsZ0JBQWdCLElBQUk7QUFBQSxNQUM5QixDQUFDO0FBQUEsSUFDRjtBQUVBLFNBQUssb0JBQW9CLEVBQUUsV0FBV0EsUUFBTztBQUFBLEVBQzlDO0FBaERBLE1BaUJNO0FBakJOLE1BQUFDLGVBQUE7QUFBQTtBQU9BO0FBQ0E7QUFDQTtBQVFBLE1BQU0sdUJBQXVCLE9BQU8sZ0JBQWdCO0FBQUE7QUFBQTs7O0FDakJwRDtBQUFBO0FBQUE7QUFBQTtBQThTQSxXQUFTLG1CQUFtQjtBQUFDO0FBRTVCLFVBQU0sUUFBUSxtQkFBbUIsS0FBSyxNQUFNLElBQUksY0FBYyxZQUFZO0FBQzFFLFFBQUk7QUFDSixRQUFJLE1BQU0sU0FBUyxHQUFHO0FBQ3JCLHFCQUFlLFNBQVMsY0FBYyxRQUFRO0FBQzlDLG1CQUFhLGFBQWEsZ0JBQWdCLFFBQVE7QUFDbEQsbUJBQWEsYUFBYSxRQUFRLFFBQVE7QUFDMUMsbUJBQWEsVUFBVSxJQUFJLFFBQVE7QUFDbkMsbUJBQWEsWUFDWjtBQUNELFdBQUssZ0JBQWdCLEVBQUUsUUFBUSxZQUFZO0FBQUEsSUFDNUMsT0FBTztBQUNOLHFCQUFlLE1BQU0sS0FBSztBQUFBLElBQzNCO0FBS0EsU0FBSyx3QkFBd0IsSUFBSSxDQUFDLFVBQVU7QUFDM0MsWUFBTSxVQUFVLDJCQUEyQixPQUFPLGdCQUFnQixRQUFRO0FBRTFFLFVBQUksbUJBQW1CLG1CQUFtQjtBQUN6QyxxQkFBYSxLQUFLLElBQUk7QUFBQSxNQUN2QjtBQUFBLElBQ0Q7QUFFQSxlQUFXLFFBQVEsQ0FBQyxTQUFTLE9BQU8sR0FBRztBQUN0QyxtQkFBYSxpQkFBaUIsTUFBTSxLQUFLLHdCQUF3QixDQUFDO0FBQUEsSUFDbkU7QUFFQSxTQUFLLG1CQUFtQixJQUFJO0FBQUEsRUFDN0I7QUFLQSxXQUFTLGFBQWE7QUFBQztBQUV0QixRQUFJLENBQUMsS0FBSyxvQkFBb0IsR0FBRztBQUNoQztBQUFBLElBQ0Q7QUFFQSxTQUFLLG1CQUFtQixFQUFFLE1BQU0sVUFBVTtBQUUxQywrQkFBMkIsS0FBSyxNQUFNLEtBQUs7QUFBQSxFQUM1QztBQUtBLFdBQVMsYUFBYTtBQUFDO0FBRXRCLFFBQUksS0FBSyxtQkFBbUIsRUFBRSxNQUFNLFlBQVksMEJBQTBCO0FBQ3pFO0FBQUEsSUFDRDtBQUVBLFNBQUssbUJBQW1CLEVBQUUsTUFBTSxhQUFhO0FBQzdDLFNBQUssbUJBQW1CLEVBQUUsTUFBTSxVQUFVO0FBRTFDLCtCQUEyQixLQUFLLE1BQU0sSUFBSTtBQUUxQyxTQUFLLG9CQUFvQixFQUFFLE9BQU87QUFFbEMsUUFBSSxXQUFXLE1BQU07QUFDcEIsV0FBSyxtQkFBbUIsRUFBRSxNQUFNLGVBQWUsWUFBWTtBQUFBLElBQzVELENBQUMsRUFBRSxJQUFJO0FBQUEsRUFDUjtBQUtBLFdBQVMsZUFBZTtBQUFDO0FBRXhCLFFBQUksS0FBSyxtQkFBbUIsRUFBRSxNQUFNLFlBQVksMEJBQTBCO0FBQ3pFLGlCQUFXLEtBQUssSUFBSTtBQUFBLElBQ3JCLE9BQU87QUFDTixpQkFBVyxLQUFLLElBQUk7QUFBQSxJQUNyQjtBQUFBLEVBQ0Q7QUFLQSxXQUFTLHVCQUF1QjtBQUFDO0FBR2hDLFNBQUssb0JBQW9CLElBQUksSUFBSSxlQUFlLENBQUMsWUFBWTtBQUM1RCxVQUFJLEtBQUssbUJBQW1CLGFBQWEsZ0JBQWdCO0FBQ3hELFlBQUk7QUFDSCxlQUFLLG1CQUFtQixFQUFFLE1BQU07QUFDaEM7QUFBQSxRQUNELFNBQVMsR0FBRztBQUNYLGlCQUFPLEtBQUssbUJBQW1CO0FBQUEsUUFDaEM7QUFBQSxNQUNEO0FBRUEsV0FBSyxtQkFBbUIsSUFBSSxJQUFJLGVBQWUsS0FBSyxNQUFNO0FBQ3pELGFBQUssZ0JBQWdCLEVBQUUsT0FBTyxtQkFBbUIsS0FBSztBQUN0RCxpQ0FBeUIsS0FBSyxJQUFJO0FBQUEsTUFDbkMsQ0FBQztBQUFBLElBQ0YsQ0FBQztBQUVELFNBQUssb0JBQW9CLEVBQUUsUUFBUSxLQUFLLGdCQUFnQixDQUFDO0FBQUEsRUFDMUQ7QUFLQSxXQUFTLDBCQUEwQjtBQUFDO0FBR25DLFFBQUksaUJBQWlCLENBQUMsY0FBYztBQUNuQyxVQUFJLFlBQVk7QUFFaEIsaUJBQVcsWUFBWSxXQUFXO0FBQ2pDLFlBQUksU0FBUyxTQUFTLGFBQWE7QUFDbEMsY0FDQyxTQUFTLFdBQVcsU0FBUyxLQUM3QixTQUFTLGFBQWEsU0FBUyxHQUM5QjtBQUNELHdCQUFZO0FBQ1o7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFFQSxVQUFJLGNBQWMsTUFBTTtBQUN2QixhQUFLLGdCQUFnQixFQUFFLE9BQU8sbUJBQW1CLEtBQUs7QUFDdEQsdUJBQWUsS0FBSyxJQUFJO0FBQUEsTUFDekI7QUFBQSxJQUNELENBQUMsRUFBRSxRQUFRLE1BQU07QUFBQSxNQUNoQixXQUFXO0FBQUEsSUFDWixDQUFDO0FBQUEsRUFDRjtBQVFBLFdBQVMsYUFBYTtBQUNyQixVQUFNQyxRQUFPO0FBRWIsVUFBTUMsV0FBVSxPQUFPLENBQUMsR0FBR0QsTUFBSyxVQUFVLFFBQVEsQ0FBQztBQUVuRCxJQUFBQSxNQUFLLG9CQUFvQixJQUFJO0FBQUEsTUFDNUJBLE1BQUssbUJBQW1CO0FBQUEsTUFDeEJBLE1BQUssbUJBQW1CO0FBQUEsTUFDeEJDO0FBQUEsSUFDRDtBQUVBLFVBQU0sWUFBWSxJQUFJLGlCQUFpQixTQUFVLFdBQVc7QUFDM0QsVUFBSSxZQUFZO0FBRWhCLGlCQUFXLFlBQVksV0FBVztBQUNqQyxZQUFJLFNBQVMsU0FBUyxhQUFhO0FBQ2xDLGNBQ0MsU0FBUyxXQUFXLFNBQVMsS0FDN0IsU0FBUyxhQUFhLFNBQVMsR0FDOUI7QUFDRCx3QkFBWTtBQUNaO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBRUEsVUFBSSxjQUFjLE1BQU07QUFDdkIsUUFBQUQsTUFBSyxvQkFBb0IsRUFBRSxPQUFPO0FBQUEsTUFDbkM7QUFBQSxJQUNELENBQUM7QUFFRCxjQUFVLFFBQVFBLE1BQUssc0JBQXNCLEdBQUc7QUFBQSxNQUMvQyxXQUFXO0FBQUEsTUFDWCxTQUFTO0FBQUEsSUFDVixDQUFDO0FBRUQsV0FBT0E7QUFBQSxFQUNSO0FBTUEsV0FBU0UsTUFBSyxTQUFTO0FBQUM7QUFFdkIsUUFBSSxDQUFDLEtBQUssWUFBWTtBQUNyQixZQUFNLElBQUksTUFBTSwyQkFBMkI7QUFBQSxJQUM1QztBQUVBLFVBQU1DLGFBQVksUUFBUSxhQUFhLEdBQUcsZ0JBQWdCLGVBQWU7QUFFekUsVUFBTSxRQUFRLG1CQUFtQixLQUFLLElBQUk7QUFDMUMsZUFBVyxRQUFRLE9BQU87QUFDekIsWUFBTSxLQUFLLEtBQUssYUFBYSxJQUFJO0FBQ2pDLFVBQUksT0FBT0EsWUFBVztBQUNyQixhQUFLLFVBQVUsSUFBSSxRQUFRO0FBRTNCLFlBQUksS0FBSyxhQUFhLGtCQUFrQixHQUFHO0FBQzFDLGdCQUFNLE1BQU0sS0FBSyxhQUFhLGtCQUFrQjtBQUVoRCxjQUNDLENBQUMsS0FBSyxhQUFhLHFCQUFxQixLQUN4QyxLQUFLLGFBQWEscUJBQXFCLEVBQUUsWUFBWSxNQUFNLFVBQzFEO0FBQ0QsaUJBQUssZ0JBQWdCLGtCQUFrQjtBQUFBLFVBQ3hDO0FBRUEsZ0JBQU1GLFdBQVUsS0FBSyxVQUFVLFNBQVMsQ0FBQyxDQUFDO0FBQzFDLCtCQUFxQixNQUFNLEtBQUtBLFFBQU87QUFBQSxRQUN4QztBQUFBLE1BQ0QsT0FBTztBQUNOLGFBQUssVUFBVSxPQUFPLFFBQVE7QUFBQSxNQUMvQjtBQUFBLElBQ0Q7QUFFQSxVQUFNLGtCQUFrQixLQUFLLFVBQVUsa0JBQWtCO0FBQ3pELGVBQVcsQ0FBQyxLQUFLLEtBQUssaUJBQWlCO0FBQ3RDLFlBQU0sU0FBUyxnQkFBZ0IsS0FBSztBQUNwQyxZQUFNLFFBQVEsT0FBTyxXQUFXLE1BQU1FLGFBQVksV0FBVztBQUM3RCxXQUFLLFVBQVUsb0JBQW9CLEtBQUssVUFBVSxLQUFLO0FBQUEsSUFDeEQ7QUFFQSxVQUFNLGVBQWUsS0FBSyxVQUFVLGdCQUFnQjtBQUNwRCxlQUFXLENBQUMsS0FBSyxLQUFLLGNBQWM7QUFDbkMsWUFBTSxTQUFTLGFBQWEsS0FBSztBQUNqQyxZQUFNLFFBQVEsT0FBTyxXQUFXLE1BQU1BLGFBQVksV0FBVztBQUM3RCxXQUFLLFVBQVUsa0JBQWtCLEtBQUssVUFBVSxLQUFLO0FBQUEsSUFDdEQ7QUFFQSxlQUFXLEtBQUssSUFBSTtBQUFBLEVBQ3JCO0FBS0EsV0FBUyxtQkFBbUI7QUFBQztBQUU1QixRQUFJLENBQUMsS0FBSyxZQUFZO0FBQ3JCLFlBQU0sSUFBSSxNQUFNLDJCQUEyQjtBQUFBLElBQzVDO0FBS0EsU0FBSyxxQkFBcUIsSUFBSSxDQUFDLFVBQVU7QUFDeEMsWUFBTSxVQUFVLDJCQUEyQixPQUFPLGdCQUFnQixRQUFRO0FBRTFFLFVBQUksbUJBQW1CLHFCQUFxQixRQUFRLGFBQWEsTUFBTTtBQUN0RSxRQUFBRCxNQUFLLEtBQUssTUFBTSxPQUFPO0FBQUEsTUFDeEI7QUFBQSxJQUNEO0FBS0EsU0FBSyxxQkFBcUIsSUFBSSxDQUFDLFVBQVU7QUFDeEMsWUFBTSxVQUFVO0FBQUEsUUFDZjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRDtBQUVBLFVBQUksbUJBQW1CLGFBQWE7QUFDbkMsY0FBTSxTQUFTO0FBQUEsVUFDZDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUVBLFlBQUksa0JBQWtCLHFCQUFxQixPQUFPLGFBQWEsTUFBTTtBQUNwRSxnQkFBTUMsYUFBWSxPQUFPO0FBQUEsWUFDeEIsR0FBRyxnQkFBZ0I7QUFBQSxVQUNwQjtBQUNBLGNBQUlBLFlBQVc7QUFDZCxrQkFBTSxZQUFZLEtBQUssY0FBYyxPQUFPQSxVQUFTLEdBQUc7QUFDeEQsZ0JBQUkscUJBQXFCLGFBQWE7QUFDckMsd0JBQVUsT0FBTztBQUNqQiw2QkFBZSxLQUFLLElBQUk7QUFBQSxZQUN6QjtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxTQUFLLGdCQUFnQixFQUFFLGlCQUFpQixTQUFTLEtBQUsscUJBQXFCLENBQUM7QUFDNUUsU0FBSyxnQkFBZ0IsRUFBRSxpQkFBaUIsU0FBUyxLQUFLLHFCQUFxQixDQUFDO0FBRTVFLFNBQUssZ0JBQWdCLEVBQUUsaUJBQWlCLFNBQVMsS0FBSyxxQkFBcUIsQ0FBQztBQUM1RSxTQUFLLGdCQUFnQixFQUFFLGlCQUFpQixTQUFTLEtBQUsscUJBQXFCLENBQUM7QUFLNUUsU0FBSyxpQkFBaUIsSUFBSSxDQUFDLFVBQVU7QUFDcEMsWUFBTSxPQUFPLE1BQU0sYUFBYTtBQUVoQyxpQkFBVyxDQUFDLEVBQUUsT0FBTyxLQUFLLE9BQU8sUUFBUSxJQUFJLEdBQUc7QUFDL0MsWUFBSSxZQUFZLE1BQU07QUFDckI7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUVBLGlCQUFXLEtBQUssSUFBSTtBQUFBLElBQ3JCO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFNQSxXQUFTLDBCQUEwQixjQUFjO0FBQ2hELFVBQU1ILFFBQU87QUFFYixRQUFJLGNBQWMsY0FBYyxzQkFBc0IsR0FBRztBQUN4RDtBQUFBLElBQ0Q7QUFNQSxVQUFNLFdBQVcsSUFBSSxpQkFBaUIsU0FBVSxXQUFXO0FBQzFELFVBQUksUUFBUSxTQUFTLEdBQUc7QUFDdkIsY0FBTSxXQUFXLFVBQVUsSUFBSTtBQUMvQixZQUFJLG9CQUFvQixnQkFBZ0I7QUFDdkMseUJBQWUsS0FBS0EsS0FBSTtBQUFBLFFBQ3pCO0FBQUEsTUFDRDtBQUFBLElBQ0QsQ0FBQztBQUVELGFBQVMsUUFBUSxjQUFjO0FBQUEsTUFDOUIsV0FBVztBQUFBLE1BQ1gsWUFBWTtBQUFBLE1BQ1osU0FBUztBQUFBLE1BQ1QsaUJBQWlCO0FBQUEsUUFDaEI7QUFBQSxRQUNBO0FBQUEsUUFDQSxHQUFHLGdCQUFnQjtBQUFBLE1BQ3BCO0FBQUEsSUFDRCxDQUFDO0FBRUQsb0JBQWdCLGNBQWMsd0JBQXdCLFFBQVE7QUFBQSxFQUMvRDtBQU9BLFdBQVMsd0JBQXdCO0FBQUM7QUFFakMsUUFBSSxDQUFDLEtBQUssWUFBWTtBQUNyQixZQUFNLElBQUksTUFBTSwyQkFBMkI7QUFBQSxJQUM1QztBQUVBLFNBQUssb0JBQW9CLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDNUMsSUFBSSxjQUFjO0FBQUEsSUFDbkI7QUFDQSxTQUFLLGdCQUFnQixJQUFJLEtBQUssV0FBVztBQUFBLE1BQ3hDLE9BQU8sY0FBYztBQUFBLElBQ3RCO0FBQ0EsU0FBSyxtQkFBbUIsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUMzQyxJQUFJLGNBQWM7QUFBQSxJQUNuQjtBQUNBLFNBQUssc0JBQXNCLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDOUMsSUFBSSxjQUFjO0FBQUEsSUFDbkI7QUFBQSxFQUNEO0FBUUEsV0FBUyxpQkFBaUI7QUFBQztBQUUxQixRQUFJLENBQUMsS0FBSyxZQUFZO0FBQ3JCLFlBQU0sSUFBSSxNQUFNLDJCQUEyQjtBQUFBLElBQzVDO0FBRUEsUUFBSTtBQUVKLFVBQU0sdUJBQXVCLEtBQUssZ0JBQWdCLEVBQUU7QUFBQSxNQUNuRDtBQUFBLE1BQ0E7QUFBQSxJQUNEO0FBRUEsVUFBTSxVQUFVLENBQUM7QUFDakIsVUFBTSxRQUFRLG1CQUFtQixLQUFLLE1BQU0sUUFBVyxJQUFJO0FBRTNELGVBQVcsUUFBUSxPQUFPO0FBQ3pCLFVBQUksRUFBRSxnQkFBZ0I7QUFBYztBQUNwQyxVQUFJLFFBQVEsZUFBZSxLQUFLLE1BQU0sSUFBSTtBQUUxQyxVQUFJRztBQUNKLFVBQUksS0FBSyxhQUFhLElBQUksR0FBRztBQUM1QixRQUFBQSxhQUFZLEtBQUssYUFBYSxJQUFJO0FBQUEsTUFDbkM7QUFFQSxVQUFJO0FBQ0osVUFBSSxLQUFLLGFBQWEsVUFBVSxLQUFLLEtBQUssYUFBYSxNQUFNO0FBQzVELG1CQUFXO0FBQUEsTUFDWjtBQUVBLFVBQUksQ0FBQ0EsWUFBVztBQUNmLFFBQUFBLGFBQVksSUFBSSxHQUFHLEtBQUssRUFBRSxTQUFTO0FBQ25DLGFBQUssYUFBYSxNQUFNQSxVQUFTO0FBQUEsTUFDbEM7QUFFQSxVQUFJLEtBQUssYUFBYSxHQUFHLGdCQUFnQixhQUFhLEdBQUc7QUFDeEQsZ0JBQVEsc0JBQXNCLEtBQUssZ0NBQWdDLEtBQUs7QUFBQSxVQUN2RSxHQUFHLGdCQUFnQjtBQUFBLFFBQ3BCLENBQUM7QUFBQSxNQUNGO0FBRUEsVUFBSSxTQUFTO0FBQ2IsVUFBSSxLQUFLLGFBQWEsR0FBRyxnQkFBZ0IsV0FBVyxHQUFHO0FBQ3RELGlCQUFTO0FBQUEsTUFDVjtBQUVBLFVBQUksS0FBSyxRQUFRLFNBQVMsTUFBTSxRQUFRLGFBQWEsTUFBTTtBQUMxRCxhQUFLLFVBQVUsT0FBTyxRQUFRO0FBQzlCLDBCQUFrQkE7QUFBQSxNQUNuQjtBQUVBLFlBQU0sUUFBUTtBQUNkLFlBQU0sVUFBVSx1QkFBdUIsS0FBSztBQUU1QyxjQUFRLEtBQUs7QUFBQSxRQUNaLFdBQUFBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLE9BQU87QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLE1BQ0QsQ0FBQztBQUVELGdDQUEwQixLQUFLLE1BQU0sSUFBSTtBQUFBLElBQzFDO0FBRUEsU0FBSyxVQUFVLG9CQUFvQixNQUFNLE9BQU8sQ0FBQztBQUNqRCxTQUFLLFVBQVUsa0JBQWtCLENBQUMsQ0FBQztBQUNuQyxTQUFLLFVBQVUsVUFBVSxPQUFPLENBQUM7QUFFakMsV0FBTyx1QkFBdUIsS0FBSyxJQUFJLEVBQUUsS0FBSyxNQUFNO0FBQ25ELFVBQUksaUJBQWlCO0FBQ3BCLGVBQU8sSUFBSSxXQUFXLE1BQU07QUFDM0IsZ0JBQU0sU0FBUyxLQUFLLFdBQVc7QUFBQSxZQUM5QixJQUFJLGdCQUFnQixrQkFBa0IsZUFBZTtBQUFBLFVBQ3REO0FBQ0EsY0FBSSxrQkFBa0IscUJBQXFCLE9BQU8sYUFBYSxNQUFNO0FBQ3BFLFlBQUFELE1BQUssS0FBSyxNQUFNLE1BQU07QUFBQSxVQUN2QjtBQUFBLFFBQ0QsQ0FBQyxFQUFFLElBQUk7QUFBQSxNQUNSO0FBRUE7QUFBQSxJQUNELENBQUM7QUFBQSxFQUNGO0FBRUEsV0FBUywyQkFBMkI7QUFBQztBQUVwQyxRQUFJLEtBQUssZ0JBQWdCLEVBQUUsT0FBTyxtQkFBbUIsS0FBSyxNQUFNLE1BQU07QUFDckUsMkNBQXFDLEtBQUssSUFBSTtBQUFBLElBQy9DO0FBRUEscUJBQWlCLEtBQUssSUFBSTtBQUFBLEVBQzNCO0FBTUEsV0FBUyx5QkFBeUI7QUFDakMsVUFBTUYsUUFBTztBQUViLFdBQU8sSUFBSSxRQUFRLENBQUMsWUFBWTtBQUMvQixZQUFNLFdBQVcsSUFBSSxpQkFBaUIsU0FBVSxXQUFXO0FBQzFELGNBQU0sV0FBV0EsTUFBSyxVQUFVLGtCQUFrQixFQUFFO0FBQ3BELGNBQU0sV0FBV0EsTUFBSyxnQkFBZ0IsRUFBRTtBQUFBLFVBQ3ZDO0FBQUEsUUFDRCxFQUFFO0FBR0YsWUFBSSxhQUFhO0FBQVU7QUFFM0IsaUJBQVMsV0FBVztBQUVwQixpQ0FBeUIsS0FBS0EsS0FBSTtBQUVsQyxnQkFBUTtBQUFBLE1BQ1QsQ0FBQztBQUVELGVBQVMsUUFBUUEsTUFBSyxnQkFBZ0IsR0FBRztBQUFBLFFBQ3hDLFlBQVk7QUFBQSxNQUNiLENBQUM7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNGO0FBT0EsV0FBUyxZQUFZLE9BQU87QUFDM0IsUUFBSSxDQUFDLFFBQVcsSUFBSSxFQUFFLFFBQVEsS0FBSyxNQUFNLElBQUk7QUFDNUMsYUFBTztBQUFBLElBQ1I7QUFFQSxVQUFNLGFBQWEsU0FBUyxPQUFPLEVBQUU7QUFFckMsUUFBSSxNQUFNLFVBQVUsR0FBRztBQUN0QixhQUFPO0FBQUEsSUFDUjtBQUVBLFdBQU87QUFBQSxFQUNSO0FBT0EsV0FBUyxhQUFhLE1BQU07QUFDM0IsVUFBTSxNQUFNLFVBQVUsUUFBUSxFQUFFLGlCQUFpQixJQUFJO0FBQ3JELFVBQU0sV0FBVyxLQUFLLHNCQUFzQjtBQUU1QyxXQUNDLFlBQVksSUFBSSxtQkFBbUIsQ0FBQyxJQUNwQyxZQUFZLElBQUksY0FBYyxDQUFDLElBQy9CLFlBQVksSUFBSSxhQUFhLENBQUMsSUFDOUIsWUFBWSxTQUFTLE9BQU8sQ0FBQyxJQUM3QixZQUFZLElBQUksb0JBQW9CLENBQUMsSUFDckMsWUFBWSxJQUFJLGNBQWMsQ0FBQyxJQUMvQixZQUFZLElBQUksY0FBYyxDQUFDO0FBQUEsRUFFakM7QUFNQSxXQUFTLG1CQUFtQjtBQUFDO0FBRTVCLFVBQU0sa0JBQWtCLENBQUM7QUFDekIsVUFBTSxnQkFBZ0IsQ0FBQztBQUV2QixRQUFJLE1BQU07QUFDVixVQUFNLFFBQVEsS0FBSyxnQkFBZ0IsRUFBRSxPQUFPLFlBQVk7QUFFeEQsVUFBTSxVQUFVLEtBQUssVUFBVSxrQkFBa0I7QUFDakQsZUFBVyxDQUFDLEVBQUUsTUFBTSxLQUFLLFFBQVEsUUFBUSxHQUFHO0FBQzNDLFlBQU0sTUFBTSxRQUFRO0FBRXBCLGFBQU8sS0FBSyxnQkFBZ0IsRUFBRSxPQUFPLGVBQWUsR0FBRyxFQUFFO0FBRXpELFVBQUksTUFBTSxPQUFPO0FBQ2hCLHNCQUFjLEtBQUssTUFBTSxNQUFNLENBQUM7QUFBQSxNQUNqQyxPQUFPO0FBQ04sd0JBQWdCLEtBQUssTUFBTSxNQUFNLENBQUM7QUFBQSxNQUNuQztBQUFBLElBQ0Q7QUFFQSxTQUFLLFVBQVUsb0JBQW9CLGVBQWU7QUFDbEQsU0FBSyxVQUFVLGtCQUFrQixhQUFhO0FBRTlDLFFBQUksS0FBSyxtQkFBbUIsR0FBRztBQUM5QixVQUFJLGNBQWMsU0FBUyxHQUFHO0FBQzdCLGFBQUssbUJBQW1CLEVBQUUsVUFBVSxPQUFPLFFBQVE7QUFBQSxNQUNwRCxPQUFPO0FBQ04sYUFBSyxtQkFBbUIsRUFBRSxVQUFVLElBQUksUUFBUTtBQUFBLE1BQ2pEO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFNQSxXQUFTLHVDQUF1QztBQUFDO0FBRWhELFVBQU0sUUFBUSxLQUFLLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFO0FBRTdELFFBQUksZ0JBQWdCO0FBRXBCLHVCQUFtQixLQUFLLE1BQU0sUUFBVyxPQUFPLEVBQUUsUUFBUSxDQUFDLFNBQVM7QUFDbkUsdUJBQWlCLGFBQWEsS0FBSyxNQUFNLElBQUk7QUFBQSxJQUM5QyxDQUFDO0FBRUQsdUJBQW1CLEtBQUssTUFBTSxRQUFXLEtBQUssRUFBRSxRQUFRLENBQUMsU0FBUztBQUNqRSx1QkFBaUIsYUFBYSxLQUFLLE1BQU0sSUFBSTtBQUFBLElBQzlDLENBQUM7QUFFRCxTQUFLLGdCQUFnQixFQUFFLE9BQU8sY0FBYyxRQUFRLGdCQUFnQixDQUFDO0FBQ3JFLFNBQUssZ0JBQWdCLEVBQUUsT0FBTyxnQkFBZ0IsRUFBRSxVQUFVLEVBQUU7QUFFNUQsVUFBTSxVQUFVLEtBQ2QsVUFBVSxrQkFBa0IsRUFDNUIsT0FBTyxLQUFLLFVBQVUsZ0JBQWdCLENBQUM7QUFFekMsZUFBVyxDQUFDLEdBQUcsTUFBTSxLQUFLLFFBQVEsUUFBUSxHQUFHO0FBQzVDLFlBQU0sTUFBTSxRQUFRO0FBQ3BCLFlBQU0sVUFBVSxLQUFLLGdCQUFnQixFQUFFO0FBQUEsUUFDdEMsYUFBYSxnQkFBZ0Isa0JBQWtCLEdBQUc7QUFBQSxNQUNuRDtBQUNBLFVBQUksRUFBRSxtQkFBbUI7QUFBb0I7QUFFN0MsV0FBSyxnQkFBZ0IsRUFBRTtBQUFBLFFBQ3RCLGVBQWUsR0FBRztBQUFBLFFBQ2xCLGFBQWEsS0FBSyxNQUFNLE9BQU87QUFBQSxNQUNoQztBQUNBLGFBQU8sT0FBTyxJQUFJLElBQUksVUFBVSxPQUFPLE9BQU8sQ0FBQyxFQUM3QyxPQUFPLFdBQVcsRUFDbEIsU0FBUztBQUFBLElBQ1o7QUFFQSxVQUFNLFFBQVEsS0FBSyxvQkFBb0IsRUFBRTtBQUFBLE1BQ3hDLE9BQU8sZ0JBQWdCLG9DQUFvQyxnQkFBZ0I7QUFBQSxJQUM1RTtBQUNBLGVBQVcsQ0FBQyxFQUFFLElBQUksS0FBSyxNQUFNLFFBQVEsR0FBRztBQUN2QyxXQUFLLFVBQVUsT0FBTyxXQUFXO0FBQUEsSUFDbEM7QUFFQSxTQUFLLGdCQUFnQixFQUFFLE9BQU8sbUJBQW1CLElBQUk7QUFDckQsU0FBSyxVQUFVLG9CQUFvQixNQUFNLE9BQU8sQ0FBQztBQUFBLEVBQ2xEO0FBT0EsV0FBUyxlQUFlLE1BQU07QUFBQztBQUU5QixRQUFJO0FBQ0osUUFBSSxXQUFXO0FBQ2YsUUFBSSxLQUFLLGFBQWEsc0JBQXNCLEdBQUc7QUFDOUMsY0FBUSxLQUFLLGFBQWEsc0JBQXNCO0FBQUEsSUFDakQsT0FBTztBQUNOLGNBQVEsS0FBSztBQUNiLGlCQUFXO0FBQUEsSUFDWjtBQUVBLFFBQUksQ0FBQyxTQUFTLEtBQUssR0FBRztBQUNyQixjQUFRO0FBQUEsSUFDVDtBQUVBLFlBQVEsTUFBTSxLQUFLO0FBRW5CLFFBQUksVUFBVSxJQUFJO0FBQ2pCLGNBQVEsS0FBSyxVQUFVLHdCQUF3QixTQUFTO0FBQUEsSUFDekQ7QUFFQSxRQUFJLE1BQU0sU0FBUyxLQUFLO0FBQ3ZCLGNBQVEsR0FBRyxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFBQSxJQUNsQztBQUVBLFFBQUksYUFBYSxNQUFNO0FBQ3RCLFdBQUssYUFBYSx3QkFBd0IsS0FBSztBQUFBLElBQ2hEO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFNQSxXQUFTSSxlQUFjO0FBRXRCLFdBQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQStCUjtBQWgvQkEsTUFnRE0scUJBTUEsd0JBTUEsc0JBTUEsa0JBS0EscUJBTUEsdUJBS0EsdUJBTUEsMEJBT0EsbUJBTUEsd0JBTUEsa0JBTUEscUJBT0Esc0JBcUNBO0FBN0pOLE1BQUFDLGFBQUE7QUFBQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFBQztBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFBQTtBQU9BO0FBQ0E7QUFDQSxNQUFBQztBQVdBLE1BQU0sc0JBQXNCLE9BQU8sZUFBZTtBQU1sRCxNQUFNLHlCQUF5QixPQUFPLGtCQUFrQjtBQU14RCxNQUFNLHVCQUF1QixPQUFPLGdCQUFnQjtBQU1wRCxNQUFNLG1CQUFtQixPQUFPLFlBQVk7QUFLNUMsTUFBTSxzQkFBc0IsT0FBTyxlQUFlO0FBTWxELE1BQU0sd0JBQXdCLE9BQU8sdUJBQXVCO0FBSzVELE1BQU0sd0JBQXdCLE9BQU8sdUJBQXVCO0FBTTVELE1BQU0sMkJBQTJCLE9BQU8sMEJBQTBCO0FBT2xFLE1BQU0sb0JBQW9CLE9BQU8sbUJBQW1CO0FBTXBELE1BQU0seUJBQXlCLE9BQU8sa0JBQWtCO0FBTXhELE1BQU0sbUJBQW1CLE9BQU8sWUFBWTtBQU01QyxNQUFNLHNCQUFzQixPQUFPLGVBQWU7QUFPbEQsTUFBTSx1QkFBdUIsT0FBTyxnQkFBZ0I7QUFxQ3BELE1BQU0sT0FBTixjQUFtQixjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTWhDLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSw4QkFBOEI7QUFBQSxRQUNqRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQXNCQSxJQUFJLFdBQVc7QUFDZCxpQkFBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sVUFBVTtBQUFBLFlBQ3hDLFdBQVc7QUFBQSxjQUNWLE1BQU1ILGFBQVk7QUFBQSxZQUNuQjtBQUFBLFlBQ0EsUUFBUTtBQUFBLGNBQ1AsaUJBQWlCO0FBQUEsWUFDbEI7QUFBQSxZQUNBLFNBQVM7QUFBQSxjQUNSLFVBQVUsQ0FBQztBQUFBLGNBQ1gsUUFBUSxDQUFDO0FBQUEsWUFDVjtBQUFBLFlBQ0EsT0FBTztBQUFBLGNBQ04sVUFBVTtBQUFBLGNBQ1YsUUFBUTtBQUFBLGNBQ1IsTUFBTTtBQUFBLGNBQ04sYUFBYTtBQUFBLGNBQ2IsU0FBUztBQUFBLGdCQUNSLFFBQVE7QUFBQSxjQUNUO0FBQUEsWUFDRDtBQUFBLFlBQ0EsUUFBUTtBQUFBLGNBQ1AsV0FBVztBQUFBLGNBQ1gsV0FBVztBQUFBLGdCQUNWO0FBQUEsa0JBQ0MsTUFBTTtBQUFBLGtCQUNOLFNBQVM7QUFBQSxvQkFDUixRQUFRLENBQUMsR0FBRyxDQUFDO0FBQUEsa0JBQ2Q7QUFBQSxnQkFDRDtBQUFBLGdCQUVBO0FBQUEsa0JBQ0MsTUFBTTtBQUFBLGtCQUNOLFNBQVM7QUFBQSxnQkFDVjtBQUFBLGNBQ0Q7QUFBQSxZQUNEO0FBQUEsVUFDRCxDQUFDO0FBQUEsUUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsQ0FBQyxvQkFBb0IsSUFBSTtBQUFDO0FBQ3pCLGdCQUFNLG9CQUFvQixFQUFFO0FBRTVCLGdDQUFzQixLQUFLLElBQUk7QUFFL0IsZUFBSyxnQkFBZ0IsSUFBSSxJQUFJLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO0FBRXBELDJCQUFpQixLQUFLLElBQUk7QUFHMUIseUJBQWUsS0FBSyxJQUFJLEVBQUUsS0FBSyxNQUFNO0FBQ3BDLDZCQUFpQixLQUFLLElBQUk7QUFDMUIsdUJBQVcsS0FBSyxJQUFJO0FBQ3BCLGlDQUFxQixLQUFLLElBQUk7QUFDOUIsb0NBQXdCLEtBQUssSUFBSTtBQUFBLFVBQ2xDLENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsT0FBTyxtQkFBbUI7QUFDekIsaUJBQU8sQ0FBQyxjQUFjO0FBQUEsUUFDdkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxPQUFPLFNBQVM7QUFDZixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxvQkFBb0I7QUFDbkIsZ0JBQU0sa0JBQWtCO0FBRXhCLGdCQUFNSSxZQUFXLFlBQVk7QUFBRTtBQUUvQixxQkFBVyxDQUFDLEVBQUUsSUFBSSxLQUFLLE9BQU8sUUFBUSxDQUFDLFNBQVMsT0FBTyxDQUFDLEdBQUc7QUFFMUQsWUFBQUEsVUFBUyxpQkFBaUIsTUFBTSxLQUFLLGlCQUFpQixDQUFDO0FBQUEsVUFDeEQ7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsdUJBQXVCO0FBQ3RCLGdCQUFNLHFCQUFxQjtBQUUzQixnQkFBTUEsWUFBVyxZQUFZO0FBRzdCLHFCQUFXLENBQUMsRUFBRSxJQUFJLEtBQUssT0FBTyxRQUFRLENBQUMsU0FBUyxPQUFPLENBQUMsR0FBRztBQUMxRCxZQUFBQSxVQUFTLG9CQUFvQixNQUFNLEtBQUssaUJBQWlCLENBQUM7QUFBQSxVQUMzRDtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBeXNCQSw0QkFBc0IsSUFBSTtBQUFBO0FBQUE7OztBQ2wvQjFCO0FBQUE7QUFBQTtBQUFBO0FBNFZBLFdBQVMsY0FBYztBQUN0QixRQUFJLEVBQUUsMEJBQTBCLE9BQU87QUFDdEMsWUFBTSxJQUFJO0FBQUEsUUFDVDtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBRUEsV0FBTyxLQUFLLHNCQUFzQjtBQUFBLEVBQ25DO0FBT0EsV0FBUyxlQUFlO0FBRXZCLFNBQUssdUJBQXVCLEVBQUUsT0FBTyxJQUFJLE1BQU07QUFDOUMsV0FBSyxVQUFVLFNBQVMsS0FBSyxhQUFhLE9BQU8sQ0FBQztBQUFBLElBQ25EO0FBQUEsRUFDRDtBQWhYQSxNQW1CTSx3QkErQkE7QUFsRE47QUFBQTtBQU9BO0FBQ0E7QUFDQSxNQUFBQztBQUNBO0FBQ0E7QUFRQSxNQUFNLHlCQUF5QixPQUFPLGtCQUFrQjtBQStCeEQsTUFBTSxnQkFBTixjQUE0QixjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBZXpDLGNBQWM7QUFDYixnQkFBTTtBQUdOLGNBQUksT0FBTyxLQUFLLGlCQUFpQixNQUFNLFlBQVk7QUFDbEQsaUJBQUssc0JBQXNCLElBQUksS0FBSyxnQkFBZ0I7QUFBQSxVQUNyRCxPQUFPO0FBRU4sa0JBQU07QUFBQSxjQUNMO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFHQSx1QkFBYSxLQUFLLElBQUk7QUFBQSxRQUN2QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSwrQ0FBK0M7QUFBQSxRQUNsRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsV0FBVyxxQkFBcUI7QUFDL0IsaUJBQU8sTUFBTTtBQUFBLFFBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQSxPQUFPLGlCQUFpQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNeEIsSUFBSSxXQUFXO0FBQ2QsaUJBQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxRQUFRO0FBQUEsUUFDakM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQSxJQUFJLFFBQVE7QUFDWCxnQkFBTSxNQUFNLDJEQUEyRDtBQUFBLFFBQ3hFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFXQSxJQUFJLE1BQU0sT0FBTztBQUNoQixnQkFBTSxNQUFNLDJEQUEyRDtBQUFBLFFBQ3hFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBVUEsSUFBSSxTQUFTO0FBQ1osaUJBQU8sWUFBWSxLQUFLLElBQUksR0FBRztBQUFBLFFBQ2hDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsSUFBSSxPQUFPO0FBQ1YsaUJBQU8sS0FBSyxhQUFhLE1BQU07QUFBQSxRQUNoQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLElBQUksT0FBTztBQUNWLGlCQUFPLEtBQUssWUFBWSxPQUFPO0FBQUEsUUFDaEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQSxJQUFJLFdBQVc7QUFDZCxpQkFBTyxZQUFZLEtBQUssSUFBSSxHQUFHO0FBQUEsUUFDaEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQSxJQUFJLG9CQUFvQjtBQUN2QixpQkFBTyxZQUFZLEtBQUssSUFBSSxHQUFHO0FBQUEsUUFDaEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQSxJQUFJLGVBQWU7QUFDbEIsaUJBQU8sWUFBWSxLQUFLLElBQUksR0FBRztBQUFBLFFBQ2hDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBVUEsSUFBSSxTQUFTO0FBQ1osaUJBQU8sWUFBWSxLQUFLLElBQUksR0FBRztBQUFBLFFBQ2hDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBVUEsSUFBSSxPQUFPO0FBQ1YsaUJBQU8sWUFBWSxLQUFLLElBQUksR0FBRztBQUFBLFFBQ2hDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBc0JBLGFBQWEsT0FBTyxPQUFPO0FBQzFCLHNCQUFZLEtBQUssSUFBSSxFQUFFLGFBQWEsT0FBTyxLQUFLO0FBQUEsUUFDakQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFhQSxZQUFZLE9BQU8sU0FBUyxRQUFRO0FBQ25DLHNCQUFZLEtBQUssSUFBSSxFQUFFLFlBQVksT0FBTyxTQUFTLE1BQU07QUFBQSxRQUMxRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBV0EsZ0JBQWdCO0FBQ2YsaUJBQU8sWUFBWSxLQUFLLElBQUksR0FBRyxjQUFjO0FBQUEsUUFDOUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVdBLGlCQUFpQjtBQUNoQixpQkFBTyxZQUFZLEtBQUssSUFBSSxHQUFHLGVBQWU7QUFBQSxRQUMvQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsdUJBQXVCLE1BQU07QUFDNUIsY0FBSSxNQUFNO0FBQ1QsZ0JBQUksS0FBSyxJQUFJO0FBQ1osbUJBQUssYUFBYSxRQUFRLEtBQUssRUFBRTtBQUFBLFlBQ2xDO0FBQUEsVUFDRCxPQUFPO0FBQ04saUJBQUssZ0JBQWdCLE1BQU07QUFBQSxVQUM1QjtBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxxQkFBcUIsVUFBVTtBQUM5QixjQUFJLFVBQVU7QUFDYixpQkFBSyxhQUFhLFlBQVksRUFBRTtBQUFBLFVBQ2pDLE9BQU87QUFDTixpQkFBSyxnQkFBZ0IsVUFBVTtBQUFBLFVBQ2hDO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSx5QkFBeUIsT0FBTyxNQUFNO0FBQUEsUUFBQztBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS3ZDLG9CQUFvQjtBQUNuQixlQUFLLFFBQVE7QUFBQSxRQUNkO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQ3BWQSxNQWdCTTtBQWhCTjtBQUFBO0FBT0E7QUFDQSxNQUFBQztBQVFBLE1BQU0sbUJBQW1CLElBQUksY0FBYztBQUUzQyxVQUFJO0FBQ0gseUJBQWlCO0FBQUEsVUFDaEI7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUlBO0FBQUEsUUFDRDtBQUFBLE1BQ0QsU0FBUyxHQUFHO0FBQ1g7QUFBQSxVQUNDLFNBQVMsWUFBWSxFQUFFLGNBQWMsTUFBTTtBQUFBLFVBQzNDO0FBQUEsVUFDQSxJQUFJO0FBQUEsUUFDTDtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNoQ0EsTUFnQk07QUFoQk47QUFBQTtBQU9BO0FBQ0EsTUFBQUM7QUFRQSxNQUFNLG1CQUFtQixJQUFJLGNBQWM7QUFFM0MsVUFBSTtBQUNILHlCQUFpQjtBQUFBLFVBQ2hCO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFJQTtBQUFBLFFBQ0Q7QUFBQSxNQUNELFNBQVMsR0FBRztBQUNYO0FBQUEsVUFDQyxTQUFTLFlBQVksRUFBRSxjQUFjLE1BQU07QUFBQSxVQUMzQztBQUFBLFVBQ0EsSUFBSTtBQUFBLFFBQ0w7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDaENBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF1UUEsV0FBU0Msb0JBQW1CO0FBQzNCLFVBQU1DLFFBQU87QUFDYixVQUFNLFNBQVMsS0FBSyxtQkFBbUI7QUFFdkMsVUFBTSxPQUFPO0FBRWIsV0FBTyxpQkFBaUIsTUFBTSxTQUFVLE9BQU87QUFDOUMsWUFBTSxXQUFXQSxNQUFLLFVBQVUsZUFBZTtBQUUvQyxzQkFBZ0JBLE9BQU0sMEJBQTBCO0FBQUEsUUFDL0MsUUFBUUE7QUFBQSxNQUNULENBQUM7QUFFRCxVQUFJLENBQUMsV0FBVyxRQUFRLEdBQUc7QUFDMUI7QUFBQSxNQUNEO0FBRUEsWUFBTSxVQUFVO0FBQUEsUUFDZjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRDtBQUVBLFVBQUksRUFBRSxtQkFBbUIsUUFBUUEsTUFBSyxRQUFRLE9BQU8sSUFBSTtBQUN4RDtBQUFBLE1BQ0Q7QUFFQSxlQUFTLEtBQUtBLE9BQU0sS0FBSztBQUFBLElBQzFCLENBQUM7QUFFRCxRQUFJQSxNQUFLLFVBQVUsZ0JBQWdCLEdBQUc7QUFDckMsYUFBTyxpQkFBaUIsU0FBUyxhQUFhLEtBQUtBLEtBQUksQ0FBQztBQUFBLElBQ3pEO0FBR0EsSUFBQUEsTUFBSyx1QkFBdUIsRUFBRSxzQkFBc0IsSUFBSSxTQUFVLE9BQU87QUFDeEUsTUFBQUEsTUFBSyxVQUFVLGtCQUFrQixLQUFLO0FBQUEsSUFDdkM7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQUtBLFdBQVNDLHlCQUF3QjtBQUNoQyxTQUFLLG1CQUFtQixJQUFJLEtBQUssV0FBVztBQUFBLE1BQzNDLElBQUksY0FBYztBQUFBLElBQ25CO0FBQUEsRUFDRDtBQU1BLFdBQVNDLGVBQWM7QUFFdEIsV0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1I7QUFFQSxXQUFTLGFBQWEsT0FBTztBQUFDO0FBQzdCLFVBQU0sU0FBUyxLQUFLLG1CQUFtQjtBQUV2QyxVQUFNLFNBQVMsU0FBUyxjQUFjLE1BQU07QUFDNUMsVUFBTSxXQUFXLEtBQUssSUFBSSxPQUFPLGFBQWEsT0FBTyxZQUFZO0FBQ2pFLFVBQU0sU0FBUyxXQUFXO0FBRTFCLFdBQU8sTUFBTSxRQUFRLE9BQU8sTUFBTSxTQUFTLEdBQUcsUUFBUTtBQUN0RCxXQUFPLE1BQU0sT0FBTyxHQUFHLE1BQU0sVUFBVSxPQUFPLGFBQWEsTUFBTTtBQUNqRSxXQUFPLE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxPQUFPLFlBQVksTUFBTTtBQUMvRCxXQUFPLFVBQVUsSUFBSSxtQkFBbUI7QUFFeEMsVUFBTSxVQUFVLE9BQU8sdUJBQXVCLG1CQUFtQjtBQUNqRSxlQUFXLFVBQVUsU0FBUztBQUM3QixhQUFPLE9BQU87QUFBQSxJQUNmO0FBRUEsV0FBTyxZQUFZLE1BQU07QUFBQSxFQUMxQjtBQTNWQSxNQWdDYSxxQkF1Q1A7QUF2RU4sTUFBQUMsZUFBQTtBQUFBO0FBTUE7QUFDQTtBQUNBLE1BQUFDO0FBSUE7QUFDQTtBQUtBO0FBQ0E7QUFDQSxNQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUU8sTUFBTSxzQkFBc0IsT0FBTyxlQUFlO0FBdUN6RCxNQUFNLFNBQU4sY0FBcUIsY0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1sQyxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksMENBQTBDO0FBQUEsUUFDN0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsQ0FBQyxvQkFBb0IsSUFBSTtBQUN4QixnQkFBTSxvQkFBb0IsRUFBRTtBQUFFO0FBQzlCLFVBQUFILHVCQUFzQixLQUFLLElBQUk7QUFDL0IsVUFBQUYsa0JBQWlCLEtBQUssSUFBSTtBQUMxQixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLFFBQVE7QUFDUCxjQUFJLEtBQUssVUFBVSxVQUFVLE1BQU0sTUFBTTtBQUN4QztBQUFBLFVBQ0Q7QUFFQSxjQUNDLEtBQUssbUJBQW1CLEtBQ3hCLFdBQVcsS0FBSyxtQkFBbUIsRUFBRSxLQUFLLEdBQ3pDO0FBQ0QsaUJBQUssbUJBQW1CLEVBQUUsTUFBTTtBQUFBLFVBQ2pDO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFTQSxNQUFNTSxVQUFTO0FBQ2QsY0FBSSxLQUFLLFVBQVUsVUFBVSxNQUFNLE1BQU07QUFDeEM7QUFBQSxVQUNEO0FBRUEsY0FDQyxLQUFLLG1CQUFtQixLQUN4QixXQUFXLEtBQUssbUJBQW1CLEVBQUUsS0FBSyxHQUN6QztBQUNELGlCQUFLLG1CQUFtQixFQUFFLE1BQU1BLFFBQU87QUFBQSxVQUN4QztBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLE9BQU87QUFDTixjQUNDLEtBQUssbUJBQW1CLEtBQ3hCLFdBQVcsS0FBSyxtQkFBbUIsRUFBRSxJQUFJLEdBQ3hDO0FBQ0QsaUJBQUssbUJBQW1CLEVBQUUsS0FBSztBQUFBLFVBQ2hDO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFdBQVcscUJBQXFCO0FBQy9CLGdCQUFNLGFBQWEsTUFBTTtBQUN6QixxQkFBVyxLQUFLLHNCQUFzQjtBQUN0QyxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsV0FBVyxpQkFBaUI7QUFDM0IsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFjQSxJQUFJLFFBQVE7QUFDWCxpQkFBTyxLQUFLLFVBQVUsT0FBTztBQUFBLFFBQzlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFjQSxJQUFJLE1BQU0sT0FBTztBQUNoQixlQUFLLFVBQVUsU0FBUyxLQUFLO0FBQzdCLGNBQUk7QUFDSCxrQkFBTSxhQUFhLEtBQUssS0FBSztBQUFBLFVBQzlCLFNBQVMsR0FBRztBQUNYLDhCQUFrQixNQUFNLHdCQUF3QixFQUFFLE9BQU87QUFBQSxVQUMxRDtBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQW9CQSxJQUFJLFdBQVc7QUFDZCxpQkFBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sVUFBVTtBQUFBLFlBQ3hDLFdBQVc7QUFBQSxjQUNWLE1BQU1ILGFBQVk7QUFBQSxZQUNuQjtBQUFBLFlBQ0EsUUFBUTtBQUFBLGNBQ1AsUUFBUTtBQUFBLFlBQ1Q7QUFBQSxZQUNBLFNBQVM7QUFBQSxjQUNSLFFBQVE7QUFBQSxZQUNUO0FBQUEsWUFDQSxVQUFVO0FBQUEsWUFDVixTQUFTO0FBQUEsY0FDUixPQUFPLENBQUMsTUFBTTtBQUNiLHNCQUFNLElBQUksTUFBTSxpQ0FBaUM7QUFBQSxjQUNsRDtBQUFBLFlBQ0Q7QUFBQSxZQUNBLFNBQVM7QUFBQSxjQUNSLFFBQVE7QUFBQSxZQUNUO0FBQUEsWUFDQSxPQUFPO0FBQUEsVUFDUixDQUFDO0FBQUEsUUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxPQUFPLFNBQVM7QUFDZixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsT0FBTyxtQkFBbUI7QUFDekIsaUJBQU8sQ0FBQyxrQkFBa0IsZ0JBQWdCO0FBQUEsUUFDM0M7QUFBQSxNQUNEO0FBNkZBLDRCQUFzQixNQUFNO0FBQUE7QUFBQTs7O0FDN1Y1QixNQWdCTTtBQWhCTjtBQUFBO0FBT0E7QUFDQSxNQUFBSTtBQVFBLE1BQU0sd0JBQXdCLElBQUksY0FBYztBQUVoRCxVQUFJO0FBQ0gsOEJBQXNCO0FBQUEsVUFDckI7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUlBO0FBQUEsUUFDRDtBQUFBLE1BQ0QsU0FBUyxHQUFHO0FBQ1g7QUFBQSxVQUNDLFNBQVMsWUFBWSxFQUFFLGNBQWMsTUFBTTtBQUFBLFVBQzNDO0FBQUEsVUFDQSxJQUFJO0FBQUEsUUFDTDtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNzQ0EsV0FBUyxvQkFBb0IsT0FBTztBQUNuQyxZQUFRLE9BQU87QUFBQSxNQUNkLEtBQUs7QUFDSixlQUFPLElBQUksTUFBTSxhQUFhLEVBQUU7QUFBQSxNQUNqQyxLQUFLO0FBQ0osZUFBTyxJQUFJO0FBQUEsVUFDVjtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRCxLQUFLO0FBQ0osZUFBTyxJQUFJO0FBQUEsVUFDVjtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRCxLQUFLO0FBQ0osZUFBTyxJQUFJO0FBQUEsVUFDVjtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUNDLGVBQU8sSUFBSSxNQUFNLE9BQU8sRUFBRTtBQUFBLElBQzVCO0FBQUEsRUFDRDtBQTVGQSxNQWdCTUMsaUJBU0E7QUF6Qk47QUFBQTtBQU9BO0FBQ0E7QUFRQSxNQUFNQSxrQkFBaUIsT0FBTyxnQkFBZ0I7QUFTOUMsTUFBTSxRQUFOLE1BQU0sZUFBYyxLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPeEIsWUFBWSxPQUFPLGNBQWM7QUFDaEMsZ0JBQU07QUFDTixlQUFLQSxlQUFjLElBQUksQ0FBQztBQUN4QixlQUFLQSxlQUFjLEVBQUUsUUFBUSxlQUFlLEtBQUs7QUFDakQsZUFBS0EsZUFBYyxFQUFFLGVBQWUsZUFBZSxZQUFZO0FBQUEsUUFDaEU7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLElBQUksUUFBUTtBQUNYLGlCQUFPLEtBQUtBLGVBQWMsRUFBRTtBQUFBLFFBQzdCO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxJQUFJLGVBQWU7QUFDbEIsaUJBQU8sS0FBS0EsZUFBYyxFQUFFO0FBQUEsUUFDN0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLFdBQVc7QUFDVixpQkFBTyxJQUFJO0FBQUEsWUFDVixLQUFLQSxlQUFjLEVBQUU7QUFBQSxZQUNyQixLQUFLQSxlQUFjLEVBQUU7QUFBQSxVQUN0QjtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDOURBO0FBQUE7QUFBQTtBQUFBO0FBMEtBLFdBQVNDLGVBQWM7QUFDdEIsV0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRUjtBQW5MQSxNQXFETTtBQXJETixNQUFBQyxxQkFBQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFBQztBQUNBO0FBQ0E7QUF5Q0EsTUFBTSxjQUFOLGNBQTBCLE9BQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNaEMsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLGdEQUFnRDtBQUFBLFFBQ25FO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBbUJBLElBQUksV0FBVztBQUNkLGlCQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxVQUFVO0FBQUEsWUFDeEMsV0FBVztBQUFBLGNBQ1YsTUFBTUYsYUFBWTtBQUFBLFlBQ25CO0FBQUEsWUFDQSxRQUFRO0FBQUEsY0FDUCxZQUFZLG9CQUFvQixZQUFZO0FBQUEsY0FDNUMsVUFBVSxvQkFBb0IsVUFBVTtBQUFBLGNBQ3hDLFFBQVEsb0JBQW9CLFFBQVE7QUFBQSxZQUNyQztBQUFBLFlBQ0EsU0FBUyxvQkFBb0IsV0FBVztBQUFBLFVBQ3pDLENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWVBLFNBQVMsT0FBTyxTQUFTO0FBQ3hCLGdCQUFNLGdCQUFnQixPQUFPLElBQUksU0FBUztBQUMxQyxjQUFJLEtBQUssYUFBYSxNQUFNLFFBQVc7QUFDdEMseUJBQWEsS0FBSyxhQUFhLENBQUM7QUFDaEMsbUJBQU8sS0FBSyxhQUFhO0FBQUEsVUFDMUI7QUFFQSxnQkFBTSxNQUFNLEtBQUssVUFBVSxVQUFVLGVBQWUsS0FBSyxDQUFDLEVBQUU7QUFDNUQsY0FBSSxRQUFRLFFBQVc7QUFDdEIsa0JBQU0sSUFBSSxNQUFNLFdBQVc7QUFBQSxVQUM1QjtBQUVBLGVBQUssVUFBVSxXQUFXLGlCQUFpQixLQUFLLEtBQUssQ0FBQztBQUV0RCxjQUFJLFVBQVUsT0FBTyxLQUFLLFVBQVUsR0FBRztBQUN0QyxpQkFBSyxhQUFhLElBQUksV0FBVyxNQUFNO0FBQ3RDLG1CQUFLLFlBQVk7QUFDakIscUJBQU8sS0FBSyxhQUFhO0FBQUEsWUFDMUIsR0FBRyxPQUFPO0FBQUEsVUFDWDtBQUVBLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxjQUFjO0FBQ2IsZUFBSyxVQUFVLFdBQVcsb0JBQW9CLFdBQVcsQ0FBQztBQUMxRCxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLFdBQVc7QUFDVixpQkFBTyxLQUFLLFVBQVUsU0FBUztBQUFBLFFBQ2hDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLE9BQU8sU0FBUztBQUNmLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxPQUFPLG1CQUFtQjtBQUN6QixnQkFBTSxTQUFTLE9BQU8saUJBQWlCO0FBQ3ZDLGlCQUFPLEtBQUsscUJBQXFCO0FBQ2pDLGlCQUFPO0FBQUEsUUFDUjtBQUFBLE1BQ0Q7QUFpQkEsNEJBQXNCLFdBQVc7QUFBQTtBQUFBOzs7QUM1SWpDLFdBQVMsU0FBUyxTQUFTLFVBQVUsZUFBZSxhQUFhLFFBQVE7QUFDeEUsV0FBTyxjQUFjLFNBQVMsVUFBVSxRQUFRLFNBQVUsR0FBRyxHQUFHLEdBQUc7QUFDbEUsVUFBSSxNQUFNLEdBQUcsYUFBYSxDQUFDO0FBQzNCLFVBQUksTUFBTSxHQUFHLGFBQWE7QUFDMUIsV0FBSyxJQUFJLEdBQUcsQ0FBQztBQUFBLElBQ2QsQ0FBQztBQUFBLEVBQ0Y7QUFnRUEsV0FBUyxjQUFjLFNBQVMsVUFBVSxRQUFRLFVBQVU7QUFDM0QsVUFBTSxTQUFTLG9CQUFJLElBQUk7QUFFdkIsUUFBSTtBQUNKLFFBQUksV0FBVyxRQUFRLEdBQUc7QUFDekIsWUFBTSxTQUFTLE9BQU87QUFDdEIsVUFBSSxFQUFFLGVBQWUsTUFBTTtBQUMxQixjQUFNLElBQUksVUFBVSx5Q0FBeUM7QUFBQSxNQUM5RDtBQUFBLElBQ0QsV0FBVyxTQUFTLFFBQVEsR0FBRztBQUM5QixZQUFNLG9CQUFJLElBQUk7QUFDZCxtQkFBYSxLQUFLLEtBQUssU0FBUyxRQUFRO0FBQUEsSUFDekMsT0FBTztBQUNOLFlBQU0sSUFBSSxVQUFVLDZDQUE2QztBQUFBLElBQ2xFO0FBRUEsUUFBSSxFQUFFLGVBQWUsTUFBTTtBQUMxQixhQUFPO0FBQUEsSUFDUjtBQUVBLFFBQUksUUFBUSxDQUFDLEdBQUcsR0FBRyxNQUFNO0FBQ3hCLFVBQUksV0FBVyxNQUFNLEdBQUc7QUFDdkIsWUFBSSxPQUFPLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTTtBQUFNO0FBQUEsTUFDcEM7QUFFQSxlQUFTLEtBQUssUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUFBLElBQzlCLENBQUM7QUFFRCxXQUFPO0FBQUEsRUFDUjtBQVVBLFdBQVMsYUFBYSxTQUFTLFVBQVUsS0FBSyxXQUFXO0FBQ3hELFVBQU0sYUFBYSxvQkFBSSxJQUFJO0FBRTNCLFVBQU0sZUFBZSxLQUFLO0FBRTFCLFFBQUksUUFBUTtBQUFXLFlBQU0sQ0FBQztBQUU5QixVQUFNLFFBQVEsU0FBUyxNQUFNLFNBQVM7QUFDdEMsUUFBSSxVQUFVO0FBQ2QsVUFBTSxjQUFjLENBQUM7QUFDckIsT0FBRztBQUNGLGdCQUFVLE1BQU0sTUFBTTtBQUN0QixrQkFBWSxLQUFLLE9BQU87QUFFeEIsVUFBSSxZQUFZLFVBQVU7QUFDekIsY0FBTSxTQUFTLElBQUksV0FBVyxPQUFPO0FBQ3JDLFlBQUk7QUFFSixZQUFJO0FBQ0gsZ0JBQU0sT0FBTyxPQUFPLFlBQVksS0FBSyxTQUFTLENBQUM7QUFBQSxRQUNoRCxTQUFTLEdBQUc7QUFDWCxnQkFBTUcsS0FBSTtBQUNWLGdCQUFNLG9CQUFJLElBQUk7QUFBQSxRQUNmO0FBRUEsbUJBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLO0FBQ3pCLGdCQUFNLFVBQVUsTUFBTSxHQUFHO0FBRXpCLHNCQUFZLElBQUksQ0FBQ0EsT0FBTTtBQUN0QixvQkFBUSxLQUFLQSxPQUFNLFdBQVcsSUFBSUEsRUFBQztBQUFBLFVBQ3BDLENBQUM7QUFFRCxnQkFBTSxLQUFLLFFBQVEsS0FBSyxTQUFTO0FBQ2pDLGdCQUFNLE1BQU0sYUFBYTtBQUFBLFlBQ3hCO0FBQUEsWUFDQTtBQUFBLFlBQ0EsTUFBTSxLQUFLLFNBQVM7QUFBQSxZQUNwQjtBQUFBLFlBQ0E7QUFBQSxVQUNEO0FBRUEsY0FBSSxTQUFTLEdBQUcsS0FBSyxjQUFjLFFBQVc7QUFDN0MsZ0JBQUksTUFBTSxJQUFJO0FBQUEsVUFDZjtBQUVBLHFCQUFXLElBQUksSUFBSSxHQUFHO0FBQUEsUUFDdkI7QUFBQSxNQUNEO0FBQUEsSUFDRCxTQUFTLE1BQU0sU0FBUztBQUd4QixRQUFJLGlCQUFpQixLQUFLLE1BQU07QUFDL0IsaUJBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxZQUFZO0FBQ2hDLGFBQUssSUFBSSxHQUFHLENBQUM7QUFBQSxNQUNkO0FBQUEsSUFDRDtBQUVBLFdBQU87QUFBQSxFQUNSO0FBd0pBLFdBQVMsTUFBTSxTQUFTLFlBQVksY0FBYztBQUNqRCxRQUFJLGVBQWU7QUFBVyxhQUFPLGVBQWUsZUFBZTtBQUNuRSxtQkFBZSxVQUFVO0FBRXpCLFVBQU0sU0FBUztBQUNmLFVBQU0sUUFBUSxDQUFDLEdBQUcsV0FBVyxTQUFTLE1BQU0sQ0FBQztBQUU3QyxVQUFNLFNBQVMsSUFBSSxXQUFXLE9BQU87QUFFckMsUUFBSSxNQUFNLFdBQVcsR0FBRztBQUN2QixhQUFPLE9BQU8sT0FBTyxVQUFVO0FBQUEsSUFDaEM7QUFFQSxVQUFNLFFBQVEsQ0FBQ0EsT0FBTTtBQUNwQixZQUFNLFNBQVNBLEtBQUksUUFBUTtBQUMzQixZQUFNLGNBQWMsU0FBUyxhQUFhO0FBQzFDLFVBQUksZ0JBQWdCO0FBQVc7QUFFL0IsWUFBTSxPQUFPLFNBQVMsTUFBTTtBQUU1QixVQUFJLElBQUksT0FBTyxPQUFPLElBQUk7QUFDMUIsVUFBSSxNQUFNO0FBQVcsWUFBSTtBQUV6QixtQkFBYSxXQUFXLFdBQVcsYUFBYSxDQUFDO0FBQUEsSUFDbEQsQ0FBQztBQUVELFdBQU87QUFBQSxFQUNSO0FBbllBLE1Ba0JNO0FBbEJOO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQVFBLE1BQU0sU0FBUztBQUFBO0FBQUE7OztBQ0dmLFdBQVMsTUFBTUMsUUFBTyxPQUFPQyxNQUFLO0FBQ2hDLFdBQU9DLEtBQUlGLFFBQU9HLEtBQUksT0FBT0YsSUFBRyxDQUFDO0FBQUEsRUFDbkM7QUFDQSxXQUFTLFNBQVMsT0FBTyxPQUFPO0FBQzlCLFdBQU8sT0FBTyxVQUFVLGFBQWEsTUFBTSxLQUFLLElBQUk7QUFBQSxFQUN0RDtBQUNBLFdBQVMsUUFBUSxXQUFXO0FBQzFCLFdBQU8sVUFBVSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQUEsRUFDL0I7QUFDQSxXQUFTLGFBQWEsV0FBVztBQUMvQixXQUFPLFVBQVUsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUFBLEVBQy9CO0FBQ0EsV0FBUyxnQkFBZ0IsTUFBTTtBQUM3QixXQUFPLFNBQVMsTUFBTSxNQUFNO0FBQUEsRUFDOUI7QUFDQSxXQUFTLGNBQWMsTUFBTTtBQUMzQixXQUFPLFNBQVMsTUFBTSxXQUFXO0FBQUEsRUFDbkM7QUFDQSxXQUFTLFlBQVksV0FBVztBQUM5QixXQUFPLENBQUMsT0FBTyxRQUFRLEVBQUUsU0FBUyxRQUFRLFNBQVMsQ0FBQyxJQUFJLE1BQU07QUFBQSxFQUNoRTtBQUNBLFdBQVMsaUJBQWlCLFdBQVc7QUFDbkMsV0FBTyxnQkFBZ0IsWUFBWSxTQUFTLENBQUM7QUFBQSxFQUMvQztBQUNBLFdBQVMsa0JBQWtCLFdBQVcsT0FBTyxLQUFLO0FBQ2hELFFBQUksUUFBUSxRQUFRO0FBQ2xCLFlBQU07QUFBQSxJQUNSO0FBQ0EsVUFBTSxZQUFZLGFBQWEsU0FBUztBQUN4QyxVQUFNLGdCQUFnQixpQkFBaUIsU0FBUztBQUNoRCxVQUFNLFNBQVMsY0FBYyxhQUFhO0FBQzFDLFFBQUksb0JBQW9CLGtCQUFrQixNQUFNLGVBQWUsTUFBTSxRQUFRLFdBQVcsVUFBVSxTQUFTLGNBQWMsVUFBVSxXQUFXO0FBQzlJLFFBQUksTUFBTSxVQUFVLE1BQU0sSUFBSSxNQUFNLFNBQVMsTUFBTSxHQUFHO0FBQ3BELDBCQUFvQkcsc0JBQXFCLGlCQUFpQjtBQUFBLElBQzVEO0FBQ0EsV0FBTyxDQUFDLG1CQUFtQkEsc0JBQXFCLGlCQUFpQixDQUFDO0FBQUEsRUFDcEU7QUFDQSxXQUFTLHNCQUFzQixXQUFXO0FBQ3hDLFVBQU0sb0JBQW9CQSxzQkFBcUIsU0FBUztBQUN4RCxXQUFPLENBQUMsOEJBQThCLFNBQVMsR0FBRyxtQkFBbUIsOEJBQThCLGlCQUFpQixDQUFDO0FBQUEsRUFDdkg7QUFDQSxXQUFTLDhCQUE4QixXQUFXO0FBQ2hELFdBQU8sVUFBVSxRQUFRLGNBQWMsZUFBYSxxQkFBcUIsU0FBUyxDQUFDO0FBQUEsRUFDckY7QUFDQSxXQUFTLFlBQVksTUFBTSxTQUFTLEtBQUs7QUFDdkMsVUFBTSxLQUFLLENBQUMsUUFBUSxPQUFPO0FBQzNCLFVBQU0sS0FBSyxDQUFDLFNBQVMsTUFBTTtBQUMzQixVQUFNLEtBQUssQ0FBQyxPQUFPLFFBQVE7QUFDM0IsVUFBTSxLQUFLLENBQUMsVUFBVSxLQUFLO0FBQzNCLFlBQVEsTUFBTTtBQUFBLE1BQ1osS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNILFlBQUk7QUFBSyxpQkFBTyxVQUFVLEtBQUs7QUFDL0IsZUFBTyxVQUFVLEtBQUs7QUFBQSxNQUN4QixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0gsZUFBTyxVQUFVLEtBQUs7QUFBQSxNQUN4QjtBQUNFLGVBQU8sQ0FBQztBQUFBLElBQ1o7QUFBQSxFQUNGO0FBQ0EsV0FBUywwQkFBMEIsV0FBVyxlQUFlLFdBQVcsS0FBSztBQUMzRSxVQUFNLFlBQVksYUFBYSxTQUFTO0FBQ3hDLFFBQUksT0FBTyxZQUFZLFFBQVEsU0FBUyxHQUFHLGNBQWMsU0FBUyxHQUFHO0FBQ3JFLFFBQUksV0FBVztBQUNiLGFBQU8sS0FBSyxJQUFJLFVBQVEsT0FBTyxNQUFNLFNBQVM7QUFDOUMsVUFBSSxlQUFlO0FBQ2pCLGVBQU8sS0FBSyxPQUFPLEtBQUssSUFBSSw2QkFBNkIsQ0FBQztBQUFBLE1BQzVEO0FBQUEsSUFDRjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQ0EsV0FBU0Esc0JBQXFCLFdBQVc7QUFDdkMsV0FBTyxVQUFVLFFBQVEsMEJBQTBCLFVBQVEsZ0JBQWdCLElBQUksQ0FBQztBQUFBLEVBQ2xGO0FBQ0EsV0FBUyxvQkFBb0IsU0FBUztBQUNwQyxXQUFPO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTDtBQUFBLEVBQ0Y7QUFDQSxXQUFTLGlCQUFpQixTQUFTO0FBQ2pDLFdBQU8sT0FBTyxZQUFZLFdBQVcsb0JBQW9CLE9BQU8sSUFBSTtBQUFBLE1BQ2xFLEtBQUs7QUFBQSxNQUNMLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLE1BQU07QUFBQSxJQUNSO0FBQUEsRUFDRjtBQUNBLFdBQVNDLGtCQUFpQixNQUFNO0FBQzlCLFdBQU87QUFBQSxNQUNMLEdBQUc7QUFBQSxNQUNILEtBQUssS0FBSztBQUFBLE1BQ1YsTUFBTSxLQUFLO0FBQUEsTUFDWCxPQUFPLEtBQUssSUFBSSxLQUFLO0FBQUEsTUFDckIsUUFBUSxLQUFLLElBQUksS0FBSztBQUFBLElBQ3hCO0FBQUEsRUFDRjtBQXpIQSxNQUFNLE9BQ0EsWUFDQUMsYUFDQUgsTUFDQUQsTUFDQUssUUFDQSxPQUNBLGNBSUEsaUJBTUE7QUFqQk47QUFBQTtBQUFBLE1BQU0sUUFBUSxDQUFDLE9BQU8sU0FBUyxVQUFVLE1BQU07QUFDL0MsTUFBTSxhQUFhLENBQUMsU0FBUyxLQUFLO0FBQ2xDLE1BQU1ELGNBQTBCLHNCQUFNLE9BQU8sQ0FBQyxLQUFLLFNBQVMsSUFBSSxPQUFPLE1BQU0sT0FBTyxNQUFNLFdBQVcsQ0FBQyxHQUFHLE9BQU8sTUFBTSxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4SSxNQUFNSCxPQUFNLEtBQUs7QUFDakIsTUFBTUQsT0FBTSxLQUFLO0FBQ2pCLE1BQU1LLFNBQVEsS0FBSztBQUNuQixNQUFNLFFBQVEsS0FBSztBQUNuQixNQUFNLGVBQWUsUUFBTTtBQUFBLFFBQ3pCLEdBQUc7QUFBQSxRQUNILEdBQUc7QUFBQSxNQUNMO0FBQ0EsTUFBTSxrQkFBa0I7QUFBQSxRQUN0QixNQUFNO0FBQUEsUUFDTixPQUFPO0FBQUEsUUFDUCxRQUFRO0FBQUEsUUFDUixLQUFLO0FBQUEsTUFDUDtBQUNBLE1BQU0sdUJBQXVCO0FBQUEsUUFDM0IsT0FBTztBQUFBLFFBQ1AsS0FBSztBQUFBLE1BQ1A7QUFBQTtBQUFBOzs7QUNqQkEsV0FBUywyQkFBMkIsTUFBTSxXQUFXLEtBQUs7QUFDeEQsUUFBSTtBQUFBLE1BQ0YsV0FBQUM7QUFBQSxNQUNBO0FBQUEsSUFDRixJQUFJO0FBQ0osVUFBTSxXQUFXLFlBQVksU0FBUztBQUN0QyxVQUFNLGdCQUFnQixpQkFBaUIsU0FBUztBQUNoRCxVQUFNLGNBQWMsY0FBYyxhQUFhO0FBQy9DLFVBQU0sT0FBTyxRQUFRLFNBQVM7QUFDOUIsVUFBTSxhQUFhLGFBQWE7QUFDaEMsVUFBTSxVQUFVQSxXQUFVLElBQUlBLFdBQVUsUUFBUSxJQUFJLFNBQVMsUUFBUTtBQUNyRSxVQUFNLFVBQVVBLFdBQVUsSUFBSUEsV0FBVSxTQUFTLElBQUksU0FBUyxTQUFTO0FBQ3ZFLFVBQU0sY0FBY0EsV0FBVSxXQUFXLElBQUksSUFBSSxTQUFTLFdBQVcsSUFBSTtBQUN6RSxRQUFJO0FBQ0osWUFBUSxNQUFNO0FBQUEsTUFDWixLQUFLO0FBQ0gsaUJBQVM7QUFBQSxVQUNQLEdBQUc7QUFBQSxVQUNILEdBQUdBLFdBQVUsSUFBSSxTQUFTO0FBQUEsUUFDNUI7QUFDQTtBQUFBLE1BQ0YsS0FBSztBQUNILGlCQUFTO0FBQUEsVUFDUCxHQUFHO0FBQUEsVUFDSCxHQUFHQSxXQUFVLElBQUlBLFdBQVU7QUFBQSxRQUM3QjtBQUNBO0FBQUEsTUFDRixLQUFLO0FBQ0gsaUJBQVM7QUFBQSxVQUNQLEdBQUdBLFdBQVUsSUFBSUEsV0FBVTtBQUFBLFVBQzNCLEdBQUc7QUFBQSxRQUNMO0FBQ0E7QUFBQSxNQUNGLEtBQUs7QUFDSCxpQkFBUztBQUFBLFVBQ1AsR0FBR0EsV0FBVSxJQUFJLFNBQVM7QUFBQSxVQUMxQixHQUFHO0FBQUEsUUFDTDtBQUNBO0FBQUEsTUFDRjtBQUNFLGlCQUFTO0FBQUEsVUFDUCxHQUFHQSxXQUFVO0FBQUEsVUFDYixHQUFHQSxXQUFVO0FBQUEsUUFDZjtBQUFBLElBQ0o7QUFDQSxZQUFRLGFBQWEsU0FBUyxHQUFHO0FBQUEsTUFDL0IsS0FBSztBQUNILGVBQU8sYUFBYSxLQUFLLGVBQWUsT0FBTyxhQUFhLEtBQUs7QUFDakU7QUFBQSxNQUNGLEtBQUs7QUFDSCxlQUFPLGFBQWEsS0FBSyxlQUFlLE9BQU8sYUFBYSxLQUFLO0FBQ2pFO0FBQUEsSUFDSjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBc0dBLGlCQUFlQyxnQkFBZSxPQUFPQyxVQUFTO0FBQzVDLFFBQUk7QUFDSixRQUFJQSxhQUFZLFFBQVE7QUFDdEIsTUFBQUEsV0FBVSxDQUFDO0FBQUEsSUFDYjtBQUNBLFVBQU07QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLE1BQ0EsVUFBQUM7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUk7QUFDSixVQUFNO0FBQUEsTUFDSixXQUFXO0FBQUEsTUFDWCxlQUFlO0FBQUEsTUFDZixpQkFBaUI7QUFBQSxNQUNqQixjQUFjO0FBQUEsTUFDZCxVQUFVO0FBQUEsSUFDWixJQUFJLFNBQVNELFVBQVMsS0FBSztBQUMzQixVQUFNLGdCQUFnQixpQkFBaUIsT0FBTztBQUM5QyxVQUFNLGFBQWEsbUJBQW1CLGFBQWEsY0FBYztBQUNqRSxVQUFNLFVBQVUsU0FBUyxjQUFjLGFBQWEsY0FBYztBQUNsRSxVQUFNLHFCQUFxQkUsa0JBQWlCLE1BQU1ELFVBQVMsZ0JBQWdCO0FBQUEsTUFDekUsV0FBVyx3QkFBd0IsT0FBT0EsVUFBUyxhQUFhLE9BQU8sU0FBU0EsVUFBUyxVQUFVLE9BQU8sT0FBTyxPQUFPLHdCQUF3QixRQUFRLFVBQVUsUUFBUSxrQkFBbUIsT0FBT0EsVUFBUyxzQkFBc0IsT0FBTyxTQUFTQSxVQUFTLG1CQUFtQixTQUFTLFFBQVE7QUFBQSxNQUNoUztBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixDQUFDLENBQUM7QUFDRixVQUFNLE9BQU8sbUJBQW1CLGFBQWE7QUFBQSxNQUMzQyxHQUFHLE1BQU07QUFBQSxNQUNUO0FBQUEsTUFDQTtBQUFBLElBQ0YsSUFBSSxNQUFNO0FBQ1YsVUFBTSxlQUFlLE9BQU9BLFVBQVMsbUJBQW1CLE9BQU8sU0FBU0EsVUFBUyxnQkFBZ0IsU0FBUyxRQUFRO0FBQ2xILFVBQU0sY0FBZSxPQUFPQSxVQUFTLGFBQWEsT0FBTyxTQUFTQSxVQUFTLFVBQVUsWUFBWSxLQUFPLE9BQU9BLFVBQVMsWUFBWSxPQUFPLFNBQVNBLFVBQVMsU0FBUyxZQUFZLE1BQU87QUFBQSxNQUN2TCxHQUFHO0FBQUEsTUFDSCxHQUFHO0FBQUEsSUFDTCxJQUFJO0FBQUEsTUFDRixHQUFHO0FBQUEsTUFDSCxHQUFHO0FBQUEsSUFDTDtBQUNBLFVBQU0sb0JBQW9CQyxrQkFBaUJELFVBQVMsd0RBQXdELE1BQU1BLFVBQVMsc0RBQXNEO0FBQUEsTUFDL0s7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0YsQ0FBQyxJQUFJLElBQUk7QUFDVCxXQUFPO0FBQUEsTUFDTCxNQUFNLG1CQUFtQixNQUFNLGtCQUFrQixNQUFNLGNBQWMsT0FBTyxZQUFZO0FBQUEsTUFDeEYsU0FBUyxrQkFBa0IsU0FBUyxtQkFBbUIsU0FBUyxjQUFjLFVBQVUsWUFBWTtBQUFBLE1BQ3BHLE9BQU8sbUJBQW1CLE9BQU8sa0JBQWtCLE9BQU8sY0FBYyxRQUFRLFlBQVk7QUFBQSxNQUM1RixRQUFRLGtCQUFrQixRQUFRLG1CQUFtQixRQUFRLGNBQWMsU0FBUyxZQUFZO0FBQUEsSUFDbEc7QUFBQSxFQUNGO0FBb0ZBLFdBQVMsaUJBQWlCLFdBQVcsZUFBZSxtQkFBbUI7QUFDckUsVUFBTSxxQ0FBcUMsWUFBWSxDQUFDLEdBQUcsa0JBQWtCLE9BQU8sZUFBYSxhQUFhLFNBQVMsTUFBTSxTQUFTLEdBQUcsR0FBRyxrQkFBa0IsT0FBTyxlQUFhLGFBQWEsU0FBUyxNQUFNLFNBQVMsQ0FBQyxJQUFJLGtCQUFrQixPQUFPLGVBQWEsUUFBUSxTQUFTLE1BQU0sU0FBUztBQUNsUyxXQUFPLG1DQUFtQyxPQUFPLGVBQWE7QUFDNUQsVUFBSSxXQUFXO0FBQ2IsZUFBTyxhQUFhLFNBQVMsTUFBTSxjQUFjLGdCQUFnQiw4QkFBOEIsU0FBUyxNQUFNLFlBQVk7QUFBQSxNQUM1SDtBQUNBLGFBQU87QUFBQSxJQUNULENBQUM7QUFBQSxFQUNIO0FBNFpBLGlCQUFlLHFCQUFxQixPQUFPRCxVQUFTO0FBQ2xELFVBQU07QUFBQSxNQUNKO0FBQUEsTUFDQSxVQUFBQztBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUk7QUFDSixVQUFNLE1BQU0sT0FBT0EsVUFBUyxTQUFTLE9BQU8sU0FBU0EsVUFBUyxNQUFNLFNBQVMsUUFBUTtBQUNyRixVQUFNLE9BQU8sUUFBUSxTQUFTO0FBQzlCLFVBQU0sWUFBWSxhQUFhLFNBQVM7QUFDeEMsVUFBTSxhQUFhLFlBQVksU0FBUyxNQUFNO0FBQzlDLFVBQU0sZ0JBQWdCLENBQUMsUUFBUSxLQUFLLEVBQUUsU0FBUyxJQUFJLElBQUksS0FBSztBQUM1RCxVQUFNLGlCQUFpQixPQUFPLGFBQWEsS0FBSztBQUNoRCxVQUFNLFdBQVcsU0FBU0QsVUFBUyxLQUFLO0FBR3hDLFFBQUk7QUFBQSxNQUNGO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUksT0FBTyxhQUFhLFdBQVc7QUFBQSxNQUNqQyxVQUFVO0FBQUEsTUFDVixXQUFXO0FBQUEsTUFDWCxlQUFlO0FBQUEsSUFDakIsSUFBSTtBQUFBLE1BQ0YsVUFBVTtBQUFBLE1BQ1YsV0FBVztBQUFBLE1BQ1gsZUFBZTtBQUFBLE1BQ2YsR0FBRztBQUFBLElBQ0w7QUFDQSxRQUFJLGFBQWEsT0FBTyxrQkFBa0IsVUFBVTtBQUNsRCxrQkFBWSxjQUFjLFFBQVEsZ0JBQWdCLEtBQUs7QUFBQSxJQUN6RDtBQUNBLFdBQU8sYUFBYTtBQUFBLE1BQ2xCLEdBQUcsWUFBWTtBQUFBLE1BQ2YsR0FBRyxXQUFXO0FBQUEsSUFDaEIsSUFBSTtBQUFBLE1BQ0YsR0FBRyxXQUFXO0FBQUEsTUFDZCxHQUFHLFlBQVk7QUFBQSxJQUNqQjtBQUFBLEVBQ0Y7QUFudkJBLE1Ba0VNLGlCQXlKQUcsUUE0RkEsZUE4RkFDLE9BdVdBQyxTQTJCQSxPQStJQTtBQXQ2Qk47QUFBQTtBQUFBO0FBQ0E7QUFpRUEsTUFBTSxrQkFBa0IsT0FBT1AsWUFBVyxVQUFVUSxZQUFXO0FBQzdELGNBQU07QUFBQSxVQUNKLFlBQVk7QUFBQSxVQUNaLFdBQVc7QUFBQSxVQUNYLGFBQWEsQ0FBQztBQUFBLFVBQ2QsVUFBQUw7QUFBQSxRQUNGLElBQUlLO0FBQ0osY0FBTSxrQkFBa0IsV0FBVyxPQUFPLE9BQU87QUFDakQsY0FBTSxNQUFNLE9BQU9MLFVBQVMsU0FBUyxPQUFPLFNBQVNBLFVBQVMsTUFBTSxRQUFRO0FBQzVFLFlBQUksUUFBUSxNQUFNQSxVQUFTLGdCQUFnQjtBQUFBLFVBQ3pDLFdBQUFIO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNGLENBQUM7QUFDRCxZQUFJO0FBQUEsVUFDRjtBQUFBLFVBQ0E7QUFBQSxRQUNGLElBQUksMkJBQTJCLE9BQU8sV0FBVyxHQUFHO0FBQ3BELFlBQUksb0JBQW9CO0FBQ3hCLFlBQUksaUJBQWlCLENBQUM7QUFDdEIsWUFBSSxhQUFhO0FBQ2pCLGlCQUFTLElBQUksR0FBRyxJQUFJLGdCQUFnQixRQUFRLEtBQUs7QUFDL0MsZ0JBQU07QUFBQSxZQUNKO0FBQUEsWUFDQSxJQUFBUztBQUFBLFVBQ0YsSUFBSSxnQkFBZ0IsQ0FBQztBQUNyQixnQkFBTTtBQUFBLFlBQ0osR0FBRztBQUFBLFlBQ0gsR0FBRztBQUFBLFlBQ0g7QUFBQSxZQUNBO0FBQUEsVUFDRixJQUFJLE1BQU1BLElBQUc7QUFBQSxZQUNYO0FBQUEsWUFDQTtBQUFBLFlBQ0Esa0JBQWtCO0FBQUEsWUFDbEIsV0FBVztBQUFBLFlBQ1g7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0EsVUFBQU47QUFBQSxZQUNBLFVBQVU7QUFBQSxjQUNSLFdBQUFIO0FBQUEsY0FDQTtBQUFBLFlBQ0Y7QUFBQSxVQUNGLENBQUM7QUFDRCxjQUFJLFNBQVMsT0FBTyxRQUFRO0FBQzVCLGNBQUksU0FBUyxPQUFPLFFBQVE7QUFDNUIsMkJBQWlCO0FBQUEsWUFDZixHQUFHO0FBQUEsWUFDSCxDQUFDLElBQUksR0FBRztBQUFBLGNBQ04sR0FBRyxlQUFlLElBQUk7QUFBQSxjQUN0QixHQUFHO0FBQUEsWUFDTDtBQUFBLFVBQ0Y7QUFDQSxjQUFJLFNBQVMsY0FBYyxJQUFJO0FBQzdCO0FBQ0EsZ0JBQUksT0FBTyxVQUFVLFVBQVU7QUFDN0Isa0JBQUksTUFBTSxXQUFXO0FBQ25CLG9DQUFvQixNQUFNO0FBQUEsY0FDNUI7QUFDQSxrQkFBSSxNQUFNLE9BQU87QUFDZix3QkFBUSxNQUFNLFVBQVUsT0FBTyxNQUFNRyxVQUFTLGdCQUFnQjtBQUFBLGtCQUM1RCxXQUFBSDtBQUFBLGtCQUNBO0FBQUEsa0JBQ0E7QUFBQSxnQkFDRixDQUFDLElBQUksTUFBTTtBQUFBLGNBQ2I7QUFDQSxlQUFDO0FBQUEsZ0JBQ0M7QUFBQSxnQkFDQTtBQUFBLGNBQ0YsSUFBSSwyQkFBMkIsT0FBTyxtQkFBbUIsR0FBRztBQUFBLFlBQzlEO0FBQ0EsZ0JBQUk7QUFDSjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQ0EsZUFBTztBQUFBLFVBQ0w7QUFBQSxVQUNBO0FBQUEsVUFDQSxXQUFXO0FBQUEsVUFDWDtBQUFBLFVBQ0E7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQXNFQSxNQUFNSyxTQUFRLENBQUFILGNBQVk7QUFBQSxRQUN4QixNQUFNO0FBQUEsUUFDTixTQUFBQTtBQUFBLFFBQ0EsTUFBTSxHQUFHLE9BQU87QUFDZCxnQkFBTTtBQUFBLFlBQ0o7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBLFVBQUFDO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxVQUNGLElBQUk7QUFFSixnQkFBTTtBQUFBLFlBQ0o7QUFBQSxZQUNBLFVBQVU7QUFBQSxVQUNaLElBQUksU0FBU0QsVUFBUyxLQUFLLEtBQUssQ0FBQztBQUNqQyxjQUFJLFdBQVcsTUFBTTtBQUNuQixtQkFBTyxDQUFDO0FBQUEsVUFDVjtBQUNBLGdCQUFNLGdCQUFnQixpQkFBaUIsT0FBTztBQUM5QyxnQkFBTSxTQUFTO0FBQUEsWUFDYjtBQUFBLFlBQ0E7QUFBQSxVQUNGO0FBQ0EsZ0JBQU0sT0FBTyxpQkFBaUIsU0FBUztBQUN2QyxnQkFBTSxTQUFTLGNBQWMsSUFBSTtBQUNqQyxnQkFBTSxrQkFBa0IsTUFBTUMsVUFBUyxjQUFjLE9BQU87QUFDNUQsZ0JBQU0sVUFBVSxTQUFTO0FBQ3pCLGdCQUFNLFVBQVUsVUFBVSxRQUFRO0FBQ2xDLGdCQUFNLFVBQVUsVUFBVSxXQUFXO0FBQ3JDLGdCQUFNLGFBQWEsVUFBVSxpQkFBaUI7QUFDOUMsZ0JBQU0sVUFBVSxNQUFNLFVBQVUsTUFBTSxJQUFJLE1BQU0sVUFBVSxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksTUFBTSxTQUFTLE1BQU07QUFDdEcsZ0JBQU0sWUFBWSxPQUFPLElBQUksSUFBSSxNQUFNLFVBQVUsSUFBSTtBQUNyRCxnQkFBTSxvQkFBb0IsT0FBT0EsVUFBUyxtQkFBbUIsT0FBTyxTQUFTQSxVQUFTLGdCQUFnQixPQUFPO0FBQzdHLGNBQUksYUFBYSxvQkFBb0Isa0JBQWtCLFVBQVUsSUFBSTtBQUdyRSxjQUFJLENBQUMsY0FBYyxDQUFFLE9BQU9BLFVBQVMsYUFBYSxPQUFPLFNBQVNBLFVBQVMsVUFBVSxpQkFBaUIsSUFBSztBQUN6Ryx5QkFBYSxTQUFTLFNBQVMsVUFBVSxLQUFLLE1BQU0sU0FBUyxNQUFNO0FBQUEsVUFDckU7QUFDQSxnQkFBTSxvQkFBb0IsVUFBVSxJQUFJLFlBQVk7QUFJcEQsZ0JBQU0seUJBQXlCLGFBQWEsSUFBSSxnQkFBZ0IsTUFBTSxJQUFJLElBQUk7QUFDOUUsZ0JBQU0sYUFBYU8sS0FBSSxjQUFjLE9BQU8sR0FBRyxzQkFBc0I7QUFDckUsZ0JBQU0sYUFBYUEsS0FBSSxjQUFjLE9BQU8sR0FBRyxzQkFBc0I7QUFJckUsZ0JBQU0sUUFBUTtBQUNkLGdCQUFNQyxPQUFNLGFBQWEsZ0JBQWdCLE1BQU0sSUFBSTtBQUNuRCxnQkFBTSxTQUFTLGFBQWEsSUFBSSxnQkFBZ0IsTUFBTSxJQUFJLElBQUk7QUFDOUQsZ0JBQU1KLFVBQVMsTUFBTSxPQUFPLFFBQVFJLElBQUc7QUFNdkMsZ0JBQU0sa0JBQWtCLENBQUMsZUFBZSxTQUFTLGFBQWEsU0FBUyxLQUFLLFFBQVEsVUFBVUosV0FBVSxNQUFNLFVBQVUsTUFBTSxJQUFJLEtBQUssU0FBUyxRQUFRLGFBQWEsY0FBYyxnQkFBZ0IsTUFBTSxJQUFJLElBQUk7QUFDak4sZ0JBQU0sa0JBQWtCLGtCQUFrQixTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVNJLE9BQU07QUFDM0YsaUJBQU87QUFBQSxZQUNMLENBQUMsSUFBSSxHQUFHLE9BQU8sSUFBSSxJQUFJO0FBQUEsWUFDdkIsTUFBTTtBQUFBLGNBQ0osQ0FBQyxJQUFJLEdBQUdKO0FBQUEsY0FDUixjQUFjLFNBQVNBLFVBQVM7QUFBQSxjQUNoQyxHQUFJLG1CQUFtQjtBQUFBLGdCQUNyQjtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBQUEsWUFDQSxPQUFPO0FBQUEsVUFDVDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBaUJBLE1BQU0sZ0JBQWdCLFNBQVVMLFVBQVM7QUFDdkMsWUFBSUEsYUFBWSxRQUFRO0FBQ3RCLFVBQUFBLFdBQVUsQ0FBQztBQUFBLFFBQ2I7QUFDQSxlQUFPO0FBQUEsVUFDTCxNQUFNO0FBQUEsVUFDTixTQUFBQTtBQUFBLFVBQ0EsTUFBTSxHQUFHLE9BQU87QUFDZCxnQkFBSSx1QkFBdUIsd0JBQXdCO0FBQ25ELGtCQUFNO0FBQUEsY0FDSjtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQSxVQUFBQztBQUFBLGNBQ0E7QUFBQSxZQUNGLElBQUk7QUFDSixrQkFBTTtBQUFBLGNBQ0osWUFBWTtBQUFBLGNBQ1o7QUFBQSxjQUNBLG9CQUFvQlM7QUFBQSxjQUNwQixnQkFBZ0I7QUFBQSxjQUNoQixHQUFHO0FBQUEsWUFDTCxJQUFJLFNBQVNWLFVBQVMsS0FBSztBQUMzQixrQkFBTSxlQUFlLGNBQWMsVUFBYSxzQkFBc0JVLGNBQWEsaUJBQWlCLGFBQWEsTUFBTSxlQUFlLGlCQUFpQixJQUFJO0FBQzNKLGtCQUFNLFdBQVcsTUFBTVgsZ0JBQWUsT0FBTyxxQkFBcUI7QUFDbEUsa0JBQU0saUJBQWlCLHdCQUF3QixlQUFlLGtCQUFrQixPQUFPLFNBQVMsc0JBQXNCLFVBQVU7QUFDaEksa0JBQU0sbUJBQW1CLGFBQWEsWUFBWTtBQUNsRCxnQkFBSSxvQkFBb0IsTUFBTTtBQUM1QixxQkFBTyxDQUFDO0FBQUEsWUFDVjtBQUNBLGtCQUFNLGlCQUFpQixrQkFBa0Isa0JBQWtCLE9BQU8sT0FBT0UsVUFBUyxTQUFTLE9BQU8sU0FBU0EsVUFBUyxNQUFNLFNBQVMsUUFBUSxFQUFFO0FBRzdJLGdCQUFJLGNBQWMsa0JBQWtCO0FBQ2xDLHFCQUFPO0FBQUEsZ0JBQ0wsT0FBTztBQUFBLGtCQUNMLFdBQVcsYUFBYSxDQUFDO0FBQUEsZ0JBQzNCO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFDQSxrQkFBTSxtQkFBbUIsQ0FBQyxTQUFTLFFBQVEsZ0JBQWdCLENBQUMsR0FBRyxTQUFTLGVBQWUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBQ3ZILGtCQUFNLGVBQWUsQ0FBQyxLQUFNLHlCQUF5QixlQUFlLGtCQUFrQixPQUFPLFNBQVMsdUJBQXVCLGNBQWMsQ0FBQyxHQUFJO0FBQUEsY0FDOUksV0FBVztBQUFBLGNBQ1gsV0FBVztBQUFBLFlBQ2IsQ0FBQztBQUNELGtCQUFNLGdCQUFnQixhQUFhLGVBQWUsQ0FBQztBQUduRCxnQkFBSSxlQUFlO0FBQ2pCLHFCQUFPO0FBQUEsZ0JBQ0wsTUFBTTtBQUFBLGtCQUNKLE9BQU8sZUFBZTtBQUFBLGtCQUN0QixXQUFXO0FBQUEsZ0JBQ2I7QUFBQSxnQkFDQSxPQUFPO0FBQUEsa0JBQ0wsV0FBVztBQUFBLGdCQUNiO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFDQSxrQkFBTSw4QkFBOEIsYUFBYSxJQUFJLENBQUFVLE9BQUs7QUFDeEQsb0JBQU1DLGFBQVksYUFBYUQsR0FBRSxTQUFTO0FBQzFDLHFCQUFPLENBQUNBLEdBQUUsV0FBV0MsY0FBYTtBQUFBO0FBQUEsZ0JBRWxDRCxHQUFFLFVBQVUsTUFBTSxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsS0FBSyxNQUFNLE1BQU0sR0FBRyxDQUFDO0FBQUE7QUFBQTtBQUFBLGdCQUVyREEsR0FBRSxVQUFVLENBQUM7QUFBQSxpQkFBR0EsR0FBRSxTQUFTO0FBQUEsWUFDN0IsQ0FBQyxFQUFFLEtBQUssQ0FBQ0UsSUFBRyxNQUFNQSxHQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM3QixrQkFBTSw4QkFBOEIsNEJBQTRCLE9BQU8sQ0FBQUYsT0FBS0EsR0FBRSxDQUFDLEVBQUU7QUFBQSxjQUFNO0FBQUE7QUFBQTtBQUFBLGNBR3ZGLGFBQWFBLEdBQUUsQ0FBQyxDQUFDLElBQUksSUFBSTtBQUFBLFlBQUMsRUFBRSxNQUFNLE9BQUssS0FBSyxDQUFDLENBQUM7QUFDOUMsa0JBQU0sbUJBQW1CLHdCQUF3Qiw0QkFBNEIsQ0FBQyxNQUFNLE9BQU8sU0FBUyxzQkFBc0IsQ0FBQyxNQUFNLDRCQUE0QixDQUFDLEVBQUUsQ0FBQztBQUNqSyxnQkFBSSxtQkFBbUIsV0FBVztBQUNoQyxxQkFBTztBQUFBLGdCQUNMLE1BQU07QUFBQSxrQkFDSixPQUFPLGVBQWU7QUFBQSxrQkFDdEIsV0FBVztBQUFBLGdCQUNiO0FBQUEsZ0JBQ0EsT0FBTztBQUFBLGtCQUNMLFdBQVc7QUFBQSxnQkFDYjtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBQ0EsbUJBQU8sQ0FBQztBQUFBLFVBQ1Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQVFBLE1BQU1QLFFBQU8sU0FBVUosVUFBUztBQUM5QixZQUFJQSxhQUFZLFFBQVE7QUFDdEIsVUFBQUEsV0FBVSxDQUFDO0FBQUEsUUFDYjtBQUNBLGVBQU87QUFBQSxVQUNMLE1BQU07QUFBQSxVQUNOLFNBQUFBO0FBQUEsVUFDQSxNQUFNLEdBQUcsT0FBTztBQUNkLGdCQUFJLHVCQUF1QjtBQUMzQixrQkFBTTtBQUFBLGNBQ0o7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBLFVBQUFDO0FBQUEsY0FDQTtBQUFBLFlBQ0YsSUFBSTtBQUNKLGtCQUFNO0FBQUEsY0FDSixVQUFVLGdCQUFnQjtBQUFBLGNBQzFCLFdBQVcsaUJBQWlCO0FBQUEsY0FDNUIsb0JBQW9CO0FBQUEsY0FDcEIsbUJBQW1CO0FBQUEsY0FDbkIsNEJBQTRCO0FBQUEsY0FDNUIsZ0JBQWdCO0FBQUEsY0FDaEIsR0FBRztBQUFBLFlBQ0wsSUFBSSxTQUFTRCxVQUFTLEtBQUs7QUFNM0IsaUJBQUssd0JBQXdCLGVBQWUsVUFBVSxRQUFRLHNCQUFzQixpQkFBaUI7QUFDbkcscUJBQU8sQ0FBQztBQUFBLFlBQ1Y7QUFDQSxrQkFBTSxPQUFPLFFBQVEsU0FBUztBQUM5QixrQkFBTSxrQkFBa0IsUUFBUSxnQkFBZ0IsTUFBTTtBQUN0RCxrQkFBTSxNQUFNLE9BQU9DLFVBQVMsU0FBUyxPQUFPLFNBQVNBLFVBQVMsTUFBTSxTQUFTLFFBQVE7QUFDckYsa0JBQU0scUJBQXFCLGdDQUFnQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQ2Esc0JBQXFCLGdCQUFnQixDQUFDLElBQUksc0JBQXNCLGdCQUFnQjtBQUNoTCxnQkFBSSxDQUFDLCtCQUErQiw4QkFBOEIsUUFBUTtBQUN4RSxpQ0FBbUIsS0FBSyxHQUFHLDBCQUEwQixrQkFBa0IsZUFBZSwyQkFBMkIsR0FBRyxDQUFDO0FBQUEsWUFDdkg7QUFDQSxrQkFBTUosY0FBYSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQjtBQUMzRCxrQkFBTSxXQUFXLE1BQU1YLGdCQUFlLE9BQU8scUJBQXFCO0FBQ2xFLGtCQUFNLFlBQVksQ0FBQztBQUNuQixnQkFBSSxrQkFBa0IsdUJBQXVCLGVBQWUsU0FBUyxPQUFPLFNBQVMscUJBQXFCLGNBQWMsQ0FBQztBQUN6SCxnQkFBSSxlQUFlO0FBQ2pCLHdCQUFVLEtBQUssU0FBUyxJQUFJLENBQUM7QUFBQSxZQUMvQjtBQUNBLGdCQUFJLGdCQUFnQjtBQUNsQixvQkFBTWdCLFNBQVEsa0JBQWtCLFdBQVcsT0FBTyxHQUFHO0FBQ3JELHdCQUFVLEtBQUssU0FBU0EsT0FBTSxDQUFDLENBQUMsR0FBRyxTQUFTQSxPQUFNLENBQUMsQ0FBQyxDQUFDO0FBQUEsWUFDdkQ7QUFDQSw0QkFBZ0IsQ0FBQyxHQUFHLGVBQWU7QUFBQSxjQUNqQztBQUFBLGNBQ0E7QUFBQSxZQUNGLENBQUM7QUFHRCxnQkFBSSxDQUFDLFVBQVUsTUFBTSxDQUFBQyxVQUFRQSxTQUFRLENBQUMsR0FBRztBQUN2QyxrQkFBSSx1QkFBdUI7QUFDM0Isb0JBQU0sZUFBZSx3QkFBd0IsZUFBZSxTQUFTLE9BQU8sU0FBUyxzQkFBc0IsVUFBVSxLQUFLO0FBQzFILG9CQUFNLGdCQUFnQk4sWUFBVyxTQUFTO0FBQzFDLGtCQUFJLGVBQWU7QUFFakIsdUJBQU87QUFBQSxrQkFDTCxNQUFNO0FBQUEsb0JBQ0osT0FBTztBQUFBLG9CQUNQLFdBQVc7QUFBQSxrQkFDYjtBQUFBLGtCQUNBLE9BQU87QUFBQSxvQkFDTCxXQUFXO0FBQUEsa0JBQ2I7QUFBQSxnQkFDRjtBQUFBLGNBQ0Y7QUFJQSxrQkFBSSxrQkFBa0Isd0JBQXdCLGNBQWMsT0FBTyxDQUFBQyxPQUFLQSxHQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUNFLElBQUcsTUFBTUEsR0FBRSxVQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLE9BQU8sU0FBUyxzQkFBc0I7QUFHMUwsa0JBQUksQ0FBQyxnQkFBZ0I7QUFDbkIsd0JBQVEsa0JBQWtCO0FBQUEsa0JBQ3hCLEtBQUssV0FDSDtBQUNFLHdCQUFJO0FBQ0osMEJBQU1JLGNBQWEsd0JBQXdCLGNBQWMsSUFBSSxDQUFBTixPQUFLLENBQUNBLEdBQUUsV0FBV0EsR0FBRSxVQUFVLE9BQU8sQ0FBQU8sY0FBWUEsWUFBVyxDQUFDLEVBQUUsT0FBTyxDQUFDLEtBQUtBLGNBQWEsTUFBTUEsV0FBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQ0wsSUFBRyxNQUFNQSxHQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxPQUFPLFNBQVMsc0JBQXNCLENBQUM7QUFDdFAsd0JBQUlJLFlBQVc7QUFDYix1Q0FBaUJBO0FBQUEsb0JBQ25CO0FBQ0E7QUFBQSxrQkFDRjtBQUFBLGtCQUNGLEtBQUs7QUFDSCxxQ0FBaUI7QUFDakI7QUFBQSxnQkFDSjtBQUFBLGNBQ0Y7QUFDQSxrQkFBSSxjQUFjLGdCQUFnQjtBQUNoQyx1QkFBTztBQUFBLGtCQUNMLE9BQU87QUFBQSxvQkFDTCxXQUFXO0FBQUEsa0JBQ2I7QUFBQSxnQkFDRjtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBQ0EsbUJBQU8sQ0FBQztBQUFBLFVBQ1Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQTRQQSxNQUFNWixVQUFTLFNBQVVMLFVBQVM7QUFDaEMsWUFBSUEsYUFBWSxRQUFRO0FBQ3RCLFVBQUFBLFdBQVU7QUFBQSxRQUNaO0FBQ0EsZUFBTztBQUFBLFVBQ0wsTUFBTTtBQUFBLFVBQ04sU0FBQUE7QUFBQSxVQUNBLE1BQU0sR0FBRyxPQUFPO0FBQ2Qsa0JBQU07QUFBQSxjQUNKO0FBQUEsY0FDQTtBQUFBLFlBQ0YsSUFBSTtBQUNKLGtCQUFNLGFBQWEsTUFBTSxxQkFBcUIsT0FBT0EsUUFBTztBQUM1RCxtQkFBTztBQUFBLGNBQ0wsR0FBRyxJQUFJLFdBQVc7QUFBQSxjQUNsQixHQUFHLElBQUksV0FBVztBQUFBLGNBQ2xCLE1BQU07QUFBQSxZQUNSO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBT0EsTUFBTSxRQUFRLFNBQVVBLFVBQVM7QUFDL0IsWUFBSUEsYUFBWSxRQUFRO0FBQ3RCLFVBQUFBLFdBQVUsQ0FBQztBQUFBLFFBQ2I7QUFDQSxlQUFPO0FBQUEsVUFDTCxNQUFNO0FBQUEsVUFDTixTQUFBQTtBQUFBLFVBQ0EsTUFBTSxHQUFHLE9BQU87QUFDZCxrQkFBTTtBQUFBLGNBQ0o7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLFlBQ0YsSUFBSTtBQUNKLGtCQUFNO0FBQUEsY0FDSixVQUFVLGdCQUFnQjtBQUFBLGNBQzFCLFdBQVcsaUJBQWlCO0FBQUEsY0FDNUIsVUFBVTtBQUFBLGdCQUNSLElBQUksVUFBUTtBQUNWLHNCQUFJO0FBQUEsb0JBQ0YsR0FBQW1CO0FBQUEsb0JBQ0EsR0FBQUM7QUFBQSxrQkFDRixJQUFJO0FBQ0oseUJBQU87QUFBQSxvQkFDTCxHQUFBRDtBQUFBLG9CQUNBLEdBQUFDO0FBQUEsa0JBQ0Y7QUFBQSxnQkFDRjtBQUFBLGNBQ0Y7QUFBQSxjQUNBLEdBQUc7QUFBQSxZQUNMLElBQUksU0FBU3BCLFVBQVMsS0FBSztBQUMzQixrQkFBTSxTQUFTO0FBQUEsY0FDYjtBQUFBLGNBQ0E7QUFBQSxZQUNGO0FBQ0Esa0JBQU0sV0FBVyxNQUFNRCxnQkFBZSxPQUFPLHFCQUFxQjtBQUNsRSxrQkFBTSxZQUFZLFlBQVksUUFBUSxTQUFTLENBQUM7QUFDaEQsa0JBQU0sV0FBVyxnQkFBZ0IsU0FBUztBQUMxQyxnQkFBSSxnQkFBZ0IsT0FBTyxRQUFRO0FBQ25DLGdCQUFJLGlCQUFpQixPQUFPLFNBQVM7QUFDckMsZ0JBQUksZUFBZTtBQUNqQixvQkFBTSxVQUFVLGFBQWEsTUFBTSxRQUFRO0FBQzNDLG9CQUFNLFVBQVUsYUFBYSxNQUFNLFdBQVc7QUFDOUMsb0JBQU1TLE9BQU0sZ0JBQWdCLFNBQVMsT0FBTztBQUM1QyxvQkFBTUMsT0FBTSxnQkFBZ0IsU0FBUyxPQUFPO0FBQzVDLDhCQUFnQixNQUFNRCxNQUFLLGVBQWVDLElBQUc7QUFBQSxZQUMvQztBQUNBLGdCQUFJLGdCQUFnQjtBQUNsQixvQkFBTSxVQUFVLGNBQWMsTUFBTSxRQUFRO0FBQzVDLG9CQUFNLFVBQVUsY0FBYyxNQUFNLFdBQVc7QUFDL0Msb0JBQU1ELE9BQU0saUJBQWlCLFNBQVMsT0FBTztBQUM3QyxvQkFBTUMsT0FBTSxpQkFBaUIsU0FBUyxPQUFPO0FBQzdDLCtCQUFpQixNQUFNRCxNQUFLLGdCQUFnQkMsSUFBRztBQUFBLFlBQ2pEO0FBQ0Esa0JBQU0sZ0JBQWdCLFFBQVEsR0FBRztBQUFBLGNBQy9CLEdBQUc7QUFBQSxjQUNILENBQUMsUUFBUSxHQUFHO0FBQUEsY0FDWixDQUFDLFNBQVMsR0FBRztBQUFBLFlBQ2YsQ0FBQztBQUNELG1CQUFPO0FBQUEsY0FDTCxHQUFHO0FBQUEsY0FDSCxNQUFNO0FBQUEsZ0JBQ0osR0FBRyxjQUFjLElBQUk7QUFBQSxnQkFDckIsR0FBRyxjQUFjLElBQUk7QUFBQSxjQUN2QjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUE0RUEsTUFBTSxPQUFPLFNBQVVULFVBQVM7QUFDOUIsWUFBSUEsYUFBWSxRQUFRO0FBQ3RCLFVBQUFBLFdBQVUsQ0FBQztBQUFBLFFBQ2I7QUFDQSxlQUFPO0FBQUEsVUFDTCxNQUFNO0FBQUEsVUFDTixTQUFBQTtBQUFBLFVBQ0EsTUFBTSxHQUFHLE9BQU87QUFDZCxrQkFBTTtBQUFBLGNBQ0o7QUFBQSxjQUNBO0FBQUEsY0FDQSxVQUFBQztBQUFBLGNBQ0E7QUFBQSxZQUNGLElBQUk7QUFDSixrQkFBTTtBQUFBLGNBQ0osUUFBUSxNQUFNO0FBQUEsY0FBQztBQUFBLGNBQ2YsR0FBRztBQUFBLFlBQ0wsSUFBSSxTQUFTRCxVQUFTLEtBQUs7QUFDM0Isa0JBQU0sV0FBVyxNQUFNRCxnQkFBZSxPQUFPLHFCQUFxQjtBQUNsRSxrQkFBTSxPQUFPLFFBQVEsU0FBUztBQUM5QixrQkFBTSxZQUFZLGFBQWEsU0FBUztBQUN4QyxrQkFBTSxVQUFVLFlBQVksU0FBUyxNQUFNO0FBQzNDLGtCQUFNO0FBQUEsY0FDSjtBQUFBLGNBQ0E7QUFBQSxZQUNGLElBQUksTUFBTTtBQUNWLGdCQUFJO0FBQ0osZ0JBQUk7QUFDSixnQkFBSSxTQUFTLFNBQVMsU0FBUyxVQUFVO0FBQ3ZDLDJCQUFhO0FBQ2IsMEJBQVksZUFBZ0IsT0FBT0UsVUFBUyxTQUFTLE9BQU8sU0FBU0EsVUFBUyxNQUFNLFNBQVMsUUFBUSxLQUFNLFVBQVUsU0FBUyxTQUFTO0FBQUEsWUFDekksT0FBTztBQUNMLDBCQUFZO0FBQ1osMkJBQWEsY0FBYyxRQUFRLFFBQVE7QUFBQSxZQUM3QztBQUNBLGtCQUFNLDBCQUEwQixTQUFTLFNBQVMsVUFBVTtBQUM1RCxrQkFBTSx5QkFBeUIsUUFBUSxTQUFTLFNBQVM7QUFDekQsa0JBQU0sVUFBVSxDQUFDLE1BQU0sZUFBZTtBQUN0QyxnQkFBSSxrQkFBa0I7QUFDdEIsZ0JBQUksaUJBQWlCO0FBQ3JCLGdCQUFJLFNBQVM7QUFDWCxvQkFBTSx1QkFBdUIsUUFBUSxTQUFTLE9BQU8sU0FBUztBQUM5RCwrQkFBaUIsYUFBYSxVQUFVTyxLQUFJLHdCQUF3QixvQkFBb0IsSUFBSTtBQUFBLFlBQzlGLE9BQU87QUFDTCxvQkFBTSx3QkFBd0IsU0FBUyxTQUFTLE1BQU0sU0FBUztBQUMvRCxnQ0FBa0IsYUFBYSxVQUFVQSxLQUFJLHlCQUF5QixxQkFBcUIsSUFBSTtBQUFBLFlBQ2pHO0FBQ0EsZ0JBQUksV0FBVyxDQUFDLFdBQVc7QUFDekIsb0JBQU0sT0FBT0MsS0FBSSxTQUFTLE1BQU0sQ0FBQztBQUNqQyxvQkFBTSxPQUFPQSxLQUFJLFNBQVMsT0FBTyxDQUFDO0FBQ2xDLG9CQUFNLE9BQU9BLEtBQUksU0FBUyxLQUFLLENBQUM7QUFDaEMsb0JBQU0sT0FBT0EsS0FBSSxTQUFTLFFBQVEsQ0FBQztBQUNuQyxrQkFBSSxTQUFTO0FBQ1gsaUNBQWlCLFFBQVEsS0FBSyxTQUFTLEtBQUssU0FBUyxJQUFJLE9BQU8sT0FBT0EsS0FBSSxTQUFTLE1BQU0sU0FBUyxLQUFLO0FBQUEsY0FDMUcsT0FBTztBQUNMLGtDQUFrQixTQUFTLEtBQUssU0FBUyxLQUFLLFNBQVMsSUFBSSxPQUFPLE9BQU9BLEtBQUksU0FBUyxLQUFLLFNBQVMsTUFBTTtBQUFBLGNBQzVHO0FBQUEsWUFDRjtBQUNBLGtCQUFNLE1BQU07QUFBQSxjQUNWLEdBQUc7QUFBQSxjQUNIO0FBQUEsY0FDQTtBQUFBLFlBQ0YsQ0FBQztBQUNELGtCQUFNLGlCQUFpQixNQUFNUixVQUFTLGNBQWMsU0FBUyxRQUFRO0FBQ3JFLGdCQUFJLFVBQVUsZUFBZSxTQUFTLFdBQVcsZUFBZSxRQUFRO0FBQ3RFLHFCQUFPO0FBQUEsZ0JBQ0wsT0FBTztBQUFBLGtCQUNMLE9BQU87QUFBQSxnQkFDVDtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBQ0EsbUJBQU8sQ0FBQztBQUFBLFVBQ1Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBO0FBQUE7OztBQ2gvQkEsV0FBU29CLGFBQVksTUFBTTtBQUN6QixRQUFJQyxRQUFPLElBQUksR0FBRztBQUNoQixjQUFRLEtBQUssWUFBWSxJQUFJLFlBQVk7QUFBQSxJQUMzQztBQUlBLFdBQU87QUFBQSxFQUNUO0FBQ0EsV0FBU0MsV0FBVSxNQUFNO0FBQ3ZCLFFBQUk7QUFDSixZQUFRLFFBQVEsT0FBTyxVQUFVLHNCQUFzQixLQUFLLGtCQUFrQixPQUFPLFNBQVMsb0JBQW9CLGdCQUFnQjtBQUFBLEVBQ3BJO0FBQ0EsV0FBU0Msb0JBQW1CLE1BQU07QUFDaEMsUUFBSTtBQUNKLFlBQVEsUUFBUUYsUUFBTyxJQUFJLElBQUksS0FBSyxnQkFBZ0IsS0FBSyxhQUFhLE9BQU8sYUFBYSxPQUFPLFNBQVMsS0FBSztBQUFBLEVBQ2pIO0FBQ0EsV0FBU0EsUUFBTyxPQUFPO0FBQ3JCLFdBQU8saUJBQWlCLFFBQVEsaUJBQWlCQyxXQUFVLEtBQUssRUFBRTtBQUFBLEVBQ3BFO0FBQ0EsV0FBU0UsV0FBVSxPQUFPO0FBQ3hCLFdBQU8saUJBQWlCLFdBQVcsaUJBQWlCRixXQUFVLEtBQUssRUFBRTtBQUFBLEVBQ3ZFO0FBQ0EsV0FBU0csZUFBYyxPQUFPO0FBQzVCLFdBQU8saUJBQWlCLGVBQWUsaUJBQWlCSCxXQUFVLEtBQUssRUFBRTtBQUFBLEVBQzNFO0FBQ0EsV0FBU0ksY0FBYSxPQUFPO0FBRTNCLFFBQUksT0FBTyxlQUFlLGFBQWE7QUFDckMsYUFBTztBQUFBLElBQ1Q7QUFDQSxXQUFPLGlCQUFpQixjQUFjLGlCQUFpQkosV0FBVSxLQUFLLEVBQUU7QUFBQSxFQUMxRTtBQUNBLFdBQVMsa0JBQWtCLFNBQVM7QUFDbEMsVUFBTTtBQUFBLE1BQ0o7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUlLLGtCQUFpQixPQUFPO0FBQzVCLFdBQU8sa0NBQWtDLEtBQUssV0FBVyxZQUFZLFNBQVMsS0FBSyxDQUFDLENBQUMsVUFBVSxVQUFVLEVBQUUsU0FBUyxPQUFPO0FBQUEsRUFDN0g7QUFDQSxXQUFTQyxnQkFBZSxTQUFTO0FBQy9CLFdBQU8sQ0FBQyxTQUFTLE1BQU0sSUFBSSxFQUFFLFNBQVNSLGFBQVksT0FBTyxDQUFDO0FBQUEsRUFDNUQ7QUFDQSxXQUFTLGtCQUFrQixTQUFTO0FBQ2xDLFVBQU0sU0FBUyxTQUFTO0FBQ3hCLFVBQU0sTUFBTU8sa0JBQWlCLE9BQU87QUFHcEMsV0FBTyxJQUFJLGNBQWMsVUFBVSxJQUFJLGdCQUFnQixXQUFXLElBQUksZ0JBQWdCLElBQUksa0JBQWtCLFdBQVcsVUFBVSxDQUFDLFdBQVcsSUFBSSxpQkFBaUIsSUFBSSxtQkFBbUIsU0FBUyxVQUFVLENBQUMsV0FBVyxJQUFJLFNBQVMsSUFBSSxXQUFXLFNBQVMsVUFBVSxDQUFDLGFBQWEsZUFBZSxRQUFRLEVBQUUsS0FBSyxZQUFVLElBQUksY0FBYyxJQUFJLFNBQVMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLFVBQVUsVUFBVSxTQUFTLEVBQUUsS0FBSyxZQUFVLElBQUksV0FBVyxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQUEsRUFDbmM7QUFDQSxXQUFTRSxvQkFBbUIsU0FBUztBQUNuQyxRQUFJLGNBQWNDLGVBQWMsT0FBTztBQUN2QyxXQUFPTCxlQUFjLFdBQVcsS0FBSyxDQUFDLHNCQUFzQixXQUFXLEdBQUc7QUFDeEUsVUFBSSxrQkFBa0IsV0FBVyxHQUFHO0FBQ2xDLGVBQU87QUFBQSxNQUNULE9BQU87QUFDTCxzQkFBY0ssZUFBYyxXQUFXO0FBQUEsTUFDekM7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFDQSxXQUFTLFdBQVc7QUFDbEIsUUFBSSxPQUFPLFFBQVEsZUFBZSxDQUFDLElBQUk7QUFBVSxhQUFPO0FBQ3hELFdBQU8sSUFBSSxTQUFTLDJCQUEyQixNQUFNO0FBQUEsRUFDdkQ7QUFDQSxXQUFTLHNCQUFzQixNQUFNO0FBQ25DLFdBQU8sQ0FBQyxRQUFRLFFBQVEsV0FBVyxFQUFFLFNBQVNWLGFBQVksSUFBSSxDQUFDO0FBQUEsRUFDakU7QUFDQSxXQUFTTyxrQkFBaUIsU0FBUztBQUNqQyxXQUFPTCxXQUFVLE9BQU8sRUFBRSxpQkFBaUIsT0FBTztBQUFBLEVBQ3BEO0FBQ0EsV0FBU1MsZUFBYyxTQUFTO0FBQzlCLFFBQUlQLFdBQVUsT0FBTyxHQUFHO0FBQ3RCLGFBQU87QUFBQSxRQUNMLFlBQVksUUFBUTtBQUFBLFFBQ3BCLFdBQVcsUUFBUTtBQUFBLE1BQ3JCO0FBQUEsSUFDRjtBQUNBLFdBQU87QUFBQSxNQUNMLFlBQVksUUFBUTtBQUFBLE1BQ3BCLFdBQVcsUUFBUTtBQUFBLElBQ3JCO0FBQUEsRUFDRjtBQUNBLFdBQVNNLGVBQWMsTUFBTTtBQUMzQixRQUFJVixhQUFZLElBQUksTUFBTSxRQUFRO0FBQ2hDLGFBQU87QUFBQSxJQUNUO0FBQ0EsVUFBTTtBQUFBO0FBQUEsTUFFTixLQUFLO0FBQUEsTUFFTCxLQUFLO0FBQUEsTUFFTE0sY0FBYSxJQUFJLEtBQUssS0FBSztBQUFBLE1BRTNCSCxvQkFBbUIsSUFBSTtBQUFBO0FBQ3ZCLFdBQU9HLGNBQWEsTUFBTSxJQUFJLE9BQU8sT0FBTztBQUFBLEVBQzlDO0FBQ0EsV0FBUywyQkFBMkIsTUFBTTtBQUN4QyxVQUFNLGFBQWFJLGVBQWMsSUFBSTtBQUNyQyxRQUFJLHNCQUFzQixVQUFVLEdBQUc7QUFDckMsYUFBTyxLQUFLLGdCQUFnQixLQUFLLGNBQWMsT0FBTyxLQUFLO0FBQUEsSUFDN0Q7QUFDQSxRQUFJTCxlQUFjLFVBQVUsS0FBSyxrQkFBa0IsVUFBVSxHQUFHO0FBQzlELGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBTywyQkFBMkIsVUFBVTtBQUFBLEVBQzlDO0FBQ0EsV0FBUyxxQkFBcUIsTUFBTSxNQUFNLGlCQUFpQjtBQUN6RCxRQUFJO0FBQ0osUUFBSSxTQUFTLFFBQVE7QUFDbkIsYUFBTyxDQUFDO0FBQUEsSUFDVjtBQUNBLFFBQUksb0JBQW9CLFFBQVE7QUFDOUIsd0JBQWtCO0FBQUEsSUFDcEI7QUFDQSxVQUFNLHFCQUFxQiwyQkFBMkIsSUFBSTtBQUMxRCxVQUFNLFNBQVMseUJBQXlCLHVCQUF1QixLQUFLLGtCQUFrQixPQUFPLFNBQVMscUJBQXFCO0FBQzNILFVBQU0sTUFBTUgsV0FBVSxrQkFBa0I7QUFDeEMsUUFBSSxRQUFRO0FBQ1YsYUFBTyxLQUFLLE9BQU8sS0FBSyxJQUFJLGtCQUFrQixDQUFDLEdBQUcsa0JBQWtCLGtCQUFrQixJQUFJLHFCQUFxQixDQUFDLEdBQUcsSUFBSSxnQkFBZ0Isa0JBQWtCLHFCQUFxQixJQUFJLFlBQVksSUFBSSxDQUFDLENBQUM7QUFBQSxJQUN0TTtBQUNBLFdBQU8sS0FBSyxPQUFPLG9CQUFvQixxQkFBcUIsb0JBQW9CLENBQUMsR0FBRyxlQUFlLENBQUM7QUFBQSxFQUN0RztBQTdIQTtBQUFBO0FBQUE7QUFBQTs7O0FDTUEsV0FBUyxpQkFBaUIsU0FBUztBQUNqQyxVQUFNLE1BQU1VLGtCQUFpQixPQUFPO0FBR3BDLFFBQUksUUFBUSxXQUFXLElBQUksS0FBSyxLQUFLO0FBQ3JDLFFBQUksU0FBUyxXQUFXLElBQUksTUFBTSxLQUFLO0FBQ3ZDLFVBQU0sWUFBWUMsZUFBYyxPQUFPO0FBQ3ZDLFVBQU0sY0FBYyxZQUFZLFFBQVEsY0FBYztBQUN0RCxVQUFNLGVBQWUsWUFBWSxRQUFRLGVBQWU7QUFDeEQsVUFBTSxpQkFBaUJDLE9BQU0sS0FBSyxNQUFNLGVBQWVBLE9BQU0sTUFBTSxNQUFNO0FBQ3pFLFFBQUksZ0JBQWdCO0FBQ2xCLGNBQVE7QUFDUixlQUFTO0FBQUEsSUFDWDtBQUNBLFdBQU87QUFBQSxNQUNMO0FBQUEsTUFDQTtBQUFBLE1BQ0EsR0FBRztBQUFBLElBQ0w7QUFBQSxFQUNGO0FBRUEsV0FBUyxjQUFjLFNBQVM7QUFDOUIsV0FBTyxDQUFDQyxXQUFVLE9BQU8sSUFBSSxRQUFRLGlCQUFpQjtBQUFBLEVBQ3hEO0FBRUEsV0FBUyxTQUFTLFNBQVM7QUFDekIsVUFBTSxhQUFhLGNBQWMsT0FBTztBQUN4QyxRQUFJLENBQUNGLGVBQWMsVUFBVSxHQUFHO0FBQzlCLGFBQU8sYUFBYSxDQUFDO0FBQUEsSUFDdkI7QUFDQSxVQUFNLE9BQU8sV0FBVyxzQkFBc0I7QUFDOUMsVUFBTTtBQUFBLE1BQ0o7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0YsSUFBSSxpQkFBaUIsVUFBVTtBQUMvQixRQUFJLEtBQUssSUFBSUMsT0FBTSxLQUFLLEtBQUssSUFBSSxLQUFLLFNBQVM7QUFDL0MsUUFBSSxLQUFLLElBQUlBLE9BQU0sS0FBSyxNQUFNLElBQUksS0FBSyxVQUFVO0FBSWpELFFBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxTQUFTLENBQUMsR0FBRztBQUM3QixVQUFJO0FBQUEsSUFDTjtBQUNBLFFBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxTQUFTLENBQUMsR0FBRztBQUM3QixVQUFJO0FBQUEsSUFDTjtBQUNBLFdBQU87QUFBQSxNQUNMO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBR0EsV0FBUyxpQkFBaUIsU0FBUztBQUNqQyxVQUFNLE1BQU1FLFdBQVUsT0FBTztBQUM3QixRQUFJLENBQUMsU0FBUyxLQUFLLENBQUMsSUFBSSxnQkFBZ0I7QUFDdEMsYUFBTztBQUFBLElBQ1Q7QUFDQSxXQUFPO0FBQUEsTUFDTCxHQUFHLElBQUksZUFBZTtBQUFBLE1BQ3RCLEdBQUcsSUFBSSxlQUFlO0FBQUEsSUFDeEI7QUFBQSxFQUNGO0FBQ0EsV0FBUyx1QkFBdUIsU0FBUyxTQUFTLHNCQUFzQjtBQUN0RSxRQUFJLFlBQVksUUFBUTtBQUN0QixnQkFBVTtBQUFBLElBQ1o7QUFDQSxRQUFJLENBQUMsd0JBQXdCLFdBQVcseUJBQXlCQSxXQUFVLE9BQU8sR0FBRztBQUNuRixhQUFPO0FBQUEsSUFDVDtBQUNBLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBU0MsdUJBQXNCLFNBQVMsY0FBYyxpQkFBaUIsY0FBYztBQUNuRixRQUFJLGlCQUFpQixRQUFRO0FBQzNCLHFCQUFlO0FBQUEsSUFDakI7QUFDQSxRQUFJLG9CQUFvQixRQUFRO0FBQzlCLHdCQUFrQjtBQUFBLElBQ3BCO0FBQ0EsVUFBTSxhQUFhLFFBQVEsc0JBQXNCO0FBQ2pELFVBQU0sYUFBYSxjQUFjLE9BQU87QUFDeEMsUUFBSSxRQUFRLGFBQWEsQ0FBQztBQUMxQixRQUFJLGNBQWM7QUFDaEIsVUFBSSxjQUFjO0FBQ2hCLFlBQUlGLFdBQVUsWUFBWSxHQUFHO0FBQzNCLGtCQUFRLFNBQVMsWUFBWTtBQUFBLFFBQy9CO0FBQUEsTUFDRixPQUFPO0FBQ0wsZ0JBQVEsU0FBUyxPQUFPO0FBQUEsTUFDMUI7QUFBQSxJQUNGO0FBQ0EsVUFBTSxnQkFBZ0IsdUJBQXVCLFlBQVksaUJBQWlCLFlBQVksSUFBSSxpQkFBaUIsVUFBVSxJQUFJLGFBQWEsQ0FBQztBQUN2SSxRQUFJLEtBQUssV0FBVyxPQUFPLGNBQWMsS0FBSyxNQUFNO0FBQ3BELFFBQUksS0FBSyxXQUFXLE1BQU0sY0FBYyxLQUFLLE1BQU07QUFDbkQsUUFBSSxRQUFRLFdBQVcsUUFBUSxNQUFNO0FBQ3JDLFFBQUksU0FBUyxXQUFXLFNBQVMsTUFBTTtBQUN2QyxRQUFJLFlBQVk7QUFDZCxZQUFNLE1BQU1DLFdBQVUsVUFBVTtBQUNoQyxZQUFNLFlBQVksZ0JBQWdCRCxXQUFVLFlBQVksSUFBSUMsV0FBVSxZQUFZLElBQUk7QUFDdEYsVUFBSSxnQkFBZ0IsSUFBSTtBQUN4QixhQUFPLGlCQUFpQixnQkFBZ0IsY0FBYyxLQUFLO0FBQ3pELGNBQU0sY0FBYyxTQUFTLGFBQWE7QUFDMUMsY0FBTSxhQUFhLGNBQWMsc0JBQXNCO0FBQ3ZELGNBQU0sTUFBTUosa0JBQWlCLGFBQWE7QUFDMUMsY0FBTU0sUUFBTyxXQUFXLFFBQVEsY0FBYyxhQUFhLFdBQVcsSUFBSSxXQUFXLEtBQUssWUFBWTtBQUN0RyxjQUFNQyxPQUFNLFdBQVcsT0FBTyxjQUFjLFlBQVksV0FBVyxJQUFJLFVBQVUsS0FBSyxZQUFZO0FBQ2xHLGFBQUssWUFBWTtBQUNqQixhQUFLLFlBQVk7QUFDakIsaUJBQVMsWUFBWTtBQUNyQixrQkFBVSxZQUFZO0FBQ3RCLGFBQUtEO0FBQ0wsYUFBS0M7QUFDTCx3QkFBZ0JILFdBQVUsYUFBYSxFQUFFO0FBQUEsTUFDM0M7QUFBQSxJQUNGO0FBQ0EsV0FBT0ksa0JBQWlCO0FBQUEsTUFDdEI7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNIO0FBRUEsV0FBUyxzREFBc0QsTUFBTTtBQUNuRSxRQUFJO0FBQUEsTUFDRjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixJQUFJO0FBQ0osVUFBTSwwQkFBMEJQLGVBQWMsWUFBWTtBQUMxRCxVQUFNLGtCQUFrQlEsb0JBQW1CLFlBQVk7QUFDdkQsUUFBSSxpQkFBaUIsaUJBQWlCO0FBQ3BDLGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSSxTQUFTO0FBQUEsTUFDWCxZQUFZO0FBQUEsTUFDWixXQUFXO0FBQUEsSUFDYjtBQUNBLFFBQUksUUFBUSxhQUFhLENBQUM7QUFDMUIsVUFBTSxVQUFVLGFBQWEsQ0FBQztBQUM5QixRQUFJLDJCQUEyQixDQUFDLDJCQUEyQixhQUFhLFNBQVM7QUFDL0UsVUFBSUMsYUFBWSxZQUFZLE1BQU0sVUFBVSxrQkFBa0IsZUFBZSxHQUFHO0FBQzlFLGlCQUFTQyxlQUFjLFlBQVk7QUFBQSxNQUNyQztBQUNBLFVBQUlWLGVBQWMsWUFBWSxHQUFHO0FBQy9CLGNBQU0sYUFBYUksdUJBQXNCLFlBQVk7QUFDckQsZ0JBQVEsU0FBUyxZQUFZO0FBQzdCLGdCQUFRLElBQUksV0FBVyxJQUFJLGFBQWE7QUFDeEMsZ0JBQVEsSUFBSSxXQUFXLElBQUksYUFBYTtBQUFBLE1BQzFDO0FBQUEsSUFDRjtBQUNBLFdBQU87QUFBQSxNQUNMLE9BQU8sS0FBSyxRQUFRLE1BQU07QUFBQSxNQUMxQixRQUFRLEtBQUssU0FBUyxNQUFNO0FBQUEsTUFDNUIsR0FBRyxLQUFLLElBQUksTUFBTSxJQUFJLE9BQU8sYUFBYSxNQUFNLElBQUksUUFBUTtBQUFBLE1BQzVELEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBSSxPQUFPLFlBQVksTUFBTSxJQUFJLFFBQVE7QUFBQSxJQUM3RDtBQUFBLEVBQ0Y7QUFFQSxXQUFTLGVBQWUsU0FBUztBQUMvQixXQUFPLE1BQU0sS0FBSyxRQUFRLGVBQWUsQ0FBQztBQUFBLEVBQzVDO0FBRUEsV0FBU08scUJBQW9CLFNBQVM7QUFHcEMsV0FBT1AsdUJBQXNCSSxvQkFBbUIsT0FBTyxDQUFDLEVBQUUsT0FBT0UsZUFBYyxPQUFPLEVBQUU7QUFBQSxFQUMxRjtBQUlBLFdBQVNFLGlCQUFnQixTQUFTO0FBQ2hDLFVBQU0sT0FBT0osb0JBQW1CLE9BQU87QUFDdkMsVUFBTSxTQUFTRSxlQUFjLE9BQU87QUFDcEMsVUFBTSxPQUFPLFFBQVEsY0FBYztBQUNuQyxVQUFNLFFBQVFHLEtBQUksS0FBSyxhQUFhLEtBQUssYUFBYSxLQUFLLGFBQWEsS0FBSyxXQUFXO0FBQ3hGLFVBQU0sU0FBU0EsS0FBSSxLQUFLLGNBQWMsS0FBSyxjQUFjLEtBQUssY0FBYyxLQUFLLFlBQVk7QUFDN0YsUUFBSSxJQUFJLENBQUMsT0FBTyxhQUFhRixxQkFBb0IsT0FBTztBQUN4RCxVQUFNLElBQUksQ0FBQyxPQUFPO0FBQ2xCLFFBQUlaLGtCQUFpQixJQUFJLEVBQUUsY0FBYyxPQUFPO0FBQzlDLFdBQUtjLEtBQUksS0FBSyxhQUFhLEtBQUssV0FBVyxJQUFJO0FBQUEsSUFDakQ7QUFDQSxXQUFPO0FBQUEsTUFDTDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsV0FBU0MsaUJBQWdCLFNBQVMsVUFBVTtBQUMxQyxVQUFNLE1BQU1YLFdBQVUsT0FBTztBQUM3QixVQUFNLE9BQU9LLG9CQUFtQixPQUFPO0FBQ3ZDLFVBQU0saUJBQWlCLElBQUk7QUFDM0IsUUFBSSxRQUFRLEtBQUs7QUFDakIsUUFBSSxTQUFTLEtBQUs7QUFDbEIsUUFBSSxJQUFJO0FBQ1IsUUFBSSxJQUFJO0FBQ1IsUUFBSSxnQkFBZ0I7QUFDbEIsY0FBUSxlQUFlO0FBQ3ZCLGVBQVMsZUFBZTtBQUN4QixZQUFNLHNCQUFzQixTQUFTO0FBQ3JDLFVBQUksQ0FBQyx1QkFBdUIsdUJBQXVCLGFBQWEsU0FBUztBQUN2RSxZQUFJLGVBQWU7QUFDbkIsWUFBSSxlQUFlO0FBQUEsTUFDckI7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBLE1BQ0w7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUdBLFdBQVNPLDRCQUEyQixTQUFTLFVBQVU7QUFDckQsVUFBTSxhQUFhWCx1QkFBc0IsU0FBUyxNQUFNLGFBQWEsT0FBTztBQUM1RSxVQUFNRSxPQUFNLFdBQVcsTUFBTSxRQUFRO0FBQ3JDLFVBQU1ELFFBQU8sV0FBVyxPQUFPLFFBQVE7QUFDdkMsVUFBTSxRQUFRTCxlQUFjLE9BQU8sSUFBSSxTQUFTLE9BQU8sSUFBSSxhQUFhLENBQUM7QUFDekUsVUFBTSxRQUFRLFFBQVEsY0FBYyxNQUFNO0FBQzFDLFVBQU0sU0FBUyxRQUFRLGVBQWUsTUFBTTtBQUM1QyxVQUFNLElBQUlLLFFBQU8sTUFBTTtBQUN2QixVQUFNLElBQUlDLE9BQU0sTUFBTTtBQUN0QixXQUFPO0FBQUEsTUFDTDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsV0FBUyxrQ0FBa0MsU0FBUyxrQkFBa0IsVUFBVTtBQUM5RSxRQUFJO0FBQ0osUUFBSSxxQkFBcUIsWUFBWTtBQUNuQyxhQUFPUSxpQkFBZ0IsU0FBUyxRQUFRO0FBQUEsSUFDMUMsV0FBVyxxQkFBcUIsWUFBWTtBQUMxQyxhQUFPRixpQkFBZ0JKLG9CQUFtQixPQUFPLENBQUM7QUFBQSxJQUNwRCxXQUFXTixXQUFVLGdCQUFnQixHQUFHO0FBQ3RDLGFBQU9hLDRCQUEyQixrQkFBa0IsUUFBUTtBQUFBLElBQzlELE9BQU87QUFDTCxZQUFNLGdCQUFnQixpQkFBaUIsT0FBTztBQUM5QyxhQUFPO0FBQUEsUUFDTCxHQUFHO0FBQUEsUUFDSCxHQUFHLGlCQUFpQixJQUFJLGNBQWM7QUFBQSxRQUN0QyxHQUFHLGlCQUFpQixJQUFJLGNBQWM7QUFBQSxNQUN4QztBQUFBLElBQ0Y7QUFDQSxXQUFPUixrQkFBaUIsSUFBSTtBQUFBLEVBQzlCO0FBQ0EsV0FBUyx5QkFBeUIsU0FBUyxVQUFVO0FBQ25ELFVBQU0sYUFBYVMsZUFBYyxPQUFPO0FBQ3hDLFFBQUksZUFBZSxZQUFZLENBQUNkLFdBQVUsVUFBVSxLQUFLLHNCQUFzQixVQUFVLEdBQUc7QUFDMUYsYUFBTztBQUFBLElBQ1Q7QUFDQSxXQUFPSCxrQkFBaUIsVUFBVSxFQUFFLGFBQWEsV0FBVyx5QkFBeUIsWUFBWSxRQUFRO0FBQUEsRUFDM0c7QUFLQSxXQUFTLDRCQUE0QixTQUFTLE9BQU87QUFDbkQsVUFBTSxlQUFlLE1BQU0sSUFBSSxPQUFPO0FBQ3RDLFFBQUksY0FBYztBQUNoQixhQUFPO0FBQUEsSUFDVDtBQUNBLFFBQUksU0FBUyxxQkFBcUIsU0FBUyxDQUFDLEdBQUcsS0FBSyxFQUFFLE9BQU8sUUFBTUcsV0FBVSxFQUFFLEtBQUtPLGFBQVksRUFBRSxNQUFNLE1BQU07QUFDOUcsUUFBSSxzQ0FBc0M7QUFDMUMsVUFBTSxpQkFBaUJWLGtCQUFpQixPQUFPLEVBQUUsYUFBYTtBQUM5RCxRQUFJLGNBQWMsaUJBQWlCaUIsZUFBYyxPQUFPLElBQUk7QUFHNUQsV0FBT2QsV0FBVSxXQUFXLEtBQUssQ0FBQyxzQkFBc0IsV0FBVyxHQUFHO0FBQ3BFLFlBQU0sZ0JBQWdCSCxrQkFBaUIsV0FBVztBQUNsRCxZQUFNLDBCQUEwQixrQkFBa0IsV0FBVztBQUM3RCxVQUFJLENBQUMsMkJBQTJCLGNBQWMsYUFBYSxTQUFTO0FBQ2xFLDhDQUFzQztBQUFBLE1BQ3hDO0FBQ0EsWUFBTSx3QkFBd0IsaUJBQWlCLENBQUMsMkJBQTJCLENBQUMsc0NBQXNDLENBQUMsMkJBQTJCLGNBQWMsYUFBYSxZQUFZLENBQUMsQ0FBQyx1Q0FBdUMsQ0FBQyxZQUFZLE9BQU8sRUFBRSxTQUFTLG9DQUFvQyxRQUFRLEtBQUssa0JBQWtCLFdBQVcsS0FBSyxDQUFDLDJCQUEyQix5QkFBeUIsU0FBUyxXQUFXO0FBQ3paLFVBQUksdUJBQXVCO0FBRXpCLGlCQUFTLE9BQU8sT0FBTyxjQUFZLGFBQWEsV0FBVztBQUFBLE1BQzdELE9BQU87QUFFTCw4Q0FBc0M7QUFBQSxNQUN4QztBQUNBLG9CQUFjaUIsZUFBYyxXQUFXO0FBQUEsSUFDekM7QUFDQSxVQUFNLElBQUksU0FBUyxNQUFNO0FBQ3pCLFdBQU87QUFBQSxFQUNUO0FBSUEsV0FBU0MsaUJBQWdCLE1BQU07QUFDN0IsUUFBSTtBQUFBLE1BQ0Y7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUk7QUFDSixVQUFNLDJCQUEyQixhQUFhLHNCQUFzQiw0QkFBNEIsU0FBUyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsT0FBTyxRQUFRO0FBQ3RJLFVBQU0sb0JBQW9CLENBQUMsR0FBRywwQkFBMEIsWUFBWTtBQUNwRSxVQUFNLHdCQUF3QixrQkFBa0IsQ0FBQztBQUNqRCxVQUFNLGVBQWUsa0JBQWtCLE9BQU8sQ0FBQyxTQUFTLHFCQUFxQjtBQUMzRSxZQUFNLE9BQU8sa0NBQWtDLFNBQVMsa0JBQWtCLFFBQVE7QUFDbEYsY0FBUSxNQUFNSixLQUFJLEtBQUssS0FBSyxRQUFRLEdBQUc7QUFDdkMsY0FBUSxRQUFRSyxLQUFJLEtBQUssT0FBTyxRQUFRLEtBQUs7QUFDN0MsY0FBUSxTQUFTQSxLQUFJLEtBQUssUUFBUSxRQUFRLE1BQU07QUFDaEQsY0FBUSxPQUFPTCxLQUFJLEtBQUssTUFBTSxRQUFRLElBQUk7QUFDMUMsYUFBTztBQUFBLElBQ1QsR0FBRyxrQ0FBa0MsU0FBUyx1QkFBdUIsUUFBUSxDQUFDO0FBQzlFLFdBQU87QUFBQSxNQUNMLE9BQU8sYUFBYSxRQUFRLGFBQWE7QUFBQSxNQUN6QyxRQUFRLGFBQWEsU0FBUyxhQUFhO0FBQUEsTUFDM0MsR0FBRyxhQUFhO0FBQUEsTUFDaEIsR0FBRyxhQUFhO0FBQUEsSUFDbEI7QUFBQSxFQUNGO0FBRUEsV0FBUyxjQUFjLFNBQVM7QUFDOUIsV0FBTyxpQkFBaUIsT0FBTztBQUFBLEVBQ2pDO0FBRUEsV0FBUyw4QkFBOEIsU0FBUyxjQUFjLFVBQVU7QUFDdEUsVUFBTSwwQkFBMEJiLGVBQWMsWUFBWTtBQUMxRCxVQUFNLGtCQUFrQlEsb0JBQW1CLFlBQVk7QUFDdkQsVUFBTSxVQUFVLGFBQWE7QUFDN0IsVUFBTSxPQUFPSix1QkFBc0IsU0FBUyxNQUFNLFNBQVMsWUFBWTtBQUN2RSxRQUFJLFNBQVM7QUFBQSxNQUNYLFlBQVk7QUFBQSxNQUNaLFdBQVc7QUFBQSxJQUNiO0FBQ0EsVUFBTSxVQUFVLGFBQWEsQ0FBQztBQUM5QixRQUFJLDJCQUEyQixDQUFDLDJCQUEyQixDQUFDLFNBQVM7QUFDbkUsVUFBSUssYUFBWSxZQUFZLE1BQU0sVUFBVSxrQkFBa0IsZUFBZSxHQUFHO0FBQzlFLGlCQUFTQyxlQUFjLFlBQVk7QUFBQSxNQUNyQztBQUNBLFVBQUkseUJBQXlCO0FBQzNCLGNBQU0sYUFBYU4sdUJBQXNCLGNBQWMsTUFBTSxTQUFTLFlBQVk7QUFDbEYsZ0JBQVEsSUFBSSxXQUFXLElBQUksYUFBYTtBQUN4QyxnQkFBUSxJQUFJLFdBQVcsSUFBSSxhQUFhO0FBQUEsTUFDMUMsV0FBVyxpQkFBaUI7QUFDMUIsZ0JBQVEsSUFBSU8scUJBQW9CLGVBQWU7QUFBQSxNQUNqRDtBQUFBLElBQ0Y7QUFDQSxXQUFPO0FBQUEsTUFDTCxHQUFHLEtBQUssT0FBTyxPQUFPLGFBQWEsUUFBUTtBQUFBLE1BQzNDLEdBQUcsS0FBSyxNQUFNLE9BQU8sWUFBWSxRQUFRO0FBQUEsTUFDekMsT0FBTyxLQUFLO0FBQUEsTUFDWixRQUFRLEtBQUs7QUFBQSxJQUNmO0FBQUEsRUFDRjtBQUVBLFdBQVNRLHFCQUFvQixTQUFTLFVBQVU7QUFDOUMsUUFBSSxDQUFDbkIsZUFBYyxPQUFPLEtBQUtELGtCQUFpQixPQUFPLEVBQUUsYUFBYSxTQUFTO0FBQzdFLGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSSxVQUFVO0FBQ1osYUFBTyxTQUFTLE9BQU87QUFBQSxJQUN6QjtBQUNBLFdBQU8sUUFBUTtBQUFBLEVBQ2pCO0FBSUEsV0FBU3FCLGlCQUFnQixTQUFTLFVBQVU7QUFDMUMsVUFBTUMsVUFBU2xCLFdBQVUsT0FBTztBQUNoQyxRQUFJLENBQUNILGVBQWMsT0FBTyxHQUFHO0FBQzNCLGFBQU9xQjtBQUFBLElBQ1Q7QUFDQSxRQUFJLGVBQWVGLHFCQUFvQixTQUFTLFFBQVE7QUFDeEQsV0FBTyxnQkFBZ0JHLGdCQUFlLFlBQVksS0FBS3ZCLGtCQUFpQixZQUFZLEVBQUUsYUFBYSxVQUFVO0FBQzNHLHFCQUFlb0IscUJBQW9CLGNBQWMsUUFBUTtBQUFBLElBQzNEO0FBQ0EsUUFBSSxpQkFBaUJWLGFBQVksWUFBWSxNQUFNLFVBQVVBLGFBQVksWUFBWSxNQUFNLFVBQVVWLGtCQUFpQixZQUFZLEVBQUUsYUFBYSxZQUFZLENBQUMsa0JBQWtCLFlBQVksSUFBSTtBQUM5TCxhQUFPc0I7QUFBQSxJQUNUO0FBQ0EsV0FBTyxnQkFBZ0JFLG9CQUFtQixPQUFPLEtBQUtGO0FBQUEsRUFDeEQ7QUFvQkEsV0FBUyxNQUFNLFNBQVM7QUFDdEIsV0FBT3RCLGtCQUFpQixPQUFPLEVBQUUsY0FBYztBQUFBLEVBQ2pEO0FBZ0JBLFdBQVMsWUFBWSxTQUFTLFFBQVE7QUFDcEMsUUFBSSxLQUFLO0FBQ1QsUUFBSTtBQUNKLFVBQU0sT0FBT1Msb0JBQW1CLE9BQU87QUFDdkMsYUFBUyxVQUFVO0FBQ2pCLG1CQUFhLFNBQVM7QUFDdEIsWUFBTSxHQUFHLFdBQVc7QUFDcEIsV0FBSztBQUFBLElBQ1A7QUFDQSxhQUFTLFFBQVEsTUFBTSxXQUFXO0FBQ2hDLFVBQUksU0FBUyxRQUFRO0FBQ25CLGVBQU87QUFBQSxNQUNUO0FBQ0EsVUFBSSxjQUFjLFFBQVE7QUFDeEIsb0JBQVk7QUFBQSxNQUNkO0FBQ0EsY0FBUTtBQUNSLFlBQU07QUFBQSxRQUNKLE1BQUFIO0FBQUEsUUFDQSxLQUFBQztBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRixJQUFJLFFBQVEsc0JBQXNCO0FBQ2xDLFVBQUksQ0FBQyxNQUFNO0FBQ1QsZUFBTztBQUFBLE1BQ1Q7QUFDQSxVQUFJLENBQUMsU0FBUyxDQUFDLFFBQVE7QUFDckI7QUFBQSxNQUNGO0FBQ0EsWUFBTSxXQUFXLE1BQU1BLElBQUc7QUFDMUIsWUFBTSxhQUFhLE1BQU0sS0FBSyxlQUFlRCxRQUFPLE1BQU07QUFDMUQsWUFBTSxjQUFjLE1BQU0sS0FBSyxnQkFBZ0JDLE9BQU0sT0FBTztBQUM1RCxZQUFNLFlBQVksTUFBTUQsS0FBSTtBQUM1QixZQUFNLGFBQWEsQ0FBQyxXQUFXLFFBQVEsQ0FBQyxhQUFhLFFBQVEsQ0FBQyxjQUFjLFFBQVEsQ0FBQyxZQUFZO0FBQ2pHLFlBQU1tQixXQUFVO0FBQUEsUUFDZDtBQUFBLFFBQ0EsV0FBV1gsS0FBSSxHQUFHSyxLQUFJLEdBQUcsU0FBUyxDQUFDLEtBQUs7QUFBQSxNQUMxQztBQUNBLFVBQUksZ0JBQWdCO0FBQ3BCLGVBQVMsY0FBYyxTQUFTO0FBQzlCLGNBQU0sUUFBUSxRQUFRLENBQUMsRUFBRTtBQUN6QixZQUFJLFVBQVUsV0FBVztBQUN2QixjQUFJLENBQUMsZUFBZTtBQUNsQixtQkFBTyxRQUFRO0FBQUEsVUFDakI7QUFDQSxjQUFJLENBQUMsT0FBTztBQUNWLHdCQUFZLFdBQVcsTUFBTTtBQUMzQixzQkFBUSxPQUFPLElBQUk7QUFBQSxZQUNyQixHQUFHLEdBQUc7QUFBQSxVQUNSLE9BQU87QUFDTCxvQkFBUSxPQUFPLEtBQUs7QUFBQSxVQUN0QjtBQUFBLFFBQ0Y7QUFDQSx3QkFBZ0I7QUFBQSxNQUNsQjtBQUlBLFVBQUk7QUFDRixhQUFLLElBQUkscUJBQXFCLGVBQWU7QUFBQSxVQUMzQyxHQUFHTTtBQUFBO0FBQUEsVUFFSCxNQUFNLEtBQUs7QUFBQSxRQUNiLENBQUM7QUFBQSxNQUNILFNBQVMsR0FBRztBQUNWLGFBQUssSUFBSSxxQkFBcUIsZUFBZUEsUUFBTztBQUFBLE1BQ3REO0FBQ0EsU0FBRyxRQUFRLE9BQU87QUFBQSxJQUNwQjtBQUNBLFlBQVEsSUFBSTtBQUNaLFdBQU87QUFBQSxFQUNUO0FBVUEsV0FBUyxXQUFXQyxZQUFXLFVBQVUsUUFBUUQsVUFBUztBQUN4RCxRQUFJQSxhQUFZLFFBQVE7QUFDdEIsTUFBQUEsV0FBVSxDQUFDO0FBQUEsSUFDYjtBQUNBLFVBQU07QUFBQSxNQUNKLGlCQUFpQjtBQUFBLE1BQ2pCLGlCQUFpQjtBQUFBLE1BQ2pCLGdCQUFnQixPQUFPLG1CQUFtQjtBQUFBLE1BQzFDLGNBQWMsT0FBTyx5QkFBeUI7QUFBQSxNQUM5QyxpQkFBaUI7QUFBQSxJQUNuQixJQUFJQTtBQUNKLFVBQU0sY0FBYyxjQUFjQyxVQUFTO0FBQzNDLFVBQU0sWUFBWSxrQkFBa0IsaUJBQWlCLENBQUMsR0FBSSxjQUFjLHFCQUFxQixXQUFXLElBQUksQ0FBQyxHQUFJLEdBQUcscUJBQXFCLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFDdkosY0FBVSxRQUFRLGNBQVk7QUFDNUIsd0JBQWtCLFNBQVMsaUJBQWlCLFVBQVUsUUFBUTtBQUFBLFFBQzVELFNBQVM7QUFBQSxNQUNYLENBQUM7QUFDRCx3QkFBa0IsU0FBUyxpQkFBaUIsVUFBVSxNQUFNO0FBQUEsSUFDOUQsQ0FBQztBQUNELFVBQU0sWUFBWSxlQUFlLGNBQWMsWUFBWSxhQUFhLE1BQU0sSUFBSTtBQUNsRixRQUFJLGlCQUFpQjtBQUNyQixRQUFJLGlCQUFpQjtBQUNyQixRQUFJLGVBQWU7QUFDakIsdUJBQWlCLElBQUksZUFBZSxVQUFRO0FBQzFDLFlBQUksQ0FBQyxVQUFVLElBQUk7QUFDbkIsWUFBSSxjQUFjLFdBQVcsV0FBVyxlQUFlLGdCQUFnQjtBQUdyRSx5QkFBZSxVQUFVLFFBQVE7QUFDakMsK0JBQXFCLGNBQWM7QUFDbkMsMkJBQWlCLHNCQUFzQixNQUFNO0FBQzNDLDhCQUFrQixlQUFlLFFBQVEsUUFBUTtBQUFBLFVBQ25ELENBQUM7QUFBQSxRQUNIO0FBQ0EsZUFBTztBQUFBLE1BQ1QsQ0FBQztBQUNELFVBQUksZUFBZSxDQUFDLGdCQUFnQjtBQUNsQyx1QkFBZSxRQUFRLFdBQVc7QUFBQSxNQUNwQztBQUNBLHFCQUFlLFFBQVEsUUFBUTtBQUFBLElBQ2pDO0FBQ0EsUUFBSTtBQUNKLFFBQUksY0FBYyxpQkFBaUJyQix1QkFBc0JxQixVQUFTLElBQUk7QUFDdEUsUUFBSSxnQkFBZ0I7QUFDbEIsZ0JBQVU7QUFBQSxJQUNaO0FBQ0EsYUFBUyxZQUFZO0FBQ25CLFlBQU0sY0FBY3JCLHVCQUFzQnFCLFVBQVM7QUFDbkQsVUFBSSxnQkFBZ0IsWUFBWSxNQUFNLFlBQVksS0FBSyxZQUFZLE1BQU0sWUFBWSxLQUFLLFlBQVksVUFBVSxZQUFZLFNBQVMsWUFBWSxXQUFXLFlBQVksU0FBUztBQUMvSyxlQUFPO0FBQUEsTUFDVDtBQUNBLG9CQUFjO0FBQ2QsZ0JBQVUsc0JBQXNCLFNBQVM7QUFBQSxJQUMzQztBQUNBLFdBQU87QUFDUCxXQUFPLE1BQU07QUFDWCxnQkFBVSxRQUFRLGNBQVk7QUFDNUIsMEJBQWtCLFNBQVMsb0JBQW9CLFVBQVUsTUFBTTtBQUMvRCwwQkFBa0IsU0FBUyxvQkFBb0IsVUFBVSxNQUFNO0FBQUEsTUFDakUsQ0FBQztBQUNELG1CQUFhLFVBQVU7QUFDdkIsd0JBQWtCLGVBQWUsV0FBVztBQUM1Qyx1QkFBaUI7QUFDakIsVUFBSSxnQkFBZ0I7QUFDbEIsNkJBQXFCLE9BQU87QUFBQSxNQUM5QjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBN2pCQSxNQTJETSxXQTBVQSxpQkFzQkEsVUF5S0FDO0FBcGtCTjtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUF3REEsTUFBTSxZQUF5Qiw2QkFBYSxDQUFDO0FBMFU3QyxNQUFNLGtCQUFrQixlQUFnQixNQUFNO0FBQzVDLFlBQUk7QUFBQSxVQUNGLFdBQUFEO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNGLElBQUk7QUFDSixjQUFNLG9CQUFvQixLQUFLLG1CQUFtQkw7QUFDbEQsY0FBTSxrQkFBa0IsS0FBSztBQUM3QixlQUFPO0FBQUEsVUFDTCxXQUFXLDhCQUE4QkssWUFBVyxNQUFNLGtCQUFrQixRQUFRLEdBQUcsUUFBUTtBQUFBLFVBQy9GLFVBQVU7QUFBQSxZQUNSLEdBQUc7QUFBQSxZQUNILEdBQUc7QUFBQSxZQUNILEdBQUksTUFBTSxnQkFBZ0IsUUFBUTtBQUFBLFVBQ3BDO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFNQSxNQUFNLFdBQVc7QUFBQSxRQUNmO0FBQUEsUUFDQSxvQkFBQWpCO0FBQUEsUUFDQSxpQkFBQVM7QUFBQSxRQUNBLGlCQUFBRztBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLFdBQUFsQjtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBOEpBLE1BQU13QixtQkFBa0IsQ0FBQ0QsWUFBVyxVQUFVRCxhQUFZO0FBSXhELGNBQU0sUUFBUSxvQkFBSSxJQUFJO0FBQ3RCLGNBQU0sZ0JBQWdCO0FBQUEsVUFDcEI7QUFBQSxVQUNBLEdBQUdBO0FBQUEsUUFDTDtBQUNBLGNBQU0sb0JBQW9CO0FBQUEsVUFDeEIsR0FBRyxjQUFjO0FBQUEsVUFDakIsSUFBSTtBQUFBLFFBQ047QUFDQSxlQUFPLGdCQUFrQkMsWUFBVyxVQUFVO0FBQUEsVUFDNUMsR0FBRztBQUFBLFVBQ0gsVUFBVTtBQUFBLFFBQ1osQ0FBQztBQUFBLE1BQ0g7QUFBQTtBQUFBOzs7QUN0akJBLFdBQVMsZUFBZSxnQkFBZ0IsZUFBZUUsVUFBUztBQUMvRCxVQUFNLE9BQU8sWUFBWSxFQUFFO0FBRTNCLFdBQU8sSUFBSSxXQUFXLE1BQU07QUFDM0IsWUFBTSxlQUFlLGVBQWU7QUFBQSxRQUNuQztBQUFBLE1BQ0Q7QUFFQSxZQUFNQyxVQUFTLE9BQU87QUFBQSxRQUNyQixDQUFDO0FBQUEsUUFDRDtBQUFBLFVBQ0MsV0FBVztBQUFBLFFBQ1o7QUFBQSxRQUNBRDtBQUFBLE1BQ0Q7QUFFQSxZQUFNLGFBQWFDLFVBQVMsWUFBWTtBQUN4QyxVQUFJLENBQUMsUUFBUSxVQUFVLEdBQUc7QUFDekIsWUFBSSxTQUFTLFVBQVUsR0FBRztBQUN6QixVQUFBQSxRQUFPLFlBQVksSUFBSSxXQUFXLE1BQU0sR0FBRyxFQUFFLE9BQU8sQ0FBQyxTQUFTO0FBQzdELG1CQUFPLEtBQUssS0FBSyxFQUFFLFNBQVM7QUFBQSxVQUM3QixDQUFDO0FBQUEsUUFDRixPQUFPO0FBQ04sVUFBQUEsUUFBTyxZQUFZLElBQUksQ0FBQztBQUFBLFFBQ3pCO0FBQUEsTUFDRDtBQUVBLGlCQUFXLE9BQU8sWUFBWTtBQUM3QixjQUFNLE9BQU8sV0FBVyxHQUFHO0FBQzNCLFlBQUksV0FBVyxJQUFJLEdBQUc7QUFDckI7QUFBQSxRQUNEO0FBRUEsWUFBSSxTQUFTLElBQUksR0FBRztBQUNuQjtBQUFBLFFBQ0Q7QUFFQSxZQUFJLENBQUMsU0FBUyxJQUFJLEdBQUc7QUFDcEIsZ0JBQU0sSUFBSTtBQUFBLFlBQ1QsNkRBQTZELE9BQU8sSUFBSTtBQUFBLFVBQ3pFO0FBQUEsUUFDRDtBQUVBLGNBQU0sS0FBSyxLQUFLLE1BQU0sR0FBRztBQUN6QixjQUFNQyxNQUFLLEdBQUcsTUFBTTtBQUVwQixnQkFBUUEsS0FBSTtBQUFBLFVBQ1gsS0FBSztBQUNKLFlBQUFELFFBQU8sWUFBWSxFQUFFLEdBQUcsSUFBSUUsTUFBSztBQUNqQztBQUFBLFVBQ0QsS0FBSztBQUNKLFlBQUFGLFFBQU8sWUFBWSxFQUFFLEdBQUcsSUFBSSxNQUFNO0FBQ2xDO0FBQUEsVUFDRCxLQUFLO0FBQ0osZ0JBQUksMkJBQTJCLENBQUMsT0FBTyxVQUFVLFFBQVEsT0FBTztBQUVoRSxrQkFBTSxlQUFlLElBQUksTUFBTTtBQUMvQixnQkFBSSxTQUFTLFlBQVksS0FBSyxhQUFhLEtBQUssRUFBRSxTQUFTLEdBQUc7QUFDN0QseUNBQTJCLGFBQ3pCLE1BQU0sR0FBRyxFQUNULE9BQU8sQ0FBQ0csVUFBUztBQUNqQix1QkFBT0EsTUFBSyxLQUFLLEVBQUUsU0FBUztBQUFBLGNBQzdCLENBQUM7QUFBQSxZQUNIO0FBRUEsZ0JBQUkseUJBQXlCLFNBQVNILFFBQU8sU0FBUyxHQUFHO0FBQ3hELHVDQUF5QjtBQUFBLGdCQUN4Qix5QkFBeUIsUUFBUUEsUUFBTyxTQUFTO0FBQUEsZ0JBQ2pEO0FBQUEsY0FDRDtBQUFBLFlBQ0Q7QUFDQSxxQ0FBeUIsUUFBUUEsUUFBTyxTQUFTO0FBRWpELFlBQUFBLFFBQU8sWUFBWSxFQUFFLEdBQUcsSUFBSSxjQUFjO0FBQUEsY0FDekMsV0FBVztBQUFBLGNBQ1gsZUFBZTtBQUFBLGNBQ2YsbUJBQW1CO0FBQUEsWUFDcEIsQ0FBQztBQUVEO0FBQUEsVUFDRCxLQUFLO0FBQ0osWUFBQUEsUUFBTyxZQUFZLEVBQUUsR0FBRyxJQUFJSSxnQkFBZTtBQUMzQztBQUFBLFVBQ0QsS0FBSztBQUNKLGdCQUFJLGNBQWM7QUFDakIsY0FBQUosUUFBTyxZQUFZLEVBQUUsR0FBRyxJQUFJSyxPQUFNLEVBQUUsU0FBUyxhQUFhLENBQUM7QUFBQSxZQUM1RDtBQUNBO0FBQUEsVUFDRCxLQUFLO0FBQ0osWUFBQUwsUUFBTyxZQUFZLEVBQUUsR0FBRyxJQUFJLEtBQUs7QUFBQSxjQUNoQyxNQUFNLEVBQUUsZ0JBQWdCLGlCQUFpQixTQUFTLEdBQUc7QUFDcEQsc0JBQU0sV0FBVyxLQUFLO0FBQ3RCLHNCQUFNLFlBQVksS0FBSztBQUV2QixvQkFBSSxpQkFBaUIsR0FBRztBQUN2QixtQ0FBaUI7QUFBQSxnQkFDbEI7QUFFQSxvQkFBSSxrQkFBa0IsR0FBRztBQUN4QixvQ0FBa0I7QUFBQSxnQkFDbkI7QUFFQSxvQkFBSSxpQkFBaUIsVUFBVTtBQUM5QixtQ0FBaUI7QUFBQSxnQkFDbEI7QUFFQSxvQkFBSSxrQkFBa0IsV0FBVztBQUNoQyxvQ0FBa0I7QUFBQSxnQkFDbkI7QUFFQSx1QkFBTyxPQUFPLFNBQVMsU0FBUyxPQUFPO0FBQUEsa0JBQ3RDLFdBQVc7QUFBQSxrQkFDWCxVQUFVLEdBQUcsY0FBYztBQUFBLGtCQUMzQixXQUFXLEdBQUcsZUFBZTtBQUFBLGdCQUM5QixDQUFDO0FBQUEsY0FDRjtBQUFBLFlBQ0QsQ0FBQztBQUNEO0FBQUEsVUFDRCxLQUFLO0FBQ0osa0JBQU0sSUFBSSxJQUFJLE1BQU07QUFDcEIsWUFBQUEsUUFBTyxZQUFZLEVBQUUsR0FBRyxJQUFJTSxRQUFPLFNBQVMsQ0FBQyxLQUFLLEVBQUU7QUFDcEQ7QUFBQSxVQUNELEtBQUs7QUFDSixZQUFBTixRQUFPLFlBQVksRUFBRSxHQUFHLElBQUksS0FBSztBQUNqQztBQUFBLFVBQ0Q7QUFDQyxrQkFBTSxJQUFJLE1BQU0scUJBQXFCQyxHQUFFLEVBQUU7QUFBQSxRQUMzQztBQUFBLE1BQ0Q7QUFFQSxvQkFBYyxNQUFNLGVBQWUsWUFBWTtBQUMvQyxvQkFBYyxNQUFNLFVBQVU7QUFFOUIsaUJBQVcsZ0JBQWdCLGVBQWUsTUFBTTtBQUMvQyxRQUFBTSxpQkFBZ0IsZ0JBQWdCLGVBQWVQLE9BQU0sRUFBRTtBQUFBLFVBQ3RELENBQUMsRUFBRSxHQUFHLEdBQUcsV0FBVyxlQUFlLE1BQU07QUFDeEMsbUJBQU8sT0FBTyxjQUFjLE9BQU87QUFBQSxjQUNsQyxLQUFLO0FBQUEsY0FDTCxNQUFNO0FBQUEsY0FDTixXQUFXLGFBQWEsV0FBVyxDQUFDLENBQUMsTUFBTSxXQUFXLENBQUMsQ0FBQztBQUFBLFlBQ3pELENBQUM7QUFFRCxnQkFBSSxlQUFlLE9BQU87QUFDekIsb0JBQU0sT0FBTyxVQUFVLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFFbkMsb0JBQU0sYUFBYTtBQUFBLGdCQUNsQixLQUFLO0FBQUEsZ0JBQ0wsT0FBTztBQUFBLGdCQUNQLFFBQVE7QUFBQSxnQkFDUixNQUFNO0FBQUEsY0FDUCxFQUFFLElBQUk7QUFHTixvQkFBTSxXQUFXLGFBQWEsY0FBYztBQUU1QyxvQkFBTSxjQUFjO0FBQUEsZ0JBQ25CLFlBQVk7QUFBQSxnQkFDWixhQUFhO0FBQUEsZ0JBQ2IsY0FBYztBQUFBLGdCQUNkLFdBQVc7QUFBQSxjQUNaO0FBRUEsb0JBQU0sZ0JBQ0w7QUFFRCxzQkFBUSxNQUFNO0FBQUEsZ0JBQ2IsS0FBSztBQUNKLDhCQUFZLGNBQWM7QUFDMUIsOEJBQVksZUFBZTtBQUMzQjtBQUFBLGdCQUVELEtBQUs7QUFDSiw4QkFBWSxZQUFZO0FBQ3hCLDhCQUFZLGFBQWE7QUFDekI7QUFBQSxnQkFFRCxLQUFLO0FBQ0osOEJBQVksY0FBYztBQUMxQiw4QkFBWSxZQUFZO0FBQ3hCO0FBQUEsZ0JBRUQsS0FBSztBQUNKLDhCQUFZLGVBQWU7QUFDM0IsOEJBQVksYUFBYTtBQUN6QjtBQUFBLGNBQ0Y7QUFFQSxvQkFBTSxFQUFFLEdBQUFRLElBQUcsR0FBQUMsR0FBRSxJQUFJLGVBQWU7QUFFaEMscUJBQU87QUFBQSxnQkFDTixhQUFhO0FBQUEsZ0JBQ2I7QUFBQSxrQkFDQyxNQUFNRCxNQUFLLE9BQU8sR0FBR0EsRUFBQyxPQUFPO0FBQUEsa0JBQzdCLEtBQUtDLE1BQUssT0FBTyxHQUFHQSxFQUFDLE9BQU87QUFBQTtBQUFBO0FBQUEsa0JBRzVCLE9BQU87QUFBQSxrQkFDUCxRQUFRO0FBQUEsa0JBQ1IsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQztBQUFBLGtCQUM5QixXQUFXO0FBQUEsZ0JBQ1o7QUFBQSxnQkFDQTtBQUFBLGNBQ0Q7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQSxNQUNELENBQUM7QUFBQSxJQUNGLENBQUMsRUFBRSxJQUFJO0FBQUEsRUFDUjtBQUVBLFdBQVMsV0FBVyxPQUFPO0FBQzFCLFVBQU0sTUFBTSxPQUFPLG9CQUFvQjtBQUN2QyxXQUFPLEtBQUssTUFBTSxRQUFRLEdBQUcsSUFBSTtBQUFBLEVBQ2xDO0FBcFBBO0FBQUE7QUFPQTtBQVdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7OztBQ3BCQSxNQWdCTTtBQWhCTjtBQUFBO0FBT0E7QUFDQSxNQUFBQztBQVFBLE1BQU0sbUJBQW1CLElBQUksY0FBYztBQUUzQyxVQUFJO0FBQ0gseUJBQWlCO0FBQUEsVUFDaEI7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUlBO0FBQUEsUUFDRDtBQUFBLE1BQ0QsU0FBUyxHQUFHO0FBQ1g7QUFBQSxVQUNDLFNBQVMsWUFBWSxFQUFFLGNBQWMsTUFBTTtBQUFBLFVBQzNDO0FBQUEsVUFDQSxJQUFJO0FBQUEsUUFDTDtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNoQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLCtCQUFBQztBQUFBO0FBNHZCQSxXQUFTQyw0QkFBMkI7QUFBQztBQUNwQyxVQUFNQyxXQUFVLENBQUM7QUFFakIsVUFBTSxXQUFXLEtBQUssYUFBYSxnQ0FBZ0M7QUFDbkUsUUFBSSxTQUFTLFFBQVEsR0FBRztBQUN2QixVQUFJLENBQUNBLFNBQVEsaUJBQWlCO0FBQUcsUUFBQUEsU0FBUSxpQkFBaUIsSUFBSSxDQUFDO0FBRS9ELGNBQVEsVUFBVTtBQUFBLFFBQ2pCLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSixVQUFBQSxTQUFRLGlCQUFpQixFQUFFLFVBQVUsSUFBSSxtQkFBbUI7QUFDNUQ7QUFBQSxRQUNELEtBQUs7QUFDSixVQUFBQSxTQUFRLGlCQUFpQixFQUFFLFVBQVUsSUFBSSxxQkFBcUI7QUFDOUQ7QUFBQSxRQUNEO0FBQ0M7QUFBQSxZQUNDO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxVQUNEO0FBQUEsTUFDRjtBQUFBLElBQ0Q7QUFFQSxXQUFPQTtBQUFBLEVBQ1I7QUFLQSxXQUFTQyx3QkFBdUI7QUFBQztBQUdoQyxTQUFLQyxxQkFBb0IsSUFBSSxJQUFJLGVBQWUsQ0FBQyxZQUFZO0FBQzVELFVBQUksS0FBS0Msb0JBQW1CLGFBQWEsZ0JBQWdCO0FBQ3hELFlBQUk7QUFDSCxlQUFLQSxvQkFBbUIsRUFBRSxNQUFNO0FBQ2hDO0FBQUEsUUFDRCxTQUFTLEdBQUc7QUFDWCxpQkFBTyxLQUFLQSxvQkFBbUI7QUFBQSxRQUNoQztBQUFBLE1BQ0Q7QUFFQSxXQUFLQSxvQkFBbUIsSUFBSSxJQUFJLGVBQWUsS0FBSyxNQUFNO0FBQ3pELHFCQUFhLEtBQUssSUFBSTtBQUN0QixlQUFPLEtBQUtBLG9CQUFtQjtBQUFBLE1BQ2hDLENBQUM7QUFBQSxJQUNGLENBQUM7QUFFRCxTQUFLRCxxQkFBb0IsRUFBRSxRQUFRLEtBQUssYUFBYTtBQUFBLEVBQ3REO0FBRUEsV0FBUywyQkFBMkI7QUFBQztBQUNwQyxRQUFJLEtBQUtBLHFCQUFvQixhQUFhLGdCQUFnQjtBQUN6RCxXQUFLQSxxQkFBb0IsRUFBRSxXQUFXO0FBQUEsSUFDdkM7QUFBQSxFQUNEO0FBRUEsV0FBUyx1QkFBdUI7QUFDL0IsV0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNSO0FBRUEsV0FBUyxxQkFBcUI7QUFDN0IsV0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNSO0FBTUEsV0FBUyxzQkFBc0I7QUFBQztBQUUvQixRQUFJRixXQUFVLEtBQUssVUFBVSxTQUFTO0FBQ3RDLFFBQUksQ0FBQyxXQUFXQSxRQUFPLEdBQUc7QUFDekIsTUFBQUEsV0FBVSxDQUFDO0FBQUEsSUFDWjtBQUVBLFFBQUksVUFBVTtBQUNkLHVCQUFtQixLQUFLLE1BQU0sS0FBSyxFQUFFLFFBQVEsQ0FBQyxTQUFTO0FBQ3RELFVBQUksUUFBUSxPQUFPLFNBQVM7QUFDNUIsVUFBSSxhQUFhO0FBRWpCLFVBQUksS0FBSyxhQUFhLG9CQUFvQixHQUFHO0FBQzVDLGdCQUFRLEtBQUssYUFBYSxvQkFBb0I7QUFBQSxNQUMvQztBQUVBLFVBQUksS0FBSyxNQUFNLFlBQVksUUFBUTtBQUNsQyxxQkFBYTtBQUFBLE1BQ2Q7QUFFQSxZQUFNLFFBQVEsS0FBSztBQUVuQixNQUFBQSxTQUFRLEtBQUs7QUFBQSxRQUNaO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNELENBQUM7QUFBQSxJQUNGLENBQUM7QUFFRCw2QkFBeUIsS0FBSyxNQUFNQSxTQUFRLE1BQU07QUFDbEQsU0FBSyxVQUFVLFdBQVdBLFFBQU87QUFBQSxFQUNsQztBQVFBLFdBQVMseUJBQXlCLGNBQWM7QUFDL0MsVUFBTUksUUFBTztBQUViLFFBQUksQ0FBQ0EsTUFBSyxvQkFBb0IsR0FBRztBQUNoQztBQUFBLElBQ0Q7QUFFQSxVQUFNLFdBQVcsU0FBVSxlQUFlQyxXQUFVO0FBQ25ELFlBQU0sTUFBTTtBQUNaLGlCQUFXLFlBQVksZUFBZTtBQUNyQyxZQUFJLFNBQVMsU0FBUyxhQUFhO0FBQ2xDLGdCQUFNQyxPQUFNO0FBQ1o7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUVBLFVBQUksUUFBUSxNQUFNO0FBQ2pCLGNBQU0sUUFBUUYsTUFBSyxvQkFBb0IsRUFBRTtBQUFBLFVBQ3hDLE9BQU8sY0FBYztBQUFBLFFBQ3RCO0FBRUEsWUFBSSxNQUFNLFdBQVcsY0FBYztBQUNsQywyQkFBaUIsS0FBS0EsS0FBSTtBQUMxQixVQUFBQyxVQUFTLFdBQVc7QUFBQSxRQUNyQjtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBRUEsVUFBTSxXQUFXLElBQUksaUJBQWlCLFFBQVE7QUFDOUMsYUFBUyxRQUFRRCxNQUFLLG9CQUFvQixHQUFHO0FBQUEsTUFDNUMsWUFBWTtBQUFBLE1BQ1osV0FBVztBQUFBLE1BQ1gsU0FBUztBQUFBLElBQ1YsQ0FBQztBQUFBLEVBQ0Y7QUFPQSxXQUFTLG9CQUFvQixPQUFPO0FBQUM7QUFDcEMsVUFBTUosV0FBVSxLQUFLLFVBQVUsU0FBUztBQUV4QyxhQUFTLElBQUksR0FBRyxJQUFJQSxTQUFRLFFBQVEsS0FBSztBQUN4QyxZQUFNLElBQUlBLFdBQVUsQ0FBQztBQUNyQixVQUFJLFNBQVMsQ0FBQyxLQUFLLElBQUksT0FBTyxNQUFNLE9BQU87QUFDMUMsZUFBTyxJQUFJLE9BQU87QUFBQSxNQUNuQixXQUFXLFlBQVksQ0FBQyxLQUFLLE1BQU0sT0FBTztBQUN6QyxlQUFPO0FBQUEsTUFDUjtBQUFBLElBQ0Q7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQVFBLFdBQVMsa0JBQWtCLE9BQU87QUFBQztBQUVsQyxVQUFNLFdBQVcsS0FBSyxVQUFVLHFCQUFxQjtBQUNyRCxRQUFJLFdBQVcsUUFBUSxHQUFHO0FBQ3pCLFlBQU0sUUFBUSxTQUFTLEtBQUssTUFBTSxLQUFLO0FBQ3ZDLFVBQUksU0FBUyxLQUFLO0FBQUcsZUFBTztBQUFBLElBQzdCO0FBRUEsUUFBSSxTQUFTLEtBQUssS0FBSyxVQUFVLEtBQUssR0FBRztBQUN4QyxhQUFPLEdBQUcsS0FBSztBQUFBLElBQ2hCO0FBRUEsV0FBTyxLQUFLLFVBQVUsMkJBQTJCLEtBQUs7QUFBQSxFQUN2RDtBQU1BLFdBQVMsMkJBQTJCLE9BQU87QUFBQztBQUUzQyxZQUFRLFFBQVEsTUFBTSxHQUFHO0FBQUEsTUFDeEIsS0FBSztBQUNKLGVBQU8sS0FBSyxJQUFJO0FBQ2hCLGNBQU0sZUFBZTtBQUNyQjtBQUFBLE1BQ0QsS0FBSztBQUNKLGVBQU8sS0FBSyxJQUFJO0FBQ2hCLGNBQU0sZUFBZTtBQUNyQjtBQUFBLElBQ0Y7QUFBQSxFQUNEO0FBUUEsV0FBU08sc0JBQXFCO0FBQzdCLFVBQU1ILFFBQU87QUFFYixJQUFBQSxNQUFLO0FBQUEsTUFDSixJQUFJLFNBQVMsV0FBWTtBQUN4QixZQUFJLFdBQVcsTUFBTTtBQUNwQixjQUFJO0FBQ0gsWUFBQUEsTUFBSyxXQUFXO0FBQUEsVUFDakIsU0FBUyxHQUFHO0FBQUEsVUFBQztBQUNiLGNBQUk7QUFDSCx1Q0FBMkIsS0FBS0EsS0FBSTtBQUFBLFVBQ3JDLFNBQVMsR0FBRztBQUFBLFVBQUM7QUFFYixtQ0FBeUIsS0FBS0EsS0FBSTtBQUFBLFFBQ25DLENBQUMsRUFBRSxJQUFJO0FBQUEsTUFDUixDQUFDO0FBQUEsSUFDRjtBQUFBLEVBQ0Q7QUFFQSxXQUFTLHdCQUF3QjtBQUFDO0FBRWpDLFVBQU0sY0FBYyxJQUFJLGFBQWEsSUFBSSxFQUFFO0FBQUEsTUFDMUMsS0FBSyxVQUFVLFVBQVUsQ0FBQyxDQUFDO0FBQUEsSUFDNUI7QUFFQSxRQUFJO0FBQ0gsWUFBTSxNQUFNLHdCQUF3QjtBQUNwQyxrQkFBWSxTQUFTLElBQUk7QUFBQSxJQUMxQixTQUFTLEdBQUc7QUFBQSxJQUFDO0FBRWIsV0FBTztBQUFBLEVBQ1I7QUFNQSxXQUFTLDJCQUEyQjtBQUFDO0FBRXBDLFVBQU0sZUFBZSxzQkFBc0IsS0FBSyxJQUFJO0FBQ3BELFVBQU0sYUFBYSxLQUFLLFVBQVUsV0FBVztBQUU3QyxVQUFNLE9BQU8sYUFBYTtBQUFBLE1BQ3pCO0FBQUEsTUFDQSxXQUFXO0FBQUEsTUFDWDtBQUFBLElBQ0Q7QUFFQSxVQUFNLGVBQWUsSUFBSSxVQUFVO0FBQUEsTUFDbEMsT0FBTyxPQUFPLFdBQVcsTUFBTTtBQUFBLElBQ2hDLENBQUMsRUFBRSxPQUFPLElBQUk7QUFFZCxTQUFLLFVBQVUscUJBQXFCLFlBQVk7QUFFaEQsVUFBTSxVQUFVLEtBQUssVUFBVSxrQkFBa0I7QUFDakQsVUFBTSxNQUFNLEtBQUssVUFBVSx5QkFBeUI7QUFFcEQsUUFDQyxZQUFZLE1BQ1osWUFBWSxVQUNaLFlBQVksT0FDWixZQUFZLE1BQ1g7QUFDRCxVQUFJLGVBQWUsVUFBYSxXQUFXLFdBQVcsR0FBRztBQUN4RCxhQUFLLFVBQVUsb0JBQW9CLEdBQUc7QUFBQSxNQUN2QyxPQUFPO0FBQ04sYUFBSyxVQUFVLG9CQUFvQixFQUFFO0FBQUEsTUFDdEM7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQU1BLFdBQVMsb0JBQW9CO0FBQzVCLFdBQU8sS0FBSyxvQkFBb0IsRUFBRTtBQUFBLE1BQ2pDLElBQUksY0FBYztBQUFBLElBQ25CO0FBQUEsRUFDRDtBQXdCQSxXQUFTLDZCQUE2QjtBQUFDO0FBRXRDLFVBQU1KLFdBQVUsa0JBQWtCLEtBQUssSUFBSTtBQUMzQyxVQUFNLFlBQVksS0FBSyxvQkFBb0I7QUFDM0MsUUFBSSxFQUFFLHFCQUFxQixlQUFlQSxvQkFBbUIsV0FBVztBQUN2RTtBQUFBLElBQ0Q7QUFFQSxRQUFJLFVBQVU7QUFDZCxRQUFJLGVBQWU7QUFDbkIsVUFBTVEsT0FBTSxLQUFLLFVBQVUsa0JBQWtCLEVBQUU7QUFFL0MsUUFBSSxhQUFhO0FBQ2pCLGVBQVcsQ0FBQyxFQUFFLE1BQU0sS0FBSyxPQUFPLFFBQVFSLFFBQU8sR0FBRztBQUNqRCxZQUFNLGdCQUFnQixVQUFVLEVBQUUsaUJBQWlCLE1BQU07QUFDekQsVUFBSSxjQUFjLFlBQVk7QUFBUTtBQUV0QyxVQUFJLElBQUksT0FBTyxzQkFBc0IsRUFBRTtBQUN2QyxXQUFLLFNBQVMsY0FBYyxpQkFBaUIsWUFBWSxHQUFHLEVBQUU7QUFDOUQsV0FBSyxTQUFTLGNBQWMsaUJBQWlCLGVBQWUsR0FBRyxFQUFFO0FBQ2pFLHFCQUFlLEtBQUssSUFBSSxjQUFjLENBQUM7QUFFdkM7QUFDQSxVQUFJLFVBQVVRLE1BQUs7QUFDbEI7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBLFFBQUksVUFBVUEsTUFBSztBQUNsQixnQkFBVUE7QUFDVixtQkFBYTtBQUFBLElBQ2Q7QUFFQSxRQUFJLFlBQVksR0FBRztBQUNsQixVQUFJLEtBQUssVUFBVSxTQUFTLEVBQUUsV0FBVyxHQUFHO0FBQzNDLGFBQUs7QUFBQSxVQUNKO0FBQUEsVUFDQSxLQUFLLFVBQVUsNkJBQTZCO0FBQUEsUUFDN0M7QUFBQSxNQUNELE9BQU87QUFDTixhQUFLO0FBQUEsVUFDSjtBQUFBLFVBQ0EsS0FBSyxVQUFVLHlCQUF5QjtBQUFBLFFBQ3pDO0FBQUEsTUFDRDtBQUNBLFdBQUssK0JBQStCLEVBQUUsVUFBVSxPQUFPLFFBQVE7QUFBQSxJQUNoRSxPQUFPO0FBQ04sV0FBSywrQkFBK0IsRUFBRSxVQUFVLElBQUksUUFBUTtBQUFBLElBQzdEO0FBRUEsVUFBTSxTQUFTLFVBQVUsRUFBRSxpQkFBaUIsS0FBSyxvQkFBb0IsQ0FBQztBQUN0RSxRQUFJLFVBQVUsU0FBUyxPQUFPLGlCQUFpQixhQUFhLEdBQUcsRUFBRTtBQUNqRSxlQUFXLFNBQVMsT0FBTyxpQkFBaUIsZ0JBQWdCLEdBQUcsRUFBRTtBQUVqRSxRQUFJLFNBQVMsU0FBUyxPQUFPLGlCQUFpQixZQUFZLEdBQUcsRUFBRTtBQUMvRCxjQUFVLFNBQVMsT0FBTyxpQkFBaUIsZUFBZSxHQUFHLEVBQUU7QUFFL0QsVUFBTSxrQkFBa0IsZUFBZSxVQUFVLFVBQVU7QUFDM0QsY0FBVSxNQUFNLFNBQVMsR0FBRyxlQUFlO0FBRTNDLFFBQUksZUFBZSxNQUFNO0FBQ3hCLGdCQUFVLE1BQU0sWUFBWTtBQUFBLElBQzdCLE9BQU87QUFDTixnQkFBVSxNQUFNLFlBQVk7QUFBQSxJQUM3QjtBQUVBLFVBQU0sVUFBVSxLQUFLQyxxQkFBb0IsRUFBRSxzQkFBc0I7QUFFakUsU0FBS1gsb0JBQW1CLEVBQUUsTUFBTSxRQUFRLEdBQUcsUUFBUSxLQUFLO0FBQ3hELGNBQVUsTUFBTSxZQUFZO0FBQUEsRUFDN0I7QUFPQSxXQUFTLHNCQUFzQixXQUFXO0FBQUM7QUFFMUMsUUFBSSxDQUFDLEtBQUssWUFBWTtBQUNyQixZQUFNLElBQUksTUFBTSwyQkFBMkI7QUFBQSxJQUM1QztBQUVBLFFBQUksVUFBVSxLQUFLLFdBQVcsY0FBYyxJQUFJLGdCQUFnQixVQUFVO0FBRTFFLFFBQ0MsRUFBRSxtQkFBbUIsZ0JBQ3JCLFFBQVEsUUFBUSxrQ0FBa0MsR0FDakQ7QUFDRCxpQkFBVyxDQUFDLEVBQUUsQ0FBQyxLQUFLLE9BQU87QUFBQSxRQUMxQixLQUFLLFdBQVcsaUJBQWlCLElBQUksY0FBYyxVQUFVO0FBQUEsTUFDOUQsR0FBRztBQUNGLFlBQUksRUFBRSxRQUFRLG1DQUFtQyxHQUFHO0FBQ25ELG9CQUFVO0FBQ1Y7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLElBQ0QsT0FBTztBQUNOLFVBQUksY0FBYyxzQkFBc0I7QUFDdkMsZUFBTyxRQUFRLGFBQWE7QUFDM0Isb0JBQVUsUUFBUTtBQUVsQixjQUNDLG1CQUFtQixlQUNuQixRQUFRLGFBQWEsY0FBYyxLQUNuQyxRQUFRLGFBQWEsY0FBYyxNQUFNLFlBQ3pDLFFBQVEsUUFBUSxtQ0FBbUMsS0FDbkQsUUFBUSxRQUFRLG9DQUFvQyxHQUNuRDtBQUNEO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQSxNQUNELE9BQU87QUFDTixlQUFPLFFBQVEsaUJBQWlCO0FBQy9CLG9CQUFVLFFBQVE7QUFFbEIsY0FDQyxtQkFBbUIsZUFDbkIsUUFBUSxhQUFhLGNBQWMsS0FDbkMsUUFBUSxhQUFhLGNBQWMsTUFBTSxZQUN6QyxRQUFRLFFBQVEsbUNBQW1DLEtBQ25ELFFBQVEsUUFBUSxvQ0FBb0MsR0FDbkQ7QUFDRDtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxRQUFJLFdBQVcsTUFBTTtBQUNwQixVQUFJLG1CQUFtQixhQUFhO0FBQ25DLGFBQUssV0FDSCxpQkFBaUIsSUFBSSxnQkFBZ0IsVUFBVSxFQUMvQyxRQUFRLENBQUMsTUFBTTtBQUNmLFlBQUUsZ0JBQWdCLEdBQUcsZ0JBQWdCLFNBQVM7QUFBQSxRQUMvQyxDQUFDO0FBRUYsZ0JBQVEsTUFBTTtBQUNkLGdCQUFRLGFBQWEsR0FBRyxnQkFBZ0IsV0FBVyxJQUFJO0FBQUEsTUFDeEQ7QUFBQSxJQUNELENBQUMsRUFBRSxJQUFJO0FBQUEsRUFDUjtBQUtBLFdBQVMsZ0JBQWdCO0FBQUM7QUFFekIsUUFBSSxXQUFXLE1BQU07QUFDcEIsVUFBSTtBQUVKLGNBQVEsS0FBSyxVQUFVLGlCQUFpQixHQUFHO0FBQUEsUUFDMUMsS0FBSztBQUNKLGNBQUksS0FBSyx5QkFBeUIsYUFBYSxhQUFhO0FBQzNELDBCQUFjLEtBQUsseUJBQXlCLEVBQUUsTUFBTSxZQUFZO0FBQUEsVUFDakUsT0FBTztBQUNOO0FBQUEsVUFDRDtBQUVBO0FBQUEsUUFDRCxLQUFLO0FBQUEsUUFDTDtBQUNDLGNBQUksS0FBSyx5QkFBeUIsYUFBYSxrQkFBa0I7QUFDaEUsMEJBQWMsS0FBSyx5QkFBeUIsRUFBRSxNQUFNLFlBQVk7QUFBQSxVQUNqRSxPQUFPO0FBQ047QUFBQSxVQUNEO0FBQUEsTUFDRjtBQUVBLFlBQU1FLFdBQVUsS0FBSyxVQUFVLFNBQVM7QUFDeEMsaUJBQVcsQ0FBQyxHQUFHLE1BQU0sS0FBSyxPQUFPLFFBQVFBLFFBQU8sR0FBRztBQUNsRCxZQUFJLE9BQU8sTUFBTSxZQUFZLEVBQUUsUUFBUSxXQUFXLE1BQU0sSUFBSTtBQUMzRCxlQUFLLFVBQVUsV0FBVyxDQUFDLGFBQWEsTUFBTTtBQUFBLFFBQy9DLE9BQU87QUFDTixlQUFLLFVBQVUsV0FBVyxDQUFDLGFBQWEsTUFBUztBQUFBLFFBQ2xEO0FBQUEsTUFDRDtBQUFBLElBQ0QsQ0FBQyxFQUNDLElBQUksRUFDSixLQUFLLE1BQU07QUFDWCxVQUFJLFdBQVcsSUFBSSxNQUFNO0FBQ3hCLG1DQUEyQixLQUFLLElBQUk7QUFDcEMsUUFBQVUsYUFBWSxLQUFLLElBQUk7QUFBQSxNQUN0QixDQUFDLEVBQUUsSUFBSTtBQUFBLElBQ1IsQ0FBQyxFQUNBLE1BQU0sQ0FBQyxNQUFNO0FBQ2Isd0JBQWtCLE1BQU0sd0JBQXdCLEVBQUUsT0FBTztBQUFBLElBQzFELENBQUM7QUFBQSxFQUNIO0FBTUEsV0FBUywyQkFBMkIsT0FBTztBQUFDO0FBRTNDLFVBQU0sV0FBVyxRQUFRLFVBQVU7QUFFbkMsWUFBUSxRQUFRLE1BQU0sR0FBRztBQUFBLE1BQ3hCLEtBQUs7QUFDSiw4QkFBc0IsS0FBSyxNQUFNLG9CQUFvQjtBQUNyRCxjQUFNLGVBQWU7QUFDckI7QUFBQSxNQUNELEtBQUs7QUFDSixlQUFPLEtBQUssSUFBSTtBQUNoQixjQUFNLGVBQWU7QUFDckI7QUFBQSxNQUNELEtBQWMsYUFBYTtBQUFBLE1BQzNCLEtBQUs7QUFDSiw4QkFBc0IsS0FBSyxNQUFNLGtCQUFrQjtBQUNuRCxjQUFNLGVBQWU7QUFDckI7QUFBQSxNQUNELEtBQWMsQ0FBQztBQUFBLE1BQ2YsS0FBSztBQUNKLDhCQUFzQixLQUFLLE1BQU0sb0JBQW9CO0FBQ3JELGNBQU0sZUFBZTtBQUNyQjtBQUFBLE1BQ0Q7QUFDQyxZQUFJLEtBQUssVUFBVSxhQUFhLE1BQU0sb0JBQW9CO0FBQ3pELHdCQUFjLEtBQUssSUFBSTtBQUFBLFFBQ3hCLE9BQU87QUFDTiwyQkFBaUIsS0FBSyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU07QUFDeEMsOEJBQWtCLE1BQU0sd0JBQXdCLEVBQUUsT0FBTztBQUFBLFVBQzFELENBQUM7QUFBQSxRQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Q7QUFLQSxXQUFTLG1CQUFtQjtBQUFDO0FBRTVCLFFBQUksRUFBRSxLQUFLLHlCQUF5QixhQUFhLGNBQWM7QUFDOUQ7QUFBQSxJQUNEO0FBRUEsVUFBTSxZQUFZLEtBQUssVUFBVSxLQUFLO0FBQ3RDLFFBQUksQ0FBQyxXQUFXO0FBQ2Y7QUFBQSxRQUNDO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNEO0FBQ0E7QUFBQSxJQUNEO0FBRUEsV0FBTyxJQUFJLFdBQVcsTUFBTTtBQUMzQixZQUFNLGNBQWM7QUFBQSxRQUNuQixLQUFLLHlCQUF5QixFQUFFLE1BQU0sWUFBWTtBQUFBLE1BQ25EO0FBQ0EsVUFBSSxNQUFNO0FBQ1YsVUFBSSxZQUFZLFNBQVMsR0FBRztBQUMzQixjQUFNLElBQUksVUFBVSxFQUFFLFFBQVEsWUFBWSxDQUFDLEVBQUUsT0FBTyxTQUFTO0FBQUEsTUFDOUQ7QUFFQSxXQUNFLE1BQU0sR0FBRyxFQUNULEtBQUssTUFBTTtBQUNYLHlCQUFpQixLQUFLLElBQUk7QUFBQSxNQUMzQixDQUFDLEVBQ0EsTUFBTSxDQUFDLE1BQU07QUFDYixjQUFNO0FBQUEsTUFDUCxDQUFDO0FBQUEsSUFDSCxDQUFDLEVBQUUsSUFBSTtBQUFBLEVBQ1I7QUFPQSxXQUFTLDJCQUEyQixPQUFPO0FBQUM7QUFFM0MsVUFBTSxXQUFXLFFBQVEsVUFBVTtBQUVuQyxZQUFRLFFBQVEsTUFBTSxHQUFHO0FBQUEsTUFDeEIsS0FBSztBQUNKLGVBQU8sS0FBSyxJQUFJO0FBQ2hCLGNBQU0sZUFBZTtBQUNyQjtBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNKLGNBQU0sT0FBTyxNQUFNLGFBQWE7QUFDaEMsY0FBTSxVQUFVLE9BQU8sQ0FBQztBQUV4QixrQkFBVSxRQUFRLHFCQUFxQixPQUFPLEdBQUcsT0FBTztBQUN4RCxjQUFNLGVBQWU7QUFDckI7QUFBQSxNQUVELEtBQWMsYUFBYTtBQUFBLE1BQzNCLEtBQUs7QUFDSiw4QkFBc0IsS0FBSyxNQUFNLGtCQUFrQjtBQUNuRCxjQUFNLGVBQWU7QUFDckI7QUFBQSxNQUVELEtBQWMsQ0FBQztBQUFBLE1BQ2YsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUVKO0FBQUEsTUFDRCxLQUFLO0FBQ0osOEJBQXNCLEtBQUssTUFBTSxvQkFBb0I7QUFDckQsY0FBTSxlQUFlO0FBQ3JCO0FBQUEsTUFDRDtBQUNDLGNBQU0sSUFBSSxNQUFNLGFBQWE7QUFDN0IsWUFBSSxJQUFJLENBQUMsYUFBYSxrQkFBa0I7QUFDdkM7QUFBQSxRQUNEO0FBQ0EsUUFBQUEsYUFBWSxLQUFLLElBQUk7QUFDckI7QUFBQSxJQUNGO0FBQUEsRUFDRDtBQU1BLFdBQVMsZ0JBQWdCO0FBQUM7QUFFekIsWUFBUSxLQUFLLFVBQVUsYUFBYSxHQUFHO0FBQUEsTUFDdEMsS0FBSztBQUNKLGVBQU87QUFBQSxNQUNSLEtBQUs7QUFDSixlQUFPO0FBQUEsTUFDUjtBQUNDLGVBQU87QUFBQSxJQUNUO0FBQUEsRUFDRDtBQUtBLFdBQVMsYUFBYTtBQUFDO0FBRXRCLFFBQUksRUFBRSxLQUFLLHlCQUF5QixhQUFhLGNBQWM7QUFDOUQ7QUFBQSxJQUNEO0FBRUEsUUFBSSxjQUFjLEtBQUssSUFBSSxNQUFNLHNCQUFzQjtBQUN0RDtBQUFBLElBQ0Q7QUFFQSxTQUFLLGtDQUFrQyxFQUFFLFVBQVUsT0FBTyxRQUFRO0FBQ2xFLFNBQUssa0NBQWtDLEVBQUUsS0FBSztBQUU5QyxTQUFLLHlCQUF5QixFQUFFLFVBQVUsT0FBTyxRQUFRO0FBQ3pELFNBQUsseUJBQXlCLEVBQUUsS0FBSztBQUFBLEVBQ3RDO0FBTUEsV0FBUyxrQkFBa0IsY0FBYztBQUFDO0FBRXpDLFNBQUssa0NBQWtDLEVBQUUsVUFBVSxPQUFPLFFBQVE7QUFDbEUsU0FBSyx5QkFBeUIsRUFBRSxVQUFVLElBQUksUUFBUTtBQUN0RCxTQUFLLHlCQUF5QixFQUFFLFVBQVUsT0FBTyxRQUFRO0FBQ3pELFNBQUsseUJBQXlCLEVBQUUsVUFBVSxJQUFJLFFBQVE7QUFFdEQsUUFBSSxFQUFFLEtBQUsseUJBQXlCLGFBQWEsY0FBYztBQUM5RDtBQUFBLFFBQ0M7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Q7QUFDQTtBQUFBLElBQ0Q7QUFJQSxlQUFXLE1BQU07QUFDaEIsVUFBSSxpQkFBaUIsVUFBYSxpQkFBaUIsTUFBTTtBQUN4RCxhQUFLLHlCQUF5QixFQUFFLE1BQU07QUFBQSxNQUN2QyxPQUFPO0FBQ04sYUFBSyx5QkFBeUIsRUFBRSxNQUFNLFlBQVk7QUFBQSxNQUNuRDtBQUFBLElBQ0QsR0FBRyxHQUFHO0FBQUEsRUFDUDtBQU1BLFdBQVMsa0JBQWtCLGNBQWM7QUFBQztBQUV6QyxVQUFNVixXQUFVLEtBQUssVUFBVSxTQUFTO0FBQ3hDLFNBQ0UsQ0FBQyxRQUFRQSxRQUFPLEtBQUtBLFNBQVEsV0FBVyxNQUN6QyxLQUFLLFVBQVUsYUFBYSxNQUFNLG9CQUNqQztBQUNEO0FBQUEsSUFDRDtBQUVBLFNBQUssa0NBQWtDLEVBQUUsVUFBVSxJQUFJLFFBQVE7QUFDL0QsU0FBSyx5QkFBeUIsRUFBRSxVQUFVLElBQUksUUFBUTtBQUN0RCxTQUFLLHlCQUF5QixFQUFFLFVBQVUsT0FBTyxRQUFRO0FBSXpELGVBQVcsTUFBTTtBQUNoQixVQUFJLGlCQUFpQixVQUFhLGlCQUFpQixNQUFNO0FBQ3hELGFBQUsseUJBQXlCLEVBQUUsTUFBTTtBQUFBLE1BQ3ZDLE9BQU87QUFDTixhQUFLLHlCQUF5QixFQUFFLE1BQU0sWUFBWTtBQUFBLE1BQ25EO0FBQUEsSUFDRCxHQUFHLEdBQUc7QUFBQSxFQUNQO0FBS0EsV0FBU1UsYUFBWSxjQUFjO0FBQUM7QUFFbkMsUUFBSSxjQUFjLEtBQUssSUFBSSxNQUFNLHNCQUFzQjtBQUN0RCxXQUFLLGtDQUFrQyxFQUFFLFVBQVUsSUFBSSxRQUFRO0FBQy9ELFdBQUsseUJBQXlCLEVBQUUsVUFBVSxJQUFJLFFBQVE7QUFDdEQ7QUFBQSxJQUNEO0FBRUEsUUFBSSxLQUFLLFVBQVUsaUJBQWlCLE1BQU0sd0JBQXdCO0FBQ2pFLGFBQU8sa0JBQWtCLEtBQUssTUFBTSxZQUFZO0FBQUEsSUFDakQ7QUFFQSxXQUFPLGtCQUFrQixLQUFLLE1BQU0sWUFBWTtBQUFBLEVBQ2pEO0FBUUEsV0FBUyxjQUFjO0FBQUM7QUFFdkIsVUFBTSxPQUFPLEtBQUssVUFBVSxNQUFNO0FBQ2xDLFFBQUksQ0FBQyxTQUFTLFVBQVUsRUFBRSxRQUFRLElBQUksTUFBTSxJQUFJO0FBQy9DLFlBQU0sSUFBSSxNQUFNLGtCQUFrQjtBQUFBLElBQ25DO0FBRUEsUUFBSSxDQUFDLEtBQUssWUFBWTtBQUNyQixZQUFNLElBQUksTUFBTSwyQkFBMkI7QUFBQSxJQUM1QztBQUVBLFVBQU0sWUFBWSxDQUFDO0FBQ25CLFVBQU0sV0FBVyxLQUFLLFdBQVc7QUFBQSxNQUNoQyxjQUFjLElBQUk7QUFBQSxJQUNuQjtBQUNBLGVBQVcsS0FBSyxVQUFVO0FBQ3pCLGdCQUFVLEtBQUs7QUFBQSxRQUNkLE9BQU8sa0JBQWtCLEtBQUssTUFBTSxFQUFFLEtBQUs7QUFBQSxRQUMzQyxPQUFPLEVBQUU7QUFBQSxNQUNWLENBQUM7QUFBQSxJQUNGO0FBRUEsaUJBQ0UsS0FBSyxNQUFNLFNBQVMsRUFDcEIsS0FBSyxNQUFNO0FBQUEsSUFBQyxDQUFDLEVBQ2IsTUFBTSxDQUFDLE1BQU07QUFDYix3QkFBa0IsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEVBQUU7QUFBQSxJQUN2RCxDQUFDO0FBRUYsV0FBTztBQUFBLEVBQ1I7QUFPQSxXQUFTLGlCQUFpQjtBQUFDO0FBRTFCLFVBQU0sT0FBTyxLQUFLLFVBQVUsTUFBTTtBQUNsQyxRQUFJLENBQUMsU0FBUyxVQUFVLEVBQUUsUUFBUSxJQUFJLE1BQU0sSUFBSTtBQUMvQyxZQUFNLElBQUksTUFBTSxrQkFBa0I7QUFBQSxJQUNuQztBQUVBLFFBQUksQ0FBQyxLQUFLLFlBQVk7QUFDckIsWUFBTSxJQUFJLE1BQU0sMkJBQTJCO0FBQUEsSUFDNUM7QUFFQSxpQkFDRSxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQ2IsS0FBSyxNQUFNO0FBQUEsSUFBQyxDQUFDLEVBQ2IsTUFBTSxDQUFDLE1BQU07QUFDYix3QkFBa0IsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEVBQUU7QUFBQSxJQUN2RCxDQUFDO0FBQUEsRUFDSDtBQUtBLFdBQVMsNkJBQTZCO0FBQUM7QUFHdEMsUUFBSSxLQUFLLGdDQUFnQyxNQUFNLFFBQVc7QUFDekQsV0FBSyxnQ0FBZ0MsSUFBSTtBQUFBLElBQzFDO0FBRUEsUUFBSSxLQUFLLGdDQUFnQyxJQUFJLEdBQUc7QUFDL0MsV0FBSyxnQ0FBZ0M7QUFDckMsYUFBTztBQUFBLElBQ1I7QUFFQSxTQUFLLGdDQUFnQztBQUVyQyxVQUFNVixXQUFVLEtBQUssVUFBVSxTQUFTO0FBRXhDLFFBQ0NBLGFBQVksVUFDWkEsYUFBWSxRQUNYLFFBQVFBLFFBQU8sS0FBS0EsU0FBUSxXQUFXLEdBQ3ZDO0FBQ0QsOEJBQXdCLEtBQUssTUFBTSxPQUFPO0FBRTFDLE1BQUFXLE1BQUssS0FBSyxJQUFJO0FBRWQsV0FBSztBQUFBLFFBQ0o7QUFBQSxRQUNBLEtBQUssVUFBVSw2QkFBNkI7QUFBQSxNQUM3QztBQUNBLFdBQUssVUFBVSxvQkFBb0IsRUFBRTtBQUNyQyxXQUFLLFVBQVUsYUFBYSxDQUFDLENBQUM7QUFDOUIsd0JBQWtCLE1BQU0sd0JBQXdCLHlCQUF5QjtBQUN6RSxhQUFPO0FBQUEsSUFDUjtBQUVBLFVBQU0sYUFBYSxLQUFLLFVBQVUsV0FBVztBQUM3QyxRQUNDLGVBQWUsVUFDZixlQUFlLFFBQ2YsV0FBVyxXQUFXLEdBQ3JCO0FBQ0QsV0FBSztBQUFBLFFBQ0o7QUFBQSxRQUNBLEtBQUssVUFBVSx5QkFBeUI7QUFBQSxNQUN6QztBQUFBLElBQ0QsT0FBTztBQUNOLFdBQUssVUFBVSxvQkFBb0IsRUFBRTtBQUFBLElBQ3RDO0FBRUEsU0FBSyxVQUFVLG9CQUFvQix5QkFBeUIsS0FBSyxJQUFJLENBQUM7QUFFdEUsUUFBSSxVQUFVO0FBQ2QsUUFBSSxlQUFlO0FBQ25CLGVBQVcsVUFBVVgsVUFBUztBQUM3QixVQUFJLFFBQVEsZUFBZSxRQUFXO0FBQ3JDLGVBQU8sYUFBYTtBQUNwQixrQkFBVTtBQUFBLE1BQ1g7QUFFQSxVQUFJLFFBQVEsVUFBVSxVQUFhLFFBQVEsVUFBVSxRQUFXO0FBQy9ELGVBQU8sUUFBUSxHQUFHLGNBQWM7QUFDaEMsZUFBTyxRQUFRLE9BQU87QUFDdEIsa0JBQVU7QUFDVjtBQUFBLE1BQ0Q7QUFFQSxVQUFJLFFBQVEsVUFBVSxRQUFXO0FBQ2hDLGVBQU8sUUFBUSxPQUFPO0FBQ3RCLGtCQUFVO0FBQUEsTUFDWDtBQUVBLFVBQUksUUFBUSxVQUFVLFFBQVc7QUFDaEMsZUFBTyxRQUFRLE9BQU87QUFDdEIsa0JBQVU7QUFBQSxNQUNYO0FBQUEsSUFDRDtBQUVBLFFBQUksU0FBUztBQUNaLFdBQUssVUFBVSxXQUFXQSxRQUFPO0FBQUEsSUFDbEM7QUFFQSw0QkFBd0IsS0FBSyxNQUFNLFFBQVE7QUFFM0MseUJBQXFCLE1BQU0sd0JBQXdCLHlCQUF5QjtBQUM1RSxXQUFPO0FBQUEsRUFDUjtBQU1BLFdBQVMsbUJBQW1CO0FBQUM7QUFFNUIsUUFBSSxDQUFDLEtBQUssWUFBWTtBQUNyQixZQUFNLElBQUksTUFBTSwyQkFBMkI7QUFBQSxJQUM1QztBQUVBLFVBQU0sV0FBVyxLQUFLLFdBQVc7QUFBQSxNQUNoQyxJQUFJLGNBQWM7QUFBQSxJQUNuQjtBQUVBLFFBQUksWUFBWSxLQUFLLFVBQVUsV0FBVztBQUMxQyxRQUFJLENBQUMsUUFBUSxTQUFTLEdBQUc7QUFDeEIsa0JBQVksQ0FBQztBQUFBLElBQ2Q7QUFFQSxVQUFNLGdCQUFnQixVQUFVLElBQUksQ0FBQ1ksT0FBTTtBQUMxQyxhQUFPQSxHQUFFO0FBQUEsSUFDVixDQUFDO0FBRUQsZUFBVyxLQUFLLFVBQVU7QUFDekIsVUFBSSxjQUFjLFFBQVEsRUFBRSxLQUFLLE1BQU0sSUFBSTtBQUMxQyxZQUFJLEVBQUUsWUFBWTtBQUFNLFlBQUUsVUFBVTtBQUFBLE1BQ3JDLE9BQU87QUFDTixZQUFJLEVBQUUsWUFBWTtBQUFPLFlBQUUsVUFBVTtBQUFBLE1BQ3RDO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFPQSxXQUFTLHdCQUF3QixPQUFPO0FBQUM7QUFDeEMsVUFBTSxZQUFZLENBQUM7QUFFbkIsUUFBSSxTQUFTLEtBQUssR0FBRztBQUNwQixjQUFRLE1BQ04sTUFBTSxHQUFHLEVBQ1QsSUFBSSxDQUFDQSxPQUFNO0FBQ1gsZUFBT0EsR0FBRSxLQUFLO0FBQUEsTUFDZixDQUFDLEVBQ0EsT0FBTyxDQUFDQSxPQUFNO0FBQ2QsZUFBT0EsT0FBTTtBQUFBLE1BQ2QsQ0FBQztBQUFBLElBQ0g7QUFFQSxRQUFJLFNBQVMsS0FBSyxLQUFLLFVBQVUsS0FBSyxHQUFHO0FBQ3hDLGdCQUFVLEtBQUs7QUFBQSxRQUNkLE9BQU8sa0JBQWtCLEtBQUssTUFBTSxLQUFLO0FBQUEsUUFDekM7QUFBQSxNQUNELENBQUM7QUFBQSxJQUNGLFdBQVcsUUFBUSxLQUFLLEdBQUc7QUFDMUIsaUJBQVcsS0FBSyxPQUFPO0FBQ3RCLGtCQUFVLEtBQUs7QUFBQSxVQUNkLE9BQU8sa0JBQWtCLEtBQUssTUFBTSxDQUFDO0FBQUEsVUFDckMsT0FBTztBQUFBLFFBQ1IsQ0FBQztBQUFBLE1BQ0Y7QUFFQSxjQUFRLE1BQU0sS0FBSyxHQUFHO0FBQUEsSUFDdkIsT0FBTztBQUNOLFlBQU0sSUFBSSxNQUFNLGtCQUFrQjtBQUFBLElBQ25DO0FBRUEsV0FBTztBQUFBLE1BQ047QUFBQSxNQUNBO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFPQSxXQUFTLHdCQUF3QixXQUFXO0FBQUM7QUFFNUMsVUFBTSxRQUFRLENBQUM7QUFFZixRQUFJLFFBQVEsU0FBUyxHQUFHO0FBQ3ZCLGlCQUFXLE9BQU8sV0FBVztBQUM1QixjQUFNLElBQUksTUFBTSxPQUFPO0FBQ3ZCLFlBQUksTUFBTTtBQUFXLGdCQUFNLEtBQUssQ0FBQztBQUFBLE1BQ2xDO0FBQUEsSUFDRDtBQUVBLFFBQUksTUFBTSxXQUFXLEdBQUc7QUFDdkIsYUFBTztBQUFBLElBQ1IsV0FBVyxNQUFNLFdBQVcsR0FBRztBQUM5QixhQUFPLE1BQU0sSUFBSTtBQUFBLElBQ2xCO0FBRUEsV0FBTyxNQUFNLEtBQUssR0FBRztBQUFBLEVBQ3RCO0FBUUEsV0FBUyxhQUFhLFdBQVc7QUFBQztBQUVqQyxRQUFJLFNBQVMsU0FBUyxHQUFHO0FBQ3hCLFlBQU0sU0FBUyx3QkFBd0IsS0FBSyxNQUFNLFNBQVM7QUFDM0Qsa0JBQVksUUFBUTtBQUFBLElBQ3JCLFdBQVcsY0FBYyxRQUFXO0FBQ25DLGtCQUFZLENBQUM7QUFBQSxJQUNkO0FBRUEsU0FBSyxVQUFVLGFBQWEsY0FBYyxTQUFTLENBQUM7QUFDcEQscUJBQWlCLEtBQUssSUFBSTtBQUUxQixRQUFJO0FBQ0gsWUFBTSxhQUFhLEtBQUssS0FBSztBQUFBLElBQzlCLFNBQVMsR0FBRztBQUNYLHdCQUFrQixNQUFNLHdCQUF3QixFQUFFLE9BQU87QUFBQSxJQUMxRDtBQUVBLG9CQUFnQixNQUFNLG9CQUFvQjtBQUFBLE1BQ3pDO0FBQUEsSUFDRCxDQUFDO0FBRUQsV0FBTyxJQUFJLFdBQVcsTUFBTTtBQUMzQixZQUFNLFlBQVk7QUFFbEIsVUFBSSxDQUFDLEtBQUssWUFBWTtBQUNyQixjQUFNLElBQUksTUFBTSwyQkFBMkI7QUFBQSxNQUM1QztBQUVBLFlBQU0sY0FBYyxLQUFLLFdBQVcsaUJBQWlCLGdCQUFnQjtBQUVyRSxVQUFJLGFBQWE7QUFDaEIsb0JBQVksUUFBUSxDQUFDLFNBQVM7QUFDN0IsZ0JBQU0sU0FBUyxLQUFLLFFBQVEsSUFBSSxjQUFjLFVBQVU7QUFDeEQsY0FBSSxRQUFRO0FBQ1gsbUJBQU8sVUFBVSxPQUFPLFNBQVM7QUFBQSxVQUNsQztBQUFBLFFBQ0QsQ0FBQztBQUFBLE1BQ0Y7QUFFQSxZQUFNLFdBQVcsS0FBSyxXQUFXLGlCQUFpQixVQUFVO0FBQzVELFVBQUksVUFBVTtBQUNiLGlCQUFTLFFBQVEsQ0FBQyxTQUFTO0FBQzFCLGdCQUFNLFNBQVMsS0FBSyxRQUFRLElBQUksY0FBYyxVQUFVO0FBQ3hELGNBQUksUUFBUTtBQUNYLG1CQUFPLFVBQVUsSUFBSSxTQUFTO0FBQUEsVUFDL0I7QUFBQSxRQUNELENBQUM7QUFBQSxNQUNGO0FBQUEsSUFDRCxDQUFDLEVBQUUsSUFBSTtBQUFBLEVBQ1I7QUFTQSxXQUFTLFVBQVUsS0FBSztBQUFDO0FBRXhCLFFBQUksQ0FBQztBQUFLLFlBQU0sS0FBSyxVQUFVLEtBQUs7QUFDcEMsUUFBSSxDQUFDO0FBQUssYUFBTyxRQUFRLFFBQVE7QUFFakMsVUFBTSxlQUFlLEtBQUssVUFBVSxTQUFTLENBQUMsQ0FBQztBQUUvQyw0QkFBd0IsS0FBSyxNQUFNLFNBQVM7QUFDNUMsVUFBTSxJQUFJLFVBQVUsRUFBRSxRQUFRLEtBQUssVUFBVSxxQkFBcUIsRUFBRSxDQUFDLEVBQUU7QUFBQSxNQUN0RTtBQUFBLElBQ0Q7QUFFQSxVQUFNQyxXQUFTLFVBQVU7QUFDekIsV0FBT0EsU0FDTCxNQUFNLEtBQUssWUFBWSxFQUN2QixLQUFLLENBQUMsYUFBYTtBQUNuQixZQUFNLGNBQWMsU0FBUyxRQUFRLElBQUksY0FBYztBQUN2RCxVQUFJLGVBQWUsWUFBWSxRQUFRLGtCQUFrQixNQUFNLElBQUk7QUFDbEUsZUFBTyxTQUFTLEtBQUs7QUFBQSxNQUN0QjtBQUVBLFlBQU0sSUFBSSxVQUFVLHdCQUF3QixXQUFXLEVBQUU7QUFBQSxJQUMxRCxDQUFDLEVBQ0EsS0FBSyxDQUFDLFNBQVM7QUFDZixVQUFJO0FBQ0gsZUFBTyxRQUFRLFFBQVEsS0FBSyxNQUFNLE9BQU8sSUFBSSxDQUFDLENBQUM7QUFBQSxNQUNoRCxTQUFTLEdBQUc7QUFDWCxjQUFNLElBQUksVUFBVSw2QkFBNkI7QUFBQSxNQUNsRDtBQUFBLElBQ0QsQ0FBQztBQUFBLEVBQ0g7QUFLQSxXQUFTRixRQUFPO0FBQUM7QUFFaEIsU0FBS2Isb0JBQW1CLEVBQUUsTUFBTSxVQUFVO0FBQzFDLDRCQUF3QixLQUFLLE1BQU0sUUFBUTtBQUMzQyx5QkFBcUIsS0FBS1cscUJBQW9CLEdBQUcsU0FBUyxNQUFNO0FBQUEsRUFDakU7QUFLQSxXQUFTSyxRQUFPO0FBQUM7QUFFaEIsUUFBSSxLQUFLLFVBQVUsWUFBWSxNQUFTLE1BQU0sTUFBTTtBQUNuRDtBQUFBLElBQ0Q7QUFFQSxRQUFJLEtBQUtoQixvQkFBbUIsRUFBRSxNQUFNLFlBQVksMEJBQTBCO0FBQ3pFO0FBQUEsSUFDRDtBQUVBLElBQUFZLGFBQVksS0FBSyxJQUFJO0FBQ3JCLFVBQU0sbUJBQW1CLDJCQUEyQixLQUFLLElBQUk7QUFDN0QsVUFBTSxtQkFBbUIsS0FBSyxVQUFVLGFBQWEsTUFBTTtBQUUzRCxRQUFJLHFCQUFxQixTQUFTLHFCQUFxQixNQUFNO0FBQzVELFlBQU0saUJBQWlCLEtBQUssVUFBVSxxQkFBcUI7QUFDM0QsVUFBSSxtQkFBbUIsTUFBTTtBQUM1QixhQUFLLFVBQVUsdUJBQXVCLEtBQUs7QUFDM0MsYUFBSyxVQUFVLCtCQUErQixTQUFTO0FBQ3ZELGFBQUssTUFBTSxFQUFFLEtBQUssTUFBTTtBQUN2QixVQUFBSSxNQUFLLEtBQUssSUFBSTtBQUFBLFFBQ2YsQ0FBQztBQUFBLE1BQ0Y7QUFFQTtBQUFBLElBQ0Q7QUFFQSxTQUFLaEIsb0JBQW1CLEVBQUUsTUFBTSxhQUFhO0FBQzdDLFNBQUtBLG9CQUFtQixFQUFFLE1BQU0sVUFBVTtBQUMxQyw0QkFBd0IsS0FBSyxNQUFNLE1BQU07QUFFekMsc0JBQWtCLEtBQUtXLHFCQUFvQixHQUFHLFNBQVMsTUFBTTtBQUU3RCxRQUFJLFdBQVcsTUFBTTtBQUNwQixpQ0FBMkIsS0FBSyxJQUFJO0FBQ3BDLE1BQUFDLGFBQVksS0FBSyxJQUFJO0FBQ3JCLFdBQUtaLG9CQUFtQixFQUFFLE1BQU0sZUFBZSxZQUFZO0FBQzNELG1CQUFhLEtBQUssSUFBSTtBQUFBLElBQ3ZCLENBQUMsRUFDQyxJQUFJLEVBQ0osTUFBTSxDQUFDLE1BQU07QUFDYix3QkFBa0IsTUFBTSx3QkFBd0IsRUFBRSxPQUFPO0FBQUEsSUFDMUQsQ0FBQztBQUFBLEVBQ0g7QUFLQSxXQUFTLFNBQVM7QUFDakIsUUFBSSxLQUFLQSxvQkFBbUIsRUFBRSxNQUFNLFlBQVksMEJBQTBCO0FBQ3pFLE1BQUFhLE1BQUssS0FBSyxJQUFJO0FBQUEsSUFDZixPQUFPO0FBQ04sTUFBQUcsTUFBSyxLQUFLLElBQUk7QUFBQSxJQUNmO0FBQUEsRUFDRDtBQU9BLFdBQVNDLG9CQUFtQjtBQUMzQixVQUFNWCxRQUFPO0FBS2IsSUFBQUEsTUFBSyx1QkFBdUIsSUFBSSxDQUFDLFVBQVU7QUFDMUMsWUFBTSxVQUFVO0FBQUEsUUFDZjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRDtBQUNBLFVBQUksbUJBQW1CLGFBQWE7QUFDbkMsY0FBTSxRQUFRLHVCQUF1QixTQUFTLGdCQUFnQixPQUFPO0FBQ3JFLFlBQUksaUJBQWlCLGFBQWE7QUFDakMsZ0JBQU0sUUFBUSxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsT0FBTztBQUUzRCxjQUFJLFlBQVlBLE1BQUssVUFBVSxXQUFXO0FBQzFDLHNCQUFZLFVBQVUsT0FBTyxDQUFDLE1BQU07QUFDbkMsbUJBQU8sVUFBVSxFQUFFO0FBQUEsVUFDcEIsQ0FBQztBQUVELHVCQUNFLEtBQUtBLE9BQU0sU0FBUyxFQUNwQixLQUFLLE1BQU07QUFDWCw0QkFBZ0JBLE9BQU0sNkJBQTZCO0FBQUEsY0FDbEQ7QUFBQSxZQUNELENBQUM7QUFBQSxVQUNGLENBQUMsRUFDQSxNQUFNLENBQUMsTUFBTTtBQUNiLDhCQUFrQkEsT0FBTSx3QkFBd0IsRUFBRSxPQUFPO0FBQUEsVUFDMUQsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUtBLElBQUFBLE1BQUtZLGtCQUFpQixJQUFJLENBQUMsVUFBVTtBQUNwQyxZQUFNLE9BQU8sTUFBTSxhQUFhO0FBRWhDLGlCQUFXLENBQUMsRUFBRSxPQUFPLEtBQUssT0FBTyxRQUFRLElBQUksR0FBRztBQUMvQyxZQUFJLFlBQVlaLE9BQU07QUFDckI7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUNBLE1BQUFPLE1BQUssS0FBS1AsS0FBSTtBQUFBLElBQ2Y7QUFLQSxJQUFBQSxNQUFLLGlCQUFpQixJQUFJLENBQUMsVUFBVTtBQUNwQyxZQUFNLE9BQU8sTUFBTSxhQUFhO0FBQ2hDLFlBQU0sVUFBVSxPQUFPLENBQUM7QUFFeEIsVUFBSSxtQkFBbUIsYUFBYTtBQUNuQyxZQUNDLFFBQVEsYUFBYSxjQUFjLEtBQ25DLFFBQVEsYUFBYSxjQUFjLE1BQU0sa0JBQ3hDO0FBQ0QsMEJBQWdCQSxPQUFNLGtCQUFrQjtBQUFBLFlBQ3ZDLE1BQU0sTUFBTTtBQUFBLFlBQ1osT0FBTyxRQUFRO0FBQUEsWUFDZixTQUFTLFFBQVE7QUFBQSxVQUNsQixDQUFDO0FBQUEsUUFDRixXQUNDLFFBQVEsYUFBYSxjQUFjLEtBQ25DLFFBQVEsYUFBYSxjQUFjLE1BQU0sVUFDeEM7QUFBQSxRQUNGO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFLQSxJQUFBQSxNQUFLLGtCQUFrQixJQUFJLENBQUMsVUFBVTtBQUNyQyxrQkFBWSxLQUFLQSxLQUFJO0FBQ3JCLHNCQUFnQkEsT0FBTSxtQkFBbUIsT0FBTyxNQUFNO0FBQUEsSUFDdkQ7QUFFQSxJQUFBQSxNQUFLLGVBQWUsSUFBSSxDQUFDLFVBQVU7QUFDbEMsWUFBTSxPQUFPLE1BQU0sYUFBYTtBQUNoQyxZQUFNLFVBQVUsS0FBSyxNQUFNO0FBRTNCLFVBQUk7QUFFSixVQUFJLG1CQUFtQixhQUFhO0FBQ25DLFlBQUksUUFBUSxhQUFhLGNBQWMsR0FBRztBQUN6QyxpQkFBTyxRQUFRLGFBQWEsY0FBYztBQUFBLFFBQzNDLFdBQVcsWUFBWSxNQUFNO0FBQzVCLFVBQUFVLE1BQUssS0FBSyxJQUFJO0FBQUEsUUFFZixPQUFPO0FBQ04sZ0JBQU0sSUFBSSxRQUFRLFFBQVEsSUFBSSxjQUFjLEdBQUc7QUFDL0MsY0FBSSxhQUFhLGVBQWUsRUFBRSxhQUFhLGNBQWMsR0FBRztBQUMvRCxtQkFBTyxFQUFFLGFBQWEsY0FBYztBQUFBLFVBQ3JDO0FBQUEsUUFDRDtBQUFBLE1BQ0QsT0FBTztBQUNOO0FBQUEsTUFDRDtBQUVBLGNBQVEsTUFBTTtBQUFBLFFBQ2IsS0FBSztBQUNKLHFDQUEyQixLQUFLVixPQUFNLEtBQUs7QUFDM0M7QUFBQSxRQUNELEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSixxQ0FBMkIsS0FBS0EsT0FBTSxLQUFLO0FBQzNDO0FBQUEsUUFDRCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0oscUNBQTJCLEtBQUtBLE9BQU0sS0FBSztBQUMzQztBQUFBLE1BQ0Y7QUFBQSxJQUNEO0FBRUEsVUFBTSxRQUFRQSxNQUFLLFVBQVUsbUJBQW1CLENBQUMsT0FBTyxDQUFDO0FBRXpELGVBQVcsQ0FBQyxFQUFFLElBQUksS0FBSyxPQUFPLFFBQVEsS0FBSyxHQUFHO0FBQzdDLE1BQUFBLE1BQUtLLHFCQUFvQixFQUN2QixjQUFjLElBQUksY0FBYyxlQUFlLEVBQy9DLGlCQUFpQixNQUFNLFNBQVUsT0FBTztBQUN4QyxjQUFNLFVBQVU7QUFBQSxVQUNmO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQ0EsWUFBSSxtQkFBbUIsYUFBYTtBQUNuQztBQUFBLFFBQ0Q7QUFFQSxlQUFPLEtBQUtMLEtBQUk7QUFBQSxNQUNqQixDQUFDO0FBRUYsTUFBQUEsTUFBS0sscUJBQW9CLEVBQ3ZCLGNBQWMsSUFBSSxjQUFjLDZCQUE2QixFQUM3RCxpQkFBaUIsTUFBTSxTQUFVLE9BQU87QUFDeEMsWUFBSUwsTUFBSyxVQUFVLFlBQVksTUFBUyxNQUFNLE1BQU07QUFDbkQ7QUFBQSxRQUNEO0FBRUEsY0FBTSxPQUFPLE1BQU0sYUFBYTtBQUNoQyxjQUFNLFVBQVUsT0FBTyxDQUFDO0FBQ3hCLFlBQUksbUJBQW1CLGFBQWE7QUFDbkMsZ0JBQU0sVUFBVSxRQUFRO0FBQUEsWUFDdkIsSUFBSSxjQUFjO0FBQUEsVUFDbkI7QUFDQSxjQUFJLG1CQUFtQixhQUFhO0FBQ25DLGdCQUFJLFFBQVEsVUFBVSxTQUFTLE9BQU8sR0FBRztBQUN4Qyw2QkFBZSxLQUFLQSxLQUFJO0FBRXhCLDhCQUFnQkEsT0FBTSw2QkFBNkIsQ0FBQyxDQUFDO0FBQUEsWUFDdEQsT0FBTztBQUNOLG9CQUFNYSxXQUFVO0FBQUEsZ0JBQ2Y7QUFBQSxnQkFDQTtBQUFBLGdCQUNBO0FBQUEsY0FDRDtBQUNBLGtCQUFJQSxvQkFBbUIsYUFBYTtBQUNuQztBQUFBLGNBQ0Q7QUFFQSxxQkFBTyxLQUFLYixLQUFJO0FBQUEsWUFDakI7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBLE1BQ0QsQ0FBQztBQUdGLE1BQUFBLE1BQUssaUJBQWlCLE1BQU1BLE1BQUssdUJBQXVCLENBQUM7QUFBQSxJQUMxRDtBQUVBLElBQUFBLE1BQUssaUJBQWlCLGtCQUFrQkEsTUFBSyxrQkFBa0IsQ0FBQztBQUNoRSxJQUFBQSxNQUFLLGlCQUFpQixTQUFTQSxNQUFLLGlCQUFpQixDQUFDO0FBQ3RELElBQUFBLE1BQUssaUJBQWlCLFdBQVdBLE1BQUssZUFBZSxDQUFDO0FBRXRELFdBQU9BO0FBQUEsRUFDUjtBQU1BLFdBQVMsd0JBQXdCLFlBQVk7QUFBQztBQUM3QyxlQUFXLE1BQU07QUFDaEIsWUFBTSxZQUFZLEtBQUssVUFBVSxXQUFXO0FBQzVDLFlBQU0sZUFDTCxRQUFRLFNBQVMsS0FDakIsVUFBVSxTQUFTLEtBQ25CLEtBQUssVUFBVSxtQkFBbUIsTUFBTTtBQUV6QyxVQUFJLGNBQWM7QUFHakIsYUFBSyxVQUFVLCtCQUErQixPQUFPO0FBQ3JEO0FBQUEsTUFDRDtBQUVBLFVBQUksZUFBZSxXQUFXO0FBQzdCLGFBQUssVUFBVSwrQkFBK0IsU0FBUztBQUN2RDtBQUFBLE1BQ0Q7QUFFQSxVQUFJLEtBQUtLLHFCQUFvQixFQUFFLFVBQVUsU0FBUyxNQUFNLEdBQUc7QUFDMUQsYUFBSyxVQUFVLCtCQUErQixNQUFNO0FBQ3BEO0FBQUEsTUFDRDtBQUVBLFlBQU1ULFdBQVUsS0FBSyxVQUFVLFNBQVM7QUFDeEMsVUFDQ0EsYUFBWSxVQUNaQSxhQUFZLFFBQ1gsUUFBUUEsUUFBTyxLQUFLQSxTQUFRLFdBQVcsR0FDdkM7QUFDRCxhQUFLLFVBQVUsK0JBQStCLE9BQU87QUFDckQ7QUFBQSxNQUNEO0FBRUEsVUFBSSxZQUFZO0FBQ2YsYUFBSyxVQUFVLCtCQUErQixVQUFVO0FBQ3hEO0FBQUEsTUFDRDtBQUFBLElBQ0QsR0FBRyxDQUFDO0FBQUEsRUFDTDtBQU9BLFdBQVNrQix5QkFBd0I7QUFBQztBQUVqQyxRQUFJLENBQUMsS0FBSyxZQUFZO0FBQ3JCLFlBQU0sSUFBSSxNQUFNLDJCQUEyQjtBQUFBLElBQzVDO0FBRUEsU0FBS1QscUJBQW9CLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDNUMsSUFBSSxjQUFjO0FBQUEsSUFDbkI7QUFDQSxTQUFLLHNCQUFzQixJQUFJLEtBQUssV0FBVztBQUFBLE1BQzlDLElBQUksY0FBYztBQUFBLElBQ25CO0FBQ0EsU0FBSyxzQkFBc0IsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUM5QyxJQUFJLGNBQWM7QUFBQSxJQUNuQjtBQUNBLFNBQUtYLG9CQUFtQixJQUFJLEtBQUssV0FBVztBQUFBLE1BQzNDLElBQUksY0FBYztBQUFBLElBQ25CO0FBQ0EsU0FBSyx5QkFBeUIsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUNqRCxJQUFJLGNBQWM7QUFBQSxJQUNuQjtBQUNBLFNBQUsseUJBQXlCLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDakQsSUFBSSxjQUFjO0FBQUEsSUFDbkI7QUFDQSxTQUFLLGtDQUFrQyxJQUN0QyxLQUFLLHlCQUF5QixFQUFFO0FBQ2pDLFNBQUssb0JBQW9CLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDNUMsSUFBSSxjQUFjO0FBQUEsSUFDbkI7QUFDQSxTQUFLLCtCQUErQixJQUFJLEtBQUssV0FBVztBQUFBLE1BQ3ZELElBQUksY0FBYztBQUFBLElBQ25CO0FBQ0EsU0FBSyxpQ0FBaUMsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUN6RCxJQUFJLGNBQWM7QUFBQSxJQUNuQjtBQUFBLEVBQ0Q7QUFLQSxXQUFTLGVBQWU7QUFBQztBQUV4QixRQUFJLEtBQUtBLG9CQUFtQixFQUFFLE1BQU0sWUFBWSwwQkFBMEI7QUFDekU7QUFBQSxJQUNEO0FBRUEsUUFBSSxLQUFLLFVBQVUsWUFBWSxLQUFLLE1BQU0sTUFBTTtBQUMvQztBQUFBLElBQ0Q7QUFFQSxRQUFJLFdBQVcsTUFBTTtBQUNwQixpQ0FBMkIsS0FBSyxJQUFJO0FBQ3BDLHFCQUFlO0FBQUEsUUFDZDtBQUFBLFFBQ0EsS0FBS1cscUJBQW9CO0FBQUEsUUFDekIsS0FBS1gsb0JBQW1CO0FBQUEsUUFDeEIsS0FBSyxVQUFVLFVBQVUsQ0FBQyxDQUFDO0FBQUEsTUFDNUI7QUFBQSxJQUNELENBQUMsRUFBRSxJQUFJO0FBRVAsV0FBTztBQUFBLEVBQ1I7QUFNQSxXQUFTcUIsZUFBYztBQUV0QixXQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQThEUjtBQXZ3RUEsTUFtRU0sMkJBTUFoQixzQkFPQWEsb0JBT0EseUJBT0FkLHVCQU9BLGlCQU1BLG1CQU9BLG9CQU9BTyx1QkFPQSx3QkFPQSx3QkFPQVgsc0JBT0EsMkJBTUEsMkJBTUEsb0NBU0Esc0JBT0EsaUNBT0EsbUNBTUEsa0NBTUEsb0JBS0Esc0JBTUEsb0JBTUEscUJBTUEsc0JBTUEsd0JBS0Esd0JBbUVBO0FBelNOLE1BQUFzQixlQUFBO0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQSxNQUFBQztBQUtBO0FBQ0E7QUFLQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUFBO0FBQ0E7QUFDQTtBQWdCQSxNQUFNLDRCQUE0QjtBQU1sQyxNQUFNbEIsdUJBQXNCLE9BQU8sZUFBZTtBQU9sRCxNQUFNYSxxQkFBb0IsT0FBTyxtQkFBbUI7QUFPcEQsTUFBTSwwQkFBMEIsT0FBTyx5QkFBeUI7QUFPaEUsTUFBTWQsd0JBQXVCLE9BQU8sZ0JBQWdCO0FBT3BELE1BQU0sa0JBQWtCLE9BQU8saUJBQWlCO0FBTWhELE1BQU0sb0JBQW9CLE9BQU8sbUJBQW1CO0FBT3BELE1BQU0scUJBQXFCLE9BQU8sb0JBQW9CO0FBT3RELE1BQU1PLHdCQUF1QixPQUFPLGdCQUFnQjtBQU9wRCxNQUFNLHlCQUF5QixPQUFPLGtCQUFrQjtBQU94RCxNQUFNLHlCQUF5QixPQUFPLGtCQUFrQjtBQU94RCxNQUFNWCx1QkFBc0IsT0FBTyxlQUFlO0FBT2xELE1BQU0sNEJBQTRCLE9BQU8scUJBQXFCO0FBTTlELE1BQU0sNEJBQTRCLE9BQU8scUJBQXFCO0FBTTlELE1BQU0scUNBQXFDO0FBQUEsUUFDMUM7QUFBQSxNQUNEO0FBT0EsTUFBTSx1QkFBdUIsT0FBTyxnQkFBZ0I7QUFPcEQsTUFBTSxrQ0FBa0MsT0FBTywyQkFBMkI7QUFPMUUsTUFBTSxvQ0FBb0MsT0FBTyw2QkFBNkI7QUFNOUUsTUFBTSxtQ0FBbUMsT0FBTyw4QkFBOEI7QUFNOUUsTUFBTSxxQkFBcUI7QUFLM0IsTUFBTSx1QkFBdUI7QUFNN0IsTUFBTSxxQkFBcUI7QUFNM0IsTUFBTSxzQkFBc0I7QUFNNUIsTUFBTSx1QkFBdUI7QUFNN0IsTUFBTSx5QkFBeUI7QUFLL0IsTUFBTSx5QkFBeUI7QUFtRS9CLE1BQU0sU0FBTixjQUFxQixjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFJbEMsY0FBYztBQUNiLGdCQUFNO0FBQ04sVUFBQVMsb0JBQW1CLEtBQUssSUFBSTtBQUFBLFFBQzdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLDBDQUEwQztBQUFBLFFBQzdEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFjQSxJQUFJLFFBQVE7QUFDWCxpQkFBTyx3QkFBd0IsS0FBSyxNQUFNLEtBQUssVUFBVSxXQUFXLENBQUM7QUFBQSxRQUN0RTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxXQUFXLGlCQUFpQjtBQUMzQixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWNBLElBQUksTUFBTSxPQUFPO0FBQUM7QUFFakIsZ0JBQU0sU0FBUyx3QkFBd0IsS0FBSyxNQUFNLEtBQUs7QUFDdkQsdUJBQ0UsS0FBSyxNQUFNLE9BQU8sU0FBUyxFQUMzQixLQUFLLE1BQU07QUFBQSxVQUFDLENBQUMsRUFDYixNQUFNLENBQUMsTUFBTTtBQUNiLDhCQUFrQixNQUFNLHdCQUF3QixFQUFFLE9BQU87QUFBQSxVQUMxRCxDQUFDO0FBQUEsUUFDSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFtREEsSUFBSSxXQUFXO0FBQ2QsaUJBQU8sT0FBTztBQUFBLFlBQ2IsQ0FBQztBQUFBLFlBQ0QsTUFBTTtBQUFBLFlBQ047QUFBQSxjQUNDLGlCQUFpQixDQUFDLFNBQVMsT0FBTztBQUFBLGNBQ2xDLGdCQUFnQjtBQUFBLGNBQ2hCLFNBQVMsQ0FBQztBQUFBLGNBQ1YsV0FBVyxDQUFDO0FBQUEsY0FDWixnQkFBZ0I7QUFBQSxjQUNoQixNQUFNO0FBQUEsY0FDTixNQUFNLElBQUksR0FBRyxHQUFHLEVBQUUsU0FBUztBQUFBLGNBQzNCLFVBQVU7QUFBQSxnQkFDVCxVQUFVO0FBQUEsZ0JBQ1YsT0FBTztBQUFBLGdCQUNQLFlBQVk7QUFBQSxjQUNiO0FBQUEsY0FDQSxLQUFLO0FBQUEsY0FDTCxRQUFRO0FBQUEsZ0JBQ1Asb0JBQW9CO0FBQUEsZ0JBQ3BCLHdCQUF3QjtBQUFBLGdCQUN4QixvQkFBb0I7QUFBQSxnQkFDcEIsZ0JBQWdCO0FBQUEsa0JBQ2YsTUFBTTtBQUFBLGtCQUNOLEtBQUs7QUFBQSxrQkFDTCxPQUNDO0FBQUEsZ0JBQ0Y7QUFBQSxnQkFDQSxjQUNDO0FBQUEsZ0JBQ0Qsb0JBQ0M7QUFBQSxjQUNGO0FBQUEsY0FDQSxVQUFVO0FBQUEsZ0JBQ1QsU0FBUztBQUFBLGdCQUNULFVBQVU7QUFBQSxnQkFDVixjQUFjO0FBQUEsY0FDZjtBQUFBLGNBQ0EsT0FBTztBQUFBLGdCQUNOLFVBQVU7QUFBQSxnQkFDVixRQUFRO0FBQUEsZ0JBQ1IsTUFBTTtBQUFBLGdCQUNOLGFBQWE7QUFBQSxnQkFDYixTQUFTO0FBQUEsa0JBQ1IsUUFBUTtBQUFBLGdCQUNUO0FBQUEsY0FDRDtBQUFBLGNBQ0EsUUFBUTtBQUFBLGdCQUNQLGNBQWM7QUFBQSxnQkFDZCxNQUFNO0FBQUEsZ0JBQ04sVUFBVTtBQUFBLGNBQ1g7QUFBQSxjQUNBLFNBQVM7QUFBQSxnQkFDUixPQUFPO0FBQUEsZ0JBQ1AscUJBQXFCO0FBQUEsY0FDdEI7QUFBQSxjQUNBLFNBQVM7QUFBQSxnQkFDUixVQUFVO0FBQUEsZ0JBQ1YsZUFBZTtBQUFBLGdCQUNmLGVBQWU7QUFBQSxnQkFDZixRQUFRO0FBQUEsY0FDVDtBQUFBLGNBQ0EsV0FBVztBQUFBLGdCQUNWLFdBQVc7QUFBQSxjQUNaO0FBQUEsY0FDQSxXQUFXO0FBQUEsZ0JBQ1YsTUFBTVksYUFBWTtBQUFBLGNBQ25CO0FBQUEsY0FDQSxpQkFBaUI7QUFBQTtBQUFBLGdCQUVoQixVQUFVLHFCQUFxQjtBQUFBLGNBQ2hDO0FBQUEsY0FFQSxRQUFRO0FBQUEsZ0JBQ1AsV0FBVztBQUFBLGdCQUNYLFlBQVksQ0FBQyxRQUFRLFVBQVU7QUFBQSxjQUNoQztBQUFBLFlBQ0Q7QUFBQSxZQUNBcEIsMEJBQXlCLEtBQUssSUFBSTtBQUFBLFVBQ25DO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxDQUFDLG9CQUFvQixJQUFJO0FBQ3hCLGdCQUFNSyxRQUFPO0FBQ2IsZ0JBQU0sb0JBQW9CLEVBQUU7QUFFNUIsVUFBQWMsdUJBQXNCLEtBQUtkLEtBQUk7QUFDL0IsVUFBQVcsa0JBQWlCLEtBQUtYLEtBQUk7QUFFMUIsY0FDQ0EsTUFBSyxVQUFVLEtBQUssTUFBTSxRQUMxQkEsTUFBSyxVQUFVLHFCQUFxQixNQUFNLE1BQ3pDO0FBQ0QsWUFBQUEsTUFDRSxNQUFNLEVBQ04sS0FBSyxNQUFNO0FBQ1gsa0JBQUk7QUFDSixrQkFBSUEsTUFBSyxhQUFhLE9BQU8sR0FBRztBQUMvQix5QkFBUyxhQUFhLEtBQUtBLE9BQU1BLE1BQUssYUFBYSxPQUFPLENBQUM7QUFBQSxjQUM1RCxPQUFPO0FBQ04seUJBQVMsYUFBYSxLQUFLQSxPQUFNLENBQUMsQ0FBQztBQUFBLGNBQ3BDO0FBRUEscUJBQ0UsS0FBSyxNQUFNO0FBQUEsY0FBQyxDQUFDLEVBQ2IsTUFBTSxDQUFDLE1BQU07QUFDYixrQ0FBa0JBLE9BQU0sd0JBQXdCLEdBQUcsQ0FBQyxFQUFFO0FBQUEsY0FDdkQsQ0FBQztBQUFBLFlBQ0gsQ0FBQyxFQUNBLE1BQU0sQ0FBQyxNQUFNO0FBQ2IsZ0NBQWtCQSxPQUFNLHdCQUF3QixHQUFHLENBQUMsRUFBRTtBQUN0RCxvQkFBTTtBQUFBLFlBQ1AsQ0FBQztBQUFBLFVBQ0g7QUFFQSxjQUFJLFlBQVlBLE1BQUs7QUFDckIsVUFBQUEsTUFBSyxjQUFjLEVBQUU7QUFBQSxZQUNwQixJQUFJLFNBQVMsV0FBWTtBQUN4QixrQkFBSSxTQUFTLElBQUksS0FBSyxnQkFBZ0IsZUFBZTtBQUNwRCxzQkFBTSxJQUFJLEtBQUssV0FBVyxHQUFHLFNBQVM7QUFFdEMsb0JBQUksY0FBYyxHQUFHO0FBQ3BCLDhCQUFZO0FBQ1osK0JBQ0UsS0FBS0EsT0FBTSxDQUFDLEVBQ1osS0FBSyxNQUFNO0FBQUEsa0JBQUMsQ0FBQyxFQUNiLE1BQU0sQ0FBQyxNQUFNO0FBQ2Isc0NBQWtCQSxPQUFNLHdCQUF3QixHQUFHLENBQUMsRUFBRTtBQUFBLGtCQUN2RCxDQUFDO0FBQUEsZ0JBQ0g7QUFBQSxjQUNEO0FBQUEsWUFDRCxDQUFDO0FBQUEsVUFDRjtBQUVBLHFDQUEyQixLQUFLQSxLQUFJO0FBRXBDLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsUUFBUTtBQUFDO0FBQ1IsY0FBSSxLQUFLLFVBQVUsVUFBVSxNQUFNLE1BQU07QUFDeEM7QUFBQSxVQUNEO0FBRUEsaUJBQU8sS0FBSyxJQUFJO0FBQUEsUUFDakI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLE1BQU1KLFVBQVM7QUFBQztBQUNmLGNBQUksS0FBSyxVQUFVLFVBQVUsTUFBTSxNQUFNO0FBQ3hDO0FBQUEsVUFDRDtBQUVBLGNBQUksV0FBVyxNQUFNO0FBQ3BCLHdCQUFZLEtBQUssSUFBSTtBQUNyQixZQUFBVSxhQUFZLEtBQUssTUFBTVYsUUFBTztBQUFBLFVBQy9CLENBQUMsRUFDQyxJQUFJLEVBQ0osTUFBTSxDQUFDLE1BQU07QUFDYiw4QkFBa0IsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEVBQUU7QUFBQSxVQUN2RCxDQUFDO0FBQUEsUUFDSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxPQUFPO0FBQUM7QUFDUCxjQUFJLFdBQVcsTUFBTTtBQUNwQix3QkFBWSxLQUFLLElBQUk7QUFDckIsdUJBQVcsS0FBSyxJQUFJO0FBQUEsVUFDckIsQ0FBQyxFQUNDLElBQUksRUFDSixNQUFNLENBQUMsTUFBTTtBQUNiLDhCQUFrQixNQUFNLHdCQUF3QixHQUFHLENBQUMsRUFBRTtBQUFBLFVBQ3ZELENBQUM7QUFBQSxRQUNIO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxNQUFNLEtBQUs7QUFBQztBQUVYLGNBQUksZUFBZSxLQUFLO0FBQ3ZCLGtCQUFNLElBQUksU0FBUztBQUFBLFVBQ3BCO0FBRUEsY0FBSSxRQUFRLFVBQWEsUUFBUSxNQUFNO0FBQ3RDLGtCQUFNLGVBQWUsR0FBRztBQUFBLFVBQ3pCO0FBRUEsaUJBQU8sVUFBVSxLQUFLLE1BQU0sR0FBRyxFQUFFLEtBQUssQ0FBQyxRQUFRO0FBQzlDLGdCQUNDLFNBQVMsR0FBRyxLQUNaLFFBQVEsR0FBRyxJQUFLLGVBQWUsT0FDL0IsZUFBZSxLQUNkO0FBQ0QsbUJBQUssY0FBYyxHQUFHO0FBQUEsWUFDdkI7QUFBQSxVQUNELENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxvQkFBb0I7QUFDbkIsZ0JBQU0sa0JBQWtCO0FBQ3hCLGdCQUFNc0IsWUFBVyxZQUFZO0FBQUU7QUFFL0IscUJBQVcsQ0FBQyxFQUFFLElBQUksS0FBSyxPQUFPLFFBQVEsQ0FBQyxTQUFTLE9BQU8sQ0FBQyxHQUFHO0FBRTFELFlBQUFBLFVBQVMsaUJBQWlCLE1BQU0sS0FBS04sa0JBQWlCLENBQUM7QUFBQSxVQUN4RDtBQUVBLDhCQUFvQixLQUFLLElBQUk7QUFDN0IsVUFBQWYsc0JBQXFCLEtBQUssSUFBSTtBQUM5Qix1QkFBYSxLQUFLLElBQUk7QUFFdEIsY0FBSSxXQUFXLE1BQU07QUFDcEIsd0JBQVksS0FBSyxJQUFJO0FBQ3JCLFlBQUFTLGFBQVksS0FBSyxJQUFJO0FBQUEsVUFDdEIsQ0FBQyxFQUFFLElBQUk7QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSx1QkFBdUI7QUFDdEIsZ0JBQU0scUJBQXFCO0FBQzNCLGdCQUFNWSxZQUFXLFlBQVk7QUFBRTtBQUcvQixxQkFBVyxDQUFDLEVBQUUsSUFBSSxLQUFLLE9BQU8sUUFBUSxDQUFDLFNBQVMsT0FBTyxDQUFDLEdBQUc7QUFDMUQsWUFBQUEsVUFBUyxvQkFBb0IsTUFBTSxLQUFLTixrQkFBaUIsQ0FBQztBQUFBLFVBQzNEO0FBRUEsbUNBQXlCLEtBQUssSUFBSTtBQUFBLFFBQ25DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVlBLGNBQWMsTUFBTTtBQUFDO0FBRXBCLGdCQUFNLGlCQUFpQixLQUFLLFVBQVUsV0FBVyxDQUFDLENBQUM7QUFDbkQsZ0JBQU0sV0FBVyxpQkFBaUIsVUFBVTtBQUM1QyxnQkFBTSxnQkFBZ0IsaUJBQWlCLGVBQWU7QUFDdEQsZ0JBQU0sZ0JBQWdCLGlCQUFpQixlQUFlO0FBQ3RELGdCQUFNLFNBQVMsaUJBQWlCLFFBQVE7QUFFeEMsY0FBSSxPQUFPO0FBQ1gsY0FBSSxrQkFBa0IsSUFBSTtBQUN6Qiw4QkFBa0IsTUFBTSx3QkFBd0Isc0JBQXNCO0FBQ3RFLG1CQUFPO0FBQUEsVUFDUjtBQUVBLGNBQUksa0JBQWtCLElBQUk7QUFDekIsOEJBQWtCLE1BQU0sd0JBQXdCLHNCQUFzQjtBQUN0RSxtQkFBTztBQUFBLFVBQ1I7QUFFQSxjQUFJLFNBQVMsTUFBTTtBQUNsQixrQkFBTSxJQUFJLE1BQU0sNkJBQTZCO0FBQUEsVUFDOUM7QUFFQSxnQkFBTSxNQUFNLFNBQVMsTUFBTSxVQUFVLGVBQWUsZUFBZSxNQUFNO0FBRXpFLGdCQUFNaEIsV0FBVSxDQUFDO0FBQ2pCLGNBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRztBQUNyQixrQkFBTSxJQUFJLE1BQU0scUJBQXFCO0FBQUEsVUFDdEM7QUFFQSxnQkFBTSxhQUFhO0FBRW5CLGNBQUksUUFBUSxDQUFDLE9BQU8sVUFBVTtBQUM3QixZQUFBQSxTQUFRLEtBQUs7QUFBQSxjQUNaO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxZQUNELENBQUM7QUFBQSxVQUNGLENBQUM7QUFFRCxtQ0FBeUIsS0FBSyxNQUFNLElBQUksSUFBSTtBQUM1QyxlQUFLLFVBQVUsV0FBV0EsUUFBTztBQUVqQywwQkFBZ0IsTUFBTSx1QkFBdUI7QUFBQSxZQUM1QyxTQUFBQTtBQUFBLFVBQ0QsQ0FBQztBQUVELGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSw2QkFBNkI7QUFDNUIscUNBQTJCLEtBQUssSUFBSTtBQUNwQyxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsT0FBTyxTQUFTO0FBQ2YsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLE9BQU8sbUJBQW1CO0FBQ3pCLGlCQUFPLENBQUMsZ0JBQWdCO0FBQUEsUUFDekI7QUFBQSxNQUNEO0FBeWhEQSw0QkFBc0IsTUFBTTtBQUFBO0FBQUE7OztBQ3p3RTVCLE1BZ0JNO0FBaEJOLE1BQUF1QixlQUFBO0FBQUE7QUFPQTtBQUNBLE1BQUFDO0FBUUEsTUFBTSxtQkFBbUIsSUFBSSxjQUFjO0FBRTNDLFVBQUk7QUFDSCx5QkFBaUI7QUFBQSxVQUNoQjtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBSUE7QUFBQSxRQUNEO0FBQUEsTUFDRCxTQUFTLEdBQUc7QUFDWDtBQUFBLFVBQ0MsU0FBUyxZQUFZLEVBQUUsY0FBYyxNQUFNO0FBQUEsVUFDM0M7QUFBQSxVQUNBLElBQUk7QUFBQSxRQUNMO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQzhOQSxXQUFTQyxvQkFBbUI7QUFBQztBQUU1QixTQUFLQyxrQkFBaUIsSUFBSSxDQUFDLFVBQVU7QUFDcEMsWUFBTSxPQUFPLE1BQU0sYUFBYTtBQUVoQyxpQkFBVyxDQUFDLEVBQUUsT0FBTyxLQUFLLE9BQU8sUUFBUSxJQUFJLEdBQUc7QUFDL0MsWUFBSSxZQUFZLE1BQU07QUFDckI7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUNBLE1BQUFDLE1BQUssS0FBSyxJQUFJO0FBQUEsSUFDZjtBQUVBLFFBQUksUUFBUTtBQUNaLFVBQU0sYUFBYSxLQUFLLFVBQVUsTUFBTTtBQUN4QyxRQUFJLE9BQU8sZUFBZSxVQUFVO0FBQ25DLGNBQVEsV0FBVyxNQUFNLEdBQUc7QUFBQSxJQUM3QjtBQUVBLFFBQ0MsVUFBVSxRQUNWLFVBQVUsVUFDVixRQUFRLEtBQUssTUFBTSxTQUNuQixNQUFNLFdBQVcsR0FDaEI7QUFDRCxjQUFRLENBQUMsUUFBUTtBQUFBLElBQ2xCO0FBRUEsZUFBVyxDQUFDLEVBQUUsSUFBSSxLQUFLLE9BQU8sUUFBUSxLQUFLLEdBQUc7QUFDN0MsNkJBQXVCLEtBQUssTUFBTSxJQUFJO0FBQUEsSUFDdkM7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQUVBLFdBQVMsdUJBQXVCLE1BQU07QUFBQztBQUV0QyxZQUFRLE1BQU07QUFBQSxNQUNiLEtBQUs7QUFDSjtBQUFBLE1BRUQsS0FBSztBQUNKLGFBQUtDLG9CQUFtQixFQUFFLGlCQUFpQixTQUFTLENBQUMsVUFBVTtBQUM5RCxjQUFJLEtBQUssVUFBVSwrQkFBK0IsTUFBTSxNQUFNO0FBQzdELGtCQUFNLGVBQWU7QUFBQSxVQUN0QjtBQUNBLGVBQUssV0FBVztBQUFBLFFBQ2pCLENBQUM7QUFDRCxhQUFLQSxvQkFBbUIsRUFBRSxpQkFBaUIsUUFBUSxDQUFDLFVBQVU7QUFDN0QsY0FBSSxLQUFLLFVBQVUsK0JBQStCLE1BQU0sTUFBTTtBQUM3RCxrQkFBTSxlQUFlO0FBQUEsVUFDdEI7QUFDQSxlQUFLLFdBQVc7QUFBQSxRQUNqQixDQUFDO0FBQ0Q7QUFBQSxNQUVELEtBQUs7QUFDSixhQUFLQSxvQkFBbUIsRUFBRSxpQkFBaUIsU0FBUyxDQUFDLFVBQVU7QUFDOUQsY0FBSSxLQUFLLFVBQVUsK0JBQStCLE1BQU0sTUFBTTtBQUM3RCxrQkFBTSxlQUFlO0FBQUEsVUFDdEI7QUFDQSxlQUFLLGFBQWE7QUFBQSxRQUNuQixDQUFDO0FBQ0Q7QUFBQSxNQUNELEtBQUs7QUFDSixhQUFLQSxvQkFBbUIsRUFBRSxpQkFBaUIsY0FBYyxDQUFDLFVBQVU7QUFDbkUsY0FBSSxLQUFLLFVBQVUsK0JBQStCLE1BQU0sTUFBTTtBQUM3RCxrQkFBTSxlQUFlO0FBQUEsVUFDdEI7QUFDQSxlQUFLLFdBQVc7QUFBQSxRQUNqQixDQUFDO0FBQ0Q7QUFBQSxNQUVELEtBQUs7QUFDSixhQUFLQSxvQkFBbUIsRUFBRSxpQkFBaUIsY0FBYyxDQUFDLFVBQVU7QUFDbkUsY0FBSSxLQUFLLFVBQVUsK0JBQStCLE1BQU0sTUFBTTtBQUM3RCxrQkFBTSxlQUFlO0FBQUEsVUFDdEI7QUFDQSxlQUFLLFdBQVc7QUFBQSxRQUNqQixDQUFDO0FBQ0QsYUFBS0Esb0JBQW1CLEVBQUUsaUJBQWlCLGNBQWMsQ0FBQyxVQUFVO0FBQ25FLGNBQUksS0FBSyxVQUFVLCtCQUErQixNQUFNLE1BQU07QUFDN0Qsa0JBQU0sZUFBZTtBQUFBLFVBQ3RCO0FBQ0EsZUFBSyxXQUFXO0FBQUEsUUFDakIsQ0FBQztBQUNEO0FBQUEsSUFDRjtBQUFBLEVBQ0Q7QUFLQSxXQUFTQyx3QkFBdUI7QUFBQztBQUdoQyxTQUFLQyxxQkFBb0IsSUFBSSxJQUFJLGVBQWUsQ0FBQyxZQUFZO0FBQzVELFVBQUksS0FBS0Msb0JBQW1CLGFBQWEsZ0JBQWdCO0FBQ3hELFlBQUk7QUFDSCxlQUFLQSxvQkFBbUIsRUFBRSxNQUFNO0FBQ2hDO0FBQUEsUUFDRCxTQUFTLEdBQUc7QUFDWCxpQkFBTyxLQUFLQSxvQkFBbUI7QUFBQSxRQUNoQztBQUFBLE1BQ0Q7QUFFQSxXQUFLQSxvQkFBbUIsSUFBSSxJQUFJLGVBQWUsS0FBSyxNQUFNO0FBQ3pELFFBQUFDLGNBQWEsS0FBSyxJQUFJO0FBQUEsTUFDdkIsQ0FBQztBQUFBLElBQ0YsQ0FBQztBQUVELFNBQUtGLHFCQUFvQixFQUFFLFFBQVEsS0FBSyxhQUFhO0FBQUEsRUFDdEQ7QUFFQSxXQUFTRyw0QkFBMkI7QUFBQztBQUNwQyxRQUFJLEtBQUtILHFCQUFvQixhQUFhLGdCQUFnQjtBQUN6RCxXQUFLQSxxQkFBb0IsRUFBRSxXQUFXO0FBQUEsSUFDdkM7QUFBQSxFQUNEO0FBS0EsV0FBU0gsUUFBTztBQUNmLFVBQU1PLFFBQU87QUFFYixvQkFBZ0JBLE9BQU0sdUJBQXVCO0FBQUEsTUFDNUMsTUFBQUE7QUFBQSxJQUNELENBQUM7QUFFRCxJQUFBQSxNQUFLQyxvQkFBbUIsRUFBRSxNQUFNLFVBQVU7QUFDMUMseUJBQXFCRCxNQUFLRSxxQkFBb0IsR0FBRyxTQUFTLE1BQU07QUFFaEUsZUFBVyxNQUFNO0FBQ2hCLHNCQUFnQkYsT0FBTSx5QkFBeUI7QUFBQSxRQUM5QyxNQUFBQTtBQUFBLE1BQ0QsQ0FBQztBQUFBLElBQ0YsR0FBRyxDQUFDO0FBQUEsRUFDTDtBQU1BLFdBQVNHLFFBQU87QUFDZixVQUFNSCxRQUFPO0FBRWIsUUFBSUEsTUFBSyxVQUFVLFlBQVksS0FBSyxNQUFNLE1BQU07QUFDL0M7QUFBQSxJQUNEO0FBRUEsUUFBSUEsTUFBS0Msb0JBQW1CLEVBQUUsTUFBTSxZQUFZLDBCQUEwQjtBQUN6RTtBQUFBLElBQ0Q7QUFFQSxvQkFBZ0JELE9BQU0sdUJBQXVCO0FBQUEsTUFDNUMsTUFBQUE7QUFBQSxJQUNELENBQUM7QUFFRCxJQUFBQSxNQUFLQyxvQkFBbUIsRUFBRSxNQUFNLGFBQWE7QUFDN0MsSUFBQUQsTUFBS0Msb0JBQW1CLEVBQUUsTUFBTSxVQUFVO0FBRTFDLHNCQUFrQkQsTUFBS0UscUJBQW9CLEdBQUcsU0FBUyxNQUFNO0FBQzdELElBQUFKLGNBQWEsS0FBS0UsS0FBSTtBQUV0QixlQUFXLE1BQU07QUFDaEIsc0JBQWdCQSxPQUFNLHlCQUF5QjtBQUFBLFFBQzlDLE1BQUFBO0FBQUEsTUFDRCxDQUFDO0FBQUEsSUFDRixHQUFHLENBQUM7QUFBQSxFQUNMO0FBS0EsV0FBU0YsZ0JBQWU7QUFBQztBQUV4QixRQUFJLEtBQUtHLG9CQUFtQixFQUFFLE1BQU0sWUFBWSwwQkFBMEI7QUFDekU7QUFBQSxJQUNEO0FBRUEsUUFBSSxLQUFLLFVBQVUsWUFBWSxLQUFLLE1BQU0sTUFBTTtBQUMvQztBQUFBLElBQ0Q7QUFFQSxtQkFBZTtBQUFBLE1BQ2Q7QUFBQSxNQUNBLEtBQUtDLHFCQUFvQjtBQUFBLE1BQ3pCLEtBQUtELG9CQUFtQjtBQUFBLE1BQ3hCLEtBQUssVUFBVSxVQUFVLENBQUMsQ0FBQztBQUFBLElBQzVCO0FBQUEsRUFDRDtBQU1BLFdBQVNHLHlCQUF3QjtBQUNoQyxTQUFLRixxQkFBb0IsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUM1QyxJQUFJLGNBQWM7QUFBQSxJQUNuQjtBQUNBLFNBQUtSLG9CQUFtQixJQUFJLEtBQUssV0FBVztBQUFBLE1BQzNDLElBQUksY0FBYztBQUFBLElBQ25CO0FBQ0EsU0FBS08sb0JBQW1CLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDM0MsSUFBSSxjQUFjO0FBQUEsSUFDbkI7QUFDQSxTQUFLLGtCQUFrQixJQUFJLEtBQUssV0FBVztBQUFBLE1BQzFDLElBQUksY0FBYztBQUFBLElBQ25CO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFNQSxXQUFTSSxlQUFjO0FBRXRCLFdBQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBV1I7QUFwZUEsTUFnQ01SLHNCQU9BRCx1QkFPQUosb0JBTUFVLHVCQU1BUixzQkFPQU8sc0JBT0Esb0JBNkNBO0FBckhOLE1BQUFLLGVBQUE7QUFBQTtBQU1BO0FBQ0E7QUFJQSxNQUFBQztBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0EsTUFBQUM7QUFDQSxNQUFBRDtBQUNBO0FBQ0E7QUFDQSxNQUFBRDtBQUNBO0FBUUEsTUFBTVQsdUJBQXNCLE9BQU8sZUFBZTtBQU9sRCxNQUFNRCx3QkFBdUIsT0FBTyxnQkFBZ0I7QUFPcEQsTUFBTUoscUJBQW9CLE9BQU8sbUJBQW1CO0FBTXBELE1BQU1VLHdCQUF1QixPQUFPLGdCQUFnQjtBQU1wRCxNQUFNUix1QkFBc0IsT0FBTyxlQUFlO0FBT2xELE1BQU1PLHVCQUFzQixPQUFPLGVBQWU7QUFPbEQsTUFBTSxxQkFBcUIsT0FBTyxjQUFjO0FBNkNoRCxNQUFNLFNBQU4sY0FBcUIsY0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLbEMsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLDBDQUEwQztBQUFBLFFBQzdEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFvQkEsSUFBSSxXQUFXO0FBQ2QsaUJBQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxNQUFNLFVBQVU7QUFBQSxZQUN4QyxXQUFXO0FBQUEsY0FDVixNQUFNSSxhQUFZO0FBQUEsWUFDbkI7QUFBQSxZQUNBLE1BQU07QUFBQSxZQUNOLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxjQUNQLFdBQVc7QUFBQSxjQUNYLFlBQVksQ0FBQyxpQkFBaUIsYUFBYSxPQUFPO0FBQUEsWUFDbkQ7QUFBQSxZQUNBLFVBQVU7QUFBQSxjQUNULHNCQUFzQjtBQUFBLFlBQ3ZCO0FBQUEsVUFDRCxDQUFDO0FBQUEsUUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxDQUFDLG9CQUFvQixJQUFJO0FBQ3hCLGdCQUFNLG9CQUFvQixFQUFFO0FBQUU7QUFDOUIsVUFBQUQsdUJBQXNCLEtBQUssSUFBSTtBQUMvQixVQUFBYixrQkFBaUIsS0FBSyxJQUFJO0FBRTFCLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsT0FBTyxTQUFTO0FBQ2YsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxPQUFPLG1CQUFtQjtBQUN6QixpQkFBTyxDQUFDLGdCQUFnQjtBQUFBLFFBQ3pCO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxvQkFBb0I7QUFDbkIsZ0JBQU0sa0JBQWtCO0FBRXhCLGdCQUFNa0IsWUFBVyxZQUFZO0FBQUU7QUFFL0IscUJBQVcsQ0FBQyxFQUFFLElBQUksS0FBSyxPQUFPLFFBQVEsQ0FBQyxTQUFTLE9BQU8sQ0FBQyxHQUFHO0FBRTFELFlBQUFBLFVBQVMsaUJBQWlCLE1BQU0sS0FBS2pCLGtCQUFpQixDQUFDO0FBQUEsVUFDeEQ7QUFFQSxVQUFBTSxjQUFhLEtBQUssSUFBSTtBQUN0QixVQUFBSCxzQkFBcUIsS0FBSyxJQUFJO0FBQUEsUUFDL0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLHVCQUF1QjtBQUN0QixnQkFBTSxxQkFBcUI7QUFHM0IscUJBQVcsQ0FBQyxFQUFFLElBQUksS0FBSyxPQUFPLFFBQVEsQ0FBQyxTQUFTLE9BQU8sQ0FBQyxHQUFHO0FBQzFELHFCQUFTLG9CQUFvQixNQUFNLEtBQUtILGtCQUFpQixDQUFDO0FBQUEsVUFDM0Q7QUFFQSxVQUFBTywwQkFBeUIsS0FBSyxJQUFJO0FBQUEsUUFDbkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsYUFBYTtBQUNaLFVBQUFJLE1BQUssS0FBSyxJQUFJO0FBQ2QsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLGFBQWE7QUFDWixVQUFBVixNQUFLLEtBQUssSUFBSTtBQUNkLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxlQUFlO0FBQ2QsY0FBSSxLQUFLUSxvQkFBbUIsRUFBRSxNQUFNLFlBQVksMEJBQTBCO0FBQ3pFLGlCQUFLLFdBQVc7QUFBQSxVQUNqQixPQUFPO0FBQ04saUJBQUssV0FBVztBQUFBLFVBQ2pCO0FBQ0EsaUJBQU87QUFBQSxRQUNSO0FBQUEsTUFDRDtBQThPQSw0QkFBc0IsTUFBTTtBQUFBO0FBQUE7OztBQ3RlNUIsTUFnQk07QUFoQk47QUFBQTtBQU9BO0FBQ0EsTUFBQVM7QUFRQSxNQUFNLHlCQUF5QixJQUFJLGNBQWM7QUFFakQsVUFBSTtBQUNILCtCQUF1QjtBQUFBLFVBQ3RCO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFJQTtBQUFBLFFBQ0Q7QUFBQSxNQUNELFNBQVMsR0FBRztBQUNYO0FBQUEsVUFDQyxTQUFTLFlBQVksRUFBRSxjQUFjLE1BQU07QUFBQSxVQUMzQztBQUFBLFVBQ0EsSUFBSTtBQUFBLFFBQ0w7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDc1NBLFdBQVNDLG9CQUFtQjtBQUFDO0FBRTVCLFNBQUtDLGtCQUFpQixJQUFJLENBQUMsVUFBVTtBQUNwQyxZQUFNLE9BQU8sTUFBTSxhQUFhO0FBRWhDLGlCQUFXLENBQUMsRUFBRSxPQUFPLEtBQUssT0FBTyxRQUFRLElBQUksR0FBRztBQUMvQyxZQUFJLFlBQVksTUFBTTtBQUNyQjtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQ0EsV0FBSyxXQUFXO0FBQUEsSUFDakI7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQUtBLFdBQVNDLHdCQUF1QjtBQUFDO0FBR2hDLFNBQUtDLHFCQUFvQixJQUFJLElBQUksZUFBZSxNQUFNO0FBQ3JELFVBQUksS0FBS0Msb0JBQW1CLGFBQWEsZ0JBQWdCO0FBQ3hELFlBQUk7QUFDSCxlQUFLQSxvQkFBbUIsRUFBRSxNQUFNO0FBQ2hDO0FBQUEsUUFDRCxTQUFTLEdBQUc7QUFDWCxpQkFBTyxLQUFLQSxvQkFBbUI7QUFBQSxRQUNoQztBQUFBLE1BQ0Q7QUFFQSxXQUFLQSxvQkFBbUIsSUFBSSxJQUFJLGVBQWUsS0FBSyxNQUFNO0FBQ3pELFFBQUFDLGNBQWEsS0FBSyxJQUFJO0FBQUEsTUFDdkIsQ0FBQztBQUFBLElBQ0YsQ0FBQztBQUVELFNBQUtGLHFCQUFvQixFQUFFLFFBQVEsS0FBSyxhQUFhO0FBQUEsRUFDdEQ7QUFFQSxXQUFTRyw0QkFBMkI7QUFBQztBQUNwQyxRQUFJLEtBQUtILHFCQUFvQixhQUFhLGdCQUFnQjtBQUN6RCxXQUFLQSxxQkFBb0IsRUFBRSxXQUFXO0FBQUEsSUFDdkM7QUFBQSxFQUNEO0FBS0EsV0FBU0UsZ0JBQWU7QUFBQztBQUV4QixRQUFJLEtBQUtFLG9CQUFtQixFQUFFLE1BQU0sWUFBWSwwQkFBMEI7QUFDekU7QUFBQSxJQUNEO0FBRUEsUUFBSSxLQUFLLFVBQVUsWUFBWSxLQUFLLE1BQU0sTUFBTTtBQUMvQztBQUFBLElBQ0Q7QUFFQSxtQkFBZTtBQUFBLE1BQ2Q7QUFBQSxNQUNBLEtBQUtDLHFCQUFvQjtBQUFBLE1BQ3pCLEtBQUtELG9CQUFtQjtBQUFBLE1BQ3hCLEtBQUssVUFBVSxVQUFVLENBQUMsQ0FBQztBQUFBLElBQzVCO0FBQUEsRUFDRDtBQU1BLFdBQVNFLHlCQUF3QjtBQUNoQyxTQUFLRCxxQkFBb0IsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUM1QyxJQUFJLGNBQWM7QUFBQSxJQUNuQjtBQUNBLFNBQUtFLG9CQUFtQixJQUFJLEtBQUssV0FBVztBQUFBLE1BQzNDLElBQUksY0FBYztBQUFBLElBQ25CO0FBQ0EsU0FBS0gsb0JBQW1CLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDM0MsSUFBSSxjQUFjO0FBQUEsSUFDbkI7QUFDQSxTQUFLSSxtQkFBa0IsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUMxQyxJQUFJLGNBQWM7QUFBQSxJQUNuQjtBQUFBLEVBQ0Q7QUFNQSxXQUFTQyxlQUFjO0FBRXRCLFdBQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBY1I7QUFoYkEsTUErQk1SLHNCQU9BRCx1QkFPQUYsb0JBTUFPLHVCQU1BRSxzQkFPQUgsc0JBT0FJLHFCQWlEQTtBQXhITixNQUFBRSxzQkFBQTtBQUFBO0FBTUE7QUFDQTtBQUNBLE1BQUFDO0FBSUE7QUFJQTtBQUNBO0FBQ0E7QUFDQSxNQUFBQztBQUNBLE1BQUFEO0FBQ0E7QUFDQTtBQUNBLE1BQUFFO0FBUUEsTUFBTVosdUJBQXNCLE9BQU8sZUFBZTtBQU9sRCxNQUFNRCx3QkFBdUIsT0FBTyxnQkFBZ0I7QUFPcEQsTUFBTUYscUJBQW9CLE9BQU8sbUJBQW1CO0FBTXBELE1BQU1PLHdCQUF1QixPQUFPLGdCQUFnQjtBQU1wRCxNQUFNRSx1QkFBc0IsT0FBTyxlQUFlO0FBT2xELE1BQU1ILHVCQUFzQixPQUFPLGVBQWU7QUFPbEQsTUFBTUksc0JBQXFCLE9BQU8sY0FBYztBQWlEaEQsTUFBTSxlQUFOLGNBQTJCLE9BQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNakMsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLGlEQUFpRDtBQUFBLFFBQ3BFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBZ0JBLElBQUksV0FBVztBQUFDO0FBRWYsaUJBQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxNQUFNLFVBQVU7QUFBQSxZQUN4QyxXQUFXO0FBQUEsY0FDVixNQUFNQyxhQUFZO0FBQUEsWUFDbkI7QUFBQSxZQUNBLFNBQVM7QUFBQSxjQUNSLE9BQU8sQ0FBQyxNQUFNO0FBQ2IscUJBQUssYUFBYTtBQUFBLGNBQ25CO0FBQUEsWUFDRDtBQUFBLFlBQ0EsU0FBUztBQUFBLGNBQ1IsUUFBUTtBQUFBLFlBQ1Q7QUFBQSxZQUNBLFFBQVE7QUFBQSxjQUNQLFFBQVE7QUFBQSxZQUNUO0FBQUEsWUFDQSxNQUFNO0FBQUEsWUFDTixPQUFPO0FBQUEsVUFDUixDQUFDO0FBQUEsUUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxDQUFDLG9CQUFvQixJQUFJO0FBQ3hCLGdCQUFNLG9CQUFvQixFQUFFO0FBQUU7QUFDOUIsVUFBQUgsdUJBQXNCLEtBQUssSUFBSTtBQUMvQixVQUFBVCxrQkFBaUIsS0FBSyxJQUFJO0FBRTFCLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsT0FBTyxTQUFTO0FBQ2YsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxPQUFPLG1CQUFtQjtBQUN6QixnQkFBTSxTQUFTLE1BQU0saUJBQWlCO0FBQ3RDLGlCQUFPLEtBQUssc0JBQXNCO0FBQ2xDLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0Esb0JBQW9CO0FBQ25CLGdCQUFNLGtCQUFrQjtBQUV4QixnQkFBTWlCLFlBQVcsWUFBWTtBQUFFO0FBRS9CLHFCQUFXLENBQUMsRUFBRSxJQUFJLEtBQUssT0FBTyxRQUFRLENBQUMsU0FBUyxPQUFPLENBQUMsR0FBRztBQUUxRCxZQUFBQSxVQUFTLGlCQUFpQixNQUFNLEtBQUtoQixrQkFBaUIsQ0FBQztBQUFBLFVBQ3hEO0FBRUEsVUFBQUksY0FBYSxLQUFLLElBQUk7QUFDdEIsVUFBQUgsc0JBQXFCLEtBQUssSUFBSTtBQUFBLFFBQy9CO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSx1QkFBdUI7QUFDdEIsZ0JBQU0scUJBQXFCO0FBRzNCLHFCQUFXLENBQUMsRUFBRSxJQUFJLEtBQUssT0FBTyxRQUFRLENBQUMsU0FBUyxPQUFPLENBQUMsR0FBRztBQUMxRCxxQkFBUyxvQkFBb0IsTUFBTSxLQUFLRCxrQkFBaUIsQ0FBQztBQUFBLFVBQzNEO0FBRUEsVUFBQUssMEJBQXlCLEtBQUssSUFBSTtBQUFBLFFBQ25DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxRQUFRO0FBQ1AsY0FBSSxLQUFLLFVBQVUsVUFBVSxNQUFNLE1BQU07QUFDeEM7QUFBQSxVQUNEO0FBRUEsY0FDQyxLQUFLSSxvQkFBbUIsS0FDeEIsV0FBVyxLQUFLQSxvQkFBbUIsRUFBRSxLQUFLLEdBQ3pDO0FBQ0QsaUJBQUtBLG9CQUFtQixFQUFFLE1BQU07QUFBQSxVQUNqQztBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBU0EsTUFBTVEsVUFBUztBQUNkLGNBQUksS0FBSyxVQUFVLFVBQVUsTUFBTSxNQUFNO0FBQ3hDO0FBQUEsVUFDRDtBQUVBLGNBQ0MsS0FBS1Isb0JBQW1CLEtBQ3hCLFdBQVcsS0FBS0Esb0JBQW1CLEVBQUUsS0FBSyxHQUN6QztBQUNELGlCQUFLQSxvQkFBbUIsRUFBRSxNQUFNUSxRQUFPO0FBQUEsVUFDeEM7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxPQUFPO0FBQ04sY0FDQyxLQUFLUixvQkFBbUIsS0FDeEIsV0FBVyxLQUFLQSxvQkFBbUIsRUFBRSxJQUFJLEdBQ3hDO0FBQ0QsaUJBQUtBLG9CQUFtQixFQUFFLEtBQUs7QUFBQSxVQUNoQztBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsV0FBVyxpQkFBaUI7QUFDM0IsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFjQSxJQUFJLFFBQVE7QUFDWCxpQkFBTyxLQUFLLFVBQVUsT0FBTztBQUFBLFFBQzlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFjQSxJQUFJLE1BQU0sT0FBTztBQUNoQixlQUFLLFVBQVUsU0FBUyxLQUFLO0FBQzdCLGNBQUk7QUFDSCxrQkFBTSxhQUFhLEtBQUssS0FBSztBQUFBLFVBQzlCLFNBQVMsR0FBRztBQUNYLDhCQUFrQixNQUFNLHdCQUF3QixFQUFFLE9BQU87QUFBQSxVQUMxRDtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBa0hBLDRCQUFzQixZQUFZO0FBQUE7QUFBQTs7O0FDbGJsQyxNQWdCTTtBQWhCTjtBQUFBO0FBT0E7QUFDQSxNQUFBUztBQVFBLE1BQU0sMEJBQTBCLElBQUksY0FBYztBQUVsRCxVQUFJO0FBQ0gsZ0NBQXdCO0FBQUEsVUFDdkI7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUlBO0FBQUEsUUFDRDtBQUFBLE1BQ0QsU0FBUyxHQUFHO0FBQ1g7QUFBQSxVQUNDLFNBQVMsWUFBWSxFQUFFLGNBQWMsTUFBTTtBQUFBLFVBQzNDO0FBQUEsVUFDQSxJQUFJO0FBQUEsUUFDTDtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNoQ0EsTUFnQk07QUFoQk47QUFBQTtBQU9BO0FBQ0EsTUFBQUM7QUFRQSxNQUFNLCtCQUErQixJQUFJLGNBQWM7QUFFdkQsVUFBSTtBQUNILHFDQUE2QjtBQUFBLFVBQzVCO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFJQTtBQUFBLFFBQ0Q7QUFBQSxNQUNELFNBQVMsR0FBRztBQUNYO0FBQUEsVUFDQyxTQUFTLFlBQVksRUFBRSxjQUFjLE1BQU07QUFBQSxVQUMzQztBQUFBLFVBQ0EsSUFBSTtBQUFBLFFBQ0w7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDNFNBLFdBQVNDLHdCQUF1QixNQUFNO0FBQUM7QUFFdEMsWUFBUSxNQUFNO0FBQUEsTUFDYixLQUFLO0FBQ0osYUFBS0Msb0JBQW1CLEVBQUUsVUFBVSxpQkFBaUIsQ0FBQyxNQUFNO0FBQzNELGdCQUFNLFdBQVcsS0FBSyxVQUFVLGVBQWU7QUFDL0MsY0FBSSxXQUFXLFFBQVEsR0FBRztBQUN6QixxQkFBUyxDQUFDO0FBQUEsVUFDWDtBQUFBLFFBQ0QsQ0FBQztBQUVEO0FBQUEsTUFDRCxLQUFLO0FBQ0osYUFBS0Esb0JBQW1CLEVBQUUsVUFBVSxpQkFBaUIsQ0FBQyxNQUFNO0FBQzNELGdCQUFNLE9BQU8sS0FBSztBQUVsQixjQUFJLGdCQUFnQixpQkFBaUI7QUFDcEMsaUJBQUssY0FBYztBQUFBLFVBQ3BCO0FBQUEsUUFDRCxDQUFDO0FBRUQ7QUFBQSxJQUNGO0FBQUEsRUFDRDtBQU1BLFdBQVNDLHlCQUF3QjtBQUFDO0FBQ2pDLFNBQUtELG9CQUFtQixJQUFJLEtBQUssV0FBVztBQUFBLE1BQzNDLElBQUksY0FBYztBQUFBLElBQ25CO0FBQUEsRUFDRDtBQU1BLFdBQVNFLGVBQWM7QUFFdEIsV0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFvQlI7QUF6WUEsTUEwQk1GLHNCQXFDQTtBQS9ETixNQUFBRyw2QkFBQTtBQUFBO0FBTUE7QUFDQSxNQUFBQztBQUNBO0FBSUE7QUFDQTtBQUNBLE1BQUFDO0FBQ0E7QUFDQTtBQUNBLE1BQUFDO0FBQ0E7QUFRQSxNQUFNTix1QkFBc0IsT0FBTyxlQUFlO0FBcUNsRCxNQUFNLHFCQUFOLGNBQWlDLE9BQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNdkMsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLHdEQUF3RDtBQUFBLFFBQzNFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBVUEsU0FBUyxPQUFPLFNBQVM7QUFDeEIsaUJBQU8sS0FBS0Esb0JBQW1CLEVBQUUsU0FBUyxPQUFPLE9BQU87QUFBQSxRQUN6RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxjQUFjO0FBQ2IsaUJBQU8sS0FBS0Esb0JBQW1CLEVBQUUsWUFBWTtBQUFBLFFBQzlDO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxXQUFXO0FBQ1YsaUJBQU8sS0FBS0Esb0JBQW1CLEVBQUUsU0FBUztBQUFBLFFBQzNDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFjQSxJQUFJLFdBQVc7QUFDZCxpQkFBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sVUFBVTtBQUFBLFlBQ3hDLFNBQVM7QUFBQSxjQUNSLE9BQU87QUFBQSxjQUNQLFNBQVM7QUFBQSxjQUNULE1BQU07QUFBQSxZQUNQO0FBQUEsWUFDQSxXQUFXO0FBQUEsY0FDVixNQUFNRSxhQUFZO0FBQUEsWUFDbkI7QUFBQSxZQUNBLE1BQU07QUFBQSxZQUNOLFFBQVE7QUFBQSxjQUNQLFFBQVE7QUFBQSxZQUNUO0FBQUEsWUFDQSxTQUFTO0FBQUEsY0FDUixRQUFRO0FBQUEsWUFDVDtBQUFBLFlBQ0EsU0FBUztBQUFBLGNBQ1IsT0FBTyxDQUFDLE1BQU07QUFDYixzQkFBTSxJQUFJLE1BQU0saUNBQWlDO0FBQUEsY0FDbEQ7QUFBQSxZQUNEO0FBQUEsVUFDRCxDQUFDO0FBQUEsUUFDRjtBQUFBO0FBQUE7QUFBQSxRQUlBLENBQUMsb0JBQW9CLElBQUk7QUFDeEIsZ0JBQU0sb0JBQW9CLEVBQUU7QUFBRTtBQUM5QixVQUFBRCx1QkFBc0IsS0FBSyxJQUFJO0FBRS9CLGNBQUksUUFBUTtBQUNaLGdCQUFNLGFBQWEsS0FBSyxVQUFVLE1BQU07QUFDeEMsY0FBSSxPQUFPLGVBQWUsVUFBVTtBQUNuQyxvQkFBUSxXQUFXLE1BQU0sR0FBRztBQUFBLFVBQzdCO0FBRUEsY0FDQyxVQUFVLFFBQ1YsVUFBVSxVQUNWLFFBQVEsS0FBSyxNQUFNLFNBQ25CLE1BQU0sV0FBVyxHQUNoQjtBQUNELG9CQUFRLENBQUMsUUFBUTtBQUFBLFVBQ2xCO0FBRUEscUJBQVcsQ0FBQyxFQUFFLElBQUksS0FBSyxPQUFPLFFBQVEsS0FBSyxHQUFHO0FBQzdDLFlBQUFGLHdCQUF1QixLQUFLLE1BQU0sSUFBSTtBQUFBLFVBQ3ZDO0FBRUEsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBVUEsV0FBVyxTQUFTLE9BQU8sTUFBTTtBQUNoQyxjQUFJLFNBQVMsT0FBTyxHQUFHO0FBQ3RCLGdCQUFJLFlBQVksSUFBSTtBQUNuQixvQkFBTSxJQUFJLFVBQVUsMkJBQTJCO0FBQUEsWUFDaEQ7QUFFQSxrQkFBTSxlQUFlLFNBQVMsY0FBYyxLQUFLO0FBQ2pELGtCQUFNLGFBQWEsU0FBUyxjQUFjLEtBQUs7QUFDL0Msa0JBQU0sV0FBVyxTQUFTLGNBQWMsS0FBSztBQUM3QyxxQkFBUyxhQUFhLHFCQUFxQixtQkFBbUI7QUFFOUQsZ0JBQUksY0FBYztBQUNsQixnQkFBSSxVQUFVLFFBQVc7QUFDeEIsc0JBQVEsZUFBZSxLQUFLO0FBQzVCLDZCQUFlLFNBQVMsY0FBYyxLQUFLO0FBQzNDLDJCQUFhLGFBQWEsU0FBUyxFQUFFO0FBQ3JDLDJCQUFhLFlBQVk7QUFDekIsMkJBQWEsYUFBYSxxQkFBcUIsZUFBZTtBQUM5RCx1QkFBUyxZQUFZLFlBQVk7QUFBQSxZQUNsQztBQUVBLGdCQUFJLFNBQVMsUUFBVztBQUN2QixxQkFBTyxlQUFlLElBQUk7QUFDMUIsNEJBQWMsU0FBUyxjQUFjLEtBQUs7QUFDMUMsMEJBQVksYUFBYSxTQUFTLEVBQUU7QUFDcEMsMEJBQVksWUFBWTtBQUN4QiwwQkFBWSxhQUFhLHFCQUFxQixjQUFjO0FBQzVELHVCQUFTLFlBQVksV0FBVztBQUFBLFlBQ2pDO0FBRUEsdUJBQVcsWUFBWTtBQUN2Qix5QkFBYSxZQUFZLFFBQVE7QUFDakMseUJBQWEsWUFBWSxVQUFVO0FBRW5DLGlCQUFLLFVBQVUsbUJBQW1CLFlBQVk7QUFBQSxVQUMvQyxXQUFXLG1CQUFtQixhQUFhO0FBQzFDLGlCQUFLLFVBQVUsbUJBQW1CLE9BQU87QUFBQSxVQUMxQyxPQUFPO0FBQ04sa0JBQU0sSUFBSTtBQUFBLGNBQ1Q7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUVBLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxZQUFZLFNBQVM7QUFBQztBQUNyQixnQkFBTSxXQUFXO0FBRWpCLGNBQUksWUFBWSxRQUFXO0FBQzFCLHVCQUFXLE1BQU07QUFDaEIsb0JBQU0sV0FBVztBQUFBLFlBQ2xCLEdBQUcsT0FBTztBQUFBLFVBQ1g7QUFFQSxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsY0FBYztBQUNiLGdCQUFNLFdBQVc7QUFDakIsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLGdCQUFnQjtBQUNmLGdCQUFNLGFBQWE7QUFDbkIsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLGFBQWE7QUFDWixpQkFBTyxLQUFLLFVBQVUsU0FBUztBQUFBLFFBQ2hDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLE9BQU8sU0FBUztBQUNmLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxPQUFPLG1CQUFtQjtBQUN6QixnQkFBTSxTQUFTLE9BQU8saUJBQWlCO0FBQ3ZDLGlCQUFPLEtBQUsscUJBQXFCO0FBQ2pDLGlCQUFPLEtBQUssNEJBQTRCO0FBQ3hDLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsUUFBUTtBQUNQLGNBQUksS0FBSyxVQUFVLFVBQVUsTUFBTSxNQUFNO0FBQ3hDO0FBQUEsVUFDRDtBQUVBLGNBQ0MsS0FBS0Msb0JBQW1CLEtBQ3hCLFdBQVcsS0FBS0Esb0JBQW1CLEVBQUUsS0FBSyxHQUN6QztBQUNELGlCQUFLQSxvQkFBbUIsRUFBRSxNQUFNO0FBQUEsVUFDakM7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVNBLE1BQU1PLFVBQVM7QUFDZCxjQUFJLEtBQUssVUFBVSxVQUFVLE1BQU0sTUFBTTtBQUN4QztBQUFBLFVBQ0Q7QUFFQSxjQUNDLEtBQUtQLG9CQUFtQixLQUN4QixXQUFXLEtBQUtBLG9CQUFtQixFQUFFLEtBQUssR0FDekM7QUFDRCxpQkFBS0Esb0JBQW1CLEVBQUUsTUFBTU8sUUFBTztBQUFBLFVBQ3hDO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsT0FBTztBQUNOLGNBQ0MsS0FBS1Asb0JBQW1CLEtBQ3hCLFdBQVcsS0FBS0Esb0JBQW1CLEVBQUUsSUFBSSxHQUN4QztBQUNELGlCQUFLQSxvQkFBbUIsRUFBRSxLQUFLO0FBQUEsVUFDaEM7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQWlFQSw0QkFBc0Isa0JBQWtCO0FBQUE7QUFBQTs7O0FDM1l4QztBQUFBO0FBQUE7QUFBQTtBQXFPQSxXQUFTLFVBQVUsTUFBTTtBQUN4QixVQUFNUSxRQUFPO0FBRWIsV0FBTyxTQUFVLE9BQU87QUFBQztBQUV4QixZQUFNLFdBQVdBLE1BQUssVUFBVSxXQUFXLElBQUksRUFBRTtBQUNqRCxVQUFJLE9BQU8sUUFBUSxNQUFNLFlBQVk7QUFDcEM7QUFBQSxNQUNEO0FBRUEsZUFBUyxLQUFLLE1BQU0sS0FBSztBQUFBLElBQzFCO0FBQUEsRUFDRDtBQVFBLFdBQVNDLG9CQUFtQjtBQUFDO0FBRTVCLFNBQUsseUJBQXlCLEVBQUU7QUFBQSxNQUMvQjtBQUFBLE1BQ0EsS0FBSyxVQUFVLGtCQUFrQixDQUFDLE9BQU8sQ0FBQztBQUFBLElBQzNDO0FBQ0EsU0FBSyx5QkFBeUIsRUFBRTtBQUFBLE1BQy9CO0FBQUEsTUFDQSxVQUFVLEtBQUssTUFBTSxRQUFRO0FBQUEsSUFDOUI7QUFFQSxTQUFLLDBCQUEwQixFQUFFO0FBQUEsTUFDaEM7QUFBQSxNQUNBLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7QUFBQSxJQUMzQztBQUNBLFNBQUssMEJBQTBCLEVBQUUsVUFBVSxpQkFBaUIsTUFBTTtBQUNqRSxZQUFNLFdBQVcsVUFBVSxLQUFLLE1BQU0sU0FBUztBQUMvQyxzQkFBZ0IsTUFBTSxtQkFBbUIsQ0FBQyxDQUFDO0FBQzNDLGVBQVMsS0FBSyxJQUFJO0FBQ2xCLHNCQUFnQixNQUFNLHFCQUFxQixDQUFDLENBQUM7QUFBQSxJQUM5QyxDQUFDO0FBRUQsV0FBTztBQUFBLEVBQ1I7QUFNQSxXQUFTQyx5QkFBd0I7QUFBQztBQUNqQyxTQUFLLDBCQUEwQixJQUFJLEtBQUssV0FBVztBQUFBLE1BQ2xELElBQUksY0FBYztBQUFBLElBQ25CO0FBQ0EsU0FBSyx5QkFBeUIsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUNqRCxJQUFJLGNBQWM7QUFBQSxJQUNuQjtBQUFBLEVBQ0Q7QUFNQSxXQUFTQyxlQUFjO0FBRXRCLFdBQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWtDUjtBQXZVQSxNQTZCTSw0QkFNQSwyQkFpREE7QUFwRk4sTUFBQUMsdUJBQUE7QUFBQTtBQU1BO0FBQ0EsTUFBQUM7QUFDQTtBQUlBO0FBQ0EsTUFBQUM7QUFDQSxNQUFBQztBQUNBO0FBQ0E7QUFFQSxNQUFBRDtBQUNBLE1BQUFFO0FBQ0E7QUFDQTtBQVFBLE1BQU0sNkJBQTZCLE9BQU8sc0JBQXNCO0FBTWhFLE1BQU0sNEJBQTRCLE9BQU8scUJBQXFCO0FBaUQ5RCxNQUFNLGdCQUFOLGNBQTRCLGFBQWE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNeEMsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLGtEQUFrRDtBQUFBLFFBQ3JFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQXFCQSxJQUFJLFdBQVc7QUFBQztBQUVmLGdCQUFNLE1BQU0sT0FBTyxPQUFPLENBQUMsR0FBRyxNQUFNLFVBQVU7QUFBQSxZQUM3QyxXQUFXO0FBQUEsY0FDVixNQUFNTCxhQUFZO0FBQUEsWUFDbkI7QUFBQSxZQUNBLFFBQVE7QUFBQSxjQUNQLFFBQVE7QUFBQSxjQUNSLFNBQVM7QUFBQSxjQUNULFNBQVM7QUFBQSxjQUNULFFBQVE7QUFBQSxZQUNUO0FBQUEsVUFDRCxDQUFDO0FBRUQsY0FBSSxTQUFTLEVBQUUsZUFBZSxJQUFJO0FBQ2xDLGNBQUksU0FBUyxFQUFFLGNBQWMsSUFBSTtBQUNqQyxjQUFJLFNBQVMsRUFBRSxRQUFRLElBQUksQ0FBQyxNQUFNO0FBQ2pDLGlCQUFLLFdBQVc7QUFBQSxVQUNqQjtBQUVBLGNBQUksU0FBUyxFQUFFLFNBQVMsSUFBSSxDQUFDLE1BQU07QUFDbEMsa0JBQU0sSUFBSSxNQUFNLG1DQUFtQztBQUFBLFVBQ3BEO0FBRUEsaUJBQU87QUFBQSxRQUNSO0FBQUEsUUFFQSxhQUFhO0FBQUM7QUFDYixnQkFBTSxXQUFXO0FBQ2pCLGVBQUssMEJBQTBCLEVBQUUsWUFBWTtBQUM3QyxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsQ0FBQyxvQkFBb0IsSUFBSTtBQUN4QixnQkFBTSxvQkFBb0IsRUFBRTtBQUFFO0FBQzlCLFVBQUFELHVCQUFzQixLQUFLLElBQUk7QUFDL0IsVUFBQUQsa0JBQWlCLEtBQUssSUFBSTtBQUFBLFFBQzNCO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxPQUFPLFNBQVM7QUFDZixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLE9BQU8sbUJBQW1CO0FBQ3pCLGdCQUFNLFNBQVMsYUFBYSxpQkFBaUI7QUFDN0MsaUJBQU8sS0FBSyx1QkFBdUI7QUFDbkMsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLGFBQWE7QUFBQztBQUNiLGdCQUFNLHFCQUFxQixLQUFLLFVBQVUsdUJBQXVCO0FBQ2pFLGNBQUksb0JBQW9CO0FBQ3ZCLGlCQUFLLDBCQUEwQixFQUFFO0FBQUEsY0FDaEM7QUFBQSxjQUNBO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFFQSxnQkFBTSxvQkFBb0IsS0FBSyxVQUFVLHNCQUFzQjtBQUMvRCxjQUFJLG1CQUFtQjtBQUN0QixpQkFBSyx5QkFBeUIsRUFBRTtBQUFBLGNBQy9CO0FBQUEsY0FDQTtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBRUEsaUJBQU8sTUFBTSxXQUFXO0FBQUEsUUFDekI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBU0Esc0JBQXNCLE9BQU8sU0FBUztBQUFDO0FBQ3RDLGVBQUssMEJBQTBCLEVBQUUsU0FBUyxPQUFPLE9BQU87QUFDeEQsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVNBLHlCQUF5QixTQUFTLFNBQVM7QUFBQztBQUMzQyxlQUFLLDBCQUEwQixFQUFFLFdBQVcsT0FBTztBQUNuRCxxQkFBVyxNQUFNO0FBQ2hCLGlCQUFLLDBCQUEwQixFQUFFLFlBQVksT0FBTztBQUFBLFVBQ3JELEdBQUcsQ0FBQztBQUNKLGlCQUFPO0FBQUEsUUFDUjtBQUFBLE1BQ0Q7QUEyR0EsNEJBQXNCLGFBQWE7QUFBQTtBQUFBOzs7QUNwSG5DLFdBQVNRLGtCQUFpQixNQUFNO0FBQy9CLFFBQUksU0FBUyxJQUFJLEdBQUc7QUFFbkIsVUFBSTtBQUNILGNBQU0sVUFBVSxhQUFhLElBQUk7QUFDakMsZUFBTyxRQUFRO0FBQUEsTUFDaEIsU0FBUyxHQUFHO0FBQUEsTUFBQztBQUViLFVBQUk7QUFDSCxjQUFNLE1BQU0sS0FBSyxNQUFNLElBQUk7QUFDM0IsdUJBQWUsR0FBRztBQUNsQixlQUFPO0FBQUEsTUFDUixTQUFTLEdBQUc7QUFDWCxjQUFNLElBQUk7QUFBQSxVQUNULGlFQUFpRSxJQUFJO0FBQUEsUUFDdEU7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBLFdBQU8sQ0FBQztBQUFBLEVBQ1Q7QUF6T0EsTUFvQ00sb0JBY0E7QUFsRE47QUFBQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXFCQSxNQUFNLHFCQUFxQixPQUFPO0FBQUEsUUFDakM7QUFBQSxNQUNEO0FBWUEsTUFBTSxhQUFOLGNBQXlCLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBSzdCLGNBQWM7QUFDYixnQkFBTTtBQUVOLGVBQUssY0FBYyxJQUFJLElBQUksY0FBYztBQUFBLFlBQ3hDLFNBQVMsT0FBTyxDQUFDLEdBQUcsS0FBSyxRQUFRO0FBQUEsVUFDbEMsQ0FBQztBQUVELGVBQUssa0JBQWtCLElBQUksSUFBSSxjQUFjLENBQUMsQ0FBQztBQUFBLFFBQ2hEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxlQUFlLFVBQVU7QUFDeEIsZUFBSyxrQkFBa0IsRUFBRSxlQUFlLFFBQVE7QUFDaEQsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxlQUFlLFVBQVU7QUFDeEIsZUFBSyxrQkFBa0IsRUFBRSxlQUFlLFFBQVE7QUFDaEQsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLGlCQUFpQixVQUFVO0FBQzFCLGlCQUFPLEtBQUssa0JBQWtCLEVBQUUsaUJBQWlCLFFBQVE7QUFBQSxRQUMxRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWFBLElBQUksV0FBVztBQUNkLGlCQUFPLENBQUM7QUFBQSxRQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVNBLFVBQVUsTUFBTSxPQUFPO0FBQ3RCLGNBQUksV0FBVyxLQUFLLGNBQWMsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUU7QUFBQSxZQUM1RDtBQUFBLFlBQ0E7QUFBQSxVQUNEO0FBQ0EsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsV0FBV0MsVUFBUztBQUNuQixjQUFJLFNBQVNBLFFBQU8sR0FBRztBQUN0QixZQUFBQSxXQUFVRCxrQkFBaUJDLFFBQU87QUFBQSxVQUNuQztBQUNBO0FBQUEsWUFDQyxLQUFLLGNBQWMsRUFBRSxXQUFXLEVBQUUsU0FBUztBQUFBLFlBQzNDLEtBQUs7QUFBQSxZQUNMQTtBQUFBLFVBQ0Q7QUFFQSxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBU0EsVUFBVSxNQUFNLGNBQWM7QUFDN0IsY0FBSTtBQUVKLGNBQUk7QUFDSCxvQkFBUSxJQUFJO0FBQUEsY0FDWCxLQUFLLGNBQWMsRUFBRSxlQUFlLEVBQUUsU0FBUztBQUFBLFlBQ2hELEVBQUUsT0FBTyxJQUFJO0FBQUEsVUFDZCxTQUFTLEdBQUc7QUFBQSxVQUFDO0FBRWIsY0FBSSxVQUFVO0FBQVcsbUJBQU87QUFDaEMsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLE9BQU87QUFDTixnQkFBTSxJQUFJLE1BQU0sb0RBQW9EO0FBQUEsUUFDckU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsUUFBUTtBQUNQLGdCQUFNLElBQUksTUFBTSxvREFBb0Q7QUFBQSxRQUNyRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLE1BQU07QUFDTCxpQkFBTyxLQUFLLGtCQUFrQixFQUFFLGVBQWU7QUFBQSxRQUNoRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxJQUFJLE1BQU07QUFDVCxlQUFLLGtCQUFrQixFQUFFLFdBQVcsSUFBSTtBQUN4QyxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksa0NBQWtDO0FBQUEsUUFDckQ7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDN01BLE1BaUJNLHFCQWFBQztBQTlCTixNQUFBQyxnQkFBQTtBQUFBO0FBT0E7QUFDQTtBQUNBO0FBUUEsTUFBTSxzQkFBc0IsT0FBTztBQUFBLFFBQ2xDO0FBQUEsTUFDRDtBQVdBLE1BQU1ELFdBQU4sTUFBTSxpQkFBZ0IsV0FBVztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1oQyxZQUFZLEtBQUs7QUFDaEIsZ0JBQU07QUFDTixlQUFLLFVBQVUsT0FBTyxlQUFlLEdBQUcsQ0FBQztBQUFBLFFBQzFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLDBDQUEwQztBQUFBLFFBQzdEO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxJQUFJLFdBQVc7QUFDZCxpQkFBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sVUFBVTtBQUFBLFlBQ3hDLEtBQUs7QUFBQSxVQUNOLENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsQ0FBQyxtQkFBbUIsSUFBSTtBQUN2QixnQkFBTSxJQUFJLE1BQU0sb0RBQW9EO0FBQUEsUUFDckU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLE9BQU87QUFDTixnQkFBTUUsUUFBTztBQUViLGdCQUFNLFVBQVVBLE1BQUssbUJBQW1CLEVBQUU7QUFFMUMsaUJBQU8sSUFBSSxRQUFRLFNBQVUsU0FBUztBQUNyQyxrQkFBTSxPQUFPLEtBQUssTUFBTSxRQUFRLFFBQVFBLE1BQUssVUFBVSxLQUFLLENBQUMsQ0FBQztBQUM5RCxZQUFBQSxNQUFLLElBQUksUUFBUSxDQUFDLENBQUM7QUFDbkIsb0JBQVE7QUFBQSxVQUNULENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLFFBQVE7QUFDUCxnQkFBTUEsUUFBTztBQUViLGdCQUFNLFVBQVVBLE1BQUssbUJBQW1CLEVBQUU7QUFFMUMsaUJBQU8sSUFBSSxRQUFRLFNBQVUsU0FBUztBQUNyQyxrQkFBTSxPQUFPQSxNQUFLLElBQUk7QUFDdEIsZ0JBQUksU0FBUyxRQUFXO0FBQ3ZCLHNCQUFRLFdBQVdBLE1BQUssVUFBVSxLQUFLLENBQUM7QUFBQSxZQUN6QyxPQUFPO0FBQ04sc0JBQVEsUUFBUUEsTUFBSyxVQUFVLEtBQUssR0FBRyxLQUFLLFVBQVUsSUFBSSxDQUFDO0FBQUEsWUFDNUQ7QUFFQSxvQkFBUTtBQUFBLFVBQ1QsQ0FBQztBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLFdBQVc7QUFDVixpQkFBTyxJQUFJLFNBQVEsS0FBSyxjQUFjLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxHQUFHO0FBQUEsUUFDeEU7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDaENBLFdBQVMsWUFBWSxNQUFNLEtBQUs7QUFDL0IsVUFBTSxpQkFBaUIsS0FBSyxVQUFVLEdBQUcsSUFBSSxzQkFBc0I7QUFDbkUsUUFBSSxtQkFBbUIsUUFBVztBQUNqQyxZQUFNLE9BQU8sSUFBSSxLQUFLLGNBQWM7QUFDcEMsWUFBTSxZQUFZLEtBQUssVUFBVSxHQUFHLElBQUksb0JBQW9CO0FBRTVELFVBQUksU0FBUyxTQUFTLEdBQUc7QUFDeEIsbUJBQVcsT0FBTyxXQUFXO0FBQzVCLGNBQ0MsVUFBVSxlQUFlLEdBQUcsS0FDNUIsT0FBTyxVQUFVLEdBQUcsTUFBTSxZQUN6QjtBQUNELGlCQUFLLFlBQVksS0FBSyxVQUFVLEdBQUcsQ0FBQztBQUFBLFVBQ3JDO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFFQSxZQUFNLEtBQUssSUFBSSxHQUFHO0FBQUEsSUFDbkI7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQXRHQSxNQXdCTTtBQXhCTjtBQUFBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWFBLE1BQU0sU0FBTixjQUFxQixXQUFXO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUsvQixZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUkseUNBQXlDO0FBQUEsUUFDNUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQSx1QkFBdUIsU0FBUztBQUMvQixvQkFBVSxZQUFZLEtBQUssTUFBTSxRQUFRLE9BQU87QUFFaEQsZ0JBQU0sV0FBVyxLQUFLLFVBQVUsV0FBVztBQUMzQyxjQUFJLFVBQVU7QUFDYixzQkFBVSxJQUFJLFdBQVcsT0FBTyxFQUFFLE9BQU8sUUFBUTtBQUFBLFVBQ2xEO0FBRUEsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVNBLHFCQUFxQixTQUFTO0FBQzdCLG9CQUFVLFlBQVksS0FBSyxNQUFNLFNBQVMsT0FBTztBQUVqRCxnQkFBTSxrQkFBa0IsS0FBSyxVQUFVLHdCQUF3QjtBQUMvRCxnQkFBTSxnQkFBZ0IsS0FBSyxVQUFVLHNCQUFzQjtBQUUzRCxjQUFJLG1CQUFtQixlQUFlO0FBQ3JDLGtCQUFNLE1BQU07QUFDWixzQkFBVTtBQUNWLGdCQUFJLFdBQVcsT0FBTyxFQUFFLE9BQU8sZUFBZSxHQUFHO0FBQUEsVUFDbEQ7QUFFQSxpQkFBTztBQUFBLFFBQ1I7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDekVBLE1Bb0JNO0FBcEJOO0FBQUE7QUFPQTtBQWFBLE1BQU0sYUFBTixjQUF5QixNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTTlCLFlBQVksU0FBUyxVQUFVLFlBQVk7QUFDMUMsZ0JBQU0sT0FBTztBQUNiLGVBQUssY0FBYyxJQUFJO0FBQUEsWUFDdEI7QUFBQSxZQUNBO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPO0FBQUEsWUFDYjtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxjQUFjO0FBQ2IsaUJBQU8sS0FBSyxjQUFjLEVBQUUsVUFBVTtBQUFBLFFBQ3ZDO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxnQkFBZ0I7QUFDZixpQkFBTyxLQUFLLGNBQWMsRUFBRSxZQUFZO0FBQUEsUUFDekM7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDMURBLE1Bb0JNO0FBcEJOO0FBQUE7QUFPQTtBQWFBLE1BQU0saUJBQU4sY0FBNkIsTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1sQyxZQUFZLFNBQVMsVUFBVTtBQUM5QixnQkFBTSxPQUFPO0FBQ2IsZUFBSyxjQUFjLElBQUk7QUFBQSxZQUN0QjtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTztBQUFBLFlBQ2I7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsY0FBYztBQUNiLGlCQUFPLEtBQUssY0FBYyxFQUFFLFVBQVU7QUFBQSxRQUN2QztBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUMrSEEsV0FBU0MsV0FBVUMsT0FBTSxLQUFLLFVBQVU7QUFDdkMsUUFBSTtBQUVKLFdBQU8sTUFBTSxLQUFLLFVBQVUsR0FBRyxHQUFHLE1BQU0sR0FBR0EsS0FBSSxFQUM3QyxLQUFLLENBQUMsU0FBUztBQUNmLGlCQUFXO0FBRVgsWUFBTSxpQkFBaUIsS0FBSyxVQUFVLEdBQUcsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLENBQUM7QUFFcEUsVUFBSSxlQUFlLFFBQVEsS0FBSyxNQUFNLE1BQU0sSUFBSTtBQUMvQyxjQUFNLElBQUk7QUFBQSxVQUNULDREQUE0RCxLQUFLLE1BQU07QUFBQSxVQUN2RTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBRUEsYUFBTyxLQUFLLEtBQUs7QUFBQSxJQUNsQixDQUFDLEVBQ0EsS0FBSyxDQUFDLFNBQVM7QUFDZixVQUFJO0FBRUosVUFBSTtBQUNILGNBQU0sS0FBSyxNQUFNLElBQUk7QUFFckIsaUJBQVMsYUFBYSxJQUFJO0FBQUEsTUFDM0IsU0FBUyxHQUFHO0FBQ1gsWUFBSSxLQUFLLFNBQVMsS0FBSztBQUN0QixpQkFBTyxHQUFHLEtBQUssVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUFBLFFBQ2hDO0FBRUEsY0FBTSxJQUFJO0FBQUEsVUFDVCx1REFBdUQsSUFBSTtBQUFBLFVBQzNEO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFFQSxVQUFJLFlBQVksV0FBVyxRQUFRLEdBQUc7QUFDckMsaUJBQVMsR0FBRztBQUFBLE1BQ2I7QUFFQSxhQUFPO0FBQUEsSUFDUixDQUFDO0FBQUEsRUFDSDtBQTNOQSxNQXFCTSxlQWNBO0FBbkNOO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVUEsTUFBTSxnQkFBZ0IsT0FBTztBQUFBLFFBQzVCO0FBQUEsTUFDRDtBQVlBLE1BQU0sVUFBTixNQUFNLGlCQUFnQixPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUs1QixZQUFZQyxVQUFTO0FBQ3BCLGdCQUFNO0FBRU4sY0FBSSxTQUFTQSxRQUFPLEdBQUc7QUFDdEIsaUJBQUssV0FBV0EsUUFBTztBQUFBLFVBQ3hCO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSxpREFBaUQ7QUFBQSxRQUNwRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUEyQkEsSUFBSSxXQUFXO0FBQ2QsaUJBQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxNQUFNLFVBQVU7QUFBQSxZQUN4QyxPQUFPO0FBQUEsY0FDTixNQUFNO0FBQUEsZ0JBQ0wsUUFBUTtBQUFBLGNBQ1Q7QUFBQSxjQUNBLGtCQUFrQjtBQUFBLGNBQ2xCLGdCQUFnQixDQUFDLEtBQUssR0FBRztBQUFBLGNBQ3pCLEtBQUs7QUFBQSxjQUNMLFNBQVM7QUFBQSxnQkFDUixhQUFhO0FBQUEsZ0JBQ2IsV0FBVyxDQUFDO0FBQUEsY0FDYjtBQUFBLGNBQ0EsV0FBVztBQUFBLGdCQUNWLFFBQVE7QUFBQSxnQkFDUixNQUFNO0FBQUEsY0FDUDtBQUFBLGNBQ0EsUUFBUTtBQUFBLGdCQUNQLE1BQU07QUFBQSxjQUNQO0FBQUEsWUFDRDtBQUFBLFlBQ0EsTUFBTTtBQUFBLGNBQ0wsTUFBTTtBQUFBLGdCQUNMLFFBQVE7QUFBQSxjQUNUO0FBQUEsY0FDQSxrQkFBa0I7QUFBQSxjQUNsQixnQkFBZ0IsQ0FBQyxHQUFHO0FBQUEsY0FDcEIsS0FBSztBQUFBLGNBQ0wsU0FBUztBQUFBLGdCQUNSLGFBQWE7QUFBQSxnQkFDYixXQUFXLENBQUM7QUFBQSxjQUNiO0FBQUEsWUFDRDtBQUFBLFVBQ0QsQ0FBQztBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLE9BQU87QUFDTixjQUFJRCxRQUFPLEtBQUssVUFBVSxXQUFXO0FBQ3JDLGNBQUksQ0FBQyxTQUFTQSxLQUFJO0FBQUcsWUFBQUEsUUFBTyxDQUFDO0FBQzdCLGNBQUksQ0FBQ0EsTUFBSyxRQUFRO0FBQUcsWUFBQUEsTUFBSyxRQUFRLElBQUk7QUFFdEMsY0FBSSxXQUFXLEtBQUssVUFBVSx1QkFBdUI7QUFDckQsY0FBSSxDQUFDO0FBQ0osdUJBQVcsQ0FBQyxRQUFRO0FBQ25CLG1CQUFLLElBQUksS0FBSyx1QkFBdUIsS0FBSyxNQUFNLEdBQUcsQ0FBQztBQUFBLFlBQ3JEO0FBRUQsaUJBQU9ELFdBQVUsS0FBSyxNQUFNQyxPQUFNLFFBQVEsUUFBUTtBQUFBLFFBQ25EO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLFFBQVE7QUFDUCxjQUFJQSxRQUFPLEtBQUssVUFBVSxZQUFZO0FBQ3RDLGNBQUksQ0FBQyxTQUFTQSxLQUFJO0FBQUcsWUFBQUEsUUFBTyxDQUFDO0FBQzdCLGNBQUksT0FBT0EsTUFBSyxTQUFTLE1BQU0sVUFBVTtBQUN4QyxZQUFBQSxNQUFLLFNBQVMsSUFBSTtBQUFBLGNBQ2pCLGdCQUFnQjtBQUFBLFlBQ2pCO0FBQUEsVUFDRDtBQUNBLGNBQUksQ0FBQ0EsTUFBSyxRQUFRO0FBQUcsWUFBQUEsTUFBSyxRQUFRLElBQUk7QUFFdEMsZ0JBQU0sTUFBTSxLQUFLLHFCQUFxQixLQUFLLElBQUksQ0FBQztBQUNoRCxVQUFBQSxNQUFLLE1BQU0sSUFBSSxLQUFLLFVBQVUsR0FBRztBQUVqQyxnQkFBTSxXQUFXLEtBQUssVUFBVSx3QkFBd0I7QUFDeEQsaUJBQU9ELFdBQVUsS0FBSyxNQUFNQyxPQUFNLFNBQVMsUUFBUTtBQUFBLFFBQ3BEO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxXQUFXO0FBQ1YsaUJBQU8sSUFBSTtBQUFBLFlBQ1YsS0FBSyxjQUFjLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRTtBQUFBLFlBQ2pELEtBQUssY0FBYyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUU7QUFBQSxVQUNsRDtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDeEtBLE1BeUJNO0FBekJOO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFnQkEsTUFBTSxrQkFBTixjQUE4QixNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFJbkMsY0FBYztBQUNiLGdCQUFNO0FBQ04sZUFBSyxjQUFjLElBQUk7QUFBQSxZQUN0QixXQUFXLElBQUksYUFBYTtBQUFBLFVBQzdCO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSx3Q0FBd0M7QUFBQSxRQUMzRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsSUFBSSxPQUFPO0FBQ1YsZ0JBQU0sSUFBSSxLQUFLO0FBQ2YsZUFBSyxnQkFBZ0I7QUFDckIsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsUUFBUTtBQUNQLGdCQUFNLE1BQU07QUFDWixlQUFLLGdCQUFnQjtBQUNyQixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLGVBQWUsVUFBVTtBQUN4QixlQUFLLGNBQWMsRUFBRSxVQUFVLE9BQU8sUUFBUTtBQUM5QyxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLGVBQWUsVUFBVTtBQUN4QixlQUFLLGNBQWMsRUFBRSxVQUFVLE9BQU8sUUFBUTtBQUM5QyxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxrQkFBa0I7QUFDakIsaUJBQU8sS0FBSyxjQUFjLEVBQUUsVUFBVSxPQUFPLElBQUk7QUFBQSxRQUNsRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxpQkFBaUIsVUFBVTtBQUMxQixpQkFBTyxLQUFLLGNBQWMsRUFBRSxVQUFVLFNBQVMsUUFBUTtBQUFBLFFBQ3hEO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQzFHQSxNQVlNLFlBV0E7QUF2Qk47QUFBQTtBQU9BO0FBQ0E7QUFJQSxNQUFNLGFBQWEsT0FBTyxRQUFRO0FBV2xDLE1BQU0sVUFBTixNQUFNLGlCQUFnQixLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUsxQixZQUFZLE1BQU07QUFDakIsZ0JBQU07QUFDTixlQUFLLFVBQVUsSUFBSSxlQUFlLElBQUk7QUFBQSxRQUN2QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFVBQVU7QUFDVCxpQkFBTyxLQUFLLFVBQVU7QUFBQSxRQUN2QjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsU0FBUztBQUNSLGlCQUFPLEtBQUssVUFBVTtBQUFBLFFBQ3ZCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsT0FBTyxTQUFTLE1BQU07QUFDckIseUJBQWUsSUFBSTtBQUNuQixpQkFBTyxJQUFJLFNBQVEsS0FBSyxNQUFNLElBQUksQ0FBQztBQUFBLFFBQ3BDO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQ1FBLFdBQVMsY0FBYyxTQUFTLFFBQVE7QUFDdkMsVUFBTUUsUUFBTztBQUViLFVBQU0sTUFBTUEsTUFBSyxVQUFVLEtBQUs7QUFDaEMsUUFBSSxDQUFDLEtBQUs7QUFDVCxhQUFPLGdDQUFnQztBQUN2QztBQUFBLElBQ0Q7QUFFQSxRQUFJLHlCQUF5QjtBQUU3QixRQUFJLG9CQUFvQkEsTUFBSyxVQUFVLG9CQUFvQjtBQUMzRCxRQUFJLENBQUMsVUFBVSxpQkFBaUIsS0FBSyxvQkFBb0IsS0FBSztBQUM3RCwwQkFBb0I7QUFBQSxJQUNyQjtBQUVBLGVBQVcsTUFBTTtBQUNoQixVQUFJLHdCQUF3QjtBQUMzQjtBQUFBLE1BQ0Q7QUFDQSxhQUFPLElBQUksTUFBTSxvQkFBb0IsQ0FBQztBQUFBLElBQ3ZDLEdBQUcsaUJBQWlCO0FBRXBCLFFBQUksbUJBQW1CQSxNQUFLLFVBQVUsOEJBQThCO0FBQ3BFLFFBQUksQ0FBQyxVQUFVLGdCQUFnQixLQUFLLG1CQUFtQjtBQUN0RCx5QkFBbUI7QUFDcEIsUUFBSSxvQkFBb0JBLE1BQUssVUFBVSwrQkFBK0I7QUFDdEUsUUFBSSxDQUFDLFVBQVUsaUJBQWlCLEtBQUssb0JBQW9CO0FBQ3hELDBCQUFvQjtBQUNyQixRQUFJLG1CQUFtQkEsTUFBSyxVQUFVLDhCQUE4QjtBQUNwRSxRQUFJLHFCQUFxQjtBQUFNLHlCQUFtQjtBQUVsRCxJQUFBQSxNQUFLLGlCQUFpQixJQUFJO0FBQzFCLElBQUFBLE1BQUssZ0JBQWdCLEVBQUU7QUFFdkIsUUFDQ0EsTUFBSyxnQkFBZ0IsRUFBRSxVQUN2QkEsTUFBSyxnQkFBZ0IsRUFBRSxPQUFPLGFBQWEsR0FDMUM7QUFDRCxNQUFBQSxNQUFLLGdCQUFnQixFQUFFLE9BQU8sTUFBTTtBQUFBLElBQ3JDO0FBQ0EsSUFBQUEsTUFBSyxnQkFBZ0IsRUFBRSxTQUFTO0FBQ2hDLElBQUFBLE1BQUssZ0JBQWdCLEVBQUUsU0FBUyxJQUFJLFVBQVUsR0FBRztBQUVqRCxJQUFBQSxNQUFLLGdCQUFnQixFQUFFLE9BQU8sWUFBWSxTQUFVLE9BQU87QUFDMUQsVUFBSSxNQUFNLGdCQUFnQixNQUFNO0FBQy9CLGNBQU0sU0FBUyxJQUFJLFdBQVc7QUFDOUIsZUFBTyxpQkFBaUIsV0FBVyxXQUFZO0FBQzlDLFVBQUFBLE1BQUssa0JBQWtCLEVBQUUsSUFBSSxJQUFJLFFBQVEsT0FBTyxNQUFNLENBQUM7QUFBQSxRQUN4RCxDQUFDO0FBQ0QsZUFBTyxXQUFXLElBQUksUUFBUSxNQUFNLElBQUksQ0FBQztBQUFBLE1BQzFDLE9BQU87QUFDTixRQUFBQSxNQUFLLGtCQUFrQixFQUFFLElBQUksUUFBUSxTQUFTLE1BQU0sSUFBSSxDQUFDO0FBQUEsTUFDMUQ7QUFBQSxJQUNEO0FBRUEsSUFBQUEsTUFBSyxnQkFBZ0IsRUFBRSxPQUFPLFNBQVMsV0FBWTtBQUNsRCxNQUFBQSxNQUFLLGdCQUFnQixFQUFFLG1CQUFtQjtBQUMxQyxVQUFJLE9BQU8sWUFBWSxjQUFjLENBQUMsd0JBQXdCO0FBQzdELGlDQUF5QjtBQUN6QixnQkFBUTtBQUFBLE1BQ1Q7QUFBQSxJQUNEO0FBRUEsSUFBQUEsTUFBSyxnQkFBZ0IsRUFBRSxPQUFPLFFBQVEsU0FBVSxPQUFPO0FBQ3RELFVBQUlBLE1BQUssaUJBQWlCLEdBQUc7QUFDNUIsUUFBQUEsTUFBSyxpQkFBaUIsSUFBSTtBQUMxQjtBQUFBLE1BQ0Q7QUFFQSxVQUNDLG9CQUNBLEtBQUssZ0JBQWdCLEVBQUUsbUJBQW1CLG1CQUN6QztBQUNELG1CQUFXLE1BQU07QUFDaEIsVUFBQUEsTUFBSyxRQUFRO0FBQUEsUUFDZCxHQUFHLG1CQUFtQixLQUFLLGdCQUFnQixFQUFFLGdCQUFnQjtBQUFBLE1BQzlEO0FBQUEsSUFDRDtBQUVBLElBQUFBLE1BQUssZ0JBQWdCLEVBQUUsT0FBTyxVQUFVLENBQUMsVUFBVTtBQUNsRCxVQUNDLG9CQUNBQSxNQUFLLGdCQUFnQixFQUFFLG1CQUFtQixtQkFDekM7QUFDRCxtQkFBVyxNQUFNO0FBQ2hCLFVBQUFBLE1BQUssUUFBUTtBQUFBLFFBQ2QsR0FBRyxtQkFBbUIsS0FBSyxnQkFBZ0IsRUFBRSxnQkFBZ0I7QUFBQSxNQUM5RCxPQUFPO0FBQ04sWUFBSSxPQUFPLFdBQVcsY0FBYyxDQUFDLHdCQUF3QjtBQUM1RCxtQ0FBeUI7QUFDekIsaUJBQU8sS0FBSztBQUFBLFFBQ2I7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFqS0EsTUFtQk0sb0JBS0EsaUJBUUEsa0JBTUEsbUJBdUlBO0FBN0tOO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUEsTUFBTSxxQkFBcUIsT0FBTyxjQUFjO0FBS2hELE1BQU0sa0JBQWtCLE9BQU8sV0FBVztBQVExQyxNQUFNLG1CQUFtQixPQUFPLFlBQVk7QUFNNUMsTUFBTSxvQkFBb0IsT0FBTyxhQUFhO0FBdUk5QyxNQUFNLGFBQU4sY0FBeUIsZ0JBQWdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUt4QyxZQUFZQyxVQUFTO0FBQ3BCLGNBQUksU0FBU0EsUUFBTyxHQUFHO0FBQ3RCLFlBQUFBLFdBQVUsRUFBRSxLQUFLQSxTQUFRO0FBQUEsVUFDMUI7QUFFQSxnQkFBTUEsUUFBTztBQUViLGVBQUssa0JBQWtCLElBQUksSUFBSSxnQkFBZ0I7QUFDL0MsZUFBSyxlQUFlLElBQUksSUFBSSxnQkFBZ0I7QUFFNUMsZUFBSyxnQkFBZ0IsSUFBSSxDQUFDO0FBQzFCLGVBQUssZ0JBQWdCLEVBQUUsU0FBUztBQUNoQyxlQUFLLGdCQUFnQixFQUFFLG1CQUFtQjtBQUMxQyxlQUFLLGlCQUFpQixJQUFJO0FBQUEsUUFDM0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsVUFBVTtBQUNULGlCQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUN2QywwQkFBYyxLQUFLLE1BQU0sU0FBUyxNQUFNO0FBQUEsVUFDekMsQ0FBQztBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLGNBQWM7QUFDYixpQkFBTyxLQUFLLGdCQUFnQixHQUFHLFFBQVEsZUFBZTtBQUFBLFFBQ3ZEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSxpQ0FBaUM7QUFBQSxRQUNwRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVVBLElBQUksV0FBVztBQUNkLGlCQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxVQUFVO0FBQUEsWUFDeEMsS0FBSztBQUFBLFlBQ0wsWUFBWTtBQUFBLGNBQ1gsU0FBUztBQUFBLGNBQ1QsV0FBVztBQUFBLGdCQUNWLFNBQVM7QUFBQSxnQkFDVCxVQUFVO0FBQUEsZ0JBQ1YsU0FBUztBQUFBLGNBQ1Y7QUFBQSxZQUNEO0FBQUEsVUFDRCxDQUFDO0FBQUEsUUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVVBLE1BQU0sWUFBWSxRQUFRO0FBQ3pCLGNBQUksQ0FBQyxVQUFVLFVBQVUsS0FBSyxhQUFhLE9BQVEsYUFBYSxNQUFNO0FBQ3JFLHlCQUFhO0FBQUEsVUFDZDtBQUNBLGNBQUksQ0FBQyxTQUFTLE1BQU0sR0FBRztBQUN0QixxQkFBUztBQUFBLFVBQ1Y7QUFFQSxpQkFBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDdkMsZ0JBQUk7QUFDSCxtQkFBSyxpQkFBaUIsSUFBSTtBQUMxQixrQkFBSSxLQUFLLGdCQUFnQixFQUFFLFFBQVE7QUFDbEMscUJBQUssZ0JBQWdCLEVBQUUsT0FBTyxNQUFNLFlBQVksTUFBTTtBQUFBLGNBQ3ZEO0FBQUEsWUFDRCxTQUFTLE9BQU87QUFDZixxQkFBTyxLQUFLO0FBQUEsWUFDYjtBQUNBLG9CQUFRO0FBQUEsVUFDVCxDQUFDO0FBQUEsUUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLE9BQU87QUFDTixpQkFBTyxLQUFLLGtCQUFrQixFQUFFLEtBQUs7QUFBQSxRQUN0QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLGVBQWU7QUFDZCxpQkFBTyxDQUFDLEtBQUssa0JBQWtCLEVBQUUsUUFBUTtBQUFBLFFBQzFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsT0FBTztBQUNOLGlCQUFPLEtBQUssa0JBQWtCLEVBQUUsS0FBSztBQUFBLFFBQ3RDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxlQUFlLFVBQVU7QUFDeEIsZUFBSyxrQkFBa0IsRUFBRSxlQUFlLFFBQVE7QUFDaEQsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxlQUFlLFVBQVU7QUFDeEIsZUFBSyxrQkFBa0IsRUFBRSxlQUFlLFFBQVE7QUFDaEQsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLGlCQUFpQixVQUFVO0FBQzFCLGlCQUFPLEtBQUssa0JBQWtCLEVBQUUsaUJBQWlCLFFBQVE7QUFBQSxRQUMxRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxLQUFLLFNBQVM7QUFDYixpQkFBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDdkMsZ0JBQUksS0FBSyxnQkFBZ0IsRUFBRSxPQUFPLGVBQWUsR0FBRztBQUNuRCxxQkFBTyx5QkFBeUI7QUFBQSxZQUNqQztBQUVBLGlCQUFLLGdCQUFnQixFQUFFLE9BQU8sS0FBSyxLQUFLLFVBQVUsT0FBTyxDQUFDO0FBQzFELG9CQUFRO0FBQUEsVUFDVCxDQUFDO0FBQUEsUUFDRjtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNyVkEsTUFxQk0sa0JBWUFDO0FBakNOLE1BQUFDLG1CQUFBO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVUEsTUFBTSxtQkFBbUIsT0FBTyxZQUFZO0FBWTVDLE1BQU1ELGNBQU4sTUFBTSxvQkFBbUIsT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLL0IsWUFBWUUsVUFBUztBQUNwQixnQkFBTTtBQUVOLGNBQUksU0FBU0EsUUFBTyxHQUFHO0FBQ3RCLFlBQUFBLFdBQVUsRUFBRSxLQUFLQSxTQUFRO0FBQUEsVUFDMUI7QUFFQSxjQUFJLENBQUMsU0FBU0EsUUFBTztBQUFHLFlBQUFBLFdBQVUsQ0FBQztBQUNuQyxlQUFLLFdBQVdBLFFBQU87QUFDdkIsZUFBSyxnQkFBZ0IsSUFBSSxJQUFJLFdBQWM7QUFBQSxZQUMxQyxLQUFLLEtBQUssVUFBVSxLQUFLO0FBQUEsWUFDekIsWUFBWTtBQUFBLGNBQ1gsU0FBUyxLQUFLLFVBQVUsb0JBQW9CO0FBQUEsY0FDNUMsV0FBVztBQUFBLGdCQUNWLFNBQVMsS0FBSyxVQUFVLDhCQUE4QjtBQUFBLGdCQUN0RCxVQUFVLEtBQUssVUFBVSwrQkFBK0I7QUFBQSxnQkFDeEQsU0FBUyxLQUFLLFVBQVUsOEJBQThCO0FBQUEsY0FDdkQ7QUFBQSxZQUNEO0FBQUEsVUFDRCxDQUFDO0FBQUEsUUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxVQUFVO0FBQ1QsaUJBQU8sS0FBSyxnQkFBZ0IsRUFBRSxRQUFRO0FBQUEsUUFDdkM7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLGNBQWM7QUFDYixpQkFBTyxLQUFLLGdCQUFnQixFQUFFLFlBQVk7QUFBQSxRQUMzQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksb0RBQW9EO0FBQUEsUUFDdkU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFzQkEsSUFBSSxXQUFXO0FBQ2QsaUJBQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxNQUFNLFVBQVU7QUFBQSxZQUN4QyxLQUFLO0FBQUEsWUFDTCxPQUFPO0FBQUEsY0FDTixTQUFTO0FBQUEsZ0JBQ1IsYUFBYTtBQUFBLGdCQUNiLFdBQVcsQ0FBQztBQUFBLGNBQ2I7QUFBQSxjQUNBLFdBQVc7QUFBQSxnQkFDVixRQUFRO0FBQUEsZ0JBQ1IsTUFBTTtBQUFBLGNBQ1A7QUFBQSxZQUNEO0FBQUEsWUFDQSxNQUFNO0FBQUEsY0FDTCxTQUFTO0FBQUEsZ0JBQ1IsYUFBYTtBQUFBLGdCQUNiLFdBQVcsQ0FBQztBQUFBLGNBQ2I7QUFBQSxjQUNBLE1BQU07QUFBQSxZQUNQO0FBQUEsWUFDQSxZQUFZO0FBQUEsY0FDWCxTQUFTO0FBQUEsY0FDVCxXQUFXO0FBQUEsZ0JBQ1YsU0FBUztBQUFBLGdCQUNULFVBQVU7QUFBQSxnQkFDVixTQUFTO0FBQUEsY0FDVjtBQUFBLFlBQ0Q7QUFBQSxVQUNELENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsUUFBUTtBQUNQLGlCQUFPLEtBQUssZ0JBQWdCLEVBQUUsTUFBTTtBQUFBLFFBQ3JDO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxPQUFPO0FBQ04saUJBQU8sSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ3ZDLG1CQUFPLEtBQUssZ0JBQWdCLEVBQUUsYUFBYSxNQUFNLE1BQU07QUFDdEQsa0JBQUksTUFBTSxLQUFLLGdCQUFnQixFQUFFLEtBQUs7QUFDdEMsa0JBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRztBQUNuQix1QkFBTyxJQUFJLE1BQU0scUNBQXFDLENBQUM7QUFDdkQ7QUFBQSxjQUNEO0FBRUEsa0JBQUksRUFBRSxlQUFlLFVBQVU7QUFDOUIsdUJBQU8sSUFBSSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3ZEO0FBQUEsY0FDRDtBQUVBLG9CQUFNLElBQUksUUFBUTtBQUNsQixvQkFBTSxLQUFLLHVCQUF1QixLQUFLLE1BQU0sR0FBRztBQUNoRCxtQkFBSyxJQUFJLEdBQUc7QUFBQSxZQUNiO0FBRUEsb0JBQVEsS0FBSyxJQUFJLENBQUM7QUFBQSxVQUNuQixDQUFDO0FBQUEsUUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsUUFBUTtBQUNQLGdCQUFNLE1BQU0sS0FBSyxxQkFBcUIsS0FBSyxJQUFJLENBQUM7QUFDaEQsaUJBQU8sS0FBSyxnQkFBZ0IsRUFBRSxLQUFLLEdBQUc7QUFBQSxRQUN2QztBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsV0FBVztBQUNWLGlCQUFPLElBQUksWUFBVyxLQUFLLGNBQWMsRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDO0FBQUEsUUFDdkU7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDdkxBLE1BdUJNO0FBdkJOO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFDQSxNQUFBQztBQWFBLE1BQU0sZUFBTixNQUFNLHNCQUFxQkMsU0FBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1sQyxDQUFDLG1CQUFtQixJQUFJO0FBQ3ZCLGlCQUFPLGdCQUFnQixjQUFjO0FBQUEsUUFDdEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksdURBQXVEO0FBQUEsUUFDMUU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsV0FBVztBQUNWLGlCQUFPLElBQUk7QUFBQSxZQUNWLEtBQUssY0FBYyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUU7QUFBQSxVQUNsRDtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDbkRBLE1BdUJNO0FBdkJOO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFDQSxNQUFBQztBQWFBLE1BQU0saUJBQU4sTUFBTSx3QkFBdUJDLFNBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNcEMsQ0FBQyxtQkFBbUIsSUFBSTtBQUN2QixpQkFBTyxnQkFBZ0IsZ0JBQWdCO0FBQUEsUUFDeEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPO0FBQUEsWUFDYjtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsV0FBVztBQUNWLGlCQUFPLElBQUk7QUFBQSxZQUNWLEtBQUssY0FBYyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUU7QUFBQSxVQUNsRDtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDdERBLE1BZ0JNO0FBaEJOO0FBQUE7QUFPQTtBQUNBLE1BQUFDO0FBUUEsTUFBTSxpQkFBaUIsSUFBSSxjQUFjO0FBRXpDLFVBQUk7QUFDSCx1QkFBZTtBQUFBLFVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUlBO0FBQUEsUUFDRDtBQUFBLE1BQ0QsU0FBUyxHQUFHO0FBQ1g7QUFBQSxVQUNDLFNBQVMsWUFBWSxFQUFFLGNBQWMsTUFBTTtBQUFBLFVBQzNDO0FBQUEsVUFDQSxJQUFJO0FBQUEsUUFDTDtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNoQ0E7QUFBQTtBQUFBO0FBQUE7QUE2VUEsV0FBUyxjQUFjO0FBQUM7QUFFdkIsUUFBSSxDQUFDLEtBQUssWUFBWTtBQUNyQixZQUFNLElBQUksTUFBTSwyQkFBMkI7QUFBQSxJQUM1QztBQUVBLFVBQU0sUUFBUSxLQUFLLFdBQVcsaUJBQWlCLE1BQU07QUFDckQsZUFBVyxDQUFDLEVBQUUsSUFBSSxLQUFLLE9BQU8sUUFBUSxLQUFLLEdBQUc7QUFDN0MsaUJBQVcsQ0FBQyxFQUFFLElBQUksS0FBSyxPQUFPLFFBQVEsS0FBSyxjQUFjLENBQUMsR0FBRztBQUM1RCxZQUFJLEVBQUUsZ0JBQWdCLGNBQWM7QUFDbkM7QUFBQSxRQUNEO0FBRUEsY0FBTSxRQUFRLElBQUksNEJBQTRCLE1BQU0seUJBQXlCLE1BQU0sd0JBQXdCLE1BQU0sd0JBQXdCO0FBQ3pJLGNBQU0sV0FBVyxLQUFLLGlCQUFpQixLQUFLO0FBRTVDLGNBQU0sT0FBTyxvQkFBSSxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUM7QUFFbEMsWUFBSSxLQUFLLFFBQVEsS0FBSyxHQUFHO0FBQ3hCLGVBQUssSUFBSSxJQUFJO0FBQUEsUUFDZDtBQUVBLFlBQUksS0FBSyxTQUFTLEdBQUc7QUFDcEI7QUFBQSxRQUNEO0FBRUEsc0NBQThCO0FBQUEsVUFDN0I7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsS0FBSyxjQUFjO0FBQUEsUUFDcEI7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFLQSxXQUFTLGlCQUFpQjtBQUFDO0FBRTFCLFFBQUksQ0FBQyxLQUFLLFlBQVk7QUFDckIsWUFBTSxJQUFJLE1BQU0sMkJBQTJCO0FBQUEsSUFDNUM7QUFFQSxVQUFNLFFBQVEsS0FBSyxXQUFXLGlCQUFpQixNQUFNO0FBQ3JELGVBQVcsQ0FBQyxFQUFFLElBQUksS0FBSyxPQUFPLFFBQVEsS0FBSyxHQUFHO0FBQzdDLGlCQUFXLENBQUMsRUFBRSxJQUFJLEtBQUssT0FBTyxRQUFRLEtBQUssY0FBYyxDQUFDLEdBQUc7QUFDNUQsWUFBSSxFQUFFLGdCQUFnQixjQUFjO0FBQ25DO0FBQUEsUUFDRDtBQUVBLGNBQU0sUUFBUSxJQUFJLGdDQUFnQztBQUNsRCxjQUFNLFdBQVcsS0FBSyxpQkFBaUIsS0FBSztBQUU1QyxjQUFNLE9BQU8sb0JBQUksSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBRWxDLFlBQUksS0FBSyxRQUFRLEtBQUssR0FBRztBQUN4QixlQUFLLElBQUksSUFBSTtBQUFBLFFBQ2Q7QUFFQSxZQUFJLEtBQUssU0FBUyxHQUFHO0FBQ3BCO0FBQUEsUUFDRDtBQUVBLHlCQUFpQixLQUFLLE1BQU0sSUFBSTtBQUFBLE1BQ2pDO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFNQSxXQUFTLGlCQUFpQixVQUFVO0FBQUM7QUFFcEMsYUFBUyxRQUFRLENBQUMsWUFBWTtBQUM3QixVQUFJLG1CQUFtQixhQUFhO0FBQ25DLGdCQUFRLGlCQUFpQixTQUFTLE1BQU07QUFDdkMsMkJBQWlCLEtBQUssTUFBTSxPQUFPO0FBQUEsUUFDcEMsQ0FBQztBQUVELGNBQU0sSUFBSSxTQUFTO0FBQ25CLFlBQUksQ0FBQyxXQUFXLENBQUMsR0FBRztBQUNuQjtBQUFBLFFBQ0Q7QUFFQSxjQUFNLElBQUksU0FBUztBQUNuQixZQUFJLENBQUMsV0FBVyxDQUFDLEdBQUc7QUFDbkI7QUFBQSxRQUNEO0FBRUEsY0FBTUMsTUFBSyxRQUFRLFVBQVUsZUFBZTtBQUU1QyxZQUFJLENBQUMsV0FBV0EsR0FBRSxHQUFHO0FBQ3BCO0FBQUEsUUFDRDtBQUdBLGdCQUFRLFVBQVUsaUJBQWlCLFdBQVk7QUFBQSxRQUUvQyxDQUFDO0FBQUEsTUFDRjtBQUFBLElBQ0QsQ0FBQztBQUFBLEVBQ0Y7QUFFQSxXQUFTLGlCQUFpQixRQUFRO0FBQUM7QUFFbEMsUUFBSSxPQUFPLEtBQUssbUJBQW1CLFlBQVk7QUFDOUMsVUFBSSxLQUFLLGVBQWUsTUFBTSxPQUFPO0FBQ3BDLFlBQ0Msa0JBQWtCLGVBQ2xCLGtCQUFrQixvQkFDakI7QUFDRCxpQkFBTyxTQUFTLFFBQVE7QUFBQSxRQUN6QjtBQUNBO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxVQUFNLGFBQWEsS0FBSyxVQUFVLFlBQVk7QUFDOUMsUUFBSSxFQUFFLHNCQUFzQixhQUFhO0FBQ3hDO0FBQUEsSUFDRDtBQUVBLFFBQUksa0JBQWtCLGVBQWUsa0JBQWtCLG9CQUFvQjtBQUMxRSxhQUFPLFNBQVMsVUFBVTtBQUFBLElBQzNCO0FBR0EsVUFBTSxlQUFlLFdBQ25CLElBQUksS0FBSyxjQUFjLEVBQUUsZUFBZSxDQUFDLEVBQ3pDLE1BQU07QUFDUixRQUFJLEVBQUUsd0JBQXdCLFVBQVU7QUFDdkMsWUFBTSxJQUFJLE1BQU0sMENBQTBDO0FBQUEsSUFDM0Q7QUFFQSxpQkFDRSxLQUFLLENBQUMsTUFBTTtBQUNaLFVBQ0Msa0JBQWtCLGVBQ2xCLGtCQUFrQixvQkFDakI7QUFDRCxlQUFPLFNBQVMsWUFBWTtBQUFBLE1BQzdCO0FBQ0EsV0FBSyxjQUFjLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixJQUFJLENBQUM7QUFBQSxJQUMvRCxDQUFDLEVBQ0EsTUFBTSxDQUFDLE1BQU07QUFDYixVQUFJLGFBQWEsWUFBWTtBQUM1QixhQUFLLGNBQWMsRUFBRSxXQUFXLEVBQUUsdUJBQXVCLElBQ3hELEVBQUUsY0FBYztBQUFBLE1BQ2xCO0FBRUEsVUFDQyxrQkFBa0IsZUFDbEIsa0JBQWtCLG9CQUNqQjtBQUNELGVBQU8sU0FBUyxRQUFRO0FBQUEsTUFDekI7QUFFQSxVQUFJLGtCQUFrQixvQkFBb0I7QUFDekMsZUFBTyxXQUFXLEVBQUUsT0FBTztBQUMzQixlQUFPLFlBQVk7QUFBQSxNQUNwQjtBQUFBLElBQ0QsQ0FBQztBQUFBLEVBQ0g7QUFZQSxXQUFTQyw0QkFBMkI7QUFBQztBQUNwQyxVQUFNQyxXQUFVLENBQUM7QUFFakIsVUFBTSxhQUFhLEtBQUssYUFBYSx5QkFBeUI7QUFDOUQsUUFBSSxTQUFTLFVBQVUsR0FBRztBQUN6QixpQkFBVyxDQUFDLEtBQUssV0FBVyxLQUFLLEtBQUssZUFBZSxHQUFHO0FBQ3ZELFlBQUksZUFBZSxLQUFLO0FBQ3ZCLGNBQUksT0FBTyxLQUFLLGFBQWEsbUNBQW1DO0FBRWhFLGNBQUk7QUFDSCxtQkFBTyxLQUFLLE1BQU0sSUFBSTtBQUFBLFVBQ3ZCLFNBQVMsR0FBRztBQUNYLGlCQUFLLGFBQWEsd0JBQXdCLEVBQUUsU0FBUyxDQUFDO0FBQ3REO0FBQUEsVUFDRDtBQUVBLGNBQUk7QUFDSCxZQUFBQSxTQUFRLFlBQVksSUFBSSxJQUFJLFlBQVksSUFBSTtBQUFBLFVBQzdDLFNBQVMsR0FBRztBQUNYLGlCQUFLLGFBQWEsd0JBQXdCLEVBQUUsU0FBUyxDQUFDO0FBQ3REO0FBQUEsVUFDRDtBQUVBO0FBQUEsUUFDRDtBQUVBLFlBQUlBLFNBQVEsWUFBWSxhQUFhLFlBQVk7QUFDaEQ7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxXQUFPQTtBQUFBLEVBQ1I7QUFNQSxXQUFTQyxnQkFBZTtBQUN2QixVQUFNQyxRQUFPO0FBRWIsUUFBSSxpQkFBaUI7QUFDckIsSUFBQUEsTUFBSyxjQUFjLEVBQUU7QUFBQSxNQUNwQixJQUFJLFNBQVMsV0FBWTtBQUN4QixjQUFNLGFBQWFBLE1BQUssVUFBVSxZQUFZO0FBQzlDLFlBQUksZUFBZSxnQkFBZ0I7QUFDbEMsY0FBSSxXQUFXLEtBQUssV0FBWTtBQUMvQixZQUFBQSxNQUFLLFFBQVE7QUFBQSxVQUNkLENBQUMsRUFBRSxJQUFJO0FBQUEsUUFDUjtBQUVBLHlCQUFpQjtBQUFBLE1BQ2xCLENBQUM7QUFBQSxJQUNGO0FBQUEsRUFDRDtBQU1BLFdBQVNDLHlCQUF3QjtBQUFDO0FBRWpDLFFBQUksQ0FBQyxLQUFLLFlBQVk7QUFDckIsWUFBTSxJQUFJLE1BQU0sMkJBQTJCO0FBQUEsSUFDNUM7QUFFQSxTQUFLLGlCQUFpQixJQUFJLEtBQUssV0FBVztBQUFBLE1BQ3pDO0FBQUEsSUFDRDtBQUNBLFdBQU87QUFBQSxFQUNSO0FBTUEsV0FBU0MsZ0JBQWM7QUFFdEIsV0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNSO0FBdGxCQSxNQWlETSxrQ0FTQSxnQkFPQSx1QkFTQSxtQkFTQSw2QkFTQSx5QkFtQ0E7QUEvSE4sTUFBQUMsYUFBQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFBQztBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUFDO0FBU0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBQUM7QUFDQSxNQUFBRDtBQUlBLE1BQUFFO0FBQ0E7QUFDQTtBQVNBLE1BQU0sbUNBQW1DLEdBQUcsZ0JBQWdCO0FBUzVELE1BQU0saUJBQWlCLE9BQU8sSUFBSSx3Q0FBd0M7QUFPMUUsTUFBTSx3QkFBd0IsT0FBTztBQUFBLFFBQ3BDO0FBQUEsTUFDRDtBQU9BLE1BQU0sb0JBQW9CLE9BQU87QUFBQSxRQUNoQztBQUFBLE1BQ0Q7QUFPQSxNQUFNLDhCQUE4QixPQUFPO0FBQUEsUUFDMUM7QUFBQSxNQUNEO0FBT0EsTUFBTSwwQkFBMEI7QUFtQ2hDLE1BQU0sT0FBTixNQUFNLGNBQWEsY0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLaEMsY0FBYztBQUNiLGdCQUFNO0FBQ04sZUFBSyxjQUFjLElBQUksSUFBSSxjQUFjLENBQUMsQ0FBQztBQUFBLFFBQzVDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLDhCQUE4QjtBQUFBLFFBQ2pEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFpQkEsSUFBSSxXQUFXO0FBQ2QsaUJBQU8sT0FBTztBQUFBLFlBQ2IsQ0FBQztBQUFBLFlBQ0QsTUFBTTtBQUFBLFlBQ047QUFBQSxjQUNDLFdBQVc7QUFBQSxnQkFDVixNQUFNTCxjQUFZO0FBQUEsY0FDbkI7QUFBQSxjQUNBLFlBQVk7QUFBQSxjQUNaLGdCQUFnQjtBQUFBLGdCQUNmLFVBQVU7QUFBQSxnQkFDVixjQUFjO0FBQUEsY0FDZjtBQUFBLGNBQ0EsU0FBUztBQUFBLGdCQUNSLE1BQU07QUFBQSxjQUNQO0FBQUEsWUFDRDtBQUFBLFlBQ0FMLDBCQUF5QixLQUFLLElBQUk7QUFBQSxVQUNuQztBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLG9CQUFvQjtBQUNuQixnQkFBTSxtQkFBbUIsRUFBRTtBQUFBLFFBQzVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVlBLFVBQVU7QUFBQztBQUVWLGNBQUk7QUFDSCxpQkFBSyxhQUFhLG9CQUFvQixFQUFFO0FBQ3hDLGtCQUFNLGFBQWEsS0FBSyxVQUFVLFlBQVk7QUFFOUMsZ0JBQUksRUFBRSxzQkFBc0IsYUFBYTtBQUN4QyxvQkFBTSxJQUFJLE1BQU0sc0JBQXNCO0FBQUEsWUFDdkM7QUFFQSxtQkFBTyxXQUNMLEtBQUssRUFDTCxLQUFLLE1BQU07QUFDWCxtQkFBSyxjQUFjLEVBQUUsV0FBVyxXQUFXLElBQUksQ0FBQztBQUFBLFlBQ2pELENBQUMsRUFDQSxLQUFLLE1BQU07QUFDWCxrQkFBSSxXQUFXLE1BQU07QUFDcEIscUJBQUssZ0JBQWdCLGtCQUFrQjtBQUFBLGNBQ3hDLENBQUMsRUFBRSxJQUFJO0FBQUEsWUFDUixDQUFDLEVBQ0EsTUFBTSxDQUFDLE1BQU07QUFDYixtQkFBSyxnQkFBZ0Isa0JBQWtCO0FBQ3ZDLG1CQUFLLGFBQWEsd0JBQXdCLEVBQUUsU0FBUyxDQUFDO0FBQUEsWUFDdkQsQ0FBQztBQUFBLFVBQ0gsU0FBUyxHQUFHO0FBQ1gsaUJBQUssYUFBYSx3QkFBd0IsRUFBRSxTQUFTLENBQUM7QUFDdEQsaUJBQUssZ0JBQWdCLGtCQUFrQjtBQUN2QyxrQkFBTTtBQUFBLFVBQ1A7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLENBQUMsb0JBQW9CLElBQUk7QUFBQztBQUN6QixnQkFBTSxvQkFBb0IsRUFBRTtBQUU1QixVQUFBSSx1QkFBc0IsS0FBSyxJQUFJO0FBQy9CLHlCQUFlLEtBQUssSUFBSTtBQUN4QixzQkFBWSxLQUFLLElBQUk7QUFDckIsVUFBQUYsY0FBYSxLQUFLLElBQUk7QUFFdEIsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLFlBQVk7QUFDWCxpQkFBTyxLQUFLLGNBQWMsRUFBRSxXQUFXO0FBQUEsUUFDeEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsT0FBTyxTQUFTO0FBQ2YsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLE9BQU8sbUJBQW1CO0FBQ3pCLGlCQUFPLENBQUMsY0FBYztBQUFBLFFBQ3ZCO0FBQUEsUUFFQSxRQUFRLDJCQUEyQixJQUFJLG9CQUFJLElBQUk7QUFBQSxVQUM5QyxDQUFDLFdBQVcsT0FBTztBQUFBLFVBQ25CLENBQUMsZ0JBQWdCLFlBQVk7QUFBQSxVQUM3QixDQUFDLGtCQUFrQixjQUFjO0FBQUEsVUFDakMsQ0FBQyxjQUFjUyxXQUFVO0FBQUEsUUFDMUIsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUQsT0FBTyxtQkFBbUIsTUFBTSxZQUFZO0FBQzNDLGdCQUFLLDJCQUEyQixFQUFFLElBQUksTUFBTSxVQUFVO0FBQUEsUUFDdkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxPQUFPLHFCQUFxQixNQUFNO0FBQ2pDLGdCQUFLLDJCQUEyQixFQUFFLE9BQU8sSUFBSTtBQUFBLFFBQzlDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsT0FBTyxpQkFBaUI7QUFDdkIsaUJBQU8sTUFBSywyQkFBMkI7QUFBQSxRQUN4QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsaUJBQWlCO0FBQ2hCLGNBQUksUUFBUTtBQUVaLGdCQUFNLFdBQVcsS0FBSyxVQUFVLHlCQUF5QjtBQUN6RCxnQkFBTSxRQUFRLG1CQUFtQixLQUFLLE1BQU0sUUFBUTtBQUNwRCxnQkFBTSxRQUFRLENBQUMsU0FBUztBQUN2QixnQkFBSSxPQUFPLEtBQUssbUJBQW1CLFlBQVk7QUFDOUMsa0JBQUksS0FBSyxlQUFlLE1BQU0sT0FBTztBQUNwQyx3QkFBUTtBQUFBLGNBQ1Q7QUFBQSxZQUNEO0FBQUEsVUFDRCxDQUFDO0FBRUQsaUJBQU87QUFBQSxRQUNSO0FBQUEsTUFDRDtBQWdSQSw0QkFBc0IsSUFBSTtBQUFBO0FBQUE7OztBQ3hsQjFCLE1Bc0JNQztBQXRCTjtBQUFBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFZQSxNQUFNQSxZQUFOLE1BQU0sa0JBQWlCLElBQUk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBSzFCLFlBQVksUUFBUTtBQUNuQixnQkFBTTtBQUVOLGNBQUksV0FBVztBQUFXO0FBRTFCLGNBQUksUUFBUSxNQUFNLEdBQUc7QUFDcEIsbUJBQU8sUUFBUSxDQUFDLFVBQVUsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUFBLFVBQzFDLFdBQVcsV0FBVyxRQUFRLFNBQVEsR0FBRztBQUN4QyxtQkFBTyxRQUFRLENBQUMsVUFBVSxLQUFLLElBQUksS0FBSyxDQUFDO0FBQUEsVUFDMUMsV0FBVyxXQUFXLFFBQVFDLEtBQUksR0FBRztBQUNwQyxpQkFBSyxJQUFJLE1BQU07QUFBQSxVQUNoQixPQUFPO0FBQ04sa0JBQU0sSUFBSSxNQUFNLG9CQUFvQjtBQUFBLFVBQ3JDO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSxrQ0FBa0M7QUFBQSxRQUNyRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLElBQUksTUFBTTtBQUNULGdCQUFNLElBQUksaUJBQWlCLE1BQU1BLEtBQUksQ0FBQztBQUN0QyxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsT0FBTyxNQUFNO0FBQ1osZ0JBQU0sT0FBTyxpQkFBaUIsTUFBTUEsS0FBSSxDQUFDO0FBQ3pDLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxJQUFJLE1BQU07QUFDVCxpQkFBTyxNQUFNLElBQUksaUJBQWlCLE1BQU1BLEtBQUksQ0FBQztBQUFBLFFBQzlDO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxRQUFRO0FBQ1AsZ0JBQU0sTUFBTTtBQUNaLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsVUFBVTtBQUNULGlCQUFPLE1BQU0sS0FBSyxJQUFJO0FBQUEsUUFDdkI7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLFNBQVM7QUFDUixpQkFBTyxLQUFLLFFBQVE7QUFBQSxRQUNyQjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsV0FBVztBQUNWLGdCQUFNLFFBQVEsQ0FBQztBQUVmLHFCQUFXLFFBQVEsS0FBSyxRQUFRLEdBQUc7QUFDbEMsa0JBQU0sS0FBSyxLQUFLLFNBQVMsQ0FBQztBQUFBLFVBQzNCO0FBRUEsaUJBQU8sTUFBTSxLQUFLLElBQUk7QUFBQSxRQUN2QjtBQUFBLFFBRUEsSUFBSSxTQUFTO0FBQ1osaUJBQU8sTUFBTTtBQUFBLFFBQ2Q7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDNEVBLFdBQVMsdUJBQXVCLE1BQU0sU0FBUztBQUM5QyxVQUFNQyxRQUFPO0FBRWIsUUFBSSxTQUFTLE1BQU07QUFDbEIsV0FBSyxtQkFBbUIsRUFBRSxTQUFTO0FBQUEsSUFDcEM7QUFFQSxTQUFLLG1CQUFtQixFQUFFLFdBQVcsUUFBUSxTQUFVLE9BQU87QUFDN0QsWUFBTSxtQkFBbUIsRUFBRSxTQUFTO0FBQ3BDLFlBQU0sbUJBQW1CLEVBQUUsUUFDMUIsS0FBSyxtQkFBbUIsRUFBRSxRQUFRO0FBQ25DLDZCQUF1QixLQUFLQSxPQUFNLE9BQU8sT0FBTztBQUFBLElBQ2pELENBQUM7QUFDRCxXQUFPO0FBQUEsRUFDUjtBQS9NQSxNQW1CTSxxQkFNQSxxQkFZQUM7QUFyQ047QUFBQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQSxNQUFNLHNCQUFzQixPQUFPLGNBQWM7QUFNakQsTUFBTSxzQkFBc0IsT0FBTyxlQUFlO0FBWWxELE1BQU1BLFFBQU4sTUFBTSxjQUFhLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUl2QixZQUFZLE9BQU87QUFDbEIsZ0JBQU07QUFDTixlQUFLLG1CQUFtQixJQUFJO0FBRTVCLGVBQUssbUJBQW1CLElBQUk7QUFBQSxZQUMzQixRQUFRO0FBQUEsWUFDUixZQUFZLElBQUlDLFVBQVM7QUFBQSxZQUN6QixPQUFPO0FBQUEsVUFDUjtBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksNkJBQTZCO0FBQUEsUUFDaEQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLElBQUksUUFBUTtBQUNYLGlCQUFPLEtBQUssbUJBQW1CO0FBQUEsUUFDaEM7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLElBQUksTUFBTSxPQUFPO0FBQ2hCLGVBQUssbUJBQW1CLElBQUk7QUFBQSxRQUM3QjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsSUFBSSxTQUFTO0FBQ1osaUJBQU8sS0FBSyxtQkFBbUIsRUFBRTtBQUFBLFFBQ2xDO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxJQUFJLFFBQVE7QUFDWCxpQkFBTyxLQUFLLG1CQUFtQixFQUFFO0FBQUEsUUFDbEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsSUFBSSxhQUFhO0FBQ2hCLGlCQUFPLEtBQUssbUJBQW1CLEVBQUU7QUFBQSxRQUNsQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxJQUFJLFdBQVcsWUFBWTtBQUMxQixlQUFLLG1CQUFtQixFQUFFLGFBQWE7QUFBQSxZQUN0QztBQUFBLFlBQ0FBO0FBQUEsVUFDRDtBQUNBLGlDQUF1QixLQUFLLE1BQU0sTUFBTSxDQUFDO0FBQUEsUUFDMUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsWUFBWSxNQUFNO0FBQ2pCLGVBQUssbUJBQW1CLEVBQUUsV0FBVyxJQUFJLGlCQUFpQixNQUFNLEtBQUksQ0FBQztBQUNyRSxlQUFLLG1CQUFtQixFQUFFLFNBQVM7QUFFbkMsZUFBSyxtQkFBbUIsRUFBRSxRQUFRLEtBQUssUUFBUTtBQUMvQyxpQ0FBdUIsS0FBSyxNQUFNLE1BQU0sQ0FBQztBQUN6QyxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsWUFBWSxNQUFNO0FBQ2pCLGVBQUssbUJBQW1CLEVBQUUsV0FBVyxPQUFPLGlCQUFpQixNQUFNLEtBQUksQ0FBQztBQUN4RSxlQUFLLG1CQUFtQixFQUFFLFNBQVM7QUFFbkMsZUFBSyxtQkFBbUIsRUFBRSxRQUFRO0FBQ2xDLGlDQUF1QixLQUFLLE1BQU0sTUFBTSxFQUFFO0FBQzFDLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxnQkFBZ0I7QUFDZixpQkFBTyxLQUFLLG1CQUFtQixFQUFFLFdBQVcsU0FBUztBQUFBLFFBQ3REO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLFNBQVMsTUFBTTtBQUNkLGlCQUFPLEtBQUssbUJBQW1CLEVBQUUsV0FBVztBQUFBLFlBQzNDLGlCQUFpQixNQUFNLEtBQUk7QUFBQSxVQUM1QjtBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsV0FBVztBQUNWLGdCQUFNLFFBQVEsQ0FBQztBQUNmLGNBQUksS0FBSyxtQkFBbUIsR0FBRztBQUM5QixnQkFBSSxRQUFRLEtBQUssbUJBQW1CO0FBQ3BDLGdCQUFJLENBQUMsWUFBWSxLQUFLO0FBQ3JCLHNCQUFRLEtBQUssVUFBVSxLQUFLLG1CQUFtQixDQUFDO0FBRWpELGtCQUFNLEtBQUssS0FBSztBQUFBLFVBQ2pCO0FBRUEsY0FBSSxDQUFDLEtBQUssY0FBYyxHQUFHO0FBQzFCLG1CQUFPLE1BQU0sS0FBSyxJQUFJO0FBQUEsVUFDdkI7QUFFQSxnQkFBTSxRQUFRLEtBQUssV0FBVztBQUM5QixjQUFJLFVBQVU7QUFFZCxxQkFBVyxRQUFRLEtBQUssWUFBWTtBQUNuQztBQUNBLGtCQUFNLFVBQVUsVUFBVSxVQUFVLFdBQU0sVUFBSztBQUFBLGNBQzlDLElBQUksS0FBSztBQUFBLGNBQ1Q7QUFBQSxZQUNEO0FBQ0Esa0JBQU0sS0FBSyxTQUFTLEtBQUssU0FBUyxDQUFDO0FBQUEsVUFDcEM7QUFFQSxpQkFBTyxNQUFNLEtBQUssSUFBSTtBQUFBLFFBQ3ZCO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQ3BEQSxXQUFTLFVBQVUsU0FBUyxVQUFVLE9BQU8sYUFBYUMsVUFBUztBQUNsRSxVQUFNLFFBQVEsb0JBQUksSUFBSTtBQUV0QixRQUFJLENBQUMsU0FBU0EsUUFBTyxHQUFHO0FBQ3ZCLE1BQUFBLFdBQVUsQ0FBQztBQUFBLElBQ1o7QUFFQSxJQUFBQSxXQUFVO0FBQUEsTUFDVCxDQUFDO0FBQUEsTUFDRDtBQUFBLFFBQ0MsZ0JBQWdCLENBQUMsTUFBTSxNQUFTO0FBQUEsUUFDaEMsUUFBUTtBQUFBLE1BQ1Q7QUFBQSxNQUNBQTtBQUFBLElBQ0Q7QUFFQSxVQUFNLFNBQVNBLFVBQVM7QUFDeEIsUUFBSSxpQkFBaUJBLFNBQVE7QUFDN0IsUUFBSSxDQUFDLFFBQVEsY0FBYyxHQUFHO0FBQzdCLHVCQUFpQixDQUFDLGNBQWM7QUFBQSxJQUNqQztBQUVBLFVBQU0sV0FBVyxjQUFjLFNBQVMsVUFBVSxRQUFRLFNBQVUsR0FBRyxHQUFHLEdBQUc7QUFDNUUsWUFBTSxNQUFNLElBQUksS0FBSztBQUNyQixVQUFJLE1BQU0sSUFBSSxXQUFXO0FBQ3pCLFVBQUksZUFBZSxRQUFRLEdBQUcsTUFBTTtBQUFJLGNBQU07QUFFOUMsVUFBSSxRQUFRLFFBQVc7QUFDdEIsY0FBTSxJQUFJLE1BQU0sOENBQThDO0FBQUEsTUFDL0Q7QUFFQSxRQUFFLFlBQVksSUFBSTtBQUVsQixZQUFNLE9BQU8sSUFBSUMsTUFBSyxDQUFDO0FBQ3ZCLFdBQUssSUFBSSxHQUFHLElBQ1QsS0FBSyxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksSUFDdEIsS0FBSyxJQUFJLEtBQUssSUFBSUMsVUFBUyxFQUFFLElBQUksSUFBSSxDQUFDO0FBQ3pDLFlBQU0sSUFBSSxLQUFLLElBQUk7QUFBQSxJQUNwQixDQUFDO0FBRUQsVUFBTSxRQUFRLENBQUMsU0FBUztBQUN2QixZQUFNLEtBQUssT0FBTyxPQUFPLElBQUksS0FBSztBQUVsQyxVQUFJLFNBQVMsSUFBSSxFQUFFLEdBQUc7QUFDckIsYUFBSyxhQUFhLFNBQVMsSUFBSSxFQUFFO0FBQ2pDLGlCQUFTLE9BQU8sRUFBRTtBQUFBLE1BQ25CO0FBQUEsSUFDRCxDQUFDO0FBRUQsVUFBTSxPQUFPLElBQUlBLFVBQVM7QUFFMUIsYUFBUyxRQUFRLENBQUMsTUFBTTtBQUN2QixVQUFJLGFBQWEsS0FBSztBQUNyQixVQUFFLFFBQVEsQ0FBQyxNQUFNO0FBQ2hCLGVBQUssSUFBSSxDQUFDO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFDRjtBQUFBLElBQ0QsQ0FBQztBQUVELFdBQU87QUFBQSxFQUNSO0FBak1BLE1BbUJNLGNBTUE7QUF6Qk47QUFBQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQSxNQUFNLGVBQWUsT0FBTyxRQUFRO0FBTXBDLE1BQU0sYUFBYSxPQUFPLE1BQU07QUFBQTtBQUFBOzs7QUN6QmhDLE1BcUJNLGtCQVlBO0FBakNOO0FBQUE7QUFPQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQSxNQUFNLG1CQUFtQixPQUFPLFlBQVk7QUFZNUMsTUFBTSx3QkFBTixNQUFNLCtCQUE4QixLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFJeEMsWUFBWSxNQUFNO0FBQ2pCLGdCQUFNO0FBRU4sZUFBSyxnQkFBZ0IsSUFBSTtBQUd6QixjQUFJLFdBQVcsTUFBTUMsU0FBUSxHQUFHO0FBQy9CLGtCQUFNLFdBQVc7QUFDakIsbUJBQU8sSUFBSUMsTUFBSztBQUNoQixpQkFBSyxhQUFhO0FBQ2xCLGlCQUFLLGdCQUFnQixJQUFJO0FBQUEsVUFDMUI7QUFFQSxlQUFLLGNBQWMsSUFBSSxpQkFBaUIsTUFBTUEsS0FBSTtBQUFBLFFBQ25EO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLENBQUMsT0FBTyxRQUFRLElBQUksYUFBYTtBQU1oQyxjQUFJLEtBQUssY0FBYyxNQUFNLFFBQVc7QUFDdkM7QUFBQSxVQUNEO0FBR0EsY0FBSSxLQUFLLGdCQUFnQixNQUFNLE1BQU07QUFDcEMsa0JBQU0sS0FBSyxjQUFjO0FBQUEsVUFDMUI7QUFFQSxjQUFJLEtBQUssY0FBYyxFQUFFLGNBQWMsR0FBRztBQUN6QyxrQkFBTSxhQUFhLEtBQUssY0FBYyxFQUFFO0FBRXhDLHVCQUFXLFFBQVEsWUFBWTtBQUM5QixxQkFBTyxJQUFJLHVCQUFzQixJQUFJO0FBQUEsWUFDdEM7QUFBQSxVQUNEO0FBRUE7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLFFBQVEsVUFBVTtBQUNqQixxQkFBVyxRQUFRLE1BQU07QUFDeEIscUJBQVMsSUFBSTtBQUFBLFVBQ2Q7QUFDQSxpQkFBTztBQUFBLFFBQ1I7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDN0ZBLE1BZ0JNO0FBaEJOO0FBQUE7QUFPQTtBQUNBLE1BQUFDO0FBUUEsTUFBTSx1QkFBdUIsSUFBSSxjQUFjO0FBRS9DLFVBQUk7QUFDSCw2QkFBcUI7QUFBQSxVQUNwQjtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBSUE7QUFBQSxRQUNEO0FBQUEsTUFDRCxTQUFTLEdBQUc7QUFDWDtBQUFBLFVBQ0MsU0FBUyxZQUFZLEVBQUUsY0FBYyxNQUFNO0FBQUEsVUFDM0M7QUFBQSxVQUNBLElBQUk7QUFBQSxRQUNMO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQ2hDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd05BLFdBQVNDLDRCQUEyQixPQUFPO0FBQUM7QUFFM0MsWUFBUSxRQUFRLE1BQU0sR0FBRztBQUFBLE1BQ3hCLEtBQUs7QUFDSixpQ0FBeUIsS0FBSyxNQUFNLE9BQU8sT0FBTztBQUNsRCxjQUFNLGVBQWU7QUFDckI7QUFBQSxNQUNELEtBQUs7QUFDSixpQ0FBeUIsS0FBSyxNQUFNLE9BQU8sTUFBTTtBQUNqRCxjQUFNLGVBQWU7QUFDckI7QUFBQSxJQUNGO0FBQUEsRUFDRDtBQU1BLFdBQVMseUJBQXlCLE9BQU8sTUFBTTtBQUM5QyxxQkFBaUIsT0FBTyxLQUFLO0FBRTdCLFFBQUksT0FBTyxNQUFNLGlCQUFpQixZQUFZO0FBQzdDLFlBQU0sSUFBSSxNQUFNLG1CQUFtQjtBQUFBLElBQ3BDO0FBRUEsVUFBTSxPQUFPLE1BQU0sYUFBYTtBQUNoQyxVQUFNLGFBQWEsS0FBSyxNQUFNO0FBRTlCLFVBQU0sUUFBUSxXQUFXLGFBQWEsb0JBQW9CO0FBQzFELFFBQUksVUFBVSxNQUFNO0FBQ25CLFlBQU0sVUFBVSxXQUFXO0FBQUEsUUFDMUI7QUFBQSxNQUNEO0FBQ0EsVUFBSSxtQkFBbUIsYUFBYTtBQUNuQyxrQkFBVSxTQUFTLE9BQU87QUFBQSxNQUMzQjtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBU0EsV0FBUyxlQUFlLE1BQU07QUFBQztBQUM5QixxQkFBaUIsTUFBTUMsS0FBSTtBQUUzQixVQUFNLFFBQVEsSUFBSSxVQUFVLEtBQUssS0FBSyxFQUFFO0FBQUEsTUFDdkMsS0FBSyxVQUFVLHlCQUF5QixFQUFFO0FBQUEsSUFDM0M7QUFDQSxVQUFNLFFBQVEsSUFBSSxVQUFVLEtBQUssS0FBSyxFQUFFO0FBQUEsTUFDdkMsS0FBSyxVQUFVLHlCQUF5QixFQUFFO0FBQUEsSUFDM0M7QUFFQSxXQUFPO0FBQUEsTUFDTjtBQUFBLE1BQ0E7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQU9BLFdBQVMsZ0JBQWdCLE9BQU87QUFBQztBQUNoQyxRQUFJLE9BQU8sS0FBSyxtQkFBbUIsRUFBRSxJQUFJLEtBQUs7QUFDOUMsUUFBSSxTQUFTLFFBQVc7QUFDdkIsYUFBTyxLQUFLLG1CQUFtQixFQUFFLElBQUksU0FBUyxLQUFLLENBQUM7QUFBQSxJQUNyRDtBQUVBLFVBQU0sUUFBUSxDQUFDO0FBRWYsUUFBSSxnQkFBZ0JBLE9BQU07QUFDekIsVUFBSSxNQUFNO0FBQ1YsYUFBTyxLQUFLO0FBQ1gsY0FBTSxrQkFBa0IsZUFBZSxLQUFLLE1BQU0sR0FBRztBQUNyRCxjQUFNLFFBQVEsZ0JBQWdCLEtBQUs7QUFDbkMsY0FBTSxJQUFJO0FBQUEsTUFDWDtBQUFBLElBQ0Q7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQWlCQSxXQUFTLDRCQUE0QixPQUFPO0FBQUM7QUFDNUMsV0FBTyxnQkFDTCxLQUFLLE1BQU0sS0FBSyxFQUNoQixLQUFLLEtBQUssVUFBVSx1QkFBdUIsS0FBSyxDQUFDO0FBQUEsRUFDcEQ7QUFZQSxXQUFTQyxvQkFBbUI7QUFBQztBQUU1QixRQUFJLENBQUMsS0FBSyxZQUFZO0FBQ3JCLFlBQU0sSUFBSSxNQUFNLDJCQUEyQjtBQUFBLElBQzVDO0FBRUEsU0FBSyxzQkFBc0IsSUFBSSxDQUFDLFVBQVU7QUFDekMsWUFBTSxVQUFVO0FBQUEsUUFDZjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRDtBQUNBLFVBQUksRUFBRSxtQkFBbUIsY0FBYztBQUN0QztBQUFBLE1BQ0Q7QUFFQSxZQUFNLFlBQVksdUJBQXVCLFNBQVMsZ0JBQWdCLFFBQVE7QUFDMUUsWUFBTSxRQUFRLFVBQ1osYUFBYSxrQ0FBa0MsRUFDL0MsTUFBTSxHQUFHLEVBQ1QsSUFBSTtBQUVOLFlBQU0sZUFBZSxLQUFLLFVBQVUsV0FBVyxLQUFLLFFBQVE7QUFFNUQsWUFBTSxXQUFXLGlCQUFpQixVQUFVLFNBQVM7QUFDckQsV0FBSyxVQUFVLFdBQVcsS0FBSyxVQUFVLFFBQVE7QUFFakQsWUFBTSxnQkFBZ0IsYUFBYSxTQUFTLFlBQVk7QUFFeEQsVUFBSSxVQUFVLGFBQWEsZ0JBQWdCLEdBQUc7QUFDN0MsY0FBTSxTQUFTLFVBQVUsYUFBYSxnQkFBZ0I7QUFFdEQsWUFBSSxNQUFNLFVBQVU7QUFDcEIsY0FBTSxjQUFjLFNBQVMsTUFBTSxJQUFJO0FBRXZDLGNBQU0sTUFBTSxDQUFDQyxJQUFHLE1BQU07QUFDckIsY0FBSSxhQUFhLFFBQVE7QUFDeEIsbUJBQU9BLE9BQU07QUFBQSxVQUNkO0FBRUEsaUJBQU9BLE1BQUs7QUFBQSxRQUNiO0FBRUEsZUFDQyxLQUFLLGFBQWEsZ0JBQWdCLEtBQ2xDLElBQUksU0FBUyxJQUFJLGFBQWEsZ0JBQWdCLENBQUMsR0FBRyxXQUFXLEdBQzVEO0FBQ0QsZ0JBQU0sV0FBVyxJQUNmLGFBQWEsa0NBQWtDLEVBQy9DLE1BQU0sR0FBRyxFQUNULElBQUk7QUFDTixlQUFLLFVBQVUsV0FBVyxRQUFRLGVBQWUsYUFBYTtBQUU5RCxjQUFJLGFBQWEsU0FBUztBQUN6QixpQkFBSyxVQUFVLFdBQVcsUUFBUSxVQUFVLE9BQU87QUFBQSxVQUNwRDtBQUVBLGdCQUFNLElBQUk7QUFBQSxRQUNYO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxTQUFLQyxnQkFBZSxJQUFJLENBQUMsVUFBVTtBQUNsQyxZQUFNLE9BQU8sTUFBTSxhQUFhO0FBQ2hDLFlBQU0sVUFBVSxPQUFPLENBQUM7QUFFeEIsVUFBSTtBQUVKLFVBQUksbUJBQW1CLGFBQWE7QUFDbkMsWUFBSSxRQUFRLGFBQWEsY0FBYyxHQUFHO0FBQ3pDLGlCQUFPLFFBQVEsYUFBYSxjQUFjO0FBQUEsUUFDM0MsV0FBVyxZQUFZLE1BQU07QUFDNUIsZUFBSyxLQUFLLElBQUk7QUFDZCxzQkFBWSxLQUFLLElBQUk7QUFBQSxRQUN0QixPQUFPO0FBQ04sZ0JBQU0sSUFBSSxRQUFRLFFBQVEsSUFBSSxjQUFjLEdBQUc7QUFDL0MsY0FBSSxhQUFhLGVBQWUsRUFBRSxhQUFhLEdBQUc7QUFDakQsbUJBQU8sRUFBRSxhQUFhLGNBQWM7QUFBQSxVQUNyQztBQUFBLFFBQ0Q7QUFBQSxNQUNELE9BQU87QUFDTjtBQUFBLE1BQ0Q7QUFFQSxjQUFRLE1BQU07QUFBQSxRQUNiLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSixVQUFBSiw0QkFBMkIsS0FBSyxNQUFNLEtBQUs7QUFDM0M7QUFBQSxNQUNGO0FBQUEsSUFDRDtBQUVBLFNBQUssV0FBVyxpQkFBaUIsV0FBVyxLQUFLSSxnQkFBZSxDQUFDO0FBQ2pFLFNBQUssV0FBVyxpQkFBaUIsU0FBUyxLQUFLLHNCQUFzQixDQUFDO0FBQUEsRUFDdkU7QUFZQSxXQUFTQyw0QkFBMkI7QUFBQztBQUNwQyxVQUFNQyxXQUFVLENBQUM7QUFFakIsVUFBTSxNQUFNLEtBQUssYUFBYSxrQkFBa0I7QUFDaEQsUUFBSSxTQUFTLEdBQUcsR0FBRztBQUNsQixNQUFBQSxTQUFRLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLFNBQVM7QUFBQSxJQUN4QztBQUVBLFdBQU9BO0FBQUEsRUFDUjtBQU1BLFdBQVNDLGdCQUFjO0FBRXRCLFdBQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFrRVI7QUE1Z0JBLE1BbUNNLHFCQU1BSCxrQkF5Q0EsWUFzUEE7QUF4VU4sTUFBQUksb0JBQUE7QUFBQTtBQU9BO0FBQ0E7QUFDQSxNQUFBQztBQUlBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFBQTtBQUNBLE1BQUFDO0FBQ0E7QUFDQTtBQVFBLE1BQU0sc0JBQXNCLE9BQU8sZUFBZTtBQU1sRCxNQUFNTixtQkFBa0IsT0FBTyxpQkFBaUI7QUF5Q2hELE1BQU0sYUFBTixjQUF5QixPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTS9CLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSwrQ0FBK0M7QUFBQSxRQUNsRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWdCQSxJQUFJLFdBQVc7QUFDZCxpQkFBTyxPQUFPO0FBQUEsWUFDYixDQUFDO0FBQUEsWUFDRCxNQUFNO0FBQUEsWUFDTjtBQUFBLGNBQ0MsU0FBUztBQUFBLGdCQUNSLGdCQUFnQixDQUFDLEtBQUssUUFBVyxJQUFJO0FBQUEsZ0JBQ3JDLFlBQVk7QUFBQSxnQkFDWixnQkFBZ0I7QUFBQSxjQUNqQjtBQUFBLGNBQ0EsV0FBVztBQUFBLGdCQUNWLFdBQVc7QUFBQSxnQkFDWCxXQUFXO0FBQUEsY0FDWjtBQUFBLGNBQ0EsV0FBVztBQUFBLGdCQUNWLE1BQU1HLGNBQVk7QUFBQSxjQUNuQjtBQUFBLFlBQ0Q7QUFBQSxZQUNBRiwwQkFBeUIsS0FBSyxJQUFJO0FBQUEsVUFDbkM7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLE9BQU8sU0FBUztBQUNmLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxPQUFPLG1CQUFtQjtBQUN6QixpQkFBTyxDQUFDLGtCQUFrQixvQkFBb0I7QUFBQSxRQUMvQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBV0EsY0FBYyxNQUFNO0FBQUM7QUFFcEIsZUFBSyxtQkFBbUIsSUFBSSxvQkFBSSxJQUFJO0FBRXBDLGdCQUFNLGlCQUFpQixLQUFLLFVBQVUsV0FBVyxDQUFDLENBQUM7QUFFbkQsZ0JBQU0sU0FBUyxpQkFBaUIsUUFBUTtBQUN4QyxnQkFBTSxpQkFBaUIsaUJBQWlCLGdCQUFnQjtBQUV4RCxnQkFBTSxLQUFLLEtBQUssVUFBVSxzQkFBc0IsSUFBSTtBQUNwRCxnQkFBTSxXQUFXLEtBQUssVUFBVSwwQkFBMEIsUUFBUTtBQUVsRSxnQkFBTSxXQUFXLGlCQUFpQixVQUFVO0FBRTVDLGdCQUFNLFFBQVEsVUFBVSxNQUFNLFVBQVUsSUFBSSxVQUFVO0FBQUEsWUFDckQ7QUFBQSxZQUNBO0FBQUEsVUFDRCxDQUFDO0FBRUQsZ0JBQU1DLFdBQVUsQ0FBQztBQUNqQixxQkFBVyxRQUFRLE9BQU87QUFDekIsa0JBQU0sV0FBVyxJQUFJLHNCQUFzQixJQUFJO0FBQy9DLHVCQUFXLEtBQUssVUFBVTtBQUN6QixvQkFBTSxrQkFBa0IsZUFBZSxLQUFLLE1BQU0sQ0FBQztBQUVuRCxvQkFBTSxRQUFRLGdCQUFnQjtBQUM5QixvQkFBTSxRQUFRLGdCQUFnQjtBQUM5QixvQkFBTSxTQUFTLEVBQUU7QUFFakIsb0JBQU0sYUFBYSxTQUFTLElBQUksV0FBVztBQUMzQyxvQkFBTSxRQUFRO0FBRWQsbUJBQUssbUJBQW1CLEVBQUUsSUFBSSxPQUFPLENBQUM7QUFFdEMsY0FBQUEsU0FBUSxLQUFLO0FBQUEsZ0JBQ1o7QUFBQSxnQkFDQTtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0E7QUFBQSxnQkFDQTtBQUFBLGdCQUNBLENBQUMsY0FBYyxHQUFHLEVBQUUsY0FBYztBQUFBLGNBQ25DLENBQUM7QUFBQSxZQUNGO0FBQUEsVUFDRDtBQUVBLGVBQUssVUFBVSxXQUFXQSxRQUFPO0FBQ2pDLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxDQUFDLG9CQUFvQixJQUFJO0FBQ3hCLGdCQUFNLG9CQUFvQixFQUFFO0FBQzVCLFVBQUFKLGtCQUFpQixLQUFLLElBQUk7QUFBQSxRQUMzQjtBQUFBLE1BQ0Q7QUFzSEEsTUFBTSx5QkFBeUIsT0FBTyx3QkFBd0I7QUFzTTlELDRCQUFzQixVQUFVO0FBQUE7QUFBQTs7O0FDOWdCaEM7QUFBQTtBQUFBLG9CQUFBUztBQUFBO0FBME5BLFdBQVNDLDRCQUEyQjtBQUFDO0FBQ3BDLFVBQU1DLFdBQVUsQ0FBQztBQUVqQixVQUFNLE1BQU0sS0FBSyxhQUFhLGtCQUFrQjtBQUVoRCxRQUFJLFNBQVMsR0FBRyxHQUFHO0FBQ2xCLE1BQUFBLFNBQVEsS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLFNBQVMsUUFBUSxFQUFFLFNBQVM7QUFBQSxJQUMzRDtBQUVBLFFBQUksS0FBSyxhQUFhLHFCQUFxQixHQUFHO0FBQzdDLE1BQUFBLFNBQVEsUUFBUSxJQUFJLEtBQUssYUFBYSxxQkFBcUIsRUFBRSxZQUFZO0FBQUEsSUFDMUU7QUFFQSxXQUFPQTtBQUFBLEVBQ1I7QUFhQSxXQUFTQyw0QkFBMkI7QUFBQztBQUVwQyxRQUFJLEtBQUtDLG1DQUFrQyxNQUFNLE1BQU07QUFDdEQ7QUFBQSxJQUNEO0FBRUEsU0FBS0EsbUNBQWtDLElBQUk7QUFFM0MsVUFBTUYsV0FBVTtBQUFBLE1BQ2YsV0FBVyxDQUFDLEdBQUc7QUFBQSxJQUNoQjtBQUVBLFVBQU0sV0FBVyxDQUFDLFNBQVNHLGNBQWE7QUFDdkMsaUJBQVcsQ0FBQyxFQUFFLEtBQUssS0FBSyxRQUFRLFFBQVEsR0FBRztBQUMxQyxZQUFJLE1BQU0sbUJBQW1CLE1BQU07QUFDbEMsY0FBSSxLQUFLLFVBQVUsUUFBUSxNQUFNLFVBQVU7QUFDMUMsWUFBQUEsVUFBUyxXQUFXO0FBQUEsVUFDckI7QUFFQSxjQUFJO0FBQ0gsWUFBQUMsYUFBWSxLQUFLLElBQUk7QUFBQSxVQUN0QixTQUFTLEdBQUc7QUFDWCw4QkFBa0IsTUFBTSx3QkFBd0IsRUFBRSxTQUFTLENBQUM7QUFBQSxVQUM3RDtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBLFVBQU0sV0FBVyxJQUFJLHFCQUFxQixVQUFVSixRQUFPO0FBQzNELGFBQVMsUUFBUSxJQUFJO0FBQUEsRUFDdEI7QUFpQkEsV0FBU0ksZUFBYztBQUFDO0FBRXZCLFFBQUksQ0FBQyxLQUFLLFlBQVk7QUFDckIsWUFBTSxJQUFJLE1BQU0sMkJBQTJCO0FBQUEsSUFDNUM7QUFFQSxVQUFNLE1BQU0sS0FBSyxVQUFVLE9BQU8sTUFBUztBQUMzQyxRQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssUUFBUSxJQUFJO0FBQ2pDLFlBQU0sSUFBSSxNQUFNLGFBQWE7QUFBQSxJQUM5QjtBQUVBLFVBQU1KLFdBQVUsS0FBSyxVQUFVLFNBQVMsQ0FBQyxDQUFDO0FBRTFDLFVBQU0sY0FBYyxLQUFLLFdBQVcsY0FBYyxvQkFBb0I7QUFDdEUsUUFBSSxFQUFFLHVCQUF1QixjQUFjO0FBQzFDLFlBQU0sSUFBSSxNQUFNLHNCQUFzQjtBQUFBLElBQ3ZDO0FBRUEsZ0JBQVksTUFBTSxVQUFVO0FBRTVCLFFBQUksWUFBWSxLQUFLLFdBQVc7QUFBQSxNQUMvQixJQUFJLGNBQWM7QUFBQSxJQUNuQjtBQUNBLFFBQUksRUFBRSxxQkFBcUIsY0FBYztBQUN4QyxrQkFBWSxTQUFTLGNBQWMsS0FBSztBQUN4QyxnQkFBVSxNQUFNLFVBQVU7QUFDMUIsZ0JBQVUsYUFBYSxnQkFBZ0IsV0FBVztBQUNsRCxXQUFLLFdBQVcsWUFBWSxTQUFTO0FBQUEsSUFDdEM7QUFFQSx5QkFBcUIsV0FBVyxLQUFLQSxRQUFPLEVBQzFDLEtBQUssTUFBTTtBQUNYLGtCQUFZLE1BQU0sVUFBVTtBQUM1QixvQkFBYyxLQUFLLElBQUk7QUFBQSxJQUN4QixDQUFDLEVBQ0EsTUFBTSxDQUFDLE1BQU07QUFDYixZQUFNO0FBQUEsSUFDUCxDQUFDO0FBQUEsRUFDSDtBQU1BLFdBQVMsZ0JBQWdCO0FBQUM7QUFFekIsVUFBTSxhQUFhLEtBQUssVUFBVSxZQUFZO0FBQzlDLFFBQUksQ0FBQyxRQUFRLFVBQVU7QUFBRztBQUUxQixlQUFXLENBQUMsRUFBRSxTQUFTLEtBQUssV0FBVyxRQUFRLEdBQUc7QUFDakQsWUFBTSxTQUFTLFdBQVc7QUFDMUIsWUFBTSxjQUFjLFdBQVc7QUFFL0IsVUFBSSxTQUFTLE1BQU0sS0FBSyxTQUFTLFdBQVcsR0FBRztBQUM5QyxjQUFNLGFBQWEsS0FBSyxXQUFXLGNBQWMsTUFBTTtBQUN2RCxjQUFNLGtCQUFrQixTQUFTLGNBQWMsV0FBVztBQUUxRCxZQUNDLHNCQUFzQixlQUN0QiwyQkFBMkIsYUFDMUI7QUFDRCwwQkFBZ0IsWUFBWSxXQUFXLFVBQVUsSUFBSSxFQUFFO0FBQUEsUUFDeEQ7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBLFdBQU87QUFBQSxFQUNSO0FBTUEsV0FBU0ssZ0JBQWM7QUFFdEIsV0FBTztBQUFBO0FBQUE7QUFBQSxFQUdSO0FBbFhBLE1BNkJNSCxxQ0F1Q0FKO0FBcEVOLE1BQUFRLGlCQUFBO0FBQUE7QUFNQTtBQUNBO0FBQ0EsTUFBQUM7QUFJQTtBQU9BO0FBQ0EsTUFBQUE7QUFDQTtBQVFBLE1BQU1MLHNDQUFxQyxPQUFPLGdCQUFnQjtBQXVDbEUsTUFBTUosWUFBTixjQUF1QixjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTXBDLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSxrQ0FBa0M7QUFBQSxRQUNyRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBb0JBLElBQUksV0FBVztBQUNkLGlCQUFPLE9BQU87QUFBQSxZQUNiLENBQUM7QUFBQSxZQUNELE1BQU07QUFBQSxZQUNOO0FBQUEsY0FDQyxXQUFXO0FBQUEsZ0JBQ1YsTUFBTU8sY0FBWTtBQUFBLGNBQ25CO0FBQUEsY0FDQSxLQUFLO0FBQUEsY0FDTCxRQUFRO0FBQUEsY0FDUixZQUFZLENBQUM7QUFBQSxjQUNiLE9BQU87QUFBQSxnQkFDTixVQUFVO0FBQUEsZ0JBQ1YsUUFBUTtBQUFBLGdCQUNSLE1BQU07QUFBQSxnQkFDTixhQUFhO0FBQUEsZ0JBQ2IsU0FBUztBQUFBLGtCQUNSLFFBQVE7QUFBQSxnQkFDVDtBQUFBLGNBQ0Q7QUFBQSxZQUNEO0FBQUEsWUFDQU4sMEJBQXlCLEtBQUssSUFBSTtBQUFBLFVBQ25DO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFdBQVcscUJBQXFCO0FBQy9CLGdCQUFNLE9BQU8sTUFBTTtBQUNuQixlQUFLLEtBQUssa0JBQWtCO0FBQzVCLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsQ0FBQyxnQkFBZ0IsSUFBSTtBQUFDO0FBQ3JCLGdCQUFNLGdCQUFnQixFQUFFO0FBR3hCLGVBQUssdUJBQXVCLEVBQUUsa0JBQWtCLElBQUksQ0FBQyxRQUFRO0FBQzVELGdCQUFJLEtBQUssYUFBYSxrQkFBa0IsR0FBRztBQUMxQyxtQkFBSyxVQUFVLE9BQU8sSUFBSSxJQUFJLEtBQUssU0FBUyxRQUFRLEVBQUUsU0FBUyxDQUFDO0FBQUEsWUFDakUsT0FBTztBQUNOLG1CQUFLLFVBQVUsT0FBTyxNQUFTO0FBQUEsWUFDaEM7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBY0EsQ0FBQyxvQkFBb0IsSUFBSTtBQUFDO0FBQ3pCLGdCQUFNLG9CQUFvQixFQUFFO0FBQzVCLFVBQUFFLDBCQUF5QixLQUFLLElBQUk7QUFBQSxRQUNuQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLE9BQU8sbUJBQW1CO0FBQ3pCLGlCQUFPLENBQUM7QUFBQSxRQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsT0FBTyxTQUFTO0FBQ2YsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBVUEsTUFBTSxLQUFLO0FBQ1YsY0FBSSxTQUFTLEdBQUcsS0FBSyxlQUFlLEtBQUs7QUFDeEMsaUJBQUssYUFBYSxvQkFBb0IsR0FBRyxHQUFHLEVBQUU7QUFBQSxVQUMvQztBQUVBLGlCQUFPRyxhQUFZLEtBQUssSUFBSTtBQUFBLFFBQzdCO0FBQUEsTUFDRDtBQThLQSw0QkFBc0JOLFNBQVE7QUFBQTtBQUFBOzs7QUNwWDlCLE1BZ0JNO0FBaEJOLE1BQUFVLGdCQUFBO0FBQUE7QUFPQTtBQUNBLE1BQUFDO0FBUUEsTUFBTSxvQkFBb0IsSUFBSSxjQUFjO0FBRTVDLFVBQUk7QUFDSCwwQkFBa0I7QUFBQSxVQUNqQjtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBSUE7QUFBQSxRQUNEO0FBQUEsTUFDRCxTQUFTLEdBQUc7QUFDWDtBQUFBLFVBQ0MsU0FBUyxZQUFZLEVBQUUsY0FBYyxNQUFNO0FBQUEsVUFDM0M7QUFBQSxVQUNBLElBQUk7QUFBQSxRQUNMO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQ2hDQTtBQUFBO0FBQUEsbUJBQUFDO0FBQUE7QUFtTkEsV0FBUyxlQUFlO0FBQUM7QUFDeEIsUUFBSSxDQUFDLE9BQU8sV0FBVyxHQUFHO0FBQ3pCLFdBQUssV0FBVyxJQUFJLFdBQVcsTUFBTTtBQUNwQyxtQkFBVyxLQUFLLElBQUk7QUFBQSxNQUNyQixHQUFHLEtBQUssVUFBVSxXQUFXLEdBQUksQ0FBQztBQUFBLElBQ25DO0FBQUEsRUFDRDtBQUVBLFdBQVMsYUFBYTtBQUFDO0FBRXRCLGdCQUFZO0FBQ1osU0FBSyxVQUFVLElBQUksU0FBUztBQUU1QixlQUFXLE1BQU07QUFDaEIsV0FBSyxPQUFPO0FBQUEsSUFDYixHQUFHLEdBQUc7QUFBQSxFQUNQO0FBS0EsV0FBUyxjQUFjO0FBQUM7QUFDdkIsUUFBSSxPQUFPLFdBQVcsR0FBRztBQUN4QixtQkFBYSxLQUFLLFdBQVcsQ0FBQztBQUM5QixXQUFLLFdBQVcsSUFBSTtBQUFBLElBQ3JCO0FBQUEsRUFDRDtBQVFBLFdBQVNDLDRCQUEyQjtBQUFDO0FBQ3BDLFVBQU1DLFdBQVUsQ0FBQztBQUVqQixVQUFNLFVBQVUsS0FBSyxhQUFhLG1CQUFtQixTQUFTO0FBQzlELFFBQUksU0FBUyxPQUFPLEdBQUc7QUFDdEIsVUFBSTtBQUNILFFBQUFBLFNBQVEsU0FBUyxJQUFJLFNBQVMsU0FBUyxFQUFFO0FBQUEsTUFDMUMsU0FBUyxHQUFHO0FBQ1gsYUFBSztBQUFBLFVBQ0o7QUFBQSxVQUNBLEtBQUssYUFBYSx5QkFBeUIsT0FBTyxFQUFFLFNBQVMsQ0FBQztBQUFBLFFBQy9EO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxXQUFPQTtBQUFBLEVBQ1I7QUFPQSxXQUFTQyx5QkFBd0I7QUFBQztBQUVqQyxRQUFJLENBQUMsS0FBSyxZQUFZO0FBQ3JCLFlBQU0sSUFBSSxNQUFNLDJCQUEyQjtBQUFBLElBQzVDO0FBRUEsU0FBS0MscUJBQW9CLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDNUMsTUFBTSxpQkFBaUI7QUFBQSxJQUN4QjtBQUNBLFNBQUssbUJBQW1CLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDM0MsTUFBTSxpQkFBaUI7QUFBQSxJQUN4QjtBQUFBLEVBQ0Q7QUFLQSxXQUFTQyxvQkFBbUI7QUFBQztBQUs1QixTQUFLLDRCQUE0QixJQUFJLENBQUMsVUFBVTtBQUMvQyxZQUFNLFVBQVU7QUFBQSxRQUNmO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNEO0FBRUEsVUFBSSxtQkFBbUIsYUFBYTtBQUNuQyxhQUFLO0FBQUEsVUFDSjtBQUFBLFVBQ0EsS0FBSyw0QkFBNEI7QUFBQSxRQUNsQztBQUNBLGFBQUssaUJBQWlCLGNBQWMsS0FBSyw0QkFBNEIsQ0FBQztBQUN0RSxvQkFBWSxLQUFLLElBQUk7QUFBQSxNQUN0QjtBQUFBLElBQ0Q7QUFLQSxTQUFLLDRCQUE0QixJQUFJLENBQUMsVUFBVTtBQUMvQyxZQUFNLFVBQVU7QUFBQSxRQUNmO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNEO0FBQ0EsVUFBSSxtQkFBbUIsYUFBYTtBQUNuQyxhQUFLO0FBQUEsVUFDSjtBQUFBLFVBQ0EsS0FBSyw0QkFBNEI7QUFBQSxRQUNsQztBQUNBLGFBQUssaUJBQWlCLGNBQWMsS0FBSyw0QkFBNEIsQ0FBQztBQUN0RSxxQkFBYSxLQUFLLElBQUk7QUFBQSxNQUN2QjtBQUFBLElBQ0Q7QUFLQSxTQUFLLHdCQUF3QixJQUFJLENBQUMsVUFBVTtBQUMzQyxZQUFNLFVBQVUsMkJBQTJCLE9BQU8sZ0JBQWdCLFFBQVE7QUFFMUUsVUFBSSxtQkFBbUIsYUFBYTtBQUNuQyxtQkFBVyxLQUFLLElBQUk7QUFBQSxNQUNyQjtBQUFBLElBQ0Q7QUFFQSxRQUFJLEtBQUssVUFBVSxnQkFBZ0IsTUFBTSxNQUFNO0FBQzlDLFdBQUssbUJBQW1CLEVBQUU7QUFBQSxRQUN6QjtBQUFBLFFBQ0EsS0FBSyx3QkFBd0I7QUFBQSxNQUM5QjtBQUNBLFdBQUssbUJBQW1CLEVBQUU7QUFBQSxRQUN6QjtBQUFBLFFBQ0EsS0FBSyx3QkFBd0I7QUFBQSxNQUM5QjtBQUFBLElBQ0Q7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQU1BLFdBQVNDLGdCQUFjO0FBRXRCLFdBQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBY1I7QUFuWEEsTUE0Qk1GLHVCQU1BLHFCQU1BLGFBTUEsOEJBTUEsOEJBTUEsMEJBbUNBSjtBQTdGTixNQUFBTyxnQkFBQTtBQUFBO0FBT0EsTUFBQUM7QUFLQTtBQU1BO0FBQ0E7QUFDQSxNQUFBRDtBQVFBLE1BQU1ILHdCQUF1QixPQUFPLGdCQUFnQjtBQU1wRCxNQUFNLHNCQUFzQixPQUFPLGVBQWU7QUFNbEQsTUFBTSxjQUFjLE9BQU8sT0FBTztBQU1sQyxNQUFNLCtCQUErQixPQUFPLHdCQUF3QjtBQU1wRSxNQUFNLCtCQUErQixPQUFPLHdCQUF3QjtBQU1wRSxNQUFNLDJCQUEyQixPQUFPLG9CQUFvQjtBQW1DNUQsTUFBTUosV0FBTixjQUFzQixjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBOEJuQyxJQUFJLFdBQVc7QUFDZCxpQkFBTyxPQUFPO0FBQUEsWUFDYixDQUFDO0FBQUEsWUFDRCxNQUFNO0FBQUEsWUFDTjtBQUFBLGNBQ0MsU0FBUztBQUFBLGNBQ1QsVUFBVTtBQUFBLGdCQUNULE9BQU87QUFBQSxnQkFDUCxXQUFXO0FBQUEsY0FDWjtBQUFBLGNBQ0EsU0FBUztBQUFBLGNBQ1QsV0FBVztBQUFBLGdCQUNWLE1BQU1NLGNBQVk7QUFBQSxjQUNuQjtBQUFBLFlBQ0Q7QUFBQSxZQUNBTCwwQkFBeUIsS0FBSyxJQUFJO0FBQUEsVUFDbkM7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLENBQUMsb0JBQW9CLElBQUk7QUFDeEIsZ0JBQU0sb0JBQW9CLEVBQUU7QUFBRTtBQUM5QixVQUFBRSx1QkFBc0IsS0FBSyxJQUFJO0FBQy9CLFVBQUFFLGtCQUFpQixLQUFLLElBQUk7QUFDMUIsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLE9BQU8sU0FBUztBQUNmLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxPQUFPLG1CQUFtQjtBQUN6QixpQkFBTyxDQUFDLGlCQUFpQjtBQUFBLFFBQzFCO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxDQUFDLGdCQUFnQixJQUFJO0FBQUM7QUFDckIsZ0JBQU0sZ0JBQWdCLEVBQUU7QUFBQSxRQUN6QjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0Esb0JBQW9CO0FBQ25CLGdCQUFNLGtCQUFrQjtBQUFFO0FBRTFCLGNBQUksS0FBSyxVQUFVLG9CQUFvQixNQUFNLE1BQU07QUFDbEQseUJBQWEsS0FBSyxJQUFJO0FBQ3RCLGlCQUFLLGlCQUFpQixjQUFjLEtBQUssNEJBQTRCLENBQUM7QUFBQSxVQUN2RTtBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLHVCQUF1QjtBQUN0QixnQkFBTSxxQkFBcUI7QUFDM0Isc0JBQVksS0FBSyxJQUFJO0FBQUU7QUFFdkIsY0FBSSxLQUFLLFVBQVUsb0JBQW9CLE1BQU0sTUFBTTtBQUNsRCxpQkFBSztBQUFBLGNBQ0o7QUFBQSxjQUNBLEtBQUssNEJBQTRCO0FBQUEsWUFDbEM7QUFDQSxpQkFBSztBQUFBLGNBQ0o7QUFBQSxjQUNBLEtBQUssNEJBQTRCO0FBQUEsWUFDbEM7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUF1S0EsNEJBQXNCTCxRQUFPO0FBQUE7QUFBQTs7O0FDclg3QixNQWdCTTtBQWhCTjtBQUFBO0FBT0E7QUFDQSxNQUFBUztBQVFBLE1BQU0sbUJBQW1CLElBQUksY0FBYztBQUUzQyxVQUFJO0FBQ0gseUJBQWlCO0FBQUEsVUFDaEI7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUlBO0FBQUEsUUFDRDtBQUFBLE1BQ0QsU0FBUyxHQUFHO0FBQ1g7QUFBQSxVQUNDLFNBQVMsWUFBWSxFQUFFLGNBQWMsTUFBTTtBQUFBLFVBQzNDO0FBQUEsVUFDQSxJQUFJO0FBQUEsUUFDTDtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNoQ0E7QUFBQTtBQUFBO0FBQUE7QUFtTUEsV0FBU0MsNEJBQTJCO0FBQUM7QUFDcEMsVUFBTUMsV0FBVSxDQUFDO0FBRWpCLFdBQU9BO0FBQUEsRUFDUjtBQU9BLFdBQVNDLDBCQUF3QjtBQUFDO0FBRWpDLFFBQUksQ0FBQyxLQUFLLFlBQVk7QUFDckIsWUFBTSxJQUFJLE1BQU0sMkJBQTJCO0FBQUEsSUFDNUM7QUFFQSxTQUFLQyxxQkFBb0IsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUM1QyxNQUFNLGlCQUFpQjtBQUFBLElBQ3hCO0FBQ0EsU0FBS0MsdUJBQXNCLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDOUMsTUFBTSxpQkFBaUI7QUFBQSxJQUN4QjtBQUFBLEVBQ0Q7QUFNQSxXQUFTQyxnQkFBYztBQUV0QixXQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPUjtBQXpPQSxNQXlCTUYsdUJBTUFDLHlCQU1BLGFBMkNBO0FBaEZOLE1BQUFFLGVBQUE7QUFBQTtBQU9BLE1BQUFDO0FBQ0E7QUFLQTtBQUNBLE1BQUFDO0FBQ0E7QUFDQTtBQUNBO0FBUUEsTUFBTUwsd0JBQXVCLE9BQU8sZ0JBQWdCO0FBTXBELE1BQU1DLDBCQUF5QixPQUFPLGtCQUFrQjtBQU14RCxNQUFNLGNBQWMsT0FBTyxPQUFPO0FBMkNsQyxNQUFNLFNBQU4sY0FBcUIsY0FBYztBQUFBLFFBQ2xDLGNBQWM7QUFDYixnQkFBTTtBQUNOLGVBQUssV0FBVyxJQUFJLElBQUksTUFBTTtBQUFBLFFBQy9CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBc0JBLElBQUksV0FBVztBQUNkLGlCQUFPLE9BQU87QUFBQSxZQUNiLENBQUM7QUFBQSxZQUNELE1BQU07QUFBQSxZQUNOO0FBQUEsY0FDQyxhQUFhO0FBQUEsY0FDYixXQUFXO0FBQUEsZ0JBQ1YsTUFBTUMsY0FBWTtBQUFBLGNBQ25CO0FBQUEsWUFDRDtBQUFBLFlBQ0FMLDBCQUF5QixLQUFLLElBQUk7QUFBQSxVQUNuQztBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsQ0FBQyxvQkFBb0IsSUFBSTtBQUN4QixnQkFBTSxvQkFBb0IsRUFBRTtBQUFFO0FBQzlCLFVBQUFFLHdCQUFzQixLQUFLLElBQUk7QUFFL0IsY0FBSSxLQUFLRSx1QkFBc0IsR0FBRztBQUNqQyxtQkFBTyxLQUFLLFdBQVcsRUFBRSxRQUFRLE1BQU0sT0FBTztBQUM3QyxtQkFBSyxLQUFLLEtBQUssV0FBVyxFQUFFLEtBQUssQ0FBQztBQUFBLFlBQ25DO0FBQUEsVUFDRDtBQUVBLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxPQUFPLFNBQVM7QUFDZixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsT0FBTyxtQkFBbUI7QUFDekIsaUJBQU8sQ0FBQyxnQkFBZ0I7QUFBQSxRQUN6QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLEtBQUssU0FBUztBQUFDO0FBRWQsY0FBSSxpQkFBaUI7QUFDckIsY0FBSSxFQUFFLG1CQUFtQkssV0FBVTtBQUNsQyxrQkFBTSxPQUFPLGVBQWUsT0FBTztBQUNuQyw2QkFBaUIsU0FBUyxjQUFjLHdCQUF3QjtBQUNoRSwyQkFBZSxVQUFVLFdBQVcsSUFBSTtBQUFBLFVBQ3pDO0FBRUEsMkJBQWlCLGdCQUFnQkEsUUFBTztBQUN4Qyx5QkFBZSxhQUFhLGdCQUFnQixTQUFTO0FBR3JELGNBQUksQ0FBQyxLQUFLTCx1QkFBc0IsR0FBRztBQUNsQyxpQkFBSyxXQUFXLEVBQUUsSUFBSSxjQUFjO0FBQ3BDLG1CQUFPO0FBQUEsVUFDUjtBQUVBLDBCQUFnQixNQUFNLDBCQUEwQjtBQUFBLFlBQy9DO0FBQUEsVUFDRCxDQUFDO0FBRUQsZUFBS0EsdUJBQXNCLEVBQUUsWUFBWSxjQUFjO0FBQ3ZELGlCQUFPO0FBQUEsUUFDUjtBQUFBLE1BQ0Q7QUFvREEsNEJBQXNCLE1BQU07QUFBQTtBQUFBOzs7QUMzTzVCLE1BZ0JNO0FBaEJOO0FBQUE7QUFPQTtBQUNBLE1BQUFNO0FBUUEsTUFBTSxpQkFBaUIsSUFBSSxjQUFjO0FBRXpDLFVBQUk7QUFDSCx1QkFBZTtBQUFBLFVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUlBO0FBQUEsUUFDRDtBQUFBLE1BQ0QsU0FBUyxHQUFHO0FBQ1g7QUFBQSxVQUNDLFNBQVMsWUFBWSxFQUFFLGNBQWMsTUFBTTtBQUFBLFVBQzNDO0FBQUEsVUFDQSxJQUFJO0FBQUEsUUFDTDtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNoQ0EsTUE2Qk07QUE3Qk47QUFBQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFlQSxNQUFNLFFBQU4sTUFBTSxlQUFjLFNBQVM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFrQjVCLFlBQVksYUFBYUMsVUFBUztBQUNqQyxnQkFBTUEsUUFBTztBQUViLGNBQUlBLGFBQVksUUFBVztBQUMxQixZQUFBQSxXQUFVLENBQUM7QUFBQSxVQUNaO0FBRUEsY0FBSSx1QkFBdUIsYUFBYTtBQUl2QyxpQkFBSyxtQkFBbUI7QUFBQSxVQUN6QixPQUFPO0FBSU4saUJBQUssbUJBQW1CLFlBQVksRUFBRTtBQUFBLGNBQ3JDLGVBQWUsV0FBVztBQUFBLFlBQzNCO0FBQUEsVUFDRDtBQU1BLGVBQUssY0FBYyxJQUFJO0FBQUEsWUFDdEIsQ0FBQztBQUFBLFlBQ0QsTUFBTTtBQUFBLFlBQ04sS0FBSztBQUFBLFlBQ0wsZUFBZUEsUUFBTztBQUFBLFVBQ3ZCO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLElBQUksV0FBVztBQUNkLGlCQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sUUFBUTtBQUFBLFFBQ2pDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsZ0JBQWdCLFFBQVE7QUFDdkIsY0FBSSxTQUFTLE1BQU0sR0FBRztBQUNyQixxQkFBUyxZQUFZLE1BQU07QUFBQSxVQUM1QjtBQUVBLGlCQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUN2QyxnQkFBSSxLQUFLLHFCQUFxQixNQUFNO0FBQ25DLHFCQUFPLElBQUksTUFBTSxnQkFBZ0IsQ0FBQztBQUNsQztBQUFBLFlBQ0Q7QUFFQSxnQkFBSSxFQUFFLEtBQUssNEJBQTRCLG9CQUFvQjtBQUMxRCxxQkFBTyxJQUFJLE1BQU0sNkJBQTZCLENBQUM7QUFDL0M7QUFBQSxZQUNEO0FBRUEsZ0JBQUksS0FBSyxpQkFBaUIsU0FBUyxvQkFBb0I7QUFDdEQ7QUFBQSxnQkFDQyxJQUFJLE1BQU0sd0RBQXdEO0FBQUEsY0FDbkU7QUFDQTtBQUFBLFlBQ0Q7QUFFQSxnQkFBSSxlQUFlO0FBQ25CLGdCQUFJO0FBQ0gsNkJBQWUsS0FBSyxNQUFNLEtBQUssaUJBQWlCLFVBQVUsS0FBSyxDQUFDO0FBQUEsWUFDakUsU0FBUyxHQUFHO0FBQ1gscUJBQU8sQ0FBQztBQUNSO0FBQUEsWUFDRDtBQUVBLGdCQUFJLGlCQUFpQixNQUFNO0FBQzFCLHFCQUFPLElBQUksTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRDtBQUFBLFlBQ0Q7QUFFQSxrQkFBTSxJQUFJLElBQUksYUFBYSxNQUFNO0FBQ2pDLGNBQUUsbUJBQW1CLFlBQVk7QUFFakMsb0JBQVEsQ0FBQztBQUFBLFVBQ1YsQ0FBQztBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQSxPQUFPLDRCQUE0QixTQUFTO0FBQzNDLGdCQUFNQyxLQUFJLFlBQVk7QUFFdEIsY0FBSSxFQUFFLG1CQUFtQixjQUFjO0FBQ3RDLHNCQUFVQSxHQUFFLGNBQWMsTUFBTTtBQUFBLFVBQ2pDO0FBRUEsZ0JBQU0sT0FBT0EsR0FBRSxpQkFBaUIsd0NBQXdDO0FBQ3hFLGNBQUksU0FBUyxNQUFNO0FBQ2xCO0FBQUEsVUFDRDtBQUVBLGdCQUFNLFdBQVcsQ0FBQztBQUVsQixlQUFLLFFBQVEsQ0FBQyx1QkFBdUI7QUFDcEMsa0JBQU0sSUFBSSxJQUFJLE9BQU0sa0JBQWtCO0FBQ3RDLHFCQUFTLEtBQUssRUFBRSxnQkFBZ0IsUUFBVyxPQUFPLENBQUM7QUFBQSxVQUNwRCxDQUFDO0FBRUQsaUJBQU8sUUFBUSxJQUFJLFFBQVE7QUFBQSxRQUM1QjtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUN0S0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BOEJNLFVBeUJBO0FBdkROO0FBQUE7QUFPQTtBQXVCQSxNQUFNLFdBQVcsSUFBSSxRQUFRLENBQUMsWUFBWTtBQUN6QyxjQUFNQyxZQUFXLFlBQVk7QUFFN0IsWUFBSUEsVUFBUyxlQUFlLFdBQVc7QUFDdEMsVUFBQUEsVUFBUyxpQkFBaUIsb0JBQW9CLE9BQU87QUFBQSxRQUN0RCxPQUFPO0FBQ04sa0JBQVE7QUFBQSxRQUNUO0FBQUEsTUFDRCxDQUFDO0FBaUJELE1BQU0sY0FBYyxJQUFJLFFBQVEsQ0FBQyxZQUFZO0FBQzVDLGNBQU1BLFlBQVcsWUFBWTtBQUM3QixjQUFNQyxVQUFTLFVBQVU7QUFFekIsWUFBSUQsVUFBUyxlQUFlLFlBQVk7QUFDdkMsa0JBQVE7QUFBQSxRQUNULE9BQU87QUFDTixVQUFBQyxRQUFPLGlCQUFpQixRQUFRLE9BQU87QUFBQSxRQUN4QztBQUFBLE1BQ0QsQ0FBQztBQUFBO0FBQUE7OztBQ2hFRCxNQW9CTSxjQU1BLGFBTUEsYUFZQTtBQTVDTjtBQUFBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQSxNQUFNLGVBQWU7QUFNckIsTUFBTSxjQUFjO0FBTXBCLE1BQU0sY0FBYyxPQUFPLE9BQU87QUFZbEMsTUFBTSxlQUFOLGNBQTJCLGdCQUFnQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLMUMsWUFBWUMsVUFBUztBQUNwQixnQkFBTUEsUUFBTztBQUNiLDJCQUFpQixLQUFLLFVBQVUsWUFBWSxHQUFHLFlBQVk7QUFFM0QsZUFBSyxXQUFXLElBQUksSUFBSSxNQUFNO0FBQUEsUUFDL0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksbUNBQW1DO0FBQUEsUUFDdEQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLElBQUksV0FBVztBQUNkLGlCQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sVUFBVTtBQUFBLFlBQ2pDLENBQUMsWUFBWSxHQUFHLGdCQUFnQixVQUFVO0FBQUEsWUFDMUMsQ0FBQyxXQUFXLEdBQUc7QUFBQSxVQUNoQixDQUFDO0FBQUEsUUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsYUFBYTtBQUNaLGdCQUFNLFNBQVMsS0FBSyxVQUFVO0FBQzlCLGNBQUksa0JBQWtCLE1BQU07QUFDM0IsaUJBQUssV0FBVyxFQUFFLEtBQUssTUFBTTtBQUFBLFVBQzlCO0FBQ0EsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsZUFBZTtBQUNkLGdCQUFNLE9BQU8sS0FBSyxXQUFXLEVBQUUsSUFBSTtBQUNuQyxjQUFJLGdCQUFnQixNQUFNO0FBQ3pCLGlCQUFLLE1BQU0sSUFBSTtBQUFBLFVBQ2hCO0FBRUEsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVNBLE1BQU0sU0FBUyxlQUFlO0FBQzdCLDJCQUFpQixTQUFTLElBQUk7QUFFOUIsa0JBQVEsTUFBTTtBQUFBLFlBQ2IsZUFBZSxpQkFBaUI7QUFBQSxVQUNqQyxDQUFDO0FBRUQsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLFlBQVk7QUFDWCxpQkFBTyxLQUFLLFVBQVUsWUFBWSxFQUFFO0FBQUEsUUFDckM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBU0EsYUFBYSxPQUFPO0FBQ25CLGNBQUksaUJBQWlCLEtBQUssVUFBVSxXQUFXO0FBQy9DLGNBQUksbUJBQW1CLFFBQVc7QUFDakMsNkJBQWlCLEtBQUssVUFBVSxZQUFZO0FBQUEsVUFDN0M7QUFFQSwyQkFBaUIsZ0JBQWdCLElBQUk7QUFFckMsY0FBSSxVQUFVLFFBQVc7QUFDeEIsMkJBQWUsS0FBSztBQUFBLFVBQ3JCO0FBRUEsaUJBQU87QUFBQSxZQUNOLEdBQUcsZUFBZTtBQUFBLGNBQ2pCO0FBQUEsWUFDRDtBQUFBLFVBQ0QsRUFBRSxPQUFPLENBQUMsWUFBWTtBQUNyQixnQkFBSSxVQUFVLFVBQWEsQ0FBQyxRQUFRLFFBQVEsS0FBSyxHQUFHO0FBQ25ELHFCQUFPO0FBQUEsWUFDUjtBQUVBLGdCQUFJLFFBQVEsYUFBYSxVQUFVO0FBQUcscUJBQU87QUFDN0MsZ0JBQUksUUFBUSxhQUFhLGFBQWEsTUFBTTtBQUFRLHFCQUFPO0FBRTNELGtCQUFNLE9BQU8sUUFBUSxzQkFBc0I7QUFDM0MsZ0JBQUksS0FBSyxVQUFVO0FBQUcscUJBQU87QUFDN0IsZ0JBQUksS0FBSyxXQUFXO0FBQUcscUJBQU87QUFFOUIsbUJBQU87QUFBQSxVQUNSLENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLFVBQVUsT0FBTztBQUNoQixnQkFBTSxVQUFVLEtBQUssVUFBVTtBQUMvQixnQkFBTSxZQUFZLEtBQUssYUFBYSxLQUFLO0FBRXpDLGNBQUksQ0FBQyxRQUFRLFNBQVMsS0FBSyxVQUFVLFdBQVcsR0FBRztBQUNsRCxtQkFBTztBQUFBLFVBQ1I7QUFFQSxjQUFJLG1CQUFtQixNQUFNO0FBQzVCLGtCQUFNLFFBQVEsVUFBVSxRQUFRLE9BQU87QUFFdkMsZ0JBQUksUUFBUSxJQUFJO0FBQ2YsbUJBQUssTUFBTSxVQUFVLFFBQVEsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDO0FBQUEsWUFDaEQsT0FBTztBQUNOLG1CQUFLLE1BQU0sVUFBVSxDQUFDLENBQUM7QUFBQSxZQUN4QjtBQUFBLFVBQ0QsT0FBTztBQUNOLGlCQUFLLE1BQU0sVUFBVSxDQUFDLENBQUM7QUFBQSxVQUN4QjtBQUVBLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxVQUFVLE9BQU87QUFDaEIsZ0JBQU0sVUFBVSxLQUFLLFVBQVU7QUFDL0IsZ0JBQU0sWUFBWSxLQUFLLGFBQWEsS0FBSztBQUV6QyxjQUFJLENBQUMsUUFBUSxTQUFTLEtBQUssVUFBVSxXQUFXLEdBQUc7QUFDbEQsbUJBQU87QUFBQSxVQUNSO0FBRUEsY0FBSSxtQkFBbUIsTUFBTTtBQUM1QixrQkFBTSxRQUFRLFVBQVUsUUFBUSxPQUFPO0FBRXZDLGdCQUFJLFFBQVEsSUFBSTtBQUNmLG1CQUFLLE1BQU0sVUFBVSxRQUFRLENBQUMsS0FBSyxVQUFVLFVBQVUsU0FBUyxDQUFDLENBQUM7QUFBQSxZQUNuRSxPQUFPO0FBQ04sbUJBQUssTUFBTSxVQUFVLFVBQVUsU0FBUyxDQUFDLENBQUM7QUFBQSxZQUMzQztBQUFBLFVBQ0QsT0FBTztBQUNOLGlCQUFLLE1BQU0sVUFBVSxVQUFVLFNBQVMsQ0FBQyxDQUFDO0FBQUEsVUFDM0M7QUFFQSxpQkFBTztBQUFBLFFBQ1I7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDckxBLFdBQVMsb0JBQW9CO0FBQzVCLG1CQUFlLElBQUk7QUFFbkIsUUFBSSxDQUFDLFVBQVUsTUFBTSxZQUFZLEdBQUc7QUFDbkMsYUFBTyxlQUFlLE1BQU0sY0FBYztBQUFBLFFBQ3pDLEtBQUssV0FBWTtBQUNoQixpQkFBTyxDQUFDO0FBQUEsUUFDVDtBQUFBLE1BQ0QsQ0FBQztBQUFBLElBQ0Y7QUFFQSxVQUFNLFdBQVcsT0FBTyxDQUFDLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDO0FBQ3BELFNBQUssY0FBYyxJQUFJLElBQUksY0FBYyxRQUFRO0FBUWpELFNBQUssd0JBQXdCLElBQUksQ0FBQyxhQUFhO0FBQzlDLFdBQUssY0FBYyxFQUFFLGVBQWUsUUFBUTtBQUM1QyxhQUFPO0FBQUEsSUFDUjtBQVFBLFNBQUssd0JBQXdCLElBQUksQ0FBQyxhQUFhO0FBQzlDLFdBQUssY0FBYyxFQUFFLGVBQWUsUUFBUTtBQUM1QyxhQUFPO0FBQUEsSUFDUjtBQVFBLFNBQUssMEJBQTBCLElBQUksQ0FBQyxhQUFhO0FBQ2hELGFBQU8sS0FBSyxjQUFjLEVBQUUsaUJBQWlCLFFBQVE7QUFBQSxJQUN0RDtBQVNBLFNBQUssYUFBYSxJQUFJLENBQUMsTUFBTSxVQUFVO0FBQ3RDLFVBQUksV0FBVyxLQUFLLGNBQWMsRUFBRSxXQUFXLENBQUMsRUFBRSxPQUFPLE1BQU0sS0FBSztBQUNwRSxhQUFPO0FBQUEsSUFDUjtBQVNBLFNBQUssY0FBYyxJQUFJLENBQUNDLGFBQVk7QUFDbkMsVUFBSSxTQUFTQSxRQUFPLEdBQUc7QUFDdEIsUUFBQUEsV0FBVUMsa0JBQWlCRCxRQUFPO0FBQUEsTUFDbkM7QUFFQSxhQUFPLEtBQUssY0FBYyxFQUFFLFdBQVcsR0FBRyxVQUFVQSxRQUFPO0FBQzNELGFBQU87QUFBQSxJQUNSO0FBU0EsU0FBSyxhQUFhLElBQUksQ0FBQyxNQUFNLGlCQUFpQjtBQUM3QyxVQUFJO0FBRUosVUFBSTtBQUNILGdCQUFRLElBQUksV0FBVyxLQUFLLGNBQWMsRUFBRSxlQUFlLENBQUMsRUFBRTtBQUFBLFVBQzdEO0FBQUEsUUFDRDtBQUFBLE1BQ0QsU0FBUyxHQUFHO0FBQUEsTUFBQztBQUViLFVBQUksVUFBVTtBQUFXLGVBQU87QUFDaEMsYUFBTztBQUFBLElBQ1I7QUFBQSxFQUNEO0FBUUEsV0FBUyxVQUFVLEtBQUssTUFBTTtBQUM3QixXQUFPLFNBQVMsR0FBRyxHQUFHO0FBQ3JCLFVBQUksT0FBTyx5QkFBeUIsS0FBSyxJQUFJLElBQUksS0FBSyxHQUFHO0FBQ3hELGVBQU87QUFBQSxNQUNSO0FBQ0EsWUFBTSxPQUFPLGVBQWUsR0FBRztBQUFBLElBQ2hDO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFPQSxXQUFTQyxrQkFBaUIsTUFBTTtBQUMvQixRQUFJLE1BQU0sQ0FBQztBQUVYLFFBQUksQ0FBQyxTQUFTLElBQUksR0FBRztBQUNwQixhQUFPO0FBQUEsSUFDUjtBQUdBLFFBQUk7QUFDSCxZQUFNLFVBQVUsYUFBYSxJQUFJO0FBQ2pDLGFBQU8sUUFBUTtBQUFBLElBQ2hCLFNBQVMsR0FBRztBQUFBLElBQUM7QUFFYixRQUFJO0FBQ0gsWUFBTSxLQUFLLE1BQU0sSUFBSTtBQUFBLElBQ3RCLFNBQVMsR0FBRztBQUNYLFlBQU07QUFBQSxJQUNQO0FBRUEsV0FBTyxlQUFlLEdBQUc7QUFBQSxFQUMxQjtBQWhMQSxNQXNCTTtBQXRCTjtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUEsTUFBTSxlQUFlO0FBQUE7QUFBQTs7O0FDdEJyQjtBQUFBO0FBQUEsd0JBQUFDO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQTBNQSxXQUFTLG1CQUFtQjtBQUMzQixVQUFNLGFBQWEsU0FBUyxjQUFjLEtBQUssVUFBVSxXQUFXLE1BQU0sQ0FBQztBQUMzRSxRQUFJLEVBQUUsc0JBQXNCLGNBQWM7QUFDekMsWUFBTSxJQUFJLE1BQU0sa0JBQWtCO0FBQUEsSUFDbkM7QUFFQSxjQUFVLEtBQUssSUFBSTtBQUNuQixlQUFXLFlBQVksS0FBSyxlQUFlLENBQUM7QUFFNUMsV0FBTztBQUFBLEVBQ1I7QUFNQSxXQUFTLFlBQVk7QUFDcEIsVUFBTSxVQUFVLE1BQU07QUFDckIsV0FBSyxlQUFlLEVBQUUsb0JBQW9CLFNBQVMsT0FBTztBQUMxRCxXQUFLLGVBQWUsRUFBRSxvQkFBb0IsUUFBUSxNQUFNO0FBRXhELFdBQUssbUJBQW1CLEVBQUUsV0FBVztBQUFBLFFBQ3BDLFFBQVE7QUFBQSxRQUNSLE9BQU8sR0FDTixLQUFLLGVBQWUsRUFBRSxLQUFLLFlBQVksZ0JBQWdCLENBQUMsQ0FDekQ7QUFBQSxNQUNELENBQUM7QUFFRDtBQUFBLElBQ0Q7QUFFQSxVQUFNLFNBQVMsTUFBTTtBQUNwQixXQUFLLGVBQWUsRUFBRSxvQkFBb0IsU0FBUyxPQUFPO0FBQzFELFdBQUssZUFBZSxFQUFFLG9CQUFvQixRQUFRLE1BQU07QUFDeEQsV0FBSyxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsUUFBUSxJQUFJO0FBQ25EO0FBQUEsSUFDRDtBQUVBLFNBQUssZUFBZSxFQUFFLGlCQUFpQixRQUFRLFFBQVEsS0FBSztBQUM1RCxTQUFLLGVBQWUsRUFBRSxpQkFBaUIsU0FBUyxTQUFTLEtBQUs7QUFFOUQsV0FBTztBQUFBLEVBQ1I7QUFwUEEsTUE0Qk1BLGVBTUEsV0FNQSxhQU1BLGlCQVdBO0FBekROO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBQUM7QUFLQTtBQVFBLE1BQU1ELGdCQUFlO0FBTXJCLE1BQU0sWUFBWTtBQU1sQixNQUFNLGNBQWM7QUFNcEIsTUFBTSxrQkFBa0IsT0FBTyxXQUFXO0FBVzFDLE1BQU0sV0FBTixjQUF1QixnQkFBZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS3RDLFlBQVlFLFVBQVM7QUFDcEIsZ0JBQU1BLFFBQU87QUFFYixjQUFJLE1BQU0sS0FBSyxVQUFVLEtBQUssWUFBWSxnQkFBZ0IsQ0FBQztBQUUzRCxjQUFJLFFBQVEsUUFBVztBQUN0QixrQkFBTSxJQUFJLE1BQU0sZ0JBQWdCO0FBQUEsVUFDakMsV0FBVyxlQUFlLEtBQUs7QUFDOUIsa0JBQU0sSUFBSSxTQUFTO0FBQUEsVUFDcEIsV0FBVyxDQUFDLFNBQVMsR0FBRyxHQUFHO0FBQzFCLGtCQUFNLElBQUksTUFBTSxzQkFBc0I7QUFBQSxVQUN2QztBQUVBLGVBQUssY0FBYyxFQUFFLEtBQUssWUFBWSxnQkFBZ0IsQ0FBQyxJQUFJO0FBQzNELGVBQUssbUJBQW1CLElBQUksSUFBSSxjQUFjO0FBQUEsWUFDN0MsUUFBUTtBQUFBLFlBQ1IsT0FBTztBQUFBLFVBQ1IsQ0FBQztBQUVELGVBQUssZUFBZSxJQUFJO0FBQUEsUUFDekI7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLGNBQWM7QUFDYixjQUFJLEtBQUssZUFBZSxhQUFhLGFBQWE7QUFDakQsbUJBQU8sS0FBSyxlQUFlLEVBQUU7QUFBQSxVQUM5QjtBQUVBLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFTQSxTQUFTO0FBQ1IsZ0JBQU0sSUFBSSxNQUFNLG9EQUFvRDtBQUFBLFFBQ3JFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVNBLFVBQVU7QUFDVCxjQUFJLEVBQUUsS0FBSyxlQUFlLGFBQWEsY0FBYztBQUNwRCxpQkFBSyxPQUFPO0FBQUEsVUFDYjtBQUVBLDJCQUFpQixLQUFLLElBQUk7QUFDMUIsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFXQSxJQUFJLFdBQVc7QUFDZCxpQkFBTyxPQUFPLENBQUMsR0FBRyxNQUFNLFVBQVU7QUFBQSxZQUNqQyxDQUFDLEtBQUssWUFBWSxnQkFBZ0IsQ0FBQyxHQUFHO0FBQUEsWUFDdEMsQ0FBQ0YsYUFBWSxHQUFHLGdCQUFnQixVQUFVO0FBQUEsWUFDMUMsQ0FBQyxTQUFTLEdBQUc7QUFBQSxZQUNiLENBQUMsV0FBVyxHQUFHO0FBQUEsWUFDZixDQUFDLFlBQVksR0FBRyxJQUFJLEdBQUcsVUFBVSxFQUFFLFNBQVM7QUFBQSxZQUM1QyxDQUFDLGVBQWUsR0FBRztBQUFBLFlBQ25CLENBQUMsZUFBZSxHQUFHO0FBQUEsVUFDcEIsQ0FBQztBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLFlBQVk7QUFDWCxnQkFBTUcsUUFBTztBQUNiLGNBQUksRUFBRUEsTUFBSyxlQUFlLGFBQWEsY0FBYztBQUNwRCxtQkFBTyxRQUFRLE9BQU8sWUFBWTtBQUFBLFVBQ25DO0FBRUEsY0FBSSxDQUFDQSxNQUFLLFlBQVksR0FBRztBQUN4QixtQkFBTyxRQUFRLE9BQU8sdUJBQXVCO0FBQUEsVUFDOUM7QUFFQSxjQUFJQSxNQUFLLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxRQUFRLE1BQU0sTUFBTTtBQUM5RCxnQkFBSUEsTUFBSyxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsT0FBTyxNQUFNLFFBQVc7QUFDbEUscUJBQU8sUUFBUSxPQUFPQSxNQUFLLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUM7QUFBQSxZQUN0RTtBQUVBLG1CQUFPLFFBQVEsUUFBUTtBQUFBLFVBQ3hCO0FBRUEsaUJBQU8sSUFBSSxRQUFRLFNBQVUsU0FBUyxRQUFRO0FBQzdDLGtCQUFNLFVBQVUsV0FBVyxNQUFNO0FBQ2hDLHFCQUFPLFNBQVM7QUFBQSxZQUNqQixHQUFHQSxNQUFLLFVBQVUsU0FBUyxDQUFDO0FBRTVCLGtCQUFNLFdBQVcsSUFBSSxTQUFTLE1BQU07QUFDbkMsMkJBQWEsT0FBTztBQUNwQixjQUFBQSxNQUFLLG1CQUFtQixFQUFFLGVBQWUsUUFBUTtBQUNqRCxzQkFBUTtBQUFBLFlBQ1QsQ0FBQztBQUVELFlBQUFBLE1BQUssbUJBQW1CLEVBQUUsZUFBZSxRQUFRO0FBQUEsVUFDbEQsQ0FBQztBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLE9BQU8sa0JBQWtCO0FBQ3hCLGdCQUFNLElBQUksTUFBTSxvREFBb0Q7QUFBQSxRQUNyRTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLCtCQUErQjtBQUFBLFFBQ2xEO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQ25HQSxXQUFTLGdCQUFnQjtBQUN4QixVQUFNQyxZQUFXLEtBQUssVUFBVUMsYUFBWTtBQUM1QyxTQUFLLGVBQWUsSUFBSUQsVUFBUyxjQUFjLFVBQVU7QUFFekQsZUFBVyxPQUFPO0FBQUEsTUFDakI7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNELEdBQUc7QUFDRixVQUFJLEtBQUssVUFBVSxHQUFHLE1BQU0sUUFBVztBQUN0QyxhQUFLLGVBQWUsRUFBRSxHQUFHLElBQUksS0FBSyxVQUFVLEdBQUc7QUFBQSxNQUNoRDtBQUFBLElBQ0Q7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQU9BLFdBQVNFLG9CQUFtQjtBQUMzQixVQUFNLGFBQWEsU0FBUyxjQUFjLEtBQUssVUFBVSxXQUFXLE1BQU0sQ0FBQztBQUMzRSxRQUFJLEVBQUUsc0JBQXNCLGNBQWM7QUFDekMsWUFBTSxJQUFJLE1BQU0sa0JBQWtCO0FBQUEsSUFDbkM7QUFFQSxlQUFXLFlBQVksS0FBSyxlQUFlLENBQUM7QUFFNUMsc0JBQWtCLE9BQU8sRUFBRSxLQUFLLFVBQVUsYUFBYSxHQUFHO0FBQUEsTUFDekQsUUFBUTtBQUFBO0FBQUEsTUFDUixNQUFNLEtBQUssVUFBVSxRQUFRLE1BQU07QUFBQTtBQUFBLE1BQ25DLE9BQU87QUFBQTtBQUFBLE1BQ1AsYUFBYSxLQUFLLFVBQVUsZUFBZSxhQUFhO0FBQUE7QUFBQSxNQUN4RCxTQUFTO0FBQUEsUUFDUixRQUFRLEtBQUssVUFBVSxRQUFRLGtCQUFrQjtBQUFBLE1BQ2xEO0FBQUEsTUFDQSxVQUFVO0FBQUE7QUFBQSxNQUNWLGdCQUFnQjtBQUFBO0FBQUEsSUFDakIsQ0FBQyxFQUNDLEtBQUssQ0FBQyxhQUFhO0FBQ25CLGFBQU8sU0FBUyxLQUFLO0FBQUEsSUFDdEIsQ0FBQyxFQUNBLEtBQUssQ0FBQyxTQUFTO0FBQ2YsWUFBTSxXQUFXLFNBQVMsZUFBZSxJQUFJO0FBQzdDLFdBQUssZUFBZSxFQUFFLFlBQVksUUFBUTtBQUUxQyxXQUFLLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxRQUFRLElBQUk7QUFBQSxJQUNwRCxDQUFDLEVBQ0EsTUFBTSxDQUFDLE1BQU07QUFDYixXQUFLLG1CQUFtQixFQUFFLFdBQVc7QUFBQSxRQUNwQyxRQUFRO0FBQUEsUUFDUixPQUFPLEVBQUUsU0FBUztBQUFBLE1BQ25CLENBQUM7QUFFRCxpQkFBVyxhQUFhLHdCQUF3QixFQUFFLFNBQVMsQ0FBQztBQUFBLElBQzdELENBQUM7QUFFRixXQUFPO0FBQUEsRUFDUjtBQTdKQSxNQXFDTTtBQXJDTjtBQUFBO0FBT0E7QUFDQTtBQUNBO0FBQ0EsTUFBQUM7QUFTQTtBQU1BO0FBWUEsTUFBTSxPQUFOLGNBQW1CLFNBQVM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNM0IsSUFBSSxXQUFXO0FBQ2QsaUJBQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxVQUFVO0FBQUEsWUFDakMsTUFBTTtBQUFBLFlBQ04sYUFBYTtBQUFBLFlBQ2IsTUFBTTtBQUFBLFVBQ1AsQ0FBQztBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsU0FBUztBQUNSLHdCQUFjLEtBQUssSUFBSTtBQUN2QixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLFVBQVU7QUFDVCxjQUFJLEVBQUUsS0FBSyxlQUFlLGFBQWEsY0FBYztBQUNwRCxpQkFBSyxPQUFPO0FBQUEsVUFDYjtBQUVBLFVBQUFELGtCQUFpQixLQUFLLElBQUk7QUFDMUIsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLG9DQUFvQztBQUFBLFFBQ3ZEO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxPQUFPLGtCQUFrQjtBQUN4QixpQkFBTztBQUFBLFFBQ1I7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDVUEsV0FBU0UsaUJBQWdCO0FBQ3hCLFVBQU1DLFlBQVcsS0FBSyxVQUFVQyxhQUFZO0FBQzVDLFNBQUssZUFBZSxJQUFJRCxVQUFTLGNBQWMsUUFBUTtBQUV2RCxlQUFXLE9BQU87QUFBQSxNQUNqQjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0QsR0FBRztBQUNGLFVBQUksS0FBSyxVQUFVLEdBQUcsTUFBTSxRQUFXO0FBQ3RDLGFBQUssZUFBZSxFQUFFLEdBQUcsSUFBSSxLQUFLLFVBQVUsR0FBRztBQUFBLE1BQ2hEO0FBQUEsSUFDRDtBQUVBLFdBQU87QUFBQSxFQUNSO0FBbklBLE1BZ0NNO0FBaENOO0FBQUE7QUFPQTtBQUNBLE1BQUFFO0FBVUE7QUFDQTtBQWFBLE1BQU0sT0FBTixjQUFtQixTQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBa0IzQixJQUFJLFdBQVc7QUFDZCxpQkFBTyxPQUFPLENBQUMsR0FBRyxNQUFNLFVBQVU7QUFBQSxZQUNqQyxJQUFJO0FBQUEsWUFDSixhQUFhO0FBQUEsWUFDYixVQUFVO0FBQUEsWUFDVixNQUFNO0FBQUEsWUFDTixVQUFVO0FBQUEsWUFDVixZQUFZO0FBQUEsWUFDWixhQUFhO0FBQUEsWUFDYixXQUFXO0FBQUEsWUFDWCxPQUFPO0FBQUEsWUFDUCxVQUFVO0FBQUEsWUFDVixnQkFBZ0I7QUFBQSxZQUNoQixLQUFLO0FBQUEsWUFDTCxPQUFPO0FBQUEsWUFDUCxNQUFNO0FBQUEsWUFDTixPQUFPO0FBQUEsVUFDUixDQUFDO0FBQUEsUUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSxvQ0FBb0M7QUFBQSxRQUN2RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxTQUFTO0FBQ1IsVUFBQUgsZUFBYyxLQUFLLElBQUk7QUFDdkIsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxPQUFPLGtCQUFrQjtBQUN4QixpQkFBTztBQUFBLFFBQ1I7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDOUZBLE1Bc0JNO0FBdEJOO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFhQSxNQUFNLGFBQU4sY0FBeUIsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBLFFBSTdCLElBQUksV0FBVztBQUNkLGlCQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sVUFBVTtBQUFBLFlBQ2pDLEtBQUs7QUFBQSxVQUNOLENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLCtDQUErQztBQUFBLFFBQ2xFO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQzRDQSxXQUFTSSxpQkFBZ0I7QUFDeEIsVUFBTUMsWUFBVyxLQUFLLFVBQVVDLGFBQVk7QUFDNUMsU0FBSyxlQUFlLElBQUlELFVBQVMsY0FBYyxVQUFVO0FBRXpELGVBQVcsT0FBTztBQUFBLE1BQ2pCO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNELEdBQUc7QUFDRixVQUFJLEtBQUssVUFBVSxHQUFHLE1BQU0sUUFBVztBQUN0QyxhQUFLLGVBQWUsRUFBRSxHQUFHLElBQUksS0FBSyxVQUFVLEdBQUc7QUFBQSxNQUNoRDtBQUFBLElBQ0Q7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQTVHQSxNQThCTTtBQTlCTjtBQUFBO0FBT0E7QUFDQSxNQUFBRTtBQVNBO0FBQ0E7QUFZQSxNQUFNLFNBQU4sY0FBcUIsU0FBUztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFXN0IsSUFBSSxXQUFXO0FBQ2QsaUJBQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxVQUFVO0FBQUEsWUFDakMsT0FBTztBQUFBLFlBQ1AsYUFBYTtBQUFBLFlBQ2IsT0FBTztBQUFBLFlBQ1AsV0FBVztBQUFBLFlBQ1gsVUFBVTtBQUFBLFlBQ1YsT0FBTztBQUFBLFlBQ1AsZ0JBQWdCO0FBQUEsWUFDaEIsTUFBTTtBQUFBLFVBQ1AsQ0FBQztBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksc0NBQXNDO0FBQUEsUUFDekQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsU0FBUztBQUNSLFVBQUFILGVBQWMsS0FBSyxJQUFJO0FBQ3ZCLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsT0FBTyxrQkFBa0I7QUFDeEIsaUJBQU87QUFBQSxRQUNSO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQzBFQSxXQUFTLGtCQUFrQixRQUFRO0FBQ2xDLFVBQU0sU0FBUyxDQUFDO0FBRWhCLGVBQVcsUUFBUSxDQUFDLFdBQVcsZUFBZSxNQUFNLEdBQUc7QUFDdEQsWUFBTSxZQUFZLEtBQUssVUFBVSxhQUFhLElBQUksRUFBRTtBQUNwRCxVQUFJLENBQUMsUUFBUSxTQUFTLEdBQUc7QUFDeEI7QUFBQSxNQUNEO0FBRUEsaUJBQVcsWUFBWSxXQUFXO0FBQ2pDLFlBQUksRUFBRSxvQkFBb0IsV0FBVztBQUNwQyxnQkFBTSxJQUFJLE1BQU0saUNBQWlDO0FBQUEsUUFDbEQ7QUFFQSxlQUFPLEtBQUssU0FBUyxNQUFNLEVBQUUsQ0FBQztBQUFBLE1BQy9CO0FBQUEsSUFDRDtBQUVBLFdBQU87QUFBQSxFQUNSO0FBVUEsV0FBUyxZQUFZLE1BQU0sS0FBS0ksVUFBUztBQUN4QyxRQUFJLGVBQWUsS0FBSztBQUN2QixZQUFNLElBQUksU0FBUztBQUFBLElBQ3BCO0FBRUEsSUFBQUEsV0FBVUEsWUFBVyxDQUFDO0FBRXRCLFFBQUk7QUFDSixZQUFRLE1BQU07QUFBQSxNQUNiLEtBQUs7QUFDSixtQkFBVyxJQUFJLE9BQU8sT0FBTyxDQUFDLEdBQUdBLFVBQVMsRUFBRSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNuRTtBQUFBLE1BQ0QsS0FBSztBQUNKLG1CQUFXLElBQUksV0FBVyxPQUFPLENBQUMsR0FBR0EsVUFBUyxFQUFFLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3hFO0FBQUEsTUFDRCxLQUFLO0FBQ0osbUJBQVcsSUFBSSxLQUFLLE9BQU8sQ0FBQyxHQUFHQSxVQUFTLEVBQUUsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDakU7QUFBQSxNQUNEO0FBQ0MsY0FBTSxJQUFJLE1BQU0sb0JBQW9CLElBQUksRUFBRTtBQUFBLElBQzVDO0FBRUEsU0FBSyxVQUFVLFdBQVcsSUFBSSxJQUFJLEVBQUUsS0FBSyxRQUFRO0FBQ2pELFdBQU87QUFBQSxFQUNSO0FBN01BLE1BNkJNO0FBN0JOO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBQUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWFBLE1BQU0sa0JBQU4sY0FBOEIsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1sQyxZQUFZRCxVQUFTO0FBQ3BCLGdCQUFNQSxRQUFPO0FBQ2IsNEJBQWtCLEtBQUssSUFBSTtBQUUzQixjQUFJLEVBQUUsS0FBSyxVQUFVLFVBQVUsYUFBYSxXQUFXO0FBQ3RELGtCQUFNLElBQUksTUFBTSwyQkFBMkI7QUFBQSxVQUM1QztBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsVUFBVSxLQUFLO0FBQ2QsaUJBQU8sS0FBSyxZQUFZLEdBQUc7QUFBQSxRQUM1QjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsYUFBYTtBQUNaLGVBQUssVUFBVSxVQUFVLEdBQUc7QUFBQSxRQUM3QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxJQUFJLFdBQVc7QUFDZCxpQkFBTyxLQUFLO0FBQUEsUUFDYjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVVBLElBQUksbUJBQW1CO0FBQ3RCLGlCQUFPLE9BQU87QUFBQSxZQUNiLENBQUM7QUFBQSxZQUNEO0FBQUEsY0FDQyxVQUFVLGdCQUFnQixVQUFVO0FBQUEsY0FDcEMsV0FBVztBQUFBLGdCQUNWLFNBQVMsQ0FBQztBQUFBLGdCQUNWLGFBQWEsQ0FBQztBQUFBLGdCQUNkLE1BQU0sQ0FBQztBQUFBLGNBQ1I7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLFVBQVU7QUFDVCw0QkFBa0IsS0FBSyxNQUFNLFNBQVM7QUFDdEMsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxZQUFZO0FBQ1gsaUJBQU8sUUFBUSxJQUFJLGtCQUFrQixLQUFLLE1BQU0sV0FBVyxDQUFDO0FBQUEsUUFDN0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQSxVQUFVLEtBQUtBLFVBQVM7QUFDdkIsaUJBQU8sWUFBWSxLQUFLLE1BQU0sV0FBVyxLQUFLQSxRQUFPO0FBQUEsUUFDdEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQSxjQUFjLEtBQUtBLFVBQVM7QUFDM0IsaUJBQU8sWUFBWSxLQUFLLE1BQU0sZUFBZSxLQUFLQSxRQUFPO0FBQUEsUUFDMUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQSxRQUFRLEtBQUtBLFVBQVM7QUFDckIsaUJBQU8sWUFBWSxLQUFLLE1BQU0sUUFBUSxLQUFLQSxRQUFPO0FBQUEsUUFDbkQ7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDakpBLE1BZ0JNO0FBaEJOO0FBQUE7QUFPQTtBQUNBLE1BQUFFO0FBUUEsTUFBTSwwQkFBMEIsSUFBSSxjQUFjO0FBRWxELFVBQUk7QUFDSCxnQ0FBd0I7QUFBQSxVQUN2QjtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBSUE7QUFBQSxRQUNEO0FBQUEsTUFDRCxTQUFTLEdBQUc7QUFDWDtBQUFBLFVBQ0MsU0FBUyxZQUFZLEVBQUUsY0FBYyxNQUFNO0FBQUEsVUFDM0M7QUFBQSxVQUNBLElBQUk7QUFBQSxRQUNMO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQ21KQSxXQUFTLGVBQWU7QUFBQztBQUN4QixVQUFNQyxVQUFTLFVBQVU7QUFFekIsVUFBTSxPQUFPLEtBQUssVUFBVSxjQUFjO0FBQzFDLFVBQU1DLFdBQVUsS0FBSyxVQUFVLGlCQUFpQjtBQUNoRCxVQUFNLGNBQWMsS0FBSyxVQUFVLDBCQUEwQjtBQUM3RCxVQUFNLFVBQVUsS0FBSyxVQUFVLDZCQUE2QjtBQUU1RCxRQUFJLENBQUMsUUFBUSxDQUFDQSxVQUFTO0FBQ3RCLFlBQU0sSUFBSSxNQUFNLDRDQUE0QztBQUFBLElBQzdEO0FBRUEsVUFBTSxVQUFVRCxRQUFPLFVBQVUsS0FBSyxNQUFNQyxRQUFPO0FBRW5ELFdBQU8sSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ3ZDLGNBQVEsVUFBVSxDQUFDLFVBQVU7QUFDNUIsZ0JBQVEsTUFBTSwwQkFBMEIsS0FBSztBQUM3QyxlQUFPLFFBQVEsS0FBSztBQUFBLE1BQ3JCO0FBRUEsY0FBUSxZQUFZLENBQUMsVUFBVTtBQUM5QixhQUFLLHFCQUFxQixJQUFJLE9BQU8sUUFBUTtBQUM3QyxnQkFBUSxRQUFRLE1BQU07QUFBQSxNQUN2QjtBQUVBLGNBQVEsa0JBQWtCLENBQUMsVUFBVTtBQUNwQyxjQUFNLEtBQUssTUFBTSxPQUFPO0FBRXhCLFlBQUk7QUFDSixZQUFJLENBQUMsR0FBRyxpQkFBaUIsU0FBUyxXQUFXLEdBQUc7QUFDL0Msd0JBQWMsR0FBRyxrQkFBa0IsYUFBYSxFQUFFLFNBQVMsUUFBUSxDQUFDO0FBQUEsUUFDckU7QUFFQSxvQkFBWSxZQUFZLGFBQWEsQ0FBQ0MsV0FBVTtBQUMvQyxrQkFBUSxJQUFJLDJCQUEyQjtBQUN2QyxrQkFBUTtBQUFBLFFBQ1Q7QUFBQSxNQUNEO0FBQUEsSUFDRCxDQUFDO0FBQUEsRUFDRjtBQUtBLFdBQVMsZUFBZSxNQUFNO0FBQUM7QUFDOUIsVUFBTSxjQUFjLEtBQUssVUFBVSwwQkFBMEI7QUFFN0QsUUFBSSxDQUFDLEtBQUsscUJBQXFCLEdBQUc7QUFDakMsWUFBTSxJQUFJLE1BQU0sMkJBQTJCO0FBQUEsSUFDNUM7QUFJQSxVQUFNLEtBQUssS0FBSyxxQkFBcUIsRUFBRSxZQUFZLGFBQWEsSUFBSTtBQUNwRSxXQUFPLEdBQUcsWUFBWSxXQUFXO0FBQUEsRUFDbEM7QUF1QkEsV0FBUyxRQUFRLEtBQUs7QUFBQztBQUN0QixVQUFNLFFBQVEsZUFBZSxLQUFLLE1BQU0sYUFBYTtBQUVyRCxVQUFNLE1BQU0sTUFBTSxJQUFJLEdBQUc7QUFFekIsV0FBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDdkMsVUFBSSxZQUFZLFNBQVUsS0FBSztBQUM5QixjQUFNLFFBQVEsSUFBSSxPQUFPO0FBQ3pCLFlBQUksT0FBTztBQUNWLGtCQUFRLE1BQU0sSUFBSTtBQUNsQjtBQUFBLFFBQ0Q7QUFDQSxlQUFPO0FBQUEsTUFDUjtBQUFBLElBQ0QsQ0FBQztBQUFBLEVBQ0Y7QUFFQSxXQUFTLFFBQVEsS0FBSyxNQUFNO0FBQUM7QUFDNUIsVUFBTSxRQUFRLGVBQWUsS0FBSyxNQUFNLGVBQWU7QUFFdkQsVUFBTSxVQUFVLEtBQUssVUFBVSw2QkFBNkI7QUFDNUQsVUFBTSxNQUFNLENBQUM7QUFDYixRQUFJLE9BQU8sSUFBSTtBQUNmLFFBQUksT0FBTztBQUNYLFVBQU0sTUFBTSxNQUFNLElBQUksR0FBRztBQUV6QixXQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUN2QyxVQUFJLFlBQVksU0FBVSxLQUFLO0FBQzlCLGdCQUFRO0FBQUEsTUFDVDtBQUVBLFVBQUksVUFBVSxTQUFVLEtBQUs7QUFDNUIsZ0JBQVEsTUFBTSxZQUFZLElBQUksT0FBTyxTQUFTO0FBQzlDLGVBQU8sSUFBSSxPQUFPLFNBQVM7QUFBQSxNQUM1QjtBQUFBLElBQ0QsQ0FBQztBQUFBLEVBQ0Y7QUFFQSxXQUFTQyxnQkFBYztBQUV0QixXQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJUjtBQTdTQSxNQW9CTSx1QkFNQSwwQkFNQSxlQU1BLGlCQTBDQTtBQWhGTixNQUFBQyx1QkFBQTtBQUFBO0FBS0E7QUFLQTtBQUNBO0FBQ0E7QUFRQSxNQUFNLHdCQUF3QixPQUFPLGlCQUFpQjtBQU10RCxNQUFNLDJCQUEyQixPQUFPLDBCQUEwQjtBQU1sRSxNQUFNLGdCQUFnQjtBQU10QixNQUFNLGtCQUFrQjtBQTBDeEIsTUFBTSxnQkFBTixjQUE0QixjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUt6QyxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksa0RBQWtEO0FBQUEsUUFDckU7QUFBQSxRQUVBLGNBQWM7QUFDYixnQkFBTTtBQU1OLGVBQUssd0JBQXdCLElBQUksQ0FBQztBQUNsQyxlQUFLLHFCQUFxQixJQUFJO0FBQzlCLGVBQUssd0JBQXdCLEVBQUUsS0FBSyxhQUFhLEtBQUssSUFBSSxDQUFDO0FBQUEsUUFDNUQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLFFBQVE7QUFDUCxpQkFBTyxRQUFRLElBQUksS0FBSyx3QkFBd0IsQ0FBQztBQUFBLFFBQ2xEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFXQSxJQUFJLFdBQVc7QUFDZCxpQkFBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sVUFBVTtBQUFBLFlBQ3hDLFdBQVc7QUFBQSxjQUNWLE1BQU1ELGNBQVk7QUFBQSxZQUNuQjtBQUFBLFlBQ0EsU0FBUztBQUFBLGNBQ1IsTUFBTTtBQUFBLGNBQ04sU0FBUztBQUFBLGNBQ1QsYUFBYTtBQUFBLGdCQUNaLE1BQU07QUFBQSxnQkFDTixTQUFTO0FBQUEsY0FDVjtBQUFBLFlBQ0Q7QUFBQSxVQUNELENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLFVBQVUsS0FBSztBQUFDO0FBRWYsaUJBQU8sS0FBSyxNQUFNLEVBQUUsS0FBSyxNQUFNO0FBQzlCLG1CQUFPLFFBQVEsS0FBSyxNQUFNLEdBQUc7QUFBQSxVQUM5QixDQUFDO0FBQUEsUUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFVBQVUsS0FBSyxPQUFPO0FBQUM7QUFDdEIsaUJBQU8sS0FBSyxNQUFNLEVBQUUsS0FBSyxNQUFNO0FBQzlCLG1CQUFPLFFBQVEsS0FBSyxNQUFNLEtBQUssS0FBSztBQUFBLFVBQ3JDLENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLE9BQU8sU0FBUztBQUNmLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsT0FBTyxtQkFBbUI7QUFDekIsaUJBQU8sQ0FBQyx1QkFBdUI7QUFBQSxRQUNoQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxDQUFDLG9CQUFvQixJQUFJO0FBQ3hCLGdCQUFNLG9CQUFvQixFQUFFO0FBQUEsUUFDN0I7QUFBQSxNQUNEO0FBOEhBLDRCQUFzQixhQUFhO0FBQUE7QUFBQTs7O0FDL1NuQztBQUFBO0FBQUE7QUFBQTtBQXFYQSxXQUFTRSwwQkFBd0I7QUFBQztBQUVqQyxRQUFJLENBQUMsS0FBSyxZQUFZO0FBQ3JCLFlBQU0sSUFBSSxNQUFNLDJCQUEyQjtBQUFBLElBQzVDO0FBRUEsU0FBSyxvQkFBb0IsSUFBSSxLQUFLLGNBQWMsaUJBQWlCO0FBQ2pFLFNBQUssbUJBQW1CLElBQUksS0FBSyxjQUFjLGdCQUFnQjtBQUMvRCxTQUFLLDBCQUEwQixJQUFJLEtBQUs7QUFBQSxNQUN2QztBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBRUEsV0FBUyxtQkFBbUI7QUFBQztBQUU1QixRQUFJLFdBQVcsS0FBSyxjQUFjLENBQUMsTUFBTSxPQUFPO0FBQy9DLFdBQUssY0FBYyxJQUFJLENBQUM7QUFBQSxJQUN6QjtBQUVBLFNBQUssY0FBYyxFQUFFLEtBQUssTUFBTSw0QkFBNEIsQ0FBQztBQUFBLEVBQzlEO0FBS0EsV0FBUyxtQkFBbUI7QUFBQztBQUM1QixXQUFPO0FBQUEsRUFDUjtBQU1BLFdBQVNDLGdCQUFjO0FBRXRCLFdBQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTUjtBQWphQSxNQTZCTSxnQkFNQSxxQkFNQSxzQkFNQSw0QkFNQSxvQkFNQSx1QkE0Q0E7QUF2R04sTUFBQUMsYUFBQTtBQUFBO0FBS0E7QUFLQSxNQUFBQztBQUNBO0FBQ0EsTUFBQUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUFDO0FBQ0E7QUFRQSxNQUFNLGlCQUFpQixPQUFPLGdCQUFnQjtBQU05QyxNQUFNLHNCQUFzQixPQUFPLGVBQWU7QUFNbEQsTUFBTSx1QkFBdUIsT0FBTyxnQkFBZ0I7QUFNcEQsTUFBTSw2QkFBNkIsT0FBTyxzQkFBc0I7QUFNaEUsTUFBTSxxQkFBcUIsT0FBTyxjQUFjO0FBTWhELE1BQU0sd0JBQXdCLE9BQU8saUJBQWlCO0FBNEN0RCxNQUFNLE9BQU4sY0FBbUIsY0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLaEMsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLHdDQUF3QztBQUFBLFFBQzNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVlBLElBQUksV0FBVztBQUNkLGlCQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxVQUFVO0FBQUEsWUFDeEMsV0FBVztBQUFBLGNBQ1YsTUFBTUosY0FBWTtBQUFBLFlBQ25CO0FBQUEsVUFDRCxDQUFDO0FBQUEsUUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxVQUFVLEtBQUs7QUFDZCxjQUFJLEtBQUssMEJBQTBCLGFBQWEsZ0JBQWdCLE9BQU87QUFDdEUsa0JBQU0sSUFBSSxNQUFNLG9DQUFvQztBQUFBLFVBQ3JEO0FBQ0EsaUJBQU8sS0FBSywwQkFBMEIsRUFBRSxVQUFVLEdBQUc7QUFBQSxRQUN0RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsVUFBVSxLQUFLLE9BQU87QUFDckIsY0FBSSxLQUFLLDBCQUEwQixhQUFhLGdCQUFnQixPQUFPO0FBQ3RFLGtCQUFNLElBQUksTUFBTSxvQ0FBb0M7QUFBQSxVQUNyRDtBQUVBLGlCQUFPLEtBQUssMEJBQTBCLEVBQUUsVUFBVSxLQUFLLEtBQUs7QUFBQSxRQUM3RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxvQkFBb0I7QUFDbkIsZ0JBQU0sa0JBQWtCO0FBTXhCLG1CQUFTLGdCQUFnQixNQUFNLFlBQVk7QUFFM0MsZ0JBQU0sYUFBYSxLQUFLLFVBQVUsY0FBYztBQUVoRCxjQUFJLFNBQVMsS0FBSyxVQUFVLFNBQVMsVUFBVSxHQUFHO0FBQ2pELHFCQUFTLEtBQUssVUFBVSxPQUFPLFVBQVU7QUFBQSxVQUMxQztBQUVBLDBCQUFnQixNQUFNLHdCQUF3QjtBQUFBLFFBQy9DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLHVCQUF1QjtBQUFDO0FBRXZCLGdCQUFNLHFCQUFxQjtBQUMzQixtQkFBUyxnQkFBZ0IsTUFBTSxZQUFZO0FBRTNDLGdCQUFNLGFBQWEsS0FBSyxVQUFVLGNBQWM7QUFDaEQsY0FBSSxDQUFDLFNBQVMsS0FBSyxVQUFVLFNBQVMsVUFBVSxHQUFHO0FBQ2xELHFCQUFTLEtBQUssVUFBVSxJQUFJLFVBQVU7QUFBQSxVQUN2QztBQUVBLGNBQUksV0FBVyxLQUFLLGNBQWMsQ0FBQyxNQUFNLE9BQU87QUFDL0MsaUJBQUssY0FBYyxJQUFJLENBQUM7QUFBQSxVQUN6QjtBQUVBLGVBQUssY0FBYyxFQUFFO0FBQUEsWUFDcEIsSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ2hDLG1CQUFLO0FBQUEsZ0JBQ0o7QUFBQSxnQkFDQSxNQUFNO0FBQ0wsMEJBQVE7QUFBQSxnQkFDVDtBQUFBLGdCQUNBLEVBQUUsTUFBTSxLQUFLO0FBQUEsY0FDZDtBQUFBLFlBQ0QsQ0FBQztBQUFBLFVBQ0Y7QUFFQSwwQkFBZ0IsTUFBTSwyQkFBMkI7QUFBQSxRQUNsRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxDQUFDLG9CQUFvQixJQUFJO0FBQUM7QUFFekIsZUFBSyxjQUFjLElBQUksQ0FBQztBQUN4QixlQUFLLGNBQWMsRUFBRSxLQUFLLFdBQVc7QUFFckMsZ0JBQU0sb0JBQW9CLEVBQUU7QUFFNUIsVUFBQUQsd0JBQXNCLEtBQUssSUFBSTtBQUMvQiwyQkFBaUIsS0FBSyxJQUFJO0FBQzFCLDJCQUFpQixLQUFLLElBQUk7QUFFMUIsZUFBSyxrQkFBa0IsSUFBSSxJQUFJLGFBQWEsSUFBSTtBQUNoRCxlQUFLLHFCQUFxQixJQUFJLElBQUksZ0JBQWdCLElBQUk7QUFFdEQsY0FBSTtBQUNILGlCQUFLLGNBQWMsRUFBRSxLQUFLLEtBQUsscUJBQXFCLEVBQUUsVUFBVSxDQUFDO0FBQUEsVUFDbEUsU0FBUyxHQUFHO0FBQ1gsbUJBQU8sUUFBUSxPQUFPLENBQUM7QUFBQSxVQUN4QjtBQUVBLGNBQUksS0FBSyxnQkFBZ0IsT0FBTztBQUMvQixpQkFBSyxjQUFjLEVBQUU7QUFBQSxjQUNwQixJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDaEMscUJBQUs7QUFBQSxrQkFDSjtBQUFBLGtCQUNBLE1BQU07QUFDTCw0QkFBUTtBQUFBLGtCQUNUO0FBQUEsa0JBQ0EsRUFBRSxNQUFNLEtBQUs7QUFBQSxnQkFDZDtBQUFBLGNBQ0QsQ0FBQztBQUFBLFlBQ0Y7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsVUFBVTtBQUFDO0FBRVYsY0FBSSxXQUFXLEtBQUssY0FBYyxDQUFDLE1BQU0sT0FBTztBQUMvQyxpQkFBSyxjQUFjLElBQUksQ0FBQztBQUFBLFVBQ3pCO0FBRUEsaUJBQU8sUUFBUSxJQUFJLEtBQUssY0FBYyxDQUFDLEVBQUUsS0FBSyxNQUFNO0FBQ25ELGlCQUFLLGNBQWMsSUFBSSxDQUFDO0FBQ3hCLG1CQUFPO0FBQUEsVUFDUixDQUFDO0FBQUEsUUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxJQUFJLGVBQWU7QUFDbEIsaUJBQU8sS0FBSyxrQkFBa0I7QUFBQSxRQUMvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxJQUFJLGtCQUFrQjtBQUNyQixpQkFBTyxLQUFLLHFCQUFxQjtBQUFBLFFBQ2xDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsZ0JBQWdCO0FBQ2YsY0FBSSxLQUFLLG9CQUFvQixhQUFhLGdCQUFnQixPQUFPO0FBQ2hFLGtCQUFNLElBQUksTUFBTSxzQ0FBc0M7QUFBQSxVQUN2RDtBQUVBLGVBQUssb0JBQW9CLEVBQUUsT0FBTztBQUNsQyxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsY0FBYztBQUNiLGNBQUksS0FBSyxvQkFBb0IsYUFBYSxnQkFBZ0IsT0FBTztBQUNoRSxrQkFBTSxJQUFJLE1BQU0sc0NBQXNDO0FBQUEsVUFDdkQ7QUFFQSxlQUFLLG9CQUFvQixFQUFFLEtBQUs7QUFDaEMsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLGVBQWU7QUFDZCxjQUFJLEtBQUssb0JBQW9CLGFBQWEsZ0JBQWdCLE9BQU87QUFDaEUsa0JBQU0sSUFBSSxNQUFNLHNDQUFzQztBQUFBLFVBQ3ZEO0FBRUEsZUFBSyxvQkFBb0IsRUFBRSxNQUFNO0FBQ2pDLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxPQUFPLFNBQVM7QUFDZixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLE9BQU8sbUJBQW1CO0FBQ3pCLGlCQUFPLENBQUMsY0FBYztBQUFBLFFBQ3ZCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLElBQUksU0FBUztBQUNaLGlCQUFPLG9CQUFvQjtBQUFBLFFBQzVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLElBQUksZUFBZTtBQUNsQixpQkFBTyx3QkFBd0I7QUFBQSxRQUNoQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxpQkFBaUIsU0FBUztBQUFDO0FBQzFCLGNBQUksS0FBSyxtQkFBbUIsYUFBYSxnQkFBZ0IsT0FBTztBQUMvRCxrQkFBTSxJQUFJLE1BQU0scUNBQXFDO0FBQUEsVUFDdEQ7QUFFQSxlQUFLLG1CQUFtQixFQUFFLEtBQUssT0FBTztBQUN0QyxpQkFBTztBQUFBLFFBQ1I7QUFBQSxNQUNEO0FBcURBLDRCQUFzQixJQUFJO0FBQUE7QUFBQTs7O0FDbmExQixNQWdCTTtBQWhCTjtBQUFBO0FBT0E7QUFDQSxNQUFBTTtBQVFBLE1BQU0sb0JBQW9CLElBQUksY0FBYztBQUU1QyxVQUFJO0FBQ0gsMEJBQWtCO0FBQUEsVUFDakI7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUlBO0FBQUEsUUFDRDtBQUFBLE1BQ0QsU0FBUyxHQUFHO0FBQ1g7QUFBQSxVQUNDLFNBQVMsWUFBWSxFQUFFLGNBQWMsTUFBTTtBQUFBLFVBQzNDO0FBQUEsVUFDQSxJQUFJO0FBQUEsUUFDTDtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNoQ0E7QUFBQTtBQUFBO0FBQUE7QUE0UEEsV0FBU0MsMEJBQXdCO0FBQUM7QUFFakMsUUFBSSxDQUFDLEtBQUssWUFBWTtBQUNyQixZQUFNLElBQUksTUFBTSwyQkFBMkI7QUFBQSxJQUM1QztBQUVBLFNBQUtDLHFCQUFvQixJQUFJLEtBQUssV0FBVyxlQUFlLFNBQVM7QUFDckUsU0FBSyx5QkFBeUIsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUNqRDtBQUFBLElBQ0Q7QUFDQSxTQUFLLHdCQUF3QixJQUFJLEtBQUssV0FBVztBQUFBLE1BQ2hEO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFLQSxXQUFTQyxvQkFBbUI7QUFBQztBQUs1QixTQUFLLHVCQUF1QixJQUFJLENBQUMsVUFBVTtBQUMxQyxXQUFLLE1BQU07QUFBQSxJQUNaO0FBRUEsU0FBSyx5QkFBeUIsRUFBRTtBQUFBLE1BQy9CO0FBQUEsTUFDQSxLQUFLLHVCQUF1QjtBQUFBLElBQzdCO0FBS0EsU0FBSyxzQkFBc0IsSUFBSSxDQUFDLFVBQVU7QUFDekMsWUFBTSxVQUFVO0FBQUEsUUFDZjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRDtBQUNBLFVBQUksU0FBUztBQUNaLGFBQUssS0FBSztBQUFBLE1BQ1g7QUFBQSxJQUNEO0FBRUEsU0FBSyxpQkFBaUIsU0FBUyxLQUFLLHNCQUFzQixDQUFDO0FBRTNELFFBQUksS0FBSyxVQUFVLG9CQUFvQixNQUFNLE1BQU07QUFDbEQsV0FBSyxpQkFBaUIsV0FBVyxDQUFDLFVBQVU7QUFDM0MsWUFBSSxNQUFNLFFBQVEsVUFBVTtBQUMzQixnQkFBTSxtQkFBbUIsRUFDeEIsTUFBTSxXQUNOLE1BQU0sVUFDTixNQUFNO0FBRVAsY0FBSSxrQkFBa0I7QUFDckIsaUJBQUssY0FBYztBQUFBLFVBQ3BCO0FBQUEsUUFDRDtBQUFBLE1BQ0QsQ0FBQztBQUFBLElBQ0Y7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQU1BLFdBQVNDLGdCQUFjO0FBRXRCLFdBQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFZUjtBQWhWQSxNQXlCTUYsdUJBTUEsMkJBTUEsMEJBTUEseUJBTUEsd0JBTUEsOEJBK0NBO0FBdEdOLE1BQUFHLGdCQUFBO0FBQUE7QUFLQTtBQUtBLE1BQUFDO0FBQ0E7QUFDQSxNQUFBQztBQUNBO0FBSUE7QUFRQSxNQUFNTCx3QkFBdUIsT0FBTyxnQkFBZ0I7QUFNcEQsTUFBTSw0QkFBNEIsT0FBTyxzQkFBc0I7QUFNL0QsTUFBTSwyQkFBMkIsT0FBTyxvQkFBb0I7QUFNNUQsTUFBTSwwQkFBMEIsT0FBTyxtQkFBbUI7QUFNMUQsTUFBTSx5QkFBeUIsT0FBTyxrQkFBa0I7QUFNeEQsTUFBTSwrQkFBK0I7QUErQ3JDLE1BQU0sVUFBTixjQUFzQixjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtuQyxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksMkNBQTJDO0FBQUEsUUFDOUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBcUJBLElBQUksV0FBVztBQUNkLGlCQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxVQUFVO0FBQUEsWUFDeEMsV0FBVztBQUFBLGNBQ1YsTUFBTUUsY0FBWTtBQUFBLFlBQ25CO0FBQUEsWUFDQSxTQUFTO0FBQUEsY0FDUjtBQUFBLGdCQUNDLE1BQU07QUFBQSxnQkFDTixTQUFTO0FBQUEsZ0JBQ1QsT0FBTztBQUFBLGNBQ1I7QUFBQSxZQUNEO0FBQUEsWUFDQSxTQUFTO0FBQUEsY0FDUixNQUFNO0FBQUEsY0FDTixTQUFTO0FBQUEsWUFDVjtBQUFBLFlBQ0EsVUFBVTtBQUFBLGNBQ1QsV0FBVztBQUFBLFlBQ1o7QUFBQSxVQUNELENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxvQkFBb0I7QUFDbkIsZ0JBQU0sa0JBQWtCO0FBTXhCLG1CQUFTLGdCQUFnQixNQUFNLFlBQVk7QUFFM0MsZ0JBQU0sYUFBYSxLQUFLLFVBQVUsY0FBYztBQUVoRCxjQUFJLFNBQVMsS0FBSyxVQUFVLFNBQVMsVUFBVSxHQUFHO0FBQ2pELHFCQUFTLEtBQUssVUFBVSxPQUFPLFVBQVU7QUFBQSxVQUMxQztBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsQ0FBQyxvQkFBb0IsSUFBSTtBQUN4QixnQkFBTSxvQkFBb0IsRUFBRTtBQUU1QixVQUFBSCx3QkFBc0IsS0FBSyxJQUFJO0FBQy9CLFVBQUFFLGtCQUFpQixLQUFLLElBQUk7QUFBQSxRQUMzQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxTQUFTO0FBQ1IsY0FBSSxLQUFLRCxxQkFBb0IsRUFBRSxVQUFVLFNBQVMsTUFBTSxHQUFHO0FBQzFELGlCQUFLLE1BQU07QUFBQSxVQUNaLE9BQU87QUFDTixpQkFBSyxLQUFLO0FBQUEsVUFDWDtBQUNBLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFTQSxPQUFPO0FBQUM7QUFDUCwwQkFBZ0IsTUFBTSwrQkFBK0IsQ0FBQyxDQUFDO0FBRXZELGVBQUtBLHFCQUFvQixFQUFFLFVBQVUsT0FBTyxZQUFZO0FBRXhELHFCQUFXLE1BQU07QUFDaEIsaUJBQUtBLHFCQUFvQixFQUFFLFVBQVUsSUFBSSxNQUFNO0FBQy9DLHVCQUFXLE1BQU07QUFDaEIsOEJBQWdCLE1BQU0sd0JBQXdCLENBQUMsQ0FBQztBQUFBLFlBQ2pELEdBQUcsQ0FBQztBQUFBLFVBQ0wsR0FBRyxDQUFDO0FBRUosaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxRQUFRO0FBQUM7QUFDUiwwQkFBZ0IsTUFBTSxnQ0FBZ0MsQ0FBQyxDQUFDO0FBQ3hELHFCQUFXLE1BQU07QUFDaEIsaUJBQUtBLHFCQUFvQixFQUFFLFVBQVUsT0FBTyxNQUFNO0FBQ2xELHVCQUFXLE1BQU07QUFDaEIsOEJBQWdCLE1BQU0sMEJBQTBCLENBQUMsQ0FBQztBQUFBLFlBQ25ELEdBQUcsQ0FBQztBQUFBLFVBQ0wsR0FBRyxDQUFDO0FBQ0osaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLE9BQU8sU0FBUztBQUNmLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsT0FBTyxtQkFBbUI7QUFDekIsaUJBQU8sQ0FBQyxpQkFBaUI7QUFBQSxRQUMxQjtBQUFBLE1BQ0Q7QUE2RkEsNEJBQXNCLE9BQU87QUFBQTtBQUFBOzs7QUNyVTdCLFdBQVMsd0JBQXdCLGVBQWUsSUFBSSxRQUFRO0FBRTNELFVBQU0sbUJBQW1CLFVBQVUsRUFBRSxTQUFTLEtBQUssTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUcvRCxVQUFNLFlBQVksR0FBRyxNQUFNLElBQUksZ0JBQWdCLElBQUksYUFBYSxJQUFJLEVBQUU7QUFHdEUsV0FBTyxVQUFVLFFBQVEsYUFBYSxHQUFHLEVBQUUsUUFBUSxRQUFRLEdBQUc7QUFBQSxFQUMvRDtBQXRCQSxNQUFBTSxhQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0FBLE1BZ0JNO0FBaEJOO0FBQUE7QUFPQTtBQUNBLE1BQUFDO0FBUUEsTUFBTSxvQkFBb0IsSUFBSSxjQUFjO0FBRTVDLFVBQUk7QUFDSCwwQkFBa0I7QUFBQSxVQUNqQjtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBSUE7QUFBQSxRQUNEO0FBQUEsTUFDRCxTQUFTLEdBQUc7QUFDWDtBQUFBLFVBQ0MsU0FBUyxZQUFZLEVBQUUsY0FBYyxNQUFNO0FBQUEsVUFDM0M7QUFBQSxVQUNBLElBQUk7QUFBQSxRQUNMO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQ2hDQSxNQWVNQztBQWZOLE1BQUFDLGtCQUFBO0FBQUE7QUFPQSxNQUFBQTtBQVFBLE1BQU1ELDBCQUF5QixHQUFHLGdCQUFnQjtBQUFBO0FBQUE7OztBQ2ZsRCxNQWdCTTtBQWhCTjtBQUFBO0FBT0E7QUFDQSxNQUFBRTtBQVFBLE1BQU0scUJBQXFCLElBQUksY0FBYztBQUU3QyxVQUFJO0FBQ0gsMkJBQW1CO0FBQUEsVUFDbEI7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUlBO0FBQUEsUUFDRDtBQUFBLE1BQ0QsU0FBUyxHQUFHO0FBQ1g7QUFBQSxVQUNDLFNBQVMsWUFBWSxFQUFFLGNBQWMsTUFBTTtBQUFBLFVBQzNDO0FBQUEsVUFDQSxJQUFJO0FBQUEsUUFDTDtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUM2UkEsV0FBUyxlQUFlO0FBQUM7QUFFeEIsUUFBSSxTQUFTO0FBRWIsUUFBSSxLQUFLLDZCQUE2QixHQUFHO0FBQ3hDLGdCQUFVLEtBQUssNkJBQTZCLEVBQUU7QUFBQSxJQUMvQztBQUVBLFFBQUksS0FBSyx3QkFBd0IsR0FBRztBQUNuQyxnQkFBVSxLQUFLLHdCQUF3QixFQUFFLGVBQWU7QUFBQSxJQUN6RDtBQUVBLFFBQUksV0FBVyxHQUFHO0FBQ2pCLGVBQVMsS0FBSyxvQkFBb0IsRUFBRTtBQUNwQyxVQUFJLFdBQVcsR0FBRztBQUNqQixpQkFBUztBQUFBLE1BQ1Y7QUFBQSxJQUNELE9BQU87QUFDTixnQkFBVTtBQUFBLElBQ1g7QUFFQSxTQUFLLG9CQUFvQixFQUFFLE1BQU07QUFBQSxNQUNoQztBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRDtBQUNBLG9CQUFnQixNQUFNLGFBQWEsS0FBSyxVQUFVLElBQUksa0JBQWtCLENBQUMsQ0FBQztBQUFBLEVBQzNFO0FBRUEsV0FBUyxrQ0FBa0M7QUFBQztBQUUzQyxTQUFLQyxxQkFBb0IsRUFBRSxXQUFXO0FBRXRDLFVBQU0sZUFBZSxtQkFBbUIsS0FBSyxJQUFJO0FBQ2pELGlCQUFhLFFBQVEsQ0FBQyxTQUFTO0FBQzlCLFdBQUtBLHFCQUFvQixFQUFFLFFBQVEsSUFBSTtBQUFBLElBQ3hDLENBQUM7QUFFRCxRQUFJLEtBQUssNkJBQTZCLEdBQUc7QUFDeEMsV0FBS0EscUJBQW9CLEVBQUUsUUFBUSxLQUFLLDZCQUE2QixDQUFDO0FBQUEsSUFDdkU7QUFFQSxTQUFLLGFBQWE7QUFBQSxFQUNuQjtBQUtBLFdBQVNDLG9CQUFtQjtBQUFDO0FBRTVCLFFBQUksQ0FBQyxLQUFLLFlBQVk7QUFDckIsWUFBTSxJQUFJLE1BQU0sMkJBQTJCO0FBQUEsSUFDNUM7QUFFQSwyQkFBdUIsS0FBSyxJQUFJO0FBQ2hDLFdBQU87QUFBQSxFQUNSO0FBRUEsV0FBUyx5QkFBeUI7QUFBQztBQUVsQyxTQUFLLHdCQUF3QixFQUFFLGlCQUFpQixjQUFjLE1BQU07QUFDbkUsc0NBQWdDLEtBQUssSUFBSTtBQUFBLElBQzFDLENBQUM7QUFBQSxFQUNGO0FBT0EsV0FBU0MsMEJBQXdCO0FBQUM7QUFFakMsUUFBSSxDQUFDLEtBQUssWUFBWTtBQUNyQixZQUFNLElBQUksTUFBTSwyQkFBMkI7QUFBQSxJQUM1QztBQUVBLFNBQUtDLHFCQUFvQixJQUFJLEtBQUssV0FBVztBQUFBLE1BQzVDO0FBQUEsSUFDRDtBQUNBLFNBQUssb0JBQW9CLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDNUM7QUFBQSxJQUNEO0FBQ0EsU0FBSyx3QkFBd0IsSUFBSSxLQUFLLFdBQVcsY0FBYyxNQUFNO0FBQ3JFLFNBQUssNkJBQTZCLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDckQ7QUFBQSxJQUNEO0FBQ0EsU0FBSyx3QkFBd0IsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUNoRDtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBTUEsV0FBUyxlQUFlO0FBQUM7QUFDeEIsV0FBTyx3QkFBd0IsS0FBSyxVQUFVLEdBQUcsS0FBSyxJQUFJLE9BQU87QUFBQSxFQUNsRTtBQUtBLFdBQVMsb0JBQW9CO0FBQUM7QUFFN0IsUUFBSSxDQUFDLEtBQUssVUFBVSx1QkFBdUIsR0FBRztBQUM3QztBQUFBLElBQ0Q7QUFFQSxRQUFJLENBQUMsS0FBSyxvQkFBb0IsR0FBRztBQUNoQztBQUFBLElBQ0Q7QUFFQSxVQUFNQyxZQUFXLFlBQVk7QUFDN0IsVUFBTSxPQUFPQSxVQUFTLGNBQWMsY0FBYztBQUNsRCxRQUFJLEVBQUUsUUFBUSxLQUFLLEtBQUs7QUFDdkI7QUFBQSxJQUNEO0FBRUEsVUFBTSxZQUFZLGFBQWEsS0FBSyxJQUFJO0FBRXhDLFFBQUk7QUFDSCxXQUFLLFVBQVUsV0FBVyxLQUFLLE9BQU8sQ0FBQztBQUFBLElBQ3hDLFNBQVMsT0FBTztBQUNmLHdCQUFrQixNQUFNLHdCQUF3QixPQUFPLEtBQUssQ0FBQztBQUFBLElBQzlEO0FBQUEsRUFDRDtBQU1BLFdBQVMsMEJBQTBCO0FBQUM7QUFFbkMsUUFBSSxDQUFDLEtBQUssVUFBVSx1QkFBdUIsR0FBRztBQUM3QyxhQUFPLFFBQVEsUUFBUSxDQUFDLENBQUM7QUFBQSxJQUMxQjtBQUVBLFVBQU1BLFlBQVcsWUFBWTtBQUM3QixVQUFNLE9BQU9BLFVBQVMsY0FBYyxjQUFjO0FBRWxELFFBQUksRUFBRSxRQUFRLEtBQUssS0FBSztBQUN2QixhQUFPLFFBQVEsUUFBUSxDQUFDLENBQUM7QUFBQSxJQUMxQjtBQU9BLFVBQU0sWUFBWSxhQUFhLEtBQUssSUFBSTtBQUN4QyxXQUFPLEtBQ0wsVUFBVSxTQUFTLEVBQ25CLEtBQUssQ0FBQyxVQUFVO0FBQ2hCLFVBQUksVUFBVSxNQUFNO0FBQ25CLGFBQUssS0FBSztBQUFBLE1BQ1gsT0FBTztBQUNOLGFBQUssTUFBTTtBQUFBLE1BQ1o7QUFBQSxJQUNELENBQUMsRUFDQSxNQUFNLENBQUMsVUFBVTtBQUNqQix3QkFBa0IsTUFBTSx3QkFBd0IsT0FBTyxLQUFLLENBQUM7QUFBQSxJQUM5RCxDQUFDO0FBQUEsRUFDSDtBQUtBLFdBQVMscUJBQXFCO0FBQUM7QUFHOUIsU0FBS0oscUJBQW9CLElBQUksSUFBSSxlQUFlLENBQUMsWUFBWTtBQUM1RCxVQUFJLEtBQUtLLG9CQUFtQixhQUFhLGdCQUFnQjtBQUN4RCxZQUFJO0FBQ0gsZUFBS0Esb0JBQW1CLEVBQUUsTUFBTTtBQUNoQztBQUFBLFFBQ0QsU0FBUyxHQUFHO0FBQ1gsaUJBQU8sS0FBS0Esb0JBQW1CO0FBQUEsUUFDaEM7QUFBQSxNQUNEO0FBRUEsV0FBS0Esb0JBQW1CLElBQUksSUFBSSxlQUFlLEtBQUssTUFBTTtBQUN6RCxpQ0FBeUIsS0FBSyxJQUFJO0FBQUEsTUFDbkMsQ0FBQztBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0Y7QUFFQSxXQUFTLDJCQUEyQjtBQUFDO0FBQ3BDLFNBQUssYUFBYTtBQUFBLEVBQ25CO0FBTUEsV0FBU0MsZ0JBQWM7QUFFdEIsV0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVVI7QUEzZ0JBLE1BMkJNRCxzQkFNQSxzQkFNQUYsdUJBT0FILHVCQU1BLDBCQU1BLCtCQU1BLDBCQU1BLFlBK0NBO0FBckhOLE1BQUFPLGlCQUFBO0FBQUE7QUFLQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBQUM7QUFDQSxNQUFBQztBQUNBLE1BQUFDO0FBQ0E7QUFDQTtBQVFBLE1BQU1MLHVCQUFzQixPQUFPLGVBQWU7QUFNbEQsTUFBTSx1QkFBdUIsT0FBTyxnQkFBZ0I7QUFNcEQsTUFBTUYsd0JBQXVCLE9BQU8sZ0JBQWdCO0FBT3BELE1BQU1ILHdCQUF1QixPQUFPLGdCQUFnQjtBQU1wRCxNQUFNLDJCQUEyQixPQUFPLG9CQUFvQjtBQU01RCxNQUFNLGdDQUFnQyxPQUFPLHlCQUF5QjtBQU10RSxNQUFNLDJCQUEyQixPQUFPLG9CQUFvQjtBQU01RCxNQUFNLGFBQWEsT0FBTyxNQUFNO0FBK0NoQyxNQUFNLFdBQU4sTUFBTSxrQkFBaUIsY0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLcEMsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLDRDQUE0QztBQUFBLFFBQy9EO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxjQUFjO0FBQ2IsZ0JBQU07QUFFTixlQUFLLFVBQVUsSUFBSTtBQUFBLFFBQ3BCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBZ0JBLElBQUksV0FBVztBQUNkLGlCQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxVQUFVO0FBQUEsWUFDeEMsV0FBVztBQUFBLGNBQ1YsTUFBTU0sY0FBWTtBQUFBLFlBQ25CO0FBQUEsWUFDQSxTQUFTO0FBQUEsY0FDUixXQUFXO0FBQUEsWUFDWjtBQUFBLFlBQ0EsVUFBVTtBQUFBLGNBQ1QsV0FBVztBQUFBLGNBQ1gsY0FBYztBQUFBLFlBQ2Y7QUFBQSxVQUNELENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLENBQUMsb0JBQW9CLElBQUk7QUFDeEIsZ0JBQU0sb0JBQW9CLEVBQUU7QUFDNUIsVUFBQUosd0JBQXNCLEtBQUssSUFBSTtBQUMvQixrQ0FBd0IsS0FBSyxJQUFJO0FBQ2pDLDZCQUFtQixLQUFLLElBQUk7QUFDNUIsVUFBQUQsa0JBQWlCLEtBQUssSUFBSTtBQUFBLFFBQzNCO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxvQkFBb0I7QUFDbkIsZ0JBQU0sa0JBQWtCO0FBQ3hCLDBDQUFnQyxLQUFLLElBQUk7QUFBQSxRQUUxQztBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsdUJBQXVCO0FBQ3RCLGdCQUFNLHFCQUFxQjtBQUFBLFFBRTVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLFNBQVM7QUFBQztBQUNULGNBQUksS0FBSyxvQkFBb0IsRUFBRSxVQUFVLFNBQVMsUUFBUSxHQUFHO0FBQzVELGlCQUFLLE1BQU07QUFBQSxVQUNaLE9BQU87QUFDTixpQkFBSyxLQUFLO0FBQUEsVUFDWDtBQUNBLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxXQUFXO0FBQ1YsaUJBQU8sQ0FBQyxLQUFLLG9CQUFvQixFQUFFLFVBQVUsU0FBUyxRQUFRO0FBQUEsUUFDL0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsU0FBUztBQUNSLGlCQUFPLENBQUMsS0FBSyxTQUFTO0FBQUEsUUFDdkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLE9BQU87QUFDTixjQUFJO0FBQUs7QUFDVCxjQUFJLEtBQUssb0JBQW9CLEVBQUUsVUFBVSxTQUFTLFFBQVEsR0FBRztBQUM1RCxtQkFBTztBQUFBLFVBQ1I7QUFFQSwwQkFBZ0IsTUFBTSxhQUFhLEtBQUssVUFBVSxJQUFJLGdCQUFnQixDQUFDLENBQUM7QUFFeEUsdUJBQWEsS0FBSyxJQUFJO0FBQ3RCLGVBQUssb0JBQW9CLEVBQUUsVUFBVSxJQUFJLFFBQVE7QUFFakQsY0FBSSxLQUFLLFVBQVUsb0JBQW9CLE1BQU0sTUFBTTtBQUNsRCxtQkFBTztBQUNQLG1CQUFPLEtBQUssOEJBQThCLFdBQVU7QUFDbkQscUJBQU8sS0FBSztBQUNaLG1CQUFLLE1BQU07QUFBQSxZQUNaO0FBRUEsbUJBQU87QUFDUCxtQkFBTyxLQUFLLGtDQUFrQyxXQUFVO0FBQ3ZELHFCQUFPLEtBQUs7QUFDWixtQkFBSyxNQUFNO0FBQUEsWUFDWjtBQUFBLFVBQ0Q7QUFFQSxxQkFBVyxNQUFNO0FBQ2hCLHVCQUFXLE1BQU07QUFDaEIsZ0NBQWtCLEtBQUssSUFBSTtBQUMzQiw4QkFBZ0IsTUFBTSxhQUFhLEtBQUssVUFBVSxJQUFJLFNBQVMsQ0FBQyxDQUFDO0FBQ2pFLHlCQUFXLE1BQU07QUFDaEIscUJBQUtFLHFCQUFvQixFQUFFLFVBQVUsT0FBTyxpQkFBaUI7QUFBQSxjQUM5RCxHQUFHLEdBQUc7QUFBQSxZQUNQLEdBQUcsQ0FBQztBQUFBLFVBQ0wsR0FBRyxDQUFDO0FBRUosaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxRQUFRO0FBQUM7QUFDUixjQUFJLENBQUMsS0FBSyxvQkFBb0IsRUFBRSxVQUFVLFNBQVMsUUFBUSxHQUFHO0FBQzdELG1CQUFPO0FBQUEsVUFDUjtBQUVBLDBCQUFnQixNQUFNLGFBQWEsS0FBSyxVQUFVLElBQUksaUJBQWlCLENBQUMsQ0FBQztBQUN6RSxlQUFLQSxxQkFBb0IsRUFBRSxVQUFVLElBQUksaUJBQWlCO0FBRTFELHFCQUFXLE1BQU07QUFDaEIsaUJBQUssb0JBQW9CLEVBQUUsVUFBVSxPQUFPLFFBQVE7QUFDcEQsdUJBQVcsTUFBTTtBQUNoQixnQ0FBa0IsS0FBSyxJQUFJO0FBQzNCLDhCQUFnQixNQUFNLGFBQWEsS0FBSyxVQUFVLElBQUksV0FBVyxDQUFDLENBQUM7QUFBQSxZQUNwRSxHQUFHLENBQUM7QUFBQSxVQUNMLEdBQUcsQ0FBQztBQUVKLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxPQUFPLFNBQVM7QUFDZixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLE9BQU8sbUJBQW1CO0FBQ3pCLGlCQUFPLENBQUMsa0JBQWtCO0FBQUEsUUFDM0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxlQUFlO0FBQUM7QUFDZix1QkFBYSxLQUFLLElBQUk7QUFDdEIsaUJBQU87QUFBQSxRQUNSO0FBQUEsTUFDRDtBQWtOQSw0QkFBc0IsUUFBUTtBQUFBO0FBQUE7OztBQzdnQjlCO0FBQUE7QUFBQTtBQUFBO0FBeUtBLFdBQVNRLDBCQUF3QjtBQUFDO0FBRWpDLFFBQUksQ0FBQyxLQUFLLFlBQVk7QUFDckIsWUFBTSxJQUFJLE1BQU0sMkJBQTJCO0FBQUEsSUFDNUM7QUFFQSxTQUFLQyxvQkFBbUIsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUMzQztBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBS0EsV0FBU0Msb0JBQW1CO0FBQUM7QUFFNUIsUUFBSSxDQUFDLEtBQUssWUFBWTtBQUNyQixZQUFNLElBQUksTUFBTSwyQkFBMkI7QUFBQSxJQUM1QztBQUVBLFNBQUssd0JBQXdCLElBQUksQ0FBQyxVQUFVO0FBQzNDLFdBQUssT0FBTztBQUFBLElBQ2I7QUFFQSxTQUFLRCxvQkFBbUIsRUFBRTtBQUFBLE1BQ3pCO0FBQUEsTUFDQSxLQUFLLHdCQUF3QjtBQUFBLElBQzlCO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFNQSxXQUFTLGtCQUFrQjtBQUFDO0FBRTNCLFFBQUk7QUFDSixVQUFNLFdBQVc7QUFDakIsUUFBSSxLQUFLLGFBQWFFLHVCQUFzQixHQUFHO0FBQzlDLGNBQVEsS0FBSyxhQUFhQSx1QkFBc0I7QUFBQSxJQUNqRCxPQUFPO0FBQ04sY0FBUSxLQUFLO0FBQUEsSUFDZDtBQUVBLFFBQUksQ0FBQyxTQUFTLEtBQUssR0FBRztBQUNyQixjQUFRO0FBQUEsSUFDVDtBQUVBLFlBQVEsTUFBTSxLQUFLO0FBRW5CLFFBQUksVUFBVSxJQUFJO0FBQ2pCLGNBQVEsS0FBSyxVQUFVLGlCQUFpQixTQUFTO0FBQUEsSUFDbEQ7QUFFQSxRQUFJLE1BQU0sU0FBUyxLQUFLO0FBQ3ZCLGNBQVEsR0FBRyxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFBQSxJQUNsQztBQUVBLFNBQUssYUFBYUEseUJBQXdCLEtBQUs7QUFDL0MsU0FBSyxVQUFVLGlCQUFpQixLQUFLO0FBRXJDLFdBQU87QUFBQSxFQUNSO0FBY0EsV0FBU0MsZ0JBQWM7QUFFdEIsV0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBZ0JSO0FBelFBLE1BdUJNSCxzQkFNQSwwQkErQ0E7QUE1RU4sTUFBQUksZ0JBQUE7QUFBQTtBQUtBO0FBSUEsTUFBQUM7QUFDQTtBQUNBLE1BQUFDO0FBQ0E7QUFDQSxNQUFBQztBQUNBLE1BQUFDO0FBQ0E7QUFRQSxNQUFNUix1QkFBc0IsT0FBTyxlQUFlO0FBTWxELE1BQU0sMkJBQTJCLE9BQU8sb0JBQW9CO0FBK0M1RCxNQUFNLFVBQU4sY0FBc0IsU0FBUztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLOUIsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLDJDQUEyQztBQUFBLFFBQzlEO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxjQUFjO0FBQ2IsZ0JBQU07QUFFTixlQUFLLFVBQVUsSUFBSTtBQUFBLFFBQ3BCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWtCQSxJQUFJLFdBQVc7QUFDZCxpQkFBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sVUFBVTtBQUFBLFlBQ3hDLFdBQVc7QUFBQSxjQUNWLE1BQU1HLGNBQVk7QUFBQSxZQUNuQjtBQUFBLFlBQ0EsUUFBUTtBQUFBLGNBQ1AsUUFBUTtBQUFBLFlBQ1Q7QUFBQSxVQUNELENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLENBQUMsb0JBQW9CLElBQUk7QUFDeEIsZ0JBQU0sb0JBQW9CLEVBQUU7QUFFNUIsMEJBQWdCLEtBQUssSUFBSTtBQUN6QixVQUFBSix3QkFBc0IsS0FBSyxJQUFJO0FBQy9CLFVBQUFFLGtCQUFpQixLQUFLLElBQUk7QUFBQSxRQUMzQjtBQUFBLFFBRUEsb0JBQW9CO0FBQUM7QUFDcEIsZ0JBQU0sa0JBQWtCO0FBRXhCLGdCQUFNLGtCQUFrQixLQUFLO0FBRTdCLGNBQUksb0JBQW9CLE1BQU07QUFDN0Isa0JBQU0sa0JBQWtCLEtBQUs7QUFDN0IsZ0JBQUksbUJBQW1CLGdCQUFnQixZQUFZLG1CQUFtQjtBQUNyRSxtQkFBS0Qsb0JBQW1CLEVBQUUsTUFBTSxZQUFZO0FBQUEsWUFDN0M7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxPQUFPLFNBQVM7QUFDZixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLE9BQU8sbUJBQW1CO0FBQ3pCLGdCQUFNLE1BQU0sTUFBTSxpQkFBaUI7QUFDbkMsY0FBSSxLQUFLLGlCQUFpQjtBQUMxQixpQkFBTztBQUFBLFFBQ1I7QUFBQSxNQUNEO0FBeUdBLDRCQUFzQixPQUFPO0FBQUE7QUFBQTs7O0FDM1E3QjtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BaUJJUyxrQkFXRTtBQTVCTjtBQUFBO0FBT0E7QUFDQTtBQUNBO0FBUUEsTUFBSUEsbUJBQWtCO0FBV3RCLE1BQU0sV0FBTixjQUF1QixHQUFHO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFJekIsY0FBYztBQUNiLGdCQUFNO0FBRU4sVUFBQUEsb0JBQW1CO0FBRW5CLGVBQUssS0FDSixVQUFVLEVBQ1IsS0FBSyxPQUFPLEdBQUcsR0FBSyxDQUFDLEVBQ3JCLFFBQVEsTUFBTSxFQUFFLEVBRWhCLFFBQVEsV0FBVyxHQUFHLElBQUlBO0FBQUEsUUFDOUI7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDNUNBO0FBQUE7QUFBQTtBQUFBO0FBMkRBLFdBQVMsbUJBQW1CO0FBQzNCLFdBQU8sdUNBQXVDLFFBQVEsU0FBUyxTQUFVLEdBQUc7QUFDM0UsWUFBTSxJQUFLLE9BQU8sR0FBRyxJQUFLLElBQUksS0FBTTtBQUNwQyxZQUFNLElBQUksTUFBTSxNQUFNLElBQUssSUFBSSxJQUFPO0FBQ3RDLGFBQU8sRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDO0FBQUEsSUFDeEIsQ0FBQztBQUFBLEVBQ0Y7QUFNQSxXQUFTLG1CQUFtQjtBQUMzQixVQUFNLFFBQVEsZ0JBQWdCLFFBQVE7QUFDdEMsUUFBSSxDQUFDLFNBQVMsS0FBSztBQUFHO0FBQ3RCLFFBQUksT0FBTyxRQUFRLFlBQVk7QUFBRztBQUNsQyxXQUFPLE1BQU0sV0FBVztBQUFBLEVBQ3pCO0FBNUVBLE1Bd0JNO0FBeEJOO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBYUEsTUFBTSxPQUFOLGNBQW1CLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUl2QixjQUFjO0FBQ2IsZ0JBQU07QUFFTixjQUFJLE9BQU8saUJBQWlCO0FBRTVCLGNBQUksU0FBUyxRQUFXO0FBQ3ZCLG1CQUFPLGlCQUFpQjtBQUFBLFVBQ3pCO0FBRUEsY0FBSSxTQUFTLFFBQVc7QUFDdkIsa0JBQU0sSUFBSSxNQUFNLGFBQWE7QUFBQSxVQUM5QjtBQUVBLGVBQUssY0FBYyxJQUFJO0FBQUEsWUFDdEIsT0FBTztBQUFBLFVBQ1I7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLFdBQVc7QUFDVixpQkFBTyxLQUFLLGNBQWMsRUFBRSxPQUFPO0FBQUEsUUFDcEM7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDckRBLE1BQUksT0FBTyxXQUFXLFVBQVU7QUFFNUIsS0FBQyxXQUFZO0FBRVQsVUFBSSxVQUFXLFdBQVk7QUFDdkIsWUFBSSxLQUFLLFVBQVUsV0FBVyxLQUMxQixJQUFJLEdBQUcsTUFBTSw4REFBOEQsS0FBSyxDQUFDO0FBQ3JGLFlBQUksV0FBVyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUc7QUFDdkIsZ0JBQU0sa0JBQWtCLEtBQUssRUFBRSxLQUFLLENBQUM7QUFDckMsaUJBQU8sU0FBUyxJQUFJLENBQUMsS0FBSztBQUFBLFFBQzlCO0FBQ0EsWUFBSSxFQUFFLENBQUMsTUFBTSxVQUFVO0FBQ25CLGdCQUFNLEdBQUcsTUFBTSxxQkFBcUI7QUFDcEMsY0FBSSxPQUFPO0FBQU0sbUJBQU8sSUFBSSxNQUFNLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxRQUFRLE9BQU8sT0FBTztBQUFBLFFBQ3pFO0FBQ0EsWUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLFNBQVMsVUFBVSxZQUFZLElBQUk7QUFDeEUsYUFBSyxNQUFNLEdBQUcsTUFBTSxpQkFBaUIsTUFBTTtBQUFNLFlBQUUsT0FBTyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDdEUsZUFBTyxFQUFFLEtBQUssR0FBRztBQUFBLE1BQ3JCLEVBQUc7QUFHSCxVQUFJLFVBQVUsU0FBUyxjQUFjLElBQUk7QUFDekMsY0FBUSxhQUFhLE1BQU07QUFBQSxJQUUvQixHQUFHO0FBQUEsRUFHUDs7O0FDM0JBOzs7QUNBQSxxQkFBaUI7QUFFVixNQUFNLFNBQVMsYUFBQUMsUUFBSztBQUNwQixNQUFNLFVBQVUsYUFBQUEsUUFBSztBQUNyQixNQUFNLFlBQVksYUFBQUEsUUFBSztBQUN2QixNQUFNLGlCQUFpQixhQUFBQSxRQUFLO0FBQzVCLE1BQU0sT0FBTyxhQUFBQSxRQUFLO0FBQ2xCLE1BQU0sU0FBUyxhQUFBQSxRQUFLO0FBQ3BCLE1BQU0sTUFBTSxhQUFBQSxRQUFLO0FBQ2pCLE1BQU0sU0FBUyxhQUFBQSxRQUFLO0FBQ3BCLE1BQU0sU0FBUyxhQUFBQSxRQUFLO0FBQ3BCLE1BQU0sT0FBTyxhQUFBQSxRQUFLO0FBRXpCLE1BQU8sZUFBUSxhQUFBQTs7O0FDR1IsV0FBUyxRQUFRQyxPQUFNLE9BQU87QUFDakMsUUFBSSxPQUFPLE1BQU0sTUFFYixhQUFhLFNBQVMsSUFBSTtBQUN0QixVQUFJO0FBQ0osVUFBSSxXQUFXLEVBQUUsR0FBRztBQUNoQixZQUFJLEdBQUcsV0FBVztBQUFHLGlCQUFPO0FBQzVCLGVBQU8sTUFBTSxVQUFVLE1BQU0sS0FBSyxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksVUFBVSxFQUFFLEtBQUssSUFBSTtBQUNyRSxlQUFPLEdBQUcsU0FBUyxJQUFJLE9BQU8sWUFBWSxHQUFHLFNBQVMsS0FBSyxXQUFXO0FBQUEsTUFDMUU7QUFDQSxVQUFJLENBQUNDLGVBQWMsRUFBRSxHQUFHO0FBQ3BCLGVBQU8sT0FBTyxFQUFFO0FBQUEsTUFDcEI7QUFFQSxhQUFPLEdBQUcsUUFBUSxZQUFZO0FBQzlCLFVBQUksR0FBRyxJQUFJO0FBQ1AsZ0JBQVEsTUFBTSxHQUFHO0FBQUEsTUFDckI7QUFDQSxVQUFJLEdBQUcsV0FBVztBQUNkLGdCQUFRLE1BQU0sT0FBTyxHQUFHLFNBQVMsRUFBRSxRQUFRLFFBQVEsR0FBRztBQUFBLE1BQzFEO0FBQ0EsWUFBTSxVQUFVLFFBQVEsS0FBSyxHQUFHLFlBQVksU0FBUyxNQUFNO0FBQ3ZELFlBQUksS0FBSyxTQUFTLFdBQVcsS0FBSyxTQUFTLE1BQU07QUFDN0Msa0JBQVEsTUFBTSxLQUFLLFFBQVEsS0FBSyxRQUFRLE9BQU8sS0FBSyxRQUFRLE9BQU87QUFBQSxRQUN2RTtBQUFBLE1BQ0osQ0FBQztBQUNELGFBQU87QUFBQSxJQUNYLEdBRUEsYUFBYSxTQUFTLE1BQU0sS0FBSztBQUM3QixVQUFJLEtBQUssS0FBSyxNQUFNLFFBQVEsR0FBRyxTQUFTLEdBQUcsYUFBYSxJQUFJO0FBRTVELFVBQUksQ0FBQyxLQUFLLE1BQU0sUUFBUSxLQUFLLFdBQWMsS0FBSztBQUM1QyxhQUFLO0FBQUEsVUFDRCxDQUFDLENBQUMsR0FBRyxXQUFXLElBQUk7QUFBQSxVQUNsQixjQUFjLFdBQVcsRUFBRSxJQUFJO0FBQUEsVUFDL0IsY0FBYyxXQUFXLEVBQUUsSUFBSTtBQUFBLFVBQy9CO0FBQUEsUUFDTjtBQUFBLE1BQ0o7QUFFQSxVQUFJLFdBQWMsS0FBSztBQUNuQixhQUFLO0FBQUEsVUFDRCxRQUFRO0FBQUEsVUFDTixjQUFjLFdBQVcsRUFBRSxJQUFJLDJCQUEyQixNQUFNLFFBQVEsSUFBSSxJQUFJO0FBQUEsVUFDaEYsY0FBYyxXQUFXLEVBQUUsSUFBSSwrQkFBK0IsTUFBTSxRQUFRLElBQUksSUFBSTtBQUFBLFVBQ3BGO0FBQUEsVUFDQTtBQUFBLFFBQ047QUFBQSxNQUNKO0FBRUEsV0FBSyxNQUFNLFVBQVUsTUFBTTtBQUFBLElBQy9CLEdBRUFBLGlCQUFnQixTQUFTLElBQUk7QUFDekIsYUFBTyxHQUFHLGFBQWE7QUFBQSxJQUMzQixHQUVBLGFBQWEsU0FBUyxLQUFLO0FBQ3ZCLGFBQU8sT0FBTyxVQUFVLFNBQVMsS0FBSyxHQUFHLE1BQU07QUFBQSxJQUNuRDtBQUVKLFVBQU0sYUFBYTtBQUNuQixJQUFBRCxNQUFLLFVBQVUsVUFBVSxRQUFRLFVBQVU7QUFDM0MsSUFBQUEsTUFBSyxVQUFVLFVBQVUsYUFBYSxVQUFVO0FBRWhELElBQUFBLE1BQUssVUFBVSxVQUFVLFNBQVMsU0FBUyxXQUFXO0FBQ2xELFVBQUksS0FBSyxLQUFLLE1BQU0sUUFBUTtBQUM1QixXQUFLO0FBQUEsUUFDRCxHQUFHLFVBQVUsU0FBUyxTQUFTO0FBQUEsUUFDN0IsY0FBYyxXQUFXLEVBQUUsSUFBSTtBQUFBLFFBQy9CLGNBQWMsV0FBVyxFQUFFLElBQUk7QUFBQSxRQUMvQjtBQUFBLE1BQ047QUFBQSxJQUNKLENBQUM7QUFFRCxJQUFBQSxNQUFLLFVBQVUsVUFBVSxNQUFNLFNBQVMsSUFBSTtBQUN4QyxVQUFJLEtBQUssS0FBSyxNQUFNLFFBQVE7QUFDNUIsV0FBSztBQUFBLFFBQ0QsR0FBRyxNQUFNO0FBQUEsUUFDUCxjQUFjLFdBQVcsRUFBRSxJQUFJO0FBQUEsUUFDL0IsY0FBYyxXQUFXLEVBQUUsSUFBSTtBQUFBLFFBQy9CO0FBQUEsTUFDTjtBQUFBLElBQ0osQ0FBQztBQUVELElBQUFBLE1BQUssVUFBVSxVQUFVLFFBQVEsU0FBUyxNQUFNO0FBQzVDLFVBQUksS0FBSyxLQUFLLE1BQU0sUUFBUSxHQUFHLFNBQVMsS0FBSyxNQUFNLFFBQVEsRUFBRTtBQUU3RCxVQUFJLEtBQUssTUFBTSxVQUFVLEdBQUc7QUFDeEIsYUFBSztBQUFBLFVBQ0QsT0FBTyxRQUFRLElBQUksS0FBSztBQUFBLFVBQ3RCO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDTjtBQUFBLE1BQ0osT0FBTztBQUNILGFBQUs7QUFBQSxVQUNELFdBQVc7QUFBQSxVQUNULGNBQWMsV0FBVyxFQUFFLElBQUk7QUFBQSxVQUMvQixjQUFjLFdBQVcsRUFBRSxJQUFJO0FBQUEsVUFDL0I7QUFBQSxVQUNBO0FBQUEsUUFDTjtBQUFBLE1BQ0o7QUFBQSxJQUNKLENBQUM7QUFFRCxJQUFBQSxNQUFLLFVBQVUsbUJBQW1CLFdBQVcsTUFBTSxXQUFXO0FBQzFELFdBQUssTUFBTSxhQUFhLElBQUk7QUFBQSxJQUNoQyxDQUFDO0FBRUQsSUFBQUEsTUFBSyxVQUFVLFVBQVUsUUFBUSxTQUFTLE1BQU07QUFDNUMsVUFBSSxNQUFNLEtBQUssTUFBTSxRQUFRLEdBQUdFLFlBQVcsS0FBSyxNQUFNLFVBQVUsR0FDNUQsT0FBTyxLQUFLLE1BQU0sV0FBVyxHQUFHLFFBQVE7QUFFNUMsVUFBSSxXQUFXLEdBQUcsR0FBRztBQUNqQixpQkFBUyxNQUFNLFVBQVUsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJO0FBQUUsaUJBQU8sT0FBTyxHQUFHLFlBQVksS0FBSyxJQUFJLEdBQUc7QUFBQSxRQUFZLENBQUM7QUFDNUcsWUFBSSxNQUFNLFFBQVEsSUFBSSxHQUFHO0FBQ3JCLG1CQUFTQSxZQUNMLEtBQUssS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLE9BQU8sRUFBRSxTQUFTLEdBQUc7QUFDdEQsbUJBQU8sTUFBTSxVQUFVLEtBQUssS0FBSyxLQUFLLFNBQVMsSUFBSTtBQUMvQyxzQkFBUSxPQUFPLEdBQUcsWUFBWSxLQUFLLElBQUksR0FBRyxpQkFBaUI7QUFBQSxZQUMvRCxDQUFDO0FBQUEsVUFDTCxDQUFDLElBRUQsTUFBTSxJQUFJLFFBQVEsSUFBSTtBQUUxQixtQkFBUyxPQUFPLEtBQUs7QUFDckIsaUJBQU8sS0FBSyxLQUFLO0FBQUEsUUFDckIsT0FBTztBQUNILG1CQUFTLE9BQU8sS0FBSyxFQUFFO0FBQ3ZCLG1CQUFTQSxZQUFXLE9BQU8sUUFBUSxJQUFJLEtBQUssSUFBSSxXQUFXO0FBQUEsUUFDL0Q7QUFBQSxNQUNKLE9BQU87QUFDSCxpQkFBUyxPQUFPLElBQUksWUFBWSxLQUFLLElBQUksSUFBSTtBQUM3QyxpQkFBU0EsWUFBVyxPQUFPLFFBQVEsSUFBSSxLQUFLLElBQUksV0FBVztBQUFBLE1BQy9EO0FBRUEsVUFBSSxVQUFVLFdBQVcsR0FBRyxHQUFHLFVBQVUsT0FBTyxpQkFBaUI7QUFDakUsVUFBSUEsV0FBVTtBQUNWLGFBQUs7QUFBQSxVQUNEO0FBQUEsVUFDRSxjQUFjLFVBQVUsaUNBQWlDLFVBQVU7QUFBQSxVQUNuRSxjQUFjLFVBQVUscUNBQXFDLFVBQVU7QUFBQSxVQUN2RTtBQUFBLFVBQ0E7QUFBQSxRQUNOO0FBQUEsTUFDSixPQUFPO0FBQ0gsYUFBSztBQUFBLFVBQ0Q7QUFBQSxVQUNFLGNBQWMsVUFBVSxjQUFjLFVBQVUsc0JBQXNCLFVBQVU7QUFBQSxVQUNoRixjQUFjLFVBQVUsa0JBQWtCLFVBQVU7QUFBQSxVQUNwRDtBQUFBLFVBQ0E7QUFBQSxRQUNOO0FBQUEsTUFDSjtBQUFBLElBQ0osQ0FBQztBQUVELElBQUFGLE1BQUssVUFBVSxVQUFVLFNBQVMsU0FBUyxPQUFPO0FBQzlDLFVBQUksS0FBSyxLQUFLLE1BQU0sUUFBUSxHQUFHLFNBQVMsS0FBSyxNQUFNLFFBQVEsRUFBRTtBQUM3RCxXQUFLO0FBQUEsUUFDRCxLQUFLLE1BQU0sUUFBUSxFQUFFLFVBQVU7QUFBQSxRQUM3QixjQUFjLFdBQVcsRUFBRSxJQUFJO0FBQUEsUUFDL0IsY0FBYyxXQUFXLEVBQUUsSUFBSTtBQUFBLFFBQy9CO0FBQUEsUUFDQTtBQUFBLE1BQ047QUFBQSxJQUNKLENBQUM7QUFFRCxJQUFBQSxNQUFLLFVBQVUsa0JBQWtCLFNBQVMsU0FBUyxRQUFRO0FBQ3ZELGFBQU8sV0FBVztBQUNkLFlBQUksTUFBTSxLQUFLLE1BQU0sUUFBUTtBQUM3QixZQUFJLFdBQVcsR0FBRyxHQUFHO0FBQ2pCLGVBQUs7QUFBQSxZQUNELElBQUksU0FBUztBQUFBLFlBQ1g7QUFBQSxZQUNBLGNBQWMsV0FBVyxHQUFHLElBQUk7QUFBQSxVQUFlO0FBQUEsUUFDekQsT0FBTztBQUNILGlCQUFPLE1BQU0sTUFBTSxTQUFTO0FBQUEsUUFDaEM7QUFBQSxNQUNKO0FBQUEsSUFDSixDQUFDO0FBRUQsSUFBQUEsTUFBSyxVQUFVLGtCQUFrQixTQUFTLFNBQVMsUUFBUTtBQUN2RCxhQUFPLFdBQVc7QUFDZCxZQUFJLE1BQU0sS0FBSyxNQUFNLFFBQVE7QUFDN0IsWUFBSUMsZUFBYyxHQUFHLEdBQUc7QUFDcEIsZUFBSztBQUFBLFlBQ0QsSUFBSSxTQUFTLFdBQVc7QUFBQSxZQUN0QixjQUFjLFdBQVcsR0FBRyxJQUFJO0FBQUEsWUFDaEMsY0FBYyxXQUFXLEdBQUcsSUFBSTtBQUFBLFVBQWtCO0FBQUEsUUFDNUQsV0FBVyxXQUFXLEdBQUcsR0FBRztBQUN4QixlQUFLO0FBQUEsWUFDRCxJQUFJLFdBQVc7QUFBQSxZQUNiLGNBQWMsV0FBVyxHQUFHLElBQUk7QUFBQSxZQUNoQyxjQUFjLFdBQVcsR0FBRyxJQUFJO0FBQUEsVUFBa0I7QUFBQSxRQUM1RCxPQUFPO0FBQ0gsaUJBQU8sTUFBTSxNQUFNLFNBQVM7QUFBQSxRQUNoQztBQUFBLE1BQ0o7QUFBQSxJQUNKLENBQUM7QUFFRCxJQUFBRCxNQUFLLFVBQVU7QUFBQSxNQUF5QjtBQUFBLE1BQ3BDLFNBQVMsUUFBUTtBQUNiLGVBQU8sU0FBUyxRQUFRO0FBQ3BCLGNBQUksTUFBTSxLQUFLLE1BQU0sUUFBUTtBQUM3QixjQUFJLFdBQVcsR0FBRyxLQUFLQyxlQUFjLEdBQUcsR0FBRztBQUN2QyxnQkFBSSxlQUFlLElBQUksV0FBVyxJQUFJLFNBQVMsU0FBUyxJQUFJO0FBQzVELGlCQUFLO0FBQUEsY0FDRCxpQkFBaUI7QUFBQSxjQUNmLGNBQWMsV0FBVyxHQUFHLElBQUk7QUFBQSxjQUNoQyxjQUFjLFdBQVcsR0FBRyxJQUFJO0FBQUEsY0FDaEM7QUFBQSxjQUNBO0FBQUEsWUFDTjtBQUFBLFVBQ0osT0FBTztBQUNILG1CQUFPLE1BQU0sTUFBTSxTQUFTO0FBQUEsVUFDaEM7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLE1BQ0EsU0FBUyxRQUFRO0FBQ2IsZUFBTyxXQUFXO0FBQ2QsaUJBQU8sS0FBSyxJQUFJO0FBQUEsUUFDcEI7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUdBLElBQUFELE1BQUssVUFBVSxnQkFBZ0IsU0FBUyxTQUFTLFFBQVE7QUFDckQsYUFBTyxTQUFTLFVBQVU7QUFDdEIsWUFBSSxNQUFNLEtBQUssTUFBTSxRQUFRO0FBQzdCLFlBQUlDLGVBQWMsR0FBRyxHQUFHO0FBQ3BCLGVBQUs7QUFBQSxZQUNELElBQUksUUFBUSxRQUFRO0FBQUEsWUFDbEIsY0FBYyxXQUFXLEdBQUcsSUFBSTtBQUFBLFlBQ2hDLGNBQWMsV0FBVyxHQUFHLElBQUk7QUFBQSxZQUNoQztBQUFBLFVBQ047QUFBQSxRQUNKLFdBQVcsV0FBVyxHQUFHLEdBQUc7QUFDeEIsZUFBSztBQUFBLFlBQ0EsQ0FBQyxDQUFDLElBQUksVUFBVSxNQUFNLFVBQVUsTUFBTSxLQUFLLEtBQUssU0FBUyxJQUFJO0FBQUUscUJBQU8sR0FBRyxRQUFRLFFBQVE7QUFBQSxZQUFFLENBQUM7QUFBQSxZQUMzRixjQUFjLFdBQVcsR0FBRyxJQUFJO0FBQUEsWUFDaEMsY0FBYyxXQUFXLEdBQUcsSUFBSTtBQUFBLFlBQ2hDO0FBQUEsVUFDTjtBQUFBLFFBQ0osT0FBTztBQUNILGlCQUFPLE1BQU0sTUFBTSxTQUFTO0FBQUEsUUFDaEM7QUFBQSxNQUNKO0FBQUEsSUFDSixDQUFDO0FBRUQsSUFBQUQsTUFBSyxVQUFVO0FBQUEsTUFBeUI7QUFBQSxNQUNwQyxTQUFTLFFBQVE7QUFDYixlQUFPLFNBQVMsU0FBUztBQUNyQixjQUFJLE1BQU0sS0FBSyxNQUFNLFFBQVE7QUFDN0IsY0FBSUMsZUFBYyxHQUFHLEdBQUc7QUFDcEIsZ0JBQUksT0FBTyxZQUFZLFVBQVU7QUFDN0IsbUJBQUs7QUFBQSxnQkFDRCxDQUFDLENBQUMsSUFBSSxjQUFjLE9BQU87QUFBQSxnQkFDekIsY0FBYyxXQUFXLEdBQUcsSUFBSTtBQUFBLGdCQUNoQyxjQUFjLFdBQVcsR0FBRyxJQUFJO0FBQUEsZ0JBQ2hDO0FBQUEsY0FBTztBQUFBLFlBQ2pCLE9BQU87QUFDSCxtQkFBSztBQUFBLGdCQUNELElBQUksU0FBUyxPQUFPO0FBQUEsZ0JBQ2xCLGNBQWMsV0FBVyxHQUFHLElBQUksaUJBQWlCLFdBQVcsT0FBTztBQUFBLGdCQUNuRSxjQUFjLFdBQVcsR0FBRyxJQUFJLHFCQUFxQixXQUFXLE9BQU87QUFBQSxjQUFDO0FBQUEsWUFDbEY7QUFBQSxVQUNKLE9BQU87QUFDSCxtQkFBTyxNQUFNLE1BQU0sU0FBUztBQUFBLFVBQ2hDO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxNQUNBLFNBQVMsUUFBUTtBQUNiLGVBQU8sV0FBVztBQUNkLGlCQUFPLEtBQUssSUFBSTtBQUFBLFFBQ3BCO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFFQSxJQUFBRCxNQUFLLFVBQVUsVUFBVSxjQUFjLFNBQVMsU0FBUztBQUNyRCxVQUFJLE1BQU0sS0FBSyxNQUFNLFFBQVEsR0FBRyxTQUFTO0FBRXpDLFVBQUksT0FBTyxZQUFZLFVBQVU7QUFDN0IsaUJBQVMsSUFBSSxjQUFjLE9BQU87QUFDbEMsYUFBSztBQUFBLFVBQ0QsQ0FBQyxDQUFDO0FBQUEsVUFDQSxjQUFjLFdBQVcsR0FBRyxJQUFJO0FBQUEsVUFDaEMsY0FBYyxXQUFXLEdBQUcsSUFBSTtBQUFBLFVBQ2hDO0FBQUEsUUFBTztBQUFBLE1BQ2pCLE9BQU87QUFDSCxhQUFLO0FBQUEsVUFDRCxJQUFJLFNBQVMsT0FBTztBQUFBLFVBQ2xCLGNBQWMsV0FBVyxHQUFHLElBQUksaUJBQWlCLFdBQVcsT0FBTztBQUFBLFVBQ25FLGNBQWMsV0FBVyxHQUFHLElBQUkscUJBQXFCLFdBQVcsT0FBTztBQUFBLFFBQUM7QUFBQSxNQUNsRjtBQUVBLFdBQUssTUFBTSxVQUFVLE1BQU07QUFBQSxJQUMvQixDQUFDO0FBRUQsSUFBQUEsTUFBSyxVQUFVLFVBQVUsZUFBZSxTQUFTLFVBQVU7QUFDdkQsVUFBSSxNQUFNLEtBQUssTUFBTSxRQUFRLEdBQ3pCLFNBQVMsSUFBSSxpQkFBaUIsUUFBUTtBQUMxQyxXQUFLO0FBQUEsUUFDRCxDQUFDLENBQUMsT0FBTztBQUFBLFFBQ1AsY0FBYyxXQUFXLEdBQUcsSUFBSTtBQUFBLFFBQ2hDLGNBQWMsV0FBVyxHQUFHLElBQUk7QUFBQSxRQUNoQztBQUFBLE1BQVE7QUFDZCxXQUFLLE1BQU0sVUFBVSxNQUFNO0FBQUEsSUFDL0IsQ0FBQztBQUVELElBQUFBLE1BQUssVUFBVSxZQUFZLGFBQWEsV0FBVztBQUMvQyxVQUFJLEtBQUssS0FBSyxNQUFNLFFBQVEsR0FDeEIsU0FBUyxTQUFTLEtBQUssU0FBUyxFQUFFLElBQUksT0FBTyxpQkFBaUIsRUFBRSxFQUFFLFVBQVUsR0FBRyxNQUFNO0FBRXpGLFdBQUs7QUFBQSxRQUNELFdBQVc7QUFBQSxRQUNULGNBQWMsV0FBVyxFQUFFLElBQUk7QUFBQSxRQUMvQixjQUFjLFdBQVcsRUFBRSxJQUFJLHlDQUF5QztBQUFBLFFBQ3hFO0FBQUEsTUFDTjtBQUFBLElBQ0osQ0FBQztBQUVELElBQUFBLE1BQUssVUFBVSxZQUFZLFdBQVcsV0FBVztBQUM3QyxVQUFJLEtBQUssS0FBSyxNQUFNLFFBQVEsR0FDeEIsU0FBUyxTQUFTLEtBQUssU0FBUyxFQUFFLElBQUksT0FBTyxpQkFBaUIsRUFBRSxFQUFFLGFBQWEsR0FBRyxNQUFNO0FBRTVGLFdBQUs7QUFBQSxRQUNELFdBQVcsWUFBWSxXQUFXO0FBQUEsUUFDaEMsY0FBYyxXQUFXLEVBQUUsSUFBSSxpQ0FBaUMsV0FBVyxXQUFXLFdBQVc7QUFBQSxRQUNqRyxjQUFjLFdBQVcsRUFBRSxJQUFJO0FBQUEsUUFDL0I7QUFBQSxNQUNOO0FBQUEsSUFDSixDQUFDO0FBQUEsRUFDTDs7O0FDL1ZBO0FBRUEsTUFBTUcsVUFBUyxVQUFVO0FBRWxCLFdBQVMsOEJBQ1o7QUFBQSxJQUNJLE9BQU87QUFBQSxJQUNQLGFBQWE7QUFBQSxJQUNiLGFBQWEsQ0FBQztBQUFBLElBQ2QsYUFBYSxNQUFNO0FBQUEsSUFDbkIsVUFBVSxNQUFNO0FBQUEsSUFDaEIsY0FBYyxNQUFNLENBQUM7QUFBQSxJQUNyQixZQUFZLE1BQU07QUFBQSxFQUN0QixJQUFJLENBQUMsR0FBRztBQUVSLFVBQU0sc0JBQXNCLE9BQU87QUFFbkMsUUFBSTtBQUFBLElBRUosTUFBTSx5QkFBeUI7QUFBQSxNQUMzQixZQUFZLFVBQVVDLFVBQVM7QUFDM0IsYUFBSyxPQUFPO0FBQ1osYUFBSyxhQUFhO0FBQ2xCLGFBQUssYUFBYTtBQUNsQixhQUFLLGFBQWE7QUFDbEIsYUFBSyxVQUFVO0FBQ2YsYUFBSyxjQUFjO0FBQ25CLGFBQUssWUFBWTtBQUNqQixhQUFLLFdBQVc7QUFDaEIsYUFBSyxVQUFVQTtBQUVmLHFCQUFhO0FBQUEsTUFDakI7QUFBQSxNQUVBLFlBQVk7QUFFUixjQUFNLFVBQVUsQ0FBQztBQUNqQixnQkFBUSxLQUFLO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxRQUNwQixDQUFDO0FBRUQsYUFBSyxVQUFVLEVBQUUsU0FBUyxJQUFJO0FBQUEsTUFDbEM7QUFBQSxJQUdKO0FBRUEsV0FBTyxlQUFlLFFBQVEsd0JBQXdCO0FBQUEsTUFDbEQsVUFBVTtBQUFBLE1BQ1YsY0FBYztBQUFBLE1BQ2QsT0FBTztBQUFBLElBQ1gsQ0FBQztBQUVELFdBQU8sZUFBZUQsU0FBUSx3QkFBd0I7QUFBQSxNQUNsRCxVQUFVO0FBQUEsTUFDVixjQUFjO0FBQUEsTUFDZCxPQUFPO0FBQUEsSUFDWCxDQUFDO0FBR0QsV0FBTztBQUFBLE1BQ0gsU0FBUyxXQUFZO0FBQ2pCLGVBQU8sdUJBQXVCO0FBQUEsTUFDbEM7QUFBQSxNQUNBLGFBQWEsV0FBWTtBQUNyQixlQUFPO0FBQUEsTUFDWDtBQUFBLElBQ0o7QUFBQSxFQUNKOzs7QUNsRUE7QUFDQTtBQUdPLE1BQU0sWUFBWSxJQUFJLFNBQVMscURBQXFEO0FBQ3BGLE1BQU0sU0FBUyxJQUFJLFNBQVMsb0RBQW9EO0FBRXZGLE1BQUksY0FBYztBQU9sQixXQUFTLFVBQVVFLFVBQVM7QUFDeEIsUUFBSSxPQUFPLFdBQVcsWUFBWSxPQUFPLFdBQVc7QUFBRyxhQUFPLFFBQVEsUUFBUTtBQUU5RSxVQUFNLElBQUksVUFBVTtBQUVwQixJQUFBQSxXQUFVLE9BQU8sQ0FBQyxHQUFHO0FBQUEsTUFDakIsbUJBQW1CO0FBQUEsTUFDbkIsYUFBYTtBQUFBLE1BQ2Isc0JBQXNCO0FBQUEsTUFDdEIsY0FBYztBQUFBLE1BQ2QsWUFBWTtBQUFBLE1BQ1osV0FBVztBQUFBLElBQ2YsR0FBR0EsWUFBVyxDQUFDLENBQUM7QUFFaEIsV0FBTyxPQUFPLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBQyxNQUFLLE1BQU07QUFDckMsb0JBQWM7QUFDZCxZQUFNLEVBQUMsUUFBQUMsUUFBTSxJQUFJLElBQUksTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFLekJELFFBQU87QUFFVCxRQUFFLFFBQVEsSUFBSUM7QUFFZCxhQUFPLElBQUk7QUFBQSxRQUFRLGFBQ2ZBLFFBQU8saUJBQWlCLFFBQVEsTUFBTTtBQUVsQztBQUFBLFlBQ0k7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxVQUNKLEVBQUUsUUFBUSxTQUFPO0FBQ2IsY0FBRSxHQUFHLElBQUlBLFFBQU8sR0FBRztBQUFBLFVBQ3ZCLENBQUM7QUFFRCxZQUFFLGVBQWUsSUFBSSxRQUFRLE1BQU0sRUFBRSxRQUFRLEtBQUssQ0FBQztBQUNuRCxZQUFFLGlCQUFpQixJQUFJLFFBQVEsTUFBTSxFQUFFLFFBQVEsS0FBSyxDQUFDO0FBRXJELFVBQUFBLFFBQU8sY0FBYyxJQUFJLEVBQUU7QUFDM0IsVUFBQUEsUUFBTyxnQkFBZ0IsSUFBSSxFQUFFO0FBRTdCLGtCQUFRLENBQUM7QUFBQSxRQUViLENBQUM7QUFBQSxNQUNMO0FBQUEsSUFHSixDQUFDO0FBQUEsRUFDTDs7O0FKMUZBLE1BQUlDLFVBQVMsYUFBSztBQUNsQixlQUFLLElBQUksT0FBTztBQUVoQixNQUFNQyxVQUFTLFVBQVU7QUFDekIsTUFBSTtBQUVKLE1BQUksUUFBUTtBQUFBO0FBQUE7QUFBQTtBQUtaLFdBQVMsVUFBVSxXQUFZO0FBRzNCLFFBQUlDLFNBQVFDLFdBQVU7QUFFdEIsVUFBTSxXQUFZO0FBQ2QsK0JBQXlCLFFBQVE7QUFBQSxJQUNyQyxDQUFDO0FBRUQsV0FBTyxTQUFVLE1BQU07QUFJbkIsZ0JBQVUsRUFBRSxLQUFLLE1BQU07QUFFbkIsa0VBQXFDLE1BQU0sT0FBSyxLQUFLLENBQUMsQ0FBQztBQUV2RCxtQ0FBMkIsOEJBQThCO0FBRXpELHNFQUF3RCxLQUFLLENBQUMsTUFBTTtBQUNoRSxVQUFBRCxVQUFTLEVBQUUsUUFBUTtBQUNuQixlQUFLO0FBQUEsUUFDVCxDQUFDLEVBQUUsTUFBTSxPQUFLLEtBQUssQ0FBQyxDQUFDO0FBQUEsTUFHekIsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMsY0FBYyxXQUFZO0FBRS9CLGlCQUFXLE1BQU07QUFDYixZQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsY0FBTSxZQUFZO0FBQUEsTUFHdEIsQ0FBQztBQUVELGdCQUFVLE1BQU07QUFDWixZQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsY0FBTSxZQUFZO0FBQUEsTUFDdEIsQ0FBQztBQUVELGVBQVMsd0JBQXdCLFdBQVk7QUFDekMsbUJBQVcsTUFBTTtBQUNiLGNBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUUzQyxnQkFBTSxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUt0QixDQUFDO0FBRUQsa0JBQVUsTUFBTTtBQUNaLGNBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxnQkFBTSxZQUFZO0FBQUEsUUFFdEIsQ0FBQztBQUVELGlCQUFTLHdCQUF3QixXQUFZO0FBQ3pDLGFBQUcsa0NBQWtDLFdBQVk7QUFDN0MsWUFBQUYsUUFBTyxTQUFTLGVBQWUsT0FBTyxDQUFDLEVBQUUsUUFBUSxLQUFLLGlCQUFpQjtBQUFBLFVBQzNFLENBQUM7QUFBQSxRQUNMLENBQUM7QUFBQSxNQUVMLENBQUM7QUFFRCxlQUFTLDBCQUEwQixXQUFZO0FBQzNDLFdBQUcsNkJBQTZCLFdBQVk7QUFDeEMsVUFBQUEsUUFBTyxTQUFTLGNBQWMsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLFdBQVdFLE9BQU07QUFBQSxRQUN6RSxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBRUQsYUFBUyw0QkFBNEIsV0FBWTtBQUU3QyxVQUFJO0FBQ0osaUJBQVcsTUFBTTtBQUNiLGdCQUFRLFNBQVMsZUFBZSxPQUFPO0FBQUEsTUFDM0MsQ0FBQztBQUVELGdCQUFVLE1BQU07QUFDWixjQUFNLFlBQVk7QUFBQSxNQUN0QixDQUFDO0FBRUQsU0FBRyx5QkFBeUIsU0FBVSxNQUFNO0FBRXhDLGNBQU0sU0FBUyxTQUFTLGNBQWMsZ0JBQWdCO0FBQ3RELGNBQU0sWUFBWSxNQUFNO0FBRXhCLG1CQUFXLE1BQU07QUFDYixjQUFJO0FBRUEsWUFBQUYsUUFBTyxTQUFTLGVBQWUsT0FBTyxDQUFDLEVBQUUsUUFBUSxLQUFLLGlCQUFpQjtBQUFBLFVBQzNFLFNBQVMsR0FBRztBQUNSLG1CQUFPLEtBQUssQ0FBQztBQUFBLFVBQ2pCO0FBRUEsZUFBSztBQUFBLFFBQ1QsR0FBRyxDQUFDO0FBQUEsTUFHUixDQUFDO0FBQUEsSUFDTCxDQUFDO0FBR0QsYUFBUyxnQkFBZ0IsV0FBWTtBQUVqQyxVQUFJLE9BQU9JLGlCQUFnQjtBQUMzQixpQkFBVyxDQUFDLFNBQVM7QUFDakIsZ0JBQVEsU0FBUyxlQUFlLE9BQU87QUFFdkMsY0FBTSxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNbEIsUUFBQUEsa0JBQWlCSCxRQUFPLE9BQU87QUFFL0IsUUFBQUEsUUFBTyxPQUFPLElBQUksU0FBVSxLQUFLSSxVQUFTO0FBRXRDLGNBQUksVUFBVSxvQkFBSTtBQUNsQixrQkFBUSxJQUFJLGdCQUFnQixXQUFXO0FBRXZDLGlCQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUNwQyxvQkFBUTtBQUFBLGNBQ0osSUFBRztBQUFBLGNBQ0gsUUFBTztBQUFBLGNBQ1A7QUFBQSxjQUNBLE1BQU0sV0FBWTtBQUNkLHVCQUFPLElBQUksUUFBUSxDQUFDLFVBQVUsWUFBWTtBQUN0QywyQkFBUyxjQUFjO0FBQUEsZ0JBQzNCLENBQUM7QUFBQSxjQUNMO0FBQUEsWUFDSixDQUFDO0FBQUEsVUFDTCxDQUFDO0FBQUEsUUFFTDtBQUNBLGFBQUs7QUFBQSxNQUNULENBQUM7QUFFRCxnQkFBVSxNQUFNO0FBQ1osY0FBTSxZQUFZO0FBQ2xCLFFBQUFKLFFBQU8sT0FBTyxJQUFJRztBQUFBLE1BQ3RCLENBQUM7QUFFRCxTQUFHLGdDQUFnQyxTQUFVLE1BQU07QUFFL0MsY0FBTSxTQUFTLFNBQVMsY0FBYyxnQkFBZ0I7QUFDdEQsZUFBTyxhQUFhLG9CQUFvQixtQkFBbUI7QUFFM0QsZUFBTyxpQkFBaUIsbUJBQW1CLENBQUMsVUFBVTtBQUNsRCxjQUFJO0FBQ0Esa0JBQU0sVUFBVSxTQUFTLGNBQWMsZ0JBQWdCO0FBQ3ZELFlBQUFKLFFBQU8sT0FBTyxFQUFFLFFBQVEsS0FBSyxhQUFhO0FBQzFDLGlCQUFLO0FBQUEsVUFDVCxTQUFTLEdBQUc7QUFDUixpQkFBSyxDQUFDO0FBQUEsVUFDVjtBQUFBLFFBQ0osQ0FBQztBQUVELGNBQU0sWUFBWSxNQUFNO0FBQ3hCLGlDQUF5QixZQUFZLEVBQUUsVUFBVTtBQUFBLE1BRXJELENBQUM7QUFBQSxJQUNMLENBQUM7QUFBQSxFQUdMLENBQUM7OztBSzNMRDtBQUtBLE1BQUlNLFVBQVMsYUFBSztBQUNsQixlQUFLLElBQUksT0FBTztBQUVoQixNQUFNQyxVQUFTLFVBQVU7QUFJekIsTUFBSUMsU0FBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBa0JaLE1BQUlDO0FBRUosV0FBUyxRQUFRLFdBQVk7QUFFekIsV0FBTyxTQUFVLE1BQU07QUFDbkIsZ0JBQVUsRUFBRSxLQUFLLE1BQU07QUFFbkIsa0VBQXFDLE1BQU0sT0FBSyxLQUFLLENBQUMsQ0FBQztBQUV2RCxZQUFJLFdBQVcsQ0FBQztBQUVoQixZQUFJLENBQUNGLFFBQU8sUUFBUSxHQUFHO0FBQ25CLG1CQUFTLEtBQUssMEVBQThCLEtBQUssQ0FBQyxNQUFNO0FBQ3BELGtCQUFNRyxVQUFTLEVBQUUsUUFBUTtBQUN6QixZQUFBSCxRQUFPLFFBQVEsSUFBSSxJQUFJRyxRQUFPO0FBQUEsVUFDbEMsQ0FBQyxDQUFDO0FBQUEsUUFDTjtBQUVBLGlCQUFTLEtBQUssMkRBQXNELEtBQUssQ0FBQyxNQUFNO0FBQzVFLFVBQUFELFFBQU8sRUFBRSxNQUFNO0FBQUEsUUFDbkIsQ0FBQyxDQUFDO0FBRUYsZ0JBQVEsSUFBSSxRQUFRLEVBQUUsS0FBSyxNQUFJO0FBQzNCLGVBQUs7QUFBQSxRQUNULENBQUMsRUFBRSxNQUFNLE9BQUssS0FBSyxDQUFDLENBQUM7QUFBQSxNQUV6QixDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsYUFBUyw0QkFBNEIsV0FBWTtBQUU3QyxnQkFBVSxNQUFNO0FBQ1osWUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGNBQU0sWUFBWTtBQUFBLE1BQ3RCLENBQUM7QUFFRCxTQUFHLCtCQUErQixTQUFVLE1BQU07QUFFOUMsWUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGNBQU0sWUFBWUQ7QUFFbEIsbUJBQVcsTUFBTTtBQUNiLGNBQUk7QUFDQSxrQkFBTSxPQUFPLFNBQVMsZUFBZSxRQUFRO0FBQzdDLFlBQUFGLFFBQU8sSUFBSSxFQUFFLEdBQUcsV0FBV0csS0FBSTtBQUUvQix1QkFBVyxNQUFNO0FBQ2Isa0JBQUksTUFBTSxLQUFLLFdBQVcsY0FBYyxLQUFLO0FBQzdDLG9CQUFNLFVBQVUsS0FBSyxXQUFXLGlCQUFpQixxQkFBcUI7QUFDdEUsY0FBQUgsUUFBTyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsV0FBVyxpQkFBaUI7QUFDbEQsY0FBQUEsUUFBTyxJQUFJLGNBQWMsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNsQyxjQUFBQSxRQUFPLFFBQVEsTUFBTSxFQUFFLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDcEMsbUJBQUs7QUFBQSxZQUNULEdBQUcsR0FBRztBQUFBLFVBRVYsU0FBUyxHQUFHO0FBQ1IsbUJBQU8sS0FBSyxDQUFDO0FBQUEsVUFDakI7QUFBQSxRQUVKLEdBQUcsQ0FBQztBQUFBLE1BR1IsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUFBLEVBR0wsQ0FBQzs7O0FDakdEOzs7QUNNQSxNQUFNLHFCQUFOLE1BQXlCO0FBQUEsSUFDckIsWUFBWSxVQUFVO0FBQ2xCLFdBQUssV0FBVztBQUNoQixXQUFLLFdBQVcsQ0FBQztBQUFBLElBQ3JCO0FBQUEsSUFFQSxRQUFRLFNBQVM7QUFDYixXQUFLLFNBQVMsS0FBSyxPQUFPO0FBQUEsSUFDOUI7QUFBQSxJQUVBLFVBQVUsU0FBUztBQUNmLFdBQUssV0FBVyxLQUFLLFNBQVMsT0FBTyxDQUFDLE9BQU8sT0FBTyxPQUFPO0FBQUEsSUFDL0Q7QUFBQSxJQUVBLGFBQWE7QUFDVCxXQUFLLFdBQVcsQ0FBQztBQUFBLElBQ3JCO0FBQUEsSUFFQSxjQUFjLFNBQVM7QUFDbkIsV0FBSyxTQUFTLFNBQVMsSUFBSTtBQUFBLElBQy9CO0FBQUEsRUFDSjs7O0FEckJBLE1BQUlLLFVBQVMsYUFBSztBQUNsQixlQUFLLElBQUksT0FBTztBQUVoQixNQUFNQyxVQUFTLFVBQVU7QUFFekIsTUFBSUMsU0FBUTtBQUFBO0FBQUE7QUFBQTtBQUtaLE1BQUksUUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWlCWixNQUFJQztBQUVKLFdBQVMsZUFBZSxXQUFZO0FBRWhDLFVBQU0sV0FBWTtBQUFBLElBQ2xCLENBQUM7QUFFRCxXQUFPLFNBQVUsTUFBTTtBQUNuQixnQkFBVSxFQUFFLEtBQUssTUFBTTtBQUVuQixrRUFBcUMsTUFBTSxPQUFLLEtBQUssQ0FBQyxDQUFDO0FBRXZELFlBQUcsQ0FBQ0YsUUFBTyxnQkFBZ0I7QUFDdkIsVUFBQUEsUUFBTyxpQkFBaUI7QUFBQSxRQUM1QjtBQUVBLG1GQUE4RCxLQUFLLENBQUMsTUFBTTtBQUN0RSxVQUFBRSxlQUFjLEVBQUUsYUFBYTtBQUM3QixlQUFLO0FBQUEsUUFDVCxDQUFDLEVBQUUsTUFBTSxPQUFLLEtBQUssQ0FBQyxDQUFDO0FBQUEsTUFHekIsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMsbUJBQW1CLFdBQVk7QUFFcEMsaUJBQVcsTUFBTTtBQUNiLFlBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxjQUFNLFlBQVlEO0FBQUEsTUFDdEIsQ0FBQztBQUVELGdCQUFVLE1BQU07QUFDWixZQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsY0FBTSxZQUFZO0FBQUEsTUFDdEIsQ0FBQztBQUVELGVBQVMsd0JBQXdCLFdBQVk7QUFDekMsbUJBQVcsTUFBTTtBQUNiLGNBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxnQkFBTSxZQUFZO0FBQUEsUUFDdEIsQ0FBQztBQUVELGtCQUFVLE1BQU07QUFDWixjQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsZ0JBQU0sWUFBWTtBQUFBLFFBRXRCLENBQUM7QUFFRCxpQkFBUyx3QkFBd0IsV0FBWTtBQUN6QyxhQUFHLHdDQUF3QyxXQUFZO0FBQ25ELFlBQUFGLFFBQU8sU0FBUyxlQUFlLE9BQU8sQ0FBQyxFQUFFLFFBQVEsS0FBSyx1QkFBdUI7QUFBQSxVQUNqRixDQUFDO0FBQUEsUUFDTCxDQUFDO0FBQUEsTUFFTCxDQUFDO0FBRUQsZUFBUywwQkFBMEIsV0FBWTtBQUMzQyxXQUFHLG1DQUFtQyxXQUFZO0FBQzlDLFVBQUFBLFFBQU8sU0FBUyxjQUFjLHNCQUFzQixDQUFDLEVBQUUsR0FBRyxXQUFXRyxZQUFXO0FBQUEsUUFDcEYsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUVELGFBQVMsNEJBQTRCLFdBQVk7QUFFN0MsZ0JBQVUsTUFBTTtBQUNaLFlBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxjQUFNLFlBQVk7QUFBQSxNQUN0QixDQUFDO0FBRUQsU0FBRyx5QkFBeUIsU0FBVSxNQUFNO0FBRXhDLFlBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxjQUFNLFNBQVMsU0FBUyxjQUFjLHNCQUFzQjtBQUM1RCxjQUFNLFlBQVksTUFBTTtBQUV4QixtQkFBVyxNQUFNO0FBQ2IsY0FBSTtBQUNBLGtCQUFNQyxXQUFVLE9BQU8sV0FBVyxjQUFjLFFBQVE7QUFFeEQsWUFBQUosUUFBT0ksUUFBTyxFQUFFLEdBQUcsV0FBVyxpQkFBaUI7QUFDL0MsWUFBQUosUUFBT0ksU0FBUSxjQUFjLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFBQSxVQUMxQyxTQUFTLEdBQUc7QUFDUixtQkFBTyxLQUFLLENBQUM7QUFBQSxVQUNqQjtBQUVBLGVBQUs7QUFBQSxRQUNULEdBQUcsQ0FBQztBQUFBLE1BR1IsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUFBLEVBR0wsQ0FBQzs7O0FFaklEO0FBS0EsTUFBSUMsVUFBUyxhQUFLO0FBQ2xCLGVBQUssSUFBSSxPQUFPO0FBRWhCLE1BQU1DLFVBQVMsVUFBVTtBQUV6QixNQUFJQyxTQUFRO0FBQUE7QUFBQTtBQUFBO0FBS1osTUFBSUMsU0FBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBa0JaLE1BQUlDO0FBQUosTUFBWTtBQUVaLFdBQVMsVUFBVSxXQUFZO0FBRTNCLFdBQU8sU0FBVSxNQUFNO0FBQ25CLGdCQUFVLEVBQUUsS0FBSyxNQUFNO0FBRW5CLGtFQUFxQyxNQUFNLE9BQUssS0FBSyxDQUFDLENBQUM7QUFFdkQseUJBQWlCSCxRQUFPLE9BQU87QUFFL0IsdUVBQXdELEtBQUssQ0FBQyxNQUFNO0FBQ2hFLFVBQUFHLFVBQVMsRUFBRSxRQUFRO0FBQ25CLGVBQUs7QUFBQSxRQUNULENBQUMsRUFBRSxNQUFNLE9BQUssS0FBSyxDQUFDLENBQUM7QUFBQSxNQUd6QixDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsYUFBUyxjQUFjLFdBQVk7QUFFL0IsaUJBQVcsTUFBTTtBQUNiLFlBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxjQUFNLFlBQVlGO0FBRWxCLFFBQUFELFFBQU8sT0FBTyxJQUFJLFNBQVUsS0FBS0ksVUFBUztBQUV0QyxjQUFJLFVBQVUsb0JBQUk7QUFDbEIsa0JBQVEsSUFBSSxnQkFBZ0Isa0JBQWtCO0FBRTlDLGlCQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUNwQyxvQkFBUTtBQUFBLGNBQ0o7QUFBQSxjQUNBLE1BQU0sV0FBWTtBQUNkLHVCQUFPLElBQUksUUFBUSxDQUFDLFVBQVUsWUFBWTtBQUV0QyxzQkFBSSxPQUFPLEtBQUssTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSw4Q0F3QlI7QUFFZCwyQkFBUyxLQUFLLFVBQVUsSUFBSSxDQUFDO0FBQUEsZ0JBR2pDLENBQUM7QUFBQSxjQUdMO0FBQUEsWUFDSixDQUFDO0FBQUEsVUFDTCxDQUFDO0FBQUEsUUFFTDtBQUFBLE1BR0osQ0FBQztBQUVELGdCQUFVLE1BQU07QUFDWixZQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsY0FBTSxZQUFZO0FBQ2xCLFFBQUFKLFFBQU8sT0FBTyxJQUFJO0FBQUEsTUFDdEIsQ0FBQztBQUVELGVBQVMsd0JBQXdCLFdBQVk7QUFDekMsbUJBQVcsTUFBTTtBQUNiLGNBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxnQkFBTSxZQUFZRTtBQUFBLFFBQ3RCLENBQUM7QUFFRCxrQkFBVSxNQUFNO0FBQ1osY0FBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGdCQUFNLFlBQVk7QUFDbEIsVUFBQUYsUUFBTyxPQUFPLElBQUk7QUFBQSxRQUN0QixDQUFDO0FBRUQsaUJBQVMsd0JBQXdCLFdBQVk7QUFDekMsYUFBRyxrQ0FBa0MsV0FBWTtBQUM3QyxZQUFBRCxRQUFPLFNBQVMsZUFBZSxPQUFPLENBQUMsRUFBRSxRQUFRLEtBQUssaUJBQWlCO0FBQUEsVUFDM0UsQ0FBQztBQUFBLFFBQ0wsQ0FBQztBQUFBLE1BRUwsQ0FBQztBQUVELGVBQVMsMEJBQTBCLFdBQVk7QUFDM0MsV0FBRyw2QkFBNkIsV0FBWTtBQUN4QyxnQkFBTSxTQUFTLFNBQVMsY0FBYyxnQkFBZ0I7QUFDdEQsVUFBQUEsUUFBTyxNQUFNLEVBQUUsR0FBRyxXQUFXSSxPQUFNO0FBQUEsUUFDdkMsQ0FBQztBQUVELFdBQUcsc0JBQXNCLFNBQVUsTUFBTTtBQUVyQyxjQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsZ0JBQU0sU0FBUyxTQUFTLGNBQWMsZ0JBQWdCO0FBQ3RELGlCQUFPLFVBQVUsT0FBTyxxQkFBcUI7QUFDN0MsaUJBQU8sVUFBVSxvQkFBb0IsR0FBRztBQUN4QyxpQkFBTyxVQUFVLHlCQUF5QixPQUFPO0FBQ2pELGlCQUFPLFVBQVUseUJBQXlCLE9BQU87QUFFakQsZ0JBQU1FLG9CQUFtQixJQUFJLGlCQUFpQixTQUFVLFdBQVc7QUFFL0QsdUJBQVcsQ0FBQyxFQUFFLFFBQVEsS0FBSyxVQUFVLFFBQVEsR0FBRztBQUM1QyxrQkFBSSxTQUFTLFdBQVcsQ0FBQyxFQUFFLFlBQVksa0JBQWtCO0FBRXJELDJCQUFXLE1BQU07QUFDYixrQkFBQUEsa0JBQWlCLFdBQVc7QUFDNUIsc0JBQUk7QUFFQSwwQkFBTUQsV0FBVSxPQUFPLFdBQVcsaUJBQWlCLDRCQUE0QjtBQUUvRSxvQkFBQUwsUUFBT0ssU0FBUSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFFakMsMEJBQU0sYUFBYSxPQUFPLFdBQVcsY0FBYyw2QkFBNkI7QUFDaEYsb0JBQUFMLFFBQU8sVUFBVSxFQUFFLFFBQVEsS0FBSywyQ0FBMkM7QUFDM0Usb0JBQUFBLFFBQU8sVUFBVSxFQUFFLFFBQVEsS0FBSywyQ0FBMkM7QUFDM0Usb0JBQUFBLFFBQU8sVUFBVSxFQUFFLFFBQVEsS0FBSywyQ0FBMkM7QUFDM0Usb0JBQUFBLFFBQU8sVUFBVSxFQUFFLFFBQVEsSUFBSSxLQUFLLDJDQUEyQztBQUFBLGtCQUVuRixTQUFTLEdBQUc7QUFDUiwyQkFBTyxLQUFLLENBQUM7QUFBQSxrQkFDakI7QUFFQSx1QkFBSztBQUFBLGdCQUdULEdBQUcsQ0FBQztBQUFBLGNBQ1I7QUFBQSxZQUNKO0FBQUEsVUFFSixDQUFDO0FBRUQsVUFBQU0sa0JBQWlCLFFBQVEsT0FBTyxFQUFDLFdBQVcsS0FBSSxDQUFDO0FBQ2pELGdCQUFNLFlBQVksTUFBTTtBQUFBLFFBRTVCLENBQUM7QUFBQSxNQUVMLENBQUM7QUFBQSxJQUVMLENBQUM7QUFFRCxhQUFTLDRCQUE0QixXQUFZO0FBRTdDLGdCQUFVLE1BQU07QUFDWixZQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsY0FBTSxZQUFZO0FBQUEsTUFDdEIsQ0FBQztBQUVELFNBQUcseUJBQXlCLFNBQVUsTUFBTTtBQUV4QyxZQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsY0FBTSxTQUFTLFNBQVMsY0FBYyxnQkFBZ0I7QUFDdEQsY0FBTSxZQUFZLE1BQU07QUFFeEIsbUJBQVcsTUFBTTtBQUNiLGNBQUk7QUFDQSxrQkFBTUQsV0FBVSxPQUFPLFdBQVcsY0FBYyw2QkFBNkI7QUFFN0UsWUFBQUwsUUFBT0ssUUFBTyxFQUFFLEdBQUcsV0FBVyxjQUFjO0FBRTVDLGtCQUFNRSxLQUFJRixTQUFRLFdBQVc7QUFDN0Isa0JBQU0sSUFBSUEsU0FBUSxXQUFXO0FBQzdCLFlBQUFMLFFBQU9LLFNBQVEsY0FBYyxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQUEsVUFDMUMsU0FBUyxHQUFHO0FBQ1IsbUJBQU8sS0FBSyxDQUFDO0FBQUEsVUFDakI7QUFFQSxlQUFLO0FBQUEsUUFDVCxHQUFHLENBQUM7QUFBQSxNQUdSLENBQUM7QUFBQSxJQUVMLENBQUM7QUFBQSxFQUdMLENBQUM7OztBQ3BPRDtBQUVBO0FBTUEsTUFBSUcsVUFBUyxhQUFLO0FBQ2xCLGVBQUssSUFBSSxPQUFPO0FBRWhCLE1BQU1DLFVBQVMsVUFBVTtBQUV6QixNQUFJQztBQUFKLE1BQVc7QUFBWCxNQUFvQkM7QUFBcEIsTUFBMkJDO0FBRTNCLFdBQVMsaUJBQWlCLFdBQVk7QUFFbEMsV0FBTyxTQUFVLE1BQU07QUFFbkIsZ0VBQXFDLE1BQU0sT0FBSyxLQUFLLENBQUMsQ0FBQztBQUV2RCxVQUFHLENBQUNILFFBQU8sZ0JBQWdCO0FBQ3ZCLFFBQUFBLFFBQU8saUJBQWlCO0FBQUEsTUFDNUI7QUFFQSxnQkFBVSxJQUFJLFFBQVEsS0FBSyxLQUFLLFVBQVU7QUFBQSxRQUN0QyxRQUFRO0FBQUEsVUFDSixXQUFXO0FBQUEsUUFDZjtBQUFBLE1BQ0osQ0FBQyxDQUFDLEdBQUcsb0JBQW9CLElBQUksRUFBRSxTQUFTO0FBRXhDLE1BQUFFLFNBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGtEQUtrQyxVQUFVO0FBQUE7QUFBQTtBQUlwRCxNQUFBRCxTQUFRO0FBQUE7QUFBQTtBQUFBO0FBTVIsZ0JBQVUsRUFBRSxLQUFLLE1BQU07QUFFbkIsdUZBQWdFLEtBQUssQ0FBQyxNQUFNO0FBQ3hFLFVBQUFFLGlCQUFnQixFQUFFLGVBQWU7QUFDakMsZUFBSztBQUFBLFFBQ1QsQ0FBQyxFQUFFLE1BQU0sT0FBSyxLQUFLLENBQUMsQ0FBQztBQUFBLE1BR3pCLENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxhQUFTLHFCQUFxQixXQUFZO0FBRXRDLGlCQUFXLE1BQU07QUFDYixZQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsY0FBTSxZQUFZRjtBQUFBLE1BQ3RCLENBQUM7QUFFRCxnQkFBVSxNQUFNO0FBQ1osWUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGNBQU0sWUFBWTtBQUFBLE1BQ3RCLENBQUM7QUFFRCxlQUFTLHdCQUF3QixXQUFZO0FBQ3pDLG1CQUFXLE1BQU07QUFDYixjQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsZ0JBQU0sWUFBWUM7QUFBQSxRQUN0QixDQUFDO0FBRUQsa0JBQVUsTUFBTTtBQUNaLGNBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxnQkFBTSxZQUFZO0FBQUEsUUFFdEIsQ0FBQztBQUVELGlCQUFTLHdCQUF3QixXQUFZO0FBQ3pDLGFBQUcsMENBQTBDLFdBQVk7QUFDckQsWUFBQUgsUUFBTyxTQUFTLGVBQWUsT0FBTyxDQUFDLEVBQUUsUUFBUSxLQUFLLHlCQUF5QjtBQUFBLFVBQ25GLENBQUM7QUFBQSxRQUNMLENBQUM7QUFBQSxNQUVMLENBQUM7QUFFRCxlQUFTLDBCQUEwQixXQUFZO0FBQzNDLFdBQUcsNkJBQTZCLFdBQVk7QUFDeEMsVUFBQUEsUUFBTyxTQUFTLGNBQWMsd0JBQXdCLENBQUMsRUFBRSxHQUFHLFdBQVdJLGNBQWE7QUFBQSxRQUN4RixDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBRUQsYUFBUyw0QkFBNEIsV0FBWTtBQUU3QyxnQkFBVSxNQUFNO0FBQ1osWUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGNBQU0sWUFBWTtBQUFBLE1BQ3RCLENBQUM7QUFFRCxTQUFHLHFCQUFxQixTQUFVLE1BQU07QUFFcEMsWUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGNBQU0sU0FBUyxTQUFTLGNBQWMsd0JBQXdCO0FBQzlELGNBQU0sWUFBWSxNQUFNO0FBRXhCLG1CQUFXLE1BQU07QUFDYixjQUFJO0FBQ0Esa0JBQU0sVUFBVSxPQUFPLFdBQVcsY0FBYyxnQkFBZ0I7QUFDaEUsWUFBQUosUUFBTyxRQUFRLGNBQWMsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUFBLFVBQzFDLFNBQVMsR0FBRztBQUNSLG1CQUFPLEtBQUssQ0FBQztBQUFBLFVBQ2pCO0FBRUEsZUFBSztBQUFBLFFBQ1QsR0FBRyxDQUFDO0FBQUEsTUFHUixDQUFDO0FBQUEsSUFDTCxDQUFDO0FBQUEsRUFHTCxDQUFDOzs7QUM5SEQ7QUFJQTtBQUNBO0FBRUEsRUFBQUs7QUFFQSxNQUFJQyxVQUFTLGFBQUs7QUFDbEIsZUFBSyxJQUFJLE9BQU87QUFFaEIsTUFBTUMsVUFBUyxVQUFVO0FBRXpCLE1BQUlDLFNBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUtaLE1BQUlDLFNBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW9CWixNQUFJLFFBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBc0JaLFdBQVMsUUFBUSxXQUFZO0FBRXpCLFFBQUk7QUFFSixXQUFPLFNBQVUsTUFBTTtBQUVuQixnRUFBcUMsTUFBTSxPQUFLLEtBQUssQ0FBQyxDQUFDO0FBRXZELGdCQUFVLEVBQUUsS0FBSyxDQUFDLE1BQU07QUFDcEIsbUVBQXNELEtBQUssQ0FBQyxNQUFNO0FBQzlELGlCQUFPLEVBQUUsTUFBTTtBQUNmLGVBQUs7QUFBQSxRQUNULENBQUMsRUFBRSxNQUFNLE9BQUssS0FBSyxDQUFDLENBQUM7QUFBQSxNQUN6QixDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsY0FBVSxNQUFNO0FBQ1osVUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLFlBQU0sWUFBWTtBQUNsQixtQkFBYSxXQUFXLFVBQVU7QUFBQSxJQUN0QyxDQUFDO0FBR0QsYUFBUyw0QkFBNEIsV0FBWTtBQUU3QyxZQUFNLE1BQU0sT0FBTyxJQUFJLHlDQUF5QztBQUVoRSxVQUFJLGtCQUFrQixjQUFjLFdBQVc7QUFBQSxRQUMzQyxjQUFjO0FBQ1YsZ0JBQU07QUFBQSxRQUNWO0FBQUEsUUFFQSxPQUFPO0FBQ0gsZUFBSyxHQUFHLEVBQUUsV0FBVyxFQUFDLEdBQUcsU0FBUyxHQUFHLFFBQU8sQ0FBQztBQUM3QyxpQkFBTyxRQUFRLFFBQVE7QUFBQSxRQUMzQjtBQUFBLFFBRUEsTUFBTTtBQUNGLGdCQUFNQyxRQUFPO0FBQ2IsaUJBQU9BLE1BQUssR0FBRyxFQUFFLGVBQWU7QUFBQSxRQUNwQztBQUFBLE1BRUo7QUFFQSxpQkFBVyxNQUFNO0FBQ2IsWUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGNBQU0sWUFBWTtBQUlsQixhQUFLLG1CQUFtQixTQUFTLGVBQWU7QUFBQSxNQUdwRCxDQUFDO0FBRUQsU0FBRyw4Q0FBOEMsU0FBVSxNQUFNO0FBQzdELFlBQUksSUFBSSxLQUFLLGVBQWUsT0FBTztBQUNuQyxRQUFBSixRQUFPLEVBQUUsSUFBSSxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxlQUFlO0FBRWpELGNBQU0saUJBQWlCLElBQUksZ0JBQWdCO0FBRTNDLGNBQU0sY0FBYyxTQUFTLGVBQWUsT0FBTztBQUNuRCxvQkFBWSxVQUFVLGNBQWMsY0FBYztBQUNsRCxvQkFBWSxRQUFRLEVBQUUsS0FBSyxNQUFNO0FBQzdCLGdCQUFNLElBQUksWUFBWSxVQUFVO0FBQ2hDLFVBQUFBLFFBQU8sQ0FBQyxFQUFFLEdBQUcsS0FBSyxNQUFNLEVBQUMsR0FBRyxTQUFTLEdBQUcsUUFBTyxDQUFDO0FBQ2hELGVBQUs7QUFBQSxRQUNULENBQUMsRUFBRSxNQUFNLE9BQUssS0FBSyxDQUFDLENBQUM7QUFBQSxNQUd6QixDQUFDO0FBQUEsSUFHTCxDQUFDO0FBRUQsYUFBUyx1Q0FBdUMsV0FBWTtBQUN4RCxZQUFNLGlCQUFpQixjQUFjLFdBQVc7QUFBQSxRQUM1QyxjQUFjO0FBQ1YsZ0JBQU07QUFBQSxRQUNWO0FBQUEsTUFDSjtBQUVBLFNBQUcsa0NBQWtDLFdBQVk7QUFFN0MsYUFBSyxtQkFBbUIsUUFBUSxjQUFjO0FBQzlDLFlBQUksSUFBSSxLQUFLLGVBQWUsTUFBTTtBQUNsQyxRQUFBQSxRQUFPLEVBQUUsSUFBSSxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxjQUFjO0FBRS9DLGFBQUsscUJBQXFCLE1BQU07QUFDaEMsWUFBSSxLQUFLLGVBQWUsTUFBTTtBQUU5QixRQUFBQSxRQUFPLEVBQUUsSUFBSSxNQUFNLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFBQSxNQUNoQyxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBR0Q7QUFBQSxNQUFTO0FBQUEsTUFBZ0IsV0FBWTtBQUU3QixXQUFHLHVDQUF1QyxTQUFVLE1BQU07QUFBQSxVQUV0RCxNQUFNLHVCQUF1QixXQUFXO0FBQUEsWUFFcEMsY0FBYztBQUNWLG9CQUFNO0FBQUEsWUFDVjtBQUFBLFlBRUEsT0FBTztBQUNILHFCQUFPLFFBQVEsUUFBUSxDQUFDLENBQUM7QUFBQSxZQUM3QjtBQUFBLFlBRUEsTUFBTSxNQUFNO0FBQUEsWUFFWjtBQUFBLFlBRUEsQ0FBQyxtQkFBbUIsSUFBSTtBQUNwQixxQkFBTztBQUFBLFlBQ1g7QUFBQSxVQUVKO0FBRUEsZ0JBQU0sUUFBUSxTQUFTLGNBQWMsY0FBYztBQUNuRCxnQkFBTSxjQUFjLElBQUksZUFBZTtBQUN2QyxVQUFBQSxRQUFPLHVCQUF1QixVQUFVLEVBQUUsR0FBRztBQUM3QyxnQkFBTSxVQUFVLGNBQWMsV0FBVztBQUV6QyxnQkFBTSxTQUFTLFNBQVMsY0FBYyxPQUFPO0FBQzdDLGlCQUFPLGFBQWEsUUFBUSxPQUFPO0FBQ25DLGlCQUFPLGFBQWEsMkJBQTJCLHlCQUF5QjtBQUN4RSxpQkFBTyxhQUFhLHFCQUFxQixtQkFBbUI7QUFDNUQsZ0JBQU0sWUFBWSxNQUFNO0FBRXhCLGdCQUFNLFVBQVUsU0FBUyxjQUFjLHNCQUFzQjtBQUM3RCxrQkFBUSxVQUFVLGlCQUFpQixRQUFRO0FBQzNDLGtCQUFRLGFBQWEsbUNBQW1DLE9BQU87QUFDL0Qsa0JBQVEsVUFBVSxpQkFBaUIsTUFBTTtBQUFBLFVBRXpDLENBQUM7QUFFRCxnQkFBTSxZQUFZLE9BQU87QUFFekIsbUJBQVMsZUFBZSxPQUFPLEVBQUUsWUFBWSxLQUFLO0FBRWxELGNBQUksV0FBVyxFQUFFO0FBQUEsWUFBSSxNQUFNO0FBQ25CLHNCQUFRLE1BQU07QUFBQSxZQUNsQjtBQUFBLFVBQ0osRUFBRSxJQUFJLEVBQUUsS0FBSyxNQUFNO0FBQ2YsaUJBQUs7QUFBQSxVQUNULENBQUMsRUFBRSxNQUFNLE9BQUssS0FBSyxDQUFDLENBQUM7QUFBQSxRQUd6QixDQUFDO0FBQUEsTUFHTDtBQUFBLElBQ0o7QUFFQSxhQUFTLDRCQUE0QixXQUFZO0FBRTdDLFNBQUcsNkJBQTZCLFNBQVUsTUFBTTtBQUU1QyxZQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsY0FBTSxjQUFjLFNBQVMsY0FBYyxjQUFjO0FBQ3pELGNBQU0sWUFBWSxXQUFXO0FBRTdCLG1CQUFXLE1BQU07QUFDYixjQUFJO0FBQ0EsWUFBQUEsUUFBTyxTQUFTLGVBQWUsT0FBTyxDQUFDLEVBQUUsUUFBUSxLQUFLLDJIQUEySDtBQUNqTCxpQkFBSztBQUFBLFVBQ1QsU0FBUyxHQUFHO0FBQ1IsbUJBQU8sS0FBSyxDQUFDO0FBQUEsVUFDakI7QUFBQSxRQUdKLEdBQUcsQ0FBQztBQUFBLE1BR1IsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUVELGFBQVMsa0JBQWtCLFdBQVk7QUFFbkMsZUFBUyw4QkFBOEIsV0FBWTtBQUMvQyxtQkFBVyxNQUFNO0FBQ2IsY0FBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGdCQUFNLFlBQVlFO0FBQ2xCLHVCQUFhLFFBQVEsWUFBWSxJQUFJO0FBQUEsUUFDekMsQ0FBQztBQUVELFdBQUcsZ0NBQWdDLFdBQVk7QUFDM0MsVUFBQUYsUUFBTyxTQUFTLGVBQWUsT0FBTyxDQUFDLEVBQUUsUUFBUSxLQUFLLGVBQWU7QUFBQSxRQUN6RSxDQUFDO0FBQUEsTUFHTCxDQUFDO0FBRUQsZUFBUyw4QkFBOEIsV0FBWTtBQUUvQyxtQkFBVyxDQUFDLFNBQVM7QUFDakIsdUJBQWEsUUFBUSxZQUFZLEtBQUssVUFBVTtBQUFBLFlBQzVDLEdBQUc7QUFBQSxZQUNILEdBQUc7QUFBQSxZQUNILEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUFBLFlBQ1gsR0FBRztBQUFBLGNBQ0MsR0FBRztBQUFBLFlBQ1A7QUFBQSxVQUNKLENBQUMsQ0FBQztBQUNGLGNBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUUzQyxjQUFJO0FBQ0Esa0JBQU0sWUFBWUc7QUFDbEIsaUJBQUs7QUFBQSxVQUNULFNBQVMsR0FBRztBQUNSLGlCQUFLLENBQUM7QUFBQSxVQUNWO0FBQUEsUUFFSixDQUFDO0FBRUQsV0FBRyxnQ0FBZ0MsV0FBWTtBQUUzQyxjQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsZ0JBQU0sWUFBWUE7QUFFbEIsVUFBQUgsUUFBTyxTQUFTLGVBQWUsT0FBTyxDQUFDLEVBQUUsUUFBUSxLQUFLLGVBQWU7QUFBQSxRQUN6RSxDQUFDO0FBRUQsV0FBRyxnQkFBZ0IsU0FBVSxNQUFNO0FBRS9CLGNBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxnQkFBTSxZQUFZRztBQUVsQixVQUFBSCxRQUFPLFNBQVMsZUFBZSxPQUFPLENBQUMsRUFBRSxRQUFRLEtBQUssZUFBZTtBQUVyRSxxQkFBVyxNQUFNO0FBRWIsa0JBQU1LLFFBQU8sU0FBUyxlQUFlLE9BQU87QUFDNUMsZ0JBQUksQ0FBQ0EsTUFBSyxZQUFZO0FBQ2xCLHFCQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUFBLFlBQzFDO0FBQ0Esa0JBQU0sV0FBV0EsTUFBSyxXQUFXLGNBQWMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFBRSxjQUFjLE9BQU87QUFDbEcscUJBQVMsTUFBTTtBQUdmLGlCQUFLO0FBQUEsVUFDVCxHQUFHLENBQUM7QUFBQSxRQUVSLENBQUM7QUFBQSxNQUdMLENBQUM7QUFBQSxJQUdMLENBQUM7QUFBQSxFQUVMLENBQUM7OztBQzVURDtBQUtBLE1BQUlDLFVBQVMsYUFBSztBQUNsQixlQUFLLElBQUksT0FBTztBQUVoQixNQUFNQyxVQUFTLFVBQVU7QUFFekIsTUFBSUMsU0FBUTtBQUFBO0FBQUE7QUFBQTtBQUtaLE1BQUlDLFNBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWtCWixNQUFJQztBQUFKLE1BQWdCQztBQUVoQixXQUFTLGNBQWMsV0FBWTtBQUUvQixXQUFPLFNBQVUsTUFBTTtBQUNuQixnQkFBVSxFQUFFLEtBQUssTUFBTTtBQUNuQixrRUFBcUMsTUFBTSxPQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3ZELFFBQUFBLGtCQUFpQkosUUFBTyxPQUFPO0FBRS9CLGlGQUE2RCxLQUFLLENBQUMsTUFBTTtBQUNyRSxVQUFBRyxjQUFhLEVBQUUsWUFBWTtBQUMzQixlQUFLO0FBQUEsUUFDVCxDQUFDLEVBQUUsTUFBTSxPQUFLLEtBQUssQ0FBQyxDQUFDO0FBQUEsTUFHekIsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMsY0FBYyxXQUFZO0FBRS9CLGlCQUFXLE1BQU07QUFDYixZQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsY0FBTSxZQUFZRjtBQUVsQixRQUFBRCxRQUFPLE9BQU8sSUFBSSxTQUFVLEtBQUtLLFVBQVM7QUFFdEMsY0FBSSxVQUFVLG9CQUFJO0FBQ2xCLGtCQUFRLElBQUksZ0JBQWdCLGtCQUFrQjtBQUU5QyxpQkFBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDcEMsb0JBQVE7QUFBQSxjQUNKO0FBQUEsY0FDQSxNQUFNLFdBQVk7QUFDZCx1QkFBTyxJQUFJLFFBQVEsQ0FBQyxVQUFVLFlBQVk7QUFFdEMsc0JBQUksT0FBTyxLQUFLLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsOENBMkJSO0FBRWQsMkJBQVMsS0FBSyxVQUFVLElBQUksQ0FBQztBQUFBLGdCQUdqQyxDQUFDO0FBQUEsY0FHTDtBQUFBLFlBQ0osQ0FBQztBQUFBLFVBQ0wsQ0FBQztBQUFBLFFBRUw7QUFBQSxNQUdKLENBQUM7QUFFRCxnQkFBVSxNQUFNO0FBQ1osWUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGNBQU0sWUFBWTtBQUNsQixRQUFBTCxRQUFPLE9BQU8sSUFBSUk7QUFBQSxNQUN0QixDQUFDO0FBRUQsZUFBUyx3QkFBd0IsV0FBWTtBQUN6QyxtQkFBVyxNQUFNO0FBQ2IsY0FBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGdCQUFNLFlBQVlGO0FBQUEsUUFDdEIsQ0FBQztBQUVELGtCQUFVLE1BQU07QUFDWixjQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsZ0JBQU0sWUFBWTtBQUNsQixVQUFBRixRQUFPLE9BQU8sSUFBSUk7QUFBQSxRQUN0QixDQUFDO0FBRUQsaUJBQVMsd0JBQXdCLFdBQVk7QUFDekMsYUFBRyx1Q0FBdUMsV0FBWTtBQUNsRCxZQUFBTCxRQUFPLFNBQVMsZUFBZSxPQUFPLENBQUMsRUFBRSxRQUFRLEtBQUssc0JBQXNCO0FBQUEsVUFDaEYsQ0FBQztBQUFBLFFBQ0wsQ0FBQztBQUFBLE1BRUwsQ0FBQztBQUVELGVBQVMsMEJBQTBCLFdBQVk7QUFDM0MsV0FBRyw2QkFBNkIsV0FBWTtBQUN4QyxVQUFBQSxRQUFPLFNBQVMsY0FBYyxxQkFBcUIsQ0FBQyxFQUFFLEdBQUcsV0FBV0ksV0FBVTtBQUFBLFFBQ2xGLENBQUM7QUFFRCxXQUFHLHNCQUFzQixTQUFVLE1BQU07QUFFckMsY0FBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGdCQUFNLGFBQWEsU0FBUyxjQUFjLHFCQUFxQjtBQUMvRCxxQkFBVyxVQUFVLE9BQU8scUJBQXFCO0FBRWpELHFCQUFXLFVBQVUsb0JBQW9CLEdBQUc7QUFDNUMscUJBQVcsVUFBVSx5QkFBeUIsY0FBYztBQUM1RCxxQkFBVyxVQUFVLHlCQUF5QixtQkFBbUI7QUFFakUsZ0JBQU0sWUFBWSxVQUFVO0FBRTVCLHFCQUFXLE1BQU07QUFDYixnQkFBSTtBQUNBLG9CQUFNRSxXQUFVLFdBQVcsV0FBVyxpQkFBaUIsNEJBQTRCO0FBR25GLGNBQUFOLFFBQU9NLFNBQVEsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBR2pDLG9CQUFNLGFBQWEsV0FBVyxXQUFXLGNBQWMsNkJBQTZCO0FBQ3BGLGNBQUFOLFFBQU8sVUFBVSxFQUFFLFFBQVEsS0FBSywyQ0FBMkM7QUFDM0UsY0FBQUEsUUFBTyxVQUFVLEVBQUUsUUFBUSxLQUFLLDJDQUEyQztBQUMzRSxjQUFBQSxRQUFPLFVBQVUsRUFBRSxRQUFRLEtBQUssMkNBQTJDO0FBQzNFLGNBQUFBLFFBQU8sVUFBVSxFQUFFLFFBQVEsSUFBSSxLQUFLLDJDQUEyQztBQUFBLFlBRW5GLFNBQVMsR0FBRztBQUNSLHFCQUFPLEtBQUssQ0FBQztBQUFBLFlBQ2pCO0FBRUEsaUJBQUs7QUFBQSxVQUNULEdBQUcsQ0FBQztBQUFBLFFBR1IsQ0FBQztBQUFBLE1BRUwsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUVELGFBQVMsNEJBQTRCLFdBQVk7QUFFN0MsZ0JBQVUsTUFBTTtBQUNaLFlBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxjQUFNLFlBQVk7QUFBQSxNQUN0QixDQUFDO0FBRUQsU0FBRyx5QkFBeUIsU0FBVSxNQUFNO0FBRXhDLFlBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxjQUFNLFNBQVMsU0FBUyxjQUFjLHFCQUFxQjtBQUMzRCxjQUFNLFlBQVksTUFBTTtBQUV4QixtQkFBVyxNQUFNO0FBQ2IsY0FBSTtBQUNBLGtCQUFNTSxXQUFVLE9BQU8sV0FBVyxjQUFjLDZCQUE2QjtBQUU3RSxZQUFBTixRQUFPTSxRQUFPLEVBQUUsR0FBRyxXQUFXLGNBQWM7QUFDNUMsWUFBQU4sUUFBT00sU0FBUSxjQUFjLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFBQSxVQUMxQyxTQUFTLEdBQUc7QUFDUixtQkFBTyxLQUFLLENBQUM7QUFBQSxVQUNqQjtBQUVBLGVBQUs7QUFBQSxRQUNULEdBQUcsQ0FBQztBQUFBLE1BR1IsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUFBLEVBR0wsQ0FBQzs7O0FDdk5EO0FBS0EsTUFBSUMsVUFBUyxhQUFLO0FBQ2xCLGVBQUssSUFBSSxPQUFPO0FBRWhCLE1BQU1DLFdBQVMsVUFBVTtBQUV6QixNQUFJQyxTQUFRO0FBQUE7QUFBQTtBQUFBO0FBS1osTUFBSUMsU0FBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWlCWixNQUFJQztBQUVKLFdBQVMsVUFBVSxXQUFZO0FBRTNCLFdBQU8sU0FBVSxNQUFNO0FBQ25CLGdCQUFVLEVBQUUsS0FBSyxNQUFNO0FBRW5CLGtFQUFxQyxNQUFNLE9BQUssS0FBSyxDQUFDLENBQUM7QUFFdkQsdUVBQXdELEtBQUssQ0FBQyxNQUFNO0FBQ2hFLFVBQUFBLFVBQVMsRUFBRSxRQUFRO0FBQ25CLGVBQUs7QUFBQSxRQUNULENBQUMsRUFBRSxNQUFNLE9BQUssS0FBSyxDQUFDLENBQUM7QUFBQSxNQUd6QixDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsYUFBUyxjQUFjLFdBQVk7QUFFL0IsaUJBQVcsTUFBTTtBQUNiLFlBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxjQUFNLFlBQVlGO0FBQUEsTUFDdEIsQ0FBQztBQUVELGdCQUFVLE1BQU07QUFDWixZQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsY0FBTSxZQUFZO0FBQUEsTUFDdEIsQ0FBQztBQUVELGVBQVMsd0JBQXdCLFdBQVk7QUFDekMsbUJBQVcsTUFBTTtBQUNiLGNBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxnQkFBTSxZQUFZQztBQUFBLFFBQ3RCLENBQUM7QUFFRCxrQkFBVSxNQUFNO0FBQ1osY0FBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGdCQUFNLFlBQVk7QUFBQSxRQUV0QixDQUFDO0FBRUQsaUJBQVMsd0JBQXdCLFdBQVk7QUFDekMsYUFBRyxrQ0FBa0MsV0FBWTtBQUM3QyxZQUFBSCxRQUFPLFNBQVMsZUFBZSxPQUFPLENBQUMsRUFBRSxRQUFRLEtBQUssaUJBQWlCO0FBQUEsVUFDM0UsQ0FBQztBQUFBLFFBQ0wsQ0FBQztBQUFBLE1BRUwsQ0FBQztBQUVELGVBQVMsMEJBQTBCLFdBQVk7QUFDM0MsV0FBRyw2QkFBNkIsV0FBWTtBQUN4QyxVQUFBQSxRQUFPLFNBQVMsY0FBYyxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsV0FBV0ksT0FBTTtBQUFBLFFBQ3pFLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUVMLENBQUM7QUFFRCxhQUFTLDRCQUE0QixXQUFZO0FBRTdDLGdCQUFVLE1BQU07QUFDWixZQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsY0FBTSxZQUFZO0FBQUEsTUFDdEIsQ0FBQztBQUVELFNBQUcseUJBQXlCLFNBQVUsTUFBTTtBQUV4QyxZQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsY0FBTSxTQUFTLFNBQVMsY0FBYyxnQkFBZ0I7QUFDdEQsY0FBTSxZQUFZLE1BQU07QUFFeEIsbUJBQVcsTUFBTTtBQUNiLGNBQUk7QUFDQSxrQkFBTUMsV0FBVSxPQUFPLFdBQVcsY0FBYyxRQUFRO0FBRXhELFlBQUFMLFFBQU9LLFFBQU8sRUFBRSxHQUFHLFdBQVcsaUJBQWlCO0FBQy9DLFlBQUFMLFFBQU9LLFNBQVEsY0FBYyxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQUEsVUFDMUMsU0FBUyxHQUFHO0FBQ1IsbUJBQU8sS0FBSyxDQUFDO0FBQUEsVUFDakI7QUFFQSxlQUFLO0FBQUEsUUFDVCxHQUFHLENBQUM7QUFBQSxNQUdSLENBQUM7QUFBQSxJQUNMLENBQUM7QUFBQSxFQUdMLENBQUM7OztBQ3pIRDtBQU1BLE1BQUlDLFdBQVMsYUFBSztBQUNsQixlQUFLLElBQUksT0FBTztBQUVoQixNQUFNQyxXQUFTLFVBQVU7QUFDekIsTUFBSUM7QUFFSixNQUFJQyxTQUFRO0FBQUE7QUFBQTtBQUFBO0FBS1osV0FBUyxZQUFZLFdBQVk7QUFHN0IsUUFBSUMsV0FBVUMsV0FBVTtBQUV4QixVQUFNLFdBQVk7QUFDZCxNQUFBSCwwQkFBeUIsUUFBUTtBQUFBLElBQ3JDLENBQUM7QUFFRCxXQUFPLFNBQVUsTUFBTTtBQUVuQixnQkFBVSxFQUFFLEtBQUssTUFBTTtBQUNuQixrRUFBcUMsTUFBTSxPQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3ZELFFBQUFBLDRCQUEyQiw4QkFBOEI7QUFFN0QsMkVBQTBELEtBQUssQ0FBQyxNQUFNO0FBQzlELFVBQUFFLFlBQVcsRUFBRSxVQUFVO0FBQ3ZCLGVBQUs7QUFBQSxRQUNULENBQUMsRUFBRSxNQUFNLE9BQUssS0FBSyxDQUFDLENBQUM7QUFBQSxNQUd6QixDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsYUFBUyxnQkFBZ0IsV0FBWTtBQUVqQyxpQkFBVyxNQUFNO0FBQ2IsWUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGNBQU0sWUFBWUQ7QUFBQSxNQUd0QixDQUFDO0FBRUQsZ0JBQVUsTUFBTTtBQUNaLFlBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxjQUFNLFlBQVk7QUFBQSxNQUN0QixDQUFDO0FBRUQsZUFBUyx3QkFBd0IsV0FBWTtBQUN6QyxtQkFBVyxNQUFNO0FBQ2IsY0FBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBRTNDLGdCQUFNLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS3RCLENBQUM7QUFFRCxrQkFBVSxNQUFNO0FBQ1osY0FBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGdCQUFNLFlBQVk7QUFBQSxRQUV0QixDQUFDO0FBRUQsaUJBQVMsd0JBQXdCLFdBQVk7QUFDekMsYUFBRyxvQ0FBb0MsV0FBWTtBQUMvQyxZQUFBSCxTQUFPLFNBQVMsZUFBZSxPQUFPLENBQUMsRUFBRSxRQUFRLEtBQUssbUJBQW1CO0FBQUEsVUFDN0UsQ0FBQztBQUFBLFFBQ0wsQ0FBQztBQUFBLE1BRUwsQ0FBQztBQUVELGVBQVMsMEJBQTBCLFdBQVk7QUFDM0MsV0FBRywrQkFBK0IsV0FBWTtBQUMxQyxVQUFBQSxTQUFPLFNBQVMsY0FBYyxrQkFBa0IsQ0FBQyxFQUFFLEdBQUcsV0FBV0ksU0FBUTtBQUFBLFFBQzdFLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUVMLENBQUM7QUFFRCxhQUFTLDRCQUE0QixXQUFZO0FBRTdDLFVBQUk7QUFDSixpQkFBVyxNQUFNO0FBQ2IsZ0JBQVEsU0FBUyxlQUFlLE9BQU87QUFBQSxNQUMzQyxDQUFDO0FBRUQsZ0JBQVUsTUFBTTtBQUNaLGNBQU0sWUFBWTtBQUFBLE1BQ3RCLENBQUM7QUFFRCxTQUFHLHlCQUF5QixTQUFVLE1BQU07QUFFeEMsY0FBTSxXQUFXLFNBQVMsY0FBYyxrQkFBa0I7QUFDMUQsY0FBTSxZQUFZLFFBQVE7QUFFMUIsbUJBQVcsTUFBTTtBQUNiLGNBQUk7QUFFQSxZQUFBSixTQUFPLFNBQVMsZUFBZSxPQUFPLENBQUMsRUFBRSxRQUFRLEtBQUssbUJBQW1CO0FBQUEsVUFDN0UsU0FBUyxHQUFHO0FBQ1IsbUJBQU8sS0FBSyxDQUFDO0FBQUEsVUFDakI7QUFFQSxlQUFLO0FBQUEsUUFDVCxHQUFHLENBQUM7QUFBQSxNQUdSLENBQUM7QUFBQSxJQUNMLENBQUM7QUFHRCxhQUFTLGdCQUFnQixXQUFZO0FBRWpDLFVBQUksT0FBT00saUJBQWdCO0FBQzNCLGlCQUFXLENBQUMsU0FBUztBQUNqQixnQkFBUSxTQUFTLGVBQWUsT0FBTztBQUV2QyxjQUFNLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1sQixRQUFBQSxrQkFBaUJMLFNBQU8sT0FBTztBQUUvQixRQUFBQSxTQUFPLE9BQU8sSUFBSSxTQUFVLEtBQUtNLFVBQVM7QUFFdEMsY0FBSSxVQUFVLG9CQUFJO0FBQ2xCLGtCQUFRLElBQUksZ0JBQWdCLFdBQVc7QUFFdkMsaUJBQU8sSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ3BDLG9CQUFRO0FBQUEsY0FDSixJQUFHO0FBQUEsY0FDSCxRQUFPO0FBQUEsY0FDUDtBQUFBLGNBQ0EsTUFBTSxXQUFZO0FBQ2QsdUJBQU8sSUFBSSxRQUFRLENBQUMsVUFBVSxZQUFZO0FBQ3RDLDJCQUFTLGNBQWM7QUFBQSxnQkFDM0IsQ0FBQztBQUFBLGNBQ0w7QUFBQSxZQUNKLENBQUM7QUFBQSxVQUNMLENBQUM7QUFBQSxRQUVMO0FBQ0EsYUFBSztBQUFBLE1BQ1QsQ0FBQztBQUVELGdCQUFVLE1BQU07QUFDWixjQUFNLFlBQVk7QUFDbEIsUUFBQU4sU0FBTyxPQUFPLElBQUlLO0FBQUEsTUFDdEIsQ0FBQztBQUVELFNBQUcsZ0NBQWdDLFNBQVUsTUFBTTtBQUUvQyxjQUFNLFdBQVcsU0FBUyxjQUFjLGtCQUFrQjtBQUMxRCxpQkFBUyxhQUFhLG9CQUFvQixtQkFBbUI7QUFDN0QsY0FBTSxZQUFZLFFBQVE7QUFFMUIsaUJBQVMsaUJBQWlCLG1CQUFtQixDQUFDLFVBQVU7QUFDcEQsY0FBSTtBQUNBLGtCQUFNLFVBQVUsU0FBUyxjQUFjLGtCQUFrQjtBQUN6RCxrQkFBTSxhQUFhLFFBQVE7QUFHM0IsWUFBQU4sU0FBTyxVQUFVLEVBQUUsUUFBUSxLQUFLLGFBQWE7QUFDN0MsaUJBQUs7QUFBQSxVQUNULFNBQVMsR0FBRztBQUNSLGlCQUFLLENBQUM7QUFBQSxVQUNWO0FBQUEsUUFHSixDQUFDO0FBRUQsUUFBQUUsMEJBQXlCLFlBQVksRUFBRSxVQUFVO0FBQUEsTUFFckQsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUFBLEVBR0wsQ0FBQzs7O0FDdkxELE1BQUlNLFdBQVMsYUFBSztBQUNsQixlQUFLLElBQUksT0FBTztBQUloQixNQUFJQztBQUVKLFdBQVMsV0FBVyxXQUFZO0FBRTVCLFdBQU8sU0FBVSxNQUFNO0FBQ25CLGdCQUFVLEVBQUUsS0FBSyxNQUFNO0FBRW5CLHlFQUEyRCxLQUFLLENBQUMsTUFBTTtBQUNuRSxVQUFBQSxXQUFVLEVBQUUsU0FBUztBQUNyQixlQUFLO0FBQUEsUUFDVCxDQUFDLEVBQUUsTUFBTSxPQUFLLEtBQUssQ0FBQyxDQUFDO0FBQUEsTUFDekIsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMsMEJBQTBCLFdBQVk7QUFDM0MsU0FBRyw4QkFBOEIsV0FBWTtBQUV6QyxjQUFNLFVBQVUsU0FBUyxjQUFjLHdCQUF3QjtBQUczRCxRQUFBRCxTQUFPLE9BQU8sRUFBRSxHQUFHLFdBQVdDLFFBQU87QUFBQSxNQUc3QyxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBQUEsRUFHTCxDQUFDOzs7QUNqQ0QsTUFBSUMsV0FBUyxhQUFLO0FBQ2xCLGVBQUssSUFBSSxPQUFPO0FBZ0JoQixNQUFJQztBQUVKLFdBQVMsVUFBVSxXQUFZO0FBRTNCLFdBQU8sU0FBVSxNQUFNO0FBQ25CLGdCQUFVLEVBQUUsS0FBSyxNQUFNO0FBQ25CLHVFQUEwRCxLQUFLLENBQUMsTUFBTTtBQUNsRSxVQUFBQyxVQUFTLEVBQUUsUUFBUTtBQUNuQixlQUFLO0FBQUEsUUFDVCxDQUFDLEVBQUUsTUFBTSxPQUFLLEtBQUssQ0FBQyxDQUFDO0FBQUEsTUFDekIsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMsMEJBQTBCLFdBQVk7QUFDM0MsU0FBRyw2QkFBNkIsV0FBWTtBQUdwQyxRQUFBQyxTQUFPLFNBQVMsY0FBYyxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsV0FBV0QsT0FBTTtBQUFBLE1BSTdFLENBQUM7QUFFRCxTQUFHLHdCQUF3QixTQUFVLE1BQU07QUFFdkMsWUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGNBQU0sU0FBUyxTQUFTLGNBQWMsZ0JBQWdCO0FBQ3RELFlBQUksSUFBSTtBQUNSLGVBQU8sS0FBSyxxQkFBcUIsR0FBRztBQUNwQyxlQUFPLEtBQUsscUJBQXFCLEdBQUc7QUFDcEMsZUFBTyxLQUFLLHFCQUFxQixHQUFHO0FBRXBDLGNBQU1FLG9CQUFtQixJQUFJLGlCQUFpQixTQUFVLFdBQVc7QUFFL0QscUJBQVcsQ0FBQyxFQUFFLFFBQVEsS0FBSyxVQUFVLFFBQVEsR0FBRztBQUM1QyxnQkFBSSxTQUFTLFdBQVcsQ0FBQyxFQUFFLFlBQVksa0JBQWtCO0FBRXJELHlCQUFXLE1BQU07QUFDYixnQkFBQUEsa0JBQWlCLFdBQVc7QUFDNUIsb0JBQUk7QUFFQSx3QkFBTSxXQUFXLE9BQU8sV0FBVyxpQkFBaUIsd0JBQXdCO0FBRTVFLGtCQUFBRCxTQUFPLFNBQVMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBQUEsZ0JBRXRDLFNBQVMsR0FBRztBQUNSLHlCQUFPLEtBQUssQ0FBQztBQUFBLGdCQUNqQjtBQUVBLHFCQUFLO0FBQUEsY0FHVCxHQUFHLENBQUM7QUFBQSxZQUNSO0FBQUEsVUFDSjtBQUFBLFFBRUosQ0FBQztBQUVELFFBQUFDLGtCQUFpQixRQUFRLE9BQU8sRUFBQyxXQUFXLEtBQUksQ0FBQztBQUNqRCxjQUFNLFlBQVksTUFBTTtBQUFBLE1BRTVCLENBQUM7QUFBQSxJQUVMLENBQUM7QUFBQSxFQUdMLENBQUM7OztBQ3ZGRDtBQUlBLE1BQUlDLFdBQVMsYUFBSztBQUNsQixlQUFLLElBQUksT0FBTztBQUVoQixNQUFNQyxXQUFTLFVBQVU7QUFHekIsV0FBUyxRQUFRLFdBQVk7QUFFekIsUUFBSTtBQUNKLFFBQUlDLFVBQVE7QUFBQTtBQUFBO0FBSVosV0FBTyxTQUFVLE1BQU07QUFDbkIsZ0JBQVUsRUFBRSxLQUFLLE1BQU07QUFDbkIsbUVBQXNELEtBQUssQ0FBQyxNQUFNO0FBQzlELGlCQUFPLEVBQUUsTUFBTTtBQUNmLGVBQUs7QUFBQSxRQUNULENBQUMsRUFBRSxNQUFNLE9BQUssS0FBSyxDQUFDLENBQUM7QUFBQSxNQUV6QixDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsZUFBVyxNQUFNO0FBQ2IsVUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLFlBQU0sWUFBWUE7QUFBQSxJQU90QixDQUFDO0FBRUQsY0FBVSxNQUFNO0FBQ1osVUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLFlBQU0sWUFBWTtBQUNsQixtQkFBYSxXQUFXLFVBQVU7QUFBQSxJQUN0QyxDQUFDO0FBR0QsT0FBRyxjQUFjLFNBQVUsTUFBTTtBQUU3QixVQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsWUFBTSxjQUFjLFNBQVMsY0FBYyxjQUFjO0FBQ3pELFlBQU0sWUFBWSxXQUFXO0FBRTdCLGlCQUFXLE1BQU07QUFDYixZQUFJO0FBQ0EsVUFBQUYsU0FBTyxTQUFTLGVBQWUsT0FBTyxDQUFDLEVBQUUsUUFBUSxLQUFLLDJIQUEySDtBQUFBLFFBQ3JMLFNBQVMsR0FBRztBQUNSLGlCQUFPLEtBQUssQ0FBQztBQUFBLFFBQ2pCO0FBRUEsYUFBSztBQUFBLE1BQ1QsR0FBRyxDQUFDO0FBQUEsSUFNUixDQUFDO0FBQUEsRUFHTCxDQUFDOzs7QUNwRUQ7QUFLQSxNQUFJRyxXQUFTLGFBQUs7QUFDbEIsZUFBSyxJQUFJLE9BQU87QUFFaEIsTUFBTUMsV0FBUyxVQUFVO0FBR3pCLFdBQVMsV0FBVyxXQUFZO0FBRTVCLFFBQUk7QUFDSixRQUFJQyxVQUFRO0FBQUE7QUFBQTtBQUlaLFdBQU8sU0FBVSxNQUFNO0FBQ25CLGdCQUFVLEVBQUUsS0FBSyxNQUFNO0FBQ25CLHlFQUF5RCxLQUFLLENBQUMsTUFBTTtBQUNqRSxpQkFBTyxFQUFFLFNBQVM7QUFDbEIsZUFBSztBQUFBLFFBQ1QsQ0FBQyxFQUFFLE1BQU0sT0FBSyxLQUFLLENBQUMsQ0FBQztBQUFBLE1BRXpCLENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxlQUFXLE1BQU07QUFDYixVQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsWUFBTSxZQUFZQTtBQUFBLElBQ3RCLENBQUM7QUFFRCxjQUFVLE1BQU07QUFDWixVQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsWUFBTSxZQUFZO0FBQUEsSUFDdEIsQ0FBQztBQUdELE9BQUcsY0FBYyxTQUFVLE1BQU07QUFFN0IsVUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLFlBQU0sY0FBYyxTQUFTLGNBQWMsaUJBQWlCO0FBQzVELFlBQU0sWUFBWSxXQUFXO0FBRTdCLGlCQUFXLE1BQU07QUFDYixZQUFJO0FBQ0EsVUFBQUYsU0FBTyxTQUFTLGVBQWUsT0FBTyxDQUFDLEVBQUUsUUFBUTtBQUFBLFlBQzdDO0FBQUEsVUFBa0k7QUFBQSxRQUMxSSxTQUFTLEdBQUc7QUFDUixpQkFBTyxLQUFLLENBQUM7QUFBQSxRQUNqQjtBQUVBLGFBQUs7QUFBQSxNQUNULEdBQUcsQ0FBQztBQUFBLElBRVIsQ0FBQztBQUFBLEVBRUwsQ0FBQzs7O0FDeERELEVBQUFHO0FBUUEsV0FBUywyQkFBMkIsTUFBTTtBQWN0QyxXQUFPLFNBQVUsTUFBTTtBQUNuQixnQkFBVSxFQUFFLEtBQUssTUFBTTtBQUNuQixhQUFLO0FBQUEsTUFDVCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBSUQsVUFBTSxNQUFNO0FBQUEsSUFHWixDQUFDO0FBRUQsT0FBRywwREFBMEQsTUFBTTtBQUMvRCxZQUFNLGdCQUFnQjtBQUN0QixZQUFNLEtBQUs7QUFDWCxZQUFNLFNBQVM7QUFFZixZQUFNLFlBQVksd0JBQXdCLGVBQWUsSUFBSSxNQUFNO0FBR25FLGFBQU8sU0FBUyxFQUFFLEdBQUcsUUFBUSxNQUFNO0FBQ25DLGFBQU8sU0FBUyxFQUFFLEdBQUcsUUFBUSxhQUFhO0FBQzFDLGFBQU8sU0FBUyxFQUFFLEdBQUcsUUFBUSxFQUFFO0FBQy9CLGFBQU8sU0FBUyxFQUFFLEdBQUcsTUFBTSxpQkFBaUI7QUFBQSxJQUNoRCxDQUFDO0FBRUQsT0FBRyxpRUFBaUUsTUFBTTtBQUN0RSxZQUFNLGdCQUFnQjtBQUN0QixZQUFNLEtBQUs7QUFDWCxZQUFNLFNBQVM7QUFFZixZQUFNLFlBQVksd0JBQXdCLGVBQWUsSUFBSSxNQUFNO0FBR25FLGFBQU8sU0FBUyxFQUFFLEdBQUcsTUFBTSxpQkFBaUI7QUFBQSxJQUNoRCxDQUFDO0FBRUQsT0FBRywwREFBMEQsTUFBTTtBQUMvRCxZQUFNLGdCQUFnQjtBQUN0QixZQUFNLEtBQUs7QUFDWCxZQUFNLFNBQVM7QUFFZixZQUFNLFlBQVksd0JBQXdCLGVBQWUsSUFBSSxNQUFNO0FBR25FLFlBQU0sbUJBQW1CLE9BQU8sU0FBUyxLQUFLLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDMUQsWUFBTSxlQUFlLGlCQUFpQixRQUFRLGFBQWEsR0FBRyxFQUFFLFFBQVEsUUFBUSxHQUFHO0FBQ25GLGFBQU8sU0FBUyxFQUFFLEdBQUcsUUFBUSxZQUFZO0FBQUEsSUFDN0MsQ0FBQztBQUFBLEVBSUwsQ0FBQzs7O0FDN0VEO0FBS0EsTUFBSUMsV0FBUyxhQUFLO0FBQ2xCLGVBQUssSUFBSSxPQUFPO0FBRWhCLE1BQU1DLFdBQVMsVUFBVTtBQUd6QixXQUFTLFdBQVcsV0FBWTtBQUU1QixRQUFJO0FBQ0osUUFBSUMsVUFBUTtBQUFBO0FBQUE7QUFJWixXQUFPLFNBQVUsTUFBTTtBQUNuQixnQkFBVSxFQUFFLEtBQUssTUFBTTtBQUNuQix5RUFBeUQsS0FBSyxDQUFDLE1BQU07QUFDakUsaUJBQU8sRUFBRSxTQUFTO0FBRWxCLGNBQUcsQ0FBQ0QsU0FBTyxnQkFBZ0I7QUFDdkIsWUFBQUEsU0FBTyxpQkFBaUI7QUFBQSxVQUM1QjtBQUVBLGVBQUs7QUFBQSxRQUNULENBQUMsRUFBRSxNQUFNLE9BQUssS0FBSyxDQUFDLENBQUM7QUFBQSxNQUV6QixDQUFDO0FBQUEsSUFJTCxDQUFDO0FBRUQsZUFBVyxNQUFNO0FBQ2IsVUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLFlBQU0sWUFBWUM7QUFBQSxJQUN0QixDQUFDO0FBRUQsY0FBVSxNQUFNO0FBQ1osVUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLFlBQU0sWUFBWTtBQUFBLElBQ3RCLENBQUM7QUFHRCxPQUFHLGNBQWMsU0FBVSxNQUFNO0FBRTdCLFVBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxZQUFNLGNBQWMsU0FBUyxjQUFjLGlCQUFpQjtBQUU1RCxpQkFBVyxNQUFNO0FBQ2IsWUFBSTtBQUVBLFVBQUFGLFNBQU8sU0FBUyxlQUFlLE9BQU8sQ0FBQyxFQUFFLFFBQVE7QUFBQSxZQUM3QztBQUFBLFVBQW1MO0FBQUEsUUFDM0wsU0FBUyxHQUFHO0FBQ1IsaUJBQU8sS0FBSyxDQUFDO0FBQUEsUUFDakI7QUFFQSxhQUFLO0FBQUEsTUFDVCxHQUFHLENBQUM7QUFBQSxJQUVSLENBQUM7QUFBQSxFQUVMLENBQUM7OztBQ2xFRDtBQUdBLFdBQVMsYUFBYSxXQUFZO0FBRzlCLGFBQVMsWUFBWSxXQUFZO0FBRTdCLFNBQUcsMEJBQTBCLFdBQVk7QUFDckMsZUFBTyxJQUFJLFVBQVU7QUFBQSxVQUVqQixHQUFHO0FBQUEsWUFDQyxHQUFHO0FBQUEsY0FDQyxHQUFHO0FBQUEsWUFDUDtBQUFBLFlBQ0EsR0FBRztBQUFBLFlBQ0gsR0FBRztBQUFBLFVBQ1A7QUFBQSxRQUVKLENBQUMsRUFBRSxPQUFPLDRCQUE0QixDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sY0FBYztBQUFBLE1BQ3ZFLENBQUM7QUFFRCxTQUFHLDBCQUEwQixXQUFZO0FBQ3JDLGVBQU8sSUFBSSxVQUFVO0FBQUEsVUFFakIsR0FBRztBQUFBLFlBQ0MsR0FBRztBQUFBLGNBQ0MsR0FBRztBQUFBLFlBQ1A7QUFBQSxZQUNBLEdBQUc7QUFBQSxVQUNQO0FBQUEsUUFFSixDQUFDLEVBQUUsT0FBTyw0QkFBNEIsQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLGNBQWM7QUFBQSxNQUN2RSxDQUFDO0FBQUEsSUFHTCxDQUFDO0FBRUQsYUFBUyxnQkFBZ0IsV0FBWTtBQUdqQztBQUFBLFFBQ0ksQ0FBQyxPQUFPLEtBQUssUUFBVyxNQUFNO0FBQUEsUUFDOUIsQ0FBQyxPQUFPLEtBQUssS0FBSyxNQUFNO0FBQUEsUUFDeEIsQ0FBQyxXQUFXLFNBQVMsS0FBSyxNQUFNO0FBQUEsTUFFcEMsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJRyxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFDbkIsWUFBSUMsS0FBSSxLQUFLLE1BQU07QUFFbkIsV0FBRyxZQUFZRCxLQUFJLGtCQUFrQixJQUFJLFVBQVUsSUFBSSxxQkFBcUIsR0FBRyxXQUFZO0FBRXZGO0FBQUEsWUFDSSxJQUFJLFVBQVU7QUFBQSxjQUNWLEdBQUc7QUFBQSxZQUNQLENBQUMsRUFBRSxVQUFVLEdBQUcsQ0FBQyxFQUFFLE9BQU9BLEVBQUM7QUFBQSxVQUMvQixFQUFFLEdBQUcsTUFBTUMsRUFBQztBQUFBLFFBQ2hCLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUdMLENBQUM7QUFFRCxhQUFTLGNBQWMsV0FBWTtBQUUvQjtBQUFBLFFBQ0ksQ0FBQyxpQkFBaUIsdUNBQW1EO0FBQUEsUUFDckUsQ0FBQyxzQkFBc0IsbUJBQW1CO0FBQUEsUUFDMUMsQ0FBQyxjQUFjLFNBQVM7QUFBQSxRQUN4QixDQUFDLGFBQWEsUUFBUTtBQUFBLFFBQ3RCLENBQUMsYUFBYSxRQUFRO0FBQUEsUUFDdEIsQ0FBQyxZQUFZLE9BQU87QUFBQSxRQUNwQixDQUFDLG9CQUFvQixZQUFZO0FBQUEsUUFDakMsQ0FBQyxxQkFBcUIsYUFBYTtBQUFBLFFBQ25DLENBQUMsc0JBQXNCLGNBQWM7QUFBQSxRQUNyQyxDQUFDLHVCQUF1QixlQUFlO0FBQUEsUUFDdkMsQ0FBQyxxQkFBcUIsZUFBZTtBQUFBLFFBQ3JDLENBQUMscURBQXFELFdBQVc7QUFBQSxNQUVyRSxFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFlBQUlELEtBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFFbkIsV0FBRyxZQUFZQSxLQUFJLG9CQUFvQixHQUFHLFdBQVk7QUFFbEQsY0FBSSxNQUFNO0FBQUEsWUFDTixHQUFHO0FBQUEsY0FDQyxHQUFHO0FBQUEsZ0JBQ0MsR0FBRztBQUFBLGNBQ1A7QUFBQSxjQUNBLEdBQUc7QUFBQSxjQUNILEdBQUc7QUFBQSxZQUNQO0FBQUEsVUFDSjtBQUdBLGlCQUFPLElBQUksVUFBVSxHQUFHLEVBQUUsT0FBT0EsRUFBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFBQSxRQUNuRCxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBRUQsYUFBUyxvQkFBb0IsV0FBWTtBQUVyQyxVQUFJLE9BQU87QUFDWCxVQUFJLFdBQVc7QUFFZixTQUFHLFlBQVksT0FBTyxhQUFhLFVBQVUsV0FBWTtBQUVyRCxZQUFJLE1BQU07QUFBQSxVQUNOLFFBQVE7QUFBQSxVQUNSLFFBQVE7QUFBQSxRQUNaO0FBRUEsZUFBTyxJQUFJLFVBQVUsR0FBRyxFQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLFFBQVE7QUFBQSxNQUU3RCxDQUFDO0FBQUEsSUFHTCxDQUFDO0FBRUQsYUFBUyx1QkFBdUIsV0FBWTtBQUV4QyxTQUFHLDhDQUE4QyxXQUFZO0FBQ3pELGVBQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsV0FBVyxTQUFTO0FBQUEsTUFFakYsQ0FBQztBQUFBLElBR0wsQ0FBQztBQUdELGFBQVMsa0JBQWtCLFdBQVk7QUFFbkMsU0FBRyxnQkFBZ0IsV0FBWTtBQUMzQixjQUFNLFlBQVksSUFBSSxVQUFVO0FBQUEsVUFDNUIsR0FBRztBQUFBLFFBQ1AsR0FBRztBQUFBLFVBQ0MsV0FBVztBQUFBLFlBQ1AsSUFBSSxDQUFDLFVBQVU7QUFDWCxxQkFBTyxNQUFNLFFBQVE7QUFBQSxZQUN6QjtBQUFBLFVBQ0o7QUFBQSxRQUNKLENBQUM7QUFFRCxlQUFPLFVBQVUsT0FBTyxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsTUFBTSxLQUFLO0FBQUEsTUFFN0QsQ0FBQztBQUFBLElBR0wsQ0FBQztBQUVELGFBQVMsbUNBQW1DLFdBQVk7QUFFcEQsVUFBSSxPQUFPO0FBQ1gsVUFBSSxXQUFXO0FBRWYsU0FBRyxZQUFZLE9BQU8sYUFBYSxVQUFVLFdBQVk7QUFFckQsWUFBSSxNQUFNO0FBQUEsVUFDTixRQUFRO0FBQUEsUUFDWjtBQUVBLGVBQU8sSUFBSSxVQUFVLEdBQUcsRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxRQUFRO0FBQUEsTUFFN0QsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMsY0FBYyxXQUFZO0FBRS9CO0FBQUEsUUFDSSxDQUFDLFlBQVksU0FBUztBQUFBLFFBQ3RCLENBQUMsK0JBQStCLFNBQVM7QUFBQSxRQUN6QyxDQUFDLFlBQVksU0FBUztBQUFBO0FBQUEsUUFDdEIsQ0FBQyxzQkFBc0IsU0FBUztBQUFBO0FBQUEsUUFDaEMsQ0FBQyxXQUFXLEtBQUs7QUFBQSxNQUVyQixFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFlBQUlBLEtBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFFbkIsV0FBRyxZQUFZQSxLQUFJLG1CQUFtQixPQUFPLEdBQUcsV0FBWTtBQUV4RDtBQUFBLFlBQU8sTUFBTTtBQUNMLGtCQUFJLFVBQVU7QUFBQSxnQkFDVixHQUFHO0FBQUEsa0JBQ0MsR0FBRztBQUFBLG9CQUNDLEdBQUc7QUFBQSxvQkFDSCxHQUFHO0FBQUEsa0JBQ1A7QUFBQSxnQkFDSjtBQUFBLGNBQ0osQ0FBQyxFQUFFLE9BQU9BLEVBQUM7QUFBQSxZQUNmO0FBQUEsVUFDSixFQUFFLEdBQUcsTUFBTSxDQUFDO0FBQUEsUUFDaEIsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUtELGFBQVMsYUFBYSxNQUFNO0FBQ3hCLFNBQUcsbURBQW1ELE1BQU07QUFDeEQsY0FBTSxZQUFZLElBQUksVUFBVSxFQUFDLE1BQU0sUUFBUSxLQUFLLEdBQUUsQ0FBQztBQUN2RCxjQUFNLFNBQVMsVUFBVSxPQUFPLDBEQUEwRDtBQUUxRixlQUFPLE1BQU0sRUFBRSxHQUFHLE1BQU0sd0NBQXdDO0FBQUEsTUFDcEUsQ0FBQztBQUVELFNBQUcsOENBQThDLE1BQU07QUFDbkQsY0FBTSxPQUFPO0FBQ2IsY0FBTSxNQUFNLEVBQUMsUUFBUSxLQUFLLFFBQVEsSUFBRztBQUNyQyxjQUFNLFlBQVksSUFBSSxVQUFVLEdBQUc7QUFFbkMsZUFBTyxVQUFVLE9BQU8sSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLEdBQUc7QUFBQSxNQUMvQyxDQUFDO0FBRUQsU0FBRyw4Q0FBOEMsTUFBTTtBQUNuRCxjQUFNLFlBQVksSUFBSSxVQUFVLEVBQUMsTUFBTSxRQUFRLEtBQUssR0FBRSxDQUFDO0FBQ3ZELGtCQUFVLFVBQVUsS0FBSyxHQUFHO0FBQzVCLGNBQU0sU0FBUyxVQUFVLE9BQU8sd0RBQXdEO0FBRXhGLGVBQU8sTUFBTSxFQUFFLEdBQUcsTUFBTSx3Q0FBd0M7QUFBQSxNQUNwRSxDQUFDO0FBRUQsU0FBRyx5Q0FBeUMsTUFBTTtBQUM5QyxjQUFNLFlBQVksSUFBSSxVQUFVLEVBQUMsR0FBRyxJQUFHLEdBQUc7QUFBQSxVQUN0QyxXQUFXO0FBQUEsWUFDUCxPQUFPLENBQUMsVUFBVTtBQUNkLHFCQUFPLE1BQU0sUUFBUTtBQUFBLFlBQ3pCO0FBQUEsVUFDSjtBQUFBLFFBQ0osQ0FBQztBQUVELGVBQU8sVUFBVSxPQUFPLG1CQUFtQixDQUFDLEVBQUUsR0FBRyxNQUFNLEtBQUs7QUFBQSxNQUNoRSxDQUFDO0FBRUQsU0FBRywwQ0FBMEMsTUFBTTtBQUMvQyxjQUFNLE1BQU07QUFBQSxVQUNSLEdBQUc7QUFBQSxZQUNDLEdBQUc7QUFBQSxjQUNDLEdBQUc7QUFBQSxZQUNQO0FBQUEsWUFDQSxHQUFHO0FBQUEsVUFDUDtBQUFBLFFBQ0o7QUFDQSxjQUFNLFlBQVksSUFBSSxVQUFVLEdBQUc7QUFDbkMsY0FBTSxTQUFTLFVBQVUsT0FBTyw0QkFBNEI7QUFFNUQsZUFBTyxNQUFNLEVBQUUsR0FBRyxNQUFNLGNBQWM7QUFBQSxNQUMxQyxDQUFDO0FBRUQsU0FBRyx5Q0FBeUMsTUFBTTtBQUM5QyxjQUFNLFlBQVksSUFBSSxVQUFVLEVBQUMsTUFBTSxPQUFNLENBQUM7QUFDOUMsY0FBTSxhQUFhO0FBQ25CLGVBQU8sTUFBTSxVQUFVLE9BQU8sVUFBVSxDQUFDLEVBQUUsR0FBRyxNQUFNLG9DQUFvQztBQUFBLE1BQzVGLENBQUM7QUFFRCxTQUFHLHlDQUF5QyxNQUFNO0FBQzlDLGNBQU0sV0FBVztBQUFBLFVBQ2IsT0FBTztBQUFBLFFBQ1g7QUFFQSxjQUFNLFlBQVksSUFBSSxVQUFVLFFBQVE7QUFFeEMsY0FBTSxPQUFPO0FBQ2IsWUFBSSxnQkFBZ0I7QUFHcEIsaUJBQVMsSUFBSSxHQUFHLElBQUksSUFBSSxLQUFLO0FBQ3pCLDBCQUFnQixPQUFPLGdCQUFnQjtBQUFBLFFBQzNDO0FBRUEsZUFBTyxNQUFNLFVBQVUsT0FBTyxhQUFhLENBQUMsRUFBRSxHQUFHLE1BQU0sa0JBQWtCO0FBQUEsTUFDN0UsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUFBLEVBR0wsQ0FBQzs7O0FDcE9ELFdBQVMsa0NBQ1IsWUFDQSxXQUNBRSxXQUFVLENBQUMsR0FDVjtBQUNELFVBQU07QUFBQSxNQUNMLFlBQVk7QUFBQSxNQUNaLFFBQVE7QUFBQSxNQUNSLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxJQUNSLElBQUlBO0FBQ0osVUFBTSxTQUFTLFdBQVcsTUFBTSxHQUFHO0FBQ25DLFFBQUksYUFBYTtBQUNqQixhQUFTLElBQUksR0FBRyxJQUFJLE9BQU8sUUFBUSxLQUFLO0FBQ3ZDLFlBQU0sUUFBUSxPQUFPLENBQUMsRUFBRSxLQUFLO0FBQzdCLFVBQUksVUFBVSxJQUFJO0FBQ2pCLGNBQU0sSUFBSSxNQUFNLGtCQUFrQixLQUFLLEdBQUc7QUFBQSxNQUMzQyxXQUFXLE1BQU0sU0FBUyxHQUFHLEdBQUc7QUFDL0IsY0FBTSxDQUFDQyxRQUFPQyxJQUFHLElBQUksTUFDbkIsTUFBTSxHQUFHLEVBQ1QsSUFBSSxDQUFDLE1BQU8sTUFBTSxLQUFLLE9BQU8sV0FBVyxDQUFDLENBQUU7QUFDOUMsWUFBS0QsV0FBVSxRQUFRLE1BQU1BLE1BQUssS0FBT0MsU0FBUSxRQUFRLE1BQU1BLElBQUcsR0FBSTtBQUNyRSxnQkFBTSxJQUFJLE1BQU0sMkJBQTJCLEtBQUssR0FBRztBQUFBLFFBQ3BEO0FBQ0EsWUFBSUQsV0FBVSxRQUFRQyxTQUFRLFFBQVFELFNBQVFDLE1BQUs7QUFDbEQsZ0JBQU0sSUFBSSxNQUFNLGtCQUFrQixLQUFLLEdBQUc7QUFBQSxRQUMzQztBQUNBLGNBQU0sWUFDTEQsV0FBVSxPQUNQLEdBQUcsU0FBUyxHQUFHLFlBQVksbUJBQW1CLElBQUksSUFBSSxJQUFJLEdBQUdBLE1BQUssS0FDbEU7QUFDSixjQUFNLFVBQ0xDLFNBQVEsT0FDTCxHQUFHLFNBQVMsR0FBRyxZQUFZLG1CQUFtQixJQUFJLElBQUksSUFBSSxHQUFHQSxJQUFHLEtBQ2hFO0FBQ0osY0FBTSxZQUFZLEdBQUcsU0FBUyxHQUM3QixhQUFhLFVBQVUsSUFBSSxLQUFLLE1BQU0sRUFDdkMsR0FBRyxPQUFPO0FBQ1Ysc0JBQWMsT0FBTyxTQUFTLElBQUksSUFBSSxTQUFTLE1BQU07QUFBQSxNQUN0RCxPQUFPO0FBQ04sY0FBTSxRQUFRLFdBQVcsS0FBSztBQUM5QixZQUFJLE1BQU0sS0FBSyxHQUFHO0FBQ2pCLGdCQUFNLElBQUksTUFBTSxrQkFBa0IsS0FBSyxHQUFHO0FBQUEsUUFDM0M7QUFDQSxjQUFNLFlBQVksR0FBRyxTQUFTLEdBQzdCLFlBQVksbUJBQW1CLElBQUksSUFBSSxJQUN4QyxHQUFHLEtBQUs7QUFDUixzQkFBYyxPQUFPLFNBQVMsSUFBSSxJQUFJLFNBQVMsTUFBTTtBQUFBLE1BQ3REO0FBQ0EsVUFBSSxJQUFJLE9BQU8sU0FBUyxHQUFHO0FBQzFCLHNCQUFjLElBQUksSUFBSTtBQUFBLE1BQ3ZCO0FBQUEsSUFDRDtBQUNBLFdBQU87QUFBQSxFQUNSOzs7QUMvR0EsV0FBUyxxQ0FBcUMsTUFBTTtBQUNoRCxPQUFHLG1FQUFtRSxNQUFNO0FBQ3hFLFlBQU0sYUFBYTtBQUNuQixZQUFNLFlBQVk7QUFDbEIsWUFBTSxTQUFTLGtDQUFrQyxZQUFZLFNBQVM7QUFDdEUsYUFBTyxNQUFNLEVBQUUsR0FBRyxNQUFNLDRCQUE0QjtBQUFBLElBQ3hELENBQUM7QUFFRCxPQUFHLDREQUE0RCxNQUFNO0FBQ2pFLFlBQU0sYUFBYTtBQUNuQixZQUFNLFlBQVk7QUFDbEIsWUFBTSxTQUFTLGtDQUFrQyxZQUFZLFNBQVM7QUFDdEUsYUFBTyxNQUFNLEVBQUUsR0FBRyxNQUFNLGtDQUFrQztBQUFBLElBQzlELENBQUM7QUFFRCxPQUFHLG9GQUFvRixNQUFNO0FBQ3pGLFlBQU0sYUFBYTtBQUNuQixZQUFNLFlBQVk7QUFDbEIsWUFBTSxTQUFTLGtDQUFrQyxZQUFZLFNBQVM7QUFDdEUsYUFBTyxNQUFNLEVBQUUsR0FBRyxNQUFNLDRDQUE0QztBQUFBLElBQ3hFLENBQUM7QUFFRCxPQUFHLDJDQUEyQyxNQUFNO0FBQ2hELFlBQU0sYUFBYTtBQUNuQixZQUFNLFlBQVk7QUFDbEIsYUFBTyxNQUFNLGtDQUFrQyxZQUFZLFNBQVMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxxQkFBcUI7QUFBQSxJQUN6RyxDQUFDO0FBR0QsT0FBRywyQ0FBMkMsTUFBTTtBQUNoRCxZQUFNLGFBQWE7QUFDbkIsWUFBTSxZQUFZO0FBQ2xCLGFBQU8sTUFBTSxrQ0FBa0MsWUFBWSxTQUFTLENBQUMsRUFBRSxHQUFHLE1BQU0sZUFBZTtBQUFBLElBQ25HLENBQUM7QUFFRCxPQUFHLHVFQUF1RSxNQUFNO0FBQzVFLFlBQU0sYUFBYTtBQUNuQixZQUFNLFlBQVk7QUFDbEIsWUFBTUMsV0FBVTtBQUFBLFFBQ1osT0FBTztBQUFBLFFBQ1AsTUFBTTtBQUFBLFFBQ04sTUFBTTtBQUFBLFFBQ04sTUFBTTtBQUFBLFFBQ04sTUFBTTtBQUFBLE1BQ1Y7QUFDQSxZQUFNLFNBQVMsa0NBQWtDLFlBQVksV0FBV0EsUUFBTztBQUMvRSxhQUFPLE1BQU0sRUFBRSxHQUFHLE1BQU0sNEJBQTRCO0FBQUEsSUFDeEQsQ0FBQztBQUVELE9BQUcsdUVBQXVFLE1BQU07QUFDNUUsWUFBTSxZQUFZO0FBQUEsUUFDZDtBQUFBLFVBQ0ksWUFBWTtBQUFBLFVBQ1osV0FBVztBQUFBLFVBQ1gsVUFBVTtBQUFBLFFBQ2Q7QUFBQSxRQUNBO0FBQUEsVUFDSSxZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsVUFDWCxVQUFVO0FBQUEsUUFDZDtBQUFBLFFBQ0E7QUFBQSxVQUNJLFlBQVk7QUFBQSxVQUNaLFdBQVc7QUFBQSxVQUNYLFVBQVU7QUFBQSxRQUNkO0FBQUEsUUFDQTtBQUFBLFVBQ0ksWUFBWTtBQUFBLFVBQ1osV0FBVztBQUFBLFVBQ1gsVUFBVTtBQUFBLFFBQ2Q7QUFBQSxRQUNBO0FBQUEsVUFDSSxZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsVUFDWCxVQUFVO0FBQUEsUUFDZDtBQUFBLE1BQ0o7QUFFQSxnQkFBVSxRQUFRLENBQUMsRUFBQyxZQUFZLFdBQVcsU0FBUSxNQUFNO0FBQ3JELGNBQU0sU0FBUyxrQ0FBa0MsWUFBWSxXQUFXLEVBQUMsV0FBVyxLQUFJLENBQUM7QUFDekYsZUFBTyxNQUFNLEVBQUUsR0FBRyxNQUFNLFFBQVE7QUFBQSxNQUNwQyxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsT0FBRyw2RkFBNkYsTUFBTTtBQUNsRyxZQUFNLFlBQVk7QUFBQSxRQUNkO0FBQUEsVUFDSSxZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsVUFDWCxVQUFVO0FBQUEsUUFDZDtBQUFBLFFBQ0E7QUFBQSxVQUNJLFlBQVk7QUFBQSxVQUNaLFdBQVc7QUFBQSxVQUNYLFVBQVU7QUFBQSxRQUNkO0FBQUEsTUFDSjtBQUVBLGdCQUFVLFFBQVEsQ0FBQyxFQUFDLFlBQVksV0FBVyxTQUFRLE1BQU07QUFDckQsY0FBTSxTQUFTLGtDQUFrQyxZQUFZLFdBQVcsRUFBQyxXQUFXLEtBQUksQ0FBQztBQUN6RixlQUFPLE1BQU0sRUFBRSxHQUFHLE1BQU0sUUFBUTtBQUFBLE1BQ3BDLENBQUM7QUFBQSxJQUNMLENBQUM7QUFBQSxFQUdMLENBQUM7OztBQy9ERCxXQUFTLDJCQUEyQixZQUFZO0FBQy9DLFVBQU0sWUFBWSxDQUFDO0FBSW5CLFVBQU0sb0JBQW9CLFdBQVcsS0FBSztBQUMxQyxVQUFNLG9CQUNMLGtCQUFrQixPQUFPLENBQUMsTUFBTSxNQUM3QixrQkFBa0IsTUFBTSxDQUFDLElBQ3pCO0FBR0osUUFBSSxrQkFBa0I7QUFFdEIsYUFBUyxZQUFZLEtBQUssT0FBTztBQUNoQyxVQUFJLG1CQUFtQixLQUFLO0FBQzNCLFlBQUksQ0FBQyxVQUFVLGVBQWUsR0FBRztBQUNoQyxvQkFBVSxlQUFlLElBQUksQ0FBQztBQUFBLFFBQy9CO0FBRUEsa0JBQVUsZUFBZSxFQUFFLEdBQUcsSUFBSTtBQUFBLE1BQ25DO0FBQUEsSUFDRDtBQUVBLFFBQUksYUFBYTtBQUNqQixRQUFJLGVBQWU7QUFDbkIsUUFBSSxRQUFRO0FBQ1osUUFBSSxVQUFVO0FBQ2QsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSSxhQUFhO0FBQ2pCLFFBQUksVUFBVTtBQUNkLFFBQUksdUJBQXVCO0FBRTNCLGFBQVMsSUFBSSxHQUFHLElBQUksa0JBQWtCLFFBQVEsS0FBSztBQUNsRCxZQUFNLElBQUksa0JBQWtCLENBQUM7QUFDN0IsWUFBTSxXQUFXLG9CQUFvQixJQUFJLENBQUM7QUFFMUMsVUFBSSxNQUFNLFFBQVEsQ0FBQyxTQUFTO0FBQzNCLGtCQUFVO0FBQ1Y7QUFBQSxNQUNEO0FBRUEsVUFBSSxTQUFTO0FBQ1osWUFBSSxZQUFZO0FBQ2YsNkJBQW1CO0FBQUEsUUFDcEIsV0FBVyxPQUFPO0FBQ2pCLHdCQUFjO0FBQUEsUUFDZixXQUFXLFNBQVM7QUFDbkIsMEJBQWdCO0FBQUEsUUFDakI7QUFDQSxrQkFBVTtBQUNWO0FBQUEsTUFDRDtBQUVBLFVBQUksaUJBQWlCLHlCQUF5QixHQUFHO0FBQ2hELFlBQUksWUFBWTtBQUNmLDZCQUFtQjtBQUFBLFFBQ3BCLFdBQVcsT0FBTztBQUNqQix3QkFBYztBQUFBLFFBQ2YsV0FBVyxTQUFTO0FBQ25CLDBCQUFnQjtBQUFBLFFBQ2pCO0FBRUE7QUFBQSxNQUNEO0FBRUEsVUFBSSxNQUFNLE9BQU8sWUFBWTtBQUM1QixxQkFBYTtBQUNiLDBCQUFrQjtBQUNsQjtBQUFBLE1BQ0Q7QUFFQSxVQUFJLGVBQWUsUUFBUSxNQUFNLEtBQUs7QUFDckMsMkJBQW1CO0FBQ25CO0FBQUEsTUFDRDtBQUVBLFVBQUksTUFBTSxPQUFPLFlBQVk7QUFDNUIscUJBQWE7QUFDYixnQkFBUTtBQUVSLHFCQUFhO0FBQ2I7QUFBQSxNQUNEO0FBRUEsVUFBSSxVQUFVLFFBQVEsTUFBTSxLQUFLO0FBQ2hDLHNCQUFjO0FBQ2Q7QUFBQSxNQUNEO0FBRUEsVUFBSSxNQUFNLE9BQU8sT0FBTztBQUN2QixnQkFBUTtBQUNSLGtCQUFVO0FBRVYsWUFBSSxhQUFhLE9BQU8sYUFBYSxLQUFLO0FBQ3pDLDBCQUFnQjtBQUNoQixpQ0FBdUI7QUFDdkI7QUFDQTtBQUFBLFFBQ0Q7QUFFQSx1QkFBZTtBQUNmO0FBQUEsTUFDRDtBQUVBLFVBQUksWUFBWSxNQUFNO0FBQ3JCLFlBQUksZUFBZTtBQUNsQixjQUFJLE1BQU0sc0JBQXNCO0FBQy9CLDRCQUFnQjtBQUNoQjtBQUFBLFVBQ0Q7QUFFQSwwQkFBZ0I7QUFDaEI7QUFBQSxRQUNEO0FBRUEsWUFBSSxNQUFNLEtBQUs7QUFDZCxvQkFBVTtBQUNWLGtCQUFRO0FBQ1IsZ0JBQU0sc0JBQXNCLG1CQUFtQixZQUFZO0FBQzNELHNCQUFZLFlBQVksbUJBQW1CO0FBQzNDLHVCQUFhO0FBQ2IseUJBQWU7QUFDZjtBQUFBLFFBQ0Q7QUFFQSxZQUFJLE1BQU0sS0FBSztBQUNkLG9CQUFVO0FBRVYsdUJBQWE7QUFFYixnQkFBTSxzQkFBc0IsbUJBQW1CLFlBQVk7QUFDM0Qsc0JBQVksWUFBWSxtQkFBbUI7QUFDM0MsdUJBQWE7QUFDYix5QkFBZTtBQUNmLDRCQUFrQjtBQUNsQjtBQUFBLFFBQ0Q7QUFFQSx3QkFBZ0I7QUFFaEI7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBLFFBQUksWUFBWTtBQUNmLGFBQU87QUFBQSxJQUNSO0FBRUEsV0FBTyxDQUFDO0FBQUEsRUFDVDtBQVVBLFdBQVMsNEJBQTRCLFFBQVEsZ0JBQWdCLE1BQU07QUFDbEUsUUFBSSxDQUFDLFFBQVE7QUFDWixhQUFPLGdCQUFnQixNQUFNO0FBQUEsSUFDOUI7QUFFQSxRQUFJLGFBQWE7QUFFakIsYUFBUyxlQUFlLEtBQUssT0FBTztBQUNuQyxhQUFPLG1CQUFtQixHQUFHLElBQUksTUFBTSxtQkFBbUIsS0FBSztBQUFBLElBQ2hFO0FBRUEsZUFBVyxZQUFZLFFBQVE7QUFDOUIsVUFBSSxPQUFPLGVBQWUsUUFBUSxHQUFHO0FBQ3BDLGNBQU0sZ0JBQWdCLE9BQU8sUUFBUTtBQUNyQyxZQUFJLGlCQUFpQjtBQUNyQixZQUFJLGlCQUFpQjtBQUVyQixtQkFBVyxPQUFPLGVBQWU7QUFDaEMsY0FBSSxjQUFjLGVBQWUsR0FBRyxHQUFHO0FBQ3RDLGtCQUFNLFFBQVEsY0FBYyxHQUFHO0FBQy9CLDhCQUFrQixlQUFlLFdBQVcsSUFBSSxLQUFLO0FBQ3JELDhCQUFrQixlQUFlLEtBQUssS0FBSztBQUFBLFVBQzVDO0FBQUEsUUFDRDtBQUVBLFlBQUksZUFBZSxTQUFTLEdBQUc7QUFDOUIsNEJBQWtCLE1BQU0saUJBQWlCO0FBQ3pDLHdCQUFjLFdBQVcsV0FBVyxJQUFJLEtBQUs7QUFDN0Msd0JBQWM7QUFBQSxRQUNmO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxXQUFPLGdCQUFnQixNQUFNLGFBQWE7QUFBQSxFQUMzQzs7O0FDeE9BLFdBQVMsOEJBQThCLE1BQU07QUFDekMsT0FBRyxxREFBcUQsTUFBTTtBQUMxRCxZQUFNLFFBQVE7QUFDZCxZQUFNLGlCQUFpQixDQUFDO0FBQ3hCLGFBQU8sMkJBQTJCLEtBQUssQ0FBQyxFQUFFLEdBQUcsS0FBSyxNQUFNLGNBQWM7QUFBQSxJQUMxRSxDQUFDO0FBRUQsT0FBRywwREFBMEQsTUFBTTtBQUMvRCxZQUFNLFFBQVE7QUFDZCxZQUFNLGlCQUFpQjtBQUFBLFFBQ25CLFdBQVc7QUFBQSxVQUNQLE1BQU07QUFBQSxRQUNWO0FBQUEsTUFDSjtBQUNBLGFBQU8sMkJBQTJCLEtBQUssQ0FBQyxFQUFFLEdBQUcsS0FBSyxNQUFNLGNBQWM7QUFBQSxJQUMxRSxDQUFDO0FBRUQsT0FBRyxpRUFBaUUsTUFBTTtBQUN0RSxZQUFNLFFBQVE7QUFDZCxZQUFNLGlCQUFpQjtBQUFBLFFBQ25CLFdBQVc7QUFBQSxVQUNQLE1BQU07QUFBQSxVQUNOLE1BQU07QUFBQSxRQUNWO0FBQUEsUUFDQSxXQUFXO0FBQUEsVUFDUCxNQUFNO0FBQUEsVUFDTixNQUFNO0FBQUEsUUFDVjtBQUFBLE1BQ0o7QUFDQSxhQUFPLDJCQUEyQixLQUFLLENBQUMsRUFBRSxHQUFHLEtBQUssTUFBTSxjQUFjO0FBQUEsSUFDMUUsQ0FBQztBQUVELE9BQUcsb0NBQW9DLE1BQU07QUFDekMsWUFBTSxRQUFRO0FBQ2QsWUFBTSxpQkFBaUI7QUFBQSxRQUNuQixXQUFXO0FBQUEsVUFDUCxNQUFNO0FBQUEsUUFDVjtBQUFBLE1BQ0o7QUFDQSxZQUFNLFNBQVMsMkJBQTJCLEtBQUs7QUFDL0MsYUFBTyxPQUFPLFVBQVUsSUFBSSxFQUFFLEdBQUcsTUFBTSxlQUFlLFVBQVUsSUFBSTtBQUFBLElBQ3hFLENBQUM7QUFFRCxPQUFHLDhDQUE4QyxNQUFNO0FBQ25ELFlBQU0sUUFBUTtBQUNkLFlBQU0saUJBQWlCO0FBQUEsUUFDbkIsV0FBVztBQUFBLFVBQ1AsTUFBTTtBQUFBLFFBQ1Y7QUFBQSxNQUNKO0FBQ0EsYUFBTywyQkFBMkIsS0FBSyxDQUFDLEVBQUUsR0FBRyxLQUFLLE1BQU0sY0FBYztBQUFBLElBQzFFLENBQUM7QUFFRCxPQUFHLG1EQUFtRCxNQUFNO0FBQ3hELFlBQU0sUUFBUTtBQUNkLFlBQU0saUJBQWlCLENBQUM7QUFDeEIsYUFBTywyQkFBMkIsS0FBSyxDQUFDLEVBQUUsR0FBRyxLQUFLLE1BQU0sY0FBYztBQUFBLElBQzFFLENBQUM7QUFFRCxPQUFHLDJEQUEyRCxNQUFNO0FBQ2hFLFlBQU0sYUFBYTtBQUNuQixZQUFNLFNBQVMsMkJBQTJCLFVBQVU7QUFDcEQsYUFBTyxNQUFNLEVBQUUsR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDO0FBQUEsSUFDbkMsQ0FBQztBQUVELE9BQUcsNkRBQTZELE1BQU07QUFDbEUsWUFBTSxhQUFhO0FBQ25CLFlBQU0sU0FBUywyQkFBMkIsVUFBVTtBQUNwRCxhQUFPLE1BQU0sRUFBRSxHQUFHLEtBQUssTUFBTSxDQUFDLENBQUM7QUFBQSxJQUNuQyxDQUFDO0FBRUQsT0FBRywrRUFBK0UsTUFBTTtBQUNwRixZQUFNLGFBQWE7QUFDbkIsWUFBTSxTQUFTLDJCQUEyQixVQUFVO0FBQ3BELGFBQU8sTUFBTSxFQUFFLEdBQUcsS0FBSyxNQUFNLEVBQUMsVUFBVSxFQUFDLEtBQUssUUFBTyxFQUFDLENBQUM7QUFBQSxJQUMzRCxDQUFDO0FBRUQsT0FBRyw0RUFBNEUsTUFBTTtBQUNqRixZQUFNLGFBQWE7QUFDbkIsWUFBTSxTQUFTLDJCQUEyQixVQUFVO0FBQ3BELGFBQU8sTUFBTSxFQUFFLEdBQUcsS0FBSyxNQUFNLEVBQUMsV0FBVyxFQUFDLE1BQU0sU0FBUSxHQUFHLFdBQVcsRUFBQyxNQUFNLFNBQVEsRUFBQyxDQUFDO0FBQUEsSUFDM0YsQ0FBQztBQUVELE9BQUcsOEJBQThCLE1BQU07QUFDbkMsWUFBTSxhQUFhO0FBQ25CLFlBQU0sU0FBUywyQkFBMkIsVUFBVTtBQUNwRCxhQUFPLE1BQU0sRUFBRSxHQUFHLEtBQUssTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLElBQUksTUFBTSxHQUFFLEVBQUMsQ0FBQztBQUFBLElBQ2pFLENBQUM7QUFFRCxPQUFHLHdDQUF3QyxNQUFNO0FBQzdDLFlBQU0sYUFBYTtBQUNuQixZQUFNLFNBQVMsMkJBQTJCLFVBQVU7QUFDcEQsYUFBTyxNQUFNLEVBQUUsR0FBRyxLQUFLLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxXQUFXLE1BQU0sVUFBUyxFQUFDLENBQUM7QUFBQSxJQUMvRSxDQUFDO0FBRUQsT0FBRyxrREFBa0QsTUFBTTtBQUN2RCxZQUFNLGFBQWE7QUFDbkIsWUFBTSxTQUFTLDJCQUEyQixVQUFVO0FBQ3BELGFBQU8sTUFBTSxFQUFFLEdBQUcsS0FBSyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sV0FBVyxNQUFNLFVBQVMsRUFBQyxDQUFDO0FBQUEsSUFDL0UsQ0FBQztBQUVELE9BQUcseUNBQXlDLE1BQU07QUFDOUMsWUFBTSxhQUFhO0FBQ25CLFlBQU0sU0FBUywyQkFBMkIsVUFBVTtBQUNwRCxhQUFPLE1BQU0sRUFBRSxHQUFHLEtBQUssTUFBTSxFQUFDLFVBQVUsRUFBQyxLQUFLLFFBQU8sRUFBQyxDQUFDO0FBQUEsSUFDM0QsQ0FBQztBQUVELE9BQUcsa0RBQWtELE1BQU07QUFDdkQsWUFBTSxhQUFhO0FBQ25CLFlBQU0sU0FBUywyQkFBMkIsVUFBVTtBQUNwRCxhQUFPLE1BQU0sRUFBRSxHQUFHLEtBQUssTUFBTSxFQUFDLFVBQVUsRUFBQyxLQUFLLFFBQU8sRUFBQyxDQUFDO0FBQUEsSUFDM0QsQ0FBQztBQUVELE9BQUcsc0VBQXNFLE1BQU07QUFDM0UsWUFBTSxhQUFhO0FBQ25CLFlBQU0sU0FBUywyQkFBMkIsVUFBVTtBQUNwRCxhQUFPLE1BQU0sRUFBRSxHQUFHLEtBQUssTUFBTSxDQUFDLENBQUM7QUFBQSxJQUNuQyxDQUFDO0FBRUQsT0FBRywwREFBMEQsTUFBTTtBQUMvRCxZQUFNLGFBQWE7QUFDbkIsWUFBTSxTQUFTLDJCQUEyQixVQUFVO0FBQ3BELGFBQU8sTUFBTSxFQUFFLEdBQUcsS0FBSyxNQUFNLENBQUMsQ0FBQztBQUFBLElBQ25DLENBQUM7QUFFRCxPQUFHLHFEQUFxRCxNQUFNO0FBQzFELFlBQU0sYUFBYTtBQUNuQixZQUFNLFNBQVMsMkJBQTJCLFVBQVU7QUFDcEQsYUFBTyxNQUFNLEVBQUUsR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDO0FBQUEsSUFDbkMsQ0FBQztBQUVELE9BQUcsc0RBQXNELE1BQU07QUFDM0QsWUFBTSxhQUFhO0FBQ25CLFlBQU0sU0FBUywyQkFBMkIsVUFBVTtBQUNwRCxhQUFPLE1BQU0sRUFBRSxHQUFHLEtBQUssTUFBTTtBQUFBLFFBQ3pCLFVBQVU7QUFBQSxVQUNOLEtBQUs7QUFBQSxRQUNUO0FBQUEsTUFDSixDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsT0FBRyxtRkFBbUYsTUFBTTtBQUN4RixZQUFNLGFBQWE7QUFDbkIsWUFBTSxTQUFTLDJCQUEyQixVQUFVO0FBQ3BELGFBQU8sTUFBTSxFQUFFLEdBQUcsS0FBSyxNQUFNLENBQUMsQ0FBQztBQUFBLElBQ25DLENBQUM7QUFFRCxPQUFHLDJFQUEyRSxNQUFNO0FBQ2hGLFlBQU0sYUFBYTtBQUNuQixZQUFNLFNBQVMsMkJBQTJCLFVBQVU7QUFDcEQsYUFBTyxNQUFNLEVBQUUsR0FBRyxLQUFLLE1BQU07QUFBQSxRQUN6QixVQUFVO0FBQUEsVUFDTixLQUFLO0FBQUEsUUFDVDtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1AsTUFBTTtBQUFBLFFBQ1Y7QUFBQSxNQUNKLENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxhQUFTLCtCQUErQixNQUFNO0FBQzFDLFNBQUcsb0RBQW9ELE1BQU07QUFDekQsY0FBTSxRQUFRO0FBQUEsVUFDVixZQUFZO0FBQUEsWUFDUixTQUFTO0FBQUEsWUFDVCxhQUFhO0FBQUEsVUFDakI7QUFBQSxVQUNBLFVBQVU7QUFBQSxZQUNOLGNBQWM7QUFBQSxVQUNsQjtBQUFBLFFBQ0o7QUFFQSxjQUFNLFNBQVMsNEJBQTRCLEtBQUs7QUFDaEQsZUFBTyxNQUFNLEVBQUUsR0FBRyxLQUFLLE1BQU0sNkRBQTZEO0FBQUEsTUFDOUYsQ0FBQztBQUVELFNBQUcsK0RBQStELE1BQU07QUFDcEUsY0FBTSxRQUFRO0FBQUEsVUFDVixZQUFZO0FBQUEsWUFDUixTQUFTO0FBQUEsWUFDVCxhQUFhO0FBQUEsVUFDakI7QUFBQSxVQUNBLFVBQVU7QUFBQSxZQUNOLGNBQWM7QUFBQSxVQUNsQjtBQUFBLFFBQ0o7QUFFQSxjQUFNLFNBQVMsNEJBQTRCLE9BQU8sSUFBSTtBQUN0RCxlQUFPLE1BQU0sRUFBRSxHQUFHLEtBQUssTUFBTSxnRUFBZ0U7QUFBQSxNQUNqRyxDQUFDO0FBRUQsU0FBRyxxREFBcUQsTUFBTTtBQUMxRCxjQUFNLFFBQVEsQ0FBQztBQUNmLGNBQU0sU0FBUyw0QkFBNEIsT0FBTSxLQUFLO0FBQ3RELGVBQU8sTUFBTSxFQUFFLEdBQUcsS0FBSyxNQUFNLEVBQUU7QUFBQSxNQUNuQyxDQUFDO0FBRUQsU0FBRyxxREFBcUQsTUFBTTtBQUMxRCxjQUFNLFFBQVEsQ0FBQztBQUNmLGNBQU0sU0FBUyw0QkFBNEIsT0FBTSxLQUFLO0FBQ3RELGVBQU8sTUFBTSxFQUFFLEdBQUcsS0FBSyxNQUFNLEVBQUU7QUFBQSxNQUNuQyxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBQUEsRUFHTCxDQUFDOzs7QUNsTkQsV0FBUyxRQUFRLFdBQVk7QUFFekIsUUFBSUMsVUFBUyxNQUFNO0FBQUEsSUFBQztBQUVwQixXQUFPLFNBQVUsTUFBTTtBQUVuQixVQUFJLFdBQVcsQ0FBQztBQUNoQixVQUFJLENBQUMsV0FBVyxRQUFRLEdBQUc7QUFDdkIsaUJBQVMsS0FBSywwRUFBOEIsS0FBSyxPQUFLO0FBQ2xELHFCQUFXLFFBQVEsSUFBSSxJQUFJLEVBQUUsT0FBTztBQUNwQyxpQkFBTztBQUFBLFFBQ1gsQ0FBQyxDQUFDO0FBQUEsTUFDTjtBQUVBLGVBQVMsS0FBSyw4REFBMEMsS0FBSyxPQUFLO0FBQzlELFFBQUFBLFVBQVMsRUFBRTtBQUNYLGVBQU87QUFBQSxNQUNYLENBQUMsQ0FBQztBQUdGLGNBQVEsSUFBSSxRQUFRLEVBQUUsS0FBSyxNQUFNO0FBQzdCLGFBQUs7QUFBQSxNQUNULENBQUM7QUFBQSxJQUVMLENBQUM7QUFFRCxhQUFTLGFBQWEsV0FBWTtBQUU5QixTQUFHLG1DQUFtQyxXQUFZO0FBQzlDLGVBQU8sTUFBTUEsUUFBTyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxLQUFLO0FBQUEsTUFDOUMsQ0FBQztBQUVELFNBQUcsNEJBQTRCLFdBQVk7QUFDdkMsWUFBSSxJQUFJQSxRQUFPO0FBQ2YsZUFBTyxDQUFDLEVBQUUsS0FBSyxHQUFHLEVBQUUsUUFBUTtBQUFBLE1BQ2hDLENBQUM7QUFFRCxTQUFHLDRCQUE0QixXQUFZO0FBQ3ZDLGVBQU8sTUFBTUEsUUFBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxLQUFLO0FBQUEsTUFDN0MsQ0FBQztBQUVELFNBQUcsdUVBQXVFLFdBQVk7QUFDbEYsZUFBTyxNQUFNQSxRQUFPLFlBQVksSUFBb0IsQ0FBQyxFQUFFLEdBQUcsTUFBTSxLQUFLO0FBQUEsTUFDekUsQ0FBQztBQUVELFNBQUcsdUVBQXVFLFdBQVk7QUFFbEY7QUFBQSxVQUNJLENBQUMsR0FBRyxHQUFHO0FBQUEsVUFDUCxDQUFDLEtBQUssR0FBRztBQUFBLFVBQ1QsQ0FBQyxLQUFLLEdBQUk7QUFBQSxRQUNkLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFFdEIsY0FBSUMsS0FBSSxLQUFLLE1BQU07QUFDbkIsY0FBSSxJQUFJLEtBQUssTUFBTTtBQUVuQixjQUFJLElBQUlELFFBQU9DLElBQUcsQ0FBQztBQUVuQixhQUFHLElBQUksa0NBQWtDQSxLQUFJLE1BQU0sR0FBRyxXQUFZO0FBQzlELG1CQUFPLEtBQUtBLEVBQUMsRUFBRSxHQUFHLEdBQUc7QUFDckIsbUJBQU8sS0FBSyxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQUEsVUFDekIsQ0FBQztBQUFBLFFBQ0wsQ0FBQztBQUVEO0FBQUEsVUFDSSxDQUFDLEdBQUcsR0FBRztBQUFBLFVBQ1AsQ0FBQyxLQUFLLEdBQUc7QUFBQSxVQUNULENBQUMsS0FBSyxHQUFJO0FBQUEsUUFDZCxFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLGNBQUlBLEtBQUksS0FBSyxNQUFNO0FBQ25CLGNBQUksSUFBSSxLQUFLLE1BQU07QUFFbkIsY0FBSSxNQUFNO0FBQ1YsZ0JBQU0sU0FBUztBQUVmLG1CQUFTLElBQUksR0FBR0MsT0FBTSxRQUFRLElBQUlBLE1BQUssS0FBSztBQUN4QyxtQkFBT0YsUUFBT0MsSUFBRyxDQUFDO0FBQUEsVUFDdEI7QUFFQSxjQUFJLE1BQU0sTUFBTTtBQUVoQixhQUFHLE1BQU0scUJBQXFCQSxLQUFJLE1BQU0sR0FBRyxXQUFZO0FBQ25ELG1CQUFPLE1BQU1BLEVBQUMsRUFBRSxHQUFHLEdBQUc7QUFDdEIsbUJBQU8sTUFBTSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQUEsVUFDMUIsQ0FBQztBQUFBLFFBR0wsQ0FBQztBQUFBLE1BRUwsQ0FBQztBQUFBLElBR0wsQ0FBQztBQUFBLEVBR0wsQ0FBQzs7O0FDbEdEO0FBR0EsV0FBUyxjQUFjLFdBQVk7QUFDL0I7QUFBQTtBQUFBLE1BRUksQ0FBQyxXQUFXLE9BQU87QUFBQSxNQUNuQixDQUFDLGFBQWEsVUFBVTtBQUFBLE1BQ3hCLENBQUMsZUFBZSxhQUFhO0FBQUEsTUFDN0IsQ0FBQyxXQUFhLE9BQU87QUFBQSxNQUNyQixDQUFDLGNBQWUsT0FBTztBQUFBLElBRTNCLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFFdEIsVUFBSUUsS0FBSSxLQUFLLE1BQU07QUFDbkIsVUFBSSxJQUFJLEtBQUssTUFBTTtBQUVuQixTQUFHLGdCQUFnQixLQUFLLFVBQVVBLEVBQUMsSUFBSSxxQkFBcUIsS0FBSyxVQUFVLENBQUMsR0FBRyxXQUFZO0FBQ3ZGLGVBQU8sV0FBV0EsRUFBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUFBLE1BQ3ZDLENBQUM7QUFBQSxJQUNMLENBQUM7QUFBQSxFQUNMLENBQUM7OztBQ3JCRDtBQUdBLFdBQVMsY0FBYyxXQUFZO0FBRS9CLGFBQVMsZ0JBQWdCLFdBQVk7QUFFakMsU0FBRyw0QkFBNEIsU0FBVSxNQUFNO0FBRTNDLFlBQUksVUFBVTtBQUNkLFlBQUksSUFBSSxDQUFDLG9CQUFJLEtBQUs7QUFFbEIsY0FBTSxlQUFlO0FBQ3JCLGFBQUssUUFBUSxlQUFhLEdBQUc7QUFHN0IsWUFBSSxXQUFXLENBQUMsTUFBTTtBQUNsQjtBQUNBLGlCQUFPO0FBQUEsUUFDWCxHQUFHLENBQUMsTUFBTTtBQUNOO0FBQ0EsaUJBQU87QUFBQSxRQUNYLEdBQUcsU0FBVSxHQUFHO0FBQ1o7QUFDQSxpQkFBTztBQUFBLFFBQ1gsR0FBRyxjQUFhLFNBQVUsR0FBRztBQUN6QjtBQUNBLGlCQUFPO0FBQUEsUUFDWCxDQUFDLEVBQUUsSUFBSSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07QUFFdkIsY0FBSTtBQUNBLG1CQUFPLE9BQU8sRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQzdCLG1CQUFPLE1BQU0sTUFBTSxFQUFFLEdBQUcsR0FBRztBQUUzQixtQkFBTyxDQUFDLG9CQUFJLEtBQUssSUFBSSxJQUFJLGVBQWEsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUFBLFVBQ25ELFNBQVMsR0FBRztBQUNSLG1CQUFPLEtBQUssQ0FBQztBQUFBLFVBQ2pCO0FBRUEsZUFBSztBQUFBLFFBQ1QsQ0FBQztBQUFBLE1BR0wsQ0FBQztBQUVELFNBQUcsMkJBQTJCLFNBQVUsTUFBTTtBQUUxQyxZQUFJLFVBQVU7QUFFZCxZQUFJLFdBQVcsQ0FBQyxVQUFVO0FBQ3RCO0FBQ0EsaUJBQU87QUFBQSxRQUNYLENBQUMsRUFBRSxJQUFJLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtBQUN2QixjQUFJO0FBQ0EsbUJBQU8sTUFBTSxNQUFNLEVBQUUsR0FBRyxHQUFHO0FBQUEsVUFDL0IsU0FBUyxHQUFHO0FBQ1IsbUJBQU8sS0FBSyxDQUFDO0FBQUEsVUFDakI7QUFFQSxlQUFLO0FBQUEsUUFDVCxDQUFDLEVBQUUsTUFBTSxPQUFLLEtBQUssQ0FBQyxDQUFDO0FBQUEsTUFHekIsQ0FBQztBQUVELFNBQUcsMEJBQTBCLFNBQVUsTUFBTTtBQUV6QyxZQUFJLFVBQVU7QUFFZCxZQUFJLFdBQVcsRUFBRSxJQUFJLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtBQUVyQyxjQUFJO0FBQ0EsbUJBQU8sTUFBTSxNQUFNLEVBQUUsR0FBRyxHQUFHO0FBQUEsVUFDL0IsU0FBUyxHQUFHO0FBQ1IsbUJBQU8sS0FBSyxDQUFDO0FBQUEsVUFDakI7QUFFQSxlQUFLO0FBQUEsUUFDVCxDQUFDLEVBQUUsTUFBTSxPQUFLLEtBQUssQ0FBQyxDQUFDO0FBQUEsTUFHekIsQ0FBQztBQUFBLElBR0wsQ0FBQztBQUVELGFBQVMsdUJBQXVCLFdBQVk7QUFFeEMsU0FBRyxxQ0FBcUMsV0FBWTtBQUNoRCxlQUFPLElBQUksV0FBVyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsUUFBUTtBQUFBLE1BQzdDLENBQUM7QUFFRCxTQUFHLHFDQUFxQyxXQUFZO0FBQ2hELGVBQU8sSUFBSSxXQUFXLFdBQVk7QUFBQSxRQUNsQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxRQUFRO0FBQUEsTUFDeEIsQ0FBQztBQUVELFNBQUcsMEJBQTBCLFdBQVk7QUFDckMsZUFBTyxNQUFNLElBQUksV0FBVyxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sU0FBUztBQUFBLE1BQ3pELENBQUM7QUFFRCxTQUFHLDBCQUEwQixXQUFZO0FBQ3JDLGVBQU8sTUFBTSxJQUFJLFdBQVcsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLFNBQVM7QUFBQSxNQUMzRCxDQUFDO0FBQUEsSUFHTCxDQUFDO0FBQUEsRUFFTCxDQUFDOzs7QUM3R0Q7QUFHQSxXQUFTLGtCQUFrQixXQUFZO0FBRW5DLGFBQVMsZ0JBQWdCLFdBQVk7QUFFakMsU0FBRyxjQUFjLFNBQVUsTUFBTTtBQUU3QixjQUFNLE1BQU8sS0FBSyxJQUFJO0FBRXRCLFlBQUksZUFBZSxLQUFLLE1BQU07QUFFMUIsZ0JBQU0sTUFBTyxLQUFLLElBQUk7QUFFdEIsZ0JBQU1DLFFBQU8sTUFBTTtBQUNuQixjQUFJQSxRQUFPLEtBQUs7QUFDWixpQkFBSyxjQUFjQSxLQUFJO0FBQ3ZCO0FBQUEsVUFDSjtBQUNBLGVBQUs7QUFBQSxRQUNULENBQUM7QUFBQSxNQUdMLENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxhQUFTLDBCQUEwQixXQUFZO0FBRTNDLFNBQUcsY0FBYyxTQUFVLE1BQU07QUFFN0IsY0FBTSxNQUFNLEtBQUssSUFBSTtBQUVyQixjQUFNLGlCQUFpQixJQUFJLGVBQWUsS0FBSyxNQUFNO0FBRWpELGdCQUFNLE1BQU0sS0FBSyxJQUFJO0FBRXJCLGdCQUFNQSxRQUFPLE1BQU07QUFFbkIsY0FBSSxNQUFNLEtBQUs7QUFDWCxpQkFBSyxJQUFJLE1BQU0sY0FBYyxDQUFDO0FBQzlCO0FBQUEsVUFDSjtBQUVBLGNBQUlBLFFBQU8sS0FBSztBQUNaLGlCQUFLLElBQUksTUFBTSxjQUFjQSxLQUFJLENBQUM7QUFDbEM7QUFBQSxVQUNKO0FBQ0EsZUFBSztBQUFBLFFBQ1QsQ0FBQztBQVFELG1CQUFXLE1BQU07QUFDYix5QkFBZSxNQUFNO0FBRXJCLHFCQUFXLE1BQU07QUFDYiwyQkFBZSxNQUFNLEdBQUc7QUFBQSxVQUM1QixHQUFHLEVBQUU7QUFBQSxRQUVULEdBQUcsRUFBRTtBQUFBLE1BR1QsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUFBLEVBRUwsQ0FBQzs7O0FDL0REO0FBQ0E7QUE4QkEsTUFBTSxhQUFOLGNBQXlCLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUTdCLFlBQVksVUFBVTtBQUNyQixZQUFNO0FBRU4sVUFBSSxXQUFXLFFBQVEsR0FBRztBQUN6QixhQUFLLFVBQVU7QUFBQSxNQUNoQixXQUFXLGFBQWEsUUFBVztBQUNsQyxjQUFNLElBQUksVUFBVSxrQkFBa0I7QUFBQSxNQUN2QyxPQUFPO0FBU04sYUFBSyxVQUFVLFNBQVVDLElBQUcsR0FBRztBQUM5QixjQUFJLE9BQU9BLE9BQU0sT0FBTyxHQUFHO0FBQzFCLGtCQUFNLElBQUksVUFBVSwwQkFBMEIsc0JBQXNCO0FBQUEsVUFDckU7QUFFQSxjQUFJQSxPQUFNLEdBQUc7QUFDWixtQkFBTztBQUFBLFVBQ1I7QUFDQSxpQkFBT0EsS0FBSSxJQUFJLEtBQUs7QUFBQSxRQUNyQjtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBT0EsVUFBVTtBQUNULFlBQU0sV0FBVyxLQUFLO0FBQ3RCLFdBQUssVUFBVSxDQUFDQSxJQUFHLE1BQU0sU0FBUyxHQUFHQSxFQUFDO0FBQ3RDLGFBQU87QUFBQSxJQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBVUEsTUFBTUEsSUFBRyxHQUFHO0FBQ1gsYUFBTyxLQUFLLFFBQVFBLElBQUcsQ0FBQyxNQUFNO0FBQUEsSUFDL0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFVQSxZQUFZQSxJQUFHLEdBQUc7QUFDakIsYUFBTyxLQUFLLFFBQVFBLElBQUcsQ0FBQyxJQUFJO0FBQUEsSUFDN0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFVQSxtQkFBbUJBLElBQUcsR0FBRztBQUN4QixhQUFPLEtBQUssWUFBWUEsSUFBRyxDQUFDLEtBQUssS0FBSyxNQUFNQSxJQUFHLENBQUM7QUFBQSxJQUNqRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVVBLGdCQUFnQkEsSUFBRyxHQUFHO0FBQ3JCLGFBQU8sS0FBSyxTQUFTQSxJQUFHLENBQUMsS0FBSyxLQUFLLE1BQU1BLElBQUcsQ0FBQztBQUFBLElBQzlDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBVUEsU0FBU0EsSUFBRyxHQUFHO0FBQ2QsYUFBTyxLQUFLLFFBQVFBLElBQUcsQ0FBQyxJQUFJO0FBQUEsSUFDN0I7QUFBQSxFQUNEOzs7QUM3SUEsV0FBUyxjQUFjLFdBQVk7QUFFL0IsYUFBUyx1QkFBdUIsV0FBWTtBQUV4QyxTQUFHLHFDQUFxQyxXQUFZO0FBQ2hELGVBQU8sSUFBSSxXQUFXLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxRQUFRO0FBQUEsTUFDN0MsQ0FBQztBQUVELFNBQUcscUNBQXFDLFdBQVk7QUFDaEQsZUFBTyxJQUFJLFdBQVcsV0FBWTtBQUFBLFFBQ2xDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLFFBQVE7QUFBQSxNQUN4QixDQUFDO0FBRUQsU0FBRywwQkFBMEIsV0FBWTtBQUNyQyxlQUFPLE1BQU0sSUFBSSxXQUFXLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxTQUFTO0FBQUEsTUFDekQsQ0FBQztBQUVELFNBQUcsMEJBQTBCLFdBQVk7QUFDckMsZUFBTyxNQUFNLElBQUksV0FBVyxNQUFNLENBQUMsRUFBRSxHQUFHLE1BQU0sU0FBUztBQUFBLE1BQzNELENBQUM7QUFBQSxJQUdMLENBQUM7QUFFRCxhQUFTLFdBQVcsV0FBWTtBQUU1QjtBQUFBLFFBQ0ksQ0FBQyxTQUFTLFFBQVEsS0FBSztBQUFBLFFBQ3ZCLENBQUMsS0FBSyxHQUFHLEtBQUs7QUFBQSxRQUNkLENBQUMsS0FBSyxLQUFLLElBQUk7QUFBQSxRQUNmLENBQUMsTUFBTSxNQUFNLElBQUk7QUFBQSxRQUNqQixDQUFDLE9BQU8sTUFBTSxLQUFLO0FBQUEsUUFDbkIsQ0FBQyxPQUFPLE9BQU8sSUFBSTtBQUFBLFFBQ25CLENBQUMsSUFBSSxJQUFJLElBQUk7QUFBQSxNQUNqQixFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFlBQUlDLEtBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFDbkIsWUFBSSxJQUFJLEtBQUssTUFBTTtBQUVuQixXQUFHLG9CQUFvQkEsS0FBSSxVQUFVLElBQUksYUFBYSxHQUFHLFdBQVk7QUFDakUsaUJBQU8sSUFBSSxXQUFXLEVBQUUsTUFBTUEsSUFBRyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUFBLFFBQ25ELENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUVMLENBQUM7QUFFRCxhQUFTLFdBQVcsV0FBWTtBQUU1QjtBQUFBLFFBQ0ksQ0FBQyxTQUFTLElBQUk7QUFBQSxRQUNkLENBQUMsU0FBUyxDQUFDO0FBQUEsUUFDWCxDQUFDLFNBQVMsSUFBSTtBQUFBLFFBQ2QsQ0FBQyxTQUFTLFNBQVMsR0FBRyxDQUFDO0FBQUEsUUFDdkIsQ0FBQyxPQUFPLENBQUM7QUFBQSxRQUNULENBQUMsUUFBVyxJQUFJO0FBQUEsTUFDcEIsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJQSxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBRW5CLFdBQUcsb0JBQW9CQSxLQUFJLFVBQVUsSUFBSSxvQkFBb0IsV0FBWTtBQUNyRSxpQkFBTyxNQUFNLElBQUksV0FBVyxFQUFFLE1BQU1BLElBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLFNBQVM7QUFBQSxRQUNqRSxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBRUQsYUFBUyxpQkFBaUIsV0FBWTtBQUVsQztBQUFBLFFBQ0ksQ0FBQyxTQUFTLFFBQVEsSUFBSTtBQUFBLFFBQ3RCLENBQUMsS0FBSyxHQUFHLElBQUk7QUFBQSxRQUNiLENBQUMsS0FBSyxLQUFLLEtBQUs7QUFBQSxRQUNoQixDQUFDLE1BQU0sTUFBTSxLQUFLO0FBQUEsUUFDbEIsQ0FBQyxPQUFPLE1BQU0sS0FBSztBQUFBLFFBQ25CLENBQUMsT0FBTyxPQUFPLEtBQUs7QUFBQSxRQUNwQixDQUFDLElBQUksSUFBSSxLQUFLO0FBQUEsUUFDZCxDQUFDLElBQUksR0FBRyxLQUFLO0FBQUEsTUFDakIsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJQSxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFFbkIsV0FBRyxvQkFBb0JBLEtBQUksVUFBVSxJQUFJLGFBQWEsR0FBRyxXQUFZO0FBQ2pFLGlCQUFPLElBQUksV0FBVyxFQUFFLFlBQVlBLElBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFBQSxRQUN6RCxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBRUQsYUFBUywyQkFBMkIsV0FBWTtBQUU1QztBQUFBLFFBQ0ksQ0FBQyxTQUFTLFFBQVEsSUFBSTtBQUFBLFFBQ3RCLENBQUMsS0FBSyxHQUFHLElBQUk7QUFBQSxRQUNiLENBQUMsS0FBSyxLQUFLLEtBQUs7QUFBQSxRQUNoQixDQUFDLE1BQU0sTUFBTSxLQUFLO0FBQUEsUUFDbEIsQ0FBQyxPQUFPLE1BQU0sS0FBSztBQUFBLFFBQ25CLENBQUMsT0FBTyxPQUFPLEtBQUs7QUFBQSxRQUNwQixDQUFDLElBQUksSUFBSSxLQUFLO0FBQUEsUUFDZCxDQUFDLElBQUksR0FBRyxLQUFLO0FBQUEsTUFDakIsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJLElBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUlBLEtBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFFbkIsV0FBRyxvQkFBb0JBLEtBQUksVUFBVSxJQUFJLGFBQWEsR0FBRyxXQUFZO0FBQ2pFLGlCQUFPLElBQUksV0FBVyxFQUFFLFFBQVEsRUFBRSxZQUFZQSxJQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBQUEsUUFDbkUsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUVELGFBQVMsd0JBQXdCLFdBQVk7QUFFekM7QUFBQSxRQUNJLENBQUMsU0FBUyxRQUFRLElBQUk7QUFBQSxRQUN0QixDQUFDLEtBQUssR0FBRyxJQUFJO0FBQUEsUUFDYixDQUFDLEtBQUssS0FBSyxJQUFJO0FBQUEsUUFDZixDQUFDLE1BQU0sTUFBTSxJQUFJO0FBQUEsUUFDakIsQ0FBQyxPQUFPLE1BQU0sS0FBSztBQUFBLFFBQ25CLENBQUMsT0FBTyxPQUFPLElBQUk7QUFBQSxRQUNuQixDQUFDLElBQUksSUFBSSxJQUFJO0FBQUEsUUFDYixDQUFDLElBQUksR0FBRyxLQUFLO0FBQUEsTUFDakIsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJQSxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFFbkIsV0FBRyxvQkFBb0JBLEtBQUksVUFBVSxJQUFJLGFBQWEsR0FBRyxXQUFZO0FBQ2pFLGlCQUFPLElBQUksV0FBVyxFQUFFLG1CQUFtQkEsSUFBRyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUFBLFFBQ2hFLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUVMLENBQUM7QUFFRCxhQUFTLGNBQWMsV0FBWTtBQUUvQjtBQUFBLFFBQ0ksQ0FBQyxTQUFTLFFBQVEsSUFBSTtBQUFBLFFBQ3RCLENBQUMsS0FBSyxHQUFHLElBQUk7QUFBQSxRQUNiLENBQUMsS0FBSyxLQUFLLEtBQUs7QUFBQSxRQUNoQixDQUFDLE1BQU0sTUFBTSxLQUFLO0FBQUEsUUFDbEIsQ0FBQyxPQUFPLE1BQU0sS0FBSztBQUFBLFFBQ25CLENBQUMsT0FBTyxPQUFPLEtBQUs7QUFBQSxRQUNwQixDQUFDLElBQUksSUFBSSxLQUFLO0FBQUEsUUFDZCxDQUFDLElBQUksR0FBRyxLQUFLO0FBQUEsTUFDakIsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJLElBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUlBLEtBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFFbkIsV0FBRyxvQkFBb0JBLEtBQUksVUFBVSxJQUFJLGFBQWEsR0FBRyxXQUFZO0FBQ2pFLGlCQUFPLElBQUksV0FBVyxFQUFFLFNBQVNBLElBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFBQSxRQUN0RCxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBRUQsYUFBUyxrQkFBa0IsV0FBWTtBQUduQyxTQUFHLGtCQUFrQixXQUFZO0FBQzdCLGVBQU8sSUFBSSxXQUFXLEVBQUUsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ3JELGVBQU8sSUFBSSxXQUFXLEVBQUUsWUFBWSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNqRCxlQUFPLElBQUksV0FBVyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDM0MsZUFBTyxJQUFJLFdBQVcsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQUEsTUFDL0MsQ0FBQztBQUdELFNBQUcsb0NBQW9DLFdBQVk7QUFDL0MsZUFBTyxJQUFJLFdBQVcsU0FBVUEsSUFBRyxHQUFHO0FBQ2xDLGNBQUlBLEdBQUUsTUFBTSxFQUFFO0FBQUcsbUJBQU87QUFDeEIsaUJBQU9BLEdBQUUsSUFBSSxFQUFFLElBQUksS0FBSztBQUFBLFFBQzVCLENBQUMsRUFBRSxNQUFNLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQUEsTUFDcEMsQ0FBQztBQUFBLElBR0wsQ0FBQztBQUVELGFBQVMscUJBQXFCLFdBQVk7QUFFdEM7QUFBQSxRQUNJLENBQUMsU0FBUyxRQUFRLElBQUk7QUFBQSxRQUN0QixDQUFDLEtBQUssR0FBRyxJQUFJO0FBQUEsUUFDYixDQUFDLEtBQUssS0FBSyxJQUFJO0FBQUEsUUFDZixDQUFDLE1BQU0sTUFBTSxJQUFJO0FBQUEsUUFDakIsQ0FBQyxPQUFPLE1BQU0sS0FBSztBQUFBLFFBQ25CLENBQUMsT0FBTyxPQUFPLElBQUk7QUFBQSxRQUNuQixDQUFDLElBQUksSUFBSSxJQUFJO0FBQUEsUUFDYixDQUFDLElBQUksR0FBRyxLQUFLO0FBQUEsTUFDakIsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJLElBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUlBLEtBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFFbkIsV0FBRyxvQkFBb0JBLEtBQUksVUFBVSxJQUFJLGFBQWEsR0FBRyxXQUFZO0FBQ2pFLGlCQUFPLElBQUksV0FBVyxFQUFFLGdCQUFnQkEsSUFBRyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUFBLFFBQzdELENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUVMLENBQUM7QUFBQSxFQUdMLENBQUM7OztBQy9NRDtBQWVBLFdBQVMsV0FBVyxRQUFRO0FBQzNCLG1CQUFlLE1BQU07QUFHckIsUUFBSSxZQUFZLE9BQU8sb0JBQW9CLE1BQU07QUFHakQsZUFBVyxRQUFRLFdBQVc7QUFDN0IsWUFBTSxRQUFRLE9BQU8sSUFBSTtBQUV6QixhQUFPLElBQUksSUFDVixTQUFTLE9BQU8sVUFBVSxXQUFXLFdBQVcsS0FBSyxJQUFJO0FBQUEsSUFDM0Q7QUFFQSxXQUFPLE9BQU8sT0FBTyxNQUFNO0FBQUEsRUFDNUI7OztBQ2pDQSxXQUFTLGNBQWMsV0FBWTtBQUUvQixhQUFTLHdCQUF3QixXQUFZO0FBRXpDLFNBQUcsd0JBQXdCLFdBQVk7QUFFbkMsWUFBSSxPQUFPO0FBQUEsVUFDUCxHQUFHO0FBQUEsWUFDQyxHQUFHO0FBQUEsY0FDQyxHQUFFO0FBQUEsWUFDTjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBRUEsWUFBSSxPQUFPO0FBQUEsVUFDUCxHQUFHO0FBQUEsWUFDQyxHQUFHO0FBQUEsY0FDQyxHQUFFO0FBQUEsWUFDTjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBRUEsZUFBTyxJQUFJLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSTtBQUM1QixhQUFLLEVBQUUsRUFBRSxJQUFJO0FBQ2IsZUFBTyxJQUFJLEVBQUUsR0FBRyxJQUFJLElBQUk7QUFFeEIsY0FBTSxjQUFjLFdBQVcsSUFBSTtBQUVuQyxlQUFPLElBQUksRUFBRSxHQUFHLElBQUksV0FBVztBQUUvQixZQUFJO0FBR0Esc0JBQVksRUFBRSxFQUFFLElBQUk7QUFBQSxRQUN4QixTQUFTLEdBQUc7QUFBQSxRQUVaO0FBRUEsZUFBTyxJQUFJLEVBQUUsR0FBRyxJQUFJLFdBQVc7QUFBQSxNQUduQyxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBQUEsRUFHTCxDQUFDOzs7QUNsREQ7QUFHQSxXQUFTLFNBQVMsV0FBWTtBQUFBLElBRTFCLE1BQU0sRUFBRTtBQUFBLE1BQ0osWUFBWSxHQUFHO0FBQ1gsYUFBSyxJQUFJO0FBQUEsTUFDYjtBQUFBLE1BRUEsSUFBSTtBQUFBLE1BRUo7QUFBQSxJQUNKO0FBQUEsSUFFQSxNQUFNLEVBQUU7QUFBQSxNQUNKLFlBQVksR0FBRztBQUNYLGFBQUssSUFBSTtBQUFBLE1BQ2I7QUFBQSxNQUVBLElBQUk7QUFBQSxNQUVKO0FBQUEsTUFFQSxXQUFXO0FBQ1AsZUFBTztBQUFBLE1BQ1g7QUFBQSxJQUVKO0FBRUEsYUFBUywyQkFBMkIsV0FBWTtBQUM1QyxTQUFHLDJCQUEyQixXQUFZO0FBQ3RDLFlBQUksSUFBSSxJQUFJLEVBQUU7QUFBQSxVQUNWLEdBQUc7QUFBQSxZQUNDLEdBQUc7QUFBQSxZQUFHLEdBQUcsSUFBSSxFQUFFLENBQUM7QUFBQSxZQUFHLEdBQUcsTUFBTTtBQUFBLFlBQzVCO0FBQUEsVUFDSjtBQUFBLFFBQ0osQ0FBQztBQUNELFlBQUksSUFBSSxNQUFNLENBQUM7QUFDZixlQUFPLENBQUMsRUFBRSxHQUFHLEdBQUcsV0FBVyxDQUFDO0FBQzVCLGVBQU8sQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDO0FBQ3JCLGVBQU8sS0FBSyxVQUFVLENBQUMsQ0FBQyxFQUFFLE1BQU0sS0FBSyxVQUFVLE1BQU0sQ0FBQztBQUFBLE1BRTFELENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxhQUFTLGFBQWEsV0FBWTtBQUM5QixTQUFHLDJCQUEyQixXQUFZO0FBQ3RDLFlBQUlDLEtBQUksSUFBSSxFQUFFO0FBQUEsVUFDVixHQUFHO0FBQUEsWUFDQyxHQUFHO0FBQUEsWUFBRyxHQUFHLElBQUksRUFBRSxDQUFDO0FBQUEsWUFBRyxHQUFHLE1BQU07QUFBQSxZQUM1QjtBQUFBLFVBQ0o7QUFBQSxRQUNKLENBQUM7QUFDRCxZQUFJLElBQUksTUFBTUEsRUFBQztBQUNmLGVBQU9BLEVBQUMsRUFBRSxHQUFHLEdBQUcsV0FBVyxDQUFDO0FBQzVCLGVBQU8sQ0FBQyxFQUFFLEdBQUcsR0FBRyxXQUFXLENBQUM7QUFDNUIsZUFBTyxDQUFDLEVBQUUsSUFBSSxNQUFNQSxFQUFDO0FBQ3JCLGVBQU8sS0FBSyxVQUFVQSxFQUFDLENBQUMsRUFBRSxNQUFNLEtBQUssVUFBVSxDQUFDLENBQUM7QUFBQSxNQUVyRCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBR0QsUUFBSSxPQUFPLHFCQUFxQixVQUFVO0FBQ3RDLGVBQVMsNEJBQTRCLFdBQVk7QUFDN0MsV0FBRyx5REFBeUQsV0FBWTtBQUNwRSxjQUFJQSxLQUFJLFNBQVMsdUJBQXVCO0FBQ3hDLGNBQUksSUFBSSxNQUFNQSxFQUFDO0FBQ2YsaUJBQU8sQ0FBQyxFQUFFLE1BQU1BLEVBQUM7QUFBQSxRQUNyQixDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFDTDtBQUVBLGFBQVMsZ0JBQWdCLFdBQVk7QUFFakMsU0FBRyw2QkFBNkIsV0FBWTtBQUN4QyxZQUFJQSxLQUFJO0FBQ1IsWUFBSSxJQUFJLE1BQU1BLEVBQUM7QUFDZixlQUFPLENBQUMsRUFBRSxNQUFNQSxFQUFDO0FBQ2pCLGVBQU8sQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNoQixlQUFPQSxFQUFDLEVBQUUsR0FBRyxHQUFHO0FBQUEsTUFDcEIsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMscUJBQXFCLFdBQVk7QUFDdEMsU0FBRyx1Q0FBdUMsV0FBWTtBQUNsRCxZQUFJQSxLQUFJO0FBQ1IsWUFBSSxJQUFJLE1BQU1BLEVBQUM7QUFDZixlQUFPQSxPQUFNLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDdEIsZUFBTyxPQUFPLE1BQU0sV0FBVyxFQUFFLEdBQUcsR0FBRztBQUN2QyxlQUFPQSxPQUFNLE1BQVMsRUFBRSxHQUFHLEdBQUc7QUFDOUIsZUFBTyxNQUFNLE1BQVMsRUFBRSxHQUFHLEdBQUc7QUFBQSxNQUNsQyxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsYUFBUyxrQkFBa0IsV0FBWTtBQUVuQyxTQUFHLDZCQUE2QixXQUFZO0FBQ3hDLFlBQUlBLEtBQUksQ0FBQztBQUNULFlBQUksSUFBSSxNQUFNQSxFQUFDO0FBQ2YsZUFBTyxPQUFPLE1BQU0sUUFBUSxFQUFFLEdBQUcsR0FBRztBQUFBLE1BQ3hDLENBQUM7QUFFRCxTQUFHLGdDQUFnQyxXQUFZO0FBQzNDLFlBQUlBLEtBQUksRUFBQyxHQUFHLEVBQUM7QUFDYixZQUFJLElBQUksTUFBTUEsRUFBQztBQUNmLGVBQU9BLEdBQUUsQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUM7QUFBQSxNQUM1QixDQUFDO0FBQUEsSUFDTCxDQUFDO0FBQ0QsYUFBUyxvQkFBb0IsV0FBWTtBQUVyQyxTQUFHLHFDQUFxQyxXQUFZO0FBQ2hELFlBQUlBLEtBQUksTUFBTTtBQUFBLFFBQ2Q7QUFDQSxZQUFJLElBQUksTUFBTUEsRUFBQztBQUNmLGVBQU8sT0FBTyxNQUFNLFVBQVUsRUFBRSxHQUFHLEdBQUc7QUFBQSxNQUMxQyxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBRUQsYUFBUyxZQUFZLFdBQVk7QUFFN0I7QUFBQSxRQUNJLENBQUMsU0FBUyxRQUFRO0FBQUEsUUFDbEIsQ0FBQyxRQUFXLFdBQVc7QUFBQSxRQUN2QixDQUFDLE1BQU0sUUFBUTtBQUFBO0FBQUEsUUFDZixDQUFDLE1BQU07QUFBQSxRQUNQLEdBQUcsVUFBVTtBQUFBLFFBQ2IsQ0FBQyxHQUFHLFFBQVE7QUFBQSxRQUNaLENBQUMsT0FBTyxTQUFTO0FBQUEsUUFDakIsQ0FBQyxNQUFNLFNBQVM7QUFBQSxRQUNoQixDQUFDLEtBQUssUUFBUTtBQUFBLFFBQ2QsQ0FBQyxDQUFDLEdBQUcsUUFBUTtBQUFBLFFBQ2IsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsUUFBUTtBQUFBO0FBQUEsUUFDcEIsQ0FBQyxPQUFPLEtBQUssR0FBRyxRQUFRO0FBQUEsTUFDNUIsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJQSxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBR25CLFdBQUcsWUFBWSxLQUFLLFVBQVVBLEVBQUMsSUFBSSxlQUFlLElBQUksS0FBSyxXQUFZO0FBQ25FLGNBQUksSUFBSSxNQUFNQSxFQUFDO0FBQ2YsaUJBQU8sT0FBTyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFBQSxRQUMvQixDQUFDO0FBQUEsTUFHTCxDQUFDO0FBQUEsSUFHTCxDQUFDO0FBQUEsRUFFTCxDQUFDOzs7QUNsSkQ7OztBQ0FBO0FBQ0E7OztBQ0RBO0FBQ0E7QUFZQSxNQUFNLFdBQU4sY0FBdUIsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU0zQixZQUFZLGFBQWEsTUFBTTtBQUM5QixZQUFNO0FBQ04sc0JBQWdCLFFBQVE7QUFFeEIsV0FBSyxXQUFXO0FBQ2hCLFdBQUssWUFBWTtBQUFBLElBQ2xCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU1BLGNBQWM7QUFDYixhQUFPLEtBQUs7QUFBQSxJQUNiO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU1BLGVBQWU7QUFDZCxhQUFPLEtBQUs7QUFBQSxJQUNiO0FBQUEsRUFDRDs7O0FDdkNBO0FBQ0E7QUFhQSxNQUFNLE1BQU07QUFNWixNQUFNLFFBQVE7QUFNZCxNQUFNLFFBQVE7QUFNZCxNQUFNLE9BQU87QUFNYixNQUFNLE9BQU87QUFNYixNQUFNLFFBQVE7QUFNZCxNQUFNLFFBQVE7QUFNZCxNQUFNLE1BQU07QUFVWixNQUFNLFNBQU4sY0FBcUIsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBLElBSXpCLGNBQWM7QUFDYixZQUFNO0FBQ04sV0FBSyxVQUFVLG9CQUFJLElBQUk7QUFBQSxJQUN4QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUUEsV0FBVyxTQUFTO0FBQ25CLHFCQUFlLE9BQU87QUFDdEIsVUFBSSxFQUFFLG1CQUFtQixVQUFVO0FBQ2xDLGNBQU0sSUFBSSxNQUFNLDRDQUE0QztBQUFBLE1BQzdEO0FBRUEsV0FBSyxRQUFRLElBQUksT0FBTztBQUN4QixhQUFPO0FBQUEsSUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUUEsY0FBYyxTQUFTO0FBQ3RCLHFCQUFlLE9BQU87QUFDdEIsVUFBSSxFQUFFLG1CQUFtQixVQUFVO0FBQ2xDLGNBQU0sSUFBSSxNQUFNLDRDQUE0QztBQUFBLE1BQzdEO0FBRUEsV0FBSyxRQUFRLE9BQU8sT0FBTztBQUMzQixhQUFPO0FBQUEsSUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBV0EsWUFBWSxNQUFNO0FBQ2pCLFVBQUksT0FBTyxTQUFTLFlBQVksS0FBSyxDQUFDLE1BQU0sTUFBTTtBQUNqRCxjQUFNLElBQUksTUFBTSxzQ0FBc0M7QUFBQSxNQUN2RDtBQUVBLGlCQUFXLE1BQU0sTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDdkMsYUFBTztBQUFBLElBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVdBLFlBQVksTUFBTTtBQUNqQixVQUFJLE9BQU8sU0FBUyxZQUFZLEtBQUssQ0FBQyxNQUFNLE1BQU07QUFDakQsY0FBTSxJQUFJLE1BQU0sc0NBQXNDO0FBQUEsTUFDdkQ7QUFFQSxpQkFBVyxNQUFNLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLGFBQU87QUFBQSxJQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVlBLFdBQVcsTUFBTTtBQUNoQixVQUFJLE9BQU8sU0FBUyxZQUFZLEtBQUssQ0FBQyxNQUFNLE1BQU07QUFDakQsY0FBTSxJQUFJLE1BQU0sc0NBQXNDO0FBQUEsTUFDdkQ7QUFFQSxpQkFBVyxNQUFNLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLGFBQU87QUFBQSxJQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFXQSxXQUFXLE1BQU07QUFDaEIsVUFBSSxPQUFPLFNBQVMsWUFBWSxLQUFLLENBQUMsTUFBTSxNQUFNO0FBQ2pELGNBQU0sSUFBSSxNQUFNLHNDQUFzQztBQUFBLE1BQ3ZEO0FBRUEsaUJBQVcsTUFBTSxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN0QyxhQUFPO0FBQUEsSUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBV0EsWUFBWSxNQUFNO0FBQ2pCLFVBQUksT0FBTyxTQUFTLFlBQVksS0FBSyxDQUFDLE1BQU0sTUFBTTtBQUNqRCxjQUFNLElBQUksTUFBTSxzQ0FBc0M7QUFBQSxNQUN2RDtBQUVBLGlCQUFXLE1BQU0sTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDdkMsYUFBTztBQUFBLElBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVdBLFlBQVksTUFBTTtBQUNqQixVQUFJLE9BQU8sU0FBUyxZQUFZLEtBQUssQ0FBQyxNQUFNLE1BQU07QUFDakQsY0FBTSxJQUFJLE1BQU0sc0NBQXNDO0FBQUEsTUFDdkQ7QUFFQSxpQkFBVyxNQUFNLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLGFBQU87QUFBQSxJQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFRQSxTQUFTLE9BQU87QUFDZixzQkFBZ0IsS0FBSztBQUVyQixVQUFJLFVBQVU7QUFBSyxlQUFPO0FBQzFCLFVBQUksVUFBVTtBQUFPLGVBQU87QUFDNUIsVUFBSSxVQUFVO0FBQU8sZUFBTztBQUM1QixVQUFJLFVBQVU7QUFBTSxlQUFPO0FBQzNCLFVBQUksVUFBVTtBQUFNLGVBQU87QUFDM0IsVUFBSSxVQUFVO0FBQU8sZUFBTztBQUM1QixVQUFJLFVBQVU7QUFBTyxlQUFPO0FBQzVCLFVBQUksVUFBVTtBQUFLLGVBQU87QUFFMUIsYUFBTztBQUFBLElBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVFBLFNBQVMsT0FBTztBQUNmLHFCQUFlLEtBQUs7QUFFcEIsVUFBSSxVQUFVO0FBQU8sZUFBTztBQUM1QixVQUFJLFVBQVU7QUFBUyxlQUFPO0FBQzlCLFVBQUksVUFBVTtBQUFTLGVBQU87QUFDOUIsVUFBSSxVQUFVO0FBQVEsZUFBTztBQUM3QixVQUFJLFVBQVU7QUFBUSxlQUFPO0FBQzdCLFVBQUksVUFBVTtBQUFTLGVBQU87QUFDOUIsVUFBSSxVQUFVO0FBQVMsZUFBTztBQUM5QixVQUFJLFVBQVU7QUFBTyxlQUFPO0FBRTVCLGFBQU87QUFBQSxJQUNSO0FBQUEsRUFDRDtBQVVBLFdBQVMsV0FBVyxhQUFhLE1BQU07QUFDdEMsZUFBVyxXQUFXLEtBQUssU0FBUztBQUNuQyxjQUFRLElBQUksSUFBSSxTQUFTLFVBQVUsSUFBSSxDQUFDO0FBQUEsSUFDekM7QUFFQSxXQUFPO0FBQUEsRUFDUjs7O0FGclFBLE1BQU0sVUFBTixjQUFzQixLQUFLO0FBQUEsSUFDMUIsY0FBYztBQUNiLFlBQU07QUFPTixXQUFLLFdBQVc7QUFBQSxJQUNqQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBV0EsSUFBSSxPQUFPO0FBQ1YsdUJBQWlCLE9BQU8sUUFBUTtBQUVoQyxVQUFJLEtBQUssV0FBVyxNQUFNLFlBQVksR0FBRztBQUN4QyxlQUFPO0FBQUEsTUFDUjtBQUVBLGFBQU87QUFBQSxJQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVNBLFlBQVksVUFBVTtBQUNyQixzQkFBZ0IsUUFBUTtBQUN4QixXQUFLLFdBQVc7QUFDaEIsYUFBTztBQUFBLElBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVFBLGNBQWM7QUFDYixhQUFPLEtBQUs7QUFBQSxJQUNiO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFRQSxTQUFTO0FBQ1IsV0FBSyxZQUFZLEdBQUc7QUFDcEIsYUFBTztBQUFBLElBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVFBLFdBQVc7QUFDVixXQUFLLFlBQVksS0FBSztBQUN0QixhQUFPO0FBQUEsSUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUUEsV0FBVztBQUNWLFdBQUssWUFBWSxLQUFLO0FBQ3RCLGFBQU87QUFBQSxJQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFRQSxVQUFVO0FBQ1QsV0FBSyxZQUFZLElBQUk7QUFDckIsYUFBTztBQUFBLElBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVFBLFVBQVU7QUFDVCxXQUFLLFlBQVksSUFBSTtBQUNyQixhQUFPO0FBQUEsSUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUUEsV0FBVztBQUNWLFdBQUssWUFBWSxLQUFLO0FBQ3RCLGFBQU87QUFBQSxJQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFRQSxXQUFXO0FBQ1YsV0FBSyxZQUFZLEtBQUs7QUFDdEIsYUFBTztBQUFBLElBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVFBLFNBQVM7QUFDUixXQUFLLFlBQVksR0FBRztBQUNwQixhQUFPO0FBQUEsSUFDUjtBQUFBLEVBQ0Q7OztBRDdJQSxNQUFNLGlCQUFOLGNBQTZCLFFBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVVwQyxJQUFJLE9BQU87QUFDVixVQUFJLE1BQU0sSUFBSSxLQUFLLEdBQUc7QUFDckIsY0FBTUMsV0FBVSxnQkFBZ0IsU0FBUztBQUN6QyxZQUFJLENBQUNBO0FBQVMsaUJBQU87QUFFckIsWUFBSSxDQUFDQSxTQUFRO0FBQU8sVUFBQUEsU0FBUSxRQUFRQSxTQUFRO0FBQzVDLFlBQUksQ0FBQ0EsU0FBUTtBQUFNLFVBQUFBLFNBQVEsT0FBT0EsU0FBUTtBQUUxQyxnQkFBUSxNQUFNLFlBQVksR0FBRztBQUFBLFVBQzVCLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSixZQUFBQSxTQUFRLElBQUksTUFBTSxTQUFTLENBQUM7QUFDNUI7QUFBQSxVQUNELEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSixZQUFBQSxTQUFRLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFDOUI7QUFBQSxVQUNELEtBQUs7QUFDSixZQUFBQSxTQUFRLEtBQUssTUFBTSxTQUFTLENBQUM7QUFDN0I7QUFBQSxVQUNEO0FBQ0MsWUFBQUEsU0FBUSxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBQzVCO0FBQUEsUUFDRjtBQUVBLGVBQU87QUFBQSxNQUNSO0FBRUEsYUFBTztBQUFBLElBQ1I7QUFBQSxFQUNEOzs7QUkxREEsV0FBUyxXQUFXLFdBQVk7QUFFNUIsYUFBUyxrQkFBa0IsV0FBWTtBQUVuQyxTQUFHLGdDQUFnQyxXQUFZO0FBQzNDLGVBQU8sSUFBSSxlQUFlLENBQUMsRUFBRSxHQUFHLEdBQUcsV0FBVyxjQUFjO0FBQUEsTUFDaEUsQ0FBQztBQUVELFNBQUcseUJBQXlCLFdBQVk7QUFDcEMsZUFBTyxJQUFJLGVBQWUsRUFBRSxPQUFPLEVBQUUsSUFBSSxJQUFJLFNBQVMsT0FBTyxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQUEsTUFDN0YsQ0FBQztBQUVELFNBQUcseUJBQXlCLFdBQVk7QUFDcEMsZUFBTyxJQUFJLGVBQWUsRUFBRSxPQUFPLEVBQUUsSUFBSSxJQUFJLFNBQVMsT0FBTyxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQUEsTUFDN0YsQ0FBQztBQUVELFNBQUcseUJBQXlCLFdBQVk7QUFDcEMsZUFBTyxJQUFJLGVBQWUsRUFBRSxPQUFPLEVBQUUsSUFBSSxJQUFJLFNBQVMsTUFBTSxDQUFDLEdBQUcsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQUEsTUFDM0YsQ0FBQztBQUVELFNBQUcseUJBQXlCLFdBQVk7QUFDcEMsZUFBTyxJQUFJLGVBQWUsRUFBRSxPQUFPLEVBQUUsSUFBSSxJQUFJLFNBQVMsT0FBTyxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQUEsTUFDN0YsQ0FBQztBQUVELFNBQUcseUJBQXlCLFdBQVk7QUFDcEMsZUFBTyxJQUFJLGVBQWUsRUFBRSxPQUFPLEVBQUUsSUFBSSxJQUFJLFNBQVMsT0FBTyxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQUEsTUFDN0YsQ0FBQztBQUVELFNBQUcseUJBQXlCLFdBQVk7QUFDcEMsZUFBTyxJQUFJLGVBQWUsRUFBRSxPQUFPLEVBQUUsSUFBSSxJQUFJLFNBQVMsTUFBTSxDQUFDLEdBQUcsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQUEsTUFDM0YsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUFBLEVBR0wsQ0FBQzs7O0FDbkNELFdBQVMsV0FBVyxXQUFZO0FBRTVCLGFBQVMsY0FBYyxXQUFZO0FBQy9CLFNBQUcsbUNBQW1DLFdBQVk7QUFDOUMsZUFBTyxJQUFJLE9BQU8sQ0FBQyxFQUFFLEdBQUcsV0FBVyxNQUFNO0FBQUEsTUFDN0MsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMscUJBQXFCLFdBQVk7QUFDdEMsU0FBRyxtQ0FBbUMsV0FBWTtBQUM5QyxlQUFPLElBQUksT0FBTyxFQUFFLFNBQVMsTUFBTSxDQUFDLEVBQUUsR0FBRyxXQUFXLE1BQU07QUFBQSxNQUM5RCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsYUFBUyxxQkFBcUIsV0FBWTtBQUN0QyxTQUFHLG1DQUFtQyxXQUFZO0FBQzlDLGVBQU8sSUFBSSxPQUFPLEVBQUUsU0FBUyxNQUFNLENBQUMsRUFBRSxHQUFHLFdBQVcsTUFBTTtBQUFBLE1BQzlELENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxhQUFTLG9CQUFvQixXQUFZO0FBQ3JDLFNBQUcsbUNBQW1DLFdBQVk7QUFDOUMsZUFBTyxJQUFJLE9BQU8sRUFBRSxRQUFRLE1BQU0sQ0FBQyxFQUFFLEdBQUcsV0FBVyxNQUFNO0FBQUEsTUFDN0QsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMsb0JBQW9CLFdBQVk7QUFDckMsU0FBRyxtQ0FBbUMsV0FBWTtBQUM5QyxlQUFPLElBQUksT0FBTyxFQUFFLFFBQVEsTUFBTSxDQUFDLEVBQUUsR0FBRyxXQUFXLE1BQU07QUFBQSxNQUM3RCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsYUFBUyxxQkFBcUIsV0FBWTtBQUN0QyxTQUFHLG1DQUFtQyxXQUFZO0FBQzlDLGVBQU8sSUFBSSxPQUFPLEVBQUUsU0FBUyxNQUFNLENBQUMsRUFBRSxHQUFHLFdBQVcsTUFBTTtBQUFBLE1BQzlELENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxhQUFTLHFCQUFxQixXQUFZO0FBQ3RDLFNBQUcsbUNBQW1DLFdBQVk7QUFDOUMsZUFBTyxJQUFJLE9BQU8sRUFBRSxTQUFTLE1BQU0sQ0FBQyxFQUFFLEdBQUcsV0FBVyxNQUFNO0FBQUEsTUFDOUQsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMscUJBQXFCLFdBQVk7QUFDdEM7QUFBQSxRQUNJLENBQUMsT0FBTyxHQUFHO0FBQUEsUUFDWCxDQUFDLFNBQVMsS0FBSztBQUFBLFFBQ2YsQ0FBQyxTQUFTLEtBQUs7QUFBQSxRQUNmLENBQUMsUUFBUSxJQUFJO0FBQUEsUUFDYixDQUFDLFFBQVEsSUFBSTtBQUFBLFFBQ2IsQ0FBQyxTQUFTLEtBQUs7QUFBQSxRQUNmLENBQUMsU0FBUyxLQUFLO0FBQUEsUUFDZixDQUFDLE9BQU8sR0FBRztBQUFBLE1BQ2YsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJQyxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBRW5CLFdBQUdBLEtBQUksb0JBQW9CLEdBQUcsV0FBWTtBQUN0QyxpQkFBTyxJQUFJLE9BQU8sRUFBRSxTQUFTQSxFQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDO0FBQUEsUUFDbkQsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUNELGFBQVMscUJBQXFCLFdBQVk7QUFDdEM7QUFBQSxRQUNJLENBQUMsT0FBTyxHQUFHO0FBQUEsUUFDWCxDQUFDLFNBQVMsS0FBSztBQUFBLFFBQ2YsQ0FBQyxTQUFTLEtBQUs7QUFBQSxRQUNmLENBQUMsUUFBUSxJQUFJO0FBQUEsUUFDYixDQUFDLFFBQVEsSUFBSTtBQUFBLFFBQ2IsQ0FBQyxTQUFTLEtBQUs7QUFBQSxRQUNmLENBQUMsU0FBUyxLQUFLO0FBQUEsUUFDZixDQUFDLE9BQU8sR0FBRztBQUFBLE1BQ2YsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJQSxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBRW5CLFdBQUdBLEtBQUksb0JBQW9CLEdBQUcsV0FBWTtBQUN0QyxpQkFBTyxJQUFJLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxPQUFPQSxFQUFDO0FBQUEsUUFDbkQsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUFBLEVBQ0wsQ0FBQzs7O0FDbkZELFdBQVMsV0FBVyxXQUFZO0FBRTVCLGFBQVMsdUNBQXVDLFdBQVk7QUFFeEQ7QUFBQSxRQUNJLENBQUMsR0FBRztBQUFBLFFBQUcsQ0FBQyxLQUFLO0FBQUEsUUFBRyxDQUFDLEtBQUs7QUFBQSxRQUFHLENBQUMsSUFBSTtBQUFBLFFBQUcsQ0FBQyxJQUFJO0FBQUEsUUFBRyxDQUFDLEtBQUs7QUFBQSxRQUFHLENBQUMsS0FBSztBQUFBLFFBQUcsQ0FBQyxHQUFHO0FBQUEsTUFDbkUsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJQyxLQUFJLEtBQUssTUFBTTtBQUVuQixXQUFHLDhDQUE4Q0EsSUFBRyxXQUFZO0FBQzVELGlCQUFPLElBQUksUUFBUSxFQUFFLFlBQVlBLEVBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTUEsRUFBQztBQUFBLFFBQ3BFLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUNMLENBQUM7QUFHRCxhQUFTLGlCQUFpQixXQUFZO0FBQ2xDLFNBQUcsb0NBQW9DLFdBQVk7QUFDL0MsZUFBTyxJQUFJLFFBQVEsRUFBRSxJQUFJLElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQUEsTUFDN0QsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMsaUJBQWlCLFdBQVk7QUFFbEMsVUFBSTtBQUFBLE1BRUosTUFBTSxvQkFBb0IsUUFBUTtBQUFBLFFBQzlCLElBQUksT0FBTztBQUNQLGdCQUFNLElBQUksS0FBSztBQUFBLFFBRW5CO0FBQUEsTUFDSjtBQUVBLGlCQUFXLFdBQVk7QUFDbkIsWUFBSUMsV0FBVSxJQUFJLFlBQVk7QUFBQSxNQUNsQyxDQUFDO0FBRUQsU0FBRyxvQ0FBb0MsV0FBWTtBQUMvQyxlQUFPLElBQUksUUFBUSxFQUFFLElBQUksSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFBQSxNQUM3RCxDQUFDO0FBQUEsSUFHTCxDQUFDO0FBRUQsYUFBUyx3QkFBd0IsV0FBWTtBQUV6QyxVQUFJO0FBRUosYUFBTyxNQUFNO0FBQ1Qsc0JBQWMsY0FBYyxRQUFRO0FBQUEsVUFDaEMsY0FBYztBQUNWLGtCQUFNO0FBQ04saUJBQUssUUFBUTtBQUFBLFVBQ2pCO0FBQUEsVUFFQSxJQUFJLFVBQVU7QUFDVixnQkFBSSxNQUFNLElBQUksUUFBUSxNQUFNLE1BQU07QUFDOUIsbUJBQUs7QUFDTCxxQkFBTztBQUFBLFlBQ1g7QUFDQSxtQkFBTztBQUFBLFVBQ1g7QUFBQSxRQUNKO0FBQUEsTUFDSixDQUFDO0FBRUQ7QUFBQTtBQUFBLFFBQ0ksQ0FBQyxLQUFLLENBQUM7QUFBQSxRQUNQLENBQUMsT0FBTyxDQUFDO0FBQUEsUUFDVCxDQUFDLE9BQU8sQ0FBQztBQUFBLFFBQ1QsQ0FBQyxNQUFNLENBQUM7QUFBQSxRQUNSLENBQUMsTUFBTSxDQUFDO0FBQUEsUUFDUixDQUFDLE9BQU8sQ0FBQztBQUFBLFFBQ1QsQ0FBQyxPQUFPLENBQUM7QUFBQSxRQUNULENBQUMsS0FBSyxDQUFDO0FBQUEsTUFDWCxFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFlBQUlELEtBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFFbkIsV0FBRyxZQUFZQSxLQUFJLGtCQUFrQixHQUFHLFdBQVk7QUFDaEQsY0FBSSxVQUFVLElBQUksWUFBWSxFQUFFLFlBQVlBLEVBQUM7QUFDN0Msa0JBQVEsSUFBSSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQy9CLGtCQUFRLElBQUksSUFBSSxTQUFTLEtBQUssQ0FBQztBQUMvQixrQkFBUSxJQUFJLElBQUksU0FBUyxJQUFJLENBQUM7QUFDOUIsa0JBQVEsSUFBSSxJQUFJLFNBQVMsSUFBSSxDQUFDO0FBQzlCLGtCQUFRLElBQUksSUFBSSxTQUFTLEtBQUssQ0FBQztBQUMvQixrQkFBUSxJQUFJLElBQUksU0FBUyxLQUFLLENBQUM7QUFFL0IsaUJBQU8sUUFBUSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFBQSxRQUNwQyxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsYUFBUyx5QkFBeUIsV0FBWTtBQUMxQyxTQUFHLG9DQUFvQyxXQUFZO0FBQy9DLGVBQU8sSUFBSSxRQUFRLEVBQUUsWUFBWSxHQUFHLENBQUMsRUFBRSxHQUFHLFdBQVcsT0FBTztBQUFBLE1BQ2hFLENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxhQUFTLHlCQUF5QixXQUFZO0FBQzFDLFNBQUcsMEJBQTBCLFdBQVk7QUFDckMsZUFBTyxJQUFJLFFBQVEsRUFBRSxZQUFZLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSxHQUFHO0FBQUEsTUFDdkQsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMsb0JBQW9CLFdBQVk7QUFDckMsU0FBRyw4QkFBOEIsV0FBWTtBQUN6QyxlQUFPLElBQUksUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEdBQUcsV0FBVyxPQUFPO0FBQUEsTUFDeEQsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUNELGFBQVMsc0JBQXNCLFdBQVk7QUFDdkMsU0FBRyx3Q0FBd0MsV0FBWTtBQUNuRCxlQUFPLElBQUksUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEdBQUcsV0FBVyxPQUFPO0FBQUEsTUFDMUQsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUNELGFBQVMsc0JBQXNCLFdBQVk7QUFDdkMsU0FBRyw4QkFBOEIsV0FBWTtBQUN6QyxlQUFPLElBQUksUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEdBQUcsV0FBVyxPQUFPO0FBQUEsTUFDMUQsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUNELGFBQVMscUJBQXFCLFdBQVk7QUFDdEMsU0FBRyxvQ0FBb0MsV0FBWTtBQUMvQyxlQUFPLElBQUksUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEdBQUcsV0FBVyxPQUFPO0FBQUEsTUFDekQsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUNELGFBQVMscUJBQXFCLFdBQVk7QUFDdEMsU0FBRyw4QkFBOEIsV0FBWTtBQUN6QyxlQUFPLElBQUksUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEdBQUcsV0FBVyxPQUFPO0FBQUEsTUFDekQsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUNELGFBQVMsc0JBQXNCLFdBQVk7QUFDdkMsU0FBRyxvQ0FBb0MsV0FBWTtBQUMvQyxlQUFPLElBQUksUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEdBQUcsV0FBVyxPQUFPO0FBQUEsTUFDMUQsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUNELGFBQVMsc0JBQXNCLFdBQVk7QUFDdkMsU0FBRyxvQ0FBb0MsV0FBWTtBQUMvQyxlQUFPLElBQUksUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEdBQUcsV0FBVyxPQUFPO0FBQUEsTUFDMUQsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUNELGFBQVMsb0JBQW9CLFdBQVk7QUFDckMsU0FBRyxvQ0FBb0MsV0FBWTtBQUMvQyxlQUFPLElBQUksUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEdBQUcsV0FBVyxPQUFPO0FBQUEsTUFDeEQsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUFBLEVBQ0wsQ0FBQzs7O0FDbkpELFdBQVMsT0FBTyxXQUFZO0FBRXhCLGFBQVMsV0FBVyxXQUFZO0FBQzVCLFNBQUcsZ0NBQWdDLFdBQVk7QUFDM0MsZUFBTyxJQUFJLFNBQVMsR0FBRyxLQUFLLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxXQUFXLFFBQVE7QUFBQSxNQUNqRSxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsYUFBUyxnQkFBZ0IsV0FBWTtBQUVqQyxVQUFJO0FBRUosaUJBQVcsV0FBWTtBQUNuQixjQUFNLElBQUksU0FBUyxHQUFHLE9BQU8sUUFBUSxJQUFJLEVBQUMsR0FBRyxLQUFJLENBQUM7QUFBQSxNQUN0RCxDQUFDO0FBRUQsU0FBRyw0QkFBNEIsV0FBWTtBQUN2QyxlQUFPLElBQUksWUFBWSxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUFBLE1BQzNDLENBQUM7QUFFRCxTQUFHLDJCQUEyQixXQUFZO0FBQ3RDLGVBQU8sSUFBSSxhQUFhLENBQUMsRUFBRSxHQUFHLEtBQUssS0FBSyxRQUFRLENBQUMsT0FBTyxRQUFRLElBQUksRUFBQyxHQUFHLEtBQUksQ0FBQyxDQUFDO0FBQUEsTUFDbEYsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUFBLEVBRUwsQ0FBQzs7O0FDNUJEO0FBQ0E7QUFDQTs7O0FDSEE7QUFFQSxXQUFTLGdCQUFnQjtBQUVyQixRQUFJLE9BQU8sWUFBWSxlQUFlLFFBQVEsVUFBVSxRQUFRO0FBQzNELGFBQU8sUUFBUSxRQUFRO0FBQUEsSUFDNUI7QUFFQSxXQUFPLE9BQU8sSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPO0FBQzdCLGdCQUFVLEVBQUUsWUFBWSxjQUFjLEdBQUcsV0FBVyxFQUFFO0FBQUEsUUFDbEQsWUFBWSxLQUFLLFdBQVc7QUFDeEIsZ0JBQU0sS0FBSyxXQUFXO0FBQUEsWUFDbEIsa0JBQWtCO0FBQUEsWUFDbEIsWUFBWSxPQUFPLE9BQU87QUFBQSxVQUM5QixDQUFDO0FBQUEsUUFFTDtBQUFBLE1BQ0o7QUFBQSxJQUVKLENBQUM7QUFBQSxFQUdMOzs7QURoQkEsTUFBTSxVQUFVO0FBRWhCLFdBQVMsYUFBYSxXQUFZO0FBRTlCLFFBQUksS0FBSztBQUVULFdBQU8sU0FBVSxNQUFNO0FBQ25CLG9CQUFjLEVBQUUsS0FBSyxNQUFNO0FBQ3ZCLGFBQUs7QUFBQSxNQUNULENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTTtBQUNaLGFBQUssQ0FBQztBQUFBLE1BQ1YsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGNBQVUsU0FBVSxNQUFNO0FBQ3RCLFVBQUksSUFBSTtBQUNKLFdBQUcsTUFBTTtBQUFBLE1BQ2I7QUFHQSxpQkFBVyxPQUFPLE9BQU8sc0JBQXNCLEVBQUUsR0FBRztBQUNoRCxZQUFJLElBQUksU0FBUyxNQUFNLHNCQUFzQjtBQUN6QyxjQUFJLE9BQU8sR0FBRyxHQUFHLEdBQUcsUUFBUSxjQUFjLFlBQVk7QUFDbEQsZUFBRyxHQUFHLEdBQUcsU0FBUyxXQUFXLEVBQUU7QUFBQSxVQUNuQztBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsV0FBSztBQUFBLElBQ1QsQ0FBQztBQUdELE9BQUcseUJBQXlCLFNBQVUsTUFBTTtBQUV4QyxXQUFLLElBQUksV0FBWTtBQUFBLFFBQ2pCLEtBQUs7QUFBQSxNQUNULENBQUM7QUFFRCxTQUFHLFFBQVEsRUFBRSxLQUFLLE1BQU07QUFFcEIsV0FBRyxlQUFlLElBQUksU0FBUyxNQUFLO0FBQ2pDLGVBQUs7QUFBQSxRQUNSLENBQUMsQ0FBQztBQUVGLFdBQUcsS0FBSztBQUFBLFVBQ0osTUFBTTtBQUFBLFlBQ0YsU0FBUztBQUFBLFVBQ2I7QUFBQSxRQUNKLENBQUM7QUFBQSxNQUVMLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTTtBQUNaLGFBQUssQ0FBQztBQUFBLE1BQ1YsQ0FBQztBQUFBLElBR0wsQ0FBQztBQUVELE9BQUcsa0JBQWtCLFNBQVUsTUFBTTtBQUNqQyxXQUFLLElBQUksV0FBVztBQUFBLFFBQ2hCLEtBQUs7QUFBQSxRQUNMLFdBQVc7QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNiO0FBQUEsTUFDSixDQUFDO0FBQ0QsU0FBRyxRQUFRLEVBQUUsS0FBSyxNQUFNO0FBQ3BCLGFBQUs7QUFBQSxNQUNULENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTTtBQUNaLGFBQUssQ0FBQztBQUFBLE1BQ1YsQ0FBQztBQUFBLElBR0wsQ0FBQztBQUVELE9BQUcsdUJBQXVCLFNBQVUsTUFBTTtBQUN0QyxXQUFLLElBQUksV0FBVztBQUFBLFFBQ2hCLEtBQUs7QUFBQSxRQUNMLFdBQVc7QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNiO0FBQUEsTUFDSixDQUFDO0FBQ0QsU0FBRyxRQUFRLEVBQUUsS0FBSyxNQUFNO0FBRXBCLFdBQUcsZUFBZSxJQUFJLFNBQVMsTUFBSztBQUVoQyxpQkFBTyxHQUFHLGFBQWEsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUVoQyxjQUFJO0FBQ0Esa0JBQU0sTUFBTSxHQUFHLEtBQUs7QUFDcEIsbUJBQU8sR0FBRyxFQUFFLEdBQUcsR0FBRyxXQUFXLE9BQU87QUFDcEMsa0JBQU0sT0FBTyxJQUFJLFFBQVE7QUFDekIsbUJBQU8sSUFBSSxFQUFFLEdBQUcsR0FBRyxLQUFLLE1BQU0sRUFBQyxTQUFTLGNBQWEsQ0FBQztBQUFBLFVBQzFELFNBQVMsR0FBRztBQUNSLGlCQUFLLENBQUM7QUFDTjtBQUFBLFVBQ0o7QUFDQSxlQUFLO0FBQUEsUUFDVCxDQUFDLENBQUM7QUFFRixXQUFHLEtBQUs7QUFBQSxVQUNBLFNBQVM7QUFBQSxRQUNqQixDQUFDO0FBQUEsTUFFTCxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU07QUFDWixhQUFLLENBQUM7QUFBQSxNQUNWLENBQUM7QUFBQSxJQUdMLENBQUMsRUFBRSxRQUFRLEdBQUs7QUFBQSxFQUVwQixDQUFDOzs7QUVsSEQ7QUFFQSxXQUFTLFdBQVcsV0FBWTtBQUU1QixPQUFHLDhDQUE4QyxTQUFVLE1BQU07QUFFN0QsVUFBSTtBQUNBLFlBQUksUUFBUTtBQUNaLGFBQUssSUFBSSxNQUFNLGNBQWMsQ0FBQztBQUFBLE1BQ2xDLFNBQVMsR0FBRztBQUNSLGFBQUs7QUFBQSxNQUNUO0FBQUEsSUFFSixDQUFDO0FBRUQsT0FBRyxxQkFBc0IsU0FBVSxNQUFNO0FBQ3JDLFlBQU0sT0FBTztBQUFBLFFBQ1QsTUFBTTtBQUFBLFFBQ04sUUFBUTtBQUFBLFFBQ1IsUUFBUTtBQUFBLFVBQ0osUUFBUTtBQUFBLFFBQ1o7QUFBQSxNQUNKO0FBQ0EsWUFBTSxVQUFVLFFBQVEsU0FBUyxLQUFLLFVBQVUsSUFBSSxDQUFDO0FBQ3JELFlBQU0sT0FBTyxRQUFRLFFBQVE7QUFDN0IsYUFBTyxLQUFLLEVBQUUsRUFBRSxHQUFHLE1BQU0sS0FBSyxFQUFFO0FBQ2hDLGFBQU8sS0FBSyxJQUFJLEVBQUUsR0FBRyxNQUFNLEtBQUssSUFBSTtBQUNwQyxhQUFPLEtBQUssSUFBSSxFQUFFLEdBQUcsS0FBSyxNQUFNLEtBQUssSUFBSTtBQUN6QyxXQUFLO0FBQUEsSUFDVCxDQUFDO0FBRUQsT0FBSSxrQkFBa0IsU0FBVSxNQUFNO0FBQ2xDLFlBQU0sTUFBTTtBQUFBLFFBQ1IsTUFBTTtBQUFBLFFBQ04sUUFBUTtBQUFBLFFBQ1IsUUFBUTtBQUFBLFVBQ0osUUFBUTtBQUFBLFFBQ1o7QUFBQSxNQUNKO0FBQ0EsWUFBTSxVQUFVLElBQUksUUFBUSxHQUFHO0FBQy9CLFlBQU0sT0FBTyxLQUFLLFVBQVUsT0FBTztBQUNuQyxhQUFPLElBQUksRUFBRSxHQUFHLE1BQU0sbURBQW1EO0FBQ3pFLFdBQUs7QUFBQSxJQUNULENBQUM7QUFBQSxFQUlMLENBQUM7OztBQ3pDRDtBQUNBO0FBZUEsTUFBTSxVQUFOLE1BQU0saUJBQWdCLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVUxQixZQUFZLE9BQU8sT0FBTyxPQUFPO0FBQ2hDLFlBQU07QUFFTixVQUNDLE9BQU8sVUFBVSxZQUNqQixVQUFVLFVBQ1YsVUFBVSxRQUNUO0FBQ0QsY0FBTSxRQUFRLE1BQU0sU0FBUyxFQUFFLE1BQU0sR0FBRztBQUN4QyxnQkFBUSxTQUFTLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDOUIsZ0JBQVEsU0FBUyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQzlCLGdCQUFRLFNBQVMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUFBLE1BQy9CO0FBRUEsVUFBSSxVQUFVLFFBQVc7QUFDeEIsY0FBTSxJQUFJLE1BQU0sNEJBQTRCO0FBQUEsTUFDN0M7QUFFQSxVQUFJLFVBQVUsUUFBVztBQUN4QixnQkFBUTtBQUFBLE1BQ1Q7QUFFQSxVQUFJLFVBQVUsUUFBVztBQUN4QixnQkFBUTtBQUFBLE1BQ1Q7QUFFQSxXQUFLLFFBQVEsU0FBUyxLQUFLO0FBQzNCLFdBQUssUUFBUSxTQUFTLEtBQUs7QUFDM0IsV0FBSyxRQUFRLFNBQVMsS0FBSztBQUUzQixVQUFJLE1BQU0sS0FBSyxLQUFLLEdBQUc7QUFDdEIsY0FBTSxJQUFJLE1BQU0sdUJBQXVCO0FBQUEsTUFDeEM7QUFFQSxVQUFJLE1BQU0sS0FBSyxLQUFLLEdBQUc7QUFDdEIsY0FBTSxJQUFJLE1BQU0sdUJBQXVCO0FBQUEsTUFDeEM7QUFFQSxVQUFJLE1BQU0sS0FBSyxLQUFLLEdBQUc7QUFDdEIsY0FBTSxJQUFJLE1BQU0sdUJBQXVCO0FBQUEsTUFDeEM7QUFBQSxJQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBT0EsWUFBWSxjQUFjLElBQUk7QUFDN0IsYUFBTyxPQUFPLElBQUksZ0NBQWdDO0FBQUEsSUFDbkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTUEsV0FBVztBQUNWLGFBQU8sR0FBRyxLQUFLLEtBQUssSUFBSSxLQUFLLEtBQUssSUFBSSxLQUFLLEtBQUs7QUFBQSxJQUNqRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFTQSxVQUFVRSxVQUFTO0FBQ2xCLFVBQUlBLG9CQUFtQixVQUFTO0FBQy9CLFFBQUFBLFdBQVVBLFNBQVEsU0FBUztBQUFBLE1BQzVCO0FBRUEsVUFBSSxPQUFPQSxhQUFZLFVBQVU7QUFDaEMsY0FBTSxJQUFJLE1BQU0sZ0JBQWdCO0FBQUEsTUFDakM7QUFFQSxVQUFJQSxhQUFZLEtBQUssU0FBUyxHQUFHO0FBQ2hDLGVBQU87QUFBQSxNQUNSO0FBRUEsWUFBTUMsS0FBSSxDQUFDLEtBQUssT0FBTyxLQUFLLE9BQU8sS0FBSyxLQUFLO0FBQzdDLFlBQU0sSUFBSUQsU0FBUSxNQUFNLEdBQUc7QUFDM0IsWUFBTSxNQUFNLEtBQUssSUFBSUMsR0FBRSxRQUFRLEVBQUUsTUFBTTtBQUV2QyxlQUFTLElBQUksR0FBRyxJQUFJLEtBQUssS0FBSyxHQUFHO0FBQ2hDLFlBQ0VBLEdBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssU0FBU0EsR0FBRSxDQUFDLENBQUMsSUFBSSxLQUNuQyxTQUFTQSxHQUFFLENBQUMsQ0FBQyxJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUMsR0FDN0I7QUFDRCxpQkFBTztBQUFBLFFBQ1IsV0FDRSxFQUFFLENBQUMsS0FBSyxDQUFDQSxHQUFFLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUksS0FDbkMsU0FBU0EsR0FBRSxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEdBQzdCO0FBQ0QsaUJBQU87QUFBQSxRQUNSO0FBQUEsTUFDRDtBQUVBLGFBQU87QUFBQSxJQUNSO0FBQUEsRUFDRDtBQUVBLE1BQUk7QUFhSixXQUFTLG9CQUFvQjtBQUM1QixRQUFJLDBCQUEwQixTQUFTO0FBQ3RDLGFBQU87QUFBQSxJQUNSO0FBR0EscUJBQWlCLElBQUksUUFBUSxPQUFPO0FBRXBDLFdBQU87QUFBQSxFQUNSOzs7QUMxSkEsV0FBUyxXQUFXLFdBQVk7QUFFNUIsYUFBUyx3QkFBd0IsV0FBWTtBQUN6QyxVQUFJQztBQUdKLE1BQUFBLGtCQUFpQixJQUFJLFFBQVEsT0FBTztBQUVwQyxVQUFJLElBQUksa0JBQWtCO0FBRTFCLFNBQUcsWUFBWUEsa0JBQWlCLFNBQVMsR0FBRyxXQUFZO0FBQ3BELGVBQU8sRUFBRSxVQUFVQSxlQUFjLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUFBLE1BQ2xELENBQUM7QUFBQSxJQUVMLENBQUM7QUFBQSxFQUVMLENBQUM7OztBQ1pEO0FBQ0E7QUFZQSxNQUFJLHFCQUFxQixXQUFZO0FBQ3BDLFFBQUksSUFBSTtBQUNSLFNBQUssSUFBSSxJQUFJLElBQUksS0FBTSxLQUFLO0FBQzNCLFVBQUksVUFBVSxFQUFFLFdBQVcsb0JBQW9CLENBQUMsTUFBTSxFQUFFLFlBQVksTUFBTTtBQUN6RSxlQUFPO0FBQUEsTUFDUjtBQUFBLElBQ0Q7QUFDQSxXQUFPO0FBQUEsRUFDUjtBQVNBLFdBQVMsZUFBZTtBQUV2QixRQUFJLE9BQU8sdUJBQXVCLFlBQVk7QUFDN0MsMkJBQXFCLG1CQUFtQjtBQUFBLElBQ3pDO0FBRUEsV0FBTyxVQUFVLEVBQUUsbUJBQW1CO0FBQUEsRUFDdkM7QUFnQ0EsV0FBUyxnQkFDUixPQUNBLGdCQUFnQixTQUFTLGlCQUN6QixrQkFBa0IsU0FBUyxpQkFDMUI7QUFDRCxtQkFBZSxLQUFLO0FBRXBCLFVBQU0sUUFBUTtBQUNkLFVBQU0sY0FBYyxNQUFNLE1BQU0sS0FBSztBQUVyQyxRQUFJLENBQUMsYUFBYTtBQUNqQixZQUFNLElBQUksTUFBTSx5QkFBeUIsS0FBSyxFQUFFO0FBQUEsSUFDakQ7QUFFQSxVQUFNLENBQUMsRUFBRSxLQUFLLElBQUksSUFBSTtBQUN0QixVQUFNLFNBQVMsV0FBVyxHQUFHO0FBQzdCLFVBQU0sTUFBTSxhQUFhO0FBRXpCLFFBQUksU0FBUyxNQUFNO0FBQ2xCLGFBQU87QUFBQSxJQUNSLFdBQVcsU0FBUyxNQUFNO0FBQ3pCLFlBQU0sV0FBVztBQUFBLFFBQ2hCLE9BQU8saUJBQWlCLGVBQWUsRUFBRTtBQUFBLE1BQzFDO0FBQ0EsYUFBTyxTQUFTO0FBQUEsSUFDakIsV0FBVyxTQUFTLE9BQU87QUFDMUIsWUFBTSxlQUFlO0FBQUEsUUFDcEIsT0FBTyxpQkFBaUIsYUFBYSxFQUFFO0FBQUEsTUFDeEM7QUFDQSxhQUFPLFNBQVM7QUFBQSxJQUNqQixXQUFXLFNBQVMsS0FBSztBQUN4QixZQUFNLGNBQWM7QUFBQSxRQUNuQixPQUFPLGlCQUFpQixhQUFhLEVBQUU7QUFBQSxNQUN4QztBQUNBLGFBQVEsU0FBUyxjQUFlO0FBQUEsSUFDakMsV0FBVyxTQUFTLE1BQU07QUFDekIsYUFBTyxTQUFTO0FBQUEsSUFDakIsV0FBVyxTQUFTLE1BQU07QUFDekIsYUFBUSxTQUFTLE1BQU87QUFBQSxJQUN6QixXQUFXLFNBQVMsTUFBTTtBQUN6QixhQUFRLFNBQVMsTUFBTztBQUFBLElBQ3pCLFdBQVcsU0FBUyxNQUFNO0FBQ3pCLGFBQVEsU0FBUyxNQUFPO0FBQUEsSUFDekIsV0FBVyxTQUFTLE1BQU07QUFDekIsYUFBUSxTQUFTLE1BQU87QUFBQSxJQUN6QixPQUFPO0FBQ04sWUFBTSxJQUFJLE1BQU0scUJBQXFCLElBQUksRUFBRTtBQUFBLElBQzVDO0FBQUEsRUFDRDs7O0FDMUhBO0FBRUE7OztBQ09BLE1BQU0saUJBQWlCO0FBS3ZCLE1BQU0sdUJBQXVCO0FBSzdCLE1BQU0sZUFBZTtBQUtyQixNQUFNLFdBQVc7QUFLakIsTUFBTSxjQUFjO0FBS3BCLE1BQU0saUJBQWlCO0FBS3ZCLE1BQU0sV0FBVztBQUtqQixNQUFNLGNBQWM7QUFtQnBCLFdBQVMsMkJBQTJCO0FBRW5DLFFBQ0MsT0FBTyxZQUFZLGVBQ25CLFFBQVEsT0FBTyxRQUNmLFFBQVEsSUFBSSwwQkFDWDtBQUNELGFBQU87QUFBQSxJQUNSO0FBR0EsUUFDQyxPQUFPLFlBQVksZUFDbkIsUUFBUSxPQUFPLFFBQ2YsUUFBUSxJQUFJLGVBQ1g7QUFDRCxhQUFPO0FBQUEsSUFDUjtBQUdBLFFBQ0MsT0FBTyxZQUFZLGVBQ25CLFFBQVEsWUFBWSxRQUNwQixRQUFRLFNBQVMsUUFBUSxNQUN4QjtBQUVELFVBQUksUUFBUSxTQUFTLFlBQVksTUFBTTtBQUN0QyxlQUFPO0FBQUEsTUFDUjtBQUNBLGFBQU87QUFBQSxJQUNSO0FBR0EsUUFDQyxPQUFPLFdBQVcsZUFDbEIsT0FBTyxPQUFPLGFBQWEsZUFDM0IsT0FBTyxjQUFjLGVBQ3JCLE9BQU8sVUFBVSxjQUFjLFVBQzlCO0FBRUQsVUFBSSxPQUFPLFNBQVMsWUFBWSxPQUFPLGtCQUFrQixZQUFZO0FBQ3BFLGVBQU87QUFBQSxNQUNSO0FBQ0EsYUFBTztBQUFBLElBQ1I7QUFHQSxRQUFJLE9BQU8sU0FBUyxhQUFhO0FBQ2hDLGFBQU87QUFBQSxJQUNSO0FBR0EsV0FBTztBQUFBLEVBQ1I7OztBRDlHQSxXQUFTLGNBQWMsS0FBSztBQUV4QixRQUFHLHlCQUF5QixNQUFNLFdBQVc7QUFDekMsYUFBTyxVQUFVO0FBQUEsSUFDckI7QUFHQSxVQUFNLE1BQU0sSUFBSSxZQUFNLElBQUk7QUFBQSxNQUN0QixtQkFBbUI7QUFBQSxNQUNuQixXQUFXO0FBQUEsSUFDZixDQUFDO0FBRUQsUUFBSSxPQUFPLGFBQWEsQ0FBQyxVQUFVO0FBQy9CLFlBQU0sV0FBVztBQUNqQixZQUFNLFFBQVEsTUFBTSxNQUFNLFFBQVE7QUFFbEMsVUFBSSxPQUFPO0FBQ1AsY0FBTSxTQUFTLFNBQVMsTUFBTSxDQUFDLEdBQUcsRUFBRTtBQUNwQyxlQUFPLEVBQUMsU0FBUyxPQUFPLE9BQU07QUFBQSxNQUNsQztBQUVBLGFBQU8sRUFBQyxTQUFTLE1BQUs7QUFBQSxJQUMxQjtBQUVBLFdBQU8sSUFBSTtBQUFBLEVBQ2Y7QUFFQSxXQUFTLGFBQWEsTUFBTTtBQUN4QixRQUFJO0FBRUosV0FBTyxTQUFVLE1BQU07QUFDbkIsZ0JBQVUsRUFBRSxLQUFLLE1BQU07QUFFbkIsYUFBSztBQUFBLE1BQ1QsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGVBQVcsTUFBTTtBQUViLFlBQU0sVUFBVTtBQUNoQixZQUFNLGFBQWEsY0FBYyxPQUFPO0FBQ3hDLGdCQUFVLEVBQUUsU0FBUztBQUFBLElBRXpCLENBQUM7QUFFRCxjQUFVLE1BQU07QUFDWixhQUFPLFVBQVUsRUFBRTtBQUFBLElBQ3ZCLENBQUM7QUFFRCxhQUFTLG1CQUFtQixNQUFNO0FBQzlCLFNBQUcsc0NBQXNDLE1BQU07QUFDM0MsY0FBTSxTQUFTLGdCQUFnQixPQUFPO0FBQ3RDLGVBQU8sTUFBTSxFQUFFLEdBQUcsTUFBTSxHQUFHO0FBQUEsTUFDL0IsQ0FBQztBQUVELFNBQUcsb0VBQW9FLE1BQU07QUFDekUsY0FBTSxlQUFlO0FBRXJCLGNBQU0sVUFBVSxNQUFNO0FBQ2xCLDBCQUFnQixZQUFZO0FBQUEsUUFDaEM7QUFFQSxlQUFPLE9BQU8sRUFBRSxHQUFHLE1BQU0sT0FBTyx5QkFBeUIsWUFBWSxFQUFFO0FBQUEsTUFDM0UsQ0FBQztBQUVELFNBQUcsMkNBQTJDLE1BQU07QUFDaEQsY0FBTSxnQkFBZ0I7QUFDdEIsY0FBTSxpQkFBaUI7QUFFdkIsY0FBTSxTQUFTLGdCQUFnQixhQUFhO0FBRTVDLGVBQU8sTUFBTSxFQUFFLEdBQUcsTUFBTSxjQUFjO0FBQUEsTUFDMUMsQ0FBQztBQUVELFNBQUcsc0NBQXNDLE1BQU07QUFDM0MsY0FBTSxjQUFjLFNBQVMsY0FBYyxLQUFLO0FBQ2hELG9CQUFZLE1BQU0sV0FBVztBQUM3QixpQkFBUyxLQUFLLFlBQVksV0FBVztBQUVyQyxjQUFNLFNBQVMsZ0JBQWdCLE9BQU8sYUFBYSxXQUFXO0FBQzlELGVBQU8sTUFBTSxFQUFFLEdBQUcsTUFBTSxFQUFFO0FBRTFCLGlCQUFTLEtBQUssWUFBWSxXQUFXO0FBQUEsTUFDekMsQ0FBQztBQUVELFNBQUcsdUNBQXVDLE1BQU07QUFDNUMsY0FBTSxjQUFjLFNBQVMsY0FBYyxLQUFLO0FBQ2hELG9CQUFZLE1BQU0sV0FBVztBQUM3QixpQkFBUyxnQkFBZ0IsWUFBWSxXQUFXO0FBRWhELGNBQU0sU0FBUyxnQkFBZ0IsUUFBUSxXQUFXO0FBQ2xELGVBQU8sTUFBTSxFQUFFLEdBQUcsTUFBTSxFQUFFO0FBRTFCLGlCQUFTLGdCQUFnQixZQUFZLFdBQVc7QUFBQSxNQUNwRCxDQUFDO0FBRUQsU0FBRyw4Q0FBOEMsTUFBTTtBQUNuRCxjQUFNLGNBQWMsU0FBUyxjQUFjLEtBQUs7QUFDaEQsb0JBQVksTUFBTSxRQUFRO0FBQzFCLGlCQUFTLEtBQUssWUFBWSxXQUFXO0FBRXJDLGNBQU0sU0FBUyxnQkFBZ0IsT0FBTyxXQUFXO0FBQ2pELGVBQU8sTUFBTSxFQUFFLEdBQUcsTUFBTSxHQUFHO0FBRTNCLGlCQUFTLEtBQUssWUFBWSxXQUFXO0FBQUEsTUFDekMsQ0FBQztBQUVELFNBQUcsK0NBQStDLE1BQU07QUFDcEQsZUFBTyxNQUFNLGdCQUFnQixtQkFBbUIsQ0FBQyxFQUFFLEdBQUcsTUFBTSxtQ0FBbUM7QUFBQSxNQUNuRyxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBR0QsYUFBUyxnQkFBZ0IsTUFBTTtBQUMzQixTQUFHLHdDQUF3QyxNQUFNO0FBQzdDLGNBQU0sVUFBVTtBQUNoQixjQUFNLGFBQWEsY0FBYyxPQUFPO0FBQ3hDLGtCQUFVLEVBQUUsU0FBUztBQUVyQixjQUFNLFlBQVksYUFBYTtBQUMvQixlQUFPLFNBQVMsRUFBRSxHQUFHLE1BQU0sVUFBVSxXQUFXLGdCQUFnQjtBQUVoRSxlQUFPLFVBQVUsRUFBRTtBQUFBLE1BQ3ZCLENBQUM7QUFFRCxTQUFHLHFEQUFxRCxNQUFNO0FBQzFELGNBQU0sVUFBVTtBQUNoQixjQUFNLGFBQWEsY0FBYyxPQUFPO0FBQ3hDLGtCQUFVLEVBQUUsU0FBUztBQUVyQixjQUFNLGFBQWEsYUFBYTtBQUNoQyxjQUFNLGFBQWEsYUFBYTtBQUNoQyxlQUFPLFVBQVUsRUFBRSxHQUFHLE1BQU0sVUFBVTtBQUV0QyxlQUFPLFVBQVUsRUFBRTtBQUFBLE1BQ3ZCLENBQUM7QUFBQSxJQUNMLENBQUM7QUFBQSxFQUVMLENBQUM7OztBRS9JRDtBQUNBO0FBQ0E7OztBQ0ZBLE1BQUk7QUFBSixNQUFnQjtBQUVoQixXQUFTQyxRQUFPO0FBRVosaUJBQWEsQ0FBQztBQUNkLHVCQUFtQixJQUFJLGlCQUFpQixTQUFVLFdBQVc7QUFDekQsZ0JBQVUsUUFBUSxTQUFVLFVBQVU7QUFDbEMsWUFBSSxTQUFTLFNBQVMsZUFBZSxTQUFTLGNBQWM7QUFFeEQsbUJBQVMsV0FBVyxRQUFRLENBQUMsTUFBTTtBQUMvQixnQkFBSSxhQUFhLGFBQWE7QUFDMUIseUJBQVcsS0FBSyxDQUFDO0FBQUEsWUFDckI7QUFBQSxVQUNKLENBQUM7QUFBQSxRQUNMO0FBQUEsTUFDSixDQUFDO0FBQUEsSUFDTCxDQUFDO0FBQUEsRUFDTDtBQUtPLFdBQVMsaUNBQWlDO0FBRTdDLFFBQUkscUJBQXFCLFFBQVc7QUFDaEMsTUFBQUEsTUFBSztBQUFBLElBQ1Q7QUFFQSxxQkFBaUIsUUFBUSxTQUFTLGNBQWMsTUFBTSxHQUFHLEVBQUMsV0FBVyxLQUFJLENBQUM7QUFBQSxFQUM5RTtBQUtPLFdBQVMsd0JBQXdCO0FBQ3BDLHFCQUFpQixXQUFXO0FBRTVCLGVBQVcsS0FBSyxZQUFZO0FBQ3hCLFFBQUUsT0FBTztBQUFBLElBQ2I7QUFBQSxFQUNKOzs7QURqQ0EsTUFBSUMsV0FBUyxhQUFLO0FBRWxCLGVBQUssSUFBSSxPQUFPO0FBT2hCLFdBQVMsY0FBYyxXQUFZO0FBRS9CLFdBQU8sU0FBVSxNQUFNO0FBQ25CLGdCQUFVO0FBQUEsUUFDTixZQUFZO0FBQUEsUUFDWixXQUFXO0FBQUEsTUFDZixDQUFDLEVBQUUsS0FBSyxNQUFNO0FBQ1YsYUFBSztBQUFBLE1BQ1QsQ0FBQyxFQUFFLE1BQU0sT0FBSyxLQUFLLENBQUMsQ0FBQztBQUFBLElBQ3pCLENBQUM7QUFFRCxlQUFXLE1BQU07QUFDYixxQ0FBK0I7QUFBQSxJQUNuQyxDQUFDO0FBRUQsY0FBVSxNQUFNO0FBQ1osNEJBQXNCO0FBQUEsSUFDMUIsQ0FBQztBQUVELGFBQVMsZ0JBQWdCLFdBQVk7QUFDakMsU0FBRyx5QkFBeUIsU0FBVSxNQUFNO0FBRXhDLGNBQU0sYUFBYSxJQUFJLFdBQVc7QUFBQSxVQUM5QixNQUFNLElBQUksUUFBUSxJQUFJLFVBQVUsRUFBRSxTQUFTO0FBQUEsUUFDL0MsQ0FBQztBQUVELG1CQUFXLFFBQVEsRUFBRSxVQUFVLEVBQUUsS0FBSyxNQUFNO0FBQ3hDLGdCQUFNLEtBQUssV0FBVyxVQUFVLElBQUk7QUFDcEMsZUFBSztBQUFBLFFBQ1QsQ0FBQyxFQUFFLE1BQU0sT0FBSyxLQUFLLENBQUMsQ0FBQztBQUFBLE1BRXpCLENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxhQUFTLHVCQUF1QixNQUFNO0FBRWxDLFVBQUksS0FBSyxJQUFJLEdBQUcsWUFBWSxFQUFFLFNBQVM7QUFDdkMsVUFBSSxZQUFZLE1BQU0sNENBQTRDO0FBRWxFLGlCQUFXLE1BQU07QUFFYixxQkFBYSxJQUFJLFdBQVc7QUFBQSxVQUN4QixNQUFNO0FBQUEsVUFDTjtBQUFBLFFBQ0osQ0FBQztBQUFBLE1BRUwsQ0FBQztBQUVELFNBQUcsaUNBQWlDLENBQUMsU0FBUztBQUUxQyxRQUFBQyxTQUFPLFdBQVcsWUFBWSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBRXZDLG1CQUFXLFFBQVEsRUFBRSxVQUFVLEVBQUUsS0FBSyxNQUFNO0FBQ3hDLFVBQUFBLFNBQU8sV0FBVyxZQUFZLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDdkMsVUFBQUEsU0FBTyxTQUFTLGNBQWMsWUFBWSxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUc7QUFFMUQsbUJBQVMsZUFBZSxFQUFFLEVBQUUsT0FBTztBQUNuQyxVQUFBQSxTQUFPLFdBQVcsWUFBWSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ3ZDLFVBQUFBLFNBQU8sU0FBUyxjQUFjLFlBQVksTUFBTSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFFOUQscUJBQVcsUUFBUSxFQUFFLFVBQVUsRUFBRSxLQUFLLE1BQU07QUFDeEMsWUFBQUEsU0FBTyxXQUFXLFlBQVksQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUN2QyxZQUFBQSxTQUFPLFNBQVMsY0FBYyxZQUFZLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRztBQUUxRCxxQkFBUyxlQUFlLEVBQUUsRUFBRSxPQUFPO0FBQ25DLFlBQUFBLFNBQU8sU0FBUyxjQUFjLFlBQVksTUFBTSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDOUQsWUFBQUEsU0FBTyxXQUFXLFlBQVksQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUV2QyxpQkFBSztBQUFBLFVBQ1QsQ0FBQyxFQUFFLE1BQU0sT0FBSyxLQUFLLENBQUMsQ0FBQztBQUFBLFFBR3pCLENBQUMsRUFBRSxNQUFNLE9BQUssS0FBSyxDQUFDLENBQUM7QUFBQSxNQUd6QixDQUFDO0FBQUEsSUFHTCxDQUFDO0FBQUEsRUFHTCxDQUFDOzs7QUVqR0Q7QUFDQTtBQUNBO0FBS0EsTUFBSUMsV0FBUyxhQUFLO0FBRWxCLGVBQUssSUFBSSxPQUFPO0FBSWhCLFdBQVMsUUFBUSxXQUFZO0FBRXpCLFdBQU8sU0FBVSxNQUFNO0FBQ25CLGdCQUFVLEVBQUUsS0FBSyxNQUFNO0FBQ25CLGFBQUs7QUFBQSxNQUNULENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxlQUFXLE1BQU07QUFDYixxQ0FBK0I7QUFBQSxJQUNuQyxDQUFDO0FBRUQsY0FBVSxNQUFNO0FBQ1osNEJBQXNCO0FBQUEsSUFDMUIsQ0FBQztBQUVELGFBQVMsVUFBVSxXQUFZO0FBQzNCLFdBQUssUUFBUSxHQUFJO0FBRWpCLFNBQUcseUJBQXlCLFNBQVUsTUFBTTtBQUV4QyxjQUFNLE9BQU8sSUFBSSxLQUFLO0FBQUEsVUFDbEIsTUFBTSxJQUFJLFFBQVEsSUFBSSxVQUFVLEVBQUUsU0FBUztBQUFBLFVBQzNDLEtBQUs7QUFBQSxRQUNULENBQUM7QUFFRCxhQUFLLFFBQVEsRUFBRSxVQUFVLEVBQUUsS0FBSyxNQUFNO0FBQ2xDLGVBQUs7QUFBQSxRQUNULENBQUMsRUFBRSxNQUFNLE9BQUssS0FBSyxDQUFDLENBQUM7QUFBQSxNQUV6QixDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsYUFBUyxpQkFBaUIsTUFBTTtBQUM1QixXQUFLLFFBQVEsR0FBSTtBQUVqQixVQUFJLEtBQUssSUFBSSxHQUFHLE1BQU0sRUFBRSxTQUFTO0FBQ2pDLFVBQUksTUFBTSxNQUFNLDRDQUE0QztBQUU1RCxpQkFBVyxNQUFNO0FBRWIsZUFBTyxJQUFJLEtBQUs7QUFBQSxVQUNaLE1BQU07QUFBQSxVQUNOO0FBQUEsVUFDQSxLQUFLO0FBQUEsUUFDVCxDQUFDO0FBQUEsTUFFTCxDQUFDO0FBRUQsU0FBRywyQkFBMkIsQ0FBQyxTQUFTO0FBRXBDLFFBQUFBLFNBQU8sS0FBSyxZQUFZLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFFakMsYUFBSyxRQUFRLEVBQUUsVUFBVSxFQUFFLEtBQUssTUFBTTtBQUNsQyxVQUFBQSxTQUFPLEtBQUssWUFBWSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ2pDLFVBQUFBLFNBQU8sU0FBUyxjQUFjLFlBQVksTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHO0FBRTFELG1CQUFTLGVBQWUsRUFBRSxFQUFFLE9BQU87QUFDbkMsVUFBQUEsU0FBTyxLQUFLLFlBQVksQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNqQyxVQUFBQSxTQUFPLFNBQVMsY0FBYyxZQUFZLE1BQU0sSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBRTlELGVBQUssUUFBUSxFQUFFLFVBQVUsRUFBRSxLQUFLLE1BQU07QUFDbEMsWUFBQUEsU0FBTyxLQUFLLFlBQVksQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNqQyxZQUFBQSxTQUFPLFNBQVMsY0FBYyxZQUFZLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRztBQUUxRCxxQkFBUyxlQUFlLEVBQUUsRUFBRSxPQUFPO0FBQ25DLFlBQUFBLFNBQU8sU0FBUyxjQUFjLFlBQVksTUFBTSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUc7QUFDOUQsWUFBQUEsU0FBTyxLQUFLLFlBQVksQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUVqQyxpQkFBSztBQUFBLFVBQ1QsQ0FBQyxFQUFFLE1BQU0sT0FBSyxLQUFLLENBQUMsQ0FBQztBQUFBLFFBR3pCLENBQUMsRUFBRSxNQUFNLE9BQUssS0FBSyxDQUFDLENBQUM7QUFBQSxNQUd6QixDQUFDO0FBQUEsSUFHTCxDQUFDO0FBQUEsRUFHTCxDQUFDOzs7QUMvRkQ7QUFDQTtBQUNBO0FBS0EsTUFBSUMsV0FBUyxhQUFLO0FBRWxCLGVBQUssSUFBSSxPQUFPO0FBT2hCLFdBQVMsVUFBVSxXQUFZO0FBRTNCLFdBQU8sU0FBVSxNQUFNO0FBQ25CLGdCQUFVLEVBQUUsS0FBSyxNQUFNO0FBQ25CLGFBQUs7QUFBQSxNQUNULENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxlQUFXLE1BQU07QUFDYixxQ0FBK0I7QUFBQSxJQUNuQyxDQUFDO0FBRUQsY0FBVSxNQUFNO0FBQ1osNEJBQXNCO0FBQUEsSUFDMUIsQ0FBQztBQUVELGFBQVMsWUFBWSxXQUFZO0FBQzdCLFNBQUcsbUJBQW1CLFNBQVUsTUFBTTtBQUVsQyxjQUFNLFNBQVMsSUFBSSxPQUFPO0FBQUEsVUFDdEIsS0FBSyxJQUFJLFFBQVEsSUFBSSxpQkFBaUIsRUFBRSxTQUFTO0FBQUEsVUFDakQsT0FBTztBQUFBLFVBQ1AsYUFBYTtBQUFBLFVBQ2IsT0FBTztBQUFBLFVBQ1AsV0FBVztBQUFBLFVBQ1gsVUFBVTtBQUFBLFVBQ1YsT0FBTztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsTUFBTTtBQUFBLFFBQ1YsQ0FBQztBQUVELGVBQU8sUUFBUSxFQUFFLFVBQVUsRUFBRSxLQUFLLE1BQU07QUFFcEMsZ0JBQU0sS0FBSyxPQUFPLFVBQVUsSUFBSTtBQUNoQyxlQUFLO0FBQUEsUUFDVCxDQUFDLEVBQUUsTUFBTSxPQUFLLEtBQUssQ0FBQyxDQUFDO0FBQUEsTUFFekIsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMsZUFBZSxNQUFNO0FBRTFCLFVBQUksS0FBSyxJQUFJLEdBQUcsUUFBUSxFQUFFLFNBQVM7QUFDbkMsVUFBSSxRQUFRLFFBQVEsTUFBTSwyQ0FBMkM7QUFFckUsaUJBQVcsTUFBTTtBQUViLGlCQUFTLElBQUksT0FBTztBQUFBLFVBQ2hCLEtBQUs7QUFBQSxVQUNMLE9BQU87QUFBQSxVQUNQLGFBQWE7QUFBQSxVQUNiLE9BQU87QUFBQSxVQUNQLFdBQVc7QUFBQSxVQUNYLFVBQVU7QUFBQSxVQUNWLE9BQU87QUFBQSxVQUNQLGdCQUFnQjtBQUFBLFVBQ2hCLE1BQU07QUFBQSxVQUNOO0FBQUEsUUFDSixDQUFDO0FBQUEsTUFFTCxDQUFDO0FBRUQsU0FBRyw2QkFBNkIsQ0FBQyxTQUFTO0FBRXRDLFFBQUFDLFNBQU8sT0FBTyxZQUFZLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFFbkMsZUFBTyxRQUFRLEVBQUUsVUFBVSxFQUFFLEtBQUssTUFBTTtBQUNwQyxVQUFBQSxTQUFPLE9BQU8sWUFBWSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ25DLFVBQUFBLFNBQU8sU0FBUyxjQUFjLFdBQVcsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHO0FBRXpELG1CQUFTLGVBQWUsRUFBRSxFQUFFLE9BQU87QUFDbkMsVUFBQUEsU0FBTyxPQUFPLFlBQVksQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNuQyxVQUFBQSxTQUFPLFNBQVMsY0FBYyxXQUFXLE1BQU0sSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBRTdELGlCQUFPLFFBQVEsRUFBRSxVQUFVLEVBQUUsS0FBSyxNQUFNO0FBQ3BDLFlBQUFBLFNBQU8sT0FBTyxZQUFZLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDbkMsWUFBQUEsU0FBTyxTQUFTLGNBQWMsV0FBVyxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUc7QUFFekQscUJBQVMsZUFBZSxFQUFFLEVBQUUsT0FBTztBQUNuQyxZQUFBQSxTQUFPLFNBQVMsY0FBYyxXQUFXLE1BQU0sSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHO0FBQzdELFlBQUFBLFNBQU8sT0FBTyxZQUFZLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFFbkMsaUJBQUs7QUFBQSxVQUNULENBQUMsRUFBRSxNQUFNLE9BQUssS0FBSyxDQUFDLENBQUM7QUFBQSxRQUd6QixDQUFDLEVBQUUsTUFBTSxPQUFLLEtBQUssQ0FBQyxDQUFDO0FBQUEsTUFHekIsQ0FBQztBQUFBLElBR0wsQ0FBQztBQUFBLEVBR0wsQ0FBQzs7O0FDL0dEO0FBQ0E7QUFDQTtBQUtBLE1BQUlDLFdBQVMsYUFBSztBQUVsQixlQUFLLElBQUksT0FBTztBQU9oQixXQUFTLFFBQVEsV0FBWTtBQUV6QixRQUFJQyxpQkFBZ0IsY0FBY0MsbUJBQWtCQyxjQUFhLENBQUM7QUFHbEUsV0FBTyxTQUFVLE1BQU07QUFDbkIsZ0JBQVUsRUFBRSxLQUFLLE1BQU07QUFDbkIsYUFBSztBQUFBLE1BQ1QsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGVBQVcsTUFBTTtBQUViLHFDQUErQjtBQUUvQixxQkFBZTtBQUNmLE1BQUFGLGtCQUFpQixXQUFXLE9BQU87QUFDbkMsaUJBQVcsT0FBTyxJQUFJLFNBQVUsS0FBS0csVUFBUztBQUUxQyxZQUFJLENBQUM7QUFBSyxnQkFBTSxJQUFJLE1BQU0sYUFBYTtBQUV2QyxlQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUNwQyxrQkFBUTtBQUFBLFlBQ0osTUFBTSxXQUFZO0FBQ2QscUJBQU8sS0FBSyxVQUFVO0FBQUEsZ0JBQ2xCLEdBQUc7QUFBQSxjQUNQLENBQUM7QUFBQSxZQUNMO0FBQUEsWUFDQSxRQUFRO0FBQUEsVUFDWixDQUFDO0FBQUEsUUFDTCxDQUFDO0FBQUEsTUFFTDtBQUFBLElBR0osQ0FBQztBQUVELGNBQVUsTUFBTTtBQUNaLGlCQUFXLE9BQU8sSUFBSUg7QUFDdEIsNEJBQXNCO0FBQUEsSUFDMUIsQ0FBQztBQUVELGFBQVMsVUFBVSxXQUFZO0FBQzNCLFNBQUcsbUJBQW1CLFNBQVUsTUFBTTtBQUVsQyxjQUFNLE9BQU8sSUFBSSxLQUFLO0FBQUEsVUFDbEIsS0FBSyxJQUFJLFFBQVEsSUFBSSxpQkFBaUIsRUFBRSxTQUFTO0FBQUEsUUFDckQsQ0FBQztBQUVELGFBQUssUUFBUSxFQUFFLFVBQVUsRUFBRSxLQUFLLE1BQU07QUFDbEMsZUFBSztBQUFBLFFBQ1QsQ0FBQyxFQUFFLE1BQU0sT0FBSyxLQUFLLENBQUMsQ0FBQztBQUFBLE1BRXpCLENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxhQUFTLGlCQUFpQixNQUFNO0FBRTVCLFVBQUksS0FBSyxJQUFJLEdBQUcsTUFBTSxFQUFFLFNBQVM7QUFDakMsVUFBSSxRQUFRLE1BQU0sTUFBTSwyQ0FBMkM7QUFFbkUsaUJBQVcsTUFBTTtBQUViLGVBQU8sSUFBSSxLQUFLO0FBQUEsVUFDWixLQUFLO0FBQUEsVUFDTDtBQUFBLFFBQ0osQ0FBQztBQUFBLE1BRUwsQ0FBQztBQUVELFNBQUcseUJBQXlCLE1BQU07QUFDOUIsUUFBQUksU0FBTyxLQUFLLFlBQVksQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUFBLE1BQ3JDLENBQUM7QUFFRCxTQUFHLGtDQUFrQyxDQUFDLFNBQVM7QUFFM0MsYUFBSyxRQUFRLEVBQUUsVUFBVSxFQUFFLEtBQUssTUFBTTtBQUNsQyxVQUFBQSxTQUFPLEtBQUssWUFBWSxHQUFHLGVBQWUsRUFBRSxHQUFHLEdBQUc7QUFDbEQsVUFBQUEsU0FBTyxTQUFTLGNBQWMsMkJBQTJCLEdBQUcsVUFBVSxFQUFFLEdBQUc7QUFFM0UsZ0JBQU0sSUFBSSxTQUFTLGVBQWUsRUFBRSxFQUFFO0FBR3RDLG1CQUFTLGVBQWUsRUFBRSxFQUFFLE9BQU87QUFFbkMsVUFBQUEsU0FBTyxLQUFLLFlBQVksR0FBRyxlQUFlLEVBQUUsR0FBRyxHQUFHO0FBQ2xELFVBQUFBLFNBQU8sU0FBUyxjQUFjLDJCQUEyQixHQUFHLFVBQVUsRUFBRSxJQUFJLEdBQUc7QUFFL0UsZUFBSyxRQUFRLEVBQUUsVUFBVSxFQUFFLEtBQUssTUFBTTtBQUNsQyxZQUFBQSxTQUFPLEtBQUssWUFBWSxHQUFHLGVBQWUsRUFBRSxHQUFHLEdBQUc7QUFDbEQsWUFBQUEsU0FBTyxTQUFTLGNBQWMsMkJBQTJCLEdBQUcsVUFBVSxFQUFFLEdBQUc7QUFFM0UscUJBQVMsZUFBZSxFQUFFLEVBQUUsT0FBTztBQUNuQyxZQUFBQSxTQUFPLFNBQVMsY0FBYywyQkFBMkIsR0FBRyxVQUFVLEVBQUUsSUFBSSxHQUFHO0FBQy9FLFlBQUFBLFNBQU8sS0FBSyxZQUFZLEdBQUcsZUFBZSxFQUFFLEdBQUcsR0FBRztBQUVsRCxpQkFBSztBQUFBLFVBQ1QsQ0FBQyxFQUFFLE1BQU0sQ0FBQUMsT0FBSyxLQUFLQSxFQUFDLENBQUM7QUFBQSxRQUd6QixDQUFDLEVBQUUsTUFBTSxPQUFLLEtBQUssQ0FBQyxDQUFDO0FBQUEsTUFHekIsQ0FBQztBQUFBLElBR0wsQ0FBQztBQUFBLEVBR0wsQ0FBQzs7O0FDNUhELFdBQVMsNkJBQTZCLE1BQU07QUFDeEMsUUFBSTtBQUNKLFFBQUlDO0FBQ0osUUFBSUM7QUFFSixXQUFRLFNBQVUsTUFBTTtBQUNuQixnQkFBVSxFQUFFLEtBQUssTUFBTTtBQUNwQixrSEFBdUUsS0FBSyxDQUFDLE1BQU07QUFDL0UsVUFBQUEsNkJBQTRCLEVBQUUsMkJBQTJCO0FBQ3pELGVBQUs7QUFBQSxRQUNULENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxlQUFXLE1BQU07QUFDYixNQUFBRCxXQUFVLEVBQUMsS0FBSyxJQUFJLEtBQUssRUFBQyxRQUFRLElBQUksZUFBZSxLQUFJLEVBQUM7QUFDMUQsZ0JBQVUsU0FBUyxjQUFjLEtBQUs7QUFBQSxJQUMxQyxDQUFDO0FBRUQsT0FBRyxzREFBc0QsTUFBTTtBQUMzRCxjQUFRLGFBQWEsMkJBQTJCLHFCQUFxQjtBQUNyRSxjQUFRLGFBQWEsa0NBQWtDLE1BQU07QUFFN0QsWUFBTSxTQUFTQywyQkFBMEIsU0FBU0QsUUFBTztBQUV6RCxhQUFPLE9BQU8sR0FBRyxFQUFFLEdBQUcsTUFBTSxxQkFBcUI7QUFDakQsYUFBTyxPQUFPLElBQUksTUFBTSxFQUFFLEdBQUcsTUFBTSxNQUFNO0FBQUEsSUFDN0MsQ0FBQztBQUVELE9BQUcseURBQXlELE1BQU07QUFDOUQsWUFBTSxTQUFTQywyQkFBMEIsU0FBU0QsUUFBTztBQUV6RCxhQUFPLE9BQU8sR0FBRyxFQUFFLEdBQUcsTUFBTSxFQUFFO0FBQzlCLGFBQU8sT0FBTyxJQUFJLE1BQU0sRUFBRSxHQUFHLE1BQU0sRUFBRTtBQUFBLElBQ3pDLENBQUM7QUFFRCxPQUFHLHVEQUF1RCxNQUFNO0FBQzVELGNBQVEsYUFBYSx3QkFBd0IscUJBQXFCO0FBRWxFLFlBQU0sU0FBU0MsMkJBQTBCLFNBQVNELFFBQU87QUFFekQsYUFBTyxPQUFPLEdBQUcsRUFBRSxHQUFHLE1BQU0sRUFBRTtBQUFBLElBQ2xDLENBQUM7QUFFRCxPQUFHLHNEQUFzRCxNQUFNO0FBQzNELGNBQVEsYUFBYSxtQ0FBbUMsT0FBTztBQUUvRCxZQUFNLFNBQVNDLDJCQUEwQixTQUFTRCxRQUFPO0FBRXpELGFBQU8sTUFBTSxFQUFFLEdBQUcsS0FBSyxNQUFNQSxRQUFPO0FBQUEsSUFDeEMsQ0FBQztBQUVELE9BQUcsK0NBQStDLE1BQU07QUFDcEQsY0FBUSxhQUFhLDJCQUEyQixTQUFTO0FBQ3pELFlBQU0sVUFBVTtBQUFBLFFBQ1osT0FBTyxDQUFDLFVBQVUsYUFBYSxRQUFRO0FBQUEsTUFDM0M7QUFFQSxZQUFNLFNBQVNDLDJCQUEwQixTQUFTRCxVQUFTLE9BQU87QUFFbEUsYUFBTyxPQUFPLEdBQUcsRUFBRSxHQUFHLE1BQU0scUJBQXFCO0FBQUEsSUFDckQsQ0FBQztBQUVELE9BQUcsK0NBQStDLE1BQU07QUFDcEQsY0FBUSxhQUFhLGtDQUFrQyxLQUFLO0FBQzVELFlBQU0sVUFBVTtBQUFBLFFBQ1osY0FBYyxDQUFDLFVBQVUsU0FBUyxPQUFPLEVBQUUsSUFBSTtBQUFBLE1BQ25EO0FBRUEsWUFBTSxTQUFTQywyQkFBMEIsU0FBU0QsVUFBUyxPQUFPO0FBRWxFLGFBQU8sT0FBTyxJQUFJLE1BQU0sRUFBRSxHQUFHLE1BQU0sS0FBSztBQUFBLElBQzVDLENBQUM7QUFFRCxPQUFHLGtDQUFrQyxNQUFNO0FBQ3ZDLGNBQVEsYUFBYSwyQkFBMkIsU0FBUztBQUN6RCxjQUFRLGFBQWEsa0NBQWtDLEtBQUs7QUFDNUQsWUFBTSxVQUFVO0FBQUEsUUFDWixPQUFPLENBQUMsVUFBVSxhQUFhLFFBQVE7QUFBQSxRQUN2QyxjQUFjLENBQUMsVUFBVSxTQUFTLE9BQU8sRUFBRSxJQUFJO0FBQUEsTUFDbkQ7QUFFQSxZQUFNLFNBQVNDLDJCQUEwQixTQUFTRCxVQUFTLE9BQU87QUFFbEUsYUFBTyxPQUFPLEdBQUcsRUFBRSxHQUFHLE1BQU0scUJBQXFCO0FBQ2pELGFBQU8sT0FBTyxJQUFJLE1BQU0sRUFBRSxHQUFHLE1BQU0sS0FBSztBQUFBLElBQzVDLENBQUM7QUFFRCxPQUFHLHNEQUFzRCxNQUFNO0FBQzNELFlBQU0sVUFBVTtBQUFBLFFBQ1osT0FBTyxDQUFDLFVBQVUsYUFBYSxRQUFRO0FBQUEsTUFDM0M7QUFFQSxZQUFNLFNBQVNDLDJCQUEwQixTQUFTRCxVQUFTLE9BQU87QUFFbEUsYUFBTyxPQUFPLEdBQUcsRUFBRSxHQUFHLE1BQU0sRUFBRTtBQUFBLElBQ2xDLENBQUM7QUFFRCxPQUFHLG1EQUFtRCxNQUFNO0FBQ3hELGNBQVEsYUFBYSxtQ0FBbUMsT0FBTztBQUMvRCxZQUFNLFVBQVU7QUFBQSxRQUNaLGVBQWUsQ0FBQyxVQUFVLFFBQVE7QUFBQSxNQUN0QztBQUVBLFlBQU0sU0FBU0MsMkJBQTBCLFNBQVNELFVBQVMsT0FBTztBQUVsRSxhQUFPLE1BQU0sRUFBRSxHQUFHLEtBQUssTUFBTUEsUUFBTztBQUFBLElBQ3hDLENBQUM7QUFFRCxPQUFHLHFEQUFxRCxNQUFNO0FBQzFELGNBQVEsYUFBYSwyQkFBMkIsU0FBUztBQUN6RCxjQUFRLGFBQWEsa0NBQWtDLEtBQUs7QUFDNUQsWUFBTSxVQUFVO0FBQUEsUUFDWixPQUFPLENBQUMsVUFBVSxhQUFhLFFBQVE7QUFBQSxNQUMzQztBQUVBLFlBQU0sU0FBU0MsMkJBQTBCLFNBQVNELFVBQVMsT0FBTztBQUVsRSxhQUFPLE9BQU8sR0FBRyxFQUFFLEdBQUcsTUFBTSxxQkFBcUI7QUFDakQsYUFBTyxPQUFPLElBQUksTUFBTSxFQUFFLEdBQUcsTUFBTSxLQUFLO0FBQUEsSUFDNUMsQ0FBQztBQUVELE9BQUcsOENBQThDLE1BQU07QUFDbkQsY0FBUSxhQUFhLDJCQUEyQixTQUFTO0FBQ3pELFlBQU0sVUFBVTtBQUFBLFFBQ1osT0FBTztBQUFBLE1BQ1g7QUFFQSxZQUFNLFNBQVNDLDJCQUEwQixTQUFTRCxVQUFTLE9BQU87QUFFbEUsYUFBTyxPQUFPLEdBQUcsRUFBRSxHQUFHLE1BQU0sU0FBUztBQUFBLElBQ3pDLENBQUM7QUFFRCxPQUFHLDJDQUEyQyxNQUFNO0FBQ2hELGNBQVEsYUFBYSwwQkFBMEIsU0FBUztBQUN4RCxZQUFNLFVBQVU7QUFBQSxRQUNaLE9BQU8sQ0FBQyxVQUFVLGFBQWEsUUFBUTtBQUFBLE1BQzNDO0FBRUEsWUFBTSxTQUFTQywyQkFBMEIsU0FBU0QsVUFBUyxTQUFTLHFCQUFxQjtBQUV6RixhQUFPLE9BQU8sR0FBRyxFQUFFLEdBQUcsTUFBTSxxQkFBcUI7QUFBQSxJQUNyRCxDQUFDO0FBRUQsT0FBRyx5REFBeUQsTUFBTTtBQUM5RCxjQUFRLGFBQWEsMEJBQTBCLFNBQVM7QUFDeEQsWUFBTSxVQUFVO0FBQUEsUUFDWixPQUFPLENBQUMsVUFBVSxhQUFhLFFBQVE7QUFBQSxNQUMzQztBQUVBLFlBQU0sU0FBU0MsMkJBQTBCLFNBQVNELFVBQVMsT0FBTztBQUVsRSxhQUFPLE9BQU8sR0FBRyxFQUFFLEdBQUcsTUFBTSxFQUFFO0FBQUEsSUFDbEMsQ0FBQztBQUVELE9BQUcsdUNBQXVDLE1BQU07QUFDNUMsY0FBUSxhQUFhLHlDQUF5QyxPQUFPO0FBQ3JFLFlBQU0sU0FBU0MsMkJBQTBCLFNBQVNELFFBQU87QUFFekQsYUFBTyxPQUFPLElBQUksYUFBYSxFQUFFLEdBQUcsTUFBTSxLQUFLO0FBQUEsSUFDbkQsQ0FBQztBQUFBLEVBRUwsQ0FBQzs7O0FDcktEO0FBR0EsV0FBUyxlQUFlLE1BQU07QUFDMUIsT0FBRyw2Q0FBNkMsTUFBTTtBQUNsRCxZQUFNLE1BQU07QUFBQSxRQUNSLFdBQVc7QUFBQSxRQUNYLFVBQVU7QUFBQSxRQUNWLFNBQVM7QUFBQSxVQUNMLFFBQVE7QUFBQSxVQUNSLE1BQU07QUFBQSxRQUNWO0FBQUEsTUFDSjtBQUVBLFlBQU0sV0FBVyxvQkFBSSxJQUFJO0FBQUEsUUFDckIsQ0FBQyxhQUFhLFdBQVc7QUFBQSxRQUN6QixDQUFDLFlBQVksVUFBVTtBQUFBLFFBQ3ZCLENBQUMsa0JBQWtCLGdCQUFnQjtBQUFBLFFBQ25DLENBQUMsZ0JBQWdCLGNBQWM7QUFBQSxNQUNuQyxDQUFDO0FBRUQsWUFBTSxTQUFTLFlBQVksR0FBRztBQUU5QixhQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sS0FBSyxVQUFVLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQztBQUFBLElBQzVGLENBQUM7QUFFRCxPQUFHLDhDQUE4QyxNQUFNO0FBQ25ELFlBQU0sTUFBTTtBQUFBLFFBQ1IsV0FBVztBQUFBLFFBQ1gsVUFBVTtBQUFBLE1BQ2Q7QUFFQSxZQUFNLFdBQVcsb0JBQUksSUFBSTtBQUFBLFFBQ3JCLENBQUMsb0JBQW9CLGtCQUFrQjtBQUFBLFFBQ3ZDLENBQUMsbUJBQW1CLGlCQUFpQjtBQUFBLE1BQ3pDLENBQUM7QUFFRCxZQUFNLFNBQVMsWUFBWSxLQUFLLFVBQVUsS0FBSyxHQUFHO0FBRWxELGFBQU8sS0FBSyxVQUFVLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxLQUFLLFVBQVUsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0FBQUEsSUFDNUYsQ0FBQztBQUVELE9BQUcsMEJBQTBCLE1BQU07QUFDL0IsWUFBTSxNQUFNO0FBQUEsUUFDUixXQUFXO0FBQUEsUUFDWCxVQUFVO0FBQUEsUUFDVixTQUFTO0FBQUEsTUFDYjtBQUVBLFlBQU0sV0FBVyxvQkFBSSxJQUFJO0FBQUEsUUFDckIsQ0FBQyxhQUFhLFdBQVc7QUFBQSxRQUN6QixDQUFDLFlBQVksVUFBVTtBQUFBLFFBQ3ZCLENBQUMsV0FBVyxTQUFTO0FBQUEsTUFFekIsQ0FBQztBQUVELFlBQU0sU0FBUyxZQUFZLEdBQUc7QUFFOUIsYUFBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLEtBQUssVUFBVSxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUM7QUFBQSxJQUM1RixDQUFDO0FBQUEsRUFHTCxDQUFDOzs7QUN4REQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWFBLE1BQU0sVUFBTixjQUFzQixLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFJMUIsY0FBYztBQUNiLFlBQU07QUFDTixXQUFLLGNBQWMsSUFBSTtBQUFBLFFBQ3RCLFFBQVEsb0JBQUksUUFBUTtBQUFBLE1BQ3JCO0FBQUEsSUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVVBLGdCQUFnQixTQUFVLEtBQUssZ0JBQWdCLGNBQWM7QUFDNUQsVUFBSSxlQUFlLEtBQUs7QUFDdkIsY0FBTSxJQUFJLFNBQVM7QUFBQSxNQUNwQjtBQUVBLFlBQU0sY0FBYyxrQkFBa0IsUUFBUTtBQUM5QyxVQUFJLFNBQVMsSUFBSSxZQUFZLGVBQWUsR0FBRyxDQUFDO0FBRWhELFVBQUksV0FBVyxjQUFjLEdBQUc7QUFDL0IsZUFBTyxZQUFZLENBQUMsVUFBVTtBQUM3Qix5QkFBZSxLQUFLLFFBQVEsS0FBSztBQUFBLFFBQ2xDO0FBQUEsTUFDRDtBQUVBLFVBQUksV0FBVyxZQUFZLEdBQUc7QUFDN0IsZUFBTyxVQUFVLENBQUMsVUFBVTtBQUMzQix1QkFBYSxLQUFLLFFBQVEsS0FBSztBQUFBLFFBQ2hDO0FBQUEsTUFDRDtBQUVBLGFBQU87QUFBQSxJQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFXQSxtQkFBbUIsU0FBVSxTQUFTLGdCQUFnQixjQUFjO0FBQ25FLFlBQU0sZUFBZSxJQUFJLGtCQUFrQixNQUFNO0FBQ2pELFlBQU0sT0FBTyxJQUFJLGFBQWEsQ0FBQyxlQUFlLE9BQU8sQ0FBQyxHQUFHO0FBQUEsUUFDeEQsTUFBTTtBQUFBLE1BQ1AsQ0FBQztBQUVELFlBQU0sTUFBTSxrQkFBa0IsS0FBSyxFQUFFLGdCQUFnQixJQUFJO0FBQ3pELFlBQU0sU0FBUyxLQUFLLGNBQWMsS0FBSyxnQkFBZ0IsWUFBWTtBQUVuRSxXQUFLLGNBQWMsRUFBRSxRQUFRLEVBQUUsSUFBSSxRQUFRLEdBQUc7QUFFOUMsYUFBTztBQUFBLElBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVFBLFVBQVUsUUFBUTtBQUNqQixZQUFNLGNBQWMsa0JBQWtCLFFBQVE7QUFDOUMsdUJBQWlCLFFBQVEsV0FBVztBQUVwQyxhQUFPLFVBQVU7QUFFakIsVUFBSSxLQUFLLGNBQWMsRUFBRSxRQUFRLEVBQUUsSUFBSSxNQUFNLEdBQUc7QUFDL0MsY0FBTSxNQUFNLEtBQUssY0FBYyxFQUFFLFFBQVEsRUFBRSxJQUFJLE1BQU07QUFDckQsWUFBSSxnQkFBZ0IsR0FBRztBQUFBLE1BQ3hCO0FBRUEsYUFBTztBQUFBLElBQ1I7QUFBQSxFQUNEOzs7QUN6R0E7QUFHQSxNQUFNRSxXQUFTLFVBQVU7QUFFekIsV0FBUyxVQUFVLFdBQVk7QUFFM0IsV0FBTyxTQUFVLE1BQU07QUFFbkIsVUFBSSxPQUFPLEdBQUc7QUFDVixlQUFPLGVBQWVBLFNBQU8sS0FBSyxHQUFHLG1CQUFtQjtBQUFBLFVBQ3BELFVBQVU7QUFBQSxVQUNWLE9BQU8sTUFBTTtBQUNULG1CQUFPO0FBQUEsVUFDWDtBQUFBLFFBQ0osQ0FBQztBQUVELFFBQUFBLFNBQU8sUUFBUSxJQUFJLE1BQU07QUFBQSxVQUNyQixZQUFZO0FBQUEsVUFFWjtBQUFBLFVBRUEsVUFBVTtBQUFBLFVBRVY7QUFBQSxVQUVBLFlBQVk7QUFBQSxVQUVaO0FBQUEsUUFDSjtBQUVBLFlBQUlDLEtBQUksT0FBT0QsU0FBTyxRQUFRO0FBQzlCLFlBQUksS0FBSyxPQUFPO0FBQUEsTUFFcEI7QUFFQSxZQUFNLFFBQVEsVUFBVSxFQUFFLEtBQUssTUFBTTtBQUNqQyxhQUFLO0FBQUEsTUFDVCxDQUFDO0FBQUEsSUFHTCxDQUFDO0FBRUQsYUFBUyxXQUFXLFdBQVk7QUFFNUIsU0FBRyxpQkFBaUIsV0FBWTtBQUU1QixjQUFNLFVBQVUsSUFBSSxRQUFRO0FBQzVCLGNBQU0sU0FBUyxRQUFRLGlCQUFpQiw2QkFBNkI7QUFDckUsZUFBTyxNQUFNLEVBQUUsR0FBRyxXQUFXLE1BQU07QUFFbkMsZUFBTyxRQUFRLFVBQVUsTUFBTSxDQUFDLEVBQUUsR0FBRyxXQUFXLE9BQU87QUFBQSxNQUczRCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBQUEsRUFHTCxDQUFDOzs7QUMzREQ7QUFDQTtBQUNBO0FBQ0E7QUFJQSxNQUFJRSxXQUFTLGFBQUs7QUFFbEIsZUFBSyxJQUFJLE9BQU87QUFFaEIsTUFBSUMsVUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXlDWixNQUFJQyxTQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUVosTUFBSUMsU0FBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnQlosTUFBSSxRQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBaUNaLFdBQVMsT0FBTyxXQUFZO0FBRXhCLFdBQU8sU0FBVSxNQUFNO0FBQ25CLGdCQUFVLEVBQUUsS0FBSyxNQUFNO0FBQ25CLGFBQUs7QUFBQSxNQUNULENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxlQUFXLE1BQU07QUFDYixVQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsWUFBTSxZQUFZRjtBQUFBLElBQ3RCLENBQUM7QUFFRCxjQUFVLE1BQU07QUFDWixVQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsWUFBTSxZQUFZO0FBQUEsSUFDdEIsQ0FBQztBQUVELGFBQVMsYUFBYSxXQUFZO0FBQzlCLGVBQVMseUJBQXlCLFdBQVk7QUFDMUMsV0FBRyxtQkFBbUIsV0FBWTtBQUM5QixjQUFJLFVBQVUsU0FBUyxlQUFlLE9BQU87QUFDN0MsVUFBQUQsU0FBTyxJQUFJLFFBQVEsT0FBTyxFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxXQUFXLE9BQU87QUFBQSxRQUNsRixDQUFDO0FBQ0QsV0FBRyxnQkFBZ0IsV0FBWTtBQUMzQixjQUFJLFVBQVUsU0FBUyxlQUFlLE9BQU87QUFDN0MsY0FBSSxVQUFVLEVBQUMsR0FBRyxFQUFDO0FBQ25CLFVBQUFBLFNBQU8sSUFBSSxRQUFRLFNBQVMsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUFBLFFBQ3RFLENBQUM7QUFBQSxNQUNMLENBQUM7QUFFRCxlQUFTLHdCQUF3QixXQUFZO0FBQ3pDLFdBQUcsMkJBQTJCLFdBQVk7QUFDdEMsY0FBSSxVQUFVLFNBQVMsZUFBZSxPQUFPO0FBQzdDLFVBQUFBLFNBQU8sSUFBSSxRQUFRLE9BQU8sRUFBRSxzQkFBc0IsQ0FBQyxFQUFFLEdBQUcsR0FBRyxXQUFXLE9BQU87QUFBQSxRQUNqRixDQUFDO0FBRUQsV0FBRyw0QkFBNEIsV0FBWTtBQUN2QyxjQUFJLFVBQVUsU0FBUyxlQUFlLE9BQU87QUFDN0MsVUFBQUEsU0FBTyxJQUFJLFFBQVEsT0FBTyxFQUFFLHVCQUF1QixDQUFDLEVBQUUsR0FBRyxHQUFHLFdBQVcsT0FBTztBQUFBLFFBQ2xGLENBQUM7QUFBQSxNQUNMLENBQUM7QUFFRCxlQUFTLGVBQWUsV0FBWTtBQUVoQyxXQUFHLDhEQUE4RCxXQUFZO0FBQ3pFLFVBQUFBLFNBQU8sTUFBTSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEdBQUcsTUFBTSxTQUFTO0FBQUEsUUFDbEQsQ0FBQztBQUVELFdBQUcsK0JBQStCLFdBQVk7QUFFMUMsY0FBSSxVQUFVLFNBQVMsZUFBZSxPQUFPO0FBQzdDLFVBQUFBLFNBQU8sTUFBTSxJQUFJLFFBQVEsU0FBUyxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sU0FBUztBQUFBLFFBQy9ELENBQUM7QUFFRCxXQUFHLGlEQUFpRCxTQUFVLE1BQU07QUFDaEUsY0FBSSxVQUFVLFNBQVMsZUFBZSxPQUFPO0FBRTdDLGNBQUksSUFBSSxJQUFJO0FBQUEsWUFDUjtBQUFBLFlBQ0E7QUFBQSxjQUNJLEdBQUc7QUFBQSxnQkFDQyxHQUFHLENBQUM7QUFBQSxjQUNSO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFHQSxZQUFFLElBQUksRUFBRSxLQUFLLE1BQU07QUFDZixpQkFBSyxJQUFJLE1BQU0sc0JBQXNCLENBQUM7QUFBQSxVQUMxQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU07QUFDWixZQUFBQSxTQUFPLENBQUMsRUFBRSxHQUFHLFdBQVcsS0FBSztBQUM3QixZQUFBQSxTQUFPLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxNQUFNLGtDQUFrQztBQUM3RCxpQkFBSztBQUFBLFVBQ1QsQ0FBQztBQUFBLFFBR0wsQ0FBQztBQUFBLE1BR0wsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMsYUFBYSxXQUFZO0FBQzlCLGVBQVMsZUFBZSxXQUFZO0FBRWhDLFdBQUcsaUNBQWlDLFdBQVk7QUFDNUMsY0FBSSxVQUFVLFNBQVMsZUFBZSxPQUFPO0FBRTdDLGNBQUlJLEtBQUksSUFBSTtBQUFBLFlBQ1I7QUFBQSxZQUNBLENBQUM7QUFBQSxVQUNMO0FBRUEsVUFBQUosU0FBTyxPQUFPSSxFQUFDLEVBQUUsR0FBRyxNQUFNLFFBQVE7QUFBQSxRQUN0QyxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsYUFBUyxhQUFhLFdBQVk7QUFDOUIsZUFBUyxVQUFVLFdBQVk7QUFFM0IsV0FBRyw4QkFBOEIsU0FBVSxNQUFNO0FBQzdDLGNBQUksVUFBVSxTQUFTLGVBQWUsT0FBTztBQUU3QyxjQUFJQSxLQUFJLElBQUk7QUFBQSxZQUNSO0FBQUEsWUFDQTtBQUFBLGNBQ0ksR0FBRztBQUFBLGdCQUNDLEdBQUc7QUFBQSxrQkFDQyxFQUFDLEdBQUcsSUFBRztBQUFBLGtCQUNQLEVBQUMsR0FBRyxJQUFHO0FBQUEsa0JBQ1AsRUFBQyxHQUFHLElBQUc7QUFBQSxrQkFDUCxFQUFDLEdBQUcsSUFBRztBQUFBLGtCQUNQLEVBQUMsR0FBRyxJQUFHO0FBQUEsa0JBQ1AsRUFBQyxHQUFHLElBQUc7QUFBQSxnQkFDWDtBQUFBLGNBQ0o7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUVBLFVBQUFBLEdBQUUsSUFBSSxFQUFFLEtBQUssTUFBTTtBQUVmLFlBQUFKLFNBQU8sT0FBT0ksRUFBQyxFQUFFLEdBQUcsTUFBTSxRQUFRO0FBQ2xDLHFCQUFTLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSztBQUN4QixjQUFBSixTQUFPLE9BQU8sRUFBRSxRQUFRLEtBQUssd0NBQXdDLElBQUksdURBQXVELElBQUksYUFBYSxJQUFJLFNBQVM7QUFBQSxZQUNsSztBQUVBLGlCQUFLO0FBQUEsVUFDVCxDQUFDLEVBQUU7QUFBQSxZQUNDLE9BQUs7QUFDRCxtQkFBSyxJQUFJLE1BQU0sQ0FBQyxDQUFDO0FBQUEsWUFDckI7QUFBQSxVQUFDO0FBQUEsUUFHVCxDQUFDO0FBQUEsTUFFTCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsYUFBUyxhQUFhLFdBQVk7QUFFOUIsaUJBQVcsTUFBTTtBQUNiLFlBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxjQUFNLFlBQVk7QUFBQSxNQUN0QixDQUFDO0FBRUQsZUFBUyxpQkFBaUIsV0FBWTtBQUVsQyxZQUFJLFNBQVMsT0FBTztBQUNwQixtQkFBVyxNQUFNO0FBQ2IsMEJBQWdCLElBQUksY0FBYyxDQUFDLENBQUM7QUFDcEMsb0JBQVUsSUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPLEdBQUcsYUFBYTtBQUNyRSxrQkFBUSxTQUFTLGVBQWUsT0FBTztBQUFBLFFBRTNDLENBQUM7QUFHRCxXQUFHLHVDQUF1QyxTQUFVLE1BQU07QUFFdEQsa0JBQVEsc0JBQXNCO0FBRTlCLGNBQUksVUFBVSxRQUFRLFdBQVc7QUFDakMsVUFBQUEsU0FBTyxPQUFPLEVBQUUsR0FBRyxNQUFNLGNBQWMsV0FBVyxDQUFDO0FBRW5ELGNBQUksV0FBVyxDQUFDLFdBQVcsUUFBVyxTQUFTO0FBRS9DLHdCQUFjLGVBQWUsSUFBSSxTQUFTLFdBQVk7QUFFbEQsZ0JBQUksSUFBSSxTQUFTLE1BQU07QUFDdkIsZ0JBQUksTUFBTSxVQUFhLFNBQVMsV0FBVztBQUFHLG1CQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFFN0UsZ0JBQUksS0FBSyxXQUFXLEVBQUUsT0FBTyxNQUFNO0FBQUcsbUJBQUssSUFBSSxNQUFNLEtBQUssV0FBVyxFQUFFLE9BQU8sSUFBSSxhQUFhLENBQUMsQ0FBQztBQUNqRyxnQkFBSSxTQUFTLFdBQVcsR0FBRztBQUN2QixtQkFBSztBQUFBLFlBQ1QsT0FBTztBQUVILHlCQUFXLE1BQU07QUFDYixzQkFBTSxjQUFjLGlCQUFpQixFQUFFLE1BQU07QUFBQSxjQUNqRCxHQUFHLEVBQUU7QUFBQSxZQUVUO0FBQUEsVUFDSixDQUFDLENBQUM7QUFFRixxQkFBVyxNQUFNO0FBQ2Isa0JBQU0sY0FBYyxpQkFBaUIsRUFBRSxNQUFNO0FBQUEsVUFDakQsR0FBRyxFQUFFO0FBQUEsUUFHVCxDQUFDO0FBRUQsV0FBRyxzQ0FBc0MsU0FBVSxNQUFNO0FBRXJELGtCQUFRLHNCQUFzQjtBQUU5QixjQUFJLFVBQVUsUUFBUSxXQUFXO0FBQ2pDLFVBQUFBLFNBQU8sT0FBTyxFQUFFLEdBQUcsTUFBTSxjQUFjLFdBQVcsQ0FBQztBQUVuRCxjQUFJLFdBQVcsQ0FBQyxNQUFNLE1BQU0sSUFBSTtBQUNoQyxjQUFJLGVBQWUsQ0FBQyxNQUFNLElBQUk7QUFFOUIsd0JBQWMsZUFBZSxJQUFJLFNBQVMsV0FBWTtBQUVsRCxnQkFBSSxJQUFJLFNBQVMsTUFBTTtBQUN2QixnQkFBSSxNQUFNLFVBQWEsU0FBUyxXQUFXO0FBQUcsbUJBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUU3RSxnQkFBSSxJQUFJLEtBQUssV0FBVyxFQUFFLE9BQU87QUFDakMsZ0JBQUksTUFBTTtBQUFHLG1CQUFLLElBQUksTUFBTSxJQUFJLGFBQWEsQ0FBQyxDQUFDO0FBQy9DLGdCQUFJLFNBQVMsV0FBVyxHQUFHO0FBQ3ZCLG1CQUFLO0FBQUEsWUFDVCxPQUFPO0FBQ0gseUJBQVcsTUFBTTtBQUNiLHlCQUFTLGVBQWUsYUFBYSxNQUFNLENBQUMsRUFBRSxNQUFNO0FBQUEsY0FDeEQsR0FBRyxFQUFFO0FBQUEsWUFFVDtBQUFBLFVBQ0osQ0FBQyxDQUFDO0FBRUYscUJBQVcsTUFBTTtBQUNiLHFCQUFTLGVBQWUsSUFBSSxFQUFFLE1BQU07QUFBQSxVQUN4QyxHQUFHLEVBQUU7QUFHTCxxQkFBVyxNQUFNO0FBQ2IscUJBQVMsZUFBZSxJQUFJLEVBQUUsTUFBTTtBQUFBLFVBQ3hDLEdBQUcsRUFBRTtBQUFBLFFBRVQsQ0FBQztBQUVELFdBQUcsdUNBQXVDLFNBQVUsTUFBTTtBQUV0RCxjQUFJLGdCQUFnQixTQUFTLGVBQWUsU0FBUztBQUVyRCxrQkFBUSxzQkFBc0I7QUFFOUIsY0FBSSxVQUFVLFFBQVEsV0FBVztBQUNqQyxVQUFBQSxTQUFPLE9BQU8sRUFBRSxHQUFHLE1BQU0sY0FBYyxXQUFXLENBQUM7QUFFbkQsY0FBSSxXQUFXLENBQUMsVUFBVSxVQUFVLFFBQVE7QUFFNUMsd0JBQWMsZUFBZSxJQUFJLFNBQVMsV0FBWTtBQUVsRCxnQkFBSSxJQUFJLFNBQVMsTUFBTTtBQUN2QixnQkFBSSxNQUFNLFVBQWEsU0FBUyxXQUFXO0FBQUcsbUJBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUU3RSxnQkFBSSxJQUFJLEtBQUssV0FBVyxFQUFFLFFBQVE7QUFDbEMsZ0JBQUksTUFBTTtBQUFHLG1CQUFLLElBQUksTUFBTSxJQUFJLGFBQWEsQ0FBQyxDQUFDO0FBQy9DLGdCQUFJLFNBQVMsV0FBVyxHQUFHO0FBQ3ZCLG1CQUFLO0FBQUEsWUFDVCxPQUFPO0FBQ0gseUJBQVcsTUFBTTtBQUNiLDhCQUFjLGdCQUFnQixjQUFjLGtCQUFrQixJQUFJLElBQUk7QUFDdEUsOEJBQWMsTUFBTTtBQUFBLGNBQ3hCLEdBQUcsRUFBRTtBQUFBLFlBRVQ7QUFBQSxVQUNKLENBQUMsQ0FBQztBQUVGLHFCQUFXLE1BQU07QUFFYiwwQkFBYyxnQkFBZ0I7QUFDOUIsMEJBQWMsTUFBTTtBQUFBLFVBRXhCLEdBQUcsRUFBRTtBQUFBLFFBRVQsQ0FBQztBQUVELFdBQUcsaUNBQWlDLFNBQVUsTUFBTTtBQUVoRCxjQUFJLGtCQUFrQixTQUFTLGVBQWUsVUFBVTtBQUV4RCxrQkFBUSxzQkFBc0I7QUFFOUIsY0FBSSxVQUFVLFFBQVEsV0FBVztBQUNqQyxVQUFBQSxTQUFPLE9BQU8sRUFBRSxHQUFHLE1BQU0sY0FBYyxXQUFXLENBQUM7QUFFbkQsY0FBSSxXQUFXLENBQUMsU0FBUyxlQUFlLEVBQUU7QUFDMUMsY0FBSSxhQUFhLENBQUMsZUFBZSxFQUFFO0FBRW5DLHdCQUFjLGVBQWUsSUFBSSxTQUFTLFdBQVk7QUFFbEQsZ0JBQUksSUFBSSxTQUFTLE1BQU07QUFDdkIsZ0JBQUksTUFBTSxVQUFhLFNBQVMsV0FBVztBQUFHLG1CQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFFN0UsZ0JBQUksSUFBSSxLQUFLLFdBQVcsRUFBRSxVQUFVO0FBQ3BDLGdCQUFJLEtBQUssVUFBVSxDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUM7QUFBRyxtQkFBSyxJQUFJLE1BQU0sS0FBSyxVQUFVLENBQUMsSUFBSSxhQUFhLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQztBQUMvRyxnQkFBSSxTQUFTLFdBQVcsR0FBRztBQUN2QixtQkFBSztBQUFBLFlBQ1QsT0FBTztBQUNILHlCQUFXLE1BQU07QUFDYixnQ0FBZ0IsUUFBUSxXQUFXLE1BQU07QUFDekMsZ0NBQWdCLE1BQU07QUFBQSxjQUMxQixHQUFHLEVBQUU7QUFBQSxZQUVUO0FBQUEsVUFDSixDQUFDLENBQUM7QUFFRixxQkFBVyxNQUFNO0FBR2IsNEJBQWdCLFFBQVE7QUFDeEIsNEJBQWdCLE1BQU07QUFBQSxVQUUxQixHQUFHLEVBQUU7QUFBQSxRQUVULENBQUM7QUFFRCxXQUFHLHdDQUF3QyxTQUFVLE1BQU07QUFFdkQsY0FBSSxnQkFBZ0IsU0FBUyxlQUFlLFNBQVM7QUFFckQsa0JBQVEsc0JBQXNCO0FBRTlCLGNBQUksVUFBVSxRQUFRLFdBQVc7QUFDakMsVUFBQUEsU0FBTyxPQUFPLEVBQUUsR0FBRyxNQUFNLGNBQWMsV0FBVyxDQUFDO0FBRW5ELGNBQUksV0FBVztBQUFBLFlBQ1gsQ0FBQyxRQUFRO0FBQUEsWUFDVCxDQUFDLFVBQVUsVUFBVSxRQUFRO0FBQUEsWUFDN0IsQ0FBQyxVQUFVLFFBQVE7QUFBQSxVQUN2QjtBQUVBLGNBQUksaUJBQWlCO0FBQUEsWUFDakIsQ0FBQyxPQUFPLE1BQU0sTUFBTSxJQUFJO0FBQUEsWUFDeEIsQ0FBQyxNQUFNLE9BQU8sT0FBTyxJQUFJO0FBQUEsVUFDN0I7QUFHQSx3QkFBYyxlQUFlLElBQUksU0FBUyxXQUFZO0FBRWxELGdCQUFJLElBQUksU0FBUyxNQUFNO0FBQ3ZCLGdCQUFJLE1BQU0sVUFBYSxTQUFTLFdBQVc7QUFBRyxtQkFBSyxJQUFJLE1BQU0sZUFBZSxDQUFDO0FBRTdFLGdCQUFJLElBQUksS0FBSyxXQUFXLEVBQUUsYUFBYTtBQUV2QyxnQkFBSSxLQUFLLFVBQVUsQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDO0FBQUcsbUJBQUssSUFBSSxNQUFNLEtBQUssVUFBVSxDQUFDLElBQUksYUFBYSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDL0csZ0JBQUksU0FBUyxXQUFXLEdBQUc7QUFDdkIsbUJBQUs7QUFBQSxZQUNULE9BQU87QUFDSCx5QkFBVyxNQUFNO0FBQ2Isb0JBQUlLLEtBQUksZUFBZSxNQUFNO0FBQzdCLDhCQUFjLFFBQVEsQ0FBQyxFQUFFLFdBQVdBLEdBQUUsQ0FBQztBQUN2Qyw4QkFBYyxRQUFRLENBQUMsRUFBRSxXQUFXQSxHQUFFLENBQUM7QUFDdkMsOEJBQWMsUUFBUSxDQUFDLEVBQUUsV0FBV0EsR0FBRSxDQUFDO0FBQ3ZDLDhCQUFjLFFBQVEsQ0FBQyxFQUFFLFdBQVdBLEdBQUUsQ0FBQztBQUN2Qyw4QkFBYyxNQUFNO0FBQUEsY0FDeEIsR0FBRyxFQUFFO0FBQUEsWUFFVDtBQUFBLFVBQ0osQ0FBQyxDQUFDO0FBRUYscUJBQVcsTUFBTTtBQUViLDBCQUFjLFFBQVEsQ0FBQyxFQUFFLFdBQVc7QUFDcEMsMEJBQWMsUUFBUSxDQUFDLEVBQUUsV0FBVztBQUNwQywwQkFBYyxRQUFRLENBQUMsRUFBRSxXQUFXO0FBQ3BDLDBCQUFjLFFBQVEsQ0FBQyxFQUFFLFdBQVc7QUFDcEMsMEJBQWMsTUFBTTtBQUFBLFVBRXhCLEdBQUcsRUFBRTtBQUFBLFFBR1QsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUdELGFBQVMsYUFBYSxXQUFZO0FBRTlCLGlCQUFXLE1BQU07QUFDYixZQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsY0FBTSxZQUFZSDtBQUFBLE1BQ3RCLENBQUM7QUFFRCxlQUFTLFdBQVcsV0FBWTtBQUU1QixXQUFHLHdDQUF3QyxTQUFVLE1BQU07QUFDdkQsY0FBSSxVQUFVLFNBQVMsZUFBZSxPQUFPO0FBRTdDLGNBQUlFLEtBQUksSUFBSTtBQUFBLFlBQ1I7QUFBQSxZQUNBO0FBQUEsY0FDSSxNQUFNO0FBQUEsWUFDVjtBQUFBLFVBQ0o7QUFFQSxVQUFBQSxHQUFFLFlBQVksZUFBZSxTQUFVRSxJQUFHO0FBQ3RDLG1CQUFPQSxLQUFJO0FBQUEsVUFDZixDQUFDO0FBRUQscUJBQVcsTUFBTTtBQUNiLFlBQUFGLEdBQUUsSUFBSSxFQUFFLEtBQUssTUFBTTtBQUVmLGNBQUFKLFNBQU8sT0FBT0ksRUFBQyxFQUFFLEdBQUcsTUFBTSxRQUFRO0FBQ2xDLGNBQUFKLFNBQU8sT0FBTyxFQUFFLFFBQVEsS0FBSyw2REFBNkQ7QUFDMUYsY0FBQUEsU0FBTyxPQUFPLEVBQUUsUUFBUSxLQUFLLDBFQUEwRTtBQUN2RyxjQUFBQSxTQUFPLE9BQU8sRUFBRSxRQUFRLEtBQUssMERBQTBEO0FBRXZGLHFCQUFPLEtBQUs7QUFBQSxZQUNoQixDQUFDLEVBQUU7QUFBQSxjQUNDLE9BQUs7QUFDRCxxQkFBSyxJQUFJLE1BQU0sQ0FBQyxDQUFDO0FBQUEsY0FDckI7QUFBQSxZQUFDO0FBQUEsVUFDVCxHQUFHLEdBQUc7QUFBQSxRQUVWLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUNMLENBQUM7QUFHRCxhQUFTLGFBQWEsV0FBWTtBQUU5QixpQkFBVyxNQUFNO0FBQ2IsWUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGNBQU0sWUFBWUc7QUFBQSxNQUN0QixDQUFDO0FBRUQsZUFBUyxXQUFXLFdBQVk7QUFFNUIsV0FBRyxXQUFXLFNBQVUsTUFBTTtBQUMxQixjQUFJLFVBQVUsU0FBUyxlQUFlLE9BQU87QUFFN0MsY0FBSUMsS0FBSSxJQUFJO0FBQUEsWUFDUjtBQUFBLFlBQ0E7QUFBQSxjQUNJLEdBQUc7QUFBQSxnQkFDQyxHQUFHO0FBQUEsa0JBQ0MsRUFBQyxHQUFHLElBQUc7QUFBQSxnQkFDWDtBQUFBLGNBQ0o7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUdBLFVBQUFBLEdBQUUsSUFBSSxFQUFFLEtBQUssTUFBTTtBQUVmLFlBQUFKLFNBQU8sT0FBT0ksRUFBQyxFQUFFLEdBQUcsTUFBTSxRQUFRO0FBQ2xDLFlBQUFKLFNBQU8sT0FBTyxFQUFFLFFBQVEsS0FBSywyQ0FBMkM7QUFDeEUsWUFBQUEsU0FBTyxPQUFPLEVBQUUsUUFBUSxLQUFLLHFGQUFxRjtBQUNsSCxZQUFBQSxTQUFPLE9BQU8sRUFBRSxRQUFRLEtBQUssK0dBQStHO0FBRTVJLGlCQUFLO0FBQUEsVUFDVCxDQUFDLEVBQUU7QUFBQSxZQUNDLE9BQUs7QUFDRCxtQkFBSyxJQUFJLE1BQU0sQ0FBQyxDQUFDO0FBQUEsWUFDckI7QUFBQSxVQUFDO0FBQUEsUUFHVCxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBRUQsYUFBUyxhQUFhLFdBQVk7QUFDOUIsZUFBUyxjQUFjLFdBQVk7QUFFL0IsV0FBRyw0QkFBNEIsU0FBVSxNQUFNO0FBQzNDLGNBQUksVUFBVSxTQUFTLGVBQWUsT0FBTztBQUU3QyxjQUFJLE9BQU8sU0FBUyxlQUFlLE1BQU07QUFDekMsVUFBQUEsU0FBTyxLQUFLLEtBQUssRUFBRSxHQUFHLEdBQUcsTUFBTSxFQUFFO0FBRWpDLGNBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxVQUFBQSxTQUFPLE1BQU0sT0FBTyxFQUFFLEdBQUcsR0FBRztBQUU1QixjQUFJLFdBQVcsU0FBUyxlQUFlLFVBQVU7QUFDakQsVUFBQUEsU0FBTyxTQUFTLE9BQU8sRUFBRSxHQUFHLEdBQUc7QUFFL0IsY0FBSSxTQUFTLFNBQVMsZUFBZSxRQUFRO0FBQzdDLFVBQUFBLFNBQU8sT0FBTyxhQUFhLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUUxQyxjQUFJLGNBQWMsU0FBUyxlQUFlLGFBQWE7QUFDdkQsVUFBQUEsU0FBTyxZQUFZLGFBQWEsRUFBRSxHQUFHLEdBQUcsTUFBTSxFQUFFO0FBRWhELGNBQUksV0FBVyxTQUFTLGVBQWUsVUFBVTtBQUNqRCxVQUFBQSxTQUFPLFNBQVMsS0FBSyxFQUFFLEdBQUcsR0FBRyxNQUFNLEVBQUU7QUFHckMsY0FBSUksS0FBSSxJQUFJO0FBQUEsWUFDUjtBQUFBLFlBQ0E7QUFBQSxjQUNJLEdBQUc7QUFBQSxnQkFDQyxHQUFHO0FBQUEsZ0JBQ0gsR0FBRztBQUFBLGdCQUNILE1BQU07QUFBQSxnQkFDTixPQUFPO0FBQUEsZ0JBQ1AsVUFBVTtBQUFBLGdCQUNWLGFBQWEsQ0FBQyxVQUFVLFVBQVUsY0FBYztBQUFBLGdCQUNoRCxRQUFRO0FBQUEsZ0JBQ1IsVUFBVTtBQUFBLGNBQ2Q7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUdBLFVBQUFBLEdBQUUsSUFBSSxFQUFFLEtBQUssTUFBTTtBQUdmLFlBQUFKLFNBQU8sT0FBTyxFQUFFLFFBQVEsS0FBSyxrRUFBa0U7QUFDL0YsWUFBQUEsU0FBTyxPQUFPLEVBQUUsUUFBUSxLQUFLLDRFQUE0RTtBQUN6RyxZQUFBQSxTQUFPLE9BQU8sRUFBRSxRQUFRLEtBQUssdUdBQXVHO0FBQ3BJLFlBQUFBLFNBQU8sT0FBTyxFQUFFLFFBQVEsS0FBSyx1SEFBdUg7QUFFcEosWUFBQUEsU0FBTyxLQUFLLE9BQU8sY0FBYyxFQUFFLEdBQUcsR0FBRyxNQUFNSSxHQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQ3ZFLFlBQUFKLFNBQU8sTUFBTSxTQUFTLGVBQWUsRUFBRSxHQUFHLEdBQUcsTUFBTSxJQUFJO0FBQ3ZELFlBQUFBLFNBQU8sU0FBUyxPQUFPLGtCQUFrQixFQUFFLEdBQUcsR0FBRyxNQUFNSSxHQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDO0FBQ3RGLFlBQUFKLFNBQU8sT0FBTyxlQUFlLGdCQUFnQixFQUFFLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFFNUQsZ0JBQUksNkJBQTZCLENBQUM7QUFDbEMsdUJBQVcsQ0FBQyxPQUFPLEdBQUcsS0FBSyxPQUFPLFFBQVEsWUFBWSxlQUFlLEdBQUc7QUFDcEUseUNBQTJCLEtBQUssSUFBSSxLQUFLO0FBQUEsWUFDN0M7QUFHQSxZQUFBQSxTQUFPLEtBQUssVUFBVSwwQkFBMEIsR0FBRyxxQkFBcUIsRUFBRSxHQUFHLEdBQUcsTUFBTSxLQUFLLFVBQVVJLEdBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUN4SSxZQUFBSixTQUFPLFNBQVMsU0FBUyxrQkFBa0IsRUFBRSxHQUFHLEdBQUc7QUFFbkQsaUJBQUs7QUFBQSxVQUNULENBQUMsRUFBRTtBQUFBLFlBQ0MsT0FBSztBQUNELG1CQUFLLElBQUksTUFBTSxDQUFDLENBQUM7QUFBQSxZQUNyQjtBQUFBLFVBQUM7QUFBQSxRQUdULENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxhQUFTLHNCQUFzQixXQUFZO0FBQ3ZDLFVBQUksSUFBSTtBQUNSLGlCQUFXLE1BQU07QUFDYixnQkFBUSxTQUFTLGVBQWUsT0FBTztBQUN2QyxhQUFLLElBQUksR0FBRyxTQUFTO0FBQ3JCLGNBQU0sWUFBWSxlQUFlLEtBQUs7QUFBQTtBQUFBLE1BRTFDLENBQUM7QUFFRCxnQkFBVSxNQUFNO0FBQ1osY0FBTSxZQUFZO0FBQUEsTUFDdEIsQ0FBQztBQUVELFNBQUcsd0JBQXdCLFdBQVk7QUFDbkMsY0FBTSxNQUFNLFNBQVMsZUFBZSxHQUFHLFNBQVMsQ0FBQztBQUVqRCxjQUFNLE9BQU8sSUFBSSxhQUFhLHNCQUFzQjtBQUNwRCxRQUFBQSxTQUFPLEtBQUssTUFBTSxFQUFFLEdBQUcsR0FBRyxNQUFNLEVBQUU7QUFBQSxNQUV0QyxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBR0QsYUFBUyxpQkFBaUIsV0FBWTtBQUNsQyxVQUFJLElBQUk7QUFFUixpQkFBVyxNQUFNO0FBQ2IsZ0JBQVEsU0FBUyxlQUFlLE9BQU87QUFDdkMsYUFBSyxJQUFJLEdBQUcsU0FBUyxFQUFFLFNBQVM7QUFDaEMsY0FBTSxZQUFZLGdCQUFnQixLQUFLO0FBQUEsTUFDM0MsQ0FBQztBQUVELGdCQUFVLE1BQU07QUFDWixjQUFNLFlBQVk7QUFBQSxNQUN0QixDQUFDO0FBRUQsU0FBRyxvQkFBb0IsV0FBWTtBQUUvQixpQkFBUyxlQUFlLEVBQUUsRUFBRSxRQUFRO0FBQ3BDLGNBQU0sVUFBVSxJQUFJLFFBQVEsS0FBSztBQUNqQyxjQUFNLFVBQVUsUUFBUSxXQUFXO0FBRW5DLFFBQUFBLFNBQU8sT0FBTyxFQUFFLEdBQUcsSUFBSSxLQUFLLFNBQVMsU0FBUztBQUM5QyxnQkFBUSxTQUFTO0FBQ2pCLFFBQUFBLFNBQU8sT0FBTyxFQUFFLEdBQUcsS0FBSyxTQUFTLFNBQVM7QUFBQSxNQUM5QyxDQUFDO0FBQUEsSUFHTCxDQUFDO0FBTUQsYUFBUyxzQkFBc0IsV0FBWTtBQUV2QyxpQkFBVyxNQUFNO0FBQ2IsWUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBRTNDLGNBQU0sWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFRdEIsQ0FBQztBQUVELGVBQVMsZUFBZSxXQUFZO0FBRWhDLFdBQUcsZUFBZSxTQUFVLE1BQU07QUFDOUIsY0FBSSxtQkFBbUIsU0FBUyxlQUFlLFdBQVc7QUFDMUQsY0FBSSxhQUFhLFNBQVMsY0FBYyxLQUFLO0FBQzdDLHFCQUFXLFlBQVk7QUFFdkIsZ0JBQU0sZ0JBQWdCLGlCQUFpQjtBQUN2QyxnQkFBTSxVQUFVLFdBQVc7QUFFM0IsY0FBSUksS0FBSSxJQUFJO0FBQUEsWUFDUjtBQUFBLFlBQ0E7QUFBQSxjQUNJLFNBQVM7QUFBQSxZQUNiO0FBQUEsVUFDSjtBQUNBLHFCQUFXLE1BQU07QUFDYixZQUFBQSxHQUFFLElBQUksRUFBRSxLQUFLLE1BQU07QUFDZixrQkFBSTtBQUNBLGdCQUFBSixTQUFPLGdCQUFnQixFQUFFLFFBQVEsS0FBSywrQkFBK0I7QUFBQSxjQUN6RSxTQUFTLEdBQUc7QUFDUix1QkFBTyxLQUFLLENBQUM7QUFBQSxjQUNqQjtBQUdBLG1CQUFLO0FBQUEsWUFDVCxDQUFDO0FBQUEsVUFDTCxHQUFHLEdBQUc7QUFBQSxRQXFCVixDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBQUEsRUFHTCxDQUFDOzs7QUN2dkJEO0FBQ0EsRUFBQU87QUFHQSxXQUFTLGNBQWMsV0FBWTtBQUMvQixXQUFPLFNBQVUsTUFBTTtBQUNuQixnQkFBVSxFQUFFLEtBQUssTUFBTTtBQUNuQixhQUFLO0FBQUEsTUFDVCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsYUFBUyx1QkFBdUIsV0FBWTtBQUd4QztBQUFBLFFBQ0ksQ0FBQyxJQUFJO0FBQUEsUUFDTCxDQUFDLGFBQWE7QUFBQSxRQUNkLENBQUMsT0FBTztBQUFBLE1BRVosRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJQyxLQUFJLEtBQUssTUFBTTtBQUduQixXQUFHLHFCQUFxQkEsSUFBRyxXQUFZO0FBQ25DLGNBQUksT0FBTyxTQUFTLHFCQUFxQixNQUFNO0FBQy9DLGNBQUksT0FBTyxLQUFLLEtBQUssQ0FBQztBQUV0QixlQUFLLGFBQWEsUUFBUUEsRUFBQztBQUMzQixpQkFBTyxvQkFBb0IsRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTUEsRUFBQztBQUFBLFFBQzFELENBQUM7QUFBQSxNQUdMLENBQUM7QUFBQSxJQUdMLENBQUM7QUFHRCxPQUFHLHNCQUFzQixXQUFZO0FBQ2pDLFVBQUksT0FBTyxTQUFTLHFCQUFxQixNQUFNO0FBQy9DLFVBQUksT0FBTyxLQUFLLEtBQUssQ0FBQztBQUN0QixVQUFJLE9BQU0sS0FBSyxhQUFhLE1BQU07QUFFbEMsV0FBSyxnQkFBZ0IsTUFBTTtBQUMzQixZQUFNLFNBQVMsb0JBQW9CO0FBQ25DLGFBQU8sTUFBTSxFQUFFLEdBQUcsR0FBRyxXQUFXLE1BQU07QUFDdEMsYUFBTyxPQUFPLFlBQVksRUFBRSxHQUFHLEdBQUcsTUFBTSxVQUFVLFFBQVE7QUFFMUQsV0FBSyxhQUFhLFFBQVEsSUFBSTtBQUFBLElBRWxDLENBQUM7QUFBQSxFQUdMLENBQUM7OztBQ3hERDtBQUdBO0FBRUEsV0FBUyxTQUFTLFdBQVk7QUFDMUIsV0FBTyxTQUFVLE1BQU07QUFDbkIsZ0JBQVUsRUFBRSxLQUFLLE1BQU07QUFDbkIsYUFBSztBQUFBLE1BQ1QsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMsZUFBZSxXQUFZO0FBQ2hDLFNBQUcsOEJBQThCLFdBQVk7QUFDekMsZUFBTyxJQUFJLE1BQU0sVUFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLFdBQVcsS0FBSztBQUFBLE1BQ3ZELENBQUM7QUFDRCxTQUFHLDRCQUE0QixXQUFZO0FBQ3ZDLGVBQU8sSUFBSSxNQUFNLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxHQUFHLE1BQU0sVUFBVTtBQUFBLE1BQy9ELENBQUM7QUFDRCxTQUFHLDZDQUE2QyxXQUFZO0FBQ3hELGVBQU8sTUFBTSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEdBQUcsTUFBTSxTQUFTO0FBQUEsTUFDaEQsQ0FBQztBQUNELFNBQUcsaURBQWlELFdBQVk7QUFDNUQsZUFBTyxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sU0FBUztBQUFBLE1BQ2pELENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxhQUFTLHNCQUFzQixXQUFZO0FBQ3ZDLFNBQUcsOEJBQThCLFdBQVk7QUFDekMsZUFBTyxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLEtBQUs7QUFBQSxNQUNwRCxDQUFDO0FBRUQsU0FBRyxvQ0FBb0MsV0FBWTtBQUMvQyxlQUFPLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxFQUFFLEdBQUcsTUFBTSxTQUFTO0FBQUEsTUFDM0QsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUVELGFBQVMsc0JBQXNCLFdBQVk7QUFFdkMsaUJBQVcsTUFBTTtBQUNiLGlCQUFTLGNBQWMsTUFBTSxFQUFFLGFBQWEsMkJBQTJCLFdBQVc7QUFBQSxNQUN0RixDQUFDO0FBRUQsZ0JBQVUsTUFBTTtBQUNaLGlCQUFTLGNBQWMsTUFBTSxFQUFFLGdCQUFnQix5QkFBeUI7QUFBQSxNQUM1RSxDQUFDO0FBRUQsU0FBRyxzQ0FBc0MsV0FBWTtBQUNqRCxlQUFPLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxFQUFFLEdBQUcsTUFBTSxXQUFXO0FBQUEsTUFDN0QsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUFBLEVBQ0wsQ0FBQzs7O0FDcEREO0FBQ0EsRUFBQUM7QUFDQTtBQUNBO0FBQ0E7QUFLQSxNQUFJQyxXQUFTLGFBQUs7QUFDbEIsZUFBSyxJQUFJLE9BQU87QUFFaEIsTUFBSUMsVUFBUTtBQUFBO0FBQUE7QUFBQTtBQUtaLE1BQUlDLFNBQVE7QUFBQTtBQUFBO0FBS1osTUFBTSxtQkFBbUI7QUFDekIsTUFBTSxzQkFBc0IsT0FBTyxJQUFJLGdCQUFnQjtBQUl2RCxXQUFTLE9BQU8sV0FBWTtBQUV4QixRQUFJQyxnQkFBZUMsd0JBQXVCLGVBQWVDLFdBQVUsZ0JBQWU7QUFHbEYsYUFBUywwQkFBMEIsV0FBWTtBQUUzQyxhQUFPLFNBQVUsTUFBTTtBQUNuQixrQkFBVSxFQUFFLEtBQUssTUFBTTtBQUNuQixzRkFBZ0QsS0FBSyxDQUFDLE1BQU07QUFDeEQsZ0JBQUk7QUFDQSxjQUFBRixpQkFBZ0IsRUFBRSxlQUFlO0FBQ2pDLHVDQUF3QixTQUFVLFVBQVUsUUFBUTtBQUNoRCx1QkFBTyw4QkFBOEIsS0FBSyxNQUFNLFVBQVUscUJBQXFCLE1BQU07QUFBQSxjQUN6RjtBQUdBLGNBQUFFLFlBQVcsWUFBWTtBQUV2QixtQkFBSztBQUFBLFlBQ1QsU0FBUyxHQUFHO0FBQ1IsbUJBQUssQ0FBQztBQUFBLFlBQ1Y7QUFBQSxVQUdKLENBQUM7QUFBQSxRQUVMLENBQUM7QUFBQSxNQUNMLENBQUM7QUFFRCxpQkFBVyxNQUFNO0FBQ2IsWUFBSSxRQUFRQSxVQUFTLGVBQWUsT0FBTztBQUMzQyxjQUFNLFlBQVlIO0FBQUEsTUFDdEIsQ0FBQztBQUVELGdCQUFVLE1BQU07QUFDWixZQUFJLFFBQVFHLFVBQVMsZUFBZSxPQUFPO0FBQzNDLGNBQU0sWUFBWTtBQUFBLE1BQ3RCLENBQUM7QUFRRCxTQUFHLDBDQUEwQyxTQUFVLE1BQU07QUFDekQsWUFBSSxVQUFVQSxVQUFTLGVBQWUsT0FBTztBQUU3QyxRQUFBTCxTQUFPSyxVQUFTLGVBQWUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU1ILE1BQUs7QUFFakUsY0FBTUksS0FBSSxFQUFDLEdBQUcsRUFBQztBQUNmLGNBQU0sSUFBSSxFQUFDLEdBQUcsRUFBQztBQUVmLGNBQU0sS0FBSyxJQUFJLGNBQWNBLEVBQUM7QUFDOUIsY0FBTSxLQUFLLElBQUksY0FBYyxDQUFDO0FBRTlCLGNBQU0sSUFBSSxHQUFHLFdBQVc7QUFDeEIsY0FBTSxJQUFJLEdBQUcsV0FBVztBQUV4QixjQUFNLE1BQU0sb0JBQUksSUFBSTtBQUNwQixZQUFJLElBQUksT0FBTztBQUVmLCtCQUF1QixLQUFLLFNBQVMsS0FBSyxFQUFFO0FBQzVDLCtCQUF1QixLQUFLLFNBQVMsS0FBSyxFQUFFO0FBRTVDLFFBQUFOLFNBQU8sS0FBSyxVQUFVLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxTQUFTO0FBQzVDLFFBQUFBLFNBQU8sS0FBSyxVQUFVLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxTQUFTO0FBRTVDLGNBQU0sS0FBSztBQUVYLFlBQUksSUFBSSxRQUFRLGFBQWEseUJBQXlCO0FBQ3RELFFBQUFBLFNBQU8sQ0FBQyxFQUFFLEdBQUcsTUFBTSxZQUFVLG1CQUFpQixHQUFHO0FBRWpELGNBQU0sVUFBVSxRQUFRLEVBQUU7QUFFMUIsbUJBQVdPLE1BQUssU0FBUztBQUNyQixxQkFBVyxLQUFLQSxJQUFHO0FBQ2YsY0FBRSxJQUFJLEVBQUUsS0FBSyxNQUFNO0FBQ2YsZ0JBQUUsc0JBQXNCO0FBQUEsWUFDNUIsQ0FBQztBQUFBLFVBQ0w7QUFBQSxRQUNKO0FBRUEsUUFBQVAsU0FBTyxPQUFPLEVBQUUsR0FBRyxHQUFHLEdBQUcsV0FBVyxHQUFHO0FBQ3ZDLFFBQUFBLFNBQU8sT0FBTyxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUs7QUFFN0IsVUFBRSxJQUFJO0FBQ04sV0FBRyxXQUFXLEVBQUUsSUFBSTtBQUVwQixtQkFBVyxNQUFNO0FBRWIsY0FBSSxXQUFXSyxVQUFTLGVBQWUsT0FBTztBQUs5QyxVQUFBTCxTQUFPLFNBQVMsY0FBYyxRQUFRLENBQUMsRUFBRSxHQUFHLEtBQUssTUFBTSxHQUFHO0FBQzFELFVBQUFBLFNBQU8sU0FBUyxjQUFjLFFBQVEsQ0FBQyxFQUFFLEdBQUcsS0FBSyxVQUFVLDJCQUEyQixZQUFVLG1CQUFpQixHQUFHO0FBR3BILFVBQUFBLFNBQU8sUUFBUSxLQUFLLEVBQUUsR0FBRyxNQUFNLEdBQUc7QUFFbEMsVUFBQUEsU0FBTyxLQUFLLFVBQVUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxTQUFTO0FBQzlELFVBQUFBLFNBQU8sS0FBSyxVQUFVLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sU0FBUztBQUM5RCxlQUFLO0FBQUEsUUFDVCxHQUFHLEVBQUU7QUFBQSxNQUVULENBQUM7QUFBQSxJQUVMLENBQUM7QUFHRCxhQUFTLG1CQUFtQixXQUFZO0FBRXBDLGFBQU8sU0FBVSxNQUFNO0FBQ25CLGtCQUFVLEVBQUUsS0FBSyxNQUFNO0FBRW5CLHNGQUFnRCxLQUFLLENBQUMsTUFBTTtBQUV4RCxnQkFBSTtBQUNBLGNBQUFHLGlCQUFnQixFQUFFLGVBQWU7QUFDakMsY0FBQUMseUJBQXdCLEVBQUUsdUJBQXVCO0FBQ2pELDhCQUFnQixjQUFjRCxlQUFjO0FBQUEsZ0JBQ3hDLE9BQU8sU0FBUztBQUNaLHlCQUFPO0FBQUEsZ0JBQ1g7QUFBQSxjQUNKO0FBRUEsY0FBQUMsdUJBQXNCLGFBQWE7QUFFbkMsK0JBQWlCLGNBQWNELGVBQWM7QUFBQSxnQkFDekMsT0FBTyxTQUFTO0FBQ1oseUJBQU87QUFBQSxnQkFDWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBTUEsSUFBSSxXQUFXO0FBRVgseUJBQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxNQUFNLFVBQVU7QUFBQSxvQkFDckMsVUFBVTtBQUFBLG9CQUNWLFdBQVc7QUFBQSxzQkFDUCxNQUFNO0FBQUEsb0JBQ1Y7QUFBQSxrQkFDSixDQUFDO0FBQUEsZ0JBQ0w7QUFBQSxjQUVKO0FBRUEsY0FBQUMsdUJBQXNCLGNBQWM7QUFFcEMsY0FBQUMsWUFBVyxZQUFZO0FBQ3ZCLG1CQUFLO0FBQUEsWUFDVCxTQUFTLEdBQUc7QUFDUixtQkFBSyxDQUFDO0FBQUEsWUFDVjtBQUFBLFVBR0osQ0FBQztBQUFBLFFBRUwsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUVELGlCQUFXLE1BQU07QUFDYixZQUFJLFFBQVFBLFVBQVMsZUFBZSxPQUFPO0FBQzNDLGNBQU0sWUFBWUo7QUFBQSxNQUN0QixDQUFDO0FBRUQsZ0JBQVUsTUFBTTtBQUNaLFlBQUksUUFBUUksVUFBUyxlQUFlLE9BQU87QUFDM0MsY0FBTSxZQUFZO0FBQUEsTUFDdEIsQ0FBQztBQUVELGVBQVMsK0JBQStCLFdBQVk7QUFDaEQsV0FBRywrQkFBK0IsV0FBWTtBQUUxQyxjQUFJLFFBQVFBLFVBQVMsZUFBZSxPQUFPO0FBQzNDLGdCQUFNLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVlsQixjQUFJLFVBQVVBLFVBQVMsZUFBZSxhQUFhO0FBQ25ELFVBQUFMLFNBQU8sUUFBUSxVQUFVLFVBQVUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxJQUFJO0FBQUEsUUFFckQsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUVELGVBQVMsVUFBVSxXQUFZO0FBQzNCLFdBQUcsdUNBQXVDLFdBQVk7QUFDbEQsY0FBSVEsS0FBSSxJQUFJLGNBQWM7QUFDMUIsVUFBQVIsU0FBTyxPQUFPUSxFQUFDLEVBQUUsR0FBRyxNQUFNLFFBQVE7QUFBQSxRQUN0QyxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBRUQsZUFBUyx5QkFBeUIsV0FBWTtBQUMxQyxXQUFHLDZDQUE2QyxXQUFZO0FBQ3hELGNBQUlBLEtBQUlILFVBQVMsY0FBYyxtQkFBbUI7QUFDbEQsVUFBQUEsVUFBUyxlQUFlLE9BQU8sRUFBRSxZQUFZRyxFQUFDO0FBQzlDLFVBQUFSLFNBQU9LLFVBQVMscUJBQXFCLG1CQUFtQixFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUc1RSxVQUFBTCxTQUFPSyxVQUFTLGVBQWUsT0FBTyxDQUFDLEVBQUUsUUFBUSxLQUFLLHNGQUFzRjtBQUFBLFFBQ2hKLENBQUM7QUFBQSxNQUNMLENBQUM7QUFFRCxlQUFTLDZCQUE2QixXQUFZO0FBQzlDLFdBQUcsOENBQThDLFNBQVUsTUFBTTtBQUM3RCxjQUFJRyxLQUFJSCxVQUFTLGNBQWMsb0JBQW9CO0FBQ25ELFVBQUFBLFVBQVMsZUFBZSxPQUFPLEVBQUUsWUFBWUcsRUFBQztBQUc5QyxxQkFBVyxXQUFZO0FBQ25CLGdCQUFJO0FBQ0EsY0FBQVIsU0FBT0ssVUFBUyxxQkFBcUIsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBQzdFLGNBQUFMLFNBQU9LLFVBQVMscUJBQXFCLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxFQUFFLFdBQVcsU0FBUyxFQUFFLEdBQUcsTUFBTSxtRUFBbUU7QUFDckssY0FBQUwsU0FBT0ssVUFBUyxlQUFlLE9BQU8sQ0FBQyxFQUFFLFFBQVEsS0FBSyx5REFBdUQsbUJBQWlCLDBCQUEwQjtBQUN4SixxQkFBTyxLQUFLO0FBQUEsWUFDaEIsU0FBUyxHQUFHO0FBQ1IsbUJBQUssQ0FBQztBQUFBLFlBQ1Y7QUFBQSxVQUVKLEdBQUcsRUFBRTtBQUFBLFFBRVQsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUVELGVBQVMsa0JBQWtCLFdBQVk7QUFFbkMsV0FBRyxtREFBbUQsV0FBWTtBQUM5RCxjQUFJLFVBQVVBLFVBQVMsY0FBYyxtQkFBbUI7QUFFeEQsZ0JBQU0sSUFBSSxRQUFRLGNBQWMsRUFBRTtBQUNsQyxVQUFBTCxTQUFPLE9BQU8sR0FBRyxRQUFRLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUVoRSxVQUFBQSxTQUFPLFFBQVEsY0FBYyxFQUFFLFlBQVksUUFBUSxjQUFjLEVBQUUsR0FBRyxHQUFHO0FBQ3pFLFVBQUFBLFNBQU8sUUFBUSxjQUFjLEVBQUUsUUFBUSxRQUFRLGNBQWMsRUFBRSxHQUFHLEdBQUc7QUFDckUsVUFBQUEsU0FBTyxRQUFRLFVBQVUsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDbEQsVUFBQUEsU0FBTyxPQUFPLEdBQUcsUUFBUSxjQUFjLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFBQSxRQVNwRSxDQUFDO0FBQUEsTUFHTCxDQUFDO0FBRUQsZUFBUyxnQkFBZ0IsV0FBWTtBQUNqQztBQUFBLFVBQ0ksQ0FBQyxjQUFjLElBQUk7QUFBQSxVQUNuQixDQUFDLGtCQUFrQixJQUFJO0FBQUE7QUFBQSxVQUN2QixDQUFDLGtCQUFrQixJQUFJO0FBQUEsUUFDM0IsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUd0QixjQUFJLE1BQU0sS0FBSyxNQUFNO0FBQ3JCLGNBQUksV0FBVyxLQUFLLE1BQU07QUFFMUIsY0FBSSxPQUFPLE1BQU0sb0JBQW9CO0FBQ3JDLGNBQUksYUFBYSxRQUFXO0FBQ3hCLG1CQUFPLE1BQU0scUNBQXFDO0FBQUEsVUFDdEQ7QUFHQSxhQUFHLE1BQU0sV0FBWTtBQUVqQixnQkFBSVEsS0FBSUgsVUFBUyxjQUFjLG1CQUFtQjtBQUNsRCxZQUFBTCxTQUFPUSxHQUFFLFVBQVUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksTUFBTSxRQUFRO0FBQ2pELGdCQUFJLElBQUlBLEdBQUUsVUFBVSxLQUFLLFFBQVE7QUFDakMsWUFBQVIsU0FBT1EsR0FBRSxVQUFVLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLFFBQVE7QUFBQSxVQUNqRCxDQUFDO0FBQUEsUUFHTCxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBRUQsZUFBUyxnQkFBZ0IsV0FBWTtBQUVqQztBQUFBLFVBQ0ksQ0FBQyxjQUFjLE1BQU07QUFBQSxVQUNyQixDQUFDLGtCQUFrQixNQUFTO0FBQUE7QUFBQSxVQUM1QixDQUFDLGtCQUFrQixJQUFJO0FBQUEsVUFDdkIsQ0FBQyxTQUFTLE1BQU0sSUFBSTtBQUFBO0FBQUEsVUFDcEIsQ0FBQyxLQUFLLE1BQU0sSUFBSTtBQUFBO0FBQUEsUUFDcEIsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUd0QixjQUFJLE1BQU0sS0FBSyxNQUFNO0FBQ3JCLGNBQUksUUFBUSxLQUFLLE1BQU07QUFDdkIsY0FBSSxlQUFlLEtBQUssTUFBTTtBQUU5QixjQUFJLE9BQU8sTUFBTSxvQkFBb0I7QUFDckMsY0FBSSxpQkFBaUIsUUFBVztBQUM1QixtQkFBTyxNQUFNLHFDQUFxQztBQUFBLFVBQ3REO0FBR0EsYUFBRyxNQUFNLFdBQVk7QUFFakIsZ0JBQUlBLEtBQUlILFVBQVMsY0FBYyxtQkFBbUI7QUFDbEQsZ0JBQUksSUFBSUcsR0FBRSxVQUFVLEtBQUssWUFBWTtBQUNyQyxZQUFBUixTQUFPLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSxLQUFLO0FBQUEsVUFDL0IsQ0FBQztBQUFBLFFBR0wsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUtELGVBQVMsNENBQTRDLFdBQVk7QUFFN0QsY0FBTSxVQUFVO0FBRWhCLFlBQUksT0FBTztBQUNYLG1CQUFXLE1BQU07QUFFYixrQkFBUUssVUFBUyxlQUFlLE9BQU87QUFDdkMsZ0JBQU0sWUFBWUo7QUFHbEIsNEJBQWtCLGNBQWNFLGVBQWM7QUFBQSxZQUMxQyxPQUFPLFNBQVM7QUFDWixxQkFBTztBQUFBLFlBQ1g7QUFBQSxZQUVBLE9BQU8sbUJBQW1CO0FBQ3RCLHFCQUFPLENBQUMsSUFBSTtBQUFBLFlBQ2hCO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFLQSxJQUFJLFdBQVc7QUFFWCxxQkFBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sVUFBVTtBQUFBLGdCQUNyQyxXQUFXO0FBQUEsa0JBQ1AsTUFBTTtBQUFBLGdCQUNWO0FBQUEsY0FDSixDQUFDO0FBQUEsWUFDTDtBQUFBLFVBRUo7QUFFQSxVQUFBQyx1QkFBc0IsZUFBZTtBQUFBLFFBR3pDLENBQUM7QUFFRCxXQUFHLFVBQVUsMkJBQTJCLFNBQVUsTUFBTTtBQUNwRCxjQUFJSSxLQUFJSCxVQUFTLGNBQWMsT0FBTztBQUV0QyxjQUFJLE1BQU1BLFVBQVMsZUFBZSxPQUFPO0FBQ3pDLGNBQUksT0FBT0csRUFBQztBQUdaLFVBQUFSLFNBQU8sR0FBRyxFQUFFLFFBQVEsS0FBSywyRUFBMkU7QUFDcEcsZUFBSztBQUFBLFFBRVQsQ0FBQztBQUFBLE1BR0wsQ0FBQztBQU1ELGVBQVMsOENBQThDLFdBQVk7QUFFL0QsY0FBTSxVQUFVO0FBRWhCLFlBQUksT0FBTztBQUNYLG1CQUFXLE1BQU07QUFFYixrQkFBUUssVUFBUyxlQUFlLE9BQU87QUFDdkMsZ0JBQU0sWUFBWUo7QUFFbEIsZ0NBQXNCLGNBQWNFLGVBQWM7QUFBQSxZQUM5QyxPQUFPLFNBQVM7QUFDWixxQkFBTztBQUFBLFlBQ1g7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUtBLElBQUksV0FBVztBQUNYLHFCQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxVQUFVO0FBQUEsZ0JBQ3JDLFdBQVcsRUFBQyxNQUFNLGdCQUFlO0FBQUEsY0FDckMsQ0FBQztBQUFBLFlBQ0w7QUFBQSxZQUdBLE9BQU8sbUJBQW1CO0FBRXRCLG9CQUFNLElBQUssSUFBSSxjQUFjO0FBQzdCLGdCQUFFLFdBQVcsa0JBQWtCO0FBRS9CLHFCQUFPLENBQUMsQ0FBQztBQUFBLFlBQ2I7QUFBQSxVQUNKO0FBRUEsVUFBQUMsdUJBQXNCLG1CQUFtQjtBQUFBLFFBRzdDLENBQUM7QUFFRCxXQUFHLFVBQVUsNkJBQTZCLFNBQVUsTUFBTTtBQUN0RCxjQUFJSSxLQUFJSCxVQUFTLGNBQWMsT0FBTztBQUV0QyxjQUFJLE1BQU1BLFVBQVMsZUFBZSxPQUFPO0FBQ3pDLGNBQUksT0FBT0csRUFBQztBQUVaLFVBQUFSLFNBQU9RLEdBQUUsV0FBVyxTQUFTLEVBQUUsR0FBRyxHQUFHLGVBQWU7QUFDcEQsZUFBSztBQUFBLFFBRVQsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUtELGVBQVMsOENBQThDLFdBQVk7QUFFL0QsY0FBTSxVQUFVO0FBRWhCLFlBQUksT0FBTztBQUNYLG1CQUFXLE1BQU07QUFFYixrQkFBUUgsVUFBUyxlQUFlLE9BQU87QUFDdkMsZ0JBQU0sWUFBWUo7QUFFbEIsaUNBQXVCLGNBQWNFLGVBQWM7QUFBQSxZQUMvQyxPQUFPLFNBQVM7QUFDWixxQkFBTztBQUFBLFlBQ1g7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUtBLElBQUksV0FBVztBQUNYLHFCQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxVQUFVO0FBQUEsZ0JBQ3JDLFdBQVcsRUFBQyxNQUFNLGdCQUFlO0FBQUEsY0FDckMsQ0FBQztBQUFBLFlBQ0w7QUFBQSxZQUdBLE9BQU8sbUJBQW1CO0FBQ3RCLHFCQUFPO0FBQUEsWUFDWDtBQUFBLFVBQ0o7QUFFQSxVQUFBQyx1QkFBc0Isb0JBQW9CO0FBQUEsUUFHOUMsQ0FBQztBQUVELFdBQUcsVUFBVSwwREFBMEQsU0FBVSxNQUFNO0FBQ25GLGNBQUlJLEtBQUlILFVBQVMsY0FBYyxPQUFPO0FBRXRDLGNBQUksTUFBTUEsVUFBUyxlQUFlLE9BQU87QUFDekMsY0FBSSxPQUFPRyxFQUFDO0FBR1osVUFBQVIsU0FBT1EsR0FBRSxXQUFXLFNBQVMsRUFBRSxHQUFHLEdBQUcsNkNBQTZDO0FBQ2xGLGVBQUs7QUFBQSxRQUVULENBQUM7QUFBQSxNQUNMLENBQUM7QUFJRCxlQUFTLDhDQUE4QyxXQUFZO0FBRS9ELGNBQU0sVUFBVTtBQUVoQixZQUFJLE9BQU87QUFDWCxtQkFBVyxNQUFNO0FBRWIsa0JBQVFILFVBQVMsZUFBZSxPQUFPO0FBQ3ZDLGdCQUFNLFlBQVlKO0FBRWxCLGtDQUF3QixjQUFjRSxlQUFjO0FBQUEsWUFDaEQsT0FBTyxTQUFTO0FBQ1oscUJBQU87QUFBQSxZQUNYO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFLQSxJQUFJLFdBQVc7QUFDWCxxQkFBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sVUFBVTtBQUFBLGdCQUNyQyxXQUFXLEVBQUMsTUFBTSxnQkFBZTtBQUFBLGNBQ3JDLENBQUM7QUFBQSxZQUNMO0FBQUEsWUFHQSxPQUFPLG1CQUFtQjtBQUN0QixxQkFBTyxDQUFDLGlCQUFpQjtBQUFBLFlBQzdCO0FBQUEsVUFDSjtBQUVBLFVBQUFDLHVCQUFzQixxQkFBcUI7QUFBQSxRQUcvQyxDQUFDO0FBRUQsV0FBRyxVQUFVLDBEQUEwRCxTQUFVLE1BQU07QUFDbkYsY0FBSUksS0FBSUgsVUFBUyxjQUFjLE9BQU87QUFFdEMsY0FBSSxNQUFNQSxVQUFTLGVBQWUsT0FBTztBQUN6QyxjQUFJLE9BQU9HLEVBQUM7QUFHWixVQUFBUixTQUFPUSxHQUFFLFdBQVcsU0FBUyxFQUFFLEdBQUcsR0FBRyw2Q0FBNkM7QUFDbEYsZUFBSztBQUFBLFFBRVQsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUVELGVBQVMsYUFBYSxXQUFZO0FBRTlCLFlBQUk7QUFDSixtQkFBVyxNQUFNO0FBRWIsa0JBQVFILFVBQVMsZUFBZSxPQUFPO0FBQ3ZDLGdCQUFNLFlBQVlKO0FBQUEsUUFFdEIsQ0FBQztBQUVELFdBQUcsK0NBQStDLFdBQVk7QUFDMUQsY0FBSU8sS0FBSUgsVUFBUyxjQUFjLG1CQUFtQjtBQUVsRCxjQUFJLEtBQUtBLFVBQVMsY0FBYyxHQUFHO0FBQ25DLGNBQUksS0FBS0EsVUFBUyxlQUFlLE9BQU87QUFDeEMsYUFBRyxZQUFZLEVBQUU7QUFFakIsY0FBSSxJQUFJQSxVQUFTLGNBQWMsS0FBSztBQUNwQyxjQUFJLElBQUlBLFVBQVMsZUFBZSxNQUFNO0FBQ3RDLFlBQUUsWUFBWSxFQUFFO0FBQ2hCLFlBQUUsWUFBWSxDQUFDO0FBQ2YsVUFBQUcsR0FBRSxZQUFZLENBQUM7QUFFZixjQUFJLE1BQU1ILFVBQVMsZUFBZSxPQUFPO0FBQ3pDLGNBQUksT0FBT0csRUFBQztBQUdaLGNBQUksS0FBS0gsVUFBUyxjQUFjLEdBQUc7QUFFbkMsVUFBQUwsU0FBT1EsR0FBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUM1QixVQUFBUixTQUFPUSxHQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQzNCLFVBQUFSLFNBQU9RLEdBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDM0IsVUFBQVIsU0FBT1EsR0FBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUM1QixVQUFBUixTQUFPUSxHQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQUEsUUFFaEMsQ0FBQztBQUVELFdBQUcsZ0RBQWdELFdBQVk7QUFDM0QsY0FBSUEsS0FBSUgsVUFBUyxjQUFjLG9CQUFvQjtBQUVuRCxjQUFJLEtBQUtBLFVBQVMsY0FBYyxHQUFHO0FBQ25DLGNBQUksS0FBS0EsVUFBUyxlQUFlLE9BQU87QUFDeEMsYUFBRyxZQUFZLEVBQUU7QUFFakIsY0FBSSxJQUFJQSxVQUFTLGNBQWMsS0FBSztBQUNwQyxjQUFJLElBQUlBLFVBQVMsZUFBZSxNQUFNO0FBQ3RDLFlBQUUsWUFBWSxFQUFFO0FBQ2hCLFlBQUUsWUFBWSxDQUFDO0FBR2YsY0FBSSxNQUFNQSxVQUFTLGVBQWUsT0FBTztBQUN6QyxjQUFJLE9BQU9HLEVBQUM7QUFFWixjQUFJRixLQUFJRSxHQUFFLFdBQVcsZUFBZSxXQUFXO0FBRS9DLFVBQUFBLEdBQUUsV0FBVyxlQUFlLFdBQVcsRUFBRSxZQUFZLENBQUM7QUFFdEQsY0FBSSxLQUFLSCxVQUFTLGNBQWMsR0FBRztBQUVuQyxVQUFBTCxTQUFPUSxHQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQzVCLFVBQUFSLFNBQU9RLEdBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDM0IsVUFBQVIsU0FBT1EsR0FBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUMzQixVQUFBUixTQUFPUSxHQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQzVCLFVBQUFSLFNBQU9RLEdBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFBQSxRQUVoQyxDQUFDO0FBQUEsTUFHTCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBQUEsRUFDTCxDQUFDOzs7QUMxbkJEO0FBSUEsV0FBUyxnQkFBZ0IsV0FBWTtBQUNqQyxXQUFPLFNBQVUsTUFBTTtBQUNuQixnQkFBVSxFQUFFLEtBQUssTUFBTTtBQUNuQixhQUFLO0FBQUEsTUFDVCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsZUFBVyxNQUFNO0FBQ2IscUNBQStCO0FBQUEsSUFDbkMsQ0FBQztBQUVELGNBQVUsTUFBTTtBQUNaLDRCQUFzQjtBQUN0QixlQUFTLGVBQWUsT0FBTyxFQUFFLFlBQVk7QUFBQSxJQUNqRCxDQUFDO0FBRUQsYUFBUyxPQUFPLFdBQVk7QUFFeEIsU0FBRyxtQ0FBbUMsV0FBWTtBQUM5QyxlQUFPLElBQUksYUFBYSxDQUFDLEVBQUUsR0FBRyxXQUFXLFlBQVk7QUFBQSxNQUN6RCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBRUQsYUFBUyxxQkFBcUIsV0FBWTtBQUN0QyxVQUFJO0FBRUosaUJBQVcsTUFBTTtBQUNiLGtCQUFVLElBQUksYUFBYTtBQUMzQixpQkFBUyxlQUFlLE9BQU8sRUFBRSxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVU3QyxtQkFBVyxDQUFDLEVBQUUsT0FBTyxLQUFLLE9BQU8sUUFBUSxTQUFTLGlCQUFpQixTQUFTLENBQUMsR0FBRztBQUM1RSxrQkFBUSx3QkFBd0IsT0FBTztBQUFBLFlBQ25DLE9BQU87QUFBQSxZQUNQLFFBQVE7QUFBQSxZQUNSLEtBQUs7QUFBQSxZQUNMLE1BQU07QUFBQSxZQUNOLE9BQU87QUFBQSxZQUNQLFFBQVE7QUFBQSxVQUNaO0FBQUEsUUFDSjtBQUFBLE1BRUosQ0FBQztBQUVELFNBQUcsV0FBVyxXQUFZO0FBRXRCLGdCQUFRLE1BQU0sU0FBUyxlQUFlLEtBQUssQ0FBQztBQUM1QyxnQkFBUSxXQUFXO0FBRW5CLGNBQU0sS0FBSyxRQUFRLFVBQVU7QUFDN0IsZUFBTyxHQUFHLGFBQWEsSUFBSSxHQUFHLFFBQVEsRUFBRSxHQUFHLEdBQUcsTUFBTSxLQUFLO0FBRXpELGdCQUFRLE1BQU0sU0FBUyxlQUFlLEtBQUssQ0FBQztBQUU1QyxnQkFBUSxXQUFXO0FBQ25CLGVBQU8sUUFBUSxVQUFVLEVBQUUsYUFBYSxJQUFJLEdBQUcsUUFBUSxFQUFFLEdBQUcsR0FBRyxNQUFNLEtBQUs7QUFDMUUsZ0JBQVEsVUFBVTtBQUNsQixlQUFPLFFBQVEsVUFBVSxFQUFFLGFBQWEsSUFBSSxHQUFHLFFBQVEsRUFBRSxHQUFHLEdBQUcsTUFBTSxLQUFLO0FBQzFFLGdCQUFRLFVBQVU7QUFDbEIsZUFBTyxRQUFRLFVBQVUsRUFBRSxhQUFhLElBQUksR0FBRyxRQUFRLEVBQUUsR0FBRyxHQUFHLE1BQU0sS0FBSztBQUMxRSxnQkFBUSxhQUFhO0FBQ3JCLGVBQU8sUUFBUSxVQUFVLEVBQUUsYUFBYSxJQUFJLEdBQUcsUUFBUSxFQUFFLEdBQUcsR0FBRyxNQUFNLEtBQUs7QUFDMUUsZ0JBQVEsYUFBYTtBQUNyQixlQUFPLFFBQVEsVUFBVSxFQUFFLGFBQWEsSUFBSSxHQUFHLFFBQVEsRUFBRSxHQUFHLEdBQUcsTUFBTSxLQUFLO0FBQzFFLGdCQUFRLGFBQWE7QUFDckIsZUFBTyxRQUFRLFVBQVUsRUFBRSxhQUFhLElBQUksR0FBRyxRQUFRLEVBQUUsR0FBRyxHQUFHLE1BQU0sS0FBSztBQUFBLE1BQzlFLENBQUM7QUFBQSxJQUdMLENBQUM7QUFFRCxhQUFTLGNBQWMsV0FBWTtBQUUvQixVQUFJO0FBRUosaUJBQVcsTUFBTTtBQUNiLHVCQUFlLElBQUksYUFBYTtBQUFBLE1BQ3BDLENBQUM7QUFFRCxTQUFHLGlCQUFpQixXQUFZO0FBRTVCLGVBQU8sYUFBYSxhQUFhLENBQUMsRUFBRSxHQUFHLFdBQVcsS0FBSztBQUN2RCxlQUFPLGFBQWEsVUFBVSxDQUFDLEVBQUUsR0FBRyxXQUFXLFdBQVc7QUFDMUQsZUFBTyxhQUFhLFVBQVUsQ0FBQyxFQUFFLEdBQUcsV0FBVyxZQUFZO0FBQzNELGVBQU8sYUFBYSxVQUFVLENBQUMsRUFBRSxHQUFHLFdBQVcsWUFBWTtBQUMzRCxlQUFPLGFBQWEsV0FBVyxDQUFDLEVBQUUsR0FBRyxXQUFXLFlBQVk7QUFDNUQsZUFBTyxhQUFhLE1BQU0sU0FBUyxJQUFJLENBQUMsRUFBRSxHQUFHLFdBQVcsWUFBWTtBQUNwRSxlQUFPLGFBQWEsYUFBYSxDQUFDLEVBQUUsR0FBRyxXQUFXLFlBQVk7QUFBQSxNQUVsRSxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBQUEsRUFHTCxDQUFDOzs7QUM3R0Q7QUFPQSxXQUFTLHVCQUF1QjtBQUFBLElBRzVCLE1BQU0sc0JBQXNCLFlBQVk7QUFBQSxNQUNwQyxjQUFjO0FBQ1YsY0FBTTtBQUNOLGFBQUssYUFBYSxFQUFDLE1BQU0sT0FBTSxDQUFDO0FBQUEsTUFDcEM7QUFBQSxJQUNKO0FBRUEsUUFBSSxDQUFDLGVBQWUsSUFBSSxnQkFBZ0IsR0FBRztBQUN2QyxxQkFBZSxPQUFPLGtCQUFrQixhQUFhO0FBQUEsSUFDekQ7QUFBQSxFQUNKO0FBRUEsV0FBUyx5QkFBeUI7QUFDOUIsUUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLFVBQU0sWUFBWTtBQUFBLEVBQ3RCO0FBRUEsV0FBUyw0QkFBNEIsTUFBTTtBQUN2QyxXQUFPLENBQUMsU0FBUztBQUNiLGdCQUFVLEVBQUUsS0FBSyxNQUFNO0FBQ25CLDZCQUFxQjtBQUNyQixhQUFLO0FBQUEsTUFDVCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsVUFBTSxNQUFNO0FBQ1IsNkJBQXVCO0FBQUEsSUFDM0IsQ0FBQztBQUVELGVBQVcsTUFBTTtBQUdiLFVBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxZQUFNLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBT2xCLFlBQU0sYUFBYSxTQUFTLGNBQWMsS0FBSztBQUMvQyxlQUFTLEtBQUssWUFBWSxVQUFVO0FBQ3BDLFlBQU0sYUFBYSxXQUFXLGFBQWEsRUFBQyxNQUFNLE9BQU0sQ0FBQztBQUN6RCxZQUFNLGVBQWUsU0FBUyxjQUFjLEtBQUs7QUFDakQsbUJBQWEsS0FBSztBQUNsQixpQkFBVyxZQUFZLFlBQVk7QUFBQSxJQUN2QyxDQUFDO0FBRUQsT0FBRyxnRUFBZ0UsTUFBTTtBQUNyRSxZQUFNLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDN0MsWUFBTSxTQUFTLHlCQUF5QixPQUFPLFFBQVE7QUFDdkQsYUFBTyxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsZUFBZSxRQUFRLENBQUM7QUFBQSxJQUM3RCxDQUFDO0FBRUQsT0FBRyxnRUFBZ0UsTUFBTTtBQUNyRSxZQUFNLGVBQWUsU0FBUyxjQUFjLHVCQUF1QjtBQUNuRSxZQUFNLFNBQVMseUJBQXlCLGNBQWMsT0FBTztBQUM3RCxhQUFPLE1BQU0sRUFBRSxHQUFHLE1BQU0sWUFBWTtBQUFBLElBQ3hDLENBQUM7QUFFRCxPQUFHLHFFQUFxRSxNQUFNO0FBQzFFLFlBQU0sUUFBUSxTQUFTLGVBQWUsT0FBTztBQUM3QyxZQUFNLFNBQVMseUJBQXlCLE9BQU8sYUFBYTtBQUM1RCxhQUFPLE1BQU0sRUFBRSxHQUFHLEdBQUc7QUFBQSxJQUN6QixDQUFDO0FBQUEsRUFDTCxDQUFDOzs7QUN0RUQsTUFBSUM7QUFDSixNQUFJQztBQUVKLFdBQVMsU0FBUyxXQUFZO0FBRTFCLFdBQU8sU0FBVSxNQUFNO0FBQ25CLGdCQUFVLEVBQUUsS0FBSyxNQUFNO0FBRW5CLG9FQUF3QyxLQUFLLENBQUMsTUFBTTtBQUNoRCxVQUFBQSxZQUFXLEVBQUUsVUFBVTtBQUN2QixVQUFBRCxlQUFjLEVBQUUsYUFBYTtBQUM3QixlQUFLO0FBQUEsUUFDVCxDQUFDO0FBQUEsTUFFTCxDQUFDO0FBQUEsSUFHTCxDQUFDO0FBRUQsYUFBUyxZQUFZLFdBQVk7QUFFN0IsU0FBRyxtQkFBbUIsU0FBVSxNQUFNO0FBQ2xDLFFBQUFDLFVBQVMsS0FBSyxJQUFJLEVBQUUsTUFBTSxPQUFLLEtBQUssQ0FBQyxDQUFDO0FBQUEsTUFDMUMsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUVELGFBQVMsZUFBZSxXQUFZO0FBRWhDLFNBQUcsbUJBQW1CLFNBQVUsTUFBTTtBQUNsQyxRQUFBRCxhQUFZLEtBQUssSUFBSSxFQUFFLE1BQU0sT0FBSyxLQUFLLENBQUMsQ0FBQztBQUFBLE1BQzdDLENBQUM7QUFBQSxJQUVMLENBQUM7QUFBQSxFQUdMLENBQUM7OztBQ3pDRDtBQUlBO0FBT0EsV0FBUyxPQUFPLFdBQVk7QUFDeEIsV0FBTyxpQkFBa0I7QUFDckIsZ0JBQVU7QUFBQSxJQUNkLENBQUM7QUFDRCxhQUFTLGlCQUFpQixXQUFZO0FBQ2xDLFNBQUcsaUNBQWlDLFdBQVk7QUFDNUMsWUFBSUUsS0FBSSxZQUFZO0FBQ3BCLGVBQU8sT0FBT0EsRUFBQyxFQUFFLEdBQUcsTUFBTSxRQUFRO0FBQUEsTUFDdEMsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMsZUFBZSxXQUFZO0FBQ2hDLFNBQUcsaUNBQWlDLFdBQVk7QUFDNUMsWUFBSUEsS0FBSSxVQUFVO0FBQ2xCLGVBQU8sT0FBT0EsRUFBQyxFQUFFLEdBQUcsTUFBTSxRQUFRO0FBQUEsTUFDdEMsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMsbUNBQW1DLFdBQVk7QUFHcEQ7QUFBQSxRQUNJLENBQUMsYUFBYTtBQUFBLFFBQ2QsQ0FBQyx5QkFBeUI7QUFBQSxRQUMxQixDQUFDLHFCQUFxQix5QkFBeUI7QUFBQTtBQUFBLE1BQ25ELEVBQUUsUUFBUSxTQUFVLE1BQU07QUFFdEIsWUFBSUMsS0FBSSxLQUFLLE1BQU07QUFDbkIsWUFBSSxJQUFJLEtBQUssTUFBTTtBQUVuQixZQUFJLENBQUM7QUFBRyxjQUFJQTtBQUVaLFdBQUcsMkNBQTJDQSxJQUFHLFdBQVk7QUFDekQsY0FBSSxXQUFXLDhCQUE4QkEsRUFBQztBQUM5QyxpQkFBTyxRQUFRLEVBQUUsR0FBRyxHQUFHLFdBQVcsZ0JBQWdCO0FBRWxELGNBQUksTUFBTSxTQUFTLGNBQWMsS0FBSztBQUN0QyxjQUFJLFlBQVksU0FBUyxVQUFVLElBQUksQ0FBQztBQUN4QyxpQkFBTyxJQUFJLFNBQVMsRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQUEsUUFDdkMsQ0FBQztBQUFBLE1BRUwsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUdELGFBQVMseUJBQXlCLE1BQU07QUFDcEMsVUFBSztBQUVKLGlCQUFXLE1BQU07QUFDYix3QkFBZ0IsWUFBWTtBQUFBLE1BQ2hDLENBQUM7QUFNRixTQUFHLDhEQUE4RCxNQUFNO0FBQ25FLGVBQU8sTUFBTSxzQkFBc0IsSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLDRDQUE0QztBQUFBLE1BQ25HLENBQUM7QUFFRCxTQUFHLHFGQUFxRixNQUFNO0FBQzFGLGNBQU0sVUFBVSxjQUFjLGNBQWMsS0FBSztBQUNqRCxjQUFNLHFCQUFxQixzQkFBc0IsT0FBTztBQUV4RCxlQUFPLGtCQUFrQixFQUFFLEdBQUc7QUFBQSxNQUNsQyxDQUFDO0FBRUQsU0FBRyxxRkFBcUYsTUFBTTtBQUMxRixjQUFNLE9BQU8sY0FBYyxjQUFjLEtBQUs7QUFDOUMsY0FBTSxhQUFhLEtBQUssYUFBYSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3JELGNBQU0sVUFBVSxjQUFjLGNBQWMsTUFBTTtBQUNsRCxtQkFBVyxZQUFZLE9BQU87QUFFOUIsY0FBTSxxQkFBcUIsc0JBQXNCLE9BQU87QUFDeEQsZUFBTyxrQkFBa0IsRUFBRSxHQUFHLElBQUk7QUFBQSxNQUN0QyxDQUFDO0FBRUQsU0FBRyw0RkFBNEYsTUFBTTtBQUNqRyxjQUFNLFlBQVksY0FBYyxjQUFjLEtBQUs7QUFDbkQsY0FBTSxrQkFBa0IsVUFBVSxhQUFhLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFL0QsY0FBTSxZQUFZLGNBQWMsY0FBYyxLQUFLO0FBQ25ELHdCQUFnQixZQUFZLFNBQVM7QUFFckMsY0FBTSxrQkFBa0IsVUFBVSxhQUFhLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFL0QsY0FBTSxVQUFVLGNBQWMsY0FBYyxNQUFNO0FBQ2xELHdCQUFnQixZQUFZLE9BQU87QUFFbkMsY0FBTSxxQkFBcUIsc0JBQXNCLE9BQU87QUFDeEQsZUFBTyxrQkFBa0IsRUFBRSxHQUFHLElBQUk7QUFBQSxNQUN0QyxDQUFDO0FBRUQsU0FBRyx1RUFBdUUsTUFBTTtBQUM1RSxjQUFNLGtCQUFrQixjQUFjLGNBQWMsS0FBSztBQUN6RCx3QkFBZ0IsT0FBTztBQUV2QixjQUFNLHFCQUFxQixzQkFBc0IsZUFBZTtBQUNoRSxlQUFPLGtCQUFrQixFQUFFLEdBQUcsR0FBRztBQUFBLE1BQ3JDLENBQUM7QUFBQSxJQUNMLENBQUM7QUFBQSxFQUVMLENBQUM7OztBQzdHRDtBQU9BLE1BQUlDLFdBQVMsYUFBSztBQUNsQixlQUFLLElBQUksT0FBTztBQWtCaEIsV0FBUyxPQUFPLFdBQVk7QUFFeEIsUUFBSUMsZ0JBQWVDLHdCQUF1QixlQUFlQyxXQUFVLGdCQUFlO0FBRWxGLGFBQVMsd0JBQXdCLFdBQVk7QUFFekMsWUFBTSxrQkFBa0IsaUJBQWUsS0FBSyxNQUFNLEtBQUssT0FBTyxJQUFJLEdBQU87QUFFekUsYUFBTyxTQUFVLE1BQU07QUFDbkIsa0JBQVUsRUFBRSxLQUFLLE1BQU07QUFFbkIsc0ZBQWdELEtBQUssQ0FBQyxNQUFNO0FBRXhELGdCQUFJO0FBQ0EsY0FBQUYsaUJBQWdCLEVBQUUsZUFBZTtBQUNqQyxjQUFBQyx5QkFBd0IsRUFBRSx1QkFBdUI7QUFFakQsK0JBQWlCLGNBQWNELGVBQWM7QUFBQSxnQkFDekMsT0FBTyxTQUFTO0FBQ1oseUJBQU87QUFBQSxnQkFDWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBTUEsSUFBSSxXQUFXO0FBRVgseUJBQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxNQUFNLFVBQVU7QUFBQSxvQkFDckMsTUFBTTtBQUFBLG9CQUNOLFdBQVc7QUFBQSxzQkFDUCxNQUFNO0FBQUEsb0JBQ1Y7QUFBQSxrQkFDSixDQUFDO0FBQUEsZ0JBQ0w7QUFBQSxjQUVKO0FBRUEsY0FBQUMsdUJBQXNCLGNBQWM7QUFFcEMsY0FBQUMsWUFBVyxZQUFZO0FBQ3ZCLG1CQUFLO0FBQUEsWUFDVCxTQUFTLEdBQUc7QUFDUixtQkFBSyxDQUFDO0FBQUEsWUFDVjtBQUFBLFVBR0osQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNO0FBQ1osaUJBQUssQ0FBQztBQUFBLFVBQ1YsQ0FBQztBQUFBLFFBRUwsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUVELGdCQUFVLE1BQU07QUFDWixZQUFJLFFBQVFBLFVBQVMsZUFBZSxPQUFPO0FBQzNDLGNBQU0sWUFBWTtBQUFBLE1BQ3RCLENBQUM7QUFFRCxlQUFTLGlCQUFpQixXQUFZO0FBQ2xDLFdBQUcscURBQXFELFdBQVk7QUFFaEUsY0FBSSxRQUFRQSxVQUFTLGVBQWUsT0FBTztBQUMzQyxnQkFBTSxZQUFZO0FBRWxCLGNBQUksVUFBVUEsVUFBUyxjQUFjLGVBQWU7QUFDcEQsa0JBQVEsYUFBYSw0QkFBNEIsZ0JBQWdCO0FBQ2pFLFVBQUFBLFVBQVMsZUFBZSxXQUFXLEVBQUUsWUFBWSxPQUFPO0FBQ3hELFVBQUFILFNBQU8sUUFBUSxVQUFVLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzFDLFVBQUFBLFNBQU8sUUFBUSxhQUFhLG9CQUFvQixDQUFDLEVBQUUsR0FBRztBQUFBLFFBRTFELENBQUM7QUFFRCxXQUFHLG1EQUFtRCxXQUFZO0FBRTlELGNBQUksUUFBUUcsVUFBUyxlQUFlLE9BQU87QUFDM0MsZ0JBQU0sWUFBWTtBQUVsQixnQkFBTSxZQUFZQSxVQUFTLGVBQWUsZ0JBQWdCO0FBQzFELG9CQUFVLDRCQUE0QixTQUFVQyxVQUFTO0FBQ3JELFlBQUFBLFNBQVEsVUFBVSxRQUFRLENBQUM7QUFBQSxVQUMvQjtBQUVBLGNBQUksVUFBVUQsVUFBUyxjQUFjLGVBQWU7QUFDcEQsa0JBQVEsYUFBYSw0QkFBNEIsZ0JBQWdCO0FBQ2pFLFVBQUFBLFVBQVMsZUFBZSxXQUFXLEVBQUUsWUFBWSxPQUFPO0FBQ3hELFVBQUFILFNBQU8sUUFBUSxVQUFVLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzFDLFVBQUFBLFNBQU8sUUFBUSxhQUFhLG9CQUFvQixDQUFDLEVBQUUsR0FBRztBQUFBLFFBRTFELENBQUM7QUFFRCxXQUFHLDZEQUE2RCxXQUFZO0FBRXhFLGNBQUksUUFBUUcsVUFBUyxlQUFlLE9BQU87QUFDM0MsZ0JBQU0sWUFBWTtBQUVsQixjQUFJLFVBQVVBLFVBQVMsY0FBYyxlQUFlO0FBQ3BELFVBQUFILFNBQU8sUUFBUSxVQUFVLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzFDLGtCQUFRLDRCQUE0QixTQUFVSSxVQUFTO0FBQ25ELFlBQUFBLFNBQVEsVUFBVSxRQUFRLENBQUM7QUFBQSxVQUMvQjtBQUVBLGtCQUFRLGFBQWEsNEJBQTRCLGdCQUFnQjtBQUNqRSxVQUFBRCxVQUFTLGVBQWUsV0FBVyxFQUFFLFlBQVksT0FBTztBQUN4RCxVQUFBSCxTQUFPLFFBQVEsVUFBVSxNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMxQyxVQUFBQSxTQUFPLFFBQVEsYUFBYSxvQkFBb0IsQ0FBQyxFQUFFLEdBQUc7QUFBQSxRQUUxRCxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBQUEsRUFDTCxDQUFDOzs7QUM3SUQ7QUFHQSxXQUFTLG1CQUFtQixNQUFNO0FBRzlCLE9BQUcsd0RBQXdELE1BQU07QUFDN0QsYUFBTyxlQUFlLEVBQUUsR0FBRyxFQUFFLFVBQVU7QUFBQSxJQUMzQyxDQUFDO0FBQUEsRUFHTCxDQUFDOzs7QUNURDtBQWtCQSxNQUFJSztBQUFKLE1BQVdDO0FBQVgsTUFBa0JDO0FBRWxCLFdBQVMsY0FBYyxXQUFZO0FBQy9CLFdBQU8sU0FBVSxNQUFNO0FBRW5CLE1BQUFGLFVBQVE7QUFDUixNQUFBQyxTQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWFSLE1BQUFDLFNBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBY1IsZ0JBQVUsRUFBRSxLQUFLLE1BQU07QUFDbkIsYUFBSztBQUFBLE1BQ1QsQ0FBQyxFQUFFLE1BQU0sT0FBSyxLQUFLLENBQUMsQ0FBQztBQUFBLElBQ3pCLENBQUM7QUFFRCxhQUFTLGNBQWMsV0FBWTtBQUUvQixZQUFNQyxVQUFTLE9BQU8sUUFBUTtBQUU5QixpQkFBVyxNQUFNO0FBQ2IsWUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGNBQU0sWUFBWUg7QUFBQSxNQUN0QixDQUFDO0FBRUQsZ0JBQVUsTUFBTTtBQUNaLFlBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxjQUFNLFlBQVk7QUFBQSxNQUN0QixDQUFDO0FBRUQsU0FBRyw4QkFBOEIsV0FBWTtBQUN6QyxZQUFJLE1BQU0sRUFBQyxHQUFHLEVBQUM7QUFDZixZQUFJLFVBQVUsU0FBUyxlQUFlLE9BQU87QUFDN0MsZUFBTyxjQUFjLFNBQVNHLE9BQU0sQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUM3Qyx3QkFBZ0IsU0FBU0EsU0FBUSxHQUFHO0FBQ3BDLGVBQU8sY0FBYyxTQUFTQSxPQUFNLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFFN0MsWUFBSSxJQUFJLGlCQUFpQixTQUFTQSxPQUFNLEVBQUUsS0FBSztBQUMvQyxlQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxHQUFHO0FBRTVCLHlCQUFpQixTQUFTQSxPQUFNO0FBQ2hDLGVBQU8sY0FBYyxTQUFTQSxPQUFNLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDN0MsZUFBTyxNQUFNLGlCQUFpQixTQUFTQSxPQUFNLENBQUMsRUFBRSxHQUFHLE1BQU0sS0FBSztBQUFBLE1BQ2xFLENBQUM7QUFBQSxJQUdMLENBQUM7QUFFRCxhQUFTLDJCQUEyQixXQUFZO0FBRTVDLFlBQU1BLFVBQVMsT0FBTyxRQUFRO0FBRTlCLGlCQUFXLE1BQU07QUFDYixZQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsY0FBTSxZQUFZRjtBQUFBLE1BQ3RCLENBQUM7QUFFRCxnQkFBVSxNQUFNO0FBQ1osWUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGNBQU0sWUFBWTtBQUFBLE1BQ3RCLENBQUM7QUFFRCxTQUFHLDRCQUE0QixXQUFZO0FBRXZDLFlBQUksT0FBTyxTQUFTLGVBQWUsTUFBTTtBQUN6QyxZQUFJLE9BQU8sU0FBUyxlQUFlLE1BQU07QUFFekMsWUFBSSxNQUFNLENBQUM7QUFFWCxlQUFPLGNBQWMsTUFBTUUsT0FBTSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQzFDLHdCQUFnQixNQUFNQSxTQUFRLEdBQUc7QUFDakMsZUFBTyxjQUFjLE1BQU1BLE9BQU0sQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUUxQyxZQUFJLFVBQVUsc0JBQXNCLElBQUk7QUFDeEMsZUFBTyxPQUFPLEVBQUUsR0FBRyxXQUFXLGNBQWM7QUFDNUMsZUFBTyxRQUFRLGFBQWEsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sTUFBTTtBQUFBLE1BRXpELENBQUM7QUFBQSxJQUVMLENBQUM7QUFFRCxhQUFTLGNBQWMsV0FBWTtBQUMvQixpQkFBVyxNQUFNO0FBQ2IsWUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGNBQU0sWUFBWUQ7QUFBQSxNQUN0QixDQUFDO0FBRUQsZ0JBQVUsTUFBTTtBQUNaLFlBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxjQUFNLFlBQVk7QUFBQSxNQUN0QixDQUFDO0FBRUQsZUFBUywyQkFBMkIsV0FBWTtBQUU1QztBQUFBLFVBQ0ksQ0FBQyxNQUFNLHFCQUFxQixRQUFXLE1BQU07QUFBQSxVQUM3QyxDQUFDLE1BQU0scUJBQXFCLFFBQVEsTUFBTTtBQUFBLFVBQzFDLENBQUMsTUFBTSxxQkFBcUIsUUFBUSxNQUFNO0FBQUEsVUFDMUMsQ0FBQyxNQUFNLHFCQUFxQixRQUFRLE1BQU07QUFBQSxVQUMxQyxDQUFDLE1BQU0scUJBQXFCLFFBQVEsTUFBTTtBQUFBLFVBQzFDLENBQUMsTUFBTSxxQkFBcUIsUUFBVyxNQUFNO0FBQUEsVUFDN0MsQ0FBQyxNQUFNLHFCQUFxQixRQUFRLE1BQU07QUFBQSxRQUM5QyxFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLGNBQUlFLEtBQUksS0FBSyxNQUFNO0FBQ25CLGNBQUksSUFBSSxLQUFLLE1BQU07QUFDbkIsY0FBSSxJQUFJLEtBQUssTUFBTTtBQUNuQixjQUFJQyxLQUFJLEtBQUssTUFBTTtBQUVuQixhQUFHLDRCQUE0QkQsS0FBSSxPQUFPLElBQUksTUFBTSxJQUFJLHFCQUFxQkMsSUFBRyxXQUFZO0FBQ3hGLG1CQUFPLHVCQUF1QixTQUFTLGVBQWVELEVBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxhQUFhLG1CQUFtQixDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU1DLEVBQUM7QUFBQSxVQUNwSCxDQUFDO0FBQUEsUUFHTCxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBRUQsZUFBUyxtQ0FBbUMsV0FBWTtBQUVwRDtBQUFBLFVBQ0ksQ0FBQyxNQUFPLFFBQVEsTUFBTTtBQUFBLFVBQ3RCLENBQUMsTUFBTyxRQUFRLE1BQU07QUFBQSxVQUN0QixDQUFDLE1BQU8sUUFBUSxNQUFNO0FBQUEsVUFDdEIsQ0FBQyxNQUFPLFFBQVEsTUFBTTtBQUFBLFVBQ3RCLENBQUMsTUFBTyxRQUFRLE1BQU07QUFBQSxRQUMxQixFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLGNBQUlELEtBQUksS0FBSyxNQUFNO0FBQ25CLGNBQUksSUFBSSxLQUFLLE1BQU07QUFDbkIsY0FBSSxJQUFJLEtBQUssTUFBTTtBQUNuQixhQUFHLHdCQUF3QkEsS0FBSSxPQUFPLElBQUkscUJBQXFCLEdBQUcsV0FBWTtBQUMxRSxtQkFBTyxtQkFBbUIsU0FBUyxlQUFlQSxFQUFDLEdBQUcsQ0FBQyxFQUFFLGFBQWEsT0FBTyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUFBLFVBQ2pHLENBQUM7QUFBQSxRQUdMLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxhQUFTLGNBQWMsV0FBWTtBQUUvQixpQkFBVyxNQUFNO0FBQ2IsWUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGNBQU0sWUFBWUo7QUFBQSxNQUN0QixDQUFDO0FBRUQsZ0JBQVUsTUFBTTtBQUNaLFlBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxjQUFNLFlBQVk7QUFBQSxNQUN0QixDQUFDO0FBRUQsWUFBTSxjQUFjO0FBRXBCLFNBQUcsNkNBQTZDLFdBQVk7QUFDeEQsWUFBSSxVQUFVLFNBQVMsZUFBZSxPQUFPO0FBQzdDLGVBQU8sUUFBUSxhQUFhLFdBQVcsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNoRCxnQkFBUSxhQUFhLGFBQWEsZUFBZTtBQUNqRCw2QkFBcUIsU0FBUyxhQUFhLFVBQVU7QUFDckQsZUFBTyxRQUFRLGFBQWEsV0FBVyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sd0JBQXdCO0FBQzlFLDZCQUFxQixTQUFTLGFBQWEsVUFBVTtBQUNyRCxlQUFPLFFBQVEsYUFBYSxXQUFXLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSxlQUFlO0FBQUEsTUFDekUsQ0FBQztBQUVELFNBQUcsMENBQTBDLFdBQVk7QUFDckQsWUFBSSxVQUFVLFNBQVMsZUFBZSxPQUFPO0FBQzdDLGVBQU8sUUFBUSxhQUFhLFdBQVcsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNoRCwwQkFBa0IsU0FBUyxhQUFhLFVBQVU7QUFDbEQsZUFBTyxRQUFRLGFBQWEsV0FBVyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sVUFBVTtBQUNoRSwwQkFBa0IsU0FBUyxhQUFhLFNBQVM7QUFDakQsZUFBTyxRQUFRLGFBQWEsV0FBVyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sa0JBQWtCO0FBQUEsTUFDNUUsQ0FBQztBQUVELFNBQUcsNkNBQTZDLFdBQVk7QUFDeEQsWUFBSSxVQUFVLFNBQVMsZUFBZSxPQUFPO0FBQzdDLGdCQUFRLGFBQWEsYUFBYSxzQkFBc0I7QUFDeEQsNkJBQXFCLFNBQVMsYUFBYSxVQUFVO0FBQ3JELGVBQU8sUUFBUSxhQUFhLFdBQVcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLHNCQUFzQjtBQUM1RSw2QkFBcUIsU0FBUyxhQUFhLFNBQVM7QUFDcEQsZUFBTyxRQUFRLGFBQWEsV0FBVyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sY0FBYztBQUFBLE1BRXhFLENBQUM7QUFFRCxTQUFHLCtDQUErQyxXQUFZO0FBQzFELFlBQUksVUFBVSxTQUFTLGVBQWUsT0FBTztBQUM3QyxlQUFPLHVCQUF1QixTQUFTLGFBQWEsVUFBVSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ3ZFLGdCQUFRLGFBQWEsYUFBYSxlQUFlO0FBQ2pELGVBQU8sdUJBQXVCLFNBQVMsYUFBYSxVQUFVLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDdkUsZUFBTyx1QkFBdUIsU0FBUyxhQUFhLFNBQVMsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUN0RSxlQUFPLHVCQUF1QixTQUFTLGFBQWEsT0FBTyxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQUEsTUFFeEUsQ0FBQztBQUVELFNBQUcsK0NBQStDLFdBQVk7QUFDMUQsWUFBSSxVQUFVLFNBQVMsZUFBZSxPQUFPO0FBQzdDLGdCQUFRLGFBQWEsYUFBYSxzQkFBc0I7QUFDeEQsOEJBQXNCLFNBQVMsYUFBYSxVQUFVLFFBQVE7QUFDOUQsZUFBTyxRQUFRLGFBQWEsV0FBVyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sc0JBQXNCO0FBQzVFLDhCQUFzQixTQUFTLGFBQWEsV0FBVyxNQUFNO0FBQzdELGVBQU8sUUFBUSxhQUFhLFdBQVcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLG1CQUFtQjtBQUFBLE1BQzdFLENBQUM7QUFFRCxTQUFHLHNDQUFzQyxXQUFZO0FBQ2pELFlBQUksVUFBVSxTQUFTLGVBQWUsT0FBTztBQUM3QyxnQkFBUSxhQUFhLGFBQWEsZUFBZTtBQUNqRCw2QkFBcUIsU0FBUyxXQUFXO0FBQ3pDLGVBQU8sUUFBUSxhQUFhLFdBQVcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLEVBQUU7QUFBQSxNQUU1RCxDQUFDO0FBQUEsSUFHTCxDQUFDO0FBQUEsRUFDTCxDQUFDOzs7QUN6UEQsTUFBSU07QUFBSixNQUFhO0FBSWIsV0FBUyxZQUFZLFdBQVc7QUFFNUIsV0FBTyxTQUFVLE1BQU07QUFDbkIsZ0JBQVUsRUFBRSxLQUFLLE1BQU07QUFFbkIsMEVBQTJDLEtBQUssQ0FBQyxNQUFNO0FBQ25ELFVBQUFBLFlBQVcsRUFBRSxVQUFVO0FBR3ZCLDRCQUFrQixjQUFlQSxVQUFTO0FBQUEsWUFDdEMsY0FBYztBQUNWLG9CQUFNO0FBQUEsZ0JBQ0YsWUFBWTtBQUFBLGNBQ2hCLENBQUM7QUFBQSxZQUNMO0FBQUEsWUFFQSxPQUFPLGtCQUFrQjtBQUNyQixxQkFBTztBQUFBLFlBQ1g7QUFBQSxVQUNKO0FBRUEsZUFBSztBQUFBLFFBQ1QsQ0FBQztBQUFBLE1BRUwsQ0FBQztBQUFBLElBR0wsQ0FBQztBQUVELGFBQVMsbUJBQW1CLFdBQVk7QUFFcEMsU0FBRyw4QkFBOEIsV0FBWTtBQUN6QyxlQUFPLElBQUksZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxXQUFXQSxTQUFRO0FBQUEsTUFDOUQsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUFBLEVBR0wsQ0FBQzs7O0FDM0NEO0FBSUEsV0FBUyxtQkFBbUIsV0FBWTtBQUVwQyxRQUFJQyxpQkFBZ0I7QUFFcEIsV0FBTyxTQUFVLE1BQU07QUFDbkIsZ0JBQVUsRUFBRSxLQUFLLE1BQU07QUFDbkIsYUFBSztBQUFBLE1BQ1QsQ0FBQyxFQUFFLE1BQU0sT0FBSyxLQUFLLENBQUMsQ0FBQztBQUFBLElBQ3pCLENBQUM7QUFFRCxjQUFVLE1BQU07QUFDWixpQkFBVyxPQUFPLElBQUlBO0FBQ3RCLDRCQUFzQjtBQUFBLElBQzFCLENBQUM7QUFFRCxlQUFXLE1BQU07QUFFYixxQ0FBK0I7QUFFL0IscUJBQWU7QUFDZixNQUFBQSxrQkFBaUIsV0FBVyxPQUFPO0FBQ25DLGlCQUFXLE9BQU8sSUFBSSxTQUFVLEtBQUtDLFVBQVM7QUFFMUMsWUFBSSxDQUFDO0FBQUssZ0JBQU0sSUFBSSxNQUFNLGFBQWE7QUFFdkMsZUFBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDcEMsa0JBQVE7QUFBQSxZQUNKLE1BQU0sV0FBWTtBQUNkLHFCQUFPLEtBQUssVUFBVTtBQUFBLGdCQUNsQixHQUFHO0FBQUEsY0FDUCxDQUFDO0FBQUEsWUFDTDtBQUFBLFlBQ0EsUUFBUTtBQUFBLFVBQ1osQ0FBQztBQUFBLFFBQ0wsQ0FBQztBQUFBLE1BRUw7QUFBQSxJQUVKLENBQUM7QUFFRCxhQUFTLE9BQU8sV0FBWTtBQUN4QixTQUFHLDhEQUE4RCxXQUFZO0FBQ3pFLFlBQUlDLEtBQUksSUFBSSxnQkFBZ0I7QUFDNUIsZUFBT0EsRUFBQyxFQUFFLEdBQUcsR0FBRyxXQUFXLGVBQWU7QUFBQSxNQUM5QyxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsYUFBUyxrQkFBa0IsV0FBWTtBQUVuQyxVQUFJO0FBRUosaUJBQVcsTUFBTTtBQUNiLGtCQUFVLElBQUksZ0JBQWdCO0FBQUEsTUFDbEMsQ0FBQztBQUVELFNBQUcsaURBQWlELFdBQVk7QUFDNUQsZUFBTyxRQUFRLFVBQVUsYUFBYSxDQUFDLEVBQUUsR0FBRyxHQUFHLFdBQVcsZUFBZTtBQUFBLE1BQzdFLENBQUM7QUFFRCxTQUFHLGdEQUFnRCxXQUFZO0FBQzNELGVBQU8sUUFBUSxjQUFjLFdBQVcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxXQUFXLGVBQWU7QUFBQSxNQUMvRSxDQUFDO0FBRUQsU0FBRywrQ0FBK0MsV0FBWTtBQUMxRCxlQUFPLFFBQVEsUUFBUSxZQUFZLENBQUMsRUFBRSxHQUFHLEdBQUcsV0FBVyxlQUFlO0FBQUEsTUFDMUUsQ0FBQztBQUVELGVBQVMscUJBQXFCLFdBQVk7QUFDdEMsV0FBRyw2REFBNkQsV0FBWTtBQUN4RSxpQkFBTyxRQUFRLFVBQVUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEdBQUcsR0FBRyxXQUFXLGVBQWU7QUFBQSxRQUN2RixDQUFDO0FBRUQsV0FBRyw0REFBNEQsV0FBWTtBQUN2RSxpQkFBTyxRQUFRLGNBQWMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEdBQUcsR0FBRyxXQUFXLGVBQWU7QUFBQSxRQUN6RixDQUFDO0FBRUQsV0FBRyw0REFBNEQsV0FBWTtBQUN2RSxpQkFBTyxRQUFRLFFBQVEsWUFBWSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEdBQUcsR0FBRyxXQUFXLGVBQWU7QUFBQSxRQUNwRixDQUFDO0FBQUEsTUFDTCxDQUFDO0FBR0QsZUFBUyxnQ0FBZ0MsV0FBWTtBQUNqRCxXQUFHLDJEQUEyRCxXQUFZO0FBQ3RFLGlCQUFPLFFBQVEsVUFBVSxhQUFhLEVBQUUsVUFBVSxDQUFDLEVBQUUsR0FBRyxHQUFHLFdBQVcsT0FBTztBQUFBLFFBQ2pGLENBQUM7QUFFRCxXQUFHLGlFQUFpRSxXQUFZO0FBQzVFLGlCQUFPLFFBQVEsY0FBYyxXQUFXLEVBQUUsVUFBVSxDQUFDLEVBQUUsR0FBRyxHQUFHLFdBQVcsT0FBTztBQUFBLFFBQ25GLENBQUM7QUFFRCxXQUFHLGlFQUFpRSxXQUFZO0FBQzVFLGlCQUFPLFFBQVEsUUFBUSxZQUFZLEVBQUUsVUFBVSxDQUFDLEVBQUUsR0FBRyxHQUFHLFdBQVcsT0FBTztBQUFBLFFBQzlFLENBQUM7QUFBQSxNQUNMLENBQUM7QUFFRCxlQUFTLG1DQUFtQyxXQUFZO0FBQ3BELFdBQUcsOEJBQThCLFNBQVUsTUFBTTtBQUM3QyxrQkFBUSxRQUFRLGtDQUFrQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsS0FBSyxPQUFLO0FBQ2hGLG1CQUFPLFNBQVMsY0FBYyxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsZ0NBQStCO0FBQ3pGLGlCQUFLO0FBQUEsVUFDVCxDQUFDLEVBQUUsTUFBTSxPQUFLLEtBQUssQ0FBQyxDQUFDO0FBQUEsUUFDekIsQ0FBQztBQUFBLE1BRUwsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUFBLEVBR0wsQ0FBQzs7O0FDOUdEO0FBQ0E7QUFDQTtBQUNBO0FBVUEsTUFBTSxrQkFBa0I7QUFXeEIsTUFBTSxZQUFOLGNBQXdCLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU81QixZQUFZLFVBQVU7QUFDckIsWUFBTTtBQUNOLFdBQUssa0JBQWtCO0FBQ3ZCLHVCQUFpQixVQUFVLGtCQUFrQixrQkFBa0IsQ0FBQztBQUNoRSxXQUFLLFdBQVc7QUFBQSxJQUNqQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUUEsbUJBQW1CLFFBQVE7QUFDMUIscUJBQWUsTUFBTTtBQUNyQixXQUFLLGtCQUFrQjtBQUN2QixhQUFPO0FBQUEsSUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNQSxxQkFBcUI7QUFDcEIsYUFBTyxLQUFLO0FBQUEsSUFDYjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUUEsdUJBQXVCLE1BQU07QUFDNUIsVUFBSSxTQUFTLFFBQVc7QUFDdkIsZUFBTyxJQUFJLGNBQWMsQ0FBQyxDQUFDO0FBQUEsTUFDNUI7QUFFQSx1QkFBaUIsTUFBTSxhQUFhO0FBQ3BDLFlBQU0sV0FBVyxLQUFLLFNBQVMsVUFBVSxJQUFJO0FBQzdDLGFBQU87QUFBQSxJQUNSO0FBQUEsRUFDRDs7O0FDM0VBLFdBQVMsYUFBYSxXQUFZO0FBQzlCLFdBQU8saUJBQWtCO0FBQ3JCLGdCQUFVO0FBQUEsSUFDZCxDQUFDO0FBQ0QsYUFBUyw0QkFBNEIsV0FBWTtBQUM3QyxTQUFHLDhDQUE4QyxXQUFZO0FBRXpELFlBQUksV0FBVyxTQUFTLFlBQVksRUFBRSx5QkFBeUIsOEJBQThCO0FBRTdGLFlBQUksSUFBSSxJQUFJLFVBQVUsUUFBUTtBQUc5QixZQUFJLFlBQVksU0FBUyxjQUFjLEtBQUs7QUFDNUMsa0JBQVUsWUFBWSxFQUFFLHVCQUF1QixFQUFFLFVBQVUsSUFBSSxDQUFDO0FBRWhFLGVBQU8sVUFBVSxTQUFTLEVBQUUsR0FBRyxHQUFHLE1BQU0sOEJBQThCO0FBQUEsTUFDMUUsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMsNEJBQTRCLFdBQVk7QUFDN0MsU0FBRyx5Q0FBeUMsV0FBWTtBQUNwRCxZQUFJQyxLQUFJLElBQUksVUFBVSxTQUFTLHVCQUF1QixDQUFDO0FBQ3ZELGVBQU9BLEdBQUUsdUJBQXVCLENBQUMsRUFBRSxHQUFHLEdBQUcsV0FBVyxnQkFBZ0I7QUFBQSxNQUN4RSxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsYUFBUyxPQUFPLFdBQVk7QUFDeEIsU0FBRyxpREFBaUQsV0FBWTtBQUM1RCxZQUFJQSxLQUFJLElBQUksVUFBVSxTQUFTLHVCQUF1QixDQUFDO0FBQ3ZELGVBQU9BLEVBQUMsRUFBRSxHQUFHLEdBQUcsV0FBVyxTQUFTO0FBQUEsTUFDeEMsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMsd0JBQXdCLFdBQVk7QUFDekMsU0FBRyxtQkFBbUIsaUJBQWlCLFdBQVk7QUFDL0MsWUFBSUEsS0FBSSxJQUFJLFVBQVUsU0FBUyx1QkFBdUIsQ0FBQztBQUN2RCxlQUFPQSxHQUFFLG1CQUFtQixDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sZUFBZTtBQUFBLE1BQzlELENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxhQUFTLDZDQUE2QyxXQUFZO0FBQzlELFNBQUcsNEJBQTRCLFdBQVk7QUFDdkMsWUFBSUEsS0FBSSxJQUFJLFVBQVUsU0FBUyx1QkFBdUIsQ0FBQztBQUN2RCxlQUFPQSxHQUFFLG1CQUFtQixRQUFRLEVBQUUsbUJBQW1CLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSxRQUFRO0FBQUEsTUFDcEYsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUFBLEVBR0wsQ0FBQzs7O0FDbEREO0FBS0EsTUFBSUMsV0FBUyxhQUFLO0FBQ2xCLGVBQUssSUFBSSxPQUFPO0FBRWhCLE1BQUlDLFVBQVE7QUFBQTtBQUFBO0FBQUE7QUFLWixXQUFTLE9BQU8sV0FBWTtBQUV4QixRQUFJQyxnQkFBZUMsd0JBQXVCLGVBQWVDLFdBQVU7QUFFbkUsV0FBTyxTQUFVLE1BQU07QUFDbkIsZ0JBQVUsRUFBRSxLQUFLLE1BQU07QUFFbkIsa0VBQXFDLEtBQUssQ0FBQyxNQUFNO0FBQzdDLFlBQUUsU0FBUztBQUFBLFFBQ2YsQ0FBQztBQUdELG9CQUFZLFVBQVUsVUFBVSxTQUFTLE9BQU87QUFFaEQsb0ZBQWdELEtBQUssQ0FBQyxNQUFNO0FBRXhELFVBQUFELHlCQUF3QixFQUFFLHVCQUF1QjtBQUdqRCxzRkFBZ0QsS0FBSyxDQUFDRSxPQUFNO0FBRXhELFlBQUFELFlBQVcsWUFBWTtBQUV2QixnQkFBSTtBQUNBLGNBQUFGLGlCQUFnQkcsR0FBRSxlQUFlO0FBRWpDLDhCQUFnQixjQUFjSCxlQUFjO0FBQUEsZ0JBQ3hDLE9BQU8sU0FBUztBQUNaLHlCQUFPO0FBQUEsZ0JBQ1g7QUFBQSxjQUNKO0FBQ0EsY0FBQUMsdUJBQXNCLGFBQWE7QUFDbkMsbUJBQUs7QUFBQSxZQUNULFNBQVMsR0FBRztBQUNSLG1CQUFLLENBQUM7QUFBQSxZQUNWO0FBQUEsVUFHSixDQUFDO0FBQUEsUUFDTCxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU07QUFDWixlQUFLLENBQUM7QUFBQSxRQUNWLENBQUU7QUFBQSxNQUNOLENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxhQUFTLG1CQUFtQixXQUFZO0FBRXBDLGlCQUFXLE1BQU07QUFDYix1Q0FBK0I7QUFDL0IsWUFBSSxRQUFRQyxVQUFTLGVBQWUsT0FBTztBQUMzQyxjQUFNLFlBQVlIO0FBQUEsTUFDdEIsQ0FBQztBQUVELGdCQUFVLE1BQU07QUFDWixZQUFJLFFBQVFHLFVBQVMsZUFBZSxPQUFPO0FBQzNDLGNBQU0sWUFBWTtBQUNsQiw4QkFBc0I7QUFBQSxNQUUxQixDQUFDO0FBRUQsZUFBUyxVQUFVLFdBQVk7QUFDM0IsV0FBRyx1Q0FBdUMsV0FBWTtBQUNsRCxjQUFJO0FBQ0EsZ0JBQUlFLEtBQUksSUFBSSxjQUFjO0FBQUEsVUFDOUIsU0FBUyxHQUFHO0FBQ1IsWUFBQU4sU0FBTyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUk7QUFBQSxVQUN4QjtBQUVBLFVBQUFBLFNBQU8sT0FBTyxDQUFDLEVBQUUsR0FBRyxNQUFNLFdBQVc7QUFBQSxRQUN6QyxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBRUQsZUFBUyx5QkFBeUIsV0FBWTtBQUMxQyxXQUFHLGlEQUFpRCxXQUFZO0FBRTVELGNBQUlNLEtBQUlGLFVBQVMsY0FBYyx1QkFBdUI7QUFDdEQsVUFBQUEsVUFBUyxlQUFlLE9BQU8sRUFBRSxZQUFZRSxFQUFDO0FBRTlDLFVBQUFOLFNBQU9JLFVBQVMscUJBQXFCLHVCQUF1QixFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUVoRixVQUFBSixTQUFPSSxVQUFTLGVBQWUsT0FBTyxDQUFDLEVBQUUsUUFBUSxLQUFLLDhGQUE4RjtBQUFBLFFBQ3hKLENBQUM7QUFBQSxNQUNMLENBQUM7QUFxQkQsZUFBUyx5QkFBeUIsV0FBWTtBQUUxQyxZQUFJO0FBRUosbUJBQVcsTUFBTTtBQUNiLGlCQUFPQSxVQUFTLGNBQWMsTUFBTTtBQUFBLFFBQ3hDLENBQUM7QUFFRCxXQUFHLGtCQUFrQixXQUFZO0FBRTdCLGNBQUlFLEtBQUlGLFVBQVMsY0FBYyx1QkFBdUI7QUFDdEQsZUFBSyxZQUFZRSxFQUFDO0FBRWxCLFVBQUFOLFNBQU9NLEdBQUUsWUFBWSxjQUFjLEVBQUUsR0FBRyxHQUFHO0FBQUEsUUFFL0MsQ0FBQztBQUVELFdBQUcsUUFBUSxXQUFZO0FBRW5CLGNBQUlBLEtBQUlGLFVBQVMsY0FBYyx1QkFBdUI7QUFDdEQsZUFBSyxZQUFZRSxFQUFDO0FBRWxCLFVBQUFOLFNBQU9NLEdBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxXQUFXLGVBQWU7QUFBQSxRQVNuRCxDQUFDO0FBRUQsV0FBRyxnQkFBZ0IsV0FBWTtBQUUzQixjQUFJQSxLQUFJRixVQUFTLGNBQWMsdUJBQXVCO0FBQ3RELGVBQUssWUFBWUUsRUFBQztBQUVsQixVQUFBTixTQUFPLE1BQU1NLEdBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxLQUFLO0FBQUEsUUFFeEMsQ0FBQztBQUVELFdBQUcsZ0JBQWdCLFdBQVk7QUFFM0IsY0FBSUEsS0FBSUYsVUFBUyxjQUFjLHVCQUF1QjtBQUN0RCxlQUFLLFlBQVlFLEVBQUM7QUFFbEIsVUFBQU4sU0FBTyxNQUFNTSxHQUFFLFFBQVEsQ0FBQyxFQUFFLEdBQUcsTUFBTSxLQUFLO0FBQUEsUUFFNUMsQ0FBQztBQUVELFdBQUcsZ0JBQWdCLFdBQVk7QUFFM0IsY0FBSUEsS0FBSUYsVUFBUyxjQUFjLHVCQUF1QjtBQUN0RCxlQUFLLFlBQVlFLEVBQUM7QUFBQSxRQUV0QixDQUFDO0FBRUQsV0FBRyxlQUFlLFdBQVk7QUFFMUIsY0FBSUEsS0FBSUYsVUFBUyxjQUFjLHVCQUF1QjtBQUN0RCxlQUFLLFlBQVlFLEVBQUM7QUFFbEIsVUFBQU4sU0FBT00sR0FBRSxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQUEsUUFFekIsQ0FBQztBQUVELFdBQUcsZUFBZSxXQUFZO0FBRTFCLGNBQUlBLEtBQUlGLFVBQVMsY0FBYyx1QkFBdUI7QUFDdEQsZUFBSyxZQUFZRSxFQUFDO0FBRWxCLFVBQUFOLFNBQU9NLEdBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxNQUFNLHVCQUF1QjtBQUFBLFFBRXRELENBQUM7QUFFRCxXQUFHLG1CQUFtQixXQUFZO0FBRTlCLGNBQUlBLEtBQUlGLFVBQVMsY0FBYyx1QkFBdUI7QUFDdEQsZUFBSyxZQUFZRSxFQUFDO0FBQUEsUUFFdEIsQ0FBQztBQUVELFdBQUcsNEJBQTRCLFdBQVk7QUFFdkMsY0FBSUEsS0FBSUYsVUFBUyxjQUFjLHVCQUF1QjtBQUN0RCxlQUFLLFlBQVlFLEVBQUM7QUFBQSxRQUd0QixDQUFDO0FBRUQsV0FBRyx1QkFBdUIsV0FBWTtBQUVsQyxjQUFJQSxLQUFJRixVQUFTLGNBQWMsdUJBQXVCO0FBQ3RELGVBQUssWUFBWUUsRUFBQztBQUFBLFFBR3RCLENBQUM7QUFDRCxXQUFHLG1CQUFtQixXQUFZO0FBRTlCLGNBQUlBLEtBQUlGLFVBQVMsY0FBYyx1QkFBdUI7QUFDdEQsZUFBSyxZQUFZRSxFQUFDO0FBQUEsUUFHdEIsQ0FBQztBQUVELFdBQUcsb0JBQW9CLFdBQVk7QUFFL0IsY0FBSUEsS0FBSUYsVUFBUyxjQUFjLHVCQUF1QjtBQUN0RCxlQUFLLFlBQVlFLEVBQUM7QUFBQSxRQUd0QixDQUFDO0FBR0QsV0FBRyxpQkFBaUIsV0FBWTtBQUU1QixjQUFJQSxLQUFJRixVQUFTLGNBQWMsdUJBQXVCO0FBQ3RELGVBQUssWUFBWUUsRUFBQztBQUNsQixVQUFBTixTQUFPTSxHQUFFLFlBQVksRUFBQyxnQkFBZ0IsS0FBSSxHQUFHLFlBQVksQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUFBLFFBRXRFLENBQUM7QUFBQSxNQUdMLENBQUM7QUFBQSxJQUNMLENBQUM7QUFBQSxFQUVMLENBQUM7OztBQ25QRCxFQUFBQztBQUVBO0FBSUEsV0FBUyxZQUFZLFdBQVk7QUFFN0IsV0FBTyxpQkFBa0I7QUFDckIsZ0JBQVU7QUFBQSxJQUNkLENBQUM7QUFFRCxlQUFXLE1BQU07QUFDYixVQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsWUFBTSxZQUFZO0FBQUE7QUFBQSxJQUV0QixDQUFDO0FBRUQsY0FBVSxNQUFNO0FBQ1osVUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLFlBQU0sWUFBWTtBQUFBLElBQ3RCLENBQUM7QUFFRCxhQUFTLHVCQUF1QixXQUFZO0FBQ3hDO0FBQUEsUUFDSSxDQUFDLG1DQUFtQztBQUFBLFFBQ3BDLENBQUMsa0JBQWtCO0FBQUEsUUFDbkIsQ0FBQywrQkFBK0I7QUFBQSxNQUVwQyxFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFlBQUlDLEtBQUksS0FBSyxNQUFNO0FBRW5CLFdBQUcsd0VBQXdFLFdBQVk7QUFDbkYsY0FBSSxXQUFXLFNBQVMsY0FBYyxVQUFVO0FBQ2hELG1CQUFTLFlBQVlBO0FBQ3JCLGNBQUksSUFBSSxJQUFJLFNBQVMsUUFBUTtBQUc3QixjQUFJLFlBQVksU0FBUyxjQUFjLEtBQUs7QUFDNUMsb0JBQVUsWUFBWSxFQUFFLHVCQUF1QixDQUFDO0FBQ2hELGlCQUFPLFVBQVUsU0FBUyxFQUFFLEdBQUcsR0FBRyxNQUFNQSxFQUFDO0FBQUEsUUFDN0MsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMsbUJBQW1CLFdBQVk7QUFDcEMsU0FBRyxnREFBZ0QsV0FBWTtBQUMzRCxZQUFJQyxLQUFJLElBQUksU0FBUyxTQUFTLGNBQWMsVUFBVSxDQUFDO0FBQ3ZELGVBQU9BLEVBQUMsRUFBRSxHQUFHLEdBQUcsV0FBVyxRQUFRO0FBQUEsTUFDdkMsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMseUJBQXlCLFdBQVk7QUFDMUMsU0FBRyxnRkFBZ0YsV0FBWTtBQUMzRixZQUFJQSxLQUFJLElBQUksU0FBUyxTQUFTLGNBQWMsVUFBVSxDQUFDO0FBQ3ZELGVBQU9BLEdBQUUsbUJBQW1CLENBQUMsRUFBRSxHQUFHLEdBQUcsV0FBVyxtQkFBbUI7QUFBQSxNQUN2RSxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsYUFBUywyQkFBMkIsV0FBWTtBQUM1QyxTQUFHLG1DQUFtQyxXQUFZO0FBQzlDLGNBQU0sTUFBTSxTQUFTLGNBQWMsS0FBSztBQUN4QyxlQUFPLE1BQU07QUFDVCwrQkFBcUIsU0FBUyxHQUFHO0FBQUEsUUFDckMsQ0FBQyxFQUFFLEdBQUcsT0FBTyxLQUFLO0FBQUEsTUFDdEIsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMsMkJBQTJCLFdBQVk7QUFDNUMsZUFBUyxZQUFZLFdBQVk7QUFDN0IsV0FBRywyQ0FBMkMsV0FBWTtBQUN0RCxnQkFBTSxNQUFNLFNBQVMsY0FBYyxLQUFLO0FBQ3hDLGNBQUksT0FBTztBQUNYLGNBQUksSUFBSSxxQkFBcUIsY0FBYyxHQUFHO0FBQzlDLGlCQUFPLENBQUMsRUFBRSxHQUFHLFdBQVcsUUFBUTtBQUFBLFFBRXBDLENBQUM7QUFBQSxNQUNMLENBQUM7QUFFRCxlQUFTLG9CQUFvQixXQUFZO0FBQ3JDLFlBQUk7QUFFSixtQkFBVyxNQUFNO0FBQ2IsY0FBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGdCQUFNLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBT2xCLGNBQUksT0FBTyxTQUFTLGNBQWMsTUFBTTtBQUN4QyxjQUFJLEtBQUssYUFBYSxvQkFBb0IsR0FBRztBQUN6QyxnQ0FBb0IsS0FBSyxhQUFhLG9CQUFvQjtBQUFBLFVBQzlEO0FBQUEsUUFFSixDQUFDO0FBRUQsa0JBQVUsTUFBTTtBQUNaLGNBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxnQkFBTSxZQUFZO0FBRWxCLGNBQUksT0FBTyxTQUFTLGNBQWMsTUFBTTtBQUV4QyxjQUFJLEtBQUssYUFBYSxvQkFBb0IsR0FBRztBQUN6QyxpQkFBSyxnQkFBZ0Isb0JBQW9CO0FBQUEsVUFDN0M7QUFFQSxjQUFJLG1CQUFtQjtBQUNuQixpQkFBSyxhQUFhLHNCQUFzQixpQkFBaUI7QUFBQSxVQUM3RDtBQUFBLFFBRUosQ0FBQztBQUdELFdBQUcsMkNBQTJDLFdBQVk7QUFDdEQsY0FBSSxPQUFPLFNBQVMsY0FBYyxNQUFNO0FBQ3hDLGdCQUFNLE1BQU0sU0FBUyxjQUFjLEtBQUs7QUFDeEMsY0FBSSxhQUFhLGdDQUFnQyxVQUFVO0FBQzNELGNBQUksT0FBTztBQUNYLGNBQUksS0FBSyxxQkFBcUIsY0FBYyxHQUFHO0FBQy9DLGlCQUFPLEVBQUUsRUFBRSxHQUFHLFdBQVcsUUFBUTtBQUNqQyxpQkFBTyxHQUFHLHVCQUF1QixFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sR0FBRztBQUU1RCxjQUFJLGdCQUFnQiw4QkFBOEI7QUFDbEQsY0FBSSxLQUFLLHFCQUFxQixjQUFjLEdBQUc7QUFDL0MsaUJBQU8sRUFBRSxFQUFFLEdBQUcsV0FBVyxRQUFRO0FBQ2pDLGlCQUFPLEdBQUcsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxHQUFHO0FBRTVELGVBQUssYUFBYSxzQkFBcUIsV0FBVztBQUNsRCxjQUFJRCxLQUFHLEtBQUs7QUFDWixjQUFJLEtBQUsscUJBQXFCLGNBQWMsR0FBRztBQUMvQyxpQkFBTyxFQUFFLEVBQUUsR0FBRyxXQUFXLFFBQVE7QUFDakMsaUJBQU8sR0FBRyx1QkFBdUIsRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLEdBQUc7QUFBQSxRQUdoRSxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFHTCxDQUFDO0FBQUEsRUFDTCxDQUFDOzs7QUM3SUQ7QUFHQSxXQUFTLFVBQVUsV0FBWTtBQUUzQixXQUFPLGlCQUFrQjtBQUNyQixZQUFNLFVBQVU7QUFBQSxJQUNwQixDQUFDO0FBRUQsYUFBUyxnQ0FBZ0MsV0FBWTtBQUVqRCxTQUFHLGVBQWUsU0FBVSxNQUFNO0FBQzlCLFlBQUksWUFBWSxTQUFTLGNBQWMsS0FBSztBQUM1QyxrQkFBVSxhQUFhLGdCQUFnQixPQUFPO0FBQzlDLFlBQUksTUFBTSxTQUFTLGNBQWMsS0FBSztBQUN0QyxrQkFBVSxZQUFZLEdBQUc7QUFDekIsWUFBSSxpQkFBaUIsU0FBUyxDQUFDLFVBQVU7QUFDckMsY0FBSSxJQUFJLDJCQUEyQixPQUFPLGNBQWM7QUFDeEQsaUJBQU8sRUFBRSxhQUFhLGNBQWMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLE9BQU87QUFDMUQsZUFBSztBQUFBLFFBQ1QsQ0FBQztBQUNELG1CQUFXLE1BQU07QUFDYixvQkFBVSxLQUFLLE9BQU87QUFBQSxRQUMxQixHQUFHLENBQUM7QUFBQSxNQUVSLENBQUM7QUFBQSxJQUVMLENBQUM7QUFFRCxhQUFTLGVBQWUsV0FBWTtBQUNoQyxTQUFHLDZCQUE2QixTQUFVLE1BQU07QUFDNUMsWUFBSSxNQUFNLFNBQVMsY0FBYyxLQUFLO0FBQ3RDLFlBQUksaUJBQWlCLFNBQVMsTUFBTTtBQUNoQyxlQUFLO0FBQUEsUUFDVCxDQUFDO0FBQ0Qsa0JBQVUsS0FBSyxPQUFPO0FBQUEsTUFDMUIsQ0FBQztBQUVELFNBQUcsNkJBQTZCLFNBQVUsTUFBTTtBQUM1QyxZQUFJLE1BQU0sU0FBUyxjQUFjLEtBQUs7QUFDdEMsWUFBSSxpQkFBaUIsU0FBUyxNQUFNO0FBQ2hDLGVBQUs7QUFBQSxRQUNULENBQUM7QUFDRCxrQkFBVSxLQUFLLE9BQU87QUFBQSxNQUMxQixDQUFDO0FBRUQsU0FBRywyQ0FBMkMsU0FBVSxNQUFNO0FBQzFELFlBQUksTUFBTSxTQUFTLGNBQWMsS0FBSztBQUN0QyxZQUFJLGlCQUFpQixTQUFTLE1BQU07QUFDaEMsZUFBSztBQUFBLFFBQ1QsQ0FBQztBQUVELFlBQUksWUFBWSxTQUFTLGNBQWMsS0FBSyxDQUFDO0FBQzdDLFlBQUksYUFBYSxJQUFJLGlCQUFpQixLQUFLO0FBRzNDLGtCQUFVLFlBQVksT0FBTztBQUFBLE1BQ2pDLENBQUM7QUFFRCxTQUFHLDZCQUE2QixTQUFVLE1BQU07QUFDNUMsWUFBSSxNQUFNLFNBQVMsY0FBYyxLQUFLO0FBQ3RDLFlBQUksaUJBQWlCLFNBQVMsTUFBTTtBQUNoQyxlQUFLO0FBQUEsUUFDVCxDQUFDO0FBRUQsWUFBSSxZQUFZLFNBQVMsY0FBYyxLQUFLLENBQUM7QUFDN0MsWUFBSSxhQUFhLElBQUksaUJBQWlCLEtBQUs7QUFHM0Msa0JBQVUsWUFBWSxPQUFPO0FBQUEsTUFDakMsQ0FBQztBQUVELFNBQUcsc0JBQXNCLFdBQVk7QUFDakMsZUFBTyxNQUFNLFVBQVUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLEdBQUcsTUFBTSxLQUFLO0FBQUEsTUFFdkQsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMscUJBQXFCLFdBQVk7QUFDdEMsU0FBRyw2QkFBNkIsU0FBVSxNQUFNO0FBQzVDLFlBQUksTUFBTSxTQUFTLGNBQWMsS0FBSztBQUN0QyxZQUFJLGlCQUFpQixTQUFTLE1BQU07QUFDaEMsZUFBSztBQUFBLFFBQ1QsQ0FBQztBQUNELHdCQUFnQixLQUFLLE9BQU87QUFBQSxNQUNoQyxDQUFDO0FBRUQsU0FBRyw2QkFBNkIsU0FBVSxNQUFNO0FBQzVDLFlBQUksTUFBTSxTQUFTLGNBQWMsS0FBSztBQUN0QyxZQUFJLGlCQUFpQixTQUFTLE1BQU07QUFDaEMsZUFBSztBQUFBLFFBQ1QsQ0FBQztBQUNELHdCQUFnQixLQUFLLE9BQU87QUFBQSxNQUNoQyxDQUFDO0FBRUQsU0FBRyw0Q0FBNEMsU0FBVSxNQUFNO0FBQzNELFlBQUksTUFBTSxTQUFTLGNBQWMsS0FBSztBQUN0QyxZQUFJLGlCQUFpQixTQUFTLENBQUMsTUFBTTtBQUNqQyxjQUFJLEVBQUUsT0FBTyxXQUFXLGVBQWU7QUFDbkMsaUJBQUssT0FBTztBQUFBLFVBQ2hCO0FBQ0EsZUFBSztBQUFBLFFBQ1QsQ0FBQztBQUVELFlBQUksWUFBWSxTQUFTLGNBQWMsS0FBSyxDQUFDO0FBQzdDLFlBQUksYUFBYSxJQUFJLGlCQUFpQixLQUFLO0FBRTNDLHdCQUFnQixZQUFZLFNBQVMsYUFBYTtBQUFBLE1BQ3RELENBQUM7QUFFRCxTQUFHLDRDQUE0QyxTQUFVLE1BQU07QUFDM0QsWUFBSSxNQUFNLFNBQVMsY0FBYyxLQUFLO0FBQ3RDLFlBQUksaUJBQWlCLFNBQVMsQ0FBQyxNQUFNO0FBQ2pDLGNBQUksRUFBRSxPQUFPLE1BQU0sZUFBZTtBQUM5QixpQkFBSyxPQUFPO0FBQUEsVUFDaEI7QUFDQSxlQUFLO0FBQUEsUUFDVCxDQUFDO0FBRUQsWUFBSSxZQUFZLFNBQVMsY0FBYyxLQUFLLENBQUM7QUFDN0MsWUFBSSxhQUFhLElBQUksaUJBQWlCLEtBQUs7QUFFM0Msd0JBQWdCLFlBQVksU0FBUyxFQUFDLEdBQUcsY0FBYSxDQUFDO0FBQUEsTUFDM0QsQ0FBQztBQUVELFNBQUcsNkJBQTZCLFNBQVUsTUFBTTtBQUM1QyxZQUFJLE1BQU0sU0FBUyxjQUFjLEtBQUs7QUFDdEMsWUFBSSxpQkFBaUIsU0FBUyxNQUFNO0FBQ2hDLGVBQUs7QUFBQSxRQUNULENBQUM7QUFFRCxZQUFJLFlBQVksU0FBUyxjQUFjLEtBQUssQ0FBQztBQUM3QyxZQUFJLGFBQWEsSUFBSSxpQkFBaUIsS0FBSztBQUczQyx3QkFBZ0IsWUFBWSxPQUFPO0FBQUEsTUFDdkMsQ0FBQztBQUVELFNBQUcsc0JBQXNCLFdBQVk7QUFDakMsZUFBTyxNQUFNLGdCQUFnQixDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsR0FBRyxNQUFNLEtBQUs7QUFBQSxNQUM3RCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBQUEsRUFHTCxDQUFDOzs7QUM3SUQ7QUFDQTtBQUNBO0FBV0EsTUFBTSxhQUFOLGNBQXlCLFdBQVc7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUluQyxZQUFZRSxVQUFTO0FBQ3BCLFlBQU07QUFFTixVQUFJLFNBQVNBLFFBQU8sR0FBRztBQUN0QixhQUFLLFdBQVdBLFFBQU87QUFBQSxNQUN4QjtBQUFBLElBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTUEsWUFBWSxjQUFjLElBQUk7QUFDN0IsYUFBTyxPQUFPLElBQUksc0RBQXNEO0FBQUEsSUFDekU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBU0EsSUFBSSxXQUFXO0FBQ2QsYUFBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sVUFBVTtBQUFBLFFBQ3hDLE1BQU07QUFBQSxVQUNMLFVBQVU7QUFBQSxRQUNYO0FBQUEsUUFDQSxPQUFPO0FBQUEsVUFDTixVQUFVO0FBQUEsUUFDWDtBQUFBLE1BQ0QsQ0FBQztBQUFBLElBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFPQSxPQUFPO0FBQ04sWUFBTSxXQUFXLEtBQUssVUFBVSxpQkFBaUIsTUFBUztBQUMxRCxVQUFJLENBQUMsVUFBVTtBQUNkLGNBQU0sSUFBSSxNQUFNLGtDQUFrQztBQUFBLE1BQ25EO0FBRUEsWUFBTSxVQUFVLFNBQVMsY0FBYyxRQUFRO0FBQy9DLFVBQUksQ0FBQyxTQUFTO0FBQ2IsY0FBTSxJQUFJLE1BQU0sOEJBQThCO0FBQUEsTUFDL0M7QUFFQSxhQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUN2QyxZQUFJO0FBQ0gsZ0JBQU0sT0FBTyxLQUFLLE1BQU0sUUFBUSxTQUFTO0FBQ3pDLGVBQUssSUFBSSxJQUFJO0FBQ2Isa0JBQVEsSUFBSTtBQUFBLFFBQ2IsU0FBUyxHQUFHO0FBQ1gsaUJBQU8sQ0FBQztBQUFBLFFBQ1Q7QUFBQSxNQUNELENBQUM7QUFBQSxJQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBT0EsUUFBUTtBQUNQLFlBQU0sV0FBVyxLQUFLLFVBQVUsZ0JBQWdCO0FBQ2hELFVBQUksQ0FBQyxVQUFVO0FBQ2QsY0FBTSxJQUFJLE1BQU0sbUNBQW1DO0FBQUEsTUFDcEQ7QUFFQSxZQUFNLFVBQVUsU0FBUyxjQUFjLFFBQVE7QUFDL0MsVUFBSSxDQUFDLFNBQVM7QUFDYixjQUFNLElBQUksTUFBTSw4QkFBOEI7QUFBQSxNQUMvQztBQUVBLGFBQU8sSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ3ZDLFlBQUk7QUFDSCxrQkFBUSxZQUFZLEtBQUssVUFBVSxLQUFLLElBQUksQ0FBQztBQUM3QyxrQkFBUSxPQUFPO0FBQUEsUUFDaEIsU0FBUyxHQUFHO0FBQ1gsaUJBQU8sQ0FBQztBQUFBLFFBQ1Q7QUFBQSxNQUNELENBQUM7QUFBQSxJQUNGO0FBQUEsRUFDRDs7O0FDMUdBLFdBQVMsYUFBYSxXQUFZO0FBRTlCLE9BQUcsZUFBZSxXQUFZO0FBRTFCLFlBQU0sTUFBTSxJQUFJLFdBQVcsQ0FFM0IsQ0FBQztBQUVELGFBQU8sR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJO0FBQUEsSUFHMUIsQ0FBQztBQUFBLEVBRUwsQ0FBQzs7O0FDZEQ7OztBQ0hBLFdBQVMsZ0JBQWdCO0FBRXJCLFFBQUksUUFBUSxPQUFPO0FBQ25CLFFBQUksSUFBSSxDQUFDLEdBQ0wsZUFBZSxNQUFNO0FBQUEsSUFDckIsR0FDQSx5QkFBeUI7QUFFN0IsV0FBTyxlQUFlLEdBQUcsV0FBVztBQUFBLE1BQ2hDLEtBQUssTUFBTTtBQUNQLGVBQU8sQ0FBQyxHQUFHLElBQUksVUFBVTtBQUNyQixjQUFJLE1BQU0sT0FBTztBQUNiLGtCQUFNLElBQUksVUFBVSxxRkFBcUY7QUFBQSxVQUM3RztBQUNBLGNBQUksSUFBSTtBQUNSLGNBQUksQ0FBQyxFQUFFLGVBQWUsQ0FBQyxHQUFHO0FBQ3RCLG1DQUF1QixFQUFFLE1BQU07QUFBQSxVQUNuQztBQUNBLFlBQUUsQ0FBQyxJQUFJLElBQUk7QUFBQSxRQUNmO0FBQUEsTUFDSjtBQUFBLElBQ0osQ0FBQztBQUNELFdBQU8sZUFBZSxHQUFHLFdBQVc7QUFBQSxNQUNoQyxLQUFLLE1BQU07QUFDUCxlQUFPLE9BQUs7QUFDUixjQUFJLElBQUk7QUFDUixjQUFJLEVBQUUsZUFBZSxDQUFDLEdBQUc7QUFDckIsbUJBQU8sRUFBRSxDQUFDO0FBQUEsVUFDZCxPQUFPO0FBQ0gsbUJBQU87QUFBQSxVQUNYO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKLENBQUM7QUFDRCxXQUFPLGVBQWUsR0FBRyxjQUFjO0FBQUEsTUFDbkMsS0FBSyxNQUFNO0FBQ1AsZUFBTyxPQUFLO0FBQ1IsY0FBSSxJQUFJO0FBQ1IsY0FBSSxFQUFFLGVBQWUsQ0FBQyxHQUFHO0FBQ3JCLG1CQUFPLEVBQUUsQ0FBQztBQUFBLFVBQ2Q7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0osQ0FBQztBQUNELFdBQU8sZUFBZSxHQUFHLFNBQVM7QUFBQSxNQUM5QixLQUFLLE1BQU07QUFDUCxlQUFPLE1BQU07QUFDVCxtQkFBUyxLQUFLLEdBQUc7QUFDYixnQkFBSSxFQUFFLGVBQWUsQ0FBQyxHQUFHO0FBQ3JCLHFCQUFPLEVBQUUsQ0FBQztBQUFBLFlBQ2Q7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKLENBQUM7QUFDRCxXQUFPLGVBQWUsR0FBRyxVQUFVO0FBQUEsTUFDL0IsS0FBSyxNQUFNO0FBQ1AsZUFBTyxPQUFPLEtBQUssQ0FBQyxFQUFFO0FBQUEsTUFDMUI7QUFBQSxJQUNKLENBQUM7QUFDRCxXQUFPLGVBQWUsR0FBRyxPQUFPO0FBQUEsTUFDNUIsT0FBTyxPQUFLO0FBQ1IsWUFBSSxNQUFNLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUMxQixlQUFRLENBQUMsTUFBTyxPQUFPO0FBQUEsTUFDM0I7QUFBQSxJQUNKLENBQUM7QUFDRCxXQUFPLGVBQWUsR0FBRyx5QkFBeUI7QUFBQSxNQUM5QyxLQUFLLE1BQU07QUFDUCxlQUFPO0FBQUEsTUFDWDtBQUFBLE1BQ0EsS0FBSyxPQUFLO0FBQ04sWUFBSSxDQUFDLEtBQUssT0FBTyxLQUFLLFlBQVk7QUFDOUIsY0FBSTtBQUFBLFFBQ1I7QUFDQSxpQ0FBeUI7QUFBQSxNQUM3QjtBQUFBLElBQ0osQ0FBQztBQUNELFdBQU87QUFBQSxFQUNYOzs7QUR2RUEsTUFBSTtBQUVKLFdBQVMsZ0JBQWdCLFdBQVk7QUFFakMsY0FBVSxNQUFNO0FBQ1osaUJBQVcsY0FBYyxJQUFJO0FBQUEsSUFDakMsQ0FBQztBQUVELGVBQVcsV0FBWTtBQUVuQiw4QkFBd0IsV0FBVyxjQUFjO0FBQ2pELGlCQUFXLGNBQWMsSUFBSSxjQUFjO0FBQUEsSUFFL0MsQ0FBQztBQUVELE9BQUcsb0NBQW9DLFdBQVk7QUFDL0MsYUFBTyxJQUFJLGFBQWEsT0FBTyxDQUFDLEVBQUUsR0FBRyxHQUFHLFdBQVcsWUFBWTtBQUFBLElBQ25FLENBQUM7QUFFRCxhQUFTLE1BQU0sV0FBWTtBQUV2QixTQUFHLDZCQUE2QixTQUFVLE1BQU07QUFDNUMsY0FBTSxLQUFLLElBQUksYUFBYSxPQUFPO0FBQ25DLFdBQUcsS0FBSyxFQUFFLEtBQUssVUFBUTtBQUNuQixlQUFLO0FBQUEsUUFDVCxDQUFDLEVBQUUsTUFBTSxPQUFLLEtBQUssQ0FBQyxDQUFDO0FBQUEsTUFDekIsQ0FBQztBQUVELFNBQUcsaUJBQWlCLFNBQVUsTUFBTTtBQUNoQyxjQUFNLEtBQUssSUFBSSxhQUFhLE9BQU87QUFDbkMsV0FBRyxNQUFNLEVBQUUsS0FBSyxVQUFRO0FBQ3BCLGVBQUs7QUFBQSxRQUNULENBQUMsRUFBRSxNQUFNLE9BQUssS0FBSyxDQUFDLENBQUM7QUFBQSxNQUN6QixDQUFDO0FBQUEsSUFHTCxDQUFDO0FBQUEsRUFHTCxDQUFDOzs7QUUzQ0Q7QUFJQSxNQUFJO0FBRUosV0FBUyxrQkFBa0IsV0FBWTtBQUVuQyxjQUFVLE1BQU07QUFDWixpQkFBVyxnQkFBZ0IsSUFBSTtBQUFBLElBQ25DLENBQUM7QUFFRCxlQUFXLFdBQVk7QUFFbkIseUJBQW1CLFdBQVcsZ0JBQWdCO0FBQzlDLGlCQUFXLGdCQUFnQixJQUFJLGNBQWM7QUFBQSxJQUVqRCxDQUFDO0FBRUQsT0FBRyxzQ0FBc0MsV0FBWTtBQUNqRCxhQUFPLElBQUksZUFBZSxPQUFPLENBQUMsRUFBRSxHQUFHLEdBQUcsV0FBVyxjQUFjO0FBQUEsSUFDdkUsQ0FBQztBQUVELGFBQVMsTUFBTSxXQUFZO0FBRXZCLFNBQUcsNkJBQTZCLFNBQVUsTUFBTTtBQUM1QyxjQUFNLEtBQUssSUFBSSxlQUFlLE9BQU87QUFDckMsV0FBRyxLQUFLLEVBQUUsS0FBSyxVQUFRO0FBQ25CLGVBQUs7QUFBQSxRQUNULENBQUMsRUFBRSxNQUFNLE9BQUssS0FBSyxDQUFDLENBQUM7QUFBQSxNQUN6QixDQUFDO0FBRUQsU0FBRyxpQkFBaUIsU0FBVSxNQUFNO0FBQ2hDLGNBQU0sS0FBSyxJQUFJLGVBQWUsT0FBTztBQUNyQyxXQUFHLE1BQU0sRUFBRSxLQUFLLFVBQVE7QUFDcEIsZUFBSztBQUFBLFFBQ1QsQ0FBQyxFQUFFLE1BQU0sT0FBSyxLQUFLLENBQUMsQ0FBQztBQUFBLE1BQ3pCLENBQUM7QUFBQSxJQUdMLENBQUM7QUFBQSxFQUdMLENBQUM7OztBQzdDRDtBQUdBLFdBQVMsVUFBVSxXQUFZO0FBRTNCLE9BQUcseUJBQXlCLFdBQVk7QUFFcEMsVUFBSSxzQkFBc0I7QUFDMUIsVUFBSSxxQkFBcUI7QUFFekIsWUFBTSxTQUFTLElBQUksT0FBTztBQUFBLFFBQ3RCLE9BQU87QUFBQSxVQUNILFNBQVM7QUFBQSxZQUNMLGFBQWE7QUFBQSxZQUNiLFdBQVc7QUFBQSxjQUNQLFNBQVMsQ0FBQyxTQUFTO0FBQ2Ysc0NBQXNCO0FBQ3RCLHVCQUFPO0FBQUEsY0FDWDtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsVUFDQSxXQUFXO0FBQUEsWUFDUCxRQUFRO0FBQUEsY0FDSixNQUFNO0FBQUEsY0FDTixNQUFNO0FBQUEsZ0JBQ0YsS0FBSztBQUFBLGNBQ1Q7QUFBQSxZQUNKO0FBQUEsWUFDQSxNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNGLFNBQVM7QUFBQSxZQUNMLGFBQWE7QUFBQSxZQUNiLFdBQVc7QUFBQSxjQUNQLFFBQVEsQ0FBQyxTQUFTO0FBQ2QscUNBQXFCO0FBQ3JCLHVCQUFPO0FBQUEsY0FDWDtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsVUFDQSxNQUFNO0FBQUEsUUFDVjtBQUFBLE1BQ0osQ0FBQztBQUVELGFBQU8sT0FBTyx1QkFBdUIsRUFBQyxNQUFNLEdBQUcsTUFBTSxFQUFDLEtBQUssRUFBQyxFQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxNQUFNLEVBQUMsTUFBTSxHQUFHLE1BQU0sRUFBQyxLQUFLLEVBQUMsRUFBQyxDQUFDO0FBQ3hHLGFBQU8sT0FBTyxxQkFBcUIsRUFBQyxNQUFNLEdBQUcsTUFBTSxFQUFDLEtBQUssRUFBQyxFQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxNQUFNLEVBQUMsTUFBTSxHQUFHLE1BQU0sRUFBQyxLQUFLLEVBQUMsRUFBQyxDQUFDO0FBQUEsSUFHMUcsQ0FBQztBQUFBLEVBRUwsQ0FBQzs7O0FDbkRELEVBQUFDO0FBR0EsTUFBTUMsV0FBVTtBQU1oQixXQUFTLGFBQWEsV0FBWTtBQUU5QixRQUFJLEtBQUs7QUFFVCxXQUFPLFNBQVUsTUFBTTtBQUNuQixvQkFBYyxFQUFFLEtBQUssTUFBTTtBQUN2QixhQUFLO0FBQUEsTUFDVCxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU07QUFDWixhQUFLLENBQUM7QUFBQSxNQUNWLENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxjQUFVLFNBQVUsTUFBTTtBQUN0QixVQUFJLElBQUk7QUFDSixXQUFHLE1BQU07QUFBQSxNQUNiO0FBR0EsaUJBQVcsT0FBTyxPQUFPLHNCQUFzQixFQUFFLEdBQUc7QUFDaEQsWUFBSSxJQUFJLFNBQVMsTUFBTSxzQkFBc0I7QUFDekMsZ0JBQU0sYUFBYSxHQUFHLEdBQUc7QUFDekIscUJBQVcsUUFBUSxPQUFPLHNCQUFzQixVQUFVLEdBQUc7QUFDekQsZ0JBQUksS0FBSyxTQUFTLE1BQU0sc0JBQXNCO0FBQzFDLG9CQUFNLFNBQVMsV0FBVyxJQUFJLEdBQUc7QUFDakMsa0JBQUksUUFBUTtBQUNSLG9CQUFJLE9BQU8sUUFBUSxjQUFjLFlBQVk7QUFDekMsMkJBQVMsV0FBVyxFQUFFO0FBQUEsZ0JBQzFCO0FBQUEsY0FDSjtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxXQUFLO0FBQUEsSUFDVCxDQUFDO0FBRUQsT0FBRyxvQkFBb0IsV0FBWTtBQUUvQixXQUFLLElBQUlDLFlBQVdELFFBQU87QUFDM0IsWUFBTUUsU0FBUSxHQUFHLFNBQVM7QUFFMUIsYUFBT0EsTUFBSyxFQUFFLEdBQUcsR0FBRyxHQUFHLFdBQVdELFdBQVU7QUFBQSxJQUdoRCxDQUFDO0FBRUQsT0FBRyx5QkFBeUIsU0FBVSxNQUFNO0FBRXhDLFVBQUksc0JBQXNCO0FBQzFCLFVBQUkscUJBQXFCO0FBRXpCLFdBQUssSUFBSUEsWUFBVztBQUFBLFFBQ2hCLEtBQUtEO0FBQUEsUUFDTCxPQUFPO0FBQUEsVUFDSCxTQUFTO0FBQUEsWUFDTCxhQUFhO0FBQUEsWUFDYixXQUFXO0FBQUEsY0FDUCxTQUFTLENBQUMsU0FBUztBQUNmLHNDQUFzQjtBQUN0Qix1QkFBTztBQUFBLGNBQ1g7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFVBQ0EsV0FBVztBQUFBLFlBQ1AsUUFBUTtBQUFBLGNBQ0osTUFBTTtBQUFBLGNBQ04sTUFBTTtBQUFBLGdCQUNGLEtBQUs7QUFBQSxjQUNUO0FBQUEsWUFDSjtBQUFBLFlBQ0EsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsVUFDRixTQUFTO0FBQUEsWUFDTCxhQUFhO0FBQUEsWUFDYixXQUFXO0FBQUEsY0FDUCxRQUFRLENBQUMsU0FBUztBQUNkLHFDQUFxQjtBQUNyQix1QkFBTztBQUFBLGNBQ1g7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFVBQ0EsTUFBTTtBQUFBLFFBQ1Y7QUFBQSxNQUNKLENBQUM7QUFFRCxTQUFHLFFBQVEsRUFBRSxLQUFLLE1BQU07QUFDcEIsV0FBRyxJQUFJO0FBQUEsVUFDSCxTQUFTO0FBQUEsWUFDTCxTQUFTO0FBQUEsVUFDYjtBQUFBLFFBQ0osQ0FBQztBQUVELFdBQUcsTUFBTSxFQUFFLEtBQUssTUFBTTtBQUVsQixhQUFHLElBQUksQ0FBQyxDQUFDO0FBQ1QsaUJBQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsS0FBSyxNQUFNLENBQUMsQ0FBQztBQUVwQyxxQkFBVyxNQUFNO0FBR2IsZUFBRyxLQUFLLEVBQUUsS0FBSyxNQUFNO0FBQ2pCLHFCQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssTUFBTSxFQUFDLFNBQVEsRUFBQyxTQUFTLGNBQWEsRUFBQyxDQUFDO0FBQ3BFLHFCQUFPLG1CQUFtQixFQUFFLEdBQUcsR0FBRztBQUNsQyxxQkFBTyxrQkFBa0IsRUFBRSxHQUFHLEdBQUc7QUFDakMsbUJBQUs7QUFBQSxZQUNULENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTTtBQUNaLG1CQUFLLENBQUM7QUFBQSxZQUNWLENBQUM7QUFBQSxVQUNMLEdBQUcsR0FBRztBQUFBLFFBRVYsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxRQUFRO0FBQ2QsZUFBSyxJQUFJLE1BQU0sR0FBRyxDQUFDO0FBQUEsUUFDdkIsQ0FBQztBQUFBLE1BR0wsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNO0FBQ1osYUFBSyxDQUFDO0FBQUEsTUFDVixDQUFDO0FBQUEsSUFHTCxDQUFDO0FBRUQsT0FBRyxrQkFBa0IsU0FBVSxNQUFNO0FBQ2pDLFdBQUssSUFBSUMsWUFBVztBQUFBLFFBQ2hCLEtBQUtEO0FBQUEsUUFDTCxXQUFXO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDYjtBQUFBLE1BQ0osQ0FBQztBQUNELFNBQUcsUUFBUSxFQUFFLEtBQUssTUFBTTtBQUNwQixhQUFLO0FBQUEsTUFDVCxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU07QUFDWixhQUFLLENBQUM7QUFBQSxNQUNWLENBQUM7QUFBQSxJQUdMLENBQUM7QUFFRCxPQUFHLHVCQUF1QixTQUFVLE1BQU07QUFDdEMsV0FBSyxJQUFJQyxZQUFXO0FBQUEsUUFDaEIsS0FBS0Q7QUFBQSxRQUNMLFdBQVc7QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNiO0FBQUEsTUFDSixDQUFDO0FBQ0QsU0FBRyxRQUFRLEVBQUUsS0FBSyxNQUFNO0FBQ3BCLFdBQUcsSUFBSTtBQUFBLFVBQ0gsU0FBUztBQUFBLFlBQ0wsU0FBUztBQUFBLFVBQ2I7QUFBQSxRQUNKLENBQUM7QUFFRCxXQUFHLE1BQU0sRUFBRSxLQUFLLE1BQU07QUFFbEIsYUFBRyxJQUFJLENBQUMsQ0FBQztBQUNULGlCQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssTUFBTSxDQUFDLENBQUM7QUFFcEMscUJBQVcsTUFBTTtBQUViLGVBQUcsS0FBSyxFQUFFLEtBQUssTUFBTTtBQUNyQixxQkFBTyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLE1BQU0sRUFBQyxTQUFRLEVBQUMsU0FBUyxjQUFhLEVBQUMsQ0FBQztBQUNwRSxtQkFBSztBQUFBLFlBQ1QsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNO0FBQ1osbUJBQUssQ0FBQztBQUFBLFlBQ1YsQ0FBQztBQUFBLFVBQ0QsR0FBRSxHQUFHO0FBQUEsUUFHVCxDQUFDLEVBQUUsTUFBTSxDQUFDLFFBQVE7QUFDZCxlQUFLLElBQUksTUFBTSxHQUFHLENBQUM7QUFBQSxRQUN2QixDQUFDO0FBQUEsTUFHTCxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU07QUFDWixhQUFLLENBQUM7QUFBQSxNQUNWLENBQUM7QUFBQSxJQUdMLENBQUMsRUFBRSxRQUFRLEdBQUs7QUFBQSxFQUVwQixDQUFDOzs7QUM5TEQ7QUFDQTtBQUVBLFdBQVMsV0FBVyxXQUFZO0FBRTVCLFFBQUlHO0FBQ0osUUFBSTtBQUVKLGNBQVUsTUFBTTtBQUNaLGlCQUFXLE9BQU8sSUFBSUE7QUFBQSxJQUMxQixDQUFDO0FBRUQsZUFBVyxNQUFNO0FBRWIscUJBQWU7QUFDZixNQUFBQSxrQkFBaUIsV0FBVyxPQUFPO0FBQ25DLGlCQUFXLE9BQU8sSUFBSSxTQUFVQyxVQUFTO0FBRXJDLGVBQU8sSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ3BDLGtCQUFRO0FBQUEsWUFDSixNQUFNLFdBQVk7QUFDZCxxQkFBTyxJQUFJLFFBQVEsQ0FBQ0MsVUFBU0MsWUFBVztBQUNwQyxnQkFBQUQsU0FBUSxLQUFLLFVBQVU7QUFBQSxrQkFDbkIsR0FBRztBQUFBLGdCQUNQLENBQUMsQ0FBQztBQUFBLGNBQ04sQ0FBQztBQUFBLFlBQ0w7QUFBQSxZQUNBLFFBQVE7QUFBQSxVQUNaLENBQUM7QUFBQSxRQUNMLENBQUM7QUFBQSxNQUVMO0FBQUEsSUFFSixDQUFDO0FBRUQsT0FBRywrQkFBK0IsV0FBWTtBQUMxQyxhQUFPLElBQUksUUFBUSx5Q0FBeUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxXQUFXLE9BQU87QUFBQSxJQUMzRixDQUFDO0FBRUQsYUFBUyxNQUFNLFdBQVk7QUFFdkIsU0FBRyw2QkFBNkIsU0FBVSxNQUFNO0FBQzVDLGNBQU0sS0FBSyxJQUFJLFFBQVEsRUFBQyxLQUFLLDBDQUF5QyxDQUFDO0FBQ3ZFLFdBQUcsS0FBSyxFQUFFLEtBQUssVUFBUTtBQUNuQix5QkFBZSxJQUFJO0FBQ25CLGVBQUs7QUFBQSxRQUNULENBQUMsRUFBRSxNQUFNLE9BQUssS0FBSyxDQUFDLENBQUM7QUFBQSxNQUN6QixDQUFDO0FBRUQsU0FBRyxpQkFBaUIsU0FBVSxNQUFNO0FBQ2hDLGNBQU0sS0FBSyxJQUFJO0FBQUEsVUFBUTtBQUFBLFlBQ2YsTUFBTTtBQUFBLGNBQ0YsS0FBSztBQUFBLFlBQ1Q7QUFBQSxZQUNBLE9BQU87QUFBQSxjQUNILEtBQUs7QUFBQSxjQUNMLGdCQUFnQixDQUFDLEVBQUU7QUFBQSxZQUN2QjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQ0EsV0FBRyxNQUFNLEVBQUUsS0FBSyxVQUFRO0FBQ3BCLGVBQUssb0JBQW9CO0FBQUEsUUFDN0IsQ0FBQyxFQUFFLE1BQU0sT0FBSyxLQUFLLENBQUM7QUFBQSxNQUN4QixDQUFDO0FBQUEsSUFDTCxDQUFDO0FBR0QsYUFBUyxrQkFBa0IsV0FBWTtBQUVuQyxTQUFHLCtCQUErQixTQUFVLE1BQU07QUFDOUMsdUJBQWU7QUFFZixjQUFNLEtBQUssSUFBSSxRQUFRLEVBQUMsS0FBSywwQ0FBeUMsQ0FBQztBQUN2RSxXQUFHLEtBQUssRUFBRSxLQUFLLFVBQVE7QUFDbkIsZUFBSyxpQkFBaUI7QUFBQSxRQUMxQixDQUFDLEVBQUUsTUFBTSxPQUFLLEtBQUssQ0FBQztBQUFBLE1BQ3hCLENBQUM7QUFFRCxTQUFHLGlCQUFpQixTQUFVLE1BQU07QUFDaEMsdUJBQWU7QUFDZixjQUFNLEtBQUssSUFBSSxRQUFRLEVBQUMsS0FBSywwQ0FBeUMsR0FBRyxFQUFDLEtBQUssMENBQXlDLENBQUM7QUFDekgsV0FBRyxNQUFNLEVBQUUsS0FBSyxVQUFRO0FBQ3BCLHlCQUFlLElBQUk7QUFDbkIsZUFBSyxPQUFPO0FBQUEsUUFDaEIsQ0FBQyxFQUFFLE1BQU0sT0FBSyxLQUFLLENBQUM7QUFBQSxNQUN4QixDQUFDO0FBQUEsSUFHTCxDQUFDO0FBQUEsRUFHTCxDQUFDOzs7QUMzRkQ7QUFHQSxXQUFTLGNBQWMsV0FBWTtBQUcvQixPQUFHLGtDQUFrQyxXQUFZO0FBQzdDLGFBQU8sSUFBSSxXQUFXLENBQUMsRUFBRSxHQUFHLEdBQUcsV0FBVyxVQUFVO0FBQUEsSUFDeEQsQ0FBQztBQUVELGFBQVMsV0FBVyxXQUFZO0FBQzVCLFNBQUcsaUNBQWlDLFdBQVk7QUFDNUMsY0FBTSxhQUFhLElBQUksV0FBVztBQUNsQyxlQUFPLFdBQVcsVUFBVSxTQUFTLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDOUMsbUJBQVcsVUFBVSxXQUFXLElBQUk7QUFDcEMsZUFBTyxXQUFXLFVBQVUsU0FBUyxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQUEsTUFDbEQsQ0FBQztBQUVELFNBQUcsb0NBQW9DLFdBQVk7QUFDL0MsY0FBTSxhQUFhLElBQUksV0FBVztBQUNsQyxlQUFPLFdBQVcsVUFBVSxTQUFTLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDOUMsbUJBQVcsV0FBVyxFQUFDLFNBQVMsS0FBSSxDQUFDO0FBQ3JDLGVBQU8sV0FBVyxVQUFVLFNBQVMsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUFBLE1BQ2xELENBQUM7QUFBQSxJQUVMLENBQUM7QUFFRCxhQUFTLE1BQU0sV0FBWTtBQUN2QixZQUFNLGFBQWEsSUFBSSxXQUFXO0FBQ2xDLFNBQUcsOEJBQThCLFdBQVk7QUFDekMsZUFBTyxNQUFNLFdBQVcsS0FBSyxDQUFDLEVBQUUsR0FBRyxNQUFNLEtBQUs7QUFBQSxNQUNsRCxDQUFDO0FBRUQsU0FBRywrQkFBK0IsV0FBWTtBQUMxQyxlQUFPLE1BQU0sV0FBVyxLQUFLLENBQUMsRUFBRSxHQUFHLE1BQU0sS0FBSztBQUFBLE1BQ2xELENBQUM7QUFBQSxJQUdMLENBQUM7QUFFRCxhQUFTLFdBQVcsV0FBWTtBQUM1QixZQUFNLGFBQWEsSUFBSSxXQUFXO0FBQ2xDLFNBQUcsK0JBQStCLFdBQVk7QUFDMUMsZUFBUSxXQUFXLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUFBLE1BQzFDLENBQUM7QUFFRCxTQUFHLCtCQUErQixXQUFZO0FBQzFDLGVBQVEsV0FBVyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDdEMsZUFBUSxXQUFXLElBQUksRUFBQyxHQUFFLFVBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLFdBQVcsVUFBVTtBQUNsRSxlQUFRLFdBQVcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksRUFBQyxHQUFFLFVBQVMsQ0FBQztBQUFBLE1BQ3JELENBQUM7QUFBQSxJQUdMLENBQUM7QUFBQSxFQUdMLENBQUM7OztBQ3hERDtBQUdBLFdBQVMsWUFBWSxXQUFZO0FBRTdCLFFBQUksbUJBQW1CLFNBQVUsR0FBRztBQUNoQyxVQUFJLGFBQWEsS0FBSztBQUNsQixZQUFJLE9BQU8sWUFBWSxDQUFDO0FBQ3hCLFlBQUksYUFBYSxPQUFPO0FBQ3BCLGNBQUksRUFBRSxJQUFJLENBQUMsTUFBTTtBQUNiLG1CQUFPLGlCQUFpQixDQUFDO0FBQUEsVUFDN0IsQ0FBQztBQUFBLFFBQ0wsV0FBVyxPQUFPLE1BQU0sVUFBVTtBQUM5QixxQkFBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLE9BQU8sUUFBUSxDQUFDLEdBQUc7QUFDcEMsY0FBRSxDQUFDLElBQUksaUJBQWlCLENBQUM7QUFBQSxVQUM3QjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsYUFBTztBQUFBLElBQ1g7QUFFQSxhQUFTLDJCQUEyQixXQUFZO0FBQzVDLFNBQUcseURBQXlELFdBQVk7QUFFcEUsWUFBSSxNQUFNO0FBQUEsVUFDTixRQUFRO0FBQUEsWUFDSjtBQUFBLGNBQ0ksTUFBTTtBQUFBLGNBQ04sUUFBUTtBQUFBLGNBQ1IsY0FBYztBQUFBLGdCQUNWLFVBQVU7QUFBQSxrQkFDTjtBQUFBLG9CQUNJLEtBQUs7QUFBQSxvQkFBRyxPQUFPO0FBQUEsb0JBQU8sT0FBTztBQUFBLHNCQUN6QixFQUFDLElBQUksZUFBUztBQUFBLHNCQUNkLEVBQUMsSUFBSSxlQUFTO0FBQUEsb0JBQ2xCO0FBQUEsa0JBQ0o7QUFBQSxrQkFDQTtBQUFBLG9CQUNJLEtBQUs7QUFBQSxvQkFBRyxPQUFPO0FBQUEsb0JBQU0sT0FBTztBQUFBLHNCQUN4QixFQUFDLElBQUksZUFBUztBQUFBLHNCQUNkLEVBQUMsSUFBSSxlQUFTO0FBQUEsb0JBQ2xCO0FBQUEsa0JBQ0o7QUFBQSxrQkFDQTtBQUFBLG9CQUNJLEtBQUs7QUFBQSxvQkFBRyxPQUFPO0FBQUEsb0JBQUssT0FBTztBQUFBLHNCQUN2QixFQUFDLElBQUksZUFBUztBQUFBLHNCQUNkLEVBQUMsSUFBSSxlQUFTO0FBQUEsb0JBQ2xCO0FBQUEsa0JBQ0o7QUFBQSxrQkFDQTtBQUFBLG9CQUNJLEtBQUs7QUFBQSxvQkFBRyxPQUFPO0FBQUEsb0JBQUssT0FBTztBQUFBLHNCQUN2QixFQUFDLElBQUksZUFBUztBQUFBLHNCQUNkLEVBQUMsSUFBSSxlQUFTO0FBQUEsb0JBQ2xCO0FBQUEsa0JBQ0o7QUFBQSxnQkFDSjtBQUFBLGNBRUo7QUFBQSxZQUNKO0FBQUEsWUFDQTtBQUFBLGNBQ0ksTUFBTTtBQUFBLGNBQ04sUUFBUTtBQUFBLGNBQ1IsY0FBYztBQUFBLGdCQUNWLFVBQVU7QUFBQSxrQkFDTjtBQUFBLG9CQUNJLEtBQUs7QUFBQSxvQkFBRyxPQUFPO0FBQUEsb0JBQU8sT0FBTztBQUFBLHNCQUN6QixFQUFDLElBQUksZUFBUztBQUFBLHNCQUNkLEVBQUMsSUFBSSxlQUFTO0FBQUEsb0JBQ2xCO0FBQUEsa0JBQ0o7QUFBQSxrQkFDQTtBQUFBLG9CQUNJLEtBQUs7QUFBQSxvQkFBRyxPQUFPO0FBQUEsb0JBQU0sT0FBTztBQUFBLHNCQUN4QixFQUFDLElBQUksZUFBUztBQUFBLHNCQUNkLEVBQUMsSUFBSSxlQUFTO0FBQUEsb0JBQ2xCO0FBQUEsa0JBQ0o7QUFBQSxrQkFDQTtBQUFBLG9CQUNJLEtBQUs7QUFBQSxvQkFBRyxPQUFPO0FBQUEsb0JBQUssT0FBTztBQUFBLHNCQUN2QixFQUFDLElBQUksZUFBUztBQUFBLHNCQUNkLEVBQUMsSUFBSSxlQUFTO0FBQUEsb0JBQ2xCO0FBQUEsa0JBQ0o7QUFBQSxrQkFDQTtBQUFBLG9CQUNJLEtBQUs7QUFBQSxvQkFBRyxPQUFPO0FBQUEsb0JBQUssT0FBTztBQUFBLHNCQUN2QixFQUFDLElBQUksZUFBUztBQUFBLHNCQUNkLEVBQUMsSUFBSSxlQUFTO0FBQUEsb0JBQ2xCO0FBQUEsa0JBQ0o7QUFBQSxnQkFDSjtBQUFBLGNBRUo7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFFQSxZQUFJLFdBQVcsU0FBVSxTQUFTO0FBQzlCLGNBQUksSUFBSSxvQkFBSTtBQUVaLHFCQUFXLENBQUNFLElBQUcsQ0FBQyxLQUFLLE9BQU8sUUFBUSxRQUFRLElBQUksR0FBRztBQUUvQyxnQkFBSSxPQUFPQTtBQUVYLHVCQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssT0FBTyxRQUFRLEVBQUUsV0FBVyxRQUFRLEdBQUc7QUFDeEQsa0JBQUksT0FBTztBQUVYLHlCQUFXLENBQUMsR0FBR0MsRUFBQyxLQUFLLE9BQU8sUUFBUSxFQUFFLEtBQUssR0FBRztBQUUxQyxvQkFBSSxPQUFPO0FBRVgsZ0JBQUFBLEdBQUUsT0FBTyxFQUFFO0FBQ1gsZ0JBQUFBLEdBQUUsUUFBUSxFQUFFO0FBQ1osZ0JBQUFBLEdBQUUsS0FBSyxDQUFDLE1BQU0sTUFBTSxJQUFJLEVBQUUsS0FBSyxHQUFHO0FBRWxDLGtCQUFFLElBQUlBLEdBQUUsSUFBSUEsRUFBQztBQUFBLGNBQ2pCO0FBQUEsWUFFSjtBQUFBLFVBQ0o7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFFQSxZQUFJLE1BQU0sU0FBUyxLQUFLLFVBQVUsb0JBQW9CLE9BQU87QUFDN0QsWUFBSSxJQUFJLGlCQUFpQixHQUFHO0FBRTVCLGVBQU8sS0FBSyxVQUFVLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLCtWQUErVjtBQUFBLE1BRXpZLENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxhQUFTLHVCQUF1QixXQUFZO0FBQ3hDLFNBQUcsb0VBQW9FLFdBQVk7QUFFL0UsWUFBSSxNQUFNO0FBQUEsVUFDTixRQUFRO0FBQUEsWUFDSjtBQUFBLGNBQ0ksTUFBTTtBQUFBLGNBQ04sUUFBUTtBQUFBLFlBQ1o7QUFBQSxZQUNBO0FBQUEsY0FDSSxNQUFNO0FBQUEsY0FDTixRQUFRO0FBQUEsWUFDWjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBRUEsWUFBSSxNQUFNLFNBQVMsS0FBSyxVQUFVLGlCQUFpQixPQUFPO0FBQzFELFlBQUksSUFBSSxpQkFBaUIsR0FBRztBQUM1QixlQUFPLEtBQUssVUFBVSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSx5Q0FBeUM7QUFBQSxNQUVuRixDQUFDO0FBQUEsSUFDTCxDQUFDO0FBR0QsYUFBUyx3QkFBd0IsV0FBWTtBQUN6QyxTQUFHLGdDQUFnQyxXQUFZO0FBRTNDLFlBQUksTUFBTTtBQUFBLFVBQ04sUUFBUTtBQUFBLFlBQ0o7QUFBQSxjQUNJLE1BQU07QUFBQSxjQUNOLFFBQVE7QUFBQSxjQUNSLGNBQWM7QUFBQSxnQkFDVixVQUFVO0FBQUEsa0JBQ047QUFBQSxvQkFDSSxLQUFLO0FBQUEsb0JBQUcsT0FBTztBQUFBLG9CQUNmLE9BQU87QUFBQSxzQkFDSCxFQUFDLElBQUksZ0JBQVcsSUFBSSxFQUFDO0FBQUEsc0JBQ3JCLEVBQUMsSUFBSSxnQkFBVyxJQUFJLEVBQUM7QUFBQSxvQkFDekI7QUFBQSxrQkFDSjtBQUFBLGtCQUNBO0FBQUEsb0JBQ0ksS0FBSztBQUFBLG9CQUFHLE9BQU87QUFBQSxvQkFDZixPQUFPO0FBQUEsc0JBQ0gsRUFBQyxJQUFJLGdCQUFXLElBQUksRUFBQztBQUFBLHNCQUNyQixFQUFDLElBQUksZ0JBQVcsSUFBSSxFQUFDO0FBQUEsb0JBQ3pCO0FBQUEsa0JBQ0o7QUFBQSxrQkFDQTtBQUFBLG9CQUNJLEtBQUs7QUFBQSxvQkFBRyxPQUFPO0FBQUEsb0JBQ2YsT0FBTztBQUFBLHNCQUNILEVBQUMsSUFBSSxnQkFBVyxJQUFJLEVBQUM7QUFBQSxzQkFDckIsRUFBQyxJQUFJLGdCQUFXLElBQUksRUFBQztBQUFBLG9CQUN6QjtBQUFBLGtCQUNKO0FBQUEsa0JBQ0E7QUFBQSxvQkFDSSxLQUFLO0FBQUEsb0JBQUcsT0FBTztBQUFBLG9CQUNmLE9BQU87QUFBQSxzQkFDSCxFQUFDLElBQUksZ0JBQVcsSUFBSSxFQUFDO0FBQUEsc0JBQ3JCLEVBQUMsSUFBSSxnQkFBVyxJQUFJLEVBQUM7QUFBQSxvQkFDekI7QUFBQSxrQkFDSjtBQUFBLGdCQUNKO0FBQUEsY0FFSjtBQUFBLFlBQ0o7QUFBQSxZQUNBO0FBQUEsY0FDSSxNQUFNO0FBQUEsY0FDTixRQUFRO0FBQUEsY0FDUixjQUFjO0FBQUEsZ0JBQ1YsVUFBVTtBQUFBLGtCQUNOO0FBQUEsb0JBQ0ksS0FBSztBQUFBLG9CQUFHLE9BQU87QUFBQSxvQkFDZixPQUFPO0FBQUEsc0JBQ0gsRUFBQyxJQUFJLGdCQUFXLElBQUksRUFBQztBQUFBLHNCQUNyQixFQUFDLElBQUksZ0JBQVcsSUFBSSxHQUFFO0FBQUEsb0JBQzFCO0FBQUEsa0JBQ0o7QUFBQSxrQkFDQTtBQUFBLG9CQUNJLEtBQUs7QUFBQSxvQkFBRyxPQUFPO0FBQUEsb0JBQ2YsT0FBTztBQUFBLHNCQUNILEVBQUMsSUFBSSxnQkFBVyxJQUFJLEdBQUU7QUFBQSxzQkFDdEIsRUFBQyxJQUFJLGdCQUFXLElBQUksR0FBRTtBQUFBLG9CQUMxQjtBQUFBLGtCQUNKO0FBQUEsa0JBQ0E7QUFBQSxvQkFDSSxLQUFLO0FBQUEsb0JBQUcsT0FBTztBQUFBLG9CQUNmLE9BQU87QUFBQSxzQkFDSCxFQUFDLElBQUksZ0JBQVcsSUFBSSxHQUFFO0FBQUEsc0JBQ3RCLEVBQUMsSUFBSSxnQkFBVyxJQUFJLEdBQUU7QUFBQSxvQkFDMUI7QUFBQSxrQkFDSjtBQUFBLGtCQUNBO0FBQUEsb0JBQ0ksS0FBSztBQUFBLG9CQUNMLE9BQU87QUFBQSxvQkFDUCxPQUFPO0FBQUEsc0JBQ0gsRUFBQyxJQUFJLGdCQUFXLElBQUksR0FBRTtBQUFBLHNCQUN0QixFQUFDLElBQUksZ0JBQVcsSUFBSSxHQUFFO0FBQUEsc0JBQ3RCLEVBQUMsSUFBSSxnQkFBVyxJQUFJLEdBQUU7QUFBQSxvQkFDMUI7QUFBQSxrQkFDSjtBQUFBLGdCQUNKO0FBQUEsY0FFSjtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUVBLFlBQUksTUFBTSxTQUFTLEtBQUssd0NBQXdDLGdDQUFnQyxZQUFZO0FBQzVHLFlBQUksSUFBSSxpQkFBaUIsR0FBRztBQUM1QixlQUFPLEtBQUssVUFBVSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSwrbENBQTBnQztBQUFBLE1BRXBqQyxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsYUFBUyxlQUFlLFdBQVk7QUFFaEMsU0FBRywrQkFBK0IsV0FBWTtBQUUxQyxZQUFJLE1BQU07QUFBQSxVQUNOLFFBQVE7QUFBQSxZQUNKO0FBQUEsY0FDSSxNQUFNO0FBQUEsY0FDTixRQUFRO0FBQUEsY0FDUixXQUFXO0FBQUEsZ0JBQ1AsVUFBVTtBQUFBLGdCQUNWLFFBQVE7QUFBQSxnQkFDUixPQUFPO0FBQUEsY0FDWDtBQUFBLFlBQ0o7QUFBQSxZQUNBO0FBQUEsY0FDSSxNQUFNO0FBQUEsY0FDTixRQUFRO0FBQUEsY0FDUixXQUFXO0FBQUEsZ0JBQ1AsVUFBVTtBQUFBLGdCQUNWLFFBQVE7QUFBQSxnQkFDUixPQUFPO0FBQUEsY0FDWDtBQUFBLFlBQ0o7QUFBQSxZQUNBO0FBQUEsY0FDSSxNQUFNO0FBQUEsY0FDTixRQUFRO0FBQUEsY0FDUixXQUFXO0FBQUEsZ0JBQ1AsVUFBVTtBQUFBLGdCQUNWLFFBQVE7QUFBQSxnQkFDUixPQUFPO0FBQUEsY0FDWDtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUVBLFlBQUk7QUFDSixjQUFNLFNBQVMsS0FBSyxVQUFVLDRDQUE0QyxJQUFJO0FBQzlFLGVBQU8sR0FBRyxFQUFFLEdBQUcsR0FBRyxXQUFXLEdBQUc7QUFFaEMsY0FBTSxTQUFTLEtBQUssVUFBVSwwQ0FBMEM7QUFDeEUsZUFBTyxHQUFHLEVBQUUsR0FBRyxHQUFHLFdBQVcsR0FBRztBQUVoQyxjQUFNLFNBQVMsS0FBSyxVQUFVLDRDQUE0QyxNQUFNLFNBQVUsT0FBTyxLQUFLO0FBQ2xHLGlCQUFRLE1BQU0sSUFBSSxLQUFLLEtBQU0sT0FBTztBQUFBLFFBQ3hDLENBQUM7QUFDRCxlQUFPLEdBQUcsRUFBRSxHQUFHLEdBQUcsV0FBVyxHQUFHO0FBQUEsTUFDcEMsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUVELGFBQVMsY0FBYyxXQUFZO0FBRS9CLFVBQUksT0FBTztBQUFBLFFBQ1AsU0FBUztBQUFBLFVBQ0wsU0FBUztBQUFBLFlBQ0wsTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLFVBQ2I7QUFBQSxVQUNBLFNBQVM7QUFBQSxZQUNMLE1BQU07QUFBQSxZQUNOLFNBQVM7QUFBQSxVQUNiO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxTQUFHLCtCQUErQixXQUFZO0FBQzFDLGVBQU8sU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLFdBQVcsR0FBRztBQUFBLE1BQ2pELENBQUM7QUFHRDtBQUFBLFFBQ0ksQ0FBQyxNQUFNLGFBQWEsV0FBVyxxREFBcUQ7QUFBQSxRQUNwRixDQUFDLE1BQU0sS0FBSyxRQUFXLElBQUk7QUFBQSxRQUMzQixDQUFDLE1BQU0sYUFBYSxRQUFRLHFEQUFxRDtBQUFBLE1BQ3JGLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFFdEIsWUFBSUMsS0FBSSxLQUFLLE1BQU07QUFDbkIsWUFBSSxJQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUlELEtBQUksS0FBSyxNQUFNO0FBRW5CLFdBQUcsY0FBYyxLQUFLLFVBQVVDLEVBQUMsSUFBSSxNQUFNLEtBQUssVUFBVSxDQUFDLElBQUksTUFBTSxLQUFLLFVBQVUsQ0FBQyxJQUFJLHFCQUFxQixLQUFLLFVBQVVELEVBQUMsSUFBSSxLQUFLLFdBQVk7QUFDL0ksY0FBSSxJQUFJLFNBQVNDLElBQUcsR0FBRyxDQUFDO0FBQ3hCLGNBQUksSUFBSSxLQUFLLFVBQVUsaUJBQWlCLENBQUMsQ0FBQztBQUMxQyxpQkFBTyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU1ELEVBQUM7QUFBQSxRQUMzQixDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFHTCxDQUFDO0FBQUEsRUFDTCxDQUFDOzs7QUNoVkQ7QUFDQTtBQUdBLFdBQVMsZUFBZSxXQUFZO0FBRWhDLFdBQU8sU0FBVSxNQUFNO0FBRW5CLFVBQUksV0FBVyxDQUFDO0FBQ2hCLGVBQVMsS0FBSyxVQUFVLENBQUM7QUFDekIsVUFBSSxDQUFDLFdBQVcsUUFBUSxHQUFHO0FBQ3ZCLGlCQUFTLEtBQUssMEVBQThCLEtBQUssT0FBSztBQUNsRCxxQkFBVyxRQUFRLElBQUksSUFBSSxFQUFFLE9BQU87QUFDcEMsaUJBQU87QUFBQSxRQUNYLENBQUMsQ0FBQztBQUFBLE1BQ047QUFFQSxjQUFRLElBQUksUUFBUSxFQUFFLEtBQUssTUFBTTtBQUM3QixhQUFLO0FBQUEsTUFDVCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBR0QsYUFBUyxxQkFBcUIsV0FBWTtBQUV0QztBQUFBLFFBQ0ksQ0FBQyxrQkFBa0IsdUJBQXVCLHNCQUFzQjtBQUFBLFFBQ2hFLENBQUMsNkJBQTZCLHVCQUFzQiwwQkFBMEI7QUFBQSxRQUM5RSxDQUFDLDhCQUE4Qix1QkFBdUIsaUJBQWlCO0FBQUEsUUFDdkUsQ0FBQyxZQUFZLEtBQUssSUFBSTtBQUFBLFFBQ3RCLENBQUMsWUFBWSxLQUFLLEtBQUs7QUFBQSxRQUN2QixDQUFDLFlBQVksR0FBRyxJQUFJO0FBQUEsUUFDcEIsQ0FBQyxZQUFZLEdBQUcsS0FBSztBQUFBLFFBQ3JCLENBQUMsYUFBYSxNQUFNLElBQUk7QUFBQSxRQUN4QixDQUFDLGVBQWUsTUFBTSxJQUFJO0FBQUEsUUFDMUIsQ0FBQyxhQUFhLE9BQU8sS0FBSztBQUFBLFFBQzFCLENBQUMsZUFBZSxPQUFPLEtBQUs7QUFBQSxRQUM1QixDQUFDLGNBQWMsT0FBTyxJQUFJO0FBQUEsUUFDMUIsQ0FBQyxnQkFBZ0IsT0FBTyxJQUFJO0FBQUEsUUFDNUIsQ0FBQyxjQUFjLE9BQU8sSUFBSTtBQUFBLFFBQzFCLENBQUMsZ0JBQWdCLE1BQU0sS0FBSztBQUFBLFFBQzVCLENBQUMsWUFBWSxHQUFHLElBQUk7QUFBQSxRQUNwQixDQUFDLFlBQVksR0FBRyxLQUFLO0FBQUEsUUFDckIsQ0FBQyxvQkFBb0IsUUFBVyxJQUFJO0FBQUEsUUFDcEMsQ0FBQyxvQkFBb0IsR0FBRyxLQUFLO0FBQUEsUUFDN0IsQ0FBQyxlQUFlLE1BQU0sSUFBSTtBQUFBLFFBQzFCLENBQUMsZUFBZSxHQUFHLEtBQUs7QUFBQSxRQUN4QixDQUFDLFlBQVksR0FBRyxLQUFLO0FBQUEsUUFDckIsQ0FBQyxZQUFZLFFBQVEsZ0JBQVE7QUFBQTtBQUFBLFFBRTdCLENBQUMsWUFBWSxZQUFZLGlCQUFTO0FBQUEsUUFDbEMsQ0FBQyxZQUFZLHVCQUF1QixxQkFBcUI7QUFBQSxRQUN6RCxDQUFDLFlBQVksdUJBQXVCLHFCQUFxQjtBQUFBLFFBQ3pELENBQUMsZUFBZSxDQUFDLEdBQUcsS0FBSztBQUFBLFFBQ3pCLENBQUMsZUFBZSxFQUFDLEdBQUUsRUFBQyxHQUFHLElBQUk7QUFBQSxRQUMzQixDQUFDLGVBQWUsQ0FBQyxHQUFHLEtBQUs7QUFBQSxRQUN6QixDQUFDLGVBQWUsSUFBSSxLQUFLO0FBQUEsUUFDekIsQ0FBQyxlQUFlLENBQUMsR0FBRSxHQUFFLENBQUMsR0FBRyxJQUFJO0FBQUEsUUFDN0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLElBQUk7QUFBQSxRQUN6QixDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsSUFBSTtBQUFBLFFBQzNCLENBQUMsZUFBZSxDQUFDLElBQUksR0FBRyxJQUFJO0FBQUEsUUFDNUIsQ0FBQyxjQUFjLGVBQWUsSUFBSTtBQUFBLFFBQ2xDLENBQUMsY0FBYyxjQUFjLEtBQUs7QUFBQSxRQUNsQyxDQUFDLGNBQWMsQ0FBQyxLQUFJLEtBQUksR0FBRyxHQUFHLElBQUk7QUFBQSxRQUNsQyxDQUFDLGNBQWMsQ0FBQyxLQUFJLEtBQUksR0FBRyxHQUFHLEtBQUs7QUFBQSxRQUNuQyxDQUFDLGVBQWUsS0FBSyxLQUFLO0FBQUEsUUFDMUIsQ0FBQyxlQUFlLE1BQU0sS0FBSztBQUFBLFFBQzNCLENBQUMsZUFBZSxRQUFXLElBQUk7QUFBQSxRQUMvQixDQUFDLFVBQVUsS0FBSyxLQUFLO0FBQUEsUUFDckIsQ0FBQyxVQUFVLE1BQU0sSUFBSTtBQUFBLFFBQ3JCLENBQUMsU0FBUyxNQUFNLEtBQUs7QUFBQSxRQUNyQixDQUFDLFNBQVMsUUFBVyxLQUFLO0FBQUEsUUFDMUIsQ0FBQyxTQUFTLElBQUksSUFBSTtBQUFBLFFBQ2xCLENBQUMsWUFBWSxLQUFLLEtBQUs7QUFBQSxRQUN2QixDQUFDLFlBQVksR0FBRyxJQUFJO0FBQUEsUUFDcEIsQ0FBQyxZQUFZLEtBQUssSUFBSTtBQUFBLFFBQ3RCLENBQUMsYUFBYSxLQUFLLEtBQUs7QUFBQSxRQUN4QixDQUFDLGFBQWEsR0FBRyxJQUFJO0FBQUEsUUFDckIsQ0FBQyxXQUFXLEtBQUssSUFBSTtBQUFBLFFBQ3JCLENBQUMsV0FBVyxHQUFHLEtBQUs7QUFBQSxRQUNwQixDQUFDLFlBQVksR0FBRyxLQUFLO0FBQUEsUUFDckIsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJO0FBQUEsUUFDckIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSTtBQUFBLFFBQ3RCLENBQUMsV0FBVyxLQUFLLEtBQUs7QUFBQSxRQUN0QixDQUFDLE9BQU8sTUFBTSxLQUFLO0FBQUEsUUFDbkIsQ0FBQyxPQUFPLE9BQU8sSUFBSTtBQUFBLFFBQ25CLENBQUMsbUJBQW1CLEtBQUssR0FBRztBQUFBLFFBQzVCLENBQUMsUUFBUSxjQUFjLFdBQVc7QUFBQSxRQUNsQyxDQUFDLFFBQVEsY0FBYyxJQUFJO0FBQUEsUUFDM0IsQ0FBQyxTQUFTLGNBQWMsQ0FBQztBQUFBLFFBQ3pCLENBQUMsT0FBTyxjQUFjLEVBQUU7QUFBQSxRQUN4QixDQUFDLFdBQVcsY0FBYyxDQUFDO0FBQUEsUUFDM0IsQ0FBQyxXQUFXLHVCQUF1QixFQUFFO0FBQUEsUUFDckMsQ0FBQyxXQUFXLHVCQUF1QixFQUFFO0FBQUEsUUFDckMsQ0FBQyxTQUFTLHVCQUF1QixDQUFDO0FBQUEsUUFDbEMsQ0FBQyxRQUFRLHVCQUF1QixVQUFVO0FBQUEsUUFDMUMsQ0FBQyxhQUFhLGNBQWMsVUFBYTtBQUFBLFFBQ3pDLENBQUMsMkJBQTJCLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEdBQUcsR0FBRyxFQUFDLEVBQUMsRUFBQyxHQUFHLFFBQVE7QUFBQSxRQUM1RCxDQUFDLDZCQUE2QixFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxHQUFHLEdBQUcsRUFBQyxFQUFDLEVBQUMsR0FBRyxNQUFNO0FBQUEsUUFDNUQsQ0FBQyx3QkFBd0IsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUMsRUFBQyxFQUFDLEdBQUcsS0FBSztBQUFBLFFBQ3RELENBQUMsNEJBQTRCLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEdBQUcsR0FBRyxFQUFDLEVBQUMsRUFBQyxHQUFHLE1BQU07QUFBQSxRQUMzRCxDQUFDLFFBQVEsTUFBTSxHQUFHO0FBQUEsUUFDbEIsQ0FBQyxRQUFRLFFBQVcsR0FBRztBQUFBLFFBQ3ZCLENBQUMsUUFBUSxRQUFRLE1BQU07QUFBQSxRQUN2QixDQUFDLFFBQVEsT0FBTyxLQUFLO0FBQUEsUUFDckIsQ0FBQyxXQUFXLE9BQU8sTUFBUztBQUFBO0FBQUEsUUFDNUIsQ0FBQyxhQUFhLE9BQU8sR0FBRztBQUFBLFFBQ3hCLENBQUMsYUFBYSxNQUFNLEdBQUc7QUFBQSxRQUN2QixDQUFDLGVBQWUsTUFBTSxLQUFLO0FBQUEsUUFDM0IsQ0FBQyxlQUFlLFFBQVcsS0FBSztBQUFBLFFBQ2hDLENBQUMsa0JBQWtCLFFBQVcsSUFBSTtBQUFBLFFBQ2xDLENBQUMsbUJBQW1CLFFBQVcsSUFBSTtBQUFBLFFBQ25DLENBQUMscUJBQXFCLFFBQVcsSUFBSTtBQUFBLFFBQ3JDLENBQUMsb0JBQW9CLFFBQVcsSUFBSTtBQUFBLFFBQ3BDLENBQUMsMEJBQTBCLFFBQVcsS0FBSztBQUFBLFFBQzNDLENBQUMsc0JBQXNCLFFBQVcsS0FBSztBQUFBLFFBQ3ZDLENBQUMsaUJBQWlCLFFBQVcsQ0FBQztBQUFBLFFBQzlCLENBQUMsb0JBQW9CLFFBQVcsR0FBRztBQUFBLFFBQ25DLENBQUMsYUFBYSxFQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFDLEdBQUcsQ0FBQztBQUFBLFFBQ25DLENBQUMsWUFBWSxFQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFDLEdBQUcsQ0FBQztBQUFBLFFBQ2xDLENBQUMsa0JBQWtCLEVBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUMsR0FBRyxDQUFDO0FBQUEsUUFDeEMsQ0FBQyxrQkFBa0IsRUFBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBQyxHQUFHLENBQUM7QUFBQSxRQUN4QyxDQUFDLGtCQUFrQixFQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFDLEdBQUcsQ0FBQztBQUFBLFFBQ3hDLENBQUMsYUFBYSxFQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFDLEdBQUcsQ0FBQztBQUFBLFFBQ25DLENBQUMsYUFBYSxFQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFDLEdBQUcsQ0FBQztBQUFBLFFBQ25DLENBQUMsYUFBYSxFQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFDLEdBQUcsQ0FBQztBQUFBLFFBQ25DLENBQUMsbUJBQW1CLFFBQVEsWUFBWTtBQUFBLFFBQ3hDLENBQUMsVUFBVSxFQUFDLEdBQUcsRUFBQyxHQUFHLFNBQVc7QUFBQSxRQUM5QixDQUFDLGtCQUFrQixRQUFRLFNBQVM7QUFBQSxRQUNwQyxDQUFDLGVBQWUsUUFBUSxRQUFRO0FBQUEsUUFDaEMsQ0FBQyxvQkFBb0IsUUFBUSxXQUFXO0FBQUEsUUFDeEMsQ0FBQyxlQUFlLFlBQVksVUFBVTtBQUFBLFFBQ3RDLENBQUMsV0FBVyxZQUFZLFVBQVU7QUFBQSxRQUNsQyxDQUFDLFlBQVksR0FBRyxHQUFHO0FBQUEsUUFDbkIsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsdUJBQXVCO0FBQUEsUUFDbkQsQ0FBQyxhQUFhLEtBQUssQ0FBQztBQUFBLFFBQ3BCLENBQUMsUUFBUSxPQUFPLEdBQUc7QUFBQSxRQUNuQixDQUFDLFFBQVEsTUFBTSxHQUFHO0FBQUEsUUFDbEIsQ0FBQyxRQUFRLEtBQUssRUFBRTtBQUFBLFFBQ2hCLENBQUMsZ0JBQWdCLGdCQUFPLG9CQUFvQjtBQUFBLFFBQzVDLENBQUMsMkJBQTJCLFFBQVEsU0FBUztBQUFBLFFBQzdDLENBQUMsU0FBUyxZQUFZLE1BQU07QUFBQSxRQUM1QixDQUFDLFVBQVUsTUFBTSxHQUFHO0FBQUEsUUFDcEIsQ0FBQyxVQUFVLE1BQU0sR0FBRztBQUFBLFFBQ3BCLENBQUMsVUFBVSxRQUFRLEdBQUc7QUFBQSxRQUN0QixDQUFDLFVBQVUsU0FBUyxHQUFHO0FBQUEsUUFDdkIsQ0FBQyxVQUFVLEdBQUcsR0FBRztBQUFBLFFBQ2pCLENBQUMsVUFBVSxJQUFJLEdBQUc7QUFBQSxRQUNsQixDQUFDLFVBQVUsUUFBVyxHQUFHO0FBQUEsUUFDekIsQ0FBQyxVQUFVLE9BQU8sR0FBRztBQUFBLFFBQ3JCLENBQUMsV0FBVyxPQUFPLEtBQUs7QUFBQSxRQUN4QixDQUFDLFdBQVcsT0FBTyxLQUFLO0FBQUEsUUFDeEIsQ0FBQyxnQkFBZ0IsS0FBSyxHQUFHO0FBQUEsUUFDekIsQ0FBQyxnQkFBZ0IsUUFBVyxNQUFNO0FBQUEsUUFDbEMsQ0FBQyxZQUFZLE1BQU0sQ0FBQyxDQUFDO0FBQUEsUUFDckIsQ0FBQyxZQUFZLFdBQVcsRUFBQyxHQUFHLEVBQUMsQ0FBQztBQUFBLFFBQzlCLENBQUMsV0FBVyxZQUFZLFVBQVU7QUFBQSxRQUNsQyxDQUFDLGFBQWEsS0FBSyxDQUFDO0FBQUEsUUFDcEIsQ0FBQyxVQUFVLFFBQVEsQ0FBQztBQUFBLFFBQ3BCLENBQUMsYUFBYSxnQkFBZ0Isa0JBQWtCO0FBQUEsUUFDaEQsQ0FBQyxlQUFlLG9CQUFvQixjQUFjO0FBQUEsUUFDbEQsQ0FBQyxhQUFhLFFBQVEsVUFBVTtBQUFBLFFBQ2hDLENBQUMsZUFBZSxZQUFZLE1BQU07QUFBQSxRQUNsQyxDQUFDLFlBQVksUUFBUSxPQUFPO0FBQUEsUUFDNUIsQ0FBQyxZQUFZLFFBQVEsT0FBTztBQUFBLFFBQzVCLENBQUMsV0FBVyxFQUFDLEdBQUcsRUFBQyxHQUFHLENBQUM7QUFBQSxRQUNyQixDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFBQSxRQUN4QixDQUFDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTTtBQUFBLFFBQ2xDLENBQUMsY0FBYyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEVBQUMsRUFBQyxHQUFHLENBQUM7QUFBQSxRQUNsQyxDQUFDLGNBQWMsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxFQUFDLEVBQUMsR0FBRyxNQUFTO0FBQUEsUUFDMUMsQ0FBQyxZQUFXLG9CQUFJLElBQUksR0FBRSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUM7QUFBQSxRQUNwQyxDQUFDLGlCQUFpQixvQkFBb0IsTUFBTTtBQUFBLFFBQzVDLENBQUMsT0FBTyxvQkFBb0Isa0JBQWtCO0FBQUEsTUFFbEQsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJRSxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFFbkIsV0FBRyxxQkFBcUIsS0FBSyxVQUFVQSxFQUFDLElBQUksV0FBVyxLQUFLLFVBQVUsQ0FBQyxJQUFJLHFCQUFxQixLQUFLLFVBQVUsQ0FBQyxHQUFHLFdBQVk7QUFDM0gsY0FBSSxJQUFJLElBQUksWUFBWUEsRUFBQztBQUV6QixZQUFFLFlBQVksZ0JBQWdCLFNBQVVBLElBQUdDLElBQUdDLElBQUdDLElBQUc7QUFDaEQsbUJBQU9ILEtBQUlDLEtBQUlDLEtBQUlDO0FBQUEsVUFDdkIsQ0FBQztBQUVELGdCQUFNLElBQUksRUFBRSxJQUFJLENBQUM7QUFDakIsaUJBQU8sQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFBQSxRQUN6QixDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBRUQsYUFBUyxrQ0FBa0MsV0FBWTtBQUVuRDtBQUFBLFFBQ0ksQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUFBLFFBQ2xCLENBQUMsZUFBZSxDQUFDLENBQUM7QUFBQSxRQUNsQixDQUFDLGVBQWUsR0FBRztBQUFBLFFBQ25CLENBQUMsV0FBVyxJQUFJO0FBQUEsUUFDaEIsQ0FBQyxXQUFXLENBQUM7QUFBQSxRQUNiLENBQUMsYUFBYSxHQUFHO0FBQUEsUUFDakIsQ0FBQyxRQUFRLENBQUM7QUFBQSxRQUNWLENBQUMsUUFBUSxJQUFJO0FBQUEsUUFDYixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQUEsUUFDWCxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQUEsUUFDWCxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFBQSxRQUNuQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQUEsUUFDYixDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQUEsUUFDZCxDQUFDLFdBQVcsS0FBSztBQUFBLFFBQ2pCLENBQUMsV0FBVyxDQUFDO0FBQUEsUUFDYixDQUFDLGNBQWMsSUFBSSxDQUFDO0FBQUEsUUFDcEIsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUFBLFFBQ2hCLENBQUMsVUFBVSxDQUFDLENBQUM7QUFBQSxRQUNiLENBQUMsWUFBWSxFQUFFO0FBQUEsUUFDZixDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQUEsUUFDYixDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQUEsUUFDYixDQUFDLFNBQVMsTUFBTTtBQUFBLFFBQ2hCLENBQUMsVUFBVSxNQUFNO0FBQUE7QUFBQSxNQUNyQixFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFlBQUlILEtBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFFbkIsV0FBRyxxQkFBcUIsS0FBSyxVQUFVQSxFQUFDLElBQUksV0FBVyxLQUFLLFVBQVUsQ0FBQyxJQUFJLHlCQUF5QixXQUFZO0FBQzVHLGNBQUksSUFBSSxJQUFJLFlBQVlBLEVBQUM7QUFDekIsaUJBQU8sTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLEtBQUs7QUFBQSxRQUN6QyxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBRUQsYUFBUyxtQ0FBbUMsV0FBWTtBQUNwRCxTQUFHLHdCQUF3QixXQUFZO0FBQ25DLFlBQUksSUFBSSxJQUFJLFlBQVksUUFBUTtBQUNoQyxlQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxRQUFRO0FBQUEsTUFDdEMsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUVELGFBQVMsd0RBQXdELFdBQVk7QUFDekUsU0FBRyx3QkFBd0IsV0FBWTtBQUNuQyxZQUFJLElBQUksSUFBSSxZQUFZLDZCQUE2QjtBQUNyRCxlQUFPLEVBQUUsSUFBSSxNQUFTLENBQUMsRUFBRSxHQUFHLElBQUksRUFBQyxHQUFHLEVBQUMsQ0FBQztBQUFBLE1BQzFDLENBQUM7QUFBQSxJQUVMLENBQUM7QUFHRCxhQUFTLHFCQUFxQixXQUFZO0FBQ3RDLFNBQUcsd0NBQXdDLFdBQVk7QUFDbkQsZUFBTyxJQUFJLFlBQVksRUFBRSxDQUFDLEVBQUUsR0FBRyxXQUFXLFdBQVc7QUFBQSxNQUN6RCxDQUFDO0FBRUQsU0FBRyx3Q0FBd0MsV0FBWTtBQUNuRCxlQUFPLElBQUksWUFBWSxZQUFZLENBQUMsRUFBRSxHQUFHLFdBQVcsV0FBVztBQUFBLE1BQ25FLENBQUM7QUFFRCxTQUFHLDRDQUE0QyxXQUFZO0FBQ3ZELGVBQU8sTUFBTTtBQUNULGNBQUksWUFBWSxLQUFLO0FBQUEsUUFDekIsQ0FBQyxFQUFFLEdBQUcsTUFBTSxTQUFTO0FBQUEsTUFDekIsQ0FBQztBQUVELFNBQUcsNkNBQTZDLFdBQVk7QUFDeEQsZUFBTyxNQUFNO0FBQ1QsY0FBSSxZQUFZLENBQUMsQ0FBQztBQUFBLFFBQ3RCLENBQUMsRUFBRSxHQUFHLE1BQU0sU0FBUztBQUFBLE1BQ3pCLENBQUM7QUFBQSxJQUNMLENBQUM7QUFHRCxhQUFTLFFBQVEsV0FBWTtBQUV6QixVQUFJSSxVQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFZWixpQkFBVyxDQUFDLFNBQVM7QUFDakIsWUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGNBQU0sWUFBWUE7QUFDbEIsWUFBSSxPQUFPLFNBQVMsZUFBZSxtQkFBbUI7QUFDdEQsY0FBTSw0QkFBNEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNO0FBQ2hELGVBQUs7QUFBQSxRQUNULENBQUM7QUFBQSxNQUdMLENBQUM7QUFFRCxnQkFBVSxNQUFNO0FBQ1osWUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGNBQU0sWUFBWTtBQUFBLE1BQ3RCLENBQUM7QUFFRCxhQUFPLFNBQVUsTUFBTTtBQUNuQixrQkFBVSxFQUFFLEtBQUssTUFBTTtBQUNuQixlQUFLO0FBQUEsUUFDVCxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBRUQ7QUFBQSxRQUNJLENBQUMsY0FBYyxJQUFJLEtBQUs7QUFBQSxRQUN4QixDQUFDLFNBQVMsU0FBUyxLQUFLO0FBQUE7QUFBQSxRQUN4QixDQUFDLFVBQVUsU0FBUyxLQUFLO0FBQUE7QUFBQSxRQUN6QixDQUFDLGFBQWEsU0FBUyxLQUFLO0FBQUE7QUFBQSxRQUM1QixDQUFDLGFBQWEsU0FBUyxLQUFLO0FBQUE7QUFBQSxNQUVoQyxFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFlBQUlKLEtBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFDbkIsWUFBSSxJQUFJLEtBQUssTUFBTTtBQUVuQixXQUFHLHNCQUFzQkEsS0FBSSxXQUFXLElBQUksY0FBYyxLQUFLLFVBQVUsQ0FBQyxHQUFHLFdBQVk7QUFDckYsZ0JBQU0sSUFBSSxJQUFJLFlBQVlBLEVBQUM7QUFDM0IsaUJBQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFBQSxRQUNoQyxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBQUEsRUFHTCxDQUFDOzs7QUMzVUQ7QUFDQTtBQUVBLFdBQVMsUUFBUSxXQUFZO0FBRXpCLGFBQVMsc0JBQXNCLFdBQVk7QUFFdkMsVUFBSSxNQUFNO0FBRVYsaUJBQVcsTUFBTTtBQUNiLGVBQU87QUFBQSxVQUNILFNBQVM7QUFBQSxVQUNULFVBQVU7QUFBQSxVQUNWLFFBQVE7QUFBQSxVQUNSLFlBQVksQ0FBQztBQUFBLFFBQ2pCO0FBQ0EsZUFBTztBQUFBLFVBQ0gsU0FBUztBQUFBLFVBQ1QsVUFBVTtBQUFBLFVBQ1YsUUFBUTtBQUFBLFVBQ1IsWUFBWSxDQUFDO0FBQUEsUUFDakI7QUFBQSxNQUVKLENBQUM7QUFFRCxTQUFHLHlCQUF5QixXQUFZO0FBQ3BDLFlBQUlLLEtBQUksS0FBSyxNQUFNLElBQUk7QUFDdkIsZUFBTyxLQUFLLFVBQVVBLEVBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxrTUFBa007QUFBQSxNQUN6TyxDQUFDO0FBRUQsU0FBRyxtQ0FBbUMsV0FBWTtBQUM5QyxZQUFJQSxLQUFJLEtBQUssTUFBTSxJQUFJO0FBQ3ZCLGVBQU8sS0FBSyxVQUFVQSxFQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sSUFBSTtBQUFBLE1BQzNDLENBQUM7QUFBQSxJQUdMLENBQUM7QUFFRCxVQUFNLFFBQVEsb0JBQUk7QUFHbEIsVUFBTSxRQUFRLEtBQUssTUFBTSwwQkFBMEI7QUFDbkQsVUFBTSxRQUFRLEtBQUssTUFBTSwwQkFBMEI7QUFDbkQsVUFBTSxRQUFRLEtBQUssTUFBTSwwQkFBMEI7QUFFbkQsVUFBTSxRQUFRLElBQUksS0FBSyxLQUFLLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsVUFBTSxRQUFRLElBQUksS0FBSyxLQUFLLE1BQU0sMEJBQTBCLENBQUM7QUFFN0Q7QUFBQSxNQUVJO0FBQUEsUUFDSSxDQUFDO0FBQUEsUUFDRDtBQUFBLFVBQ0ksR0FBRyxJQUFJLE1BQU07QUFBQSxRQUNqQjtBQUFBLFFBQ0E7QUFBQSxNQUNKO0FBQUEsTUFFQTtBQUFBLFFBQ0k7QUFBQSxVQUNJLEdBQUc7QUFBQSxZQUNDLEdBQUc7QUFBQSxVQUNQO0FBQUEsVUFDQSxHQUFHO0FBQUEsWUFDQyxHQUFHO0FBQUEsVUFDUDtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsVUFDSSxHQUFHO0FBQUEsWUFDQyxHQUFHO0FBQUEsVUFDUDtBQUFBLFVBQ0EsR0FBRztBQUFBLFlBQ0MsR0FBRztBQUFBLFVBQ1A7QUFBQSxRQUNKO0FBQUEsUUFDQTtBQUFBLE1BQ0o7QUFBQSxNQUVBO0FBQUEsUUFDSTtBQUFBLFVBQ0ksR0FBRztBQUFBLFVBQ0gsR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsVUFDSSxHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0EsMERBQTBELE1BQU0sWUFBWSxJQUFJO0FBQUEsTUFDcEY7QUFBQSxNQUVBO0FBQUEsUUFDSTtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLFFBQ0k7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsTUFDSjtBQUFBLE1BQ0E7QUFBQSxRQUNJLENBQUM7QUFBQSxRQUNEO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxNQUNKO0FBQUEsTUFFQTtBQUFBLFFBQ0k7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsTUFDSjtBQUFBLE1BRUE7QUFBQSxRQUNJO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLE1BQ0o7QUFBQSxNQUVBO0FBQUEsUUFDSTtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxNQUNKO0FBQUEsTUFFQTtBQUFBLFFBQ0k7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLFVBQ0ksR0FBRztBQUFBLFVBQ0gsR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsTUFDSjtBQUFBLE1BQ0E7QUFBQSxRQUNJO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0EsQ0FBQztBQUFBLFFBQ0Q7QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLFFBQ0k7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsTUFDSjtBQUFBLE1BQ0E7QUFBQSxRQUNJLENBQUM7QUFBQSxRQUNEO0FBQUEs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O0FBRTVCLGlCQUFPLHdCQUF3QixJQUFJLEVBQUUsUUFBUSxPQUFPLENBQUMsRUFDaEQsR0FBRyxNQUFNLEtBQUs7QUFFbkIsZUFBSztBQUFBLFFBRVQsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNO0FBQ2QsZUFBSyxDQUFDO0FBQUEsUUFDUixDQUFDO0FBQUEsTUFHTCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBQUEsRUFHTCxDQUFDOyIsCiAgIm5hbWVzIjogWyJBc3NlcnRpb25FcnJvciIsICJleHRlbmQiLCAiZ2xvYmFsIiwgIkFzc2VydGlvbkVycm9yIiwgImdsb2JhbCIsICJleHBvcnRzIiwgIm9iaiIsICJ0cnVuY2F0ZSIsICJvcHRpb25zIiwgInNpemUiLCAiZ2V0QXJyYXlOYW1lIiwgImlzTmFOIiwgImVzY2FwZSIsICJnZXRQcm9taXNlVmFsdWUiLCAiQm9vbGVhbiIsICJXZWFrU2V0IiwgIldlYWtNYXAiLCAiRGF0YVZpZXciLCAiQXJyYXlCdWZmZXIiLCAiaW5zcGVjdEN1c3RvbSIsICJjb25maWciLCAib3B0aW9ucyIsICJjb25maWciLCAiaXNQcmltaXRpdmUiLCAib3B0aW9ucyIsICJjb25maWciLCAiY2hhaSIsICJmbiIsICJjb25maWciLCAiY2hhaSIsICJjaGFpIiwgImNoYWkiLCAiY2hhaSIsICJjaGFpIiwgImEiLCAiaXNOYU4iLCAiZ2V0T3BlcmF0b3IiLCAiaXNPYmplY3QiLCAiY29uZmlnIiwgInV0aWwiLCAiQXNzZXJ0aW9uRXJyb3IiLCAiQXNzZXJ0aW9uIiwgImZuIiwgImNoYWkiLCAiQXNzZXJ0aW9uIiwgIkFzc2VydGlvbkVycm9yIiwgImEiLCAic3RhcnQiLCAiY29udGFpbnMiLCAibWF0Y2hJZHgiLCAiZm4iLCAiY2hhaSIsICJ1dGlsIiwgImNoYWkiLCAidXRpbCIsICJBc3NlcnRpb24iLCAic2hvdWxkIiwgImZuIiwgImNoYWkiLCAidXRpbCIsICJBc3NlcnRpb24iLCAiYXNzZXJ0IiwgImZuIiwgInV0aWwiLCAiZm4iLCAiY29uZmlnIiwgImNvcmUiLCAiZXhwZWN0IiwgInNob3VsZCIsICJhc3NlcnQiLCAicmVxdWlyZV9jaGFpIiwgImEiLCAibm9kZSIsICJhZGRlZE5vZGVzIiwgImEiLCAiZGVmaW5lIiwgIm9wdGlvbnMiLCAic3ltYm9sIiwgImluaXQiLCAiYSIsICJpbml0X2NvbnN0YW50cyIsICJzeW1ib2wiLCAiaW5pdF9jb25zdGFudHMiLCAiZG9jdW1lbnQiLCAid2luZG93IiwgImRvY3VtZW50IiwgImluaXRfbG9jYWxlIiwgIm5hdmlnYXRvciIsICJvcHRpb25zIiwgImluaXRfbG9jYWxlIiwgImQiLCAiaW5pdF9jb25zdGFudHMiLCAiY29uc29sZSIsICJjb25jYXQiLCAic3RhcnQiLCAiZW5kIiwgIm9wdGlvbnMiLCAiaW5pdF9sb2NhbGUiLCAiREVMSU1JVEVSIiwgIm9wdGlvbnMiLCAiYSIsICJpbnRlcm5hbCIsICJzZWxmIiwgImRvY3VtZW50IiwgImluaXRfY29uc3RhbnRzIiwgImRvY3VtZW50IiwgIkhUTUxUZW1wbGF0ZUVsZW1lbnQiLCAiRG9jdW1lbnRGcmFnbWVudCIsICJEb2N1bWVudCIsICJpbml0X2NvbnN0YW50cyIsICJhIiwgImRpZmYiLCAiZG9jdW1lbnQiLCAib3B0aW9ucyIsICJ2YWx1ZSIsICJlIiwgImkiLCAic3ltYm9sIiwgImluaXRfY29uc3RhbnRzIiwgIm9wdGlvbnMiLCAib3B0aW9ucyIsICJzZWxmIiwgImQiLCAib3B0aW9ucyIsICJjdXN0b21FbGVtZW50cyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJvcHRpb25zIiwgInQiLCAib3B0aW9ucyIsICJvYnNlcnZlciIsICJsb2FkQ29udGVudCIsICJpbml0X2NvbnN0YW50cyIsICJCdWZmZXJTb3VyY2VDb252ZXJ0ZXIiLCAiYSIsICJzaXplIiwgIm9mZnNldCIsICJDb252ZXJ0IiwgImNvbWJpbmUiLCAicmV0QnVmIiwgInJldFZpZXciLCAiQm9vbGVhbiIsICJTZXQiLCAiX2EiLCAibWF4IiwgInJldFZpZXciLCAic2l6ZSIsICJ0ZW1wQnVmZmVyVmlldyIsICJvZmZzZXQiLCAiQXNuVHlwZVR5cGVzIiwgIkFzblByb3BUeXBlcyIsICJpbXBvcnRfcHZ0c3V0aWxzIiwgIkJvb2xlYW4iLCAiX2EiLCAiU2V0IiwgIm9wdGlvbnMiLCAiZGVmYXVsdENvbnZlcnRlciIsICJfYSIsICJTZXQiLCAiU2V0IiwgImltcG9ydF9wdnRzdXRpbHMiLCAiZCIsICJpc0NvbnZlcnRpYmxlIiwgInNjaGVtYVN0b3JhZ2UiLCAiaW5pdF9pbmRleF9lcyIsICJKc29uUHJvcFR5cGVzIiwgIm1pbiIsICJtYXgiLCAib3B0aW9ucyIsICJpbXBvcnRfcHZ0c3V0aWxzIiwgIk9iamVjdElkZW50aWZpZXIiLCAiaW5pdF9pbmRleF9lcyIsICJvcHRpb25zIiwgImZvcm1hdCIsICJFY1B1YmxpY0tleSIsICJzaXplIiwgIm9mZnNldCIsICJFZFByaXZhdGVLZXkiLCAiRWRQdWJsaWNLZXkiLCAiQ3VydmVQcml2YXRlS2V5IiwgIkNyeXB0byIsICJhIiwgInN0YXJ0IiwgImVuZCIsICJwcm9jZXNzIiwgImltcG9ydF9wdnRzdXRpbHMiLCAiQ3J5cHRvS2V5IiwgIkFlc0NiY1Byb3ZpZGVyIiwgIkFlc0NtYWNQcm92aWRlciIsICJBZXNDdHJQcm92aWRlciIsICJBZXNHY21Qcm92aWRlciIsICJBZXNLd1Byb3ZpZGVyIiwgIkFlc0VjYlByb3ZpZGVyIiwgIlJzYVByaXZhdGVLZXkiLCAiUnNhUHVibGljS2V5IiwgIlJzYVNzYVByb3ZpZGVyIiwgIlJzYVBzc1Byb3ZpZGVyIiwgIlJzYU9hZXBQcm92aWRlciIsICJFY1ByaXZhdGVLZXkiLCAiRWNQdWJsaWNLZXkiLCAiRWNkc2FQcm92aWRlciIsICJFY2RoUHJvdmlkZXIiLCAiRWRQcml2YXRlS2V5IiwgIkVkUHVibGljS2V5IiwgIkVkRHNhUHJvdmlkZXIiLCAiRWNkaEVzUHJvdmlkZXIiLCAiUGJrZGYyUHJvdmlkZXIiLCAiSG1hY1Byb3ZpZGVyIiwgIkhrZGZQcm92aWRlciIsICJTaGFrZTEyOFByb3ZpZGVyIiwgIlNoYWtlMjU2UHJvdmlkZXIiLCAiU3VidGxlQ3J5cHRvIiwgImluaXRfaW5kZXhfZXMiLCAiY3J5cHRvX19kZWZhdWx0IiwgImZvcm1hdCIsICJvcHRpb25zIiwgImhhc2giLCAiX2EiLCAiaW5pdF9lbnVtcyIsICJnZXRXaW5kb3ciLCAiZ2V0V2luZG93IiwgIm5hbWUiLCAic3R5bGUiLCAiZ2V0V2luZG93IiwgImdldFdpbmRvdyIsICJ3aW5kb3ciLCAiZ2V0V2luZG93IiwgIm1pbiIsICJtYXgiLCAib3B0aW9ucyIsICJwb3BwZXJPZmZzZXRzIiwgIm1pbiIsICJtYXgiLCAib2Zmc2V0IiwgImVmZmVjdCIsICJpbml0X2VudW1zIiwgInRvUGFkZGluZ09iamVjdCIsICJwb3BwZXIiLCAiZ2V0V2luZG93IiwgIm9wdGlvbnMiLCAiaW5pdF9lbnVtcyIsICJlZmZlY3QiLCAib3B0aW9ucyIsICJ3aW5kb3ciLCAiZ2V0V2luZG93IiwgImhhc2giLCAiZ2V0V2luZG93IiwgImdldFdpbmRvdyIsICJnZXRXaW5kb3ciLCAiY2xpcHBpbmdQYXJlbnRzIiwgImluaXRfZW51bXMiLCAicmVmZXJlbmNlIiwgImluaXRfZW51bXMiLCAib3B0aW9ucyIsICJwb3BwZXJPZmZzZXRzIiwgIm9mZnNldCIsICJpbml0X2VudW1zIiwgIm9wdGlvbnMiLCAicGxhY2VtZW50cyIsICJwbGFjZW1lbnQiLCAiYSIsICJpbml0X2VudW1zIiwgIm9wdGlvbnMiLCAicGxhY2VtZW50cyIsICJwbGFjZW1lbnQiLCAiX2xvb3AiLCAiX2kiLCAiY2hlY2tzIiwgImluaXRfZW51bXMiLCAiaGlkZSIsICJpbml0X2VudW1zIiwgIm9mZnNldCIsICJvcHRpb25zIiwgImluaXRfZW51bXMiLCAib3B0aW9ucyIsICJwb3BwZXJPZmZzZXRzIiwgIm9mZnNldCIsICJtaW4iLCAibWF4IiwgImluaXRfZW51bXMiLCAiZ2V0V2luZG93IiwgImluaXRfZW51bXMiLCAiZm4iLCAibWVyZ2VkIiwgImRlZmF1bHRNb2RpZmllcnMiLCAiY3JlYXRlUG9wcGVyIiwgInJlZmVyZW5jZSIsICJwb3BwZXIiLCAib3B0aW9ucyIsICJmbiIsICJzdGF0ZSIsICJlZmZlY3QiLCAibm9vcEZuIiwgImluaXRfZW51bXMiLCAibWluIiwgIm1heCIsICJnbG9iYWxSZWZlcmVuY2UiLCAiaW5pdF9jb25zdGFudHMiLCAib3B0aW9ucyIsICJpbml0X3BvcHBlciIsICJzZWxmIiwgIm9wdGlvbnMiLCAic2hvdyIsICJyZWZlcmVuY2UiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF90YWJzIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfcG9wcGVyIiwgImRvY3VtZW50IiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRFdmVudGhhbmRsZXIiLCAic2VsZiIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9idXR0b24iLCAiaW5pdF9jb25zdGFudHMiLCAib3B0aW9ucyIsICJpbml0X2NvbnN0YW50cyIsICJpbnRlcm5hbFN5bWJvbCIsICJnZXRUZW1wbGF0ZSIsICJpbml0X3N0YXRlX2J1dHRvbiIsICJpbml0X2J1dHRvbiIsICJhIiwgInN0YXJ0IiwgImVuZCIsICJtYXgiLCAibWluIiwgImdldE9wcG9zaXRlUGxhY2VtZW50IiwgInJlY3RUb0NsaWVudFJlY3QiLCAicGxhY2VtZW50cyIsICJyb3VuZCIsICJyZWZlcmVuY2UiLCAiZGV0ZWN0T3ZlcmZsb3ciLCAib3B0aW9ucyIsICJwbGF0Zm9ybSIsICJyZWN0VG9DbGllbnRSZWN0IiwgImFycm93IiwgImZsaXAiLCAib2Zmc2V0IiwgImNvbmZpZyIsICJmbiIsICJtaW4iLCAibWF4IiwgInBsYWNlbWVudHMiLCAiZCIsICJhbGlnbm1lbnQiLCAiYSIsICJnZXRPcHBvc2l0ZVBsYWNlbWVudCIsICJzaWRlcyIsICJzaWRlIiwgInBsYWNlbWVudCIsICJvdmVyZmxvdyIsICJ4IiwgInkiLCAiZ2V0Tm9kZU5hbWUiLCAiaXNOb2RlIiwgImdldFdpbmRvdyIsICJnZXREb2N1bWVudEVsZW1lbnQiLCAiaXNFbGVtZW50IiwgImlzSFRNTEVsZW1lbnQiLCAiaXNTaGFkb3dSb290IiwgImdldENvbXB1dGVkU3R5bGUiLCAiaXNUYWJsZUVsZW1lbnQiLCAiZ2V0Q29udGFpbmluZ0Jsb2NrIiwgImdldFBhcmVudE5vZGUiLCAiZ2V0Tm9kZVNjcm9sbCIsICJnZXRDb21wdXRlZFN0eWxlIiwgImlzSFRNTEVsZW1lbnQiLCAicm91bmQiLCAiaXNFbGVtZW50IiwgImdldFdpbmRvdyIsICJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCAibGVmdCIsICJ0b3AiLCAicmVjdFRvQ2xpZW50UmVjdCIsICJnZXREb2N1bWVudEVsZW1lbnQiLCAiZ2V0Tm9kZU5hbWUiLCAiZ2V0Tm9kZVNjcm9sbCIsICJnZXRXaW5kb3dTY3JvbGxCYXJYIiwgImdldERvY3VtZW50UmVjdCIsICJtYXgiLCAiZ2V0Vmlld3BvcnRSZWN0IiwgImdldElubmVyQm91bmRpbmdDbGllbnRSZWN0IiwgImdldFBhcmVudE5vZGUiLCAiZ2V0Q2xpcHBpbmdSZWN0IiwgIm1pbiIsICJnZXRUcnVlT2Zmc2V0UGFyZW50IiwgImdldE9mZnNldFBhcmVudCIsICJ3aW5kb3ciLCAiaXNUYWJsZUVsZW1lbnQiLCAiZ2V0Q29udGFpbmluZ0Jsb2NrIiwgIm9wdGlvbnMiLCAicmVmZXJlbmNlIiwgImNvbXB1dGVQb3NpdGlvbiIsICJvcHRpb25zIiwgImNvbmZpZyIsICJmbiIsICJmbGlwIiwgImxpbmUiLCAiZGV0ZWN0T3ZlcmZsb3ciLCAiYXJyb3ciLCAib2Zmc2V0IiwgImNvbXB1dGVQb3NpdGlvbiIsICJ4IiwgInkiLCAiaW5pdF9jb25zdGFudHMiLCAicG9wcGVyRWxlbWVudFN5bWJvbCIsICJpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMiLCAib3B0aW9ucyIsICJhdHRhY2hSZXNpemVPYnNlcnZlciIsICJyZXNpemVPYnNlcnZlclN5bWJvbCIsICJ0aW1lckNhbGxiYWNrU3ltYm9sIiwgInNlbGYiLCAib2JzZXJ2ZXIiLCAicnVuIiwgImluaXRPcHRpb25PYnNlcnZlciIsICJtYXgiLCAiY29udHJvbEVsZW1lbnRTeW1ib2wiLCAiZm9jdXNGaWx0ZXIiLCAiaGlkZSIsICJhIiwgImdsb2JhbCIsICJzaG93IiwgImluaXRFdmVudGhhbmRsZXIiLCAiY2xvc2VFdmVudEhhbmRsZXIiLCAiZWxlbWVudCIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9zZWxlY3QiLCAiaW5pdF9jb25zdGFudHMiLCAiZG9jdW1lbnQiLCAiaW5pdF9wb3BwZXIiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdEV2ZW50aGFuZGxlciIsICJjbG9zZUV2ZW50SGFuZGxlciIsICJoaWRlIiwgImJ1dHRvbkVsZW1lbnRTeW1ib2wiLCAiYXR0YWNoUmVzaXplT2JzZXJ2ZXIiLCAicmVzaXplT2JzZXJ2ZXJTeW1ib2wiLCAidGltZXJDYWxsYmFja1N5bWJvbCIsICJ1cGRhdGVQb3BwZXIiLCAiZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyIiwgInNlbGYiLCAicG9wcGVyRWxlbWVudFN5bWJvbCIsICJjb250cm9sRWxlbWVudFN5bWJvbCIsICJzaG93IiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJnZXRUZW1wbGF0ZSIsICJpbml0X3BvcHBlciIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2J1dHRvbiIsICJkb2N1bWVudCIsICJpbml0X2NvbnN0YW50cyIsICJpbml0RXZlbnRoYW5kbGVyIiwgImNsb3NlRXZlbnRIYW5kbGVyIiwgImF0dGFjaFJlc2l6ZU9ic2VydmVyIiwgInJlc2l6ZU9ic2VydmVyU3ltYm9sIiwgInRpbWVyQ2FsbGJhY2tTeW1ib2wiLCAidXBkYXRlUG9wcGVyIiwgImRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlciIsICJwb3BwZXJFbGVtZW50U3ltYm9sIiwgImNvbnRyb2xFbGVtZW50U3ltYm9sIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJidXR0b25FbGVtZW50U3ltYm9sIiwgImFycm93RWxlbWVudFN5bWJvbCIsICJnZXRUZW1wbGF0ZSIsICJpbml0X3BvcHBlcl9idXR0b24iLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9wb3BwZXIiLCAiaW5pdF9idXR0b24iLCAiZG9jdW1lbnQiLCAib3B0aW9ucyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0RXZlbnRIYW5kbGVyQnlNb2RlIiwgImJ1dHRvbkVsZW1lbnRTeW1ib2wiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImdldFRlbXBsYXRlIiwgImluaXRfbWVzc2FnZV9zdGF0ZV9idXR0b24iLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9wb3BwZXIiLCAiaW5pdF9zdGF0ZV9idXR0b24iLCAib3B0aW9ucyIsICJzZWxmIiwgImluaXRFdmVudGhhbmRsZXIiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImdldFRlbXBsYXRlIiwgImluaXRfY29uZmlybV9idXR0b24iLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9idXR0b24iLCAiaW5pdF9wb3BwZXJfYnV0dG9uIiwgImluaXRfbWVzc2FnZV9zdGF0ZV9idXR0b24iLCAicGFyc2VPcHRpb25zSlNPTiIsICJvcHRpb25zIiwgIlN0b3JhZ2UiLCAiaW5pdF9zdG9yYWdlIiwgInNlbGYiLCAiZmV0Y2hEYXRhIiwgImluaXQiLCAib3B0aW9ucyIsICJzZWxmIiwgIm9wdGlvbnMiLCAiV2ViQ29ubmVjdCIsICJpbml0X3dlYmNvbm5lY3QiLCAib3B0aW9ucyIsICJpbml0X3N0b3JhZ2UiLCAiU3RvcmFnZSIsICJpbml0X3N0b3JhZ2UiLCAiU3RvcmFnZSIsICJpbml0X2NvbnN0YW50cyIsICJmbiIsICJpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMiLCAib3B0aW9ucyIsICJpbml0T2JzZXJ2ZXIiLCAic2VsZiIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9mb3JtIiwgImluaXRfd2ViY29ubmVjdCIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X21lc3NhZ2Vfc3RhdGVfYnV0dG9uIiwgImluaXRfc3RhdGVfYnV0dG9uIiwgIldlYkNvbm5lY3QiLCAiTm9kZUxpc3QiLCAiTm9kZSIsICJzZWxmIiwgIk5vZGUiLCAiTm9kZUxpc3QiLCAib3B0aW9ucyIsICJOb2RlIiwgIk5vZGVMaXN0IiwgIk5vZGVMaXN0IiwgIk5vZGUiLCAiaW5pdF9jb25zdGFudHMiLCAiaGFuZGxlT3B0aW9uS2V5Ym9hcmRFdmVudHMiLCAiTm9kZSIsICJpbml0RXZlbnRoYW5kbGVyIiwgImEiLCAia2V5RXZlbnRIYW5kbGVyIiwgImluaXRPcHRpb25zRnJvbUFyZ3VtZW50cyIsICJvcHRpb25zIiwgImdldFRlbXBsYXRlIiwgImluaXRfdHJlZV9zZWxlY3QiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9zZWxlY3QiLCAiVGVtcGxhdGUiLCAiaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzIiwgIm9wdGlvbnMiLCAiaW5pdEludGVyc2VjdGlvbk9ic2VydmVyIiwgImludGVyc2VjdGlvbk9ic2VydmVyV2FzSW5pdGlhbGl6ZWQiLCAib2JzZXJ2ZXIiLCAibG9hZENvbnRlbnQiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF90ZW1wbGF0ZSIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X21lc3NhZ2UiLCAiaW5pdF9jb25zdGFudHMiLCAiTWVzc2FnZSIsICJpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMiLCAib3B0aW9ucyIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiY29udHJvbEVsZW1lbnRTeW1ib2wiLCAiaW5pdEV2ZW50aGFuZGxlciIsICJnZXRUZW1wbGF0ZSIsICJpbml0X21lc3NhZ2UiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzIiwgIm9wdGlvbnMiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImNvbnRyb2xFbGVtZW50U3ltYm9sIiwgImNvbnRhaW5lckVsZW1lbnRTeW1ib2wiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9ub3RpZnkiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9tZXNzYWdlIiwgIk1lc3NhZ2UiLCAiaW5pdF9jb25zdGFudHMiLCAib3B0aW9ucyIsICJkIiwgImRvY3VtZW50IiwgIndpbmRvdyIsICJvcHRpb25zIiwgIm9wdGlvbnMiLCAicGFyc2VPcHRpb25zSlNPTiIsICJLRVlfRE9DVU1FTlQiLCAiaW5pdF9jb25zdGFudHMiLCAib3B0aW9ucyIsICJzZWxmIiwgImRvY3VtZW50IiwgIktFWV9ET0NVTUVOVCIsICJhcHBlbmRUb0RvY3VtZW50IiwgImluaXRfY29uc3RhbnRzIiwgImNyZWF0ZUVsZW1lbnQiLCAiZG9jdW1lbnQiLCAiS0VZX0RPQ1VNRU5UIiwgImluaXRfY29uc3RhbnRzIiwgImNyZWF0ZUVsZW1lbnQiLCAiZG9jdW1lbnQiLCAiS0VZX0RPQ1VNRU5UIiwgImluaXRfY29uc3RhbnRzIiwgIm9wdGlvbnMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAid2luZG93IiwgInZlcnNpb24iLCAiZXZlbnQiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9jb25maWdfbWFuYWdlciIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9ob3N0IiwgImluaXRfbm90aWZ5IiwgImluaXRfbG9jYWxlIiwgImluaXRfY29uZmlnX21hbmFnZXIiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgIm92ZXJsYXlFbGVtZW50U3ltYm9sIiwgImluaXRFdmVudEhhbmRsZXIiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9vdmVybGF5IiwgImluaXRfbm90aWZ5IiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfdXRpbCIsICJpbml0X2NvbnN0YW50cyIsICJBVFRSSUJVVEVfQlVUVE9OX0xBQkVMIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfY29uc3RhbnRzIiwgInJlc2l6ZU9ic2VydmVyU3ltYm9sIiwgImluaXRFdmVudEhhbmRsZXIiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImNvbnRyb2xFbGVtZW50U3ltYm9sIiwgImRvY3VtZW50IiwgInRpbWVyQ2FsbGJhY2tTeW1ib2wiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9jb2xsYXBzZSIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2hvc3QiLCAiaW5pdF91dGlsIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJidXR0b25FbGVtZW50U3ltYm9sIiwgImluaXRFdmVudEhhbmRsZXIiLCAiQVRUUklCVVRFX0JVVFRPTl9MQUJFTCIsICJnZXRUZW1wbGF0ZSIsICJpbml0X2RldGFpbHMiLCAiaW5pdF9ob3N0IiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfdXRpbCIsICJpbml0X2NvbGxhcHNlIiwgImludGVybmFsQ291bnRlciIsICJjaGFpIiwgImNoYWkiLCAiaXNIVE1MRWxlbWVudCIsICJjb250YWlucyIsICJnbG9iYWwiLCAib3B0aW9ucyIsICJvcHRpb25zIiwgIndpbmRvdyIsICJleHBlY3QiLCAiZ2xvYmFsIiwgIlJlbG9hZCIsICJ2aWV3cG9ydCIsICJmZXRjaFJlZmVyZW5jZSIsICJvcHRpb25zIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiVGFicyIsICJDcnlwdG8iLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJTdGF0ZUJ1dHRvbiIsICJvcHRpb25zIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiaHRtbDIiLCAiU2VsZWN0IiwgIm9wdGlvbnMiLCAibXV0YXRpb25vYnNlcnZlciIsICJhIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiaHRtbDIiLCAiQ29uZmlybUJ1dHRvbiIsICJpbml0X3N0b3JhZ2UiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJodG1sMiIsICJzZWxmIiwgImZvcm0iLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJodG1sMiIsICJUcmVlU2VsZWN0IiwgImZldGNoUmVmZXJlbmNlIiwgIm9wdGlvbnMiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJodG1sMiIsICJCdXR0b24iLCAib3B0aW9ucyIsICJleHBlY3QiLCAiZ2xvYmFsIiwgIm1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlciIsICJodG1sMSIsICJUZW1wbGF0ZSIsICJ2aWV3cG9ydCIsICJmZXRjaFJlZmVyZW5jZSIsICJvcHRpb25zIiwgImV4cGVjdCIsICJNZXNzYWdlIiwgImV4cGVjdCIsICJOb3RpZnkiLCAiTm90aWZ5IiwgImV4cGVjdCIsICJtdXRhdGlvbm9ic2VydmVyIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJpbml0X3V0aWwiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJhIiwgImQiLCAib3B0aW9ucyIsICJzdGFydCIsICJlbmQiLCAib3B0aW9ucyIsICJyYW5kb20iLCAiYSIsICJtYXgiLCAiYSIsICJkaWZmIiwgImEiLCAiYSIsICJhIiwgImNvbnNvbGUiLCAiYSIsICJhIiwgImhhbmRsZXIiLCAidmVyc2lvbiIsICJhIiwgIm1vbnN0ZXJWZXJzaW9uIiwgImluaXQiLCAiZXhwZWN0IiwgImV4cGVjdCIsICJleHBlY3QiLCAiZXhwZWN0IiwgImV4cGVjdCIsICJleHBlY3QiLCAiZmV0Y2hSZWZlcmVuY2UiLCAibXV0YXRpb25vYnNlcnZlciIsICJhZGRlZE5vZGVzIiwgIm9wdGlvbnMiLCAiZXhwZWN0IiwgImUiLCAib3B0aW9ucyIsICJpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzIiwgImdsb2JhbCIsICJhIiwgImV4cGVjdCIsICJodG1sMSIsICJodG1sMiIsICJodG1sMyIsICJkIiwgInYiLCAiYSIsICJpbml0X2xvY2FsZSIsICJhIiwgImluaXRfY29uc3RhbnRzIiwgImV4cGVjdCIsICJodG1sMSIsICJodG1sMiIsICJDdXN0b21FbGVtZW50IiwgInJlZ2lzdGVyQ3VzdG9tRWxlbWVudCIsICJkb2N1bWVudCIsICJhIiwgInYiLCAiZCIsICJ3aW5kb3dSZWFkeSIsICJkb21SZWFkeSIsICJkIiwgImEiLCAiZXhwZWN0IiwgIkN1c3RvbUVsZW1lbnQiLCAicmVnaXN0ZXJDdXN0b21FbGVtZW50IiwgImRvY3VtZW50IiwgImNvbnRyb2wiLCAiaHRtbDEiLCAiaHRtbDIiLCAiaHRtbDMiLCAic3ltYm9sIiwgImEiLCAiZCIsICJSZXNvdXJjZSIsICJmZXRjaFJlZmVyZW5jZSIsICJvcHRpb25zIiwgImQiLCAiZCIsICJleHBlY3QiLCAiaHRtbDEiLCAiQ3VzdG9tQ29udHJvbCIsICJyZWdpc3RlckN1c3RvbUVsZW1lbnQiLCAiZG9jdW1lbnQiLCAibSIsICJkIiwgImluaXRfY29uc3RhbnRzIiwgImEiLCAiZCIsICJvcHRpb25zIiwgImluaXRfd2ViY29ubmVjdCIsICJ0ZXN0VXJsIiwgIldlYkNvbm5lY3QiLCAiY2xvbmUiLCAiZmV0Y2hSZWZlcmVuY2UiLCAib3B0aW9ucyIsICJyZXNvbHZlIiwgInJlamVjdCIsICJpIiwgImQiLCAiYSIsICJhIiwgImIiLCAiYyIsICJkIiwgImh0bWwxIiwgImQiLCAiYSIsICJOb2RlTGlzdCIsICJhIiwgImEiLCAiYSIsICJodG1sMSIsICJkIiwgImEiLCAic2VsZiIsICJhIiwgImEiLCAiYSIsICJOb2RlTGlzdCIsICJOb2RlIiwgImEiLCAiZCIsICJhIiwgImEiLCAiYSIsICJkIiwgImEiLCAiYSIsICJhIiwgIm1heCIsICJhIiwgIlJhbmRvbUlEIiwgIlVVSUQiLCAiYSIsICJhIiwgImEiLCAiTm9kZUxpc3QiLCAiTm9kZSIsICJOb2RlIiwgIk5vZGVMaXN0IiwgIkZvcm1hdHRlciIsICJvcHRpb25zIiwgIkZvcm1hdHRlciIsICJhIiwgImEiLCAiZCIsICJpbml0X2NvbnN0YW50cyIsICJodG1sMSIsICJ0cmFuc2xhdGlvbnNMaW5rU3ltYm9sIiwgIm9wdGlvbnMiLCAiZ2xvYmFsIiwgImZldGNoUmVmZXJlbmNlIiwgIm9wdGlvbnMiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImUiLCAiaHRtbDEiXQp9Cg==
-} catch (e) {
-document.getElementById('mocha-errors').insertAdjacentHTML('afterbegin', e );
-document.getElementById('mocha-stats').style.backgroundColor = 'red';
-}
-} catch (e) {
-document.getElementById('mocha-errors').insertAdjacentHTML('afterbegin', e );
-document.getElementById('mocha-stats').style.backgroundColor = 'red';
-}
-} catch (e) {
-document.getElementById('mocha-errors').insertAdjacentHTML('afterbegin', e );
-document.getElementById('mocha-stats').style.backgroundColor = 'red';
-}
-} catch (e) {
-document.getElementById('mocha-errors').insertAdjacentHTML('afterbegin', e );
-document.getElementById('mocha-stats').style.backgroundColor = 'red';
-}
-} catch (e) {
-document.getElementById('mocha-errors').insertAdjacentHTML('afterbegin', e );
-document.getElementById('mocha-stats').style.backgroundColor = 'red';
-}
-} catch (e) {
-document.getElementById('mocha-errors').insertAdjacentHTML('afterbegin', e );
-document.getElementById('mocha-stats').style.backgroundColor = 'red';
-}
-} catch (e) {
-document.getElementById('mocha-errors').insertAdjacentHTML('afterbegin', e );
-document.getElementById('mocha-stats').style.backgroundColor = 'red';
-}
-} catch (e) {
-document.getElementById('mocha-errors').insertAdjacentHTML('afterbegin', e );
-document.getElementById('mocha-stats').style.backgroundColor = 'red';
-}
+//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc291cmNlL3R5cGVzL2lzLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hc3NlcnRpb24tZXJyb3JAMS4xLjAvbm9kZV9tb2R1bGVzL2Fzc2VydGlvbi1lcnJvci9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcGF0aHZhbEAxLjEuMS9ub2RlX21vZHVsZXMvcGF0aHZhbC9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9mbGFnLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL3Rlc3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3R5cGUtZGV0ZWN0QDQuMC44L25vZGVfbW9kdWxlcy90eXBlLWRldGVjdC90eXBlLWRldGVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9leHBlY3RUeXBlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9nZXRBY3R1YWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2dldC1mdW5jLW5hbWVAMi4wLjIvbm9kZV9tb2R1bGVzL2dldC1mdW5jLW5hbWUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvdXBlQDIuMy43L25vZGVfbW9kdWxlcy9sb3VwZS9sb3VwZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS9jb25maWcuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvaW5zcGVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9vYmpEaXNwbGF5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2dldE1lc3NhZ2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvdHJhbnNmZXJGbGFncy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vZGVlcC1lcWxANC4xLjMvbm9kZV9tb2R1bGVzL2RlZXAtZXFsL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2lzUHJveHlFbmFibGVkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2FkZFByb3BlcnR5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2FkZExlbmd0aEd1YXJkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2dldFByb3BlcnRpZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvcHJveGlmeS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9hZGRNZXRob2QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvb3ZlcndyaXRlUHJvcGVydHkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvb3ZlcndyaXRlTWV0aG9kLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2FkZENoYWluYWJsZU1ldGhvZC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvY29tcGFyZUJ5SW5zcGVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9nZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2dldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGVjay1lcnJvckAxLjAuMy9ub2RlX21vZHVsZXMvY2hlY2stZXJyb3IvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvaXNOYU4uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvZ2V0T3BlcmF0b3IuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvYXNzZXJ0aW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL2NvcmUvYXNzZXJ0aW9ucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS9pbnRlcmZhY2UvZXhwZWN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL2ludGVyZmFjZS9zaG91bGQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANC40LjEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvaW50ZXJmYWNlL2Fzc2VydC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhaUA0LjQuMS9ub2RlX21vZHVsZXMvY2hhaS9pbmRleC5qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdHlwZW9mLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9leHRlbmQubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9kb20tc3RvcmFnZUAyLjEuMC9ub2RlX21vZHVsZXMvZG9tLXN0b3JhZ2UvbGliL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9lbGVtZW50LWludGVybmFscy1wb2x5ZmlsbEAxLjMuMTAvbm9kZV9tb2R1bGVzL2VsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsL2Rpc3QvaW5kZXguanMiLCAiLi4vLi4vc291cmNlL2NvbnN0YW50cy5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL2Jhc2UubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy90b2tlbmxpc3QubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vY29uc3RhbnRzLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2F0dHJpYnV0ZXMubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL3N0YWNrLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9wYXRoZmluZGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvdXRpbC9jbG9uZS5tanMiLCAiLi4vLi4vc291cmNlL2kxOG4vbG9jYWxlLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2xvY2FsZS5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL2lkLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvYmFzZXdpdGhvcHRpb25zLm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlci5tanMiLCAiLi4vLi4vc291cmNlL2kxOG4vdHJhbnNsYXRpb25zLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS90cmFuc2Zvcm1lci5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvcGlwZS5tanMiLCAiLi4vLi4vc291cmNlL3RleHQvZm9ybWF0dGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvbWVkaWF0eXBlLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvZGF0YXVybC5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL3F1ZXVlLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdW5pcXVlcXVldWUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZlci5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVybGlzdC5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vdGhlbWUubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vdGVtcGxhdGUubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RpZmYubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL3NsZWVwLm1qcyIsICIuLi8uLi9zb3VyY2UvdXRpbC90cmltc3BhY2VzLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2V2ZW50cy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS91cGRhdGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3Nsb3R0ZWQubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vdXRpbC9leHRyYWN0LWtleXMubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vdXRpbC9pbml0LW9wdGlvbnMtZnJvbS1hdHRyaWJ1dGVzLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3V0aWwvc2V0LW9wdGlvbi1mcm9tLWF0dHJpYnV0ZS5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9jdXN0b21lbGVtZW50Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL2NvbnN0YW50cy5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS91dGlsL2ZldGNoLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3JlbG9hZC5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3B2dHN1dGlsc0AxLjMuNS9ub2RlX21vZHVsZXMvcHZ0c3V0aWxzL2J1aWxkL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9wdnV0aWxzQDEuMS4zL25vZGVfbW9kdWxlcy9wdnV0aWxzL2J1aWxkL3V0aWxzLmVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9hc24xanNAMy4wLjUvbm9kZV9tb2R1bGVzL2FzbjFqcy9idWlsZC9pbmRleC5lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2VudW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvdHlwZXMvYml0X3N0cmluZy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3R5cGVzL29jdGV0X3N0cmluZy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3R5cGVzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvY29udmVydGVycy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2hlbHBlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3NjaGVtYS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3N0b3JhZ2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuOC9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9kZWNvcmF0b3JzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvZXJyb3JzL3NjaGVtYV92YWxpZGF0aW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvZXJyb3JzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvcGFyc2VyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvc2VyaWFsaXplci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy44L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L29iamVjdHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuOC9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9jb252ZXJ0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjgvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3RzbGliQDIuNi4yL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIranNvbi1zY2hlbWFAMS4xLjEyL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvanNvbi1zY2hlbWEvYnVpbGQvaW5kZXguZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3dlYmNyeXB0by1jb3JlQDEuNy44L25vZGVfbW9kdWxlcy93ZWJjcnlwdG8tY29yZS9idWlsZC93ZWJjcnlwdG8tY29yZS5lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYmFzZTY0LWpzQDEuNS4xL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2llZWU3NTRAMS4yLjEvbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2J1ZmZlckA1LjcuMS9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrd2ViY3J5cHRvQDEuNC41L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvd2ViY3J5cHRvL2J1aWxkL3dlYmNyeXB0by5lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZW51bXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvdy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2luc3RhbmNlT2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWF0aC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdXNlckFnZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNMYXlvdXRWaWV3cG9ydC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldExheW91dFJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9jb250YWlucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFBhcmVudE5vZGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvd2l0aGluLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldFZhcmlhdGlvbi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsQmFyWC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFZpZXdwb3J0UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzU2Nyb2xsUGFyZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0U2Nyb2xsUGFyZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZXRlY3RPdmVyZmxvdy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvaGlkZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL29mZnNldC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEFsdEF4aXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZVNjcm9sbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZWJvdW5jZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VCeU5hbWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2NyZWF0ZVBvcHBlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9pbmRleC5qcyIsICIuLi8uLi9zb3VyY2UvbWF0aC9yYW5kb20ubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL2RlYWRtYW5zc3dpdGNoLm1qcyIsICIuLi8uLi9zb3VyY2UvdXRpbC9wcm9jZXNzaW5nLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvdGFicy5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvc3R5bGVzaGVldC90aGVtZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS91dGlsL3BvcHBlci5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90YWJzLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2N1c3RvbWNvbnRyb2wubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL3N0eWxlc2hlZXQvcmlwcGxlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL2J1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L3N0YXRlLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90eXBlcy9zdGF0ZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdGF0ZS1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2J1aWxkbWFwLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGZsb2F0aW5nLXVpK3V0aWxzQDAuMi4xL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmbG9hdGluZy11aStjb3JlQDEuNi4wL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvY29yZS9kaXN0L2Zsb2F0aW5nLXVpLmNvcmUubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmxvYXRpbmctdWkrdXRpbHNAMC4yLjEvbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS91dGlscy9kaXN0L2Zsb2F0aW5nLXVpLnV0aWxzLmRvbS5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmbG9hdGluZy11aStkb21AMS42LjMvbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS9kb20vZGlzdC9mbG9hdGluZy11aS5kb20ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdXRpbC9mbG9hdGluZy11aS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L3NlbGVjdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zZWxlY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9wb3BwZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vcG9wcGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvcG9wcGVyLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9wb3BwZXItYnV0dG9uLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvY29uZmlybS1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9jb25maXJtLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS93cml0ZWVycm9yLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL2RhdGEtZmV0Y2gtZXJyb3IubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3Jlc3RhcGkubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZhYmxlcXVldWUubWpzIiwgIi4uLy4uL3NvdXJjZS9uZXQvd2ViY29ubmVjdC9tZXNzYWdlLm1qcyIsICIuLi8uLi9zb3VyY2UvbmV0L3dlYmNvbm5lY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3dlYmNvbm5lY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9sb2NhbHN0b3JhZ2UubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9zZXNzaW9uc3RvcmFnZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L2Zvcm0ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vZm9ybS5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL25vZGVsaXN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvbm9kZS5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvYnVpbGR0cmVlLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvbm9kZXJlY3Vyc2l2ZWl0ZXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvdHJlZS1zZWxlY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdHJlZS1zZWxlY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdGVtcGxhdGUubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9zdHlsZXNoZWV0L21lc3NhZ2UubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9tZXNzYWdlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvc3R5bGVzaGVldC9ub3RpZnkubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9ub3RpZnkubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3Qvc3R5bGVzaGVldC9ob3N0Lm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZW1iZWQubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vcmVhZHkubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vZm9jdXNtYW5hZ2VyLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvaW50ZXJuYWwubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2UubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2UvZGF0YS5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS9saW5rLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL2xpbmsvc3R5bGVzaGVldC5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS9zY3JpcHQubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2VtYW5hZ2VyLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L3N0eWxlc2hlZXQvY29uZmlnLW1hbmFnZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3QvY29uZmlnLW1hbmFnZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3QvaG9zdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9zdHlsZXNoZWV0L292ZXJsYXkubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3Qvb3ZlcmxheS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC91dGlsLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L3N0eWxlc2hlZXQvZGV0YWlscy5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9jb25zdGFudHMubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3Qvc3R5bGVzaGVldC9jb2xsYXBzZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9jb2xsYXBzZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9kZXRhaWxzLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvcmFuZG9taWQubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy91dWlkLm1qcyIsICJwcmVwYXJlLmpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS9yZWxvYWQubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDQuNC4xL25vZGVfbW9kdWxlcy9jaGFpL2luZGV4Lm1qcyIsICIuLi91dGlsL2NoYWktZG9tLm1qcyIsICIuLi91dGlsL2ludGVyc2VjdGlvbi1tb2NrLm1qcyIsICIuLi91dGlsL2pzZG9tLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2Zvcm0vdGFicy5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL3N0YXRlLWJ1dHRvbi5tanMiLCAiLi4vdXRpbC9yZXNpemUtb2JzZXJ2ZXIubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS9zZWxlY3QubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS9jb25maXJtLWJ1dHRvbi5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL2Zvcm0ubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS90cmVlLXNlbGVjdC5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL2J1dHRvbi5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL3RlbXBsYXRlLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL25vdGlmeS9tZXNzYWdlLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL25vdGlmeS9ub3RpZnkubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvaG9zdC9ob3N0Lm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2hvc3Qvb3ZlcmxheS5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9ob3N0L3V0aWwubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvaG9zdC9kZXRhaWxzLm1qcyIsICIuLi9jYXNlcy90ZXh0L2Zvcm1hdHRlci5tanMiLCAiLi4vLi4vc291cmNlL3RleHQvZ2VuZXJhdGUtcmFuZ2UtY29tcGFyaXNvbi1leHByZXNzaW9uLm1qcyIsICIuLi9jYXNlcy90ZXh0L3V0aWwubWpzIiwgIi4uLy4uL3NvdXJjZS90ZXh0L2JyYWNrZXRlZC1rZXktdmFsdWUtaGFzaC5tanMiLCAiLi4vY2FzZXMvdGV4dC9icmFja2V0ZWQta2V5LXZhbHVlLWhhc2gubWpzIiwgIi4uL2Nhc2VzL21hdGgvcmFuZG9tLm1qcyIsICIuLi9jYXNlcy91dGlsL3RyaW1zcGFjZXMubWpzIiwgIi4uL2Nhc2VzL3V0aWwvcHJvY2Vzc2luZy5tanMiLCAiLi4vY2FzZXMvdXRpbC9kZWFkbWFuc3N3aXRjaC5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvY29tcGFyYXRvci5tanMiLCAiLi4vY2FzZXMvdXRpbC9jb21wYXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvdXRpbC9mcmVlemUubWpzIiwgIi4uL2Nhc2VzL3V0aWwvZnJlZXplLm1qcyIsICIuLi9jYXNlcy91dGlsL2Nsb25lLm1qcyIsICIuLi8uLi9zb3VyY2UvbG9nZ2luZy9oYW5kbGVyL2NvbnNvbGUubWpzIiwgIi4uLy4uL3NvdXJjZS9sb2dnaW5nL2hhbmRsZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9sb2dnaW5nL2xvZ2VudHJ5Lm1qcyIsICIuLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dnZXIubWpzIiwgIi4uL2Nhc2VzL2xvZ2dpbmcvaGFuZGxlci9jb25zb2xlLm1qcyIsICIuLi9jYXNlcy9sb2dnaW5nL2xvZ2dlci5tanMiLCAiLi4vY2FzZXMvbG9nZ2luZy9oYW5kbGVyLm1qcyIsICIuLi9jYXNlcy9sb2dnaW5nL2xvZ2VudHJ5Lm1qcyIsICIuLi9jYXNlcy9uZXQvd2ViY29ubmVjdC5tanMiLCAiLi4vdXRpbC93ZWJzb2NrZXQubWpzIiwgIi4uL2Nhc2VzL25ldC93ZWJjb25uZWN0L21lc3NhZ2UubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy92ZXJzaW9uLm1qcyIsICIuLi9jYXNlcy9tb25zdGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2RpbWVuc2lvbi5tanMiLCAiLi4vY2FzZXMvZG9tL2RpbWVuc2lvbi5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvcnVudGltZS5tanMiLCAiLi4vY2FzZXMvZG9tL3Jlc291cmNlL2xpbmsvc3R5bGVzaGVldC5tanMiLCAiLi4vdXRpbC9jbGVhbnVwZG9tLm1qcyIsICIuLi9jYXNlcy9kb20vcmVzb3VyY2UvbGluay5tanMiLCAiLi4vY2FzZXMvZG9tL3Jlc291cmNlL3NjcmlwdC5tanMiLCAiLi4vY2FzZXMvZG9tL3Jlc291cmNlL2RhdGEubWpzIiwgIi4uL2Nhc2VzL2RvbS91dGlsL2luaXQtb3B0aW9ucy1mcm9tLWF0dHJpYnV0ZXMubWpzIiwgIi4uL2Nhc2VzL2RvbS91dGlsL2V4dHJhY3Qta2V5cy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS93b3JrZXIvZmFjdG9yeS5tanMiLCAiLi4vY2FzZXMvZG9tL3dvcmtlci9mYWN0b3J5Lm1qcyIsICIuLi9jYXNlcy9kb20vdXBkYXRlci5tanMiLCAiLi4vY2FzZXMvZG9tL2xvY2FsZS5tanMiLCAiLi4vY2FzZXMvZG9tL3RoZW1lLm1qcyIsICIuLi9jYXNlcy9kb20vY3VzdG9tZWxlbWVudC5tanMiLCAiLi4vY2FzZXMvZG9tL2ZvY3VzbWFuYWdlci5tanMiLCAiLi4vY2FzZXMvZG9tL2ZpbmQubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZWFkeS5tanMiLCAiLi4vY2FzZXMvZG9tL3V0aWwubWpzIiwgIi4uL2Nhc2VzL2RvbS9jdXN0b21lbGVtZW50LWluaXRmcm9tc2NyaXB0aG9zdC5tanMiLCAiLi4vY2FzZXMvZG9tL3Nsb3R0ZWQtbm9kZXMubWpzIiwgIi4uL2Nhc2VzL2RvbS9hdHRyaWJ1dGVzLm1qcyIsICIuLi9jYXNlcy9kb20vcmVzb3VyY2UubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZXNvdXJjZW1hbmFnZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vYXNzZW1ibGVyLm1qcyIsICIuLi9jYXNlcy9kb20vYXNzZW1ibGVyLm1qcyIsICIuLi9jYXNlcy9kb20vY3VzdG9tY29udHJvbC5tanMiLCAiLi4vY2FzZXMvZG9tL3RlbXBsYXRlLm1qcyIsICIuLi9jYXNlcy9kb20vZXZlbnRzLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL2RvbS5tanMiLCAiLi4vY2FzZXMvZGF0YS9kYXRhc291cmNlL2RvbS5tanMiLCAiLi4vY2FzZXMvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2UvbG9jYWxzdG9yYWdlLm1qcyIsICIuLi91dGlsL2xvY2Fsc3RvcmFnZS5tanMiLCAiLi4vY2FzZXMvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2Uvc2Vzc2lvbnN0b3JhZ2UubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvd2Vic29ja2V0Lm1qcyIsICIuLi9jYXNlcy9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3Jlc3RhcGkubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS5tanMiLCAiLi4vY2FzZXMvZGF0YS9idWlsZG1hcC5tanMiLCAiLi4vY2FzZXMvZGF0YS90cmFuc2Zvcm1lci5tanMiLCAiLi4vY2FzZXMvZGF0YS9kaWZmLm1qcyIsICIuLi9jYXNlcy9kYXRhL2J1aWxkdHJlZS5tanMiLCAiLi4vY2FzZXMvZGF0YS9wYXRoZmluZGVyLm1qcyIsICIuLi9jYXNlcy9kYXRhL3BpcGUubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZXh0ZW5kLm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvYWJzdHJhY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pbnZhbGlkLm1qcyIsICIuLi9jYXNlcy9jb25zdHJhaW50L2ludmFsaWQubWpzIiwgIi4uL2Nhc2VzL2NvbnN0cmFpbnQvYWJzdHJhY3RvcGVyYXRvci5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2Fic3RyYWN0b3BlcmF0b3IubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy92YWxpZC5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL29yb3BlcmF0b3IubWpzIiwgIi4uL2Nhc2VzL2NvbnN0cmFpbnQvb3JvcGVyYXRvci5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2lzb2JqZWN0Lm1qcyIsICIuLi9jYXNlcy9jb25zdHJhaW50L2lzb2JqZWN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvYW5kb3BlcmF0b3IubWpzIiwgIi4uL2Nhc2VzL2NvbnN0cmFpbnQvYW5kb3BlcmF0b3IubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pc2FycmF5Lm1qcyIsICIuLi9jYXNlcy9jb25zdHJhaW50L2lzYXJyYXkubWpzIiwgIi4uL2Nhc2VzL2NvbnN0cmFpbnQvdmFsaWQubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL25vZGVsaXN0Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9iYXNlLm1qcyIsICIuLi9jYXNlcy90eXBlcy9tZWRpYXR5cGUubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3Rva2VubGlzdC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvcHJveHlvYnNlcnZlci5tanMiLCAiLi4vY2FzZXMvdHlwZXMvdmVyc2lvbi5tanMiLCAiLi4vY2FzZXMvdHlwZXMvZ2xvYmFsLm1qcyIsICIuLi9jYXNlcy90eXBlcy9vYnNlcnZlcmxpc3QubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2ludGVybmFsLm1qcyIsICIuLi9jYXNlcy90eXBlcy9vYnNlcnZhYmxlcXVldWUubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2RhdGF1cmwubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9iaW5hcnkubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2JpbmFyeS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvb2JzZXJ2ZXIubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9yZWdleC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvcmVnZXgubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3JhbmRvbWlkLm1qcyIsICIuLi9jYXNlcy90eXBlcy9pZC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvdXVpZC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvaXMubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3ZhbGlkYXRlLm1qcyIsICIuLi9jYXNlcy90eXBlcy90eXBlb2YubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3VuaXF1ZXF1ZXVlLm1qcyIsICIuLi9jYXNlcy90eXBlcy9zdGFjay5tanMiLCAiLi4vY2FzZXMvdHlwZXMvYmFzZXdpdGhvcHRpb25zLm1qcyIsICIuLi9jYXNlcy90eXBlcy9ub2RlLm1qcyIsICIuLi9jYXNlcy90eXBlcy9xdWV1ZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvbm9kZXJlY3Vyc2l2ZWl0ZXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi9mb3JtYXR0ZXIubWpzIiwgIi4uL2Nhc2VzL2kxOG4vZm9ybWF0dGVyLm1qcyIsICIuLi9jYXNlcy9pMThuL2xvY2FsZS5tanMiLCAiLi4vY2FzZXMvaTE4bi9wcm92aWRlci5tanMiLCAiLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXJzL2ZldGNoLm1qcyIsICIuLi9jYXNlcy9pMThuL3Byb3ZpZGVycy9mZXRjaC5tanMiLCAiLi4vY2FzZXMvaTE4bi9wcm92aWRlcnMvZW1iZWQubWpzIiwgIi4uL2Nhc2VzL2kxOG4vdHJhbnNsYXRpb25zLm1qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5leHBvcnQge1xuXHRpc0l0ZXJhYmxlLFxuXHRpc1ByaW1pdGl2ZSxcblx0aXNTeW1ib2wsXG5cdGlzQm9vbGVhbixcblx0aXNTdHJpbmcsXG5cdGlzT2JqZWN0LFxuXHRpc0luc3RhbmNlLFxuXHRpc0FycmF5LFxuXHRpc0Z1bmN0aW9uLFxuXHRpc0ludGVnZXIsXG59O1xuXG4vKipcbiAqIFdpdGggdGhpcyBmdW5jdGlvbiB5b3UgY2FuIGNoZWNrIGlmIGEgdmFsdWUgaXMgaXRlcmFibGUuXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBtZXRob2QgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5UeXBlcy5pc1ByaW1pdGl2ZSgpYC5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtMS5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICovXG5mdW5jdGlvbiBpc0l0ZXJhYmxlKHZhbHVlKSB7XG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlPy5bU3ltYm9sLml0ZXJhdG9yXSA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBwcmltaXRpdmUgKHN0cmluZywgbnVtYmVyLCBib29sZWFuLCBOYU4sIHVuZGVmaW5lZCwgbnVsbCBvciBzeW1ib2wpXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTIubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0dmFyIHR5cGU7XG5cblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHR5cGUgPSB0eXBlb2YgdmFsdWU7XG5cblx0aWYgKFxuXHRcdHR5cGUgPT09IFwic3RyaW5nXCIgfHxcblx0XHR0eXBlID09PSBcIm51bWJlclwiIHx8XG5cdFx0dHlwZSA9PT0gXCJib29sZWFuXCIgfHxcblx0XHR0eXBlID09PSBcInN5bWJvbFwiXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBzeW1ib2xcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtMy5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRyZXR1cm4gXCJzeW1ib2xcIiA9PT0gdHlwZW9mIHZhbHVlID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBib29sZWFuLlxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy00Lm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZSkge1xuXHRpZiAodmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09IGZhbHNlKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIHBhc3NlZCBpcyBhIHN0cmluZ1xuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy01Lm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgb2JqZWN0XG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTYubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcblx0aWYgKGlzQXJyYXkodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblxuXHRpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIHBhc3NlZCBpcyBhIG9iamVjdCBhbmQgaW5zdGFuY2Ugb2YgaW5zdGFuY2UuXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTcubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0geyp9IGluc3RhbmNlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuZnVuY3Rpb24gaXNJbnN0YW5jZSh2YWx1ZSwgaW5zdGFuY2UpIHtcblx0aWYgKCFpc09iamVjdCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCFpc0Z1bmN0aW9uKGluc3RhbmNlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIWluc3RhbmNlLmhhc093blByb3BlcnR5KFwicHJvdG90eXBlXCIpKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIGluc3RhbmNlID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBhcnJheVxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy04Lm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2lzQXJyYXlcbiAqL1xuZnVuY3Rpb24gaXNBcnJheSh2YWx1ZSkge1xuXHRyZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIHBhc3NlZCBpcyBhIGZ1bmN0aW9uXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTkubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuXHRpZiAoaXNBcnJheSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKGlzUHJpbWl0aXZlKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXG5cdGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYW4gaW50ZWdlci5cbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtMTAubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuZnVuY3Rpb24gaXNJbnRlZ2VyKHZhbHVlKSB7XG5cdHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7XG5cdGlzQXJyYXksXG5cdGlzQm9vbGVhbixcblx0aXNGdW5jdGlvbixcblx0aXNJbnN0YW5jZSxcblx0aXNJbnRlZ2VyLFxuXHRpc0l0ZXJhYmxlLFxuXHRpc09iamVjdCxcblx0aXNQcmltaXRpdmUsXG5cdGlzU3RyaW5nLFxuXHRpc1N5bWJvbCxcbn0gZnJvbSBcIi4vaXMubWpzXCI7XG5cbmV4cG9ydCB7XG5cdHZhbGlkYXRlSXRlcmFibGUsXG5cdHZhbGlkYXRlUHJpbWl0aXZlLFxuXHR2YWxpZGF0ZUJvb2xlYW4sXG5cdHZhbGlkYXRlU3RyaW5nLFxuXHR2YWxpZGF0ZU9iamVjdCxcblx0dmFsaWRhdGVJbnN0YW5jZSxcblx0dmFsaWRhdGVBcnJheSxcblx0dmFsaWRhdGVTeW1ib2wsXG5cdHZhbGlkYXRlRnVuY3Rpb24sXG5cdHZhbGlkYXRlSW50ZWdlcixcbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIHByaW1pdGl2ZSB0eXBlLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc1ByaW1pdGl2ZSgpIGV4Y2VwdCB0aGF0IGEgVHlwZUVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt2YWxpZGF0ZUl0ZXJhYmxlfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVJdGVyYWJsZSgnMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVJdGVyYWJsZShbXSkpICAvLyBcdTIxQTYgdmFsdWVcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgcHJpbWl0aXZlXG4gKiBAc2VlIHtAbGluayBpc1ByaW1pdGl2ZX1cbiAqIEBzZWUge0BsaW5rIE1vbnN0ZXIuVHlwZXMuaXNQcmltaXRpdmV9XG4gKiBAc2VlIHtAbGluayBNb25zdGVyLlR5cGVzI2lzUHJpbWl0aXZlfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUl0ZXJhYmxlKHZhbHVlKSB7XG5cdGlmICghaXNJdGVyYWJsZSh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGl0ZXJhYmxlXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgcHJpbWl0aXZlIHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzUHJpbWl0aXZlKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlUHJpbWl0aXZlfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVQcmltaXRpdmUoJzInKSkgIC8vIFx1MjFBNiB2YWx1ZVxuICogY29uc29sZS5sb2codmFsaWRhdGVQcmltaXRpdmUoW10pKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBwcmltaXRpdmVcbiAqIEBzZWUge0BsaW5rIGlzUHJpbWl0aXZlfVxuICogQHNlZSB7QGxpbmsgTW9uc3Rlci5UeXBlcy5pc1ByaW1pdGl2ZX1cbiAqIEBzZWUge0BsaW5rIE1vbnN0ZXIuVHlwZXMjaXNQcmltaXRpdmV9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUHJpbWl0aXZlKHZhbHVlKSB7XG5cdGlmICghaXNQcmltaXRpdmUodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhIHByaW1pdGl2ZVwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIGJvb2xlYW4gdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNCb29sZWFuKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlQm9vbGVhbn0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlQm9vbGVhbihmYWxzZSkpICAvLyBcdTIxQTYgdmFsdWVcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlQm9vbGVhbignMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVCb29sZWFuKFtdKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcblxuICogQHRocm93cyB7VHlwZUVycm9yfSAgdmFsdWUgaXMgbm90IHByaW1pdGl2ZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUJvb2xlYW4odmFsdWUpIHtcblx0aWYgKCFpc0Jvb2xlYW4odmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhIGJvb2xlYW5cIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBzdHJpbmcgdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNTdHJpbmcoKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVTdHJpbmd9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZVN0cmluZygnMicpKSAgLy8gXHUyMUE2IHZhbHVlXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZVN0cmluZyhbXSkpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN0cmluZyh2YWx1ZSkge1xuXHRpZiAoIWlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYSBzdHJpbmdcIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBvYmplY3QgdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNPYmplY3QoKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVPYmplY3R9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZU9iamVjdCh7fSkpICAvLyBcdTIxQTYgdmFsdWVcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlT2JqZWN0KCcyJykpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZU9iamVjdChbXSkpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZU9iamVjdCh2YWx1ZSkge1xuXHRpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYSBvYmplY3RcIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBvYmplY3QgaW5zdGFuY2UuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVJbnN0YW5jZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSW5zdGFuY2Uoe30sIE9iamVjdCkpIC8vIFx1MjFBNiB2YWx1ZVxuICogY29uc29sZS5sb2codmFsaWRhdGVJbnN0YW5jZSgnMicsIE9iamVjdCkpIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSW5zdGFuY2UoW10sIE9iamVjdCkpIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlSW5zdGFuY2UodmFsdWUsIGluc3RhbmNlKSB7XG5cdGlmICghaXNJbnN0YW5jZSh2YWx1ZSwgaW5zdGFuY2UpKSB7XG5cdFx0bGV0IG4gPSBcIlwiO1xuXHRcdGlmIChpc09iamVjdChpbnN0YW5jZSkgfHwgaXNGdW5jdGlvbihpbnN0YW5jZSkpIHtcblx0XHRcdG4gPSBpbnN0YW5jZT8uW1wibmFtZVwiXTtcblx0XHR9XG5cblx0XHRpZiAobikge1xuXHRcdFx0biA9IGAgJHtufWA7XG5cdFx0fVxuXG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mJHtufWApO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgYXJyYXkgdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNBcnJheSgpIGV4Y2VwdCB0aGF0IGEgVHlwZUVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt2YWxpZGF0ZUFycmF5fSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVBcnJheSgnMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVBcnJheShbXSkpICAvLyBcdTIxQTYgdmFsdWVcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGFycmF5XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQXJyYXkodmFsdWUpIHtcblx0aWYgKCFpc0FycmF5KHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYW4gYXJyYXlcIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBzeW1ib2wgdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNTeW1ib2woKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVTeW1ib2x9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZVN5bWJvbCgnMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVTeW1ib2woKSkgIC8vIFx1MjFBNiB2YWx1ZVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gc3ltYm9sXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU3ltYm9sKHZhbHVlKSB7XG5cdGlmICghaXNTeW1ib2wodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhbiBzeW1ib2xcIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBmdW5jdGlvbiB0eXBlLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc0Z1bmN0aW9uKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlRnVuY3Rpb259IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUZ1bmN0aW9uKCgpPT57fSkpIC8vIFx1MjFBNiB2YWx1ZVxuICogY29uc29sZS5sb2codmFsaWRhdGVGdW5jdGlvbignMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVGdW5jdGlvbihbXSkpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRnVuY3Rpb24odmFsdWUpIHtcblx0aWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIGlzIGFuIGludGVnZXIuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzSW50ZWdlcigpIGV4Y2VwdCB0aGF0IGEgVHlwZUVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt2YWxpZGF0ZUZ1bmN0aW9ufSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVJbnRlZ2VyKHRydWUpKSAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUludGVnZXIoJzInKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSW50ZWdlcigyKSkgIC8vIFx1MjFBNiB2YWx1ZVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS40LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUludGVnZXIodmFsdWUpIHtcblx0aWYgKCFpc0ludGVnZXIodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7XG5cdHZhbGlkYXRlRnVuY3Rpb24sXG5cdHZhbGlkYXRlT2JqZWN0LFxuXHR2YWxpZGF0ZVN0cmluZyxcbn0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IGdldEdsb2JhbCwgZ2V0R2xvYmFsT2JqZWN0LCBnZXRHbG9iYWxGdW5jdGlvbiB9O1xuXG4vKipcbiAqIEB0eXBlIHtvYmplY31cbiAqIEBwcml2YXRlXG4gKi9cbmxldCBnbG9iYWxSZWZlcmVuY2U7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBlbnZpcm9ubWVudC5cbiAqL1xuKGZ1bmN0aW9uICgpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Z2xvYmFsUmVmZXJlbmNlID0gZ2xvYmFsVGhpcztcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRnbG9iYWxSZWZlcmVuY2UgPSBzZWxmO1xuXHRcdHJldHVybjtcblx0fSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0Z2xvYmFsUmVmZXJlbmNlID0gd2luZG93O1xuXHRcdHJldHVybjtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBlLCBcIl9fbW9uc3Rlcl9fXCIsIHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHR9KTtcblxuXHRpZiAodHlwZW9mIF9fbW9uc3Rlcl9fID09PSBcIm9iamVjdFwiKSB7XG5cdFx0X19tb25zdGVyX18uZ2xvYmFsVGhpcyA9IF9fbW9uc3Rlcl9fO1xuXHRcdGRlbGV0ZSBPYmplY3QucHJvdG90eXBlLl9fbW9uc3Rlcl9fO1xuXG5cdFx0Z2xvYmFsUmVmZXJlbmNlID0gZ2xvYmFsVGhpcztcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0cnkge1xuXHRcdGdsb2JhbFJlZmVyZW5jZSA9IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcblx0fSBjYXRjaCAoZSkge31cblxuXHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBlbnZpcm9ubWVudC5cIik7XG59KSgpO1xuXG4vKipcbiAqIFJldHVybiBnbG9iYWxUaGlzXG4gKlxuICogSWYgZ2xvYmFsVGhpcyBpcyBub3QgYXZhaWxhYmxlLCBpdCB3aWxsIGJlIHBvbHlmaWxsZWRcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEByZXR1cm5zIHtvYmplY30gZ2xvYmFsVGhpc1xuICovXG5mdW5jdGlvbiBnZXRHbG9iYWwoKSB7XG5cdHJldHVybiBnbG9iYWxSZWZlcmVuY2U7XG59XG5cbi8qKlxuICogUmV0dXJuIGdsb2JhbCBvYmplY3Qgb3IgdGhyb3cgRXJyb3JcbiAqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIG1ldGhvZCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLlR5cGVzLmdldEdsb2JhbE9iamVjdCgpYC5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtNb25zdGVyfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9tb25zdGVyLm1qcyc7XG4gKiBNb25zdGVyLlR5cGVzLmdldEdsb2JhbE9iamVjdCgnZG9jdW1lbnQnKVxuICogLy8gXHUyMUE2IHsgfVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFsc28gaW50ZWdyYXRlIHRoaXMgZnVuY3Rpb24gaW5kaXZpZHVhbGx5LlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge2dldEdsb2JhbE9iamVjdH0gZnJvbSAnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9Ac2NodWthaS9tb25zdGVyQDEuMzAuMC9kaXN0L21vZHVsZXMvdHlwZXMvZ2xvYmFsLm1qcyc7XG4gKiBnZXRHbG9iYWxPYmplY3QoJ2RvY3VtZW50JylcbiAqIC8vIFx1MjFBNiB7IH1cbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge29iamVjfVxuICogQHRocm93cyB7RXJyb3J9IHRoZSBvYmplY3QgaXMgbm90IGRlZmluZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRHbG9iYWxPYmplY3QobmFtZSkge1xuXHR2YWxpZGF0ZVN0cmluZyhuYW1lKTtcblx0Y29uc3QgbyA9IGdsb2JhbFJlZmVyZW5jZT8uW25hbWVdO1xuXHRpZiAodHlwZW9mIG8gPT09IFwidW5kZWZpbmVkXCIpXG5cdFx0dGhyb3cgbmV3IEVycm9yKGB0aGUgb2JqZWN0ICR7bmFtZX0gaXMgbm90IGRlZmluZWRgKTtcblx0dmFsaWRhdGVPYmplY3Qobyk7XG5cdHJldHVybiBvO1xufVxuXG4vKipcbiAqIFJldHVybiBnbG9iYWwgZnVuY3Rpb24gb3IgdGhyb3cgRXJyb3JcbiAqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIG1ldGhvZCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLlR5cGVzLmdldEdsb2JhbEZ1bmN0aW9uKClgLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge01vbnN0ZXJ9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL21vbnN0ZXIubWpzJztcbiAqIGNvbnNvbGUubG9nKE1vbnN0ZXIuVHlwZXMuZ2V0R2xvYmFsRnVuY3Rpb24oJ3BhcnNlSW50JykpIC8vIFx1MjFBNiBmIHBhcnNlSW50KCkgeyB9XG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWxzbyBpbnRlZ3JhdGUgdGhpcyBmdW5jdGlvbiBpbmRpdmlkdWFsbHkuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7Z2V0R2xvYmFsRnVuY3Rpb259IGZyb20gJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQHNjaHVrYWkvbW9uc3RlckAxLjMwLjAvZGlzdC9tb2R1bGVzL3R5cGVzL2dsb2JhbC5tanMnO1xuICogY29uc29sZS5sb2coZ2V0R2xvYmFsRnVuY3Rpb24oJ3BhcnNlSW50JykpIC8vIFx1MjFBNiBmIHBhcnNlSW50KCkgeyB9XG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm4ge29iamVjfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuICogQHRocm93cyB7RXJyb3J9IHRoZSBmdW5jdGlvbiBpcyBub3QgZGVmaW5lZFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0R2xvYmFsRnVuY3Rpb24obmFtZSkge1xuXHR2YWxpZGF0ZVN0cmluZyhuYW1lKTtcblx0Y29uc3QgZiA9IGdsb2JhbFJlZmVyZW5jZT8uW25hbWVdO1xuXHRpZiAodHlwZW9mIGYgPT09IFwidW5kZWZpbmVkXCIpXG5cdFx0dGhyb3cgbmV3IEVycm9yKGB0aGUgZnVuY3Rpb24gJHtuYW1lfSBpcyBub3QgZGVmaW5lZGApO1xuXHR2YWxpZGF0ZUZ1bmN0aW9uKGYpO1xuXHRyZXR1cm4gZjtcbn1cbiIsICIvKiFcbiAqIGFzc2VydGlvbi1lcnJvclxuICogQ29weXJpZ2h0KGMpIDIwMTMgSmFrZSBMdWVyIDxqYWtlQHF1YWxpYW5jeS5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKiFcbiAqIFJldHVybiBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogb25lIG9iamVjdCB0byBhbm90aGVyIGV4Y2x1ZGluZyBhbnkgb3JpZ2luYWxseVxuICogbGlzdGVkLiBSZXR1cm5lZCBmdW5jdGlvbiB3aWxsIGNyZWF0ZSBhIG5ldyBge31gLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBleGNsdWRlZCBwcm9wZXJ0aWVzIC4uLlxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cblxuZnVuY3Rpb24gZXhjbHVkZSAoKSB7XG4gIHZhciBleGNsdWRlcyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblxuICBmdW5jdGlvbiBleGNsdWRlUHJvcHMgKHJlcywgb2JqKSB7XG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmICghfmV4Y2x1ZGVzLmluZGV4T2Yoa2V5KSkgcmVzW2tleV0gPSBvYmpba2V5XTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiBleHRlbmRFeGNsdWRlICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKVxuICAgICAgLCBpID0gMFxuICAgICAgLCByZXMgPSB7fTtcblxuICAgIGZvciAoOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgZXhjbHVkZVByb3BzKHJlcywgYXJnc1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcbn07XG5cbi8qIVxuICogUHJpbWFyeSBFeHBvcnRzXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBBc3NlcnRpb25FcnJvcjtcblxuLyoqXG4gKiAjIyMgQXNzZXJ0aW9uRXJyb3JcbiAqXG4gKiBBbiBleHRlbnNpb24gb2YgdGhlIEphdmFTY3JpcHQgYEVycm9yYCBjb25zdHJ1Y3RvciBmb3JcbiAqIGFzc2VydGlvbiBhbmQgdmFsaWRhdGlvbiBzY2VuYXJpb3MuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIHRvIGluY2x1ZGUgKG9wdGlvbmFsKVxuICogQHBhcmFtIHtjYWxsZWV9IHN0YXJ0IHN0YWNrIGZ1bmN0aW9uIChvcHRpb25hbClcbiAqL1xuXG5mdW5jdGlvbiBBc3NlcnRpb25FcnJvciAobWVzc2FnZSwgX3Byb3BzLCBzc2YpIHtcbiAgdmFyIGV4dGVuZCA9IGV4Y2x1ZGUoJ25hbWUnLCAnbWVzc2FnZScsICdzdGFjaycsICdjb25zdHJ1Y3RvcicsICd0b0pTT04nKVxuICAgICwgcHJvcHMgPSBleHRlbmQoX3Byb3BzIHx8IHt9KTtcblxuICAvLyBkZWZhdWx0IHZhbHVlc1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdVbnNwZWNpZmllZCBBc3NlcnRpb25FcnJvcic7XG4gIHRoaXMuc2hvd0RpZmYgPSBmYWxzZTtcblxuICAvLyBjb3B5IGZyb20gcHJvcGVydGllc1xuICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICB0aGlzW2tleV0gPSBwcm9wc1trZXldO1xuICB9XG5cbiAgLy8gY2FwdHVyZSBzdGFjayB0cmFjZVxuICBzc2YgPSBzc2YgfHwgQXNzZXJ0aW9uRXJyb3I7XG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHNzZik7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgdGhpcy5zdGFjayA9IGUuc3RhY2s7XG4gICAgfVxuICB9XG59XG5cbi8qIVxuICogSW5oZXJpdCBmcm9tIEVycm9yLnByb3RvdHlwZVxuICovXG5cbkFzc2VydGlvbkVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcblxuLyohXG4gKiBTdGF0aWNhbGx5IHNldCBuYW1lXG4gKi9cblxuQXNzZXJ0aW9uRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnQXNzZXJ0aW9uRXJyb3InO1xuXG4vKiFcbiAqIEVuc3VyZSBjb3JyZWN0IGNvbnN0cnVjdG9yXG4gKi9cblxuQXNzZXJ0aW9uRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXNzZXJ0aW9uRXJyb3I7XG5cbi8qKlxuICogQWxsb3cgZXJyb3JzIHRvIGJlIGNvbnZlcnRlZCB0byBKU09OIGZvciBzdGF0aWMgdHJhbnNmZXIuXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBpbmNsdWRlIHN0YWNrIChkZWZhdWx0OiBgdHJ1ZWApXG4gKiBAcmV0dXJuIHtPYmplY3R9IG9iamVjdCB0aGF0IGNhbiBiZSBgSlNPTi5zdHJpbmdpZnlgXG4gKi9cblxuQXNzZXJ0aW9uRXJyb3IucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIChzdGFjaykge1xuICB2YXIgZXh0ZW5kID0gZXhjbHVkZSgnY29uc3RydWN0b3InLCAndG9KU09OJywgJ3N0YWNrJylcbiAgICAsIHByb3BzID0gZXh0ZW5kKHsgbmFtZTogdGhpcy5uYW1lIH0sIHRoaXMpO1xuXG4gIC8vIGluY2x1ZGUgc3RhY2sgaWYgZXhpc3RzIGFuZCBub3QgdHVybmVkIG9mZlxuICBpZiAoZmFsc2UgIT09IHN0YWNrICYmIHRoaXMuc3RhY2spIHtcbiAgICBwcm9wcy5zdGFjayA9IHRoaXMuc3RhY2s7XG4gIH1cblxuICByZXR1cm4gcHJvcHM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuLyogIVxuICogQ2hhaSAtIHBhdGh2YWwgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2xvZ2ljYWxwYXJhZG94L2ZpbHRyXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMjIyAuaGFzUHJvcGVydHkob2JqZWN0LCBuYW1lKVxuICpcbiAqIFRoaXMgYWxsb3dzIGNoZWNraW5nIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBvd25cbiAqIG9yIGluaGVyaXRlZCBmcm9tIHByb3RvdHlwZSBjaGFpbiBuYW1lZCBwcm9wZXJ0eS5cbiAqXG4gKiBCYXNpY2FsbHkgZG9lcyB0aGUgc2FtZSB0aGluZyBhcyB0aGUgYGluYFxuICogb3BlcmF0b3IgYnV0IHdvcmtzIHByb3Blcmx5IHdpdGggbnVsbC91bmRlZmluZWQgdmFsdWVzXG4gKiBhbmQgb3RoZXIgcHJpbWl0aXZlcy5cbiAqXG4gKiAgICAgdmFyIG9iaiA9IHtcbiAqICAgICAgICAgYXJyOiBbJ2EnLCAnYicsICdjJ11cbiAqICAgICAgICwgc3RyOiAnSGVsbG8nXG4gKiAgICAgfVxuICpcbiAqIFRoZSBmb2xsb3dpbmcgd291bGQgYmUgdGhlIHJlc3VsdHMuXG4gKlxuICogICAgIGhhc1Byb3BlcnR5KG9iaiwgJ3N0cicpOyAgLy8gdHJ1ZVxuICogICAgIGhhc1Byb3BlcnR5KG9iaiwgJ2NvbnN0cnVjdG9yJyk7ICAvLyB0cnVlXG4gKiAgICAgaGFzUHJvcGVydHkob2JqLCAnYmFyJyk7ICAvLyBmYWxzZVxuICpcbiAqICAgICBoYXNQcm9wZXJ0eShvYmouc3RyLCAnbGVuZ3RoJyk7IC8vIHRydWVcbiAqICAgICBoYXNQcm9wZXJ0eShvYmouc3RyLCAxKTsgIC8vIHRydWVcbiAqICAgICBoYXNQcm9wZXJ0eShvYmouc3RyLCA1KTsgIC8vIGZhbHNlXG4gKlxuICogICAgIGhhc1Byb3BlcnR5KG9iai5hcnIsICdsZW5ndGgnKTsgIC8vIHRydWVcbiAqICAgICBoYXNQcm9wZXJ0eShvYmouYXJyLCAyKTsgIC8vIHRydWVcbiAqICAgICBoYXNQcm9wZXJ0eShvYmouYXJyLCAzKTsgIC8vIGZhbHNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtTdHJpbmd8U3ltYm9sfSBuYW1lXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gd2hldGhlciBpdCBleGlzdHNcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIGhhc1Byb3BlcnR5XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGhhc1Byb3BlcnR5KG9iaiwgbmFtZSkge1xuICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcgfHwgb2JqID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gVGhlIGBpbmAgb3BlcmF0b3IgZG9lcyBub3Qgd29yayB3aXRoIHByaW1pdGl2ZXMuXG4gIHJldHVybiBuYW1lIGluIE9iamVjdChvYmopO1xufVxuXG4vKiAhXG4gKiAjIyBwYXJzZVBhdGgocGF0aClcbiAqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdXNlZCB0byBwYXJzZSBzdHJpbmcgb2JqZWN0XG4gKiBwYXRocy4gVXNlIGluIGNvbmp1bmN0aW9uIHdpdGggYGludGVybmFsR2V0UGF0aFZhbHVlYC5cbiAqXG4gKiAgICAgIHZhciBwYXJzZWQgPSBwYXJzZVBhdGgoJ215b2JqZWN0LnByb3BlcnR5LnN1YnByb3AnKTtcbiAqXG4gKiAjIyMgUGF0aHM6XG4gKlxuICogKiBDYW4gYmUgaW5maW5pdGVseSBkZWVwIGFuZCBuZXN0ZWQuXG4gKiAqIEFycmF5cyBhcmUgYWxzbyB2YWxpZCB1c2luZyB0aGUgZm9ybWFsIGBteW9iamVjdC5kb2N1bWVudFszXS5wcm9wZXJ0eWAuXG4gKiAqIExpdGVyYWwgZG90cyBhbmQgYnJhY2tldHMgKG5vdCBkZWxpbWl0ZXIpIG11c3QgYmUgYmFja3NsYXNoLWVzY2FwZWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqIEByZXR1cm5zIHtPYmplY3R9IHBhcnNlZFxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2VQYXRoKHBhdGgpIHtcbiAgdmFyIHN0ciA9IHBhdGgucmVwbGFjZSgvKFteXFxcXF0pXFxbL2csICckMS5bJyk7XG4gIHZhciBwYXJ0cyA9IHN0ci5tYXRjaCgvKFxcXFxcXC58W14uXSs/KSsvZyk7XG4gIHJldHVybiBwYXJ0cy5tYXAoZnVuY3Rpb24gbWFwTWF0Y2hlcyh2YWx1ZSkge1xuICAgIGlmIChcbiAgICAgIHZhbHVlID09PSAnY29uc3RydWN0b3InIHx8XG4gICAgICB2YWx1ZSA9PT0gJ19fcHJvdG9fXycgfHxcbiAgICAgIHZhbHVlID09PSAncHJvdG90eXBlJ1xuICAgICkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICB2YXIgcmVnZXhwID0gL15cXFsoXFxkKylcXF0kLztcbiAgICB2YXIgbUFyciA9IHJlZ2V4cC5leGVjKHZhbHVlKTtcbiAgICB2YXIgcGFyc2VkID0gbnVsbDtcbiAgICBpZiAobUFycikge1xuICAgICAgcGFyc2VkID0geyBpOiBwYXJzZUZsb2F0KG1BcnJbMV0pIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZCA9IHsgcDogdmFsdWUucmVwbGFjZSgvXFxcXChbLltcXF1dKS9nLCAnJDEnKSB9O1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH0pO1xufVxuXG4vKiAhXG4gKiAjIyBpbnRlcm5hbEdldFBhdGhWYWx1ZShvYmosIHBhcnNlZFssIHBhdGhEZXB0aF0pXG4gKlxuICogSGVscGVyIGNvbXBhbmlvbiBmdW5jdGlvbiBmb3IgYC5wYXJzZVBhdGhgIHRoYXQgcmV0dXJuc1xuICogdGhlIHZhbHVlIGxvY2F0ZWQgYXQgdGhlIHBhcnNlZCBhZGRyZXNzLlxuICpcbiAqICAgICAgdmFyIHZhbHVlID0gZ2V0UGF0aFZhbHVlKG9iaiwgcGFyc2VkKTtcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IHRvIHNlYXJjaCBhZ2FpbnN0XG4gKiBAcGFyYW0ge09iamVjdH0gcGFyc2VkIGRlZmluaXRpb24gZnJvbSBgcGFyc2VQYXRoYC5cbiAqIEBwYXJhbSB7TnVtYmVyfSBkZXB0aCAobmVzdGluZyBsZXZlbCkgb2YgdGhlIHByb3BlcnR5IHdlIHdhbnQgdG8gcmV0cmlldmVcbiAqIEByZXR1cm5zIHtPYmplY3R8VW5kZWZpbmVkfSB2YWx1ZVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gaW50ZXJuYWxHZXRQYXRoVmFsdWUob2JqLCBwYXJzZWQsIHBhdGhEZXB0aCkge1xuICB2YXIgdGVtcG9yYXJ5VmFsdWUgPSBvYmo7XG4gIHZhciByZXMgPSBudWxsO1xuICBwYXRoRGVwdGggPSB0eXBlb2YgcGF0aERlcHRoID09PSAndW5kZWZpbmVkJyA/IHBhcnNlZC5sZW5ndGggOiBwYXRoRGVwdGg7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoRGVwdGg7IGkrKykge1xuICAgIHZhciBwYXJ0ID0gcGFyc2VkW2ldO1xuICAgIGlmICh0ZW1wb3JhcnlWYWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiBwYXJ0LnAgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRlbXBvcmFyeVZhbHVlID0gdGVtcG9yYXJ5VmFsdWVbcGFydC5pXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRlbXBvcmFyeVZhbHVlID0gdGVtcG9yYXJ5VmFsdWVbcGFydC5wXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGkgPT09IHBhdGhEZXB0aCAtIDEpIHtcbiAgICAgICAgcmVzID0gdGVtcG9yYXJ5VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxuLyogIVxuICogIyMgaW50ZXJuYWxTZXRQYXRoVmFsdWUob2JqLCB2YWx1ZSwgcGFyc2VkKVxuICpcbiAqIENvbXBhbmlvbiBmdW5jdGlvbiBmb3IgYHBhcnNlUGF0aGAgdGhhdCBzZXRzXG4gKiB0aGUgdmFsdWUgbG9jYXRlZCBhdCBhIHBhcnNlZCBhZGRyZXNzLlxuICpcbiAqICBpbnRlcm5hbFNldFBhdGhWYWx1ZShvYmosICd2YWx1ZScsIHBhcnNlZCk7XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCB0byBzZWFyY2ggYW5kIGRlZmluZSBvblxuICogQHBhcmFtIHsqfSB2YWx1ZSB0byB1c2UgdXBvbiBzZXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJzZWQgZGVmaW5pdGlvbiBmcm9tIGBwYXJzZVBhdGhgXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBpbnRlcm5hbFNldFBhdGhWYWx1ZShvYmosIHZhbCwgcGFyc2VkKSB7XG4gIHZhciB0ZW1wT2JqID0gb2JqO1xuICB2YXIgcGF0aERlcHRoID0gcGFyc2VkLmxlbmd0aDtcbiAgdmFyIHBhcnQgPSBudWxsO1xuICAvLyBIZXJlIHdlIGl0ZXJhdGUgdGhyb3VnaCBldmVyeSBwYXJ0IG9mIHRoZSBwYXRoXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aERlcHRoOyBpKyspIHtcbiAgICB2YXIgcHJvcE5hbWUgPSBudWxsO1xuICAgIHZhciBwcm9wVmFsID0gbnVsbDtcbiAgICBwYXJ0ID0gcGFyc2VkW2ldO1xuXG4gICAgLy8gSWYgaXQncyB0aGUgbGFzdCBwYXJ0IG9mIHRoZSBwYXRoLCB3ZSBzZXQgdGhlICdwcm9wTmFtZScgdmFsdWUgd2l0aCB0aGUgcHJvcGVydHkgbmFtZVxuICAgIGlmIChpID09PSBwYXRoRGVwdGggLSAxKSB7XG4gICAgICBwcm9wTmFtZSA9IHR5cGVvZiBwYXJ0LnAgPT09ICd1bmRlZmluZWQnID8gcGFydC5pIDogcGFydC5wO1xuICAgICAgLy8gTm93IHdlIHNldCB0aGUgcHJvcGVydHkgd2l0aCB0aGUgbmFtZSBoZWxkIGJ5ICdwcm9wTmFtZScgb24gb2JqZWN0IHdpdGggdGhlIGRlc2lyZWQgdmFsXG4gICAgICB0ZW1wT2JqW3Byb3BOYW1lXSA9IHZhbDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwYXJ0LnAgIT09ICd1bmRlZmluZWQnICYmIHRlbXBPYmpbcGFydC5wXSkge1xuICAgICAgdGVtcE9iaiA9IHRlbXBPYmpbcGFydC5wXTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwYXJ0LmkgIT09ICd1bmRlZmluZWQnICYmIHRlbXBPYmpbcGFydC5pXSkge1xuICAgICAgdGVtcE9iaiA9IHRlbXBPYmpbcGFydC5pXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlIG9iaiBkb2Vzbid0IGhhdmUgdGhlIHByb3BlcnR5IHdlIGNyZWF0ZSBvbmUgd2l0aCB0aGF0IG5hbWUgdG8gZGVmaW5lIGl0XG4gICAgICB2YXIgbmV4dCA9IHBhcnNlZFtpICsgMV07XG4gICAgICAvLyBIZXJlIHdlIHNldCB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgd2hpY2ggd2lsbCBiZSBkZWZpbmVkXG4gICAgICBwcm9wTmFtZSA9IHR5cGVvZiBwYXJ0LnAgPT09ICd1bmRlZmluZWQnID8gcGFydC5pIDogcGFydC5wO1xuICAgICAgLy8gSGVyZSB3ZSBkZWNpZGUgaWYgdGhpcyBwcm9wZXJ0eSB3aWxsIGJlIGFuIGFycmF5IG9yIGEgbmV3IG9iamVjdFxuICAgICAgcHJvcFZhbCA9IHR5cGVvZiBuZXh0LnAgPT09ICd1bmRlZmluZWQnID8gW10gOiB7fTtcbiAgICAgIHRlbXBPYmpbcHJvcE5hbWVdID0gcHJvcFZhbDtcbiAgICAgIHRlbXBPYmogPSB0ZW1wT2JqW3Byb3BOYW1lXTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiAjIyMgLmdldFBhdGhJbmZvKG9iamVjdCwgcGF0aClcbiAqXG4gKiBUaGlzIGFsbG93cyB0aGUgcmV0cmlldmFsIG9mIHByb3BlcnR5IGluZm8gaW4gYW5cbiAqIG9iamVjdCBnaXZlbiBhIHN0cmluZyBwYXRoLlxuICpcbiAqIFRoZSBwYXRoIGluZm8gY29uc2lzdHMgb2YgYW4gb2JqZWN0IHdpdGggdGhlXG4gKiBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAqIHBhcmVudCAtIFRoZSBwYXJlbnQgb2JqZWN0IG9mIHRoZSBwcm9wZXJ0eSByZWZlcmVuY2VkIGJ5IGBwYXRoYFxuICogKiBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGZpbmFsIHByb3BlcnR5LCBhIG51bWJlciBpZiBpdCB3YXMgYW4gYXJyYXkgaW5kZXhlclxuICogKiB2YWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHksIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIGB1bmRlZmluZWRgXG4gKiAqIGV4aXN0cyAtIFdoZXRoZXIgdGhlIHByb3BlcnR5IGV4aXN0cyBvciBub3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0aFxuICogQHJldHVybnMge09iamVjdH0gaW5mb1xuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgZ2V0UGF0aEluZm9cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZ2V0UGF0aEluZm8ob2JqLCBwYXRoKSB7XG4gIHZhciBwYXJzZWQgPSBwYXJzZVBhdGgocGF0aCk7XG4gIHZhciBsYXN0ID0gcGFyc2VkW3BhcnNlZC5sZW5ndGggLSAxXTtcbiAgdmFyIGluZm8gPSB7XG4gICAgcGFyZW50OlxuICAgICAgcGFyc2VkLmxlbmd0aCA+IDEgP1xuICAgICAgICBpbnRlcm5hbEdldFBhdGhWYWx1ZShvYmosIHBhcnNlZCwgcGFyc2VkLmxlbmd0aCAtIDEpIDpcbiAgICAgICAgb2JqLFxuICAgIG5hbWU6IGxhc3QucCB8fCBsYXN0LmksXG4gICAgdmFsdWU6IGludGVybmFsR2V0UGF0aFZhbHVlKG9iaiwgcGFyc2VkKSxcbiAgfTtcbiAgaW5mby5leGlzdHMgPSBoYXNQcm9wZXJ0eShpbmZvLnBhcmVudCwgaW5mby5uYW1lKTtcblxuICByZXR1cm4gaW5mbztcbn1cblxuLyoqXG4gKiAjIyMgLmdldFBhdGhWYWx1ZShvYmplY3QsIHBhdGgpXG4gKlxuICogVGhpcyBhbGxvd3MgdGhlIHJldHJpZXZhbCBvZiB2YWx1ZXMgaW4gYW5cbiAqIG9iamVjdCBnaXZlbiBhIHN0cmluZyBwYXRoLlxuICpcbiAqICAgICB2YXIgb2JqID0ge1xuICogICAgICAgICBwcm9wMToge1xuICogICAgICAgICAgICAgYXJyOiBbJ2EnLCAnYicsICdjJ11cbiAqICAgICAgICAgICAsIHN0cjogJ0hlbGxvJ1xuICogICAgICAgICB9XG4gKiAgICAgICAsIHByb3AyOiB7XG4gKiAgICAgICAgICAgICBhcnI6IFsgeyBuZXN0ZWQ6ICdVbml2ZXJzZScgfSBdXG4gKiAgICAgICAgICAgLCBzdHI6ICdIZWxsbyBhZ2FpbiEnXG4gKiAgICAgICAgIH1cbiAqICAgICB9XG4gKlxuICogVGhlIGZvbGxvd2luZyB3b3VsZCBiZSB0aGUgcmVzdWx0cy5cbiAqXG4gKiAgICAgZ2V0UGF0aFZhbHVlKG9iaiwgJ3Byb3AxLnN0cicpOyAvLyBIZWxsb1xuICogICAgIGdldFBhdGhWYWx1ZShvYmosICdwcm9wMS5hdHRbMl0nKTsgLy8gYlxuICogICAgIGdldFBhdGhWYWx1ZShvYmosICdwcm9wMi5hcnJbMF0ubmVzdGVkJyk7IC8vIFVuaXZlcnNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqIEByZXR1cm5zIHtPYmplY3R9IHZhbHVlIG9yIGB1bmRlZmluZWRgXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBnZXRQYXRoVmFsdWVcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZ2V0UGF0aFZhbHVlKG9iaiwgcGF0aCkge1xuICB2YXIgaW5mbyA9IGdldFBhdGhJbmZvKG9iaiwgcGF0aCk7XG4gIHJldHVybiBpbmZvLnZhbHVlO1xufVxuXG4vKipcbiAqICMjIyAuc2V0UGF0aFZhbHVlKG9iamVjdCwgcGF0aCwgdmFsdWUpXG4gKlxuICogRGVmaW5lIHRoZSB2YWx1ZSBpbiBhbiBvYmplY3QgYXQgYSBnaXZlbiBzdHJpbmcgcGF0aC5cbiAqXG4gKiBgYGBqc1xuICogdmFyIG9iaiA9IHtcbiAqICAgICBwcm9wMToge1xuICogICAgICAgICBhcnI6IFsnYScsICdiJywgJ2MnXVxuICogICAgICAgLCBzdHI6ICdIZWxsbydcbiAqICAgICB9XG4gKiAgICwgcHJvcDI6IHtcbiAqICAgICAgICAgYXJyOiBbIHsgbmVzdGVkOiAnVW5pdmVyc2UnIH0gXVxuICogICAgICAgLCBzdHI6ICdIZWxsbyBhZ2FpbiEnXG4gKiAgICAgfVxuICogfTtcbiAqIGBgYFxuICpcbiAqIFRoZSBmb2xsb3dpbmcgd291bGQgYmUgYWNjZXB0YWJsZS5cbiAqXG4gKiBgYGBqc1xuICogdmFyIHByb3BlcnRpZXMgPSByZXF1aXJlKCd0ZWEtcHJvcGVydGllcycpO1xuICogcHJvcGVydGllcy5zZXQob2JqLCAncHJvcDEuc3RyJywgJ0hlbGxvIFVuaXZlcnNlIScpO1xuICogcHJvcGVydGllcy5zZXQob2JqLCAncHJvcDEuYXJyWzJdJywgJ0InKTtcbiAqIHByb3BlcnRpZXMuc2V0KG9iaiwgJ3Byb3AyLmFyclswXS5uZXN0ZWQudmFsdWUnLCB7IGhlbGxvOiAndW5pdmVyc2UnIH0pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBzZXRQYXRoVmFsdWUob2JqLCBwYXRoLCB2YWwpIHtcbiAgdmFyIHBhcnNlZCA9IHBhcnNlUGF0aChwYXRoKTtcbiAgaW50ZXJuYWxTZXRQYXRoVmFsdWUob2JqLCB2YWwsIHBhcnNlZCk7XG4gIHJldHVybiBvYmo7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBoYXNQcm9wZXJ0eTogaGFzUHJvcGVydHksXG4gIGdldFBhdGhJbmZvOiBnZXRQYXRoSW5mbyxcbiAgZ2V0UGF0aFZhbHVlOiBnZXRQYXRoVmFsdWUsXG4gIHNldFBhdGhWYWx1ZTogc2V0UGF0aFZhbHVlLFxufTtcbiIsICIvKiFcbiAqIENoYWkgLSBmbGFnIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMjIyAuZmxhZyhvYmplY3QsIGtleSwgW3ZhbHVlXSlcbiAqXG4gKiBHZXQgb3Igc2V0IGEgZmxhZyB2YWx1ZSBvbiBhbiBvYmplY3QuIElmIGFcbiAqIHZhbHVlIGlzIHByb3ZpZGVkIGl0IHdpbGwgYmUgc2V0LCBlbHNlIGl0IHdpbGxcbiAqIHJldHVybiB0aGUgY3VycmVudGx5IHNldCB2YWx1ZSBvciBgdW5kZWZpbmVkYCBpZlxuICogdGhlIHZhbHVlIGlzIG5vdCBzZXQuXG4gKlxuICogICAgIHV0aWxzLmZsYWcodGhpcywgJ2ZvbycsICdiYXInKTsgLy8gc2V0dGVyXG4gKiAgICAgdXRpbHMuZmxhZyh0aGlzLCAnZm9vJyk7IC8vIGdldHRlciwgcmV0dXJucyBgYmFyYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgY29uc3RydWN0ZWQgQXNzZXJ0aW9uXG4gKiBAcGFyYW0ge1N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge01peGVkfSB2YWx1ZSAob3B0aW9uYWwpXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBmbGFnXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWcob2JqLCBrZXksIHZhbHVlKSB7XG4gIHZhciBmbGFncyA9IG9iai5fX2ZsYWdzIHx8IChvYmouX19mbGFncyA9IE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIGZsYWdzW2tleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmxhZ3Nba2V5XTtcbiAgfVxufTtcbiIsICIvKiFcbiAqIENoYWkgLSB0ZXN0IHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKiFcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXNcbiAqL1xuXG52YXIgZmxhZyA9IHJlcXVpcmUoJy4vZmxhZycpO1xuXG4vKipcbiAqICMjIyAudGVzdChvYmplY3QsIGV4cHJlc3Npb24pXG4gKlxuICogVGVzdCBhbiBvYmplY3QgZm9yIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCAoY29uc3RydWN0ZWQgQXNzZXJ0aW9uKVxuICogQHBhcmFtIHtBcmd1bWVudHN9IGNoYWkuQXNzZXJ0aW9uLnByb3RvdHlwZS5hc3NlcnQgYXJndW1lbnRzXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSB0ZXN0XG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0ZXN0KG9iaiwgYXJncykge1xuICB2YXIgbmVnYXRlID0gZmxhZyhvYmosICduZWdhdGUnKVxuICAgICwgZXhwciA9IGFyZ3NbMF07XG4gIHJldHVybiBuZWdhdGUgPyAhZXhwciA6IGV4cHI7XG59O1xuIiwgIihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG5cdHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcblx0dHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcblx0KGdsb2JhbC50eXBlRGV0ZWN0ID0gZmFjdG9yeSgpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4vKiAhXG4gKiB0eXBlLWRldGVjdFxuICogQ29weXJpZ2h0KGMpIDIwMTMgamFrZSBsdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xudmFyIHByb21pc2VFeGlzdHMgPSB0eXBlb2YgUHJvbWlzZSA9PT0gJ2Z1bmN0aW9uJztcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbnZhciBnbG9iYWxPYmplY3QgPSB0eXBlb2Ygc2VsZiA9PT0gJ29iamVjdCcgPyBzZWxmIDogZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGlkLWJsYWNrbGlzdFxuXG52YXIgc3ltYm9sRXhpc3RzID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgbWFwRXhpc3RzID0gdHlwZW9mIE1hcCAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgc2V0RXhpc3RzID0gdHlwZW9mIFNldCAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgd2Vha01hcEV4aXN0cyA9IHR5cGVvZiBXZWFrTWFwICE9PSAndW5kZWZpbmVkJztcbnZhciB3ZWFrU2V0RXhpc3RzID0gdHlwZW9mIFdlYWtTZXQgIT09ICd1bmRlZmluZWQnO1xudmFyIGRhdGFWaWV3RXhpc3RzID0gdHlwZW9mIERhdGFWaWV3ICE9PSAndW5kZWZpbmVkJztcbnZhciBzeW1ib2xJdGVyYXRvckV4aXN0cyA9IHN5bWJvbEV4aXN0cyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yICE9PSAndW5kZWZpbmVkJztcbnZhciBzeW1ib2xUb1N0cmluZ1RhZ0V4aXN0cyA9IHN5bWJvbEV4aXN0cyAmJiB0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnICE9PSAndW5kZWZpbmVkJztcbnZhciBzZXRFbnRyaWVzRXhpc3RzID0gc2V0RXhpc3RzICYmIHR5cGVvZiBTZXQucHJvdG90eXBlLmVudHJpZXMgPT09ICdmdW5jdGlvbic7XG52YXIgbWFwRW50cmllc0V4aXN0cyA9IG1hcEV4aXN0cyAmJiB0eXBlb2YgTWFwLnByb3RvdHlwZS5lbnRyaWVzID09PSAnZnVuY3Rpb24nO1xudmFyIHNldEl0ZXJhdG9yUHJvdG90eXBlID0gc2V0RW50cmllc0V4aXN0cyAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IFNldCgpLmVudHJpZXMoKSk7XG52YXIgbWFwSXRlcmF0b3JQcm90b3R5cGUgPSBtYXBFbnRyaWVzRXhpc3RzICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgTWFwKCkuZW50cmllcygpKTtcbnZhciBhcnJheUl0ZXJhdG9yRXhpc3RzID0gc3ltYm9sSXRlcmF0b3JFeGlzdHMgJiYgdHlwZW9mIEFycmF5LnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nO1xudmFyIGFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBhcnJheUl0ZXJhdG9yRXhpc3RzICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihbXVtTeW1ib2wuaXRlcmF0b3JdKCkpO1xudmFyIHN0cmluZ0l0ZXJhdG9yRXhpc3RzID0gc3ltYm9sSXRlcmF0b3JFeGlzdHMgJiYgdHlwZW9mIFN0cmluZy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJztcbnZhciBzdHJpbmdJdGVyYXRvclByb3RvdHlwZSA9IHN0cmluZ0l0ZXJhdG9yRXhpc3RzICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZignJ1tTeW1ib2wuaXRlcmF0b3JdKCkpO1xudmFyIHRvU3RyaW5nTGVmdFNsaWNlTGVuZ3RoID0gODtcbnZhciB0b1N0cmluZ1JpZ2h0U2xpY2VMZW5ndGggPSAtMTtcbi8qKlxuICogIyMjIHR5cGVPZiAob2JqKVxuICpcbiAqIFVzZXMgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIHRvIGRldGVybWluZSB0aGUgdHlwZSBvZiBhbiBvYmplY3QsXG4gKiBub3JtYWxpc2luZyBiZWhhdmlvdXIgYWNyb3NzIGVuZ2luZSB2ZXJzaW9ucyAmIHdlbGwgb3B0aW1pc2VkLlxuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IG9iamVjdFxuICogQHJldHVybiB7U3RyaW5nfSBvYmplY3QgdHlwZVxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gdHlwZURldGVjdChvYmopIHtcbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgICogUHJlOlxuICAgKiAgIHN0cmluZyBsaXRlcmFsICAgICB4IDMsMDM5LDAzNSBvcHMvc2VjIFx1MDBCMTEuNjIlICg3OCBydW5zIHNhbXBsZWQpXG4gICAqICAgYm9vbGVhbiBsaXRlcmFsICAgIHggMSw0MjQsMTM4IG9wcy9zZWMgXHUwMEIxNC41NCUgKDc1IHJ1bnMgc2FtcGxlZClcbiAgICogICBudW1iZXIgbGl0ZXJhbCAgICAgeCAxLDY1MywxNTMgb3BzL3NlYyBcdTAwQjExLjkxJSAoODIgcnVucyBzYW1wbGVkKVxuICAgKiAgIHVuZGVmaW5lZCAgICAgICAgICB4IDksOTc4LDY2MCBvcHMvc2VjIFx1MDBCMTEuOTIlICg3NSBydW5zIHNhbXBsZWQpXG4gICAqICAgZnVuY3Rpb24gICAgICAgICAgIHggMiw1NTYsNzY5IG9wcy9zZWMgXHUwMEIxMS43MyUgKDc3IHJ1bnMgc2FtcGxlZClcbiAgICogUG9zdDpcbiAgICogICBzdHJpbmcgbGl0ZXJhbCAgICAgeCAzOCw1NjQsNzk2IG9wcy9zZWMgXHUwMEIxMS4xNSUgKDc5IHJ1bnMgc2FtcGxlZClcbiAgICogICBib29sZWFuIGxpdGVyYWwgICAgeCAzMSwxNDgsOTQwIG9wcy9zZWMgXHUwMEIxMS4xMCUgKDc5IHJ1bnMgc2FtcGxlZClcbiAgICogICBudW1iZXIgbGl0ZXJhbCAgICAgeCAzMiw2NzksMzMwIG9wcy9zZWMgXHUwMEIxMS45MCUgKDc4IHJ1bnMgc2FtcGxlZClcbiAgICogICB1bmRlZmluZWQgICAgICAgICAgeCAzMiwzNjMsMzY4IG9wcy9zZWMgXHUwMEIxMS4wNyUgKDgyIHJ1bnMgc2FtcGxlZClcbiAgICogICBmdW5jdGlvbiAgICAgICAgICAgeCAzMSwyOTYsODcwIG9wcy9zZWMgXHUwMEIxMC45NiUgKDgzIHJ1bnMgc2FtcGxlZClcbiAgICovXG4gIHZhciB0eXBlb2ZPYmogPSB0eXBlb2Ygb2JqO1xuICBpZiAodHlwZW9mT2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB0eXBlb2ZPYmo7XG4gIH1cblxuICAvKiAhIFNwZWVkIG9wdGltaXNhdGlvblxuICAgKiBQcmU6XG4gICAqICAgbnVsbCAgICAgICAgICAgICAgIHggMjgsNjQ1LDc2NSBvcHMvc2VjIFx1MDBCMTEuMTclICg4MiBydW5zIHNhbXBsZWQpXG4gICAqIFBvc3Q6XG4gICAqICAgbnVsbCAgICAgICAgICAgICAgIHggMzYsNDI4LDk2MiBvcHMvc2VjIFx1MDBCMTEuMzclICg4NCBydW5zIHNhbXBsZWQpXG4gICAqL1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgcmV0dXJuICdudWxsJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdpbmRvdylgYFxuICAgKiAgLSBOb2RlID09PSBcIltvYmplY3QgZ2xvYmFsXVwiXG4gICAqICAtIENocm9tZSA9PT0gXCJbb2JqZWN0IGdsb2JhbF1cIlxuICAgKiAgLSBGaXJlZm94ID09PSBcIltvYmplY3QgV2luZG93XVwiXG4gICAqICAtIFBoYW50b21KUyA9PT0gXCJbb2JqZWN0IFdpbmRvd11cIlxuICAgKiAgLSBTYWZhcmkgPT09IFwiW29iamVjdCBXaW5kb3ddXCJcbiAgICogIC0gSUUgMTEgPT09IFwiW29iamVjdCBXaW5kb3ddXCJcbiAgICogIC0gSUUgRWRnZSA9PT0gXCJbb2JqZWN0IFdpbmRvd11cIlxuICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMpYGBcbiAgICogIC0gQ2hyb21lIFdvcmtlciA9PT0gXCJbb2JqZWN0IGdsb2JhbF1cIlxuICAgKiAgLSBGaXJlZm94IFdvcmtlciA9PT0gXCJbb2JqZWN0IERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlXVwiXG4gICAqICAtIFNhZmFyaSBXb3JrZXIgPT09IFwiW29iamVjdCBEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZV1cIlxuICAgKiAgLSBJRSAxMSBXb3JrZXIgPT09IFwiW29iamVjdCBXb3JrZXJHbG9iYWxTY29wZV1cIlxuICAgKiAgLSBJRSBFZGdlIFdvcmtlciA9PT0gXCJbb2JqZWN0IFdvcmtlckdsb2JhbFNjb3BlXVwiXG4gICAqL1xuICBpZiAob2JqID09PSBnbG9iYWxPYmplY3QpIHtcbiAgICByZXR1cm4gJ2dsb2JhbCc7XG4gIH1cblxuICAvKiAhIFNwZWVkIG9wdGltaXNhdGlvblxuICAgKiBQcmU6XG4gICAqICAgYXJyYXkgbGl0ZXJhbCAgICAgIHggMiw4ODgsMzUyIG9wcy9zZWMgXHUwMEIxMC42NyUgKDgyIHJ1bnMgc2FtcGxlZClcbiAgICogUG9zdDpcbiAgICogICBhcnJheSBsaXRlcmFsICAgICAgeCAyMiw0NzksNjUwIG9wcy9zZWMgXHUwMEIxMC45NiUgKDgxIHJ1bnMgc2FtcGxlZClcbiAgICovXG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KG9iaikgJiZcbiAgICAoc3ltYm9sVG9TdHJpbmdUYWdFeGlzdHMgPT09IGZhbHNlIHx8ICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIG9iaikpXG4gICkge1xuICAgIHJldHVybiAnQXJyYXknO1xuICB9XG5cbiAgLy8gTm90IGNhY2hpbmcgZXhpc3RlbmNlIG9mIGB3aW5kb3dgIGFuZCByZWxhdGVkIHByb3BlcnRpZXMgZHVlIHRvIHBvdGVudGlhbFxuICAvLyBmb3IgYHdpbmRvd2AgdG8gYmUgdW5zZXQgYmVmb3JlIHRlc3RzIGluIHF1YXNpLWJyb3dzZXIgZW52aXJvbm1lbnRzLlxuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgJiYgd2luZG93ICE9PSBudWxsKSB7XG4gICAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Jyb3dzZXJzLmh0bWwjbG9jYXRpb24pXG4gICAgICogV2hhdFdHIEhUTUwkNy43LjMgLSBUaGUgYExvY2F0aW9uYCBpbnRlcmZhY2VcbiAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdpbmRvdy5sb2NhdGlvbilgYFxuICAgICAqICAtIElFIDw9MTEgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICAgKiAgLSBJRSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICAgKi9cbiAgICBpZiAodHlwZW9mIHdpbmRvdy5sb2NhdGlvbiA9PT0gJ29iamVjdCcgJiYgb2JqID09PSB3aW5kb3cubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiAnTG9jYXRpb24nO1xuICAgIH1cblxuICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAqIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNkb2N1bWVudClcbiAgICAgKiBXaGF0V0cgSFRNTCQzLjEuMSAtIFRoZSBgRG9jdW1lbnRgIG9iamVjdFxuICAgICAqIE5vdGU6IE1vc3QgYnJvd3NlcnMgY3VycmVudGx5IGFkaGVyIHRvIHRoZSBXM0MgRE9NIExldmVsIDIgc3BlY1xuICAgICAqICAgICAgIChodHRwczovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItSFRNTC9odG1sLmh0bWwjSUQtMjY4MDkyNjgpXG4gICAgICogICAgICAgd2hpY2ggc3VnZ2VzdHMgdGhhdCBicm93c2VycyBzaG91bGQgdXNlIEhUTUxUYWJsZUNlbGxFbGVtZW50IGZvclxuICAgICAqICAgICAgIGJvdGggVEQgYW5kIFRIIGVsZW1lbnRzLiBXaGF0V0cgc2VwYXJhdGVzIHRoZXNlLlxuICAgICAqICAgICAgIFdoYXRXRyBIVE1MIHN0YXRlczpcbiAgICAgKiAgICAgICAgID4gRm9yIGhpc3RvcmljYWwgcmVhc29ucywgV2luZG93IG9iamVjdHMgbXVzdCBhbHNvIGhhdmUgYVxuICAgICAqICAgICAgICAgPiB3cml0YWJsZSwgY29uZmlndXJhYmxlLCBub24tZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lZFxuICAgICAqICAgICAgICAgPiBIVE1MRG9jdW1lbnQgd2hvc2UgdmFsdWUgaXMgdGhlIERvY3VtZW50IGludGVyZmFjZSBvYmplY3QuXG4gICAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkb2N1bWVudClgYFxuICAgICAqICAtIENocm9tZSA9PT0gXCJbb2JqZWN0IEhUTUxEb2N1bWVudF1cIlxuICAgICAqICAtIEZpcmVmb3ggPT09IFwiW29iamVjdCBIVE1MRG9jdW1lbnRdXCJcbiAgICAgKiAgLSBTYWZhcmkgPT09IFwiW29iamVjdCBIVE1MRG9jdW1lbnRdXCJcbiAgICAgKiAgLSBJRSA8PTEwID09PSBcIltvYmplY3QgRG9jdW1lbnRdXCJcbiAgICAgKiAgLSBJRSAxMSA9PT0gXCJbb2JqZWN0IEhUTUxEb2N1bWVudF1cIlxuICAgICAqICAtIElFIEVkZ2UgPD0xMyA9PT0gXCJbb2JqZWN0IEhUTUxEb2N1bWVudF1cIlxuICAgICAqL1xuICAgIGlmICh0eXBlb2Ygd2luZG93LmRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiBvYmogPT09IHdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgcmV0dXJuICdEb2N1bWVudCc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yID09PSAnb2JqZWN0Jykge1xuICAgICAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAgICAgKiAoaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI21pbWV0eXBlYXJyYXkpXG4gICAgICAgKiBXaGF0V0cgSFRNTCQ4LjYuMS41IC0gUGx1Z2lucyAtIEludGVyZmFjZSBNaW1lVHlwZUFycmF5XG4gICAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5hdmlnYXRvci5taW1lVHlwZXMpYGBcbiAgICAgICAqICAtIElFIDw9MTAgPT09IFwiW29iamVjdCBNU01pbWVUeXBlc0NvbGxlY3Rpb25dXCJcbiAgICAgICAqL1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yLm1pbWVUeXBlcyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICBvYmogPT09IHdpbmRvdy5uYXZpZ2F0b3IubWltZVR5cGVzKSB7XG4gICAgICAgIHJldHVybiAnTWltZVR5cGVBcnJheSc7XG4gICAgICB9XG5cbiAgICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCNwbHVnaW5hcnJheSlcbiAgICAgICAqIFdoYXRXRyBIVE1MJDguNi4xLjUgLSBQbHVnaW5zIC0gSW50ZXJmYWNlIFBsdWdpbkFycmF5XG4gICAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5hdmlnYXRvci5wbHVnaW5zKWBgXG4gICAgICAgKiAgLSBJRSA8PTEwID09PSBcIltvYmplY3QgTVNQbHVnaW5zQ29sbGVjdGlvbl1cIlxuICAgICAgICovXG4gICAgICBpZiAodHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IucGx1Z2lucyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICBvYmogPT09IHdpbmRvdy5uYXZpZ2F0b3IucGx1Z2lucykge1xuICAgICAgICByZXR1cm4gJ1BsdWdpbkFycmF5JztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKHR5cGVvZiB3aW5kb3cuSFRNTEVsZW1lbnQgPT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5IVE1MRWxlbWVudCA9PT0gJ29iamVjdCcpICYmXG4gICAgICAgIG9iaiBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MRWxlbWVudCkge1xuICAgICAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAgICAqIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjcGx1Z2luYXJyYXkpXG4gICAgICAqIFdoYXRXRyBIVE1MJDQuNC40IC0gVGhlIGBibG9ja3F1b3RlYCBlbGVtZW50IC0gSW50ZXJmYWNlIGBIVE1MUXVvdGVFbGVtZW50YFxuICAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Jsb2NrcXVvdGUnKSlgYFxuICAgICAgKiAgLSBJRSA8PTEwID09PSBcIltvYmplY3QgSFRNTEJsb2NrRWxlbWVudF1cIlxuICAgICAgKi9cbiAgICAgIGlmIChvYmoudGFnTmFtZSA9PT0gJ0JMT0NLUVVPVEUnKSB7XG4gICAgICAgIHJldHVybiAnSFRNTFF1b3RlRWxlbWVudCc7XG4gICAgICB9XG5cbiAgICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2h0bWx0YWJsZWRhdGFjZWxsZWxlbWVudClcbiAgICAgICAqIFdoYXRXRyBIVE1MJDQuOS45IC0gVGhlIGB0ZGAgZWxlbWVudCAtIEludGVyZmFjZSBgSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50YFxuICAgICAgICogTm90ZTogTW9zdCBicm93c2VycyBjdXJyZW50bHkgYWRoZXIgdG8gdGhlIFczQyBET00gTGV2ZWwgMiBzcGVjXG4gICAgICAgKiAgICAgICAoaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUhUTUwvaHRtbC5odG1sI0lELTgyOTE1MDc1KVxuICAgICAgICogICAgICAgd2hpY2ggc3VnZ2VzdHMgdGhhdCBicm93c2VycyBzaG91bGQgdXNlIEhUTUxUYWJsZUNlbGxFbGVtZW50IGZvclxuICAgICAgICogICAgICAgYm90aCBURCBhbmQgVEggZWxlbWVudHMuIFdoYXRXRyBzZXBhcmF0ZXMgdGhlc2UuXG4gICAgICAgKiBUZXN0OiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKSlcbiAgICAgICAqICAtIENocm9tZSA9PT0gXCJbb2JqZWN0IEhUTUxUYWJsZUNlbGxFbGVtZW50XVwiXG4gICAgICAgKiAgLSBGaXJlZm94ID09PSBcIltvYmplY3QgSFRNTFRhYmxlQ2VsbEVsZW1lbnRdXCJcbiAgICAgICAqICAtIFNhZmFyaSA9PT0gXCJbb2JqZWN0IEhUTUxUYWJsZUNlbGxFbGVtZW50XVwiXG4gICAgICAgKi9cbiAgICAgIGlmIChvYmoudGFnTmFtZSA9PT0gJ1REJykge1xuICAgICAgICByZXR1cm4gJ0hUTUxUYWJsZURhdGFDZWxsRWxlbWVudCc7XG4gICAgICB9XG5cbiAgICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2h0bWx0YWJsZWhlYWRlcmNlbGxlbGVtZW50KVxuICAgICAgICogV2hhdFdHIEhUTUwkNC45LjkgLSBUaGUgYHRkYCBlbGVtZW50IC0gSW50ZXJmYWNlIGBIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudGBcbiAgICAgICAqIE5vdGU6IE1vc3QgYnJvd3NlcnMgY3VycmVudGx5IGFkaGVyIHRvIHRoZSBXM0MgRE9NIExldmVsIDIgc3BlY1xuICAgICAgICogICAgICAgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1IVE1ML2h0bWwuaHRtbCNJRC04MjkxNTA3NSlcbiAgICAgICAqICAgICAgIHdoaWNoIHN1Z2dlc3RzIHRoYXQgYnJvd3NlcnMgc2hvdWxkIHVzZSBIVE1MVGFibGVDZWxsRWxlbWVudCBmb3JcbiAgICAgICAqICAgICAgIGJvdGggVEQgYW5kIFRIIGVsZW1lbnRzLiBXaGF0V0cgc2VwYXJhdGVzIHRoZXNlLlxuICAgICAgICogVGVzdDogT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJykpXG4gICAgICAgKiAgLSBDaHJvbWUgPT09IFwiW29iamVjdCBIVE1MVGFibGVDZWxsRWxlbWVudF1cIlxuICAgICAgICogIC0gRmlyZWZveCA9PT0gXCJbb2JqZWN0IEhUTUxUYWJsZUNlbGxFbGVtZW50XVwiXG4gICAgICAgKiAgLSBTYWZhcmkgPT09IFwiW29iamVjdCBIVE1MVGFibGVDZWxsRWxlbWVudF1cIlxuICAgICAgICovXG4gICAgICBpZiAob2JqLnRhZ05hbWUgPT09ICdUSCcpIHtcbiAgICAgICAgcmV0dXJuICdIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudCc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICBGbG9hdDY0QXJyYXkgICAgICAgeCA2MjUsNjQ0IG9wcy9zZWMgXHUwMEIxMS41OCUgKDgwIHJ1bnMgc2FtcGxlZClcbiAgKiAgIEZsb2F0MzJBcnJheSAgICAgICB4IDEsMjc5LDg1MiBvcHMvc2VjIFx1MDBCMTIuOTElICg3NyBydW5zIHNhbXBsZWQpXG4gICogICBVaW50MzJBcnJheSAgICAgICAgeCAxLDE3OCwxODUgb3BzL3NlYyBcdTAwQjExLjk1JSAoODMgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDE2QXJyYXkgICAgICAgIHggMSwwMDgsMzgwIG9wcy9zZWMgXHUwMEIxMi4yNSUgKDgwIHJ1bnMgc2FtcGxlZClcbiAgKiAgIFVpbnQ4QXJyYXkgICAgICAgICB4IDEsMTI4LDA0MCBvcHMvc2VjIFx1MDBCMTIuMTElICg4MSBydW5zIHNhbXBsZWQpXG4gICogICBJbnQzMkFycmF5ICAgICAgICAgeCAxLDE3MCwxMTkgb3BzL3NlYyBcdTAwQjEyLjg4JSAoODAgcnVucyBzYW1wbGVkKVxuICAqICAgSW50MTZBcnJheSAgICAgICAgIHggMSwxNzYsMzQ4IG9wcy9zZWMgXHUwMEIxNS43OSUgKDg2IHJ1bnMgc2FtcGxlZClcbiAgKiAgIEludDhBcnJheSAgICAgICAgICB4IDEsMDU4LDcwNyBvcHMvc2VjIFx1MDBCMTQuOTQlICg3NyBydW5zIHNhbXBsZWQpXG4gICogICBVaW50OENsYW1wZWRBcnJheSAgeCAxLDExMCw2MzMgb3BzL3NlYyBcdTAwQjE0LjIwJSAoODAgcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICBGbG9hdDY0QXJyYXkgICAgICAgeCA3LDEwNSw2NzEgb3BzL3NlYyBcdTAwQjExMy40NyUgKDY0IHJ1bnMgc2FtcGxlZClcbiAgKiAgIEZsb2F0MzJBcnJheSAgICAgICB4IDUsODg3LDkxMiBvcHMvc2VjIFx1MDBCMTEuNDYlICg4MiBydW5zIHNhbXBsZWQpXG4gICogICBVaW50MzJBcnJheSAgICAgICAgeCA2LDQ5MSw2NjEgb3BzL3NlYyBcdTAwQjExLjc2JSAoNzkgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDE2QXJyYXkgICAgICAgIHggNiw1NTksNzk1IG9wcy9zZWMgXHUwMEIxMS42NyUgKDgyIHJ1bnMgc2FtcGxlZClcbiAgKiAgIFVpbnQ4QXJyYXkgICAgICAgICB4IDYsNDYzLDk2NiBvcHMvc2VjIFx1MDBCMTEuNDMlICg4NSBydW5zIHNhbXBsZWQpXG4gICogICBJbnQzMkFycmF5ICAgICAgICAgeCA1LDY0MSw4NDEgb3BzL3NlYyBcdTAwQjEzLjQ5JSAoODEgcnVucyBzYW1wbGVkKVxuICAqICAgSW50MTZBcnJheSAgICAgICAgIHggNiw1ODMsNTExIG9wcy9zZWMgXHUwMEIxMS45OCUgKDgwIHJ1bnMgc2FtcGxlZClcbiAgKiAgIEludDhBcnJheSAgICAgICAgICB4IDYsNjA2LDA3OCBvcHMvc2VjIFx1MDBCMTEuNzQlICg4MSBydW5zIHNhbXBsZWQpXG4gICogICBVaW50OENsYW1wZWRBcnJheSAgeCA2LDYwMiwyMjQgb3BzL3NlYyBcdTAwQjExLjc3JSAoODMgcnVucyBzYW1wbGVkKVxuICAqL1xuICB2YXIgc3RyaW5nVGFnID0gKHN5bWJvbFRvU3RyaW5nVGFnRXhpc3RzICYmIG9ialtTeW1ib2wudG9TdHJpbmdUYWddKTtcbiAgaWYgKHR5cGVvZiBzdHJpbmdUYWcgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHN0cmluZ1RhZztcbiAgfVxuXG4gIHZhciBvYmpQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICByZWdleCBsaXRlcmFsICAgICAgeCAxLDc3MiwzODUgb3BzL3NlYyBcdTAwQjExLjg1JSAoNzcgcnVucyBzYW1wbGVkKVxuICAqICAgcmVnZXggY29uc3RydWN0b3IgIHggMiwxNDMsNjM0IG9wcy9zZWMgXHUwMEIxMi40NiUgKDc4IHJ1bnMgc2FtcGxlZClcbiAgKiBQb3N0OlxuICAqICAgcmVnZXggbGl0ZXJhbCAgICAgIHggMyw5MjgsMDA5IG9wcy9zZWMgXHUwMEIxMC42NSUgKDc4IHJ1bnMgc2FtcGxlZClcbiAgKiAgIHJlZ2V4IGNvbnN0cnVjdG9yICB4IDMsOTMxLDEwOCBvcHMvc2VjIFx1MDBCMTAuNTglICg4NCBydW5zIHNhbXBsZWQpXG4gICovXG4gIGlmIChvYmpQcm90b3R5cGUgPT09IFJlZ0V4cC5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ1JlZ0V4cCc7XG4gIH1cblxuICAvKiAhIFNwZWVkIG9wdGltaXNhdGlvblxuICAqIFByZTpcbiAgKiAgIGRhdGUgICAgICAgICAgICAgICB4IDIsMTMwLDA3NCBvcHMvc2VjIFx1MDBCMTQuNDIlICg2OCBydW5zIHNhbXBsZWQpXG4gICogUG9zdDpcbiAgKiAgIGRhdGUgICAgICAgICAgICAgICB4IDMsOTUzLDc3OSBvcHMvc2VjIFx1MDBCMTEuMzUlICg3NyBydW5zIHNhbXBsZWQpXG4gICovXG4gIGlmIChvYmpQcm90b3R5cGUgPT09IERhdGUucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdEYXRlJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy1wcm9taXNlLnByb3RvdHlwZS1AQHRvc3RyaW5ndGFnKVxuICAgKiBFUzYkMjUuNC41LjQgLSBQcm9taXNlLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXSBzaG91bGQgYmUgXCJQcm9taXNlXCI6XG4gICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUHJvbWlzZS5yZXNvbHZlKCkpYGBcbiAgICogIC0gQ2hyb21lIDw9NDcgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICogIC0gRWRnZSA8PTIwID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqICAtIEZpcmVmb3ggMjktTGF0ZXN0ID09PSBcIltvYmplY3QgUHJvbWlzZV1cIlxuICAgKiAgLSBTYWZhcmkgNy4xLUxhdGVzdCA9PT0gXCJbb2JqZWN0IFByb21pc2VdXCJcbiAgICovXG4gIGlmIChwcm9taXNlRXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gUHJvbWlzZS5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ1Byb21pc2UnO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICBzZXQgICAgICAgICAgICAgICAgeCAyLDIyMiwxODYgb3BzL3NlYyBcdTAwQjExLjMxJSAoODIgcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICBzZXQgICAgICAgICAgICAgICAgeCA0LDU0NSw4Nzkgb3BzL3NlYyBcdTAwQjExLjEzJSAoODMgcnVucyBzYW1wbGVkKVxuICAqL1xuICBpZiAoc2V0RXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gU2V0LnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnU2V0JztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgbWFwICAgICAgICAgICAgICAgIHggMiwzOTYsODQyIG9wcy9zZWMgXHUwMEIxMS41OSUgKDgxIHJ1bnMgc2FtcGxlZClcbiAgKiBQb3N0OlxuICAqICAgbWFwICAgICAgICAgICAgICAgIHggNCwxODMsOTQ1IG9wcy9zZWMgXHUwMEIxNi41OSUgKDgyIHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgaWYgKG1hcEV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IE1hcC5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ01hcCc7XG4gIH1cblxuICAvKiAhIFNwZWVkIG9wdGltaXNhdGlvblxuICAqIFByZTpcbiAgKiAgIHdlYWtzZXQgICAgICAgICAgICB4IDEsMzIzLDIyMCBvcHMvc2VjIFx1MDBCMTIuMTclICg3NiBydW5zIHNhbXBsZWQpXG4gICogUG9zdDpcbiAgKiAgIHdlYWtzZXQgICAgICAgICAgICB4IDQsMjM3LDUxMCBvcHMvc2VjIFx1MDBCMTIuMDElICg3NyBydW5zIHNhbXBsZWQpXG4gICovXG4gIGlmICh3ZWFrU2V0RXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gV2Vha1NldC5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ1dlYWtTZXQnO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICB3ZWFrbWFwICAgICAgICAgICAgeCAxLDUwMCwyNjAgb3BzL3NlYyBcdTAwQjEyLjAyJSAoNzggcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICB3ZWFrbWFwICAgICAgICAgICAgeCAzLDg4MSwzODQgb3BzL3NlYyBcdTAwQjExLjQ1JSAoODIgcnVucyBzYW1wbGVkKVxuICAqL1xuICBpZiAod2Vha01hcEV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IFdlYWtNYXAucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdXZWFrTWFwJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy1kYXRhdmlldy5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZylcbiAgICogRVM2JDI0LjIuNC4yMSAtIERhdGFWaWV3LnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXSBzaG91bGQgYmUgXCJEYXRhVmlld1wiOlxuICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKWBgXG4gICAqICAtIEVkZ2UgPD0xMyA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIlxuICAgKi9cbiAgaWYgKGRhdGFWaWV3RXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gRGF0YVZpZXcucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdEYXRhVmlldyc7XG4gIH1cblxuICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICogKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtJW1hcGl0ZXJhdG9ycHJvdG90eXBlJS1AQHRvc3RyaW5ndGFnKVxuICAgKiBFUzYkMjMuMS41LjIuMiAtICVNYXBJdGVyYXRvclByb3RvdHlwZSVbQEB0b1N0cmluZ1RhZ10gc2hvdWxkIGJlIFwiTWFwIEl0ZXJhdG9yXCI6XG4gICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3IE1hcCgpLmVudHJpZXMoKSlgYFxuICAgKiAgLSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICovXG4gIGlmIChtYXBFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBtYXBJdGVyYXRvclByb3RvdHlwZSkge1xuICAgIHJldHVybiAnTWFwIEl0ZXJhdG9yJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy0lc2V0aXRlcmF0b3Jwcm90b3R5cGUlLUBAdG9zdHJpbmd0YWcpXG4gICAqIEVTNiQyMy4yLjUuMi4yIC0gJVNldEl0ZXJhdG9yUHJvdG90eXBlJVtAQHRvU3RyaW5nVGFnXSBzaG91bGQgYmUgXCJTZXQgSXRlcmF0b3JcIjpcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXcgU2V0KCkuZW50cmllcygpKWBgXG4gICAqICAtIEVkZ2UgPD0xMyA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIlxuICAgKi9cbiAgaWYgKHNldEV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IHNldEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdTZXQgSXRlcmF0b3InO1xuICB9XG5cbiAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAqIChodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wL2luZGV4Lmh0bWwjc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS1AQHRvc3RyaW5ndGFnKVxuICAgKiBFUzYkMjIuMS41LjIuMiAtICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJVtAQHRvU3RyaW5nVGFnXSBzaG91bGQgYmUgXCJBcnJheSBJdGVyYXRvclwiOlxuICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSlgYFxuICAgKiAgLSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICovXG4gIGlmIChhcnJheUl0ZXJhdG9yRXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gYXJyYXlJdGVyYXRvclByb3RvdHlwZSkge1xuICAgIHJldHVybiAnQXJyYXkgSXRlcmF0b3InO1xuICB9XG5cbiAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAqIChodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wL2luZGV4Lmh0bWwjc2VjLSVzdHJpbmdpdGVyYXRvcnByb3RvdHlwZSUtQEB0b3N0cmluZ3RhZylcbiAgICogRVM2JDIxLjEuNS4yLjIgLSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlW0BAdG9TdHJpbmdUYWddIHNob3VsZCBiZSBcIlN0cmluZyBJdGVyYXRvclwiOlxuICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSlgYFxuICAgKiAgLSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICovXG4gIGlmIChzdHJpbmdJdGVyYXRvckV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IHN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdTdHJpbmcgSXRlcmF0b3InO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICBvYmplY3QgZnJvbSBudWxsICAgeCAyLDQyNCwzMjAgb3BzL3NlYyBcdTAwQjExLjY3JSAoNzYgcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICBvYmplY3QgZnJvbSBudWxsICAgeCA1LDgzOCwwMDAgb3BzL3NlYyBcdTAwQjEwLjk5JSAoODQgcnVucyBzYW1wbGVkKVxuICAqL1xuICBpZiAob2JqUHJvdG90eXBlID09PSBudWxsKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdFxuICAgIC5wcm90b3R5cGVcbiAgICAudG9TdHJpbmdcbiAgICAuY2FsbChvYmopXG4gICAgLnNsaWNlKHRvU3RyaW5nTGVmdFNsaWNlTGVuZ3RoLCB0b1N0cmluZ1JpZ2h0U2xpY2VMZW5ndGgpO1xufVxuXG5yZXR1cm4gdHlwZURldGVjdDtcblxufSkpKTtcbiIsICIvKiFcbiAqIENoYWkgLSBleHBlY3RUeXBlcyB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiAjIyMgLmV4cGVjdFR5cGVzKG9iaiwgdHlwZXMpXG4gKlxuICogRW5zdXJlcyB0aGF0IHRoZSBvYmplY3QgYmVpbmcgdGVzdGVkIGFnYWluc3QgaXMgb2YgYSB2YWxpZCB0eXBlLlxuICpcbiAqICAgICB1dGlscy5leHBlY3RUeXBlcyh0aGlzLCBbJ2FycmF5JywgJ29iamVjdCcsICdzdHJpbmcnXSk7XG4gKlxuICogQHBhcmFtIHtNaXhlZH0gb2JqIGNvbnN0cnVjdGVkIEFzc2VydGlvblxuICogQHBhcmFtIHtBcnJheX0gdHlwZSBBIGxpc3Qgb2YgYWxsb3dlZCB0eXBlcyBmb3IgdGhpcyBhc3NlcnRpb25cbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIGV4cGVjdFR5cGVzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnZhciBBc3NlcnRpb25FcnJvciA9IHJlcXVpcmUoJ2Fzc2VydGlvbi1lcnJvcicpO1xudmFyIGZsYWcgPSByZXF1aXJlKCcuL2ZsYWcnKTtcbnZhciB0eXBlID0gcmVxdWlyZSgndHlwZS1kZXRlY3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBleHBlY3RUeXBlcyhvYmosIHR5cGVzKSB7XG4gIHZhciBmbGFnTXNnID0gZmxhZyhvYmosICdtZXNzYWdlJyk7XG4gIHZhciBzc2ZpID0gZmxhZyhvYmosICdzc2ZpJyk7XG5cbiAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgJzogJyA6ICcnO1xuXG4gIG9iaiA9IGZsYWcob2JqLCAnb2JqZWN0Jyk7XG4gIHR5cGVzID0gdHlwZXMubWFwKGZ1bmN0aW9uICh0KSB7IHJldHVybiB0LnRvTG93ZXJDYXNlKCk7IH0pO1xuICB0eXBlcy5zb3J0KCk7XG5cbiAgLy8gVHJhbnNmb3JtcyBbJ2xvcmVtJywgJ2lwc3VtJ10gaW50byAnYSBsb3JlbSwgb3IgYW4gaXBzdW0nXG4gIHZhciBzdHIgPSB0eXBlcy5tYXAoZnVuY3Rpb24gKHQsIGluZGV4KSB7XG4gICAgdmFyIGFydCA9IH5bICdhJywgJ2UnLCAnaScsICdvJywgJ3UnIF0uaW5kZXhPZih0LmNoYXJBdCgwKSkgPyAnYW4nIDogJ2EnO1xuICAgIHZhciBvciA9IHR5cGVzLmxlbmd0aCA+IDEgJiYgaW5kZXggPT09IHR5cGVzLmxlbmd0aCAtIDEgPyAnb3IgJyA6ICcnO1xuICAgIHJldHVybiBvciArIGFydCArICcgJyArIHQ7XG4gIH0pLmpvaW4oJywgJyk7XG5cbiAgdmFyIG9ialR5cGUgPSB0eXBlKG9iaikudG9Mb3dlckNhc2UoKTtcblxuICBpZiAoIXR5cGVzLnNvbWUoZnVuY3Rpb24gKGV4cGVjdGVkKSB7IHJldHVybiBvYmpUeXBlID09PSBleHBlY3RlZDsgfSkpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICBmbGFnTXNnICsgJ29iamVjdCB0ZXN0ZWQgbXVzdCBiZSAnICsgc3RyICsgJywgYnV0ICcgKyBvYmpUeXBlICsgJyBnaXZlbicsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBzc2ZpXG4gICAgKTtcbiAgfVxufTtcbiIsICIvKiFcbiAqIENoYWkgLSBnZXRBY3R1YWwgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogIyMjIC5nZXRBY3R1YWwob2JqZWN0LCBbYWN0dWFsXSlcbiAqXG4gKiBSZXR1cm5zIHRoZSBgYWN0dWFsYCB2YWx1ZSBmb3IgYW4gQXNzZXJ0aW9uLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgKGNvbnN0cnVjdGVkIEFzc2VydGlvbilcbiAqIEBwYXJhbSB7QXJndW1lbnRzfSBjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUuYXNzZXJ0IGFyZ3VtZW50c1xuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgZ2V0QWN0dWFsXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRBY3R1YWwob2JqLCBhcmdzKSB7XG4gIHJldHVybiBhcmdzLmxlbmd0aCA+IDQgPyBhcmdzWzRdIDogb2JqLl9vYmo7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuLyogIVxuICogQ2hhaSAtIGdldEZ1bmNOYW1lIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTYgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMjIyAuZ2V0RnVuY05hbWUoY29uc3RydWN0b3JGbilcbiAqXG4gKiBSZXR1cm5zIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24uXG4gKiBXaGVuIGEgbm9uLWZ1bmN0aW9uIGluc3RhbmNlIGlzIHBhc3NlZCwgcmV0dXJucyBgbnVsbGAuXG4gKiBUaGlzIGFsc28gaW5jbHVkZXMgYSBwb2x5ZmlsbCBmdW5jdGlvbiBpZiBgYUZ1bmMubmFtZWAgaXMgbm90IGRlZmluZWQuXG4gKlxuICogQG5hbWUgZ2V0RnVuY05hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmN0XG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnZhciB0b1N0cmluZyA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvbk5hbWVNYXRjaCA9IC9cXHMqZnVuY3Rpb24oPzpcXHN8XFxzKlxcL1xcKlteKD86KlxcLyldK1xcKlxcL1xccyopKihbXlxcc1xcKFxcL10rKS87XG52YXIgbWF4RnVuY3Rpb25Tb3VyY2VMZW5ndGggPSA1MTI7XG5mdW5jdGlvbiBnZXRGdW5jTmFtZShhRnVuYykge1xuICBpZiAodHlwZW9mIGFGdW5jICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbmFtZSA9ICcnO1xuICBpZiAodHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZS5uYW1lID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgYUZ1bmMubmFtZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlZmxlY3RcbiAgICB2YXIgZnVuY3Rpb25Tb3VyY2UgPSB0b1N0cmluZy5jYWxsKGFGdW5jKTtcbiAgICAvLyBUbyBhdm9pZCB1bmNvbnN0cmFpbmVkIHJlc291cmNlIGNvbnN1bXB0aW9uIGR1ZSB0byBwYXRoYWxvZ2ljYWxseSBsYXJnZSBmdW5jdGlvbiBuYW1lcyxcbiAgICAvLyB3ZSBsaW1pdCB0aGUgYXZhaWxhYmxlIHJldHVybiB2YWx1ZSB0byBiZSBsZXNzIHRoYW4gNTEyIGNoYXJhY3RlcnMuXG4gICAgaWYgKGZ1bmN0aW9uU291cmNlLmluZGV4T2YoJygnKSA+IG1heEZ1bmN0aW9uU291cmNlTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgLy8gSGVyZSB3ZSBydW4gYSBwb2x5ZmlsbCBpZiBGdW5jdGlvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBgbmFtZWAgcHJvcGVydHkgYW5kIGlmIGFGdW5jLm5hbWUgaXMgbm90IGRlZmluZWRcbiAgICB2YXIgbWF0Y2ggPSBmdW5jdGlvblNvdXJjZS5tYXRjaChmdW5jdGlvbk5hbWVNYXRjaCk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICBuYW1lID0gbWF0Y2hbMV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElmIHdlJ3ZlIGdvdCBhIGBuYW1lYCBwcm9wZXJ0eSB3ZSBqdXN0IHVzZSBpdFxuICAgIG5hbWUgPSBhRnVuYy5uYW1lO1xuICB9XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0RnVuY05hbWU7XG4iLCAiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBmYWN0b3J5KGdsb2JhbC5sb3VwZSA9IHt9KSk7XG59KHRoaXMsIChmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7XG5cbiAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHtcbiAgICAgIF90eXBlb2YgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3R5cGVvZiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBfdHlwZW9mKG9iaik7XG4gIH1cblxuICBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgICByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7XG4gIH1cblxuICBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIgfHwgIShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpKSByZXR1cm47XG4gICAgdmFyIF9hcnIgPSBbXTtcbiAgICB2YXIgX24gPSB0cnVlO1xuICAgIHZhciBfZCA9IGZhbHNlO1xuICAgIHZhciBfZSA9IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7XG4gICAgICAgIF9hcnIucHVzaChfcy52YWx1ZSk7XG5cbiAgICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgX2QgPSB0cnVlO1xuICAgICAgX2UgPSBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIF9hcnI7XG4gIH1cblxuICBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gICAgaWYgKCFvKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gICAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIH1cblxuICBmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICAgIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuXG4gICAgcmV0dXJuIGFycjI7XG4gIH1cblxuICBmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG4gIH1cblxuICB2YXIgYW5zaUNvbG9ycyA9IHtcbiAgICBib2xkOiBbJzEnLCAnMjInXSxcbiAgICBkaW06IFsnMicsICcyMiddLFxuICAgIGl0YWxpYzogWyczJywgJzIzJ10sXG4gICAgdW5kZXJsaW5lOiBbJzQnLCAnMjQnXSxcbiAgICAvLyA1ICYgNiBhcmUgYmxpbmtpbmdcbiAgICBpbnZlcnNlOiBbJzcnLCAnMjcnXSxcbiAgICBoaWRkZW46IFsnOCcsICcyOCddLFxuICAgIHN0cmlrZTogWyc5JywgJzI5J10sXG4gICAgLy8gMTAtMjAgYXJlIGZvbnRzXG4gICAgLy8gMjEtMjkgYXJlIHJlc2V0cyBmb3IgMS05XG4gICAgYmxhY2s6IFsnMzAnLCAnMzknXSxcbiAgICByZWQ6IFsnMzEnLCAnMzknXSxcbiAgICBncmVlbjogWyczMicsICczOSddLFxuICAgIHllbGxvdzogWyczMycsICczOSddLFxuICAgIGJsdWU6IFsnMzQnLCAnMzknXSxcbiAgICBtYWdlbnRhOiBbJzM1JywgJzM5J10sXG4gICAgY3lhbjogWyczNicsICczOSddLFxuICAgIHdoaXRlOiBbJzM3JywgJzM5J10sXG4gICAgYnJpZ2h0YmxhY2s6IFsnMzA7MScsICczOSddLFxuICAgIGJyaWdodHJlZDogWyczMTsxJywgJzM5J10sXG4gICAgYnJpZ2h0Z3JlZW46IFsnMzI7MScsICczOSddLFxuICAgIGJyaWdodHllbGxvdzogWyczMzsxJywgJzM5J10sXG4gICAgYnJpZ2h0Ymx1ZTogWyczNDsxJywgJzM5J10sXG4gICAgYnJpZ2h0bWFnZW50YTogWyczNTsxJywgJzM5J10sXG4gICAgYnJpZ2h0Y3lhbjogWyczNjsxJywgJzM5J10sXG4gICAgYnJpZ2h0d2hpdGU6IFsnMzc7MScsICczOSddLFxuICAgIGdyZXk6IFsnOTAnLCAnMzknXVxuICB9O1xuICB2YXIgc3R5bGVzID0ge1xuICAgIHNwZWNpYWw6ICdjeWFuJyxcbiAgICBudW1iZXI6ICd5ZWxsb3cnLFxuICAgIGJpZ2ludDogJ3llbGxvdycsXG4gICAgYm9vbGVhbjogJ3llbGxvdycsXG4gICAgdW5kZWZpbmVkOiAnZ3JleScsXG4gICAgbnVsbDogJ2JvbGQnLFxuICAgIHN0cmluZzogJ2dyZWVuJyxcbiAgICBzeW1ib2w6ICdncmVlbicsXG4gICAgZGF0ZTogJ21hZ2VudGEnLFxuICAgIHJlZ2V4cDogJ3JlZCdcbiAgfTtcbiAgdmFyIHRydW5jYXRvciA9ICdcdTIwMjYnO1xuXG4gIGZ1bmN0aW9uIGNvbG9yaXNlKHZhbHVlLCBzdHlsZVR5cGUpIHtcbiAgICB2YXIgY29sb3IgPSBhbnNpQ29sb3JzW3N0eWxlc1tzdHlsZVR5cGVdXSB8fCBhbnNpQ29sb3JzW3N0eWxlVHlwZV07XG5cbiAgICBpZiAoIWNvbG9yKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gXCJcXHgxQltcIi5jb25jYXQoY29sb3JbMF0sIFwibVwiKS5jb25jYXQoU3RyaW5nKHZhbHVlKSwgXCJcXHgxQltcIikuY29uY2F0KGNvbG9yWzFdLCBcIm1cIik7XG4gIH1cblxuICBmdW5jdGlvbiBub3JtYWxpc2VPcHRpb25zKCkge1xuICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICAgICAgX3JlZiRzaG93SGlkZGVuID0gX3JlZi5zaG93SGlkZGVuLFxuICAgICAgICBzaG93SGlkZGVuID0gX3JlZiRzaG93SGlkZGVuID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkc2hvd0hpZGRlbixcbiAgICAgICAgX3JlZiRkZXB0aCA9IF9yZWYuZGVwdGgsXG4gICAgICAgIGRlcHRoID0gX3JlZiRkZXB0aCA9PT0gdm9pZCAwID8gMiA6IF9yZWYkZGVwdGgsXG4gICAgICAgIF9yZWYkY29sb3JzID0gX3JlZi5jb2xvcnMsXG4gICAgICAgIGNvbG9ycyA9IF9yZWYkY29sb3JzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY29sb3JzLFxuICAgICAgICBfcmVmJGN1c3RvbUluc3BlY3QgPSBfcmVmLmN1c3RvbUluc3BlY3QsXG4gICAgICAgIGN1c3RvbUluc3BlY3QgPSBfcmVmJGN1c3RvbUluc3BlY3QgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGN1c3RvbUluc3BlY3QsXG4gICAgICAgIF9yZWYkc2hvd1Byb3h5ID0gX3JlZi5zaG93UHJveHksXG4gICAgICAgIHNob3dQcm94eSA9IF9yZWYkc2hvd1Byb3h5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkc2hvd1Byb3h5LFxuICAgICAgICBfcmVmJG1heEFycmF5TGVuZ3RoID0gX3JlZi5tYXhBcnJheUxlbmd0aCxcbiAgICAgICAgbWF4QXJyYXlMZW5ndGggPSBfcmVmJG1heEFycmF5TGVuZ3RoID09PSB2b2lkIDAgPyBJbmZpbml0eSA6IF9yZWYkbWF4QXJyYXlMZW5ndGgsXG4gICAgICAgIF9yZWYkYnJlYWtMZW5ndGggPSBfcmVmLmJyZWFrTGVuZ3RoLFxuICAgICAgICBicmVha0xlbmd0aCA9IF9yZWYkYnJlYWtMZW5ndGggPT09IHZvaWQgMCA/IEluZmluaXR5IDogX3JlZiRicmVha0xlbmd0aCxcbiAgICAgICAgX3JlZiRzZWVuID0gX3JlZi5zZWVuLFxuICAgICAgICBzZWVuID0gX3JlZiRzZWVuID09PSB2b2lkIDAgPyBbXSA6IF9yZWYkc2VlbixcbiAgICAgICAgX3JlZiR0cnVuY2F0ZSA9IF9yZWYudHJ1bmNhdGUsXG4gICAgICAgIHRydW5jYXRlID0gX3JlZiR0cnVuY2F0ZSA9PT0gdm9pZCAwID8gSW5maW5pdHkgOiBfcmVmJHRydW5jYXRlLFxuICAgICAgICBfcmVmJHN0eWxpemUgPSBfcmVmLnN0eWxpemUsXG4gICAgICAgIHN0eWxpemUgPSBfcmVmJHN0eWxpemUgPT09IHZvaWQgMCA/IFN0cmluZyA6IF9yZWYkc3R5bGl6ZTtcblxuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgc2hvd0hpZGRlbjogQm9vbGVhbihzaG93SGlkZGVuKSxcbiAgICAgIGRlcHRoOiBOdW1iZXIoZGVwdGgpLFxuICAgICAgY29sb3JzOiBCb29sZWFuKGNvbG9ycyksXG4gICAgICBjdXN0b21JbnNwZWN0OiBCb29sZWFuKGN1c3RvbUluc3BlY3QpLFxuICAgICAgc2hvd1Byb3h5OiBCb29sZWFuKHNob3dQcm94eSksXG4gICAgICBtYXhBcnJheUxlbmd0aDogTnVtYmVyKG1heEFycmF5TGVuZ3RoKSxcbiAgICAgIGJyZWFrTGVuZ3RoOiBOdW1iZXIoYnJlYWtMZW5ndGgpLFxuICAgICAgdHJ1bmNhdGU6IE51bWJlcih0cnVuY2F0ZSksXG4gICAgICBzZWVuOiBzZWVuLFxuICAgICAgc3R5bGl6ZTogc3R5bGl6ZVxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucy5jb2xvcnMpIHtcbiAgICAgIG9wdGlvbnMuc3R5bGl6ZSA9IGNvbG9yaXNlO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG4gIGZ1bmN0aW9uIHRydW5jYXRlKHN0cmluZywgbGVuZ3RoKSB7XG4gICAgdmFyIHRhaWwgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHRydW5jYXRvcjtcbiAgICBzdHJpbmcgPSBTdHJpbmcoc3RyaW5nKTtcbiAgICB2YXIgdGFpbExlbmd0aCA9IHRhaWwubGVuZ3RoO1xuICAgIHZhciBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuXG4gICAgaWYgKHRhaWxMZW5ndGggPiBsZW5ndGggJiYgc3RyaW5nTGVuZ3RoID4gdGFpbExlbmd0aCkge1xuICAgICAgcmV0dXJuIHRhaWw7XG4gICAgfVxuXG4gICAgaWYgKHN0cmluZ0xlbmd0aCA+IGxlbmd0aCAmJiBzdHJpbmdMZW5ndGggPiB0YWlsTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gXCJcIi5jb25jYXQoc3RyaW5nLnNsaWNlKDAsIGxlbmd0aCAtIHRhaWxMZW5ndGgpKS5jb25jYXQodGFpbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuXG4gIGZ1bmN0aW9uIGluc3BlY3RMaXN0KGxpc3QsIG9wdGlvbnMsIGluc3BlY3RJdGVtKSB7XG4gICAgdmFyIHNlcGFyYXRvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogJywgJztcbiAgICBpbnNwZWN0SXRlbSA9IGluc3BlY3RJdGVtIHx8IG9wdGlvbnMuaW5zcGVjdDtcbiAgICB2YXIgc2l6ZSA9IGxpc3QubGVuZ3RoO1xuICAgIGlmIChzaXplID09PSAwKSByZXR1cm4gJyc7XG4gICAgdmFyIG9yaWdpbmFsTGVuZ3RoID0gb3B0aW9ucy50cnVuY2F0ZTtcbiAgICB2YXIgb3V0cHV0ID0gJyc7XG4gICAgdmFyIHBlZWsgPSAnJztcbiAgICB2YXIgdHJ1bmNhdGVkID0gJyc7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkgKz0gMSkge1xuICAgICAgdmFyIGxhc3QgPSBpICsgMSA9PT0gbGlzdC5sZW5ndGg7XG4gICAgICB2YXIgc2Vjb25kVG9MYXN0ID0gaSArIDIgPT09IGxpc3QubGVuZ3RoO1xuICAgICAgdHJ1bmNhdGVkID0gXCJcIi5jb25jYXQodHJ1bmNhdG9yLCBcIihcIikuY29uY2F0KGxpc3QubGVuZ3RoIC0gaSwgXCIpXCIpO1xuICAgICAgdmFyIHZhbHVlID0gbGlzdFtpXTsgLy8gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSByZW1haW5pbmcgd2UgbmVlZCB0byBhY2NvdW50IGZvciBhIHNlcGFyYXRvciBvZiBgLCBgXG5cbiAgICAgIG9wdGlvbnMudHJ1bmNhdGUgPSBvcmlnaW5hbExlbmd0aCAtIG91dHB1dC5sZW5ndGggLSAobGFzdCA/IDAgOiBzZXBhcmF0b3IubGVuZ3RoKTtcbiAgICAgIHZhciBzdHJpbmcgPSBwZWVrIHx8IGluc3BlY3RJdGVtKHZhbHVlLCBvcHRpb25zKSArIChsYXN0ID8gJycgOiBzZXBhcmF0b3IpO1xuICAgICAgdmFyIG5leHRMZW5ndGggPSBvdXRwdXQubGVuZ3RoICsgc3RyaW5nLmxlbmd0aDtcbiAgICAgIHZhciB0cnVuY2F0ZWRMZW5ndGggPSBuZXh0TGVuZ3RoICsgdHJ1bmNhdGVkLmxlbmd0aDsgLy8gSWYgdGhpcyBpcyB0aGUgbGFzdCBlbGVtZW50LCBhbmQgYWRkaW5nIGl0IHdvdWxkXG4gICAgICAvLyB0YWtlIHVzIG92ZXIgbGVuZ3RoLCBidXQgYWRkaW5nIHRoZSB0cnVuY2F0b3Igd291bGRuJ3QgLSB0aGVuIGJyZWFrIG5vd1xuXG4gICAgICBpZiAobGFzdCAmJiBuZXh0TGVuZ3RoID4gb3JpZ2luYWxMZW5ndGggJiYgb3V0cHV0Lmxlbmd0aCArIHRydW5jYXRlZC5sZW5ndGggPD0gb3JpZ2luYWxMZW5ndGgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIElmIHRoaXMgaXNuJ3QgdGhlIGxhc3Qgb3Igc2Vjb25kIHRvIGxhc3QgZWxlbWVudCB0byBzY2FuLFxuICAgICAgLy8gYnV0IHRoZSBzdHJpbmcgaXMgYWxyZWFkeSBvdmVyIGxlbmd0aCB0aGVuIGJyZWFrIGhlcmVcblxuXG4gICAgICBpZiAoIWxhc3QgJiYgIXNlY29uZFRvTGFzdCAmJiB0cnVuY2F0ZWRMZW5ndGggPiBvcmlnaW5hbExlbmd0aCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH0gLy8gUGVlayBhdCB0aGUgbmV4dCBzdHJpbmcgdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZFxuICAgICAgLy8gYnJlYWsgZWFybHkgYmVmb3JlIGFkZGluZyB0aGlzIGl0ZW0gdG8gdGhlIG91dHB1dFxuXG5cbiAgICAgIHBlZWsgPSBsYXN0ID8gJycgOiBpbnNwZWN0SXRlbShsaXN0W2kgKyAxXSwgb3B0aW9ucykgKyAoc2Vjb25kVG9MYXN0ID8gJycgOiBzZXBhcmF0b3IpOyAvLyBJZiB3ZSBoYXZlIG9uZSBlbGVtZW50IGxlZnQsIGJ1dCB0aGlzIGVsZW1lbnQgYW5kXG4gICAgICAvLyB0aGUgbmV4dCB0YWtlcyBvdmVyIGxlbmd0aCwgdGhlIGJyZWFrIGVhcmx5XG5cbiAgICAgIGlmICghbGFzdCAmJiBzZWNvbmRUb0xhc3QgJiYgdHJ1bmNhdGVkTGVuZ3RoID4gb3JpZ2luYWxMZW5ndGggJiYgbmV4dExlbmd0aCArIHBlZWsubGVuZ3RoID4gb3JpZ2luYWxMZW5ndGgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIG91dHB1dCArPSBzdHJpbmc7IC8vIElmIHRoZSBuZXh0IGVsZW1lbnQgdGFrZXMgdXMgdG8gbGVuZ3RoIC1cbiAgICAgIC8vIGJ1dCB0aGVyZSBhcmUgbW9yZSBhZnRlciB0aGF0LCB0aGVuIHdlIHNob3VsZCB0cnVuY2F0ZSBub3dcblxuICAgICAgaWYgKCFsYXN0ICYmICFzZWNvbmRUb0xhc3QgJiYgbmV4dExlbmd0aCArIHBlZWsubGVuZ3RoID49IG9yaWdpbmFsTGVuZ3RoKSB7XG4gICAgICAgIHRydW5jYXRlZCA9IFwiXCIuY29uY2F0KHRydW5jYXRvciwgXCIoXCIpLmNvbmNhdChsaXN0Lmxlbmd0aCAtIGkgLSAxLCBcIilcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICB0cnVuY2F0ZWQgPSAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gXCJcIi5jb25jYXQob3V0cHV0KS5jb25jYXQodHJ1bmNhdGVkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHF1b3RlQ29tcGxleEtleShrZXkpIHtcbiAgICBpZiAoa2V5Lm1hdGNoKC9eW2EtekEtWl9dW2EtekEtWl8wLTldKiQvKSkge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG5cbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoa2V5KS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIikucmVwbGFjZSgvXFxcXFwiL2csICdcIicpLnJlcGxhY2UoLyheXCJ8XCIkKS9nLCBcIidcIik7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNwZWN0UHJvcGVydHkoX3JlZjIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3JlZjMgPSBfc2xpY2VkVG9BcnJheShfcmVmMiwgMiksXG4gICAgICAgIGtleSA9IF9yZWYzWzBdLFxuICAgICAgICB2YWx1ZSA9IF9yZWYzWzFdO1xuXG4gICAgb3B0aW9ucy50cnVuY2F0ZSAtPSAyO1xuXG4gICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSB7XG4gICAgICBrZXkgPSBxdW90ZUNvbXBsZXhLZXkoa2V5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBrZXkgIT09ICdudW1iZXInKSB7XG4gICAgICBrZXkgPSBcIltcIi5jb25jYXQob3B0aW9ucy5pbnNwZWN0KGtleSwgb3B0aW9ucyksIFwiXVwiKTtcbiAgICB9XG5cbiAgICBvcHRpb25zLnRydW5jYXRlIC09IGtleS5sZW5ndGg7XG4gICAgdmFsdWUgPSBvcHRpb25zLmluc3BlY3QodmFsdWUsIG9wdGlvbnMpO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChrZXksIFwiOiBcIikuY29uY2F0KHZhbHVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc3BlY3RBcnJheShhcnJheSwgb3B0aW9ucykge1xuICAgIC8vIE9iamVjdC5rZXlzIHdpbGwgYWx3YXlzIG91dHB1dCB0aGUgQXJyYXkgaW5kaWNlcyBmaXJzdCwgc28gd2UgY2FuIHNsaWNlIGJ5XG4gICAgLy8gYGFycmF5Lmxlbmd0aGAgdG8gZ2V0IG5vbi1pbmRleCBwcm9wZXJ0aWVzXG4gICAgdmFyIG5vbkluZGV4UHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGFycmF5KS5zbGljZShhcnJheS5sZW5ndGgpO1xuICAgIGlmICghYXJyYXkubGVuZ3RoICYmICFub25JbmRleFByb3BlcnRpZXMubGVuZ3RoKSByZXR1cm4gJ1tdJztcbiAgICBvcHRpb25zLnRydW5jYXRlIC09IDQ7XG4gICAgdmFyIGxpc3RDb250ZW50cyA9IGluc3BlY3RMaXN0KGFycmF5LCBvcHRpb25zKTtcbiAgICBvcHRpb25zLnRydW5jYXRlIC09IGxpc3RDb250ZW50cy5sZW5ndGg7XG4gICAgdmFyIHByb3BlcnR5Q29udGVudHMgPSAnJztcblxuICAgIGlmIChub25JbmRleFByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICBwcm9wZXJ0eUNvbnRlbnRzID0gaW5zcGVjdExpc3Qobm9uSW5kZXhQcm9wZXJ0aWVzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBba2V5LCBhcnJheVtrZXldXTtcbiAgICAgIH0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICAgIH1cblxuICAgIHJldHVybiBcIlsgXCIuY29uY2F0KGxpc3RDb250ZW50cykuY29uY2F0KHByb3BlcnR5Q29udGVudHMgPyBcIiwgXCIuY29uY2F0KHByb3BlcnR5Q29udGVudHMpIDogJycsIFwiIF1cIik7XG4gIH1cblxuICAvKiAhXG4gICAqIENoYWkgLSBnZXRGdW5jTmFtZSB1dGlsaXR5XG4gICAqIENvcHlyaWdodChjKSAyMDEyLTIwMTYgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gICAqIE1JVCBMaWNlbnNlZFxuICAgKi9cblxuICAvKipcbiAgICogIyMjIC5nZXRGdW5jTmFtZShjb25zdHJ1Y3RvckZuKVxuICAgKlxuICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24uXG4gICAqIFdoZW4gYSBub24tZnVuY3Rpb24gaW5zdGFuY2UgaXMgcGFzc2VkLCByZXR1cm5zIGBudWxsYC5cbiAgICogVGhpcyBhbHNvIGluY2x1ZGVzIGEgcG9seWZpbGwgZnVuY3Rpb24gaWYgYGFGdW5jLm5hbWVgIGlzIG5vdCBkZWZpbmVkLlxuICAgKlxuICAgKiBAbmFtZSBnZXRGdW5jTmFtZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jdFxuICAgKiBAbmFtZXNwYWNlIFV0aWxzXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIHZhciB0b1N0cmluZyA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztcbiAgdmFyIGZ1bmN0aW9uTmFtZU1hdGNoID0gL1xccypmdW5jdGlvbig/Olxcc3xcXHMqXFwvXFwqW14oPzoqXFwvKV0rXFwqXFwvXFxzKikqKFteXFxzXFwoXFwvXSspLztcbiAgdmFyIG1heEZ1bmN0aW9uU291cmNlTGVuZ3RoID0gNTEyO1xuICBmdW5jdGlvbiBnZXRGdW5jTmFtZShhRnVuYykge1xuICAgIGlmICh0eXBlb2YgYUZ1bmMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBuYW1lID0gJyc7XG4gICAgaWYgKHR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGUubmFtZSA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGFGdW5jLm5hbWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlZmxlY3RcbiAgICAgIHZhciBmdW5jdGlvblNvdXJjZSA9IHRvU3RyaW5nLmNhbGwoYUZ1bmMpO1xuICAgICAgLy8gVG8gYXZvaWQgdW5jb25zdHJhaW5lZCByZXNvdXJjZSBjb25zdW1wdGlvbiBkdWUgdG8gcGF0aGFsb2dpY2FsbHkgbGFyZ2UgZnVuY3Rpb24gbmFtZXMsXG4gICAgICAvLyB3ZSBsaW1pdCB0aGUgYXZhaWxhYmxlIHJldHVybiB2YWx1ZSB0byBiZSBsZXNzIHRoYW4gNTEyIGNoYXJhY3RlcnMuXG4gICAgICBpZiAoZnVuY3Rpb25Tb3VyY2UuaW5kZXhPZignKCcpID4gbWF4RnVuY3Rpb25Tb3VyY2VMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICB9XG4gICAgICAvLyBIZXJlIHdlIHJ1biBhIHBvbHlmaWxsIGlmIEZ1bmN0aW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIGBuYW1lYCBwcm9wZXJ0eSBhbmQgaWYgYUZ1bmMubmFtZSBpcyBub3QgZGVmaW5lZFxuICAgICAgdmFyIG1hdGNoID0gZnVuY3Rpb25Tb3VyY2UubWF0Y2goZnVuY3Rpb25OYW1lTWF0Y2gpO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIG5hbWUgPSBtYXRjaFsxXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgd2UndmUgZ290IGEgYG5hbWVgIHByb3BlcnR5IHdlIGp1c3QgdXNlIGl0XG4gICAgICBuYW1lID0gYUZ1bmMubmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuXG4gIHZhciBnZXRGdW5jTmFtZV8xID0gZ2V0RnVuY05hbWU7XG5cbiAgdmFyIGdldEFycmF5TmFtZSA9IGZ1bmN0aW9uIGdldEFycmF5TmFtZShhcnJheSkge1xuICAgIC8vIFdlIG5lZWQgdG8gc3BlY2lhbCBjYXNlIE5vZGUuanMnIEJ1ZmZlcnMsIHdoaWNoIHJlcG9ydCB0byBiZSBVaW50OEFycmF5XG4gICAgaWYgKHR5cGVvZiBCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgYXJyYXkgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgIHJldHVybiAnQnVmZmVyJztcbiAgICB9XG5cbiAgICBpZiAoYXJyYXlbU3ltYm9sLnRvU3RyaW5nVGFnXSkge1xuICAgICAgcmV0dXJuIGFycmF5W1N5bWJvbC50b1N0cmluZ1RhZ107XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldEZ1bmNOYW1lXzEoYXJyYXkuY29uc3RydWN0b3IpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGluc3BlY3RUeXBlZEFycmF5KGFycmF5LCBvcHRpb25zKSB7XG4gICAgdmFyIG5hbWUgPSBnZXRBcnJheU5hbWUoYXJyYXkpO1xuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gbmFtZS5sZW5ndGggKyA0OyAvLyBPYmplY3Qua2V5cyB3aWxsIGFsd2F5cyBvdXRwdXQgdGhlIEFycmF5IGluZGljZXMgZmlyc3QsIHNvIHdlIGNhbiBzbGljZSBieVxuICAgIC8vIGBhcnJheS5sZW5ndGhgIHRvIGdldCBub24taW5kZXggcHJvcGVydGllc1xuXG4gICAgdmFyIG5vbkluZGV4UHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGFycmF5KS5zbGljZShhcnJheS5sZW5ndGgpO1xuICAgIGlmICghYXJyYXkubGVuZ3RoICYmICFub25JbmRleFByb3BlcnRpZXMubGVuZ3RoKSByZXR1cm4gXCJcIi5jb25jYXQobmFtZSwgXCJbXVwiKTsgLy8gQXMgd2Uga25vdyBUeXBlZEFycmF5cyBvbmx5IGNvbnRhaW4gVW5zaWduZWQgSW50ZWdlcnMsIHdlIGNhbiBza2lwIGluc3BlY3RpbmcgZWFjaCBvbmUgYW5kIHNpbXBseVxuICAgIC8vIHN0eWxpc2UgdGhlIHRvU3RyaW5nKCkgdmFsdWUgb2YgdGhlbVxuXG4gICAgdmFyIG91dHB1dCA9ICcnO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHN0cmluZyA9IFwiXCIuY29uY2F0KG9wdGlvbnMuc3R5bGl6ZSh0cnVuY2F0ZShhcnJheVtpXSwgb3B0aW9ucy50cnVuY2F0ZSksICdudW1iZXInKSkuY29uY2F0KGkgPT09IGFycmF5Lmxlbmd0aCAtIDEgPyAnJyA6ICcsICcpO1xuICAgICAgb3B0aW9ucy50cnVuY2F0ZSAtPSBzdHJpbmcubGVuZ3RoO1xuXG4gICAgICBpZiAoYXJyYXlbaV0gIT09IGFycmF5Lmxlbmd0aCAmJiBvcHRpb25zLnRydW5jYXRlIDw9IDMpIHtcbiAgICAgICAgb3V0cHV0ICs9IFwiXCIuY29uY2F0KHRydW5jYXRvciwgXCIoXCIpLmNvbmNhdChhcnJheS5sZW5ndGggLSBhcnJheVtpXSArIDEsIFwiKVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIG91dHB1dCArPSBzdHJpbmc7XG4gICAgfVxuXG4gICAgdmFyIHByb3BlcnR5Q29udGVudHMgPSAnJztcblxuICAgIGlmIChub25JbmRleFByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICBwcm9wZXJ0eUNvbnRlbnRzID0gaW5zcGVjdExpc3Qobm9uSW5kZXhQcm9wZXJ0aWVzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBba2V5LCBhcnJheVtrZXldXTtcbiAgICAgIH0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICAgIH1cblxuICAgIHJldHVybiBcIlwiLmNvbmNhdChuYW1lLCBcIlsgXCIpLmNvbmNhdChvdXRwdXQpLmNvbmNhdChwcm9wZXJ0eUNvbnRlbnRzID8gXCIsIFwiLmNvbmNhdChwcm9wZXJ0eUNvbnRlbnRzKSA6ICcnLCBcIiBdXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zcGVjdERhdGUoZGF0ZU9iamVjdCwgb3B0aW9ucykge1xuICAgIHZhciBzdHJpbmdSZXByZXNlbnRhdGlvbiA9IGRhdGVPYmplY3QudG9KU09OKCk7XG5cbiAgICBpZiAoc3RyaW5nUmVwcmVzZW50YXRpb24gPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnSW52YWxpZCBEYXRlJztcbiAgICB9XG5cbiAgICB2YXIgc3BsaXQgPSBzdHJpbmdSZXByZXNlbnRhdGlvbi5zcGxpdCgnVCcpO1xuICAgIHZhciBkYXRlID0gc3BsaXRbMF07IC8vIElmIHdlIG5lZWQgdG8gLSB0cnVuY2F0ZSB0aGUgdGltZSBwb3J0aW9uLCBidXQgbmV2ZXIgdGhlIGRhdGVcblxuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoXCJcIi5jb25jYXQoZGF0ZSwgXCJUXCIpLmNvbmNhdCh0cnVuY2F0ZShzcGxpdFsxXSwgb3B0aW9ucy50cnVuY2F0ZSAtIGRhdGUubGVuZ3RoIC0gMSkpLCAnZGF0ZScpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zcGVjdEZ1bmN0aW9uKGZ1bmMsIG9wdGlvbnMpIHtcbiAgICB2YXIgbmFtZSA9IGdldEZ1bmNOYW1lXzEoZnVuYyk7XG5cbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoJ1tGdW5jdGlvbl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoXCJbRnVuY3Rpb24gXCIuY29uY2F0KHRydW5jYXRlKG5hbWUsIG9wdGlvbnMudHJ1bmNhdGUgLSAxMSksIFwiXVwiKSwgJ3NwZWNpYWwnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc3BlY3RNYXBFbnRyeShfcmVmLCBvcHRpb25zKSB7XG4gICAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMiksXG4gICAgICAgIGtleSA9IF9yZWYyWzBdLFxuICAgICAgICB2YWx1ZSA9IF9yZWYyWzFdO1xuXG4gICAgb3B0aW9ucy50cnVuY2F0ZSAtPSA0O1xuICAgIGtleSA9IG9wdGlvbnMuaW5zcGVjdChrZXksIG9wdGlvbnMpO1xuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0ga2V5Lmxlbmd0aDtcbiAgICB2YWx1ZSA9IG9wdGlvbnMuaW5zcGVjdCh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KGtleSwgXCIgPT4gXCIpLmNvbmNhdCh2YWx1ZSk7XG4gIH0gLy8gSUUxMSBkb2Vzbid0IHN1cHBvcnQgYG1hcC5lbnRyaWVzKClgXG5cblxuICBmdW5jdGlvbiBtYXBUb0VudHJpZXMobWFwKSB7XG4gICAgdmFyIGVudHJpZXMgPSBbXTtcbiAgICBtYXAuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgZW50cmllcy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGVudHJpZXM7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNwZWN0TWFwKG1hcCwgb3B0aW9ucykge1xuICAgIHZhciBzaXplID0gbWFwLnNpemUgLSAxO1xuXG4gICAgaWYgKHNpemUgPD0gMCkge1xuICAgICAgcmV0dXJuICdNYXB7fSc7XG4gICAgfVxuXG4gICAgb3B0aW9ucy50cnVuY2F0ZSAtPSA3O1xuICAgIHJldHVybiBcIk1hcHsgXCIuY29uY2F0KGluc3BlY3RMaXN0KG1hcFRvRW50cmllcyhtYXApLCBvcHRpb25zLCBpbnNwZWN0TWFwRW50cnkpLCBcIiB9XCIpO1xuICB9XG5cbiAgdmFyIGlzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIChpKSB7XG4gICAgcmV0dXJuIGkgIT09IGk7XG4gIH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG5cblxuICBmdW5jdGlvbiBpbnNwZWN0TnVtYmVyKG51bWJlciwgb3B0aW9ucykge1xuICAgIGlmIChpc05hTihudW1iZXIpKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKCdOYU4nLCAnbnVtYmVyJyk7XG4gICAgfVxuXG4gICAgaWYgKG51bWJlciA9PT0gSW5maW5pdHkpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoJ0luZmluaXR5JywgJ251bWJlcicpO1xuICAgIH1cblxuICAgIGlmIChudW1iZXIgPT09IC1JbmZpbml0eSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZSgnLUluZmluaXR5JywgJ251bWJlcicpO1xuICAgIH1cblxuICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoMSAvIG51bWJlciA9PT0gSW5maW5pdHkgPyAnKzAnIDogJy0wJywgJ251bWJlcicpO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUodHJ1bmNhdGUobnVtYmVyLCBvcHRpb25zLnRydW5jYXRlKSwgJ251bWJlcicpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zcGVjdEJpZ0ludChudW1iZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgbnVtcyA9IHRydW5jYXRlKG51bWJlci50b1N0cmluZygpLCBvcHRpb25zLnRydW5jYXRlIC0gMSk7XG4gICAgaWYgKG51bXMgIT09IHRydW5jYXRvcikgbnVtcyArPSAnbic7XG4gICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShudW1zLCAnYmlnaW50Jyk7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNwZWN0UmVnRXhwKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgdmFyIGZsYWdzID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLycpWzJdO1xuICAgIHZhciBzb3VyY2VMZW5ndGggPSBvcHRpb25zLnRydW5jYXRlIC0gKDIgKyBmbGFncy5sZW5ndGgpO1xuICAgIHZhciBzb3VyY2UgPSB2YWx1ZS5zb3VyY2U7XG4gICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShcIi9cIi5jb25jYXQodHJ1bmNhdGUoc291cmNlLCBzb3VyY2VMZW5ndGgpLCBcIi9cIikuY29uY2F0KGZsYWdzKSwgJ3JlZ2V4cCcpO1xuICB9XG5cbiAgZnVuY3Rpb24gYXJyYXlGcm9tU2V0KHNldCkge1xuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICBzZXQuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zcGVjdFNldChzZXQsIG9wdGlvbnMpIHtcbiAgICBpZiAoc2V0LnNpemUgPT09IDApIHJldHVybiAnU2V0e30nO1xuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gNztcbiAgICByZXR1cm4gXCJTZXR7IFwiLmNvbmNhdChpbnNwZWN0TGlzdChhcnJheUZyb21TZXQoc2V0KSwgb3B0aW9ucyksIFwiIH1cIik7XG4gIH1cblxuICB2YXIgc3RyaW5nRXNjYXBlQ2hhcnMgPSBuZXcgUmVnRXhwKFwiWydcXFxcdTAwMDAtXFxcXHUwMDFmXFxcXHUwMDdmLVxcXFx1MDA5ZlxcXFx1MDBhZFxcXFx1MDYwMC1cXFxcdTA2MDRcXFxcdTA3MGZcXFxcdTE3YjRcXFxcdTE3YjVcIiArIFwiXFxcXHUyMDBjLVxcXFx1MjAwZlxcXFx1MjAyOC1cXFxcdTIwMmZcXFxcdTIwNjAtXFxcXHUyMDZmXFxcXHVmZWZmXFxcXHVmZmYwLVxcXFx1ZmZmZl1cIiwgJ2cnKTtcbiAgdmFyIGVzY2FwZUNoYXJhY3RlcnMgPSB7XG4gICAgJ1xcYic6ICdcXFxcYicsXG4gICAgJ1xcdCc6ICdcXFxcdCcsXG4gICAgJ1xcbic6ICdcXFxcbicsXG4gICAgJ1xcZic6ICdcXFxcZicsXG4gICAgJ1xccic6ICdcXFxccicsXG4gICAgXCInXCI6IFwiXFxcXCdcIixcbiAgICAnXFxcXCc6ICdcXFxcXFxcXCdcbiAgfTtcbiAgdmFyIGhleCA9IDE2O1xuICB2YXIgdW5pY29kZUxlbmd0aCA9IDQ7XG5cbiAgZnVuY3Rpb24gZXNjYXBlKGNoYXIpIHtcbiAgICByZXR1cm4gZXNjYXBlQ2hhcmFjdGVyc1tjaGFyXSB8fCBcIlxcXFx1XCIuY29uY2F0KFwiMDAwMFwiLmNvbmNhdChjaGFyLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoaGV4KSkuc2xpY2UoLXVuaWNvZGVMZW5ndGgpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyaW5nLCBvcHRpb25zKSB7XG4gICAgaWYgKHN0cmluZ0VzY2FwZUNoYXJzLnRlc3Qoc3RyaW5nKSkge1xuICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2Uoc3RyaW5nRXNjYXBlQ2hhcnMsIGVzY2FwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShcIidcIi5jb25jYXQodHJ1bmNhdGUoc3RyaW5nLCBvcHRpb25zLnRydW5jYXRlIC0gMiksIFwiJ1wiKSwgJ3N0cmluZycpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zcGVjdFN5bWJvbCh2YWx1ZSkge1xuICAgIGlmICgnZGVzY3JpcHRpb24nIGluIFN5bWJvbC5wcm90b3R5cGUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5kZXNjcmlwdGlvbiA/IFwiU3ltYm9sKFwiLmNvbmNhdCh2YWx1ZS5kZXNjcmlwdGlvbiwgXCIpXCIpIDogJ1N5bWJvbCgpJztcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHZhciBnZXRQcm9taXNlVmFsdWUgPSBmdW5jdGlvbiBnZXRQcm9taXNlVmFsdWUoKSB7XG4gICAgcmV0dXJuICdQcm9taXNle1x1MjAyNn0nO1xuICB9O1xuXG4gIHRyeSB7XG4gICAgdmFyIF9wcm9jZXNzJGJpbmRpbmcgPSBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKSxcbiAgICAgICAgZ2V0UHJvbWlzZURldGFpbHMgPSBfcHJvY2VzcyRiaW5kaW5nLmdldFByb21pc2VEZXRhaWxzLFxuICAgICAgICBrUGVuZGluZyA9IF9wcm9jZXNzJGJpbmRpbmcua1BlbmRpbmcsXG4gICAgICAgIGtSZWplY3RlZCA9IF9wcm9jZXNzJGJpbmRpbmcua1JlamVjdGVkO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZ2V0UHJvbWlzZURldGFpbHMoUHJvbWlzZS5yZXNvbHZlKCkpKSkge1xuICAgICAgZ2V0UHJvbWlzZVZhbHVlID0gZnVuY3Rpb24gZ2V0UHJvbWlzZVZhbHVlKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfZ2V0UHJvbWlzZURldGFpbHMgPSBnZXRQcm9taXNlRGV0YWlscyh2YWx1ZSksXG4gICAgICAgICAgICBfZ2V0UHJvbWlzZURldGFpbHMyID0gX3NsaWNlZFRvQXJyYXkoX2dldFByb21pc2VEZXRhaWxzLCAyKSxcbiAgICAgICAgICAgIHN0YXRlID0gX2dldFByb21pc2VEZXRhaWxzMlswXSxcbiAgICAgICAgICAgIGlubmVyVmFsdWUgPSBfZ2V0UHJvbWlzZURldGFpbHMyWzFdO1xuXG4gICAgICAgIGlmIChzdGF0ZSA9PT0ga1BlbmRpbmcpIHtcbiAgICAgICAgICByZXR1cm4gJ1Byb21pc2V7PHBlbmRpbmc+fSc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gXCJQcm9taXNlXCIuY29uY2F0KHN0YXRlID09PSBrUmVqZWN0ZWQgPyAnIScgOiAnJywgXCJ7XCIpLmNvbmNhdChvcHRpb25zLmluc3BlY3QoaW5uZXJWYWx1ZSwgb3B0aW9ucyksIFwifVwiKTtcbiAgICAgIH07XG4gICAgfVxuICB9IGNhdGNoIChub3ROb2RlKSB7XG4gICAgLyogaWdub3JlICovXG4gIH1cblxuICB2YXIgaW5zcGVjdFByb21pc2UgPSBnZXRQcm9taXNlVmFsdWU7XG5cbiAgZnVuY3Rpb24gaW5zcGVjdE9iamVjdChvYmplY3QsIG9wdGlvbnMpIHtcbiAgICB2YXIgcHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpIDogW107XG5cbiAgICBpZiAocHJvcGVydGllcy5sZW5ndGggPT09IDAgJiYgc3ltYm9scy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAne30nO1xuICAgIH1cblxuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gNDtcbiAgICBvcHRpb25zLnNlZW4gPSBvcHRpb25zLnNlZW4gfHwgW107XG5cbiAgICBpZiAob3B0aW9ucy5zZWVuLmluZGV4T2Yob2JqZWN0KSA+PSAwKSB7XG4gICAgICByZXR1cm4gJ1tDaXJjdWxhcl0nO1xuICAgIH1cblxuICAgIG9wdGlvbnMuc2Vlbi5wdXNoKG9iamVjdCk7XG4gICAgdmFyIHByb3BlcnR5Q29udGVudHMgPSBpbnNwZWN0TGlzdChwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gW2tleSwgb2JqZWN0W2tleV1dO1xuICAgIH0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICAgIHZhciBzeW1ib2xDb250ZW50cyA9IGluc3BlY3RMaXN0KHN5bWJvbHMubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiBba2V5LCBvYmplY3Rba2V5XV07XG4gICAgfSksIG9wdGlvbnMsIGluc3BlY3RQcm9wZXJ0eSk7XG4gICAgb3B0aW9ucy5zZWVuLnBvcCgpO1xuICAgIHZhciBzZXAgPSAnJztcblxuICAgIGlmIChwcm9wZXJ0eUNvbnRlbnRzICYmIHN5bWJvbENvbnRlbnRzKSB7XG4gICAgICBzZXAgPSAnLCAnO1xuICAgIH1cblxuICAgIHJldHVybiBcInsgXCIuY29uY2F0KHByb3BlcnR5Q29udGVudHMpLmNvbmNhdChzZXApLmNvbmNhdChzeW1ib2xDb250ZW50cywgXCIgfVwiKTtcbiAgfVxuXG4gIHZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZyA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IGZhbHNlO1xuICBmdW5jdGlvbiBpbnNwZWN0Q2xhc3ModmFsdWUsIG9wdGlvbnMpIHtcbiAgICB2YXIgbmFtZSA9ICcnO1xuXG4gICAgaWYgKHRvU3RyaW5nVGFnICYmIHRvU3RyaW5nVGFnIGluIHZhbHVlKSB7XG4gICAgICBuYW1lID0gdmFsdWVbdG9TdHJpbmdUYWddO1xuICAgIH1cblxuICAgIG5hbWUgPSBuYW1lIHx8IGdldEZ1bmNOYW1lXzEodmFsdWUuY29uc3RydWN0b3IpOyAvLyBCYWJlbCB0cmFuc2Zvcm1zIGFub255bW91cyBjbGFzc2VzIHRvIHRoZSBuYW1lIGBfY2xhc3NgXG5cbiAgICBpZiAoIW5hbWUgfHwgbmFtZSA9PT0gJ19jbGFzcycpIHtcbiAgICAgIG5hbWUgPSAnPEFub255bW91cyBDbGFzcz4nO1xuICAgIH1cblxuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gbmFtZS5sZW5ndGg7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KG5hbWUpLmNvbmNhdChpbnNwZWN0T2JqZWN0KHZhbHVlLCBvcHRpb25zKSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNwZWN0QXJndW1lbnRzKGFyZ3MsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHJldHVybiAnQXJndW1lbnRzW10nO1xuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gMTM7XG4gICAgcmV0dXJuIFwiQXJndW1lbnRzWyBcIi5jb25jYXQoaW5zcGVjdExpc3QoYXJncywgb3B0aW9ucyksIFwiIF1cIik7XG4gIH1cblxuICB2YXIgZXJyb3JLZXlzID0gWydzdGFjaycsICdsaW5lJywgJ2NvbHVtbicsICduYW1lJywgJ21lc3NhZ2UnLCAnZmlsZU5hbWUnLCAnbGluZU51bWJlcicsICdjb2x1bW5OdW1iZXInLCAnbnVtYmVyJywgJ2Rlc2NyaXB0aW9uJ107XG4gIGZ1bmN0aW9uIGluc3BlY3RPYmplY3QkMShlcnJvciwgb3B0aW9ucykge1xuICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gZXJyb3JLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTE7XG4gICAgfSk7XG4gICAgdmFyIG5hbWUgPSBlcnJvci5uYW1lO1xuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gbmFtZS5sZW5ndGg7XG4gICAgdmFyIG1lc3NhZ2UgPSAnJztcblxuICAgIGlmICh0eXBlb2YgZXJyb3IubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG1lc3NhZ2UgPSB0cnVuY2F0ZShlcnJvci5tZXNzYWdlLCBvcHRpb25zLnRydW5jYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvcGVydGllcy51bnNoaWZ0KCdtZXNzYWdlJyk7XG4gICAgfVxuXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UgPyBcIjogXCIuY29uY2F0KG1lc3NhZ2UpIDogJyc7XG4gICAgb3B0aW9ucy50cnVuY2F0ZSAtPSBtZXNzYWdlLmxlbmd0aCArIDU7XG4gICAgdmFyIHByb3BlcnR5Q29udGVudHMgPSBpbnNwZWN0TGlzdChwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gW2tleSwgZXJyb3Jba2V5XV07XG4gICAgfSksIG9wdGlvbnMsIGluc3BlY3RQcm9wZXJ0eSk7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KG5hbWUpLmNvbmNhdChtZXNzYWdlKS5jb25jYXQocHJvcGVydHlDb250ZW50cyA/IFwiIHsgXCIuY29uY2F0KHByb3BlcnR5Q29udGVudHMsIFwiIH1cIikgOiAnJyk7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNwZWN0QXR0cmlidXRlKF9yZWYsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAyKSxcbiAgICAgICAga2V5ID0gX3JlZjJbMF0sXG4gICAgICAgIHZhbHVlID0gX3JlZjJbMV07XG5cbiAgICBvcHRpb25zLnRydW5jYXRlIC09IDM7XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gXCJcIi5jb25jYXQob3B0aW9ucy5zdHlsaXplKGtleSwgJ3llbGxvdycpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gXCJcIi5jb25jYXQob3B0aW9ucy5zdHlsaXplKGtleSwgJ3llbGxvdycpLCBcIj1cIikuY29uY2F0KG9wdGlvbnMuc3R5bGl6ZShcIlxcXCJcIi5jb25jYXQodmFsdWUsIFwiXFxcIlwiKSwgJ3N0cmluZycpKTtcbiAgfVxuICBmdW5jdGlvbiBpbnNwZWN0SFRNTENvbGxlY3Rpb24oY29sbGVjdGlvbiwgb3B0aW9ucykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgIHJldHVybiBpbnNwZWN0TGlzdChjb2xsZWN0aW9uLCBvcHRpb25zLCBpbnNwZWN0SFRNTCwgJ1xcbicpO1xuICB9XG4gIGZ1bmN0aW9uIGluc3BlY3RIVE1MKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB2YXIgcHJvcGVydGllcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMoKTtcbiAgICB2YXIgbmFtZSA9IGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBoZWFkID0gb3B0aW9ucy5zdHlsaXplKFwiPFwiLmNvbmNhdChuYW1lKSwgJ3NwZWNpYWwnKTtcbiAgICB2YXIgaGVhZENsb3NlID0gb3B0aW9ucy5zdHlsaXplKFwiPlwiLCAnc3BlY2lhbCcpO1xuICAgIHZhciB0YWlsID0gb3B0aW9ucy5zdHlsaXplKFwiPC9cIi5jb25jYXQobmFtZSwgXCI+XCIpLCAnc3BlY2lhbCcpO1xuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gbmFtZS5sZW5ndGggKiAyICsgNTtcbiAgICB2YXIgcHJvcGVydHlDb250ZW50cyA9ICcnO1xuXG4gICAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgcHJvcGVydHlDb250ZW50cyArPSAnICc7XG4gICAgICBwcm9wZXJ0eUNvbnRlbnRzICs9IGluc3BlY3RMaXN0KHByb3BlcnRpZXMubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIFtrZXksIGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSldO1xuICAgICAgfSksIG9wdGlvbnMsIGluc3BlY3RBdHRyaWJ1dGUsICcgJyk7XG4gICAgfVxuXG4gICAgb3B0aW9ucy50cnVuY2F0ZSAtPSBwcm9wZXJ0eUNvbnRlbnRzLmxlbmd0aDtcbiAgICB2YXIgdHJ1bmNhdGUgPSBvcHRpb25zLnRydW5jYXRlO1xuICAgIHZhciBjaGlsZHJlbiA9IGluc3BlY3RIVE1MQ29sbGVjdGlvbihlbGVtZW50LmNoaWxkcmVuLCBvcHRpb25zKTtcblxuICAgIGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGggPiB0cnVuY2F0ZSkge1xuICAgICAgY2hpbGRyZW4gPSBcIlwiLmNvbmNhdCh0cnVuY2F0b3IsIFwiKFwiKS5jb25jYXQoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgsIFwiKVwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gXCJcIi5jb25jYXQoaGVhZCkuY29uY2F0KHByb3BlcnR5Q29udGVudHMpLmNvbmNhdChoZWFkQ2xvc2UpLmNvbmNhdChjaGlsZHJlbikuY29uY2F0KHRhaWwpO1xuICB9XG5cbiAgdmFyIHN5bWJvbHNTdXBwb3J0ZWQgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuZm9yID09PSAnZnVuY3Rpb24nO1xuICB2YXIgY2hhaUluc3BlY3QgPSBzeW1ib2xzU3VwcG9ydGVkID8gU3ltYm9sLmZvcignY2hhaS9pbnNwZWN0JykgOiAnQEBjaGFpL2luc3BlY3QnO1xuICB2YXIgbm9kZUluc3BlY3QgPSBmYWxzZTtcblxuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxuICAgIHZhciBub2RlVXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuICAgIG5vZGVJbnNwZWN0ID0gbm9kZVV0aWwuaW5zcGVjdCA/IG5vZGVVdGlsLmluc3BlY3QuY3VzdG9tIDogZmFsc2U7XG4gIH0gY2F0Y2ggKG5vTm9kZUluc3BlY3QpIHtcbiAgICBub2RlSW5zcGVjdCA9IGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gRmFrZU1hcCgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXRlbXBsYXRlXG4gICAgdGhpcy5rZXkgPSAnY2hhaS9sb3VwZV9fJyArIE1hdGgucmFuZG9tKCkgKyBEYXRlLm5vdygpO1xuICB9XG5cbiAgRmFrZU1hcC5wcm90b3R5cGUgPSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9iamVjdC1zaG9ydGhhbmRcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgIHJldHVybiBrZXlbdGhpcy5rZXldO1xuICAgIH0sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9iamVjdC1zaG9ydGhhbmRcbiAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmtleSBpbiBrZXk7XG4gICAgfSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JqZWN0LXNob3J0aGFuZFxuICAgIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgIGlmIChPYmplY3QuaXNFeHRlbnNpYmxlKGtleSkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGtleSwgdGhpcy5rZXksIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JqZWN0LXNob3J0aGFuZFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICB2YXIgY29uc3RydWN0b3JNYXAgPSBuZXcgKHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IEZha2VNYXApKCk7XG4gIHZhciBzdHJpbmdUYWdNYXAgPSB7fTtcbiAgdmFyIGJhc2VUeXBlc01hcCA9IHtcbiAgICB1bmRlZmluZWQ6IGZ1bmN0aW9uIHVuZGVmaW5lZCQxKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKCd1bmRlZmluZWQnLCAndW5kZWZpbmVkJyk7XG4gICAgfSxcbiAgICBudWxsOiBmdW5jdGlvbiBfbnVsbCh2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShudWxsLCAnbnVsbCcpO1xuICAgIH0sXG4gICAgYm9vbGVhbjogZnVuY3Rpb24gYm9vbGVhbih2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZSh2YWx1ZSwgJ2Jvb2xlYW4nKTtcbiAgICB9LFxuICAgIEJvb2xlYW46IGZ1bmN0aW9uIEJvb2xlYW4odmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUodmFsdWUsICdib29sZWFuJyk7XG4gICAgfSxcbiAgICBudW1iZXI6IGluc3BlY3ROdW1iZXIsXG4gICAgTnVtYmVyOiBpbnNwZWN0TnVtYmVyLFxuICAgIGJpZ2ludDogaW5zcGVjdEJpZ0ludCxcbiAgICBCaWdJbnQ6IGluc3BlY3RCaWdJbnQsXG4gICAgc3RyaW5nOiBpbnNwZWN0U3RyaW5nLFxuICAgIFN0cmluZzogaW5zcGVjdFN0cmluZyxcbiAgICBmdW5jdGlvbjogaW5zcGVjdEZ1bmN0aW9uLFxuICAgIEZ1bmN0aW9uOiBpbnNwZWN0RnVuY3Rpb24sXG4gICAgc3ltYm9sOiBpbnNwZWN0U3ltYm9sLFxuICAgIC8vIEEgU3ltYm9sIHBvbHlmaWxsIHdpbGwgcmV0dXJuIGBTeW1ib2xgIG5vdCBgc3ltYm9sYCBmcm9tIHR5cGVkZXRlY3RcbiAgICBTeW1ib2w6IGluc3BlY3RTeW1ib2wsXG4gICAgQXJyYXk6IGluc3BlY3RBcnJheSxcbiAgICBEYXRlOiBpbnNwZWN0RGF0ZSxcbiAgICBNYXA6IGluc3BlY3RNYXAsXG4gICAgU2V0OiBpbnNwZWN0U2V0LFxuICAgIFJlZ0V4cDogaW5zcGVjdFJlZ0V4cCxcbiAgICBQcm9taXNlOiBpbnNwZWN0UHJvbWlzZSxcbiAgICAvLyBXZWFrU2V0LCBXZWFrTWFwIGFyZSB0b3RhbGx5IG9wYXF1ZSB0byB1c1xuICAgIFdlYWtTZXQ6IGZ1bmN0aW9uIFdlYWtTZXQodmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoJ1dlYWtTZXR7XHUyMDI2fScsICdzcGVjaWFsJyk7XG4gICAgfSxcbiAgICBXZWFrTWFwOiBmdW5jdGlvbiBXZWFrTWFwKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKCdXZWFrTWFwe1x1MjAyNn0nLCAnc3BlY2lhbCcpO1xuICAgIH0sXG4gICAgQXJndW1lbnRzOiBpbnNwZWN0QXJndW1lbnRzLFxuICAgIEludDhBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gICAgVWludDhBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gICAgVWludDhDbGFtcGVkQXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICAgIEludDE2QXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICAgIFVpbnQxNkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgICBJbnQzMkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgICBVaW50MzJBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gICAgRmxvYXQzMkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgICBGbG9hdDY0QXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICAgIEdlbmVyYXRvcjogZnVuY3Rpb24gR2VuZXJhdG9yKCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0sXG4gICAgRGF0YVZpZXc6IGZ1bmN0aW9uIERhdGFWaWV3KCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0sXG4gICAgQXJyYXlCdWZmZXI6IGZ1bmN0aW9uIEFycmF5QnVmZmVyKCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0sXG4gICAgRXJyb3I6IGluc3BlY3RPYmplY3QkMSxcbiAgICBIVE1MQ29sbGVjdGlvbjogaW5zcGVjdEhUTUxDb2xsZWN0aW9uLFxuICAgIE5vZGVMaXN0OiBpbnNwZWN0SFRNTENvbGxlY3Rpb25cbiAgfTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcblxuICB2YXIgaW5zcGVjdEN1c3RvbSA9IGZ1bmN0aW9uIGluc3BlY3RDdXN0b20odmFsdWUsIG9wdGlvbnMsIHR5cGUpIHtcbiAgICBpZiAoY2hhaUluc3BlY3QgaW4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlW2NoYWlJbnNwZWN0XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHZhbHVlW2NoYWlJbnNwZWN0XShvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZUluc3BlY3QgJiYgbm9kZUluc3BlY3QgaW4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlW25vZGVJbnNwZWN0XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHZhbHVlW25vZGVJbnNwZWN0XShvcHRpb25zLmRlcHRoLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoJ2luc3BlY3QnIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5pbnNwZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdmFsdWUuaW5zcGVjdChvcHRpb25zLmRlcHRoLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoJ2NvbnN0cnVjdG9yJyBpbiB2YWx1ZSAmJiBjb25zdHJ1Y3Rvck1hcC5oYXModmFsdWUuY29uc3RydWN0b3IpKSB7XG4gICAgICByZXR1cm4gY29uc3RydWN0b3JNYXAuZ2V0KHZhbHVlLmNvbnN0cnVjdG9yKSh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKHN0cmluZ1RhZ01hcFt0eXBlXSkge1xuICAgICAgcmV0dXJuIHN0cmluZ1RhZ01hcFt0eXBlXSh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9O1xuXG4gIHZhciB0b1N0cmluZyQxID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcblxuICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG5vcm1hbGlzZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgb3B0aW9ucy5pbnNwZWN0ID0gaW5zcGVjdDtcbiAgICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgICBjdXN0b21JbnNwZWN0ID0gX29wdGlvbnMuY3VzdG9tSW5zcGVjdDtcbiAgICB2YXIgdHlwZSA9IHZhbHVlID09PSBudWxsID8gJ251bGwnIDogX3R5cGVvZih2YWx1ZSk7XG5cbiAgICBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHR5cGUgPSB0b1N0cmluZyQxLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKTtcbiAgICB9IC8vIElmIGl0IGlzIGEgYmFzZSB2YWx1ZSB0aGF0IHdlIGFscmVhZHkgc3VwcG9ydCwgdGhlbiB1c2UgTG91cGUncyBpbnNwZWN0b3JcblxuXG4gICAgaWYgKGJhc2VUeXBlc01hcFt0eXBlXSkge1xuICAgICAgcmV0dXJuIGJhc2VUeXBlc01hcFt0eXBlXSh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfSAvLyBJZiBgb3B0aW9ucy5jdXN0b21JbnNwZWN0YCBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRyeSB0byB1c2UgdGhlIGN1c3RvbSBpbnNwZWN0b3JcblxuXG4gICAgaWYgKGN1c3RvbUluc3BlY3QgJiYgdmFsdWUpIHtcbiAgICAgIHZhciBvdXRwdXQgPSBpbnNwZWN0Q3VzdG9tKHZhbHVlLCBvcHRpb25zLCB0eXBlKTtcblxuICAgICAgaWYgKG91dHB1dCkge1xuICAgICAgICBpZiAodHlwZW9mIG91dHB1dCA9PT0gJ3N0cmluZycpIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIHJldHVybiBpbnNwZWN0KG91dHB1dCwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByb3RvID0gdmFsdWUgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpIDogZmFsc2U7IC8vIElmIGl0J3MgYSBwbGFpbiBPYmplY3QgdGhlbiB1c2UgTG91cGUncyBpbnNwZWN0b3JcblxuICAgIGlmIChwcm90byA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBwcm90byA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGluc3BlY3RPYmplY3QodmFsdWUsIG9wdGlvbnMpO1xuICAgIH0gLy8gU3BlY2lmaWNhbGx5IGFjY291bnQgZm9yIEhUTUxFbGVtZW50c1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuXG5cbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIEhUTUxFbGVtZW50ID09PSAnZnVuY3Rpb24nICYmIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBpbnNwZWN0SFRNTCh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKCdjb25zdHJ1Y3RvcicgaW4gdmFsdWUpIHtcbiAgICAgIC8vIElmIGl0IGlzIGEgY2xhc3MsIGluc3BlY3QgaXQgbGlrZSBhbiBvYmplY3QgYnV0IGFkZCB0aGUgY29uc3RydWN0b3IgbmFtZVxuICAgICAgaWYgKHZhbHVlLmNvbnN0cnVjdG9yICE9PSBPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIGluc3BlY3RDbGFzcyh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICB9IC8vIElmIGl0IGlzIGFuIG9iamVjdCB3aXRoIGFuIGFub255bW91cyBwcm90b3R5cGUsIGRpc3BsYXkgaXQgYXMgYW4gb2JqZWN0LlxuXG5cbiAgICAgIHJldHVybiBpbnNwZWN0T2JqZWN0KHZhbHVlLCBvcHRpb25zKTtcbiAgICB9IC8vIGxhc3QgY2hhbmNlIHRvIGNoZWNrIGlmIGl0J3MgYW4gb2JqZWN0XG5cblxuICAgIGlmICh2YWx1ZSA9PT0gT2JqZWN0KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGluc3BlY3RPYmplY3QodmFsdWUsIG9wdGlvbnMpO1xuICAgIH0gLy8gV2UgaGF2ZSBydW4gb3V0IG9mIG9wdGlvbnMhIEp1c3Qgc3RyaW5naWZ5IHRoZSB2YWx1ZVxuXG5cbiAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKFN0cmluZyh2YWx1ZSksIHR5cGUpO1xuICB9XG4gIGZ1bmN0aW9uIHJlZ2lzdGVyQ29uc3RydWN0b3IoY29uc3RydWN0b3IsIGluc3BlY3Rvcikge1xuICAgIGlmIChjb25zdHJ1Y3Rvck1hcC5oYXMoY29uc3RydWN0b3IpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3JNYXAuc2V0KGNvbnN0cnVjdG9yLCBpbnNwZWN0b3IpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGZ1bmN0aW9uIHJlZ2lzdGVyU3RyaW5nVGFnKHN0cmluZ1RhZywgaW5zcGVjdG9yKSB7XG4gICAgaWYgKHN0cmluZ1RhZyBpbiBzdHJpbmdUYWdNYXApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzdHJpbmdUYWdNYXBbc3RyaW5nVGFnXSA9IGluc3BlY3RvcjtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgY3VzdG9tID0gY2hhaUluc3BlY3Q7XG5cbiAgZXhwb3J0cy5jdXN0b20gPSBjdXN0b207XG4gIGV4cG9ydHMuZGVmYXVsdCA9IGluc3BlY3Q7XG4gIGV4cG9ydHMuaW5zcGVjdCA9IGluc3BlY3Q7XG4gIGV4cG9ydHMucmVnaXN0ZXJDb25zdHJ1Y3RvciA9IHJlZ2lzdGVyQ29uc3RydWN0b3I7XG4gIGV4cG9ydHMucmVnaXN0ZXJTdHJpbmdUYWcgPSByZWdpc3RlclN0cmluZ1RhZztcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG59KSkpO1xuIiwgIm1vZHVsZS5leHBvcnRzID0ge1xuXG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLmluY2x1ZGVTdGFja1xuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgaW5mbHVlbmNlcyB3aGV0aGVyIHN0YWNrIHRyYWNlXG4gICAqIGlzIGluY2x1ZGVkIGluIEFzc2VydGlvbiBlcnJvciBtZXNzYWdlLiBEZWZhdWx0IG9mIGZhbHNlXG4gICAqIHN1cHByZXNzZXMgc3RhY2sgdHJhY2UgaW4gdGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqXG4gICAqICAgICBjaGFpLmNvbmZpZy5pbmNsdWRlU3RhY2sgPSB0cnVlOyAgLy8gZW5hYmxlIHN0YWNrIG9uIGVycm9yXG4gICAqXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn1cbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgaW5jbHVkZVN0YWNrOiBmYWxzZSxcblxuICAvKipcbiAgICogIyMjIGNvbmZpZy5zaG93RGlmZlxuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgaW5mbHVlbmNlcyB3aGV0aGVyIG9yIG5vdFxuICAgKiB0aGUgYHNob3dEaWZmYCBmbGFnIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgdGhyb3duXG4gICAqIEFzc2VydGlvbkVycm9ycy4gYGZhbHNlYCB3aWxsIGFsd2F5cyBiZSBgZmFsc2VgOyBgdHJ1ZWBcbiAgICogd2lsbCBiZSB0cnVlIHdoZW4gdGhlIGFzc2VydGlvbiBoYXMgcmVxdWVzdGVkIGEgZGlmZlxuICAgKiBiZSBzaG93bi5cbiAgICpcbiAgICogQHBhcmFtIHtCb29sZWFufVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBzaG93RGlmZjogdHJ1ZSxcblxuICAvKipcbiAgICogIyMjIGNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZFxuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgc2V0cyBsZW5ndGggdGhyZXNob2xkIGZvciBhY3R1YWwgYW5kXG4gICAqIGV4cGVjdGVkIHZhbHVlcyBpbiBhc3NlcnRpb24gZXJyb3JzLiBJZiB0aGlzIHRocmVzaG9sZCBpcyBleGNlZWRlZCwgZm9yXG4gICAqIGV4YW1wbGUgZm9yIGxhcmdlIGRhdGEgc3RydWN0dXJlcywgdGhlIHZhbHVlIGlzIHJlcGxhY2VkIHdpdGggc29tZXRoaW5nXG4gICAqIGxpa2UgYFsgQXJyYXkoMykgXWAgb3IgYHsgT2JqZWN0IChwcm9wMSwgcHJvcDIpIH1gLlxuICAgKlxuICAgKiBTZXQgaXQgdG8gemVybyBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIHRydW5jYXRpbmcgYWx0b2dldGhlci5cbiAgICpcbiAgICogVGhpcyBpcyBlc3BlY2lhbGx5IHVzZXJmdWwgd2hlbiBkb2luZyBhc3NlcnRpb25zIG9uIGFycmF5czogaGF2aW5nIHRoaXNcbiAgICogc2V0IHRvIGEgcmVhc29uYWJsZSBsYXJnZSB2YWx1ZSBtYWtlcyB0aGUgZmFpbHVyZSBtZXNzYWdlcyByZWFkaWx5XG4gICAqIGluc3BlY3RhYmxlLlxuICAgKlxuICAgKiAgICAgY2hhaS5jb25maWcudHJ1bmNhdGVUaHJlc2hvbGQgPSAwOyAgLy8gZGlzYWJsZSB0cnVuY2F0aW5nXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICB0cnVuY2F0ZVRocmVzaG9sZDogNDAsXG5cbiAgLyoqXG4gICAqICMjIyBjb25maWcudXNlUHJveHlcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGRlZmluZXMgaWYgY2hhaSB3aWxsIHVzZSBhIFByb3h5IHRvIHRocm93XG4gICAqIGFuIGVycm9yIHdoZW4gYSBub24tZXhpc3RlbnQgcHJvcGVydHkgaXMgcmVhZCwgd2hpY2ggcHJvdGVjdHMgdXNlcnNcbiAgICogZnJvbSB0eXBvcyB3aGVuIHVzaW5nIHByb3BlcnR5LWJhc2VkIGFzc2VydGlvbnMuXG4gICAqXG4gICAqIFNldCBpdCB0byBmYWxzZSBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS5cbiAgICpcbiAgICogICAgIGNoYWkuY29uZmlnLnVzZVByb3h5ID0gZmFsc2U7ICAvLyBkaXNhYmxlIHVzZSBvZiBQcm94eVxuICAgKlxuICAgKiBUaGlzIGZlYXR1cmUgaXMgYXV0b21hdGljYWxseSBkaXNhYmxlZCByZWdhcmRsZXNzIG9mIHRoaXMgY29uZmlnIHZhbHVlXG4gICAqIGluIGVudmlyb25tZW50cyB0aGF0IGRvbid0IHN1cHBvcnQgcHJveGllcy5cbiAgICpcbiAgICogQHBhcmFtIHtCb29sZWFufVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICB1c2VQcm94eTogdHJ1ZSxcblxuICAvKipcbiAgICogIyMjIGNvbmZpZy5wcm94eUV4Y2x1ZGVkS2V5c1xuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgZGVmaW5lcyB3aGljaCBwcm9wZXJ0aWVzIHNob3VsZCBiZSBpZ25vcmVkXG4gICAqIGluc3RlYWQgb2YgdGhyb3dpbmcgYW4gZXJyb3IgaWYgdGhleSBkbyBub3QgZXhpc3Qgb24gdGhlIGFzc2VydGlvbi5cbiAgICogVGhpcyBpcyBvbmx5IGFwcGxpZWQgaWYgdGhlIGVudmlyb25tZW50IENoYWkgaXMgcnVubmluZyBpbiBzdXBwb3J0cyBwcm94aWVzIGFuZFxuICAgKiBpZiB0aGUgYHVzZVByb3h5YCBjb25maWd1cmF0aW9uIHNldHRpbmcgaXMgZW5hYmxlZC5cbiAgICogQnkgZGVmYXVsdCwgYHRoZW5gIGFuZCBgaW5zcGVjdGAgd2lsbCBub3QgdGhyb3cgYW4gZXJyb3IgaWYgdGhleSBkbyBub3QgZXhpc3Qgb24gdGhlXG4gICAqIGFzc2VydGlvbiBvYmplY3QgYmVjYXVzZSB0aGUgYC5pbnNwZWN0YCBwcm9wZXJ0eSBpcyByZWFkIGJ5IGB1dGlsLmluc3BlY3RgIChmb3IgZXhhbXBsZSwgd2hlblxuICAgKiB1c2luZyBgY29uc29sZS5sb2dgIG9uIHRoZSBhc3NlcnRpb24gb2JqZWN0KSBhbmQgYC50aGVuYCBpcyBuZWNlc3NhcnkgZm9yIHByb21pc2UgdHlwZS1jaGVja2luZy5cbiAgICpcbiAgICogICAgIC8vIEJ5IGRlZmF1bHQgdGhlc2Uga2V5cyB3aWxsIG5vdCB0aHJvdyBhbiBlcnJvciBpZiB0aGV5IGRvIG5vdCBleGlzdCBvbiB0aGUgYXNzZXJ0aW9uIG9iamVjdFxuICAgKiAgICAgY2hhaS5jb25maWcucHJveHlFeGNsdWRlZEtleXMgPSBbJ3RoZW4nLCAnaW5zcGVjdCddO1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBwcm94eUV4Y2x1ZGVkS2V5czogWyd0aGVuJywgJ2NhdGNoJywgJ2luc3BlY3QnLCAndG9KU09OJ10sXG5cbiAgLyoqXG4gICAqICMjIyBjb25maWcuZGVlcEVxdWFsXG4gICAqXG4gICAqIFVzZXIgY29uZmlndXJhYmxlIHByb3BlcnR5LCBkZWZpbmVzIHdoaWNoIGEgY3VzdG9tIGZ1bmN0aW9uIHRvIHVzZSBmb3IgZGVlcEVxdWFsXG4gICAqIGNvbXBhcmlzb25zLlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgZnVuY3Rpb24gdXNlZCBpcyB0aGUgb25lIGZyb20gdGhlIGBkZWVwLWVxbGAgcGFja2FnZSB3aXRob3V0IGN1c3RvbSBjb21wYXJhdG9yLlxuICAgKlxuICAgKiAgICAgLy8gdXNlIGEgY3VzdG9tIGNvbXBhcmF0b3JcbiAgICogICAgIGNoYWkuY29uZmlnLmRlZXBFcXVhbCA9IChleHBlY3RlZCwgYWN0dWFsKSA9PiB7XG4gICAqICAgICAgICByZXR1cm4gY2hhaS51dGlsLmVxbChleHBlY3RlZCwgYWN0dWFsLCB7XG4gICAqICAgICAgICAgICBjb21wYXJhdG9yOiAoZXhwZWN0ZWQsIGFjdHVhbCkgPT4ge1xuICAgKiAgICAgICAgICAgICAgLy8gZm9yIG5vbiBudW1iZXIgY29tcGFyaXNvbiwgdXNlIHRoZSBkZWZhdWx0IGJlaGF2aW9yXG4gICAqICAgICAgICAgICAgICBpZih0eXBlb2YgZXhwZWN0ZWQgIT09ICdudW1iZXInKSByZXR1cm4gbnVsbDtcbiAgICogICAgICAgICAgICAgIC8vIGFsbG93IGEgZGlmZmVyZW5jZSBvZiAxMCBiZXR3ZWVuIGNvbXBhcmVkIG51bWJlcnNcbiAgICogICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYWN0dWFsID09PSAnbnVtYmVyJyAmJiBNYXRoLmFicyhhY3R1YWwgLSBleHBlY3RlZCkgPCAxMFxuICAgKiAgICAgICAgICAgfVxuICAgKiAgICAgICAgfSlcbiAgICogICAgIH07XG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGRlZXBFcXVhbDogbnVsbFxuXG59O1xuIiwgIi8vIFRoaXMgaXMgKGFsbW9zdCkgZGlyZWN0bHkgZnJvbSBOb2RlLmpzIHV0aWxzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vam95ZW50L25vZGUvYmxvYi9mOGMzMzVkMGNhZjQ3ZjE2ZDMxNDEzZjg5YWEyOGVkYTM4NzhlM2FhL2xpYi91dGlsLmpzXG5cbnZhciBnZXROYW1lID0gcmVxdWlyZSgnZ2V0LWZ1bmMtbmFtZScpO1xudmFyIGxvdXBlID0gcmVxdWlyZSgnbG91cGUnKTtcbnZhciBjb25maWcgPSByZXF1aXJlKCcuLi9jb25maWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnNwZWN0O1xuXG4vKipcbiAqICMjIyAuaW5zcGVjdChvYmosIFtzaG93SGlkZGVuXSwgW2RlcHRoXSwgW2NvbG9yc10pXG4gKlxuICogRWNob2VzIHRoZSB2YWx1ZSBvZiBhIHZhbHVlLiBUcmllcyB0byBwcmludCB0aGUgdmFsdWUgb3V0XG4gKiBpbiB0aGUgYmVzdCB3YXkgcG9zc2libGUgZ2l2ZW4gdGhlIGRpZmZlcmVudCB0eXBlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gcHJpbnQgb3V0LlxuICogQHBhcmFtIHtCb29sZWFufSBzaG93SGlkZGVuIEZsYWcgdGhhdCBzaG93cyBoaWRkZW4gKG5vdCBlbnVtZXJhYmxlKVxuICogICAgcHJvcGVydGllcyBvZiBvYmplY3RzLiBEZWZhdWx0IGlzIGZhbHNlLlxuICogQHBhcmFtIHtOdW1iZXJ9IGRlcHRoIERlcHRoIGluIHdoaWNoIHRvIGRlc2NlbmQgaW4gb2JqZWN0LiBEZWZhdWx0IGlzIDIuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGNvbG9ycyBGbGFnIHRvIHR1cm4gb24gQU5TSSBlc2NhcGUgY29kZXMgdG8gY29sb3IgdGhlXG4gKiAgICBvdXRwdXQuIERlZmF1bHQgaXMgZmFsc2UgKG5vIGNvbG9yaW5nKS5cbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIGluc3BlY3RcbiAqL1xuZnVuY3Rpb24gaW5zcGVjdChvYmosIHNob3dIaWRkZW4sIGRlcHRoLCBjb2xvcnMpIHtcbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgY29sb3JzOiBjb2xvcnMsXG4gICAgZGVwdGg6ICh0eXBlb2YgZGVwdGggPT09ICd1bmRlZmluZWQnID8gMiA6IGRlcHRoKSxcbiAgICBzaG93SGlkZGVuOiBzaG93SGlkZGVuLFxuICAgIHRydW5jYXRlOiBjb25maWcudHJ1bmNhdGVUaHJlc2hvbGQgPyBjb25maWcudHJ1bmNhdGVUaHJlc2hvbGQgOiBJbmZpbml0eSxcbiAgfTtcbiAgcmV0dXJuIGxvdXBlLmluc3BlY3Qob2JqLCBvcHRpb25zKTtcbn1cbiIsICIvKiFcbiAqIENoYWkgLSBmbGFnIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKiFcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXNcbiAqL1xuXG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJy4vaW5zcGVjdCcpO1xudmFyIGNvbmZpZyA9IHJlcXVpcmUoJy4uL2NvbmZpZycpO1xuXG4vKipcbiAqICMjIyAub2JqRGlzcGxheShvYmplY3QpXG4gKlxuICogRGV0ZXJtaW5lcyBpZiBhbiBvYmplY3Qgb3IgYW4gYXJyYXkgbWF0Y2hlc1xuICogY3JpdGVyaWEgdG8gYmUgaW5zcGVjdGVkIGluLWxpbmUgZm9yIGVycm9yXG4gKiBtZXNzYWdlcyBvciBzaG91bGQgYmUgdHJ1bmNhdGVkLlxuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IGphdmFzY3JpcHQgb2JqZWN0IHRvIGluc3BlY3RcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHN0cmluZ2lmaWVkIG9iamVjdFxuICogQG5hbWUgb2JqRGlzcGxheVxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG9iakRpc3BsYXkob2JqKSB7XG4gIHZhciBzdHIgPSBpbnNwZWN0KG9iailcbiAgICAsIHR5cGUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKTtcblxuICBpZiAoY29uZmlnLnRydW5jYXRlVGhyZXNob2xkICYmIHN0ci5sZW5ndGggPj0gY29uZmlnLnRydW5jYXRlVGhyZXNob2xkKSB7XG4gICAgaWYgKHR5cGUgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXScpIHtcbiAgICAgIHJldHVybiAhb2JqLm5hbWUgfHwgb2JqLm5hbWUgPT09ICcnXG4gICAgICAgID8gJ1tGdW5jdGlvbl0nXG4gICAgICAgIDogJ1tGdW5jdGlvbjogJyArIG9iai5uYW1lICsgJ10nO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgcmV0dXJuICdbIEFycmF5KCcgKyBvYmoubGVuZ3RoICsgJykgXSc7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopXG4gICAgICAgICwga3N0ciA9IGtleXMubGVuZ3RoID4gMlxuICAgICAgICAgID8ga2V5cy5zcGxpY2UoMCwgMikuam9pbignLCAnKSArICcsIC4uLidcbiAgICAgICAgICA6IGtleXMuam9pbignLCAnKTtcbiAgICAgIHJldHVybiAneyBPYmplY3QgKCcgKyBrc3RyICsgJykgfSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbn07XG4iLCAiLyohXG4gKiBDaGFpIC0gbWVzc2FnZSBjb21wb3NpdGlvbiB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyohXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzXG4gKi9cblxudmFyIGZsYWcgPSByZXF1aXJlKCcuL2ZsYWcnKVxuICAsIGdldEFjdHVhbCA9IHJlcXVpcmUoJy4vZ2V0QWN0dWFsJylcbiAgLCBvYmpEaXNwbGF5ID0gcmVxdWlyZSgnLi9vYmpEaXNwbGF5Jyk7XG5cbi8qKlxuICogIyMjIC5nZXRNZXNzYWdlKG9iamVjdCwgbWVzc2FnZSwgbmVnYXRlTWVzc2FnZSlcbiAqXG4gKiBDb25zdHJ1Y3QgdGhlIGVycm9yIG1lc3NhZ2UgYmFzZWQgb24gZmxhZ3NcbiAqIGFuZCB0ZW1wbGF0ZSB0YWdzLiBUZW1wbGF0ZSB0YWdzIHdpbGwgcmV0dXJuXG4gKiBhIHN0cmluZ2lmaWVkIGluc3BlY3Rpb24gb2YgdGhlIG9iamVjdCByZWZlcmVuY2VkLlxuICpcbiAqIE1lc3NhZ2UgdGVtcGxhdGUgdGFnczpcbiAqIC0gYCN7dGhpc31gIGN1cnJlbnQgYXNzZXJ0ZWQgb2JqZWN0XG4gKiAtIGAje2FjdH1gIGFjdHVhbCB2YWx1ZVxuICogLSBgI3tleHB9YCBleHBlY3RlZCB2YWx1ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgKGNvbnN0cnVjdGVkIEFzc2VydGlvbilcbiAqIEBwYXJhbSB7QXJndW1lbnRzfSBjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUuYXNzZXJ0IGFyZ3VtZW50c1xuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgZ2V0TWVzc2FnZVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldE1lc3NhZ2Uob2JqLCBhcmdzKSB7XG4gIHZhciBuZWdhdGUgPSBmbGFnKG9iaiwgJ25lZ2F0ZScpXG4gICAgLCB2YWwgPSBmbGFnKG9iaiwgJ29iamVjdCcpXG4gICAgLCBleHBlY3RlZCA9IGFyZ3NbM11cbiAgICAsIGFjdHVhbCA9IGdldEFjdHVhbChvYmosIGFyZ3MpXG4gICAgLCBtc2cgPSBuZWdhdGUgPyBhcmdzWzJdIDogYXJnc1sxXVxuICAgICwgZmxhZ01zZyA9IGZsYWcob2JqLCAnbWVzc2FnZScpO1xuXG4gIGlmKHR5cGVvZiBtc2cgPT09IFwiZnVuY3Rpb25cIikgbXNnID0gbXNnKCk7XG4gIG1zZyA9IG1zZyB8fCAnJztcbiAgbXNnID0gbXNnXG4gICAgLnJlcGxhY2UoLyNcXHt0aGlzXFx9L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9iakRpc3BsYXkodmFsKTsgfSlcbiAgICAucmVwbGFjZSgvI1xce2FjdFxcfS9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBvYmpEaXNwbGF5KGFjdHVhbCk7IH0pXG4gICAgLnJlcGxhY2UoLyNcXHtleHBcXH0vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gb2JqRGlzcGxheShleHBlY3RlZCk7IH0pO1xuXG4gIHJldHVybiBmbGFnTXNnID8gZmxhZ01zZyArICc6ICcgKyBtc2cgOiBtc2c7XG59O1xuIiwgIi8qIVxuICogQ2hhaSAtIHRyYW5zZmVyRmxhZ3MgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogIyMjIC50cmFuc2ZlckZsYWdzKGFzc2VydGlvbiwgb2JqZWN0LCBpbmNsdWRlQWxsID0gdHJ1ZSlcbiAqXG4gKiBUcmFuc2ZlciBhbGwgdGhlIGZsYWdzIGZvciBgYXNzZXJ0aW9uYCB0byBgb2JqZWN0YC4gSWZcbiAqIGBpbmNsdWRlQWxsYCBpcyBzZXQgdG8gYGZhbHNlYCwgdGhlbiB0aGUgYmFzZSBDaGFpXG4gKiBhc3NlcnRpb24gZmxhZ3MgKG5hbWVseSBgb2JqZWN0YCwgYHNzZmlgLCBgbG9ja1NzZmlgLFxuICogYW5kIGBtZXNzYWdlYCkgd2lsbCBub3QgYmUgdHJhbnNmZXJyZWQuXG4gKlxuICpcbiAqICAgICB2YXIgbmV3QXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbigpO1xuICogICAgIHV0aWxzLnRyYW5zZmVyRmxhZ3MoYXNzZXJ0aW9uLCBuZXdBc3NlcnRpb24pO1xuICpcbiAqICAgICB2YXIgYW5vdGhlckFzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24obXlPYmopO1xuICogICAgIHV0aWxzLnRyYW5zZmVyRmxhZ3MoYXNzZXJ0aW9uLCBhbm90aGVyQXNzZXJ0aW9uLCBmYWxzZSk7XG4gKlxuICogQHBhcmFtIHtBc3NlcnRpb259IGFzc2VydGlvbiB0aGUgYXNzZXJ0aW9uIHRvIHRyYW5zZmVyIHRoZSBmbGFncyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IHRoZSBvYmplY3QgdG8gdHJhbnNmZXIgdGhlIGZsYWdzIHRvOyB1c3VhbGx5IGEgbmV3IGFzc2VydGlvblxuICogQHBhcmFtIHtCb29sZWFufSBpbmNsdWRlQWxsXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSB0cmFuc2ZlckZsYWdzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRyYW5zZmVyRmxhZ3MoYXNzZXJ0aW9uLCBvYmplY3QsIGluY2x1ZGVBbGwpIHtcbiAgdmFyIGZsYWdzID0gYXNzZXJ0aW9uLl9fZmxhZ3MgfHwgKGFzc2VydGlvbi5fX2ZsYWdzID0gT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbiAgaWYgKCFvYmplY3QuX19mbGFncykge1xuICAgIG9iamVjdC5fX2ZsYWdzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgfVxuXG4gIGluY2x1ZGVBbGwgPSBhcmd1bWVudHMubGVuZ3RoID09PSAzID8gaW5jbHVkZUFsbCA6IHRydWU7XG5cbiAgZm9yICh2YXIgZmxhZyBpbiBmbGFncykge1xuICAgIGlmIChpbmNsdWRlQWxsIHx8XG4gICAgICAgIChmbGFnICE9PSAnb2JqZWN0JyAmJiBmbGFnICE9PSAnc3NmaScgJiYgZmxhZyAhPT0gJ2xvY2tTc2ZpJyAmJiBmbGFnICE9ICdtZXNzYWdlJykpIHtcbiAgICAgIG9iamVjdC5fX2ZsYWdzW2ZsYWddID0gZmxhZ3NbZmxhZ107XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbHMgU3ltYm9sOiBmYWxzZSwgVWludDhBcnJheTogZmFsc2UsIFdlYWtNYXA6IGZhbHNlICovXG4vKiFcbiAqIGRlZXAtZXFsXG4gKiBDb3B5cmlnaHQoYykgMjAxMyBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbnZhciB0eXBlID0gcmVxdWlyZSgndHlwZS1kZXRlY3QnKTtcbmZ1bmN0aW9uIEZha2VNYXAoKSB7XG4gIHRoaXMuX2tleSA9ICdjaGFpL2RlZXAtZXFsX18nICsgTWF0aC5yYW5kb20oKSArIERhdGUubm93KCk7XG59XG5cbkZha2VNYXAucHJvdG90eXBlID0ge1xuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICByZXR1cm4ga2V5W3RoaXMuX2tleV07XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICBpZiAoT2JqZWN0LmlzRXh0ZW5zaWJsZShrZXkpKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoa2V5LCB0aGlzLl9rZXksIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG59O1xuXG52YXIgTWVtb2l6ZU1hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IEZha2VNYXA7XG4vKiFcbiAqIENoZWNrIHRvIHNlZSBpZiB0aGUgTWVtb2l6ZU1hcCBoYXMgcmVjb3JkZWQgYSByZXN1bHQgb2YgdGhlIHR3byBvcGVyYW5kc1xuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IGxlZnRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtNaXhlZH0gcmlnaHRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtNZW1vaXplTWFwfSBtZW1vaXplTWFwXG4gKiBAcmV0dXJucyB7Qm9vbGVhbnxudWxsfSByZXN1bHRcbiovXG5mdW5jdGlvbiBtZW1vaXplQ29tcGFyZShsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG1lbW9pemVNYXApIHtcbiAgLy8gVGVjaG5pY2FsbHksIFdlYWtNYXAga2V5cyBjYW4gKm9ubHkqIGJlIG9iamVjdHMsIG5vdCBwcmltaXRpdmVzLlxuICBpZiAoIW1lbW9pemVNYXAgfHwgaXNQcmltaXRpdmUobGVmdEhhbmRPcGVyYW5kKSB8fCBpc1ByaW1pdGl2ZShyaWdodEhhbmRPcGVyYW5kKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHZhciBsZWZ0SGFuZE1hcCA9IG1lbW9pemVNYXAuZ2V0KGxlZnRIYW5kT3BlcmFuZCk7XG4gIGlmIChsZWZ0SGFuZE1hcCkge1xuICAgIHZhciByZXN1bHQgPSBsZWZ0SGFuZE1hcC5nZXQocmlnaHRIYW5kT3BlcmFuZCk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qIVxuICogU2V0IHRoZSByZXN1bHQgb2YgdGhlIGVxdWFsaXR5IGludG8gdGhlIE1lbW9pemVNYXBcbiAqXG4gKiBAcGFyYW0ge01peGVkfSBsZWZ0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7TWl4ZWR9IHJpZ2h0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7TWVtb2l6ZU1hcH0gbWVtb2l6ZU1hcFxuICogQHBhcmFtIHtCb29sZWFufSByZXN1bHRcbiovXG5mdW5jdGlvbiBtZW1vaXplU2V0KGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgbWVtb2l6ZU1hcCwgcmVzdWx0KSB7XG4gIC8vIFRlY2huaWNhbGx5LCBXZWFrTWFwIGtleXMgY2FuICpvbmx5KiBiZSBvYmplY3RzLCBub3QgcHJpbWl0aXZlcy5cbiAgaWYgKCFtZW1vaXplTWFwIHx8IGlzUHJpbWl0aXZlKGxlZnRIYW5kT3BlcmFuZCkgfHwgaXNQcmltaXRpdmUocmlnaHRIYW5kT3BlcmFuZCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGxlZnRIYW5kTWFwID0gbWVtb2l6ZU1hcC5nZXQobGVmdEhhbmRPcGVyYW5kKTtcbiAgaWYgKGxlZnRIYW5kTWFwKSB7XG4gICAgbGVmdEhhbmRNYXAuc2V0KHJpZ2h0SGFuZE9wZXJhbmQsIHJlc3VsdCk7XG4gIH0gZWxzZSB7XG4gICAgbGVmdEhhbmRNYXAgPSBuZXcgTWVtb2l6ZU1hcCgpO1xuICAgIGxlZnRIYW5kTWFwLnNldChyaWdodEhhbmRPcGVyYW5kLCByZXN1bHQpO1xuICAgIG1lbW9pemVNYXAuc2V0KGxlZnRIYW5kT3BlcmFuZCwgbGVmdEhhbmRNYXApO1xuICB9XG59XG5cbi8qIVxuICogUHJpbWFyeSBFeHBvcnRcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZXBFcXVhbDtcbm1vZHVsZS5leHBvcnRzLk1lbW9pemVNYXAgPSBNZW1vaXplTWFwO1xuXG4vKipcbiAqIEFzc2VydCBkZWVwbHkgbmVzdGVkIHNhbWVWYWx1ZSBlcXVhbGl0eSBiZXR3ZWVuIHR3byBvYmplY3RzIG9mIGFueSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IGxlZnRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtNaXhlZH0gcmlnaHRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAob3B0aW9uYWwpIEFkZGl0aW9uYWwgb3B0aW9uc1xuICogQHBhcmFtIHtBcnJheX0gW29wdGlvbnMuY29tcGFyYXRvcl0gKG9wdGlvbmFsKSBPdmVycmlkZSBkZWZhdWx0IGFsZ29yaXRobSwgZGV0ZXJtaW5pbmcgY3VzdG9tIGVxdWFsaXR5LlxuICogQHBhcmFtIHtBcnJheX0gW29wdGlvbnMubWVtb2l6ZV0gKG9wdGlvbmFsKSBQcm92aWRlIGEgY3VzdG9tIG1lbW9pemF0aW9uIG9iamVjdCB3aGljaCB3aWxsIGNhY2hlIHRoZSByZXN1bHRzIG9mXG4gICAgY29tcGxleCBvYmplY3RzIGZvciBhIHNwZWVkIGJvb3N0LiBCeSBwYXNzaW5nIGBmYWxzZWAgeW91IGNhbiBkaXNhYmxlIG1lbW9pemF0aW9uLCBidXQgdGhpcyB3aWxsIGNhdXNlIGNpcmN1bGFyXG4gICAgcmVmZXJlbmNlcyB0byBibG93IHRoZSBzdGFjay5cbiAqIEByZXR1cm4ge0Jvb2xlYW59IGVxdWFsIG1hdGNoXG4gKi9cbmZ1bmN0aW9uIGRlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpIHtcbiAgLy8gSWYgd2UgaGF2ZSBhIGNvbXBhcmF0b3IsIHdlIGNhbid0IGFzc3VtZSBhbnl0aGluZzsgc28gYmFpbCB0byBpdHMgY2hlY2sgZmlyc3QuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuY29tcGFyYXRvcikge1xuICAgIHJldHVybiBleHRlbnNpdmVEZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgfVxuXG4gIHZhciBzaW1wbGVSZXN1bHQgPSBzaW1wbGVFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpO1xuICBpZiAoc2ltcGxlUmVzdWx0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHNpbXBsZVJlc3VsdDtcbiAgfVxuXG4gIC8vIERlZXBlciBjb21wYXJpc29ucyBhcmUgcHVzaGVkIHRocm91Z2ggdG8gYSBsYXJnZXIgZnVuY3Rpb25cbiAgcmV0dXJuIGV4dGVuc2l2ZURlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIE1hbnkgY29tcGFyaXNvbnMgY2FuIGJlIGNhbmNlbGVkIG91dCBlYXJseSB2aWEgc2ltcGxlIGVxdWFsaXR5IG9yIHByaW1pdGl2ZSBjaGVja3MuXG4gKiBAcGFyYW0ge01peGVkfSBsZWZ0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7TWl4ZWR9IHJpZ2h0SGFuZE9wZXJhbmRcbiAqIEByZXR1cm4ge0Jvb2xlYW58bnVsbH0gZXF1YWwgbWF0Y2hcbiAqL1xuZnVuY3Rpb24gc2ltcGxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKSB7XG4gIC8vIEVxdWFsIHJlZmVyZW5jZXMgKGV4Y2VwdCBmb3IgTnVtYmVycykgY2FuIGJlIHJldHVybmVkIGVhcmx5XG4gIGlmIChsZWZ0SGFuZE9wZXJhbmQgPT09IHJpZ2h0SGFuZE9wZXJhbmQpIHtcbiAgICAvLyBIYW5kbGUgKy0wIGNhc2VzXG4gICAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZCAhPT0gMCB8fCAxIC8gbGVmdEhhbmRPcGVyYW5kID09PSAxIC8gcmlnaHRIYW5kT3BlcmFuZDtcbiAgfVxuXG4gIC8vIGhhbmRsZSBOYU4gY2FzZXNcbiAgaWYgKFxuICAgIGxlZnRIYW5kT3BlcmFuZCAhPT0gbGVmdEhhbmRPcGVyYW5kICYmIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmlnaHRIYW5kT3BlcmFuZCAhPT0gcmlnaHRIYW5kT3BlcmFuZCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIEFueXRoaW5nIHRoYXQgaXMgbm90IGFuICdvYmplY3QnLCBpLmUuIHN5bWJvbHMsIGZ1bmN0aW9ucywgYm9vbGVhbnMsIG51bWJlcnMsXG4gIC8vIHN0cmluZ3MsIGFuZCB1bmRlZmluZWQsIGNhbiBiZSBjb21wYXJlZCBieSByZWZlcmVuY2UuXG4gIGlmIChpc1ByaW1pdGl2ZShsZWZ0SGFuZE9wZXJhbmQpIHx8IGlzUHJpbWl0aXZlKHJpZ2h0SGFuZE9wZXJhbmQpKSB7XG4gICAgLy8gRWFzeSBvdXQgYi9jIGl0IHdvdWxkIGhhdmUgcGFzc2VkIHRoZSBmaXJzdCBlcXVhbGl0eSBjaGVja1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyohXG4gKiBUaGUgbWFpbiBsb2dpYyBvZiB0aGUgYGRlZXBFcXVhbGAgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gbGVmdEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge01peGVkfSByaWdodEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIChvcHRpb25hbCkgQWRkaXRpb25hbCBvcHRpb25zXG4gKiBAcGFyYW0ge0FycmF5fSBbb3B0aW9ucy5jb21wYXJhdG9yXSAob3B0aW9uYWwpIE92ZXJyaWRlIGRlZmF1bHQgYWxnb3JpdGhtLCBkZXRlcm1pbmluZyBjdXN0b20gZXF1YWxpdHkuXG4gKiBAcGFyYW0ge0FycmF5fSBbb3B0aW9ucy5tZW1vaXplXSAob3B0aW9uYWwpIFByb3ZpZGUgYSBjdXN0b20gbWVtb2l6YXRpb24gb2JqZWN0IHdoaWNoIHdpbGwgY2FjaGUgdGhlIHJlc3VsdHMgb2ZcbiAgICBjb21wbGV4IG9iamVjdHMgZm9yIGEgc3BlZWQgYm9vc3QuIEJ5IHBhc3NpbmcgYGZhbHNlYCB5b3UgY2FuIGRpc2FibGUgbWVtb2l6YXRpb24sIGJ1dCB0aGlzIHdpbGwgY2F1c2UgY2lyY3VsYXJcbiAgICByZWZlcmVuY2VzIHRvIGJsb3cgdGhlIHN0YWNrLlxuICogQHJldHVybiB7Qm9vbGVhbn0gZXF1YWwgbWF0Y2hcbiovXG5mdW5jdGlvbiBleHRlbnNpdmVEZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBvcHRpb25zLm1lbW9pemUgPSBvcHRpb25zLm1lbW9pemUgPT09IGZhbHNlID8gZmFsc2UgOiBvcHRpb25zLm1lbW9pemUgfHwgbmV3IE1lbW9pemVNYXAoKTtcbiAgdmFyIGNvbXBhcmF0b3IgPSBvcHRpb25zICYmIG9wdGlvbnMuY29tcGFyYXRvcjtcblxuICAvLyBDaGVjayBpZiBhIG1lbW9pemVkIHJlc3VsdCBleGlzdHMuXG4gIHZhciBtZW1vaXplUmVzdWx0TGVmdCA9IG1lbW9pemVDb21wYXJlKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucy5tZW1vaXplKTtcbiAgaWYgKG1lbW9pemVSZXN1bHRMZWZ0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIG1lbW9pemVSZXN1bHRMZWZ0O1xuICB9XG4gIHZhciBtZW1vaXplUmVzdWx0UmlnaHQgPSBtZW1vaXplQ29tcGFyZShyaWdodEhhbmRPcGVyYW5kLCBsZWZ0SGFuZE9wZXJhbmQsIG9wdGlvbnMubWVtb2l6ZSk7XG4gIGlmIChtZW1vaXplUmVzdWx0UmlnaHQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gbWVtb2l6ZVJlc3VsdFJpZ2h0O1xuICB9XG5cbiAgLy8gSWYgYSBjb21wYXJhdG9yIGlzIHByZXNlbnQsIHVzZSBpdC5cbiAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICB2YXIgY29tcGFyYXRvclJlc3VsdCA9IGNvbXBhcmF0b3IobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKTtcbiAgICAvLyBDb21wYXJhdG9ycyBtYXkgcmV0dXJuIG51bGwsIGluIHdoaWNoIGNhc2Ugd2Ugd2FudCB0byBnbyBiYWNrIHRvIGRlZmF1bHQgYmVoYXZpb3IuXG4gICAgaWYgKGNvbXBhcmF0b3JSZXN1bHQgPT09IGZhbHNlIHx8IGNvbXBhcmF0b3JSZXN1bHQgPT09IHRydWUpIHtcbiAgICAgIG1lbW9pemVTZXQobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUsIGNvbXBhcmF0b3JSZXN1bHQpO1xuICAgICAgcmV0dXJuIGNvbXBhcmF0b3JSZXN1bHQ7XG4gICAgfVxuICAgIC8vIFRvIGFsbG93IGNvbXBhcmF0b3JzIHRvIG92ZXJyaWRlICphbnkqIGJlaGF2aW9yLCB3ZSByYW4gdGhlbSBmaXJzdC4gU2luY2UgaXQgZGlkbid0IGRlY2lkZVxuICAgIC8vIHdoYXQgdG8gZG8sIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHJldHVybiB0aGUgYmFzaWMgdGVzdHMgZmlyc3QgYmVmb3JlIHdlIG1vdmUgb24uXG4gICAgdmFyIHNpbXBsZVJlc3VsdCA9IHNpbXBsZUVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCk7XG4gICAgaWYgKHNpbXBsZVJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgLy8gRG9uJ3QgbWVtb2l6ZSB0aGlzLCBpdCB0YWtlcyBsb25nZXIgdG8gc2V0L3JldHJpZXZlIHRoYW4gdG8ganVzdCBjb21wYXJlLlxuICAgICAgcmV0dXJuIHNpbXBsZVJlc3VsdDtcbiAgICB9XG4gIH1cblxuICB2YXIgbGVmdEhhbmRUeXBlID0gdHlwZShsZWZ0SGFuZE9wZXJhbmQpO1xuICBpZiAobGVmdEhhbmRUeXBlICE9PSB0eXBlKHJpZ2h0SGFuZE9wZXJhbmQpKSB7XG4gICAgbWVtb2l6ZVNldChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMubWVtb2l6ZSwgZmFsc2UpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFRlbXBvcmFyaWx5IHNldCB0aGUgb3BlcmFuZHMgaW4gdGhlIG1lbW9pemUgb2JqZWN0IHRvIHByZXZlbnQgYmxvd2luZyB0aGUgc3RhY2tcbiAgbWVtb2l6ZVNldChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMubWVtb2l6ZSwgdHJ1ZSk7XG5cbiAgdmFyIHJlc3VsdCA9IGV4dGVuc2l2ZURlZXBFcXVhbEJ5VHlwZShsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIGxlZnRIYW5kVHlwZSwgb3B0aW9ucyk7XG4gIG1lbW9pemVTZXQobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGV4dGVuc2l2ZURlZXBFcXVhbEJ5VHlwZShsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIGxlZnRIYW5kVHlwZSwgb3B0aW9ucykge1xuICBzd2l0Y2ggKGxlZnRIYW5kVHlwZSkge1xuICAgIGNhc2UgJ1N0cmluZyc6XG4gICAgY2FzZSAnTnVtYmVyJzpcbiAgICBjYXNlICdCb29sZWFuJzpcbiAgICBjYXNlICdEYXRlJzpcbiAgICAgIC8vIElmIHRoZXNlIHR5cGVzIGFyZSB0aGVpciBpbnN0YW5jZSB0eXBlcyAoZS5nLiBgbmV3IE51bWJlcmApIHRoZW4gcmUtZGVlcEVxdWFsIGFnYWluc3QgdGhlaXIgdmFsdWVzXG4gICAgICByZXR1cm4gZGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZC52YWx1ZU9mKCksIHJpZ2h0SGFuZE9wZXJhbmQudmFsdWVPZigpKTtcbiAgICBjYXNlICdQcm9taXNlJzpcbiAgICBjYXNlICdTeW1ib2wnOlxuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICBjYXNlICdXZWFrTWFwJzpcbiAgICBjYXNlICdXZWFrU2V0JzpcbiAgICAgIHJldHVybiBsZWZ0SGFuZE9wZXJhbmQgPT09IHJpZ2h0SGFuZE9wZXJhbmQ7XG4gICAgY2FzZSAnRXJyb3InOlxuICAgICAgcmV0dXJuIGtleXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIFsgJ25hbWUnLCAnbWVzc2FnZScsICdjb2RlJyBdLCBvcHRpb25zKTtcbiAgICBjYXNlICdBcmd1bWVudHMnOlxuICAgIGNhc2UgJ0ludDhBcnJheSc6XG4gICAgY2FzZSAnVWludDhBcnJheSc6XG4gICAgY2FzZSAnVWludDhDbGFtcGVkQXJyYXknOlxuICAgIGNhc2UgJ0ludDE2QXJyYXknOlxuICAgIGNhc2UgJ1VpbnQxNkFycmF5JzpcbiAgICBjYXNlICdJbnQzMkFycmF5JzpcbiAgICBjYXNlICdVaW50MzJBcnJheSc6XG4gICAgY2FzZSAnRmxvYXQzMkFycmF5JzpcbiAgICBjYXNlICdGbG9hdDY0QXJyYXknOlxuICAgIGNhc2UgJ0FycmF5JzpcbiAgICAgIHJldHVybiBpdGVyYWJsZUVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG4gICAgY2FzZSAnUmVnRXhwJzpcbiAgICAgIHJldHVybiByZWdleHBFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpO1xuICAgIGNhc2UgJ0dlbmVyYXRvcic6XG4gICAgICByZXR1cm4gZ2VuZXJhdG9yRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgICBjYXNlICdEYXRhVmlldyc6XG4gICAgICByZXR1cm4gaXRlcmFibGVFcXVhbChuZXcgVWludDhBcnJheShsZWZ0SGFuZE9wZXJhbmQuYnVmZmVyKSwgbmV3IFVpbnQ4QXJyYXkocmlnaHRIYW5kT3BlcmFuZC5idWZmZXIpLCBvcHRpb25zKTtcbiAgICBjYXNlICdBcnJheUJ1ZmZlcic6XG4gICAgICByZXR1cm4gaXRlcmFibGVFcXVhbChuZXcgVWludDhBcnJheShsZWZ0SGFuZE9wZXJhbmQpLCBuZXcgVWludDhBcnJheShyaWdodEhhbmRPcGVyYW5kKSwgb3B0aW9ucyk7XG4gICAgY2FzZSAnU2V0JzpcbiAgICAgIHJldHVybiBlbnRyaWVzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgICBjYXNlICdNYXAnOlxuICAgICAgcmV0dXJuIGVudHJpZXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpO1xuICAgIGNhc2UgJ1RlbXBvcmFsLlBsYWluRGF0ZSc6XG4gICAgY2FzZSAnVGVtcG9yYWwuUGxhaW5UaW1lJzpcbiAgICBjYXNlICdUZW1wb3JhbC5QbGFpbkRhdGVUaW1lJzpcbiAgICBjYXNlICdUZW1wb3JhbC5JbnN0YW50JzpcbiAgICBjYXNlICdUZW1wb3JhbC5ab25lZERhdGVUaW1lJzpcbiAgICBjYXNlICdUZW1wb3JhbC5QbGFpblllYXJNb250aCc6XG4gICAgY2FzZSAnVGVtcG9yYWwuUGxhaW5Nb250aERheSc6XG4gICAgICByZXR1cm4gbGVmdEhhbmRPcGVyYW5kLmVxdWFscyhyaWdodEhhbmRPcGVyYW5kKTtcbiAgICBjYXNlICdUZW1wb3JhbC5EdXJhdGlvbic6XG4gICAgICByZXR1cm4gbGVmdEhhbmRPcGVyYW5kLnRvdGFsKCduYW5vc2Vjb25kcycpID09PSByaWdodEhhbmRPcGVyYW5kLnRvdGFsKCduYW5vc2Vjb25kcycpO1xuICAgIGNhc2UgJ1RlbXBvcmFsLlRpbWVab25lJzpcbiAgICBjYXNlICdUZW1wb3JhbC5DYWxlbmRhcic6XG4gICAgICByZXR1cm4gbGVmdEhhbmRPcGVyYW5kLnRvU3RyaW5nKCkgPT09IHJpZ2h0SGFuZE9wZXJhbmQudG9TdHJpbmcoKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG9iamVjdEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG4gIH1cbn1cblxuLyohXG4gKiBDb21wYXJlIHR3byBSZWd1bGFyIEV4cHJlc3Npb25zIGZvciBlcXVhbGl0eS5cbiAqXG4gKiBAcGFyYW0ge1JlZ0V4cH0gbGVmdEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge1JlZ0V4cH0gcmlnaHRIYW5kT3BlcmFuZFxuICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gKi9cblxuZnVuY3Rpb24gcmVnZXhwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKSB7XG4gIHJldHVybiBsZWZ0SGFuZE9wZXJhbmQudG9TdHJpbmcoKSA9PT0gcmlnaHRIYW5kT3BlcmFuZC50b1N0cmluZygpO1xufVxuXG4vKiFcbiAqIENvbXBhcmUgdHdvIFNldHMvTWFwcyBmb3IgZXF1YWxpdHkuIEZhc3RlciB0aGFuIG90aGVyIGVxdWFsaXR5IGZ1bmN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge1NldH0gbGVmdEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge1NldH0gcmlnaHRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAoT3B0aW9uYWwpXG4gKiBAcmV0dXJuIHtCb29sZWFufSByZXN1bHRcbiAqL1xuXG5mdW5jdGlvbiBlbnRyaWVzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIC8vIElFMTEgZG9lc24ndCBzdXBwb3J0IFNldCNlbnRyaWVzIG9yIFNldCNAQGl0ZXJhdG9yLCBzbyB3ZSBuZWVkIG1hbnVhbGx5IHBvcHVsYXRlIHVzaW5nIFNldCNmb3JFYWNoXG4gIGlmIChsZWZ0SGFuZE9wZXJhbmQuc2l6ZSAhPT0gcmlnaHRIYW5kT3BlcmFuZC5zaXplKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChsZWZ0SGFuZE9wZXJhbmQuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBsZWZ0SGFuZEl0ZW1zID0gW107XG4gIHZhciByaWdodEhhbmRJdGVtcyA9IFtdO1xuICBsZWZ0SGFuZE9wZXJhbmQuZm9yRWFjaChmdW5jdGlvbiBnYXRoZXJFbnRyaWVzKGtleSwgdmFsdWUpIHtcbiAgICBsZWZ0SGFuZEl0ZW1zLnB1c2goWyBrZXksIHZhbHVlIF0pO1xuICB9KTtcbiAgcmlnaHRIYW5kT3BlcmFuZC5mb3JFYWNoKGZ1bmN0aW9uIGdhdGhlckVudHJpZXMoa2V5LCB2YWx1ZSkge1xuICAgIHJpZ2h0SGFuZEl0ZW1zLnB1c2goWyBrZXksIHZhbHVlIF0pO1xuICB9KTtcbiAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwobGVmdEhhbmRJdGVtcy5zb3J0KCksIHJpZ2h0SGFuZEl0ZW1zLnNvcnQoKSwgb3B0aW9ucyk7XG59XG5cbi8qIVxuICogU2ltcGxlIGVxdWFsaXR5IGZvciBmbGF0IGl0ZXJhYmxlIG9iamVjdHMgc3VjaCBhcyBBcnJheXMsIFR5cGVkQXJyYXlzIG9yIE5vZGUuanMgYnVmZmVycy5cbiAqXG4gKiBAcGFyYW0ge0l0ZXJhYmxlfSBsZWZ0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7SXRlcmFibGV9IHJpZ2h0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gKE9wdGlvbmFsKVxuICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gKi9cblxuZnVuY3Rpb24gaXRlcmFibGVFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpIHtcbiAgdmFyIGxlbmd0aCA9IGxlZnRIYW5kT3BlcmFuZC5sZW5ndGg7XG4gIGlmIChsZW5ndGggIT09IHJpZ2h0SGFuZE9wZXJhbmQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChsZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgaW5kZXggPSAtMTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoZGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZFtpbmRleF0sIHJpZ2h0SGFuZE9wZXJhbmRbaW5kZXhdLCBvcHRpb25zKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qIVxuICogU2ltcGxlIGVxdWFsaXR5IGZvciBnZW5lcmF0b3Igb2JqZWN0cyBzdWNoIGFzIHRob3NlIHJldHVybmVkIGJ5IGdlbmVyYXRvciBmdW5jdGlvbnMuXG4gKlxuICogQHBhcmFtIHtJdGVyYWJsZX0gbGVmdEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge0l0ZXJhYmxlfSByaWdodEhhbmRPcGVyYW5kXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIChPcHRpb25hbClcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICovXG5cbmZ1bmN0aW9uIGdlbmVyYXRvckVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucykge1xuICByZXR1cm4gaXRlcmFibGVFcXVhbChnZXRHZW5lcmF0b3JFbnRyaWVzKGxlZnRIYW5kT3BlcmFuZCksIGdldEdlbmVyYXRvckVudHJpZXMocmlnaHRIYW5kT3BlcmFuZCksIG9wdGlvbnMpO1xufVxuXG4vKiFcbiAqIERldGVybWluZSBpZiB0aGUgZ2l2ZW4gb2JqZWN0IGhhcyBhbiBAQGl0ZXJhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAqIEByZXR1cm4ge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgb2JqZWN0IGhhcyBhbiBAQGl0ZXJhdG9yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBoYXNJdGVyYXRvckZ1bmN0aW9uKHRhcmdldCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgdGFyZ2V0ID09PSAnb2JqZWN0JyAmJlxuICAgIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIHRhcmdldFtTeW1ib2wuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nO1xufVxuXG4vKiFcbiAqIEdldHMgYWxsIGl0ZXJhdG9yIGVudHJpZXMgZnJvbSB0aGUgZ2l2ZW4gT2JqZWN0LiBJZiB0aGUgT2JqZWN0IGhhcyBubyBAQGl0ZXJhdG9yIGZ1bmN0aW9uLCByZXR1cm5zIGFuIGVtcHR5IGFycmF5LlxuICogVGhpcyB3aWxsIGNvbnN1bWUgdGhlIGl0ZXJhdG9yIC0gd2hpY2ggY291bGQgaGF2ZSBzaWRlIGVmZmVjdHMgZGVwZW5kaW5nIG9uIHRoZSBAQGl0ZXJhdG9yIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAqIEByZXR1cm5zIHtBcnJheX0gYW4gYXJyYXkgb2YgZW50cmllcyBmcm9tIHRoZSBAQGl0ZXJhdG9yIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRW50cmllcyh0YXJnZXQpIHtcbiAgaWYgKGhhc0l0ZXJhdG9yRnVuY3Rpb24odGFyZ2V0KSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZ2V0R2VuZXJhdG9yRW50cmllcyh0YXJnZXRbU3ltYm9sLml0ZXJhdG9yXSgpKTtcbiAgICB9IGNhdGNoIChpdGVyYXRvckVycm9yKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG4gIHJldHVybiBbXTtcbn1cblxuLyohXG4gKiBHZXRzIGFsbCBlbnRyaWVzIGZyb20gYSBHZW5lcmF0b3IuIFRoaXMgd2lsbCBjb25zdW1lIHRoZSBnZW5lcmF0b3IgLSB3aGljaCBjb3VsZCBoYXZlIHNpZGUgZWZmZWN0cy5cbiAqXG4gKiBAcGFyYW0ge0dlbmVyYXRvcn0gdGFyZ2V0XG4gKiBAcmV0dXJucyB7QXJyYXl9IGFuIGFycmF5IG9mIGVudHJpZXMgZnJvbSB0aGUgR2VuZXJhdG9yLlxuICovXG5mdW5jdGlvbiBnZXRHZW5lcmF0b3JFbnRyaWVzKGdlbmVyYXRvcikge1xuICB2YXIgZ2VuZXJhdG9yUmVzdWx0ID0gZ2VuZXJhdG9yLm5leHQoKTtcbiAgdmFyIGFjY3VtdWxhdG9yID0gWyBnZW5lcmF0b3JSZXN1bHQudmFsdWUgXTtcbiAgd2hpbGUgKGdlbmVyYXRvclJlc3VsdC5kb25lID09PSBmYWxzZSkge1xuICAgIGdlbmVyYXRvclJlc3VsdCA9IGdlbmVyYXRvci5uZXh0KCk7XG4gICAgYWNjdW11bGF0b3IucHVzaChnZW5lcmF0b3JSZXN1bHQudmFsdWUpO1xuICB9XG4gIHJldHVybiBhY2N1bXVsYXRvcjtcbn1cblxuLyohXG4gKiBHZXRzIGFsbCBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIGtleXMgZnJvbSBhIHRhcmdldC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gKiBAcmV0dXJucyB7QXJyYXl9IGFuIGFycmF5IG9mIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUga2V5cyBmcm9tIHRoZSB0YXJnZXQuXG4gKi9cbmZ1bmN0aW9uIGdldEVudW1lcmFibGVLZXlzKHRhcmdldCkge1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gdGFyZ2V0KSB7XG4gICAga2V5cy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIGdldEVudW1lcmFibGVTeW1ib2xzKHRhcmdldCkge1xuICB2YXIga2V5cyA9IFtdO1xuICB2YXIgYWxsS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxLZXlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIGtleSA9IGFsbEtleXNbaV07XG4gICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpLmVudW1lcmFibGUpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4ga2V5cztcbn1cblxuLyohXG4gKiBEZXRlcm1pbmVzIGlmIHR3byBvYmplY3RzIGhhdmUgbWF0Y2hpbmcgdmFsdWVzLCBnaXZlbiBhIHNldCBvZiBrZXlzLiBEZWZlcnMgdG8gZGVlcEVxdWFsIGZvciB0aGUgZXF1YWxpdHkgY2hlY2sgb2ZcbiAqIGVhY2gga2V5LiBJZiBhbnkgdmFsdWUgb2YgdGhlIGdpdmVuIGtleSBpcyBub3QgZXF1YWwsIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBmYWxzZSAoZWFybHkpLlxuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IGxlZnRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtNaXhlZH0gcmlnaHRIYW5kT3BlcmFuZFxuICogQHBhcmFtIHtBcnJheX0ga2V5cyBBbiBhcnJheSBvZiBrZXlzIHRvIGNvbXBhcmUgdGhlIHZhbHVlcyBvZiBsZWZ0SGFuZE9wZXJhbmQgYW5kIHJpZ2h0SGFuZE9wZXJhbmQgYWdhaW5zdFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAoT3B0aW9uYWwpXG4gKiBAcmV0dXJuIHtCb29sZWFufSByZXN1bHRcbiAqL1xuZnVuY3Rpb24ga2V5c0VxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwga2V5cywgb3B0aW9ucykge1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIGlmIChsZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKGRlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmRba2V5c1tpXV0sIHJpZ2h0SGFuZE9wZXJhbmRba2V5c1tpXV0sIG9wdGlvbnMpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyohXG4gKiBSZWN1cnNpdmVseSBjaGVjayB0aGUgZXF1YWxpdHkgb2YgdHdvIE9iamVjdHMuIE9uY2UgYmFzaWMgc2FtZW5lc3MgaGFzIGJlZW4gZXN0YWJsaXNoZWQgaXQgd2lsbCBkZWZlciB0byBgZGVlcEVxdWFsYFxuICogZm9yIGVhY2ggZW51bWVyYWJsZSBrZXkgaW4gdGhlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge01peGVkfSBsZWZ0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7TWl4ZWR9IHJpZ2h0SGFuZE9wZXJhbmRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gKE9wdGlvbmFsKVxuICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIG9iamVjdEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucykge1xuICB2YXIgbGVmdEhhbmRLZXlzID0gZ2V0RW51bWVyYWJsZUtleXMobGVmdEhhbmRPcGVyYW5kKTtcbiAgdmFyIHJpZ2h0SGFuZEtleXMgPSBnZXRFbnVtZXJhYmxlS2V5cyhyaWdodEhhbmRPcGVyYW5kKTtcbiAgdmFyIGxlZnRIYW5kU3ltYm9scyA9IGdldEVudW1lcmFibGVTeW1ib2xzKGxlZnRIYW5kT3BlcmFuZCk7XG4gIHZhciByaWdodEhhbmRTeW1ib2xzID0gZ2V0RW51bWVyYWJsZVN5bWJvbHMocmlnaHRIYW5kT3BlcmFuZCk7XG4gIGxlZnRIYW5kS2V5cyA9IGxlZnRIYW5kS2V5cy5jb25jYXQobGVmdEhhbmRTeW1ib2xzKTtcbiAgcmlnaHRIYW5kS2V5cyA9IHJpZ2h0SGFuZEtleXMuY29uY2F0KHJpZ2h0SGFuZFN5bWJvbHMpO1xuXG4gIGlmIChsZWZ0SGFuZEtleXMubGVuZ3RoICYmIGxlZnRIYW5kS2V5cy5sZW5ndGggPT09IHJpZ2h0SGFuZEtleXMubGVuZ3RoKSB7XG4gICAgaWYgKGl0ZXJhYmxlRXF1YWwobWFwU3ltYm9scyhsZWZ0SGFuZEtleXMpLnNvcnQoKSwgbWFwU3ltYm9scyhyaWdodEhhbmRLZXlzKS5zb3J0KCkpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4ga2V5c0VxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgbGVmdEhhbmRLZXlzLCBvcHRpb25zKTtcbiAgfVxuXG4gIHZhciBsZWZ0SGFuZEVudHJpZXMgPSBnZXRJdGVyYXRvckVudHJpZXMobGVmdEhhbmRPcGVyYW5kKTtcbiAgdmFyIHJpZ2h0SGFuZEVudHJpZXMgPSBnZXRJdGVyYXRvckVudHJpZXMocmlnaHRIYW5kT3BlcmFuZCk7XG4gIGlmIChsZWZ0SGFuZEVudHJpZXMubGVuZ3RoICYmIGxlZnRIYW5kRW50cmllcy5sZW5ndGggPT09IHJpZ2h0SGFuZEVudHJpZXMubGVuZ3RoKSB7XG4gICAgbGVmdEhhbmRFbnRyaWVzLnNvcnQoKTtcbiAgICByaWdodEhhbmRFbnRyaWVzLnNvcnQoKTtcbiAgICByZXR1cm4gaXRlcmFibGVFcXVhbChsZWZ0SGFuZEVudHJpZXMsIHJpZ2h0SGFuZEVudHJpZXMsIG9wdGlvbnMpO1xuICB9XG5cbiAgaWYgKGxlZnRIYW5kS2V5cy5sZW5ndGggPT09IDAgJiZcbiAgICAgIGxlZnRIYW5kRW50cmllcy5sZW5ndGggPT09IDAgJiZcbiAgICAgIHJpZ2h0SGFuZEtleXMubGVuZ3RoID09PSAwICYmXG4gICAgICByaWdodEhhbmRFbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKiFcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgYSBwcmltaXRpdmUuXG4gKlxuICogVGhpcyBpbnRlbnRpb25hbGx5IHJldHVybnMgdHJ1ZSBmb3IgYWxsIG9iamVjdHMgdGhhdCBjYW4gYmUgY29tcGFyZWQgYnkgcmVmZXJlbmNlLFxuICogaW5jbHVkaW5nIGZ1bmN0aW9ucyBhbmQgc3ltYm9scy5cbiAqXG4gKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnO1xufVxuXG5mdW5jdGlvbiBtYXBTeW1ib2xzKGFycikge1xuICByZXR1cm4gYXJyLm1hcChmdW5jdGlvbiBtYXBTeW1ib2woZW50cnkpIHtcbiAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3ltYm9sJykge1xuICAgICAgcmV0dXJuIGVudHJ5LnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudHJ5O1xuICB9KTtcbn1cbiIsICJ2YXIgY29uZmlnID0gcmVxdWlyZSgnLi4vY29uZmlnJyk7XG5cbi8qIVxuICogQ2hhaSAtIGlzUHJveHlFbmFibGVkIGhlbHBlclxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogIyMjIC5pc1Byb3h5RW5hYmxlZCgpXG4gKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIENoYWkncyBwcm94eSBwcm90ZWN0aW9uIGZlYXR1cmUgaXMgZW5hYmxlZC4gSWZcbiAqIHByb3hpZXMgYXJlIHVuc3VwcG9ydGVkIG9yIGRpc2FibGVkIHZpYSB0aGUgdXNlcidzIENoYWkgY29uZmlnLCB0aGVuIHJldHVyblxuICogZmFsc2UuIE90aGVyd2lzZSwgcmV0dXJuIHRydWUuXG4gKlxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgaXNQcm94eUVuYWJsZWRcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJveHlFbmFibGVkKCkge1xuICByZXR1cm4gY29uZmlnLnVzZVByb3h5ICYmXG4gICAgdHlwZW9mIFByb3h5ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBSZWZsZWN0ICE9PSAndW5kZWZpbmVkJztcbn07XG4iLCAiLyohXG4gKiBDaGFpIC0gYWRkUHJvcGVydHkgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbnZhciBjaGFpID0gcmVxdWlyZSgnLi4vLi4vY2hhaScpO1xudmFyIGZsYWcgPSByZXF1aXJlKCcuL2ZsYWcnKTtcbnZhciBpc1Byb3h5RW5hYmxlZCA9IHJlcXVpcmUoJy4vaXNQcm94eUVuYWJsZWQnKTtcbnZhciB0cmFuc2ZlckZsYWdzID0gcmVxdWlyZSgnLi90cmFuc2ZlckZsYWdzJyk7XG5cbi8qKlxuICogIyMjIC5hZGRQcm9wZXJ0eShjdHgsIG5hbWUsIGdldHRlcilcbiAqXG4gKiBBZGRzIGEgcHJvcGVydHkgdG8gdGhlIHByb3RvdHlwZSBvZiBhbiBvYmplY3QuXG4gKlxuICogICAgIHV0aWxzLmFkZFByb3BlcnR5KGNoYWkuQXNzZXJ0aW9uLnByb3RvdHlwZSwgJ2ZvbycsIGZ1bmN0aW9uICgpIHtcbiAqICAgICAgIHZhciBvYmogPSB1dGlscy5mbGFnKHRoaXMsICdvYmplY3QnKTtcbiAqICAgICAgIG5ldyBjaGFpLkFzc2VydGlvbihvYmopLnRvLmJlLmluc3RhbmNlb2YoRm9vKTtcbiAqICAgICB9KTtcbiAqXG4gKiBDYW4gYWxzbyBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIGBjaGFpLkFzc2VydGlvbmAuXG4gKlxuICogICAgIGNoYWkuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdmb28nLCBmbik7XG4gKlxuICogVGhlbiBjYW4gYmUgdXNlZCBhcyBhbnkgb3RoZXIgYXNzZXJ0aW9uLlxuICpcbiAqICAgICBleHBlY3QobXlGb28pLnRvLmJlLmZvbztcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY3R4IG9iamVjdCB0byB3aGljaCB0aGUgcHJvcGVydHkgaXMgYWRkZWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG9mIHByb3BlcnR5IHRvIGFkZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2V0dGVyIGZ1bmN0aW9uIHRvIGJlIHVzZWQgZm9yIG5hbWVcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIGFkZFByb3BlcnR5XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWRkUHJvcGVydHkoY3R4LCBuYW1lLCBnZXR0ZXIpIHtcbiAgZ2V0dGVyID0gZ2V0dGVyID09PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAoKSB7fSA6IGdldHRlcjtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3R4LCBuYW1lLFxuICAgIHsgZ2V0OiBmdW5jdGlvbiBwcm9wZXJ0eUdldHRlcigpIHtcbiAgICAgICAgLy8gU2V0dGluZyB0aGUgYHNzZmlgIGZsYWcgdG8gYHByb3BlcnR5R2V0dGVyYCBjYXVzZXMgdGhpcyBmdW5jdGlvbiB0b1xuICAgICAgICAvLyBiZSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHJlbW92aW5nIGltcGxlbWVudGF0aW9uIGZyYW1lcyBmcm9tIHRoZVxuICAgICAgICAvLyBzdGFjayB0cmFjZSBvZiBhIGZhaWxlZCBhc3NlcnRpb24uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEhvd2V2ZXIsIHdlIG9ubHkgd2FudCB0byB1c2UgdGhpcyBmdW5jdGlvbiBhcyB0aGUgc3RhcnRpbmcgcG9pbnQgaWZcbiAgICAgICAgLy8gdGhlIGBsb2NrU3NmaWAgZmxhZyBpc24ndCBzZXQgYW5kIHByb3h5IHByb3RlY3Rpb24gaXMgZGlzYWJsZWQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHRoZSBgbG9ja1NzZmlgIGZsYWcgaXMgc2V0LCB0aGVuIGVpdGhlciB0aGlzIGFzc2VydGlvbiBoYXMgYmVlblxuICAgICAgICAvLyBvdmVyd3JpdHRlbiBieSBhbm90aGVyIGFzc2VydGlvbiwgb3IgdGhpcyBhc3NlcnRpb24gaXMgYmVpbmcgaW52b2tlZFxuICAgICAgICAvLyBmcm9tIGluc2lkZSBvZiBhbm90aGVyIGFzc2VydGlvbi4gSW4gdGhlIGZpcnN0IGNhc2UsIHRoZSBgc3NmaWAgZmxhZ1xuICAgICAgICAvLyBoYXMgYWxyZWFkeSBiZWVuIHNldCBieSB0aGUgb3ZlcndyaXRpbmcgYXNzZXJ0aW9uLiBJbiB0aGUgc2Vjb25kXG4gICAgICAgIC8vIGNhc2UsIHRoZSBgc3NmaWAgZmxhZyBoYXMgYWxyZWFkeSBiZWVuIHNldCBieSB0aGUgb3V0ZXIgYXNzZXJ0aW9uLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiBwcm94eSBwcm90ZWN0aW9uIGlzIGVuYWJsZWQsIHRoZW4gdGhlIGBzc2ZpYCBmbGFnIGhhcyBhbHJlYWR5IGJlZW5cbiAgICAgICAgLy8gc2V0IGJ5IHRoZSBwcm94eSBnZXR0ZXIuXG4gICAgICAgIGlmICghaXNQcm94eUVuYWJsZWQoKSAmJiAhZmxhZyh0aGlzLCAnbG9ja1NzZmknKSkge1xuICAgICAgICAgIGZsYWcodGhpcywgJ3NzZmknLCBwcm9wZXJ0eUdldHRlcik7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0ID0gZ2V0dGVyLmNhbGwodGhpcyk7XG4gICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuXG4gICAgICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgY2hhaS5Bc3NlcnRpb24oKTtcbiAgICAgICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgICAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICAgICAgfVxuICAgICwgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufTtcbiIsICJ2YXIgZm5MZW5ndGhEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihmdW5jdGlvbiAoKSB7fSwgJ2xlbmd0aCcpO1xuXG4vKiFcbiAqIENoYWkgLSBhZGRMZW5ndGhHdWFyZCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiAjIyMgLmFkZExlbmd0aEd1YXJkKGZuLCBhc3NlcnRpb25OYW1lLCBpc0NoYWluYWJsZSlcbiAqXG4gKiBEZWZpbmUgYGxlbmd0aGAgYXMgYSBnZXR0ZXIgb24gdGhlIGdpdmVuIHVuaW52b2tlZCBtZXRob2QgYXNzZXJ0aW9uLiBUaGVcbiAqIGdldHRlciBhY3RzIGFzIGEgZ3VhcmQgYWdhaW5zdCBjaGFpbmluZyBgbGVuZ3RoYCBkaXJlY3RseSBvZmYgb2YgYW4gdW5pbnZva2VkXG4gKiBtZXRob2QgYXNzZXJ0aW9uLCB3aGljaCBpcyBhIHByb2JsZW0gYmVjYXVzZSBpdCByZWZlcmVuY2VzIGBmdW5jdGlvbmAnc1xuICogYnVpbHQtaW4gYGxlbmd0aGAgcHJvcGVydHkgaW5zdGVhZCBvZiBDaGFpJ3MgYGxlbmd0aGAgYXNzZXJ0aW9uLiBXaGVuIHRoZVxuICogZ2V0dGVyIGNhdGNoZXMgdGhlIHVzZXIgbWFraW5nIHRoaXMgbWlzdGFrZSwgaXQgdGhyb3dzIGFuIGVycm9yIHdpdGggYVxuICogaGVscGZ1bCBtZXNzYWdlLlxuICpcbiAqIFRoZXJlIGFyZSB0d28gd2F5cyBpbiB3aGljaCB0aGlzIG1pc3Rha2UgY2FuIGJlIG1hZGUuIFRoZSBmaXJzdCB3YXkgaXMgYnlcbiAqIGNoYWluaW5nIHRoZSBgbGVuZ3RoYCBhc3NlcnRpb24gZGlyZWN0bHkgb2ZmIG9mIGFuIHVuaW52b2tlZCBjaGFpbmFibGVcbiAqIG1ldGhvZC4gSW4gdGhpcyBjYXNlLCBDaGFpIHN1Z2dlc3RzIHRoYXQgdGhlIHVzZXIgdXNlIGBsZW5ndGhPZmAgaW5zdGVhZC4gVGhlXG4gKiBzZWNvbmQgd2F5IGlzIGJ5IGNoYWluaW5nIHRoZSBgbGVuZ3RoYCBhc3NlcnRpb24gZGlyZWN0bHkgb2ZmIG9mIGFuIHVuaW52b2tlZFxuICogbm9uLWNoYWluYWJsZSBtZXRob2QuIE5vbi1jaGFpbmFibGUgbWV0aG9kcyBtdXN0IGJlIGludm9rZWQgcHJpb3IgdG9cbiAqIGNoYWluaW5nLiBJbiB0aGlzIGNhc2UsIENoYWkgc3VnZ2VzdHMgdGhhdCB0aGUgdXNlciBjb25zdWx0IHRoZSBkb2NzIGZvciB0aGVcbiAqIGdpdmVuIGFzc2VydGlvbi5cbiAqXG4gKiBJZiB0aGUgYGxlbmd0aGAgcHJvcGVydHkgb2YgZnVuY3Rpb25zIGlzIHVuY29uZmlndXJhYmxlLCB0aGVuIHJldHVybiBgZm5gXG4gKiB3aXRob3V0IG1vZGlmaWNhdGlvbi5cbiAqXG4gKiBOb3RlIHRoYXQgaW4gRVM2LCB0aGUgZnVuY3Rpb24ncyBgbGVuZ3RoYCBwcm9wZXJ0eSBpcyBjb25maWd1cmFibGUsIHNvIG9uY2VcbiAqIHN1cHBvcnQgZm9yIGxlZ2FjeSBlbnZpcm9ubWVudHMgaXMgZHJvcHBlZCwgQ2hhaSdzIGBsZW5ndGhgIHByb3BlcnR5IGNhblxuICogcmVwbGFjZSB0aGUgYnVpbHQtaW4gZnVuY3Rpb24ncyBgbGVuZ3RoYCBwcm9wZXJ0eSwgYW5kIHRoaXMgbGVuZ3RoIGd1YXJkIHdpbGxcbiAqIG5vIGxvbmdlciBiZSBuZWNlc3NhcnkuIEluIHRoZSBtZWFuIHRpbWUsIG1haW50YWluaW5nIGNvbnNpc3RlbmN5IGFjcm9zcyBhbGxcbiAqIGVudmlyb25tZW50cyBpcyB0aGUgcHJpb3JpdHkuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7U3RyaW5nfSBhc3NlcnRpb25OYW1lXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGlzQ2hhaW5hYmxlXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBhZGRMZW5ndGhHdWFyZFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWRkTGVuZ3RoR3VhcmQgKGZuLCBhc3NlcnRpb25OYW1lLCBpc0NoYWluYWJsZSkge1xuICBpZiAoIWZuTGVuZ3RoRGVzYy5jb25maWd1cmFibGUpIHJldHVybiBmbjtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICdsZW5ndGgnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoaXNDaGFpbmFibGUpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgQ2hhaSBwcm9wZXJ0eTogJyArIGFzc2VydGlvbk5hbWUgKyAnLmxlbmd0aC4gRHVlJyArXG4gICAgICAgICAgJyB0byBhIGNvbXBhdGliaWxpdHkgaXNzdWUsIFwibGVuZ3RoXCIgY2Fubm90IGRpcmVjdGx5IGZvbGxvdyBcIicgK1xuICAgICAgICAgIGFzc2VydGlvbk5hbWUgKyAnXCIuIFVzZSBcIicgKyBhc3NlcnRpb25OYW1lICsgJy5sZW5ndGhPZlwiIGluc3RlYWQuJyk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IEVycm9yKCdJbnZhbGlkIENoYWkgcHJvcGVydHk6ICcgKyBhc3NlcnRpb25OYW1lICsgJy5sZW5ndGguIFNlZScgK1xuICAgICAgICAnIGRvY3MgZm9yIHByb3BlciB1c2FnZSBvZiBcIicgKyBhc3NlcnRpb25OYW1lICsgJ1wiLicpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGZuO1xufTtcbiIsICIvKiFcbiAqIENoYWkgLSBnZXRQcm9wZXJ0aWVzIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMjIyAuZ2V0UHJvcGVydGllcyhvYmplY3QpXG4gKlxuICogVGhpcyBhbGxvd3MgdGhlIHJldHJpZXZhbCBvZiBwcm9wZXJ0eSBuYW1lcyBvZiBhbiBvYmplY3QsIGVudW1lcmFibGUgb3Igbm90LFxuICogaW5oZXJpdGVkIG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBnZXRQcm9wZXJ0aWVzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UHJvcGVydGllcyhvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7XG5cbiAgZnVuY3Rpb24gYWRkUHJvcGVydHkocHJvcGVydHkpIHtcbiAgICBpZiAocmVzdWx0LmluZGV4T2YocHJvcGVydHkpID09PSAtMSkge1xuICAgICAgcmVzdWx0LnB1c2gocHJvcGVydHkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpO1xuICB3aGlsZSAocHJvdG8gIT09IG51bGwpIHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm90bykuZm9yRWFjaChhZGRQcm9wZXJ0eSk7XG4gICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAidmFyIGNvbmZpZyA9IHJlcXVpcmUoJy4uL2NvbmZpZycpO1xudmFyIGZsYWcgPSByZXF1aXJlKCcuL2ZsYWcnKTtcbnZhciBnZXRQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi9nZXRQcm9wZXJ0aWVzJyk7XG52YXIgaXNQcm94eUVuYWJsZWQgPSByZXF1aXJlKCcuL2lzUHJveHlFbmFibGVkJyk7XG5cbi8qIVxuICogQ2hhaSAtIHByb3hpZnkgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogIyMjIC5wcm94aWZ5KG9iamVjdClcbiAqXG4gKiBSZXR1cm4gYSBwcm94eSBvZiBnaXZlbiBvYmplY3QgdGhhdCB0aHJvd3MgYW4gZXJyb3Igd2hlbiBhIG5vbi1leGlzdGVudFxuICogcHJvcGVydHkgaXMgcmVhZC4gQnkgZGVmYXVsdCwgdGhlIHJvb3QgY2F1c2UgaXMgYXNzdW1lZCB0byBiZSBhIG1pc3NwZWxsZWRcbiAqIHByb3BlcnR5LCBhbmQgdGh1cyBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gb2ZmZXIgYSByZWFzb25hYmxlIHN1Z2dlc3Rpb24gZnJvbVxuICogdGhlIGxpc3Qgb2YgZXhpc3RpbmcgcHJvcGVydGllcy4gSG93ZXZlciwgaWYgYSBub25DaGFpbmFibGVNZXRob2ROYW1lIGlzXG4gKiBwcm92aWRlZCwgdGhlbiB0aGUgcm9vdCBjYXVzZSBpcyBpbnN0ZWFkIGEgZmFpbHVyZSB0byBpbnZva2UgYSBub24tY2hhaW5hYmxlXG4gKiBtZXRob2QgcHJpb3IgdG8gcmVhZGluZyB0aGUgbm9uLWV4aXN0ZW50IHByb3BlcnR5LlxuICpcbiAqIElmIHByb3hpZXMgYXJlIHVuc3VwcG9ydGVkIG9yIGRpc2FibGVkIHZpYSB0aGUgdXNlcidzIENoYWkgY29uZmlnLCB0aGVuXG4gKiByZXR1cm4gb2JqZWN0IHdpdGhvdXQgbW9kaWZpY2F0aW9uLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7U3RyaW5nfSBub25DaGFpbmFibGVNZXRob2ROYW1lXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBwcm94aWZ5XG4gKi9cblxudmFyIGJ1aWx0aW5zID0gWydfX2ZsYWdzJywgJ19fbWV0aG9kcycsICdfb2JqJywgJ2Fzc2VydCddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHByb3hpZnkob2JqLCBub25DaGFpbmFibGVNZXRob2ROYW1lKSB7XG4gIGlmICghaXNQcm94eUVuYWJsZWQoKSkgcmV0dXJuIG9iajtcblxuICByZXR1cm4gbmV3IFByb3h5KG9iaiwge1xuICAgIGdldDogZnVuY3Rpb24gcHJveHlHZXR0ZXIodGFyZ2V0LCBwcm9wZXJ0eSkge1xuICAgICAgLy8gVGhpcyBjaGVjayBpcyBoZXJlIGJlY2F1c2Ugd2Ugc2hvdWxkIG5vdCB0aHJvdyBlcnJvcnMgb24gU3ltYm9sIHByb3BlcnRpZXNcbiAgICAgIC8vIHN1Y2ggYXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AuXG4gICAgICAvLyBUaGUgdmFsdWVzIGZvciB3aGljaCBhbiBlcnJvciBzaG91bGQgYmUgdGhyb3duIGNhbiBiZSBjb25maWd1cmVkIHVzaW5nXG4gICAgICAvLyB0aGUgYGNvbmZpZy5wcm94eUV4Y2x1ZGVkS2V5c2Agc2V0dGluZy5cbiAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgY29uZmlnLnByb3h5RXhjbHVkZWRLZXlzLmluZGV4T2YocHJvcGVydHkpID09PSAtMSAmJlxuICAgICAgICAgICFSZWZsZWN0Lmhhcyh0YXJnZXQsIHByb3BlcnR5KSkge1xuICAgICAgICAvLyBTcGVjaWFsIG1lc3NhZ2UgZm9yIGludmFsaWQgcHJvcGVydHkgYWNjZXNzIG9mIG5vbi1jaGFpbmFibGUgbWV0aG9kcy5cbiAgICAgICAgaWYgKG5vbkNoYWluYWJsZU1ldGhvZE5hbWUpIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcignSW52YWxpZCBDaGFpIHByb3BlcnR5OiAnICsgbm9uQ2hhaW5hYmxlTWV0aG9kTmFtZSArICcuJyArXG4gICAgICAgICAgICBwcm9wZXJ0eSArICcuIFNlZSBkb2NzIGZvciBwcm9wZXIgdXNhZ2Ugb2YgXCInICtcbiAgICAgICAgICAgIG5vbkNoYWluYWJsZU1ldGhvZE5hbWUgKyAnXCIuJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgcmVhc29uYWJseSBjbG9zZSB0byBhbiBleGlzdGluZyBDaGFpIHByb3BlcnR5LFxuICAgICAgICAvLyBzdWdnZXN0IHRoYXQgcHJvcGVydHkgdG8gdGhlIHVzZXIuIE9ubHkgc3VnZ2VzdCBwcm9wZXJ0aWVzIHdpdGggYVxuICAgICAgICAvLyBkaXN0YW5jZSBsZXNzIHRoYW4gNC5cbiAgICAgICAgdmFyIHN1Z2dlc3Rpb24gPSBudWxsO1xuICAgICAgICB2YXIgc3VnZ2VzdGlvbkRpc3RhbmNlID0gNDtcbiAgICAgICAgZ2V0UHJvcGVydGllcyh0YXJnZXQpLmZvckVhY2goZnVuY3Rpb24ocHJvcCkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KHByb3ApICYmXG4gICAgICAgICAgICBidWlsdGlucy5pbmRleE9mKHByb3ApID09PSAtMVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFyIGRpc3QgPSBzdHJpbmdEaXN0YW5jZUNhcHBlZChcbiAgICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICAgIHByb3AsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25EaXN0YW5jZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChkaXN0IDwgc3VnZ2VzdGlvbkRpc3RhbmNlKSB7XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24gPSBwcm9wO1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uRGlzdGFuY2UgPSBkaXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHN1Z2dlc3Rpb24gIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcignSW52YWxpZCBDaGFpIHByb3BlcnR5OiAnICsgcHJvcGVydHkgK1xuICAgICAgICAgICAgJy4gRGlkIHlvdSBtZWFuIFwiJyArIHN1Z2dlc3Rpb24gKyAnXCI/Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgQ2hhaSBwcm9wZXJ0eTogJyArIHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBVc2UgdGhpcyBwcm94eSBnZXR0ZXIgYXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZW1vdmluZyBpbXBsZW1lbnRhdGlvblxuICAgICAgLy8gZnJhbWVzIGZyb20gdGhlIHN0YWNrIHRyYWNlIG9mIGEgZmFpbGVkIGFzc2VydGlvbi4gRm9yIHByb3BlcnR5XG4gICAgICAvLyBhc3NlcnRpb25zLCB0aGlzIHByZXZlbnRzIHRoZSBwcm94eSBnZXR0ZXIgZnJvbSBzaG93aW5nIHVwIGluIHRoZSBzdGFja1xuICAgICAgLy8gdHJhY2Ugc2luY2UgaXQncyBpbnZva2VkIGJlZm9yZSB0aGUgcHJvcGVydHkgZ2V0dGVyLiBGb3IgbWV0aG9kIGFuZFxuICAgICAgLy8gY2hhaW5hYmxlIG1ldGhvZCBhc3NlcnRpb25zLCB0aGlzIGZsYWcgd2lsbCBlbmQgdXAgZ2V0dGluZyBjaGFuZ2VkIHRvXG4gICAgICAvLyB0aGUgbWV0aG9kIHdyYXBwZXIsIHdoaWNoIGlzIGdvb2Qgc2luY2UgdGhpcyBmcmFtZSB3aWxsIG5vIGxvbmdlciBiZSBpblxuICAgICAgLy8gdGhlIHN0YWNrIG9uY2UgdGhlIG1ldGhvZCBpcyBpbnZva2VkLiBOb3RlIHRoYXQgQ2hhaSBidWlsdGluIGFzc2VydGlvblxuICAgICAgLy8gcHJvcGVydGllcyBzdWNoIGFzIGBfX2ZsYWdzYCBhcmUgc2tpcHBlZCBzaW5jZSB0aGlzIGlzIG9ubHkgbWVhbnQgdG9cbiAgICAgIC8vIGNhcHR1cmUgdGhlIHN0YXJ0aW5nIHBvaW50IG9mIGFuIGFzc2VydGlvbi4gVGhpcyBzdGVwIGlzIGFsc28gc2tpcHBlZFxuICAgICAgLy8gaWYgdGhlIGBsb2NrU3NmaWAgZmxhZyBpcyBzZXQsIHRodXMgaW5kaWNhdGluZyB0aGF0IHRoaXMgYXNzZXJ0aW9uIGlzXG4gICAgICAvLyBiZWluZyBjYWxsZWQgZnJvbSB3aXRoaW4gYW5vdGhlciBhc3NlcnRpb24uIEluIHRoYXQgY2FzZSwgdGhlIGBzc2ZpYFxuICAgICAgLy8gZmxhZyBpcyBhbHJlYWR5IHNldCB0byB0aGUgb3V0ZXIgYXNzZXJ0aW9uJ3Mgc3RhcnRpbmcgcG9pbnQuXG4gICAgICBpZiAoYnVpbHRpbnMuaW5kZXhPZihwcm9wZXJ0eSkgPT09IC0xICYmICFmbGFnKHRhcmdldCwgJ2xvY2tTc2ZpJykpIHtcbiAgICAgICAgZmxhZyh0YXJnZXQsICdzc2ZpJywgcHJveHlHZXR0ZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wZXJ0eSk7XG4gICAgfVxuICB9KTtcbn07XG5cbi8qKlxuICogIyBzdHJpbmdEaXN0YW5jZUNhcHBlZChzdHJBLCBzdHJCLCBjYXApXG4gKiBSZXR1cm4gdGhlIExldmVuc2h0ZWluIGRpc3RhbmNlIGJldHdlZW4gdHdvIHN0cmluZ3MsIGJ1dCBubyBtb3JlIHRoYW4gY2FwLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ckFcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJCXG4gKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IG1pbihzdHJpbmcgZGlzdGFuY2UgYmV0d2VlbiBzdHJBIGFuZCBzdHJCLCBjYXApXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBzdHJpbmdEaXN0YW5jZUNhcHBlZChzdHJBLCBzdHJCLCBjYXApIHtcbiAgaWYgKE1hdGguYWJzKHN0ckEubGVuZ3RoIC0gc3RyQi5sZW5ndGgpID49IGNhcCkge1xuICAgIHJldHVybiBjYXA7XG4gIH1cblxuICB2YXIgbWVtbyA9IFtdO1xuICAvLyBgbWVtb2AgaXMgYSB0d28tZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyBkaXN0YW5jZXMuXG4gIC8vIG1lbW9baV1bal0gaXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gc3RyQS5zbGljZSgwLCBpKSBhbmRcbiAgLy8gc3RyQi5zbGljZSgwLCBqKS5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPD0gc3RyQS5sZW5ndGg7IGkrKykge1xuICAgIG1lbW9baV0gPSBBcnJheShzdHJCLmxlbmd0aCArIDEpLmZpbGwoMCk7XG4gICAgbWVtb1tpXVswXSA9IGk7XG4gIH1cbiAgZm9yICh2YXIgaiA9IDA7IGogPCBzdHJCLmxlbmd0aDsgaisrKSB7XG4gICAgbWVtb1swXVtqXSA9IGo7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMTsgaSA8PSBzdHJBLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNoID0gc3RyQS5jaGFyQ29kZUF0KGkgLSAxKTtcbiAgICBmb3IgKHZhciBqID0gMTsgaiA8PSBzdHJCLmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAoTWF0aC5hYnMoaSAtIGopID49IGNhcCkge1xuICAgICAgICBtZW1vW2ldW2pdID0gY2FwO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIG1lbW9baV1bal0gPSBNYXRoLm1pbihcbiAgICAgICAgbWVtb1tpIC0gMV1bal0gKyAxLFxuICAgICAgICBtZW1vW2ldW2ogLSAxXSArIDEsXG4gICAgICAgIG1lbW9baSAtIDFdW2ogLSAxXSArXG4gICAgICAgICAgKGNoID09PSBzdHJCLmNoYXJDb2RlQXQoaiAtIDEpID8gMCA6IDEpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZW1vW3N0ckEubGVuZ3RoXVtzdHJCLmxlbmd0aF07XG59XG4iLCAiLyohXG4gKiBDaGFpIC0gYWRkTWV0aG9kIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG52YXIgYWRkTGVuZ3RoR3VhcmQgPSByZXF1aXJlKCcuL2FkZExlbmd0aEd1YXJkJyk7XG52YXIgY2hhaSA9IHJlcXVpcmUoJy4uLy4uL2NoYWknKTtcbnZhciBmbGFnID0gcmVxdWlyZSgnLi9mbGFnJyk7XG52YXIgcHJveGlmeSA9IHJlcXVpcmUoJy4vcHJveGlmeScpO1xudmFyIHRyYW5zZmVyRmxhZ3MgPSByZXF1aXJlKCcuL3RyYW5zZmVyRmxhZ3MnKTtcblxuLyoqXG4gKiAjIyMgLmFkZE1ldGhvZChjdHgsIG5hbWUsIG1ldGhvZClcbiAqXG4gKiBBZGRzIGEgbWV0aG9kIHRvIHRoZSBwcm90b3R5cGUgb2YgYW4gb2JqZWN0LlxuICpcbiAqICAgICB1dGlscy5hZGRNZXRob2QoY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLCAnZm9vJywgZnVuY3Rpb24gKHN0cikge1xuICogICAgICAgdmFyIG9iaiA9IHV0aWxzLmZsYWcodGhpcywgJ29iamVjdCcpO1xuICogICAgICAgbmV3IGNoYWkuQXNzZXJ0aW9uKG9iaikudG8uYmUuZXF1YWwoc3RyKTtcbiAqICAgICB9KTtcbiAqXG4gKiBDYW4gYWxzbyBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIGBjaGFpLkFzc2VydGlvbmAuXG4gKlxuICogICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZm9vJywgZm4pO1xuICpcbiAqIFRoZW4gY2FuIGJlIHVzZWQgYXMgYW55IG90aGVyIGFzc2VydGlvbi5cbiAqXG4gKiAgICAgZXhwZWN0KGZvb1N0cikudG8uYmUuZm9vKCdiYXInKTtcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY3R4IG9iamVjdCB0byB3aGljaCB0aGUgbWV0aG9kIGlzIGFkZGVkXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiBtZXRob2QgdG8gYWRkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXRob2QgZnVuY3Rpb24gdG8gYmUgdXNlZCBmb3IgbmFtZVxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgYWRkTWV0aG9kXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWRkTWV0aG9kKGN0eCwgbmFtZSwgbWV0aG9kKSB7XG4gIHZhciBtZXRob2RXcmFwcGVyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFNldHRpbmcgdGhlIGBzc2ZpYCBmbGFnIHRvIGBtZXRob2RXcmFwcGVyYCBjYXVzZXMgdGhpcyBmdW5jdGlvbiB0byBiZSB0aGVcbiAgICAvLyBzdGFydGluZyBwb2ludCBmb3IgcmVtb3ZpbmcgaW1wbGVtZW50YXRpb24gZnJhbWVzIGZyb20gdGhlIHN0YWNrIHRyYWNlIG9mXG4gICAgLy8gYSBmYWlsZWQgYXNzZXJ0aW9uLlxuICAgIC8vXG4gICAgLy8gSG93ZXZlciwgd2Ugb25seSB3YW50IHRvIHVzZSB0aGlzIGZ1bmN0aW9uIGFzIHRoZSBzdGFydGluZyBwb2ludCBpZiB0aGVcbiAgICAvLyBgbG9ja1NzZmlgIGZsYWcgaXNuJ3Qgc2V0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlIGBsb2NrU3NmaWAgZmxhZyBpcyBzZXQsIHRoZW4gZWl0aGVyIHRoaXMgYXNzZXJ0aW9uIGhhcyBiZWVuXG4gICAgLy8gb3ZlcndyaXR0ZW4gYnkgYW5vdGhlciBhc3NlcnRpb24sIG9yIHRoaXMgYXNzZXJ0aW9uIGlzIGJlaW5nIGludm9rZWQgZnJvbVxuICAgIC8vIGluc2lkZSBvZiBhbm90aGVyIGFzc2VydGlvbi4gSW4gdGhlIGZpcnN0IGNhc2UsIHRoZSBgc3NmaWAgZmxhZyBoYXNcbiAgICAvLyBhbHJlYWR5IGJlZW4gc2V0IGJ5IHRoZSBvdmVyd3JpdGluZyBhc3NlcnRpb24uIEluIHRoZSBzZWNvbmQgY2FzZSwgdGhlXG4gICAgLy8gYHNzZmlgIGZsYWcgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgdGhlIG91dGVyIGFzc2VydGlvbi5cbiAgICBpZiAoIWZsYWcodGhpcywgJ2xvY2tTc2ZpJykpIHtcbiAgICAgIGZsYWcodGhpcywgJ3NzZmknLCBtZXRob2RXcmFwcGVyKTtcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0ID0gbWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgY2hhaS5Bc3NlcnRpb24oKTtcbiAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgfTtcblxuICBhZGRMZW5ndGhHdWFyZChtZXRob2RXcmFwcGVyLCBuYW1lLCBmYWxzZSk7XG4gIGN0eFtuYW1lXSA9IHByb3hpZnkobWV0aG9kV3JhcHBlciwgbmFtZSk7XG59O1xuIiwgIi8qIVxuICogQ2hhaSAtIG92ZXJ3cml0ZVByb3BlcnR5IHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG52YXIgY2hhaSA9IHJlcXVpcmUoJy4uLy4uL2NoYWknKTtcbnZhciBmbGFnID0gcmVxdWlyZSgnLi9mbGFnJyk7XG52YXIgaXNQcm94eUVuYWJsZWQgPSByZXF1aXJlKCcuL2lzUHJveHlFbmFibGVkJyk7XG52YXIgdHJhbnNmZXJGbGFncyA9IHJlcXVpcmUoJy4vdHJhbnNmZXJGbGFncycpO1xuXG4vKipcbiAqICMjIyAub3ZlcndyaXRlUHJvcGVydHkoY3R4LCBuYW1lLCBmbilcbiAqXG4gKiBPdmVyd3JpdGVzIGFuIGFscmVhZHkgZXhpc3RpbmcgcHJvcGVydHkgZ2V0dGVyIGFuZCBwcm92aWRlc1xuICogYWNjZXNzIHRvIHByZXZpb3VzIHZhbHVlLiBNdXN0IHJldHVybiBmdW5jdGlvbiB0byB1c2UgYXMgZ2V0dGVyLlxuICpcbiAqICAgICB1dGlscy5vdmVyd3JpdGVQcm9wZXJ0eShjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUsICdvaycsIGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAqICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gKiAgICAgICAgIHZhciBvYmogPSB1dGlscy5mbGFnKHRoaXMsICdvYmplY3QnKTtcbiAqICAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEZvbykge1xuICogICAgICAgICAgIG5ldyBjaGFpLkFzc2VydGlvbihvYmoubmFtZSkudG8uZXF1YWwoJ2JhcicpO1xuICogICAgICAgICB9IGVsc2Uge1xuICogICAgICAgICAgIF9zdXBlci5jYWxsKHRoaXMpO1xuICogICAgICAgICB9XG4gKiAgICAgICB9XG4gKiAgICAgfSk7XG4gKlxuICpcbiAqIENhbiBhbHNvIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gYGNoYWkuQXNzZXJ0aW9uYC5cbiAqXG4gKiAgICAgY2hhaS5Bc3NlcnRpb24ub3ZlcndyaXRlUHJvcGVydHkoJ2ZvbycsIGZuKTtcbiAqXG4gKiBUaGVuIGNhbiBiZSB1c2VkIGFzIGFueSBvdGhlciBhc3NlcnRpb24uXG4gKlxuICogICAgIGV4cGVjdChteUZvbykudG8uYmUub2s7XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGN0eCBvYmplY3Qgd2hvc2UgcHJvcGVydHkgaXMgdG8gYmUgb3ZlcndyaXR0ZW5cbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG9mIHByb3BlcnR5IHRvIG92ZXJ3cml0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2V0dGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGdldHRlciBmdW5jdGlvbiB0byBiZSB1c2VkIGZvciBuYW1lXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbmFtZSBvdmVyd3JpdGVQcm9wZXJ0eVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG92ZXJ3cml0ZVByb3BlcnR5KGN0eCwgbmFtZSwgZ2V0dGVyKSB7XG4gIHZhciBfZ2V0ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjdHgsIG5hbWUpXG4gICAgLCBfc3VwZXIgPSBmdW5jdGlvbiAoKSB7fTtcblxuICBpZiAoX2dldCAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgX2dldC5nZXQpXG4gICAgX3N1cGVyID0gX2dldC5nZXRcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3R4LCBuYW1lLFxuICAgIHsgZ2V0OiBmdW5jdGlvbiBvdmVyd3JpdGluZ1Byb3BlcnR5R2V0dGVyKCkge1xuICAgICAgICAvLyBTZXR0aW5nIHRoZSBgc3NmaWAgZmxhZyB0byBgb3ZlcndyaXRpbmdQcm9wZXJ0eUdldHRlcmAgY2F1c2VzIHRoaXNcbiAgICAgICAgLy8gZnVuY3Rpb24gdG8gYmUgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZW1vdmluZyBpbXBsZW1lbnRhdGlvbiBmcmFtZXNcbiAgICAgICAgLy8gZnJvbSB0aGUgc3RhY2sgdHJhY2Ugb2YgYSBmYWlsZWQgYXNzZXJ0aW9uLlxuICAgICAgICAvL1xuICAgICAgICAvLyBIb3dldmVyLCB3ZSBvbmx5IHdhbnQgdG8gdXNlIHRoaXMgZnVuY3Rpb24gYXMgdGhlIHN0YXJ0aW5nIHBvaW50IGlmXG4gICAgICAgIC8vIHRoZSBgbG9ja1NzZmlgIGZsYWcgaXNuJ3Qgc2V0IGFuZCBwcm94eSBwcm90ZWN0aW9uIGlzIGRpc2FibGVkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB0aGUgYGxvY2tTc2ZpYCBmbGFnIGlzIHNldCwgdGhlbiBlaXRoZXIgdGhpcyBhc3NlcnRpb24gaGFzIGJlZW5cbiAgICAgICAgLy8gb3ZlcndyaXR0ZW4gYnkgYW5vdGhlciBhc3NlcnRpb24sIG9yIHRoaXMgYXNzZXJ0aW9uIGlzIGJlaW5nIGludm9rZWRcbiAgICAgICAgLy8gZnJvbSBpbnNpZGUgb2YgYW5vdGhlciBhc3NlcnRpb24uIEluIHRoZSBmaXJzdCBjYXNlLCB0aGUgYHNzZmlgIGZsYWdcbiAgICAgICAgLy8gaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgdGhlIG92ZXJ3cml0aW5nIGFzc2VydGlvbi4gSW4gdGhlIHNlY29uZFxuICAgICAgICAvLyBjYXNlLCB0aGUgYHNzZmlgIGZsYWcgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgdGhlIG91dGVyIGFzc2VydGlvbi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgcHJveHkgcHJvdGVjdGlvbiBpcyBlbmFibGVkLCB0aGVuIHRoZSBgc3NmaWAgZmxhZyBoYXMgYWxyZWFkeSBiZWVuXG4gICAgICAgIC8vIHNldCBieSB0aGUgcHJveHkgZ2V0dGVyLlxuICAgICAgICBpZiAoIWlzUHJveHlFbmFibGVkKCkgJiYgIWZsYWcodGhpcywgJ2xvY2tTc2ZpJykpIHtcbiAgICAgICAgICBmbGFnKHRoaXMsICdzc2ZpJywgb3ZlcndyaXRpbmdQcm9wZXJ0eUdldHRlcik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXR0aW5nIHRoZSBgbG9ja1NzZmlgIGZsYWcgdG8gYHRydWVgIHByZXZlbnRzIHRoZSBvdmVyd3JpdHRlblxuICAgICAgICAvLyBhc3NlcnRpb24gZnJvbSBjaGFuZ2luZyB0aGUgYHNzZmlgIGZsYWcuIEJ5IHRoaXMgcG9pbnQsIHRoZSBgc3NmaWBcbiAgICAgICAgLy8gZmxhZyBpcyBhbHJlYWR5IHNldCB0byB0aGUgY29ycmVjdCBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBhc3NlcnRpb24uXG4gICAgICAgIHZhciBvcmlnTG9ja1NzZmkgPSBmbGFnKHRoaXMsICdsb2NrU3NmaScpO1xuICAgICAgICBmbGFnKHRoaXMsICdsb2NrU3NmaScsIHRydWUpO1xuICAgICAgICB2YXIgcmVzdWx0ID0gZ2V0dGVyKF9zdXBlcikuY2FsbCh0aGlzKTtcbiAgICAgICAgZmxhZyh0aGlzLCAnbG9ja1NzZmknLCBvcmlnTG9ja1NzZmkpO1xuXG4gICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbmV3QXNzZXJ0aW9uID0gbmV3IGNoYWkuQXNzZXJ0aW9uKCk7XG4gICAgICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICAgICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgICAgIH1cbiAgICAsIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn07XG4iLCAiLyohXG4gKiBDaGFpIC0gb3ZlcndyaXRlTWV0aG9kIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG52YXIgYWRkTGVuZ3RoR3VhcmQgPSByZXF1aXJlKCcuL2FkZExlbmd0aEd1YXJkJyk7XG52YXIgY2hhaSA9IHJlcXVpcmUoJy4uLy4uL2NoYWknKTtcbnZhciBmbGFnID0gcmVxdWlyZSgnLi9mbGFnJyk7XG52YXIgcHJveGlmeSA9IHJlcXVpcmUoJy4vcHJveGlmeScpO1xudmFyIHRyYW5zZmVyRmxhZ3MgPSByZXF1aXJlKCcuL3RyYW5zZmVyRmxhZ3MnKTtcblxuLyoqXG4gKiAjIyMgLm92ZXJ3cml0ZU1ldGhvZChjdHgsIG5hbWUsIGZuKVxuICpcbiAqIE92ZXJ3cml0ZXMgYW4gYWxyZWFkeSBleGlzdGluZyBtZXRob2QgYW5kIHByb3ZpZGVzXG4gKiBhY2Nlc3MgdG8gcHJldmlvdXMgZnVuY3Rpb24uIE11c3QgcmV0dXJuIGZ1bmN0aW9uXG4gKiB0byBiZSB1c2VkIGZvciBuYW1lLlxuICpcbiAqICAgICB1dGlscy5vdmVyd3JpdGVNZXRob2QoY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLCAnZXF1YWwnLCBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gKiAgICAgICByZXR1cm4gZnVuY3Rpb24gKHN0cikge1xuICogICAgICAgICB2YXIgb2JqID0gdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG4gKiAgICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBGb28pIHtcbiAqICAgICAgICAgICBuZXcgY2hhaS5Bc3NlcnRpb24ob2JqLnZhbHVlKS50by5lcXVhbChzdHIpO1xuICogICAgICAgICB9IGVsc2Uge1xuICogICAgICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICogICAgICAgICB9XG4gKiAgICAgICB9XG4gKiAgICAgfSk7XG4gKlxuICogQ2FuIGFsc28gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBgY2hhaS5Bc3NlcnRpb25gLlxuICpcbiAqICAgICBjaGFpLkFzc2VydGlvbi5vdmVyd3JpdGVNZXRob2QoJ2ZvbycsIGZuKTtcbiAqXG4gKiBUaGVuIGNhbiBiZSB1c2VkIGFzIGFueSBvdGhlciBhc3NlcnRpb24uXG4gKlxuICogICAgIGV4cGVjdChteUZvbykudG8uZXF1YWwoJ2JhcicpO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjdHggb2JqZWN0IHdob3NlIG1ldGhvZCBpcyB0byBiZSBvdmVyd3JpdHRlblxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgb2YgbWV0aG9kIHRvIG92ZXJ3cml0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gbWV0aG9kIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRvIGJlIHVzZWQgZm9yIG5hbWVcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIG92ZXJ3cml0ZU1ldGhvZFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG92ZXJ3cml0ZU1ldGhvZChjdHgsIG5hbWUsIG1ldGhvZCkge1xuICB2YXIgX21ldGhvZCA9IGN0eFtuYW1lXVxuICAgICwgX3N1cGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG5hbWUgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgfTtcblxuICBpZiAoX21ldGhvZCAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgX21ldGhvZClcbiAgICBfc3VwZXIgPSBfbWV0aG9kO1xuXG4gIHZhciBvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gU2V0dGluZyB0aGUgYHNzZmlgIGZsYWcgdG8gYG92ZXJ3cml0aW5nTWV0aG9kV3JhcHBlcmAgY2F1c2VzIHRoaXNcbiAgICAvLyBmdW5jdGlvbiB0byBiZSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHJlbW92aW5nIGltcGxlbWVudGF0aW9uIGZyYW1lcyBmcm9tXG4gICAgLy8gdGhlIHN0YWNrIHRyYWNlIG9mIGEgZmFpbGVkIGFzc2VydGlvbi5cbiAgICAvL1xuICAgIC8vIEhvd2V2ZXIsIHdlIG9ubHkgd2FudCB0byB1c2UgdGhpcyBmdW5jdGlvbiBhcyB0aGUgc3RhcnRpbmcgcG9pbnQgaWYgdGhlXG4gICAgLy8gYGxvY2tTc2ZpYCBmbGFnIGlzbid0IHNldC5cbiAgICAvL1xuICAgIC8vIElmIHRoZSBgbG9ja1NzZmlgIGZsYWcgaXMgc2V0LCB0aGVuIGVpdGhlciB0aGlzIGFzc2VydGlvbiBoYXMgYmVlblxuICAgIC8vIG92ZXJ3cml0dGVuIGJ5IGFub3RoZXIgYXNzZXJ0aW9uLCBvciB0aGlzIGFzc2VydGlvbiBpcyBiZWluZyBpbnZva2VkIGZyb21cbiAgICAvLyBpbnNpZGUgb2YgYW5vdGhlciBhc3NlcnRpb24uIEluIHRoZSBmaXJzdCBjYXNlLCB0aGUgYHNzZmlgIGZsYWcgaGFzXG4gICAgLy8gYWxyZWFkeSBiZWVuIHNldCBieSB0aGUgb3ZlcndyaXRpbmcgYXNzZXJ0aW9uLiBJbiB0aGUgc2Vjb25kIGNhc2UsIHRoZVxuICAgIC8vIGBzc2ZpYCBmbGFnIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IHRoZSBvdXRlciBhc3NlcnRpb24uXG4gICAgaWYgKCFmbGFnKHRoaXMsICdsb2NrU3NmaScpKSB7XG4gICAgICBmbGFnKHRoaXMsICdzc2ZpJywgb3ZlcndyaXRpbmdNZXRob2RXcmFwcGVyKTtcbiAgICB9XG5cbiAgICAvLyBTZXR0aW5nIHRoZSBgbG9ja1NzZmlgIGZsYWcgdG8gYHRydWVgIHByZXZlbnRzIHRoZSBvdmVyd3JpdHRlbiBhc3NlcnRpb25cbiAgICAvLyBmcm9tIGNoYW5naW5nIHRoZSBgc3NmaWAgZmxhZy4gQnkgdGhpcyBwb2ludCwgdGhlIGBzc2ZpYCBmbGFnIGlzIGFscmVhZHlcbiAgICAvLyBzZXQgdG8gdGhlIGNvcnJlY3Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgYXNzZXJ0aW9uLlxuICAgIHZhciBvcmlnTG9ja1NzZmkgPSBmbGFnKHRoaXMsICdsb2NrU3NmaScpO1xuICAgIGZsYWcodGhpcywgJ2xvY2tTc2ZpJywgdHJ1ZSk7XG4gICAgdmFyIHJlc3VsdCA9IG1ldGhvZChfc3VwZXIpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgZmxhZyh0aGlzLCAnbG9ja1NzZmknLCBvcmlnTG9ja1NzZmkpO1xuXG4gICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgY2hhaS5Bc3NlcnRpb24oKTtcbiAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgfVxuXG4gIGFkZExlbmd0aEd1YXJkKG92ZXJ3cml0aW5nTWV0aG9kV3JhcHBlciwgbmFtZSwgZmFsc2UpO1xuICBjdHhbbmFtZV0gPSBwcm94aWZ5KG92ZXJ3cml0aW5nTWV0aG9kV3JhcHBlciwgbmFtZSk7XG59O1xuIiwgIi8qIVxuICogQ2hhaSAtIGFkZENoYWluaW5nTWV0aG9kIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKiFcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXNcbiAqL1xuXG52YXIgYWRkTGVuZ3RoR3VhcmQgPSByZXF1aXJlKCcuL2FkZExlbmd0aEd1YXJkJyk7XG52YXIgY2hhaSA9IHJlcXVpcmUoJy4uLy4uL2NoYWknKTtcbnZhciBmbGFnID0gcmVxdWlyZSgnLi9mbGFnJyk7XG52YXIgcHJveGlmeSA9IHJlcXVpcmUoJy4vcHJveGlmeScpO1xudmFyIHRyYW5zZmVyRmxhZ3MgPSByZXF1aXJlKCcuL3RyYW5zZmVyRmxhZ3MnKTtcblxuLyohXG4gKiBNb2R1bGUgdmFyaWFibGVzXG4gKi9cblxuLy8gQ2hlY2sgd2hldGhlciBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBpcyBzdXBwb3J0ZWRcbnZhciBjYW5TZXRQcm90b3R5cGUgPSB0eXBlb2YgT2JqZWN0LnNldFByb3RvdHlwZU9mID09PSAnZnVuY3Rpb24nO1xuXG4vLyBXaXRob3V0IGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIHN1cHBvcnQsIHRoaXMgbW9kdWxlIHdpbGwgbmVlZCB0byBhZGQgcHJvcGVydGllcyB0byBhIGZ1bmN0aW9uLlxuLy8gSG93ZXZlciwgc29tZSBvZiBmdW5jdGlvbnMnIG93biBwcm9wcyBhcmUgbm90IGNvbmZpZ3VyYWJsZSBhbmQgc2hvdWxkIGJlIHNraXBwZWQuXG52YXIgdGVzdEZuID0gZnVuY3Rpb24oKSB7fTtcbnZhciBleGNsdWRlTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0Rm4pLmZpbHRlcihmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBwcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGVzdEZuLCBuYW1lKTtcblxuICAvLyBOb3RlOiBQaGFudG9tSlMgMS54IGluY2x1ZGVzIGBjYWxsZWVgIGFzIG9uZSBvZiBgdGVzdEZuYCdzIG93biBwcm9wZXJ0aWVzLFxuICAvLyBidXQgdGhlbiByZXR1cm5zIGB1bmRlZmluZWRgIGFzIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciBgY2FsbGVlYC4gQXMgYVxuICAvLyB3b3JrYXJvdW5kLCB3ZSBwZXJmb3JtIGFuIG90aGVyd2lzZSB1bm5lY2Vzc2FyeSB0eXBlLWNoZWNrIGZvciBgcHJvcERlc2NgLFxuICAvLyBhbmQgdGhlbiBmaWx0ZXIgaXQgb3V0IGlmIGl0J3Mgbm90IGFuIG9iamVjdCBhcyBpdCBzaG91bGQgYmUuXG4gIGlmICh0eXBlb2YgcHJvcERlc2MgIT09ICdvYmplY3QnKVxuICAgIHJldHVybiB0cnVlO1xuXG4gIHJldHVybiAhcHJvcERlc2MuY29uZmlndXJhYmxlO1xufSk7XG5cbi8vIENhY2hlIGBGdW5jdGlvbmAgcHJvcGVydGllc1xudmFyIGNhbGwgID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsXG4gICAgYXBwbHkgPSBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHk7XG5cbi8qKlxuICogIyMjIC5hZGRDaGFpbmFibGVNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QsIGNoYWluaW5nQmVoYXZpb3IpXG4gKlxuICogQWRkcyBhIG1ldGhvZCB0byBhbiBvYmplY3QsIHN1Y2ggdGhhdCB0aGUgbWV0aG9kIGNhbiBhbHNvIGJlIGNoYWluZWQuXG4gKlxuICogICAgIHV0aWxzLmFkZENoYWluYWJsZU1ldGhvZChjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUsICdmb28nLCBmdW5jdGlvbiAoc3RyKSB7XG4gKiAgICAgICB2YXIgb2JqID0gdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG4gKiAgICAgICBuZXcgY2hhaS5Bc3NlcnRpb24ob2JqKS50by5iZS5lcXVhbChzdHIpO1xuICogICAgIH0pO1xuICpcbiAqIENhbiBhbHNvIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gYGNoYWkuQXNzZXJ0aW9uYC5cbiAqXG4gKiAgICAgY2hhaS5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKCdmb28nLCBmbiwgY2hhaW5pbmdCZWhhdmlvcik7XG4gKlxuICogVGhlIHJlc3VsdCBjYW4gdGhlbiBiZSB1c2VkIGFzIGJvdGggYSBtZXRob2QgYXNzZXJ0aW9uLCBleGVjdXRpbmcgYm90aCBgbWV0aG9kYCBhbmRcbiAqIGBjaGFpbmluZ0JlaGF2aW9yYCwgb3IgYXMgYSBsYW5ndWFnZSBjaGFpbiwgd2hpY2ggb25seSBleGVjdXRlcyBgY2hhaW5pbmdCZWhhdmlvcmAuXG4gKlxuICogICAgIGV4cGVjdChmb29TdHIpLnRvLmJlLmZvbygnYmFyJyk7XG4gKiAgICAgZXhwZWN0KGZvb1N0cikudG8uYmUuZm9vLmVxdWFsKCdmb28nKTtcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY3R4IG9iamVjdCB0byB3aGljaCB0aGUgbWV0aG9kIGlzIGFkZGVkXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiBtZXRob2QgdG8gYWRkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXRob2QgZnVuY3Rpb24gdG8gYmUgdXNlZCBmb3IgYG5hbWVgLCB3aGVuIGNhbGxlZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2hhaW5pbmdCZWhhdmlvciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZXZlcnkgdGltZSB0aGUgcHJvcGVydHkgaXMgYWNjZXNzZWRcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIGFkZENoYWluYWJsZU1ldGhvZFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGFkZENoYWluYWJsZU1ldGhvZChjdHgsIG5hbWUsIG1ldGhvZCwgY2hhaW5pbmdCZWhhdmlvcikge1xuICBpZiAodHlwZW9mIGNoYWluaW5nQmVoYXZpb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICBjaGFpbmluZ0JlaGF2aW9yID0gZnVuY3Rpb24gKCkgeyB9O1xuICB9XG5cbiAgdmFyIGNoYWluYWJsZUJlaGF2aW9yID0ge1xuICAgICAgbWV0aG9kOiBtZXRob2RcbiAgICAsIGNoYWluaW5nQmVoYXZpb3I6IGNoYWluaW5nQmVoYXZpb3JcbiAgfTtcblxuICAvLyBzYXZlIHRoZSBtZXRob2RzIHNvIHdlIGNhbiBvdmVyd3JpdGUgdGhlbSBsYXRlciwgaWYgd2UgbmVlZCB0by5cbiAgaWYgKCFjdHguX19tZXRob2RzKSB7XG4gICAgY3R4Ll9fbWV0aG9kcyA9IHt9O1xuICB9XG4gIGN0eC5fX21ldGhvZHNbbmFtZV0gPSBjaGFpbmFibGVCZWhhdmlvcjtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3R4LCBuYW1lLFxuICAgIHsgZ2V0OiBmdW5jdGlvbiBjaGFpbmFibGVNZXRob2RHZXR0ZXIoKSB7XG4gICAgICAgIGNoYWluYWJsZUJlaGF2aW9yLmNoYWluaW5nQmVoYXZpb3IuY2FsbCh0aGlzKTtcblxuICAgICAgICB2YXIgY2hhaW5hYmxlTWV0aG9kV3JhcHBlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIHRoZSBgc3NmaWAgZmxhZyB0byBgY2hhaW5hYmxlTWV0aG9kV3JhcHBlcmAgY2F1c2VzIHRoaXNcbiAgICAgICAgICAvLyBmdW5jdGlvbiB0byBiZSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHJlbW92aW5nIGltcGxlbWVudGF0aW9uXG4gICAgICAgICAgLy8gZnJhbWVzIGZyb20gdGhlIHN0YWNrIHRyYWNlIG9mIGEgZmFpbGVkIGFzc2VydGlvbi5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIEhvd2V2ZXIsIHdlIG9ubHkgd2FudCB0byB1c2UgdGhpcyBmdW5jdGlvbiBhcyB0aGUgc3RhcnRpbmcgcG9pbnQgaWZcbiAgICAgICAgICAvLyB0aGUgYGxvY2tTc2ZpYCBmbGFnIGlzbid0IHNldC5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIElmIHRoZSBgbG9ja1NzZmlgIGZsYWcgaXMgc2V0LCB0aGVuIHRoaXMgYXNzZXJ0aW9uIGlzIGJlaW5nXG4gICAgICAgICAgLy8gaW52b2tlZCBmcm9tIGluc2lkZSBvZiBhbm90aGVyIGFzc2VydGlvbi4gSW4gdGhpcyBjYXNlLCB0aGUgYHNzZmlgXG4gICAgICAgICAgLy8gZmxhZyBoYXMgYWxyZWFkeSBiZWVuIHNldCBieSB0aGUgb3V0ZXIgYXNzZXJ0aW9uLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gTm90ZSB0aGF0IG92ZXJ3cml0aW5nIGEgY2hhaW5hYmxlIG1ldGhvZCBtZXJlbHkgcmVwbGFjZXMgdGhlIHNhdmVkXG4gICAgICAgICAgLy8gbWV0aG9kcyBpbiBgY3R4Ll9fbWV0aG9kc2AgaW5zdGVhZCBvZiBjb21wbGV0ZWx5IHJlcGxhY2luZyB0aGVcbiAgICAgICAgICAvLyBvdmVyd3JpdHRlbiBhc3NlcnRpb24uIFRoZXJlZm9yZSwgYW4gb3ZlcndyaXRpbmcgYXNzZXJ0aW9uIHdvbid0XG4gICAgICAgICAgLy8gc2V0IHRoZSBgc3NmaWAgb3IgYGxvY2tTc2ZpYCBmbGFncy5cbiAgICAgICAgICBpZiAoIWZsYWcodGhpcywgJ2xvY2tTc2ZpJykpIHtcbiAgICAgICAgICAgIGZsYWcodGhpcywgJ3NzZmknLCBjaGFpbmFibGVNZXRob2RXcmFwcGVyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgcmVzdWx0ID0gY2hhaW5hYmxlQmVoYXZpb3IubWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgY2hhaS5Bc3NlcnRpb24oKTtcbiAgICAgICAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgICAgICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgICAgICAgfTtcblxuICAgICAgICBhZGRMZW5ndGhHdWFyZChjaGFpbmFibGVNZXRob2RXcmFwcGVyLCBuYW1lLCB0cnVlKTtcblxuICAgICAgICAvLyBVc2UgYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgaWYgYXZhaWxhYmxlXG4gICAgICAgIGlmIChjYW5TZXRQcm90b3R5cGUpIHtcbiAgICAgICAgICAvLyBJbmhlcml0IGFsbCBwcm9wZXJ0aWVzIGZyb20gdGhlIG9iamVjdCBieSByZXBsYWNpbmcgdGhlIGBGdW5jdGlvbmAgcHJvdG90eXBlXG4gICAgICAgICAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgICAgICAgLy8gUmVzdG9yZSB0aGUgYGNhbGxgIGFuZCBgYXBwbHlgIG1ldGhvZHMgZnJvbSBgRnVuY3Rpb25gXG4gICAgICAgICAgcHJvdG90eXBlLmNhbGwgPSBjYWxsO1xuICAgICAgICAgIHByb3RvdHlwZS5hcHBseSA9IGFwcGx5O1xuICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihjaGFpbmFibGVNZXRob2RXcmFwcGVyLCBwcm90b3R5cGUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE90aGVyd2lzZSwgcmVkZWZpbmUgYWxsIHByb3BlcnRpZXMgKHNsb3chKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgYXNzZXJ0ZXJOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGN0eCk7XG4gICAgICAgICAgYXNzZXJ0ZXJOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChhc3NlcnRlck5hbWUpIHtcbiAgICAgICAgICAgIGlmIChleGNsdWRlTmFtZXMuaW5kZXhPZihhc3NlcnRlck5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBwZCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY3R4LCBhc3NlcnRlck5hbWUpO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNoYWluYWJsZU1ldGhvZFdyYXBwZXIsIGFzc2VydGVyTmFtZSwgcGQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJhbnNmZXJGbGFncyh0aGlzLCBjaGFpbmFibGVNZXRob2RXcmFwcGVyKTtcbiAgICAgICAgcmV0dXJuIHByb3hpZnkoY2hhaW5hYmxlTWV0aG9kV3JhcHBlcik7XG4gICAgICB9XG4gICAgLCBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59O1xuIiwgIi8qIVxuICogQ2hhaSAtIG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxudmFyIGNoYWkgPSByZXF1aXJlKCcuLi8uLi9jaGFpJyk7XG52YXIgdHJhbnNmZXJGbGFncyA9IHJlcXVpcmUoJy4vdHJhbnNmZXJGbGFncycpO1xuXG4vKipcbiAqICMjIyAub3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kKGN0eCwgbmFtZSwgbWV0aG9kLCBjaGFpbmluZ0JlaGF2aW9yKVxuICpcbiAqIE92ZXJ3cml0ZXMgYW4gYWxyZWFkeSBleGlzdGluZyBjaGFpbmFibGUgbWV0aG9kXG4gKiBhbmQgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBwcmV2aW91cyBmdW5jdGlvbiBvclxuICogcHJvcGVydHkuICBNdXN0IHJldHVybiBmdW5jdGlvbnMgdG8gYmUgdXNlZCBmb3JcbiAqIG5hbWUuXG4gKlxuICogICAgIHV0aWxzLm92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZChjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUsICdsZW5ndGhPZicsXG4gKiAgICAgICBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gKiAgICAgICB9XG4gKiAgICAgLCBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gKiAgICAgICB9XG4gKiAgICAgKTtcbiAqXG4gKiBDYW4gYWxzbyBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIGBjaGFpLkFzc2VydGlvbmAuXG4gKlxuICogICAgIGNoYWkuQXNzZXJ0aW9uLm92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCgnZm9vJywgZm4sIGZuKTtcbiAqXG4gKiBUaGVuIGNhbiBiZSB1c2VkIGFzIGFueSBvdGhlciBhc3NlcnRpb24uXG4gKlxuICogICAgIGV4cGVjdChteUZvbykudG8uaGF2ZS5sZW5ndGhPZigzKTtcbiAqICAgICBleHBlY3QobXlGb28pLnRvLmhhdmUubGVuZ3RoT2YuYWJvdmUoMyk7XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGN0eCBvYmplY3Qgd2hvc2UgbWV0aG9kIC8gcHJvcGVydHkgaXMgdG8gYmUgb3ZlcndyaXR0ZW5cbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG9mIG1ldGhvZCAvIHByb3BlcnR5IHRvIG92ZXJ3cml0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gbWV0aG9kIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRvIGJlIHVzZWQgZm9yIG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNoYWluaW5nQmVoYXZpb3IgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdG8gYmUgdXNlZCBmb3IgcHJvcGVydHlcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZChjdHgsIG5hbWUsIG1ldGhvZCwgY2hhaW5pbmdCZWhhdmlvcikge1xuICB2YXIgY2hhaW5hYmxlQmVoYXZpb3IgPSBjdHguX19tZXRob2RzW25hbWVdO1xuXG4gIHZhciBfY2hhaW5pbmdCZWhhdmlvciA9IGNoYWluYWJsZUJlaGF2aW9yLmNoYWluaW5nQmVoYXZpb3I7XG4gIGNoYWluYWJsZUJlaGF2aW9yLmNoYWluaW5nQmVoYXZpb3IgPSBmdW5jdGlvbiBvdmVyd3JpdGluZ0NoYWluYWJsZU1ldGhvZEdldHRlcigpIHtcbiAgICB2YXIgcmVzdWx0ID0gY2hhaW5pbmdCZWhhdmlvcihfY2hhaW5pbmdCZWhhdmlvcikuY2FsbCh0aGlzKTtcbiAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBjaGFpLkFzc2VydGlvbigpO1xuICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICB9O1xuXG4gIHZhciBfbWV0aG9kID0gY2hhaW5hYmxlQmVoYXZpb3IubWV0aG9kO1xuICBjaGFpbmFibGVCZWhhdmlvci5tZXRob2QgPSBmdW5jdGlvbiBvdmVyd3JpdGluZ0NoYWluYWJsZU1ldGhvZFdyYXBwZXIoKSB7XG4gICAgdmFyIHJlc3VsdCA9IG1ldGhvZChfbWV0aG9kKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB2YXIgbmV3QXNzZXJ0aW9uID0gbmV3IGNoYWkuQXNzZXJ0aW9uKCk7XG4gICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gIH07XG59O1xuIiwgIi8qIVxuICogQ2hhaSAtIGNvbXBhcmVCeUluc3BlY3QgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qIVxuICogTW9kdWxlIGRlcGVuZGVuY2llc1xuICovXG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnLi9pbnNwZWN0Jyk7XG5cbi8qKlxuICogIyMjIC5jb21wYXJlQnlJbnNwZWN0KG1peGVkLCBtaXhlZClcbiAqXG4gKiBUbyBiZSB1c2VkIGFzIGEgY29tcGFyZUZ1bmN0aW9uIHdpdGggQXJyYXkucHJvdG90eXBlLnNvcnQuIENvbXBhcmVzIGVsZW1lbnRzXG4gKiB1c2luZyBpbnNwZWN0IGluc3RlYWQgb2YgZGVmYXVsdCBiZWhhdmlvciBvZiB1c2luZyB0b1N0cmluZyBzbyB0aGF0IFN5bWJvbHNcbiAqIGFuZCBvYmplY3RzIHdpdGggaXJyZWd1bGFyL21pc3NpbmcgdG9TdHJpbmcgY2FuIHN0aWxsIGJlIHNvcnRlZCB3aXRob3V0IGFcbiAqIFR5cGVFcnJvci5cbiAqXG4gKiBAcGFyYW0ge01peGVkfSBmaXJzdCBlbGVtZW50IHRvIGNvbXBhcmVcbiAqIEBwYXJhbSB7TWl4ZWR9IHNlY29uZCBlbGVtZW50IHRvIGNvbXBhcmVcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IC0xIGlmICdhJyBzaG91bGQgY29tZSBiZWZvcmUgJ2InOyBvdGhlcndpc2UgMVxuICogQG5hbWUgY29tcGFyZUJ5SW5zcGVjdFxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvbXBhcmVCeUluc3BlY3QoYSwgYikge1xuICByZXR1cm4gaW5zcGVjdChhKSA8IGluc3BlY3QoYikgPyAtMSA6IDE7XG59O1xuIiwgIi8qIVxuICogQ2hhaSAtIGdldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogIyMjIC5nZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzKG9iamVjdClcbiAqXG4gKiBUaGlzIGFsbG93cyB0aGUgcmV0cmlldmFsIG9mIGRpcmVjdGx5LW93bmVkIGVudW1lcmFibGUgcHJvcGVydHkgc3ltYm9scyBvZiBhblxuICogb2JqZWN0LiBUaGlzIGZ1bmN0aW9uIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbiAqIHJldHVybnMgYm90aCBlbnVtZXJhYmxlIGFuZCBub24tZW51bWVyYWJsZSBwcm9wZXJ0eSBzeW1ib2xzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIGdldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHNcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzKG9iaikge1xuICBpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgIT09ICdmdW5jdGlvbicpIHJldHVybiBbXTtcblxuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmopLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBzeW0pLmVudW1lcmFibGU7XG4gIH0pO1xufTtcbiIsICIvKiFcbiAqIENoYWkgLSBnZXRPd25FbnVtZXJhYmxlUHJvcGVydGllcyB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyohXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzXG4gKi9cblxudmFyIGdldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMgPSByZXF1aXJlKCcuL2dldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMnKTtcblxuLyoqXG4gKiAjIyMgLmdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzKG9iamVjdClcbiAqXG4gKiBUaGlzIGFsbG93cyB0aGUgcmV0cmlldmFsIG9mIGRpcmVjdGx5LW93bmVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGFuIG9iamVjdC4gVGhpcyBmdW5jdGlvbiBpcyBuZWNlc3NhcnkgYmVjYXVzZSBPYmplY3Qua2V5cyBvbmx5XG4gKiByZXR1cm5zIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMsIG5vdCBlbnVtZXJhYmxlIHByb3BlcnR5IHN5bWJvbHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHJldHVybnMge0FycmF5fVxuICogQG5hbWVzcGFjZSBVdGlsc1xuICogQG5hbWUgZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXNcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRPd25FbnVtZXJhYmxlUHJvcGVydGllcyhvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikuY29uY2F0KGdldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMob2JqKSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuLyogIVxuICogQ2hhaSAtIGNoZWNrRXJyb3IgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNiBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbnZhciBnZXRGdW5jdGlvbk5hbWUgPSByZXF1aXJlKCdnZXQtZnVuYy1uYW1lJyk7XG4vKipcbiAqICMjIyAuY2hlY2tFcnJvclxuICpcbiAqIENoZWNrcyB0aGF0IGFuIGVycm9yIGNvbmZvcm1zIHRvIGEgZ2l2ZW4gc2V0IG9mIGNyaXRlcmlhIGFuZC9vciByZXRyaWV2ZXMgaW5mb3JtYXRpb24gYWJvdXQgaXQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG4vKipcbiAqICMjIyAuY29tcGF0aWJsZUluc3RhbmNlKHRocm93biwgZXJyb3JMaWtlKVxuICpcbiAqIENoZWNrcyBpZiB0d28gaW5zdGFuY2VzIGFyZSBjb21wYXRpYmxlIChzdHJpY3QgZXF1YWwpLlxuICogUmV0dXJucyBmYWxzZSBpZiBlcnJvckxpa2UgaXMgbm90IGFuIGluc3RhbmNlIG9mIEVycm9yLCBiZWNhdXNlIGluc3RhbmNlc1xuICogY2FuIG9ubHkgYmUgY29tcGF0aWJsZSBpZiB0aGV5J3JlIGJvdGggZXJyb3IgaW5zdGFuY2VzLlxuICpcbiAqIEBuYW1lIGNvbXBhdGlibGVJbnN0YW5jZVxuICogQHBhcmFtIHtFcnJvcn0gdGhyb3duIGVycm9yXG4gKiBAcGFyYW0ge0Vycm9yfEVycm9yQ29uc3RydWN0b3J9IGVycm9yTGlrZSBvYmplY3QgdG8gY29tcGFyZSBhZ2FpbnN0XG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGNvbXBhdGlibGVJbnN0YW5jZSh0aHJvd24sIGVycm9yTGlrZSkge1xuICByZXR1cm4gZXJyb3JMaWtlIGluc3RhbmNlb2YgRXJyb3IgJiYgdGhyb3duID09PSBlcnJvckxpa2U7XG59XG5cbi8qKlxuICogIyMjIC5jb21wYXRpYmxlQ29uc3RydWN0b3IodGhyb3duLCBlcnJvckxpa2UpXG4gKlxuICogQ2hlY2tzIGlmIHR3byBjb25zdHJ1Y3RvcnMgYXJlIGNvbXBhdGlibGUuXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiByZWNlaXZlIGVpdGhlciBhbiBlcnJvciBjb25zdHJ1Y3RvciBvclxuICogYW4gZXJyb3IgaW5zdGFuY2UgYXMgdGhlIGBlcnJvckxpa2VgIGFyZ3VtZW50LlxuICogQ29uc3RydWN0b3JzIGFyZSBjb21wYXRpYmxlIGlmIHRoZXkncmUgdGhlIHNhbWUgb3IgaWYgb25lIGlzXG4gKiBhbiBpbnN0YW5jZSBvZiBhbm90aGVyLlxuICpcbiAqIEBuYW1lIGNvbXBhdGlibGVDb25zdHJ1Y3RvclxuICogQHBhcmFtIHtFcnJvcn0gdGhyb3duIGVycm9yXG4gKiBAcGFyYW0ge0Vycm9yfEVycm9yQ29uc3RydWN0b3J9IGVycm9yTGlrZSBvYmplY3QgdG8gY29tcGFyZSBhZ2FpbnN0XG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGNvbXBhdGlibGVDb25zdHJ1Y3Rvcih0aHJvd24sIGVycm9yTGlrZSkge1xuICBpZiAoZXJyb3JMaWtlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAvLyBJZiBgZXJyb3JMaWtlYCBpcyBhbiBpbnN0YW5jZSBvZiBhbnkgZXJyb3Igd2UgY29tcGFyZSB0aGVpciBjb25zdHJ1Y3RvcnNcbiAgICByZXR1cm4gdGhyb3duLmNvbnN0cnVjdG9yID09PSBlcnJvckxpa2UuY29uc3RydWN0b3IgfHwgdGhyb3duIGluc3RhbmNlb2YgZXJyb3JMaWtlLmNvbnN0cnVjdG9yO1xuICB9IGVsc2UgaWYgKGVycm9yTGlrZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBFcnJvciB8fCBlcnJvckxpa2UgPT09IEVycm9yKSB7XG4gICAgLy8gSWYgYGVycm9yTGlrZWAgaXMgYSBjb25zdHJ1Y3RvciB0aGF0IGluaGVyaXRzIGZyb20gRXJyb3IsIHdlIGNvbXBhcmUgYHRocm93bmAgdG8gYGVycm9yTGlrZWAgZGlyZWN0bHlcbiAgICByZXR1cm4gdGhyb3duLmNvbnN0cnVjdG9yID09PSBlcnJvckxpa2UgfHwgdGhyb3duIGluc3RhbmNlb2YgZXJyb3JMaWtlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqICMjIyAuY29tcGF0aWJsZU1lc3NhZ2UodGhyb3duLCBlcnJNYXRjaGVyKVxuICpcbiAqIENoZWNrcyBpZiBhbiBlcnJvcidzIG1lc3NhZ2UgaXMgY29tcGF0aWJsZSB3aXRoIGEgbWF0Y2hlciAoU3RyaW5nIG9yIFJlZ0V4cCkuXG4gKiBJZiB0aGUgbWVzc2FnZSBjb250YWlucyB0aGUgU3RyaW5nIG9yIHBhc3NlcyB0aGUgUmVnRXhwIHRlc3QsXG4gKiBpdCBpcyBjb25zaWRlcmVkIGNvbXBhdGlibGUuXG4gKlxuICogQG5hbWUgY29tcGF0aWJsZU1lc3NhZ2VcbiAqIEBwYXJhbSB7RXJyb3J9IHRocm93biBlcnJvclxuICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfSBlcnJNYXRjaGVyIHRvIGxvb2sgZm9yIGludG8gdGhlIG1lc3NhZ2VcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gY29tcGF0aWJsZU1lc3NhZ2UodGhyb3duLCBlcnJNYXRjaGVyKSB7XG4gIHZhciBjb21wYXJpc29uU3RyaW5nID0gdHlwZW9mIHRocm93biA9PT0gJ3N0cmluZycgPyB0aHJvd24gOiB0aHJvd24ubWVzc2FnZTtcbiAgaWYgKGVyck1hdGNoZXIgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICByZXR1cm4gZXJyTWF0Y2hlci50ZXN0KGNvbXBhcmlzb25TdHJpbmcpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJNYXRjaGVyID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBjb21wYXJpc29uU3RyaW5nLmluZGV4T2YoZXJyTWF0Y2hlcikgIT09IC0xOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiAjIyMgLmdldENvbnN0cnVjdG9yTmFtZShlcnJvckxpa2UpXG4gKlxuICogR2V0cyB0aGUgY29uc3RydWN0b3IgbmFtZSBmb3IgYW4gRXJyb3IgaW5zdGFuY2Ugb3IgY29uc3RydWN0b3IgaXRzZWxmLlxuICpcbiAqIEBuYW1lIGdldENvbnN0cnVjdG9yTmFtZVxuICogQHBhcmFtIHtFcnJvcnxFcnJvckNvbnN0cnVjdG9yfSBlcnJvckxpa2VcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZ2V0Q29uc3RydWN0b3JOYW1lKGVycm9yTGlrZSkge1xuICB2YXIgY29uc3RydWN0b3JOYW1lID0gZXJyb3JMaWtlO1xuICBpZiAoZXJyb3JMaWtlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICBjb25zdHJ1Y3Rvck5hbWUgPSBnZXRGdW5jdGlvbk5hbWUoZXJyb3JMaWtlLmNvbnN0cnVjdG9yKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3JMaWtlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gSWYgYGVycmAgaXMgbm90IGFuIGluc3RhbmNlIG9mIEVycm9yIGl0IGlzIGFuIGVycm9yIGNvbnN0cnVjdG9yIGl0c2VsZiBvciBhbm90aGVyIGZ1bmN0aW9uLlxuICAgIC8vIElmIHdlJ3ZlIGdvdCBhIGNvbW1vbiBmdW5jdGlvbiB3ZSBnZXQgaXRzIG5hbWUsIG90aGVyd2lzZSB3ZSBtYXkgbmVlZCB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2VcbiAgICAvLyBvZiB0aGUgZXJyb3IganVzdCBpbiBjYXNlIGl0J3MgYSBwb29ybHktY29uc3RydWN0ZWQgZXJyb3IuIFBsZWFzZSBzZWUgY2hhaWpzL2NoYWkvaXNzdWVzLzQ1IHRvIGtub3cgbW9yZS5cbiAgICBjb25zdHJ1Y3Rvck5hbWUgPSBnZXRGdW5jdGlvbk5hbWUoZXJyb3JMaWtlKTtcbiAgICBpZiAoY29uc3RydWN0b3JOYW1lID09PSAnJykge1xuICAgICAgdmFyIG5ld0NvbnN0cnVjdG9yTmFtZSA9IGdldEZ1bmN0aW9uTmFtZShuZXcgZXJyb3JMaWtlKCkpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcbiAgICAgIGNvbnN0cnVjdG9yTmFtZSA9IG5ld0NvbnN0cnVjdG9yTmFtZSB8fCBjb25zdHJ1Y3Rvck5hbWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yTmFtZTtcbn1cblxuLyoqXG4gKiAjIyMgLmdldE1lc3NhZ2UoZXJyb3JMaWtlKVxuICpcbiAqIEdldHMgdGhlIGVycm9yIG1lc3NhZ2UgZnJvbSBhbiBlcnJvci5cbiAqIElmIGBlcnJgIGlzIGEgU3RyaW5nIGl0c2VsZiwgd2UgcmV0dXJuIGl0LlxuICogSWYgdGhlIGVycm9yIGhhcyBubyBtZXNzYWdlLCB3ZSByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLlxuICpcbiAqIEBuYW1lIGdldE1lc3NhZ2VcbiAqIEBwYXJhbSB7RXJyb3J8U3RyaW5nfSBlcnJvckxpa2VcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZ2V0TWVzc2FnZShlcnJvckxpa2UpIHtcbiAgdmFyIG1zZyA9ICcnO1xuICBpZiAoZXJyb3JMaWtlICYmIGVycm9yTGlrZS5tZXNzYWdlKSB7XG4gICAgbXNnID0gZXJyb3JMaWtlLm1lc3NhZ2U7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVycm9yTGlrZSA9PT0gJ3N0cmluZycpIHtcbiAgICBtc2cgPSBlcnJvckxpa2U7XG4gIH1cblxuICByZXR1cm4gbXNnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29tcGF0aWJsZUluc3RhbmNlOiBjb21wYXRpYmxlSW5zdGFuY2UsXG4gIGNvbXBhdGlibGVDb25zdHJ1Y3RvcjogY29tcGF0aWJsZUNvbnN0cnVjdG9yLFxuICBjb21wYXRpYmxlTWVzc2FnZTogY29tcGF0aWJsZU1lc3NhZ2UsXG4gIGdldE1lc3NhZ2U6IGdldE1lc3NhZ2UsXG4gIGdldENvbnN0cnVjdG9yTmFtZTogZ2V0Q29uc3RydWN0b3JOYW1lLFxufTtcbiIsICIvKiFcbiAqIENoYWkgLSBpc05hTiB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE1IFNha3RoaXByaXlhbiBWYWlyYW1hbmkgPHRoZWNoYXJnaW5ndm9sY2Fub0BnbWFpbC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMjIyAuaXNOYU4odmFsdWUpXG4gKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBOYU4gb3Igbm90LlxuICpcbiAqICAgICB1dGlscy5pc05hTihOYU4pOyAvLyB0cnVlXG4gKlxuICogQHBhcmFtIHtWYWx1ZX0gVGhlIHZhbHVlIHdoaWNoIGhhcyB0byBiZSBjaGVja2VkIGlmIGl0IGlzIE5hTlxuICogQG5hbWUgaXNOYU5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGlzTmFOKHZhbHVlKSB7XG4gIC8vIFJlZmVyIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1pc25hbi1udW1iZXJcbiAgLy8gc2VjdGlvbidzIE5PVEUuXG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbi8vIElmIEVDTUFTY3JpcHQgNidzIE51bWJlci5pc05hTiBpcyBwcmVzZW50LCBwcmVmZXIgdGhhdC5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGlzTmFOO1xuIiwgInZhciB0eXBlID0gcmVxdWlyZSgndHlwZS1kZXRlY3QnKTtcblxudmFyIGZsYWcgPSByZXF1aXJlKCcuL2ZsYWcnKTtcblxuZnVuY3Rpb24gaXNPYmplY3RUeXBlKG9iaikge1xuICB2YXIgb2JqZWN0VHlwZSA9IHR5cGUob2JqKTtcbiAgdmFyIG9iamVjdFR5cGVzID0gWydBcnJheScsICdPYmplY3QnLCAnZnVuY3Rpb24nXTtcblxuICByZXR1cm4gb2JqZWN0VHlwZXMuaW5kZXhPZihvYmplY3RUeXBlKSAhPT0gLTE7XG59XG5cbi8qKlxuICogIyMjIC5nZXRPcGVyYXRvcihtZXNzYWdlKVxuICpcbiAqIEV4dHJhY3QgdGhlIG9wZXJhdG9yIGZyb20gZXJyb3IgbWVzc2FnZS5cbiAqIE9wZXJhdG9yIGRlZmluZWQgaXMgYmFzZWQgb24gYmVsb3cgbGlua1xuICogaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9hc3NlcnQuaHRtbCNhc3NlcnRfYXNzZXJ0LlxuICpcbiAqIFJldHVybnMgdGhlIGBvcGVyYXRvcmAgb3IgYHVuZGVmaW5lZGAgdmFsdWUgZm9yIGFuIEFzc2VydGlvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IChjb25zdHJ1Y3RlZCBBc3NlcnRpb24pXG4gKiBAcGFyYW0ge0FyZ3VtZW50c30gY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLmFzc2VydCBhcmd1bWVudHNcbiAqIEBuYW1lc3BhY2UgVXRpbHNcbiAqIEBuYW1lIGdldE9wZXJhdG9yXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0T3BlcmF0b3Iob2JqLCBhcmdzKSB7XG4gIHZhciBvcGVyYXRvciA9IGZsYWcob2JqLCAnb3BlcmF0b3InKTtcbiAgdmFyIG5lZ2F0ZSA9IGZsYWcob2JqLCAnbmVnYXRlJyk7XG4gIHZhciBleHBlY3RlZCA9IGFyZ3NbM107XG4gIHZhciBtc2cgPSBuZWdhdGUgPyBhcmdzWzJdIDogYXJnc1sxXTtcblxuICBpZiAob3BlcmF0b3IpIHtcbiAgICByZXR1cm4gb3BlcmF0b3I7XG4gIH1cblxuICBpZiAodHlwZW9mIG1zZyA9PT0gJ2Z1bmN0aW9uJykgbXNnID0gbXNnKCk7XG5cbiAgbXNnID0gbXNnIHx8ICcnO1xuICBpZiAoIW1zZykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoL1xcc2hhdmVcXHMvLnRlc3QobXNnKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgaXNPYmplY3QgPSBpc09iamVjdFR5cGUoZXhwZWN0ZWQpO1xuICBpZiAoL1xcc25vdFxccy8udGVzdChtc2cpKSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0ID8gJ25vdERlZXBTdHJpY3RFcXVhbCcgOiAnbm90U3RyaWN0RXF1YWwnO1xuICB9XG5cbiAgcmV0dXJuIGlzT2JqZWN0ID8gJ2RlZXBTdHJpY3RFcXVhbCcgOiAnc3RyaWN0RXF1YWwnO1xufTtcbiIsICIvKiFcbiAqIGNoYWlcbiAqIENvcHlyaWdodChjKSAyMDExIEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyohXG4gKiBEZXBlbmRlbmNpZXMgdGhhdCBhcmUgdXNlZCBmb3IgbXVsdGlwbGUgZXhwb3J0cyBhcmUgcmVxdWlyZWQgaGVyZSBvbmx5IG9uY2VcbiAqL1xuXG52YXIgcGF0aHZhbCA9IHJlcXVpcmUoJ3BhdGh2YWwnKTtcblxuLyohXG4gKiB0ZXN0IHV0aWxpdHlcbiAqL1xuXG5leHBvcnRzLnRlc3QgPSByZXF1aXJlKCcuL3Rlc3QnKTtcblxuLyohXG4gKiB0eXBlIHV0aWxpdHlcbiAqL1xuXG5leHBvcnRzLnR5cGUgPSByZXF1aXJlKCd0eXBlLWRldGVjdCcpO1xuXG4vKiFcbiAqIGV4cGVjdFR5cGVzIHV0aWxpdHlcbiAqL1xuZXhwb3J0cy5leHBlY3RUeXBlcyA9IHJlcXVpcmUoJy4vZXhwZWN0VHlwZXMnKTtcblxuLyohXG4gKiBtZXNzYWdlIHV0aWxpdHlcbiAqL1xuXG5leHBvcnRzLmdldE1lc3NhZ2UgPSByZXF1aXJlKCcuL2dldE1lc3NhZ2UnKTtcblxuLyohXG4gKiBhY3R1YWwgdXRpbGl0eVxuICovXG5cbmV4cG9ydHMuZ2V0QWN0dWFsID0gcmVxdWlyZSgnLi9nZXRBY3R1YWwnKTtcblxuLyohXG4gKiBJbnNwZWN0IHV0aWxcbiAqL1xuXG5leHBvcnRzLmluc3BlY3QgPSByZXF1aXJlKCcuL2luc3BlY3QnKTtcblxuLyohXG4gKiBPYmplY3QgRGlzcGxheSB1dGlsXG4gKi9cblxuZXhwb3J0cy5vYmpEaXNwbGF5ID0gcmVxdWlyZSgnLi9vYmpEaXNwbGF5Jyk7XG5cbi8qIVxuICogRmxhZyB1dGlsaXR5XG4gKi9cblxuZXhwb3J0cy5mbGFnID0gcmVxdWlyZSgnLi9mbGFnJyk7XG5cbi8qIVxuICogRmxhZyB0cmFuc2ZlcnJpbmcgdXRpbGl0eVxuICovXG5cbmV4cG9ydHMudHJhbnNmZXJGbGFncyA9IHJlcXVpcmUoJy4vdHJhbnNmZXJGbGFncycpO1xuXG4vKiFcbiAqIERlZXAgZXF1YWwgdXRpbGl0eVxuICovXG5cbmV4cG9ydHMuZXFsID0gcmVxdWlyZSgnZGVlcC1lcWwnKTtcblxuLyohXG4gKiBEZWVwIHBhdGggaW5mb1xuICovXG5cbmV4cG9ydHMuZ2V0UGF0aEluZm8gPSBwYXRodmFsLmdldFBhdGhJbmZvO1xuXG4vKiFcbiAqIENoZWNrIGlmIGEgcHJvcGVydHkgZXhpc3RzXG4gKi9cblxuZXhwb3J0cy5oYXNQcm9wZXJ0eSA9IHBhdGh2YWwuaGFzUHJvcGVydHk7XG5cbi8qIVxuICogRnVuY3Rpb24gbmFtZVxuICovXG5cbmV4cG9ydHMuZ2V0TmFtZSA9IHJlcXVpcmUoJ2dldC1mdW5jLW5hbWUnKTtcblxuLyohXG4gKiBhZGQgUHJvcGVydHlcbiAqL1xuXG5leHBvcnRzLmFkZFByb3BlcnR5ID0gcmVxdWlyZSgnLi9hZGRQcm9wZXJ0eScpO1xuXG4vKiFcbiAqIGFkZCBNZXRob2RcbiAqL1xuXG5leHBvcnRzLmFkZE1ldGhvZCA9IHJlcXVpcmUoJy4vYWRkTWV0aG9kJyk7XG5cbi8qIVxuICogb3ZlcndyaXRlIFByb3BlcnR5XG4gKi9cblxuZXhwb3J0cy5vdmVyd3JpdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vb3ZlcndyaXRlUHJvcGVydHknKTtcblxuLyohXG4gKiBvdmVyd3JpdGUgTWV0aG9kXG4gKi9cblxuZXhwb3J0cy5vdmVyd3JpdGVNZXRob2QgPSByZXF1aXJlKCcuL292ZXJ3cml0ZU1ldGhvZCcpO1xuXG4vKiFcbiAqIEFkZCBhIGNoYWluYWJsZSBtZXRob2RcbiAqL1xuXG5leHBvcnRzLmFkZENoYWluYWJsZU1ldGhvZCA9IHJlcXVpcmUoJy4vYWRkQ2hhaW5hYmxlTWV0aG9kJyk7XG5cbi8qIVxuICogT3ZlcndyaXRlIGNoYWluYWJsZSBtZXRob2RcbiAqL1xuXG5leHBvcnRzLm92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCA9IHJlcXVpcmUoJy4vb3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kJyk7XG5cbi8qIVxuICogQ29tcGFyZSBieSBpbnNwZWN0IG1ldGhvZFxuICovXG5cbmV4cG9ydHMuY29tcGFyZUJ5SW5zcGVjdCA9IHJlcXVpcmUoJy4vY29tcGFyZUJ5SW5zcGVjdCcpO1xuXG4vKiFcbiAqIEdldCBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBzeW1ib2xzIG1ldGhvZFxuICovXG5cbmV4cG9ydHMuZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scyA9IHJlcXVpcmUoJy4vZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scycpO1xuXG4vKiFcbiAqIEdldCBvd24gZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG1ldGhvZFxuICovXG5cbmV4cG9ydHMuZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXMgPSByZXF1aXJlKCcuL2dldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzJyk7XG5cbi8qIVxuICogQ2hlY2tzIGVycm9yIGFnYWluc3QgYSBnaXZlbiBzZXQgb2YgY3JpdGVyaWFcbiAqL1xuXG5leHBvcnRzLmNoZWNrRXJyb3IgPSByZXF1aXJlKCdjaGVjay1lcnJvcicpO1xuXG4vKiFcbiAqIFByb3hpZnkgdXRpbFxuICovXG5cbmV4cG9ydHMucHJveGlmeSA9IHJlcXVpcmUoJy4vcHJveGlmeScpO1xuXG4vKiFcbiAqIGFkZExlbmd0aEd1YXJkIHV0aWxcbiAqL1xuXG5leHBvcnRzLmFkZExlbmd0aEd1YXJkID0gcmVxdWlyZSgnLi9hZGRMZW5ndGhHdWFyZCcpO1xuXG4vKiFcbiAqIGlzUHJveHlFbmFibGVkIGhlbHBlclxuICovXG5cbmV4cG9ydHMuaXNQcm94eUVuYWJsZWQgPSByZXF1aXJlKCcuL2lzUHJveHlFbmFibGVkJyk7XG5cbi8qIVxuICogaXNOYU4gbWV0aG9kXG4gKi9cblxuZXhwb3J0cy5pc05hTiA9IHJlcXVpcmUoJy4vaXNOYU4nKTtcblxuLyohXG4gKiBnZXRPcGVyYXRvciBtZXRob2RcbiAqL1xuXG5leHBvcnRzLmdldE9wZXJhdG9yID0gcmVxdWlyZSgnLi9nZXRPcGVyYXRvcicpOyIsICIvKiFcbiAqIGNoYWlcbiAqIGh0dHA6Ly9jaGFpanMuY29tXG4gKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxudmFyIGNvbmZpZyA9IHJlcXVpcmUoJy4vY29uZmlnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKF9jaGFpLCB1dGlsKSB7XG4gIC8qIVxuICAgKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICAgKi9cblxuICB2YXIgQXNzZXJ0aW9uRXJyb3IgPSBfY2hhaS5Bc3NlcnRpb25FcnJvclxuICAgICwgZmxhZyA9IHV0aWwuZmxhZztcblxuICAvKiFcbiAgICogTW9kdWxlIGV4cG9ydC5cbiAgICovXG5cbiAgX2NoYWkuQXNzZXJ0aW9uID0gQXNzZXJ0aW9uO1xuXG4gIC8qIVxuICAgKiBBc3NlcnRpb24gQ29uc3RydWN0b3JcbiAgICpcbiAgICogQ3JlYXRlcyBvYmplY3QgZm9yIGNoYWluaW5nLlxuICAgKlxuICAgKiBgQXNzZXJ0aW9uYCBvYmplY3RzIGNvbnRhaW4gbWV0YWRhdGEgaW4gdGhlIGZvcm0gb2YgZmxhZ3MuIFRocmVlIGZsYWdzIGNhblxuICAgKiBiZSBhc3NpZ25lZCBkdXJpbmcgaW5zdGFudGlhdGlvbiBieSBwYXNzaW5nIGFyZ3VtZW50cyB0byB0aGlzIGNvbnN0cnVjdG9yOlxuICAgKlxuICAgKiAtIGBvYmplY3RgOiBUaGlzIGZsYWcgY29udGFpbnMgdGhlIHRhcmdldCBvZiB0aGUgYXNzZXJ0aW9uLiBGb3IgZXhhbXBsZSwgaW5cbiAgICogICB0aGUgYXNzZXJ0aW9uIGBleHBlY3QobnVtS2l0dGVucykudG8uZXF1YWwoNyk7YCwgdGhlIGBvYmplY3RgIGZsYWcgd2lsbFxuICAgKiAgIGNvbnRhaW4gYG51bUtpdHRlbnNgIHNvIHRoYXQgdGhlIGBlcXVhbGAgYXNzZXJ0aW9uIGNhbiByZWZlcmVuY2UgaXQgd2hlblxuICAgKiAgIG5lZWRlZC5cbiAgICpcbiAgICogLSBgbWVzc2FnZWA6IFRoaXMgZmxhZyBjb250YWlucyBhbiBvcHRpb25hbCBjdXN0b20gZXJyb3IgbWVzc2FnZSB0byBiZVxuICAgKiAgIHByZXBlbmRlZCB0byB0aGUgZXJyb3IgbWVzc2FnZSB0aGF0J3MgZ2VuZXJhdGVkIGJ5IHRoZSBhc3NlcnRpb24gd2hlbiBpdFxuICAgKiAgIGZhaWxzLlxuICAgKlxuICAgKiAtIGBzc2ZpYDogVGhpcyBmbGFnIHN0YW5kcyBmb3IgXCJzdGFydCBzdGFjayBmdW5jdGlvbiBpbmRpY2F0b3JcIi4gSXRcbiAgICogICBjb250YWlucyBhIGZ1bmN0aW9uIHJlZmVyZW5jZSB0aGF0IHNlcnZlcyBhcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yXG4gICAqICAgcmVtb3ZpbmcgZnJhbWVzIGZyb20gdGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBlcnJvciB0aGF0J3MgY3JlYXRlZCBieSB0aGVcbiAgICogICBhc3NlcnRpb24gd2hlbiBpdCBmYWlscy4gVGhlIGdvYWwgaXMgdG8gcHJvdmlkZSBhIGNsZWFuZXIgc3RhY2sgdHJhY2UgdG9cbiAgICogICBlbmQgdXNlcnMgYnkgcmVtb3ZpbmcgQ2hhaSdzIGludGVybmFsIGZ1bmN0aW9ucy4gTm90ZSB0aGF0IGl0IG9ubHkgd29ya3NcbiAgICogICBpbiBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IGBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZWAsIGFuZCBvbmx5IHdoZW5cbiAgICogICBgQ2hhaS5jb25maWcuaW5jbHVkZVN0YWNrYCBoYXNuJ3QgYmVlbiBzZXQgdG8gYGZhbHNlYC5cbiAgICpcbiAgICogLSBgbG9ja1NzZmlgOiBUaGlzIGZsYWcgY29udHJvbHMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIGBzc2ZpYCBmbGFnXG4gICAqICAgc2hvdWxkIHJldGFpbiBpdHMgY3VycmVudCB2YWx1ZSwgZXZlbiBhcyBhc3NlcnRpb25zIGFyZSBjaGFpbmVkIG9mZiBvZlxuICAgKiAgIHRoaXMgb2JqZWN0LiBUaGlzIGlzIHVzdWFsbHkgc2V0IHRvIGB0cnVlYCB3aGVuIGNyZWF0aW5nIGEgbmV3IGFzc2VydGlvblxuICAgKiAgIGZyb20gd2l0aGluIGFub3RoZXIgYXNzZXJ0aW9uLiBJdCdzIGFsc28gdGVtcG9yYXJpbHkgc2V0IHRvIGB0cnVlYCBiZWZvcmVcbiAgICogICBhbiBvdmVyd3JpdHRlbiBhc3NlcnRpb24gZ2V0cyBjYWxsZWQgYnkgdGhlIG92ZXJ3cml0aW5nIGFzc2VydGlvbi5cbiAgICpcbiAgICogLSBgZXFsYDogVGhpcyBmbGFnIGNvbnRhaW5zIHRoZSBkZWVwRXF1YWwgZnVuY3Rpb24gdG8gYmUgdXNlZCBieSB0aGUgYXNzZXJ0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge01peGVkfSBvYmogdGFyZ2V0IG9mIHRoZSBhc3NlcnRpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IG1zZyAob3B0aW9uYWwpIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHNzZmkgKG9wdGlvbmFsKSBzdGFydGluZyBwb2ludCBmb3IgcmVtb3Zpbmcgc3RhY2sgZnJhbWVzXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gbG9ja1NzZmkgKG9wdGlvbmFsKSB3aGV0aGVyIG9yIG5vdCB0aGUgc3NmaSBmbGFnIGlzIGxvY2tlZFxuICAgKiBAYXBpIHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gQXNzZXJ0aW9uIChvYmosIG1zZywgc3NmaSwgbG9ja1NzZmkpIHtcbiAgICBmbGFnKHRoaXMsICdzc2ZpJywgc3NmaSB8fCBBc3NlcnRpb24pO1xuICAgIGZsYWcodGhpcywgJ2xvY2tTc2ZpJywgbG9ja1NzZmkpO1xuICAgIGZsYWcodGhpcywgJ29iamVjdCcsIG9iaik7XG4gICAgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgZmxhZyh0aGlzLCAnZXFsJywgY29uZmlnLmRlZXBFcXVhbCB8fCB1dGlsLmVxbCk7XG5cbiAgICByZXR1cm4gdXRpbC5wcm94aWZ5KHRoaXMpO1xuICB9XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFzc2VydGlvbiwgJ2luY2x1ZGVTdGFjaycsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgY29uc29sZS53YXJuKCdBc3NlcnRpb24uaW5jbHVkZVN0YWNrIGlzIGRlcHJlY2F0ZWQsIHVzZSBjaGFpLmNvbmZpZy5pbmNsdWRlU3RhY2sgaW5zdGVhZC4nKTtcbiAgICAgIHJldHVybiBjb25maWcuaW5jbHVkZVN0YWNrO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgY29uc29sZS53YXJuKCdBc3NlcnRpb24uaW5jbHVkZVN0YWNrIGlzIGRlcHJlY2F0ZWQsIHVzZSBjaGFpLmNvbmZpZy5pbmNsdWRlU3RhY2sgaW5zdGVhZC4nKTtcbiAgICAgIGNvbmZpZy5pbmNsdWRlU3RhY2sgPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBc3NlcnRpb24sICdzaG93RGlmZicsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgY29uc29sZS53YXJuKCdBc3NlcnRpb24uc2hvd0RpZmYgaXMgZGVwcmVjYXRlZCwgdXNlIGNoYWkuY29uZmlnLnNob3dEaWZmIGluc3RlYWQuJyk7XG4gICAgICByZXR1cm4gY29uZmlnLnNob3dEaWZmO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgY29uc29sZS53YXJuKCdBc3NlcnRpb24uc2hvd0RpZmYgaXMgZGVwcmVjYXRlZCwgdXNlIGNoYWkuY29uZmlnLnNob3dEaWZmIGluc3RlYWQuJyk7XG4gICAgICBjb25maWcuc2hvd0RpZmYgPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChuYW1lLCBmbikge1xuICAgIHV0aWwuYWRkUHJvcGVydHkodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuKTtcbiAgfTtcblxuICBBc3NlcnRpb24uYWRkTWV0aG9kID0gZnVuY3Rpb24gKG5hbWUsIGZuKSB7XG4gICAgdXRpbC5hZGRNZXRob2QodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuKTtcbiAgfTtcblxuICBBc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kID0gZnVuY3Rpb24gKG5hbWUsIGZuLCBjaGFpbmluZ0JlaGF2aW9yKSB7XG4gICAgdXRpbC5hZGRDaGFpbmFibGVNZXRob2QodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuLCBjaGFpbmluZ0JlaGF2aW9yKTtcbiAgfTtcblxuICBBc3NlcnRpb24ub3ZlcndyaXRlUHJvcGVydHkgPSBmdW5jdGlvbiAobmFtZSwgZm4pIHtcbiAgICB1dGlsLm92ZXJ3cml0ZVByb3BlcnR5KHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbik7XG4gIH07XG5cbiAgQXNzZXJ0aW9uLm92ZXJ3cml0ZU1ldGhvZCA9IGZ1bmN0aW9uIChuYW1lLCBmbikge1xuICAgIHV0aWwub3ZlcndyaXRlTWV0aG9kKHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbik7XG4gIH07XG5cbiAgQXNzZXJ0aW9uLm92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCA9IGZ1bmN0aW9uIChuYW1lLCBmbiwgY2hhaW5pbmdCZWhhdmlvcikge1xuICAgIHV0aWwub3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kKHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbiwgY2hhaW5pbmdCZWhhdmlvcik7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuYXNzZXJ0KGV4cHJlc3Npb24sIG1lc3NhZ2UsIG5lZ2F0ZU1lc3NhZ2UsIGV4cGVjdGVkLCBhY3R1YWwsIHNob3dEaWZmKVxuICAgKlxuICAgKiBFeGVjdXRlcyBhbiBleHByZXNzaW9uIGFuZCBjaGVjayBleHBlY3RhdGlvbnMuIFRocm93cyBBc3NlcnRpb25FcnJvciBmb3IgcmVwb3J0aW5nIGlmIHRlc3QgZG9lc24ndCBwYXNzLlxuICAgKlxuICAgKiBAbmFtZSBhc3NlcnRcbiAgICogQHBhcmFtIHtQaGlsb3NvcGhpY2FsfSBleHByZXNzaW9uIHRvIGJlIHRlc3RlZFxuICAgKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gbWVzc2FnZSBvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgbWVzc2FnZSB0byBkaXNwbGF5IGlmIGV4cHJlc3Npb24gZmFpbHNcbiAgICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IG5lZ2F0ZWRNZXNzYWdlIG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBuZWdhdGVkTWVzc2FnZSB0byBkaXNwbGF5IGlmIG5lZ2F0ZWQgZXhwcmVzc2lvbiBmYWlsc1xuICAgKiBAcGFyYW0ge01peGVkfSBleHBlY3RlZCB2YWx1ZSAocmVtZW1iZXIgdG8gY2hlY2sgZm9yIG5lZ2F0aW9uKVxuICAgKiBAcGFyYW0ge01peGVkfSBhY3R1YWwgKG9wdGlvbmFsKSB3aWxsIGRlZmF1bHQgdG8gYHRoaXMub2JqYFxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IHNob3dEaWZmIChvcHRpb25hbCkgd2hlbiBzZXQgdG8gYHRydWVgLCBhc3NlcnQgd2lsbCBkaXNwbGF5IGEgZGlmZiBpbiBhZGRpdGlvbiB0byB0aGUgbWVzc2FnZSBpZiBleHByZXNzaW9uIGZhaWxzXG4gICAqIEBhcGkgcHJpdmF0ZVxuICAgKi9cblxuICBBc3NlcnRpb24ucHJvdG90eXBlLmFzc2VydCA9IGZ1bmN0aW9uIChleHByLCBtc2csIG5lZ2F0ZU1zZywgZXhwZWN0ZWQsIF9hY3R1YWwsIHNob3dEaWZmKSB7XG4gICAgdmFyIG9rID0gdXRpbC50ZXN0KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGZhbHNlICE9PSBzaG93RGlmZikgc2hvd0RpZmYgPSB0cnVlO1xuICAgIGlmICh1bmRlZmluZWQgPT09IGV4cGVjdGVkICYmIHVuZGVmaW5lZCA9PT0gX2FjdHVhbCkgc2hvd0RpZmYgPSBmYWxzZTtcbiAgICBpZiAodHJ1ZSAhPT0gY29uZmlnLnNob3dEaWZmKSBzaG93RGlmZiA9IGZhbHNlO1xuXG4gICAgaWYgKCFvaykge1xuICAgICAgbXNnID0gdXRpbC5nZXRNZXNzYWdlKHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB2YXIgYWN0dWFsID0gdXRpbC5nZXRBY3R1YWwodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHZhciBhc3NlcnRpb25FcnJvck9iamVjdFByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgYWN0dWFsOiBhY3R1YWxcbiAgICAgICAgLCBleHBlY3RlZDogZXhwZWN0ZWRcbiAgICAgICAgLCBzaG93RGlmZjogc2hvd0RpZmZcbiAgICAgIH07XG5cbiAgICAgIHZhciBvcGVyYXRvciA9IHV0aWwuZ2V0T3BlcmF0b3IodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIGlmIChvcGVyYXRvcikge1xuICAgICAgICBhc3NlcnRpb25FcnJvck9iamVjdFByb3BlcnRpZXMub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICBtc2csXG4gICAgICAgIGFzc2VydGlvbkVycm9yT2JqZWN0UHJvcGVydGllcyxcbiAgICAgICAgKGNvbmZpZy5pbmNsdWRlU3RhY2spID8gdGhpcy5hc3NlcnQgOiBmbGFnKHRoaXMsICdzc2ZpJykpO1xuICAgIH1cbiAgfTtcblxuICAvKiFcbiAgICogIyMjIC5fb2JqXG4gICAqXG4gICAqIFF1aWNrIHJlZmVyZW5jZSB0byBzdG9yZWQgYGFjdHVhbGAgdmFsdWUgZm9yIHBsdWdpbiBkZXZlbG9wZXJzLlxuICAgKlxuICAgKiBAYXBpIHByaXZhdGVcbiAgICovXG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFzc2VydGlvbi5wcm90b3R5cGUsICdfb2JqJyxcbiAgICB7IGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG4gICAgICB9XG4gICAgLCBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgZmxhZyh0aGlzLCAnb2JqZWN0JywgdmFsKTtcbiAgICAgIH1cbiAgfSk7XG59O1xuIiwgIi8qIVxuICogY2hhaVxuICogaHR0cDovL2NoYWlqcy5jb21cbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjaGFpLCBfKSB7XG4gIHZhciBBc3NlcnRpb24gPSBjaGFpLkFzc2VydGlvblxuICAgICwgQXNzZXJ0aW9uRXJyb3IgPSBjaGFpLkFzc2VydGlvbkVycm9yXG4gICAgLCBmbGFnID0gXy5mbGFnO1xuXG4gIC8qKlxuICAgKiAjIyMgTGFuZ3VhZ2UgQ2hhaW5zXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgYXJlIHByb3ZpZGVkIGFzIGNoYWluYWJsZSBnZXR0ZXJzIHRvIGltcHJvdmUgdGhlIHJlYWRhYmlsaXR5XG4gICAqIG9mIHlvdXIgYXNzZXJ0aW9ucy5cbiAgICpcbiAgICogKipDaGFpbnMqKlxuICAgKlxuICAgKiAtIHRvXG4gICAqIC0gYmVcbiAgICogLSBiZWVuXG4gICAqIC0gaXNcbiAgICogLSB0aGF0XG4gICAqIC0gd2hpY2hcbiAgICogLSBhbmRcbiAgICogLSBoYXNcbiAgICogLSBoYXZlXG4gICAqIC0gd2l0aFxuICAgKiAtIGF0XG4gICAqIC0gb2ZcbiAgICogLSBzYW1lXG4gICAqIC0gYnV0XG4gICAqIC0gZG9lc1xuICAgKiAtIHN0aWxsXG4gICAqIC0gYWxzb1xuICAgKlxuICAgKiBAbmFtZSBsYW5ndWFnZSBjaGFpbnNcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgWyAndG8nLCAnYmUnLCAnYmVlbicsICdpcydcbiAgLCAnYW5kJywgJ2hhcycsICdoYXZlJywgJ3dpdGgnXG4gICwgJ3RoYXQnLCAnd2hpY2gnLCAnYXQnLCAnb2YnXG4gICwgJ3NhbWUnLCAnYnV0JywgJ2RvZXMnLCAnc3RpbGwnLCBcImFsc29cIiBdLmZvckVhY2goZnVuY3Rpb24gKGNoYWluKSB7XG4gICAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KGNoYWluKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAubm90XG4gICAqXG4gICAqIE5lZ2F0ZXMgYWxsIGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KGZ1bmN0aW9uICgpIHt9KS50by5ub3QudGhyb3coKTtcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLm5vdC5oYXZlLnByb3BlcnR5KCdiJyk7XG4gICAqICAgICBleHBlY3QoWzEsIDJdKS50by5iZS5hbignYXJyYXknKS50aGF0LmRvZXMubm90LmluY2x1ZGUoMyk7XG4gICAqXG4gICAqIEp1c3QgYmVjYXVzZSB5b3UgY2FuIG5lZ2F0ZSBhbnkgYXNzZXJ0aW9uIHdpdGggYC5ub3RgIGRvZXNuJ3QgbWVhbiB5b3VcbiAgICogc2hvdWxkLiBXaXRoIGdyZWF0IHBvd2VyIGNvbWVzIGdyZWF0IHJlc3BvbnNpYmlsaXR5LiBJdCdzIG9mdGVuIGJlc3QgdG9cbiAgICogYXNzZXJ0IHRoYXQgdGhlIG9uZSBleHBlY3RlZCBvdXRwdXQgd2FzIHByb2R1Y2VkLCByYXRoZXIgdGhhbiBhc3NlcnRpbmdcbiAgICogdGhhdCBvbmUgb2YgY291bnRsZXNzIHVuZXhwZWN0ZWQgb3V0cHV0cyB3YXNuJ3QgcHJvZHVjZWQuIFNlZSBpbmRpdmlkdWFsXG4gICAqIGFzc2VydGlvbnMgZm9yIHNwZWNpZmljIGd1aWRhbmNlLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDIpLnRvLmVxdWFsKDIpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDIpLnRvLm5vdC5lcXVhbCgxKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEBuYW1lIG5vdFxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ25vdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBmbGFnKHRoaXMsICduZWdhdGUnLCB0cnVlKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuZGVlcFxuICAgKlxuICAgKiBDYXVzZXMgYWxsIGAuZXF1YWxgLCBgLmluY2x1ZGVgLCBgLm1lbWJlcnNgLCBgLmtleXNgLCBhbmQgYC5wcm9wZXJ0eWBcbiAgICogYXNzZXJ0aW9ucyB0aGF0IGZvbGxvdyBpbiB0aGUgY2hhaW4gdG8gdXNlIGRlZXAgZXF1YWxpdHkgaW5zdGVhZCBvZiBzdHJpY3RcbiAgICogKGA9PT1gKSBlcXVhbGl0eS4gU2VlIHRoZSBgZGVlcC1lcWxgIHByb2plY3QgcGFnZSBmb3IgaW5mbyBvbiB0aGUgZGVlcFxuICAgKiBlcXVhbGl0eSBhbGdvcml0aG06IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFpanMvZGVlcC1lcWwuXG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgb2JqZWN0IGRlZXBseSAoYnV0IG5vdCBzdHJpY3RseSkgZXF1YWxzIGB7YTogMX1gXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5kZWVwLmVxdWFsKHthOiAxfSk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5ub3QuZXF1YWwoe2E6IDF9KTtcbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBhcnJheSBkZWVwbHkgKGJ1dCBub3Qgc3RyaWN0bHkpIGluY2x1ZGVzIGB7YTogMX1gXG4gICAqICAgICBleHBlY3QoW3thOiAxfV0pLnRvLmRlZXAuaW5jbHVkZSh7YTogMX0pO1xuICAgKiAgICAgZXhwZWN0KFt7YTogMX1dKS50by5ub3QuaW5jbHVkZSh7YTogMX0pO1xuICAgKlxuICAgKiAgICAgLy8gVGFyZ2V0IG9iamVjdCBkZWVwbHkgKGJ1dCBub3Qgc3RyaWN0bHkpIGluY2x1ZGVzIGB4OiB7YTogMX1gXG4gICAqICAgICBleHBlY3Qoe3g6IHthOiAxfX0pLnRvLmRlZXAuaW5jbHVkZSh7eDoge2E6IDF9fSk7XG4gICAqICAgICBleHBlY3Qoe3g6IHthOiAxfX0pLnRvLm5vdC5pbmNsdWRlKHt4OiB7YTogMX19KTtcbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBhcnJheSBkZWVwbHkgKGJ1dCBub3Qgc3RyaWN0bHkpIGhhcyBtZW1iZXIgYHthOiAxfWBcbiAgICogICAgIGV4cGVjdChbe2E6IDF9XSkudG8uaGF2ZS5kZWVwLm1lbWJlcnMoW3thOiAxfV0pO1xuICAgKiAgICAgZXhwZWN0KFt7YTogMX1dKS50by5ub3QuaGF2ZS5tZW1iZXJzKFt7YTogMX1dKTtcbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBzZXQgZGVlcGx5IChidXQgbm90IHN0cmljdGx5KSBoYXMga2V5IGB7YTogMX1gXG4gICAqICAgICBleHBlY3QobmV3IFNldChbe2E6IDF9XSkpLnRvLmhhdmUuZGVlcC5rZXlzKFt7YTogMX1dKTtcbiAgICogICAgIGV4cGVjdChuZXcgU2V0KFt7YTogMX1dKSkudG8ubm90LmhhdmUua2V5cyhbe2E6IDF9XSk7XG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgb2JqZWN0IGRlZXBseSAoYnV0IG5vdCBzdHJpY3RseSkgaGFzIHByb3BlcnR5IGB4OiB7YTogMX1gXG4gICAqICAgICBleHBlY3Qoe3g6IHthOiAxfX0pLnRvLmhhdmUuZGVlcC5wcm9wZXJ0eSgneCcsIHthOiAxfSk7XG4gICAqICAgICBleHBlY3Qoe3g6IHthOiAxfX0pLnRvLm5vdC5oYXZlLnByb3BlcnR5KCd4Jywge2E6IDF9KTtcbiAgICpcbiAgICogQG5hbWUgZGVlcFxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ2RlZXAnLCBmdW5jdGlvbiAoKSB7XG4gICAgZmxhZyh0aGlzLCAnZGVlcCcsIHRydWUpO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5uZXN0ZWRcbiAgICpcbiAgICogRW5hYmxlcyBkb3QtIGFuZCBicmFja2V0LW5vdGF0aW9uIGluIGFsbCBgLnByb3BlcnR5YCBhbmQgYC5pbmNsdWRlYFxuICAgKiBhc3NlcnRpb25zIHRoYXQgZm9sbG93IGluIHRoZSBjaGFpbi5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YToge2I6IFsneCcsICd5J119fSkudG8uaGF2ZS5uZXN0ZWQucHJvcGVydHkoJ2EuYlsxXScpO1xuICAgKiAgICAgZXhwZWN0KHthOiB7YjogWyd4JywgJ3knXX19KS50by5uZXN0ZWQuaW5jbHVkZSh7J2EuYlsxXSc6ICd5J30pO1xuICAgKlxuICAgKiBJZiBgLmAgb3IgYFtdYCBhcmUgcGFydCBvZiBhbiBhY3R1YWwgcHJvcGVydHkgbmFtZSwgdGhleSBjYW4gYmUgZXNjYXBlZCBieVxuICAgKiBhZGRpbmcgdHdvIGJhY2tzbGFzaGVzIGJlZm9yZSB0aGVtLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHsnLmEnOiB7J1tiXSc6ICd4J319KS50by5oYXZlLm5lc3RlZC5wcm9wZXJ0eSgnXFxcXC5hLlxcXFxbYlxcXFxdJyk7XG4gICAqICAgICBleHBlY3QoeycuYSc6IHsnW2JdJzogJ3gnfX0pLnRvLm5lc3RlZC5pbmNsdWRlKHsnXFxcXC5hLlxcXFxbYlxcXFxdJzogJ3gnfSk7XG4gICAqXG4gICAqIGAubmVzdGVkYCBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgLm93bmAuXG4gICAqXG4gICAqIEBuYW1lIG5lc3RlZFxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ25lc3RlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBmbGFnKHRoaXMsICduZXN0ZWQnLCB0cnVlKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAub3duXG4gICAqXG4gICAqIENhdXNlcyBhbGwgYC5wcm9wZXJ0eWAgYW5kIGAuaW5jbHVkZWAgYXNzZXJ0aW9ucyB0aGF0IGZvbGxvdyBpbiB0aGUgY2hhaW5cbiAgICogdG8gaWdub3JlIGluaGVyaXRlZCBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiAgICAgT2JqZWN0LnByb3RvdHlwZS5iID0gMjtcbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmhhdmUub3duLnByb3BlcnR5KCdhJyk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLnByb3BlcnR5KCdiJyk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5ub3QuaGF2ZS5vd24ucHJvcGVydHkoJ2InKTtcbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLm93bi5pbmNsdWRlKHthOiAxfSk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5pbmNsdWRlKHtiOiAyfSkuYnV0Lm5vdC5vd24uaW5jbHVkZSh7YjogMn0pO1xuICAgKlxuICAgKiBgLm93bmAgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYC5uZXN0ZWRgLlxuICAgKlxuICAgKiBAbmFtZSBvd25cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdvd24nLCBmdW5jdGlvbiAoKSB7XG4gICAgZmxhZyh0aGlzLCAnb3duJywgdHJ1ZSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLm9yZGVyZWRcbiAgICpcbiAgICogQ2F1c2VzIGFsbCBgLm1lbWJlcnNgIGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluIHRvIHJlcXVpcmUgdGhhdFxuICAgKiBtZW1iZXJzIGJlIGluIHRoZSBzYW1lIG9yZGVyLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KFsxLCAyXSkudG8uaGF2ZS5vcmRlcmVkLm1lbWJlcnMoWzEsIDJdKVxuICAgKiAgICAgICAuYnV0Lm5vdC5oYXZlLm9yZGVyZWQubWVtYmVycyhbMiwgMV0pO1xuICAgKlxuICAgKiBXaGVuIGAuaW5jbHVkZWAgYW5kIGAub3JkZXJlZGAgYXJlIGNvbWJpbmVkLCB0aGUgb3JkZXJpbmcgYmVnaW5zIGF0IHRoZVxuICAgKiBzdGFydCBvZiBib3RoIGFycmF5cy5cbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmluY2x1ZGUub3JkZXJlZC5tZW1iZXJzKFsxLCAyXSlcbiAgICogICAgICAgLmJ1dC5ub3QuaW5jbHVkZS5vcmRlcmVkLm1lbWJlcnMoWzIsIDNdKTtcbiAgICpcbiAgICogQG5hbWUgb3JkZXJlZFxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ29yZGVyZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgZmxhZyh0aGlzLCAnb3JkZXJlZCcsIHRydWUpO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5hbnlcbiAgICpcbiAgICogQ2F1c2VzIGFsbCBgLmtleXNgIGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluIHRvIG9ubHkgcmVxdWlyZSB0aGF0XG4gICAqIHRoZSB0YXJnZXQgaGF2ZSBhdCBsZWFzdCBvbmUgb2YgdGhlIGdpdmVuIGtleXMuIFRoaXMgaXMgdGhlIG9wcG9zaXRlIG9mXG4gICAqIGAuYWxsYCwgd2hpY2ggcmVxdWlyZXMgdGhhdCB0aGUgdGFyZ2V0IGhhdmUgYWxsIG9mIHRoZSBnaXZlbiBrZXlzLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxLCBiOiAyfSkudG8ubm90LmhhdmUuYW55LmtleXMoJ2MnLCAnZCcpO1xuICAgKlxuICAgKiBTZWUgdGhlIGAua2V5c2AgZG9jIGZvciBndWlkYW5jZSBvbiB3aGVuIHRvIHVzZSBgLmFueWAgb3IgYC5hbGxgLlxuICAgKlxuICAgKiBAbmFtZSBhbnlcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdhbnknLCBmdW5jdGlvbiAoKSB7XG4gICAgZmxhZyh0aGlzLCAnYW55JywgdHJ1ZSk7XG4gICAgZmxhZyh0aGlzLCAnYWxsJywgZmFsc2UpO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5hbGxcbiAgICpcbiAgICogQ2F1c2VzIGFsbCBgLmtleXNgIGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluIHRvIHJlcXVpcmUgdGhhdCB0aGVcbiAgICogdGFyZ2V0IGhhdmUgYWxsIG9mIHRoZSBnaXZlbiBrZXlzLiBUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZiBgLmFueWAsIHdoaWNoXG4gICAqIG9ubHkgcmVxdWlyZXMgdGhhdCB0aGUgdGFyZ2V0IGhhdmUgYXQgbGVhc3Qgb25lIG9mIHRoZSBnaXZlbiBrZXlzLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxLCBiOiAyfSkudG8uaGF2ZS5hbGwua2V5cygnYScsICdiJyk7XG4gICAqXG4gICAqIE5vdGUgdGhhdCBgLmFsbGAgaXMgdXNlZCBieSBkZWZhdWx0IHdoZW4gbmVpdGhlciBgLmFsbGAgbm9yIGAuYW55YCBhcmVcbiAgICogYWRkZWQgZWFybGllciBpbiB0aGUgY2hhaW4uIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhZGQgYC5hbGxgIGFueXdheVxuICAgKiBiZWNhdXNlIGl0IGltcHJvdmVzIHJlYWRhYmlsaXR5LlxuICAgKlxuICAgKiBTZWUgdGhlIGAua2V5c2AgZG9jIGZvciBndWlkYW5jZSBvbiB3aGVuIHRvIHVzZSBgLmFueWAgb3IgYC5hbGxgLlxuICAgKlxuICAgKiBAbmFtZSBhbGxcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdhbGwnLCBmdW5jdGlvbiAoKSB7XG4gICAgZmxhZyh0aGlzLCAnYWxsJywgdHJ1ZSk7XG4gICAgZmxhZyh0aGlzLCAnYW55JywgZmFsc2UpO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5hKHR5cGVbLCBtc2ddKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCdzIHR5cGUgaXMgZXF1YWwgdG8gdGhlIGdpdmVuIHN0cmluZyBgdHlwZWAuIFR5cGVzXG4gICAqIGFyZSBjYXNlIGluc2Vuc2l0aXZlLiBTZWUgdGhlIGB0eXBlLWRldGVjdGAgcHJvamVjdCBwYWdlIGZvciBpbmZvIG9uIHRoZVxuICAgKiB0eXBlIGRldGVjdGlvbiBhbGdvcml0aG06IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFpanMvdHlwZS1kZXRlY3QuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmJlLmEoJ3N0cmluZycpO1xuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uYmUuYW4oJ29iamVjdCcpO1xuICAgKiAgICAgZXhwZWN0KG51bGwpLnRvLmJlLmEoJ251bGwnKTtcbiAgICogICAgIGV4cGVjdCh1bmRlZmluZWQpLnRvLmJlLmFuKCd1bmRlZmluZWQnKTtcbiAgICogICAgIGV4cGVjdChuZXcgRXJyb3IpLnRvLmJlLmFuKCdlcnJvcicpO1xuICAgKiAgICAgZXhwZWN0KFByb21pc2UucmVzb2x2ZSgpKS50by5iZS5hKCdwcm9taXNlJyk7XG4gICAqICAgICBleHBlY3QobmV3IEZsb2F0MzJBcnJheSkudG8uYmUuYSgnZmxvYXQzMmFycmF5Jyk7XG4gICAqICAgICBleHBlY3QoU3ltYm9sKCkpLnRvLmJlLmEoJ3N5bWJvbCcpO1xuICAgKlxuICAgKiBgLmFgIHN1cHBvcnRzIG9iamVjdHMgdGhhdCBoYXZlIGEgY3VzdG9tIHR5cGUgc2V0IHZpYSBgU3ltYm9sLnRvU3RyaW5nVGFnYC5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHtcbiAgICogICAgICAgW1N5bWJvbC50b1N0cmluZ1RhZ106ICdteUN1c3RvbVR5cGUnXG4gICAqICAgICB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KG15T2JqKS50by5iZS5hKCdteUN1c3RvbVR5cGUnKS5idXQubm90LmFuKCdvYmplY3QnKTtcbiAgICpcbiAgICogSXQncyBvZnRlbiBiZXN0IHRvIHVzZSBgLmFgIHRvIGNoZWNrIGEgdGFyZ2V0J3MgdHlwZSBiZWZvcmUgbWFraW5nIG1vcmVcbiAgICogYXNzZXJ0aW9ucyBvbiB0aGUgc2FtZSB0YXJnZXQuIFRoYXQgd2F5LCB5b3UgYXZvaWQgdW5leHBlY3RlZCBiZWhhdmlvciBmcm9tXG4gICAqIGFueSBhc3NlcnRpb24gdGhhdCBkb2VzIGRpZmZlcmVudCB0aGluZ3MgYmFzZWQgb24gdGhlIHRhcmdldCdzIHR5cGUuXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5iZS5hbignYXJyYXknKS50aGF0LmluY2x1ZGVzKDIpO1xuICAgKiAgICAgZXhwZWN0KFtdKS50by5iZS5hbignYXJyYXknKS50aGF0LmlzLmVtcHR5O1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmFgLiBIb3dldmVyLCBpdCdzIG9mdGVuIGJlc3QgdG9cbiAgICogYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBpcyB0aGUgZXhwZWN0ZWQgdHlwZSwgcmF0aGVyIHRoYW4gYXNzZXJ0aW5nIHRoYXQgaXRcbiAgICogaXNuJ3Qgb25lIG9mIG1hbnkgdW5leHBlY3RlZCB0eXBlcy5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8uYmUuYSgnc3RyaW5nJyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLm5vdC5iZS5hbignYXJyYXknKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIGAuYWAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvciBtZXNzYWdlIHRvXG4gICAqIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kXG4gICAqIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmJlLmEoJ3N0cmluZycsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdCgxLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUuYSgnc3RyaW5nJyk7XG4gICAqXG4gICAqIGAuYWAgY2FuIGFsc28gYmUgdXNlZCBhcyBhIGxhbmd1YWdlIGNoYWluIHRvIGltcHJvdmUgdGhlIHJlYWRhYmlsaXR5IG9mXG4gICAqIHlvdXIgYXNzZXJ0aW9ucy5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YjogMn0pLnRvLmhhdmUuYS5wcm9wZXJ0eSgnYicpO1xuICAgKlxuICAgKiBUaGUgYWxpYXMgYC5hbmAgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5hYC5cbiAgICpcbiAgICogQG5hbWUgYVxuICAgKiBAYWxpYXMgYW5cbiAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1zZyBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFuICh0eXBlLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBhcnRpY2xlID0gflsgJ2EnLCAnZScsICdpJywgJ28nLCAndScgXS5pbmRleE9mKHR5cGUuY2hhckF0KDApKSA/ICdhbiAnIDogJ2EgJztcblxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICB0eXBlID09PSBfLnR5cGUob2JqKS50b0xvd2VyQ2FzZSgpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlICcgKyBhcnRpY2xlICsgdHlwZVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gYmUgJyArIGFydGljbGUgKyB0eXBlXG4gICAgKTtcbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoJ2FuJywgYW4pO1xuICBBc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKCdhJywgYW4pO1xuXG4gIC8qKlxuICAgKiAjIyMgLmluY2x1ZGUodmFsWywgbXNnXSlcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGEgc3RyaW5nLCBgLmluY2x1ZGVgIGFzc2VydHMgdGhhdCB0aGUgZ2l2ZW4gc3RyaW5nIGB2YWxgXG4gICAqIGlzIGEgc3Vic3RyaW5nIG9mIHRoZSB0YXJnZXQuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2Zvb2JhcicpLnRvLmluY2x1ZGUoJ2ZvbycpO1xuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgaXMgYW4gYXJyYXksIGAuaW5jbHVkZWAgYXNzZXJ0cyB0aGF0IHRoZSBnaXZlbiBgdmFsYCBpcyBhXG4gICAqIG1lbWJlciBvZiB0aGUgdGFyZ2V0LlxuICAgKlxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaW5jbHVkZSgyKTtcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGFuIG9iamVjdCwgYC5pbmNsdWRlYCBhc3NlcnRzIHRoYXQgdGhlIGdpdmVuIG9iamVjdFxuICAgKiBgdmFsYCdzIHByb3BlcnRpZXMgYXJlIGEgc3Vic2V0IG9mIHRoZSB0YXJnZXQncyBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxLCBiOiAyLCBjOiAzfSkudG8uaW5jbHVkZSh7YTogMSwgYjogMn0pO1xuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgaXMgYSBTZXQgb3IgV2Vha1NldCwgYC5pbmNsdWRlYCBhc3NlcnRzIHRoYXQgdGhlIGdpdmVuIGB2YWxgIGlzIGFcbiAgICogbWVtYmVyIG9mIHRoZSB0YXJnZXQuIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtIGlzIHVzZWQuXG4gICAqXG4gICAqICAgICBleHBlY3QobmV3IFNldChbMSwgMl0pKS50by5pbmNsdWRlKDIpO1xuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgaXMgYSBNYXAsIGAuaW5jbHVkZWAgYXNzZXJ0cyB0aGF0IHRoZSBnaXZlbiBgdmFsYCBpcyBvbmUgb2ZcbiAgICogdGhlIHZhbHVlcyBvZiB0aGUgdGFyZ2V0LiBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobSBpcyB1c2VkLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KG5ldyBNYXAoW1snYScsIDFdLCBbJ2InLCAyXV0pKS50by5pbmNsdWRlKDIpO1xuICAgKlxuICAgKiBCZWNhdXNlIGAuaW5jbHVkZWAgZG9lcyBkaWZmZXJlbnQgdGhpbmdzIGJhc2VkIG9uIHRoZSB0YXJnZXQncyB0eXBlLCBpdCdzXG4gICAqIGltcG9ydGFudCB0byBjaGVjayB0aGUgdGFyZ2V0J3MgdHlwZSBiZWZvcmUgdXNpbmcgYC5pbmNsdWRlYC4gU2VlIHRoZSBgLmFgXG4gICAqIGRvYyBmb3IgaW5mbyBvbiB0ZXN0aW5nIGEgdGFyZ2V0J3MgdHlwZS5cbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmJlLmFuKCdhcnJheScpLnRoYXQuaW5jbHVkZXMoMik7XG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHN0cmljdCAoYD09PWApIGVxdWFsaXR5IGlzIHVzZWQgdG8gY29tcGFyZSBhcnJheSBtZW1iZXJzIGFuZFxuICAgKiBvYmplY3QgcHJvcGVydGllcy4gQWRkIGAuZGVlcGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gdXNlIGRlZXAgZXF1YWxpdHlcbiAgICogaW5zdGVhZCAoV2Vha1NldCB0YXJnZXRzIGFyZSBub3Qgc3VwcG9ydGVkKS4gU2VlIHRoZSBgZGVlcC1lcWxgIHByb2plY3RcbiAgICogcGFnZSBmb3IgaW5mbyBvbiB0aGUgZGVlcCBlcXVhbGl0eSBhbGdvcml0aG06IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFpanMvZGVlcC1lcWwuXG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgYXJyYXkgZGVlcGx5IChidXQgbm90IHN0cmljdGx5KSBpbmNsdWRlcyBge2E6IDF9YFxuICAgKiAgICAgZXhwZWN0KFt7YTogMX1dKS50by5kZWVwLmluY2x1ZGUoe2E6IDF9KTtcbiAgICogICAgIGV4cGVjdChbe2E6IDF9XSkudG8ubm90LmluY2x1ZGUoe2E6IDF9KTtcbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBvYmplY3QgZGVlcGx5IChidXQgbm90IHN0cmljdGx5KSBpbmNsdWRlcyBgeDoge2E6IDF9YFxuICAgKiAgICAgZXhwZWN0KHt4OiB7YTogMX19KS50by5kZWVwLmluY2x1ZGUoe3g6IHthOiAxfX0pO1xuICAgKiAgICAgZXhwZWN0KHt4OiB7YTogMX19KS50by5ub3QuaW5jbHVkZSh7eDoge2E6IDF9fSk7XG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGFsbCBvZiB0aGUgdGFyZ2V0J3MgcHJvcGVydGllcyBhcmUgc2VhcmNoZWQgd2hlbiB3b3JraW5nIHdpdGhcbiAgICogb2JqZWN0cy4gVGhpcyBpbmNsdWRlcyBwcm9wZXJ0aWVzIHRoYXQgYXJlIGluaGVyaXRlZCBhbmQvb3Igbm9uLWVudW1lcmFibGUuXG4gICAqIEFkZCBgLm93bmAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gZXhjbHVkZSB0aGUgdGFyZ2V0J3MgaW5oZXJpdGVkXG4gICAqIHByb3BlcnRpZXMgZnJvbSB0aGUgc2VhcmNoLlxuICAgKlxuICAgKiAgICAgT2JqZWN0LnByb3RvdHlwZS5iID0gMjtcbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLm93bi5pbmNsdWRlKHthOiAxfSk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5pbmNsdWRlKHtiOiAyfSkuYnV0Lm5vdC5vd24uaW5jbHVkZSh7YjogMn0pO1xuICAgKlxuICAgKiBOb3RlIHRoYXQgYSB0YXJnZXQgb2JqZWN0IGlzIGFsd2F5cyBvbmx5IHNlYXJjaGVkIGZvciBgdmFsYCdzIG93blxuICAgKiBlbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIGAuZGVlcGAgYW5kIGAub3duYCBjYW4gYmUgY29tYmluZWQuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IHtiOiAyfX0pLnRvLmRlZXAub3duLmluY2x1ZGUoe2E6IHtiOiAyfX0pO1xuICAgKlxuICAgKiBBZGQgYC5uZXN0ZWRgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIGVuYWJsZSBkb3QtIGFuZCBicmFja2V0LW5vdGF0aW9uIHdoZW5cbiAgICogcmVmZXJlbmNpbmcgbmVzdGVkIHByb3BlcnRpZXMuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IHtiOiBbJ3gnLCAneSddfX0pLnRvLm5lc3RlZC5pbmNsdWRlKHsnYS5iWzFdJzogJ3knfSk7XG4gICAqXG4gICAqIElmIGAuYCBvciBgW11gIGFyZSBwYXJ0IG9mIGFuIGFjdHVhbCBwcm9wZXJ0eSBuYW1lLCB0aGV5IGNhbiBiZSBlc2NhcGVkIGJ5XG4gICAqIGFkZGluZyB0d28gYmFja3NsYXNoZXMgYmVmb3JlIHRoZW0uXG4gICAqXG4gICAqICAgICBleHBlY3QoeycuYSc6IHsnW2JdJzogMn19KS50by5uZXN0ZWQuaW5jbHVkZSh7J1xcXFwuYS5cXFxcW2JcXFxcXSc6IDJ9KTtcbiAgICpcbiAgICogYC5kZWVwYCBhbmQgYC5uZXN0ZWRgIGNhbiBiZSBjb21iaW5lZC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YToge2I6IFt7YzogM31dfX0pLnRvLmRlZXAubmVzdGVkLmluY2x1ZGUoeydhLmJbMF0nOiB7YzogM319KTtcbiAgICpcbiAgICogYC5vd25gIGFuZCBgLm5lc3RlZGAgY2Fubm90IGJlIGNvbWJpbmVkLlxuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmluY2x1ZGVgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb29iYXInKS50by5ub3QuaW5jbHVkZSgndGFjbycpO1xuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8ubm90LmluY2x1ZGUoNCk7XG4gICAqXG4gICAqIEhvd2V2ZXIsIGl0J3MgZGFuZ2Vyb3VzIHRvIG5lZ2F0ZSBgLmluY2x1ZGVgIHdoZW4gdGhlIHRhcmdldCBpcyBhbiBvYmplY3QuXG4gICAqIFRoZSBwcm9ibGVtIGlzIHRoYXQgaXQgY3JlYXRlcyB1bmNlcnRhaW4gZXhwZWN0YXRpb25zIGJ5IGFzc2VydGluZyB0aGF0IHRoZVxuICAgKiB0YXJnZXQgb2JqZWN0IGRvZXNuJ3QgaGF2ZSBhbGwgb2YgYHZhbGAncyBrZXkvdmFsdWUgcGFpcnMgYnV0IG1heSBvciBtYXlcbiAgICogbm90IGhhdmUgc29tZSBvZiB0aGVtLiBJdCdzIG9mdGVuIGJlc3QgdG8gaWRlbnRpZnkgdGhlIGV4YWN0IG91dHB1dCB0aGF0J3NcbiAgICogZXhwZWN0ZWQsIGFuZCB0aGVuIHdyaXRlIGFuIGFzc2VydGlvbiB0aGF0IG9ubHkgYWNjZXB0cyB0aGF0IGV4YWN0IG91dHB1dC5cbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IG9iamVjdCBpc24ndCBldmVuIGV4cGVjdGVkIHRvIGhhdmUgYHZhbGAncyBrZXlzLCBpdCdzXG4gICAqIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IGV4YWN0bHkgdGhhdC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YzogM30pLnRvLm5vdC5oYXZlLmFueS5rZXlzKCdhJywgJ2InKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YzogM30pLnRvLm5vdC5pbmNsdWRlKHthOiAxLCBiOiAyfSk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgb2JqZWN0IGlzIGV4cGVjdGVkIHRvIGhhdmUgYHZhbGAncyBrZXlzLCBpdCdzIG9mdGVuIGJlc3QgdG9cbiAgICogYXNzZXJ0IHRoYXQgZWFjaCBvZiB0aGUgcHJvcGVydGllcyBoYXMgaXRzIGV4cGVjdGVkIHZhbHVlLCByYXRoZXIgdGhhblxuICAgKiBhc3NlcnRpbmcgdGhhdCBlYWNoIHByb3BlcnR5IGRvZXNuJ3QgaGF2ZSBvbmUgb2YgbWFueSB1bmV4cGVjdGVkIHZhbHVlcy5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMywgYjogNH0pLnRvLmluY2x1ZGUoe2E6IDMsIGI6IDR9KTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YTogMywgYjogNH0pLnRvLm5vdC5pbmNsdWRlKHthOiAxLCBiOiAyfSk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBgLmluY2x1ZGVgIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3JcbiAgICogbWVzc2FnZSB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXNcbiAgICogdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmluY2x1ZGUoNCwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmluY2x1ZGUoNCk7XG4gICAqXG4gICAqIGAuaW5jbHVkZWAgY2FuIGFsc28gYmUgdXNlZCBhcyBhIGxhbmd1YWdlIGNoYWluLCBjYXVzaW5nIGFsbCBgLm1lbWJlcnNgIGFuZFxuICAgKiBgLmtleXNgIGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluIHRvIHJlcXVpcmUgdGhlIHRhcmdldCB0byBiZSBhXG4gICAqIHN1cGVyc2V0IG9mIHRoZSBleHBlY3RlZCBzZXQsIHJhdGhlciB0aGFuIGFuIGlkZW50aWNhbCBzZXQuIE5vdGUgdGhhdFxuICAgKiBgLm1lbWJlcnNgIGlnbm9yZXMgZHVwbGljYXRlcyBpbiB0aGUgc3Vic2V0IHdoZW4gYC5pbmNsdWRlYCBpcyBhZGRlZC5cbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBvYmplY3QncyBrZXlzIGFyZSBhIHN1cGVyc2V0IG9mIFsnYScsICdiJ10gYnV0IG5vdCBpZGVudGljYWxcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMiwgYzogM30pLnRvLmluY2x1ZGUuYWxsLmtleXMoJ2EnLCAnYicpO1xuICAgKiAgICAgZXhwZWN0KHthOiAxLCBiOiAyLCBjOiAzfSkudG8ubm90LmhhdmUuYWxsLmtleXMoJ2EnLCAnYicpO1xuICAgKlxuICAgKiAgICAgLy8gVGFyZ2V0IGFycmF5IGlzIGEgc3VwZXJzZXQgb2YgWzEsIDJdIGJ1dCBub3QgaWRlbnRpY2FsXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5pbmNsdWRlLm1lbWJlcnMoWzEsIDJdKTtcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLm5vdC5oYXZlLm1lbWJlcnMoWzEsIDJdKTtcbiAgICpcbiAgICogICAgIC8vIER1cGxpY2F0ZXMgaW4gdGhlIHN1YnNldCBhcmUgaWdub3JlZFxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaW5jbHVkZS5tZW1iZXJzKFsxLCAyLCAyLCAyXSk7XG4gICAqXG4gICAqIE5vdGUgdGhhdCBhZGRpbmcgYC5hbnlgIGVhcmxpZXIgaW4gdGhlIGNoYWluIGNhdXNlcyB0aGUgYC5rZXlzYCBhc3NlcnRpb25cbiAgICogdG8gaWdub3JlIGAuaW5jbHVkZWAuXG4gICAqXG4gICAqICAgICAvLyBCb3RoIGFzc2VydGlvbnMgYXJlIGlkZW50aWNhbFxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaW5jbHVkZS5hbnkua2V5cygnYScsICdiJyk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLmFueS5rZXlzKCdhJywgJ2InKTtcbiAgICpcbiAgICogVGhlIGFsaWFzZXMgYC5pbmNsdWRlc2AsIGAuY29udGFpbmAsIGFuZCBgLmNvbnRhaW5zYCBjYW4gYmUgdXNlZFxuICAgKiBpbnRlcmNoYW5nZWFibHkgd2l0aCBgLmluY2x1ZGVgLlxuICAgKlxuICAgKiBAbmFtZSBpbmNsdWRlXG4gICAqIEBhbGlhcyBjb250YWluXG4gICAqIEBhbGlhcyBpbmNsdWRlc1xuICAgKiBAYWxpYXMgY29udGFpbnNcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBTYW1lVmFsdWVaZXJvKGEsIGIpIHtcbiAgICByZXR1cm4gKF8uaXNOYU4oYSkgJiYgXy5pc05hTihiKSkgfHwgYSA9PT0gYjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yICgpIHtcbiAgICBmbGFnKHRoaXMsICdjb250YWlucycsIHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5jbHVkZSAodmFsLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcblxuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBvYmpUeXBlID0gXy50eXBlKG9iaikudG9Mb3dlckNhc2UoKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIG5lZ2F0ZSA9IGZsYWcodGhpcywgJ25lZ2F0ZScpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJylcbiAgICAgICwgaXNEZWVwID0gZmxhZyh0aGlzLCAnZGVlcCcpXG4gICAgICAsIGRlc2NyaXB0b3IgPSBpc0RlZXAgPyAnZGVlcCAnIDogJydcbiAgICAgICwgaXNFcWwgPSBpc0RlZXAgPyBmbGFnKHRoaXMsICdlcWwnKSA6IFNhbWVWYWx1ZVplcm87XG5cbiAgICBmbGFnTXNnID0gZmxhZ01zZyA/IGZsYWdNc2cgKyAnOiAnIDogJyc7XG5cbiAgICB2YXIgaW5jbHVkZWQgPSBmYWxzZTtcblxuICAgIHN3aXRjaCAob2JqVHlwZSkge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgaW5jbHVkZWQgPSBvYmouaW5kZXhPZih2YWwpICE9PSAtMTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3dlYWtzZXQnOlxuICAgICAgICBpZiAoaXNEZWVwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICAgICAgZmxhZ01zZyArICd1bmFibGUgdG8gdXNlIC5kZWVwLmluY2x1ZGUgd2l0aCBXZWFrU2V0JyxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHNzZmlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5jbHVkZWQgPSBvYmouaGFzKHZhbCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdtYXAnOlxuICAgICAgICBvYmouZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIGluY2x1ZGVkID0gaW5jbHVkZWQgfHwgaXNFcWwoaXRlbSwgdmFsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzZXQnOlxuICAgICAgICBpZiAoaXNEZWVwKSB7XG4gICAgICAgICAgb2JqLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIGluY2x1ZGVkID0gaW5jbHVkZWQgfHwgaXNFcWwoaXRlbSwgdmFsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbmNsdWRlZCA9IG9iai5oYXModmFsKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgICBpZiAoaXNEZWVwKSB7XG4gICAgICAgICAgaW5jbHVkZWQgPSBvYmouc29tZShmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzRXFsKGl0ZW0sIHZhbCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbmNsdWRlZCA9IG9iai5pbmRleE9mKHZhbCkgIT09IC0xO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBUaGlzIGJsb2NrIGlzIGZvciBhc3NlcnRpbmcgYSBzdWJzZXQgb2YgcHJvcGVydGllcyBpbiBhbiBvYmplY3QuXG4gICAgICAgIC8vIGBfLmV4cGVjdFR5cGVzYCBpc24ndCB1c2VkIGhlcmUgYmVjYXVzZSBgLmluY2x1ZGVgIHNob3VsZCB3b3JrIHdpdGhcbiAgICAgICAgLy8gb2JqZWN0cyB3aXRoIGEgY3VzdG9tIGBAQHRvU3RyaW5nVGFnYC5cbiAgICAgICAgaWYgKHZhbCAhPT0gT2JqZWN0KHZhbCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgICBmbGFnTXNnICsgJ3RoZSBnaXZlbiBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgKCdcbiAgICAgICAgICAgICsgb2JqVHlwZSArICcgYW5kICdcbiAgICAgICAgICAgICsgXy50eXBlKHZhbCkudG9Mb3dlckNhc2UoKSArICcpJ1xuICAgICAgICAgICAgKyAnIGlzIGludmFsaWQgZm9yIHRoaXMgYXNzZXJ0aW9uLiAnXG4gICAgICAgICAgICArICdZb3UgY2FuIHVzZSBhbiBhcnJheSwgYSBtYXAsIGFuIG9iamVjdCwgYSBzZXQsIGEgc3RyaW5nLCAnXG4gICAgICAgICAgICArICdvciBhIHdlYWtzZXQgaW5zdGVhZCBvZiBhICdcbiAgICAgICAgICAgICsgXy50eXBlKHZhbCkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHNzZmlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHByb3BzID0gT2JqZWN0LmtleXModmFsKVxuICAgICAgICAgICwgZmlyc3RFcnIgPSBudWxsXG4gICAgICAgICAgLCBudW1FcnJzID0gMDtcblxuICAgICAgICBwcm9wcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgICAgdmFyIHByb3BBc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKG9iaik7XG4gICAgICAgICAgXy50cmFuc2ZlckZsYWdzKHRoaXMsIHByb3BBc3NlcnRpb24sIHRydWUpO1xuICAgICAgICAgIGZsYWcocHJvcEFzc2VydGlvbiwgJ2xvY2tTc2ZpJywgdHJ1ZSk7XG5cbiAgICAgICAgICBpZiAoIW5lZ2F0ZSB8fCBwcm9wcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHByb3BBc3NlcnRpb24ucHJvcGVydHkocHJvcCwgdmFsW3Byb3BdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvcEFzc2VydGlvbi5wcm9wZXJ0eShwcm9wLCB2YWxbcHJvcF0pO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKCFfLmNoZWNrRXJyb3IuY29tcGF0aWJsZUNvbnN0cnVjdG9yKGVyciwgQXNzZXJ0aW9uRXJyb3IpKSB7XG4gICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaXJzdEVyciA9PT0gbnVsbCkgZmlyc3RFcnIgPSBlcnI7XG4gICAgICAgICAgICBudW1FcnJzKys7XG4gICAgICAgICAgfVxuICAgICAgICB9LCB0aGlzKTtcblxuICAgICAgICAvLyBXaGVuIHZhbGlkYXRpbmcgLm5vdC5pbmNsdWRlIHdpdGggbXVsdGlwbGUgcHJvcGVydGllcywgd2Ugb25seSB3YW50XG4gICAgICAgIC8vIHRvIHRocm93IGFuIGFzc2VydGlvbiBlcnJvciBpZiBhbGwgb2YgdGhlIHByb3BlcnRpZXMgYXJlIGluY2x1ZGVkLFxuICAgICAgICAvLyBpbiB3aGljaCBjYXNlIHdlIHRocm93IHRoZSBmaXJzdCBwcm9wZXJ0eSBhc3NlcnRpb24gZXJyb3IgdGhhdCB3ZVxuICAgICAgICAvLyBlbmNvdW50ZXJlZC5cbiAgICAgICAgaWYgKG5lZ2F0ZSAmJiBwcm9wcy5sZW5ndGggPiAxICYmIG51bUVycnMgPT09IHByb3BzLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IGZpcnN0RXJyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBc3NlcnQgaW5jbHVzaW9uIGluIGNvbGxlY3Rpb24gb3Igc3Vic3RyaW5nIGluIGEgc3RyaW5nLlxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgaW5jbHVkZWRcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gJyArIGRlc2NyaXB0b3IgKyAnaW5jbHVkZSAnICsgXy5pbnNwZWN0KHZhbClcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90ICcgKyBkZXNjcmlwdG9yICsgJ2luY2x1ZGUgJyArIF8uaW5zcGVjdCh2YWwpKTtcbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoJ2luY2x1ZGUnLCBpbmNsdWRlLCBpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvcik7XG4gIEFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoJ2NvbnRhaW4nLCBpbmNsdWRlLCBpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvcik7XG4gIEFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoJ2NvbnRhaW5zJywgaW5jbHVkZSwgaW5jbHVkZUNoYWluaW5nQmVoYXZpb3IpO1xuICBBc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKCdpbmNsdWRlcycsIGluY2x1ZGUsIGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yKTtcblxuICAvKipcbiAgICogIyMjIC5va1xuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBhIHRydXRoeSB2YWx1ZSAoY29uc2lkZXJlZCBgdHJ1ZWAgaW4gYm9vbGVhbiBjb250ZXh0KS5cbiAgICogSG93ZXZlciwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQgaXMgc3RyaWN0bHkgKGA9PT1gKSBvclxuICAgKiBkZWVwbHkgZXF1YWwgdG8gaXRzIGV4cGVjdGVkIHZhbHVlLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmVxdWFsKDEpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmJlLm9rOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogICAgIGV4cGVjdCh0cnVlKS50by5iZS50cnVlOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHRydWUpLnRvLmJlLm9rOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5va2AuXG4gICAqXG4gICAqICAgICBleHBlY3QoMCkudG8uZXF1YWwoMCk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMCkudG8ubm90LmJlLm9rOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogICAgIGV4cGVjdChmYWxzZSkudG8uYmUuZmFsc2U7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoZmFsc2UpLnRvLm5vdC5iZS5vazsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3QobnVsbCkudG8uYmUubnVsbDsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChudWxsKS50by5ub3QuYmUub2s7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiAgICAgZXhwZWN0KHVuZGVmaW5lZCkudG8uYmUudW5kZWZpbmVkOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHVuZGVmaW5lZCkudG8ubm90LmJlLm9rOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQSBjdXN0b20gZXJyb3IgbWVzc2FnZSBjYW4gYmUgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdChmYWxzZSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLm9rO1xuICAgKlxuICAgKiBAbmFtZSBva1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ29rJywgZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSB0cnV0aHknXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIGZhbHN5Jyk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLnRydWVcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgc3RyaWN0bHkgKGA9PT1gKSBlcXVhbCB0byBgdHJ1ZWAuXG4gICAqXG4gICAqICAgICBleHBlY3QodHJ1ZSkudG8uYmUudHJ1ZTtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC50cnVlYC4gSG93ZXZlciwgaXQncyBvZnRlbiBiZXN0XG4gICAqIHRvIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQgaXMgZXF1YWwgdG8gaXRzIGV4cGVjdGVkIHZhbHVlLCByYXRoZXIgdGhhbiBub3RcbiAgICogZXF1YWwgdG8gYHRydWVgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KGZhbHNlKS50by5iZS5mYWxzZTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChmYWxzZSkudG8ubm90LmJlLnRydWU7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmVxdWFsKDEpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDEpLnRvLm5vdC5iZS50cnVlOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQSBjdXN0b20gZXJyb3IgbWVzc2FnZSBjYW4gYmUgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdChmYWxzZSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLnRydWU7XG4gICAqXG4gICAqIEBuYW1lIHRydWVcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCd0cnVlJywgZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICB0cnVlID09PSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSB0cnVlJ1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBmYWxzZSdcbiAgICAgICwgZmxhZyh0aGlzLCAnbmVnYXRlJykgPyBmYWxzZSA6IHRydWVcbiAgICApO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5mYWxzZVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBzdHJpY3RseSAoYD09PWApIGVxdWFsIHRvIGBmYWxzZWAuXG4gICAqXG4gICAqICAgICBleHBlY3QoZmFsc2UpLnRvLmJlLmZhbHNlO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmZhbHNlYC4gSG93ZXZlciwgaXQncyBvZnRlblxuICAgKiBiZXN0IHRvIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQgaXMgZXF1YWwgdG8gaXRzIGV4cGVjdGVkIHZhbHVlLCByYXRoZXIgdGhhblxuICAgKiBub3QgZXF1YWwgdG8gYGZhbHNlYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh0cnVlKS50by5iZS50cnVlOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHRydWUpLnRvLm5vdC5iZS5mYWxzZTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uZXF1YWwoMSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMSkudG8ubm90LmJlLmZhbHNlOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQSBjdXN0b20gZXJyb3IgbWVzc2FnZSBjYW4gYmUgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh0cnVlLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUuZmFsc2U7XG4gICAqXG4gICAqIEBuYW1lIGZhbHNlXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnZmFsc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIGZhbHNlID09PSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBmYWxzZSdcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgdHJ1ZSdcbiAgICAgICwgZmxhZyh0aGlzLCAnbmVnYXRlJykgPyB0cnVlIDogZmFsc2VcbiAgICApO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5udWxsXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIHN0cmljdGx5IChgPT09YCkgZXF1YWwgdG8gYG51bGxgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KG51bGwpLnRvLmJlLm51bGw7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAubnVsbGAuIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdFxuICAgKiB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIHRvIGl0cyBleHBlY3RlZCB2YWx1ZSwgcmF0aGVyIHRoYW4gbm90XG4gICAqIGVxdWFsIHRvIGBudWxsYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5lcXVhbCgxKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxKS50by5ub3QuYmUubnVsbDsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgY2FuIGJlIGdpdmVuIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoNDIsICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5udWxsO1xuICAgKlxuICAgKiBAbmFtZSBudWxsXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnbnVsbCcsIGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgbnVsbCA9PT0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgbnVsbCdcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIG51bGwnXG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAudW5kZWZpbmVkXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIHN0cmljdGx5IChgPT09YCkgZXF1YWwgdG8gYHVuZGVmaW5lZGAuXG4gICAqXG4gICAqICAgICBleHBlY3QodW5kZWZpbmVkKS50by5iZS51bmRlZmluZWQ7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAudW5kZWZpbmVkYC4gSG93ZXZlciwgaXQncyBvZnRlblxuICAgKiBiZXN0IHRvIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQgaXMgZXF1YWwgdG8gaXRzIGV4cGVjdGVkIHZhbHVlLCByYXRoZXIgdGhhblxuICAgKiBub3QgZXF1YWwgdG8gYHVuZGVmaW5lZGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uZXF1YWwoMSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMSkudG8ubm90LmJlLnVuZGVmaW5lZDsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgY2FuIGJlIGdpdmVuIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoNDIsICdub29vIHdoeSBmYWlsPz8nKS50by5iZS51bmRlZmluZWQ7XG4gICAqXG4gICAqIEBuYW1lIHVuZGVmaW5lZFxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ3VuZGVmaW5lZCcsIGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgdW5kZWZpbmVkID09PSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSB1bmRlZmluZWQnXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSB1bmRlZmluZWQnXG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuTmFOXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGV4YWN0bHkgYE5hTmAuXG4gICAqXG4gICAqICAgICBleHBlY3QoTmFOKS50by5iZS5OYU47XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuTmFOYC4gSG93ZXZlciwgaXQncyBvZnRlbiBiZXN0XG4gICAqIHRvIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQgaXMgZXF1YWwgdG8gaXRzIGV4cGVjdGVkIHZhbHVlLCByYXRoZXIgdGhhbiBub3RcbiAgICogZXF1YWwgdG8gYE5hTmAuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmVxdWFsKCdmb28nKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8ubm90LmJlLk5hTjsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgY2FuIGJlIGdpdmVuIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoNDIsICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5OYU47XG4gICAqXG4gICAqIEBuYW1lIE5hTlxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ05hTicsIGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgXy5pc05hTihmbGFnKHRoaXMsICdvYmplY3QnKSlcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBOYU4nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIE5hTidcbiAgICApO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5leGlzdFxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBub3Qgc3RyaWN0bHkgKGA9PT1gKSBlcXVhbCB0byBlaXRoZXIgYG51bGxgIG9yXG4gICAqIGB1bmRlZmluZWRgLiBIb3dldmVyLCBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBpcyBlcXVhbCB0b1xuICAgKiBpdHMgZXhwZWN0ZWQgdmFsdWUuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uZXF1YWwoMSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMSkudG8uZXhpc3Q7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiAgICAgZXhwZWN0KDApLnRvLmVxdWFsKDApOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDApLnRvLmV4aXN0OyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5leGlzdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QobnVsbCkudG8uYmUubnVsbDsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChudWxsKS50by5ub3QuZXhpc3Q7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiAgICAgZXhwZWN0KHVuZGVmaW5lZCkudG8uYmUudW5kZWZpbmVkOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHVuZGVmaW5lZCkudG8ubm90LmV4aXN0OyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQSBjdXN0b20gZXJyb3IgbWVzc2FnZSBjYW4gYmUgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdChudWxsLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uZXhpc3Q7XG4gICAqXG4gICAqIFRoZSBhbGlhcyBgLmV4aXN0c2AgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5leGlzdGAuXG4gICAqXG4gICAqIEBuYW1lIGV4aXN0XG4gICAqIEBhbGlhcyBleGlzdHNcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0RXhpc3QgKCkge1xuICAgIHZhciB2YWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKTtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgdmFsICE9PSBudWxsICYmIHZhbCAhPT0gdW5kZWZpbmVkXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGV4aXN0J1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgZXhpc3QnXG4gICAgKTtcbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnZXhpc3QnLCBhc3NlcnRFeGlzdCk7XG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnZXhpc3RzJywgYXNzZXJ0RXhpc3QpO1xuXG4gIC8qKlxuICAgKiAjIyMgLmVtcHR5XG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpcyBhIHN0cmluZyBvciBhcnJheSwgYC5lbXB0eWAgYXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQnc1xuICAgKiBgbGVuZ3RoYCBwcm9wZXJ0eSBpcyBzdHJpY3RseSAoYD09PWApIGVxdWFsIHRvIGAwYC5cbiAgICpcbiAgICogICAgIGV4cGVjdChbXSkudG8uYmUuZW1wdHk7XG4gICAqICAgICBleHBlY3QoJycpLnRvLmJlLmVtcHR5O1xuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgaXMgYSBtYXAgb3Igc2V0LCBgLmVtcHR5YCBhc3NlcnRzIHRoYXQgdGhlIHRhcmdldCdzIGBzaXplYFxuICAgKiBwcm9wZXJ0eSBpcyBzdHJpY3RseSBlcXVhbCB0byBgMGAuXG4gICAqXG4gICAqICAgICBleHBlY3QobmV3IFNldCgpKS50by5iZS5lbXB0eTtcbiAgICogICAgIGV4cGVjdChuZXcgTWFwKCkpLnRvLmJlLmVtcHR5O1xuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgaXMgYSBub24tZnVuY3Rpb24gb2JqZWN0LCBgLmVtcHR5YCBhc3NlcnRzIHRoYXQgdGhlIHRhcmdldFxuICAgKiBkb2Vzbid0IGhhdmUgYW55IG93biBlbnVtZXJhYmxlIHByb3BlcnRpZXMuIFByb3BlcnRpZXMgd2l0aCBTeW1ib2wtYmFzZWRcbiAgICoga2V5cyBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgY291bnQuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe30pLnRvLmJlLmVtcHR5O1xuICAgKlxuICAgKiBCZWNhdXNlIGAuZW1wdHlgIGRvZXMgZGlmZmVyZW50IHRoaW5ncyBiYXNlZCBvbiB0aGUgdGFyZ2V0J3MgdHlwZSwgaXQnc1xuICAgKiBpbXBvcnRhbnQgdG8gY2hlY2sgdGhlIHRhcmdldCdzIHR5cGUgYmVmb3JlIHVzaW5nIGAuZW1wdHlgLiBTZWUgdGhlIGAuYWBcbiAgICogZG9jIGZvciBpbmZvIG9uIHRlc3RpbmcgYSB0YXJnZXQncyB0eXBlLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KFtdKS50by5iZS5hbignYXJyYXknKS50aGF0LmlzLmVtcHR5O1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmVtcHR5YC4gSG93ZXZlciwgaXQncyBvZnRlblxuICAgKiBiZXN0IHRvIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQgY29udGFpbnMgaXRzIGV4cGVjdGVkIG51bWJlciBvZiB2YWx1ZXMsXG4gICAqIHJhdGhlciB0aGFuIGFzc2VydGluZyB0aGF0IGl0J3Mgbm90IGVtcHR5LlxuICAgKlxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGhPZigzKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLm5vdC5iZS5lbXB0eTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3QobmV3IFNldChbMSwgMiwgM10pKS50by5oYXZlLnByb3BlcnR5KCdzaXplJywgMyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QobmV3IFNldChbMSwgMiwgM10pKS50by5ub3QuYmUuZW1wdHk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiAgICAgZXhwZWN0KE9iamVjdC5rZXlzKHthOiAxfSkpLnRvLmhhdmUubGVuZ3RoT2YoMSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5ub3QuYmUuZW1wdHk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBIGN1c3RvbSBlcnJvciBtZXNzYWdlIGNhbiBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLmVtcHR5O1xuICAgKlxuICAgKiBAbmFtZSBlbXB0eVxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ2VtcHR5JywgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpXG4gICAgICAsIGZsYWdNc2cgPSBmbGFnKHRoaXMsICdtZXNzYWdlJylcbiAgICAgICwgaXRlbXNDb3VudDtcblxuICAgIGZsYWdNc2cgPSBmbGFnTXNnID8gZmxhZ01zZyArICc6ICcgOiAnJztcblxuICAgIHN3aXRjaCAoXy50eXBlKHZhbCkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgaXRlbXNDb3VudCA9IHZhbC5sZW5ndGg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbWFwJzpcbiAgICAgIGNhc2UgJ3NldCc6XG4gICAgICAgIGl0ZW1zQ291bnQgPSB2YWwuc2l6ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd3ZWFrbWFwJzpcbiAgICAgIGNhc2UgJ3dlYWtzZXQnOlxuICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgZmxhZ01zZyArICcuZW1wdHkgd2FzIHBhc3NlZCBhIHdlYWsgY29sbGVjdGlvbicsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHNzZmlcbiAgICAgICAgKTtcbiAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgdmFyIG1zZyA9IGZsYWdNc2cgKyAnLmVtcHR5IHdhcyBwYXNzZWQgYSBmdW5jdGlvbiAnICsgXy5nZXROYW1lKHZhbCk7XG4gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtc2cudHJpbSgpLCB1bmRlZmluZWQsIHNzZmkpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHZhbCAhPT0gT2JqZWN0KHZhbCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgICBmbGFnTXNnICsgJy5lbXB0eSB3YXMgcGFzc2VkIG5vbi1zdHJpbmcgcHJpbWl0aXZlICcgKyBfLmluc3BlY3QodmFsKSxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHNzZmlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW1zQ291bnQgPSBPYmplY3Qua2V5cyh2YWwpLmxlbmd0aDtcbiAgICB9XG5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgMCA9PT0gaXRlbXNDb3VudFxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBlbXB0eSdcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIGVtcHR5J1xuICAgICk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLmFyZ3VtZW50c1xuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gICAqXG4gICAqICAgICBmdW5jdGlvbiB0ZXN0ICgpIHtcbiAgICogICAgICAgZXhwZWN0KGFyZ3VtZW50cykudG8uYmUuYXJndW1lbnRzO1xuICAgKiAgICAgfVxuICAgKlxuICAgKiAgICAgdGVzdCgpO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmFyZ3VtZW50c2AuIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW5cbiAgICogYmVzdCB0byBhc3NlcnQgd2hpY2ggdHlwZSB0aGUgdGFyZ2V0IGlzIGV4cGVjdGVkIHRvIGJlLCByYXRoZXIgdGhhblxuICAgKiBhc3NlcnRpbmcgdGhhdCBpdFx1MjAxOXMgbm90IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8uYmUuYSgnc3RyaW5nJyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLm5vdC5iZS5hcmd1bWVudHM7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBIGN1c3RvbSBlcnJvciBtZXNzYWdlIGNhbiBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHt9LCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUuYXJndW1lbnRzO1xuICAgKlxuICAgKiBUaGUgYWxpYXMgYC5Bcmd1bWVudHNgIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoIGAuYXJndW1lbnRzYC5cbiAgICpcbiAgICogQG5hbWUgYXJndW1lbnRzXG4gICAqIEBhbGlhcyBBcmd1bWVudHNcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gY2hlY2tBcmd1bWVudHMgKCkge1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCB0eXBlID0gXy50eXBlKG9iaik7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICdBcmd1bWVudHMnID09PSB0eXBlXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIGFyZ3VtZW50cyBidXQgZ290ICcgKyB0eXBlXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBhcmd1bWVudHMnXG4gICAgKTtcbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnYXJndW1lbnRzJywgY2hlY2tBcmd1bWVudHMpO1xuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ0FyZ3VtZW50cycsIGNoZWNrQXJndW1lbnRzKTtcblxuICAvKipcbiAgICogIyMjIC5lcXVhbCh2YWxbLCBtc2ddKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBzdHJpY3RseSAoYD09PWApIGVxdWFsIHRvIHRoZSBnaXZlbiBgdmFsYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5lcXVhbCgxKTtcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8uZXF1YWwoJ2ZvbycpO1xuICAgKlxuICAgKiBBZGQgYC5kZWVwYCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byB1c2UgZGVlcCBlcXVhbGl0eSBpbnN0ZWFkLiBTZWUgdGhlXG4gICAqIGBkZWVwLWVxbGAgcHJvamVjdCBwYWdlIGZvciBpbmZvIG9uIHRoZSBkZWVwIGVxdWFsaXR5IGFsZ29yaXRobTpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2NoYWlqcy9kZWVwLWVxbC5cbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBvYmplY3QgZGVlcGx5IChidXQgbm90IHN0cmljdGx5KSBlcXVhbHMgYHthOiAxfWBcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmRlZXAuZXF1YWwoe2E6IDF9KTtcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLm5vdC5lcXVhbCh7YTogMX0pO1xuICAgKlxuICAgKiAgICAgLy8gVGFyZ2V0IGFycmF5IGRlZXBseSAoYnV0IG5vdCBzdHJpY3RseSkgZXF1YWxzIGBbMSwgMl1gXG4gICAqICAgICBleHBlY3QoWzEsIDJdKS50by5kZWVwLmVxdWFsKFsxLCAyXSk7XG4gICAqICAgICBleHBlY3QoWzEsIDJdKS50by5ub3QuZXF1YWwoWzEsIDJdKTtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5lcXVhbGAuIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW5cbiAgICogYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIHRvIGl0cyBleHBlY3RlZCB2YWx1ZSwgcmF0aGVyIHRoYW5cbiAgICogbm90IGVxdWFsIHRvIG9uZSBvZiBjb3VudGxlc3MgdW5leHBlY3RlZCB2YWx1ZXMuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uZXF1YWwoMSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMSkudG8ubm90LmVxdWFsKDIpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogYC5lcXVhbGAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gICAqIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhcyB0aGVcbiAgICogc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmVxdWFsKDIsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdCgxLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uZXF1YWwoMik7XG4gICAqXG4gICAqIFRoZSBhbGlhc2VzIGAuZXF1YWxzYCBhbmQgYGVxYCBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgd2l0aCBgLmVxdWFsYC5cbiAgICpcbiAgICogQG5hbWUgZXF1YWxcbiAgICogQGFsaWFzIGVxdWFsc1xuICAgKiBAYWxpYXMgZXFcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnRFcXVhbCAodmFsLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG4gICAgaWYgKGZsYWcodGhpcywgJ2RlZXAnKSkge1xuICAgICAgdmFyIHByZXZMb2NrU3NmaSA9IGZsYWcodGhpcywgJ2xvY2tTc2ZpJyk7XG4gICAgICBmbGFnKHRoaXMsICdsb2NrU3NmaScsIHRydWUpO1xuICAgICAgdGhpcy5lcWwodmFsKTtcbiAgICAgIGZsYWcodGhpcywgJ2xvY2tTc2ZpJywgcHJldkxvY2tTc2ZpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgdmFsID09PSBvYmpcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBlcXVhbCAje2V4cH0nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGVxdWFsICN7ZXhwfSdcbiAgICAgICAgLCB2YWxcbiAgICAgICAgLCB0aGlzLl9vYmpcbiAgICAgICAgLCB0cnVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2VxdWFsJywgYXNzZXJ0RXF1YWwpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdlcXVhbHMnLCBhc3NlcnRFcXVhbCk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2VxJywgYXNzZXJ0RXF1YWwpO1xuXG4gIC8qKlxuICAgKiAjIyMgLmVxbChvYmpbLCBtc2ddKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBkZWVwbHkgZXF1YWwgdG8gdGhlIGdpdmVuIGBvYmpgLiBTZWUgdGhlXG4gICAqIGBkZWVwLWVxbGAgcHJvamVjdCBwYWdlIGZvciBpbmZvIG9uIHRoZSBkZWVwIGVxdWFsaXR5IGFsZ29yaXRobTpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2NoYWlqcy9kZWVwLWVxbC5cbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBvYmplY3QgaXMgZGVlcGx5IChidXQgbm90IHN0cmljdGx5KSBlcXVhbCB0byB7YTogMX1cbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmVxbCh7YTogMX0pLmJ1dC5ub3QuZXF1YWwoe2E6IDF9KTtcbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBhcnJheSBpcyBkZWVwbHkgKGJ1dCBub3Qgc3RyaWN0bHkpIGVxdWFsIHRvIFsxLCAyXVxuICAgKiAgICAgZXhwZWN0KFsxLCAyXSkudG8uZXFsKFsxLCAyXSkuYnV0Lm5vdC5lcXVhbChbMSwgMl0pO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmVxbGAuIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdFxuICAgKiB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGlzIGRlZXBseSBlcXVhbCB0byBpdHMgZXhwZWN0ZWQgdmFsdWUsIHJhdGhlclxuICAgKiB0aGFuIG5vdCBkZWVwbHkgZXF1YWwgdG8gb25lIG9mIGNvdW50bGVzcyB1bmV4cGVjdGVkIHZhbHVlcy5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmVxbCh7YTogMX0pOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8ubm90LmVxbCh7YjogMn0pOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogYC5lcWxgIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3IgbWVzc2FnZVxuICAgKiB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXMgdGhlXG4gICAqIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmVxbCh7YjogMn0sICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdCh7YTogMX0sICdub29vIHdoeSBmYWlsPz8nKS50by5lcWwoe2I6IDJ9KTtcbiAgICpcbiAgICogVGhlIGFsaWFzIGAuZXFsc2AgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5lcWxgLlxuICAgKlxuICAgKiBUaGUgYC5kZWVwLmVxdWFsYCBhc3NlcnRpb24gaXMgYWxtb3N0IGlkZW50aWNhbCB0byBgLmVxbGAgYnV0IHdpdGggb25lXG4gICAqIGRpZmZlcmVuY2U6IGAuZGVlcC5lcXVhbGAgY2F1c2VzIGRlZXAgZXF1YWxpdHkgY29tcGFyaXNvbnMgdG8gYWxzbyBiZSB1c2VkXG4gICAqIGZvciBhbnkgb3RoZXIgYXNzZXJ0aW9ucyB0aGF0IGZvbGxvdyBpbiB0aGUgY2hhaW4uXG4gICAqXG4gICAqIEBuYW1lIGVxbFxuICAgKiBAYWxpYXMgZXFsc1xuICAgKiBAcGFyYW0ge01peGVkfSBvYmpcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1zZyBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFzc2VydEVxbChvYmosIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBlcWwgPSBmbGFnKHRoaXMsICdlcWwnKTtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgZXFsKG9iaiwgZmxhZyh0aGlzLCAnb2JqZWN0JykpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGRlZXBseSBlcXVhbCAje2V4cH0nXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBkZWVwbHkgZXF1YWwgI3tleHB9J1xuICAgICAgLCBvYmpcbiAgICAgICwgdGhpcy5fb2JqXG4gICAgICAsIHRydWVcbiAgICApO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZXFsJywgYXNzZXJ0RXFsKTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZXFscycsIGFzc2VydEVxbCk7XG5cbiAgLyoqXG4gICAqICMjIyAuYWJvdmUoblssIG1zZ10pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGEgbnVtYmVyIG9yIGEgZGF0ZSBncmVhdGVyIHRoYW4gdGhlIGdpdmVuIG51bWJlciBvciBkYXRlIGBuYCByZXNwZWN0aXZlbHkuXG4gICAqIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIHRvIGl0cyBleHBlY3RlZFxuICAgKiB2YWx1ZS5cbiAgICpcbiAgICogICAgIGV4cGVjdCgyKS50by5lcXVhbCgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgyKS50by5iZS5hYm92ZSgxKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEFkZCBgLmxlbmd0aE9mYCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0J3MgYGxlbmd0aGBcbiAgICogb3IgYHNpemVgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgZ2l2ZW4gbnVtYmVyIGBuYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8uaGF2ZS5sZW5ndGhPZigzKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8uaGF2ZS5sZW5ndGhPZi5hYm92ZSgyKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mKDMpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGhPZi5hYm92ZSgyKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuYWJvdmVgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDIpLnRvLmVxdWFsKDIpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDEpLnRvLm5vdC5iZS5hYm92ZSgyKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIGAuYWJvdmVgIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3IgbWVzc2FnZVxuICAgKiB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXMgdGhlXG4gICAqIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5iZS5hYm92ZSgyLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3QoMSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLmFib3ZlKDIpO1xuICAgKlxuICAgKiBUaGUgYWxpYXNlcyBgLmd0YCBhbmQgYC5ncmVhdGVyVGhhbmAgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGhcbiAgICogYC5hYm92ZWAuXG4gICAqXG4gICAqIEBuYW1lIGFib3ZlXG4gICAqIEBhbGlhcyBndFxuICAgKiBAYWxpYXMgZ3JlYXRlclRoYW5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IG5cbiAgICogQHBhcmFtIHtTdHJpbmd9IG1zZyBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFzc2VydEFib3ZlIChuLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgZG9MZW5ndGggPSBmbGFnKHRoaXMsICdkb0xlbmd0aCcpXG4gICAgICAsIGZsYWdNc2cgPSBmbGFnKHRoaXMsICdtZXNzYWdlJylcbiAgICAgICwgbXNnUHJlZml4ID0gKChmbGFnTXNnKSA/IGZsYWdNc2cgKyAnOiAnIDogJycpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJylcbiAgICAgICwgb2JqVHlwZSA9IF8udHlwZShvYmopLnRvTG93ZXJDYXNlKClcbiAgICAgICwgblR5cGUgPSBfLnR5cGUobikudG9Mb3dlckNhc2UoKVxuICAgICAgLCBlcnJvck1lc3NhZ2VcbiAgICAgICwgc2hvdWxkVGhyb3cgPSB0cnVlO1xuXG4gICAgaWYgKGRvTGVuZ3RoICYmIG9ialR5cGUgIT09ICdtYXAnICYmIG9ialR5cGUgIT09ICdzZXQnKSB7XG4gICAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gICAgfVxuXG4gICAgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSA9PT0gJ2RhdGUnICYmIG5UeXBlICE9PSAnZGF0ZScpKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyAndGhlIGFyZ3VtZW50IHRvIGFib3ZlIG11c3QgYmUgYSBkYXRlJztcbiAgICB9IGVsc2UgaWYgKG5UeXBlICE9PSAnbnVtYmVyJyAmJiAoZG9MZW5ndGggfHwgb2JqVHlwZSA9PT0gJ251bWJlcicpKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyAndGhlIGFyZ3VtZW50IHRvIGFib3ZlIG11c3QgYmUgYSBudW1iZXInO1xuICAgIH0gZWxzZSBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlICE9PSAnZGF0ZScgJiYgb2JqVHlwZSAhPT0gJ251bWJlcicpKSB7XG4gICAgICB2YXIgcHJpbnRPYmogPSAob2JqVHlwZSA9PT0gJ3N0cmluZycpID8gXCInXCIgKyBvYmogKyBcIidcIiA6IG9iajtcbiAgICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArICdleHBlY3RlZCAnICsgcHJpbnRPYmogKyAnIHRvIGJlIGEgbnVtYmVyIG9yIGEgZGF0ZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNob3VsZFRocm93ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZXJyb3JNZXNzYWdlLCB1bmRlZmluZWQsIHNzZmkpO1xuICAgIH1cblxuICAgIGlmIChkb0xlbmd0aCkge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSAnbGVuZ3RoJ1xuICAgICAgICAsIGl0ZW1zQ291bnQ7XG4gICAgICBpZiAob2JqVHlwZSA9PT0gJ21hcCcgfHwgb2JqVHlwZSA9PT0gJ3NldCcpIHtcbiAgICAgICAgZGVzY3JpcHRvciA9ICdzaXplJztcbiAgICAgICAgaXRlbXNDb3VudCA9IG9iai5zaXplO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbXNDb3VudCA9IG9iai5sZW5ndGg7XG4gICAgICB9XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBpdGVtc0NvdW50ID4gblxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSAnICsgZGVzY3JpcHRvciArICcgYWJvdmUgI3tleHB9IGJ1dCBnb3QgI3thY3R9J1xuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIGEgJyArIGRlc2NyaXB0b3IgKyAnIGFib3ZlICN7ZXhwfSdcbiAgICAgICAgLCBuXG4gICAgICAgICwgaXRlbXNDb3VudFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgb2JqID4gblxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIGFib3ZlICN7ZXhwfSdcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhdCBtb3N0ICN7ZXhwfSdcbiAgICAgICAgLCBuXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2Fib3ZlJywgYXNzZXJ0QWJvdmUpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdndCcsIGFzc2VydEFib3ZlKTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZ3JlYXRlclRoYW4nLCBhc3NlcnRBYm92ZSk7XG5cbiAgLyoqXG4gICAqICMjIyAubGVhc3QoblssIG1zZ10pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGEgbnVtYmVyIG9yIGEgZGF0ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuXG4gICAqIG51bWJlciBvciBkYXRlIGBuYCByZXNwZWN0aXZlbHkuIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIHRvXG4gICAqIGl0cyBleHBlY3RlZCB2YWx1ZS5cbiAgICpcbiAgICogICAgIGV4cGVjdCgyKS50by5lcXVhbCgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgyKS50by5iZS5hdC5sZWFzdCgxKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMikudG8uYmUuYXQubGVhc3QoMik7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5sZW5ndGhPZmAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCdzIGBsZW5ndGhgXG4gICAqIG9yIGBzaXplYCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIG51bWJlciBgbmAuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmhhdmUubGVuZ3RoT2YoMyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmhhdmUubGVuZ3RoT2YuYXQubGVhc3QoMik7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGhPZigzKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubGVuZ3RoT2YuYXQubGVhc3QoMik7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmxlYXN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5lcXVhbCgxKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxKS50by5ub3QuYmUuYXQubGVhc3QoMik7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBgLmxlYXN0YCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2VcbiAgICogdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzIHRoZVxuICAgKiBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uYmUuYXQubGVhc3QoMiwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KDEsICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5hdC5sZWFzdCgyKTtcbiAgICpcbiAgICogVGhlIGFsaWFzZXMgYC5ndGVgIGFuZCBgLmdyZWF0ZXJUaGFuT3JFcXVhbGAgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGhcbiAgICogYC5sZWFzdGAuXG4gICAqXG4gICAqIEBuYW1lIGxlYXN0XG4gICAqIEBhbGlhcyBndGVcbiAgICogQGFsaWFzIGdyZWF0ZXJUaGFuT3JFcXVhbFxuICAgKiBAcGFyYW0ge051bWJlcn0gblxuICAgKiBAcGFyYW0ge1N0cmluZ30gbXNnIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0TGVhc3QgKG4sIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBkb0xlbmd0aCA9IGZsYWcodGhpcywgJ2RvTGVuZ3RoJylcbiAgICAgICwgZmxhZ01zZyA9IGZsYWcodGhpcywgJ21lc3NhZ2UnKVxuICAgICAgLCBtc2dQcmVmaXggPSAoKGZsYWdNc2cpID8gZmxhZ01zZyArICc6ICcgOiAnJylcbiAgICAgICwgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKVxuICAgICAgLCBvYmpUeXBlID0gXy50eXBlKG9iaikudG9Mb3dlckNhc2UoKVxuICAgICAgLCBuVHlwZSA9IF8udHlwZShuKS50b0xvd2VyQ2FzZSgpXG4gICAgICAsIGVycm9yTWVzc2FnZVxuICAgICAgLCBzaG91bGRUaHJvdyA9IHRydWU7XG5cbiAgICBpZiAoZG9MZW5ndGggJiYgb2JqVHlwZSAhPT0gJ21hcCcgJiYgb2JqVHlwZSAhPT0gJ3NldCcpIHtcbiAgICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KCdsZW5ndGgnKTtcbiAgICB9XG5cbiAgICBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlID09PSAnZGF0ZScgJiYgblR5cGUgIT09ICdkYXRlJykpIHtcbiAgICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArICd0aGUgYXJndW1lbnQgdG8gbGVhc3QgbXVzdCBiZSBhIGRhdGUnO1xuICAgIH0gZWxzZSBpZiAoblR5cGUgIT09ICdudW1iZXInICYmIChkb0xlbmd0aCB8fCBvYmpUeXBlID09PSAnbnVtYmVyJykpIHtcbiAgICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArICd0aGUgYXJndW1lbnQgdG8gbGVhc3QgbXVzdCBiZSBhIG51bWJlcic7XG4gICAgfSBlbHNlIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgIT09ICdkYXRlJyAmJiBvYmpUeXBlICE9PSAnbnVtYmVyJykpIHtcbiAgICAgIHZhciBwcmludE9iaiA9IChvYmpUeXBlID09PSAnc3RyaW5nJykgPyBcIidcIiArIG9iaiArIFwiJ1wiIDogb2JqO1xuICAgICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgJ2V4cGVjdGVkICcgKyBwcmludE9iaiArICcgdG8gYmUgYSBudW1iZXIgb3IgYSBkYXRlJztcbiAgICB9IGVsc2Uge1xuICAgICAgc2hvdWxkVGhyb3cgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVGhyb3cpIHtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihlcnJvck1lc3NhZ2UsIHVuZGVmaW5lZCwgc3NmaSk7XG4gICAgfVxuXG4gICAgaWYgKGRvTGVuZ3RoKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9ICdsZW5ndGgnXG4gICAgICAgICwgaXRlbXNDb3VudDtcbiAgICAgIGlmIChvYmpUeXBlID09PSAnbWFwJyB8fCBvYmpUeXBlID09PSAnc2V0Jykge1xuICAgICAgICBkZXNjcmlwdG9yID0gJ3NpemUnO1xuICAgICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtc0NvdW50ID0gb2JqLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIGl0ZW1zQ291bnQgPj0gblxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSAnICsgZGVzY3JpcHRvciArICcgYXQgbGVhc3QgI3tleHB9IGJ1dCBnb3QgI3thY3R9J1xuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSAnICsgZGVzY3JpcHRvciArICcgYmVsb3cgI3tleHB9J1xuICAgICAgICAsIG5cbiAgICAgICAgLCBpdGVtc0NvdW50XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBvYmogPj0gblxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIGF0IGxlYXN0ICN7ZXhwfSdcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBiZWxvdyAje2V4cH0nXG4gICAgICAgICwgblxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdsZWFzdCcsIGFzc2VydExlYXN0KTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZ3RlJywgYXNzZXJ0TGVhc3QpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdncmVhdGVyVGhhbk9yRXF1YWwnLCBhc3NlcnRMZWFzdCk7XG5cbiAgLyoqXG4gICAqICMjIyAuYmVsb3coblssIG1zZ10pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGEgbnVtYmVyIG9yIGEgZGF0ZSBsZXNzIHRoYW4gdGhlIGdpdmVuIG51bWJlciBvciBkYXRlIGBuYCByZXNwZWN0aXZlbHkuXG4gICAqIEhvd2V2ZXIsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIHRvIGl0cyBleHBlY3RlZFxuICAgKiB2YWx1ZS5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5lcXVhbCgxKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxKS50by5iZS5iZWxvdygyKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEFkZCBgLmxlbmd0aE9mYCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0J3MgYGxlbmd0aGBcbiAgICogb3IgYHNpemVgIGlzIGxlc3MgdGhhbiB0aGUgZ2l2ZW4gbnVtYmVyIGBuYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8uaGF2ZS5sZW5ndGhPZigzKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8uaGF2ZS5sZW5ndGhPZi5iZWxvdyg0KTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aCgzKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubGVuZ3RoT2YuYmVsb3coNCk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmJlbG93YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgyKS50by5lcXVhbCgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgyKS50by5ub3QuYmUuYmVsb3coMSk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBgLmJlbG93YCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2VcbiAgICogdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzIHRoZVxuICAgKiBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMikudG8uYmUuYmVsb3coMSwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KDIsICdub29vIHdoeSBmYWlsPz8nKS50by5iZS5iZWxvdygxKTtcbiAgICpcbiAgICogVGhlIGFsaWFzZXMgYC5sdGAgYW5kIGAubGVzc1RoYW5gIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoXG4gICAqIGAuYmVsb3dgLlxuICAgKlxuICAgKiBAbmFtZSBiZWxvd1xuICAgKiBAYWxpYXMgbHRcbiAgICogQGFsaWFzIGxlc3NUaGFuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnRCZWxvdyAobiwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIGRvTGVuZ3RoID0gZmxhZyh0aGlzLCAnZG9MZW5ndGgnKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIG1zZ1ByZWZpeCA9ICgoZmxhZ01zZykgPyBmbGFnTXNnICsgJzogJyA6ICcnKVxuICAgICAgLCBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpXG4gICAgICAsIG9ialR5cGUgPSBfLnR5cGUob2JqKS50b0xvd2VyQ2FzZSgpXG4gICAgICAsIG5UeXBlID0gXy50eXBlKG4pLnRvTG93ZXJDYXNlKClcbiAgICAgICwgZXJyb3JNZXNzYWdlXG4gICAgICAsIHNob3VsZFRocm93ID0gdHJ1ZTtcblxuICAgIGlmIChkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSAnbWFwJyAmJiBvYmpUeXBlICE9PSAnc2V0Jykge1xuICAgICAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkoJ2xlbmd0aCcpO1xuICAgIH1cblxuICAgIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgPT09ICdkYXRlJyAmJiBuVHlwZSAhPT0gJ2RhdGUnKSkge1xuICAgICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgJ3RoZSBhcmd1bWVudCB0byBiZWxvdyBtdXN0IGJlIGEgZGF0ZSc7XG4gICAgfSBlbHNlIGlmIChuVHlwZSAhPT0gJ251bWJlcicgJiYgKGRvTGVuZ3RoIHx8IG9ialR5cGUgPT09ICdudW1iZXInKSkge1xuICAgICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgJ3RoZSBhcmd1bWVudCB0byBiZWxvdyBtdXN0IGJlIGEgbnVtYmVyJztcbiAgICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSAhPT0gJ2RhdGUnICYmIG9ialR5cGUgIT09ICdudW1iZXInKSkge1xuICAgICAgdmFyIHByaW50T2JqID0gKG9ialR5cGUgPT09ICdzdHJpbmcnKSA/IFwiJ1wiICsgb2JqICsgXCInXCIgOiBvYmo7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyAnZXhwZWN0ZWQgJyArIHByaW50T2JqICsgJyB0byBiZSBhIG51bWJlciBvciBhIGRhdGUnO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG91bGRUaHJvdyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRUaHJvdykge1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGVycm9yTWVzc2FnZSwgdW5kZWZpbmVkLCBzc2ZpKTtcbiAgICB9XG5cbiAgICBpZiAoZG9MZW5ndGgpIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gJ2xlbmd0aCdcbiAgICAgICAgLCBpdGVtc0NvdW50O1xuICAgICAgaWYgKG9ialR5cGUgPT09ICdtYXAnIHx8IG9ialR5cGUgPT09ICdzZXQnKSB7XG4gICAgICAgIGRlc2NyaXB0b3IgPSAnc2l6ZSc7XG4gICAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICAgICAgfVxuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgaXRlbXNDb3VudCA8IG5cbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgJyArIGRlc2NyaXB0b3IgKyAnIGJlbG93ICN7ZXhwfSBidXQgZ290ICN7YWN0fSdcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBhICcgKyBkZXNjcmlwdG9yICsgJyBiZWxvdyAje2V4cH0nXG4gICAgICAgICwgblxuICAgICAgICAsIGl0ZW1zQ291bnRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIG9iaiA8IG5cbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBiZWxvdyAje2V4cH0nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgYXQgbGVhc3QgI3tleHB9J1xuICAgICAgICAsIG5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnYmVsb3cnLCBhc3NlcnRCZWxvdyk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2x0JywgYXNzZXJ0QmVsb3cpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdsZXNzVGhhbicsIGFzc2VydEJlbG93KTtcblxuICAvKipcbiAgICogIyMjIC5tb3N0KG5bLCBtc2ddKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBhIG51bWJlciBvciBhIGRhdGUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiBudW1iZXJcbiAgICogb3IgZGF0ZSBgbmAgcmVzcGVjdGl2ZWx5LiBIb3dldmVyLCBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCBpcyBlcXVhbCB0byBpdHNcbiAgICogZXhwZWN0ZWQgdmFsdWUuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uZXF1YWwoMSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMSkudG8uYmUuYXQubW9zdCgyKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMSkudG8uYmUuYXQubW9zdCgxKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEFkZCBgLmxlbmd0aE9mYCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0J3MgYGxlbmd0aGBcbiAgICogb3IgYHNpemVgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gbnVtYmVyIGBuYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8uaGF2ZS5sZW5ndGhPZigzKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8uaGF2ZS5sZW5ndGhPZi5hdC5tb3N0KDQpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubGVuZ3RoT2YoMyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mLmF0Lm1vc3QoNCk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLm1vc3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDIpLnRvLmVxdWFsKDIpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDIpLnRvLm5vdC5iZS5hdC5tb3N0KDEpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogYC5tb3N0YCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2VcbiAgICogdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzIHRoZVxuICAgKiBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMikudG8uYmUuYXQubW9zdCgxLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3QoMiwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLmF0Lm1vc3QoMSk7XG4gICAqXG4gICAqIFRoZSBhbGlhc2VzIGAubHRlYCBhbmQgYC5sZXNzVGhhbk9yRXF1YWxgIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoXG4gICAqIGAubW9zdGAuXG4gICAqXG4gICAqIEBuYW1lIG1vc3RcbiAgICogQGFsaWFzIGx0ZVxuICAgKiBAYWxpYXMgbGVzc1RoYW5PckVxdWFsXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnRNb3N0IChuLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgZG9MZW5ndGggPSBmbGFnKHRoaXMsICdkb0xlbmd0aCcpXG4gICAgICAsIGZsYWdNc2cgPSBmbGFnKHRoaXMsICdtZXNzYWdlJylcbiAgICAgICwgbXNnUHJlZml4ID0gKChmbGFnTXNnKSA/IGZsYWdNc2cgKyAnOiAnIDogJycpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJylcbiAgICAgICwgb2JqVHlwZSA9IF8udHlwZShvYmopLnRvTG93ZXJDYXNlKClcbiAgICAgICwgblR5cGUgPSBfLnR5cGUobikudG9Mb3dlckNhc2UoKVxuICAgICAgLCBlcnJvck1lc3NhZ2VcbiAgICAgICwgc2hvdWxkVGhyb3cgPSB0cnVlO1xuXG4gICAgaWYgKGRvTGVuZ3RoICYmIG9ialR5cGUgIT09ICdtYXAnICYmIG9ialR5cGUgIT09ICdzZXQnKSB7XG4gICAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gICAgfVxuXG4gICAgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSA9PT0gJ2RhdGUnICYmIG5UeXBlICE9PSAnZGF0ZScpKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyAndGhlIGFyZ3VtZW50IHRvIG1vc3QgbXVzdCBiZSBhIGRhdGUnO1xuICAgIH0gZWxzZSBpZiAoblR5cGUgIT09ICdudW1iZXInICYmIChkb0xlbmd0aCB8fCBvYmpUeXBlID09PSAnbnVtYmVyJykpIHtcbiAgICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArICd0aGUgYXJndW1lbnQgdG8gbW9zdCBtdXN0IGJlIGEgbnVtYmVyJztcbiAgICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSAhPT0gJ2RhdGUnICYmIG9ialR5cGUgIT09ICdudW1iZXInKSkge1xuICAgICAgdmFyIHByaW50T2JqID0gKG9ialR5cGUgPT09ICdzdHJpbmcnKSA/IFwiJ1wiICsgb2JqICsgXCInXCIgOiBvYmo7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyAnZXhwZWN0ZWQgJyArIHByaW50T2JqICsgJyB0byBiZSBhIG51bWJlciBvciBhIGRhdGUnO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG91bGRUaHJvdyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRUaHJvdykge1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGVycm9yTWVzc2FnZSwgdW5kZWZpbmVkLCBzc2ZpKTtcbiAgICB9XG5cbiAgICBpZiAoZG9MZW5ndGgpIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gJ2xlbmd0aCdcbiAgICAgICAgLCBpdGVtc0NvdW50O1xuICAgICAgaWYgKG9ialR5cGUgPT09ICdtYXAnIHx8IG9ialR5cGUgPT09ICdzZXQnKSB7XG4gICAgICAgIGRlc2NyaXB0b3IgPSAnc2l6ZSc7XG4gICAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICAgICAgfVxuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgaXRlbXNDb3VudCA8PSBuXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhICcgKyBkZXNjcmlwdG9yICsgJyBhdCBtb3N0ICN7ZXhwfSBidXQgZ290ICN7YWN0fSdcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgJyArIGRlc2NyaXB0b3IgKyAnIGFib3ZlICN7ZXhwfSdcbiAgICAgICAgLCBuXG4gICAgICAgICwgaXRlbXNDb3VudFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgb2JqIDw9IG5cbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhdCBtb3N0ICN7ZXhwfSdcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhYm92ZSAje2V4cH0nXG4gICAgICAgICwgblxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdtb3N0JywgYXNzZXJ0TW9zdCk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2x0ZScsIGFzc2VydE1vc3QpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdsZXNzVGhhbk9yRXF1YWwnLCBhc3NlcnRNb3N0KTtcblxuICAvKipcbiAgICogIyMjIC53aXRoaW4oc3RhcnQsIGZpbmlzaFssIG1zZ10pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGEgbnVtYmVyIG9yIGEgZGF0ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuXG4gICAqIG51bWJlciBvciBkYXRlIGBzdGFydGAsIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIG51bWJlciBvciBkYXRlIGBmaW5pc2hgIHJlc3BlY3RpdmVseS5cbiAgICogSG93ZXZlciwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQgaXMgZXF1YWwgdG8gaXRzIGV4cGVjdGVkXG4gICAqIHZhbHVlLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDIpLnRvLmVxdWFsKDIpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDIpLnRvLmJlLndpdGhpbigxLCAzKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMikudG8uYmUud2l0aGluKDIsIDMpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgyKS50by5iZS53aXRoaW4oMSwgMik7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5sZW5ndGhPZmAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCdzIGBsZW5ndGhgXG4gICAqIG9yIGBzaXplYCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIG51bWJlciBgc3RhcnRgLCBhbmQgbGVzc1xuICAgKiB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiBudW1iZXIgYGZpbmlzaGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmhhdmUubGVuZ3RoT2YoMyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmhhdmUubGVuZ3RoT2Yud2l0aGluKDIsIDQpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubGVuZ3RoT2YoMyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mLndpdGhpbigyLCA0KTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAud2l0aGluYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5lcXVhbCgxKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxKS50by5ub3QuYmUud2l0aGluKDIsIDQpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogYC53aXRoaW5gIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3JcbiAgICogbWVzc2FnZSB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXNcbiAgICogdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCg0KS50by5iZS53aXRoaW4oMSwgMywgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KDQsICdub29vIHdoeSBmYWlsPz8nKS50by5iZS53aXRoaW4oMSwgMyk7XG4gICAqXG4gICAqIEBuYW1lIHdpdGhpblxuICAgKiBAcGFyYW0ge051bWJlcn0gc3RhcnQgbG93ZXIgYm91bmQgaW5jbHVzaXZlXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBmaW5pc2ggdXBwZXIgYm91bmQgaW5jbHVzaXZlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCd3aXRoaW4nLCBmdW5jdGlvbiAoc3RhcnQsIGZpbmlzaCwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIGRvTGVuZ3RoID0gZmxhZyh0aGlzLCAnZG9MZW5ndGgnKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIG1zZ1ByZWZpeCA9ICgoZmxhZ01zZykgPyBmbGFnTXNnICsgJzogJyA6ICcnKVxuICAgICAgLCBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpXG4gICAgICAsIG9ialR5cGUgPSBfLnR5cGUob2JqKS50b0xvd2VyQ2FzZSgpXG4gICAgICAsIHN0YXJ0VHlwZSA9IF8udHlwZShzdGFydCkudG9Mb3dlckNhc2UoKVxuICAgICAgLCBmaW5pc2hUeXBlID0gXy50eXBlKGZpbmlzaCkudG9Mb3dlckNhc2UoKVxuICAgICAgLCBlcnJvck1lc3NhZ2VcbiAgICAgICwgc2hvdWxkVGhyb3cgPSB0cnVlXG4gICAgICAsIHJhbmdlID0gKHN0YXJ0VHlwZSA9PT0gJ2RhdGUnICYmIGZpbmlzaFR5cGUgPT09ICdkYXRlJylcbiAgICAgICAgICA/IHN0YXJ0LnRvSVNPU3RyaW5nKCkgKyAnLi4nICsgZmluaXNoLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICA6IHN0YXJ0ICsgJy4uJyArIGZpbmlzaDtcblxuICAgIGlmIChkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSAnbWFwJyAmJiBvYmpUeXBlICE9PSAnc2V0Jykge1xuICAgICAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkoJ2xlbmd0aCcpO1xuICAgIH1cblxuICAgIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgPT09ICdkYXRlJyAmJiAoc3RhcnRUeXBlICE9PSAnZGF0ZScgfHwgZmluaXNoVHlwZSAhPT0gJ2RhdGUnKSkpIHtcbiAgICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArICd0aGUgYXJndW1lbnRzIHRvIHdpdGhpbiBtdXN0IGJlIGRhdGVzJztcbiAgICB9IGVsc2UgaWYgKChzdGFydFR5cGUgIT09ICdudW1iZXInIHx8IGZpbmlzaFR5cGUgIT09ICdudW1iZXInKSAmJiAoZG9MZW5ndGggfHwgb2JqVHlwZSA9PT0gJ251bWJlcicpKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyAndGhlIGFyZ3VtZW50cyB0byB3aXRoaW4gbXVzdCBiZSBudW1iZXJzJztcbiAgICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSAhPT0gJ2RhdGUnICYmIG9ialR5cGUgIT09ICdudW1iZXInKSkge1xuICAgICAgdmFyIHByaW50T2JqID0gKG9ialR5cGUgPT09ICdzdHJpbmcnKSA/IFwiJ1wiICsgb2JqICsgXCInXCIgOiBvYmo7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyAnZXhwZWN0ZWQgJyArIHByaW50T2JqICsgJyB0byBiZSBhIG51bWJlciBvciBhIGRhdGUnO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG91bGRUaHJvdyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRUaHJvdykge1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGVycm9yTWVzc2FnZSwgdW5kZWZpbmVkLCBzc2ZpKTtcbiAgICB9XG5cbiAgICBpZiAoZG9MZW5ndGgpIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gJ2xlbmd0aCdcbiAgICAgICAgLCBpdGVtc0NvdW50O1xuICAgICAgaWYgKG9ialR5cGUgPT09ICdtYXAnIHx8IG9ialR5cGUgPT09ICdzZXQnKSB7XG4gICAgICAgIGRlc2NyaXB0b3IgPSAnc2l6ZSc7XG4gICAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICAgICAgfVxuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgaXRlbXNDb3VudCA+PSBzdGFydCAmJiBpdGVtc0NvdW50IDw9IGZpbmlzaFxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSAnICsgZGVzY3JpcHRvciArICcgd2l0aGluICcgKyByYW5nZVxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIGEgJyArIGRlc2NyaXB0b3IgKyAnIHdpdGhpbiAnICsgcmFuZ2VcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIG9iaiA+PSBzdGFydCAmJiBvYmogPD0gZmluaXNoXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgd2l0aGluICcgKyByYW5nZVxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSB3aXRoaW4gJyArIHJhbmdlXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuaW5zdGFuY2VvZihjb25zdHJ1Y3RvclssIG1zZ10pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGFuIGluc3RhbmNlIG9mIHRoZSBnaXZlbiBgY29uc3RydWN0b3JgLlxuICAgKlxuICAgKiAgICAgZnVuY3Rpb24gQ2F0ICgpIHsgfVxuICAgKlxuICAgKiAgICAgZXhwZWN0KG5ldyBDYXQoKSkudG8uYmUuYW4uaW5zdGFuY2VvZihDYXQpO1xuICAgKiAgICAgZXhwZWN0KFsxLCAyXSkudG8uYmUuYW4uaW5zdGFuY2VvZihBcnJheSk7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuaW5zdGFuY2VvZmAuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5ub3QuYmUuYW4uaW5zdGFuY2VvZihBcnJheSk7XG4gICAqXG4gICAqIGAuaW5zdGFuY2VvZmAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvclxuICAgKiBtZXNzYWdlIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhc1xuICAgKiB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmJlLmFuLmluc3RhbmNlb2YoQXJyYXksICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdCgxLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUuYW4uaW5zdGFuY2VvZihBcnJheSk7XG4gICAqXG4gICAqIER1ZSB0byBsaW1pdGF0aW9ucyBpbiBFUzUsIGAuaW5zdGFuY2VvZmAgbWF5IG5vdCBhbHdheXMgd29yayBhcyBleHBlY3RlZFxuICAgKiB3aGVuIHVzaW5nIGEgdHJhbnNwaWxlciBzdWNoIGFzIEJhYmVsIG9yIFR5cGVTY3JpcHQuIEluIHBhcnRpY3VsYXIsIGl0IG1heVxuICAgKiBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cyB3aGVuIHN1YmNsYXNzaW5nIGJ1aWx0LWluIG9iamVjdCBzdWNoIGFzXG4gICAqIGBBcnJheWAsIGBFcnJvcmAsIGFuZCBgTWFwYC4gU2VlIHlvdXIgdHJhbnNwaWxlcidzIGRvY3MgZm9yIGRldGFpbHM6XG4gICAqXG4gICAqIC0gKFtCYWJlbF0oaHR0cHM6Ly9iYWJlbGpzLmlvL2RvY3MvdXNhZ2UvY2F2ZWF0cy8jY2xhc3NlcykpXG4gICAqIC0gKFtUeXBlU2NyaXB0XShodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvd2lraS9CcmVha2luZy1DaGFuZ2VzI2V4dGVuZGluZy1idWlsdC1pbnMtbGlrZS1lcnJvci1hcnJheS1hbmQtbWFwLW1heS1uby1sb25nZXItd29yaykpXG4gICAqXG4gICAqIFRoZSBhbGlhcyBgLmluc3RhbmNlT2ZgIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoIGAuaW5zdGFuY2VvZmAuXG4gICAqXG4gICAqIEBuYW1lIGluc3RhbmNlb2ZcbiAgICogQHBhcmFtIHtDb25zdHJ1Y3Rvcn0gY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1zZyBfb3B0aW9uYWxfXG4gICAqIEBhbGlhcyBpbnN0YW5jZU9mXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFzc2VydEluc3RhbmNlT2YgKGNvbnN0cnVjdG9yLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcblxuICAgIHZhciB0YXJnZXQgPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgIHZhciBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpO1xuICAgIHZhciBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhciBpc0luc3RhbmNlT2YgPSB0YXJnZXQgaW5zdGFuY2VvZiBjb25zdHJ1Y3RvcjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUeXBlRXJyb3IpIHtcbiAgICAgICAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgJzogJyA6ICcnO1xuICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgZmxhZ01zZyArICdUaGUgaW5zdGFuY2VvZiBhc3NlcnRpb24gbmVlZHMgYSBjb25zdHJ1Y3RvciBidXQgJ1xuICAgICAgICAgICAgKyBfLnR5cGUoY29uc3RydWN0b3IpICsgJyB3YXMgZ2l2ZW4uJyxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgc3NmaVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIHZhciBuYW1lID0gXy5nZXROYW1lKGNvbnN0cnVjdG9yKTtcbiAgICBpZiAobmFtZSA9PT0gbnVsbCkge1xuICAgICAgbmFtZSA9ICdhbiB1bm5hbWVkIGNvbnN0cnVjdG9yJztcbiAgICB9XG5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgaXNJbnN0YW5jZU9mXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIGFuIGluc3RhbmNlIG9mICcgKyBuYW1lXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBhbiBpbnN0YW5jZSBvZiAnICsgbmFtZVxuICAgICk7XG4gIH07XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnaW5zdGFuY2VvZicsIGFzc2VydEluc3RhbmNlT2YpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdpbnN0YW5jZU9mJywgYXNzZXJ0SW5zdGFuY2VPZik7XG5cbiAgLyoqXG4gICAqICMjIyAucHJvcGVydHkobmFtZVssIHZhbFssIG1zZ11dKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBoYXMgYSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiBrZXkgYG5hbWVgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaGF2ZS5wcm9wZXJ0eSgnYScpO1xuICAgKlxuICAgKiBXaGVuIGB2YWxgIGlzIHByb3ZpZGVkLCBgLnByb3BlcnR5YCBhbHNvIGFzc2VydHMgdGhhdCB0aGUgcHJvcGVydHkncyB2YWx1ZVxuICAgKiBpcyBlcXVhbCB0byB0aGUgZ2l2ZW4gYHZhbGAuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLnByb3BlcnR5KCdhJywgMSk7XG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHN0cmljdCAoYD09PWApIGVxdWFsaXR5IGlzIHVzZWQuIEFkZCBgLmRlZXBgIGVhcmxpZXIgaW4gdGhlXG4gICAqIGNoYWluIHRvIHVzZSBkZWVwIGVxdWFsaXR5IGluc3RlYWQuIFNlZSB0aGUgYGRlZXAtZXFsYCBwcm9qZWN0IHBhZ2UgZm9yXG4gICAqIGluZm8gb24gdGhlIGRlZXAgZXF1YWxpdHkgYWxnb3JpdGhtOiBodHRwczovL2dpdGh1Yi5jb20vY2hhaWpzL2RlZXAtZXFsLlxuICAgKlxuICAgKiAgICAgLy8gVGFyZ2V0IG9iamVjdCBkZWVwbHkgKGJ1dCBub3Qgc3RyaWN0bHkpIGhhcyBwcm9wZXJ0eSBgeDoge2E6IDF9YFxuICAgKiAgICAgZXhwZWN0KHt4OiB7YTogMX19KS50by5oYXZlLmRlZXAucHJvcGVydHkoJ3gnLCB7YTogMX0pO1xuICAgKiAgICAgZXhwZWN0KHt4OiB7YTogMX19KS50by5ub3QuaGF2ZS5wcm9wZXJ0eSgneCcsIHthOiAxfSk7XG4gICAqXG4gICAqIFRoZSB0YXJnZXQncyBlbnVtZXJhYmxlIGFuZCBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzIGFyZSBhbHdheXMgaW5jbHVkZWRcbiAgICogaW4gdGhlIHNlYXJjaC4gQnkgZGVmYXVsdCwgYm90aCBvd24gYW5kIGluaGVyaXRlZCBwcm9wZXJ0aWVzIGFyZSBpbmNsdWRlZC5cbiAgICogQWRkIGAub3duYCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBleGNsdWRlIGluaGVyaXRlZCBwcm9wZXJ0aWVzIGZyb20gdGhlXG4gICAqIHNlYXJjaC5cbiAgICpcbiAgICogICAgIE9iamVjdC5wcm90b3R5cGUuYiA9IDI7XG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLm93bi5wcm9wZXJ0eSgnYScpO1xuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaGF2ZS5vd24ucHJvcGVydHkoJ2EnLCAxKTtcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmhhdmUucHJvcGVydHkoJ2InKTtcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLm5vdC5oYXZlLm93bi5wcm9wZXJ0eSgnYicpO1xuICAgKlxuICAgKiBgLmRlZXBgIGFuZCBgLm93bmAgY2FuIGJlIGNvbWJpbmVkLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHt4OiB7YTogMX19KS50by5oYXZlLmRlZXAub3duLnByb3BlcnR5KCd4Jywge2E6IDF9KTtcbiAgICpcbiAgICogQWRkIGAubmVzdGVkYCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBlbmFibGUgZG90LSBhbmQgYnJhY2tldC1ub3RhdGlvbiB3aGVuXG4gICAqIHJlZmVyZW5jaW5nIG5lc3RlZCBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiB7YjogWyd4JywgJ3knXX19KS50by5oYXZlLm5lc3RlZC5wcm9wZXJ0eSgnYS5iWzFdJyk7XG4gICAqICAgICBleHBlY3Qoe2E6IHtiOiBbJ3gnLCAneSddfX0pLnRvLmhhdmUubmVzdGVkLnByb3BlcnR5KCdhLmJbMV0nLCAneScpO1xuICAgKlxuICAgKiBJZiBgLmAgb3IgYFtdYCBhcmUgcGFydCBvZiBhbiBhY3R1YWwgcHJvcGVydHkgbmFtZSwgdGhleSBjYW4gYmUgZXNjYXBlZCBieVxuICAgKiBhZGRpbmcgdHdvIGJhY2tzbGFzaGVzIGJlZm9yZSB0aGVtLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHsnLmEnOiB7J1tiXSc6ICd4J319KS50by5oYXZlLm5lc3RlZC5wcm9wZXJ0eSgnXFxcXC5hLlxcXFxbYlxcXFxdJyk7XG4gICAqXG4gICAqIGAuZGVlcGAgYW5kIGAubmVzdGVkYCBjYW4gYmUgY29tYmluZWQuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IHtiOiBbe2M6IDN9XX19KVxuICAgKiAgICAgICAudG8uaGF2ZS5kZWVwLm5lc3RlZC5wcm9wZXJ0eSgnYS5iWzBdJywge2M6IDN9KTtcbiAgICpcbiAgICogYC5vd25gIGFuZCBgLm5lc3RlZGAgY2Fubm90IGJlIGNvbWJpbmVkLlxuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLnByb3BlcnR5YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLm5vdC5oYXZlLnByb3BlcnR5KCdiJyk7XG4gICAqXG4gICAqIEhvd2V2ZXIsIGl0J3MgZGFuZ2Vyb3VzIHRvIG5lZ2F0ZSBgLnByb3BlcnR5YCB3aGVuIHByb3ZpZGluZyBgdmFsYC4gVGhlXG4gICAqIHByb2JsZW0gaXMgdGhhdCBpdCBjcmVhdGVzIHVuY2VydGFpbiBleHBlY3RhdGlvbnMgYnkgYXNzZXJ0aW5nIHRoYXQgdGhlXG4gICAqIHRhcmdldCBlaXRoZXIgZG9lc24ndCBoYXZlIGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4ga2V5IGBuYW1lYCwgb3IgdGhhdCBpdFxuICAgKiBkb2VzIGhhdmUgYSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiBrZXkgYG5hbWVgIGJ1dCBpdHMgdmFsdWUgaXNuJ3QgZXF1YWwgdG9cbiAgICogdGhlIGdpdmVuIGB2YWxgLiBJdCdzIG9mdGVuIGJlc3QgdG8gaWRlbnRpZnkgdGhlIGV4YWN0IG91dHB1dCB0aGF0J3NcbiAgICogZXhwZWN0ZWQsIGFuZCB0aGVuIHdyaXRlIGFuIGFzc2VydGlvbiB0aGF0IG9ubHkgYWNjZXB0cyB0aGF0IGV4YWN0IG91dHB1dC5cbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzbid0IGV4cGVjdGVkIHRvIGhhdmUgYSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiBrZXlcbiAgICogYG5hbWVgLCBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IGV4YWN0bHkgdGhhdC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YjogMn0pLnRvLm5vdC5oYXZlLnByb3BlcnR5KCdhJyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoe2I6IDJ9KS50by5ub3QuaGF2ZS5wcm9wZXJ0eSgnYScsIDEpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGV4cGVjdGVkIHRvIGhhdmUgYSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiBrZXkgYG5hbWVgLFxuICAgKiBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHByb3BlcnR5IGhhcyBpdHMgZXhwZWN0ZWQgdmFsdWUsIHJhdGhlclxuICAgKiB0aGFuIGFzc2VydGluZyB0aGF0IGl0IGRvZXNuJ3QgaGF2ZSBvbmUgb2YgbWFueSB1bmV4cGVjdGVkIHZhbHVlcy5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogM30pLnRvLmhhdmUucHJvcGVydHkoJ2EnLCAzKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YTogM30pLnRvLm5vdC5oYXZlLnByb3BlcnR5KCdhJywgMSk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBgLnByb3BlcnR5YCBjaGFuZ2VzIHRoZSB0YXJnZXQgb2YgYW55IGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluXG4gICAqIHRvIGJlIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgZnJvbSB0aGUgb3JpZ2luYWwgdGFyZ2V0IG9iamVjdC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmhhdmUucHJvcGVydHkoJ2EnKS50aGF0LmlzLmEoJ251bWJlcicpO1xuICAgKlxuICAgKiBgLnByb3BlcnR5YCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yXG4gICAqIG1lc3NhZ2UgdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzXG4gICAqIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuIFdoZW4gbm90IHByb3ZpZGluZyBgdmFsYCwgb25seSB1c2UgdGhlXG4gICAqIHNlY29uZCBmb3JtLlxuICAgKlxuICAgKiAgICAgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmhhdmUucHJvcGVydHkoJ2EnLCAyLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3Qoe2E6IDF9LCAnbm9vbyB3aHkgZmFpbD8/JykudG8uaGF2ZS5wcm9wZXJ0eSgnYScsIDIpO1xuICAgKiAgICAgZXhwZWN0KHthOiAxfSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmhhdmUucHJvcGVydHkoJ2InKTtcbiAgICpcbiAgICogICAgIC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaGF2ZS5wcm9wZXJ0eSgnYicsIHVuZGVmaW5lZCwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKlxuICAgKiBUaGUgYWJvdmUgYXNzZXJ0aW9uIGlzbid0IHRoZSBzYW1lIHRoaW5nIGFzIG5vdCBwcm92aWRpbmcgYHZhbGAuIEluc3RlYWQsXG4gICAqIGl0J3MgYXNzZXJ0aW5nIHRoYXQgdGhlIHRhcmdldCBvYmplY3QgaGFzIGEgYGJgIHByb3BlcnR5IHRoYXQncyBlcXVhbCB0b1xuICAgKiBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogVGhlIGFzc2VydGlvbnMgYC5vd25Qcm9wZXJ0eWAgYW5kIGAuaGF2ZU93blByb3BlcnR5YCBjYW4gYmUgdXNlZFxuICAgKiBpbnRlcmNoYW5nZWFibHkgd2l0aCBgLm93bi5wcm9wZXJ0eWAuXG4gICAqXG4gICAqIEBuYW1lIHByb3BlcnR5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbCAob3B0aW9uYWwpXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAcmV0dXJucyB2YWx1ZSBvZiBwcm9wZXJ0eSBmb3IgY2hhaW5pbmdcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0UHJvcGVydHkgKG5hbWUsIHZhbCwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG5cbiAgICB2YXIgaXNOZXN0ZWQgPSBmbGFnKHRoaXMsICduZXN0ZWQnKVxuICAgICAgLCBpc093biA9IGZsYWcodGhpcywgJ293bicpXG4gICAgICAsIGZsYWdNc2cgPSBmbGFnKHRoaXMsICdtZXNzYWdlJylcbiAgICAgICwgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKVxuICAgICAgLCBuYW1lVHlwZSA9IHR5cGVvZiBuYW1lO1xuXG4gICAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgJzogJyA6ICcnO1xuXG4gICAgaWYgKGlzTmVzdGVkKSB7XG4gICAgICBpZiAobmFtZVR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgICBmbGFnTXNnICsgJ3RoZSBhcmd1bWVudCB0byBwcm9wZXJ0eSBtdXN0IGJlIGEgc3RyaW5nIHdoZW4gdXNpbmcgbmVzdGVkIHN5bnRheCcsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHNzZmlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5hbWVUeXBlICE9PSAnc3RyaW5nJyAmJiBuYW1lVHlwZSAhPT0gJ251bWJlcicgJiYgbmFtZVR5cGUgIT09ICdzeW1ib2wnKSB7XG4gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgICBmbGFnTXNnICsgJ3RoZSBhcmd1bWVudCB0byBwcm9wZXJ0eSBtdXN0IGJlIGEgc3RyaW5nLCBudW1iZXIsIG9yIHN5bWJvbCcsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHNzZmlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNOZXN0ZWQgJiYgaXNPd24pIHtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgZmxhZ01zZyArICdUaGUgXCJuZXN0ZWRcIiBhbmQgXCJvd25cIiBmbGFncyBjYW5ub3QgYmUgY29tYmluZWQuJyxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBzc2ZpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChvYmogPT09IG51bGwgfHwgb2JqID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgZmxhZ01zZyArICdUYXJnZXQgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLicsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgc3NmaVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgaXNEZWVwID0gZmxhZyh0aGlzLCAnZGVlcCcpXG4gICAgICAsIG5lZ2F0ZSA9IGZsYWcodGhpcywgJ25lZ2F0ZScpXG4gICAgICAsIHBhdGhJbmZvID0gaXNOZXN0ZWQgPyBfLmdldFBhdGhJbmZvKG9iaiwgbmFtZSkgOiBudWxsXG4gICAgICAsIHZhbHVlID0gaXNOZXN0ZWQgPyBwYXRoSW5mby52YWx1ZSA6IG9ialtuYW1lXVxuICAgICAgLCBpc0VxbCA9IGlzRGVlcCA/IGZsYWcodGhpcywgJ2VxbCcpIDogKHZhbDEsIHZhbDIpID0+IHZhbDEgPT09IHZhbDI7O1xuXG4gICAgdmFyIGRlc2NyaXB0b3IgPSAnJztcbiAgICBpZiAoaXNEZWVwKSBkZXNjcmlwdG9yICs9ICdkZWVwICc7XG4gICAgaWYgKGlzT3duKSBkZXNjcmlwdG9yICs9ICdvd24gJztcbiAgICBpZiAoaXNOZXN0ZWQpIGRlc2NyaXB0b3IgKz0gJ25lc3RlZCAnO1xuICAgIGRlc2NyaXB0b3IgKz0gJ3Byb3BlcnR5ICc7XG5cbiAgICB2YXIgaGFzUHJvcGVydHk7XG4gICAgaWYgKGlzT3duKSBoYXNQcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIG5hbWUpO1xuICAgIGVsc2UgaWYgKGlzTmVzdGVkKSBoYXNQcm9wZXJ0eSA9IHBhdGhJbmZvLmV4aXN0cztcbiAgICBlbHNlIGhhc1Byb3BlcnR5ID0gXy5oYXNQcm9wZXJ0eShvYmosIG5hbWUpO1xuXG4gICAgLy8gV2hlbiBwZXJmb3JtaW5nIGEgbmVnYXRlZCBhc3NlcnRpb24gZm9yIGJvdGggbmFtZSBhbmQgdmFsLCBtZXJlbHkgaGF2aW5nXG4gICAgLy8gYSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiBuYW1lIGlzbid0IGVub3VnaCB0byBjYXVzZSB0aGUgYXNzZXJ0aW9uIHRvXG4gICAgLy8gZmFpbC4gSXQgbXVzdCBib3RoIGhhdmUgYSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiBuYW1lLCBhbmQgdGhlIHZhbHVlIG9mXG4gICAgLy8gdGhhdCBwcm9wZXJ0eSBtdXN0IGVxdWFsIHRoZSBnaXZlbiB2YWwuIFRoZXJlZm9yZSwgc2tpcCB0aGlzIGFzc2VydGlvbiBpblxuICAgIC8vIGZhdm9yIG9mIHRoZSBuZXh0LlxuICAgIGlmICghbmVnYXRlIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIGhhc1Byb3BlcnR5XG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSAnICsgZGVzY3JpcHRvciArIF8uaW5zcGVjdChuYW1lKVxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlICcgKyBkZXNjcmlwdG9yICsgXy5pbnNwZWN0KG5hbWUpKTtcbiAgICB9XG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIGhhc1Byb3BlcnR5ICYmIGlzRXFsKHZhbCwgdmFsdWUpXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSAnICsgZGVzY3JpcHRvciArIF8uaW5zcGVjdChuYW1lKSArICcgb2YgI3tleHB9LCBidXQgZ290ICN7YWN0fSdcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSAnICsgZGVzY3JpcHRvciArIF8uaW5zcGVjdChuYW1lKSArICcgb2YgI3thY3R9J1xuICAgICAgICAsIHZhbFxuICAgICAgICAsIHZhbHVlXG4gICAgICApO1xuICAgIH1cblxuICAgIGZsYWcodGhpcywgJ29iamVjdCcsIHZhbHVlKTtcbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ3Byb3BlcnR5JywgYXNzZXJ0UHJvcGVydHkpO1xuXG4gIGZ1bmN0aW9uIGFzc2VydE93blByb3BlcnR5IChuYW1lLCB2YWx1ZSwgbXNnKSB7XG4gICAgZmxhZyh0aGlzLCAnb3duJywgdHJ1ZSk7XG4gICAgYXNzZXJ0UHJvcGVydHkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ293blByb3BlcnR5JywgYXNzZXJ0T3duUHJvcGVydHkpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdoYXZlT3duUHJvcGVydHknLCBhc3NlcnRPd25Qcm9wZXJ0eSk7XG5cbiAgLyoqXG4gICAqICMjIyAub3duUHJvcGVydHlEZXNjcmlwdG9yKG5hbWVbLCBkZXNjcmlwdG9yWywgbXNnXV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGhhcyBpdHMgb3duIHByb3BlcnR5IGRlc2NyaXB0b3Igd2l0aCB0aGUgZ2l2ZW4ga2V5XG4gICAqIGBuYW1lYC4gRW51bWVyYWJsZSBhbmQgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBhcmUgaW5jbHVkZWQgaW4gdGhlXG4gICAqIHNlYXJjaC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmhhdmUub3duUHJvcGVydHlEZXNjcmlwdG9yKCdhJyk7XG4gICAqXG4gICAqIFdoZW4gYGRlc2NyaXB0b3JgIGlzIHByb3ZpZGVkLCBgLm93blByb3BlcnR5RGVzY3JpcHRvcmAgYWxzbyBhc3NlcnRzIHRoYXRcbiAgICogdGhlIHByb3BlcnR5J3MgZGVzY3JpcHRvciBpcyBkZWVwbHkgZXF1YWwgdG8gdGhlIGdpdmVuIGBkZXNjcmlwdG9yYC4gU2VlXG4gICAqIHRoZSBgZGVlcC1lcWxgIHByb2plY3QgcGFnZSBmb3IgaW5mbyBvbiB0aGUgZGVlcCBlcXVhbGl0eSBhbGdvcml0aG06XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFpanMvZGVlcC1lcWwuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLm93blByb3BlcnR5RGVzY3JpcHRvcignYScsIHtcbiAgICogICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgKiAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgKiAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICogICAgICAgdmFsdWU6IDEsXG4gICAqICAgICB9KTtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5vd25Qcm9wZXJ0eURlc2NyaXB0b3JgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8ubm90LmhhdmUub3duUHJvcGVydHlEZXNjcmlwdG9yKCdiJyk7XG4gICAqXG4gICAqIEhvd2V2ZXIsIGl0J3MgZGFuZ2Vyb3VzIHRvIG5lZ2F0ZSBgLm93blByb3BlcnR5RGVzY3JpcHRvcmAgd2hlbiBwcm92aWRpbmdcbiAgICogYSBgZGVzY3JpcHRvcmAuIFRoZSBwcm9ibGVtIGlzIHRoYXQgaXQgY3JlYXRlcyB1bmNlcnRhaW4gZXhwZWN0YXRpb25zIGJ5XG4gICAqIGFzc2VydGluZyB0aGF0IHRoZSB0YXJnZXQgZWl0aGVyIGRvZXNuJ3QgaGF2ZSBhIHByb3BlcnR5IGRlc2NyaXB0b3Igd2l0aFxuICAgKiB0aGUgZ2l2ZW4ga2V5IGBuYW1lYCwgb3IgdGhhdCBpdCBkb2VzIGhhdmUgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHdpdGggdGhlXG4gICAqIGdpdmVuIGtleSBgbmFtZWAgYnV0IGl0XHUyMDE5cyBub3QgZGVlcGx5IGVxdWFsIHRvIHRoZSBnaXZlbiBgZGVzY3JpcHRvcmAuIEl0J3NcbiAgICogb2Z0ZW4gYmVzdCB0byBpZGVudGlmeSB0aGUgZXhhY3Qgb3V0cHV0IHRoYXQncyBleHBlY3RlZCwgYW5kIHRoZW4gd3JpdGUgYW5cbiAgICogYXNzZXJ0aW9uIHRoYXQgb25seSBhY2NlcHRzIHRoYXQgZXhhY3Qgb3V0cHV0LlxuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgaXNuJ3QgZXhwZWN0ZWQgdG8gaGF2ZSBhIHByb3BlcnR5IGRlc2NyaXB0b3Igd2l0aCB0aGUgZ2l2ZW5cbiAgICoga2V5IGBuYW1lYCwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydCBleGFjdGx5IHRoYXQuXG4gICAqXG4gICAqICAgICAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHtiOiAyfSkudG8ubm90LmhhdmUub3duUHJvcGVydHlEZXNjcmlwdG9yKCdhJyk7XG4gICAqXG4gICAqICAgICAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YjogMn0pLnRvLm5vdC5oYXZlLm93blByb3BlcnR5RGVzY3JpcHRvcignYScsIHtcbiAgICogICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgKiAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgKiAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICogICAgICAgdmFsdWU6IDEsXG4gICAqICAgICB9KTtcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGV4cGVjdGVkIHRvIGhhdmUgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHdpdGggdGhlIGdpdmVuXG4gICAqIGtleSBgbmFtZWAsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgcHJvcGVydHkgaGFzIGl0cyBleHBlY3RlZFxuICAgKiBkZXNjcmlwdG9yLCByYXRoZXIgdGhhbiBhc3NlcnRpbmcgdGhhdCBpdCBkb2Vzbid0IGhhdmUgb25lIG9mIG1hbnlcbiAgICogdW5leHBlY3RlZCBkZXNjcmlwdG9ycy5cbiAgICpcbiAgICogICAgIC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoe2E6IDN9KS50by5oYXZlLm93blByb3BlcnR5RGVzY3JpcHRvcignYScsIHtcbiAgICogICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgKiAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgKiAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICogICAgICAgdmFsdWU6IDMsXG4gICAqICAgICB9KTtcbiAgICpcbiAgICogICAgIC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHthOiAzfSkudG8ubm90LmhhdmUub3duUHJvcGVydHlEZXNjcmlwdG9yKCdhJywge1xuICAgKiAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAqICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAqICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgKiAgICAgICB2YWx1ZTogMSxcbiAgICogICAgIH0pO1xuICAgKlxuICAgKiBgLm93blByb3BlcnR5RGVzY3JpcHRvcmAgY2hhbmdlcyB0aGUgdGFyZ2V0IG9mIGFueSBhc3NlcnRpb25zIHRoYXQgZm9sbG93XG4gICAqIGluIHRoZSBjaGFpbiB0byBiZSB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3IgZnJvbSB0aGUgb3JpZ2luYWxcbiAgICogdGFyZ2V0IG9iamVjdC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmhhdmUub3duUHJvcGVydHlEZXNjcmlwdG9yKCdhJylcbiAgICogICAgICAgLnRoYXQuaGFzLnByb3BlcnR5KCdlbnVtZXJhYmxlJywgdHJ1ZSk7XG4gICAqXG4gICAqIGAub3duUHJvcGVydHlEZXNjcmlwdG9yYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGFcbiAgICogY3VzdG9tIGVycm9yIG1lc3NhZ2UgdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvXG4gICAqIGJlIGdpdmVuIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuIFdoZW4gbm90IHByb3ZpZGluZ1xuICAgKiBgZGVzY3JpcHRvcmAsIG9ubHkgdXNlIHRoZSBzZWNvbmQgZm9ybS5cbiAgICpcbiAgICogICAgIC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5oYXZlLm93blByb3BlcnR5RGVzY3JpcHRvcignYScsIHtcbiAgICogICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgKiAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgKiAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICogICAgICAgdmFsdWU6IDIsXG4gICAqICAgICB9LCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqXG4gICAqICAgICAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHthOiAxfSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmhhdmUub3duUHJvcGVydHlEZXNjcmlwdG9yKCdhJywge1xuICAgKiAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAqICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAqICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgKiAgICAgICB2YWx1ZTogMixcbiAgICogICAgIH0pO1xuICAgKlxuICAgKiAgICAgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCh7YTogMX0sICdub29vIHdoeSBmYWlsPz8nKS50by5oYXZlLm93blByb3BlcnR5RGVzY3JpcHRvcignYicpO1xuICAgKlxuICAgKiAgICAgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KVxuICAgKiAgICAgICAudG8uaGF2ZS5vd25Qcm9wZXJ0eURlc2NyaXB0b3IoJ2InLCB1bmRlZmluZWQsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICpcbiAgICogVGhlIGFib3ZlIGFzc2VydGlvbiBpc24ndCB0aGUgc2FtZSB0aGluZyBhcyBub3QgcHJvdmlkaW5nIGBkZXNjcmlwdG9yYC5cbiAgICogSW5zdGVhZCwgaXQncyBhc3NlcnRpbmcgdGhhdCB0aGUgdGFyZ2V0IG9iamVjdCBoYXMgYSBgYmAgcHJvcGVydHlcbiAgICogZGVzY3JpcHRvciB0aGF0J3MgZGVlcGx5IGVxdWFsIHRvIGB1bmRlZmluZWRgLlxuICAgKlxuICAgKiBUaGUgYWxpYXMgYC5oYXZlT3duUHJvcGVydHlEZXNjcmlwdG9yYCBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgd2l0aFxuICAgKiBgLm93blByb3BlcnR5RGVzY3JpcHRvcmAuXG4gICAqXG4gICAqIEBuYW1lIG93blByb3BlcnR5RGVzY3JpcHRvclxuICAgKiBAYWxpYXMgaGF2ZU93blByb3BlcnR5RGVzY3JpcHRvclxuICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge09iamVjdH0gZGVzY3JpcHRvciBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgKG5hbWUsIGRlc2NyaXB0b3IsIG1zZykge1xuICAgIGlmICh0eXBlb2YgZGVzY3JpcHRvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG1zZyA9IGRlc2NyaXB0b3I7XG4gICAgICBkZXNjcmlwdG9yID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpO1xuICAgIHZhciBhY3R1YWxEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qob2JqKSwgbmFtZSk7XG4gICAgdmFyIGVxbCA9IGZsYWcodGhpcywgJ2VxbCcpO1xuICAgIGlmIChhY3R1YWxEZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IpIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIGVxbChkZXNjcmlwdG9yLCBhY3R1YWxEZXNjcmlwdG9yKVxuICAgICAgICAsICdleHBlY3RlZCB0aGUgb3duIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yICcgKyBfLmluc3BlY3QobmFtZSkgKyAnIG9uICN7dGhpc30gdG8gbWF0Y2ggJyArIF8uaW5zcGVjdChkZXNjcmlwdG9yKSArICcsIGdvdCAnICsgXy5pbnNwZWN0KGFjdHVhbERlc2NyaXB0b3IpXG4gICAgICAgICwgJ2V4cGVjdGVkIHRoZSBvd24gcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgJyArIF8uaW5zcGVjdChuYW1lKSArICcgb24gI3t0aGlzfSB0byBub3QgbWF0Y2ggJyArIF8uaW5zcGVjdChkZXNjcmlwdG9yKVxuICAgICAgICAsIGRlc2NyaXB0b3JcbiAgICAgICAgLCBhY3R1YWxEZXNjcmlwdG9yXG4gICAgICAgICwgdHJ1ZVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgYWN0dWFsRGVzY3JpcHRvclxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYW4gb3duIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yICcgKyBfLmluc3BlY3QobmFtZSlcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBhbiBvd24gcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgJyArIF8uaW5zcGVjdChuYW1lKVxuICAgICAgKTtcbiAgICB9XG4gICAgZmxhZyh0aGlzLCAnb2JqZWN0JywgYWN0dWFsRGVzY3JpcHRvcik7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdvd25Qcm9wZXJ0eURlc2NyaXB0b3InLCBhc3NlcnRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdoYXZlT3duUHJvcGVydHlEZXNjcmlwdG9yJywgYXNzZXJ0T3duUHJvcGVydHlEZXNjcmlwdG9yKTtcblxuICAvKipcbiAgICogIyMjIC5sZW5ndGhPZihuWywgbXNnXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQncyBgbGVuZ3RoYCBvciBgc2l6ZWAgaXMgZXF1YWwgdG8gdGhlIGdpdmVuIG51bWJlclxuICAgKiBgbmAuXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mKDMpO1xuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5oYXZlLmxlbmd0aE9mKDMpO1xuICAgKiAgICAgZXhwZWN0KG5ldyBTZXQoWzEsIDIsIDNdKSkudG8uaGF2ZS5sZW5ndGhPZigzKTtcbiAgICogICAgIGV4cGVjdChuZXcgTWFwKFtbJ2EnLCAxXSwgWydiJywgMl0sIFsnYycsIDNdXSkpLnRvLmhhdmUubGVuZ3RoT2YoMyk7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAubGVuZ3RoT2ZgLiBIb3dldmVyLCBpdCdzIG9mdGVuXG4gICAqIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlIHRhcmdldCdzIGBsZW5ndGhgIHByb3BlcnR5IGlzIGVxdWFsIHRvIGl0cyBleHBlY3RlZFxuICAgKiB2YWx1ZSwgcmF0aGVyIHRoYW4gbm90IGVxdWFsIHRvIG9uZSBvZiBtYW55IHVuZXhwZWN0ZWQgdmFsdWVzLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5oYXZlLmxlbmd0aE9mKDMpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5ub3QuaGF2ZS5sZW5ndGhPZig0KTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIGAubGVuZ3RoT2ZgIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3JcbiAgICogbWVzc2FnZSB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXNcbiAgICogdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubGVuZ3RoT2YoMiwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmhhdmUubGVuZ3RoT2YoMik7XG4gICAqXG4gICAqIGAubGVuZ3RoT2ZgIGNhbiBhbHNvIGJlIHVzZWQgYXMgYSBsYW5ndWFnZSBjaGFpbiwgY2F1c2luZyBhbGwgYC5hYm92ZWAsXG4gICAqIGAuYmVsb3dgLCBgLmxlYXN0YCwgYC5tb3N0YCwgYW5kIGAud2l0aGluYCBhc3NlcnRpb25zIHRoYXQgZm9sbG93IGluIHRoZVxuICAgKiBjaGFpbiB0byB1c2UgdGhlIHRhcmdldCdzIGBsZW5ndGhgIHByb3BlcnR5IGFzIHRoZSB0YXJnZXQuIEhvd2V2ZXIsIGl0J3NcbiAgICogb2Z0ZW4gYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0J3MgYGxlbmd0aGAgcHJvcGVydHkgaXMgZXF1YWwgdG8gaXRzXG4gICAqIGV4cGVjdGVkIGxlbmd0aCwgcmF0aGVyIHRoYW4gYXNzZXJ0aW5nIHRoYXQgaXRzIGBsZW5ndGhgIHByb3BlcnR5IGZhbGxzXG4gICAqIHdpdGhpbiBzb21lIHJhbmdlIG9mIHZhbHVlcy5cbiAgICpcbiAgICogICAgIC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mKDMpO1xuICAgKlxuICAgKiAgICAgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mLmFib3ZlKDIpO1xuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5sZW5ndGhPZi5iZWxvdyg0KTtcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubGVuZ3RoT2YuYXQubGVhc3QoMyk7XG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mLmF0Lm1vc3QoMyk7XG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5oYXZlLmxlbmd0aE9mLndpdGhpbigyLDQpO1xuICAgKlxuICAgKiBEdWUgdG8gYSBjb21wYXRpYmlsaXR5IGlzc3VlLCB0aGUgYWxpYXMgYC5sZW5ndGhgIGNhbid0IGJlIGNoYWluZWQgZGlyZWN0bHlcbiAgICogb2ZmIG9mIGFuIHVuaW52b2tlZCBtZXRob2Qgc3VjaCBhcyBgLmFgLiBUaGVyZWZvcmUsIGAubGVuZ3RoYCBjYW4ndCBiZSB1c2VkXG4gICAqIGludGVyY2hhbmdlYWJseSB3aXRoIGAubGVuZ3RoT2ZgIGluIGV2ZXJ5IHNpdHVhdGlvbi4gSXQncyByZWNvbW1lbmRlZCB0b1xuICAgKiBhbHdheXMgdXNlIGAubGVuZ3RoT2ZgIGluc3RlYWQgb2YgYC5sZW5ndGhgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5hLmxlbmd0aCgzKTsgLy8gaW5jb21wYXRpYmxlOyB0aHJvd3MgZXJyb3JcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUuYS5sZW5ndGhPZigzKTsgIC8vIHBhc3NlcyBhcyBleHBlY3RlZFxuICAgKlxuICAgKiBAbmFtZSBsZW5ndGhPZlxuICAgKiBAYWxpYXMgbGVuZ3RoXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnRMZW5ndGhDaGFpbiAoKSB7XG4gICAgZmxhZyh0aGlzLCAnZG9MZW5ndGgnLCB0cnVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFzc2VydExlbmd0aCAobiwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIG9ialR5cGUgPSBfLnR5cGUob2JqKS50b0xvd2VyQ2FzZSgpXG4gICAgICAsIGZsYWdNc2cgPSBmbGFnKHRoaXMsICdtZXNzYWdlJylcbiAgICAgICwgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKVxuICAgICAgLCBkZXNjcmlwdG9yID0gJ2xlbmd0aCdcbiAgICAgICwgaXRlbXNDb3VudDtcblxuICAgIHN3aXRjaCAob2JqVHlwZSkge1xuICAgICAgY2FzZSAnbWFwJzpcbiAgICAgIGNhc2UgJ3NldCc6XG4gICAgICAgIGRlc2NyaXB0b3IgPSAnc2l6ZSc7XG4gICAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gICAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICAgIH1cblxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICBpdGVtc0NvdW50ID09IG5cbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhICcgKyBkZXNjcmlwdG9yICsgJyBvZiAje2V4cH0gYnV0IGdvdCAje2FjdH0nXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIGEgJyArIGRlc2NyaXB0b3IgKyAnIG9mICN7YWN0fSdcbiAgICAgICwgblxuICAgICAgLCBpdGVtc0NvdW50XG4gICAgKTtcbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoJ2xlbmd0aCcsIGFzc2VydExlbmd0aCwgYXNzZXJ0TGVuZ3RoQ2hhaW4pO1xuICBBc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKCdsZW5ndGhPZicsIGFzc2VydExlbmd0aCwgYXNzZXJ0TGVuZ3RoQ2hhaW4pO1xuXG4gIC8qKlxuICAgKiAjIyMgLm1hdGNoKHJlWywgbXNnXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gcmVndWxhciBleHByZXNzaW9uIGByZWAuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2Zvb2JhcicpLnRvLm1hdGNoKC9eZm9vLyk7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAubWF0Y2hgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb29iYXInKS50by5ub3QubWF0Y2goL3RhY28vKTtcbiAgICpcbiAgICogYC5tYXRjaGAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gICAqIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhcyB0aGVcbiAgICogc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb29iYXInKS50by5tYXRjaCgvdGFjby8sICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdCgnZm9vYmFyJywgJ25vb28gd2h5IGZhaWw/PycpLnRvLm1hdGNoKC90YWNvLyk7XG4gICAqXG4gICAqIFRoZSBhbGlhcyBgLm1hdGNoZXNgIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoIGAubWF0Y2hgLlxuICAgKlxuICAgKiBAbmFtZSBtYXRjaFxuICAgKiBAYWxpYXMgbWF0Y2hlc1xuICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1zZyBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuICBmdW5jdGlvbiBhc3NlcnRNYXRjaChyZSwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpO1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICByZS5leGVjKG9iailcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbWF0Y2ggJyArIHJlXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IG5vdCB0byBtYXRjaCAnICsgcmVcbiAgICApO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnbWF0Y2gnLCBhc3NlcnRNYXRjaCk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ21hdGNoZXMnLCBhc3NlcnRNYXRjaCk7XG5cbiAgLyoqXG4gICAqICMjIyAuc3RyaW5nKHN0clssIG1zZ10pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IHN0cmluZyBjb250YWlucyB0aGUgZ2l2ZW4gc3Vic3RyaW5nIGBzdHJgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb29iYXInKS50by5oYXZlLnN0cmluZygnYmFyJyk7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuc3RyaW5nYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vYmFyJykudG8ubm90LmhhdmUuc3RyaW5nKCd0YWNvJyk7XG4gICAqXG4gICAqIGAuc3RyaW5nYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yXG4gICAqIG1lc3NhZ2UgdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzXG4gICAqIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2Zvb2JhcicpLnRvLmhhdmUuc3RyaW5nKCd0YWNvJywgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KCdmb29iYXInLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uaGF2ZS5zdHJpbmcoJ3RhY28nKTtcbiAgICpcbiAgICogQG5hbWUgc3RyaW5nXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1zZyBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ3N0cmluZycsIGZ1bmN0aW9uIChzdHIsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJyk7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoJ3N0cmluZycpO1xuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIH5vYmouaW5kZXhPZihzdHIpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGNvbnRhaW4gJyArIF8uaW5zcGVjdChzdHIpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBjb250YWluICcgKyBfLmluc3BlY3Qoc3RyKVxuICAgICk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLmtleXMoa2V5MVssIGtleTJbLCAuLi5dXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgb2JqZWN0LCBhcnJheSwgbWFwLCBvciBzZXQgaGFzIHRoZSBnaXZlbiBrZXlzLiBPbmx5XG4gICAqIHRoZSB0YXJnZXQncyBvd24gaW5oZXJpdGVkIHByb3BlcnRpZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBzZWFyY2guXG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpcyBhbiBvYmplY3Qgb3IgYXJyYXksIGtleXMgY2FuIGJlIHByb3ZpZGVkIGFzIG9uZSBvciBtb3JlXG4gICAqIHN0cmluZyBhcmd1bWVudHMsIGEgc2luZ2xlIGFycmF5IGFyZ3VtZW50LCBvciBhIHNpbmdsZSBvYmplY3QgYXJndW1lbnQuIEluXG4gICAqIHRoZSBsYXR0ZXIgY2FzZSwgb25seSB0aGUga2V5cyBpbiB0aGUgZ2l2ZW4gb2JqZWN0IG1hdHRlcjsgdGhlIHZhbHVlcyBhcmVcbiAgICogaWdub3JlZC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMn0pLnRvLmhhdmUuYWxsLmtleXMoJ2EnLCAnYicpO1xuICAgKiAgICAgZXhwZWN0KFsneCcsICd5J10pLnRvLmhhdmUuYWxsLmtleXMoMCwgMSk7XG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDEsIGI6IDJ9KS50by5oYXZlLmFsbC5rZXlzKFsnYScsICdiJ10pO1xuICAgKiAgICAgZXhwZWN0KFsneCcsICd5J10pLnRvLmhhdmUuYWxsLmtleXMoWzAsIDFdKTtcbiAgICpcbiAgICogICAgIGV4cGVjdCh7YTogMSwgYjogMn0pLnRvLmhhdmUuYWxsLmtleXMoe2E6IDQsIGI6IDV9KTsgLy8gaWdub3JlIDQgYW5kIDVcbiAgICogICAgIGV4cGVjdChbJ3gnLCAneSddKS50by5oYXZlLmFsbC5rZXlzKHswOiA0LCAxOiA1fSk7IC8vIGlnbm9yZSA0IGFuZCA1XG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpcyBhIG1hcCBvciBzZXQsIGVhY2gga2V5IG11c3QgYmUgcHJvdmlkZWQgYXMgYSBzZXBhcmF0ZVxuICAgKiBhcmd1bWVudC5cbiAgICpcbiAgICogICAgIGV4cGVjdChuZXcgTWFwKFtbJ2EnLCAxXSwgWydiJywgMl1dKSkudG8uaGF2ZS5hbGwua2V5cygnYScsICdiJyk7XG4gICAqICAgICBleHBlY3QobmV3IFNldChbJ2EnLCAnYiddKSkudG8uaGF2ZS5hbGwua2V5cygnYScsICdiJyk7XG4gICAqXG4gICAqIEJlY2F1c2UgYC5rZXlzYCBkb2VzIGRpZmZlcmVudCB0aGluZ3MgYmFzZWQgb24gdGhlIHRhcmdldCdzIHR5cGUsIGl0J3NcbiAgICogaW1wb3J0YW50IHRvIGNoZWNrIHRoZSB0YXJnZXQncyB0eXBlIGJlZm9yZSB1c2luZyBgLmtleXNgLiBTZWUgdGhlIGAuYWAgZG9jXG4gICAqIGZvciBpbmZvIG9uIHRlc3RpbmcgYSB0YXJnZXQncyB0eXBlLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxLCBiOiAyfSkudG8uYmUuYW4oJ29iamVjdCcpLnRoYXQuaGFzLmFsbC5rZXlzKCdhJywgJ2InKTtcbiAgICpcbiAgICogQnkgZGVmYXVsdCwgc3RyaWN0IChgPT09YCkgZXF1YWxpdHkgaXMgdXNlZCB0byBjb21wYXJlIGtleXMgb2YgbWFwcyBhbmRcbiAgICogc2V0cy4gQWRkIGAuZGVlcGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gdXNlIGRlZXAgZXF1YWxpdHkgaW5zdGVhZC4gU2VlXG4gICAqIHRoZSBgZGVlcC1lcWxgIHByb2plY3QgcGFnZSBmb3IgaW5mbyBvbiB0aGUgZGVlcCBlcXVhbGl0eSBhbGdvcml0aG06XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFpanMvZGVlcC1lcWwuXG4gICAqXG4gICAqICAgICAvLyBUYXJnZXQgc2V0IGRlZXBseSAoYnV0IG5vdCBzdHJpY3RseSkgaGFzIGtleSBge2E6IDF9YFxuICAgKiAgICAgZXhwZWN0KG5ldyBTZXQoW3thOiAxfV0pKS50by5oYXZlLmFsbC5kZWVwLmtleXMoW3thOiAxfV0pO1xuICAgKiAgICAgZXhwZWN0KG5ldyBTZXQoW3thOiAxfV0pKS50by5ub3QuaGF2ZS5hbGwua2V5cyhbe2E6IDF9XSk7XG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSB0YXJnZXQgbXVzdCBoYXZlIGFsbCBvZiB0aGUgZ2l2ZW4ga2V5cyBhbmQgbm8gbW9yZS4gQWRkXG4gICAqIGAuYW55YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBvbmx5IHJlcXVpcmUgdGhhdCB0aGUgdGFyZ2V0IGhhdmUgYXQgbGVhc3RcbiAgICogb25lIG9mIHRoZSBnaXZlbiBrZXlzLiBBbHNvLCBhZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZVxuICAgKiBgLmtleXNgLiBJdCdzIG9mdGVuIGJlc3QgdG8gYWRkIGAuYW55YCB3aGVuIG5lZ2F0aW5nIGAua2V5c2AsIGFuZCB0byB1c2VcbiAgICogYC5hbGxgIHdoZW4gYXNzZXJ0aW5nIGAua2V5c2Agd2l0aG91dCBuZWdhdGlvbi5cbiAgICpcbiAgICogV2hlbiBuZWdhdGluZyBgLmtleXNgLCBgLmFueWAgaXMgcHJlZmVycmVkIGJlY2F1c2UgYC5ub3QuYW55LmtleXNgIGFzc2VydHNcbiAgICogZXhhY3RseSB3aGF0J3MgZXhwZWN0ZWQgb2YgdGhlIG91dHB1dCwgd2hlcmVhcyBgLm5vdC5hbGwua2V5c2AgY3JlYXRlc1xuICAgKiB1bmNlcnRhaW4gZXhwZWN0YXRpb25zLlxuICAgKlxuICAgKiAgICAgLy8gUmVjb21tZW5kZWQ7IGFzc2VydHMgdGhhdCB0YXJnZXQgZG9lc24ndCBoYXZlIGFueSBvZiB0aGUgZ2l2ZW4ga2V5c1xuICAgKiAgICAgZXhwZWN0KHthOiAxLCBiOiAyfSkudG8ubm90LmhhdmUuYW55LmtleXMoJ2MnLCAnZCcpO1xuICAgKlxuICAgKiAgICAgLy8gTm90IHJlY29tbWVuZGVkOyBhc3NlcnRzIHRoYXQgdGFyZ2V0IGRvZXNuJ3QgaGF2ZSBhbGwgb2YgdGhlIGdpdmVuXG4gICAqICAgICAvLyBrZXlzIGJ1dCBtYXkgb3IgbWF5IG5vdCBoYXZlIHNvbWUgb2YgdGhlbVxuICAgKiAgICAgZXhwZWN0KHthOiAxLCBiOiAyfSkudG8ubm90LmhhdmUuYWxsLmtleXMoJ2MnLCAnZCcpO1xuICAgKlxuICAgKiBXaGVuIGFzc2VydGluZyBgLmtleXNgIHdpdGhvdXQgbmVnYXRpb24sIGAuYWxsYCBpcyBwcmVmZXJyZWQgYmVjYXVzZVxuICAgKiBgLmFsbC5rZXlzYCBhc3NlcnRzIGV4YWN0bHkgd2hhdCdzIGV4cGVjdGVkIG9mIHRoZSBvdXRwdXQsIHdoZXJlYXNcbiAgICogYC5hbnkua2V5c2AgY3JlYXRlcyB1bmNlcnRhaW4gZXhwZWN0YXRpb25zLlxuICAgKlxuICAgKiAgICAgLy8gUmVjb21tZW5kZWQ7IGFzc2VydHMgdGhhdCB0YXJnZXQgaGFzIGFsbCB0aGUgZ2l2ZW4ga2V5c1xuICAgKiAgICAgZXhwZWN0KHthOiAxLCBiOiAyfSkudG8uaGF2ZS5hbGwua2V5cygnYScsICdiJyk7XG4gICAqXG4gICAqICAgICAvLyBOb3QgcmVjb21tZW5kZWQ7IGFzc2VydHMgdGhhdCB0YXJnZXQgaGFzIGF0IGxlYXN0IG9uZSBvZiB0aGUgZ2l2ZW5cbiAgICogICAgIC8vIGtleXMgYnV0IG1heSBvciBtYXkgbm90IGhhdmUgbW9yZSBvZiB0aGVtXG4gICAqICAgICBleHBlY3Qoe2E6IDEsIGI6IDJ9KS50by5oYXZlLmFueS5rZXlzKCdhJywgJ2InKTtcbiAgICpcbiAgICogTm90ZSB0aGF0IGAuYWxsYCBpcyB1c2VkIGJ5IGRlZmF1bHQgd2hlbiBuZWl0aGVyIGAuYWxsYCBub3IgYC5hbnlgIGFwcGVhclxuICAgKiBlYXJsaWVyIGluIHRoZSBjaGFpbi4gSG93ZXZlciwgaXQncyBvZnRlbiBiZXN0IHRvIGFkZCBgLmFsbGAgYW55d2F5IGJlY2F1c2VcbiAgICogaXQgaW1wcm92ZXMgcmVhZGFiaWxpdHkuXG4gICAqXG4gICAqICAgICAvLyBCb3RoIGFzc2VydGlvbnMgYXJlIGlkZW50aWNhbFxuICAgKiAgICAgZXhwZWN0KHthOiAxLCBiOiAyfSkudG8uaGF2ZS5hbGwua2V5cygnYScsICdiJyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qoe2E6IDEsIGI6IDJ9KS50by5oYXZlLmtleXMoJ2EnLCAnYicpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQWRkIGAuaW5jbHVkZWAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gcmVxdWlyZSB0aGF0IHRoZSB0YXJnZXQncyBrZXlzIGJlIGFcbiAgICogc3VwZXJzZXQgb2YgdGhlIGV4cGVjdGVkIGtleXMsIHJhdGhlciB0aGFuIGlkZW50aWNhbCBzZXRzLlxuICAgKlxuICAgKiAgICAgLy8gVGFyZ2V0IG9iamVjdCdzIGtleXMgYXJlIGEgc3VwZXJzZXQgb2YgWydhJywgJ2InXSBidXQgbm90IGlkZW50aWNhbFxuICAgKiAgICAgZXhwZWN0KHthOiAxLCBiOiAyLCBjOiAzfSkudG8uaW5jbHVkZS5hbGwua2V5cygnYScsICdiJyk7XG4gICAqICAgICBleHBlY3Qoe2E6IDEsIGI6IDIsIGM6IDN9KS50by5ub3QuaGF2ZS5hbGwua2V5cygnYScsICdiJyk7XG4gICAqXG4gICAqIEhvd2V2ZXIsIGlmIGAuYW55YCBhbmQgYC5pbmNsdWRlYCBhcmUgY29tYmluZWQsIG9ubHkgdGhlIGAuYW55YCB0YWtlc1xuICAgKiBlZmZlY3QuIFRoZSBgLmluY2x1ZGVgIGlzIGlnbm9yZWQgaW4gdGhpcyBjYXNlLlxuICAgKlxuICAgKiAgICAgLy8gQm90aCBhc3NlcnRpb25zIGFyZSBpZGVudGljYWxcbiAgICogICAgIGV4cGVjdCh7YTogMX0pLnRvLmhhdmUuYW55LmtleXMoJ2EnLCAnYicpO1xuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uaW5jbHVkZS5hbnkua2V5cygnYScsICdiJyk7XG4gICAqXG4gICAqIEEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgY2FuIGJlIGdpdmVuIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9LCAnbm9vbyB3aHkgZmFpbD8/JykudG8uaGF2ZS5rZXkoJ2InKTtcbiAgICpcbiAgICogVGhlIGFsaWFzIGAua2V5YCBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgd2l0aCBgLmtleXNgLlxuICAgKlxuICAgKiBAbmFtZSBrZXlzXG4gICAqIEBhbGlhcyBrZXlcbiAgICogQHBhcmFtIHsuLi5TdHJpbmd8QXJyYXl8T2JqZWN0fSBrZXlzXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFzc2VydEtleXMgKGtleXMpIHtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgb2JqVHlwZSA9IF8udHlwZShvYmopXG4gICAgICAsIGtleXNUeXBlID0gXy50eXBlKGtleXMpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJylcbiAgICAgICwgaXNEZWVwID0gZmxhZyh0aGlzLCAnZGVlcCcpXG4gICAgICAsIHN0clxuICAgICAgLCBkZWVwU3RyID0gJydcbiAgICAgICwgYWN0dWFsXG4gICAgICAsIG9rID0gdHJ1ZVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpO1xuXG4gICAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgJzogJyA6ICcnO1xuICAgIHZhciBtaXhlZEFyZ3NNc2cgPSBmbGFnTXNnICsgJ3doZW4gdGVzdGluZyBrZXlzIGFnYWluc3QgYW4gb2JqZWN0IG9yIGFuIGFycmF5IHlvdSBtdXN0IGdpdmUgYSBzaW5nbGUgQXJyYXl8T2JqZWN0fFN0cmluZyBhcmd1bWVudCBvciBtdWx0aXBsZSBTdHJpbmcgYXJndW1lbnRzJztcblxuICAgIGlmIChvYmpUeXBlID09PSAnTWFwJyB8fCBvYmpUeXBlID09PSAnU2V0Jykge1xuICAgICAgZGVlcFN0ciA9IGlzRGVlcCA/ICdkZWVwbHkgJyA6ICcnO1xuICAgICAgYWN0dWFsID0gW107XG5cbiAgICAgIC8vIE1hcCBhbmQgU2V0ICcua2V5cycgYXJlbid0IHN1cHBvcnRlZCBpbiBJRSAxMS4gVGhlcmVmb3JlLCB1c2UgLmZvckVhY2guXG4gICAgICBvYmouZm9yRWFjaChmdW5jdGlvbiAodmFsLCBrZXkpIHsgYWN0dWFsLnB1c2goa2V5KSB9KTtcblxuICAgICAgaWYgKGtleXNUeXBlICE9PSAnQXJyYXknKSB7XG4gICAgICAgIGtleXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhY3R1YWwgPSBfLmdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzKG9iaik7XG5cbiAgICAgIHN3aXRjaCAoa2V5c1R5cGUpIHtcbiAgICAgICAgY2FzZSAnQXJyYXknOlxuICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1peGVkQXJnc01zZywgdW5kZWZpbmVkLCBzc2ZpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ09iamVjdCc6XG4gICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobWl4ZWRBcmdzTXNnLCB1bmRlZmluZWQsIHNzZmkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMoa2V5cyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAga2V5cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIC8vIE9ubHkgc3RyaW5naWZ5IG5vbi1TeW1ib2xzIGJlY2F1c2UgU3ltYm9scyB3b3VsZCBiZWNvbWUgXCJTeW1ib2woKVwiXG4gICAgICBrZXlzID0ga2V5cy5tYXAoZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N5bWJvbCcgPyB2YWwgOiBTdHJpbmcodmFsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICgha2V5cy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihmbGFnTXNnICsgJ2tleXMgcmVxdWlyZWQnLCB1bmRlZmluZWQsIHNzZmkpO1xuICAgIH1cblxuICAgIHZhciBsZW4gPSBrZXlzLmxlbmd0aFxuICAgICAgLCBhbnkgPSBmbGFnKHRoaXMsICdhbnknKVxuICAgICAgLCBhbGwgPSBmbGFnKHRoaXMsICdhbGwnKVxuICAgICAgLCBleHBlY3RlZCA9IGtleXNcbiAgICAgICwgaXNFcWwgPSBpc0RlZXAgPyBmbGFnKHRoaXMsICdlcWwnKSA6ICh2YWwxLCB2YWwyKSA9PiB2YWwxID09PSB2YWwyO1xuXG4gICAgaWYgKCFhbnkgJiYgIWFsbCkge1xuICAgICAgYWxsID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBIYXMgYW55XG4gICAgaWYgKGFueSkge1xuICAgICAgb2sgPSBleHBlY3RlZC5zb21lKGZ1bmN0aW9uKGV4cGVjdGVkS2V5KSB7XG4gICAgICAgIHJldHVybiBhY3R1YWwuc29tZShmdW5jdGlvbihhY3R1YWxLZXkpIHtcbiAgICAgICAgICByZXR1cm4gaXNFcWwoZXhwZWN0ZWRLZXksIGFjdHVhbEtleSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSGFzIGFsbFxuICAgIGlmIChhbGwpIHtcbiAgICAgIG9rID0gZXhwZWN0ZWQuZXZlcnkoZnVuY3Rpb24oZXhwZWN0ZWRLZXkpIHtcbiAgICAgICAgcmV0dXJuIGFjdHVhbC5zb21lKGZ1bmN0aW9uKGFjdHVhbEtleSkge1xuICAgICAgICAgIHJldHVybiBpc0VxbChleHBlY3RlZEtleSwgYWN0dWFsS2V5KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKCFmbGFnKHRoaXMsICdjb250YWlucycpKSB7XG4gICAgICAgIG9rID0gb2sgJiYga2V5cy5sZW5ndGggPT0gYWN0dWFsLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBLZXkgc3RyaW5nXG4gICAgaWYgKGxlbiA+IDEpIHtcbiAgICAgIGtleXMgPSBrZXlzLm1hcChmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgcmV0dXJuIF8uaW5zcGVjdChrZXkpO1xuICAgICAgfSk7XG4gICAgICB2YXIgbGFzdCA9IGtleXMucG9wKCk7XG4gICAgICBpZiAoYWxsKSB7XG4gICAgICAgIHN0ciA9IGtleXMuam9pbignLCAnKSArICcsIGFuZCAnICsgbGFzdDtcbiAgICAgIH1cbiAgICAgIGlmIChhbnkpIHtcbiAgICAgICAgc3RyID0ga2V5cy5qb2luKCcsICcpICsgJywgb3IgJyArIGxhc3Q7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IF8uaW5zcGVjdChrZXlzWzBdKTtcbiAgICB9XG5cbiAgICAvLyBGb3JtXG4gICAgc3RyID0gKGxlbiA+IDEgPyAna2V5cyAnIDogJ2tleSAnKSArIHN0cjtcblxuICAgIC8vIEhhdmUgLyBpbmNsdWRlXG4gICAgc3RyID0gKGZsYWcodGhpcywgJ2NvbnRhaW5zJykgPyAnY29udGFpbiAnIDogJ2hhdmUgJykgKyBzdHI7XG5cbiAgICAvLyBBc3NlcnRpb25cbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgb2tcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gJyArIGRlZXBTdHIgKyBzdHJcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90ICcgKyBkZWVwU3RyICsgc3RyXG4gICAgICAsIGV4cGVjdGVkLnNsaWNlKDApLnNvcnQoXy5jb21wYXJlQnlJbnNwZWN0KVxuICAgICAgLCBhY3R1YWwuc29ydChfLmNvbXBhcmVCeUluc3BlY3QpXG4gICAgICAsIHRydWVcbiAgICApO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgna2V5cycsIGFzc2VydEtleXMpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdrZXknLCBhc3NlcnRLZXlzKTtcblxuICAvKipcbiAgICogIyMjIC50aHJvdyhbZXJyb3JMaWtlXSwgW2Vyck1zZ01hdGNoZXJdLCBbbXNnXSlcbiAgICpcbiAgICogV2hlbiBubyBhcmd1bWVudHMgYXJlIHByb3ZpZGVkLCBgLnRocm93YCBpbnZva2VzIHRoZSB0YXJnZXQgZnVuY3Rpb24gYW5kXG4gICAqIGFzc2VydHMgdGhhdCBhbiBlcnJvciBpcyB0aHJvd24uXG4gICAqXG4gICAqICAgICB2YXIgYmFkRm4gPSBmdW5jdGlvbiAoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0lsbGVnYWwgc2FsbW9uIScpOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGJhZEZuKS50by50aHJvdygpO1xuICAgKlxuICAgKiBXaGVuIG9uZSBhcmd1bWVudCBpcyBwcm92aWRlZCwgYW5kIGl0J3MgYW4gZXJyb3IgY29uc3RydWN0b3IsIGAudGhyb3dgXG4gICAqIGludm9rZXMgdGhlIHRhcmdldCBmdW5jdGlvbiBhbmQgYXNzZXJ0cyB0aGF0IGFuIGVycm9yIGlzIHRocm93biB0aGF0J3MgYW5cbiAgICogaW5zdGFuY2Ugb2YgdGhhdCBlcnJvciBjb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogICAgIHZhciBiYWRGbiA9IGZ1bmN0aW9uICgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBzYWxtb24hJyk7IH07XG4gICAqXG4gICAqICAgICBleHBlY3QoYmFkRm4pLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAqXG4gICAqIFdoZW4gb25lIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCBhbmQgaXQncyBhbiBlcnJvciBpbnN0YW5jZSwgYC50aHJvd2AgaW52b2tlc1xuICAgKiB0aGUgdGFyZ2V0IGZ1bmN0aW9uIGFuZCBhc3NlcnRzIHRoYXQgYW4gZXJyb3IgaXMgdGhyb3duIHRoYXQncyBzdHJpY3RseVxuICAgKiAoYD09PWApIGVxdWFsIHRvIHRoYXQgZXJyb3IgaW5zdGFuY2UuXG4gICAqXG4gICAqICAgICB2YXIgZXJyID0gbmV3IFR5cGVFcnJvcignSWxsZWdhbCBzYWxtb24hJyk7XG4gICAqICAgICB2YXIgYmFkRm4gPSBmdW5jdGlvbiAoKSB7IHRocm93IGVycjsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChiYWRGbikudG8udGhyb3coZXJyKTtcbiAgICpcbiAgICogV2hlbiBvbmUgYXJndW1lbnQgaXMgcHJvdmlkZWQsIGFuZCBpdCdzIGEgc3RyaW5nLCBgLnRocm93YCBpbnZva2VzIHRoZVxuICAgKiB0YXJnZXQgZnVuY3Rpb24gYW5kIGFzc2VydHMgdGhhdCBhbiBlcnJvciBpcyB0aHJvd24gd2l0aCBhIG1lc3NhZ2UgdGhhdFxuICAgKiBjb250YWlucyB0aGF0IHN0cmluZy5cbiAgICpcbiAgICogICAgIHZhciBiYWRGbiA9IGZ1bmN0aW9uICgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBzYWxtb24hJyk7IH07XG4gICAqXG4gICAqICAgICBleHBlY3QoYmFkRm4pLnRvLnRocm93KCdzYWxtb24nKTtcbiAgICpcbiAgICogV2hlbiBvbmUgYXJndW1lbnQgaXMgcHJvdmlkZWQsIGFuZCBpdCdzIGEgcmVndWxhciBleHByZXNzaW9uLCBgLnRocm93YFxuICAgKiBpbnZva2VzIHRoZSB0YXJnZXQgZnVuY3Rpb24gYW5kIGFzc2VydHMgdGhhdCBhbiBlcnJvciBpcyB0aHJvd24gd2l0aCBhXG4gICAqIG1lc3NhZ2UgdGhhdCBtYXRjaGVzIHRoYXQgcmVndWxhciBleHByZXNzaW9uLlxuICAgKlxuICAgKiAgICAgdmFyIGJhZEZuID0gZnVuY3Rpb24gKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIHNhbG1vbiEnKTsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChiYWRGbikudG8udGhyb3coL3NhbG1vbi8pO1xuICAgKlxuICAgKiBXaGVuIHR3byBhcmd1bWVudHMgYXJlIHByb3ZpZGVkLCBhbmQgdGhlIGZpcnN0IGlzIGFuIGVycm9yIGluc3RhbmNlIG9yXG4gICAqIGNvbnN0cnVjdG9yLCBhbmQgdGhlIHNlY29uZCBpcyBhIHN0cmluZyBvciByZWd1bGFyIGV4cHJlc3Npb24sIGAudGhyb3dgXG4gICAqIGludm9rZXMgdGhlIGZ1bmN0aW9uIGFuZCBhc3NlcnRzIHRoYXQgYW4gZXJyb3IgaXMgdGhyb3duIHRoYXQgZnVsZmlsbHMgYm90aFxuICAgKiBjb25kaXRpb25zIGFzIGRlc2NyaWJlZCBhYm92ZS5cbiAgICpcbiAgICogICAgIHZhciBlcnIgPSBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIHNhbG1vbiEnKTtcbiAgICogICAgIHZhciBiYWRGbiA9IGZ1bmN0aW9uICgpIHsgdGhyb3cgZXJyOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGJhZEZuKS50by50aHJvdyhUeXBlRXJyb3IsICdzYWxtb24nKTtcbiAgICogICAgIGV4cGVjdChiYWRGbikudG8udGhyb3coVHlwZUVycm9yLCAvc2FsbW9uLyk7XG4gICAqICAgICBleHBlY3QoYmFkRm4pLnRvLnRocm93KGVyciwgJ3NhbG1vbicpO1xuICAgKiAgICAgZXhwZWN0KGJhZEZuKS50by50aHJvdyhlcnIsIC9zYWxtb24vKTtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC50aHJvd2AuXG4gICAqXG4gICAqICAgICB2YXIgZ29vZEZuID0gZnVuY3Rpb24gKCkge307XG4gICAqXG4gICAqICAgICBleHBlY3QoZ29vZEZuKS50by5ub3QudGhyb3coKTtcbiAgICpcbiAgICogSG93ZXZlciwgaXQncyBkYW5nZXJvdXMgdG8gbmVnYXRlIGAudGhyb3dgIHdoZW4gcHJvdmlkaW5nIGFueSBhcmd1bWVudHMuXG4gICAqIFRoZSBwcm9ibGVtIGlzIHRoYXQgaXQgY3JlYXRlcyB1bmNlcnRhaW4gZXhwZWN0YXRpb25zIGJ5IGFzc2VydGluZyB0aGF0IHRoZVxuICAgKiB0YXJnZXQgZWl0aGVyIGRvZXNuJ3QgdGhyb3cgYW4gZXJyb3IsIG9yIHRoYXQgaXQgdGhyb3dzIGFuIGVycm9yIGJ1dCBvZiBhXG4gICAqIGRpZmZlcmVudCB0eXBlIHRoYW4gdGhlIGdpdmVuIHR5cGUsIG9yIHRoYXQgaXQgdGhyb3dzIGFuIGVycm9yIG9mIHRoZSBnaXZlblxuICAgKiB0eXBlIGJ1dCB3aXRoIGEgbWVzc2FnZSB0aGF0IGRvZXNuJ3QgaW5jbHVkZSB0aGUgZ2l2ZW4gc3RyaW5nLiBJdCdzIG9mdGVuXG4gICAqIGJlc3QgdG8gaWRlbnRpZnkgdGhlIGV4YWN0IG91dHB1dCB0aGF0J3MgZXhwZWN0ZWQsIGFuZCB0aGVuIHdyaXRlIGFuXG4gICAqIGFzc2VydGlvbiB0aGF0IG9ubHkgYWNjZXB0cyB0aGF0IGV4YWN0IG91dHB1dC5cbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzbid0IGV4cGVjdGVkIHRvIHRocm93IGFuIGVycm9yLCBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0XG4gICAqIGV4YWN0bHkgdGhhdC5cbiAgICpcbiAgICogICAgIHZhciBnb29kRm4gPSBmdW5jdGlvbiAoKSB7fTtcbiAgICpcbiAgICogICAgIGV4cGVjdChnb29kRm4pLnRvLm5vdC50aHJvdygpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KGdvb2RGbikudG8ubm90LnRocm93KFJlZmVyZW5jZUVycm9yLCAneCcpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGV4cGVjdGVkIHRvIHRocm93IGFuIGVycm9yLCBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0XG4gICAqIHRoYXQgdGhlIGVycm9yIGlzIG9mIGl0cyBleHBlY3RlZCB0eXBlLCBhbmQgaGFzIGEgbWVzc2FnZSB0aGF0IGluY2x1ZGVzIGFuXG4gICAqIGV4cGVjdGVkIHN0cmluZywgcmF0aGVyIHRoYW4gYXNzZXJ0aW5nIHRoYXQgaXQgZG9lc24ndCBoYXZlIG9uZSBvZiBtYW55XG4gICAqIHVuZXhwZWN0ZWQgdHlwZXMsIGFuZCBkb2Vzbid0IGhhdmUgYSBtZXNzYWdlIHRoYXQgaW5jbHVkZXMgc29tZSBzdHJpbmcuXG4gICAqXG4gICAqICAgICB2YXIgYmFkRm4gPSBmdW5jdGlvbiAoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0lsbGVnYWwgc2FsbW9uIScpOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGJhZEZuKS50by50aHJvdyhUeXBlRXJyb3IsICdzYWxtb24nKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChiYWRGbikudG8ubm90LnRocm93KFJlZmVyZW5jZUVycm9yLCAneCcpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogYC50aHJvd2AgY2hhbmdlcyB0aGUgdGFyZ2V0IG9mIGFueSBhc3NlcnRpb25zIHRoYXQgZm9sbG93IGluIHRoZSBjaGFpbiB0b1xuICAgKiBiZSB0aGUgZXJyb3Igb2JqZWN0IHRoYXQncyB0aHJvd24uXG4gICAqXG4gICAqICAgICB2YXIgZXJyID0gbmV3IFR5cGVFcnJvcignSWxsZWdhbCBzYWxtb24hJyk7XG4gICAqICAgICBlcnIuY29kZSA9IDQyO1xuICAgKiAgICAgdmFyIGJhZEZuID0gZnVuY3Rpb24gKCkgeyB0aHJvdyBlcnI7IH07XG4gICAqXG4gICAqICAgICBleHBlY3QoYmFkRm4pLnRvLnRocm93KFR5cGVFcnJvcikud2l0aC5wcm9wZXJ0eSgnY29kZScsIDQyKTtcbiAgICpcbiAgICogYC50aHJvd2AgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gICAqIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhcyB0aGVcbiAgICogc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLiBXaGVuIG5vdCBwcm92aWRpbmcgdHdvIGFyZ3VtZW50cywgYWx3YXlzIHVzZVxuICAgKiB0aGUgc2Vjb25kIGZvcm0uXG4gICAqXG4gICAqICAgICB2YXIgZ29vZEZuID0gZnVuY3Rpb24gKCkge307XG4gICAqXG4gICAqICAgICBleHBlY3QoZ29vZEZuKS50by50aHJvdyhUeXBlRXJyb3IsICd4JywgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKiAgICAgZXhwZWN0KGdvb2RGbiwgJ25vb28gd2h5IGZhaWw/PycpLnRvLnRocm93KCk7XG4gICAqXG4gICAqIER1ZSB0byBsaW1pdGF0aW9ucyBpbiBFUzUsIGAudGhyb3dgIG1heSBub3QgYWx3YXlzIHdvcmsgYXMgZXhwZWN0ZWQgd2hlblxuICAgKiB1c2luZyBhIHRyYW5zcGlsZXIgc3VjaCBhcyBCYWJlbCBvciBUeXBlU2NyaXB0LiBJbiBwYXJ0aWN1bGFyLCBpdCBtYXlcbiAgICogcHJvZHVjZSB1bmV4cGVjdGVkIHJlc3VsdHMgd2hlbiBzdWJjbGFzc2luZyB0aGUgYnVpbHQtaW4gYEVycm9yYCBvYmplY3QgYW5kXG4gICAqIHRoZW4gcGFzc2luZyB0aGUgc3ViY2xhc3NlZCBjb25zdHJ1Y3RvciB0byBgLnRocm93YC4gU2VlIHlvdXIgdHJhbnNwaWxlcidzXG4gICAqIGRvY3MgZm9yIGRldGFpbHM6XG4gICAqXG4gICAqIC0gKFtCYWJlbF0oaHR0cHM6Ly9iYWJlbGpzLmlvL2RvY3MvdXNhZ2UvY2F2ZWF0cy8jY2xhc3NlcykpXG4gICAqIC0gKFtUeXBlU2NyaXB0XShodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvd2lraS9CcmVha2luZy1DaGFuZ2VzI2V4dGVuZGluZy1idWlsdC1pbnMtbGlrZS1lcnJvci1hcnJheS1hbmQtbWFwLW1heS1uby1sb25nZXItd29yaykpXG4gICAqXG4gICAqIEJld2FyZSBvZiBzb21lIGNvbW1vbiBtaXN0YWtlcyB3aGVuIHVzaW5nIHRoZSBgdGhyb3dgIGFzc2VydGlvbi4gT25lIGNvbW1vblxuICAgKiBtaXN0YWtlIGlzIHRvIGFjY2lkZW50YWxseSBpbnZva2UgdGhlIGZ1bmN0aW9uIHlvdXJzZWxmIGluc3RlYWQgb2YgbGV0dGluZ1xuICAgKiB0aGUgYHRocm93YCBhc3NlcnRpb24gaW52b2tlIHRoZSBmdW5jdGlvbiBmb3IgeW91LiBGb3IgZXhhbXBsZSwgd2hlblxuICAgKiB0ZXN0aW5nIGlmIGEgZnVuY3Rpb24gbmFtZWQgYGZuYCB0aHJvd3MsIHByb3ZpZGUgYGZuYCBpbnN0ZWFkIG9mIGBmbigpYCBhc1xuICAgKiB0aGUgdGFyZ2V0IGZvciB0aGUgYXNzZXJ0aW9uLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KGZuKS50by50aHJvdygpOyAgICAgLy8gR29vZCEgVGVzdHMgYGZuYCBhcyBkZXNpcmVkXG4gICAqICAgICBleHBlY3QoZm4oKSkudG8udGhyb3coKTsgICAvLyBCYWQhIFRlc3RzIHJlc3VsdCBvZiBgZm4oKWAsIG5vdCBgZm5gXG4gICAqXG4gICAqIElmIHlvdSBuZWVkIHRvIGFzc2VydCB0aGF0IHlvdXIgZnVuY3Rpb24gYGZuYCB0aHJvd3Mgd2hlbiBwYXNzZWQgY2VydGFpblxuICAgKiBhcmd1bWVudHMsIHRoZW4gd3JhcCBhIGNhbGwgdG8gYGZuYCBpbnNpZGUgb2YgYW5vdGhlciBmdW5jdGlvbi5cbiAgICpcbiAgICogICAgIGV4cGVjdChmdW5jdGlvbiAoKSB7IGZuKDQyKTsgfSkudG8udGhyb3coKTsgIC8vIEZ1bmN0aW9uIGV4cHJlc3Npb25cbiAgICogICAgIGV4cGVjdCgoKSA9PiBmbig0MikpLnRvLnRocm93KCk7ICAgICAgICAgICAgIC8vIEVTNiBhcnJvdyBmdW5jdGlvblxuICAgKlxuICAgKiBBbm90aGVyIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHByb3ZpZGUgYW4gb2JqZWN0IG1ldGhvZCAob3IgYW55IHN0YW5kLWFsb25lXG4gICAqIGZ1bmN0aW9uIHRoYXQgcmVsaWVzIG9uIGB0aGlzYCkgYXMgdGhlIHRhcmdldCBvZiB0aGUgYXNzZXJ0aW9uLiBEb2luZyBzbyBpc1xuICAgKiBwcm9ibGVtYXRpYyBiZWNhdXNlIHRoZSBgdGhpc2AgY29udGV4dCB3aWxsIGJlIGxvc3Qgd2hlbiB0aGUgZnVuY3Rpb24gaXNcbiAgICogaW52b2tlZCBieSBgLnRocm93YDsgdGhlcmUncyBubyB3YXkgZm9yIGl0IHRvIGtub3cgd2hhdCBgdGhpc2AgaXMgc3VwcG9zZWRcbiAgICogdG8gYmUuIFRoZXJlIGFyZSB0d28gd2F5cyBhcm91bmQgdGhpcyBwcm9ibGVtLiBPbmUgc29sdXRpb24gaXMgdG8gd3JhcCB0aGVcbiAgICogbWV0aG9kIG9yIGZ1bmN0aW9uIGNhbGwgaW5zaWRlIG9mIGFub3RoZXIgZnVuY3Rpb24uIEFub3RoZXIgc29sdXRpb24gaXMgdG9cbiAgICogdXNlIGBiaW5kYC5cbiAgICpcbiAgICogICAgIGV4cGVjdChmdW5jdGlvbiAoKSB7IGNhdC5tZW93KCk7IH0pLnRvLnRocm93KCk7ICAvLyBGdW5jdGlvbiBleHByZXNzaW9uXG4gICAqICAgICBleHBlY3QoKCkgPT4gY2F0Lm1lb3coKSkudG8udGhyb3coKTsgICAgICAgICAgICAgLy8gRVM2IGFycm93IGZ1bmN0aW9uXG4gICAqICAgICBleHBlY3QoY2F0Lm1lb3cuYmluZChjYXQpKS50by50aHJvdygpOyAgICAgICAgICAgLy8gQmluZFxuICAgKlxuICAgKiBGaW5hbGx5LCBpdCdzIHdvcnRoIG1lbnRpb25pbmcgdGhhdCBpdCdzIGEgYmVzdCBwcmFjdGljZSBpbiBKYXZhU2NyaXB0IHRvXG4gICAqIG9ubHkgdGhyb3cgYEVycm9yYCBhbmQgZGVyaXZhdGl2ZXMgb2YgYEVycm9yYCBzdWNoIGFzIGBSZWZlcmVuY2VFcnJvcmAsXG4gICAqIGBUeXBlRXJyb3JgLCBhbmQgdXNlci1kZWZpbmVkIG9iamVjdHMgdGhhdCBleHRlbmQgYEVycm9yYC4gTm8gb3RoZXIgdHlwZSBvZlxuICAgKiB2YWx1ZSB3aWxsIGdlbmVyYXRlIGEgc3RhY2sgdHJhY2Ugd2hlbiBpbml0aWFsaXplZC4gV2l0aCB0aGF0IHNhaWQsIHRoZVxuICAgKiBgdGhyb3dgIGFzc2VydGlvbiBkb2VzIHRlY2huaWNhbGx5IHN1cHBvcnQgYW55IHR5cGUgb2YgdmFsdWUgYmVpbmcgdGhyb3duLFxuICAgKiBub3QganVzdCBgRXJyb3JgIGFuZCBpdHMgZGVyaXZhdGl2ZXMuXG4gICAqXG4gICAqIFRoZSBhbGlhc2VzIGAudGhyb3dzYCBhbmQgYC5UaHJvd2AgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGhcbiAgICogYC50aHJvd2AuXG4gICAqXG4gICAqIEBuYW1lIHRocm93XG4gICAqIEBhbGlhcyB0aHJvd3NcbiAgICogQGFsaWFzIFRocm93XG4gICAqIEBwYXJhbSB7RXJyb3J8RXJyb3JDb25zdHJ1Y3Rvcn0gZXJyb3JMaWtlXG4gICAqIEBwYXJhbSB7U3RyaW5nfFJlZ0V4cH0gZXJyTXNnTWF0Y2hlciBlcnJvciBtZXNzYWdlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0Vycm9yI0Vycm9yX3R5cGVzXG4gICAqIEByZXR1cm5zIGVycm9yIGZvciBjaGFpbmluZyAobnVsbCBpZiBubyBlcnJvcilcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0VGhyb3dzIChlcnJvckxpa2UsIGVyck1zZ01hdGNoZXIsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpXG4gICAgICAsIGZsYWdNc2cgPSBmbGFnKHRoaXMsICdtZXNzYWdlJylcbiAgICAgICwgbmVnYXRlID0gZmxhZyh0aGlzLCAnbmVnYXRlJykgfHwgZmFsc2U7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoJ2Z1bmN0aW9uJyk7XG5cbiAgICBpZiAoZXJyb3JMaWtlIGluc3RhbmNlb2YgUmVnRXhwIHx8IHR5cGVvZiBlcnJvckxpa2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnJNc2dNYXRjaGVyID0gZXJyb3JMaWtlO1xuICAgICAgZXJyb3JMaWtlID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgY2F1Z2h0RXJyO1xuICAgIHRyeSB7XG4gICAgICBvYmooKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhdWdodEVyciA9IGVycjtcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBoYXZlIHRoZSBuZWdhdGUgZmxhZyBlbmFibGVkIGFuZCBhdCBsZWFzdCBvbmUgdmFsaWQgYXJndW1lbnQgaXQgbWVhbnMgd2UgZG8gZXhwZWN0IGFuIGVycm9yXG4gICAgLy8gYnV0IHdlIHdhbnQgaXQgdG8gbWF0Y2ggYSBnaXZlbiBzZXQgb2YgY3JpdGVyaWFcbiAgICB2YXIgZXZlcnlBcmdJc1VuZGVmaW5lZCA9IGVycm9yTGlrZSA9PT0gdW5kZWZpbmVkICYmIGVyck1zZ01hdGNoZXIgPT09IHVuZGVmaW5lZDtcblxuICAgIC8vIElmIHdlJ3ZlIGdvdCB0aGUgbmVnYXRlIGZsYWcgZW5hYmxlZCBhbmQgYm90aCBhcmdzLCB3ZSBzaG91bGQgb25seSBmYWlsIGlmIGJvdGggYXJlbid0IGNvbXBhdGlibGVcbiAgICAvLyBTZWUgSXNzdWUgIzU1MSBhbmQgUFIgIzY4M0BHaXRIdWJcbiAgICB2YXIgZXZlcnlBcmdJc0RlZmluZWQgPSBCb29sZWFuKGVycm9yTGlrZSAmJiBlcnJNc2dNYXRjaGVyKTtcbiAgICB2YXIgZXJyb3JMaWtlRmFpbCA9IGZhbHNlO1xuICAgIHZhciBlcnJNc2dNYXRjaGVyRmFpbCA9IGZhbHNlO1xuXG4gICAgLy8gQ2hlY2tpbmcgaWYgZXJyb3Igd2FzIHRocm93blxuICAgIGlmIChldmVyeUFyZ0lzVW5kZWZpbmVkIHx8ICFldmVyeUFyZ0lzVW5kZWZpbmVkICYmICFuZWdhdGUpIHtcbiAgICAgIC8vIFdlIG5lZWQgdGhpcyB0byBkaXNwbGF5IHJlc3VsdHMgY29ycmVjdGx5IGFjY29yZGluZyB0byB0aGVpciB0eXBlc1xuICAgICAgdmFyIGVycm9yTGlrZVN0cmluZyA9ICdhbiBlcnJvcic7XG4gICAgICBpZiAoZXJyb3JMaWtlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgZXJyb3JMaWtlU3RyaW5nID0gJyN7ZXhwfSc7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yTGlrZSkge1xuICAgICAgICBlcnJvckxpa2VTdHJpbmcgPSBfLmNoZWNrRXJyb3IuZ2V0Q29uc3RydWN0b3JOYW1lKGVycm9yTGlrZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIGNhdWdodEVyclxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIHRocm93ICcgKyBlcnJvckxpa2VTdHJpbmdcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgdGhyb3cgYW4gZXJyb3IgYnV0ICN7YWN0fSB3YXMgdGhyb3duJ1xuICAgICAgICAsIGVycm9yTGlrZSAmJiBlcnJvckxpa2UudG9TdHJpbmcoKVxuICAgICAgICAsIChjYXVnaHRFcnIgaW5zdGFuY2VvZiBFcnJvciA/XG4gICAgICAgICAgICBjYXVnaHRFcnIudG9TdHJpbmcoKSA6ICh0eXBlb2YgY2F1Z2h0RXJyID09PSAnc3RyaW5nJyA/IGNhdWdodEVyciA6IGNhdWdodEVyciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5jaGVja0Vycm9yLmdldENvbnN0cnVjdG9yTmFtZShjYXVnaHRFcnIpKSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yTGlrZSAmJiBjYXVnaHRFcnIpIHtcbiAgICAgIC8vIFdlIHNob3VsZCBjb21wYXJlIGluc3RhbmNlcyBvbmx5IGlmIGBlcnJvckxpa2VgIGlzIGFuIGluc3RhbmNlIG9mIGBFcnJvcmBcbiAgICAgIGlmIChlcnJvckxpa2UgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICB2YXIgaXNDb21wYXRpYmxlSW5zdGFuY2UgPSBfLmNoZWNrRXJyb3IuY29tcGF0aWJsZUluc3RhbmNlKGNhdWdodEVyciwgZXJyb3JMaWtlKTtcblxuICAgICAgICBpZiAoaXNDb21wYXRpYmxlSW5zdGFuY2UgPT09IG5lZ2F0ZSkge1xuICAgICAgICAgIC8vIFRoZXNlIGNoZWNrcyB3ZXJlIGNyZWF0ZWQgdG8gZW5zdXJlIHdlIHdvbid0IGZhaWwgdG9vIHNvb24gd2hlbiB3ZSd2ZSBnb3QgYm90aCBhcmdzIGFuZCBhIG5lZ2F0ZVxuICAgICAgICAgIC8vIFNlZSBJc3N1ZSAjNTUxIGFuZCBQUiAjNjgzQEdpdEh1YlxuICAgICAgICAgIGlmIChldmVyeUFyZ0lzRGVmaW5lZCAmJiBuZWdhdGUpIHtcbiAgICAgICAgICAgIGVycm9yTGlrZUZhaWwgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICBuZWdhdGVcbiAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyAje2V4cH0gYnV0ICN7YWN0fSB3YXMgdGhyb3duJ1xuICAgICAgICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCB0aHJvdyAje2V4cH0nICsgKGNhdWdodEVyciAmJiAhbmVnYXRlID8gJyBidXQgI3thY3R9IHdhcyB0aHJvd24nIDogJycpXG4gICAgICAgICAgICAgICwgZXJyb3JMaWtlLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgLCBjYXVnaHRFcnIudG9TdHJpbmcoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGlzQ29tcGF0aWJsZUNvbnN0cnVjdG9yID0gXy5jaGVja0Vycm9yLmNvbXBhdGlibGVDb25zdHJ1Y3RvcihjYXVnaHRFcnIsIGVycm9yTGlrZSk7XG4gICAgICBpZiAoaXNDb21wYXRpYmxlQ29uc3RydWN0b3IgPT09IG5lZ2F0ZSkge1xuICAgICAgICBpZiAoZXZlcnlBcmdJc0RlZmluZWQgJiYgbmVnYXRlKSB7XG4gICAgICAgICAgICBlcnJvckxpa2VGYWlsID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgbmVnYXRlXG4gICAgICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIHRocm93ICN7ZXhwfSBidXQgI3thY3R9IHdhcyB0aHJvd24nXG4gICAgICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCB0aHJvdyAje2V4cH0nICsgKGNhdWdodEVyciA/ICcgYnV0ICN7YWN0fSB3YXMgdGhyb3duJyA6ICcnKVxuICAgICAgICAgICAgLCAoZXJyb3JMaWtlIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvckxpa2UudG9TdHJpbmcoKSA6IGVycm9yTGlrZSAmJiBfLmNoZWNrRXJyb3IuZ2V0Q29uc3RydWN0b3JOYW1lKGVycm9yTGlrZSkpXG4gICAgICAgICAgICAsIChjYXVnaHRFcnIgaW5zdGFuY2VvZiBFcnJvciA/IGNhdWdodEVyci50b1N0cmluZygpIDogY2F1Z2h0RXJyICYmIF8uY2hlY2tFcnJvci5nZXRDb25zdHJ1Y3Rvck5hbWUoY2F1Z2h0RXJyKSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhdWdodEVyciAmJiBlcnJNc2dNYXRjaGVyICE9PSB1bmRlZmluZWQgJiYgZXJyTXNnTWF0Y2hlciAhPT0gbnVsbCkge1xuICAgICAgLy8gSGVyZSB3ZSBjaGVjayBjb21wYXRpYmxlIG1lc3NhZ2VzXG4gICAgICB2YXIgcGxhY2Vob2xkZXIgPSAnaW5jbHVkaW5nJztcbiAgICAgIGlmIChlcnJNc2dNYXRjaGVyIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIHBsYWNlaG9sZGVyID0gJ21hdGNoaW5nJ1xuICAgICAgfVxuXG4gICAgICB2YXIgaXNDb21wYXRpYmxlTWVzc2FnZSA9IF8uY2hlY2tFcnJvci5jb21wYXRpYmxlTWVzc2FnZShjYXVnaHRFcnIsIGVyck1zZ01hdGNoZXIpO1xuICAgICAgaWYgKGlzQ29tcGF0aWJsZU1lc3NhZ2UgPT09IG5lZ2F0ZSkge1xuICAgICAgICBpZiAoZXZlcnlBcmdJc0RlZmluZWQgJiYgbmVnYXRlKSB7XG4gICAgICAgICAgICBlcnJNc2dNYXRjaGVyRmFpbCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICBuZWdhdGVcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgZXJyb3IgJyArIHBsYWNlaG9sZGVyICsgJyAje2V4cH0gYnV0IGdvdCAje2FjdH0nXG4gICAgICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIHRocm93IGVycm9yIG5vdCAnICsgcGxhY2Vob2xkZXIgKyAnICN7ZXhwfSdcbiAgICAgICAgICAgICwgIGVyck1zZ01hdGNoZXJcbiAgICAgICAgICAgICwgIF8uY2hlY2tFcnJvci5nZXRNZXNzYWdlKGNhdWdodEVycilcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgYm90aCBhc3NlcnRpb25zIGZhaWxlZCBhbmQgYm90aCBzaG91bGQndmUgbWF0Y2hlZCB3ZSB0aHJvdyBhbiBlcnJvclxuICAgIGlmIChlcnJvckxpa2VGYWlsICYmIGVyck1zZ01hdGNoZXJGYWlsKSB7XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgbmVnYXRlXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgI3tleHB9IGJ1dCAje2FjdH0gd2FzIHRocm93bidcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgdGhyb3cgI3tleHB9JyArIChjYXVnaHRFcnIgPyAnIGJ1dCAje2FjdH0gd2FzIHRocm93bicgOiAnJylcbiAgICAgICAgLCAoZXJyb3JMaWtlIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvckxpa2UudG9TdHJpbmcoKSA6IGVycm9yTGlrZSAmJiBfLmNoZWNrRXJyb3IuZ2V0Q29uc3RydWN0b3JOYW1lKGVycm9yTGlrZSkpXG4gICAgICAgICwgKGNhdWdodEVyciBpbnN0YW5jZW9mIEVycm9yID8gY2F1Z2h0RXJyLnRvU3RyaW5nKCkgOiBjYXVnaHRFcnIgJiYgXy5jaGVja0Vycm9yLmdldENvbnN0cnVjdG9yTmFtZShjYXVnaHRFcnIpKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmbGFnKHRoaXMsICdvYmplY3QnLCBjYXVnaHRFcnIpO1xuICB9O1xuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ3Rocm93JywgYXNzZXJ0VGhyb3dzKTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgndGhyb3dzJywgYXNzZXJ0VGhyb3dzKTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnVGhyb3cnLCBhc3NlcnRUaHJvd3MpO1xuXG4gIC8qKlxuICAgKiAjIyMgLnJlc3BvbmRUbyhtZXRob2RbLCBtc2ddKVxuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgaXMgYSBub24tZnVuY3Rpb24gb2JqZWN0LCBgLnJlc3BvbmRUb2AgYXNzZXJ0cyB0aGF0IHRoZVxuICAgKiB0YXJnZXQgaGFzIGEgbWV0aG9kIHdpdGggdGhlIGdpdmVuIG5hbWUgYG1ldGhvZGAuIFRoZSBtZXRob2QgY2FuIGJlIG93biBvclxuICAgKiBpbmhlcml0ZWQsIGFuZCBpdCBjYW4gYmUgZW51bWVyYWJsZSBvciBub24tZW51bWVyYWJsZS5cbiAgICpcbiAgICogICAgIGZ1bmN0aW9uIENhdCAoKSB7fVxuICAgKiAgICAgQ2F0LnByb3RvdHlwZS5tZW93ID0gZnVuY3Rpb24gKCkge307XG4gICAqXG4gICAqICAgICBleHBlY3QobmV3IENhdCgpKS50by5yZXNwb25kVG8oJ21lb3cnKTtcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGEgZnVuY3Rpb24sIGAucmVzcG9uZFRvYCBhc3NlcnRzIHRoYXQgdGhlIHRhcmdldCdzXG4gICAqIGBwcm90b3R5cGVgIHByb3BlcnR5IGhhcyBhIG1ldGhvZCB3aXRoIHRoZSBnaXZlbiBuYW1lIGBtZXRob2RgLiBBZ2FpbiwgdGhlXG4gICAqIG1ldGhvZCBjYW4gYmUgb3duIG9yIGluaGVyaXRlZCwgYW5kIGl0IGNhbiBiZSBlbnVtZXJhYmxlIG9yIG5vbi1lbnVtZXJhYmxlLlxuICAgKlxuICAgKiAgICAgZnVuY3Rpb24gQ2F0ICgpIHt9XG4gICAqICAgICBDYXQucHJvdG90eXBlLm1lb3cgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICpcbiAgICogICAgIGV4cGVjdChDYXQpLnRvLnJlc3BvbmRUbygnbWVvdycpO1xuICAgKlxuICAgKiBBZGQgYC5pdHNlbGZgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIGZvcmNlIGAucmVzcG9uZFRvYCB0byB0cmVhdCB0aGVcbiAgICogdGFyZ2V0IGFzIGEgbm9uLWZ1bmN0aW9uIG9iamVjdCwgZXZlbiBpZiBpdCdzIGEgZnVuY3Rpb24uIFRodXMsIGl0IGFzc2VydHNcbiAgICogdGhhdCB0aGUgdGFyZ2V0IGhhcyBhIG1ldGhvZCB3aXRoIHRoZSBnaXZlbiBuYW1lIGBtZXRob2RgLCByYXRoZXIgdGhhblxuICAgKiBhc3NlcnRpbmcgdGhhdCB0aGUgdGFyZ2V0J3MgYHByb3RvdHlwZWAgcHJvcGVydHkgaGFzIGEgbWV0aG9kIHdpdGggdGhlXG4gICAqIGdpdmVuIG5hbWUgYG1ldGhvZGAuXG4gICAqXG4gICAqICAgICBmdW5jdGlvbiBDYXQgKCkge31cbiAgICogICAgIENhdC5wcm90b3R5cGUubWVvdyA9IGZ1bmN0aW9uICgpIHt9O1xuICAgKiAgICAgQ2F0Lmhpc3MgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICpcbiAgICogICAgIGV4cGVjdChDYXQpLml0c2VsZi50by5yZXNwb25kVG8oJ2hpc3MnKS5idXQubm90LnJlc3BvbmRUbygnbWVvdycpO1xuICAgKlxuICAgKiBXaGVuIG5vdCBhZGRpbmcgYC5pdHNlbGZgLCBpdCdzIGltcG9ydGFudCB0byBjaGVjayB0aGUgdGFyZ2V0J3MgdHlwZSBiZWZvcmVcbiAgICogdXNpbmcgYC5yZXNwb25kVG9gLiBTZWUgdGhlIGAuYWAgZG9jIGZvciBpbmZvIG9uIGNoZWNraW5nIGEgdGFyZ2V0J3MgdHlwZS5cbiAgICpcbiAgICogICAgIGZ1bmN0aW9uIENhdCAoKSB7fVxuICAgKiAgICAgQ2F0LnByb3RvdHlwZS5tZW93ID0gZnVuY3Rpb24gKCkge307XG4gICAqXG4gICAqICAgICBleHBlY3QobmV3IENhdCgpKS50by5iZS5hbignb2JqZWN0JykudGhhdC5yZXNwb25kc1RvKCdtZW93Jyk7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAucmVzcG9uZFRvYC5cbiAgICpcbiAgICogICAgIGZ1bmN0aW9uIERvZyAoKSB7fVxuICAgKiAgICAgRG9nLnByb3RvdHlwZS5iYXJrID0gZnVuY3Rpb24gKCkge307XG4gICAqXG4gICAqICAgICBleHBlY3QobmV3IERvZygpKS50by5ub3QucmVzcG9uZFRvKCdtZW93Jyk7XG4gICAqXG4gICAqIGAucmVzcG9uZFRvYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yXG4gICAqIG1lc3NhZ2UgdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzXG4gICAqIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe30pLnRvLnJlc3BvbmRUbygnbWVvdycsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdCh7fSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLnJlc3BvbmRUbygnbWVvdycpO1xuICAgKlxuICAgKiBUaGUgYWxpYXMgYC5yZXNwb25kc1RvYCBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgd2l0aCBgLnJlc3BvbmRUb2AuXG4gICAqXG4gICAqIEBuYW1lIHJlc3BvbmRUb1xuICAgKiBAYWxpYXMgcmVzcG9uZHNUb1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWV0aG9kXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiByZXNwb25kVG8gKG1ldGhvZCwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIGl0c2VsZiA9IGZsYWcodGhpcywgJ2l0c2VsZicpXG4gICAgICAsIGNvbnRleHQgPSAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIG9iaiAmJiAhaXRzZWxmKVxuICAgICAgICA/IG9iai5wcm90b3R5cGVbbWV0aG9kXVxuICAgICAgICA6IG9ialttZXRob2RdO1xuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICdmdW5jdGlvbicgPT09IHR5cGVvZiBjb250ZXh0XG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIHJlc3BvbmQgdG8gJyArIF8uaW5zcGVjdChtZXRob2QpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCByZXNwb25kIHRvICcgKyBfLmluc3BlY3QobWV0aG9kKVxuICAgICk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdyZXNwb25kVG8nLCByZXNwb25kVG8pO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdyZXNwb25kc1RvJywgcmVzcG9uZFRvKTtcblxuICAvKipcbiAgICogIyMjIC5pdHNlbGZcbiAgICpcbiAgICogRm9yY2VzIGFsbCBgLnJlc3BvbmRUb2AgYXNzZXJ0aW9ucyB0aGF0IGZvbGxvdyBpbiB0aGUgY2hhaW4gdG8gYmVoYXZlIGFzIGlmXG4gICAqIHRoZSB0YXJnZXQgaXMgYSBub24tZnVuY3Rpb24gb2JqZWN0LCBldmVuIGlmIGl0J3MgYSBmdW5jdGlvbi4gVGh1cywgaXRcbiAgICogY2F1c2VzIGAucmVzcG9uZFRvYCB0byBhc3NlcnQgdGhhdCB0aGUgdGFyZ2V0IGhhcyBhIG1ldGhvZCB3aXRoIHRoZSBnaXZlblxuICAgKiBuYW1lLCByYXRoZXIgdGhhbiBhc3NlcnRpbmcgdGhhdCB0aGUgdGFyZ2V0J3MgYHByb3RvdHlwZWAgcHJvcGVydHkgaGFzIGFcbiAgICogbWV0aG9kIHdpdGggdGhlIGdpdmVuIG5hbWUuXG4gICAqXG4gICAqICAgICBmdW5jdGlvbiBDYXQgKCkge31cbiAgICogICAgIENhdC5wcm90b3R5cGUubWVvdyA9IGZ1bmN0aW9uICgpIHt9O1xuICAgKiAgICAgQ2F0Lmhpc3MgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICpcbiAgICogICAgIGV4cGVjdChDYXQpLml0c2VsZi50by5yZXNwb25kVG8oJ2hpc3MnKS5idXQubm90LnJlc3BvbmRUbygnbWVvdycpO1xuICAgKlxuICAgKiBAbmFtZSBpdHNlbGZcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdpdHNlbGYnLCBmdW5jdGlvbiAoKSB7XG4gICAgZmxhZyh0aGlzLCAnaXRzZWxmJywgdHJ1ZSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLnNhdGlzZnkobWF0Y2hlclssIG1zZ10pXG4gICAqXG4gICAqIEludm9rZXMgdGhlIGdpdmVuIGBtYXRjaGVyYCBmdW5jdGlvbiB3aXRoIHRoZSB0YXJnZXQgYmVpbmcgcGFzc2VkIGFzIHRoZVxuICAgKiBmaXJzdCBhcmd1bWVudCwgYW5kIGFzc2VydHMgdGhhdCB0aGUgdmFsdWUgcmV0dXJuZWQgaXMgdHJ1dGh5LlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLnNhdGlzZnkoZnVuY3Rpb24obnVtKSB7XG4gICAqICAgICAgIHJldHVybiBudW0gPiAwO1xuICAgKiAgICAgfSk7XG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuc2F0aXNmeWAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8ubm90LnNhdGlzZnkoZnVuY3Rpb24obnVtKSB7XG4gICAqICAgICAgIHJldHVybiBudW0gPiAyO1xuICAgKiAgICAgfSk7XG4gICAqXG4gICAqIGAuc2F0aXNmeWAgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvclxuICAgKiBtZXNzYWdlIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhc1xuICAgKiB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLnNhdGlzZnkoZnVuY3Rpb24obnVtKSB7XG4gICAqICAgICAgIHJldHVybiBudW0gPiAyO1xuICAgKiAgICAgfSwgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKlxuICAgKiAgICAgZXhwZWN0KDEsICdub29vIHdoeSBmYWlsPz8nKS50by5zYXRpc2Z5KGZ1bmN0aW9uKG51bSkge1xuICAgKiAgICAgICByZXR1cm4gbnVtID4gMjtcbiAgICogICAgIH0pO1xuICAgKlxuICAgKiBUaGUgYWxpYXMgYC5zYXRpc2ZpZXNgIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB3aXRoIGAuc2F0aXNmeWAuXG4gICAqXG4gICAqIEBuYW1lIHNhdGlzZnlcbiAgICogQGFsaWFzIHNhdGlzZmllc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtYXRjaGVyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBzYXRpc2Z5IChtYXRjaGVyLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG4gICAgdmFyIHJlc3VsdCA9IG1hdGNoZXIob2JqKTtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgcmVzdWx0XG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIHNhdGlzZnkgJyArIF8ub2JqRGlzcGxheShtYXRjaGVyKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3Qgc2F0aXNmeScgKyBfLm9iakRpc3BsYXkobWF0Y2hlcilcbiAgICAgICwgZmxhZyh0aGlzLCAnbmVnYXRlJykgPyBmYWxzZSA6IHRydWVcbiAgICAgICwgcmVzdWx0XG4gICAgKTtcbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ3NhdGlzZnknLCBzYXRpc2Z5KTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnc2F0aXNmaWVzJywgc2F0aXNmeSk7XG5cbiAgLyoqXG4gICAqICMjIyAuY2xvc2VUbyhleHBlY3RlZCwgZGVsdGFbLCBtc2ddKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBhIG51bWJlciB0aGF0J3Mgd2l0aGluIGEgZ2l2ZW4gKy8tIGBkZWx0YWAgcmFuZ2VcbiAgICogb2YgdGhlIGdpdmVuIG51bWJlciBgZXhwZWN0ZWRgLiBIb3dldmVyLCBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IHRoYXQgdGhlXG4gICAqIHRhcmdldCBpcyBlcXVhbCB0byBpdHMgZXhwZWN0ZWQgdmFsdWUuXG4gICAqXG4gICAqICAgICAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDEuNSkudG8uZXF1YWwoMS41KTtcbiAgICpcbiAgICogICAgIC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDEuNSkudG8uYmUuY2xvc2VUbygxLCAwLjUpO1xuICAgKiAgICAgZXhwZWN0KDEuNSkudG8uYmUuY2xvc2VUbygyLCAwLjUpO1xuICAgKiAgICAgZXhwZWN0KDEuNSkudG8uYmUuY2xvc2VUbygxLCAxKTtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5jbG9zZVRvYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxLjUpLnRvLmVxdWFsKDEuNSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoMS41KS50by5ub3QuYmUuY2xvc2VUbygzLCAxKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIGAuY2xvc2VUb2AgYWNjZXB0cyBhbiBvcHRpb25hbCBgbXNnYCBhcmd1bWVudCB3aGljaCBpcyBhIGN1c3RvbSBlcnJvclxuICAgKiBtZXNzYWdlIHRvIHNob3cgd2hlbiB0aGUgYXNzZXJ0aW9uIGZhaWxzLiBUaGUgbWVzc2FnZSBjYW4gYWxzbyBiZSBnaXZlbiBhc1xuICAgKiB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEuNSkudG8uYmUuY2xvc2VUbygzLCAxLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3QoMS41LCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUuY2xvc2VUbygzLCAxKTtcbiAgICpcbiAgICogVGhlIGFsaWFzIGAuYXBwcm94aW1hdGVseWAgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5jbG9zZVRvYC5cbiAgICpcbiAgICogQG5hbWUgY2xvc2VUb1xuICAgKiBAYWxpYXMgYXBwcm94aW1hdGVseVxuICAgKiBAcGFyYW0ge051bWJlcn0gZXhwZWN0ZWRcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGRlbHRhXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBjbG9zZVRvKGV4cGVjdGVkLCBkZWx0YSwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIGZsYWdNc2cgPSBmbGFnKHRoaXMsICdtZXNzYWdlJylcbiAgICAgICwgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKTtcblxuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKCdudW1iZXInKTtcbiAgICBpZiAodHlwZW9mIGV4cGVjdGVkICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgZGVsdGEgIT09ICdudW1iZXInKSB7XG4gICAgICBmbGFnTXNnID0gZmxhZ01zZyA/IGZsYWdNc2cgKyAnOiAnIDogJyc7XG4gICAgICB2YXIgZGVsdGFNZXNzYWdlID0gZGVsdGEgPT09IHVuZGVmaW5lZCA/IFwiLCBhbmQgYSBkZWx0YSBpcyByZXF1aXJlZFwiIDogXCJcIjtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgICBmbGFnTXNnICsgJ3RoZSBhcmd1bWVudHMgdG8gY2xvc2VUbyBvciBhcHByb3hpbWF0ZWx5IG11c3QgYmUgbnVtYmVycycgKyBkZWx0YU1lc3NhZ2UsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHNzZmlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIE1hdGguYWJzKG9iaiAtIGV4cGVjdGVkKSA8PSBkZWx0YVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBjbG9zZSB0byAnICsgZXhwZWN0ZWQgKyAnICsvLSAnICsgZGVsdGFcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIGNsb3NlIHRvICcgKyBleHBlY3RlZCArICcgKy8tICcgKyBkZWx0YVxuICAgICk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdjbG9zZVRvJywgY2xvc2VUbyk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2FwcHJveGltYXRlbHknLCBjbG9zZVRvKTtcblxuICAvLyBOb3RlOiBEdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGlmIHRlc3RpbmcgZm9yIGluY2x1c2lvbiBpbnN0ZWFkIG9mIHNhbWVuZXNzLlxuICBmdW5jdGlvbiBpc1N1YnNldE9mKHN1YnNldCwgc3VwZXJzZXQsIGNtcCwgY29udGFpbnMsIG9yZGVyZWQpIHtcbiAgICBpZiAoIWNvbnRhaW5zKSB7XG4gICAgICBpZiAoc3Vic2V0Lmxlbmd0aCAhPT0gc3VwZXJzZXQubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICBzdXBlcnNldCA9IHN1cGVyc2V0LnNsaWNlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnNldC5ldmVyeShmdW5jdGlvbihlbGVtLCBpZHgpIHtcbiAgICAgIGlmIChvcmRlcmVkKSByZXR1cm4gY21wID8gY21wKGVsZW0sIHN1cGVyc2V0W2lkeF0pIDogZWxlbSA9PT0gc3VwZXJzZXRbaWR4XTtcblxuICAgICAgaWYgKCFjbXApIHtcbiAgICAgICAgdmFyIG1hdGNoSWR4ID0gc3VwZXJzZXQuaW5kZXhPZihlbGVtKTtcbiAgICAgICAgaWYgKG1hdGNoSWR4ID09PSAtMSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIC8vIFJlbW92ZSBtYXRjaCBmcm9tIHN1cGVyc2V0IHNvIG5vdCBjb3VudGVkIHR3aWNlIGlmIGR1cGxpY2F0ZSBpbiBzdWJzZXQuXG4gICAgICAgIGlmICghY29udGFpbnMpIHN1cGVyc2V0LnNwbGljZShtYXRjaElkeCwgMSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3VwZXJzZXQuc29tZShmdW5jdGlvbihlbGVtMiwgbWF0Y2hJZHgpIHtcbiAgICAgICAgaWYgKCFjbXAoZWxlbSwgZWxlbTIpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgLy8gUmVtb3ZlIG1hdGNoIGZyb20gc3VwZXJzZXQgc28gbm90IGNvdW50ZWQgdHdpY2UgaWYgZHVwbGljYXRlIGluIHN1YnNldC5cbiAgICAgICAgaWYgKCFjb250YWlucykgc3VwZXJzZXQuc3BsaWNlKG1hdGNoSWR4LCAxKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLm1lbWJlcnMoc2V0WywgbXNnXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgYXJyYXkgaGFzIHRoZSBzYW1lIG1lbWJlcnMgYXMgdGhlIGdpdmVuIGFycmF5XG4gICAqIGBzZXRgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5tZW1iZXJzKFsyLCAxLCAzXSk7XG4gICAqICAgICBleHBlY3QoWzEsIDIsIDJdKS50by5oYXZlLm1lbWJlcnMoWzIsIDEsIDJdKTtcbiAgICpcbiAgICogQnkgZGVmYXVsdCwgbWVtYmVycyBhcmUgY29tcGFyZWQgdXNpbmcgc3RyaWN0IChgPT09YCkgZXF1YWxpdHkuIEFkZCBgLmRlZXBgXG4gICAqIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIHVzZSBkZWVwIGVxdWFsaXR5IGluc3RlYWQuIFNlZSB0aGUgYGRlZXAtZXFsYFxuICAgKiBwcm9qZWN0IHBhZ2UgZm9yIGluZm8gb24gdGhlIGRlZXAgZXF1YWxpdHkgYWxnb3JpdGhtOlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vY2hhaWpzL2RlZXAtZXFsLlxuICAgKlxuICAgKiAgICAgLy8gVGFyZ2V0IGFycmF5IGRlZXBseSAoYnV0IG5vdCBzdHJpY3RseSkgaGFzIG1lbWJlciBge2E6IDF9YFxuICAgKiAgICAgZXhwZWN0KFt7YTogMX1dKS50by5oYXZlLmRlZXAubWVtYmVycyhbe2E6IDF9XSk7XG4gICAqICAgICBleHBlY3QoW3thOiAxfV0pLnRvLm5vdC5oYXZlLm1lbWJlcnMoW3thOiAxfV0pO1xuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBvcmRlciBkb2Vzbid0IG1hdHRlci4gQWRkIGAub3JkZXJlZGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG9cbiAgICogcmVxdWlyZSB0aGF0IG1lbWJlcnMgYXBwZWFyIGluIHRoZSBzYW1lIG9yZGVyLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaGF2ZS5vcmRlcmVkLm1lbWJlcnMoWzEsIDIsIDNdKTtcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmhhdmUubWVtYmVycyhbMiwgMSwgM10pXG4gICAqICAgICAgIC5idXQubm90Lm9yZGVyZWQubWVtYmVycyhbMiwgMSwgM10pO1xuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBib3RoIGFycmF5cyBtdXN0IGJlIHRoZSBzYW1lIHNpemUuIEFkZCBgLmluY2x1ZGVgIGVhcmxpZXIgaW5cbiAgICogdGhlIGNoYWluIHRvIHJlcXVpcmUgdGhhdCB0aGUgdGFyZ2V0J3MgbWVtYmVycyBiZSBhIHN1cGVyc2V0IG9mIHRoZVxuICAgKiBleHBlY3RlZCBtZW1iZXJzLiBOb3RlIHRoYXQgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBpbiB0aGUgc3Vic2V0IHdoZW5cbiAgICogYC5pbmNsdWRlYCBpcyBhZGRlZC5cbiAgICpcbiAgICogICAgIC8vIFRhcmdldCBhcnJheSBpcyBhIHN1cGVyc2V0IG9mIFsxLCAyXSBidXQgbm90IGlkZW50aWNhbFxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaW5jbHVkZS5tZW1iZXJzKFsxLCAyXSk7XG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5ub3QuaGF2ZS5tZW1iZXJzKFsxLCAyXSk7XG4gICAqXG4gICAqICAgICAvLyBEdXBsaWNhdGVzIGluIHRoZSBzdWJzZXQgYXJlIGlnbm9yZWRcbiAgICogICAgIGV4cGVjdChbMSwgMiwgM10pLnRvLmluY2x1ZGUubWVtYmVycyhbMSwgMiwgMiwgMl0pO1xuICAgKlxuICAgKiBgLmRlZXBgLCBgLm9yZGVyZWRgLCBhbmQgYC5pbmNsdWRlYCBjYW4gYWxsIGJlIGNvbWJpbmVkLiBIb3dldmVyLCBpZlxuICAgKiBgLmluY2x1ZGVgIGFuZCBgLm9yZGVyZWRgIGFyZSBjb21iaW5lZCwgdGhlIG9yZGVyaW5nIGJlZ2lucyBhdCB0aGUgc3RhcnQgb2ZcbiAgICogYm90aCBhcnJheXMuXG4gICAqXG4gICAqICAgICBleHBlY3QoW3thOiAxfSwge2I6IDJ9LCB7YzogM31dKVxuICAgKiAgICAgICAudG8uaW5jbHVkZS5kZWVwLm9yZGVyZWQubWVtYmVycyhbe2E6IDF9LCB7YjogMn1dKVxuICAgKiAgICAgICAuYnV0Lm5vdC5pbmNsdWRlLmRlZXAub3JkZXJlZC5tZW1iZXJzKFt7YjogMn0sIHtjOiAzfV0pO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLm1lbWJlcnNgLiBIb3dldmVyLCBpdCdzXG4gICAqIGRhbmdlcm91cyB0byBkbyBzby4gVGhlIHByb2JsZW0gaXMgdGhhdCBpdCBjcmVhdGVzIHVuY2VydGFpbiBleHBlY3RhdGlvbnNcbiAgICogYnkgYXNzZXJ0aW5nIHRoYXQgdGhlIHRhcmdldCBhcnJheSBkb2Vzbid0IGhhdmUgYWxsIG9mIHRoZSBzYW1lIG1lbWJlcnMgYXNcbiAgICogdGhlIGdpdmVuIGFycmF5IGBzZXRgIGJ1dCBtYXkgb3IgbWF5IG5vdCBoYXZlIHNvbWUgb2YgdGhlbS4gSXQncyBvZnRlbiBiZXN0XG4gICAqIHRvIGlkZW50aWZ5IHRoZSBleGFjdCBvdXRwdXQgdGhhdCdzIGV4cGVjdGVkLCBhbmQgdGhlbiB3cml0ZSBhbiBhc3NlcnRpb25cbiAgICogdGhhdCBvbmx5IGFjY2VwdHMgdGhhdCBleGFjdCBvdXRwdXQuXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsIDJdKS50by5ub3QuaW5jbHVkZSgzKS5hbmQubm90LmluY2x1ZGUoNCk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoWzEsIDJdKS50by5ub3QuaGF2ZS5tZW1iZXJzKFszLCA0XSk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBgLm1lbWJlcnNgIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3JcbiAgICogbWVzc2FnZSB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXNcbiAgICogdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdChbMSwgMl0pLnRvLmhhdmUubWVtYmVycyhbMSwgMiwgM10sICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdChbMSwgMl0sICdub29vIHdoeSBmYWlsPz8nKS50by5oYXZlLm1lbWJlcnMoWzEsIDIsIDNdKTtcbiAgICpcbiAgICogQG5hbWUgbWVtYmVyc1xuICAgKiBAcGFyYW0ge0FycmF5fSBzZXRcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1zZyBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ21lbWJlcnMnLCBmdW5jdGlvbiAoc3Vic2V0LCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgZmxhZ01zZyA9IGZsYWcodGhpcywgJ21lc3NhZ2UnKVxuICAgICAgLCBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpO1xuXG4gICAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmJlLmFuKCdhcnJheScpO1xuICAgIG5ldyBBc3NlcnRpb24oc3Vic2V0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5iZS5hbignYXJyYXknKTtcblxuICAgIHZhciBjb250YWlucyA9IGZsYWcodGhpcywgJ2NvbnRhaW5zJyk7XG4gICAgdmFyIG9yZGVyZWQgPSBmbGFnKHRoaXMsICdvcmRlcmVkJyk7XG5cbiAgICB2YXIgc3ViamVjdCwgZmFpbE1zZywgZmFpbE5lZ2F0ZU1zZztcblxuICAgIGlmIChjb250YWlucykge1xuICAgICAgc3ViamVjdCA9IG9yZGVyZWQgPyAnYW4gb3JkZXJlZCBzdXBlcnNldCcgOiAnYSBzdXBlcnNldCc7XG4gICAgICBmYWlsTXNnID0gJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgJyArIHN1YmplY3QgKyAnIG9mICN7ZXhwfSc7XG4gICAgICBmYWlsTmVnYXRlTXNnID0gJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlICcgKyBzdWJqZWN0ICsgJyBvZiAje2V4cH0nO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdWJqZWN0ID0gb3JkZXJlZCA/ICdvcmRlcmVkIG1lbWJlcnMnIDogJ21lbWJlcnMnO1xuICAgICAgZmFpbE1zZyA9ICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgdGhlIHNhbWUgJyArIHN1YmplY3QgKyAnIGFzICN7ZXhwfSc7XG4gICAgICBmYWlsTmVnYXRlTXNnID0gJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgdGhlIHNhbWUgJyArIHN1YmplY3QgKyAnIGFzICN7ZXhwfSc7XG4gICAgfVxuXG4gICAgdmFyIGNtcCA9IGZsYWcodGhpcywgJ2RlZXAnKSA/IGZsYWcodGhpcywgJ2VxbCcpIDogdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIGlzU3Vic2V0T2Yoc3Vic2V0LCBvYmosIGNtcCwgY29udGFpbnMsIG9yZGVyZWQpXG4gICAgICAsIGZhaWxNc2dcbiAgICAgICwgZmFpbE5lZ2F0ZU1zZ1xuICAgICAgLCBzdWJzZXRcbiAgICAgICwgb2JqXG4gICAgICAsIHRydWVcbiAgICApO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5vbmVPZihsaXN0WywgbXNnXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgYSBtZW1iZXIgb2YgdGhlIGdpdmVuIGFycmF5IGBsaXN0YC4gSG93ZXZlcixcbiAgICogaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydCB0aGF0IHRoZSB0YXJnZXQgaXMgZXF1YWwgdG8gaXRzIGV4cGVjdGVkIHZhbHVlLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmVxdWFsKDEpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmJlLm9uZU9mKFsxLCAyLCAzXSk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBDb21wYXJpc29ucyBhcmUgcGVyZm9ybWVkIHVzaW5nIHN0cmljdCAoYD09PWApIGVxdWFsaXR5LlxuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLm9uZU9mYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxKS50by5lcXVhbCgxKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgxKS50by5ub3QuYmUub25lT2YoWzIsIDMsIDRdKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEl0IGNhbiBhbHNvIGJlIGNoYWluZWQgd2l0aCBgLmNvbnRhaW5gIG9yIGAuaW5jbHVkZWAsIHdoaWNoIHdpbGwgd29yayB3aXRoXG4gICAqIGJvdGggYXJyYXlzIGFuZCBzdHJpbmdzOlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdUb2RheSBpcyBzdW5ueScpLnRvLmNvbnRhaW4ub25lT2YoWydzdW5ueScsICdjbG91ZHknXSlcbiAgICogICAgIGV4cGVjdCgnVG9kYXkgaXMgcmFpbnknKS50by5ub3QuY29udGFpbi5vbmVPZihbJ3N1bm55JywgJ2Nsb3VkeSddKVxuICAgKiAgICAgZXhwZWN0KFsxLDIsM10pLnRvLmNvbnRhaW4ub25lT2YoWzMsNCw1XSlcbiAgICogICAgIGV4cGVjdChbMSwyLDNdKS50by5ub3QuY29udGFpbi5vbmVPZihbNCw1LDZdKVxuICAgKlxuICAgKiBgLm9uZU9mYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2VcbiAgICogdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzIHRoZVxuICAgKiBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uYmUub25lT2YoWzIsIDMsIDRdLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqICAgICBleHBlY3QoMSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLm9uZU9mKFsyLCAzLCA0XSk7XG4gICAqXG4gICAqIEBuYW1lIG9uZU9mXG4gICAqIEBwYXJhbSB7QXJyYXk8Kj59IGxpc3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1zZyBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIG9uZU9mIChsaXN0LCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgZXhwZWN0ZWQgPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBmbGFnTXNnID0gZmxhZyh0aGlzLCAnbWVzc2FnZScpXG4gICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJylcbiAgICAgICwgY29udGFpbnMgPSBmbGFnKHRoaXMsICdjb250YWlucycpXG4gICAgICAsIGlzRGVlcCA9IGZsYWcodGhpcywgJ2RlZXAnKVxuICAgICAgLCBlcWwgPSBmbGFnKHRoaXMsICdlcWwnKTtcbiAgICBuZXcgQXNzZXJ0aW9uKGxpc3QsIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmJlLmFuKCdhcnJheScpO1xuXG4gICAgaWYgKGNvbnRhaW5zKSB7XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgbGlzdC5zb21lKGZ1bmN0aW9uKHBvc3NpYmlsaXR5KSB7IHJldHVybiBleHBlY3RlZC5pbmRleE9mKHBvc3NpYmlsaXR5KSA+IC0xIH0pXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gY29udGFpbiBvbmUgb2YgI3tleHB9J1xuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBjb250YWluIG9uZSBvZiAje2V4cH0nXG4gICAgICAgICwgbGlzdFxuICAgICAgICAsIGV4cGVjdGVkXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaXNEZWVwKSB7XG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIGxpc3Quc29tZShmdW5jdGlvbihwb3NzaWJpbGl0eSkgeyByZXR1cm4gZXFsKGV4cGVjdGVkLCBwb3NzaWJpbGl0eSkgfSlcbiAgICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGRlZXBseSBlcXVhbCBvbmUgb2YgI3tleHB9J1xuICAgICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gZGVlcGx5IGVxdWFsIG9uZSBvZiAje2V4cH0nXG4gICAgICAgICAgLCBsaXN0XG4gICAgICAgICAgLCBleHBlY3RlZFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgbGlzdC5pbmRleE9mKGV4cGVjdGVkKSA+IC0xXG4gICAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBvbmUgb2YgI3tleHB9J1xuICAgICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIG9uZSBvZiAje2V4cH0nXG4gICAgICAgICAgLCBsaXN0XG4gICAgICAgICAgLCBleHBlY3RlZFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ29uZU9mJywgb25lT2YpO1xuXG4gIC8qKlxuICAgKiAjIyMgLmNoYW5nZShzdWJqZWN0WywgcHJvcFssIG1zZ11dKVxuICAgKlxuICAgKiBXaGVuIG9uZSBhcmd1bWVudCBpcyBwcm92aWRlZCwgYC5jaGFuZ2VgIGFzc2VydHMgdGhhdCB0aGUgZ2l2ZW4gZnVuY3Rpb25cbiAgICogYHN1YmplY3RgIHJldHVybnMgYSBkaWZmZXJlbnQgdmFsdWUgd2hlbiBpdCdzIGludm9rZWQgYmVmb3JlIHRoZSB0YXJnZXRcbiAgICogZnVuY3Rpb24gY29tcGFyZWQgdG8gd2hlbiBpdCdzIGludm9rZWQgYWZ0ZXJ3YXJkLiBIb3dldmVyLCBpdCdzIG9mdGVuIGJlc3RcbiAgICogdG8gYXNzZXJ0IHRoYXQgYHN1YmplY3RgIGlzIGVxdWFsIHRvIGl0cyBleHBlY3RlZCB2YWx1ZS5cbiAgICpcbiAgICogICAgIHZhciBkb3RzID0gJydcbiAgICogICAgICAgLCBhZGREb3QgPSBmdW5jdGlvbiAoKSB7IGRvdHMgKz0gJy4nOyB9XG4gICAqICAgICAgICwgZ2V0RG90cyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRvdHM7IH07XG4gICAqXG4gICAqICAgICAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KGdldERvdHMoKSkudG8uZXF1YWwoJycpO1xuICAgKiAgICAgYWRkRG90KCk7XG4gICAqICAgICBleHBlY3QoZ2V0RG90cygpKS50by5lcXVhbCgnLicpO1xuICAgKlxuICAgKiAgICAgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoYWRkRG90KS50by5jaGFuZ2UoZ2V0RG90cyk7XG4gICAqXG4gICAqIFdoZW4gdHdvIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQsIGAuY2hhbmdlYCBhc3NlcnRzIHRoYXQgdGhlIHZhbHVlIG9mIHRoZVxuICAgKiBnaXZlbiBvYmplY3QgYHN1YmplY3RgJ3MgYHByb3BgIHByb3BlcnR5IGlzIGRpZmZlcmVudCBiZWZvcmUgaW52b2tpbmcgdGhlXG4gICAqIHRhcmdldCBmdW5jdGlvbiBjb21wYXJlZCB0byBhZnRlcndhcmQuXG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7ZG90czogJyd9XG4gICAqICAgICAgICwgYWRkRG90ID0gZnVuY3Rpb24gKCkgeyBteU9iai5kb3RzICs9ICcuJzsgfTtcbiAgICpcbiAgICogICAgIC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QobXlPYmopLnRvLmhhdmUucHJvcGVydHkoJ2RvdHMnLCAnJyk7XG4gICAqICAgICBhZGREb3QoKTtcbiAgICogICAgIGV4cGVjdChteU9iaikudG8uaGF2ZS5wcm9wZXJ0eSgnZG90cycsICcuJyk7XG4gICAqXG4gICAqICAgICAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChhZGREb3QpLnRvLmNoYW5nZShteU9iaiwgJ2RvdHMnKTtcbiAgICpcbiAgICogU3RyaWN0IChgPT09YCkgZXF1YWxpdHkgaXMgdXNlZCB0byBjb21wYXJlIGJlZm9yZSBhbmQgYWZ0ZXIgdmFsdWVzLlxuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmNoYW5nZWAuXG4gICAqXG4gICAqICAgICB2YXIgZG90cyA9ICcnXG4gICAqICAgICAgICwgbm9vcCA9IGZ1bmN0aW9uICgpIHt9XG4gICAqICAgICAgICwgZ2V0RG90cyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRvdHM7IH07XG4gICAqXG4gICAqICAgICBleHBlY3Qobm9vcCkudG8ubm90LmNoYW5nZShnZXREb3RzKTtcbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHtkb3RzOiAnJ31cbiAgICogICAgICAgLCBub29wID0gZnVuY3Rpb24gKCkge307XG4gICAqXG4gICAqICAgICBleHBlY3Qobm9vcCkudG8ubm90LmNoYW5nZShteU9iaiwgJ2RvdHMnKTtcbiAgICpcbiAgICogYC5jaGFuZ2VgIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3JcbiAgICogbWVzc2FnZSB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXNcbiAgICogdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC4gV2hlbiBub3QgcHJvdmlkaW5nIHR3byBhcmd1bWVudHMsIGFsd2F5c1xuICAgKiB1c2UgdGhlIHNlY29uZCBmb3JtLlxuICAgKlxuICAgKiAgICAgdmFyIG15T2JqID0ge2RvdHM6ICcnfVxuICAgKiAgICAgICAsIGFkZERvdCA9IGZ1bmN0aW9uICgpIHsgbXlPYmouZG90cyArPSAnLic7IH07XG4gICAqXG4gICAqICAgICBleHBlY3QoYWRkRG90KS50by5ub3QuY2hhbmdlKG15T2JqLCAnZG90cycsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICpcbiAgICogICAgIHZhciBkb3RzID0gJydcbiAgICogICAgICAgLCBhZGREb3QgPSBmdW5jdGlvbiAoKSB7IGRvdHMgKz0gJy4nOyB9XG4gICAqICAgICAgICwgZ2V0RG90cyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRvdHM7IH07XG4gICAqXG4gICAqICAgICBleHBlY3QoYWRkRG90LCAnbm9vbyB3aHkgZmFpbD8/JykudG8ubm90LmNoYW5nZShnZXREb3RzKTtcbiAgICpcbiAgICogYC5jaGFuZ2VgIGFsc28gY2F1c2VzIGFsbCBgLmJ5YCBhc3NlcnRpb25zIHRoYXQgZm9sbG93IGluIHRoZSBjaGFpbiB0b1xuICAgKiBhc3NlcnQgaG93IG11Y2ggYSBudW1lcmljIHN1YmplY3Qgd2FzIGluY3JlYXNlZCBvciBkZWNyZWFzZWQgYnkuIEhvd2V2ZXIsXG4gICAqIGl0J3MgZGFuZ2Vyb3VzIHRvIHVzZSBgLmNoYW5nZS5ieWAuIFRoZSBwcm9ibGVtIGlzIHRoYXQgaXQgY3JlYXRlc1xuICAgKiB1bmNlcnRhaW4gZXhwZWN0YXRpb25zIGJ5IGFzc2VydGluZyB0aGF0IHRoZSBzdWJqZWN0IGVpdGhlciBpbmNyZWFzZXMgYnlcbiAgICogdGhlIGdpdmVuIGRlbHRhLCBvciB0aGF0IGl0IGRlY3JlYXNlcyBieSB0aGUgZ2l2ZW4gZGVsdGEuIEl0J3Mgb2Z0ZW4gYmVzdFxuICAgKiB0byBpZGVudGlmeSB0aGUgZXhhY3Qgb3V0cHV0IHRoYXQncyBleHBlY3RlZCwgYW5kIHRoZW4gd3JpdGUgYW4gYXNzZXJ0aW9uXG4gICAqIHRoYXQgb25seSBhY2NlcHRzIHRoYXQgZXhhY3Qgb3V0cHV0LlxuICAgKlxuICAgKiAgICAgdmFyIG15T2JqID0ge3ZhbDogMX1cbiAgICogICAgICAgLCBhZGRUd28gPSBmdW5jdGlvbiAoKSB7IG15T2JqLnZhbCArPSAyOyB9XG4gICAqICAgICAgICwgc3VidHJhY3RUd28gPSBmdW5jdGlvbiAoKSB7IG15T2JqLnZhbCAtPSAyOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGFkZFR3bykudG8uaW5jcmVhc2UobXlPYmosICd2YWwnKS5ieSgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLmNoYW5nZShteU9iaiwgJ3ZhbCcpLmJ5KDIpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogICAgIGV4cGVjdChzdWJ0cmFjdFR3bykudG8uZGVjcmVhc2UobXlPYmosICd2YWwnKS5ieSgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChzdWJ0cmFjdFR3bykudG8uY2hhbmdlKG15T2JqLCAndmFsJykuYnkoMik7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBUaGUgYWxpYXMgYC5jaGFuZ2VzYCBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgd2l0aCBgLmNoYW5nZWAuXG4gICAqXG4gICAqIEBuYW1lIGNoYW5nZVxuICAgKiBAYWxpYXMgY2hhbmdlc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gc3ViamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcCBuYW1lIF9vcHRpb25hbF9cbiAgICogQHBhcmFtIHtTdHJpbmd9IG1zZyBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFzc2VydENoYW5nZXMgKHN1YmplY3QsIHByb3AsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBmbiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIGZsYWdNc2cgPSBmbGFnKHRoaXMsICdtZXNzYWdlJylcbiAgICAgICwgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKTtcbiAgICBuZXcgQXNzZXJ0aW9uKGZuLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKCdmdW5jdGlvbicpO1xuXG4gICAgdmFyIGluaXRpYWw7XG4gICAgaWYgKCFwcm9wKSB7XG4gICAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoJ2Z1bmN0aW9uJyk7XG4gICAgICBpbml0aWFsID0gc3ViamVjdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkocHJvcCk7XG4gICAgICBpbml0aWFsID0gc3ViamVjdFtwcm9wXTtcbiAgICB9XG5cbiAgICBmbigpO1xuXG4gICAgdmFyIGZpbmFsID0gcHJvcCA9PT0gdW5kZWZpbmVkIHx8IHByb3AgPT09IG51bGwgPyBzdWJqZWN0KCkgOiBzdWJqZWN0W3Byb3BdO1xuICAgIHZhciBtc2dPYmogPSBwcm9wID09PSB1bmRlZmluZWQgfHwgcHJvcCA9PT0gbnVsbCA/IGluaXRpYWwgOiAnLicgKyBwcm9wO1xuXG4gICAgLy8gVGhpcyBnZXRzIGZsYWdnZWQgYmVjYXVzZSBvZiB0aGUgLmJ5KGRlbHRhKSBhc3NlcnRpb25cbiAgICBmbGFnKHRoaXMsICdkZWx0YU1zZ09iaicsIG1zZ09iaik7XG4gICAgZmxhZyh0aGlzLCAnaW5pdGlhbERlbHRhVmFsdWUnLCBpbml0aWFsKTtcbiAgICBmbGFnKHRoaXMsICdmaW5hbERlbHRhVmFsdWUnLCBmaW5hbCk7XG4gICAgZmxhZyh0aGlzLCAnZGVsdGFCZWhhdmlvcicsICdjaGFuZ2UnKTtcbiAgICBmbGFnKHRoaXMsICdyZWFsRGVsdGEnLCBmaW5hbCAhPT0gaW5pdGlhbCk7XG5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGluaXRpYWwgIT09IGZpbmFsXG4gICAgICAsICdleHBlY3RlZCAnICsgbXNnT2JqICsgJyB0byBjaGFuZ2UnXG4gICAgICAsICdleHBlY3RlZCAnICsgbXNnT2JqICsgJyB0byBub3QgY2hhbmdlJ1xuICAgICk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdjaGFuZ2UnLCBhc3NlcnRDaGFuZ2VzKTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnY2hhbmdlcycsIGFzc2VydENoYW5nZXMpO1xuXG4gIC8qKlxuICAgKiAjIyMgLmluY3JlYXNlKHN1YmplY3RbLCBwcm9wWywgbXNnXV0pXG4gICAqXG4gICAqIFdoZW4gb25lIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCBgLmluY3JlYXNlYCBhc3NlcnRzIHRoYXQgdGhlIGdpdmVuIGZ1bmN0aW9uXG4gICAqIGBzdWJqZWN0YCByZXR1cm5zIGEgZ3JlYXRlciBudW1iZXIgd2hlbiBpdCdzIGludm9rZWQgYWZ0ZXIgaW52b2tpbmcgdGhlXG4gICAqIHRhcmdldCBmdW5jdGlvbiBjb21wYXJlZCB0byB3aGVuIGl0J3MgaW52b2tlZCBiZWZvcmVoYW5kLiBgLmluY3JlYXNlYCBhbHNvXG4gICAqIGNhdXNlcyBhbGwgYC5ieWAgYXNzZXJ0aW9ucyB0aGF0IGZvbGxvdyBpbiB0aGUgY2hhaW4gdG8gYXNzZXJ0IGhvdyBtdWNoXG4gICAqIGdyZWF0ZXIgb2YgYSBudW1iZXIgaXMgcmV0dXJuZWQuIEl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgcmV0dXJuXG4gICAqIHZhbHVlIGluY3JlYXNlZCBieSB0aGUgZXhwZWN0ZWQgYW1vdW50LCByYXRoZXIgdGhhbiBhc3NlcnRpbmcgaXQgaW5jcmVhc2VkXG4gICAqIGJ5IGFueSBhbW91bnQuXG4gICAqXG4gICAqICAgICB2YXIgdmFsID0gMVxuICAgKiAgICAgICAsIGFkZFR3byA9IGZ1bmN0aW9uICgpIHsgdmFsICs9IDI7IH1cbiAgICogICAgICAgLCBnZXRWYWwgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWw7IH07XG4gICAqXG4gICAqICAgICBleHBlY3QoYWRkVHdvKS50by5pbmNyZWFzZShnZXRWYWwpLmJ5KDIpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KGFkZFR3bykudG8uaW5jcmVhc2UoZ2V0VmFsKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIFdoZW4gdHdvIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQsIGAuaW5jcmVhc2VgIGFzc2VydHMgdGhhdCB0aGUgdmFsdWUgb2YgdGhlXG4gICAqIGdpdmVuIG9iamVjdCBgc3ViamVjdGAncyBgcHJvcGAgcHJvcGVydHkgaXMgZ3JlYXRlciBhZnRlciBpbnZva2luZyB0aGVcbiAgICogdGFyZ2V0IGZ1bmN0aW9uIGNvbXBhcmVkIHRvIGJlZm9yZWhhbmQuXG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7dmFsOiAxfVxuICAgKiAgICAgICAsIGFkZFR3byA9IGZ1bmN0aW9uICgpIHsgbXlPYmoudmFsICs9IDI7IH07XG4gICAqXG4gICAqICAgICBleHBlY3QoYWRkVHdvKS50by5pbmNyZWFzZShteU9iaiwgJ3ZhbCcpLmJ5KDIpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KGFkZFR3bykudG8uaW5jcmVhc2UobXlPYmosICd2YWwnKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIEFkZCBgLm5vdGAgZWFybGllciBpbiB0aGUgY2hhaW4gdG8gbmVnYXRlIGAuaW5jcmVhc2VgLiBIb3dldmVyLCBpdCdzXG4gICAqIGRhbmdlcm91cyB0byBkbyBzby4gVGhlIHByb2JsZW0gaXMgdGhhdCBpdCBjcmVhdGVzIHVuY2VydGFpbiBleHBlY3RhdGlvbnNcbiAgICogYnkgYXNzZXJ0aW5nIHRoYXQgdGhlIHN1YmplY3QgZWl0aGVyIGRlY3JlYXNlcywgb3IgdGhhdCBpdCBzdGF5cyB0aGUgc2FtZS5cbiAgICogSXQncyBvZnRlbiBiZXN0IHRvIGlkZW50aWZ5IHRoZSBleGFjdCBvdXRwdXQgdGhhdCdzIGV4cGVjdGVkLCBhbmQgdGhlblxuICAgKiB3cml0ZSBhbiBhc3NlcnRpb24gdGhhdCBvbmx5IGFjY2VwdHMgdGhhdCBleGFjdCBvdXRwdXQuXG4gICAqXG4gICAqIFdoZW4gdGhlIHN1YmplY3QgaXMgZXhwZWN0ZWQgdG8gZGVjcmVhc2UsIGl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnQgdGhhdCBpdFxuICAgKiBkZWNyZWFzZWQgYnkgdGhlIGV4cGVjdGVkIGFtb3VudC5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHt2YWw6IDF9XG4gICAqICAgICAgICwgc3VidHJhY3RUd28gPSBmdW5jdGlvbiAoKSB7IG15T2JqLnZhbCAtPSAyOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KHN1YnRyYWN0VHdvKS50by5kZWNyZWFzZShteU9iaiwgJ3ZhbCcpLmJ5KDIpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHN1YnRyYWN0VHdvKS50by5ub3QuaW5jcmVhc2UobXlPYmosICd2YWwnKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIFdoZW4gdGhlIHN1YmplY3QgaXMgZXhwZWN0ZWQgdG8gc3RheSB0aGUgc2FtZSwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydFxuICAgKiBleGFjdGx5IHRoYXQuXG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7dmFsOiAxfVxuICAgKiAgICAgICAsIG5vb3AgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICpcbiAgICogICAgIGV4cGVjdChub29wKS50by5ub3QuY2hhbmdlKG15T2JqLCAndmFsJyk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3Qobm9vcCkudG8ubm90LmluY3JlYXNlKG15T2JqLCAndmFsJyk7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBgLmluY3JlYXNlYCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yXG4gICAqIG1lc3NhZ2UgdG8gc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzXG4gICAqIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYGV4cGVjdGAuIFdoZW4gbm90IHByb3ZpZGluZyB0d28gYXJndW1lbnRzLCBhbHdheXNcbiAgICogdXNlIHRoZSBzZWNvbmQgZm9ybS5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHt2YWw6IDF9XG4gICAqICAgICAgICwgbm9vcCA9IGZ1bmN0aW9uICgpIHt9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KG5vb3ApLnRvLmluY3JlYXNlKG15T2JqLCAndmFsJywgJ25vb28gd2h5IGZhaWw/PycpO1xuICAgKlxuICAgKiAgICAgdmFyIHZhbCA9IDFcbiAgICogICAgICAgLCBub29wID0gZnVuY3Rpb24gKCkge31cbiAgICogICAgICAgLCBnZXRWYWwgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWw7IH07XG4gICAqXG4gICAqICAgICBleHBlY3Qobm9vcCwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmluY3JlYXNlKGdldFZhbCk7XG4gICAqXG4gICAqIFRoZSBhbGlhcyBgLmluY3JlYXNlc2AgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGggYC5pbmNyZWFzZWAuXG4gICAqXG4gICAqIEBuYW1lIGluY3JlYXNlXG4gICAqIEBhbGlhcyBpbmNyZWFzZXNcbiAgICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHN1YmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3AgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnRJbmNyZWFzZXMgKHN1YmplY3QsIHByb3AsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBmbiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIGZsYWdNc2cgPSBmbGFnKHRoaXMsICdtZXNzYWdlJylcbiAgICAgICwgc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKTtcbiAgICBuZXcgQXNzZXJ0aW9uKGZuLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKCdmdW5jdGlvbicpO1xuXG4gICAgdmFyIGluaXRpYWw7XG4gICAgaWYgKCFwcm9wKSB7XG4gICAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoJ2Z1bmN0aW9uJyk7XG4gICAgICBpbml0aWFsID0gc3ViamVjdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkocHJvcCk7XG4gICAgICBpbml0aWFsID0gc3ViamVjdFtwcm9wXTtcbiAgICB9XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgdGFyZ2V0IGlzIGEgbnVtYmVyXG4gICAgbmV3IEFzc2VydGlvbihpbml0aWFsLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKCdudW1iZXInKTtcblxuICAgIGZuKCk7XG5cbiAgICB2YXIgZmluYWwgPSBwcm9wID09PSB1bmRlZmluZWQgfHwgcHJvcCA9PT0gbnVsbCA/IHN1YmplY3QoKSA6IHN1YmplY3RbcHJvcF07XG4gICAgdmFyIG1zZ09iaiA9IHByb3AgPT09IHVuZGVmaW5lZCB8fCBwcm9wID09PSBudWxsID8gaW5pdGlhbCA6ICcuJyArIHByb3A7XG5cbiAgICBmbGFnKHRoaXMsICdkZWx0YU1zZ09iaicsIG1zZ09iaik7XG4gICAgZmxhZyh0aGlzLCAnaW5pdGlhbERlbHRhVmFsdWUnLCBpbml0aWFsKTtcbiAgICBmbGFnKHRoaXMsICdmaW5hbERlbHRhVmFsdWUnLCBmaW5hbCk7XG4gICAgZmxhZyh0aGlzLCAnZGVsdGFCZWhhdmlvcicsICdpbmNyZWFzZScpO1xuICAgIGZsYWcodGhpcywgJ3JlYWxEZWx0YScsIGZpbmFsIC0gaW5pdGlhbCk7XG5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGZpbmFsIC0gaW5pdGlhbCA+IDBcbiAgICAgICwgJ2V4cGVjdGVkICcgKyBtc2dPYmogKyAnIHRvIGluY3JlYXNlJ1xuICAgICAgLCAnZXhwZWN0ZWQgJyArIG1zZ09iaiArICcgdG8gbm90IGluY3JlYXNlJ1xuICAgICk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdpbmNyZWFzZScsIGFzc2VydEluY3JlYXNlcyk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2luY3JlYXNlcycsIGFzc2VydEluY3JlYXNlcyk7XG5cbiAgLyoqXG4gICAqICMjIyAuZGVjcmVhc2Uoc3ViamVjdFssIHByb3BbLCBtc2ddXSlcbiAgICpcbiAgICogV2hlbiBvbmUgYXJndW1lbnQgaXMgcHJvdmlkZWQsIGAuZGVjcmVhc2VgIGFzc2VydHMgdGhhdCB0aGUgZ2l2ZW4gZnVuY3Rpb25cbiAgICogYHN1YmplY3RgIHJldHVybnMgYSBsZXNzZXIgbnVtYmVyIHdoZW4gaXQncyBpbnZva2VkIGFmdGVyIGludm9raW5nIHRoZVxuICAgKiB0YXJnZXQgZnVuY3Rpb24gY29tcGFyZWQgdG8gd2hlbiBpdCdzIGludm9rZWQgYmVmb3JlaGFuZC4gYC5kZWNyZWFzZWAgYWxzb1xuICAgKiBjYXVzZXMgYWxsIGAuYnlgIGFzc2VydGlvbnMgdGhhdCBmb2xsb3cgaW4gdGhlIGNoYWluIHRvIGFzc2VydCBob3cgbXVjaFxuICAgKiBsZXNzZXIgb2YgYSBudW1iZXIgaXMgcmV0dXJuZWQuIEl0J3Mgb2Z0ZW4gYmVzdCB0byBhc3NlcnQgdGhhdCB0aGUgcmV0dXJuXG4gICAqIHZhbHVlIGRlY3JlYXNlZCBieSB0aGUgZXhwZWN0ZWQgYW1vdW50LCByYXRoZXIgdGhhbiBhc3NlcnRpbmcgaXQgZGVjcmVhc2VkXG4gICAqIGJ5IGFueSBhbW91bnQuXG4gICAqXG4gICAqICAgICB2YXIgdmFsID0gMVxuICAgKiAgICAgICAsIHN1YnRyYWN0VHdvID0gZnVuY3Rpb24gKCkgeyB2YWwgLT0gMjsgfVxuICAgKiAgICAgICAsIGdldFZhbCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbDsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChzdWJ0cmFjdFR3bykudG8uZGVjcmVhc2UoZ2V0VmFsKS5ieSgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChzdWJ0cmFjdFR3bykudG8uZGVjcmVhc2UoZ2V0VmFsKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIFdoZW4gdHdvIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQsIGAuZGVjcmVhc2VgIGFzc2VydHMgdGhhdCB0aGUgdmFsdWUgb2YgdGhlXG4gICAqIGdpdmVuIG9iamVjdCBgc3ViamVjdGAncyBgcHJvcGAgcHJvcGVydHkgaXMgbGVzc2VyIGFmdGVyIGludm9raW5nIHRoZVxuICAgKiB0YXJnZXQgZnVuY3Rpb24gY29tcGFyZWQgdG8gYmVmb3JlaGFuZC5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHt2YWw6IDF9XG4gICAqICAgICAgICwgc3VidHJhY3RUd28gPSBmdW5jdGlvbiAoKSB7IG15T2JqLnZhbCAtPSAyOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KHN1YnRyYWN0VHdvKS50by5kZWNyZWFzZShteU9iaiwgJ3ZhbCcpLmJ5KDIpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KHN1YnRyYWN0VHdvKS50by5kZWNyZWFzZShteU9iaiwgJ3ZhbCcpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5kZWNyZWFzZWAuIEhvd2V2ZXIsIGl0J3NcbiAgICogZGFuZ2Vyb3VzIHRvIGRvIHNvLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGl0IGNyZWF0ZXMgdW5jZXJ0YWluIGV4cGVjdGF0aW9uc1xuICAgKiBieSBhc3NlcnRpbmcgdGhhdCB0aGUgc3ViamVjdCBlaXRoZXIgaW5jcmVhc2VzLCBvciB0aGF0IGl0IHN0YXlzIHRoZSBzYW1lLlxuICAgKiBJdCdzIG9mdGVuIGJlc3QgdG8gaWRlbnRpZnkgdGhlIGV4YWN0IG91dHB1dCB0aGF0J3MgZXhwZWN0ZWQsIGFuZCB0aGVuXG4gICAqIHdyaXRlIGFuIGFzc2VydGlvbiB0aGF0IG9ubHkgYWNjZXB0cyB0aGF0IGV4YWN0IG91dHB1dC5cbiAgICpcbiAgICogV2hlbiB0aGUgc3ViamVjdCBpcyBleHBlY3RlZCB0byBpbmNyZWFzZSwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydCB0aGF0IGl0XG4gICAqIGluY3JlYXNlZCBieSB0aGUgZXhwZWN0ZWQgYW1vdW50LlxuICAgKlxuICAgKiAgICAgdmFyIG15T2JqID0ge3ZhbDogMX1cbiAgICogICAgICAgLCBhZGRUd28gPSBmdW5jdGlvbiAoKSB7IG15T2JqLnZhbCArPSAyOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGFkZFR3bykudG8uaW5jcmVhc2UobXlPYmosICd2YWwnKS5ieSgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLm5vdC5kZWNyZWFzZShteU9iaiwgJ3ZhbCcpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogV2hlbiB0aGUgc3ViamVjdCBpcyBleHBlY3RlZCB0byBzdGF5IHRoZSBzYW1lLCBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0XG4gICAqIGV4YWN0bHkgdGhhdC5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHt2YWw6IDF9XG4gICAqICAgICAgICwgbm9vcCA9IGZ1bmN0aW9uICgpIHt9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KG5vb3ApLnRvLm5vdC5jaGFuZ2UobXlPYmosICd2YWwnKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChub29wKS50by5ub3QuZGVjcmVhc2UobXlPYmosICd2YWwnKTsgLy8gTm90IHJlY29tbWVuZGVkXG4gICAqXG4gICAqIGAuZGVjcmVhc2VgIGFjY2VwdHMgYW4gb3B0aW9uYWwgYG1zZ2AgYXJndW1lbnQgd2hpY2ggaXMgYSBjdXN0b20gZXJyb3JcbiAgICogbWVzc2FnZSB0byBzaG93IHdoZW4gdGhlIGFzc2VydGlvbiBmYWlscy4gVGhlIG1lc3NhZ2UgY2FuIGFsc28gYmUgZ2l2ZW4gYXNcbiAgICogdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC4gV2hlbiBub3QgcHJvdmlkaW5nIHR3byBhcmd1bWVudHMsIGFsd2F5c1xuICAgKiB1c2UgdGhlIHNlY29uZCBmb3JtLlxuICAgKlxuICAgKiAgICAgdmFyIG15T2JqID0ge3ZhbDogMX1cbiAgICogICAgICAgLCBub29wID0gZnVuY3Rpb24gKCkge307XG4gICAqXG4gICAqICAgICBleHBlY3Qobm9vcCkudG8uZGVjcmVhc2UobXlPYmosICd2YWwnLCAnbm9vbyB3aHkgZmFpbD8/Jyk7XG4gICAqXG4gICAqICAgICB2YXIgdmFsID0gMVxuICAgKiAgICAgICAsIG5vb3AgPSBmdW5jdGlvbiAoKSB7fVxuICAgKiAgICAgICAsIGdldFZhbCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbDsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChub29wLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uZGVjcmVhc2UoZ2V0VmFsKTtcbiAgICpcbiAgICogVGhlIGFsaWFzIGAuZGVjcmVhc2VzYCBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgd2l0aCBgLmRlY3JlYXNlYC5cbiAgICpcbiAgICogQG5hbWUgZGVjcmVhc2VcbiAgICogQGFsaWFzIGRlY3JlYXNlc1xuICAgKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gc3ViamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcCBuYW1lIF9vcHRpb25hbF9cbiAgICogQHBhcmFtIHtTdHJpbmd9IG1zZyBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFzc2VydERlY3JlYXNlcyAoc3ViamVjdCwgcHJvcCwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIGZuID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgZmxhZ01zZyA9IGZsYWcodGhpcywgJ21lc3NhZ2UnKVxuICAgICAgLCBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpO1xuICAgIG5ldyBBc3NlcnRpb24oZm4sIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoJ2Z1bmN0aW9uJyk7XG5cbiAgICB2YXIgaW5pdGlhbDtcbiAgICBpZiAoIXByb3ApIHtcbiAgICAgIG5ldyBBc3NlcnRpb24oc3ViamVjdCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYSgnZnVuY3Rpb24nKTtcbiAgICAgIGluaXRpYWwgPSBzdWJqZWN0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ldyBBc3NlcnRpb24oc3ViamVjdCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShwcm9wKTtcbiAgICAgIGluaXRpYWwgPSBzdWJqZWN0W3Byb3BdO1xuICAgIH1cblxuICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSB0YXJnZXQgaXMgYSBudW1iZXJcbiAgICBuZXcgQXNzZXJ0aW9uKGluaXRpYWwsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoJ251bWJlcicpO1xuXG4gICAgZm4oKTtcblxuICAgIHZhciBmaW5hbCA9IHByb3AgPT09IHVuZGVmaW5lZCB8fCBwcm9wID09PSBudWxsID8gc3ViamVjdCgpIDogc3ViamVjdFtwcm9wXTtcbiAgICB2YXIgbXNnT2JqID0gcHJvcCA9PT0gdW5kZWZpbmVkIHx8IHByb3AgPT09IG51bGwgPyBpbml0aWFsIDogJy4nICsgcHJvcDtcblxuICAgIGZsYWcodGhpcywgJ2RlbHRhTXNnT2JqJywgbXNnT2JqKTtcbiAgICBmbGFnKHRoaXMsICdpbml0aWFsRGVsdGFWYWx1ZScsIGluaXRpYWwpO1xuICAgIGZsYWcodGhpcywgJ2ZpbmFsRGVsdGFWYWx1ZScsIGZpbmFsKTtcbiAgICBmbGFnKHRoaXMsICdkZWx0YUJlaGF2aW9yJywgJ2RlY3JlYXNlJyk7XG4gICAgZmxhZyh0aGlzLCAncmVhbERlbHRhJywgaW5pdGlhbCAtIGZpbmFsKTtcblxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgZmluYWwgLSBpbml0aWFsIDwgMFxuICAgICAgLCAnZXhwZWN0ZWQgJyArIG1zZ09iaiArICcgdG8gZGVjcmVhc2UnXG4gICAgICAsICdleHBlY3RlZCAnICsgbXNnT2JqICsgJyB0byBub3QgZGVjcmVhc2UnXG4gICAgKTtcbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2RlY3JlYXNlJywgYXNzZXJ0RGVjcmVhc2VzKTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZGVjcmVhc2VzJywgYXNzZXJ0RGVjcmVhc2VzKTtcblxuICAvKipcbiAgICogIyMjIC5ieShkZWx0YVssIG1zZ10pXG4gICAqXG4gICAqIFdoZW4gZm9sbG93aW5nIGFuIGAuaW5jcmVhc2VgIGFzc2VydGlvbiBpbiB0aGUgY2hhaW4sIGAuYnlgIGFzc2VydHMgdGhhdFxuICAgKiB0aGUgc3ViamVjdCBvZiB0aGUgYC5pbmNyZWFzZWAgYXNzZXJ0aW9uIGluY3JlYXNlZCBieSB0aGUgZ2l2ZW4gYGRlbHRhYC5cbiAgICpcbiAgICogICAgIHZhciBteU9iaiA9IHt2YWw6IDF9XG4gICAqICAgICAgICwgYWRkVHdvID0gZnVuY3Rpb24gKCkgeyBteU9iai52YWwgKz0gMjsgfTtcbiAgICpcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLmluY3JlYXNlKG15T2JqLCAndmFsJykuYnkoMik7XG4gICAqXG4gICAqIFdoZW4gZm9sbG93aW5nIGEgYC5kZWNyZWFzZWAgYXNzZXJ0aW9uIGluIHRoZSBjaGFpbiwgYC5ieWAgYXNzZXJ0cyB0aGF0IHRoZVxuICAgKiBzdWJqZWN0IG9mIHRoZSBgLmRlY3JlYXNlYCBhc3NlcnRpb24gZGVjcmVhc2VkIGJ5IHRoZSBnaXZlbiBgZGVsdGFgLlxuICAgKlxuICAgKiAgICAgdmFyIG15T2JqID0ge3ZhbDogMX1cbiAgICogICAgICAgLCBzdWJ0cmFjdFR3byA9IGZ1bmN0aW9uICgpIHsgbXlPYmoudmFsIC09IDI7IH07XG4gICAqXG4gICAqICAgICBleHBlY3Qoc3VidHJhY3RUd28pLnRvLmRlY3JlYXNlKG15T2JqLCAndmFsJykuYnkoMik7XG4gICAqXG4gICAqIFdoZW4gZm9sbG93aW5nIGEgYC5jaGFuZ2VgIGFzc2VydGlvbiBpbiB0aGUgY2hhaW4sIGAuYnlgIGFzc2VydHMgdGhhdCB0aGVcbiAgICogc3ViamVjdCBvZiB0aGUgYC5jaGFuZ2VgIGFzc2VydGlvbiBlaXRoZXIgaW5jcmVhc2VkIG9yIGRlY3JlYXNlZCBieSB0aGVcbiAgICogZ2l2ZW4gYGRlbHRhYC4gSG93ZXZlciwgaXQncyBkYW5nZXJvdXMgdG8gdXNlIGAuY2hhbmdlLmJ5YC4gVGhlIHByb2JsZW0gaXNcbiAgICogdGhhdCBpdCBjcmVhdGVzIHVuY2VydGFpbiBleHBlY3RhdGlvbnMuIEl0J3Mgb2Z0ZW4gYmVzdCB0byBpZGVudGlmeSB0aGVcbiAgICogZXhhY3Qgb3V0cHV0IHRoYXQncyBleHBlY3RlZCwgYW5kIHRoZW4gd3JpdGUgYW4gYXNzZXJ0aW9uIHRoYXQgb25seSBhY2NlcHRzXG4gICAqIHRoYXQgZXhhY3Qgb3V0cHV0LlxuICAgKlxuICAgKiAgICAgdmFyIG15T2JqID0ge3ZhbDogMX1cbiAgICogICAgICAgLCBhZGRUd28gPSBmdW5jdGlvbiAoKSB7IG15T2JqLnZhbCArPSAyOyB9XG4gICAqICAgICAgICwgc3VidHJhY3RUd28gPSBmdW5jdGlvbiAoKSB7IG15T2JqLnZhbCAtPSAyOyB9O1xuICAgKlxuICAgKiAgICAgZXhwZWN0KGFkZFR3bykudG8uaW5jcmVhc2UobXlPYmosICd2YWwnKS5ieSgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChhZGRUd28pLnRvLmNoYW5nZShteU9iaiwgJ3ZhbCcpLmJ5KDIpOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogICAgIGV4cGVjdChzdWJ0cmFjdFR3bykudG8uZGVjcmVhc2UobXlPYmosICd2YWwnKS5ieSgyKTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChzdWJ0cmFjdFR3bykudG8uY2hhbmdlKG15T2JqLCAndmFsJykuYnkoMik7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmJ5YC4gSG93ZXZlciwgaXQncyBvZnRlbiBiZXN0XG4gICAqIHRvIGFzc2VydCB0aGF0IHRoZSBzdWJqZWN0IGNoYW5nZWQgYnkgaXRzIGV4cGVjdGVkIGRlbHRhLCByYXRoZXIgdGhhblxuICAgKiBhc3NlcnRpbmcgdGhhdCBpdCBkaWRuJ3QgY2hhbmdlIGJ5IG9uZSBvZiBjb3VudGxlc3MgdW5leHBlY3RlZCBkZWx0YXMuXG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7dmFsOiAxfVxuICAgKiAgICAgICAsIGFkZFR3byA9IGZ1bmN0aW9uICgpIHsgbXlPYmoudmFsICs9IDI7IH07XG4gICAqXG4gICAqICAgICAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KGFkZFR3bykudG8uaW5jcmVhc2UobXlPYmosICd2YWwnKS5ieSgyKTtcbiAgICpcbiAgICogICAgIC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KGFkZFR3bykudG8uaW5jcmVhc2UobXlPYmosICd2YWwnKS5idXQubm90LmJ5KDMpO1xuICAgKlxuICAgKiBgLmJ5YCBhY2NlcHRzIGFuIG9wdGlvbmFsIGBtc2dgIGFyZ3VtZW50IHdoaWNoIGlzIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgdG9cbiAgICogc2hvdyB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuIFRoZSBtZXNzYWdlIGNhbiBhbHNvIGJlIGdpdmVuIGFzIHRoZSBzZWNvbmRcbiAgICogYXJndW1lbnQgdG8gYGV4cGVjdGAuXG4gICAqXG4gICAqICAgICB2YXIgbXlPYmogPSB7dmFsOiAxfVxuICAgKiAgICAgICAsIGFkZFR3byA9IGZ1bmN0aW9uICgpIHsgbXlPYmoudmFsICs9IDI7IH07XG4gICAqXG4gICAqICAgICBleHBlY3QoYWRkVHdvKS50by5pbmNyZWFzZShteU9iaiwgJ3ZhbCcpLmJ5KDMsICdub29vIHdoeSBmYWlsPz8nKTtcbiAgICogICAgIGV4cGVjdChhZGRUd28sICdub29vIHdoeSBmYWlsPz8nKS50by5pbmNyZWFzZShteU9iaiwgJ3ZhbCcpLmJ5KDMpO1xuICAgKlxuICAgKiBAbmFtZSBieVxuICAgKiBAcGFyYW0ge051bWJlcn0gZGVsdGFcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1zZyBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFzc2VydERlbHRhKGRlbHRhLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcblxuICAgIHZhciBtc2dPYmogPSBmbGFnKHRoaXMsICdkZWx0YU1zZ09iaicpO1xuICAgIHZhciBpbml0aWFsID0gZmxhZyh0aGlzLCAnaW5pdGlhbERlbHRhVmFsdWUnKTtcbiAgICB2YXIgZmluYWwgPSBmbGFnKHRoaXMsICdmaW5hbERlbHRhVmFsdWUnKTtcbiAgICB2YXIgYmVoYXZpb3IgPSBmbGFnKHRoaXMsICdkZWx0YUJlaGF2aW9yJyk7XG4gICAgdmFyIHJlYWxEZWx0YSA9IGZsYWcodGhpcywgJ3JlYWxEZWx0YScpO1xuXG4gICAgdmFyIGV4cHJlc3Npb247XG4gICAgaWYgKGJlaGF2aW9yID09PSAnY2hhbmdlJykge1xuICAgICAgZXhwcmVzc2lvbiA9IE1hdGguYWJzKGZpbmFsIC0gaW5pdGlhbCkgPT09IE1hdGguYWJzKGRlbHRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwcmVzc2lvbiA9IHJlYWxEZWx0YSA9PT0gTWF0aC5hYnMoZGVsdGEpO1xuICAgIH1cblxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgZXhwcmVzc2lvblxuICAgICAgLCAnZXhwZWN0ZWQgJyArIG1zZ09iaiArICcgdG8gJyArIGJlaGF2aW9yICsgJyBieSAnICsgZGVsdGFcbiAgICAgICwgJ2V4cGVjdGVkICcgKyBtc2dPYmogKyAnIHRvIG5vdCAnICsgYmVoYXZpb3IgKyAnIGJ5ICcgKyBkZWx0YVxuICAgICk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdieScsIGFzc2VydERlbHRhKTtcblxuICAvKipcbiAgICogIyMjIC5leHRlbnNpYmxlXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGV4dGVuc2libGUsIHdoaWNoIG1lYW5zIHRoYXQgbmV3IHByb3BlcnRpZXMgY2FuXG4gICAqIGJlIGFkZGVkIHRvIGl0LiBQcmltaXRpdmVzIGFyZSBuZXZlciBleHRlbnNpYmxlLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSkudG8uYmUuZXh0ZW5zaWJsZTtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5leHRlbnNpYmxlYC5cbiAgICpcbiAgICogICAgIHZhciBub25FeHRlbnNpYmxlT2JqZWN0ID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KVxuICAgKiAgICAgICAsIHNlYWxlZE9iamVjdCA9IE9iamVjdC5zZWFsKHt9KVxuICAgKiAgICAgICAsIGZyb3plbk9iamVjdCA9IE9iamVjdC5mcmVlemUoe30pO1xuICAgKlxuICAgKiAgICAgZXhwZWN0KG5vbkV4dGVuc2libGVPYmplY3QpLnRvLm5vdC5iZS5leHRlbnNpYmxlO1xuICAgKiAgICAgZXhwZWN0KHNlYWxlZE9iamVjdCkudG8ubm90LmJlLmV4dGVuc2libGU7XG4gICAqICAgICBleHBlY3QoZnJvemVuT2JqZWN0KS50by5ub3QuYmUuZXh0ZW5zaWJsZTtcbiAgICogICAgIGV4cGVjdCgxKS50by5ub3QuYmUuZXh0ZW5zaWJsZTtcbiAgICpcbiAgICogQSBjdXN0b20gZXJyb3IgbWVzc2FnZSBjYW4gYmUgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZXhwZWN0YC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUuZXh0ZW5zaWJsZTtcbiAgICpcbiAgICogQG5hbWUgZXh0ZW5zaWJsZVxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ2V4dGVuc2libGUnLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG5cbiAgICAvLyBJbiBFUzUsIGlmIHRoZSBhcmd1bWVudCB0byB0aGlzIG1ldGhvZCBpcyBhIHByaW1pdGl2ZSwgdGhlbiBpdCB3aWxsIGNhdXNlIGEgVHlwZUVycm9yLlxuICAgIC8vIEluIEVTNiwgYSBub24tb2JqZWN0IGFyZ3VtZW50IHdpbGwgYmUgdHJlYXRlZCBhcyBpZiBpdCB3YXMgYSBub24tZXh0ZW5zaWJsZSBvcmRpbmFyeSBvYmplY3QsIHNpbXBseSByZXR1cm4gZmFsc2UuXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzRXh0ZW5zaWJsZVxuICAgIC8vIFRoZSBmb2xsb3dpbmcgcHJvdmlkZXMgRVM2IGJlaGF2aW9yIGZvciBFUzUgZW52aXJvbm1lbnRzLlxuXG4gICAgdmFyIGlzRXh0ZW5zaWJsZSA9IG9iaiA9PT0gT2JqZWN0KG9iaikgJiYgT2JqZWN0LmlzRXh0ZW5zaWJsZShvYmopO1xuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpc0V4dGVuc2libGVcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgZXh0ZW5zaWJsZSdcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIGV4dGVuc2libGUnXG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuc2VhbGVkXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIHNlYWxlZCwgd2hpY2ggbWVhbnMgdGhhdCBuZXcgcHJvcGVydGllcyBjYW4ndCBiZVxuICAgKiBhZGRlZCB0byBpdCwgYW5kIGl0cyBleGlzdGluZyBwcm9wZXJ0aWVzIGNhbid0IGJlIHJlY29uZmlndXJlZCBvciBkZWxldGVkLlxuICAgKiBIb3dldmVyLCBpdCdzIHBvc3NpYmxlIHRoYXQgaXRzIGV4aXN0aW5nIHByb3BlcnRpZXMgY2FuIHN0aWxsIGJlIHJlYXNzaWduZWRcbiAgICogdG8gZGlmZmVyZW50IHZhbHVlcy4gUHJpbWl0aXZlcyBhcmUgYWx3YXlzIHNlYWxlZC5cbiAgICpcbiAgICogICAgIHZhciBzZWFsZWRPYmplY3QgPSBPYmplY3Quc2VhbCh7fSk7XG4gICAqICAgICB2YXIgZnJvemVuT2JqZWN0ID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG4gICAqXG4gICAqICAgICBleHBlY3Qoc2VhbGVkT2JqZWN0KS50by5iZS5zZWFsZWQ7XG4gICAqICAgICBleHBlY3QoZnJvemVuT2JqZWN0KS50by5iZS5zZWFsZWQ7XG4gICAqICAgICBleHBlY3QoMSkudG8uYmUuc2VhbGVkO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLnNlYWxlZGAuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5ub3QuYmUuc2VhbGVkO1xuICAgKlxuICAgKiBBIGN1c3RvbSBlcnJvciBtZXNzYWdlIGNhbiBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLnNlYWxlZDtcbiAgICpcbiAgICogQG5hbWUgc2VhbGVkXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnc2VhbGVkJywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpO1xuXG4gICAgLy8gSW4gRVM1LCBpZiB0aGUgYXJndW1lbnQgdG8gdGhpcyBtZXRob2QgaXMgYSBwcmltaXRpdmUsIHRoZW4gaXQgd2lsbCBjYXVzZSBhIFR5cGVFcnJvci5cbiAgICAvLyBJbiBFUzYsIGEgbm9uLW9iamVjdCBhcmd1bWVudCB3aWxsIGJlIHRyZWF0ZWQgYXMgaWYgaXQgd2FzIGEgc2VhbGVkIG9yZGluYXJ5IG9iamVjdCwgc2ltcGx5IHJldHVybiB0cnVlLlxuICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNTZWFsZWRcbiAgICAvLyBUaGUgZm9sbG93aW5nIHByb3ZpZGVzIEVTNiBiZWhhdmlvciBmb3IgRVM1IGVudmlyb25tZW50cy5cblxuICAgIHZhciBpc1NlYWxlZCA9IG9iaiA9PT0gT2JqZWN0KG9iaikgPyBPYmplY3QuaXNTZWFsZWQob2JqKSA6IHRydWU7XG5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGlzU2VhbGVkXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIHNlYWxlZCdcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIHNlYWxlZCdcbiAgICApO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5mcm96ZW5cbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgZnJvemVuLCB3aGljaCBtZWFucyB0aGF0IG5ldyBwcm9wZXJ0aWVzIGNhbid0IGJlXG4gICAqIGFkZGVkIHRvIGl0LCBhbmQgaXRzIGV4aXN0aW5nIHByb3BlcnRpZXMgY2FuJ3QgYmUgcmVhc3NpZ25lZCB0byBkaWZmZXJlbnRcbiAgICogdmFsdWVzLCByZWNvbmZpZ3VyZWQsIG9yIGRlbGV0ZWQuIFByaW1pdGl2ZXMgYXJlIGFsd2F5cyBmcm96ZW4uXG4gICAqXG4gICAqICAgICB2YXIgZnJvemVuT2JqZWN0ID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG4gICAqXG4gICAqICAgICBleHBlY3QoZnJvemVuT2JqZWN0KS50by5iZS5mcm96ZW47XG4gICAqICAgICBleHBlY3QoMSkudG8uYmUuZnJvemVuO1xuICAgKlxuICAgKiBBZGQgYC5ub3RgIGVhcmxpZXIgaW4gdGhlIGNoYWluIHRvIG5lZ2F0ZSBgLmZyb3plbmAuXG4gICAqXG4gICAqICAgICBleHBlY3Qoe2E6IDF9KS50by5ub3QuYmUuZnJvemVuO1xuICAgKlxuICAgKiBBIGN1c3RvbSBlcnJvciBtZXNzYWdlIGNhbiBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KHthOiAxfSwgJ25vb28gd2h5IGZhaWw/PycpLnRvLmJlLmZyb3plbjtcbiAgICpcbiAgICogQG5hbWUgZnJvemVuXG4gICAqIEBuYW1lc3BhY2UgQkREXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnZnJvemVuJywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpO1xuXG4gICAgLy8gSW4gRVM1LCBpZiB0aGUgYXJndW1lbnQgdG8gdGhpcyBtZXRob2QgaXMgYSBwcmltaXRpdmUsIHRoZW4gaXQgd2lsbCBjYXVzZSBhIFR5cGVFcnJvci5cbiAgICAvLyBJbiBFUzYsIGEgbm9uLW9iamVjdCBhcmd1bWVudCB3aWxsIGJlIHRyZWF0ZWQgYXMgaWYgaXQgd2FzIGEgZnJvemVuIG9yZGluYXJ5IG9iamVjdCwgc2ltcGx5IHJldHVybiB0cnVlLlxuICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNGcm96ZW5cbiAgICAvLyBUaGUgZm9sbG93aW5nIHByb3ZpZGVzIEVTNiBiZWhhdmlvciBmb3IgRVM1IGVudmlyb25tZW50cy5cblxuICAgIHZhciBpc0Zyb3plbiA9IG9iaiA9PT0gT2JqZWN0KG9iaikgPyBPYmplY3QuaXNGcm96ZW4ob2JqKSA6IHRydWU7XG5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGlzRnJvemVuXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIGZyb3plbidcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIGZyb3plbidcbiAgICApO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5maW5pdGVcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgYSBudW1iZXIsIGFuZCBpc24ndCBgTmFOYCBvciBwb3NpdGl2ZS9uZWdhdGl2ZVxuICAgKiBgSW5maW5pdHlgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEpLnRvLmJlLmZpbml0ZTtcbiAgICpcbiAgICogQWRkIGAubm90YCBlYXJsaWVyIGluIHRoZSBjaGFpbiB0byBuZWdhdGUgYC5maW5pdGVgLiBIb3dldmVyLCBpdCdzXG4gICAqIGRhbmdlcm91cyB0byBkbyBzby4gVGhlIHByb2JsZW0gaXMgdGhhdCBpdCBjcmVhdGVzIHVuY2VydGFpbiBleHBlY3RhdGlvbnNcbiAgICogYnkgYXNzZXJ0aW5nIHRoYXQgdGhlIHN1YmplY3QgZWl0aGVyIGlzbid0IGEgbnVtYmVyLCBvciB0aGF0IGl0J3MgYE5hTmAsIG9yXG4gICAqIHRoYXQgaXQncyBwb3NpdGl2ZSBgSW5maW5pdHlgLCBvciB0aGF0IGl0J3MgbmVnYXRpdmUgYEluZmluaXR5YC4gSXQncyBvZnRlblxuICAgKiBiZXN0IHRvIGlkZW50aWZ5IHRoZSBleGFjdCBvdXRwdXQgdGhhdCdzIGV4cGVjdGVkLCBhbmQgdGhlbiB3cml0ZSBhblxuICAgKiBhc3NlcnRpb24gdGhhdCBvbmx5IGFjY2VwdHMgdGhhdCBleGFjdCBvdXRwdXQuXG4gICAqXG4gICAqIFdoZW4gdGhlIHRhcmdldCBpc24ndCBleHBlY3RlZCB0byBiZSBhIG51bWJlciwgaXQncyBvZnRlbiBiZXN0IHRvIGFzc2VydFxuICAgKiB0aGF0IGl0J3MgdGhlIGV4cGVjdGVkIHR5cGUsIHJhdGhlciB0aGFuIGFzc2VydGluZyB0aGF0IGl0IGlzbid0IG9uZSBvZlxuICAgKiBtYW55IHVuZXhwZWN0ZWQgdHlwZXMuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmJlLmEoJ3N0cmluZycpOyAvLyBSZWNvbW1lbmRlZFxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5ub3QuYmUuZmluaXRlOyAvLyBOb3QgcmVjb21tZW5kZWRcbiAgICpcbiAgICogV2hlbiB0aGUgdGFyZ2V0IGlzIGV4cGVjdGVkIHRvIGJlIGBOYU5gLCBpdCdzIG9mdGVuIGJlc3QgdG8gYXNzZXJ0IGV4YWN0bHlcbiAgICogdGhhdC5cbiAgICpcbiAgICogICAgIGV4cGVjdChOYU4pLnRvLmJlLk5hTjsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdChOYU4pLnRvLm5vdC5iZS5maW5pdGU7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgaXMgZXhwZWN0ZWQgdG8gYmUgcG9zaXRpdmUgaW5maW5pdHksIGl0J3Mgb2Z0ZW4gYmVzdCB0b1xuICAgKiBhc3NlcnQgZXhhY3RseSB0aGF0LlxuICAgKlxuICAgKiAgICAgZXhwZWN0KEluZmluaXR5KS50by5lcXVhbChJbmZpbml0eSk7IC8vIFJlY29tbWVuZGVkXG4gICAqICAgICBleHBlY3QoSW5maW5pdHkpLnRvLm5vdC5iZS5maW5pdGU7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBXaGVuIHRoZSB0YXJnZXQgaXMgZXhwZWN0ZWQgdG8gYmUgbmVnYXRpdmUgaW5maW5pdHksIGl0J3Mgb2Z0ZW4gYmVzdCB0b1xuICAgKiBhc3NlcnQgZXhhY3RseSB0aGF0LlxuICAgKlxuICAgKiAgICAgZXhwZWN0KC1JbmZpbml0eSkudG8uZXF1YWwoLUluZmluaXR5KTsgLy8gUmVjb21tZW5kZWRcbiAgICogICAgIGV4cGVjdCgtSW5maW5pdHkpLnRvLm5vdC5iZS5maW5pdGU7IC8vIE5vdCByZWNvbW1lbmRlZFxuICAgKlxuICAgKiBBIGN1c3RvbSBlcnJvciBtZXNzYWdlIGNhbiBiZSBnaXZlbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGBleHBlY3RgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb28nLCAnbm9vbyB3aHkgZmFpbD8/JykudG8uYmUuZmluaXRlO1xuICAgKlxuICAgKiBAbmFtZSBmaW5pdGVcbiAgICogQG5hbWVzcGFjZSBCRERcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdmaW5pdGUnLCBmdW5jdGlvbihtc2cpIHtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgdHlwZW9mIG9iaiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUob2JqKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhIGZpbml0ZSBudW1iZXInXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBhIGZpbml0ZSBudW1iZXInXG4gICAgKTtcbiAgfSk7XG59O1xuIiwgIi8qIVxuICogY2hhaVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNoYWksIHV0aWwpIHtcbiAgY2hhaS5leHBlY3QgPSBmdW5jdGlvbiAodmFsLCBtZXNzYWdlKSB7XG4gICAgcmV0dXJuIG5ldyBjaGFpLkFzc2VydGlvbih2YWwsIG1lc3NhZ2UpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmZhaWwoW21lc3NhZ2VdKVxuICAgKiAjIyMgLmZhaWwoYWN0dWFsLCBleHBlY3RlZCwgW21lc3NhZ2VdLCBbb3BlcmF0b3JdKVxuICAgKlxuICAgKiBUaHJvdyBhIGZhaWx1cmUuXG4gICAqXG4gICAqICAgICBleHBlY3QuZmFpbCgpO1xuICAgKiAgICAgZXhwZWN0LmZhaWwoXCJjdXN0b20gZXJyb3IgbWVzc2FnZVwiKTtcbiAgICogICAgIGV4cGVjdC5mYWlsKDEsIDIpO1xuICAgKiAgICAgZXhwZWN0LmZhaWwoMSwgMiwgXCJjdXN0b20gZXJyb3IgbWVzc2FnZVwiKTtcbiAgICogICAgIGV4cGVjdC5mYWlsKDEsIDIsIFwiY3VzdG9tIGVycm9yIG1lc3NhZ2VcIiwgXCI+XCIpO1xuICAgKiAgICAgZXhwZWN0LmZhaWwoMSwgMiwgdW5kZWZpbmVkLCBcIj5cIik7XG4gICAqXG4gICAqIEBuYW1lIGZhaWxcbiAgICogQHBhcmFtIHtNaXhlZH0gYWN0dWFsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGV4cGVjdGVkXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBvcGVyYXRvclxuICAgKiBAbmFtZXNwYWNlIEJERFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBjaGFpLmV4cGVjdC5mYWlsID0gZnVuY3Rpb24gKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wZXJhdG9yKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICAgIG1lc3NhZ2UgPSBhY3R1YWw7XG4gICAgICAgIGFjdHVhbCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBtZXNzYWdlID0gbWVzc2FnZSB8fCAnZXhwZWN0LmZhaWwoKSc7XG4gICAgdGhyb3cgbmV3IGNoYWkuQXNzZXJ0aW9uRXJyb3IobWVzc2FnZSwge1xuICAgICAgICBhY3R1YWw6IGFjdHVhbFxuICAgICAgLCBleHBlY3RlZDogZXhwZWN0ZWRcbiAgICAgICwgb3BlcmF0b3I6IG9wZXJhdG9yXG4gICAgfSwgY2hhaS5leHBlY3QuZmFpbCk7XG4gIH07XG59O1xuIiwgIi8qIVxuICogY2hhaVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNoYWksIHV0aWwpIHtcbiAgdmFyIEFzc2VydGlvbiA9IGNoYWkuQXNzZXJ0aW9uO1xuXG4gIGZ1bmN0aW9uIGxvYWRTaG91bGQgKCkge1xuICAgIC8vIGV4cGxpY2l0bHkgZGVmaW5lIHRoaXMgbWV0aG9kIGFzIGZ1bmN0aW9uIGFzIHRvIGhhdmUgaXQncyBuYW1lIHRvIGluY2x1ZGUgYXMgYHNzZmlgXG4gICAgZnVuY3Rpb24gc2hvdWxkR2V0dGVyKCkge1xuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBTdHJpbmdcbiAgICAgICAgICB8fCB0aGlzIGluc3RhbmNlb2YgTnVtYmVyXG4gICAgICAgICAgfHwgdGhpcyBpbnN0YW5jZW9mIEJvb2xlYW5cbiAgICAgICAgICB8fCB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHRoaXMgaW5zdGFuY2VvZiBTeW1ib2xcbiAgICAgICAgICB8fCB0eXBlb2YgQmlnSW50ID09PSAnZnVuY3Rpb24nICYmIHRoaXMgaW5zdGFuY2VvZiBCaWdJbnQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBc3NlcnRpb24odGhpcy52YWx1ZU9mKCksIG51bGwsIHNob3VsZEdldHRlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IEFzc2VydGlvbih0aGlzLCBudWxsLCBzaG91bGRHZXR0ZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzaG91bGRTZXR0ZXIodmFsdWUpIHtcbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hhaWpzL2NoYWkvaXNzdWVzLzg2OiB0aGlzIG1ha2VzXG4gICAgICAvLyBgd2hhdGV2ZXIuc2hvdWxkID0gc29tZVZhbHVlYCBhY3R1YWxseSBzZXQgYHNvbWVWYWx1ZWAsIHdoaWNoIGlzXG4gICAgICAvLyBlc3BlY2lhbGx5IHVzZWZ1bCBmb3IgYGdsb2JhbC5zaG91bGQgPSByZXF1aXJlKCdjaGFpJykuc2hvdWxkKClgLlxuICAgICAgLy9cbiAgICAgIC8vIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIHVzZSBbW0RlZmluZVByb3BlcnR5XV0gaW5zdGVhZCBvZiBbW1B1dF1dXG4gICAgICAvLyBzaW5jZSBvdGhlcndpc2Ugd2Ugd291bGQgdHJpZ2dlciB0aGlzIHZlcnkgc2V0dGVyIVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdzaG91bGQnLCB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIG1vZGlmeSBPYmplY3QucHJvdG90eXBlIHRvIGhhdmUgYHNob3VsZGBcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LnByb3RvdHlwZSwgJ3Nob3VsZCcsIHtcbiAgICAgIHNldDogc2hvdWxkU2V0dGVyXG4gICAgICAsIGdldDogc2hvdWxkR2V0dGVyXG4gICAgICAsIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgdmFyIHNob3VsZCA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogIyMjIC5mYWlsKFttZXNzYWdlXSlcbiAgICAgKiAjIyMgLmZhaWwoYWN0dWFsLCBleHBlY3RlZCwgW21lc3NhZ2VdLCBbb3BlcmF0b3JdKVxuICAgICAqXG4gICAgICogVGhyb3cgYSBmYWlsdXJlLlxuICAgICAqXG4gICAgICogICAgIHNob3VsZC5mYWlsKCk7XG4gICAgICogICAgIHNob3VsZC5mYWlsKFwiY3VzdG9tIGVycm9yIG1lc3NhZ2VcIik7XG4gICAgICogICAgIHNob3VsZC5mYWlsKDEsIDIpO1xuICAgICAqICAgICBzaG91bGQuZmFpbCgxLCAyLCBcImN1c3RvbSBlcnJvciBtZXNzYWdlXCIpO1xuICAgICAqICAgICBzaG91bGQuZmFpbCgxLCAyLCBcImN1c3RvbSBlcnJvciBtZXNzYWdlXCIsIFwiPlwiKTtcbiAgICAgKiAgICAgc2hvdWxkLmZhaWwoMSwgMiwgdW5kZWZpbmVkLCBcIj5cIik7XG4gICAgICpcbiAgICAgKlxuICAgICAqIEBuYW1lIGZhaWxcbiAgICAgKiBAcGFyYW0ge01peGVkfSBhY3R1YWxcbiAgICAgKiBAcGFyYW0ge01peGVkfSBleHBlY3RlZFxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG9wZXJhdG9yXG4gICAgICogQG5hbWVzcGFjZSBCRERcbiAgICAgKiBAYXBpIHB1YmxpY1xuICAgICAqL1xuXG4gICAgc2hvdWxkLmZhaWwgPSBmdW5jdGlvbiAoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgb3BlcmF0b3IpIHtcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgICAgIG1lc3NhZ2UgPSBhY3R1YWw7XG4gICAgICAgICAgYWN0dWFsID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBtZXNzYWdlID0gbWVzc2FnZSB8fCAnc2hvdWxkLmZhaWwoKSc7XG4gICAgICB0aHJvdyBuZXcgY2hhaS5Bc3NlcnRpb25FcnJvcihtZXNzYWdlLCB7XG4gICAgICAgICAgYWN0dWFsOiBhY3R1YWxcbiAgICAgICAgLCBleHBlY3RlZDogZXhwZWN0ZWRcbiAgICAgICAgLCBvcGVyYXRvcjogb3BlcmF0b3JcbiAgICAgIH0sIHNob3VsZC5mYWlsKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogIyMjIC5lcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBbbWVzc2FnZV0pXG4gICAgICpcbiAgICAgKiBBc3NlcnRzIG5vbi1zdHJpY3QgZXF1YWxpdHkgKGA9PWApIG9mIGBhY3R1YWxgIGFuZCBgZXhwZWN0ZWRgLlxuICAgICAqXG4gICAgICogICAgIHNob3VsZC5lcXVhbCgzLCAnMycsICc9PSBjb2VyY2VzIHZhbHVlcyB0byBzdHJpbmdzJyk7XG4gICAgICpcbiAgICAgKiBAbmFtZSBlcXVhbFxuICAgICAqIEBwYXJhbSB7TWl4ZWR9IGFjdHVhbFxuICAgICAqIEBwYXJhbSB7TWl4ZWR9IGV4cGVjdGVkXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICAgKiBAbmFtZXNwYWNlIFNob3VsZFxuICAgICAqIEBhcGkgcHVibGljXG4gICAgICovXG5cbiAgICBzaG91bGQuZXF1YWwgPSBmdW5jdGlvbiAodmFsMSwgdmFsMiwgbXNnKSB7XG4gICAgICBuZXcgQXNzZXJ0aW9uKHZhbDEsIG1zZykudG8uZXF1YWwodmFsMik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICMjIyAudGhyb3coZnVuY3Rpb24sIFtjb25zdHJ1Y3Rvci9zdHJpbmcvcmVnZXhwXSwgW3N0cmluZy9yZWdleHBdLCBbbWVzc2FnZV0pXG4gICAgICpcbiAgICAgKiBBc3NlcnRzIHRoYXQgYGZ1bmN0aW9uYCB3aWxsIHRocm93IGFuIGVycm9yIHRoYXQgaXMgYW4gaW5zdGFuY2Ugb2ZcbiAgICAgKiBgY29uc3RydWN0b3JgLCBvciBhbHRlcm5hdGVseSB0aGF0IGl0IHdpbGwgdGhyb3cgYW4gZXJyb3Igd2l0aCBtZXNzYWdlXG4gICAgICogbWF0Y2hpbmcgYHJlZ2V4cGAuXG4gICAgICpcbiAgICAgKiAgICAgc2hvdWxkLnRocm93KGZuLCAnZnVuY3Rpb24gdGhyb3dzIGEgcmVmZXJlbmNlIGVycm9yJyk7XG4gICAgICogICAgIHNob3VsZC50aHJvdyhmbiwgL2Z1bmN0aW9uIHRocm93cyBhIHJlZmVyZW5jZSBlcnJvci8pO1xuICAgICAqICAgICBzaG91bGQudGhyb3coZm4sIFJlZmVyZW5jZUVycm9yKTtcbiAgICAgKiAgICAgc2hvdWxkLnRocm93KGZuLCBSZWZlcmVuY2VFcnJvciwgJ2Z1bmN0aW9uIHRocm93cyBhIHJlZmVyZW5jZSBlcnJvcicpO1xuICAgICAqICAgICBzaG91bGQudGhyb3coZm4sIFJlZmVyZW5jZUVycm9yLCAvZnVuY3Rpb24gdGhyb3dzIGEgcmVmZXJlbmNlIGVycm9yLyk7XG4gICAgICpcbiAgICAgKiBAbmFtZSB0aHJvd1xuICAgICAqIEBhbGlhcyBUaHJvd1xuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtFcnJvckNvbnN0cnVjdG9yfSBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7UmVnRXhwfSByZWdleHBcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRXJyb3IjRXJyb3JfdHlwZXNcbiAgICAgKiBAbmFtZXNwYWNlIFNob3VsZFxuICAgICAqIEBhcGkgcHVibGljXG4gICAgICovXG5cbiAgICBzaG91bGQuVGhyb3cgPSBmdW5jdGlvbiAoZm4sIGVycnQsIGVycnMsIG1zZykge1xuICAgICAgbmV3IEFzc2VydGlvbihmbiwgbXNnKS50by5UaHJvdyhlcnJ0LCBlcnJzKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogIyMjIC5leGlzdFxuICAgICAqXG4gICAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgbmVpdGhlciBgbnVsbGAgbm9yIGB1bmRlZmluZWRgLlxuICAgICAqXG4gICAgICogICAgIHZhciBmb28gPSAnaGknO1xuICAgICAqXG4gICAgICogICAgIHNob3VsZC5leGlzdChmb28sICdmb28gZXhpc3RzJyk7XG4gICAgICpcbiAgICAgKiBAbmFtZSBleGlzdFxuICAgICAqIEBuYW1lc3BhY2UgU2hvdWxkXG4gICAgICogQGFwaSBwdWJsaWNcbiAgICAgKi9cblxuICAgIHNob3VsZC5leGlzdCA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZykudG8uZXhpc3Q7XG4gICAgfVxuXG4gICAgLy8gbmVnYXRpb25cbiAgICBzaG91bGQubm90ID0ge31cblxuICAgIC8qKlxuICAgICAqICMjIyAubm90LmVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIFttZXNzYWdlXSlcbiAgICAgKlxuICAgICAqIEFzc2VydHMgbm9uLXN0cmljdCBpbmVxdWFsaXR5IChgIT1gKSBvZiBgYWN0dWFsYCBhbmQgYGV4cGVjdGVkYC5cbiAgICAgKlxuICAgICAqICAgICBzaG91bGQubm90LmVxdWFsKDMsIDQsICd0aGVzZSBudW1iZXJzIGFyZSBub3QgZXF1YWwnKTtcbiAgICAgKlxuICAgICAqIEBuYW1lIG5vdC5lcXVhbFxuICAgICAqIEBwYXJhbSB7TWl4ZWR9IGFjdHVhbFxuICAgICAqIEBwYXJhbSB7TWl4ZWR9IGV4cGVjdGVkXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICAgKiBAbmFtZXNwYWNlIFNob3VsZFxuICAgICAqIEBhcGkgcHVibGljXG4gICAgICovXG5cbiAgICBzaG91bGQubm90LmVxdWFsID0gZnVuY3Rpb24gKHZhbDEsIHZhbDIsIG1zZykge1xuICAgICAgbmV3IEFzc2VydGlvbih2YWwxLCBtc2cpLnRvLm5vdC5lcXVhbCh2YWwyKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogIyMjIC50aHJvdyhmdW5jdGlvbiwgW2NvbnN0cnVjdG9yL3JlZ2V4cF0sIFttZXNzYWdlXSlcbiAgICAgKlxuICAgICAqIEFzc2VydHMgdGhhdCBgZnVuY3Rpb25gIHdpbGwgX25vdF8gdGhyb3cgYW4gZXJyb3IgdGhhdCBpcyBhbiBpbnN0YW5jZSBvZlxuICAgICAqIGBjb25zdHJ1Y3RvcmAsIG9yIGFsdGVybmF0ZWx5IHRoYXQgaXQgd2lsbCBub3QgdGhyb3cgYW4gZXJyb3Igd2l0aCBtZXNzYWdlXG4gICAgICogbWF0Y2hpbmcgYHJlZ2V4cGAuXG4gICAgICpcbiAgICAgKiAgICAgc2hvdWxkLm5vdC50aHJvdyhmbiwgRXJyb3IsICdmdW5jdGlvbiBkb2VzIG5vdCB0aHJvdycpO1xuICAgICAqXG4gICAgICogQG5hbWUgbm90LnRocm93XG4gICAgICogQGFsaWFzIG5vdC5UaHJvd1xuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtFcnJvckNvbnN0cnVjdG9yfSBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7UmVnRXhwfSByZWdleHBcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRXJyb3IjRXJyb3JfdHlwZXNcbiAgICAgKiBAbmFtZXNwYWNlIFNob3VsZFxuICAgICAqIEBhcGkgcHVibGljXG4gICAgICovXG5cbiAgICBzaG91bGQubm90LlRocm93ID0gZnVuY3Rpb24gKGZuLCBlcnJ0LCBlcnJzLCBtc2cpIHtcbiAgICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZykudG8ubm90LlRocm93KGVycnQsIGVycnMpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiAjIyMgLm5vdC5leGlzdFxuICAgICAqXG4gICAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgbmVpdGhlciBgbnVsbGAgbm9yIGB1bmRlZmluZWRgLlxuICAgICAqXG4gICAgICogICAgIHZhciBiYXIgPSBudWxsO1xuICAgICAqXG4gICAgICogICAgIHNob3VsZC5ub3QuZXhpc3QoYmFyLCAnYmFyIGRvZXMgbm90IGV4aXN0Jyk7XG4gICAgICpcbiAgICAgKiBAbmFtZSBub3QuZXhpc3RcbiAgICAgKiBAbmFtZXNwYWNlIFNob3VsZFxuICAgICAqIEBhcGkgcHVibGljXG4gICAgICovXG5cbiAgICBzaG91bGQubm90LmV4aXN0ID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnKS50by5ub3QuZXhpc3Q7XG4gICAgfVxuXG4gICAgc2hvdWxkWyd0aHJvdyddID0gc2hvdWxkWydUaHJvdyddO1xuICAgIHNob3VsZC5ub3RbJ3Rocm93J10gPSBzaG91bGQubm90WydUaHJvdyddO1xuXG4gICAgcmV0dXJuIHNob3VsZDtcbiAgfTtcblxuICBjaGFpLnNob3VsZCA9IGxvYWRTaG91bGQ7XG4gIGNoYWkuU2hvdWxkID0gbG9hZFNob3VsZDtcbn07XG4iLCAiLyohXG4gKiBjaGFpXG4gKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY2hhaSwgdXRpbCkge1xuICAvKiFcbiAgICogQ2hhaSBkZXBlbmRlbmNpZXMuXG4gICAqL1xuXG4gIHZhciBBc3NlcnRpb24gPSBjaGFpLkFzc2VydGlvblxuICAgICwgZmxhZyA9IHV0aWwuZmxhZztcblxuICAvKiFcbiAgICogTW9kdWxlIGV4cG9ydC5cbiAgICovXG5cbiAgLyoqXG4gICAqICMjIyBhc3NlcnQoZXhwcmVzc2lvbiwgbWVzc2FnZSlcbiAgICpcbiAgICogV3JpdGUgeW91ciBvd24gdGVzdCBleHByZXNzaW9ucy5cbiAgICpcbiAgICogICAgIGFzc2VydCgnZm9vJyAhPT0gJ2JhcicsICdmb28gaXMgbm90IGJhcicpO1xuICAgKiAgICAgYXNzZXJ0KEFycmF5LmlzQXJyYXkoW10pLCAnZW1wdHkgYXJyYXlzIGFyZSBhcnJheXMnKTtcbiAgICpcbiAgICogQHBhcmFtIHtNaXhlZH0gZXhwcmVzc2lvbiB0byB0ZXN0IGZvciB0cnV0aGluZXNzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIHRvIGRpc3BsYXkgb24gZXJyb3JcbiAgICogQG5hbWUgYXNzZXJ0XG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIHZhciBhc3NlcnQgPSBjaGFpLmFzc2VydCA9IGZ1bmN0aW9uIChleHByZXNzLCBlcnJtc2cpIHtcbiAgICB2YXIgdGVzdCA9IG5ldyBBc3NlcnRpb24obnVsbCwgbnVsbCwgY2hhaS5hc3NlcnQsIHRydWUpO1xuICAgIHRlc3QuYXNzZXJ0KFxuICAgICAgICBleHByZXNzXG4gICAgICAsIGVycm1zZ1xuICAgICAgLCAnWyBuZWdhdGlvbiBtZXNzYWdlIHVuYXZhaWxhYmxlIF0nXG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5mYWlsKFttZXNzYWdlXSlcbiAgICogIyMjIC5mYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIFttZXNzYWdlXSwgW29wZXJhdG9yXSlcbiAgICpcbiAgICogVGhyb3cgYSBmYWlsdXJlLiBOb2RlLmpzIGBhc3NlcnRgIG1vZHVsZS1jb21wYXRpYmxlLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmZhaWwoKTtcbiAgICogICAgIGFzc2VydC5mYWlsKFwiY3VzdG9tIGVycm9yIG1lc3NhZ2VcIik7XG4gICAqICAgICBhc3NlcnQuZmFpbCgxLCAyKTtcbiAgICogICAgIGFzc2VydC5mYWlsKDEsIDIsIFwiY3VzdG9tIGVycm9yIG1lc3NhZ2VcIik7XG4gICAqICAgICBhc3NlcnQuZmFpbCgxLCAyLCBcImN1c3RvbSBlcnJvciBtZXNzYWdlXCIsIFwiPlwiKTtcbiAgICogICAgIGFzc2VydC5mYWlsKDEsIDIsIHVuZGVmaW5lZCwgXCI+XCIpO1xuICAgKlxuICAgKiBAbmFtZSBmYWlsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGFjdHVhbFxuICAgKiBAcGFyYW0ge01peGVkfSBleHBlY3RlZFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gb3BlcmF0b3JcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmZhaWwgPSBmdW5jdGlvbiAoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgb3BlcmF0b3IpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgLy8gQ29tcGx5IHdpdGggTm9kZSdzIGZhaWwoW21lc3NhZ2VdKSBpbnRlcmZhY2VcblxuICAgICAgICBtZXNzYWdlID0gYWN0dWFsO1xuICAgICAgICBhY3R1YWwgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ2Fzc2VydC5mYWlsKCknO1xuICAgIHRocm93IG5ldyBjaGFpLkFzc2VydGlvbkVycm9yKG1lc3NhZ2UsIHtcbiAgICAgICAgYWN0dWFsOiBhY3R1YWxcbiAgICAgICwgZXhwZWN0ZWQ6IGV4cGVjdGVkXG4gICAgICAsIG9wZXJhdG9yOiBvcGVyYXRvclxuICAgIH0sIGFzc2VydC5mYWlsKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc09rKG9iamVjdCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaXMgdHJ1dGh5LlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzT2soJ2V2ZXJ5dGhpbmcnLCAnZXZlcnl0aGluZyBpcyBvaycpO1xuICAgKiAgICAgYXNzZXJ0LmlzT2soZmFsc2UsICd0aGlzIHdpbGwgZmFpbCcpO1xuICAgKlxuICAgKiBAbmFtZSBpc09rXG4gICAqIEBhbGlhcyBva1xuICAgKiBAcGFyYW0ge01peGVkfSBvYmplY3QgdG8gdGVzdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNPayA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc09rLCB0cnVlKS5pcy5vaztcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc05vdE9rKG9iamVjdCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaXMgZmFsc3kuXG4gICAqXG4gICAqICAgICBhc3NlcnQuaXNOb3RPaygnZXZlcnl0aGluZycsICd0aGlzIHdpbGwgZmFpbCcpO1xuICAgKiAgICAgYXNzZXJ0LmlzTm90T2soZmFsc2UsICd0aGlzIHdpbGwgcGFzcycpO1xuICAgKlxuICAgKiBAbmFtZSBpc05vdE9rXG4gICAqIEBhbGlhcyBub3RPa1xuICAgKiBAcGFyYW0ge01peGVkfSBvYmplY3QgdG8gdGVzdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOb3RPayA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdE9rLCB0cnVlKS5pcy5ub3Qub2s7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuZXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIG5vbi1zdHJpY3QgZXF1YWxpdHkgKGA9PWApIG9mIGBhY3R1YWxgIGFuZCBgZXhwZWN0ZWRgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmVxdWFsKDMsICczJywgJz09IGNvZXJjZXMgdmFsdWVzIHRvIHN0cmluZ3MnKTtcbiAgICpcbiAgICogQG5hbWUgZXF1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gYWN0dWFsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGV4cGVjdGVkXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5lcXVhbCA9IGZ1bmN0aW9uIChhY3QsIGV4cCwgbXNnKSB7XG4gICAgdmFyIHRlc3QgPSBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQuZXF1YWwsIHRydWUpO1xuXG4gICAgdGVzdC5hc3NlcnQoXG4gICAgICAgIGV4cCA9PSBmbGFnKHRlc3QsICdvYmplY3QnKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBlcXVhbCAje2V4cH0nXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBlcXVhbCAje2FjdH0nXG4gICAgICAsIGV4cFxuICAgICAgLCBhY3RcbiAgICAgICwgdHJ1ZVxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIG5vbi1zdHJpY3QgaW5lcXVhbGl0eSAoYCE9YCkgb2YgYGFjdHVhbGAgYW5kIGBleHBlY3RlZGAuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90RXF1YWwoMywgNCwgJ3RoZXNlIG51bWJlcnMgYXJlIG5vdCBlcXVhbCcpO1xuICAgKlxuICAgKiBAbmFtZSBub3RFcXVhbFxuICAgKiBAcGFyYW0ge01peGVkfSBhY3R1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gZXhwZWN0ZWRcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdEVxdWFsID0gZnVuY3Rpb24gKGFjdCwgZXhwLCBtc2cpIHtcbiAgICB2YXIgdGVzdCA9IG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5ub3RFcXVhbCwgdHJ1ZSk7XG5cbiAgICB0ZXN0LmFzc2VydChcbiAgICAgICAgZXhwICE9IGZsYWcodGVzdCwgJ29iamVjdCcpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBlcXVhbCAje2V4cH0nXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGVxdWFsICN7YWN0fSdcbiAgICAgICwgZXhwXG4gICAgICAsIGFjdFxuICAgICAgLCB0cnVlXG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5zdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgc3RyaWN0IGVxdWFsaXR5IChgPT09YCkgb2YgYGFjdHVhbGAgYW5kIGBleHBlY3RlZGAuXG4gICAqXG4gICAqICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHJ1ZSwgdHJ1ZSwgJ3RoZXNlIGJvb2xlYW5zIGFyZSBzdHJpY3RseSBlcXVhbCcpO1xuICAgKlxuICAgKiBAbmFtZSBzdHJpY3RFcXVhbFxuICAgKiBAcGFyYW0ge01peGVkfSBhY3R1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gZXhwZWN0ZWRcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LnN0cmljdEVxdWFsID0gZnVuY3Rpb24gKGFjdCwgZXhwLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQuc3RyaWN0RXF1YWwsIHRydWUpLnRvLmVxdWFsKGV4cCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90U3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHN0cmljdCBpbmVxdWFsaXR5IChgIT09YCkgb2YgYGFjdHVhbGAgYW5kIGBleHBlY3RlZGAuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwoMywgJzMnLCAnbm8gY29lcmNpb24gZm9yIHN0cmljdCBlcXVhbGl0eScpO1xuICAgKlxuICAgKiBAbmFtZSBub3RTdHJpY3RFcXVhbFxuICAgKiBAcGFyYW0ge01peGVkfSBhY3R1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gZXhwZWN0ZWRcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsID0gZnVuY3Rpb24gKGFjdCwgZXhwLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQubm90U3RyaWN0RXF1YWwsIHRydWUpLnRvLm5vdC5lcXVhbChleHApO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgYWN0dWFsYCBpcyBkZWVwbHkgZXF1YWwgdG8gYGV4cGVjdGVkYC5cbiAgICpcbiAgICogICAgIGFzc2VydC5kZWVwRXF1YWwoeyB0ZWE6ICdncmVlbicgfSwgeyB0ZWE6ICdncmVlbicgfSk7XG4gICAqXG4gICAqIEBuYW1lIGRlZXBFcXVhbFxuICAgKiBAcGFyYW0ge01peGVkfSBhY3R1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gZXhwZWN0ZWRcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQGFsaWFzIGRlZXBTdHJpY3RFcXVhbFxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZGVlcEVxdWFsID0gYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIChhY3QsIGV4cCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0LmRlZXBFcXVhbCwgdHJ1ZSkudG8uZXFsKGV4cCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90RGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0IHRoYXQgYGFjdHVhbGAgaXMgbm90IGRlZXBseSBlcXVhbCB0byBgZXhwZWN0ZWRgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBFcXVhbCh7IHRlYTogJ2dyZWVuJyB9LCB7IHRlYTogJ2phc21pbmUnIH0pO1xuICAgKlxuICAgKiBAbmFtZSBub3REZWVwRXF1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gYWN0dWFsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGV4cGVjdGVkXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3REZWVwRXF1YWwgPSBmdW5jdGlvbiAoYWN0LCBleHAsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5ub3REZWVwRXF1YWwsIHRydWUpLnRvLm5vdC5lcWwoZXhwKTtcbiAgfTtcblxuICAgLyoqXG4gICAqICMjIyAuaXNBYm92ZSh2YWx1ZVRvQ2hlY2ssIHZhbHVlVG9CZUFib3ZlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgYHZhbHVlVG9DaGVja2AgaXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFuICg+KSBgdmFsdWVUb0JlQWJvdmVgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzQWJvdmUoNSwgMiwgJzUgaXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIDInKTtcbiAgICpcbiAgICogQG5hbWUgaXNBYm92ZVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVRvQ2hlY2tcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVUb0JlQWJvdmVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzQWJvdmUgPSBmdW5jdGlvbiAodmFsLCBhYnYsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0Fib3ZlLCB0cnVlKS50by5iZS5hYm92ZShhYnYpO1xuICB9O1xuXG4gICAvKipcbiAgICogIyMjIC5pc0F0TGVhc3QodmFsdWVUb0NoZWNrLCB2YWx1ZVRvQmVBdExlYXN0LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgYHZhbHVlVG9DaGVja2AgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICg+PSkgYHZhbHVlVG9CZUF0TGVhc3RgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzQXRMZWFzdCg1LCAyLCAnNSBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIDInKTtcbiAgICogICAgIGFzc2VydC5pc0F0TGVhc3QoMywgMywgJzMgaXMgZ3JlYXRlciBvciBlcXVhbCB0byAzJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzQXRMZWFzdFxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVRvQ2hlY2tcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVUb0JlQXRMZWFzdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNBdExlYXN0ID0gZnVuY3Rpb24gKHZhbCwgYXRsc3QsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0F0TGVhc3QsIHRydWUpLnRvLmJlLmxlYXN0KGF0bHN0KTtcbiAgfTtcblxuICAgLyoqXG4gICAqICMjIyAuaXNCZWxvdyh2YWx1ZVRvQ2hlY2ssIHZhbHVlVG9CZUJlbG93LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgYHZhbHVlVG9DaGVja2AgaXMgc3RyaWN0bHkgbGVzcyB0aGFuICg8KSBgdmFsdWVUb0JlQmVsb3dgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzQmVsb3coMywgNiwgJzMgaXMgc3RyaWN0bHkgbGVzcyB0aGFuIDYnKTtcbiAgICpcbiAgICogQG5hbWUgaXNCZWxvd1xuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVRvQ2hlY2tcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVUb0JlQmVsb3dcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzQmVsb3cgPSBmdW5jdGlvbiAodmFsLCBibHcsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0JlbG93LCB0cnVlKS50by5iZS5iZWxvdyhibHcpO1xuICB9O1xuXG4gICAvKipcbiAgICogIyMjIC5pc0F0TW9zdCh2YWx1ZVRvQ2hlY2ssIHZhbHVlVG9CZUF0TW9zdCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIGB2YWx1ZVRvQ2hlY2tgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAoPD0pIGB2YWx1ZVRvQmVBdE1vc3RgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzQXRNb3N0KDMsIDYsICczIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byA2Jyk7XG4gICAqICAgICBhc3NlcnQuaXNBdE1vc3QoNCwgNCwgJzQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDQnKTtcbiAgICpcbiAgICogQG5hbWUgaXNBdE1vc3RcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVUb0NoZWNrXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlVG9CZUF0TW9zdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNBdE1vc3QgPSBmdW5jdGlvbiAodmFsLCBhdG1zdCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzQXRNb3N0LCB0cnVlKS50by5iZS5tb3N0KGF0bXN0KTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc1RydWUodmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgdHJ1ZS5cbiAgICpcbiAgICogICAgIHZhciB0ZWFTZXJ2ZWQgPSB0cnVlO1xuICAgKiAgICAgYXNzZXJ0LmlzVHJ1ZSh0ZWFTZXJ2ZWQsICd0aGUgdGVhIGhhcyBiZWVuIHNlcnZlZCcpO1xuICAgKlxuICAgKiBAbmFtZSBpc1RydWVcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzVHJ1ZSA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc1RydWUsIHRydWUpLmlzWyd0cnVlJ107XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNOb3RUcnVlKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIG5vdCB0cnVlLlxuICAgKlxuICAgKiAgICAgdmFyIHRlYSA9ICd0YXN0eSBjaGFpJztcbiAgICogICAgIGFzc2VydC5pc05vdFRydWUodGVhLCAnZ3JlYXQsIHRpbWUgZm9yIHRlYSEnKTtcbiAgICpcbiAgICogQG5hbWUgaXNOb3RUcnVlXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc05vdFRydWUgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RUcnVlLCB0cnVlKS50by5ub3QuZXF1YWwodHJ1ZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNGYWxzZSh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBmYWxzZS5cbiAgICpcbiAgICogICAgIHZhciB0ZWFTZXJ2ZWQgPSBmYWxzZTtcbiAgICogICAgIGFzc2VydC5pc0ZhbHNlKHRlYVNlcnZlZCwgJ25vIHRlYSB5ZXQ/IGhtbS4uLicpO1xuICAgKlxuICAgKiBAbmFtZSBpc0ZhbHNlXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0ZhbHNlID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzRmFsc2UsIHRydWUpLmlzWydmYWxzZSddO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90RmFsc2UodmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgbm90IGZhbHNlLlxuICAgKlxuICAgKiAgICAgdmFyIHRlYSA9ICd0YXN0eSBjaGFpJztcbiAgICogICAgIGFzc2VydC5pc05vdEZhbHNlKHRlYSwgJ2dyZWF0LCB0aW1lIGZvciB0ZWEhJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90RmFsc2VcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTm90RmFsc2UgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RGYWxzZSwgdHJ1ZSkudG8ubm90LmVxdWFsKGZhbHNlKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc051bGwodmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgbnVsbC5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc051bGwoZXJyLCAndGhlcmUgd2FzIG5vIGVycm9yJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTnVsbFxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOdWxsID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTnVsbCwgdHJ1ZSkudG8uZXF1YWwobnVsbCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNOb3ROdWxsKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIG5vdCBudWxsLlxuICAgKlxuICAgKiAgICAgdmFyIHRlYSA9ICd0YXN0eSBjaGFpJztcbiAgICogICAgIGFzc2VydC5pc05vdE51bGwodGVhLCAnZ3JlYXQsIHRpbWUgZm9yIHRlYSEnKTtcbiAgICpcbiAgICogQG5hbWUgaXNOb3ROdWxsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc05vdE51bGwgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3ROdWxsLCB0cnVlKS50by5ub3QuZXF1YWwobnVsbCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNOYU5cbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHZhbHVlIGlzIE5hTi5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc05hTihOYU4sICdOYU4gaXMgTmFOJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTmFOXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc05hTiA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05hTiwgdHJ1ZSkudG8uYmUuTmFOO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90TmFOXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB2YWx1ZSBpcyBub3QgTmFOLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzTm90TmFOKDQsICc0IGlzIG5vdCBOYU4nKTtcbiAgICpcbiAgICogQG5hbWUgaXNOb3ROYU5cbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG4gIGFzc2VydC5pc05vdE5hTiA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdE5hTiwgdHJ1ZSkubm90LnRvLmJlLk5hTjtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5leGlzdHNcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgbmVpdGhlciBgbnVsbGAgbm9yIGB1bmRlZmluZWRgLlxuICAgKlxuICAgKiAgICAgdmFyIGZvbyA9ICdoaSc7XG4gICAqXG4gICAqICAgICBhc3NlcnQuZXhpc3RzKGZvbywgJ2ZvbyBpcyBuZWl0aGVyIGBudWxsYCBub3IgYHVuZGVmaW5lZGAnKTtcbiAgICpcbiAgICogQG5hbWUgZXhpc3RzXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5leGlzdHMgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuZXhpc3RzLCB0cnVlKS50by5leGlzdDtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3RFeGlzdHNcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgZWl0aGVyIGBudWxsYCBvciBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogICAgIHZhciBiYXIgPSBudWxsXG4gICAqICAgICAgICwgYmF6O1xuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdEV4aXN0cyhiYXIpO1xuICAgKiAgICAgYXNzZXJ0Lm5vdEV4aXN0cyhiYXosICdiYXogaXMgZWl0aGVyIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdEV4aXN0c1xuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90RXhpc3RzID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0Lm5vdEV4aXN0cywgdHJ1ZSkudG8ubm90LmV4aXN0O1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzVW5kZWZpbmVkKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIGB1bmRlZmluZWRgLlxuICAgKlxuICAgKiAgICAgdmFyIHRlYTtcbiAgICogICAgIGFzc2VydC5pc1VuZGVmaW5lZCh0ZWEsICdubyB0ZWEgZGVmaW5lZCcpO1xuICAgKlxuICAgKiBAbmFtZSBpc1VuZGVmaW5lZFxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNVbmRlZmluZWQgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNVbmRlZmluZWQsIHRydWUpLnRvLmVxdWFsKHVuZGVmaW5lZCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNEZWZpbmVkKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIG5vdCBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogICAgIHZhciB0ZWEgPSAnY3VwIG9mIGNoYWknO1xuICAgKiAgICAgYXNzZXJ0LmlzRGVmaW5lZCh0ZWEsICd0ZWEgaGFzIGJlZW4gZGVmaW5lZCcpO1xuICAgKlxuICAgKiBAbmFtZSBpc0RlZmluZWRcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzRGVmaW5lZCA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0RlZmluZWQsIHRydWUpLnRvLm5vdC5lcXVhbCh1bmRlZmluZWQpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzRnVuY3Rpb24odmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgYSBmdW5jdGlvbi5cbiAgICpcbiAgICogICAgIGZ1bmN0aW9uIHNlcnZlVGVhKCkgeyByZXR1cm4gJ2N1cCBvZiB0ZWEnOyB9O1xuICAgKiAgICAgYXNzZXJ0LmlzRnVuY3Rpb24oc2VydmVUZWEsICdncmVhdCwgd2UgY2FuIGhhdmUgdGVhIG5vdycpO1xuICAgKlxuICAgKiBAbmFtZSBpc0Z1bmN0aW9uXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0Z1bmN0aW9uID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzRnVuY3Rpb24sIHRydWUpLnRvLmJlLmEoJ2Z1bmN0aW9uJyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNOb3RGdW5jdGlvbih2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBfbm90XyBhIGZ1bmN0aW9uLlxuICAgKlxuICAgKiAgICAgdmFyIHNlcnZlVGVhID0gWyAnaGVhdCcsICdwb3VyJywgJ3NpcCcgXTtcbiAgICogICAgIGFzc2VydC5pc05vdEZ1bmN0aW9uKHNlcnZlVGVhLCAnZ3JlYXQsIHdlIGhhdmUgbGlzdGVkIHRoZSBzdGVwcycpO1xuICAgKlxuICAgKiBAbmFtZSBpc05vdEZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc05vdEZ1bmN0aW9uID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90RnVuY3Rpb24sIHRydWUpLnRvLm5vdC5iZS5hKCdmdW5jdGlvbicpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzT2JqZWN0KHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIGFuIG9iamVjdCBvZiB0eXBlICdPYmplY3QnIChhcyByZXZlYWxlZCBieSBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2ApLlxuICAgKiBfVGhlIGFzc2VydGlvbiBkb2VzIG5vdCBtYXRjaCBzdWJjbGFzc2VkIG9iamVjdHMuX1xuICAgKlxuICAgKiAgICAgdmFyIHNlbGVjdGlvbiA9IHsgbmFtZTogJ0NoYWknLCBzZXJ2ZTogJ3dpdGggc3BpY2VzJyB9O1xuICAgKiAgICAgYXNzZXJ0LmlzT2JqZWN0KHNlbGVjdGlvbiwgJ3RlYSBzZWxlY3Rpb24gaXMgYW4gb2JqZWN0Jyk7XG4gICAqXG4gICAqIEBuYW1lIGlzT2JqZWN0XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc09iamVjdCA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc09iamVjdCwgdHJ1ZSkudG8uYmUuYSgnb2JqZWN0Jyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNOb3RPYmplY3QodmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgX25vdF8gYW4gb2JqZWN0IG9mIHR5cGUgJ09iamVjdCcgKGFzIHJldmVhbGVkIGJ5IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCkuXG4gICAqXG4gICAqICAgICB2YXIgc2VsZWN0aW9uID0gJ2NoYWknXG4gICAqICAgICBhc3NlcnQuaXNOb3RPYmplY3Qoc2VsZWN0aW9uLCAndGVhIHNlbGVjdGlvbiBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gICAqICAgICBhc3NlcnQuaXNOb3RPYmplY3QobnVsbCwgJ251bGwgaXMgbm90IGFuIG9iamVjdCcpO1xuICAgKlxuICAgKiBAbmFtZSBpc05vdE9iamVjdFxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOb3RPYmplY3QgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RPYmplY3QsIHRydWUpLnRvLm5vdC5iZS5hKCdvYmplY3QnKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc0FycmF5KHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIGFuIGFycmF5LlxuICAgKlxuICAgKiAgICAgdmFyIG1lbnUgPSBbICdncmVlbicsICdjaGFpJywgJ29vbG9uZycgXTtcbiAgICogICAgIGFzc2VydC5pc0FycmF5KG1lbnUsICd3aGF0IGtpbmQgb2YgdGVhIGRvIHdlIHdhbnQ/Jyk7XG4gICAqXG4gICAqIEBuYW1lIGlzQXJyYXlcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzQXJyYXkgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNBcnJheSwgdHJ1ZSkudG8uYmUuYW4oJ2FycmF5Jyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNOb3RBcnJheSh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBfbm90XyBhbiBhcnJheS5cbiAgICpcbiAgICogICAgIHZhciBtZW51ID0gJ2dyZWVufGNoYWl8b29sb25nJztcbiAgICogICAgIGFzc2VydC5pc05vdEFycmF5KG1lbnUsICd3aGF0IGtpbmQgb2YgdGVhIGRvIHdlIHdhbnQ/Jyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90QXJyYXlcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTm90QXJyYXkgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RBcnJheSwgdHJ1ZSkudG8ubm90LmJlLmFuKCdhcnJheScpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzU3RyaW5nKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIGEgc3RyaW5nLlxuICAgKlxuICAgKiAgICAgdmFyIHRlYU9yZGVyID0gJ2NoYWknO1xuICAgKiAgICAgYXNzZXJ0LmlzU3RyaW5nKHRlYU9yZGVyLCAnb3JkZXIgcGxhY2VkJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzU3RyaW5nXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc1N0cmluZyA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc1N0cmluZywgdHJ1ZSkudG8uYmUuYSgnc3RyaW5nJyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNOb3RTdHJpbmcodmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgX25vdF8gYSBzdHJpbmcuXG4gICAqXG4gICAqICAgICB2YXIgdGVhT3JkZXIgPSA0O1xuICAgKiAgICAgYXNzZXJ0LmlzTm90U3RyaW5nKHRlYU9yZGVyLCAnb3JkZXIgcGxhY2VkJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90U3RyaW5nXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc05vdFN0cmluZyA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdFN0cmluZywgdHJ1ZSkudG8ubm90LmJlLmEoJ3N0cmluZycpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTnVtYmVyKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIGEgbnVtYmVyLlxuICAgKlxuICAgKiAgICAgdmFyIGN1cHMgPSAyO1xuICAgKiAgICAgYXNzZXJ0LmlzTnVtYmVyKGN1cHMsICdob3cgbWFueSBjdXBzJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTnVtYmVyXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOdW1iZXIgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOdW1iZXIsIHRydWUpLnRvLmJlLmEoJ251bWJlcicpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90TnVtYmVyKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIF9ub3RfIGEgbnVtYmVyLlxuICAgKlxuICAgKiAgICAgdmFyIGN1cHMgPSAnMiBjdXBzIHBsZWFzZSc7XG4gICAqICAgICBhc3NlcnQuaXNOb3ROdW1iZXIoY3VwcywgJ2hvdyBtYW55IGN1cHMnKTtcbiAgICpcbiAgICogQG5hbWUgaXNOb3ROdW1iZXJcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTm90TnVtYmVyID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90TnVtYmVyLCB0cnVlKS50by5ub3QuYmUuYSgnbnVtYmVyJyk7XG4gIH07XG5cbiAgIC8qKlxuICAgKiAjIyMgLmlzRmluaXRlKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIGEgZmluaXRlIG51bWJlci4gVW5saWtlIGAuaXNOdW1iZXJgLCB0aGlzIHdpbGwgZmFpbCBmb3IgYE5hTmAgYW5kIGBJbmZpbml0eWAuXG4gICAqXG4gICAqICAgICB2YXIgY3VwcyA9IDI7XG4gICAqICAgICBhc3NlcnQuaXNGaW5pdGUoY3VwcywgJ2hvdyBtYW55IGN1cHMnKTtcbiAgICpcbiAgICogICAgIGFzc2VydC5pc0Zpbml0ZShOYU4pOyAvLyB0aHJvd3NcbiAgICpcbiAgICogQG5hbWUgaXNGaW5pdGVcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0Zpbml0ZSA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0Zpbml0ZSwgdHJ1ZSkudG8uYmUuZmluaXRlO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzQm9vbGVhbih2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBhIGJvb2xlYW4uXG4gICAqXG4gICAqICAgICB2YXIgdGVhUmVhZHkgPSB0cnVlXG4gICAqICAgICAgICwgdGVhU2VydmVkID0gZmFsc2U7XG4gICAqXG4gICAqICAgICBhc3NlcnQuaXNCb29sZWFuKHRlYVJlYWR5LCAnaXMgdGhlIHRlYSByZWFkeScpO1xuICAgKiAgICAgYXNzZXJ0LmlzQm9vbGVhbih0ZWFTZXJ2ZWQsICdoYXMgdGVhIGJlZW4gc2VydmVkJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzQm9vbGVhblxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNCb29sZWFuID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzQm9vbGVhbiwgdHJ1ZSkudG8uYmUuYSgnYm9vbGVhbicpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90Qm9vbGVhbih2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBfbm90XyBhIGJvb2xlYW4uXG4gICAqXG4gICAqICAgICB2YXIgdGVhUmVhZHkgPSAneWVwJ1xuICAgKiAgICAgICAsIHRlYVNlcnZlZCA9ICdub3BlJztcbiAgICpcbiAgICogICAgIGFzc2VydC5pc05vdEJvb2xlYW4odGVhUmVhZHksICdpcyB0aGUgdGVhIHJlYWR5Jyk7XG4gICAqICAgICBhc3NlcnQuaXNOb3RCb29sZWFuKHRlYVNlcnZlZCwgJ2hhcyB0ZWEgYmVlbiBzZXJ2ZWQnKTtcbiAgICpcbiAgICogQG5hbWUgaXNOb3RCb29sZWFuXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc05vdEJvb2xlYW4gPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RCb29sZWFuLCB0cnVlKS50by5ub3QuYmUuYSgnYm9vbGVhbicpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLnR5cGVPZih2YWx1ZSwgbmFtZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCdzIHR5cGUgaXMgYG5hbWVgLCBhcyBkZXRlcm1pbmVkIGJ5XG4gICAqIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAgICpcbiAgICogICAgIGFzc2VydC50eXBlT2YoeyB0ZWE6ICdjaGFpJyB9LCAnb2JqZWN0JywgJ3dlIGhhdmUgYW4gb2JqZWN0Jyk7XG4gICAqICAgICBhc3NlcnQudHlwZU9mKFsnY2hhaScsICdqYXNtaW5lJ10sICdhcnJheScsICd3ZSBoYXZlIGFuIGFycmF5Jyk7XG4gICAqICAgICBhc3NlcnQudHlwZU9mKCd0ZWEnLCAnc3RyaW5nJywgJ3dlIGhhdmUgYSBzdHJpbmcnKTtcbiAgICogICAgIGFzc2VydC50eXBlT2YoL3RlYS8sICdyZWdleHAnLCAnd2UgaGF2ZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuICAgKiAgICAgYXNzZXJ0LnR5cGVPZihudWxsLCAnbnVsbCcsICd3ZSBoYXZlIGEgbnVsbCcpO1xuICAgKiAgICAgYXNzZXJ0LnR5cGVPZih1bmRlZmluZWQsICd1bmRlZmluZWQnLCAnd2UgaGF2ZSBhbiB1bmRlZmluZWQnKTtcbiAgICpcbiAgICogQG5hbWUgdHlwZU9mXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC50eXBlT2YgPSBmdW5jdGlvbiAodmFsLCB0eXBlLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQudHlwZU9mLCB0cnVlKS50by5iZS5hKHR5cGUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdFR5cGVPZih2YWx1ZSwgbmFtZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCdzIHR5cGUgaXMgX25vdF8gYG5hbWVgLCBhcyBkZXRlcm1pbmVkIGJ5XG4gICAqIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RUeXBlT2YoJ3RlYScsICdudW1iZXInLCAnc3RyaW5ncyBhcmUgbm90IG51bWJlcnMnKTtcbiAgICpcbiAgICogQG5hbWUgbm90VHlwZU9mXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlb2YgbmFtZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90VHlwZU9mID0gZnVuY3Rpb24gKHZhbCwgdHlwZSwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0Lm5vdFR5cGVPZiwgdHJ1ZSkudG8ubm90LmJlLmEodHlwZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaW5zdGFuY2VPZihvYmplY3QsIGNvbnN0cnVjdG9yLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIGFuIGluc3RhbmNlIG9mIGBjb25zdHJ1Y3RvcmAuXG4gICAqXG4gICAqICAgICB2YXIgVGVhID0gZnVuY3Rpb24gKG5hbWUpIHsgdGhpcy5uYW1lID0gbmFtZTsgfVxuICAgKiAgICAgICAsIGNoYWkgPSBuZXcgVGVhKCdjaGFpJyk7XG4gICAqXG4gICAqICAgICBhc3NlcnQuaW5zdGFuY2VPZihjaGFpLCBUZWEsICdjaGFpIGlzIGFuIGluc3RhbmNlIG9mIHRlYScpO1xuICAgKlxuICAgKiBAbmFtZSBpbnN0YW5jZU9mXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtDb25zdHJ1Y3Rvcn0gY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lmluc3RhbmNlT2YgPSBmdW5jdGlvbiAodmFsLCB0eXBlLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaW5zdGFuY2VPZiwgdHJ1ZSkudG8uYmUuaW5zdGFuY2VPZih0eXBlKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3RJbnN0YW5jZU9mKG9iamVjdCwgY29uc3RydWN0b3IsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyBgdmFsdWVgIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBgY29uc3RydWN0b3JgLlxuICAgKlxuICAgKiAgICAgdmFyIFRlYSA9IGZ1bmN0aW9uIChuYW1lKSB7IHRoaXMubmFtZSA9IG5hbWU7IH1cbiAgICogICAgICAgLCBjaGFpID0gbmV3IFN0cmluZygnY2hhaScpO1xuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdEluc3RhbmNlT2YoY2hhaSwgVGVhLCAnY2hhaSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgdGVhJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdEluc3RhbmNlT2ZcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge0NvbnN0cnVjdG9yfSBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90SW5zdGFuY2VPZiA9IGZ1bmN0aW9uICh2YWwsIHR5cGUsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5ub3RJbnN0YW5jZU9mLCB0cnVlKVxuICAgICAgLnRvLm5vdC5iZS5pbnN0YW5jZU9mKHR5cGUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmluY2x1ZGUoaGF5c3RhY2ssIG5lZWRsZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYGhheXN0YWNrYCBpbmNsdWRlcyBgbmVlZGxlYC4gQ2FuIGJlIHVzZWQgdG8gYXNzZXJ0IHRoZVxuICAgKiBpbmNsdXNpb24gb2YgYSB2YWx1ZSBpbiBhbiBhcnJheSwgYSBzdWJzdHJpbmcgaW4gYSBzdHJpbmcsIG9yIGEgc3Vic2V0IG9mXG4gICAqIHByb3BlcnRpZXMgaW4gYW4gb2JqZWN0LlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmluY2x1ZGUoWzEsMiwzXSwgMiwgJ2FycmF5IGNvbnRhaW5zIHZhbHVlJyk7XG4gICAqICAgICBhc3NlcnQuaW5jbHVkZSgnZm9vYmFyJywgJ2ZvbycsICdzdHJpbmcgY29udGFpbnMgc3Vic3RyaW5nJyk7XG4gICAqICAgICBhc3NlcnQuaW5jbHVkZSh7IGZvbzogJ2JhcicsIGhlbGxvOiAndW5pdmVyc2UnIH0sIHsgZm9vOiAnYmFyJyB9LCAnb2JqZWN0IGNvbnRhaW5zIHByb3BlcnR5Jyk7XG4gICAqXG4gICAqIFN0cmljdCBlcXVhbGl0eSAoPT09KSBpcyB1c2VkLiBXaGVuIGFzc2VydGluZyB0aGUgaW5jbHVzaW9uIG9mIGEgdmFsdWUgaW5cbiAgICogYW4gYXJyYXksIHRoZSBhcnJheSBpcyBzZWFyY2hlZCBmb3IgYW4gZWxlbWVudCB0aGF0J3Mgc3RyaWN0bHkgZXF1YWwgdG8gdGhlXG4gICAqIGdpdmVuIHZhbHVlLiBXaGVuIGFzc2VydGluZyBhIHN1YnNldCBvZiBwcm9wZXJ0aWVzIGluIGFuIG9iamVjdCwgdGhlIG9iamVjdFxuICAgKiBpcyBzZWFyY2hlZCBmb3IgdGhlIGdpdmVuIHByb3BlcnR5IGtleXMsIGNoZWNraW5nIHRoYXQgZWFjaCBvbmUgaXMgcHJlc2VudFxuICAgKiBhbmQgc3RyaWN0bHkgZXF1YWwgdG8gdGhlIGdpdmVuIHByb3BlcnR5IHZhbHVlLiBGb3IgaW5zdGFuY2U6XG4gICAqXG4gICAqICAgICB2YXIgb2JqMSA9IHthOiAxfVxuICAgKiAgICAgICAsIG9iajIgPSB7YjogMn07XG4gICAqICAgICBhc3NlcnQuaW5jbHVkZShbb2JqMSwgb2JqMl0sIG9iajEpO1xuICAgKiAgICAgYXNzZXJ0LmluY2x1ZGUoe2Zvbzogb2JqMSwgYmFyOiBvYmoyfSwge2Zvbzogb2JqMX0pO1xuICAgKiAgICAgYXNzZXJ0LmluY2x1ZGUoe2Zvbzogb2JqMSwgYmFyOiBvYmoyfSwge2Zvbzogb2JqMSwgYmFyOiBvYmoyfSk7XG4gICAqXG4gICAqIEBuYW1lIGluY2x1ZGVcbiAgICogQHBhcmFtIHtBcnJheXxTdHJpbmd9IGhheXN0YWNrXG4gICAqIEBwYXJhbSB7TWl4ZWR9IG5lZWRsZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaW5jbHVkZSA9IGZ1bmN0aW9uIChleHAsIGluYywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0LmluY2x1ZGUsIHRydWUpLmluY2x1ZGUoaW5jKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3RJbmNsdWRlKGhheXN0YWNrLCBuZWVkbGUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBoYXlzdGFja2AgZG9lcyBub3QgaW5jbHVkZSBgbmVlZGxlYC4gQ2FuIGJlIHVzZWQgdG8gYXNzZXJ0XG4gICAqIHRoZSBhYnNlbmNlIG9mIGEgdmFsdWUgaW4gYW4gYXJyYXksIGEgc3Vic3RyaW5nIGluIGEgc3RyaW5nLCBvciBhIHN1YnNldCBvZlxuICAgKiBwcm9wZXJ0aWVzIGluIGFuIG9iamVjdC5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RJbmNsdWRlKFsxLDIsM10sIDQsIFwiYXJyYXkgZG9lc24ndCBjb250YWluIHZhbHVlXCIpO1xuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGUoJ2Zvb2JhcicsICdiYXonLCBcInN0cmluZyBkb2Vzbid0IGNvbnRhaW4gc3Vic3RyaW5nXCIpO1xuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGUoeyBmb286ICdiYXInLCBoZWxsbzogJ3VuaXZlcnNlJyB9LCB7IGZvbzogJ2JheicgfSwgJ29iamVjdCBkb2Vzbid0IGNvbnRhaW4gcHJvcGVydHknKTtcbiAgICpcbiAgICogU3RyaWN0IGVxdWFsaXR5ICg9PT0pIGlzIHVzZWQuIFdoZW4gYXNzZXJ0aW5nIHRoZSBhYnNlbmNlIG9mIGEgdmFsdWUgaW4gYW5cbiAgICogYXJyYXksIHRoZSBhcnJheSBpcyBzZWFyY2hlZCB0byBjb25maXJtIHRoZSBhYnNlbmNlIG9mIGFuIGVsZW1lbnQgdGhhdCdzXG4gICAqIHN0cmljdGx5IGVxdWFsIHRvIHRoZSBnaXZlbiB2YWx1ZS4gV2hlbiBhc3NlcnRpbmcgYSBzdWJzZXQgb2YgcHJvcGVydGllcyBpblxuICAgKiBhbiBvYmplY3QsIHRoZSBvYmplY3QgaXMgc2VhcmNoZWQgdG8gY29uZmlybSB0aGF0IGF0IGxlYXN0IG9uZSBvZiB0aGUgZ2l2ZW5cbiAgICogcHJvcGVydHkga2V5cyBpcyBlaXRoZXIgbm90IHByZXNlbnQgb3Igbm90IHN0cmljdGx5IGVxdWFsIHRvIHRoZSBnaXZlblxuICAgKiBwcm9wZXJ0eSB2YWx1ZS4gRm9yIGluc3RhbmNlOlxuICAgKlxuICAgKiAgICAgdmFyIG9iajEgPSB7YTogMX1cbiAgICogICAgICAgLCBvYmoyID0ge2I6IDJ9O1xuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGUoW29iajEsIG9iajJdLCB7YTogMX0pO1xuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGUoe2Zvbzogb2JqMSwgYmFyOiBvYmoyfSwge2Zvbzoge2E6IDF9fSk7XG4gICAqICAgICBhc3NlcnQubm90SW5jbHVkZSh7Zm9vOiBvYmoxLCBiYXI6IG9iajJ9LCB7Zm9vOiBvYmoxLCBiYXI6IHtiOiAyfX0pO1xuICAgKlxuICAgKiBAbmFtZSBub3RJbmNsdWRlXG4gICAqIEBwYXJhbSB7QXJyYXl8U3RyaW5nfSBoYXlzdGFja1xuICAgKiBAcGFyYW0ge01peGVkfSBuZWVkbGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdEluY2x1ZGUgPSBmdW5jdGlvbiAoZXhwLCBpbmMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3RJbmNsdWRlLCB0cnVlKS5ub3QuaW5jbHVkZShpbmMpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmRlZXBJbmNsdWRlKGhheXN0YWNrLCBuZWVkbGUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBoYXlzdGFja2AgaW5jbHVkZXMgYG5lZWRsZWAuIENhbiBiZSB1c2VkIHRvIGFzc2VydCB0aGVcbiAgICogaW5jbHVzaW9uIG9mIGEgdmFsdWUgaW4gYW4gYXJyYXkgb3IgYSBzdWJzZXQgb2YgcHJvcGVydGllcyBpbiBhbiBvYmplY3QuXG4gICAqIERlZXAgZXF1YWxpdHkgaXMgdXNlZC5cbiAgICpcbiAgICogICAgIHZhciBvYmoxID0ge2E6IDF9XG4gICAqICAgICAgICwgb2JqMiA9IHtiOiAyfTtcbiAgICogICAgIGFzc2VydC5kZWVwSW5jbHVkZShbb2JqMSwgb2JqMl0sIHthOiAxfSk7XG4gICAqICAgICBhc3NlcnQuZGVlcEluY2x1ZGUoe2Zvbzogb2JqMSwgYmFyOiBvYmoyfSwge2Zvbzoge2E6IDF9fSk7XG4gICAqICAgICBhc3NlcnQuZGVlcEluY2x1ZGUoe2Zvbzogb2JqMSwgYmFyOiBvYmoyfSwge2Zvbzoge2E6IDF9LCBiYXI6IHtiOiAyfX0pO1xuICAgKlxuICAgKiBAbmFtZSBkZWVwSW5jbHVkZVxuICAgKiBAcGFyYW0ge0FycmF5fFN0cmluZ30gaGF5c3RhY2tcbiAgICogQHBhcmFtIHtNaXhlZH0gbmVlZGxlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kZWVwSW5jbHVkZSA9IGZ1bmN0aW9uIChleHAsIGluYywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0LmRlZXBJbmNsdWRlLCB0cnVlKS5kZWVwLmluY2x1ZGUoaW5jKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3REZWVwSW5jbHVkZShoYXlzdGFjaywgbmVlZGxlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgaGF5c3RhY2tgIGRvZXMgbm90IGluY2x1ZGUgYG5lZWRsZWAuIENhbiBiZSB1c2VkIHRvIGFzc2VydFxuICAgKiB0aGUgYWJzZW5jZSBvZiBhIHZhbHVlIGluIGFuIGFycmF5IG9yIGEgc3Vic2V0IG9mIHByb3BlcnRpZXMgaW4gYW4gb2JqZWN0LlxuICAgKiBEZWVwIGVxdWFsaXR5IGlzIHVzZWQuXG4gICAqXG4gICAqICAgICB2YXIgb2JqMSA9IHthOiAxfVxuICAgKiAgICAgICAsIG9iajIgPSB7YjogMn07XG4gICAqICAgICBhc3NlcnQubm90RGVlcEluY2x1ZGUoW29iajEsIG9iajJdLCB7YTogOX0pO1xuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBJbmNsdWRlKHtmb286IG9iajEsIGJhcjogb2JqMn0sIHtmb286IHthOiA5fX0pO1xuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBJbmNsdWRlKHtmb286IG9iajEsIGJhcjogb2JqMn0sIHtmb286IHthOiAxfSwgYmFyOiB7YjogOX19KTtcbiAgICpcbiAgICogQG5hbWUgbm90RGVlcEluY2x1ZGVcbiAgICogQHBhcmFtIHtBcnJheXxTdHJpbmd9IGhheXN0YWNrXG4gICAqIEBwYXJhbSB7TWl4ZWR9IG5lZWRsZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90RGVlcEluY2x1ZGUgPSBmdW5jdGlvbiAoZXhwLCBpbmMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3REZWVwSW5jbHVkZSwgdHJ1ZSkubm90LmRlZXAuaW5jbHVkZShpbmMpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5lc3RlZEluY2x1ZGUoaGF5c3RhY2ssIG5lZWRsZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgJ2hheXN0YWNrJyBpbmNsdWRlcyAnbmVlZGxlJy5cbiAgICogQ2FuIGJlIHVzZWQgdG8gYXNzZXJ0IHRoZSBpbmNsdXNpb24gb2YgYSBzdWJzZXQgb2YgcHJvcGVydGllcyBpbiBhblxuICAgKiBvYmplY3QuXG4gICAqIEVuYWJsZXMgdGhlIHVzZSBvZiBkb3QtIGFuZCBicmFja2V0LW5vdGF0aW9uIGZvciByZWZlcmVuY2luZyBuZXN0ZWRcbiAgICogcHJvcGVydGllcy5cbiAgICogJ1tdJyBhbmQgJy4nIGluIHByb3BlcnR5IG5hbWVzIGNhbiBiZSBlc2NhcGVkIHVzaW5nIGRvdWJsZSBiYWNrc2xhc2hlcy5cbiAgICpcbiAgICogICAgIGFzc2VydC5uZXN0ZWRJbmNsdWRlKHsnLmEnOiB7J2InOiAneCd9fSwgeydcXFxcLmEuW2JdJzogJ3gnfSk7XG4gICAqICAgICBhc3NlcnQubmVzdGVkSW5jbHVkZSh7J2EnOiB7J1tiXSc6ICd4J319LCB7J2EuXFxcXFtiXFxcXF0nOiAneCd9KTtcbiAgICpcbiAgICogQG5hbWUgbmVzdGVkSW5jbHVkZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaGF5c3RhY2tcbiAgICogQHBhcmFtIHtPYmplY3R9IG5lZWRsZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubmVzdGVkSW5jbHVkZSA9IGZ1bmN0aW9uIChleHAsIGluYywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5lc3RlZEluY2x1ZGUsIHRydWUpLm5lc3RlZC5pbmNsdWRlKGluYyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90TmVzdGVkSW5jbHVkZShoYXlzdGFjaywgbmVlZGxlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCAnaGF5c3RhY2snIGRvZXMgbm90IGluY2x1ZGUgJ25lZWRsZScuXG4gICAqIENhbiBiZSB1c2VkIHRvIGFzc2VydCB0aGUgYWJzZW5jZSBvZiBhIHN1YnNldCBvZiBwcm9wZXJ0aWVzIGluIGFuXG4gICAqIG9iamVjdC5cbiAgICogRW5hYmxlcyB0aGUgdXNlIG9mIGRvdC0gYW5kIGJyYWNrZXQtbm90YXRpb24gZm9yIHJlZmVyZW5jaW5nIG5lc3RlZFxuICAgKiBwcm9wZXJ0aWVzLlxuICAgKiAnW10nIGFuZCAnLicgaW4gcHJvcGVydHkgbmFtZXMgY2FuIGJlIGVzY2FwZWQgdXNpbmcgZG91YmxlIGJhY2tzbGFzaGVzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdE5lc3RlZEluY2x1ZGUoeycuYSc6IHsnYic6ICd4J319LCB7J1xcXFwuYS5iJzogJ3knfSk7XG4gICAqICAgICBhc3NlcnQubm90TmVzdGVkSW5jbHVkZSh7J2EnOiB7J1tiXSc6ICd4J319LCB7J2EuXFxcXFtiXFxcXF0nOiAneSd9KTtcbiAgICpcbiAgICogQG5hbWUgbm90TmVzdGVkSW5jbHVkZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaGF5c3RhY2tcbiAgICogQHBhcmFtIHtPYmplY3R9IG5lZWRsZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90TmVzdGVkSW5jbHVkZSA9IGZ1bmN0aW9uIChleHAsIGluYywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5vdE5lc3RlZEluY2x1ZGUsIHRydWUpXG4gICAgICAubm90Lm5lc3RlZC5pbmNsdWRlKGluYyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuZGVlcE5lc3RlZEluY2x1ZGUoaGF5c3RhY2ssIG5lZWRsZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgJ2hheXN0YWNrJyBpbmNsdWRlcyAnbmVlZGxlJy5cbiAgICogQ2FuIGJlIHVzZWQgdG8gYXNzZXJ0IHRoZSBpbmNsdXNpb24gb2YgYSBzdWJzZXQgb2YgcHJvcGVydGllcyBpbiBhblxuICAgKiBvYmplY3Qgd2hpbGUgY2hlY2tpbmcgZm9yIGRlZXAgZXF1YWxpdHkuXG4gICAqIEVuYWJsZXMgdGhlIHVzZSBvZiBkb3QtIGFuZCBicmFja2V0LW5vdGF0aW9uIGZvciByZWZlcmVuY2luZyBuZXN0ZWRcbiAgICogcHJvcGVydGllcy5cbiAgICogJ1tdJyBhbmQgJy4nIGluIHByb3BlcnR5IG5hbWVzIGNhbiBiZSBlc2NhcGVkIHVzaW5nIGRvdWJsZSBiYWNrc2xhc2hlcy5cbiAgICpcbiAgICogICAgIGFzc2VydC5kZWVwTmVzdGVkSW5jbHVkZSh7YToge2I6IFt7eDogMX1dfX0sIHsnYS5iWzBdJzoge3g6IDF9fSk7XG4gICAqICAgICBhc3NlcnQuZGVlcE5lc3RlZEluY2x1ZGUoeycuYSc6IHsnW2JdJzoge3g6IDF9fX0sIHsnXFxcXC5hLlxcXFxbYlxcXFxdJzoge3g6IDF9fSk7XG4gICAqXG4gICAqIEBuYW1lIGRlZXBOZXN0ZWRJbmNsdWRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBoYXlzdGFja1xuICAgKiBAcGFyYW0ge09iamVjdH0gbmVlZGxlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kZWVwTmVzdGVkSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQuZGVlcE5lc3RlZEluY2x1ZGUsIHRydWUpXG4gICAgICAuZGVlcC5uZXN0ZWQuaW5jbHVkZShpbmMpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdERlZXBOZXN0ZWRJbmNsdWRlKGhheXN0YWNrLCBuZWVkbGUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0ICdoYXlzdGFjaycgZG9lcyBub3QgaW5jbHVkZSAnbmVlZGxlJy5cbiAgICogQ2FuIGJlIHVzZWQgdG8gYXNzZXJ0IHRoZSBhYnNlbmNlIG9mIGEgc3Vic2V0IG9mIHByb3BlcnRpZXMgaW4gYW5cbiAgICogb2JqZWN0IHdoaWxlIGNoZWNraW5nIGZvciBkZWVwIGVxdWFsaXR5LlxuICAgKiBFbmFibGVzIHRoZSB1c2Ugb2YgZG90LSBhbmQgYnJhY2tldC1ub3RhdGlvbiBmb3IgcmVmZXJlbmNpbmcgbmVzdGVkXG4gICAqIHByb3BlcnRpZXMuXG4gICAqICdbXScgYW5kICcuJyBpbiBwcm9wZXJ0eSBuYW1lcyBjYW4gYmUgZXNjYXBlZCB1c2luZyBkb3VibGUgYmFja3NsYXNoZXMuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90RGVlcE5lc3RlZEluY2x1ZGUoe2E6IHtiOiBbe3g6IDF9XX19LCB7J2EuYlswXSc6IHt5OiAxfX0pXG4gICAqICAgICBhc3NlcnQubm90RGVlcE5lc3RlZEluY2x1ZGUoeycuYSc6IHsnW2JdJzoge3g6IDF9fX0sIHsnXFxcXC5hLlxcXFxbYlxcXFxdJzoge3k6IDJ9fSk7XG4gICAqXG4gICAqIEBuYW1lIG5vdERlZXBOZXN0ZWRJbmNsdWRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBoYXlzdGFja1xuICAgKiBAcGFyYW0ge09iamVjdH0gbmVlZGxlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3REZWVwTmVzdGVkSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90RGVlcE5lc3RlZEluY2x1ZGUsIHRydWUpXG4gICAgICAubm90LmRlZXAubmVzdGVkLmluY2x1ZGUoaW5jKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5vd25JbmNsdWRlKGhheXN0YWNrLCBuZWVkbGUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0ICdoYXlzdGFjaycgaW5jbHVkZXMgJ25lZWRsZScuXG4gICAqIENhbiBiZSB1c2VkIHRvIGFzc2VydCB0aGUgaW5jbHVzaW9uIG9mIGEgc3Vic2V0IG9mIHByb3BlcnRpZXMgaW4gYW5cbiAgICogb2JqZWN0IHdoaWxlIGlnbm9yaW5nIGluaGVyaXRlZCBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm93bkluY2x1ZGUoeyBhOiAxIH0sIHsgYTogMSB9KTtcbiAgICpcbiAgICogQG5hbWUgb3duSW5jbHVkZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaGF5c3RhY2tcbiAgICogQHBhcmFtIHtPYmplY3R9IG5lZWRsZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQub3duSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQub3duSW5jbHVkZSwgdHJ1ZSkub3duLmluY2x1ZGUoaW5jKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3RPd25JbmNsdWRlKGhheXN0YWNrLCBuZWVkbGUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0ICdoYXlzdGFjaycgaW5jbHVkZXMgJ25lZWRsZScuXG4gICAqIENhbiBiZSB1c2VkIHRvIGFzc2VydCB0aGUgYWJzZW5jZSBvZiBhIHN1YnNldCBvZiBwcm9wZXJ0aWVzIGluIGFuXG4gICAqIG9iamVjdCB3aGlsZSBpZ25vcmluZyBpbmhlcml0ZWQgcHJvcGVydGllcy5cbiAgICpcbiAgICogICAgIE9iamVjdC5wcm90b3R5cGUuYiA9IDI7XG4gICAqXG4gICAqICAgICBhc3NlcnQubm90T3duSW5jbHVkZSh7IGE6IDEgfSwgeyBiOiAyIH0pO1xuICAgKlxuICAgKiBAbmFtZSBub3RPd25JbmNsdWRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBoYXlzdGFja1xuICAgKiBAcGFyYW0ge09iamVjdH0gbmVlZGxlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RPd25JbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3RPd25JbmNsdWRlLCB0cnVlKS5ub3Qub3duLmluY2x1ZGUoaW5jKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5kZWVwT3duSW5jbHVkZShoYXlzdGFjaywgbmVlZGxlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCAnaGF5c3RhY2snIGluY2x1ZGVzICduZWVkbGUnLlxuICAgKiBDYW4gYmUgdXNlZCB0byBhc3NlcnQgdGhlIGluY2x1c2lvbiBvZiBhIHN1YnNldCBvZiBwcm9wZXJ0aWVzIGluIGFuXG4gICAqIG9iamVjdCB3aGlsZSBpZ25vcmluZyBpbmhlcml0ZWQgcHJvcGVydGllcyBhbmQgY2hlY2tpbmcgZm9yIGRlZXAgZXF1YWxpdHkuXG4gICAqXG4gICAqICAgICAgYXNzZXJ0LmRlZXBPd25JbmNsdWRlKHthOiB7YjogMn19LCB7YToge2I6IDJ9fSk7XG4gICAqXG4gICAqIEBuYW1lIGRlZXBPd25JbmNsdWRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBoYXlzdGFja1xuICAgKiBAcGFyYW0ge09iamVjdH0gbmVlZGxlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kZWVwT3duSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQuZGVlcE93bkluY2x1ZGUsIHRydWUpXG4gICAgICAuZGVlcC5vd24uaW5jbHVkZShpbmMpO1xuICB9O1xuXG4gICAvKipcbiAgICogIyMjIC5ub3REZWVwT3duSW5jbHVkZShoYXlzdGFjaywgbmVlZGxlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCAnaGF5c3RhY2snIGluY2x1ZGVzICduZWVkbGUnLlxuICAgKiBDYW4gYmUgdXNlZCB0byBhc3NlcnQgdGhlIGFic2VuY2Ugb2YgYSBzdWJzZXQgb2YgcHJvcGVydGllcyBpbiBhblxuICAgKiBvYmplY3Qgd2hpbGUgaWdub3JpbmcgaW5oZXJpdGVkIHByb3BlcnRpZXMgYW5kIGNoZWNraW5nIGZvciBkZWVwIGVxdWFsaXR5LlxuICAgKlxuICAgKiAgICAgIGFzc2VydC5ub3REZWVwT3duSW5jbHVkZSh7YToge2I6IDJ9fSwge2E6IHtjOiAzfX0pO1xuICAgKlxuICAgKiBAbmFtZSBub3REZWVwT3duSW5jbHVkZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaGF5c3RhY2tcbiAgICogQHBhcmFtIHtPYmplY3R9IG5lZWRsZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90RGVlcE93bkluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5vdERlZXBPd25JbmNsdWRlLCB0cnVlKVxuICAgICAgLm5vdC5kZWVwLm93bi5pbmNsdWRlKGluYyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubWF0Y2godmFsdWUsIHJlZ2V4cCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBtYXRjaGVzIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gYHJlZ2V4cGAuXG4gICAqXG4gICAqICAgICBhc3NlcnQubWF0Y2goJ2Zvb2JhcicsIC9eZm9vLywgJ3JlZ2V4cCBtYXRjaGVzJyk7XG4gICAqXG4gICAqIEBuYW1lIG1hdGNoXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7UmVnRXhwfSByZWdleHBcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm1hdGNoID0gZnVuY3Rpb24gKGV4cCwgcmUsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5tYXRjaCwgdHJ1ZSkudG8ubWF0Y2gocmUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdE1hdGNoKHZhbHVlLCByZWdleHAsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgZG9lcyBub3QgbWF0Y2ggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBgcmVnZXhwYC5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RNYXRjaCgnZm9vYmFyJywgL15mb28vLCAncmVnZXhwIGRvZXMgbm90IG1hdGNoJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdE1hdGNoXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7UmVnRXhwfSByZWdleHBcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdE1hdGNoID0gZnVuY3Rpb24gKGV4cCwgcmUsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3RNYXRjaCwgdHJ1ZSkudG8ubm90Lm1hdGNoKHJlKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5wcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBoYXMgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVkIGJ5XG4gICAqIGBwcm9wZXJ0eWAuXG4gICAqXG4gICAqICAgICBhc3NlcnQucHJvcGVydHkoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH19LCAndGVhJyk7XG4gICAqICAgICBhc3NlcnQucHJvcGVydHkoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH19LCAndG9TdHJpbmcnKTtcbiAgICpcbiAgICogQG5hbWUgcHJvcGVydHlcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LnByb3BlcnR5ID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LnByb3BlcnR5LCB0cnVlKS50by5oYXZlLnByb3BlcnR5KHByb3ApO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdFByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGRvZXMgX25vdF8gaGF2ZSBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZWRcbiAgICogYnkgYHByb3BlcnR5YC5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RQcm9wZXJ0eSh7IHRlYTogeyBncmVlbjogJ21hdGNoYScgfX0sICdjb2ZmZWUnKTtcbiAgICpcbiAgICogQG5hbWUgbm90UHJvcGVydHlcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdFByb3BlcnR5ID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdFByb3BlcnR5LCB0cnVlKVxuICAgICAgLnRvLm5vdC5oYXZlLnByb3BlcnR5KHByb3ApO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLnByb3BlcnR5VmFsKG9iamVjdCwgcHJvcGVydHksIHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBoYXMgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVkIGJ5XG4gICAqIGBwcm9wZXJ0eWAgd2l0aCBhIHZhbHVlIGdpdmVuIGJ5IGB2YWx1ZWAuIFVzZXMgYSBzdHJpY3QgZXF1YWxpdHkgY2hlY2tcbiAgICogKD09PSkuXG4gICAqXG4gICAqICAgICBhc3NlcnQucHJvcGVydHlWYWwoeyB0ZWE6ICdpcyBnb29kJyB9LCAndGVhJywgJ2lzIGdvb2QnKTtcbiAgICpcbiAgICogQG5hbWUgcHJvcGVydHlWYWxcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LnByb3BlcnR5VmFsID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQucHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8uaGF2ZS5wcm9wZXJ0eShwcm9wLCB2YWwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdFByb3BlcnR5VmFsKG9iamVjdCwgcHJvcGVydHksIHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBkb2VzIF9ub3RfIGhhdmUgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVkXG4gICAqIGJ5IGBwcm9wZXJ0eWAgd2l0aCB2YWx1ZSBnaXZlbiBieSBgdmFsdWVgLiBVc2VzIGEgc3RyaWN0IGVxdWFsaXR5IGNoZWNrXG4gICAqICg9PT0pLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdFByb3BlcnR5VmFsKHsgdGVhOiAnaXMgZ29vZCcgfSwgJ3RlYScsICdpcyBiYWQnKTtcbiAgICogICAgIGFzc2VydC5ub3RQcm9wZXJ0eVZhbCh7IHRlYTogJ2lzIGdvb2QnIH0sICdjb2ZmZWUnLCAnaXMgZ29vZCcpO1xuICAgKlxuICAgKiBAbmFtZSBub3RQcm9wZXJ0eVZhbFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90UHJvcGVydHlWYWwgPSBmdW5jdGlvbiAob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3RQcm9wZXJ0eVZhbCwgdHJ1ZSlcbiAgICAgIC50by5ub3QuaGF2ZS5wcm9wZXJ0eShwcm9wLCB2YWwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmRlZXBQcm9wZXJ0eVZhbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGEgZGlyZWN0IG9yIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lZCBieVxuICAgKiBgcHJvcGVydHlgIHdpdGggYSB2YWx1ZSBnaXZlbiBieSBgdmFsdWVgLiBVc2VzIGEgZGVlcCBlcXVhbGl0eSBjaGVjay5cbiAgICpcbiAgICogICAgIGFzc2VydC5kZWVwUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH0gfSwgJ3RlYScsIHsgZ3JlZW46ICdtYXRjaGEnIH0pO1xuICAgKlxuICAgKiBAbmFtZSBkZWVwUHJvcGVydHlWYWxcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmRlZXBQcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uIChvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRlZXBQcm9wZXJ0eVZhbCwgdHJ1ZSlcbiAgICAgIC50by5oYXZlLmRlZXAucHJvcGVydHkocHJvcCwgdmFsKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3REZWVwUHJvcGVydHlWYWwob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGRvZXMgX25vdF8gaGF2ZSBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZWRcbiAgICogYnkgYHByb3BlcnR5YCB3aXRoIHZhbHVlIGdpdmVuIGJ5IGB2YWx1ZWAuIFVzZXMgYSBkZWVwIGVxdWFsaXR5IGNoZWNrLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBQcm9wZXJ0eVZhbCh7IHRlYTogeyBncmVlbjogJ21hdGNoYScgfSB9LCAndGVhJywgeyBibGFjazogJ21hdGNoYScgfSk7XG4gICAqICAgICBhc3NlcnQubm90RGVlcFByb3BlcnR5VmFsKHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9IH0sICd0ZWEnLCB7IGdyZWVuOiAnb29sb25nJyB9KTtcbiAgICogICAgIGFzc2VydC5ub3REZWVwUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH0gfSwgJ2NvZmZlZScsIHsgZ3JlZW46ICdtYXRjaGEnIH0pO1xuICAgKlxuICAgKiBAbmFtZSBub3REZWVwUHJvcGVydHlWYWxcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdERlZXBQcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uIChvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdERlZXBQcm9wZXJ0eVZhbCwgdHJ1ZSlcbiAgICAgIC50by5ub3QuaGF2ZS5kZWVwLnByb3BlcnR5KHByb3AsIHZhbCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAub3duUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGEgZGlyZWN0IHByb3BlcnR5IG5hbWVkIGJ5IGBwcm9wZXJ0eWAuIEluaGVyaXRlZFxuICAgKiBwcm9wZXJ0aWVzIGFyZW4ndCBjaGVja2VkLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm93blByb3BlcnR5KHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9fSwgJ3RlYScpO1xuICAgKlxuICAgKiBAbmFtZSBvd25Qcm9wZXJ0eVxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQub3duUHJvcGVydHkgPSBmdW5jdGlvbiAob2JqLCBwcm9wLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQub3duUHJvcGVydHksIHRydWUpXG4gICAgICAudG8uaGF2ZS5vd24ucHJvcGVydHkocHJvcCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90T3duUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgZG9lcyBfbm90XyBoYXZlIGEgZGlyZWN0IHByb3BlcnR5IG5hbWVkIGJ5XG4gICAqIGBwcm9wZXJ0eWAuIEluaGVyaXRlZCBwcm9wZXJ0aWVzIGFyZW4ndCBjaGVja2VkLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdE93blByb3BlcnR5KHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9fSwgJ2NvZmZlZScpO1xuICAgKiAgICAgYXNzZXJ0Lm5vdE93blByb3BlcnR5KHt9LCAndG9TdHJpbmcnKTtcbiAgICpcbiAgICogQG5hbWUgbm90T3duUHJvcGVydHlcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdE93blByb3BlcnR5ID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdE93blByb3BlcnR5LCB0cnVlKVxuICAgICAgLnRvLm5vdC5oYXZlLm93bi5wcm9wZXJ0eShwcm9wKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5vd25Qcm9wZXJ0eVZhbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGEgZGlyZWN0IHByb3BlcnR5IG5hbWVkIGJ5IGBwcm9wZXJ0eWAgYW5kIGEgdmFsdWVcbiAgICogZXF1YWwgdG8gdGhlIHByb3ZpZGVkIGB2YWx1ZWAuIFVzZXMgYSBzdHJpY3QgZXF1YWxpdHkgY2hlY2sgKD09PSkuXG4gICAqIEluaGVyaXRlZCBwcm9wZXJ0aWVzIGFyZW4ndCBjaGVja2VkLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm93blByb3BlcnR5VmFsKHsgY29mZmVlOiAnaXMgZ29vZCd9LCAnY29mZmVlJywgJ2lzIGdvb2QnKTtcbiAgICpcbiAgICogQG5hbWUgb3duUHJvcGVydHlWYWxcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm93blByb3BlcnR5VmFsID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgdmFsdWUsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5vd25Qcm9wZXJ0eVZhbCwgdHJ1ZSlcbiAgICAgIC50by5oYXZlLm93bi5wcm9wZXJ0eShwcm9wLCB2YWx1ZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90T3duUHJvcGVydHlWYWwob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGRvZXMgX25vdF8gaGF2ZSBhIGRpcmVjdCBwcm9wZXJ0eSBuYW1lZCBieSBgcHJvcGVydHlgXG4gICAqIHdpdGggYSB2YWx1ZSBlcXVhbCB0byB0aGUgcHJvdmlkZWQgYHZhbHVlYC4gVXNlcyBhIHN0cmljdCBlcXVhbGl0eSBjaGVja1xuICAgKiAoPT09KS4gSW5oZXJpdGVkIHByb3BlcnRpZXMgYXJlbid0IGNoZWNrZWQuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90T3duUHJvcGVydHlWYWwoeyB0ZWE6ICdpcyBiZXR0ZXInfSwgJ3RlYScsICdpcyB3b3JzZScpO1xuICAgKiAgICAgYXNzZXJ0Lm5vdE93blByb3BlcnR5VmFsKHt9LCAndG9TdHJpbmcnLCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKTtcbiAgICpcbiAgICogQG5hbWUgbm90T3duUHJvcGVydHlWYWxcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdE93blByb3BlcnR5VmFsID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgdmFsdWUsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3RPd25Qcm9wZXJ0eVZhbCwgdHJ1ZSlcbiAgICAgIC50by5ub3QuaGF2ZS5vd24ucHJvcGVydHkocHJvcCwgdmFsdWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmRlZXBPd25Qcm9wZXJ0eVZhbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGEgZGlyZWN0IHByb3BlcnR5IG5hbWVkIGJ5IGBwcm9wZXJ0eWAgYW5kIGEgdmFsdWVcbiAgICogZXF1YWwgdG8gdGhlIHByb3ZpZGVkIGB2YWx1ZWAuIFVzZXMgYSBkZWVwIGVxdWFsaXR5IGNoZWNrLiBJbmhlcml0ZWRcbiAgICogcHJvcGVydGllcyBhcmVuJ3QgY2hlY2tlZC5cbiAgICpcbiAgICogICAgIGFzc2VydC5kZWVwT3duUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH0gfSwgJ3RlYScsIHsgZ3JlZW46ICdtYXRjaGEnIH0pO1xuICAgKlxuICAgKiBAbmFtZSBkZWVwT3duUHJvcGVydHlWYWxcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmRlZXBPd25Qcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uIChvYmosIHByb3AsIHZhbHVlLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuZGVlcE93blByb3BlcnR5VmFsLCB0cnVlKVxuICAgICAgLnRvLmhhdmUuZGVlcC5vd24ucHJvcGVydHkocHJvcCwgdmFsdWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdERlZXBPd25Qcm9wZXJ0eVZhbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgZG9lcyBfbm90XyBoYXZlIGEgZGlyZWN0IHByb3BlcnR5IG5hbWVkIGJ5IGBwcm9wZXJ0eWBcbiAgICogd2l0aCBhIHZhbHVlIGVxdWFsIHRvIHRoZSBwcm92aWRlZCBgdmFsdWVgLiBVc2VzIGEgZGVlcCBlcXVhbGl0eSBjaGVjay5cbiAgICogSW5oZXJpdGVkIHByb3BlcnRpZXMgYXJlbid0IGNoZWNrZWQuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90RGVlcE93blByb3BlcnR5VmFsKHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9IH0sICd0ZWEnLCB7IGJsYWNrOiAnbWF0Y2hhJyB9KTtcbiAgICogICAgIGFzc2VydC5ub3REZWVwT3duUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH0gfSwgJ3RlYScsIHsgZ3JlZW46ICdvb2xvbmcnIH0pO1xuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBPd25Qcm9wZXJ0eVZhbCh7IHRlYTogeyBncmVlbjogJ21hdGNoYScgfSB9LCAnY29mZmVlJywgeyBncmVlbjogJ21hdGNoYScgfSk7XG4gICAqICAgICBhc3NlcnQubm90RGVlcE93blByb3BlcnR5VmFsKHt9LCAndG9TdHJpbmcnLCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKTtcbiAgICpcbiAgICogQG5hbWUgbm90RGVlcE93blByb3BlcnR5VmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3REZWVwT3duUHJvcGVydHlWYWwgPSBmdW5jdGlvbiAob2JqLCBwcm9wLCB2YWx1ZSwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdERlZXBPd25Qcm9wZXJ0eVZhbCwgdHJ1ZSlcbiAgICAgIC50by5ub3QuaGF2ZS5kZWVwLm93bi5wcm9wZXJ0eShwcm9wLCB2YWx1ZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubmVzdGVkUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGEgZGlyZWN0IG9yIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lZCBieVxuICAgKiBgcHJvcGVydHlgLCB3aGljaCBjYW4gYmUgYSBzdHJpbmcgdXNpbmcgZG90LSBhbmQgYnJhY2tldC1ub3RhdGlvbiBmb3JcbiAgICogbmVzdGVkIHJlZmVyZW5jZS5cbiAgICpcbiAgICogICAgIGFzc2VydC5uZXN0ZWRQcm9wZXJ0eSh7IHRlYTogeyBncmVlbjogJ21hdGNoYScgfX0sICd0ZWEuZ3JlZW4nKTtcbiAgICpcbiAgICogQG5hbWUgbmVzdGVkUHJvcGVydHlcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5lc3RlZFByb3BlcnR5ID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5lc3RlZFByb3BlcnR5LCB0cnVlKVxuICAgICAgLnRvLmhhdmUubmVzdGVkLnByb3BlcnR5KHByb3ApO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdE5lc3RlZFByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGRvZXMgX25vdF8gaGF2ZSBhIHByb3BlcnR5IG5hbWVkIGJ5IGBwcm9wZXJ0eWAsIHdoaWNoXG4gICAqIGNhbiBiZSBhIHN0cmluZyB1c2luZyBkb3QtIGFuZCBicmFja2V0LW5vdGF0aW9uIGZvciBuZXN0ZWQgcmVmZXJlbmNlLiBUaGVcbiAgICogcHJvcGVydHkgY2Fubm90IGV4aXN0IG9uIHRoZSBvYmplY3Qgbm9yIGFueXdoZXJlIGluIGl0cyBwcm90b3R5cGUgY2hhaW4uXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90TmVzdGVkUHJvcGVydHkoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH19LCAndGVhLm9vbG9uZycpO1xuICAgKlxuICAgKiBAbmFtZSBub3ROZXN0ZWRQcm9wZXJ0eVxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90TmVzdGVkUHJvcGVydHkgPSBmdW5jdGlvbiAob2JqLCBwcm9wLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90TmVzdGVkUHJvcGVydHksIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUubmVzdGVkLnByb3BlcnR5KHByb3ApO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5lc3RlZFByb3BlcnR5VmFsKG9iamVjdCwgcHJvcGVydHksIHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBoYXMgYSBwcm9wZXJ0eSBuYW1lZCBieSBgcHJvcGVydHlgIHdpdGggdmFsdWUgZ2l2ZW5cbiAgICogYnkgYHZhbHVlYC4gYHByb3BlcnR5YCBjYW4gdXNlIGRvdC0gYW5kIGJyYWNrZXQtbm90YXRpb24gZm9yIG5lc3RlZFxuICAgKiByZWZlcmVuY2UuIFVzZXMgYSBzdHJpY3QgZXF1YWxpdHkgY2hlY2sgKD09PSkuXG4gICAqXG4gICAqICAgICBhc3NlcnQubmVzdGVkUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH19LCAndGVhLmdyZWVuJywgJ21hdGNoYScpO1xuICAgKlxuICAgKiBAbmFtZSBuZXN0ZWRQcm9wZXJ0eVZhbFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubmVzdGVkUHJvcGVydHlWYWwgPSBmdW5jdGlvbiAob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5uZXN0ZWRQcm9wZXJ0eVZhbCwgdHJ1ZSlcbiAgICAgIC50by5oYXZlLm5lc3RlZC5wcm9wZXJ0eShwcm9wLCB2YWwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdE5lc3RlZFByb3BlcnR5VmFsKG9iamVjdCwgcHJvcGVydHksIHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBkb2VzIF9ub3RfIGhhdmUgYSBwcm9wZXJ0eSBuYW1lZCBieSBgcHJvcGVydHlgIHdpdGhcbiAgICogdmFsdWUgZ2l2ZW4gYnkgYHZhbHVlYC4gYHByb3BlcnR5YCBjYW4gdXNlIGRvdC0gYW5kIGJyYWNrZXQtbm90YXRpb24gZm9yXG4gICAqIG5lc3RlZCByZWZlcmVuY2UuIFVzZXMgYSBzdHJpY3QgZXF1YWxpdHkgY2hlY2sgKD09PSkuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90TmVzdGVkUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH19LCAndGVhLmdyZWVuJywgJ2tvbmFjaGEnKTtcbiAgICogICAgIGFzc2VydC5ub3ROZXN0ZWRQcm9wZXJ0eVZhbCh7IHRlYTogeyBncmVlbjogJ21hdGNoYScgfX0sICdjb2ZmZWUuZ3JlZW4nLCAnbWF0Y2hhJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdE5lc3RlZFByb3BlcnR5VmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3ROZXN0ZWRQcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uIChvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdE5lc3RlZFByb3BlcnR5VmFsLCB0cnVlKVxuICAgICAgLnRvLm5vdC5oYXZlLm5lc3RlZC5wcm9wZXJ0eShwcm9wLCB2YWwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmRlZXBOZXN0ZWRQcm9wZXJ0eVZhbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGEgcHJvcGVydHkgbmFtZWQgYnkgYHByb3BlcnR5YCB3aXRoIGEgdmFsdWUgZ2l2ZW5cbiAgICogYnkgYHZhbHVlYC4gYHByb3BlcnR5YCBjYW4gdXNlIGRvdC0gYW5kIGJyYWNrZXQtbm90YXRpb24gZm9yIG5lc3RlZFxuICAgKiByZWZlcmVuY2UuIFVzZXMgYSBkZWVwIGVxdWFsaXR5IGNoZWNrLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmRlZXBOZXN0ZWRQcm9wZXJ0eVZhbCh7IHRlYTogeyBncmVlbjogeyBtYXRjaGE6ICd5dW0nIH0gfSB9LCAndGVhLmdyZWVuJywgeyBtYXRjaGE6ICd5dW0nIH0pO1xuICAgKlxuICAgKiBAbmFtZSBkZWVwTmVzdGVkUHJvcGVydHlWYWxcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmRlZXBOZXN0ZWRQcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uIChvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRlZXBOZXN0ZWRQcm9wZXJ0eVZhbCwgdHJ1ZSlcbiAgICAgIC50by5oYXZlLmRlZXAubmVzdGVkLnByb3BlcnR5KHByb3AsIHZhbCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90RGVlcE5lc3RlZFByb3BlcnR5VmFsKG9iamVjdCwgcHJvcGVydHksIHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBkb2VzIF9ub3RfIGhhdmUgYSBwcm9wZXJ0eSBuYW1lZCBieSBgcHJvcGVydHlgIHdpdGhcbiAgICogdmFsdWUgZ2l2ZW4gYnkgYHZhbHVlYC4gYHByb3BlcnR5YCBjYW4gdXNlIGRvdC0gYW5kIGJyYWNrZXQtbm90YXRpb24gZm9yXG4gICAqIG5lc3RlZCByZWZlcmVuY2UuIFVzZXMgYSBkZWVwIGVxdWFsaXR5IGNoZWNrLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBOZXN0ZWRQcm9wZXJ0eVZhbCh7IHRlYTogeyBncmVlbjogeyBtYXRjaGE6ICd5dW0nIH0gfSB9LCAndGVhLmdyZWVuJywgeyBvb2xvbmc6ICd5dW0nIH0pO1xuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBOZXN0ZWRQcm9wZXJ0eVZhbCh7IHRlYTogeyBncmVlbjogeyBtYXRjaGE6ICd5dW0nIH0gfSB9LCAndGVhLmdyZWVuJywgeyBtYXRjaGE6ICd5dWNrJyB9KTtcbiAgICogICAgIGFzc2VydC5ub3REZWVwTmVzdGVkUHJvcGVydHlWYWwoeyB0ZWE6IHsgZ3JlZW46IHsgbWF0Y2hhOiAneXVtJyB9IH0gfSwgJ3RlYS5ibGFjaycsIHsgbWF0Y2hhOiAneXVtJyB9KTtcbiAgICpcbiAgICogQG5hbWUgbm90RGVlcE5lc3RlZFByb3BlcnR5VmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3REZWVwTmVzdGVkUHJvcGVydHlWYWwgPSBmdW5jdGlvbiAob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3REZWVwTmVzdGVkUHJvcGVydHlWYWwsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUuZGVlcC5uZXN0ZWQucHJvcGVydHkocHJvcCwgdmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmxlbmd0aE9mKG9iamVjdCwgbGVuZ3RoLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBoYXMgYSBgbGVuZ3RoYCBvciBgc2l6ZWAgd2l0aCB0aGUgZXhwZWN0ZWQgdmFsdWUuXG4gICAqXG4gICAqICAgICBhc3NlcnQubGVuZ3RoT2YoWzEsMiwzXSwgMywgJ2FycmF5IGhhcyBsZW5ndGggb2YgMycpO1xuICAgKiAgICAgYXNzZXJ0Lmxlbmd0aE9mKCdmb29iYXInLCA2LCAnc3RyaW5nIGhhcyBsZW5ndGggb2YgNicpO1xuICAgKiAgICAgYXNzZXJ0Lmxlbmd0aE9mKG5ldyBTZXQoWzEsMiwzXSksIDMsICdzZXQgaGFzIHNpemUgb2YgMycpO1xuICAgKiAgICAgYXNzZXJ0Lmxlbmd0aE9mKG5ldyBNYXAoW1snYScsMV0sWydiJywyXSxbJ2MnLDNdXSksIDMsICdtYXAgaGFzIHNpemUgb2YgMycpO1xuICAgKlxuICAgKiBAbmFtZSBsZW5ndGhPZlxuICAgKiBAcGFyYW0ge01peGVkfSBvYmplY3RcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGxlbmd0aFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubGVuZ3RoT2YgPSBmdW5jdGlvbiAoZXhwLCBsZW4sIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5sZW5ndGhPZiwgdHJ1ZSkudG8uaGF2ZS5sZW5ndGhPZihsZW4pO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmhhc0FueUtleXMob2JqZWN0LCBba2V5c10sIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhdCBsZWFzdCBvbmUgb2YgdGhlIGBrZXlzYCBwcm92aWRlZC5cbiAgICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQgb2YgYSBga2V5c2AgYXJyYXkgYW5kIGl0cyBrZXlzXG4gICAqIHdpbGwgYmUgdXNlZCBhcyB0aGUgZXhwZWN0ZWQgc2V0IG9mIGtleXMuXG4gICAqXG4gICAqICAgICBhc3NlcnQuaGFzQW55S2V5cyh7Zm9vOiAxLCBiYXI6IDIsIGJhejogM30sIFsnZm9vJywgJ2lEb250RXhpc3QnLCAnYmF6J10pO1xuICAgKiAgICAgYXNzZXJ0Lmhhc0FueUtleXMoe2ZvbzogMSwgYmFyOiAyLCBiYXo6IDN9LCB7Zm9vOiAzMCwgaURvbnRFeGlzdDogOTksIGJhejogMTMzN30pO1xuICAgKiAgICAgYXNzZXJ0Lmhhc0FueUtleXMobmV3IE1hcChbW3tmb286IDF9LCAnYmFyJ10sIFsna2V5JywgJ3ZhbHVlJ11dKSwgW3tmb286IDF9LCAna2V5J10pO1xuICAgKiAgICAgYXNzZXJ0Lmhhc0FueUtleXMobmV3IFNldChbe2ZvbzogJ2Jhcid9LCAnYW5vdGhlcktleSddKSwgW3tmb286ICdiYXInfSwgJ2Fub3RoZXJLZXknXSk7XG4gICAqXG4gICAqIEBuYW1lIGhhc0FueUtleXNcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBrZXlzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5oYXNBbnlLZXlzID0gZnVuY3Rpb24gKG9iaiwga2V5cywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lmhhc0FueUtleXMsIHRydWUpLnRvLmhhdmUuYW55LmtleXMoa2V5cyk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5oYXNBbGxLZXlzKG9iamVjdCwgW2tleXNdLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBoYXMgYWxsIGFuZCBvbmx5IGFsbCBvZiB0aGUgYGtleXNgIHByb3ZpZGVkLlxuICAgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhIHNpbmdsZSBvYmplY3QgaW5zdGVhZCBvZiBhIGBrZXlzYCBhcnJheSBhbmQgaXRzIGtleXNcbiAgICogd2lsbCBiZSB1c2VkIGFzIHRoZSBleHBlY3RlZCBzZXQgb2Yga2V5cy5cbiAgICpcbiAgICogICAgIGFzc2VydC5oYXNBbGxLZXlzKHtmb286IDEsIGJhcjogMiwgYmF6OiAzfSwgWydmb28nLCAnYmFyJywgJ2JheiddKTtcbiAgICogICAgIGFzc2VydC5oYXNBbGxLZXlzKHtmb286IDEsIGJhcjogMiwgYmF6OiAzfSwge2ZvbzogMzAsIGJhcjogOTksIGJhejogMTMzN10pO1xuICAgKiAgICAgYXNzZXJ0Lmhhc0FsbEtleXMobmV3IE1hcChbW3tmb286IDF9LCAnYmFyJ10sIFsna2V5JywgJ3ZhbHVlJ11dKSwgW3tmb286IDF9LCAna2V5J10pO1xuICAgKiAgICAgYXNzZXJ0Lmhhc0FsbEtleXMobmV3IFNldChbe2ZvbzogJ2Jhcid9LCAnYW5vdGhlcktleSddLCBbe2ZvbzogJ2Jhcid9LCAnYW5vdGhlcktleSddKTtcbiAgICpcbiAgICogQG5hbWUgaGFzQWxsS2V5c1xuICAgKiBAcGFyYW0ge01peGVkfSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmdbXX0ga2V5c1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaGFzQWxsS2V5cyA9IGZ1bmN0aW9uIChvYmosIGtleXMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5oYXNBbGxLZXlzLCB0cnVlKS50by5oYXZlLmFsbC5rZXlzKGtleXMpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAuY29udGFpbnNBbGxLZXlzKG9iamVjdCwgW2tleXNdLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBoYXMgYWxsIG9mIHRoZSBga2V5c2AgcHJvdmlkZWQgYnV0IG1heSBoYXZlIG1vcmUga2V5cyBub3QgbGlzdGVkLlxuICAgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhIHNpbmdsZSBvYmplY3QgaW5zdGVhZCBvZiBhIGBrZXlzYCBhcnJheSBhbmQgaXRzIGtleXNcbiAgICogd2lsbCBiZSB1c2VkIGFzIHRoZSBleHBlY3RlZCBzZXQgb2Yga2V5cy5cbiAgICpcbiAgICogICAgIGFzc2VydC5jb250YWluc0FsbEtleXMoe2ZvbzogMSwgYmFyOiAyLCBiYXo6IDN9LCBbJ2ZvbycsICdiYXonXSk7XG4gICAqICAgICBhc3NlcnQuY29udGFpbnNBbGxLZXlzKHtmb286IDEsIGJhcjogMiwgYmF6OiAzfSwgWydmb28nLCAnYmFyJywgJ2JheiddKTtcbiAgICogICAgIGFzc2VydC5jb250YWluc0FsbEtleXMoe2ZvbzogMSwgYmFyOiAyLCBiYXo6IDN9LCB7Zm9vOiAzMCwgYmF6OiAxMzM3fSk7XG4gICAqICAgICBhc3NlcnQuY29udGFpbnNBbGxLZXlzKHtmb286IDEsIGJhcjogMiwgYmF6OiAzfSwge2ZvbzogMzAsIGJhcjogOTksIGJhejogMTMzN30pO1xuICAgKiAgICAgYXNzZXJ0LmNvbnRhaW5zQWxsS2V5cyhuZXcgTWFwKFtbe2ZvbzogMX0sICdiYXInXSwgWydrZXknLCAndmFsdWUnXV0pLCBbe2ZvbzogMX1dKTtcbiAgICogICAgIGFzc2VydC5jb250YWluc0FsbEtleXMobmV3IE1hcChbW3tmb286IDF9LCAnYmFyJ10sIFsna2V5JywgJ3ZhbHVlJ11dKSwgW3tmb286IDF9LCAna2V5J10pO1xuICAgKiAgICAgYXNzZXJ0LmNvbnRhaW5zQWxsS2V5cyhuZXcgU2V0KFt7Zm9vOiAnYmFyJ30sICdhbm90aGVyS2V5J10sIFt7Zm9vOiAnYmFyJ31dKTtcbiAgICogICAgIGFzc2VydC5jb250YWluc0FsbEtleXMobmV3IFNldChbe2ZvbzogJ2Jhcid9LCAnYW5vdGhlcktleSddLCBbe2ZvbzogJ2Jhcid9LCAnYW5vdGhlcktleSddKTtcbiAgICpcbiAgICogQG5hbWUgY29udGFpbnNBbGxLZXlzXG4gICAqIEBwYXJhbSB7TWl4ZWR9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ1tdfSBrZXlzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5jb250YWluc0FsbEtleXMgPSBmdW5jdGlvbiAob2JqLCBrZXlzLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuY29udGFpbnNBbGxLZXlzLCB0cnVlKVxuICAgICAgLnRvLmNvbnRhaW4uYWxsLmtleXMoa2V5cyk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5kb2VzTm90SGF2ZUFueUtleXMob2JqZWN0LCBba2V5c10sIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBub25lIG9mIHRoZSBga2V5c2AgcHJvdmlkZWQuXG4gICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIG9mIGEgYGtleXNgIGFycmF5IGFuZCBpdHMga2V5c1xuICAgKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGV4cGVjdGVkIHNldCBvZiBrZXlzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RIYXZlQW55S2V5cyh7Zm9vOiAxLCBiYXI6IDIsIGJhejogM30sIFsnb25lJywgJ3R3bycsICdleGFtcGxlJ10pO1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RIYXZlQW55S2V5cyh7Zm9vOiAxLCBiYXI6IDIsIGJhejogM30sIHtvbmU6IDEsIHR3bzogMiwgZXhhbXBsZTogJ2Zvbyd9KTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90SGF2ZUFueUtleXMobmV3IE1hcChbW3tmb286IDF9LCAnYmFyJ10sIFsna2V5JywgJ3ZhbHVlJ11dKSwgW3tvbmU6ICd0d28nfSwgJ2V4YW1wbGUnXSk7XG4gICAqICAgICBhc3NlcnQuZG9lc05vdEhhdmVBbnlLZXlzKG5ldyBTZXQoW3tmb286ICdiYXInfSwgJ2Fub3RoZXJLZXknXSwgW3tvbmU6ICd0d28nfSwgJ2V4YW1wbGUnXSk7XG4gICAqXG4gICAqIEBuYW1lIGRvZXNOb3RIYXZlQW55S2V5c1xuICAgKiBAcGFyYW0ge01peGVkfSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmdbXX0ga2V5c1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZG9lc05vdEhhdmVBbnlLZXlzID0gZnVuY3Rpb24gKG9iaiwga2V5cywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRvZXNOb3RIYXZlQW55S2V5cywgdHJ1ZSlcbiAgICAgIC50by5ub3QuaGF2ZS5hbnkua2V5cyhrZXlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmRvZXNOb3RIYXZlQWxsS2V5cyhvYmplY3QsIFtrZXlzXSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgZG9lcyBub3QgaGF2ZSBhdCBsZWFzdCBvbmUgb2YgdGhlIGBrZXlzYCBwcm92aWRlZC5cbiAgICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQgb2YgYSBga2V5c2AgYXJyYXkgYW5kIGl0cyBrZXlzXG4gICAqIHdpbGwgYmUgdXNlZCBhcyB0aGUgZXhwZWN0ZWQgc2V0IG9mIGtleXMuXG4gICAqXG4gICAqICAgICBhc3NlcnQuZG9lc05vdEhhdmVBbGxLZXlzKHtmb286IDEsIGJhcjogMiwgYmF6OiAzfSwgWydvbmUnLCAndHdvJywgJ2V4YW1wbGUnXSk7XG4gICAqICAgICBhc3NlcnQuZG9lc05vdEhhdmVBbGxLZXlzKHtmb286IDEsIGJhcjogMiwgYmF6OiAzfSwge29uZTogMSwgdHdvOiAyLCBleGFtcGxlOiAnZm9vJ30pO1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RIYXZlQWxsS2V5cyhuZXcgTWFwKFtbe2ZvbzogMX0sICdiYXInXSwgWydrZXknLCAndmFsdWUnXV0pLCBbe29uZTogJ3R3byd9LCAnZXhhbXBsZSddKTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90SGF2ZUFsbEtleXMobmV3IFNldChbe2ZvbzogJ2Jhcid9LCAnYW5vdGhlcktleSddLCBbe29uZTogJ3R3byd9LCAnZXhhbXBsZSddKTtcbiAgICpcbiAgICogQG5hbWUgZG9lc05vdEhhdmVBbGxLZXlzXG4gICAqIEBwYXJhbSB7TWl4ZWR9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ1tdfSBrZXlzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kb2VzTm90SGF2ZUFsbEtleXMgPSBmdW5jdGlvbiAob2JqLCBrZXlzLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuZG9lc05vdEhhdmVBbGxLZXlzLCB0cnVlKVxuICAgICAgLnRvLm5vdC5oYXZlLmFsbC5rZXlzKGtleXMpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAuaGFzQW55RGVlcEtleXMob2JqZWN0LCBba2V5c10sIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhdCBsZWFzdCBvbmUgb2YgdGhlIGBrZXlzYCBwcm92aWRlZC5cbiAgICogU2luY2UgU2V0cyBhbmQgTWFwcyBjYW4gaGF2ZSBvYmplY3RzIGFzIGtleXMgeW91IGNhbiB1c2UgdGhpcyBhc3NlcnRpb24gdG8gcGVyZm9ybVxuICAgKiBhIGRlZXAgY29tcGFyaXNvbi5cbiAgICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQgb2YgYSBga2V5c2AgYXJyYXkgYW5kIGl0cyBrZXlzXG4gICAqIHdpbGwgYmUgdXNlZCBhcyB0aGUgZXhwZWN0ZWQgc2V0IG9mIGtleXMuXG4gICAqXG4gICAqICAgICBhc3NlcnQuaGFzQW55RGVlcEtleXMobmV3IE1hcChbW3tvbmU6ICdvbmUnfSwgJ3ZhbHVlT25lJ10sIFsxLCAyXV0pLCB7b25lOiAnb25lJ30pO1xuICAgKiAgICAgYXNzZXJ0Lmhhc0FueURlZXBLZXlzKG5ldyBNYXAoW1t7b25lOiAnb25lJ30sICd2YWx1ZU9uZSddLCBbMSwgMl1dKSwgW3tvbmU6ICdvbmUnfSwge3R3bzogJ3R3byd9XSk7XG4gICAqICAgICBhc3NlcnQuaGFzQW55RGVlcEtleXMobmV3IE1hcChbW3tvbmU6ICdvbmUnfSwgJ3ZhbHVlT25lJ10sIFt7dHdvOiAndHdvJ30sICd2YWx1ZVR3byddXSksIFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pO1xuICAgKiAgICAgYXNzZXJ0Lmhhc0FueURlZXBLZXlzKG5ldyBTZXQoW3tvbmU6ICdvbmUnfSwge3R3bzogJ3R3byd9XSksIHtvbmU6ICdvbmUnfSk7XG4gICAqICAgICBhc3NlcnQuaGFzQW55RGVlcEtleXMobmV3IFNldChbe29uZTogJ29uZSd9LCB7dHdvOiAndHdvJ31dKSwgW3tvbmU6ICdvbmUnfSwge3RocmVlOiAndGhyZWUnfV0pO1xuICAgKiAgICAgYXNzZXJ0Lmhhc0FueURlZXBLZXlzKG5ldyBTZXQoW3tvbmU6ICdvbmUnfSwge3R3bzogJ3R3byd9XSksIFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pO1xuICAgKlxuICAgKiBAbmFtZSBoYXNBbnlEZWVwS2V5c1xuICAgKiBAcGFyYW0ge01peGVkfSBvYmplY3RcbiAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGtleXNcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lmhhc0FueURlZXBLZXlzID0gZnVuY3Rpb24gKG9iaiwga2V5cywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lmhhc0FueURlZXBLZXlzLCB0cnVlKVxuICAgICAgLnRvLmhhdmUuYW55LmRlZXAua2V5cyhrZXlzKTtcbiAgfVxuXG4gLyoqXG4gICAqICMjIyAuaGFzQWxsRGVlcEtleXMob2JqZWN0LCBba2V5c10sIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhbGwgYW5kIG9ubHkgYWxsIG9mIHRoZSBga2V5c2AgcHJvdmlkZWQuXG4gICAqIFNpbmNlIFNldHMgYW5kIE1hcHMgY2FuIGhhdmUgb2JqZWN0cyBhcyBrZXlzIHlvdSBjYW4gdXNlIHRoaXMgYXNzZXJ0aW9uIHRvIHBlcmZvcm1cbiAgICogYSBkZWVwIGNvbXBhcmlzb24uXG4gICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIG9mIGEgYGtleXNgIGFycmF5IGFuZCBpdHMga2V5c1xuICAgKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGV4cGVjdGVkIHNldCBvZiBrZXlzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lmhhc0FsbERlZXBLZXlzKG5ldyBNYXAoW1t7b25lOiAnb25lJ30sICd2YWx1ZU9uZSddXSksIHtvbmU6ICdvbmUnfSk7XG4gICAqICAgICBhc3NlcnQuaGFzQWxsRGVlcEtleXMobmV3IE1hcChbW3tvbmU6ICdvbmUnfSwgJ3ZhbHVlT25lJ10sIFt7dHdvOiAndHdvJ30sICd2YWx1ZVR3byddXSksIFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pO1xuICAgKiAgICAgYXNzZXJ0Lmhhc0FsbERlZXBLZXlzKG5ldyBTZXQoW3tvbmU6ICdvbmUnfV0pLCB7b25lOiAnb25lJ30pO1xuICAgKiAgICAgYXNzZXJ0Lmhhc0FsbERlZXBLZXlzKG5ldyBTZXQoW3tvbmU6ICdvbmUnfSwge3R3bzogJ3R3byd9XSksIFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pO1xuICAgKlxuICAgKiBAbmFtZSBoYXNBbGxEZWVwS2V5c1xuICAgKiBAcGFyYW0ge01peGVkfSBvYmplY3RcbiAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGtleXNcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lmhhc0FsbERlZXBLZXlzID0gZnVuY3Rpb24gKG9iaiwga2V5cywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lmhhc0FsbERlZXBLZXlzLCB0cnVlKVxuICAgICAgLnRvLmhhdmUuYWxsLmRlZXAua2V5cyhrZXlzKTtcbiAgfVxuXG4gLyoqXG4gICAqICMjIyAuY29udGFpbnNBbGxEZWVwS2V5cyhvYmplY3QsIFtrZXlzXSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgY29udGFpbnMgYWxsIG9mIHRoZSBga2V5c2AgcHJvdmlkZWQuXG4gICAqIFNpbmNlIFNldHMgYW5kIE1hcHMgY2FuIGhhdmUgb2JqZWN0cyBhcyBrZXlzIHlvdSBjYW4gdXNlIHRoaXMgYXNzZXJ0aW9uIHRvIHBlcmZvcm1cbiAgICogYSBkZWVwIGNvbXBhcmlzb24uXG4gICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgc2luZ2xlIG9iamVjdCBpbnN0ZWFkIG9mIGEgYGtleXNgIGFycmF5IGFuZCBpdHMga2V5c1xuICAgKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGV4cGVjdGVkIHNldCBvZiBrZXlzLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmNvbnRhaW5zQWxsRGVlcEtleXMobmV3IE1hcChbW3tvbmU6ICdvbmUnfSwgJ3ZhbHVlT25lJ10sIFsxLCAyXV0pLCB7b25lOiAnb25lJ30pO1xuICAgKiAgICAgYXNzZXJ0LmNvbnRhaW5zQWxsRGVlcEtleXMobmV3IE1hcChbW3tvbmU6ICdvbmUnfSwgJ3ZhbHVlT25lJ10sIFt7dHdvOiAndHdvJ30sICd2YWx1ZVR3byddXSksIFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pO1xuICAgKiAgICAgYXNzZXJ0LmNvbnRhaW5zQWxsRGVlcEtleXMobmV3IFNldChbe29uZTogJ29uZSd9LCB7dHdvOiAndHdvJ31dKSwge29uZTogJ29uZSd9KTtcbiAgICogICAgIGFzc2VydC5jb250YWluc0FsbERlZXBLZXlzKG5ldyBTZXQoW3tvbmU6ICdvbmUnfSwge3R3bzogJ3R3byd9XSksIFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pO1xuICAgKlxuICAgKiBAbmFtZSBjb250YWluc0FsbERlZXBLZXlzXG4gICAqIEBwYXJhbSB7TWl4ZWR9IG9iamVjdFxuICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0ga2V5c1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuY29udGFpbnNBbGxEZWVwS2V5cyA9IGZ1bmN0aW9uIChvYmosIGtleXMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5jb250YWluc0FsbERlZXBLZXlzLCB0cnVlKVxuICAgICAgLnRvLmNvbnRhaW4uYWxsLmRlZXAua2V5cyhrZXlzKTtcbiAgfVxuXG4gLyoqXG4gICAqICMjIyAuZG9lc05vdEhhdmVBbnlEZWVwS2V5cyhvYmplY3QsIFtrZXlzXSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIG5vbmUgb2YgdGhlIGBrZXlzYCBwcm92aWRlZC5cbiAgICogU2luY2UgU2V0cyBhbmQgTWFwcyBjYW4gaGF2ZSBvYmplY3RzIGFzIGtleXMgeW91IGNhbiB1c2UgdGhpcyBhc3NlcnRpb24gdG8gcGVyZm9ybVxuICAgKiBhIGRlZXAgY29tcGFyaXNvbi5cbiAgICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQgb2YgYSBga2V5c2AgYXJyYXkgYW5kIGl0cyBrZXlzXG4gICAqIHdpbGwgYmUgdXNlZCBhcyB0aGUgZXhwZWN0ZWQgc2V0IG9mIGtleXMuXG4gICAqXG4gICAqICAgICBhc3NlcnQuZG9lc05vdEhhdmVBbnlEZWVwS2V5cyhuZXcgTWFwKFtbe29uZTogJ29uZSd9LCAndmFsdWVPbmUnXSwgWzEsIDJdXSksIHt0aGlzRG9lc05vdDogJ2V4aXN0J30pO1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RIYXZlQW55RGVlcEtleXMobmV3IE1hcChbW3tvbmU6ICdvbmUnfSwgJ3ZhbHVlT25lJ10sIFt7dHdvOiAndHdvJ30sICd2YWx1ZVR3byddXSksIFt7dHdlbnR5OiAndHdlbnR5J30sIHtmaWZ0eTogJ2ZpZnR5J31dKTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90SGF2ZUFueURlZXBLZXlzKG5ldyBTZXQoW3tvbmU6ICdvbmUnfSwge3R3bzogJ3R3byd9XSksIHt0d2VudHk6ICd0d2VudHknfSk7XG4gICAqICAgICBhc3NlcnQuZG9lc05vdEhhdmVBbnlEZWVwS2V5cyhuZXcgU2V0KFt7b25lOiAnb25lJ30sIHt0d286ICd0d28nfV0pLCBbe3R3ZW50eTogJ3R3ZW50eSd9LCB7ZmlmdHk6ICdmaWZ0eSd9XSk7XG4gICAqXG4gICAqIEBuYW1lIGRvZXNOb3RIYXZlQW55RGVlcEtleXNcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBrZXlzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kb2VzTm90SGF2ZUFueURlZXBLZXlzID0gZnVuY3Rpb24gKG9iaiwga2V5cywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRvZXNOb3RIYXZlQW55RGVlcEtleXMsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUuYW55LmRlZXAua2V5cyhrZXlzKTtcbiAgfVxuXG4gLyoqXG4gICAqICMjIyAuZG9lc05vdEhhdmVBbGxEZWVwS2V5cyhvYmplY3QsIFtrZXlzXSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgZG9lcyBub3QgaGF2ZSBhdCBsZWFzdCBvbmUgb2YgdGhlIGBrZXlzYCBwcm92aWRlZC5cbiAgICogU2luY2UgU2V0cyBhbmQgTWFwcyBjYW4gaGF2ZSBvYmplY3RzIGFzIGtleXMgeW91IGNhbiB1c2UgdGhpcyBhc3NlcnRpb24gdG8gcGVyZm9ybVxuICAgKiBhIGRlZXAgY29tcGFyaXNvbi5cbiAgICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQgb2YgYSBga2V5c2AgYXJyYXkgYW5kIGl0cyBrZXlzXG4gICAqIHdpbGwgYmUgdXNlZCBhcyB0aGUgZXhwZWN0ZWQgc2V0IG9mIGtleXMuXG4gICAqXG4gICAqICAgICBhc3NlcnQuZG9lc05vdEhhdmVBbGxEZWVwS2V5cyhuZXcgTWFwKFtbe29uZTogJ29uZSd9LCAndmFsdWVPbmUnXSwgWzEsIDJdXSksIHt0aGlzRG9lc05vdDogJ2V4aXN0J30pO1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RIYXZlQWxsRGVlcEtleXMobmV3IE1hcChbW3tvbmU6ICdvbmUnfSwgJ3ZhbHVlT25lJ10sIFt7dHdvOiAndHdvJ30sICd2YWx1ZVR3byddXSksIFt7dHdlbnR5OiAndHdlbnR5J30sIHtvbmU6ICdvbmUnfV0pO1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RIYXZlQWxsRGVlcEtleXMobmV3IFNldChbe29uZTogJ29uZSd9LCB7dHdvOiAndHdvJ31dKSwge3R3ZW50eTogJ3R3ZW50eSd9KTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90SGF2ZUFsbERlZXBLZXlzKG5ldyBTZXQoW3tvbmU6ICdvbmUnfSwge3R3bzogJ3R3byd9XSksIFt7b25lOiAnb25lJ30sIHtmaWZ0eTogJ2ZpZnR5J31dKTtcbiAgICpcbiAgICogQG5hbWUgZG9lc05vdEhhdmVBbGxEZWVwS2V5c1xuICAgKiBAcGFyYW0ge01peGVkfSBvYmplY3RcbiAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGtleXNcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmRvZXNOb3RIYXZlQWxsRGVlcEtleXMgPSBmdW5jdGlvbiAob2JqLCBrZXlzLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuZG9lc05vdEhhdmVBbGxEZWVwS2V5cywgdHJ1ZSlcbiAgICAgIC50by5ub3QuaGF2ZS5hbGwuZGVlcC5rZXlzKGtleXMpO1xuICB9XG5cbiAvKipcbiAgICogIyMjIC50aHJvd3MoZm4sIFtlcnJvckxpa2Uvc3RyaW5nL3JlZ2V4cF0sIFtzdHJpbmcvcmVnZXhwXSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBJZiBgZXJyb3JMaWtlYCBpcyBhbiBgRXJyb3JgIGNvbnN0cnVjdG9yLCBhc3NlcnRzIHRoYXQgYGZuYCB3aWxsIHRocm93IGFuIGVycm9yIHRoYXQgaXMgYW5cbiAgICogaW5zdGFuY2Ugb2YgYGVycm9yTGlrZWAuXG4gICAqIElmIGBlcnJvckxpa2VgIGlzIGFuIGBFcnJvcmAgaW5zdGFuY2UsIGFzc2VydHMgdGhhdCB0aGUgZXJyb3IgdGhyb3duIGlzIHRoZSBzYW1lXG4gICAqIGluc3RhbmNlIGFzIGBlcnJvckxpa2VgLlxuICAgKiBJZiBgZXJyTXNnTWF0Y2hlcmAgaXMgcHJvdmlkZWQsIGl0IGFsc28gYXNzZXJ0cyB0aGF0IHRoZSBlcnJvciB0aHJvd24gd2lsbCBoYXZlIGFcbiAgICogbWVzc2FnZSBtYXRjaGluZyBgZXJyTXNnTWF0Y2hlcmAuXG4gICAqXG4gICAqICAgICBhc3NlcnQudGhyb3dzKGZuLCAnRXJyb3IgdGhyb3duIG11c3QgaGF2ZSB0aGlzIG1zZycpO1xuICAgKiAgICAgYXNzZXJ0LnRocm93cyhmbiwgL0Vycm9yIHRocm93biBtdXN0IGhhdmUgYSBtc2cgdGhhdCBtYXRjaGVzIHRoaXMvKTtcbiAgICogICAgIGFzc2VydC50aHJvd3MoZm4sIFJlZmVyZW5jZUVycm9yKTtcbiAgICogICAgIGFzc2VydC50aHJvd3MoZm4sIGVycm9ySW5zdGFuY2UpO1xuICAgKiAgICAgYXNzZXJ0LnRocm93cyhmbiwgUmVmZXJlbmNlRXJyb3IsICdFcnJvciB0aHJvd24gbXVzdCBiZSBhIFJlZmVyZW5jZUVycm9yIGFuZCBoYXZlIHRoaXMgbXNnJyk7XG4gICAqICAgICBhc3NlcnQudGhyb3dzKGZuLCBlcnJvckluc3RhbmNlLCAnRXJyb3IgdGhyb3duIG11c3QgYmUgdGhlIHNhbWUgZXJyb3JJbnN0YW5jZSBhbmQgaGF2ZSB0aGlzIG1zZycpO1xuICAgKiAgICAgYXNzZXJ0LnRocm93cyhmbiwgUmVmZXJlbmNlRXJyb3IsIC9FcnJvciB0aHJvd24gbXVzdCBiZSBhIFJlZmVyZW5jZUVycm9yIGFuZCBtYXRjaCB0aGlzLyk7XG4gICAqICAgICBhc3NlcnQudGhyb3dzKGZuLCBlcnJvckluc3RhbmNlLCAvRXJyb3IgdGhyb3duIG11c3QgYmUgdGhlIHNhbWUgZXJyb3JJbnN0YW5jZSBhbmQgbWF0Y2ggdGhpcy8pO1xuICAgKlxuICAgKiBAbmFtZSB0aHJvd3NcbiAgICogQGFsaWFzIHRocm93XG4gICAqIEBhbGlhcyBUaHJvd1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICAgKiBAcGFyYW0ge0Vycm9yQ29uc3RydWN0b3J8RXJyb3J9IGVycm9yTGlrZVxuICAgKiBAcGFyYW0ge1JlZ0V4cHxTdHJpbmd9IGVyck1zZ01hdGNoZXJcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9FcnJvciNFcnJvcl90eXBlc1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQudGhyb3dzID0gZnVuY3Rpb24gKGZuLCBlcnJvckxpa2UsIGVyck1zZ01hdGNoZXIsIG1zZykge1xuICAgIGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIGVycm9yTGlrZSB8fCBlcnJvckxpa2UgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIGVyck1zZ01hdGNoZXIgPSBlcnJvckxpa2U7XG4gICAgICBlcnJvckxpa2UgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBhc3NlcnRFcnIgPSBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC50aHJvd3MsIHRydWUpXG4gICAgICAudG8udGhyb3coZXJyb3JMaWtlLCBlcnJNc2dNYXRjaGVyKTtcbiAgICByZXR1cm4gZmxhZyhhc3NlcnRFcnIsICdvYmplY3QnKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5kb2VzTm90VGhyb3coZm4sIFtlcnJvckxpa2Uvc3RyaW5nL3JlZ2V4cF0sIFtzdHJpbmcvcmVnZXhwXSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBJZiBgZXJyb3JMaWtlYCBpcyBhbiBgRXJyb3JgIGNvbnN0cnVjdG9yLCBhc3NlcnRzIHRoYXQgYGZuYCB3aWxsIF9ub3RfIHRocm93IGFuIGVycm9yIHRoYXQgaXMgYW5cbiAgICogaW5zdGFuY2Ugb2YgYGVycm9yTGlrZWAuXG4gICAqIElmIGBlcnJvckxpa2VgIGlzIGFuIGBFcnJvcmAgaW5zdGFuY2UsIGFzc2VydHMgdGhhdCB0aGUgZXJyb3IgdGhyb3duIGlzIF9ub3RfIHRoZSBzYW1lXG4gICAqIGluc3RhbmNlIGFzIGBlcnJvckxpa2VgLlxuICAgKiBJZiBgZXJyTXNnTWF0Y2hlcmAgaXMgcHJvdmlkZWQsIGl0IGFsc28gYXNzZXJ0cyB0aGF0IHRoZSBlcnJvciB0aHJvd24gd2lsbCBfbm90XyBoYXZlIGFcbiAgICogbWVzc2FnZSBtYXRjaGluZyBgZXJyTXNnTWF0Y2hlcmAuXG4gICAqXG4gICAqICAgICBhc3NlcnQuZG9lc05vdFRocm93KGZuLCAnQW55IEVycm9yIHRocm93biBtdXN0IG5vdCBoYXZlIHRoaXMgbWVzc2FnZScpO1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdyhmbiwgL0FueSBFcnJvciB0aHJvd24gbXVzdCBub3QgbWF0Y2ggdGhpcy8pO1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdyhmbiwgRXJyb3IpO1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdyhmbiwgZXJyb3JJbnN0YW5jZSk7XG4gICAqICAgICBhc3NlcnQuZG9lc05vdFRocm93KGZuLCBFcnJvciwgJ0Vycm9yIG11c3Qgbm90IGhhdmUgdGhpcyBtZXNzYWdlJyk7XG4gICAqICAgICBhc3NlcnQuZG9lc05vdFRocm93KGZuLCBlcnJvckluc3RhbmNlLCAnRXJyb3IgbXVzdCBub3QgaGF2ZSB0aGlzIG1lc3NhZ2UnKTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90VGhyb3coZm4sIEVycm9yLCAvRXJyb3IgbXVzdCBub3QgbWF0Y2ggdGhpcy8pO1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdyhmbiwgZXJyb3JJbnN0YW5jZSwgL0Vycm9yIG11c3Qgbm90IG1hdGNoIHRoaXMvKTtcbiAgICpcbiAgICogQG5hbWUgZG9lc05vdFRocm93XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gICAqIEBwYXJhbSB7RXJyb3JDb25zdHJ1Y3Rvcn0gZXJyb3JMaWtlXG4gICAqIEBwYXJhbSB7UmVnRXhwfFN0cmluZ30gZXJyTXNnTWF0Y2hlclxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0Vycm9yI0Vycm9yX3R5cGVzXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kb2VzTm90VGhyb3cgPSBmdW5jdGlvbiAoZm4sIGVycm9yTGlrZSwgZXJyTXNnTWF0Y2hlciwgbXNnKSB7XG4gICAgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgZXJyb3JMaWtlIHx8IGVycm9yTGlrZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgZXJyTXNnTWF0Y2hlciA9IGVycm9yTGlrZTtcbiAgICAgIGVycm9yTGlrZSA9IG51bGw7XG4gICAgfVxuXG4gICAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZG9lc05vdFRocm93LCB0cnVlKVxuICAgICAgLnRvLm5vdC50aHJvdyhlcnJvckxpa2UsIGVyck1zZ01hdGNoZXIpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm9wZXJhdG9yKHZhbDEsIG9wZXJhdG9yLCB2YWwyLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIENvbXBhcmVzIHR3byB2YWx1ZXMgdXNpbmcgYG9wZXJhdG9yYC5cbiAgICpcbiAgICogICAgIGFzc2VydC5vcGVyYXRvcigxLCAnPCcsIDIsICdldmVyeXRoaW5nIGlzIG9rJyk7XG4gICAqICAgICBhc3NlcnQub3BlcmF0b3IoMSwgJz4nLCAyLCAndGhpcyB3aWxsIGZhaWwnKTtcbiAgICpcbiAgICogQG5hbWUgb3BlcmF0b3JcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsMVxuICAgKiBAcGFyYW0ge1N0cmluZ30gb3BlcmF0b3JcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsMlxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQub3BlcmF0b3IgPSBmdW5jdGlvbiAodmFsLCBvcGVyYXRvciwgdmFsMiwgbXNnKSB7XG4gICAgdmFyIG9rO1xuICAgIHN3aXRjaChvcGVyYXRvcikge1xuICAgICAgY2FzZSAnPT0nOlxuICAgICAgICBvayA9IHZhbCA9PSB2YWwyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJz09PSc6XG4gICAgICAgIG9rID0gdmFsID09PSB2YWwyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJz4nOlxuICAgICAgICBvayA9IHZhbCA+IHZhbDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnPj0nOlxuICAgICAgICBvayA9IHZhbCA+PSB2YWwyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJzwnOlxuICAgICAgICBvayA9IHZhbCA8IHZhbDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnPD0nOlxuICAgICAgICBvayA9IHZhbCA8PSB2YWwyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJyE9JzpcbiAgICAgICAgb2sgPSB2YWwgIT0gdmFsMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICchPT0nOlxuICAgICAgICBvayA9IHZhbCAhPT0gdmFsMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBtc2cgPSBtc2cgPyBtc2cgKyAnOiAnIDogbXNnO1xuICAgICAgICB0aHJvdyBuZXcgY2hhaS5Bc3NlcnRpb25FcnJvcihcbiAgICAgICAgICBtc2cgKyAnSW52YWxpZCBvcGVyYXRvciBcIicgKyBvcGVyYXRvciArICdcIicsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIGFzc2VydC5vcGVyYXRvclxuICAgICAgICApO1xuICAgIH1cbiAgICB2YXIgdGVzdCA9IG5ldyBBc3NlcnRpb24ob2ssIG1zZywgYXNzZXJ0Lm9wZXJhdG9yLCB0cnVlKTtcbiAgICB0ZXN0LmFzc2VydChcbiAgICAgICAgdHJ1ZSA9PT0gZmxhZyh0ZXN0LCAnb2JqZWN0JylcbiAgICAgICwgJ2V4cGVjdGVkICcgKyB1dGlsLmluc3BlY3QodmFsKSArICcgdG8gYmUgJyArIG9wZXJhdG9yICsgJyAnICsgdXRpbC5pbnNwZWN0KHZhbDIpXG4gICAgICAsICdleHBlY3RlZCAnICsgdXRpbC5pbnNwZWN0KHZhbCkgKyAnIHRvIG5vdCBiZSAnICsgb3BlcmF0b3IgKyAnICcgKyB1dGlsLmluc3BlY3QodmFsMikgKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5jbG9zZVRvKGFjdHVhbCwgZXhwZWN0ZWQsIGRlbHRhLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIGBleHBlY3RlZGAsIHRvIHdpdGhpbiBhICsvLSBgZGVsdGFgIHJhbmdlLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmNsb3NlVG8oMS41LCAxLCAwLjUsICdudW1iZXJzIGFyZSBjbG9zZScpO1xuICAgKlxuICAgKiBAbmFtZSBjbG9zZVRvXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBhY3R1YWxcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGV4cGVjdGVkXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuY2xvc2VUbyA9IGZ1bmN0aW9uIChhY3QsIGV4cCwgZGVsdGEsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5jbG9zZVRvLCB0cnVlKS50by5iZS5jbG9zZVRvKGV4cCwgZGVsdGEpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmFwcHJveGltYXRlbHkoYWN0dWFsLCBleHBlY3RlZCwgZGVsdGEsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgZXF1YWwgYGV4cGVjdGVkYCwgdG8gd2l0aGluIGEgKy8tIGBkZWx0YWAgcmFuZ2UuXG4gICAqXG4gICAqICAgICBhc3NlcnQuYXBwcm94aW1hdGVseSgxLjUsIDEsIDAuNSwgJ251bWJlcnMgYXJlIGNsb3NlJyk7XG4gICAqXG4gICAqIEBuYW1lIGFwcHJveGltYXRlbHlcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGFjdHVhbFxuICAgKiBAcGFyYW0ge051bWJlcn0gZXhwZWN0ZWRcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGRlbHRhXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5hcHByb3hpbWF0ZWx5ID0gZnVuY3Rpb24gKGFjdCwgZXhwLCBkZWx0YSwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0LmFwcHJveGltYXRlbHksIHRydWUpXG4gICAgICAudG8uYmUuYXBwcm94aW1hdGVseShleHAsIGRlbHRhKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5zYW1lTWVtYmVycyhzZXQxLCBzZXQyLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgc2V0MWAgYW5kIGBzZXQyYCBoYXZlIHRoZSBzYW1lIG1lbWJlcnMgaW4gYW55IG9yZGVyLiBVc2VzIGFcbiAgICogc3RyaWN0IGVxdWFsaXR5IGNoZWNrICg9PT0pLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LnNhbWVNZW1iZXJzKFsgMSwgMiwgMyBdLCBbIDIsIDEsIDMgXSwgJ3NhbWUgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBzYW1lTWVtYmVyc1xuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQxXG4gICAqIEBwYXJhbSB7QXJyYXl9IHNldDJcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LnNhbWVNZW1iZXJzID0gZnVuY3Rpb24gKHNldDEsIHNldDIsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQuc2FtZU1lbWJlcnMsIHRydWUpXG4gICAgICAudG8uaGF2ZS5zYW1lLm1lbWJlcnMoc2V0Mik7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5ub3RTYW1lTWVtYmVycyhzZXQxLCBzZXQyLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgc2V0MWAgYW5kIGBzZXQyYCBkb24ndCBoYXZlIHRoZSBzYW1lIG1lbWJlcnMgaW4gYW55IG9yZGVyLlxuICAgKiBVc2VzIGEgc3RyaWN0IGVxdWFsaXR5IGNoZWNrICg9PT0pLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdFNhbWVNZW1iZXJzKFsgMSwgMiwgMyBdLCBbIDUsIDEsIDMgXSwgJ25vdCBzYW1lIG1lbWJlcnMnKTtcbiAgICpcbiAgICogQG5hbWUgbm90U2FtZU1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0MVxuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RTYW1lTWVtYmVycyA9IGZ1bmN0aW9uIChzZXQxLCBzZXQyLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0Lm5vdFNhbWVNZW1iZXJzLCB0cnVlKVxuICAgICAgLnRvLm5vdC5oYXZlLnNhbWUubWVtYmVycyhzZXQyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLnNhbWVEZWVwTWVtYmVycyhzZXQxLCBzZXQyLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgc2V0MWAgYW5kIGBzZXQyYCBoYXZlIHRoZSBzYW1lIG1lbWJlcnMgaW4gYW55IG9yZGVyLiBVc2VzIGFcbiAgICogZGVlcCBlcXVhbGl0eSBjaGVjay5cbiAgICpcbiAgICogICAgIGFzc2VydC5zYW1lRGVlcE1lbWJlcnMoWyB7IGE6IDEgfSwgeyBiOiAyIH0sIHsgYzogMyB9IF0sIFt7IGI6IDIgfSwgeyBhOiAxIH0sIHsgYzogMyB9XSwgJ3NhbWUgZGVlcCBtZW1iZXJzJyk7XG4gICAqXG4gICAqIEBuYW1lIHNhbWVEZWVwTWVtYmVyc1xuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQxXG4gICAqIEBwYXJhbSB7QXJyYXl9IHNldDJcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LnNhbWVEZWVwTWVtYmVycyA9IGZ1bmN0aW9uIChzZXQxLCBzZXQyLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0LnNhbWVEZWVwTWVtYmVycywgdHJ1ZSlcbiAgICAgIC50by5oYXZlLnNhbWUuZGVlcC5tZW1iZXJzKHNldDIpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAubm90U2FtZURlZXBNZW1iZXJzKHNldDEsIHNldDIsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBzZXQxYCBhbmQgYHNldDJgIGRvbid0IGhhdmUgdGhlIHNhbWUgbWVtYmVycyBpbiBhbnkgb3JkZXIuXG4gICAqIFVzZXMgYSBkZWVwIGVxdWFsaXR5IGNoZWNrLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdFNhbWVEZWVwTWVtYmVycyhbIHsgYTogMSB9LCB7IGI6IDIgfSwgeyBjOiAzIH0gXSwgW3sgYjogMiB9LCB7IGE6IDEgfSwgeyBmOiA1IH1dLCAnbm90IHNhbWUgZGVlcCBtZW1iZXJzJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdFNhbWVEZWVwTWVtYmVyc1xuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQxXG4gICAqIEBwYXJhbSB7QXJyYXl9IHNldDJcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdFNhbWVEZWVwTWVtYmVycyA9IGZ1bmN0aW9uIChzZXQxLCBzZXQyLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0Lm5vdFNhbWVEZWVwTWVtYmVycywgdHJ1ZSlcbiAgICAgIC50by5ub3QuaGF2ZS5zYW1lLmRlZXAubWVtYmVycyhzZXQyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLnNhbWVPcmRlcmVkTWVtYmVycyhzZXQxLCBzZXQyLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgc2V0MWAgYW5kIGBzZXQyYCBoYXZlIHRoZSBzYW1lIG1lbWJlcnMgaW4gdGhlIHNhbWUgb3JkZXIuXG4gICAqIFVzZXMgYSBzdHJpY3QgZXF1YWxpdHkgY2hlY2sgKD09PSkuXG4gICAqXG4gICAqICAgICBhc3NlcnQuc2FtZU9yZGVyZWRNZW1iZXJzKFsgMSwgMiwgMyBdLCBbIDEsIDIsIDMgXSwgJ3NhbWUgb3JkZXJlZCBtZW1iZXJzJyk7XG4gICAqXG4gICAqIEBuYW1lIHNhbWVPcmRlcmVkTWVtYmVyc1xuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQxXG4gICAqIEBwYXJhbSB7QXJyYXl9IHNldDJcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LnNhbWVPcmRlcmVkTWVtYmVycyA9IGZ1bmN0aW9uIChzZXQxLCBzZXQyLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0LnNhbWVPcmRlcmVkTWVtYmVycywgdHJ1ZSlcbiAgICAgIC50by5oYXZlLnNhbWUub3JkZXJlZC5tZW1iZXJzKHNldDIpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAubm90U2FtZU9yZGVyZWRNZW1iZXJzKHNldDEsIHNldDIsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBzZXQxYCBhbmQgYHNldDJgIGRvbid0IGhhdmUgdGhlIHNhbWUgbWVtYmVycyBpbiB0aGUgc2FtZVxuICAgKiBvcmRlci4gVXNlcyBhIHN0cmljdCBlcXVhbGl0eSBjaGVjayAoPT09KS5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RTYW1lT3JkZXJlZE1lbWJlcnMoWyAxLCAyLCAzIF0sIFsgMiwgMSwgMyBdLCAnbm90IHNhbWUgb3JkZXJlZCBtZW1iZXJzJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdFNhbWVPcmRlcmVkTWVtYmVyc1xuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQxXG4gICAqIEBwYXJhbSB7QXJyYXl9IHNldDJcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdFNhbWVPcmRlcmVkTWVtYmVycyA9IGZ1bmN0aW9uIChzZXQxLCBzZXQyLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0Lm5vdFNhbWVPcmRlcmVkTWVtYmVycywgdHJ1ZSlcbiAgICAgIC50by5ub3QuaGF2ZS5zYW1lLm9yZGVyZWQubWVtYmVycyhzZXQyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLnNhbWVEZWVwT3JkZXJlZE1lbWJlcnMoc2V0MSwgc2V0MiwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHNldDFgIGFuZCBgc2V0MmAgaGF2ZSB0aGUgc2FtZSBtZW1iZXJzIGluIHRoZSBzYW1lIG9yZGVyLlxuICAgKiBVc2VzIGEgZGVlcCBlcXVhbGl0eSBjaGVjay5cbiAgICpcbiAgICogICAgIGFzc2VydC5zYW1lRGVlcE9yZGVyZWRNZW1iZXJzKFsgeyBhOiAxIH0sIHsgYjogMiB9LCB7IGM6IDMgfSBdLCBbIHsgYTogMSB9LCB7IGI6IDIgfSwgeyBjOiAzIH0gXSwgJ3NhbWUgZGVlcCBvcmRlcmVkIG1lbWJlcnMnKTtcbiAgICpcbiAgICogQG5hbWUgc2FtZURlZXBPcmRlcmVkTWVtYmVyc1xuICAgKiBAcGFyYW0ge0FycmF5fSBzZXQxXG4gICAqIEBwYXJhbSB7QXJyYXl9IHNldDJcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LnNhbWVEZWVwT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbiAoc2V0MSwgc2V0MiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5zYW1lRGVlcE9yZGVyZWRNZW1iZXJzLCB0cnVlKVxuICAgICAgLnRvLmhhdmUuc2FtZS5kZWVwLm9yZGVyZWQubWVtYmVycyhzZXQyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLm5vdFNhbWVEZWVwT3JkZXJlZE1lbWJlcnMoc2V0MSwgc2V0MiwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHNldDFgIGFuZCBgc2V0MmAgZG9uJ3QgaGF2ZSB0aGUgc2FtZSBtZW1iZXJzIGluIHRoZSBzYW1lXG4gICAqIG9yZGVyLiBVc2VzIGEgZGVlcCBlcXVhbGl0eSBjaGVjay5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RTYW1lRGVlcE9yZGVyZWRNZW1iZXJzKFsgeyBhOiAxIH0sIHsgYjogMiB9LCB7IGM6IDMgfSBdLCBbIHsgYTogMSB9LCB7IGI6IDIgfSwgeyB6OiA1IH0gXSwgJ25vdCBzYW1lIGRlZXAgb3JkZXJlZCBtZW1iZXJzJyk7XG4gICAqICAgICBhc3NlcnQubm90U2FtZURlZXBPcmRlcmVkTWVtYmVycyhbIHsgYTogMSB9LCB7IGI6IDIgfSwgeyBjOiAzIH0gXSwgWyB7IGI6IDIgfSwgeyBhOiAxIH0sIHsgYzogMyB9IF0sICdub3Qgc2FtZSBkZWVwIG9yZGVyZWQgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBub3RTYW1lRGVlcE9yZGVyZWRNZW1iZXJzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHNldDFcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0MlxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90U2FtZURlZXBPcmRlcmVkTWVtYmVycyA9IGZ1bmN0aW9uIChzZXQxLCBzZXQyLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0Lm5vdFNhbWVEZWVwT3JkZXJlZE1lbWJlcnMsIHRydWUpXG4gICAgICAudG8ubm90LmhhdmUuc2FtZS5kZWVwLm9yZGVyZWQubWVtYmVycyhzZXQyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmluY2x1ZGVNZW1iZXJzKHN1cGVyc2V0LCBzdWJzZXQsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBzdWJzZXRgIGlzIGluY2x1ZGVkIGluIGBzdXBlcnNldGAgaW4gYW55IG9yZGVyLiBVc2VzIGFcbiAgICogc3RyaWN0IGVxdWFsaXR5IGNoZWNrICg9PT0pLiBEdXBsaWNhdGVzIGFyZSBpZ25vcmVkLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmluY2x1ZGVNZW1iZXJzKFsgMSwgMiwgMyBdLCBbIDIsIDEsIDIgXSwgJ2luY2x1ZGUgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBpbmNsdWRlTWVtYmVyc1xuICAgKiBAcGFyYW0ge0FycmF5fSBzdXBlcnNldFxuICAgKiBAcGFyYW0ge0FycmF5fSBzdWJzZXRcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmluY2x1ZGVNZW1iZXJzID0gZnVuY3Rpb24gKHN1cGVyc2V0LCBzdWJzZXQsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0LmluY2x1ZGVNZW1iZXJzLCB0cnVlKVxuICAgICAgLnRvLmluY2x1ZGUubWVtYmVycyhzdWJzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAubm90SW5jbHVkZU1lbWJlcnMoc3VwZXJzZXQsIHN1YnNldCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHN1YnNldGAgaXNuJ3QgaW5jbHVkZWQgaW4gYHN1cGVyc2V0YCBpbiBhbnkgb3JkZXIuIFVzZXMgYVxuICAgKiBzdHJpY3QgZXF1YWxpdHkgY2hlY2sgKD09PSkuIER1cGxpY2F0ZXMgYXJlIGlnbm9yZWQuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90SW5jbHVkZU1lbWJlcnMoWyAxLCAyLCAzIF0sIFsgNSwgMSBdLCAnbm90IGluY2x1ZGUgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBub3RJbmNsdWRlTWVtYmVyc1xuICAgKiBAcGFyYW0ge0FycmF5fSBzdXBlcnNldFxuICAgKiBAcGFyYW0ge0FycmF5fSBzdWJzZXRcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdEluY2x1ZGVNZW1iZXJzID0gZnVuY3Rpb24gKHN1cGVyc2V0LCBzdWJzZXQsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0Lm5vdEluY2x1ZGVNZW1iZXJzLCB0cnVlKVxuICAgICAgLnRvLm5vdC5pbmNsdWRlLm1lbWJlcnMoc3Vic2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmluY2x1ZGVEZWVwTWVtYmVycyhzdXBlcnNldCwgc3Vic2V0LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgc3Vic2V0YCBpcyBpbmNsdWRlZCBpbiBgc3VwZXJzZXRgIGluIGFueSBvcmRlci4gVXNlcyBhIGRlZXBcbiAgICogZXF1YWxpdHkgY2hlY2suIER1cGxpY2F0ZXMgYXJlIGlnbm9yZWQuXG4gICAqXG4gICAqICAgICBhc3NlcnQuaW5jbHVkZURlZXBNZW1iZXJzKFsgeyBhOiAxIH0sIHsgYjogMiB9LCB7IGM6IDMgfSBdLCBbIHsgYjogMiB9LCB7IGE6IDEgfSwgeyBiOiAyIH0gXSwgJ2luY2x1ZGUgZGVlcCBtZW1iZXJzJyk7XG4gICAqXG4gICAqIEBuYW1lIGluY2x1ZGVEZWVwTWVtYmVyc1xuICAgKiBAcGFyYW0ge0FycmF5fSBzdXBlcnNldFxuICAgKiBAcGFyYW0ge0FycmF5fSBzdWJzZXRcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmluY2x1ZGVEZWVwTWVtYmVycyA9IGZ1bmN0aW9uIChzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5pbmNsdWRlRGVlcE1lbWJlcnMsIHRydWUpXG4gICAgICAudG8uaW5jbHVkZS5kZWVwLm1lbWJlcnMoc3Vic2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLm5vdEluY2x1ZGVEZWVwTWVtYmVycyhzdXBlcnNldCwgc3Vic2V0LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgc3Vic2V0YCBpc24ndCBpbmNsdWRlZCBpbiBgc3VwZXJzZXRgIGluIGFueSBvcmRlci4gVXNlcyBhXG4gICAqIGRlZXAgZXF1YWxpdHkgY2hlY2suIER1cGxpY2F0ZXMgYXJlIGlnbm9yZWQuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90SW5jbHVkZURlZXBNZW1iZXJzKFsgeyBhOiAxIH0sIHsgYjogMiB9LCB7IGM6IDMgfSBdLCBbIHsgYjogMiB9LCB7IGY6IDUgfSBdLCAnbm90IGluY2x1ZGUgZGVlcCBtZW1iZXJzJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdEluY2x1ZGVEZWVwTWVtYmVyc1xuICAgKiBAcGFyYW0ge0FycmF5fSBzdXBlcnNldFxuICAgKiBAcGFyYW0ge0FycmF5fSBzdWJzZXRcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwTWVtYmVycyA9IGZ1bmN0aW9uIChzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5ub3RJbmNsdWRlRGVlcE1lbWJlcnMsIHRydWUpXG4gICAgICAudG8ubm90LmluY2x1ZGUuZGVlcC5tZW1iZXJzKHN1YnNldCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5pbmNsdWRlT3JkZXJlZE1lbWJlcnMoc3VwZXJzZXQsIHN1YnNldCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHN1YnNldGAgaXMgaW5jbHVkZWQgaW4gYHN1cGVyc2V0YCBpbiB0aGUgc2FtZSBvcmRlclxuICAgKiBiZWdpbm5pbmcgd2l0aCB0aGUgZmlyc3QgZWxlbWVudCBpbiBgc3VwZXJzZXRgLiBVc2VzIGEgc3RyaWN0IGVxdWFsaXR5XG4gICAqIGNoZWNrICg9PT0pLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmluY2x1ZGVPcmRlcmVkTWVtYmVycyhbIDEsIDIsIDMgXSwgWyAxLCAyIF0sICdpbmNsdWRlIG9yZGVyZWQgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBpbmNsdWRlT3JkZXJlZE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc3VwZXJzZXRcbiAgICogQHBhcmFtIHtBcnJheX0gc3Vic2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pbmNsdWRlT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbiAoc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQuaW5jbHVkZU9yZGVyZWRNZW1iZXJzLCB0cnVlKVxuICAgICAgLnRvLmluY2x1ZGUub3JkZXJlZC5tZW1iZXJzKHN1YnNldCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5ub3RJbmNsdWRlT3JkZXJlZE1lbWJlcnMoc3VwZXJzZXQsIHN1YnNldCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHN1YnNldGAgaXNuJ3QgaW5jbHVkZWQgaW4gYHN1cGVyc2V0YCBpbiB0aGUgc2FtZSBvcmRlclxuICAgKiBiZWdpbm5pbmcgd2l0aCB0aGUgZmlyc3QgZWxlbWVudCBpbiBgc3VwZXJzZXRgLiBVc2VzIGEgc3RyaWN0IGVxdWFsaXR5XG4gICAqIGNoZWNrICg9PT0pLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGVPcmRlcmVkTWVtYmVycyhbIDEsIDIsIDMgXSwgWyAyLCAxIF0sICdub3QgaW5jbHVkZSBvcmRlcmVkIG1lbWJlcnMnKTtcbiAgICogICAgIGFzc2VydC5ub3RJbmNsdWRlT3JkZXJlZE1lbWJlcnMoWyAxLCAyLCAzIF0sIFsgMiwgMyBdLCAnbm90IGluY2x1ZGUgb3JkZXJlZCBtZW1iZXJzJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdEluY2x1ZGVPcmRlcmVkTWVtYmVyc1xuICAgKiBAcGFyYW0ge0FycmF5fSBzdXBlcnNldFxuICAgKiBAcGFyYW0ge0FycmF5fSBzdWJzZXRcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdEluY2x1ZGVPcmRlcmVkTWVtYmVycyA9IGZ1bmN0aW9uIChzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5ub3RJbmNsdWRlT3JkZXJlZE1lbWJlcnMsIHRydWUpXG4gICAgICAudG8ubm90LmluY2x1ZGUub3JkZXJlZC5tZW1iZXJzKHN1YnNldCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5pbmNsdWRlRGVlcE9yZGVyZWRNZW1iZXJzKHN1cGVyc2V0LCBzdWJzZXQsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBzdWJzZXRgIGlzIGluY2x1ZGVkIGluIGBzdXBlcnNldGAgaW4gdGhlIHNhbWUgb3JkZXJcbiAgICogYmVnaW5uaW5nIHdpdGggdGhlIGZpcnN0IGVsZW1lbnQgaW4gYHN1cGVyc2V0YC4gVXNlcyBhIGRlZXAgZXF1YWxpdHlcbiAgICogY2hlY2suXG4gICAqXG4gICAqICAgICBhc3NlcnQuaW5jbHVkZURlZXBPcmRlcmVkTWVtYmVycyhbIHsgYTogMSB9LCB7IGI6IDIgfSwgeyBjOiAzIH0gXSwgWyB7IGE6IDEgfSwgeyBiOiAyIH0gXSwgJ2luY2x1ZGUgZGVlcCBvcmRlcmVkIG1lbWJlcnMnKTtcbiAgICpcbiAgICogQG5hbWUgaW5jbHVkZURlZXBPcmRlcmVkTWVtYmVyc1xuICAgKiBAcGFyYW0ge0FycmF5fSBzdXBlcnNldFxuICAgKiBAcGFyYW0ge0FycmF5fSBzdWJzZXRcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbiAoc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQuaW5jbHVkZURlZXBPcmRlcmVkTWVtYmVycywgdHJ1ZSlcbiAgICAgIC50by5pbmNsdWRlLmRlZXAub3JkZXJlZC5tZW1iZXJzKHN1YnNldCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5ub3RJbmNsdWRlRGVlcE9yZGVyZWRNZW1iZXJzKHN1cGVyc2V0LCBzdWJzZXQsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBzdWJzZXRgIGlzbid0IGluY2x1ZGVkIGluIGBzdXBlcnNldGAgaW4gdGhlIHNhbWUgb3JkZXJcbiAgICogYmVnaW5uaW5nIHdpdGggdGhlIGZpcnN0IGVsZW1lbnQgaW4gYHN1cGVyc2V0YC4gVXNlcyBhIGRlZXAgZXF1YWxpdHlcbiAgICogY2hlY2suXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90SW5jbHVkZURlZXBPcmRlcmVkTWVtYmVycyhbIHsgYTogMSB9LCB7IGI6IDIgfSwgeyBjOiAzIH0gXSwgWyB7IGE6IDEgfSwgeyBmOiA1IH0gXSwgJ25vdCBpbmNsdWRlIGRlZXAgb3JkZXJlZCBtZW1iZXJzJyk7XG4gICAqICAgICBhc3NlcnQubm90SW5jbHVkZURlZXBPcmRlcmVkTWVtYmVycyhbIHsgYTogMSB9LCB7IGI6IDIgfSwgeyBjOiAzIH0gXSwgWyB7IGI6IDIgfSwgeyBhOiAxIH0gXSwgJ25vdCBpbmNsdWRlIGRlZXAgb3JkZXJlZCBtZW1iZXJzJyk7XG4gICAqICAgICBhc3NlcnQubm90SW5jbHVkZURlZXBPcmRlcmVkTWVtYmVycyhbIHsgYTogMSB9LCB7IGI6IDIgfSwgeyBjOiAzIH0gXSwgWyB7IGI6IDIgfSwgeyBjOiAzIH0gXSwgJ25vdCBpbmNsdWRlIGRlZXAgb3JkZXJlZCBtZW1iZXJzJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdEluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnNcbiAgICogQHBhcmFtIHtBcnJheX0gc3VwZXJzZXRcbiAgICogQHBhcmFtIHtBcnJheX0gc3Vic2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RJbmNsdWRlRGVlcE9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24gKHN1cGVyc2V0LCBzdWJzZXQsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMsIHRydWUpXG4gICAgICAudG8ubm90LmluY2x1ZGUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoc3Vic2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLm9uZU9mKGluTGlzdCwgbGlzdCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgbm9uLW9iamVjdCwgbm9uLWFycmF5IHZhbHVlIGBpbkxpc3RgIGFwcGVhcnMgaW4gdGhlIGZsYXQgYXJyYXkgYGxpc3RgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm9uZU9mKDEsIFsgMiwgMSBdLCAnTm90IGZvdW5kIGluIGxpc3QnKTtcbiAgICpcbiAgICogQG5hbWUgb25lT2ZcbiAgICogQHBhcmFtIHsqfSBpbkxpc3RcbiAgICogQHBhcmFtIHtBcnJheTwqPn0gbGlzdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQub25lT2YgPSBmdW5jdGlvbiAoaW5MaXN0LCBsaXN0LCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGluTGlzdCwgbXNnLCBhc3NlcnQub25lT2YsIHRydWUpLnRvLmJlLm9uZU9mKGxpc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAuY2hhbmdlcyhmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYSBmdW5jdGlvbiBjaGFuZ2VzIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5LlxuICAgKlxuICAgKiAgICAgdmFyIG9iaiA9IHsgdmFsOiAxMCB9O1xuICAgKiAgICAgdmFyIGZuID0gZnVuY3Rpb24oKSB7IG9iai52YWwgPSAyMiB9O1xuICAgKiAgICAgYXNzZXJ0LmNoYW5nZXMoZm4sIG9iaiwgJ3ZhbCcpO1xuICAgKlxuICAgKiBAbmFtZSBjaGFuZ2VzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG1vZGlmaWVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qgb3IgZ2V0dGVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eSBuYW1lIF9vcHRpb25hbF9cbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuY2hhbmdlcyA9IGZ1bmN0aW9uIChmbiwgb2JqLCBwcm9wLCBtc2cpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBtc2cgPSBwcm9wO1xuICAgICAgcHJvcCA9IG51bGw7XG4gICAgfVxuXG4gICAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuY2hhbmdlcywgdHJ1ZSkudG8uY2hhbmdlKG9iaiwgcHJvcCk7XG4gIH1cblxuICAgLyoqXG4gICAqICMjIyAuY2hhbmdlc0J5KGZ1bmN0aW9uLCBvYmplY3QsIHByb3BlcnR5LCBkZWx0YSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYSBmdW5jdGlvbiBjaGFuZ2VzIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IGJ5IGFuIGFtb3VudCAoZGVsdGEpLlxuICAgKlxuICAgKiAgICAgdmFyIG9iaiA9IHsgdmFsOiAxMCB9O1xuICAgKiAgICAgdmFyIGZuID0gZnVuY3Rpb24oKSB7IG9iai52YWwgKz0gMiB9O1xuICAgKiAgICAgYXNzZXJ0LmNoYW5nZXNCeShmbiwgb2JqLCAndmFsJywgMik7XG4gICAqXG4gICAqIEBuYW1lIGNoYW5nZXNCeVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtb2RpZmllciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IG9yIGdldHRlciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBjaGFuZ2UgYW1vdW50IChkZWx0YSlcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuY2hhbmdlc0J5ID0gZnVuY3Rpb24gKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBtc2cgPSB0bXBNc2c7XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICBkZWx0YSA9IHByb3A7XG4gICAgICBwcm9wID0gbnVsbDtcbiAgICB9XG5cbiAgICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5jaGFuZ2VzQnksIHRydWUpXG4gICAgICAudG8uY2hhbmdlKG9iaiwgcHJvcCkuYnkoZGVsdGEpO1xuICB9XG5cbiAgIC8qKlxuICAgKiAjIyMgLmRvZXNOb3RDaGFuZ2UoZnVuY3Rpb24sIG9iamVjdCwgcHJvcGVydHksIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gZG9lcyBub3QgY2hhbmdlIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5LlxuICAgKlxuICAgKiAgICAgdmFyIG9iaiA9IHsgdmFsOiAxMCB9O1xuICAgKiAgICAgdmFyIGZuID0gZnVuY3Rpb24oKSB7IGNvbnNvbGUubG9nKCdmb28nKTsgfTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90Q2hhbmdlKGZuLCBvYmosICd2YWwnKTtcbiAgICpcbiAgICogQG5hbWUgZG9lc05vdENoYW5nZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtb2RpZmllciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IG9yIGdldHRlciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmRvZXNOb3RDaGFuZ2UgPSBmdW5jdGlvbiAoZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbXNnID0gcHJvcDtcbiAgICAgIHByb3AgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kb2VzTm90Q2hhbmdlLCB0cnVlKVxuICAgICAgLnRvLm5vdC5jaGFuZ2Uob2JqLCBwcm9wKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmNoYW5nZXNCdXROb3RCeShmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVsdGEsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gZG9lcyBub3QgY2hhbmdlIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IG9yIG9mIGEgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUgYnkgYW4gYW1vdW50IChkZWx0YSlcbiAgICpcbiAgICogICAgIHZhciBvYmogPSB7IHZhbDogMTAgfTtcbiAgICogICAgIHZhciBmbiA9IGZ1bmN0aW9uKCkgeyBvYmoudmFsICs9IDEwIH07XG4gICAqICAgICBhc3NlcnQuY2hhbmdlc0J1dE5vdEJ5KGZuLCBvYmosICd2YWwnLCA1KTtcbiAgICpcbiAgICogQG5hbWUgY2hhbmdlc0J1dE5vdEJ5XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG1vZGlmaWVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qgb3IgZ2V0dGVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eSBuYW1lIF9vcHRpb25hbF9cbiAgICogQHBhcmFtIHtOdW1iZXJ9IGNoYW5nZSBhbW91bnQgKGRlbHRhKVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5jaGFuZ2VzQnV0Tm90QnkgPSBmdW5jdGlvbiAoZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciB0bXBNc2cgPSBkZWx0YTtcbiAgICAgIGRlbHRhID0gcHJvcDtcbiAgICAgIG1zZyA9IHRtcE1zZztcbiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIGRlbHRhID0gcHJvcDtcbiAgICAgIHByb3AgPSBudWxsO1xuICAgIH1cblxuICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmNoYW5nZXNCdXROb3RCeSwgdHJ1ZSlcbiAgICAgIC50by5jaGFuZ2Uob2JqLCBwcm9wKS5idXQubm90LmJ5KGRlbHRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmluY3JlYXNlcyhmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYSBmdW5jdGlvbiBpbmNyZWFzZXMgYSBudW1lcmljIG9iamVjdCBwcm9wZXJ0eS5cbiAgICpcbiAgICogICAgIHZhciBvYmogPSB7IHZhbDogMTAgfTtcbiAgICogICAgIHZhciBmbiA9IGZ1bmN0aW9uKCkgeyBvYmoudmFsID0gMTMgfTtcbiAgICogICAgIGFzc2VydC5pbmNyZWFzZXMoZm4sIG9iaiwgJ3ZhbCcpO1xuICAgKlxuICAgKiBAbmFtZSBpbmNyZWFzZXNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kaWZpZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBvciBnZXR0ZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IG5hbWUgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pbmNyZWFzZXMgPSBmdW5jdGlvbiAoZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbXNnID0gcHJvcDtcbiAgICAgIHByb3AgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5pbmNyZWFzZXMsIHRydWUpXG4gICAgICAudG8uaW5jcmVhc2Uob2JqLCBwcm9wKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmluY3JlYXNlc0J5KGZ1bmN0aW9uLCBvYmplY3QsIHByb3BlcnR5LCBkZWx0YSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYSBmdW5jdGlvbiBpbmNyZWFzZXMgYSBudW1lcmljIG9iamVjdCBwcm9wZXJ0eSBvciBhIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlIGJ5IGFuIGFtb3VudCAoZGVsdGEpLlxuICAgKlxuICAgKiAgICAgdmFyIG9iaiA9IHsgdmFsOiAxMCB9O1xuICAgKiAgICAgdmFyIGZuID0gZnVuY3Rpb24oKSB7IG9iai52YWwgKz0gMTAgfTtcbiAgICogICAgIGFzc2VydC5pbmNyZWFzZXNCeShmbiwgb2JqLCAndmFsJywgMTApO1xuICAgKlxuICAgKiBAbmFtZSBpbmNyZWFzZXNCeVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtb2RpZmllciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IG9yIGdldHRlciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBjaGFuZ2UgYW1vdW50IChkZWx0YSlcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaW5jcmVhc2VzQnkgPSBmdW5jdGlvbiAoZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciB0bXBNc2cgPSBkZWx0YTtcbiAgICAgIGRlbHRhID0gcHJvcDtcbiAgICAgIG1zZyA9IHRtcE1zZztcbiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIGRlbHRhID0gcHJvcDtcbiAgICAgIHByb3AgPSBudWxsO1xuICAgIH1cblxuICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmluY3JlYXNlc0J5LCB0cnVlKVxuICAgICAgLnRvLmluY3JlYXNlKG9iaiwgcHJvcCkuYnkoZGVsdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAuZG9lc05vdEluY3JlYXNlKGZ1bmN0aW9uLCBvYmplY3QsIHByb3BlcnR5LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBhIGZ1bmN0aW9uIGRvZXMgbm90IGluY3JlYXNlIGEgbnVtZXJpYyBvYmplY3QgcHJvcGVydHkuXG4gICAqXG4gICAqICAgICB2YXIgb2JqID0geyB2YWw6IDEwIH07XG4gICAqICAgICB2YXIgZm4gPSBmdW5jdGlvbigpIHsgb2JqLnZhbCA9IDggfTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90SW5jcmVhc2UoZm4sIG9iaiwgJ3ZhbCcpO1xuICAgKlxuICAgKiBAbmFtZSBkb2VzTm90SW5jcmVhc2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kaWZpZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBvciBnZXR0ZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IG5hbWUgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kb2VzTm90SW5jcmVhc2UgPSBmdW5jdGlvbiAoZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbXNnID0gcHJvcDtcbiAgICAgIHByb3AgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kb2VzTm90SW5jcmVhc2UsIHRydWUpXG4gICAgICAudG8ubm90LmluY3JlYXNlKG9iaiwgcHJvcCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5pbmNyZWFzZXNCdXROb3RCeShmdW5jdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVsdGEsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gZG9lcyBub3QgaW5jcmVhc2UgYSBudW1lcmljIG9iamVjdCBwcm9wZXJ0eSBvciBmdW5jdGlvbidzIHJldHVybiB2YWx1ZSBieSBhbiBhbW91bnQgKGRlbHRhKS5cbiAgICpcbiAgICogICAgIHZhciBvYmogPSB7IHZhbDogMTAgfTtcbiAgICogICAgIHZhciBmbiA9IGZ1bmN0aW9uKCkgeyBvYmoudmFsID0gMTUgfTtcbiAgICogICAgIGFzc2VydC5pbmNyZWFzZXNCdXROb3RCeShmbiwgb2JqLCAndmFsJywgMTApO1xuICAgKlxuICAgKiBAbmFtZSBpbmNyZWFzZXNCdXROb3RCeVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtb2RpZmllciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IG9yIGdldHRlciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBjaGFuZ2UgYW1vdW50IChkZWx0YSlcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaW5jcmVhc2VzQnV0Tm90QnkgPSBmdW5jdGlvbiAoZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciB0bXBNc2cgPSBkZWx0YTtcbiAgICAgIGRlbHRhID0gcHJvcDtcbiAgICAgIG1zZyA9IHRtcE1zZztcbiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIGRlbHRhID0gcHJvcDtcbiAgICAgIHByb3AgPSBudWxsO1xuICAgIH1cblxuICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmluY3JlYXNlc0J1dE5vdEJ5LCB0cnVlKVxuICAgICAgLnRvLmluY3JlYXNlKG9iaiwgcHJvcCkuYnV0Lm5vdC5ieShkZWx0YSk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIC5kZWNyZWFzZXMoZnVuY3Rpb24sIG9iamVjdCwgcHJvcGVydHksIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGEgZnVuY3Rpb24gZGVjcmVhc2VzIGEgbnVtZXJpYyBvYmplY3QgcHJvcGVydHkuXG4gICAqXG4gICAqICAgICB2YXIgb2JqID0geyB2YWw6IDEwIH07XG4gICAqICAgICB2YXIgZm4gPSBmdW5jdGlvbigpIHsgb2JqLnZhbCA9IDUgfTtcbiAgICogICAgIGFzc2VydC5kZWNyZWFzZXMoZm4sIG9iaiwgJ3ZhbCcpO1xuICAgKlxuICAgKiBAbmFtZSBkZWNyZWFzZXNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kaWZpZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBvciBnZXR0ZXIgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IG5hbWUgX29wdGlvbmFsX1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kZWNyZWFzZXMgPSBmdW5jdGlvbiAoZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbXNnID0gcHJvcDtcbiAgICAgIHByb3AgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kZWNyZWFzZXMsIHRydWUpXG4gICAgICAudG8uZGVjcmVhc2Uob2JqLCBwcm9wKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmRlY3JlYXNlc0J5KGZ1bmN0aW9uLCBvYmplY3QsIHByb3BlcnR5LCBkZWx0YSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYSBmdW5jdGlvbiBkZWNyZWFzZXMgYSBudW1lcmljIG9iamVjdCBwcm9wZXJ0eSBvciBhIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlIGJ5IGFuIGFtb3VudCAoZGVsdGEpXG4gICAqXG4gICAqICAgICB2YXIgb2JqID0geyB2YWw6IDEwIH07XG4gICAqICAgICB2YXIgZm4gPSBmdW5jdGlvbigpIHsgb2JqLnZhbCAtPSA1IH07XG4gICAqICAgICBhc3NlcnQuZGVjcmVhc2VzQnkoZm4sIG9iaiwgJ3ZhbCcsIDUpO1xuICAgKlxuICAgKiBAbmFtZSBkZWNyZWFzZXNCeVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtb2RpZmllciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IG9yIGdldHRlciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBjaGFuZ2UgYW1vdW50IChkZWx0YSlcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZGVjcmVhc2VzQnkgPSBmdW5jdGlvbiAoZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciB0bXBNc2cgPSBkZWx0YTtcbiAgICAgIGRlbHRhID0gcHJvcDtcbiAgICAgIG1zZyA9IHRtcE1zZztcbiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIGRlbHRhID0gcHJvcDtcbiAgICAgIHByb3AgPSBudWxsO1xuICAgIH1cblxuICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRlY3JlYXNlc0J5LCB0cnVlKVxuICAgICAgLnRvLmRlY3JlYXNlKG9iaiwgcHJvcCkuYnkoZGVsdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyAuZG9lc05vdERlY3JlYXNlKGZ1bmN0aW9uLCBvYmplY3QsIHByb3BlcnR5LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBhIGZ1bmN0aW9uIGRvZXMgbm90IGRlY3JlYXNlcyBhIG51bWVyaWMgb2JqZWN0IHByb3BlcnR5LlxuICAgKlxuICAgKiAgICAgdmFyIG9iaiA9IHsgdmFsOiAxMCB9O1xuICAgKiAgICAgdmFyIGZuID0gZnVuY3Rpb24oKSB7IG9iai52YWwgPSAxNSB9O1xuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3REZWNyZWFzZShmbiwgb2JqLCAndmFsJyk7XG4gICAqXG4gICAqIEBuYW1lIGRvZXNOb3REZWNyZWFzZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtb2RpZmllciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IG9yIGdldHRlciBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkgbmFtZSBfb3B0aW9uYWxfXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmRvZXNOb3REZWNyZWFzZSA9IGZ1bmN0aW9uIChmbiwgb2JqLCBwcm9wLCBtc2cpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBtc2cgPSBwcm9wO1xuICAgICAgcHJvcCA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRvZXNOb3REZWNyZWFzZSwgdHJ1ZSlcbiAgICAgIC50by5ub3QuZGVjcmVhc2Uob2JqLCBwcm9wKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmRvZXNOb3REZWNyZWFzZUJ5KGZ1bmN0aW9uLCBvYmplY3QsIHByb3BlcnR5LCBkZWx0YSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYSBmdW5jdGlvbiBkb2VzIG5vdCBkZWNyZWFzZXMgYSBudW1lcmljIG9iamVjdCBwcm9wZXJ0eSBvciBhIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlIGJ5IGFuIGFtb3VudCAoZGVsdGEpXG4gICAqXG4gICAqICAgICB2YXIgb2JqID0geyB2YWw6IDEwIH07XG4gICAqICAgICB2YXIgZm4gPSBmdW5jdGlvbigpIHsgb2JqLnZhbCA9IDUgfTtcbiAgICogICAgIGFzc2VydC5kb2VzTm90RGVjcmVhc2VCeShmbiwgb2JqLCAndmFsJywgMSk7XG4gICAqXG4gICAqIEBuYW1lIGRvZXNOb3REZWNyZWFzZUJ5XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG1vZGlmaWVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qgb3IgZ2V0dGVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eSBuYW1lIF9vcHRpb25hbF9cbiAgICogQHBhcmFtIHtOdW1iZXJ9IGNoYW5nZSBhbW91bnQgKGRlbHRhKVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kb2VzTm90RGVjcmVhc2VCeSA9IGZ1bmN0aW9uIChmbiwgb2JqLCBwcm9wLCBkZWx0YSwgbXNnKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQgJiYgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIHRtcE1zZyA9IGRlbHRhO1xuICAgICAgZGVsdGEgPSBwcm9wO1xuICAgICAgbXNnID0gdG1wTXNnO1xuICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgZGVsdGEgPSBwcm9wO1xuICAgICAgcHJvcCA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRvZXNOb3REZWNyZWFzZUJ5LCB0cnVlKVxuICAgICAgLnRvLm5vdC5kZWNyZWFzZShvYmosIHByb3ApLmJ5KGRlbHRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmRlY3JlYXNlc0J1dE5vdEJ5KGZ1bmN0aW9uLCBvYmplY3QsIHByb3BlcnR5LCBkZWx0YSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYSBmdW5jdGlvbiBkb2VzIG5vdCBkZWNyZWFzZXMgYSBudW1lcmljIG9iamVjdCBwcm9wZXJ0eSBvciBhIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlIGJ5IGFuIGFtb3VudCAoZGVsdGEpXG4gICAqXG4gICAqICAgICB2YXIgb2JqID0geyB2YWw6IDEwIH07XG4gICAqICAgICB2YXIgZm4gPSBmdW5jdGlvbigpIHsgb2JqLnZhbCA9IDUgfTtcbiAgICogICAgIGFzc2VydC5kZWNyZWFzZXNCdXROb3RCeShmbiwgb2JqLCAndmFsJywgMSk7XG4gICAqXG4gICAqIEBuYW1lIGRlY3JlYXNlc0J1dE5vdEJ5XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG1vZGlmaWVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qgb3IgZ2V0dGVyIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eSBuYW1lIF9vcHRpb25hbF9cbiAgICogQHBhcmFtIHtOdW1iZXJ9IGNoYW5nZSBhbW91bnQgKGRlbHRhKVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBuYW1lc3BhY2UgQXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5kZWNyZWFzZXNCdXROb3RCeSA9IGZ1bmN0aW9uIChmbiwgb2JqLCBwcm9wLCBkZWx0YSwgbXNnKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQgJiYgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIHRtcE1zZyA9IGRlbHRhO1xuICAgICAgZGVsdGEgPSBwcm9wO1xuICAgICAgbXNnID0gdG1wTXNnO1xuICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgZGVsdGEgPSBwcm9wO1xuICAgICAgcHJvcCA9IG51bGw7XG4gICAgfVxuXG4gICAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZGVjcmVhc2VzQnV0Tm90QnksIHRydWUpXG4gICAgICAudG8uZGVjcmVhc2Uob2JqLCBwcm9wKS5idXQubm90LmJ5KGRlbHRhKTtcbiAgfVxuXG4gIC8qIVxuICAgKiAjIyMgLmlmRXJyb3Iob2JqZWN0KVxuICAgKlxuICAgKiBBc3NlcnRzIGlmIHZhbHVlIGlzIG5vdCBhIGZhbHNlIHZhbHVlLCBhbmQgdGhyb3dzIGlmIGl0IGlzIGEgdHJ1ZSB2YWx1ZS5cbiAgICogVGhpcyBpcyBhZGRlZCB0byBhbGxvdyBmb3IgY2hhaSB0byBiZSBhIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIE5vZGUnc1xuICAgKiBhc3NlcnQgY2xhc3MuXG4gICAqXG4gICAqICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdJIGFtIGEgY3VzdG9tIGVycm9yJyk7XG4gICAqICAgICBhc3NlcnQuaWZFcnJvcihlcnIpOyAvLyBSZXRocm93cyBlcnIhXG4gICAqXG4gICAqIEBuYW1lIGlmRXJyb3JcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaWZFcnJvciA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICBpZiAodmFsKSB7XG4gICAgICB0aHJvdyh2YWwpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc0V4dGVuc2libGUob2JqZWN0KVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaXMgZXh0ZW5zaWJsZSAoY2FuIGhhdmUgbmV3IHByb3BlcnRpZXMgYWRkZWQgdG8gaXQpLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzRXh0ZW5zaWJsZSh7fSk7XG4gICAqXG4gICAqIEBuYW1lIGlzRXh0ZW5zaWJsZVxuICAgKiBAYWxpYXMgZXh0ZW5zaWJsZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzRXh0ZW5zaWJsZSA9IGZ1bmN0aW9uIChvYmosIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc0V4dGVuc2libGUsIHRydWUpLnRvLmJlLmV4dGVuc2libGU7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNOb3RFeHRlbnNpYmxlKG9iamVjdClcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGlzIF9ub3RfIGV4dGVuc2libGUuXG4gICAqXG4gICAqICAgICB2YXIgbm9uRXh0ZW5zaWJsZU9iamVjdCA9IE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSk7XG4gICAqICAgICB2YXIgc2VhbGVkT2JqZWN0ID0gT2JqZWN0LnNlYWwoe30pO1xuICAgKiAgICAgdmFyIGZyb3plbk9iamVjdCA9IE9iamVjdC5mcmVlemUoe30pO1xuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzTm90RXh0ZW5zaWJsZShub25FeHRlbnNpYmxlT2JqZWN0KTtcbiAgICogICAgIGFzc2VydC5pc05vdEV4dGVuc2libGUoc2VhbGVkT2JqZWN0KTtcbiAgICogICAgIGFzc2VydC5pc05vdEV4dGVuc2libGUoZnJvemVuT2JqZWN0KTtcbiAgICpcbiAgICogQG5hbWUgaXNOb3RFeHRlbnNpYmxlXG4gICAqIEBhbGlhcyBub3RFeHRlbnNpYmxlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOb3RFeHRlbnNpYmxlID0gZnVuY3Rpb24gKG9iaiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmlzTm90RXh0ZW5zaWJsZSwgdHJ1ZSkudG8ubm90LmJlLmV4dGVuc2libGU7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNTZWFsZWQob2JqZWN0KVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaXMgc2VhbGVkIChjYW5ub3QgaGF2ZSBuZXcgcHJvcGVydGllcyBhZGRlZCB0byBpdFxuICAgKiBhbmQgaXRzIGV4aXN0aW5nIHByb3BlcnRpZXMgY2Fubm90IGJlIHJlbW92ZWQpLlxuICAgKlxuICAgKiAgICAgdmFyIHNlYWxlZE9iamVjdCA9IE9iamVjdC5zZWFsKHt9KTtcbiAgICogICAgIHZhciBmcm96ZW5PYmplY3QgPSBPYmplY3Quc2VhbCh7fSk7XG4gICAqXG4gICAqICAgICBhc3NlcnQuaXNTZWFsZWQoc2VhbGVkT2JqZWN0KTtcbiAgICogICAgIGFzc2VydC5pc1NlYWxlZChmcm96ZW5PYmplY3QpO1xuICAgKlxuICAgKiBAbmFtZSBpc1NlYWxlZFxuICAgKiBAYWxpYXMgc2VhbGVkXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNTZWFsZWQgPSBmdW5jdGlvbiAob2JqLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaXNTZWFsZWQsIHRydWUpLnRvLmJlLnNlYWxlZDtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc05vdFNlYWxlZChvYmplY3QpXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBpcyBfbm90XyBzZWFsZWQuXG4gICAqXG4gICAqICAgICBhc3NlcnQuaXNOb3RTZWFsZWQoe30pO1xuICAgKlxuICAgKiBAbmFtZSBpc05vdFNlYWxlZFxuICAgKiBAYWxpYXMgbm90U2VhbGVkXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOb3RTZWFsZWQgPSBmdW5jdGlvbiAob2JqLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaXNOb3RTZWFsZWQsIHRydWUpLnRvLm5vdC5iZS5zZWFsZWQ7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNGcm96ZW4ob2JqZWN0KVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaXMgZnJvemVuIChjYW5ub3QgaGF2ZSBuZXcgcHJvcGVydGllcyBhZGRlZCB0byBpdFxuICAgKiBhbmQgaXRzIGV4aXN0aW5nIHByb3BlcnRpZXMgY2Fubm90IGJlIG1vZGlmaWVkKS5cbiAgICpcbiAgICogICAgIHZhciBmcm96ZW5PYmplY3QgPSBPYmplY3QuZnJlZXplKHt9KTtcbiAgICogICAgIGFzc2VydC5mcm96ZW4oZnJvemVuT2JqZWN0KTtcbiAgICpcbiAgICogQG5hbWUgaXNGcm96ZW5cbiAgICogQGFsaWFzIGZyb3plblxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzRnJvemVuID0gZnVuY3Rpb24gKG9iaiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmlzRnJvemVuLCB0cnVlKS50by5iZS5mcm96ZW47XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNOb3RGcm96ZW4ob2JqZWN0KVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaXMgX25vdF8gZnJvemVuLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzTm90RnJvemVuKHt9KTtcbiAgICpcbiAgICogQG5hbWUgaXNOb3RGcm96ZW5cbiAgICogQGFsaWFzIG5vdEZyb3plblxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTm90RnJvemVuID0gZnVuY3Rpb24gKG9iaiwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmlzTm90RnJvemVuLCB0cnVlKS50by5ub3QuYmUuZnJvemVuO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzRW1wdHkodGFyZ2V0KVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBkb2VzIG5vdCBjb250YWluIGFueSB2YWx1ZXMuXG4gICAqIEZvciBhcnJheXMgYW5kIHN0cmluZ3MsIGl0IGNoZWNrcyB0aGUgYGxlbmd0aGAgcHJvcGVydHkuXG4gICAqIEZvciBgTWFwYCBhbmQgYFNldGAgaW5zdGFuY2VzLCBpdCBjaGVja3MgdGhlIGBzaXplYCBwcm9wZXJ0eS5cbiAgICogRm9yIG5vbi1mdW5jdGlvbiBvYmplY3RzLCBpdCBnZXRzIHRoZSBjb3VudCBvZiBvd25cbiAgICogZW51bWVyYWJsZSBzdHJpbmcga2V5cy5cbiAgICpcbiAgICogICAgIGFzc2VydC5pc0VtcHR5KFtdKTtcbiAgICogICAgIGFzc2VydC5pc0VtcHR5KCcnKTtcbiAgICogICAgIGFzc2VydC5pc0VtcHR5KG5ldyBNYXApO1xuICAgKiAgICAgYXNzZXJ0LmlzRW1wdHkoe30pO1xuICAgKlxuICAgKiBAbmFtZSBpc0VtcHR5XG4gICAqIEBhbGlhcyBlbXB0eVxuICAgKiBAcGFyYW0ge09iamVjdHxBcnJheXxTdHJpbmd8TWFwfFNldH0gdGFyZ2V0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQG5hbWVzcGFjZSBBc3NlcnRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzRW1wdHkgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0VtcHR5LCB0cnVlKS50by5iZS5lbXB0eTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc05vdEVtcHR5KHRhcmdldClcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgY29udGFpbnMgdmFsdWVzLlxuICAgKiBGb3IgYXJyYXlzIGFuZCBzdHJpbmdzLCBpdCBjaGVja3MgdGhlIGBsZW5ndGhgIHByb3BlcnR5LlxuICAgKiBGb3IgYE1hcGAgYW5kIGBTZXRgIGluc3RhbmNlcywgaXQgY2hlY2tzIHRoZSBgc2l6ZWAgcHJvcGVydHkuXG4gICAqIEZvciBub24tZnVuY3Rpb24gb2JqZWN0cywgaXQgZ2V0cyB0aGUgY291bnQgb2Ygb3duXG4gICAqIGVudW1lcmFibGUgc3RyaW5nIGtleXMuXG4gICAqXG4gICAqICAgICBhc3NlcnQuaXNOb3RFbXB0eShbMSwgMl0pO1xuICAgKiAgICAgYXNzZXJ0LmlzTm90RW1wdHkoJzM0Jyk7XG4gICAqICAgICBhc3NlcnQuaXNOb3RFbXB0eShuZXcgU2V0KFs1LCA2XSkpO1xuICAgKiAgICAgYXNzZXJ0LmlzTm90RW1wdHkoeyBrZXk6IDcgfSk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90RW1wdHlcbiAgICogQGFsaWFzIG5vdEVtcHR5XG4gICAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fFN0cmluZ3xNYXB8U2V0fSB0YXJnZXRcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAbmFtZXNwYWNlIEFzc2VydFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOb3RFbXB0eSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90RW1wdHksIHRydWUpLnRvLm5vdC5iZS5lbXB0eTtcbiAgfTtcblxuICAvKiFcbiAgICogQWxpYXNlcy5cbiAgICovXG5cbiAgKGZ1bmN0aW9uIGFsaWFzKG5hbWUsIGFzKXtcbiAgICBhc3NlcnRbYXNdID0gYXNzZXJ0W25hbWVdO1xuICAgIHJldHVybiBhbGlhcztcbiAgfSlcbiAgKCdpc09rJywgJ29rJylcbiAgKCdpc05vdE9rJywgJ25vdE9rJylcbiAgKCd0aHJvd3MnLCAndGhyb3cnKVxuICAoJ3Rocm93cycsICdUaHJvdycpXG4gICgnaXNFeHRlbnNpYmxlJywgJ2V4dGVuc2libGUnKVxuICAoJ2lzTm90RXh0ZW5zaWJsZScsICdub3RFeHRlbnNpYmxlJylcbiAgKCdpc1NlYWxlZCcsICdzZWFsZWQnKVxuICAoJ2lzTm90U2VhbGVkJywgJ25vdFNlYWxlZCcpXG4gICgnaXNGcm96ZW4nLCAnZnJvemVuJylcbiAgKCdpc05vdEZyb3plbicsICdub3RGcm96ZW4nKVxuICAoJ2lzRW1wdHknLCAnZW1wdHknKVxuICAoJ2lzTm90RW1wdHknLCAnbm90RW1wdHknKTtcbn07XG4iLCAiLyohXG4gKiBjaGFpXG4gKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxudmFyIHVzZWQgPSBbXTtcblxuLyohXG4gKiBDaGFpIHZlcnNpb25cbiAqL1xuXG5leHBvcnRzLnZlcnNpb24gPSAnNC4zLjgnO1xuXG4vKiFcbiAqIEFzc2VydGlvbiBFcnJvclxuICovXG5cbmV4cG9ydHMuQXNzZXJ0aW9uRXJyb3IgPSByZXF1aXJlKCdhc3NlcnRpb24tZXJyb3InKTtcblxuLyohXG4gKiBVdGlscyBmb3IgcGx1Z2lucyAobm90IGV4cG9ydGVkKVxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi9jaGFpL3V0aWxzJyk7XG5cbi8qKlxuICogIyAudXNlKGZ1bmN0aW9uKVxuICpcbiAqIFByb3ZpZGVzIGEgd2F5IHRvIGV4dGVuZCB0aGUgaW50ZXJuYWxzIG9mIENoYWkuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn1cbiAqIEByZXR1cm5zIHt0aGlzfSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgaWYgKCF+dXNlZC5pbmRleE9mKGZuKSkge1xuICAgIGZuKGV4cG9ydHMsIHV0aWwpO1xuICAgIHVzZWQucHVzaChmbik7XG4gIH1cblxuICByZXR1cm4gZXhwb3J0cztcbn07XG5cbi8qIVxuICogVXRpbGl0eSBGdW5jdGlvbnNcbiAqL1xuXG5leHBvcnRzLnV0aWwgPSB1dGlsO1xuXG4vKiFcbiAqIENvbmZpZ3VyYXRpb25cbiAqL1xuXG52YXIgY29uZmlnID0gcmVxdWlyZSgnLi9jaGFpL2NvbmZpZycpO1xuZXhwb3J0cy5jb25maWcgPSBjb25maWc7XG5cbi8qIVxuICogUHJpbWFyeSBgQXNzZXJ0aW9uYCBwcm90b3R5cGVcbiAqL1xuXG52YXIgYXNzZXJ0aW9uID0gcmVxdWlyZSgnLi9jaGFpL2Fzc2VydGlvbicpO1xuZXhwb3J0cy51c2UoYXNzZXJ0aW9uKTtcblxuLyohXG4gKiBDb3JlIEFzc2VydGlvbnNcbiAqL1xuXG52YXIgY29yZSA9IHJlcXVpcmUoJy4vY2hhaS9jb3JlL2Fzc2VydGlvbnMnKTtcbmV4cG9ydHMudXNlKGNvcmUpO1xuXG4vKiFcbiAqIEV4cGVjdCBpbnRlcmZhY2VcbiAqL1xuXG52YXIgZXhwZWN0ID0gcmVxdWlyZSgnLi9jaGFpL2ludGVyZmFjZS9leHBlY3QnKTtcbmV4cG9ydHMudXNlKGV4cGVjdCk7XG5cbi8qIVxuICogU2hvdWxkIGludGVyZmFjZVxuICovXG5cbnZhciBzaG91bGQgPSByZXF1aXJlKCcuL2NoYWkvaW50ZXJmYWNlL3Nob3VsZCcpO1xuZXhwb3J0cy51c2Uoc2hvdWxkKTtcblxuLyohXG4gKiBBc3NlcnQgaW50ZXJmYWNlXG4gKi9cblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJy4vY2hhaS9pbnRlcmZhY2UvYXNzZXJ0Jyk7XG5leHBvcnRzLnVzZShhc3NlcnQpO1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvY2hhaScpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuZXhwb3J0IHsgdHlwZU9mIH07XG5cbi8qKlxuICogVGhlIGJ1aWx0LWluIHR5cGVvZiBtZXRob2QgaXMga25vd24gdG8gaGF2ZSBzb21lIGhpc3RvcmljYWwgd2Vha25lc3Nlcy4gVGhpcyBmdW5jdGlvbiB0cmllcyB0byBwcm92aWRlIGEgYmV0dGVyIGFuZCBtb3JlIGFjY3VyYXRlIHJlc3VsdC5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvdHlwZW9mLm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS43LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBwcmltaXRpdmVcbiAqL1xuZnVuY3Rpb24gdHlwZU9mKHZhbHVlKSB7XG5cdGxldCB0eXBlID0ge30udG9TdHJpbmcuY2FsbCh2YWx1ZSkubWF0Y2goL1xccyhbYS16QS1aXSspLylbMV07XG5cdGlmIChcIk9iamVjdFwiID09PSB0eXBlKSB7XG5cdFx0Y29uc3QgbmFtZSA9IHZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG5cdFx0aWYgKG5hbWUpIHtcblx0XHRcdHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVzdWx0cyA9IC9eKGNsYXNzfGZ1bmN0aW9uKVxccysoXFx3KykvLmV4ZWMoXG5cdFx0XHR2YWx1ZS5jb25zdHJ1Y3Rvci50b1N0cmluZygpLFxuXHRcdCk7XG5cdFx0dHlwZSA9IHJlc3VsdHMgJiYgcmVzdWx0cy5sZW5ndGggPiAyID8gcmVzdWx0c1syXSA6IFwiXCI7XG5cdH1cblxuXHRyZXR1cm4gdHlwZS50b0xvd2VyQ2FzZSgpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB0eXBlT2YgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZW9mLm1qc1wiO1xuXG5leHBvcnQgeyBleHRlbmQgfTtcblxuLyoqXG4gKiBFeHRlbmQgY29waWVzIGFsbCBlbnVtZXJhYmxlIG93biBwcm9wZXJ0aWVzIGZyb20gb25lIG9yXG4gKiBtb3JlIHNvdXJjZSBvYmplY3RzIHRvIGEgdGFyZ2V0IG9iamVjdC4gSXQgcmV0dXJucyB0aGUgbW9kaWZpZWQgdGFyZ2V0IG9iamVjdC5cbiAqXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEwLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYXJndW1lbnRcbiAqIEB0aHJvd3Mge0Vycm9yfSB0eXBlIG1pc21hdGNoXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYXJndW1lbnRcbiAqIEBwYXJhbSBhcmdzXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZCguLi5hcmdzKSB7XG5cdGxldCBvO1xuXHRsZXQgaTtcblxuXHRpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgfHwgYXJnc1swXSA9PT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgYXJndW1lbnQgJHtKU09OLnN0cmluZ2lmeShhcmdzWzBdKX1gKTtcblx0fVxuXG5cdGZvciAoaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgYSA9IGFyZ3NbaV07XG5cblx0XHRpZiAoIShpc09iamVjdChhKSB8fCBpc0FycmF5KGEpKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBhcmd1bWVudCAke0pTT04uc3RyaW5naWZ5KGEpfWApO1xuXHRcdH1cblxuXHRcdGlmIChvID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG8gPSBhO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBrIGluIGEpIHtcblx0XHRcdGNvbnN0IHYgPSBhPy5ba107XG5cblx0XHRcdGlmICh2ID09PSBvPy5ba10pIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICgoaXNPYmplY3QodikgJiYgdHlwZU9mKHYpID09PSBcIm9iamVjdFwiKSB8fCBpc0FycmF5KHYpKSB7XG5cdFx0XHRcdGlmIChvW2tdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRpZiAoaXNBcnJheSh2KSkge1xuXHRcdFx0XHRcdFx0b1trXSA9IFtdO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvW2tdID0ge307XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmICh0eXBlT2Yob1trXSkgIT09IHR5cGVPZih2KSkge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdFx0XHRgdHlwZSBtaXNtYXRjaDogJHtKU09OLnN0cmluZ2lmeShvW2tdKX0oJHt0eXBlT2YoXG5cdFx0XHRcdFx0XHRcdFx0b1trXSxcblx0XHRcdFx0XHRcdFx0KX0pICE9ICR7SlNPTi5zdHJpbmdpZnkodil9KCR7dHlwZU9mKHYpfSlgLFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoaXNBcnJheShvW2tdKSkge1xuXHRcdFx0XHRcdG9ba10gPSBbXTtcblx0XHRcdFx0XHRvW2tdLnB1c2goLi4udik7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRvW2tdID0gZXh0ZW5kKG9ba10sIHYpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKGlzQXJyYXkobykpIHtcblx0XHRcdFx0XHRvLnB1c2godik7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0b1trXSA9IHY7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG87XG59XG4iLCAiLy8gaHR0cDovL3d3dy5yYWpkZWVwZC5jb20vYXJ0aWNsZXMvY2hyb21lL2xvY2Fsc3RyZy9Mb2NhbFN0b3JhZ2VTYW1wbGUuaHRtXG5cbi8vIE5PVEU6XG4vLyB0aGlzIHZhcmllcyBmcm9tIGFjdHVhbCBsb2NhbFN0b3JhZ2UgaW4gc29tZSBzdWJ0bGUgd2F5c1xuXG4vLyBhbHNvLCB0aGVyZSBpcyBubyBwZXJzaXN0ZW5jZVxuLy8gVE9ETyBwZXJzaXN0XG4oZnVuY3Rpb24gKCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgZnMgPSByZXF1aXJlKCdmcycpO1xuXG4gIGZ1bmN0aW9uIFN0b3JhZ2UocGF0aCwgb3B0cykge1xuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgIHZhciBkYjtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX19fcHJpdl9ia19fXycsIHtcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIHBhdGg6IHBhdGhcbiAgICAgIH1cbiAgICAsIHdyaXRhYmxlOiBmYWxzZVxuICAgICwgZW51bWVyYWJsZTogZmFsc2VcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX19fcHJpdl9zdHJpY3RfX18nLCB7XG4gICAgICB2YWx1ZTogISFvcHRzLnN0cmljdFxuICAgICwgd3JpdGFibGU6IGZhbHNlXG4gICAgLCBlbnVtZXJhYmxlOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfX19wcml2X3dzX19fJywge1xuICAgICAgdmFsdWU6IG9wdHMud3MgfHwgJyAgJ1xuICAgICwgd3JpdGFibGU6IGZhbHNlXG4gICAgLCBlbnVtZXJhYmxlOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGRiID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGF0aCkpO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgZGIgPSB7fTtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhkYikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB0aGlzW2tleV0gPSBkYltrZXldO1xuICAgIH0sIHRoaXMpO1xuICB9XG5cbiAgU3RvcmFnZS5wcm90b3R5cGUuZ2V0SXRlbSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICBpZiAodGhpcy5fX19wcml2X3N0cmljdF9fXykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKHRoaXNba2V5XSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpc1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICBTdG9yYWdlLnByb3RvdHlwZS5zZXRJdGVtID0gZnVuY3Rpb24gKGtleSwgdmFsKSB7XG4gICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzW2tleV0gPSBudWxsO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fX19wcml2X3N0cmljdF9fXykge1xuICAgICAgdGhpc1trZXldID0gU3RyaW5nKHZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba2V5XSA9IHZhbDtcbiAgICB9XG4gICAgdGhpcy5fX19zYXZlX19fKCk7XG4gIH07XG5cbiAgU3RvcmFnZS5wcm90b3R5cGUucmVtb3ZlSXRlbSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICBkZWxldGUgdGhpc1trZXldO1xuICAgIHRoaXMuX19fc2F2ZV9fXygpO1xuICB9O1xuXG4gIFN0b3JhZ2UucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAvLyBmaWx0ZXJzIG91dCBwcm90b3R5cGUga2V5c1xuICAgIE9iamVjdC5rZXlzKHNlbGYpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgc2VsZltrZXldID0gdW5kZWZpbmVkO1xuICAgICAgZGVsZXRlIHNlbGZba2V5XTtcbiAgICB9KTtcbiAgfTtcblxuICBTdG9yYWdlLnByb3RvdHlwZS5rZXkgPSBmdW5jdGlvbiAoaSkge1xuICAgIGkgPSBpIHx8IDA7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMpW2ldO1xuICB9O1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdG9yYWdlLnByb3RvdHlwZSwgJ2xlbmd0aCcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMpLmxlbmd0aDtcbiAgICB9XG4gIH0pO1xuXG4gIFN0b3JhZ2UucHJvdG90eXBlLl9fX3NhdmVfX18gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgaWYgKCF0aGlzLl9fX3ByaXZfYmtfX18ucGF0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9fX3ByaXZfYmtfX18ubG9jaykge1xuICAgICAgdGhpcy5fX19wcml2X2JrX19fLndhaXQgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX19fcHJpdl9ia19fXy5sb2NrID0gdHJ1ZTtcbiAgICBmcy53cml0ZUZpbGUoXG4gICAgICB0aGlzLl9fX3ByaXZfYmtfX18ucGF0aFxuICAgICwgSlNPTi5zdHJpbmdpZnkodGhpcywgbnVsbCwgdGhpcy5fX19wcml2X3dzX19fKVxuICAgICwgJ3V0ZjgnXG4gICAgLCBmdW5jdGlvbiAoZSkge1xuICAgICAgc2VsZi5fX19wcml2X2JrX19fLmxvY2sgPSBmYWxzZTtcbiAgICAgIGlmIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCB3cml0ZSB0byBkYXRhYmFzZScsIHNlbGYuX19fcHJpdl9ia19fXy5wYXRoKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHNlbGYuX19fcHJpdl9ia19fXy53YWl0KSB7XG4gICAgICAgIHNlbGYuX19fcHJpdl9ia19fXy53YWl0ID0gZmFsc2U7XG4gICAgICAgIHNlbGYuX19fc2F2ZV9fXygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdG9yYWdlLCAnY3JlYXRlJywge1xuICAgIHZhbHVlOiBmdW5jdGlvbiAocGF0aCwgb3B0cykge1xuICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlKHBhdGgsIG9wdHMpO1xuICAgIH1cbiAgLCB3cml0YWJsZTogZmFsc2VcbiAgLCBlbnVtZXJhYmxlOiBmYWxzZVxuICB9KTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFN0b3JhZ2U7XG59KCkpO1xuIiwgIihmdW5jdGlvbiAoZXhwb3J0cykge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIGNvbnN0IHJlZk1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgdmFsaWRpdHlNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IGhpZGRlbklucHV0TWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBpbnRlcm5hbHNNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IHZhbGlkYXRpb25NZXNzYWdlTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBmb3Jtc01hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3Qgc2hhZG93SG9zdHNNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IGZvcm1FbGVtZW50c01hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgcmVmVmFsdWVNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IHVwZ3JhZGVNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IHNoYWRvd1Jvb3RNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IHZhbGlkYXRpb25BbmNob3JNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IGRvY3VtZW50RnJhZ21lbnRNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IGNvbm5lY3RlZENhbGxiYWNrTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCB2YWxpZGl0eVVwZ3JhZGVNYXAgPSBuZXcgV2Vha01hcCgpO1xuXG4gICAgY29uc3QgYW9tID0ge1xuICAgICAgICBhcmlhQXRvbWljOiAnYXJpYS1hdG9taWMnLFxuICAgICAgICBhcmlhQXV0b0NvbXBsZXRlOiAnYXJpYS1hdXRvY29tcGxldGUnLFxuICAgICAgICBhcmlhQnVzeTogJ2FyaWEtYnVzeScsXG4gICAgICAgIGFyaWFDaGVja2VkOiAnYXJpYS1jaGVja2VkJyxcbiAgICAgICAgYXJpYUNvbENvdW50OiAnYXJpYS1jb2xjb3VudCcsXG4gICAgICAgIGFyaWFDb2xJbmRleDogJ2FyaWEtY29saW5kZXgnLFxuICAgICAgICBhcmlhQ29sSW5kZXhUZXh0OiAnYXJpYS1jb2xpbmRleHRleHQnLFxuICAgICAgICBhcmlhQ29sU3BhbjogJ2FyaWEtY29sc3BhbicsXG4gICAgICAgIGFyaWFDdXJyZW50OiAnYXJpYS1jdXJyZW50JyxcbiAgICAgICAgYXJpYURpc2FibGVkOiAnYXJpYS1kaXNhYmxlZCcsXG4gICAgICAgIGFyaWFFeHBhbmRlZDogJ2FyaWEtZXhwYW5kZWQnLFxuICAgICAgICBhcmlhSGFzUG9wdXA6ICdhcmlhLWhhc3BvcHVwJyxcbiAgICAgICAgYXJpYUhpZGRlbjogJ2FyaWEtaGlkZGVuJyxcbiAgICAgICAgYXJpYUludmFsaWQ6ICdhcmlhLWludmFsaWQnLFxuICAgICAgICBhcmlhS2V5U2hvcnRjdXRzOiAnYXJpYS1rZXlzaG9ydGN1dHMnLFxuICAgICAgICBhcmlhTGFiZWw6ICdhcmlhLWxhYmVsJyxcbiAgICAgICAgYXJpYUxldmVsOiAnYXJpYS1sZXZlbCcsXG4gICAgICAgIGFyaWFMaXZlOiAnYXJpYS1saXZlJyxcbiAgICAgICAgYXJpYU1vZGFsOiAnYXJpYS1tb2RhbCcsXG4gICAgICAgIGFyaWFNdWx0aUxpbmU6ICdhcmlhLW11bHRpbGluZScsXG4gICAgICAgIGFyaWFNdWx0aVNlbGVjdGFibGU6ICdhcmlhLW11bHRpc2VsZWN0YWJsZScsXG4gICAgICAgIGFyaWFPcmllbnRhdGlvbjogJ2FyaWEtb3JpZW50YXRpb24nLFxuICAgICAgICBhcmlhUGxhY2Vob2xkZXI6ICdhcmlhLXBsYWNlaG9sZGVyJyxcbiAgICAgICAgYXJpYVBvc0luU2V0OiAnYXJpYS1wb3NpbnNldCcsXG4gICAgICAgIGFyaWFQcmVzc2VkOiAnYXJpYS1wcmVzc2VkJyxcbiAgICAgICAgYXJpYVJlYWRPbmx5OiAnYXJpYS1yZWFkb25seScsXG4gICAgICAgIGFyaWFSZWxldmFudDogJ2FyaWEtcmVsZXZhbnQnLFxuICAgICAgICBhcmlhUmVxdWlyZWQ6ICdhcmlhLXJlcXVpcmVkJyxcbiAgICAgICAgYXJpYVJvbGVEZXNjcmlwdGlvbjogJ2FyaWEtcm9sZWRlc2NyaXB0aW9uJyxcbiAgICAgICAgYXJpYVJvd0NvdW50OiAnYXJpYS1yb3djb3VudCcsXG4gICAgICAgIGFyaWFSb3dJbmRleDogJ2FyaWEtcm93aW5kZXgnLFxuICAgICAgICBhcmlhUm93SW5kZXhUZXh0OiAnYXJpYS1yb3dpbmRleHRleHQnLFxuICAgICAgICBhcmlhUm93U3BhbjogJ2FyaWEtcm93c3BhbicsXG4gICAgICAgIGFyaWFTZWxlY3RlZDogJ2FyaWEtc2VsZWN0ZWQnLFxuICAgICAgICBhcmlhU2V0U2l6ZTogJ2FyaWEtc2V0c2l6ZScsXG4gICAgICAgIGFyaWFTb3J0OiAnYXJpYS1zb3J0JyxcbiAgICAgICAgYXJpYVZhbHVlTWF4OiAnYXJpYS12YWx1ZW1heCcsXG4gICAgICAgIGFyaWFWYWx1ZU1pbjogJ2FyaWEtdmFsdWVtaW4nLFxuICAgICAgICBhcmlhVmFsdWVOb3c6ICdhcmlhLXZhbHVlbm93JyxcbiAgICAgICAgYXJpYVZhbHVlVGV4dDogJ2FyaWEtdmFsdWV0ZXh0JyxcbiAgICAgICAgcm9sZTogJ3JvbGUnXG4gICAgfTtcbiAgICBjb25zdCBpbml0QW9tID0gKHJlZiwgaW50ZXJuYWxzKSA9PiB7XG4gICAgICAgIGZvciAobGV0IGtleSBpbiBhb20pIHtcbiAgICAgICAgICAgIGludGVybmFsc1trZXldID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBjbG9zdXJlVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IGFvbVtrZXldO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGludGVybmFscywga2V5LCB7XG4gICAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xvc3VyZVZhbHVlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsb3N1cmVWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVmLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZ3JhZGVNYXAuc2V0KHJlZiwgaW50ZXJuYWxzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGluaXROb2RlKG5vZGUpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gaW50ZXJuYWxzTWFwLmdldChub2RlKTtcbiAgICAgICAgY29uc3QgeyBmb3JtIH0gPSBpbnRlcm5hbHM7XG4gICAgICAgIGluaXRGb3JtKG5vZGUsIGZvcm0sIGludGVybmFscyk7XG4gICAgICAgIGluaXRMYWJlbHMobm9kZSwgaW50ZXJuYWxzLmxhYmVscyk7XG4gICAgfVxuICAgIGNvbnN0IHdhbGtGaWVsZHNldCA9IChub2RlLCBmaXJzdFJlbmRlciA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIobm9kZSwgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQsIHtcbiAgICAgICAgICAgIGFjY2VwdE5vZGUobm9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbHNNYXAuaGFzKG5vZGUpID9cbiAgICAgICAgICAgICAgICAgICAgTm9kZUZpbHRlci5GSUxURVJfQUNDRVBUIDogTm9kZUZpbHRlci5GSUxURVJfU0tJUDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBjdXJyZW50ID0gd2Fsa2VyLm5leHROb2RlKCk7XG4gICAgICAgIGNvbnN0IGlzQ2FsbE5lY2Vzc2FyeSA9ICghZmlyc3RSZW5kZXIgfHwgbm9kZS5kaXNhYmxlZCk7XG4gICAgICAgIHdoaWxlIChjdXJyZW50KSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudC5mb3JtRGlzYWJsZWRDYWxsYmFjayAmJiBpc0NhbGxOZWNlc3NhcnkpIHtcbiAgICAgICAgICAgICAgICBzZXREaXNhYmxlZChjdXJyZW50LCBub2RlLmRpc2FibGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnQgPSB3YWxrZXIubmV4dE5vZGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZGlzYWJsZWRPck5hbWVPYnNlcnZlckNvbmZpZyA9IHsgYXR0cmlidXRlczogdHJ1ZSwgYXR0cmlidXRlRmlsdGVyOiBbJ2Rpc2FibGVkJywgJ25hbWUnXSB9O1xuICAgIGNvbnN0IGRpc2FibGVkT3JOYW1lT2JzZXJ2ZXIgPSBtdXRhdGlvbk9ic2VydmVyRXhpc3RzKCkgPyBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zTGlzdCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9uc0xpc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IG11dGF0aW9uLnRhcmdldDtcbiAgICAgICAgICAgIGlmIChtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lID09PSAnZGlzYWJsZWQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldC5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSkge1xuICAgICAgICAgICAgICAgICAgICBzZXREaXNhYmxlZCh0YXJnZXQsIHRhcmdldC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0YXJnZXQubG9jYWxOYW1lID09PSAnZmllbGRzZXQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhbGtGaWVsZHNldCh0YXJnZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lID09PSAnbmFtZScpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGludGVybmFsc01hcC5nZXQodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZWZWYWx1ZU1hcC5nZXQodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxzLnNldEZvcm1WYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSkgOiB7fTtcbiAgICBmdW5jdGlvbiBvYnNlcnZlckNhbGxiYWNrKG11dGF0aW9uTGlzdCkge1xuICAgICAgICBtdXRhdGlvbkxpc3QuZm9yRWFjaChtdXRhdGlvblJlY29yZCA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGFkZGVkTm9kZXMsIHJlbW92ZWROb2RlcyB9ID0gbXV0YXRpb25SZWNvcmQ7XG4gICAgICAgICAgICBjb25zdCBhZGRlZCA9IEFycmF5LmZyb20oYWRkZWROb2Rlcyk7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkID0gQXJyYXkuZnJvbShyZW1vdmVkTm9kZXMpO1xuICAgICAgICAgICAgYWRkZWQuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxzTWFwLmhhcyhub2RlKSAmJiBub2RlLmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddKSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXROb2RlKG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodXBncmFkZU1hcC5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gdXBncmFkZU1hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFvbUtleXMgPSBPYmplY3Qua2V5cyhhb20pO1xuICAgICAgICAgICAgICAgICAgICBhb21LZXlzXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGtleSA9PiBpbnRlcm5hbHNba2V5XSAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhb21ba2V5XSwgaW50ZXJuYWxzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdXBncmFkZU1hcC5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGl0eVVwZ3JhZGVNYXAuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IHZhbGlkaXR5VXBncmFkZU1hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdpbnRlcm5hbHMtdmFsaWQnLCBpbnRlcm5hbHMudmFsaWRpdHkudmFsaWQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdpbnRlcm5hbHMtaW52YWxpZCcsICghaW50ZXJuYWxzLnZhbGlkaXR5LnZhbGlkKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaW52YWxpZCcsICghaW50ZXJuYWxzLnZhbGlkaXR5LnZhbGlkKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRpdHlVcGdyYWRlTWFwLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWxOYW1lID09PSAnZm9ybScpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybUVsZW1lbnRzID0gZm9ybUVsZW1lbnRzTWFwLmdldChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihub2RlLCBOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0Tm9kZShub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpbnRlcm5hbHNNYXAuaGFzKG5vZGUpICYmIG5vZGUuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10gJiYgIShmb3JtRWxlbWVudHMgJiYgZm9ybUVsZW1lbnRzLmhhcyhub2RlKSkpID8gTm9kZUZpbHRlci5GSUxURVJfQUNDRVBUIDogTm9kZUZpbHRlci5GSUxURVJfU0tJUDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50ID0gd2Fsa2VyLm5leHROb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0Tm9kZShjdXJyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB3YWxrZXIubmV4dE5vZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobm9kZS5sb2NhbE5hbWUgPT09ICdmaWVsZHNldCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRPck5hbWVPYnNlcnZlci5vYnNlcnZlPy4obm9kZSwgZGlzYWJsZWRPck5hbWVPYnNlcnZlckNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIHdhbGtGaWVsZHNldChub2RlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlbW92ZWQuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSBpbnRlcm5hbHNNYXAuZ2V0KG5vZGUpO1xuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHMgJiYgaGlkZGVuSW5wdXRNYXAuZ2V0KGludGVybmFscykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlSGlkZGVuSW5wdXRzKGludGVybmFscyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzaGFkb3dIb3N0c01hcC5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBzaGFkb3dIb3N0c01hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZyYWdtZW50T2JzZXJ2ZXJDYWxsYmFjayhtdXRhdGlvbkxpc3QpIHtcbiAgICAgICAgbXV0YXRpb25MaXN0LmZvckVhY2gobXV0YXRpb24gPT4ge1xuICAgICAgICAgICAgY29uc3QgeyByZW1vdmVkTm9kZXMgfSA9IG11dGF0aW9uO1xuICAgICAgICAgICAgcmVtb3ZlZE5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBkb2N1bWVudEZyYWdtZW50TWFwLmdldChtdXRhdGlvbi50YXJnZXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHNNYXAuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZ3JhZGVJbnRlcm5hbHMobm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgZGVmZXJVcGdyYWRlID0gKGZyYWdtZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnJhZ21lbnRPYnNlcnZlckNhbGxiYWNrKTtcbiAgICAgICAgaWYgKHdpbmRvdz8uU2hhZHlET00/LmluVXNlICYmXG4gICAgICAgICAgICBmcmFnbWVudC5tb2RlICYmXG4gICAgICAgICAgICBmcmFnbWVudC5ob3N0KSB7XG4gICAgICAgICAgICBmcmFnbWVudCA9IGZyYWdtZW50Lmhvc3Q7XG4gICAgICAgIH1cbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZT8uKGZyYWdtZW50LCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgICAgICAgZG9jdW1lbnRGcmFnbWVudE1hcC5zZXQoZnJhZ21lbnQsIG9ic2VydmVyKTtcbiAgICB9O1xuICAgIG11dGF0aW9uT2JzZXJ2ZXJFeGlzdHMoKSA/IG5ldyBNdXRhdGlvbk9ic2VydmVyKG9ic2VydmVyQ2FsbGJhY2spIDoge307XG4gICAgY29uc3Qgb2JzZXJ2ZXJDb25maWcgPSB7XG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgc3VidHJlZTogdHJ1ZVxuICAgIH07XG5cbiAgICBjb25zdCBzZXREaXNhYmxlZCA9IChyZWYsIGRpc2FibGVkKSA9PiB7XG4gICAgICAgIHJlZi50b2dnbGVBdHRyaWJ1dGUoJ2ludGVybmFscy1kaXNhYmxlZCcsIGRpc2FibGVkKTtcbiAgICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJywgJ3RydWUnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlZi5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVmLmZvcm1EaXNhYmxlZENhbGxiYWNrKSB7XG4gICAgICAgICAgICByZWYuZm9ybURpc2FibGVkQ2FsbGJhY2suYXBwbHkocmVmLCBbZGlzYWJsZWRdKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVtb3ZlSGlkZGVuSW5wdXRzID0gKGludGVybmFscykgPT4ge1xuICAgICAgICBjb25zdCBoaWRkZW5JbnB1dHMgPSBoaWRkZW5JbnB1dE1hcC5nZXQoaW50ZXJuYWxzKTtcbiAgICAgICAgaGlkZGVuSW5wdXRzLmZvckVhY2goaGlkZGVuSW5wdXQgPT4ge1xuICAgICAgICAgICAgaGlkZGVuSW5wdXQucmVtb3ZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBoaWRkZW5JbnB1dE1hcC5zZXQoaW50ZXJuYWxzLCBbXSk7XG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVIaWRkZW5JbnB1dCA9IChyZWYsIGludGVybmFscykgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgIGlucHV0LnR5cGUgPSAnaGlkZGVuJztcbiAgICAgICAgaW5wdXQubmFtZSA9IHJlZi5nZXRBdHRyaWJ1dGUoJ25hbWUnKTtcbiAgICAgICAgcmVmLmFmdGVyKGlucHV0KTtcbiAgICAgICAgaGlkZGVuSW5wdXRNYXAuZ2V0KGludGVybmFscykucHVzaChpbnB1dCk7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9O1xuICAgIGNvbnN0IGluaXRSZWYgPSAocmVmLCBpbnRlcm5hbHMpID0+IHtcbiAgICAgICAgaGlkZGVuSW5wdXRNYXAuc2V0KGludGVybmFscywgW10pO1xuICAgICAgICBkaXNhYmxlZE9yTmFtZU9ic2VydmVyLm9ic2VydmU/LihyZWYsIGRpc2FibGVkT3JOYW1lT2JzZXJ2ZXJDb25maWcpO1xuICAgIH07XG4gICAgY29uc3QgaW5pdExhYmVscyA9IChyZWYsIGxhYmVscykgPT4ge1xuICAgICAgICBpZiAobGFiZWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgQXJyYXkuZnJvbShsYWJlbHMpLmZvckVhY2gobGFiZWwgPT4gbGFiZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZWYuY2xpY2suYmluZChyZWYpKSk7XG4gICAgICAgICAgICBsZXQgZmlyc3RMYWJlbElkID0gbGFiZWxzWzBdLmlkO1xuICAgICAgICAgICAgaWYgKCFsYWJlbHNbMF0uaWQpIHtcbiAgICAgICAgICAgICAgICBmaXJzdExhYmVsSWQgPSBgJHtsYWJlbHNbMF0uaHRtbEZvcn1fTGFiZWxgO1xuICAgICAgICAgICAgICAgIGxhYmVsc1swXS5pZCA9IGZpcnN0TGFiZWxJZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIGZpcnN0TGFiZWxJZCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldEZvcm1WYWxpZGl0eSA9IChmb3JtKSA9PiB7XG4gICAgICAgIGNvbnN0IG5hdGl2ZUNvbnRyb2xWYWxpZGl0eSA9IEFycmF5LmZyb20oZm9ybS5lbGVtZW50cylcbiAgICAgICAgICAgIC5maWx0ZXIoKGVsZW1lbnQpID0+ICFlbGVtZW50LnRhZ05hbWUuaW5jbHVkZXMoJy0nKSAmJiBlbGVtZW50LnZhbGlkaXR5KVxuICAgICAgICAgICAgLm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC52YWxpZGl0eS52YWxpZCk7XG4gICAgICAgIGNvbnN0IHBvbHlmaWxsZWRFbGVtZW50cyA9IGZvcm1FbGVtZW50c01hcC5nZXQoZm9ybSkgfHwgW107XG4gICAgICAgIGNvbnN0IHBvbHlmaWxsZWRWYWxpZGl0eSA9IEFycmF5LmZyb20ocG9seWZpbGxlZEVsZW1lbnRzKVxuICAgICAgICAgICAgLmZpbHRlcihjb250cm9sID0+IGNvbnRyb2wuaXNDb25uZWN0ZWQpXG4gICAgICAgICAgICAubWFwKChjb250cm9sKSA9PiBpbnRlcm5hbHNNYXAuZ2V0KGNvbnRyb2wpLnZhbGlkaXR5LnZhbGlkKTtcbiAgICAgICAgY29uc3QgaGFzSW52YWxpZCA9IFsuLi5uYXRpdmVDb250cm9sVmFsaWRpdHksIC4uLnBvbHlmaWxsZWRWYWxpZGl0eV0uaW5jbHVkZXMoZmFsc2UpO1xuICAgICAgICBmb3JtLnRvZ2dsZUF0dHJpYnV0ZSgnaW50ZXJuYWxzLWludmFsaWQnLCBoYXNJbnZhbGlkKTtcbiAgICAgICAgZm9ybS50b2dnbGVBdHRyaWJ1dGUoJ2ludGVybmFscy12YWxpZCcsICFoYXNJbnZhbGlkKTtcbiAgICB9O1xuICAgIGNvbnN0IGZvcm1JbnB1dENhbGxiYWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIHNldEZvcm1WYWxpZGl0eShmaW5kUGFyZW50Rm9ybShldmVudC50YXJnZXQpKTtcbiAgICB9O1xuICAgIGNvbnN0IGZvcm1DaGFuZ2VDYWxsYmFjayA9IChldmVudCkgPT4ge1xuICAgICAgICBzZXRGb3JtVmFsaWRpdHkoZmluZFBhcmVudEZvcm0oZXZlbnQudGFyZ2V0KSk7XG4gICAgfTtcbiAgICBjb25zdCB3aXJlU3VibWl0TG9naWMgPSAoZm9ybSkgPT4ge1xuICAgICAgICBjb25zdCBzdWJtaXRCdXR0b25TZWxlY3RvciA9IFsnYnV0dG9uW3R5cGU9c3VibWl0XScsICdpbnB1dFt0eXBlPXN1Ym1pdF0nLCAnYnV0dG9uOm5vdChbdHlwZV0pJ11cbiAgICAgICAgICAgIC5tYXAoc2VsID0+IGAke3NlbH06bm90KFtkaXNhYmxlZF0pYClcbiAgICAgICAgICAgIC5tYXAoc2VsID0+IGAke3NlbH06bm90KFtmb3JtXSkke2Zvcm0uaWQgPyBgLCR7c2VsfVtmb3JtPScke2Zvcm0uaWR9J11gIDogJyd9YClcbiAgICAgICAgICAgIC5qb2luKCcsJyk7XG4gICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgICAgICBpZiAodGFyZ2V0LmNsb3Nlc3Qoc3VibWl0QnV0dG9uU2VsZWN0b3IpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBmb3JtRWxlbWVudHNNYXAuZ2V0KGZvcm0pO1xuICAgICAgICAgICAgICAgIGlmIChmb3JtLm5vVmFsaWRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudHMuc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IEFycmF5LmZyb20oZWxlbWVudHMpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGl0eUxpc3QgPSBub2Rlc1xuICAgICAgICAgICAgICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChub2RlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGludGVybmFsc01hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxzLnJlcG9ydFZhbGlkaXR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRpdHlMaXN0LmluY2x1ZGVzKGZhbHNlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBmb3JtUmVzZXRDYWxsYmFjayA9IChldmVudCkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IGZvcm1FbGVtZW50c01hcC5nZXQoZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgaWYgKGVsZW1lbnRzICYmIGVsZW1lbnRzLnNpemUpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuY29uc3RydWN0b3IuZm9ybUFzc29jaWF0ZWQgJiYgZWxlbWVudC5mb3JtUmVzZXRDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmZvcm1SZXNldENhbGxiYWNrLmFwcGx5KGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpbml0Rm9ybSA9IChyZWYsIGZvcm0sIGludGVybmFscykgPT4ge1xuICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgY29uc3QgZm9ybUVsZW1lbnRzID0gZm9ybUVsZW1lbnRzTWFwLmdldChmb3JtKTtcbiAgICAgICAgICAgIGlmIChmb3JtRWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBmb3JtRWxlbWVudHMuYWRkKHJlZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbml0U2V0ID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgICAgIGluaXRTZXQuYWRkKHJlZik7XG4gICAgICAgICAgICAgICAgZm9ybUVsZW1lbnRzTWFwLnNldChmb3JtLCBpbml0U2V0KTtcbiAgICAgICAgICAgICAgICB3aXJlU3VibWl0TG9naWMoZm9ybSk7XG4gICAgICAgICAgICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdyZXNldCcsIGZvcm1SZXNldENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZm9ybUlucHV0Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZm9ybUNoYW5nZUNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvcm1zTWFwLnNldChmb3JtLCB7IHJlZiwgaW50ZXJuYWxzIH0pO1xuICAgICAgICAgICAgaWYgKHJlZi5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSAmJiByZWYuZm9ybUFzc29jaWF0ZWRDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWYuZm9ybUFzc29jaWF0ZWRDYWxsYmFjay5hcHBseShyZWYsIFtmb3JtXSk7XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRGb3JtVmFsaWRpdHkoZm9ybSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRQYXJlbnRGb3JtID0gKGVsZW0pID0+IHtcbiAgICAgICAgbGV0IHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcbiAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQudGFnTmFtZSAhPT0gJ0ZPUk0nKSB7XG4gICAgICAgICAgICBwYXJlbnQgPSBmaW5kUGFyZW50Rm9ybShwYXJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfTtcbiAgICBjb25zdCB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQgPSAocmVmLCBtZXNzYWdlLCBFcnJvclR5cGUgPSBET01FeGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKCFyZWYuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvclR5cGUobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG92ZXJyaWRlRm9ybU1ldGhvZCA9IChmb3JtLCByZXR1cm5WYWx1ZSwgbWV0aG9kKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZm9ybUVsZW1lbnRzTWFwLmdldChmb3JtKTtcbiAgICAgICAgaWYgKGVsZW1lbnRzICYmIGVsZW1lbnRzLnNpemUpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gaW50ZXJuYWxzTWFwLmdldChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZCA9IGludGVybmFsc1ttZXRob2RdKCk7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICB9O1xuICAgIGNvbnN0IHVwZ3JhZGVJbnRlcm5hbHMgPSAocmVmKSA9PiB7XG4gICAgICAgIGlmIChyZWYuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10pIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGludGVybmFsc01hcC5nZXQocmVmKTtcbiAgICAgICAgICAgIGNvbnN0IHsgbGFiZWxzLCBmb3JtIH0gPSBpbnRlcm5hbHM7XG4gICAgICAgICAgICBpbml0TGFiZWxzKHJlZiwgbGFiZWxzKTtcbiAgICAgICAgICAgIGluaXRGb3JtKHJlZiwgZm9ybSwgaW50ZXJuYWxzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gbXV0YXRpb25PYnNlcnZlckV4aXN0cygpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJztcbiAgICB9XG5cbiAgICBjbGFzcyBWYWxpZGl0eVN0YXRlIHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICB0aGlzLmJhZElucHV0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUVycm9yID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnBhdHRlcm5NaXNtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yYW5nZU92ZXJmbG93ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJhbmdlVW5kZXJmbG93ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnN0ZXBNaXNtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50b29Mb25nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRvb1Nob3J0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnR5cGVNaXNtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy52YWxpZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnZhbHVlTWlzc2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgT2JqZWN0LnNlYWwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc2V0VmFsaWQgPSAodmFsaWRpdHlPYmplY3QpID0+IHtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QuYmFkSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QuY3VzdG9tRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QucGF0dGVybk1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnJhbmdlT3ZlcmZsb3cgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QucmFuZ2VVbmRlcmZsb3cgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3Quc3RlcE1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnRvb0xvbmcgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QudG9vU2hvcnQgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QudHlwZU1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QudmFsdWVNaXNzaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB2YWxpZGl0eU9iamVjdDtcbiAgICB9O1xuICAgIGNvbnN0IHJlY29uY2lsZVZhbGlkaXR5ID0gKHZhbGlkaXR5T2JqZWN0LCBuZXdTdGF0ZSwgZm9ybSkgPT4ge1xuICAgICAgICB2YWxpZGl0eU9iamVjdC52YWxpZCA9IGlzVmFsaWQobmV3U3RhdGUpO1xuICAgICAgICBPYmplY3Qua2V5cyhuZXdTdGF0ZSkuZm9yRWFjaChrZXkgPT4gdmFsaWRpdHlPYmplY3Rba2V5XSA9IG5ld1N0YXRlW2tleV0pO1xuICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgc2V0Rm9ybVZhbGlkaXR5KGZvcm0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZGl0eU9iamVjdDtcbiAgICB9O1xuICAgIGNvbnN0IGlzVmFsaWQgPSAodmFsaWRpdHlTdGF0ZSkgPT4ge1xuICAgICAgICBsZXQgdmFsaWQgPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBrZXkgaW4gdmFsaWRpdHlTdGF0ZSkge1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gJ3ZhbGlkJyAmJiB2YWxpZGl0eVN0YXRlW2tleV0gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgfTtcblxuICAgIGNvbnN0IGN1c3RvbVN0YXRlTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBmdW5jdGlvbiBhZGRTdGF0ZShyZWYsIHN0YXRlTmFtZSkge1xuICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKHN0YXRlTmFtZSwgdHJ1ZSk7XG4gICAgICAgIGlmIChyZWYucGFydCkge1xuICAgICAgICAgICAgcmVmLnBhcnQuYWRkKHN0YXRlTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xhc3MgQ3VzdG9tU3RhdGVTZXQgZXh0ZW5kcyBTZXQge1xuICAgICAgICBzdGF0aWMgZ2V0IGlzUG9seWZpbGxlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cnVjdG9yKHJlZikge1xuICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgIGlmICghcmVmIHx8ICFyZWYudGFnTmFtZSB8fCByZWYudGFnTmFtZS5pbmRleE9mKCctJykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBjb25zdHJ1Y3RvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VzdG9tU3RhdGVNYXAuc2V0KHRoaXMsIHJlZik7XG4gICAgICAgIH1cbiAgICAgICAgYWRkKHN0YXRlKSB7XG4gICAgICAgICAgICBpZiAoIS9eLS0vLnRlc3Qoc3RhdGUpIHx8IHR5cGVvZiBzdGF0ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGBGYWlsZWQgdG8gZXhlY3V0ZSAnYWRkJyBvbiAnQ3VzdG9tU3RhdGVTZXQnOiBUaGUgc3BlY2lmaWVkIHZhbHVlICR7c3RhdGV9IG11c3Qgc3RhcnQgd2l0aCAnLS0nLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3VwZXIuYWRkKHN0YXRlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IGN1c3RvbVN0YXRlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlTmFtZSA9IGBzdGF0ZSR7c3RhdGV9YDtcbiAgICAgICAgICAgIGlmIChyZWYuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBhZGRTdGF0ZShyZWYsIHN0YXRlTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUocmVmLCBzdGF0ZU5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBjbGVhcigpIHtcbiAgICAgICAgICAgIGZvciAobGV0IFtlbnRyeV0gb2YgdGhpcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZShlbnRyeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdXBlci5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZShzdGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3VwZXIuZGVsZXRlKHN0YXRlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IGN1c3RvbVN0YXRlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGlmIChyZWYuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKGBzdGF0ZSR7c3RhdGV9YCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChyZWYucGFydCkge1xuICAgICAgICAgICAgICAgICAgICByZWYucGFydC5yZW1vdmUoYHN0YXRlJHtzdGF0ZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVmLnRvZ2dsZUF0dHJpYnV0ZShgc3RhdGUke3N0YXRlfWAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZi5wYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYucGFydC5yZW1vdmUoYHN0YXRlJHtzdGF0ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gICAgICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICAgICAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gICAgICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICAgICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cztcbiAgICBjbGFzcyBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbiB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRzKSB7XG4gICAgICAgICAgICBfSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25fZWxlbWVudHMuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cywgZWxlbWVudHMsIFwiZlwiKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGVsZW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgIHRoaXNbaV0gPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnbmFtZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ25hbWUnKV0gPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cywgXCJmXCIpLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBbKF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cyA9IG5ldyBXZWFrTWFwKCksIFN5bWJvbC5pdGVyYXRvcildKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uX2VsZW1lbnRzLCBcImZcIilbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW0oaSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbaV0gPT0gbnVsbCA/IG51bGwgOiB0aGlzW2ldO1xuICAgICAgICB9XG4gICAgICAgIG5hbWVkSXRlbShuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1tuYW1lXSA9PSBudWxsID8gbnVsbCA6IHRoaXNbbmFtZV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXRjaEZvcm1Qcm90b3R5cGUoKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrVmFsaWRpdHkgPSBIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLmNoZWNrVmFsaWRpdHk7XG4gICAgICAgIEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUuY2hlY2tWYWxpZGl0eSA9IGNoZWNrVmFsaWRpdHlPdmVycmlkZTtcbiAgICAgICAgY29uc3QgcmVwb3J0VmFsaWRpdHkgPSBIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLnJlcG9ydFZhbGlkaXR5O1xuICAgICAgICBIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLnJlcG9ydFZhbGlkaXR5ID0gcmVwb3J0VmFsaWRpdHlPdmVycmlkZTtcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tWYWxpZGl0eU92ZXJyaWRlKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IGNoZWNrVmFsaWRpdHkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVGb3JtTWV0aG9kKHRoaXMsIHJldHVyblZhbHVlLCAnY2hlY2tWYWxpZGl0eScpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlcG9ydFZhbGlkaXR5T3ZlcnJpZGUoLi4uYXJncykge1xuICAgICAgICAgICAgbGV0IHJldHVyblZhbHVlID0gcmVwb3J0VmFsaWRpdHkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVGb3JtTWV0aG9kKHRoaXMsIHJldHVyblZhbHVlLCAncmVwb3J0VmFsaWRpdHknKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGdldCB9ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLCAnZWxlbWVudHMnKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUsICdlbGVtZW50cycsIHtcbiAgICAgICAgICAgIGdldCguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBnZXQuY2FsbCh0aGlzLCAuLi5hcmdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2x5ZmlsbGVkRWxlbWVudHMgPSBBcnJheS5mcm9tKGZvcm1FbGVtZW50c01hcC5nZXQodGhpcykgfHwgW10pO1xuICAgICAgICAgICAgICAgIGlmIChwb2x5ZmlsbGVkRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JkZXJlZEVsZW1lbnRzID0gQXJyYXkuZnJvbShlbGVtZW50cykuY29uY2F0KHBvbHlmaWxsZWRFbGVtZW50cykuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiAyID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24ob3JkZXJlZEVsZW1lbnRzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsYXNzIEVsZW1lbnRJbnRlcm5hbHMge1xuICAgICAgICBzdGF0aWMgZ2V0IGlzUG9seWZpbGxlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cnVjdG9yKHJlZikge1xuICAgICAgICAgICAgaWYgKCFyZWYgfHwgIXJlZi50YWdOYW1lIHx8IHJlZi50YWdOYW1lLmluZGV4T2YoJy0nKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIGNvbnN0cnVjdG9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByb290Tm9kZSA9IHJlZi5nZXRSb290Tm9kZSgpO1xuICAgICAgICAgICAgY29uc3QgdmFsaWRpdHkgPSBuZXcgVmFsaWRpdHlTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZXMgPSBuZXcgQ3VzdG9tU3RhdGVTZXQocmVmKTtcbiAgICAgICAgICAgIHJlZk1hcC5zZXQodGhpcywgcmVmKTtcbiAgICAgICAgICAgIHZhbGlkaXR5TWFwLnNldCh0aGlzLCB2YWxpZGl0eSk7XG4gICAgICAgICAgICBpbnRlcm5hbHNNYXAuc2V0KHJlZiwgdGhpcyk7XG4gICAgICAgICAgICBpbml0QW9tKHJlZiwgdGhpcyk7XG4gICAgICAgICAgICBpbml0UmVmKHJlZiwgdGhpcyk7XG4gICAgICAgICAgICBPYmplY3Quc2VhbCh0aGlzKTtcbiAgICAgICAgICAgIGlmIChyb290Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgICAgICAgICAgICBkZWZlclVwZ3JhZGUocm9vdE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNoZWNrVmFsaWRpdHkoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byBleGVjdXRlICdjaGVja1ZhbGlkaXR5JyBvbiAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMud2lsbFZhbGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWxpZGl0eSA9IHZhbGlkaXR5TWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGlmICghdmFsaWRpdHkudmFsaWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGl0eUV2ZW50ID0gbmV3IEV2ZW50KCdpbnZhbGlkJywge1xuICAgICAgICAgICAgICAgICAgICBidWJibGVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmVmLmRpc3BhdGNoRXZlbnQodmFsaWRpdHlFdmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRpdHkudmFsaWQ7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGZvcm0oKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byByZWFkIHRoZSAnZm9ybScgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBsZXQgZm9ybTtcbiAgICAgICAgICAgIGlmIChyZWYuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBmb3JtID0gZmluZFBhcmVudEZvcm0ocmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgICB9XG4gICAgICAgIGdldCBsYWJlbHMoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byByZWFkIHRoZSAnbGFiZWxzJyBwcm9wZXJ0eSBmcm9tICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHRhcmdldCBlbGVtZW50IGlzIG5vdCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5gKTtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gcmVmLmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgICAgIGNvbnN0IGhvc3RSb290ID0gcmVmLmdldFJvb3ROb2RlKCk7XG4gICAgICAgICAgICBpZiAoaG9zdFJvb3QgJiYgaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG9zdFJvb3QucXVlcnlTZWxlY3RvckFsbChgW2Zvcj1cIiR7aWR9XCJdYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmVwb3J0VmFsaWRpdHkoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byBleGVjdXRlICdyZXBvcnRWYWxpZGl0eScgb24gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgaWYgKCF0aGlzLndpbGxWYWxpZGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSB0aGlzLmNoZWNrVmFsaWRpdHkoKTtcbiAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IHZhbGlkYXRpb25BbmNob3JNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgaWYgKGFuY2hvciAmJiAhcmVmLmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihgRmFpbGVkIHRvIGV4ZWN1dGUgJ3JlcG9ydFZhbGlkaXR5JyBvbiAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXZhbGlkICYmIGFuY2hvcikge1xuICAgICAgICAgICAgICAgIHJlZi5mb2N1cygpO1xuICAgICAgICAgICAgICAgIGFuY2hvci5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgICAgICB9XG4gICAgICAgIHNldEZvcm1WYWx1ZSh2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0Rm9ybVZhbHVlJyBvbiAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICByZW1vdmVIaWRkZW5JbnB1dHModGhpcyk7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZi5nZXRBdHRyaWJ1dGUoJ25hbWUnKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoaWRkZW5JbnB1dCA9IGNyZWF0ZUhpZGRlbklucHV0KHJlZiwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbklucHV0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh2YWx1ZSkucmV2ZXJzZSgpLmZvckVhY2goKFtmb3JtRGF0YUtleSwgZm9ybURhdGFWYWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmb3JtRGF0YVZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGlkZGVuSW5wdXQgPSBjcmVhdGVIaWRkZW5JbnB1dChyZWYsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuSW5wdXQubmFtZSA9IGZvcm1EYXRhS2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuSW5wdXQudmFsdWUgPSBmb3JtRGF0YVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWZWYWx1ZU1hcC5zZXQocmVmLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VmFsaWRpdHkodmFsaWRpdHlDaGFuZ2VzLCB2YWxpZGF0aW9uTWVzc2FnZSwgYW5jaG9yKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byBleGVjdXRlICdzZXRWYWxpZGl0eScgb24gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgaWYgKCF2YWxpZGl0eUNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gZXhlY3V0ZSBcXCdzZXRWYWxpZGl0eVxcJyBvbiBcXCdFbGVtZW50SW50ZXJuYWxzXFwnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSAwIHByZXNlbnQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWxpZGF0aW9uQW5jaG9yTWFwLnNldCh0aGlzLCBhbmNob3IpO1xuICAgICAgICAgICAgY29uc3QgdmFsaWRpdHkgPSB2YWxpZGl0eU1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGl0eUNoYW5nZXNPYmogPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHZhbGlkaXR5Q2hhbmdlcykge1xuICAgICAgICAgICAgICAgIHZhbGlkaXR5Q2hhbmdlc09ialtrZXldID0gdmFsaWRpdHlDaGFuZ2VzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXModmFsaWRpdHlDaGFuZ2VzT2JqKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBzZXRWYWxpZCh2YWxpZGl0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjaGVjayA9IHsgLi4udmFsaWRpdHksIC4uLnZhbGlkaXR5Q2hhbmdlc09iaiB9O1xuICAgICAgICAgICAgZGVsZXRlIGNoZWNrLnZhbGlkO1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCB9ID0gcmVjb25jaWxlVmFsaWRpdHkodmFsaWRpdHksIGNoZWNrLCB0aGlzLmZvcm0pO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCAmJiAhdmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGBGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0VmFsaWRpdHknIG9uICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHNlY29uZCBhcmd1bWVudCBzaG91bGQgbm90IGJlIGVtcHR5IGlmIG9uZSBvciBtb3JlIGZsYWdzIGluIHRoZSBmaXJzdCBhcmd1bWVudCBhcmUgdHJ1ZS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbGlkYXRpb25NZXNzYWdlTWFwLnNldCh0aGlzLCB2YWxpZCA/ICcnIDogdmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgICAgICAgICAgaWYgKHJlZi5pc0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgIHJlZi50b2dnbGVBdHRyaWJ1dGUoJ2ludGVybmFscy1pbnZhbGlkJywgIXZhbGlkKTtcbiAgICAgICAgICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKCdpbnRlcm5hbHMtdmFsaWQnLCB2YWxpZCk7XG4gICAgICAgICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1pbnZhbGlkJywgYCR7IXZhbGlkfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsaWRpdHlVcGdyYWRlTWFwLnNldChyZWYsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdldCBzaGFkb3dSb290KCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBzaGFkb3dSb290TWFwLmdldChyZWYpO1xuICAgICAgICAgICAgaWYgKHNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIHJlYWQgdGhlICd2YWxpZGF0aW9uTWVzc2FnZScgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VNYXAuZ2V0KHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGdldCB2YWxpZGl0eSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIHJlYWQgdGhlICd2YWxpZGl0eScgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGl0eSA9IHZhbGlkaXR5TWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGl0eTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgd2lsbFZhbGlkYXRlKCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gcmVhZCB0aGUgJ3dpbGxWYWxpZGF0ZScgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBpZiAoKHJlZi5kaXNhYmxlZCB8fCByZWYuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSB8fFxuICAgICAgICAgICAgICAgIHJlZi5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc0VsZW1lbnRJbnRlcm5hbHNTdXBwb3J0ZWQoKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhd2luZG93LkVsZW1lbnRJbnRlcm5hbHMgfHwgIUhUTUxFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hJbnRlcm5hbHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjbGFzcyBFbGVtZW50SW50ZXJuYWxzRmVhdHVyZURldGVjdGlvbiBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbHMgPSB0aGlzLmF0dGFjaEludGVybmFscygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJhbmRvbU5hbWUgPSBgZWxlbWVudC1pbnRlcm5hbHMtZmVhdHVyZS1kZXRlY3Rpb24tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5yZXBsYWNlKC9bXmEtel0rL2csICcnKX1gO1xuICAgICAgICBjdXN0b21FbGVtZW50cy5kZWZpbmUocmFuZG9tTmFtZSwgRWxlbWVudEludGVybmFsc0ZlYXR1cmVEZXRlY3Rpb24pO1xuICAgICAgICBjb25zdCBmZWF0dXJlRGV0ZWN0aW9uRWxlbWVudCA9IG5ldyBFbGVtZW50SW50ZXJuYWxzRmVhdHVyZURldGVjdGlvbigpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ3NoYWRvd1Jvb3QnLFxuICAgICAgICAgICAgJ2Zvcm0nLFxuICAgICAgICAgICAgJ3dpbGxWYWxpZGF0ZScsXG4gICAgICAgICAgICAndmFsaWRpdHknLFxuICAgICAgICAgICAgJ3ZhbGlkYXRpb25NZXNzYWdlJyxcbiAgICAgICAgICAgICdsYWJlbHMnLFxuICAgICAgICAgICAgJ3NldEZvcm1WYWx1ZScsXG4gICAgICAgICAgICAnc2V0VmFsaWRpdHknLFxuICAgICAgICAgICAgJ2NoZWNrVmFsaWRpdHknLFxuICAgICAgICAgICAgJ3JlcG9ydFZhbGlkaXR5J1xuICAgICAgICBdLmV2ZXJ5KHByb3AgPT4gcHJvcCBpbiBmZWF0dXJlRGV0ZWN0aW9uRWxlbWVudC5pbnRlcm5hbHMpO1xuICAgIH1cbiAgICBsZXQgaGFzRWxlbWVudEludGVybmFsc1BvbHlmaWxsQmVlbkFwcGxpZWQgPSBmYWxzZTtcbiAgICBsZXQgaGFzQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbEJlZW5BcHBsaWVkID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gZm9yY2VDdXN0b21TdGF0ZVNldFBvbHlmaWxsKGF0dGFjaEludGVybmFscykge1xuICAgICAgICBpZiAoaGFzQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbEJlZW5BcHBsaWVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaGFzQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbEJlZW5BcHBsaWVkID0gdHJ1ZTtcbiAgICAgICAgd2luZG93LkN1c3RvbVN0YXRlU2V0ID0gQ3VzdG9tU3RhdGVTZXQ7XG4gICAgICAgIGlmIChhdHRhY2hJbnRlcm5hbHMpIHtcbiAgICAgICAgICAgIEhUTUxFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hJbnRlcm5hbHMgPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGF0dGFjaEludGVybmFscy5jYWxsKHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIGludGVybmFscy5zdGF0ZXMgPSBuZXcgQ3VzdG9tU3RhdGVTZXQodGhpcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFscztcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZm9yY2VFbGVtZW50SW50ZXJuYWxzUG9seWZpbGwoZm9yY2VDdXN0b21TdGF0ZVNldCA9IHRydWUpIHtcbiAgICAgICAgaWYgKGhhc0VsZW1lbnRJbnRlcm5hbHNQb2x5ZmlsbEJlZW5BcHBsaWVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaGFzRWxlbWVudEludGVybmFsc1BvbHlmaWxsQmVlbkFwcGxpZWQgPSB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHdpbmRvdy5FbGVtZW50SW50ZXJuYWxzID0gRWxlbWVudEludGVybmFscztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIEN1c3RvbUVsZW1lbnRSZWdpc3RyeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluZSA9IEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5wcm90b3R5cGUuZGVmaW5lO1xuICAgICAgICAgICAgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LnByb3RvdHlwZS5kZWZpbmUgPSBmdW5jdGlvbiAobmFtZSwgY29uc3RydWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29uc3RydWN0b3IuZm9ybUFzc29jaWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29ubmVjdGVkQ2FsbGJhY2sgPSBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25uZWN0ZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29ubmVjdGVkQ2FsbGJhY2tNYXAuaGFzKHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkQ2FsbGJhY2tNYXAuc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXREaXNhYmxlZCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdGVkQ2FsbGJhY2sgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RlZENhbGxiYWNrLmFwcGx5KHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdXBncmFkZUludGVybmFscyh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmaW5lLmNhbGwodGhpcywgbmFtZSwgY29uc3RydWN0b3IsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgSFRNTEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaEludGVybmFscyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGFnTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudGFnTmFtZS5pbmRleE9mKCctJykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGV4ZWN1dGUgJ2F0dGFjaEludGVybmFscycgb24gJ0hUTUxFbGVtZW50JzogVW5hYmxlIHRvIGF0dGFjaCBFbGVtZW50SW50ZXJuYWxzIHRvIG5vbi1jdXN0b20gZWxlbWVudHMuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHNNYXAuaGFzKHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oYERPTUV4Y2VwdGlvbjogRmFpbGVkIHRvIGV4ZWN1dGUgJ2F0dGFjaEludGVybmFscycgb24gJ0hUTUxFbGVtZW50JzogRWxlbWVudEludGVybmFscyBmb3IgdGhlIHNwZWNpZmllZCBlbGVtZW50IHdhcyBhbHJlYWR5IGF0dGFjaGVkLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVsZW1lbnRJbnRlcm5hbHModGhpcyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGF0dGFjaFNoYWRvd09ic2VydmVyKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaGFkb3dSb290ID0gYXR0YWNoU2hhZG93LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIHNoYWRvd1Jvb3RNYXAuc2V0KHRoaXMsIHNoYWRvd1Jvb3QpO1xuICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbk9ic2VydmVyRXhpc3RzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihvYnNlcnZlckNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5TaGFkeURPTSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCBvYnNlcnZlckNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHNoYWRvd1Jvb3QsIG9ic2VydmVyQ29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzaGFkb3dIb3N0c01hcC5zZXQodGhpcywgb2JzZXJ2ZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaFNoYWRvdyA9IEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvdztcbiAgICAgICAgICAgIEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvdyA9IGF0dGFjaFNoYWRvd09ic2VydmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtdXRhdGlvbk9ic2VydmVyRXhpc3RzKCkgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG9ic2VydmVyQ2FsbGJhY2spO1xuICAgICAgICAgICAgZG9jdW1lbnRPYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgb2JzZXJ2ZXJDb25maWcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgSFRNTEZvcm1FbGVtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcGF0Y2hGb3JtUHJvdG90eXBlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcmNlQ3VzdG9tU3RhdGVTZXQgfHxcbiAgICAgICAgICAgICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmICF3aW5kb3cuQ3VzdG9tU3RhdGVTZXQpKSB7XG4gICAgICAgICAgICBmb3JjZUN1c3RvbVN0YXRlU2V0UG9seWZpbGwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGlzQ2VQb2x5ZmlsbCA9ICEhY3VzdG9tRWxlbWVudHMucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjaztcbiAgICBpZiAoIWlzQ2VQb2x5ZmlsbCkge1xuICAgICAgICBpZiAoIWlzRWxlbWVudEludGVybmFsc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgICAgICBmb3JjZUVsZW1lbnRJbnRlcm5hbHNQb2x5ZmlsbChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiAhd2luZG93LkN1c3RvbVN0YXRlU2V0KSB7XG4gICAgICAgICAgICBmb3JjZUN1c3RvbVN0YXRlU2V0UG9seWZpbGwoSFRNTEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaEludGVybmFscyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBvcnRzLmZvcmNlQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbCA9IGZvcmNlQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbDtcbiAgICBleHBvcnRzLmZvcmNlRWxlbWVudEludGVybmFsc1BvbHlmaWxsID0gZm9yY2VFbGVtZW50SW50ZXJuYWxzUG9seWZpbGw7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4gICAgcmV0dXJuIGV4cG9ydHM7XG5cbn0pKHt9KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAyMDIzIHNjaHVrYWkgR21iSFxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuLyoqXG4gKiBQcm9wZXJ0eS1LZXlzXG4gKiBAYXV0aG9yIHNjaHVrYWkgR21iSFxuICovXG5cbmV4cG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnRlcm5hbFN0YXRlU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQG1lbWJlck9mIE1vbnN0ZXJcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBpbnRlcm5hbFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2ludGVybmFsXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQG1lbWJlck9mIE1vbnN0ZXJcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBpbnRlcm5hbFN0YXRlU3ltYm9sID0gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvc3RhdGVcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGluc3RhbmNlU3ltYm9sID0gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvaW5zdGFuY2VcIik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEJhc2UgfTtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBiYXNlIGNsYXNzIGZyb20gd2hpY2ggdGhlIG1vc3QgY2xhc3NlcyBhcmUgZGVyaXZlZC5cbiAqXG4gKiBUaGlzIGNsYXNzIGhhcyBiZXNpZGVzIGEgYHRvU3RyaW5nYCB3aGljaCByZXR1cm5zIHRoZSBqc29uIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3RcbiAqIGFsc28gYSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzLlxuICpcbiAqIFRoZXJlZm9yIHRoZSBjbGFzcyBoYXMgYSBzdGF0aWMgbWV0aG9kIGAgW1N5bWJvbC5oYXNJbnN0YW5jZV0odGhhdClgIHdoaWNoIHJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0XG4gKiBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MuXG4gKlxuICogQHNlZSBbaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3ltYm9sL2hhc0luc3RhbmNlXShkZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3ltYm9sL2hhc0luc3RhbmNlKVxuICpcbiAqIERlcml2ZWQgY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50IGEgc3RhdGljIGdldHRlciBgaW5zdGFuY2VTeW1ib2xgIHdoaWNoIHJldHVybnMgYSB1bmlxdWUgc3ltYm9sLlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcbiAqICAgIHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9iYXNlXCIpO1xuICogfVxuICogYGBgXG4gKlxuICogVGhlIGNsYXNzIHdhcyBmb3JtZXJseSBjYWxsZWQgT2JqZWN0LlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuY2xhc3MgQmFzZSBleHRlbmRzIE9iamVjdCB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvYmFzZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHBhcmFtIHRoYXRcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdKHRoYXQpIHtcblx0XHRpZiAoXG5cdFx0XHR0aGF0ID09PSB1bmRlZmluZWQgfHxcblx0XHRcdHRoYXQgPT09IG51bGwgfHxcblx0XHRcdCh0eXBlb2YgdGhhdCAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdGhhdCAhPT0gXCJmdW5jdGlvblwiKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRoYXRDbGFzcyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGF0KTtcblx0XHRpZiAoXG5cdFx0XHR0aGF0Q2xhc3MgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0dGhhdENsYXNzID09PSBudWxsIHx8XG5cdFx0XHQodHlwZW9mIHRoYXRDbGFzcyAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdGhhdENsYXNzICE9PSBcImZ1bmN0aW9uXCIpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKGNoZWNrSW5zdGFuY2VTeW1ib2wuYXBwbHkodGhpcywgW3RoYXRDbGFzc10pID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyB0aGlzIGNhbGwgdGhlIHN0YXRpYyBtZXRob2Qgb2YgdGhlIHN1cGVyIGNsYXNzLCBpZiB0aGVyZSBpcyBvbmVcblx0XHRyZXR1cm4gc3VwZXJbU3ltYm9sLmhhc0luc3RhbmNlXSh0aGF0KTtcblx0fVxufVxuXG4vKipcbiAqIHRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBjbGFzcyBoYXMgYSBzdGF0aWMgZ2V0dGVyIGBpbnN0YW5jZVN5bWJvbGAgYW5kIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIGdldHRlciBpcyBlcXVhbCB0byB0aGVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG9ialxuICogQHJldHVybnMge2Jvb2xlYW58YW55fGJvb2xlYW59XG4gKiBAc2luY2UgMi4xLjBcbiAqL1xuZnVuY3Rpb24gY2hlY2tJbnN0YW5jZVN5bWJvbChvYmopIHtcblx0aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoaW5zdGFuY2VTeW1ib2wpID09PSBmYWxzZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGNvbnN0IHByb3RvID0gb2JqPy5jb25zdHJ1Y3Rvcjtcblx0aWYgKFxuXHRcdHByb3RvID09PSB1bmRlZmluZWQgfHxcblx0XHRwcm90byA9PT0gbnVsbCB8fFxuXHRcdCh0eXBlb2YgcHJvdG8gIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHByb3RvICE9PSBcImZ1bmN0aW9uXCIpXG5cdCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmIChwcm90by5oYXNPd25Qcm9wZXJ0eShpbnN0YW5jZVN5bWJvbCkgIT09IHRydWUpIHtcblx0XHRyZXR1cm4gY2hlY2tJbnN0YW5jZVN5bWJvbC5hcHBseSh0aGlzLCBbb2JqLl9fcHJvdG9fX10pO1xuXHR9XG5cblx0Y29uc3Qgc3ltYm9sID0gcHJvdG9baW5zdGFuY2VTeW1ib2xdO1xuXHRpZiAoc3ltYm9sID09PSB1bmRlZmluZWQpIHtcblx0XHRpZiAob2JqLl9fcHJvdG9fXykge1xuXHRcdFx0cmV0dXJuIGNoZWNrSW5zdGFuY2VTeW1ib2wob2JqLl9fcHJvdG9fXyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpZiAoc3ltYm9sID09PSB0aGlzW2luc3RhbmNlU3ltYm9sXSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGNoZWNrSW5zdGFuY2VTeW1ib2wuYXBwbHkodGhpcywgW29iai5fX3Byb3RvX19dKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGlzSXRlcmFibGUsIGlzU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVGdW5jdGlvbiwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcblxuZXhwb3J0IHsgVG9rZW5MaXN0IH07XG5cbi8qKlxuICogQSBgVG9rZW5MaXN0YCBhbGxvd3MgeW91IHRvIG1hbmFnZSB0b2tlbnMgKGluZGl2aWR1YWwgY2hhcmFjdGVyIHN0cmluZ3Mgc3VjaCBhcyBjc3MgY2xhc3NlcyBpbiBhbiBhdHRyaWJ1dGUgc3RyaW5nKS5cbiAqXG4gKiBUaGUgYFRva2VuTGlzdGAgb2ZmZXJzIHZhcmlvdXMgZnVuY3Rpb25zIHRvIG1hbmlwdWxhdGUgdmFsdWVzLiBGb3IgZXhhbXBsZSwgeW91IGNhbiBhZGQsIHJlbW92ZSBvciByZXBsYWNlIGEgY2xhc3MgaW4gYSBDU1MgbGlzdC5cbiAqXG4gKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIFtpdGVyYXRpb24gcHJvdG9jb2xdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0l0ZXJhdGlvbl9wcm90b2NvbHMpLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy90b2tlbmxpc3QtMS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuY2xhc3MgVG9rZW5MaXN0IGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge2FycmF5fHN0cmluZ3xpdGVyYXRhYmxlfSBpbml0XG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihpbml0KSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnRva2VucyA9IG5ldyBTZXQoKTtcblxuXHRcdGlmICh0eXBlb2YgaW5pdCAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0dGhpcy5hZGQoaW5pdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEl0ZXJhdG9yIHByb3RvY29sXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtTeW1ib2wuaXRlcmF0b3J9XG5cdCAqL1xuXHRnZXRJdGVyYXRvcigpIHtcblx0XHRyZXR1cm4gdGhpc1tTeW1ib2wuaXRlcmF0b3JdKCk7XG5cdH1cblxuXHQvKipcblx0ICogSXRlcmF0b3Jcblx0ICpcblx0ICogQHJldHVybnMge3tuZXh0OiAoKGZ1bmN0aW9uKCk6ICh7dmFsdWU6ICosIGRvbmU6IGJvb2xlYW59KSl8Kil9fVxuXHQgKi9cblx0W1N5bWJvbC5pdGVyYXRvcl0oKSB7XG5cdFx0Ly8gVXNlIGEgbmV3IGluZGV4IGZvciBlYWNoIGl0ZXJhdG9yLiBUaGlzIG1ha2VzIG11bHRpcGxlXG5cdFx0Ly8gaXRlcmF0aW9ucyBvdmVyIHRoZSBpdGVyYWJsZSBzYWZlIGZvciBub24tdHJpdmlhbCBjYXNlcyxcblx0XHQvLyBzdWNoIGFzIHVzZSBvZiBicmVhayBvciBuZXN0ZWQgbG9vcGluZyBvdmVyIHRoZSBzYW1lIGl0ZXJhYmxlLlxuXHRcdGxldCBpbmRleCA9IDA7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcygpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG5leHQ6ICgpID0+IHtcblx0XHRcdFx0aWYgKGluZGV4IDwgZW50cmllcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRyZXR1cm4geyB2YWx1ZTogZW50cmllcz8uW2luZGV4KytdLCBkb25lOiBmYWxzZSB9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiB7IGRvbmU6IHRydWUgfTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiBpdCBjb250YWlucyB0b2tlbiwgb3RoZXJ3aXNlIGZhbHNlXG5cdCAqXG5cdCAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy90b2tlbmxpc3QtMi5tanNcblx0ICogQHBhcmFtIHthcnJheXxzdHJpbmd8aXRlcmF0YWJsZX0gdmFsdWVcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRjb250YWlucyh2YWx1ZSkge1xuXHRcdGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHRcdHZhbHVlID0gdmFsdWUudHJpbSgpO1xuXHRcdFx0bGV0IGNvdW50ZXIgPSAwO1xuXHRcdFx0dmFsdWUuc3BsaXQoXCIgXCIpLmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLnRva2Vucy5oYXModG9rZW4udHJpbSgpKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblx0XHRcdFx0Y291bnRlcisrO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gY291bnRlciA+IDAgPyB0cnVlIDogZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKGlzSXRlcmFibGUodmFsdWUpKSB7XG5cdFx0XHRsZXQgY291bnRlciA9IDA7XG5cdFx0XHRmb3IgKGNvbnN0IHRva2VuIG9mIHZhbHVlKSB7XG5cdFx0XHRcdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0XHRcdFx0aWYgKHRoaXMudG9rZW5zLmhhcyh0b2tlbi50cmltKCkpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRjb3VudGVyKys7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY291bnRlciA+IDAgPyB0cnVlIDogZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCB0b2tlbnNcblx0ICpcblx0ICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL3Rva2VubGlzdC0zLm1qc1xuXHQgKiBAcGFyYW0ge2FycmF5fHN0cmluZ3xpdGVyYXRhYmxlfSB2YWx1ZVxuXHQgKiBAcmV0dXJucyB7VG9rZW5MaXN0fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHZhbHVlXG5cdCAqL1xuXHRhZGQodmFsdWUpIHtcblx0XHRpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG5cdFx0XHR2YWx1ZS5zcGxpdChcIiBcIikuZm9yRWFjaCgodG9rZW4pID0+IHtcblx0XHRcdFx0dGhpcy50b2tlbnMuYWRkKHRva2VuLnRyaW0oKSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKGlzSXRlcmFibGUodmFsdWUpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHRva2VuIG9mIHZhbHVlKSB7XG5cdFx0XHRcdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0XHRcdFx0dGhpcy50b2tlbnMuYWRkKHRva2VuLnRyaW0oKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ1bnN1cHBvcnRlZCB2YWx1ZVwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZW1vdmUgYWxsIHRva2Vuc1xuXHQgKlxuXHQgKiBAcmV0dXJucyB7VG9rZW5MaXN0fVxuXHQgKi9cblx0Y2xlYXIoKSB7XG5cdFx0dGhpcy50b2tlbnMuY2xlYXIoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRva2VuXG5cdCAqXG5cdCAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy90b2tlbmxpc3QtNC5tanNcblx0ICogQHBhcmFtIHthcnJheXxzdHJpbmd8aXRlcmF0YWJsZX0gdmFsdWVcblx0ICogQHJldHVybnMge1Rva2VuTGlzdH1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB2YWx1ZVxuXHQgKi9cblx0cmVtb3ZlKHZhbHVlKSB7XG5cdFx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0dmFsdWUuc3BsaXQoXCIgXCIpLmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRcdHRoaXMudG9rZW5zLmRlbGV0ZSh0b2tlbi50cmltKCkpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChpc0l0ZXJhYmxlKHZhbHVlKSkge1xuXHRcdFx0Zm9yIChjb25zdCB0b2tlbiBvZiB2YWx1ZSkge1xuXHRcdFx0XHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdFx0XHRcdHRoaXMudG9rZW5zLmRlbGV0ZSh0b2tlbi50cmltKCkpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidW5zdXBwb3J0ZWQgdmFsdWVcIiwgXCJ0eXBlcy90b2tlbmxpc3QubWpzXCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHRoaXMgbWV0aG9kIHJlcGxhY2VzIGEgdG9rZW4gd2l0aCBhIG5ldyB0b2tlbi5cblx0ICpcblx0ICogaWYgdGhlIHBhc3NlZCB0b2tlbiBleGlzdHMsIGl0IGlzIHJlcGxhY2VkIHdpdGggbmV3VG9rZW4gYW5kIFRva2VuTGlzdCBpcyByZXR1cm5lZC5cblx0ICogaWYgdGhlIHRva2VuIGRvZXMgbm90IGV4aXN0LCBuZXdUb2tlbiBpcyBub3Qgc2V0IGFuZCBUb2tlbkxpc3QgaXMgcmV0dXJuZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmV3VG9rZW5cblx0ICogQHJldHVybnMge1Rva2VuTGlzdH1cblx0ICovXG5cdHJlcGxhY2UodG9rZW4sIG5ld1Rva2VuKSB7XG5cdFx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHRcdHZhbGlkYXRlU3RyaW5nKG5ld1Rva2VuKTtcblx0XHRpZiAoIXRoaXMuY29udGFpbnModG9rZW4pKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRjb25zdCBhID0gQXJyYXkuZnJvbSh0aGlzLnRva2Vucyk7XG5cdFx0Y29uc3QgaSA9IGEuaW5kZXhPZih0b2tlbik7XG5cdFx0aWYgKGkgPT09IC0xKSByZXR1cm4gdGhpcztcblxuXHRcdGEuc3BsaWNlKGksIDEsIG5ld1Rva2VuKTtcblx0XHR0aGlzLnRva2VucyA9IG5ldyBTZXQoKTtcblx0XHR0aGlzLmFkZChhKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgdG9rZW4gZnJvbSBzdHJpbmcuIElmIHRva2VuIGRvZXNuJ3QgZXhpc3QgaXQncyBhZGRlZC5cblx0ICpcblx0ICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL3Rva2VubGlzdC01Lm1qc1xuXHQgKiBAcGFyYW0ge2FycmF5fHN0cmluZ3xpdGVyYXRhYmxlfSB2YWx1ZVxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB2YWx1ZVxuXHQgKi9cblx0dG9nZ2xlKHZhbHVlKSB7XG5cdFx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0dmFsdWUuc3BsaXQoXCIgXCIpLmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRcdHRvZ2dsZVZhbHVlLmNhbGwodGhpcywgdG9rZW4pO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChpc0l0ZXJhYmxlKHZhbHVlKSkge1xuXHRcdFx0Zm9yIChjb25zdCB0b2tlbiBvZiB2YWx1ZSkge1xuXHRcdFx0XHR0b2dnbGVWYWx1ZS5jYWxsKHRoaXMsIHRva2VuKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInVuc3VwcG9ydGVkIHZhbHVlXCIsIFwidHlwZXMvdG9rZW5saXN0Lm1qc1wiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZXR1cm5zIGFuIGFycmF5IHdpdGggYWxsIHRva2Vuc1xuXHQgKlxuXHQgKiBAcmV0dXJucyB7YXJyYXl9XG5cdCAqL1xuXHRlbnRyaWVzKCkge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHRoaXMudG9rZW5zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBleGVjdXRlcyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gd2l0aCBlYWNoIHZhbHVlIG9mIHRoZSBzZXRcblx0ICpcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHJldHVybnMge1Rva2VuTGlzdH1cblx0ICovXG5cdGZvckVhY2goY2FsbGJhY2spIHtcblx0XHR2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKTtcblx0XHR0aGlzLnRva2Vucy5mb3JFYWNoKGNhbGxiYWNrKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZXR1cm5zIHRoZSBpbmRpdmlkdWFsIHRva2VucyBzZXBhcmF0ZWQgYnkgYSBibGFuayBjaGFyYWN0ZXJcblx0ICpcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzLmVudHJpZXMoKS5qb2luKFwiIFwiKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdG9rZW5cbiAqIEByZXR1cm5zIHt0b2dnbGVWYWx1ZX1cbiAqIEB0aHJvd3Mge0Vycm9yfSBtdXN0IGJlIGNhbGxlZCB3aXRoIFRva2VuTGlzdC5jYWxsXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZVZhbHVlKHRva2VuKSB7XG5cdGlmICghKHRoaXMgaW5zdGFuY2VvZiBUb2tlbkxpc3QpKVxuXHRcdHRocm93IEVycm9yKFwibXVzdCBiZSBjYWxsZWQgd2l0aCBUb2tlbkxpc3QuY2FsbFwiKTtcblx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHR0b2tlbiA9IHRva2VuLnRyaW0oKTtcblx0aWYgKHRoaXMuY29udGFpbnModG9rZW4pKSB7XG5cdFx0dGhpcy5yZW1vdmUodG9rZW4pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdHRoaXMuYWRkKHRva2VuKTtcblx0cmV0dXJuIHRoaXM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5leHBvcnQge1xuXHRERUZBVUxUX1RIRU1FLFxuXHRBVFRSSUJVVEVfUFJFRklYLFxuXHRBVFRSSUJVVEVfT1BUSU9OUyxcblx0QVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IsXG5cdEFUVFJJQlVURV9USEVNRV9QUkVGSVgsXG5cdEFUVFJJQlVURV9USEVNRV9OQU1FLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9TRUxFQ1RfVEhJUyxcblx0QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSxcblx0QVRUUklCVVRFX1VQREFURVJfSU5TRVJULFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9SRU1PVkUsXG5cdEFUVFJJQlVURV9VUERBVEVSX0JJTkQsXG5cdEFUVFJJQlVURV9VUERBVEVSX0JJTkRfVFlQRSxcblx0QVRUUklCVVRFX1RFTVBMQVRFX1BSRUZJWCxcblx0QVRUUklCVVRFX1JPTEUsXG5cdEFUVFJJQlVURV9ESVNBQkxFRCxcblx0QVRUUklCVVRFX1ZBTFVFLFxuXHRBVFRSSUJVVEVfT0JKRUNUTElOSyxcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0VEFHX1NDUklQVCxcblx0VEFHX1NUWUxFLFxuXHRUQUdfTElOSyxcblx0QVRUUklCVVRFX0lELFxuXHRBVFRSSUJVVEVfQ0xBU1MsXG5cdEFUVFJJQlVURV9USVRMRSxcblx0QVRUUklCVVRFX1NSQyxcblx0QVRUUklCVVRFX0hSRUYsXG5cdEFUVFJJQlVURV9UWVBFLFxuXHRBVFRSSUJVVEVfTk9OQ0UsXG5cdEFUVFJJQlVURV9UUkFOU0xBVEUsXG5cdEFUVFJJQlVURV9UQUJJTkRFWCxcblx0QVRUUklCVVRFX1NQRUxMQ0hFQ0ssXG5cdEFUVFJJQlVURV9TTE9ULFxuXHRBVFRSSUJVVEVfUEFSVCxcblx0QVRUUklCVVRFX0xBTkcsXG5cdEFUVFJJQlVURV9JVEVNVFlQRSxcblx0QVRUUklCVVRFX0lURU1TQ09QRSxcblx0QVRUUklCVVRFX0lURU1SRUYsXG5cdEFUVFJJQlVURV9JVEVNSUQsXG5cdEFUVFJJQlVURV9JVEVNUFJPUCxcblx0QVRUUklCVVRFX0lTLFxuXHRBVFRSSUJVVEVfSU5QVVRNT0RFLFxuXHRBVFRSSUJVVEVfQUNDRVNTS0VZLFxuXHRBVFRSSUJVVEVfQVVUT0NBUElUQUxJWkUsXG5cdEFUVFJJQlVURV9BVVRPRk9DVVMsXG5cdEFUVFJJQlVURV9DT05URU5URURJVEFCTEUsXG5cdEFUVFJJQlVURV9ESVIsXG5cdEFUVFJJQlVURV9EUkFHR0FCTEUsXG5cdEFUVFJJQlVURV9FTlRFUktFWUhJTlQsXG5cdEFUVFJJQlVURV9FWFBPUlRQQVJUUyxcblx0QVRUUklCVVRFX0hJRERFTixcblx0b2JqZWN0VXBkYXRlckxpbmtTeW1ib2wsXG5cdGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCxcblx0aW5pdENvbnRyb2xDYWxsYmFja05hbWUsXG5cdEFUVFJJQlVURV9TQ1JJUFRfSE9TVCxcblx0QVRUUklCVVRFX0lOSVRfQ0FMTEJBQ0ssXG59O1xuXG4vKipcbiAqIGRlZmF1bHQgdGhlbWVcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgREVGQVVMVF9USEVNRSA9IFwibW9uc3RlclwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9QUkVGSVggPSBcImRhdGEtbW9uc3Rlci1cIjtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gcGFzcyBvcHRpb25zIHRvIGEgY29udHJvbFxuICpcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9PUFRJT05TID0gYCR7QVRUUklCVVRFX1BSRUZJWH1vcHRpb25zYDtcblxuLyoqXG4gKiBUaGlzIGlzIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byBwYXNzIHRoZSBzY3JpcHQgaG9zdCB0byBhIGNvbnRyb2xcbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNDguMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX1NDUklQVF9IT1NUID0gYCR7QVRUUklCVVRFX1BSRUZJWH1zY3JpcHQtaG9zdGA7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIHBhc3Mgb3B0aW9ucyB0byBhIGNvbnRyb2xcbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMzAuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IgPSBgJHtBVFRSSUJVVEVfUFJFRklYfW9wdGlvbnMtc2VsZWN0b3JgO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byBwYXNzIHRoZSBjYWxsYmFjayB0byBhIGNvbnRyb2xcbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNDguMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0lOSVRfQ0FMTEJBQ0sgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWluaXQtY2FsbGJhY2tgO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGNhbGxiYWNrIHRvIHBhc3MgdGhlIGNhbGxiYWNrIHRvIGEgY29udHJvbFxuICpcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy40OC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBpbml0Q29udHJvbENhbGxiYWNrTmFtZSA9IGBpbml0Q3VzdG9tQ29udHJvbENhbGxiYWNrYDtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVEhFTUVfUFJFRklYID0gYCR7QVRUUklCVVRFX1BSRUZJWH10aGVtZS1gO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX1RIRU1FX05BTUUgPSBgJHtBVFRSSUJVVEVfVEhFTUVfUFJFRklYfW5hbWVgO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWF0dHJpYnV0ZXNgO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjcuMVxuICovXG5jb25zdCBBVFRSSUJVVEVfVVBEQVRFUl9TRUxFQ1RfVEhJUyA9IGAke0FUVFJJQlVURV9QUkVGSVh9c2VsZWN0LXRoaXNgO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9VUERBVEVSX1JFUExBQ0UgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXJlcGxhY2VgO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVCA9IGAke0FUVFJJQlVURV9QUkVGSVh9aW5zZXJ0YDtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1pbnNlcnQtcmVmZXJlbmNlYDtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVVBEQVRFUl9SRU1PVkUgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXJlbW92ZWA7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfQklORCA9IGAke0FUVFJJQlVURV9QUkVGSVh9YmluZGA7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfQklORF9UWVBFID0gYCR7QVRUUklCVVRFX1VQREFURVJfQklORH0tdHlwZWA7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNy4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9URU1QTEFURV9QUkVGSVggPSBgJHtBVFRSSUJVVEVfUFJFRklYfXRlbXBsYXRlLXByZWZpeGA7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9ST0xFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1yb2xlYDtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0RJU0FCTEVEID0gXCJkaXNhYmxlZFwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVkFMVUUgPSBcInZhbHVlXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX09CSkVDVExJTksgPSBgJHtBVFRSSUJVVEVfUFJFRklYfW9iamVjdGxpbmtgO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1lcnJvcmA7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKi9cbmNvbnN0IG9iamVjdFVwZGF0ZXJMaW5rU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9tb25zdGVyL2RvbS9AQG9iamVjdC11cGRhdGVyLWxpbmtcIixcbik7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKi9cbmNvbnN0IGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vY3VzdG9tLWVsZW1lbnRAQG9wdGlvbnMtdXBkYXRlci1saW5rXCIsXG4pO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBUQUdfU0NSSVBUID0gXCJzY3JpcHRcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgVEFHX1NUWUxFID0gXCJzdHlsZVwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBUQUdfTElOSyA9IFwibGlua1wiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5cbmNvbnN0IEFUVFJJQlVURV9JRCA9IFwiaWRcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuXG5jb25zdCBBVFRSSUJVVEVfQ0xBU1MgPSBcImNsYXNzXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9USVRMRSA9IFwidGl0bGVcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1NSQyA9IFwic3JjXCI7XG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSFJFRiA9IFwiaHJlZlwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVFlQRSA9IFwidHlwZVwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfTk9OQ0UgPSBcIm5vbmNlXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9UUkFOU0xBVEUgPSBcInRyYW5zbGF0ZVwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVEFCSU5ERVggPSBcInRhYmluZGV4XCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9TUEVMTENIRUNLID0gXCJzcGVsbGNoZWNrXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9TTE9UID0gXCJzbG90XCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9QQVJUID0gXCJwYXJ0XCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9MQU5HID0gXCJsYW5nXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JVEVNVFlQRSA9IFwiaXRlbXR5cGVcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0lURU1TQ09QRSA9IFwiaXRlbXNjb3BlXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JVEVNUkVGID0gXCJpdGVtcmVmXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JVEVNSUQgPSBcIml0ZW1pZFwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVRFTVBST1AgPSBcIml0ZW1wcm9wXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JUyA9IFwiaXNcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0lOUFVUTU9ERSA9IFwiaW5wdXRtb2RlXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9BQ0NFU1NLRVkgPSBcImFjY2Vzc2tleVwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfQVVUT0NBUElUQUxJWkUgPSBcImF1dG9jYXBpdGFsaXplXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9BVVRPRk9DVVMgPSBcImF1dG9mb2N1c1wiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfQ09OVEVOVEVESVRBQkxFID0gXCJjb250ZW50ZWRpdGFibGVcIjtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0RJUiA9IFwiZGlyXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9EUkFHR0FCTEUgPSBcImRyYWdnYWJsZVwiO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfRU5URVJLRVlISU5UID0gXCJlbnRlcmtleWhpbnRcIjtcbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9FWFBPUlRQQVJUUyA9IFwiZXhwb3J0cGFydHNcIjtcbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9ISURERU4gPSBcImhpZGRlblwiO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgZ2V0R2xvYmFsRnVuY3Rpb24gfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgVG9rZW5MaXN0IH0gZnJvbSBcIi4uL3R5cGVzL3Rva2VubGlzdC5tanNcIjtcbmltcG9ydCB7XG5cdHZhbGlkYXRlSW5zdGFuY2UsXG5cdHZhbGlkYXRlU3RyaW5nLFxuXHR2YWxpZGF0ZVN5bWJvbCxcbn0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX09CSkVDVExJTksgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7XG5cdGZpbmRDbG9zZXN0T2JqZWN0TGluayxcblx0YWRkVG9PYmplY3RMaW5rLFxuXHRyZW1vdmVPYmplY3RMaW5rLFxuXHRoYXNPYmplY3RMaW5rLFxuXHRnZXRMaW5rZWRPYmplY3RzLFxuXHR0b2dnbGVBdHRyaWJ1dGVUb2tlbixcblx0YWRkQXR0cmlidXRlVG9rZW4sXG5cdHJlbW92ZUF0dHJpYnV0ZVRva2VuLFxuXHRjb250YWluc0F0dHJpYnV0ZVRva2VuLFxuXHRyZXBsYWNlQXR0cmlidXRlVG9rZW4sXG5cdGNsZWFyQXR0cmlidXRlVG9rZW5zLFxuXHRmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlLFxuXHRmaW5kQ2xvc2VzdEJ5Q2xhc3MsXG59O1xuXG4vKipcbiAqIEdldCB0aGUgY2xvc2VzdCBvYmplY3QgbGluayBvZiBhIG5vZGVcbiAqXG4gKiBpZiBhIG5vZGUgaXMgc3BlY2lmaWVkIHdpdGhvdXQgYSBvYmplY3QgbGluaywgYSByZWN1cnNpdmUgc2VhcmNoIHVwd2FyZHMgaXMgcGVyZm9ybWVkIHVudGlsIHRoZSBjb3JyZXNwb25kaW5nXG4gKiBvYmplY3QgbGluayBpcyBmb3VuZCwgb3IgdW5kZWZpbmVkIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fHVuZGVmaW5lZH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZmluZENsb3Nlc3RPYmplY3RMaW5rKGVsZW1lbnQpIHtcblx0cmV0dXJuIGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZWxlbWVudCwgQVRUUklCVVRFX09CSkVDVExJTkspO1xufVxuXG4vKipcbiAqIEFkZHMgYSBjbGFzcyBhdHRyaWJ1dGUgdG8gYW4gZWxlbWVudC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHBhcmFtIGVsZW1lbnRcbiAqIEBwYXJhbSBzeW1ib2xcbiAqIEBwYXJhbSBvYmplY3RcbiAqIEByZXR1cm5zIHsqfVxuICovXG5mdW5jdGlvbiBhZGRUb09iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sLCBvYmplY3QpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3ltYm9sKHN5bWJvbCk7XG5cblx0aWYgKGVsZW1lbnQ/LltzeW1ib2xdID09PSB1bmRlZmluZWQpIHtcblx0XHRlbGVtZW50W3N5bWJvbF0gPSBuZXcgU2V0KCk7XG5cdH1cblxuXHRhZGRBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBBVFRSSUJVVEVfT0JKRUNUTElOSywgc3ltYm9sLnRvU3RyaW5nKCkpO1xuXHRlbGVtZW50W3N5bWJvbF0uYWRkKG9iamVjdCk7XG5cdHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYW4gb2JqZWN0IGZyb20gYW4gZWxlbWVudFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge1N5bWJvbH0gc3ltYm9sXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlT2JqZWN0TGluayhlbGVtZW50LCBzeW1ib2wpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3ltYm9sKHN5bWJvbCk7XG5cblx0aWYgKGVsZW1lbnQ/LltzeW1ib2xdID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdHJlbW92ZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIEFUVFJJQlVURV9PQkpFQ1RMSU5LLCBzeW1ib2wudG9TdHJpbmcoKSk7XG5cdGRlbGV0ZSBlbGVtZW50W3N5bWJvbF07XG5cdHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhbiBlbGVtZW50IGhhcyBhbiBvYmplY3QgbGlua1xuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge1N5bWJvbH0gc3ltYm9sXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBoYXNPYmplY3RMaW5rKGVsZW1lbnQsIHN5bWJvbCkge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTeW1ib2woc3ltYm9sKTtcblxuXHRpZiAoZWxlbWVudD8uW3N5bWJvbF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiBjb250YWluc0F0dHJpYnV0ZVRva2VuKFxuXHRcdGVsZW1lbnQsXG5cdFx0QVRUUklCVVRFX09CSkVDVExJTkssXG5cdFx0c3ltYm9sLnRvU3RyaW5nKCksXG5cdCk7XG59XG5cbi8qKlxuICogVGhlIE9iamVjdExpbmsgY2FuIGJlIHVzZWQgdG8gYXR0YWNoIG9iamVjdHMgdG8gSFRNTEVsZW1lbnRzLiBUaGUgZWxlbWVudHMgYXJlIGtlcHQgaW4gYSBzZXQgdW5kZXIgYSB1bmlxdWVcbiAqIHN5bWJvbCBhbmQgY2FuIGJlIHJlYWQgdmlhIGFuIGl0ZXJhdG9yIHtAc2VlIHtAbGluayBnZXRMaW5rZWRPYmplY3RzfX0uXG4gKlxuICogSW4gYWRkaXRpb24sIGVsZW1lbnRzIHdpdGggYW4gb2JqZWN0TGluayByZWNlaXZlIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vYmplY3RsaW5rYC5cbiAqXG4gKiBXaXRoIHRoZSBtZXRob2QgIHtAc2VlIHtAbGluayBhZGRUb09iamVjdExpbmt9fSB0aGUgb2JqZWN0cyBjYW4gYmUgYWRkZWQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7U3ltYm9sfSBzeW1ib2xcbiAqIEByZXR1cm4ge0l0ZXJhdG9yfVxuICogQHRocm93cyB7RXJyb3J9IHRoZXJlIGlzIG5vIG9iamVjdCBsaW5rIGZvciBzeW1ib2xcbiAqL1xuZnVuY3Rpb24gZ2V0TGlua2VkT2JqZWN0cyhlbGVtZW50LCBzeW1ib2wpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3ltYm9sKHN5bWJvbCk7XG5cblx0aWYgKGVsZW1lbnQ/LltzeW1ib2xdID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYHRoZXJlIGlzIG5vIG9iamVjdCBsaW5rIGZvciAke3N5bWJvbC50b1N0cmluZygpfWApO1xuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnQ/LltzeW1ib2xdW1N5bWJvbC5pdGVyYXRvcl0oKTtcbn1cblxuLyoqXG4gKiBXaXRoIHRoaXMgbWV0aG9kIHRva2VucyBpbiBhbiBhdHRyaWJ1dGUgY2FuIGJlIHN3aXRjaGVkIG9uIG9yIG9mZi4gRm9yIGV4YW1wbGUsIGNsYXNzZXMgY2FuIGJlIHN3aXRjaGVkIG9uIGFuZCBvZmYgaW4gdGhlIGVsZW1lbnRzIGNsYXNzIGF0dHJpYnV0ZS5cbiAqXG4gKiBUb2tlbnMgYXJlIGFsd2F5cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gdG9nZ2xlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB0b2tlbikge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHR2YWxpZGF0ZVN0cmluZyhrZXkpO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgdG9rZW4pO1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXG5cdFx0a2V5LFxuXHRcdG5ldyBUb2tlbkxpc3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KSkudG9nZ2xlKHRva2VuKS50b1N0cmluZygpLFxuXHQpO1xuXG5cdHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGFkZCBhIHRva2VuIHRvIGFuIGF0dHJpYnV0ZS4gVG9rZW5zIGFyZSBhbHdheXMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGFkZEF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGtleSwgdG9rZW4pIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0dmFsaWRhdGVTdHJpbmcoa2V5KTtcblxuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGtleSkpIHtcblx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIHRva2VuKTtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdGVsZW1lbnQuc2V0QXR0cmlidXRlKFxuXHRcdGtleSxcblx0XHRuZXcgVG9rZW5MaXN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSkpLmFkZCh0b2tlbikudG9TdHJpbmcoKSxcblx0KTtcblxuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHJlbW92ZSB0b2tlbnMgZnJvbSBhbiBhdHRyaWJ1dGUuXG4gKlxuICogVG9rZW5zIGFyZSBhbHdheXMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGtleSwgdG9rZW4pIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0dmFsaWRhdGVTdHJpbmcoa2V5KTtcblxuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGtleSkpIHtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdGVsZW1lbnQuc2V0QXR0cmlidXRlKFxuXHRcdGtleSxcblx0XHRuZXcgVG9rZW5MaXN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSkpLnJlbW92ZSh0b2tlbikudG9TdHJpbmcoKSxcblx0KTtcblxuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBhdHRyaWJ1dGUgaGFzIGEgdG9rZW4uXG4gKlxuICogVG9rZW5zIGFyZSBhbHdheXMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29udGFpbnNBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHRva2VuKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdHZhbGlkYXRlU3RyaW5nKGtleSk7XG5cblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShrZXkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIG5ldyBUb2tlbkxpc3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KSkuY29udGFpbnModG9rZW4pO1xufVxuXG4vKipcbiAqIFRva2VucyBhcmUgYWx3YXlzIHNlcGFyYXRlZCBieSBhIHNwYWNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gZnJvbVxuICogQHBhcmFtIHtzdHJpbmd9IHRvXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gcmVwbGFjZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGtleSwgZnJvbSwgdG8pIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3RyaW5nKGZyb20pO1xuXHR2YWxpZGF0ZVN0cmluZyh0byk7XG5cdHZhbGlkYXRlU3RyaW5nKGtleSk7XG5cblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShrZXkpKSB7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHRlbGVtZW50LnNldEF0dHJpYnV0ZShcblx0XHRrZXksXG5cdFx0bmV3IFRva2VuTGlzdChlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpKS5yZXBsYWNlKGZyb20sIHRvKS50b1N0cmluZygpLFxuXHQpO1xuXG5cdHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIFRva2VucyBhcmUgYWx3YXlzIHNlcGFyYXRlZCBieSBhIHNwYWNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gY2xlYXJBdHRyaWJ1dGVUb2tlbnMoZWxlbWVudCwga2V5KSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN0cmluZyhrZXkpO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCBcIlwiKTtcblxuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzLCBzdGFydGluZyBmcm9tIGFuIGBIVE1MRWxlbWVtZW50YCwgZm9yIHRoZSBuZXh0IGVsZW1lbnQgdGhhdCBoYXMgYSBjZXJ0YWluIGF0dHJpYnV0ZS5cbiAqXG4gKiBgYGBodG1sXG4gKiA8ZGl2IGRhdGEtbXktYXR0cmlidXRlPVwiMlwiIGlkPVwiMlwiPlxuICogICAgIDxkaXYgaWQ9XCIxXCI+PC9kaXY+XG4gKiA8L2Rpdj5cbiAqIGBgYFxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIC8vIGlmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCAodW5kZWZpbmVkKSwgdGhlbiBvbmx5IHRoZSBhdHRyaWJ1dGUgaXMgY2hlY2tlZC5cbiAqIGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzEnKSwnZGF0YS1teS1hdHRyaWJ1dGUnKTsgLy8gXHUyMUE2IG5vZGUgd2l0aCBpZCAyXG4gKiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcyJyksJ2RhdGEtbXktYXR0cmlidXRlJyk7IC8vIFx1MjFBNiBub2RlIHdpdGggaWQgMlxuICpcbiAqIC8vIGlmIGEgdmFsdWUgaXMgc3BlY2lmaWVkLCBmb3IgZXhhbXBsZSBhbiBlbXB0eSBzdHJpbmcsIHRoZW4gdGhlIG5hbWUgYW5kIHRoZSB2YWx1ZSBhcmUgY2hlY2tlZC5cbiAqIGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzEnKSwnZGF0YS1teS1hdHRyaWJ1dGUnLCAnJyk7ICAvLyBcdTIxQTYgdW5kZWZpbmVkXG4gKiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcxJyksJ2RhdGEtbXktYXR0cmlidXRlJywgJzInKTsgLy8gXHUyMUE2IG5vZGUgd2l0aCBpZCAyXG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE0LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fHVuZGVmaW5lZH1cbiAqIEBzdW1tYXJ5IGZpbmQgY2xvc2VzdCBub2RlXG4gKi9cbmZ1bmN0aW9uIGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZWxlbWVudCwga2V5LCB2YWx1ZSkge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIGdldEdsb2JhbEZ1bmN0aW9uKFwiSFRNTEVsZW1lbnRcIikpO1xuXG5cdGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShrZXkpKSB7XG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdH1cblxuXHRcdGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpID09PSB2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdFx0fVxuXHR9XG5cblx0bGV0IHNlbGVjdG9yID0gdmFsaWRhdGVTdHJpbmcoa2V5KTtcblx0aWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHNlbGVjdG9yICs9IGA9JHt2YWxpZGF0ZVN0cmluZyh2YWx1ZSl9YDtcblx0Y29uc3QgcmVzdWx0ID0gZWxlbWVudC5jbG9zZXN0KGBbJHtzZWxlY3Rvcn1dYCk7XG5cdGlmIChyZXN1bHQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzLCBzdGFydGluZyBmcm9tIGFuIGBIVE1MRWxlbWVudGAsIGZvciB0aGUgbmV4dCBlbGVtZW50IHRoYXQgaGFzIGEgY2VydGFpbiBhdHRyaWJ1dGUuXG4gKlxuICogYGBgaHRtbFxuICogPGRpdiBjbGFzcz1cIm15Y2xhc3NcIiBpZD1cIjJcIj5cbiAqICAgICA8ZGl2IGlkPVwiMVwiPjwvZGl2PlxuICogPC9kaXY+XG4gKiBgYGBcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiAvLyBpZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQgKHVuZGVmaW5lZCksIHRoZW4gb25seSB0aGUgYXR0cmlidXRlIGlzIGNoZWNrZWQuXG4gKiBmaW5kQ2xvc2VzdEJ5Q2xhc3MoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzEnKSwnbXljbGFzcycpOyAvLyBcdTIxQTYgbm9kZSB3aXRoIGlkIDJcbiAqIGZpbmRDbG9zZXN0QnlDbGFzcyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnMicpLCdteWNsYXNzJyk7IC8vIFx1MjFBNiBub2RlIHdpdGggaWQgMlxuICogYGBgXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7ZmluZENsb3Nlc3RCeUNsYXNzfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9kb20vYXR0cmlidXRlcy5tanMnO1xuICogZmluZENsb3Nlc3RCeUNsYXNzKCk7XG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjcuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZVxuICogQHJldHVybiB7SFRNTEVsZW1lbnR8dW5kZWZpbmVkfVxuICogQHN1bW1hcnkgZmluZCBjbG9zZXN0IG5vZGVcbiAqL1xuZnVuY3Rpb24gZmluZENsb3Nlc3RCeUNsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIGdldEdsb2JhbEZ1bmN0aW9uKFwiSFRNTEVsZW1lbnRcIikpO1xuXG5cdGlmIChlbGVtZW50Py5jbGFzc0xpc3Q/LmNvbnRhaW5zKHZhbGlkYXRlU3RyaW5nKGNsYXNzTmFtZSkpKSB7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHRjb25zdCByZXN1bHQgPSBlbGVtZW50LmNsb3Nlc3QoYC4ke2NsYXNzTmFtZX1gKTtcblx0aWYgKHJlc3VsdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7XG5cdGdldERvY3VtZW50LFxuXHRnZXRXaW5kb3csXG5cdGdldERvY3VtZW50RnJhZ21lbnRGcm9tU3RyaW5nLFxuXHRmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMsXG5cdGdldENvbnRhaW5pbmdEb2N1bWVudCxcblx0Z2V0UmVnaXN0ZXJlZEN1c3RvbUVsZW1lbnRzLFxuXHRmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHMsXG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGZldGNoZXMgdGhlIGRvY3VtZW50IG9iamVjdFxuICpcbiAqIEluIG5vZGVqcyB0aGlzIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIHBlcmZvcm1lZCB3aXRoIFtqc2RvbV0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvanNkb20pLlxuICpcbiAqIGBgYFxuICogaW1wb3J0IHtKU0RPTX0gZnJvbSBcImpzZG9tXCJcbiAqIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcIm9iamVjdFwiKSB7XG4gKiAgICBjb25zdCB7d2luZG93fSA9IG5ldyBKU0RPTSgnJywge1xuICogICAgICAgIHVybDogJ2h0dHA6Ly9leGFtcGxlLmNvbS8nLFxuICogICAgICAgIHByZXRlbmRUb0JlVmlzdWFsOiB0cnVlXG4gKiAgICB9KTtcbiAqXG4gKiAgICBbXG4gKiAgICAgICAgJ3NlbGYnLFxuICogICAgICAgICdkb2N1bWVudCcsXG4gKiAgICAgICAgJ0RvY3VtZW50JyxcbiAqICAgICAgICAnTm9kZScsXG4gKiAgICAgICAgJ0VsZW1lbnQnLFxuICogICAgICAgICdIVE1MRWxlbWVudCcsXG4gKiAgICAgICAgJ0RvY3VtZW50RnJhZ21lbnQnLFxuICogICAgICAgICdET01QYXJzZXInLFxuICogICAgICAgICdYTUxTZXJpYWxpemVyJyxcbiAqICAgICAgICAnTm9kZUZpbHRlcicsXG4gKiAgICAgICAgJ0lucHV0RXZlbnQnLFxuICogICAgICAgICdDdXN0b21FdmVudCdcbiAqICAgIF0uZm9yRWFjaChrZXkgPT4gKGdldEdsb2JhbCgpW2tleV0gPSB3aW5kb3dba2V5XSkpO1xuICogfVxuICogYGBgXG4gKlxuICogQHJldHVybnMge29iamVjdH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IHN1cHBvcnRlZCBlbnZpcm9ubWVudFxuICovXG5mdW5jdGlvbiBnZXREb2N1bWVudCgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXRHbG9iYWwoKT8uW1wiZG9jdW1lbnRcIl07XG5cdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwib2JqZWN0XCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub3Qgc3VwcG9ydGVkIGVudmlyb25tZW50XCIpO1xuXHR9XG5cblx0cmV0dXJuIGRvY3VtZW50O1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGZldGNoZXMgdGhlIHdpbmRvdyBvYmplY3RcbiAqXG4gKiBJbiBub2RlanMgdGhpcyBmdW5jdGlvbmFsaXR5IGNhbiBiZSBwZXJmb3JtZWQgd2l0aCBbanNkb21dKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2pzZG9tKS5cbiAqXG4gKiBgYGBcbiAqIGltcG9ydCB7SlNET019IGZyb20gXCJqc2RvbVwiXG4gKiBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJvYmplY3RcIikge1xuICogICAgY29uc3Qge3dpbmRvd30gPSBuZXcgSlNET00oJycsIHtcbiAqICAgICAgICB1cmw6ICdodHRwOi8vZXhhbXBsZS5jb20vJyxcbiAqICAgICAgICBwcmV0ZW5kVG9CZVZpc3VhbDogdHJ1ZVxuICogICAgfSk7XG4gKlxuICogICAgZ2V0R2xvYmFsKClbJ3dpbmRvdyddPXdpbmRvdztcbiAqXG4gKiAgICBbXG4gKiAgICAgICAgJ3NlbGYnLFxuICogICAgICAgICdkb2N1bWVudCcsXG4gKiAgICAgICAgJ0RvY3VtZW50JyxcbiAqICAgICAgICAnTm9kZScsXG4gKiAgICAgICAgJ0VsZW1lbnQnLFxuICogICAgICAgICdIVE1MRWxlbWVudCcsXG4gKiAgICAgICAgJ0RvY3VtZW50RnJhZ21lbnQnLFxuICogICAgICAgICdET01QYXJzZXInLFxuICogICAgICAgICdYTUxTZXJpYWxpemVyJyxcbiAqICAgICAgICAnTm9kZUZpbHRlcicsXG4gKiAgICAgICAgJ0lucHV0RXZlbnQnLFxuICogICAgICAgICdDdXN0b21FdmVudCdcbiAqICAgIF0uZm9yRWFjaChrZXkgPT4gKGdldEdsb2JhbCgpW2tleV0gPSB3aW5kb3dba2V5XSkpO1xuICogfVxuICogYGBgXG4gKlxuICogQHJldHVybnMge29iamVjdH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IHN1cHBvcnRlZCBlbnZpcm9ubWVudFxuICovXG5mdW5jdGlvbiBnZXRXaW5kb3coKSB7XG5cdGNvbnN0IHdpbmRvdyA9IGdldEdsb2JhbCgpPy5bXCJ3aW5kb3dcIl07XG5cdGlmICh0eXBlb2Ygd2luZG93ICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm90IHN1cHBvcnRlZCBlbnZpcm9ubWVudFwiKTtcblx0fVxuXG5cdHJldHVybiB3aW5kb3c7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgZmV0Y2hlcyB0aGUgZG9jdW1lbnQgb2JqZWN0XG4gKlxuICogSW4gbm9kZWpzIHRoaXMgZnVuY3Rpb25hbGl0eSBjYW4gYmUgcGVyZm9ybWVkIHdpdGggW2pzZG9tXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9qc2RvbSkuXG4gKlxuICogYGBgXG4gKiBpbXBvcnQge0pTRE9NfSBmcm9tIFwianNkb21cIlxuICogaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwib2JqZWN0XCIpIHtcbiAqICAgIGNvbnN0IHt3aW5kb3d9ID0gbmV3IEpTRE9NKCcnLCB7XG4gKiAgICAgICAgdXJsOiAnaHR0cDovL2V4YW1wbGUuY29tLycsXG4gKiAgICAgICAgcHJldGVuZFRvQmVWaXN1YWw6IHRydWVcbiAqICAgIH0pO1xuICpcbiAqICAgIFtcbiAqICAgICAgICAnc2VsZicsXG4gKiAgICAgICAgJ2RvY3VtZW50JyxcbiAqICAgICAgICAnRG9jdW1lbnQnLFxuICogICAgICAgICdOb2RlJyxcbiAqICAgICAgICAnRWxlbWVudCcsXG4gKiAgICAgICAgJ0hUTUxFbGVtZW50JyxcbiAqICAgICAgICAnRG9jdW1lbnRGcmFnbWVudCcsXG4gKiAgICAgICAgJ0RPTVBhcnNlcicsXG4gKiAgICAgICAgJ1hNTFNlcmlhbGl6ZXInLFxuICogICAgICAgICdOb2RlRmlsdGVyJyxcbiAqICAgICAgICAnSW5wdXRFdmVudCcsXG4gKiAgICAgICAgJ0N1c3RvbUV2ZW50J1xuICogICAgXS5mb3JFYWNoKGtleSA9PiAoZ2V0R2xvYmFsKClba2V5XSA9IHdpbmRvd1trZXldKSk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJucyB7RG9jdW1lbnRGcmFnbWVudH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IHN1cHBvcnRlZCBlbnZpcm9ubWVudFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0RG9jdW1lbnRGcmFnbWVudEZyb21TdHJpbmcoaHRtbCkge1xuXHR2YWxpZGF0ZVN0cmluZyhodG1sKTtcblxuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cdGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuXHR0ZW1wbGF0ZS5pbm5lckhUTUwgPSBodG1sO1xuXG5cdHJldHVybiB0ZW1wbGF0ZS5jb250ZW50O1xufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHNlYXJjaGVzIHVwd2FyZHMgZnJvbSBhIGdpdmVuIGVsZW1lbnQgdG8gZmluZCBhbiBhbmNlc3RvciBlbGVtZW50XG4gKiB3aXRoIGEgc3BlY2lmaWVkIElELCBjb25zaWRlcmluZyBib3RoIG5vcm1hbCBET00gYW5kIHNoYWRvdyBET00uXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudHxTaGFkb3dSb290fSBlbGVtZW50IC0gVGhlIHN0YXJ0aW5nIGVsZW1lbnQgb3Igc2hhZG93IHJvb3QgdG8gc2VhcmNoIGZyb20uXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0SWQgLSBUaGUgSUQgb2YgdGhlIHRhcmdldCBlbGVtZW50IHRvIGZpbmQuXG4gKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR8bnVsbH0gLSBUaGUgYW5jZXN0b3IgZWxlbWVudCB3aXRoIHRoZSBzcGVjaWZpZWQgSUQsIG9yIG51bGwgaWYgbm90IGZvdW5kLlxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAc2luY2UgMy4yOS4wXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhlbGVtZW50LCB0YXJnZXRJZCkge1xuXHRpZiAoIWVsZW1lbnQpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IGVsZW1lbnQgaGFzIHRoZSB0YXJnZXQgSURcblx0aWYgKGVsZW1lbnQuaWQgPT09IHRhcmdldElkKSB7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHQvLyBTZWFyY2ggd2l0aGluIHRoZSBjdXJyZW50IGVsZW1lbnQncyBzaGFkb3cgcm9vdCwgaWYgaXQgZXhpc3RzXG5cdGlmIChlbGVtZW50LnNoYWRvd1Jvb3QpIHtcblx0XHRjb25zdCB0YXJnZXQgPSBlbGVtZW50LnNoYWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0SWQpO1xuXHRcdGlmICh0YXJnZXQpIHtcblx0XHRcdHJldHVybiB0YXJnZXQ7XG5cdFx0fVxuXHR9XG5cblx0Ly8gSWYgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyB0aGUgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBzZWFyY2ggd2l0aGluIHRoZSBtYWluIGRvY3VtZW50XG5cdGlmIChlbGVtZW50ID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcblx0XHRjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YXJnZXRJZCk7XG5cdFx0aWYgKHRhcmdldCkge1xuXHRcdFx0cmV0dXJuIHRhcmdldDtcblx0XHR9XG5cdH1cblxuXHQvLyBJZiB0aGUgY3VycmVudCBlbGVtZW50IGlzIGluc2lkZSBhIHNoYWRvdyByb290LCBzZWFyY2ggaXRzIGhvc3QncyBhbmNlc3RvcnNcblx0Y29uc3Qgcm9vdE5vZGUgPSBlbGVtZW50LmdldFJvb3ROb2RlKCk7XG5cdGlmIChyb290Tm9kZSAmJiByb290Tm9kZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcblx0XHRyZXR1cm4gZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzKHJvb3ROb2RlLmhvc3QsIHRhcmdldElkKTtcblx0fVxuXG5cdC8vIE90aGVyd2lzZSwgc2VhcmNoIHRoZSBjdXJyZW50IGVsZW1lbnQncyBwYXJlbnRcblx0cmV0dXJuIGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhlbGVtZW50LnBhcmVudEVsZW1lbnQsIHRhcmdldElkKTtcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBzZWFyY2hlcyB1cHdhcmRzIGZyb20gYSBnaXZlbiBlbGVtZW50IHRvIGZpbmQgYW4gYW5jZXN0b3IgZWxlbWVudFxuICogd2l0aCBhIHNwZWNpZmllZCBzZWxlY3RvciwgY29uc2lkZXJpbmcgYm90aCBub3JtYWwgRE9NIGFuZCBzaGFkb3cgRE9NLlxuICogVGhpcyBtZXRob2QgaXMgdXNlZnVsIGZvciBmaW5kaW5nIGEgcGFyZW50IGVsZW1lbnQgd2l0aCBhIHNwZWNpZmljIGNsYXNzLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8U2hhZG93Um9vdH0gZWxlbWVudCAtIFRoZSBzdGFydGluZyBlbGVtZW50IG9yIHNoYWRvdyByb290IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gVGhlIHNlbGVjdG9yIG9mIHRoZSB0YXJnZXQgZWxlbWVudCB0byBmaW5kLlxuICogQHJldHVybnMge0hUTUxFbGVtZW50fG51bGx9IC0gVGhlIGFuY2VzdG9yIGVsZW1lbnQgd2l0aCB0aGUgc3BlY2lmaWVkIHNlbGVjdG9yLCBvciBudWxsIGlmIG5vdCBmb3VuZC5cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHNpbmNlIDMuNTUuMFxuICovXG5mdW5jdGlvbiBmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHMoZWxlbWVudCwgc2VsZWN0b3IpIHtcblx0aWYgKCFlbGVtZW50IHx8ICFzZWxlY3Rvcikge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gU2VhcmNoIHdpdGhpbiB0aGUgY3VycmVudCBlbGVtZW50J3Mgc2hhZG93IHJvb3QsIGlmIGl0IGV4aXN0c1xuXHRpZiAoZWxlbWVudC5zaGFkb3dSb290KSB7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZWxlbWVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuXHRcdGlmICh0YXJnZXQpIHtcblx0XHRcdHJldHVybiB0YXJnZXQ7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGVsZW1lbnQgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuXHRcdGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuXHRcdGlmICh0YXJnZXQpIHtcblx0XHRcdHJldHVybiB0YXJnZXQ7XG5cdFx0fVxuXHR9XG5cblx0Ly8gSWYgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyBpbnNpZGUgYSBzaGFkb3cgcm9vdCwgc2VhcmNoIGl0cyBob3N0J3MgYW5jZXN0b3JzXG5cdGNvbnN0IHJvb3ROb2RlID0gZWxlbWVudC5nZXRSb290Tm9kZSgpO1xuXHRpZiAocm9vdE5vZGUgJiYgcm9vdE5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG5cdFx0cmV0dXJuIGZpbmRFbGVtZW50V2l0aFNlbGVjdG9yVXB3YXJkcyhyb290Tm9kZS5ob3N0LCBzZWxlY3Rvcik7XG5cdH1cblxuXHQvLyBPdGhlcndpc2UsIHNlYXJjaCB0aGUgY3VycmVudCBlbGVtZW50J3MgcGFyZW50XG5cdHJldHVybiBmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHMoZWxlbWVudC5wYXJlbnRFbGVtZW50LCBzZWxlY3Rvcik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtIVE1MRWxlbWVudHxudWxsfVxuICovXG5mdW5jdGlvbiB0cmF2ZXJzZVNoYWRvd1Jvb3RzKGVsZW1lbnQpIHtcblx0bGV0IGN1cnJlbnRSb290ID0gZWxlbWVudC5zaGFkb3dSb290O1xuXHRsZXQgY3VycmVudFBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcblxuXHR3aGlsZSAoXG5cdFx0Y3VycmVudFBhcmVudCAmJlxuXHRcdGN1cnJlbnRQYXJlbnQubm9kZVR5cGUgIT09IE5vZGUuRE9DVU1FTlRfTk9ERSAmJlxuXHRcdGN1cnJlbnRQYXJlbnQubm9kZVR5cGUgIT09IE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERVxuXHQpIHtcblx0XHRpZiAoY3VycmVudFJvb3QgJiYgY3VycmVudFJvb3QucGFyZW50Tm9kZSkge1xuXHRcdFx0Y3VycmVudFBhcmVudCA9IGN1cnJlbnRSb290LnBhcmVudE5vZGU7XG5cdFx0XHRjdXJyZW50Um9vdCA9IGN1cnJlbnRQYXJlbnQuc2hhZG93Um9vdDtcblx0XHR9IGVsc2UgaWYgKGN1cnJlbnRQYXJlbnQucGFyZW50Tm9kZSkge1xuXHRcdFx0Y3VycmVudFBhcmVudCA9IGN1cnJlbnRQYXJlbnQucGFyZW50Tm9kZTtcblx0XHRcdGN1cnJlbnRSb290ID0gbnVsbDtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0Y3VycmVudFJvb3QgJiZcblx0XHRcdGN1cnJlbnRSb290Lmhvc3QgJiZcblx0XHRcdGN1cnJlbnRSb290Lmhvc3Qubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfTk9ERVxuXHRcdCkge1xuXHRcdFx0Y3VycmVudFBhcmVudCA9IGN1cnJlbnRSb290Lmhvc3Q7XG5cdFx0XHRjdXJyZW50Um9vdCA9IG51bGw7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1cnJlbnRQYXJlbnQgPSBudWxsO1xuXHRcdFx0Y3VycmVudFJvb3QgPSBudWxsO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjdXJyZW50UGFyZW50O1xufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHNlYXJjaGVzIHVwd2FyZHMgZnJvbSBhIGdpdmVuIGVsZW1lbnQgdG8gZmluZCBhbiBhbmNlc3RvciBlbGVtZW50XG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMgeyp9XG4gKiBAdGhyb3dzIHtFcnJvcn0gSW52YWxpZCBhcmd1bWVudC4gRXhwZWN0ZWQgYW4gSFRNTEVsZW1lbnQuXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBzaW5jZSAzLjM2LjBcbiAqL1xuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0RvY3VtZW50KGVsZW1lbnQpIHtcblx0aWYgKFxuXHRcdCFlbGVtZW50IHx8XG5cdFx0IShcblx0XHRcdGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fFxuXHRcdFx0ZWxlbWVudCBpbnN0YW5jZW9mIGVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5IVE1MRWxlbWVudFxuXHRcdClcblx0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBhcmd1bWVudC4gRXhwZWN0ZWQgYW4gSFRNTEVsZW1lbnQuXCIpO1xuXHR9XG5cblx0cmV0dXJuIHRyYXZlcnNlU2hhZG93Um9vdHMoZWxlbWVudCkgfHwgbnVsbDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgcmVnaXN0ZXJlZCBjdXN0b20gZWxlbWVudHMgaW4gdGhlIGN1cnJlbnQgZG9jdW1lbnQuXG4gKlxuICogQHJldHVybnMge3N0cmluZ1tdfVxuICogQHNpbmNlIDQuMC4wXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAqL1xuZnVuY3Rpb24gZ2V0UmVnaXN0ZXJlZEN1c3RvbUVsZW1lbnRzKCkge1xuXHRjb25zdCBjdXN0b21FbGVtZW50VGFncyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIipcIikpXG5cdFx0Lm1hcCgodGFnKSA9PiB0YWcudGFnTmFtZS50b0xvd2VyQ2FzZSgpKVxuXHRcdC5maWx0ZXIoKHRhZ05hbWUpID0+IHRhZ05hbWUuaW5jbHVkZXMoXCItXCIpICYmIGN1c3RvbUVsZW1lbnRzLmdldCh0YWdOYW1lKSk7XG5cblx0cmV0dXJuIEFycmF5LmZyb20obmV3IFNldChjdXN0b21FbGVtZW50VGFncykpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBTdGFjayB9O1xuXG4vKipcbiAqIFlvdSBjYW4gY2FsbCB0aGUgbWV0aG9kIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYG5ldyBNb25zdGVyLlR5cGVzLlF1ZXVlKClgLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuY2xhc3MgU3RhY2sgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuZGF0YSA9IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvc3RhY2tcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGlzRW1wdHkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGggPT09IDA7XG5cdH1cblxuXHQvKipcblx0ICogbG9va3MgYXQgdGhlIG9iamVjdCBhdCB0aGUgdG9wIG9mIHRoaXMgc3RhY2sgd2l0aG91dCByZW1vdmluZyBpdCBmcm9tIHRoZSBzdGFjay5cblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHBlZWsoKSB7XG5cdFx0aWYgKHRoaXMuaXNFbXB0eSgpKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmRhdGE/Llt0aGlzLmRhdGEubGVuZ3RoIC0gMV07XG5cdH1cblxuXHQvKipcblx0ICogcHVzaGVzIGFuIGl0ZW0gb250byB0aGUgdG9wIG9mIHRoaXMgc3RhY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybnMge1F1ZXVlfVxuXHQgKi9cblx0cHVzaCh2YWx1ZSkge1xuXHRcdHRoaXMuZGF0YS5wdXNoKHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZW1vdmUgYWxsIGVudHJpZXNcblx0ICpcblx0ICogQHJldHVybnMge1F1ZXVlfVxuXHQgKi9cblx0Y2xlYXIoKSB7XG5cdFx0dGhpcy5kYXRhID0gW107XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmVtb3ZlcyB0aGUgb2JqZWN0IGF0IHRoZSB0b3Agb2YgdGhpcyBzdGFjayBhbmQgcmV0dXJuc1xuXHQgKiB0aGF0IG9iamVjdCBhcyB0aGUgdmFsdWUgb2YgdGhpcyBmdW5jdGlvbi4gaXMgdGhlIHN0YWNrIGVtcHR5XG5cdCAqIHRoZSByZXR1cm4gdmFsdWUgaXMgdW5kZWZpbmVkLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0cG9wKCkge1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5wb3AoKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHtcblx0aXNBcnJheSxcblx0aXNJbnRlZ2VyLFxuXHRpc09iamVjdCxcblx0aXNQcmltaXRpdmUsXG5cdGlzU3RyaW5nLFxufSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBTdGFjayB9IGZyb20gXCIuLi90eXBlcy9zdGFjay5tanNcIjtcbmltcG9ydCB7XG5cdHZhbGlkYXRlSW50ZWdlcixcblx0dmFsaWRhdGVCb29sZWFuLFxuXHR2YWxpZGF0ZVN0cmluZyxcbn0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBQYXRoZmluZGVyLCBERUxJTUlURVIsIFdJTERDQVJEIH07XG5cbi8qKlxuICogcGF0aCBzZXBhcmF0b3JcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgREVMSU1JVEVSID0gXCIuXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFdJTERDQVJEID0gXCIqXCI7XG5cbi8qKlxuICogUGF0aGZpbmRlciBpcyBhIGNsYXNzIHRvIGZpbmQgYSBwYXRoIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBXaXRoIHRoZSBoZWxwIG9mIHRoZSBwYXRoZmluZGVyLCB2YWx1ZXMgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4gZnJvbSBhbiBvYmplY3QgY29uc3RydWN0LlxuICpcbiAqIGBgYFxuICogbmV3IFBhdGhmaW5kZXIoe1xuICogYToge1xuICogICAgIGI6IHtcbiAqICAgICAgICAgZjogW1xuICogICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgIGc6IGZhbHNlLFxuICogICAgICAgICAgICAgfVxuICogICAgICAgICBdLFxuICogICAgIH1cbiAqIH1cbiAqIH0pLmdldFZpYShcImEuYi5mLjAuZ1wiKTsgLy8gXHUyMUE2IGZhbHNlXG4gKiBgYGBcbiAqXG4gKiBpZiBhIHZhbHVlIGlzIG5vdCBwcmVzZW50IG9yIGhhcyB0aGUgd3JvbmcgdHlwZSwgYSBjb3JyZXNwb25kaW5nIGV4Y2VwdGlvbiBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiBuZXcgUGF0aGZpbmRlcih7fSkuZ2V0VmlhKFwiYS5iLmYuMC5nXCIpOyAvLyBcdTIxQTYgRXJyb3JcbiAqIGBgYFxuICpcbiAqIFRoZSBgUGF0aGZpbmRlci5leGlzdHMoKWAgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgYWNjZXNzIHRvIHRoZSBwYXRoIGlzIHBvc3NpYmxlLlxuICpcbiAqIGBgYFxuICogbmV3IFBhdGhmaW5kZXIoe30pLmV4aXN0cyhcImEuYi5mLjAuZ1wiKTsgLy8gXHUyMUE2IGZhbHNlXG4gKiBgYGBcbiAqXG4gKiBwYXRoZmluZGVyIGNhbiBhbHNvIGJlIHVzZWQgdG8gYnVpbGQgb2JqZWN0IHN0cnVjdHVyZXMuIHRvIGRvIHRoaXMsIHRoZSBgUGF0aGZpbmRlci5zZXRWaWEoKWAgbWV0aG9kIG11c3QgYmUgdXNlZC5cbiAqXG4gKiBgYGBcbiAqIG9iaiA9IHt9O1xuICogbmV3IFBhdGhmaW5kZXIob2JqKS5zZXRWaWEoJ2EuYi4wLmMnLCB0cnVlKTsgLy8gXHUyMUE2IHthOntiOlt7Yzp0cnVlfV19fVxuICogYGBgXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2RhdGEvcGF0aGZpbmRlci0xLm1qc1xuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2RhdGEvcGF0aGZpbmRlci0yLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS40LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKi9cbmNsYXNzIFBhdGhmaW5kZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNvbnN0cnVjdG9yLlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0IC0gVGhlIG9iamVjdCBwYXJhbWV0ZXIgZm9yIHRoZSBjb25zdHJ1Y3Rvci5cblx0ICpcblx0ICogQHRocm93cyB7RXJyb3J9IFRocm93cyBhbiBlcnJvciBpZiB0aGUgcHJvdmlkZWQgb2JqZWN0IHBhcmFtZXRlciBpcyBhIHNpbXBsZSB0eXBlLlxuXHQgKi9cblx0Y29uc3RydWN0b3Iob2JqZWN0KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChpc1ByaW1pdGl2ZShvYmplY3QpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgcGFyYW1ldGVyIG11c3Qgbm90IGJlIGEgc2ltcGxlIHR5cGVcIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5vYmplY3QgPSBvYmplY3Q7XG5cdFx0dGhpcy53aWxkQ2FyZCA9IFdJTERDQVJEO1xuXHR9XG5cblx0LyoqXG5cdCAqIHNldCB3aWxkY2FyZFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gd2lsZGNhcmRcblx0ICogQHJldHVybiB7UGF0aGZpbmRlcn1cblx0ICogQHNpbmNlIDEuNy4wXG5cdCAqL1xuXHRzZXRXaWxkQ2FyZCh3aWxkY2FyZCkge1xuXHRcdHZhbGlkYXRlU3RyaW5nKHdpbGRjYXJkKTtcblx0XHR0aGlzLndpbGRDYXJkID0gd2lsZGNhcmQ7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8YXJyYXl9IHBhdGhcblx0ICogQHNpbmNlIDEuNC4wXG5cdCAqIEByZXR1cm5zIHsqfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBqb3VybmV5IGlzIG5vdCBhdCBpdHMgZW5kXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcblx0ICovXG5cdGdldFZpYShwYXRoKSB7XG5cdFx0cmV0dXJuIGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHRoaXMub2JqZWN0LCBwYXRoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xhcnJheX0gcGF0aFxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm5zIHtQYXRoZmluZGVyfVxuXHQgKiBAc2luY2UgMS40LjBcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcblx0ICovXG5cdHNldFZpYShwYXRoLCB2YWx1ZSkge1xuXHRcdHNldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHRoaXMub2JqZWN0LCBwYXRoLCB2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlIFZpYSBQYXRoXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGFycmF5fSBwYXRoXG5cdCAqIEByZXR1cm5zIHtQYXRoZmluZGVyfVxuXHQgKiBAc2luY2UgMS42LjBcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcblx0ICovXG5cdGRlbGV0ZVZpYShwYXRoKSB7XG5cdFx0ZGVsZXRlVmFsdWVWaWFQYXRoLmNhbGwodGhpcywgdGhpcy5vYmplY3QsIHBhdGgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGFycmF5fSBwYXRoXG5cdCAqIEByZXR1cm4ge2Jvb2x9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXG5cdCAqIEBzaW5jZSAxLjQuMFxuXHQgKi9cblx0ZXhpc3RzKHBhdGgpIHtcblx0XHR0cnkge1xuXHRcdFx0Z2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgdGhpcy5vYmplY3QsIHBhdGgsIHRydWUpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0geyp9IHN1YmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfGFycmF5fSBwYXRoXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNoZWNrXG4gKiBAcmV0dXJuIHtNYXB9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgam91cm5leSBpcyBub3QgYXQgaXRzIGVuZFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGl0ZXJhdGUoc3ViamVjdCwgcGF0aCwgY2hlY2spIHtcblx0aWYgKGNoZWNrID09PSB1bmRlZmluZWQpIHtcblx0XHRjaGVjayA9IGZhbHNlO1xuXHR9XG5cdHZhbGlkYXRlQm9vbGVhbihjaGVjayk7XG5cblx0Y29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuXG5cdGlmIChpc0FycmF5KHBhdGgpKSB7XG5cdFx0cGF0aCA9IHBhdGguam9pbihERUxJTUlURVIpO1xuXHR9XG5cblx0aWYgKGlzT2JqZWN0KHN1YmplY3QpIHx8IGlzQXJyYXkoc3ViamVjdCkpIHtcblx0XHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzdWJqZWN0KSkge1xuXHRcdFx0cmVzdWx0LnNldChrZXksIGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHZhbHVlLCBwYXRoLCBjaGVjaykpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zdCBrZXkgPSBwYXRoLnNwbGl0KERFTElNSVRFUikuc2hpZnQoKTtcblx0XHRyZXN1bHQuc2V0KGtleSwgZ2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgc3ViamVjdCwgcGF0aCwgY2hlY2spKTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7Kn0gc3ViamVjdFxuICogQHBhcmFtIFtzdHJpbmd8YXJyYXl9IHBhdGhcbiAqIEBwYXJhbSBbYm9vbGVhbn0gY2hlY2tcbiAqIEByZXR1cm5zIHsqfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGpvdXJuZXkgaXMgbm90IGF0IGl0cyBlbmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZVZpYVBhdGgoc3ViamVjdCwgcGF0aCwgY2hlY2spIHtcblx0aWYgKGNoZWNrID09PSB1bmRlZmluZWQpIHtcblx0XHRjaGVjayA9IGZhbHNlO1xuXHR9XG5cdHZhbGlkYXRlQm9vbGVhbihjaGVjayk7XG5cblx0aWYgKCEoaXNBcnJheShwYXRoKSB8fCBpc1N0cmluZyhwYXRoKSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIGVycm9yOiBwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXlcIik7XG5cdH1cblxuXHRsZXQgcGFydHM7XG5cdGlmIChpc1N0cmluZyhwYXRoKSkge1xuXHRcdGlmIChwYXRoID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm4gc3ViamVjdDtcblx0XHR9XG5cblx0XHRwYXJ0cyA9IHBhdGguc3BsaXQoREVMSU1JVEVSKTtcblx0fVxuXG5cdGxldCBjdXJyZW50ID0gcGFydHMuc2hpZnQoKTtcblxuXHRpZiAoY3VycmVudCA9PT0gdGhpcy53aWxkQ2FyZCkge1xuXHRcdHJldHVybiBpdGVyYXRlLmNhbGwodGhpcywgc3ViamVjdCwgcGFydHMuam9pbihERUxJTUlURVIpLCBjaGVjayk7XG5cdH1cblxuXHRpZiAoaXNPYmplY3Qoc3ViamVjdCkgfHwgaXNBcnJheShzdWJqZWN0KSkge1xuXHRcdGxldCBhbmNob3I7XG5cdFx0aWYgKHN1YmplY3QgaW5zdGFuY2VvZiBNYXAgfHwgc3ViamVjdCBpbnN0YW5jZW9mIFdlYWtNYXApIHtcblx0XHRcdGFuY2hvciA9IHN1YmplY3QuZ2V0KGN1cnJlbnQpO1xuXHRcdH0gZWxzZSBpZiAoc3ViamVjdCBpbnN0YW5jZW9mIFNldCB8fCBzdWJqZWN0IGluc3RhbmNlb2YgV2Vha1NldCkge1xuXHRcdFx0Y3VycmVudCA9IHBhcnNlSW50KGN1cnJlbnQpO1xuXHRcdFx0dmFsaWRhdGVJbnRlZ2VyKGN1cnJlbnQpO1xuXHRcdFx0YW5jaG9yID0gWy4uLnN1YmplY3RdPy5bY3VycmVudF07XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgV2Vha1JlZiA9PT0gXCJmdW5jdGlvblwiICYmIHN1YmplY3QgaW5zdGFuY2VvZiBXZWFrUmVmKSB7XG5cdFx0XHR0aHJvdyBFcnJvcihcInVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcIik7XG5cdFx0fSBlbHNlIGlmIChpc0FycmF5KHN1YmplY3QpKSB7XG5cdFx0XHRjdXJyZW50ID0gcGFyc2VJbnQoY3VycmVudCk7XG5cdFx0XHR2YWxpZGF0ZUludGVnZXIoY3VycmVudCk7XG5cdFx0XHRhbmNob3IgPSBzdWJqZWN0Py5bY3VycmVudF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFuY2hvciA9IHN1YmplY3Q/LltjdXJyZW50XTtcblx0XHR9XG5cblx0XHRpZiAoaXNPYmplY3QoYW5jaG9yKSB8fCBpc0FycmF5KGFuY2hvcikpIHtcblx0XHRcdHJldHVybiBnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCBhbmNob3IsIHBhcnRzLmpvaW4oREVMSU1JVEVSKSwgY2hlY2spO1xuXHRcdH1cblxuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aHJvdyBFcnJvcihgdGhlIGpvdXJuZXkgaXMgbm90IGF0IGl0cyBlbmQgKCR7cGFydHMuam9pbihERUxJTUlURVIpfSlgKTtcblx0XHR9XG5cblx0XHRpZiAoY2hlY2sgPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuXHRcdFx0XHRPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3ViamVjdCksXG5cdFx0XHRcdGN1cnJlbnQsXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoIXN1YmplY3QuaGFzT3duUHJvcGVydHkoY3VycmVudCkgJiYgZGVzY3JpcHRvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IEVycm9yKFwidW5rbm93biB2YWx1ZVwiKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gYW5jaG9yO1xuXHR9XG5cblx0dGhyb3cgVHlwZUVycm9yKGB1bnN1cHBvcnRlZCB0eXBlICR7dHlwZW9mIHN1YmplY3R9YCk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdWJqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ3xhcnJheX0gcGF0aFxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IHRoZSBqb3VybmV5IGlzIG5vdCBhdCBpdHMgZW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2V0VmFsdWVWaWFQYXRoKHN1YmplY3QsIHBhdGgsIHZhbHVlKSB7XG5cdGlmICghKGlzQXJyYXkocGF0aCkgfHwgaXNTdHJpbmcocGF0aCkpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBlcnJvcjogcGF0aCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5XCIpO1xuXHR9XG5cblx0bGV0IHBhcnRzO1xuXHRpZiAoaXNBcnJheShwYXRoKSkge1xuXHRcdGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHN1YmplY3Q7XG5cdFx0fVxuXG5cdFx0cGFydHMgPSBwYXRoO1xuXHR9IGVsc2Uge1xuXHRcdHBhcnRzID0gcGF0aC5zcGxpdChERUxJTUlURVIpO1xuXHR9XG5cblx0bGV0IGxhc3QgPSBwYXJ0cy5wb3AoKTtcblx0Y29uc3Qgc3VicGF0aCA9IHBhcnRzLmpvaW4oREVMSU1JVEVSKTtcblxuXHRjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXHRsZXQgY3VycmVudCA9IHN1YnBhdGg7XG5cdHdoaWxlICh0cnVlKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHN1YmplY3QsIGN1cnJlbnQsIHRydWUpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdHN0YWNrLnB1c2goY3VycmVudCk7XG5cdFx0cGFydHMucG9wKCk7XG5cdFx0Y3VycmVudCA9IHBhcnRzLmpvaW4oREVMSU1JVEVSKTtcblxuXHRcdGlmIChjdXJyZW50ID09PSBcIlwiKSBicmVhaztcblx0fVxuXG5cdHdoaWxlICghc3RhY2suaXNFbXB0eSgpKSB7XG5cdFx0Y3VycmVudCA9IHN0YWNrLnBvcCgpO1xuXHRcdGxldCBvYmogPSB7fTtcblxuXHRcdGlmICghc3RhY2suaXNFbXB0eSgpKSB7XG5cdFx0XHRjb25zdCBuID0gc3RhY2sucGVlaygpLnNwbGl0KERFTElNSVRFUikucG9wKCk7XG5cdFx0XHRpZiAoaXNJbnRlZ2VyKHBhcnNlSW50KG4pKSkge1xuXHRcdFx0XHRvYmogPSBbXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRzZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCBzdWJqZWN0LCBjdXJyZW50LCBvYmopO1xuXHR9XG5cblx0Y29uc3QgYW5jaG9yID0gZ2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgc3ViamVjdCwgc3VicGF0aCk7XG5cblx0aWYgKCEoaXNPYmplY3Qoc3ViamVjdCkgfHwgaXNBcnJheShzdWJqZWN0KSkpIHtcblx0XHR0aHJvdyBUeXBlRXJyb3IoYHVuc3VwcG9ydGVkIHR5cGU6ICR7dHlwZW9mIHN1YmplY3R9YCk7XG5cdH1cblxuXHRpZiAoYW5jaG9yIGluc3RhbmNlb2YgTWFwIHx8IGFuY2hvciBpbnN0YW5jZW9mIFdlYWtNYXApIHtcblx0XHRhbmNob3Iuc2V0KGxhc3QsIHZhbHVlKTtcblx0fSBlbHNlIGlmIChhbmNob3IgaW5zdGFuY2VvZiBTZXQgfHwgYW5jaG9yIGluc3RhbmNlb2YgV2Vha1NldCkge1xuXHRcdGFuY2hvci5hcHBlbmQodmFsdWUpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBXZWFrUmVmID09PSBcImZ1bmN0aW9uXCIgJiYgYW5jaG9yIGluc3RhbmNlb2YgV2Vha1JlZikge1xuXHRcdHRocm93IEVycm9yKFwidW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVwiKTtcblx0fSBlbHNlIGlmIChpc0FycmF5KGFuY2hvcikpIHtcblx0XHRsYXN0ID0gcGFyc2VJbnQobGFzdCk7XG5cdFx0dmFsaWRhdGVJbnRlZ2VyKGxhc3QpO1xuXHRcdGFzc2lnblByb3BlcnR5KGFuY2hvciwgbGFzdCwgdmFsdWUpO1xuXHR9IGVsc2Uge1xuXHRcdGFzc2lnblByb3BlcnR5KGFuY2hvciwgbGFzdCwgdmFsdWUpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqL1xuZnVuY3Rpb24gYXNzaWduUHJvcGVydHkob2JqZWN0LCBrZXksIHZhbHVlKSB7XG5cdGlmICghb2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRvYmplY3Rba2V5XSA9IHZhbHVlO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0ZGVsZXRlIG9iamVjdFtrZXldO1xuXHR9XG5cblx0b2JqZWN0W2tleV0gPSB2YWx1ZTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHN1YmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGpvdXJuZXkgaXMgbm90IGF0IGl0cyBlbmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVsZXRlVmFsdWVWaWFQYXRoKHN1YmplY3QsIHBhdGgpIHtcblx0aWYgKCEoaXNBcnJheShwYXRoKSB8fCBpc1N0cmluZyhwYXRoKSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIGVycm9yOiBwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXlcIik7XG5cdH1cblxuXHRsZXQgcGFydHM7XG5cdGlmIChpc0FycmF5KHBhdGgpKSB7XG5cdFx0aWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gc3ViamVjdDtcblx0XHR9XG5cblx0XHRwYXJ0cyA9IHBhdGg7XG5cdH0gZWxzZSB7XG5cdFx0cGFydHMgPSBwYXRoLnNwbGl0KERFTElNSVRFUik7XG5cdH1cblxuXHRsZXQgbGFzdCA9IHBhcnRzLnBvcCgpO1xuXHRjb25zdCBzdWJwYXRoID0gcGFydHMuam9pbihERUxJTUlURVIpO1xuXG5cdGNvbnN0IGFuY2hvciA9IGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHN1YmplY3QsIHN1YnBhdGgpO1xuXG5cdGlmIChhbmNob3IgaW5zdGFuY2VvZiBNYXApIHtcblx0XHRhbmNob3IuZGVsZXRlKGxhc3QpO1xuXHR9IGVsc2UgaWYgKFxuXHRcdGFuY2hvciBpbnN0YW5jZW9mIFNldCB8fFxuXHRcdGFuY2hvciBpbnN0YW5jZW9mIFdlYWtNYXAgfHxcblx0XHRhbmNob3IgaW5zdGFuY2VvZiBXZWFrU2V0IHx8XG5cdFx0KHR5cGVvZiBXZWFrUmVmID09PSBcImZ1bmN0aW9uXCIgJiYgYW5jaG9yIGluc3RhbmNlb2YgV2Vha1JlZilcblx0KSB7XG5cdFx0dGhyb3cgRXJyb3IoXCJ1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXCIpO1xuXHR9IGVsc2UgaWYgKGlzQXJyYXkoYW5jaG9yKSkge1xuXHRcdGxhc3QgPSBwYXJzZUludChsYXN0KTtcblx0XHR2YWxpZGF0ZUludGVnZXIobGFzdCk7XG5cdFx0ZGVsZXRlIGFuY2hvcltsYXN0XTtcblx0fSBlbHNlIHtcblx0XHRkZWxldGUgYW5jaG9yW2xhc3RdO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNGdW5jdGlvbiwgaXNPYmplY3QsIGlzUHJpbWl0aXZlIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdHlwZU9mIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVvZi5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBjbG9uZSB9O1xuXG4vKipcbiAqIFdpdGggdGhpcyBmdW5jdGlvbiwgb2JqZWN0cyBjYW4gYmUgY2xvbmVkLlxuICogVGhlIGVudGlyZSBvYmplY3QgdHJlZSBpcyBydW4gdGhyb3VnaC5cbiAqXG4gKiBQcm94eSwgRWxlbWVudCwgSFRNTERvY3VtZW50IGFuZCBEb2N1bWVudEZyYWdtZW50IGluc3RhbmNlcyBhcmUgbm90IGNsb25lZC5cbiAqIEdsb2JhbCBvYmplY3RzIHN1Y2ggYXMgd2luZG93cyBhcmUgYWxzbyBub3QgY2xvbmVkLFxuICpcbiAqIElmIGFuIG9iamVjdCBoYXMgYSBtZXRob2QgYGdldENsb25lKClgLCB0aGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgY2xvbmUuXG4gKlxuICogQHBhcmFtIHsqfSBvYmogb2JqZWN0IHRvIGJlIGNsb25lZFxuICogQHJldHVybnMgeyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVXRpbFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmFibGUgdG8gY2xvbmUgb2JqISBpdHMgdHlwZSBpc24ndCBzdXBwb3J0ZWQuXG4gKi9cbmZ1bmN0aW9uIGNsb25lKG9iaikge1xuXHQvLyB0eXBlb2YgbnVsbCByZXN1bHRzIGluICdvYmplY3QnLiAgaHR0cHM6Ly8yYWxpdHkuY29tLzIwMTMvMTAvdHlwZW9mLW51bGwuaHRtbFxuXHRpZiAobnVsbCA9PT0gb2JqKSB7XG5cdFx0cmV0dXJuIG9iajtcblx0fVxuXG5cdC8vIEhhbmRsZSB0aGUgdHdvIHNpbXBsZSB0eXBlcywgbnVsbCBhbmQgdW5kZWZpbmVkXG5cdGlmIChpc1ByaW1pdGl2ZShvYmopKSB7XG5cdFx0cmV0dXJuIG9iajtcblx0fVxuXG5cdC8vIEhhbmRsZSB0aGUgdHdvIHNpbXBsZSB0eXBlcywgbnVsbCBhbmQgdW5kZWZpbmVkXG5cdGlmIChpc0Z1bmN0aW9uKG9iaikpIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0Ly8gSGFuZGxlIEFycmF5XG5cdGlmIChpc0FycmF5KG9iaikpIHtcblx0XHRjb25zdCBjb3B5ID0gW107XG5cdFx0Zm9yIChsZXQgaSA9IDAsIGxlbiA9IG9iai5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0Y29weVtpXSA9IGNsb25lKG9ialtpXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvcHk7XG5cdH1cblxuXHRpZiAoaXNPYmplY3Qob2JqKSkge1xuXHRcdC8vIEhhbmRsZSBEYXRlXG5cdFx0aWYgKG9iaiBpbnN0YW5jZW9mIERhdGUpIHtcblx0XHRcdGNvbnN0IGNvcHkgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0Y29weS5zZXRUaW1lKG9iai5nZXRUaW1lKCkpO1xuXHRcdFx0cmV0dXJuIGNvcHk7XG5cdFx0fVxuXG5cdFx0LyoqIERvIG5vdCBjbG9uZSBET00gbm9kZXMgKi9cblx0XHRpZiAodHlwZW9mIEVsZW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqIGluc3RhbmNlb2YgRWxlbWVudCkgcmV0dXJuIG9iajtcblx0XHRpZiAodHlwZW9mIEhUTUxEb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogaW5zdGFuY2VvZiBIVE1MRG9jdW1lbnQpXG5cdFx0XHRyZXR1cm4gb2JqO1xuXHRcdGlmIChcblx0XHRcdHR5cGVvZiBEb2N1bWVudEZyYWdtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRvYmogaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50XG5cdFx0KVxuXHRcdFx0cmV0dXJuIG9iajtcblxuXHRcdC8qKiBEbyBub3QgY2xvbmUgZ2xvYmFsIG9iamVjdHMgKi9cblx0XHRpZiAob2JqID09PSBnZXRHbG9iYWwoKSkgcmV0dXJuIG9iajtcblx0XHRpZiAodHlwZW9mIGdsb2JhbENvbnRleHQgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqID09PSBnbG9iYWxDb250ZXh0KVxuXHRcdFx0cmV0dXJuIG9iajtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogPT09IHdpbmRvdykgcmV0dXJuIG9iajtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIG9iaiA9PT0gZG9jdW1lbnQpIHJldHVybiBvYmo7XG5cdFx0aWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqID09PSBuYXZpZ2F0b3IpIHJldHVybiBvYmo7XG5cdFx0aWYgKHR5cGVvZiBKU09OICE9PSBcInVuZGVmaW5lZFwiICYmIG9iaiA9PT0gSlNPTikgcmV0dXJuIG9iajtcblxuXHRcdC8vIEhhbmRsZSBQcm94eS1PYmplY3Rcblx0XHR0cnkge1xuXHRcdFx0Ly8gdHJ5L2NhdGNoIGJlY2F1c2UgcG9zc2libGU6IFR5cGVFcnJvcjogRnVuY3Rpb24gaGFzIG5vbi1vYmplY3QgcHJvdG90eXBlICd1bmRlZmluZWQnIGluIGluc3RhbmNlb2YgY2hlY2tcblx0XHRcdGlmIChvYmogaW5zdGFuY2VvZiBQcm94eSkge1xuXHRcdFx0XHRyZXR1cm4gb2JqO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRyZXR1cm4gY2xvbmVPYmplY3Qob2JqKTtcblx0fVxuXG5cdHRocm93IG5ldyBFcnJvcihcInVuYWJsZSB0byBjbG9uZSBvYmohIGl0cyB0eXBlIGlzbid0IHN1cHBvcnRlZC5cIik7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjbG9uZU9iamVjdChvYmopIHtcblx0dmFsaWRhdGVPYmplY3Qob2JqKTtcblxuXHRjb25zdCBma3QgPSBvYmo/LltcImNvbnN0cnVjdG9yXCJdO1xuXG5cdC8qKiBPYmplY3QgaGFzIGNsb25lIG1ldGhvZCAqL1xuXHRpZiAodHlwZU9mKGZrdCkgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdGNvbnN0IHByb3RvdHlwZSA9IGZrdD8ucHJvdG90eXBlO1xuXHRcdGlmICh0eXBlb2YgcHJvdG90eXBlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShcImdldENsb25lXCIpICYmXG5cdFx0XHRcdHR5cGVPZihvYmouZ2V0Q2xvbmUpID09PSBcImZ1bmN0aW9uXCJcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gb2JqLmdldENsb25lKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0bGV0IGNvcHkgPSB7fTtcblx0aWYgKFxuXHRcdHR5cGVvZiBvYmouY29uc3RydWN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBvYmouY29uc3RydWN0b3IuY2FsbCA9PT0gXCJmdW5jdGlvblwiXG5cdCkge1xuXHRcdGNvcHkgPSBuZXcgb2JqLmNvbnN0cnVjdG9yKCk7XG5cdH1cblxuXHRmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcblx0XHRpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoaXNQcmltaXRpdmUob2JqW2tleV0pKSB7XG5cdFx0XHRjb3B5W2tleV0gPSBvYmpba2V5XTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvcHlba2V5XSA9IGNsb25lKG9ialtrZXldKTtcblx0fVxuXG5cdHJldHVybiBjb3B5O1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gXCIuLi91dGlsL2Nsb25lLm1qc1wiO1xuXG5leHBvcnQgeyBMb2NhbGUsIHBhcnNlTG9jYWxlIH07XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuSTE4blxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcHJvcGVydGllc1N5bWJvbCA9IFN5bWJvbChcInByb3BlcnRpZXNcIik7XG5cbi8qKlxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkkxOG5cbiAqL1xuY29uc3QgbG9jYWxlU3RyaW5nU3ltYm9sID0gU3ltYm9sKFwibG9jYWxlU3RyaW5nXCIpO1xuXG4vKipcbiAqIFRoZSBMb2NhbGUgY2xhc3MgaXMgYSBiYXNlIGNsYXNzIGZvciB0aGUgbGFuZ3VhZ2UgY2xhc3Nlcy5cbiAqXG4gKiBSRkNcbiAqXG4gKiBgYGBcbiAqIEEgTGFuZ3VhZ2UtVGFnIGNvbnNpc3RzIG9mOlxuICogbGFuZ3RhZyAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgZ2VuZXJhdGVkIHRhZ1xuICogICAgICAgICAgIC1vci0gcHJpdmF0ZS11c2UgICAgICAgIDsgYSBwcml2YXRlIHVzZSB0YWdcbiAqXG4gKiBsYW5ndGFnICAgICAgID0gKGxhbmd1YWdlXG4gKiAgICAgICAgICAgICAgICAgICAgW1wiLVwiIHNjcmlwdF1cbiAqICAgICAgICAgICAgICAgICAgICBbXCItXCIgcmVnaW9uXVxuICogICAgICAgICAgICAgICAgICAgICooXCItXCIgdmFyaWFudClcbiAqICAgICAgICAgICAgICAgICAgICAqKFwiLVwiIGV4dGVuc2lvbilcbiAqICAgICAgICAgICAgICAgICAgICBbXCItXCIgcHJpdmF0ZXVzZV0pXG4gKlxuICogbGFuZ3VhZ2UgICAgICA9IFwiZW5cIiwgXCJhbGVcIiwgb3IgYSByZWdpc3RlcmVkIHZhbHVlXG4gKlxuICogc2NyaXB0ICAgICAgICA9IFwiTGF0blwiLCBcIkN5cmxcIiwgXCJIYW50XCIgSVNPIDE1OTI0IGNvZGVzXG4gKlxuICogcmVnaW9uICAgICAgICA9IFwiVVNcIiwgXCJDU1wiLCBcIkZSXCIgSVNPIDMxNjYgY29kZXNcbiAqICAgICAgICAgICAgICAgICBcIjQxOVwiLCBcIjAxOVwiLCAgb3IgVU4gTS40OSBjb2Rlc1xuICpcbiAqIHZhcmlhbnQgICAgICAgPSBcInJvemFqXCIsIFwibmVkaXNcIiwgXCIxOTk2XCIsIG11bHRpcGxlIHN1YnRhZ3MgY2FuIGJlIHVzZWQgaW4gYSB0YWdcbiAqXG4gKiBleHRlbnNpb24gICAgID0gc2luZ2xlIGxldHRlciBmb2xsb3dlZCBieSBhZGRpdGlvbmFsIHN1YnRhZ3M7IG1vcmUgdGhhbiBvbmUgZXh0ZW5zaW9uXG4gKiAgICAgICAgICAgICAgICAgbWF5IGJlIHVzZWQgaW4gYSBsYW5ndWFnZSB0YWdcbiAqXG4gKiBwcml2YXRlLXVzZSAgID0gXCJ4LVwiIGZvbGxvd2VkIGJ5IGFkZGl0aW9uYWwgc3VidGFncywgYXMgbWFueSBhcyBhcmUgcmVxdWlyZWRcbiAqICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgdGhlc2UgY2FuIHN0YXJ0IGEgdGFnIG9yIGFwcGVhciBhdCB0aGUgZW5kIChidXQgbm90XG4gKiAgICAgICAgICAgICAgICAgaW4gdGhlIG1pZGRsZSlcbiAqIGBgYFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkkxOG5cbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzMDY2XG4gKi9cbmNsYXNzIExvY2FsZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbcmVnaW9uXVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW3NjcmlwdF1cblx0ICogQHBhcmFtIHtzdHJpbmd9IFt2YXJpYW50c11cblx0ICogQHBhcmFtIHtzdHJpbmd9IFtleHRsYW5nXVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW3ByaXZhdGVVc2VdXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBsb2NhbGVcblx0ICovXG5cdGNvbnN0cnVjdG9yKGxhbmd1YWdlLCByZWdpb24sIHNjcmlwdCwgdmFyaWFudHMsIGV4dGxhbmcsIHByaXZhdGVVc2UpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpc1twcm9wZXJ0aWVzU3ltYm9sXSA9IHtcblx0XHRcdGxhbmd1YWdlOiBsYW5ndWFnZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdmFsaWRhdGVTdHJpbmcobGFuZ3VhZ2UpLFxuXHRcdFx0c2NyaXB0OiBzY3JpcHQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHZhbGlkYXRlU3RyaW5nKHNjcmlwdCksXG5cdFx0XHRyZWdpb246IHJlZ2lvbiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdmFsaWRhdGVTdHJpbmcocmVnaW9uKSxcblx0XHRcdHZhcmlhbnRzOiB2YXJpYW50cyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdmFsaWRhdGVTdHJpbmcodmFyaWFudHMpLFxuXHRcdFx0ZXh0bGFuZzogZXh0bGFuZyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdmFsaWRhdGVTdHJpbmcoZXh0bGFuZyksXG5cdFx0XHRwcml2YXRlVXNlOlxuXHRcdFx0XHRwcml2YXRlVXNlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyhwcml2YXRlVXNlKSxcblx0XHR9O1xuXG5cdFx0Y29uc3QgcyA9IFtdO1xuXHRcdGlmIChsYW5ndWFnZSAhPT0gdW5kZWZpbmVkKSBzLnB1c2gobGFuZ3VhZ2UpO1xuXHRcdGlmIChzY3JpcHQgIT09IHVuZGVmaW5lZCkgcy5wdXNoKHNjcmlwdCk7XG5cdFx0aWYgKHJlZ2lvbiAhPT0gdW5kZWZpbmVkKSBzLnB1c2gocmVnaW9uKTtcblx0XHRpZiAodmFyaWFudHMgIT09IHVuZGVmaW5lZCkgcy5wdXNoKHZhcmlhbnRzKTtcblx0XHRpZiAoZXh0bGFuZyAhPT0gdW5kZWZpbmVkKSBzLnB1c2goZXh0bGFuZyk7XG5cdFx0aWYgKHByaXZhdGVVc2UgIT09IHVuZGVmaW5lZCkgcy5wdXNoKHByaXZhdGVVc2UpO1xuXG5cdFx0aWYgKHMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBsb2NhbGVcIik7XG5cdFx0fVxuXG5cdFx0dGhpc1tsb2NhbGVTdHJpbmdTeW1ib2xdID0gcy5qb2luKFwiLVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL2xvY2FsZUBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0IGxvY2FsZVN0cmluZygpIHtcblx0XHRyZXR1cm4gdGhpc1tsb2NhbGVTdHJpbmdTeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXQgbGFuZ3VhZ2UoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcHJvcGVydGllc1N5bWJvbF0ubGFuZ3VhZ2U7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldCByZWdpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXNbcHJvcGVydGllc1N5bWJvbF0ucmVnaW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXQgc2NyaXB0KCkge1xuXHRcdHJldHVybiB0aGlzW3Byb3BlcnRpZXNTeW1ib2xdLnNjcmlwdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0IHZhcmlhbnRzKCkge1xuXHRcdHJldHVybiB0aGlzW3Byb3BlcnRpZXNTeW1ib2xdLnZhcmlhbnRzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXQgZXh0bGFuZygpIHtcblx0XHRyZXR1cm4gdGhpc1twcm9wZXJ0aWVzU3ltYm9sXS5leHRsYW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXQgcHJpdmF0ZVVzZSgpIHtcblx0XHRyZXR1cm4gdGhpc1twcm9wZXJ0aWVzU3ltYm9sXS5wcml2YXRlVmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIGAke3RoaXMubG9jYWxlU3RyaW5nfWA7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHN0cnVjdHVyZSBoYXMgdGhlIGZvbGxvd2luZzogbGFuZ3VhZ2UsIHNjcmlwdCwgcmVnaW9uLCB2YXJpYW50cywgZXh0bGFuZywgcHJpdmF0ZVVzZVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkkxOG4uTG9jYWxlTWFwfVxuXHQgKi9cblx0Z2V0TWFwKCkge1xuXHRcdHJldHVybiBjbG9uZSh0aGlzW3Byb3BlcnRpZXNTeW1ib2xdKTtcblx0fVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IExvY2FsZU1hcFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxhbmd1YWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc2NyaXB0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gcmVnaW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmFyaWFudHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBleHRsYW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJpdmF0ZVVzZVxuICogQG1lbWJlck9mIE1vbnN0ZXIuSTE4blxuICovXG5cbi8qKlxuICogUGFyc2UgbG9jYWwgYWNjb3JkaW5nIHRvIHJmYzQ2NDYgc3RhbmRhcmRcbiAqXG4gKiBMaW1pdGF0aW9uczogVGhlIHJlZ2V4IGNhbm5vdCBoYW5kbGUgbXVsdGlwbGUgdmFyaWFudHMgb3IgcHJpdmF0ZS5cbiAqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIG1ldGhvZCB2aWEgdGhpcyBmdW5jdGlvbiBpbmRpdmlkdWFsbHk6XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHtjcmVhdGVMb2NhbGV9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL2kxOG4vbG9jYWxlLm1qcyc7XG4gKiBjcmVhdGVMb2NhbGUoKVxuICogYGBgXG4gKlxuICogUkZDXG4gKlxuICogYGBgXG4gKiAgIFRoZSBzeW50YXggb2YgdGhlIGxhbmd1YWdlIHRhZyBpbiBBQk5GIFtSRkM0MjM0XSBpczpcbiAqXG4gKiAgIExhbmd1YWdlLVRhZyAgPSBsYW5ndGFnXG4gKiAgICAgICAgICAgICAgICAgLyBwcml2YXRldXNlICAgICAgICAgICAgIDsgcHJpdmF0ZSB1c2UgdGFnXG4gKiAgICAgICAgICAgICAgICAgLyBncmFuZGZhdGhlcmVkICAgICAgICAgIDsgZ3JhbmRmYXRoZXJlZCByZWdpc3RyYXRpb25zXG4gKlxuICogICBsYW5ndGFnICAgICAgID0gKGxhbmd1YWdlXG4gKiAgICAgICAgICAgICAgICAgICAgW1wiLVwiIHNjcmlwdF1cbiAqICAgICAgICAgICAgICAgICAgICBbXCItXCIgcmVnaW9uXVxuICogICAgICAgICAgICAgICAgICAgICooXCItXCIgdmFyaWFudClcbiAqICAgICAgICAgICAgICAgICAgICAqKFwiLVwiIGV4dGVuc2lvbilcbiAqICAgICAgICAgICAgICAgICAgICBbXCItXCIgcHJpdmF0ZXVzZV0pXG4gKlxuICogICBsYW5ndWFnZSAgICAgID0gKDIqM0FMUEhBIFsgZXh0bGFuZyBdKSA7IHNob3J0ZXN0IElTTyA2MzkgY29kZVxuICogICAgICAgICAgICAgICAgIC8gNEFMUEhBICAgICAgICAgICAgICAgICA7IHJlc2VydmVkIGZvciBmdXR1cmUgdXNlXG4gKiAgICAgICAgICAgICAgICAgLyA1KjhBTFBIQSAgICAgICAgICAgICAgIDsgcmVnaXN0ZXJlZCBsYW5ndWFnZSBzdWJ0YWdcbiAqXG4gKiAgIGV4dGxhbmcgICAgICAgPSAqMyhcIi1cIiAzQUxQSEEpICAgICAgICAgOyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZVxuICpcbiAqICAgc2NyaXB0ICAgICAgICA9IDRBTFBIQSAgICAgICAgICAgICAgICAgOyBJU08gMTU5MjQgY29kZVxuICpcbiAqICAgcmVnaW9uICAgICAgICA9IDJBTFBIQSAgICAgICAgICAgICAgICAgOyBJU08gMzE2NiBjb2RlXG4gKiAgICAgICAgICAgICAgICAgLyAzRElHSVQgICAgICAgICAgICAgICAgIDsgVU4gTS40OSBjb2RlXG4gKlxuICogICB2YXJpYW50ICAgICAgID0gNSo4YWxwaGFudW0gICAgICAgICAgICA7IHJlZ2lzdGVyZWQgdmFyaWFudHNcbiAqICAgICAgICAgICAgICAgICAvIChESUdJVCAzYWxwaGFudW0pXG4gKlxuICogICBleHRlbnNpb24gICAgID0gc2luZ2xldG9uIDEqKFwiLVwiICgyKjhhbHBoYW51bSkpXG4gKlxuICogICBzaW5nbGV0b24gICAgID0gJXg0MS01NyAvICV4NTktNUEgLyAleDYxLTc3IC8gJXg3OS03QSAvIERJR0lUXG4gKiAgICAgICAgICAgICAgICAgOyBcImFcIi1cIndcIiAvIFwieVwiLVwielwiIC8gXCJBXCItXCJXXCIgLyBcIllcIi1cIlpcIiAvIFwiMFwiLVwiOVwiXG4gKiAgICAgICAgICAgICAgICAgOyBTaW5nbGUgbGV0dGVyczogeC9YIGlzIHJlc2VydmVkIGZvciBwcml2YXRlIHVzZVxuICpcbiAqICAgcHJpdmF0ZXVzZSAgICA9IChcInhcIi9cIlhcIikgMSooXCItXCIgKDEqOGFscGhhbnVtKSlcbiAqXG4gKiAgIGdyYW5kZmF0aGVyZWQgPSAxKjNBTFBIQSAxKjIoXCItXCIgKDIqOGFscGhhbnVtKSlcbiAqICAgICAgICAgICAgICAgICAgIDsgZ3JhbmRmYXRoZXJlZCByZWdpc3RyYXRpb25cbiAqICAgICAgICAgICAgICAgICAgIDsgTm90ZTogaSBpcyB0aGUgb25seSBzaW5nbGV0b25cbiAqICAgICAgICAgICAgICAgICAgIDsgdGhhdCBzdGFydHMgYSBncmFuZGZhdGhlcmVkIHRhZ1xuICpcbiAqICAgYWxwaGFudW0gICAgICA9IChBTFBIQSAvIERJR0lUKSAgICAgICA7IGxldHRlcnMgYW5kIG51bWJlcnNcbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIEZpZ3VyZSAxOiBMYW5ndWFnZSBUYWcgQUJORlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2FsZVxuICogQHJldHVybnMge0xvY2FsZX1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkkxOG5cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgbG9jYWxlXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTG9jYWxlKGxvY2FsZSkge1xuXHRsb2NhbGUgPSB2YWxpZGF0ZVN0cmluZyhsb2NhbGUpLnJlcGxhY2UoL18vZywgXCItXCIpO1xuXG5cdGxldCBsYW5ndWFnZTtcblx0bGV0IHJlZ2lvbjtcblx0bGV0IHZhcmlhbnRzO1xuXHRsZXQgcGFydHM7XG5cdGxldCBzY3JpcHQ7XG5cdGxldCBleHRsYW5nO1xuXHRjb25zdCByZWdleFJlZ3VsYXIgPVxuXHRcdFwiKGFydC1sb2piYW58Y2VsLWdhdWxpc2h8bm8tYm9rfG5vLW55bnx6aC1ndW95dXx6aC1oYWtrYXx6aC1taW58emgtbWluLW5hbnx6aC14aWFuZylcIjtcblx0Y29uc3QgcmVnZXhJcnJlZ3VsYXIgPVxuXHRcdFwiKGVuLUdCLW9lZHxpLWFtaXxpLWJubnxpLWRlZmF1bHR8aS1lbm9jaGlhbnxpLWhha3xpLWtsaW5nb258aS1sdXh8aS1taW5nb3xpLW5hdmFqb3xpLXB3bnxpLXRhb3xpLXRheXxpLXRzdXxzZ24tQkUtRlJ8c2duLUJFLU5MfHNnbi1DSC1ERSlcIjtcblx0Y29uc3QgcmVnZXhHcmFuZGZhdGhlcmVkID0gYCgke3JlZ2V4SXJyZWd1bGFyfXwke3JlZ2V4UmVndWxhcn0pYDtcblx0Y29uc3QgcmVnZXhQcml2YXRlVXNlID0gXCIoeCgtW0EtWmEtejAtOV17MSw4fSkrKVwiO1xuXHRjb25zdCByZWdleFNpbmdsZXRvbiA9IFwiWzAtOUEtV1ktWmEtd3ktel1cIjtcblx0Y29uc3QgcmVnZXhFeHRlbnNpb24gPSBgKCR7cmVnZXhTaW5nbGV0b259KC1bQS1aYS16MC05XXsyLDh9KSspYDtcblx0Y29uc3QgcmVnZXhWYXJpYW50ID0gXCIoW0EtWmEtejAtOV17NSw4fXxbMC05XVtBLVphLXowLTldezN9KVwiO1xuXHRjb25zdCByZWdleFJlZ2lvbiA9IFwiKFtBLVphLXpdezJ9fFswLTldezN9KVwiO1xuXHRjb25zdCByZWdleFNjcmlwdCA9IFwiKFtBLVphLXpdezR9KVwiO1xuXHRjb25zdCByZWdleEV4dGxhbmcgPSBcIihbQS1aYS16XXszfSgtW0EtWmEtel17M30pezAsMn0pXCI7XG5cdGNvbnN0IHJlZ2V4TGFuZ3VhZ2UgPSBgKChbQS1aYS16XXsyLDN9KC0ke3JlZ2V4RXh0bGFuZ30pPyl8W0EtWmEtel17NH18W0EtWmEtel17NSw4fSlgO1xuXHRjb25zdCByZWdleExhbmd0YWcgPSBgKCR7cmVnZXhMYW5ndWFnZX0oLSR7cmVnZXhTY3JpcHR9KT8oLSR7cmVnZXhSZWdpb259KT8oLSR7cmVnZXhWYXJpYW50fSkqKC0ke3JlZ2V4RXh0ZW5zaW9ufSkqKC0ke3JlZ2V4UHJpdmF0ZVVzZX0pPylgO1xuXHRjb25zdCByZWdleExhbmd1YWdlVGFnID0gYF4oJHtyZWdleEdyYW5kZmF0aGVyZWR9fCR7cmVnZXhMYW5ndGFnfXwke3JlZ2V4UHJpdmF0ZVVzZX0pJGA7XG5cdGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChyZWdleExhbmd1YWdlVGFnKTtcblx0bGV0IG1hdGNoO1xuXG5cdGlmICgobWF0Y2ggPSByZWdleC5leGVjKGxvY2FsZSkpICE9PSBudWxsKSB7XG5cdFx0aWYgKG1hdGNoLmluZGV4ID09PSByZWdleC5sYXN0SW5kZXgpIHtcblx0XHRcdHJlZ2V4Lmxhc3RJbmRleCsrO1xuXHRcdH1cblx0fVxuXG5cdGlmIChtYXRjaCA9PT0gdW5kZWZpbmVkIHx8IG1hdGNoID09PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgbG9jYWxlXCIpO1xuXHR9XG5cblx0aWYgKG1hdGNoWzZdICE9PSB1bmRlZmluZWQpIHtcblx0XHRsYW5ndWFnZSA9IG1hdGNoWzZdO1xuXG5cdFx0cGFydHMgPSBsYW5ndWFnZS5zcGxpdChcIi1cIik7XG5cdFx0aWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGxhbmd1YWdlID0gcGFydHNbMF07XG5cdFx0XHRleHRsYW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHR9XG5cblx0aWYgKG1hdGNoWzE0XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmVnaW9uID0gbWF0Y2hbMTRdO1xuXHR9XG5cblx0aWYgKG1hdGNoWzEyXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0c2NyaXB0ID0gbWF0Y2hbMTJdO1xuXHR9XG5cblx0aWYgKG1hdGNoWzE2XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFyaWFudHMgPSBtYXRjaFsxNl07XG5cdH1cblxuXHRyZXR1cm4gbmV3IExvY2FsZShsYW5ndWFnZSwgcmVnaW9uLCBzY3JpcHQsIHZhcmlhbnRzLCBleHRsYW5nKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IHBhcnNlTG9jYWxlIH0gZnJvbSBcIi4uL2kxOG4vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcblxuZXhwb3J0IHsgZ2V0TG9jYWxlT2ZEb2N1bWVudCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBERUZBVUxUX0xBTkdVQUdFID0gXCJlblwiO1xuXG4vKipcbiAqIFdpdGggdGhpcyBmdW5jdGlvbiB5b3UgY2FuIHJlYWQgdGhlIGxhbmd1YWdlIHZlcnNpb24gc2V0IGJ5IHRoZSBkb2N1bWVudC5cbiAqIEZvciB0aGlzIHRoZSBhdHRyaWJ1dGUgYGxhbmdgIGluIHRoZSBodG1sIHRhZyBpcyByZWFkLiBJZiBubyBhdHRyaWJ1dGUgaXMgc2V0LCBgZW5gIGlzIHVzZWQgYXMgZGVmYXVsdC5cbiAqIEFsdGVybmF0aXZlbHksIHRoZSBsYW5ndWFnZSB2ZXJzaW9uIG9mIHRoZSBicm93c2VyIGlzIHVzZWQuXG4gKlxuICogYGBgaHRtbFxuICogPGh0bWwgbGFuZz1cImVuXCI+XG4gKiBgYGBcbiAqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIGZ1bmN0aW9uIHZpYSBgZ2V0TG9jYWxlT2ZEb2N1bWVudCgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEzLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgbG9jYWxlXG4gKiBAc3VtbWFyeSBUcmllcyB0byBkZXRlcm1pbmUgdGhlIGxvY2FsZSB1c2VkXG4gKi9cbmZ1bmN0aW9uIGdldExvY2FsZU9mRG9jdW1lbnQoKSB7XG5cdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRjb25zdCBodG1sID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImh0bWxcIik7XG5cdGlmIChodG1sIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgaHRtbC5oYXNBdHRyaWJ1dGUoXCJsYW5nXCIpKSB7XG5cdFx0Y29uc3QgbG9jYWxlID0gaHRtbC5nZXRBdHRyaWJ1dGUoXCJsYW5nXCIpO1xuXHRcdGlmIChsb2NhbGUpIHtcblx0XHRcdHJldHVybiBuZXcgcGFyc2VMb2NhbGUobG9jYWxlKTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBuYXZpZ2F0b3JMYW5ndWFnZSA9IGdldE5hdmlnYXRvckxhbmd1YWdlKCk7XG5cdGlmIChuYXZpZ2F0b3JMYW5ndWFnZSkge1xuXHRcdHJldHVybiBwYXJzZUxvY2FsZShuYXZpZ2F0b3JMYW5ndWFnZSk7XG5cdH1cblxuXHRyZXR1cm4gcGFyc2VMb2NhbGUoREVGQVVMVF9MQU5HVUFHRSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfCp9XG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9OYXZpZ2F0b3IvbGFuZ3VhZ2VcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05hdmlnYXRvci9sYW5ndWFnZXNcbiAqL1xuY29uc3QgZ2V0TmF2aWdhdG9yTGFuZ3VhZ2UgPSAoKSA9PiB7XG5cdGNvbnN0IG5hdmlnYXRvciA9IGdldEdsb2JhbE9iamVjdChcIm5hdmlnYXRvclwiKTtcblx0aWYgKG5hdmlnYXRvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmIChuYXZpZ2F0b3IuaGFzT3duUHJvcGVydHkoXCJsYW5ndWFnZVwiKSkge1xuXHRcdGNvbnN0IGxhbmd1YWdlID0gbmF2aWdhdG9yLmxhbmd1YWdlO1xuXHRcdGlmICh0eXBlb2YgbGFuZ3VhZ2UgPT09IFwic3RyaW5nXCIgJiYgbGFuZ3VhZ2UubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIGxhbmd1YWdlO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGxhbmd1YWdlcyA9IG5hdmlnYXRvcj8ubGFuZ3VhZ2VzO1xuXHRpZiAoQXJyYXkuaXNBcnJheShsYW5ndWFnZXMpICYmIGxhbmd1YWdlcy5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIGxhbmd1YWdlc1swXTtcblx0fVxuXG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBJRCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7TWFwPHN0cmluZywgaW50ZWdlcj59XG4gKi9cbmNvbnN0IGludGVybmFsQ291bnRlciA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiBXaXRoIHRoZSBpZCBjbGFzcywgc2VxdWVuY2VzIG9mIGlkcyBjYW4gYmUgY3JlYXRlZC4gZm9yIHRoaXMgcHVycG9zZSwgYW4gaW50ZXJuYWwgY291bnRlciBpcyBpbmNyZW1lbnRlZCBmb3IgZWFjaCBwcmVmaXguXG4gKiB0aHVzLCB0aGUgZmlyc3QgaWQgd2l0aCB0aGUgcHJlZml4IGBteWlkYCB3aWxsIGJlIGBteWlkMWAgYW5kIHRoZSBzZWNvbmQgaWQgYG15aWQyYC5cbiAqIFRoZSBpZHMgYXJlIHRoZSBzYW1lIGZvciBldmVyeSBjYWxsLCBmb3IgZXhhbXBsZSBvbiBhIHdlYiBwYWdlLlxuICpcbiAqIFNvIHRoZSBpZHMgY2FuIGFsc28gYmUgdXNlZCBmb3IgbmF2aWdhdGlvbi4geW91IGp1c3QgaGF2ZSB0byB0YWtlIGNhcmUgdGhhdCB0aGUgb3JkZXIgc3RheXMgdGhlIHNhbWUuXG4gKlxuICogQXMgb2YgdmVyc2lvbiAxLjYuMCB0aGVyZSBpcyB0aGUgbmV3IFJhbmRvbUlELiB0aGlzIElEIGNsYXNzIGlzIGNvbnRpbnVvdXMgZnJvbSBub3cgb24uXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHN1bW1hcnkgQXV0b21hdGljIGdlbmVyYXRpb24gb2YgaWRzXG4gKi9cbmNsYXNzIElEIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBjcmVhdGUgbmV3IGlkIHdpdGggcHJlZml4XG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcblx0ICovXG5cdGNvbnN0cnVjdG9yKHByZWZpeCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAocHJlZml4ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHByZWZpeCA9IFwiaWRcIjtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZVN0cmluZyhwcmVmaXgpO1xuXG5cdFx0aWYgKCFpbnRlcm5hbENvdW50ZXIuaGFzKHByZWZpeCkpIHtcblx0XHRcdGludGVybmFsQ291bnRlci5zZXQocHJlZml4LCAxKTtcblx0XHR9XG5cblx0XHRsZXQgY291bnQgPSBpbnRlcm5hbENvdW50ZXIuZ2V0KHByZWZpeCk7XG5cdFx0dGhpcy5pZCA9IHByZWZpeCArIGNvdW50O1xuXG5cdFx0aW50ZXJuYWxDb3VudGVyLnNldChwcmVmaXgsICsrY291bnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzLmlkO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgQmFzZVdpdGhPcHRpb25zIH07XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyB3aXRoIG9wdGlvbnMgZnJvbSB3aGljaCBzb21lIG1vbnN0ZXIgY2xhc3NlcyBhcmUgZGVyaXZlZC5cbiAqXG4gKiBUaGlzIGNsYXNzIGlzIGFjdHVhbGx5IG9ubHkgdXNlZCBhcyBhIGJhc2UgY2xhc3MuXG4gKlxuICogQ2xhc3NlcyB0aGF0IHJlcXVpcmUgdGhlIHBvc3NpYmlsaXR5IG9mIG9wdGlvbnMgY2FuIGJlIGRlcml2ZWQgZGlyZWN0bHkgZnJvbSB0aGlzIGNsYXNzLlxuICogRGVyaXZlZCBjbGFzc2VzIGFsbW9zdCBhbHdheXMgb3ZlcnJpZGUgdGhlIGBkZWZhdWxgIGdldHRlciB3aXRoIHRoZWlyIG93biB2YWx1ZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2Jhc2V3aXRob3B0aW9ucy5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSAzLjE1LjAgdXNlIHtAbGluayBNb25zdGVyLlR5cGVzLkJhc2V9IHdpdGgge0BsaW5rIE1vbnN0ZXIuVHlwZXMuZXF1aXBXaXRoSW50ZXJuYWx9IGluc3RlYWQuXG4gKi9cbmNsYXNzIEJhc2VXaXRoT3B0aW9ucyBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0b3B0aW9ucyA9IHt9O1xuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gZXh0ZW5kKHt9LCB0aGlzLmRlZmF1bHRzLCB2YWxpZGF0ZU9iamVjdChvcHRpb25zKSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBnZXR0ZXIgcHJvdmlkZXMgdGhlIG9wdGlvbnMuIERlcml2ZWQgY2xhc3NlcyBvdmVyd3JpdGVcblx0ICogdGhpcyBnZXR0ZXIgd2l0aCB0aGVpciBvd24gdmFsdWVzLiBJdCBpcyBnb29kIGthcm1hIHRvIGFsd2F5cyBpbmNsdWRlXG5cdCAqIHRoZSB2YWx1ZXMgZnJvbSB0aGUgcGFyZW50IGNsYXNzLlxuXHQgKlxuXHQgKiBgYGBqYXZhc2NyaXB0XG5cdCAqIGdldCBkZWZhdWx0cygpIHtcblx0ICogICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHQgKiAgICAgICAgIG15a2V5OiB0cnVlXG5cdCAqICAgICB9KTtcblx0ICogfVxuXHQgKlxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7b2JqZWN0fVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBuZXN0ZWQgb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGJ5IHBhdGggYGEuYi5jYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuXHQgKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZVxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKiBAc2luY2UgMS4xMC4wXG5cdCAqL1xuXHRnZXRPcHRpb24ocGF0aCwgZGVmYXVsdFZhbHVlKSB7XG5cdFx0bGV0IHZhbHVlO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhbHVlID0gbmV3IFBhdGhmaW5kZXIodGhpc1tpbnRlcm5hbFN5bWJvbF0pLmdldFZpYShwYXRoKTtcblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBkZWZhdWx0VmFsdWU7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRoYXNPYmplY3RMaW5rLFxuXHRnZXRMaW5rZWRPYmplY3RzLFxuXHRhZGRUb09iamVjdExpbmssXG59IGZyb20gXCIuLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IGdldExvY2FsZU9mRG9jdW1lbnQgfSBmcm9tIFwiLi4vZG9tL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IEJhc2VXaXRoT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzXCI7XG5pbXBvcnQgeyBMb2NhbGUgfSBmcm9tIFwiLi9sb2NhbGUubWpzXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbnMgfSBmcm9tIFwiLi90cmFuc2xhdGlvbnMubWpzXCI7XG5cbmV4cG9ydCB7IFByb3ZpZGVyLCB0cmFuc2xhdGlvbnNMaW5rU3ltYm9sIH07XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuSTE4blxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuOS4wXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCB0cmFuc2xhdGlvbnNMaW5rU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9tb25zdGVyL2kxOG4vdHJhbnNsYXRpb25zQEBsaW5rXCIsXG4pO1xuXG4vKipcbiAqIEEgcHJvdmlkZXIgbWFrZXMgYSB0cmFuc2xhdGlvbiBvYmplY3QgYXZhaWxhYmxlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkkxOG5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzA2Nn1cbiAqL1xuY2xhc3MgUHJvdmlkZXIgZXh0ZW5kcyBCYXNlV2l0aE9wdGlvbnMge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvaTE4bi9wcm92aWRlckBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtMb2NhbGV8c3RyaW5nfSBsb2NhbGVcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGdldFRyYW5zbGF0aW9ucyhsb2NhbGUpIHtcblx0XHRpZiAobG9jYWxlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzb2x2ZShuZXcgVHJhbnNsYXRpb25zKGxvY2FsZSkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtMb2NhbGV8c3RyaW5nfSBsb2NhbGVcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuXHQgKiBAcmV0dXJuIHtQcm92aWRlcn1cblx0ICovXG5cdGFzc2lnblRvRWxlbWVudChsb2NhbGUsIGVsZW1lbnQpIHtcblx0XHRpZiAobG9jYWxlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHR9XG5cblx0XHRpZiAoIShsb2NhbGUgaW5zdGFuY2VvZiBMb2NhbGUpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJMb2NhbGUgaXMgbm90IGFuIGluc3RhbmNlIG9mIExvY2FsZVwiKTtcblx0XHR9XG5cblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHRlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJvZHlcIik7XG5cdFx0fVxuXG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiRWxlbWVudCBpcyBub3QgYW4gSFRNTEVsZW1lbnRcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRpb25zKGxvY2FsZSkudGhlbigob2JqKSA9PiB7XG5cdFx0XHRsZXQgdHJhbnNsYXRpb25zID0gbnVsbDtcblx0XHRcdGlmIChoYXNPYmplY3RMaW5rKGVsZW1lbnQsIHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wpKSB7XG5cdFx0XHRcdGNvbnN0IG9iamVjdHMgPSBnZXRMaW5rZWRPYmplY3RzKGVsZW1lbnQsIHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IG8gb2Ygb2JqZWN0cykge1xuXHRcdFx0XHRcdGlmIChvIGluc3RhbmNlb2YgVHJhbnNsYXRpb25zKSB7XG5cdFx0XHRcdFx0XHR0cmFuc2xhdGlvbnMgPSBvO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCEodHJhbnNsYXRpb25zIGluc3RhbmNlb2YgVHJhbnNsYXRpb25zKSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIk9iamVjdCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgVHJhbnNsYXRpb25zXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJhbnNsYXRpb25zLmFzc2lnblRyYW5zbGF0aW9ucyhvYmopO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YWRkVG9PYmplY3RMaW5rKGVsZW1lbnQsIHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wsIG9iaik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvYmo7XG5cdFx0fSk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGdldExpbmtlZE9iamVjdHMsIGhhc09iamVjdExpbmsgfSBmcm9tIFwiLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfT0JKRUNUTElOSyB9IGZyb20gXCIuLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUludGVnZXIsXG5cdHZhbGlkYXRlT2JqZWN0LFxuXHR2YWxpZGF0ZVN0cmluZyxcbn0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgTG9jYWxlLCBwYXJzZUxvY2FsZSB9IGZyb20gXCIuL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wgfSBmcm9tIFwiLi9wcm92aWRlci5tanNcIjtcblxuZXhwb3J0IHsgVHJhbnNsYXRpb25zLCBnZXREb2N1bWVudFRyYW5zbGF0aW9ucyB9O1xuXG4vKipcbiAqIFdpdGggdGhpcyBjbGFzcyB5b3UgY2FuIG1hbmFnZSB0cmFuc2xhdGlvbnMgYW5kIGFjY2VzcyB0aGUga2V5cy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvaTE4bi90cmFuc2xhdGlvbnMubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEzLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5JMThuXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzA2NlxuICovXG5jbGFzcyBUcmFuc2xhdGlvbnMgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7TG9jYWxlfSBsb2NhbGVcblx0ICovXG5cdGNvbnN0cnVjdG9yKGxvY2FsZSkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAobG9jYWxlIGluc3RhbmNlb2YgTG9jYWxlKSB7XG5cdFx0XHR0aGlzLmxvY2FsZSA9IGxvY2FsZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5sb2NhbGUgPSBwYXJzZUxvY2FsZSh2YWxpZGF0ZVN0cmluZyhsb2NhbGUpKTtcblx0XHR9XG5cblx0XHR0aGlzLnN0b3JhZ2UgPSBuZXcgTWFwKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvaTE4bi90cmFuc2xhdGlvbnNAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZldGNoZXMgYSB0ZXh0IHVzaW5nIHRoZSBzcGVjaWZpZWQga2V5LlxuXHQgKiBJZiBubyBzdWl0YWJsZSBrZXkgaXMgZm91bmQsIGBkZWZhdWx0VGV4dGAgaXMgdGFrZW4uXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBkZWZhdWx0VGV4dFxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBrZXkgbm90IGZvdW5kXG5cdCAqL1xuXHRnZXRUZXh0KGtleSwgZGVmYXVsdFRleHQpIHtcblx0XHRpZiAoIXRoaXMuc3RvcmFnZS5oYXMoa2V5KSkge1xuXHRcdFx0aWYgKGRlZmF1bHRUZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBrZXkgJHtrZXl9IG5vdCBmb3VuZGApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsaWRhdGVTdHJpbmcoZGVmYXVsdFRleHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHIgPSB0aGlzLnN0b3JhZ2UuZ2V0KGtleSk7XG5cdFx0aWYgKGlzT2JqZWN0KHIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRQbHVyYWxSdWxlVGV4dChrZXksIFwib3RoZXJcIiwgZGVmYXVsdFRleHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnN0b3JhZ2UuZ2V0KGtleSk7XG5cdH1cblxuXHQvKipcblx0ICogQSBudW1iZXIgYGNvdW50YCBjYW4gYmUgcGFzc2VkIHRvIHRoaXMgbWV0aG9kLiBJbiBhZGRpdGlvbiB0byBhIG51bWJlciwgb25lIG9mIHRoZSBrZXl3b3JkcyBjYW4gYWxzbyBiZSBwYXNzZWQgZGlyZWN0bHkuXG5cdCAqIFwiemVyb1wiLCBcIm9uZVwiLCBcInR3b1wiLCBcImZld1wiLCBcIm1hbnlcIiBhbmQgXCJvdGhlclwiLiBSZW1lbWJlcjogbm90IGV2ZXJ5IGxhbmd1YWdlIGhhcyBhbGwgcnVsZXMuXG5cdCAqXG5cdCAqIFRoZSBhcHByb3ByaWF0ZSB0ZXh0IGZvciB0aGlzIG51bWJlciBpcyB0aGVuIHNlbGVjdGVkLiBJZiBubyBzdWl0YWJsZSBrZXkgaXMgZm91bmQsIGBkZWZhdWx0VGV4dGAgaXMgdGFrZW4uXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHtpbnRlZ2VyfHN0cmluZ30gY291bnRcblx0ICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBkZWZhdWx0VGV4dFxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXRQbHVyYWxSdWxlVGV4dChrZXksIGNvdW50LCBkZWZhdWx0VGV4dCkge1xuXHRcdGlmICghdGhpcy5zdG9yYWdlLmhhcyhrZXkpKSB7XG5cdFx0XHRyZXR1cm4gdmFsaWRhdGVTdHJpbmcoZGVmYXVsdFRleHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHIgPSB2YWxpZGF0ZU9iamVjdCh0aGlzLnN0b3JhZ2UuZ2V0KGtleSkpO1xuXG5cdFx0bGV0IGtleXdvcmQ7XG5cdFx0aWYgKGlzU3RyaW5nKGNvdW50KSkge1xuXHRcdFx0a2V5d29yZCA9IGNvdW50LnRvTG9jYWxlU3RyaW5nKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvdW50ID0gdmFsaWRhdGVJbnRlZ2VyKGNvdW50KTtcblx0XHRcdGlmIChjb3VudCA9PT0gMCkge1xuXHRcdFx0XHQvLyBzcGVjaWFsIGhhbmRsaW5nIGZvciB6ZXJvIGNvdW50XG5cdFx0XHRcdGlmIChyLmhhc093blByb3BlcnR5KFwiemVyb1wiKSkge1xuXHRcdFx0XHRcdHJldHVybiB2YWxpZGF0ZVN0cmluZyhyW1wiemVyb1wiXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0a2V5d29yZCA9IG5ldyBJbnRsLlBsdXJhbFJ1bGVzKHRoaXMubG9jYWxlLnRvU3RyaW5nKCkpLnNlbGVjdChcblx0XHRcdFx0dmFsaWRhdGVJbnRlZ2VyKGNvdW50KSxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKHIuaGFzT3duUHJvcGVydHkoa2V5d29yZCkpIHtcblx0XHRcdHJldHVybiB2YWxpZGF0ZVN0cmluZyhyW2tleXdvcmRdKTtcblx0XHR9XG5cblx0XHQvLyBAZGVwcmVjYXRlZCBzaW5jZSAyMDIzLTAzLTE0XG5cdFx0Ly8gREVGQVVMVF9LRVkgaXMgdW5kZWZpbmVkXG5cdFx0Ly8gaWYgKHIuaGFzT3duUHJvcGVydHkoREVGQVVMVF9LRVkpKSB7XG5cdFx0Ly8gICAgIHJldHVybiB2YWxpZGF0ZVN0cmluZyhyW0RFRkFVTFRfS0VZXSk7XG5cdFx0Ly8gfVxuXG5cdFx0cmV0dXJuIHZhbGlkYXRlU3RyaW5nKGRlZmF1bHRUZXh0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgYSB0ZXh0IGZvciBhIGtleVxuXHQgKlxuXHQgKiBgYGBcblx0ICogdHJhbnNsYXRpb25zLnNldFRleHQoXCJ0ZXh0MVwiLCBcIk1ha2UgbXkgZGF5IVwiKTtcblx0ICogLy8gcGx1cmFsIHJ1bGVzXG5cdCAqIHRyYW5zbGF0aW9ucy5zZXRUZXh0KFwidGV4dDZcIiwge1xuXHQgKiAgICAgXCJ6ZXJvXCI6IFwiVGhlcmUgYXJlIG5vIGZpbGVzIG9uIERpc2suXCIsXG5cdCAqICAgICBcIm9uZVwiOiBcIlRoZXJlIGlzIG9uZSBmaWxlIG9uIERpc2suXCIsXG5cdCAqICAgICBcIm90aGVyXCI6IFwiVGhlcmUgYXJlIGZpbGVzIG9uIERpc2suXCJcblx0ICogICAgIFwiZGVmYXVsdFwiOiBcIlRoZXJlIGFyZSBmaWxlcyBvbiBEaXNrLlwiXG5cdCAqIH0pO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHRleHRcblx0ICogQHJldHVybiB7VHJhbnNsYXRpb25zfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZyBvciBvYmplY3Rcblx0ICovXG5cdHNldFRleHQoa2V5LCB0ZXh0KSB7XG5cdFx0aWYgKGlzU3RyaW5nKHRleHQpIHx8IGlzT2JqZWN0KHRleHQpKSB7XG5cdFx0XHR0aGlzLnN0b3JhZ2Uuc2V0KHZhbGlkYXRlU3RyaW5nKGtleSksIHRleHQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhIHN0cmluZyBvciBvYmplY3RcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gdHJhbnNmZXIgb3ZlcmxheXMgZnJvbSBhbiBvYmplY3QuIFRoZSBrZXlzIGFyZSB0cmFuc2ZlcnJlZCwgYW5kIHRoZSB2YWx1ZXMgYXJlIGVudGVyZWRcblx0ICogYXMgdGV4dC5cblx0ICpcblx0ICogVGhlIHZhbHVlcyBjYW4gZWl0aGVyIGJlIGNoYXJhY3RlciBzdHJpbmdzIG9yLCBpbiB0aGUgY2FzZSBvZiB0ZXh0cyB3aXRoIHBsdXJhbCBmb3Jtcywgb2JqZWN0cy4gVGhlIHBsdXJhbCBmb3Jtc1xuXHQgKiBtdXN0IGJlIHN0b3JlZCBhcyB0ZXh0IHZpYSBhIHN0YW5kYXJkIGtleSBcInplcm9cIiwgXCJvbmVcIiwgXCJ0d29cIiwgXCJmZXdcIiwgXCJtYW55XCIgYW5kIFwib3RoZXJcIi5cblx0ICpcblx0ICogQWRkaXRpb25hbGx5LCB0aGUga2V5IGRlZmF1bHQgY2FuIGJlIHNwZWNpZmllZCwgd2hpY2ggd2lsbCBiZSB1c2VkIGlmIG5vIG90aGVyIGtleSBmaXRzLlxuXHQgKlxuXHQgKiBJbiBzb21lIGxhbmd1YWdlcywgbGlrZSBmb3IgZXhhbXBsZSBpbiBHZXJtYW4sIHRoZXJlIGlzIG5vIG93biBtb3JlIG51bWJlciBhdCB0aGUgdmFsdWUgMC4gSW4gdGhlc2UgbGFuZ3VhZ2VzLFxuXHQgKiB0aGUgZnVuY3Rpb24gYXBwbGllcyBhZGRpdGlvbmFsbHkgemVyby5cblx0ICpcblx0ICogYGBgXG5cdCAqIHRyYW5zbGF0aW9ucy5hc3NpZ25UcmFuc2xhdGlvbnMoe1xuXHQgKiAgIFwidGV4dDFcIjogXCJNYWtlIG15IGRheSFcIixcblx0ICogICBcInRleHQyXCI6IFwiSSdsbCBiZSBiYWNrIVwiLFxuXHQgKiAgIFwidGV4dDZcIjoge1xuXHQgKiAgICAgXCJ6ZXJvXCI6IFwiVGhlcmUgYXJlIG5vIGZpbGVzIG9uIERpc2suXCIsXG5cdCAqICAgICBcIm9uZVwiOiBcIlRoZXJlIGlzIG9uZSBmaWxlIG9uIERpc2suXCIsXG5cdCAqICAgICBcIm90aGVyXCI6IFwiVGhlcmUgYXJlIGZpbGVzIG9uIERpc2suXCJcblx0ICogICAgIFwiZGVmYXVsdFwiOiBcIlRoZXJlIGFyZSBmaWxlcyBvbiBEaXNrLlwiXG5cdCAqIH0pO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IHRyYW5zbGF0aW9uc1xuXHQgKiBAcmV0dXJuIHtUcmFuc2xhdGlvbnN9XG5cdCAqL1xuXHRhc3NpZ25UcmFuc2xhdGlvbnModHJhbnNsYXRpb25zKSB7XG5cdFx0dmFsaWRhdGVPYmplY3QodHJhbnNsYXRpb25zKTtcblxuXHRcdGlmICh0cmFuc2xhdGlvbnMgaW5zdGFuY2VvZiBUcmFuc2xhdGlvbnMpIHtcblx0XHRcdHRyYW5zbGF0aW9ucy5zdG9yYWdlLmZvckVhY2goKHYsIGspID0+IHtcblx0XHRcdFx0dGhpcy5zZXRUZXh0KGssIHYpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh0cmFuc2xhdGlvbnMpKSB7XG5cdFx0XHR0aGlzLnNldFRleHQoaywgdik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0cmFuc2xhdGlvbnMgZm9yIHRoZSBjdXJyZW50IGRvY3VtZW50LlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8dW5kZWZpbmVkfSBbZWxlbWVudF0gLSBFbGVtZW50IHRvIHNlYXJjaCBmb3IgdHJhbnNsYXRpb25zLiBEZWZhdWx0OiBlbGVtZW50IHdpdGggb2JqZWN0bGluayBAc2NodWthaS9tb25zdGVyL2kxOG4vdHJhbnNsYXRpb25zQEBsaW5rLlxuICogQHJldHVybnMge1RyYW5zbGF0aW9uc31cbiAqIEB0aHJvd3Mge0Vycm9yfSBFbGVtZW50IGlzIG5vdCBhbiBIVE1MRWxlbWVudC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBDYW5ub3QgZmluZCBlbGVtZW50IHdpdGggdHJhbnNsYXRpb25zLiBBZGQgYSB0cmFuc2xhdGlvbnMgb2JqZWN0IHRvIHRoZSBkb2N1bWVudC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBUaGlzIGVsZW1lbnQgaGFzIG5vIHRyYW5zbGF0aW9ucy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBNaXNzaW5nIHRyYW5zbGF0aW9ucy5cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkkxOG5cbiAqL1xuZnVuY3Rpb24gZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoZWxlbWVudCkge1xuXHRjb25zdCBkID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0ZWxlbWVudCA9IGQucXVlcnlTZWxlY3Rvcihcblx0XHRcdGBbJHtBVFRSSUJVVEVfT0JKRUNUTElOS31+PVwiJHt0cmFuc2xhdGlvbnNMaW5rU3ltYm9sLnRvU3RyaW5nKCl9XCJdYCxcblx0XHQpO1xuXHRcdGlmIChlbGVtZW50ID09PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFwiQ2Fubm90IGZpbmQgZWxlbWVudCB3aXRoIHRyYW5zbGF0aW9ucy4gQWRkIGEgdHJhbnNsYXRpb25zIG9iamVjdCB0byB0aGUgZG9jdW1lbnQuXCIsXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJFbGVtZW50IGlzIG5vdCBhbiBIVE1MRWxlbWVudC5cIik7XG5cdH1cblxuXHRpZiAoIWhhc09iamVjdExpbmsoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbCkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGVsZW1lbnQgaGFzIG5vIHRyYW5zbGF0aW9ucy5cIik7XG5cdH1cblxuXHRjb25zdCBvYmogPSBnZXRMaW5rZWRPYmplY3RzKGVsZW1lbnQsIHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wpO1xuXG5cdGZvciAoY29uc3QgdCBvZiBvYmopIHtcblx0XHRpZiAodCBpbnN0YW5jZW9mIFRyYW5zbGF0aW9ucykge1xuXHRcdFx0cmV0dXJuIHQ7XG5cdFx0fVxuXHR9XG5cblx0dGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyB0cmFuc2xhdGlvbnMuXCIpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9jYWxlT2ZEb2N1bWVudCB9IGZyb20gXCIuLi9kb20vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsLCBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgSUQgfSBmcm9tIFwiLi4vdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCwgaXNTdHJpbmcsIGlzUHJpbWl0aXZlIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHtcblx0Z2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMsXG5cdFRyYW5zbGF0aW9ucyxcbn0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRpb25zLm1qc1wiO1xuaW1wb3J0IHtcblx0dmFsaWRhdGVGdW5jdGlvbixcblx0dmFsaWRhdGVJbnRlZ2VyLFxuXHR2YWxpZGF0ZU9iamVjdCxcblx0dmFsaWRhdGVQcmltaXRpdmUsXG5cdHZhbGlkYXRlU3RyaW5nLFxuXHR2YWxpZGF0ZUJvb2xlYW4sXG59IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGNsb25lIH0gZnJvbSBcIi4uL3V0aWwvY2xvbmUubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4vcGF0aGZpbmRlci5tanNcIjtcblxuZXhwb3J0IHsgVHJhbnNmb3JtZXIgfTtcblxuLyoqXG4gKiBUaGUgdHJhbnNmb3JtZXIgY2xhc3MgaXMgYSBzd2lzcyBhcm15IGtuaWZlIGZvciBtYW5pcHVsYXRpbmcgdmFsdWVzLiBlc3BlY2lhbGx5IGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIHBpcGUsIHByb2Nlc3NpbmcgY2hhaW5zIGNhbiBiZSBidWlsdCB1cC5cbiAqXG4gKiBBIHNpbXBsZSBleGFtcGxlIGlzIHRoZSBjb252ZXJzaW9uIG9mIGFsbCBjaGFyYWN0ZXJzIHRvIGxvd2VyY2FzZS4gZm9yIHRoaXMgcHVycG9zZSB0aGUgY29tbWFuZCBgdG9sb3dlcmAgbXVzdCBiZSB1c2VkLlxuICpcbiAqIGBgYFxuICogbGV0IHQgPSBuZXcgVHJhbnNmb3JtZXIoJ3RvbG93ZXInKS5ydW4oJ0FCQycpOyAvLyBcdTIxQTYgYWJjXG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyN0cmFuc2Zvcm1lcnxNb25zdGVyIERvY3N9XG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2RhdGEvdHJhbnNmb3JtZXIubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRhdGFcbiAqL1xuY2xhc3MgVHJhbnNmb3JtZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBkZWZpbml0aW9uXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihkZWZpbml0aW9uKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmFyZ3MgPSBkaXNhc3NlbWJsZShkZWZpbml0aW9uKTtcblx0XHR0aGlzLmNvbW1hbmQgPSB0aGlzLmFyZ3Muc2hpZnQoKTtcblx0XHR0aGlzLmNhbGxiYWNrcyA9IG5ldyBNYXAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dFxuXHQgKiBAcmV0dXJucyB7VHJhbnNmb3JtZXJ9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cblx0ICovXG5cdHNldENhbGxiYWNrKG5hbWUsIGNhbGxiYWNrLCBjb250ZXh0KSB7XG5cdFx0dmFsaWRhdGVTdHJpbmcobmFtZSk7XG5cdFx0dmFsaWRhdGVGdW5jdGlvbihjYWxsYmFjayk7XG5cblx0XHRpZiAoY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWxpZGF0ZU9iamVjdChjb250ZXh0KTtcblx0XHR9XG5cblx0XHR0aGlzLmNhbGxiYWNrcy5zZXQobmFtZSwge1xuXHRcdFx0Y2FsbGJhY2s6IGNhbGxiYWNrLFxuXHRcdFx0Y29udGV4dDogY29udGV4dCxcblx0XHR9KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybnMgeyp9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bmtub3duIGNvbW1hbmRcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0eXBlIG5vdCBzdXBwb3J0ZWRcblx0ICovXG5cdHJ1bih2YWx1ZSkge1xuXHRcdHJldHVybiB0cmFuc2Zvcm0uYXBwbHkodGhpcywgW3ZhbHVlXSk7XG5cdH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbW1hbmRcbiAqIEByZXR1cm5zIHthcnJheX1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRpc2Fzc2VtYmxlKGNvbW1hbmQpIHtcblx0dmFsaWRhdGVTdHJpbmcoY29tbWFuZCk7XG5cblx0Y29uc3QgcGxhY2Vob2xkZXIgPSBuZXcgTWFwKCk7XG5cdGNvbnN0IHJlZ2V4ID0gLygoPzxwYXR0ZXJuPlxcXFwoPzxjaGFyPi4pKXsxfSkvZ2ltO1xuXG5cdC8vIFRoZSBzZXBhcmF0b3IgZm9yIGFyZ3MgbXVzdCBiZSBlc2NhcGVkXG5cdC8vIHVuZGVmaW5lZCBzdHJpbmcgd2hpY2ggc2hvdWxkIG5vdCBvY2N1ciBub3JtYWxseSBhbmQgaXMgYWxzbyBub3QgYSByZWdleFxuXHRjb25zdCByZXN1bHQgPSBjb21tYW5kLm1hdGNoQWxsKHJlZ2V4KTtcblxuXHRmb3IgKGNvbnN0IG0gb2YgcmVzdWx0KSB7XG5cdFx0Y29uc3QgZyA9IG0/LltcImdyb3Vwc1wiXTtcblx0XHRpZiAoIWlzT2JqZWN0KGcpKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjb25zdCBwID0gZz8uW1wicGF0dGVyblwiXTtcblx0XHRjb25zdCBjID0gZz8uW1wiY2hhclwiXTtcblxuXHRcdGlmIChwICYmIGMpIHtcblx0XHRcdGNvbnN0IHIgPSBgX18ke25ldyBJRCgpLnRvU3RyaW5nKCl9X19gO1xuXHRcdFx0cGxhY2Vob2xkZXIuc2V0KHIsIGMpO1xuXHRcdFx0Y29tbWFuZCA9IGNvbW1hbmQucmVwbGFjZShwLCByKTtcblx0XHR9XG5cdH1cblx0bGV0IHBhcnRzID0gY29tbWFuZC5zcGxpdChcIjpcIik7XG5cblx0cGFydHMgPSBwYXJ0cy5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0bGV0IHYgPSB2YWx1ZS50cmltKCk7XG5cdFx0Zm9yIChjb25zdCBrIG9mIHBsYWNlaG9sZGVyKSB7XG5cdFx0XHR2ID0gdi5yZXBsYWNlKGtbMF0sIGtbMV0pO1xuXHRcdH1cblx0XHRyZXR1cm4gdjtcblx0fSk7XG5cblx0cmV0dXJuIHBhcnRzO1xufVxuXG4vKipcbiAqIHRyaWVzIHRvIG1ha2UgYSBzdHJpbmcgb3V0IG9mIHZhbHVlIGFuZCBpZiB0aGlzIHN1Y2NlZWRzIHRvIHJldHVybiBpdCBiYWNrXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUb1N0cmluZyh2YWx1ZSkge1xuXHRpZiAoaXNPYmplY3QodmFsdWUpICYmIHZhbHVlLmhhc093blByb3BlcnR5KFwidG9TdHJpbmdcIikpIHtcblx0XHR2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG5cdH1cblxuXHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMgeyp9XG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IHVua25vd24gY29tbWFuZFxuICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdHlwZSBub3Qgc3VwcG9ydGVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBrZXkgcGFyYW1ldGVyXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybSh2YWx1ZSkge1xuXHRjb25zdCBjb25zb2xlID0gZ2V0R2xvYmFsT2JqZWN0KFwiY29uc29sZVwiKTtcblxuXHRjb25zdCBhcmdzID0gY2xvbmUodGhpcy5hcmdzKTtcblx0bGV0IGtleTtcblx0bGV0IGRlZmF1bHRWYWx1ZTtcblxuXHRsZXQgdHJhbnNsYXRpb25zO1xuXHRsZXQgZGF0ZTtcblx0bGV0IGxvY2FsZTtcblx0bGV0IHRpbWVzdGFtcDtcblx0bGV0IG1hcDtcblx0bGV0IGtleVZhbHVlO1xuXG5cdHN3aXRjaCAodGhpcy5jb21tYW5kKSB7XG5cdFx0Y2FzZSBcInN0YXRpY1wiOlxuXHRcdFx0cmV0dXJuIHRoaXMuYXJncy5qb2luKFwiOlwiKTtcblxuXHRcdGNhc2UgXCJ0b2xvd2VyXCI6XG5cdFx0Y2FzZSBcInN0cnRvbG93ZXJcIjpcblx0XHRjYXNlIFwidG9sb3dlcmNhc2VcIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblx0XHRcdHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0Y2FzZSBcImNvbnRhaW5zXCI6XG5cdFx0XHRpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZS5pbmNsdWRlcyhhcmdzWzBdKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZS5pbmNsdWRlcyhhcmdzWzBdKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUuaGFzT3duUHJvcGVydHkoYXJnc1swXSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdGNhc2UgXCJoYXMtZW50cmllc1wiOlxuXHRcdGNhc2UgXCJoYXNlbnRyaWVzXCI6XG5cdFx0XHRpZiAoaXNPYmplY3QodmFsdWUpKSB7XG5cdFx0XHRcdHJldHVybiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID4gMDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZS5sZW5ndGggPiAwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRjYXNlIFwiaXN1bmRlZmluZWRcIjpcblx0XHRjYXNlIFwiaXMtdW5kZWZpbmVkXCI6XG5cdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZDtcblxuXHRcdGNhc2UgXCJpc251bGxcIjpcblx0XHRjYXNlIFwiaXMtbnVsbFwiOlxuXHRcdFx0cmV0dXJuIHZhbHVlID09PSBudWxsO1xuXG5cdFx0Y2FzZSBcImlzc2V0XCI6XG5cdFx0Y2FzZSBcImlzLXNldFwiOlxuXHRcdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGw7XG5cblx0XHRjYXNlIFwiaXNudW1iZXJcIjpcblx0XHRjYXNlIFwiaXMtbnVtYmVyXCI6XG5cdFx0XHRyZXR1cm4gaXNQcmltaXRpdmUodmFsdWUpICYmICFpc05hTih2YWx1ZSk7XG5cblx0XHRjYXNlIFwiaXNpbnRlZ2VyXCI6XG5cdFx0Y2FzZSBcImlzLWludGVnZXJcIjpcblx0XHRcdHJldHVybiBpc1ByaW1pdGl2ZSh2YWx1ZSkgJiYgIWlzTmFOKHZhbHVlKSAmJiB2YWx1ZSAlIDEgPT09IDA7XG5cblx0XHRjYXNlIFwiaXNmbG9hdFwiOlxuXHRcdGNhc2UgXCJpcy1mbG9hdFwiOlxuXHRcdFx0cmV0dXJuIGlzUHJpbWl0aXZlKHZhbHVlKSAmJiAhaXNOYU4odmFsdWUpICYmIHZhbHVlICUgMSAhPT0gMDtcblxuXHRcdGNhc2UgXCJpc29iamVjdFwiOlxuXHRcdGNhc2UgXCJpcy1vYmplY3RcIjpcblx0XHRcdHJldHVybiBpc09iamVjdCh2YWx1ZSk7XG5cblx0XHRjYXNlIFwiaXNhcnJheVwiOlxuXHRcdGNhc2UgXCJpcy1hcnJheVwiOlxuXHRcdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpO1xuXG5cdFx0Y2FzZSBcIm5vdFwiOlxuXHRcdFx0dmFsaWRhdGVCb29sZWFuKHZhbHVlKTtcblx0XHRcdHJldHVybiAhdmFsdWU7XG5cblx0XHRjYXNlIFwidG91cHBlclwiOlxuXHRcdGNhc2UgXCJzdHJ0b3VwcGVyXCI6XG5cdFx0Y2FzZSBcInRvdXBwZXJjYXNlXCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gdmFsdWUudG9VcHBlckNhc2UoKTtcblxuXHRcdGNhc2UgXCJ0b3N0cmluZ1wiOlxuXHRcdFx0cmV0dXJuIGAke3ZhbHVlfWA7XG5cblx0XHRjYXNlIFwidG9pbnRlZ2VyXCI6XG5cdFx0XHRjb25zdCBuID0gcGFyc2VJbnQodmFsdWUpO1xuXHRcdFx0dmFsaWRhdGVJbnRlZ2VyKG4pO1xuXHRcdFx0cmV0dXJuIG47XG5cblx0XHRjYXNlIFwidG8tanNvblwiOlxuXHRcdGNhc2UgXCJ0b2pzb25cIjpcblx0XHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG5cblx0XHRjYXNlIFwiZnJvbS1qc29uXCI6XG5cdFx0Y2FzZSBcImZyb21qc29uXCI6XG5cdFx0XHRyZXR1cm4gSlNPTi5wYXJzZSh2YWx1ZSk7XG5cblx0XHRjYXNlIFwidHJpbVwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0cmV0dXJuIHZhbHVlLnRyaW0oKTtcblxuXHRcdGNhc2UgXCJyYXd1cmxlbmNvZGVcIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblx0XHRcdHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpXG5cdFx0XHRcdC5yZXBsYWNlKC8hL2csIFwiJTIxXCIpXG5cdFx0XHRcdC5yZXBsYWNlKC8nL2csIFwiJTI3XCIpXG5cdFx0XHRcdC5yZXBsYWNlKC9cXCgvZywgXCIlMjhcIilcblx0XHRcdFx0LnJlcGxhY2UoL1xcKS9nLCBcIiUyOVwiKVxuXHRcdFx0XHQucmVwbGFjZSgvXFwqL2csIFwiJTJBXCIpO1xuXG5cdFx0Y2FzZSBcImNhbGxcIjpcblx0XHRcdC8qKlxuXHRcdFx0ICogY2FsbGJhY2stZGVmaW5pdGlvblxuXHRcdFx0ICogZnVuY3Rpb24gY2FsbGJhY2sodmFsdWUsIC4uLmFyZ3MpIHtcblx0XHRcdCAqICAgcmV0dXJuIHZhbHVlO1xuXHRcdFx0ICogfVxuXHRcdFx0ICovXG5cblx0XHRcdGxldCBjYWxsYmFjaztcblx0XHRcdGNvbnN0IGNhbGxiYWNrTmFtZSA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdGxldCBjb250ZXh0ID0gZ2V0R2xvYmFsKCk7XG5cblx0XHRcdGlmIChpc09iamVjdCh2YWx1ZSkgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoY2FsbGJhY2tOYW1lKSkge1xuXHRcdFx0XHRjYWxsYmFjayA9IHZhbHVlW2NhbGxiYWNrTmFtZV07XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuY2FsbGJhY2tzLmhhcyhjYWxsYmFja05hbWUpKSB7XG5cdFx0XHRcdGNvbnN0IHMgPSB0aGlzLmNhbGxiYWNrcy5nZXQoY2FsbGJhY2tOYW1lKTtcblx0XHRcdFx0Y2FsbGJhY2sgPSBzPy5bXCJjYWxsYmFja1wiXTtcblx0XHRcdFx0Y29udGV4dCA9IHM/LltcImNvbnRleHRcIl07XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHR0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiICYmXG5cdFx0XHRcdHdpbmRvdy5oYXNPd25Qcm9wZXJ0eShjYWxsYmFja05hbWUpXG5cdFx0XHQpIHtcblx0XHRcdFx0Y2FsbGJhY2sgPSB3aW5kb3dbY2FsbGJhY2tOYW1lXTtcblx0XHRcdH1cblx0XHRcdHZhbGlkYXRlRnVuY3Rpb24oY2FsbGJhY2spO1xuXG5cdFx0XHRhcmdzLnVuc2hpZnQodmFsdWUpO1xuXHRcdFx0cmV0dXJuIGNhbGxiYWNrLmNhbGwoY29udGV4dCwgLi4uYXJncyk7XG5cblx0XHRjYXNlIFwicGxhaW5cIjpcblx0XHRjYXNlIFwicGxhaW50ZXh0XCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHZhbHVlLCBcInRleHQvaHRtbFwiKTtcblx0XHRcdHJldHVybiBkb2MuYm9keS50ZXh0Q29udGVudCB8fCBcIlwiO1xuXG5cdFx0Y2FzZSBcImlmXCI6XG5cdFx0Y2FzZSBcIj9cIjpcblx0XHRcdHZhbGlkYXRlUHJpbWl0aXZlKHZhbHVlKTtcblxuXHRcdFx0bGV0IHRydWVTdGF0ZW1lbnQgPSBhcmdzLnNoaWZ0KCkgfHwgdW5kZWZpbmVkO1xuXHRcdFx0bGV0IGZhbHNlU3RhdGVtZW50ID0gYXJncy5zaGlmdCgpIHx8IHVuZGVmaW5lZDtcblxuXHRcdFx0dHJ1ZVN0YXRlbWVudCA9IGNvbnZlcnRTcGVjaWFsU3RyaW5ncyh0cnVlU3RhdGVtZW50LCB2YWx1ZSk7XG5cdFx0XHRmYWxzZVN0YXRlbWVudCA9IGNvbnZlcnRTcGVjaWFsU3RyaW5ncyhmYWxzZVN0YXRlbWVudCwgdmFsdWUpO1xuXG5cdFx0XHRjb25zdCBjb25kaXRpb24gPSBldmFsdWF0ZUNvbmRpdGlvbih2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gY29uZGl0aW9uID8gdHJ1ZVN0YXRlbWVudCA6IGZhbHNlU3RhdGVtZW50O1xuXG5cdFx0Y2FzZSBcInVjZmlyc3RcIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblxuXHRcdFx0Y29uc3QgZmlyc3RjaGFyID0gdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gZmlyc3RjaGFyICsgdmFsdWUuc3Vic3RyKDEpO1xuXHRcdGNhc2UgXCJ1Y3dvcmRzXCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cblx0XHRcdHJldHVybiB2YWx1ZS5yZXBsYWNlKFxuXHRcdFx0XHQvXihbYS16XFx1MDBFMC1cXHUwMEZDXSl8XFxzKyhbYS16XFx1MDBFMC1cXHUwMEZDXSkvZyxcblx0XHRcdFx0ZnVuY3Rpb24gKHYpIHtcblx0XHRcdFx0XHRyZXR1cm4gdi50b1VwcGVyQ2FzZSgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJjb3VudFwiOlxuXHRcdGNhc2UgXCJsZW5ndGhcIjpcblx0XHRcdGlmIChcblx0XHRcdFx0KGlzU3RyaW5nKHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSkgfHwgaXNBcnJheSh2YWx1ZSkpICYmXG5cdFx0XHRcdHZhbHVlLmhhc093blByb3BlcnR5KFwibGVuZ3RoXCIpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlLmxlbmd0aDtcblx0XHRcdH1cblxuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgdW5zdXBwb3J0ZWQgdHlwZSAke3R5cGVvZiB2YWx1ZX1gKTtcblxuXHRcdGNhc2UgXCJ0by1iYXNlNjRcIjpcblx0XHRjYXNlIFwiYnRvYVwiOlxuXHRcdGNhc2UgXCJiYXNlNjRcIjpcblx0XHRcdHJldHVybiBidG9hKGNvbnZlcnRUb1N0cmluZyh2YWx1ZSkpO1xuXG5cdFx0Y2FzZSBcImF0b2JcIjpcblx0XHRjYXNlIFwiZnJvbS1iYXNlNjRcIjpcblx0XHRcdHJldHVybiBhdG9iKGNvbnZlcnRUb1N0cmluZyh2YWx1ZSkpO1xuXG5cdFx0Y2FzZSBcImVtcHR5XCI6XG5cdFx0XHRyZXR1cm4gXCJcIjtcblxuXHRcdGNhc2UgXCJ1bmRlZmluZWRcIjpcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRjYXNlIFwiZGVidWdcIjpcblx0XHRcdGlmIChpc09iamVjdChjb25zb2xlKSkge1xuXHRcdFx0XHRjb25zb2xlLmxvZyh2YWx1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWx1ZTtcblxuXHRcdGNhc2UgXCJwcmVmaXhcIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblx0XHRcdGNvbnN0IHByZWZpeCA9IGFyZ3M/LlswXTtcblx0XHRcdHJldHVybiBwcmVmaXggKyB2YWx1ZTtcblxuXHRcdGNhc2UgXCJzdWZmaXhcIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblx0XHRcdGNvbnN0IHN1ZmZpeCA9IGFyZ3M/LlswXTtcblx0XHRcdHJldHVybiB2YWx1ZSArIHN1ZmZpeDtcblxuXHRcdGNhc2UgXCJ1bmlxaWRcIjpcblx0XHRcdHJldHVybiBuZXcgSUQoKS50b1N0cmluZygpO1xuXG5cdFx0Y2FzZSBcImZpcnN0LWtleVwiOlxuXHRcdGNhc2UgXCJsYXN0LWtleVwiOlxuXHRcdGNhc2UgXCJudGgtbGFzdC1rZXlcIjpcblx0XHRjYXNlIFwibnRoLWtleVwiOlxuXHRcdFx0aWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBub3Qgc3VwcG9ydGVkXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpLnNvcnQoKTtcblxuXHRcdFx0aWYgKHRoaXMuY29tbWFuZCA9PT0gXCJmaXJzdC1rZXlcIikge1xuXHRcdFx0XHRrZXkgPSAwO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmNvbW1hbmQgPT09IFwibGFzdC1rZXlcIikge1xuXHRcdFx0XHRrZXkgPSBrZXlzLmxlbmd0aCAtIDE7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRrZXkgPSB2YWxpZGF0ZUludGVnZXIocGFyc2VJbnQoYXJncy5zaGlmdCgpKSk7XG5cblx0XHRcdFx0aWYgKHRoaXMuY29tbWFuZCA9PT0gXCJudGgtbGFzdC1rZXlcIikge1xuXHRcdFx0XHRcdGtleSA9IGtleXMubGVuZ3RoIC0ga2V5IC0gMTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRkZWZhdWx0VmFsdWUgPSBhcmdzLnNoaWZ0KCkgfHwgXCJcIjtcblxuXHRcdFx0Y29uc3QgdXNlS2V5ID0ga2V5cz8uW2tleV07XG5cblx0XHRcdGlmICh2YWx1ZT8uW3VzZUtleV0pIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlPy5bdXNlS2V5XTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRlZmF1bHRWYWx1ZTtcblxuXHRcdGNhc2UgXCJrZXlcIjpcblx0XHRjYXNlIFwicHJvcGVydHlcIjpcblx0XHRjYXNlIFwiaW5kZXhcIjpcblx0XHRcdGtleSA9IGFyZ3Muc2hpZnQoKSB8fCB1bmRlZmluZWQ7XG5cblx0XHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIGtleSBwYXJhbWV0ZXJcIik7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmF1bHRWYWx1ZSA9IGFyZ3Muc2hpZnQoKSB8fCB1bmRlZmluZWQ7XG5cblx0XHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIE1hcCkge1xuXHRcdFx0XHRpZiAoIXZhbHVlLmhhcyhrZXkpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdmFsdWUuZ2V0KGtleSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc09iamVjdCh2YWx1ZSkgfHwgaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdFx0aWYgKHZhbHVlPy5ba2V5XSkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZT8uW2tleV07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZGVmYXVsdFZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIG5vdCBzdXBwb3J0ZWRcIik7XG5cblx0XHRjYXNlIFwicGF0aC1leGlzdHNcIjpcblx0XHRcdGtleSA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIGtleSBwYXJhbWV0ZXJcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBuZXcgUGF0aGZpbmRlcih2YWx1ZSkuZXhpc3RzKGtleSk7XG5cblx0XHRjYXNlIFwiY29uY2F0XCI6XG5cdFx0XHRjb25zdCBwZjIgPSBuZXcgUGF0aGZpbmRlcih2YWx1ZSk7XG5cdFx0XHRsZXQgY29uY2F0ID0gXCJcIjtcblx0XHRcdHdoaWxlIChhcmdzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0a2V5ID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0XHRpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIGtleSBwYXJhbWV0ZXJcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBhZGQgZW1wdHkgc3RyaW5nc1xuXHRcdFx0XHRpZiAoaXNTdHJpbmcoa2V5KSAmJiBrZXkudHJpbSgpID09PSBcIlwiKSB7XG5cdFx0XHRcdFx0Y29uY2F0ICs9IGtleTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghcGYyLmV4aXN0cyhrZXkpKSB7XG5cdFx0XHRcdFx0Y29uY2F0ICs9IGtleTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCB2ID0gcGYyLmdldFZpYShrZXkpO1xuXHRcdFx0XHRpZiAoIWlzUHJpbWl0aXZlKHYpKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidmFsdWUgaXMgbm90IHByaW1pdGl2ZVwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbmNhdCArPSB2O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gY29uY2F0O1xuXHRcdGNhc2UgXCJwYXRoXCI6XG5cdFx0XHRrZXkgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBrZXkgcGFyYW1ldGVyXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBwZiA9IG5ldyBQYXRoZmluZGVyKHZhbHVlKTtcblxuXHRcdFx0aWYgKCFwZi5leGlzdHMoa2V5KSkge1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcGYuZ2V0VmlhKGtleSk7XG5cblx0XHRjYXNlIFwic3Vic3RyaW5nXCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cblx0XHRcdGNvbnN0IHN0YXJ0ID0gcGFyc2VJbnQoYXJnc1swXSkgfHwgMDtcblx0XHRcdGNvbnN0IGVuZCA9IChwYXJzZUludChhcmdzWzFdKSB8fCAwKSArIHN0YXJ0O1xuXG5cdFx0XHRyZXR1cm4gdmFsdWUuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xuXG5cdFx0Y2FzZSBcIm5vcFwiOlxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXG5cdFx0Y2FzZSBcIj8/XCI6XG5cdFx0Y2FzZSBcImRlZmF1bHRcIjpcblx0XHRcdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmYXVsdFZhbHVlID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0bGV0IGRlZmF1bHRUeXBlID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0aWYgKGRlZmF1bHRUeXBlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZGVmYXVsdFR5cGUgPSBcInN0cmluZ1wiO1xuXHRcdFx0fVxuXG5cdFx0XHRzd2l0Y2ggKGRlZmF1bHRUeXBlKSB7XG5cdFx0XHRcdGNhc2UgXCJpbnRcIjpcblx0XHRcdFx0Y2FzZSBcImludGVnZXJcIjpcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoZGVmYXVsdFZhbHVlKTtcblx0XHRcdFx0Y2FzZSBcImZsb2F0XCI6XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlRmxvYXQoZGVmYXVsdFZhbHVlKTtcblx0XHRcdFx0Y2FzZSBcInVuZGVmaW5lZFwiOlxuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdGNhc2UgXCJib29sXCI6XG5cdFx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRcdFx0ZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdChkZWZhdWx0VmFsdWUgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlICE9PSBcIlwiICYmXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSAhPT0gXCJvZmZcIiAmJlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgIT09IFwiZmFsc2VcIiAmJlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgIT09IFwiZmFsc2VcIikgfHxcblx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSA9PT0gXCJvblwiIHx8XG5cdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgPT09IFwidHJ1ZVwiIHx8XG5cdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgPT09IFwidHJ1ZVwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0Y2FzZSBcInN0cmluZ1wiOlxuXHRcdFx0XHRcdHJldHVybiBgJHtkZWZhdWx0VmFsdWV9YDtcblx0XHRcdFx0Y2FzZSBcIm9iamVjdFwiOlxuXHRcdFx0XHRcdHJldHVybiBKU09OLnBhcnNlKGF0b2IoZGVmYXVsdFZhbHVlKSk7XG5cdFx0XHR9XG5cblx0XHRcdHRocm93IG5ldyBFcnJvcihcInR5cGUgbm90IHN1cHBvcnRlZFwiKTtcblxuXHRcdGNhc2UgXCJtYXBcIjpcblx0XHRcdG1hcCA9IG5ldyBNYXAoKTtcblx0XHRcdHdoaWxlIChhcmdzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0a2V5VmFsdWUgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRcdGlmIChrZXlWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBrZXkgcGFyYW1ldGVyXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0a2V5VmFsdWUgPSBrZXlWYWx1ZS5zcGxpdChcIj1cIik7XG5cdFx0XHRcdG1hcC5zZXQoa2V5VmFsdWVbMF0sIGtleVZhbHVlWzFdKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hcC5nZXQodmFsdWUpO1xuXG5cdFx0Y2FzZSBcImVxdWFsc1wiOlxuXHRcdFx0aWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgdmFsdWUgcGFyYW1ldGVyXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHR2YWxpZGF0ZVByaW1pdGl2ZSh2YWx1ZSk7XG5cblx0XHRcdGNvbnN0IGVxdWFsc1ZhbHVlID0gYXJncy5zaGlmdCgpO1xuXG5cdFx0XHQvKipcblx0XHRcdCAqIFRoZSBoaXN0b3J5IG9mIFx1MjAxQ3R5cGVvZiBudWxsXHUyMDFEXG5cdFx0XHQgKiBodHRwczovLzJhbGl0eS5jb20vMjAxMy8xMC90eXBlb2YtbnVsbC5odG1sXG5cdFx0XHQgKiBJbiBKYXZhU2NyaXB0LCB0eXBlb2YgbnVsbCBpcyAnb2JqZWN0Jywgd2hpY2ggaW5jb3JyZWN0bHkgc3VnZ2VzdHNcblx0XHRcdCAqIHRoYXQgbnVsbCBpcyBhbiBvYmplY3QuXG5cdFx0XHQgKi9cblx0XHRcdGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm4gZXF1YWxzVmFsdWUgPT09IFwibnVsbFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB0eXBlT2ZWYWx1ZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRcdFx0c3dpdGNoICh0eXBlT2ZWYWx1ZSkge1xuXHRcdFx0XHRjYXNlIFwic3RyaW5nXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSBlcXVhbHNWYWx1ZTtcblx0XHRcdFx0Y2FzZSBcIm51bWJlclwiOlxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gcGFyc2VGbG9hdChlcXVhbHNWYWx1ZSk7XG5cdFx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSAoZXF1YWxzVmFsdWUgPT09IFwidHJ1ZVwiIHx8IGVxdWFsc1ZhbHVlID09PSBcIm9uXCIpO1xuXHRcdFx0XHRjYXNlIFwidW5kZWZpbmVkXCI6XG5cdFx0XHRcdFx0cmV0dXJuIGVxdWFsc1ZhbHVlID09PSBcInVuZGVmaW5lZFwiO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInR5cGUgbm90IHN1cHBvcnRlZFwiKTtcblx0XHRcdH1cblxuXHRcdGNhc2UgXCJtb25leVwiOlxuXHRcdGNhc2UgXCJjdXJyZW5jeVwiOlxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGxvY2FsZSBvciBtaXNzaW5nIGZvcm1hdCAoJHtlLm1lc3NhZ2V9KWApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBWZXJ3ZW5kZW4gdm9uIFJlZ0V4cCwgdW0gV1x1MDBFNGhydW5nIHVuZCBCZXRyYWcgenUgZXh0cmFoaWVyZW5cblx0XHRcdGNvbnN0IG1hdGNoID0gdmFsdWUubWF0Y2goL14oW0EtWl17M30pW1xccy1dKihcXGQrKFxcLlxcZCspPykkLyk7XG5cdFx0XHRpZiAoIW1hdGNoKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgY3VycmVuY3kgZm9ybWF0XCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBjdXJyZW5jeSA9IG1hdGNoWzFdO1xuXHRcdFx0Y29uc3QgYW1vdW50ID0gbWF0Y2hbMl07XG5cblx0XHRcdGNvbnN0IG1heGltdW1GcmFjdGlvbkRpZ2l0cyA9IGFyZ3M/LlswXSB8fCAyO1xuXHRcdFx0Y29uc3Qgcm91bmRpbmdJbmNyZW1lbnQgPSBhcmdzPy5bMV0gfHwgNTtcblxuXHRcdFx0Y29uc3QgbmYgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG9jYWxlLCB7XG5cdFx0XHRcdHN0eWxlOiBcImN1cnJlbmN5XCIsXG5cdFx0XHRcdGN1cnJlbmN5OiBjdXJyZW5jeSxcblx0XHRcdFx0bWF4aW11bUZyYWN0aW9uRGlnaXRzOiBtYXhpbXVtRnJhY3Rpb25EaWdpdHMsXG5cdFx0XHRcdHJvdW5kaW5nSW5jcmVtZW50OiByb3VuZGluZ0luY3JlbWVudCxcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gbmYuZm9ybWF0KGFtb3VudCk7XG5cblx0XHRjYXNlIFwidGltZXN0YW1wXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0dGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG5cdFx0XHRpZiAoaXNOYU4odGltZXN0YW1wKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGltZXN0YW1wO1xuXG5cdFx0Y2FzZSBcInRpbWVcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdFx0XHRyZXR1cm4gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcobG9jYWxlKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBsb2NhbGUgb3IgbWlzc2luZyBmb3JtYXQgKCR7ZS5tZXNzYWdlfSlgKTtcblx0XHRcdH1cblxuXHRcdGNhc2UgXCJkYXRldGltZWZvcm1hdFwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBvcHRpb25zID0ge1xuXHRcdFx0XHRkYXRlU3R5bGU6IGFyZ3Muc2hpZnQoKSB8fCBcIm1lZGl1bVwiLFxuXHRcdFx0XHR0aW1lU3R5bGU6IGFyZ3Muc2hpZnQoKSB8fCBcIm1lZGl1bVwiLFxuXHRcdFx0fTtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCBvcHRpb25zKS5mb3JtYXQoZGF0ZSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgbG9jYWxlIG9yIG1pc3NpbmcgZm9ybWF0ICgke2UubWVzc2FnZX0pYCk7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwiZGF0ZXRpbWVcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdFx0XHRyZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGxvY2FsZSBvciBtaXNzaW5nIGZvcm1hdCAoJHtlLm1lc3NhZ2V9KWApO1xuXHRcdFx0fVxuXG5cdFx0Y2FzZSBcImRhdGVcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdFx0XHRyZXR1cm4gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcobG9jYWxlKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBsb2NhbGUgb3IgbWlzc2luZyBmb3JtYXQgKCR7ZS5tZXNzYWdlfSlgKTtcblx0XHRcdH1cblxuXHRcdGNhc2UgXCJ5ZWFyXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7XG5cblx0XHRjYXNlIFwibW9udGhcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGUuZ2V0TW9udGgoKSArIDE7XG5cblx0XHRjYXNlIFwiZGF5XCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRlLmdldERhdGUoKTtcblxuXHRcdGNhc2UgXCJ3ZWVrZGF5XCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRlLmdldERheSgpO1xuXG5cdFx0Y2FzZSBcImhvdXJcIjpcblx0XHRjYXNlIFwiaG91cnNcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGUuZ2V0SG91cnMoKTtcblxuXHRcdGNhc2UgXCJtaW51dGVcIjpcblx0XHRjYXNlIFwibWludXRlc1wiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXRNaW51dGVzKCk7XG5cblx0XHRjYXNlIFwic2Vjb25kXCI6XG5cdFx0Y2FzZSBcInNlY29uZHNcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGUuZ2V0U2Vjb25kcygpO1xuXG5cdFx0Y2FzZSBcImkxOG5cIjpcblx0XHRjYXNlIFwidHJhbnNsYXRpb25cIjpcblx0XHRcdHRyYW5zbGF0aW9ucyA9IGdldERvY3VtZW50VHJhbnNsYXRpb25zKCk7XG5cdFx0XHRpZiAoISh0cmFuc2xhdGlvbnMgaW5zdGFuY2VvZiBUcmFuc2xhdGlvbnMpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgdHJhbnNsYXRpb25zXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRrZXkgPSBhcmdzLnNoaWZ0KCkgfHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGtleSA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWZhdWx0VmFsdWUgPSBhcmdzLnNoaWZ0KCkgfHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRkZWZhdWx0VmFsdWUgPSBjb252ZXJ0U3BlY2lhbFN0cmluZ3MoZGVmYXVsdFZhbHVlLCB2YWx1ZSk7XG5cblx0XHRcdHJldHVybiB0cmFuc2xhdGlvbnMuZ2V0VGV4dChrZXksIGRlZmF1bHRWYWx1ZSk7XG5cdFxuXHRcdGNhc2UgXCJzZXQtdG9nZ2xlXCI6XG5cdFx0Y2FzZSBcInNldC1zZXRcIjpcblx0XHRjYXNlIFwic2V0LXJlbW92ZVwiOlxuXHRcdFx0IGxldCBtb2RpZmllciA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdGxldCBkZWxpbWl0ZXIgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRpZiAoZGVsaW1pdGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZGVsaW1pdGVyID0gXCIgXCI7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdGNvbnN0IHNldCA9IG5ldyBTZXQodmFsdWUuc3BsaXQoZGVsaW1pdGVyKSk7XG5cdFx0XHRjb25zdCB0b2dnbGUgPSBuZXcgU2V0KG1vZGlmaWVyLnNwbGl0KGRlbGltaXRlcikpO1xuXHRcdFx0aWYgKHRoaXMuY29tbWFuZCA9PT0gXCJzZXQtdG9nZ2xlXCIpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB0IG9mIHRvZ2dsZSkge1xuXHRcdFx0XHRcdGlmIChzZXQuaGFzKHQpKSB7XG5cdFx0XHRcdFx0XHRzZXQuZGVsZXRlKHQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzZXQuYWRkKHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmNvbW1hbmQgPT09IFwic2V0LXNldFwiKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgdCBvZiB0b2dnbGUpIHtcblx0XHRcdFx0XHRzZXQuYWRkKHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuY29tbWFuZCA9PT0gXCJzZXQtcmVtb3ZlXCIpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB0IG9mIHRvZ2dsZSkge1xuXHRcdFx0XHRcdHNldC5kZWxldGUodCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBBcnJheS5mcm9tKHNldCkuam9pbihkZWxpbWl0ZXIpO1xuXHRcdFx0XG5cdFx0XHRcblx0XHRcdFxuXHRcdGRlZmF1bHQ6XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gY29tbWFuZCAke3RoaXMuY29tbWFuZH1gKTtcblx0fVxufVxuXG5mdW5jdGlvbiBjb252ZXJ0U3BlY2lhbFN0cmluZ3MoaW5wdXQsIHZhbHVlKSB7XG5cdHN3aXRjaCAoaW5wdXQpIHtcblx0XHRjYXNlIFwidmFsdWVcIjpcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRjYXNlIFwiXFxcXHZhbHVlXCI6XG5cdFx0XHRyZXR1cm4gXCJ2YWx1ZVwiO1xuXHRcdGNhc2UgXCJcXFxcdW5kZWZpbmVkXCI6XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdGNhc2UgXCJcXFxcbnVsbFwiOlxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBpbnB1dDtcblx0fVxufVxuXG5mdW5jdGlvbiBldmFsdWF0ZUNvbmRpdGlvbih2YWx1ZSkge1xuXHRjb25zdCBsb3dlclZhbHVlID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUudG9Mb3dlckNhc2UoKSA6IHZhbHVlO1xuXG5cdHJldHVybiAoXG5cdFx0KHZhbHVlICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR2YWx1ZSAhPT0gXCJcIiAmJlxuXHRcdFx0bG93ZXJWYWx1ZSAhPT0gXCJvZmZcIiAmJlxuXHRcdFx0bG93ZXJWYWx1ZSAhPT0gXCJmYWxzZVwiICYmXG5cdFx0XHR2YWx1ZSAhPT0gZmFsc2UpIHx8XG5cdFx0bG93ZXJWYWx1ZSA9PT0gXCJvblwiIHx8XG5cdFx0bG93ZXJWYWx1ZSA9PT0gXCJ0cnVlXCIgfHxcblx0XHR2YWx1ZSA9PT0gdHJ1ZVxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBUcmFuc2Zvcm1lciB9IGZyb20gXCIuL3RyYW5zZm9ybWVyLm1qc1wiO1xuXG5leHBvcnQgeyBQaXBlIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IERFTElNSVRFUiA9IFwifFwiO1xuXG4vKipcbiAqIFRoZSBwaXBlIGNsYXNzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGNvbWJpbmUgc2V2ZXJhbCBwcm9jZXNzaW5nIHN0ZXBzLlxuICpcbiAqIEEgcGlwZSBjb25zaXN0cyBvZiBjb21tYW5kcyB3aG9zZSBpbnB1dCBhbmQgb3V0cHV0IGFyZSBjb25uZWN0ZWQgd2l0aCB0aGUgcGlwZSBzeW1ib2wgYHxgLlxuICpcbiAqIFdpdGggdGhlIFBpcGUsIHByb2Nlc3Npbmcgc3RlcHMgY2FuIGJlIGNvbWJpbmVkLiBIZXJlLCB0aGUgdmFsdWUgb2YgYW4gb2JqZWN0IGlzIGFjY2Vzc2VkIHZpYSB0aGUgcGF0aGZpbmRlciAocGF0aCBjb21tYW5kKS5cbiAqIHRoZSB3b3JkIGlzIHRoZW4gY29udmVydGVkIHRvIHVwcGVyY2FzZSBsZXR0ZXJzIGFuZCBhIHByZWZpeCBIZWxsbyBpcyBhZGRlZC4gdGhlIHR3byBiYWNrc2xhc2ggc2FmZSB0aGUgc3BhY2UgY2hhci5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlICAuLi8uLi9leGFtcGxlL2RhdGEvcGlwZS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YVxuICovXG5jbGFzcyBQaXBlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGlwZSBhIHBpcGUgY29uc2lzdHMgb2YgY29tbWFuZHMgd2hvc2UgaW5wdXQgYW5kIG91dHB1dCBhcmUgY29ubmVjdGVkIHdpdGggdGhlIHBpcGUgc3ltYm9sIGB8YC5cblx0ICogQHRocm93cyB7VHlwZUVycm9yfVxuXHQgKi9cblx0Y29uc3RydWN0b3IocGlwZSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dmFsaWRhdGVTdHJpbmcocGlwZSk7XG5cblx0XHR0aGlzLnBpcGUgPSBwaXBlLnNwbGl0KERFTElNSVRFUikubWFwKCh2KSA9PiB7XG5cdFx0XHRyZXR1cm4gbmV3IFRyYW5zZm9ybWVyKHYpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIHtUcmFuc2Zvcm1lcn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuXHQgKi9cblx0c2V0Q2FsbGJhY2sobmFtZSwgY2FsbGJhY2ssIGNvbnRleHQpIHtcblx0XHRmb3IgKGNvbnN0IFssIHRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucGlwZSkpIHtcblx0XHRcdHQuc2V0Q2FsbGJhY2sobmFtZSwgY2FsbGJhY2ssIGNvbnRleHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJ1biBhIHBpcGVcblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJucyB7Kn1cblx0ICovXG5cdHJ1bih2YWx1ZSkge1xuXHRcdHJldHVybiB0aGlzLnBpcGUucmVkdWNlKChhY2N1bXVsYXRvciwgdHJhbnNmb3JtZXIsIGN1cnJlbnRJbmRleCwgYXJyYXkpID0+IHtcblx0XHRcdHJldHVybiB0cmFuc2Zvcm1lci5ydW4oYWNjdW11bGF0b3IpO1xuXHRcdH0sIHZhbHVlKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgUGlwZSB9IGZyb20gXCIuLi9kYXRhL3BpcGUubWpzXCI7XG5cbmltcG9ydCB7IEJhc2VXaXRoT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUFycmF5LCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgRm9ybWF0dGVyIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGludGVybmFsT2JqZWN0U3ltYm9sID0gU3ltYm9sKFwiaW50ZXJuYWxPYmplY3RcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHdhdGNoZG9nU3ltYm9sID0gU3ltYm9sKFwid2F0Y2hkb2dcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG1hcmtlck9wZW5JbmRleFN5bWJvbCA9IFN5bWJvbChcIm1hcmtlck9wZW5JbmRleFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbWFya2VyQ2xvc2VJbmRleFN5bWJvbCA9IFN5bWJvbChcIm1hcmtlcmNsb3NlSW5kZXhcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHdvcmtpbmdEYXRhU3ltYm9sID0gU3ltYm9sKFwid29ya2luZ0RhdGFcIik7XG5cbi8qKlxuICogTWVzc2FnZXMgY2FuIGJlIGZvcm1hdHRlZCB3aXRoIHRoZSBmb3JtYXR0ZXIuIFRvIGRvIHRoaXMsIGFuIG9iamVjdCB3aXRoIHRoZSB2YWx1ZXMgbXVzdCBiZSBwYXNzZWQgdG8gdGhlIGZvcm1hdHRlci4gVGhlIG1lc3NhZ2UgY2FuIHRoZW4gY29udGFpbiBwbGFjZWhvbGRlcnMuXG4gKlxuICogTG9vayBhdCB0aGUgZXhhbXBsZSBiZWxvdy4gVGhlIHBsYWNlaG9sZGVycyB1c2UgdGhlIGxvZ2ljIG9mIFBpcGUuXG4gKlxuICogIyMgTWFya2VyIGluIG1hcmtlclxuICpcbiAqIE1hcmtlcnMgY2FuIGJlIG5lc3RlZC4gSGVyZSwgdGhlIGlubmVyIG1hcmtlciBpcyByZXNvbHZlZCBmaXJzdCBgJHtzdWJrZXl9IFx1MjFBNiAxID0gJHtteWtleTJ9YCBhbmQgdGhlbiB0aGUgb3V0ZXIgbWFya2VyIGAke215a2V5Mn1gLlxuICpcbiAqIGBgYFxuICogY29uc3QgdGV4dCA9ICcke215a2V5JHtzdWJrZXl9fSc7XG4gKiBsZXQgb2JqID0ge1xuICogIG15a2V5MjogXCIxXCIsXG4gKiAgc3Via2V5OiBcIjJcIlxuICogfTtcbiAqXG4gKiBuZXcgRm9ybWF0dGVyKG9iaikuZm9ybWF0KHRleHQpO1xuICogLy8gXHUyMUE2IDFcbiAqIGBgYFxuICpcbiAqICMjIENhbGxiYWNrc1xuICpcbiAqIFRoZSB2YWx1ZXMgaW4gYSBmb3JtYXR0ZXIgY2FuIGJlIGFkanVzdGVkIHZpYSB0aGUgY29tbWFuZHMgb2YgdGhlIGBUcmFuc2Zvcm1lcmAgb3IgdGhlYFBpcGVgLlxuICogVGhlcmUgaXMgYWxzbyB0aGUgcG9zc2liaWxpdHkgdG8gdXNlIGNhbGxiYWNrcy5cbiAqXG4gKiBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHt4OiAnMSd9LCB7XG4gKiAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAqICAgICAgICAgICAgICAgICAgICBxdW90ZTogKHZhbHVlKSA9PiB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnXCInICsgdmFsdWUgKyAnXCInXG4gKiAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICB9KTtcbiAqXG4gKiBmb3JtYXR0ZXIuZm9ybWF0KCcke3ggfCBjYWxsOnF1b3RlfScpKVxuICogLy8gXHUyMUE2IFwiMVwiXG4gKlxuICogIyMgTWFya2VyIHdpdGggcGFyYW1ldGVyXG4gKlxuICogQSBzdHJpbmcgY2FuIGFsc28gYnJpbmcgaXRzIG93biB2YWx1ZXMuIFRoZXNlIG11c3QgdGhlbiBiZSBzZXBhcmF0ZWQgZnJvbSB0aGUga2V5IGJ5IGEgc2VwYXJhdG9yIGA6OmAuXG4gKiBUaGUgdmFsdWVzIHRoZW1zZWx2ZXMgbXVzdCBiZSBzcGVjaWZpZWQgaW4ga2V5L3ZhbHVlIHBhaXJzLiBUaGUga2V5IG11c3QgYmUgc2VwYXJhdGVkIGZyb20gdGhlIHZhbHVlIGJ5IGEgc2VwYXJhdG9yIGA9YC5cbiAqXG4gKiBXaGVuIHVzaW5nIGEgcGlwZSwgeW91IG11c3QgcGF5IGF0dGVudGlvbiB0byB0aGUgc2VwYXJhdG9ycy5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCB7Rm9ybWF0dGVyfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90ZXh0L2Zvcm1hdHRlci5tanMnO1xuICpcbiAqIG5ldyBGb3JtYXR0ZXIoe1xuICogICAgICAgYToge1xuICogICAgICAgICAgIGI6IHtcbiAqICAgICAgICAgICAgICAgYzogXCJIZWxsb1wiXG4gKiAgICAgICAgICAgfSxcbiAqICAgICAgICAgICBkOiBcIndvcmxkXCIsXG4gKiAgICAgICB9XG4gKiAgIH0pLmZvcm1hdChcIiR7YS5iLmN9ICR7YS5kIHwgdWNmaXJzdH0hXCIpOyAvLyB3aXRoIHBpcGVcbiAqXG4gKiAvLyBcdTIxQTYgSGVsbG8gV29ybGQhXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVGV4dFxuICovXG5jbGFzcyBGb3JtYXR0ZXIgZXh0ZW5kcyBCYXNlV2l0aE9wdGlvbnMge1xuXHQvKipcblx0ICogRGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBtYXJrZXJzIGFyZSBgJHtgIGFuZCBgfWBcblx0ICpcblx0ICogQHBhcmFtIG9iamVjdFxuXHQgKiBAcGFyYW0gb3B0aW9uc1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob2JqZWN0LCBvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cdFx0dGhpc1tpbnRlcm5hbE9iamVjdFN5bWJvbF0gPSBvYmplY3QgfHwge307XG5cdFx0dGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdID0gMDtcblx0XHR0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdID0gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gbWFya2VyXG5cdCAqIEBwcm9wZXJ0eSB7YXJyYXl9IG1hcmtlci5vcGVuPVtcIiR7XCJdXG5cdCAqIEBwcm9wZXJ0eSB7YXJyYXl9IG1hcmtlci5jbG9zZT1bXCIke1wiXVxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gcGFyYW1ldGVyXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXJhbWV0ZXIuZGVsaW1pdGVyPVwiOjpcIlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcGFyYW1ldGVyLmFzc2lnbm1lbnQ9XCI9XCJcblx0ICogQHByb3BlcnR5IHtvYmplY3R9IGNhbGxiYWNrcz17fVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRtYXJrZXI6IHtcblx0XHRcdFx0b3BlbjogW1wiJHtcIl0sXG5cdFx0XHRcdGNsb3NlOiBbXCJ9XCJdLFxuXHRcdFx0fSxcblx0XHRcdHBhcmFtZXRlcjoge1xuXHRcdFx0XHRkZWxpbWl0ZXI6IFwiOjpcIixcblx0XHRcdFx0YXNzaWdubWVudDogXCI9XCIsXG5cdFx0XHR9LFxuXHRcdFx0Y2FsbGJhY2tzOiB7fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgbmV3IFBhcmFtZXRlciBDaGFyYWN0ZXJcblx0ICpcblx0ICogRGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBjaGFycyBhcmUgYDo6YCBhbmQgYD1gXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBmb3JtYXR0ZXIuc2V0UGFyYW1ldGVyQ2hhcnMoJyMnKTtcblx0ICogZm9ybWF0dGVyLnNldFBhcmFtZXRlckNoYXJzKCdbJywnXScpO1xuXHQgKiBmb3JtYXR0ZXIuc2V0UGFyYW1ldGVyQ2hhcnMoJ2kxOG57JywnfScpO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGRlbGltaXRlclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gYXNzaWdubWVudFxuXHQgKiBAcmV0dXJuIHtGb3JtYXR0ZXJ9XG5cdCAqIEBzaW5jZSAxLjI0LjBcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICovXG5cdHNldFBhcmFtZXRlckNoYXJzKGRlbGltaXRlciwgYXNzaWdubWVudCkge1xuXHRcdGlmIChkZWxpbWl0ZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJwYXJhbWV0ZXJcIl1bXCJkZWxpbWl0ZXJcIl0gPVxuXHRcdFx0XHR2YWxpZGF0ZVN0cmluZyhkZWxpbWl0ZXIpO1xuXHRcdH1cblxuXHRcdGlmIChhc3NpZ25tZW50ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wicGFyYW1ldGVyXCJdW1wiYXNzaWdubWVudFwiXSA9XG5cdFx0XHRcdHZhbGlkYXRlU3RyaW5nKGFzc2lnbm1lbnQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBuZXcgTWFya2VyXG5cdCAqXG5cdCAqIERlZmF1bHQgdmFsdWVzIGZvciB0aGUgbWFya2VycyBhcmUgYCR7YCBhbmQgYH1gXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBmb3JtYXR0ZXIuc2V0TWFya2VyKCcjJyk7IC8vIG9wZW4gYW5kIGNsb3NlIGFyZSBib3RoICNcblx0ICogZm9ybWF0dGVyLnNldE1hcmtlcignWycsJ10nKTtcblx0ICogZm9ybWF0dGVyLnNldE1hcmtlcignaTE4bnsnLCd9Jyk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge2FycmF5fHN0cmluZ30gb3BlblxuXHQgKiBAcGFyYW0ge2FycmF5fHN0cmluZ3x1bmRlZmluZWR9IGNsb3NlXG5cdCAqIEByZXR1cm4ge0Zvcm1hdHRlcn1cblx0ICogQHNpbmNlIDEuMTIuMFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0c2V0TWFya2VyKG9wZW4sIGNsb3NlKSB7XG5cdFx0aWYgKGNsb3NlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNsb3NlID0gb3Blbjtcblx0XHR9XG5cblx0XHRpZiAoaXNTdHJpbmcob3BlbikpIG9wZW4gPSBbb3Blbl07XG5cdFx0aWYgKGlzU3RyaW5nKGNsb3NlKSkgY2xvc2UgPSBbY2xvc2VdO1xuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJvcGVuXCJdID0gdmFsaWRhdGVBcnJheShvcGVuKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcIm1hcmtlclwiXVtcImNsb3NlXCJdID0gdmFsaWRhdGVBcnJheShjbG9zZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHRcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdG9vIGRlZXAgbmVzdGluZ1xuXHQgKi9cblx0Zm9ybWF0KHRleHQpIHtcblx0XHR0aGlzW3dhdGNoZG9nU3ltYm9sXSA9IDA7XG5cdFx0dGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdID0gMDtcblx0XHR0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdID0gMDtcblx0XHR0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXSA9IHt9O1xuXHRcdHJldHVybiBmb3JtYXQuY2FsbCh0aGlzLCB0ZXh0KTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGZvcm1hdCh0ZXh0KSB7XG5cdHRoaXNbd2F0Y2hkb2dTeW1ib2xdKys7XG5cdGlmICh0aGlzW3dhdGNoZG9nU3ltYm9sXSA+IDIwKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidG9vIGRlZXAgbmVzdGluZ1wiKTtcblx0fVxuXG5cdGNvbnN0IG9wZW5NYXJrZXIgPVxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wib3BlblwiXT8uW3RoaXNbbWFya2VyT3BlbkluZGV4U3ltYm9sXV07XG5cdGNvbnN0IGNsb3NlTWFya2VyID1cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcIm1hcmtlclwiXVtcImNsb3NlXCJdPy5bdGhpc1ttYXJrZXJDbG9zZUluZGV4U3ltYm9sXV07XG5cblx0Ly8gY29udGFpbnMgbm8gcGxhY2Vob2xkZXJzXG5cdGlmICh0ZXh0LmluZGV4T2Yob3Blbk1hcmtlcikgPT09IC0xIHx8IHRleHQuaW5kZXhPZihjbG9zZU1hcmtlcikgPT09IC0xKSB7XG5cdFx0cmV0dXJuIHRleHQ7XG5cdH1cblxuXHRsZXQgcmVzdWx0ID0gdG9rZW5pemUuY2FsbChcblx0XHR0aGlzLFxuXHRcdHZhbGlkYXRlU3RyaW5nKHRleHQpLFxuXHRcdG9wZW5NYXJrZXIsXG5cdFx0Y2xvc2VNYXJrZXIsXG5cdCk7XG5cblx0aWYgKFxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wib3BlblwiXT8uW3RoaXNbbWFya2VyT3BlbkluZGV4U3ltYm9sXSArIDFdXG5cdCkge1xuXHRcdHRoaXNbbWFya2VyT3BlbkluZGV4U3ltYm9sXSsrO1xuXHR9XG5cblx0aWYgKFxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wiY2xvc2VcIl0/Llt0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdICsgMV1cblx0KSB7XG5cdFx0dGhpc1ttYXJrZXJDbG9zZUluZGV4U3ltYm9sXSsrO1xuXHR9XG5cblx0cmVzdWx0ID0gZm9ybWF0LmNhbGwodGhpcywgcmVzdWx0KTtcblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEyLjBcbiAqIEBwYXJhbSB0ZXh0XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplKHRleHQsIG9wZW5NYXJrZXIsIGNsb3NlTWFya2VyKSB7XG5cdGNvbnN0IGZvcm1hdHRlZCA9IFtdO1xuXG5cdGNvbnN0IHBhcmFtZXRlckFzc2lnbm1lbnQgPSB0aGlzW2ludGVybmFsU3ltYm9sXVtcInBhcmFtZXRlclwiXVtcImFzc2lnbm1lbnRcIl07XG5cdGNvbnN0IHBhcmFtZXRlckRlbGltaXRlciA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wicGFyYW1ldGVyXCJdW1wiZGVsaW1pdGVyXCJdO1xuXHRjb25zdCBjYWxsYmFja3MgPSB0aGlzW2ludGVybmFsU3ltYm9sXVtcImNhbGxiYWNrc1wiXTtcblxuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdGNvbnN0IHN0YXJ0SW5kZXggPSB0ZXh0LmluZGV4T2Yob3Blbk1hcmtlcik7XG5cdFx0Ly8gbm8gbWFya2VyXG5cdFx0aWYgKHN0YXJ0SW5kZXggPT09IC0xKSB7XG5cdFx0XHRmb3JtYXR0ZWQucHVzaCh0ZXh0KTtcblx0XHRcdGJyZWFrO1xuXHRcdH0gZWxzZSBpZiAoc3RhcnRJbmRleCA+IDApIHtcblx0XHRcdGZvcm1hdHRlZC5wdXNoKHRleHQuc3Vic3RyaW5nKDAsIHN0YXJ0SW5kZXgpKTtcblx0XHRcdHRleHQgPSB0ZXh0LnN1YnN0cmluZyhzdGFydEluZGV4KTtcblx0XHR9XG5cblx0XHRsZXQgZW5kSW5kZXggPSB0ZXh0LnN1YnN0cmluZyhvcGVuTWFya2VyLmxlbmd0aCkuaW5kZXhPZihjbG9zZU1hcmtlcik7XG5cdFx0aWYgKGVuZEluZGV4ICE9PSAtMSkgZW5kSW5kZXggKz0gb3Blbk1hcmtlci5sZW5ndGg7XG5cdFx0bGV0IGluc2lkZVN0YXJ0SW5kZXggPSB0ZXh0XG5cdFx0XHQuc3Vic3RyaW5nKG9wZW5NYXJrZXIubGVuZ3RoKVxuXHRcdFx0LmluZGV4T2Yob3Blbk1hcmtlcik7XG5cdFx0aWYgKGluc2lkZVN0YXJ0SW5kZXggIT09IC0xKSB7XG5cdFx0XHRpbnNpZGVTdGFydEluZGV4ICs9IG9wZW5NYXJrZXIubGVuZ3RoO1xuXHRcdFx0aWYgKGluc2lkZVN0YXJ0SW5kZXggPCBlbmRJbmRleCkge1xuXHRcdFx0XHRjb25zdCByZXN1bHQgPSB0b2tlbml6ZS5jYWxsKFxuXHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0dGV4dC5zdWJzdHJpbmcoaW5zaWRlU3RhcnRJbmRleCksXG5cdFx0XHRcdFx0b3Blbk1hcmtlcixcblx0XHRcdFx0XHRjbG9zZU1hcmtlcixcblx0XHRcdFx0KTtcblx0XHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIGluc2lkZVN0YXJ0SW5kZXgpICsgcmVzdWx0O1xuXHRcdFx0XHRlbmRJbmRleCA9IHRleHQuc3Vic3RyaW5nKG9wZW5NYXJrZXIubGVuZ3RoKS5pbmRleE9mKGNsb3NlTWFya2VyKTtcblx0XHRcdFx0aWYgKGVuZEluZGV4ICE9PSAtMSkgZW5kSW5kZXggKz0gb3Blbk1hcmtlci5sZW5ndGg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGVuZEluZGV4ID09PSAtMSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwic3ludGF4IGVycm9yIGluIGZvcm1hdHRlciB0ZW1wbGF0ZVwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBrZXkgPSB0ZXh0LnN1YnN0cmluZyhvcGVuTWFya2VyLmxlbmd0aCwgZW5kSW5kZXgpO1xuXHRcdGNvbnN0IHBhcnRzID0ga2V5LnNwbGl0KHBhcmFtZXRlckRlbGltaXRlcik7XG5cdFx0Y29uc3QgY3VycmVudFBpcGUgPSBwYXJ0cy5zaGlmdCgpO1xuXG5cdFx0dGhpc1t3b3JraW5nRGF0YVN5bWJvbF0gPSBleHRlbmQoXG5cdFx0XHR7fSxcblx0XHRcdHRoaXNbaW50ZXJuYWxPYmplY3RTeW1ib2xdLFxuXHRcdFx0dGhpc1t3b3JraW5nRGF0YVN5bWJvbF0sXG5cdFx0KTtcblxuXHRcdGZvciAoY29uc3Qga3Ygb2YgcGFydHMpIHtcblx0XHRcdGNvbnN0IFtrLCB2XSA9IGt2LnNwbGl0KHBhcmFtZXRlckFzc2lnbm1lbnQpO1xuXHRcdFx0dGhpc1t3b3JraW5nRGF0YVN5bWJvbF1ba10gPSB2O1xuXHRcdH1cblxuXHRcdGNvbnN0IHQxID0ga2V5LnNwbGl0KFwifFwiKS5zaGlmdCgpLnRyaW0oKTsgLy8gcGlwZSBzeW1ib2xcblx0XHRjb25zdCB0MiA9IHQxLnNwbGl0KFwiOjpcIikuc2hpZnQoKS50cmltKCk7IC8vIGtleSB2YWx1ZSBkZWxpbWl0ZXJcblx0XHRjb25zdCB0MyA9IHQyLnNwbGl0KFwiLlwiKS5zaGlmdCgpLnRyaW0oKTsgLy8gcGF0aCBkZWxpbWl0ZXJcblx0XHRjb25zdCBwcmVmaXggPSB0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXT8uW3QzXSA/IFwicGF0aDpcIiA6IFwic3RhdGljOlwiO1xuXG5cdFx0bGV0IGNvbW1hbmQgPSBcIlwiO1xuXHRcdGlmIChcblx0XHRcdHByZWZpeCAmJlxuXHRcdFx0a2V5LmluZGV4T2YocHJlZml4KSAhPT0gMCAmJlxuXHRcdFx0a2V5LmluZGV4T2YoXCJwYXRoOlwiKSAhPT0gMCAmJlxuXHRcdFx0a2V5LmluZGV4T2YoXCJzdGF0aWM6XCIpICE9PSAwXG5cdFx0KSB7XG5cdFx0XHRjb21tYW5kID0gcHJlZml4O1xuXHRcdH1cblxuXHRcdGNvbW1hbmQgKz0gY3VycmVudFBpcGU7XG5cblx0XHRjb25zdCBwaXBlID0gbmV3IFBpcGUoY29tbWFuZCk7XG5cblx0XHRpZiAoaXNPYmplY3QoY2FsbGJhY2tzKSkge1xuXHRcdFx0Zm9yIChjb25zdCBbbmFtZSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGNhbGxiYWNrcykpIHtcblx0XHRcdFx0cGlwZS5zZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjayk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9ybWF0dGVkLnB1c2godmFsaWRhdGVTdHJpbmcocGlwZS5ydW4odGhpc1t3b3JraW5nRGF0YVN5bWJvbF0pKSk7XG5cblx0XHR0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoZW5kSW5kZXggKyBjbG9zZU1hcmtlci5sZW5ndGgpO1xuXHR9XG5cblx0cmV0dXJuIGZvcm1hdHRlZC5qb2luKFwiXCIpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVBcnJheSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IE1lZGlhVHlwZSwgcGFyc2VNZWRpYVR5cGUgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWwgPSBTeW1ib2woXCJpbnRlcm5hbFwiKTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQYXJhbWV0ZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBrZXlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIGFuIG9iamVjdCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5UeXBlcy5NZWRpYVR5cGUoKWAuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICovXG5jbGFzcyBNZWRpYVR5cGUgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdWJ0eXBlXG5cdCAqIEBwYXJhbSB7TW9uc3Rlci5UeXBlcy5QYXJhbWV0ZXJbXX0gcGFyYW1ldGVyXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcih0eXBlLCBzdWJ0eXBlLCBwYXJhbWV0ZXIpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpc1tpbnRlcm5hbF0gPSB7XG5cdFx0XHR0eXBlOiB2YWxpZGF0ZVN0cmluZyh0eXBlKS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0c3VidHlwZTogdmFsaWRhdGVTdHJpbmcoc3VidHlwZSkudG9Mb3dlckNhc2UoKSxcblx0XHRcdHBhcmFtZXRlcjogW10sXG5cdFx0fTtcblxuXHRcdGlmIChwYXJhbWV0ZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpc1tpbnRlcm5hbF1bXCJwYXJhbWV0ZXJcIl0gPSB2YWxpZGF0ZUFycmF5KHBhcmFtZXRlcik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvbWVkaWEtdHlwZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTdHJpbmd9XG5cdCAqL1xuXHRnZXQgdHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0udHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTdHJpbmd9XG5cdCAqL1xuXHRnZXQgc3VidHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0uc3VidHlwZTtcblx0fVxuXG5cdC8vIC8qKlxuXHQvLyAgKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLlBhcmFtZXRlcltdfVxuXHQvLyAgKi9cblx0Ly8gZ2V0IHBhcmFtZXRlcigpIHtcblx0Ly8gXHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0ucGFyYW1ldGVyO1xuXHQvLyB9XG5cblx0LyoqXG5cdCAqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01hcH1cblx0ICovXG5cdGdldCBwYXJhbWV0ZXIoKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuXG5cdFx0dGhpc1tpbnRlcm5hbF1bXCJwYXJhbWV0ZXJcIl0uZm9yRWFjaCgocCkgPT4ge1xuXHRcdFx0bGV0IHZhbHVlID0gcC52YWx1ZTtcblxuXHRcdFx0Ly8gaW50ZXJuYWxseSBzcGVjaWFsIHZhbHVlcyBhcmUgcGFydGx5IHN0b3JlZCB3aXRoIHF1b3RlcywgdGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZW0uXG5cdFx0XHRpZiAodmFsdWUuc3RhcnRzV2l0aCgnXCInKSAmJiB2YWx1ZS5lbmRzV2l0aCgnXCInKSkge1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygxLCB2YWx1ZS5sZW5ndGggLSAxKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzdWx0LnNldChwLmtleSwgdmFsdWUpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRjb25zdCBwYXJhbWV0ZXIgPSBbXTtcblx0XHRmb3IgKGNvbnN0IGEgb2YgdGhpc1tpbnRlcm5hbF0ucGFyYW1ldGVyKSB7XG5cdFx0XHRwYXJhbWV0ZXIucHVzaChgJHthLmtleX09JHthLnZhbHVlfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBgJHt0aGlzW2ludGVybmFsXS50eXBlfS8ke3RoaXNbaW50ZXJuYWxdLnN1YnR5cGV9JHtcblx0XHRcdHBhcmFtZXRlci5sZW5ndGggPiAwID8gYDske3BhcmFtZXRlci5qb2luKFwiO1wiKX1gIDogXCJcIlxuXHRcdH1gO1xuXHR9XG59XG5cbi8qKlxuICogWW91IGNhbiBjYWxsIHRoZSBmdW5jdGlvbiB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLlR5cGVzLnBhcnNlTWVkaWFUeXBlKClgLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge01vbnN0ZXJ9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL21vbnN0ZXIubWpzJztcbiAqIGNvbnNvbGUubG9nKE1vbnN0ZXIuVHlwZXMucGFyc2VNZWRpYVR5cGUoKSlcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhbHNvIGludGVncmF0ZSB0aGlzIGZ1bmN0aW9uIGluZGl2aWR1YWxseS5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtwYXJzZU1lZGlhVHlwZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvZGF0YXVybC5tanMnO1xuICogY29uc29sZS5sb2cocGFyc2VNZWRpYVR5cGUoKSlcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogU3BlY2lmaWNhdGlvbjpcbiAqXG4gKiBgYGBcbiAqIGRhdGF1cmwgICAgOj0gXCJkYXRhOlwiIFsgbWVkaWF0eXBlIF0gWyBcIjtiYXNlNjRcIiBdIFwiLFwiIGRhdGFcbiAqIG1lZGlhdHlwZSAgOj0gWyB0eXBlIFwiL1wiIHN1YnR5cGUgXSAqKCBcIjtcIiBwYXJhbWV0ZXIgKVxuICogZGF0YSAgICAgICA6PSAqdXJsY2hhclxuICogcGFyYW1ldGVyICA6PSBhdHRyaWJ1dGUgXCI9XCIgdmFsdWVcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZWRpYXR5cGVcbiAqIEByZXR1cm4ge01vbnN0ZXIuVHlwZXMuTWVkaWFUeXBlfVxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIwNDUjc2VjdGlvbi01LjFcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdGhlIG1pbWV0eXBlIGNhbiBub3QgYmUgcGFyc2VkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IGJsYW5rIHZhbHVlIGlzIG5vdCBhbGxvd2VkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IG1hbGZvcm1lZCBkYXRhIHVybFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqL1xuZnVuY3Rpb24gcGFyc2VNZWRpYVR5cGUobWVkaWF0eXBlKSB7XG5cdGNvbnN0IHJlZ2V4ID1cblx0XHQvKD88dHlwZT5bQS1aYS16XSt8XFwqKVxcLyg/PHN1YnR5cGU+KFthLXpBLVowLTkuXFwrX1xcLV0rKXxcXCp8KSg/PHBhcmFtZXRlcj5cXHMqO1xccyooW2EtekEtWjAtOV0rKVxccyooPVxccyooXCI/W0EtWmEtejAtOV9cXC1dK1wiPykpPykqL2c7XG5cdGNvbnN0IHJlc3VsdCA9IHJlZ2V4LmV4ZWModmFsaWRhdGVTdHJpbmcobWVkaWF0eXBlKSk7XG5cblx0Y29uc3QgZ3JvdXBzID0gcmVzdWx0Py5bXCJncm91cHNcIl07XG5cdGlmIChncm91cHMgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0aGUgbWltZXR5cGUgY2FuIG5vdCBiZSBwYXJzZWRcIik7XG5cdH1cblxuXHRjb25zdCB0eXBlID0gZ3JvdXBzPy5bXCJ0eXBlXCJdO1xuXHRjb25zdCBzdWJ0eXBlID0gZ3JvdXBzPy5bXCJzdWJ0eXBlXCJdO1xuXHRjb25zdCBwYXJhbWV0ZXIgPSBncm91cHM/LltcInBhcmFtZXRlclwiXTtcblxuXHRpZiAoc3VidHlwZSA9PT0gXCJcIiB8fCB0eXBlID09PSBcIlwiKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcImJsYW5rIHZhbHVlIGlzIG5vdCBhbGxvd2VkXCIpO1xuXHR9XG5cblx0cmV0dXJuIG5ldyBNZWRpYVR5cGUodHlwZSwgc3VidHlwZSwgcGFyc2VQYXJhbWV0ZXIocGFyYW1ldGVyKSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTguMFxuICogQHBhcmFtIHtTdHJpbmd9IHBhcmFtZXRlclxuICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5QYXJhbWV0ZXJbXXx1bmRlZmluZWR9XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICovXG5mdW5jdGlvbiBwYXJzZVBhcmFtZXRlcihwYXJhbWV0ZXIpIHtcblx0aWYgKCFpc1N0cmluZyhwYXJhbWV0ZXIpKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdHBhcmFtZXRlci5zcGxpdChcIjtcIikuZm9yRWFjaCgoZW50cnkpID0+IHtcblx0XHRlbnRyeSA9IGVudHJ5LnRyaW0oKTtcblx0XHRpZiAoZW50cnkgPT09IFwiXCIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBrdiA9IGVudHJ5LnNwbGl0KFwiPVwiKTtcblxuXHRcdGNvbnN0IGtleSA9IHZhbGlkYXRlU3RyaW5nKGt2Py5bMF0pLnRyaW0oKTtcblx0XHRjb25zdCB2YWx1ZSA9IHZhbGlkYXRlU3RyaW5nKGt2Py5bMV0pLnRyaW0oKTtcblxuXHRcdC8vIGlmIHZhbHVlcyBhcmUgcXVvdGVkLCB0aGV5IHJlbWFpbiBzbyBpbnRlcm5hbGx5XG5cdFx0cmVzdWx0LnB1c2goe1xuXHRcdFx0a2V5OiBrZXksXG5cdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0fSk7XG5cdH0pO1xuXG5cdHJldHVybiByZXN1bHQ7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBNZWRpYVR5cGUsIHBhcnNlTWVkaWFUeXBlIH0gZnJvbSBcIi4vbWVkaWF0eXBlLm1qc1wiO1xuaW1wb3J0IHtcblx0dmFsaWRhdGVCb29sZWFuLFxuXHR2YWxpZGF0ZUluc3RhbmNlLFxuXHR2YWxpZGF0ZVN0cmluZyxcbn0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBEYXRhVXJsLCBwYXJzZURhdGFVUkwgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWwgPSBTeW1ib2woXCJpbnRlcm5hbFwiKTtcblxuLyoqXG4gKiBZb3UgY2FuIGNyZWF0ZSBhbiBvYmplY3QgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgbmV3IE1vbnN0ZXIuVHlwZXMuRGF0YVVybCgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvQmFzaWNzX29mX0hUVFAvRGF0YV9VUklzXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjM5N1xuICovXG5jbGFzcyBEYXRhVXJsIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gY29udGVudFxuXHQgKiBAcGFyYW0ge1N0cmluZ3xNb25zdGVyLlR5cGVzLk1lZGlhVHlwZX0gbWVkaWF0eXBlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYmFzZTY0PXRydWVcblx0ICovXG5cdGNvbnN0cnVjdG9yKGNvbnRlbnQsIG1lZGlhdHlwZSwgYmFzZTY0KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChpc1N0cmluZyhtZWRpYXR5cGUpKSB7XG5cdFx0XHRtZWRpYXR5cGUgPSBwYXJzZU1lZGlhVHlwZShtZWRpYXR5cGUpO1xuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxdID0ge1xuXHRcdFx0Y29udGVudDogdmFsaWRhdGVTdHJpbmcoY29udGVudCksXG5cdFx0XHRtZWRpYXR5cGU6IHZhbGlkYXRlSW5zdGFuY2UobWVkaWF0eXBlLCBNZWRpYVR5cGUpLFxuXHRcdFx0YmFzZTY0OiB2YWxpZGF0ZUJvb2xlYW4oYmFzZTY0ID09PSB1bmRlZmluZWQgPyB0cnVlIDogYmFzZTY0KSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvZGF0YS11cmxcIik7XG5cdH1cblxuXHRnZXQgY29udGVudCgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0uYmFzZTY0XG5cdFx0XHQ/IGF0b2IodGhpc1tpbnRlcm5hbF0uY29udGVudClcblx0XHRcdDogdGhpc1tpbnRlcm5hbF0uY29udGVudDtcblx0fVxuXG5cdGdldCBtZWRpYXR5cGUoKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxdLm1lZGlhdHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMyMzk3XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRsZXQgY29udGVudCA9IHRoaXNbaW50ZXJuYWxdLmNvbnRlbnQ7XG5cblx0XHRpZiAodGhpc1tpbnRlcm5hbF0uYmFzZTY0ID09PSB0cnVlKSB7XG5cdFx0XHRjb250ZW50ID0gYDtiYXNlNjQsJHtjb250ZW50fWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRlbnQgPSBgLCR7ZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRlbnQpfWA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGBkYXRhOiR7dGhpc1tpbnRlcm5hbF0ubWVkaWF0eXBlLnRvU3RyaW5nKCl9JHtjb250ZW50fWA7XG5cdH1cbn1cblxuLyoqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIGZ1bmN0aW9uIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYE1vbnN0ZXIuVHlwZXMucGFyc2VEYXRhVVJMKClgLlxuICpcbiAqIFNwZWNpZmljYXRpb246XG4gKlxuICogYGBgXG4gKiBkYXRhdXJsICAgIDo9IFwiZGF0YTpcIiBbIG1lZGlhdHlwZSBdIFsgXCI7YmFzZTY0XCIgXSBcIixcIiBkYXRhXG4gKiBtZWRpYXR5cGUgIDo9IFsgdHlwZSBcIi9cIiBzdWJ0eXBlIF0gKiggXCI7XCIgcGFyYW1ldGVyIClcbiAqIGRhdGEgICAgICAgOj0gKnVybGNoYXJcbiAqIHBhcmFtZXRlciAgOj0gYXR0cmlidXRlIFwiPVwiIHZhbHVlXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZGF0YXVybFxuICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5EYXRhVXJsfVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0Jhc2ljc19vZl9IVFRQL0RhdGFfVVJJc1xuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIzOTdcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gaW5jb3JyZWN0IG9yIG1pc3NpbmcgZGF0YSBwcm90b2NvbFxuICogQHRocm93cyB7VHlwZUVycm9yfSBtYWxmb3JtZWQgZGF0YSB1cmxcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlRGF0YVVSTChkYXRhdXJsKSB7XG5cdHZhbGlkYXRlU3RyaW5nKGRhdGF1cmwpO1xuXG5cdGRhdGF1cmwgPSBkYXRhdXJsLnRyaW0oKTtcblxuXHRpZiAoZGF0YXVybC5zdWJzdHJpbmcoMCwgNSkgIT09IFwiZGF0YTpcIikge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJpbmNvcnJlY3Qgb3IgbWlzc2luZyBkYXRhIHByb3RvY29sXCIpO1xuXHR9XG5cblx0ZGF0YXVybCA9IGRhdGF1cmwuc3Vic3RyaW5nKDUpO1xuXG5cdGNvbnN0IHAgPSBkYXRhdXJsLmluZGV4T2YoXCIsXCIpO1xuXHRpZiAocCA9PT0gLTEpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwibWFsZm9ybWVkIGRhdGEgdXJsXCIpO1xuXHR9XG5cblx0bGV0IGNvbnRlbnQgPSBkYXRhdXJsLnN1YnN0cmluZyhwICsgMSk7XG5cdGNvbnN0IG1lZGlhdHlwZUFuZEJhc2U2NCA9IGRhdGF1cmwuc3Vic3RyaW5nKDAsIHApLnRyaW0oKTtcblx0bGV0IG1lZGlhdHlwZSA9IFwidGV4dC9wbGFpbjtjaGFyc2V0PVVTLUFTQ0lJXCI7XG5cdGxldCBiYXNlNjRGbGFnID0gZmFsc2U7XG5cblx0aWYgKG1lZGlhdHlwZUFuZEJhc2U2NCAhPT0gXCJcIikge1xuXHRcdG1lZGlhdHlwZSA9IG1lZGlhdHlwZUFuZEJhc2U2NDtcblx0XHRpZiAobWVkaWF0eXBlQW5kQmFzZTY0LmVuZHNXaXRoKFwiYmFzZTY0XCIpKSB7XG5cdFx0XHRjb25zdCBpID0gbWVkaWF0eXBlQW5kQmFzZTY0Lmxhc3RJbmRleE9mKFwiO1wiKTtcblx0XHRcdG1lZGlhdHlwZSA9IG1lZGlhdHlwZUFuZEJhc2U2NC5zdWJzdHJpbmcoMCwgaSk7XG5cdFx0XHRiYXNlNjRGbGFnID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGVudCA9IGRlY29kZVVSSUNvbXBvbmVudChjb250ZW50KTtcblx0XHR9XG5cblx0XHRtZWRpYXR5cGUgPSBwYXJzZU1lZGlhVHlwZShtZWRpYXR5cGUpO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnRlbnQgPSBkZWNvZGVVUklDb21wb25lbnQoY29udGVudCk7XG5cdH1cblxuXHRyZXR1cm4gbmV3IERhdGFVcmwoY29udGVudCwgbWVkaWF0eXBlLCBiYXNlNjRGbGFnKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBRdWV1ZSB9O1xuXG4vKipcbiAqIEEgcXVldWUgaXMgYSBsaXN0IG9mIGl0ZW1zIHRoYXQgYXJlIHByb2Nlc3NlZCBvbmUgYWZ0ZXIgYW5vdGhlciAoZmlyc3QgaW4sIGZpcnN0IG91dCkuXG4gKlxuICogV2l0aCBhIHF1ZXVlIHlvdSBjYW4gYWRkIGl0ZW1zIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QgYFF1ZXVlLmFkZCgpYCBhbmQgcmVtb3ZlIGl0ZW1zIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCBgUXVldWUucG9wKClgLlxuICpcbiAqIFdpdGggYFF1ZXVlLnBlZWsoKWAgeW91IGNhbiBnZXQgdGhlIGZpcnN0IGl0ZW0gd2l0aG91dCByZW1vdmluZyBpdCBmcm9tIHRoZSBsaXN0LlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoZSBpbnN0YW5jZSB2aWEgYG5ldyBRdWV1ZSgpYC5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvcXVldWUubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAc3VtbWFyeSBBIFF1ZXVlIChGaWZvKVxuICovXG5jbGFzcyBRdWV1ZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5kYXRhID0gW107XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9xdWV1ZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aXNFbXB0eSgpIHtcblx0XHRyZXR1cm4gdGhpcy5kYXRhLmxlbmd0aCA9PT0gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWFkIHRoZSBlbGVtZW50IGF0IHRoZSBmcm9udCBvZiB0aGUgcXVldWUgd2l0aG91dCByZW1vdmluZyBpdC5cblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHBlZWsoKSB7XG5cdFx0aWYgKHRoaXMuaXNFbXB0eSgpKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmRhdGFbMF07XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgbmV3IGVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybnMge1F1ZXVlfVxuXHQgKi9cblx0YWRkKHZhbHVlKSB7XG5cdFx0dGhpcy5kYXRhLnB1c2godmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJlbW92ZSBhbGwgZW50cmllc1xuXHQgKlxuXHQgKiBAcmV0dXJucyB7UXVldWV9XG5cdCAqL1xuXHRjbGVhcigpIHtcblx0XHR0aGlzLmRhdGEgPSBbXTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgdGhlIGVsZW1lbnQgYXQgdGhlIGZyb250IG9mIHRoZSBxdWV1ZVxuXHQgKiBJZiB0aGUgcXVldWUgaXMgZW1wdHksIHJldHVybiB1bmRlZmluZWQuXG5cdCAqXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRwb2xsKCkge1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5zaGlmdCgpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gXCIuL3F1ZXVlLm1qc1wiO1xuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgVW5pcXVlUXVldWUgfTtcblxuLyoqXG4gKiBBbiBVbmlxdWVRdWV1ZSBpcyBhIHF1ZXVlIHRoYXQgY29udGFpbnMgaXRlbXMgb25seSBvbmNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEBzdW1tYXJ5IEEgcXVldWUgZm9yIHVuaXF1ZSB2YWx1ZXNcbiAqL1xuY2xhc3MgVW5pcXVlUXVldWUgZXh0ZW5kcyBRdWV1ZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdHVuaXF1ZTogbmV3IFdlYWtTZXQoKSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIG5ldyBlbGVtZW50IHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gdmFsdWVcblx0ICogQHJldHVybnMge1F1ZXVlfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuXHQgKi9cblx0YWRkKHZhbHVlKSB7XG5cdFx0dmFsaWRhdGVPYmplY3QodmFsdWUpO1xuXG5cdFx0aWYgKCF0aGlzW2ludGVybmFsU3ltYm9sXS51bmlxdWUuaGFzKHZhbHVlKSkge1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0udW5pcXVlLmFkZCh2YWx1ZSk7XG5cdFx0XHRzdXBlci5hZGQodmFsdWUpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJlbW92ZSBhbGwgZW50cmllc1xuXHQgKlxuXHQgKiBAcmV0dXJucyB7UXVldWV9XG5cdCAqL1xuXHRjbGVhcigpIHtcblx0XHRzdXBlci5jbGVhcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnVuaXF1ZSA9IG5ldyBXZWFrU2V0KCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlIHRoZSBlbGVtZW50IGF0IHRoZSBmcm9udCBvZiB0aGUgcXVldWVcblx0ICogSWYgdGhlIHF1ZXVlIGlzIGVtcHR5LCByZXR1cm4gdW5kZWZpbmVkLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtvYmplY3R9XG5cdCAqL1xuXHRwb2xsKCkge1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmRhdGEuc2hpZnQoKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS51bmlxdWUuZGVsZXRlKHZhbHVlKTtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tIFwiLi9pcy5tanNcIjtcbmltcG9ydCB7IFRva2VuTGlzdCB9IGZyb20gXCIuL3Rva2VubGlzdC5tanNcIjtcbmltcG9ydCB7IFVuaXF1ZVF1ZXVlIH0gZnJvbSBcIi4vdW5pcXVlcXVldWUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBPYnNlcnZlciB9O1xuXG4vKipcbiAqIEFuIG9ic2VydmVyIG1hbmFnZXMgYSBjYWxsYmFjayBmdW5jdGlvblxuICpcbiAqIFRoZSB1cGRhdGUgbWV0aG9kIGlzIGNhbGxlZCB3aXRoIHRoZSBzdWJqZWN0IG9iamVjdCBhcyB0aGlzIHBvaW50ZXIuIEZvciB0aGlzIHJlYXNvblxuICogdGhlIGNhbGxiYWNrIHNob3VsZCBub3QgYmUgYW4gYXJyb3cgZnVuY3Rpb24sIGJlY2F1c2UgaXQgZ2V0cyB0aGlzIHBvaW50ZXIgb2YgaXRzIG93biBjb250ZXh0LlxuICpcbiAqIEluY2x1ZGUgdGhpcyBjbGFzcyBpbiB5b3VyIHByb2plY3Qgd2l0aCB0aGUgZm9sbG93aW5nIGNvZGU6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIkBzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuICogYGBgXG4gKlxuICogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICpcbiAqIGBgYGpzXG4gKiBuZXcgT2JzZXJ2ZXIoKCk9PntcbiAqICAgICAvLyB0aGlzIGlzIG5vdCBzdWJqZWN0XG4gKiB9KVxuICpcbiAqIG5ldyBPYnNlcnZlcihmdW5jdGlvbigpIHtcbiAqICAgICAvLyB0aGlzIGlzIHN1YmplY3RcbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiBBZGRpdGlvbmFsIGFyZ3VtZW50cyBjYW4gYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjay4gVG8gZG8gdGhpcywgc2ltcGx5IHNwZWNpZnkgdGhlbS5cbiAqXG4gKiBgYGBqc1xuICogT2JzZXJ2ZXIoZnVuY3Rpb24oYSwgYiwgYykge1xuICogICAgIGNvbnNvbGUubG9nKGEsIGIsIGMpOyAvLyBcdTIxQTYgXCJhXCIsIDIsIHRydWVcbiAqIH0sIFwiYVwiLCAyLCB0cnVlKVxuICogYGBgXG4gKlxuICogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG11c3QgaGF2ZSBhcyBtYW55IHBhcmFtZXRlcnMgYXMgYXJndW1lbnRzIGFyZSBnaXZlbi5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvb2JzZXJ2ZXIubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmNsYXNzIE9ic2VydmVyIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAcGFyYW0geyp9IGFyZ3Ncblx0ICovXG5cdGNvbnN0cnVjdG9yKGNhbGxiYWNrLCAuLi5hcmdzKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwib2JzZXJ2ZXIgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcblx0XHR0aGlzLmFyZ3VtZW50cyA9IGFyZ3M7XG5cdFx0dGhpcy50YWdzID0gbmV3IFRva2VuTGlzdCgpO1xuXHRcdHRoaXMucXVldWUgPSBuZXcgVW5pcXVlUXVldWUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL29ic2VydmVyXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0YWdcblx0ICogQHJldHVybnMge09ic2VydmVyfVxuXHQgKi9cblx0YWRkVGFnKHRhZykge1xuXHRcdHRoaXMudGFncy5hZGQodGFnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGFnXG5cdCAqIEByZXR1cm5zIHtPYnNlcnZlcn1cblx0ICovXG5cdHJlbW92ZVRhZyh0YWcpIHtcblx0XHR0aGlzLnRhZ3MucmVtb3ZlKHRhZyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge0FycmF5fVxuXHQgKi9cblx0Z2V0VGFncygpIHtcblx0XHRyZXR1cm4gdGhpcy50YWdzLmVudHJpZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGFnXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aGFzVGFnKHRhZykge1xuXHRcdHJldHVybiB0aGlzLnRhZ3MuY29udGFpbnModGFnKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gc3ViamVjdFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICovXG5cdHVwZGF0ZShzdWJqZWN0KSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0aWYgKCFpc09iamVjdChzdWJqZWN0KSkge1xuXHRcdFx0XHRyZWplY3QoXCJzdWJqZWN0IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHNlbGYucXVldWUuYWRkKHN1YmplY3QpO1xuXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHQvLyB0aGUgcXVldWUgYW5kIHRoZSBgc2V0VGltZW91dGAgZW5zdXJlIHRoYXQgYW4gb2JqZWN0IGlzIG5vdFxuXHRcdFx0XHRcdC8vIGluZm9ybWVkIG9mIHRoZSBzYW1lIGNoYW5nZSBtb3JlIHRoYW4gb25jZS5cblx0XHRcdFx0XHRpZiAoc2VsZi5xdWV1ZS5pc0VtcHR5KCkpIHtcblx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBzID0gc2VsZi5xdWV1ZS5wb2xsKCk7XG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gc2VsZi5jYWxsYmFjay5hcHBseShzLCBzZWxmLmFyZ3VtZW50cyk7XG5cblx0XHRcdFx0XHRpZiAoaXNPYmplY3QocmVzdWx0KSAmJiByZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJlc29sdmUocmVzdWx0KTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgMCk7XG5cdFx0fSk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgT2JzZXJ2ZXJMaXN0IH07XG5cbi8qKlxuICogV2l0aCB0aGUgaGVscCBvZiB0aGUgT2JzZXJ2ZXJMaXN0IGNsYXNzLCBvYnNlcnZlciBjYW4gYmUgbWFuYWdlZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmNsYXNzIE9ic2VydmVyTGlzdCBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5vYnNlcnZlcnMgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtPYnNlcnZlckxpc3R9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIE9ic2VydmVyXG5cdCAqL1xuXHRhdHRhY2gob2JzZXJ2ZXIpIHtcblx0XHR2YWxpZGF0ZUluc3RhbmNlKG9ic2VydmVyLCBPYnNlcnZlcik7XG5cblx0XHR0aGlzLm9ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtPYnNlcnZlckxpc3R9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIE9ic2VydmVyXG5cdCAqL1xuXHRkZXRhY2gob2JzZXJ2ZXIpIHtcblx0XHR2YWxpZGF0ZUluc3RhbmNlKG9ic2VydmVyLCBPYnNlcnZlcik7XG5cblx0XHR2YXIgaSA9IDA7XG5cdFx0dmFyIGwgPSB0aGlzLm9ic2VydmVycy5sZW5ndGg7XG5cdFx0Zm9yICg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGlmICh0aGlzLm9ic2VydmVyc1tpXSA9PT0gb2JzZXJ2ZXIpIHtcblx0XHRcdFx0dGhpcy5vYnNlcnZlcnMuc3BsaWNlKGksIDEpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIE9ic2VydmVyXG5cdCAqL1xuXHRjb250YWlucyhvYnNlcnZlcikge1xuXHRcdHZhbGlkYXRlSW5zdGFuY2Uob2JzZXJ2ZXIsIE9ic2VydmVyKTtcblx0XHR2YXIgaSA9IDA7XG5cdFx0dmFyIGwgPSB0aGlzLm9ic2VydmVycy5sZW5ndGg7XG5cdFx0Zm9yICg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGlmICh0aGlzLm9ic2VydmVyc1tpXSA9PT0gb2JzZXJ2ZXIpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gc3ViamVjdFxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0bm90aWZ5KHN1YmplY3QpIHtcblx0XHRjb25zdCBwb21pc2VzID0gW107XG5cblx0XHRsZXQgaSA9IDA7XG5cdFx0Y29uc3QgbCA9IHRoaXMub2JzZXJ2ZXJzLmxlbmd0aDtcblx0XHRmb3IgKDsgaSA8IGw7IGkrKykge1xuXHRcdFx0cG9taXNlcy5wdXNoKHRoaXMub2JzZXJ2ZXJzW2ldLnVwZGF0ZShzdWJqZWN0KSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKHBvbWlzZXMpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0LCBpc1ByaW1pdGl2ZSB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyTGlzdCB9IGZyb20gXCIuL29ic2VydmVybGlzdC5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0IH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBQcm94eU9ic2VydmVyIH07XG5cbi8qKlxuICogQW4gb2JzZXJ2ZXIgbWFuYWdlcyBhIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKlxuICogV2l0aCB0aGUgUHJveHlPYnNlcnZlciB5b3UgY2FuIGF0dGFjaCBvYnNlcnZlciBmb3Igb2JzZXJ2YXRpb24uXG4gKiBXaXRoIGVhY2ggY2hhbmdlIGF0IHRoZSBvYmplY3QgdG8gYmUgb2JzZXJ2ZWQgYW4gdXBkYXRlIHRha2VzIHBsYWNlLlxuICpcbiAqIFRoaXMgYWxzbyBhcHBsaWVzIHRvIG5lc3RlZCBvYmplY3RzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9wcm94eW9ic2VydmVyLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICovXG5jbGFzcyBQcm94eU9ic2VydmVyIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvYmplY3QpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5yZWFsU3ViamVjdCA9IHZhbGlkYXRlT2JqZWN0KG9iamVjdCk7XG5cdFx0dGhpcy5zdWJqZWN0ID0gbmV3IFByb3h5KG9iamVjdCwgZ2V0SGFuZGxlci5jYWxsKHRoaXMpKTtcblxuXHRcdHRoaXMub2JqZWN0TWFwID0gbmV3IFdlYWtNYXAoKTtcblx0XHR0aGlzLm9iamVjdE1hcC5zZXQodGhpcy5yZWFsU3ViamVjdCwgdGhpcy5zdWJqZWN0KTtcblxuXHRcdHRoaXMucHJveHlNYXAgPSBuZXcgV2Vha01hcCgpO1xuXHRcdHRoaXMucHJveHlNYXAuc2V0KHRoaXMuc3ViamVjdCwgdGhpcy5yZWFsU3ViamVjdCk7XG5cblx0XHR0aGlzLm9ic2VydmVycyA9IG5ldyBPYnNlcnZlckxpc3QoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL3Byb3h5LW9ic2VydmVyXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9XG5cdCAqL1xuXHRnZXRTdWJqZWN0KCkge1xuXHRcdHJldHVybiB0aGlzLnN1YmplY3Q7XG5cdH1cblxuXHQvKipcblx0ICogQHNpbmNlIDEuMjQuMFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb2JqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuVHlwZXMuUHJveHlPYnNlcnZlcn1cblx0ICovXG5cdHNldFN1YmplY3Qob2JqKSB7XG5cdFx0bGV0IGk7XG5cdFx0Y29uc3QgayA9IE9iamVjdC5rZXlzKHRoaXMuc3ViamVjdCk7XG5cdFx0Zm9yIChpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIHtcblx0XHRcdGRlbGV0ZSB0aGlzLnN1YmplY3Rba1tpXV07XG5cdFx0fVxuXG5cdFx0dGhpcy5zdWJqZWN0ID0gZXh0ZW5kKHRoaXMuc3ViamVjdCwgb2JqKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHJlYWwgb2JqZWN0XG5cdCAqXG5cdCAqIENoYW5nZXMgdG8gdGhpcyBvYmplY3QgYXJlIG5vdCBub3RpY2VkIGJ5IHRoZSBvYnNlcnZlcnMsIHNvIHlvdSBjYW4gbWFrZSBhIGxhcmdlIG51bWJlciBvZiBjaGFuZ2VzIGFuZCBpbmZvcm0gdGhlIG9ic2VydmVycyBsYXRlci5cblx0ICpcblx0ICogQHJldHVybnMge29iamVjdH1cblx0ICovXG5cdGdldFJlYWxTdWJqZWN0KCkge1xuXHRcdHJldHVybiB0aGlzLnJlYWxTdWJqZWN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIGF0dGFjaCBhIG5ldyBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJucyB7UHJveHlPYnNlcnZlcn1cblx0ICovXG5cdGF0dGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0dGhpcy5vYnNlcnZlcnMuYXR0YWNoKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBkZXRhY2ggYSBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJucyB7UHJveHlPYnNlcnZlcn1cblx0ICovXG5cdGRldGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0dGhpcy5vYnNlcnZlcnMuZGV0YWNoKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBub3RpZnkgYWxsIG9ic2VydmVyXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKi9cblx0bm90aWZ5T2JzZXJ2ZXJzKCkge1xuXHRcdHJldHVybiB0aGlzLm9ic2VydmVycy5ub3RpZnkodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRjb250YWluc09ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0cmV0dXJuIHRoaXMub2JzZXJ2ZXJzLmNvbnRhaW5zKG9ic2VydmVyKTtcblx0fVxufVxuXG4vKipcbiAqXG4gKiBAcmV0dXJucyB7e2RlZmluZVByb3BlcnR5OiAoZnVuY3Rpb24oKj0sICo9LCAqPSk6ICopLCBzZXRQcm90b3R5cGVPZjogKGZ1bmN0aW9uKCosICo9KTogYm9vbGVhbiksIHNldDogKGZ1bmN0aW9uKCosICosICosICopOiBib29sZWFuKSwgZ2V0OiAoKGZ1bmN0aW9uKCo9LCAqPSwgKj0pOiAodW5kZWZpbmVkKSl8KiksIGRlbGV0ZVByb3BlcnR5OiAoKGZ1bmN0aW9uKCosICopOiAoYm9vbGVhbikpfCopfX1cbiAqIEBwcml2YXRlXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS8tL3NuaXBwZXRzLzQ5fVxuICovXG5mdW5jdGlvbiBnZXRIYW5kbGVyKCkge1xuXHRjb25zdCBwcm94eSA9IHRoaXM7XG5cblx0Ly8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy85LjAvI3NlYy1wcm94eS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHNcblx0Y29uc3QgaGFuZGxlciA9IHtcblx0XHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzkuMC8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90cy1nZXQtcC1yZWNlaXZlclxuXHRcdGdldDogZnVuY3Rpb24gKHRhcmdldCwga2V5LCByZWNlaXZlcikge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBSZWZsZWN0LmdldCh0YXJnZXQsIGtleSwgcmVjZWl2ZXIpO1xuXG5cdFx0XHRpZiAodHlwZW9mIGtleSA9PT0gXCJzeW1ib2xcIikge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBzZXQgdmFsdWUgYXMgcHJveHkgaWYgb2JqZWN0IG9yIGFycmF5XG5cdFx0XHRpZiAoaXNBcnJheSh2YWx1ZSkgfHwgaXNPYmplY3QodmFsdWUpKSB7XG5cdFx0XHRcdGlmIChwcm94eS5vYmplY3RNYXAuaGFzKHZhbHVlKSkge1xuXHRcdFx0XHRcdHJldHVybiBwcm94eS5vYmplY3RNYXAuZ2V0KHZhbHVlKTtcblx0XHRcdFx0fSBlbHNlIGlmIChwcm94eS5wcm94eU1hcC5oYXModmFsdWUpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IHAgPSBuZXcgUHJveHkodmFsdWUsIGhhbmRsZXIpO1xuXHRcdFx0XHRcdHByb3h5Lm9iamVjdE1hcC5zZXQodmFsdWUsIHApO1xuXHRcdFx0XHRcdHByb3h5LnByb3h5TWFwLnNldChwLCB2YWx1ZSk7XG5cdFx0XHRcdFx0cmV0dXJuIHA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH0sXG5cblx0XHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzkuMC8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90cy1zZXQtcC12LXJlY2VpdmVyXG5cdFx0c2V0OiBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIHZhbHVlLCByZWNlaXZlcikge1xuXHRcdFx0aWYgKHByb3h5LnByb3h5TWFwLmhhcyh2YWx1ZSkpIHtcblx0XHRcdFx0dmFsdWUgPSBwcm94eS5wcm94eU1hcC5nZXQodmFsdWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocHJveHkucHJveHlNYXAuaGFzKHRhcmdldCkpIHtcblx0XHRcdFx0dGFyZ2V0ID0gcHJveHkucHJveHlNYXAuZ2V0KHRhcmdldCk7XG5cdFx0XHR9XG5cblx0XHRcdGxldCBjdXJyZW50ID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBrZXksIHJlY2VpdmVyKTtcblx0XHRcdGlmIChwcm94eS5wcm94eU1hcC5oYXMoY3VycmVudCkpIHtcblx0XHRcdFx0Y3VycmVudCA9IHByb3h5LnByb3h5TWFwLmdldChjdXJyZW50KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGN1cnJlbnQgPT09IHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgcmVzdWx0O1xuXHRcdFx0bGV0IGRlc2NyaXB0b3IgPSBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG5cblx0XHRcdGlmIChkZXNjcmlwdG9yID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZGVzY3JpcHRvciA9IHtcblx0XHRcdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0ZGVzY3JpcHRvcltcInZhbHVlXCJdID0gdmFsdWU7XG5cdFx0XHRyZXN1bHQgPSBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKTtcblxuXHRcdFx0aWYgKHR5cGVvZiBrZXkgIT09IFwic3ltYm9sXCIpIHtcblx0XHRcdFx0cHJveHkub2JzZXJ2ZXJzLm5vdGlmeShwcm94eSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSxcblxuXHRcdC8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvOS4wLyNzZWMtcHJveHktb2JqZWN0LWludGVybmFsLW1ldGhvZHMtYW5kLWludGVybmFsLXNsb3RzLWRlbGV0ZS1wXG5cdFx0ZGVsZXRlUHJvcGVydHk6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuXHRcdFx0aWYgKGtleSBpbiB0YXJnZXQpIHtcblx0XHRcdFx0ZGVsZXRlIHRhcmdldFtrZXldO1xuXG5cdFx0XHRcdGlmICh0eXBlb2Yga2V5ICE9PSBcInN5bWJvbFwiKSB7XG5cdFx0XHRcdFx0cHJveHkub2JzZXJ2ZXJzLm5vdGlmeShwcm94eSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXG5cdFx0Ly8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy85LjAvI3NlYy1wcm94eS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHMtZGVmaW5lb3ducHJvcGVydHktcC1kZXNjXG5cdFx0ZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgZGVzY3JpcHRvcikge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzY3JpcHRvcik7XG5cdFx0XHRpZiAodHlwZW9mIGtleSAhPT0gXCJzeW1ib2xcIikge1xuXHRcdFx0XHRwcm94eS5vYnNlcnZlcnMubm90aWZ5KHByb3h5KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSxcblxuXHRcdC8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvOS4wLyNzZWMtcHJveHktb2JqZWN0LWludGVybmFsLW1ldGhvZHMtYW5kLWludGVybmFsLXNsb3RzLXNldHByb3RvdHlwZW9mLXZcblx0XHRzZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBSZWZsZWN0LnNldFByb3RvdHlwZU9mKG9iamVjdDEsIGtleSk7XG5cblx0XHRcdGlmICh0eXBlb2Yga2V5ICE9PSBcInN5bWJvbFwiKSB7XG5cdFx0XHRcdHByb3h5Lm9ic2VydmVycy5ub3RpZnkocHJveHkpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0sXG5cdH07XG5cblx0cmV0dXJuIGhhbmRsZXI7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfVEhFTUVfTkFNRSwgREVGQVVMVF9USEVNRSB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IFRoZW1lLCBnZXREb2N1bWVudFRoZW1lIH07XG5cbi8qKlxuICogVGhlIFRoZW1lIGNsYXNzIHByb3ZpZGVzIHRoZSBmdW5jdGlvbmFsaXR5IGZvciB0aGUgdGhlbWUuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2RvbS90aGVtZS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAc3VtbWFyeSBBIHRoZW1lIGNsYXNzXG4gKi9cbmNsYXNzIFRoZW1lIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gbmFtZVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0Y29uc3RydWN0b3IobmFtZSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dmFsaWRhdGVTdHJpbmcobmFtZSk7XG5cdFx0dGhpcy5uYW1lID0gbmFtZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS90aGVtZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0TmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5uYW1lO1xuXHR9XG59XG5cbi8qKlxuICogVGhlIHRoZW1pbmcgdXNlZCBpbiB0aGUgZG9jdW1lbnQgY2FuIGJlIGRlZmluZWQgdmlhIHRoZSBodG1sLXRhZy5cbiAqIFRoZSB0aGVtaW5nIGlzIHNwZWNpZmllZCB2aWEgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLXRoZW1lLW5hbWVgLlxuICpcbiAqIEFzIG5hbWUgZm9yIGEgdGhlbWUgYWxsIGNoYXJhY3RlcnMgYXJlIHZhbGlkLCB3aGljaCBhcmUgYWxzbyBhbGxvd2VkIGZvciBhIEhUTUxFbGVtZW50LUlELlxuICpcbiAqIGBgYFxuICogPGh0bWwgZGF0YS1tb25zdGVyLXRoZW1lLW5hbWU9XCJteS10aGVtZVwiPlxuICogYGBgXG4gKlxuICogdGhlIGRlZmF1bHQgdGhlbWUgbmFtZSBpcyBgbW9uc3RlcmAuXG4gKlxuICogQHJldHVybiB7VGhlbWV9XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKi9cbmZ1bmN0aW9uIGdldERvY3VtZW50VGhlbWUoKSB7XG5cdGNvbnN0IGRvY3VtZW50ID0gZ2V0R2xvYmFsT2JqZWN0KFwiZG9jdW1lbnRcIik7XG5cdGxldCBuYW1lID0gREVGQVVMVF9USEVNRTtcblxuXHRjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImh0bWxcIik7XG5cdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRjb25zdCB0aGVtZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9USEVNRV9OQU1FKTtcblx0XHRpZiAodGhlbWUpIHtcblx0XHRcdG5hbWUgPSB0aGVtZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3IFRoZW1lKG5hbWUpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsRnVuY3Rpb24sIGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9URU1QTEFURV9QUkVGSVggfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudFRoZW1lIH0gZnJvbSBcIi4vdGhlbWUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBUZW1wbGF0ZSB9O1xuXG4vKipcbiAqIFRoZSB0ZW1wbGF0ZSBjbGFzcyBwcm92aWRlcyBtZXRob2RzIGZvciBjcmVhdGluZyB0ZW1wbGF0ZXMuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBzdW1tYXJ5IEEgdGVtcGxhdGUgY2xhc3NcbiAqL1xuY2xhc3MgVGVtcGxhdGUgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7SFRNTFRlbXBsYXRlRWxlbWVudH0gdGVtcGxhdGVcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2Zcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGZ1bmN0aW9uIGlzIG5vdCBkZWZpbmVkXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcih0ZW1wbGF0ZSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0Y29uc3QgSFRNTFRlbXBsYXRlRWxlbWVudCA9IGdldEdsb2JhbEZ1bmN0aW9uKFwiSFRNTFRlbXBsYXRlRWxlbWVudFwiKTtcblx0XHR2YWxpZGF0ZUluc3RhbmNlKHRlbXBsYXRlLCBIVE1MVGVtcGxhdGVFbGVtZW50KTtcblx0XHR0aGlzLnRlbXBsYXRlID0gdGVtcGxhdGU7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vcmVzb3VyY2UvdGVtcGxhdGVcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge0hUTUxUZW1wbGF0ZUVsZW1lbnR9XG5cdCAqL1xuXHRnZXRUZW1wbGF0ZUVsZW1lbnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMudGVtcGxhdGU7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7RG9jdW1lbnRGcmFnbWVudH1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2Zcblx0ICovXG5cdGNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMudGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBsb2FkcyBhIHRlbXBsYXRlIHdpdGggdGhlIGdpdmVuIElEIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqIFRvIGRvIHRoaXMsIGl0IGZpcnN0IHJlYWRzIHRoZSB0aGVtZSBvZiB0aGUgZG9jdW1lbnQgYW5kIGxvb2tzIGZvciB0aGUgYGRhdGEtbW9uc3Rlci10aGVtZS1uYW1lYCBhdHRyaWJ1dGUgaW4gdGhlIEhUTUwgdGFnLlxuICpcbiAqIGBgYFxuICogPGh0bWwgZGF0YS1tb25zdGVyLXRoZW1lLW5hbWU9XCJteS10aGVtZVwiPlxuICogYGBgXG4gKlxuICogSWYgbm8gdGhlbWUgd2FzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdGhlbWUgaXMgYG1vbnN0ZXJgLlxuICpcbiAqIE5vdyBpdCBpcyBsb29rZWQgaWYgdGhlcmUgaXMgYSB0ZW1wbGF0ZSB3aXRoIHRoZSBnaXZlbiBJRCBhbmQgdGhlbWUgYGlkLXRoZW1lYCBhbmQgaWYgeWVzIGl0IGlzIHJldHVybmVkLlxuICogSWYgdGhlcmUgaXMgbm8gdGVtcGxhdGUgYSBzZWFyY2ggZm9yIGEgdGVtcGxhdGUgd2l0aCB0aGUgZ2l2ZW4gSUQgYGlkYCBpcyBkb25lLiBJZiB0aGlzIGlzIGFsc28gbm90IGZvdW5kLCBhbiBlcnJvciBpcyB0aHJvd24uXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBtZXRob2QgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5ET00uZmluZERvY3VtZW50VGVtcGxhdGUoKWAuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7ZmluZFRlbXBsYXRlfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9kb20vdGVtcGxhdGUubWpzJztcbiAqIGZpbmREb2N1bWVudFRlbXBsYXRlKClcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQgeyBmaW5kRG9jdW1lbnRUZW1wbGF0ZSB9IGZyb20gXCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BzY2h1a2FpL21vbnN0ZXJAbGF0ZXN0L3NvdXJjZS9kb20vdGVtcGxhdGUubWpzXCI7XG4gKlxuICogY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gKiB0ZW1wbGF0ZS5pZCA9IFwibXlUZW1wbGF0ZVwiO1xuICogdGVtcGxhdGUuaW5uZXJIVE1MID0gXCI8cD5teSBkZWZhdWx0IHRlbXBsYXRlPC9wPlwiO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZW1wbGF0ZSk7XG4gKlxuICogY29uc3QgdGhlbWVkVGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gKiB0aGVtZWRUZW1wbGF0ZS5pZCA9IFwibXlUZW1wbGF0ZS1teVRoZW1lXCI7XG4gKiB0aGVtZWRUZW1wbGF0ZS5pbm5lckhUTUwgPSBcIjxwPm15IHRoZW1lZCB0ZW1wbGF0ZTwvcD5cIjtcbiAqIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhlbWVkVGVtcGxhdGUpO1xuICpcbiAqIC8vIGxvYWRzIHRoZSB0ZW1wbGUgYW5kIHNpbmNlIG5vIHRoZW1lIGlzIHNldCB0aGUgZGVmYXVsdCB0ZW1wbGF0ZVxuICogY29uc3QgdGVtcGxhdGUxID0gZmluZERvY3VtZW50VGVtcGxhdGUoXCJteVRlbXBsYXRlXCIpO1xuICogY29uc29sZS5sb2codGVtcGxhdGUxLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG4gKiAvLyBcdTIxQTYgJzxwPm15IGRlZmF1bHQgdGVtcGxhdGU8L3A+J1xuICpcbiAqIC8vIG5vdyB3ZSBzZXQgb3VyIG93biB0aGVtZVxuICogZG9jdW1lbnRcbiAqIC5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKVxuICogLnNldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci10aGVtZS1uYW1lXCIsIFwibXlUaGVtZVwiKTtcbiAqXG4gKiAvLyBub3cgd2UgZG9uJ3QgZ2V0IHRoZSBkZWZhdWx0IHRlbXBsYXRlLFxuICogLy8gYnV0IHRoZSB0ZW1wbGF0ZSB3aXRoIHRoZSB0aGVtZSBpbiB0aGUgaWRcbiAqIGNvbnN0IHRlbXBsYXRlMiA9IGZpbmREb2N1bWVudFRlbXBsYXRlKFwibXlUZW1wbGF0ZVwiKTtcbiAqIGNvbnNvbGUubG9nKHRlbXBsYXRlMi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuICogLy8gXHUyMUE2ICc8cD5teSB0aGVtZWQgdGVtcGxhdGU8L3A+J1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZFxuICogQHBhcmFtIHtOb2RlfSBjdXJyZW50Tm9kZVxuICogQHJldHVybiB7TW9uc3Rlci5ET00uVGVtcGxhdGV9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjcuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7RXJyb3J9IHRlbXBsYXRlIGlkIG5vdCBmb3VuZC5cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRG9jdW1lbnRUZW1wbGF0ZShpZCwgY3VycmVudE5vZGUpIHtcblx0dmFsaWRhdGVTdHJpbmcoaWQpO1xuXG5cdGNvbnN0IGRvY3VtZW50ID0gZ2V0R2xvYmFsT2JqZWN0KFwiZG9jdW1lbnRcIik7XG5cdGNvbnN0IEhUTUxUZW1wbGF0ZUVsZW1lbnQgPSBnZXRHbG9iYWxGdW5jdGlvbihcIkhUTUxUZW1wbGF0ZUVsZW1lbnRcIik7XG5cdGNvbnN0IERvY3VtZW50RnJhZ21lbnQgPSBnZXRHbG9iYWxGdW5jdGlvbihcIkRvY3VtZW50RnJhZ21lbnRcIik7XG5cdGNvbnN0IERvY3VtZW50ID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJEb2N1bWVudFwiKTtcblxuXHRsZXQgcHJlZml4SUQ7XG5cblx0aWYgKFxuXHRcdCEoXG5cdFx0XHRjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50IHx8IGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudFxuXHRcdClcblx0KSB7XG5cdFx0aWYgKGN1cnJlbnROb2RlIGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdFx0aWYgKGN1cnJlbnROb2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfVEVNUExBVEVfUFJFRklYKSkge1xuXHRcdFx0XHRwcmVmaXhJRCA9IGN1cnJlbnROb2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVEVNUExBVEVfUFJFRklYKTtcblx0XHRcdH1cblxuXHRcdFx0Y3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5nZXRSb290Tm9kZSgpO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCEoXG5cdFx0XHRcdFx0Y3VycmVudE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudCB8fFxuXHRcdFx0XHRcdGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudFxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Y3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5vd25lckRvY3VtZW50O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdCEoXG5cdFx0XHRcdGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnQgfHxcblx0XHRcdFx0Y3VycmVudE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50XG5cdFx0XHQpXG5cdFx0KSB7XG5cdFx0XHRjdXJyZW50Tm9kZSA9IGRvY3VtZW50O1xuXHRcdH1cblx0fVxuXG5cdGxldCB0ZW1wbGF0ZTtcblx0Y29uc3QgdGhlbWUgPSBnZXREb2N1bWVudFRoZW1lKCk7XG5cblx0aWYgKHByZWZpeElEKSB7XG5cdFx0Y29uc3QgdGhlbWVkUHJlZml4SUQgPSBgJHtwcmVmaXhJRH0tJHtpZH0tJHt0aGVtZS5nZXROYW1lKCl9YDtcblxuXHRcdC8vIGN1cnJlbnQgKyB0aGVtZWRQcmVmaXhJRFxuXHRcdHRlbXBsYXRlID0gY3VycmVudE5vZGUuZ2V0RWxlbWVudEJ5SWQodGhlbWVkUHJlZml4SUQpO1xuXHRcdGlmICh0ZW1wbGF0ZSBpbnN0YW5jZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQpIHtcblx0XHRcdHJldHVybiBuZXcgVGVtcGxhdGUodGVtcGxhdGUpO1xuXHRcdH1cblxuXHRcdC8vIGRvY3VtZW50ICsgdGhlbWVkUHJlZml4SURcblx0XHR0ZW1wbGF0ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoZW1lZFByZWZpeElEKTtcblx0XHRpZiAodGVtcGxhdGUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KSB7XG5cdFx0XHRyZXR1cm4gbmV3IFRlbXBsYXRlKHRlbXBsYXRlKTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCB0aGVtZWRJRCA9IGAke2lkfS0ke3RoZW1lLmdldE5hbWUoKX1gO1xuXG5cdC8vIGN1cnJlbnQgKyB0aGVtZWRJRFxuXHR0ZW1wbGF0ZSA9IGN1cnJlbnROb2RlLmdldEVsZW1lbnRCeUlkKHRoZW1lZElEKTtcblx0aWYgKHRlbXBsYXRlIGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkge1xuXHRcdHJldHVybiBuZXcgVGVtcGxhdGUodGVtcGxhdGUpO1xuXHR9XG5cblx0Ly8gZG9jdW1lbnQgKyB0aGVtZWRJRFxuXHR0ZW1wbGF0ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoZW1lZElEKTtcblx0aWYgKHRlbXBsYXRlIGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkge1xuXHRcdHJldHVybiBuZXcgVGVtcGxhdGUodGVtcGxhdGUpO1xuXHR9XG5cblx0Ly8gY3VycmVudCArIElEXG5cdHRlbXBsYXRlID0gY3VycmVudE5vZGUuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXHRpZiAodGVtcGxhdGUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KSB7XG5cdFx0cmV0dXJuIG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cdH1cblxuXHQvLyBkb2N1bWVudCArIElEXG5cdHRlbXBsYXRlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXHRpZiAodGVtcGxhdGUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KSB7XG5cdFx0cmV0dXJuIG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cdH1cblxuXHR0aHJvdyBuZXcgRXJyb3IoYHRlbXBsYXRlICR7aWR9IG5vdCBmb3VuZC5gKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdHlwZU9mIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVvZi5tanNcIjtcblxuZXhwb3J0IHsgZGlmZiB9O1xuXG4vKipcbiAqIFdpdGggdGhlIGRpZmYgZnVuY3Rpb24geW91IGNhbiBwZXJmb3JtIHRoZSBjaGFuZ2Ugb2Ygb25lIG9iamVjdCB0byBhbm90aGVyLiBUaGUgcmVzdWx0IHNob3dzIHRoZSBjaGFuZ2VzIG9mIHRoZSBzZWNvbmQgb2JqZWN0IHRvIHRoZSBmaXJzdCBvYmplY3QuXG4gKlxuICogVGhlIG9wZXJhdG9yIGBhZGRgIG1lYW5zIHRoYXQgc29tZXRoaW5nIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBzZWNvbmQgb2JqZWN0LiBgZGVsZXRlYCBtZWFucyB0aGF0IHNvbWV0aGluZyBoYXMgYmVlbiBkZWxldGVkIGZyb20gdGhlIHNlY29uZCBvYmplY3QgY29tcGFyZWQgdG8gdGhlIGZpcnN0IG9iamVjdC5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvZGF0YS9kaWZmLm1qc1xuICogQHBhcmFtIHsqfSBmaXJzdFxuICogQHBhcmFtIHsqfSBzZWNvbmRcbiAqIEByZXR1cm4ge2FycmF5fVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKi9cbmZ1bmN0aW9uIGRpZmYoZmlyc3QsIHNlY29uZCkge1xuXHRyZXR1cm4gZG9EaWZmKGZpcnN0LCBzZWNvbmQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gYVxuICogQHBhcmFtIGJcbiAqIEBwYXJhbSB0eXBlXG4gKiBAcmV0dXJuIHtTZXQ8c3RyaW5nPnxTZXQ8bnVtYmVyPn1cbiAqL1xuZnVuY3Rpb24gZ2V0S2V5cyhhLCBiLCB0eXBlKSB7XG5cdGlmIChpc0FycmF5KHR5cGUpKSB7XG5cdFx0Y29uc3Qga2V5cyA9XG5cdFx0XHRhLmxlbmd0aCA+IGIubGVuZ3RoID8gbmV3IEFycmF5KGEubGVuZ3RoKSA6IG5ldyBBcnJheShiLmxlbmd0aCk7XG5cdFx0a2V5cy5maWxsKDApO1xuXHRcdHJldHVybiBuZXcgU2V0KGtleXMubWFwKChfLCBpKSA9PiBpKSk7XG5cdH1cblxuXHRyZXR1cm4gbmV3IFNldChPYmplY3Qua2V5cyhhKS5jb25jYXQoT2JqZWN0LmtleXMoYikpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGFcbiAqIEBwYXJhbSBiXG4gKiBAcGFyYW0gcGF0aFxuICogQHBhcmFtIGRpZmZcbiAqIEByZXR1cm4ge2FycmF5fVxuICovXG5mdW5jdGlvbiBkb0RpZmYoYSwgYiwgcGF0aCwgZGlmZikge1xuXHRjb25zdCB0eXBlQSA9IHR5cGVPZihhKTtcblx0Y29uc3QgdHlwZUIgPSB0eXBlT2YoYik7XG5cblx0Y29uc3QgY3VyclBhdGggPSBwYXRoIHx8IFtdO1xuXHRjb25zdCBjdXJyRGlmZiA9IGRpZmYgfHwgW107XG5cblx0aWYgKHR5cGVBID09PSB0eXBlQiAmJiAodHlwZUEgPT09IFwib2JqZWN0XCIgfHwgdHlwZUEgPT09IFwiYXJyYXlcIikpIHtcblx0XHRnZXRLZXlzKGEsIGIsIHR5cGVBKS5mb3JFYWNoKCh2KSA9PiB7XG5cdFx0XHRpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLCB2KSkge1xuXHRcdFx0XHRjdXJyRGlmZi5wdXNoKGJ1aWxkUmVzdWx0KGFbdl0sIGJbdl0sIFwiYWRkXCIsIGN1cnJQYXRoLmNvbmNhdCh2KSkpO1xuXHRcdFx0fSBlbHNlIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHYpKSB7XG5cdFx0XHRcdGN1cnJEaWZmLnB1c2goYnVpbGRSZXN1bHQoYVt2XSwgYlt2XSwgXCJkZWxldGVcIiwgY3VyclBhdGguY29uY2F0KHYpKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkb0RpZmYoYVt2XSwgYlt2XSwgY3VyclBhdGguY29uY2F0KHYpLCBjdXJyRGlmZik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgbyA9IGdldE9wZXJhdG9yKGEsIGIsIHR5cGVBLCB0eXBlQik7XG5cdFx0aWYgKG8gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y3VyckRpZmYucHVzaChidWlsZFJlc3VsdChhLCBiLCBvLCBwYXRoKSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGN1cnJEaWZmO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0geyp9IGFcbiAqIEBwYXJhbSB7Kn0gYlxuICogQHBhcmFtIHtzdHJpbmd9IG9wZXJhdG9yXG4gKiBAcGFyYW0ge2FycmF5fSBwYXRoXG4gKiBAcmV0dXJuIHt7cGF0aDogYXJyYXksIG9wZXJhdG9yOiBzdHJpbmd9fVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYnVpbGRSZXN1bHQoYSwgYiwgb3BlcmF0b3IsIHBhdGgpIHtcblx0Y29uc3QgcmVzdWx0ID0ge1xuXHRcdG9wZXJhdG9yLFxuXHRcdHBhdGgsXG5cdH07XG5cblx0aWYgKG9wZXJhdG9yICE9PSBcImFkZFwiKSB7XG5cdFx0cmVzdWx0LmZpcnN0ID0ge1xuXHRcdFx0dmFsdWU6IGEsXG5cdFx0XHR0eXBlOiB0eXBlb2YgYSxcblx0XHR9O1xuXG5cdFx0aWYgKGlzT2JqZWN0KGEpKSB7XG5cdFx0XHRjb25zdCBuYW1lID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGEpPy5jb25zdHJ1Y3Rvcj8ubmFtZTtcblx0XHRcdGlmIChuYW1lICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmVzdWx0LmZpcnN0Lmluc3RhbmNlID0gbmFtZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAob3BlcmF0b3IgPT09IFwiYWRkXCIgfHwgb3BlcmF0b3IgPT09IFwidXBkYXRlXCIpIHtcblx0XHRyZXN1bHQuc2Vjb25kID0ge1xuXHRcdFx0dmFsdWU6IGIsXG5cdFx0XHR0eXBlOiB0eXBlb2YgYixcblx0XHR9O1xuXG5cdFx0aWYgKGlzT2JqZWN0KGIpKSB7XG5cdFx0XHRjb25zdCBuYW1lID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGIpPy5jb25zdHJ1Y3Rvcj8ubmFtZTtcblx0XHRcdGlmIChuYW1lICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmVzdWx0LnNlY29uZC5pbnN0YW5jZSA9IG5hbWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSBhXG4gKiBAcGFyYW0geyp9IGJcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzTm90RXF1YWwoYSwgYikge1xuXHRpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUpIHtcblx0XHRyZXR1cm4gYS5nZXRUaW1lKCkgIT09IGIuZ2V0VGltZSgpO1xuXHR9XG5cblx0cmV0dXJuIGEgIT09IGI7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gYVxuICogQHBhcmFtIHsqfSBiXG4gKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuICovXG5mdW5jdGlvbiBnZXRPcGVyYXRvcihhLCBiKSB7XG5cdC8qKlxuXHQgKiBAdHlwZSB7c3RyaW5nfHVuZGVmaW5lZH1cblx0ICovXG5cdGxldCBvcGVyYXRvcjtcblxuXHQvKipcblx0ICogQHR5cGUge3N0cmluZ31cblx0ICovXG5cdGNvbnN0IHR5cGVBID0gdHlwZW9mIGE7XG5cblx0LyoqXG5cdCAqIEB0eXBlIHtzdHJpbmd9XG5cdCAqL1xuXHRjb25zdCB0eXBlQiA9IHR5cGVvZiBiO1xuXG5cdGlmICh0eXBlQSA9PT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlQiAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdG9wZXJhdG9yID0gXCJhZGRcIjtcblx0fSBlbHNlIGlmICh0eXBlQSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlQiA9PT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdG9wZXJhdG9yID0gXCJkZWxldGVcIjtcblx0fSBlbHNlIGlmIChpc05vdEVxdWFsKGEsIGIpKSB7XG5cdFx0b3BlcmF0b3IgPSBcInVwZGF0ZVwiO1xuXHR9XG5cblx0cmV0dXJuIG9wZXJhdG9yO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuLyoqXG4gKlxuICogQHBhcmFtIG1pbGxpc2Vjb25kc1xuICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59XG4gKiBAc2luY2UgMy41NS4wXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTbGVlcChtaWxsaXNlY29uZHMpIHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1pbGxpc2Vjb25kcykpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgSUQgfSBmcm9tIFwiLi4vdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyB0cmltU3BhY2VzIH07XG5cbi8qKlxuICogVGhpcyBzcGVjaWFsIHRyaW0gZnVuY3Rpb24gYWxsb3dzIHRvIHRyaW0gc3BhY2VzIHRoYXQgaGF2ZSBiZWVuIHByb3RlY3RlZCBieSBhIHNwZWNpYWwgZXNjYXBlIGNoYXJhY3Rlci5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt0cmltU3BhY2VzfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS91dGlsL3RyaW1zcGFjZXMubWpzJztcbiAqIHRyaW1TcGFjZXMoJyBoZWxsbyBcXFxcICcpXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEhpbnQ6IE9uZSBzdHJva2UgaXMgZXNjYXBlZCBieSB0aGUgamF2YXNjcmlwdCBpbnRlcnByZXRlciwgdGhlIHNlY29uZCBzdHJva2UgZXNjYXBlcyB0aGUgc3Ryb2tlLlxuICpcbiAqIGBgYHRleHRcbiAqIGFcXCBiICBcdTIxQTYgYSBiXG4gKiBhXFxcXCBiIFx1MjFBNiBhXFwgYlxuICogYGBgXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiB0cmltU3BhY2VzKHZhbHVlKSB7XG5cdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblxuXHRjb25zdCBwbGFjZWhvbGRlciA9IG5ldyBNYXAoKTtcblx0Y29uc3QgcmVnZXggPSAvKCg/PHBhdHRlcm4+XFxcXCg/PGNoYXI+LikpezF9KS9naW07XG5cblx0Ly8gVGhlIHNlcGFyYXRvciBmb3IgYXJncyBtdXN0IGJlIGVzY2FwZWRcblx0Ly8gdW5kZWZpbmVkIHN0cmluZyB3aGljaCBzaG91bGQgbm90IG9jY3VyIG5vcm1hbGx5IGFuZCBpcyBhbHNvIG5vdCBhIHJlZ2V4XG5cdGNvbnN0IHJlc3VsdCA9IHZhbHVlLm1hdGNoQWxsKHJlZ2V4KTtcblxuXHRmb3IgKGNvbnN0IG0gb2YgcmVzdWx0KSB7XG5cdFx0Y29uc3QgZyA9IG0/LltcImdyb3Vwc1wiXTtcblx0XHRpZiAoIWlzT2JqZWN0KGcpKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjb25zdCBwID0gZz8uW1wicGF0dGVyblwiXTtcblx0XHRjb25zdCBjID0gZz8uW1wiY2hhclwiXTtcblxuXHRcdGlmIChwICYmIGMpIHtcblx0XHRcdGNvbnN0IHIgPSBgX18ke25ldyBJRCgpLnRvU3RyaW5nKCl9X19gO1xuXHRcdFx0cGxhY2Vob2xkZXIuc2V0KHIsIGMpO1xuXHRcdFx0dmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHAsIHIpO1xuXHRcdH1cblx0fVxuXG5cdHZhbHVlID0gdmFsdWUudHJpbSgpO1xuXHRwbGFjZWhvbGRlci5mb3JFYWNoKCh2LCBrKSA9PiB7XG5cdFx0dmFsdWUgPSB2YWx1ZS5yZXBsYWNlKGssIGBcXFxcJHt2fWApO1xuXHR9KTtcblxuXHRyZXR1cm4gdmFsdWU7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuXG5leHBvcnQgeyBmaXJlRXZlbnQsIGZpcmVDdXN0b21FdmVudCwgZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQgfTtcblxuLyoqXG4gKiBUaGUgZnVuY3Rpb24gc2VuZHMgYW4gZXZlbnRcbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fEhUTUxDb2xsZWN0aW9ufE5vZGVMaXN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybiB7dm9pZH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgb3IgSFRNTENvbGxlY3Rpb25cbiAqIEBzdW1tYXJ5IENvbnN0cnVjdCBhbmQgc2VuZCBhbmQgZXZlbnRcbiAqL1xuZnVuY3Rpb24gZmlyZUV2ZW50KGVsZW1lbnQsIHR5cGUpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRpZiAodHlwZSA9PT0gXCJjbGlja1wiKSB7XG5cdFx0XHRlbGVtZW50LmNsaWNrKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50L0V2ZW50XG5cdFx0Y29uc3QgZXZlbnQgPSBuZXcgRXZlbnQodmFsaWRhdGVTdHJpbmcodHlwZSksIHtcblx0XHRcdGJ1YmJsZXM6IHRydWUsXG5cdFx0XHRjYW5jZWxhYmxlOiB0cnVlLFxuXHRcdFx0Y29tcG9zZWQ6IHRydWUsXG5cdFx0fSk7XG5cblx0XHRlbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuXHR9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQ29sbGVjdGlvbiB8fCBlbGVtZW50IGluc3RhbmNlb2YgTm9kZUxpc3QpIHtcblx0XHRmb3IgKGNvbnN0IGUgb2YgZWxlbWVudCkge1xuXHRcdFx0ZmlyZUV2ZW50KGUsIHR5cGUpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XCJ2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgb3IgSFRNTENvbGxlY3Rpb25cIixcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogWW91IGNhbiBjYWxsIHRoZSBmdW5jdGlvbiB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5ET00uZmlyZUN1c3RvbUV2ZW50KClgLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8SFRNTENvbGxlY3Rpb258Tm9kZUxpc3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudCBvciBIVE1MQ29sbGVjdGlvblxuICogQHN1bW1hcnkgQ29uc3RydWN0IGFuZCBzZW5kIGFuZCBldmVudFxuICovXG5mdW5jdGlvbiBmaXJlQ3VzdG9tRXZlbnQoZWxlbWVudCwgdHlwZSwgZGV0YWlsKSB7XG5cdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0aWYgKCFpc09iamVjdChkZXRhaWwpKSB7XG5cdFx0XHRkZXRhaWwgPSB7IGRldGFpbCB9O1xuXHRcdH1cblxuXHRcdGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KHZhbGlkYXRlU3RyaW5nKHR5cGUpLCB7XG5cdFx0XHRidWJibGVzOiB0cnVlLFxuXHRcdFx0Y2FuY2VsYWJsZTogdHJ1ZSxcblx0XHRcdGNvbXBvc2VkOiB0cnVlLFxuXHRcdFx0ZGV0YWlsLFxuXHRcdH0pO1xuXG5cdFx0ZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcblx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTENvbGxlY3Rpb24gfHwgZWxlbWVudCBpbnN0YW5jZW9mIE5vZGVMaXN0KSB7XG5cdFx0Zm9yIChjb25zdCBlIG9mIGVsZW1lbnQpIHtcblx0XHRcdGZpcmVDdXN0b21FdmVudChlLCB0eXBlLCBkZXRhaWwpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XCJ2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgb3IgSFRNTENvbGxlY3Rpb25cIixcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBwYXRoIGBFdmVudC5jb21wb3NlZFBhdGgoKWAgZnJvbSBhbiBldmVudCBhbmQgdHJpZXMgdG8gZmluZCB0aGUgbmV4dCBlbGVtZW50XG4gKiB1cCB0aGUgdHJlZSBgZWxlbWVudC5jbG9zZXN0KClgIHdpdGggdGhlIGF0dHJpYnV0ZSBhbmQgdmFsdWUuIElmIG5vIHZhbHVlLCBvciBhIHZhbHVlIHRoYXQgaXMgdW5kZWZpbmVkIG9yIG51bGwsXG4gKiBpcyBzcGVjaWZpZWQsIG9ubHkgdGhlIGF0dHJpYnV0ZSBpcyBzZWFyY2hlZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE0LjBcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlTmFtZVxuICogQHBhcmFtIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IGF0dHJpYnV0ZVZhbHVlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgZXZlbnRcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG4gKiBAc3VtbWFyeSBIZWxwIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGFwcHJvcHJpYXRlIGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoZXZlbnQsIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZXZlbnQsIEV2ZW50KTtcblxuXHRpZiAodHlwZW9mIGV2ZW50LmNvbXBvc2VkUGF0aCAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgZXZlbnRcIik7XG5cdH1cblxuXHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cblx0Ly8gY2xvc2VzdCBjYW5ub3QgYmUgdXNlZCBoZXJlLCBiZWNhdXNlIGNsb3Nlc3QgaXMgbm90IGNvcnJlY3QgZm9yIHNsb3R0ZWQgZWxlbWVudHNcblx0aWYgKGlzQXJyYXkocGF0aCkpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IG8gPSBwYXRoW2ldO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdG8gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcdFx0XHRvLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSAmJlxuXHRcdFx0XHQoYXR0cmlidXRlVmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRcdG8uZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpID09PSBhdHRyaWJ1dGVWYWx1ZSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gbztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZGlmZiB9IGZyb20gXCIuLi9kYXRhL2RpZmYubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IFBpcGUgfSBmcm9tIFwiLi4vZGF0YS9waXBlLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFUyxcblx0QVRUUklCVVRFX1VQREFURVJfQklORCxcblx0QVRUUklCVVRFX1VQREFURVJfQklORF9UWVBFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlQsXG5cdEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0UsXG5cdEFUVFJJQlVURV9VUERBVEVSX1JFTU9WRSxcblx0QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSxcblx0QVRUUklCVVRFX1VQREFURVJfU0VMRUNUX1RISVMsXG59IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNTdHJpbmcsIGlzSW5zdGFuY2UsIGlzSXRlcmFibGUgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IFByb3h5T2JzZXJ2ZXIgfSBmcm9tIFwiLi4vdHlwZXMvcHJveHlvYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlQXJyYXksIHZhbGlkYXRlSW5zdGFuY2UgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBTbGVlcCB9IGZyb20gXCIuLi91dGlsL3NsZWVwLm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7IHRyaW1TcGFjZXMgfSBmcm9tIFwiLi4vdXRpbC90cmltc3BhY2VzLm1qc1wiO1xuaW1wb3J0IHthZGRBdHRyaWJ1dGVUb2tlbiwgYWRkVG9PYmplY3RMaW5rfSBmcm9tIFwiLi9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHt1cGRhdGVyVHJhbnNmb3JtZXJNZXRob2RzU3ltYm9sfSBmcm9tIFwiLi9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQgfSBmcm9tIFwiLi9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBmaW5kRG9jdW1lbnRUZW1wbGF0ZSB9IGZyb20gXCIuL3RlbXBsYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBVcGRhdGVyLCBhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudCB9O1xuXG4vKipcbiAqIFRoZSB1cGRhdGVyIGNsYXNzIGNvbm5lY3RzIGFuIG9iamVjdCB3aXRoIHRoZSBkb20uIEluIHRoaXMgd2F5LCBzdHJ1Y3R1cmVzIGFuZCBjb250ZW50cyBpbiB0aGUgRE9NIGNhbiBiZSBcbiAqIHByb2dyYW1tYXRpY2FsbHkgYWRhcHRlZCB2aWEgYXR0cmlidXRlcy5cbiAqXG4gKiBGb3IgZXhhbXBsZSwgdG8gaW5jbHVkZSBhIHN0cmluZyBmcm9tIGFuIG9iamVjdCwgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLXJlcGxhY2VgIGNhbiBiZSB1c2VkLlxuICogYSBmdXJ0aGVyIGV4cGxhbmF0aW9uIGNhbiBiZSBmb3VuZCB1bmRlciBbbW9uc3RlcmpzLm9yZ10oaHR0cHM6Ly9tb25zdGVyanMub3JnLylcbiAqXG4gKiBDaGFuZ2VzIHRvIGF0dHJpYnV0ZXMgYXJlIG1hZGUgb25seSB3aGVuIHRoZSBkaXJlY3QgdmFsdWVzIGFyZSBjaGFuZ2VkLiBJZiB5b3Ugd2FudCB0byBhc3NpZ24gY2hhbmdlcyBcbiAqIHRvIG90aGVyIHZhbHVlcyBhcyB3ZWxsLCB5b3UgaGF2ZSB0byBpbnNlcnQgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLXNlbGVjdC10aGlzYC4gVGhpcyBzaG91bGQgYmUgXG4gKiBkb25lIHdpdGggY2FyZSwgYXMgaXQgY2FuIHJlZHVjZSBwZXJmb3JtYW5jZS5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvZG9tL3VwZGF0ZXIubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7RXJyb3J9IHRoZSB2YWx1ZSBpcyBub3QgaXRlcmFibGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBwaXBlcyBhcmUgbm90IGFsbG93ZWQgd2hlbiBjbG9uaW5nIGEgbm9kZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyB0ZW1wbGF0ZSB3YXMgZm91bmQgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS5cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgbWF4aW11bSBkZXB0aCBmb3IgdGhlIHJlY3Vyc2lvbiBpcyByZWFjaGVkLlxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3RcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG4gKiBAc3VtbWFyeSBUaGUgdXBkYXRlciBjbGFzcyBjb25uZWN0cyBhbiBvYmplY3Qgd2l0aCB0aGUgZG9tXG4gKi9cbmNsYXNzIFVwZGF0ZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIEBzaW5jZSAxLjguMFxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG5cdCAqIEBwYXJhbSB7b2JqZWN0fFByb3h5T2JzZXJ2ZXJ8dW5kZWZpbmVkfSBzdWJqZWN0XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG5cdCAqIEBzZWUge0BsaW5rIE1vbnN0ZXIuRE9NLmZpbmREb2N1bWVudFRlbXBsYXRlfVxuXHQgKi9cblx0Y29uc3RydWN0b3IoZWxlbWVudCwgc3ViamVjdCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHQvKipcblx0XHQgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG5cdFx0ICovXG5cdFx0aWYgKHN1YmplY3QgPT09IHVuZGVmaW5lZCkgc3ViamVjdCA9IHt9O1xuXHRcdGlmICghaXNJbnN0YW5jZShzdWJqZWN0LCBQcm94eU9ic2VydmVyKSkge1xuXHRcdFx0c3ViamVjdCA9IG5ldyBQcm94eU9ic2VydmVyKHN1YmplY3QpO1xuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0ZWxlbWVudDogdmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCksXG5cdFx0XHRsYXN0OiB7fSxcblx0XHRcdGNhbGxiYWNrczogbmV3IE1hcCgpLFxuXHRcdFx0ZXZlbnRUeXBlczogW1wia2V5dXBcIiwgXCJjbGlja1wiLCBcImNoYW5nZVwiLCBcImRyb3BcIiwgXCJ0b3VjaGVuZFwiLCBcImlucHV0XCJdLFxuXHRcdFx0c3ViamVjdDogc3ViamVjdCxcblx0XHR9O1xuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uY2FsbGJhY2tzLnNldChcblx0XHRcdFwiY2hlY2tzdGF0ZVwiLFxuXHRcdFx0Z2V0Q2hlY2tTdGF0ZUNhbGxiYWNrLmNhbGwodGhpcyksXG5cdFx0KTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuYXR0YWNoT2JzZXJ2ZXIoXG5cdFx0XHRuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBzID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRSZWFsU3ViamVjdCgpO1xuXG5cdFx0XHRcdGNvbnN0IGRpZmZSZXN1bHQgPSBkaWZmKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmxhc3QsIHMpO1xuXHRcdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5sYXN0ID0gY2xvbmUocyk7XG5cblx0XHRcdFx0Y29uc3QgcHJvbWlzZXMgPSBbXTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IFssIGNoYW5nZV0gb2YgT2JqZWN0LmVudHJpZXMoZGlmZlJlc3VsdCkpIHtcblx0XHRcdFx0XHRwcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0U2xlZXAoMSkudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJlbW92ZUVsZW1lbnQuY2FsbCh0aGlzLCBjaGFuZ2UpO1xuXHRcdFx0XHRcdFx0XHRpbnNlcnRFbGVtZW50LmNhbGwodGhpcywgY2hhbmdlKTtcblx0XHRcdFx0XHRcdFx0dXBkYXRlQ29udGVudC5jYWxsKHRoaXMsIGNoYW5nZSk7XG5cdFx0XHRcdFx0XHRcdHVwZGF0ZUF0dHJpYnV0ZXMuY2FsbCh0aGlzLCBjaGFuZ2UpO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmF1bHRzOiAna2V5dXAnLCAnY2xpY2snLCAnY2hhbmdlJywgJ2Ryb3AnLCAndG91Y2hlbmQnXG5cdCAqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0V2ZW50c31cblx0ICogQHNpbmNlIDEuOS4wXG5cdCAqIEBwYXJhbSB7QXJyYXl9IHR5cGVzXG5cdCAqIEByZXR1cm4ge1VwZGF0ZXJ9XG5cdCAqL1xuXHRzZXRFdmVudFR5cGVzKHR5cGVzKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZXZlbnRUeXBlcyA9IHZhbGlkYXRlQXJyYXkodHlwZXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpdGggdGhpcyBtZXRob2QsIHRoZSBldmVudGxpc3RlbmVycyBhcmUgaG9va2VkIGluIGFuZCB0aGUgbWFnaWMgYmVnaW5zLlxuXHQgKlxuXHQgKiBgYGBcblx0ICogdXBkYXRlci5ydW4oKS50aGVuKCgpID0+IHtcblx0ICogICB1cGRhdGVyLmVuYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuXHQgKiB9KTtcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBzaW5jZSAxLjkuMFxuXHQgKiBAcmV0dXJuIHtVcGRhdGVyfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGJpbmQgYXJndW1lbnQgbXVzdCBzdGFydCBhcyBhIHZhbHVlIHdpdGggYSBwYXRoXG5cdCAqL1xuXHRlbmFibGVFdmVudFByb2Nlc3NpbmcoKSB7XG5cdFx0dGhpcy5kaXNhYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cblx0XHRmb3IgKGNvbnN0IHR5cGUgb2YgdGhpc1tpbnRlcm5hbFN5bWJvbF0uZXZlbnRUeXBlcykge1xuXHRcdFx0Ly8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnRUYXJnZXQvYWRkRXZlbnRMaXN0ZW5lclxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XHR0eXBlLFxuXHRcdFx0XHRnZXRDb250cm9sRXZlbnRIYW5kbGVyLmNhbGwodGhpcyksXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjYXB0dXJlOiB0cnVlLFxuXHRcdFx0XHRcdHBhc3NpdmU6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHR1cm5zIG9mZiB0aGUgbWFnaWMgb3Igd2hvIGxvdmVzIGl0IG1vcmUgcHJvZmFuZSBpdCByZW1vdmVzIHRoZSBldmVudExpc3RlbmVyLlxuXHQgKlxuXHQgKiBAc2luY2UgMS45LjBcblx0ICogQHJldHVybiB7VXBkYXRlcn1cblx0ICovXG5cdGRpc2FibGVFdmVudFByb2Nlc3NpbmcoKSB7XG5cdFx0Zm9yIChjb25zdCB0eXBlIG9mIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmV2ZW50VHlwZXMpIHtcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0dHlwZSxcblx0XHRcdFx0Z2V0Q29udHJvbEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgcnVuIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBmb3IgdGhlIHVwZGF0ZSB0byBzdGFydCB3b3JraW5nLlxuXHQgKiBUaGUgbWV0aG9kIGVuc3VyZXMgdGhhdCBjaGFuZ2VzIGFyZSBkZXRlY3RlZC5cblx0ICpcblx0ICogYGBgXG5cdCAqIHVwZGF0ZXIucnVuKCkudGhlbigoKSA9PiB7XG5cdCAqICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblx0ICogfSk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAc3VtbWFyeSBMZXQgdGhlIG1hZ2ljIGJlZ2luXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRydW4oKSB7XG5cdFx0Ly8gdGhlIGtleSBfX2luaXRfX2hhcyBubyBmdXJ0aGVyIG1lYW5pbmcgYW5kIGlzIG9ubHlcblx0XHQvLyB1c2VkIHRvIGNyZWF0ZSB0aGUgZGlmZiBmb3IgZW1wdHkgb2JqZWN0cy5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5sYXN0ID0geyBfX2luaXRfXzogdHJ1ZSB9O1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0Lm5vdGlmeU9ic2VydmVycygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHZhbHVlcyBvZiBib3VuZCBlbGVtZW50cyBhbmQgY2hhbmdlcyB0aGVtIGluIHN1YmplY3Rcblx0ICpcblx0ICogQHNpbmNlIDEuMjcuMFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5VcGRhdGVyfVxuXHQgKi9cblx0cmV0cmlldmUoKSB7XG5cdFx0cmV0cmlldmVGcm9tQmluZGluZ3MuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBJZiB5b3UgaGF2ZSBwYXNzZWQgYSBQcm94eU9ic2VydmVyIGluIHRoZSBjb25zdHJ1Y3RvciwgeW91IHdpbGwgZ2V0IHRoZSBvYmplY3QgdGhhdCB0aGUgUHJveHlPYnNlcnZlciBtYW5hZ2VzIGhlcmUuXG5cdCAqIEhvd2V2ZXIsIGlmIHlvdSBwYXNzZWQgYSBzaW1wbGUgb2JqZWN0LCBoZXJlIHlvdSB3aWxsIGdldCBhIHByb3h5IGZvciB0aGF0IG9iamVjdC5cblx0ICpcblx0ICogRm9yIGNoYW5nZXMgdGhlIFByb3h5T2JzZXJ2ZXIgbXVzdCBiZSB1c2VkLlxuXHQgKlxuXHQgKiBAc2luY2UgMS44LjBcblx0ICogQHJldHVybiB7UHJveHl9XG5cdCAqL1xuXHRnZXRTdWJqZWN0KCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0LmdldFN1YmplY3QoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byByZWdpc3RlciBjb21tYW5kcyB0aGF0IGNhbiBiZSBjYWxsZWQgdmlhIGNhbGw6IGluc3RydWN0aW9uLlxuXHQgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgYSBwaXBlIHdpdGggaXRzIG93biBmdW5jdGlvbmFsaXR5LlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAcmV0dXJucyB7VHJhbnNmb3JtZXJ9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cblx0ICovXG5cdHNldENhbGxiYWNrKG5hbWUsIGNhbGxiYWNrKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uY2FsbGJhY2tzLnNldChuYW1lLCBjYWxsYmFjayk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEByZXR1cm4ge2Z1bmN0aW9uXG4gKiBAdGhpcyBVcGRhdGVyXG4gKi9cbmZ1bmN0aW9uIGdldENoZWNrU3RhdGVDYWxsYmFjaygpIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChjdXJyZW50KSB7XG5cdFx0Ly8gdGhpcyBpcyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBvYmplY3QgKHRoZXJlZm9yZSBubyBhcnJheSBmdW5jdGlvbiBoZXJlKVxuXHRcdGlmICh0aGlzIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuXHRcdFx0aWYgKFtcInJhZGlvXCIsIFwiY2hlY2tib3hcIl0uaW5kZXhPZih0aGlzLnR5cGUpICE9PSAtMSkge1xuXHRcdFx0XHRyZXR1cm4gYCR7dGhpcy52YWx1ZX1gID09PSBgJHtjdXJyZW50fWAgPyBcInRydWVcIiA6IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHRoaXMgaW5zdGFuY2VvZiBIVE1MT3B0aW9uRWxlbWVudCkge1xuXHRcdFx0aWYgKGlzQXJyYXkoY3VycmVudCkgJiYgY3VycmVudC5pbmRleE9mKHRoaXMudmFsdWUpICE9PSAtMSkge1xuXHRcdFx0XHRyZXR1cm4gXCJ0cnVlXCI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IHN5bWJvbCA9IFN5bWJvbChcIkBzY2h1a2FpL21vbnN0ZXIvdXBkYXRlckBARXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqIEB0aGlzIFVwZGF0ZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgYmluZCBhcmd1bWVudCBtdXN0IHN0YXJ0IGFzIGEgdmFsdWUgd2l0aCBhIHBhdGhcbiAqL1xuZnVuY3Rpb24gZ2V0Q29udHJvbEV2ZW50SGFuZGxlcigpIHtcblx0aWYgKHRoaXNbc3ltYm9sXSkge1xuXHRcdHJldHVybiB0aGlzW3N5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aC5cblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIG9iamVjdFxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1tzeW1ib2xdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KGV2ZW50LCBBVFRSSUJVVEVfVVBEQVRFUl9CSU5EKTtcblxuXHRcdGlmIChlbGVtZW50ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRyZXRyaWV2ZUFuZFNldFZhbHVlLmNhbGwodGhpcywgZWxlbWVudCk7XG5cdH07XG5cblx0cmV0dXJuIHRoaXNbc3ltYm9sXTtcbn1cblxuLyoqXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGJpbmQgYXJndW1lbnQgbXVzdCBzdGFydCBhcyBhIHZhbHVlIHdpdGggYSBwYXRoXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHZvaWRcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcmV0cmlldmVBbmRTZXRWYWx1ZShlbGVtZW50KSB7XG5cdGNvbnN0IHBhdGhmaW5kZXIgPSBuZXcgUGF0aGZpbmRlcih0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0LmdldFN1YmplY3QoKSk7XG5cblx0bGV0IHBhdGggPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9CSU5EKTtcblx0aWYgKHBhdGggPT09IG51bGwpXG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGJpbmQgYXJndW1lbnQgbXVzdCBzdGFydCBhcyBhIHZhbHVlIHdpdGggYSBwYXRoXCIpO1xuXG5cdGlmIChwYXRoLmluZGV4T2YoXCJwYXRoOlwiKSAhPT0gMCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aFwiKTtcblx0fVxuXG5cdHBhdGggPSBwYXRoLnN1YnN0cmluZyg1KTsgLy8gcmVtb3ZlIHBhdGg6IGZyb20gdGhlIHN0cmluZ1xuXG5cdGxldCB2YWx1ZTtcblxuXHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdFx0Y2FzZSBcImNoZWNrYm94XCI6XG5cdFx0XHRcdHZhbHVlID0gZWxlbWVudC5jaGVja2VkID8gZWxlbWVudC52YWx1ZSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuXHRcdHZhbHVlID0gZWxlbWVudC52YWx1ZTtcblx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpIHtcblx0XHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdFx0Y2FzZSBcInNlbGVjdC1vbmVcIjpcblx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJzZWxlY3QtbXVsdGlwbGVcIjpcblx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXG5cdFx0XHRcdGxldCBvcHRpb25zID0gZWxlbWVudD8uc2VsZWN0ZWRPcHRpb25zO1xuXHRcdFx0XHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6c2NvcGUgb3B0aW9uOmNoZWNrZWRcIik7XG5cdFx0XHRcdHZhbHVlID0gQXJyYXkuZnJvbShvcHRpb25zKS5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpO1xuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdC8vIHZhbHVlcyBmcm9tIGN1c3RvbSBlbGVtZW50c1xuXHR9IGVsc2UgaWYgKFxuXHRcdChlbGVtZW50Py5jb25zdHJ1Y3Rvcj8ucHJvdG90eXBlICYmXG5cdFx0XHQhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG5cdFx0XHRcdGVsZW1lbnQuY29uc3RydWN0b3IucHJvdG90eXBlLFxuXHRcdFx0XHRcInZhbHVlXCIsXG5cdFx0XHQpPy5bXCJnZXRcIl0pIHx8XG5cdFx0ZWxlbWVudC5oYXNPd25Qcm9wZXJ0eShcInZhbHVlXCIpXG5cdCkge1xuXHRcdHZhbHVlID0gZWxlbWVudD8uW1widmFsdWVcIl07XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgb2JqZWN0XCIpO1xuXHR9XG5cblx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdGNvbnN0IHR5cGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9CSU5EX1RZUEUpO1xuXHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0Y2FzZSBcIm51bWJlclwiOlxuXHRcdFx0Y2FzZSBcImludFwiOlxuXHRcdFx0Y2FzZSBcImZsb2F0XCI6XG5cdFx0XHRjYXNlIFwiaW50ZWdlclwiOlxuXHRcdFx0XHR2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cdFx0XHRcdGlmIChpc05hTih2YWx1ZSkpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiYm9vbGVhblwiOlxuXHRcdFx0Y2FzZSBcImJvb2xcIjpcblx0XHRcdGNhc2UgXCJjaGVja2JveFwiOlxuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlID09PSBcInRydWVcIiB8fCB2YWx1ZSA9PT0gXCIxXCIgfHwgdmFsdWUgPT09IFwib25cIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiYXJyYXlcIjpcblx0XHRcdGNhc2UgXCJsaXN0XCI6XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUuc3BsaXQoXCIsXCIpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJvYmplY3RcIjpcblx0XHRcdGNhc2UgXCJqc29uXCI6XG5cdFx0XHRcdHZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgY29weSA9IGNsb25lKHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0UmVhbFN1YmplY3QoKSk7XG5cdGNvbnN0IHBmID0gbmV3IFBhdGhmaW5kZXIoY29weSk7XG5cdHBmLnNldFZpYShwYXRoLCB2YWx1ZSk7XG5cblx0Y29uc3QgZGlmZlJlc3VsdCA9IGRpZmYoY29weSwgdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRSZWFsU3ViamVjdCgpKTtcblxuXHRpZiAoZGlmZlJlc3VsdC5sZW5ndGggPiAwKSB7XG5cdFx0cGF0aGZpbmRlci5zZXRWaWEocGF0aCwgdmFsdWUpO1xuXHR9XG59XG5cbi8qKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNy4wXG4gKiBAcmV0dXJuIHZvaWRcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJldHJpZXZlRnJvbUJpbmRpbmdzKCkge1xuXHRpZiAodGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudC5tYXRjaGVzKGBbJHtBVFRSSUJVVEVfVVBEQVRFUl9CSU5EfV1gKSkge1xuXHRcdHJldHJpZXZlQW5kU2V0VmFsdWUuY2FsbCh0aGlzLCB0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50KTtcblx0fVxuXG5cdGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudFxuXHRcdC5xdWVyeVNlbGVjdG9yQWxsKGBbJHtBVFRSSUJVVEVfVVBEQVRFUl9CSU5EfV1gKVxuXHRcdC5lbnRyaWVzKCkpIHtcblx0XHRyZXRyaWV2ZUFuZFNldFZhbHVlLmNhbGwodGhpcywgZWxlbWVudCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBwYXJhbSB7b2JqZWN0fSBjaGFuZ2VcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUVsZW1lbnQoY2hhbmdlKSB7XG5cdGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudFxuXHRcdC5xdWVyeVNlbGVjdG9yQWxsKGA6c2NvcGUgWyR7QVRUUklCVVRFX1VQREFURVJfUkVNT1ZFfV1gKVxuXHRcdC5lbnRyaWVzKCkpIHtcblx0XHRlbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBwYXJhbSB7b2JqZWN0fSBjaGFuZ2VcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIHZhbHVlIGlzIG5vdCBpdGVyYWJsZVxuICogQHRocm93cyB7RXJyb3J9IHBpcGVzIGFyZSBub3QgYWxsb3dlZCB3aGVuIGNsb25pbmcgYSBub2RlLlxuICogQHRocm93cyB7RXJyb3J9IG5vIHRlbXBsYXRlIHdhcyBmb3VuZCB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LlxuICogQHRocm93cyB7RXJyb3J9IHRoZSBtYXhpbXVtIGRlcHRoIGZvciB0aGUgcmVjdXJzaW9uIGlzIHJlYWNoZWQuXG4gKiBAdGhpcyBVcGRhdGVyXG4gKi9cbmZ1bmN0aW9uIGluc2VydEVsZW1lbnQoY2hhbmdlKSB7XG5cdGNvbnN0IHN1YmplY3QgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0LmdldFJlYWxTdWJqZWN0KCk7XG5cblx0Y29uc3QgbWVtID0gbmV3IFdlYWtTZXQoKTtcblx0bGV0IHdkID0gMDtcblxuXHRjb25zdCBjb250YWluZXIgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50O1xuXG5cdHdoaWxlICh0cnVlKSB7XG5cdFx0bGV0IGZvdW5kID0gZmFsc2U7XG5cdFx0d2QrKztcblxuXHRcdGNvbnN0IHAgPSBjbG9uZShjaGFuZ2U/LltcInBhdGhcIl0pO1xuXHRcdGlmICghaXNBcnJheShwKSkgcmV0dXJuO1xuXG5cdFx0d2hpbGUgKHAubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgY3VycmVudCA9IHAuam9pbihcIi5cIik7XG5cblx0XHRcdGxldCBpdGVyYXRvciA9IG5ldyBTZXQoKTtcblx0XHRcdGNvbnN0IHF1ZXJ5ID0gYFske0FUVFJJQlVURV9VUERBVEVSX0lOU0VSVH0qPVwicGF0aDoke2N1cnJlbnR9XCJdYDtcblxuXHRcdFx0Y29uc3QgZSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KTtcblxuXHRcdFx0aWYgKGUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRpdGVyYXRvciA9IG5ldyBTZXQoWy4uLmVdKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNvbnRhaW5lci5tYXRjaGVzKHF1ZXJ5KSkge1xuXHRcdFx0XHRpdGVyYXRvci5hZGQoY29udGFpbmVyKTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCBbLCBjb250YWluZXJFbGVtZW50XSBvZiBpdGVyYXRvci5lbnRyaWVzKCkpIHtcblx0XHRcdFx0aWYgKG1lbS5oYXMoY29udGFpbmVyRWxlbWVudCkpIGNvbnRpbnVlO1xuXHRcdFx0XHRtZW0uYWRkKGNvbnRhaW5lckVsZW1lbnQpO1xuXG5cdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblxuXHRcdFx0XHRjb25zdCBhdHRyaWJ1dGVzID0gY29udGFpbmVyRWxlbWVudC5nZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdFx0QVRUUklCVVRFX1VQREFURVJfSU5TRVJULFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoYXR0cmlidXRlcyA9PT0gbnVsbCkgY29udGludWU7XG5cblx0XHRcdFx0Y29uc3QgZGVmID0gdHJpbVNwYWNlcyhhdHRyaWJ1dGVzKTtcblx0XHRcdFx0Y29uc3QgaSA9IGRlZi5pbmRleE9mKFwiIFwiKTtcblx0XHRcdFx0Y29uc3Qga2V5ID0gdHJpbVNwYWNlcyhkZWYuc3Vic3RyKDAsIGkpKTtcblx0XHRcdFx0Y29uc3QgcmVmUHJlZml4ID0gYCR7a2V5fS1gO1xuXHRcdFx0XHRjb25zdCBjbWQgPSB0cmltU3BhY2VzKGRlZi5zdWJzdHIoaSkpO1xuXG5cdFx0XHRcdC8vIHRoaXMgY2FzZSBpcyBhY3R1YWxseSBleGNsdWRlZCBieSB0aGUgcXVlcnkgYnV0IGlzIG5ldmVydGhlbGVzcyBjaGVja2VkIGFnYWluIGhlcmVcblx0XHRcdFx0aWYgKGNtZC5pbmRleE9mKFwifFwiKSA+IDApIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJwaXBlcyBhcmUgbm90IGFsbG93ZWQgd2hlbiBjbG9uaW5nIGEgbm9kZS5cIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBwaXBlID0gbmV3IFBpcGUoY21kKTtcblx0XHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uY2FsbGJhY2tzLmZvckVhY2goKGYsIG4pID0+IHtcblx0XHRcdFx0XHRwaXBlLnNldENhbGxiYWNrKG4sIGYpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRsZXQgdmFsdWU7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29udGFpbmVyRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSk7XG5cdFx0XHRcdFx0dmFsdWUgPSBwaXBlLnJ1bihzdWJqZWN0KTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGNvbnRhaW5lckVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBkYXRhUGF0aCA9IGNtZC5zcGxpdChcIjpcIikucG9wKCk7XG5cblx0XHRcdFx0bGV0IGluc2VydFBvaW50O1xuXHRcdFx0XHRpZiAoY29udGFpbmVyRWxlbWVudC5oYXNDaGlsZE5vZGVzKCkpIHtcblx0XHRcdFx0XHRpbnNlcnRQb2ludCA9IGNvbnRhaW5lckVsZW1lbnQubGFzdENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFpc0l0ZXJhYmxlKHZhbHVlKSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSB2YWx1ZSBpcyBub3QgaXRlcmFibGVcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBhdmFpbGFibGUgPSBuZXcgU2V0KCk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBbaSwgb2JqXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcblx0XHRcdFx0XHRjb25zdCByZWYgPSByZWZQcmVmaXggKyBpO1xuXHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRQYXRoID0gYCR7ZGF0YVBhdGh9LiR7aX1gO1xuXG5cdFx0XHRcdFx0YXZhaWxhYmxlLmFkZChyZWYpO1xuXHRcdFx0XHRcdGNvbnN0IHJlZkVsZW1lbnQgPSBjb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRcdFx0XHRgWyR7QVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRX09XCIke3JlZn1cIl1gLFxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRpZiAocmVmRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRpbnNlcnRQb2ludCA9IHJlZkVsZW1lbnQ7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRhcHBlbmROZXdEb2N1bWVudEZyYWdtZW50KGNvbnRhaW5lckVsZW1lbnQsIGtleSwgcmVmLCBjdXJyZW50UGF0aCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBub2RlcyA9IGNvbnRhaW5lckVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcblx0XHRcdFx0XHRgWyR7QVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRX0qPVwiJHtyZWZQcmVmaXh9XCJdYCxcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IFssIG5vZGVdIG9mIE9iamVjdC5lbnRyaWVzKG5vZGVzKSkge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdCFhdmFpbGFibGUuaGFzKFxuXHRcdFx0XHRcdFx0XHRub2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFKSxcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRhaW5lckVsZW1lbnQucmVtb3ZlQ2hpbGQobm9kZSk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRhaW5lckVsZW1lbnQuc2V0QXR0cmlidXRlKFxuXHRcdFx0XHRcdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdFx0XHRcdFx0YCR7Y29udGFpbmVyRWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSl9LCAke1xuXHRcdFx0XHRcdFx0XHRcdFx0ZS5tZXNzYWdlXG5cdFx0XHRcdFx0XHRcdFx0fWAudHJpbSgpLFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRwLnBvcCgpO1xuXHRcdH1cblxuXHRcdGlmIChmb3VuZCA9PT0gZmFsc2UpIGJyZWFrO1xuXHRcdGlmICh3ZCsrID4gMjAwKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgbWF4aW11bSBkZXB0aCBmb3IgdGhlIHJlY3Vyc2lvbiBpcyByZWFjaGVkLlwiKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWZcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gdGVtcGxhdGUgd2FzIGZvdW5kIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZE5ld0RvY3VtZW50RnJhZ21lbnQoY29udGFpbmVyLCBrZXksIHJlZiwgcGF0aCkge1xuXHRjb25zdCB0ZW1wbGF0ZSA9IGZpbmREb2N1bWVudFRlbXBsYXRlKGtleSwgY29udGFpbmVyKTtcblxuXHRjb25zdCBub2RlcyA9IHRlbXBsYXRlLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblx0Zm9yIChjb25zdCBbLCBub2RlXSBvZiBPYmplY3QuZW50cmllcyhub2Rlcy5jaGlsZE5vZGVzKSkge1xuXHRcdGlmIChub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGFwcGx5UmVjdXJzaXZlKG5vZGUsIGtleSwgcGF0aCk7XG5cdFx0XHRub2RlLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFLCByZWYpO1xuXHRcdH1cblxuXHRcdGNvbnRhaW5lci5hcHBlbmRDaGlsZChub2RlKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEwLjBcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiBhcHBseVJlY3Vyc2l2ZShub2RlLCBrZXksIHBhdGgpIHtcblx0aWYgKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFKSkge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFKTtcblx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKFxuXHRcdFx0XHRBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFLFxuXHRcdFx0XHR2YWx1ZS5yZXBsYWNlQWxsKGBwYXRoOiR7a2V5fWAsIGBwYXRoOiR7cGF0aH1gKSxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMpKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMpO1xuXHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMsXG5cdFx0XHRcdHZhbHVlLnJlcGxhY2VBbGwoYHBhdGg6JHtrZXl9YCwgYHBhdGg6JHtwYXRofWApLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFssIGNoaWxkXSBvZiBPYmplY3QuZW50cmllcyhub2RlLmNoaWxkTm9kZXMpKSB7XG5cdFx0XHRhcHBseVJlY3Vyc2l2ZShjaGlsZCwga2V5LCBwYXRoKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBwYXJhbSB7b2JqZWN0fSBjaGFuZ2VcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAdGhpcyBVcGRhdGVyXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRlbnQoY2hhbmdlKSB7XG5cdGNvbnN0IHN1YmplY3QgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0LmdldFJlYWxTdWJqZWN0KCk7XG5cblx0Y29uc3QgcCA9IGNsb25lKGNoYW5nZT8uW1wicGF0aFwiXSk7XG5cdHJ1blVwZGF0ZUNvbnRlbnQuY2FsbCh0aGlzLCB0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50LCBwLCBzdWJqZWN0KTtcblxuXHRjb25zdCBzbG90cyA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcInNsb3RcIik7XG5cdGlmIChzbG90cy5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBbLCBzbG90XSBvZiBPYmplY3QuZW50cmllcyhzbG90cykpIHtcblx0XHRcdGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXMoc2xvdC5hc3NpZ25lZE5vZGVzKCkpKSB7XG5cdFx0XHRcdHJ1blVwZGF0ZUNvbnRlbnQuY2FsbCh0aGlzLCBlbGVtZW50LCBwLCBzdWJqZWN0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lclxuICogQHBhcmFtIHthcnJheX0gcGFydHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdWJqZWN0XG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiBydW5VcGRhdGVDb250ZW50KGNvbnRhaW5lciwgcGFydHMsIHN1YmplY3QpIHtcblx0aWYgKCFpc0FycmF5KHBhcnRzKSkgcmV0dXJuO1xuXHRpZiAoIShjb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHJldHVybjtcblx0cGFydHMgPSBjbG9uZShwYXJ0cyk7XG5cblx0Y29uc3QgbWVtID0gbmV3IFdlYWtTZXQoKTtcblxuXHR3aGlsZSAocGFydHMubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGN1cnJlbnQgPSBwYXJ0cy5qb2luKFwiLlwiKTtcblx0XHRwYXJ0cy5wb3AoKTtcblxuXHRcdC8vIFVuZm9ydHVuYXRlbHksIHN0YXRpYyBkYXRhIGlzIGFsd2F5cyBjaGFuZ2VkIGFzIHdlbGwsIHNpbmNlIGl0IGlzIG5vdCBwb3NzaWJsZSB0byByZWFjdCB0byBjaGFuZ2VzIGhlcmUuXG5cdFx0Y29uc3QgcXVlcnkgPSBgWyR7QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRX1ePVwicGF0aDoke2N1cnJlbnR9XCJdLCBbJHtBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFfV49XCJzdGF0aWM6XCJdLCBbJHtBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFfV49XCJpMThuOlwiXWA7XG5cdFx0Y29uc3QgZSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGAke3F1ZXJ5fWApO1xuXG5cdFx0Y29uc3QgaXRlcmF0b3IgPSBuZXcgU2V0KFsuLi5lXSk7XG5cblx0XHRpZiAoY29udGFpbmVyLm1hdGNoZXMocXVlcnkpKSB7XG5cdFx0XHRpdGVyYXRvci5hZGQoY29udGFpbmVyKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG5cdFx0ICovXG5cdFx0Zm9yIChjb25zdCBbZWxlbWVudF0gb2YgaXRlcmF0b3IuZW50cmllcygpKSB7XG5cdFx0XHRpZiAobWVtLmhhcyhlbGVtZW50KSkgcmV0dXJuO1xuXHRcdFx0bWVtLmFkZChlbGVtZW50KTtcblxuXHRcdFx0Y29uc3QgYXR0cmlidXRlcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX1JFUExBQ0UpO1xuXHRcdFx0Y29uc3QgY21kID0gdHJpbVNwYWNlcyhhdHRyaWJ1dGVzKTtcblxuXHRcdFx0Y29uc3QgcGlwZSA9IG5ldyBQaXBlKGNtZCk7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5jYWxsYmFja3MuZm9yRWFjaCgoZiwgbikgPT4ge1xuXHRcdFx0XHRwaXBlLnNldENhbGxiYWNrKG4sIGYpO1xuXHRcdFx0fSk7XG5cblx0XHRcdGxldCB2YWx1ZTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UpO1xuXHRcdFx0XHR2YWx1ZSA9IHBpcGUucnVuKHN1YmplY3QpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHR3aGlsZSAoZWxlbWVudC5maXJzdENoaWxkKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5yZW1vdmVDaGlsZChlbGVtZW50LmZpcnN0Q2hpbGQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRlbGVtZW50LmFwcGVuZENoaWxkKHZhbHVlKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKFxuXHRcdFx0XHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFx0XHRcdGAke2VsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UpfSwgJHtcblx0XHRcdFx0XHRcdFx0ZS5tZXNzYWdlXG5cdFx0XHRcdFx0XHR9YC50cmltKCksXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudC5pbm5lckhUTUwgPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAcGFyYW0ge29iamVjdH0gY2hhbmdlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiB1cGRhdGVBdHRyaWJ1dGVzKGNoYW5nZSkge1xuXHRjb25zdCBzdWJqZWN0ID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRSZWFsU3ViamVjdCgpO1xuXHRjb25zdCBwID0gY2xvbmUoY2hhbmdlPy5bXCJwYXRoXCJdKTtcblx0cnVuVXBkYXRlQXR0cmlidXRlcy5jYWxsKHRoaXMsIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQsIHAsIHN1YmplY3QpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXJcbiAqIEBwYXJhbSB7YXJyYXl9IHBhcnRzXG4gKiBAcGFyYW0ge29iamVjdH0gc3ViamVjdFxuICogQHJldHVybiB7dm9pZH1cbiAqIEB0aGlzIFVwZGF0ZXJcbiAqL1xuZnVuY3Rpb24gcnVuVXBkYXRlQXR0cmlidXRlcyhjb250YWluZXIsIHBhcnRzLCBzdWJqZWN0KSB7XG5cdGlmICghaXNBcnJheShwYXJ0cykpIHJldHVybjtcblx0cGFydHMgPSBjbG9uZShwYXJ0cyk7XG5cblx0Y29uc3QgbWVtID0gbmV3IFdlYWtTZXQoKTtcblxuXHR3aGlsZSAocGFydHMubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGN1cnJlbnQgPSBwYXJ0cy5qb2luKFwiLlwiKTtcblx0XHRwYXJ0cy5wb3AoKTtcblxuXHRcdGxldCBpdGVyYXRvciA9IG5ldyBTZXQoKTtcblxuXHRcdGNvbnN0IHF1ZXJ5ID0gYFske0FUVFJJQlVURV9VUERBVEVSX1NFTEVDVF9USElTfV1bJHtBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTfV0sIFske0FUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVN9Kj1cInBhdGg6JHtjdXJyZW50fVwiXSwgWyR7QVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFU31ePVwic3RhdGljOlwiXSwgWyR7QVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFU31ePVwiaTE4bjpcIl1gO1xuXG5cdFx0Y29uc3QgZSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KTtcblxuXHRcdGlmIChlLmxlbmd0aCA+IDApIHtcblx0XHRcdGl0ZXJhdG9yID0gbmV3IFNldChbLi4uZV0pO1xuXHRcdH1cblxuXHRcdGlmIChjb250YWluZXIubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdGl0ZXJhdG9yLmFkZChjb250YWluZXIpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgW2VsZW1lbnRdIG9mIGl0ZXJhdG9yLmVudHJpZXMoKSkge1xuXHRcdFx0aWYgKG1lbS5oYXMoZWxlbWVudCkpIHJldHVybjtcblx0XHRcdG1lbS5hZGQoZWxlbWVudCk7XG5cblx0XHRcdC8vIHRoaXMgY2FzZSBvY2N1cnMgd2hlbiB0aGUgQVRUUklCVVRFX1VQREFURVJfU0VMRUNUX1RISVMgYXR0cmlidXRlIGlzIHNldFxuXHRcdFx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTKSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgYXR0cmlidXRlcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMpO1xuXG5cdFx0XHRmb3IgKGxldCBbLCBkZWZdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMuc3BsaXQoXCIsXCIpKSkge1xuXHRcdFx0XHRkZWYgPSB0cmltU3BhY2VzKGRlZik7XG5cdFx0XHRcdGNvbnN0IGkgPSBkZWYuaW5kZXhPZihcIiBcIik7XG5cdFx0XHRcdGNvbnN0IG5hbWUgPSB0cmltU3BhY2VzKGRlZi5zdWJzdHIoMCwgaSkpO1xuXHRcdFx0XHRjb25zdCBjbWQgPSB0cmltU3BhY2VzKGRlZi5zdWJzdHIoaSkpO1xuXG5cdFx0XHRcdGNvbnN0IHBpcGUgPSBuZXcgUGlwZShjbWQpO1xuXG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrcy5mb3JFYWNoKChmLCBuKSA9PiB7XG5cdFx0XHRcdFx0cGlwZS5zZXRDYWxsYmFjayhuLCBmLCBlbGVtZW50KTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0bGV0IHZhbHVlO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UpO1xuXHRcdFx0XHRcdHZhbHVlID0gcGlwZS5ydW4oc3ViamVjdCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblx0XHRcdFx0fSBlbHNlIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIHtcblx0XHRcdFx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRoYW5kbGVJbnB1dENvbnRyb2xBdHRyaWJ1dGVVcGRhdGUuY2FsbCh0aGlzLCBlbGVtZW50LCBuYW1lLCB2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8Kn0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcnx1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQHRoaXMgVXBkYXRlclxuICovXG5cbmZ1bmN0aW9uIGhhbmRsZUlucHV0Q29udHJvbEF0dHJpYnV0ZVVwZGF0ZShlbGVtZW50LCBuYW1lLCB2YWx1ZSkge1xuXHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50KSB7XG5cdFx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRcdGNhc2UgXCJzZWxlY3QtbXVsdGlwbGVcIjpcblx0XHRcdFx0Zm9yIChjb25zdCBbaW5kZXgsIG9wdF0gb2YgT2JqZWN0LmVudHJpZXMoZWxlbWVudC5vcHRpb25zKSkge1xuXHRcdFx0XHRcdGlmICh2YWx1ZS5pbmRleE9mKG9wdC52YWx1ZSkgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRvcHQuc2VsZWN0ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvcHQuc2VsZWN0ZWQgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJzZWxlY3Qtb25lXCI6XG5cdFx0XHRcdC8vIE9ubHkgb25lIHZhbHVlIG1heSBiZSBzZWxlY3RlZFxuXG5cdFx0XHRcdGZvciAoY29uc3QgW2luZGV4LCBvcHRdIG9mIE9iamVjdC5lbnRyaWVzKGVsZW1lbnQub3B0aW9ucykpIHtcblx0XHRcdFx0XHRpZiAob3B0LnZhbHVlID09PSB2YWx1ZSkge1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zZWxlY3RlZEluZGV4ID0gaW5kZXg7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdFx0Y2FzZSBcInJhZGlvXCI6XG5cdFx0XHRcdGlmIChuYW1lID09PSBcImNoZWNrZWRcIikge1xuXHRcdFx0XHRcdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50LmNoZWNrZWQgPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50LmNoZWNrZWQgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcImNoZWNrYm94XCI6XG5cdFx0XHRcdGlmIChuYW1lID09PSBcImNoZWNrZWRcIikge1xuXHRcdFx0XHRcdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50LmNoZWNrZWQgPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50LmNoZWNrZWQgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJ0ZXh0XCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAobmFtZSA9PT0gXCJ2YWx1ZVwiKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC52YWx1ZSA9IHZhbHVlID09PSB1bmRlZmluZWQgPyBcIlwiIDogdmFsdWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcblx0XHRpZiAobmFtZSA9PT0gXCJ2YWx1ZVwiKSB7XG5cdFx0XHRlbGVtZW50LnZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiB2YWx1ZTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge05vZGVMaXN0fEhUTUxFbGVtZW50fFNldDxIVE1MRWxlbWVudD59IGVsZW1lbnRzXG4gKiBAcGFyYW0ge1N5bWJvbH0gc3ltYm9sXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtQcm9taXNlW119XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIzLjBcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7VHlwZUVycm9yfSBlbGVtZW50cyBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgTm9kZUxpc3QsIEhUTUxFbGVtZW50IG9yIFNldFxuICogQHRocm93cyB7VHlwZUVycm9yfSB0aGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24gaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHN5bWJvbCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFN5bWJvbFxuICovXG5mdW5jdGlvbiBhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudChlbGVtZW50cywgc3ltYm9sLCBvYmplY3QpIHtcblx0aWYgKCEodGhpcyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRcInRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFwiLFxuXHRcdCk7XG5cdH1cblxuXHRpZiAoISh0eXBlb2Ygc3ltYm9sID09PSBcInN5bWJvbFwiKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJzeW1ib2wgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBTeW1ib2xcIik7XG5cdH1cblxuXHRjb25zdCB1cGRhdGVycyA9IG5ldyBTZXQoKTtcblxuXHRpZiAoZWxlbWVudHMgaW5zdGFuY2VvZiBOb2RlTGlzdCkge1xuXHRcdGVsZW1lbnRzID0gbmV3IFNldChbLi4uZWxlbWVudHNdKTtcblx0fSBlbHNlIGlmIChlbGVtZW50cyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0ZWxlbWVudHMgPSBuZXcgU2V0KFtlbGVtZW50c10pO1xuXHR9IGVsc2UgaWYgKGVsZW1lbnRzIGluc3RhbmNlb2YgU2V0KSB7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdGBlbGVtZW50cyBpcyBub3QgYSB2YWxpZCB0eXBlLiAoYWN0dWFsOiAke3R5cGVvZiBlbGVtZW50c30pYCxcblx0XHQpO1xuXHR9XG5cblx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0bGV0IHVwZGF0ZXJDYWxsYmFja3MgPSBbXVxuXHRjb25zdCBjYiA9IHRoaXM/Llt1cGRhdGVyVHJhbnNmb3JtZXJNZXRob2RzU3ltYm9sXVxuXHRpZiAodGhpcyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmICh0eXBlb2YgY2IgPT09IFwiZnVuY3Rpb25cIikpIHtcblx0XHRcblx0XHRsZXQgY2FsbGJhY2tzID0gY2IoKTtcblx0XHRpZiAodHlwZW9mIGNhbGxiYWNrcyA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0Zm9yIChjb25zdCBbbmFtZSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGNhbGxiYWNrcykpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdFx0dXBkYXRlckNhbGxiYWNrcy5wdXNoKFtuYW1lLCBjYWxsYmFja10pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGBvblVwZGF0ZXJQaXBlQ2FsbGJhY2tzOiAke25hbWV9IGlzIG5vdCBhIGZ1bmN0aW9uYCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYG9uVXBkYXRlclBpcGVDYWxsYmFja3MgZG8gbm90IHJldHVybiBhbiBvYmplY3Qgd2l0aCBmdW5jdGlvbnNgKTtcblx0XHR9XG5cdH1cblxuXHRlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG5cdFx0XG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgcmV0dXJuO1xuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgdSA9IG5ldyBVcGRhdGVyKGVsZW1lbnQsIG9iamVjdCk7XG5cdFx0dXBkYXRlcnMuYWRkKHUpO1xuXHRcdFxuXHRcdGlmICh1cGRhdGVyQ2FsbGJhY2tzLmxlbmd0aCA+IDApIHtcblx0XHRcdGZvciAoY29uc3QgW25hbWUsIGNhbGxiYWNrXSBvZiB1cGRhdGVyQ2FsbGJhY2tzKSB7XG5cdFx0XHRcdHUuc2V0Q2FsbGJhY2sobmFtZSwgY2FsbGJhY2spO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJlc3VsdC5wdXNoKFxuXHRcdFx0dS5ydW4oKS50aGVuKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHUuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9KTtcblxuXHRpZiAodXBkYXRlcnMuc2l6ZSA+IDApIHtcblx0XHRhZGRUb09iamVjdExpbmsodGhpcywgc3ltYm9sLCB1cGRhdGVycyk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuIiwgImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IGdldFNsb3R0ZWRFbGVtZW50cywgZ2V0U2xvdHRlZE5vZGVzIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfHVuZGVmaW5lZH0gcXVlcnlcbiAqIEBwYXJhbSB7U3RyaW5nfHVuZGVmaW5lZHxudWxsfSBuYW1lIG5hbWUgb2YgdGhlIHNsb3QgKGlmIHRoZSBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLCBhbGwgc2xvdHMgYXJlIHNlYXJjaGVkLCBpZiB0aGUgcGFyYW1ldGVyIGhhcyB0aGUgdmFsdWUgbnVsbCwgYWxsIHNsb3RzIHdpdGhvdXQgYSBuYW1lIGFyZSBzZWFyY2hlZC4gaWYgYSBzdHJpbmcgaXMgc3BlY2lmaWVkLCB0aGUgc2xvdHMgd2l0aCB0aGlzIG5hbWUgYXJlIHNlYXJjaGVkLilcbiAqIEByZXR1cm4geyp9XG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjMzLjBcbiAqIEB0aHJvd3Mge0Vycm9yfSBxdWVyeSBtdXN0IGJlIGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldFNsb3R0ZWROb2RlcyhxdWVyeSwgbmFtZSkge1xuXHRjb25zdCByZXN1bHQgPSBuZXcgU2V0KCk7XG5cblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0bGV0IHNlbGVjdG9yID0gXCJzbG90XCI7XG5cdGlmIChuYW1lICE9PSB1bmRlZmluZWQpIHtcblx0XHRpZiAobmFtZSA9PT0gbnVsbCkge1xuXHRcdFx0c2VsZWN0b3IgKz0gXCI6bm90KFtuYW1lXSlcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZWN0b3IgKz0gYFtuYW1lPSR7dmFsaWRhdGVTdHJpbmcobmFtZSl9XWA7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc2xvdHMgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG5cblx0Zm9yIChjb25zdCBbLCBzbG90XSBvZiBPYmplY3QuZW50cmllcyhzbG90cykpIHtcblx0XHRzbG90LmFzc2lnbmVkTm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG5cdFx0XHRpZiAobm9kZSA9PT0gbnVsbCB8fCBub2RlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNTdHJpbmcocXVlcnkpKSB7XG5cdFx0XHRcdG5vZGUucXVlcnlTZWxlY3RvckFsbChxdWVyeSkuZm9yRWFjaChmdW5jdGlvbiAobikge1xuXHRcdFx0XHRcdHJlc3VsdC5hZGQobik7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChub2RlLm1hdGNoZXMocXVlcnkpKSB7XG5cdFx0XHRcdFx0cmVzdWx0LmFkZChub2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChxdWVyeSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInF1ZXJ5IG11c3QgYmUgYSBzdHJpbmdcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXN1bHQuYWRkKG5vZGUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtTdHJpbmd8dW5kZWZpbmVkfSBxdWVyeVxuICogQHBhcmFtIHtTdHJpbmd8dW5kZWZpbmVkfG51bGx9IG5hbWUgbmFtZSBvZiB0aGUgc2xvdCAoaWYgdGhlIHBhcmFtZXRlciBpcyB1bmRlZmluZWQsIGFsbCBzbG90cyBhcmUgc2VhcmNoZWQsIGlmIHRoZSBwYXJhbWV0ZXIgaGFzIHRoZSB2YWx1ZSBudWxsLCBhbGwgc2xvdHMgd2l0aG91dCBhIG5hbWUgYXJlIHNlYXJjaGVkLiBpZiBhIHN0cmluZyBpcyBzcGVjaWZpZWQsIHRoZSBzbG90cyB3aXRoIHRoaXMgbmFtZSBhcmUgc2VhcmNoZWQuKVxuICogQHJldHVybiB7Kn1cbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjMuMFxuICogQHRocm93cyB7RXJyb3J9IHF1ZXJ5IG11c3QgYmUgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0U2xvdHRlZEVsZW1lbnRzKHF1ZXJ5LCBuYW1lKSB7XG5cdGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQoKTtcblxuXHRpZiAoISh0aGlzLnNoYWRvd1Jvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290KSkge1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRsZXQgc2VsZWN0b3IgPSBcInNsb3RcIjtcblx0aWYgKG5hbWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChuYW1lID09PSBudWxsKSB7XG5cdFx0XHRzZWxlY3RvciArPSBcIjpub3QoW25hbWVdKVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZWxlY3RvciArPSBgW25hbWU9JHt2YWxpZGF0ZVN0cmluZyhuYW1lKX1dYDtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBzbG90cyA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcblxuXHRmb3IgKGNvbnN0IFssIHNsb3RdIG9mIE9iamVjdC5lbnRyaWVzKHNsb3RzKSkge1xuXHRcdHNsb3QuYXNzaWduZWRFbGVtZW50cygpLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcblx0XHRcdGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHJldHVybjtcblxuXHRcdFx0aWYgKGlzU3RyaW5nKHF1ZXJ5KSkge1xuXHRcdFx0XHRub2RlLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpLmZvckVhY2goZnVuY3Rpb24gKG4pIHtcblx0XHRcdFx0XHRyZXN1bHQuYWRkKG4pO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAobm9kZS5tYXRjaGVzKHF1ZXJ5KSkge1xuXHRcdFx0XHRcdHJlc3VsdC5hZGQobm9kZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAocXVlcnkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJxdWVyeSBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVzdWx0LmFkZChub2RlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5leHBvcnQgeyBleHRyYWN0S2V5cyB9O1xuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBrZXlzIGZyb20gdGhlIGdpdmVuIG9iamVjdCBhbmQgcmV0dXJucyBhIG1hcCB3aXRoIHRoZSBrZXlzIGFuZCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlQcmVmaXhcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlTZXBhcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVNlcGFyYXRvclxuICogQHJldHVybnMge01hcDxhbnksIGFueT59XG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RLZXlzKFxuXHRvYmosXG5cdGtleVByZWZpeCA9IFwiXCIsXG5cdGtleVNlcGFyYXRvciA9IFwiLVwiLFxuXHR2YWx1ZVNlcGFyYXRvciA9IFwiLlwiLFxuKSB7XG5cdGNvbnN0IHJlc3VsdE1hcCA9IG5ldyBNYXAoKTtcblxuXHRmdW5jdGlvbiBoZWxwZXIoY3VycmVudE9iaiwgY3VycmVudEtleVByZWZpeCwgY3VycmVudFZhbHVlUHJlZml4KSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gY3VycmVudE9iaikge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRjdXJyZW50T2JqW2tleV0gIT09IG51bGwgJiZcblx0XHRcdFx0dHlwZW9mIGN1cnJlbnRPYmpba2V5XSA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdFx0XHQhQXJyYXkuaXNBcnJheShjdXJyZW50T2JqW2tleV0pXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgbmV3S2V5UHJlZml4ID0gY3VycmVudEtleVByZWZpeFxuXHRcdFx0XHRcdD8gY3VycmVudEtleVByZWZpeCArIGtleVNlcGFyYXRvciArIGtleS50b0xvd2VyQ2FzZSgpXG5cdFx0XHRcdFx0OiBrZXkudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0Y29uc3QgbmV3VmFsdWVQcmVmaXggPSBjdXJyZW50VmFsdWVQcmVmaXhcblx0XHRcdFx0XHQ/IGN1cnJlbnRWYWx1ZVByZWZpeCArIHZhbHVlU2VwYXJhdG9yICsga2V5XG5cdFx0XHRcdFx0OiBrZXk7XG5cdFx0XHRcdGhlbHBlcihjdXJyZW50T2JqW2tleV0sIG5ld0tleVByZWZpeCwgbmV3VmFsdWVQcmVmaXgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZmluYWxLZXkgPSBjdXJyZW50S2V5UHJlZml4XG5cdFx0XHRcdFx0PyBjdXJyZW50S2V5UHJlZml4ICsga2V5U2VwYXJhdG9yICsga2V5LnRvTG93ZXJDYXNlKClcblx0XHRcdFx0XHQ6IGtleS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRjb25zdCBmaW5hbFZhbHVlID0gY3VycmVudFZhbHVlUHJlZml4XG5cdFx0XHRcdFx0PyBjdXJyZW50VmFsdWVQcmVmaXggKyB2YWx1ZVNlcGFyYXRvciArIGtleVxuXHRcdFx0XHRcdDoga2V5O1xuXHRcdFx0XHRyZXN1bHRNYXAuc2V0KGZpbmFsS2V5LCBmaW5hbFZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRoZWxwZXIob2JqLCBrZXlQcmVmaXgsIGtleVByZWZpeCk7XG5cdHJldHVybiByZXN1bHRNYXA7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uLy4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCB9IGZyb20gXCIuLi9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgZXh0cmFjdEtleXMgfSBmcm9tIFwiLi9leHRyYWN0LWtleXMubWpzXCI7XG5cbmV4cG9ydCB7IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMgfTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyB0aGUgZ2l2ZW4gb3B0aW9ucyBvYmplY3QgYmFzZWQgb24gdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGN1cnJlbnQgRE9NIGVsZW1lbnQuXG4gKiBUaGUgZnVuY3Rpb24gbG9va3MgZm9yIGF0dHJpYnV0ZXMgd2l0aCB0aGUgcHJlZml4ICdkYXRhLW1vbnN0ZXItb3B0aW9uLScsIGFuZCBtYXBzIHRoZW0gdG9cbiAqIHByb3BlcnRpZXMgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LiBJdCByZXBsYWNlcyB0aGUgZGFzaGVzIHdpdGggZG90cyB0byBmb3JtIHRoZSBwcm9wZXJ0eSBwYXRoLlxuICogRm9yIGV4YW1wbGUsIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tdXJsJyBtYXBzIHRvIHRoZSAndXJsJyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKlxuICogV2l0aCB0aGUgbWFwcGluZyBwYXJhbWV0ZXIsIHRoZSBhdHRyaWJ1dGUgdmFsdWUgY2FuIGJlIG1hcHBlZCB0byBhIGRpZmZlcmVudCB2YWx1ZS5cbiAqIEZvciBleGFtcGxlLCB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLWZvbycgbWFwcyB0byB0aGUgJ2JhcicgcHJvcGVydHkgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICpcbiAqIFRoZSBtYXBwaW5nIG9iamVjdCB3b3VsZCBsb29rIGxpa2UgdGhpczpcbiAqIHtcbiAqICAgICdmb28nOiAodmFsdWUpID0+IHZhbHVlICsgJ2JhcidcbiAqICAgIC8vIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLWZvbycgaXMgYXBwZW5kZWQgd2l0aCAnYmFyJ1xuICogICAgLy8gYW5kIGFzc2lnbmVkIHRvIHRoZSAnYmFyJyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKiAgICAvLyBlLmcuIDxkaXYgZGF0YS1tb25zdGVyLW9wdGlvbi1mb289XCJmb29cIj48L2Rpdj5cbiAqICAgICdiYXIuYmF6JzogKHZhbHVlKSA9PiB2YWx1ZSArICdiYXInXG4gKiAgICAvLyB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi1iYXItYmF6JyBpcyBhcHBlbmRlZCB3aXRoICdiYXInXG4gKiAgICAvLyBhbmQgYXNzaWduZWQgdG8gdGhlICdiYXIuYmF6JyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKiAgICAvLyBlLmcuIDxkaXYgZGF0YS1tb25zdGVyLW9wdGlvbi1iYXItYmF6PVwiZm9vXCI+PC9kaXY+XG4gKiB9XG4gKlxuICogQHNpbmNlIDMuMzguMFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFRoZSBET00gZWxlbWVudCB0byBiZSB1c2VkIGFzIHRoZSBzb3VyY2Ugb2YgdGhlIGF0dHJpYnV0ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCB0byBiZSBpbml0aWFsaXplZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXBwaW5nIC0gQSBtYXBwaW5nIGJldHdlZW4gdGhlIGF0dHJpYnV0ZSB2YWx1ZSBhbmQgdGhlIHByb3BlcnR5IHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeCAtIFRoZSBwcmVmaXggb2YgdGhlIGF0dHJpYnV0ZXMgdG8gYmUgY29uc2lkZXJlZC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IC0gVGhlIGluaXRpYWxpemVkIG9wdGlvbnMgb2JqZWN0LlxuICogQHRoaXMgSFRNTEVsZW1lbnQgLSBUaGUgY29udGV4dCBvZiB0aGUgRE9NIGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoXG5cdGVsZW1lbnQsXG5cdG9wdGlvbnMsXG5cdG1hcHBpbmcgPSB7fSxcblx0cHJlZml4ID0gXCJkYXRhLW1vbnN0ZXItb3B0aW9uLVwiLFxuKSB7XG5cdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHJldHVybiBvcHRpb25zO1xuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlcygpKSByZXR1cm4gb3B0aW9ucztcblxuXHRjb25zdCBrZXlNYXAgPSBleHRyYWN0S2V5cyhvcHRpb25zKTtcblx0Y29uc3QgZmluZGVyID0gbmV3IFBhdGhmaW5kZXIob3B0aW9ucyk7XG5cblx0ZWxlbWVudC5nZXRBdHRyaWJ1dGVOYW1lcygpLmZvckVhY2goKG5hbWUpID0+IHtcblx0XHRpZiAoIW5hbWUuc3RhcnRzV2l0aChwcmVmaXgpKSByZXR1cm47XG5cblx0XHQvLyBjaGVjayBpZiB0aGUgYXR0cmlidXRlIG5hbWUgaXMgYSB2YWxpZCBvcHRpb24uXG5cdFx0Ly8gdGhlIG1hcHBpbmcgYmV0d2VlbiB0aGUgYXR0cmlidXRlIGlzIHNpbXBsZS4gVGhlIGRhc2ggaXMgcmVwbGFjZWQgYnkgYSBkb3QuXG5cdFx0Ly8gZS5nLiBkYXRhLW1vbnN0ZXItdXJsID0+IHVybFxuXHRcdGNvbnN0IG9wdGlvbk5hbWUgPSBrZXlNYXAuZ2V0KG5hbWUuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkpO1xuXHRcdGlmICghZmluZGVyLmV4aXN0cyhvcHRpb25OYW1lKSkgcmV0dXJuO1xuXG5cdFx0aWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKG5hbWUpKSB7XG5cdFx0XHRsZXQgdmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lKTtcblx0XHRcdGlmIChcblx0XHRcdFx0bWFwcGluZy5oYXNPd25Qcm9wZXJ0eShvcHRpb25OYW1lKSAmJlxuXHRcdFx0XHRpc0Z1bmN0aW9uKG1hcHBpbmdbb3B0aW9uTmFtZV0pXG5cdFx0XHQpIHtcblx0XHRcdFx0dmFsdWUgPSBtYXBwaW5nW29wdGlvbk5hbWVdKHZhbHVlKTtcblx0XHRcdH1cblxuXHRcdFx0bGV0IG9wdGlvblZhbHVlID0gZmluZGVyLmdldFZpYShvcHRpb25OYW1lKTtcblx0XHRcdGlmIChvcHRpb25WYWx1ZSA9PT0gbnVsbCB8fCBvcHRpb25WYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdG9wdGlvblZhbHVlID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHR5cGVPZk9wdGlvblZhbHVlID0gdHlwZW9mIG9wdGlvblZhbHVlO1xuXHRcdFx0aWYgKG9wdGlvblZhbHVlID09PSBudWxsIHx8IG9wdGlvblZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dmFsdWUgPSBudWxsO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlT2ZPcHRpb25WYWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZSA9PT0gXCJ0cnVlXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVPZk9wdGlvblZhbHVlID09PSBcIm51bWJlclwiKSB7XG5cdFx0XHRcdHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAodHlwZU9mT3B0aW9uVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0dmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlT2ZPcHRpb25WYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHR2YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRmaW5kZXIuc2V0VmlhKG9wdGlvbk5hbWUsIHZhbHVlKTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBvcHRpb25zO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi8uLi9kYXRhL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2wgfSBmcm9tIFwiLi4vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGV4dHJhY3RLZXlzIH0gZnJvbSBcIi4vZXh0cmFjdC1rZXlzLm1qc1wiO1xuXG5leHBvcnQgeyBzZXRPcHRpb25Gcm9tQXR0cmlidXRlIH07XG5cbi8qKlxuICogU2V0IHRoZSBnaXZlbiBvcHRpb25zIG9iamVjdCBiYXNlZCBvbiB0aGUgYXR0cmlidXRlcyBvZiB0aGUgY3VycmVudCBET00gZWxlbWVudC5cbiAqIFRoZSBmdW5jdGlvbiBsb29rcyBmb3IgYXR0cmlidXRlcyB3aXRoIHRoZSBwcmVmaXggJ2RhdGEtbW9uc3Rlci1vcHRpb24tJywgYW5kIG1hcHMgdGhlbSB0b1xuICogcHJvcGVydGllcyBpbiB0aGUgb3B0aW9ucyBvYmplY3QuIEl0IHJlcGxhY2VzIHRoZSBkYXNoZXMgd2l0aCBkb3RzIHRvIGZvcm0gdGhlIHByb3BlcnR5IHBhdGguXG4gKiBGb3IgZXhhbXBsZSwgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi11cmwnIG1hcHMgdG8gdGhlICd1cmwnIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqXG4gKiBXaXRoIHRoZSBtYXBwaW5nIHBhcmFtZXRlciwgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBjYW4gYmUgbWFwcGVkIHRvIGEgZGlmZmVyZW50IHZhbHVlLlxuICogRm9yIGV4YW1wbGUsIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tZm9vJyBtYXBzIHRvIHRoZSAnYmFyJyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKlxuICogVGhlIG1hcHBpbmcgb2JqZWN0IHdvdWxkIGxvb2sgbGlrZSB0aGlzOlxuICoge1xuICogICAgJ2Zvbyc6ICh2YWx1ZSkgPT4gdmFsdWUgKyAnYmFyJ1xuICogICAgLy8gdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tZm9vJyBpcyBhcHBlbmRlZCB3aXRoICdiYXInXG4gKiAgICAvLyBhbmQgYXNzaWduZWQgdG8gdGhlICdiYXInIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqICAgIC8vIGUuZy4gPGRpdiBkYXRhLW1vbnN0ZXItb3B0aW9uLWZvbz1cImZvb1wiPjwvZGl2PlxuICogICAgJ2Jhci5iYXonOiAodmFsdWUpID0+IHZhbHVlICsgJ2JhcidcbiAqICAgIC8vIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLWJhci1iYXonIGlzIGFwcGVuZGVkIHdpdGggJ2JhcidcbiAqICAgIC8vIGFuZCBhc3NpZ25lZCB0byB0aGUgJ2Jhci5iYXonIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqICAgIC8vIGUuZy4gPGRpdiBkYXRhLW1vbnN0ZXItb3B0aW9uLWJhci1iYXo9XCJmb29cIj48L2Rpdj5cbiAqIH1cbiAqXG4gKiBAc2luY2UgMy40NS4wXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gVGhlIERPTSBlbGVtZW50IHRvIGJlIHVzZWQgYXMgdGhlIHNvdXJjZSBvZiB0aGUgYXR0cmlidXRlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lIC0gVGhlIGF0dHJpYnV0ZSBvYmplY3QgdG8gYmUgdXNlZCBhcyB0aGUgc291cmNlIG9mIHRoZSBhdHRyaWJ1dGVzLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgdG8gYmUgaW5pdGlhbGl6ZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwcGluZyAtIEEgbWFwcGluZyBiZXR3ZWVuIHRoZSBhdHRyaWJ1dGUgdmFsdWUgYW5kIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXggLSBUaGUgcHJlZml4IG9mIHRoZSBhdHRyaWJ1dGVzIHRvIGJlIGNvbnNpZGVyZWQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSAtIFRoZSBpbml0aWFsaXplZCBvcHRpb25zIG9iamVjdC5cbiAqIEB0aGlzIEhUTUxFbGVtZW50IC0gVGhlIGNvbnRleHQgb2YgdGhlIERPTSBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBzZXRPcHRpb25Gcm9tQXR0cmlidXRlKFxuXHRlbGVtZW50LFxuXHRuYW1lLFxuXHRvcHRpb25zLFxuXHRtYXBwaW5nID0ge30sXG5cdHByZWZpeCA9IFwiZGF0YS1tb25zdGVyLW9wdGlvbi1cIixcbikge1xuXHRcblx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgcmV0dXJuIG9wdGlvbnM7XG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkpIHJldHVybiBvcHRpb25zO1xuXG5cdGNvbnN0IGtleU1hcCA9IGV4dHJhY3RLZXlzKG9wdGlvbnMpO1xuXHRjb25zdCBmaW5kZXIgPSBuZXcgUGF0aGZpbmRlcihvcHRpb25zKTtcblxuXHQvLyBjaGVjayBpZiB0aGUgYXR0cmlidXRlIG5hbWUgaXMgYSB2YWxpZCBvcHRpb24uXG5cdC8vIHRoZSBtYXBwaW5nIGJldHdlZW4gdGhlIGF0dHJpYnV0ZSBpcyBzaW1wbGUuIFRoZSBkYXNoIGlzIHJlcGxhY2VkIGJ5IGEgZG90LlxuXHQvLyBlLmcuIGRhdGEtbW9uc3Rlci11cmwgPT4gdXJsXG5cdGNvbnN0IG9wdGlvbk5hbWUgPSBrZXlNYXAuZ2V0KG5hbWUuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkpO1xuXHRpZiAoIWZpbmRlci5leGlzdHMob3B0aW9uTmFtZSkpIHJldHVybjtcblxuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKG5hbWUpKSB7XG5cdFx0cmV0dXJuIG9wdGlvbnM7XG5cdH1cblxuXHRsZXQgdmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lKTtcblx0aWYgKG1hcHBpbmcuaGFzT3duUHJvcGVydHkob3B0aW9uTmFtZSkgJiYgaXNGdW5jdGlvbihtYXBwaW5nW29wdGlvbk5hbWVdKSkge1xuXHRcdHZhbHVlID0gbWFwcGluZ1tvcHRpb25OYW1lXSh2YWx1ZSk7XG5cdH1cblxuXHRjb25zdCB0eXBlT2ZPcHRpb25WYWx1ZSA9IHR5cGVvZiBmaW5kZXIuZ2V0VmlhKG9wdGlvbk5hbWUpO1xuXHRpZiAodHlwZU9mT3B0aW9uVmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0dmFsdWUgPSB2YWx1ZSA9PT0gXCJ0cnVlXCI7XG5cdH0gZWxzZSBpZiAodHlwZU9mT3B0aW9uVmFsdWUgPT09IFwibnVtYmVyXCIpIHtcblx0XHR2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cdH0gZWxzZSBpZiAodHlwZU9mT3B0aW9uVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHR2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG5cdH0gZWxzZSBpZiAodHlwZU9mT3B0aW9uVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHR2YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUpO1xuXHR9XG5cblx0ZmluZGVyLnNldFZpYShvcHRpb25OYW1lLCB2YWx1ZSk7XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59IFxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHtmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHN9IGZyb20gXCIuL3V0aWwubWpzXCI7XG5pbXBvcnQge2ludGVybmFsU3ltYm9sfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtleHRlbmR9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7UGF0aGZpbmRlcn0gZnJvbSBcIi4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7Rm9ybWF0dGVyfSBmcm9tIFwiLi4vdGV4dC9mb3JtYXR0ZXIubWpzXCI7XG5cbmltcG9ydCB7cGFyc2VEYXRhVVJMfSBmcm9tIFwiLi4vdHlwZXMvZGF0YXVybC5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsT2JqZWN0fSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHtcbiAgICBpc0FycmF5LFxuICAgIGlzRnVuY3Rpb24sXG4gICAgaXNJdGVyYWJsZSxcbiAgICBpc09iamVjdCxcbiAgICBpc1N0cmluZyxcbn0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHtPYnNlcnZlcn0gZnJvbSBcIi4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHtQcm94eU9ic2VydmVyfSBmcm9tIFwiLi4vdHlwZXMvcHJveHlvYnNlcnZlci5tanNcIjtcbmltcG9ydCB7XG4gICAgdmFsaWRhdGVGdW5jdGlvbixcbiAgICB2YWxpZGF0ZUluc3RhbmNlLFxuICAgIHZhbGlkYXRlT2JqZWN0LFxuICAgIHZhbGlkYXRlU3RyaW5nLFxufSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQge2Nsb25lfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7XG4gICAgYWRkQXR0cmlidXRlVG9rZW4sXG4gICAgZ2V0TGlua2VkT2JqZWN0cyxcbiAgICBoYXNPYmplY3RMaW5rLFxufSBmcm9tIFwiLi9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcbiAgICBBVFRSSUJVVEVfRElTQUJMRUQsXG4gICAgQVRUUklCVVRFX0VSUk9STUVTU0FHRSxcbiAgICBBVFRSSUJVVEVfT1BUSU9OUyxcbiAgICBBVFRSSUJVVEVfSU5JVF9DQUxMQkFDSyxcbiAgICBBVFRSSUJVVEVfT1BUSU9OU19TRUxFQ1RPUixcbiAgICBBVFRSSUJVVEVfU0NSSVBUX0hPU1QsXG4gICAgY3VzdG9tRWxlbWVudFVwZGF0ZXJMaW5rU3ltYm9sLFxuICAgIGluaXRDb250cm9sQ2FsbGJhY2tOYW1lLFxufSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge2ZpbmREb2N1bWVudFRlbXBsYXRlLCBUZW1wbGF0ZX0gZnJvbSBcIi4vdGVtcGxhdGUubWpzXCI7XG5pbXBvcnQge2FkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50fSBmcm9tIFwiLi91cGRhdGVyLm1qc1wiO1xuaW1wb3J0IHtpbnN0YW5jZVN5bWJvbH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG4gICAgZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMsXG4gICAgVHJhbnNsYXRpb25zLFxufSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQge2dldFNsb3R0ZWRFbGVtZW50c30gZnJvbSBcIi4vc2xvdHRlZC5tanNcIjtcbmltcG9ydCB7aW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlc30gZnJvbSBcIi4vdXRpbC9pbml0LW9wdGlvbnMtZnJvbS1hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtzZXRPcHRpb25Gcm9tQXR0cmlidXRlfSBmcm9tIFwiLi91dGlsL3NldC1vcHRpb24tZnJvbS1hdHRyaWJ1dGUubWpzXCI7XG5cbmV4cG9ydCB7XG4gICAgQ3VzdG9tRWxlbWVudCxcbiAgICBpbml0TWV0aG9kU3ltYm9sLFxuICAgIGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuICAgIGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sLFxuICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbiAgICBnZXRTbG90dGVkRWxlbWVudHMsXG4gICAgdXBkYXRlclRyYW5zZm9ybWVyTWV0aG9kc1N5bWJvbFxufTtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGluaXRNZXRob2RTeW1ib2wgPSBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEBpbml0TWV0aG9kU3ltYm9sXCIpO1xuXG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYXNzZW1ibGVNZXRob2RTeW1ib2wgPSBTeW1ib2wuZm9yKFxuICAgIFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEBhc3NlbWJsZU1ldGhvZFN5bWJvbFwiLFxuKTtcblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHVwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2wgPSBTeW1ib2wuZm9yKFxuICAgIFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEB1cGRhdGVyVHJhbnNmb3JtZXJNZXRob2RzU3ltYm9sXCIsXG4pO1xuXG4vKipcbiAqIHRoaXMgc3ltYm9sIGhvbGRzIHRoZSBhdHRyaWJ1dGUgb2JzZXJ2ZXIgY2FsbGJhY2tzLiBUaGUga2V5IGlzIHRoZSBhdHRyaWJ1dGUgbmFtZS5cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2wuZm9yKFxuICAgIFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEBhdHRyaWJ1dGVPYnNlcnZlclwiLFxuKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYXR0cmlidXRlTXV0YXRpb25PYnNlcnZlclN5bWJvbCA9IFN5bWJvbChcbiAgICBcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAbXV0YXRpb25PYnNlcnZlclwiLFxuKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdXBkYXRlQ2xvbmVEYXRhU3ltYm9sID0gU3ltYm9sKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEB1cGRhdGVDbG9uZURhdGFcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHNjcmlwdEhvc3RFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic2NyaXB0SG9zdEVsZW1lbnRcIik7XG5cbi8qKlxuICogSFRNTEVsZW1lbnRcbiAqIEBleHRlcm5hbCBIVE1MRWxlbWVudFxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnRcbiAqXG4gKiBAc3RhcnR1bWwgY3VzdG9tZWxlbWVudC1zZXF1ZW5jZWRpYWdyYW0ucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKlxuICogYXV0b251bWJlclxuICpcbiAqIFNjcmlwdCAtPiBET006IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdteS1lbGVtZW50JylcbiAqIERPTSAtPiBDdXN0b21FbGVtZW50OiBjb25zdHJ1Y3RvcigpXG4gKiBDdXN0b21FbGVtZW50IC0+IEN1c3RvbUVsZW1lbnQ6IFtpbml0TWV0aG9kU3ltYm9sXSgpXG4gKlxuICogQ3VzdG9tRWxlbWVudCAtLT4gRE9NOiBFbGVtZW50XG4gKiBET00gLS0+IFNjcmlwdCA6IGVsZW1lbnRcbiAqXG4gKlxuICogU2NyaXB0IC0+IERPTTogZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpLmFwcGVuZChlbGVtZW50KVxuICpcbiAqIERPTSAtPiBDdXN0b21FbGVtZW50IDogY29ubmVjdGVkQ2FsbGJhY2soKVxuICpcbiAqIG5vdGUgcmlnaHQgQ3VzdG9tRWxlbWVudDogaXMgb25seSBjYWxsZWQgYXRcXG50aGUgZmlyc3QgY29ubmVjdGlvblxuICogQ3VzdG9tRWxlbWVudCAtPiBDdXN0b21FbGVtZW50IDogW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpXG4gKlxuICogLi4uIC4uLlxuICpcbiAqIGF1dG9udW1iZXJcbiAqXG4gKiBTY3JpcHQgLT4gRE9NOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLWNvbmZpcm0tYnV0dG9uJykucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtZW50KVxuICogRE9NIC0+IEN1c3RvbUVsZW1lbnQ6IGRpc2Nvbm5lY3RlZENhbGxiYWNrKClcbiAqXG4gKlxuICogQGVuZHVtbFxuICpcbiAqIEBzdGFydHVtbCBjdXN0b21lbGVtZW50LWNsYXNzLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBAZW5kdW1sXG4gKi9cblxuLyoqXG4gKiBUaGUgYEN1c3RvbUVsZW1lbnRgIGNsYXNzIHByb3ZpZGVzIGEgd2F5IHRvIGRlZmluZSBhIG5ldyBIVE1MIGVsZW1lbnQgdXNpbmcgdGhlIHBvd2VyIG9mIEN1c3RvbSBFbGVtZW50cy5cbiAqXG4gKiAqKklNUE9SVEFOVDoqKiBBZnRlciBkZWZpbmluZyBhIGBDdXN0b21FbGVtZW50YCwgdGhlIGByZWdpc3RlckN1c3RvbUVsZW1lbnRgIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgY2xhc3MgbmFtZVxuICogdG8gbWFrZSB0aGUgdGFnIGRlZmluZWQgdmlhIHRoZSBgZ2V0VGFnYCBtZXRob2Qga25vd24gdG8gdGhlIERPTS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgb2JqZWN0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKWAgZnVuY3Rpb24uXG4gKlxuICogIyMgSW50ZXJhY3Rpb25cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL2N1c3RvbWVsZW1lbnQtc2VxdWVuY2VkaWFncmFtLnBuZ1wiPlxuICpcbiAqICMjIFN0eWxpbmdcbiAqXG4gKiBUbyBkaXNwbGF5IGN1c3RvbSBlbGVtZW50cyBvcHRpbWFsbHksIHRoZSBgOmRlZmluZWRgIHBzZXVkby1jbGFzcyBjYW4gYmUgdXNlZC4gVG8gcHJldmVudCBjdXN0b20gZWxlbWVudHMgZnJvbSBiZWluZyBkaXNwbGF5ZWQgYW5kIGZsaWNrZXJpbmcgdW50aWwgdGhlIGNvbnRyb2wgaXMgcmVnaXN0ZXJlZCxcbiAqIGl0IGlzIHJlY29tbWVuZGVkIHRvIGNyZWF0ZSBhIENTUyBkaXJlY3RpdmUuXG4gKlxuICogSW4gdGhlIHNpbXBsZXN0IGNhc2UsIHlvdSBjYW4gc2ltcGx5IGhpZGUgdGhlIGNvbnRyb2w6XG4gKlxuICogYGBgaHRtbFxuICogPHN0eWxlPlxuICogbXktY3VzdG9tLWVsZW1lbnQ6bm90KDpkZWZpbmVkKSB7XG4gKiAgICAgZGlzcGxheTogbm9uZTtcbiAqIH1cbiAqXG4gKiBteS1jdXN0b20tZWxlbWVudDpkZWZpbmVkIHtcbiAqICAgICBkaXNwbGF5OiBmbGV4O1xuICogfVxuICogPC9zdHlsZT5cbiAqIGBgYFxuICpcbiAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gZGlzcGxheSBhIGxvYWRlcjpcbiAqXG4gKiBgYGBjc3NcbiAqIG15LWN1c3RvbS1lbGVtZW50Om5vdCg6ZGVmaW5lZCkge1xuICogICAgIGRpc3BsYXk6IGZsZXg7XG4gKiAgICAgYm94LXNoYWRvdzogMCA0cHggMTBweCAwIHJnYmEoMzMsIDMzLCAzMywgMC4xNSk7XG4gKiAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICogICAgIGhlaWdodDogMjAwcHg7XG4gKiAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICogICAgIG92ZXJmbG93OiBoaWRkZW47XG4gKiB9XG4gKlxuICogbXktY3VzdG9tLWVsZW1lbnQ6bm90KDpkZWZpbmVkKTo6YmVmb3JlIHtcbiAqICAgICBjb250ZW50OiAnJztcbiAqICAgICBkaXNwbGF5OiBibG9jaztcbiAqICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gKiAgICAgbGVmdDogLTE1MHB4O1xuICogICAgIHRvcDogMDtcbiAqICAgICBoZWlnaHQ6IDEwMCU7XG4gKiAgICAgd2lkdGg6IDE1MHB4O1xuICogICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQgMCUsICNFOEU4RTggNTAlLCB0cmFuc3BhcmVudCAxMDAlKTtcbiAqICAgICBhbmltYXRpb246IGxvYWQgMXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpIGluZmluaXRlO1xuICogfVxuICpcbiAqIEBrZXlmcmFtZXMgbG9hZCB7XG4gKiAgICAgZnJvbSB7XG4gKiAgICAgICAgIGxlZnQ6IC0xNTBweDtcbiAqICAgICB9XG4gKiAgICAgdG8ge1xuICogICAgICAgICBsZWZ0OiAxMDAlO1xuICogICAgIH1cbiAqIH1cbiAqXG4gKiBteS1jdXN0b20tZWxlbWVudDpkZWZpbmVkIHtcbiAqICAgICBkaXNwbGF5OiBmbGV4O1xuICogfVxuICogYGBgXG4gKlxuICogTW9yZSBpbmZvcm1hdGlvbiBhYm91dCBDdXN0b20gRWxlbWVudHMgY2FuIGJlIGZvdW5kIGluIHRoZSBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9XZWJfQ29tcG9uZW50cy9Vc2luZ19jdXN0b21fZWxlbWVudHMpLlxuICogQW5kIGluIHRoZSBbSFRNTCBTdGFuZGFyZF0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnRzKSBvciBpbiB0aGUgW1dIQVRXRyBXaWtpXShodHRwczovL3dpa2kud2hhdHdnLm9yZy93aWtpL0N1c3RvbV9FbGVtZW50cykuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2RvbS90aGVtZS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAZXh0ZW5kcyBleHRlcm5hbDpIVE1MRWxlbWVudFxuICogQHN1bW1hcnkgQSBiYXNlIGNsYXNzIGZvciBIVE1MNSBjdXN0b20gY29udHJvbHMuXG4gKi9cbmNsYXNzIEN1c3RvbUVsZW1lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG4gICAgLyoqXG4gICAgICogQSBuZXcgb2JqZWN0IGlzIGNyZWF0ZWQuIEZpcnN0IHRoZSBgaW5pdE9wdGlvbnNgIG1ldGhvZCBpcyBjYWxsZWQuIEhlcmUgdGhlXG4gICAgICogb3B0aW9ucyBjYW4gYmUgZGVmaW5lZCBpbiBkZXJpdmVkIGNsYXNzZXMuIFN1YnNlcXVlbnRseSwgdGhlIHNoYWRvd1Jvb3QgaXMgaW5pdGlhbGl6ZWQuXG4gICAgICpcbiAgICAgKiBJTVBPUlRBTlQ6IEN1c3RvbUNvbnRyb2xzIGluc3RhbmNlcyBhcmUgbm90IGNyZWF0ZWQgdmlhIHRoZSBjb25zdHJ1Y3RvciwgYnV0IGVpdGhlciB2aWEgYSB0YWcgaW4gdGhlIEhUTUwgb3IgdmlhIDxjb2RlPmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKTwvY29kZT4uXG4gICAgICpcbiAgICAgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9wdGlvbnMgYXR0cmlidXRlIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBqc29uIGRlZmluaXRpb24uXG4gICAgICogQHNpbmNlIDEuNy4wXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgbGV0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICBcImFjdGlvbnMuY2xpY2tcIjogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWdnZXI7XG4gICAgICAgICAgICAgICAgICAgIGxldCBhID0gMTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXSA9IHt9O1xuICAgICAgICB0aGlzW2ludGVybmFsU3ltYm9sXSA9IG5ldyBQcm94eU9ic2VydmVyKHtcbiAgICAgICAgICAgIG9wdGlvbnM6IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXModGhpcywgZXh0ZW5kKHt9LCB0aGlzLmRlZmF1bHRzKSwgbWFwcGluZyksXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzW2luaXRNZXRob2RTeW1ib2xdKCk7XG4gICAgICAgIGluaXRPcHRpb25PYnNlcnZlci5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzW3NjcmlwdEhvc3RFbGVtZW50U3ltYm9sXSA9IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuICAgICAqIEByZXR1cm5zIHtzeW1ib2x9XG4gICAgICogQHNpbmNlIDIuMS4wXG4gICAgICovXG4gICAgc3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuICAgICAgICByZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL2N1c3RvbS1lbGVtZW50QEBpbnN0YW5jZVwiKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHdoaWNoIGF0dHJpYnV0ZXMgYXJlIHRvIGJlXG4gICAgICogbW9uaXRvcmVkIGJ5IGBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKWAuIFVuZm9ydHVuYXRlbHksIHRoaXMgbWV0aG9kIGlzIHN0YXRpYy5cbiAgICAgKiBUaGVyZWZvcmUsIHRoZSBgb2JzZXJ2ZWRBdHRyaWJ1dGVzYCBwcm9wZXJ0eSBjYW5ub3QgYmUgY2hhbmdlZCBkdXJpbmcgcnVudGltZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICAgICAqIEBzaW5jZSAxLjE1LjBcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIGF0dHJpYnV0ZVxuICAgICAqIEBwYXJhbSBjYWxsYmFja1xuICAgICAqIEByZXR1cm5zIHtNb25zdGVyLkRPTS5DdXN0b21FbGVtZW50fVxuICAgICAqL1xuICAgIGFkZEF0dHJpYnV0ZU9ic2VydmVyKGF0dHJpYnV0ZSwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFsaWRhdGVGdW5jdGlvbihjYWxsYmFjayk7XG4gICAgICAgIHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW2F0dHJpYnV0ZV0gPSBjYWxsYmFjaztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYXR0cmlidXRlXG4gICAgICogQHJldHVybnMge01vbnN0ZXIuRE9NLkN1c3RvbUVsZW1lbnR9XG4gICAgICovXG4gICAgcmVtb3ZlQXR0cmlidXRlT2JzZXJ2ZXIoYXR0cmlidXRlKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVthdHRyaWJ1dGVdO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGRlZmF1bHRzYCBwcm9wZXJ0eSBkZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgYSBjb250cm9sLiBJZiB5b3Ugd2FudCB0byBvdmVycmlkZSB0aGVzZSxcbiAgICAgKiB5b3UgY2FuIHVzZSB2YXJpb3VzIG1ldGhvZHMsIHdoaWNoIGFyZSBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gYXZhaWxhYmxlIGF0XG4gICAgICoge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZ2VuZG9jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9LlxuICAgICAqXG4gICAgICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgYXJlIGxpc3RlZCBiZWxvdzpcbiAgICAgKlxuICAgICAqIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNoYWRvd1Jvb3QgY2FuIGJlIGZvdW5kIGluIHRoZSBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9hdHRhY2hTaGFkb3cpLFxuICAgICAqIGluIHRoZSBbSFRNTCBTdGFuZGFyZF0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnRzKSBvciBpbiB0aGUgW1dIQVRXRyBXaWtpXShodHRwczovL3dpa2kud2hhdHdnLm9yZy93aWtpL0N1c3RvbV9FbGVtZW50cykuXG4gICAgICpcbiAgICAgKiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0ZW1wbGF0ZSBlbGVtZW50IGNhbiBiZSBmb3VuZCBpbiB0aGUgW01ETiBXZWIgRG9jc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RlbXBsYXRlKS5cbiAgICAgKlxuICAgICAqIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNsb3QgZWxlbWVudCBjYW4gYmUgZm91bmQgaW4gdGhlIFtNRE4gV2ViIERvY3NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zbG90KS5cbiAgICAgKlxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZGlzYWJsZWQ9ZmFsc2UgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGNvbnRyb2wgaXMgZGlzYWJsZWQuIFdoZW4gcHJlc2VudCwgaXQgbWFrZXMgdGhlIGVsZW1lbnQgbm9uLW11dGFibGUsIG5vbi1mb2N1c2FibGUsIGFuZCBub24tc3VibWl0dGFibGUgd2l0aCB0aGUgZm9ybS5cbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gc2hhZG93TW9kZT1vcGVuIFNwZWNpZmllcyB0aGUgbW9kZSBvZiB0aGUgc2hhZG93IHJvb3QuIFdoZW4gc2V0IHRvIGBvcGVuYCwgZWxlbWVudHMgaW4gdGhlIHNoYWRvdyByb290IGFyZSBhY2Nlc3NpYmxlIGZyb20gSmF2YVNjcmlwdCBvdXRzaWRlIHRoZSByb290LCB3aGlsZSBzZXR0aW5nIGl0IHRvIGBjbG9zZWRgIGRlbmllcyBhY2Nlc3MgdG8gdGhlIHJvb3QncyBub2RlcyBmcm9tIEphdmFTY3JpcHQgb3V0c2lkZSBpdC5cbiAgICAgKiBAcHJvcGVydHkge0Jvb2xlYW59IGRlbGVnYXRlc0ZvY3VzPXRydWUgU3BlY2lmaWVzIHRoZSBiZWhhdmlvciBvZiB0aGUgY29udHJvbCB3aXRoIHJlc3BlY3QgdG8gZm9jdXNhYmlsaXR5LiBXaGVuIHNldCB0byBgdHJ1ZWAsIGl0IG1pdGlnYXRlcyBjdXN0b20gZWxlbWVudCBpc3N1ZXMgYXJvdW5kIGZvY3VzYWJpbGl0eS4gV2hlbiBhIG5vbi1mb2N1c2FibGUgcGFydCBvZiB0aGUgc2hhZG93IERPTSBpcyBjbGlja2VkLCB0aGUgZmlyc3QgZm9jdXNhYmxlIHBhcnQgaXMgZ2l2ZW4gZm9jdXMsIGFuZCB0aGUgc2hhZG93IGhvc3QgaXMgZ2l2ZW4gYW55IGF2YWlsYWJsZSA6Zm9jdXMgc3R5bGluZy5cbiAgICAgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFNwZWNpZmllcyB0aGUgdGVtcGxhdGVzIHVzZWQgYnkgdGhlIGNvbnRyb2wuXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluPXVuZGVmaW5lZCBTcGVjaWZpZXMgdGhlIG1haW4gdGVtcGxhdGUgdXNlZCBieSB0aGUgY29udHJvbC5cbiAgICAgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVNYXBwaW5nIFNwZWNpZmllcyB0aGUgbWFwcGluZyBvZiB0ZW1wbGF0ZXMuXG4gICAgICogQHNpbmNlIDEuOC4wXG4gICAgICovXG4gICAgZ2V0IGRlZmF1bHRzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgc2hhZG93TW9kZTogXCJvcGVuXCIsXG4gICAgICAgICAgICBkZWxlZ2F0ZXNGb2N1czogdHJ1ZSxcbiAgICAgICAgICAgIHRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAgIG1haW46IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0ZW1wbGF0ZU1hcHBpbmc6IHt9LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIGxhYmVscyBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBUaGUgbGFiZWxzIGFyZSBkZWZpbmVkIGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAgICAgKiBUaGUga2V5IG9mIHRoZSBsYWJlbCBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSB0cmFuc2xhdGlvbiBmcm9tIHRoZSBkb2N1bWVudC5cbiAgICAgKiBJZiB0aGUgdHJhbnNsYXRpb24gaXMgZGlmZmVyZW50IGZyb20gdGhlIGxhYmVsLCB0aGUgbGFiZWwgaXMgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEJlZm9yZSB5b3UgY2FuIHVzZSB0aGlzIG1ldGhvZCwgeW91IG11c3QgaGF2ZSBsb2FkZWQgdGhlIHRyYW5zbGF0aW9ucy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtNb25zdGVyLkRPTS5DdXN0b21FbGVtZW50fVxuICAgICAqIEB0aHJvd3Mge0Vycm9yfSAgQ2Fubm90IGZpbmQgZWxlbWVudCB3aXRoIHRyYW5zbGF0aW9ucy4gQWRkIGEgdHJhbnNsYXRpb25zIG9iamVjdCB0byB0aGUgZG9jdW1lbnQuXG4gICAgICovXG4gICAgdXBkYXRlSTE4bigpIHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zID0gZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoKTtcbiAgICAgICAgaWYgKCF0cmFuc2xhdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGFiZWxzID0gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHNcIik7XG4gICAgICAgIGlmICghKGlzT2JqZWN0KGxhYmVscykgfHwgaXNJdGVyYWJsZShsYWJlbHMpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBsYWJlbHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZiA9IGxhYmVsc1trZXldO1xuXG4gICAgICAgICAgICBpZiAoaXNTdHJpbmcoZGVmKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSB0cmFuc2xhdGlvbnMuZ2V0VGV4dChrZXksIGRlZik7XG4gICAgICAgICAgICAgICAgaWYgKHRleHQgIT09IGRlZikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE9wdGlvbihgbGFiZWxzLiR7a2V5fWAsIHRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGVmKSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgayBpbiBkZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZCA9IGRlZltrXTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gdHJhbnNsYXRpb25zLmdldFBsdXJhbFJ1bGVUZXh0KGtleSwgaywgZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNTdHJpbmcodGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbGFiZWxzIGRlZmluaXRpb25cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRleHQgIT09IGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9uKGBsYWJlbHMuJHtrZXl9LiR7a31gLCB0ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsYWJlbHMgZGVmaW5pdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGdldFRhZygpYCBtZXRob2QgcmV0dXJucyB0aGUgdGFnIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXN0b20gZWxlbWVudC4gVGhpcyBtZXRob2Qgc2hvdWxkIGJlIG92ZXJ3cml0dGVuXG4gICAgICogYnkgdGhlIGRlcml2ZWQgY2xhc3MuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gY2hlY2sgb24gdGhlIG5hbWUgb2YgdGhlIHRhZyBpbiB0aGlzIGNsYXNzLiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2ZcbiAgICAgKiB0aGUgZGV2ZWxvcGVyIHRvIGFzc2lnbiBhbiBhcHByb3ByaWF0ZSB0YWcgbmFtZS4gSWYgdGhlIG5hbWUgaXMgbm90IHZhbGlkLCB0aGVcbiAgICAgKiBgcmVnaXN0ZXJDdXN0b21FbGVtZW50KClgIG1ldGhvZCB3aWxsIGlzc3VlIGFuIGVycm9yLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jdXN0b20tZWxlbWVudHMuaHRtbCN2YWxpZC1jdXN0b20tZWxlbWVudC1uYW1lXG4gICAgICogQHRocm93cyB7RXJyb3J9IFRoaXMgbWV0aG9kIG11c3QgYmUgb3ZlcnJpZGRlbiBieSB0aGUgZGVyaXZlZCBjbGFzcy5cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSB0YWcgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1c3RvbSBlbGVtZW50LlxuICAgICAqIEBzaW5jZSAxLjcuMFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiVGhlIG1ldGhvZCBgZ2V0VGFnKClgIG11c3QgYmUgb3ZlcnJpZGRlbiBieSB0aGUgZGVyaXZlZCBjbGFzcy5cIixcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGdldENTU1N0eWxlU2hlZXQoKWAgbWV0aG9kIHJldHVybnMgYSBgQ1NTU3R5bGVTaGVldGAgb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgc3R5bGVzIGZvciB0aGUgY3VzdG9tIGVsZW1lbnQuXG4gICAgICogSWYgdGhlIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIGBDU1NTdHlsZVNoZWV0YCBjb25zdHJ1Y3RvciwgdGhlbiBhbiBvYmplY3QgY2FuIGJlIGJ1aWx0IHVzaW5nIHRoZSBwcm92aWRlZCBkZXRvdXIuXG4gICAgICpcbiAgICAgKiBJZiBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZCwgdGhlbiB0aGUgc2hhZG93IHJvb3QgZG9lcyBub3QgcmVjZWl2ZSBhIHN0eWxlc2hlZXQuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHVzYWdlOlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcbiAgICAgKiAgICAgY29uc3Qgc2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuICAgICAqICAgICBzaGVldC5yZXBsYWNlU3luYyhcInAgeyBjb2xvcjogcmVkOyB9XCIpO1xuICAgICAqICAgICByZXR1cm4gc2hlZXQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogSWYgdGhlIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIGBDU1NTdHlsZVNoZWV0YCBjb25zdHJ1Y3RvcixcbiAgICAgKiB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIHdvcmthcm91bmQgdG8gY3JlYXRlIHRoZSBzdHlsZXNoZWV0OlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCBkb2MgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoJ3RpdGxlJyk7XG4gICAgICogbGV0IHN0eWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICAgKiBzdHlsZS5pbm5lckhUTUwgPSBcInAgeyBjb2xvcjogcmVkOyB9XCI7XG4gICAgICogc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIikpO1xuICAgICAqIGRvYy5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICAgKiByZXR1cm4gZG9jLnN0eWxlU2hlZXRzWzBdO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHJldHVybiB7Q1NTU3R5bGVTaGVldHxDU1NTdHlsZVNoZWV0W118c3RyaW5nfHVuZGVmaW5lZH0gQSBgQ1NTU3R5bGVTaGVldGAgb2JqZWN0IG9yIGFuIGFycmF5IG9mIHN1Y2ggb2JqZWN0cyB0aGF0IGRlZmluZSB0aGUgc3R5bGVzIGZvciB0aGUgY3VzdG9tIGVsZW1lbnQsIG9yIGB1bmRlZmluZWRgIGlmIG5vIHN0eWxlc2hlZXQgc2hvdWxkIGJlIGFwcGxpZWQuXG4gICAgICovXG4gICAgc3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYXR0YWNoIGEgbmV3IG9ic2VydmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuICAgICAqIEByZXR1cm5zIHtDdXN0b21FbGVtZW50fVxuICAgICAqL1xuICAgIGF0dGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgICAgIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmF0dGFjaE9ic2VydmVyKG9ic2VydmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGV0YWNoIGEgb2JzZXJ2ZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG4gICAgICogQHJldHVybnMge0N1c3RvbUVsZW1lbnR9XG4gICAgICovXG4gICAgZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpc1tpbnRlcm5hbFN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuICAgICAqIEByZXR1cm5zIHtQcm94eU9ic2VydmVyfVxuICAgICAqL1xuICAgIGNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIG5lc3RlZCBvcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgYnkgcGF0aCBgYS5iLmNgXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgICAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlXG4gICAgICogQHJldHVybiB7Kn1cbiAgICAgKiBAc2luY2UgMS4xMC4wXG4gICAgICovXG4gICAgZ2V0T3B0aW9uKHBhdGgsIGRlZmF1bHRWYWx1ZSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdmFsdWU7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhbHVlID0gbmV3IFBhdGhmaW5kZXIoXG4gICAgICAgICAgICAgICAgdGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0sXG4gICAgICAgICAgICApLmdldFZpYShwYXRoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgb3B0aW9uIGFuZCBpbmZvcm0gZWxlbWVudHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgICAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG4gICAgICogQHNpbmNlIDEuMTQuMFxuICAgICAqL1xuICAgIHNldE9wdGlvbihwYXRoLCB2YWx1ZSkge1xuICAgICAgICBuZXcgUGF0aGZpbmRlcih0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJvcHRpb25zXCJdKS5zZXRWaWEoXG4gICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzaW5jZSAxLjE1LjBcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IG9wdGlvbnNcbiAgICAgKiBAcmV0dXJuIHtDdXN0b21FbGVtZW50fVxuICAgICAqL1xuICAgIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgICAgICBpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBwYXJzZU9wdGlvbnNKU09OLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gMjAyNC0wMS0yMTogcmVtb3ZlIHRoaXMuZGVmYXVsdHMsIG90aGVyd2lzZSBpdCB3aWxsIG92ZXJ3cml0ZVxuICAgICAgICAvLyB0aGUgY3VycmVudCBzZXR0aW5ncyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIG1hZGUuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzEzNlxuICAgICAgICBleHRlbmQodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpW1wib3B0aW9uc1wiXSwgb3B0aW9ucyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXMgY2FsbGVkIG9uY2UgdmlhIHRoZSBjb25zdHJ1Y3RvclxuICAgICAqXG4gICAgICogQHJldHVybiB7Q3VzdG9tRWxlbWVudH1cbiAgICAgKiBAc2luY2UgMS44LjBcbiAgICAgKi9cbiAgICBbaW5pdE1ldGhvZFN5bWJvbF0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmNlIHdoZW4gdGhlIG9iamVjdCBpcyBlcXVpcHBlZCB3aXRoIHVwZGF0ZSBmb3IgdGhlIGR5bmFtaWMgY2hhbmdlIG9mIHRoZSBkb20uIFxuICAgICAqIFRoZSBmdW5jdGlvbnMgcmV0dXJuZWQgaGVyZSBjYW4gYmUgdXNlZCBhcyBwaXBlIGZ1bmN0aW9ucyBpbiB0aGUgdGVtcGxhdGUuIFxuICAgICAqIFxuICAgICAqIEluIHRoZSBleGFtcGxlLCB0aGUgZnVuY3Rpb24gYG15LXRyYW5zZm9ybWVyYCBpcyBkZWZpbmVkLiBJbiB0aGUgdGVtcGxhdGUgeW91IGNhbiB1c2UgaXQgYXMgZm9sbG93czpcbiAgICAgKiBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPG15LWVsZW1lbnQgZGF0YS1tb25zdGVyLW9wdGlvbi10cmFuc2Zvcm1lcj1cInBhdGg6bXktdmFsdWUgfCBjYWxsOm15LXRyYW5zZm9ybWVyXCI+PC9teS1lbGVtZW50PlxuICAgICAqIGBgYFxuICAgICAqIFxuICAgICAqIEBleGFtcGxlXG4gICAgICogW3VwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2xdKCkge1xuICAgICAqICAgIHJldHVybiB7XG4gICAgICogICAgICAgXCJteS10cmFuc2Zvcm1lclwiOiAodmFsdWUpID0+IHtcbiAgICAgKiAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgV2VydCkge1xuICAgICAqICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICogICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgKyBcIiFcIjtcbiAgICAgKiAgICAgICAgICAgY2FzZSBcIlphaGxcIjpcbiAgICAgKiAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSArIDE7XG4gICAgICogICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICogICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICogICAgICAgICAgIH1cbiAgICAgKiAgICB9ICAgIFxuICAgICAqICAgIH07XG4gICAgICogIH07XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9XG4gICAgICogQHNpbmNlIDIuNDMuMFxuICAgICAqL1xuICAgIFt1cGRhdGVyVHJhbnNmb3JtZXJNZXRob2RzU3ltYm9sXSgpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmNlIHdoZW4gdGhlIG9iamVjdCBpcyBpbmNsdWRlZCBpbiB0aGUgRE9NIGZvciB0aGUgZmlyc3QgdGltZS4gSXQgcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBhY3Rpb25zOlxuICAgICAqIDEuIEV4dHJhY3RzIHRoZSBvcHRpb25zIGZyb20gdGhlIGF0dHJpYnV0ZXMgYW5kIHRoZSBzY3JpcHQgdGFnIG9mIHRoZSBlbGVtZW50IGFuZCBzZXRzIHRoZW0uXG4gICAgICogMi4gSW5pdGlhbGl6ZXMgdGhlIHNoYWRvdyByb290IGFuZCBpdHMgQ1NTIHN0eWxlc2hlZXQgKGlmIHNwZWNpZmllZCkuXG4gICAgICogMy4gSW5pdGlhbGl6ZXMgdGhlIEhUTUwgY29udGVudCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiA0LiBJbml0aWFsaXplcyB0aGUgY3VzdG9tIGVsZW1lbnRzIGluc2lkZSB0aGUgc2hhZG93IHJvb3QgYW5kIHRoZSBzbG90dGVkIGVsZW1lbnRzLlxuICAgICAqIDUuIEF0dGFjaGVzIGEgbXV0YXRpb24gb2JzZXJ2ZXIgdG8gb2JzZXJ2ZSBjaGFuZ2VzIHRvIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHJldHVybiB7Q3VzdG9tRWxlbWVudH0gLSBUaGUgdXBkYXRlZCBjdXN0b20gZWxlbWVudC5cbiAgICAgKiBAc2luY2UgMS44LjBcbiAgICAgKi9cbiAgICBbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuICAgICAgICBsZXQgZWxlbWVudHM7XG4gICAgICAgIGxldCBub2RlTGlzdDtcblxuICAgICAgICAvLyBFeHRyYWN0IG9wdGlvbnMgZnJvbSBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlbVxuICAgICAgICBjb25zdCBBdHRyaWJ1dGVPcHRpb25zID0gZ2V0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzLmNhbGwodGhpcyk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzT2JqZWN0KEF0dHJpYnV0ZU9wdGlvbnMpICYmXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhBdHRyaWJ1dGVPcHRpb25zKS5sZW5ndGggPiAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25zKEF0dHJpYnV0ZU9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRXh0cmFjdCBvcHRpb25zIGZyb20gc2NyaXB0IHRhZyBhbmQgc2V0IHRoZW1cbiAgICAgICAgY29uc3QgU2NyaXB0T3B0aW9ucyA9IGdldE9wdGlvbnNGcm9tU2NyaXB0VGFnLmNhbGwodGhpcyk7XG4gICAgICAgIGlmIChpc09iamVjdChTY3JpcHRPcHRpb25zKSAmJiBPYmplY3Qua2V5cyhTY3JpcHRPcHRpb25zKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnNldE9wdGlvbnMoU2NyaXB0T3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBzaGFkb3cgcm9vdCBhbmQgaXRzIENTUyBzdHlsZXNoZWV0XG4gICAgICAgIGlmICh0aGlzLmdldE9wdGlvbihcInNoYWRvd01vZGVcIiwgZmFsc2UpICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpbml0U2hhZG93Um9vdC5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnRzID0gdGhpcy5zaGFkb3dSb290LmNoaWxkTm9kZXM7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgYWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpbml0Q1NTU3R5bGVzaGVldC5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgZWxlbWVudHMgYXJlIG5vdCBmb3VuZCBpbnNpZGUgdGhlIHNoYWRvdyByb290LCBpbml0aWFsaXplIHRoZSBIVE1MIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnRcbiAgICAgICAgaWYgKCEoZWxlbWVudHMgaW5zdGFuY2VvZiBOb2RlTGlzdCkpIHtcbiAgICAgICAgICAgIGluaXRIdG1sQ29udGVudC5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgZWxlbWVudHMgPSB0aGlzLmNoaWxkTm9kZXM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBjdXN0b20gZWxlbWVudHMgaW5zaWRlIHRoZSBzaGFkb3cgcm9vdCBhbmQgdGhlIHNsb3R0ZWQgZWxlbWVudHNcbiAgICAgICAgaW5pdEZyb21DYWxsYmFja0hvc3QuY2FsbCh0aGlzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5vZGVMaXN0ID0gbmV3IFNldChbLi4uZWxlbWVudHMsIC4uLmdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMpXSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIG5vZGVMaXN0ID0gZWxlbWVudHM7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzW3VwZGF0ZUNsb25lRGF0YVN5bWJvbF0gPSBjbG9uZShcbiAgICAgICAgICAgIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLFxuICAgICAgICApO1xuXG4gICAgICAgIGFkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50LmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgbm9kZUxpc3QsXG4gICAgICAgICAgICBjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wsXG4gICAgICAgICAgICB0aGlzW3VwZGF0ZUNsb25lRGF0YVN5bWJvbF0sXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQXR0YWNoIGEgbXV0YXRpb24gb2JzZXJ2ZXIgdG8gb2JzZXJ2ZSBjaGFuZ2VzIHRvIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBlbGVtZW50XG4gICAgICAgIGF0dGFjaEF0dHJpYnV0ZUNoYW5nZU11dGF0aW9uT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIFlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZz8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGZvciBhZHZhbmNlZCB1c2Vycy5cbiAgICAgKiBUaGUgcmVzdWx0IGlzIGEgY2xvbmUgb2YgdGhlIGludGVybmFsIGRhdGEuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgKi9cbiAgICBnZXRJbnRlcm5hbFVwZGF0ZUNsb25lRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIGNsb25lKHRoaXNbdXBkYXRlQ2xvbmVEYXRhU3ltYm9sXSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIGVsZW1lbnQgaXMgaW5zZXJ0ZWQgaW50byB0aGUgRE9NLiBJdCBjaGVja3MgaWYgdGhlIGN1c3RvbSBlbGVtZW50XG4gICAgICogaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZCBhbmQgaWYgbm90LCBjYWxscyB0aGUgYXNzZW1ibGVNZXRob2QgdG8gaW5pdGlhbGl6ZSBpdC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge3ZvaWR9XG4gICAgICogQHNpbmNlIDEuNy4wXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9jb25uZWN0ZWRDYWxsYmFja1xuICAgICAqL1xuICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWRcbiAgICAgICAgaWYgKCFoYXNPYmplY3RMaW5rKHRoaXMsIGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCkpIHtcbiAgICAgICAgICAgIC8vIElmIG5vdCwgY2FsbCB0aGUgYXNzZW1ibGVNZXRob2QgdG8gaW5pdGlhbGl6ZSB0aGUgb2JqZWN0XG4gICAgICAgICAgICB0aGlzW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIGVsZW1lbnQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBET00uIFVzZWZ1bCBmb3IgcnVubmluZyBjbGVhbiB1cCBjb2RlLlxuICAgICAqXG4gICAgICogQHJldHVybiB7dm9pZH1cbiAgICAgKiBAc2luY2UgMS43LjBcbiAgICAgKi9cbiAgICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VzdG9tIGVsZW1lbnQgaGFzIGJlZW4gbW92ZWQgaW50byBhIG5ldyBkb2N1bWVudCAoZS5nLiBzb21lb25lIGNhbGxlZCBkb2N1bWVudC5hZG9wdE5vZGUoZWwpKS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge3ZvaWR9XG4gICAgICogQHNpbmNlIDEuNy4wXG4gICAgICovXG4gICAgYWRvcHRlZENhbGxiYWNrKCkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIGFuIG9ic2VydmVkIGF0dHJpYnV0ZSBoYXMgYmVlbiBhZGRlZCwgcmVtb3ZlZCwgdXBkYXRlZCwgb3IgcmVwbGFjZWQuIEFsc28gY2FsbGVkIGZvciBpbml0aWFsXG4gICAgICogdmFsdWVzIHdoZW4gYW4gZWxlbWVudCBpcyBjcmVhdGVkIGJ5IHRoZSBwYXJzZXIsIG9yIHVwZ3JhZGVkLiBOb3RlOiBvbmx5IGF0dHJpYnV0ZXMgbGlzdGVkIGluIHRoZSBvYnNlcnZlZEF0dHJpYnV0ZXNcbiAgICAgKiBwcm9wZXJ0eSB3aWxsIHJlY2VpdmUgdGhpcyBjYWxsYmFjay5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyTmFtZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvbGRWYWxcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3VmFsXG4gICAgICogQHJldHVybiB7dm9pZH1cbiAgICAgKiBAc2luY2UgMS4xNS4wXG4gICAgICovXG4gICAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKGF0dHJOYW1lLCBvbGRWYWwsIG5ld1ZhbCkge1xuICAgICAgICBpZiAoYXR0ck5hbWUuc3RhcnRzV2l0aChcImRhdGEtbW9uc3Rlci1vcHRpb24tXCIpKSB7XG4gICAgICAgICAgICBzZXRPcHRpb25Gcm9tQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgYXR0ck5hbWUsXG4gICAgICAgICAgICAgICAgdGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpW1wib3B0aW9uc1wiXSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjYWxsYmFjayA9IHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdPy5bYXR0ck5hbWVdO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzLCBuZXdWYWwsIG9sZFZhbCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgYWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuICAgICAqIEBzaW5jZSAxLjE5LjBcbiAgICAgKi9cbiAgICBoYXNOb2RlKG5vZGUpIHtcbiAgICAgICAgaWYgKGNvbnRhaW5DaGlsZE5vZGUuY2FsbCh0aGlzLCB2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISh0aGlzLnNoYWRvd1Jvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRhaW5DaGlsZE5vZGUuY2FsbCh0aGlzLnNoYWRvd1Jvb3QsIG5vZGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxzIGEgY2FsbGJhY2sgZnVuY3Rpb24gaWYgaXQgZXhpc3RzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcGFyYW0geyp9IGFyZ3NcbiAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgKi9cbiAgICBjYWxsQ2FsbGJhY2sobmFtZSwgYXJncykge1xuICAgICAgICByZXR1cm4gY2FsbENvbnRyb2xDYWxsYmFjay5jYWxsKHRoaXMsIG5hbWUsIC4uLmFyZ3MpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2FsbEJhY2tGdW5jdGlvbk5hbWVcbiAqIEBwYXJhbSB7Kn0gIGFyZ3NcbiAqIEByZXR1cm4ge2FueX1cbiAqL1xuZnVuY3Rpb24gY2FsbENvbnRyb2xDYWxsYmFjayhjYWxsQmFja0Z1bmN0aW9uTmFtZSwgLi4uYXJncykge1xuICAgIGlmICghaXNTdHJpbmcoY2FsbEJhY2tGdW5jdGlvbk5hbWUpIHx8IGNhbGxCYWNrRnVuY3Rpb25OYW1lID09PSBcIlwiKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2FsbEJhY2tGdW5jdGlvbk5hbWUgaW4gdGhpcykge1xuICAgICAgICByZXR1cm4gdGhpc1tjYWxsQmFja0Z1bmN0aW9uTmFtZV0odGhpcywgLi4uYXJncyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfU0NSSVBUX0hPU1QpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpc1tzY3JpcHRIb3N0RWxlbWVudFN5bWJvbF0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldElkID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1NDUklQVF9IT1NUKTtcbiAgICAgICAgaWYgKCF0YXJnZXRJZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGlzdCA9IHRhcmdldElkLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBsaXN0KSB7XG4gICAgICAgICAgICBjb25zdCBob3N0ID0gZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzKHRoaXMsIHRhcmdldElkKTtcbiAgICAgICAgICAgIGlmICghKGhvc3QgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpc1tzY3JpcHRIb3N0RWxlbWVudFN5bWJvbF0ucHVzaChob3N0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgaG9zdCBvZiB0aGlzW3NjcmlwdEhvc3RFbGVtZW50U3ltYm9sXSkge1xuICAgICAgICBpZiAoY2FsbEJhY2tGdW5jdGlvbk5hbWUgaW4gaG9zdCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG9zdFtjYWxsQmFja0Z1bmN0aW9uTmFtZV0odGhpcywgLi4uYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgYWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZEF0dHJpYnV0ZVRva2VuKFxuICAgICAgICB0aGlzLFxuICAgICAgICBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuICAgICAgICBgY2FsbGJhY2sgJHtjYWxsQmFja0Z1bmN0aW9uTmFtZX0gbm90IGZvdW5kYCxcbiAgICApO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIHRoZSBjdXN0b20gZWxlbWVudCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBhdHRhY2hlZCB0byB0aGUgRE9NLiBJdCBjaGVja3MgaWYgdGhlXG4gKiBgZGF0YS1tb25zdGVyLW9wdGlvbi1jYWxsYmFja2AgYXR0cmlidXRlIGlzIHNldCwgYW5kIGlmIG5vdCwgdGhlIGRlZmF1bHQgY2FsbGJhY2tcbiAqIGBpbml0Q3VzdG9tQ29udHJvbENhbGxiYWNrYCBpcyBjYWxsZWQuIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBzZWFyY2hlZCBmb3IgaW4gdGhpc1xuICogZWxlbWVudCBhbmQgaW4gdGhlIGhvc3QgZWxlbWVudC4gSWYgdGhlIGNhbGxiYWNrIGlzIGZvdW5kLCBpdCBpcyBjYWxsZWQgd2l0aCB0aGUgZWxlbWVudFxuICogYXMgYSBwYXJhbWV0ZXIuXG4gKlxuICogQHRoaXMgQ3VzdG9tRWxlbWVudFxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5L2RlZmluZSNwcm92aWRpbmdfYV9jb25zdHJ1Y3Rpb25fY2FsbGJhY2tcbiAqIEBzaW5jZSAxLjguMFxuICovXG5mdW5jdGlvbiBpbml0RnJvbUNhbGxiYWNrSG9zdCgpIHtcbiAgICAvLyBTZXQgdGhlIGRlZmF1bHQgY2FsbGJhY2sgZnVuY3Rpb24gbmFtZVxuICAgIGxldCBjYWxsQmFja0Z1bmN0aW9uTmFtZSA9IGluaXRDb250cm9sQ2FsbGJhY2tOYW1lO1xuXG4gICAgLy8gSWYgdGhlIGBkYXRhLW1vbnN0ZXItb3B0aW9uLWNhbGxiYWNrYCBhdHRyaWJ1dGUgaXMgc2V0LCB1c2UgaXRzIHZhbHVlIGFzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBuYW1lXG4gICAgaWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9JTklUX0NBTExCQUNLKSkge1xuICAgICAgICBjYWxsQmFja0Z1bmN0aW9uTmFtZSA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9JTklUX0NBTExCQUNLKTtcbiAgICB9XG5cbiAgICAvLyBDYWxsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIHRoZSBlbGVtZW50IGFzIGEgcGFyYW1ldGVyIGlmIGl0IGV4aXN0c1xuICAgIGNhbGxDb250cm9sQ2FsbGJhY2suY2FsbCh0aGlzLCBjYWxsQmFja0Z1bmN0aW9uTmFtZSk7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgZmlyc3QgY3JlYXRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHRoaXMgQ3VzdG9tRWxlbWVudFxuICovXG5mdW5jdGlvbiBhdHRhY2hBdHRyaWJ1dGVDaGFuZ2VNdXRhdGlvbk9ic2VydmVyKCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgaWYgKHR5cGVvZiBzZWxmW2F0dHJpYnV0ZU11dGF0aW9uT2JzZXJ2ZXJTeW1ib2xdICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZWxmW2F0dHJpYnV0ZU11dGF0aW9uT2JzZXJ2ZXJTeW1ib2xdID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKFxuICAgICAgICBtdXRhdGlvbnMsXG4gICAgICAgIG9ic2VydmVyLFxuICAgICkge1xuICAgICAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9ucykge1xuICAgICAgICAgICAgaWYgKG11dGF0aW9uLnR5cGUgPT09IFwiYXR0cmlidXRlc1wiKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soXG4gICAgICAgICAgICAgICAgICAgIG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG11dGF0aW9uLm9sZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbi50YXJnZXQuZ2V0QXR0cmlidXRlKG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUpLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICAgIHNlbGZbYXR0cmlidXRlTXV0YXRpb25PYnNlcnZlclN5bWJvbF0ub2JzZXJ2ZShzZWxmLCB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICAgICAgYXR0cmlidXRlT2xkVmFsdWU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgYWRkQXR0cmlidXRlVG9rZW4oc2VsZiwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQHRoaXMgQ3VzdG9tRWxlbWVudFxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29udGFpbkNoaWxkTm9kZShub2RlKSB7XG4gICAgaWYgKHRoaXMuY29udGFpbnMobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbLCBlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmNoaWxkTm9kZXMpKSB7XG4gICAgICAgIGlmIChlLmNvbnRhaW5zKG5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRhaW5DaGlsZE5vZGUuY2FsbChlLCBub2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNS4wXG4gKiBAcHJpdmF0ZVxuICogQHRoaXMgQ3VzdG9tRWxlbWVudFxuICovXG5mdW5jdGlvbiBpbml0T3B0aW9uT2JzZXJ2ZXIoKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICBsZXQgbGFzdERpc2FibGVkVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgc2VsZi5hdHRhY2hPYnNlcnZlcihcbiAgICAgICAgbmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZsYWcgPSBzZWxmLmdldE9wdGlvbihcImRpc2FibGVkXCIpO1xuXG4gICAgICAgICAgICBpZiAoZmxhZyA9PT0gbGFzdERpc2FibGVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxhc3REaXNhYmxlZFZhbHVlID0gZmxhZztcblxuICAgICAgICAgICAgaWYgKCEoc2VsZi5zaGFkb3dSb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID1cbiAgICAgICAgICAgICAgICBcImJ1dHRvbiwgY29tbWFuZCwgZmllbGRzZXQsIGtleWdlbiwgb3B0Z3JvdXAsIG9wdGlvbiwgc2VsZWN0LCB0ZXh0YXJlYSwgaW5wdXQsIFtkYXRhLW1vbnN0ZXItb2JqZWN0bGlua11cIjtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gc2VsZi5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpO1xuXG4gICAgICAgICAgICBsZXQgbm9kZUxpc3Q7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG5vZGVMaXN0ID0gbmV3IFNldChbXG4gICAgICAgICAgICAgICAgICAgIC4uLmVsZW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICAuLi5nZXRTbG90dGVkRWxlbWVudHMuY2FsbChzZWxmLCBxdWVyeSksXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgbm9kZUxpc3QgPSBlbGVtZW50cztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIFsuLi5ub2RlTGlzdF0pIHtcbiAgICAgICAgICAgICAgICBpZiAoZmxhZyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRElTQUJMRUQsIFwiXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9ESVNBQkxFRCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICApO1xuXG4gICAgc2VsZi5hdHRhY2hPYnNlcnZlcihcbiAgICAgICAgbmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIG5vdCBpbml0aWFsaXNlZFxuICAgICAgICAgICAgaWYgKCFoYXNPYmplY3RMaW5rKHNlbGYsIGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpbmZvcm0gZXZlcnkgZWxlbWVudFxuICAgICAgICAgICAgY29uc3QgdXBkYXRlcnMgPSBnZXRMaW5rZWRPYmplY3RzKHNlbGYsIGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgbGlzdCBvZiB1cGRhdGVycykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdXBkYXRlciBvZiBsaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBjbG9uZShzZWxmW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXSk7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odXBkYXRlci5nZXRTdWJqZWN0KCksIGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIGRpc2FibGVkXG4gICAgc2VsZlthdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bQVRUUklCVVRFX0RJU0FCTEVEXSA9ICgpID0+IHtcbiAgICAgICAgaWYgKHNlbGYuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9ESVNBQkxFRCkpIHtcbiAgICAgICAgICAgIHNlbGYuc2V0T3B0aW9uKEFUVFJJQlVURV9ESVNBQkxFRCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxmLnNldE9wdGlvbihBVFRSSUJVVEVfRElTQUJMRUQsIHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gZGF0YS1tb25zdGVyLW9wdGlvbnNcbiAgICBzZWxmW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtBVFRSSUJVVEVfT1BUSU9OU10gPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMuY2FsbChzZWxmKTtcbiAgICAgICAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmIE9iamVjdC5rZXlzKG9wdGlvbnMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNlbGYuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBkYXRhLW1vbnN0ZXItb3B0aW9ucy1zZWxlY3RvclxuICAgIHNlbGZbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW0FUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SXSA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGdldE9wdGlvbnNGcm9tU2NyaXB0VGFnLmNhbGwoc2VsZik7XG4gICAgICAgIGlmIChpc09iamVjdChvcHRpb25zKSAmJiBPYmplY3Qua2V5cyhvcHRpb25zKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzZWxmLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuICovXG5mdW5jdGlvbiBnZXRPcHRpb25zRnJvbVNjcmlwdFRhZygpIHtcbiAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SKSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SKSxcbiAgICApO1xuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MU2NyaXB0RWxlbWVudCkpIHtcbiAgICAgICAgYWRkQXR0cmlidXRlVG9rZW4oXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgQVRUUklCVVRFX0VSUk9STUVTU0FHRSxcbiAgICAgICAgICAgIGB0aGUgc2VsZWN0b3IgJHtBVFRSSUJVVEVfT1BUSU9OU19TRUxFQ1RPUn0gZm9yIG9wdGlvbnMgd2FzIHNwZWNpZmllZCAoJHt0aGlzLmdldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICBBVFRSSUJVVEVfT1BUSU9OU19TRUxFQ1RPUixcbiAgICAgICAgICAgICl9KSBidXQgbm90IGZvdW5kLmAsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBsZXQgb2JqID0ge307XG5cbiAgICB0cnkge1xuICAgICAgICBvYmogPSBwYXJzZU9wdGlvbnNKU09OLmNhbGwodGhpcywgbm9kZS50ZXh0Q29udGVudC50cmltKCkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgYWRkQXR0cmlidXRlVG9rZW4oXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgQVRUUklCVVRFX0VSUk9STUVTU0FHRSxcbiAgICAgICAgICAgIGB3aGVuIGFuYWx5emluZyB0aGUgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBzY3JpcHQgdGFnIHRoZXJlIHdhcyBhbiBlcnJvci4gJHtlfWAsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoKSB7XG4gICAgaWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9PUFRJT05TKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlT3B0aW9uc0pTT04uY2FsbCh0aGlzLCB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfT1BUSU9OUykpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhZGRBdHRyaWJ1dGVUb2tlbihcbiAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG4gICAgICAgICAgICAgICAgYHRoZSBvcHRpb25zIGF0dHJpYnV0ZSAke0FUVFJJQlVURV9PUFRJT05TfSBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uIChhY3R1YWw6ICR7dGhpcy5nZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIEFUVFJJQlVURV9PUFRJT05TLFxuICAgICAgICAgICAgICAgICl9KS4ke2V9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge307XG59XG5cbi8qKlxuICogUGFyc2VzIHRoZSBnaXZlbiBKU09OIGRhdGEgYW5kIHJldHVybnMgdGhlIHBhcnNlZCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhIFRoZSBKU09OIGRhdGEgdG8gYmUgcGFyc2VkLlxuICogQHJldHVybnMge09iamVjdH0gVGhlIHBhcnNlZCBvYmplY3QuXG4gKiBAdGhyb3dzIHtlcnJvcn0gVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBKU09OIGRhdGEgaXMgbm90IHZhbGlkLlxuICovXG5mdW5jdGlvbiBwYXJzZU9wdGlvbnNKU09OKGRhdGEpIHtcbiAgICBsZXQgb2JqID0ge307XG5cbiAgICBpZiAoIWlzU3RyaW5nKGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgLy8gdGhlIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHNwZWNpZmllZCBhcyBhIGRhdGEgdXJsLlxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhdGFVcmwgPSBwYXJzZURhdGFVUkwoZGF0YSk7XG4gICAgICAgIGRhdGEgPSBkYXRhVXJsLmNvbnRlbnQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIG9iaiA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZU9iamVjdChvYmopO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtpbml0SHRtbENvbnRlbnR9XG4gKi9cbmZ1bmN0aW9uIGluaXRIdG1sQ29udGVudCgpIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGZpbmREb2N1bWVudFRlbXBsYXRlKHRoaXMuY29uc3RydWN0b3IuZ2V0VGFnKCkpO1xuICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHRlbXBsYXRlLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsZXQgaHRtbCA9IHRoaXMuZ2V0T3B0aW9uKFwidGVtcGxhdGVzLm1haW5cIiwgXCJcIik7XG4gICAgICAgIGlmIChpc1N0cmluZyhodG1sKSAmJiBodG1sLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcHBpbmcgPSB0aGlzLmdldE9wdGlvbihcInRlbXBsYXRlTWFwcGluZ1wiLCB7fSk7XG4gICAgICAgICAgICBpZiAoaXNPYmplY3QobWFwcGluZykpIHtcbiAgICAgICAgICAgICAgICBodG1sID0gbmV3IEZvcm1hdHRlcihtYXBwaW5nLCB7fSkuZm9ybWF0KGh0bWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTYuMFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2ZcbiAqL1xuZnVuY3Rpb24gaW5pdENTU1N0eWxlc2hlZXQoKSB7XG4gICAgaWYgKCEodGhpcy5zaGFkb3dSb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgY29uc3Qgc3R5bGVTaGVldCA9IHRoaXMuY29uc3RydWN0b3IuZ2V0Q1NTU3R5bGVTaGVldCgpO1xuXG4gICAgaWYgKHN0eWxlU2hlZXQgaW5zdGFuY2VvZiBDU1NTdHlsZVNoZWV0KSB7XG4gICAgICAgIGlmIChzdHlsZVNoZWV0LmNzc1J1bGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHMgPSBbc3R5bGVTaGVldF07XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkoc3R5bGVTaGVldCkpIHtcbiAgICAgICAgY29uc3QgYXNzaWduID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcyBvZiBzdHlsZVNoZWV0KSB7XG4gICAgICAgICAgICBpZiAoaXNTdHJpbmcocykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmltZWRTdHlsZVNoZWV0ID0gcy50cmltKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRyaW1lZFN0eWxlU2hlZXQgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlLmlubmVySFRNTCA9IHRyaW1lZFN0eWxlU2hlZXQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhZG93Um9vdC5wcmVwZW5kKHN0eWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhbGlkYXRlSW5zdGFuY2UocywgQ1NTU3R5bGVTaGVldCk7XG5cbiAgICAgICAgICAgIGlmIChzLmNzc1J1bGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBhc3NpZ24ucHVzaChzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhc3NpZ24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5zaGFkb3dSb290LmFkb3B0ZWRTdHlsZVNoZWV0cyA9IGFzc2lnbjtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcoc3R5bGVTaGVldCkpIHtcbiAgICAgICAgY29uc3QgdHJpbWVkU3R5bGVTaGVldCA9IHN0eWxlU2hlZXQudHJpbSgpO1xuICAgICAgICBpZiAodHJpbWVkU3R5bGVTaGVldCAhPT0gXCJcIikge1xuICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgICAgICAgICBzdHlsZS5pbm5lckhUTUwgPSBzdHlsZVNoZWV0O1xuICAgICAgICAgICAgdGhpcy5zaGFkb3dSb290LnByZXBlbmQoc3R5bGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG4gKiBAdGhyb3dzIHtFcnJvcn0gaHRtbCBpcyBub3Qgc2V0LlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9hdHRhY2hTaGFkb3dcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuZnVuY3Rpb24gaW5pdFNoYWRvd1Jvb3QoKSB7XG4gICAgbGV0IHRlbXBsYXRlO1xuICAgIGxldCBodG1sO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgdGVtcGxhdGUgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZSh0aGlzLmNvbnN0cnVjdG9yLmdldFRhZygpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGh0bWwgPSB0aGlzLmdldE9wdGlvbihcInRlbXBsYXRlcy5tYWluXCIsIFwiXCIpO1xuICAgICAgICBpZiAoIWlzU3RyaW5nKGh0bWwpIHx8IGh0bWwgPT09IHVuZGVmaW5lZCB8fCBodG1sID09PSBcIlwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJodG1sIGlzIG5vdCBzZXQuXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5hdHRhY2hTaGFkb3coe1xuICAgICAgICBtb2RlOiB0aGlzLmdldE9wdGlvbihcInNoYWRvd01vZGVcIiwgXCJvcGVuXCIpLFxuICAgICAgICBkZWxlZ2F0ZXNGb2N1czogdGhpcy5nZXRPcHRpb24oXCJkZWxlZ2F0ZXNGb2N1c1wiLCB0cnVlKSxcbiAgICB9KTtcblxuICAgIGlmICh0ZW1wbGF0ZSBpbnN0YW5jZW9mIFRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh0ZW1wbGF0ZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBjb25zdCBtYXBwaW5nID0gdGhpcy5nZXRPcHRpb24oXCJ0ZW1wbGF0ZU1hcHBpbmdcIiwge30pO1xuICAgIGlmIChpc09iamVjdChtYXBwaW5nKSkge1xuICAgICAgICBodG1sID0gbmV3IEZvcm1hdHRlcihtYXBwaW5nKS5mb3JtYXQoaHRtbCk7XG4gICAgfVxuXG4gICAgdGhpcy5zaGFkb3dSb290LmlubmVySFRNTCA9IGh0bWw7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgcmVnaXN0ZXJzIGEgbmV3IGVsZW1lbnQuIFRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgYEN1c3RvbUVsZW1lbnQuZ2V0VGFnKClgIGlzIHVzZWQgYXMgdGhlIHRhZy5cbiAqXG4gKiBAcGFyYW0ge0N1c3RvbUVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjcuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHRocm93cyB7RE9NRXhjZXB0aW9ufSBGYWlsZWQgdG8gZXhlY3V0ZSAnZGVmaW5lJyBvbiAnQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5JzogaXMgbm90IGEgdmFsaWQgY3VzdG9tIGVsZW1lbnQgbmFtZVxuICovXG5mdW5jdGlvbiByZWdpc3RlckN1c3RvbUVsZW1lbnQoZWxlbWVudCkge1xuICAgIHZhbGlkYXRlRnVuY3Rpb24oZWxlbWVudCk7XG4gICAgY29uc3QgY3VzdG9tRWxlbWVudHMgPSBnZXRHbG9iYWxPYmplY3QoXCJjdXN0b21FbGVtZW50c1wiKTtcbiAgICBpZiAoY3VzdG9tRWxlbWVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjdXN0b21FbGVtZW50cyBpcyBub3Qgc3VwcG9ydGVkLlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCB0YWcgPSBlbGVtZW50Py5nZXRUYWcoKTtcbiAgICBpZiAoIWlzU3RyaW5nKHRhZykgfHwgdGFnID09PSBcIlwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhZyBpcyBub3Qgc2V0LlwiKTtcbiAgICB9XG5cbiAgICBpZiAoY3VzdG9tRWxlbWVudHMuZ2V0KHRhZykgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKHRhZywgZWxlbWVudCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBBVFRSSUJVVEVfUFJFRklYIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbi8qKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc2luY2UgMS4wLjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyA9IFwiYmxvY2tcIjtcblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLXVybGAgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGUgY29udHJvbC5cbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzaW5jZSAxLjAuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0ZPUk1fVVJMID0gYCR7QVRUUklCVVRFX1BSRUZJWH11cmxgO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItcmVsb2FkYCBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSByZWxvYWQuXG4gKlxuICogdmFsaWQgdmFsdWVzOiBvbnNob3dcbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzaW5jZSAxLjExLjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9GT1JNX1JFTE9BRCA9IGAke0FUVFJJQlVURV9QUkVGSVh9cmVsb2FkYDtcblxuLyoqXG4gKiBgZGF0YS1tb25zdGVyLWludGVuZGBcbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzaW5jZSAxLjkuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX1ZJU0lCSUxJVFkgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXZpc2liaWxpdHlgO1xuLyoqXG4gKiBgZGF0YS1tb25zdGVyLWludGVuZGBcbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzaW5jZSAxLjkuMFxuICogQGRlcHJlY2F0ZWQgc2luY2UgMy4zMi4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfQlVUVE9OX0NMQVNTID0gYCR7QVRUUklCVVRFX1BSRUZJWH1idXR0b24tY2xhc3NgO1xuXG4vKipcbiAqIGBkYXRhLW1vbnN0ZXItaW50ZW5kYFxuICpcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHNpbmNlIDEuOC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfSU5URU5EID0gYCR7QVRUUklCVVRFX1BSRUZJWH1pbnRlbmRgO1xuXG4vKipcbiAqIGBkYXRhLW1vbnN0ZXItaGFzLWNoaWxkcmVuYFxuICpcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHNpbmNlIDEuOC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfSEFTX0NISUxEUkVOID0gYCR7QVRUUklCVVRFX1BSRUZJWH1oYXMtY2hpbGRyZW5gO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItZGF0YXNvdXJjZWAgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIGRhdGFzb3VyY2UuXG4gKlxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc2luY2UgMS42LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9GT1JNX0RBVEFTT1VSQ0UgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWRhdGFzb3VyY2VgO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItZGF0YXNvdXJjZS1hcmd1bWVudHNgIGNhbiBiZSB1c2VkIHRvIHBhc3MgYXJndW1lbnRzLlxuICpcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHNpbmNlIDEuNi4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfRk9STV9EQVRBU09VUkNFX0FSR1VNRU5UUyA9IGAke0FUVFJJQlVURV9QUkVGSVh9ZGF0YXNvdXJjZS1hcmd1bWVudHNgO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItYnV0dG9uLWxhYmVsYCBjYW4gYmUgdXNlZCB0byBwYXNzIGxhYmVscy5cbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzaW5jZSAxLjYuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0JVVFRPTl9MQUJFTCA9IGAke0FUVFJJQlVURV9QUkVGSVh9YnV0dG9uLWxhYmVsYDtcblxuZXhwb3J0IHtcblx0QVRUUklCVVRFX0JVVFRPTl9MQUJFTCxcblx0U1RZTEVfRElTUExBWV9NT0RFX0JMT0NLLFxuXHRBVFRSSUJVVEVfRk9STV9VUkwsXG5cdEFUVFJJQlVURV9GT1JNX0RBVEFTT1VSQ0UsXG5cdEFUVFJJQlVURV9GT1JNX0RBVEFTT1VSQ0VfQVJHVU1FTlRTLFxuXHRBVFRSSUJVVEVfSU5URU5ELFxuXHRBVFRSSUJVVEVfVklTSUJJTElUWSxcblx0QVRUUklCVVRFX0ZPUk1fUkVMT0FELFxuXHRBVFRSSUJVVEVfSEFTX0NISUxEUkVOLFxuXHRBVFRSSUJVVEVfQlVUVE9OX0NMQVNTLFxufTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZnVuY3Rpb24gZmluZFNoYWRvd1Jvb3QoZWxlbWVudCkge1xuXHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHJldHVybiBlbGVtZW50O1xuXHRpZiAoIWVsZW1lbnQucGFyZW50Tm9kZSkgcmV0dXJuIG51bGw7XG5cdHJldHVybiBmaW5kU2hhZG93Um9vdChlbGVtZW50LnBhcmVudE5vZGUpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgZmV0Y2ggb3B0aW9uc1xuICogQHBhcmFtIHtPYmplY3R9IGZpbHRlciBmZXRjaCBvcHRpb25zXG4gKiBAcmV0dXJuIHtQcm9taXNlPE9iamVjdD59XG4gKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gY2xpZW50IGVycm9yXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gbG9hZEFuZEFzc2lnbkNvbnRlbnQoZWxlbWVudCwgdXJsLCBvcHRpb25zLCBmaWx0ZXIpIHtcblx0cmV0dXJuIGxvYWRDb250ZW50KHVybCwgb3B0aW9ucykudGhlbigocmVzcG9uc2UpID0+IHtcblx0XHRsZXQgY29udGVudCA9IHJlc3BvbnNlLmNvbnRlbnQ7XG5cblx0XHRpZiAoaXNTdHJpbmcoZmlsdGVyKSAmJiBmaWx0ZXIgIT09IFwiXCIpIHtcblx0XHRcdGNvbnN0IHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0Y29uc3QgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHRjLmlubmVySFRNTCA9IGNvbnRlbnQ7XG5cdFx0XHRmb3IgKGNvbnN0IFssIG5vZGVdIG9mIGMucXVlcnlTZWxlY3RvckFsbChmaWx0ZXIpLmVudHJpZXMoKSkge1xuXHRcdFx0XHR0LmFwcGVuZENoaWxkKG5vZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb250ZW50ID0gdC5pbm5lckhUTUw7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0dC5pbm5lckhUTUwgPSBjb250ZW50O1xuXG5cdFx0Y29uc3Qgc2NyaXB0cyA9IHQucXVlcnlTZWxlY3RvckFsbChcInNjcmlwdFwiKTtcblx0XHRmb3IgKGNvbnN0IFssIHNjcmlwdF0gb2Ygc2NyaXB0cy5lbnRyaWVzKCkpIHtcblx0XHRcdGNvbnN0IHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuXHRcdFx0cy5pbm5lckhUTUwgPSBzY3JpcHQuaW5uZXJIVE1MO1xuXHRcdFx0aWYgKHNjcmlwdC5zcmMpIHMuc3JjID0gc2NyaXB0LnNyYztcblx0XHRcdGlmIChzY3JpcHQudHlwZSkgcy50eXBlID0gc2NyaXB0LnR5cGU7XG5cdFx0XHRpZiAoc2NyaXB0LmFzeW5jKSBzLmFzeW5jID0gc2NyaXB0LmFzeW5jO1xuXHRcdFx0aWYgKHNjcmlwdC5kZWZlcikgcy5kZWZlciA9IHNjcmlwdC5kZWZlcjtcblx0XHRcdGlmIChzY3JpcHQuY3Jvc3NPcmlnaW4pIHMuY3Jvc3NPcmlnaW4gPSBzY3JpcHQuY3Jvc3NPcmlnaW47XG5cdFx0XHRpZiAoc2NyaXB0LmludGVncml0eSkgcy5pbnRlZ3JpdHkgPSBzY3JpcHQuaW50ZWdyaXR5O1xuXHRcdFx0aWYgKHNjcmlwdC5yZWZlcnJlclBvbGljeSkgcy5yZWZlcnJlclBvbGljeSA9IHNjcmlwdC5yZWZlcnJlclBvbGljeTtcblx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQocyk7XG5cdFx0XHR0LnJlbW92ZUNoaWxkKHNjcmlwdCk7XG5cdFx0fVxuXG5cdFx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCkuaW5uZXJIVE1MID0gdC5pbm5lckhUTUw7XG5cblx0XHRjb25zdCByb290ID0gZmluZFNoYWRvd1Jvb3QoZWxlbWVudCk7XG5cdFx0aWYgKHJvb3QgIT09IG51bGwpIHtcblx0XHRcdGVsZW1lbnQgPSByb290Lmhvc3Q7XG5cdFx0fVxuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KGVsZW1lbnQsIFwibW9uc3Rlci1mZXRjaGVkXCIsIHtcblx0XHRcdHVybCxcblx0XHR9KTtcblxuXHRcdHJldHVybiByZXNwb25zZTtcblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBmZXRjaCBvcHRpb25zXG4gKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59XG4gKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gY2xpZW50IGVycm9yXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBsb2FkQ29udGVudCh1cmwsIG9wdGlvbnMpIHtcblx0aWYgKHVybCBpbnN0YW5jZW9mIFVSTCkge1xuXHRcdHVybCA9IHVybC50b1N0cmluZygpO1xuXHR9XG5cblx0cmV0dXJuIGZldGNoKHZhbGlkYXRlU3RyaW5nKHVybCksIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG5cdFx0Ly8gVGhlIG9rIHJlYWQtb25seSBwcm9wZXJ0eSBvZiB0aGUgUmVzcG9uc2UgaW50ZXJmYWNlIGNvbnRhaW5zIGFcblx0XHQvLyBCb29sZWFuIHN0YXRpbmcgd2hldGhlciB0aGUgcmVzcG9uc2Ugd2FzIHN1Y2Nlc3NmdWwgKHN0YXR1cyBpbiB0aGUgcmFuZ2UgMjAwLTI5OSkgb3Igbm90LlxuXHRcdGlmIChyZXNwb25zZT8ub2sgIT09IHRydWUpIHtcblx0XHRcdC8vIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1Jlc3BvbnNlL3R5cGVcblx0XHRcdGlmIChcblx0XHRcdFx0W1wiZXJyb3JcIiwgXCJvcGFxdWVcIiwgXCJvcGFxdWVyZWRpcmVjdFwiXS5pbmRleE9mKHJlc3BvbnNlPy50eXBlKSAhPT0gLTFcblx0XHRcdCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0YHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YSAoJHtyZXNwb25zZT8udHlwZX0pYCxcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc3RhdHVzQ2xhc3MgPSBgJHtyZXNwb25zZT8uc3RhdHVzfWAuc3Vic3RyaW5nKDAsIDEpO1xuXHRcdFx0c3dpdGNoIChzdGF0dXNDbGFzcykge1xuXHRcdFx0XHRjYXNlIFwiNFwiOlxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgY2xpZW50IGVycm9yICR7cmVzcG9uc2U/LnN0YXR1c1RleHR9YCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdFx0YHVuZGVmaW5lZCBzdGF0dXMgKCR7cmVzcG9uc2U/LnN0YXR1c30gLyAke3Jlc3BvbnNlPy5zdGF0dXNUZXh0fSkgb3IgdHlwZSAoJHtyZXNwb25zZT8udHlwZX0pYCxcblx0XHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRyZXNwb25zZVxuXHRcdFx0XHQudGV4dCgpXG5cdFx0XHRcdC50aGVuKChjb250ZW50KSA9PiB7XG5cdFx0XHRcdFx0cmVzb2x2ZSh7XG5cdFx0XHRcdFx0XHRjb250ZW50LFxuXHRcdFx0XHRcdFx0dHlwZTogcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJDb250ZW50LVR5cGVcIiksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChyZWplY3QpO1xuXHRcdH0pO1xuXHR9KTtcbn1cblxuZXhwb3J0IHsgbG9hZEFuZEFzc2lnbkNvbnRlbnQsIGxvYWRDb250ZW50IH07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0YXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdGluaXRNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRk9STV9SRUxPQUQsIEFUVFJJQlVURV9GT1JNX1VSTCB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGxvYWRBbmRBc3NpZ25Db250ZW50IH0gZnJvbSBcIi4vdXRpbC9mZXRjaC5tanNcIjtcblxuZXhwb3J0IHsgUmVsb2FkIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGludGVyc2VjdGlvbk9ic2VydmVyV2FzSW5pdGlhbGl6ZWQgPSBTeW1ib2woXCJ3YXNJbml0aWFsaXplZFwiKTtcblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgcmVsb2FkcyB0aGUgY29udGVudCBvZiBhIHVybCBhbmQgZW1iZWRzIGl0IGludG8gdGhlIGRvbS5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL3JlbG9hZC5wbmdcIj5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIGA8bW9uc3Rlci1yZWxvYWQgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItcmVsb2FkJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItcmVsb2FkPjwvbW9uc3Rlci1yZWxvYWQ+XG4gKlxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge1JlbG9hZH0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL3JlbG9hZC5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXJlbG9hZCcpO1xuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBBIHNpbXBsZSBjb25maWd1cmF0aW9uIGNhbiBsb29rIGxpa2UgdGhpc1xuICpcbiAqIGBgYGh0bWxcbiAqIDxzY3JpcHQgaWQ9XCJjb25maWdcIlxuICogICAgICAgICB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiPlxuICogICAgIHtcbiAqICAgICAgICAgXCJ1cmxcIjogXCIuL2NvbnRlbnQuaHRtbFwiLFxuICogICAgIH1cbiAqIDwvc2NyaXB0PlxuICpcbiAqIDxtb25zdGVyLXJlbG9hZCBkYXRhLW1vbnN0ZXItb3B0aW9ucy1zZWxlY3Rvcj1cIiNjb25maWdcIj5cbiAqIDwvbW9uc3Rlci1yZWxvYWQ+XG4gKiBgYGBcbiAqXG4gKiBJZiB5b3Ugd2FudCB0byBkaXNwbGF5IGEgbG9hZGVyLCB5b3UgY2FuIGluc2VydCBhIGRpdiB3aXRoIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGFpbmVyXCJgLlxuICogVGhlIGNvbnRlbnQgb2YgdGhpcyBkaXYgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgbG9hZGVkIGNvZGUuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItcmVsb2FkIGRhdGEtbW9uc3Rlci1vcHRpb25zLXNlbGVjdG9yPVwiI2NvbmZpZ1wiPlxuICogPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICogTE9BREVSIC4uLlxuICogPC9kaXY+XG4gKiA8L21vbnN0ZXItcmVsb2FkPlxuICogYGBgXG4gKlxuICogSWYgeW91IG5lZWQgYWRkaXRpb25hbCBzdHJ1Y3R1cmUsIHlvdSBjYW4gc2ltcGx5IHNwZWNpZnkgaXQuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItcmVsb2FkIGRhdGEtbW9uc3Rlci1vcHRpb25zLXNlbGVjdG9yPVwiI2NvbmZpZ1wiPlxuICogPGRpdiBjbGFzcz1cInJvd1wiPlxuICogICA8ZGl2IGNsYXNzPVwiY29sXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj5cbiAqICAgICAgIExPQURFUiAuLi5cbiAqICAgPC9kaXY+XG4gKiA8L2Rpdj5cbiAqIDwvbW9uc3Rlci1yZWxvYWQ+XG4gKiBgYGBcbiAqXG4gKiBAc3RhcnR1bWwgcmVsb2FkLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gQ3VzdG9tQ29udHJvbFxuICogQ3VzdG9tQ29udHJvbCA8fC0tIFJlbG9hZFxuICogQGVuZHVtbFxuICpcbiAqIEBzaW5jZSAxLjEzLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzdW1tYXJ5IEEgcmVsb2FkIGNvbnRyb2xcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5ldmVudDptb25zdGVyLWZldGNoZWRcbiAqL1xuY2xhc3MgUmVsb2FkIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvZm9ybS9yZWxvYWRcIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHVybD11bmRlZmluZWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlbG9hZD11bmRlZmluZWQgY3VycmVudGx5IHRoZSB2YWx1ZXMgZGVmaW5lZCBhcmUgYG9uc2hvd2AgYW5kIGBhbHdheXNgLiBUaGUgZGVmYXVsdCBgb25zaG93YCByZW1vdmVzIHRoZSBJbnRlcnNlY3Rpb25PYnNlcnZlci4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb250ZW50IGlzIG9ubHkgbG9hZGVkIG9uY2UuIHJlbG9hZGluZyBvZiB0aGUgY29udGVudCBkb2VzIG5vdCBvY2N1ci5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGZpbHRlcj11bmRlZmluZWQgZG9tIHNlbGVjdG9ycyB0byBzZWFyY2ggZm9yIGVsZW1lbnRzLCBpZiB1bmRlZmluZWQgdGhlbiBldmVyeXRoaW5nIGlzIHRha2VuXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUHJvY2Vzc29yW119IHByb2Nlc3NvcnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoIEZldGNoIFtzZWUgVXNpbmcgRmV0Y2ggbW96aWxsYS5vcmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEkvVXNpbmdfRmV0Y2gpXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5yZWRpcmVjdD1lcnJvclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubWV0aG9kPUdFVFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubW9kZT1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2guY3JlZGVudGlhbHM9c2FtZS1vcmlnaW5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoLmhlYWRlcnM9e1wiYWNjZXB0XCI6XCJ0ZXh0L2h0bWxcIn19XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdFx0e1xuXHRcdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZS5jYWxsKHRoaXMpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzaGFkb3dNb2RlOiBmYWxzZSxcblx0XHRcdFx0dXJsOiB1bmRlZmluZWQsXG5cdFx0XHRcdHJlbG9hZDogXCJvbnNob3dcIixcblx0XHRcdFx0ZmlsdGVyOiB1bmRlZmluZWQsXG5cdFx0XHRcdGZldGNoOiB7XG5cdFx0XHRcdFx0cmVkaXJlY3Q6IFwiZXJyb3JcIixcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdFx0bW9kZTogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRcdGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRcdFx0YWNjZXB0OiBcInRleHQvaHRtbFwiLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0aW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzLmNhbGwodGhpcyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHdoaWNoIGF0dHJpYnV0ZXMgYXJlIHRvIGJlIG1vbml0b3JlZCBieSBgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKClgLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmdbXX1cblx0ICovXG5cdHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuXHRcdGNvbnN0IGxpc3QgPSBzdXBlci5vYnNlcnZlZEF0dHJpYnV0ZXM7XG5cdFx0bGlzdC5wdXNoKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cdFx0cmV0dXJuIGxpc3Q7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdFtpbml0TWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlcltpbml0TWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0Ly8gZGF0YS1tb25zdGVyLW9wdGlvbnNcblx0XHR0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtBVFRSSUJVVEVfRk9STV9VUkxdID0gKHVybCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCkpIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJ1cmxcIiwgbmV3IFVSTCh1cmwsIGRvY3VtZW50LmxvY2F0aW9uKS50b1N0cmluZygpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwidXJsXCIsIHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBkZWZhdWx0IHNsb3Rcblx0ICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcblx0ICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgdXJsXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGFcblx0ICogQHRocm93cyB7RXJyb3J9IHJlcXVlc3QgZmFpbGVkXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBub3QgZm91bmRcblx0ICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuXHQgKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkZvcm0uZXZlbnQ6bW9uc3Rlci1mZXRjaGVkXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLkZvcm19XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRJbnRlcnNlY3Rpb25PYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1yZWxvYWRcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBsb2FkIGNvbnRlbnQgZnJvbSB1cmxcblx0ICpcblx0ICogSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgdGhhdCB3aXRoIHRoaXMgZnVuY3Rpb24gdGhlIGxvYWRpbmcgaXMgZXhlY3V0ZWRcblx0ICogZGlyZWN0bHkuIGl0IGlzIGxvYWRlZCBhcyB3ZWxsIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IHZpc2libGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gdXJsXG5cdCAqL1xuXHRmZXRjaCh1cmwpIHtcblx0XHRpZiAoaXNTdHJpbmcodXJsKSB8fCB1cmwgaW5zdGFuY2VvZiBVUkwpIHtcblx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCwgYCR7dXJsfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBsb2FkQ29udGVudC5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBgYGBcbiAqIDxtb25zdGVyLXNlbGVjdCBkYXRhLW1vbnN0ZXItdXJsPVwiaHR0cHM6Ly9leGFtcGxlLmNvbS9cIj48L21vbnN0ZXItc2VsZWN0PlxuICogYGBgXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzKCkge1xuXHRjb25zdCBvcHRpb25zID0ge307XG5cblx0Y29uc3QgdXJsID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKTtcblxuXHRpZiAoaXNTdHJpbmcodXJsKSkge1xuXHRcdG9wdGlvbnNbXCJ1cmxcIl0gPSBuZXcgVVJMKHVybCwgZG9jdW1lbnQubG9jYXRpb24pLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKSkge1xuXHRcdG9wdGlvbnNbXCJyZWxvYWRcIl0gPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9SRUxPQUQpLnRvTG93ZXJDYXNlKCk7XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgZGVmYXVsdCBzbG90XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgdXJsXG4gKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gcmVxdWVzdCBmYWlsZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBub3QgZm91bmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5ldmVudDptb25zdGVyLWZldGNoZWRcbiAqL1xuZnVuY3Rpb24gaW5pdEludGVyc2VjdGlvbk9ic2VydmVyKCkge1xuXHRpZiAodGhpc1tpbnRlcnNlY3Rpb25PYnNlcnZlcldhc0luaXRpYWxpemVkXSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXNbaW50ZXJzZWN0aW9uT2JzZXJ2ZXJXYXNJbml0aWFsaXplZF0gPSB0cnVlO1xuXG5cdGNvbnN0IG9wdGlvbnMgPSB7XG5cdFx0dGhyZXNob2xkOiBbMC41XSxcblx0fTtcblxuXHRjb25zdCBjYWxsYmFjayA9IChlbnRyaWVzLCBvYnNlcnZlcikgPT4ge1xuXHRcdGZvciAoY29uc3QgWywgZW50cnldIG9mIGVudHJpZXMuZW50cmllcygpKSB7XG5cdFx0XHRpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcgPT09IHRydWUpIHtcblx0XHRcdFx0Ly8gdW5kZWZpbmVkIG9yIGFsd2F5cyBkbyB0aGUgc2FtZVxuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJyZWxvYWRcIikgPT09IFwib25zaG93XCIpIHtcblx0XHRcdFx0XHRvYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGxvYWRDb250ZW50LmNhbGwodGhpcykuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGNhbGxiYWNrLCBvcHRpb25zKTtcblx0b2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgZGVmYXVsdCBzbG90XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgdXJsXG4gKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gcmVxdWVzdCBmYWlsZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBub3QgZm91bmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBjbGllbnQgZXJyb3JcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLmV2ZW50Om1vbnN0ZXItZmV0Y2hlZFxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqL1xuZnVuY3Rpb24gbG9hZENvbnRlbnQoKSB7XG5cdGNvbnN0IHVybCA9IHRoaXMuZ2V0T3B0aW9uKFwidXJsXCIsIHVuZGVmaW5lZCk7XG5cdGlmICghaXNTdHJpbmcodXJsKSB8fCB1cmwgPT09IFwiXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIHVybFwiKTtcblx0fVxuXG5cdGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcImZldGNoXCIsIHt9KTtcblxuXHRsZXQgcGFyZW50Tm9kZSA9IHRoaXM7XG5cdGlmICh0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHRwYXJlbnROb2RlID0gdGhpcy5zaGFkb3dSb290O1xuXHR9XG5cblx0bGV0IGNvbnRhaW5lciA9IHBhcmVudE5vZGUucXVlcnlTZWxlY3RvcihgWyR7QVRUUklCVVRFX1JPTEV9PWNvbnRhaW5lcl1gKTtcblx0bGV0IGN1cnJlbnREaXNwbGF5TW9kZSA9IGNvbnRhaW5lcj8uc3R5bGU/LmRpc3BsYXk7XG5cblx0aWYgKGN1cnJlbnREaXNwbGF5TW9kZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y3VycmVudERpc3BsYXlNb2RlID0gXCJpbmhlcml0XCI7XG5cdH1cblxuXHRpZiAoIShjb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdGNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdFx0Y29udGFpbmVyLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSwgXCJjb250YWluZXJcIik7XG5cdFx0cGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuXHR9XG5cblx0cmV0dXJuIGxvYWRBbmRBc3NpZ25Db250ZW50KGNvbnRhaW5lciwgdXJsLCBvcHRpb25zLCB0aGlzLmdldE9wdGlvbihcImZpbHRlclwiKSlcblx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRpZiAoY3VycmVudERpc3BsYXlNb2RlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBjdXJyZW50RGlzcGxheU1vZGU7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdHRocm93IGU7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdHJldHVybiB0aGlzLmlubmVySFRNTDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFJlbG9hZCk7XG4iLCAiLyohXG4gKiBNSVQgTGljZW5zZVxuICogXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMiBQZWN1bGlhciBWZW50dXJlcywgTExDXG4gKiBcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqIFxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICogXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqIFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgQVJSQVlfQlVGRkVSX05BTUUgPSBcIltvYmplY3QgQXJyYXlCdWZmZXJdXCI7XG5jbGFzcyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIge1xuICAgIHN0YXRpYyBpc0FycmF5QnVmZmVyKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkYXRhKSA9PT0gQVJSQVlfQlVGRkVSX05BTUU7XG4gICAgfVxuICAgIHN0YXRpYyB0b0FycmF5QnVmZmVyKGRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBcnJheUJ1ZmZlcihkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEuYnl0ZUxlbmd0aCA9PT0gZGF0YS5idWZmZXIuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLmJ5dGVPZmZzZXQgPT09IDAgJiYgZGF0YS5ieXRlTGVuZ3RoID09PSBkYXRhLmJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudG9VaW50OEFycmF5KGRhdGEuYnVmZmVyKVxuICAgICAgICAgICAgLnNsaWNlKGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlT2Zmc2V0ICsgZGF0YS5ieXRlTGVuZ3RoKVxuICAgICAgICAgICAgLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIHRvVWludDhBcnJheShkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvVmlldyhkYXRhLCBVaW50OEFycmF5KTtcbiAgICB9XG4gICAgc3RhdGljIHRvVmlldyhkYXRhLCB0eXBlKSB7XG4gICAgICAgIGlmIChkYXRhLmNvbnN0cnVjdG9yID09PSB0eXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHR5cGUoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgdHlwZShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgcHJvdmlkZWQgdmFsdWUgaXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICB9XG4gICAgc3RhdGljIGlzQnVmZmVyU291cmNlKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSlcbiAgICAgICAgICAgIHx8IHRoaXMuaXNBcnJheUJ1ZmZlcihkYXRhKTtcbiAgICB9XG4gICAgc3RhdGljIGlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKVxuICAgICAgICAgICAgfHwgKGRhdGEgJiYgdGhpcy5pc0FycmF5QnVmZmVyKGRhdGEuYnVmZmVyKSk7XG4gICAgfVxuICAgIHN0YXRpYyBpc0VxdWFsKGEsIGIpIHtcbiAgICAgICAgY29uc3QgYVZpZXcgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGEpO1xuICAgICAgICBjb25zdCBiVmlldyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYik7XG4gICAgICAgIGlmIChhVmlldy5sZW5ndGggIT09IGJWaWV3LmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFWaWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoYVZpZXdbaV0gIT09IGJWaWV3W2ldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBzdGF0aWMgY29uY2F0KC4uLmFyZ3MpIHtcbiAgICAgICAgbGV0IGJ1ZmZlcnM7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3NbMF0pICYmICEoYXJnc1sxXSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkge1xuICAgICAgICAgICAgYnVmZmVycyA9IGFyZ3NbMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmdzWzBdKSAmJiBhcmdzWzFdIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIGJ1ZmZlcnMgPSBhcmdzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGFyZ3NbYXJncy5sZW5ndGggLSAxXSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVycyA9IGFyZ3Muc2xpY2UoMCwgYXJncy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJ1ZmZlcnMgPSBhcmdzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBzaXplID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBidWZmZXIgb2YgYnVmZmVycykge1xuICAgICAgICAgICAgc2l6ZSArPSBidWZmZXIuYnl0ZUxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShzaXplKTtcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnRvVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICAgICAgcmVzLnNldCh2aWV3LCBvZmZzZXQpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IHZpZXcubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9WaWV3KHJlcywgYXJnc1thcmdzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzLmJ1ZmZlcjtcbiAgICB9XG59XG5cbmNvbnN0IFNUUklOR19UWVBFID0gXCJzdHJpbmdcIjtcbmNvbnN0IEhFWF9SRUdFWCA9IC9eWzAtOWEtZl0rJC9pO1xuY29uc3QgQkFTRTY0X1JFR0VYID0gL14oPzpbQS1aYS16MC05Ky9dezR9KSooPzpbQS1aYS16MC05Ky9dezJ9PT18W0EtWmEtejAtOSsvXXszfT0pPyQvO1xuY29uc3QgQkFTRTY0VVJMX1JFR0VYID0gL15bYS16QS1aMC05LV9dKyQvO1xuY2xhc3MgVXRmOENvbnZlcnRlciB7XG4gICAgc3RhdGljIGZyb21TdHJpbmcodGV4dCkge1xuICAgICAgICBjb25zdCBzID0gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHRleHQpKTtcbiAgICAgICAgY29uc3QgdWludEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkocy5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHVpbnRBcnJheVtpXSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdWludEFycmF5LmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIHRvU3RyaW5nKGJ1ZmZlcikge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGxldCBlbmNvZGVkU3RyaW5nID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGVuY29kZWRTdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlY29kZWRTdHJpbmcgPSBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGVuY29kZWRTdHJpbmcpKTtcbiAgICAgICAgcmV0dXJuIGRlY29kZWRTdHJpbmc7XG4gICAgfVxufVxuY2xhc3MgVXRmMTZDb252ZXJ0ZXIge1xuICAgIHN0YXRpYyB0b1N0cmluZyhidWZmZXIsIGxpdHRsZUVuZGlhbiA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoYnVmZmVyKTtcbiAgICAgICAgY29uc3QgZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcoYXJyYXlCdWZmZXIpO1xuICAgICAgICBsZXQgcmVzID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBkYXRhVmlldy5nZXRVaW50MTYoaSwgbGl0dGxlRW5kaWFuKTtcbiAgICAgICAgICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tU3RyaW5nKHRleHQsIGxpdHRsZUVuZGlhbiA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBBcnJheUJ1ZmZlcih0ZXh0Lmxlbmd0aCAqIDIpO1xuICAgICAgICBjb25zdCBkYXRhVmlldyA9IG5ldyBEYXRhVmlldyhyZXMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRhdGFWaWV3LnNldFVpbnQxNihpICogMiwgdGV4dC5jaGFyQ29kZUF0KGkpLCBsaXR0bGVFbmRpYW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufVxuY2xhc3MgQ29udmVydCB7XG4gICAgc3RhdGljIGlzSGV4KGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSBTVFJJTkdfVFlQRVxuICAgICAgICAgICAgJiYgSEVYX1JFR0VYLnRlc3QoZGF0YSk7XG4gICAgfVxuICAgIHN0YXRpYyBpc0Jhc2U2NChkYXRhKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gU1RSSU5HX1RZUEVcbiAgICAgICAgICAgICYmIEJBU0U2NF9SRUdFWC50ZXN0KGRhdGEpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNCYXNlNjRVcmwoZGF0YSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09IFNUUklOR19UWVBFXG4gICAgICAgICAgICAmJiBCQVNFNjRVUkxfUkVHRVgudGVzdChkYXRhKTtcbiAgICB9XG4gICAgc3RhdGljIFRvU3RyaW5nKGJ1ZmZlciwgZW5jID0gXCJ1dGY4XCIpIHtcbiAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICBzd2l0Y2ggKGVuYy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwidXRmOFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRvVXRmOFN0cmluZyhidWYpO1xuICAgICAgICAgICAgY2FzZSBcImJpbmFyeVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRvQmluYXJ5KGJ1Zik7XG4gICAgICAgICAgICBjYXNlIFwiaGV4XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuVG9IZXgoYnVmKTtcbiAgICAgICAgICAgIGNhc2UgXCJiYXNlNjRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Ub0Jhc2U2NChidWYpO1xuICAgICAgICAgICAgY2FzZSBcImJhc2U2NHVybFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRvQmFzZTY0VXJsKGJ1Zik7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZsZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci50b1N0cmluZyhidWYsIHRydWUpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2XCI6XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZiZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci50b1N0cmluZyhidWYpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHlwZSBvZiBlbmNvZGluZyAnJHtlbmN9J2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tU3RyaW5nKHN0ciwgZW5jID0gXCJ1dGY4XCIpIHtcbiAgICAgICAgaWYgKCFzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChlbmMudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcInV0ZjhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Gcm9tVXRmOFN0cmluZyhzdHIpO1xuICAgICAgICAgICAgY2FzZSBcImJpbmFyeVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkZyb21CaW5hcnkoc3RyKTtcbiAgICAgICAgICAgIGNhc2UgXCJoZXhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Gcm9tSGV4KHN0cik7XG4gICAgICAgICAgICBjYXNlIFwiYmFzZTY0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRnJvbUJhc2U2NChzdHIpO1xuICAgICAgICAgICAgY2FzZSBcImJhc2U2NHVybFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkZyb21CYXNlNjRVcmwoc3RyKTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmxlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLmZyb21TdHJpbmcoc3RyLCB0cnVlKTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNlwiOlxuICAgICAgICAgICAgY2FzZSBcInV0ZjE2YmVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIuZnJvbVN0cmluZyhzdHIpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHlwZSBvZiBlbmNvZGluZyAnJHtlbmN9J2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBUb0Jhc2U2NChidWZmZXIpIHtcbiAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICBpZiAodHlwZW9mIGJ0b2EgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmFyeSA9IHRoaXMuVG9TdHJpbmcoYnVmLCBcImJpbmFyeVwiKTtcbiAgICAgICAgICAgIHJldHVybiBidG9hKGJpbmFyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYnVmKS50b1N0cmluZyhcImJhc2U2NFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgRnJvbUJhc2U2NChiYXNlNjQpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gdGhpcy5mb3JtYXRTdHJpbmcoYmFzZTY0KTtcbiAgICAgICAgaWYgKCFmb3JtYXR0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFDb252ZXJ0LmlzQmFzZTY0KGZvcm1hdHRlZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCAnYmFzZTY0VGV4dCcgaXMgbm90IEJhc2U2NCBlbmNvZGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXRvYiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuRnJvbUJpbmFyeShhdG9iKGZvcm1hdHRlZCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKGZvcm1hdHRlZCwgXCJiYXNlNjRcIikpLmJ1ZmZlcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgRnJvbUJhc2U2NFVybChiYXNlNjR1cmwpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gdGhpcy5mb3JtYXRTdHJpbmcoYmFzZTY0dXJsKTtcbiAgICAgICAgaWYgKCFmb3JtYXR0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFDb252ZXJ0LmlzQmFzZTY0VXJsKGZvcm1hdHRlZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCAnYmFzZTY0dXJsJyBpcyBub3QgQmFzZTY0VXJsIGVuY29kZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuRnJvbUJhc2U2NCh0aGlzLkJhc2U2NFBhZGRpbmcoZm9ybWF0dGVkLnJlcGxhY2UoL1xcLS9nLCBcIitcIikucmVwbGFjZSgvXFxfL2csIFwiL1wiKSkpO1xuICAgIH1cbiAgICBzdGF0aWMgVG9CYXNlNjRVcmwoZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5Ub0Jhc2U2NChkYXRhKS5yZXBsYWNlKC9cXCsvZywgXCItXCIpLnJlcGxhY2UoL1xcLy9nLCBcIl9cIikucmVwbGFjZSgvXFw9L2csIFwiXCIpO1xuICAgIH1cbiAgICBzdGF0aWMgRnJvbVV0ZjhTdHJpbmcodGV4dCwgZW5jb2RpbmcgPSBDb252ZXJ0LkRFRkFVTFRfVVRGOF9FTkNPRElORykge1xuICAgICAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICAgICAgICBjYXNlIFwiYXNjaWlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Gcm9tQmluYXJ5KHRleHQpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmOENvbnZlcnRlci5mcm9tU3RyaW5nKHRleHQpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2XCI6XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZiZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci5mcm9tU3RyaW5nKHRleHQpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2bGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1c2MyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLmZyb21TdHJpbmcodGV4dCwgdHJ1ZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlIG9mIGVuY29kaW5nICcke2VuY29kaW5nfSdgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgVG9VdGY4U3RyaW5nKGJ1ZmZlciwgZW5jb2RpbmcgPSBDb252ZXJ0LkRFRkFVTFRfVVRGOF9FTkNPRElORykge1xuICAgICAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICAgICAgICBjYXNlIFwiYXNjaWlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Ub0JpbmFyeShidWZmZXIpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmOENvbnZlcnRlci50b1N0cmluZyhidWZmZXIpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2XCI6XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZiZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci50b1N0cmluZyhidWZmZXIpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2bGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1c2MyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLnRvU3RyaW5nKGJ1ZmZlciwgdHJ1ZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlIG9mIGVuY29kaW5nICcke2VuY29kaW5nfSdgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgRnJvbUJpbmFyeSh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IHN0cmluZ0xlbmd0aCA9IHRleHQubGVuZ3RoO1xuICAgICAgICBjb25zdCByZXN1bHRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc3RyaW5nTGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmdMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmVzdWx0Vmlld1tpXSA9IHRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0Vmlldy5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBUb0JpbmFyeShidWZmZXIpIHtcbiAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICBsZXQgcmVzID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIFRvSGV4KGJ1ZmZlcikge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xuICAgICAgICBjb25zdCBsZW4gPSBidWYubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBieXRlID0gYnVmW2ldO1xuICAgICAgICAgICAgaWYgKGJ5dGUgPCAxNikge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBcIjBcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCArPSBieXRlLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBzdGF0aWMgRnJvbUhleChoZXhTdHJpbmcpIHtcbiAgICAgICAgbGV0IGZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0U3RyaW5nKGhleFN0cmluZyk7XG4gICAgICAgIGlmICghZm9ybWF0dGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghQ29udmVydC5pc0hleChmb3JtYXR0ZWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgJ2hleFN0cmluZycgaXMgbm90IEhFWCBlbmNvZGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXR0ZWQubGVuZ3RoICUgMikge1xuICAgICAgICAgICAgZm9ybWF0dGVkID0gYDAke2Zvcm1hdHRlZH1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KGZvcm1hdHRlZC5sZW5ndGggLyAyKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3JtYXR0ZWQubGVuZ3RoOyBpID0gaSArIDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBmb3JtYXR0ZWQuc2xpY2UoaSwgaSArIDIpO1xuICAgICAgICAgICAgcmVzW2kgLyAyXSA9IHBhcnNlSW50KGMsIDE2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIFRvVXRmMTZTdHJpbmcoYnVmZmVyLCBsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIudG9TdHJpbmcoYnVmZmVyLCBsaXR0bGVFbmRpYW4pO1xuICAgIH1cbiAgICBzdGF0aWMgRnJvbVV0ZjE2U3RyaW5nKHRleHQsIGxpdHRsZUVuZGlhbiA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci5mcm9tU3RyaW5nKHRleHQsIGxpdHRsZUVuZGlhbik7XG4gICAgfVxuICAgIHN0YXRpYyBCYXNlNjRQYWRkaW5nKGJhc2U2NCkge1xuICAgICAgICBjb25zdCBwYWRDb3VudCA9IDQgLSAoYmFzZTY0Lmxlbmd0aCAlIDQpO1xuICAgICAgICBpZiAocGFkQ291bnQgPCA0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhZENvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICBiYXNlNjQgKz0gXCI9XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJhc2U2NDtcbiAgICB9XG4gICAgc3RhdGljIGZvcm1hdFN0cmluZyhkYXRhKSB7XG4gICAgICAgIHJldHVybiAoZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkYXRhLnJlcGxhY2UoL1tcXG5cXHJcXHQgXS9nLCBcIlwiKSkgfHwgXCJcIjtcbiAgICB9XG59XG5Db252ZXJ0LkRFRkFVTFRfVVRGOF9FTkNPRElORyA9IFwidXRmOFwiO1xuXG5mdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCAuLi5zb3VyY2VzKSB7XG4gICAgY29uc3QgcmVzID0gYXJndW1lbnRzWzBdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIG9iaikge1xuICAgICAgICAgICAgcmVzW3Byb3BdID0gb2JqW3Byb3BdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBjb21iaW5lKC4uLmJ1Zikge1xuICAgIGNvbnN0IHRvdGFsQnl0ZUxlbmd0aCA9IGJ1Zi5tYXAoKGl0ZW0pID0+IGl0ZW0uYnl0ZUxlbmd0aCkucmVkdWNlKChwcmV2LCBjdXIpID0+IHByZXYgKyBjdXIpO1xuICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHRvdGFsQnl0ZUxlbmd0aCk7XG4gICAgbGV0IGN1cnJlbnRQb3MgPSAwO1xuICAgIGJ1Zi5tYXAoKGl0ZW0pID0+IG5ldyBVaW50OEFycmF5KGl0ZW0pKS5mb3JFYWNoKChhcnIpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtMiBvZiBhcnIpIHtcbiAgICAgICAgICAgIHJlc1tjdXJyZW50UG9zKytdID0gaXRlbTI7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzLmJ1ZmZlcjtcbn1cbmZ1bmN0aW9uIGlzRXF1YWwoYnl0ZXMxLCBieXRlczIpIHtcbiAgICBpZiAoIShieXRlczEgJiYgYnl0ZXMyKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChieXRlczEuYnl0ZUxlbmd0aCAhPT0gYnl0ZXMyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBiMSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzMSk7XG4gICAgY29uc3QgYjIgPSBuZXcgVWludDhBcnJheShieXRlczIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMxLmJ5dGVMZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYjFbaV0gIT09IGIyW2ldKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydHMuQnVmZmVyU291cmNlQ29udmVydGVyID0gQnVmZmVyU291cmNlQ29udmVydGVyO1xuZXhwb3J0cy5Db252ZXJ0ID0gQ29udmVydDtcbmV4cG9ydHMuYXNzaWduID0gYXNzaWduO1xuZXhwb3J0cy5jb21iaW5lID0gY29tYmluZTtcbmV4cG9ydHMuaXNFcXVhbCA9IGlzRXF1YWw7XG4iLCAiLyohXG4gQ29weXJpZ2h0IChjKSBQZWN1bGlhciBWZW50dXJlcywgTExDXG4qL1xuXG5mdW5jdGlvbiBnZXRVVENEYXRlKGRhdGUpIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSArIChkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCkpO1xyXG59XHJcbmZ1bmN0aW9uIGdldFBhcmFtZXRlcnNWYWx1ZShwYXJhbWV0ZXJzLCBuYW1lLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgIHZhciBfYTtcclxuICAgIGlmICgocGFyYW1ldGVycyBpbnN0YW5jZW9mIE9iamVjdCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiAoX2EgPSBwYXJhbWV0ZXJzW25hbWVdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBkZWZhdWx0VmFsdWU7XHJcbn1cclxuZnVuY3Rpb24gYnVmZmVyVG9IZXhDb2RlcyhpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQgPSAwLCBpbnB1dExlbmd0aCA9IChpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoIC0gaW5wdXRPZmZzZXQpLCBpbnNlcnRTcGFjZSA9IGZhbHNlKSB7XHJcbiAgICBsZXQgcmVzdWx0ID0gXCJcIjtcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiAobmV3IFVpbnQ4QXJyYXkoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyID0gaXRlbS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXN1bHQgKz0gXCIwXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdCArPSBzdHI7XHJcbiAgICAgICAgaWYgKGluc2VydFNwYWNlKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBcIiBcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0LnRyaW0oKTtcclxufVxyXG5mdW5jdGlvbiBjaGVja0J1ZmZlclBhcmFtcyhiYXNlQmxvY2ssIGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgIGlmICghKGlucHV0QnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0QnVmZmVyIG11c3QgYmUgXFxcIkFycmF5QnVmZmVyXFxcIlwiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICghaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dEJ1ZmZlciBoYXMgemVybyBsZW5ndGhcIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRPZmZzZXQgPCAwKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0T2Zmc2V0IGxlc3MgdGhhbiB6ZXJvXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0TGVuZ3RoIDwgMCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dExlbmd0aCBsZXNzIHRoYW4gemVyb1wiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICgoaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCAtIGlucHV0T2Zmc2V0IC0gaW5wdXRMZW5ndGgpIDwgMCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWQgKGluY29uc2lzdGVudCBvZmZzZXQgYW5kIGxlbmd0aCB2YWx1ZXMpXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuZnVuY3Rpb24gdXRpbEZyb21CYXNlKGlucHV0QnVmZmVyLCBpbnB1dEJhc2UpIHtcclxuICAgIGxldCByZXN1bHQgPSAwO1xyXG4gICAgaWYgKGlucHV0QnVmZmVyLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIHJldHVybiBpbnB1dEJ1ZmZlclswXTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAoaW5wdXRCdWZmZXIubGVuZ3RoIC0gMSk7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgcmVzdWx0ICs9IGlucHV0QnVmZmVyWyhpbnB1dEJ1ZmZlci5sZW5ndGggLSAxKSAtIGldICogTWF0aC5wb3coMiwgaW5wdXRCYXNlICogaSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcbmZ1bmN0aW9uIHV0aWxUb0Jhc2UodmFsdWUsIGJhc2UsIHJlc2VydmVkID0gKC0xKSkge1xyXG4gICAgY29uc3QgaW50ZXJuYWxSZXNlcnZlZCA9IHJlc2VydmVkO1xyXG4gICAgbGV0IGludGVybmFsVmFsdWUgPSB2YWx1ZTtcclxuICAgIGxldCByZXN1bHQgPSAwO1xyXG4gICAgbGV0IGJpZ2dlc3QgPSBNYXRoLnBvdygyLCBiYXNlKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlIDwgYmlnZ2VzdCkge1xyXG4gICAgICAgICAgICBsZXQgcmV0QnVmO1xyXG4gICAgICAgICAgICBpZiAoaW50ZXJuYWxSZXNlcnZlZCA8IDApIHtcclxuICAgICAgICAgICAgICAgIHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcihpKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxSZXNlcnZlZCA8IGkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5ldyBBcnJheUJ1ZmZlcigwKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIoaW50ZXJuYWxSZXNlcnZlZCk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpbnRlcm5hbFJlc2VydmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gKGkgLSAxKTsgaiA+PSAwOyBqLS0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2lzID0gTWF0aC5wb3coMiwgaiAqIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tyZXN1bHQgLSBqIC0gMV0gPSBNYXRoLmZsb29yKGludGVybmFsVmFsdWUgLyBiYXNpcyk7XHJcbiAgICAgICAgICAgICAgICBpbnRlcm5hbFZhbHVlIC09IChyZXRWaWV3W3Jlc3VsdCAtIGogLSAxXSkgKiBiYXNpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgICAgIH1cclxuICAgICAgICBiaWdnZXN0ICo9IE1hdGgucG93KDIsIGJhc2UpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcclxufVxyXG5mdW5jdGlvbiB1dGlsQ29uY2F0QnVmKC4uLmJ1ZmZlcnMpIHtcclxuICAgIGxldCBvdXRwdXRMZW5ndGggPSAwO1xyXG4gICAgbGV0IHByZXZMZW5ndGggPSAwO1xyXG4gICAgZm9yIChjb25zdCBidWZmZXIgb2YgYnVmZmVycykge1xyXG4gICAgICAgIG91dHB1dExlbmd0aCArPSBidWZmZXIuYnl0ZUxlbmd0aDtcclxuICAgIH1cclxuICAgIGNvbnN0IHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcihvdXRwdXRMZW5ndGgpO1xyXG4gICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiBidWZmZXJzKSB7XHJcbiAgICAgICAgcmV0Vmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSwgcHJldkxlbmd0aCk7XHJcbiAgICAgICAgcHJldkxlbmd0aCArPSBidWZmZXIuYnl0ZUxlbmd0aDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXRCdWY7XHJcbn1cclxuZnVuY3Rpb24gdXRpbENvbmNhdFZpZXcoLi4udmlld3MpIHtcclxuICAgIGxldCBvdXRwdXRMZW5ndGggPSAwO1xyXG4gICAgbGV0IHByZXZMZW5ndGggPSAwO1xyXG4gICAgZm9yIChjb25zdCB2aWV3IG9mIHZpZXdzKSB7XHJcbiAgICAgICAgb3V0cHV0TGVuZ3RoICs9IHZpZXcubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKG91dHB1dExlbmd0aCk7XHJcbiAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgIGZvciAoY29uc3QgdmlldyBvZiB2aWV3cykge1xyXG4gICAgICAgIHJldFZpZXcuc2V0KHZpZXcsIHByZXZMZW5ndGgpO1xyXG4gICAgICAgIHByZXZMZW5ndGggKz0gdmlldy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0VmlldztcclxufVxyXG5mdW5jdGlvbiB1dGlsRGVjb2RlVEMoKSB7XHJcbiAgICBjb25zdCBidWYgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlSGV4KTtcclxuICAgIGlmICh0aGlzLnZhbHVlSGV4LmJ5dGVMZW5ndGggPj0gMikge1xyXG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbjEgPSAoYnVmWzBdID09PSAweEZGKSAmJiAoYnVmWzFdICYgMHg4MCk7XHJcbiAgICAgICAgY29uc3QgY29uZGl0aW9uMiA9IChidWZbMF0gPT09IDB4MDApICYmICgoYnVmWzFdICYgMHg4MCkgPT09IDB4MDApO1xyXG4gICAgICAgIGlmIChjb25kaXRpb24xIHx8IGNvbmRpdGlvbjIpIHtcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiTmVlZGxlc3NseSBsb25nIGZvcm1hdFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBiaWdJbnRCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleC5ieXRlTGVuZ3RoKTtcclxuICAgIGNvbnN0IGJpZ0ludFZpZXcgPSBuZXcgVWludDhBcnJheShiaWdJbnRCdWZmZXIpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlSGV4LmJ5dGVMZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGJpZ0ludFZpZXdbaV0gPSAwO1xyXG4gICAgfVxyXG4gICAgYmlnSW50Vmlld1swXSA9IChidWZbMF0gJiAweDgwKTtcclxuICAgIGNvbnN0IGJpZ0ludCA9IHV0aWxGcm9tQmFzZShiaWdJbnRWaWV3LCA4KTtcclxuICAgIGNvbnN0IHNtYWxsSW50QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHRoaXMudmFsdWVIZXguYnl0ZUxlbmd0aCk7XHJcbiAgICBjb25zdCBzbWFsbEludFZpZXcgPSBuZXcgVWludDhBcnJheShzbWFsbEludEJ1ZmZlcik7XHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMudmFsdWVIZXguYnl0ZUxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgc21hbGxJbnRWaWV3W2pdID0gYnVmW2pdO1xyXG4gICAgfVxyXG4gICAgc21hbGxJbnRWaWV3WzBdICY9IDB4N0Y7XHJcbiAgICBjb25zdCBzbWFsbEludCA9IHV0aWxGcm9tQmFzZShzbWFsbEludFZpZXcsIDgpO1xyXG4gICAgcmV0dXJuIChzbWFsbEludCAtIGJpZ0ludCk7XHJcbn1cclxuZnVuY3Rpb24gdXRpbEVuY29kZVRDKHZhbHVlKSB7XHJcbiAgICBjb25zdCBtb2RWYWx1ZSA9ICh2YWx1ZSA8IDApID8gKHZhbHVlICogKC0xKSkgOiB2YWx1ZTtcclxuICAgIGxldCBiaWdJbnQgPSAxMjg7XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IDg7IGkrKykge1xyXG4gICAgICAgIGlmIChtb2RWYWx1ZSA8PSBiaWdJbnQpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc21hbGxJbnQgPSBiaWdJbnQgLSBtb2RWYWx1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldEJ1ZiA9IHV0aWxUb0Jhc2Uoc21hbGxJbnQsIDgsIGkpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3WzBdIHw9IDB4ODA7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCByZXRCdWYgPSB1dGlsVG9CYXNlKG1vZFZhbHVlLCA4LCBpKTtcclxuICAgICAgICAgICAgbGV0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgICAgICAgICBpZiAocmV0Vmlld1swXSAmIDB4ODApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBCdWYgPSByZXRCdWYuc2xpY2UoMCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wVmlldyA9IG5ldyBVaW50OEFycmF5KHRlbXBCdWYpO1xyXG4gICAgICAgICAgICAgICAgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKHJldEJ1Zi5ieXRlTGVuZ3RoICsgMSk7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGVtcEJ1Zi5ieXRlTGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICByZXRWaWV3W2sgKyAxXSA9IHRlbXBWaWV3W2tdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1swXSA9IDB4MDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYmlnSW50ICo9IE1hdGgucG93KDIsIDgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChuZXcgQXJyYXlCdWZmZXIoMCkpO1xyXG59XHJcbmZ1bmN0aW9uIGlzRXF1YWxCdWZmZXIoaW5wdXRCdWZmZXIxLCBpbnB1dEJ1ZmZlcjIpIHtcclxuICAgIGlmIChpbnB1dEJ1ZmZlcjEuYnl0ZUxlbmd0aCAhPT0gaW5wdXRCdWZmZXIyLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCB2aWV3MSA9IG5ldyBVaW50OEFycmF5KGlucHV0QnVmZmVyMSk7XHJcbiAgICBjb25zdCB2aWV3MiA9IG5ldyBVaW50OEFycmF5KGlucHV0QnVmZmVyMik7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZpZXcxLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHZpZXcxW2ldICE9PSB2aWV3MltpXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuZnVuY3Rpb24gcGFkTnVtYmVyKGlucHV0TnVtYmVyLCBmdWxsTGVuZ3RoKSB7XHJcbiAgICBjb25zdCBzdHIgPSBpbnB1dE51bWJlci50b1N0cmluZygxMCk7XHJcbiAgICBpZiAoZnVsbExlbmd0aCA8IHN0ci5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIGNvbnN0IGRpZiA9IGZ1bGxMZW5ndGggLSBzdHIubGVuZ3RoO1xyXG4gICAgY29uc3QgcGFkZGluZyA9IG5ldyBBcnJheShkaWYpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWY7IGkrKykge1xyXG4gICAgICAgIHBhZGRpbmdbaV0gPSBcIjBcIjtcclxuICAgIH1cclxuICAgIGNvbnN0IHBhZGRpbmdTdHJpbmcgPSBwYWRkaW5nLmpvaW4oXCJcIik7XHJcbiAgICByZXR1cm4gcGFkZGluZ1N0cmluZy5jb25jYXQoc3RyKTtcclxufVxyXG5jb25zdCBiYXNlNjRUZW1wbGF0ZSA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIjtcclxuY29uc3QgYmFzZTY0VXJsVGVtcGxhdGUgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV89XCI7XHJcbmZ1bmN0aW9uIHRvQmFzZTY0KGlucHV0LCB1c2VVcmxUZW1wbGF0ZSA9IGZhbHNlLCBza2lwUGFkZGluZyA9IGZhbHNlLCBza2lwTGVhZGluZ1plcm9zID0gZmFsc2UpIHtcclxuICAgIGxldCBpID0gMDtcclxuICAgIGxldCBmbGFnMSA9IDA7XHJcbiAgICBsZXQgZmxhZzIgPSAwO1xyXG4gICAgbGV0IG91dHB1dCA9IFwiXCI7XHJcbiAgICBjb25zdCB0ZW1wbGF0ZSA9ICh1c2VVcmxUZW1wbGF0ZSkgPyBiYXNlNjRVcmxUZW1wbGF0ZSA6IGJhc2U2NFRlbXBsYXRlO1xyXG4gICAgaWYgKHNraXBMZWFkaW5nWmVyb3MpIHtcclxuICAgICAgICBsZXQgbm9uWmVyb1Bvc2l0aW9uID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KGkpICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBub25aZXJvUG9zaXRpb24gPSBpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaW5wdXQgPSBpbnB1dC5zbGljZShub25aZXJvUG9zaXRpb24pO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKGkgPCBpbnB1dC5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBjaHIxID0gaW5wdXQuY2hhckNvZGVBdChpKyspO1xyXG4gICAgICAgIGlmIChpID49IGlucHV0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBmbGFnMSA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNocjIgPSBpbnB1dC5jaGFyQ29kZUF0KGkrKyk7XHJcbiAgICAgICAgaWYgKGkgPj0gaW5wdXQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZsYWcyID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2hyMyA9IGlucHV0LmNoYXJDb2RlQXQoaSsrKTtcclxuICAgICAgICBjb25zdCBlbmMxID0gY2hyMSA+PiAyO1xyXG4gICAgICAgIGNvbnN0IGVuYzIgPSAoKGNocjEgJiAweDAzKSA8PCA0KSB8IChjaHIyID4+IDQpO1xyXG4gICAgICAgIGxldCBlbmMzID0gKChjaHIyICYgMHgwRikgPDwgMikgfCAoY2hyMyA+PiA2KTtcclxuICAgICAgICBsZXQgZW5jNCA9IGNocjMgJiAweDNGO1xyXG4gICAgICAgIGlmIChmbGFnMSA9PT0gMSkge1xyXG4gICAgICAgICAgICBlbmMzID0gZW5jNCA9IDY0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGZsYWcyID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBlbmM0ID0gNjQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNraXBQYWRkaW5nKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmMzID09PSA2NCkge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGAke3RlbXBsYXRlLmNoYXJBdChlbmMxKX0ke3RlbXBsYXRlLmNoYXJBdChlbmMyKX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVuYzQgPT09IDY0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IGAke3RlbXBsYXRlLmNoYXJBdChlbmMxKX0ke3RlbXBsYXRlLmNoYXJBdChlbmMyKX0ke3RlbXBsYXRlLmNoYXJBdChlbmMzKX1gO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IGAke3RlbXBsYXRlLmNoYXJBdChlbmMxKX0ke3RlbXBsYXRlLmNoYXJBdChlbmMyKX0ke3RlbXBsYXRlLmNoYXJBdChlbmMzKX0ke3RlbXBsYXRlLmNoYXJBdChlbmM0KX1gO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBvdXRwdXQgKz0gYCR7dGVtcGxhdGUuY2hhckF0KGVuYzEpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzIpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzMpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzQpfWA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5mdW5jdGlvbiBmcm9tQmFzZTY0KGlucHV0LCB1c2VVcmxUZW1wbGF0ZSA9IGZhbHNlLCBjdXRUYWlsWmVyb3MgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgdGVtcGxhdGUgPSAodXNlVXJsVGVtcGxhdGUpID8gYmFzZTY0VXJsVGVtcGxhdGUgOiBiYXNlNjRUZW1wbGF0ZTtcclxuICAgIGZ1bmN0aW9uIGluZGV4T2YodG9TZWFyY2gpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY0OyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRlbXBsYXRlLmNoYXJBdChpKSA9PT0gdG9TZWFyY2gpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDY0O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdGVzdChpbmNvbWluZykge1xyXG4gICAgICAgIHJldHVybiAoKGluY29taW5nID09PSA2NCkgPyAweDAwIDogaW5jb21pbmcpO1xyXG4gICAgfVxyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgbGV0IG91dHB1dCA9IFwiXCI7XHJcbiAgICB3aGlsZSAoaSA8IGlucHV0Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGVuYzEgPSBpbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtcclxuICAgICAgICBjb25zdCBlbmMyID0gKGkgPj0gaW5wdXQubGVuZ3RoKSA/IDB4MDAgOiBpbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtcclxuICAgICAgICBjb25zdCBlbmMzID0gKGkgPj0gaW5wdXQubGVuZ3RoKSA/IDB4MDAgOiBpbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtcclxuICAgICAgICBjb25zdCBlbmM0ID0gKGkgPj0gaW5wdXQubGVuZ3RoKSA/IDB4MDAgOiBpbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtcclxuICAgICAgICBjb25zdCBjaHIxID0gKHRlc3QoZW5jMSkgPDwgMikgfCAodGVzdChlbmMyKSA+PiA0KTtcclxuICAgICAgICBjb25zdCBjaHIyID0gKCh0ZXN0KGVuYzIpICYgMHgwRikgPDwgNCkgfCAodGVzdChlbmMzKSA+PiAyKTtcclxuICAgICAgICBjb25zdCBjaHIzID0gKCh0ZXN0KGVuYzMpICYgMHgwMykgPDwgNikgfCB0ZXN0KGVuYzQpO1xyXG4gICAgICAgIG91dHB1dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjEpO1xyXG4gICAgICAgIGlmIChlbmMzICE9PSA2NCkge1xyXG4gICAgICAgICAgICBvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaHIyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVuYzQgIT09IDY0KSB7XHJcbiAgICAgICAgICAgIG91dHB1dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChjdXRUYWlsWmVyb3MpIHtcclxuICAgICAgICBjb25zdCBvdXRwdXRMZW5ndGggPSBvdXRwdXQubGVuZ3RoO1xyXG4gICAgICAgIGxldCBub25aZXJvU3RhcnQgPSAoLTEpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAob3V0cHV0TGVuZ3RoIC0gMSk7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIGlmIChvdXRwdXQuY2hhckNvZGVBdChpKSAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgbm9uWmVyb1N0YXJ0ID0gaTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub25aZXJvU3RhcnQgIT09ICgtMSkpIHtcclxuICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnNsaWNlKDAsIG5vblplcm9TdGFydCArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgb3V0cHV0ID0gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0cHV0O1xyXG59XHJcbmZ1bmN0aW9uIGFycmF5QnVmZmVyVG9TdHJpbmcoYnVmZmVyKSB7XHJcbiAgICBsZXQgcmVzdWx0U3RyaW5nID0gXCJcIjtcclxuICAgIGNvbnN0IHZpZXcgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xyXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHZpZXcpIHtcclxuICAgICAgICByZXN1bHRTdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShlbGVtZW50KTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRTdHJpbmc7XHJcbn1cclxuZnVuY3Rpb24gc3RyaW5nVG9BcnJheUJ1ZmZlcihzdHIpIHtcclxuICAgIGNvbnN0IHN0cmluZ0xlbmd0aCA9IHN0ci5sZW5ndGg7XHJcbiAgICBjb25zdCByZXN1bHRCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoc3RyaW5nTGVuZ3RoKTtcclxuICAgIGNvbnN0IHJlc3VsdFZpZXcgPSBuZXcgVWludDhBcnJheShyZXN1bHRCdWZmZXIpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmdMZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHJlc3VsdFZpZXdbaV0gPSBzdHIuY2hhckNvZGVBdChpKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRCdWZmZXI7XHJcbn1cclxuY29uc3QgbG9nMiA9IE1hdGgubG9nKDIpO1xyXG5mdW5jdGlvbiBuZWFyZXN0UG93ZXJPZjIobGVuZ3RoKSB7XHJcbiAgICBjb25zdCBiYXNlID0gKE1hdGgubG9nKGxlbmd0aCkgLyBsb2cyKTtcclxuICAgIGNvbnN0IGZsb29yID0gTWF0aC5mbG9vcihiYXNlKTtcclxuICAgIGNvbnN0IHJvdW5kID0gTWF0aC5yb3VuZChiYXNlKTtcclxuICAgIHJldHVybiAoKGZsb29yID09PSByb3VuZCkgPyBmbG9vciA6IHJvdW5kKTtcclxufVxyXG5mdW5jdGlvbiBjbGVhclByb3BzKG9iamVjdCwgcHJvcHNBcnJheSkge1xyXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BzQXJyYXkpIHtcclxuICAgICAgICBkZWxldGUgb2JqZWN0W3Byb3BdO1xyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IGFycmF5QnVmZmVyVG9TdHJpbmcsIGJ1ZmZlclRvSGV4Q29kZXMsIGNoZWNrQnVmZmVyUGFyYW1zLCBjbGVhclByb3BzLCBmcm9tQmFzZTY0LCBnZXRQYXJhbWV0ZXJzVmFsdWUsIGdldFVUQ0RhdGUsIGlzRXF1YWxCdWZmZXIsIG5lYXJlc3RQb3dlck9mMiwgcGFkTnVtYmVyLCBzdHJpbmdUb0FycmF5QnVmZmVyLCB0b0Jhc2U2NCwgdXRpbENvbmNhdEJ1ZiwgdXRpbENvbmNhdFZpZXcsIHV0aWxEZWNvZGVUQywgdXRpbEVuY29kZVRDLCB1dGlsRnJvbUJhc2UsIHV0aWxUb0Jhc2UgfTtcbiIsICIvKiFcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgR01PIEdsb2JhbFNpZ25cbiAqIENvcHlyaWdodCAoYykgMjAxNS0yMDIyLCBQZWN1bGlhciBWZW50dXJlc1xuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFxuICogQXV0aG9yIDIwMTQtMjAxOSwgWXVyeSBTdHJvemhldnNreVxuICogXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICogXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqIFxuICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yXG4gKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiBcbiAqICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbVxuICogICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICogXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbiAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbiAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKiBcbiAqL1xuXG5pbXBvcnQgKiBhcyBwdnRzdXRpbHMgZnJvbSAncHZ0c3V0aWxzJztcbmltcG9ydCAqIGFzIHB2dXRpbHMgZnJvbSAncHZ1dGlscyc7XG5cbmZ1bmN0aW9uIGFzc2VydEJpZ0ludCgpIHtcclxuICAgIGlmICh0eXBlb2YgQmlnSW50ID09PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmlnSW50IGlzIG5vdCBkZWZpbmVkLiBZb3VyIGVudmlyb25tZW50IGRvZXNuJ3QgaW1wbGVtZW50IEJpZ0ludC5cIik7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY29uY2F0KGJ1ZmZlcnMpIHtcclxuICAgIGxldCBvdXRwdXRMZW5ndGggPSAwO1xyXG4gICAgbGV0IHByZXZMZW5ndGggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyID0gYnVmZmVyc1tpXTtcclxuICAgICAgICBvdXRwdXRMZW5ndGggKz0gYnVmZmVyLmJ5dGVMZW5ndGg7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkob3V0cHV0TGVuZ3RoKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmZmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGJ1ZmZlcnNbaV07XHJcbiAgICAgICAgcmV0Vmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSwgcHJldkxlbmd0aCk7XHJcbiAgICAgICAgcHJldkxlbmd0aCArPSBidWZmZXIuYnl0ZUxlbmd0aDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxufVxyXG5mdW5jdGlvbiBjaGVja0J1ZmZlclBhcmFtcyhiYXNlQmxvY2ssIGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgIGlmICghKGlucHV0QnVmZmVyIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRCdWZmZXIgbXVzdCBiZSAnVWludDhBcnJheSdcIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlucHV0QnVmZmVyLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRCdWZmZXIgaGFzIHplcm8gbGVuZ3RoXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0T2Zmc2V0IDwgMCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dE9mZnNldCBsZXNzIHRoYW4gemVyb1wiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dExlbmd0aCA8IDApIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRMZW5ndGggbGVzcyB0aGFuIHplcm9cIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoKGlucHV0QnVmZmVyLmJ5dGVMZW5ndGggLSBpbnB1dE9mZnNldCAtIGlucHV0TGVuZ3RoKSA8IDApIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIkVuZCBvZiBpbnB1dCByZWFjaGVkIGJlZm9yZSBtZXNzYWdlIHdhcyBmdWxseSBkZWNvZGVkIChpbmNvbnNpc3RlbnQgb2Zmc2V0IGFuZCBsZW5ndGggdmFsdWVzKVwiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XG5cbmNsYXNzIFZpZXdXcml0ZXIge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG4gICAgfVxyXG4gICAgd3JpdGUoYnVmKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGJ1Zik7XHJcbiAgICB9XHJcbiAgICBmaW5hbCgpIHtcclxuICAgICAgICByZXR1cm4gY29uY2F0KHRoaXMuaXRlbXMpO1xyXG4gICAgfVxyXG59XG5cbmNvbnN0IHBvd2VyczIgPSBbbmV3IFVpbnQ4QXJyYXkoWzFdKV07XHJcbmNvbnN0IGRpZ2l0c1N0cmluZyA9IFwiMDEyMzQ1Njc4OVwiO1xyXG5jb25zdCBOQU1FID0gXCJuYW1lXCI7XHJcbmNvbnN0IFZBTFVFX0hFWF9WSUVXID0gXCJ2YWx1ZUhleFZpZXdcIjtcclxuY29uc3QgSVNfSEVYX09OTFkgPSBcImlzSGV4T25seVwiO1xyXG5jb25zdCBJRF9CTE9DSyA9IFwiaWRCbG9ja1wiO1xyXG5jb25zdCBUQUdfQ0xBU1MgPSBcInRhZ0NsYXNzXCI7XHJcbmNvbnN0IFRBR19OVU1CRVIgPSBcInRhZ051bWJlclwiO1xyXG5jb25zdCBJU19DT05TVFJVQ1RFRCA9IFwiaXNDb25zdHJ1Y3RlZFwiO1xyXG5jb25zdCBGUk9NX0JFUiA9IFwiZnJvbUJFUlwiO1xyXG5jb25zdCBUT19CRVIgPSBcInRvQkVSXCI7XHJcbmNvbnN0IExPQ0FMID0gXCJsb2NhbFwiO1xyXG5jb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xyXG5jb25zdCBFTVBUWV9CVUZGRVIgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XHJcbmNvbnN0IEVNUFRZX1ZJRVcgPSBuZXcgVWludDhBcnJheSgwKTtcclxuY29uc3QgRU5EX09GX0NPTlRFTlRfTkFNRSA9IFwiRW5kT2ZDb250ZW50XCI7XHJcbmNvbnN0IE9DVEVUX1NUUklOR19OQU1FID0gXCJPQ1RFVCBTVFJJTkdcIjtcclxuY29uc3QgQklUX1NUUklOR19OQU1FID0gXCJCSVQgU1RSSU5HXCI7XG5cbmZ1bmN0aW9uIEhleEJsb2NrKEJhc2VDbGFzcykge1xyXG4gICAgdmFyIF9hO1xyXG4gICAgcmV0dXJuIF9hID0gY2xhc3MgU29tZSBleHRlbmRzIEJhc2VDbGFzcyB7XHJcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcclxuICAgICAgICAgICAgICAgIHZhciBfYTtcclxuICAgICAgICAgICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gYXJnc1swXSB8fCB7fTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gKF9hID0gcGFyYW1zLmlzSGV4T25seSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHBhcmFtcy52YWx1ZUhleCA/IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHBhcmFtcy52YWx1ZUhleCkgOiBFTVBUWV9WSUVXO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGdldCB2YWx1ZUhleCgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlSGV4Vmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXQgdmFsdWVIZXgodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmlldyA9IGlucHV0QnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgPyBuZXcgVWludDhBcnJheShpbnB1dEJ1ZmZlcikgOiBpbnB1dEJ1ZmZlcjtcclxuICAgICAgICAgICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgdmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGVuZExlbmd0aCA9IGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGVuZExlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlplcm8gYnVmZmVyIGxlbmd0aFwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gaW5wdXRMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5kTGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRvQkVSKHNpemVPbmx5ID0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJGbGFnICdpc0hleE9ubHknIGlzIG5vdCBzZXQsIGFib3J0XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzaXplT25seSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGggPT09IHRoaXMudmFsdWVIZXhWaWV3LmJ1ZmZlci5ieXRlTGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy52YWx1ZUhleFZpZXcuYnVmZmVyXHJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnZhbHVlSGV4Vmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzSGV4T25seTogdGhpcy5pc0hleE9ubHksXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVIZXg6IHB2dHN1dGlscy5Db252ZXJ0LlRvSGV4KHRoaXMudmFsdWVIZXhWaWV3KSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIF9hLk5BTUUgPSBcImhleEJsb2NrXCIsXHJcbiAgICAgICAgX2E7XHJcbn1cblxuY2xhc3MgTG9jYWxCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyBibG9ja0xlbmd0aCA9IDAsIGVycm9yID0gRU1QVFlfU1RSSU5HLCB3YXJuaW5ncyA9IFtdLCB2YWx1ZUJlZm9yZURlY29kZSA9IEVNUFRZX1ZJRVcsIH0gPSB7fSkge1xyXG4gICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBibG9ja0xlbmd0aDtcclxuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XHJcbiAgICAgICAgdGhpcy53YXJuaW5ncyA9IHdhcm5pbmdzO1xyXG4gICAgICAgIHRoaXMudmFsdWVCZWZvcmVEZWNvZGVWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkodmFsdWVCZWZvcmVEZWNvZGUpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGJsb2NrTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5OQU1FO1xyXG4gICAgfVxyXG4gICAgZ2V0IHZhbHVlQmVmb3JlRGVjb2RlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlQmVmb3JlRGVjb2RlVmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHNldCB2YWx1ZUJlZm9yZURlY29kZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCZWZvcmVEZWNvZGVWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGJsb2NrTmFtZTogdGhpcy5jb25zdHJ1Y3Rvci5OQU1FLFxyXG4gICAgICAgICAgICBibG9ja0xlbmd0aDogdGhpcy5ibG9ja0xlbmd0aCxcclxuICAgICAgICAgICAgZXJyb3I6IHRoaXMuZXJyb3IsXHJcbiAgICAgICAgICAgIHdhcm5pbmdzOiB0aGlzLndhcm5pbmdzLFxyXG4gICAgICAgICAgICB2YWx1ZUJlZm9yZURlY29kZTogcHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy52YWx1ZUJlZm9yZURlY29kZVZpZXcpLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxCYXNlQmxvY2suTkFNRSA9IFwiYmFzZUJsb2NrXCI7XG5cbmNsYXNzIFZhbHVlQmxvY2sgZXh0ZW5kcyBMb2NhbEJhc2VCbG9jayB7XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJVc2VyIG5lZWQgdG8gbWFrZSBhIHNwZWNpZmljIGZ1bmN0aW9uIGluIGEgY2xhc3Mgd2hpY2ggZXh0ZW5kcyAnVmFsdWVCbG9jaydcIik7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiVXNlciBuZWVkIHRvIG1ha2UgYSBzcGVjaWZpYyBmdW5jdGlvbiBpbiBhIGNsYXNzIHdoaWNoIGV4dGVuZHMgJ1ZhbHVlQmxvY2snXCIpO1xyXG4gICAgfVxyXG59XHJcblZhbHVlQmxvY2suTkFNRSA9IFwidmFsdWVCbG9ja1wiO1xuXG5jbGFzcyBMb2NhbElkZW50aWZpY2F0aW9uQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhMb2NhbEJhc2VCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyBpZEJsb2NrID0ge30sIH0gPSB7fSkge1xyXG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIGlmIChpZEJsb2NrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gKF9hID0gaWRCbG9jay5pc0hleE9ubHkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IGlkQmxvY2sudmFsdWVIZXggPyBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpZEJsb2NrLnZhbHVlSGV4KSA6IEVNUFRZX1ZJRVc7XHJcbiAgICAgICAgICAgIHRoaXMudGFnQ2xhc3MgPSAoX2IgPSBpZEJsb2NrLnRhZ0NsYXNzKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAtMTtcclxuICAgICAgICAgICAgdGhpcy50YWdOdW1iZXIgPSAoX2MgPSBpZEJsb2NrLnRhZ051bWJlcikgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogLTE7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb25zdHJ1Y3RlZCA9IChfZCA9IGlkQmxvY2suaXNDb25zdHJ1Y3RlZCkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRhZ0NsYXNzID0gLTE7XHJcbiAgICAgICAgICAgIHRoaXMudGFnTnVtYmVyID0gLTE7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb25zdHJ1Y3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5ID0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgZmlyc3RPY3RldCA9IDA7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnRhZ0NsYXNzKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIGZpcnN0T2N0ZXQgfD0gMHgwMDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICBmaXJzdE9jdGV0IHw9IDB4NDA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgZmlyc3RPY3RldCB8PSAweDgwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgIGZpcnN0T2N0ZXQgfD0gMHhDMDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiVW5rbm93biB0YWcgY2xhc3NcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzQ29uc3RydWN0ZWQpXHJcbiAgICAgICAgICAgIGZpcnN0T2N0ZXQgfD0gMHgyMDtcclxuICAgICAgICBpZiAodGhpcy50YWdOdW1iZXIgPCAzMSAmJiAhdGhpcy5pc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KDEpO1xyXG4gICAgICAgICAgICBpZiAoIXNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbnVtYmVyID0gdGhpcy50YWdOdW1iZXI7XHJcbiAgICAgICAgICAgICAgICBudW1iZXIgJj0gMHgxRjtcclxuICAgICAgICAgICAgICAgIGZpcnN0T2N0ZXQgfD0gbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1swXSA9IGZpcnN0T2N0ZXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRCdWYgPSBwdnV0aWxzLnV0aWxUb0Jhc2UodGhpcy50YWdOdW1iZXIsIDcpO1xyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkVmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWRCdWYpO1xyXG4gICAgICAgICAgICBjb25zdCBzaXplID0gZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSArIDEpO1xyXG4gICAgICAgICAgICByZXRWaWV3WzBdID0gKGZpcnN0T2N0ZXQgfCAweDFGKTtcclxuICAgICAgICAgICAgaWYgKCFzaXplT25seSkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAoc2l6ZSAtIDEpOyBpKyspXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0Vmlld1tpICsgMV0gPSBlbmNvZGVkVmlld1tpXSB8IDB4ODA7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W3NpemVdID0gZW5jb2RlZFZpZXdbc2l6ZSAtIDFdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGggKyAxKTtcclxuICAgICAgICByZXRWaWV3WzBdID0gKGZpcnN0T2N0ZXQgfCAweDFGKTtcclxuICAgICAgICBpZiAoIXNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1clZpZXcgPSB0aGlzLnZhbHVlSGV4VmlldztcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAoY3VyVmlldy5sZW5ndGggLSAxKTsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tpICsgMV0gPSBjdXJWaWV3W2ldIHwgMHg4MDtcclxuICAgICAgICAgICAgcmV0Vmlld1t0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoXSA9IGN1clZpZXdbY3VyVmlldy5sZW5ndGggLSAxXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgaW5wdXRWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgaW5wdXRWaWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW50QnVmZmVyID0gaW5wdXRWaWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBpZiAoaW50QnVmZmVyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJaZXJvIGJ1ZmZlciBsZW5ndGhcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0YWdDbGFzc01hc2sgPSBpbnRCdWZmZXJbMF0gJiAweEMwO1xyXG4gICAgICAgIHN3aXRjaCAodGFnQ2xhc3NNYXNrKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMHgwMDpcclxuICAgICAgICAgICAgICAgIHRoaXMudGFnQ2xhc3MgPSAoMSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAweDQwOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50YWdDbGFzcyA9ICgyKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDB4ODA6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ0NsYXNzID0gKDMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMHhDMDpcclxuICAgICAgICAgICAgICAgIHRoaXMudGFnQ2xhc3MgPSAoNCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlVua25vd24gdGFnIGNsYXNzXCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNDb25zdHJ1Y3RlZCA9IChpbnRCdWZmZXJbMF0gJiAweDIwKSA9PT0gMHgyMDtcclxuICAgICAgICB0aGlzLmlzSGV4T25seSA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IHRhZ051bWJlck1hc2sgPSBpbnRCdWZmZXJbMF0gJiAweDFGO1xyXG4gICAgICAgIGlmICh0YWdOdW1iZXJNYXNrICE9PSAweDFGKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFnTnVtYmVyID0gKHRhZ051bWJlck1hc2spO1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBjb3VudCA9IDE7XHJcbiAgICAgICAgICAgIGxldCBpbnRUYWdOdW1iZXJCdWZmZXIgPSB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KDI1NSk7XHJcbiAgICAgICAgICAgIGxldCB0YWdOdW1iZXJCdWZmZXJNYXhMZW5ndGggPSAyNTU7XHJcbiAgICAgICAgICAgIHdoaWxlIChpbnRCdWZmZXJbY291bnRdICYgMHg4MCkge1xyXG4gICAgICAgICAgICAgICAgaW50VGFnTnVtYmVyQnVmZmVyW2NvdW50IC0gMV0gPSBpbnRCdWZmZXJbY291bnRdICYgMHg3RjtcclxuICAgICAgICAgICAgICAgIGNvdW50Kys7XHJcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPj0gaW50QnVmZmVyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVuZCBvZiBpbnB1dCByZWFjaGVkIGJlZm9yZSBtZXNzYWdlIHdhcyBmdWxseSBkZWNvZGVkXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ID09PSB0YWdOdW1iZXJCdWZmZXJNYXhMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YWdOdW1iZXJCdWZmZXJNYXhMZW5ndGggKz0gMjU1O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBCdWZmZXJWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGFnTnVtYmVyQnVmZmVyTWF4TGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGludFRhZ051bWJlckJ1ZmZlci5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcEJ1ZmZlclZpZXdbaV0gPSBpbnRUYWdOdW1iZXJCdWZmZXJbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgaW50VGFnTnVtYmVyQnVmZmVyID0gdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheSh0YWdOdW1iZXJCdWZmZXJNYXhMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSAoY291bnQgKyAxKTtcclxuICAgICAgICAgICAgaW50VGFnTnVtYmVyQnVmZmVyW2NvdW50IC0gMV0gPSBpbnRCdWZmZXJbY291bnRdICYgMHg3RjtcclxuICAgICAgICAgICAgY29uc3QgdGVtcEJ1ZmZlclZpZXcgPSBuZXcgVWludDhBcnJheShjb3VudCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKylcclxuICAgICAgICAgICAgICAgIHRlbXBCdWZmZXJWaWV3W2ldID0gaW50VGFnTnVtYmVyQnVmZmVyW2ldO1xyXG4gICAgICAgICAgICBpbnRUYWdOdW1iZXJCdWZmZXIgPSB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KGNvdW50KTtcclxuICAgICAgICAgICAgaW50VGFnTnVtYmVyQnVmZmVyLnNldCh0ZW1wQnVmZmVyVmlldyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmJsb2NrTGVuZ3RoIDw9IDkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ051bWJlciA9IHB2dXRpbHMudXRpbEZyb21CYXNlKGludFRhZ051bWJlckJ1ZmZlciwgNyk7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiVGFnIHRvbyBsb25nLCByZXByZXNlbnRlZCBhcyBoZXgtY29kZWRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCgodGhpcy50YWdDbGFzcyA9PT0gMSkpICYmXHJcbiAgICAgICAgICAgICh0aGlzLmlzQ29uc3RydWN0ZWQpKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy50YWdOdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgICAgIGNhc2UgOTpcclxuICAgICAgICAgICAgICAgIGNhc2UgMTM6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE0OlxyXG4gICAgICAgICAgICAgICAgY2FzZSAyMzpcclxuICAgICAgICAgICAgICAgIGNhc2UgMjQ6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDMxOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAzMjpcclxuICAgICAgICAgICAgICAgIGNhc2UgMzM6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM0OlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkNvbnN0cnVjdGVkIGVuY29kaW5nIHVzZWQgZm9yIHByaW1pdGl2ZSB0eXBlXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyB0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdGFnQ2xhc3M6IHRoaXMudGFnQ2xhc3MsXHJcbiAgICAgICAgICAgIHRhZ051bWJlcjogdGhpcy50YWdOdW1iZXIsXHJcbiAgICAgICAgICAgIGlzQ29uc3RydWN0ZWQ6IHRoaXMuaXNDb25zdHJ1Y3RlZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsSWRlbnRpZmljYXRpb25CbG9jay5OQU1FID0gXCJpZGVudGlmaWNhdGlvbkJsb2NrXCI7XG5cbmNsYXNzIExvY2FsTGVuZ3RoQmxvY2sgZXh0ZW5kcyBMb2NhbEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGxlbkJsb2NrID0ge30sIH0gPSB7fSkge1xyXG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5pc0luZGVmaW5pdGVGb3JtID0gKF9hID0gbGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sb25nRm9ybVVzZWQgPSAoX2IgPSBsZW5CbG9jay5sb25nRm9ybVVzZWQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gKF9jID0gbGVuQmxvY2subGVuZ3RoKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAwO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKHRoaXMsIHZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnRCdWZmZXIgPSB2aWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBpZiAoaW50QnVmZmVyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJaZXJvIGJ1ZmZlciBsZW5ndGhcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW50QnVmZmVyWzBdID09PSAweEZGKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkxlbmd0aCBibG9jayAweEZGIGlzIHJlc2VydmVkIGJ5IHN0YW5kYXJkXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0luZGVmaW5pdGVGb3JtID0gaW50QnVmZmVyWzBdID09PSAweDgwO1xyXG4gICAgICAgIGlmICh0aGlzLmlzSW5kZWZpbml0ZUZvcm0pIHtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IDE7XHJcbiAgICAgICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyB0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb25nRm9ybVVzZWQgPSAhIShpbnRCdWZmZXJbMF0gJiAweDgwKTtcclxuICAgICAgICBpZiAodGhpcy5sb25nRm9ybVVzZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gKGludEJ1ZmZlclswXSk7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSAxO1xyXG4gICAgICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgdGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gaW50QnVmZmVyWzBdICYgMHg3RjtcclxuICAgICAgICBpZiAoY291bnQgPiA4KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlRvbyBiaWcgaW50ZWdlclwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoY291bnQgKyAxKSA+IGludEJ1ZmZlci5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWRcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBsZW5PZmZzZXQgPSBpbnB1dE9mZnNldCArIDE7XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoQnVmZmVyVmlldyA9IHZpZXcuc3ViYXJyYXkobGVuT2Zmc2V0LCBsZW5PZmZzZXQgKyBjb3VudCk7XHJcbiAgICAgICAgaWYgKGxlbmd0aEJ1ZmZlclZpZXdbY291bnQgLSAxXSA9PT0gMHgwMClcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiTmVlZGxlc3NseSBsb25nIGVuY29kZWQgbGVuZ3RoXCIpO1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gcHZ1dGlscy51dGlsRnJvbUJhc2UobGVuZ3RoQnVmZmVyVmlldywgOCk7XHJcbiAgICAgICAgaWYgKHRoaXMubG9uZ0Zvcm1Vc2VkICYmICh0aGlzLmxlbmd0aCA8PSAxMjcpKVxyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJVbm5lY2Vzc2FyeSB1c2FnZSBvZiBsb25nIGxlbmd0aCBmb3JtXCIpO1xyXG4gICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBjb3VudCArIDE7XHJcbiAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkgPSBmYWxzZSkge1xyXG4gICAgICAgIGxldCByZXRCdWY7XHJcbiAgICAgICAgbGV0IHJldFZpZXc7XHJcbiAgICAgICAgaWYgKHRoaXMubGVuZ3RoID4gMTI3KVxyXG4gICAgICAgICAgICB0aGlzLmxvbmdGb3JtVXNlZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbmRlZmluaXRlRm9ybSkge1xyXG4gICAgICAgICAgICByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIoMSk7XHJcbiAgICAgICAgICAgIGlmIChzaXplT25seSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1swXSA9IDB4ODA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubG9uZ0Zvcm1Vc2VkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRCdWYgPSBwdnV0aWxzLnV0aWxUb0Jhc2UodGhpcy5sZW5ndGgsIDgpO1xyXG4gICAgICAgICAgICBpZiAoZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoID4gMTI3KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJUb28gYmlnIGxlbmd0aFwiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChFTVBUWV9CVUZGRVIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcihlbmNvZGVkQnVmLmJ5dGVMZW5ndGggKyAxKTtcclxuICAgICAgICAgICAgaWYgKHNpemVPbmx5KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZFZpZXcgPSBuZXcgVWludDhBcnJheShlbmNvZGVkQnVmKTtcclxuICAgICAgICAgICAgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgIHJldFZpZXdbMF0gPSBlbmNvZGVkQnVmLmJ5dGVMZW5ndGggfCAweDgwO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVuY29kZWRCdWYuYnl0ZUxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tpICsgMV0gPSBlbmNvZGVkVmlld1tpXTtcclxuICAgICAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKDEpO1xyXG4gICAgICAgIGlmIChzaXplT25seSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgIHJldFZpZXdbMF0gPSB0aGlzLmxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgaXNJbmRlZmluaXRlRm9ybTogdGhpcy5pc0luZGVmaW5pdGVGb3JtLFxyXG4gICAgICAgICAgICBsb25nRm9ybVVzZWQ6IHRoaXMubG9uZ0Zvcm1Vc2VkLFxyXG4gICAgICAgICAgICBsZW5ndGg6IHRoaXMubGVuZ3RoLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxMZW5ndGhCbG9jay5OQU1FID0gXCJsZW5ndGhCbG9ja1wiO1xuXG5jb25zdCB0eXBlU3RvcmUgPSB7fTtcblxuY2xhc3MgQmFzZUJsb2NrIGV4dGVuZHMgTG9jYWxCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyBuYW1lID0gRU1QVFlfU1RSSU5HLCBvcHRpb25hbCA9IGZhbHNlLCBwcmltaXRpdmVTY2hlbWEsIC4uLnBhcmFtZXRlcnMgfSA9IHt9LCB2YWx1ZUJsb2NrVHlwZSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgdGhpcy5vcHRpb25hbCA9IG9wdGlvbmFsO1xyXG4gICAgICAgIGlmIChwcmltaXRpdmVTY2hlbWEpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmltaXRpdmVTY2hlbWEgPSBwcmltaXRpdmVTY2hlbWE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaWRCbG9jayA9IG5ldyBMb2NhbElkZW50aWZpY2F0aW9uQmxvY2socGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5sZW5CbG9jayA9IG5ldyBMb2NhbExlbmd0aEJsb2NrKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jayA9IHZhbHVlQmxvY2tUeXBlID8gbmV3IHZhbHVlQmxvY2tUeXBlKHBhcmFtZXRlcnMpIDogbmV3IFZhbHVlQmxvY2socGFyYW1ldGVycyk7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHRPZmZzZXQgPSB0aGlzLnZhbHVlQmxvY2suZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsICh0aGlzLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm0pID8gaW5wdXRMZW5ndGggOiB0aGlzLmxlbkJsb2NrLmxlbmd0aCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IHRoaXMudmFsdWVCbG9jay5lcnJvcjtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmlkQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMuaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICBpZiAoIXRoaXMubGVuQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMubGVuQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMudmFsdWVCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHksIHdyaXRlcikge1xyXG4gICAgICAgIGNvbnN0IF93cml0ZXIgPSB3cml0ZXIgfHwgbmV3IFZpZXdXcml0ZXIoKTtcclxuICAgICAgICBpZiAoIXdyaXRlcikge1xyXG4gICAgICAgICAgICBwcmVwYXJlSW5kZWZpbml0ZUZvcm0odGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlkQmxvY2tCdWYgPSB0aGlzLmlkQmxvY2sudG9CRVIoc2l6ZU9ubHkpO1xyXG4gICAgICAgIF93cml0ZXIud3JpdGUoaWRCbG9ja0J1Zik7XHJcbiAgICAgICAgaWYgKHRoaXMubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSkge1xyXG4gICAgICAgICAgICBfd3JpdGVyLndyaXRlKG5ldyBVaW50OEFycmF5KFsweDgwXSkuYnVmZmVyKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnRvQkVSKHNpemVPbmx5LCBfd3JpdGVyKTtcclxuICAgICAgICAgICAgX3dyaXRlci53cml0ZShuZXcgQXJyYXlCdWZmZXIoMikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVCbG9ja0J1ZiA9IHRoaXMudmFsdWVCbG9jay50b0JFUihzaXplT25seSk7XHJcbiAgICAgICAgICAgIHRoaXMubGVuQmxvY2subGVuZ3RoID0gdmFsdWVCbG9ja0J1Zi5ieXRlTGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBsZW5CbG9ja0J1ZiA9IHRoaXMubGVuQmxvY2sudG9CRVIoc2l6ZU9ubHkpO1xyXG4gICAgICAgICAgICBfd3JpdGVyLndyaXRlKGxlbkJsb2NrQnVmKTtcclxuICAgICAgICAgICAgX3dyaXRlci53cml0ZSh2YWx1ZUJsb2NrQnVmKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF3cml0ZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIF93cml0ZXIuZmluYWwoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICBjb25zdCBvYmplY3QgPSB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICBpZEJsb2NrOiB0aGlzLmlkQmxvY2sudG9KU09OKCksXHJcbiAgICAgICAgICAgIGxlbkJsb2NrOiB0aGlzLmxlbkJsb2NrLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZUJsb2NrOiB0aGlzLnZhbHVlQmxvY2sudG9KU09OKCksXHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcclxuICAgICAgICAgICAgb3B0aW9uYWw6IHRoaXMub3B0aW9uYWwsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodGhpcy5wcmltaXRpdmVTY2hlbWEpXHJcbiAgICAgICAgICAgIG9iamVjdC5wcmltaXRpdmVTY2hlbWEgPSB0aGlzLnByaW1pdGl2ZVNjaGVtYS50b0pTT04oKTtcclxuICAgICAgICByZXR1cm4gb2JqZWN0O1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoZW5jb2RpbmcgPSBcImFzY2lpXCIpIHtcclxuICAgICAgICBpZiAoZW5jb2RpbmcgPT09IFwiYXNjaWlcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vbkFzY2lpRW5jb2RpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHB2dHN1dGlscy5Db252ZXJ0LlRvSGV4KHRoaXMudG9CRVIoKSk7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke3B2dHN1dGlscy5Db252ZXJ0LlRvSGV4KHRoaXMudmFsdWVCbG9jay52YWx1ZUJlZm9yZURlY29kZVZpZXcpfWA7XHJcbiAgICB9XHJcbiAgICBpc0VxdWFsKG90aGVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMgPT09IG90aGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGhpc1JhdyA9IHRoaXMudG9CRVIoKTtcclxuICAgICAgICBjb25zdCBvdGhlclJhdyA9IG90aGVyLnRvQkVSKCk7XHJcbiAgICAgICAgcmV0dXJuIHB2dXRpbHMuaXNFcXVhbEJ1ZmZlcih0aGlzUmF3LCBvdGhlclJhdyk7XHJcbiAgICB9XHJcbn1cclxuQmFzZUJsb2NrLk5BTUUgPSBcIkJhc2VCbG9ja1wiO1xyXG5mdW5jdGlvbiBwcmVwYXJlSW5kZWZpbml0ZUZvcm0oYmFzZUJsb2NrKSB7XHJcbiAgICBpZiAoYmFzZUJsb2NrIGluc3RhbmNlb2YgdHlwZVN0b3JlLkNvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBiYXNlQmxvY2sudmFsdWVCbG9jay52YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAocHJlcGFyZUluZGVmaW5pdGVGb3JtKHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgYmFzZUJsb2NrLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm0gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICEhYmFzZUJsb2NrLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm07XHJcbn1cblxuY2xhc3MgQmFzZVN0cmluZ0Jsb2NrIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUgPSBFTVBUWV9TVFJJTkcsIC4uLnBhcmFtZXRlcnMgfSA9IHt9LCBzdHJpbmdWYWx1ZUJsb2NrVHlwZSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIHN0cmluZ1ZhbHVlQmxvY2tUeXBlKTtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXRWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUJsb2NrLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0VmFsdWUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdE9mZnNldCA9IHRoaXMudmFsdWVCbG9jay5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgKHRoaXMubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSkgPyBpbnB1dExlbmd0aCA6IHRoaXMubGVuQmxvY2subGVuZ3RoKTtcclxuICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gdGhpcy52YWx1ZUJsb2NrLmVycm9yO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZyb21CdWZmZXIodGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlkQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMuaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICBpZiAoIXRoaXMubGVuQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMubGVuQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMudmFsdWVCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJyR7dGhpcy52YWx1ZUJsb2NrLnZhbHVlfSdgO1xyXG4gICAgfVxyXG59XHJcbkJhc2VTdHJpbmdCbG9jay5OQU1FID0gXCJCYXNlU3RyaW5nQmxvY2tcIjtcblxuY2xhc3MgTG9jYWxQcmltaXRpdmVWYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soVmFsdWVCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyBpc0hleE9ubHkgPSB0cnVlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gaXNIZXhPbmx5O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsUHJpbWl0aXZlVmFsdWVCbG9jay5OQU1FID0gXCJQcmltaXRpdmVWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSR3O1xyXG5jbGFzcyBQcmltaXRpdmUgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgTG9jYWxQcmltaXRpdmVWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2suaXNDb25zdHJ1Y3RlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbl9hJHcgPSBQcmltaXRpdmU7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuUHJpbWl0aXZlID0gX2EkdztcclxufSkoKTtcclxuUHJpbWl0aXZlLk5BTUUgPSBcIlBSSU1JVElWRVwiO1xuXG5mdW5jdGlvbiBsb2NhbENoYW5nZVR5cGUoaW5wdXRPYmplY3QsIG5ld1R5cGUpIHtcclxuICAgIGlmIChpbnB1dE9iamVjdCBpbnN0YW5jZW9mIG5ld1R5cGUpIHtcclxuICAgICAgICByZXR1cm4gaW5wdXRPYmplY3Q7XHJcbiAgICB9XHJcbiAgICBjb25zdCBuZXdPYmplY3QgPSBuZXcgbmV3VHlwZSgpO1xyXG4gICAgbmV3T2JqZWN0LmlkQmxvY2sgPSBpbnB1dE9iamVjdC5pZEJsb2NrO1xyXG4gICAgbmV3T2JqZWN0LmxlbkJsb2NrID0gaW5wdXRPYmplY3QubGVuQmxvY2s7XHJcbiAgICBuZXdPYmplY3Qud2FybmluZ3MgPSBpbnB1dE9iamVjdC53YXJuaW5ncztcclxuICAgIG5ld09iamVjdC52YWx1ZUJlZm9yZURlY29kZVZpZXcgPSBpbnB1dE9iamVjdC52YWx1ZUJlZm9yZURlY29kZVZpZXc7XHJcbiAgICByZXR1cm4gbmV3T2JqZWN0O1xyXG59XHJcbmZ1bmN0aW9uIGxvY2FsRnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQgPSAwLCBpbnB1dExlbmd0aCA9IGlucHV0QnVmZmVyLmxlbmd0aCkge1xyXG4gICAgY29uc3QgaW5jb21pbmdPZmZzZXQgPSBpbnB1dE9mZnNldDtcclxuICAgIGxldCByZXR1cm5PYmplY3QgPSBuZXcgQmFzZUJsb2NrKHt9LCBWYWx1ZUJsb2NrKTtcclxuICAgIGNvbnN0IGJhc2VCbG9jayA9IG5ldyBMb2NhbEJhc2VCbG9jaygpO1xyXG4gICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyhiYXNlQmxvY2ssIGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0LmVycm9yID0gYmFzZUJsb2NrLmVycm9yO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IGludEJ1ZmZlciA9IGlucHV0QnVmZmVyLnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgIGlmICghaW50QnVmZmVyLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IFwiWmVybyBidWZmZXIgbGVuZ3RoXCI7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgbGV0IHJlc3VsdE9mZnNldCA9IHJldHVybk9iamVjdC5pZEJsb2NrLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICBpZiAocmV0dXJuT2JqZWN0LmlkQmxvY2sud2FybmluZ3MubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0Lndhcm5pbmdzLmNvbmNhdChyZXR1cm5PYmplY3QuaWRCbG9jay53YXJuaW5ncyk7XHJcbiAgICB9XHJcbiAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IHJldHVybk9iamVjdC5pZEJsb2NrLmVycm9yO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlucHV0T2Zmc2V0ID0gcmVzdWx0T2Zmc2V0O1xyXG4gICAgaW5wdXRMZW5ndGggLT0gcmV0dXJuT2JqZWN0LmlkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICByZXN1bHRPZmZzZXQgPSByZXR1cm5PYmplY3QubGVuQmxvY2suZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgIGlmIChyZXR1cm5PYmplY3QubGVuQmxvY2sud2FybmluZ3MubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0Lndhcm5pbmdzLmNvbmNhdChyZXR1cm5PYmplY3QubGVuQmxvY2sud2FybmluZ3MpO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSByZXR1cm5PYmplY3QubGVuQmxvY2suZXJyb3I7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaW5wdXRPZmZzZXQgPSByZXN1bHRPZmZzZXQ7XHJcbiAgICBpbnB1dExlbmd0aCAtPSByZXR1cm5PYmplY3QubGVuQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICBpZiAoIXJldHVybk9iamVjdC5pZEJsb2NrLmlzQ29uc3RydWN0ZWQgJiZcclxuICAgICAgICByZXR1cm5PYmplY3QubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSkge1xyXG4gICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IFwiSW5kZWZpbml0ZSBsZW5ndGggZm9ybSB1c2VkIGZvciBwcmltaXRpdmUgZW5jb2RpbmcgZm9ybVwiO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGxldCBuZXdBU04xVHlwZSA9IEJhc2VCbG9jaztcclxuICAgIHN3aXRjaCAocmV0dXJuT2JqZWN0LmlkQmxvY2sudGFnQ2xhc3MpIHtcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIGlmICgocmV0dXJuT2JqZWN0LmlkQmxvY2sudGFnTnVtYmVyID49IDM3KSAmJlxyXG4gICAgICAgICAgICAgICAgKHJldHVybk9iamVjdC5pZEJsb2NrLmlzSGV4T25seSA9PT0gZmFsc2UpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSBcIlVOSVZFUlNBTCAzNyBhbmQgdXBwZXIgdGFncyBhcmUgcmVzZXJ2ZWQgYnkgQVNOLjEgc3RhbmRhcmRcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzd2l0Y2ggKHJldHVybk9iamVjdC5pZEJsb2NrLnRhZ051bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgocmV0dXJuT2JqZWN0LmlkQmxvY2suaXNDb25zdHJ1Y3RlZCkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHJldHVybk9iamVjdC5sZW5CbG9jay5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSBcIlR5cGUgW1VOSVZFUlNBTCAwXSBpcyByZXNlcnZlZFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkVuZE9mQ29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5Cb29sZWFuO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkludGVnZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuQml0U3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLk9jdGV0U3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLk51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuT2JqZWN0SWRlbnRpZmllcjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuRW51bWVyYXRlZDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTI6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVXRmOFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTM6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxNDpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5USU1FO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxNTpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSBcIltVTklWRVJTQUwgMTVdIGlzIHJlc2VydmVkIGJ5IEFTTi4xIHN0YW5kYXJkXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxNjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5TZXF1ZW5jZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTc6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuU2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxODpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5OdW1lcmljU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOTpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5QcmludGFibGVTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDIwOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlRlbGV0ZXhTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDIxOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlZpZGVvdGV4U3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyMjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5JQTVTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDIzOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlVUQ1RpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI0OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkdlbmVyYWxpemVkVGltZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjU6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuR3JhcGhpY1N0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjY6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVmlzaWJsZVN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjc6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuR2VuZXJhbFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjg6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVW5pdmVyc2FsU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOTpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5DaGFyYWN0ZXJTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDMwOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkJtcFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzE6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuREFURTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzI6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVGltZU9mRGF5O1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzMzpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5EYXRlVGltZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzQ6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuRHVyYXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3T2JqZWN0ID0gcmV0dXJuT2JqZWN0LmlkQmxvY2suaXNDb25zdHJ1Y3RlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyB0eXBlU3RvcmUuQ29uc3RydWN0ZWQoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyB0eXBlU3RvcmUuUHJpbWl0aXZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3T2JqZWN0LmlkQmxvY2sgPSByZXR1cm5PYmplY3QuaWRCbG9jaztcclxuICAgICAgICAgICAgICAgICAgICBuZXdPYmplY3QubGVuQmxvY2sgPSByZXR1cm5PYmplY3QubGVuQmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3T2JqZWN0Lndhcm5pbmdzID0gcmV0dXJuT2JqZWN0Lndhcm5pbmdzO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybk9iamVjdCA9IG5ld09iamVjdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgIGNhc2UgNDpcclxuICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gcmV0dXJuT2JqZWN0LmlkQmxvY2suaXNDb25zdHJ1Y3RlZFxyXG4gICAgICAgICAgICAgICAgPyB0eXBlU3RvcmUuQ29uc3RydWN0ZWRcclxuICAgICAgICAgICAgICAgIDogdHlwZVN0b3JlLlByaW1pdGl2ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm5PYmplY3QgPSBsb2NhbENoYW5nZVR5cGUocmV0dXJuT2JqZWN0LCBuZXdBU04xVHlwZSk7XHJcbiAgICByZXN1bHRPZmZzZXQgPSByZXR1cm5PYmplY3QuZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIHJldHVybk9iamVjdC5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtID8gaW5wdXRMZW5ndGggOiByZXR1cm5PYmplY3QubGVuQmxvY2subGVuZ3RoKTtcclxuICAgIHJldHVybk9iamVjdC52YWx1ZUJlZm9yZURlY29kZVZpZXcgPSBpbnB1dEJ1ZmZlci5zdWJhcnJheShpbmNvbWluZ09mZnNldCwgaW5jb21pbmdPZmZzZXQgKyByZXR1cm5PYmplY3QuYmxvY2tMZW5ndGgpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBvZmZzZXQ6IHJlc3VsdE9mZnNldCxcclxuICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBmcm9tQkVSKGlucHV0QnVmZmVyKSB7XHJcbiAgICBpZiAoIWlucHV0QnVmZmVyLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgQmFzZUJsb2NrKHt9LCBWYWx1ZUJsb2NrKTtcclxuICAgICAgICByZXN1bHQuZXJyb3IgPSBcIklucHV0IGJ1ZmZlciBoYXMgemVybyBsZW5ndGhcIjtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICByZXN1bHRcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxvY2FsRnJvbUJFUihwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcikuc2xpY2UoKSwgMCwgaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCk7XHJcbn1cblxuZnVuY3Rpb24gY2hlY2tMZW4oaW5kZWZpbml0ZUxlbmd0aCwgbGVuZ3RoKSB7XHJcbiAgICBpZiAoaW5kZWZpbml0ZUxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxlbmd0aDtcclxufVxyXG5jbGFzcyBMb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jayBleHRlbmRzIFZhbHVlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSA9IFtdLCBpc0luZGVmaW5pdGVGb3JtID0gZmFsc2UsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuaXNJbmRlZmluaXRlRm9ybSA9IGlzSW5kZWZpbml0ZUZvcm07XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCB2aWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgdmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVCZWZvcmVEZWNvZGVWaWV3ID0gdmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVCZWZvcmVEZWNvZGVWaWV3Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJaZXJvIGJ1ZmZlciBsZW5ndGhcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGN1cnJlbnRPZmZzZXQgPSBpbnB1dE9mZnNldDtcclxuICAgICAgICB3aGlsZSAoY2hlY2tMZW4odGhpcy5pc0luZGVmaW5pdGVGb3JtLCBpbnB1dExlbmd0aCkgPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldHVybk9iamVjdCA9IGxvY2FsRnJvbUJFUih2aWV3LCBjdXJyZW50T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZXR1cm5PYmplY3Qub2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IHJldHVybk9iamVjdC5yZXN1bHQuZXJyb3I7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndhcm5pbmdzLmNvbmNhdChyZXR1cm5PYmplY3QucmVzdWx0Lndhcm5pbmdzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjdXJyZW50T2Zmc2V0ID0gcmV0dXJuT2JqZWN0Lm9mZnNldDtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSByZXR1cm5PYmplY3QucmVzdWx0LmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICBpbnB1dExlbmd0aCAtPSByZXR1cm5PYmplY3QucmVzdWx0LmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlLnB1c2gocmV0dXJuT2JqZWN0LnJlc3VsdCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSW5kZWZpbml0ZUZvcm0gJiYgcmV0dXJuT2JqZWN0LnJlc3VsdC5jb25zdHJ1Y3Rvci5OQU1FID09PSBFTkRfT0ZfQ09OVEVOVF9OQU1FKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc0luZGVmaW5pdGVGb3JtKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlW3RoaXMudmFsdWUubGVuZ3RoIC0gMV0uY29uc3RydWN0b3IuTkFNRSA9PT0gRU5EX09GX0NPTlRFTlRfTkFNRSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZS5wb3AoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIk5vIEVuZE9mQ29udGVudCBibG9jayBlbmNvZGVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdXJyZW50T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHksIHdyaXRlcikge1xyXG4gICAgICAgIGNvbnN0IF93cml0ZXIgPSB3cml0ZXIgfHwgbmV3IFZpZXdXcml0ZXIoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZVtpXS50b0JFUihzaXplT25seSwgX3dyaXRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghd3JpdGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfd3JpdGVyLmZpbmFsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgaXNJbmRlZmluaXRlRm9ybTogdGhpcy5pc0luZGVmaW5pdGVGb3JtLFxyXG4gICAgICAgICAgICB2YWx1ZTogW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgICAgb2JqZWN0LnZhbHVlLnB1c2godmFsdWUudG9KU09OKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2JqZWN0O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrLk5BTUUgPSBcIkNvbnN0cnVjdGVkVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkdjtcclxuY2xhc3MgQ29uc3RydWN0ZWQgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay5pc0NvbnN0cnVjdGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5pc0luZGVmaW5pdGVGb3JtID0gdGhpcy5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdE9mZnNldCA9IHRoaXMudmFsdWVCbG9jay5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgKHRoaXMubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSkgPyBpbnB1dExlbmd0aCA6IHRoaXMubGVuQmxvY2subGVuZ3RoKTtcclxuICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gdGhpcy52YWx1ZUJsb2NrLmVycm9yO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuaWRCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5pZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy5sZW5CbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5sZW5CbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICBpZiAoIXRoaXMudmFsdWVCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy52YWx1ZUJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWVzID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLnZhbHVlQmxvY2sudmFsdWUpIHtcclxuICAgICAgICAgICAgdmFsdWVzLnB1c2godmFsdWUudG9TdHJpbmcoXCJhc2NpaVwiKS5zcGxpdChcIlxcblwiKS5tYXAobyA9PiBgICAke299YCkuam9pbihcIlxcblwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJsb2NrTmFtZSA9IHRoaXMuaWRCbG9jay50YWdDbGFzcyA9PT0gM1xyXG4gICAgICAgICAgICA/IGBbJHt0aGlzLmlkQmxvY2sudGFnTnVtYmVyfV1gXHJcbiAgICAgICAgICAgIDogdGhpcy5jb25zdHJ1Y3Rvci5OQU1FO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgICAgID8gYCR7YmxvY2tOYW1lfSA6XFxuJHt2YWx1ZXMuam9pbihcIlxcblwiKX1gXHJcbiAgICAgICAgICAgIDogYCR7YmxvY2tOYW1lfSA6YDtcclxuICAgIH1cclxufVxyXG5fYSR2ID0gQ29uc3RydWN0ZWQ7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuQ29uc3RydWN0ZWQgPSBfYSR2O1xyXG59KSgpO1xyXG5Db25zdHJ1Y3RlZC5OQU1FID0gXCJDT05TVFJVQ1RFRFwiO1xuXG5jbGFzcyBMb2NhbEVuZE9mQ29udGVudFZhbHVlQmxvY2sgZXh0ZW5kcyBWYWx1ZUJsb2NrIHtcclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5KSB7XHJcbiAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgIH1cclxufVxyXG5Mb2NhbEVuZE9mQ29udGVudFZhbHVlQmxvY2sub3ZlcnJpZGUgPSBcIkVuZE9mQ29udGVudFZhbHVlQmxvY2tcIjtcblxudmFyIF9hJHU7XHJcbmNsYXNzIEVuZE9mQ29udGVudCBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbEVuZE9mQ29udGVudFZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDA7XHJcbiAgICB9XHJcbn1cclxuX2EkdSA9IEVuZE9mQ29udGVudDtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5FbmRPZkNvbnRlbnQgPSBfYSR1O1xyXG59KSgpO1xyXG5FbmRPZkNvbnRlbnQuTkFNRSA9IEVORF9PRl9DT05URU5UX05BTUU7XG5cbnZhciBfYSR0O1xyXG5jbGFzcyBOdWxsIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIFZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDU7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBpZiAodGhpcy5sZW5CbG9jay5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJOb24temVybyBsZW5ndGggb2YgdmFsdWUgYmxvY2sgZm9yIE51bGwgdHlwZVwiKTtcclxuICAgICAgICBpZiAoIXRoaXMuaWRCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5pZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy5sZW5CbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5sZW5CbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IGlucHV0TGVuZ3RoO1xyXG4gICAgICAgIGlmICgoaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCkgPiBpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVuZCBvZiBpbnB1dCByZWFjaGVkIGJlZm9yZSBtZXNzYWdlIHdhcyBmdWxseSBkZWNvZGVkIChpbmNvbnNpc3RlbnQgb2Zmc2V0IGFuZCBsZW5ndGggdmFsdWVzKVwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgY29uc3QgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKDIpO1xyXG4gICAgICAgIGlmICghc2l6ZU9ubHkpIHtcclxuICAgICAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgIHJldFZpZXdbMF0gPSAweDA1O1xyXG4gICAgICAgICAgICByZXRWaWV3WzFdID0gMHgwMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHdyaXRlcikge1xyXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUocmV0QnVmKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfWA7XHJcbiAgICB9XHJcbn1cclxuX2EkdCA9IE51bGw7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuTnVsbCA9IF9hJHQ7XHJcbn0pKCk7XHJcbk51bGwuTkFNRSA9IFwiTlVMTFwiO1xuXG5jbGFzcyBMb2NhbEJvb2xlYW5WYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soVmFsdWVCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICBpZiAocGFyYW1ldGVycy52YWx1ZUhleCkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHBhcmFtZXRlcnMudmFsdWVIZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheSgxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsdWUoKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBvY3RldCBvZiB0aGlzLnZhbHVlSGV4Vmlldykge1xyXG4gICAgICAgICAgICBpZiAob2N0ZXQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBzZXQgdmFsdWUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlSGV4Vmlld1swXSA9IHZhbHVlID8gMHhGRiA6IDB4MDA7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBpbnB1dFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCBpbnB1dFZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IGlucHV0Vmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgaWYgKGlucHV0TGVuZ3RoID4gMSlcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiQm9vbGVhbiB2YWx1ZSBlbmNvZGVkIGluIG1vcmUgdGhlbiAxIG9jdGV0XCIpO1xyXG4gICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gdHJ1ZTtcclxuICAgICAgICBwdnV0aWxzLnV0aWxEZWNvZGVUQy5jYWxsKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBpbnB1dExlbmd0aDtcclxuICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVIZXhWaWV3LnNsaWNlKCk7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxCb29sZWFuVmFsdWVCbG9jay5OQU1FID0gXCJCb29sZWFuVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkcztcclxuY2xhc3MgQm9vbGVhbiBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbEJvb2xlYW5WYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxO1xyXG4gICAgfVxyXG4gICAgZ2V0VmFsdWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVCbG9jay52YWx1ZTtcclxuICAgIH1cclxuICAgIHNldFZhbHVlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke3RoaXMuZ2V0VmFsdWV9YDtcclxuICAgIH1cclxufVxyXG5fYSRzID0gQm9vbGVhbjtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5Cb29sZWFuID0gX2EkcztcclxufSkoKTtcclxuQm9vbGVhbi5OQU1FID0gXCJCT09MRUFOXCI7XG5cbmNsYXNzIExvY2FsT2N0ZXRTdHJpbmdWYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgaXNDb25zdHJ1Y3RlZCA9IGZhbHNlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaXNDb25zdHJ1Y3RlZCA9IGlzQ29uc3RydWN0ZWQ7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBsZXQgcmVzdWx0T2Zmc2V0ID0gMDtcclxuICAgICAgICBpZiAodGhpcy5pc0NvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJlc3VsdE9mZnNldCA9IExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrLnByb3RvdHlwZS5mcm9tQkVSLmNhbGwodGhpcywgaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50QmxvY2tOYW1lID0gdGhpcy52YWx1ZVtpXS5jb25zdHJ1Y3Rvci5OQU1FO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRCbG9ja05hbWUgPT09IEVORF9PRl9DT05URU5UX05BTUUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0luZGVmaW5pdGVGb3JtKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kT2ZDb250ZW50IGlzIHVuZXhwZWN0ZWQsIE9DVEVUIFNUUklORyBtYXkgY29uc2lzdHMgb2YgT0NURVQgU1RSSU5HcyBvbmx5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEJsb2NrTmFtZSAhPT0gT0NURVRfU1RSSU5HX05BTUUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJPQ1RFVCBTVFJJTkcgbWF5IGNvbnNpc3RzIG9mIE9DVEVUIFNUUklOR3Mgb25seVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXN1bHRPZmZzZXQgPSBzdXBlci5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gaW5wdXRMZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb25zdHJ1Y3RlZClcclxuICAgICAgICAgICAgcmV0dXJuIExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrLnByb3RvdHlwZS50b0JFUi5jYWxsKHRoaXMsIHNpemVPbmx5LCB3cml0ZXIpO1xyXG4gICAgICAgIHJldHVybiBzaXplT25seVxyXG4gICAgICAgICAgICA/IG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoKVxyXG4gICAgICAgICAgICA6IHRoaXMudmFsdWVIZXhWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICBpc0NvbnN0cnVjdGVkOiB0aGlzLmlzQ29uc3RydWN0ZWQsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbE9jdGV0U3RyaW5nVmFsdWVCbG9jay5OQU1FID0gXCJPY3RldFN0cmluZ1ZhbHVlQmxvY2tcIjtcblxudmFyIF9hJHI7XHJcbmNsYXNzIE9jdGV0U3RyaW5nIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgaWRCbG9jayA9IHt9LCBsZW5CbG9jayA9IHt9LCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHZhciBfYiwgX2M7XHJcbiAgICAgICAgKF9iID0gcGFyYW1ldGVycy5pc0NvbnN0cnVjdGVkKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAocGFyYW1ldGVycy5pc0NvbnN0cnVjdGVkID0gISEoKF9jID0gcGFyYW1ldGVycy52YWx1ZSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCkpO1xyXG4gICAgICAgIHN1cGVyKHtcclxuICAgICAgICAgICAgaWRCbG9jazoge1xyXG4gICAgICAgICAgICAgICAgaXNDb25zdHJ1Y3RlZDogcGFyYW1ldGVycy5pc0NvbnN0cnVjdGVkLFxyXG4gICAgICAgICAgICAgICAgLi4uaWRCbG9jayxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbGVuQmxvY2s6IHtcclxuICAgICAgICAgICAgICAgIC4uLmxlbkJsb2NrLFxyXG4gICAgICAgICAgICAgICAgaXNJbmRlZmluaXRlRm9ybTogISFwYXJhbWV0ZXJzLmlzSW5kZWZpbml0ZUZvcm0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC4uLnBhcmFtZXRlcnMsXHJcbiAgICAgICAgfSwgTG9jYWxPY3RldFN0cmluZ1ZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDQ7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2suaXNDb25zdHJ1Y3RlZCA9IHRoaXMuaWRCbG9jay5pc0NvbnN0cnVjdGVkO1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5pc0luZGVmaW5pdGVGb3JtID0gdGhpcy5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtO1xyXG4gICAgICAgIGlmIChpbnB1dExlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pZEJsb2NrLmVycm9yLmxlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5pZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5sZW5CbG9jay5lcnJvci5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMubGVuQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlQmxvY2suaXNDb25zdHJ1Y3RlZCkge1xyXG4gICAgICAgICAgICBjb25zdCB2aWV3ID0gaW5wdXRCdWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciA/IG5ldyBVaW50OEFycmF5KGlucHV0QnVmZmVyKSA6IGlucHV0QnVmZmVyO1xyXG4gICAgICAgICAgICBjb25zdCBidWYgPSB2aWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChidWYuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzbiA9IGxvY2FsRnJvbUJFUihidWYsIDAsIGJ1Zi5ieXRlTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXNuLm9mZnNldCAhPT0gLTEgJiYgYXNuLm9mZnNldCA9PT0gaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gW2Fzbi5yZXN1bHRdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdXBlci5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlQmxvY2suaXNDb25zdHJ1Y3RlZCB8fCAodGhpcy52YWx1ZUJsb2NrLnZhbHVlICYmIHRoaXMudmFsdWVCbG9jay52YWx1ZS5sZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBDb25zdHJ1Y3RlZC5wcm90b3R5cGUub25Bc2NpaUVuY29kaW5nLmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJHtwdnRzdXRpbHMuQ29udmVydC5Ub0hleCh0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3KX1gO1xyXG4gICAgfVxyXG4gICAgZ2V0VmFsdWUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlkQmxvY2suaXNDb25zdHJ1Y3RlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYXJyYXkgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IGNvbnRlbnQgb2YgdGhpcy52YWx1ZUJsb2NrLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgT2N0ZXRTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIGFycmF5LnB1c2goY29udGVudC52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIuY29uY2F0KGFycmF5KTtcclxuICAgIH1cclxufVxyXG5fYSRyID0gT2N0ZXRTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuT2N0ZXRTdHJpbmcgPSBfYSRyO1xyXG59KSgpO1xyXG5PY3RldFN0cmluZy5OQU1FID0gT0NURVRfU1RSSU5HX05BTUU7XG5cbmNsYXNzIExvY2FsQml0U3RyaW5nVmFsdWVCbG9jayBleHRlbmRzIEhleEJsb2NrKExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHVudXNlZEJpdHMgPSAwLCBpc0NvbnN0cnVjdGVkID0gZmFsc2UsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy51bnVzZWRCaXRzID0gdW51c2VkQml0cztcclxuICAgICAgICB0aGlzLmlzQ29uc3RydWN0ZWQgPSBpc0NvbnN0cnVjdGVkO1xyXG4gICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSB0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKCFpbnB1dExlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCByZXN1bHRPZmZzZXQgPSAtMTtcclxuICAgICAgICBpZiAodGhpcy5pc0NvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdE9mZnNldCA9IExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrLnByb3RvdHlwZS5mcm9tQkVSLmNhbGwodGhpcywgaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50QmxvY2tOYW1lID0gdmFsdWUuY29uc3RydWN0b3IuTkFNRTtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QmxvY2tOYW1lID09PSBFTkRfT0ZfQ09OVEVOVF9OQU1FKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNJbmRlZmluaXRlRm9ybSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVuZE9mQ29udGVudCBpcyB1bmV4cGVjdGVkLCBCSVQgU1RSSU5HIG1heSBjb25zaXN0cyBvZiBCSVQgU1RSSU5HcyBvbmx5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEJsb2NrTmFtZSAhPT0gQklUX1NUUklOR19OQU1FKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiQklUIFNUUklORyBtYXkgY29uc2lzdHMgb2YgQklUIFNUUklOR3Mgb25seVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlQmxvY2sgPSB2YWx1ZS52YWx1ZUJsb2NrO1xyXG4gICAgICAgICAgICAgICAgaWYgKCh0aGlzLnVudXNlZEJpdHMgPiAwKSAmJiAodmFsdWVCbG9jay51bnVzZWRCaXRzID4gMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJVc2luZyBvZiBcXFwidW51c2VkIGJpdHNcXFwiIGluc2lkZSBjb25zdHJ1Y3RpdmUgQklUIFNUUklORyBhbGxvd2VkIGZvciBsZWFzdCBvbmUgb25seVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMudW51c2VkQml0cyA9IHZhbHVlQmxvY2sudW51c2VkQml0cztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnB1dFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCBpbnB1dFZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnRCdWZmZXIgPSBpbnB1dFZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIHRoaXMudW51c2VkQml0cyA9IGludEJ1ZmZlclswXTtcclxuICAgICAgICBpZiAodGhpcy51bnVzZWRCaXRzID4gNykge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJVbnVzZWQgYml0cyBmb3IgQml0U3RyaW5nIG11c3QgYmUgaW4gcmFuZ2UgMC03XCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnVudXNlZEJpdHMpIHtcclxuICAgICAgICAgICAgY29uc3QgYnVmID0gaW50QnVmZmVyLnN1YmFycmF5KDEpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGJ1Zi5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNuID0gbG9jYWxGcm9tQkVSKGJ1ZiwgMCwgYnVmLmJ5dGVMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhc24ub2Zmc2V0ICE9PSAtMSAmJiBhc24ub2Zmc2V0ID09PSAoaW5wdXRMZW5ndGggLSAxKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gW2Fzbi5yZXN1bHRdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gaW50QnVmZmVyLnN1YmFycmF5KDEpO1xyXG4gICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBpbnRCdWZmZXIubGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb25zdHJ1Y3RlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2sucHJvdG90eXBlLnRvQkVSLmNhbGwodGhpcywgc2l6ZU9ubHksIHdyaXRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzaXplT25seSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGggKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGggKyAxKTtcclxuICAgICAgICByZXRWaWV3WzBdID0gdGhpcy51bnVzZWRCaXRzO1xyXG4gICAgICAgIHJldFZpZXcuc2V0KHRoaXMudmFsdWVIZXhWaWV3LCAxKTtcclxuICAgICAgICByZXR1cm4gcmV0Vmlldy5idWZmZXI7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHVudXNlZEJpdHM6IHRoaXMudW51c2VkQml0cyxcclxuICAgICAgICAgICAgaXNDb25zdHJ1Y3RlZDogdGhpcy5pc0NvbnN0cnVjdGVkLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxCaXRTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIkJpdFN0cmluZ1ZhbHVlQmxvY2tcIjtcblxudmFyIF9hJHE7XHJcbmNsYXNzIEJpdFN0cmluZyBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGlkQmxvY2sgPSB7fSwgbGVuQmxvY2sgPSB7fSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICB2YXIgX2IsIF9jO1xyXG4gICAgICAgIChfYiA9IHBhcmFtZXRlcnMuaXNDb25zdHJ1Y3RlZCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogKHBhcmFtZXRlcnMuaXNDb25zdHJ1Y3RlZCA9ICEhKChfYyA9IHBhcmFtZXRlcnMudmFsdWUpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5sZW5ndGgpKTtcclxuICAgICAgICBzdXBlcih7XHJcbiAgICAgICAgICAgIGlkQmxvY2s6IHtcclxuICAgICAgICAgICAgICAgIGlzQ29uc3RydWN0ZWQ6IHBhcmFtZXRlcnMuaXNDb25zdHJ1Y3RlZCxcclxuICAgICAgICAgICAgICAgIC4uLmlkQmxvY2ssXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGxlbkJsb2NrOiB7XHJcbiAgICAgICAgICAgICAgICAuLi5sZW5CbG9jayxcclxuICAgICAgICAgICAgICAgIGlzSW5kZWZpbml0ZUZvcm06ICEhcGFyYW1ldGVycy5pc0luZGVmaW5pdGVGb3JtLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAuLi5wYXJhbWV0ZXJzLFxyXG4gICAgICAgIH0sIExvY2FsQml0U3RyaW5nVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMztcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5pc0NvbnN0cnVjdGVkID0gdGhpcy5pZEJsb2NrLmlzQ29uc3RydWN0ZWQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLmlzSW5kZWZpbml0ZUZvcm0gPSB0aGlzLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm07XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVCbG9jay5pc0NvbnN0cnVjdGVkIHx8ICh0aGlzLnZhbHVlQmxvY2sudmFsdWUgJiYgdGhpcy52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIENvbnN0cnVjdGVkLnByb3RvdHlwZS5vbkFzY2lpRW5jb2RpbmcuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJpdHMgPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVIZXggPSB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGJ5dGUgb2YgdmFsdWVIZXgpIHtcclxuICAgICAgICAgICAgICAgIGJpdHMucHVzaChieXRlLnRvU3RyaW5nKDIpLnBhZFN0YXJ0KDgsIFwiMFwiKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYml0c1N0ciA9IGJpdHMuam9pbihcIlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke2JpdHNTdHIuc3Vic3RyaW5nKDAsIGJpdHNTdHIubGVuZ3RoIC0gdGhpcy52YWx1ZUJsb2NrLnVudXNlZEJpdHMpfWA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbl9hJHEgPSBCaXRTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuQml0U3RyaW5nID0gX2EkcTtcclxufSkoKTtcclxuQml0U3RyaW5nLk5BTUUgPSBCSVRfU1RSSU5HX05BTUU7XG5cbnZhciBfYSRwO1xyXG5mdW5jdGlvbiB2aWV3QWRkKGZpcnN0LCBzZWNvbmQpIHtcclxuICAgIGNvbnN0IGMgPSBuZXcgVWludDhBcnJheShbMF0pO1xyXG4gICAgY29uc3QgZmlyc3RWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZmlyc3QpO1xyXG4gICAgY29uc3Qgc2Vjb25kVmlldyA9IG5ldyBVaW50OEFycmF5KHNlY29uZCk7XHJcbiAgICBsZXQgZmlyc3RWaWV3Q29weSA9IGZpcnN0Vmlldy5zbGljZSgwKTtcclxuICAgIGNvbnN0IGZpcnN0Vmlld0NvcHlMZW5ndGggPSBmaXJzdFZpZXdDb3B5Lmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBzZWNvbmRWaWV3Q29weSA9IHNlY29uZFZpZXcuc2xpY2UoMCk7XHJcbiAgICBjb25zdCBzZWNvbmRWaWV3Q29weUxlbmd0aCA9IHNlY29uZFZpZXdDb3B5Lmxlbmd0aCAtIDE7XHJcbiAgICBsZXQgdmFsdWUgPSAwO1xyXG4gICAgY29uc3QgbWF4ID0gKHNlY29uZFZpZXdDb3B5TGVuZ3RoIDwgZmlyc3RWaWV3Q29weUxlbmd0aCkgPyBmaXJzdFZpZXdDb3B5TGVuZ3RoIDogc2Vjb25kVmlld0NvcHlMZW5ndGg7XHJcbiAgICBsZXQgY291bnRlciA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gbWF4OyBpID49IDA7IGktLSwgY291bnRlcisrKSB7XHJcbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgKGNvdW50ZXIgPCBzZWNvbmRWaWV3Q29weS5sZW5ndGgpOlxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSArIHNlY29uZFZpZXdDb3B5W3NlY29uZFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gKyBjWzBdO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdICsgY1swXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY1swXSA9IHZhbHVlIC8gMTA7XHJcbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgKGNvdW50ZXIgPj0gZmlyc3RWaWV3Q29weS5sZW5ndGgpOlxyXG4gICAgICAgICAgICAgICAgZmlyc3RWaWV3Q29weSA9IHB2dXRpbHMudXRpbENvbmNhdFZpZXcobmV3IFVpbnQ4QXJyYXkoW3ZhbHVlICUgMTBdKSwgZmlyc3RWaWV3Q29weSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdID0gdmFsdWUgJSAxMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoY1swXSA+IDApXHJcbiAgICAgICAgZmlyc3RWaWV3Q29weSA9IHB2dXRpbHMudXRpbENvbmNhdFZpZXcoYywgZmlyc3RWaWV3Q29weSk7XHJcbiAgICByZXR1cm4gZmlyc3RWaWV3Q29weTtcclxufVxyXG5mdW5jdGlvbiBwb3dlcjIobikge1xyXG4gICAgaWYgKG4gPj0gcG93ZXJzMi5sZW5ndGgpIHtcclxuICAgICAgICBmb3IgKGxldCBwID0gcG93ZXJzMi5sZW5ndGg7IHAgPD0gbjsgcCsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGMgPSBuZXcgVWludDhBcnJheShbMF0pO1xyXG4gICAgICAgICAgICBsZXQgZGlnaXRzID0gKHBvd2VyczJbcCAtIDFdKS5zbGljZSgwKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IChkaWdpdHMubGVuZ3RoIC0gMSk7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IG5ldyBVaW50OEFycmF5KFsoZGlnaXRzW2ldIDw8IDEpICsgY1swXV0pO1xyXG4gICAgICAgICAgICAgICAgY1swXSA9IG5ld1ZhbHVlWzBdIC8gMTA7XHJcbiAgICAgICAgICAgICAgICBkaWdpdHNbaV0gPSBuZXdWYWx1ZVswXSAlIDEwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjWzBdID4gMClcclxuICAgICAgICAgICAgICAgIGRpZ2l0cyA9IHB2dXRpbHMudXRpbENvbmNhdFZpZXcoYywgZGlnaXRzKTtcclxuICAgICAgICAgICAgcG93ZXJzMi5wdXNoKGRpZ2l0cyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBvd2VyczJbbl07XHJcbn1cclxuZnVuY3Rpb24gdmlld1N1YihmaXJzdCwgc2Vjb25kKSB7XHJcbiAgICBsZXQgYiA9IDA7XHJcbiAgICBjb25zdCBmaXJzdFZpZXcgPSBuZXcgVWludDhBcnJheShmaXJzdCk7XHJcbiAgICBjb25zdCBzZWNvbmRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc2Vjb25kKTtcclxuICAgIGNvbnN0IGZpcnN0Vmlld0NvcHkgPSBmaXJzdFZpZXcuc2xpY2UoMCk7XHJcbiAgICBjb25zdCBmaXJzdFZpZXdDb3B5TGVuZ3RoID0gZmlyc3RWaWV3Q29weS5sZW5ndGggLSAxO1xyXG4gICAgY29uc3Qgc2Vjb25kVmlld0NvcHkgPSBzZWNvbmRWaWV3LnNsaWNlKDApO1xyXG4gICAgY29uc3Qgc2Vjb25kVmlld0NvcHlMZW5ndGggPSBzZWNvbmRWaWV3Q29weS5sZW5ndGggLSAxO1xyXG4gICAgbGV0IHZhbHVlO1xyXG4gICAgbGV0IGNvdW50ZXIgPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IHNlY29uZFZpZXdDb3B5TGVuZ3RoOyBpID49IDA7IGktLSwgY291bnRlcisrKSB7XHJcbiAgICAgICAgdmFsdWUgPSBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSAtIHNlY29uZFZpZXdDb3B5W3NlY29uZFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gLSBiO1xyXG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xyXG4gICAgICAgICAgICBjYXNlICh2YWx1ZSA8IDApOlxyXG4gICAgICAgICAgICAgICAgYiA9IDE7XHJcbiAgICAgICAgICAgICAgICBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSA9IHZhbHVlICsgMTA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGIgPSAwO1xyXG4gICAgICAgICAgICAgICAgZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoYiA+IDApIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gKGZpcnN0Vmlld0NvcHlMZW5ndGggLSBzZWNvbmRWaWV3Q29weUxlbmd0aCArIDEpOyBpID49IDA7IGktLSwgY291bnRlcisrKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gLSBiO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBiID0gMTtcclxuICAgICAgICAgICAgICAgIGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdID0gdmFsdWUgKyAxMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGIgPSAwO1xyXG4gICAgICAgICAgICAgICAgZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpcnN0Vmlld0NvcHkuc2xpY2UoKTtcclxufVxyXG5jbGFzcyBMb2NhbEludGVnZXJWYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soVmFsdWVCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLl92YWx1ZURlYyA9IDA7XHJcbiAgICAgICAgaWYgKHBhcmFtZXRlcnMudmFsdWVIZXgpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUhleCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlRGVjID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc2V0VmFsdWVIZXgoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aCA+PSA0KSB7XHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlRvbyBiaWcgSW50ZWdlciBmb3IgZGVjb2RpbmcsIGhleCBvbmx5XCIpO1xyXG4gICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlRGVjID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZURlYyA9IHB2dXRpbHMudXRpbERlY29kZVRDLmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzZXQgdmFsdWVEZWModikge1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlRGVjID0gdjtcclxuICAgICAgICB0aGlzLmlzSGV4T25seSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocHZ1dGlscy51dGlsRW5jb2RlVEModikpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHZhbHVlRGVjKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZURlYztcclxuICAgIH1cclxuICAgIGZyb21ERVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCwgZXhwZWN0ZWRMZW5ndGggPSAwKSB7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGlmIChvZmZzZXQgPT09IC0xKVxyXG4gICAgICAgICAgICByZXR1cm4gb2Zmc2V0O1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZhbHVlSGV4VmlldztcclxuICAgICAgICBpZiAoKHZpZXdbMF0gPT09IDB4MDApICYmICgodmlld1sxXSAmIDB4ODApICE9PSAwKSkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHZpZXcuc3ViYXJyYXkoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZXhwZWN0ZWRMZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICh2aWV3Lmxlbmd0aCA8IGV4cGVjdGVkTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChleHBlY3RlZExlbmd0aCAtIHZpZXcubGVuZ3RoKSA+IDEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkTGVuZ3RoID0gdmlldy5sZW5ndGggKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gdmlldy5zdWJhcnJheShleHBlY3RlZExlbmd0aCAtIHZpZXcubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9ERVIoc2l6ZU9ubHkgPSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZhbHVlSGV4VmlldztcclxuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcclxuICAgICAgICAgICAgY2FzZSAoKHZpZXdbMF0gJiAweDgwKSAhPT0gMCk6XHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGggKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkVmlld1swXSA9IDB4MDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFZpZXcuc2V0KHZpZXcsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gdXBkYXRlZFZpZXc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAoKHZpZXdbMF0gPT09IDB4MDApICYmICgodmlld1sxXSAmIDB4ODApID09PSAwKSk6XHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSB0aGlzLnZhbHVlSGV4Vmlldy5zdWJhcnJheSgxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy50b0JFUihzaXplT25seSk7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHRPZmZzZXQgPSBzdXBlci5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWVIZXgoKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkpIHtcclxuICAgICAgICByZXR1cm4gc2l6ZU9ubHlcclxuICAgICAgICAgICAgPyBuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoKVxyXG4gICAgICAgICAgICA6IHRoaXMudmFsdWVIZXhWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZURlYzogdGhpcy52YWx1ZURlYyxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoKSB7XHJcbiAgICAgICAgY29uc3QgZmlyc3RCaXQgPSAodGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoICogOCkgLSAxO1xyXG4gICAgICAgIGxldCBkaWdpdHMgPSBuZXcgVWludDhBcnJheSgodGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoICogOCkgLyAzKTtcclxuICAgICAgICBsZXQgYml0TnVtYmVyID0gMDtcclxuICAgICAgICBsZXQgY3VycmVudEJ5dGU7XHJcbiAgICAgICAgY29uc3QgYXNuMVZpZXcgPSB0aGlzLnZhbHVlSGV4VmlldztcclxuICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcclxuICAgICAgICBsZXQgZmxhZyA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGJ5dGVOdW1iZXIgPSAoYXNuMVZpZXcuYnl0ZUxlbmd0aCAtIDEpOyBieXRlTnVtYmVyID49IDA7IGJ5dGVOdW1iZXItLSkge1xyXG4gICAgICAgICAgICBjdXJyZW50Qnl0ZSA9IGFzbjFWaWV3W2J5dGVOdW1iZXJdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKChjdXJyZW50Qnl0ZSAmIDEpID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChiaXROdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBmaXJzdEJpdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0cyA9IHZpZXdTdWIocG93ZXIyKGJpdE51bWJlciksIGRpZ2l0cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBcIi1cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXRzID0gdmlld0FkZChkaWdpdHMsIHBvd2VyMihiaXROdW1iZXIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBiaXROdW1iZXIrKztcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRCeXRlID4+PSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlnaXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChkaWdpdHNbaV0pXHJcbiAgICAgICAgICAgICAgICBmbGFnID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGZsYWcpXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gZGlnaXRzU3RyaW5nLmNoYXJBdChkaWdpdHNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmxhZyA9PT0gZmFsc2UpXHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBkaWdpdHNTdHJpbmcuY2hhckF0KDApO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbn1cclxuX2EkcCA9IExvY2FsSW50ZWdlclZhbHVlQmxvY2s7XHJcbkxvY2FsSW50ZWdlclZhbHVlQmxvY2suTkFNRSA9IFwiSW50ZWdlclZhbHVlQmxvY2tcIjtcclxuKCgpID0+IHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfYSRwLnByb3RvdHlwZSwgXCJ2YWx1ZUhleFwiLCB7XHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHYpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlSGV4KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVIZXhWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgICAgIH0sXHJcbiAgICB9KTtcclxufSkoKTtcblxudmFyIF9hJG87XHJcbmNsYXNzIEludGVnZXIgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgTG9jYWxJbnRlZ2VyVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjtcclxuICAgIH1cclxuICAgIHRvQmlnSW50KCkge1xyXG4gICAgICAgIGFzc2VydEJpZ0ludCgpO1xyXG4gICAgICAgIHJldHVybiBCaWdJbnQodGhpcy52YWx1ZUJsb2NrLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGZyb21CaWdJbnQodmFsdWUpIHtcclxuICAgICAgICBhc3NlcnRCaWdJbnQoKTtcclxuICAgICAgICBjb25zdCBiaWdJbnRWYWx1ZSA9IEJpZ0ludCh2YWx1ZSk7XHJcbiAgICAgICAgY29uc3Qgd3JpdGVyID0gbmV3IFZpZXdXcml0ZXIoKTtcclxuICAgICAgICBjb25zdCBoZXggPSBiaWdJbnRWYWx1ZS50b1N0cmluZygxNikucmVwbGFjZSgvXi0vLCBcIlwiKTtcclxuICAgICAgICBjb25zdCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkocHZ0c3V0aWxzLkNvbnZlcnQuRnJvbUhleChoZXgpKTtcclxuICAgICAgICBpZiAoYmlnSW50VmFsdWUgPCAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gbmV3IFVpbnQ4QXJyYXkodmlldy5sZW5ndGggKyAodmlld1swXSAmIDB4ODAgPyAxIDogMCkpO1xyXG4gICAgICAgICAgICBmaXJzdFswXSB8PSAweDgwO1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdEludCA9IEJpZ0ludChgMHgke3B2dHN1dGlscy5Db252ZXJ0LlRvSGV4KGZpcnN0KX1gKTtcclxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kSW50ID0gZmlyc3RJbnQgKyBiaWdJbnRWYWx1ZTtcclxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkocHZ0c3V0aWxzLkNvbnZlcnQuRnJvbUhleChzZWNvbmRJbnQudG9TdHJpbmcoMTYpKSk7XHJcbiAgICAgICAgICAgIHNlY29uZFswXSB8PSAweDgwO1xyXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoc2Vjb25kKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh2aWV3WzBdICYgMHg4MCkge1xyXG4gICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlKG5ldyBVaW50OEFycmF5KFswXSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSh2aWV3KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IEludGVnZXIoe1xyXG4gICAgICAgICAgICB2YWx1ZUhleDogd3JpdGVyLmZpbmFsKCksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIGNvbnZlcnRUb0RFUigpIHtcclxuICAgICAgICBjb25zdCBpbnRlZ2VyID0gbmV3IEludGVnZXIoeyB2YWx1ZUhleDogdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyB9KTtcclxuICAgICAgICBpbnRlZ2VyLnZhbHVlQmxvY2sudG9ERVIoKTtcclxuICAgICAgICByZXR1cm4gaW50ZWdlcjtcclxuICAgIH1cclxuICAgIGNvbnZlcnRGcm9tREVSKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgSW50ZWdlcih7XHJcbiAgICAgICAgICAgIHZhbHVlSGV4OiB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3WzBdID09PSAwXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcuc3ViYXJyYXkoMSlcclxuICAgICAgICAgICAgICAgIDogdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7dGhpcy52YWx1ZUJsb2NrLnRvU3RyaW5nKCl9YDtcclxuICAgIH1cclxufVxyXG5fYSRvID0gSW50ZWdlcjtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5JbnRlZ2VyID0gX2EkbztcclxufSkoKTtcclxuSW50ZWdlci5OQU1FID0gXCJJTlRFR0VSXCI7XG5cbnZhciBfYSRuO1xyXG5jbGFzcyBFbnVtZXJhdGVkIGV4dGVuZHMgSW50ZWdlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxMDtcclxuICAgIH1cclxufVxyXG5fYSRuID0gRW51bWVyYXRlZDtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5FbnVtZXJhdGVkID0gX2EkbjtcclxufSkoKTtcclxuRW51bWVyYXRlZC5OQU1FID0gXCJFTlVNRVJBVEVEXCI7XG5cbmNsYXNzIExvY2FsU2lkVmFsdWVCbG9jayBleHRlbmRzIEhleEJsb2NrKFZhbHVlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWVEZWMgPSAtMSwgaXNGaXJzdFNpZCA9IGZhbHNlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMudmFsdWVEZWMgPSB2YWx1ZURlYztcclxuICAgICAgICB0aGlzLmlzRmlyc3RTaWQgPSBpc0ZpcnN0U2lkO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKCFpbnB1dExlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlucHV0VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKHRoaXMsIGlucHV0VmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGludEJ1ZmZlciA9IGlucHV0Vmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3W2ldID0gaW50QnVmZmVyW2ldICYgMHg3RjtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCsrO1xyXG4gICAgICAgICAgICBpZiAoKGludEJ1ZmZlcltpXSAmIDB4ODApID09PSAweDAwKVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRlbXBWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJsb2NrTGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGVtcFZpZXdbaV0gPSB0aGlzLnZhbHVlSGV4Vmlld1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSB0ZW1wVmlldztcclxuICAgICAgICBpZiAoKGludEJ1ZmZlclt0aGlzLmJsb2NrTGVuZ3RoIC0gMV0gJiAweDgwKSAhPT0gMHgwMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFbmQgb2YgaW5wdXQgcmVhY2hlZCBiZWZvcmUgbWVzc2FnZSB3YXMgZnVsbHkgZGVjb2RlZFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlSGV4Vmlld1swXSA9PT0gMHgwMClcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiTmVlZGxlc3NseSBsb25nIGZvcm1hdCBvZiBTSUQgZW5jb2RpbmdcIik7XHJcbiAgICAgICAgaWYgKHRoaXMuYmxvY2tMZW5ndGggPD0gOClcclxuICAgICAgICAgICAgdGhpcy52YWx1ZURlYyA9IHB2dXRpbHMudXRpbEZyb21CYXNlKHRoaXMudmFsdWVIZXhWaWV3LCA3KTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJUb28gYmlnIFNJRCBmb3IgZGVjb2RpbmcsIGhleCBvbmx5XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgdGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICB9XHJcbiAgICBzZXQgdmFsdWVCaWdJbnQodmFsdWUpIHtcclxuICAgICAgICBhc3NlcnRCaWdJbnQoKTtcclxuICAgICAgICBsZXQgYml0cyA9IEJpZ0ludCh2YWx1ZSkudG9TdHJpbmcoMik7XHJcbiAgICAgICAgd2hpbGUgKGJpdHMubGVuZ3RoICUgNykge1xyXG4gICAgICAgICAgICBiaXRzID0gXCIwXCIgKyBiaXRzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJpdHMubGVuZ3RoIC8gNyk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBieXRlc1tpXSA9IHBhcnNlSW50KGJpdHMuc2xpY2UoaSAqIDcsIGkgKiA3ICsgNyksIDIpICsgKGkgKyAxIDwgYnl0ZXMubGVuZ3RoID8gMHg4MCA6IDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZyb21CRVIoYnl0ZXMuYnVmZmVyLCAwLCBieXRlcy5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgaWYgKHNpemVPbmx5KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCkpO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJWaWV3ID0gdGhpcy52YWx1ZUhleFZpZXc7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAodGhpcy5ibG9ja0xlbmd0aCAtIDEpOyBpKyspXHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W2ldID0gY3VyVmlld1tpXSB8IDB4ODA7XHJcbiAgICAgICAgICAgIHJldFZpZXdbdGhpcy5ibG9ja0xlbmd0aCAtIDFdID0gY3VyVmlld1t0aGlzLmJsb2NrTGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZW5jb2RlZEJ1ZiA9IHB2dXRpbHMudXRpbFRvQmFzZSh0aGlzLnZhbHVlRGVjLCA3KTtcclxuICAgICAgICBpZiAoZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVycm9yIGR1cmluZyBlbmNvZGluZyBTSUQgdmFsdWVcIjtcclxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWRCdWYuYnl0ZUxlbmd0aCk7XHJcbiAgICAgICAgaWYgKCFzaXplT25seSkge1xyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkVmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWRCdWYpO1xyXG4gICAgICAgICAgICBjb25zdCBsZW4gPSBlbmNvZGVkQnVmLmJ5dGVMZW5ndGggLSAxO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tpXSA9IGVuY29kZWRWaWV3W2ldIHwgMHg4MDtcclxuICAgICAgICAgICAgcmV0Vmlld1tsZW5dID0gZW5jb2RlZFZpZXdbbGVuXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldFZpZXc7XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZygpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcclxuICAgICAgICBpZiAodGhpcy5pc0hleE9ubHkpXHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHB2dHN1dGlscy5Db252ZXJ0LlRvSGV4KHRoaXMudmFsdWVIZXhWaWV3KTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNGaXJzdFNpZCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNpZFZhbHVlID0gdGhpcy52YWx1ZURlYztcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlRGVjIDw9IDM5KVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiMC5cIjtcclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlRGVjIDw9IDc5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiMS5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2lkVmFsdWUgLT0gNDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBcIjIuXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZFZhbHVlIC09IDgwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzaWRWYWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMudmFsdWVEZWMudG9TdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWVEZWM6IHRoaXMudmFsdWVEZWMsXHJcbiAgICAgICAgICAgIGlzRmlyc3RTaWQ6IHRoaXMuaXNGaXJzdFNpZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsU2lkVmFsdWVCbG9jay5OQU1FID0gXCJzaWRCbG9ja1wiO1xuXG5jbGFzcyBMb2NhbE9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrIGV4dGVuZHMgVmFsdWVCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlID0gRU1QVFlfU1RSSU5HLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbXTtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBsZXQgcmVzdWx0T2Zmc2V0ID0gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgd2hpbGUgKGlucHV0TGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBzaWRCbG9jayA9IG5ldyBMb2NhbFNpZFZhbHVlQmxvY2soKTtcclxuICAgICAgICAgICAgcmVzdWx0T2Zmc2V0ID0gc2lkQmxvY2suZnJvbUJFUihpbnB1dEJ1ZmZlciwgcmVzdWx0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBzaWRCbG9jay5lcnJvcjtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICAgICAgc2lkQmxvY2suaXNGaXJzdFNpZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gc2lkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIGlucHV0TGVuZ3RoIC09IHNpZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goc2lkQmxvY2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkpIHtcclxuICAgICAgICBjb25zdCByZXRCdWZmZXJzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQnVmID0gdGhpcy52YWx1ZVtpXS50b0JFUihzaXplT25seSk7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZUJ1Zi5ieXRlTGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gdGhpcy52YWx1ZVtpXS5lcnJvcjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0QnVmZmVycy5wdXNoKHZhbHVlQnVmKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbmNhdChyZXRCdWZmZXJzKTtcclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xyXG4gICAgICAgIGxldCBwb3MxID0gMDtcclxuICAgICAgICBsZXQgcG9zMiA9IDA7XHJcbiAgICAgICAgbGV0IHNpZCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGZsYWcgPSBmYWxzZTtcclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIHBvczIgPSBzdHJpbmcuaW5kZXhPZihcIi5cIiwgcG9zMSk7XHJcbiAgICAgICAgICAgIGlmIChwb3MyID09PSAtMSlcclxuICAgICAgICAgICAgICAgIHNpZCA9IHN0cmluZy5zdWJzdHJpbmcocG9zMSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHNpZCA9IHN0cmluZy5zdWJzdHJpbmcocG9zMSwgcG9zMik7XHJcbiAgICAgICAgICAgIHBvczEgPSBwb3MyICsgMTtcclxuICAgICAgICAgICAgaWYgKGZsYWcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNpZEJsb2NrID0gdGhpcy52YWx1ZVswXTtcclxuICAgICAgICAgICAgICAgIGxldCBwbHVzID0gMDtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoc2lkQmxvY2sudmFsdWVEZWMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGx1cyA9IDQwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdXMgPSA4MDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRTSUQgPSBwYXJzZUludChzaWQsIDEwKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc05hTihwYXJzZWRTSUQpKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIHNpZEJsb2NrLnZhbHVlRGVjID0gcGFyc2VkU0lEICsgcGx1cztcclxuICAgICAgICAgICAgICAgIGZsYWcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNpZEJsb2NrID0gbmV3IExvY2FsU2lkVmFsdWVCbG9jaygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNpZCA+IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0QmlnSW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lkVmFsdWUgPSBCaWdJbnQoc2lkKTtcclxuICAgICAgICAgICAgICAgICAgICBzaWRCbG9jay52YWx1ZUJpZ0ludCA9IHNpZFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2lkQmxvY2sudmFsdWVEZWMgPSBwYXJzZUludChzaWQsIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oc2lkQmxvY2sudmFsdWVEZWMpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2lkQmxvY2suaXNGaXJzdFNpZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZmxhZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goc2lkQmxvY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSB3aGlsZSAocG9zMiAhPT0gLTEpO1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGlzSGV4T25seSA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpc0hleE9ubHkgPSB0aGlzLnZhbHVlW2ldLmlzSGV4T25seTtcclxuICAgICAgICAgICAgbGV0IHNpZFN0ciA9IHRoaXMudmFsdWVbaV0udG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgaWYgKGkgIT09IDApXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBgJHtyZXN1bHR9LmA7XHJcbiAgICAgICAgICAgIGlmIChpc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgICAgIHNpZFN0ciA9IGB7JHtzaWRTdHJ9fWA7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZVtpXS5pc0ZpcnN0U2lkKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGAyLnske3NpZFN0cn0gLSA4MH1gO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzaWRTdHI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNpZFN0cjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICBjb25zdCBvYmplY3QgPSB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICBzaWRBcnJheTogW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgb2JqZWN0LnNpZEFycmF5LnB1c2godGhpcy52YWx1ZVtpXS50b0pTT04oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmplY3Q7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9jay5OQU1FID0gXCJPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkbTtcclxuY2xhc3MgT2JqZWN0SWRlbnRpZmllciBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbE9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSA2O1xyXG4gICAgfVxyXG4gICAgZ2V0VmFsdWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVCbG9jay50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgc2V0VmFsdWUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2suZnJvbVN0cmluZyh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke3RoaXMudmFsdWVCbG9jay50b1N0cmluZygpIHx8IFwiZW1wdHlcIn1gO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuX2EkbSA9IE9iamVjdElkZW50aWZpZXI7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuT2JqZWN0SWRlbnRpZmllciA9IF9hJG07XHJcbn0pKCk7XHJcbk9iamVjdElkZW50aWZpZXIuTkFNRSA9IFwiT0JKRUNUIElERU5USUZJRVJcIjtcblxuY2xhc3MgTG9jYWxSZWxhdGl2ZVNpZFZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhMb2NhbEJhc2VCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZURlYyA9IDAsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZURlYyA9IHZhbHVlRGVjO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKGlucHV0TGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgY29uc3QgaW5wdXRWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgaW5wdXRWaWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKVxyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgY29uc3QgaW50QnVmZmVyID0gaW5wdXRWaWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0TGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXdbaV0gPSBpbnRCdWZmZXJbaV0gJiAweDdGO1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoKys7XHJcbiAgICAgICAgICAgIGlmICgoaW50QnVmZmVyW2ldICYgMHg4MCkgPT09IDB4MDApXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGVtcFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYmxvY2tMZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgdGVtcFZpZXdbaV0gPSB0aGlzLnZhbHVlSGV4Vmlld1tpXTtcclxuICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHRlbXBWaWV3O1xyXG4gICAgICAgIGlmICgoaW50QnVmZmVyW3RoaXMuYmxvY2tMZW5ndGggLSAxXSAmIDB4ODApICE9PSAweDAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVuZCBvZiBpbnB1dCByZWFjaGVkIGJlZm9yZSBtZXNzYWdlIHdhcyBmdWxseSBkZWNvZGVkXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVIZXhWaWV3WzBdID09PSAweDAwKVxyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJOZWVkbGVzc2x5IGxvbmcgZm9ybWF0IG9mIFNJRCBlbmNvZGluZ1wiKTtcclxuICAgICAgICBpZiAodGhpcy5ibG9ja0xlbmd0aCA8PSA4KVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlRGVjID0gcHZ1dGlscy51dGlsRnJvbUJhc2UodGhpcy52YWx1ZUhleFZpZXcsIDcpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlRvbyBiaWcgU0lEIGZvciBkZWNvZGluZywgaGV4IG9ubHlcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyB0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgICAgIGlmIChzaXplT25seSlcclxuICAgICAgICAgICAgICAgIHJldHVybiAobmV3IEFycmF5QnVmZmVyKHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGgpKTtcclxuICAgICAgICAgICAgY29uc3QgY3VyVmlldyA9IHRoaXMudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKHRoaXMuYmxvY2tMZW5ndGggLSAxKTsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tpXSA9IGN1clZpZXdbaV0gfCAweDgwO1xyXG4gICAgICAgICAgICByZXRWaWV3W3RoaXMuYmxvY2tMZW5ndGggLSAxXSA9IGN1clZpZXdbdGhpcy5ibG9ja0xlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0Vmlldy5idWZmZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGVuY29kZWRCdWYgPSBwdnV0aWxzLnV0aWxUb0Jhc2UodGhpcy52YWx1ZURlYywgNyk7XHJcbiAgICAgICAgaWYgKGVuY29kZWRCdWYuYnl0ZUxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFcnJvciBkdXJpbmcgZW5jb2RpbmcgU0lEIHZhbHVlXCI7XHJcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShlbmNvZGVkQnVmLmJ5dGVMZW5ndGgpO1xyXG4gICAgICAgIGlmICghc2l6ZU9ubHkpIHtcclxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZFZpZXcgPSBuZXcgVWludDhBcnJheShlbmNvZGVkQnVmKTtcclxuICAgICAgICAgICAgY29uc3QgbGVuID0gZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKylcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbaV0gPSBlbmNvZGVkVmlld1tpXSB8IDB4ODA7XHJcbiAgICAgICAgICAgIHJldFZpZXdbbGVuXSA9IGVuY29kZWRWaWV3W2xlbl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHRvU3RyaW5nKCkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gICAgICAgIGlmICh0aGlzLmlzSGV4T25seSlcclxuICAgICAgICAgICAgcmVzdWx0ID0gcHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy52YWx1ZUhleFZpZXcpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLnZhbHVlRGVjLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlRGVjOiB0aGlzLnZhbHVlRGVjLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxSZWxhdGl2ZVNpZFZhbHVlQmxvY2suTkFNRSA9IFwicmVsYXRpdmVTaWRCbG9ja1wiO1xuXG5jbGFzcyBMb2NhbFJlbGF0aXZlT2JqZWN0SWRlbnRpZmllclZhbHVlQmxvY2sgZXh0ZW5kcyBWYWx1ZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUgPSBFTVBUWV9TVFJJTkcsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGxldCByZXN1bHRPZmZzZXQgPSBpbnB1dE9mZnNldDtcclxuICAgICAgICB3aGlsZSAoaW5wdXRMZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpZEJsb2NrID0gbmV3IExvY2FsUmVsYXRpdmVTaWRWYWx1ZUJsb2NrKCk7XHJcbiAgICAgICAgICAgIHJlc3VsdE9mZnNldCA9IHNpZEJsb2NrLmZyb21CRVIoaW5wdXRCdWZmZXIsIHJlc3VsdE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gc2lkQmxvY2suZXJyb3I7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gc2lkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIGlucHV0TGVuZ3RoIC09IHNpZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goc2lkQmxvY2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHksIHdyaXRlcikge1xyXG4gICAgICAgIGNvbnN0IHJldEJ1ZmZlcnMgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVCdWYgPSB0aGlzLnZhbHVlW2ldLnRvQkVSKHNpemVPbmx5KTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlQnVmLmJ5dGVMZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLnZhbHVlW2ldLmVycm9yO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXRCdWZmZXJzLnB1c2godmFsdWVCdWYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29uY2F0KHJldEJ1ZmZlcnMpO1xyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gW107XHJcbiAgICAgICAgbGV0IHBvczEgPSAwO1xyXG4gICAgICAgIGxldCBwb3MyID0gMDtcclxuICAgICAgICBsZXQgc2lkID0gXCJcIjtcclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIHBvczIgPSBzdHJpbmcuaW5kZXhPZihcIi5cIiwgcG9zMSk7XHJcbiAgICAgICAgICAgIGlmIChwb3MyID09PSAtMSlcclxuICAgICAgICAgICAgICAgIHNpZCA9IHN0cmluZy5zdWJzdHJpbmcocG9zMSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHNpZCA9IHN0cmluZy5zdWJzdHJpbmcocG9zMSwgcG9zMik7XHJcbiAgICAgICAgICAgIHBvczEgPSBwb3MyICsgMTtcclxuICAgICAgICAgICAgY29uc3Qgc2lkQmxvY2sgPSBuZXcgTG9jYWxSZWxhdGl2ZVNpZFZhbHVlQmxvY2soKTtcclxuICAgICAgICAgICAgc2lkQmxvY2sudmFsdWVEZWMgPSBwYXJzZUludChzaWQsIDEwKTtcclxuICAgICAgICAgICAgaWYgKGlzTmFOKHNpZEJsb2NrLnZhbHVlRGVjKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goc2lkQmxvY2spO1xyXG4gICAgICAgIH0gd2hpbGUgKHBvczIgIT09IC0xKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRvU3RyaW5nKCkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gICAgICAgIGxldCBpc0hleE9ubHkgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaXNIZXhPbmx5ID0gdGhpcy52YWx1ZVtpXS5pc0hleE9ubHk7XHJcbiAgICAgICAgICAgIGxldCBzaWRTdHIgPSB0aGlzLnZhbHVlW2ldLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGlmIChpICE9PSAwKVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gYCR7cmVzdWx0fS5gO1xyXG4gICAgICAgICAgICBpZiAoaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICBzaWRTdHIgPSBgeyR7c2lkU3RyfX1gO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNpZFN0cjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2lkU3RyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIHNpZEFycmF5OiBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgb2JqZWN0LnNpZEFycmF5LnB1c2godGhpcy52YWx1ZVtpXS50b0pTT04oKSk7XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcclxuICAgIH1cclxufVxyXG5Mb2NhbFJlbGF0aXZlT2JqZWN0SWRlbnRpZmllclZhbHVlQmxvY2suTkFNRSA9IFwiUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkbDtcclxuY2xhc3MgUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTM7XHJcbiAgICB9XHJcbiAgICBnZXRWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUJsb2NrLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBzZXRWYWx1ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5mcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7dGhpcy52YWx1ZUJsb2NrLnRvU3RyaW5nKCkgfHwgXCJlbXB0eVwifWA7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmdldFZhbHVlKCksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5fYSRsID0gUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlJlbGF0aXZlT2JqZWN0SWRlbnRpZmllciA9IF9hJGw7XHJcbn0pKCk7XHJcblJlbGF0aXZlT2JqZWN0SWRlbnRpZmllci5OQU1FID0gXCJSZWxhdGl2ZU9iamVjdElkZW50aWZpZXJcIjtcblxudmFyIF9hJGs7XHJcbmNsYXNzIFNlcXVlbmNlIGV4dGVuZHMgQ29uc3RydWN0ZWQge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTY7XHJcbiAgICB9XHJcbn1cclxuX2EkayA9IFNlcXVlbmNlO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlNlcXVlbmNlID0gX2EkaztcclxufSkoKTtcclxuU2VxdWVuY2UuTkFNRSA9IFwiU0VRVUVOQ0VcIjtcblxudmFyIF9hJGo7XHJcbmNsYXNzIFNldCBleHRlbmRzIENvbnN0cnVjdGVkIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDE3O1xyXG4gICAgfVxyXG59XHJcbl9hJGogPSBTZXQ7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuU2V0ID0gX2EkajtcclxufSkoKTtcclxuU2V0Lk5BTUUgPSBcIlNFVFwiO1xuXG5jbGFzcyBMb2NhbFN0cmluZ1ZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhWYWx1ZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pc0hleE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBFTVBUWV9TVFJJTkc7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIlN0cmluZ1ZhbHVlQmxvY2tcIjtcblxuY2xhc3MgTG9jYWxTaW1wbGVTdHJpbmdWYWx1ZUJsb2NrIGV4dGVuZHMgTG9jYWxTdHJpbmdWYWx1ZUJsb2NrIHtcclxufVxyXG5Mb2NhbFNpbXBsZVN0cmluZ1ZhbHVlQmxvY2suTkFNRSA9IFwiU2ltcGxlU3RyaW5nVmFsdWVCbG9ja1wiO1xuXG5jbGFzcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIGV4dGVuZHMgQmFzZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbFNpbXBsZVN0cmluZ1ZhbHVlQmxvY2spO1xyXG4gICAgfVxyXG4gICAgZnJvbUJ1ZmZlcihpbnB1dEJ1ZmZlcikge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpKTtcclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoaW5wdXRTdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBzdHJMZW4gPSBpbnB1dFN0cmluZy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShzdHJMZW4pO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyTGVuOyBpKyspXHJcbiAgICAgICAgICAgIHZpZXdbaV0gPSBpbnB1dFN0cmluZy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IGlucHV0U3RyaW5nO1xyXG4gICAgfVxyXG59XHJcbkxvY2FsU2ltcGxlU3RyaW5nQmxvY2suTkFNRSA9IFwiU0lNUExFIFNUUklOR1wiO1xuXG5jbGFzcyBMb2NhbFV0ZjhTdHJpbmdWYWx1ZUJsb2NrIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBmcm9tQnVmZmVyKGlucHV0QnVmZmVyKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBwdnRzdXRpbHMuQ29udmVydC5Ub1V0ZjhTdHJpbmcoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXgpIHtcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKGBFcnJvciBkdXJpbmcgXCJkZWNvZGVVUklDb21wb25lbnRcIjogJHtleH0sIHVzaW5nIHJhdyBzdHJpbmdgKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gcHZ0c3V0aWxzLkNvbnZlcnQuVG9CaW5hcnkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoaW5wdXRTdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocHZ0c3V0aWxzLkNvbnZlcnQuRnJvbVV0ZjhTdHJpbmcoaW5wdXRTdHJpbmcpKTtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBpbnB1dFN0cmluZztcclxuICAgIH1cclxufVxyXG5Mb2NhbFV0ZjhTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIlV0ZjhTdHJpbmdWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRpO1xyXG5jbGFzcyBVdGY4U3RyaW5nIGV4dGVuZHMgTG9jYWxVdGY4U3RyaW5nVmFsdWVCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxMjtcclxuICAgIH1cclxufVxyXG5fYSRpID0gVXRmOFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5VdGY4U3RyaW5nID0gX2EkaTtcclxufSkoKTtcclxuVXRmOFN0cmluZy5OQU1FID0gXCJVVEY4U3RyaW5nXCI7XG5cbmNsYXNzIExvY2FsQm1wU3RyaW5nVmFsdWVCbG9jayBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgZnJvbUJ1ZmZlcihpbnB1dEJ1ZmZlcikge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IHB2dHN1dGlscy5Db252ZXJ0LlRvVXRmMTZTdHJpbmcoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKGlucHV0U3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gaW5wdXRTdHJpbmc7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHB2dHN1dGlscy5Db252ZXJ0LkZyb21VdGYxNlN0cmluZyhpbnB1dFN0cmluZykpO1xyXG4gICAgfVxyXG59XHJcbkxvY2FsQm1wU3RyaW5nVmFsdWVCbG9jay5OQU1FID0gXCJCbXBTdHJpbmdWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRoO1xyXG5jbGFzcyBCbXBTdHJpbmcgZXh0ZW5kcyBMb2NhbEJtcFN0cmluZ1ZhbHVlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDMwO1xyXG4gICAgfVxyXG59XHJcbl9hJGggPSBCbXBTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuQm1wU3RyaW5nID0gX2EkaDtcclxufSkoKTtcclxuQm1wU3RyaW5nLk5BTUUgPSBcIkJNUFN0cmluZ1wiO1xuXG5jbGFzcyBMb2NhbFVuaXZlcnNhbFN0cmluZ1ZhbHVlQmxvY2sgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGZyb21CdWZmZXIoaW5wdXRCdWZmZXIpIHtcclxuICAgICAgICBjb25zdCBjb3B5QnVmZmVyID0gQXJyYXlCdWZmZXIuaXNWaWV3KGlucHV0QnVmZmVyKSA/IGlucHV0QnVmZmVyLnNsaWNlKCkuYnVmZmVyIDogaW5wdXRCdWZmZXIuc2xpY2UoMCk7XHJcbiAgICAgICAgY29uc3QgdmFsdWVWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoY29weUJ1ZmZlcik7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZVZpZXcubGVuZ3RoOyBpICs9IDQpIHtcclxuICAgICAgICAgICAgdmFsdWVWaWV3W2ldID0gdmFsdWVWaWV3W2kgKyAzXTtcclxuICAgICAgICAgICAgdmFsdWVWaWV3W2kgKyAxXSA9IHZhbHVlVmlld1tpICsgMl07XHJcbiAgICAgICAgICAgIHZhbHVlVmlld1tpICsgMl0gPSAweDAwO1xyXG4gICAgICAgICAgICB2YWx1ZVZpZXdbaSArIDNdID0gMHgwMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBuZXcgVWludDMyQXJyYXkoY29weUJ1ZmZlcikpO1xyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhpbnB1dFN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHN0ckxlbmd0aCA9IGlucHV0U3RyaW5nLmxlbmd0aDtcclxuICAgICAgICBjb25zdCB2YWx1ZUhleFZpZXcgPSB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc3RyTGVuZ3RoICogNCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBjb2RlQnVmID0gcHZ1dGlscy51dGlsVG9CYXNlKGlucHV0U3RyaW5nLmNoYXJDb2RlQXQoaSksIDgpO1xyXG4gICAgICAgICAgICBjb25zdCBjb2RlVmlldyA9IG5ldyBVaW50OEFycmF5KGNvZGVCdWYpO1xyXG4gICAgICAgICAgICBpZiAoY29kZVZpZXcubGVuZ3RoID4gNClcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBkaWYgPSA0IC0gY29kZVZpZXcubGVuZ3RoO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gKGNvZGVWaWV3Lmxlbmd0aCAtIDEpOyBqID49IDA7IGotLSlcclxuICAgICAgICAgICAgICAgIHZhbHVlSGV4Vmlld1tpICogNCArIGogKyBkaWZdID0gY29kZVZpZXdbal07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IGlucHV0U3RyaW5nO1xyXG4gICAgfVxyXG59XHJcbkxvY2FsVW5pdmVyc2FsU3RyaW5nVmFsdWVCbG9jay5OQU1FID0gXCJVbml2ZXJzYWxTdHJpbmdWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRnO1xyXG5jbGFzcyBVbml2ZXJzYWxTdHJpbmcgZXh0ZW5kcyBMb2NhbFVuaXZlcnNhbFN0cmluZ1ZhbHVlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDI4O1xyXG4gICAgfVxyXG59XHJcbl9hJGcgPSBVbml2ZXJzYWxTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVW5pdmVyc2FsU3RyaW5nID0gX2EkZztcclxufSkoKTtcclxuVW5pdmVyc2FsU3RyaW5nLk5BTUUgPSBcIlVuaXZlcnNhbFN0cmluZ1wiO1xuXG52YXIgX2EkZjtcclxuY2xhc3MgTnVtZXJpY1N0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTg7XHJcbiAgICB9XHJcbn1cclxuX2EkZiA9IE51bWVyaWNTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuTnVtZXJpY1N0cmluZyA9IF9hJGY7XHJcbn0pKCk7XHJcbk51bWVyaWNTdHJpbmcuTkFNRSA9IFwiTnVtZXJpY1N0cmluZ1wiO1xuXG52YXIgX2EkZTtcclxuY2xhc3MgUHJpbnRhYmxlU3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxOTtcclxuICAgIH1cclxufVxyXG5fYSRlID0gUHJpbnRhYmxlU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlByaW50YWJsZVN0cmluZyA9IF9hJGU7XHJcbn0pKCk7XHJcblByaW50YWJsZVN0cmluZy5OQU1FID0gXCJQcmludGFibGVTdHJpbmdcIjtcblxudmFyIF9hJGQ7XHJcbmNsYXNzIFRlbGV0ZXhTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDIwO1xyXG4gICAgfVxyXG59XHJcbl9hJGQgPSBUZWxldGV4U3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlRlbGV0ZXhTdHJpbmcgPSBfYSRkO1xyXG59KSgpO1xyXG5UZWxldGV4U3RyaW5nLk5BTUUgPSBcIlRlbGV0ZXhTdHJpbmdcIjtcblxudmFyIF9hJGM7XHJcbmNsYXNzIFZpZGVvdGV4U3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyMTtcclxuICAgIH1cclxufVxyXG5fYSRjID0gVmlkZW90ZXhTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVmlkZW90ZXhTdHJpbmcgPSBfYSRjO1xyXG59KSgpO1xyXG5WaWRlb3RleFN0cmluZy5OQU1FID0gXCJWaWRlb3RleFN0cmluZ1wiO1xuXG52YXIgX2EkYjtcclxuY2xhc3MgSUE1U3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyMjtcclxuICAgIH1cclxufVxyXG5fYSRiID0gSUE1U3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLklBNVN0cmluZyA9IF9hJGI7XHJcbn0pKCk7XHJcbklBNVN0cmluZy5OQU1FID0gXCJJQTVTdHJpbmdcIjtcblxudmFyIF9hJGE7XHJcbmNsYXNzIEdyYXBoaWNTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDI1O1xyXG4gICAgfVxyXG59XHJcbl9hJGEgPSBHcmFwaGljU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkdyYXBoaWNTdHJpbmcgPSBfYSRhO1xyXG59KSgpO1xyXG5HcmFwaGljU3RyaW5nLk5BTUUgPSBcIkdyYXBoaWNTdHJpbmdcIjtcblxudmFyIF9hJDk7XHJcbmNsYXNzIFZpc2libGVTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDI2O1xyXG4gICAgfVxyXG59XHJcbl9hJDkgPSBWaXNpYmxlU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlZpc2libGVTdHJpbmcgPSBfYSQ5O1xyXG59KSgpO1xyXG5WaXNpYmxlU3RyaW5nLk5BTUUgPSBcIlZpc2libGVTdHJpbmdcIjtcblxudmFyIF9hJDg7XHJcbmNsYXNzIEdlbmVyYWxTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDI3O1xyXG4gICAgfVxyXG59XHJcbl9hJDggPSBHZW5lcmFsU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkdlbmVyYWxTdHJpbmcgPSBfYSQ4O1xyXG59KSgpO1xyXG5HZW5lcmFsU3RyaW5nLk5BTUUgPSBcIkdlbmVyYWxTdHJpbmdcIjtcblxudmFyIF9hJDc7XHJcbmNsYXNzIENoYXJhY3RlclN0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjk7XHJcbiAgICB9XHJcbn1cclxuX2EkNyA9IENoYXJhY3RlclN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5DaGFyYWN0ZXJTdHJpbmcgPSBfYSQ3O1xyXG59KSgpO1xyXG5DaGFyYWN0ZXJTdHJpbmcuTkFNRSA9IFwiQ2hhcmFjdGVyU3RyaW5nXCI7XG5cbnZhciBfYSQ2O1xyXG5jbGFzcyBVVENUaW1lIGV4dGVuZHMgVmlzaWJsZVN0cmluZyB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlLCB2YWx1ZURhdGUsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy55ZWFyID0gMDtcclxuICAgICAgICB0aGlzLm1vbnRoID0gMDtcclxuICAgICAgICB0aGlzLmRheSA9IDA7XHJcbiAgICAgICAgdGhpcy5ob3VyID0gMDtcclxuICAgICAgICB0aGlzLm1pbnV0ZSA9IDA7XHJcbiAgICAgICAgdGhpcy5zZWNvbmQgPSAwO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUubGVuZ3RoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXdbaV0gPSB2YWx1ZS5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWVEYXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbURhdGUodmFsdWVEYXRlKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMudG9CdWZmZXIoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDIzO1xyXG4gICAgfVxyXG4gICAgZnJvbUJ1ZmZlcihpbnB1dEJ1ZmZlcikge1xyXG4gICAgICAgIHRoaXMuZnJvbVN0cmluZyhTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKSkpO1xyXG4gICAgfVxyXG4gICAgdG9CdWZmZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyID0gdGhpcy50b1N0cmluZygpO1xyXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihzdHIubGVuZ3RoKTtcclxuICAgICAgICBjb25zdCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgdmlld1tpXSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgIHJldHVybiBidWZmZXI7XHJcbiAgICB9XHJcbiAgICBmcm9tRGF0ZShpbnB1dERhdGUpIHtcclxuICAgICAgICB0aGlzLnllYXIgPSBpbnB1dERhdGUuZ2V0VVRDRnVsbFllYXIoKTtcclxuICAgICAgICB0aGlzLm1vbnRoID0gaW5wdXREYXRlLmdldFVUQ01vbnRoKCkgKyAxO1xyXG4gICAgICAgIHRoaXMuZGF5ID0gaW5wdXREYXRlLmdldFVUQ0RhdGUoKTtcclxuICAgICAgICB0aGlzLmhvdXIgPSBpbnB1dERhdGUuZ2V0VVRDSG91cnMoKTtcclxuICAgICAgICB0aGlzLm1pbnV0ZSA9IGlucHV0RGF0ZS5nZXRVVENNaW51dGVzKCk7XHJcbiAgICAgICAgdGhpcy5zZWNvbmQgPSBpbnB1dERhdGUuZ2V0VVRDU2Vjb25kcygpO1xyXG4gICAgfVxyXG4gICAgdG9EYXRlKCkge1xyXG4gICAgICAgIHJldHVybiAobmV3IERhdGUoRGF0ZS5VVEModGhpcy55ZWFyLCB0aGlzLm1vbnRoIC0gMSwgdGhpcy5kYXksIHRoaXMuaG91ciwgdGhpcy5taW51dGUsIHRoaXMuc2Vjb25kKSkpO1xyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhpbnB1dFN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHBhcnNlciA9IC8oXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSlaL2lnO1xyXG4gICAgICAgIGNvbnN0IHBhcnNlckFycmF5ID0gcGFyc2VyLmV4ZWMoaW5wdXRTdHJpbmcpO1xyXG4gICAgICAgIGlmIChwYXJzZXJBcnJheSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIjtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbMV0sIDEwKTtcclxuICAgICAgICBpZiAoeWVhciA+PSA1MClcclxuICAgICAgICAgICAgdGhpcy55ZWFyID0gMTkwMCArIHllYXI7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLnllYXIgPSAyMDAwICsgeWVhcjtcclxuICAgICAgICB0aGlzLm1vbnRoID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbMl0sIDEwKTtcclxuICAgICAgICB0aGlzLmRheSA9IHBhcnNlSW50KHBhcnNlckFycmF5WzNdLCAxMCk7XHJcbiAgICAgICAgdGhpcy5ob3VyID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbNF0sIDEwKTtcclxuICAgICAgICB0aGlzLm1pbnV0ZSA9IHBhcnNlSW50KHBhcnNlckFycmF5WzVdLCAxMCk7XHJcbiAgICAgICAgdGhpcy5zZWNvbmQgPSBwYXJzZUludChwYXJzZXJBcnJheVs2XSwgMTApO1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoZW5jb2RpbmcgPSBcImlzb1wiKSB7XHJcbiAgICAgICAgaWYgKGVuY29kaW5nID09PSBcImlzb1wiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dEFycmF5ID0gbmV3IEFycmF5KDcpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheVswXSA9IHB2dXRpbHMucGFkTnVtYmVyKCgodGhpcy55ZWFyIDwgMjAwMCkgPyAodGhpcy55ZWFyIC0gMTkwMCkgOiAodGhpcy55ZWFyIC0gMjAwMCkpLCAyKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXlbMV0gPSBwdnV0aWxzLnBhZE51bWJlcih0aGlzLm1vbnRoLCAyKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXlbMl0gPSBwdnV0aWxzLnBhZE51bWJlcih0aGlzLmRheSwgMik7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5WzNdID0gcHZ1dGlscy5wYWROdW1iZXIodGhpcy5ob3VyLCAyKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXlbNF0gPSBwdnV0aWxzLnBhZE51bWJlcih0aGlzLm1pbnV0ZSwgMik7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5WzVdID0gcHZ1dGlscy5wYWROdW1iZXIodGhpcy5zZWNvbmQsIDIpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheVs2XSA9IFwiWlwiO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0QXJyYXkuam9pbihcIlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKGVuY29kaW5nKTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7dGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpfWA7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHllYXI6IHRoaXMueWVhcixcclxuICAgICAgICAgICAgbW9udGg6IHRoaXMubW9udGgsXHJcbiAgICAgICAgICAgIGRheTogdGhpcy5kYXksXHJcbiAgICAgICAgICAgIGhvdXI6IHRoaXMuaG91cixcclxuICAgICAgICAgICAgbWludXRlOiB0aGlzLm1pbnV0ZSxcclxuICAgICAgICAgICAgc2Vjb25kOiB0aGlzLnNlY29uZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbl9hJDYgPSBVVENUaW1lO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlVUQ1RpbWUgPSBfYSQ2O1xyXG59KSgpO1xyXG5VVENUaW1lLk5BTUUgPSBcIlVUQ1RpbWVcIjtcblxudmFyIF9hJDU7XHJcbmNsYXNzIEdlbmVyYWxpemVkVGltZSBleHRlbmRzIFVUQ1RpbWUge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgdmFyIF9iO1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIChfYiA9IHRoaXMubWlsbGlzZWNvbmQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICh0aGlzLm1pbGxpc2Vjb25kID0gMCk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjQ7XHJcbiAgICB9XHJcbiAgICBmcm9tRGF0ZShpbnB1dERhdGUpIHtcclxuICAgICAgICBzdXBlci5mcm9tRGF0ZShpbnB1dERhdGUpO1xyXG4gICAgICAgIHRoaXMubWlsbGlzZWNvbmQgPSBpbnB1dERhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XHJcbiAgICB9XHJcbiAgICB0b0RhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIChuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsIHRoaXMubW9udGggLSAxLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQsIHRoaXMubWlsbGlzZWNvbmQpKSk7XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKGlucHV0U3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGlzVVRDID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IHRpbWVTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgIGxldCBkYXRlVGltZVN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGZyYWN0aW9uUGFydCA9IDA7XHJcbiAgICAgICAgbGV0IHBhcnNlcjtcclxuICAgICAgICBsZXQgaG91ckRpZmZlcmVuY2UgPSAwO1xyXG4gICAgICAgIGxldCBtaW51dGVEaWZmZXJlbmNlID0gMDtcclxuICAgICAgICBpZiAoaW5wdXRTdHJpbmdbaW5wdXRTdHJpbmcubGVuZ3RoIC0gMV0gPT09IFwiWlwiKSB7XHJcbiAgICAgICAgICAgIHRpbWVTdHJpbmcgPSBpbnB1dFN0cmluZy5zdWJzdHJpbmcoMCwgaW5wdXRTdHJpbmcubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgIGlzVVRDID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IG5ldyBOdW1iZXIoaW5wdXRTdHJpbmdbaW5wdXRTdHJpbmcubGVuZ3RoIC0gMV0pO1xyXG4gICAgICAgICAgICBpZiAoaXNOYU4obnVtYmVyLnZhbHVlT2YoKSkpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgICAgIHRpbWVTdHJpbmcgPSBpbnB1dFN0cmluZztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzVVRDKSB7XHJcbiAgICAgICAgICAgIGlmICh0aW1lU3RyaW5nLmluZGV4T2YoXCIrXCIpICE9PSAtMSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgaWYgKHRpbWVTdHJpbmcuaW5kZXhPZihcIi1cIikgIT09IC0xKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IG11bHRpcGxpZXIgPSAxO1xyXG4gICAgICAgICAgICBsZXQgZGlmZmVyZW5jZVBvc2l0aW9uID0gdGltZVN0cmluZy5pbmRleE9mKFwiK1wiKTtcclxuICAgICAgICAgICAgbGV0IGRpZmZlcmVuY2VTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgICAgICBpZiAoZGlmZmVyZW5jZVBvc2l0aW9uID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgZGlmZmVyZW5jZVBvc2l0aW9uID0gdGltZVN0cmluZy5pbmRleE9mKFwiLVwiKTtcclxuICAgICAgICAgICAgICAgIG11bHRpcGxpZXIgPSAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGlmZmVyZW5jZVBvc2l0aW9uICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgZGlmZmVyZW5jZVN0cmluZyA9IHRpbWVTdHJpbmcuc3Vic3RyaW5nKGRpZmZlcmVuY2VQb3NpdGlvbiArIDEpO1xyXG4gICAgICAgICAgICAgICAgdGltZVN0cmluZyA9IHRpbWVTdHJpbmcuc3Vic3RyaW5nKDAsIGRpZmZlcmVuY2VQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGRpZmZlcmVuY2VTdHJpbmcubGVuZ3RoICE9PSAyKSAmJiAoZGlmZmVyZW5jZVN0cmluZy5sZW5ndGggIT09IDQpKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgICAgIGxldCBudW1iZXIgPSBwYXJzZUludChkaWZmZXJlbmNlU3RyaW5nLnN1YnN0cmluZygwLCAyKSwgMTApO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKG51bWJlci52YWx1ZU9mKCkpKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgICAgIGhvdXJEaWZmZXJlbmNlID0gbXVsdGlwbGllciAqIG51bWJlcjtcclxuICAgICAgICAgICAgICAgIGlmIChkaWZmZXJlbmNlU3RyaW5nLmxlbmd0aCA9PT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG51bWJlciA9IHBhcnNlSW50KGRpZmZlcmVuY2VTdHJpbmcuc3Vic3RyaW5nKDIsIDQpLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKG51bWJlci52YWx1ZU9mKCkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgbWludXRlRGlmZmVyZW5jZSA9IG11bHRpcGxpZXIgKiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGZyYWN0aW9uUG9pbnRQb3NpdGlvbiA9IHRpbWVTdHJpbmcuaW5kZXhPZihcIi5cIik7XHJcbiAgICAgICAgaWYgKGZyYWN0aW9uUG9pbnRQb3NpdGlvbiA9PT0gLTEpXHJcbiAgICAgICAgICAgIGZyYWN0aW9uUG9pbnRQb3NpdGlvbiA9IHRpbWVTdHJpbmcuaW5kZXhPZihcIixcIik7XHJcbiAgICAgICAgaWYgKGZyYWN0aW9uUG9pbnRQb3NpdGlvbiAhPT0gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgZnJhY3Rpb25QYXJ0Q2hlY2sgPSBuZXcgTnVtYmVyKGAwJHt0aW1lU3RyaW5nLnN1YnN0cmluZyhmcmFjdGlvblBvaW50UG9zaXRpb24pfWApO1xyXG4gICAgICAgICAgICBpZiAoaXNOYU4oZnJhY3Rpb25QYXJ0Q2hlY2sudmFsdWVPZigpKSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgZnJhY3Rpb25QYXJ0ID0gZnJhY3Rpb25QYXJ0Q2hlY2sudmFsdWVPZigpO1xyXG4gICAgICAgICAgICBkYXRlVGltZVN0cmluZyA9IHRpbWVTdHJpbmcuc3Vic3RyaW5nKDAsIGZyYWN0aW9uUG9pbnRQb3NpdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgZGF0ZVRpbWVTdHJpbmcgPSB0aW1lU3RyaW5nO1xyXG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xyXG4gICAgICAgICAgICBjYXNlIChkYXRlVGltZVN0cmluZy5sZW5ndGggPT09IDgpOlxyXG4gICAgICAgICAgICAgICAgcGFyc2VyID0gLyhcXGR7NH0pKFxcZHsyfSkoXFxkezJ9KS9pZztcclxuICAgICAgICAgICAgICAgIGlmIChmcmFjdGlvblBvaW50UG9zaXRpb24gIT09IC0xKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIChkYXRlVGltZVN0cmluZy5sZW5ndGggPT09IDEwKTpcclxuICAgICAgICAgICAgICAgIHBhcnNlciA9IC8oXFxkezR9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KS9pZztcclxuICAgICAgICAgICAgICAgIGlmIChmcmFjdGlvblBvaW50UG9zaXRpb24gIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZyYWN0aW9uUmVzdWx0ID0gNjAgKiBmcmFjdGlvblBhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taW51dGUgPSBNYXRoLmZsb29yKGZyYWN0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICBmcmFjdGlvblJlc3VsdCA9IDYwICogKGZyYWN0aW9uUmVzdWx0IC0gdGhpcy5taW51dGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kID0gTWF0aC5mbG9vcihmcmFjdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb25SZXN1bHQgPSAxMDAwICogKGZyYWN0aW9uUmVzdWx0IC0gdGhpcy5zZWNvbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWlsbGlzZWNvbmQgPSBNYXRoLmZsb29yKGZyYWN0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIChkYXRlVGltZVN0cmluZy5sZW5ndGggPT09IDEyKTpcclxuICAgICAgICAgICAgICAgIHBhcnNlciA9IC8oXFxkezR9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pL2lnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZyYWN0aW9uUG9pbnRQb3NpdGlvbiAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZnJhY3Rpb25SZXN1bHQgPSA2MCAqIGZyYWN0aW9uUGFydDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY29uZCA9IE1hdGguZmxvb3IoZnJhY3Rpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uUmVzdWx0ID0gMTAwMCAqIChmcmFjdGlvblJlc3VsdCAtIHRoaXMuc2Vjb25kKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbGxpc2Vjb25kID0gTWF0aC5mbG9vcihmcmFjdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAoZGF0ZVRpbWVTdHJpbmcubGVuZ3RoID09PSAxNCk6XHJcbiAgICAgICAgICAgICAgICBwYXJzZXIgPSAvKFxcZHs0fSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pL2lnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZyYWN0aW9uUG9pbnRQb3NpdGlvbiAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmcmFjdGlvblJlc3VsdCA9IDEwMDAgKiBmcmFjdGlvblBhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taWxsaXNlY29uZCA9IE1hdGguZmxvb3IoZnJhY3Rpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBhcnNlckFycmF5ID0gcGFyc2VyLmV4ZWMoZGF0ZVRpbWVTdHJpbmcpO1xyXG4gICAgICAgIGlmIChwYXJzZXJBcnJheSA9PT0gbnVsbClcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgcGFyc2VyQXJyYXkubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgc3dpdGNoIChqKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbal0sIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbal0sIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRheSA9IHBhcnNlSW50KHBhcnNlckFycmF5W2pdLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ob3VyID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbal0sIDEwKSArIGhvdXJEaWZmZXJlbmNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWludXRlID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbal0sIDEwKSArIG1pbnV0ZURpZmZlcmVuY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWNvbmQgPSBwYXJzZUludChwYXJzZXJBcnJheVtqXSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzVVRDID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wRGF0ZSA9IG5ldyBEYXRlKHRoaXMueWVhciwgdGhpcy5tb250aCwgdGhpcy5kYXksIHRoaXMuaG91ciwgdGhpcy5taW51dGUsIHRoaXMuc2Vjb25kLCB0aGlzLm1pbGxpc2Vjb25kKTtcclxuICAgICAgICAgICAgdGhpcy55ZWFyID0gdGVtcERhdGUuZ2V0VVRDRnVsbFllYXIoKTtcclxuICAgICAgICAgICAgdGhpcy5tb250aCA9IHRlbXBEYXRlLmdldFVUQ01vbnRoKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF5ID0gdGVtcERhdGUuZ2V0VVRDRGF5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuaG91ciA9IHRlbXBEYXRlLmdldFVUQ0hvdXJzKCk7XHJcbiAgICAgICAgICAgIHRoaXMubWludXRlID0gdGVtcERhdGUuZ2V0VVRDTWludXRlcygpO1xyXG4gICAgICAgICAgICB0aGlzLnNlY29uZCA9IHRlbXBEYXRlLmdldFVUQ1NlY29uZHMoKTtcclxuICAgICAgICAgICAgdGhpcy5taWxsaXNlY29uZCA9IHRlbXBEYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRvU3RyaW5nKGVuY29kaW5nID0gXCJpc29cIikge1xyXG4gICAgICAgIGlmIChlbmNvZGluZyA9PT0gXCJpc29cIikge1xyXG4gICAgICAgICAgICBjb25zdCBvdXRwdXRBcnJheSA9IFtdO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMueWVhciwgNCkpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMubW9udGgsIDIpKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChwdnV0aWxzLnBhZE51bWJlcih0aGlzLmRheSwgMikpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMuaG91ciwgMikpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMubWludXRlLCAyKSk7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2gocHZ1dGlscy5wYWROdW1iZXIodGhpcy5zZWNvbmQsIDIpKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMubWlsbGlzZWNvbmQgIT09IDApIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2goXCIuXCIpO1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChwdnV0aWxzLnBhZE51bWJlcih0aGlzLm1pbGxpc2Vjb25kLCAzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChcIlpcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXRBcnJheS5qb2luKFwiXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoZW5jb2RpbmcpO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICBtaWxsaXNlY29uZDogdGhpcy5taWxsaXNlY29uZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbl9hJDUgPSBHZW5lcmFsaXplZFRpbWU7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuR2VuZXJhbGl6ZWRUaW1lID0gX2EkNTtcclxufSkoKTtcclxuR2VuZXJhbGl6ZWRUaW1lLk5BTUUgPSBcIkdlbmVyYWxpemVkVGltZVwiO1xuXG52YXIgX2EkNDtcclxuY2xhc3MgREFURSBleHRlbmRzIFV0ZjhTdHJpbmcge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMzE7XHJcbiAgICB9XHJcbn1cclxuX2EkNCA9IERBVEU7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuREFURSA9IF9hJDQ7XHJcbn0pKCk7XHJcbkRBVEUuTkFNRSA9IFwiREFURVwiO1xuXG52YXIgX2EkMztcclxuY2xhc3MgVGltZU9mRGF5IGV4dGVuZHMgVXRmOFN0cmluZyB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAzMjtcclxuICAgIH1cclxufVxyXG5fYSQzID0gVGltZU9mRGF5O1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlRpbWVPZkRheSA9IF9hJDM7XHJcbn0pKCk7XHJcblRpbWVPZkRheS5OQU1FID0gXCJUaW1lT2ZEYXlcIjtcblxudmFyIF9hJDI7XHJcbmNsYXNzIERhdGVUaW1lIGV4dGVuZHMgVXRmOFN0cmluZyB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAzMztcclxuICAgIH1cclxufVxyXG5fYSQyID0gRGF0ZVRpbWU7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuRGF0ZVRpbWUgPSBfYSQyO1xyXG59KSgpO1xyXG5EYXRlVGltZS5OQU1FID0gXCJEYXRlVGltZVwiO1xuXG52YXIgX2EkMTtcclxuY2xhc3MgRHVyYXRpb24gZXh0ZW5kcyBVdGY4U3RyaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDM0O1xyXG4gICAgfVxyXG59XHJcbl9hJDEgPSBEdXJhdGlvbjtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5EdXJhdGlvbiA9IF9hJDE7XHJcbn0pKCk7XHJcbkR1cmF0aW9uLk5BTUUgPSBcIkR1cmF0aW9uXCI7XG5cbnZhciBfYTtcclxuY2xhc3MgVElNRSBleHRlbmRzIFV0ZjhTdHJpbmcge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTQ7XHJcbiAgICB9XHJcbn1cclxuX2EgPSBUSU1FO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlRJTUUgPSBfYTtcclxufSkoKTtcclxuVElNRS5OQU1FID0gXCJUSU1FXCI7XG5cbmNsYXNzIEFueSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IG5hbWUgPSBFTVBUWV9TVFJJTkcsIG9wdGlvbmFsID0gZmFsc2UsIH0gPSB7fSkge1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgdGhpcy5vcHRpb25hbCA9IG9wdGlvbmFsO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIENob2ljZSBleHRlbmRzIEFueSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlID0gW10sIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFJlcGVhdGVkIGV4dGVuZHMgQW55IHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUgPSBuZXcgQW55KCksIGxvY2FsID0gZmFsc2UsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubG9jYWwgPSBsb2NhbDtcclxuICAgIH1cclxufVxuXG5jbGFzcyBSYXdEYXRhIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgZGF0YSA9IEVNUFRZX1ZJRVcgfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5kYXRhVmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGRhdGEpO1xyXG4gICAgfVxyXG4gICAgZ2V0IGRhdGEoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICB9XHJcbiAgICBzZXQgZGF0YSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuZGF0YVZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBlbmRMZW5ndGggPSBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuZGF0YVZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcikuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGVuZExlbmd0aCk7XHJcbiAgICAgICAgcmV0dXJuIGVuZExlbmd0aDtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICB9XHJcbn1cblxuZnVuY3Rpb24gY29tcGFyZVNjaGVtYShyb290LCBpbnB1dERhdGEsIGlucHV0U2NoZW1hKSB7XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEgaW5zdGFuY2VvZiBDaG9pY2UpIHtcclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGlucHV0U2NoZW1hLnZhbHVlLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbXBhcmVTY2hlbWEocm9vdCwgaW5wdXREYXRhLCBpbnB1dFNjaGVtYS52YWx1ZVtqXSk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQudmVyaWZpZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVyaWZpZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc3QgX3Jlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBcIldyb25nIHZhbHVlcyBmb3IgQ2hvaWNlIHR5cGVcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLmhhc093blByb3BlcnR5KE5BTUUpKVxyXG4gICAgICAgICAgICAgICAgX3Jlc3VsdC5uYW1lID0gaW5wdXRTY2hlbWEubmFtZTtcclxuICAgICAgICAgICAgcmV0dXJuIF9yZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hIGluc3RhbmNlb2YgQW55KSB7XHJcbiAgICAgICAgaWYgKGlucHV0U2NoZW1hLmhhc093blByb3BlcnR5KE5BTUUpKVxyXG4gICAgICAgICAgICByb290W2lucHV0U2NoZW1hLm5hbWVdID0gaW5wdXREYXRhO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiB0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKChyb290IGluc3RhbmNlb2YgT2JqZWN0KSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyByb290IG9iamVjdFwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKChpbnB1dERhdGEgaW5zdGFuY2VvZiBPYmplY3QpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIGRhdGFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICgoaW5wdXRTY2hlbWEgaW5zdGFuY2VvZiBPYmplY3QpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKChJRF9CTE9DSyBpbiBpbnB1dFNjaGVtYSkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoKEZST01fQkVSIGluIGlucHV0U2NoZW1hLmlkQmxvY2spID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKChUT19CRVIgaW4gaW5wdXRTY2hlbWEuaWRCbG9jaykgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCBlbmNvZGVkSWQgPSBpbnB1dFNjaGVtYS5pZEJsb2NrLnRvQkVSKGZhbHNlKTtcclxuICAgIGlmIChlbmNvZGVkSWQuYnl0ZUxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIkVycm9yIGVuY29kaW5nIGlkQmxvY2sgZm9yIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGVjb2RlZE9mZnNldCA9IGlucHV0U2NoZW1hLmlkQmxvY2suZnJvbUJFUihlbmNvZGVkSWQsIDAsIGVuY29kZWRJZC5ieXRlTGVuZ3RoKTtcclxuICAgIGlmIChkZWNvZGVkT2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIkVycm9yIGRlY29kaW5nIGlkQmxvY2sgZm9yIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2suaGFzT3duUHJvcGVydHkoVEFHX0NMQVNTKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLnRhZ0NsYXNzICE9PSBpbnB1dERhdGEuaWRCbG9jay50YWdDbGFzcykge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLmhhc093blByb3BlcnR5KFRBR19OVU1CRVIpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2sudGFnTnVtYmVyICE9PSBpbnB1dERhdGEuaWRCbG9jay50YWdOdW1iZXIpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay5oYXNPd25Qcm9wZXJ0eShJU19DT05TVFJVQ1RFRCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay5pc0NvbnN0cnVjdGVkICE9PSBpbnB1dERhdGEuaWRCbG9jay5pc0NvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKCEoSVNfSEVYX09OTFkgaW4gaW5wdXRTY2hlbWEuaWRCbG9jaykpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLmlzSGV4T25seSAhPT0gaW5wdXREYXRhLmlkQmxvY2suaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2suaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgaWYgKChWQUxVRV9IRVhfVklFVyBpbiBpbnB1dFNjaGVtYS5pZEJsb2NrKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNjaGVtYVZpZXcgPSBpbnB1dFNjaGVtYS5pZEJsb2NrLnZhbHVlSGV4VmlldztcclxuICAgICAgICBjb25zdCBhc24xVmlldyA9IGlucHV0RGF0YS5pZEJsb2NrLnZhbHVlSGV4VmlldztcclxuICAgICAgICBpZiAoc2NoZW1hVmlldy5sZW5ndGggIT09IGFzbjFWaWV3Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2NoZW1hVmlldy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoc2NoZW1hVmlld1tpXSAhPT0gYXNuMVZpZXdbMV0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgaW5wdXRTY2hlbWEubmFtZSA9IGlucHV0U2NoZW1hLm5hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSlcclxuICAgICAgICAgICAgcm9vdFtpbnB1dFNjaGVtYS5uYW1lXSA9IGlucHV0RGF0YTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYSBpbnN0YW5jZW9mIHR5cGVTdG9yZS5Db25zdHJ1Y3RlZCkge1xyXG4gICAgICAgIGxldCBhZG1pc3Npb24gPSAwO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7XHJcbiAgICAgICAgICAgICAgICBlcnJvcjogXCJVbmtub3duIGVycm9yXCIsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGxldCBtYXhMZW5ndGggPSBpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBpZiAobWF4TGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXSBpbnN0YW5jZW9mIFJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICBtYXhMZW5ndGggPSBpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1heExlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZS5sZW5ndGggPT09IDApICYmXHJcbiAgICAgICAgICAgIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aCAhPT0gMCkpIHtcclxuICAgICAgICAgICAgbGV0IF9vcHRpb25hbCA9IHRydWU7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZS5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgIF9vcHRpb25hbCA9IF9vcHRpb25hbCAmJiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVtpXS5vcHRpb25hbCB8fCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGlmIChfb3B0aW9uYWwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVyaWZpZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dFNjaGVtYS5uYW1lID0gaW5wdXRTY2hlbWEubmFtZS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBFTVBUWV9TVFJJTkcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvb3RbaW5wdXRTY2hlbWEubmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcm9vdC5lcnJvciA9IFwiSW5jb25zaXN0ZW50IG9iamVjdCBsZW5ndGhcIjtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heExlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICgoaSAtIGFkbWlzc2lvbikgPj0gaW5wdXREYXRhLnZhbHVlQmxvY2sudmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVtpXS5vcHRpb25hbCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBfcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5lcnJvciA9IFwiSW5jb25zaXN0ZW50IGxlbmd0aCBiZXR3ZWVuIEFTTi4xIGRhdGEgYW5kIHNjaGVtYVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdFtpbnB1dFNjaGVtYS5uYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZXN1bHQubmFtZSA9IGlucHV0U2NoZW1hLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXSBpbnN0YW5jZW9mIFJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcGFyZVNjaGVtYShyb290LCBpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZVtpXSwgaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC52ZXJpZmllZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0ub3B0aW9uYWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZG1pc3Npb24rKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290W2lucHV0U2NoZW1hLm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoKE5BTUUgaW4gaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXSkgJiYgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0ubmFtZS5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJyYXlSb290ID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoTE9DQUwgaW4gaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXSkgJiYgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0ubG9jYWwpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlSb290ID0gaW5wdXREYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVJvb3QgPSByb290O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFycmF5Um9vdFtpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdLm5hbWVdID09PSBcInVuZGVmaW5lZFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlSb290W2lucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0ubmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlSb290W2lucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0ubmFtZV0ucHVzaChpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZVtpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcGFyZVNjaGVtYShyb290LCBpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZVtpIC0gYWRtaXNzaW9uXSwgaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVtpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC52ZXJpZmllZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbaV0ub3B0aW9uYWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZG1pc3Npb24rKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290W2lucHV0U2NoZW1hLm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzdWx0LnZlcmlmaWVkID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBjb25zdCBfcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dFNjaGVtYS5uYW1lID0gaW5wdXRTY2hlbWEubmFtZS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBFTVBUWV9TVFJJTkcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdFtpbnB1dFNjaGVtYS5uYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICBfcmVzdWx0Lm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBfcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogdHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5wcmltaXRpdmVTY2hlbWEgJiZcclxuICAgICAgICAoVkFMVUVfSEVYX1ZJRVcgaW4gaW5wdXREYXRhLnZhbHVlQmxvY2spKSB7XHJcbiAgICAgICAgY29uc3QgYXNuMSA9IGxvY2FsRnJvbUJFUihpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZUhleFZpZXcpO1xyXG4gICAgICAgIGlmIChhc24xLm9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgX3Jlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogYXNuMS5yZXN1bHRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290W2lucHV0U2NoZW1hLm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIF9yZXN1bHQubmFtZSA9IGlucHV0U2NoZW1hLm5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIF9yZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb21wYXJlU2NoZW1hKHJvb3QsIGFzbjEucmVzdWx0LCBpbnB1dFNjaGVtYS5wcmltaXRpdmVTY2hlbWEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB2ZXJpZmllZDogdHJ1ZSxcclxuICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gdmVyaWZ5U2NoZW1hKGlucHV0QnVmZmVyLCBpbnB1dFNjaGVtYSkge1xyXG4gICAgaWYgKChpbnB1dFNjaGVtYSBpbnN0YW5jZW9mIE9iamVjdCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hIHR5cGVcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IGFzbjEgPSBsb2NhbEZyb21CRVIocHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpKTtcclxuICAgIGlmIChhc24xLm9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogYXNuMS5yZXN1bHRcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbXBhcmVTY2hlbWEoYXNuMS5yZXN1bHQsIGFzbjEucmVzdWx0LCBpbnB1dFNjaGVtYSk7XHJcbn1cblxuZXhwb3J0IHsgQW55LCBCYXNlQmxvY2ssIEJhc2VTdHJpbmdCbG9jaywgQml0U3RyaW5nLCBCbXBTdHJpbmcsIEJvb2xlYW4sIENoYXJhY3RlclN0cmluZywgQ2hvaWNlLCBDb25zdHJ1Y3RlZCwgREFURSwgRGF0ZVRpbWUsIER1cmF0aW9uLCBFbmRPZkNvbnRlbnQsIEVudW1lcmF0ZWQsIEdlbmVyYWxTdHJpbmcsIEdlbmVyYWxpemVkVGltZSwgR3JhcGhpY1N0cmluZywgSGV4QmxvY2ssIElBNVN0cmluZywgSW50ZWdlciwgTnVsbCwgTnVtZXJpY1N0cmluZywgT2JqZWN0SWRlbnRpZmllciwgT2N0ZXRTdHJpbmcsIFByaW1pdGl2ZSwgUHJpbnRhYmxlU3RyaW5nLCBSYXdEYXRhLCBSZWxhdGl2ZU9iamVjdElkZW50aWZpZXIsIFJlcGVhdGVkLCBTZXF1ZW5jZSwgU2V0LCBUSU1FLCBUZWxldGV4U3RyaW5nLCBUaW1lT2ZEYXksIFVUQ1RpbWUsIFVuaXZlcnNhbFN0cmluZywgVXRmOFN0cmluZywgVmFsdWVCbG9jaywgVmlkZW90ZXhTdHJpbmcsIFZpZXdXcml0ZXIsIFZpc2libGVTdHJpbmcsIGNvbXBhcmVTY2hlbWEsIGZyb21CRVIsIHZlcmlmeVNjaGVtYSB9O1xuIiwgImV4cG9ydCB2YXIgQXNuVHlwZVR5cGVzO1xuKGZ1bmN0aW9uIChBc25UeXBlVHlwZXMpIHtcbiAgICBBc25UeXBlVHlwZXNbQXNuVHlwZVR5cGVzW1wiU2VxdWVuY2VcIl0gPSAwXSA9IFwiU2VxdWVuY2VcIjtcbiAgICBBc25UeXBlVHlwZXNbQXNuVHlwZVR5cGVzW1wiU2V0XCJdID0gMV0gPSBcIlNldFwiO1xuICAgIEFzblR5cGVUeXBlc1tBc25UeXBlVHlwZXNbXCJDaG9pY2VcIl0gPSAyXSA9IFwiQ2hvaWNlXCI7XG59KShBc25UeXBlVHlwZXMgfHwgKEFzblR5cGVUeXBlcyA9IHt9KSk7XG5leHBvcnQgdmFyIEFzblByb3BUeXBlcztcbihmdW5jdGlvbiAoQXNuUHJvcFR5cGVzKSB7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkFueVwiXSA9IDFdID0gXCJBbnlcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiQm9vbGVhblwiXSA9IDJdID0gXCJCb29sZWFuXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIk9jdGV0U3RyaW5nXCJdID0gM10gPSBcIk9jdGV0U3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkJpdFN0cmluZ1wiXSA9IDRdID0gXCJCaXRTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiSW50ZWdlclwiXSA9IDVdID0gXCJJbnRlZ2VyXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkVudW1lcmF0ZWRcIl0gPSA2XSA9IFwiRW51bWVyYXRlZFwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJPYmplY3RJZGVudGlmaWVyXCJdID0gN10gPSBcIk9iamVjdElkZW50aWZpZXJcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVXRmOFN0cmluZ1wiXSA9IDhdID0gXCJVdGY4U3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkJtcFN0cmluZ1wiXSA9IDldID0gXCJCbXBTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVW5pdmVyc2FsU3RyaW5nXCJdID0gMTBdID0gXCJVbml2ZXJzYWxTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiTnVtZXJpY1N0cmluZ1wiXSA9IDExXSA9IFwiTnVtZXJpY1N0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJQcmludGFibGVTdHJpbmdcIl0gPSAxMl0gPSBcIlByaW50YWJsZVN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJUZWxldGV4U3RyaW5nXCJdID0gMTNdID0gXCJUZWxldGV4U3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlZpZGVvdGV4U3RyaW5nXCJdID0gMTRdID0gXCJWaWRlb3RleFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJJQTVTdHJpbmdcIl0gPSAxNV0gPSBcIklBNVN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJHcmFwaGljU3RyaW5nXCJdID0gMTZdID0gXCJHcmFwaGljU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlZpc2libGVTdHJpbmdcIl0gPSAxN10gPSBcIlZpc2libGVTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiR2VuZXJhbFN0cmluZ1wiXSA9IDE4XSA9IFwiR2VuZXJhbFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJDaGFyYWN0ZXJTdHJpbmdcIl0gPSAxOV0gPSBcIkNoYXJhY3RlclN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJVVENUaW1lXCJdID0gMjBdID0gXCJVVENUaW1lXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkdlbmVyYWxpemVkVGltZVwiXSA9IDIxXSA9IFwiR2VuZXJhbGl6ZWRUaW1lXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkRBVEVcIl0gPSAyMl0gPSBcIkRBVEVcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVGltZU9mRGF5XCJdID0gMjNdID0gXCJUaW1lT2ZEYXlcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiRGF0ZVRpbWVcIl0gPSAyNF0gPSBcIkRhdGVUaW1lXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkR1cmF0aW9uXCJdID0gMjVdID0gXCJEdXJhdGlvblwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJUSU1FXCJdID0gMjZdID0gXCJUSU1FXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIk51bGxcIl0gPSAyN10gPSBcIk51bGxcIjtcbn0pKEFzblByb3BUeXBlcyB8fCAoQXNuUHJvcFR5cGVzID0ge30pKTtcbiIsICJpbXBvcnQgKiBhcyBhc24xanMgZnJvbSBcImFzbjFqc1wiO1xuaW1wb3J0IHsgQnVmZmVyU291cmNlQ29udmVydGVyIH0gZnJvbSBcInB2dHN1dGlsc1wiO1xuZXhwb3J0IGNsYXNzIEJpdFN0cmluZyB7XG4gICAgY29uc3RydWN0b3IocGFyYW1zLCB1bnVzZWRCaXRzID0gMCkge1xuICAgICAgICB0aGlzLnVudXNlZEJpdHMgPSAwO1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuZnJvbU51bWJlcihwYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQnVmZmVyU291cmNlQ29udmVydGVyLmlzQnVmZmVyU291cmNlKHBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVudXNlZEJpdHMgPSB1bnVzZWRCaXRzO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihwYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiVW5zdXBwb3J0ZWQgdHlwZSBvZiAncGFyYW1zJyBhcmd1bWVudCBmb3IgQml0U3RyaW5nXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZyb21BU04oYXNuKSB7XG4gICAgICAgIGlmICghKGFzbiBpbnN0YW5jZW9mIGFzbjFqcy5CaXRTdHJpbmcpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgJ2FzbicgaXMgbm90IGluc3RhbmNlIG9mIEFTTi4xIEJpdFN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVudXNlZEJpdHMgPSBhc24udmFsdWVCbG9jay51bnVzZWRCaXRzO1xuICAgICAgICB0aGlzLnZhbHVlID0gYXNuLnZhbHVlQmxvY2sudmFsdWVIZXg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0b0FTTigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuQml0U3RyaW5nKHsgdW51c2VkQml0czogdGhpcy51bnVzZWRCaXRzLCB2YWx1ZUhleDogdGhpcy52YWx1ZSB9KTtcbiAgICB9XG4gICAgdG9TY2hlbWEobmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5CaXRTdHJpbmcoeyBuYW1lIH0pO1xuICAgIH1cbiAgICB0b051bWJlcigpIHtcbiAgICAgICAgbGV0IHJlcyA9IFwiXCI7XG4gICAgICAgIGNvbnN0IHVpbnRBcnJheSA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWUpO1xuICAgICAgICBmb3IgKGNvbnN0IG9jdGV0IG9mIHVpbnRBcnJheSkge1xuICAgICAgICAgICAgcmVzICs9IG9jdGV0LnRvU3RyaW5nKDIpLnBhZFN0YXJ0KDgsIFwiMFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXMgPSByZXMuc3BsaXQoXCJcIikucmV2ZXJzZSgpLmpvaW4oXCJcIik7XG4gICAgICAgIGlmICh0aGlzLnVudXNlZEJpdHMpIHtcbiAgICAgICAgICAgIHJlcyA9IHJlcy5zbGljZSh0aGlzLnVudXNlZEJpdHMpLnBhZFN0YXJ0KHRoaXMudW51c2VkQml0cywgXCIwXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZUludChyZXMsIDIpO1xuICAgIH1cbiAgICBmcm9tTnVtYmVyKHZhbHVlKSB7XG4gICAgICAgIGxldCBiaXRzID0gdmFsdWUudG9TdHJpbmcoMik7XG4gICAgICAgIGNvbnN0IG9jdGV0U2l6ZSA9IChiaXRzLmxlbmd0aCArIDcpID4+IDM7XG4gICAgICAgIHRoaXMudW51c2VkQml0cyA9IChvY3RldFNpemUgPDwgMykgLSBiaXRzLmxlbmd0aDtcbiAgICAgICAgY29uc3Qgb2N0ZXRzID0gbmV3IFVpbnQ4QXJyYXkob2N0ZXRTaXplKTtcbiAgICAgICAgYml0cyA9IGJpdHMucGFkU3RhcnQob2N0ZXRTaXplIDw8IDMsIFwiMFwiKS5zcGxpdChcIlwiKS5yZXZlcnNlKCkuam9pbihcIlwiKTtcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgb2N0ZXRTaXplKSB7XG4gICAgICAgICAgICBvY3RldHNbaW5kZXhdID0gcGFyc2VJbnQoYml0cy5zbGljZShpbmRleCA8PCAzLCAoaW5kZXggPDwgMykgKyA4KSwgMik7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSBvY3RldHMuYnVmZmVyO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBhc24xanMgZnJvbSBcImFzbjFqc1wiO1xuaW1wb3J0IHsgQnVmZmVyU291cmNlQ29udmVydGVyIH0gZnJvbSBcInB2dHN1dGlsc1wiO1xuZXhwb3J0IGNsYXNzIE9jdGV0U3RyaW5nIHtcbiAgICBnZXQgYnl0ZUxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyLmJ5dGVMZW5ndGg7XG4gICAgfVxuICAgIGdldCBieXRlT2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY29uc3RydWN0b3IocGFyYW0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIocGFyYW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKEJ1ZmZlclNvdXJjZUNvbnZlcnRlci5pc0J1ZmZlclNvdXJjZShwYXJhbSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHBhcmFtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocGFyYW0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBuZXcgVWludDhBcnJheShwYXJhbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmcm9tQVNOKGFzbikge1xuICAgICAgICBpZiAoIShhc24gaW5zdGFuY2VvZiBhc24xanMuT2N0ZXRTdHJpbmcpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgJ2FzbicgaXMgbm90IGluc3RhbmNlIG9mIEFTTi4xIE9jdGV0U3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVmZmVyID0gYXNuLnZhbHVlQmxvY2sudmFsdWVIZXg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0b0FTTigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuT2N0ZXRTdHJpbmcoeyB2YWx1ZUhleDogdGhpcy5idWZmZXIgfSk7XG4gICAgfVxuICAgIHRvU2NoZW1hKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuT2N0ZXRTdHJpbmcoeyBuYW1lIH0pO1xuICAgIH1cbn1cbiIsICJleHBvcnQgKiBmcm9tIFwiLi9iaXRfc3RyaW5nXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9vY3RldF9zdHJpbmdcIjtcbiIsICJpbXBvcnQgKiBhcyBhc24xanMgZnJvbSBcImFzbjFqc1wiO1xuaW1wb3J0IHsgQXNuUHJvcFR5cGVzIH0gZnJvbSBcIi4vZW51bXNcIjtcbmltcG9ydCB7IE9jdGV0U3RyaW5nIH0gZnJvbSBcIi4vdHlwZXMvaW5kZXhcIjtcbmV4cG9ydCBjb25zdCBBc25BbnlDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZSBpbnN0YW5jZW9mIGFzbjFqcy5OdWxsID8gbnVsbCA6IHZhbHVlLnZhbHVlQmVmb3JlRGVjb2RlVmlldyxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuTnVsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IGFzbjFqcy5mcm9tQkVSKHZhbHVlKTtcbiAgICAgICAgaWYgKHNjaGVtYS5yZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzY2hlbWEucmVzdWx0LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NoZW1hLnJlc3VsdDtcbiAgICB9LFxufTtcbmV4cG9ydCBjb25zdCBBc25JbnRlZ2VyQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCA+PSA0XG4gICAgICAgID8gdmFsdWUudmFsdWVCbG9jay50b1N0cmluZygpXG4gICAgICAgIDogdmFsdWUudmFsdWVCbG9jay52YWx1ZURlYyxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLkludGVnZXIoeyB2YWx1ZTogK3ZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25FbnVtZXJhdGVkQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZURlYyxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLkVudW1lcmF0ZWQoeyB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleFZpZXcsXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5JbnRlZ2VyKHsgdmFsdWVIZXg6IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25JbnRlZ2VyQmlnSW50Q29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudG9CaWdJbnQoKSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBhc24xanMuSW50ZWdlci5mcm9tQmlnSW50KHZhbHVlKSxcbn07XG5leHBvcnQgY29uc3QgQXNuQml0U3RyaW5nQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleFZpZXcsXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5CaXRTdHJpbmcoeyB2YWx1ZUhleDogdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbk9iamVjdElkZW50aWZpZXJDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnRvU3RyaW5nKCksXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5PYmplY3RJZGVudGlmaWVyKHsgdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbkJvb2xlYW5Db252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuQm9vbGVhbih7IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25PY3RldFN0cmluZ0NvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3LFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuT2N0ZXRTdHJpbmcoeyB2YWx1ZUhleDogdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbkNvbnN0cnVjdGVkT2N0ZXRTdHJpbmdDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiBuZXcgT2N0ZXRTdHJpbmcodmFsdWUuZ2V0VmFsdWUoKSksXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gdmFsdWUudG9BU04oKSxcbn07XG5mdW5jdGlvbiBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoQXNuMVR5cGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudmFsdWUsXG4gICAgICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBBc24xVHlwZSh7IHZhbHVlIH0pLFxuICAgIH07XG59XG5leHBvcnQgY29uc3QgQXNuVXRmOFN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuVXRmOFN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuQm1wU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5CbXBTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzblVuaXZlcnNhbFN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuVW5pdmVyc2FsU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25OdW1lcmljU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5OdW1lcmljU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25QcmludGFibGVTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLlByaW50YWJsZVN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuVGVsZXRleFN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuVGVsZXRleFN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuVmlkZW90ZXhTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLlZpZGVvdGV4U3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25JQTVTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLklBNVN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuR3JhcGhpY1N0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuR3JhcGhpY1N0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuVmlzaWJsZVN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuVmlzaWJsZVN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuR2VuZXJhbFN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuR2VuZXJhbFN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuQ2hhcmFjdGVyU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5DaGFyYWN0ZXJTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzblVUQ1RpbWVDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS50b0RhdGUoKSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLlVUQ1RpbWUoeyB2YWx1ZURhdGU6IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25HZW5lcmFsaXplZFRpbWVDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS50b0RhdGUoKSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLkdlbmVyYWxpemVkVGltZSh7IHZhbHVlRGF0ZTogdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbk51bGxDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKCkgPT4gbnVsbCxcbiAgICB0b0FTTjogKCkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5OdWxsKCk7XG4gICAgfSxcbn07XG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdENvbnZlcnRlcih0eXBlKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkFueTpcbiAgICAgICAgICAgIHJldHVybiBBc25BbnlDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkJpdFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25CaXRTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkJtcFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25CbXBTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkJvb2xlYW46XG4gICAgICAgICAgICByZXR1cm4gQXNuQm9vbGVhbkNvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuQ2hhcmFjdGVyU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkNoYXJhY3RlclN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuRW51bWVyYXRlZDpcbiAgICAgICAgICAgIHJldHVybiBBc25FbnVtZXJhdGVkQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5HZW5lcmFsU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkdlbmVyYWxTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkdlbmVyYWxpemVkVGltZTpcbiAgICAgICAgICAgIHJldHVybiBBc25HZW5lcmFsaXplZFRpbWVDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkdyYXBoaWNTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuR3JhcGhpY1N0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuSUE1U3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbklBNVN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuSW50ZWdlcjpcbiAgICAgICAgICAgIHJldHVybiBBc25JbnRlZ2VyQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5OdWxsOlxuICAgICAgICAgICAgcmV0dXJuIEFzbk51bGxDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLk51bWVyaWNTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuTnVtZXJpY1N0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuT2JqZWN0SWRlbnRpZmllcjpcbiAgICAgICAgICAgIHJldHVybiBBc25PYmplY3RJZGVudGlmaWVyQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5PY3RldFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25PY3RldFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuUHJpbnRhYmxlU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzblByaW50YWJsZVN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuVGVsZXRleFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25UZWxldGV4U3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5VVENUaW1lOlxuICAgICAgICAgICAgcmV0dXJuIEFzblVUQ1RpbWVDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLlVuaXZlcnNhbFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25Vbml2ZXJzYWxTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLlV0ZjhTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuVXRmOFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuVmlkZW90ZXhTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuVmlkZW90ZXhTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLlZpc2libGVTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuVmlzaWJsZVN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gaXNDb252ZXJ0aWJsZSh0YXJnZXQpIHtcbiAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gXCJmdW5jdGlvblwiICYmIHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHRhcmdldC5wcm90b3R5cGUudG9BU04gJiYgdGFyZ2V0LnByb3RvdHlwZS5mcm9tQVNOKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpc0NvbnZlcnRpYmxlKHRhcmdldC5wcm90b3R5cGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gISEodGFyZ2V0ICYmIHR5cGVvZiB0YXJnZXQgPT09IFwib2JqZWN0XCIgJiYgXCJ0b0FTTlwiIGluIHRhcmdldCAmJiBcImZyb21BU05cIiBpbiB0YXJnZXQpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1R5cGVPZkFycmF5KHRhcmdldCkge1xuICAgIHZhciBfYTtcbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCk7XG4gICAgICAgIGlmICgoKF9hID0gcHJvdG8gPT09IG51bGwgfHwgcHJvdG8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb3RvLnByb3RvdHlwZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbnN0cnVjdG9yKSA9PT0gQXJyYXkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1R5cGVPZkFycmF5KHByb3RvKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXlFcXVhbChieXRlczEsIGJ5dGVzMikge1xuICAgIGlmICghKGJ5dGVzMSAmJiBieXRlczIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGJ5dGVzMS5ieXRlTGVuZ3RoICE9PSBieXRlczIuYnl0ZUxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGIxID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMxKTtcbiAgICBjb25zdCBiMiA9IG5ldyBVaW50OEFycmF5KGJ5dGVzMik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlczEuYnl0ZUxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChiMVtpXSAhPT0gYjJbaV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbiIsICJpbXBvcnQgKiBhcyBhc24xanMgZnJvbSBcImFzbjFqc1wiO1xuaW1wb3J0IHsgQXNuUHJvcFR5cGVzLCBBc25UeXBlVHlwZXMgfSBmcm9tIFwiLi9lbnVtc1wiO1xuaW1wb3J0IHsgaXNDb252ZXJ0aWJsZSB9IGZyb20gXCIuL2hlbHBlclwiO1xuZXhwb3J0IGNsYXNzIEFzblNjaGVtYVN0b3JhZ2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLml0ZW1zID0gbmV3IFdlYWtNYXAoKTtcbiAgICB9XG4gICAgaGFzKHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5oYXModGFyZ2V0KTtcbiAgICB9XG4gICAgZ2V0KHRhcmdldCwgY2hlY2tTY2hlbWEgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLml0ZW1zLmdldCh0YXJnZXQpO1xuICAgICAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IHNjaGVtYSBmb3IgJyR7dGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lfScgdGFyZ2V0YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrU2NoZW1hICYmICFzY2hlbWEuc2NoZW1hKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNjaGVtYSAnJHt0YXJnZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWV9JyBkb2Vzbid0IGNvbnRhaW4gQVNOLjEgc2NoZW1hLiBDYWxsICdBc25TY2hlbWFTdG9yYWdlLmNhY2hlJy5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgIH1cbiAgICBjYWNoZSh0YXJnZXQpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gdGhpcy5nZXQodGFyZ2V0KTtcbiAgICAgICAgaWYgKCFzY2hlbWEuc2NoZW1hKSB7XG4gICAgICAgICAgICBzY2hlbWEuc2NoZW1hID0gdGhpcy5jcmVhdGUodGFyZ2V0LCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjcmVhdGVEZWZhdWx0KHRhcmdldCkge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSB7XG4gICAgICAgICAgICB0eXBlOiBBc25UeXBlVHlwZXMuU2VxdWVuY2UsXG4gICAgICAgICAgICBpdGVtczoge30sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHBhcmVudFNjaGVtYSA9IHRoaXMuZmluZFBhcmVudFNjaGVtYSh0YXJnZXQpO1xuICAgICAgICBpZiAocGFyZW50U2NoZW1hKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHNjaGVtYSwgcGFyZW50U2NoZW1hKTtcbiAgICAgICAgICAgIHNjaGVtYS5pdGVtcyA9IE9iamVjdC5hc3NpZ24oe30sIHNjaGVtYS5pdGVtcywgcGFyZW50U2NoZW1hLml0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgIH1cbiAgICBjcmVhdGUodGFyZ2V0LCB1c2VOYW1lcykge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLml0ZW1zLmdldCh0YXJnZXQpIHx8IHRoaXMuY3JlYXRlRGVmYXVsdCh0YXJnZXQpO1xuICAgICAgICBjb25zdCBhc24xVmFsdWUgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hLml0ZW1zKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gc2NoZW1hLml0ZW1zW2tleV07XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gdXNlTmFtZXMgPyBrZXkgOiBcIlwiO1xuICAgICAgICAgICAgbGV0IGFzbjFJdGVtO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiAoaXRlbS50eXBlKSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IEFzbjFUeXBlTmFtZSA9IEFzblByb3BUeXBlc1tpdGVtLnR5cGVdO1xuICAgICAgICAgICAgICAgIGNvbnN0IEFzbjFUeXBlID0gYXNuMWpzW0FzbjFUeXBlTmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKCFBc24xVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgQVNOMSBjbGFzcyBieSBuYW1lICcke0FzbjFUeXBlTmFtZX0nYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gbmV3IEFzbjFUeXBlKHsgbmFtZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzQ29udmVydGlibGUoaXRlbS50eXBlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IGl0ZW0udHlwZSgpO1xuICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gaW5zdGFuY2UudG9TY2hlbWEobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpdGVtLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbVNjaGVtYSA9IHRoaXMuZ2V0KGl0ZW0udHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1TY2hlbWEudHlwZSA9PT0gQXNuVHlwZVR5cGVzLkNob2ljZSkge1xuICAgICAgICAgICAgICAgICAgICBhc24xSXRlbSA9IG5ldyBhc24xanMuQW55KHsgbmFtZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gdGhpcy5jcmVhdGUoaXRlbS50eXBlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGFzbjFJdGVtLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gbmV3IGFzbjFqcy5BbnkoeyBuYW1lIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uYWwgPSAhIWl0ZW0ub3B0aW9uYWwgfHwgaXRlbS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChpdGVtLnJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0ubmFtZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgY29uc3QgQ29udGFpbmVyID0gaXRlbS5yZXBlYXRlZCA9PT0gXCJzZXRcIlxuICAgICAgICAgICAgICAgICAgICA/IGFzbjFqcy5TZXRcbiAgICAgICAgICAgICAgICAgICAgOiBhc24xanMuU2VxdWVuY2U7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBuZXcgQ29udGFpbmVyKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBhc24xanMuUmVwZWF0ZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFzbjFJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbS5jb250ZXh0ICE9PSBudWxsICYmIGl0ZW0uY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaW1wbGljaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtLnR5cGUgPT09IFwibnVtYmVyXCIgfHwgaXNDb252ZXJ0aWJsZShpdGVtLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb250YWluZXIgPSBpdGVtLnJlcGVhdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhc24xanMuQ29uc3RydWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFzbjFqcy5QcmltaXRpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChuZXcgQ29udGFpbmVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkQmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnQ2xhc3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogaXRlbS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlKGl0ZW0udHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1JlcGVhdGVkID0gISFpdGVtLnJlcGVhdGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gIWlzUmVwZWF0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZ2V0KGl0ZW0udHlwZSwgdHJ1ZSkuc2NoZW1hXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhc24xSXRlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gXCJ2YWx1ZUJsb2NrXCIgaW4gdmFsdWUgPyB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlIDogdmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChuZXcgYXNuMWpzLkNvbnN0cnVjdGVkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAhaXNSZXBlYXRlZCA/IG5hbWUgOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkQmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnQ2xhc3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogaXRlbS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChuZXcgYXNuMWpzLkNvbnN0cnVjdGVkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWRCbG9jazoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0NsYXNzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogaXRlbS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBbYXNuMUl0ZW1dLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0ub3B0aW9uYWwgPSBvcHRpb25hbDtcbiAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChhc24xSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChzY2hlbWEudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBBc25UeXBlVHlwZXMuU2VxdWVuY2U6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuU2VxdWVuY2UoeyB2YWx1ZTogYXNuMVZhbHVlLCBuYW1lOiBcIlwiIH0pO1xuICAgICAgICAgICAgY2FzZSBBc25UeXBlVHlwZXMuU2V0OlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgYXNuMWpzLlNldCh7IHZhbHVlOiBhc24xVmFsdWUsIG5hbWU6IFwiXCIgfSk7XG4gICAgICAgICAgICBjYXNlIEFzblR5cGVUeXBlcy5DaG9pY2U6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuQ2hvaWNlKHsgdmFsdWU6IGFzbjFWYWx1ZSwgbmFtZTogXCJcIiB9KTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBBU04xIHR5cGUgaW4gdXNlYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0KHRhcmdldCwgc2NoZW1hKSB7XG4gICAgICAgIHRoaXMuaXRlbXMuc2V0KHRhcmdldCwgc2NoZW1hKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpO1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLml0ZW1zLmdldChwYXJlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYSB8fCB0aGlzLmZpbmRQYXJlbnRTY2hlbWEocGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgQXNuU2NoZW1hU3RvcmFnZSB9IGZyb20gXCIuL3NjaGVtYVwiO1xuZXhwb3J0IGNvbnN0IHNjaGVtYVN0b3JhZ2UgPSBuZXcgQXNuU2NoZW1hU3RvcmFnZSgpO1xuIiwgImltcG9ydCAqIGFzIGNvbnZlcnRlcnMgZnJvbSBcIi4vY29udmVydGVyc1wiO1xuaW1wb3J0IHsgQXNuVHlwZVR5cGVzIH0gZnJvbSBcIi4vZW51bXNcIjtcbmltcG9ydCB7IHNjaGVtYVN0b3JhZ2UgfSBmcm9tIFwiLi9zdG9yYWdlXCI7XG5leHBvcnQgY29uc3QgQXNuVHlwZSA9IChvcHRpb25zKSA9PiAodGFyZ2V0KSA9PiB7XG4gICAgbGV0IHNjaGVtYTtcbiAgICBpZiAoIXNjaGVtYVN0b3JhZ2UuaGFzKHRhcmdldCkpIHtcbiAgICAgICAgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5jcmVhdGVEZWZhdWx0KHRhcmdldCk7XG4gICAgICAgIHNjaGVtYVN0b3JhZ2Uuc2V0KHRhcmdldCwgc2NoZW1hKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuZ2V0KHRhcmdldCk7XG4gICAgfVxuICAgIE9iamVjdC5hc3NpZ24oc2NoZW1hLCBvcHRpb25zKTtcbn07XG5leHBvcnQgY29uc3QgQXNuQ2hvaWNlVHlwZSA9ICgpID0+IEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuQ2hvaWNlIH0pO1xuZXhwb3J0IGNvbnN0IEFzblNldFR5cGUgPSAob3B0aW9ucykgPT4gQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5TZXQsIC4uLm9wdGlvbnMgfSk7XG5leHBvcnQgY29uc3QgQXNuU2VxdWVuY2VUeXBlID0gKG9wdGlvbnMpID0+IEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuU2VxdWVuY2UsIC4uLm9wdGlvbnMgfSk7XG5leHBvcnQgY29uc3QgQXNuUHJvcCA9IChvcHRpb25zKSA9PiAodGFyZ2V0LCBwcm9wZXJ0eUtleSkgPT4ge1xuICAgIGxldCBzY2hlbWE7XG4gICAgaWYgKCFzY2hlbWFTdG9yYWdlLmhhcyh0YXJnZXQuY29uc3RydWN0b3IpKSB7XG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuY3JlYXRlRGVmYXVsdCh0YXJnZXQuY29uc3RydWN0b3IpO1xuICAgICAgICBzY2hlbWFTdG9yYWdlLnNldCh0YXJnZXQuY29uc3RydWN0b3IsIHNjaGVtYSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmdldCh0YXJnZXQuY29uc3RydWN0b3IpO1xuICAgIH1cbiAgICBjb25zdCBjb3B5T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpO1xuICAgIGlmICh0eXBlb2YgY29weU9wdGlvbnMudHlwZSA9PT0gXCJudW1iZXJcIiAmJiAhY29weU9wdGlvbnMuY29udmVydGVyKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRDb252ZXJ0ZXIgPSBjb252ZXJ0ZXJzLmRlZmF1bHRDb252ZXJ0ZXIob3B0aW9ucy50eXBlKTtcbiAgICAgICAgaWYgKCFkZWZhdWx0Q29udmVydGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgZGVmYXVsdCBjb252ZXJ0ZXIgZm9yIHByb3BlcnR5ICcke3Byb3BlcnR5S2V5fScgb2YgJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb3B5T3B0aW9ucy5jb252ZXJ0ZXIgPSBkZWZhdWx0Q29udmVydGVyO1xuICAgIH1cbiAgICBzY2hlbWEuaXRlbXNbcHJvcGVydHlLZXldID0gY29weU9wdGlvbnM7XG59O1xuIiwgImV4cG9ydCBjbGFzcyBBc25TY2hlbWFWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuc2NoZW1hcyA9IFtdO1xuICAgIH1cbn1cbiIsICJleHBvcnQgKiBmcm9tIFwiLi9zY2hlbWFfdmFsaWRhdGlvblwiO1xuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgeyBBc25Qcm9wVHlwZXMsIEFzblR5cGVUeXBlcyB9IGZyb20gXCIuL2VudW1zXCI7XG5pbXBvcnQgKiBhcyBjb252ZXJ0ZXJzIGZyb20gXCIuL2NvbnZlcnRlcnNcIjtcbmltcG9ydCB7IEFzblNjaGVtYVZhbGlkYXRpb25FcnJvciB9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IHsgaXNDb252ZXJ0aWJsZSwgaXNUeXBlT2ZBcnJheSB9IGZyb20gXCIuL2hlbHBlclwiO1xuaW1wb3J0IHsgc2NoZW1hU3RvcmFnZSB9IGZyb20gXCIuL3N0b3JhZ2VcIjtcbmV4cG9ydCBjbGFzcyBBc25QYXJzZXIge1xuICAgIHN0YXRpYyBwYXJzZShkYXRhLCB0YXJnZXQpIHtcbiAgICAgICAgY29uc3QgYXNuMVBhcnNlZCA9IGFzbjFqcy5mcm9tQkVSKGRhdGEpO1xuICAgICAgICBpZiAoYXNuMVBhcnNlZC5yZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihhc24xUGFyc2VkLnJlc3VsdC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy5mcm9tQVNOKGFzbjFQYXJzZWQucmVzdWx0LCB0YXJnZXQpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbUFTTihhc24xU2NoZW1hLCB0YXJnZXQpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGlzQ29udmVydGlibGUodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbmV3IHRhcmdldCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5mcm9tQVNOKGFzbjFTY2hlbWEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0KTtcbiAgICAgICAgICAgIHNjaGVtYVN0b3JhZ2UuY2FjaGUodGFyZ2V0KTtcbiAgICAgICAgICAgIGxldCB0YXJnZXRTY2hlbWEgPSBzY2hlbWEuc2NoZW1hO1xuICAgICAgICAgICAgaWYgKGFzbjFTY2hlbWEuY29uc3RydWN0b3IgPT09IGFzbjFqcy5Db25zdHJ1Y3RlZCAmJiBzY2hlbWEudHlwZSAhPT0gQXNuVHlwZVR5cGVzLkNob2ljZSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFNjaGVtYSA9IG5ldyBhc24xanMuQ29uc3RydWN0ZWQoe1xuICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdDbGFzczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogYXNuMVNjaGVtYS5pZEJsb2NrLnRhZ051bWJlcixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNjaGVtYS5zY2hlbWEudmFsdWVCbG9jay52YWx1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFzbjFTY2hlbWFba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhc24xQ29tcGFyZWRTY2hlbWEgPSBhc24xanMuY29tcGFyZVNjaGVtYSh7fSwgYXNuMVNjaGVtYSwgdGFyZ2V0U2NoZW1hKTtcbiAgICAgICAgICAgIGlmICghYXNuMUNvbXBhcmVkU2NoZW1hLnZlcmlmaWVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzblNjaGVtYVZhbGlkYXRpb25FcnJvcihgRGF0YSBkb2VzIG5vdCBtYXRjaCB0byAke3RhcmdldC5uYW1lfSBBU04xIHNjaGVtYS4gJHthc24xQ29tcGFyZWRTY2hlbWEucmVzdWx0LmVycm9yfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzID0gbmV3IHRhcmdldCgpO1xuICAgICAgICAgICAgaWYgKGlzVHlwZU9mQXJyYXkodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIGlmICghKFwidmFsdWVcIiBpbiBhc24xU2NoZW1hLnZhbHVlQmxvY2sgJiYgQXJyYXkuaXNBcnJheShhc24xU2NoZW1hLnZhbHVlQmxvY2sudmFsdWUpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgaXRlbXMgZnJvbSB0aGUgQVNOLjEgcGFyc2VkIHZhbHVlLiBBU04uMSBvYmplY3QgaXMgbm90IGNvbnN0cnVjdGVkLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtVHlwZSA9IHNjaGVtYS5pdGVtVHlwZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW1UeXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlciA9IGNvbnZlcnRlcnMuZGVmYXVsdENvbnZlcnRlcihpdGVtVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY29udmVydGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgZGVmYXVsdCBjb252ZXJ0ZXIgZm9yIGFycmF5IGl0ZW0gb2YgJHt0YXJnZXQubmFtZX0gQVNOMSBzY2hlbWFgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmZyb20oYXNuMVNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlLCAoZWxlbWVudCkgPT4gY29udmVydGVyLmZyb21BU04oZWxlbWVudCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5mcm9tKGFzbjFTY2hlbWEudmFsdWVCbG9jay52YWx1ZSwgKGVsZW1lbnQpID0+IHRoaXMuZnJvbUFTTihlbGVtZW50LCBpdGVtVHlwZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYS5pdGVtcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbjFTY2hlbWFWYWx1ZSA9IGFzbjFDb21wYXJlZFNjaGVtYS5yZXN1bHRba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoIWFzbjFTY2hlbWFWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hSXRlbSA9IHNjaGVtYS5pdGVtc1trZXldO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYUl0ZW1UeXBlID0gc2NoZW1hSXRlbS50eXBlO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hSXRlbVR5cGUgPT09IFwibnVtYmVyXCIgfHwgaXNDb252ZXJ0aWJsZShzY2hlbWFJdGVtVHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udmVydGVyID0gKF9hID0gc2NoZW1hSXRlbS5jb252ZXJ0ZXIpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IChpc0NvbnZlcnRpYmxlKHNjaGVtYUl0ZW1UeXBlKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgc2NoZW1hSXRlbVR5cGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbnZlcnRlciBpcyBlbXB0eVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5yZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYUl0ZW0uaW1wbGljaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb250YWluZXIgPSBzY2hlbWFJdGVtLnJlcGVhdGVkID09PSBcInNlcXVlbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhc24xanMuU2VxdWVuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhc24xanMuU2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0l0ZW0gPSBuZXcgQ29udGFpbmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SXRlbS52YWx1ZUJsb2NrID0gYXNuMVNjaGVtYVZhbHVlLnZhbHVlQmxvY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3SXRlbUFzbiA9IGFzbjFqcy5mcm9tQkVSKG5ld0l0ZW0udG9CRVIoZmFsc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3SXRlbUFzbi5vZmZzZXQgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlIHRoZSBjaGlsZCBpdGVtLiAke25ld0l0ZW1Bc24ucmVzdWx0LmVycm9yfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShcInZhbHVlXCIgaW4gbmV3SXRlbUFzbi5yZXN1bHQudmFsdWVCbG9jayAmJiBBcnJheS5pc0FycmF5KG5ld0l0ZW1Bc24ucmVzdWx0LnZhbHVlQmxvY2sudmFsdWUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IGl0ZW1zIGZyb20gdGhlIEFTTi4xIHBhcnNlZCB2YWx1ZS4gQVNOLjEgb2JqZWN0IGlzIG5vdCBjb25zdHJ1Y3RlZC5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbmV3SXRlbUFzbi5yZXN1bHQudmFsdWVCbG9jay52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IEFycmF5LmZyb20odmFsdWUsIChlbGVtZW50KSA9PiBjb252ZXJ0ZXIuZnJvbUFTTihlbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IEFycmF5LmZyb20oYXNuMVNjaGVtYVZhbHVlLCAoZWxlbWVudCkgPT4gY29udmVydGVyLmZyb21BU04oZWxlbWVudCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gYXNuMVNjaGVtYVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYUl0ZW0uaW1wbGljaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3SXRlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNDb252ZXJ0aWJsZShzY2hlbWFJdGVtVHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SXRlbSA9IG5ldyBzY2hlbWFJdGVtVHlwZSgpLnRvU2NoZW1hKFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXNuMVR5cGVOYW1lID0gQXNuUHJvcFR5cGVzW3NjaGVtYUl0ZW1UeXBlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXNuMVR5cGUgPSBhc24xanNbQXNuMVR5cGVOYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBc24xVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0ICcke0FzbjFUeXBlTmFtZX0nIGNsYXNzIGZyb20gYXNuMWpzIG1vZHVsZWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0l0ZW0gPSBuZXcgQXNuMVR5cGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SXRlbS52YWx1ZUJsb2NrID0gdmFsdWUudmFsdWVCbG9jaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzbjFqcy5mcm9tQkVSKG5ld0l0ZW0udG9CRVIoZmFsc2UpKS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IGNvbnZlcnRlci5mcm9tQVNOKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYUl0ZW0ucmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShhc24xU2NoZW1hVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGdldCBsaXN0IG9mIGl0ZW1zIGZyb20gdGhlIEFTTi4xIHBhcnNlZCB2YWx1ZS4gQVNOLjEgdmFsdWUgc2hvdWxkIGJlIGl0ZXJhYmxlLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc1trZXldID0gQXJyYXkuZnJvbShhc24xU2NoZW1hVmFsdWUsIChlbGVtZW50KSA9PiB0aGlzLmZyb21BU04oZWxlbWVudCwgc2NoZW1hSXRlbVR5cGUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc1trZXldID0gdGhpcy5mcm9tQVNOKGFzbjFTY2hlbWFWYWx1ZSwgc2NoZW1hSXRlbVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEFzblNjaGVtYVZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgIGVycm9yLnNjaGVtYXMucHVzaCh0YXJnZXQubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBhc24xanMgZnJvbSBcImFzbjFqc1wiO1xuaW1wb3J0ICogYXMgY29udmVydGVycyBmcm9tIFwiLi9jb252ZXJ0ZXJzXCI7XG5pbXBvcnQgeyBBc25Qcm9wVHlwZXMsIEFzblR5cGVUeXBlcyB9IGZyb20gXCIuL2VudW1zXCI7XG5pbXBvcnQgeyBpc0NvbnZlcnRpYmxlLCBpc0FycmF5RXF1YWwgfSBmcm9tIFwiLi9oZWxwZXJcIjtcbmltcG9ydCB7IHNjaGVtYVN0b3JhZ2UgfSBmcm9tIFwiLi9zdG9yYWdlXCI7XG5leHBvcnQgY2xhc3MgQXNuU2VyaWFsaXplciB7XG4gICAgc3RhdGljIHNlcmlhbGl6ZShvYmopIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIGFzbjFqcy5CYXNlQmxvY2spIHtcbiAgICAgICAgICAgIHJldHVybiBvYmoudG9CRVIoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRvQVNOKG9iaikudG9CRVIoZmFsc2UpO1xuICAgIH1cbiAgICBzdGF0aWMgdG9BU04ob2JqKSB7XG4gICAgICAgIGlmIChvYmogJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiAmJiBpc0NvbnZlcnRpYmxlKG9iaikpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmoudG9BU04oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShvYmogJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgMSBzaG91bGQgYmUgdHlwZSBvZiBPYmplY3QuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IG9iai5jb25zdHJ1Y3RvcjtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0KTtcbiAgICAgICAgc2NoZW1hU3RvcmFnZS5jYWNoZSh0YXJnZXQpO1xuICAgICAgICBsZXQgYXNuMVZhbHVlID0gW107XG4gICAgICAgIGlmIChzY2hlbWEuaXRlbVR5cGUpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAxIHNob3VsZCBiZSB0eXBlIG9mIEFycmF5LlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLml0ZW1UeXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udmVydGVyID0gY29udmVydGVycy5kZWZhdWx0Q29udmVydGVyKHNjaGVtYS5pdGVtVHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IGRlZmF1bHQgY29udmVydGVyIGZvciBhcnJheSBpdGVtIG9mICR7dGFyZ2V0Lm5hbWV9IEFTTjEgc2NoZW1hYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzbjFWYWx1ZSA9IG9iai5tYXAoKG8pID0+IGNvbnZlcnRlci50b0FTTihvKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc24xVmFsdWUgPSBvYmoubWFwKChvKSA9PiB0aGlzLnRvQXNuSXRlbSh7IHR5cGU6IHNjaGVtYS5pdGVtVHlwZSB9LCBcIltdXCIsIHRhcmdldCwgbykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hSXRlbSA9IHNjaGVtYS5pdGVtc1trZXldO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9ialByb3AgPSBvYmpba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAob2JqUHJvcCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIHx8IHNjaGVtYUl0ZW0uZGVmYXVsdFZhbHVlID09PSBvYmpQcm9wXG4gICAgICAgICAgICAgICAgICAgIHx8ICh0eXBlb2Ygc2NoZW1hSXRlbS5kZWZhdWx0VmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9ialByb3AgPT09IFwib2JqZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGlzQXJyYXlFcXVhbCh0aGlzLnNlcmlhbGl6ZShzY2hlbWFJdGVtLmRlZmF1bHRWYWx1ZSksIHRoaXMuc2VyaWFsaXplKG9ialByb3ApKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGFzbjFJdGVtID0gQXNuU2VyaWFsaXplci50b0Fzbkl0ZW0oc2NoZW1hSXRlbSwga2V5LCB0YXJnZXQsIG9ialByb3ApO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hSXRlbS5jb250ZXh0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWFJdGVtLmltcGxpY2l0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNjaGVtYUl0ZW0ucmVwZWF0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAodHlwZW9mIHNjaGVtYUl0ZW0udHlwZSA9PT0gXCJudW1iZXJcIiB8fCBpc0NvbnZlcnRpYmxlKHNjaGVtYUl0ZW0udHlwZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS52YWx1ZUhleCA9IGFzbjFJdGVtIGluc3RhbmNlb2YgYXNuMWpzLk51bGwgPyBhc24xSXRlbS52YWx1ZUJlZm9yZURlY29kZVZpZXcgOiBhc24xSXRlbS52YWx1ZUJsb2NrLnRvQkVSKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNuMVZhbHVlLnB1c2gobmV3IGFzbjFqcy5QcmltaXRpdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbDogc2NoZW1hSXRlbS5vcHRpb25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRCbG9jazoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnQ2xhc3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdOdW1iZXI6IHNjaGVtYUl0ZW0uY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNuMVZhbHVlLnB1c2gobmV3IGFzbjFqcy5Db25zdHJ1Y3RlZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsOiBzY2hlbWFJdGVtLm9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdDbGFzczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogc2NoZW1hSXRlbS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYXNuMUl0ZW0udmFsdWVCbG9jay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChuZXcgYXNuMWpzLkNvbnN0cnVjdGVkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbDogc2NoZW1hSXRlbS5vcHRpb25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0NsYXNzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdOdW1iZXI6IHNjaGVtYUl0ZW0uY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBbYXNuMUl0ZW1dLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaGVtYUl0ZW0ucmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNuMVZhbHVlID0gYXNuMVZhbHVlLmNvbmNhdChhc24xSXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChhc24xSXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBhc25TY2hlbWE7XG4gICAgICAgIHN3aXRjaCAoc2NoZW1hLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQXNuVHlwZVR5cGVzLlNlcXVlbmNlOlxuICAgICAgICAgICAgICAgIGFzblNjaGVtYSA9IG5ldyBhc24xanMuU2VxdWVuY2UoeyB2YWx1ZTogYXNuMVZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBc25UeXBlVHlwZXMuU2V0OlxuICAgICAgICAgICAgICAgIGFzblNjaGVtYSA9IG5ldyBhc24xanMuU2V0KHsgdmFsdWU6IGFzbjFWYWx1ZSB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQXNuVHlwZVR5cGVzLkNob2ljZTpcbiAgICAgICAgICAgICAgICBpZiAoIWFzbjFWYWx1ZVswXSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNjaGVtYSAnJHt0YXJnZXQubmFtZX0nIGhhcyB3cm9uZyBkYXRhLiBDaG9pY2UgY2Fubm90IGJlIGVtcHR5LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc25TY2hlbWEgPSBhc24xVmFsdWVbMF07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzblNjaGVtYTtcbiAgICB9XG4gICAgc3RhdGljIHRvQXNuSXRlbShzY2hlbWFJdGVtLCBrZXksIHRhcmdldCwgb2JqUHJvcCkge1xuICAgICAgICBsZXQgYXNuMUl0ZW07XG4gICAgICAgIGlmICh0eXBlb2YgKHNjaGVtYUl0ZW0udHlwZSkgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlciA9IHNjaGVtYUl0ZW0uY29udmVydGVyO1xuICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3BlcnR5ICcke2tleX0nIGRvZXNuJ3QgaGF2ZSBjb252ZXJ0ZXIgZm9yIHR5cGUgJHtBc25Qcm9wVHlwZXNbc2NoZW1hSXRlbS50eXBlXX0gaW4gc2NoZW1hICcke3RhcmdldC5uYW1lfSdgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzY2hlbWFJdGVtLnJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9ialByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ29ialByb3AnIHNob3VsZCBiZSB0eXBlIG9mIEFycmF5LlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBBcnJheS5mcm9tKG9ialByb3AsIChlbGVtZW50KSA9PiBjb252ZXJ0ZXIudG9BU04oZWxlbWVudCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lciA9IHNjaGVtYUl0ZW0ucmVwZWF0ZWQgPT09IFwic2VxdWVuY2VcIlxuICAgICAgICAgICAgICAgICAgICA/IGFzbjFqcy5TZXF1ZW5jZVxuICAgICAgICAgICAgICAgICAgICA6IGFzbjFqcy5TZXQ7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBuZXcgQ29udGFpbmVyKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1zLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBjb252ZXJ0ZXIudG9BU04ob2JqUHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5yZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmpQcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUGFyYW1ldGVyICdvYmpQcm9wJyBzaG91bGQgYmUgdHlwZSBvZiBBcnJheS5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gQXJyYXkuZnJvbShvYmpQcm9wLCAoZWxlbWVudCkgPT4gdGhpcy50b0FTTihlbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgY29uc3QgQ29udGFpbmVyID0gc2NoZW1hSXRlbS5yZXBlYXRlZCA9PT0gXCJzZXF1ZW5jZVwiXG4gICAgICAgICAgICAgICAgICAgID8gYXNuMWpzLlNlcXVlbmNlXG4gICAgICAgICAgICAgICAgICAgIDogYXNuMWpzLlNldDtcbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IG5ldyBDb250YWluZXIoe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbXMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IHRoaXMudG9BU04ob2JqUHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzbjFJdGVtO1xuICAgIH1cbn1cbiIsICJleHBvcnQgY2xhc3MgQXNuQXJyYXkgZXh0ZW5kcyBBcnJheSB7XG4gICAgY29uc3RydWN0b3IoaXRlbXMgPSBbXSkge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1zID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBzdXBlcihpdGVtcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgeyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgfSBmcm9tIFwicHZ0c3V0aWxzXCI7XG5pbXBvcnQgeyBBc25QYXJzZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCB7IEFzblNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9zZXJpYWxpemVyXCI7XG5leHBvcnQgY2xhc3MgQXNuQ29udmVydCB7XG4gICAgc3RhdGljIHNlcmlhbGl6ZShvYmopIHtcbiAgICAgICAgcmV0dXJuIEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKG9iaik7XG4gICAgfVxuICAgIHN0YXRpYyBwYXJzZShkYXRhLCB0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIEFzblBhcnNlci5wYXJzZShkYXRhLCB0YXJnZXQpO1xuICAgIH1cbiAgICBzdGF0aWMgdG9TdHJpbmcoZGF0YSkge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIuaXNCdWZmZXJTb3VyY2UoZGF0YSlcbiAgICAgICAgICAgID8gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSlcbiAgICAgICAgICAgIDogQXNuQ29udmVydC5zZXJpYWxpemUoZGF0YSk7XG4gICAgICAgIGNvbnN0IGFzbiA9IGFzbjFqcy5mcm9tQkVSKGJ1Zik7XG4gICAgICAgIGlmIChhc24ub2Zmc2V0ID09PSAtMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZGVjb2RlIEFTTi4xIGRhdGEuICR7YXNuLnJlc3VsdC5lcnJvcn1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXNuLnJlc3VsdC50b1N0cmluZygpO1xuICAgIH1cbn1cbiIsICJleHBvcnQgKiBmcm9tIFwiLi9jb252ZXJ0ZXJzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlcy9pbmRleFwiO1xuZXhwb3J0IHsgQXNuUHJvcCwgQXNuVHlwZSwgQXNuQ2hvaWNlVHlwZSwgQXNuU2VxdWVuY2VUeXBlLCBBc25TZXRUeXBlIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuZXhwb3J0IHsgQXNuVHlwZVR5cGVzLCBBc25Qcm9wVHlwZXMgfSBmcm9tIFwiLi9lbnVtc1wiO1xuZXhwb3J0IHsgQXNuUGFyc2VyIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5leHBvcnQgeyBBc25TZXJpYWxpemVyIH0gZnJvbSBcIi4vc2VyaWFsaXplclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9vYmplY3RzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb252ZXJ0XCI7XG4iLCAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XG4gIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XG4gICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XG4gICAgICB9XG4gICAgICByZXR1cm4gdDtcbiAgfVxuICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgdFtwXSA9IHNbcF07XG4gIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgfVxuICByZXR1cm4gdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19lc0RlY29yYXRlKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XG4gIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxuICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xuICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcbiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XG4gIHZhciBfLCBkb25lID0gZmFsc2U7XG4gIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHt9O1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcbiAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XG4gICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcbiAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xuICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcbiAgICAgIH1cbiAgfVxuICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XG4gIGRvbmUgPSB0cnVlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcbiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XG4gIH1cbiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19wcm9wS2V5KHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xuICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgXCJuYW1lXCIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gXCJcIi5jb25jYXQocHJlZml4LCBcIiBcIiwgbmFtZSkgOiBuYW1lIH0pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcbiAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XG4gIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgcltrXSA9IGFbal07XG4gIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xuICB2YXIgaSwgcDtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogZmFsc2UgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcbiAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cbiAgcmV0dXJuIGNvb2tlZDtcbn07XG5cbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XG4gIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xuICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XG4gIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xuICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hZGREaXNwb3NhYmxlUmVzb3VyY2UoZW52LCB2YWx1ZSwgYXN5bmMpIHtcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDApIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkLlwiKTtcbiAgICB2YXIgZGlzcG9zZTtcbiAgICBpZiAoYXN5bmMpIHtcbiAgICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jRGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuYXN5bmNEaXNwb3NlXTtcbiAgICB9XG4gICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkge1xuICAgICAgICBpZiAoIVN5bWJvbC5kaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmRpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmRpc3Bvc2VdO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRpc3Bvc2UgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBub3QgZGlzcG9zYWJsZS5cIik7XG4gICAgZW52LnN0YWNrLnB1c2goeyB2YWx1ZTogdmFsdWUsIGRpc3Bvc2U6IGRpc3Bvc2UsIGFzeW5jOiBhc3luYyB9KTtcbiAgfVxuICBlbHNlIGlmIChhc3luYykge1xuICAgIGVudi5zdGFjay5wdXNoKHsgYXN5bmM6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgX1N1cHByZXNzZWRFcnJvciA9IHR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2Rpc3Bvc2VSZXNvdXJjZXMoZW52KSB7XG4gIGZ1bmN0aW9uIGZhaWwoZSkge1xuICAgIGVudi5lcnJvciA9IGVudi5oYXNFcnJvciA/IG5ldyBfU3VwcHJlc3NlZEVycm9yKGUsIGVudi5lcnJvciwgXCJBbiBlcnJvciB3YXMgc3VwcHJlc3NlZCBkdXJpbmcgZGlzcG9zYWwuXCIpIDogZTtcbiAgICBlbnYuaGFzRXJyb3IgPSB0cnVlO1xuICB9XG4gIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgd2hpbGUgKGVudi5zdGFjay5sZW5ndGgpIHtcbiAgICAgIHZhciByZWMgPSBlbnYuc3RhY2sucG9wKCk7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjLmRpc3Bvc2UgJiYgcmVjLmRpc3Bvc2UuY2FsbChyZWMudmFsdWUpO1xuICAgICAgICBpZiAocmVjLmFzeW5jKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihuZXh0LCBmdW5jdGlvbihlKSB7IGZhaWwoZSk7IHJldHVybiBuZXh0KCk7IH0pO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICBmYWlsKGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW52Lmhhc0Vycm9yKSB0aHJvdyBlbnYuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIG5leHQoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2V4dGVuZHMsXG4gIF9fYXNzaWduLFxuICBfX3Jlc3QsXG4gIF9fZGVjb3JhdGUsXG4gIF9fcGFyYW0sXG4gIF9fbWV0YWRhdGEsXG4gIF9fYXdhaXRlcixcbiAgX19nZW5lcmF0b3IsXG4gIF9fY3JlYXRlQmluZGluZyxcbiAgX19leHBvcnRTdGFyLFxuICBfX3ZhbHVlcyxcbiAgX19yZWFkLFxuICBfX3NwcmVhZCxcbiAgX19zcHJlYWRBcnJheXMsXG4gIF9fc3ByZWFkQXJyYXksXG4gIF9fYXdhaXQsXG4gIF9fYXN5bmNHZW5lcmF0b3IsXG4gIF9fYXN5bmNEZWxlZ2F0b3IsXG4gIF9fYXN5bmNWYWx1ZXMsXG4gIF9fbWFrZVRlbXBsYXRlT2JqZWN0LFxuICBfX2ltcG9ydFN0YXIsXG4gIF9faW1wb3J0RGVmYXVsdCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEluLFxuICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSxcbiAgX19kaXNwb3NlUmVzb3VyY2VzLFxufTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyMCwgUGVjdWxpYXIgVmVudHVyZXMsIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKi9cblxuY2xhc3MgSnNvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgaW5uZXJFcnJvcikge1xyXG4gICAgICAgIHN1cGVyKGlubmVyRXJyb3JcclxuICAgICAgICAgICAgPyBgJHttZXNzYWdlfS4gU2VlIHRoZSBpbm5lciBleGNlcHRpb24gZm9yIG1vcmUgZGV0YWlscy5gXHJcbiAgICAgICAgICAgIDogbWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcclxuICAgICAgICB0aGlzLmlubmVyRXJyb3IgPSBpbm5lckVycm9yO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFRyYW5zZm9ybUVycm9yIGV4dGVuZHMgSnNvbkVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHNjaGVtYSwgbWVzc2FnZSwgaW5uZXJFcnJvcikge1xyXG4gICAgICAgIHN1cGVyKG1lc3NhZ2UsIGlubmVyRXJyb3IpO1xyXG4gICAgICAgIHRoaXMuc2NoZW1hID0gc2NoZW1hO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFBhcnNlckVycm9yIGV4dGVuZHMgVHJhbnNmb3JtRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3Ioc2NoZW1hLCBtZXNzYWdlLCBpbm5lckVycm9yKSB7XHJcbiAgICAgICAgc3VwZXIoc2NoZW1hLCBgSlNPTiBkb2Vzbid0IG1hdGNoIHRvICcke3NjaGVtYS50YXJnZXQubmFtZX0nIHNjaGVtYS4gJHttZXNzYWdlfWAsIGlubmVyRXJyb3IpO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEpzb25FcnJvciB7XHJcbn1cblxuY2xhc3MgU2VyaWFsaXplckVycm9yIGV4dGVuZHMgSnNvbkVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHNjaGVtYU5hbWUsIG1lc3NhZ2UsIGlubmVyRXJyb3IpIHtcclxuICAgICAgICBzdXBlcihgQ2Fubm90IHNlcmlhbGl6ZSBieSAnJHtzY2hlbWFOYW1lfScgc2NoZW1hLiAke21lc3NhZ2V9YCwgaW5uZXJFcnJvcik7XHJcbiAgICAgICAgdGhpcy5zY2hlbWFOYW1lID0gc2NoZW1hTmFtZTtcclxuICAgIH1cclxufVxuXG5jbGFzcyBLZXlFcnJvciBleHRlbmRzIFBhcnNlckVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHNjaGVtYSwga2V5cywgZXJyb3JzID0ge30pIHtcclxuICAgICAgICBzdXBlcihzY2hlbWEsIFwiU29tZSBrZXlzIGRvZXNuJ3QgbWF0Y2ggdG8gc2NoZW1hXCIpO1xyXG4gICAgICAgIHRoaXMua2V5cyA9IGtleXM7XHJcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XHJcbiAgICB9XHJcbn1cblxudmFyIEpzb25Qcm9wVHlwZXM7XHJcbihmdW5jdGlvbiAoSnNvblByb3BUeXBlcykge1xyXG4gICAgSnNvblByb3BUeXBlc1tKc29uUHJvcFR5cGVzW1wiQW55XCJdID0gMF0gPSBcIkFueVwiO1xyXG4gICAgSnNvblByb3BUeXBlc1tKc29uUHJvcFR5cGVzW1wiQm9vbGVhblwiXSA9IDFdID0gXCJCb29sZWFuXCI7XHJcbiAgICBKc29uUHJvcFR5cGVzW0pzb25Qcm9wVHlwZXNbXCJOdW1iZXJcIl0gPSAyXSA9IFwiTnVtYmVyXCI7XHJcbiAgICBKc29uUHJvcFR5cGVzW0pzb25Qcm9wVHlwZXNbXCJTdHJpbmdcIl0gPSAzXSA9IFwiU3RyaW5nXCI7XHJcbn0pKEpzb25Qcm9wVHlwZXMgfHwgKEpzb25Qcm9wVHlwZXMgPSB7fSkpO1xuXG5mdW5jdGlvbiBjaGVja1R5cGUodmFsdWUsIHR5cGUpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgIGNhc2UgSnNvblByb3BUeXBlcy5Cb29sZWFuOlxyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIjtcclxuICAgICAgICBjYXNlIEpzb25Qcm9wVHlwZXMuTnVtYmVyOlxyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xyXG4gICAgICAgIGNhc2UgSnNvblByb3BUeXBlcy5TdHJpbmc6XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiB0aHJvd0lmVHlwZUlzV3JvbmcodmFsdWUsIHR5cGUpIHtcclxuICAgIGlmICghY2hlY2tUeXBlKHZhbHVlLCB0eXBlKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFZhbHVlIG11c3QgYmUgJHtKc29uUHJvcFR5cGVzW3R5cGVdfWApO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGlzQ29udmVydGlibGUodGFyZ2V0KSB7XHJcbiAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5wcm90b3R5cGUpIHtcclxuICAgICAgICBpZiAodGFyZ2V0LnByb3RvdHlwZS50b0pTT04gJiYgdGFyZ2V0LnByb3RvdHlwZS5mcm9tSlNPTikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpc0NvbnZlcnRpYmxlKHRhcmdldC5wcm90b3R5cGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAhISh0YXJnZXQgJiYgdGFyZ2V0LnRvSlNPTiAmJiB0YXJnZXQuZnJvbUpTT04pO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIEpzb25TY2hlbWFTdG9yYWdlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBuZXcgTWFwKCk7XHJcbiAgICB9XHJcbiAgICBoYXModGFyZ2V0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuaGFzKHRhcmdldCkgfHwgISF0aGlzLmZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KTtcclxuICAgIH1cclxuICAgIGdldCh0YXJnZXQpIHtcclxuICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLml0ZW1zLmdldCh0YXJnZXQpIHx8IHRoaXMuZmluZFBhcmVudFNjaGVtYSh0YXJnZXQpO1xyXG4gICAgICAgIGlmICghc2NoZW1hKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZXQgc2NoZW1hIGZvciBjdXJyZW50IHRhcmdldFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcclxuICAgIH1cclxuICAgIGNyZWF0ZSh0YXJnZXQpIHtcclxuICAgICAgICBjb25zdCBzY2hlbWEgPSB7IG5hbWVzOiB7fSB9O1xyXG4gICAgICAgIGNvbnN0IHBhcmVudFNjaGVtYSA9IHRoaXMuZmluZFBhcmVudFNjaGVtYSh0YXJnZXQpO1xyXG4gICAgICAgIGlmIChwYXJlbnRTY2hlbWEpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzY2hlbWEsIHBhcmVudFNjaGVtYSk7XHJcbiAgICAgICAgICAgIHNjaGVtYS5uYW1lcyA9IHt9O1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gcGFyZW50U2NoZW1hLm5hbWVzKSB7XHJcbiAgICAgICAgICAgICAgICBzY2hlbWEubmFtZXNbbmFtZV0gPSBPYmplY3QuYXNzaWduKHt9LCBwYXJlbnRTY2hlbWEubmFtZXNbbmFtZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjaGVtYS50YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcclxuICAgIH1cclxuICAgIHNldCh0YXJnZXQsIHNjaGVtYSkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMuc2V0KHRhcmdldCwgc2NoZW1hKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGFyZ2V0Ll9fcHJvdG9fXztcclxuICAgICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuaXRlbXMuZ2V0KHBhcmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybiBzY2hlbWEgfHwgdGhpcy5maW5kUGFyZW50U2NoZW1hKHBhcmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XG5cbmNvbnN0IERFRkFVTFRfU0NIRU1BID0gXCJkZWZhdWx0XCI7XHJcbmNvbnN0IHNjaGVtYVN0b3JhZ2UgPSBuZXcgSnNvblNjaGVtYVN0b3JhZ2UoKTtcblxuY2xhc3MgUGF0dGVyblZhbGlkYXRpb24ge1xyXG4gICAgY29uc3RydWN0b3IocGF0dGVybikge1xyXG4gICAgICAgIHRoaXMucGF0dGVybiA9IG5ldyBSZWdFeHAocGF0dGVybik7XHJcbiAgICB9XHJcbiAgICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKHRoaXMucGF0dGVybi5zb3VyY2UsIHRoaXMucGF0dGVybi5mbGFncyk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFwiSW5jb21pbmcgdmFsdWUgbXVzdCBiZSBzdHJpbmdcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcGF0dGVybi5leGVjKHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBkb2Vzbid0IG1hdGNoIHRvIHBhdHRlcm4gJyR7cGF0dGVybi50b1N0cmluZygpfSdgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgSW5jbHVzaXZlVmFsaWRhdGlvbiB7XHJcbiAgICBjb25zdHJ1Y3RvcihtaW4gPSBOdW1iZXIuTUlOX1ZBTFVFLCBtYXggPSBOdW1iZXIuTUFYX1ZBTFVFKSB7XHJcbiAgICAgICAgdGhpcy5taW4gPSBtaW47XHJcbiAgICAgICAgdGhpcy5tYXggPSBtYXg7XHJcbiAgICB9XHJcbiAgICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRocm93SWZUeXBlSXNXcm9uZyh2YWx1ZSwgSnNvblByb3BUeXBlcy5OdW1iZXIpO1xyXG4gICAgICAgIGlmICghKHRoaXMubWluIDw9IHZhbHVlICYmIHZhbHVlIDw9IHRoaXMubWF4KSkge1xyXG4gICAgICAgICAgICBjb25zdCBtaW4gPSB0aGlzLm1pbiA9PT0gTnVtYmVyLk1JTl9WQUxVRSA/IFwiTUlOXCIgOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXggPT09IE51bWJlci5NQVhfVkFMVUUgPyBcIk1BWFwiIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFZhbHVlIGRvZXNuJ3QgbWF0Y2ggdG8gZGlhcGFzb24gWyR7bWlufSwke21heH1dYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmNsYXNzIEV4Y2x1c2l2ZVZhbGlkYXRpb24ge1xyXG4gICAgY29uc3RydWN0b3IobWluID0gTnVtYmVyLk1JTl9WQUxVRSwgbWF4ID0gTnVtYmVyLk1BWF9WQUxVRSkge1xyXG4gICAgICAgIHRoaXMubWluID0gbWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xyXG4gICAgfVxyXG4gICAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgICAgICB0aHJvd0lmVHlwZUlzV3JvbmcodmFsdWUsIEpzb25Qcm9wVHlwZXMuTnVtYmVyKTtcclxuICAgICAgICBpZiAoISh0aGlzLm1pbiA8IHZhbHVlICYmIHZhbHVlIDwgdGhpcy5tYXgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pbiA9IHRoaXMubWluID09PSBOdW1iZXIuTUlOX1ZBTFVFID8gXCJNSU5cIiA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICBjb25zdCBtYXggPSB0aGlzLm1heCA9PT0gTnVtYmVyLk1BWF9WQUxVRSA/IFwiTUFYXCIgOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVmFsdWUgZG9lc24ndCBtYXRjaCB0byBkaWFwYXNvbiAoJHttaW59LCR7bWF4fSlgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgTGVuZ3RoVmFsaWRhdGlvbiB7XHJcbiAgICBjb25zdHJ1Y3RvcihsZW5ndGgsIG1pbkxlbmd0aCwgbWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGg7XHJcbiAgICAgICAgdGhpcy5taW5MZW5ndGggPSBtaW5MZW5ndGg7XHJcbiAgICAgICAgdGhpcy5tYXhMZW5ndGggPSBtYXhMZW5ndGg7XHJcbiAgICB9XHJcbiAgICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT09IHRoaXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBsZW5ndGggbXVzdCBiZSBleGFjdGx5ICR7dGhpcy5sZW5ndGh9LmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubWluTGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA8IHRoaXMubWluTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBsZW5ndGggbXVzdCBiZSBtb3JlIHRoYW4gJHt0aGlzLm1pbkxlbmd0aH0uYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubWF4TGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IHRoaXMubWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gJHt0aGlzLm1heExlbmd0aH0uYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgRW51bWVyYXRpb25WYWxpZGF0aW9uIHtcclxuICAgIGNvbnN0cnVjdG9yKGVudW1lcmF0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5lbnVtZXJhdGlvbiA9IGVudW1lcmF0aW9uO1xyXG4gICAgfVxyXG4gICAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgICAgICB0aHJvd0lmVHlwZUlzV3JvbmcodmFsdWUsIEpzb25Qcm9wVHlwZXMuU3RyaW5nKTtcclxuICAgICAgICBpZiAoIXRoaXMuZW51bWVyYXRpb24uaW5jbHVkZXModmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFZhbHVlIG11c3QgYmUgb25lIG9mICR7dGhpcy5lbnVtZXJhdGlvbi5tYXAoKHYpID0+IGAnJHt2fSdgKS5qb2luKFwiLCBcIil9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmNsYXNzIEpzb25UcmFuc2Zvcm0ge1xyXG4gICAgc3RhdGljIGNoZWNrVmFsdWVzKGRhdGEsIHNjaGVtYUl0ZW0pIHtcclxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSA6IFtkYXRhXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb24gb2Ygc2NoZW1hSXRlbS52YWxpZGF0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb24gaW5zdGFuY2VvZiBMZW5ndGhWYWxpZGF0aW9uICYmIHNjaGVtYUl0ZW0ucmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uLnZhbGlkYXRlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbi52YWxpZGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgY2hlY2tUeXBlcyh2YWx1ZSwgc2NoZW1hSXRlbSkge1xyXG4gICAgICAgIGlmIChzY2hlbWFJdGVtLnJlcGVhdGVkICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVmFsdWUgbXVzdCBiZSBBcnJheVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWFJdGVtLnR5cGUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiB2YWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgIHRocm93SWZUeXBlSXNXcm9uZyh2LCBzY2hlbWFJdGVtLnR5cGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhdGljIGdldFNjaGVtYUJ5TmFtZShzY2hlbWEsIG5hbWUgPSBERUZBVUxUX1NDSEVNQSkge1xyXG4gICAgICAgIHJldHVybiB7IC4uLnNjaGVtYS5uYW1lc1tERUZBVUxUX1NDSEVNQV0sIC4uLnNjaGVtYS5uYW1lc1tuYW1lXSB9O1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIEpzb25TZXJpYWxpemVyIGV4dGVuZHMgSnNvblRyYW5zZm9ybSB7XHJcbiAgICBzdGF0aWMgc2VyaWFsaXplKG9iaiwgb3B0aW9ucywgcmVwbGFjZXIsIHNwYWNlKSB7XHJcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKG9iaiwgb3B0aW9ucyk7XHJcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGpzb24sIHJlcGxhY2VyLCBzcGFjZSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgdG9KU09OKG9iaiwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgbGV0IHJlcztcclxuICAgICAgICBsZXQgdGFyZ2V0U2NoZW1hID0gb3B0aW9ucy50YXJnZXRTY2hlbWE7XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hTmFtZSA9IG9wdGlvbnMuc2NoZW1hTmFtZSB8fCBERUZBVUxUX1NDSEVNQTtcclxuICAgICAgICBpZiAoaXNDb252ZXJ0aWJsZShvYmopKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmoudG9KU09OKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcclxuICAgICAgICAgICAgcmVzID0gW107XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBvYmopIHtcclxuICAgICAgICAgICAgICAgIHJlcy5wdXNoKHRoaXMudG9KU09OKGl0ZW0sIG9wdGlvbnMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgIGlmICh0YXJnZXRTY2hlbWEgJiYgIXNjaGVtYVN0b3JhZ2UuaGFzKHRhcmdldFNjaGVtYSkpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBKc29uRXJyb3IoXCJDYW5ub3QgZ2V0IHNjaGVtYSBmb3IgYHRhcmdldFNjaGVtYWAgcGFyYW1cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGFyZ2V0U2NoZW1hID0gKHRhcmdldFNjaGVtYSB8fCBvYmouY29uc3RydWN0b3IpO1xyXG4gICAgICAgICAgICBpZiAoc2NoZW1hU3RvcmFnZS5oYXModGFyZ2V0U2NoZW1hKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0U2NoZW1hKTtcclxuICAgICAgICAgICAgICAgIHJlcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZWRTY2hlbWEgPSB0aGlzLmdldFNjaGVtYUJ5TmFtZShzY2hlbWEsIHNjaGVtYU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbmFtZWRTY2hlbWEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbmFtZWRTY2hlbWFba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqSXRlbSA9IG9ialtrZXldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaXRlbS5vcHRpb25hbCAmJiBvYmpJdGVtID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXRlbS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBvYmpJdGVtID09PSBpdGVtLmRlZmF1bHRWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXRlbS5vcHRpb25hbCAmJiBvYmpJdGVtID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemVyRXJyb3IodGFyZ2V0U2NoZW1hLm5hbWUsIGBQcm9wZXJ0eSAnJHtrZXl9JyBpcyByZXF1aXJlZC5gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0udHlwZSA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29udmVydGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0ucmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBvYmpJdGVtLm1hcCgoZWwpID0+IGl0ZW0uY29udmVydGVyLnRvSlNPTihlbCwgb2JqKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGl0ZW0uY29udmVydGVyLnRvSlNPTihvYmpJdGVtLCBvYmopO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gb2JqSXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBvYmpJdGVtLm1hcCgoZWwpID0+IHRoaXMudG9KU09OKGVsLCB7IHNjaGVtYU5hbWUgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnRvSlNPTihvYmpJdGVtLCB7IHNjaGVtYU5hbWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja1R5cGVzKHZhbHVlLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja1ZhbHVlcyh2YWx1ZSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc1tpdGVtLm5hbWUgfHwga2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFNlcmlhbGl6ZXJFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemVyRXJyb3Ioc2NoZW1hLnRhcmdldC5uYW1lLCBgUHJvcGVydHkgJyR7a2V5fScgaXMgd3JvbmcuICR7ZS5tZXNzYWdlfWAsIGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzID0ge307XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IHRoaXMudG9KU09OKG9ialtrZXldLCB7IHNjaGVtYU5hbWUgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlcyA9IG9iajtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxufVxuXG5jbGFzcyBKc29uUGFyc2VyIGV4dGVuZHMgSnNvblRyYW5zZm9ybSB7XHJcbiAgICBzdGF0aWMgcGFyc2UoZGF0YSwgb3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZGF0YSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbUpTT04ob2JqLCBvcHRpb25zKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBmcm9tSlNPTih0YXJnZXQsIG9wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCB0YXJnZXRTY2hlbWEgPSBvcHRpb25zLnRhcmdldFNjaGVtYTtcclxuICAgICAgICBjb25zdCBzY2hlbWFOYW1lID0gb3B0aW9ucy5zY2hlbWFOYW1lIHx8IERFRkFVTFRfU0NIRU1BO1xyXG4gICAgICAgIGNvbnN0IG9iaiA9IG5ldyB0YXJnZXRTY2hlbWEoKTtcclxuICAgICAgICBpZiAoaXNDb252ZXJ0aWJsZShvYmopKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmouZnJvbUpTT04odGFyZ2V0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0U2NoZW1hKTtcclxuICAgICAgICBjb25zdCBuYW1lZFNjaGVtYSA9IHRoaXMuZ2V0U2NoZW1hQnlOYW1lKHNjaGVtYSwgc2NoZW1hTmFtZSk7XHJcbiAgICAgICAgY29uc3Qga2V5RXJyb3JzID0ge307XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuc3RyaWN0UHJvcGVydHkgJiYgIUFycmF5LmlzQXJyYXkodGFyZ2V0KSkge1xyXG4gICAgICAgICAgICBKc29uUGFyc2VyLmNoZWNrU3RyaWN0UHJvcGVydHkodGFyZ2V0LCBuYW1lZFNjaGVtYSwgc2NoZW1hKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbmFtZWRTY2hlbWEpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBuYW1lZFNjaGVtYVtrZXldO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IGl0ZW0ubmFtZSB8fCBrZXk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRhcmdldFtuYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIChpdGVtLm9wdGlvbmFsIHx8IGl0ZW0uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0ub3B0aW9uYWwgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFcnJvcihzY2hlbWEsIGBQcm9wZXJ0eSAnJHtuYW1lfScgaXMgcmVxdWlyZWQuYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrVHlwZXModmFsdWUsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja1ZhbHVlcyh2YWx1ZSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChpdGVtLnR5cGUpID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29udmVydGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlLm1hcCgoZWwpID0+IGl0ZW0uY29udmVydGVyLmZyb21KU09OKGVsLCBvYmopKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gaXRlbS5jb252ZXJ0ZXIuZnJvbUpTT04odmFsdWUsIG9iaik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U2NoZW1hOiBpdGVtLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5yZXBlYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlLm1hcCgoZWwpID0+IHRoaXMuZnJvbUpTT04oZWwsIG5ld09wdGlvbnMpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdGhpcy5mcm9tSlNPTih2YWx1ZSwgbmV3T3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgUGFyc2VyRXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBQYXJzZXJFcnJvcihzY2hlbWEsIGBQcm9wZXJ0eSAnJHtrZXl9JyBpcyB3cm9uZy4gJHtlLm1lc3NhZ2V9YCwgZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zdHJpY3RBbGxLZXlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5RXJyb3JzW2tleV0gPSBlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoa2V5RXJyb3JzKTtcclxuICAgICAgICBpZiAoa2V5cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEtleUVycm9yKHNjaGVtYSwga2V5cywga2V5RXJyb3JzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjaGVja1N0cmljdFByb3BlcnR5KHRhcmdldCwgbmFtZWRTY2hlbWEsIHNjaGVtYSkge1xyXG4gICAgICAgIGNvbnN0IGpzb25Qcm9wcyA9IE9iamVjdC5rZXlzKHRhcmdldCk7XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hUHJvcHMgPSBPYmplY3Qua2V5cyhuYW1lZFNjaGVtYSk7XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGpzb25Qcm9wcykge1xyXG4gICAgICAgICAgICBpZiAoc2NoZW1hUHJvcHMuaW5kZXhPZihrZXkpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBLZXlFcnJvcihzY2hlbWEsIGtleXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5mdW5jdGlvbiBnZXRWYWxpZGF0aW9ucyhpdGVtKSB7XHJcbiAgICBjb25zdCB2YWxpZGF0aW9ucyA9IFtdO1xyXG4gICAgaWYgKGl0ZW0ucGF0dGVybikge1xyXG4gICAgICAgIHZhbGlkYXRpb25zLnB1c2gobmV3IFBhdHRlcm5WYWxpZGF0aW9uKGl0ZW0ucGF0dGVybikpO1xyXG4gICAgfVxyXG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gSnNvblByb3BUeXBlcy5OdW1iZXIgfHwgaXRlbS50eXBlID09PSBKc29uUHJvcFR5cGVzLkFueSkge1xyXG4gICAgICAgIGlmIChpdGVtLm1pbkluY2x1c2l2ZSAhPT0gdW5kZWZpbmVkIHx8IGl0ZW0ubWF4SW5jbHVzaXZlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbnMucHVzaChuZXcgSW5jbHVzaXZlVmFsaWRhdGlvbihpdGVtLm1pbkluY2x1c2l2ZSwgaXRlbS5tYXhJbmNsdXNpdmUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGl0ZW0ubWluRXhjbHVzaXZlICE9PSB1bmRlZmluZWQgfHwgaXRlbS5tYXhFeGNsdXNpdmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9ucy5wdXNoKG5ldyBFeGNsdXNpdmVWYWxpZGF0aW9uKGl0ZW0ubWluRXhjbHVzaXZlLCBpdGVtLm1heEV4Y2x1c2l2ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXRlbS5lbnVtZXJhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2gobmV3IEVudW1lcmF0aW9uVmFsaWRhdGlvbihpdGVtLmVudW1lcmF0aW9uKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gSnNvblByb3BUeXBlcy5TdHJpbmcgfHwgaXRlbS5yZXBlYXRlZCB8fCBpdGVtLnR5cGUgPT09IEpzb25Qcm9wVHlwZXMuQW55KSB7XHJcbiAgICAgICAgaWYgKGl0ZW0ubGVuZ3RoICE9PSB1bmRlZmluZWQgfHwgaXRlbS5taW5MZW5ndGggIT09IHVuZGVmaW5lZCB8fCBpdGVtLm1heExlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2gobmV3IExlbmd0aFZhbGlkYXRpb24oaXRlbS5sZW5ndGgsIGl0ZW0ubWluTGVuZ3RoLCBpdGVtLm1heExlbmd0aCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWxpZGF0aW9ucztcclxufVxyXG5jb25zdCBKc29uUHJvcCA9IChvcHRpb25zID0ge30pID0+ICh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XHJcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgQ2Fubm90IHNldCB0eXBlIGZvciAke3Byb3BlcnR5S2V5fSBwcm9wZXJ0eSBvZiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfSBzY2hlbWFgO1xyXG4gICAgbGV0IHNjaGVtYTtcclxuICAgIGlmICghc2NoZW1hU3RvcmFnZS5oYXModGFyZ2V0LmNvbnN0cnVjdG9yKSkge1xyXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuY3JlYXRlKHRhcmdldC5jb25zdHJ1Y3Rvcik7XHJcbiAgICAgICAgc2NoZW1hU3RvcmFnZS5zZXQodGFyZ2V0LmNvbnN0cnVjdG9yLCBzY2hlbWEpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0LmNvbnN0cnVjdG9yKTtcclxuICAgICAgICBpZiAoc2NoZW1hLnRhcmdldCAhPT0gdGFyZ2V0LmNvbnN0cnVjdG9yKSB7XHJcbiAgICAgICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuY3JlYXRlKHRhcmdldC5jb25zdHJ1Y3Rvcik7XHJcbiAgICAgICAgICAgIHNjaGVtYVN0b3JhZ2Uuc2V0KHRhcmdldC5jb25zdHJ1Y3Rvciwgc2NoZW1hKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZWZhdWx0U2NoZW1hID0ge1xyXG4gICAgICAgIHR5cGU6IEpzb25Qcm9wVHlwZXMuQW55LFxyXG4gICAgICAgIHZhbGlkYXRpb25zOiBbXSxcclxuICAgIH07XHJcbiAgICBjb25zdCBjb3B5T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oZGVmYXVsdFNjaGVtYSwgb3B0aW9ucyk7XHJcbiAgICBjb3B5T3B0aW9ucy52YWxpZGF0aW9ucyA9IGdldFZhbGlkYXRpb25zKGNvcHlPcHRpb25zKTtcclxuICAgIGlmICh0eXBlb2YgY29weU9wdGlvbnMudHlwZSAhPT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgIGlmICghc2NoZW1hU3RvcmFnZS5oYXMoY29weU9wdGlvbnMudHlwZSkgJiYgIWlzQ29udmVydGlibGUoY29weU9wdGlvbnMudHlwZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Vycm9yTWVzc2FnZX0uIEFzc2lnbmluZyB0eXBlIGRvZXNuJ3QgaGF2ZSBzY2hlbWEuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IHNjaGVtYU5hbWVzO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy5zY2hlbWEpKSB7XHJcbiAgICAgICAgc2NoZW1hTmFtZXMgPSBvcHRpb25zLnNjaGVtYTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHNjaGVtYU5hbWVzID0gW29wdGlvbnMuc2NoZW1hIHx8IERFRkFVTFRfU0NIRU1BXTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qgc2NoZW1hTmFtZSBvZiBzY2hlbWFOYW1lcykge1xyXG4gICAgICAgIGlmICghc2NoZW1hLm5hbWVzW3NjaGVtYU5hbWVdKSB7XHJcbiAgICAgICAgICAgIHNjaGVtYS5uYW1lc1tzY2hlbWFOYW1lXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuYW1lZFNjaGVtYSA9IHNjaGVtYS5uYW1lc1tzY2hlbWFOYW1lXTtcclxuICAgICAgICBuYW1lZFNjaGVtYVtwcm9wZXJ0eUtleV0gPSBjb3B5T3B0aW9ucztcclxuICAgIH1cclxufTtcblxuZXhwb3J0IHsgSnNvbkVycm9yLCBKc29uUGFyc2VyLCBKc29uUHJvcCwgSnNvblByb3BUeXBlcywgSnNvblNlcmlhbGl6ZXIsIEtleUVycm9yLCBQYXJzZXJFcnJvciwgU2VyaWFsaXplckVycm9yLCBUcmFuc2Zvcm1FcnJvciwgVmFsaWRhdGlvbkVycm9yIH07XG4iLCAiLyohXG4gQ29weXJpZ2h0IChjKSBQZWN1bGlhciBWZW50dXJlcywgTExDXG4qL1xuXG5pbXBvcnQgeyBDb252ZXJ0LCBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIsIGNvbWJpbmUgfSBmcm9tICdwdnRzdXRpbHMnO1xuZXhwb3J0IHsgQnVmZmVyU291cmNlQ29udmVydGVyIH0gZnJvbSAncHZ0c3V0aWxzJztcbmltcG9ydCB7IEFzblByb3AsIEFzblByb3BUeXBlcywgQXNuVHlwZSwgQXNuVHlwZVR5cGVzLCBBc25JbnRlZ2VyQ29udmVydGVyLCBBc25TZXJpYWxpemVyLCBBc25Db252ZXJ0IH0gZnJvbSAnQHBlY3VsaWFyL2FzbjEtc2NoZW1hJztcbmltcG9ydCB7IF9fZGVjb3JhdGUgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBKc29uUHJvcCwgSnNvblByb3BUeXBlcyB9IGZyb20gJ0BwZWN1bGlhci9qc29uLXNjaGVtYSc7XG5pbXBvcnQgKiBhcyBhc24xIGZyb20gJ2FzbjFqcyc7XG5cbmNsYXNzIENyeXB0b0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xufVxuXG5jbGFzcyBBbGdvcml0aG1FcnJvciBleHRlbmRzIENyeXB0b0Vycm9yIHtcbn1cblxuY2xhc3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciBleHRlbmRzIENyeXB0b0Vycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXRob2ROYW1lKSB7XG4gICAgICAgIHN1cGVyKGBVbnN1cHBvcnRlZCBvcGVyYXRpb246ICR7bWV0aG9kTmFtZSA/IGAke21ldGhvZE5hbWV9YCA6IFwiXCJ9YCk7XG4gICAgfVxufVxuXG5jbGFzcyBPcGVyYXRpb25FcnJvciBleHRlbmRzIENyeXB0b0Vycm9yIHtcbn1cblxuY2xhc3MgUmVxdWlyZWRQcm9wZXJ0eUVycm9yIGV4dGVuZHMgQ3J5cHRvRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHByb3BOYW1lKSB7XG4gICAgICAgIHN1cGVyKGAke3Byb3BOYW1lfTogTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eWApO1xuICAgIH1cbn1cblxuY2xhc3MgUGVtQ29udmVydGVyIHtcbiAgICBzdGF0aWMgdG9BcnJheUJ1ZmZlcihwZW0pIHtcbiAgICAgICAgY29uc3QgYmFzZTY0ID0gcGVtXG4gICAgICAgICAgICAucmVwbGFjZSgvLXs1fShCRUdJTnxFTkQpIC4qLXs1fS9nLCBcIlwiKVxuICAgICAgICAgICAgLnJlcGxhY2UoXCJcXHJcIiwgXCJcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKFwiXFxuXCIsIFwiXCIpO1xuICAgICAgICByZXR1cm4gQ29udmVydC5Gcm9tQmFzZTY0KGJhc2U2NCk7XG4gICAgfVxuICAgIHN0YXRpYyB0b1VpbnQ4QXJyYXkocGVtKSB7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gdGhpcy50b0FycmF5QnVmZmVyKHBlbSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShieXRlcyk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tQnVmZmVyU291cmNlKGJ1ZmZlciwgdGFnKSB7XG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IENvbnZlcnQuVG9CYXNlNjQoYnVmZmVyKTtcbiAgICAgICAgbGV0IHNsaWNlZDtcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBbXTtcbiAgICAgICAgd2hpbGUgKG9mZnNldCA8IGJhc2U2NC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNsaWNlZCA9IGJhc2U2NC5zbGljZShvZmZzZXQsIG9mZnNldCArIDY0KTtcbiAgICAgICAgICAgIGlmIChzbGljZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcm93cy5wdXNoKHNsaWNlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9mZnNldCArPSA2NDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cHBlckNhc2VUYWcgPSB0YWcudG9VcHBlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGAtLS0tLUJFR0lOICR7dXBwZXJDYXNlVGFnfS0tLS0tXFxuJHtyb3dzLmpvaW4oXCJcXG5cIil9XFxuLS0tLS1FTkQgJHt1cHBlckNhc2VUYWd9LS0tLS1gO1xuICAgIH1cbiAgICBzdGF0aWMgaXNQRU0oZGF0YSkge1xuICAgICAgICByZXR1cm4gLy0tLS0tQkVHSU4gListLS0tLVtBLVphLXowLTkrLys9XFxzXFxuXSstLS0tLUVORCAuKy0tLS0tL2kudGVzdChkYXRhKTtcbiAgICB9XG4gICAgc3RhdGljIGdldFRhZ05hbWUocGVtKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1BFTShwZW0pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYWQgcGFyYW1ldGVyLiBJbmNvbWluZyBkYXRhIGlzIG5vdCByaWdodCBQRU1cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gLy0tLS0tQkVHSU4gKC4rKS0tLS0tLy5leGVjKHBlbSk7XG4gICAgICAgIGlmICghcmVzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IHRhZyBmcm9tIFBFTVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzWzFdO1xuICAgIH1cbiAgICBzdGF0aWMgaGFzVGFnTmFtZShwZW0sIHRhZ05hbWUpIHtcbiAgICAgICAgY29uc3QgdGFnID0gdGhpcy5nZXRUYWdOYW1lKHBlbSk7XG4gICAgICAgIHJldHVybiB0YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZy50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNDZXJ0aWZpY2F0ZShwZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzVGFnTmFtZShwZW0sIFwiY2VydGlmaWNhdGVcIik7XG4gICAgfVxuICAgIHN0YXRpYyBpc0NlcnRpZmljYXRlUmVxdWVzdChwZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzVGFnTmFtZShwZW0sIFwiY2VydGlmaWNhdGUgcmVxdWVzdFwiKTtcbiAgICB9XG4gICAgc3RhdGljIGlzQ1JMKHBlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNUYWdOYW1lKHBlbSwgXCJ4NTA5IGNybFwiKTtcbiAgICB9XG4gICAgc3RhdGljIGlzUHVibGljS2V5KHBlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNUYWdOYW1lKHBlbSwgXCJwdWJsaWMga2V5XCIpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNKV0soZGF0YSkge1xuICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBcImt0eVwiIGluIGRhdGE7XG59XG5cbmNsYXNzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBhc3luYyBkaWdlc3QoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrRGlnZXN0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkRpZ2VzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tEaWdlc3QoYWxnb3JpdGhtLCBfZGF0YSkge1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtTmFtZShhbGdvcml0aG0pO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChfYWxnb3JpdGhtLCBfZGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImRpZ2VzdFwiKTtcbiAgICB9XG4gICAgYXN5bmMgZ2VuZXJhdGVLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrR2VuZXJhdGVLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uR2VuZXJhdGVLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBfZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSk7XG4gICAgICAgIGlmICghKGtleVVzYWdlcyAmJiBrZXlVc2FnZXMubGVuZ3RoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVXNhZ2VzIGNhbm5vdCBiZSBlbXB0eSB3aGVuIGNyZWF0aW5nIGEga2V5LmApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhbGxvd2VkVXNhZ2VzO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVzYWdlcykpIHtcbiAgICAgICAgICAgIGFsbG93ZWRVc2FnZXMgPSB0aGlzLnVzYWdlcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFsbG93ZWRVc2FnZXMgPSB0aGlzLnVzYWdlcy5wcml2YXRlS2V5LmNvbmNhdCh0aGlzLnVzYWdlcy5wdWJsaWNLZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tLZXlVc2FnZXMoa2V5VXNhZ2VzLCBhbGxvd2VkVXNhZ2VzKTtcbiAgICB9XG4gICAgY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhfYWxnb3JpdGhtKSB7XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoX2FsZ29yaXRobSwgX2V4dHJhY3RhYmxlLCBfa2V5VXNhZ2VzLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImdlbmVyYXRlS2V5XCIpO1xuICAgIH1cbiAgICBhc3luYyBzaWduKC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1NpZ24uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uU2lnbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tTaWduKGFsZ29yaXRobSwga2V5LCBfZGF0YSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSwgXCJzaWduXCIpO1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oX2FsZ29yaXRobSwgX2tleSwgX2RhdGEsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwic2lnblwiKTtcbiAgICB9XG4gICAgYXN5bmMgdmVyaWZ5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1ZlcmlmeS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25WZXJpZnkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBfc2lnbmF0dXJlLCBfZGF0YSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSwgXCJ2ZXJpZnlcIik7XG4gICAgfVxuICAgIGFzeW5jIG9uVmVyaWZ5KF9hbGdvcml0aG0sIF9rZXksIF9zaWduYXR1cmUsIF9kYXRhLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcInZlcmlmeVwiKTtcbiAgICB9XG4gICAgYXN5bmMgZW5jcnlwdCguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tFbmNyeXB0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkVuY3J5cHQuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrRW5jcnlwdChhbGdvcml0aG0sIGtleSwgX2RhdGEsIG9wdGlvbnMgPSB7fSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSwgb3B0aW9ucy5rZXlVc2FnZSA/IFwiZW5jcnlwdFwiIDogdm9pZCAwKTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KF9hbGdvcml0aG0sIF9rZXksIF9kYXRhLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImVuY3J5cHRcIik7XG4gICAgfVxuICAgIGFzeW5jIGRlY3J5cHQoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrRGVjcnlwdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25EZWNyeXB0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja0RlY3J5cHQoYWxnb3JpdGhtLCBrZXksIF9kYXRhLCBvcHRpb25zID0ge30sIC4uLl9hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXksIG9wdGlvbnMua2V5VXNhZ2UgPyBcImRlY3J5cHRcIiA6IHZvaWQgMCk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChfYWxnb3JpdGhtLCBfa2V5LCBfZGF0YSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXCJkZWNyeXB0XCIpO1xuICAgIH1cbiAgICBhc3luYyBkZXJpdmVCaXRzKC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0Rlcml2ZUJpdHMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uRGVyaXZlQml0cy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tEZXJpdmVCaXRzKGFsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoLCBvcHRpb25zID0ge30sIC4uLl9hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShiYXNlS2V5LCBvcHRpb25zLmtleVVzYWdlID8gXCJkZXJpdmVCaXRzXCIgOiB2b2lkIDApO1xuICAgICAgICBpZiAobGVuZ3RoICUgOCAhPT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwibGVuZ3RoOiBJcyBub3QgbXVsdGlwbGUgb2YgOFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBvbkRlcml2ZUJpdHMoX2FsZ29yaXRobSwgX2Jhc2VLZXksIF9sZW5ndGgsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwiZGVyaXZlQml0c1wiKTtcbiAgICB9XG4gICAgYXN5bmMgZXhwb3J0S2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0V4cG9ydEtleS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25FeHBvcnRLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrRXhwb3J0S2V5KGZvcm1hdCwga2V5LCAuLi5fYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrS2V5Rm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCFrZXkuZXh0cmFjdGFibGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDcnlwdG9FcnJvcihcImtleTogSXMgbm90IGV4dHJhY3RhYmxlXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KF9mb3JtYXQsIF9rZXksIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwiZXhwb3J0S2V5XCIpO1xuICAgIH1cbiAgICBhc3luYyBpbXBvcnRLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrSW1wb3J0S2V5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkltcG9ydEtleS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tJbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIF9leHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5fYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrS2V5Rm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIHRoaXMuY2hlY2tLZXlEYXRhKGZvcm1hdCwga2V5RGF0YSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tJbXBvcnRQYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51c2FnZXMpKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrS2V5VXNhZ2VzKGtleVVzYWdlcywgdGhpcy51c2FnZXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KF9mb3JtYXQsIF9rZXlEYXRhLCBfYWxnb3JpdGhtLCBfZXh0cmFjdGFibGUsIF9rZXlVc2FnZXMsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwiaW1wb3J0S2V5XCIpO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKSB7XG4gICAgICAgIGlmIChhbGdvcml0aG0ubmFtZS50b0xvd2VyQ2FzZSgpICE9PSB0aGlzLm5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFsZ29yaXRobUVycm9yKFwiVW5yZWNvZ25pemVkIG5hbWVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoX2FsZ29yaXRobSkge1xuICAgIH1cbiAgICBjaGVja0Rlcml2ZWRLZXlQYXJhbXMoX2FsZ29yaXRobSkge1xuICAgIH1cbiAgICBjaGVja0tleVVzYWdlcyh1c2FnZXMsIGFsbG93ZWQpIHtcbiAgICAgICAgZm9yIChjb25zdCB1c2FnZSBvZiB1c2FnZXMpIHtcbiAgICAgICAgICAgIGlmIChhbGxvd2VkLmluZGV4T2YodXNhZ2UpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY3JlYXRlIGEga2V5IHVzaW5nIHRoZSBzcGVjaWZpZWQga2V5IHVzYWdlc1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGtleS5hbGdvcml0aG0pO1xuICAgICAgICBpZiAoa2V5VXNhZ2UgJiYga2V5LnVzYWdlcy5pbmRleE9mKGtleVVzYWdlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDcnlwdG9FcnJvcihga2V5IGRvZXMgbm90IG1hdGNoIHRoYXQgb2Ygb3BlcmF0aW9uYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tSZXF1aXJlZFByb3BlcnR5KGRhdGEsIHByb3BOYW1lKSB7XG4gICAgICAgIGlmICghKHByb3BOYW1lIGluIGRhdGEpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmVxdWlyZWRQcm9wZXJ0eUVycm9yKHByb3BOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLCBoYXNoQWxnb3JpdGhtcykge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaGFzaEFsZ29yaXRobXMpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLnRvTG93ZXJDYXNlKCkgPT09IGFsZ29yaXRobS5uYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKGBoYXNoOiBNdXN0IGJlIG9uZSBvZiAke2hhc2hBbGdvcml0aG1zLmpvaW4oXCIsIFwiKX1gKTtcbiAgICB9XG4gICAgY2hlY2tJbXBvcnRQYXJhbXMoX2FsZ29yaXRobSkge1xuICAgIH1cbiAgICBjaGVja0tleUZvcm1hdChmb3JtYXQpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOlxuICAgICAgICAgICAgY2FzZSBcInNwa2lcIjpcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImZvcm1hdDogSXMgaW52YWxpZCB2YWx1ZS4gTXVzdCBiZSAnandrJywgJ3JhdycsICdzcGtpJywgb3IgJ3BrY3M4J1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0tleURhdGEoZm9ybWF0LCBrZXlEYXRhKSB7XG4gICAgICAgIGlmICgha2V5RGF0YSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleURhdGE6IENhbm5vdCBiZSBlbXB0eSBvbiBlbXB0eSBvbiBrZXkgaW1wb3J0aW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiandrXCIpIHtcbiAgICAgICAgICAgIGlmICghaXNKV0soa2V5RGF0YSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5RGF0YTogSXMgbm90IEpzb25XZWJUb2tlblwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghQnVmZmVyU291cmNlQ29udmVydGVyLmlzQnVmZmVyU291cmNlKGtleURhdGEpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5RGF0YTogSXMgbm90IEFycmF5QnVmZmVyVmlldyBvciBBcnJheUJ1ZmZlclwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcmVwYXJlRGF0YShkYXRhKSB7XG4gICAgICAgIHJldHVybiBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIEFlc1Byb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJsZW5ndGhcIik7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogSXMgbm90IG9mIHR5cGUgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAxMjg6XG4gICAgICAgICAgICBjYXNlIDE5MjpcbiAgICAgICAgICAgIGNhc2UgMjU2OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibGVuZ3RoOiBNdXN0IGJlIDEyOCwgMTkyLCBvciAyNTZcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tEZXJpdmVkS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKTtcbiAgICB9XG59XG5cbmNsYXNzIEFlc0NiY1Byb3ZpZGVyIGV4dGVuZHMgQWVzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkFFUy1DQkNcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJlbmNyeXB0XCIsIFwiZGVjcnlwdFwiLCBcIndyYXBLZXlcIiwgXCJ1bndyYXBLZXlcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaXZcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5pdiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhhbGdvcml0aG0uaXYpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIml2OiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0uaXYuYnl0ZUxlbmd0aCAhPT0gMTYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJpdjogTXVzdCBoYXZlIGxlbmd0aCAxNiBieXRlc1wiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzQ21hY1Byb3ZpZGVyIGV4dGVuZHMgQWVzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkFFUy1DTUFDXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wic2lnblwiLCBcInZlcmlmeVwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJsZW5ndGhcIik7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogSXMgbm90IGEgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0ubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwibGVuZ3RoOiBNdXN0IGJlIG1vcmUgdGhhbiAwXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBBZXNDdHJQcm92aWRlciBleHRlbmRzIEFlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBRVMtQ1RSXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZW5jcnlwdFwiLCBcImRlY3J5cHRcIiwgXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImNvdW50ZXJcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5jb3VudGVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGFsZ29yaXRobS5jb3VudGVyKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJjb3VudGVyOiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0uY291bnRlci5ieXRlTGVuZ3RoICE9PSAxNikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIml2OiBNdXN0IGhhdmUgbGVuZ3RoIDE2IGJ5dGVzXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJsZW5ndGhcIik7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogSXMgbm90IGEgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0ubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwibGVuZ3RoOiBNdXN0IGJlIG1vcmUgdGhhbiAwXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBBZXNFY2JQcm92aWRlciBleHRlbmRzIEFlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBRVMtRUNCXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZW5jcnlwdFwiLCBcImRlY3J5cHRcIiwgXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbn1cblxuY2xhc3MgQWVzR2NtUHJvdmlkZXIgZXh0ZW5kcyBBZXNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQUVTLUdDTVwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCIsIFwid3JhcEtleVwiLCBcInVud3JhcEtleVwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJpdlwiKTtcbiAgICAgICAgaWYgKCEoYWxnb3JpdGhtLml2IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGFsZ29yaXRobS5pdikpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXY6IElzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5pdi5ieXRlTGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwiaXY6IE11c3QgaGF2ZSBsZW5ndGggbW9yZSB0aGFuIDAgYW5kIGxlc3MgdGhhbiAyXjY0IC0gMVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShcInRhZ0xlbmd0aFwiIGluIGFsZ29yaXRobSkpIHtcbiAgICAgICAgICAgIGFsZ29yaXRobS50YWdMZW5ndGggPSAxMjg7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0udGFnTGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgIGNhc2UgOTY6XG4gICAgICAgICAgICBjYXNlIDEwNDpcbiAgICAgICAgICAgIGNhc2UgMTEyOlxuICAgICAgICAgICAgY2FzZSAxMjA6XG4gICAgICAgICAgICBjYXNlIDEyODpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwidGFnTGVuZ3RoOiBNdXN0IGJlIG9uZSBvZiAzMiwgNjQsIDk2LCAxMDQsIDExMiwgMTIwIG9yIDEyOFwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzS3dQcm92aWRlciBleHRlbmRzIEFlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBRVMtS1dcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbn1cblxuY2xhc3MgRGVzUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZW5jcnlwdFwiLCBcImRlY3J5cHRcIiwgXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgaWYgKHRoaXMuaXZTaXplKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaXZcIik7XG4gICAgICAgICAgICBpZiAoIShhbGdvcml0aG0uaXYgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcoYWxnb3JpdGhtLml2KSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXY6IElzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxnb3JpdGhtLml2LmJ5dGVMZW5ndGggIT09IHRoaXMuaXZTaXplKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaXY6IE11c3QgaGF2ZSBsZW5ndGggJHt0aGlzLml2U2l6ZX0gYnl0ZXNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibGVuZ3RoXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5sZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBvZiB0eXBlIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLmxlbmd0aCAhPT0gdGhpcy5rZXlTaXplQml0cykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKGBhbGdvcml0aG0ubGVuZ3RoOiBNdXN0IGJlICR7dGhpcy5rZXlTaXplQml0c31gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0Rlcml2ZWRLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pO1xuICAgIH1cbn1cblxuY2xhc3MgUnNhUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiXTtcbiAgICB9XG4gICAgY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInB1YmxpY0V4cG9uZW50XCIpO1xuICAgICAgICBpZiAoIShhbGdvcml0aG0ucHVibGljRXhwb25lbnQgJiYgYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50IGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJwdWJsaWNFeHBvbmVudDogTWlzc2luZyBvciBub3QgYSBVaW50OEFycmF5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHB1YmxpY0V4cG9uZW50ID0gQ29udmVydC5Ub0Jhc2U2NChhbGdvcml0aG0ucHVibGljRXhwb25lbnQpO1xuICAgICAgICBpZiAoIShwdWJsaWNFeHBvbmVudCA9PT0gXCJBdz09XCIgfHwgcHVibGljRXhwb25lbnQgPT09IFwiQVFBQlwiKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInB1YmxpY0V4cG9uZW50OiBNdXN0IGJlIFszXSBvciBbMSwwLDFdXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJtb2R1bHVzTGVuZ3RoXCIpO1xuICAgICAgICBpZiAoYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggJSA4XG4gICAgICAgICAgICB8fCBhbGdvcml0aG0ubW9kdWx1c0xlbmd0aCA8IDI1NlxuICAgICAgICAgICAgfHwgYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPiAxNjM4NCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBtb2R1bHVzIGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOCBiaXRzIGFuZCA+PSAyNTYgYW5kIDw9IDE2Mzg0XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrSW1wb3J0UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgIH1cbn1cblxuY2xhc3MgUnNhU3NhUHJvdmlkZXIgZXh0ZW5kcyBSc2FQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUlNBU1NBLVBLQ1MxLXYxXzVcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJzaWduXCJdLFxuICAgICAgICAgICAgcHVibGljS2V5OiBbXCJ2ZXJpZnlcIl0sXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5jbGFzcyBSc2FQc3NQcm92aWRlciBleHRlbmRzIFJzYVByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSU0EtUFNTXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wic2lnblwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1widmVyaWZ5XCJdLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInNhbHRMZW5ndGhcIik7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLnNhbHRMZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJzYWx0TGVuZ3RoOiBJcyBub3QgYSBOdW1iZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5zYWx0TGVuZ3RoIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzYWx0TGVuZ3RoOiBNdXN0IGJlIHBvc2l0aXZlIG51bWJlclwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgUnNhT2FlcFByb3ZpZGVyIGV4dGVuZHMgUnNhUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlJTQS1PQUVQXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wiZGVjcnlwdFwiLCBcInVud3JhcEtleVwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1wiZW5jcnlwdFwiLCBcIndyYXBLZXlcIl0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICBpZiAoYWxnb3JpdGhtLmxhYmVsXG4gICAgICAgICAgICAmJiAhKGFsZ29yaXRobS5sYWJlbCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhhbGdvcml0aG0ubGFiZWwpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxhYmVsOiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBFbGxpcHRpY1Byb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJuYW1lZEN1cnZlXCIpO1xuICAgICAgICB0aGlzLmNoZWNrTmFtZWRDdXJ2ZShhbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgfVxuICAgIGNoZWNrTmFtZWRDdXJ2ZShuYW1lZEN1cnZlKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLm5hbWVkQ3VydmVzKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS50b0xvd2VyQ2FzZSgpID09PSBuYW1lZEN1cnZlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKGBuYW1lZEN1cnZlOiBNdXN0IGJlIG9uZSBvZiAke3RoaXMubmFtZWRDdXJ2ZXMuam9pbihcIiwgXCIpfWApO1xuICAgIH1cbn1cblxuY2xhc3MgRWNkc2FQcm92aWRlciBleHRlbmRzIEVsbGlwdGljUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkVDRFNBXCI7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiXTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJzaWduXCJdLFxuICAgICAgICAgICAgcHVibGljS2V5OiBbXCJ2ZXJpZnlcIl0sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubmFtZWRDdXJ2ZXMgPSBbXCJQLTI1NlwiLCBcIlAtMzg0XCIsIFwiUC01MjFcIiwgXCJLLTI1NlwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJoYXNoXCIpO1xuICAgICAgICB0aGlzLmNoZWNrSGFzaEFsZ29yaXRobShhbGdvcml0aG0uaGFzaCwgdGhpcy5oYXNoQWxnb3JpdGhtcyk7XG4gICAgfVxufVxuXG5jb25zdCBLRVlfVFlQRVMgPSBbXCJzZWNyZXRcIiwgXCJwcml2YXRlXCIsIFwicHVibGljXCJdO1xuY2xhc3MgQ3J5cHRvS2V5IHtcbiAgICBzdGF0aWMgY3JlYXRlKGFsZ29yaXRobSwgdHlwZSwgZXh0cmFjdGFibGUsIHVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgdGhpcygpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBrZXkudHlwZSA9IHR5cGU7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0gdXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgaXNLZXlUeXBlKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEtFWV9UWVBFUy5pbmRleE9mKGRhdGEpICE9PSAtMTtcbiAgICB9XG4gICAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgICAgICByZXR1cm4gXCJDcnlwdG9LZXlcIjtcbiAgICB9XG59XG5cbmNsYXNzIEVjZGhQcm92aWRlciBleHRlbmRzIEVsbGlwdGljUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkVDREhcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJkZXJpdmVCaXRzXCIsIFwiZGVyaXZlS2V5XCJdLFxuICAgICAgICAgICAgcHVibGljS2V5OiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5uYW1lZEN1cnZlcyA9IFtcIlAtMjU2XCIsIFwiUC0zODRcIiwgXCJQLTUyMVwiLCBcIkstMjU2XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInB1YmxpY1wiKTtcbiAgICAgICAgaWYgKCEoYWxnb3JpdGhtLnB1YmxpYyBpbnN0YW5jZW9mIENyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJwdWJsaWM6IElzIG5vdCBhIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLnB1YmxpYy50eXBlICE9PSBcInB1YmxpY1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3BlcmF0aW9uRXJyb3IoXCJwdWJsaWM6IElzIG5vdCBhIHB1YmxpYyBrZXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5wdWJsaWMuYWxnb3JpdGhtLm5hbWUgIT09IHRoaXMubmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKGBwdWJsaWM6IElzIG5vdCAke3RoaXMubmFtZX0ga2V5YCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEVjZGhFc1Byb3ZpZGVyIGV4dGVuZHMgRWNkaFByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFQ0RILUVTXCI7XG4gICAgICAgIHRoaXMubmFtZWRDdXJ2ZXMgPSBbXCJYMjU1MTlcIiwgXCJYNDQ4XCJdO1xuICAgIH1cbn1cblxuY2xhc3MgRWREc2FQcm92aWRlciBleHRlbmRzIEVsbGlwdGljUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkVkRFNBXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wic2lnblwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1widmVyaWZ5XCJdLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm5hbWVkQ3VydmVzID0gW1wiRWQyNTUxOVwiLCBcIkVkNDQ4XCJdO1xuICAgIH1cbn1cblxubGV0IE9iamVjdElkZW50aWZpZXIgPSBjbGFzcyBPYmplY3RJZGVudGlmaWVyIHtcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9iamVjdElkZW50aWZpZXIgfSlcbl0sIE9iamVjdElkZW50aWZpZXIucHJvdG90eXBlLCBcInZhbHVlXCIsIHZvaWQgMCk7XG5PYmplY3RJZGVudGlmaWVyID0gX19kZWNvcmF0ZShbXG4gICAgQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5DaG9pY2UgfSlcbl0sIE9iamVjdElkZW50aWZpZXIpO1xuXG5jbGFzcyBBbGdvcml0aG1JZGVudGlmaWVyIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBwYXJhbXMpO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3Aoe1xuICAgICAgICB0eXBlOiBBc25Qcm9wVHlwZXMuT2JqZWN0SWRlbnRpZmllcixcbiAgICB9KVxuXSwgQWxnb3JpdGhtSWRlbnRpZmllci5wcm90b3R5cGUsIFwiYWxnb3JpdGhtXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHtcbiAgICAgICAgdHlwZTogQXNuUHJvcFR5cGVzLkFueSxcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgfSlcbl0sIEFsZ29yaXRobUlkZW50aWZpZXIucHJvdG90eXBlLCBcInBhcmFtZXRlcnNcIiwgdm9pZCAwKTtcblxuY2xhc3MgUHJpdmF0ZUtleUluZm8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZlcnNpb24gPSAwO1xuICAgICAgICB0aGlzLnByaXZhdGVLZXlBbGdvcml0aG0gPSBuZXcgQWxnb3JpdGhtSWRlbnRpZmllcigpO1xuICAgICAgICB0aGlzLnByaXZhdGVLZXkgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyIH0pXG5dLCBQcml2YXRlS2V5SW5mby5wcm90b3R5cGUsIFwidmVyc2lvblwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFsZ29yaXRobUlkZW50aWZpZXIgfSlcbl0sIFByaXZhdGVLZXlJbmZvLnByb3RvdHlwZSwgXCJwcml2YXRlS2V5QWxnb3JpdGhtXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9jdGV0U3RyaW5nIH0pXG5dLCBQcml2YXRlS2V5SW5mby5wcm90b3R5cGUsIFwicHJpdmF0ZUtleVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5BbnksIG9wdGlvbmFsOiB0cnVlIH0pXG5dLCBQcml2YXRlS2V5SW5mby5wcm90b3R5cGUsIFwiYXR0cmlidXRlc1wiLCB2b2lkIDApO1xuXG5jbGFzcyBQdWJsaWNLZXlJbmZvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wdWJsaWNLZXlBbGdvcml0aG0gPSBuZXcgQWxnb3JpdGhtSWRlbnRpZmllcigpO1xuICAgICAgICB0aGlzLnB1YmxpY0tleSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQWxnb3JpdGhtSWRlbnRpZmllciB9KVxuXSwgUHVibGljS2V5SW5mby5wcm90b3R5cGUsIFwicHVibGljS2V5QWxnb3JpdGhtXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkJpdFN0cmluZyB9KVxuXSwgUHVibGljS2V5SW5mby5wcm90b3R5cGUsIFwicHVibGljS2V5XCIsIHZvaWQgMCk7XG5cbmNvbnN0IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciA9IHtcbiAgICBmcm9tSlNPTjogKHZhbHVlKSA9PiBDb252ZXJ0LkZyb21CYXNlNjRVcmwodmFsdWUpLFxuICAgIHRvSlNPTjogKHZhbHVlKSA9PiBDb252ZXJ0LlRvQmFzZTY0VXJsKG5ldyBVaW50OEFycmF5KHZhbHVlKSksXG59O1xuXG5jb25zdCBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlSGV4ID0gdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleDtcbiAgICAgICAgcmV0dXJuICEobmV3IFVpbnQ4QXJyYXkodmFsdWVIZXgpWzBdKVxuICAgICAgICAgICAgPyB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4LnNsaWNlKDEpXG4gICAgICAgICAgICA6IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVIZXg7XG4gICAgfSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlSGV4ID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpWzBdID4gMTI3XG4gICAgICAgICAgICA/IGNvbWJpbmUobmV3IFVpbnQ4QXJyYXkoWzBdKS5idWZmZXIsIHZhbHVlKVxuICAgICAgICAgICAgOiB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIG5ldyBhc24xLkludGVnZXIoeyB2YWx1ZUhleCB9KTtcbiAgICB9LFxufTtcblxudmFyIGluZGV4JDMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIsXG4gIEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyXG59KTtcblxuY2xhc3MgUnNhUHJpdmF0ZUtleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IDA7XG4gICAgICAgIHRoaXMubW9kdWx1cyA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5wdWJsaWNFeHBvbmVudCA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5wcml2YXRlRXhwb25lbnQgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMucHJpbWUxID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLnByaW1lMiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5leHBvbmVudDEgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMuZXhwb25lbnQyID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLmNvZWZmaWNpZW50ID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJ2ZXJzaW9uXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJuXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJtb2R1bHVzXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJlXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwdWJsaWNFeHBvbmVudFwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZFwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwicHJpdmF0ZUV4cG9uZW50XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJwXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwcmltZTFcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcInFcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcInByaW1lMlwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZHBcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcImV4cG9uZW50MVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZHFcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcImV4cG9uZW50MlwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwicWlcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcImNvZWZmaWNpZW50XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkFueSwgb3B0aW9uYWw6IHRydWUgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcIm90aGVyUHJpbWVJbmZvc1wiLCB2b2lkIDApO1xuXG5jbGFzcyBSc2FQdWJsaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm1vZHVsdXMgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMucHVibGljRXhwb25lbnQgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiblwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHVibGljS2V5LnByb3RvdHlwZSwgXCJtb2R1bHVzXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJlXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQdWJsaWNLZXkucHJvdG90eXBlLCBcInB1YmxpY0V4cG9uZW50XCIsIHZvaWQgMCk7XG5cbmxldCBFY1B1YmxpY0tleSA9IGNsYXNzIEVjUHVibGljS2V5IHtcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGxldCBieXRlcyA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWUpO1xuICAgICAgICBpZiAoYnl0ZXNbMF0gIT09IDB4MDQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDcnlwdG9FcnJvcihcIldyb25nIEVDUG9pbnQuIEN1cnJlbnQgdmVyc2lvbiBzdXBwb3J0cyBvbmx5IFVuY29tcHJlc3NlZCAoMHgwNCkgcG9pbnRcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnl0ZXMgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlLnNsaWNlKDEpKTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGJ5dGVzLmxlbmd0aCAvIDI7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IDA7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICB4OiBDb252ZXJ0LlRvQmFzZTY0VXJsKGJ5dGVzLmJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIHNpemUpKSxcbiAgICAgICAgICAgIHk6IENvbnZlcnQuVG9CYXNlNjRVcmwoYnl0ZXMuYnVmZmVyLnNsaWNlKG9mZnNldCArIHNpemUsIG9mZnNldCArIHNpemUgKyBzaXplKSksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghKFwieFwiIGluIGpzb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ4OiBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKFwieVwiIGluIGpzb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ5OiBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHggPSBDb252ZXJ0LkZyb21CYXNlNjRVcmwoanNvbi54KTtcbiAgICAgICAgY29uc3QgeSA9IENvbnZlcnQuRnJvbUJhc2U2NFVybChqc29uLnkpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbWJpbmUobmV3IFVpbnQ4QXJyYXkoWzB4MDRdKS5idWZmZXIsIHgsIHkpO1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpLmJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuT2N0ZXRTdHJpbmcgfSlcbl0sIEVjUHVibGljS2V5LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuRWNQdWJsaWNLZXkgPSBfX2RlY29yYXRlKFtcbiAgICBBc25UeXBlKHsgdHlwZTogQXNuVHlwZVR5cGVzLkNob2ljZSB9KVxuXSwgRWNQdWJsaWNLZXkpO1xuXG5jbGFzcyBFY1ByaXZhdGVLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZlcnNpb24gPSAxO1xuICAgICAgICB0aGlzLnByaXZhdGVLZXkgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCEoXCJkXCIgaW4ganNvbikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImQ6IE1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHlcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcml2YXRlS2V5ID0gQ29udmVydC5Gcm9tQmFzZTY0VXJsKGpzb24uZCk7XG4gICAgICAgIGlmIChcInhcIiBpbiBqc29uKSB7XG4gICAgICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSBuZXcgRWNQdWJsaWNLZXkoKTtcbiAgICAgICAgICAgIHB1YmxpY0tleS5mcm9tSlNPTihqc29uKTtcbiAgICAgICAgICAgIGNvbnN0IGFzbiA9IEFzblNlcmlhbGl6ZXIudG9BU04ocHVibGljS2V5KTtcbiAgICAgICAgICAgIGlmIChcInZhbHVlSGV4XCIgaW4gYXNuLnZhbHVlQmxvY2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1YmxpY0tleSA9IGFzbi52YWx1ZUJsb2NrLnZhbHVlSGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGp3ayA9IHt9O1xuICAgICAgICBqd2suZCA9IENvbnZlcnQuVG9CYXNlNjRVcmwodGhpcy5wcml2YXRlS2V5KTtcbiAgICAgICAgaWYgKHRoaXMucHVibGljS2V5KSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGp3aywgbmV3IEVjUHVibGljS2V5KHRoaXMucHVibGljS2V5KS50b0pTT04oKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGp3aztcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckNvbnZlcnRlciB9KVxuXSwgRWNQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJ2ZXJzaW9uXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9jdGV0U3RyaW5nIH0pXG5dLCBFY1ByaXZhdGVLZXkucHJvdG90eXBlLCBcInByaXZhdGVLZXlcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyBjb250ZXh0OiAwLCB0eXBlOiBBc25Qcm9wVHlwZXMuQW55LCBvcHRpb25hbDogdHJ1ZSB9KVxuXSwgRWNQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwYXJhbWV0ZXJzXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgY29udGV4dDogMSwgdHlwZTogQXNuUHJvcFR5cGVzLkJpdFN0cmluZywgb3B0aW9uYWw6IHRydWUgfSlcbl0sIEVjUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwicHVibGljS2V5XCIsIHZvaWQgMCk7XG5cbmNvbnN0IEFzbkludGVnZXJXaXRob3V0UGFkZGluZ0NvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheSh2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4KTtcbiAgICAgICAgcmV0dXJuIChieXRlc1swXSA9PT0gMClcbiAgICAgICAgICAgID8gYnl0ZXMuYnVmZmVyLnNsaWNlKDEpXG4gICAgICAgICAgICA6IGJ5dGVzLmJ1ZmZlcjtcbiAgICB9LFxuICAgIHRvQVNOOiAodmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheSh2YWx1ZSk7XG4gICAgICAgIGlmIChieXRlc1swXSA+IDEyNykge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBuZXcgVWludDhBcnJheShieXRlcy5sZW5ndGggKyAxKTtcbiAgICAgICAgICAgIG5ld1ZhbHVlLnNldChieXRlcywgMSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGFzbjEuSW50ZWdlcih7IHZhbHVlSGV4OiBuZXdWYWx1ZS5idWZmZXIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBhc24xLkludGVnZXIoeyB2YWx1ZUhleDogdmFsdWUgfSk7XG4gICAgfSxcbn07XG5cbnZhciBpbmRleCQyID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIEFzbkludGVnZXJXaXRob3V0UGFkZGluZ0NvbnZlcnRlcjogQXNuSW50ZWdlcldpdGhvdXRQYWRkaW5nQ29udmVydGVyXG59KTtcblxuY2xhc3MgRWNVdGlscyB7XG4gICAgc3RhdGljIGRlY29kZVBvaW50KGRhdGEsIHBvaW50U2l6ZSkge1xuICAgICAgICBjb25zdCB2aWV3ID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShkYXRhKTtcbiAgICAgICAgaWYgKCh2aWV3Lmxlbmd0aCA9PT0gMCkgfHwgKHZpZXdbMF0gIT09IDQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IHVuY29tcHJlc3NlZCBwb2ludCBmb3JtYXQgc3VwcG9ydGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG4gPSAodmlldy5sZW5ndGggLSAxKSAvIDI7XG4gICAgICAgIGlmIChuICE9PSAoTWF0aC5jZWlsKHBvaW50U2l6ZSAvIDgpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG9pbnQgZG9lcyBub3QgbWF0Y2ggZmllbGQgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4YiA9IHZpZXcuc2xpY2UoMSwgbiArIDEpO1xuICAgICAgICBjb25zdCB5YiA9IHZpZXcuc2xpY2UobiArIDEsIG4gKyAxICsgbik7XG4gICAgICAgIHJldHVybiB7IHg6IHhiLCB5OiB5YiB9O1xuICAgIH1cbiAgICBzdGF0aWMgZW5jb2RlUG9pbnQocG9pbnQsIHBvaW50U2l6ZSkge1xuICAgICAgICBjb25zdCBzaXplID0gTWF0aC5jZWlsKHBvaW50U2l6ZSAvIDgpO1xuICAgICAgICBpZiAocG9pbnQueC5ieXRlTGVuZ3RoICE9PSBzaXplIHx8IHBvaW50LnkuYnl0ZUxlbmd0aCAhPT0gc2l6ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWCxZIGNvb3JkaW5hdGVzIGRvbid0IG1hdGNoIHBvaW50IHNpemUgY3JpdGVyaWFcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeCA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkocG9pbnQueCk7XG4gICAgICAgIGNvbnN0IHkgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHBvaW50LnkpO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShzaXplICogMiArIDEpO1xuICAgICAgICByZXNbMF0gPSA0O1xuICAgICAgICByZXMuc2V0KHgsIDEpO1xuICAgICAgICByZXMuc2V0KHksIHNpemUgKyAxKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGdldFNpemUocG9pbnRTaXplKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwocG9pbnRTaXplIC8gOCk7XG4gICAgfVxuICAgIHN0YXRpYyBlbmNvZGVTaWduYXR1cmUoc2lnbmF0dXJlLCBwb2ludFNpemUpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuZ2V0U2l6ZShwb2ludFNpemUpO1xuICAgICAgICBjb25zdCByID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShzaWduYXR1cmUucik7XG4gICAgICAgIGNvbnN0IHMgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHNpZ25hdHVyZS5zKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSAqIDIpO1xuICAgICAgICByZXMuc2V0KHRoaXMucGFkU3RhcnQociwgc2l6ZSkpO1xuICAgICAgICByZXMuc2V0KHRoaXMucGFkU3RhcnQocywgc2l6ZSksIHNpemUpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgZGVjb2RlU2lnbmF0dXJlKGRhdGEsIHBvaW50U2l6ZSkge1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5nZXRTaXplKHBvaW50U2l6ZSk7XG4gICAgICAgIGNvbnN0IHZpZXcgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGRhdGEpO1xuICAgICAgICBpZiAodmlldy5sZW5ndGggIT09IChzaXplICogMikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluY29ycmVjdCBzaXplIG9mIHRoZSBzaWduYXR1cmVcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgciA9IHZpZXcuc2xpY2UoMCwgc2l6ZSk7XG4gICAgICAgIGNvbnN0IHMgPSB2aWV3LnNsaWNlKHNpemUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcjogdGhpcy50cmltU3RhcnQociksXG4gICAgICAgICAgICBzOiB0aGlzLnRyaW1TdGFydChzKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIHRyaW1TdGFydChkYXRhKSB7XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgd2hpbGUgKChpIDwgZGF0YS5sZW5ndGggLSAxKSAmJiAoZGF0YVtpXSA9PT0gMCkpIHtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGEuc2xpY2UoaSwgZGF0YS5sZW5ndGgpO1xuICAgIH1cbiAgICBzdGF0aWMgcGFkU3RhcnQoZGF0YSwgc2l6ZSkge1xuICAgICAgICBpZiAoc2l6ZSA9PT0gZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHNpemUpO1xuICAgICAgICByZXMuc2V0KGRhdGEsIHNpemUgLSBkYXRhLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufVxuXG5jbGFzcyBFY0RzYVNpZ25hdHVyZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuciA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5zID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbVdlYkNyeXB0b1NpZ25hdHVyZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBwb2ludFNpemUgPSB2YWx1ZS5ieXRlTGVuZ3RoIC8gMjtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBFY1V0aWxzLmRlY29kZVNpZ25hdHVyZSh2YWx1ZSwgcG9pbnRTaXplICogOCk7XG4gICAgICAgIGNvbnN0IGVjU2lnbmF0dXJlID0gbmV3IEVjRHNhU2lnbmF0dXJlKCk7XG4gICAgICAgIGVjU2lnbmF0dXJlLnIgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihwb2ludC5yKTtcbiAgICAgICAgZWNTaWduYXR1cmUucyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHBvaW50LnMpO1xuICAgICAgICByZXR1cm4gZWNTaWduYXR1cmU7XG4gICAgfVxuICAgIHRvV2ViQ3J5cHRvU2lnbmF0dXJlKHBvaW50U2l6ZSkge1xuICAgICAgICBwb2ludFNpemUgIT09IG51bGwgJiYgcG9pbnRTaXplICE9PSB2b2lkIDAgPyBwb2ludFNpemUgOiAocG9pbnRTaXplID0gTWF0aC5tYXgodGhpcy5yLmJ5dGVMZW5ndGgsIHRoaXMucy5ieXRlTGVuZ3RoKSAqIDgpO1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBFY1V0aWxzLmVuY29kZVNpZ25hdHVyZSh0aGlzLCBwb2ludFNpemUpO1xuICAgICAgICByZXR1cm4gc2lnbmF0dXJlLmJ1ZmZlcjtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlcldpdGhvdXRQYWRkaW5nQ29udmVydGVyIH0pXG5dLCBFY0RzYVNpZ25hdHVyZS5wcm90b3R5cGUsIFwiclwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJXaXRob3V0UGFkZGluZ0NvbnZlcnRlciB9KVxuXSwgRWNEc2FTaWduYXR1cmUucHJvdG90eXBlLCBcInNcIiwgdm9pZCAwKTtcblxuY2xhc3MgT25lQXN5bW1ldHJpY0tleSBleHRlbmRzIFByaXZhdGVLZXlJbmZvIHtcbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyBjb250ZXh0OiAxLCBpbXBsaWNpdDogdHJ1ZSwgdHlwZTogQXNuUHJvcFR5cGVzLkJpdFN0cmluZywgb3B0aW9uYWw6IHRydWUgfSlcbl0sIE9uZUFzeW1tZXRyaWNLZXkucHJvdG90eXBlLCBcInB1YmxpY0tleVwiLCB2b2lkIDApO1xuXG5sZXQgRWRQcml2YXRlS2V5ID0gY2xhc3MgRWRQcml2YXRlS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBpZiAoIWpzb24uZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZDogTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gQ29udmVydC5Gcm9tQmFzZTY0VXJsKGpzb24uZCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGp3ayA9IHtcbiAgICAgICAgICAgIGQ6IENvbnZlcnQuVG9CYXNlNjRVcmwodGhpcy52YWx1ZSksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBqd2s7XG4gICAgfVxufTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuT2N0ZXRTdHJpbmcgfSlcbl0sIEVkUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwidmFsdWVcIiwgdm9pZCAwKTtcbkVkUHJpdmF0ZUtleSA9IF9fZGVjb3JhdGUoW1xuICAgIEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuQ2hvaWNlIH0pXG5dLCBFZFByaXZhdGVLZXkpO1xuXG5sZXQgRWRQdWJsaWNLZXkgPSBjbGFzcyBFZFB1YmxpY0tleSB7XG4gICAgY29uc3RydWN0b3IodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAgeDogQ29udmVydC5Ub0Jhc2U2NFVybCh0aGlzLnZhbHVlKSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGpzb247XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCEoXCJ4XCIgaW4ganNvbikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIng6IE1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHlcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IENvbnZlcnQuRnJvbUJhc2U2NFVybChqc29uLngpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59O1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5CaXRTdHJpbmcgfSlcbl0sIEVkUHVibGljS2V5LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuRWRQdWJsaWNLZXkgPSBfX2RlY29yYXRlKFtcbiAgICBBc25UeXBlKHsgdHlwZTogQXNuVHlwZVR5cGVzLkNob2ljZSB9KVxuXSwgRWRQdWJsaWNLZXkpO1xuXG5sZXQgQ3VydmVQcml2YXRlS2V5ID0gY2xhc3MgQ3VydmVQcml2YXRlS2V5IHtcbn07XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9jdGV0U3RyaW5nIH0pLFxuICAgIEpzb25Qcm9wKHsgdHlwZTogSnNvblByb3BUeXBlcy5TdHJpbmcsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBDdXJ2ZVByaXZhdGVLZXkucHJvdG90eXBlLCBcImRcIiwgdm9pZCAwKTtcbkN1cnZlUHJpdmF0ZUtleSA9IF9fZGVjb3JhdGUoW1xuICAgIEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuQ2hvaWNlIH0pXG5dLCBDdXJ2ZVByaXZhdGVLZXkpO1xuXG5jb25zdCBpZFNlY3AyNTZyMSA9IFwiMS4yLjg0MC4xMDA0NS4zLjEuN1wiO1xuY29uc3QgaWRFbGxpcHRpY0N1cnZlID0gXCIxLjMuMTMyLjBcIjtcbmNvbnN0IGlkU2VjcDM4NHIxID0gYCR7aWRFbGxpcHRpY0N1cnZlfS4zNGA7XG5jb25zdCBpZFNlY3A1MjFyMSA9IGAke2lkRWxsaXB0aWNDdXJ2ZX0uMzVgO1xuY29uc3QgaWRTZWNwMjU2azEgPSBgJHtpZEVsbGlwdGljQ3VydmV9LjEwYDtcbmNvbnN0IGlkVmVyc2lvbk9uZSA9IFwiMS4zLjM2LjMuMy4yLjguMS4xXCI7XG5jb25zdCBpZEJyYWlucG9vbFAxNjByMSA9IGAke2lkVmVyc2lvbk9uZX0uMWA7XG5jb25zdCBpZEJyYWlucG9vbFAxNjB0MSA9IGAke2lkVmVyc2lvbk9uZX0uMmA7XG5jb25zdCBpZEJyYWlucG9vbFAxOTJyMSA9IGAke2lkVmVyc2lvbk9uZX0uM2A7XG5jb25zdCBpZEJyYWlucG9vbFAxOTJ0MSA9IGAke2lkVmVyc2lvbk9uZX0uNGA7XG5jb25zdCBpZEJyYWlucG9vbFAyMjRyMSA9IGAke2lkVmVyc2lvbk9uZX0uNWA7XG5jb25zdCBpZEJyYWlucG9vbFAyMjR0MSA9IGAke2lkVmVyc2lvbk9uZX0uNmA7XG5jb25zdCBpZEJyYWlucG9vbFAyNTZyMSA9IGAke2lkVmVyc2lvbk9uZX0uN2A7XG5jb25zdCBpZEJyYWlucG9vbFAyNTZ0MSA9IGAke2lkVmVyc2lvbk9uZX0uOGA7XG5jb25zdCBpZEJyYWlucG9vbFAzMjByMSA9IGAke2lkVmVyc2lvbk9uZX0uOWA7XG5jb25zdCBpZEJyYWlucG9vbFAzMjB0MSA9IGAke2lkVmVyc2lvbk9uZX0uMTBgO1xuY29uc3QgaWRCcmFpbnBvb2xQMzg0cjEgPSBgJHtpZFZlcnNpb25PbmV9LjExYDtcbmNvbnN0IGlkQnJhaW5wb29sUDM4NHQxID0gYCR7aWRWZXJzaW9uT25lfS4xMmA7XG5jb25zdCBpZEJyYWlucG9vbFA1MTJyMSA9IGAke2lkVmVyc2lvbk9uZX0uMTNgO1xuY29uc3QgaWRCcmFpbnBvb2xQNTEydDEgPSBgJHtpZFZlcnNpb25PbmV9LjE0YDtcbmNvbnN0IGlkWDI1NTE5ID0gXCIxLjMuMTAxLjExMFwiO1xuY29uc3QgaWRYNDQ4ID0gXCIxLjMuMTAxLjExMVwiO1xuY29uc3QgaWRFZDI1NTE5ID0gXCIxLjMuMTAxLjExMlwiO1xuY29uc3QgaWRFZDQ0OCA9IFwiMS4zLjEwMS4xMTNcIjtcblxudmFyIGluZGV4JDEgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgQWxnb3JpdGhtSWRlbnRpZmllcjogQWxnb3JpdGhtSWRlbnRpZmllcixcbiAgZ2V0IEN1cnZlUHJpdmF0ZUtleSAoKSB7IHJldHVybiBDdXJ2ZVByaXZhdGVLZXk7IH0sXG4gIEVjRHNhU2lnbmF0dXJlOiBFY0RzYVNpZ25hdHVyZSxcbiAgRWNQcml2YXRlS2V5OiBFY1ByaXZhdGVLZXksXG4gIGdldCBFY1B1YmxpY0tleSAoKSB7IHJldHVybiBFY1B1YmxpY0tleTsgfSxcbiAgZ2V0IEVkUHJpdmF0ZUtleSAoKSB7IHJldHVybiBFZFByaXZhdGVLZXk7IH0sXG4gIGdldCBFZFB1YmxpY0tleSAoKSB7IHJldHVybiBFZFB1YmxpY0tleTsgfSxcbiAgZ2V0IE9iamVjdElkZW50aWZpZXIgKCkgeyByZXR1cm4gT2JqZWN0SWRlbnRpZmllcjsgfSxcbiAgT25lQXN5bW1ldHJpY0tleTogT25lQXN5bW1ldHJpY0tleSxcbiAgUHJpdmF0ZUtleUluZm86IFByaXZhdGVLZXlJbmZvLFxuICBQdWJsaWNLZXlJbmZvOiBQdWJsaWNLZXlJbmZvLFxuICBSc2FQcml2YXRlS2V5OiBSc2FQcml2YXRlS2V5LFxuICBSc2FQdWJsaWNLZXk6IFJzYVB1YmxpY0tleSxcbiAgY29udmVydGVyczogaW5kZXgkMixcbiAgaWRCcmFpbnBvb2xQMTYwcjE6IGlkQnJhaW5wb29sUDE2MHIxLFxuICBpZEJyYWlucG9vbFAxNjB0MTogaWRCcmFpbnBvb2xQMTYwdDEsXG4gIGlkQnJhaW5wb29sUDE5MnIxOiBpZEJyYWlucG9vbFAxOTJyMSxcbiAgaWRCcmFpbnBvb2xQMTkydDE6IGlkQnJhaW5wb29sUDE5MnQxLFxuICBpZEJyYWlucG9vbFAyMjRyMTogaWRCcmFpbnBvb2xQMjI0cjEsXG4gIGlkQnJhaW5wb29sUDIyNHQxOiBpZEJyYWlucG9vbFAyMjR0MSxcbiAgaWRCcmFpbnBvb2xQMjU2cjE6IGlkQnJhaW5wb29sUDI1NnIxLFxuICBpZEJyYWlucG9vbFAyNTZ0MTogaWRCcmFpbnBvb2xQMjU2dDEsXG4gIGlkQnJhaW5wb29sUDMyMHIxOiBpZEJyYWlucG9vbFAzMjByMSxcbiAgaWRCcmFpbnBvb2xQMzIwdDE6IGlkQnJhaW5wb29sUDMyMHQxLFxuICBpZEJyYWlucG9vbFAzODRyMTogaWRCcmFpbnBvb2xQMzg0cjEsXG4gIGlkQnJhaW5wb29sUDM4NHQxOiBpZEJyYWlucG9vbFAzODR0MSxcbiAgaWRCcmFpbnBvb2xQNTEycjE6IGlkQnJhaW5wb29sUDUxMnIxLFxuICBpZEJyYWlucG9vbFA1MTJ0MTogaWRCcmFpbnBvb2xQNTEydDEsXG4gIGlkRWQyNTUxOTogaWRFZDI1NTE5LFxuICBpZEVkNDQ4OiBpZEVkNDQ4LFxuICBpZEVsbGlwdGljQ3VydmU6IGlkRWxsaXB0aWNDdXJ2ZSxcbiAgaWRTZWNwMjU2azE6IGlkU2VjcDI1NmsxLFxuICBpZFNlY3AyNTZyMTogaWRTZWNwMjU2cjEsXG4gIGlkU2VjcDM4NHIxOiBpZFNlY3AzODRyMSxcbiAgaWRTZWNwNTIxcjE6IGlkU2VjcDUyMXIxLFxuICBpZFZlcnNpb25PbmU6IGlkVmVyc2lvbk9uZSxcbiAgaWRYMjU1MTk6IGlkWDI1NTE5LFxuICBpZFg0NDg6IGlkWDQ0OFxufSk7XG5cbmNsYXNzIEVjQ3VydmVzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuICAgIHN0YXRpYyByZWdpc3RlcihpdGVtKSB7XG4gICAgICAgIGNvbnN0IG9pZCA9IG5ldyBPYmplY3RJZGVudGlmaWVyKCk7XG4gICAgICAgIG9pZC52YWx1ZSA9IGl0ZW0uaWQ7XG4gICAgICAgIGNvbnN0IHJhdyA9IEFzbkNvbnZlcnQuc2VyaWFsaXplKG9pZCk7XG4gICAgICAgIHRoaXMuaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgcmF3LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lcy5wdXNoKGl0ZW0ubmFtZSk7XG4gICAgfVxuICAgIHN0YXRpYyBmaW5kKG5hbWVPcklkKSB7XG4gICAgICAgIG5hbWVPcklkID0gbmFtZU9ySWQudG9VcHBlckNhc2UoKTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuaXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLm5hbWUudG9VcHBlckNhc2UoKSA9PT0gbmFtZU9ySWQgfHwgaXRlbS5pZC50b1VwcGVyQ2FzZSgpID09PSBuYW1lT3JJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0KG5hbWVPcklkKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZmluZChuYW1lT3JJZCk7XG4gICAgICAgIGlmICghcmVzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIEVDIG5hbWVkIGN1cnZlICcke25hbWVPcklkfSdgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn1cbkVjQ3VydmVzLml0ZW1zID0gW107XG5FY0N1cnZlcy5uYW1lcyA9IFtdO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcIlAtMjU2XCIsIGlkOiBpZFNlY3AyNTZyMSwgc2l6ZTogMjU2IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcIlAtMzg0XCIsIGlkOiBpZFNlY3AzODRyMSwgc2l6ZTogMzg0IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcIlAtNTIxXCIsIGlkOiBpZFNlY3A1MjFyMSwgc2l6ZTogNTIxIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcIkstMjU2XCIsIGlkOiBpZFNlY3AyNTZrMSwgc2l6ZTogMjU2IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAxNjByMVwiLCBpZDogaWRCcmFpbnBvb2xQMTYwcjEsIHNpemU6IDE2MCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMTYwdDFcIiwgaWQ6IGlkQnJhaW5wb29sUDE2MHQxLCBzaXplOiAxNjAgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDE5MnIxXCIsIGlkOiBpZEJyYWlucG9vbFAxOTJyMSwgc2l6ZTogMTkyIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAxOTJ0MVwiLCBpZDogaWRCcmFpbnBvb2xQMTkydDEsIHNpemU6IDE5MiB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMjI0cjFcIiwgaWQ6IGlkQnJhaW5wb29sUDIyNHIxLCBzaXplOiAyMjQgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDIyNHQxXCIsIGlkOiBpZEJyYWlucG9vbFAyMjR0MSwgc2l6ZTogMjI0IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAyNTZyMVwiLCBpZDogaWRCcmFpbnBvb2xQMjU2cjEsIHNpemU6IDI1NiB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMjU2dDFcIiwgaWQ6IGlkQnJhaW5wb29sUDI1NnQxLCBzaXplOiAyNTYgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDMyMHIxXCIsIGlkOiBpZEJyYWlucG9vbFAzMjByMSwgc2l6ZTogMzIwIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAzMjB0MVwiLCBpZDogaWRCcmFpbnBvb2xQMzIwdDEsIHNpemU6IDMyMCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMzg0cjFcIiwgaWQ6IGlkQnJhaW5wb29sUDM4NHIxLCBzaXplOiAzODQgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDM4NHQxXCIsIGlkOiBpZEJyYWlucG9vbFAzODR0MSwgc2l6ZTogMzg0IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFA1MTJyMVwiLCBpZDogaWRCcmFpbnBvb2xQNTEycjEsIHNpemU6IDUxMiB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQNTEydDFcIiwgaWQ6IGlkQnJhaW5wb29sUDUxMnQxLCBzaXplOiA1MTIgfSk7XG5cbmNsYXNzIEhtYWNQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJITUFDXCI7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiXTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJzaWduXCIsIFwidmVyaWZ5XCJdO1xuICAgIH1cbiAgICBnZXREZWZhdWx0TGVuZ3RoKGFsZ05hbWUpIHtcbiAgICAgICAgc3dpdGNoIChhbGdOYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMVwiOlxuICAgICAgICAgICAgY2FzZSBcIlNIQS0yNTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMzg0XCI6XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTUxMlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiA1MTI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhbGdvcml0aG0gbmFtZSAnJHthbGdOYW1lfSdgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgICAgICBpZiAoXCJsZW5ndGhcIiBpbiBhbGdvcml0aG0pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBhIE51bWJlclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbGdvcml0aG0ubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwibGVuZ3RoOiBOdW1iZXIgaXMgb3V0IG9mIHJhbmdlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrSW1wb3J0UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgIH1cbn1cblxuY2xhc3MgUGJrZGYyUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUEJLREYyXCI7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiXTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJkZXJpdmVCaXRzXCIsIFwiZGVyaXZlS2V5XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInNhbHRcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5zYWx0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGFsZ29yaXRobS5zYWx0KSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJzYWx0OiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJpdGVyYXRpb25zXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5pdGVyYXRpb25zICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXRlcmF0aW9uczogSXMgbm90IGEgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0uaXRlcmF0aW9ucyA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRpb25zOiBJcyBsZXNzIHRoYW4gMVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0ltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncykge1xuICAgICAgICBzdXBlci5jaGVja0ltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncyk7XG4gICAgICAgIGlmIChleHRyYWN0YWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiZXh0cmFjdGFibGU6IE11c3QgYmUgJ2ZhbHNlJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgSGtkZlByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkhLREZcIjtcbiAgICAgICAgdGhpcy5oYXNoQWxnb3JpdGhtcyA9IFtcIlNIQS0xXCIsIFwiU0hBLTI1NlwiLCBcIlNIQS0zODRcIiwgXCJTSEEtNTEyXCJdO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcImRlcml2ZUtleVwiLCBcImRlcml2ZUJpdHNcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwic2FsdFwiKTtcbiAgICAgICAgaWYgKCFCdWZmZXJTb3VyY2VDb252ZXJ0ZXIuaXNCdWZmZXJTb3VyY2UoYWxnb3JpdGhtLnNhbHQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwic2FsdDogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaW5mb1wiKTtcbiAgICAgICAgaWYgKCFCdWZmZXJTb3VyY2VDb252ZXJ0ZXIuaXNCdWZmZXJTb3VyY2UoYWxnb3JpdGhtLmluZm8pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwic2FsdDogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0ltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncykge1xuICAgICAgICBzdXBlci5jaGVja0ltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncyk7XG4gICAgICAgIGlmIChleHRyYWN0YWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiZXh0cmFjdGFibGU6IE11c3QgYmUgJ2ZhbHNlJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgU2hha2VQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICAgICAgdGhpcy5kZWZhdWx0TGVuZ3RoID0gMDtcbiAgICB9XG4gICAgZGlnZXN0KC4uLmFyZ3MpIHtcbiAgICAgICAgYXJnc1swXSA9IHsgbGVuZ3RoOiB0aGlzLmRlZmF1bHRMZW5ndGgsIC4uLmFyZ3NbMF0gfTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmRpZ2VzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tEaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrRGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGFsZ29yaXRobS5sZW5ndGggfHwgMDtcbiAgICAgICAgaWYgKHR5cGVvZiBsZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBhIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVuZ3RoIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogSXMgbmVnYXRpdmVcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFNoYWtlMTI4UHJvdmlkZXIgZXh0ZW5kcyBTaGFrZVByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJzaGFrZTEyOFwiO1xuICAgICAgICB0aGlzLmRlZmF1bHRMZW5ndGggPSAxNjtcbiAgICB9XG59XG5cbmNsYXNzIFNoYWtlMjU2UHJvdmlkZXIgZXh0ZW5kcyBTaGFrZVByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJzaGFrZTI1NlwiO1xuICAgICAgICB0aGlzLmRlZmF1bHRMZW5ndGggPSAzMjtcbiAgICB9XG59XG5cbmNsYXNzIENyeXB0byB7XG4gICAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgICAgICByZXR1cm4gXCJDcnlwdG9cIjtcbiAgICB9XG4gICAgcmFuZG9tVVVJRCgpIHtcbiAgICAgICAgY29uc3QgYiA9IHRoaXMuZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDE2KSk7XG4gICAgICAgIGJbNl0gPSAoYls2XSAmIDB4MGYpIHwgMHg0MDtcbiAgICAgICAgYls4XSA9IChiWzhdICYgMHgzZikgfCAweDgwO1xuICAgICAgICBjb25zdCB1dWlkID0gQ29udmVydC5Ub0hleChiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gYCR7dXVpZC5zdWJzdHJpbmcoMCwgOCl9LSR7dXVpZC5zdWJzdHJpbmcoOCwgMTIpfS0ke3V1aWQuc3Vic3RyaW5nKDEyLCAxNil9LSR7dXVpZC5zdWJzdHJpbmcoMTYsIDIwKX0tJHt1dWlkLnN1YnN0cmluZygyMCl9YDtcbiAgICB9XG59XG5cbmNsYXNzIFByb3ZpZGVyU3RvcmFnZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSB7fTtcbiAgICB9XG4gICAgZ2V0KGFsZ29yaXRobU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXNbYWxnb3JpdGhtTmFtZS50b0xvd2VyQ2FzZSgpXSB8fCBudWxsO1xuICAgIH1cbiAgICBzZXQocHJvdmlkZXIpIHtcbiAgICAgICAgdGhpcy5pdGVtc1twcm92aWRlci5uYW1lLnRvTG93ZXJDYXNlKCldID0gcHJvdmlkZXI7XG4gICAgfVxuICAgIHJlbW92ZUF0KGFsZ29yaXRobU5hbWUpIHtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldChhbGdvcml0aG1OYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBpZiAocHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLml0ZW1zW2FsZ29yaXRobU5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm92aWRlcjtcbiAgICB9XG4gICAgaGFzKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5nZXQobmFtZSk7XG4gICAgfVxuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLml0ZW1zKS5sZW5ndGg7XG4gICAgfVxuICAgIGdldCBhbGdvcml0aG1zKCkge1xuICAgICAgICBjb25zdCBhbGdvcml0aG1zID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuaXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5pdGVtc1trZXldO1xuICAgICAgICAgICAgYWxnb3JpdGhtcy5wdXNoKHByb3ZpZGVyLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbGdvcml0aG1zLnNvcnQoKTtcbiAgICB9XG59XG5cbmNsYXNzIFN1YnRsZUNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzID0gbmV3IFByb3ZpZGVyU3RvcmFnZSgpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNIYXNoZWRBbGdvcml0aG0oZGF0YSkge1xuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgICAgICAgJiYgdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCJcbiAgICAgICAgICAgICYmIFwibmFtZVwiIGluIGRhdGFcbiAgICAgICAgICAgICYmIFwiaGFzaFwiIGluIGRhdGFcbiAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgICAgICByZXR1cm4gXCJTdWJ0bGVDcnlwdG9cIjtcbiAgICB9XG4gICAgYXN5bmMgZGlnZXN0KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDIsIFwiZGlnZXN0XCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBkYXRhLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWREYXRhID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZGlnZXN0KHByZXBhcmVkQWxnb3JpdGhtLCBwcmVwYXJlZERhdGEsIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIGdlbmVyYXRlS2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDMsIFwiZ2VuZXJhdGVLZXlcIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmdlbmVyYXRlS2V5KHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgc2lnbiguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCAzLCBcInNpZ25cIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGtleSwgZGF0YSwgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWREYXRhID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuc2lnbih7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGtleSwgcHJlcGFyZWREYXRhLCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyB2ZXJpZnkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgNCwgXCJ2ZXJpZnlcIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXkpO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcmVwYXJlZERhdGEgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihkYXRhKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRTaWduYXR1cmUgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihzaWduYXR1cmUpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLnZlcmlmeSh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGtleSwgcHJlcGFyZWRTaWduYXR1cmUsIHByZXBhcmVkRGF0YSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgZW5jcnlwdCguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCAzLCBcImVuY3J5cHRcIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGtleSwgZGF0YSwgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWREYXRhID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZW5jcnlwdCh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGtleSwgcHJlcGFyZWREYXRhLCB7IGtleVVzYWdlOiB0cnVlIH0sIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIGRlY3J5cHQoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgMywgXCJkZWNyeXB0XCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBrZXksIGRhdGEsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGRhdGEpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmRlY3J5cHQoeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBrZXksIHByZXBhcmVkRGF0YSwgeyBrZXlVc2FnZTogdHJ1ZSB9LCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBkZXJpdmVCaXRzKC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDMsIFwiZGVyaXZlQml0c1wiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShiYXNlS2V5KTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5kZXJpdmVCaXRzKHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwgYmFzZUtleSwgbGVuZ3RoLCB7IGtleVVzYWdlOiB0cnVlIH0sIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIGRlcml2ZUtleSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCA1LCBcImRlcml2ZUtleVwiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwgYmFzZUtleSwgZGVyaXZlZEtleVR5cGUsIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICBjb25zdCBwcmVwYXJlZERlcml2ZWRLZXlUeXBlID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGRlcml2ZWRLZXlUeXBlKTtcbiAgICAgICAgY29uc3QgaW1wb3J0UHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkRGVyaXZlZEtleVR5cGUubmFtZSk7XG4gICAgICAgIGltcG9ydFByb3ZpZGVyLmNoZWNrRGVyaXZlZEtleVBhcmFtcyhwcmVwYXJlZERlcml2ZWRLZXlUeXBlKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBwcm92aWRlci5jaGVja0NyeXB0b0tleShiYXNlS2V5LCBcImRlcml2ZUtleVwiKTtcbiAgICAgICAgY29uc3QgZGVyaXZlZEJpdHMgPSBhd2FpdCBwcm92aWRlci5kZXJpdmVCaXRzKHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwgYmFzZUtleSwgZGVyaXZlZEtleVR5cGUubGVuZ3RoIHx8IDUxMiwgeyBrZXlVc2FnZTogZmFsc2UgfSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0S2V5KFwicmF3XCIsIGRlcml2ZWRCaXRzLCBkZXJpdmVkS2V5VHlwZSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4ucGFyYW1zKTtcbiAgICB9XG4gICAgYXN5bmMgZXhwb3J0S2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDIsIFwiZXhwb3J0S2V5XCIpO1xuICAgICAgICBjb25zdCBbZm9ybWF0LCBrZXksIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihrZXkuYWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5leHBvcnRLZXkoZm9ybWF0LCBrZXksIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIGltcG9ydEtleSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCA1LCBcImltcG9ydEtleVwiKTtcbiAgICAgICAgY29uc3QgW2Zvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBpZiAoW1wicGtjczhcIiwgXCJzcGtpXCIsIFwicmF3XCJdLmluZGV4T2YoZm9ybWF0KSAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGtleURhdGEpO1xuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyLmltcG9ydEtleShmb3JtYXQsIHByZXBhcmVkRGF0YSwgeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFrZXlEYXRhLmt0eSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXlEYXRhOiBJcyBub3QgSlNPTlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvdmlkZXIuaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXMpO1xuICAgIH1cbiAgICBhc3luYyB3cmFwS2V5KGZvcm1hdCwga2V5LCB3cmFwcGluZ0tleSwgd3JhcEFsZ29yaXRobSwgLi4uYXJncykge1xuICAgICAgICBsZXQga2V5RGF0YSA9IGF3YWl0IHRoaXMuZXhwb3J0S2V5KGZvcm1hdCwga2V5LCAuLi5hcmdzKTtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJqd2tcIikge1xuICAgICAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGtleURhdGEpO1xuICAgICAgICAgICAga2V5RGF0YSA9IENvbnZlcnQuRnJvbVV0ZjhTdHJpbmcoanNvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0od3JhcEFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGtleURhdGEpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIHJldHVybiBwcm92aWRlci5lbmNyeXB0KHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwgd3JhcHBpbmdLZXksIHByZXBhcmVkRGF0YSwgeyBrZXlVc2FnZTogZmFsc2UgfSwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIHVud3JhcEtleShmb3JtYXQsIHdyYXBwZWRLZXksIHVud3JhcHBpbmdLZXksIHVud3JhcEFsZ29yaXRobSwgdW53cmFwcGVkS2V5QWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKHVud3JhcEFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHdyYXBwZWRLZXkpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGxldCBrZXlEYXRhID0gYXdhaXQgcHJvdmlkZXIuZGVjcnlwdCh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIHVud3JhcHBpbmdLZXksIHByZXBhcmVkRGF0YSwgeyBrZXlVc2FnZTogZmFsc2UgfSwgLi4uYXJncyk7XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiandrXCIpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAga2V5RGF0YSA9IEpTT04ucGFyc2UoQ29udmVydC5Ub1V0ZjhTdHJpbmcoa2V5RGF0YSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoXCJ3cmFwcGVkS2V5OiBJcyBub3QgYSBKU09OXCIpO1xuICAgICAgICAgICAgICAgIGVycm9yLmludGVybmFsID0gZTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB1bndyYXBwZWRLZXlBbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBjaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIHNpemUsIG1ldGhvZE5hbWUpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgc2l6ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRmFpbGVkIHRvIGV4ZWN1dGUgJyR7bWV0aG9kTmFtZX0nIG9uICdTdWJ0bGVDcnlwdG8nOiAke3NpemV9IGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgJHthcmdzLmxlbmd0aH0gcHJlc2VudGApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGFsZ29yaXRobSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFN1YnRsZUNyeXB0by5pc0hhc2hlZEFsZ29yaXRobShhbGdvcml0aG0pKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHsgLi4uYWxnb3JpdGhtIH07XG4gICAgICAgICAgICBwcmVwYXJlZEFsZ29yaXRobS5oYXNoID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoKTtcbiAgICAgICAgICAgIHJldHVybiBwcmVwYXJlZEFsZ29yaXRobTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5hbGdvcml0aG0gfTtcbiAgICB9XG4gICAgZ2V0UHJvdmlkZXIobmFtZSkge1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMucHJvdmlkZXJzLmdldChuYW1lKTtcbiAgICAgICAgaWYgKCFwcm92aWRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFsZ29yaXRobUVycm9yKFwiVW5yZWNvZ25pemVkIG5hbWVcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3ZpZGVyO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluc3RhbmNlb2YgQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgS2V5IGlzIG5vdCBvZiB0eXBlICdDcnlwdG9LZXknYCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbnZhciBpbmRleCA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBjb252ZXJ0ZXJzOiBpbmRleCQzXG59KTtcblxuY29uc3QgUkVRVUlSRURfRklFTERTID0gW1wiY3J2XCIsIFwiZVwiLCBcImtcIiwgXCJrdHlcIiwgXCJuXCIsIFwieFwiLCBcInlcIl07XG5jbGFzcyBKd2tVdGlscyB7XG4gICAgc3RhdGljIGFzeW5jIHRodW1icHJpbnQoaGFzaCwgandrLCBjcnlwdG8pIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZm9ybWF0KGp3aywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBjcnlwdG8uc3VidGxlLmRpZ2VzdChoYXNoLCBDb252ZXJ0LkZyb21CaW5hcnkoSlNPTi5zdHJpbmdpZnkoZGF0YSkpKTtcbiAgICB9XG4gICAgc3RhdGljIGZvcm1hdChqd2ssIHJlbW92ZSA9IGZhbHNlKSB7XG4gICAgICAgIGxldCByZXMgPSBPYmplY3QuZW50cmllcyhqd2spO1xuICAgICAgICBpZiAocmVtb3ZlKSB7XG4gICAgICAgICAgICByZXMgPSByZXMuZmlsdGVyKG8gPT4gUkVRVUlSRURfRklFTERTLmluY2x1ZGVzKG9bMF0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXMgPSByZXMuc29ydCgoW2tleUFdLCBba2V5Ql0pID0+IGtleUEgPiBrZXlCID8gMSA6IGtleUEgPCBrZXlCID8gLTEgOiAwKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhyZXMpO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgQWVzQ2JjUHJvdmlkZXIsIEFlc0NtYWNQcm92aWRlciwgQWVzQ3RyUHJvdmlkZXIsIEFlc0VjYlByb3ZpZGVyLCBBZXNHY21Qcm92aWRlciwgQWVzS3dQcm92aWRlciwgQWVzUHJvdmlkZXIsIEFsZ29yaXRobUVycm9yLCBDcnlwdG8sIENyeXB0b0Vycm9yLCBDcnlwdG9LZXksIERlc1Byb3ZpZGVyLCBFY0N1cnZlcywgRWNVdGlscywgRWNkaEVzUHJvdmlkZXIsIEVjZGhQcm92aWRlciwgRWNkc2FQcm92aWRlciwgRWREc2FQcm92aWRlciwgRWxsaXB0aWNQcm92aWRlciwgSGtkZlByb3ZpZGVyLCBIbWFjUHJvdmlkZXIsIEp3a1V0aWxzLCBPcGVyYXRpb25FcnJvciwgUGJrZGYyUHJvdmlkZXIsIFBlbUNvbnZlcnRlciwgUHJvdmlkZXJDcnlwdG8sIFByb3ZpZGVyU3RvcmFnZSwgUmVxdWlyZWRQcm9wZXJ0eUVycm9yLCBSc2FPYWVwUHJvdmlkZXIsIFJzYVByb3ZpZGVyLCBSc2FQc3NQcm92aWRlciwgUnNhU3NhUHJvdmlkZXIsIFNoYWtlMTI4UHJvdmlkZXIsIFNoYWtlMjU2UHJvdmlkZXIsIFNoYWtlUHJvdmlkZXIsIFN1YnRsZUNyeXB0bywgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciwgaW5kZXgkMSBhcyBhc24xLCBpc0pXSywgaW5kZXggYXMganNvbiB9O1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbi8vIFN1cHBvcnQgZGVjb2RpbmcgVVJMLXNhZmUgYmFzZTY0IHN0cmluZ3MsIGFzIE5vZGUuanMgZG9lcy5cbi8vIFNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1VSTF9hcHBsaWNhdGlvbnNcbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIGdldExlbnMgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyBUcmltIG9mZiBleHRyYSBieXRlcyBhZnRlciBwbGFjZWhvbGRlciBieXRlcyBhcmUgZm91bmRcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVhdGdhbW1pdC9iYXNlNjQtanMvaXNzdWVzLzQyXG4gIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCc9JylcbiAgaWYgKHZhbGlkTGVuID09PSAtMSkgdmFsaWRMZW4gPSBsZW5cblxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlblxuICAgID8gMFxuICAgIDogNCAtICh2YWxpZExlbiAlIDQpXG5cbiAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXVxufVxuXG4vLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiBfYnl0ZUxlbmd0aCAoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7XG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuXG4gIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpXG5cbiAgdmFyIGN1ckJ5dGUgPSAwXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICB2YXIgbGVuID0gcGxhY2VIb2xkZXJzTGVuID4gMFxuICAgID8gdmFsaWRMZW4gLSA0XG4gICAgOiB2YWxpZExlblxuXG4gIHZhciBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfFxuICAgICAgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID1cbiAgICAgICgodWludDhbaV0gPDwgMTYpICYgMHhGRjAwMDApICtcbiAgICAgICgodWludDhbaSArIDFdIDw8IDgpICYgMHhGRjAwKSArXG4gICAgICAodWludDhbaSArIDJdICYgMHhGRilcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIiwgIi8qISBpZWVlNzU0LiBCU0QtMy1DbGF1c2UgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovXG5leHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IChlICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIG0gPSBlICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIGUgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IG1MZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IChtICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKCh2YWx1ZSAqIGMpIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IGUgKyBlQmlhc1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSAwXG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDB4ZmYsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkge31cblxuICBlID0gKGUgPDwgbUxlbikgfCBtXG4gIGVMZW4gKz0gbUxlblxuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAweGZmLCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHt9XG5cbiAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4XG59XG4iLCAiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxudmFyIGN1c3RvbUluc3BlY3RTeW1ib2wgPVxuICAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sWydmb3InXSA9PT0gJ2Z1bmN0aW9uJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICA/IFN5bWJvbFsnZm9yJ10oJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICA6IG51bGxcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG52YXIgS19NQVhfTEVOR1RIID0gMHg3ZmZmZmZmZlxuZXhwb3J0cy5rTWF4TGVuZ3RoID0gS19NQVhfTEVOR1RIXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFByaW50IHdhcm5pbmcgYW5kIHJlY29tbWVuZCB1c2luZyBgYnVmZmVyYCB2NC54IHdoaWNoIGhhcyBhbiBPYmplY3RcbiAqICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIFdlIHJlcG9ydCB0aGF0IHRoZSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGlmIHRoZSBhcmUgbm90IHN1YmNsYXNzYWJsZVxuICogdXNpbmcgX19wcm90b19fLiBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YFxuICogKFNlZTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NDM4KS4gSUUgMTAgbGFja3Mgc3VwcG9ydFxuICogZm9yIF9fcHJvdG9fXyBhbmQgaGFzIGEgYnVnZ3kgdHlwZWQgYXJyYXkgaW1wbGVtZW50YXRpb24uXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gdHlwZWRBcnJheVN1cHBvcnQoKVxuXG5pZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gIGNvbnNvbGUuZXJyb3IoXG4gICAgJ1RoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSAnICtcbiAgICAnYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4nXG4gIClcbn1cblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICAvLyBDYW4gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBhdWdtZW50ZWQ/XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KDEpXG4gICAgdmFyIHByb3RvID0geyBmb286IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH0gfVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm90bywgVWludDhBcnJheS5wcm90b3R5cGUpXG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFyciwgcHJvdG8pXG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDJcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCAncGFyZW50Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHJldHVybiB0aGlzLmJ1ZmZlclxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSwgJ29mZnNldCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcykpIHJldHVybiB1bmRlZmluZWRcbiAgICByZXR1cm4gdGhpcy5ieXRlT2Zmc2V0XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAobGVuZ3RoKSB7XG4gIGlmIChsZW5ndGggPiBLX01BWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyArIGxlbmd0aCArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKVxuICB9XG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihidWYsIEJ1ZmZlci5wcm90b3R5cGUpXG4gIHJldHVybiBidWZcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIC8vIENvbW1vbiBjYXNlLlxuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nT3JPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZShhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20oYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG5mdW5jdGlvbiBmcm9tICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpXG4gIH1cblxuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHZhbHVlKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlWaWV3KHZhbHVlKVxuICB9XG5cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksICcgK1xuICAgICAgJ29yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHZhbHVlKVxuICAgIClcbiAgfVxuXG4gIGlmIChpc0luc3RhbmNlKHZhbHVlLCBBcnJheUJ1ZmZlcikgfHxcbiAgICAgICh2YWx1ZSAmJiBpc0luc3RhbmNlKHZhbHVlLmJ1ZmZlciwgQXJyYXlCdWZmZXIpKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAoaXNJbnN0YW5jZSh2YWx1ZSwgU2hhcmVkQXJyYXlCdWZmZXIpIHx8XG4gICAgICAodmFsdWUgJiYgaXNJbnN0YW5jZSh2YWx1ZS5idWZmZXIsIFNoYXJlZEFycmF5QnVmZmVyKSkpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJ1xuICAgIClcbiAgfVxuXG4gIHZhciB2YWx1ZU9mID0gdmFsdWUudmFsdWVPZiAmJiB2YWx1ZS52YWx1ZU9mKClcbiAgaWYgKHZhbHVlT2YgIT0gbnVsbCAmJiB2YWx1ZU9mICE9PSB2YWx1ZSkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZU9mLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICB2YXIgYiA9IGZyb21PYmplY3QodmFsdWUpXG4gIGlmIChiKSByZXR1cm4gYlxuXG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9QcmltaXRpdmUgIT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oXG4gICAgICB2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdKCdzdHJpbmcnKSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoXG4gICAgKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAnVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgJyArXG4gICAgJ29yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHZhbHVlKVxuICApXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gTm90ZTogQ2hhbmdlIHByb3RvdHlwZSAqYWZ0ZXIqIEJ1ZmZlci5mcm9tIGlzIGRlZmluZWQgdG8gd29ya2Fyb3VuZCBDaHJvbWUgYnVnOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC8xNDhcbk9iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIucHJvdG90eXBlLCBVaW50OEFycmF5LnByb3RvdHlwZSlcbk9iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIsIFVpbnQ4QXJyYXkpXG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyBzaXplICsgJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWxsb2MgKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSlcbiAgfVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT25seSBwYXkgYXR0ZW50aW9uIHRvIGVuY29kaW5nIGlmIGl0J3MgYSBzdHJpbmcuIFRoaXNcbiAgICAvLyBwcmV2ZW50cyBhY2NpZGVudGFsbHkgc2VuZGluZyBpbiBhIG51bWJlciB0aGF0IHdvdWxkXG4gICAgLy8gYmUgaW50ZXJwcmV0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlIChzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIEJ1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIFNsb3dCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aClcblxuICB2YXIgYWN0dWFsID0gYnVmLndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICBidWYgPSBidWYuc2xpY2UoMCwgYWN0dWFsKVxuICB9XG5cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlIChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgYnVmW2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheVZpZXcgKGFycmF5Vmlldykge1xuICBpZiAoaXNJbnN0YW5jZShhcnJheVZpZXcsIFVpbnQ4QXJyYXkpKSB7XG4gICAgdmFyIGNvcHkgPSBuZXcgVWludDhBcnJheShhcnJheVZpZXcpXG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcihjb3B5LmJ1ZmZlciwgY29weS5ieXRlT2Zmc2V0LCBjb3B5LmJ5dGVMZW5ndGgpXG4gIH1cbiAgcmV0dXJuIGZyb21BcnJheUxpa2UoYXJyYXlWaWV3KVxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wib2Zmc2V0XCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJsZW5ndGhcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgdmFyIGJ1ZlxuICBpZiAoYnl0ZU9mZnNldCA9PT0gdW5kZWZpbmVkICYmIGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1ZiwgQnVmZmVyLnByb3RvdHlwZSlcblxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3QgKG9iaikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG9iaikpIHtcbiAgICB2YXIgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDBcbiAgICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbilcblxuICAgIGlmIChidWYubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYnVmXG4gICAgfVxuXG4gICAgb2JqLmNvcHkoYnVmLCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIGJ1ZlxuICB9XG5cbiAgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgbnVtYmVySXNOYU4ob2JqLmxlbmd0aCkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIoMClcbiAgICB9XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqKVxuICB9XG5cbiAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBBcnJheS5pc0FycmF5KG9iai5kYXRhKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iai5kYXRhKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBLX01BWF9MRU5HVEhgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIEtfTUFYX0xFTkdUSC50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuIGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlciA9PT0gdHJ1ZSAmJlxuICAgIGIgIT09IEJ1ZmZlci5wcm90b3R5cGUgLy8gc28gQnVmZmVyLmlzQnVmZmVyKEJ1ZmZlci5wcm90b3R5cGUpIHdpbGwgYmUgZmFsc2Vcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmIChpc0luc3RhbmNlKGEsIFVpbnQ4QXJyYXkpKSBhID0gQnVmZmVyLmZyb20oYSwgYS5vZmZzZXQsIGEuYnl0ZUxlbmd0aClcbiAgaWYgKGlzSW5zdGFuY2UoYiwgVWludDhBcnJheSkpIGIgPSBCdWZmZXIuZnJvbShiLCBiLm9mZnNldCwgYi5ieXRlTGVuZ3RoKVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJidWYxXCIsIFwiYnVmMlwiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5J1xuICAgIClcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmIChpc0luc3RhbmNlKGJ1ZiwgVWludDhBcnJheSkpIHtcbiAgICAgIGlmIChwb3MgKyBidWYubGVuZ3RoID4gYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICBCdWZmZXIuZnJvbShidWYpLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgYnVmLFxuICAgICAgICAgIHBvc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIH1cbiAgICBwb3MgKz0gYnVmLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aFxuICB9XG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBpc0luc3RhbmNlKHN0cmluZywgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gJyArXG4gICAgICAnUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHN0cmluZ1xuICAgIClcbiAgfVxuXG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBtdXN0TWF0Y2ggPSAoYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdID09PSB0cnVlKVxuICBpZiAoIW11c3RNYXRjaCAmJiBsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHtcbiAgICAgICAgICByZXR1cm4gbXVzdE1hdGNoID8gLTEgOiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICB9XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcmNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIChhbmQgdGhlIGBpcy1idWZmZXJgIG5wbSBwYWNrYWdlKVxuLy8gdG8gZGV0ZWN0IGEgQnVmZmVyIGluc3RhbmNlLiBJdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgYGluc3RhbmNlb2YgQnVmZmVyYFxuLy8gcmVsaWFibHkgaW4gYSBicm93c2VyaWZ5IGNvbnRleHQgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBkaWZmZXJlbnRcbi8vIGNvcGllcyBvZiB0aGUgJ2J1ZmZlcicgcGFja2FnZSBpbiB1c2UuIFRoaXMgbWV0aG9kIHdvcmtzIGV2ZW4gZm9yIEJ1ZmZlclxuLy8gaW5zdGFuY2VzIHRoYXQgd2VyZSBjcmVhdGVkIGZyb20gYW5vdGhlciBjb3B5IG9mIHRoZSBgYnVmZmVyYCBwYWNrYWdlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMTU0XG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICB2YXIgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAxKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW5ndGggPT09IDApIHJldHVybiAnJ1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCAwLCBsZW5ndGgpXG4gIHJldHVybiBzbG93VG9TdHJpbmcuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nID0gQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZ1xuXG5CdWZmZXIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIGlmICh0aGlzID09PSBiKSByZXR1cm4gdHJ1ZVxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYikgPT09IDBcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gIHZhciBzdHIgPSAnJ1xuICB2YXIgbWF4ID0gZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFU1xuICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLnJlcGxhY2UoLyguezJ9KS9nLCAnJDEgJykudHJpbSgpXG4gIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgcmV0dXJuICc8QnVmZmVyICcgKyBzdHIgKyAnPidcbn1cbmlmIChjdXN0b21JbnNwZWN0U3ltYm9sKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGVbY3VzdG9tSW5zcGVjdFN5bWJvbF0gPSBCdWZmZXIucHJvdG90eXBlLmluc3BlY3Rcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAodGFyZ2V0LCBzdGFydCwgZW5kLCB0aGlzU3RhcnQsIHRoaXNFbmQpIHtcbiAgaWYgKGlzSW5zdGFuY2UodGFyZ2V0LCBVaW50OEFycmF5KSkge1xuICAgIHRhcmdldCA9IEJ1ZmZlci5mcm9tKHRhcmdldCwgdGFyZ2V0Lm9mZnNldCwgdGFyZ2V0LmJ5dGVMZW5ndGgpXG4gIH1cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwidGFyZ2V0XCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gJyArXG4gICAgICAnUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB0YXJnZXQpXG4gICAgKVxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSB0YXJnZXQgPyB0YXJnZXQubGVuZ3RoIDogMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNTdGFydCA9IDBcbiAgfVxuICBpZiAodGhpc0VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc0VuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRhcmdldC5sZW5ndGggfHwgdGhpc1N0YXJ0IDwgMCB8fCB0aGlzRW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCkge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmIChzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMVxuICB9XG5cbiAgc3RhcnQgPj4+PSAwXG4gIGVuZCA+Pj49IDBcbiAgdGhpc1N0YXJ0ID4+Pj0gMFxuICB0aGlzRW5kID4+Pj0gMFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQpIHJldHVybiAwXG5cbiAgdmFyIHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0XG4gIHZhciB5ID0gZW5kIC0gc3RhcnRcbiAgdmFyIGxlbiA9IE1hdGgubWluKHgsIHkpXG5cbiAgdmFyIHRoaXNDb3B5ID0gdGhpcy5zbGljZSh0aGlzU3RhcnQsIHRoaXNFbmQpXG4gIHZhciB0YXJnZXRDb3B5ID0gdGFyZ2V0LnNsaWNlKHN0YXJ0LCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzQ29weVtpXSAhPT0gdGFyZ2V0Q29weVtpXSkge1xuICAgICAgeCA9IHRoaXNDb3B5W2ldXG4gICAgICB5ID0gdGFyZ2V0Q29weVtpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbi8vIEZpbmRzIGVpdGhlciB0aGUgZmlyc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0ID49IGBieXRlT2Zmc2V0YCxcbi8vIE9SIHRoZSBsYXN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA8PSBgYnl0ZU9mZnNldGAuXG4vL1xuLy8gQXJndW1lbnRzOlxuLy8gLSBidWZmZXIgLSBhIEJ1ZmZlciB0byBzZWFyY2hcbi8vIC0gdmFsIC0gYSBzdHJpbmcsIEJ1ZmZlciwgb3IgbnVtYmVyXG4vLyAtIGJ5dGVPZmZzZXQgLSBhbiBpbmRleCBpbnRvIGBidWZmZXJgOyB3aWxsIGJlIGNsYW1wZWQgdG8gYW4gaW50MzJcbi8vIC0gZW5jb2RpbmcgLSBhbiBvcHRpb25hbCBlbmNvZGluZywgcmVsZXZhbnQgaXMgdmFsIGlzIGEgc3RyaW5nXG4vLyAtIGRpciAtIHRydWUgZm9yIGluZGV4T2YsIGZhbHNlIGZvciBsYXN0SW5kZXhPZlxuZnVuY3Rpb24gYmlkaXJlY3Rpb25hbEluZGV4T2YgKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIC8vIEVtcHR5IGJ1ZmZlciBtZWFucyBubyBtYXRjaFxuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXRcbiAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gYnl0ZU9mZnNldFxuICAgIGJ5dGVPZmZzZXQgPSAwXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA+IDB4N2ZmZmZmZmYpIHtcbiAgICBieXRlT2Zmc2V0ID0gMHg3ZmZmZmZmZlxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAtMHg4MDAwMDAwMCkge1xuICAgIGJ5dGVPZmZzZXQgPSAtMHg4MDAwMDAwMFxuICB9XG4gIGJ5dGVPZmZzZXQgPSArYnl0ZU9mZnNldCAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAobnVtYmVySXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmICh0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbdmFsXSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlcicpXG59XG5cbmZ1bmN0aW9uIGFycmF5SW5kZXhPZiAoYXJyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgdmFyIGluZGV4U2l6ZSA9IDFcbiAgdmFyIGFyckxlbmd0aCA9IGFyci5sZW5ndGhcbiAgdmFyIHZhbExlbmd0aCA9IHZhbC5sZW5ndGhcblxuICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGVuY29kaW5nID09PSAndWNzMicgfHwgZW5jb2RpbmcgPT09ICd1Y3MtMicgfHxcbiAgICAgICAgZW5jb2RpbmcgPT09ICd1dGYxNmxlJyB8fCBlbmNvZGluZyA9PT0gJ3V0Zi0xNmxlJykge1xuICAgICAgaWYgKGFyci5sZW5ndGggPCAyIHx8IHZhbC5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiAtMVxuICAgICAgfVxuICAgICAgaW5kZXhTaXplID0gMlxuICAgICAgYXJyTGVuZ3RoIC89IDJcbiAgICAgIHZhbExlbmd0aCAvPSAyXG4gICAgICBieXRlT2Zmc2V0IC89IDJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkIChidWYsIGkpIHtcbiAgICBpZiAoaW5kZXhTaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gYnVmW2ldXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidWYucmVhZFVJbnQxNkJFKGkgKiBpbmRleFNpemUpXG4gICAgfVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGRpcikge1xuICAgIHZhciBmb3VuZEluZGV4ID0gLTFcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpIDwgYXJyTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWFkKGFyciwgaSkgPT09IHJlYWQodmFsLCBmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleCkpIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKSBmb3VuZEluZGV4ID0gaVxuICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWxMZW5ndGgpIHJldHVybiBmb3VuZEluZGV4ICogaW5kZXhTaXplXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpIGkgLT0gaSAtIGZvdW5kSW5kZXhcbiAgICAgICAgZm91bmRJbmRleCA9IC0xXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChieXRlT2Zmc2V0ICsgdmFsTGVuZ3RoID4gYXJyTGVuZ3RoKSBieXRlT2Zmc2V0ID0gYXJyTGVuZ3RoIC0gdmFsTGVuZ3RoXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBmb3VuZCA9IHRydWVcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHJlYWQoYXJyLCBpICsgaikgIT09IHJlYWQodmFsLCBqKSkge1xuICAgICAgICAgIGZvdW5kID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlKVxufVxuXG5mdW5jdGlvbiBoZXhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgdmFyIHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdHJMZW4gPSBzdHJpbmcubGVuZ3RoXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKG51bWJlcklzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggPj4+IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCdcbiAgICApXG4gIH1cblxuICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGxlbmd0aCA+IHJlbWFpbmluZykgbGVuZ3RoID0gcmVtYWluaW5nXG5cbiAgaWYgKChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICAvLyBXYXJuaW5nOiBtYXhMZW5ndGggbm90IHRha2VuIGludG8gYWNjb3VudCBpbiBiYXNlNjRXcml0ZVxuICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gYnVmLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGY4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG4gIHZhciByZXMgPSBbXVxuXG4gIHZhciBpID0gc3RhcnRcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICB2YXIgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgdmFyIGNvZGVQb2ludCA9IG51bGxcbiAgICB2YXIgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKVxuICAgICAgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKVxuICAgICAgICAgID8gM1xuICAgICAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpXG4gICAgICAgICAgICAgID8gMlxuICAgICAgICAgICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIHZhciBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbnZhciBNQVhfQVJHVU1FTlRTX0xFTkdUSCA9IDB4MTAwMFxuXG5mdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkgKGNvZGVQb2ludHMpIHtcbiAgdmFyIGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpIC8vIGF2b2lkIGV4dHJhIHNsaWNlKClcbiAgfVxuXG4gIC8vIERlY29kZSBpbiBjaHVua3MgdG8gYXZvaWQgXCJjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIi5cbiAgdmFyIHJlcyA9ICcnXG4gIHZhciBpID0gMFxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxuICAgICAgU3RyaW5nLFxuICAgICAgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKVxuICAgIClcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3RilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGxhdGluMVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICB2YXIgb3V0ID0gJydcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICBvdXQgKz0gaGV4U2xpY2VMb29rdXBUYWJsZVtidWZbaV1dXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIC8vIElmIGJ5dGVzLmxlbmd0aCBpcyBvZGQsIHRoZSBsYXN0IDggYml0cyBtdXN0IGJlIGlnbm9yZWQgKHNhbWUgYXMgbm9kZS5qcylcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGggLSAxOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIChieXRlc1tpICsgMV0gKiAyNTYpKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihuZXdCdWYsIEJ1ZmZlci5wcm90b3R5cGUpXG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludExFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50QkUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIHZhciBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDggPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDE2TEUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MTZCRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQzMkxFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDMyQkUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDI0KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludExFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludEJFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDggPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MTZMRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDE2QkUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MzJCRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50TEUgPSBmdW5jdGlvbiB3cml0ZUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsICg4ICogYnl0ZUxlbmd0aCkgLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gY2hlY2tJRUVFNzU0IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAob2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvYXQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyJylcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBVc2UgYnVpbHQtaW4gd2hlbiBhdmFpbGFibGUsIG1pc3NpbmcgZnJvbSBJRTExXG4gICAgdGhpcy5jb3B5V2l0aGluKHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmICgoZW5jb2RpbmcgPT09ICd1dGY4JyAmJiBjb2RlIDwgMTI4KSB8fFxuICAgICAgICAgIGVuY29kaW5nID09PSAnbGF0aW4xJykge1xuICAgICAgICAvLyBGYXN0IHBhdGg6IElmIGB2YWxgIGZpdHMgaW50byBhIHNpbmdsZSBieXRlLCB1c2UgdGhhdCBudW1lcmljIHZhbHVlLlxuICAgICAgICB2YWwgPSBjb2RlXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMjU1XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgdmFsID0gTnVtYmVyKHZhbClcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICAgIHZhciBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgXCInICsgdmFsICtcbiAgICAgICAgJ1wiIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50IFwidmFsdWVcIicpXG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teKy8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgdGFrZXMgZXF1YWwgc2lnbnMgYXMgZW5kIG9mIHRoZSBCYXNlNjQgZW5jb2RpbmdcbiAgc3RyID0gc3RyLnNwbGl0KCc9JylbMF1cbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0ci50cmltKCkucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuLy8gQXJyYXlCdWZmZXIgb3IgVWludDhBcnJheSBvYmplY3RzIGZyb20gb3RoZXIgY29udGV4dHMgKGkuZS4gaWZyYW1lcykgZG8gbm90IHBhc3Ncbi8vIHRoZSBgaW5zdGFuY2VvZmAgY2hlY2sgYnV0IHRoZXkgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgb2YgdGhhdCB0eXBlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMTY2XG5mdW5jdGlvbiBpc0luc3RhbmNlIChvYmosIHR5cGUpIHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIHR5cGUgfHxcbiAgICAob2JqICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yLm5hbWUgIT0gbnVsbCAmJlxuICAgICAgb2JqLmNvbnN0cnVjdG9yLm5hbWUgPT09IHR5cGUubmFtZSlcbn1cbmZ1bmN0aW9uIG51bWJlcklzTmFOIChvYmopIHtcbiAgLy8gRm9yIElFMTEgc3VwcG9ydFxuICByZXR1cm4gb2JqICE9PSBvYmogLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cblxuLy8gQ3JlYXRlIGxvb2t1cCB0YWJsZSBmb3IgYHRvU3RyaW5nKCdoZXgnKWBcbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzIxOVxudmFyIGhleFNsaWNlTG9va3VwVGFibGUgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgYWxwaGFiZXQgPSAnMDEyMzQ1Njc4OWFiY2RlZidcbiAgdmFyIHRhYmxlID0gbmV3IEFycmF5KDI1NilcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgdmFyIGkxNiA9IGkgKiAxNlxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgdGFibGVbaTE2ICsgal0gPSBhbHBoYWJldFtpXSArIGFscGhhYmV0W2pdXG4gICAgfVxuICB9XG4gIHJldHVybiB0YWJsZVxufSkoKVxuIiwgIi8qIVxuIENvcHlyaWdodCAoYykgUGVjdWxpYXIgVmVudHVyZXMsIExMQ1xuKi9cblxuaW1wb3J0ICogYXMgY29yZSBmcm9tICd3ZWJjcnlwdG8tY29yZSc7XG5pbXBvcnQgeyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgYXMgQnVmZmVyU291cmNlQ29udmVydGVyJDEgfSBmcm9tICd3ZWJjcnlwdG8tY29yZSc7XG5leHBvcnQgeyBDcnlwdG9LZXkgfSBmcm9tICd3ZWJjcnlwdG8tY29yZSc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgY3J5cHRvX19kZWZhdWx0IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBwcm9jZXNzIGZyb20gJ3Byb2Nlc3MnO1xuaW1wb3J0IHsgX19kZWNvcmF0ZSB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IEpzb25Qcm9wLCBKc29uUHJvcFR5cGVzLCBKc29uU2VyaWFsaXplciwgSnNvblBhcnNlciB9IGZyb20gJ0BwZWN1bGlhci9qc29uLXNjaGVtYSc7XG5pbXBvcnQgeyBDb252ZXJ0LCBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgfSBmcm9tICdwdnRzdXRpbHMnO1xuaW1wb3J0IHsgQXNuUGFyc2VyLCBBc25TZXJpYWxpemVyIH0gZnJvbSAnQHBlY3VsaWFyL2FzbjEtc2NoZW1hJztcblxuY29uc3QgSnNvbkJhc2U2NFVybENvbnZlcnRlciA9IHtcbiAgICBmcm9tSlNPTjogKHZhbHVlKSA9PiBCdWZmZXIuZnJvbShDb252ZXJ0LkZyb21CYXNlNjRVcmwodmFsdWUpKSxcbiAgICB0b0pTT046ICh2YWx1ZSkgPT4gQ29udmVydC5Ub0Jhc2U2NFVybCh2YWx1ZSksXG59O1xuXG5jbGFzcyBDcnlwdG9LZXkgZXh0ZW5kcyBjb3JlLkNyeXB0b0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlci5hbGxvYygwKTtcbiAgICAgICAgdGhpcy5hbGdvcml0aG0gPSB7IG5hbWU6IFwiXCIgfTtcbiAgICAgICAgdGhpcy5leHRyYWN0YWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInNlY3JldFwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgICAgICB0aGlzLmt0eSA9IFwib2N0XCI7XG4gICAgICAgIHRoaXMuYWxnID0gXCJcIjtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZXh0XCIsIHR5cGU6IEpzb25Qcm9wVHlwZXMuQm9vbGVhbiwgb3B0aW9uYWw6IHRydWUgfSlcbl0sIENyeXB0b0tleS5wcm90b3R5cGUsIFwiZXh0cmFjdGFibGVcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJrZXlfb3BzXCIsIHR5cGU6IEpzb25Qcm9wVHlwZXMuU3RyaW5nLCByZXBlYXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUgfSlcbl0sIENyeXB0b0tleS5wcm90b3R5cGUsIFwidXNhZ2VzXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBKc29uUHJvcCh7IHR5cGU6IEpzb25Qcm9wVHlwZXMuU3RyaW5nIH0pXG5dLCBDcnlwdG9LZXkucHJvdG90eXBlLCBcImt0eVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgSnNvblByb3AoeyB0eXBlOiBKc29uUHJvcFR5cGVzLlN0cmluZywgb3B0aW9uYWw6IHRydWUgfSlcbl0sIENyeXB0b0tleS5wcm90b3R5cGUsIFwiYWxnXCIsIHZvaWQgMCk7XG5cbmNsYXNzIFN5bW1ldHJpY0tleSBleHRlbmRzIENyeXB0b0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMua3R5ID0gXCJvY3RcIjtcbiAgICAgICAgdGhpcy50eXBlID0gXCJzZWNyZXRcIjtcbiAgICB9XG59XG5cbmNsYXNzIEFzeW1tZXRyaWNLZXkgZXh0ZW5kcyBDcnlwdG9LZXkge1xufVxuXG5jbGFzcyBBZXNDcnlwdG9LZXkgZXh0ZW5kcyBTeW1tZXRyaWNLZXkge1xuICAgIGdldCBhbGcoKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5hbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQSR7dGhpcy5hbGdvcml0aG0ubGVuZ3RofUNCQ2A7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNUUlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQSR7dGhpcy5hbGdvcml0aG0ubGVuZ3RofUNUUmA7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUdDTVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQSR7dGhpcy5hbGdvcml0aG0ubGVuZ3RofUdDTWA7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUtXXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBBJHt0aGlzLmFsZ29yaXRobS5sZW5ndGh9S1dgO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DTUFDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBBJHt0aGlzLmFsZ29yaXRobS5sZW5ndGh9Q01BQ2A7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUVDQlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQSR7dGhpcy5hbGdvcml0aG0ubGVuZ3RofUVDQmA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLkFsZ29yaXRobUVycm9yKFwiVW5zdXBwb3J0ZWQgYWxnb3JpdGhtIG5hbWVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0IGFsZyh2YWx1ZSkge1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJrXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybENvbnZlcnRlciB9KVxuXSwgQWVzQ3J5cHRvS2V5LnByb3RvdHlwZSwgXCJkYXRhXCIsIHZvaWQgMCk7XG5cbmNsYXNzIEFlc0NyeXB0byB7XG4gICAgc3RhdGljIGFzeW5jIGdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgQWVzQ3J5cHRvS2V5KCk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICBrZXkuZGF0YSA9IGNyeXB0b19fZGVmYXVsdC5yYW5kb21CeXRlcyhhbGdvcml0aG0ubGVuZ3RoID4+IDMpO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImtleTogSXMgbm90IEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpzb25TZXJpYWxpemVyLnRvSlNPTihrZXkpO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShrZXkuZGF0YSkuYnVmZmVyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJyBvciAncmF3J1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGxldCBrZXk7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICBrZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBBZXNDcnlwdG9LZXkgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6XG4gICAgICAgICAgICAgICAga2V5ID0gbmV3IEFlc0NyeXB0b0tleSgpO1xuICAgICAgICAgICAgICAgIGtleS5kYXRhID0gQnVmZmVyLmZyb20oa2V5RGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snIG9yICdyYXcnXCIpO1xuICAgICAgICB9XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIGtleS5hbGdvcml0aG0ubGVuZ3RoID0ga2V5LmRhdGEubGVuZ3RoIDw8IDM7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICBzd2l0Y2ggKGtleS5hbGdvcml0aG0ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDEyODpcbiAgICAgICAgICAgIGNhc2UgMTkyOlxuICAgICAgICAgICAgY2FzZSAyNTY6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwia2V5RGF0YTogSXMgd3Jvbmcga2V5IGxlbmd0aFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdEFlc0NCQyhhbGdvcml0aG0sIGtleSwgQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DVFJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0QWVzQ1RSKGFsZ29yaXRobSwga2V5LCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUdDTVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY3J5cHRBZXNHQ00oYWxnb3JpdGhtLCBrZXksIEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtS1dcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0QWVzS1coYWxnb3JpdGhtLCBrZXksIEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtRUNCXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdEFlc0VDQihhbGdvcml0aG0sIGtleSwgQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluc3RhbmNlb2YgQWVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwia2V5OiBJcyBub3QgQWVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0QWVzQ0JDKGFsZ29yaXRobSwga2V5LCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNUUlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHRBZXNDVFIoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtR0NNXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdEFlc0dDTShhbGdvcml0aG0sIGtleSwgQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1LV1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHRBZXNLVyhhbGdvcml0aG0sIGtleSwgQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1FQ0JcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0QWVzRUNCKGFsZ29yaXRobSwga2V5LCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdEFlc0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlQ2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1jYmNgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGxldCBlbmMgPSBjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBlbmMgPSBCdWZmZXIuY29uY2F0KFtlbmMsIGNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdEFlc0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBkZWNpcGhlciA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVEZWNpcGhlcml2KGBhZXMtJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0tY2JjYCwga2V5LmRhdGEsIG5ldyBVaW50OEFycmF5KGFsZ29yaXRobS5pdikpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBkZWMgPSBCdWZmZXIuY29uY2F0KFtkZWMsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRlYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdEFlc0NUUihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlQ2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1jdHJgLCBrZXkuZGF0YSwgQnVmZmVyLmZyb20oYWxnb3JpdGhtLmNvdW50ZXIpKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlci5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0QWVzQ1RSKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZURlY2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1jdHJgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLmNvdW50ZXIpKTtcbiAgICAgICAgbGV0IGRlYyA9IGRlY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZGVjID0gQnVmZmVyLmNvbmNhdChbZGVjLCBkZWNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkZWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHRBZXNHQ00oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZUNpcGhlcml2KGBhZXMtJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0tZ2NtYCwga2V5LmRhdGEsIEJ1ZmZlci5mcm9tKGFsZ29yaXRobS5pdiksIHtcbiAgICAgICAgICAgIGF1dGhUYWdMZW5ndGg6IChhbGdvcml0aG0udGFnTGVuZ3RoIHx8IDEyOCkgPj4gMyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChhbGdvcml0aG0uYWRkaXRpb25hbERhdGEpIHtcbiAgICAgICAgICAgIGNpcGhlci5zZXRBQUQoQnVmZmVyLmZyb20oYWxnb3JpdGhtLmFkZGl0aW9uYWxEYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlci5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCksIGNpcGhlci5nZXRBdXRoVGFnKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0QWVzR0NNKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZURlY2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1nY21gLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGNvbnN0IHRhZ0xlbmd0aCA9IChhbGdvcml0aG0udGFnTGVuZ3RoIHx8IDEyOCkgPj4gMztcbiAgICAgICAgY29uc3QgZW5jID0gZGF0YS5zbGljZSgwLCBkYXRhLmxlbmd0aCAtIHRhZ0xlbmd0aCk7XG4gICAgICAgIGNvbnN0IHRhZyA9IGRhdGEuc2xpY2UoZGF0YS5sZW5ndGggLSB0YWdMZW5ndGgpO1xuICAgICAgICBpZiAoYWxnb3JpdGhtLmFkZGl0aW9uYWxEYXRhKSB7XG4gICAgICAgICAgICBkZWNpcGhlci5zZXRBQUQoQnVmZmVyLmZyb20oYWxnb3JpdGhtLmFkZGl0aW9uYWxEYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgZGVjaXBoZXIuc2V0QXV0aFRhZyh0YWcpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGVuYyk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlci5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0QWVzS1coYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZUNpcGhlcml2KGBpZC1hZXMke2tleS5hbGdvcml0aG0ubGVuZ3RofS13cmFwYCwga2V5LmRhdGEsIHRoaXMuQUVTX0tXX0lWKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlci5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdEFlc0tXKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZURlY2lwaGVyaXYoYGlkLWFlcyR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LXdyYXBgLCBrZXkuZGF0YSwgdGhpcy5BRVNfS1dfSVYpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBkZWMgPSBCdWZmZXIuY29uY2F0KFtkZWMsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRlYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdEFlc0VDQihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlQ2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1lY2JgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoMCkpO1xuICAgICAgICBsZXQgZW5jID0gY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZW5jID0gQnVmZmVyLmNvbmNhdChbZW5jLCBjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShlbmMpLmJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHRBZXNFQ0IoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlRGVjaXBoZXJpdihgYWVzLSR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LWVjYmAsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheSgwKSk7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlci5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxufVxuQWVzQ3J5cHRvLkFFU19LV19JViA9IEJ1ZmZlci5mcm9tKFwiQTZBNkE2QTZBNkE2QTZBNlwiLCBcImhleFwiKTtcblxuY29uc3Qga2V5U3RvcmFnZSA9IG5ldyBXZWFrTWFwKCk7XG5mdW5jdGlvbiBnZXRDcnlwdG9LZXkoa2V5KSB7XG4gICAgY29uc3QgcmVzID0ga2V5U3RvcmFnZS5nZXQoa2V5KTtcbiAgICBpZiAoIXJlcykge1xuICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcIkNhbm5vdCBnZXQgQ3J5cHRvS2V5IGZyb20gc2VjdXJlIHN0b3JhZ2VcIik7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBzZXRDcnlwdG9LZXkodmFsdWUpIHtcbiAgICBjb25zdCBrZXkgPSBjb3JlLkNyeXB0b0tleS5jcmVhdGUodmFsdWUuYWxnb3JpdGhtLCB2YWx1ZS50eXBlLCB2YWx1ZS5leHRyYWN0YWJsZSwgdmFsdWUudXNhZ2VzKTtcbiAgICBPYmplY3QuZnJlZXplKGtleSk7XG4gICAga2V5U3RvcmFnZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgcmV0dXJuIGtleTtcbn1cblxuY2xhc3MgQWVzQ2JjUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkFlc0NiY1Byb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY29uc3QgemVybyA9IEJ1ZmZlci5mcm9tKFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSk7XG5jb25zdCByYiA9IEJ1ZmZlci5mcm9tKFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzVdKTtcbmNvbnN0IGJsb2NrU2l6ZSA9IDE2O1xuZnVuY3Rpb24gYml0U2hpZnRMZWZ0KGJ1ZmZlcikge1xuICAgIGNvbnN0IHNoaWZ0ZWQgPSBCdWZmZXIuYWxsb2MoYnVmZmVyLmxlbmd0aCk7XG4gICAgY29uc3QgbGFzdCA9IGJ1ZmZlci5sZW5ndGggLSAxO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsYXN0OyBpbmRleCsrKSB7XG4gICAgICAgIHNoaWZ0ZWRbaW5kZXhdID0gYnVmZmVyW2luZGV4XSA8PCAxO1xuICAgICAgICBpZiAoYnVmZmVyW2luZGV4ICsgMV0gJiAweDgwKSB7XG4gICAgICAgICAgICBzaGlmdGVkW2luZGV4XSArPSAweDAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNoaWZ0ZWRbbGFzdF0gPSBidWZmZXJbbGFzdF0gPDwgMTtcbiAgICByZXR1cm4gc2hpZnRlZDtcbn1cbmZ1bmN0aW9uIHhvcihhLCBiKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gTWF0aC5taW4oYS5sZW5ndGgsIGIubGVuZ3RoKTtcbiAgICBjb25zdCBvdXRwdXQgPSBCdWZmZXIuYWxsb2MobGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIG91dHB1dFtpbmRleF0gPSBhW2luZGV4XSBeIGJbaW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xufVxuZnVuY3Rpb24gYWVzKGtleSwgbWVzc2FnZSkge1xuICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihgYWVzJHtrZXkubGVuZ3RoIDw8IDN9YCwga2V5LCB6ZXJvKTtcbiAgICBjb25zdCByZXN1bHQgPSBjaXBoZXIudXBkYXRlKG1lc3NhZ2UpO1xuICAgIGNpcGhlci5maW5hbCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXRNZXNzYWdlQmxvY2sobWVzc2FnZSwgYmxvY2tJbmRleCkge1xuICAgIGNvbnN0IGJsb2NrID0gQnVmZmVyLmFsbG9jKGJsb2NrU2l6ZSk7XG4gICAgY29uc3Qgc3RhcnQgPSBibG9ja0luZGV4ICogYmxvY2tTaXplO1xuICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgYmxvY2tTaXplO1xuICAgIG1lc3NhZ2UuY29weShibG9jaywgMCwgc3RhcnQsIGVuZCk7XG4gICAgcmV0dXJuIGJsb2NrO1xufVxuZnVuY3Rpb24gZ2V0UGFkZGVkTWVzc2FnZUJsb2NrKG1lc3NhZ2UsIGJsb2NrSW5kZXgpIHtcbiAgICBjb25zdCBibG9jayA9IEJ1ZmZlci5hbGxvYyhibG9ja1NpemUpO1xuICAgIGNvbnN0IHN0YXJ0ID0gYmxvY2tJbmRleCAqIGJsb2NrU2l6ZTtcbiAgICBjb25zdCBlbmQgPSBtZXNzYWdlLmxlbmd0aDtcbiAgICBibG9jay5maWxsKDApO1xuICAgIG1lc3NhZ2UuY29weShibG9jaywgMCwgc3RhcnQsIGVuZCk7XG4gICAgYmxvY2tbZW5kIC0gc3RhcnRdID0gMHg4MDtcbiAgICByZXR1cm4gYmxvY2s7XG59XG5mdW5jdGlvbiBnZW5lcmF0ZVN1YmtleXMoa2V5KSB7XG4gICAgY29uc3QgbCA9IGFlcyhrZXksIHplcm8pO1xuICAgIGxldCBzdWJrZXkxID0gYml0U2hpZnRMZWZ0KGwpO1xuICAgIGlmIChsWzBdICYgMHg4MCkge1xuICAgICAgICBzdWJrZXkxID0geG9yKHN1YmtleTEsIHJiKTtcbiAgICB9XG4gICAgbGV0IHN1YmtleTIgPSBiaXRTaGlmdExlZnQoc3Via2V5MSk7XG4gICAgaWYgKHN1YmtleTFbMF0gJiAweDgwKSB7XG4gICAgICAgIHN1YmtleTIgPSB4b3Ioc3Via2V5MiwgcmIpO1xuICAgIH1cbiAgICByZXR1cm4geyBzdWJrZXkxLCBzdWJrZXkyIH07XG59XG5mdW5jdGlvbiBhZXNDbWFjKGtleSwgbWVzc2FnZSkge1xuICAgIGNvbnN0IHN1YmtleXMgPSBnZW5lcmF0ZVN1YmtleXMoa2V5KTtcbiAgICBsZXQgYmxvY2tDb3VudCA9IE1hdGguY2VpbChtZXNzYWdlLmxlbmd0aCAvIGJsb2NrU2l6ZSk7XG4gICAgbGV0IGxhc3RCbG9ja0NvbXBsZXRlRmxhZztcbiAgICBsZXQgbGFzdEJsb2NrO1xuICAgIGlmIChibG9ja0NvdW50ID09PSAwKSB7XG4gICAgICAgIGJsb2NrQ291bnQgPSAxO1xuICAgICAgICBsYXN0QmxvY2tDb21wbGV0ZUZsYWcgPSBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxhc3RCbG9ja0NvbXBsZXRlRmxhZyA9IChtZXNzYWdlLmxlbmd0aCAlIGJsb2NrU2l6ZSA9PT0gMCk7XG4gICAgfVxuICAgIGNvbnN0IGxhc3RCbG9ja0luZGV4ID0gYmxvY2tDb3VudCAtIDE7XG4gICAgaWYgKGxhc3RCbG9ja0NvbXBsZXRlRmxhZykge1xuICAgICAgICBsYXN0QmxvY2sgPSB4b3IoZ2V0TWVzc2FnZUJsb2NrKG1lc3NhZ2UsIGxhc3RCbG9ja0luZGV4KSwgc3Via2V5cy5zdWJrZXkxKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxhc3RCbG9jayA9IHhvcihnZXRQYWRkZWRNZXNzYWdlQmxvY2sobWVzc2FnZSwgbGFzdEJsb2NrSW5kZXgpLCBzdWJrZXlzLnN1YmtleTIpO1xuICAgIH1cbiAgICBsZXQgeCA9IHplcm87XG4gICAgbGV0IHk7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxhc3RCbG9ja0luZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHkgPSB4b3IoeCwgZ2V0TWVzc2FnZUJsb2NrKG1lc3NhZ2UsIGluZGV4KSk7XG4gICAgICAgIHggPSBhZXMoa2V5LCB5KTtcbiAgICB9XG4gICAgeSA9IHhvcihsYXN0QmxvY2ssIHgpO1xuICAgIHJldHVybiBhZXMoa2V5LCB5KTtcbn1cbmNsYXNzIEFlc0NtYWNQcm92aWRlciBleHRlbmRzIGNvcmUuQWVzQ21hY1Byb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYWVzQ21hYyhnZXRDcnlwdG9LZXkoa2V5KS5kYXRhLCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShyZXN1bHQpLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBjb25zdCBzaWduYXR1cmUyID0gYXdhaXQgdGhpcy5zaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSkuY29tcGFyZShCdWZmZXIuZnJvbShzaWduYXR1cmUyKSkgPT09IDA7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShyZXMpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzQ3RyUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkFlc0N0clByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShyZXMpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzR2NtUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkFlc0djbVByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShyZXMpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzS3dQcm92aWRlciBleHRlbmRzIGNvcmUuQWVzS3dQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgQWVzQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGxlbmd0aDogYWxnb3JpdGhtLmxlbmd0aCxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkocmVzKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEFlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IGFsZ29yaXRobS5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KHJlcyk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmVuY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5kZWNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBBZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgYSBBZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFlc0VjYlByb3ZpZGVyIGV4dGVuZHMgY29yZS5BZXNFY2JQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgQWVzQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGxlbmd0aDogYWxnb3JpdGhtLmxlbmd0aCxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZW5jcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmRlY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgQWVzQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgbmFtZTogYWxnb3JpdGhtLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkocmVzKTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBBZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgYSBBZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIERlc0NyeXB0b0tleSBleHRlbmRzIFN5bW1ldHJpY0tleSB7XG4gICAgZ2V0IGFsZygpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJERVMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBERVMtQ0JDYDtcbiAgICAgICAgICAgIGNhc2UgXCJERVMtRURFMy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYDNERVMtQ0JDYDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuQWxnb3JpdGhtRXJyb3IoXCJVbnN1cHBvcnRlZCBhbGdvcml0aG0gbmFtZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXQgYWxnKHZhbHVlKSB7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImtcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQ29udmVydGVyIH0pXG5dLCBEZXNDcnlwdG9LZXkucHJvdG90eXBlLCBcImRhdGFcIiwgdm9pZCAwKTtcblxuY2xhc3MgRGVzQ3J5cHRvIHtcbiAgICBzdGF0aWMgYXN5bmMgZ2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBEZXNDcnlwdG9LZXkoKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIGtleS5kYXRhID0gY3J5cHRvX19kZWZhdWx0LnJhbmRvbUJ5dGVzKGFsZ29yaXRobS5sZW5ndGggPj4gMyk7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBleHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KTtcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoa2V5LmRhdGEpLmJ1ZmZlcjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycgb3IgJ3JhdydcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBsZXQga2V5O1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihrZXlEYXRhLCB7IHRhcmdldFNjaGVtYTogRGVzQ3J5cHRvS2V5IH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIGtleSA9IG5ldyBEZXNDcnlwdG9LZXkoKTtcbiAgICAgICAgICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlci5mcm9tKGtleURhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJyBvciAncmF3J1wiKTtcbiAgICAgICAgfVxuICAgICAgICBrZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiREVTLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY3J5cHREZXNDQkMoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJERVMtRURFMy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0RGVzRURFM0NCQyhhbGdvcml0aG0sIGtleSwgQnVmZmVyLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluc3RhbmNlb2YgRGVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwia2V5OiBJcyBub3QgRGVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIkRFUy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0RGVzQ0JDKGFsZ29yaXRobSwga2V5LCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiREVTLUVERTMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdERlc0VERTNDQkMoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0RGVzQ0JDKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVDaXBoZXJpdihgZGVzLWNiY2AsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheShhbGdvcml0aG0uaXYpKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlci5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0RGVzQ0JDKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZURlY2lwaGVyaXYoYGRlcy1jYmNgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlci5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0RGVzRURFM0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlQ2lwaGVyaXYoYGRlcy1lZGUzLWNiY2AsIGtleS5kYXRhLCBCdWZmZXIuZnJvbShhbGdvcml0aG0uaXYpKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlci5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0RGVzRURFM0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBkZWNpcGhlciA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVEZWNpcGhlcml2KGBkZXMtZWRlMy1jYmNgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlci5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxufVxuXG5jbGFzcyBEZXNDYmNQcm92aWRlciBleHRlbmRzIGNvcmUuRGVzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmtleVNpemVCaXRzID0gNjQ7XG4gICAgICAgIHRoaXMuaXZTaXplID0gODtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJERVMtQ0JDXCI7XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IERlc0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IHRoaXMua2V5U2l6ZUJpdHMsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRGVzQ3J5cHRvLmVuY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIERlc0NyeXB0by5kZWNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIERlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IERlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IHRoaXMubmFtZSwgbGVuZ3RoOiB0aGlzLmtleVNpemVCaXRzIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICBpZiAoa2V5LmRhdGEubGVuZ3RoICE9PSAodGhpcy5rZXlTaXplQml0cyA+PiAzKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJrZXlEYXRhOiBXcm9uZyBrZXkgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgRGVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgRGVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBEZXNFZGUzQ2JjUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkRlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5rZXlTaXplQml0cyA9IDE5MjtcbiAgICAgICAgdGhpcy5pdlNpemUgPSA4O1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkRFUy1FREUzLUNCQ1wiO1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBEZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLmtleVNpemVCaXRzLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIERlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBEZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBEZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBEZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiB0aGlzLm5hbWUsIGxlbmd0aDogdGhpcy5rZXlTaXplQml0cyB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgaWYgKGtleS5kYXRhLmxlbmd0aCAhPT0gKHRoaXMua2V5U2l6ZUJpdHMgPj4gMykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwia2V5RGF0YTogV3Jvbmcga2V5IHNpemVcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIERlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIERlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0SndrQWxnb3JpdGhtKGFsZ29yaXRobSkge1xuICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICBjYXNlIFwiUlNBLU9BRVBcIjoge1xuICAgICAgICAgICAgY29uc3QgbWRTaXplID0gLyhcXGQrKSQvLmV4ZWMoYWxnb3JpdGhtLmhhc2gubmFtZSlbMV07XG4gICAgICAgICAgICByZXR1cm4gYFJTQS1PQUVQJHttZFNpemUgIT09IFwiMVwiID8gYC0ke21kU2l6ZX1gIDogXCJcIn1gO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJSU0FTU0EtUEtDUzEtVjFfNVwiOlxuICAgICAgICAgICAgcmV0dXJuIGBSUyR7LyhcXGQrKSQvLmV4ZWMoYWxnb3JpdGhtLmhhc2gubmFtZSlbMV19YDtcbiAgICAgICAgY2FzZSBcIlJTQS1QU1NcIjpcbiAgICAgICAgICAgIHJldHVybiBgUFMkey8oXFxkKykkLy5leGVjKGFsZ29yaXRobS5oYXNoLm5hbWUpWzFdfWA7XG4gICAgICAgIGNhc2UgXCJSU0EtUEtDUzFcIjpcbiAgICAgICAgICAgIHJldHVybiBgUlMxYDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICB9XG59XG5cbmNsYXNzIFJzYVByaXZhdGVLZXkgZXh0ZW5kcyBBc3ltbWV0cmljS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJwcml2YXRlXCI7XG4gICAgfVxuICAgIGdldEtleSgpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZSh0aGlzLmRhdGEsIGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wcml2YXRlS2V5LCBjb3JlLmFzbjEuUnNhUHJpdmF0ZUtleSk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGt0eTogXCJSU0FcIixcbiAgICAgICAgICAgIGFsZzogZ2V0SndrQWxnb3JpdGhtKHRoaXMuYWxnb3JpdGhtKSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihqc29uLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLlJzYVByaXZhdGVLZXkgfSk7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5wYXJhbWV0ZXJzID0gbnVsbDtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5ID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5KTtcbiAgICAgICAgdGhpcy5kYXRhID0gQnVmZmVyLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgIH1cbn1cblxuY2xhc3MgUnNhUHVibGljS2V5IGV4dGVuZHMgQXN5bW1ldHJpY0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IFwicHVibGljXCI7XG4gICAgfVxuICAgIGdldEtleSgpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZSh0aGlzLmRhdGEsIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgcmV0dXJuIEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnB1YmxpY0tleSwgY29yZS5hc24xLlJzYVB1YmxpY0tleSk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGt0eTogXCJSU0FcIixcbiAgICAgICAgICAgIGFsZzogZ2V0SndrQWxnb3JpdGhtKHRoaXMuYWxnb3JpdGhtKSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihqc29uLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLlJzYVB1YmxpY0tleSB9KTtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBudWxsO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlci5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICB9XG59XG5cbmNsYXNzIFJzYUNyeXB0byB7XG4gICAgc3RhdGljIGFzeW5jIGdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gbmV3IFJzYVByaXZhdGVLZXkoKTtcbiAgICAgICAgcHJpdmF0ZUtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIHByaXZhdGVLZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAgcHJpdmF0ZUtleS51c2FnZXMgPSBrZXlVc2FnZXMuZmlsdGVyKCh1c2FnZSkgPT4gdGhpcy5wcml2YXRlS2V5VXNhZ2VzLmluZGV4T2YodXNhZ2UpICE9PSAtMSk7XG4gICAgICAgIGNvbnN0IHB1YmxpY0tleSA9IG5ldyBSc2FQdWJsaWNLZXkoKTtcbiAgICAgICAgcHVibGljS2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgcHVibGljS2V5LmV4dHJhY3RhYmxlID0gdHJ1ZTtcbiAgICAgICAgcHVibGljS2V5LnVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnB1YmxpY0tleVVzYWdlcy5pbmRleE9mKHVzYWdlKSAhPT0gLTEpO1xuICAgICAgICBjb25zdCBwdWJsaWNFeHBvbmVudCA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgICAgICAgQnVmZmVyLmFsbG9jKDQgLSBhbGdvcml0aG0ucHVibGljRXhwb25lbnQuYnl0ZUxlbmd0aCwgMCksXG4gICAgICAgICAgICBCdWZmZXIuZnJvbShhbGdvcml0aG0ucHVibGljRXhwb25lbnQpLFxuICAgICAgICBdKS5yZWFkSW50MzJCRSgwKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IGNyeXB0b19fZGVmYXVsdC5nZW5lcmF0ZUtleVBhaXJTeW5jKFwicnNhXCIsIHtcbiAgICAgICAgICAgIG1vZHVsdXNMZW5ndGg6IGFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoLFxuICAgICAgICAgICAgcHVibGljRXhwb25lbnQsXG4gICAgICAgICAgICBwdWJsaWNLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNwa2lcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcml2YXRlS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJwa2NzOFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHByaXZhdGVLZXkuZGF0YSA9IGtleXMucHJpdmF0ZUtleTtcbiAgICAgICAgcHVibGljS2V5LmRhdGEgPSBrZXlzLnB1YmxpY0tleTtcbiAgICAgICAgY29uc3QgcmVzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleSxcbiAgICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpzb25TZXJpYWxpemVyLnRvSlNPTihrZXkpO1xuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShrZXkuZGF0YSkuYnVmZmVyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3BrY3M4JyBvciAnc3BraSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBqd2sgPSBrZXlEYXRhO1xuICAgICAgICAgICAgICAgIGlmIChqd2suZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuUnNhUHJpdmF0ZUtleSB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuUnNhUHVibGljS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKG5ldyBVaW50OEFycmF5KGtleURhdGEpLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNuS2V5ID0gQXNuUGFyc2VyLnBhcnNlKGtleUluZm8ucHVibGljS2V5LCBjb3JlLmFzbjEuUnNhUHVibGljS2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKG5ldyBVaW50OEFycmF5KGtleURhdGEpLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnByaXZhdGVLZXksIGNvcmUuYXNuMS5Sc2FQcml2YXRlS2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycsICdwa2NzOCcgb3IgJ3Nwa2knXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBzaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlJTQS1QU1NcIjpcbiAgICAgICAgICAgIGNhc2UgXCJSU0FTU0EtUEtDUzEtVjFfNVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25Sc2EoYWxnb3JpdGhtLCBrZXksIGRhdGEpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlJTQS1QU1NcIjpcbiAgICAgICAgICAgIGNhc2UgXCJSU0FTU0EtUEtDUzEtVjFfNVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZlcmlmeVNTQShhbGdvcml0aG0sIGtleSwgZGF0YSwgc2lnbmF0dXJlKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlJTQS1PQUVQXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdE9BRVAoYWxnb3JpdGhtLCBrZXksIGRhdGEpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiUlNBLU9BRVBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0T0FFUChhbGdvcml0aG0sIGtleSwgZGF0YSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjExMzU0OS4xLjEuMVwiO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0ucGFyYW1ldGVycyA9IG51bGw7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGFzbktleSk7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBSc2FQcml2YXRlS2V5KCk7XG4gICAgICAgIGtleS5kYXRhID0gQnVmZmVyLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gT2JqZWN0LmFzc2lnbih7fSwgYWxnb3JpdGhtKTtcbiAgICAgICAga2V5LmFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCA9IG5ldyBVaW50OEFycmF5KGFzbktleS5wdWJsaWNFeHBvbmVudCk7XG4gICAgICAgIGtleS5hbGdvcml0aG0ubW9kdWx1c0xlbmd0aCA9IGFzbktleS5tb2R1bHVzLmJ5dGVMZW5ndGggPDwgMztcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBpbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBudWxsO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGFzbktleSk7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBSc2FQdWJsaWNLZXkoKTtcbiAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBPYmplY3QuYXNzaWduKHt9LCBhbGdvcml0aG0pO1xuICAgICAgICBrZXkuYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50ID0gbmV3IFVpbnQ4QXJyYXkoYXNuS2V5LnB1YmxpY0V4cG9uZW50KTtcbiAgICAgICAga2V5LmFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoID0gYXNuS2V5Lm1vZHVsdXMuYnl0ZUxlbmd0aCA8PCAzO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGdldENyeXB0b0FsZ29yaXRobShhbGcpIHtcbiAgICAgICAgc3dpdGNoIChhbGcuaGFzaC5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEExXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTI1NlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEEyNTZcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUlNBLVNIQTM4NFwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS01MTJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJSU0EtU0hBNTEyXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJSU0EtU0hBMy0yNTZcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTM4NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEEzLTM4NFwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQTMtNTEyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUlNBLVNIQTMtNTEyXCI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtLmhhc2g6IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBzaWduUnNhKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNyeXB0b0FsZyA9IHRoaXMuZ2V0Q3J5cHRvQWxnb3JpdGhtKGtleS5hbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBzaWduZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlU2lnbihjcnlwdG9BbGcpO1xuICAgICAgICBzaWduZXIudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgaWYgKCFrZXkucGVtKSB7XG4gICAgICAgICAgICBrZXkucGVtID0gYC0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleToga2V5LnBlbSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkgPT09IFwiUlNBLVBTU1wiKSB7XG4gICAgICAgICAgICBvcHRpb25zLnBhZGRpbmcgPSBjcnlwdG9fX2RlZmF1bHQuY29uc3RhbnRzLlJTQV9QS0NTMV9QU1NfUEFERElORztcbiAgICAgICAgICAgIG9wdGlvbnMuc2FsdExlbmd0aCA9IGFsZ29yaXRobS5zYWx0TGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNpZ25lci5zaWduKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyB2ZXJpZnlTU0EoYWxnb3JpdGhtLCBrZXksIGRhdGEsIHNpZ25hdHVyZSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSB0aGlzLmdldENyeXB0b0FsZ29yaXRobShrZXkuYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3Qgc2lnbmVyID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZVZlcmlmeShjcnlwdG9BbGcpO1xuICAgICAgICBzaWduZXIudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgaWYgKCFrZXkucGVtKSB7XG4gICAgICAgICAgICBrZXkucGVtID0gYC0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGtleS5wZW0sXG4gICAgICAgIH07XG4gICAgICAgIGlmIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpID09PSBcIlJTQS1QU1NcIikge1xuICAgICAgICAgICAgb3B0aW9ucy5wYWRkaW5nID0gY3J5cHRvX19kZWZhdWx0LmNvbnN0YW50cy5SU0FfUEtDUzFfUFNTX1BBRERJTkc7XG4gICAgICAgICAgICBvcHRpb25zLnNhbHRMZW5ndGggPSBhbGdvcml0aG0uc2FsdExlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvayA9IHNpZ25lci52ZXJpZnkob3B0aW9ucywgc2lnbmF0dXJlKTtcbiAgICAgICAgcmV0dXJuIG9rO1xuICAgIH1cbiAgICBzdGF0aWMgZW5jcnlwdE9BRVAoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleTogYC0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1gLFxuICAgICAgICAgICAgcGFkZGluZzogY3J5cHRvX19kZWZhdWx0LmNvbnN0YW50cy5SU0FfUEtDUzFfT0FFUF9QQURESU5HLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoYWxnb3JpdGhtLmxhYmVsKSA7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShjcnlwdG9fX2RlZmF1bHQucHVibGljRW5jcnlwdChvcHRpb25zLCBkYXRhKSkuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgZGVjcnlwdE9BRVAoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleTogYC0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLWAsXG4gICAgICAgICAgICBwYWRkaW5nOiBjcnlwdG9fX2RlZmF1bHQuY29uc3RhbnRzLlJTQV9QS0NTMV9PQUVQX1BBRERJTkcsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChhbGdvcml0aG0ubGFiZWwpIDtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGNyeXB0b19fZGVmYXVsdC5wcml2YXRlRGVjcnlwdChvcHRpb25zLCBkYXRhKSkuYnVmZmVyO1xuICAgIH1cbn1cblJzYUNyeXB0by5wdWJsaWNLZXlVc2FnZXMgPSBbXCJ2ZXJpZnlcIiwgXCJlbmNyeXB0XCIsIFwid3JhcEtleVwiXTtcblJzYUNyeXB0by5wcml2YXRlS2V5VXNhZ2VzID0gW1wic2lnblwiLCBcImRlY3J5cHRcIiwgXCJ1bndyYXBLZXlcIl07XG5cbmNsYXNzIFJzYVNzYVByb3ZpZGVyIGV4dGVuZHMgY29yZS5Sc2FTc2FQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXG4gICAgICAgICAgICBcIlNIQS0xXCIsIFwiU0hBLTI1NlwiLCBcIlNIQS0zODRcIiwgXCJTSEEtNTEyXCIsXG4gICAgICAgICAgICBcInNoYWtlMTI4XCIsIFwic2hha2UyNTZcIixcbiAgICAgICAgICAgIFwiU0hBMy0yNTZcIiwgXCJTSEEzLTM4NFwiLCBcIlNIQTMtNTEyXCJcbiAgICAgICAgXTtcbiAgICB9XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IFJzYUNyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gUnNhQ3J5cHRvLnNpZ24oYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvblZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8udmVyaWZ5KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KHNpZ25hdHVyZSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IFJzYUNyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGlmICghKGludGVybmFsS2V5IGluc3RhbmNlb2YgUnNhUHJpdmF0ZUtleSB8fCBpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVB1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBSU0EgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBSc2FQc3NQcm92aWRlciBleHRlbmRzIGNvcmUuUnNhUHNzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1xuICAgICAgICAgICAgXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiLFxuICAgICAgICAgICAgXCJzaGFrZTEyOFwiLCBcInNoYWtlMjU2XCIsXG4gICAgICAgICAgICBcIlNIQTMtMjU2XCIsIFwiU0hBMy0zODRcIiwgXCJTSEEzLTUxMlwiXG4gICAgICAgIF07XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBSc2FDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by5zaWduKGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gUnNhQ3J5cHRvLnZlcmlmeShhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBSc2FDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBpZiAoIShpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgUlNBIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgU2hhQ3J5cHRvIHtcbiAgICBzdGF0aWMgc2l6ZShhbGdvcml0aG0pIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gMTYwO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0yNTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTI1NlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAyNTY7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTM4NFwiOlxuICAgICAgICAgICAgY2FzZSBcIlNIQTMtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDM4NDtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtNTEyXCI6XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy01MTJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gNTEyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgbmFtZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgZ2V0QWxnb3JpdGhtTmFtZShhbGdvcml0aG0pIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGExXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTI1NlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNoYTI1NlwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0zODRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGEzODRcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtNTEyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2hhNTEyXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGEzLTI1NlwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQTMtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2hhMy0zODRcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTUxMlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNoYTMtNTEyXCI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVucmVjb2duaXplZCBuYW1lXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBkaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGhhc2hBbGcgPSB0aGlzLmdldEFsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgaGFzaCA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVIYXNoKGhhc2hBbGcpXG4gICAgICAgICAgICAudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGhhc2gpLmJ1ZmZlcjtcbiAgICB9XG59XG5cbmNsYXNzIFJzYU9hZXBQcm92aWRlciBleHRlbmRzIGNvcmUuUnNhT2FlcFByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgUnNhQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIC4uLmFsZ29yaXRobSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IGRhdGFWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7XG4gICAgICAgIGNvbnN0IGtleVNpemUgPSBNYXRoLmNlaWwoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPj4gMyk7XG4gICAgICAgIGNvbnN0IGhhc2hTaXplID0gU2hhQ3J5cHRvLnNpemUoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gpID4+IDM7XG4gICAgICAgIGNvbnN0IGRhdGFMZW5ndGggPSBkYXRhVmlldy5ieXRlTGVuZ3RoO1xuICAgICAgICBjb25zdCBwc0xlbmd0aCA9IGtleVNpemUgLSBkYXRhTGVuZ3RoIC0gMiAqIGhhc2hTaXplIC0gMjtcbiAgICAgICAgaWYgKGRhdGFMZW5ndGggPiBrZXlTaXplIC0gMiAqIGhhc2hTaXplIC0gMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YSB0b28gbGFyZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IG5ldyBVaW50OEFycmF5KGtleVNpemUpO1xuICAgICAgICBjb25zdCBzZWVkID0gbWVzc2FnZS5zdWJhcnJheSgxLCBoYXNoU2l6ZSArIDEpO1xuICAgICAgICBjb25zdCBkYXRhQmxvY2sgPSBtZXNzYWdlLnN1YmFycmF5KGhhc2hTaXplICsgMSk7XG4gICAgICAgIGRhdGFCbG9jay5zZXQoZGF0YVZpZXcsIGhhc2hTaXplICsgcHNMZW5ndGggKyAxKTtcbiAgICAgICAgY29uc3QgbGFiZWxIYXNoID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZUhhc2goaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gubmFtZS5yZXBsYWNlKFwiLVwiLCBcIlwiKSlcbiAgICAgICAgICAgIC51cGRhdGUoY29yZS5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGFsZ29yaXRobS5sYWJlbCB8fCBuZXcgVWludDhBcnJheSgwKSkpXG4gICAgICAgICAgICAuZGlnZXN0KCk7XG4gICAgICAgIGRhdGFCbG9jay5zZXQobGFiZWxIYXNoLCAwKTtcbiAgICAgICAgZGF0YUJsb2NrW2hhc2hTaXplICsgcHNMZW5ndGhdID0gMTtcbiAgICAgICAgY3J5cHRvX19kZWZhdWx0LnJhbmRvbUZpbGxTeW5jKHNlZWQpO1xuICAgICAgICBjb25zdCBkYXRhQmxvY2tNYXNrID0gdGhpcy5tZ2YxKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLCBzZWVkLCBkYXRhQmxvY2subGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhQmxvY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRhdGFCbG9ja1tpXSBePSBkYXRhQmxvY2tNYXNrW2ldO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlZWRNYXNrID0gdGhpcy5tZ2YxKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLCBkYXRhQmxvY2ssIHNlZWQubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzZWVkW2ldIF49IHNlZWRNYXNrW2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW50ZXJuYWxLZXkucGVtKSB7XG4gICAgICAgICAgICBpbnRlcm5hbEtleS5wZW0gPSBgLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cXG4ke2ludGVybmFsS2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwa2NzMCA9IGNyeXB0b19fZGVmYXVsdC5wdWJsaWNFbmNyeXB0KHtcbiAgICAgICAgICAgIGtleTogaW50ZXJuYWxLZXkucGVtLFxuICAgICAgICAgICAgcGFkZGluZzogY3J5cHRvX19kZWZhdWx0LmNvbnN0YW50cy5SU0FfTk9fUEFERElORyxcbiAgICAgICAgfSwgQnVmZmVyLmZyb20obWVzc2FnZSkpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkocGtjczApLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IGtleVNpemUgPSBNYXRoLmNlaWwoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPj4gMyk7XG4gICAgICAgIGNvbnN0IGhhc2hTaXplID0gU2hhQ3J5cHRvLnNpemUoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gpID4+IDM7XG4gICAgICAgIGNvbnN0IGRhdGFMZW5ndGggPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgIGlmIChkYXRhTGVuZ3RoICE9PSBrZXlTaXplKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYWQgZGF0YVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWludGVybmFsS2V5LnBlbSkge1xuICAgICAgICAgICAgaW50ZXJuYWxLZXkucGVtID0gYC0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcbiR7aW50ZXJuYWxLZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGtjczAgPSBjcnlwdG9fX2RlZmF1bHQucHJpdmF0ZURlY3J5cHQoe1xuICAgICAgICAgICAga2V5OiBpbnRlcm5hbEtleS5wZW0sXG4gICAgICAgICAgICBwYWRkaW5nOiBjcnlwdG9fX2RlZmF1bHQuY29uc3RhbnRzLlJTQV9OT19QQURESU5HLFxuICAgICAgICB9LCBCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgIGNvbnN0IHogPSBwa2NzMFswXTtcbiAgICAgICAgY29uc3Qgc2VlZCA9IHBrY3MwLnN1YmFycmF5KDEsIGhhc2hTaXplICsgMSk7XG4gICAgICAgIGNvbnN0IGRhdGFCbG9jayA9IHBrY3MwLnN1YmFycmF5KGhhc2hTaXplICsgMSk7XG4gICAgICAgIGlmICh6ICE9PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZWNyeXB0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWVkTWFzayA9IHRoaXMubWdmMShpbnRlcm5hbEtleS5hbGdvcml0aG0uaGFzaCwgZGF0YUJsb2NrLCBzZWVkLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VlZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc2VlZFtpXSBePSBzZWVkTWFza1tpXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhQmxvY2tNYXNrID0gdGhpcy5tZ2YxKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLCBzZWVkLCBkYXRhQmxvY2subGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhQmxvY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRhdGFCbG9ja1tpXSBePSBkYXRhQmxvY2tNYXNrW2ldO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhYmVsSGFzaCA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVIYXNoKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLm5hbWUucmVwbGFjZShcIi1cIiwgXCJcIikpXG4gICAgICAgICAgICAudXBkYXRlKGNvcmUuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShhbGdvcml0aG0ubGFiZWwgfHwgbmV3IFVpbnQ4QXJyYXkoMCkpKVxuICAgICAgICAgICAgLmRpZ2VzdCgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhhc2hTaXplOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChsYWJlbEhhc2hbaV0gIT09IGRhdGFCbG9ja1tpXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRlY3J5cHRpb24gZmFpbGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBwc0VuZCA9IGhhc2hTaXplO1xuICAgICAgICBmb3IgKDsgcHNFbmQgPCBkYXRhQmxvY2subGVuZ3RoOyBwc0VuZCsrKSB7XG4gICAgICAgICAgICBjb25zdCBwc3ogPSBkYXRhQmxvY2tbcHNFbmRdO1xuICAgICAgICAgICAgaWYgKHBzeiA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBzeiAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRlY3J5cHRpb24gZmFpbGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwc0VuZCA9PT0gZGF0YUJsb2NrLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGVjcnlwdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcGtjczAgPSBkYXRhQmxvY2suc3ViYXJyYXkocHNFbmQgKyAxKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHBrY3MwKS5idWZmZXI7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBSc2FDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBpZiAoIShpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgUlNBIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtZ2YxKGFsZ29yaXRobSwgc2VlZCwgbGVuZ3RoID0gMCkge1xuICAgICAgICBjb25zdCBoYXNoU2l6ZSA9IFNoYUNyeXB0by5zaXplKGFsZ29yaXRobSkgPj4gMztcbiAgICAgICAgY29uc3QgbWFzayA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGNvdW50ZXIgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgY29uc3QgY2h1bmtzID0gTWF0aC5jZWlsKGxlbmd0aCAvIGhhc2hTaXplKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaHVua3M7IGkrKykge1xuICAgICAgICAgICAgY291bnRlclswXSA9IGkgPj4+IDI0O1xuICAgICAgICAgICAgY291bnRlclsxXSA9IChpID4+PiAxNikgJiAyNTU7XG4gICAgICAgICAgICBjb3VudGVyWzJdID0gKGkgPj4+IDgpICYgMjU1O1xuICAgICAgICAgICAgY291bnRlclszXSA9IGkgJiAyNTU7XG4gICAgICAgICAgICBjb25zdCBzdWJtYXNrID0gbWFzay5zdWJhcnJheShpICogaGFzaFNpemUpO1xuICAgICAgICAgICAgbGV0IGNodW5rID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZUhhc2goYWxnb3JpdGhtLm5hbWUucmVwbGFjZShcIi1cIiwgXCJcIikpXG4gICAgICAgICAgICAgICAgLnVwZGF0ZShzZWVkKVxuICAgICAgICAgICAgICAgIC51cGRhdGUoY291bnRlcilcbiAgICAgICAgICAgICAgICAuZGlnZXN0KCk7XG4gICAgICAgICAgICBpZiAoY2h1bmsubGVuZ3RoID4gc3VibWFzay5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjaHVuayA9IGNodW5rLnN1YmFycmF5KDAsIHN1Ym1hc2subGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1Ym1hc2suc2V0KGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWFzaztcbiAgICB9XG59XG5cbmNsYXNzIFJzYUVzUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSU0FFUy1QS0NTMS12MV81XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHVibGljS2V5OiBbXCJlbmNyeXB0XCIsIFwid3JhcEtleVwiXSxcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IFtcImRlY3J5cHRcIiwgXCJ1bndyYXBLZXlcIl0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBSc2FDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwicHVibGljRXhwb25lbnRcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCAmJiBhbGdvcml0aG0ucHVibGljRXhwb25lbnQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInB1YmxpY0V4cG9uZW50OiBNaXNzaW5nIG9yIG5vdCBhIFVpbnQ4QXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHVibGljRXhwb25lbnQgPSBDb252ZXJ0LlRvQmFzZTY0KGFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCk7XG4gICAgICAgIGlmICghKHB1YmxpY0V4cG9uZW50ID09PSBcIkF3PT1cIiB8fCBwdWJsaWNFeHBvbmVudCA9PT0gXCJBUUFCXCIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicHVibGljRXhwb25lbnQ6IE11c3QgYmUgWzNdIG9yIFsxLDAsMV1cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcIm1vZHVsdXNMZW5ndGhcIik7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMTAyNDpcbiAgICAgICAgICAgIGNhc2UgMjA0ODpcbiAgICAgICAgICAgIGNhc2UgNDA5NjpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm1vZHVsdXNMZW5ndGg6IE11c3QgYmUgMTAyNCwgMjA0OCwgb3IgNDA5NlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMudG9DcnlwdG9PcHRpb25zKGtleSk7XG4gICAgICAgIGNvbnN0IGVuYyA9IGNyeXB0by5wdWJsaWNFbmNyeXB0KG9wdGlvbnMsIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMudG9DcnlwdG9PcHRpb25zKGtleSk7XG4gICAgICAgIGNvbnN0IGRlYyA9IGNyeXB0by5wcml2YXRlRGVjcnlwdChvcHRpb25zLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkZWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IFJzYUNyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGlmICghKGludGVybmFsS2V5IGluc3RhbmNlb2YgUnNhUHJpdmF0ZUtleSB8fCBpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVB1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBSU0EgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvQ3J5cHRvT3B0aW9ucyhrZXkpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGtleS50eXBlLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBrZXk6IGAtLS0tLUJFR0lOICR7dHlwZX0gS0VZLS0tLS1cXG4ke2dldENyeXB0b0tleShrZXkpLmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgJHt0eXBlfSBLRVktLS0tLWAsXG4gICAgICAgICAgICBwYWRkaW5nOiBjcnlwdG8uY29uc3RhbnRzLlJTQV9QS0NTMV9QQURESU5HLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuY29uc3QgbmFtZWRPSURzID0ge1xuICAgIFwiMS4yLjg0MC4xMDA0NS4zLjEuN1wiOiBcIlAtMjU2XCIsXG4gICAgXCJQLTI1NlwiOiBcIjEuMi44NDAuMTAwNDUuMy4xLjdcIixcbiAgICBcIjEuMy4xMzIuMC4zNFwiOiBcIlAtMzg0XCIsXG4gICAgXCJQLTM4NFwiOiBcIjEuMy4xMzIuMC4zNFwiLFxuICAgIFwiMS4zLjEzMi4wLjM1XCI6IFwiUC01MjFcIixcbiAgICBcIlAtNTIxXCI6IFwiMS4zLjEzMi4wLjM1XCIsXG4gICAgXCIxLjMuMTMyLjAuMTBcIjogXCJLLTI1NlwiLFxuICAgIFwiSy0yNTZcIjogXCIxLjMuMTMyLjAuMTBcIixcbiAgICBcImJyYWlucG9vbFAxNjByMVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4xXCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuMVwiOiBcImJyYWlucG9vbFAxNjByMVwiLFxuICAgIFwiYnJhaW5wb29sUDE2MHQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjJcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4yXCI6IFwiYnJhaW5wb29sUDE2MHQxXCIsXG4gICAgXCJicmFpbnBvb2xQMTkycjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuM1wiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjNcIjogXCJicmFpbnBvb2xQMTkycjFcIixcbiAgICBcImJyYWlucG9vbFAxOTJ0MVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS40XCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuNFwiOiBcImJyYWlucG9vbFAxOTJ0MVwiLFxuICAgIFwiYnJhaW5wb29sUDIyNHIxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjVcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS41XCI6IFwiYnJhaW5wb29sUDIyNHIxXCIsXG4gICAgXCJicmFpbnBvb2xQMjI0dDFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuNlwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjZcIjogXCJicmFpbnBvb2xQMjI0dDFcIixcbiAgICBcImJyYWlucG9vbFAyNTZyMVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS43XCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuN1wiOiBcImJyYWlucG9vbFAyNTZyMVwiLFxuICAgIFwiYnJhaW5wb29sUDI1NnQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjhcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS44XCI6IFwiYnJhaW5wb29sUDI1NnQxXCIsXG4gICAgXCJicmFpbnBvb2xQMzIwcjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuOVwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjlcIjogXCJicmFpbnBvb2xQMzIwcjFcIixcbiAgICBcImJyYWlucG9vbFAzMjB0MVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4xMFwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjEwXCI6IFwiYnJhaW5wb29sUDMyMHQxXCIsXG4gICAgXCJicmFpbnBvb2xQMzg0cjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTFcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4xMVwiOiBcImJyYWlucG9vbFAzODRyMVwiLFxuICAgIFwiYnJhaW5wb29sUDM4NHQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjEyXCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTJcIjogXCJicmFpbnBvb2xQMzg0dDFcIixcbiAgICBcImJyYWlucG9vbFA1MTJyMVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4xM1wiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjEzXCI6IFwiYnJhaW5wb29sUDUxMnIxXCIsXG4gICAgXCJicmFpbnBvb2xQNTEydDFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTRcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4xNFwiOiBcImJyYWlucG9vbFA1MTJ0MVwiLFxufTtcbmZ1bmN0aW9uIGdldE9pZEJ5TmFtZWRDdXJ2ZSQxKG5hbWVkQ3VydmUpIHtcbiAgICBjb25zdCBvaWQgPSBuYW1lZE9JRHNbbmFtZWRDdXJ2ZV07XG4gICAgaWYgKCFvaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBjb252ZXJ0IFdlYkNyeXB0byBuYW1lZCBjdXJ2ZSAnJHtuYW1lZEN1cnZlfScgdG8gT0lEYCk7XG4gICAgfVxuICAgIHJldHVybiBvaWQ7XG59XG5cbmNsYXNzIEVjUHJpdmF0ZUtleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInByaXZhdGVcIjtcbiAgICB9XG4gICAgZ2V0S2V5KCkge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKHRoaXMuZGF0YSwgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgcmV0dXJuIEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnByaXZhdGVLZXksIGNvcmUuYXNuMS5FY1ByaXZhdGVLZXkpO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KCk7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICBrdHk6IFwiRUNcIixcbiAgICAgICAgICAgIGNydjogdGhpcy5hbGdvcml0aG0ubmFtZWRDdXJ2ZSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCFqc29uLmNydikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBnZXQgbmFtZWQgY3VydmUgZnJvbSBKV0suIFByb3BlcnR5ICdjcnYnIGlzIHJlcXVpcmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IFwiMS4yLjg0MC4xMDA0NS4yLjFcIjtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShuZXcgY29yZS5hc24xLk9iamVjdElkZW50aWZpZXIoZ2V0T2lkQnlOYW1lZEN1cnZlJDEoanNvbi5jcnYpKSk7XG4gICAgICAgIGNvbnN0IGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oanNvbiwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5FY1ByaXZhdGVLZXkgfSk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlci5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5jbGFzcyBFY1B1YmxpY0tleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInB1YmxpY1wiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBuZXcgY29yZS5hc24xLkVjUHVibGljS2V5KGtleUluZm8ucHVibGljS2V5KTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSgpO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAga3R5OiBcIkVDXCIsXG4gICAgICAgICAgICBjcnY6IHRoaXMuYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICBrZXlfb3BzOiB0aGlzLnVzYWdlcyxcbiAgICAgICAgICAgIGV4dDogdGhpcy5leHRyYWN0YWJsZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oanNvbiwgSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSkpO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghanNvbi5jcnYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKGBDYW5ub3QgZ2V0IG5hbWVkIGN1cnZlIGZyb20gSldLLiBQcm9wZXJ0eSAnY3J2JyBpcyByZXF1aXJlZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oanNvbiwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5FY1B1YmxpY0tleSB9KTtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTAwNDUuMi4xXCI7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShuZXcgY29yZS5hc24xLk9iamVjdElkZW50aWZpZXIoZ2V0T2lkQnlOYW1lZEN1cnZlJDEoanNvbi5jcnYpKSk7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5ID0gQXNuU2VyaWFsaXplci50b0FTTihrZXkpLnZhbHVlSGV4O1xuICAgICAgICB0aGlzLmRhdGEgPSBCdWZmZXIuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuY2xhc3MgU2hhMVByb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU0hBLTFcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGEyNTZQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQS0yNTZcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGEzODRQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQS0zODRcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGE1MTJQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQS01MTJcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGEzMjU2UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJTSEEzLTI1NlwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIFNoYTMzODRQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQTMtMzg0XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgfVxuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hhQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgU2hhMzUxMlByb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU0hBMy01MTJcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBFY0NyeXB0byB7XG4gICAgc3RhdGljIGFzeW5jIGdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gbmV3IEVjUHJpdmF0ZUtleSgpO1xuICAgICAgICBwcml2YXRlS2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgcHJpdmF0ZUtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBwcml2YXRlS2V5LnVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnByaXZhdGVLZXlVc2FnZXMuaW5kZXhPZih1c2FnZSkgIT09IC0xKTtcbiAgICAgICAgY29uc3QgcHVibGljS2V5ID0gbmV3IEVjUHVibGljS2V5KCk7XG4gICAgICAgIHB1YmxpY0tleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIHB1YmxpY0tleS5leHRyYWN0YWJsZSA9IHRydWU7XG4gICAgICAgIHB1YmxpY0tleS51c2FnZXMgPSBrZXlVc2FnZXMuZmlsdGVyKCh1c2FnZSkgPT4gdGhpcy5wdWJsaWNLZXlVc2FnZXMuaW5kZXhPZih1c2FnZSkgIT09IC0xKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IGNyeXB0b19fZGVmYXVsdC5nZW5lcmF0ZUtleVBhaXJTeW5jKFwiZWNcIiwge1xuICAgICAgICAgICAgbmFtZWRDdXJ2ZTogdGhpcy5nZXRPcGVuU1NMTmFtZWRDdXJ2ZShhbGdvcml0aG0ubmFtZWRDdXJ2ZSksXG4gICAgICAgICAgICBwdWJsaWNLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNwa2lcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcml2YXRlS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJwa2NzOFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHByaXZhdGVLZXkuZGF0YSA9IGtleXMucHJpdmF0ZUtleTtcbiAgICAgICAgcHVibGljS2V5LmRhdGEgPSBrZXlzLnB1YmxpY0tleTtcbiAgICAgICAgY29uc3QgcmVzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleSxcbiAgICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY3J5cHRvQWxnID0gU2hhQ3J5cHRvLmdldEFsZ29yaXRobU5hbWUoYWxnb3JpdGhtLmhhc2gpO1xuICAgICAgICBjb25zdCBzaWduZXIgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlU2lnbihjcnlwdG9BbGcpO1xuICAgICAgICBzaWduZXIudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKTtcbiAgICAgICAgaWYgKCFrZXkucGVtKSB7XG4gICAgICAgICAgICBrZXkucGVtID0gYC0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleToga2V5LnBlbSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnbmVyLnNpZ24ob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGVjU2lnbmF0dXJlID0gQXNuUGFyc2VyLnBhcnNlKHNpZ25hdHVyZSwgY29yZS5hc24xLkVjRHNhU2lnbmF0dXJlKTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlUmF3ID0gY29yZS5FY1V0aWxzLmVuY29kZVNpZ25hdHVyZShlY1NpZ25hdHVyZSwgY29yZS5FY0N1cnZlcy5nZXQoa2V5LmFsZ29yaXRobS5uYW1lZEN1cnZlKS5zaXplKTtcbiAgICAgICAgcmV0dXJuIHNpZ25hdHVyZVJhdy5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyB2ZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSBTaGFDcnlwdG8uZ2V0QWxnb3JpdGhtTmFtZShhbGdvcml0aG0uaGFzaCk7XG4gICAgICAgIGNvbnN0IHNpZ25lciA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVWZXJpZnkoY3J5cHRvQWxnKTtcbiAgICAgICAgc2lnbmVyLnVwZGF0ZShCdWZmZXIuZnJvbShkYXRhKSk7XG4gICAgICAgIGlmICgha2V5LnBlbSkge1xuICAgICAgICAgICAga2V5LnBlbSA9IGAtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAga2V5OiBrZXkucGVtLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBlY1NpZ25hdHVyZSA9IG5ldyBjb3JlLmFzbjEuRWNEc2FTaWduYXR1cmUoKTtcbiAgICAgICAgY29uc3QgbmFtZWRDdXJ2ZSA9IGNvcmUuRWNDdXJ2ZXMuZ2V0KGtleS5hbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZVBvaW50ID0gY29yZS5FY1V0aWxzLmRlY29kZVNpZ25hdHVyZShzaWduYXR1cmUsIG5hbWVkQ3VydmUuc2l6ZSk7XG4gICAgICAgIGVjU2lnbmF0dXJlLnIgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihzaWduYXR1cmVQb2ludC5yKTtcbiAgICAgICAgZWNTaWduYXR1cmUucyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHNpZ25hdHVyZVBvaW50LnMpO1xuICAgICAgICBjb25zdCBlY1NpZ25hdHVyZVJhdyA9IEJ1ZmZlci5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGVjU2lnbmF0dXJlKSk7XG4gICAgICAgIGNvbnN0IG9rID0gc2lnbmVyLnZlcmlmeShvcHRpb25zLCBlY1NpZ25hdHVyZVJhdyk7XG4gICAgICAgIHJldHVybiBvaztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlcml2ZUJpdHMoYWxnb3JpdGhtLCBiYXNlS2V5LCBsZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY3J5cHRvQWxnID0gdGhpcy5nZXRPcGVuU1NMTmFtZWRDdXJ2ZShiYXNlS2V5LmFsZ29yaXRobS5uYW1lZEN1cnZlKTtcbiAgICAgICAgY29uc3QgZWNkaCA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVFQ0RIKGNyeXB0b0FsZyk7XG4gICAgICAgIGNvbnN0IGFzblByaXZhdGVLZXkgPSBBc25QYXJzZXIucGFyc2UoYmFzZUtleS5kYXRhLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICBjb25zdCBhc25FY1ByaXZhdGVLZXkgPSBBc25QYXJzZXIucGFyc2UoYXNuUHJpdmF0ZUtleS5wcml2YXRlS2V5LCBjb3JlLmFzbjEuRWNQcml2YXRlS2V5KTtcbiAgICAgICAgZWNkaC5zZXRQcml2YXRlS2V5KEJ1ZmZlci5mcm9tKGFzbkVjUHJpdmF0ZUtleS5wcml2YXRlS2V5KSk7XG4gICAgICAgIGNvbnN0IGFzblB1YmxpY0tleSA9IEFzblBhcnNlci5wYXJzZShhbGdvcml0aG0ucHVibGljLmRhdGEsIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgY29uc3QgYml0cyA9IGVjZGguY29tcHV0ZVNlY3JldChCdWZmZXIuZnJvbShhc25QdWJsaWNLZXkucHVibGljS2V5KSk7XG4gICAgICAgIGlmIChsZW5ndGggPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBiaXRzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShiaXRzKS5idWZmZXIuc2xpY2UoMCwgbGVuZ3RoID4+IDMpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSk7XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGtleS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwdWJsaWNLZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKGtleS5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1YmxpY0tleUluZm8ucHVibGljS2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3JhdycsIHBrY3M4JyBvciAnc3BraSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBqd2sgPSBrZXlEYXRhO1xuICAgICAgICAgICAgICAgIGlmIChqd2suZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuRWNQcml2YXRlS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oa2V5RGF0YSwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5FY1B1YmxpY0tleSB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBuZXcgY29yZS5hc24xLkVjUHVibGljS2V5KGtleURhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFB1YmxpY0tleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShuZXcgVWludDhBcnJheShrZXlEYXRhKSwgY29yZS5hc24xLlB1YmxpY0tleUluZm8pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IG5ldyBjb3JlLmFzbjEuRWNQdWJsaWNLZXkoa2V5SW5mby5wdWJsaWNLZXkpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0S2V5UGFyYW1ldGVycyhrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5wYXJhbWV0ZXJzLCBhbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShuZXcgVWludDhBcnJheShrZXlEYXRhKSwgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wcml2YXRlS2V5LCBjb3JlLmFzbjEuRWNQcml2YXRlS2V5KTtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydEtleVBhcmFtZXRlcnMoa2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMsIGFsZ29yaXRobS5uYW1lZEN1cnZlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycsICdyYXcnLCAncGtjczgnIG9yICdzcGtpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXNzZXJ0S2V5UGFyYW1ldGVycyhwYXJhbWV0ZXJzLCBuYW1lZEN1cnZlKSB7XG4gICAgICAgIGlmICghcGFyYW1ldGVycykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuQ3J5cHRvRXJyb3IoXCJLZXkgaW5mbyBkb2Vzbid0IGhhdmUgcmVxdWlyZWQgcGFyYW1ldGVyc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmFtZWRDdXJ2ZUlkZW50aWZpZXIgPSBcIlwiO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmFtZWRDdXJ2ZUlkZW50aWZpZXIgPSBBc25QYXJzZXIucGFyc2UocGFyYW1ldGVycywgY29yZS5hc24xLk9iamVjdElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5DcnlwdG9FcnJvcihcIkNhbm5vdCByZWFkIGtleSBpbmZvIHBhcmFtZXRlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldE9pZEJ5TmFtZWRDdXJ2ZSQxKG5hbWVkQ3VydmUpICE9PSBuYW1lZEN1cnZlSWRlbnRpZmllcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuQ3J5cHRvRXJyb3IoXCJLZXkgaW5mbyBwYXJhbWV0ZXIgZG9lc24ndCBtYXRjaCB0byBuYW1lZCBjdXJ2ZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjEwMDQ1LjIuMVwiO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0ucGFyYW1ldGVycyA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKG5ldyBjb3JlLmFzbjEuT2JqZWN0SWRlbnRpZmllcihnZXRPaWRCeU5hbWVkQ3VydmUkMShhbGdvcml0aG0ubmFtZWRDdXJ2ZSkpKTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5ID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUoYXNuS2V5KTtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEVjUHJpdmF0ZUtleSgpO1xuICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlci5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IE9iamVjdC5hc3NpZ24oe30sIGFsZ29yaXRobSk7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlB1YmxpY0tleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjEwMDQ1LjIuMVwiO1xuICAgICAgICBjb25zdCBuYW1lZEN1cnZlID0gZ2V0T2lkQnlOYW1lZEN1cnZlJDEoYWxnb3JpdGhtLm5hbWVkQ3VydmUpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5wYXJhbWV0ZXJzID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUobmV3IGNvcmUuYXNuMS5PYmplY3RJZGVudGlmaWVyKG5hbWVkQ3VydmUpKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXkgPSBhc25LZXkudmFsdWU7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBFY1B1YmxpY0tleSgpO1xuICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlci5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IE9iamVjdC5hc3NpZ24oe30sIGFsZ29yaXRobSk7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0T3BlblNTTE5hbWVkQ3VydmUoY3VydmUpIHtcbiAgICAgICAgc3dpdGNoIChjdXJ2ZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiUC0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJwcmltZTI1NnYxXCI7XG4gICAgICAgICAgICBjYXNlIFwiSy0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzZWNwMjU2azFcIjtcbiAgICAgICAgICAgIGNhc2UgXCJQLTM4NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNlY3AzODRyMVwiO1xuICAgICAgICAgICAgY2FzZSBcIlAtNTIxXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2VjcDUyMXIxXCI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBjdXJ2ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkVjQ3J5cHRvLnB1YmxpY0tleVVzYWdlcyA9IFtcInZlcmlmeVwiXTtcbkVjQ3J5cHRvLnByaXZhdGVLZXlVc2FnZXMgPSBbXCJzaWduXCIsIFwiZGVyaXZlS2V5XCIsIFwiZGVyaXZlQml0c1wiXTtcblxuY2xhc3MgRWNkc2FQcm92aWRlciBleHRlbmRzIGNvcmUuRWNkc2FQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZWRDdXJ2ZXMgPSBjb3JlLkVjQ3VydmVzLm5hbWVzO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1xuICAgICAgICAgICAgXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiLFxuICAgICAgICAgICAgXCJzaGFrZTEyOFwiLCBcInNoYWtlMjU2XCIsXG4gICAgICAgICAgICBcIlNIQTMtMjU2XCIsIFwiU0hBMy0zODRcIiwgXCJTSEEzLTUxMlwiXG4gICAgICAgIF07XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBFY0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRWNDcnlwdG8uc2lnbihhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEVjQ3J5cHRvLnZlcmlmeShhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBFY0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEVjQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCEoaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBFY1ByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBFY1B1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBFQyBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEVjZGhQcm92aWRlciBleHRlbmRzIGNvcmUuRWNkaFByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lZEN1cnZlcyA9IGNvcmUuRWNDdXJ2ZXMubmFtZXM7XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBFY0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBFY0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEVjQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCEoaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBFY1ByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBFY1B1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBFQyBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgb25EZXJpdmVCaXRzKGFsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGJpdHMgPSBhd2FpdCBFY0NyeXB0by5kZXJpdmVCaXRzKHsgLi4uYWxnb3JpdGhtLCBwdWJsaWM6IGdldENyeXB0b0tleShhbGdvcml0aG0ucHVibGljKSB9LCBnZXRDcnlwdG9LZXkoYmFzZUtleSksIGxlbmd0aCk7XG4gICAgICAgIHJldHVybiBiaXRzO1xuICAgIH1cbn1cblxuY29uc3QgZWRPSURzID0ge1xuICAgIFtjb3JlLmFzbjEuaWRFZDQ0OF06IFwiRWQ0NDhcIixcbiAgICBcImVkNDQ4XCI6IGNvcmUuYXNuMS5pZEVkNDQ4LFxuICAgIFtjb3JlLmFzbjEuaWRYNDQ4XTogXCJYNDQ4XCIsXG4gICAgXCJ4NDQ4XCI6IGNvcmUuYXNuMS5pZFg0NDgsXG4gICAgW2NvcmUuYXNuMS5pZEVkMjU1MTldOiBcIkVkMjU1MTlcIixcbiAgICBcImVkMjU1MTlcIjogY29yZS5hc24xLmlkRWQyNTUxOSxcbiAgICBbY29yZS5hc24xLmlkWDI1NTE5XTogXCJYMjU1MTlcIixcbiAgICBcIngyNTUxOVwiOiBjb3JlLmFzbjEuaWRYMjU1MTksXG59O1xuZnVuY3Rpb24gZ2V0T2lkQnlOYW1lZEN1cnZlKG5hbWVkQ3VydmUpIHtcbiAgICBjb25zdCBvaWQgPSBlZE9JRHNbbmFtZWRDdXJ2ZS50b0xvd2VyQ2FzZSgpXTtcbiAgICBpZiAoIW9pZCkge1xuICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihgQ2Fubm90IGNvbnZlcnQgV2ViQ3J5cHRvIG5hbWVkIGN1cnZlICcke25hbWVkQ3VydmV9JyB0byBPSURgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9pZDtcbn1cblxuY2xhc3MgRWRQcml2YXRlS2V5IGV4dGVuZHMgQXN5bW1ldHJpY0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IFwicHJpdmF0ZVwiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICByZXR1cm4gQXNuUGFyc2VyLnBhcnNlKGtleUluZm8ucHJpdmF0ZUtleSwgY29yZS5hc24xLkN1cnZlUHJpdmF0ZUtleSk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGt0eTogXCJPS1BcIixcbiAgICAgICAgICAgIGNydjogdGhpcy5hbGdvcml0aG0ubmFtZWRDdXJ2ZSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCFqc29uLmNydikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBnZXQgbmFtZWQgY3VydmUgZnJvbSBKV0suIFByb3BlcnR5ICdjcnYnIGlzIHJlcXVpcmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IGdldE9pZEJ5TmFtZWRDdXJ2ZShqc29uLmNydik7XG4gICAgICAgIGNvbnN0IGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oanNvbiwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5DdXJ2ZVByaXZhdGVLZXkgfSk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlci5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5jbGFzcyBFZFB1YmxpY0tleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInB1YmxpY1wiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBrZXlJbmZvLnB1YmxpY0tleTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSgpO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAga3R5OiBcIk9LUFwiLFxuICAgICAgICAgICAgY3J2OiB0aGlzLmFsZ29yaXRobS5uYW1lZEN1cnZlLFxuICAgICAgICAgICAga2V5X29wczogdGhpcy51c2FnZXMsXG4gICAgICAgICAgICBleHQ6IHRoaXMuZXh0cmFjdGFibGUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGpzb24sIHtcbiAgICAgICAgICAgIHg6IENvbnZlcnQuVG9CYXNlNjRVcmwoa2V5KVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBpZiAoIWpzb24uY3J2KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihgQ2Fubm90IGdldCBuYW1lZCBjdXJ2ZSBmcm9tIEpXSy4gUHJvcGVydHkgJ2NydicgaXMgcmVxdWlyZWRgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWpzb24ueCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBnZXQgcHJvcGVydHkgZnJvbSBKV0suIFByb3BlcnR5ICd4JyBpcyByZXF1aXJlZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlB1YmxpY0tleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gZ2V0T2lkQnlOYW1lZEN1cnZlKGpzb24uY3J2KTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXkgPSBDb252ZXJ0LkZyb21CYXNlNjRVcmwoanNvbi54KTtcbiAgICAgICAgdGhpcy5kYXRhID0gQnVmZmVyLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmNsYXNzIEVkQ3J5cHRvIHtcbiAgICBzdGF0aWMgYXN5bmMgZ2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBuZXcgRWRQcml2YXRlS2V5KCk7XG4gICAgICAgIHByaXZhdGVLZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBwcml2YXRlS2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIHByaXZhdGVLZXkudXNhZ2VzID0ga2V5VXNhZ2VzLmZpbHRlcigodXNhZ2UpID0+IHRoaXMucHJpdmF0ZUtleVVzYWdlcy5pbmRleE9mKHVzYWdlKSAhPT0gLTEpO1xuICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSBuZXcgRWRQdWJsaWNLZXkoKTtcbiAgICAgICAgcHVibGljS2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgcHVibGljS2V5LmV4dHJhY3RhYmxlID0gdHJ1ZTtcbiAgICAgICAgcHVibGljS2V5LnVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnB1YmxpY0tleVVzYWdlcy5pbmRleE9mKHVzYWdlKSAhPT0gLTEpO1xuICAgICAgICBjb25zdCB0eXBlID0gYWxnb3JpdGhtLm5hbWVkQ3VydmUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IGNyeXB0b19fZGVmYXVsdC5nZW5lcmF0ZUtleVBhaXJTeW5jKHR5cGUsIHtcbiAgICAgICAgICAgIHB1YmxpY0tleUVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3BraVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByaXZhdGVLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInBrY3M4XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcHJpdmF0ZUtleS5kYXRhID0ga2V5cy5wcml2YXRlS2V5O1xuICAgICAgICBwdWJsaWNLZXkuZGF0YSA9IGtleXMucHVibGljS2V5O1xuICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5LFxuICAgICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgc2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBpZiAoIWtleS5wZW0pIHtcbiAgICAgICAgICAgIGtleS5wZW0gPSBgLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAga2V5OiBrZXkucGVtLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBjcnlwdG9fX2RlZmF1bHQuc2lnbihudWxsLCBCdWZmZXIuZnJvbShkYXRhKSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBjb3JlLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHNpZ25hdHVyZSk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyB2ZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBpZiAoIWtleS5wZW0pIHtcbiAgICAgICAgICAgIGtleS5wZW0gPSBgLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cXG4ke2tleS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleToga2V5LnBlbSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb2sgPSBjcnlwdG9fX2RlZmF1bHQudmVyaWZ5KG51bGwsIEJ1ZmZlci5mcm9tKGRhdGEpLCBvcHRpb25zLCBCdWZmZXIuZnJvbShzaWduYXR1cmUpKTtcbiAgICAgICAgcmV0dXJuIG9rO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlUHVibGljS2V5KHtcbiAgICAgICAgICAgIGtleTogYWxnb3JpdGhtLnB1YmxpYy5kYXRhLFxuICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgdHlwZTogXCJzcGtpXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZVByaXZhdGVLZXkoe1xuICAgICAgICAgICAga2V5OiBiYXNlS2V5LmRhdGEsXG4gICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICB0eXBlOiBcInBrY3M4XCIsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBiaXRzID0gY3J5cHRvX19kZWZhdWx0LmRpZmZpZUhlbGxtYW4oe1xuICAgICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICAgICAgcHJpdmF0ZUtleSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShiaXRzKS5idWZmZXIuc2xpY2UoMCwgbGVuZ3RoID4+IDMpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSk7XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGtleS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwdWJsaWNLZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKGtleS5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1YmxpY0tleUluZm8ucHVibGljS2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3JhdycsIHBrY3M4JyBvciAnc3BraSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBqd2sgPSBrZXlEYXRhO1xuICAgICAgICAgICAgICAgIGlmIChqd2suZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuQ3VydmVQcml2YXRlS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghandrLngpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXlEYXRhOiBDYW5ub3QgZ2V0IHJlcXVpcmVkICd4JyBmaWxlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoQ29udmVydC5Gcm9tQmFzZTY0VXJsKGp3ay54KSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoa2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKG5ldyBVaW50OEFycmF5KGtleURhdGEpLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGtleUluZm8ucHVibGljS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKG5ldyBVaW50OEFycmF5KGtleURhdGEpLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnByaXZhdGVLZXksIGNvcmUuYXNuMS5DdXJ2ZVByaXZhdGVLZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFByaXZhdGVLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3JhdycsICdwa2NzOCcgb3IgJ3Nwa2knXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBpbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBFZFByaXZhdGVLZXkoKTtcbiAgICAgICAga2V5LmZyb21KU09OKHtcbiAgICAgICAgICAgIGNydjogYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICBkOiBDb252ZXJ0LlRvQmFzZTY0VXJsKGFzbktleS5kKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBPYmplY3QuYXNzaWduKHt9LCBhbGdvcml0aG0pO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydFB1YmxpY0tleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgRWRQdWJsaWNLZXkoKTtcbiAgICAgICAga2V5LmZyb21KU09OKHtcbiAgICAgICAgICAgIGNydjogYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICB4OiBDb252ZXJ0LlRvQmFzZTY0VXJsKGFzbktleSksXG4gICAgICAgIH0pO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gT2JqZWN0LmFzc2lnbih7fSwgYWxnb3JpdGhtKTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxufVxuRWRDcnlwdG8ucHVibGljS2V5VXNhZ2VzID0gW1widmVyaWZ5XCJdO1xuRWRDcnlwdG8ucHJpdmF0ZUtleVVzYWdlcyA9IFtcInNpZ25cIiwgXCJkZXJpdmVLZXlcIiwgXCJkZXJpdmVCaXRzXCJdO1xuXG5jbGFzcyBFZERzYVByb3ZpZGVyIGV4dGVuZHMgY29yZS5FZERzYVByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgRWRDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbmFtZWRDdXJ2ZTogYWxnb3JpdGhtLm5hbWVkQ3VydmUucmVwbGFjZSgvXmVkL2ksIFwiRWRcIiksXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRWRDcnlwdG8uc2lnbihhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEVkQ3J5cHRvLnZlcmlmeShhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBFZENyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEVkQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG59XG5cbmNsYXNzIEVjZGhFc1Byb3ZpZGVyIGV4dGVuZHMgY29yZS5FY2RoRXNQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IEVkQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIG5hbWVkQ3VydmU6IGFsZ29yaXRobS5uYW1lZEN1cnZlLnRvVXBwZXJDYXNlKCksXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBiaXRzID0gYXdhaXQgRWRDcnlwdG8uZGVyaXZlQml0cyh7IC4uLmFsZ29yaXRobSwgcHVibGljOiBnZXRDcnlwdG9LZXkoYWxnb3JpdGhtLnB1YmxpYykgfSwgZ2V0Q3J5cHRvS2V5KGJhc2VLZXkpLCBsZW5ndGgpO1xuICAgICAgICByZXR1cm4gYml0cztcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEVkQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgRWRDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbn1cblxuY2xhc3MgUGJrZGZDcnlwdG9LZXkgZXh0ZW5kcyBDcnlwdG9LZXkge1xufVxuXG5jbGFzcyBQYmtkZjJQcm92aWRlciBleHRlbmRzIGNvcmUuUGJrZGYyUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2FsdCA9IGNvcmUuQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoYWxnb3JpdGhtLnNhbHQpO1xuICAgICAgICAgICAgY29uc3QgaGFzaCA9IGFsZ29yaXRobS5oYXNoLm5hbWUucmVwbGFjZShcIi1cIiwgXCJcIik7XG4gICAgICAgICAgICBjcnlwdG9fX2RlZmF1bHQucGJrZGYyKGdldENyeXB0b0tleShiYXNlS2V5KS5kYXRhLCBCdWZmZXIuZnJvbShzYWx0KSwgYWxnb3JpdGhtLml0ZXJhdGlvbnMsIGxlbmd0aCA+PiAzLCBoYXNoLCAoZXJyLCBkZXJpdmVkQml0cykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBVaW50OEFycmF5KGRlcml2ZWRCaXRzKS5idWZmZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJyYXdcIikge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gbmV3IFBia2RmQ3J5cHRvS2V5KCk7XG4gICAgICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlci5mcm9tKGtleURhdGEpO1xuICAgICAgICAgICAga2V5LmFsZ29yaXRobSA9IHsgbmFtZTogdGhpcy5uYW1lIH07XG4gICAgICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ3JhdydcIik7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgUGJrZGZDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgUEJLREYgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBIbWFjQ3J5cHRvS2V5IGV4dGVuZHMgQ3J5cHRvS2V5IHtcbiAgICBnZXQgYWxnKCkge1xuICAgICAgICBjb25zdCBoYXNoID0gdGhpcy5hbGdvcml0aG0uaGFzaC5uYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBgSFMke2hhc2gucmVwbGFjZShcIlNIQS1cIiwgXCJcIil9YDtcbiAgICB9XG4gICAgc2V0IGFsZyh2YWx1ZSkge1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJrXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybENvbnZlcnRlciB9KVxuXSwgSG1hY0NyeXB0b0tleS5wcm90b3R5cGUsIFwiZGF0YVwiLCB2b2lkIDApO1xuXG5jbGFzcyBIbWFjUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkhtYWNQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gKGFsZ29yaXRobS5sZW5ndGggfHwgdGhpcy5nZXREZWZhdWx0TGVuZ3RoKGFsZ29yaXRobS5oYXNoLm5hbWUpKSA+PiAzIDw8IDM7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBIbWFjQ3J5cHRvS2V5KCk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSB7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH07XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICBrZXkuZGF0YSA9IGNyeXB0b19fZGVmYXVsdC5yYW5kb21CeXRlcyhsZW5ndGggPj4gMyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25TaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNyeXB0b0FsZyA9IFNoYUNyeXB0by5nZXRBbGdvcml0aG1OYW1lKGtleS5hbGdvcml0aG0uaGFzaCk7XG4gICAgICAgIGNvbnN0IGhtYWMgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlSG1hYyhjcnlwdG9BbGcsIGdldENyeXB0b0tleShrZXkpLmRhdGEpXG4gICAgICAgICAgICAudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGhtYWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSBTaGFDcnlwdG8uZ2V0QWxnb3JpdGhtTmFtZShrZXkuYWxnb3JpdGhtLmhhc2gpO1xuICAgICAgICBjb25zdCBobWFjID0gY3J5cHRvX19kZWZhdWx0LmNyZWF0ZUhtYWMoY3J5cHRvQWxnLCBnZXRDcnlwdG9LZXkoa2V5KS5kYXRhKVxuICAgICAgICAgICAgLnVwZGF0ZShCdWZmZXIuZnJvbShkYXRhKSkuZGlnZXN0KCk7XG4gICAgICAgIHJldHVybiBobWFjLmNvbXBhcmUoQnVmZmVyLmZyb20oc2lnbmF0dXJlKSkgPT09IDA7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGxldCBrZXk7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICBrZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBIbWFjQ3J5cHRvS2V5IH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIGtleSA9IG5ldyBIbWFjQ3J5cHRvS2V5KCk7XG4gICAgICAgICAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIuZnJvbShrZXlEYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycgb3IgJ3JhdydcIik7XG4gICAgICAgIH1cbiAgICAgICAga2V5LmFsZ29yaXRobSA9IHtcbiAgICAgICAgICAgIGhhc2g6IHsgbmFtZTogYWxnb3JpdGhtLmhhc2gubmFtZSB9LFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBrZXkuZGF0YS5sZW5ndGggPDwgMyxcbiAgICAgICAgfTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBKc29uU2VyaWFsaXplci50b0pTT04oZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShnZXRDcnlwdG9LZXkoa2V5KS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snIG9yICdyYXcnXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgSG1hY0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBITUFDIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgSGtkZkNyeXB0b0tleSBleHRlbmRzIENyeXB0b0tleSB7XG59XG5cbmNsYXNzIEhrZGZQcm92aWRlciBleHRlbmRzIGNvcmUuSGtkZlByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBpZiAoZm9ybWF0LnRvTG93ZXJDYXNlKCkgIT09IFwicmF3XCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEhrZGZDcnlwdG9LZXkoKTtcbiAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIuZnJvbShrZXlEYXRhKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IHsgbmFtZTogdGhpcy5uYW1lIH07XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhwYXJhbXMsIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBoYXNoID0gcGFyYW1zLmhhc2gubmFtZS5yZXBsYWNlKFwiLVwiLCBcIlwiKTtcbiAgICAgICAgY29uc3QgaGFzaExlbmd0aCA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVIYXNoKGhhc2gpLmRpZ2VzdCgpLmxlbmd0aDtcbiAgICAgICAgY29uc3QgYnl0ZUxlbmd0aCA9IGxlbmd0aCAvIDg7XG4gICAgICAgIGNvbnN0IGluZm8gPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIkMS50b1VpbnQ4QXJyYXkocGFyYW1zLmluZm8pO1xuICAgICAgICBjb25zdCBQUksgPSBjcnlwdG9fX2RlZmF1bHQuY3JlYXRlSG1hYyhoYXNoLCBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIkMS50b1VpbnQ4QXJyYXkocGFyYW1zLnNhbHQpKVxuICAgICAgICAgICAgLnVwZGF0ZShCdWZmZXJTb3VyY2VDb252ZXJ0ZXIkMS50b1VpbnQ4QXJyYXkoZ2V0Q3J5cHRvS2V5KGJhc2VLZXkpLmRhdGEpKVxuICAgICAgICAgICAgLmRpZ2VzdCgpO1xuICAgICAgICBjb25zdCBibG9ja3MgPSBbQnVmZmVyLmFsbG9jKDApXTtcbiAgICAgICAgY29uc3QgYmxvY2tDb3VudCA9IE1hdGguY2VpbChieXRlTGVuZ3RoIC8gaGFzaExlbmd0aCkgKyAxO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGJsb2NrQ291bnQ7ICsraSkge1xuICAgICAgICAgICAgYmxvY2tzLnB1c2goY3J5cHRvX19kZWZhdWx0LmNyZWF0ZUhtYWMoaGFzaCwgUFJLKVxuICAgICAgICAgICAgICAgIC51cGRhdGUoQnVmZmVyLmNvbmNhdChbYmxvY2tzW2kgLSAxXSwgaW5mbywgQnVmZmVyLmZyb20oW2ldKV0pKVxuICAgICAgICAgICAgICAgIC5kaWdlc3QoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYmxvY2tzKS5zbGljZSgwLCBieXRlTGVuZ3RoKTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBIa2RmQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IEhLREYgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBTaGFrZUNyeXB0byB7XG4gICAgc3RhdGljIGRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgY29uc3QgaGFzaCA9IGNyeXB0b19fZGVmYXVsdC5jcmVhdGVIYXNoKGFsZ29yaXRobS5uYW1lLnRvTG93ZXJDYXNlKCksIHsgb3V0cHV0TGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoIH0pXG4gICAgICAgICAgICAudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGhhc2gpLmJ1ZmZlcjtcbiAgICB9XG59XG5cbmNsYXNzIFNoYWtlMTI4UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlNoYWtlMTI4UHJvdmlkZXIge1xuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hha2VDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGFrZTI1NlByb3ZpZGVyIGV4dGVuZHMgY29yZS5TaGFrZTI1NlByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYWtlQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgU3VidGxlQ3J5cHRvIGV4dGVuZHMgY29yZS5TdWJ0bGVDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzQ2JjUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzQ3RyUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzR2NtUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzQ21hY1Byb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEFlc0t3UHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzRWNiUHJvdmlkZXIoKSk7XG4gICAgICAgIGNvbnN0IGNpcGhlcnMgPSBjcnlwdG8uZ2V0Q2lwaGVycygpO1xuICAgICAgICBpZiAoY2lwaGVycy5pbmNsdWRlcyhcImRlcy1jYmNcIikpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgRGVzQ2JjUHJvdmlkZXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBEZXNFZGUzQ2JjUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUnNhU3NhUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUnNhUHNzUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUnNhT2FlcFByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFJzYUVzUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgRWNkc2FQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFY2RoUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hhMVByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTI1NlByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTM4NFByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTUxMlByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFBia2RmMlByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEhtYWNQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBIa2RmUHJvdmlkZXIoKSk7XG4gICAgICAgIGNvbnN0IG5vZGVNYWpvclZlcnNpb24gPSAoX2EgPSAvXnYoXFxkKykvLmV4ZWMocHJvY2Vzcy52ZXJzaW9uKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzFdO1xuICAgICAgICBpZiAobm9kZU1ham9yVmVyc2lvbiAmJiBwYXJzZUludChub2RlTWFqb3JWZXJzaW9uLCAxMCkgPj0gMTIpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hha2UxMjhQcm92aWRlcigpKTtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hha2UyNTZQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoYXNoZXMgPSBjcnlwdG8uZ2V0SGFzaGVzKCk7XG4gICAgICAgIGlmIChoYXNoZXMuaW5jbHVkZXMoXCJzaGEzLTI1NlwiKSkge1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBTaGEzMjU2UHJvdmlkZXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc2hlcy5pbmNsdWRlcyhcInNoYTMtMzg0XCIpKSB7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTMzODRQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzaGVzLmluY2x1ZGVzKFwic2hhMy01MTJcIikpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hhMzUxMlByb3ZpZGVyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlTWFqb3JWZXJzaW9uICYmIHBhcnNlSW50KG5vZGVNYWpvclZlcnNpb24sIDEwKSA+PSAxNCkge1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFZERzYVByb3ZpZGVyKCkpO1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFY2RoRXNQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQ3J5cHRvIGV4dGVuZHMgY29yZS5DcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnN1YnRsZSA9IG5ldyBTdWJ0bGVDcnlwdG8oKTtcbiAgICB9XG4gICAgZ2V0UmFuZG9tVmFsdWVzKGFycmF5KSB7XG4gICAgICAgIGlmICghQXJyYXlCdWZmZXIuaXNWaWV3KGFycmF5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdnZXRSYW5kb21WYWx1ZXMnIG9uICdDcnlwdG8nOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnQXJyYXlCdWZmZXJWaWV3J1wiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShhcnJheS5idWZmZXIsIGFycmF5LmJ5dGVPZmZzZXQsIGFycmF5LmJ5dGVMZW5ndGgpO1xuICAgICAgICBjcnlwdG9fX2RlZmF1bHQucmFuZG9tRmlsbFN5bmMoYnVmZmVyKTtcbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cbn1cblxuZXhwb3J0IHsgQ3J5cHRvIH07XG4iLCAiZXhwb3J0IHZhciB0b3AgPSAndG9wJztcbmV4cG9ydCB2YXIgYm90dG9tID0gJ2JvdHRvbSc7XG5leHBvcnQgdmFyIHJpZ2h0ID0gJ3JpZ2h0JztcbmV4cG9ydCB2YXIgbGVmdCA9ICdsZWZ0JztcbmV4cG9ydCB2YXIgYXV0byA9ICdhdXRvJztcbmV4cG9ydCB2YXIgYmFzZVBsYWNlbWVudHMgPSBbdG9wLCBib3R0b20sIHJpZ2h0LCBsZWZ0XTtcbmV4cG9ydCB2YXIgc3RhcnQgPSAnc3RhcnQnO1xuZXhwb3J0IHZhciBlbmQgPSAnZW5kJztcbmV4cG9ydCB2YXIgY2xpcHBpbmdQYXJlbnRzID0gJ2NsaXBwaW5nUGFyZW50cyc7XG5leHBvcnQgdmFyIHZpZXdwb3J0ID0gJ3ZpZXdwb3J0JztcbmV4cG9ydCB2YXIgcG9wcGVyID0gJ3BvcHBlcic7XG5leHBvcnQgdmFyIHJlZmVyZW5jZSA9ICdyZWZlcmVuY2UnO1xuZXhwb3J0IHZhciB2YXJpYXRpb25QbGFjZW1lbnRzID0gLyojX19QVVJFX18qL2Jhc2VQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGFjYy5jb25jYXQoW3BsYWNlbWVudCArIFwiLVwiICsgc3RhcnQsIHBsYWNlbWVudCArIFwiLVwiICsgZW5kXSk7XG59LCBbXSk7XG5leHBvcnQgdmFyIHBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovW10uY29uY2F0KGJhc2VQbGFjZW1lbnRzLCBbYXV0b10pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGFjYy5jb25jYXQoW3BsYWNlbWVudCwgcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTsgLy8gbW9kaWZpZXJzIHRoYXQgbmVlZCB0byByZWFkIHRoZSBET01cblxuZXhwb3J0IHZhciBiZWZvcmVSZWFkID0gJ2JlZm9yZVJlYWQnO1xuZXhwb3J0IHZhciByZWFkID0gJ3JlYWQnO1xuZXhwb3J0IHZhciBhZnRlclJlYWQgPSAnYWZ0ZXJSZWFkJzsgLy8gcHVyZS1sb2dpYyBtb2RpZmllcnNcblxuZXhwb3J0IHZhciBiZWZvcmVNYWluID0gJ2JlZm9yZU1haW4nO1xuZXhwb3J0IHZhciBtYWluID0gJ21haW4nO1xuZXhwb3J0IHZhciBhZnRlck1haW4gPSAnYWZ0ZXJNYWluJzsgLy8gbW9kaWZpZXIgd2l0aCB0aGUgcHVycG9zZSB0byB3cml0ZSB0byB0aGUgRE9NIChvciB3cml0ZSBpbnRvIGEgZnJhbWV3b3JrIHN0YXRlKVxuXG5leHBvcnQgdmFyIGJlZm9yZVdyaXRlID0gJ2JlZm9yZVdyaXRlJztcbmV4cG9ydCB2YXIgd3JpdGUgPSAnd3JpdGUnO1xuZXhwb3J0IHZhciBhZnRlcldyaXRlID0gJ2FmdGVyV3JpdGUnO1xuZXhwb3J0IHZhciBtb2RpZmllclBoYXNlcyA9IFtiZWZvcmVSZWFkLCByZWFkLCBhZnRlclJlYWQsIGJlZm9yZU1haW4sIG1haW4sIGFmdGVyTWFpbiwgYmVmb3JlV3JpdGUsIHdyaXRlLCBhZnRlcldyaXRlXTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZU5hbWUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudCA/IChlbGVtZW50Lm5vZGVOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93KG5vZGUpIHtcbiAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICBpZiAobm9kZS50b1N0cmluZygpICE9PSAnW29iamVjdCBXaW5kb3ddJykge1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50O1xuICAgIHJldHVybiBvd25lckRvY3VtZW50ID8gb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cgOiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn0iLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcblxuZnVuY3Rpb24gaXNFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuSFRNTEVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzU2hhZG93Um9vdChub2RlKSB7XG4gIC8vIElFIDExIGhhcyBubyBTaGFkb3dSb290XG4gIGlmICh0eXBlb2YgU2hhZG93Um9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5TaGFkb3dSb290O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q7XG59XG5cbmV4cG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNTaGFkb3dSb290IH07IiwgImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7IC8vIFRoaXMgbW9kaWZpZXIgdGFrZXMgdGhlIHN0eWxlcyBwcmVwYXJlZCBieSB0aGUgYGNvbXB1dGVTdHlsZXNgIG1vZGlmaWVyXG4vLyBhbmQgYXBwbGllcyB0aGVtIHRvIHRoZSBIVE1MRWxlbWVudHMgc3VjaCBhcyBwb3BwZXIgYW5kIGFycm93XG5cbmZ1bmN0aW9uIGFwcGx5U3R5bGVzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZTtcbiAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgc3R5bGUgPSBzdGF0ZS5zdHlsZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRmxvdyBkb2Vzbid0IHN1cHBvcnQgdG8gZXh0ZW5kIHRoaXMgcHJvcGVydHksIGJ1dCBpdCdzIHRoZSBtb3N0XG4gICAgLy8gZWZmZWN0aXZlIHdheSB0byBhcHBseSBzdHlsZXMgdG8gYW4gSFRNTEVsZW1lbnRcbiAgICAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV1cblxuXG4gICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIHZhbHVlID0gYXR0cmlidXRlc1tuYW1lXTtcblxuICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlID09PSB0cnVlID8gJycgOiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGU7XG4gIHZhciBpbml0aWFsU3R5bGVzID0ge1xuICAgIHBvcHBlcjoge1xuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBsZWZ0OiAnMCcsXG4gICAgICB0b3A6ICcwJyxcbiAgICAgIG1hcmdpbjogJzAnXG4gICAgfSxcbiAgICBhcnJvdzoge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZSdcbiAgICB9LFxuICAgIHJlZmVyZW5jZToge31cbiAgfTtcbiAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5wb3BwZXIuc3R5bGUsIGluaXRpYWxTdHlsZXMucG9wcGVyKTtcbiAgc3RhdGUuc3R5bGVzID0gaW5pdGlhbFN0eWxlcztcblxuICBpZiAoc3RhdGUuZWxlbWVudHMuYXJyb3cpIHtcbiAgICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLmFycm93LnN0eWxlLCBpbml0aWFsU3R5bGVzLmFycm93KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07XG4gICAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgICB2YXIgc3R5bGVQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoc3RhdGUuc3R5bGVzLmhhc093blByb3BlcnR5KG5hbWUpID8gc3RhdGUuc3R5bGVzW25hbWVdIDogaW5pdGlhbFN0eWxlc1tuYW1lXSk7IC8vIFNldCBhbGwgdmFsdWVzIHRvIGFuIGVtcHR5IHN0cmluZyB0byB1bnNldCB0aGVtXG5cbiAgICAgIHZhciBzdHlsZSA9IHN0eWxlUHJvcGVydGllcy5yZWR1Y2UoZnVuY3Rpb24gKHN0eWxlLCBwcm9wZXJ0eSkge1xuICAgICAgICBzdHlsZVtwcm9wZXJ0eV0gPSAnJztcbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfSwge30pOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2FwcGx5U3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBhcHBseVN0eWxlcyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ2NvbXB1dGVTdHlsZXMnXVxufTsiLCAiaW1wb3J0IHsgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufSIsICJleHBvcnQgdmFyIG1heCA9IE1hdGgubWF4O1xuZXhwb3J0IHZhciBtaW4gPSBNYXRoLm1pbjtcbmV4cG9ydCB2YXIgcm91bmQgPSBNYXRoLnJvdW5kOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVQVN0cmluZygpIHtcbiAgdmFyIHVhRGF0YSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhO1xuXG4gIGlmICh1YURhdGEgIT0gbnVsbCAmJiB1YURhdGEuYnJhbmRzICYmIEFycmF5LmlzQXJyYXkodWFEYXRhLmJyYW5kcykpIHtcbiAgICByZXR1cm4gdWFEYXRhLmJyYW5kcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLmJyYW5kICsgXCIvXCIgKyBpdGVtLnZlcnNpb247XG4gICAgfSkuam9pbignICcpO1xuICB9XG5cbiAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7XG59IiwgImltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0xheW91dFZpZXdwb3J0KCkge1xuICByZXR1cm4gIS9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG59IiwgImltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgaXNMYXlvdXRWaWV3cG9ydCBmcm9tIFwiLi9pc0xheW91dFZpZXdwb3J0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgaW5jbHVkZVNjYWxlLCBpc0ZpeGVkU3RyYXRlZ3kpIHtcbiAgaWYgKGluY2x1ZGVTY2FsZSA9PT0gdm9pZCAwKSB7XG4gICAgaW5jbHVkZVNjYWxlID0gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNGaXhlZFN0cmF0ZWd5ID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkU3RyYXRlZ3kgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBjbGllbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IDE7XG4gIHZhciBzY2FsZVkgPSAxO1xuXG4gIGlmIChpbmNsdWRlU2NhbGUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIHNjYWxlWCA9IGVsZW1lbnQub2Zmc2V0V2lkdGggPiAwID8gcm91bmQoY2xpZW50UmVjdC53aWR0aCkgLyBlbGVtZW50Lm9mZnNldFdpZHRoIHx8IDEgOiAxO1xuICAgIHNjYWxlWSA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0ID4gMCA/IHJvdW5kKGNsaWVudFJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDEgOiAxO1xuICB9XG5cbiAgdmFyIF9yZWYgPSBpc0VsZW1lbnQoZWxlbWVudCkgPyBnZXRXaW5kb3coZWxlbWVudCkgOiB3aW5kb3csXG4gICAgICB2aXN1YWxWaWV3cG9ydCA9IF9yZWYudmlzdWFsVmlld3BvcnQ7XG5cbiAgdmFyIGFkZFZpc3VhbE9mZnNldHMgPSAhaXNMYXlvdXRWaWV3cG9ydCgpICYmIGlzRml4ZWRTdHJhdGVneTtcbiAgdmFyIHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgKGFkZFZpc3VhbE9mZnNldHMgJiYgdmlzdWFsVmlld3BvcnQgPyB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0IDogMCkpIC8gc2NhbGVYO1xuICB2YXIgeSA9IChjbGllbnRSZWN0LnRvcCArIChhZGRWaXN1YWxPZmZzZXRzICYmIHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wIDogMCkpIC8gc2NhbGVZO1xuICB2YXIgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoIC8gc2NhbGVYO1xuICB2YXIgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZVk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHRvcDogeSxcbiAgICByaWdodDogeCArIHdpZHRoLFxuICAgIGJvdHRvbTogeSArIGhlaWdodCxcbiAgICBsZWZ0OiB4LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsICJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiOyAvLyBSZXR1cm5zIHRoZSBsYXlvdXQgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuIExheW91dFxuLy8gbWVhbnMgaXQgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRMYXlvdXRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCk7IC8vIFVzZSB0aGUgY2xpZW50UmVjdCBzaXplcyBpZiBpdCdzIG5vdCBiZWVuIHRyYW5zZm9ybWVkLlxuICAvLyBGaXhlcyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEyMjNcblxuICB2YXIgd2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3Qud2lkdGggLSB3aWR0aCkgPD0gMSkge1xuICAgIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aDtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LmhlaWdodCAtIGhlaWdodCkgPD0gMSkge1xuICAgIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBlbGVtZW50Lm9mZnNldExlZnQsXG4gICAgeTogZWxlbWVudC5vZmZzZXRUb3AsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59IiwgImltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRhaW5zKHBhcmVudCwgY2hpbGQpIHtcbiAgdmFyIHJvb3ROb2RlID0gY2hpbGQuZ2V0Um9vdE5vZGUgJiYgY2hpbGQuZ2V0Um9vdE5vZGUoKTsgLy8gRmlyc3QsIGF0dGVtcHQgd2l0aCBmYXN0ZXIgbmF0aXZlIG1ldGhvZFxuXG4gIGlmIChwYXJlbnQuY29udGFpbnMoY2hpbGQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gdGhlbiBmYWxsYmFjayB0byBjdXN0b20gaW1wbGVtZW50YXRpb24gd2l0aCBTaGFkb3cgRE9NIHN1cHBvcnRcbiAgZWxzZSBpZiAocm9vdE5vZGUgJiYgaXNTaGFkb3dSb290KHJvb3ROb2RlKSkge1xuICAgICAgdmFyIG5leHQgPSBjaGlsZDtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAobmV4dCAmJiBwYXJlbnQuaXNTYW1lTm9kZShuZXh0KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXTogbmVlZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHRoaXMuLi5cblxuXG4gICAgICAgIG5leHQgPSBuZXh0LnBhcmVudE5vZGUgfHwgbmV4dC5ob3N0O1xuICAgICAgfSB3aGlsZSAobmV4dCk7XG4gICAgfSAvLyBHaXZlIHVwLCB0aGUgcmVzdWx0IGlzIGZhbHNlXG5cblxuICByZXR1cm4gZmFsc2U7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufSIsICJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIFsndGFibGUnLCAndGQnLCAndGgnXS5pbmRleE9mKGdldE5vZGVOYW1lKGVsZW1lbnQpKSA+PSAwO1xufSIsICJpbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkge1xuICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gIHJldHVybiAoKGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQub3duZXJEb2N1bWVudCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICBlbGVtZW50LmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpLmRvY3VtZW50RWxlbWVudDtcbn0iLCAiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSB7XG4gIGlmIChnZXROb2RlTmFtZShlbGVtZW50KSA9PT0gJ2h0bWwnKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gKC8vIHRoaXMgaXMgYSBxdWlja2VyIChidXQgbGVzcyB0eXBlIHNhZmUpIHdheSB0byBzYXZlIHF1aXRlIHNvbWUgYnl0ZXMgZnJvbSB0aGUgYnVuZGxlXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXVxuICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgIGVsZW1lbnQuYXNzaWduZWRTbG90IHx8IC8vIHN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlXG4gICAgZWxlbWVudC5wYXJlbnROb2RlIHx8ICggLy8gRE9NIEVsZW1lbnQgZGV0ZWN0ZWRcbiAgICBpc1NoYWRvd1Jvb3QoZWxlbWVudCkgPyBlbGVtZW50Lmhvc3QgOiBudWxsKSB8fCAvLyBTaGFkb3dSb290IGRldGVjdGVkXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IEhUTUxFbGVtZW50IGlzIGEgTm9kZVxuICAgIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSAvLyBmYWxsYmFja1xuXG4gICk7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBpc1RhYmxlRWxlbWVudCBmcm9tIFwiLi9pc1RhYmxlRWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzgzN1xuICBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG59IC8vIGAub2Zmc2V0UGFyZW50YCByZXBvcnRzIGBudWxsYCBmb3IgZml4ZWQgZWxlbWVudHMsIHdoaWxlIGFic29sdXRlIGVsZW1lbnRzXG4vLyByZXR1cm4gdGhlIGNvbnRhaW5pbmcgYmxvY2tcblxuXG5mdW5jdGlvbiBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkge1xuICB2YXIgaXNGaXJlZm94ID0gL2ZpcmVmb3gvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xuICB2YXIgaXNJRSA9IC9UcmlkZW50L2kudGVzdChnZXRVQVN0cmluZygpKTtcblxuICBpZiAoaXNJRSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgLy8gSW4gSUUgOSwgMTAgYW5kIDExIGZpeGVkIGVsZW1lbnRzIGNvbnRhaW5pbmcgYmxvY2sgaXMgYWx3YXlzIGVzdGFibGlzaGVkIGJ5IHRoZSB2aWV3cG9ydFxuICAgIHZhciBlbGVtZW50Q3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcblxuICAgIGlmIChlbGVtZW50Q3NzLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuXG4gIGlmIChpc1NoYWRvd1Jvb3QoY3VycmVudE5vZGUpKSB7XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5ob3N0O1xuICB9XG5cbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmIFsnaHRtbCcsICdib2R5J10uaW5kZXhPZihnZXROb2RlTmFtZShjdXJyZW50Tm9kZSkpIDwgMCkge1xuICAgIHZhciBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnROb2RlKTsgLy8gVGhpcyBpcyBub24tZXhoYXVzdGl2ZSBidXQgY292ZXJzIHRoZSBtb3N0IGNvbW1vbiBDU1MgcHJvcGVydGllcyB0aGF0XG4gICAgLy8gY3JlYXRlIGEgY29udGFpbmluZyBibG9jay5cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuXG4gICAgaWYgKGNzcy50cmFuc2Zvcm0gIT09ICdub25lJyB8fCBjc3MucGVyc3BlY3RpdmUgIT09ICdub25lJyB8fCBjc3MuY29udGFpbiA9PT0gJ3BhaW50JyB8fCBbJ3RyYW5zZm9ybScsICdwZXJzcGVjdGl2ZSddLmluZGV4T2YoY3NzLndpbGxDaGFuZ2UpICE9PSAtMSB8fCBpc0ZpcmVmb3ggJiYgY3NzLndpbGxDaGFuZ2UgPT09ICdmaWx0ZXInIHx8IGlzRmlyZWZveCAmJiBjc3MuZmlsdGVyICYmIGNzcy5maWx0ZXIgIT09ICdub25lJykge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IC8vIEdldHMgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcG9zaXRpb25lZCBlbGVtZW50LiBIYW5kbGVzIHNvbWUgZWRnZSBjYXNlcyxcbi8vIHN1Y2ggYXMgdGFibGUgYW5jZXN0b3JzIGFuZCBjcm9zcyBicm93c2VyIGJ1Z3MuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCk7XG5cbiAgd2hpbGUgKG9mZnNldFBhcmVudCAmJiBpc1RhYmxlRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCk7XG4gIH1cblxuICBpZiAob2Zmc2V0UGFyZW50ICYmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnaHRtbCcgfHwgZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2JvZHknICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbmRvdztcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpID49IDAgPyAneCcgOiAneSc7XG59IiwgImltcG9ydCB7IG1heCBhcyBtYXRoTWF4LCBtaW4gYXMgbWF0aE1pbiB9IGZyb20gXCIuL21hdGguanNcIjtcbmV4cG9ydCBmdW5jdGlvbiB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KSB7XG4gIHJldHVybiBtYXRoTWF4KG1pbiwgbWF0aE1pbih2YWx1ZSwgbWF4KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gd2l0aGluTWF4Q2xhbXAobWluLCB2YWx1ZSwgbWF4KSB7XG4gIHZhciB2ID0gd2l0aGluKG1pbiwgdmFsdWUsIG1heCk7XG4gIHJldHVybiB2ID4gbWF4ID8gbWF4IDogdjtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RnJlc2hTaWRlT2JqZWN0KCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMFxuICB9O1xufSIsICJpbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VQYWRkaW5nT2JqZWN0KHBhZGRpbmdPYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGdldEZyZXNoU2lkZU9iamVjdCgpLCBwYWRkaW5nT2JqZWN0KTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXhwYW5kVG9IYXNoTWFwKHZhbHVlLCBrZXlzKSB7XG4gIHJldHVybiBrZXlzLnJlZHVjZShmdW5jdGlvbiAoaGFzaE1hcCwga2V5KSB7XG4gICAgaGFzaE1hcFtrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIGhhc2hNYXA7XG4gIH0sIHt9KTtcbn0iLCAiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuLi9kb20tdXRpbHMvY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgd2l0aGluIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi4vdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuLi91dGlscy9leHBhbmRUb0hhc2hNYXAuanNcIjtcbmltcG9ydCB7IGxlZnQsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdG9wLCBib3R0b20gfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdG9QYWRkaW5nT2JqZWN0ID0gZnVuY3Rpb24gdG9QYWRkaW5nT2JqZWN0KHBhZGRpbmcsIHN0YXRlKSB7XG4gIHBhZGRpbmcgPSB0eXBlb2YgcGFkZGluZyA9PT0gJ2Z1bmN0aW9uJyA/IHBhZGRpbmcoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiBwYWRkaW5nO1xuICByZXR1cm4gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbn07XG5cbmZ1bmN0aW9uIGFycm93KF9yZWYpIHtcbiAgdmFyIF9zdGF0ZSRtb2RpZmllcnNEYXRhJDtcblxuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgYXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGlzVmVydGljYWwgPSBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgaWYgKCFhcnJvd0VsZW1lbnQgfHwgIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGFkZGluZ09iamVjdCA9IHRvUGFkZGluZ09iamVjdChvcHRpb25zLnBhZGRpbmcsIHN0YXRlKTtcbiAgdmFyIGFycm93UmVjdCA9IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KTtcbiAgdmFyIG1pblByb3AgPSBheGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICB2YXIgbWF4UHJvcCA9IGF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICB2YXIgZW5kRGlmZiA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtsZW5dICsgc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdIC0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnBvcHBlcltsZW5dO1xuICB2YXIgc3RhcnREaWZmID0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGFycm93RWxlbWVudCk7XG4gIHZhciBjbGllbnRTaXplID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBheGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRIZWlnaHQgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoIHx8IDAgOiAwO1xuICB2YXIgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7IC8vIE1ha2Ugc3VyZSB0aGUgYXJyb3cgZG9lc24ndCBvdmVyZmxvdyB0aGUgcG9wcGVyIGlmIHRoZSBjZW50ZXIgcG9pbnQgaXNcbiAgLy8gb3V0c2lkZSBvZiB0aGUgcG9wcGVyIGJvdW5kc1xuXG4gIHZhciBtaW4gPSBwYWRkaW5nT2JqZWN0W21pblByb3BdO1xuICB2YXIgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93UmVjdFtsZW5dIC0gcGFkZGluZ09iamVjdFttYXhQcm9wXTtcbiAgdmFyIGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dSZWN0W2xlbl0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gIHZhciBvZmZzZXQgPSB3aXRoaW4obWluLCBjZW50ZXIsIG1heCk7IC8vIFByZXZlbnRzIGJyZWFraW5nIHN5bnRheCBoaWdobGlnaHRpbmcuLi5cblxuICB2YXIgYXhpc1Byb3AgPSBheGlzO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gKF9zdGF0ZSRtb2RpZmllcnNEYXRhJCA9IHt9LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSRbYXhpc1Byb3BdID0gb2Zmc2V0LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQuY2VudGVyT2Zmc2V0ID0gb2Zmc2V0IC0gY2VudGVyLCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQpO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQsXG4gICAgICBhcnJvd0VsZW1lbnQgPSBfb3B0aW9ucyRlbGVtZW50ID09PSB2b2lkIDAgPyAnW2RhdGEtcG9wcGVyLWFycm93XScgOiBfb3B0aW9ucyRlbGVtZW50O1xuXG4gIGlmIChhcnJvd0VsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBDU1Mgc2VsZWN0b3JcblxuXG4gIGlmICh0eXBlb2YgYXJyb3dFbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLnBvcHBlci5xdWVyeVNlbGVjdG9yKGFycm93RWxlbWVudCk7XG5cbiAgICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGFpbnMoc3RhdGUuZWxlbWVudHMucG9wcGVyLCBhcnJvd0VsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGUuZWxlbWVudHMuYXJyb3cgPSBhcnJvd0VsZW1lbnQ7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcnJvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBhcnJvdyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXVxufTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59IiwgImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgZW5kIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdW5zZXRTaWRlcyA9IHtcbiAgdG9wOiAnYXV0bycsXG4gIHJpZ2h0OiAnYXV0bycsXG4gIGJvdHRvbTogJ2F1dG8nLFxuICBsZWZ0OiAnYXV0bydcbn07IC8vIFJvdW5kIHRoZSBvZmZzZXRzIHRvIHRoZSBuZWFyZXN0IHN1aXRhYmxlIHN1YnBpeGVsIGJhc2VkIG9uIHRoZSBEUFIuXG4vLyBab29taW5nIGNhbiBjaGFuZ2UgdGhlIERQUiwgYnV0IGl0IHNlZW1zIHRvIHJlcG9ydCBhIHZhbHVlIHRoYXQgd2lsbFxuLy8gY2xlYW5seSBkaXZpZGUgdGhlIHZhbHVlcyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBzdWJwaXhlbHMuXG5cbmZ1bmN0aW9uIHJvdW5kT2Zmc2V0c0J5RFBSKF9yZWYsIHdpbikge1xuICB2YXIgeCA9IF9yZWYueCxcbiAgICAgIHkgPSBfcmVmLnk7XG4gIHZhciBkcHIgPSB3aW4uZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICByZXR1cm4ge1xuICAgIHg6IHJvdW5kKHggKiBkcHIpIC8gZHByIHx8IDAsXG4gICAgeTogcm91bmQoeSAqIGRwcikgLyBkcHIgfHwgMFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwVG9TdHlsZXMoX3JlZjIpIHtcbiAgdmFyIF9PYmplY3QkYXNzaWduMjtcblxuICB2YXIgcG9wcGVyID0gX3JlZjIucG9wcGVyLFxuICAgICAgcG9wcGVyUmVjdCA9IF9yZWYyLnBvcHBlclJlY3QsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmMi5wbGFjZW1lbnQsXG4gICAgICB2YXJpYXRpb24gPSBfcmVmMi52YXJpYXRpb24sXG4gICAgICBvZmZzZXRzID0gX3JlZjIub2Zmc2V0cyxcbiAgICAgIHBvc2l0aW9uID0gX3JlZjIucG9zaXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfcmVmMi5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBhZGFwdGl2ZSA9IF9yZWYyLmFkYXB0aXZlLFxuICAgICAgcm91bmRPZmZzZXRzID0gX3JlZjIucm91bmRPZmZzZXRzLFxuICAgICAgaXNGaXhlZCA9IF9yZWYyLmlzRml4ZWQ7XG4gIHZhciBfb2Zmc2V0cyR4ID0gb2Zmc2V0cy54LFxuICAgICAgeCA9IF9vZmZzZXRzJHggPT09IHZvaWQgMCA/IDAgOiBfb2Zmc2V0cyR4LFxuICAgICAgX29mZnNldHMkeSA9IG9mZnNldHMueSxcbiAgICAgIHkgPSBfb2Zmc2V0cyR5ID09PSB2b2lkIDAgPyAwIDogX29mZnNldHMkeTtcblxuICB2YXIgX3JlZjMgPSB0eXBlb2Ygcm91bmRPZmZzZXRzID09PSAnZnVuY3Rpb24nID8gcm91bmRPZmZzZXRzKHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfSkgOiB7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG5cbiAgeCA9IF9yZWYzLng7XG4gIHkgPSBfcmVmMy55O1xuICB2YXIgaGFzWCA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3gnKTtcbiAgdmFyIGhhc1kgPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd5Jyk7XG4gIHZhciBzaWRlWCA9IGxlZnQ7XG4gIHZhciBzaWRlWSA9IHRvcDtcbiAgdmFyIHdpbiA9IHdpbmRvdztcblxuICBpZiAoYWRhcHRpdmUpIHtcbiAgICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KHBvcHBlcik7XG4gICAgdmFyIGhlaWdodFByb3AgPSAnY2xpZW50SGVpZ2h0JztcbiAgICB2YXIgd2lkdGhQcm9wID0gJ2NsaWVudFdpZHRoJztcblxuICAgIGlmIChvZmZzZXRQYXJlbnQgPT09IGdldFdpbmRvdyhwb3BwZXIpKSB7XG4gICAgICBvZmZzZXRQYXJlbnQgPSBnZXREb2N1bWVudEVsZW1lbnQocG9wcGVyKTtcblxuICAgICAgaWYgKGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiAhPT0gJ3N0YXRpYycgJiYgcG9zaXRpb24gPT09ICdhYnNvbHV0ZScpIHtcbiAgICAgICAgaGVpZ2h0UHJvcCA9ICdzY3JvbGxIZWlnaHQnO1xuICAgICAgICB3aWR0aFByb3AgPSAnc2Nyb2xsV2lkdGgnO1xuICAgICAgfVxuICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FzdF06IGZvcmNlIHR5cGUgcmVmaW5lbWVudCwgd2UgY29tcGFyZSBvZmZzZXRQYXJlbnQgd2l0aCB3aW5kb3cgYWJvdmUsIGJ1dCBGbG93IGRvZXNuJ3QgZGV0ZWN0IGl0XG5cblxuICAgIG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudDtcblxuICAgIGlmIChwbGFjZW1lbnQgPT09IHRvcCB8fCAocGxhY2VtZW50ID09PSBsZWZ0IHx8IHBsYWNlbWVudCA9PT0gcmlnaHQpICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWSA9IGJvdHRvbTtcbiAgICAgIHZhciBvZmZzZXRZID0gaXNGaXhlZCAmJiBvZmZzZXRQYXJlbnQgPT09IHdpbiAmJiB3aW4udmlzdWFsVmlld3BvcnQgPyB3aW4udmlzdWFsVmlld3BvcnQuaGVpZ2h0IDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICBvZmZzZXRQYXJlbnRbaGVpZ2h0UHJvcF07XG4gICAgICB5IC09IG9mZnNldFkgLSBwb3BwZXJSZWN0LmhlaWdodDtcbiAgICAgIHkgKj0gZ3B1QWNjZWxlcmF0aW9uID8gMSA6IC0xO1xuICAgIH1cblxuICAgIGlmIChwbGFjZW1lbnQgPT09IGxlZnQgfHwgKHBsYWNlbWVudCA9PT0gdG9wIHx8IHBsYWNlbWVudCA9PT0gYm90dG9tKSAmJiB2YXJpYXRpb24gPT09IGVuZCkge1xuICAgICAgc2lkZVggPSByaWdodDtcbiAgICAgIHZhciBvZmZzZXRYID0gaXNGaXhlZCAmJiBvZmZzZXRQYXJlbnQgPT09IHdpbiAmJiB3aW4udmlzdWFsVmlld3BvcnQgPyB3aW4udmlzdWFsVmlld3BvcnQud2lkdGggOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG9mZnNldFBhcmVudFt3aWR0aFByb3BdO1xuICAgICAgeCAtPSBvZmZzZXRYIC0gcG9wcGVyUmVjdC53aWR0aDtcbiAgICAgIHggKj0gZ3B1QWNjZWxlcmF0aW9uID8gMSA6IC0xO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb21tb25TdHlsZXMgPSBPYmplY3QuYXNzaWduKHtcbiAgICBwb3NpdGlvbjogcG9zaXRpb25cbiAgfSwgYWRhcHRpdmUgJiYgdW5zZXRTaWRlcyk7XG5cbiAgdmFyIF9yZWY0ID0gcm91bmRPZmZzZXRzID09PSB0cnVlID8gcm91bmRPZmZzZXRzQnlEUFIoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9LCBnZXRXaW5kb3cocG9wcGVyKSkgOiB7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG5cbiAgeCA9IF9yZWY0Lng7XG4gIHkgPSBfcmVmNC55O1xuXG4gIGlmIChncHVBY2NlbGVyYXRpb24pIHtcbiAgICB2YXIgX09iamVjdCRhc3NpZ247XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24gPSB7fSwgX09iamVjdCRhc3NpZ25bc2lkZVldID0gaGFzWSA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbltzaWRlWF0gPSBoYXNYID8gJzAnIDogJycsIF9PYmplY3QkYXNzaWduLnRyYW5zZm9ybSA9ICh3aW4uZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSA8PSAxID8gXCJ0cmFuc2xhdGUoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweClcIiA6IFwidHJhbnNsYXRlM2QoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweCwgMClcIiwgX09iamVjdCRhc3NpZ24pKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIChfT2JqZWN0JGFzc2lnbjIgPSB7fSwgX09iamVjdCRhc3NpZ24yW3NpZGVZXSA9IGhhc1kgPyB5ICsgXCJweFwiIDogJycsIF9PYmplY3QkYXNzaWduMltzaWRlWF0gPSBoYXNYID8geCArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjIudHJhbnNmb3JtID0gJycsIF9PYmplY3QkYXNzaWduMikpO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlU3R5bGVzKF9yZWY1KSB7XG4gIHZhciBzdGF0ZSA9IF9yZWY1LnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWY1Lm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPSBvcHRpb25zLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9vcHRpb25zJGdwdUFjY2VsZXJhdCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGdwdUFjY2VsZXJhdCxcbiAgICAgIF9vcHRpb25zJGFkYXB0aXZlID0gb3B0aW9ucy5hZGFwdGl2ZSxcbiAgICAgIGFkYXB0aXZlID0gX29wdGlvbnMkYWRhcHRpdmUgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhZGFwdGl2ZSxcbiAgICAgIF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9IG9wdGlvbnMucm91bmRPZmZzZXRzLFxuICAgICAgcm91bmRPZmZzZXRzID0gX29wdGlvbnMkcm91bmRPZmZzZXRzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcm91bmRPZmZzZXRzO1xuICB2YXIgY29tbW9uU3R5bGVzID0ge1xuICAgIHBsYWNlbWVudDogZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHZhcmlhdGlvbjogZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCksXG4gICAgcG9wcGVyOiBzdGF0ZS5lbGVtZW50cy5wb3BwZXIsXG4gICAgcG9wcGVyUmVjdDogc3RhdGUucmVjdHMucG9wcGVyLFxuICAgIGdwdUFjY2VsZXJhdGlvbjogZ3B1QWNjZWxlcmF0aW9uLFxuICAgIGlzRml4ZWQ6IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3kgPT09ICdmaXhlZCdcbiAgfTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzICE9IG51bGwpIHtcbiAgICBzdGF0ZS5zdHlsZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLnBvcHBlciwgbWFwVG9TdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCB7XG4gICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMsXG4gICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIGFkYXB0aXZlOiBhZGFwdGl2ZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93ICE9IG51bGwpIHtcbiAgICBzdGF0ZS5zdHlsZXMuYXJyb3cgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zdHlsZXMuYXJyb3csIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgYWRhcHRpdmU6IGZhbHNlLFxuICAgICAgcm91bmRPZmZzZXRzOiByb3VuZE9mZnNldHNcbiAgICB9KSkpO1xuICB9XG5cbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgICdkYXRhLXBvcHBlci1wbGFjZW1lbnQnOiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdjb21wdXRlU3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdiZWZvcmVXcml0ZScsXG4gIGZuOiBjb21wdXRlU3R5bGVzLFxuICBkYXRhOiB7fVxufTsiLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciBwYXNzaXZlID0ge1xuICBwYXNzaXZlOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgaW5zdGFuY2UgPSBfcmVmLmluc3RhbmNlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJHNjcm9sbCA9IG9wdGlvbnMuc2Nyb2xsLFxuICAgICAgc2Nyb2xsID0gX29wdGlvbnMkc2Nyb2xsID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkc2Nyb2xsLFxuICAgICAgX29wdGlvbnMkcmVzaXplID0gb3B0aW9ucy5yZXNpemUsXG4gICAgICByZXNpemUgPSBfb3B0aW9ucyRyZXNpemUgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyZXNpemU7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coc3RhdGUuZWxlbWVudHMucG9wcGVyKTtcbiAgdmFyIHNjcm9sbFBhcmVudHMgPSBbXS5jb25jYXQoc3RhdGUuc2Nyb2xsUGFyZW50cy5yZWZlcmVuY2UsIHN0YXRlLnNjcm9sbFBhcmVudHMucG9wcGVyKTtcblxuICBpZiAoc2Nyb2xsKSB7XG4gICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgIHNjcm9sbFBhcmVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHJlc2l6ZSkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2Nyb2xsKSB7XG4gICAgICBzY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHNjcm9sbFBhcmVudCkge1xuICAgICAgICBzY3JvbGxQYXJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChyZXNpemUpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH1cbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2V2ZW50TGlzdGVuZXJzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBmdW5jdGlvbiBmbigpIHt9LFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgZGF0YToge31cbn07IiwgInZhciBoYXNoID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsICJ2YXIgaGFzaCA9IHtcbiAgc3RhcnQ6ICdlbmQnLFxuICBlbmQ6ICdzdGFydCdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9zdGFydHxlbmQvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGwobm9kZSkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KG5vZGUpO1xuICB2YXIgc2Nyb2xsTGVmdCA9IHdpbi5wYWdlWE9mZnNldDtcbiAgdmFyIHNjcm9sbFRvcCA9IHdpbi5wYWdlWU9mZnNldDtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wXG4gIH07XG59IiwgImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCkge1xuICAvLyBJZiA8aHRtbD4gaGFzIGEgQ1NTIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgdmlld3BvcnQsIHRoZW4gdGhpcyB3aWxsIGJlXG4gIC8vIGluY29ycmVjdCBmb3IgUlRMLlxuICAvLyBQb3BwZXIgMSBpcyBicm9rZW4gaW4gdGhpcyBjYXNlIGFuZCBuZXZlciBoYWQgYSBidWcgcmVwb3J0IHNvIGxldCdzIGFzc3VtZVxuICAvLyBpdCdzIG5vdCBhbiBpc3N1ZS4gSSBkb24ndCB0aGluayBhbnlvbmUgZXZlciBzcGVjaWZpZXMgd2lkdGggb24gPGh0bWw+XG4gIC8vIGFueXdheS5cbiAgLy8gQnJvd3NlcnMgd2hlcmUgdGhlIGxlZnQgc2Nyb2xsYmFyIGRvZXNuJ3QgY2F1c2UgYW4gaXNzdWUgcmVwb3J0IGAwYCBmb3JcbiAgLy8gdGhpcyAoZS5nLiBFZGdlIDIwMTksIElFMTEsIFNhZmFyaSlcbiAgcmV0dXJuIGdldEJvdW5kaW5nQ2xpZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpLmxlZnQgKyBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCkuc2Nyb2xsTGVmdDtcbn0iLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgaXNMYXlvdXRWaWV3cG9ydCBmcm9tIFwiLi9pc0xheW91dFZpZXdwb3J0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciB2aXN1YWxWaWV3cG9ydCA9IHdpbi52aXN1YWxWaWV3cG9ydDtcbiAgdmFyIHdpZHRoID0gaHRtbC5jbGllbnRXaWR0aDtcbiAgdmFyIGhlaWdodCA9IGh0bWwuY2xpZW50SGVpZ2h0O1xuICB2YXIgeCA9IDA7XG4gIHZhciB5ID0gMDtcblxuICBpZiAodmlzdWFsVmlld3BvcnQpIHtcbiAgICB3aWR0aCA9IHZpc3VhbFZpZXdwb3J0LndpZHRoO1xuICAgIGhlaWdodCA9IHZpc3VhbFZpZXdwb3J0LmhlaWdodDtcbiAgICB2YXIgbGF5b3V0Vmlld3BvcnQgPSBpc0xheW91dFZpZXdwb3J0KCk7XG5cbiAgICBpZiAobGF5b3V0Vmlld3BvcnQgfHwgIWxheW91dFZpZXdwb3J0ICYmIHN0cmF0ZWd5ID09PSAnZml4ZWQnKSB7XG4gICAgICB4ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdDtcbiAgICAgIHkgPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3A7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgeDogeCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCksXG4gICAgeTogeVxuICB9O1xufSIsICJpbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCB7IG1heCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGVcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHdpblNjcm9sbCA9IGdldFdpbmRvd1Njcm9sbChlbGVtZW50KTtcbiAgdmFyIGJvZHkgPSAoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHk7XG4gIHZhciB3aWR0aCA9IG1heChodG1sLnNjcm9sbFdpZHRoLCBodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5zY3JvbGxXaWR0aCA6IDAsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCk7XG4gIHZhciBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5ID8gYm9keS5zY3JvbGxIZWlnaHQgOiAwLCBib2R5ID8gYm9keS5jbGllbnRIZWlnaHQgOiAwKTtcbiAgdmFyIHggPSAtd2luU2Nyb2xsLnNjcm9sbExlZnQgKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpO1xuICB2YXIgeSA9IC13aW5TY3JvbGwuc2Nyb2xsVG9wO1xuXG4gIGlmIChnZXRDb21wdXRlZFN0eWxlKGJvZHkgfHwgaHRtbCkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCkgLSB3aWR0aDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsICJpbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1Njcm9sbFBhcmVudChlbGVtZW50KSB7XG4gIC8vIEZpcmVmb3ggd2FudHMgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcbiAgdmFyIF9nZXRDb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSxcbiAgICAgIG92ZXJmbG93ID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1gsXG4gICAgICBvdmVyZmxvd1kgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1k7XG5cbiAgcmV0dXJuIC9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbi8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCk7XG59IiwgImltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KG5vZGUpIHtcbiAgaWYgKFsnaHRtbCcsICdib2R5JywgJyNkb2N1bWVudCddLmluZGV4T2YoZ2V0Tm9kZU5hbWUobm9kZSkpID49IDApIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudC5ib2R5O1xuICB9XG5cbiAgaWYgKGlzSFRNTEVsZW1lbnQobm9kZSkgJiYgaXNTY3JvbGxQYXJlbnQobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHJldHVybiBnZXRTY3JvbGxQYXJlbnQoZ2V0UGFyZW50Tm9kZShub2RlKSk7XG59IiwgImltcG9ydCBnZXRTY3JvbGxQYXJlbnQgZnJvbSBcIi4vZ2V0U2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG4vKlxuZ2l2ZW4gYSBET00gZWxlbWVudCwgcmV0dXJuIHRoZSBsaXN0IG9mIGFsbCBzY3JvbGwgcGFyZW50cywgdXAgdGhlIGxpc3Qgb2YgYW5jZXNvcnNcbnVudGlsIHdlIGdldCB0byB0aGUgdG9wIHdpbmRvdyBvYmplY3QuIFRoaXMgbGlzdCBpcyB3aGF0IHdlIGF0dGFjaCBzY3JvbGwgbGlzdGVuZXJzXG50bywgYmVjYXVzZSBpZiBhbnkgb2YgdGhlc2UgcGFyZW50IGVsZW1lbnRzIHNjcm9sbCwgd2UnbGwgbmVlZCB0byByZS1jYWxjdWxhdGUgdGhlXG5yZWZlcmVuY2UgZWxlbWVudCdzIHBvc2l0aW9uLlxuKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGlzdFNjcm9sbFBhcmVudHMoZWxlbWVudCwgbGlzdCkge1xuICB2YXIgX2VsZW1lbnQkb3duZXJEb2N1bWVuO1xuXG4gIGlmIChsaXN0ID09PSB2b2lkIDApIHtcbiAgICBsaXN0ID0gW107XG4gIH1cblxuICB2YXIgc2Nyb2xsUGFyZW50ID0gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQpO1xuICB2YXIgaXNCb2R5ID0gc2Nyb2xsUGFyZW50ID09PSAoKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5KTtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhzY3JvbGxQYXJlbnQpO1xuICB2YXIgdGFyZ2V0ID0gaXNCb2R5ID8gW3dpbl0uY29uY2F0KHdpbi52aXN1YWxWaWV3cG9ydCB8fCBbXSwgaXNTY3JvbGxQYXJlbnQoc2Nyb2xsUGFyZW50KSA/IHNjcm9sbFBhcmVudCA6IFtdKSA6IHNjcm9sbFBhcmVudDtcbiAgdmFyIHVwZGF0ZWRMaXN0ID0gbGlzdC5jb25jYXQodGFyZ2V0KTtcbiAgcmV0dXJuIGlzQm9keSA/IHVwZGF0ZWRMaXN0IDogLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IGlzQm9keSB0ZWxscyB1cyB0YXJnZXQgd2lsbCBiZSBhbiBIVE1MRWxlbWVudCBoZXJlXG4gIHVwZGF0ZWRMaXN0LmNvbmNhdChsaXN0U2Nyb2xsUGFyZW50cyhnZXRQYXJlbnROb2RlKHRhcmdldCkpKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVjdFRvQ2xpZW50UmVjdChyZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByZWN0LCB7XG4gICAgbGVmdDogcmVjdC54LFxuICAgIHRvcDogcmVjdC55LFxuICAgIHJpZ2h0OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgfSk7XG59IiwgImltcG9ydCB7IHZpZXdwb3J0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0Vmlld3BvcnRSZWN0IGZyb20gXCIuL2dldFZpZXdwb3J0UmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50UmVjdCBmcm9tIFwiLi9nZXREb2N1bWVudFJlY3QuanNcIjtcbmltcG9ydCBsaXN0U2Nyb2xsUGFyZW50cyBmcm9tIFwiLi9saXN0U2Nyb2xsUGFyZW50cy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuL2NvbnRhaW5zLmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCByZWN0VG9DbGllbnRSZWN0IGZyb20gXCIuLi91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgeyBtYXgsIG1pbiB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGZhbHNlLCBzdHJhdGVneSA9PT0gJ2ZpeGVkJyk7XG4gIHJlY3QudG9wID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudFRvcDtcbiAgcmVjdC5sZWZ0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICByZWN0LmJvdHRvbSA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QucmlnaHQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LndpZHRoID0gZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC5oZWlnaHQgPSBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC54ID0gcmVjdC5sZWZ0O1xuICByZWN0LnkgPSByZWN0LnRvcDtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkge1xuICByZXR1cm4gY2xpcHBpbmdQYXJlbnQgPT09IHZpZXdwb3J0ID8gcmVjdFRvQ2xpZW50UmVjdChnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpKSA6IGlzRWxlbWVudChjbGlwcGluZ1BhcmVudCkgPyBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpIDogcmVjdFRvQ2xpZW50UmVjdChnZXREb2N1bWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKSk7XG59IC8vIEEgXCJjbGlwcGluZyBwYXJlbnRcIiBpcyBhbiBvdmVyZmxvd2FibGUgY29udGFpbmVyIHdpdGggdGhlIGNoYXJhY3RlcmlzdGljIG9mXG4vLyBjbGlwcGluZyAob3IgaGlkaW5nKSBvdmVyZmxvd2luZyBlbGVtZW50cyB3aXRoIGEgcG9zaXRpb24gZGlmZmVyZW50IGZyb21cbi8vIGBpbml0aWFsYFxuXG5cbmZ1bmN0aW9uIGdldENsaXBwaW5nUGFyZW50cyhlbGVtZW50KSB7XG4gIHZhciBjbGlwcGluZ1BhcmVudHMgPSBsaXN0U2Nyb2xsUGFyZW50cyhnZXRQYXJlbnROb2RlKGVsZW1lbnQpKTtcbiAgdmFyIGNhbkVzY2FwZUNsaXBwaW5nID0gWydhYnNvbHV0ZScsICdmaXhlZCddLmluZGV4T2YoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbikgPj0gMDtcbiAgdmFyIGNsaXBwZXJFbGVtZW50ID0gY2FuRXNjYXBlQ2xpcHBpbmcgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSA/IGdldE9mZnNldFBhcmVudChlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgaWYgKCFpc0VsZW1lbnQoY2xpcHBlckVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8xNDE0XG5cblxuICByZXR1cm4gY2xpcHBpbmdQYXJlbnRzLmZpbHRlcihmdW5jdGlvbiAoY2xpcHBpbmdQYXJlbnQpIHtcbiAgICByZXR1cm4gaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSAmJiBjb250YWlucyhjbGlwcGluZ1BhcmVudCwgY2xpcHBlckVsZW1lbnQpICYmIGdldE5vZGVOYW1lKGNsaXBwaW5nUGFyZW50KSAhPT0gJ2JvZHknO1xuICB9KTtcbn0gLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgcGFyZW50c1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENsaXBwaW5nUmVjdChlbGVtZW50LCBib3VuZGFyeSwgcm9vdEJvdW5kYXJ5LCBzdHJhdGVneSkge1xuICB2YXIgbWFpbkNsaXBwaW5nUGFyZW50cyA9IGJvdW5kYXJ5ID09PSAnY2xpcHBpbmdQYXJlbnRzJyA/IGdldENsaXBwaW5nUGFyZW50cyhlbGVtZW50KSA6IFtdLmNvbmNhdChib3VuZGFyeSk7XG4gIHZhciBjbGlwcGluZ1BhcmVudHMgPSBbXS5jb25jYXQobWFpbkNsaXBwaW5nUGFyZW50cywgW3Jvb3RCb3VuZGFyeV0pO1xuICB2YXIgZmlyc3RDbGlwcGluZ1BhcmVudCA9IGNsaXBwaW5nUGFyZW50c1swXTtcbiAgdmFyIGNsaXBwaW5nUmVjdCA9IGNsaXBwaW5nUGFyZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjY1JlY3QsIGNsaXBwaW5nUGFyZW50KSB7XG4gICAgdmFyIHJlY3QgPSBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpO1xuICAgIGFjY1JlY3QudG9wID0gbWF4KHJlY3QudG9wLCBhY2NSZWN0LnRvcCk7XG4gICAgYWNjUmVjdC5yaWdodCA9IG1pbihyZWN0LnJpZ2h0LCBhY2NSZWN0LnJpZ2h0KTtcbiAgICBhY2NSZWN0LmJvdHRvbSA9IG1pbihyZWN0LmJvdHRvbSwgYWNjUmVjdC5ib3R0b20pO1xuICAgIGFjY1JlY3QubGVmdCA9IG1heChyZWN0LmxlZnQsIGFjY1JlY3QubGVmdCk7XG4gICAgcmV0dXJuIGFjY1JlY3Q7XG4gIH0sIGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGZpcnN0Q2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSk7XG4gIGNsaXBwaW5nUmVjdC53aWR0aCA9IGNsaXBwaW5nUmVjdC5yaWdodCAtIGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QuaGVpZ2h0ID0gY2xpcHBpbmdSZWN0LmJvdHRvbSAtIGNsaXBwaW5nUmVjdC50b3A7XG4gIGNsaXBwaW5nUmVjdC54ID0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC55ID0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgcmV0dXJuIGNsaXBwaW5nUmVjdDtcbn0iLCAiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4vZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHN0YXJ0LCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHJlZmVyZW5jZSA9IF9yZWYucmVmZXJlbmNlLFxuICAgICAgZWxlbWVudCA9IF9yZWYuZWxlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudCA/IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciB2YXJpYXRpb24gPSBwbGFjZW1lbnQgPyBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZWxlbWVudC53aWR0aCAvIDI7XG4gIHZhciBjb21tb25ZID0gcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0IC8gMiAtIGVsZW1lbnQuaGVpZ2h0IC8gMjtcbiAgdmFyIG9mZnNldHM7XG5cbiAgc3dpdGNoIChiYXNlUGxhY2VtZW50KSB7XG4gICAgY2FzZSB0b3A6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSAtIGVsZW1lbnQuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGJvdHRvbTpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSByaWdodDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGxlZnQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCAtIGVsZW1lbnQud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cblxuICB2YXIgbWFpbkF4aXMgPSBiYXNlUGxhY2VtZW50ID8gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpIDogbnVsbDtcblxuICBpZiAobWFpbkF4aXMgIT0gbnVsbCkge1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgc3dpdGNoICh2YXJpYXRpb24pIHtcbiAgICAgIGNhc2Ugc3RhcnQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gLSAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIGVuZDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPSBvZmZzZXRzW21haW5BeGlzXSArIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9mZnNldHM7XG59IiwgImltcG9ydCBnZXRDbGlwcGluZ1JlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4vcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgY2xpcHBpbmdQYXJlbnRzLCByZWZlcmVuY2UsIHBvcHBlciwgYm90dG9tLCB0b3AsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4vZXhwYW5kVG9IYXNoTWFwLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBfb3B0aW9ucyRwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucyRwbGFjZW1lbnQgPT09IHZvaWQgMCA/IHN0YXRlLnBsYWNlbWVudCA6IF9vcHRpb25zJHBsYWNlbWVudCxcbiAgICAgIF9vcHRpb25zJHN0cmF0ZWd5ID0gX29wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBzdHJhdGVneSA9IF9vcHRpb25zJHN0cmF0ZWd5ID09PSB2b2lkIDAgPyBzdGF0ZS5zdHJhdGVneSA6IF9vcHRpb25zJHN0cmF0ZWd5LFxuICAgICAgX29wdGlvbnMkYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMkYm91bmRhcnkgPT09IHZvaWQgMCA/IGNsaXBwaW5nUGFyZW50cyA6IF9vcHRpb25zJGJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyB2aWV3cG9ydCA6IF9vcHRpb25zJHJvb3RCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGVsZW1lbnRDb250ZSA9IF9vcHRpb25zLmVsZW1lbnRDb250ZXh0LFxuICAgICAgZWxlbWVudENvbnRleHQgPSBfb3B0aW9ucyRlbGVtZW50Q29udGUgPT09IHZvaWQgMCA/IHBvcHBlciA6IF9vcHRpb25zJGVsZW1lbnRDb250ZSxcbiAgICAgIF9vcHRpb25zJGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IF9vcHRpb25zJGFsdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMkcGFkZGluZyA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHBhZGRpbmc7XG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbiAgdmFyIGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcmVmZXJlbmNlIDogcG9wcGVyO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIHZhciBjbGlwcGluZ0NsaWVudFJlY3QgPSBnZXRDbGlwcGluZ1JlY3QoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgZ2V0RG9jdW1lbnRFbGVtZW50KHN0YXRlLmVsZW1lbnRzLnBvcHBlciksIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KTtcbiAgdmFyIHJlZmVyZW5jZUNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qoc3RhdGUuZWxlbWVudHMucmVmZXJlbmNlKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiByZWZlcmVuY2VDbGllbnRSZWN0LFxuICAgIGVsZW1lbnQ6IHBvcHBlclJlY3QsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSk7XG4gIHZhciBwb3BwZXJDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChPYmplY3QuYXNzaWduKHt9LCBwb3BwZXJSZWN0LCBwb3BwZXJPZmZzZXRzKSk7XG4gIHZhciBlbGVtZW50Q2xpZW50UmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyBwb3BwZXJDbGllbnRSZWN0IDogcmVmZXJlbmNlQ2xpZW50UmVjdDsgLy8gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgcmVjdFxuICAvLyAwIG9yIG5lZ2F0aXZlID0gd2l0aGluIHRoZSBjbGlwcGluZyByZWN0XG5cbiAgdmFyIG92ZXJmbG93T2Zmc2V0cyA9IHtcbiAgICB0b3A6IGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCxcbiAgICBib3R0b206IGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiBjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQsXG4gICAgcmlnaHQ6IGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodFxuICB9O1xuICB2YXIgb2Zmc2V0RGF0YSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0OyAvLyBPZmZzZXRzIGNhbiBiZSBhcHBsaWVkIG9ubHkgdG8gdGhlIHBvcHBlciBlbGVtZW50XG5cbiAgaWYgKGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgJiYgb2Zmc2V0RGF0YSkge1xuICAgIHZhciBvZmZzZXQgPSBvZmZzZXREYXRhW3BsYWNlbWVudF07XG4gICAgT2JqZWN0LmtleXMob3ZlcmZsb3dPZmZzZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBtdWx0aXBseSA9IFtyaWdodCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/IDEgOiAtMTtcbiAgICAgIHZhciBheGlzID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/ICd5JyA6ICd4JztcbiAgICAgIG92ZXJmbG93T2Zmc2V0c1trZXldICs9IG9mZnNldFtheGlzXSAqIG11bHRpcGx5O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG92ZXJmbG93T2Zmc2V0cztcbn0iLCAiaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHZhcmlhdGlvblBsYWNlbWVudHMsIGJhc2VQbGFjZW1lbnRzLCBwbGFjZW1lbnRzIGFzIGFsbFBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgX29wdGlvbnMkYWxsb3dlZEF1dG9QID0gX29wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gX29wdGlvbnMkYWxsb3dlZEF1dG9QID09PSB2b2lkIDAgPyBhbGxQbGFjZW1lbnRzIDogX29wdGlvbnMkYWxsb3dlZEF1dG9QO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCk7XG4gIHZhciBwbGFjZW1lbnRzID0gdmFyaWF0aW9uID8gZmxpcFZhcmlhdGlvbnMgPyB2YXJpYXRpb25QbGFjZW1lbnRzIDogdmFyaWF0aW9uUGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gdmFyaWF0aW9uO1xuICB9KSA6IGJhc2VQbGFjZW1lbnRzO1xuICB2YXIgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFsbG93ZWRBdXRvUGxhY2VtZW50cy5pbmRleE9mKHBsYWNlbWVudCkgPj0gMDtcbiAgfSk7XG5cbiAgaWYgKGFsbG93ZWRQbGFjZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cztcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXTogRmxvdyBzZWVtcyB0byBoYXZlIHByb2JsZW1zIHdpdGggdHdvIGFycmF5IHVuaW9ucy4uLlxuXG5cbiAgdmFyIG92ZXJmbG93cyA9IGFsbG93ZWRQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pW2dldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KV07XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICByZXR1cm4gT2JqZWN0LmtleXMob3ZlcmZsb3dzKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93c1thXSAtIG92ZXJmbG93c1tiXTtcbiAgfSk7XG59IiwgImltcG9ydCBnZXRPcHBvc2l0ZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgY29tcHV0ZUF1dG9QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyBib3R0b20sIHRvcCwgc3RhcnQsIHJpZ2h0LCBsZWZ0LCBhdXRvIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5mdW5jdGlvbiBnZXRFeHBhbmRlZEZhbGxiYWNrUGxhY2VtZW50cyhwbGFjZW1lbnQpIHtcbiAgaWYgKGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA9PT0gYXV0bykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHZhciBvcHBvc2l0ZVBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHJldHVybiBbZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSwgb3Bwb3NpdGVQbGFjZW1lbnQsIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KG9wcG9zaXRlUGxhY2VtZW50KV07XG59XG5cbmZ1bmN0aW9uIGZsaXAoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0uX3NraXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGFsdEF4aXMsXG4gICAgICBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgPSBvcHRpb25zLmZhbGxiYWNrUGxhY2VtZW50cyxcbiAgICAgIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmcsXG4gICAgICBib3VuZGFyeSA9IG9wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBvcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGZsaXBWYXJpYXRpbyA9IG9wdGlvbnMuZmxpcFZhcmlhdGlvbnMsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zJGZsaXBWYXJpYXRpbyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGZsaXBWYXJpYXRpbyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50cyA9IG9wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzO1xuICB2YXIgcHJlZmVycmVkUGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpO1xuICB2YXIgaXNCYXNlUGxhY2VtZW50ID0gYmFzZVBsYWNlbWVudCA9PT0gcHJlZmVycmVkUGxhY2VtZW50O1xuICB2YXIgZmFsbGJhY2tQbGFjZW1lbnRzID0gc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIHx8IChpc0Jhc2VQbGFjZW1lbnQgfHwgIWZsaXBWYXJpYXRpb25zID8gW2dldE9wcG9zaXRlUGxhY2VtZW50KHByZWZlcnJlZFBsYWNlbWVudCldIDogZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocHJlZmVycmVkUGxhY2VtZW50KSk7XG4gIHZhciBwbGFjZW1lbnRzID0gW3ByZWZlcnJlZFBsYWNlbWVudF0uY29uY2F0KGZhbGxiYWNrUGxhY2VtZW50cykucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA9PT0gYXV0byA/IGNvbXB1dGVBdXRvUGxhY2VtZW50KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZyxcbiAgICAgIGZsaXBWYXJpYXRpb25zOiBmbGlwVmFyaWF0aW9ucyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50czogYWxsb3dlZEF1dG9QbGFjZW1lbnRzXG4gICAgfSkgOiBwbGFjZW1lbnQpO1xuICB9LCBbXSk7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGNoZWNrc01hcCA9IG5ldyBNYXAoKTtcbiAgdmFyIG1ha2VGYWxsYmFja0NoZWNrcyA9IHRydWU7XG4gIHZhciBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnRzWzBdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGxhY2VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwbGFjZW1lbnQgPSBwbGFjZW1lbnRzW2ldO1xuXG4gICAgdmFyIF9iYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuXG4gICAgdmFyIGlzU3RhcnRWYXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gc3RhcnQ7XG4gICAgdmFyIGlzVmVydGljYWwgPSBbdG9wLCBib3R0b21dLmluZGV4T2YoX2Jhc2VQbGFjZW1lbnQpID49IDA7XG4gICAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG4gICAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nXG4gICAgfSk7XG4gICAgdmFyIG1haW5WYXJpYXRpb25TaWRlID0gaXNWZXJ0aWNhbCA/IGlzU3RhcnRWYXJpYXRpb24gPyByaWdodCA6IGxlZnQgOiBpc1N0YXJ0VmFyaWF0aW9uID8gYm90dG9tIDogdG9wO1xuXG4gICAgaWYgKHJlZmVyZW5jZVJlY3RbbGVuXSA+IHBvcHBlclJlY3RbbGVuXSkge1xuICAgICAgbWFpblZhcmlhdGlvblNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluVmFyaWF0aW9uU2lkZSk7XG4gICAgfVxuXG4gICAgdmFyIGFsdFZhcmlhdGlvblNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluVmFyaWF0aW9uU2lkZSk7XG4gICAgdmFyIGNoZWNrcyA9IFtdO1xuXG4gICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKG92ZXJmbG93W19iYXNlUGxhY2VtZW50XSA8PSAwKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1ttYWluVmFyaWF0aW9uU2lkZV0gPD0gMCwgb3ZlcmZsb3dbYWx0VmFyaWF0aW9uU2lkZV0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrcy5ldmVyeShmdW5jdGlvbiAoY2hlY2spIHtcbiAgICAgIHJldHVybiBjaGVjaztcbiAgICB9KSkge1xuICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50O1xuICAgICAgbWFrZUZhbGxiYWNrQ2hlY2tzID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjaGVja3NNYXAuc2V0KHBsYWNlbWVudCwgY2hlY2tzKTtcbiAgfVxuXG4gIGlmIChtYWtlRmFsbGJhY2tDaGVja3MpIHtcbiAgICAvLyBgMmAgbWF5IGJlIGRlc2lyZWQgaW4gc29tZSBjYXNlcyBcdTIwMTMgcmVzZWFyY2ggbGF0ZXJcbiAgICB2YXIgbnVtYmVyT2ZDaGVja3MgPSBmbGlwVmFyaWF0aW9ucyA/IDMgOiAxO1xuXG4gICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoX2kpIHtcbiAgICAgIHZhciBmaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50cy5maW5kKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICAgICAgdmFyIGNoZWNrcyA9IGNoZWNrc01hcC5nZXQocGxhY2VtZW50KTtcblxuICAgICAgICBpZiAoY2hlY2tzKSB7XG4gICAgICAgICAgcmV0dXJuIGNoZWNrcy5zbGljZSgwLCBfaSkuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hlY2s7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZml0dGluZ1BsYWNlbWVudCkge1xuICAgICAgICBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBmaXR0aW5nUGxhY2VtZW50O1xuICAgICAgICByZXR1cm4gXCJicmVha1wiO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKHZhciBfaSA9IG51bWJlck9mQ2hlY2tzOyBfaSA+IDA7IF9pLS0pIHtcbiAgICAgIHZhciBfcmV0ID0gX2xvb3AoX2kpO1xuXG4gICAgICBpZiAoX3JldCA9PT0gXCJicmVha1wiKSBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdGUucGxhY2VtZW50ICE9PSBmaXJzdEZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwID0gdHJ1ZTtcbiAgICBzdGF0ZS5wbGFjZW1lbnQgPSBmaXJzdEZpdHRpbmdQbGFjZW1lbnQ7XG4gICAgc3RhdGUucmVzZXQgPSB0cnVlO1xuICB9XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdmbGlwJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IGZsaXAsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsnb2Zmc2V0J10sXG4gIGRhdGE6IHtcbiAgICBfc2tpcDogZmFsc2VcbiAgfVxufTsiLCAiaW1wb3J0IHsgdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKSB7XG4gIGlmIChwcmV2ZW50ZWRPZmZzZXRzID09PSB2b2lkIDApIHtcbiAgICBwcmV2ZW50ZWRPZmZzZXRzID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b3A6IG92ZXJmbG93LnRvcCAtIHJlY3QuaGVpZ2h0IC0gcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIHJpZ2h0OiBvdmVyZmxvdy5yaWdodCAtIHJlY3Qud2lkdGggKyBwcmV2ZW50ZWRPZmZzZXRzLngsXG4gICAgYm90dG9tOiBvdmVyZmxvdy5ib3R0b20gLSByZWN0LmhlaWdodCArIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICBsZWZ0OiBvdmVyZmxvdy5sZWZ0IC0gcmVjdC53aWR0aCAtIHByZXZlbnRlZE9mZnNldHMueFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIFt0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnRdLnNvbWUoZnVuY3Rpb24gKHNpZGUpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dbc2lkZV0gPj0gMDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhpZGUoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgcHJldmVudGVkT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucHJldmVudE92ZXJmbG93O1xuICB2YXIgcmVmZXJlbmNlT3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGVsZW1lbnRDb250ZXh0OiAncmVmZXJlbmNlJ1xuICB9KTtcbiAgdmFyIHBvcHBlckFsdE92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBhbHRCb3VuZGFyeTogdHJ1ZVxuICB9KTtcbiAgdmFyIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHJlZmVyZW5jZU92ZXJmbG93LCByZWZlcmVuY2VSZWN0KTtcbiAgdmFyIHBvcHBlckVzY2FwZU9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhwb3BwZXJBbHRPdmVyZmxvdywgcG9wcGVyUmVjdCwgcHJldmVudGVkT2Zmc2V0cyk7XG4gIHZhciBpc1JlZmVyZW5jZUhpZGRlbiA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChyZWZlcmVuY2VDbGlwcGluZ09mZnNldHMpO1xuICB2YXIgaGFzUG9wcGVyRXNjYXBlZCA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChwb3BwZXJFc2NhcGVPZmZzZXRzKTtcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IHtcbiAgICByZWZlcmVuY2VDbGlwcGluZ09mZnNldHM6IHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyxcbiAgICBwb3BwZXJFc2NhcGVPZmZzZXRzOiBwb3BwZXJFc2NhcGVPZmZzZXRzLFxuICAgIGlzUmVmZXJlbmNlSGlkZGVuOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICBoYXNQb3BwZXJFc2NhcGVkOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH07XG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcmVmZXJlbmNlLWhpZGRlbic6IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgICdkYXRhLXBvcHBlci1lc2NhcGVkJzogaGFzUG9wcGVyRXNjYXBlZFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2hpZGUnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddLFxuICBmbjogaGlkZVxufTsiLCAiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIHBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCByZWN0cywgb2Zmc2V0KSB7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICB2YXIgaW52ZXJ0RGlzdGFuY2UgPSBbbGVmdCwgdG9wXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDAgPyAtMSA6IDE7XG5cbiAgdmFyIF9yZWYgPSB0eXBlb2Ygb2Zmc2V0ID09PSAnZnVuY3Rpb24nID8gb2Zmc2V0KE9iamVjdC5hc3NpZ24oe30sIHJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSkpIDogb2Zmc2V0LFxuICAgICAgc2tpZGRpbmcgPSBfcmVmWzBdLFxuICAgICAgZGlzdGFuY2UgPSBfcmVmWzFdO1xuXG4gIHNraWRkaW5nID0gc2tpZGRpbmcgfHwgMDtcbiAgZGlzdGFuY2UgPSAoZGlzdGFuY2UgfHwgMCkgKiBpbnZlcnREaXN0YW5jZTtcbiAgcmV0dXJuIFtsZWZ0LCByaWdodF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8ge1xuICAgIHg6IGRpc3RhbmNlLFxuICAgIHk6IHNraWRkaW5nXG4gIH0gOiB7XG4gICAgeDogc2tpZGRpbmcsXG4gICAgeTogZGlzdGFuY2VcbiAgfTtcbn1cblxuZnVuY3Rpb24gb2Zmc2V0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYyLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZjIubmFtZTtcbiAgdmFyIF9vcHRpb25zJG9mZnNldCA9IG9wdGlvbnMub2Zmc2V0LFxuICAgICAgb2Zmc2V0ID0gX29wdGlvbnMkb2Zmc2V0ID09PSB2b2lkIDAgPyBbMCwgMF0gOiBfb3B0aW9ucyRvZmZzZXQ7XG4gIHZhciBkYXRhID0gcGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgYWNjW3BsYWNlbWVudF0gPSBkaXN0YW5jZUFuZFNraWRkaW5nVG9YWShwbGFjZW1lbnQsIHN0YXRlLnJlY3RzLCBvZmZzZXQpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgdmFyIF9kYXRhJHN0YXRlJHBsYWNlbWVudCA9IGRhdGFbc3RhdGUucGxhY2VtZW50XSxcbiAgICAgIHggPSBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQueCxcbiAgICAgIHkgPSBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQueTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzICE9IG51bGwpIHtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueCArPSB4O1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy55ICs9IHk7XG4gIH1cblxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gZGF0YTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ29mZnNldCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgZm46IG9mZnNldFxufTsiLCAiaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuLi91dGlscy9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuXG5mdW5jdGlvbiBwb3BwZXJPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIC8vIE9mZnNldHMgYXJlIHRoZSBhY3R1YWwgcG9zaXRpb24gdGhlIHBvcHBlciBuZWVkcyB0byBoYXZlIHRvIGJlXG4gIC8vIHByb3Blcmx5IHBvc2l0aW9uZWQgbmVhciBpdHMgcmVmZXJlbmNlIGVsZW1lbnRcbiAgLy8gVGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBwbGFjZW1lbnQsIGFuZCB3aWxsIGJlIGFkanVzdGVkIGJ5XG4gIC8vIHRoZSBtb2RpZmllcnMgaW4gdGhlIG5leHQgc3RlcFxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogc3RhdGUucmVjdHMucmVmZXJlbmNlLFxuICAgIGVsZW1lbnQ6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3BvcHBlck9mZnNldHMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3JlYWQnLFxuICBmbjogcG9wcGVyT2Zmc2V0cyxcbiAgZGF0YToge31cbn07IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEFsdEF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufSIsICJpbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20sIHN0YXJ0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QWx0QXhpcyBmcm9tIFwiLi4vdXRpbHMvZ2V0QWx0QXhpcy5qc1wiO1xuaW1wb3J0IHsgd2l0aGluLCB3aXRoaW5NYXhDbGFtcCB9IGZyb20gXCIuLi91dGlscy93aXRoaW4uanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuLi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanNcIjtcbmltcG9ydCB7IG1pbiBhcyBtYXRoTWluLCBtYXggYXMgbWF0aE1heCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIHByZXZlbnRPdmVyZmxvdyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IGZhbHNlIDogX29wdGlvbnMkYWx0QXhpcyxcbiAgICAgIGJvdW5kYXJ5ID0gb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IG9wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBvcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyxcbiAgICAgIF9vcHRpb25zJHRldGhlciA9IG9wdGlvbnMudGV0aGVyLFxuICAgICAgdGV0aGVyID0gX29wdGlvbnMkdGV0aGVyID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkdGV0aGVyLFxuICAgICAgX29wdGlvbnMkdGV0aGVyT2Zmc2V0ID0gb3B0aW9ucy50ZXRoZXJPZmZzZXQsXG4gICAgICB0ZXRoZXJPZmZzZXQgPSBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQ7XG4gIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5XG4gIH0pO1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIHZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgaXNCYXNlUGxhY2VtZW50ID0gIXZhcmlhdGlvbjtcbiAgdmFyIG1haW5BeGlzID0gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpO1xuICB2YXIgYWx0QXhpcyA9IGdldEFsdEF4aXMobWFpbkF4aXMpO1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cztcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgdGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0ID09PSAnZnVuY3Rpb24nID8gdGV0aGVyT2Zmc2V0KE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSkpIDogdGV0aGVyT2Zmc2V0O1xuICB2YXIgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlID0gdHlwZW9mIHRldGhlck9mZnNldFZhbHVlID09PSAnbnVtYmVyJyA/IHtcbiAgICBtYWluQXhpczogdGV0aGVyT2Zmc2V0VmFsdWUsXG4gICAgYWx0QXhpczogdGV0aGVyT2Zmc2V0VmFsdWVcbiAgfSA6IE9iamVjdC5hc3NpZ24oe1xuICAgIG1haW5BeGlzOiAwLFxuICAgIGFsdEF4aXM6IDBcbiAgfSwgdGV0aGVyT2Zmc2V0VmFsdWUpO1xuICB2YXIgb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0ID8gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXRbc3RhdGUucGxhY2VtZW50XSA6IG51bGw7XG4gIHZhciBkYXRhID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuXG4gIGlmICghcG9wcGVyT2Zmc2V0cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclN0YXRlJDtcblxuICAgIHZhciBtYWluU2lkZSA9IG1haW5BeGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICAgIHZhciBhbHRTaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgIHZhciBvZmZzZXQgPSBwb3BwZXJPZmZzZXRzW21haW5BeGlzXTtcbiAgICB2YXIgbWluID0gb2Zmc2V0ICsgb3ZlcmZsb3dbbWFpblNpZGVdO1xuICAgIHZhciBtYXggPSBvZmZzZXQgLSBvdmVyZmxvd1thbHRTaWRlXTtcbiAgICB2YXIgYWRkaXRpdmUgPSB0ZXRoZXIgPyAtcG9wcGVyUmVjdFtsZW5dIC8gMiA6IDA7XG4gICAgdmFyIG1pbkxlbiA9IHZhcmlhdGlvbiA9PT0gc3RhcnQgPyByZWZlcmVuY2VSZWN0W2xlbl0gOiBwb3BwZXJSZWN0W2xlbl07XG4gICAgdmFyIG1heExlbiA9IHZhcmlhdGlvbiA9PT0gc3RhcnQgPyAtcG9wcGVyUmVjdFtsZW5dIDogLXJlZmVyZW5jZVJlY3RbbGVuXTsgLy8gV2UgbmVlZCB0byBpbmNsdWRlIHRoZSBhcnJvdyBpbiB0aGUgY2FsY3VsYXRpb24gc28gdGhlIGFycm93IGRvZXNuJ3QgZ29cbiAgICAvLyBvdXRzaWRlIHRoZSByZWZlcmVuY2UgYm91bmRzXG5cbiAgICB2YXIgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3c7XG4gICAgdmFyIGFycm93UmVjdCA9IHRldGhlciAmJiBhcnJvd0VsZW1lbnQgPyBnZXRMYXlvdXRSZWN0KGFycm93RWxlbWVudCkgOiB7XG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMFxuICAgIH07XG4gICAgdmFyIGFycm93UGFkZGluZ09iamVjdCA9IHN0YXRlLm1vZGlmaWVyc0RhdGFbJ2Fycm93I3BlcnNpc3RlbnQnXSA/IHN0YXRlLm1vZGlmaWVyc0RhdGFbJ2Fycm93I3BlcnNpc3RlbnQnXS5wYWRkaW5nIDogZ2V0RnJlc2hTaWRlT2JqZWN0KCk7XG4gICAgdmFyIGFycm93UGFkZGluZ01pbiA9IGFycm93UGFkZGluZ09iamVjdFttYWluU2lkZV07XG4gICAgdmFyIGFycm93UGFkZGluZ01heCA9IGFycm93UGFkZGluZ09iamVjdFthbHRTaWRlXTsgLy8gSWYgdGhlIHJlZmVyZW5jZSBsZW5ndGggaXMgc21hbGxlciB0aGFuIHRoZSBhcnJvdyBsZW5ndGgsIHdlIGRvbid0IHdhbnRcbiAgICAvLyB0byBpbmNsdWRlIGl0cyBmdWxsIHNpemUgaW4gdGhlIGNhbGN1bGF0aW9uLiBJZiB0aGUgcmVmZXJlbmNlIGlzIHNtYWxsXG4gICAgLy8gYW5kIG5lYXIgdGhlIGVkZ2Ugb2YgYSBib3VuZGFyeSwgdGhlIHBvcHBlciBjYW4gb3ZlcmZsb3cgZXZlbiBpZiB0aGVcbiAgICAvLyByZWZlcmVuY2UgaXMgbm90IG92ZXJmbG93aW5nIGFzIHdlbGwgKGUuZy4gdmlydHVhbCBlbGVtZW50cyB3aXRoIG5vXG4gICAgLy8gd2lkdGggb3IgaGVpZ2h0KVxuXG4gICAgdmFyIGFycm93TGVuID0gd2l0aGluKDAsIHJlZmVyZW5jZVJlY3RbbGVuXSwgYXJyb3dSZWN0W2xlbl0pO1xuICAgIHZhciBtaW5PZmZzZXQgPSBpc0Jhc2VQbGFjZW1lbnQgPyByZWZlcmVuY2VSZWN0W2xlbl0gLyAyIC0gYWRkaXRpdmUgLSBhcnJvd0xlbiAtIGFycm93UGFkZGluZ01pbiAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcyA6IG1pbkxlbiAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzO1xuICAgIHZhciBtYXhPZmZzZXQgPSBpc0Jhc2VQbGFjZW1lbnQgPyAtcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiArIGFkZGl0aXZlICsgYXJyb3dMZW4gKyBhcnJvd1BhZGRpbmdNYXggKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXMgOiBtYXhMZW4gKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcztcbiAgICB2YXIgYXJyb3dPZmZzZXRQYXJlbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdyAmJiBnZXRPZmZzZXRQYXJlbnQoc3RhdGUuZWxlbWVudHMuYXJyb3cpO1xuICAgIHZhciBjbGllbnRPZmZzZXQgPSBhcnJvd09mZnNldFBhcmVudCA/IG1haW5BeGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRUb3AgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudExlZnQgfHwgMCA6IDA7XG4gICAgdmFyIG9mZnNldE1vZGlmaWVyVmFsdWUgPSAoX29mZnNldE1vZGlmaWVyU3RhdGUkID0gb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogb2Zmc2V0TW9kaWZpZXJTdGF0ZVttYWluQXhpc10pICE9IG51bGwgPyBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQgOiAwO1xuICAgIHZhciB0ZXRoZXJNaW4gPSBvZmZzZXQgKyBtaW5PZmZzZXQgLSBvZmZzZXRNb2RpZmllclZhbHVlIC0gY2xpZW50T2Zmc2V0O1xuICAgIHZhciB0ZXRoZXJNYXggPSBvZmZzZXQgKyBtYXhPZmZzZXQgLSBvZmZzZXRNb2RpZmllclZhbHVlO1xuICAgIHZhciBwcmV2ZW50ZWRPZmZzZXQgPSB3aXRoaW4odGV0aGVyID8gbWF0aE1pbihtaW4sIHRldGhlck1pbikgOiBtaW4sIG9mZnNldCwgdGV0aGVyID8gbWF0aE1heChtYXgsIHRldGhlck1heCkgOiBtYXgpO1xuICAgIHBvcHBlck9mZnNldHNbbWFpbkF4aXNdID0gcHJldmVudGVkT2Zmc2V0O1xuICAgIGRhdGFbbWFpbkF4aXNdID0gcHJldmVudGVkT2Zmc2V0IC0gb2Zmc2V0O1xuICB9XG5cbiAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyO1xuXG4gICAgdmFyIF9tYWluU2lkZSA9IG1haW5BeGlzID09PSAneCcgPyB0b3AgOiBsZWZ0O1xuXG4gICAgdmFyIF9hbHRTaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IGJvdHRvbSA6IHJpZ2h0O1xuXG4gICAgdmFyIF9vZmZzZXQgPSBwb3BwZXJPZmZzZXRzW2FsdEF4aXNdO1xuXG4gICAgdmFyIF9sZW4gPSBhbHRBeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgICB2YXIgX21pbiA9IF9vZmZzZXQgKyBvdmVyZmxvd1tfbWFpblNpZGVdO1xuXG4gICAgdmFyIF9tYXggPSBfb2Zmc2V0IC0gb3ZlcmZsb3dbX2FsdFNpZGVdO1xuXG4gICAgdmFyIGlzT3JpZ2luU2lkZSA9IFt0b3AsIGxlZnRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgIT09IC0xO1xuXG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclZhbHVlID0gKF9vZmZzZXRNb2RpZmllclN0YXRlJDIgPSBvZmZzZXRNb2RpZmllclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvZmZzZXRNb2RpZmllclN0YXRlW2FsdEF4aXNdKSAhPSBudWxsID8gX29mZnNldE1vZGlmaWVyU3RhdGUkMiA6IDA7XG5cbiAgICB2YXIgX3RldGhlck1pbiA9IGlzT3JpZ2luU2lkZSA/IF9taW4gOiBfb2Zmc2V0IC0gcmVmZXJlbmNlUmVjdFtfbGVuXSAtIHBvcHBlclJlY3RbX2xlbl0gLSBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5hbHRBeGlzO1xuXG4gICAgdmFyIF90ZXRoZXJNYXggPSBpc09yaWdpblNpZGUgPyBfb2Zmc2V0ICsgcmVmZXJlbmNlUmVjdFtfbGVuXSArIHBvcHBlclJlY3RbX2xlbl0gLSBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5hbHRBeGlzIDogX21heDtcblxuICAgIHZhciBfcHJldmVudGVkT2Zmc2V0ID0gdGV0aGVyICYmIGlzT3JpZ2luU2lkZSA/IHdpdGhpbk1heENsYW1wKF90ZXRoZXJNaW4sIF9vZmZzZXQsIF90ZXRoZXJNYXgpIDogd2l0aGluKHRldGhlciA/IF90ZXRoZXJNaW4gOiBfbWluLCBfb2Zmc2V0LCB0ZXRoZXIgPyBfdGV0aGVyTWF4IDogX21heCk7XG5cbiAgICBwb3BwZXJPZmZzZXRzW2FsdEF4aXNdID0gX3ByZXZlbnRlZE9mZnNldDtcbiAgICBkYXRhW2FsdEF4aXNdID0gX3ByZXZlbnRlZE9mZnNldCAtIF9vZmZzZXQ7XG4gIH1cblxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gZGF0YTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3ByZXZlbnRPdmVyZmxvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBwcmV2ZW50T3ZlcmZsb3csXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsnb2Zmc2V0J11cbn07IiwgImV4cG9ydCB7IGRlZmF1bHQgYXMgYXBwbHlTdHlsZXMgfSBmcm9tIFwiLi9hcHBseVN0eWxlcy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhcnJvdyB9IGZyb20gXCIuL2Fycm93LmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbXB1dGVTdHlsZXMgfSBmcm9tIFwiLi9jb21wdXRlU3R5bGVzLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGV2ZW50TGlzdGVuZXJzIH0gZnJvbSBcIi4vZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmxpcCB9IGZyb20gXCIuL2ZsaXAuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaGlkZSB9IGZyb20gXCIuL2hpZGUuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgb2Zmc2V0IH0gZnJvbSBcIi4vb2Zmc2V0LmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBvcHBlck9mZnNldHMgfSBmcm9tIFwiLi9wb3BwZXJPZmZzZXRzLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHByZXZlbnRPdmVyZmxvdyB9IGZyb20gXCIuL3ByZXZlbnRPdmVyZmxvdy5qc1wiOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRIVE1MRWxlbWVudFNjcm9sbChlbGVtZW50KSB7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgfTtcbn0iLCAiaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldEhUTUxFbGVtZW50U2Nyb2xsIGZyb20gXCIuL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXROb2RlU2Nyb2xsKG5vZGUpIHtcbiAgaWYgKG5vZGUgPT09IGdldFdpbmRvdyhub2RlKSB8fCAhaXNIVE1MRWxlbWVudChub2RlKSkge1xuICAgIHJldHVybiBnZXRXaW5kb3dTY3JvbGwobm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGdldEhUTUxFbGVtZW50U2Nyb2xsKG5vZGUpO1xuICB9XG59IiwgImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZVNjcm9sbCBmcm9tIFwiLi9nZXROb2RlU2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudFNjYWxlZChlbGVtZW50KSB7XG4gIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IHJvdW5kKHJlY3Qud2lkdGgpIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxO1xuICB2YXIgc2NhbGVZID0gcm91bmQocmVjdC5oZWlnaHQpIC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMTtcbiAgcmV0dXJuIHNjYWxlWCAhPT0gMSB8fCBzY2FsZVkgIT09IDE7XG59IC8vIFJldHVybnMgdGhlIGNvbXBvc2l0ZSByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC5cbi8vIENvbXBvc2l0ZSBtZWFucyBpdCB0YWtlcyBpbnRvIGFjY291bnQgdHJhbnNmb3JtcyBhcyB3ZWxsIGFzIGxheW91dC5cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wb3NpdGVSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnQsIGlzRml4ZWQpIHtcbiAgaWYgKGlzRml4ZWQgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudElzU2NhbGVkID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGlzRWxlbWVudFNjYWxlZChvZmZzZXRQYXJlbnQpO1xuICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnRJc1NjYWxlZCwgaXNGaXhlZCk7XG4gIHZhciBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgdmFyIG9mZnNldHMgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMDc4XG4gICAgaXNTY3JvbGxQYXJlbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cblxuICAgIGlmIChpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgIG9mZnNldHMgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlKTtcbiAgICAgIG9mZnNldHMueCArPSBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSArPSBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCxcbiAgICB5OiByZWN0LnRvcCArIHNjcm9sbC5zY3JvbGxUb3AgLSBvZmZzZXRzLnksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufSIsICJpbXBvcnQgeyBtb2RpZmllclBoYXNlcyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBzb3VyY2U6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ5ODc1MjU1XG5cbmZ1bmN0aW9uIG9yZGVyKG1vZGlmaWVycykge1xuICB2YXIgbWFwID0gbmV3IE1hcCgpO1xuICB2YXIgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBtYXAuc2V0KG1vZGlmaWVyLm5hbWUsIG1vZGlmaWVyKTtcbiAgfSk7IC8vIE9uIHZpc2l0aW5nIG9iamVjdCwgY2hlY2sgZm9yIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHZpc2l0IHRoZW0gcmVjdXJzaXZlbHlcblxuICBmdW5jdGlvbiBzb3J0KG1vZGlmaWVyKSB7XG4gICAgdmlzaXRlZC5hZGQobW9kaWZpZXIubmFtZSk7XG4gICAgdmFyIHJlcXVpcmVzID0gW10uY29uY2F0KG1vZGlmaWVyLnJlcXVpcmVzIHx8IFtdLCBtb2RpZmllci5yZXF1aXJlc0lmRXhpc3RzIHx8IFtdKTtcbiAgICByZXF1aXJlcy5mb3JFYWNoKGZ1bmN0aW9uIChkZXApIHtcbiAgICAgIGlmICghdmlzaXRlZC5oYXMoZGVwKSkge1xuICAgICAgICB2YXIgZGVwTW9kaWZpZXIgPSBtYXAuZ2V0KGRlcCk7XG5cbiAgICAgICAgaWYgKGRlcE1vZGlmaWVyKSB7XG4gICAgICAgICAgc29ydChkZXBNb2RpZmllcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXN1bHQucHVzaChtb2RpZmllcik7XG4gIH1cblxuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBpZiAoIXZpc2l0ZWQuaGFzKG1vZGlmaWVyLm5hbWUpKSB7XG4gICAgICAvLyBjaGVjayBmb3IgdmlzaXRlZCBvYmplY3RcbiAgICAgIHNvcnQobW9kaWZpZXIpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9yZGVyTW9kaWZpZXJzKG1vZGlmaWVycykge1xuICAvLyBvcmRlciBiYXNlZCBvbiBkZXBlbmRlbmNpZXNcbiAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcihtb2RpZmllcnMpOyAvLyBvcmRlciBiYXNlZCBvbiBwaGFzZVxuXG4gIHJldHVybiBtb2RpZmllclBoYXNlcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGhhc2UpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgIHJldHVybiBtb2RpZmllci5waGFzZSA9PT0gcGhhc2U7XG4gICAgfSkpO1xuICB9LCBbXSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlYm91bmNlKGZuKSB7XG4gIHZhciBwZW5kaW5nO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghcGVuZGluZykge1xuICAgICAgcGVuZGluZyA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHBlbmRpbmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmVzb2x2ZShmbigpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGVuZGluZztcbiAgfTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VCeU5hbWUobW9kaWZpZXJzKSB7XG4gIHZhciBtZXJnZWQgPSBtb2RpZmllcnMucmVkdWNlKGZ1bmN0aW9uIChtZXJnZWQsIGN1cnJlbnQpIHtcbiAgICB2YXIgZXhpc3RpbmcgPSBtZXJnZWRbY3VycmVudC5uYW1lXTtcbiAgICBtZXJnZWRbY3VycmVudC5uYW1lXSA9IGV4aXN0aW5nID8gT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcsIGN1cnJlbnQsIHtcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLm9wdGlvbnMsIGN1cnJlbnQub3B0aW9ucyksXG4gICAgICBkYXRhOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5kYXRhLCBjdXJyZW50LmRhdGEpXG4gICAgfSkgOiBjdXJyZW50O1xuICAgIHJldHVybiBtZXJnZWQ7XG4gIH0sIHt9KTsgLy8gSUUxMSBkb2VzIG5vdCBzdXBwb3J0IE9iamVjdC52YWx1ZXNcblxuICByZXR1cm4gT2JqZWN0LmtleXMobWVyZ2VkKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBtZXJnZWRba2V5XTtcbiAgfSk7XG59IiwgImltcG9ydCBnZXRDb21wb3NpdGVSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2RvbS11dGlscy9saXN0U2Nyb2xsUGFyZW50cy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgb3JkZXJNb2RpZmllcnMgZnJvbSBcIi4vdXRpbHMvb3JkZXJNb2RpZmllcnMuanNcIjtcbmltcG9ydCBkZWJvdW5jZSBmcm9tIFwiLi91dGlscy9kZWJvdW5jZS5qc1wiO1xuaW1wb3J0IG1lcmdlQnlOYW1lIGZyb20gXCIuL3V0aWxzL21lcmdlQnlOYW1lLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7XG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICBtb2RpZmllcnM6IFtdLFxuICBzdHJhdGVneTogJ2Fic29sdXRlJ1xufTtcblxuZnVuY3Rpb24gYXJlVmFsaWRFbGVtZW50cygpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiAhYXJncy5zb21lKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgcmV0dXJuICEoZWxlbWVudCAmJiB0eXBlb2YgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QgPT09ICdmdW5jdGlvbicpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcHBlckdlbmVyYXRvcihnZW5lcmF0b3JPcHRpb25zKSB7XG4gIGlmIChnZW5lcmF0b3JPcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBnZW5lcmF0b3JPcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX2dlbmVyYXRvck9wdGlvbnMgPSBnZW5lcmF0b3JPcHRpb25zLFxuICAgICAgX2dlbmVyYXRvck9wdGlvbnMkZGVmID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE1vZGlmaWVycyxcbiAgICAgIGRlZmF1bHRNb2RpZmllcnMgPSBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPT09IHZvaWQgMCA/IFtdIDogX2dlbmVyYXRvck9wdGlvbnMkZGVmLFxuICAgICAgX2dlbmVyYXRvck9wdGlvbnMkZGVmMiA9IF9nZW5lcmF0b3JPcHRpb25zLmRlZmF1bHRPcHRpb25zLFxuICAgICAgZGVmYXVsdE9wdGlvbnMgPSBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID09PSB2b2lkIDAgPyBERUZBVUxUX09QVElPTlMgOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyO1xuICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlUG9wcGVyKHJlZmVyZW5jZSwgcG9wcGVyLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zO1xuICAgIH1cblxuICAgIHZhciBzdGF0ZSA9IHtcbiAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICBvcmRlcmVkTW9kaWZpZXJzOiBbXSxcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfT1BUSU9OUywgZGVmYXVsdE9wdGlvbnMpLFxuICAgICAgbW9kaWZpZXJzRGF0YToge30sXG4gICAgICBlbGVtZW50czoge1xuICAgICAgICByZWZlcmVuY2U6IHJlZmVyZW5jZSxcbiAgICAgICAgcG9wcGVyOiBwb3BwZXJcbiAgICAgIH0sXG4gICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgIHN0eWxlczoge31cbiAgICB9O1xuICAgIHZhciBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgdmFyIGlzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgdmFyIGluc3RhbmNlID0ge1xuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgc2V0T3B0aW9uczogZnVuY3Rpb24gc2V0T3B0aW9ucyhzZXRPcHRpb25zQWN0aW9uKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gdHlwZW9mIHNldE9wdGlvbnNBY3Rpb24gPT09ICdmdW5jdGlvbicgPyBzZXRPcHRpb25zQWN0aW9uKHN0YXRlLm9wdGlvbnMpIDogc2V0T3B0aW9uc0FjdGlvbjtcbiAgICAgICAgY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICBzdGF0ZS5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIHN0YXRlLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICBzdGF0ZS5zY3JvbGxQYXJlbnRzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogaXNFbGVtZW50KHJlZmVyZW5jZSkgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UpIDogcmVmZXJlbmNlLmNvbnRleHRFbGVtZW50ID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlLmNvbnRleHRFbGVtZW50KSA6IFtdLFxuICAgICAgICAgIHBvcHBlcjogbGlzdFNjcm9sbFBhcmVudHMocG9wcGVyKVxuICAgICAgICB9OyAvLyBPcmRlcnMgdGhlIG1vZGlmaWVycyBiYXNlZCBvbiB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGBwaGFzZWBcbiAgICAgICAgLy8gcHJvcGVydGllc1xuXG4gICAgICAgIHZhciBvcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJNb2RpZmllcnMobWVyZ2VCeU5hbWUoW10uY29uY2F0KGRlZmF1bHRNb2RpZmllcnMsIHN0YXRlLm9wdGlvbnMubW9kaWZpZXJzKSkpOyAvLyBTdHJpcCBvdXQgZGlzYWJsZWQgbW9kaWZpZXJzXG5cbiAgICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgcmV0dXJuIG0uZW5hYmxlZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJ1bk1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UudXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgLy8gU3luYyB1cGRhdGUgXHUyMDEzIGl0IHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGVkLCBldmVuIGlmIG5vdCBuZWNlc3NhcnkuIFRoaXNcbiAgICAgIC8vIGlzIHVzZWZ1bCBmb3IgbG93IGZyZXF1ZW5jeSB1cGRhdGVzIHdoZXJlIHN5bmMgYmVoYXZpb3Igc2ltcGxpZmllcyB0aGVcbiAgICAgIC8vIGxvZ2ljLlxuICAgICAgLy8gRm9yIGhpZ2ggZnJlcXVlbmN5IHVwZGF0ZXMgKGUuZy4gYHJlc2l6ZWAgYW5kIGBzY3JvbGxgIGV2ZW50cyksIGFsd2F5c1xuICAgICAgLy8gcHJlZmVyIHRoZSBhc3luYyBQb3BwZXIjdXBkYXRlIG1ldGhvZFxuICAgICAgZm9yY2VVcGRhdGU6IGZ1bmN0aW9uIGZvcmNlVXBkYXRlKCkge1xuICAgICAgICBpZiAoaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX3N0YXRlJGVsZW1lbnRzID0gc3RhdGUuZWxlbWVudHMsXG4gICAgICAgICAgICByZWZlcmVuY2UgPSBfc3RhdGUkZWxlbWVudHMucmVmZXJlbmNlLFxuICAgICAgICAgICAgcG9wcGVyID0gX3N0YXRlJGVsZW1lbnRzLnBvcHBlcjsgLy8gRG9uJ3QgcHJvY2VlZCBpZiBgcmVmZXJlbmNlYCBvciBgcG9wcGVyYCBhcmUgbm90IHZhbGlkIGVsZW1lbnRzXG4gICAgICAgIC8vIGFueW1vcmVcblxuICAgICAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIFN0b3JlIHRoZSByZWZlcmVuY2UgYW5kIHBvcHBlciByZWN0cyB0byBiZSByZWFkIGJ5IG1vZGlmaWVyc1xuXG5cbiAgICAgICAgc3RhdGUucmVjdHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBnZXRDb21wb3NpdGVSZWN0KHJlZmVyZW5jZSwgZ2V0T2Zmc2V0UGFyZW50KHBvcHBlciksIHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3kgPT09ICdmaXhlZCcpLFxuICAgICAgICAgIHBvcHBlcjogZ2V0TGF5b3V0UmVjdChwb3BwZXIpXG4gICAgICAgIH07IC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIHJlc2V0IHRoZSBjdXJyZW50IHVwZGF0ZSBjeWNsZS4gVGhlXG4gICAgICAgIC8vIG1vc3QgY29tbW9uIHVzZSBjYXNlIGZvciB0aGlzIGlzIHRoZSBgZmxpcGAgbW9kaWZpZXIgY2hhbmdpbmcgdGhlXG4gICAgICAgIC8vIHBsYWNlbWVudCwgd2hpY2ggdGhlbiBuZWVkcyB0byByZS1ydW4gYWxsIHRoZSBtb2RpZmllcnMsIGJlY2F1c2UgdGhlXG4gICAgICAgIC8vIGxvZ2ljIHdhcyBwcmV2aW91c2x5IHJhbiBmb3IgdGhlIHByZXZpb3VzIHBsYWNlbWVudCBhbmQgaXMgdGhlcmVmb3JlXG4gICAgICAgIC8vIHN0YWxlL2luY29ycmVjdFxuXG4gICAgICAgIHN0YXRlLnJlc2V0ID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLnBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50OyAvLyBPbiBlYWNoIHVwZGF0ZSBjeWNsZSwgdGhlIGBtb2RpZmllcnNEYXRhYCBwcm9wZXJ0eSBmb3IgZWFjaCBtb2RpZmllclxuICAgICAgICAvLyBpcyBmaWxsZWQgd2l0aCB0aGUgaW5pdGlhbCBkYXRhIHNwZWNpZmllZCBieSB0aGUgbW9kaWZpZXIuIFRoaXMgbWVhbnNcbiAgICAgICAgLy8gaXQgZG9lc24ndCBwZXJzaXN0IGFuZCBpcyBmcmVzaCBvbiBlYWNoIHVwZGF0ZS5cbiAgICAgICAgLy8gVG8gZW5zdXJlIHBlcnNpc3RlbnQgZGF0YSwgdXNlIGAke25hbWV9I3BlcnNpc3RlbnRgXG5cbiAgICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgICAgIHJldHVybiBzdGF0ZS5tb2RpZmllcnNEYXRhW21vZGlmaWVyLm5hbWVdID0gT2JqZWN0LmFzc2lnbih7fSwgbW9kaWZpZXIuZGF0YSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIGlmIChzdGF0ZS5yZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGluZGV4ID0gLTE7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX3N0YXRlJG9yZGVyZWRNb2RpZmllID0gc3RhdGUub3JkZXJlZE1vZGlmaWVyc1tpbmRleF0sXG4gICAgICAgICAgICAgIGZuID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLmZuLFxuICAgICAgICAgICAgICBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLm9wdGlvbnMsXG4gICAgICAgICAgICAgIF9vcHRpb25zID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllMiA9PT0gdm9pZCAwID8ge30gOiBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyLFxuICAgICAgICAgICAgICBuYW1lID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLm5hbWU7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IGZuKHtcbiAgICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgICBvcHRpb25zOiBfb3B0aW9ucyxcbiAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlXG4gICAgICAgICAgICB9KSB8fCBzdGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBBc3luYyBhbmQgb3B0aW1pc3RpY2FsbHkgb3B0aW1pemVkIHVwZGF0ZSBcdTIwMTMgaXQgd2lsbCBub3QgYmUgZXhlY3V0ZWQgaWZcbiAgICAgIC8vIG5vdCBuZWNlc3NhcnkgKGRlYm91bmNlZCB0byBydW4gYXQgbW9zdCBvbmNlLXBlci10aWNrKVxuICAgICAgdXBkYXRlOiBkZWJvdW5jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgcmVzb2x2ZShzdGF0ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKCFhcmVWYWxpZEVsZW1lbnRzKHJlZmVyZW5jZSwgcG9wcGVyKSkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIGluc3RhbmNlLnNldE9wdGlvbnMob3B0aW9ucykudGhlbihmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgIGlmICghaXNEZXN0cm95ZWQgJiYgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKSB7XG4gICAgICAgIG9wdGlvbnMub25GaXJzdFVwZGF0ZShzdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7IC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUgYmVmb3JlIHRoZSBmaXJzdFxuICAgIC8vIHVwZGF0ZSBjeWNsZSBydW5zLiBUaGV5IHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIHVwZGF0ZVxuICAgIC8vIGN5Y2xlLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgbW9kaWZpZXIgYWRkcyBzb21lIHBlcnNpc3RlbnQgZGF0YSB0aGF0XG4gICAgLy8gb3RoZXIgbW9kaWZpZXJzIG5lZWQgdG8gdXNlLCBidXQgdGhlIG1vZGlmaWVyIGlzIHJ1biBhZnRlciB0aGUgZGVwZW5kZW50XG4gICAgLy8gb25lLlxuXG4gICAgZnVuY3Rpb24gcnVuTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgICAgICAgX3JlZiRvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgICAgICAgb3B0aW9ucyA9IF9yZWYkb3B0aW9ucyA9PT0gdm9pZCAwID8ge30gOiBfcmVmJG9wdGlvbnMsXG4gICAgICAgICAgICBlZmZlY3QgPSBfcmVmLmVmZmVjdDtcblxuICAgICAgICBpZiAodHlwZW9mIGVmZmVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHZhciBjbGVhbnVwRm4gPSBlZmZlY3Qoe1xuICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHZhciBub29wRm4gPSBmdW5jdGlvbiBub29wRm4oKSB7fTtcblxuICAgICAgICAgIGVmZmVjdENsZWFudXBGbnMucHVzaChjbGVhbnVwRm4gfHwgbm9vcEZuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpIHtcbiAgICAgIGVmZmVjdENsZWFudXBGbnMuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICB9KTtcbiAgICAgIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG59XG5leHBvcnQgdmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3IoKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBkZXRlY3RPdmVyZmxvdyB9OyIsICJpbXBvcnQgeyBwb3BwZXJHZW5lcmF0b3IsIGRldGVjdE92ZXJmbG93IH0gZnJvbSBcIi4vY3JlYXRlUG9wcGVyLmpzXCI7XG5pbXBvcnQgZXZlbnRMaXN0ZW5lcnMgZnJvbSBcIi4vbW9kaWZpZXJzL2V2ZW50TGlzdGVuZXJzLmpzXCI7XG5pbXBvcnQgcG9wcGVyT2Zmc2V0cyBmcm9tIFwiLi9tb2RpZmllcnMvcG9wcGVyT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanNcIjtcbmltcG9ydCBhcHBseVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanNcIjtcbmltcG9ydCBvZmZzZXQgZnJvbSBcIi4vbW9kaWZpZXJzL29mZnNldC5qc1wiO1xuaW1wb3J0IGZsaXAgZnJvbSBcIi4vbW9kaWZpZXJzL2ZsaXAuanNcIjtcbmltcG9ydCBwcmV2ZW50T3ZlcmZsb3cgZnJvbSBcIi4vbW9kaWZpZXJzL3ByZXZlbnRPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGFycm93IGZyb20gXCIuL21vZGlmaWVycy9hcnJvdy5qc1wiO1xuaW1wb3J0IGhpZGUgZnJvbSBcIi4vbW9kaWZpZXJzL2hpZGUuanNcIjtcbnZhciBkZWZhdWx0TW9kaWZpZXJzID0gW2V2ZW50TGlzdGVuZXJzLCBwb3BwZXJPZmZzZXRzLCBjb21wdXRlU3R5bGVzLCBhcHBseVN0eWxlcywgb2Zmc2V0LCBmbGlwLCBwcmV2ZW50T3ZlcmZsb3csIGFycm93LCBoaWRlXTtcbnZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKHtcbiAgZGVmYXVsdE1vZGlmaWVyczogZGVmYXVsdE1vZGlmaWVyc1xufSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyLCBwb3BwZXJHZW5lcmF0b3IsIGRlZmF1bHRNb2RpZmllcnMsIGRldGVjdE92ZXJmbG93IH07IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyIGFzIGNyZWF0ZVBvcHBlckxpdGUgfSBmcm9tIFwiLi9wb3BwZXItbGl0ZS5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCAqIGZyb20gXCIuL21vZGlmaWVycy9pbmRleC5qc1wiOyIsICJleHBvcnQgKiBmcm9tIFwiLi9lbnVtcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbW9kaWZpZXJzL2luZGV4LmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdywgY3JlYXRlUG9wcGVyIGFzIGNyZWF0ZVBvcHBlckJhc2UgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgfSBmcm9tIFwiLi9wb3BwZXIuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyTGl0ZSB9IGZyb20gXCIuL3BvcHBlci1saXRlLmpzXCI7IiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgZ2V0R2xvYmFsIH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcblxuZXhwb3J0IHsgcmFuZG9tIH07XG5cbi8qKlxuICogdGhpcyBmdW5jdGlvbiB1c2VzIGNyeXB0IGFuZCByZXR1cm5zIGEgcmFuZG9tIG51bWJlci5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbWluIHN0YXJ0aW5nIHZhbHVlIG9mIHRoZSBkZWZpbml0aW9uIHNldCAoZGVmYXVsdCBpcyAwKVxuICogQHBhcmFtIHtudW1iZXJ9IG1heCBlbmQgdmFsdWUgb2YgdGhlIGRlZmluaXRpb24gc2V0IChkZWZhdWx0IGlzIDEwMDAwMDAwMDApXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICogQG1lbWJlck9mIE1vbnN0ZXIuTWF0aFxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgY3J5cHRcbiAqIEB0aHJvd3Mge0Vycm9yfSB3ZSBjYW5ub3QgZ2VuZXJhdGUgbnVtYmVycyBsYXJnZXIgdGhhbiA1MyBiaXRzLlxuICogQHRocm93cyB7RXJyb3J9IHRoZSBkaXN0YW5jZSBpcyB0b28gc21hbGwgdG8gY3JlYXRlIGEgcmFuZG9tIG51bWJlci5cblxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbShtaW4sIG1heCkge1xuXHRpZiAobWluID09PSB1bmRlZmluZWQpIHtcblx0XHRtaW4gPSAwO1xuXHR9XG5cdGlmIChtYXggPT09IHVuZGVmaW5lZCkge1xuXHRcdG1heCA9IE1BWDtcblx0fVxuXG5cdGlmIChtYXggPCBtaW4pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtYXggbXVzdCBiZSBncmVhdGVyIHRoYW4gbWluXCIpO1xuXHR9XG5cblx0cmV0dXJuIE1hdGgucm91bmQoY3JlYXRlKG1pbiwgbWF4KSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IE1BWCA9IDEwMDAwMDAwMDA7XG5cbk1hdGgubG9nMiA9XG5cdE1hdGgubG9nMiB8fFxuXHRmdW5jdGlvbiAobikge1xuXHRcdHJldHVybiBNYXRoLmxvZyhuKSAvIE1hdGgubG9nKDIpO1xuXHR9O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbWluXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4XG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGNyeXB0XG4gKiBAdGhyb3dzIHtFcnJvcn0gd2UgY2Fubm90IGdlbmVyYXRlIG51bWJlcnMgbGFyZ2VyIHRoYW4gNTMgYml0cy5cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZGlzdGFuY2UgaXMgdG9vIHNtYWxsIHRvIGNyZWF0ZSBhIHJhbmRvbSBudW1iZXIuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZShtaW4sIG1heCkge1xuXHRsZXQgY3J5cHQ7XG5cdGNvbnN0IGdsb2JhbFJlZmVyZW5jZSA9IGdldEdsb2JhbCgpO1xuXG5cdGNyeXB0ID1cblx0XHRnbG9iYWxSZWZlcmVuY2U/LltcImNyeXB0b1wiXSB8fFxuXHRcdGdsb2JhbFJlZmVyZW5jZT8uW1wibXNDcnlwdG9cIl0gfHxcblx0XHRnbG9iYWxSZWZlcmVuY2U/LltcImNyeXB0b1wiXSB8fFxuXHRcdHVuZGVmaW5lZDtcblxuXHRpZiAodHlwZW9mIGNyeXB0ID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBjcnlwdFwiKTtcblx0fVxuXG5cdGxldCBydmFsID0gMDtcblx0Y29uc3QgcmFuZ2UgPSBtYXggLSBtaW47XG5cdGlmIChyYW5nZSA8IDIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgZGlzdGFuY2UgaXMgdG9vIHNtYWxsIHRvIGNyZWF0ZSBhIHJhbmRvbSBudW1iZXIuXCIpO1xuXHR9XG5cblx0Y29uc3QgYml0c05lZWRlZCA9IE1hdGguY2VpbChNYXRoLmxvZzIocmFuZ2UpKTtcblx0aWYgKGJpdHNOZWVkZWQgPiA1Mykge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIndlIGNhbm5vdCBnZW5lcmF0ZSBudW1iZXJzIGxhcmdlciB0aGFuIDUzIGJpdHMuXCIpO1xuXHR9XG5cdGNvbnN0IGJ5dGVzTmVlZGVkID0gTWF0aC5jZWlsKGJpdHNOZWVkZWQgLyA4KTtcblx0Y29uc3QgbWFzayA9IE1hdGgucG93KDIsIGJpdHNOZWVkZWQpIC0gMTtcblxuXHRjb25zdCBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShieXRlc05lZWRlZCk7XG5cdGNyeXB0LmdldFJhbmRvbVZhbHVlcyhieXRlQXJyYXkpO1xuXG5cdGxldCBwID0gKGJ5dGVzTmVlZGVkIC0gMSkgKiA4O1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzTmVlZGVkOyBpKyspIHtcblx0XHRydmFsICs9IGJ5dGVBcnJheVtpXSAqIE1hdGgucG93KDIsIHApO1xuXHRcdHAgLT0gODtcblx0fVxuXG5cdHJ2YWwgPSBydmFsICYgbWFzaztcblxuXHRpZiAocnZhbCA+PSByYW5nZSkge1xuXHRcdHJldHVybiBjcmVhdGUobWluLCBtYXgpO1xuXHR9XG5cblx0aWYgKHJ2YWwgPCBtaW4pIHtcblx0XHRydmFsICs9IG1pbjtcblx0fVxuXG5cdHJldHVybiBydmFsO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc0ludGVnZXIgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUZ1bmN0aW9uLCB2YWxpZGF0ZUludGVnZXIgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IERlYWRNYW5zU3dpdGNoIH07XG5cbi8qKlxuICogVGhlIGRlYWQgbWFuJ3Mgc3dpdGNoIGFsbG93cyB0byBzZXQgYSB0aW1lciB3aGljaCBjYW4gYmUgcmVzZXQgYWdhaW4gYW5kIGFnYWluIHdpdGhpbiBhIGRlZmluZWQgcGVyaW9kIG9mIHRpbWUuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yOS4wXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKiBAc3VtbWFyeSBDbGFzcyB0byBiZSBhYmxlIHRvIGV4ZWN1dGUgZnVuY3Rpb24gY2hhaW5zXG4gKi9cbmNsYXNzIERlYWRNYW5zU3dpdGNoIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBDcmVhdGUgbmV3IGRlYWQgbWFuJ3Mgc3dpdGNoXG5cdCAqXG5cdCAqIEBwYXJhbSB7SW50ZWdlcn0gZGVsYXlcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHRocm93IHtUeXBlRXJyb3J9IHRoZSBhcmd1bWVudHMgbXVzdCBiZSBlaXRoZXIgaW50ZWdlciBvciBmdW5jdGlvbnNcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuXHQgKi9cblx0Y29uc3RydWN0b3IoZGVsYXksIGNhbGxiYWNrKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGluaXQuY2FsbCh0aGlzLCB2YWxpZGF0ZUludGVnZXIoZGVsYXkpLCB2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtJbnRlZ2VyfHVuZGVmaW5lZH0gW2RlbGF5XVxuXHQgKi9cblx0dG91Y2goZGVsYXkpIHtcblx0XHRpZiAodGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJpc0FscmVhZHlSdW5cIl0gPT09IHRydWUpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImhhcyBhbHJlYWR5IHJ1blwiKTtcblx0XHR9XG5cblx0XHRpZiAoaXNJbnRlZ2VyKGRlbGF5KSkge1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJkZWxheVwiXSA9IGRlbGF5O1xuXHRcdH0gZWxzZSBpZiAoZGVsYXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgYXJndW1lbnRcIik7XG5cdFx0fVxuXG5cdFx0Y2xlYXJUaW1lb3V0KHRoaXNbaW50ZXJuYWxTeW1ib2xdW1widGltZXJcIl0pO1xuXG5cdFx0aW5pdENhbGxiYWNrLmNhbGwodGhpcyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRDYWxsYmFjaygpIHtcblx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJ0aW1lclwiXSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wiaXNBbHJlYWR5UnVuXCJdID0gdHJ1ZTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcImNhbGxiYWNrXCJdKCk7XG5cdH0sIHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wiZGVsYXlcIl0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGRlbGF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICovXG5mdW5jdGlvbiBpbml0KGRlbGF5LCBjYWxsYmFjaykge1xuXHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRjYWxsYmFjayxcblx0XHRkZWxheSxcblx0XHRpc0FscmVhZHlSdW46IGZhbHNlLFxuXHRcdHRpbWVyOiB1bmRlZmluZWQsXG5cdH07XG5cblx0aW5pdENhbGxiYWNrLmNhbGwodGhpcyk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxGdW5jdGlvbiB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc0ludGVnZXIgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gXCIuLi90eXBlcy9xdWV1ZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlRnVuY3Rpb24sIHZhbGlkYXRlSW50ZWdlciB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgUHJvY2Vzc2luZyB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIENhbGxiYWNrIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7aW50fHVuZGVmaW5lZH0gdGltZVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGNvbnN0cnVjdG9yKGNhbGxiYWNrLCB0aW1lKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0XHRjYWxsYmFjazogdmFsaWRhdGVGdW5jdGlvbihjYWxsYmFjayksXG5cdFx0XHR0aW1lOiB2YWxpZGF0ZUludGVnZXIodGltZSA/PyAwKSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSAgeyp9IGRhdGFcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHJ1bihkYXRhKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGdldEdsb2JhbEZ1bmN0aW9uKFwic2V0VGltZW91dFwiKSgoKSA9PiB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSh0aGlzW2ludGVybmFsU3ltYm9sXS5jYWxsYmFjayhkYXRhKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIHRoaXNbaW50ZXJuYWxTeW1ib2xdLnRpbWUpO1xuXHRcdH0pO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBjbGFzcyBhbGxvd3MgdG8gZXhlY3V0ZSBzZXZlcmFsIGZ1bmN0aW9ucyBpbiBvcmRlci5cbiAqXG4gKiBGdW5jdGlvbnMgYW5kIHRpbWVvdXRzIGNhbiBiZSBwYXNzZWQuIElmIGEgdGltZW91dCBpcyBwYXNzZWQsIGl0IGFwcGxpZXMgdG8gYWxsIGZ1cnRoZXIgZnVuY3Rpb25zLlxuICogSW4gdGhlIGV4YW1wbGVcbiAqXG4gKiBgdGltZW91dDEsIGZ1bmN0aW9uMSwgZnVuY3Rpb24yLCBmdW5jdGlvbjMsIHRpbWVvdXQyLCBmdW5jdGlvbjRgXG4gKlxuICogdGhlIHRpbWVvdXQxIGlzIHZhbGlkIGZvciB0aGUgZnVuY3Rpb25zIDEsIDIgYW5kIDMgYW5kIHRoZSB0aW1lb3V0MiBmb3IgdGhlIGZ1bmN0aW9uNC5cbiAqXG4gKiBTbyB0aGUgZXhlY3V0aW9uIHRpbWUgaXMgdGltZW91dDErdGltZW91dDErdGltZW91dDErdGltZW91dDJcbiAqXG4gKiBUaGUgcmVzdWx0IG9mIGBydW4oKWAgaXMgYSBwcm9taXNlLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS91dGlsL3Byb2Nlc3NpbmcubWpzXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMS4wXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKiBAc3VtbWFyeSBDbGFzcyB0byBiZSBhYmxlIHRvIGV4ZWN1dGUgZnVuY3Rpb24gY2hhaW5zXG4gKi9cbmNsYXNzIFByb2Nlc3NpbmcgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIENyZWF0ZSBuZXcgUHJvY2Vzc2luZ1xuXHQgKlxuXHQgKiBGdW5jdGlvbnMgYW5kIHRpbWVvdXRzIGNhbiBiZSBwYXNzZWQuIElmIGEgdGltZW91dCBpcyBwYXNzZWQsIGl0IGFwcGxpZXMgdG8gYWxsIGZ1cnRoZXIgZnVuY3Rpb25zLlxuXHQgKiBJbiB0aGUgZXhhbXBsZVxuXHQgKlxuXHQgKiBgdGltZW91dDEsIGZ1bmN0aW9uMSwgZnVuY3Rpb24yLCBmdW5jdGlvbjMsIHRpbWVvdXQyLCBmdW5jdGlvbjRgXG5cdCAqXG5cdCAqIHRoZSB0aW1lb3V0MSBpcyB2YWxpZCBmb3IgdGhlIGZ1bmN0aW9ucyAxLCAyIGFuZCAzIGFuZCB0aGUgdGltZW91dDIgZm9yIHRoZSBmdW5jdGlvbjQuXG5cdCAqXG5cdCAqIFNvIHRoZSBleGVjdXRpb24gdGltZSBpcyB0aW1lb3V0MSt0aW1lb3V0MSt0aW1lb3V0MSt0aW1lb3V0MlxuXHQgKlxuXHQgKiBAdGhyb3cge1R5cGVFcnJvcn0gdGhlIGFyZ3VtZW50cyBtdXN0IGJlIGVpdGhlciBpbnRlZ2VyIG9yIGZ1bmN0aW9uc1xuXHQgKiBAcGFyYW0gey4uLihpbnR8ZnVuY3Rpb24pfSBhcmdzXG5cdCAqL1xuXHRjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0cXVldWU6IG5ldyBRdWV1ZSgpLFxuXHRcdH07XG5cblx0XHRsZXQgdGltZSA9IDA7XG5cblx0XHRpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgfHwgYXJnc1swXSA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInRoZSBhcmd1bWVudHMgbXVzdCBiZSBlaXRoZXIgaW50ZWdlciBvciBmdW5jdGlvbnNcIik7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBbLCBhcmddIG9mIE9iamVjdC5lbnRyaWVzKGFyZ3MpKSB7XG5cdFx0XHRpZiAoaXNJbnRlZ2VyKGFyZykgJiYgYXJnID49IDApIHtcblx0XHRcdFx0dGltZSA9IGFyZztcblx0XHRcdH0gZWxzZSBpZiAoaXNGdW5jdGlvbihhcmcpKSB7XG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnF1ZXVlLmFkZChuZXcgQ2FsbGJhY2soYXJnLCB0aW1lKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XHRcdFwidGhlIGFyZ3VtZW50cyBtdXN0IGJlIGVpdGhlciBpbnRlZ2VyIG9yIGZ1bmN0aW9uc1wiLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgZnVuY3Rpb24gd2l0aCB0aGUgZGVzaXJlZCB0aW1lb3V0XG5cdCAqIElmIG5vIHRpbWVvdXQgaXMgc3BlY2lmaWVkLCB0aGUgdGltZW91dCBvZiB0aGUgcHJldmlvdXMgZnVuY3Rpb24gaXMgdXNlZC5cblx0ICpcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHBhcmFtIHtpbnR8dW5kZWZpbmVkfSB0aW1lXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuXHQgKi9cblx0YWRkKGNhbGxiYWNrLCB0aW1lKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ucXVldWUuYWRkKG5ldyBDYWxsYmFjayhjYWxsYmFjaywgdGltZSkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHRoZSBkZWZpbmVkIGZ1bmN0aW9ucyBpbiBvcmRlci5cblx0ICpcblx0ICogQHBhcmFtIHsqfSBkYXRhXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRydW4oZGF0YSkge1xuXHRcdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXS5xdWV1ZS5pc0VtcHR5KCkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZGF0YSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2FsbGJhY2sgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5xdWV1ZS5wb2xsKCk7XG5cblx0XHRpZiAoY2FsbGJhY2sgPT09IG51bGwgfHwgY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkYXRhKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY2FsbGJhY2sucnVuKGRhdGEpLnRoZW4oKHJlc3VsdCkgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMucnVuKHJlc3VsdCk7XG5cdFx0fSk7XG5cdH1cbn1cbiIsICJcbi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHthZGRBdHRyaWJ1dGVUb2tlbn0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtBVFRSSUJVVEVfRVJST1JNRVNTQUdFfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHtUYWJzU3R5bGVTaGVldH1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFRhYnNTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcbiAgVGFic1N0eWxlU2hlZXQuaW5zZXJ0UnVsZShgXG5AbGF5ZXIgdGFicyB7IFxuOmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFxcXCJRdWlja3NhbmRcXFwiLFxcXCJTZWdvZSBVSVxcXCIsXFxcIlJvYm90b1xcXCIsXFxcIk94eWdlblxcXCIsXFxcIlVidW50dVxcXCIsXFxcIkNhbnRhcmVsbFxcXCIsXFxcIkZpcmEgU2Fuc1xcXCIsXFxcIkRyb2lkIFNhbnNcXFwiLFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsQXJpYWwsc2Fucy1zZXJpZixcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCI7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTYpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTIpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xOiM4MzNhYjQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTI6I2ZkMWQxZDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMzojZmNiMDQ1Oy0tbW9uc3Rlci1ib3gtc2hhZG93LTE6bm9uZTstLW1vbnN0ZXItYm94LXNoYWRvdy0yOi0xcHggMXB4IDEwcHggMXB4IGhzbGEoMCwwJSw3NiUsLjYxKTstLW1vbnN0ZXItdGV4dC1zaGFkb3c6bm9uZTstLW1vbnN0ZXItYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci1ib3JkZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlOi00cHg7LS1tb25zdGVyLXotaW5kZXgtZGVmYXVsdDowOy0tbW9uc3Rlci16LWluZGV4LW91dGxpbmU6MTA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd246MjAwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duLW92ZXJsYXk6MjEwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreTozMDA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5LW92ZXJsYXk6MzEwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkOjQwMDstLW1vbnN0ZXItei1pbmRleC1maXhlZC1vdmVybGF5OjQxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcDo1MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3Atb3ZlcmxheTo1MTA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzOjYwMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXMtb3ZlcmxheTo2MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWw6NzAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXk6NzEwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXI6ODAwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXItb3ZlcmxheTo4MTA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcDo4MDA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcC1vdmVybGF5OjkxMDstLW1vbnN0ZXItc3BhY2UtMDowOy0tbW9uc3Rlci1zcGFjZS0xOjJweDstLW1vbnN0ZXItc3BhY2UtMjo0cHg7LS1tb25zdGVyLXNwYWNlLTM6NnB4Oy0tbW9uc3Rlci1zcGFjZS00OjEwcHg7LS1tb25zdGVyLXNwYWNlLTU6MTZweDstLW1vbnN0ZXItc3BhY2UtNjoyNnB4Oy0tbW9uc3Rlci1zcGFjZS03OjQycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC00OjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTc6NzY4cHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtOTo5OTJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0xMjoxMjAwcHh9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLXNoYWRvdzpub25lfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl17YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7ZGlzcGxheTpub25lO3BhZGRpbmc6MS4xZW07ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtbW9kYWwpfVtkYXRhLXBvcHBlci1hcnJvd10sW2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7YmFja2dyb3VuZDppbmhlcml0O2hlaWdodDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEqdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSp2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMil9W2RhdGEtcG9wcGVyLWFycm93XXt2aXNpYmlsaXR5OmhpZGRlbn1bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29udGVudDpcXFwiXFxcIjt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTt2aXNpYmlsaXR5OnZpc2libGV9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49dG9wXT5bZGF0YS1wb3BwZXItYXJyb3dde2JvdHRvbTpjYWxjKHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpLzIpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePXRvcF0+W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItbGVmdDp0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXRvcDp0cmFuc3BhcmVudH1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1ib3R0b21dPltkYXRhLXBvcHBlci1hcnJvd117dG9wOmNhbGModmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePWJvdHRvbV0+W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp0cmFuc3BhcmVudDtib3JkZXItbGVmdDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmlnaHQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1sZWZ0XT5bZGF0YS1wb3BwZXItYXJyb3dde3JpZ2h0OmNhbGModmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePWxlZnRdPltkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JvcmRlci1ib3R0b206dHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci10b3A6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49cmlnaHRdPltkYXRhLXBvcHBlci1hcnJvd117bGVmdDpjYWxjKHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpLzIpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePXJpZ2h0XT5bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3JkZXItYm90dG9tOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1sZWZ0OnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yaWdodDp0cmFuc3BhcmVudDtib3JkZXItdG9wOnRyYW5zcGFyZW50fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd30ubW9uc3Rlci1iYWRnZS1wcmltYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5LC5tb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LC5tb25zdGVyLWJhZGdlLXNlY29uZGFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LC5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUsLm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUtcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3N7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MsLm1vbnN0ZXItYmFkZ2Utc3VjY2Vzcy1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1zdWNjZXNzLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utd2FybmluZ3twYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utd2FybmluZywubW9uc3Rlci1iYWRnZS13YXJuaW5nLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXdhcm5pbmctcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1lcnJvcntwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtZXJyb3IsLm1vbnN0ZXItYmFkZ2UtZXJyb3ItcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1lcnJvci1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbi5oaWRkZW57ZGlzcGxheTpub25lfW5hdltkYXRhLW1vbnN0ZXItcm9sZT1uYXZde2FsaWduLWl0ZW1zOmZsZXgtZW5kO2JvcmRlci1ib3R0b20tc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci1ib3R0b20td2lkdGg6dGhpbjtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO21hcmdpbi1ib3R0b206Ljc1cmVtO292ZXJmbG93OmhpZGRlbn1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b24gLnJlbW92ZS10YWJ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtaW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvciclM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEwMCUgMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjE2cHg7ZmxleC13cmFwOm5vd3JhcDtoZWlnaHQ6MTZweDttaW4taGVpZ2h0OjE2cHg7b3JkZXI6Mjt3aWR0aDoxNnB4fVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbiBzcGFue2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40O3doaXRlLXNwYWNlOnByZX1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b257YWxpZ24tY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLXNlbGY6c3RyZXRjaDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTtib3JkZXI6bm9uZTtib3JkZXItYm90dG9tOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTttYXJnaW4tcmlnaHQ6Ljc1cmVtO291dGxpbmU6bm9uZTtwYWRkaW5nOi4zNzVyZW0gMDt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt0cmFuc2l0aW9uOmNvbG9yIC44czstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uOm5vdChbZGlzYWJsZWRdKTpob3ZlcixbZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXN0YXRlPWFjdGl2ZV0sW2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1zdGF0ZT1hY3RpdmVdOm5vdChbZGlzYWJsZWRdKTpob3Zlcntib3JkZXItYm90dG9tLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbltkaXNhYmxlZF17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpO2N1cnNvcjpub3QtYWxsb3dlZH1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXJvbGU9c3dpdGNoXXthbGlnbi1zZWxmOmNlbnRlcjtib3JkZXI6MDtvcmRlcjoyO3RvdWNoLWFjdGlvbjpub25lfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItcm9sZT1zd2l0Y2hdOm5vdChbZGlzYWJsZWRdKTpob3Zlcntib3JkZXItYm90dG9tLXdpZHRoOjB9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uIGltZ3toZWlnaHQ6MS4zcmVtO21hcmdpbi1sZWZ0Oi40cmVtO3dpZHRoOjEuM3JlbX06OnNsb3R0ZWQoOm5vdChbc2xvdF0pOm5vdCguYWN0aXZlKSl7ZGlzcGxheTpub25lfTo6c2xvdHRlZCgqKXthbGlnbi1zZWxmOmNlbnRlcn06OnNsb3R0ZWQoW3Nsb3RdKXtib3JkZXItYm90dG9tLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX06OnNsb3R0ZWQoW3Nsb3Q9c3RhcnRdKXttYXJnaW4tcmlnaHQ6Ljc1cmVtO29yZGVyOjB9OjpzbG90dGVkKFtzbG90PWVuZF0pe21hcmdpbi1sZWZ0Oi43NXJlbTtvcmRlcjozfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIFtkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXItbmF2XSBidXR0b246bm90KFtkaXNhYmxlZF0pe2JvcmRlcjowO2p1c3RpZnktY29udGVudDpsZWZ0O3BhZGRpbmctbGVmdDoxNXB4O3BhZGRpbmctcmlnaHQ6MTVweDt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIFtkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXItbmF2XSBidXR0b246aG92ZXIsW2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gW2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlci1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItc3RhdGU9YWN0aXZlXSxbZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyLW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1zdGF0ZT1hY3RpdmVdOm5vdChbZGlzYWJsZWRdKTpob3Zlcntib3JkZXI6MH0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiXG4vKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDI0LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7YWRkQXR0cmlidXRlVG9rZW59IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7QVRUUklCVVRFX0VSUk9STUVTU0FHRX0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7VGhlbWVTdHlsZVNoZWV0fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgVGhlbWVTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcbiAgVGhlbWVTdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuQGxheWVyIHRoZW1lIHsgXG4ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpfS5tb25zdGVyLXRoZW1lLWVycm9yLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMSl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0xe2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci1jb2xvci1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTIpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMil9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKX0ubW9uc3Rlci10aGVtZS1lcnJvci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTIpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMil9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTIpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMntjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMyl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0zKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTN7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLWNvbG9yLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNCl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpfS5tb25zdGVyLXRoZW1lLWVycm9yLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX0ubW9uc3Rlci1ib3JkZXItY29sb3ItNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItNCl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC00e2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci1jb2xvci1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9IFxufWAsIDApO1xufSBjYXRjaCAoZSkge1xuICBhZGRBdHRyaWJ1dGVUb2tlbihkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKSwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZSArIFwiXCIpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uLy4uLy4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlQm9vbGVhbiB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgc2V0RXZlbnRMaXN0ZW5lcnNNb2RpZmllcnMsIHBvcHBlckluc3RhbmNlU3ltYm9sIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlckluc3RhbmNlU3ltYm9sID0gU3ltYm9sKFwicG9wcGVySW5zdGFuY2VcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aGlzIHtDdXN0b21FbGVtZW50fVxuICogQHBhcmFtIHtCb29sZWFufSBtb2RlXG4gKi9cbmZ1bmN0aW9uIHNldEV2ZW50TGlzdGVuZXJzTW9kaWZpZXJzKG1vZGUpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IGV4dGVuZCh7fSwgdGhpcy5nZXRPcHRpb24oXCJwb3BwZXJcIikpO1xuXHRjb25zdCBtb2RpZmllcnMgPSBvcHRpb25zPy5bXCJtb2RpZmllcnNcIl07XG5cblx0aWYgKCFpc0FycmF5KG1vZGlmaWVycykpIHtcblx0XHRvcHRpb25zW1wibW9kaWZpZXJzXCJdID0gW107XG5cdH1cblxuXHRpZiAoXG5cdFx0b3B0aW9uc1tcIm1vZGlmaWVyc1wiXS5maWx0ZXIoKGVudHJ5KSA9PiB7XG5cdFx0XHRpZiAoZW50cnk/LltcIm5hbWVcIl0gPT09IFwiZXZlbnRMaXN0ZW5lcnNcIikge1xuXHRcdFx0XHQvLyBwZXJmb3JtYW5jZSBodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi90dXRvcmlhbC8jcGVyZm9ybWFuY2Vcblx0XHRcdFx0ZW50cnlbXCJlbmFibGVkXCJdID0gdmFsaWRhdGVCb29sZWFuKG1vZGUpO1xuXHRcdFx0fVxuXHRcdH0pLmxlbmd0aCA9PT0gMFxuXHQpIHtcblx0XHRvcHRpb25zW1wibW9kaWZpZXJzXCJdLnB1c2goe1xuXHRcdFx0bmFtZTogXCJldmVudExpc3RlbmVyc1wiLFxuXHRcdFx0ZW5hYmxlZDogdmFsaWRhdGVCb29sZWFuKG1vZGUpLFxuXHRcdH0pO1xuXHR9XG5cblx0dGhpc1twb3BwZXJJbnN0YW5jZVN5bWJvbF0uc2V0T3B0aW9ucyhvcHRpb25zKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQb3BwZXIgfSBmcm9tIFwiQHBvcHBlcmpzL2NvcmVcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHtcblx0YWRkQXR0cmlidXRlVG9rZW4sXG5cdGFkZFRvT2JqZWN0TGluayxcblx0aGFzT2JqZWN0TGluayxcbn0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1BSRUZJWCxcblx0QVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdGdldFNsb3R0ZWRFbGVtZW50cyxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQge1xuXHRmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCxcblx0ZmlyZUN1c3RvbUV2ZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgcmFuZG9tIH0gZnJvbSBcIi4uLy4uL21hdGgvcmFuZG9tLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IElEIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBUb2tlbkxpc3QgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdG9rZW5saXN0Lm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7IERlYWRNYW5zU3dpdGNoIH0gZnJvbSBcIi4uLy4uL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzXCI7XG5pbXBvcnQgeyBQcm9jZXNzaW5nIH0gZnJvbSBcIi4uLy4uL3V0aWwvcHJvY2Vzc2luZy5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9CVVRUT05fTEFCRUwsXG5cdEFUVFJJQlVURV9GT1JNX1JFTE9BRCxcblx0QVRUUklCVVRFX0ZPUk1fVVJMLFxuXHRTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0ssXG59IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcblxuaW1wb3J0IHsgVGFic1N0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3RhYnMubWpzXCI7XG5pbXBvcnQgeyBsb2FkQW5kQXNzaWduQ29udGVudCB9IGZyb20gXCIuL3V0aWwvZmV0Y2gubWpzXCI7XG5pbXBvcnQgeyBUaGVtZVN0eWxlU2hlZXQgfSBmcm9tIFwiLi4vc3R5bGVzaGVldC90aGVtZS5tanNcIjtcbmltcG9ydCB7XG5cdHBvcHBlckluc3RhbmNlU3ltYm9sLFxuXHRzZXRFdmVudExpc3RlbmVyc01vZGlmaWVycyxcbn0gZnJvbSBcIi4vdXRpbC9wb3BwZXIubWpzXCI7XG5cbmV4cG9ydCB7IFRhYnMgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInBvcHBlckVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlck5hdkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJwb3BwZXJOYXZFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250cm9sRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRyb2xFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBuYXZFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwibmF2RWxlbWVudFwiKTtcbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHN3aXRjaEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJzd2l0Y2hFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjaGFuZ2VUYWJFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJjaGFuZ2VUYWJFdmVudEhhbmRsZXJcIik7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZW1vdmVUYWJFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJyZW1vdmVUYWJFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlclN3aXRjaEV2ZW50SGFuZGxlciA9IFN5bWJvbChcInBvcHBlclN3aXRjaEV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjbG9zZUV2ZW50SGFuZGxlciA9IFN5bWJvbChcImNsb3NlRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBtdXRhdGlvbk9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFwibXV0YXRpb25PYnNlcnZlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZGltZW5zaW9uc1N5bWJvbCA9IFN5bWJvbChcImRpbWVuc2lvbnNcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHRpbWVyQ2FsbGJhY2tTeW1ib2wgPSBTeW1ib2woXCJ0aW1lckNhbGxiYWNrXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlc2l6ZU9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFwicmVzaXplT2JzZXJ2ZXJcIik7XG5cbi8qKlxuICogVGhpcyBDdXN0b21Db250cm9sIGNyZWF0ZXMgYSB0YWIgZWxlbWVudCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvdGFicy5wbmdcIj5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIGA8bW9uc3Rlci10YWJzIC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRhYnMnKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci10YWJzPjwvbW9uc3Rlci10YWJzPlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCB7VGFic30gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL3RhYi5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRhYnMnKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkNyZWF0ZSBhIHNpbXBsZSB0YWIgY29udHJvbDwvY2FwdGlvbj5cbiAqIDxtb25zdGVyLXRhYnM+XG4gKiAgICAgPGRpdiBpZD1cInRhYjFcIj5UYWIgMTwvZGl2PlxuICogICAgIDxkaXYgaWQ9XCJ0YWIyXCI+VGFiIDI8L2Rpdj5cbiAqIDwvbW9uc3Rlci10YWJzPlxuICpcbiAqIEBzdGFydHVtbCB0YWJzLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gQ3VzdG9tQ29udHJvbFxuICogQ3VzdG9tQ29udHJvbCA8fC0tIFRhYnNcbiAqIEBlbmR1bWxcbiAqXG4gKiBAc2luY2UgMS4xMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc3VtbWFyeSBBIGNvbmZpZ3VyYWJsZSB0YWIgY29udHJvbFxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLmV2ZW50Om1vbnN0ZXItZmV0Y2hlZFxuICovXG5jbGFzcyBUYWJzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvZm9ybS90YWJzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIGh0bWwgdGFnIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsYWJlbHNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5uZXctdGFiLWxhYmVsPVwiTmV3IFRhYlwiXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaCBGZXRjaCBbc2VlIFVzaW5nIEZldGNoIG1vemlsbGEub3JnXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJL1VzaW5nX0ZldGNoKVxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gucmVkaXJlY3Q9ZXJyb3Jcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLm1ldGhvZD1HRVRcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLm1vZGU9c2FtZS1vcmlnaW5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLmNyZWRlbnRpYWxzPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaC5oZWFkZXJzPXtcImFjY2VwdFwiOlwidGV4dC9odG1sXCJ9fVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcG9wcGVyIFtQb3BwZXJKUyBPcHRpb25zXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwb3BwZXIucGxhY2VtZW50PWJvdHRvbSBQb3BwZXJKUyBwbGFjZW1lbnRcblx0ICogQHByb3BlcnR5IHtPYmplY3RbXX0gbW9kaWZpZXJzPXtuYW1lOm9mZnNldH0gUG9wcGVySlMgcGxhY2VtZW50XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0XCJuZXctdGFiLWxhYmVsXCI6IFwiTmV3IFRhYlwiLFxuXHRcdFx0fSxcblx0XHRcdGJ1dHRvbnM6IHtcblx0XHRcdFx0c3RhbmRhcmQ6IFtdLFxuXHRcdFx0XHRwb3BwZXI6IFtdLFxuXHRcdFx0fSxcblx0XHRcdGZldGNoOiB7XG5cdFx0XHRcdHJlZGlyZWN0OiBcImVycm9yXCIsXG5cdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0bW9kZTogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdFx0YWNjZXB0OiBcInRleHQvaHRtbFwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblxuXHRcdFx0Y2xhc3Nlczoge1xuXHRcdFx0XHRidXR0b246IFwibW9uc3Rlci10aGVtZS1wcmltYXJ5LTFcIixcblx0XHRcdFx0cG9wcGVyOiBcIm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0xXCIsXG5cdFx0XHR9LFxuXG5cdFx0XHRwb3BwZXI6IHtcblx0XHRcdFx0cGxhY2VtZW50OiBcImJvdHRvbVwiLFxuXHRcdFx0XHRtb2RpZmllcnM6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRuYW1lOiBcIm9mZnNldFwiLFxuXHRcdFx0XHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRcdFx0XHRvZmZzZXQ6IFswLCAyXSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiZXZlbnRMaXN0ZW5lcnNcIixcblx0XHRcdFx0XHRcdGVuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdF0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cblx0XHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdID0gbmV3IFBhdGhmaW5kZXIoeyBkYXRhOiB7fSB9KTtcblxuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblxuXHRcdC8vIHNldHVwIHN0cnVjdHVyZVxuXHRcdGluaXRUYWJCdXR0b25zLmNhbGwodGhpcykudGhlbigoKSA9PiB7XG5cdFx0XHRpbml0UG9wcGVyU3dpdGNoLmNhbGwodGhpcyk7XG5cdFx0XHRpbml0UG9wcGVyLmNhbGwodGhpcyk7XG5cdFx0XHRhdHRhY2hSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHRcdFx0YXR0YWNoVGFiQ2hhbmdlT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1RhYnNTdHlsZVNoZWV0LCBUaGVtZVN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci10YWJzXCI7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBkb20gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBkb20gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRcdC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdFBvcHBlclN3aXRjaCgpIHtcblx0Y29uc3Qgbm9kZXMgPSBnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzLCBgWyR7QVRUUklCVVRFX1JPTEV9PVwic3dpdGNoXCJdYCk7IC8vIG51bGwgXHUyMUE2IG9ubHkgdW5uYW1lZCBzbG90c1xuXHRsZXQgc3dpdGNoQnV0dG9uO1xuXHRpZiAobm9kZXMuc2l6ZSA9PT0gMCkge1xuXHRcdHN3aXRjaEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XG5cdFx0c3dpdGNoQnV0dG9uLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSwgXCJzd2l0Y2hcIik7XG5cdFx0c3dpdGNoQnV0dG9uLnNldEF0dHJpYnV0ZShcInBhcnRcIiwgXCJzd2l0Y2hcIik7XG5cdFx0c3dpdGNoQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XG5cdFx0Y29uc3QgY2xhc3NMaXN0ID0gdGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLmJ1dHRvblwiKTtcblx0XHRpZiAoY2xhc3NMaXN0KSB7XG5cdFx0XHRzd2l0Y2hCdXR0b24uY2xhc3NMaXN0LmFkZChjbGFzc0xpc3QpO1xuXHRcdH1cblx0XHRzd2l0Y2hCdXR0b24uaW5uZXJIVE1MID1cblx0XHRcdCc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPjxwYXRoIGQ9XCJNOS41IDEzYTEuNSAxLjUgMCAxIDEtMyAwIDEuNSAxLjUgMCAwIDEgMyAwem0wLTVhMS41IDEuNSAwIDEgMS0zIDAgMS41IDEuNSAwIDAgMSAzIDB6bTAtNWExLjUgMS41IDAgMSAxLTMgMCAxLjUgMS41IDAgMCAxIDMgMHpcIi8+PC9zdmc+Jztcblx0XHR0aGlzW25hdkVsZW1lbnRTeW1ib2xdLnByZXBlbmQoc3dpdGNoQnV0dG9uKTtcblx0fSBlbHNlIHtcblx0XHRzd2l0Y2hCdXR0b24gPSBub2Rlcy5uZXh0KCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbcG9wcGVyU3dpdGNoRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChldmVudCwgQVRUUklCVVRFX1JPTEUsIFwic3dpdGNoXCIpO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCkge1xuXHRcdFx0dG9nZ2xlUG9wcGVyLmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9O1xuXG5cdGZvciAoY29uc3QgdHlwZSBvZiBbXCJjbGlja1wiLCBcInRvdWNoXCJdKSB7XG5cdFx0c3dpdGNoQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1twb3BwZXJTd2l0Y2hFdmVudEhhbmRsZXJdKTtcblx0fVxuXG5cdHRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0gPSBzd2l0Y2hCdXR0b247XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaGlkZVBvcHBlcigpIHtcblx0aWYgKCF0aGlzW3BvcHBlckluc3RhbmNlU3ltYm9sXSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHQvLyBwZXJmb3JtYW5jZSBodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi90dXRvcmlhbC8jcGVyZm9ybWFuY2Vcblx0c2V0RXZlbnRMaXN0ZW5lcnNNb2RpZmllcnMuY2FsbCh0aGlzLCBmYWxzZSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2hvd1BvcHBlcigpIHtcblx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9PT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLO1xuXHQvLyBwZXJmb3JtYW5jZSBodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi90dXRvcmlhbC8jcGVyZm9ybWFuY2Vcblx0c2V0RXZlbnRMaXN0ZW5lcnNNb2RpZmllcnMuY2FsbCh0aGlzLCB0cnVlKTtcblxuXHR0aGlzW3BvcHBlckluc3RhbmNlU3ltYm9sXS51cGRhdGUoKTtcblxuXHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcInZpc2liaWxpdHlcIik7XG5cdH0pXG5cdFx0LnJ1bih1bmRlZmluZWQpXG5cdFx0LnRoZW4oKCkgPT4ge30pXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZVBvcHBlcigpIHtcblx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9PT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0aGlkZVBvcHBlci5jYWxsKHRoaXMpO1xuXHR9IGVsc2Uge1xuXHRcdHNob3dQb3BwZXIuY2FsbCh0aGlzKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFJlc2l6ZU9ic2VydmVyKCkge1xuXHQvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcblx0XHRpZiAodGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSBpbnN0YW5jZW9mIERlYWRNYW5zU3dpdGNoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdLnRvdWNoKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSA9IG5ldyBEZWFkTWFuc1N3aXRjaCgyMDAsICgpID0+IHtcblx0XHRcdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uc2V0VmlhKFwiZGF0YS5jYWxjdWxhdGVkXCIsIGZhbHNlKTtcblx0XHRcdGNoZWNrQW5kUmVhcnJhbmdlQnV0dG9ucy5jYWxsKHRoaXMpO1xuXHRcdH0pO1xuXHR9KTtcblxuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKHRoaXNbbmF2RWxlbWVudFN5bWJvbF0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFRhYkNoYW5nZU9ic2VydmVyKCkge1xuXHQvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcblx0bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xuXHRcdGxldCBydW5VcGRhdGUgPSBmYWxzZTtcblxuXHRcdGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zKSB7XG5cdFx0XHRpZiAobXV0YXRpb24udHlwZSA9PT0gXCJjaGlsZExpc3RcIikge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGggPiAwIHx8XG5cdFx0XHRcdFx0bXV0YXRpb24ucmVtb3ZlZE5vZGVzLmxlbmd0aCA+IDBcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cnVuVXBkYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChydW5VcGRhdGUgPT09IHRydWUpIHtcblx0XHRcdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uc2V0VmlhKFwiZGF0YS5jYWxjdWxhdGVkXCIsIGZhbHNlKTtcblx0XHRcdGluaXRUYWJCdXR0b25zLmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9KS5vYnNlcnZlKHRoaXMsIHtcblx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAZXh0ZXJuYWwgXCJleHRlcm5hbDpjcmVhdGVQb3BwZXJcIlxuICogQHNlZSB7QGxpbmsgIFBsdWdpbnN9XG4gKi9cbmZ1bmN0aW9uIGluaXRQb3BwZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGNvbnN0IG9wdGlvbnMgPSBleHRlbmQoe30sIHNlbGYuZ2V0T3B0aW9uKFwicG9wcGVyXCIpKTtcblxuXHRzZWxmW3BvcHBlckluc3RhbmNlU3ltYm9sXSA9IGNyZWF0ZVBvcHBlcihcblx0XHRzZWxmW3N3aXRjaEVsZW1lbnRTeW1ib2xdLFxuXHRcdHNlbGZbcG9wcGVyRWxlbWVudFN5bWJvbF0sXG5cdFx0b3B0aW9ucyxcblx0KTtcblxuXHRjb25zdCBvYnNlcnZlcjEgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zKSB7XG5cdFx0bGV0IHJ1blVwZGF0ZSA9IGZhbHNlO1xuXG5cdFx0Zm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnMpIHtcblx0XHRcdGlmIChtdXRhdGlvbi50eXBlID09PSBcImNoaWxkTGlzdFwiKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRtdXRhdGlvbi5hZGRlZE5vZGVzLmxlbmd0aCA+IDAgfHxcblx0XHRcdFx0XHRtdXRhdGlvbi5yZW1vdmVkTm9kZXMubGVuZ3RoID4gMFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRydW5VcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJ1blVwZGF0ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0c2VsZltwb3BwZXJJbnN0YW5jZVN5bWJvbF0udXBkYXRlKCk7XG5cdFx0fVxuXHR9KTtcblxuXHRvYnNlcnZlcjEub2JzZXJ2ZShzZWxmW3BvcHBlck5hdkVsZW1lbnRTeW1ib2xdLCB7XG5cdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdHN1YnRyZWU6IHRydWUsXG5cdH0pO1xuXG5cdHJldHVybiBzZWxmO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIHNob3coZWxlbWVudCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRjb25zdCByZWZlcmVuY2UgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShgJHtBVFRSSUJVVEVfUFJFRklYfXRhYi1yZWZlcmVuY2VgKTtcblxuXHRjb25zdCBub2RlcyA9IGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMpO1xuXHRmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcblx0XHRjb25zdCBpZCA9IG5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIik7XG5cblx0XHRpZiAoaWQgPT09IHJlZmVyZW5jZSkge1xuXHRcdFx0bm9kZS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xuXG5cdFx0XHQvLyBnZXQgYWxsIGRhdGEtIGZyb20gYnV0dG9uIGFuZCBmaWx0ZXIgb3V0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzIGFuZCBkYXRhLW1vbnN0ZXItaW5zZXJ0XG5cdFx0XHRjb25zdCBkYXRhID0ge307XG5cdFx0XHRjb25zdCBtYXNrID0gW1xuXHRcdFx0XHRcImRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzXCIsXG5cdFx0XHRcdFwiZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2VcIixcblx0XHRcdFx0XCJkYXRhLW1vbnN0ZXItc3RhdGVcIixcblx0XHRcdFx0XCJkYXRhLW1vbnN0ZXItYnV0dG9uLWxhYmVsXCIsXG5cdFx0XHRcdFwiZGF0YS1tb25zdGVyLW9iamVjdGxpbmtcIixcblx0XHRcdFx0XCJkYXRhLW1vbnN0ZXItcm9sZVwiLFxuXHRcdFx0XTtcblxuXHRcdFx0Zm9yIChjb25zdCBbLCBhdHRyXSBvZiBPYmplY3QuZW50cmllcyhub2RlLmF0dHJpYnV0ZXMpKSB7XG5cdFx0XHRcdGlmIChhdHRyLm5hbWUuc3RhcnRzV2l0aChcImRhdGEtXCIpICYmIG1hc2suaW5kZXhPZihhdHRyLm5hbWUpID09PSAtMSkge1xuXHRcdFx0XHRcdGRhdGFbYXR0ci5uYW1lXSA9IGF0dHIudmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCkpIHtcblx0XHRcdFx0Y29uc3QgdXJsID0gbm9kZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKTtcblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0IW5vZGUuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1JFTE9BRCkgfHxcblx0XHRcdFx0XHRub2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9SRUxPQUQpLnRvTG93ZXJDYXNlKCkgPT09IFwib25zaG93XCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0bm9kZS5yZW1vdmVBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcImZldGNoXCIsIHt9KTtcblx0XHRcdFx0Y29uc3QgZmlsdGVyID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRsb2FkQW5kQXNzaWduQ29udGVudChub2RlLCB1cmwsIG9wdGlvbnMsIGZpbHRlcilcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLXRhYi1jaGFuZ2VkXCIsIHtcblx0XHRcdFx0XHRcdFx0cmVmZXJlbmNlLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLXRhYi1jaGFuZ2VkXCIsIHtcblx0XHRcdFx0XHRyZWZlcmVuY2UsXG5cdFx0XHRcdFx0ZGF0YSxcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5vZGUuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBzdGFuZGFyZEJ1dHRvbnMgPSB0aGlzLmdldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIik7XG5cdGZvciAoY29uc3QgaW5kZXggaW4gc3RhbmRhcmRCdXR0b25zKSB7XG5cdFx0Y29uc3QgYnV0dG9uID0gc3RhbmRhcmRCdXR0b25zW2luZGV4XTtcblx0XHRjb25zdCBzdGF0ZSA9IGJ1dHRvbltcInJlZmVyZW5jZVwiXSA9PT0gcmVmZXJlbmNlID8gXCJhY3RpdmVcIiA6IFwiaW5hY3RpdmVcIjtcblx0XHR0aGlzLnNldE9wdGlvbihgYnV0dG9ucy5zdGFuZGFyZC4ke2luZGV4fS5zdGF0ZWAsIHN0YXRlKTtcblx0fVxuXG5cdGNvbnN0IHBvcHBlckJ1dHRvbiA9IHRoaXMuZ2V0T3B0aW9uKFwiYnV0dG9ucy5wb3BwZXJcIik7XG5cdGZvciAoY29uc3QgaW5kZXggaW4gcG9wcGVyQnV0dG9uKSB7XG5cdFx0Y29uc3QgYnV0dG9uID0gcG9wcGVyQnV0dG9uW2luZGV4XTtcblx0XHRjb25zdCBzdGF0ZSA9IGJ1dHRvbltcInJlZmVyZW5jZVwiXSA9PT0gcmVmZXJlbmNlID8gXCJhY3RpdmVcIiA6IFwiaW5hY3RpdmVcIjtcblx0XHR0aGlzLnNldE9wdGlvbihgYnV0dG9ucy5wb3BwZXIuJHtpbmRleH0uc3RhdGVgLCBzdGF0ZSk7XG5cdH1cblxuXHRoaWRlUG9wcGVyLmNhbGwodGhpcyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblxuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbY2hhbmdlVGFiRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChldmVudCwgQVRUUklCVVRFX1JPTEUsIFwiYnV0dG9uXCIpO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiBlbGVtZW50LmRpc2FibGVkICE9PSB0cnVlKSB7XG5cdFx0XHRzaG93LmNhbGwodGhpcywgZWxlbWVudCk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBldmVudDptb25zdGVyLXRhYi1yZW1vdmVcblx0ICogQGV2ZW50IE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLmV2ZW50Om1vbnN0ZXItdGFiLXJlbW92ZVxuXHQgKi9cblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLmV2ZW50Om1vbnN0ZXItdGFiLXJlbW92ZVxuXHQgKi9cblx0dGhpc1tyZW1vdmVUYWJFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdFwicmVtb3ZlLXRhYlwiLFxuXHRcdCk7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRjb25zdCBidXR0b24gPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XHRcImJ1dHRvblwiLFxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKGJ1dHRvbiBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50ICYmIGJ1dHRvbi5kaXNhYmxlZCAhPT0gdHJ1ZSkge1xuXHRcdFx0XHRjb25zdCByZWZlcmVuY2UgPSBidXR0b24uZ2V0QXR0cmlidXRlKFxuXHRcdFx0XHRcdGAke0FUVFJJQlVURV9QUkVGSVh9dGFiLXJlZmVyZW5jZWAsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChyZWZlcmVuY2UpIHtcblx0XHRcdFx0XHRjb25zdCBjb250YWluZXIgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoYFtpZD0ke3JlZmVyZW5jZX1dYCk7XG5cdFx0XHRcdFx0aWYgKGNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRjb250YWluZXIucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRpbml0VGFiQnV0dG9ucy5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci10YWItcmVtb3ZlXCIsIHtcblx0XHRcdFx0XHRcdFx0cmVmZXJlbmNlLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHRoaXNbbmF2RWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoXCIsIHRoaXNbY2hhbmdlVGFiRXZlbnRIYW5kbGVyXSk7XG5cdHRoaXNbbmF2RWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXNbY2hhbmdlVGFiRXZlbnRIYW5kbGVyXSk7XG5cblx0dGhpc1tuYXZFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hcIiwgdGhpc1tyZW1vdmVUYWJFdmVudEhhbmRsZXJdKTtcblx0dGhpc1tuYXZFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpc1tyZW1vdmVUYWJFdmVudEhhbmRsZXJdKTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXG5cdFx0Zm9yIChjb25zdCBbLCBlbGVtZW50XSBvZiBPYmplY3QuZW50cmllcyhwYXRoKSkge1xuXHRcdFx0aWYgKGVsZW1lbnQgPT09IHRoaXMpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGhpZGVQb3BwZXIuY2FsbCh0aGlzKTtcblx0fTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG9ic2VydmVkTm9kZVxuICovXG5mdW5jdGlvbiBhdHRhY2hUYWJNdXRhdGlvbk9ic2VydmVyKG9ic2VydmVkTm9kZSkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRpZiAoaGFzT2JqZWN0TGluayhvYnNlcnZlZE5vZGUsIG11dGF0aW9uT2JzZXJ2ZXJTeW1ib2wpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0LyoqXG5cdCAqIHRoaXMgY29uc3RydWN0IG1vbml0b3JzIGEgbm9kZSB3aGV0aGVyIGl0IGlzIGRpc2FibGVkIG9yIG1vZGlmaWVkXG5cdCAqIEB0eXBlIHtNdXRhdGlvbk9ic2VydmVyfVxuXHQgKi9cblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zKSB7XG5cdFx0aWYgKGlzQXJyYXkobXV0YXRpb25zKSkge1xuXHRcdFx0Y29uc3QgbXV0YXRpb24gPSBtdXRhdGlvbnMucG9wKCk7XG5cdFx0XHRpZiAobXV0YXRpb24gaW5zdGFuY2VvZiBNdXRhdGlvblJlY29yZCkge1xuXHRcdFx0XHRpbml0VGFiQnV0dG9ucy5jYWxsKHNlbGYpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0b2JzZXJ2ZXIub2JzZXJ2ZShvYnNlcnZlZE5vZGUsIHtcblx0XHRjaGlsZExpc3Q6IGZhbHNlLFxuXHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0c3VidHJlZTogZmFsc2UsXG5cdFx0YXR0cmlidXRlRmlsdGVyOiBbXG5cdFx0XHRcImRpc2FibGVkXCIsXG5cdFx0XHRBVFRSSUJVVEVfQlVUVE9OX0xBQkVMLFxuXHRcdFx0YCR7QVRUUklCVVRFX1BSRUZJWH1idXR0b24taWNvbmAsXG5cdFx0XSxcblx0fSk7XG5cblx0YWRkVG9PYmplY3RMaW5rKG9ic2VydmVkTm9kZSwgbXV0YXRpb25PYnNlcnZlclN5bWJvbCwgb2JzZXJ2ZXIpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jb250cm9sXWAsXG5cdCk7XG5cdHRoaXNbbmF2RWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgbmF2WyR7QVRUUklCVVRFX1JPTEV9PW5hdl1gLFxuXHQpO1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1wb3BwZXJdYCxcblx0KTtcblx0dGhpc1twb3BwZXJOYXZFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09cG9wcGVyLW5hdl1gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtQcm9taXNlPHVua25vd24+fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqXG4gKi9cbmZ1bmN0aW9uIGluaXRUYWJCdXR0b25zKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRsZXQgYWN0aXZlUmVmZXJlbmNlO1xuXG5cdGNvbnN0IGRpbWVuc2lvbnNDYWxjdWxhdGVkID0gdGhpc1tkaW1lbnNpb25zU3ltYm9sXS5nZXRWaWEoXG5cdFx0XCJkYXRhLmNhbGN1bGF0ZWRcIixcblx0XHRmYWxzZSxcblx0KTtcblxuXHRjb25zdCBidXR0b25zID0gW107XG5cdGNvbnN0IG5vZGVzID0gZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcywgdW5kZWZpbmVkLCBudWxsKTsgLy8gbnVsbCBcdTIxQTYgb25seSB1bm5hbWVkIHNsb3RzXG5cblx0Zm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG5cdFx0aWYgKCEobm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgY29udGludWU7XG5cdFx0bGV0IGxhYmVsID0gZ2V0QnV0dG9uTGFiZWwuY2FsbCh0aGlzLCBub2RlKTtcblxuXHRcdGxldCByZWZlcmVuY2U7XG5cdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKFwiaWRcIikpIHtcblx0XHRcdHJlZmVyZW5jZSA9IG5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIik7XG5cdFx0fVxuXG5cdFx0bGV0IGRpc2FibGVkO1xuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShcImRpc2FibGVkXCIpIHx8IG5vZGUuZGlzYWJsZWQgPT09IHRydWUpIHtcblx0XHRcdGRpc2FibGVkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoIXJlZmVyZW5jZSkge1xuXHRcdFx0cmVmZXJlbmNlID0gbmV3IElEKFwidGFiXCIpLnRvU3RyaW5nKCk7XG5cdFx0XHRub2RlLnNldEF0dHJpYnV0ZShcImlkXCIsIHJlZmVyZW5jZSk7XG5cdFx0fVxuXG5cdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKGAke0FUVFJJQlVURV9QUkVGSVh9YnV0dG9uLWljb25gKSkge1xuXHRcdFx0bGFiZWwgPSBgPHNwYW4gcGFydD1cImxhYmVsXCI+JHtsYWJlbH08L3NwYW4+PGltZyBwYXJ0PVwiaWNvblwiIHNyYz1cIiR7bm9kZS5nZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdGAke0FUVFJJQlVURV9QUkVGSVh9YnV0dG9uLWljb25gLFxuXHRcdFx0KX1cIj5gO1xuXHRcdH1cblxuXHRcdGxldCByZW1vdmUgPSBmYWxzZTtcblx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoYCR7QVRUUklCVVRFX1BSRUZJWH1yZW1vdmFibGVgKSkge1xuXHRcdFx0cmVtb3ZlID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAobm9kZS5tYXRjaGVzKFwiLmFjdGl2ZVwiKSA9PT0gdHJ1ZSAmJiBkaXNhYmxlZCAhPT0gdHJ1ZSkge1xuXHRcdFx0bm9kZS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuXHRcdFx0YWN0aXZlUmVmZXJlbmNlID0gcmVmZXJlbmNlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHN0YXRlID0gXCJcIjtcblx0XHRjb25zdCBjbGFzc2VzID0gZGltZW5zaW9uc0NhbGN1bGF0ZWQgPyBcIlwiIDogXCJpbnZpc2libGVcIjtcblxuXHRcdGJ1dHRvbnMucHVzaCh7XG5cdFx0XHRyZWZlcmVuY2UsXG5cdFx0XHRsYWJlbCxcblx0XHRcdHN0YXRlLFxuXHRcdFx0Y2xhc3M6IGNsYXNzZXMsXG5cdFx0XHRkaXNhYmxlZCxcblx0XHRcdHJlbW92ZSxcblx0XHR9KTtcblxuXHRcdGF0dGFjaFRhYk11dGF0aW9uT2JzZXJ2ZXIuY2FsbCh0aGlzLCBub2RlKTtcblx0fVxuXG5cdHRoaXMuc2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiLCBjbG9uZShidXR0b25zKSk7XG5cdHRoaXMuc2V0T3B0aW9uKFwiYnV0dG9ucy5wb3BwZXJcIiwgW10pO1xuXHR0aGlzLnNldE9wdGlvbihcIm1hcmtlclwiLCByYW5kb20oKSk7XG5cblx0cmV0dXJuIGFkanVzdEJ1dHRvblZpc2liaWxpdHkuY2FsbCh0aGlzKS50aGVuKCgpID0+IHtcblx0XHRpZiAoYWN0aXZlUmVmZXJlbmNlKSB7XG5cdFx0XHRyZXR1cm4gbmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBidXR0b24gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcdFx0XHRgWyR7QVRUUklCVVRFX1BSRUZJWH10YWItcmVmZXJlbmNlPVwiJHthY3RpdmVSZWZlcmVuY2V9XCJdYCxcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGJ1dHRvbiBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50ICYmIGJ1dHRvbi5kaXNhYmxlZCAhPT0gdHJ1ZSkge1xuXHRcdFx0XHRcdHNob3cuY2FsbCh0aGlzLCBidXR0b24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0XHQucnVuKHVuZGVmaW5lZClcblx0XHRcdFx0LnRoZW4oKCkgPT4ge30pXG5cdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrQW5kUmVhcnJhbmdlQnV0dG9ucygpIHtcblx0aWYgKHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uZ2V0VmlhKFwiZGF0YS5jYWxjdWxhdGVkXCIsIGZhbHNlKSAhPT0gdHJ1ZSkge1xuXHRcdGNhbGN1bGF0ZU5hdmlnYXRpb25CdXR0b25zRGltZW5zaW9ucy5jYWxsKHRoaXMpO1xuXHR9XG5cblx0cmVhcnJhbmdlQnV0dG9ucy5jYWxsKHRoaXMpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtQcm9taXNlPHVua25vd24+fVxuICovXG5mdW5jdGlvbiBhZGp1c3RCdXR0b25WaXNpYmlsaXR5KCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcblx0XHRcdGNvbnN0IGRlZkNvdW50ID0gc2VsZi5nZXRPcHRpb24oXCJidXR0b25zLnN0YW5kYXJkXCIpLmxlbmd0aDtcblx0XHRcdGNvbnN0IGRvbUNvdW50ID0gc2VsZltuYXZFbGVtZW50U3ltYm9sXS5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdFx0XHQnYnV0dG9uW2RhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCJdJyxcblx0XHRcdCkubGVuZ3RoO1xuXG5cdFx0XHQvLyBpbiBkcmF3aW5nXG5cdFx0XHRpZiAoZGVmQ291bnQgIT09IGRvbUNvdW50KSByZXR1cm47XG5cblx0XHRcdG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblxuXHRcdFx0Y2hlY2tBbmRSZWFycmFuZ2VCdXR0b25zLmNhbGwoc2VsZik7XG5cblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblxuXHRcdG9ic2VydmVyLm9ic2VydmUoc2VsZltuYXZFbGVtZW50U3ltYm9sXSwge1xuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHR9KTtcblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBnZXREaW1WYWx1ZSh2YWx1ZSkge1xuXHRpZiAoW3VuZGVmaW5lZCwgbnVsbF0uaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRjb25zdCB2YWx1ZUFzSW50ID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcblxuXHRpZiAoaXNOYU4odmFsdWVBc0ludCkpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdHJldHVybiB2YWx1ZUFzSW50O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGNhbGNCb3hXaWR0aChub2RlKSB7XG5cdGNvbnN0IGRpbSA9IGdldEdsb2JhbChcIndpbmRvd1wiKS5nZXRDb21wdXRlZFN0eWxlKG5vZGUpO1xuXHRjb25zdCBib3VuZGluZyA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0cmV0dXJuIChcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJib3JkZXItbGVmdC13aWR0aFwiXSkgK1xuXHRcdGdldERpbVZhbHVlKGRpbVtcInBhZGRpbmctbGVmdFwiXSkgK1xuXHRcdGdldERpbVZhbHVlKGRpbVtcIm1hcmdpbi1sZWZ0XCJdKSArXG5cdFx0Z2V0RGltVmFsdWUoYm91bmRpbmdbXCJ3aWR0aFwiXSkgK1xuXHRcdGdldERpbVZhbHVlKGRpbVtcImJvcmRlci1yaWdodC13aWR0aFwiXSkgK1xuXHRcdGdldERpbVZhbHVlKGRpbVtcIm1hcmdpbi1yaWdodFwiXSkgK1xuXHRcdGdldERpbVZhbHVlKGRpbVtcInBhZGRpbmctbGVmdFwiXSlcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiByZWFycmFuZ2VCdXR0b25zKCkge1xuXHRjb25zdCBzdGFuZGFyZEJ1dHRvbnMgPSBbXTtcblx0Y29uc3QgcG9wcGVyQnV0dG9ucyA9IFtdO1xuXG5cdGxldCBzdW0gPSAwO1xuXHRjb25zdCBzcGFjZSA9IHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uZ2V0VmlhKFwiZGF0YS5zcGFjZVwiKTtcblxuXHRjb25zdCBidXR0b25zID0gdGhpcy5nZXRPcHRpb24oXCJidXR0b25zLnN0YW5kYXJkXCIpO1xuXHRmb3IgKGNvbnN0IFssIGJ1dHRvbl0gb2YgYnV0dG9ucy5lbnRyaWVzKCkpIHtcblx0XHRjb25zdCByZWYgPSBidXR0b24/LnJlZmVyZW5jZTtcblxuXHRcdHN1bSArPSB0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLmdldFZpYShgZGF0YS5idXR0b24uJHtyZWZ9YCk7XG5cblx0XHRpZiAoc3VtID4gc3BhY2UpIHtcblx0XHRcdHBvcHBlckJ1dHRvbnMucHVzaChjbG9uZShidXR0b24pKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3RhbmRhcmRCdXR0b25zLnB1c2goY2xvbmUoYnV0dG9uKSk7XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5zZXRPcHRpb24oXCJidXR0b25zLnN0YW5kYXJkXCIsIHN0YW5kYXJkQnV0dG9ucyk7XG5cdHRoaXMuc2V0T3B0aW9uKFwiYnV0dG9ucy5wb3BwZXJcIiwgcG9wcGVyQnV0dG9ucyk7XG5cblx0aWYgKHRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0pIHtcblx0XHRpZiAocG9wcGVyQnV0dG9ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBjYWxjdWxhdGVOYXZpZ2F0aW9uQnV0dG9uc0RpbWVuc2lvbnMoKSB7XG5cdGNvbnN0IHdpZHRoID0gdGhpc1tuYXZFbGVtZW50U3ltYm9sXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcblxuXHRsZXQgc3RhcnRFbmRXaWR0aCA9IDA7XG5cblx0Z2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcywgdW5kZWZpbmVkLCBcInN0YXJ0XCIpLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRzdGFydEVuZFdpZHRoICs9IGNhbGNCb3hXaWR0aC5jYWxsKHRoaXMsIG5vZGUpO1xuXHR9KTtcblxuXHRnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzLCB1bmRlZmluZWQsIFwiZW5kXCIpLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRzdGFydEVuZFdpZHRoICs9IGNhbGNCb3hXaWR0aC5jYWxsKHRoaXMsIG5vZGUpO1xuXHR9KTtcblxuXHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLnNldFZpYShcImRhdGEuc3BhY2VcIiwgd2lkdGggLSBzdGFydEVuZFdpZHRoIC0gMik7XG5cdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uc2V0VmlhKFwiZGF0YS52aXNpYmxlXCIsICEod2lkdGggPT09IDApKTtcblxuXHRjb25zdCBidXR0b25zID0gdGhpcy5nZXRPcHRpb24oXCJidXR0b25zLnN0YW5kYXJkXCIpLmNvbmNhdChcblx0XHR0aGlzLmdldE9wdGlvbihcImJ1dHRvbnMucG9wcGVyXCIpLFxuXHQpO1xuXG5cdGZvciAoY29uc3QgW2ksIGJ1dHRvbl0gb2YgYnV0dG9ucy5lbnRyaWVzKCkpIHtcblx0XHRjb25zdCByZWYgPSBidXR0b24/LnJlZmVyZW5jZTtcblx0XHRjb25zdCBlbGVtZW50ID0gdGhpc1tuYXZFbGVtZW50U3ltYm9sXS5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0YDpzY29wZSA+IFske0FUVFJJQlVURV9QUkVGSVh9dGFiLXJlZmVyZW5jZT1cIiR7cmVmfVwiXWAsXG5cdFx0KTtcblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpKSBjb250aW51ZTtcblxuXHRcdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uc2V0VmlhKFxuXHRcdFx0YGRhdGEuYnV0dG9uLiR7cmVmfWAsXG5cdFx0XHRjYWxjQm94V2lkdGguY2FsbCh0aGlzLCBlbGVtZW50KSxcblx0XHQpO1xuXHRcdGJ1dHRvbltcImNsYXNzXCJdID0gbmV3IFRva2VuTGlzdChidXR0b25bXCJjbGFzc1wiXSlcblx0XHRcdC5yZW1vdmUoXCJpbnZpc2libGVcIilcblx0XHRcdC50b1N0cmluZygpO1xuXHR9XG5cblx0Y29uc3Qgc2xvdHMgPSB0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXS5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdGBuYXZbJHtBVFRSSUJVVEVfUFJFRklYfXJvbGU9bmF2XSA+IHNsb3QuaW52aXNpYmxlLCBzbG90WyR7QVRUUklCVVRFX1BSRUZJWH1yb2xlPXNsb3RdLmludmlzaWJsZWAsXG5cdCk7XG5cdGZvciAoY29uc3QgWywgc2xvdF0gb2Ygc2xvdHMuZW50cmllcygpKSB7XG5cdFx0c2xvdC5jbGFzc0xpc3QucmVtb3ZlKFwiaW52aXNpYmxlXCIpO1xuXHR9XG5cblx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXS5zZXRWaWEoXCJkYXRhLmNhbGN1bGF0ZWRcIiwgdHJ1ZSk7XG5cdHRoaXMuc2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiLCBjbG9uZShidXR0b25zKSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0QnV0dG9uTGFiZWwobm9kZSkge1xuXHRsZXQgbGFiZWw7XG5cdGxldCBzZXRMYWJlbCA9IGZhbHNlO1xuXHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0JVVFRPTl9MQUJFTCkpIHtcblx0XHRsYWJlbCA9IG5vZGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9CVVRUT05fTEFCRUwpO1xuXHR9IGVsc2Uge1xuXHRcdGxhYmVsID0gbm9kZS5pbm5lclRleHQ7XG5cdFx0c2V0TGFiZWwgPSB0cnVlO1xuXHR9XG5cblx0aWYgKCFpc1N0cmluZyhsYWJlbCkpIHtcblx0XHRsYWJlbCA9IFwiXCI7XG5cdH1cblxuXHRsYWJlbCA9IGxhYmVsLnRyaW0oKTtcblxuXHRpZiAobGFiZWwgPT09IFwiXCIpIHtcblx0XHRsYWJlbCA9IHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLm5ldy10YWItbGFiZWxcIiwgXCJOZXcgVGFiXCIpO1xuXHR9XG5cblx0aWYgKGxhYmVsLmxlbmd0aCA+IDEwMCkge1xuXHRcdGxhYmVsID0gYCR7bGFiZWwuc3Vic3RyaW5nKDAsIDk5KX1cdTIwMjZgO1xuXHR9XG5cblx0aWYgKHNldExhYmVsID09PSB0cnVlKSB7XG5cdFx0bm9kZS5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0JVVFRPTl9MQUJFTCwgbGFiZWwpO1xuXHR9XG5cblx0cmV0dXJuIGxhYmVsO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDx0ZW1wbGF0ZSBpZD1cImJ1dHRvbnNcIj5cbiAgICAgICAgICAgIDxidXR0b24gcGFydD1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3MgcGF0aDpjbGFzc2VzLmJ1dHRvbixcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXN0YXRlIHBhdGg6YnV0dG9ucy5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQgcGF0aDpidXR0b25zLmRpc2FibGVkIHwgaWY6dHJ1ZSwgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItdGFiLXJlZmVyZW5jZSBwYXRoOmJ1dHRvbnMucmVmZXJlbmNlXCI+PHNwYW5cbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmJ1dHRvbnMubGFiZWxcIj48L3NwYW4+PHNwYW4gcGFydD1cInJlbW92ZS10YWJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmJ1dHRvbnMucmVtb3ZlIHwgPzpyZW1vdmUtdGFiOmhpZGRlbiBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJyZW1vdmUtdGFiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj48L3NwYW4+PC9idXR0b24+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxuYXYgZGF0YS1tb25zdGVyLXJvbGU9XCJuYXZcIiBwYXJ0PVwibmF2XCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItbWFya2VyIHBhdGg6bWFya2VyXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWluc2VydD1cImJ1dHRvbnMgcGF0aDpidXR0b25zLnN0YW5kYXJkXCI+XG4gICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cInN0YXJ0XCIgY2xhc3M9XCJpbnZpc2libGVcIj48L3Nsb3Q+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCJcblx0XHRcdFx0XHQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMucG9wcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1wb3BwZXItYXJyb3c+PC9kaXY+XG5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJwb3BwZXItbmF2XCIgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXItbmF2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwiYnV0dG9ucyBwYXRoOmJ1dHRvbnMucG9wcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cInBvcHBlclwiIGNsYXNzPVwiaW52aXNpYmxlXCI+PC9zbG90PlxuICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJlbmRcIiBjbGFzcz1cImludmlzaWJsZVwiPjwvc2xvdD5cbiAgICAgICAgICAgIDwvbmF2PlxuICAgICAgICAgICAgPHNsb3QgZGF0YS1tb25zdGVyLXJvbGU9XCJzbG90XCIgY2xhc3M9XCJpbnZpc2libGVcIj48L3Nsb3Q+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUYWJzKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBDdXN0b21FbGVtZW50LCBhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCB9IGZyb20gXCIuL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEN1c3RvbUNvbnRyb2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYXR0YWNoZWRJbnRlcm5hbFN5bWJvbCA9IFN5bWJvbChcImF0dGFjaGVkSW50ZXJuYWxcIik7XG5cbi8qKlxuICogVGhpcyBpcyBhIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGN1c3RvbSBjb250cm9scyB1c2luZyB0aGUgcG93ZXIgb2YgQ3VzdG9tRWxlbWVudC5cbiAqXG4gKiBBZnRlciBkZWZpbmluZyBhIGBDdXN0b21FbGVtZW50YCwgdGhlIGByZWdpc3RlckN1c3RvbUVsZW1lbnRgIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgY2xhc3MgbmFtZS4gT25seSB0aGVuXG4gKiB3aWxsIHRoZSB0YWcgZGVmaW5lZCB2aWEgdGhlIGBnZXRUYWdgIG1ldGhvZCBiZSBtYWRlIGtub3duIHRvIHRoZSBET00uXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9jdXN0b21jb250cm9sLWNsYXNzLnBuZ1wiPlxuICpcbiAqIFRoaXMgY29udHJvbCB1c2VzIGBhdHRhY2hJbnRlcm5hbHMoKWAgdG8gaW50ZWdyYXRlIHRoZSBjb250cm9sIGludG8gYSBmb3JtLiBJZiB0aGUgdGFyZ2V0IGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnRcbiAqIHRoaXMgbWV0aG9kLCB0aGUgW3BvbHlmaWxsXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9lbGVtZW50LWludGVybmFscy1wb2x5ZmlsbCkgY2FuIGJlIHVzZWQuXG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhlIG9iamVjdCB1c2luZyB0aGUgZnVuY3Rpb24gYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKWAuXG4gKlxuICogVGhpcyBjb250cm9sIHVzZXMgYGF0dGFjaEludGVybmFscygpYCB0byBpbnRlZ3JhdGUgdGhlIGNvbnRyb2wgaW50byBhIGZvcm0uIElmIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydFxuICogdGhpcyBtZXRob2QsIHRoZSBQb2x5ZmlsbCBmb3IgYXR0YWNoSW50ZXJuYWxzKCkgY2FuIGJlIHVzZWQ6IHtAbGluayBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9lbGVtZW50LWludGVybmFscy1wb2x5ZmlsbHxlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbH0uXG4gKlxuICogTGVhcm4gbW9yZSBhYm91dCBXSUNHIFdlYiBDb21wb25lbnRzOiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvd2ViY29tcG9uZW50c3xXSUNHIFdlYiBDb21wb25lbnRzfS5cbiAqXG4gKiBSZWFkIHRoZSBIVE1MIHNwZWNpZmljYXRpb24gZm9yIEN1c3RvbSBFbGVtZW50czoge0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI2N1c3RvbS1lbGVtZW50c3xDdXN0b20gRWxlbWVudHN9LlxuICpcbiAqIFJlYWQgdGhlIEhUTUwgc3BlY2lmaWNhdGlvbiBmb3IgQ3VzdG9tIEVsZW1lbnQgUmVhY3Rpb25zOiB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9kZXYvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnQtcmVhY3Rpb25zfEN1c3RvbSBFbGVtZW50IFJlYWN0aW9uc30uXG4gKlxuICogQHN1bW1hcnkgQSBiYXNlIGNsYXNzIGZvciBjdXN0b20gY29udHJvbHMgYmFzZWQgb24gQ3VzdG9tRWxlbWVudC5cbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE0LjBcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQGV4dGVuZHMgTW9uc3Rlci5ET00uQ3VzdG9tRWxlbWVudFxuICovXG5jbGFzcyBDdXN0b21Db250cm9sIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGUgY29uc3RydWN0b3IgbWV0aG9kIG9mIEN1c3RvbUNvbnRyb2wsIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGNyZWF0aW5nIGEgbmV3IGluc3RhbmNlLlxuXHQgKiBJdCBjaGVja3Mgd2hldGhlciB0aGUgZWxlbWVudCBzdXBwb3J0cyBgYXR0YWNoSW50ZXJuYWxzKClgIGFuZCBpbml0aWFsaXplcyBhbiBpbnRlcm5hbCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudFxuXHQgKiBpZiBzdXBwb3J0ZWQuIEFkZGl0aW9uYWxseSwgaXQgaW5pdGlhbGl6ZXMgYSBNdXRhdGlvbk9ic2VydmVyIHRvIHdhdGNoIGZvciBhdHRyaWJ1dGUgY2hhbmdlcy5cblx0ICpcblx0ICogU2VlIHRoZSBsaW5rcyBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbjpcblx0ICoge0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI2RvbS1jdXN0b21lbGVtZW50cmVnaXN0cnktZGVmaW5lfEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5kZWZpbmUoKX1cblx0ICoge0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI2RvbS1jdXN0b21lbGVtZW50cmVnaXN0cnktZ2V0fEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5nZXQoKX1cblx0ICogYW5kIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFsc3xFbGVtZW50SW50ZXJuYWxzfVxuXHQgKlxuXHQgKiBAaW5oZXJpdGRvY1xuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICogQHNpbmNlIDEuNy4wXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0Ly8gY2hlY2sgaWYgZWxlbWVudCBzdXBwb3J0cyBgYXR0YWNoSW50ZXJuYWxzKClgXG5cdFx0aWYgKHR5cGVvZiB0aGlzW1wiYXR0YWNoSW50ZXJuYWxzXCJdID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHRoaXNbYXR0YWNoZWRJbnRlcm5hbFN5bWJvbF0gPSB0aGlzLmF0dGFjaEludGVybmFscygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBgYXR0YWNoSW50ZXJuYWxzKClgIGlzIG5vdCBzdXBwb3J0ZWQsIHNvIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdFx0XHR0aHJvdyBFcnJvcihcblx0XHRcdFx0XCJ0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVwiLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHQvLyBpbml0aWFsaXplIGEgTXV0YXRpb25PYnNlcnZlciB0byB3YXRjaCBmb3IgYXR0cmlidXRlIGNoYW5nZXNcblx0XHRpbml0T2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tY29udHJvbEBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZSBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqIEBzaW5jZSAxLjE1LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuXHRcdHJldHVybiBzdXBlci5vYnNlcnZlZEF0dHJpYnV0ZXM7XG5cdH1cblxuXHQvKipcblx0ICogQWRkaW5nIGEgc3RhdGljIGBmb3JtQXNzb2NpYXRlZGAgcHJvcGVydHksIHdpdGggYSB0cnVlIHZhbHVlLCBtYWtlcyBhbiBhdXRvbm9tb3VzIGN1c3RvbSBlbGVtZW50IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2VlIFthdHRhY2hJbnRlcm5hbHMoKV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2F0dGFjaEludGVybmFsc31cblx0ICogQHNlZSBbQ3VzdG9tIEVsZW1lbnRzIEZhY2UgRXhhbXBsZV17QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnRzLWZhY2UtZXhhbXBsZX1cblx0ICogQHNpbmNlIDEuMTQuMFxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0c3RhdGljIGZvcm1Bc3NvY2lhdGVkID0gdHJ1ZTtcblxuXHQvKipcblx0ICogQGluaGVyaXRkb2Ncblx0ICogQHNpbmNlIDEuMTQuMFxuXHQgKiovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cyk7XG5cdH1cblxuXHQvKipcblx0ICogTXVzdCBiZSBvdmVycmlkZGVuIGJ5IGEgZGVyaXZlZCBjbGFzcyBhbmQgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbC5cblx0ICpcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgQVBJXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscyksIHdoaWNoIGlzIGEgcGFydCBvZiB0aGUgd2ViIHN0YW5kYXJkIGZvciBjdXN0b20gZWxlbWVudHMuXG5cdCAqXG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSB2YWx1ZSBnZXR0ZXIgbXVzdCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgZGVyaXZlZCBjbGFzc1xuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHRocm93IEVycm9yKFwidGhlIHZhbHVlIGdldHRlciBtdXN0IGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBkZXJpdmVkIGNsYXNzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE11c3QgYmUgb3ZlcnJpZGRlbiBieSBhIGRlcml2ZWQgY2xhc3MgYW5kIHNldCB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wuXG5cdCAqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIEFQSV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpLCB3aGljaCBpcyBhIHBhcnQgb2YgdGhlIHdlYiBzdGFuZGFyZCBmb3IgY3VzdG9tIGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSB2YWx1ZSBzZXR0ZXIgbXVzdCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgZGVyaXZlZCBjbGFzc1xuXHQgKi9cblx0c2V0IHZhbHVlKHZhbHVlKSB7XG5cdFx0dGhyb3cgRXJyb3IoXCJ0aGUgdmFsdWUgc2V0dGVyIG11c3QgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGRlcml2ZWQgY2xhc3NcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7Tm9kZUxpc3R9XG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvbGFiZWxzfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCBsYWJlbHMoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LmxhYmVscztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH1cblx0ICovXG5cdGdldCBuYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZShcIm5hbWVcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0IHR5cGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuZ2V0VGFnKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7VmFsaWRpdHlTdGF0ZX1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqIEBzZWUgW1ZhbGlkaXR5U3RhdGVde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9WYWxpZGl0eVN0YXRlfVxuXHQgKiBAc2VlIFt2YWxpZGl0eV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL3ZhbGlkaXR5fVxuXHQgKi9cblx0Z2V0IHZhbGlkaXR5KCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy52YWxpZGl0eTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy92YWxpZGF0aW9uTWVzc2FnZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpIHtcblx0XHRyZXR1cm4gZ2V0SW50ZXJuYWwuY2FsbCh0aGlzKT8udmFsaWRhdGlvbk1lc3NhZ2U7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHNpbmNlIDEuMTQuMFxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL3dpbGxWYWxpZGF0ZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCB3aWxsVmFsaWRhdGUoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LndpbGxWYWxpZGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAc2luY2UgMS4xNC4wXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvc3RhdGVzXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKi9cblx0Z2V0IHN0YXRlcygpIHtcblx0XHRyZXR1cm4gZ2V0SW50ZXJuYWwuY2FsbCh0aGlzKT8uc3RhdGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIEByZXR1cm4ge0hUTUxGb250RWxlbWVudHxudWxsfVxuXHQgKiBAc2luY2UgMS4xNC4wXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvZm9ybVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCBmb3JtKCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy5mb3JtO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiAvLyBVc2UgdGhlIGNvbnRyb2wncyBuYW1lIGFzIHRoZSBiYXNlIG5hbWUgZm9yIHN1Ym1pdHRlZCBkYXRhXG5cdCAqIGNvbnN0IG4gPSB0aGlzLmdldEF0dHJpYnV0ZSgnbmFtZScpO1xuXHQgKiBjb25zdCBlbnRyaWVzID0gbmV3IEZvcm1EYXRhKCk7XG5cdCAqIGVudHJpZXMuYXBwZW5kKG4gKyAnLWZpcnN0LW5hbWUnLCB0aGlzLmZpcnN0TmFtZV8pO1xuXHQgKiBlbnRyaWVzLmFwcGVuZChuICsgJy1sYXN0LW5hbWUnLCB0aGlzLmxhc3ROYW1lXyk7XG5cdCAqIHRoaXMuc2V0Rm9ybVZhbHVlKGVudHJpZXMpO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHBhcmFtIHtGaWxlfHN0cmluZ3xGb3JtRGF0YX0gdmFsdWVcblx0ICogQHBhcmFtIHtGaWxlfHN0cmluZ3xGb3JtRGF0YX0gc3RhdGVcblx0ICogQHNpbmNlIDEuMTQuMFxuXHQgKiBAcmV0dXJuIHt1bmRlZmluZWR9XG5cdCAqIEB0aHJvd3Mge0RPTUV4Y2VwdGlvbn0gTm90U3VwcG9ydGVkRXJyb3Jcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvc2V0Rm9ybVZhbHVlXG5cdCAqL1xuXHRzZXRGb3JtVmFsdWUodmFsdWUsIHN0YXRlKSB7XG5cdFx0Z2V0SW50ZXJuYWwuY2FsbCh0aGlzKS5zZXRGb3JtVmFsdWUodmFsdWUsIHN0YXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gZmxhZ3Ncblx0ICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBtZXNzYWdlXG5cdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGFuY2hvclxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL3NldFZhbGlkaXR5XG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICogQHJldHVybiB7dW5kZWZpbmVkfVxuXHQgKiBAdGhyb3dzIHtET01FeGNlcHRpb259IE5vdFN1cHBvcnRlZEVycm9yXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKi9cblx0c2V0VmFsaWRpdHkoZmxhZ3MsIG1lc3NhZ2UsIGFuY2hvcikge1xuXHRcdGdldEludGVybmFsLmNhbGwodGhpcykuc2V0VmFsaWRpdHkoZmxhZ3MsIG1lc3NhZ2UsIGFuY2hvcik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy9jaGVja1ZhbGlkaXR5XG5cdCAqIEBzaW5jZSAxLjE0LjBcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHRocm93cyB7RE9NRXhjZXB0aW9ufSBOb3RTdXBwb3J0ZWRFcnJvclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGNoZWNrVmFsaWRpdHkoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LmNoZWNrVmFsaWRpdHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAc2luY2UgMS4xNC4wXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvcmVwb3J0VmFsaWRpdHlcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqIEB0aHJvd3Mge0RPTUV4Y2VwdGlvbn0gTm90U3VwcG9ydGVkRXJyb3Jcblx0ICovXG5cdHJlcG9ydFZhbGlkaXR5KCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy5yZXBvcnRWYWxpZGl0eSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGBmb3JtYCBhdHRyaWJ1dGUgb2YgdGhlIGN1c3RvbSBjb250cm9sIHRvIHRoZSBgaWRgIG9mIHRoZSBwYXNzZWQgZm9ybSBlbGVtZW50LlxuXHQgKiBJZiBubyBmb3JtIGVsZW1lbnQgaXMgcGFzc2VkLCByZW1vdmVzIHRoZSBgZm9ybWAgYXR0cmlidXRlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hUTUxGb3JtRWxlbWVudH0gZm9ybSAtIFRoZSBmb3JtIGVsZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGNvbnRyb2xcblx0ICovXG5cdGZvcm1Bc3NvY2lhdGVkQ2FsbGJhY2soZm9ybSkge1xuXHRcdGlmIChmb3JtKSB7XG5cdFx0XHRpZiAoZm9ybS5pZCkge1xuXHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShcImZvcm1cIiwgZm9ybS5pZCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiZm9ybVwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBvciByZW1vdmVzIHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZSBvZiB0aGUgY3VzdG9tIGNvbnRyb2wgYmFzZWQgb24gdGhlIHBhc3NlZCB2YWx1ZS5cblx0ICpcblx0ICogQHBhcmFtIHtib29sZWFufSBkaXNhYmxlZCAtIFdoZXRoZXIgb3Igbm90IHRoZSBjb250cm9sIHNob3VsZCBiZSBkaXNhYmxlZFxuXHQgKi9cblx0Zm9ybURpc2FibGVkQ2FsbGJhY2soZGlzYWJsZWQpIHtcblx0XHRpZiAoZGlzYWJsZWQpIHtcblx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIiwgXCJcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbW9kZVxuXHQgKi9cblx0Zm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrKHN0YXRlLCBtb2RlKSB7fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Zm9ybVJlc2V0Q2FsbGJhY2soKSB7XG5cdFx0dGhpcy52YWx1ZSA9IFwiXCI7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG4gKiBAdGhpcyBDdXN0b21Db250cm9sXG4gKi9cbmZ1bmN0aW9uIGdldEludGVybmFsKCkge1xuXHRpZiAoIShhdHRhY2hlZEludGVybmFsU3ltYm9sIGluIHRoaXMpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XCJFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XCIsXG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiB0aGlzW2F0dGFjaGVkSW50ZXJuYWxTeW1ib2xdO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKiBAdGhpcyBDdXN0b21Db250cm9sXG4gKi9cbmZ1bmN0aW9uIGluaXRPYnNlcnZlcigpIHtcblx0Ly8gdmFsdWVcblx0dGhpc1thdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bXCJ2YWx1ZVwiXSA9ICgpID0+IHtcblx0XHR0aGlzLnNldE9wdGlvbihcInZhbHVlXCIsIHRoaXMuZ2V0QXR0cmlidXRlKFwidmFsdWVcIikpO1xuXHR9O1xufVxuIiwgIlxuLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyNC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQge2FkZEF0dHJpYnV0ZVRva2VufSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge0FUVFJJQlVURV9FUlJPUk1FU1NBR0V9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQge0J1dHRvblN0eWxlU2hlZXR9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBCdXR0b25TdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcbiAgQnV0dG9uU3R5bGVTaGVldC5pbnNlcnRSdWxlKGBcbkBsYXllciBidXR0b24geyBcbltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd30ubW9uc3Rlci1idXR0b24tcHJpbWFyeSxidXR0b257YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5LC5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5LC5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXNlY29uZGFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH1idXR0b246YWN0aXZlLGJ1dHRvbjpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfWJ1dHRvbjphY3RpdmV7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9Lm1vbnN0ZXItYnV0dG9uLWJhciwubW9uc3Rlci1idXR0b24tZ3JvdXB7YWxpZ24tY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6c3RyZXRjaDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2JveC1zaXppbmc6Ym9yZGVyLWJveDtnYXA6MDttYXJnaW46MXJlbSAwfS5tb25zdGVyLWJ1dHRvbi1ncm91cD46bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6Y2FsYyh2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkqLTEpfS5tb25zdGVyLWJ1dHRvbi1ncm91cCA6aG92ZXJ7Ym94LXNoYWRvdzpub25lfWJ1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6bGlnaHQpe2J1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowO2JvcmRlci1zaGFkb3c6bm9uZX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXthbGlnbi1pdGVtczpzdHJldGNoO2Rpc3BsYXk6ZmxleH0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiXG4vKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDI0LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7YWRkQXR0cmlidXRlVG9rZW59IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7QVRUUklCVVRFX0VSUk9STUVTU0FHRX0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7UmlwcGxlU3R5bGVTaGVldH1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFJpcHBsZVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuICBSaXBwbGVTdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuQGxheWVyIHJpcHBsZSB7IFxuc3Bhbi5tb25zdGVyLWZ4LXJpcHBsZXthbmltYXRpb246bW9uc3Rlci1meC1yaXBwbGUgLjZzIGxpbmVhcjtiYWNrZ3JvdW5kLWNvbG9yOmhzbGEoMCwwJSwxMDAlLC43KTtib3JkZXItcmFkaXVzOjUwJTtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm06c2NhbGUoMCl9QGtleWZyYW1lcyBtb25zdGVyLWZ4LXJpcHBsZXt0b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKDQpfX0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBDdXN0b21Db250cm9sIH0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21jb250cm9sLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0JVVFRPTl9DTEFTUyB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L2J1dHRvbi5tanNcIjtcbmltcG9ydCB7IFJpcHBsZVN0eWxlU2hlZXQgfSBmcm9tIFwiLi4vc3R5bGVzaGVldC9yaXBwbGUubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcblxuZXhwb3J0IHsgQnV0dG9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmV4cG9ydCBjb25zdCBidXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiYnV0dG9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgY3JlYXRlcyBhIGJ1dHRvbiBlbGVtZW50IHdpdGggYSB2YXJpZXR5IG9mIG9wdGlvbnMuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9idXR0b24ucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5XG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyA8bW9uc3Rlci1idXR0b24gLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItYnV0dG9uJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItYnV0dG9uPjwvbW9uc3Rlci1idXR0b24+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IHtCdXR0b259IGZyb20gJ0BzY2h1a2FpL2NvbXBvbmVudC1mb3JtL3NvdXJjZS9idXR0b24uanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1idXR0b24nKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBgZGF0YS1tb25zdGVyLWJ1dHRvbi1jbGFzc2AgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgQ1NTIGNsYXNzIG9mIHRoZSBidXR0b24uXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi8uLi9leGFtcGxlL2NvbXBvbmVudHMvZm9ybS9idXR0b24ubWpzXG4gKiBAc3RhcnR1bWwgYnV0dG9uLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gQ3VzdG9tQ29udHJvbFxuICogQ3VzdG9tQ29udHJvbCA8fC0tIEJ1dHRvblxuICogQGVuZHVtbFxuICpcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHN1bW1hcnkgQSBzaW1wbGUgYnV0dG9uXG4gKi9cbmNsYXNzIEJ1dHRvbiBleHRlbmRzIEN1c3RvbUNvbnRyb2wge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vYnV0dG9uQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5CdXR0b259XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmNsaWNrKCkgbWV0aG9kIHNpbXVsYXRlcyBhIGNsaWNrIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvY2xpY2t9XG5cdCAqL1xuXHRjbGljaygpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5jbGljaylcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uY2xpY2soKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5mb2N1cygpIG1ldGhvZCBzZXRzIGZvY3VzIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvZm9jdXN9XG5cdCAqL1xuXHRmb2N1cyhvcHRpb25zKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZm9jdXMpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmZvY3VzKG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmJsdXIoKSBtZXRob2QgcmVtb3ZlcyBmb2N1cyBmcm9tIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICovXG5cdGJsdXIoKSB7XG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZSBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcblx0XHRjb25zdCBhdHRyaWJ1dGVzID0gc3VwZXIub2JzZXJ2ZWRBdHRyaWJ1dGVzO1xuXHRcdGF0dHJpYnV0ZXMucHVzaChBVFRSSUJVVEVfQlVUVE9OX0NMQVNTKTtcblx0XHRyZXR1cm4gYXR0cmlidXRlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvYXR0YWNoSW50ZXJuYWxzfVxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0c3RhdGljIGdldCBmb3JtQXNzb2NpYXRlZCgpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudCBzZWxlY3Rpb24gb2YgdGhlIFNlbGVjdFxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItc2VsZWN0Jyk7XG5cdCAqIGNvbnNvbGUubG9nKGUudmFsdWUpXG5cdCAqIC8vIFx1MjFBNiAxXG5cdCAqIC8vIFx1MjFBNiBbJzEnLCcyJ11cblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfGFycmF5fVxuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcInZhbHVlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBzZWxlY3Rpb25cblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXNlbGVjdCcpO1xuXHQgKiBlLnZhbHVlPTFcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfGFycmF5fSB2YWx1ZVxuXHQgKiBAc2luY2UgMS4yLjBcblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwidmFsdWVcIiwgdmFsdWUpO1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzPy5zZXRGb3JtVmFsdWUodGhpcy52YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGxhYmVscyBMYWJlbHNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5idXR0b249PHNsb3Q+PC9zbG90PiBCdXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGFjdGlvbnMgQ2FsbGJhY2tzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb25zLmNsaWNrPVwidGhyb3cgRXJyb3JcIiBDYWxsYmFjayB3aGVuIGNsaWNrZWRcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNsYXNzZXMgQ1NTIGNsYXNzZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzZXMuYnV0dG9uPVwibW9uc3Rlci1idXR0b24tcHJpbWFyeVwiIENTUyBjbGFzcyBmb3IgdGhlIGJ1dHRvblxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGRpc2FibGVkPWZhbHNlIERpc2FibGVkIHN0YXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBlZmZlY3RzIEVmZmVjdHNcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBlZmZlY3RzLnJpcHBsZT10cnVlIFJpcHBsZSBlZmZlY3Rcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRidXR0b246IFwiPHNsb3Q+PC9zbG90PlwiLFxuXHRcdFx0fSxcblx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIm1vbnN0ZXItYnV0dG9uLXByaW1hcnlcIixcblx0XHRcdH0sXG5cdFx0XHRkaXNhYmxlZDogZmFsc2UsXG5cdFx0XHRhY3Rpb25zOiB7XG5cdFx0XHRcdGNsaWNrOiAoKSA9PiB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGNsaWNrIGFjdGlvbiBpcyBub3QgZGVmaW5lZFwiKTtcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRlZmZlY3RzOiB7XG5cdFx0XHRcdHJpcHBsZTogdHJ1ZSxcblx0XHRcdH0sXG5cdFx0XHR2YWx1ZTogbnVsbCxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItYnV0dG9uXCI7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7QXJyYXk8Q1NTU3R5bGVTaGVldD59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1JpcHBsZVN0eWxlU2hlZXQsIEJ1dHRvblN0eWxlU2hlZXRdO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2luaXRFdmVudEhhbmRsZXJ9XG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkZvcm0uZXZlbnQ6bW9uc3Rlci1idXR0b24tY2xpY2tlZFxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblx0Y29uc3QgYnV0dG9uID0gdGhpc1tidXR0b25FbGVtZW50U3ltYm9sXTtcblxuXHRjb25zdCB0eXBlID0gXCJjbGlja1wiO1xuXG5cdGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmN0aW9uIChldmVudCkge1xuXHRcdGNvbnN0IGNhbGxiYWNrID0gc2VsZi5nZXRPcHRpb24oXCJhY3Rpb25zLmNsaWNrXCIpO1xuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1idXR0b24tY2xpY2tlZFwiLCB7XG5cdFx0XHRidXR0b246IHNlbGYsXG5cdFx0fSk7XG5cblx0XHRpZiAoIWlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdFwiY29udHJvbFwiLFxuXHRcdCk7XG5cblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgTm9kZSAmJiBzZWxmLmhhc05vZGUoZWxlbWVudCkpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y2FsbGJhY2suY2FsbChzZWxmLCBldmVudCk7XG5cdH0pO1xuXG5cdGlmIChzZWxmLmdldE9wdGlvbihcImVmZmVjdHMucmlwcGxlXCIpKSB7XG5cdFx0YnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBjcmVhdGVSaXBwbGUuYmluZChzZWxmKSk7XG5cdH1cblxuXHQvLyBkYXRhLW1vbnN0ZXItb3B0aW9uc1xuXHRzZWxmW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtBVFRSSUJVVEVfQlVUVE9OX0NMQVNTXSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdHNlbGYuc2V0T3B0aW9uKFwiY2xhc3Nlcy5idXR0b25cIiwgdmFsdWUpO1xuXHR9O1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09YnV0dG9uXWAsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRpc2FibGVkIHBhdGg6ZGlzYWJsZWQgfCBpZjp0cnVlLCBjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBwYXJ0PVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b25cIj48L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUmlwcGxlKGV2ZW50KSB7XG5cdGNvbnN0IGJ1dHRvbiA9IHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF07XG5cblx0Y29uc3QgY2lyY2xlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG5cdGNvbnN0IGRpYW1ldGVyID0gTWF0aC5tYXgoYnV0dG9uLmNsaWVudFdpZHRoLCBidXR0b24uY2xpZW50SGVpZ2h0KTtcblx0Y29uc3QgcmFkaXVzID0gZGlhbWV0ZXIgLyAyO1xuXG5cdGNpcmNsZS5zdHlsZS53aWR0aCA9IGNpcmNsZS5zdHlsZS5oZWlnaHQgPSBgJHtkaWFtZXRlcn1weGA7XG5cdGNpcmNsZS5zdHlsZS5sZWZ0ID0gYCR7ZXZlbnQuY2xpZW50WCAtIGJ1dHRvbi5vZmZzZXRMZWZ0IC0gcmFkaXVzfXB4YDtcblx0Y2lyY2xlLnN0eWxlLnRvcCA9IGAke2V2ZW50LmNsaWVudFkgLSBidXR0b24ub2Zmc2V0VG9wIC0gcmFkaXVzfXB4YDtcblx0Y2lyY2xlLmNsYXNzTGlzdC5hZGQoXCJtb25zdGVyLWZ4LXJpcHBsZVwiKTtcblxuXHRjb25zdCByaXBwbGVzID0gYnV0dG9uLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJtb25zdGVyLWZ4LXJpcHBsZVwiKTtcblx0Zm9yIChjb25zdCByaXBwbGUgb2YgcmlwcGxlcykge1xuXHRcdHJpcHBsZS5yZW1vdmUoKTtcblx0fVxuXG5cdGJ1dHRvbi5hcHBlbmRDaGlsZChjaXJjbGUpO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoQnV0dG9uKTtcbiIsICJcbi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHthZGRBdHRyaWJ1dGVUb2tlbn0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtBVFRSSUJVVEVfRVJST1JNRVNTQUdFfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHtTdGF0ZUJ1dHRvblN0eWxlU2hlZXR9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuICBTdGF0ZUJ1dHRvblN0eWxlU2hlZXQuaW5zZXJ0UnVsZShgXG5AbGF5ZXIgc3RhdGVidXR0b24geyBcbltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd30ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowO2JvcmRlci1zaGFkb3c6bm9uZX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmF5LTE6I2Y2ZjZmNjstLW1vbnN0ZXItY29sb3ItZ3JheS0yOiNlMmUyZTI7LS1tb25zdGVyLWNvbG9yLWdyYXktMzojOGI4YjhiOy0tbW9uc3Rlci1jb2xvci1ncmF5LTQ6IzZmNmY2ZjstLW1vbnN0ZXItY29sb3ItZ3JheS01OiMzZTNlM2U7LS1tb25zdGVyLWNvbG9yLWdyYXktNjojMjIyOy0tbW9uc3Rlci1jb2xvci1yb3NlLTE6I2ZmZjdmOTstLW1vbnN0ZXItY29sb3Itcm9zZS0yOiNmZmRjZTU7LS1tb25zdGVyLWNvbG9yLXJvc2UtMzojZmYzYjhkOy0tbW9uc3Rlci1jb2xvci1yb3NlLTQ6I2RiMDA3MjstLW1vbnN0ZXItY29sb3Itcm9zZS01OiM4MDAwNDA7LS1tb25zdGVyLWNvbG9yLXJvc2UtNjojNGMwMDIzOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMTojZmZmOGY4Oy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMjojZmZkZGRmOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMzojZmY0MjZjOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNDojZGUwMDUxOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNTojODIwMDJjOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNjojNTEwMDE4Oy0tbW9uc3Rlci1jb2xvci1yZWQtMTojZmZmOGY2Oy0tbW9uc3Rlci1jb2xvci1yZWQtMjojZmZkZGQ4Oy0tbW9uc3Rlci1jb2xvci1yZWQtMzojZmY0NjQ3Oy0tbW9uc3Rlci1jb2xvci1yZWQtNDojZTAwMDJiOy0tbW9uc3Rlci1jb2xvci1yZWQtNTojODMwMDE0Oy0tbW9uc3Rlci1jb2xvci1yZWQtNjojNTMwMDAzOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMTojZmZmOGY1Oy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMjojZmZkZWQxOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMzojZmQ0ZDAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNDojY2QzYzAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNTojNzUyMTAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNjojNDAxNjAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xOiNmZmY4ZjM7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTI6I2ZmZGZjNjstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMzojZDU3MzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi00OiNhYzVjMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTU6IzYzMzMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNjojMzcxZDAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci0xOiNmZmY4ZWY7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTI6I2ZmZTBiMjstLW1vbnN0ZXItY29sb3ItYW1iZXItMzojYjk4MzAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci00OiM5MjY3MDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTU6IzUyMzgwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNjojMzAyMTAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMTojZmZmOWU1Oy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMjojZmZlNTNlOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMzojOWM4YjAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNDojN2Q2ZjAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNTojNDYzZDAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNjojMjkyMzAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTE6I2Y3ZmZhYzstLW1vbnN0ZXItY29sb3ItbGltZS0yOiNkNWYyMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtMzojODE5MzAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTQ6IzY3NzYwMDstLW1vbnN0ZXItY29sb3ItbGltZS01OiMzOTQxMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNjojMjIyNjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTE6I2U1ZmZjMzstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0yOiM5OGZiMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMzojNWM5YjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTQ6IzQ5N2MwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS01OiMyNjQ1MDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNjojMTgyNjAwOy0tbW9uc3Rlci1jb2xvci1ncmVlbi0xOiNlMGZmZDk7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTI6IzcyZmY2YzstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMzojMDBhMjFmOy0tbW9uc3Rlci1jb2xvci1ncmVlbi00OiMwMDgyMTc7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTU6IzAwNDkwODstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNjojMDYyODAwOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTE6I2RjZmZlNjstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0yOiM1ZGZmYTI7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMzojMDBhMDVhOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTQ6IzAwODE0NzstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC01OiMwMDQ4MjU7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNjojMDAyODEyOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTE6I2RhZmZlZjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0yOiM0MmZmYzY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMzojMDA5Zjc4Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTQ6IzAwN2Y1ZjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS01OiMwMDQ3MzQ7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNjojMDAyODFiOy0tbW9uc3Rlci1jb2xvci10ZWFsLTE6I2Q3ZmZmNzstLW1vbnN0ZXItY29sb3ItdGVhbC0yOiMwMGZmZTQ7LS1tb25zdGVyLWNvbG9yLXRlYWwtMzojMDA5ZThjOy0tbW9uc3Rlci1jb2xvci10ZWFsLTQ6IzAwN2M2ZTstLW1vbnN0ZXItY29sb3ItdGVhbC01OiMwMDQ0M2M7LS1tb25zdGVyLWNvbG9yLXRlYWwtNjojMDAyNzIyOy0tbW9uc3Rlci1jb2xvci1jeWFuLTE6I2M0ZmZmZTstLW1vbnN0ZXItY29sb3ItY3lhbi0yOiMwMGZhZmI7LS1tb25zdGVyLWNvbG9yLWN5YW4tMzojMDA5OTlhOy0tbW9uc3Rlci1jb2xvci1jeWFuLTQ6IzAwN2E3YjstLW1vbnN0ZXItY29sb3ItY3lhbi01OiMwMDQzNDQ7LS1tb25zdGVyLWNvbG9yLWN5YW4tNjojMDAyNTI1Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMTojZGFmYWZmOy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMjojOGRmMGZmOy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMzojMDA5OGE5Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNDojMDA3OTg3Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNTojMDA0MDQ4Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNjojMDAyMjI3Oy0tbW9uc3Rlci1jb2xvci1za3ktMTojZTNmN2ZmOy0tbW9uc3Rlci1jb2xvci1za3ktMjojYWVlOWZmOy0tbW9uc3Rlci1jb2xvci1za3ktMzojMDA5NGI0Oy0tbW9uc3Rlci1jb2xvci1za3ktNDojMDA3NTkwOy0tbW9uc3Rlci1jb2xvci1za3ktNTojMDA0MDRmOy0tbW9uc3Rlci1jb2xvci1za3ktNjojMDAxZjI4Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0xOiNlOGY2ZmY7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTI6I2I5ZTNmZjstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMzojMDA5MmM1Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi00OiMwMDc0OWQ7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTU6IzAwM2M1NDstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNjojMDAxZDJhOy0tbW9uc3Rlci1jb2xvci1henVyZS0xOiNlOGYyZmY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTI6I2M2ZTBmZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtMzojMDA4ZmRiOy0tbW9uc3Rlci1jb2xvci1henVyZS00OiMwMDcxYWY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTU6IzAwM2I1ZTstLW1vbnN0ZXItY29sb3ItYXp1cmUtNjojMDAxYzMwOy0tbW9uc3Rlci1jb2xvci1ibHVlLTE6I2YwZjRmZjstLW1vbnN0ZXItY29sb3ItYmx1ZS0yOiNkNGUwZmY7LS1tb25zdGVyLWNvbG9yLWJsdWUtMzojMDA4OWZjOy0tbW9uc3Rlci1jb2xvci1ibHVlLTQ6IzAwNmRjYTstLW1vbnN0ZXItY29sb3ItYmx1ZS01OiMwMDM4NmQ7LS1tb25zdGVyLWNvbG9yLWJsdWUtNjojMDAxYTM5Oy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMTojZjNmM2ZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMjojZGVkZGZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMzojNjU3ZWZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNDojMDA2MWZjOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNTojMDAzMjhhOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNjojMDAxNjQ5Oy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMTojZjdmMWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMjojZThkYWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMzojOWI3MGZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNDojNzk0YWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNTojMmQwZmJmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNjojMGIwMDc0Oy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMTojZmRmNGZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMjojZjdkOWZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMzojZDE1MGZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNDojYjAxZmUzOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNTojNjYwMDg3Oy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNjojM2EwMDRmOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTE6I2ZmZjNmYzstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yOiNmZmQ3ZjY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMzojZjkxMWUwOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQ6I2NhMDBiNjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS01OiM3NDAwNjg7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNjojNDQwMDNjOy0tbW9uc3Rlci1jb2xvci1waW5rLTE6I2ZmZjdmYjstLW1vbnN0ZXItY29sb3ItcGluay0yOiNmZmRjZWM7LS1tb25zdGVyLWNvbG9yLXBpbmstMzojZmYyZmIyOy0tbW9uc3Rlci1jb2xvci1waW5rLTQ6I2QyMDA4ZjstLW1vbnN0ZXItY29sb3ItcGluay01OiM3OTAwNTE7LS1tb25zdGVyLWNvbG9yLXBpbmstNjojNGIwMDMwfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtoZWlnaHQ6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9YnV0dG9uXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47dHJhbnNpdGlvbjp3aWR0aCAxMHMgZWFzZS1pbi1vdXR9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWxhYmVsXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXRlXXthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tc2VsZjpzdHJldGNoO2Rpc3BsYXk6ZmxleDt0cmFuc2l0aW9uOndpZHRoIDEycyBlYXNlLWluLW91dH1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdGVdPmltZyxbZGF0YS1tb25zdGVyLXJvbGU9c3RhdGVdPnN2Z3ttYXJnaW4tbGVmdDouM2VtfVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0+c3ZnLnN1Y2Nlc3NmdWx7YW5pbWF0aW9uOmJvdW5jeSAuNXMgbGluZWFyIGZvcndhcmRzO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzc2Z1bCl9W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXRlXT5zdmcuYWN0aXZpdHl7YW5pbWF0aW9uOmJvdW5jeSAuNXMgbGluZWFyIGZvcndhcmRzO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYWN0aXZpdHkpfVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0+c3ZnLmZhaWxlZHthbmltYXRpb246Ym91bmN5IC41cyBsaW5lYXIgZm9yd2FyZHM7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1mYWlsZWQpfVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0+c3ZnLmFjdGl2aXR5e2FuaW1hdGlvbi1kdXJhdGlvbjoxczthbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlO2FuaW1hdGlvbi1uYW1lOmFjdGl2aXR5O2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsMCwuMiwxKX1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdGVdLnN0YXRlbGVzc3tkaXNwbGF5Om5vbmV9QGtleWZyYW1lcyBhY3Rpdml0eXswJXt0cmFuc2Zvcm06c2NhbGUoMSl9NTAle3RyYW5zZm9ybTpzY2FsZSguMSl9dG97dHJhbnNmb3JtOnNjYWxlKDEpfX1Aa2V5ZnJhbWVzIGJvdW5jeXswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC4xKX04MCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxLjE1KX05MCV7dHJhbnNmb3JtOnNjYWxlKC45KX10b3t0cmFuc2Zvcm06c2NhbGUoMSl9fSBcbn1gLCAwKTtcbn0gY2F0Y2ggKGUpIHtcbiAgYWRkQXR0cmlidXRlVG9rZW4oZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKCdodG1sJyksIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUgKyBcIlwiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBTdGF0ZSwgZ2V0U3RhdGVJbnN0YW5jZUZvciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcm5hbFN5bWJvbCA9IFN5bWJvbChcImludGVybmFsU3ltYm9sXCIpO1xuXG4vKipcbiAqIFRoaXMgU3RhdGUgY2xhc3MgcmVwcmVzZW50IGEgU3RhdGUgd2l0aCBwcmVzZW50YXRpb25cbiAqXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXNcbiAqL1xuY2xhc3MgU3RhdGUgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcHJlc2VudGF0aW9uXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihzdGF0ZSwgcHJlc2VudGF0aW9uKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHt9O1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN0YXRlID0gdmFsaWRhdGVTdHJpbmcoc3RhdGUpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnByZXNlbnRhdGlvbiA9IHZhbGlkYXRlU3RyaW5nKHByZXNlbnRhdGlvbik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHN0YXRlXG5cdCAqL1xuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN0YXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBwcmVzZW50YXRpb25cblx0ICovXG5cdGdldCBwcmVzZW50YXRpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdLnByZXNlbnRhdGlvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZX1cblx0ICovXG5cdGdldENsb25lKCkge1xuXHRcdHJldHVybiBuZXcgU3RhdGUoXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5zdGF0ZSxcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnByZXNlbnRhdGlvbixcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogQHNpbmNlIDEuNS4wXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlR5cGVzLlN0YXRlfVxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlR5cGVzXG4gKi9cbmZ1bmN0aW9uIGdldFN0YXRlSW5zdGFuY2VGb3Ioc3RhdGUpIHtcblx0c3dpdGNoIChzdGF0ZSkge1xuXHRcdGNhc2UgXCJzdGF0ZWxlc3NcIjpcblx0XHRcdHJldHVybiBuZXcgU3RhdGUoXCJzdGF0ZWxlc3NcIiwgXCJcIik7XG5cdFx0Y2FzZSBcInN1Y2Nlc3NmdWxcIjpcblx0XHRcdHJldHVybiBuZXcgU3RhdGUoXG5cdFx0XHRcdFwic3VjY2Vzc2Z1bFwiLFxuXHRcdFx0XHQnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGNsYXNzPVwic3VjY2Vzc2Z1bFwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj48cGF0aCBkPVwiTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNHptMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTZ6XCIvPjxwYXRoIGQ9XCJNMTAuOTcgNC45N2EuMjM1LjIzNSAwIDAgMC0uMDIuMDIyTDcuNDc3IDkuNDE3IDUuMzg0IDcuMzIzYS43NS43NSAwIDAgMC0xLjA2IDEuMDZMNi45NyAxMS4wM2EuNzUuNzUgMCAwIDAgMS4wNzktLjAybDMuOTkyLTQuOTlhLjc1Ljc1IDAgMCAwLTEuMDcxLTEuMDV6XCIvPjwvc3ZnPicsXG5cdFx0XHQpO1xuXHRcdGNhc2UgXCJhY3Rpdml0eVwiOlxuXHRcdFx0cmV0dXJuIG5ldyBTdGF0ZShcblx0XHRcdFx0XCJhY3Rpdml0eVwiLFxuXHRcdFx0XHQnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGNsYXNzPVwiYWN0aXZpdHlcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+PGNpcmNsZSBjeD1cIjhcIiBjeT1cIjhcIiByPVwiOFwiLz48L3N2Zz4nLFxuXHRcdFx0KTtcblx0XHRjYXNlIFwiZmFpbGVkXCI6IC8vIGh0dHBzOi8vaWNvbnMuZ2V0Ym9vdHN0cmFwLmNvbS9pY29ucy9leGNsYW1hdGlvbi1jaXJjbGUvXG5cdFx0XHRyZXR1cm4gbmV3IFN0YXRlKFxuXHRcdFx0XHRcImZhaWxlZFwiLFxuXHRcdFx0XHQnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGNsYXNzPVwiZmFpbGVkXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPjxwYXRoIGQ9XCJNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0em0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNnpcIi8+PHBhdGggZD1cIk03LjAwMiAxMWExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDB6TTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAwTDcuMSA0Ljk5NXpcIi8+PC9zdmc+Jyxcblx0XHRcdCk7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBuZXcgU3RhdGUoc3RhdGUsIFwiXCIpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgcmVnaXN0ZXJDdXN0b21FbGVtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgaXNJbnRlZ2VyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi9idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3N0YXRlLWJ1dHRvbi5tanNcIjtcbmltcG9ydCB7IGdldFN0YXRlSW5zdGFuY2VGb3IsIFN0YXRlIH0gZnJvbSBcIi4vdHlwZXMvc3RhdGUubWpzXCI7XG5cbmV4cG9ydCB7IFN0YXRlQnV0dG9uIH07XG5cbi8qKlxuICogVGhpcyBDdXN0b21Db250cm9sIGNyZWF0ZXMgYSBidXR0b24gZWxlbWVudCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvc3RhdGUtYnV0dG9uLnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItc3RhdGUtYnV0dG9uIC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXN0YXRlLWJ1dHRvbicpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLXN0YXRlLWJ1dHRvbj48L21vbnN0ZXItc3RhdGUtYnV0dG9uPlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCB7U3RhdGVCdXR0b259IGZyb20gJ0BzY2h1a2FpL2NvbXBvbmVudC1mb3JtL3NvdXJjZS9zdGF0ZS1idXR0b24uanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zdGF0ZS1idXR0b24nKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBgZGF0YS1tb25zdGVyLWJ1dHRvbi1jbGFzc2AgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgQ1NTIGNsYXNzIG9mIHRoZSBidXR0b24uXG4gKlxuICogQHN0YXJ0dW1sIHN0YXRlLWJ1dHRvbi5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEN1c3RvbUNvbnRyb2xcbiAqIEN1c3RvbUNvbnRyb2wgPHwtLSBCdXR0b25cbiAqIEJ1dHRvbiA8fC0tIFN0YXRlQnV0dG9uXG4gKiBAZW5kdW1sXG4gKlxuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc3VtbWFyeSBBIHN0YXRlIGJ1dHRvbiB3aXRoIGljb25zXG4gKi9cbmNsYXNzIFN0YXRlQnV0dG9uIGV4dGVuZHMgQnV0dG9uIHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcblx0XHRcdFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vc3RhdGUtYnV0dG9uQEBpbnN0YW5jZVwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHN0YXRlcyBBdmFpbGFibGUgc3RhdHVzXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXMuU3RhdGV9IHN0YXRlcy5zdWNjZXNzZnVsPSBzdWNjZXNzZnVsXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXMuU3RhdGV9IHN0YXRlcy5hY3Rpdml0eT0gYWN0aXZpdHlcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZX0gc3RhdGVzLmZhaWxlZD0gZmFpbGVkXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXMuU3RhdGV9IGN1cnJlbnQgY3VycmVudCBzdGF0dXNcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5leGFtcGxlQWN0aW9uQ2FsbGJhY2t9IGFjdGlvbnMuY2xpY2tcblx0ICogQGV4dGVuZHMge0J1dHRvbn1cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvaWNvbnMvYmxvYi9tYWluL0xJQ0VOU0UubWR8Qm9vdHN0cmFwIGljb25zIGxpY2Vuc2V9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRzdGF0ZXM6IHtcblx0XHRcdFx0c3VjY2Vzc2Z1bDogZ2V0U3RhdGVJbnN0YW5jZUZvcihcInN1Y2Nlc3NmdWxcIiksXG5cdFx0XHRcdGFjdGl2aXR5OiBnZXRTdGF0ZUluc3RhbmNlRm9yKFwiYWN0aXZpdHlcIiksXG5cdFx0XHRcdGZhaWxlZDogZ2V0U3RhdGVJbnN0YW5jZUZvcihcImZhaWxlZFwiKSxcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50OiBnZXRTdGF0ZUluc3RhbmNlRm9yKFwic3RhdGVsZXNzXCIpLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGJ1dHRvbi5cblx0ICogSWYgYSB0aW1lb3V0IGlzIHNldCwgdGhlIHN0YXRlIGlzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBhZnRlciB0aGVcblx0ICogc3BlY2lmaWVkIHRpbWUuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjE4LjAgYSBwcmV2aW91c2x5IHNldCB0aW1lb3V0IGlzIGNsZWFyZWRcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0XG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlN0YXRlQnV0dG9ufVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZVxuXHQgKi9cblx0c2V0U3RhdGUoc3RhdGUsIHRpbWVvdXQpIHtcblx0XHRjb25zdCB0aW1lb3V0U3ltYm9sID0gU3ltYm9sLmZvcihcInRpbWVvdXRcIik7XG5cdFx0aWYgKHRoaXNbdGltZW91dFN5bWJvbF0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXNbdGltZW91dFN5bWJvbF0pO1xuXHRcdFx0ZGVsZXRlIHRoaXNbdGltZW91dFN5bWJvbF07XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb2JqID0gdGhpcy5nZXRPcHRpb24oYHN0YXRlcy4ke3ZhbGlkYXRlU3RyaW5nKHN0YXRlKX1gKTtcblx0XHRpZiAob2JqID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vdCBmb3VuZFwiKTtcblx0XHR9XG5cblx0XHR0aGlzLnNldE9wdGlvbihcImN1cnJlbnRcIiwgdmFsaWRhdGVJbnN0YW5jZShvYmosIFN0YXRlKSk7XG5cblx0XHRpZiAoaXNJbnRlZ2VyKHRpbWVvdXQpICYmIHRpbWVvdXQgPiAwKSB7XG5cdFx0XHR0aGlzW3RpbWVvdXRTeW1ib2xdID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlU3RhdGUoKTtcblx0XHRcdFx0ZGVsZXRlIHRoaXNbdGltZW91dFN5bWJvbF07XG5cdFx0XHR9LCB0aW1lb3V0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5TdGF0ZUJ1dHRvbn1cblx0ICovXG5cdHJlbW92ZVN0YXRlKCkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwiY3VycmVudFwiLCBnZXRTdGF0ZUluc3RhbmNlRm9yKFwic3RhdGVsZXNzXCIpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZXx1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXRTdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJjdXJyZW50XCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1zdGF0ZS1idXR0b25cIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtBcnJheTxDU1NTdHlsZVNoZWV0Pn1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdGNvbnN0IHN0eWxlcyA9IEJ1dHRvbi5nZXRDU1NTdHlsZVNoZWV0KCk7XG5cdFx0c3R5bGVzLnB1c2goU3RhdGVCdXR0b25TdHlsZVNoZWV0KTtcblx0XHRyZXR1cm4gc3R5bGVzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgPGJ1dHRvbiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRpc2FibGVkIHBhdGg6ZGlzYWJsZWQgfCBpZjp0cnVlLCBjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uXCJcbiAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHBhcnQ9XCJidXR0b25cIj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImxhYmVsXCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b25cIj48L2Rpdj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInN0YXRlXCJcblx0XHRcdCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y3VycmVudC5zdGF0ZVwiXG5cdFx0XHQgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmN1cnJlbnQucHJlc2VudGF0aW9uXCI+PC9kaXY+XG4gICAgPC9idXR0b24+XG48L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoU3RhdGVCdXR0b24pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gXCIuLi91dGlsL2Nsb25lLm1qc1wiO1xuaW1wb3J0IHsgREVMSU1JVEVSLCBQYXRoZmluZGVyLCBXSUxEQ0FSRCB9IGZyb20gXCIuL3BhdGhmaW5kZXIubWpzXCI7XG5cbmV4cG9ydCB7IGJ1aWxkTWFwLCBQQVJFTlQsIGFzc2VtYmxlUGFydHMgfTtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YVxuICovXG5jb25zdCBQQVJFTlQgPSBcIl5cIjtcblxuLyoqXG4gKiBNYXBzIGNhbiBiZSBlYXNpbHkgY3JlYXRlZCBmcm9tIGRhdGEgb2JqZWN0cyB3aXRoIHRoZSBoZWxwIG9mIHRoZSBmdW5jdGlvbiBgYnVpbGRNYXAoKWAuXG4gKlxuICogVGhlIHBhdGggY2FuIGJlIHNwZWNpZmllZCBhcyBlaXRoZXIgYSBzaW1wbGUgZGVmaW5pdGlvbiBhLmIuYyBvciBhIHRlbXBsYXRlICR7YS5iLmN9LlxuICogS2V5IGFuZCB2YWx1ZSBjYW4gYmUgZWl0aGVyIGEgZGVmaW5pdGlvbiBvciBhIHRlbXBsYXRlLiBUaGUga2V5IGRvZXMgbm90IGhhdmUgdG8gYmUgZGVmaW5lZC5cbiAqIFRoZSB0ZW1wbGF0ZXMgZGV0ZXJtaW5lIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBrZXlzIGFuZCB0aGUgdmFsdWUgb2YgdGhlIG1hcC4gRWl0aGVyIGEgc2luZ2xlIHZhbHVlXG4gKiBpZCBjYW4gYmUgdGFrZW4gb3IgYSBjb21wb3NpdGUga2V5ICR7aWR9ICR7bmFtZX0gY2FuIGJlIHVzZWQuXG4gKlxuICogSWYgeW91IHdhbnQgdG8gYWNjZXNzIHZhbHVlcyBvZiB0aGUgcGFyZW50IGRhdGEgc2V0LCB5b3UgaGF2ZSB0byB1c2UgdGhlIF4gY2hhcmFjdGVyLCBmb3IgZXhhbXBsZSAke2lkfSAke14ubmFtZX0uXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2RhdGEvYnVpbGRtYXAubWpzXG4gKiBAcGFyYW0geyp9IHN1YmplY3QgLSBUaGUgZGF0YSBvYmplY3QgZnJvbSB3aGljaCB0aGUgbWFwIHdpbGwgYmUgY3JlYXRlZFxuICogQHBhcmFtIHtzdHJpbmd8TW9uc3Rlci5EYXRhfmV4YW1wbGVTZWxlY3RvckNhbGxiYWNrfSBzZWxlY3RvciAtIFRoZSBwYXRoIHRvIHRoZSBkYXRhIG9iamVjdCwgb3IgYSBjYWxsYmFjayB0aGF0IHJldHVybnMgYSBtYXAuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlVGVtcGxhdGVdIC0gQSB0ZW1wbGF0ZSBmb3IgdGhlIHZhbHVlIG9mIHRoZSBtYXAuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2tleVRlbXBsYXRlXSAtIEEgdGVtcGxhdGUgZm9yIHRoZSBrZXkgb2YgdGhlIG1hcC5cbiAqIEBwYXJhbSB7TW9uc3Rlci5EYXRhfmV4YW1wbGVGaWx0ZXJDYWxsYmFja30gW2ZpbHRlcl0gLSBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGZpbHRlciBvdXQgdmFsdWVzLlxuICogQHJldHVybiB7Kn0gLSBUaGUgY3JlYXRlZCBtYXAuXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IC0gSWYgdGhlIHZhbHVlIGlzIG5laXRoZXIgYSBzdHJpbmcgbm9yIGEgZnVuY3Rpb24uXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IC0gSWYgdGhlIHNlbGVjdG9yIGNhbGxiYWNrIGRvZXMgbm90IHJldHVybiBhIG1hcC5cbiAqKi9cbmZ1bmN0aW9uIGJ1aWxkTWFwKHN1YmplY3QsIHNlbGVjdG9yLCB2YWx1ZVRlbXBsYXRlLCBrZXlUZW1wbGF0ZSwgZmlsdGVyKSB7XG5cdHJldHVybiBhc3NlbWJsZVBhcnRzKHN1YmplY3QsIHNlbGVjdG9yLCBmaWx0ZXIsIGZ1bmN0aW9uICh2LCBrLCBtKSB7XG5cdFx0ayA9IGJ1aWxkKHYsIGtleVRlbXBsYXRlLCBrKTtcblx0XHR2ID0gYnVpbGQodiwgdmFsdWVUZW1wbGF0ZSk7XG5cdFx0dGhpcy5zZXQoaywgdik7XG5cdH0pO1xufVxuXG4vKipcbiAqIFRoZSBhc3NlbWJsZVBhcnRzIGZ1bmN0aW9uIGlzIGEgcHJpdmF0ZSBmdW5jdGlvbiB0aGF0IGhlbHBzIGluIGJ1aWxkaW5nIGEgbWFwIGZyb20gYSBzdWJqZWN0IG9iamVjdCBiYXNlZCBvbiBhIHByb3ZpZGVkXG4gKiBzZWxlY3Rvci4gVGhlIHNlbGVjdG9yIGNhbiBlaXRoZXIgYmUgYSBzdHJpbmcgb3IgYSBjYWxsYmFjayBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSB1c2VkIGFzIGFcbiAqIGhlbHBlciBmdW5jdGlvbiBieSBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIG1vZHVsZS5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gdGFrZXMgZm91ciBwYXJhbWV0ZXJzOlxuICpcbiAqIHN1YmplY3Q6IFRoZSBzdWJqZWN0IG9iamVjdCBmcm9tIHdoaWNoIHRoZSBtYXAgaXMgdG8gYmUgYnVpbHRcbiAqIHNlbGVjdG9yOiBUaGUgc2VsZWN0b3IgdG8gZGV0ZXJtaW5lIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG1hcC4gSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGEgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBmaWx0ZXIgKG9wdGlvbmFsKTogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGZpbHRlciB2YWx1ZXMgYmFzZWQgb24gc29tZSBjcml0ZXJpYS5cbiAqIGNhbGxiYWNrOiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgZWFjaCBlbGVtZW50IGluIHRoZSBtYXAuXG4gKiBJZiB0aGUgc2VsZWN0b3IgcGFyYW1ldGVyIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24sIGl0IGlzIGV4ZWN1dGVkIHBhc3NpbmcgdGhlIHN1YmplY3QgYXMgaXRzIGFyZ3VtZW50LFxuICogYW5kIHRoZSByZXN1bHRpbmcgdmFsdWUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBNYXAuIE90aGVyd2lzZSwgaWYgdGhlIHNlbGVjdG9yIHBhcmFtZXRlciBpcyBhIHN0cmluZyxcbiAqIGJ1aWxkRmxhdE1hcCBpcyBjYWxsZWQgdG8gYnVpbGQgYSBmbGF0IG1hcCB3aXRoIGtleXMgYW5kIHZhbHVlcyBleHRyYWN0ZWQgZnJvbSB0aGUgc3ViamVjdCBvYmplY3QgYmFzZWQgb24gdGhlIHNlbGVjdG9yLlxuICpcbiAqIElmIHRoZSBmaWx0ZXIgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCBpdCB3aWxsIGJlIHVzZWQgdG8gZmlsdGVyIG91dCBjZXJ0YWluIGVsZW1lbnRzIGZyb20gdGhlIG1hcCwgYmFzZWQgb24gc29tZVxuICogY3JpdGVyaWEuIFRoZSBjYWxsYmFjayB3aWxsIGJlIHBhc3NlZCB0aGUgdmFsdWUsIGtleSwgYW5kIG1hcCBvYmplY3QsIGFuZCBpZiBpdCByZXR1cm5zIGZhbHNlLCB0aGUgZWxlbWVudCB3aWxsIGJlIHNraXBwZWQuXG4gKlxuICogRm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgbWFwLCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICpcbiAqIHY6IFRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudFxuICogazogVGhlIGtleSBvZiB0aGUgZWxlbWVudFxuICogbTogVGhlIG1hcCBvYmplY3RcbiAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IG1hcCB3aXRoIHRoZSBwcm9jZXNzZWQgdmFsdWVzLiBJZiBtYXAgaXMgbm90IGFuIGluc3RhbmNlIG9mIE1hcCwgYW4gZW1wdHkgbWFwIHdpbGwgYmUgcmV0dXJuZWQuXG4gKlxuICogRXhhbXBsZSBVc2FnZTpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBjb25zdCBvYmogPSB7XG4gKiAgIG5hbWU6IFwiSm9oblwiLFxuICogICBhZ2U6IDMwLFxuICogICBhZGRyZXNzOiB7XG4gKiAgICAgY2l0eTogXCJOZXcgWW9ya1wiLFxuICogICAgIHN0YXRlOiBcIk5ZXCIsXG4gKiAgICAgY291bnRyeTogXCJVU0FcIixcbiAqICAgfSxcbiAqIH07XG4gKlxuICogY29uc3Qgc2VsZWN0b3IgPSBcImFkZHJlc3NcIjtcbiAqXG4gKiBjb25zdCBtYXAgPSBhc3NlbWJsZVBhcnRzKG9iaiwgc2VsZWN0b3IsIG51bGwsIGZ1bmN0aW9uICh2LCBrLCBtKSB7XG4gKiAgIHRoaXMuc2V0KGssIHYpO1xuICogfSk7XG4gKlxuICogY29uc29sZS5sb2cobWFwKTtcbiAqIC8vIE91dHB1dDogTWFwKDMpIHtcbiAqIC8vICAgXCJhZGRyZXNzLmNpdHlcIiA9PiBcIk5ldyBZb3JrXCIsXG4gKiAvLyAgIFwiYWRkcmVzcy5zdGF0ZVwiID0+IFwiTllcIixcbiAqIC8vICAgXCJhZGRyZXNzLmNvdW50cnlcIiA9PiBcIlVTQVwiXG4gKiAvLyB9XG4gKiBgYGBcbiAqXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gc3ViamVjdCAtIFRoZSBzdWJqZWN0IG9iamVjdCBmcm9tIHdoaWNoIHRoZSBtYXAgaXMgdG8gYmUgYnVpbHQuXG4gKiBAcGFyYW0ge3N0cmluZ3xNb25zdGVyLkRhdGF+ZXhhbXBsZVNlbGVjdG9yQ2FsbGJhY2t9IHNlbGVjdG9yIC0gVGhlIHNlbGVjdG9yIHRvIGRldGVybWluZSB0aGUgc3RydWN0dXJlIG9mIHRoZSBtYXAuIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNb25zdGVyLkRhdGF+ZXhhbXBsZUZpbHRlckNhbGxiYWNrfSBbZmlsdGVyXSAtIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBmaWx0ZXIgdmFsdWVzIGJhc2VkIG9uIHNvbWUgY3JpdGVyaWEuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciBlYWNoIGVsZW1lbnQgaW4gdGhlIG1hcC5cbiAqIEByZXR1cm4ge01hcH0gLSBBIG5ldyBtYXAgd2l0aCB0aGUgcHJvY2Vzc2VkIHZhbHVlcy5cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gLSBXaGVuIHNlbGVjdG9yIGlzIG5laXRoZXIgYSBzdHJpbmcgbm9yIGEgZnVuY3Rpb24uXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKi9cbmZ1bmN0aW9uIGFzc2VtYmxlUGFydHMoc3ViamVjdCwgc2VsZWN0b3IsIGZpbHRlciwgY2FsbGJhY2spIHtcblx0Y29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuXG5cdGxldCBtYXA7XG5cdGlmIChpc0Z1bmN0aW9uKHNlbGVjdG9yKSkge1xuXHRcdG1hcCA9IHNlbGVjdG9yKHN1YmplY3QpO1xuXHRcdGlmICghKG1hcCBpbnN0YW5jZW9mIE1hcCkpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0aGUgc2VsZWN0b3IgY2FsbGJhY2sgbXVzdCByZXR1cm4gYSBtYXBcIik7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGlzU3RyaW5nKHNlbGVjdG9yKSkge1xuXHRcdG1hcCA9IG5ldyBNYXAoKTtcblx0XHRidWlsZEZsYXRNYXAuY2FsbChtYXAsIHN1YmplY3QsIHNlbGVjdG9yKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwic2VsZWN0b3IgaXMgbmVpdGhlciBhIHN0cmluZyBub3IgYSBmdW5jdGlvblwiKTtcblx0fVxuXG5cdGlmICghKG1hcCBpbnN0YW5jZW9mIE1hcCkpIHtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0bWFwLmZvckVhY2goKHYsIGssIG0pID0+IHtcblx0XHRpZiAoaXNGdW5jdGlvbihmaWx0ZXIpKSB7XG5cdFx0XHRpZiAoZmlsdGVyLmNhbGwobSwgdiwgaykgIT09IHRydWUpIHJldHVybjtcblx0XHR9XG5cblx0XHRjYWxsYmFjay5jYWxsKHJlc3VsdCwgdiwgaywgbSk7XG5cdH0pO1xuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBzdWJqZWN0XG4gKiBAcGFyYW0gc2VsZWN0b3JcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSBwYXJlbnRNYXBcbiAqIEByZXR1cm4geyp9XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRmxhdE1hcChzdWJqZWN0LCBzZWxlY3Rvciwga2V5LCBwYXJlbnRNYXApIHtcblx0Y29uc3QgY3VycmVudE1hcCA9IG5ldyBNYXAoKTtcblxuXHRjb25zdCByZXN1bHRMZW5ndGggPSB0aGlzLnNpemU7XG5cblx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSBrZXkgPSBbXTtcblxuXHRjb25zdCBwYXJ0cyA9IHNlbGVjdG9yLnNwbGl0KERFTElNSVRFUik7XG5cdGxldCBjdXJyZW50ID0gXCJcIjtcblx0Y29uc3QgY3VycmVudFBhdGggPSBbXTtcblx0ZG8ge1xuXHRcdGN1cnJlbnQgPSBwYXJ0cy5zaGlmdCgpO1xuXHRcdGN1cnJlbnRQYXRoLnB1c2goY3VycmVudCk7XG5cblx0XHRpZiAoY3VycmVudCA9PT0gV0lMRENBUkQpIHtcblx0XHRcdGNvbnN0IGZpbmRlciA9IG5ldyBQYXRoZmluZGVyKHN1YmplY3QpO1xuXHRcdFx0bGV0IG1hcDtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bWFwID0gZmluZGVyLmdldFZpYShjdXJyZW50UGF0aC5qb2luKERFTElNSVRFUikpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRjb25zdCBhID0gZTtcblx0XHRcdFx0bWFwID0gbmV3IE1hcCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IFtrLCBvXSBvZiBtYXApIHtcblx0XHRcdFx0Y29uc3QgY29weUtleSA9IGNsb25lKGtleSk7XG5cblx0XHRcdFx0Y3VycmVudFBhdGgubWFwKChhKSA9PiB7XG5cdFx0XHRcdFx0Y29weUtleS5wdXNoKGEgPT09IFdJTERDQVJEID8gayA6IGEpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRjb25zdCBrayA9IGNvcHlLZXkuam9pbihERUxJTUlURVIpO1xuXHRcdFx0XHRjb25zdCBzdWIgPSBidWlsZEZsYXRNYXAuY2FsbChcblx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdG8sXG5cdFx0XHRcdFx0cGFydHMuam9pbihERUxJTUlURVIpLFxuXHRcdFx0XHRcdGNvcHlLZXksXG5cdFx0XHRcdFx0byxcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRpZiAoaXNPYmplY3Qoc3ViKSAmJiBwYXJlbnRNYXAgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHN1YltQQVJFTlRdID0gcGFyZW50TWFwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y3VycmVudE1hcC5zZXQoa2ssIHN1Yik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IHdoaWxlIChwYXJ0cy5sZW5ndGggPiAwKTtcblxuXHQvLyBubyBzZXQgaW4gY2hpbGQgcnVuXG5cdGlmIChyZXN1bHRMZW5ndGggPT09IHRoaXMuc2l6ZSkge1xuXHRcdGZvciAoY29uc3QgW2ssIG9dIG9mIGN1cnJlbnRNYXApIHtcblx0XHRcdHRoaXMuc2V0KGssIG8pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzdWJqZWN0O1xufVxuXG4vKipcbiAqIFdpdGggdGhlIGhlbHAgb2YgdGhpcyBmaWx0ZXIgY2FsbGJhY2ssIHZhbHVlcyBjYW4gYmUgZmlsdGVyZWQgb3V0LiBPbmx5IGlmIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCB0aGUgdmFsdWUgaXMgdGFrZW4gZm9yIHRoZSBtYXAuXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuRGF0YX5leGFtcGxlRmlsdGVyQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgIEtleVxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YVxuICogQHNlZSB7QGxpbmsgTW9uc3Rlci5EYXRhLmJ1aWxkTWFwfVxuICovXG5cbi8qKlxuICogQWx0ZXJuYXRpdmVseSB0byBhIHN0cmluZyBzZWxlY3RvciBhIGNhbGxiYWNrIGNhbiBiZSBzcGVjaWZpZWQuIHRoaXMgbXVzdCByZXR1cm4gYSBtYXAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7YnVpbGRNYXB9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL2RhdGEvYnVpbGRtYXAubWpzJztcbiAqXG4gKiBsZXQgb2JqID0ge1xuICogICAgICAgICAgICAgICAgXCJkYXRhXCI6IFtcbiAqICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTAsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIkNhc3NhbmRyYVwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcImVucmljaG1lbnRcIjoge1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMSwgbGFiZWw6IFwiWFhTXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAyLCBsYWJlbDogXCJYU1wiLCBwcmljZTogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMywgbGFiZWw6IFwiU1wiLCBwcmljZTogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogNCwgbGFiZWw6IFwiTFwiLCBwcmljZTogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgICAgIH0sXG4gKiAgICAgICAgICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIwLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJZZXNzZXkhXCIsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwiZW5yaWNobWVudFwiOiB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAxLCBsYWJlbDogXCJYWFNcIiwgcHJpY2U6IFtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQyd9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJ31cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDIsIGxhYmVsOiBcIlhTXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAzLCBsYWJlbDogXCJTXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiA0LCBsYWJlbDogXCJMXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKlxuICogICAgICAgICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgXVxuICogICAgICAgICAgICB9O1xuICpcbiAqIGxldCBjYWxsYmFjayA9IGZ1bmN0aW9uIChzdWJqZWN0KSB7XG4gKiAgICAgICAgICAgICAgICBsZXQgbSA9IG5ldyBNYXA7XG4gKlxuICogICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaSwgYl0gb2YgT2JqZWN0LmVudHJpZXMoc3ViamVjdC5kYXRhKSkge1xuICpcbiAqICAgICAgICAgICAgICAgICAgICBsZXQga2V5MSA9IGk7XG4gKlxuICogICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2osIGNdIG9mIE9iamVjdC5lbnRyaWVzKGIuZW5yaWNobWVudC52YXJpYW50cykpIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleTIgPSBqO1xuICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaywgZF0gb2YgT2JqZWN0LmVudHJpZXMoYy5wcmljZSkpIHtcbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5MyA9IGs7XG4gKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5uYW1lID0gYi5uYW1lO1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5sYWJlbCA9IGMubGFiZWw7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmlkID0gW2tleTEsIGtleTIsIGtleTNdLmpvaW4oJy4nKTtcbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLnNldChkLmlkLCBkKTtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgfVxuICpcbiAqICAgICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICByZXR1cm4gbTtcbiAqICAgICAgICAgICAgfVxuICpcbiAqIGxldCBtYXAgPSBidWlsZE1hcChvYmosIGNhbGxiYWNrLCAnJHtuYW1lfSAke3ZrfScsICcke2lkfScpXG4gKlxuICogLy8gXHUyMUE2IE1hcCgzKSB7XG4gKiAvLyAgXCIwLjAuMFwiOlwiQ2Fzc2FuZHJhIDEyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMC4wLjFcIjpcIkNhc3NhbmRyYSAxMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjAuMS4wXCI6XCJDYXNzYW5kcmEgMjIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIwLjEuMVwiOlwiQ2Fzc2FuZHJhIDIyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMC4yLjBcIjpcIkNhc3NhbmRyYSAzMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjAuMi4xXCI6XCJDYXNzYW5kcmEgMzIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIwLjMuMFwiOlwiQ2Fzc2FuZHJhIDQyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMC4zLjFcIjpcIkNhc3NhbmRyYSA0Mi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjEuMC4wXCI6XCJZZXNzZXkhIDEyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMS4wLjFcIjpcIlllc3NleSEgMTIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIxLjEuMFwiOlwiWWVzc2V5ISAyMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjEuMS4xXCI6XCJZZXNzZXkhIDIyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMS4yLjBcIjpcIlllc3NleSEgMzIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIxLjIuMVwiOlwiWWVzc2V5ISAzMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjEuMy4wXCI6XCJZZXNzZXkhIDQyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMS4zLjFcIjpcIlllc3NleSEgNDIuMTIgXHUyMEFDXCJcbiAqIC8vIH1cbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5EYXRhfmV4YW1wbGVTZWxlY3RvckNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHN1YmplY3Qgc3ViamVjdFxuICogQHJldHVybiBNYXBcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTcuMFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YVxuICogQHNlZSB7QGxpbmsgTW9uc3Rlci5EYXRhLmJ1aWxkTWFwfVxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gc3ViamVjdFxuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBkZWZpbml0aW9uXG4gKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZVxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gYnVpbGQoc3ViamVjdCwgZGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlKSB7XG5cdGlmIChkZWZpbml0aW9uID09PSB1bmRlZmluZWQpIHJldHVybiBkZWZhdWx0VmFsdWUgPyBkZWZhdWx0VmFsdWUgOiBzdWJqZWN0O1xuXHR2YWxpZGF0ZVN0cmluZyhkZWZpbml0aW9uKTtcblxuXHRjb25zdCByZWdleHAgPSAvKD88cGxhY2Vob2xkZXI+XFwkeyg/PHBhdGg+W2EtelxcXkEtWi5cXC1fMC05XSopfSkvZ207XG5cdGNvbnN0IGFycmF5ID0gWy4uLmRlZmluaXRpb24ubWF0Y2hBbGwocmVnZXhwKV07XG5cblx0Y29uc3QgZmluZGVyID0gbmV3IFBhdGhmaW5kZXIoc3ViamVjdCk7XG5cblx0aWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBmaW5kZXIuZ2V0VmlhKGRlZmluaXRpb24pO1xuXHR9XG5cblx0YXJyYXkuZm9yRWFjaCgoYSkgPT4ge1xuXHRcdGNvbnN0IGdyb3VwcyA9IGE/LltcImdyb3Vwc1wiXTtcblx0XHRjb25zdCBwbGFjZWhvbGRlciA9IGdyb3Vwcz8uW1wicGxhY2Vob2xkZXJcIl07XG5cdFx0aWYgKHBsYWNlaG9sZGVyID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuXHRcdGNvbnN0IHBhdGggPSBncm91cHM/LltcInBhdGhcIl07XG5cblx0XHRsZXQgdiA9IGZpbmRlci5nZXRWaWEocGF0aCk7XG5cdFx0aWYgKHYgPT09IHVuZGVmaW5lZCkgdiA9IGRlZmF1bHRWYWx1ZTtcblxuXHRcdGRlZmluaXRpb24gPSBkZWZpbml0aW9uLnJlcGxhY2VBbGwocGxhY2Vob2xkZXIsIHYpO1xuXHR9KTtcblxuXHRyZXR1cm4gZGVmaW5pdGlvbjtcbn1cbiIsICIvKipcbiAqIEN1c3RvbSBwb3NpdGlvbmluZyByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy92aXJ0dWFsLWVsZW1lbnRzXG4gKi9cblxuY29uc3Qgc2lkZXMgPSBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddO1xuY29uc3QgYWxpZ25tZW50cyA9IFsnc3RhcnQnLCAnZW5kJ107XG5jb25zdCBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL3NpZGVzLnJlZHVjZSgoYWNjLCBzaWRlKSA9PiBhY2MuY29uY2F0KHNpZGUsIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMF0sIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMV0pLCBbXSk7XG5jb25zdCBtaW4gPSBNYXRoLm1pbjtcbmNvbnN0IG1heCA9IE1hdGgubWF4O1xuY29uc3Qgcm91bmQgPSBNYXRoLnJvdW5kO1xuY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yO1xuY29uc3QgY3JlYXRlQ29vcmRzID0gdiA9PiAoe1xuICB4OiB2LFxuICB5OiB2XG59KTtcbmNvbnN0IG9wcG9zaXRlU2lkZU1hcCA9IHtcbiAgbGVmdDogJ3JpZ2h0JyxcbiAgcmlnaHQ6ICdsZWZ0JyxcbiAgYm90dG9tOiAndG9wJyxcbiAgdG9wOiAnYm90dG9tJ1xufTtcbmNvbnN0IG9wcG9zaXRlQWxpZ25tZW50TWFwID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmZ1bmN0aW9uIGNsYW1wKHN0YXJ0LCB2YWx1ZSwgZW5kKSB7XG4gIHJldHVybiBtYXgoc3RhcnQsIG1pbih2YWx1ZSwgZW5kKSk7XG59XG5mdW5jdGlvbiBldmFsdWF0ZSh2YWx1ZSwgcGFyYW0pIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKHBhcmFtKSA6IHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0U2lkZShwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QXhpc0xlbmd0aChheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG59XG5mdW5jdGlvbiBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIFsndG9wJywgJ2JvdHRvbSddLmluY2x1ZGVzKGdldFNpZGUocGxhY2VtZW50KSkgPyAneScgOiAneCc7XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCkge1xuICByZXR1cm4gZ2V0T3Bwb3NpdGVBeGlzKGdldFNpZGVBeGlzKHBsYWNlbWVudCkpO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50U2lkZXMocGxhY2VtZW50LCByZWN0cywgcnRsKSB7XG4gIGlmIChydGwgPT09IHZvaWQgMCkge1xuICAgIHJ0bCA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnRBeGlzID0gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpO1xuICBjb25zdCBsZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGFsaWdubWVudEF4aXMpO1xuICBsZXQgbWFpbkFsaWdubWVudFNpZGUgPSBhbGlnbm1lbnRBeGlzID09PSAneCcgPyBhbGlnbm1lbnQgPT09IChydGwgPyAnZW5kJyA6ICdzdGFydCcpID8gJ3JpZ2h0JyA6ICdsZWZ0JyA6IGFsaWdubWVudCA9PT0gJ3N0YXJ0JyA/ICdib3R0b20nIDogJ3RvcCc7XG4gIGlmIChyZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSA+IHJlY3RzLmZsb2F0aW5nW2xlbmd0aF0pIHtcbiAgICBtYWluQWxpZ25tZW50U2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5BbGlnbm1lbnRTaWRlKTtcbiAgfVxuICByZXR1cm4gW21haW5BbGlnbm1lbnRTaWRlLCBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluQWxpZ25tZW50U2lkZSldO1xufVxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRQbGFjZW1lbnRzKHBsYWNlbWVudCkge1xuICBjb25zdCBvcHBvc2l0ZVBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHJldHVybiBbZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSwgb3Bwb3NpdGVQbGFjZW1lbnQsIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KG9wcG9zaXRlUGxhY2VtZW50KV07XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9zdGFydHxlbmQvZywgYWxpZ25tZW50ID0+IG9wcG9zaXRlQWxpZ25tZW50TWFwW2FsaWdubWVudF0pO1xufVxuZnVuY3Rpb24gZ2V0U2lkZUxpc3Qoc2lkZSwgaXNTdGFydCwgcnRsKSB7XG4gIGNvbnN0IGxyID0gWydsZWZ0JywgJ3JpZ2h0J107XG4gIGNvbnN0IHJsID0gWydyaWdodCcsICdsZWZ0J107XG4gIGNvbnN0IHRiID0gWyd0b3AnLCAnYm90dG9tJ107XG4gIGNvbnN0IGJ0ID0gWydib3R0b20nLCAndG9wJ107XG4gIHN3aXRjaCAoc2lkZSkge1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIGlmIChydGwpIHJldHVybiBpc1N0YXJ0ID8gcmwgOiBscjtcbiAgICAgIHJldHVybiBpc1N0YXJ0ID8gbHIgOiBybDtcbiAgICBjYXNlICdsZWZ0JzpcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICByZXR1cm4gaXNTdGFydCA/IHRiIDogYnQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBbXTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cyhwbGFjZW1lbnQsIGZsaXBBbGlnbm1lbnQsIGRpcmVjdGlvbiwgcnRsKSB7XG4gIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICBsZXQgbGlzdCA9IGdldFNpZGVMaXN0KGdldFNpZGUocGxhY2VtZW50KSwgZGlyZWN0aW9uID09PSAnc3RhcnQnLCBydGwpO1xuICBpZiAoYWxpZ25tZW50KSB7XG4gICAgbGlzdCA9IGxpc3QubWFwKHNpZGUgPT4gc2lkZSArIFwiLVwiICsgYWxpZ25tZW50KTtcbiAgICBpZiAoZmxpcEFsaWdubWVudCkge1xuICAgICAgbGlzdCA9IGxpc3QuY29uY2F0KGxpc3QubWFwKGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBsaXN0O1xufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIHNpZGUgPT4gb3Bwb3NpdGVTaWRlTWFwW3NpZGVdKTtcbn1cbmZ1bmN0aW9uIGV4cGFuZFBhZGRpbmdPYmplY3QocGFkZGluZykge1xuICByZXR1cm4ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMCxcbiAgICAuLi5wYWRkaW5nXG4gIH07XG59XG5mdW5jdGlvbiBnZXRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IGV4cGFuZFBhZGRpbmdPYmplY3QocGFkZGluZykgOiB7XG4gICAgdG9wOiBwYWRkaW5nLFxuICAgIHJpZ2h0OiBwYWRkaW5nLFxuICAgIGJvdHRvbTogcGFkZGluZyxcbiAgICBsZWZ0OiBwYWRkaW5nXG4gIH07XG59XG5mdW5jdGlvbiByZWN0VG9DbGllbnRSZWN0KHJlY3QpIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5yZWN0LFxuICAgIHRvcDogcmVjdC55LFxuICAgIGxlZnQ6IHJlY3QueCxcbiAgICByaWdodDogcmVjdC54ICsgcmVjdC53aWR0aCxcbiAgICBib3R0b206IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gIH07XG59XG5cbmV4cG9ydCB7IGFsaWdubWVudHMsIGNsYW1wLCBjcmVhdGVDb29yZHMsIGV2YWx1YXRlLCBleHBhbmRQYWRkaW5nT2JqZWN0LCBmbG9vciwgZ2V0QWxpZ25tZW50LCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0QXhpc0xlbmd0aCwgZ2V0RXhwYW5kZWRQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVBeGlzLCBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZVBsYWNlbWVudCwgZ2V0UGFkZGluZ09iamVjdCwgZ2V0U2lkZSwgZ2V0U2lkZUF4aXMsIG1heCwgbWluLCBwbGFjZW1lbnRzLCByZWN0VG9DbGllbnRSZWN0LCByb3VuZCwgc2lkZXMgfTtcbiIsICJpbXBvcnQgeyBnZXRTaWRlQXhpcywgZ2V0QWxpZ25tZW50QXhpcywgZ2V0QXhpc0xlbmd0aCwgZ2V0U2lkZSwgZ2V0QWxpZ25tZW50LCBldmFsdWF0ZSwgZ2V0UGFkZGluZ09iamVjdCwgcmVjdFRvQ2xpZW50UmVjdCwgbWluLCBjbGFtcCwgcGxhY2VtZW50cywgZ2V0QWxpZ25tZW50U2lkZXMsIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50LCBnZXRPcHBvc2l0ZVBsYWNlbWVudCwgZ2V0RXhwYW5kZWRQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzLCBzaWRlcywgbWF4LCBnZXRPcHBvc2l0ZUF4aXMgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMnO1xuZXhwb3J0IHsgcmVjdFRvQ2xpZW50UmVjdCB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5cbmZ1bmN0aW9uIGNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50KF9yZWYsIHBsYWNlbWVudCwgcnRsKSB7XG4gIGxldCB7XG4gICAgcmVmZXJlbmNlLFxuICAgIGZsb2F0aW5nXG4gIH0gPSBfcmVmO1xuICBjb25zdCBzaWRlQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCk7XG4gIGNvbnN0IGFsaWdubWVudEF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gIGNvbnN0IGFsaWduTGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChhbGlnbm1lbnRBeGlzKTtcbiAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgY29uc3QgaXNWZXJ0aWNhbCA9IHNpZGVBeGlzID09PSAneSc7XG4gIGNvbnN0IGNvbW1vblggPSByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCAvIDIgLSBmbG9hdGluZy53aWR0aCAvIDI7XG4gIGNvbnN0IGNvbW1vblkgPSByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHQgLyAyIC0gZmxvYXRpbmcuaGVpZ2h0IC8gMjtcbiAgY29uc3QgY29tbW9uQWxpZ24gPSByZWZlcmVuY2VbYWxpZ25MZW5ndGhdIC8gMiAtIGZsb2F0aW5nW2FsaWduTGVuZ3RoXSAvIDI7XG4gIGxldCBjb29yZHM7XG4gIHN3aXRjaCAoc2lkZSkge1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55IC0gZmxvYXRpbmcuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCAtIGZsb2F0aW5nLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLngsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55XG4gICAgICB9O1xuICB9XG4gIHN3aXRjaCAoZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkpIHtcbiAgICBjYXNlICdzdGFydCc6XG4gICAgICBjb29yZHNbYWxpZ25tZW50QXhpc10gLT0gY29tbW9uQWxpZ24gKiAocnRsICYmIGlzVmVydGljYWwgPyAtMSA6IDEpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZW5kJzpcbiAgICAgIGNvb3Jkc1thbGlnbm1lbnRBeGlzXSArPSBjb21tb25BbGlnbiAqIChydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gY29vcmRzO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBgeGAgYW5kIGB5YCBjb29yZGluYXRlcyB0aGF0IHdpbGwgcGxhY2UgdGhlIGZsb2F0aW5nIGVsZW1lbnRcbiAqIG5leHQgdG8gYSBnaXZlbiByZWZlcmVuY2UgZWxlbWVudC5cbiAqXG4gKiBUaGlzIGV4cG9ydCBkb2VzIG5vdCBoYXZlIGFueSBgcGxhdGZvcm1gIGludGVyZmFjZSBsb2dpYy4gWW91IHdpbGwgbmVlZCB0b1xuICogd3JpdGUgb25lIGZvciB0aGUgcGxhdGZvcm0geW91IGFyZSB1c2luZyBGbG9hdGluZyBVSSB3aXRoLlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSBhc3luYyAocmVmZXJlbmNlLCBmbG9hdGluZywgY29uZmlnKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBwbGFjZW1lbnQgPSAnYm90dG9tJyxcbiAgICBzdHJhdGVneSA9ICdhYnNvbHV0ZScsXG4gICAgbWlkZGxld2FyZSA9IFtdLFxuICAgIHBsYXRmb3JtXG4gIH0gPSBjb25maWc7XG4gIGNvbnN0IHZhbGlkTWlkZGxld2FyZSA9IG1pZGRsZXdhcmUuZmlsdGVyKEJvb2xlYW4pO1xuICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGZsb2F0aW5nKSk7XG4gIGxldCByZWN0cyA9IGF3YWl0IHBsYXRmb3JtLmdldEVsZW1lbnRSZWN0cyh7XG4gICAgcmVmZXJlbmNlLFxuICAgIGZsb2F0aW5nLFxuICAgIHN0cmF0ZWd5XG4gIH0pO1xuICBsZXQge1xuICAgIHgsXG4gICAgeVxuICB9ID0gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQocmVjdHMsIHBsYWNlbWVudCwgcnRsKTtcbiAgbGV0IHN0YXRlZnVsUGxhY2VtZW50ID0gcGxhY2VtZW50O1xuICBsZXQgbWlkZGxld2FyZURhdGEgPSB7fTtcbiAgbGV0IHJlc2V0Q291bnQgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbGlkTWlkZGxld2FyZS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHtcbiAgICAgIG5hbWUsXG4gICAgICBmblxuICAgIH0gPSB2YWxpZE1pZGRsZXdhcmVbaV07XG4gICAgY29uc3Qge1xuICAgICAgeDogbmV4dFgsXG4gICAgICB5OiBuZXh0WSxcbiAgICAgIGRhdGEsXG4gICAgICByZXNldFxuICAgIH0gPSBhd2FpdCBmbih7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIGluaXRpYWxQbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIHBsYWNlbWVudDogc3RhdGVmdWxQbGFjZW1lbnQsXG4gICAgICBzdHJhdGVneSxcbiAgICAgIG1pZGRsZXdhcmVEYXRhLFxuICAgICAgcmVjdHMsXG4gICAgICBwbGF0Zm9ybSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgZmxvYXRpbmdcbiAgICAgIH1cbiAgICB9KTtcbiAgICB4ID0gbmV4dFggIT0gbnVsbCA/IG5leHRYIDogeDtcbiAgICB5ID0gbmV4dFkgIT0gbnVsbCA/IG5leHRZIDogeTtcbiAgICBtaWRkbGV3YXJlRGF0YSA9IHtcbiAgICAgIC4uLm1pZGRsZXdhcmVEYXRhLFxuICAgICAgW25hbWVdOiB7XG4gICAgICAgIC4uLm1pZGRsZXdhcmVEYXRhW25hbWVdLFxuICAgICAgICAuLi5kYXRhXG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAocmVzZXQgJiYgcmVzZXRDb3VudCA8PSA1MCkge1xuICAgICAgcmVzZXRDb3VudCsrO1xuICAgICAgaWYgKHR5cGVvZiByZXNldCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHJlc2V0LnBsYWNlbWVudCkge1xuICAgICAgICAgIHN0YXRlZnVsUGxhY2VtZW50ID0gcmVzZXQucGxhY2VtZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNldC5yZWN0cykge1xuICAgICAgICAgIHJlY3RzID0gcmVzZXQucmVjdHMgPT09IHRydWUgPyBhd2FpdCBwbGF0Zm9ybS5nZXRFbGVtZW50UmVjdHMoe1xuICAgICAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICAgICAgZmxvYXRpbmcsXG4gICAgICAgICAgICBzdHJhdGVneVxuICAgICAgICAgIH0pIDogcmVzZXQucmVjdHM7XG4gICAgICAgIH1cbiAgICAgICAgKHtcbiAgICAgICAgICB4LFxuICAgICAgICAgIHlcbiAgICAgICAgfSA9IGNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50KHJlY3RzLCBzdGF0ZWZ1bFBsYWNlbWVudCwgcnRsKSk7XG4gICAgICB9XG4gICAgICBpID0gLTE7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5LFxuICAgIHBsYWNlbWVudDogc3RhdGVmdWxQbGFjZW1lbnQsXG4gICAgc3RyYXRlZ3ksXG4gICAgbWlkZGxld2FyZURhdGFcbiAgfTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgb2Ygb3ZlcmZsb3cgc2lkZSBvZmZzZXRzIHRoYXQgZGV0ZXJtaW5lIGhvdyBtdWNoIHRoZVxuICogZWxlbWVudCBpcyBvdmVyZmxvd2luZyBhIGdpdmVuIGNsaXBwaW5nIGJvdW5kYXJ5IG9uIGVhY2ggc2lkZS5cbiAqIC0gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgYm91bmRhcnkgYnkgdGhhdCBudW1iZXIgb2YgcGl4ZWxzXG4gKiAtIG5lZ2F0aXZlID0gaG93IG1hbnkgcGl4ZWxzIGxlZnQgYmVmb3JlIGl0IHdpbGwgb3ZlcmZsb3dcbiAqIC0gMCA9IGxpZXMgZmx1c2ggd2l0aCB0aGUgYm91bmRhcnlcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9kZXRlY3RPdmVyZmxvd1xuICovXG5hc3luYyBmdW5jdGlvbiBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX2F3YWl0JHBsYXRmb3JtJGlzRWxlO1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGNvbnN0IHtcbiAgICB4LFxuICAgIHksXG4gICAgcGxhdGZvcm0sXG4gICAgcmVjdHMsXG4gICAgZWxlbWVudHMsXG4gICAgc3RyYXRlZ3lcbiAgfSA9IHN0YXRlO1xuICBjb25zdCB7XG4gICAgYm91bmRhcnkgPSAnY2xpcHBpbmdBbmNlc3RvcnMnLFxuICAgIHJvb3RCb3VuZGFyeSA9ICd2aWV3cG9ydCcsXG4gICAgZWxlbWVudENvbnRleHQgPSAnZmxvYXRpbmcnLFxuICAgIGFsdEJvdW5kYXJ5ID0gZmFsc2UsXG4gICAgcGFkZGluZyA9IDBcbiAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gIGNvbnN0IGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gJ2Zsb2F0aW5nJyA/ICdyZWZlcmVuY2UnIDogJ2Zsb2F0aW5nJztcbiAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW2FsdEJvdW5kYXJ5ID8gYWx0Q29udGV4dCA6IGVsZW1lbnRDb250ZXh0XTtcbiAgY29uc3QgY2xpcHBpbmdDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChhd2FpdCBwbGF0Zm9ybS5nZXRDbGlwcGluZ1JlY3Qoe1xuICAgIGVsZW1lbnQ6ICgoX2F3YWl0JHBsYXRmb3JtJGlzRWxlID0gYXdhaXQgKHBsYXRmb3JtLmlzRWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNFbGVtZW50KGVsZW1lbnQpKSkgIT0gbnVsbCA/IF9hd2FpdCRwbGF0Zm9ybSRpc0VsZSA6IHRydWUpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgKGF3YWl0IChwbGF0Zm9ybS5nZXREb2N1bWVudEVsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldERvY3VtZW50RWxlbWVudChlbGVtZW50cy5mbG9hdGluZykpKSxcbiAgICBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnksXG4gICAgc3RyYXRlZ3lcbiAgfSkpO1xuICBjb25zdCByZWN0ID0gZWxlbWVudENvbnRleHQgPT09ICdmbG9hdGluZycgPyB7XG4gICAgLi4ucmVjdHMuZmxvYXRpbmcsXG4gICAgeCxcbiAgICB5XG4gIH0gOiByZWN0cy5yZWZlcmVuY2U7XG4gIGNvbnN0IG9mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBvZmZzZXRTY2FsZSA9IChhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQob2Zmc2V0UGFyZW50KSkpID8gKGF3YWl0IChwbGF0Zm9ybS5nZXRTY2FsZSA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0U2NhbGUob2Zmc2V0UGFyZW50KSkpIHx8IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfSA6IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfTtcbiAgY29uc3QgZWxlbWVudENsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KHBsYXRmb3JtLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0ID8gYXdhaXQgcGxhdGZvcm0uY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Qoe1xuICAgIGVsZW1lbnRzLFxuICAgIHJlY3QsXG4gICAgb2Zmc2V0UGFyZW50LFxuICAgIHN0cmF0ZWd5XG4gIH0pIDogcmVjdCk7XG4gIHJldHVybiB7XG4gICAgdG9wOiAoY2xpcHBpbmdDbGllbnRSZWN0LnRvcCAtIGVsZW1lbnRDbGllbnRSZWN0LnRvcCArIHBhZGRpbmdPYmplY3QudG9wKSAvIG9mZnNldFNjYWxlLnksXG4gICAgYm90dG9tOiAoZWxlbWVudENsaWVudFJlY3QuYm90dG9tIC0gY2xpcHBpbmdDbGllbnRSZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSAvIG9mZnNldFNjYWxlLnksXG4gICAgbGVmdDogKGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCkgLyBvZmZzZXRTY2FsZS54LFxuICAgIHJpZ2h0OiAoZWxlbWVudENsaWVudFJlY3QucmlnaHQgLSBjbGlwcGluZ0NsaWVudFJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0KSAvIG9mZnNldFNjYWxlLnhcbiAgfTtcbn1cblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIHBvc2l0aW9uIGFuIGlubmVyIGVsZW1lbnQgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgc28gdGhhdCBpdFxuICogYXBwZWFycyBjZW50ZXJlZCB0byB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXJyb3dcbiAqL1xuY29uc3QgYXJyb3cgPSBvcHRpb25zID0+ICh7XG4gIG5hbWU6ICdhcnJvdycsXG4gIG9wdGlvbnMsXG4gIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgY29uc3Qge1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBwbGFjZW1lbnQsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHMsXG4gICAgICBtaWRkbGV3YXJlRGF0YVxuICAgIH0gPSBzdGF0ZTtcbiAgICAvLyBTaW5jZSBgZWxlbWVudGAgaXMgcmVxdWlyZWQsIHdlIGRvbid0IFBhcnRpYWw8PiB0aGUgdHlwZS5cbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcGFkZGluZyA9IDBcbiAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpIHx8IHt9O1xuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgeCxcbiAgICAgIHlcbiAgICB9O1xuICAgIGNvbnN0IGF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gICAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChheGlzKTtcbiAgICBjb25zdCBhcnJvd0RpbWVuc2lvbnMgPSBhd2FpdCBwbGF0Zm9ybS5nZXREaW1lbnNpb25zKGVsZW1lbnQpO1xuICAgIGNvbnN0IGlzWUF4aXMgPSBheGlzID09PSAneSc7XG4gICAgY29uc3QgbWluUHJvcCA9IGlzWUF4aXMgPyAndG9wJyA6ICdsZWZ0JztcbiAgICBjb25zdCBtYXhQcm9wID0gaXNZQXhpcyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICBjb25zdCBjbGllbnRQcm9wID0gaXNZQXhpcyA/ICdjbGllbnRIZWlnaHQnIDogJ2NsaWVudFdpZHRoJztcbiAgICBjb25zdCBlbmREaWZmID0gcmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gKyByZWN0cy5yZWZlcmVuY2VbYXhpc10gLSBjb29yZHNbYXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIGNvbnN0IHN0YXJ0RGlmZiA9IGNvb3Jkc1theGlzXSAtIHJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgICBjb25zdCBhcnJvd09mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50KSk7XG4gICAgbGV0IGNsaWVudFNpemUgPSBhcnJvd09mZnNldFBhcmVudCA/IGFycm93T2Zmc2V0UGFyZW50W2NsaWVudFByb3BdIDogMDtcblxuICAgIC8vIERPTSBwbGF0Zm9ybSBjYW4gcmV0dXJuIGB3aW5kb3dgIGFzIHRoZSBgb2Zmc2V0UGFyZW50YC5cbiAgICBpZiAoIWNsaWVudFNpemUgfHwgIShhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoYXJyb3dPZmZzZXRQYXJlbnQpKSkpIHtcbiAgICAgIGNsaWVudFNpemUgPSBlbGVtZW50cy5mbG9hdGluZ1tjbGllbnRQcm9wXSB8fCByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIH1cbiAgICBjb25zdCBjZW50ZXJUb1JlZmVyZW5jZSA9IGVuZERpZmYgLyAyIC0gc3RhcnREaWZmIC8gMjtcblxuICAgIC8vIElmIHRoZSBwYWRkaW5nIGlzIGxhcmdlIGVub3VnaCB0aGF0IGl0IGNhdXNlcyB0aGUgYXJyb3cgdG8gbm8gbG9uZ2VyIGJlXG4gICAgLy8gY2VudGVyZWQsIG1vZGlmeSB0aGUgcGFkZGluZyBzbyB0aGF0IGl0IGlzIGNlbnRlcmVkLlxuICAgIGNvbnN0IGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcgPSBjbGllbnRTaXplIC8gMiAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiAtIDE7XG4gICAgY29uc3QgbWluUGFkZGluZyA9IG1pbihwYWRkaW5nT2JqZWN0W21pblByb3BdLCBsYXJnZXN0UG9zc2libGVQYWRkaW5nKTtcbiAgICBjb25zdCBtYXhQYWRkaW5nID0gbWluKHBhZGRpbmdPYmplY3RbbWF4UHJvcF0sIGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcpO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBmbG9hdGluZyBlbGVtZW50IGlmIHRoZSBjZW50ZXJcbiAgICAvLyBwb2ludCBpcyBvdXRzaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50J3MgYm91bmRzLlxuICAgIGNvbnN0IG1pbiQxID0gbWluUGFkZGluZztcbiAgICBjb25zdCBtYXggPSBjbGllbnRTaXplIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLSBtYXhQYWRkaW5nO1xuICAgIGNvbnN0IGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gICAgY29uc3Qgb2Zmc2V0ID0gY2xhbXAobWluJDEsIGNlbnRlciwgbWF4KTtcblxuICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGwgZW5vdWdoIHRoYXQgdGhlIGFycm93J3MgcGFkZGluZyBjYXVzZXMgaXQgdG9cbiAgICAvLyB0byBwb2ludCB0byBub3RoaW5nIGZvciBhbiBhbGlnbmVkIHBsYWNlbWVudCwgYWRqdXN0IHRoZSBvZmZzZXQgb2YgdGhlXG4gICAgLy8gZmxvYXRpbmcgZWxlbWVudCBpdHNlbGYuIFRvIGVuc3VyZSBgc2hpZnQoKWAgY29udGludWVzIHRvIHRha2UgYWN0aW9uLFxuICAgIC8vIGEgc2luZ2xlIHJlc2V0IGlzIHBlcmZvcm1lZCB3aGVuIHRoaXMgaXMgdHJ1ZS5cbiAgICBjb25zdCBzaG91bGRBZGRPZmZzZXQgPSAhbWlkZGxld2FyZURhdGEuYXJyb3cgJiYgZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT0gbnVsbCAmJiBjZW50ZXIgIT09IG9mZnNldCAmJiByZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSAvIDIgLSAoY2VudGVyIDwgbWluJDEgPyBtaW5QYWRkaW5nIDogbWF4UGFkZGluZykgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgPCAwO1xuICAgIGNvbnN0IGFsaWdubWVudE9mZnNldCA9IHNob3VsZEFkZE9mZnNldCA/IGNlbnRlciA8IG1pbiQxID8gY2VudGVyIC0gbWluJDEgOiBjZW50ZXIgLSBtYXggOiAwO1xuICAgIHJldHVybiB7XG4gICAgICBbYXhpc106IGNvb3Jkc1theGlzXSArIGFsaWdubWVudE9mZnNldCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgW2F4aXNdOiBvZmZzZXQsXG4gICAgICAgIGNlbnRlck9mZnNldDogY2VudGVyIC0gb2Zmc2V0IC0gYWxpZ25tZW50T2Zmc2V0LFxuICAgICAgICAuLi4oc2hvdWxkQWRkT2Zmc2V0ICYmIHtcbiAgICAgICAgICBhbGlnbm1lbnRPZmZzZXRcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICByZXNldDogc2hvdWxkQWRkT2Zmc2V0XG4gICAgfTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGdldFBsYWNlbWVudExpc3QoYWxpZ25tZW50LCBhdXRvQWxpZ25tZW50LCBhbGxvd2VkUGxhY2VtZW50cykge1xuICBjb25zdCBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50ID0gYWxpZ25tZW50ID8gWy4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgPT09IGFsaWdubWVudCksIC4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT09IGFsaWdubWVudCldIDogYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRTaWRlKHBsYWNlbWVudCkgPT09IHBsYWNlbWVudCk7XG4gIHJldHVybiBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50LmZpbHRlcihwbGFjZW1lbnQgPT4ge1xuICAgIGlmIChhbGlnbm1lbnQpIHtcbiAgICAgIHJldHVybiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSA9PT0gYWxpZ25tZW50IHx8IChhdXRvQWxpZ25tZW50ID8gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSAhPT0gcGxhY2VtZW50IDogZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnYXV0b1BsYWNlbWVudCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRhdXRvUCwgX21pZGRsZXdhcmVEYXRhJGF1dG9QMiwgX3BsYWNlbWVudHNUaGF0Rml0T25FO1xuICAgICAgY29uc3Qge1xuICAgICAgICByZWN0cyxcbiAgICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNyb3NzQXhpcyA9IGZhbHNlLFxuICAgICAgICBhbGlnbm1lbnQsXG4gICAgICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cyxcbiAgICAgICAgYXV0b0FsaWdubWVudCA9IHRydWUsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHMkMSA9IGFsaWdubWVudCAhPT0gdW5kZWZpbmVkIHx8IGFsbG93ZWRQbGFjZW1lbnRzID09PSBwbGFjZW1lbnRzID8gZ2V0UGxhY2VtZW50TGlzdChhbGlnbm1lbnQgfHwgbnVsbCwgYXV0b0FsaWdubWVudCwgYWxsb3dlZFBsYWNlbWVudHMpIDogYWxsb3dlZFBsYWNlbWVudHM7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gKChfbWlkZGxld2FyZURhdGEkYXV0b1AgPSBtaWRkbGV3YXJlRGF0YS5hdXRvUGxhY2VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGF1dG9QLmluZGV4KSB8fCAwO1xuICAgICAgY29uc3QgY3VycmVudFBsYWNlbWVudCA9IHBsYWNlbWVudHMkMVtjdXJyZW50SW5kZXhdO1xuICAgICAgaWYgKGN1cnJlbnRQbGFjZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBjb25zdCBhbGlnbm1lbnRTaWRlcyA9IGdldEFsaWdubWVudFNpZGVzKGN1cnJlbnRQbGFjZW1lbnQsIHJlY3RzLCBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSkpO1xuXG4gICAgICAvLyBNYWtlIGBjb21wdXRlQ29vcmRzYCBzdGFydCBmcm9tIHRoZSByaWdodCBwbGFjZS5cbiAgICAgIGlmIChwbGFjZW1lbnQgIT09IGN1cnJlbnRQbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnRzJDFbMF1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50T3ZlcmZsb3dzID0gW292ZXJmbG93W2dldFNpZGUoY3VycmVudFBsYWNlbWVudCldLCBvdmVyZmxvd1thbGlnbm1lbnRTaWRlc1swXV0sIG92ZXJmbG93W2FsaWdubWVudFNpZGVzWzFdXV07XG4gICAgICBjb25zdCBhbGxPdmVyZmxvd3MgPSBbLi4uKCgoX21pZGRsZXdhcmVEYXRhJGF1dG9QMiA9IG1pZGRsZXdhcmVEYXRhLmF1dG9QbGFjZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkYXV0b1AyLm92ZXJmbG93cykgfHwgW10pLCB7XG4gICAgICAgIHBsYWNlbWVudDogY3VycmVudFBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzOiBjdXJyZW50T3ZlcmZsb3dzXG4gICAgICB9XTtcbiAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzJDFbY3VycmVudEluZGV4ICsgMV07XG5cbiAgICAgIC8vIFRoZXJlIGFyZSBtb3JlIHBsYWNlbWVudHMgdG8gY2hlY2suXG4gICAgICBpZiAobmV4dFBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGluZGV4OiBjdXJyZW50SW5kZXggKyAxLFxuICAgICAgICAgICAgb3ZlcmZsb3dzOiBhbGxPdmVyZmxvd3NcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IG5leHRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2UgPSBhbGxPdmVyZmxvd3MubWFwKGQgPT4ge1xuICAgICAgICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQoZC5wbGFjZW1lbnQpO1xuICAgICAgICByZXR1cm4gW2QucGxhY2VtZW50LCBhbGlnbm1lbnQgJiYgY3Jvc3NBeGlzID9cbiAgICAgICAgLy8gQ2hlY2sgYWxvbmcgdGhlIG1haW5BeGlzIGFuZCBtYWluIGNyb3NzQXhpcyBzaWRlLlxuICAgICAgICBkLm92ZXJmbG93cy5zbGljZSgwLCAyKS5yZWR1Y2UoKGFjYywgdikgPT4gYWNjICsgdiwgMCkgOlxuICAgICAgICAvLyBDaGVjayBvbmx5IHRoZSBtYWluQXhpcy5cbiAgICAgICAgZC5vdmVyZmxvd3NbMF0sIGQub3ZlcmZsb3dzXTtcbiAgICAgIH0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHNUaGF0Rml0T25FYWNoU2lkZSA9IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZS5maWx0ZXIoZCA9PiBkWzJdLnNsaWNlKDAsXG4gICAgICAvLyBBbGlnbmVkIHBsYWNlbWVudHMgc2hvdWxkIG5vdCBjaGVjayB0aGVpciBvcHBvc2l0ZSBjcm9zc0F4aXNcbiAgICAgIC8vIHNpZGUuXG4gICAgICBnZXRBbGlnbm1lbnQoZFswXSkgPyAyIDogMykuZXZlcnkodiA9PiB2IDw9IDApKTtcbiAgICAgIGNvbnN0IHJlc2V0UGxhY2VtZW50ID0gKChfcGxhY2VtZW50c1RoYXRGaXRPbkUgPSBwbGFjZW1lbnRzVGhhdEZpdE9uRWFjaFNpZGVbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfcGxhY2VtZW50c1RoYXRGaXRPbkVbMF0pIHx8IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZVswXVswXTtcbiAgICAgIGlmIChyZXNldFBsYWNlbWVudCAhPT0gcGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGN1cnJlbnRJbmRleCArIDEsXG4gICAgICAgICAgICBvdmVyZmxvd3M6IGFsbE92ZXJmbG93c1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogcmVzZXRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2ZsaXAnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkYXJyb3csIF9taWRkbGV3YXJlRGF0YSRmbGlwO1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgaW5pdGlhbFBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IHRydWUsXG4gICAgICAgIGZhbGxiYWNrUGxhY2VtZW50czogc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzLFxuICAgICAgICBmYWxsYmFja1N0cmF0ZWd5ID0gJ2Jlc3RGaXQnLFxuICAgICAgICBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uID0gJ25vbmUnLFxuICAgICAgICBmbGlwQWxpZ25tZW50ID0gdHJ1ZSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuXG4gICAgICAvLyBJZiBhIHJlc2V0IGJ5IHRoZSBhcnJvdyB3YXMgY2F1c2VkIGR1ZSB0byBhbiBhbGlnbm1lbnQgb2Zmc2V0IGJlaW5nXG4gICAgICAvLyBhZGRlZCwgd2Ugc2hvdWxkIHNraXAgYW55IGxvZ2ljIG5vdyBzaW5jZSBgZmxpcCgpYCBoYXMgYWxyZWFkeSBkb25lIGl0c1xuICAgICAgLy8gd29yay5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjU0OSNpc3N1ZWNvbW1lbnQtMTcxOTYwMTY0M1xuICAgICAgaWYgKChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBpc0Jhc2VQbGFjZW1lbnQgPSBnZXRTaWRlKGluaXRpYWxQbGFjZW1lbnQpID09PSBpbml0aWFsUGxhY2VtZW50O1xuICAgICAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpO1xuICAgICAgY29uc3QgZmFsbGJhY2tQbGFjZW1lbnRzID0gc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIHx8IChpc0Jhc2VQbGFjZW1lbnQgfHwgIWZsaXBBbGlnbm1lbnQgPyBbZ2V0T3Bwb3NpdGVQbGFjZW1lbnQoaW5pdGlhbFBsYWNlbWVudCldIDogZ2V0RXhwYW5kZWRQbGFjZW1lbnRzKGluaXRpYWxQbGFjZW1lbnQpKTtcbiAgICAgIGlmICghc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzICYmIGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24gIT09ICdub25lJykge1xuICAgICAgICBmYWxsYmFja1BsYWNlbWVudHMucHVzaCguLi5nZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzKGluaXRpYWxQbGFjZW1lbnQsIGZsaXBBbGlnbm1lbnQsIGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24sIHJ0bCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGxhY2VtZW50cyA9IFtpbml0aWFsUGxhY2VtZW50LCAuLi5mYWxsYmFja1BsYWNlbWVudHNdO1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IG92ZXJmbG93cyA9IFtdO1xuICAgICAgbGV0IG92ZXJmbG93c0RhdGEgPSAoKF9taWRkbGV3YXJlRGF0YSRmbGlwID0gbWlkZGxld2FyZURhdGEuZmxpcCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRmbGlwLm92ZXJmbG93cykgfHwgW107XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBvdmVyZmxvd3MucHVzaChvdmVyZmxvd1tzaWRlXSk7XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgY29uc3Qgc2lkZXMgPSBnZXRBbGlnbm1lbnRTaWRlcyhwbGFjZW1lbnQsIHJlY3RzLCBydGwpO1xuICAgICAgICBvdmVyZmxvd3MucHVzaChvdmVyZmxvd1tzaWRlc1swXV0sIG92ZXJmbG93W3NpZGVzWzFdXSk7XG4gICAgICB9XG4gICAgICBvdmVyZmxvd3NEYXRhID0gWy4uLm92ZXJmbG93c0RhdGEsIHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBvdmVyZmxvd3NcbiAgICAgIH1dO1xuXG4gICAgICAvLyBPbmUgb3IgbW9yZSBzaWRlcyBpcyBvdmVyZmxvd2luZy5cbiAgICAgIGlmICghb3ZlcmZsb3dzLmV2ZXJ5KHNpZGUgPT4gc2lkZSA8PSAwKSkge1xuICAgICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJGZsaXAyLCBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXI7XG4gICAgICAgIGNvbnN0IG5leHRJbmRleCA9ICgoKF9taWRkbGV3YXJlRGF0YSRmbGlwMiA9IG1pZGRsZXdhcmVEYXRhLmZsaXApID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkZmxpcDIuaW5kZXgpIHx8IDApICsgMTtcbiAgICAgICAgY29uc3QgbmV4dFBsYWNlbWVudCA9IHBsYWNlbWVudHNbbmV4dEluZGV4XTtcbiAgICAgICAgaWYgKG5leHRQbGFjZW1lbnQpIHtcbiAgICAgICAgICAvLyBUcnkgbmV4dCBwbGFjZW1lbnQgYW5kIHJlLXJ1biB0aGUgbGlmZWN5Y2xlLlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGluZGV4OiBuZXh0SW5kZXgsXG4gICAgICAgICAgICAgIG92ZXJmbG93czogb3ZlcmZsb3dzRGF0YVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICAgIHBsYWNlbWVudDogbmV4dFBsYWNlbWVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaXJzdCwgZmluZCB0aGUgY2FuZGlkYXRlcyB0aGF0IGZpdCBvbiB0aGUgbWFpbkF4aXMgc2lkZSBvZiBvdmVyZmxvdyxcbiAgICAgICAgLy8gdGhlbiBmaW5kIHRoZSBwbGFjZW1lbnQgdGhhdCBmaXRzIHRoZSBiZXN0IG9uIHRoZSBtYWluIGNyb3NzQXhpcyBzaWRlLlxuICAgICAgICBsZXQgcmVzZXRQbGFjZW1lbnQgPSAoX292ZXJmbG93c0RhdGEkZmlsdGVyID0gb3ZlcmZsb3dzRGF0YS5maWx0ZXIoZCA9PiBkLm92ZXJmbG93c1swXSA8PSAwKS5zb3J0KChhLCBiKSA9PiBhLm92ZXJmbG93c1sxXSAtIGIub3ZlcmZsb3dzWzFdKVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9vdmVyZmxvd3NEYXRhJGZpbHRlci5wbGFjZW1lbnQ7XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIGZhbGxiYWNrLlxuICAgICAgICBpZiAoIXJlc2V0UGxhY2VtZW50KSB7XG4gICAgICAgICAgc3dpdGNoIChmYWxsYmFja1N0cmF0ZWd5KSB7XG4gICAgICAgICAgICBjYXNlICdiZXN0Rml0JzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciBfb3ZlcmZsb3dzRGF0YSRtYXAkc287XG4gICAgICAgICAgICAgICAgY29uc3QgcGxhY2VtZW50ID0gKF9vdmVyZmxvd3NEYXRhJG1hcCRzbyA9IG92ZXJmbG93c0RhdGEubWFwKGQgPT4gW2QucGxhY2VtZW50LCBkLm92ZXJmbG93cy5maWx0ZXIob3ZlcmZsb3cgPT4gb3ZlcmZsb3cgPiAwKS5yZWR1Y2UoKGFjYywgb3ZlcmZsb3cpID0+IGFjYyArIG92ZXJmbG93LCAwKV0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9vdmVyZmxvd3NEYXRhJG1hcCRzb1swXTtcbiAgICAgICAgICAgICAgICBpZiAocGxhY2VtZW50KSB7XG4gICAgICAgICAgICAgICAgICByZXNldFBsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2luaXRpYWxQbGFjZW1lbnQnOlxuICAgICAgICAgICAgICByZXNldFBsYWNlbWVudCA9IGluaXRpYWxQbGFjZW1lbnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGxhY2VtZW50ICE9PSByZXNldFBsYWNlbWVudCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgICBwbGFjZW1lbnQ6IHJlc2V0UGxhY2VtZW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0KSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiBvdmVyZmxvdy50b3AgLSByZWN0LmhlaWdodCxcbiAgICByaWdodDogb3ZlcmZsb3cucmlnaHQgLSByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogb3ZlcmZsb3cuYm90dG9tIC0gcmVjdC5oZWlnaHQsXG4gICAgbGVmdDogb3ZlcmZsb3cubGVmdCAtIHJlY3Qud2lkdGhcbiAgfTtcbn1cbmZ1bmN0aW9uIGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvdmVyZmxvdykge1xuICByZXR1cm4gc2lkZXMuc29tZShzaWRlID0+IG92ZXJmbG93W3NpZGVdID49IDApO1xufVxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2hpZGUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcmVjdHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc3RyYXRlZ3kgPSAncmVmZXJlbmNlSGlkZGVuJyxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgc3dpdGNoIChzdHJhdGVneSkge1xuICAgICAgICBjYXNlICdyZWZlcmVuY2VIaWRkZW4nOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgICAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zLFxuICAgICAgICAgICAgICBlbGVtZW50Q29udGV4dDogJ3JlZmVyZW5jZSdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0cy5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhpZGRlbk9mZnNldHM6IG9mZnNldHMsXG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlSGlkZGVuOiBpc0FueVNpZGVGdWxseUNsaXBwZWQob2Zmc2V0cylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2VzY2FwZWQnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgICAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zLFxuICAgICAgICAgICAgICBhbHRCb3VuZGFyeTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3RzLmZsb2F0aW5nKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBlc2NhcGVkT2Zmc2V0czogb2Zmc2V0cyxcbiAgICAgICAgICAgICAgICBlc2NhcGVkOiBpc0FueVNpZGVGdWxseUNsaXBwZWQob2Zmc2V0cylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ1JlY3QocmVjdHMpIHtcbiAgY29uc3QgbWluWCA9IG1pbiguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LmxlZnQpKTtcbiAgY29uc3QgbWluWSA9IG1pbiguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LnRvcCkpO1xuICBjb25zdCBtYXhYID0gbWF4KC4uLnJlY3RzLm1hcChyZWN0ID0+IHJlY3QucmlnaHQpKTtcbiAgY29uc3QgbWF4WSA9IG1heCguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LmJvdHRvbSkpO1xuICByZXR1cm4ge1xuICAgIHg6IG1pblgsXG4gICAgeTogbWluWSxcbiAgICB3aWR0aDogbWF4WCAtIG1pblgsXG4gICAgaGVpZ2h0OiBtYXhZIC0gbWluWVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0UmVjdHNCeUxpbmUocmVjdHMpIHtcbiAgY29uc3Qgc29ydGVkUmVjdHMgPSByZWN0cy5zbGljZSgpLnNvcnQoKGEsIGIpID0+IGEueSAtIGIueSk7XG4gIGNvbnN0IGdyb3VwcyA9IFtdO1xuICBsZXQgcHJldlJlY3QgPSBudWxsO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZFJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcmVjdCA9IHNvcnRlZFJlY3RzW2ldO1xuICAgIGlmICghcHJldlJlY3QgfHwgcmVjdC55IC0gcHJldlJlY3QueSA+IHByZXZSZWN0LmhlaWdodCAvIDIpIHtcbiAgICAgIGdyb3Vwcy5wdXNoKFtyZWN0XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdyb3Vwc1tncm91cHMubGVuZ3RoIC0gMV0ucHVzaChyZWN0KTtcbiAgICB9XG4gICAgcHJldlJlY3QgPSByZWN0O1xuICB9XG4gIHJldHVybiBncm91cHMubWFwKHJlY3QgPT4gcmVjdFRvQ2xpZW50UmVjdChnZXRCb3VuZGluZ1JlY3QocmVjdCkpKTtcbn1cbi8qKlxuICogUHJvdmlkZXMgaW1wcm92ZWQgcG9zaXRpb25pbmcgZm9yIGlubGluZSByZWZlcmVuY2UgZWxlbWVudHMgdGhhdCBjYW4gc3BhblxuICogb3ZlciBtdWx0aXBsZSBsaW5lcywgc3VjaCBhcyBoeXBlcmxpbmtzIG9yIHJhbmdlIHNlbGVjdGlvbnMuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaW5saW5lXG4gKi9cbmNvbnN0IGlubGluZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnaW5saW5lJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgZWxlbWVudHMsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgc3RyYXRlZ3lcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIC8vIEEgTW91c2VFdmVudCdzIGNsaWVudHtYLFl9IGNvb3JkcyBjYW4gYmUgdXAgdG8gMiBwaXhlbHMgb2ZmIGFcbiAgICAgIC8vIENsaWVudFJlY3QncyBib3VuZHMsIGRlc3BpdGUgdGhlIGV2ZW50IGxpc3RlbmVyIGJlaW5nIHRyaWdnZXJlZC4gQVxuICAgICAgLy8gcGFkZGluZyBvZiAyIHNlZW1zIHRvIGhhbmRsZSB0aGlzIGlzc3VlLlxuICAgICAgY29uc3Qge1xuICAgICAgICBwYWRkaW5nID0gMixcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IG5hdGl2ZUNsaWVudFJlY3RzID0gQXJyYXkuZnJvbSgoYXdhaXQgKHBsYXRmb3JtLmdldENsaWVudFJlY3RzID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXRDbGllbnRSZWN0cyhlbGVtZW50cy5yZWZlcmVuY2UpKSkgfHwgW10pO1xuICAgICAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRSZWN0c0J5TGluZShuYXRpdmVDbGllbnRSZWN0cyk7XG4gICAgICBjb25zdCBmYWxsYmFjayA9IHJlY3RUb0NsaWVudFJlY3QoZ2V0Qm91bmRpbmdSZWN0KG5hdGl2ZUNsaWVudFJlY3RzKSk7XG4gICAgICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgICAgIGZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIHR3byByZWN0cyBhbmQgdGhleSBhcmUgZGlzam9pbmVkLlxuICAgICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID09PSAyICYmIGNsaWVudFJlY3RzWzBdLmxlZnQgPiBjbGllbnRSZWN0c1sxXS5yaWdodCAmJiB4ICE9IG51bGwgJiYgeSAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gRmluZCB0aGUgZmlyc3QgcmVjdCBpbiB3aGljaCB0aGUgcG9pbnQgaXMgZnVsbHkgaW5zaWRlLlxuICAgICAgICAgIHJldHVybiBjbGllbnRSZWN0cy5maW5kKHJlY3QgPT4geCA+IHJlY3QubGVmdCAtIHBhZGRpbmdPYmplY3QubGVmdCAmJiB4IDwgcmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHQgJiYgeSA+IHJlY3QudG9wIC0gcGFkZGluZ09iamVjdC50b3AgJiYgeSA8IHJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20pIHx8IGZhbGxiYWNrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlcmUgYXJlIDIgb3IgbW9yZSBjb25uZWN0ZWQgcmVjdHMuXG4gICAgICAgIGlmIChjbGllbnRSZWN0cy5sZW5ndGggPj0gMikge1xuICAgICAgICAgIGlmIChnZXRTaWRlQXhpcyhwbGFjZW1lbnQpID09PSAneScpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0UmVjdCA9IGNsaWVudFJlY3RzWzBdO1xuICAgICAgICAgICAgY29uc3QgbGFzdFJlY3QgPSBjbGllbnRSZWN0c1tjbGllbnRSZWN0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGNvbnN0IGlzVG9wID0gZ2V0U2lkZShwbGFjZW1lbnQpID09PSAndG9wJztcbiAgICAgICAgICAgIGNvbnN0IHRvcCA9IGZpcnN0UmVjdC50b3A7XG4gICAgICAgICAgICBjb25zdCBib3R0b20gPSBsYXN0UmVjdC5ib3R0b207XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gaXNUb3AgPyBmaXJzdFJlY3QubGVmdCA6IGxhc3RSZWN0LmxlZnQ7XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IGlzVG9wID8gZmlyc3RSZWN0LnJpZ2h0IDogbGFzdFJlY3QucmlnaHQ7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHJpZ2h0IC0gbGVmdDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgICAgYm90dG9tLFxuICAgICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgICByaWdodCxcbiAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgeDogbGVmdCxcbiAgICAgICAgICAgICAgeTogdG9wXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpc0xlZnRTaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpID09PSAnbGVmdCc7XG4gICAgICAgICAgY29uc3QgbWF4UmlnaHQgPSBtYXgoLi4uY2xpZW50UmVjdHMubWFwKHJlY3QgPT4gcmVjdC5yaWdodCkpO1xuICAgICAgICAgIGNvbnN0IG1pbkxlZnQgPSBtaW4oLi4uY2xpZW50UmVjdHMubWFwKHJlY3QgPT4gcmVjdC5sZWZ0KSk7XG4gICAgICAgICAgY29uc3QgbWVhc3VyZVJlY3RzID0gY2xpZW50UmVjdHMuZmlsdGVyKHJlY3QgPT4gaXNMZWZ0U2lkZSA/IHJlY3QubGVmdCA9PT0gbWluTGVmdCA6IHJlY3QucmlnaHQgPT09IG1heFJpZ2h0KTtcbiAgICAgICAgICBjb25zdCB0b3AgPSBtZWFzdXJlUmVjdHNbMF0udG9wO1xuICAgICAgICAgIGNvbnN0IGJvdHRvbSA9IG1lYXN1cmVSZWN0c1ttZWFzdXJlUmVjdHMubGVuZ3RoIC0gMV0uYm90dG9tO1xuICAgICAgICAgIGNvbnN0IGxlZnQgPSBtaW5MZWZ0O1xuICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gbWF4UmlnaHQ7XG4gICAgICAgICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgICAgICAgY29uc3QgaGVpZ2h0ID0gYm90dG9tIC0gdG9wO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICBib3R0b20sXG4gICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHg6IGxlZnQsXG4gICAgICAgICAgICB5OiB0b3BcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxsYmFjaztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc2V0UmVjdHMgPSBhd2FpdCBwbGF0Zm9ybS5nZXRFbGVtZW50UmVjdHMoe1xuICAgICAgICByZWZlcmVuY2U6IHtcbiAgICAgICAgICBnZXRCb3VuZGluZ0NsaWVudFJlY3RcbiAgICAgICAgfSxcbiAgICAgICAgZmxvYXRpbmc6IGVsZW1lbnRzLmZsb2F0aW5nLFxuICAgICAgICBzdHJhdGVneVxuICAgICAgfSk7XG4gICAgICBpZiAocmVjdHMucmVmZXJlbmNlLnggIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLnggfHwgcmVjdHMucmVmZXJlbmNlLnkgIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLnkgfHwgcmVjdHMucmVmZXJlbmNlLndpZHRoICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS53aWR0aCB8fCByZWN0cy5yZWZlcmVuY2UuaGVpZ2h0ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcmVjdHM6IHJlc2V0UmVjdHNcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuLy8gRm9yIHR5cGUgYmFja3dhcmRzLWNvbXBhdGliaWxpdHksIHRoZSBgT2Zmc2V0T3B0aW9uc2AgdHlwZSB3YXMgYWxzb1xuLy8gRGVyaXZhYmxlLlxuXG5hc3luYyBmdW5jdGlvbiBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgcGxhY2VtZW50LFxuICAgIHBsYXRmb3JtLFxuICAgIGVsZW1lbnRzXG4gIH0gPSBzdGF0ZTtcbiAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgaXNWZXJ0aWNhbCA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgY29uc3QgbWFpbkF4aXNNdWx0aSA9IFsnbGVmdCcsICd0b3AnXS5pbmNsdWRlcyhzaWRlKSA/IC0xIDogMTtcbiAgY29uc3QgY3Jvc3NBeGlzTXVsdGkgPSBydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMTtcbiAgY29uc3QgcmF3VmFsdWUgPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gIGxldCB7XG4gICAgbWFpbkF4aXMsXG4gICAgY3Jvc3NBeGlzLFxuICAgIGFsaWdubWVudEF4aXNcbiAgfSA9IHR5cGVvZiByYXdWYWx1ZSA9PT0gJ251bWJlcicgPyB7XG4gICAgbWFpbkF4aXM6IHJhd1ZhbHVlLFxuICAgIGNyb3NzQXhpczogMCxcbiAgICBhbGlnbm1lbnRBeGlzOiBudWxsXG4gIH0gOiB7XG4gICAgbWFpbkF4aXM6IDAsXG4gICAgY3Jvc3NBeGlzOiAwLFxuICAgIGFsaWdubWVudEF4aXM6IG51bGwsXG4gICAgLi4ucmF3VmFsdWVcbiAgfTtcbiAgaWYgKGFsaWdubWVudCAmJiB0eXBlb2YgYWxpZ25tZW50QXhpcyA9PT0gJ251bWJlcicpIHtcbiAgICBjcm9zc0F4aXMgPSBhbGlnbm1lbnQgPT09ICdlbmQnID8gYWxpZ25tZW50QXhpcyAqIC0xIDogYWxpZ25tZW50QXhpcztcbiAgfVxuICByZXR1cm4gaXNWZXJ0aWNhbCA/IHtcbiAgICB4OiBjcm9zc0F4aXMgKiBjcm9zc0F4aXNNdWx0aSxcbiAgICB5OiBtYWluQXhpcyAqIG1haW5BeGlzTXVsdGlcbiAgfSA6IHtcbiAgICB4OiBtYWluQXhpcyAqIG1haW5BeGlzTXVsdGksXG4gICAgeTogY3Jvc3NBeGlzICogY3Jvc3NBeGlzTXVsdGlcbiAgfTtcbn1cblxuLyoqXG4gKiBNb2RpZmllcyB0aGUgcGxhY2VtZW50IGJ5IHRyYW5zbGF0aW5nIHRoZSBmbG9hdGluZyBlbGVtZW50IGFsb25nIHRoZVxuICogc3BlY2lmaWVkIGF4ZXMuXG4gKiBBIG51bWJlciAoc2hvcnRoYW5kIGZvciBgbWFpbkF4aXNgIG9yIGRpc3RhbmNlKSwgb3IgYW4gYXhlcyBjb25maWd1cmF0aW9uXG4gKiBvYmplY3QgbWF5IGJlIHBhc3NlZC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9vZmZzZXRcbiAqL1xuY29uc3Qgb2Zmc2V0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSAwO1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ29mZnNldCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRvZmZzZSwgX21pZGRsZXdhcmVEYXRhJGFycm93O1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCBkaWZmQ29vcmRzID0gYXdhaXQgY29udmVydFZhbHVlVG9Db29yZHMoc3RhdGUsIG9wdGlvbnMpO1xuXG4gICAgICAvLyBJZiB0aGUgcGxhY2VtZW50IGlzIHRoZSBzYW1lIGFuZCB0aGUgYXJyb3cgY2F1c2VkIGFuIGFsaWdubWVudCBvZmZzZXRcbiAgICAgIC8vIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBjaGFuZ2UgdGhlIHBvc2l0aW9uaW5nIGNvb3JkaW5hdGVzLlxuICAgICAgaWYgKHBsYWNlbWVudCA9PT0gKChfbWlkZGxld2FyZURhdGEkb2Zmc2UgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2UucGxhY2VtZW50KSAmJiAoX21pZGRsZXdhcmVEYXRhJGFycm93ID0gbWlkZGxld2FyZURhdGEuYXJyb3cpICE9IG51bGwgJiYgX21pZGRsZXdhcmVEYXRhJGFycm93LmFsaWdubWVudE9mZnNldCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiB4ICsgZGlmZkNvb3Jkcy54LFxuICAgICAgICB5OiB5ICsgZGlmZkNvb3Jkcy55LFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgLi4uZGlmZkNvb3JkcyxcbiAgICAgICAgICBwbGFjZW1lbnRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBzaGlmdGluZyBpdCBpbiBvcmRlciB0b1xuICoga2VlcCBpdCBpbiB2aWV3IHdoZW4gaXQgd2lsbCBvdmVyZmxvdyB0aGUgY2xpcHBpbmcgYm91bmRhcnkuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvc2hpZnRcbiAqL1xuY29uc3Qgc2hpZnQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3NoaWZ0JyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudFxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYWluQXhpczogY2hlY2tNYWluQXhpcyA9IHRydWUsXG4gICAgICAgIGNyb3NzQXhpczogY2hlY2tDcm9zc0F4aXMgPSBmYWxzZSxcbiAgICAgICAgbGltaXRlciA9IHtcbiAgICAgICAgICBmbjogX3JlZiA9PiB7XG4gICAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICB5XG4gICAgICAgICAgICB9ID0gX3JlZjtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgIHlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH07XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3QgY3Jvc3NBeGlzID0gZ2V0U2lkZUF4aXMoZ2V0U2lkZShwbGFjZW1lbnQpKTtcbiAgICAgIGNvbnN0IG1haW5BeGlzID0gZ2V0T3Bwb3NpdGVBeGlzKGNyb3NzQXhpcyk7XG4gICAgICBsZXQgbWFpbkF4aXNDb29yZCA9IGNvb3Jkc1ttYWluQXhpc107XG4gICAgICBsZXQgY3Jvc3NBeGlzQ29vcmQgPSBjb29yZHNbY3Jvc3NBeGlzXTtcbiAgICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICAgIGNvbnN0IG1pblNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gJ3RvcCcgOiAnbGVmdCc7XG4gICAgICAgIGNvbnN0IG1heFNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICAgICAgICBjb25zdCBtaW4gPSBtYWluQXhpc0Nvb3JkICsgb3ZlcmZsb3dbbWluU2lkZV07XG4gICAgICAgIGNvbnN0IG1heCA9IG1haW5BeGlzQ29vcmQgLSBvdmVyZmxvd1ttYXhTaWRlXTtcbiAgICAgICAgbWFpbkF4aXNDb29yZCA9IGNsYW1wKG1pbiwgbWFpbkF4aXNDb29yZCwgbWF4KTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGVja0Nyb3NzQXhpcykge1xuICAgICAgICBjb25zdCBtaW5TaWRlID0gY3Jvc3NBeGlzID09PSAneScgPyAndG9wJyA6ICdsZWZ0JztcbiAgICAgICAgY29uc3QgbWF4U2lkZSA9IGNyb3NzQXhpcyA9PT0gJ3knID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICAgICAgICBjb25zdCBtaW4gPSBjcm9zc0F4aXNDb29yZCArIG92ZXJmbG93W21pblNpZGVdO1xuICAgICAgICBjb25zdCBtYXggPSBjcm9zc0F4aXNDb29yZCAtIG92ZXJmbG93W21heFNpZGVdO1xuICAgICAgICBjcm9zc0F4aXNDb29yZCA9IGNsYW1wKG1pbiwgY3Jvc3NBeGlzQ29vcmQsIG1heCk7XG4gICAgICB9XG4gICAgICBjb25zdCBsaW1pdGVkQ29vcmRzID0gbGltaXRlci5mbih7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBbbWFpbkF4aXNdOiBtYWluQXhpc0Nvb3JkLFxuICAgICAgICBbY3Jvc3NBeGlzXTogY3Jvc3NBeGlzQ29vcmRcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubGltaXRlZENvb3JkcyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHg6IGxpbWl0ZWRDb29yZHMueCAtIHgsXG4gICAgICAgICAgeTogbGltaXRlZENvb3Jkcy55IC0geVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG4vKipcbiAqIEJ1aWx0LWluIGBsaW1pdGVyYCB0aGF0IHdpbGwgc3RvcCBgc2hpZnQoKWAgYXQgYSBjZXJ0YWluIHBvaW50LlxuICovXG5jb25zdCBsaW1pdFNoaWZ0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG9wdGlvbnMsXG4gICAgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICByZWN0cyxcbiAgICAgICAgbWlkZGxld2FyZURhdGFcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgb2Zmc2V0ID0gMCxcbiAgICAgICAgbWFpbkF4aXM6IGNoZWNrTWFpbkF4aXMgPSB0cnVlLFxuICAgICAgICBjcm9zc0F4aXM6IGNoZWNrQ3Jvc3NBeGlzID0gdHJ1ZVxuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNyb3NzQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBtYWluQXhpcyA9IGdldE9wcG9zaXRlQXhpcyhjcm9zc0F4aXMpO1xuICAgICAgbGV0IG1haW5BeGlzQ29vcmQgPSBjb29yZHNbbWFpbkF4aXNdO1xuICAgICAgbGV0IGNyb3NzQXhpc0Nvb3JkID0gY29vcmRzW2Nyb3NzQXhpc107XG4gICAgICBjb25zdCByYXdPZmZzZXQgPSBldmFsdWF0ZShvZmZzZXQsIHN0YXRlKTtcbiAgICAgIGNvbnN0IGNvbXB1dGVkT2Zmc2V0ID0gdHlwZW9mIHJhd09mZnNldCA9PT0gJ251bWJlcicgPyB7XG4gICAgICAgIG1haW5BeGlzOiByYXdPZmZzZXQsXG4gICAgICAgIGNyb3NzQXhpczogMFxuICAgICAgfSA6IHtcbiAgICAgICAgbWFpbkF4aXM6IDAsXG4gICAgICAgIGNyb3NzQXhpczogMCxcbiAgICAgICAgLi4ucmF3T2Zmc2V0XG4gICAgICB9O1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgY29uc3QgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICAgICAgY29uc3QgbGltaXRNaW4gPSByZWN0cy5yZWZlcmVuY2VbbWFpbkF4aXNdIC0gcmVjdHMuZmxvYXRpbmdbbGVuXSArIGNvbXB1dGVkT2Zmc2V0Lm1haW5BeGlzO1xuICAgICAgICBjb25zdCBsaW1pdE1heCA9IHJlY3RzLnJlZmVyZW5jZVttYWluQXhpc10gKyByZWN0cy5yZWZlcmVuY2VbbGVuXSAtIGNvbXB1dGVkT2Zmc2V0Lm1haW5BeGlzO1xuICAgICAgICBpZiAobWFpbkF4aXNDb29yZCA8IGxpbWl0TWluKSB7XG4gICAgICAgICAgbWFpbkF4aXNDb29yZCA9IGxpbWl0TWluO1xuICAgICAgICB9IGVsc2UgaWYgKG1haW5BeGlzQ29vcmQgPiBsaW1pdE1heCkge1xuICAgICAgICAgIG1haW5BeGlzQ29vcmQgPSBsaW1pdE1heDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkb2Zmc2UsIF9taWRkbGV3YXJlRGF0YSRvZmZzZTI7XG4gICAgICAgIGNvbnN0IGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG4gICAgICAgIGNvbnN0IGlzT3JpZ2luU2lkZSA9IFsndG9wJywgJ2xlZnQnXS5pbmNsdWRlcyhnZXRTaWRlKHBsYWNlbWVudCkpO1xuICAgICAgICBjb25zdCBsaW1pdE1pbiA9IHJlY3RzLnJlZmVyZW5jZVtjcm9zc0F4aXNdIC0gcmVjdHMuZmxvYXRpbmdbbGVuXSArIChpc09yaWdpblNpZGUgPyAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZSA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZVtjcm9zc0F4aXNdKSB8fCAwIDogMCkgKyAoaXNPcmlnaW5TaWRlID8gMCA6IGNvbXB1dGVkT2Zmc2V0LmNyb3NzQXhpcyk7XG4gICAgICAgIGNvbnN0IGxpbWl0TWF4ID0gcmVjdHMucmVmZXJlbmNlW2Nyb3NzQXhpc10gKyByZWN0cy5yZWZlcmVuY2VbbGVuXSArIChpc09yaWdpblNpZGUgPyAwIDogKChfbWlkZGxld2FyZURhdGEkb2Zmc2UyID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlMltjcm9zc0F4aXNdKSB8fCAwKSAtIChpc09yaWdpblNpZGUgPyBjb21wdXRlZE9mZnNldC5jcm9zc0F4aXMgOiAwKTtcbiAgICAgICAgaWYgKGNyb3NzQXhpc0Nvb3JkIDwgbGltaXRNaW4pIHtcbiAgICAgICAgICBjcm9zc0F4aXNDb29yZCA9IGxpbWl0TWluO1xuICAgICAgICB9IGVsc2UgaWYgKGNyb3NzQXhpc0Nvb3JkID4gbGltaXRNYXgpIHtcbiAgICAgICAgICBjcm9zc0F4aXNDb29yZCA9IGxpbWl0TWF4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbbWFpbkF4aXNdOiBtYWluQXhpc0Nvb3JkLFxuICAgICAgICBbY3Jvc3NBeGlzXTogY3Jvc3NBeGlzQ29vcmRcbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRoYXQgYWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIHNpemUgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgXHUyMDE0XG4gKiBmb3IgaW5zdGFuY2UsIHByZXZlbnQgaXQgZnJvbSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgYm91bmRhcnkgb3IgbWF0Y2ggdGhlXG4gKiB3aWR0aCBvZiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvc2l6ZVxuICovXG5jb25zdCBzaXplID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdzaXplJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBlbGVtZW50c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBhcHBseSA9ICgpID0+IHt9LFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgaXNZQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgfSA9IHJlY3RzLmZsb2F0aW5nO1xuICAgICAgbGV0IGhlaWdodFNpZGU7XG4gICAgICBsZXQgd2lkdGhTaWRlO1xuICAgICAgaWYgKHNpZGUgPT09ICd0b3AnIHx8IHNpZGUgPT09ICdib3R0b20nKSB7XG4gICAgICAgIGhlaWdodFNpZGUgPSBzaWRlO1xuICAgICAgICB3aWR0aFNpZGUgPSBhbGlnbm1lbnQgPT09ICgoYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpKSA/ICdzdGFydCcgOiAnZW5kJykgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2lkdGhTaWRlID0gc2lkZTtcbiAgICAgICAgaGVpZ2h0U2lkZSA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyAndG9wJyA6ICdib3R0b20nO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQgPSBoZWlnaHQgLSBvdmVyZmxvd1toZWlnaHRTaWRlXTtcbiAgICAgIGNvbnN0IG92ZXJmbG93QXZhaWxhYmxlV2lkdGggPSB3aWR0aCAtIG92ZXJmbG93W3dpZHRoU2lkZV07XG4gICAgICBjb25zdCBub1NoaWZ0ID0gIXN0YXRlLm1pZGRsZXdhcmVEYXRhLnNoaWZ0O1xuICAgICAgbGV0IGF2YWlsYWJsZUhlaWdodCA9IG92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0O1xuICAgICAgbGV0IGF2YWlsYWJsZVdpZHRoID0gb3ZlcmZsb3dBdmFpbGFibGVXaWR0aDtcbiAgICAgIGlmIChpc1lBeGlzKSB7XG4gICAgICAgIGNvbnN0IG1heGltdW1DbGlwcGluZ1dpZHRoID0gd2lkdGggLSBvdmVyZmxvdy5sZWZ0IC0gb3ZlcmZsb3cucmlnaHQ7XG4gICAgICAgIGF2YWlsYWJsZVdpZHRoID0gYWxpZ25tZW50IHx8IG5vU2hpZnQgPyBtaW4ob3ZlcmZsb3dBdmFpbGFibGVXaWR0aCwgbWF4aW11bUNsaXBwaW5nV2lkdGgpIDogbWF4aW11bUNsaXBwaW5nV2lkdGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQgPSBoZWlnaHQgLSBvdmVyZmxvdy50b3AgLSBvdmVyZmxvdy5ib3R0b207XG4gICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IGFsaWdubWVudCB8fCBub1NoaWZ0ID8gbWluKG92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0LCBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQpIDogbWF4aW11bUNsaXBwaW5nSGVpZ2h0O1xuICAgICAgfVxuICAgICAgaWYgKG5vU2hpZnQgJiYgIWFsaWdubWVudCkge1xuICAgICAgICBjb25zdCB4TWluID0gbWF4KG92ZXJmbG93LmxlZnQsIDApO1xuICAgICAgICBjb25zdCB4TWF4ID0gbWF4KG92ZXJmbG93LnJpZ2h0LCAwKTtcbiAgICAgICAgY29uc3QgeU1pbiA9IG1heChvdmVyZmxvdy50b3AsIDApO1xuICAgICAgICBjb25zdCB5TWF4ID0gbWF4KG92ZXJmbG93LmJvdHRvbSwgMCk7XG4gICAgICAgIGlmIChpc1lBeGlzKSB7XG4gICAgICAgICAgYXZhaWxhYmxlV2lkdGggPSB3aWR0aCAtIDIgKiAoeE1pbiAhPT0gMCB8fCB4TWF4ICE9PSAwID8geE1pbiArIHhNYXggOiBtYXgob3ZlcmZsb3cubGVmdCwgb3ZlcmZsb3cucmlnaHQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBoZWlnaHQgLSAyICogKHlNaW4gIT09IDAgfHwgeU1heCAhPT0gMCA/IHlNaW4gKyB5TWF4IDogbWF4KG92ZXJmbG93LnRvcCwgb3ZlcmZsb3cuYm90dG9tKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IGFwcGx5KHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGF2YWlsYWJsZVdpZHRoLFxuICAgICAgICBhdmFpbGFibGVIZWlnaHRcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbmV4dERpbWVuc2lvbnMgPSBhd2FpdCBwbGF0Zm9ybS5nZXREaW1lbnNpb25zKGVsZW1lbnRzLmZsb2F0aW5nKTtcbiAgICAgIGlmICh3aWR0aCAhPT0gbmV4dERpbWVuc2lvbnMud2lkdGggfHwgaGVpZ2h0ICE9PSBuZXh0RGltZW5zaW9ucy5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcmVjdHM6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0IHsgYXJyb3csIGF1dG9QbGFjZW1lbnQsIGNvbXB1dGVQb3NpdGlvbiwgZGV0ZWN0T3ZlcmZsb3csIGZsaXAsIGhpZGUsIGlubGluZSwgbGltaXRTaGlmdCwgb2Zmc2V0LCBzaGlmdCwgc2l6ZSB9O1xuIiwgImZ1bmN0aW9uIGdldE5vZGVOYW1lKG5vZGUpIHtcbiAgaWYgKGlzTm9kZShub2RlKSkge1xuICAgIHJldHVybiAobm9kZS5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgfVxuICAvLyBNb2NrZWQgbm9kZXMgaW4gdGVzdGluZyBlbnZpcm9ubWVudHMgbWF5IG5vdCBiZSBpbnN0YW5jZXMgb2YgTm9kZS4gQnlcbiAgLy8gcmV0dXJuaW5nIGAjZG9jdW1lbnRgIGFuIGluZmluaXRlIGxvb3Agd29uJ3Qgb2NjdXIuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjMxN1xuICByZXR1cm4gJyNkb2N1bWVudCc7XG59XG5mdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICB2YXIgX25vZGUkb3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIChub2RlID09IG51bGwgfHwgKF9ub2RlJG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSB8fCB3aW5kb3c7XG59XG5mdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQobm9kZSkge1xuICB2YXIgX3JlZjtcbiAgcmV0dXJuIChfcmVmID0gKGlzTm9kZShub2RlKSA/IG5vZGUub3duZXJEb2N1bWVudCA6IG5vZGUuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9yZWYuZG9jdW1lbnRFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNOb2RlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIE5vZGUgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLk5vZGU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRWxlbWVudCB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkhUTUxFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNTaGFkb3dSb290KHZhbHVlKSB7XG4gIC8vIEJyb3dzZXJzIHdpdGhvdXQgYFNoYWRvd1Jvb3RgIHN1cHBvcnQuXG4gIGlmICh0eXBlb2YgU2hhZG93Um9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgU2hhZG93Um9vdCB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuU2hhZG93Um9vdDtcbn1cbmZ1bmN0aW9uIGlzT3ZlcmZsb3dFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3Qge1xuICAgIG92ZXJmbG93LFxuICAgIG92ZXJmbG93WCxcbiAgICBvdmVyZmxvd1ksXG4gICAgZGlzcGxheVxuICB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgcmV0dXJuIC9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbnxjbGlwLy50ZXN0KG92ZXJmbG93ICsgb3ZlcmZsb3dZICsgb3ZlcmZsb3dYKSAmJiAhWydpbmxpbmUnLCAnY29udGVudHMnXS5pbmNsdWRlcyhkaXNwbGF5KTtcbn1cbmZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIFsndGFibGUnLCAndGQnLCAndGgnXS5pbmNsdWRlcyhnZXROb2RlTmFtZShlbGVtZW50KSk7XG59XG5mdW5jdGlvbiBpc0NvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIGNvbnN0IHdlYmtpdCA9IGlzV2ViS2l0KCk7XG4gIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgcmV0dXJuIGNzcy50cmFuc2Zvcm0gIT09ICdub25lJyB8fCBjc3MucGVyc3BlY3RpdmUgIT09ICdub25lJyB8fCAoY3NzLmNvbnRhaW5lclR5cGUgPyBjc3MuY29udGFpbmVyVHlwZSAhPT0gJ25vcm1hbCcgOiBmYWxzZSkgfHwgIXdlYmtpdCAmJiAoY3NzLmJhY2tkcm9wRmlsdGVyID8gY3NzLmJhY2tkcm9wRmlsdGVyICE9PSAnbm9uZScgOiBmYWxzZSkgfHwgIXdlYmtpdCAmJiAoY3NzLmZpbHRlciA/IGNzcy5maWx0ZXIgIT09ICdub25lJyA6IGZhbHNlKSB8fCBbJ3RyYW5zZm9ybScsICdwZXJzcGVjdGl2ZScsICdmaWx0ZXInXS5zb21lKHZhbHVlID0+IChjc3Mud2lsbENoYW5nZSB8fCAnJykuaW5jbHVkZXModmFsdWUpKSB8fCBbJ3BhaW50JywgJ2xheW91dCcsICdzdHJpY3QnLCAnY29udGVudCddLnNvbWUodmFsdWUgPT4gKGNzcy5jb250YWluIHx8ICcnKS5pbmNsdWRlcyh2YWx1ZSkpO1xufVxuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgbGV0IGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmICFpc0xhc3RUcmF2ZXJzYWJsZU5vZGUoY3VycmVudE5vZGUpKSB7XG4gICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrKGN1cnJlbnROb2RlKSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoY3VycmVudE5vZGUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzV2ViS2l0KCkge1xuICBpZiAodHlwZW9mIENTUyA9PT0gJ3VuZGVmaW5lZCcgfHwgIUNTUy5zdXBwb3J0cykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gQ1NTLnN1cHBvcnRzKCctd2Via2l0LWJhY2tkcm9wLWZpbHRlcicsICdub25lJyk7XG59XG5mdW5jdGlvbiBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUobm9kZSkge1xuICByZXR1cm4gWydodG1sJywgJ2JvZHknLCAnI2RvY3VtZW50J10uaW5jbHVkZXMoZ2V0Tm9kZU5hbWUobm9kZSkpO1xufVxuZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn1cbmZ1bmN0aW9uIGdldE5vZGVTY3JvbGwoZWxlbWVudCkge1xuICBpZiAoaXNFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5wYWdlWE9mZnNldCxcbiAgICBzY3JvbGxUb3A6IGVsZW1lbnQucGFnZVlPZmZzZXRcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhcmVudE5vZGUobm9kZSkge1xuICBpZiAoZ2V0Tm9kZU5hbWUobm9kZSkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBub2RlO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9XG4gIC8vIFN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlLlxuICBub2RlLmFzc2lnbmVkU2xvdCB8fFxuICAvLyBET00gRWxlbWVudCBkZXRlY3RlZC5cbiAgbm9kZS5wYXJlbnROb2RlIHx8XG4gIC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWQuXG4gIGlzU2hhZG93Um9vdChub2RlKSAmJiBub2RlLmhvc3QgfHxcbiAgLy8gRmFsbGJhY2suXG4gIGdldERvY3VtZW50RWxlbWVudChub2RlKTtcbiAgcmV0dXJuIGlzU2hhZG93Um9vdChyZXN1bHQpID8gcmVzdWx0Lmhvc3QgOiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3Rvcihub2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKG5vZGUpO1xuICBpZiAoaXNMYXN0VHJhdmVyc2FibGVOb2RlKHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudCA/IG5vZGUub3duZXJEb2N1bWVudC5ib2R5IDogbm9kZS5ib2R5O1xuICB9XG4gIGlmIChpc0hUTUxFbGVtZW50KHBhcmVudE5vZGUpICYmIGlzT3ZlcmZsb3dFbGVtZW50KHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIHBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKHBhcmVudE5vZGUpO1xufVxuZnVuY3Rpb24gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMobm9kZSwgbGlzdCwgdHJhdmVyc2VJZnJhbWVzKSB7XG4gIHZhciBfbm9kZSRvd25lckRvY3VtZW50MjtcbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuICBpZiAodHJhdmVyc2VJZnJhbWVzID09PSB2b2lkIDApIHtcbiAgICB0cmF2ZXJzZUlmcmFtZXMgPSB0cnVlO1xuICB9XG4gIGNvbnN0IHNjcm9sbGFibGVBbmNlc3RvciA9IGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKG5vZGUpO1xuICBjb25zdCBpc0JvZHkgPSBzY3JvbGxhYmxlQW5jZXN0b3IgPT09ICgoX25vZGUkb3duZXJEb2N1bWVudDIgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50Mi5ib2R5KTtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KHNjcm9sbGFibGVBbmNlc3Rvcik7XG4gIGlmIChpc0JvZHkpIHtcbiAgICByZXR1cm4gbGlzdC5jb25jYXQod2luLCB3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzT3ZlcmZsb3dFbGVtZW50KHNjcm9sbGFibGVBbmNlc3RvcikgPyBzY3JvbGxhYmxlQW5jZXN0b3IgOiBbXSwgd2luLmZyYW1lRWxlbWVudCAmJiB0cmF2ZXJzZUlmcmFtZXMgPyBnZXRPdmVyZmxvd0FuY2VzdG9ycyh3aW4uZnJhbWVFbGVtZW50KSA6IFtdKTtcbiAgfVxuICByZXR1cm4gbGlzdC5jb25jYXQoc2Nyb2xsYWJsZUFuY2VzdG9yLCBnZXRPdmVyZmxvd0FuY2VzdG9ycyhzY3JvbGxhYmxlQW5jZXN0b3IsIFtdLCB0cmF2ZXJzZUlmcmFtZXMpKTtcbn1cblxuZXhwb3J0IHsgZ2V0Q29tcHV0ZWRTdHlsZSwgZ2V0Q29udGFpbmluZ0Jsb2NrLCBnZXREb2N1bWVudEVsZW1lbnQsIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yLCBnZXROb2RlTmFtZSwgZ2V0Tm9kZVNjcm9sbCwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMsIGdldFBhcmVudE5vZGUsIGdldFdpbmRvdywgaXNDb250YWluaW5nQmxvY2ssIGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNMYXN0VHJhdmVyc2FibGVOb2RlLCBpc05vZGUsIGlzT3ZlcmZsb3dFbGVtZW50LCBpc1NoYWRvd1Jvb3QsIGlzVGFibGVFbGVtZW50LCBpc1dlYktpdCB9O1xuIiwgImltcG9ydCB7IHJlY3RUb0NsaWVudFJlY3QsIGF1dG9QbGFjZW1lbnQgYXMgYXV0b1BsYWNlbWVudCQxLCBzaGlmdCBhcyBzaGlmdCQxLCBmbGlwIGFzIGZsaXAkMSwgc2l6ZSBhcyBzaXplJDEsIGhpZGUgYXMgaGlkZSQxLCBhcnJvdyBhcyBhcnJvdyQxLCBpbmxpbmUgYXMgaW5saW5lJDEsIGxpbWl0U2hpZnQgYXMgbGltaXRTaGlmdCQxLCBjb21wdXRlUG9zaXRpb24gYXMgY29tcHV0ZVBvc2l0aW9uJDEgfSBmcm9tICdAZmxvYXRpbmctdWkvY29yZSc7XG5leHBvcnQgeyBkZXRlY3RPdmVyZmxvdywgb2Zmc2V0IH0gZnJvbSAnQGZsb2F0aW5nLXVpL2NvcmUnO1xuaW1wb3J0IHsgcm91bmQsIGNyZWF0ZUNvb3JkcywgbWF4LCBtaW4sIGZsb29yIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcbmltcG9ydCB7IGdldENvbXB1dGVkU3R5bGUsIGlzSFRNTEVsZW1lbnQsIGlzRWxlbWVudCwgZ2V0V2luZG93LCBpc1dlYktpdCwgZ2V0RG9jdW1lbnRFbGVtZW50LCBnZXROb2RlTmFtZSwgaXNPdmVyZmxvd0VsZW1lbnQsIGdldE5vZGVTY3JvbGwsIGdldE92ZXJmbG93QW5jZXN0b3JzLCBnZXRQYXJlbnROb2RlLCBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUsIGlzQ29udGFpbmluZ0Jsb2NrLCBpc1RhYmxlRWxlbWVudCwgZ2V0Q29udGFpbmluZ0Jsb2NrIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzL2RvbSc7XG5leHBvcnQgeyBnZXRPdmVyZmxvd0FuY2VzdG9ycyB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuXG5mdW5jdGlvbiBnZXRDc3NEaW1lbnNpb25zKGVsZW1lbnQpIHtcbiAgY29uc3QgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgLy8gSW4gdGVzdGluZyBlbnZpcm9ubWVudHMsIHRoZSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzIGFyZSBlbXB0eVxuICAvLyBzdHJpbmdzIGZvciBTVkcgZWxlbWVudHMsIHJldHVybmluZyBOYU4uIEZhbGxiYWNrIHRvIGAwYCBpbiB0aGlzIGNhc2UuXG4gIGxldCB3aWR0aCA9IHBhcnNlRmxvYXQoY3NzLndpZHRoKSB8fCAwO1xuICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChjc3MuaGVpZ2h0KSB8fCAwO1xuICBjb25zdCBoYXNPZmZzZXQgPSBpc0hUTUxFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBvZmZzZXRXaWR0aCA9IGhhc09mZnNldCA/IGVsZW1lbnQub2Zmc2V0V2lkdGggOiB3aWR0aDtcbiAgY29uc3Qgb2Zmc2V0SGVpZ2h0ID0gaGFzT2Zmc2V0ID8gZWxlbWVudC5vZmZzZXRIZWlnaHQgOiBoZWlnaHQ7XG4gIGNvbnN0IHNob3VsZEZhbGxiYWNrID0gcm91bmQod2lkdGgpICE9PSBvZmZzZXRXaWR0aCB8fCByb3VuZChoZWlnaHQpICE9PSBvZmZzZXRIZWlnaHQ7XG4gIGlmIChzaG91bGRGYWxsYmFjaykge1xuICAgIHdpZHRoID0gb2Zmc2V0V2lkdGg7XG4gICAgaGVpZ2h0ID0gb2Zmc2V0SGVpZ2h0O1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICQ6IHNob3VsZEZhbGxiYWNrXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVud3JhcEVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gIWlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgOiBlbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRTY2FsZShlbGVtZW50KSB7XG4gIGNvbnN0IGRvbUVsZW1lbnQgPSB1bndyYXBFbGVtZW50KGVsZW1lbnQpO1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZG9tRWxlbWVudCkpIHtcbiAgICByZXR1cm4gY3JlYXRlQ29vcmRzKDEpO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBkb21FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZG9tRWxlbWVudCk7XG4gIGxldCB4ID0gKCQgPyByb3VuZChyZWN0LndpZHRoKSA6IHJlY3Qud2lkdGgpIC8gd2lkdGg7XG4gIGxldCB5ID0gKCQgPyByb3VuZChyZWN0LmhlaWdodCkgOiByZWN0LmhlaWdodCkgLyBoZWlnaHQ7XG5cbiAgLy8gMCwgTmFOLCBvciBJbmZpbml0eSBzaG91bGQgYWx3YXlzIGZhbGxiYWNrIHRvIDEuXG5cbiAgaWYgKCF4IHx8ICFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICB4ID0gMTtcbiAgfVxuICBpZiAoIXkgfHwgIU51bWJlci5pc0Zpbml0ZSh5KSkge1xuICAgIHkgPSAxO1xuICB9XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmNvbnN0IG5vT2Zmc2V0cyA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb29yZHMoMCk7XG5mdW5jdGlvbiBnZXRWaXN1YWxPZmZzZXRzKGVsZW1lbnQpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBpZiAoIWlzV2ViS2l0KCkgfHwgIXdpbi52aXN1YWxWaWV3cG9ydCkge1xuICAgIHJldHVybiBub09mZnNldHM7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCxcbiAgICB5OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wXG4gIH07XG59XG5mdW5jdGlvbiBzaG91bGRBZGRWaXN1YWxPZmZzZXRzKGVsZW1lbnQsIGlzRml4ZWQsIGZsb2F0aW5nT2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cbiAgaWYgKCFmbG9hdGluZ09mZnNldFBhcmVudCB8fCBpc0ZpeGVkICYmIGZsb2F0aW5nT2Zmc2V0UGFyZW50ICE9PSBnZXRXaW5kb3coZWxlbWVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzRml4ZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSwgb2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBkb21FbGVtZW50ID0gdW53cmFwRWxlbWVudChlbGVtZW50KTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBpZiAoaW5jbHVkZVNjYWxlKSB7XG4gICAgaWYgKG9mZnNldFBhcmVudCkge1xuICAgICAgaWYgKGlzRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHNjYWxlID0gZ2V0U2NhbGUob2Zmc2V0UGFyZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2NhbGUgPSBnZXRTY2FsZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IHNob3VsZEFkZFZpc3VhbE9mZnNldHMoZG9tRWxlbWVudCwgaXNGaXhlZFN0cmF0ZWd5LCBvZmZzZXRQYXJlbnQpID8gZ2V0VmlzdWFsT2Zmc2V0cyhkb21FbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgbGV0IHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgdmlzdWFsT2Zmc2V0cy54KSAvIHNjYWxlLng7XG4gIGxldCB5ID0gKGNsaWVudFJlY3QudG9wICsgdmlzdWFsT2Zmc2V0cy55KSAvIHNjYWxlLnk7XG4gIGxldCB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZS54O1xuICBsZXQgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZS55O1xuICBpZiAoZG9tRWxlbWVudCkge1xuICAgIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhkb21FbGVtZW50KTtcbiAgICBjb25zdCBvZmZzZXRXaW4gPSBvZmZzZXRQYXJlbnQgJiYgaXNFbGVtZW50KG9mZnNldFBhcmVudCkgPyBnZXRXaW5kb3cob2Zmc2V0UGFyZW50KSA6IG9mZnNldFBhcmVudDtcbiAgICBsZXQgY3VycmVudFdpbiA9IHdpbjtcbiAgICBsZXQgY3VycmVudElGcmFtZSA9IGN1cnJlbnRXaW4uZnJhbWVFbGVtZW50O1xuICAgIHdoaWxlIChjdXJyZW50SUZyYW1lICYmIG9mZnNldFBhcmVudCAmJiBvZmZzZXRXaW4gIT09IGN1cnJlbnRXaW4pIHtcbiAgICAgIGNvbnN0IGlmcmFtZVNjYWxlID0gZ2V0U2NhbGUoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBpZnJhbWVSZWN0ID0gY3VycmVudElGcmFtZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBsZWZ0ID0gaWZyYW1lUmVjdC5sZWZ0ICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50TGVmdCArIHBhcnNlRmxvYXQoY3NzLnBhZGRpbmdMZWZ0KSkgKiBpZnJhbWVTY2FsZS54O1xuICAgICAgY29uc3QgdG9wID0gaWZyYW1lUmVjdC50b3AgKyAoY3VycmVudElGcmFtZS5jbGllbnRUb3AgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nVG9wKSkgKiBpZnJhbWVTY2FsZS55O1xuICAgICAgeCAqPSBpZnJhbWVTY2FsZS54O1xuICAgICAgeSAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgd2lkdGggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIGhlaWdodCAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgeCArPSBsZWZ0O1xuICAgICAgeSArPSB0b3A7XG4gICAgICBjdXJyZW50V2luID0gZ2V0V2luZG93KGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY3VycmVudElGcmFtZSA9IGN1cnJlbnRXaW4uZnJhbWVFbGVtZW50O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdFRvQ2xpZW50UmVjdCh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9KTtcbn1cblxuY29uc3QgdG9wTGF5ZXJTZWxlY3RvcnMgPSBbJzpwb3BvdmVyLW9wZW4nLCAnOm1vZGFsJ107XG5mdW5jdGlvbiBpc1RvcExheWVyKGZsb2F0aW5nKSB7XG4gIHJldHVybiB0b3BMYXllclNlbGVjdG9ycy5zb21lKHNlbGVjdG9yID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZsb2F0aW5nLm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdChfcmVmKSB7XG4gIGxldCB7XG4gICAgZWxlbWVudHMsXG4gICAgcmVjdCxcbiAgICBvZmZzZXRQYXJlbnQsXG4gICAgc3RyYXRlZ3lcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGlzRml4ZWQgPSBzdHJhdGVneSA9PT0gJ2ZpeGVkJztcbiAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IHRvcExheWVyID0gZWxlbWVudHMgPyBpc1RvcExheWVyKGVsZW1lbnRzLmZsb2F0aW5nKSA6IGZhbHNlO1xuICBpZiAob2Zmc2V0UGFyZW50ID09PSBkb2N1bWVudEVsZW1lbnQgfHwgdG9wTGF5ZXIgJiYgaXNGaXhlZCkge1xuICAgIHJldHVybiByZWN0O1xuICB9XG4gIGxldCBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuICBjb25zdCBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgaXNPdmVyZmxvd0VsZW1lbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBjb25zdCBvZmZzZXRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCk7XG4gICAgICBzY2FsZSA9IGdldFNjYWxlKG9mZnNldFBhcmVudCk7XG4gICAgICBvZmZzZXRzLnggPSBvZmZzZXRSZWN0LnggKyBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSA9IG9mZnNldFJlY3QueSArIG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHJlY3Qud2lkdGggKiBzY2FsZS54LFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHQgKiBzY2FsZS55LFxuICAgIHg6IHJlY3QueCAqIHNjYWxlLnggLSBzY3JvbGwuc2Nyb2xsTGVmdCAqIHNjYWxlLnggKyBvZmZzZXRzLngsXG4gICAgeTogcmVjdC55ICogc2NhbGUueSAtIHNjcm9sbC5zY3JvbGxUb3AgKiBzY2FsZS55ICsgb2Zmc2V0cy55XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oZWxlbWVudC5nZXRDbGllbnRSZWN0cygpKTtcbn1cblxuZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSB7XG4gIC8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbiAgLy8gaW5jb3JyZWN0IGZvciBSVEwuXG4gIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgZ2V0Tm9kZVNjcm9sbChlbGVtZW50KS5zY3JvbGxMZWZ0O1xufVxuXG4vLyBHZXRzIHRoZSBlbnRpcmUgc2l6ZSBvZiB0aGUgc2Nyb2xsYWJsZSBkb2N1bWVudCBhcmVhLCBldmVuIGV4dGVuZGluZyBvdXRzaWRlXG4vLyBvZiB0aGUgYDxodG1sPmAgYW5kIGA8Ym9keT5gIHJlY3QgYm91bmRzIGlmIGhvcml6b250YWxseSBzY3JvbGxhYmxlLlxuZnVuY3Rpb24gZ2V0RG9jdW1lbnRSZWN0KGVsZW1lbnQpIHtcbiAgY29uc3QgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgY29uc3Qgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChlbGVtZW50KTtcbiAgY29uc3QgYm9keSA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5ib2R5O1xuICBjb25zdCB3aWR0aCA9IG1heChodG1sLnNjcm9sbFdpZHRoLCBodG1sLmNsaWVudFdpZHRoLCBib2R5LnNjcm9sbFdpZHRoLCBib2R5LmNsaWVudFdpZHRoKTtcbiAgY29uc3QgaGVpZ2h0ID0gbWF4KGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLmNsaWVudEhlaWdodCwgYm9keS5zY3JvbGxIZWlnaHQsIGJvZHkuY2xpZW50SGVpZ2h0KTtcbiAgbGV0IHggPSAtc2Nyb2xsLnNjcm9sbExlZnQgKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpO1xuICBjb25zdCB5ID0gLXNjcm9sbC5zY3JvbGxUb3A7XG4gIGlmIChnZXRDb21wdXRlZFN0eWxlKGJvZHkpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5LmNsaWVudFdpZHRoKSAtIHdpZHRoO1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBjb25zdCBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCB2aXN1YWxWaWV3cG9ydCA9IHdpbi52aXN1YWxWaWV3cG9ydDtcbiAgbGV0IHdpZHRoID0gaHRtbC5jbGllbnRXaWR0aDtcbiAgbGV0IGhlaWdodCA9IGh0bWwuY2xpZW50SGVpZ2h0O1xuICBsZXQgeCA9IDA7XG4gIGxldCB5ID0gMDtcbiAgaWYgKHZpc3VhbFZpZXdwb3J0KSB7XG4gICAgd2lkdGggPSB2aXN1YWxWaWV3cG9ydC53aWR0aDtcbiAgICBoZWlnaHQgPSB2aXN1YWxWaWV3cG9ydC5oZWlnaHQ7XG4gICAgY29uc3QgdmlzdWFsVmlld3BvcnRCYXNlZCA9IGlzV2ViS2l0KCk7XG4gICAgaWYgKCF2aXN1YWxWaWV3cG9ydEJhc2VkIHx8IHZpc3VhbFZpZXdwb3J0QmFzZWQgJiYgc3RyYXRlZ3kgPT09ICdmaXhlZCcpIHtcbiAgICAgIHggPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0O1xuICAgICAgeSA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbi8vIFJldHVybnMgdGhlIGlubmVyIGNsaWVudCByZWN0LCBzdWJ0cmFjdGluZyBzY3JvbGxiYXJzIGlmIHByZXNlbnQuXG5mdW5jdGlvbiBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICBjb25zdCBjbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHRydWUsIHN0cmF0ZWd5ID09PSAnZml4ZWQnKTtcbiAgY29uc3QgdG9wID0gY2xpZW50UmVjdC50b3AgKyBlbGVtZW50LmNsaWVudFRvcDtcbiAgY29uc3QgbGVmdCA9IGNsaWVudFJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50TGVmdDtcbiAgY29uc3Qgc2NhbGUgPSBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0U2NhbGUoZWxlbWVudCkgOiBjcmVhdGVDb29yZHMoMSk7XG4gIGNvbnN0IHdpZHRoID0gZWxlbWVudC5jbGllbnRXaWR0aCAqIHNjYWxlLng7XG4gIGNvbnN0IGhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0ICogc2NhbGUueTtcbiAgY29uc3QgeCA9IGxlZnQgKiBzY2FsZS54O1xuICBjb25zdCB5ID0gdG9wICogc2NhbGUueTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpIHtcbiAgbGV0IHJlY3Q7XG4gIGlmIChjbGlwcGluZ0FuY2VzdG9yID09PSAndmlld3BvcnQnKSB7XG4gICAgcmVjdCA9IGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSk7XG4gIH0gZWxzZSBpZiAoY2xpcHBpbmdBbmNlc3RvciA9PT0gJ2RvY3VtZW50Jykge1xuICAgIHJlY3QgPSBnZXREb2N1bWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKTtcbiAgfSBlbHNlIGlmIChpc0VsZW1lbnQoY2xpcHBpbmdBbmNlc3RvcikpIHtcbiAgICByZWN0ID0gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHZpc3VhbE9mZnNldHMgPSBnZXRWaXN1YWxPZmZzZXRzKGVsZW1lbnQpO1xuICAgIHJlY3QgPSB7XG4gICAgICAuLi5jbGlwcGluZ0FuY2VzdG9yLFxuICAgICAgeDogY2xpcHBpbmdBbmNlc3Rvci54IC0gdmlzdWFsT2Zmc2V0cy54LFxuICAgICAgeTogY2xpcHBpbmdBbmNlc3Rvci55IC0gdmlzdWFsT2Zmc2V0cy55XG4gICAgfTtcbiAgfVxuICByZXR1cm4gcmVjdFRvQ2xpZW50UmVjdChyZWN0KTtcbn1cbmZ1bmN0aW9uIGhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvcihlbGVtZW50LCBzdG9wTm9kZSkge1xuICBjb25zdCBwYXJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcbiAgaWYgKHBhcmVudE5vZGUgPT09IHN0b3BOb2RlIHx8ICFpc0VsZW1lbnQocGFyZW50Tm9kZSkgfHwgaXNMYXN0VHJhdmVyc2FibGVOb2RlKHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKHBhcmVudE5vZGUpLnBvc2l0aW9uID09PSAnZml4ZWQnIHx8IGhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvcihwYXJlbnROb2RlLCBzdG9wTm9kZSk7XG59XG5cbi8vIEEgXCJjbGlwcGluZyBhbmNlc3RvclwiIGlzIGFuIGBvdmVyZmxvd2AgZWxlbWVudCB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgY2hpbGQgZWxlbWVudHMuIFRoaXMgcmV0dXJucyBhbGwgY2xpcHBpbmcgYW5jZXN0b3JzXG4vLyBvZiB0aGUgZ2l2ZW4gZWxlbWVudCB1cCB0aGUgdHJlZS5cbmZ1bmN0aW9uIGdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9ycyhlbGVtZW50LCBjYWNoZSkge1xuICBjb25zdCBjYWNoZWRSZXN1bHQgPSBjYWNoZS5nZXQoZWxlbWVudCk7XG4gIGlmIChjYWNoZWRSZXN1bHQpIHtcbiAgICByZXR1cm4gY2FjaGVkUmVzdWx0O1xuICB9XG4gIGxldCByZXN1bHQgPSBnZXRPdmVyZmxvd0FuY2VzdG9ycyhlbGVtZW50LCBbXSwgZmFsc2UpLmZpbHRlcihlbCA9PiBpc0VsZW1lbnQoZWwpICYmIGdldE5vZGVOYW1lKGVsKSAhPT0gJ2JvZHknKTtcbiAgbGV0IGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgY29uc3QgZWxlbWVudElzRml4ZWQgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnO1xuICBsZXQgY3VycmVudE5vZGUgPSBlbGVtZW50SXNGaXhlZCA/IGdldFBhcmVudE5vZGUoZWxlbWVudCkgOiBlbGVtZW50O1xuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG4gIHdoaWxlIChpc0VsZW1lbnQoY3VycmVudE5vZGUpICYmICFpc0xhc3RUcmF2ZXJzYWJsZU5vZGUoY3VycmVudE5vZGUpKSB7XG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudE5vZGUpO1xuICAgIGNvbnN0IGN1cnJlbnROb2RlSXNDb250YWluaW5nID0gaXNDb250YWluaW5nQmxvY2soY3VycmVudE5vZGUpO1xuICAgIGlmICghY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgY29tcHV0ZWRTdHlsZS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgICAgY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgPSBudWxsO1xuICAgIH1cbiAgICBjb25zdCBzaG91bGREcm9wQ3VycmVudE5vZGUgPSBlbGVtZW50SXNGaXhlZCA/ICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiAhY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgOiAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgY29tcHV0ZWRTdHlsZS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycgJiYgISFjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSAmJiBbJ2Fic29sdXRlJywgJ2ZpeGVkJ10uaW5jbHVkZXMoY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUucG9zaXRpb24pIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKGVsZW1lbnQsIGN1cnJlbnROb2RlKTtcbiAgICBpZiAoc2hvdWxkRHJvcEN1cnJlbnROb2RlKSB7XG4gICAgICAvLyBEcm9wIG5vbi1jb250YWluaW5nIGJsb2Nrcy5cbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoYW5jZXN0b3IgPT4gYW5jZXN0b3IgIT09IGN1cnJlbnROb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVjb3JkIGxhc3QgY29udGFpbmluZyBibG9jayBmb3IgbmV4dCBpdGVyYXRpb24uXG4gICAgICBjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA9IGNvbXB1dGVkU3R5bGU7XG4gICAgfVxuICAgIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShjdXJyZW50Tm9kZSk7XG4gIH1cbiAgY2FjaGUuc2V0KGVsZW1lbnQsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIEdldHMgdGhlIG1heGltdW0gYXJlYSB0aGF0IHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gZHVlIHRvIGFueSBudW1iZXIgb2Zcbi8vIGNsaXBwaW5nIGFuY2VzdG9ycy5cbmZ1bmN0aW9uIGdldENsaXBwaW5nUmVjdChfcmVmKSB7XG4gIGxldCB7XG4gICAgZWxlbWVudCxcbiAgICBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnksXG4gICAgc3RyYXRlZ3lcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGVsZW1lbnRDbGlwcGluZ0FuY2VzdG9ycyA9IGJvdW5kYXJ5ID09PSAnY2xpcHBpbmdBbmNlc3RvcnMnID8gZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzKGVsZW1lbnQsIHRoaXMuX2MpIDogW10uY29uY2F0KGJvdW5kYXJ5KTtcbiAgY29uc3QgY2xpcHBpbmdBbmNlc3RvcnMgPSBbLi4uZWxlbWVudENsaXBwaW5nQW5jZXN0b3JzLCByb290Qm91bmRhcnldO1xuICBjb25zdCBmaXJzdENsaXBwaW5nQW5jZXN0b3IgPSBjbGlwcGluZ0FuY2VzdG9yc1swXTtcbiAgY29uc3QgY2xpcHBpbmdSZWN0ID0gY2xpcHBpbmdBbmNlc3RvcnMucmVkdWNlKChhY2NSZWN0LCBjbGlwcGluZ0FuY2VzdG9yKSA9PiB7XG4gICAgY29uc3QgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSk7XG4gICAgYWNjUmVjdC50b3AgPSBtYXgocmVjdC50b3AsIGFjY1JlY3QudG9wKTtcbiAgICBhY2NSZWN0LnJpZ2h0ID0gbWluKHJlY3QucmlnaHQsIGFjY1JlY3QucmlnaHQpO1xuICAgIGFjY1JlY3QuYm90dG9tID0gbWluKHJlY3QuYm90dG9tLCBhY2NSZWN0LmJvdHRvbSk7XG4gICAgYWNjUmVjdC5sZWZ0ID0gbWF4KHJlY3QubGVmdCwgYWNjUmVjdC5sZWZ0KTtcbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGZpcnN0Q2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpKTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogY2xpcHBpbmdSZWN0LnJpZ2h0IC0gY2xpcHBpbmdSZWN0LmxlZnQsXG4gICAgaGVpZ2h0OiBjbGlwcGluZ1JlY3QuYm90dG9tIC0gY2xpcHBpbmdSZWN0LnRvcCxcbiAgICB4OiBjbGlwcGluZ1JlY3QubGVmdCxcbiAgICB5OiBjbGlwcGluZ1JlY3QudG9wXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldERpbWVuc2lvbnMoZWxlbWVudCkge1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH0gPSBnZXRDc3NEaW1lbnNpb25zKGVsZW1lbnQpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRSZWN0UmVsYXRpdmVUb09mZnNldFBhcmVudChlbGVtZW50LCBvZmZzZXRQYXJlbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgY29uc3QgaXNGaXhlZCA9IHN0cmF0ZWd5ID09PSAnZml4ZWQnO1xuICBjb25zdCByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHRydWUsIGlzRml4ZWQsIG9mZnNldFBhcmVudCk7XG4gIGxldCBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgY29uc3Qgb2Zmc2V0cyA9IGNyZWF0ZUNvb3JkcygwKTtcbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgaXNPdmVyZmxvd0VsZW1lbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IG9mZnNldFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlLCBpc0ZpeGVkLCBvZmZzZXRQYXJlbnQpO1xuICAgICAgb2Zmc2V0cy54ID0gb2Zmc2V0UmVjdC54ICsgb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgPSBvZmZzZXRSZWN0LnkgKyBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHggPSByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueDtcbiAgY29uc3QgeSA9IHJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcCAtIG9mZnNldHMueTtcbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHBvbHlmaWxsKSB7XG4gICAgcmV0dXJuIHBvbHlmaWxsKGVsZW1lbnQpO1xuICB9XG4gIHJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudDtcbn1cblxuLy8gR2V0cyB0aGUgY2xvc2VzdCBhbmNlc3RvciBwb3NpdGlvbmVkIGVsZW1lbnQuIEhhbmRsZXMgc29tZSBlZGdlIGNhc2VzLFxuLy8gc3VjaCBhcyB0YWJsZSBhbmNlc3RvcnMgYW5kIGNyb3NzIGJyb3dzZXIgYnVncy5cbmZ1bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50LCBwb2x5ZmlsbCkge1xuICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCBpc1RvcExheWVyKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuICBsZXQgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50LCBwb2x5ZmlsbCk7XG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgaXNUYWJsZUVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQsIHBvbHlmaWxsKTtcbiAgfVxuICBpZiAob2Zmc2V0UGFyZW50ICYmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnaHRtbCcgfHwgZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2JvZHknICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycgJiYgIWlzQ29udGFpbmluZ0Jsb2NrKG9mZnNldFBhcmVudCkpKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB8fCB3aW5kb3c7XG59XG5cbmNvbnN0IGdldEVsZW1lbnRSZWN0cyA9IGFzeW5jIGZ1bmN0aW9uIChkYXRhKSB7XG4gIGNvbnN0IGdldE9mZnNldFBhcmVudEZuID0gdGhpcy5nZXRPZmZzZXRQYXJlbnQgfHwgZ2V0T2Zmc2V0UGFyZW50O1xuICBjb25zdCBnZXREaW1lbnNpb25zRm4gPSB0aGlzLmdldERpbWVuc2lvbnM7XG4gIHJldHVybiB7XG4gICAgcmVmZXJlbmNlOiBnZXRSZWN0UmVsYXRpdmVUb09mZnNldFBhcmVudChkYXRhLnJlZmVyZW5jZSwgYXdhaXQgZ2V0T2Zmc2V0UGFyZW50Rm4oZGF0YS5mbG9hdGluZyksIGRhdGEuc3RyYXRlZ3kpLFxuICAgIGZsb2F0aW5nOiB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMCxcbiAgICAgIC4uLihhd2FpdCBnZXREaW1lbnNpb25zRm4oZGF0YS5mbG9hdGluZykpXG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNSVEwoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5kaXJlY3Rpb24gPT09ICdydGwnO1xufVxuXG5jb25zdCBwbGF0Zm9ybSA9IHtcbiAgY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QsXG4gIGdldERvY3VtZW50RWxlbWVudCxcbiAgZ2V0Q2xpcHBpbmdSZWN0LFxuICBnZXRPZmZzZXRQYXJlbnQsXG4gIGdldEVsZW1lbnRSZWN0cyxcbiAgZ2V0Q2xpZW50UmVjdHMsXG4gIGdldERpbWVuc2lvbnMsXG4gIGdldFNjYWxlLFxuICBpc0VsZW1lbnQsXG4gIGlzUlRMXG59O1xuXG4vLyBodHRwczovL3NhbXRob3IuYXUvMjAyMS9vYnNlcnZpbmctZG9tL1xuZnVuY3Rpb24gb2JzZXJ2ZU1vdmUoZWxlbWVudCwgb25Nb3ZlKSB7XG4gIGxldCBpbyA9IG51bGw7XG4gIGxldCB0aW1lb3V0SWQ7XG4gIGNvbnN0IHJvb3QgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgdmFyIF9pbztcbiAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAoX2lvID0gaW8pID09IG51bGwgfHwgX2lvLmRpc2Nvbm5lY3QoKTtcbiAgICBpbyA9IG51bGw7XG4gIH1cbiAgZnVuY3Rpb24gcmVmcmVzaChza2lwLCB0aHJlc2hvbGQpIHtcbiAgICBpZiAoc2tpcCA9PT0gdm9pZCAwKSB7XG4gICAgICBza2lwID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aHJlc2hvbGQgPT09IHZvaWQgMCkge1xuICAgICAgdGhyZXNob2xkID0gMTtcbiAgICB9XG4gICAgY2xlYW51cCgpO1xuICAgIGNvbnN0IHtcbiAgICAgIGxlZnQsXG4gICAgICB0b3AsXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodFxuICAgIH0gPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmICghc2tpcCkge1xuICAgICAgb25Nb3ZlKCk7XG4gICAgfVxuICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbnNldFRvcCA9IGZsb29yKHRvcCk7XG4gICAgY29uc3QgaW5zZXRSaWdodCA9IGZsb29yKHJvb3QuY2xpZW50V2lkdGggLSAobGVmdCArIHdpZHRoKSk7XG4gICAgY29uc3QgaW5zZXRCb3R0b20gPSBmbG9vcihyb290LmNsaWVudEhlaWdodCAtICh0b3AgKyBoZWlnaHQpKTtcbiAgICBjb25zdCBpbnNldExlZnQgPSBmbG9vcihsZWZ0KTtcbiAgICBjb25zdCByb290TWFyZ2luID0gLWluc2V0VG9wICsgXCJweCBcIiArIC1pbnNldFJpZ2h0ICsgXCJweCBcIiArIC1pbnNldEJvdHRvbSArIFwicHggXCIgKyAtaW5zZXRMZWZ0ICsgXCJweFwiO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICByb290TWFyZ2luLFxuICAgICAgdGhyZXNob2xkOiBtYXgoMCwgbWluKDEsIHRocmVzaG9sZCkpIHx8IDFcbiAgICB9O1xuICAgIGxldCBpc0ZpcnN0VXBkYXRlID0gdHJ1ZTtcbiAgICBmdW5jdGlvbiBoYW5kbGVPYnNlcnZlKGVudHJpZXMpIHtcbiAgICAgIGNvbnN0IHJhdGlvID0gZW50cmllc1swXS5pbnRlcnNlY3Rpb25SYXRpbztcbiAgICAgIGlmIChyYXRpbyAhPT0gdGhyZXNob2xkKSB7XG4gICAgICAgIGlmICghaXNGaXJzdFVwZGF0ZSkge1xuICAgICAgICAgIHJldHVybiByZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyYXRpbykge1xuICAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgcmVmcmVzaChmYWxzZSwgMWUtNyk7XG4gICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWZyZXNoKGZhbHNlLCByYXRpbyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlzRmlyc3RVcGRhdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBPbGRlciBicm93c2VycyBkb24ndCBzdXBwb3J0IGEgYGRvY3VtZW50YCBhcyB0aGUgcm9vdCBhbmQgd2lsbCB0aHJvdyBhblxuICAgIC8vIGVycm9yLlxuICAgIHRyeSB7XG4gICAgICBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihoYW5kbGVPYnNlcnZlLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIC8vIEhhbmRsZSA8aWZyYW1lPnNcbiAgICAgICAgcm9vdDogcm9vdC5vd25lckRvY3VtZW50XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihoYW5kbGVPYnNlcnZlLCBvcHRpb25zKTtcbiAgICB9XG4gICAgaW8ub2JzZXJ2ZShlbGVtZW50KTtcbiAgfVxuICByZWZyZXNoKHRydWUpO1xuICByZXR1cm4gY2xlYW51cDtcbn1cblxuLyoqXG4gKiBBdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHdoZW4gbmVjZXNzYXJ5LlxuICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gdGhlIGZsb2F0aW5nIGVsZW1lbnQgaXMgbW91bnRlZCBvbiB0aGUgRE9NIG9yXG4gKiB2aXNpYmxlIG9uIHRoZSBzY3JlZW4uXG4gKiBAcmV0dXJucyBjbGVhbnVwIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIGludm9rZWQgd2hlbiB0aGUgZmxvYXRpbmcgZWxlbWVudCBpc1xuICogcmVtb3ZlZCBmcm9tIHRoZSBET00gb3IgaGlkZGVuIGZyb20gdGhlIHNjcmVlbi5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hdXRvVXBkYXRlXG4gKi9cbmZ1bmN0aW9uIGF1dG9VcGRhdGUocmVmZXJlbmNlLCBmbG9hdGluZywgdXBkYXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgY29uc3Qge1xuICAgIGFuY2VzdG9yU2Nyb2xsID0gdHJ1ZSxcbiAgICBhbmNlc3RvclJlc2l6ZSA9IHRydWUsXG4gICAgZWxlbWVudFJlc2l6ZSA9IHR5cGVvZiBSZXNpemVPYnNlcnZlciA9PT0gJ2Z1bmN0aW9uJyxcbiAgICBsYXlvdXRTaGlmdCA9IHR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlciA9PT0gJ2Z1bmN0aW9uJyxcbiAgICBhbmltYXRpb25GcmFtZSA9IGZhbHNlXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCByZWZlcmVuY2VFbCA9IHVud3JhcEVsZW1lbnQocmVmZXJlbmNlKTtcbiAgY29uc3QgYW5jZXN0b3JzID0gYW5jZXN0b3JTY3JvbGwgfHwgYW5jZXN0b3JSZXNpemUgPyBbLi4uKHJlZmVyZW5jZUVsID8gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMocmVmZXJlbmNlRWwpIDogW10pLCAuLi5nZXRPdmVyZmxvd0FuY2VzdG9ycyhmbG9hdGluZyldIDogW107XG4gIGFuY2VzdG9ycy5mb3JFYWNoKGFuY2VzdG9yID0+IHtcbiAgICBhbmNlc3RvclNjcm9sbCAmJiBhbmNlc3Rvci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB1cGRhdGUsIHtcbiAgICAgIHBhc3NpdmU6IHRydWVcbiAgICB9KTtcbiAgICBhbmNlc3RvclJlc2l6ZSAmJiBhbmNlc3Rvci5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGUpO1xuICB9KTtcbiAgY29uc3QgY2xlYW51cElvID0gcmVmZXJlbmNlRWwgJiYgbGF5b3V0U2hpZnQgPyBvYnNlcnZlTW92ZShyZWZlcmVuY2VFbCwgdXBkYXRlKSA6IG51bGw7XG4gIGxldCByZW9ic2VydmVGcmFtZSA9IC0xO1xuICBsZXQgcmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuICBpZiAoZWxlbWVudFJlc2l6ZSkge1xuICAgIHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKF9yZWYgPT4ge1xuICAgICAgbGV0IFtmaXJzdEVudHJ5XSA9IF9yZWY7XG4gICAgICBpZiAoZmlyc3RFbnRyeSAmJiBmaXJzdEVudHJ5LnRhcmdldCA9PT0gcmVmZXJlbmNlRWwgJiYgcmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgLy8gUHJldmVudCB1cGRhdGUgbG9vcHMgd2hlbiB1c2luZyB0aGUgYHNpemVgIG1pZGRsZXdhcmUuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMTc0MFxuICAgICAgICByZXNpemVPYnNlcnZlci51bm9ic2VydmUoZmxvYXRpbmcpO1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyZW9ic2VydmVGcmFtZSk7XG4gICAgICAgIHJlb2JzZXJ2ZUZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICB2YXIgX3Jlc2l6ZU9ic2VydmVyO1xuICAgICAgICAgIChfcmVzaXplT2JzZXJ2ZXIgPSByZXNpemVPYnNlcnZlcikgPT0gbnVsbCB8fCBfcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShmbG9hdGluZyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdXBkYXRlKCk7XG4gICAgfSk7XG4gICAgaWYgKHJlZmVyZW5jZUVsICYmICFhbmltYXRpb25GcmFtZSkge1xuICAgICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShyZWZlcmVuY2VFbCk7XG4gICAgfVxuICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUoZmxvYXRpbmcpO1xuICB9XG4gIGxldCBmcmFtZUlkO1xuICBsZXQgcHJldlJlZlJlY3QgPSBhbmltYXRpb25GcmFtZSA/IGdldEJvdW5kaW5nQ2xpZW50UmVjdChyZWZlcmVuY2UpIDogbnVsbDtcbiAgaWYgKGFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZnJhbWVMb29wKCk7XG4gIH1cbiAgZnVuY3Rpb24gZnJhbWVMb29wKCkge1xuICAgIGNvbnN0IG5leHRSZWZSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHJlZmVyZW5jZSk7XG4gICAgaWYgKHByZXZSZWZSZWN0ICYmIChuZXh0UmVmUmVjdC54ICE9PSBwcmV2UmVmUmVjdC54IHx8IG5leHRSZWZSZWN0LnkgIT09IHByZXZSZWZSZWN0LnkgfHwgbmV4dFJlZlJlY3Qud2lkdGggIT09IHByZXZSZWZSZWN0LndpZHRoIHx8IG5leHRSZWZSZWN0LmhlaWdodCAhPT0gcHJldlJlZlJlY3QuaGVpZ2h0KSkge1xuICAgICAgdXBkYXRlKCk7XG4gICAgfVxuICAgIHByZXZSZWZSZWN0ID0gbmV4dFJlZlJlY3Q7XG4gICAgZnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShmcmFtZUxvb3ApO1xuICB9XG4gIHVwZGF0ZSgpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIHZhciBfcmVzaXplT2JzZXJ2ZXIyO1xuICAgIGFuY2VzdG9ycy5mb3JFYWNoKGFuY2VzdG9yID0+IHtcbiAgICAgIGFuY2VzdG9yU2Nyb2xsICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZSk7XG4gICAgICBhbmNlc3RvclJlc2l6ZSAmJiBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGUpO1xuICAgIH0pO1xuICAgIGNsZWFudXBJbyA9PSBudWxsIHx8IGNsZWFudXBJbygpO1xuICAgIChfcmVzaXplT2JzZXJ2ZXIyID0gcmVzaXplT2JzZXJ2ZXIpID09IG51bGwgfHwgX3Jlc2l6ZU9ic2VydmVyMi5kaXNjb25uZWN0KCk7XG4gICAgcmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuICAgIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoZnJhbWVJZCk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGF1dG9QbGFjZW1lbnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gc2hpZnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmbGlwJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IFx1MjAxNFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IHNpemUkMTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBoaWRlJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmNvbnN0IGFycm93ID0gYXJyb3ckMTtcblxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gaW5saW5lJDE7XG5cbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBsaW1pdFNoaWZ0JDE7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSAocmVmZXJlbmNlLCBmbG9hdGluZywgb3B0aW9ucykgPT4ge1xuICAvLyBUaGlzIGNhY2hlcyB0aGUgZXhwZW5zaXZlIGBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnNgIGZ1bmN0aW9uIHNvIHRoYXRcbiAgLy8gbXVsdGlwbGUgbGlmZWN5Y2xlIHJlc2V0cyByZS11c2UgdGhlIHNhbWUgcmVzdWx0LiBJdCBvbmx5IGxpdmVzIGZvciBhXG4gIC8vIHNpbmdsZSBjYWxsLiBJZiBvdGhlciBmdW5jdGlvbnMgYmVjb21lIGV4cGVuc2l2ZSwgd2UgY2FuIGFkZCB0aGVtIGFzIHdlbGwuXG4gIGNvbnN0IGNhY2hlID0gbmV3IE1hcCgpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0ge1xuICAgIHBsYXRmb3JtLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgY29uc3QgcGxhdGZvcm1XaXRoQ2FjaGUgPSB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucy5wbGF0Zm9ybSxcbiAgICBfYzogY2FjaGVcbiAgfTtcbiAgcmV0dXJuIGNvbXB1dGVQb3NpdGlvbiQxKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHtcbiAgICAuLi5tZXJnZWRPcHRpb25zLFxuICAgIHBsYXRmb3JtOiBwbGF0Zm9ybVdpdGhDYWNoZVxuICB9KTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24sIGZsaXAsIGhpZGUsIGlubGluZSwgbGltaXRTaGlmdCwgcGxhdGZvcm0sIHNoaWZ0LCBzaXplIH07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQge1xuXHRhcnJvdyxcblx0YXV0b1BsYWNlbWVudCxcblx0YXV0b1VwZGF0ZSxcblx0ZGV0ZWN0T3ZlcmZsb3csXG5cdGNvbXB1dGVQb3NpdGlvbixcblx0b2Zmc2V0LFxuXHRmbGlwLFxuXHRzaXplLFxuXHRzaGlmdCxcbn0gZnJvbSBcIkBmbG9hdGluZy11aS9kb21cIjtcbmltcG9ydCB7IFByb2Nlc3NpbmcgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9wcm9jZXNzaW5nLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZywgaXNBcnJheSwgaXNPYmplY3QsIGlzRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5cbmV4cG9ydCB7IHBvc2l0aW9uUG9wcGVyIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBjb250cm9sRWxlbWVudFxuICogQHBhcmFtIHBvcHBlckVsZW1lbnRcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJucyB7UHJvbWlzZXwqfVxuICovXG5mdW5jdGlvbiBwb3NpdGlvblBvcHBlcihjb250cm9sRWxlbWVudCwgcG9wcGVyRWxlbWVudCwgb3B0aW9ucykge1xuXHRjb25zdCBib2R5ID0gZ2V0RG9jdW1lbnQoKS5ib2R5O1xuXG5cdHJldHVybiBuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0Y29uc3QgYXJyb3dFbGVtZW50ID0gY29udHJvbEVsZW1lbnQucXVlcnlTZWxlY3Rvcihcblx0XHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWFycm93XVwiLFxuXHRcdCk7XG5cblx0XHRjb25zdCBjb25maWcgPSBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHR7XG5cdFx0XHRcdHBsYWNlbWVudDogXCJ0b3BcIixcblx0XHRcdH0sXG5cdFx0XHRvcHRpb25zLFxuXHRcdCk7XG5cblx0XHRjb25zdCBtaWRkbGV3YXJlID0gY29uZmlnPy5bXCJtaWRkbGV3YXJlXCJdO1xuXHRcdGlmICghaXNBcnJheShtaWRkbGV3YXJlKSkge1xuXHRcdFx0aWYgKGlzU3RyaW5nKG1pZGRsZXdhcmUpKSB7XG5cdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl0gPSBtaWRkbGV3YXJlLnNwbGl0KFwiLFwiKS5maWx0ZXIoKGxpbmUpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gbGluZS50cmltKCkubGVuZ3RoID4gMDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25maWdbXCJtaWRkbGV3YXJlXCJdID0gW107XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gbWlkZGxld2FyZSkge1xuXHRcdFx0Y29uc3QgbGluZSA9IG1pZGRsZXdhcmVba2V5XTtcblx0XHRcdGlmIChpc0Z1bmN0aW9uKGxpbmUpKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNPYmplY3QobGluZSkpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghaXNTdHJpbmcobGluZSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdGBNaWRkbGV3YXJlIG11c3QgYmUgYSBzdHJpbmcsIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0LiBHb3QgJHt0eXBlb2YgbGluZX1gLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBrdiA9IGxpbmUuc3BsaXQoXCI6XCIpO1xuXHRcdFx0Y29uc3QgZm4gPSBrdi5zaGlmdCgpO1xuXG5cdFx0XHRzd2l0Y2ggKGZuKSB7XG5cdFx0XHRcdGNhc2UgXCJmbGlwXCI6XG5cdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gZmxpcCgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwic2hpZnRcIjpcblx0XHRcdFx0XHRjb25maWdbXCJtaWRkbGV3YXJlXCJdW2tleV0gPSBzaGlmdCgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiYXV0b1BsYWNlbWVudFwiOlxuXHRcdFx0XHRcdGxldCBkZWZhdWx0QWxsb3dlZFBsYWNlbWVudHMgPSBbXCJ0b3BcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCIsIFwicmlnaHRcIl07XG5cblx0XHRcdFx0XHRjb25zdCBkZWZQbGFjZW1lbnQgPSBrdj8uc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAoaXNTdHJpbmcoZGVmUGxhY2VtZW50KSAmJiBkZWZQbGFjZW1lbnQudHJpbSgpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGRlZmF1bHRBbGxvd2VkUGxhY2VtZW50cyA9IGRlZlBsYWNlbWVudFxuXHRcdFx0XHRcdFx0XHQuc3BsaXQoXCIsXCIpXG5cdFx0XHRcdFx0XHRcdC5maWx0ZXIoKGxpbmUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbGluZS50cmltKCkubGVuZ3RoID4gMDtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGRlZmF1bHRBbGxvd2VkUGxhY2VtZW50cy5pbmNsdWRlcyhjb25maWcucGxhY2VtZW50KSkge1xuXHRcdFx0XHRcdFx0ZGVmYXVsdEFsbG93ZWRQbGFjZW1lbnRzLnNwbGljZShcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdEFsbG93ZWRQbGFjZW1lbnRzLmluZGV4T2YoY29uZmlnLnBsYWNlbWVudCksXG5cdFx0XHRcdFx0XHRcdDEsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkZWZhdWx0QWxsb3dlZFBsYWNlbWVudHMudW5zaGlmdChjb25maWcucGxhY2VtZW50KTtcblxuXHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IGF1dG9QbGFjZW1lbnQoe1xuXHRcdFx0XHRcdFx0Y3Jvc3NBeGlzOiB0cnVlLFxuXHRcdFx0XHRcdFx0YXV0b0FsaWdubWVudDogdHJ1ZSxcblx0XHRcdFx0XHRcdGFsbG93ZWRQbGFjZW1lbnRzOiBkZWZhdWx0QWxsb3dlZFBsYWNlbWVudHMsXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImRldGVjdE92ZXJmbG93XCI6XG5cdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gZGV0ZWN0T3ZlcmZsb3coKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImFycm93XCI6XG5cdFx0XHRcdFx0aWYgKGFycm93RWxlbWVudCkge1xuXHRcdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gYXJyb3coeyBlbGVtZW50OiBhcnJvd0VsZW1lbnQgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwic2l6ZVwiOlxuXHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IHNpemUoe1xuXHRcdFx0XHRcdFx0YXBwbHkoeyBhdmFpbGFibGVXaWR0aCwgYXZhaWxhYmxlSGVpZ2h0LCBlbGVtZW50cyB9KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG1heFdpZHRoID0gYm9keS5jbGllbnRXaWR0aDtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWF4SGVpZ2h0ID0gYm9keS5jbGllbnRIZWlnaHQ7XG5cblx0XHRcdFx0XHRcdFx0aWYgKGF2YWlsYWJsZVdpZHRoIDwgMCkge1xuXHRcdFx0XHRcdFx0XHRcdGF2YWlsYWJsZVdpZHRoID0gMDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChhdmFpbGFibGVIZWlnaHQgPCAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXZhaWxhYmxlSGVpZ2h0ID0gMDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChhdmFpbGFibGVXaWR0aCA+IG1heFdpZHRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXZhaWxhYmxlV2lkdGggPSBtYXhXaWR0aDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChhdmFpbGFibGVIZWlnaHQgPiBtYXhIZWlnaHQpIHtcblx0XHRcdFx0XHRcdFx0XHRhdmFpbGFibGVIZWlnaHQgPSBtYXhIZWlnaHQ7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRPYmplY3QuYXNzaWduKGVsZW1lbnRzLmZsb2F0aW5nLnN0eWxlLCB7XG5cdFx0XHRcdFx0XHRcdFx0Ym94U2l6aW5nOiBcImJvcmRlci1ib3hcIixcblx0XHRcdFx0XHRcdFx0XHRtYXhXaWR0aDogYCR7YXZhaWxhYmxlV2lkdGh9cHhgLFxuXHRcdFx0XHRcdFx0XHRcdG1heEhlaWdodDogYCR7YXZhaWxhYmxlSGVpZ2h0fXB4YCxcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwib2Zmc2V0XCI6XG5cdFx0XHRcdFx0Y29uc3QgbyA9IGt2Py5zaGlmdCgpO1xuXHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IG9mZnNldChwYXJzZUludChvKSB8fCAxMCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJoaWRlXCI6XG5cdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gaGlkZSgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgVW5rbm93biBmdW5jdGlvbjogJHtmbn1gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRwb3BwZXJFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KFwidmlzaWJpbGl0eVwiKTtcblx0XHRwb3BwZXJFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG5cblx0XHRhdXRvVXBkYXRlKGNvbnRyb2xFbGVtZW50LCBwb3BwZXJFbGVtZW50LCAoKSA9PiB7XG5cdFx0XHRjb21wdXRlUG9zaXRpb24oY29udHJvbEVsZW1lbnQsIHBvcHBlckVsZW1lbnQsIGNvbmZpZykudGhlbihcblx0XHRcdFx0KHsgeCwgeSwgcGxhY2VtZW50LCBtaWRkbGV3YXJlRGF0YSB9KSA9PiB7XG5cdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihwb3BwZXJFbGVtZW50LnN0eWxlLCB7XG5cdFx0XHRcdFx0XHR0b3A6IFwiMFwiLFxuXHRcdFx0XHRcdFx0bGVmdDogXCIwXCIsXG5cdFx0XHRcdFx0XHR0cmFuc2Zvcm06IGB0cmFuc2xhdGUoJHtyb3VuZEJ5RFBSKHgpfXB4LCR7cm91bmRCeURQUih5KX1weClgLFxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0aWYgKG1pZGRsZXdhcmVEYXRhLmFycm93KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzaWRlID0gcGxhY2VtZW50LnNwbGl0KFwiLVwiKVswXTtcblxuXHRcdFx0XHRcdFx0Y29uc3Qgc3RhdGljU2lkZSA9IHtcblx0XHRcdFx0XHRcdFx0dG9wOiBcImJvdHRvbVwiLFxuXHRcdFx0XHRcdFx0XHRyaWdodDogXCJsZWZ0XCIsXG5cdFx0XHRcdFx0XHRcdGJvdHRvbTogXCJ0b3BcIixcblx0XHRcdFx0XHRcdFx0bGVmdDogXCJyaWdodFwiLFxuXHRcdFx0XHRcdFx0fVtzaWRlXTtcblxuXHRcdFx0XHRcdFx0Ly8gbW9uc3Rlci1ib3JkZXItd2lkdGggPSArIDQgKDIqMikgKHNob3VsZCBjb21lIGZyb20gY3NzKVxuXHRcdFx0XHRcdFx0Y29uc3QgYXJyb3dMZW4gPSBhcnJvd0VsZW1lbnQub2Zmc2V0V2lkdGggKyA0O1xuXG5cdFx0XHRcdFx0XHRjb25zdCBib3JkZXJTdHlsZSA9IHtcblx0XHRcdFx0XHRcdFx0Ym9yZGVyTGVmdDogXCJ0cmFuc3BhcmVudFwiLFxuXHRcdFx0XHRcdFx0XHRib3JkZXJSaWdodDogXCJ0cmFuc3BhcmVudFwiLFxuXHRcdFx0XHRcdFx0XHRib3JkZXJCb3R0b206IFwidHJhbnNwYXJlbnRcIixcblx0XHRcdFx0XHRcdFx0Ym9yZGVyVG9wOiBcInRyYW5zcGFyZW50XCIsXG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRjb25zdCBkZWZhdWx0Qm9yZGVyID1cblx0XHRcdFx0XHRcdFx0XCJ2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KVwiO1xuXG5cdFx0XHRcdFx0XHRzd2l0Y2ggKHNpZGUpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcInRvcFwiOlxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlclJpZ2h0ID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJCb3R0b20gPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJib3R0b21cIjpcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJUb3AgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlckxlZnQgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJsZWZ0XCI6XG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUuYm9yZGVyUmlnaHQgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlclRvcCA9IGRlZmF1bHRCb3JkZXI7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0Y2FzZSBcInJpZ2h0XCI6XG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUuYm9yZGVyQm90dG9tID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJMZWZ0ID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgeyB4LCB5IH0gPSBtaWRkbGV3YXJlRGF0YS5hcnJvdztcblxuXHRcdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihcblx0XHRcdFx0XHRcdFx0YXJyb3dFbGVtZW50LnN0eWxlLFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bGVmdDogeCAhPSBudWxsID8gYCR7eH1weGAgOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdHRvcDogeSAhPSBudWxsID8gYCR7eX1weGAgOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdC8vIEVuc3VyZSB0aGUgc3RhdGljIHNpZGUgZ2V0cyB1bnNldCB3aGVuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gZmxpcHBpbmcgdG8gb3RoZXIgcGxhY2VtZW50cycgYXhlcy5cblx0XHRcdFx0XHRcdFx0XHRyaWdodDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRib3R0b206IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0W3N0YXRpY1NpZGVdOiBgJHstYXJyb3dMZW4gLyAyfXB4YCxcblx0XHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm06IFwicm90YXRlKDQ1ZGVnKVwiLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZSxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblx0XHR9KTtcblx0fSkucnVuKCk7XG59XG5cbmZ1bmN0aW9uIHJvdW5kQnlEUFIodmFsdWUpIHtcblx0Y29uc3QgZHByID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcblx0cmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBkcHIpIC8gZHByO1xufVxuIiwgIlxuLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyNC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQge2FkZEF0dHJpYnV0ZVRva2VufSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge0FUVFJJQlVURV9FUlJPUk1FU1NBR0V9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQge1NlbGVjdFN0eWxlU2hlZXR9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBTZWxlY3RTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcbiAgU2VsZWN0U3R5bGVTaGVldC5pbnNlcnRSdWxlKGBcbkBsYXllciBzZWxlY3QgeyBcbi5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLXNoYWRvdzpub25lfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeSwubW9uc3Rlci1iYWRnZS1wcmltYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeSwubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeSwubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmV7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLC5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUtcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1zdWNjZXNze3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1zdWNjZXNzLC5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MtcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utc3VjY2Vzcy1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXdhcm5pbmd7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXdhcm5pbmcsLm1vbnN0ZXItYmFkZ2Utd2FybmluZy1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS13YXJuaW5nLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtZXJyb3J7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLWVycm9yLC5tb25zdGVyLWJhZGdlLWVycm9yLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtZXJyb3ItcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXXthbGlnbi1jb250ZW50OmNlbnRlcjtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bGVmdDowO3BhZGRpbmc6MS4xZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1tb2RhbCl9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl0gZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWFycm93XXtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtoZWlnaHQ6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3otaW5kZXg6LTF9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl17LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2ZsZXg6NCAwIDkwJTttaW4taGVpZ2h0OjEuNGVtfS5kLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH1kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250YWluZXJdLm9wZW57YmFja2dyb3VuZC1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNNy42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBsNiA2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA1LjcwN2wtNS42NDYgNS42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDh6Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl0uY2xlYXJ7YmFja2dyb3VuZC1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXthY2NlbnQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTstby1ib3JkZXItaW1hZ2U6aW5pdGlhbDtib3JkZXItaW1hZ2U6aW5pdGlhbDtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dGhpbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZToxMDAlO21hcmdpbjowO291dGxpbmU6bm9uZTtwYWRkaW5nOi40cmVtIC42cmVtfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6bGlnaHQpe1tkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF06Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpO291dGxpbmUtb2Zmc2V0OjJweH19W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXNlbGVjdGlvbl17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOndyYXA7Z2FwOjVweDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDttYXJnaW46NXB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb24tY29udHJvbF17bWFyZ2luLXJpZ2h0OjhweH1bZGF0YS1tb25zdGVyLXJvbGU9YmFkZ2Vde2Rpc3BsYXk6aW5saW5lLWZsZXh9W2RhdGEtbW9uc3Rlci1yb2xlPWJhZGdlLWxhYmVsXXthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztnYXA6N3B4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufVtkYXRhLW1vbnN0ZXItcm9sZT1yZW1vdmUtYmFkZ2Vde2JhY2tncm91bmQtaW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvciclM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEwMCUgMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjE2cHg7aGVpZ2h0OjE2cHg7bWFyZ2luLWxlZnQ6NXB4O21pbi1oZWlnaHQ6MTZweDtvcmRlcjoyO3dpZHRoOjE2cHh9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7W2RhdGEtbW9uc3Rlci1yb2xlPXJlbW92ZS1iYWRnZV17ZmlsdGVyOmludmVydCgxKX19W2RhdGEtbW9uc3Rlci1yb2xlPWZpbHRlcl0sW2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlci1maWx0ZXJde2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MjAwO29yZGVyOjk5OTk5OTk5O3Zpc2liaWxpdHk6aGlkZGVufVtkYXRhLW1vbnN0ZXItcm9sZT1maWx0ZXJdLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtib3JkZXI6MDtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMik7bWluLXdpZHRoOjQwJTtvdXRsaW5lOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlfS5hY3RpdmVbZGF0YS1tb25zdGVyLXJvbGU9ZmlsdGVyXVtuYW1lPXBvcHBlci1maWx0ZXJde2hlaWdodDoxLjVlbTttYXJnaW46Mi41ZW07cGFkZGluZzoycHg7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKjIpfS5vcHRpb24tZmlsdGVyLWNvbnRyb2x7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6Mi41ZW07bWFyZ2luOi0xLjFlbSAtMS4xZW0gLjNlbX0uc3RhdHVzLW9yLXJlbW92ZS1iYWRnZXN7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtaW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvciclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTEuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggMTAuMjkzbDUuNjQ2LTUuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhsLTYgNmEuNS41IDAgMCAxLS43MDggMGwtNi02YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZToxNnB4O21pbi1oZWlnaHQ6MTZweDt3aWR0aDoxNnB4fVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc10ub3BlbntiYWNrZ3JvdW5kLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J003LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMGw2IDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDUuNzA3bC01LjY0NiA1LjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOHonLyUzRSUzQy9zdmclM0VcXFwiKX1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNdLmVtcHR5e2JhY2tncm91bmQtaW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWRhc2gtY2lyY2xlJyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc10uY2xlYXJ7YmFja2dyb3VuZC1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc10ubG9hZGluZ3thbmltYXRpb24tZHVyYXRpb246MXM7YW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDppbmZpbml0ZTthbmltYXRpb24tbmFtZTphY3Rpdml0eTthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLDAsLjIsMSk7YmFja2dyb3VuZC1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYWN0aXZpdHknJTNFJTNDY2lyY2xlIGN4PSc4JyBjeT0nOCcgcj0nOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfUBrZXlmcmFtZXMgYWN0aXZpdHl7MCV7dHJhbnNmb3JtOnNjYWxlKDEpfTUwJXt0cmFuc2Zvcm06c2NhbGUoLjEpfXRve3RyYW5zZm9ybTpzY2FsZSgxKX19W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbnNde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZ3JvdzoxfVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25de2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O3BhZGRpbmc6NnB4IDVweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXSBsYWJlbHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dIGxhYmVsPmRpdnthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9bm8tb3B0aW9uc117YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2wgb3Itd2FybmluZy0yKTttYXJnaW46MS4xZW0gMCAwIDEuMWVtfS5zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWZpbHRlcmVkPXRydWVdLFtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci12aXNpYmlsaXR5PWhpZGRlbl17ZGlzcGxheTpub25lfVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1mb2N1c2VkPXRydWVde291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKTtvdXRsaW5lLW9mZnNldDotMnB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dPmlucHV0OmZvY3VzLFtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dPmxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuaW1wb3J0IHtpbnN0YW5jZVN5bWJvbH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7aW50ZXJuYWxTeW1ib2x9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge2J1aWxkTWFwfSBmcm9tIFwiLi4vLi4vZGF0YS9idWlsZG1hcC5tanNcIjtcbmltcG9ydCB7RGVhZE1hbnNTd2l0Y2h9IGZyb20gXCIuLi8uLi91dGlsL2RlYWRtYW5zc3dpdGNoLm1qc1wiO1xuaW1wb3J0IHtwb3NpdGlvblBvcHBlcn0gZnJvbSBcIi4vdXRpbC9mbG9hdGluZy11aS5tanNcIjtcbmltcG9ydCB7XG4gICAgYWRkQXR0cmlidXRlVG9rZW4sXG4gICAgZmluZENsb3Nlc3RCeUF0dHJpYnV0ZSxcbiAgICByZW1vdmVBdHRyaWJ1dGVUb2tlbixcbn0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcbiAgICBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuICAgIEFUVFJJQlVURV9QUkVGSVgsXG4gICAgQVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtDdXN0b21Db250cm9sfSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWNvbnRyb2wubWpzXCI7XG5pbXBvcnQge1xuICAgIGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuICAgIGdldFNsb3R0ZWRFbGVtZW50cyxcbiAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQsIHVwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2wsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7XG4gICAgZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQsXG4gICAgZmlyZUN1c3RvbUV2ZW50LFxuICAgIGZpcmVFdmVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQge2dldERvY3VtZW50fSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQge0Zvcm1hdHRlcn0gZnJvbSBcIi4uLy4uL3RleHQvZm9ybWF0dGVyLm1qc1wiO1xuaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQge0lEfSBmcm9tIFwiLi4vLi4vdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQge1xuICAgIGlzQXJyYXksXG4gICAgaXNGdW5jdGlvbixcbiAgICBpc0ludGVnZXIsXG4gICAgaXNJdGVyYWJsZSxcbiAgICBpc09iamVjdCxcbiAgICBpc1ByaW1pdGl2ZSxcbiAgICBpc1N0cmluZyxcbn0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHtPYnNlcnZlcn0gZnJvbSBcIi4uLy4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHtQcm94eU9ic2VydmVyfSBmcm9tIFwiLi4vLi4vdHlwZXMvcHJveHlvYnNlcnZlci5tanNcIjtcbmltcG9ydCB7dmFsaWRhdGVBcnJheSwgdmFsaWRhdGVTdHJpbmd9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7UHJvY2Vzc2luZ30gZnJvbSBcIi4uLy4uL3V0aWwvcHJvY2Vzc2luZy5tanNcIjtcbmltcG9ydCB7U1RZTEVfRElTUExBWV9NT0RFX0JMT0NLfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1NlbGVjdFN0eWxlU2hlZXR9IGZyb20gXCIuL3N0eWxlc2hlZXQvc2VsZWN0Lm1qc1wiO1xuaW1wb3J0IHtcbiAgICBnZXREb2N1bWVudFRyYW5zbGF0aW9ucyxcbiAgICBUcmFuc2xhdGlvbnMsXG59IGZyb20gXCIuLi8uLi9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcblxuZXhwb3J0IHtcbiAgICBTZWxlY3QsXG4gICAgcG9wcGVyRWxlbWVudFN5bWJvbCxcbiAgICBnZXRTdW1tYXJ5VGVtcGxhdGUsXG4gICAgZ2V0U2VsZWN0aW9uVGVtcGxhdGUsXG59O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBub09wdGlvbnNBdmFpbGFibGVNZXNzYWdlID0gXCJObyBvcHRpb25zIGF2YWlsYWJsZS5cIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgY2xpY2tUb0xvYWRPcHRpb25zTWVzc2FnZSA9IFwiQ2xpY2sgdG8gbG9hZCBvcHRpb25zLlwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB0aW1lckNhbGxiYWNrU3ltYm9sID0gU3ltYm9sKFwidGltZXJDYWxsYmFja1wiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qga2V5RmlsdGVyRXZlbnRTeW1ib2wgPSBTeW1ib2woXCJrZXlGaWx0ZXJFdmVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbGF6eUxvYWREb25lU3ltYm9sID0gU3ltYm9sKFwibGF6eUxvYWREb25lXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNsb3NlRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiY2xvc2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY2xlYXJPcHRpb25FdmVudEhhbmRsZXIgPSBTeW1ib2woXCJjbGVhck9wdGlvbkV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZXNpemVPYnNlcnZlclN5bWJvbCA9IFN5bWJvbChcInJlc2l6ZU9ic2VydmVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGtleUV2ZW50SGFuZGxlciA9IFN5bWJvbChcImtleUV2ZW50SGFuZGxlclwiKTtcbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW5wdXRFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJpbnB1dEV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjaGFuZ2VFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJjaGFuZ2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250cm9sRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBzZWxlY3Rpb25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic2VsZWN0aW9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250YWluZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udGFpbmVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiaW5saW5lRmlsdGVyRWxlbWVudFwiKTtcbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInBvcHBlckZpbHRlckVsZW1lbnRcIik7XG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlckZpbHRlckNvbnRhaW5lckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXG4gICAgXCJwb3BwZXJGaWx0ZXJDb250YWluZXJFbGVtZW50XCIsXG4pO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG9wdGlvbnNFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwib3B0aW9uc0VsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgbm9PcHRpb25zQXZhaWxhYmxlRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIm5vT3B0aW9uc0F2YWlsYWJsZUVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3RhdHVzT3JSZW1vdmVCYWRnZXNFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic3RhdHVzT3JSZW1vdmVCYWRnZXNFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBhcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbCA9IFN5bWJvbChcIkBAYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IEZPQ1VTX0RJUkVDVElPTl9VUCA9IDE7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5jb25zdCBGT0NVU19ESVJFQ1RJT05fRE9XTiA9IDI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEZJTFRFUl9NT0RFX1JFTU9URSA9IFwicmVtb3RlXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEZJTFRFUl9NT0RFX09QVElPTlMgPSBcIm9wdGlvbnNcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRklMVEVSX01PREVfRElTQUJMRUQgPSBcImRpc2FibGVkXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEZJTFRFUl9QT1NJVElPTl9QT1BQRVIgPSBcInBvcHBlclwiO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRklMVEVSX1BPU0lUSU9OX0lOTElORSA9IFwiaW5saW5lXCI7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2VsZWN0aW9uXG4gKiBAcHJvcGVydHkgeyp9IHZhbHVlXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbGFiZWxcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHNpbmNlIDEuMi4wXG4gKi9cblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgY3JlYXRlcyBhIHNlbGVjdCBlbGVtZW50IHdpdGggYSB2YXJpZXR5IG9mIG9wdGlvbnMuXG4gKiBJdCBzdXBwb3J0cyBmaWx0ZXJpbmcsIGxvY2FsIGFuZCByZW1vdGUsIG11bHRpcGxlIHNlbGVjdGlvbiBhbmQgaGFzIGFcbiAqIHRlbXBsYXRlIHN5c3RlbSBmb3IgZGlzcGxheWluZyB0aGUgb3B0aW9ucy5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL3NlbGVjdC5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnlcbiAqIGFzIHdlbGwgYXMgW3Bvb3BlcmpzXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pLlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgYDxtb25zdGVyLXNlbGVjdCAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zZWxlY3QnKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1zZWxlY3Q+PC9tb25zdGVyLXNlbGVjdD5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQge1NlbGVjdH0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL3NlbGVjdC5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXNlbGVjdCcpO1xuICogYGBgXG4gKlxuICogIyMgRXZlbnRzXG4gKlxuICogVGhlIGV2ZW50IGBtb25zdGVyLWNoYW5nZWAgaXMgc2VudCBhcyBzb29uIGFzIHNvbWVvbmUgaGFzIGNsaWNrZWQgb24gYSBpbnB1dCBjb250cm9sLlxuICogYG1vbnN0ZXItY2hhbmdlZGAgaXMgc2VudCBhcyBzb29uIGFzIHRoZSBjb250cm9sIGhhcyBwcm9jZXNzZWQgdGhpcyBpbnB1dC5cbiAqIFRoZSBgbW9uc3Rlci1jaGFuZ2VkYCBldmVudCBpcyBzZW50IHdoZW4gc2V0dGluZyBhIHNlbGVjdGlvbi4gSWYgdGhlIG9wdGlvbnMgaGF2ZSBiZWVuIHNldCwgdGhlIGBtb25zdGVyLW9wdGlvbnMtc2V0YCBldmVudCBpcyBzZW50LlxuICpcbiAqIFRoZSBDdXN0b21FdmVudCBoYXMgdGhlIHByb3BlcnR5IFtgZGV0YWlsYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0N1c3RvbUV2ZW50L2RldGFpbCkuXG4gKlxuICogYGBgXG4gKiBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ21vbnN0ZXItY2hhbmdlJywoZSk9PmNvbnNvbGUubG9nKGUuZGV0YWlsKSlcbiAqIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignbW9uc3Rlci1jaGFuZ2VkJywoZSk9PmNvbnNvbGUubG9nKGUuZGV0YWlsKSlcbiAqIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignbW9uc3Rlci1zZWxlY3RlZCcsKGUpPT5jb25zb2xlLmxvZyhlLmRldGFpbCkpXG4gKiBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ21vbnN0ZXItb3B0aW9ucy1zZXQnLChlKT0+Y29uc29sZS5sb2coZS5kZXRhaWwpKVxuICogYGBgXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi8uLi9leGFtcGxlL2NvbXBvbmVudHMvZm9ybS9zZWxlY3QubWpzXG4gKiBAc3RhcnR1bWwgc2VsZWN0LnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gQ3VzdG9tQ29udHJvbFxuICogQ3VzdG9tQ29udHJvbCA8fC0tIFNlbGVjdFxuICogQGVuZHVtbFxuICpcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHN1bW1hcnkgQSBoaWdobHkgY29uZmlndXJhYmxlIHNlbGVjdCBjb250cm9sXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkZvcm0uZXZlbnQ6bW9uc3Rlci1vcHRpb25zLXNldFxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLmV2ZW50Om1vbnN0ZXItc2VsZWN0ZWRcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5ldmVudDptb25zdGVyLWNoYW5nZVxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLmV2ZW50Om1vbnN0ZXItY2hhbmdlZFxuICovXG5jbGFzcyBTZWxlY3QgZXh0ZW5kcyBDdXN0b21Db250cm9sIHtcbiAgICAvKipcbiAgICAgKiBAZXh0ZW5kcyBDdXN0b21Db250cm9sXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGluaXRPcHRpb25PYnNlcnZlci5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuICAgICAqIEByZXR1cm5zIHtzeW1ib2x9XG4gICAgICogQHNpbmNlIDIuMS4wXG4gICAgICovXG4gICAgc3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuICAgICAgICByZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3NlbGVjdEBAaW5zdGFuY2VcIik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgc2VsZWN0aW9uIG9mIHRoZSBTZWxlY3RcbiAgICAgKlxuICAgICAqIGBgYFxuICAgICAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXNlbGVjdCcpO1xuICAgICAqIGNvbnNvbGUubG9nKGUudmFsdWUpXG4gICAgICogLy8gXHUyMUE2IDFcbiAgICAgKiAvLyBcdTIxQTYgWycxJywnMiddXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ3xhcnJheX1cbiAgICAgKi9cbiAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiBjb252ZXJ0U2VsZWN0aW9uVG9WYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvYXR0YWNoSW50ZXJuYWxzfVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgc3RhdGljIGdldCBmb3JtQXNzb2NpYXRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHNlbGVjdGlvblxuICAgICAqXG4gICAgICogYGBgXG4gICAgICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItc2VsZWN0Jyk7XG4gICAgICogZS52YWx1ZT0xXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ3xhcnJheX0gdmFsdWVcbiAgICAgKiBAc2luY2UgMS4yLjBcbiAgICAgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICAgICAqL1xuICAgIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VmFsdWVUb1NlbGVjdGlvbi5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgc2V0U2VsZWN0aW9uXG4gICAgICAgICAgICAuY2FsbCh0aGlzLCByZXN1bHQuc2VsZWN0aW9uKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBodG1sIHRhZyB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuICAgICAqXG4gICAgICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cbiAgICAgKlxuICAgICAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0b2dnbGVFdmVudFR5cGU9Y2xpY2ssdG91Y2ggTGlzdCBvZiBldmVudCB0eXBlcyB0byBiZSBvYnNlcnZlZCBmb3Igb3BlbmluZyB0aGUgZHJvcGRvd25cbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IGRlbGVnYXRlc0ZvY3VzPWZhbHNlIGxvcmVtIFtzZWUgbW96aWxsYS5vcmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TaGFkb3dSb290L2RlbGVnYXRlc0ZvY3VzKVxuICAgICAqIEBwcm9wZXJ0eSB7T2JqZWN0W119IG9wdGlvbnMgU2VsZWN0aW9uIG9mIGtleSBpZGVudGlmaWVyIHBhaXJzIGF2YWlsYWJsZSBmb3Igc2VsZWN0aW9uIGFuZCBkaXNwbGF5ZWQgaW4gdGhlIGRyb3Bkb3duLlxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBvcHRpb25zW10ubGFiZWwgTGFiZWxcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gb3B0aW9uc1tdLnZhbHVlIFZhbHVlXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IG9wdGlvbnNbXS52aXNpYmlsaXR5IGhpZGRlbiBvciB2aXNpYmxlXG4gICAgICogQHByb3BlcnR5IHtBcnJheX0gc2VsZWN0aW9uIFNlbGVjdGVkIG9wdGlvbnNcbiAgICAgKiBAcHJvcGVydHkge0ludGVnZXJ9IHNob3dNYXhPcHRpb25zPTEwIE1heGltdW0gbnVtYmVyIG9mIHZpc2libGUgb3B0aW9ucyBiZWZvcmUgYSBzY3JvbGwgYmFyIHNob3VsZCBiZSBkaXNwbGF5ZWQuXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGU9cmFkaW8gTXVsdGlwbGUgKGNoZWNrYm94KSBvciBzaW5nbGUgc2VsZWN0aW9uIChyYWRpbylcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZT0ocmFuZG9tIGlkKSBOYW1lIG9mIHRoZSBmb3JtIGZpZWxkXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IHVybCBMb2FkIG9wdGlvbnMgZnJvbSBzZXJ2ZXIgcGVyIHVybFxuICAgICAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaCBGZXRjaCBbc2VlIFVzaW5nIEZldGNoIG1vemlsbGEub3JnXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJL1VzaW5nX0ZldGNoKVxuICAgICAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5yZWRpcmVjdD1lcnJvclxuICAgICAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tZXRob2Q9R0VUXG4gICAgICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLm1vZGU9c2FtZS1vcmlnaW5cbiAgICAgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2guY3JlZGVudGlhbHM9c2FtZS1vcmlnaW5cbiAgICAgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2guaGVhZGVycz17XCJhY2NlcHRcIjpcImFwcGxpY2F0aW9uL2pzb25cIn19XG4gICAgICogQHByb3BlcnR5IHtPYmplY3R9IGxhYmVsc1xuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMuY2Fubm90LWJlLWxvYWRlZCBjYW5ub3QgYmUgbG9hZGVkXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5uby1vcHRpb25zLWF2YWlsYWJsZSBubyBvcHRpb25zIGF2YWlsYWJsZVxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMuc2VsZWN0LWFuLW9wdGlvbiBzZWxlY3QgYW4gb3B0aW9uXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5uby1vcHRpb24gbm8gb3B0aW9uIGluIHRoZSBsaXN0LCBtYXliZSB5b3UgaGF2ZSB0byBjaGFuZ2UgdGhlIGZpbHRlclxuICAgICAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZWF0dXJlcyBMaXN0IHdpdGggZmVhdHVyZXNcbiAgICAgKiBAcHJvcGVydHkge0Jvb2xlYW59IGZlYXR1cmVzLmNsZWFyQWxsPXRydWUgRGlzcGxheSBvZiBhIGRlbGV0ZSBidXR0b24gdG8gZGVsZXRlIHRoZSBlbnRpcmUgc2VsZWN0aW9uXG4gICAgICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy5jbGVhcj10cnVlIERpc3BsYXkgb2YgYSBkZWxldGUga2V5IGZvciBkZWxldGluZyB0aGUgc3BlY2lmaWMgc2VsZWN0aW9uXG4gICAgICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy5sYXp5TG9hZD1mYWxzZSBMb2FkIG9wdGlvbnMgd2hlbiBmaXJzdCBvcGVuaW5nIHRoZSBkcm9wZG93blxuICAgICAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZmVhdHVyZXMuY2xvc2VPblNlbGVjdD1mYWxzZSBDbG9zZSB0aGUgZHJvcGRvd24gd2hlbiBhbiBvcHRpb24gaXMgc2VsZWN0ZWQgKHNpbmNlIDMuNTQuMClcbiAgICAgKiBAcHJvcGVydHkge0Jvb2xlYW59IGZpbHRlci5kZWZhdWx0VmFsdWU9KiBEZWZhdWx0IGZpbHRlciB2YWx1ZSwgaWYgdGhlIGZpbHRlciBpcyBlbXB0eVxuICAgICAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZmlsdGVyLm1vZGU9b3B0aW9ucyBGaWx0ZXIgbW9kZSwgdmFsdWVzOiBvcHRpb25zLCByZW1vdGUsIGRpc2FibGVkXG4gICAgICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlTWFwcGluZyBNYXBwaW5nIG9mIHRoZSB0ZW1wbGF0ZSBwbGFjZWhvbGRlcnNcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVNYXBwaW5nLnNlbGVjdGVkIFNlbGVjdGVkIFRlbXBsYXRlXG4gICAgICogQHByb3BlcnR5IHtPYmplY3R9IHBvcHBlciBbUG9wcGVySlMgT3B0aW9uc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKVxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwb3BwZXIucGxhY2VtZW50PWJvdHRvbSBQb3BwZXJKUyBwbGFjZW1lbnRcbiAgICAgKiBAcHJvcGVydHkge09iamVjdFtdfSBtb2RpZmllcnM9e25hbWU6b2Zmc2V0fSBQb3BwZXJKUyBwbGFjZW1lbnRcbiAgICAgKiBAcHJvcGVydHkge09iamVjdH0gbWFwcGluZ1xuICAgICAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtYXBwaW5nLnNlbGVjdG9yPSogUGF0aCB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcbiAgICAgKiBAcHJvcGVydHkge1N0cmluZ30gbWFwcGluZy5sYWJlbFRlbXBsYXRlPVwiXCIgdGVtcGxhdGUgd2l0aCB0aGUgbGFiZWwgcGxhY2Vob2xkZXJzIGluIHRoZSBmb3JtICR7bmFtZX0sIHdoZXJlIG5hbWUgaXMgdGhlIGtleSAoKiopXG4gICAgICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcudmFsdWVUZW1wbGF0ZT1cIlwiIHRlbXBsYXRlIHdpdGggdGhlIHZhbHVlIHBsYWNlaG9sZGVycyBpbiB0aGUgZm9ybSAke25hbWV9LCB3aGVyZSBuYW1lIGlzIHRoZSBrZXlcbiAgICAgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVGaWx0ZXJDYWxsYmFja3x1bmRlZmluZWR9IG1hcHBpbmcuZmlsdGVyIEZpbHRlcmluZyBvZiB2YWx1ZXMgdmlhIGEgZnVuY3Rpb25cbiAgICAgKiBAcHJvcGVydHkge09iamVjdH0gZm9ybWF0dGVyXG4gICAgICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5mb3JtYXR0ZXJTZWxlY3Rpb25DYWxsYmFja3x1bmRlZmluZWR9IGZvcm1hdHRlci5zZWxlY3Rpb24gZm9ybWF0IHNlbGVjdGlvbiBsYWJlbFxuICAgICAqL1xuICAgIGdldCBkZWZhdWx0cygpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHN1cGVyLmRlZmF1bHRzLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRvZ2dsZUV2ZW50VHlwZTogW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSxcbiAgICAgICAgICAgICAgICBkZWxlZ2F0ZXNGb2N1czogZmFsc2UsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbXSxcbiAgICAgICAgICAgICAgICBzaG93TWF4T3B0aW9uczogMTAsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJyYWRpb1wiLFxuICAgICAgICAgICAgICAgIG5hbWU6IG5ldyBJRChcInNcIikudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBmZWF0dXJlczoge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckFsbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2xlYXI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGxhenlMb2FkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VPblNlbGVjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB1cmw6IG51bGwsXG4gICAgICAgICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiY2Fubm90LWJlLWxvYWRlZFwiOiBcIkNhbm5vdCBiZSBsb2FkZWRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJuby1vcHRpb25zLWF2YWlsYWJsZVwiOiBub09wdGlvbnNBdmFpbGFibGVNZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICBcImNsaWNrLXRvLWxvYWQtb3B0aW9uc1wiOiBjbGlja1RvTG9hZE9wdGlvbnNNZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICBcInNlbGVjdC1hbi1vcHRpb25cIjogXCJTZWxlY3QgYW4gb3B0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3VtbWFyeS10ZXh0XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHplcm86IFwiTm8gZW50cmllcyB3ZXJlIHNlbGVjdGVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBvbmU6ICc8c3BhbiBjbGFzcz1cIm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxsXCI+MTwvc3Bhbj4gZW50cnkgd2FzIHNlbGVjdGVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cIm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxsXCI+JHtjb3VudH08L3NwYW4+IGVudHJpZXMgd2VyZSBzZWxlY3RlZCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwibm8tb3B0aW9uc1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgXCJVbmZvcnR1bmF0ZWx5LCB0aGVyZSBhcmUgbm8gb3B0aW9ucyBhdmFpbGFibGUgaW4gdGhlIGxpc3QuXCIsXG4gICAgICAgICAgICAgICAgICAgIFwibm8tb3B0aW9ucy1mb3VuZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgXCJObyBvcHRpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhlIGxpc3QuIFBsZWFzZSBjb25zaWRlciBtb2RpZnlpbmcgdGhlIGZpbHRlci5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VzOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2w6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBlbXB0eU9wdGlvbnM6IG51bGwsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmZXRjaDoge1xuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdDogXCJlcnJvclwiLFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6IFwic2FtZS1vcmlnaW5cIixcbiAgICAgICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IFwiKlwiLFxuICAgICAgICAgICAgICAgICAgICBtb2RlOiBGSUxURVJfTU9ERV9ESVNBQkxFRCxcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IEZJTFRFUl9QT1NJVElPTl9JTkxJTkUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjbGFzc2VzOiB7XG4gICAgICAgICAgICAgICAgICAgIGJhZGdlOiBcIm1vbnN0ZXItYmFkZ2UtcHJpbWFyeVwiLFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNPclJlbW92ZUJhZGdlOiBcImVtcHR5XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtYXBwaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yOiBcIipcIixcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxUZW1wbGF0ZTogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVUZW1wbGF0ZTogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiBudWxsLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogYnVpbGRTZWxlY3Rpb25MYWJlbCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAgICAgICBtYWluOiBnZXRUZW1wbGF0ZSgpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVNYXBwaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIC8qKiB3aXRoIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1zZWxlY3RlZC10ZW1wbGF0ZWAgdGhlIHRlbXBsYXRlIGZvciB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBjYW4gYmUgZGVmaW5lZC4gKi9cbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGdldFNlbGVjdGlvblRlbXBsYXRlKCksXG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIHBvcHBlcjoge1xuICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ6IFwiYm90dG9tXCIsXG4gICAgICAgICAgICAgICAgICAgIG1pZGRsZXdhcmU6IFtcImZsaXBcIiwgXCJvZmZzZXQ6MVwiXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cy5jYWxsKHRoaXMpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlNlbGVjdH1cbiAgICAgKi9cbiAgICBbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgc3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cbiAgICAgICAgaW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwoc2VsZik7XG4gICAgICAgIGluaXRFdmVudEhhbmRsZXIuY2FsbChzZWxmKTtcblxuICAgICAgICBjb25zdCBsYXp5TG9hZEZsYWcgPSBzZWxmLmdldE9wdGlvbihcImZlYXR1cmVzLmxhenlMb2FkXCIpO1xuXG4gICAgICAgIGlmIChzZWxmLmdldE9wdGlvbihcInVybFwiKSAhPT0gbnVsbCAmJiAhbGF6eUxvYWRGbGFnKSB7XG4gICAgICAgICAgICBzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwibG9hZGluZ1wiKTtcblxuICAgICAgICAgICAgbmV3IFByb2Nlc3NpbmcoMjAwLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaCgpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuaGFzQXR0cmlidXRlKFwidmFsdWVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2V0U2VsZWN0aW9uLmNhbGwoc2VsZiwgc2VsZi5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2V0U2VsZWN0aW9uLmNhbGwoc2VsZiwgW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkQXR0cmlidXRlVG9rZW4oc2VsZiwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwiZXJyb3JcIik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucnVuKClcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsYXN0VmFsdWUgPSBzZWxmLnZhbHVlO1xuICAgICAgICBzZWxmW2ludGVybmFsU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihcbiAgICAgICAgICAgIG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHRoaXMpICYmIHRoaXMgaW5zdGFuY2VvZiBQcm94eU9ic2VydmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG4gPSB0aGlzLmdldFN1YmplY3QoKT8ub3B0aW9ucz8udmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RWYWx1ZSAhPT0gbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlID0gbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYWxsKHNlbGYsIG4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEF0dHJpYnV0ZVRva2VuKHNlbGYsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGAke2V9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICBhcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdC5jYWxsKHNlbGYpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBCdXR0b24uY2xpY2soKSBtZXRob2Qgc2ltdWxhdGVzIGEgY2xpY2sgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHNpbmNlIDMuMjcuMFxuICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9jbGlja31cbiAgICAgKi9cbiAgICBjbGljaygpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvZ2dsZS5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBCdXR0b24uZm9jdXMoKSBtZXRob2Qgc2V0cyBmb2N1cyBvbiB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMy4yNy4wXG4gICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2ZvY3VzfVxuICAgICAqL1xuICAgIGZvY3VzKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcbiAgICAgICAgICAgIGdhdGhlclN0YXRlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICBmb2N1c0ZpbHRlci5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnJ1bigpXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICBhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIEJ1dHRvbi5ibHVyKCkgbWV0aG9kIHJlbW92ZXMgZm9jdXMgZnJvbSB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG4gICAgICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2JsdXJcbiAgICAgKi9cbiAgICBibHVyKCkge1xuICAgICAgICBuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG4gICAgICAgICAgICBnYXRoZXJTdGF0ZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgYmx1ckZpbHRlci5jYWxsKHRoaXMpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnJ1bigpXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICBhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgbm8gdXJsIGlzIHNwZWNpZmllZCwgdGhlIG9wdGlvbnMgYXJlIHRha2VuIGZyb20gdGhlIENvbXBvbmVudCBpdHNlbGYuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybCBVUkwgdG8gZmV0Y2ggdGhlIG9wdGlvbnNcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlfVxuICAgICAqL1xuICAgIGZldGNoKHVybCkge1xuICAgICAgICBpZiAodXJsIGluc3RhbmNlb2YgVVJMKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cmwgIT09IHVuZGVmaW5lZCAmJiB1cmwgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHVybCA9IHZhbGlkYXRlU3RyaW5nKHVybCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBmZXRjaERhdGEuY2FsbCh0aGlzLCB1cmwpLnRoZW4oKG1hcCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgaXNPYmplY3QobWFwKSB8fFxuICAgICAgICAgICAgICAgICAgICBpc0FycmF5KG1hcCkgfHxcbiAgICAgICAgICAgICAgICAgICAgbWFwIGluc3RhbmNlb2YgU2V0IHx8XG4gICAgICAgICAgICAgICAgICAgIG1hcCBpbnN0YW5jZW9mIE1hcFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmltcG9ydE9wdGlvbnMobWFwKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJpbnZhbGlkIHJlc3BvbnNlXCIpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgICAqL1xuICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgICAgICBjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuICAgICAgICAgICAgLy8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyc2VTbG90c1RvT3B0aW9ucy5jYWxsKHRoaXMpO1xuICAgICAgICBhdHRhY2hSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuICAgICAgICB1cGRhdGVQb3BwZXIuY2FsbCh0aGlzKTtcblxuICAgICAgICBuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG4gICAgICAgICAgICBnYXRoZXJTdGF0ZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgZm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgfSkucnVuKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiB7dm9pZH1cbiAgICAgKi9cbiAgICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICAgICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG4gICAgICAgIC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG4gICAgICAgIGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW1wb3J0IFNlbGVjdCBPcHRpb25zIGZyb20gZGF0YXNldFxuICAgICAqIE5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHRoZSBjb250cm9sIGRlZmF1bHRzL29wdGlvbnNcbiAgICAgKlxuICAgICAqIEBzaW5jZSAwLjE2LjBcbiAgICAgKiBAcGFyYW0ge2FycmF5fG9iamVjdHxNYXB8U2V0fSBkYXRhXG4gICAgICogQHJldHVybiB7U2VsZWN0fVxuICAgICAqIEB0aHJvd3Mge0Vycm9yfSBtYXAgaXMgbm90IGl0ZXJhYmxlXG4gICAgICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgbGFiZWwgY29uZmlndXJhdGlvblxuICAgICAqL1xuICAgIGltcG9ydE9wdGlvbnMoZGF0YSkge1xuICAgICAgICBjb25zdCBtYXBwaW5nT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZ1wiLCB7fSk7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gbWFwcGluZ09wdGlvbnM/LltcInNlbGVjdG9yXCJdO1xuICAgICAgICBjb25zdCBsYWJlbFRlbXBsYXRlID0gbWFwcGluZ09wdGlvbnM/LltcImxhYmVsVGVtcGxhdGVcIl07XG4gICAgICAgIGNvbnN0IHZhbHVlVGVtcGxhdGUgPSBtYXBwaW5nT3B0aW9ucz8uW1widmFsdWVUZW1wbGF0ZVwiXTtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gbWFwcGluZ09wdGlvbnM/LltcImZpbHRlclwiXTtcblxuICAgICAgICBsZXQgZmxhZyA9IGZhbHNlO1xuICAgICAgICBpZiAobGFiZWxUZW1wbGF0ZSA9PT0gXCJcIikge1xuICAgICAgICAgICAgYWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgXCJlbXB0eSBsYWJlbCB0ZW1wbGF0ZVwiKTtcbiAgICAgICAgICAgIGZsYWcgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlVGVtcGxhdGUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIFwiZW1wdHkgdmFsdWUgdGVtcGxhdGVcIik7XG4gICAgICAgICAgICBmbGFnID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmbGFnID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIGxhYmVsIGNvbmZpZ3VyYXRpb25cIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtYXAgPSBidWlsZE1hcChkYXRhLCBzZWxlY3RvciwgbGFiZWxUZW1wbGF0ZSwgdmFsdWVUZW1wbGF0ZSwgZmlsdGVyKTtcblxuICAgICAgICBjb25zdCBvcHRpb25zID0gW107XG4gICAgICAgIGlmICghaXNJdGVyYWJsZShtYXApKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJtYXAgaXMgbm90IGl0ZXJhYmxlXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmlzaWJpbGl0eSA9IFwidmlzaWJsZVwiO1xuXG4gICAgICAgIG1hcC5mb3JFYWNoKChsYWJlbCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIG9wdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBydW5Bc09wdGlvbkxlbmd0aENoYW5nZWQuY2FsbCh0aGlzLCBtYXAuc2l6ZSk7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uKFwib3B0aW9uc1wiLCBvcHRpb25zKTtcblxuICAgICAgICBmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLW9wdGlvbnMtc2V0XCIsIHtcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uU2VsZWN0fVxuICAgICAqL1xuICAgIGNhbGNBbmRTZXRPcHRpb25zRGltZW5zaW9uKCkge1xuICAgICAgICBjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbi5jYWxsKHRoaXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0VGFnKCkge1xuICAgICAgICByZXR1cm4gXCJtb25zdGVyLXNlbGVjdFwiO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuICAgICAgICByZXR1cm4gW1NlbGVjdFN0eWxlU2hlZXRdO1xuICAgIH1cbn1cblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBwYXNzIGEgVVJMIHRvIHRoaXMgc2VsZWN0LlxuICpcbiAqIGBgYFxuICogPG1vbnN0ZXItc2VsZWN0IGRhdGEtbW9uc3Rlci11cmw9XCJodHRwczovL2V4YW1wbGUuY29tL1wiPjwvbW9uc3Rlci1zZWxlY3Q+XG4gKiBgYGBcbiAqXG4gKiBAcHJpdmF0ZVxuICogQGRlcHJlY2F0ZWQgMjAyNC0wMS0yMSAoeW91IHNob3VsZCB1c2UgZGF0YS1tb25zdGVyLW9wdGlvbi0uLi4pXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cygpIHtcbiAgICBjb25zdCBvcHRpb25zID0ge307XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLXNlbGVjdGVkLXRlbXBsYXRlXCIpO1xuICAgIGlmIChpc1N0cmluZyh0ZW1wbGF0ZSkpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zW1widGVtcGxhdGVNYXBwaW5nXCJdKSBvcHRpb25zW1widGVtcGxhdGVNYXBwaW5nXCJdID0ge307XG5cbiAgICAgICAgc3dpdGNoICh0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgY2FzZSBcInN1bW1hcnlcIjpcbiAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0XCI6XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tcInRlbXBsYXRlTWFwcGluZ1wiXVtcInNlbGVjdGVkXCJdID0gZ2V0U3VtbWFyeVRlbXBsYXRlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwic2VsZWN0ZWRcIjpcbiAgICAgICAgICAgICAgICBvcHRpb25zW1widGVtcGxhdGVNYXBwaW5nXCJdW1wic2VsZWN0ZWRcIl0gPSBnZXRTZWxlY3Rpb25UZW1wbGF0ZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBhZGRBdHRyaWJ1dGVUb2tlbihcbiAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgQVRUUklCVVRFX0VSUk9STUVTU0FHRSxcbiAgICAgICAgICAgICAgICAgICAgXCJpbnZhbGlkIHRlbXBsYXRlLCB1c2Ugc3VtbWFyeSBvciBzZWxlY3RlZFwiLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhdHRhY2hSZXNpemVPYnNlcnZlcigpIHtcbiAgICAvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcbiAgICB0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuICAgICAgICBpZiAodGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSBpbnN0YW5jZW9mIERlYWRNYW5zU3dpdGNoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0udG91Y2goKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdID0gbmV3IERlYWRNYW5zU3dpdGNoKDIwMCwgKCkgPT4ge1xuICAgICAgICAgICAgdXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG4gICAgICAgICAgICBkZWxldGUgdGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKHRoaXMucGFyZW50RWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlcigpIHtcbiAgICBpZiAodGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gaW5zdGFuY2VvZiBSZXNpemVPYnNlcnZlcikge1xuICAgICAgICB0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5kaXNjb25uZWN0KCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25UZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gYDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwic2VsZWN0aW9uIHBhdGg6c2VsZWN0aW9uXCIgcm9sZT1cInNlYXJjaFwiXG4gICAgICAgICAgICA+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgcm9sZT1cInNlYXJjaGJveFwiXG4gICAgICAgICAgICAgICAgICAgIHBhcnQ9XCJpbmxpbmUtZmlsdGVyXCIgbmFtZT1cImlubGluZS1maWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICA+PGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bWVzc2FnZXMuY29udHJvbFwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+YDtcbn1cblxuZnVuY3Rpb24gZ2V0U3VtbWFyeVRlbXBsYXRlKCkge1xuICAgIHJldHVybiBgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInNlbGVjdGlvblwiIHJvbGU9XCJzZWFyY2hcIj5cbiAgICA8aW5wdXQgdHlwZT1cInRleHRcIiByb2xlPVwic2VhcmNoYm94XCJcbiAgICAgICAgICAgcGFydD1cImlubGluZS1maWx0ZXJcIiBuYW1lPVwiaW5saW5lLWZpbHRlclwiXG4gICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiZmlsdGVyXCJcbiAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICA+XG4gICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bWVzc2FnZXMuc2VsZWN0ZWRcIj48L2Rpdj4gICAgXG48L2Rpdj5gO1xufVxuXG4vKipcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBwYXJzZVNsb3RzVG9PcHRpb25zKCkge1xuICAgIGxldCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuICAgIGlmICghaXNJdGVyYWJsZShvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0gW107XG4gICAgfVxuXG4gICAgbGV0IGNvdW50ZXIgPSAxO1xuICAgIGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIFwiZGl2XCIpLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgbGV0IHZhbHVlID0gKGNvdW50ZXIrKykudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IHZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcblxuICAgICAgICBpZiAobm9kZS5oYXNBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItdmFsdWVcIikpIHtcbiAgICAgICAgICAgIHZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItdmFsdWVcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIikge1xuICAgICAgICAgICAgdmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYWJlbCA9IG5vZGUub3V0ZXJIVE1MO1xuXG4gICAgICAgIG9wdGlvbnMucHVzaCh7XG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgdmlzaWJpbGl0eSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBydW5Bc09wdGlvbkxlbmd0aENoYW5nZWQuY2FsbCh0aGlzLCBvcHRpb25zLmxlbmd0aCk7XG4gICAgdGhpcy5zZXRPcHRpb24oXCJvcHRpb25zXCIsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIHdhaXQgdW50aWwgYWxsIG9wdGlvbnMgYXJlIGZpbmlzaGVkIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2ludH0gdGFyZ2V0TGVuZ3RoXG4gKi9cbmZ1bmN0aW9uIHJ1bkFzT3B0aW9uTGVuZ3RoQ2hhbmdlZCh0YXJnZXRMZW5ndGgpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGlmICghc2VsZltvcHRpb25zRWxlbWVudFN5bWJvbF0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNhbGxiYWNrID0gZnVuY3Rpb24gKG11dGF0aW9uc0xpc3QsIG9ic2VydmVyKSB7XG4gICAgICAgIGNvbnN0IHJ1biA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9uc0xpc3QpIHtcbiAgICAgICAgICAgIGlmIChtdXRhdGlvbi50eXBlID09PSBcImNoaWxkTGlzdFwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChydW4gPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gc2VsZltvcHRpb25zRWxlbWVudFN5bWJvbF0ucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICAgICBgZGl2WyR7QVRUUklCVVRFX1JPTEV9PW9wdGlvbl1gLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gdGFyZ2V0TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tPcHRpb25TdGF0ZS5jYWxsKHNlbGYpO1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKHNlbGZbb3B0aW9uc0VsZW1lbnRTeW1ib2xdLCB7XG4gICAgICAgIGF0dHJpYnV0ZXM6IGZhbHNlLFxuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgIHN1YnRyZWU6IHRydWUsXG4gICAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkU2VsZWN0aW9uTGFiZWwodmFsdWUpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG8gPSBvcHRpb25zPy5baV07XG4gICAgICAgIGlmIChpc09iamVjdChvKSAmJiBvPy5bXCJ2YWx1ZVwiXSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBvPy5bXCJsYWJlbFwiXTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1ByaW1pdGl2ZShvKSAmJiBvID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG87XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gdmFsdWUgZm91bmRcbiAqL1xuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uTGFiZWwodmFsdWUpIHtcbiAgICBjb25zdCBjYWxsYmFjayA9IHRoaXMuZ2V0T3B0aW9uKFwiZm9ybWF0dGVyLnNlbGVjdGlvblwiKTtcbiAgICBpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBjYWxsYmFjay5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgaWYgKGlzU3RyaW5nKGxhYmVsKSkgcmV0dXJuIGxhYmVsO1xuICAgIH1cblxuICAgIGlmIChpc1N0cmluZyh2YWx1ZSkgfHwgaXNJbnRlZ2VyKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHMuY2Fubm90LWJlLWxvYWRlZFwiLCB2YWx1ZSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVRvZ2dsZUtleWJvYXJkRXZlbnRzKGV2ZW50KSB7XG4gICAgc3dpdGNoIChldmVudD8uW1wiY29kZVwiXSkge1xuICAgICAgICBjYXNlIFwiRXNjYXBlXCI6XG4gICAgICAgICAgICB0b2dnbGUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlNwYWNlXCI6XG4gICAgICAgICAgICB0b2dnbGUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkFycm93RG93blwiOlxuICAgICAgICAgICAgc2hvdy5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgYWN0aXZhdGVDdXJyZW50T3B0aW9uLmNhbGwodGhpcywgRk9DVVNfRElSRUNUSU9OX0RPV04pO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQXJyb3dVcFwiOlxuICAgICAgICAgICAgaGlkZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE1LjBcbiAqIEBwcml2YXRlXG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25PYnNlcnZlcigpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIHNlbGYuYXR0YWNoT2JzZXJ2ZXIoXG4gICAgICAgIG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVJMThuKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdC5jYWxsKHNlbGYpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzZXRTdW1tYXJ5QW5kQ29udHJvbFRleHQuY2FsbChzZWxmKTtcbiAgICAgICAgICAgIH0pLnJ1bigpO1xuICAgICAgICB9KSxcbiAgICApO1xufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0VHJhbnNsYXRpb24oKSB7XG4gICAgY29uc3QgdHJhbnNsYXRpb24gPSBuZXcgVHJhbnNsYXRpb25zKFwiZW5cIikuYXNzaWduVHJhbnNsYXRpb25zKFxuICAgICAgICB0aGlzLmdldE9wdGlvbihcImxhYmVsc1wiLCB7fSksXG4gICAgKTtcblxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRvYyA9IGdldERvY3VtZW50VHJhbnNsYXRpb25zKCk7XG4gICAgICAgIHRyYW5zbGF0aW9uLmxvY2FsZSA9IGRvYy5sb2NhbGU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgIH1cblxuICAgIHJldHVybiB0cmFuc2xhdGlvbjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybnMge3N0cmluZ3wqfVxuICovXG5mdW5jdGlvbiBzZXRTdW1tYXJ5QW5kQ29udHJvbFRleHQoKSB7XG4gICAgY29uc3QgdHJhbnNsYXRpb25zID0gZ2V0RGVmYXVsdFRyYW5zbGF0aW9uLmNhbGwodGhpcyk7XG4gICAgY29uc3Qgc2VsZWN0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuXG4gICAgY29uc3QgdGV4dCA9IHRyYW5zbGF0aW9ucy5nZXRQbHVyYWxSdWxlVGV4dChcbiAgICAgICAgXCJzdW1tYXJ5LXRleHRcIixcbiAgICAgICAgc2VsZWN0aW9ucy5sZW5ndGgsXG4gICAgICAgIFwiXCIsXG4gICAgKTtcblxuICAgIGNvbnN0IHNlbGVjdGVkVGV4dCA9IG5ldyBGb3JtYXR0ZXIoe1xuICAgICAgICBjb3VudDogU3RyaW5nKHNlbGVjdGlvbnMubGVuZ3RoKSxcbiAgICB9KS5mb3JtYXQodGV4dCk7XG5cbiAgICB0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLnNlbGVjdGVkXCIsIHNlbGVjdGVkVGV4dCk7XG5cbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5nZXRPcHRpb24oXCJtZXNzYWdlcy5jb250cm9sXCIpO1xuICAgIGNvbnN0IG1zZyA9IHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLnNlbGVjdC1hbi1vcHRpb25cIik7XG5cbiAgICBpZiAoXG4gICAgICAgIGN1cnJlbnQgPT09IFwiXCIgfHxcbiAgICAgICAgY3VycmVudCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIGN1cnJlbnQgPT09IG1zZyB8fFxuICAgICAgICBjdXJyZW50ID09PSBudWxsXG4gICAgKSB7XG4gICAgICAgIGlmIChzZWxlY3Rpb25zID09PSB1bmRlZmluZWQgfHwgc2VsZWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZXMuY29udHJvbFwiLCBtc2cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5jb250cm9sXCIsIFwiXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtOb2RlTGlzdH1cbiAqL1xuZnVuY3Rpb24gZ2V0T3B0aW9uRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXNbb3B0aW9uc0VsZW1lbnRTeW1ib2xdLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGBbJHtBVFRSSUJVVEVfUk9MRX09b3B0aW9uXWAsXG4gICAgKTtcbn1cblxuLyoqXG4gKiBXaXRoIHRoZSBoZWxwIG9mIHRoaXMgZmlsdGVyIGNhbGxiYWNrLCB2YWx1ZXMgY2FuIGJlIGZpbHRlcmVkIG91dC4gT25seSBpZiB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgdGhlIHZhbHVlIGlzIHRha2VuIGZvciB0aGUgbWFwLlxuICpcbiAqIEBjYWxsYmFjayBNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5leGFtcGxlRmlsdGVyQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgIEtleVxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc2VlIE1vbnN0ZXIuRGF0YS5idWlsZE1hcFxuICovXG5cbi8qKlxuICpcbiAqIEBjYWxsYmFjayBNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5mb3JtYXR0ZXJTZWxlY3Rpb25DYWxsYmFja1xuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZVxuICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHNlZSBNb25zdGVyLkRhdGEuYnVpbGRNYXBcbiAqL1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNhbGNBbmRTZXRPcHRpb25zRGltZW5zaW9uKCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25FbGVtZW50cy5jYWxsKHRoaXMpO1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXNbb3B0aW9uc0VsZW1lbnRTeW1ib2xdO1xuICAgIGlmICghKGNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIG9wdGlvbnMgaW5zdGFuY2VvZiBOb2RlTGlzdCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCB2aXNpYmxlID0gMDtcbiAgICBsZXQgb3B0aW9uSGVpZ2h0ID0gMDtcbiAgICBjb25zdCBtYXggPSB0aGlzLmdldE9wdGlvbihcInNob3dNYXhPcHRpb25zXCIsIDEwKTtcblxuICAgIGxldCBzY3JvbGxGbGFnID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBbLCBvcHRpb25dIG9mIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMpKSB7XG4gICAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRHbG9iYWwoKS5nZXRDb21wdXRlZFN0eWxlKG9wdGlvbik7XG4gICAgICAgIGlmIChjb21wdXRlZFN0eWxlLmRpc3BsYXkgPT09IFwibm9uZVwiKSBjb250aW51ZTtcblxuICAgICAgICBsZXQgaCA9IG9wdGlvbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgICAgIGggKz0gcGFyc2VJbnQoY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwibWFyZ2luLXRvcFwiKSwgMTApO1xuICAgICAgICBoICs9IHBhcnNlSW50KGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIm1hcmdpbi1ib3R0b21cIiksIDEwKTtcbiAgICAgICAgb3B0aW9uSGVpZ2h0ICs9IGg7XG5cbiAgICAgICAgdmlzaWJsZSsrO1xuXG4gICAgICAgIGlmICh2aXNpYmxlID4gbWF4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2aXNpYmxlID4gbWF4KSB7XG4gICAgICAgIHZpc2libGUgPSBtYXg7XG4gICAgICAgIHNjcm9sbEZsYWcgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2aXNpYmxlID09PSAwKSB7XG4gICAgICAgIGlmICh0aGlzLmdldE9wdGlvbihcIm9wdGlvbnNcIikubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNldE9wdGlvbihcbiAgICAgICAgICAgICAgICBcIm1lc3NhZ2VzLmVtcHR5T3B0aW9uc1wiLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLm5vLW9wdGlvbnMtYXZhaWxhYmxlXCIpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldE9wdGlvbihcImZpbHRlci5tb2RlXCIpID09PSBGSUxURVJfTU9ERV9ESVNBQkxFRCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9uKFxuICAgICAgICAgICAgICAgICAgICBcIm1lc3NhZ2VzLmVtcHR5T3B0aW9uc1wiLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE9wdGlvbihcImxhYmVscy5uby1vcHRpb25zLWF2YWlsYWJsZVwiKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE9wdGlvbihcbiAgICAgICAgICAgICAgICAgICAgXCJtZXNzYWdlcy5lbXB0eU9wdGlvbnNcIixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb24oXCJsYWJlbHMubm8tb3B0aW9ucy1mb3VuZFwiKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXNbbm9PcHRpb25zQXZhaWxhYmxlRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImQtbm9uZVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW25vT3B0aW9uc0F2YWlsYWJsZUVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJkLW5vbmVcIik7XG4gICAgfVxuXG4gICAgY29uc3Qgc3R5bGVzID0gZ2V0R2xvYmFsKCkuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzW29wdGlvbnNFbGVtZW50U3ltYm9sXSk7XG4gICAgbGV0IHBhZGRpbmcgPSBwYXJzZUludChzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmctdG9wXCIpLCAxMCk7XG4gICAgcGFkZGluZyArPSBwYXJzZUludChzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmctYm90dG9tXCIpLCAxMCk7XG5cbiAgICBsZXQgbWFyZ2luID0gcGFyc2VJbnQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoXCJtYXJnaW4tdG9wXCIpLCAxMCk7XG4gICAgbWFyZ2luICs9IHBhcnNlSW50KHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWFyZ2luLWJvdHRvbVwiKSwgMTApO1xuXG4gICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gb3B0aW9uSGVpZ2h0ICsgcGFkZGluZyArIG1hcmdpbjtcbiAgICBjb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gYCR7Y29udGFpbmVySGVpZ2h0fXB4YDtcblxuICAgIGlmIChzY3JvbGxGbGFnID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnRhaW5lci5zdHlsZS5vdmVyZmxvd1kgPSBcInNjcm9sbFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRhaW5lci5zdHlsZS5vdmVyZmxvd1kgPSBcImF1dG9cIjtcbiAgICB9XG5cbiAgICBjb25zdCBkb21SZWN0ID0gdGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICB0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLndpZHRoID0gYCR7ZG9tUmVjdC53aWR0aH1weGA7XG4gICAgY29udGFpbmVyLnN0eWxlLm92ZXJmbG93WCA9IFwiYXV0b1wiO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyZWN0aW9uXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBhY3RpdmF0ZUN1cnJlbnRPcHRpb24oZGlyZWN0aW9uKSB7XG4gICAgaWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcbiAgICB9XG5cbiAgICBsZXQgZm9jdXNlZCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGBbJHtBVFRSSUJVVEVfUFJFRklYfWZvY3VzZWRdYCk7XG5cbiAgICBpZiAoXG4gICAgICAgICEoZm9jdXNlZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB8fFxuICAgICAgICBmb2N1c2VkLm1hdGNoZXMoXCJbZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9aGlkZGVuXVwiKVxuICAgICkge1xuICAgICAgICBmb3IgKGNvbnN0IFssIGVdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgICAgICAgdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoYFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dYCksXG4gICAgICAgICkpIHtcbiAgICAgICAgICAgIGlmIChlLm1hdGNoZXMoXCJbZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9dmlzaWJsZV1cIikpIHtcbiAgICAgICAgICAgICAgICBmb2N1c2VkID0gZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09IEZPQ1VTX0RJUkVDVElPTl9ET1dOKSB7XG4gICAgICAgICAgICB3aGlsZSAoZm9jdXNlZC5uZXh0U2libGluZykge1xuICAgICAgICAgICAgICAgIGZvY3VzZWQgPSBmb2N1c2VkLm5leHRTaWJsaW5nO1xuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBmb2N1c2VkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNlZC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpICYmXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzZWQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSA9PT0gXCJvcHRpb25cIiAmJlxuICAgICAgICAgICAgICAgICAgICBmb2N1c2VkLm1hdGNoZXMoXCJbZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9dmlzaWJsZV1cIikgJiZcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNlZC5tYXRjaGVzKFwiOm5vdChbZGF0YS1tb25zdGVyLWZpbHRlcmVkPXRydWVdKVwiKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHdoaWxlIChmb2N1c2VkLnByZXZpb3VzU2libGluZykge1xuICAgICAgICAgICAgICAgIGZvY3VzZWQgPSBmb2N1c2VkLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzZWQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuICAgICAgICAgICAgICAgICAgICBmb2N1c2VkLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgJiZcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNlZC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpID09PSBcIm9wdGlvblwiICYmXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzZWQubWF0Y2hlcyhcIltkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eT12aXNpYmxlXVwiKSAmJlxuICAgICAgICAgICAgICAgICAgICBmb2N1c2VkLm1hdGNoZXMoXCI6bm90KFtkYXRhLW1vbnN0ZXItZmlsdGVyZWQ9dHJ1ZV0pXCIpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvdW5kID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwibm90IGZvdW5kXCIpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZm9jdXMoKSk7XG4gICAgICAgICAgICAgICAgZm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcbiAgICAgICAgaWYgKGZvY3VzZWQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5zaGFkb3dSb290XG4gICAgICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwoYFske0FUVFJJQlVURV9QUkVGSVh9Zm9jdXNlZF1gKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGUucmVtb3ZlQXR0cmlidXRlKGAke0FUVFJJQlVURV9QUkVGSVh9Zm9jdXNlZGApO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmb2N1c2VkLmZvY3VzKCk7XG4gICAgICAgICAgICBmb2N1c2VkLnNldEF0dHJpYnV0ZShgJHtBVFRSSUJVVEVfUFJFRklYfWZvY3VzZWRgLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH0pLnJ1bigpLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZmlsdGVyT3B0aW9ucygpIHtcbiAgICBuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG4gICAgICAgIGxldCBmaWx0ZXJWYWx1ZTtcblxuICAgICAgICBzd2l0Y2ggKHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLnBvc2l0aW9uXCIpKSB7XG4gICAgICAgICAgICBjYXNlIEZJTFRFUl9QT1NJVElPTl9JTkxJTkU6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSA9IHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0udmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEZJTFRFUl9QT1NJVElPTl9QT1BQRVI6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmICh0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSA9IHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0udmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwib3B0aW9uc1wiKTtcbiAgICAgICAgZm9yIChjb25zdCBbaSwgb3B0aW9uXSBvZiBPYmplY3QuZW50cmllcyhvcHRpb25zKSkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZmlsdGVyVmFsdWUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9uKGBvcHRpb25zLiR7aX0uZmlsdGVyZWRgLCBcInRydWVcIik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9uKGBvcHRpb25zLiR7aX0uZmlsdGVyZWRgLCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSlcbiAgICAgICAgLnJ1bigpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIG5ldyBQcm9jZXNzaW5nKDEwMCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNhbGNBbmRTZXRPcHRpb25zRGltZW5zaW9uLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgZm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnJ1bigpXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgYWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcbiAgICAgICAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUZpbHRlcktleWJvYXJkRXZlbnRzKGV2ZW50KSB7XG4gICAgY29uc3Qgc2hpZnRLZXkgPSBldmVudD8uW1wic2hpZnRLZXlcIl07XG5cbiAgICBzd2l0Y2ggKGV2ZW50Py5bXCJjb2RlXCJdKSB7XG4gICAgICAgIGNhc2UgXCJUYWJcIjpcbiAgICAgICAgICAgIGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9ET1dOKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkVzY2FwZVwiOlxuICAgICAgICAgICAgdG9nZ2xlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJUYWJcIiAmJiBzaGlmdEtleSA9PT0gdHJ1ZTpcbiAgICAgICAgY2FzZSBcIkFycm93VXBcIjpcbiAgICAgICAgICAgIGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9VUCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJUYWJcIiAmJiAhc2hpZnRLZXk6XG4gICAgICAgIGNhc2UgXCJBcnJvd0Rvd25cIjpcbiAgICAgICAgICAgIGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9ET1dOKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmxhenlMb2FkXCIpID09PSB0cnVlICYmXG4gICAgICAgICAgICAgICAgdGhpc1tsYXp5TG9hZERvbmVTeW1ib2xdICE9PSB0cnVlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsaWNrKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGhhbmRsZUZpbHRlcktleUV2ZW50cy5jYWxsKHRoaXMpO1xuICAgIH1cbn1cblxuLyoqXG4gKlxuXG4gKi9cblxuLyoqXG4gKiBNZXRob2QgaGFuZGxlRmlsdGVyS2V5RXZlbnRzIGlzIHVzZWQgdG8gaGFuZGxlIGZpbHRlciBrZXkgZXZlbnRzLlxuICogRGVib3VuY2UgaXMgdXNlZCB0byBwcmV2ZW50IG11bHRpcGxlIGNhbGxzLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgaGFuZGxlRmlsdGVyS2V5RXZlbnRzXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHt2b2lkfSBUaGlzIG1ldGhvZCBkb2VzIG5vdCByZXR1cm4gYW55dGhpbmcuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUZpbHRlcktleUV2ZW50cygpIHtcbiAgICBpZiAodGhpc1trZXlGaWx0ZXJFdmVudFN5bWJvbF0gaW5zdGFuY2VvZiBEZWFkTWFuc1N3aXRjaCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpc1trZXlGaWx0ZXJFdmVudFN5bWJvbF0udG91Y2goKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXNba2V5RmlsdGVyRXZlbnRTeW1ib2xdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1trZXlGaWx0ZXJFdmVudFN5bWJvbF0gPSBuZXcgRGVhZE1hbnNTd2l0Y2goMjAwLCAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmdldE9wdGlvbihcImZpbHRlci5tb2RlXCIpICE9PSBGSUxURVJfTU9ERV9SRU1PVEUpIHtcbiAgICAgICAgICAgIGZpbHRlck9wdGlvbnMuY2FsbCh0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpbHRlckZyb21SZW1vdGUuY2FsbCh0aGlzKS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGV0ZSB0aGlzW2tleUZpbHRlckV2ZW50U3ltYm9sXTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBmaWx0ZXJGcm9tUmVtb3RlKCkge1xuICAgIGlmICghKHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvblVybCA9IHRoaXMuZ2V0T3B0aW9uKFwidXJsXCIpO1xuICAgIGlmICghb3B0aW9uVXJsKSB7XG4gICAgICAgIGFkZEF0dHJpYnV0ZVRva2VuKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG4gICAgICAgICAgICBcIk1pc3NpbmcgVVJMIGZvciBSZW1vdGUgRmlsdGVyLlwiLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSBlbmNvZGVVUkkoXG4gICAgICAgICAgICB0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLnZhbHVlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICk7XG4gICAgICAgIGxldCB1cmwgPSBvcHRpb25Vcmw7XG4gICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB1cmwgPSBuZXcgRm9ybWF0dGVyKHtmaWx0ZXI6IGZpbHRlclZhbHVlfSkuZm9ybWF0KG9wdGlvblVybCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZldGNoKHVybClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjaGVja09wdGlvblN0YXRlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH0pLnJ1bigpO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaGFuZGxlT3B0aW9uS2V5Ym9hcmRFdmVudHMoZXZlbnQpIHtcbiAgICBjb25zdCBzaGlmdEtleSA9IGV2ZW50Py5bXCJzaGlmdEtleVwiXTtcblxuICAgIHN3aXRjaCAoZXZlbnQ/LltcImNvZGVcIl0pIHtcbiAgICAgICAgY2FzZSBcIkVzY2FwZVwiOlxuICAgICAgICAgICAgdG9nZ2xlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJFbnRlclwiOlxuICAgICAgICBjYXNlIFwiU3BhY2VcIjpcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBwYXRoPy5bMF07XG5cbiAgICAgICAgICAgIGZpcmVFdmVudChlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIiksIFwiY2xpY2tcIik7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIlRhYlwiICYmIHNoaWZ0S2V5ID09PSB0cnVlOlxuICAgICAgICBjYXNlIFwiQXJyb3dVcFwiOlxuICAgICAgICAgICAgYWN0aXZhdGVDdXJyZW50T3B0aW9uLmNhbGwodGhpcywgRk9DVVNfRElSRUNUSU9OX1VQKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiVGFiXCIgJiYgIXNoaWZ0S2V5OlxuICAgICAgICBjYXNlIFwiQXJyb3dMZWZ0XCI6XG4gICAgICAgIGNhc2UgXCJBcnJvd1JpZ2h0XCI6XG4gICAgICAgICAgICAvLyBoYW5kbGVkIGJ5IHRyZWUgc2VsZWN0XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkFycm93RG93blwiOlxuICAgICAgICAgICAgYWN0aXZhdGVDdXJyZW50T3B0aW9uLmNhbGwodGhpcywgRk9DVVNfRElSRUNUSU9OX0RPV04pO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc3QgcCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuICAgICAgICAgICAgaWYgKHA/LlswXSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb2N1c0ZpbHRlci5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRGaWx0ZXJNb2RlKCkge1xuICAgIHN3aXRjaCAodGhpcy5nZXRPcHRpb24oXCJmaWx0ZXIubW9kZVwiKSkge1xuICAgICAgICBjYXNlIEZJTFRFUl9NT0RFX09QVElPTlM6XG4gICAgICAgICAgICByZXR1cm4gRklMVEVSX01PREVfT1BUSU9OUztcbiAgICAgICAgY2FzZSBGSUxURVJfTU9ERV9SRU1PVEU6XG4gICAgICAgICAgICByZXR1cm4gRklMVEVSX01PREVfUkVNT1RFO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIEZJTFRFUl9NT0RFX0RJU0FCTEVEO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBibHVyRmlsdGVyKCkge1xuICAgIGlmICghKHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChnZXRGaWx0ZXJNb2RlLmNhbGwodGhpcykgPT09IEZJTFRFUl9NT0RFX0RJU0FCTEVEKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzW3BvcHBlckZpbHRlckNvbnRhaW5lckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG4gICAgdGhpc1twb3BwZXJGaWx0ZXJDb250YWluZXJFbGVtZW50U3ltYm9sXS5ibHVyKCk7XG5cbiAgICB0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG4gICAgdGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5ibHVyKCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBmb2N1c09wdGlvbnNcbiAqL1xuZnVuY3Rpb24gZm9jdXNQb3BwZXJGaWx0ZXIoZm9jdXNPcHRpb25zKSB7XG4gICAgdGhpc1twb3BwZXJGaWx0ZXJDb250YWluZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiZC1ub25lXCIpO1xuICAgIHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcbiAgICB0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG4gICAgdGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiZC1ub25lXCIpO1xuXG4gICAgaWYgKCEodGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuICAgICAgICBhZGRBdHRyaWJ1dGVUb2tlbihcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuICAgICAgICAgICAgXCJNaXNzaW5nIFBvcHBlciBGaWx0ZXIgRWxlbWVudC5cIixcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHZpc2liaWxpdHkgaXMgc2V0IHRvIHZpc2libGUsIGJlY2F1c2UgZm9jdXMoKSBkb2VzIG5vdCB3b3JrIG9uIGludmlzaWJsZSBlbGVtZW50c1xuICAgIC8vIGFuZCB0aGUgY2xhc3MgZGVmaW5pdGlvbiBpcyBhc3NpZ25lZCBsYXRlciBpbiB0aGUgcHJvY2Vzc2luZ1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoZm9jdXNPcHRpb25zID09PSB1bmRlZmluZWQgfHwgZm9jdXNPcHRpb25zID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdLmZvY3VzKGZvY3VzT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9LCAxMDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZm9jdXNPcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGZvY3VzSW5saW5lRmlsdGVyKGZvY3VzT3B0aW9ucykge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcIm9wdGlvbnNcIik7XG4gICAgaWYgKFxuICAgICAgICAoIWlzQXJyYXkob3B0aW9ucykgfHwgb3B0aW9ucy5sZW5ndGggPT09IDApICYmXG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLm1vZGVcIikgIT09IEZJTFRFUl9NT0RFX1JFTU9URVxuICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpc1twb3BwZXJGaWx0ZXJDb250YWluZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiZC1ub25lXCIpO1xuICAgIHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcbiAgICB0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJkLW5vbmVcIik7XG5cbiAgICAvLyB2aXNpYmlsaXR5IGlzIHNldCB0byB2aXNpYmxlLCBiZWNhdXNlIGZvY3VzKCkgZG9lcyBub3Qgd29yayBvbiBpbnZpc2libGUgZWxlbWVudHNcbiAgICAvLyBhbmQgdGhlIGNsYXNzIGRlZmluaXRpb24gaXMgYXNzaWduZWQgbGF0ZXIgaW4gdGhlIHByb2Nlc3NpbmdcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKGZvY3VzT3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IGZvY3VzT3B0aW9ucyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5mb2N1cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5mb2N1cyhmb2N1c09wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfSwgMTAwKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBmb2N1c0ZpbHRlcihmb2N1c09wdGlvbnMpIHtcbiAgICBpZiAoZ2V0RmlsdGVyTW9kZS5jYWxsKHRoaXMpID09PSBGSUxURVJfTU9ERV9ESVNBQkxFRCkge1xuICAgICAgICB0aGlzW3BvcHBlckZpbHRlckNvbnRhaW5lckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJkLW5vbmVcIik7XG4gICAgICAgIHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImQtbm9uZVwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmdldE9wdGlvbihcImZpbHRlci5wb3NpdGlvblwiKSA9PT0gRklMVEVSX1BPU0lUSU9OX0lOTElORSkge1xuICAgICAgICByZXR1cm4gZm9jdXNJbmxpbmVGaWx0ZXIuY2FsbCh0aGlzLCBmb2N1c09wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBmb2N1c1BvcHBlckZpbHRlci5jYWxsKHRoaXMsIGZvY3VzT3B0aW9ucyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2FycmF5fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKi9cbmZ1bmN0aW9uIGdhdGhlclN0YXRlKCkge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldE9wdGlvbihcInR5cGVcIik7XG4gICAgaWYgKFtcInJhZGlvXCIsIFwiY2hlY2tib3hcIl0uaW5kZXhPZih0eXBlKSA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgdHlwZVwiKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IFtdO1xuICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGBpbnB1dFt0eXBlPSR7dHlwZX1dOmNoZWNrZWRgLFxuICAgICk7XG4gICAgZm9yIChjb25zdCBlIG9mIGVsZW1lbnRzKSB7XG4gICAgICAgIHNlbGVjdGlvbi5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiBnZXRTZWxlY3Rpb25MYWJlbC5jYWxsKHRoaXMsIGUudmFsdWUpLFxuICAgICAgICAgICAgdmFsdWU6IGUudmFsdWUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFNlbGVjdGlvblxuICAgICAgICAuY2FsbCh0aGlzLCBzZWxlY3Rpb24pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuICAgICAgICB9KTtcblxuICAgIGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmNsb3NlT25TZWxlY3RcIikgPT09IHRydWUpIHtcbiAgICAgICAgdG9nZ2xlLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICovXG5mdW5jdGlvbiBjbGVhclNlbGVjdGlvbigpIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRPcHRpb24oXCJ0eXBlXCIpO1xuICAgIGlmIChbXCJyYWRpb1wiLCBcImNoZWNrYm94XCJdLmluZGV4T2YodHlwZSkgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIHR5cGVcIik7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcbiAgICB9XG5cbiAgICBzZXRTZWxlY3Rpb25cbiAgICAgICAgLmNhbGwodGhpcywgW10pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuICAgICAgICB9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdCgpIHtcbiAgICAvLyBwcmV2ZW50IG11bHRpcGxlIGNhbGxzXG4gICAgaWYgKHRoaXNbYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXRTeW1ib2xdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpc1thcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbF0gPSAwO1xuICAgIH1cblxuICAgIGlmICh0aGlzW2FyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0U3ltYm9sXSA+IDApIHtcbiAgICAgICAgdGhpc1thcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbF0tLTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdGhpc1thcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbF0rKztcblxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcIm9wdGlvbnNcIik7XG5cbiAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICBvcHRpb25zID09PSBudWxsIHx8XG4gICAgICAgIChpc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMubGVuZ3RoID09PSAwKVxuICAgICkge1xuICAgICAgICBzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwiZW1wdHlcIik7XG5cbiAgICAgICAgaGlkZS5jYWxsKHRoaXMpO1xuXG4gICAgICAgIGxldCBtc2cgPSB0aGlzLmdldE9wdGlvbihcImxhYmVscy5uby1vcHRpb25zLWF2YWlsYWJsZVwiKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmdldE9wdGlvbihcInVybFwiKSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgdGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5sYXp5TG9hZFwiKSA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgdGhpc1tsYXp5TG9hZERvbmVTeW1ib2xdICE9PSB0cnVlXG4gICAgICAgICkge1xuICAgICAgICAgICAgbXNnID0gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHMuY2xpY2stdG8tbG9hZC1vcHRpb25zXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5jb250cm9sXCIsIG1zZyk7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZXMuc3VtbWFyeVwiLCBcIlwiKTtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJzZWxlY3Rpb25cIiwgW10pO1xuICAgICAgICBhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBub09wdGlvbnNBdmFpbGFibGVNZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcInNlbGVjdGlvblwiKTtcbiAgICBpZiAoXG4gICAgICAgIHNlbGVjdGlvbnMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICBzZWxlY3Rpb25zID09PSBudWxsIHx8XG4gICAgICAgIHNlbGVjdGlvbnMubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uKFxuICAgICAgICAgICAgXCJtZXNzYWdlcy5jb250cm9sXCIsXG4gICAgICAgICAgICB0aGlzLmdldE9wdGlvbihcImxhYmVscy5zZWxlY3QtYW4tb3B0aW9uXCIpLFxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZXMuY29udHJvbFwiLCBcIlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLnN1bW1hcnlcIiwgc2V0U3VtbWFyeUFuZENvbnRyb2xUZXh0LmNhbGwodGhpcykpO1xuXG4gICAgbGV0IHVwZGF0ZWQgPSBmYWxzZTtcbiAgICBsZXQgdmFsdWVDb3VudGVyID0gMTtcbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb24/LnZpc2liaWxpdHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb3B0aW9uLnZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcbiAgICAgICAgICAgIHVwZGF0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbj8udmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvcHRpb24/LmxhYmVsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG9wdGlvbi52YWx1ZSA9IGAke3ZhbHVlQ291bnRlcisrfWA7XG4gICAgICAgICAgICBvcHRpb24ubGFiZWwgPSBvcHRpb24udmFsdWU7XG4gICAgICAgICAgICB1cGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbj8udmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb3B0aW9uLnZhbHVlID0gb3B0aW9uLmxhYmVsO1xuICAgICAgICAgICAgdXBkYXRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9uPy5sYWJlbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBvcHRpb24ubGFiZWwgPSBvcHRpb24udmFsdWU7XG4gICAgICAgICAgICB1cGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1cGRhdGVkKSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uKFwib3B0aW9uc1wiLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwic3RhdHVzXCIpO1xuXG4gICAgcmVtb3ZlQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgbm9PcHRpb25zQXZhaWxhYmxlTWVzc2FnZSk7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT3B0aW9uU3RhdGUoKSB7XG4gICAgaWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgWyR7QVRUUklCVVRFX1JPTEV9PW9wdGlvbl0gaW5wdXRgLFxuICAgICk7XG5cbiAgICBsZXQgc2VsZWN0aW9uID0gdGhpcy5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIik7XG4gICAgaWYgKCFpc0FycmF5KHNlbGVjdGlvbikpIHtcbiAgICAgICAgc2VsZWN0aW9uID0gW107XG4gICAgfVxuXG4gICAgY29uc3QgY2hlY2tlZFZhbHVlcyA9IHNlbGVjdGlvbi5tYXAoKGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGEudmFsdWU7XG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IGUgb2YgZWxlbWVudHMpIHtcbiAgICAgICAgaWYgKGNoZWNrZWRWYWx1ZXMuaW5kZXhPZihlLnZhbHVlKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIGlmIChlLmNoZWNrZWQgIT09IHRydWUpIGUuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZS5jaGVja2VkICE9PSBmYWxzZSkgZS5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gY29udmVydFZhbHVlVG9TZWxlY3Rpb24odmFsdWUpIHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSBbXTtcblxuICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgICAgICAgLnNwbGl0KFwiLFwiKVxuICAgICAgICAgICAgLm1hcCgoYSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLnRyaW0oKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKChhKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgIT09IFwiXCI7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoaXNTdHJpbmcodmFsdWUpIHx8IGlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgICAgc2VsZWN0aW9uLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6IGdldFNlbGVjdGlvbkxhYmVsLmNhbGwodGhpcywgdmFsdWUpLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgdiBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgc2VsZWN0aW9uLnB1c2goe1xuICAgICAgICAgICAgICAgIGxhYmVsOiBnZXRTZWxlY3Rpb25MYWJlbC5jYWxsKHRoaXMsIHYpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YWx1ZSA9IHZhbHVlLmpvaW4oXCIsXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIHR5cGVcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2VsZWN0aW9uOiBzZWxlY3Rpb24sXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2FycmF5fSBzZWxlY3Rpb25cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29udmVydFNlbGVjdGlvblRvVmFsdWUoc2VsZWN0aW9uKSB7XG4gICAgY29uc3QgdmFsdWUgPSBbXTtcblxuICAgIGlmIChpc0FycmF5KHNlbGVjdGlvbikpIHtcbiAgICAgICAgZm9yIChjb25zdCBvYmogb2Ygc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gb2JqPy5bXCJ2YWx1ZVwiXTtcbiAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHZhbHVlLnB1c2godik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5wb3AoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWUuam9pbihcIixcIik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7YXJyYXl9IHNlbGVjdGlvblxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIHNldFNlbGVjdGlvbihzZWxlY3Rpb24pIHtcbiAgICBpZiAoaXNTdHJpbmcoc2VsZWN0aW9uKSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VmFsdWVUb1NlbGVjdGlvbi5jYWxsKHRoaXMsIHNlbGVjdGlvbik7XG4gICAgICAgIHNlbGVjdGlvbiA9IHJlc3VsdD8uc2VsZWN0aW9uO1xuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2VsZWN0aW9uID0gW107XG4gICAgfVxuXG4gICAgdGhpcy5zZXRPcHRpb24oXCJzZWxlY3Rpb25cIiwgdmFsaWRhdGVBcnJheShzZWxlY3Rpb24pKTtcbiAgICBjaGVja09wdGlvblN0YXRlLmNhbGwodGhpcyk7XG5cbiAgICB0cnkge1xuICAgICAgICB0aGlzPy5zZXRGb3JtVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItc2VsZWN0ZWRcIiwge1xuICAgICAgICBzZWxlY3Rpb24sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuICAgICAgICBjb25zdCBDTEFTU05BTUUgPSBcInNlbGVjdGVkXCI7XG5cbiAgICAgICAgaWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub3RTZWxlY3RlZCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKFwiOm5vdCg6Y2hlY2tlZClcIik7XG5cbiAgICAgICAgaWYgKG5vdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBub3RTZWxlY3RlZC5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gbm9kZS5jbG9zZXN0KGBbJHtBVFRSSUJVVEVfUk9MRX09b3B0aW9uXWApO1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NOQU1FKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6Y2hlY2tlZFwiKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICBzZWxlY3RlZC5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gbm9kZS5jbG9zZXN0KGBbJHtBVFRSSUJVVEVfUk9MRX09b3B0aW9uXWApO1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NOQU1FKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pLnJ1bigpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB0aGUgcmVzdWx0IGNhbm5vdCBiZSBwYXJzZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gZmV0Y2hEYXRhKHVybCkge1xuXG4gICAgaWYgKCF1cmwpIHVybCA9IHRoaXMuZ2V0T3B0aW9uKFwidXJsXCIpO1xuICAgIGlmICghdXJsKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICBjb25zdCBmZXRjaE9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcImZldGNoXCIsIHt9KTtcblxuICAgIHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJsb2FkaW5nXCIpO1xuICAgIHVybCA9IG5ldyBGb3JtYXR0ZXIoe2ZpbHRlcjogdGhpcy5nZXRPcHRpb24oXCJmaWx0ZXIuZGVmYXVsdFZhbHVlXCIpfSkuZm9ybWF0KFxuICAgICAgICB1cmwsXG4gICAgKTtcblxuICAgIGNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuICAgIHJldHVybiBnbG9iYWxcbiAgICAgICAgLmZldGNoKHVybCwgZmV0Y2hPcHRpb25zKVxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIik7XG4gICAgICAgICAgICBpZiAoY29udGVudFR5cGUgJiYgY29udGVudFR5cGUuaW5kZXhPZihcImFwcGxpY2F0aW9uL2pzb25cIikgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgdW5zdXBwb3J0ZWQgcmVzcG9uc2UgJHtjb250ZW50VHlwZX1gKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHRleHQpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShKU09OLnBhcnNlKFN0cmluZyh0ZXh0KSkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0aGUgcmVzdWx0IGNhbm5vdCBiZSBwYXJzZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaGlkZSgpIHtcbiAgICB0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICBzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwic3RhdHVzXCIpO1xuICAgIHJlbW92ZUF0dHJpYnV0ZVRva2VuKHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdLCBcImNsYXNzXCIsIFwib3BlblwiKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzaG93KCkge1xuXG4gICAgaWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIiwgdW5kZWZpbmVkKSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9PT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb2N1c0ZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgY29uc3QgbGF6eUxvYWRGbGFnID1cbiAgICAgICAgdGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5sYXp5TG9hZFwiKSAmJiB0aGlzW2xhenlMb2FkRG9uZVN5bWJvbF0gIT09IHRydWU7XG5cbiAgICBpZiAobGF6eUxvYWRGbGFnID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXNbbGF6eUxvYWREb25lU3ltYm9sXSA9IHRydWU7XG4gICAgICAgIHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJsb2FkaW5nXCIpO1xuXG4gICAgICAgIG5ldyBQcm9jZXNzaW5nKDIwMCwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mZXRjaCgpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNldFNlbGVjdGlvbi5jYWxsKHRoaXMsIHRoaXMuZ2V0QXR0cmlidXRlKFwidmFsdWVcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZXRTZWxlY3Rpb24uY2FsbCh0aGlzLCBbXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdy5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGAke2V9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImVycm9yXCIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnJ1bigpXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICBhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvL2RlYnVnZ2VyXG4gICAgLy9jb25zdCBvcHRpb25zQXZhaWxhYmxlID0gYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXQuY2FsbCh0aGlzKTtcblxuICAgIHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gICAgdGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLO1xuICAgIHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJvcGVuXCIpO1xuXG4gICAgYWRkQXR0cmlidXRlVG9rZW4odGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0sIFwiY2xhc3NcIiwgXCJvcGVuXCIpO1xuXG4gICAgbmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuICAgICAgICBjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbi5jYWxsKHRoaXMpO1xuICAgICAgICBmb2N1c0ZpbHRlci5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwidmlzaWJpbGl0eVwiKTtcbiAgICAgICAgdXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG4gICAgfSlcbiAgICAgICAgLnJ1bigpXG4gICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgYWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcbiAgICAgICAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlKCkge1xuICAgIGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuICAgICAgICBoaWRlLmNhbGwodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc2hvdy5jYWxsKHRoaXMpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLmV2ZW50Om1vbnN0ZXItc2VsZWN0aW9uLXJlbW92ZWRcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5ldmVudDptb25zdGVyLXNlbGVjdGlvbi1jbGVhcmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgICAqL1xuICAgIHNlbGZbY2xlYXJPcHRpb25FdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgQVRUUklCVVRFX1JPTEUsXG4gICAgICAgICAgICBcInJlbW92ZS1iYWRnZVwiLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhZGdlID0gZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShlbGVtZW50LCBBVFRSSUJVVEVfUk9MRSwgXCJiYWRnZVwiKTtcbiAgICAgICAgICAgIGlmIChiYWRnZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBiYWRnZS5nZXRBdHRyaWJ1dGUoYCR7QVRUUklCVVRFX1BSRUZJWH12YWx1ZWApO1xuXG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdGlvbiA9IHNlbGYuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IHNlbGVjdGlvbi5maWx0ZXIoKGIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICE9PSBiLnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIC5jYWxsKHNlbGYsIHNlbGVjdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1zZWxlY3Rpb24tcmVtb3ZlZFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRBdHRyaWJ1dGVUb2tlbihzZWxmLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgICAqL1xuICAgIHNlbGZbY2xvc2VFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHBhdGgpKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gc2VsZikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBoaWRlLmNhbGwoc2VsZik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAgICovXG4gICAgc2VsZltpbnB1dEV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gcGF0aD8uWzBdO1xuXG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBlbGVtZW50Lmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgJiZcbiAgICAgICAgICAgICAgICBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgPT09IFwib3B0aW9uLWNvbnRyb2xcIlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1jaGFuZ2VcIiwge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBldmVudC50eXBlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZWxlbWVudC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogZWxlbWVudC5jaGVja2VkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBlbGVtZW50Lmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgJiZcbiAgICAgICAgICAgICAgICBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgPT09IFwiZmlsdGVyXCJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAgICovXG4gICAgc2VsZltjaGFuZ2VFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGdhdGhlclN0YXRlLmNhbGwoc2VsZik7XG4gICAgICAgIGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItY2hhbmdlZFwiLCBldmVudD8uZGV0YWlsKTtcbiAgICB9O1xuXG4gICAgc2VsZltrZXlFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHBhdGguc2hpZnQoKTtcblxuICAgICAgICBsZXQgcm9sZTtcblxuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpKSB7XG4gICAgICAgICAgICAgICAgcm9sZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCA9PT0gdGhpcykge1xuICAgICAgICAgICAgICAgIHNob3cuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICAvLyBmb2N1c0ZpbHRlci5jYWxsKHNlbGYpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlID0gZWxlbWVudC5jbG9zZXN0KGBbJHtBVFRSSUJVVEVfUk9MRX1dYCk7XG4gICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcm9sZSA9IGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJmaWx0ZXJcIjpcbiAgICAgICAgICAgICAgICBoYW5kbGVGaWx0ZXJLZXlib2FyZEV2ZW50cy5jYWxsKHNlbGYsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJvcHRpb24tbGFiZWxcIjpcbiAgICAgICAgICAgIGNhc2UgXCJvcHRpb24tY29udHJvbFwiOlxuICAgICAgICAgICAgY2FzZSBcIm9wdGlvblwiOlxuICAgICAgICAgICAgICAgIGhhbmRsZU9wdGlvbktleWJvYXJkRXZlbnRzLmNhbGwoc2VsZiwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImNvbnRyb2xcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ0b2dnbGVcIjpcbiAgICAgICAgICAgICAgICBoYW5kbGVUb2dnbGVLZXlib2FyZEV2ZW50cy5jYWxsKHNlbGYsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB0eXBlcyA9IHNlbGYuZ2V0T3B0aW9uKFwidG9nZ2xlRXZlbnRUeXBlXCIsIFtcImNsaWNrXCJdKTtcblxuICAgIGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXModHlwZXMpKSB7XG4gICAgICAgIHNlbGZbY29udHJvbEVsZW1lbnRTeW1ib2xdXG4gICAgICAgICAgICAucXVlcnlTZWxlY3RvcihgWyR7QVRUUklCVVRFX1JPTEV9PVwiY29udGFpbmVyXCJdYClcbiAgICAgICAgICAgIC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIEFUVFJJQlVURV9ST0xFLFxuICAgICAgICAgICAgICAgICAgICBcInJlbW92ZS1iYWRnZVwiLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdG9nZ2xlLmNhbGwoc2VsZik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBzZWxmW2NvbnRyb2xFbGVtZW50U3ltYm9sXVxuICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoYFske0FUVFJJQlVURV9ST0xFfT1cInN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXCJdYClcbiAgICAgICAgICAgIC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmdldE9wdGlvbihcImRpc2FibGVkXCIsIHVuZGVmaW5lZCkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gcGF0aD8uWzBdO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IGVsZW1lbnQuY2xvc2VzdChcbiAgICAgICAgICAgICAgICAgICAgICAgIGBbJHtBVFRSSUJVVEVfUk9MRX09XCJzdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc1wiXWAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sLmNsYXNzTGlzdC5jb250YWlucyhcImNsZWFyXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTZWxlY3Rpb24uY2FsbChzZWxmKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItc2VsZWN0aW9uLWNsZWFyZWRcIiwge30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVFRSSUJVVEVfUk9MRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZW1vdmUtYmFkZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZS5jYWxsKHNlbGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gYmFkZ2UsIHNlbGVjdGlvblxuICAgICAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgc2VsZltjbGVhck9wdGlvbkV2ZW50SGFuZGxlcl0pO1xuICAgIH1cblxuICAgIHNlbGYuYWRkRXZlbnRMaXN0ZW5lcihcIm1vbnN0ZXItY2hhbmdlXCIsIHNlbGZbY2hhbmdlRXZlbnRIYW5kbGVyXSk7XG4gICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgc2VsZltpbnB1dEV2ZW50SGFuZGxlcl0pO1xuICAgIHNlbGYuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgc2VsZltrZXlFdmVudEhhbmRsZXJdKTtcblxuICAgIHJldHVybiBzZWxmO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKi9cbmZ1bmN0aW9uIHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzKHN1Z2dlc3Rpb24pIHtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldE9wdGlvbihcInNlbGVjdGlvblwiKTtcbiAgICAgICAgY29uc3QgY2xlYXJBbGxGbGFnID1cbiAgICAgICAgICAgIGlzQXJyYXkoc2VsZWN0aW9uKSAmJlxuICAgICAgICAgICAgc2VsZWN0aW9uLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMuY2xlYXJBbGxcIikgPT09IHRydWU7XG5cbiAgICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIpO1xuXG4gICAgICAgIGlmIChjbGVhckFsbEZsYWcpIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50ICE9PSBcImNsZWFyXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE9wdGlvbihcImNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZVwiLCBcImNsZWFyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1Z2dlc3Rpb24gPT09IFwibG9hZGluZ1wiKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudCAhPT0gXCJsb2FkaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE9wdGlvbihcImNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZVwiLCBcImxvYWRpbmdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwib3BlblwiKSkge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQgIT09IFwib3BlblwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIiwgXCJvcGVuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwib3B0aW9uc1wiKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgb3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICBvcHRpb25zID09PSBudWxsIHx8XG4gICAgICAgICAgICAoaXNBcnJheShvcHRpb25zKSAmJiBvcHRpb25zLmxlbmd0aCA9PT0gMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudCAhPT0gXCJlbXB0eVwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRPcHRpb24oXCJjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIiwgXCJlbXB0eVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWdnZXN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudCAhPT0gc3VnZ2VzdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIsIHN1Z2dlc3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfSwgMik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcbiAgICBpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuICAgIH1cblxuICAgIHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udHJvbF1gLFxuICAgICk7XG4gICAgdGhpc1tzZWxlY3Rpb25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgWyR7QVRUUklCVVRFX1JPTEV9PXNlbGVjdGlvbl1gLFxuICAgICk7XG4gICAgdGhpc1tjb250YWluZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgWyR7QVRUUklCVVRFX1JPTEV9PWNvbnRhaW5lcl1gLFxuICAgICk7XG4gICAgdGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgWyR7QVRUUklCVVRFX1JPTEV9PXBvcHBlcl1gLFxuICAgICk7XG4gICAgdGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgWyR7QVRUUklCVVRFX1JPTEV9PWZpbHRlcl1bbmFtZT1cImlubGluZS1maWx0ZXJcIl1gLFxuICAgICk7XG4gICAgdGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgWyR7QVRUUklCVVRFX1JPTEV9PWZpbHRlcl1bbmFtZT1cInBvcHBlci1maWx0ZXJcIl1gLFxuICAgICk7XG4gICAgdGhpc1twb3BwZXJGaWx0ZXJDb250YWluZXJFbGVtZW50U3ltYm9sXSA9XG4gICAgICAgIHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0ucGFyZW50RWxlbWVudDtcbiAgICB0aGlzW29wdGlvbnNFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgWyR7QVRUUklCVVRFX1JPTEV9PW9wdGlvbnNdYCxcbiAgICApO1xuICAgIHRoaXNbbm9PcHRpb25zQXZhaWxhYmxlRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYFske0FUVFJJQlVURV9ST0xFfT1cIm5vLW9wdGlvbnNcIl1gLFxuICAgICk7XG4gICAgdGhpc1tzdGF0dXNPclJlbW92ZUJhZGdlc0VsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGBbJHtBVFRSSUJVVEVfUk9MRX09c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNdYCxcbiAgICApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVBvcHBlcigpIHtcbiAgICBpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ICE9PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIsIGZhbHNlKSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuICAgICAgICBjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbi5jYWxsKHRoaXMpO1xuICAgICAgICBwb3NpdGlvblBvcHBlci5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdLFxuICAgICAgICAgICAgdGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXSxcbiAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uKFwicG9wcGVyXCIsIHt9KSxcbiAgICAgICAgKTtcbiAgICB9KVxuICAgICAgICAucnVuKClcbiAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuICAgICAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuICAgIC8vIGxhbmd1YWdlPUhUTUxcbiAgICByZXR1cm4gYFxuICAgICAgICA8dGVtcGxhdGUgaWQ9XCJvcHRpb25zXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwib3B0aW9uXCIgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1maWx0ZXJlZCBwYXRoOm9wdGlvbnMuZmlsdGVyZWQsXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci12aXNpYmlsaXR5IHBhdGg6b3B0aW9ucy52aXNpYmlsaXR5XCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIHBhcnQ9XCJvcHRpb25cIiByb2xlPVwib3B0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBkYXRhLW1vbnN0ZXItcm9sZT1cIm9wdGlvbi1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiXG4gICAgICAgICAgICB0eXBlIHBhdGg6dHlwZSxcbiAgICAgICAgICAgIHJvbGUgcGF0aDpyb2xlLFxuICAgICAgICAgICAgdmFsdWUgcGF0aDpvcHRpb25zIHwgaW5kZXg6dmFsdWUsIFxuICAgICAgICAgICAgbmFtZSBwYXRoOm5hbWUsIFxuICAgICAgICAgICAgcGFydCBwYXRoOnR5cGUgfCBwcmVmaXg6b3B0aW9uLSB8IHN1ZmZpeDogZm9ybSxcbiAgICAgICAgICAgIGNsYXNzIHBhdGg6b3B0aW9ucy5jbGFzcyBcbiAgICAgICAgICAgIFwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6b3B0aW9ucyB8IGluZGV4OmxhYmVsIHwgY2FsbDpteS1jYWxsYmFjay1kb2luZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgcGFydD1cIm9wdGlvbi1sYWJlbFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8dGVtcGxhdGUgaWQ9XCJzZWxlY3Rpb25cIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJiYWRnZVwiXG4gICAgICAgICAgICAgICAgIHBhcnQ9XCJiYWRnZVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci12YWx1ZSBwYXRoOnNlbGVjdGlvbiB8IGluZGV4OnZhbHVlLCBcbiAgICAgICAgICAgICAgICAgY2xhc3MgcGF0aDpjbGFzc2VzIHwgaW5kZXg6YmFkZ2UsIFxuICAgICAgICBwYXJ0IHBhdGg6dHlwZSB8IHN1ZmZpeDotb3B0aW9uIHwgcHJlZml4OiBmb3JtLVwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpzZWxlY3Rpb24gfCBpbmRleDpsYWJlbFwiIHBhcnQ9XCJiYWRnZS1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImJhZGdlLWxhYmVsXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwicmVtb3ZlLWJhZGdlXCIgZGF0YS1tb25zdGVyLXNlbGVjdC10aGlzXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6ZmVhdHVyZXMuY2xlYXIgfCA/OjpoaWRkZW4gXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwicmVtb3ZlLWJhZGdlXCIgdGFiaW5kZXg9XCItMVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPHNsb3QgY2xhc3M9XCJoaWRkZW5cIj48L3Nsb3Q+XG5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiIHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIFxcJHtzZWxlY3RlZH1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwicG9wcGVyXCIgcGFydD1cInBvcHBlclwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cIm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1maWx0ZXItY29udHJvbFwiIHJvbGU9XCJzZWFyY2hcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcm9sZT1cInNlYXJjaGJveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0PVwicG9wcGVyLWZpbHRlclwiIG5hbWU9XCJwb3BwZXItZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJjb250ZW50XCIgY2xhc3M9XCJmbGV4XCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwib3B0aW9uc1wiIGRhdGEtbW9uc3Rlci1yb2xlPVwib3B0aW9uc1wiIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJvcHRpb25zIHBhdGg6b3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cIm5vLW9wdGlvbnNcIiBkYXRhLW1vbnN0ZXItcm9sZT1cIm5vLW9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm1lc3NhZ2VzLmVtcHR5T3B0aW9uc1wiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHBhcnQ9XCJzdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc1wiIGRhdGEtbW9uc3Rlci1yb2xlPVwic3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlIHwgc3VmZml4OlxcXFwgc3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFNlbGVjdCk7XG4iLCAiXG4vKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDI0LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7YWRkQXR0cmlidXRlVG9rZW59IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7QVRUUklCVVRFX0VSUk9STUVTU0FHRX0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7UG9wcGVyU3R5bGVTaGVldH1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFBvcHBlclN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuICBQb3BwZXJTdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuQGxheWVyIHBvcHBlciB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJde2FsaWduLWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6bm9uZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtsZWZ0OjA7cGFkZGluZzoxLjFlbTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDotbW96LW1heC1jb250ZW50O3dpZHRoOm1heC1jb250ZW50O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXSBkaXZbZGF0YS1tb25zdGVyLXJvbGU9YXJyb3dde2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2hlaWdodDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7ei1pbmRleDotMX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlfSBcbn1gLCAwKTtcbn0gY2F0Y2ggKGUpIHtcbiAgYWRkQXR0cmlidXRlVG9rZW4oZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKCdodG1sJyksIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUgKyBcIlwiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbixcblx0cmVtb3ZlQXR0cmlidXRlVG9rZW4sXG59IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9ST0xFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuL2J1dHRvbi5tanNcIjtcbmltcG9ydCB7IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IHBvc2l0aW9uUG9wcGVyIH0gZnJvbSBcIi4vdXRpbC9mbG9hdGluZy11aS5tanNcIjtcbmltcG9ydCB7IEN1c3RvbUNvbnRyb2wgfSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWNvbnRyb2wubWpzXCI7XG5pbXBvcnQgeyBQb3BwZXJTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9wb3BwZXIubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuXG5leHBvcnQgeyBQb3BwZXIgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdGltZXJDYWxsYmFja1N5bWJvbCA9IFN5bWJvbChcInRpbWVyQ2FsbGJhY2tcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVzaXplT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJyZXNpemVPYnNlcnZlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjbG9zZUV2ZW50SGFuZGxlciA9IFN5bWJvbChcImNsb3NlRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250cm9sRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRyb2xFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBidXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiYnV0dG9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBhcnJvd0VsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJhcnJvd0VsZW1lbnRcIik7XG5cbi8qKlxuICogVGhpcyBhY3Rpb24gY2FsbGJhY2sgZXhlY3V0ZXMgdGhlIGFjdGlvbnMgd2hlbiBhIGJ1dHRvbiBpcyBjbGlja2VkLlxuICpcbiAqIEBjYWxsYmFjayBNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5leGFtcGxlQWN0aW9uQ2FsbGJhY2tcbiAqIEBwYXJhbSB7RXZlbnR9IGUgRXZlbnRcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHRoaXMge0N1c3RvbUNvbnRyb2x9XG4gKi9cblxuLyoqXG4gKiBUaGUgUG9wcGVyIGlzdCBhbiBlbGVtZW50IHRoYXQgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSBhIHBvcHBlci5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL3BvcHBlci5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnlcbiAqIGFzIHdlbGwgYXMgW3Bvb3BlcmpzXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pLlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItcG9wcGVyLWJ1dHRvbiAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1wb3BwZXInKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1wb3BwZXI+PC9tb25zdGVyLXBvcHBlcj5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQge1BvcHBlcn0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL3BvcHBlci5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXBvcHBlcicpO1xuICogYGBgXG4gKlxuICogQHN0YXJ0dW1sIHBvcHBlci5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEN1c3RvbUNvbnRyb2xcbiAqIEN1c3RvbUNvbnRyb2wgPHwtLSBQb3BwZXJcbiAqIEBlbmR1bWxcbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc3VtbWFyeSBBIHBvcHBlciBidXR0b25cbiAqL1xuY2xhc3MgUG9wcGVyIGV4dGVuZHMgQ3VzdG9tQ29udHJvbCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3BvcHBlckBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgLSBUaGUgdGVtcGxhdGVzIGZvciB0aGUgY29udHJvbC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIC0gVGhlIG1haW4gdGVtcGxhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtb2RlIC0gVGhlIG1vZGUgb2YgdGhlIHBvcHBlci4gUG9zc2libGUgdmFsdWVzIGFyZSBgY2xpY2tgLCBgZW50ZXJgIGBob3ZlcmAsIGBtYW51YWxgLCBgZm9jdXNgLCBcImF1dG9cIiBvciBhIGNvbWJpbmF0aW9uIG9mIHRoZW0uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250ZW50IC0gVGhlIGNvbnRlbnQgb2YgdGhlIHBvcHBlci5cblx0ICogQHByb3BlcnR5IHtvYmplY3R9IHBvcHBlciAtIFRoZSBwb3BwZXIgb3B0aW9ucy5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHBvcHBlci5wbGFjZW1lbnQgLSBUaGUgcGxhY2VtZW50IG9mIHRoZSBwb3BwZXIuIFBvc3NpYmxlIHZhbHVlcyBhcmUgYHRvcGAsIGBib3R0b21gLCBgbGVmdGAgYW5kIGByaWdodGAuXG5cdCAqIEBwcm9wZXJ0eSB7QXJyYXk8ZnVuY3Rpb24+fSBwb3BwZXIubWlkZGxld2FyZSAtIFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvZiB0aGUgcG9wcGVyLlxuXHQgKiBAcHJvcGVydHkge0FycmF5PGZ1bmN0aW9uPn0gcG9wcGVyLm1pZGRsZXdhcmVJbml0IC0gVGhlIG1pZGRsZXdhcmUgaW5pdCBmdW5jdGlvbnMgb2YgdGhlIHBvcHBlci5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzIC0gVGhlIGZlYXR1cmVzIG9mIHRoZSBwb3BwZXIuXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMucHJldmVudFByb3BhZ2F0ZU9wZW5FdmVudHMgLSBQcmV2ZW50cyB0aGUgb3BlbiBldmVudCBmcm9tIGJlaW5nIHNlbnQuXG5cdCAqIEBleHRlbmRzIHtCdXR0b259XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRtb2RlOiBcImhvdmVyIGZvY3VzXCIsXG5cdFx0XHRjb250ZW50OiBcIjxzbG90PlNob3VsZCBJIFN0YXkgb3IgU2hvdWxkIEkgR28/PC9zbG90PlwiLFxuXHRcdFx0cG9wcGVyOiB7XG5cdFx0XHRcdHBsYWNlbWVudDogXCJ0b3BcIixcblx0XHRcdFx0bWlkZGxld2FyZTogW1wiYXV0b1BsYWNlbWVudFwiLCBcIm9mZnNldDoxMFwiLCBcImFycm93XCJdLFxuXHRcdFx0fSxcblx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdHByZXZlbnRPcGVuRXZlbnRTZW50OiBmYWxzZSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUG9wcGVyfVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItcG9wcGVyXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7QXJyYXk8Q1NTU3R5bGVTaGVldD59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1BvcHBlclN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblxuXHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdGF0dGFjaFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblxuXHRcdGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlcn1cblx0ICovXG5cdHNob3dEaWFsb2coKSB7XG5cdFx0c2hvdy5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlcn1cblx0ICovXG5cdGhpZGVEaWFsb2coKSB7XG5cdFx0aGlkZS5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlcn1cblx0ICovXG5cdHRvZ2dsZURpYWxvZygpIHtcblx0XHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRcdHRoaXMuaGlkZURpYWxvZygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNob3dEaWFsb2coKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUG9wcGVyfVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHR0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblxuXHRcdGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXMocGF0aCkpIHtcblx0XHRcdGlmIChlbGVtZW50ID09PSB0aGlzKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0aGlkZS5jYWxsKHRoaXMpO1xuXHR9O1xuXG5cdGxldCBtb2RlcyA9IG51bGw7XG5cdGNvbnN0IG1vZGVPcHRpb24gPSB0aGlzLmdldE9wdGlvbihcIm1vZGVcIik7XG5cdGlmICh0eXBlb2YgbW9kZU9wdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdG1vZGVzID0gbW9kZU9wdGlvbi5zcGxpdChcIiBcIik7XG5cdH1cblxuXHRpZiAoXG5cdFx0bW9kZXMgPT09IG51bGwgfHxcblx0XHRtb2RlcyA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0aXNBcnJheShtb2RlcykgPT09IGZhbHNlIHx8XG5cdFx0bW9kZXMubGVuZ3RoID09PSAwXG5cdCkge1xuXHRcdG1vZGVzID0gW1wibWFudWFsXCJdO1xuXHR9XG5cblx0Zm9yIChjb25zdCBbLCBtb2RlXSBvZiBPYmplY3QuZW50cmllcyhtb2RlcykpIHtcblx0XHRpbml0RXZlbnRIYW5kbGVyQnlNb2RlLmNhbGwodGhpcywgbW9kZSk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG1vZGVcbiAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlcn1cbiAqIEB0aHJvd3MgRXJyb3JcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlckJ5TW9kZShtb2RlKSB7XG5cdHN3aXRjaCAobW9kZSkge1xuXHRcdGNhc2UgXCJtYW51YWxcIjpcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcImZvY3VzXCI6XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucHJldmVudE9wZW5FdmVudFNlbnRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2hvd0RpYWxvZygpO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wcmV2ZW50T3BlbkV2ZW50U2VudFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5oaWRlRGlhbG9nKCk7XG5cdFx0XHR9KTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcImNsaWNrXCI6XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucHJldmVudE9wZW5FdmVudFNlbnRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMudG9nZ2xlRGlhbG9nKCk7XG5cdFx0XHR9KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJlbnRlclwiOlxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucHJldmVudE9wZW5FdmVudFNlbnRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2hvd0RpYWxvZygpO1xuXHRcdFx0fSk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJhdXRvXCI6IC8vIGlzIGhvdmVyXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wcmV2ZW50T3BlbkV2ZW50U2VudFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zaG93RGlhbG9nKCk7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnByZXZlbnRPcGVuRXZlbnRTZW50XCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmhpZGVEaWFsb2coKTtcblx0XHRcdH0pO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IG5ldyBFcnJvcihgVW5rbm93biBtb2RlICR7bW9kZX1gKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFJlc2l6ZU9ic2VydmVyKCkge1xuXHQvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcblx0XHRpZiAodGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSBpbnN0YW5jZW9mIERlYWRNYW5zU3dpdGNoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdLnRvdWNoKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSA9IG5ldyBEZWFkTWFuc1N3aXRjaCgyMDAsICgpID0+IHtcblx0XHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdH0pO1xuXHR9KTtcblxuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKHRoaXMucGFyZW50RWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlcigpIHtcblx0aWYgKHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdIGluc3RhbmNlb2YgUmVzaXplT2JzZXJ2ZXIpIHtcblx0XHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5kaXNjb25uZWN0KCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBoaWRlKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLXBvcHBlci1oaWRlXCIsIHtcblx0XHRzZWxmLFxuXHR9KTtcblxuXHRzZWxmW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0cmVtb3ZlQXR0cmlidXRlVG9rZW4oc2VsZltjb250cm9sRWxlbWVudFN5bWJvbF0sIFwiY2xhc3NcIiwgXCJvcGVuXCIpO1xuXG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItcG9wcGVyLWhpZGRlblwiLCB7XG5cdFx0XHRzZWxmLFxuXHRcdH0pO1xuXHR9LCAwKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRoaXMgUG9wcGVyQnV0dG9uXG4gKi9cbmZ1bmN0aW9uIHNob3coKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGlmIChzZWxmLmdldE9wdGlvbihcImRpc2FibGVkXCIsIGZhbHNlKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmIChzZWxmW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItcG9wcGVyLW9wZW5cIiwge1xuXHRcdHNlbGYsXG5cdH0pO1xuXG5cdHNlbGZbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG5cdHNlbGZbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSztcblxuXHRhZGRBdHRyaWJ1dGVUb2tlbihzZWxmW2NvbnRyb2xFbGVtZW50U3ltYm9sXSwgXCJjbGFzc1wiLCBcIm9wZW5cIik7XG5cdHVwZGF0ZVBvcHBlci5jYWxsKHNlbGYpO1xuXG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItcG9wcGVyLW9wZW5lZFwiLCB7XG5cdFx0XHRzZWxmLFxuXHRcdH0pO1xuXHR9LCAwKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVQb3BwZXIoKSB7XG5cdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgIT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIsIGZhbHNlKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHBvc2l0aW9uUG9wcGVyLmNhbGwoXG5cdFx0dGhpcyxcblx0XHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSxcblx0XHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwicG9wcGVyXCIsIHt9KSxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUG9wcGVyfVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jb250cm9sXWAsXG5cdCk7XG5cdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWJ1dHRvbl1gLFxuXHQpO1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1wb3BwZXJdYCxcblx0KTtcblx0dGhpc1thcnJvd0VsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1hcnJvd11gLFxuXHQpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8c2xvdCBuYW1lPVwiYnV0dG9uXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIj48L3Nsb3Q+XG5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXJcIiBwYXJ0PVwicG9wcGVyXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwibW9uc3Rlci1jb2xvci1wcmltYXJ5LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYXJyb3dcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJjb250ZW50XCIgY2xhc3M9XCJmbGV4XCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoUG9wcGVyKTtcbiIsICJcbi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHthZGRBdHRyaWJ1dGVUb2tlbn0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtBVFRSSUJVVEVfRVJST1JNRVNTQUdFfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHtQb3BwZXJCdXR0b25TdHlsZVNoZWV0fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgUG9wcGVyQnV0dG9uU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG4gIFBvcHBlckJ1dHRvblN0eWxlU2hlZXQuaW5zZXJ0UnVsZShgXG5AbGF5ZXIgcG9wcGVyYnV0dG9uIHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl17YWxpZ24tY29udGVudDpjZW50ZXI7YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7ZGlzcGxheTpub25lO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2xlZnQ6MDtwYWRkaW5nOjEuMWVtO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnQ7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtbW9kYWwpfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJdIGRpdltkYXRhLW1vbnN0ZXItcm9sZT1hcnJvd117YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7aGVpZ2h0OmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSAqIHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSAqIHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTt6LWluZGV4Oi0xfS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5LGJ1dHRvbnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnksLm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnksLm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofWJ1dHRvbjphY3RpdmUsYnV0dG9uOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9YnV0dG9uOmFjdGl2ZXt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX0ubW9uc3Rlci1idXR0b24tYmFyLC5tb25zdGVyLWJ1dHRvbi1ncm91cHthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpzdHJldGNoO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ubW9uc3Rlci1idXR0b24tZ3JvdXB7Ym94LXNpemluZzpib3JkZXItYm94O2dhcDowO21hcmdpbjoxcmVtIDB9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwPjpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1yaWdodDpjYWxjKHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSotMSl9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwIDpob3Zlcntib3gtc2hhZG93Om5vbmV9YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmV9W2RhdGEtbW9uc3Rlci1yb2xlPWJ1dHRvbl17d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpmaWxsLWF2YWlsYWJsZX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17aGVpZ2h0OjEwMCV9IFxufWAsIDApO1xufSBjYXRjaCAoZSkge1xuICBhZGRBdHRyaWJ1dGVUb2tlbihkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKSwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZSArIFwiXCIpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcbmltcG9ydCB7IFBvcHBlciB9IGZyb20gXCIuL3BvcHBlci5tanNcIjtcbmltcG9ydCB7IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IFBvcHBlckJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3BvcHBlci1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBwb3NpdGlvblBvcHBlciB9IGZyb20gXCIuL3V0aWwvZmxvYXRpbmctdWkubWpzXCI7XG5pbXBvcnQgXCIuL2J1dHRvbi5tanNcIjtcblxuZXhwb3J0IHsgUG9wcGVyQnV0dG9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHRpbWVyQ2FsbGJhY2tTeW1ib2wgPSBTeW1ib2woXCJ0aW1lckNhbGxiYWNrXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlc2l6ZU9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFwicmVzaXplT2JzZXJ2ZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY2xvc2VFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJjbG9zZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250cm9sRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYnV0dG9uRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImJ1dHRvbkVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInBvcHBlckVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYXJyb3dFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiYXJyb3dFbGVtZW50XCIpO1xuXG4vKipcbiAqIFRoaXMgYWN0aW9uIGNhbGxiYWNrIGV4ZWN1dGVzIHRoZSBhY3Rpb25zIHdoZW4gYSBidXR0b24gaXMgY2xpY2tlZC5cbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1+ZXhhbXBsZUFjdGlvbkNhbGxiYWNrXG4gKiBAcGFyYW0ge0V2ZW50fSBlIEV2ZW50XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEB0aGlzIHtDdXN0b21Db250cm9sfVxuICovXG5cbi8qKlxuICogVGhlIFBvcHBlckJ1dHRvbiBpcyBhIGJ1dHRvbiB0aGF0IG9wZW5zIGEgcG9wcGVyIGVsZW1lbnQuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9wb3BwZXItYnV0dG9uLnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICogYXMgd2VsbCBhcyBbcG9vcGVyanNdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyLykuXG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyA8bW9uc3Rlci1wb3BwZXItYnV0dG9uIC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXBvcHBlci1idXR0b24nKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1wb3BwZXItYnV0dG9uPjwvbW9uc3Rlci1wb3BwZXItYnV0dG9uPlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCB7UG9wcGVyQnV0dG9ufSBmcm9tICdAc2NodWthaS9jb21wb25lbnQtZm9ybS9zb3VyY2UvcG9wcGVyLWJ1dHRvbi5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXBvcHBlci1idXR0b24nKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBgZGF0YS1tb25zdGVyLW9wdGlvbi1jbGFzc2VzLWJ1dHRvbmAgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgQ1NTIGNsYXNzIG9mIHRoZSBidXR0b24uXG4gKlxuICogQHN0YXJ0dW1sIHBvcHBlci1idXR0b24ucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDdXN0b21Db250cm9sXG4gKiBDdXN0b21Db250cm9sIDx8LS0gUG9wcGVyXG4gKiBQb3BwZXIgPHwtLSBQb3BwZXJCdXR0b25cbiAqIEBlbmR1bWxcbiAqXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzdW1tYXJ5IEEgcG9wcGVyIGJ1dHRvblxuICovXG5jbGFzcyBQb3BwZXJCdXR0b24gZXh0ZW5kcyBQb3BwZXIge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFxuXHRcdFx0XCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvZm9ybS9wb3BwZXItYnV0dG9uQEBpbnN0YW5jZVwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgLSBUaGUgdGVtcGxhdGVzIGZvciB0aGUgY29udHJvbC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIC0gVGhlIG1haW4gdGVtcGxhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBsYWJlbHMgLSBUaGUgbGFiZWxzIGZvciB0aGUgY29udHJvbC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5idXR0b24gLSBUaGUgbGFiZWwgZm9yIHRoZSBidXR0b24uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250ZW50IC0gVGhlIGNvbnRlbnQgb2YgdGhlIHBvcHBlci5cblx0ICogQHByb3BlcnR5IHtvYmplY3R9IHBvcHBlciAtIFRoZSBwb3BwZXIgb3B0aW9ucy5cblx0ICogQGV4dGVuZHMge0J1dHRvbi5kZWZhdWx0c31cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGFjdGlvbnM6IHtcblx0XHRcdFx0Y2xpY2s6IChlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy50b2dnbGVEaWFsb2coKTtcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGJ1dHRvbjogXCJtb25zdGVyLWJ1dHRvblwiLFxuXHRcdFx0fSxcblx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRidXR0b246ICc8c2xvdCBuYW1lPVwiYnV0dG9uXCI+PC9zbG90PicsXG5cdFx0XHR9LFxuXHRcdFx0bW9kZTogXCJjbGlja1wiLFxuXHRcdFx0dmFsdWU6IG51bGwsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUG9wcGVyQnV0dG9ufVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItcG9wcGVyLWJ1dHRvblwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdGNvbnN0IHN0eWxlcyA9IHN1cGVyLmdldENTU1N0eWxlU2hlZXQoKTtcblx0XHRzdHlsZXMucHVzaChQb3BwZXJCdXR0b25TdHlsZVNoZWV0KTtcblx0XHRyZXR1cm4gc3R5bGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblxuXHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdGF0dGFjaFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblxuXHRcdGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uY2xpY2soKSBtZXRob2Qgc2ltdWxhdGVzIGEgY2xpY2sgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9jbGlja31cblx0ICovXG5cdGNsaWNrKCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmNsaWNrKVxuXHRcdCkge1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5jbGljaygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmZvY3VzKCkgbWV0aG9kIHNldHMgZm9jdXMgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9mb2N1c31cblx0ICovXG5cdGZvY3VzKG9wdGlvbnMpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5mb2N1cylcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZm9jdXMob3B0aW9ucyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uYmx1cigpIG1ldGhvZCByZW1vdmVzIGZvY3VzIGZyb20gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKi9cblx0Ymx1cigpIHtcblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYmx1cilcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYmx1cigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvYXR0YWNoSW50ZXJuYWxzfVxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0c3RhdGljIGdldCBmb3JtQXNzb2NpYXRlZCgpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudCBzZWxlY3Rpb24gb2YgdGhlIFNlbGVjdFxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItc2VsZWN0Jyk7XG5cdCAqIGNvbnNvbGUubG9nKGUudmFsdWUpXG5cdCAqIC8vIFx1MjFBNiAxXG5cdCAqIC8vIFx1MjFBNiBbJzEnLCcyJ11cblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfGFycmF5fVxuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcInZhbHVlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBzZWxlY3Rpb25cblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXNlbGVjdCcpO1xuXHQgKiBlLnZhbHVlPTFcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfGFycmF5fSB2YWx1ZVxuXHQgKiBAc2luY2UgMS4yLjBcblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwidmFsdWVcIiwgdmFsdWUpO1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzPy5zZXRGb3JtVmFsdWUodGhpcy52YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7aW5pdEV2ZW50SGFuZGxlcn1cbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0dGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHBhdGgpKSB7XG5cdFx0XHRpZiAoZWxlbWVudCA9PT0gdGhpcykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuaGlkZURpYWxvZygpO1xuXHR9O1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFJlc2l6ZU9ic2VydmVyKCkge1xuXHQvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdGlmICh0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0udG91Y2goKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRkZWxldGUgdGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdID0gbmV3IERlYWRNYW5zU3dpdGNoKDIwMCwgKCkgPT4ge1xuXHRcdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUodGhpcy5wYXJlbnRFbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCkge1xuXHRpZiAodGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gaW5zdGFuY2VvZiBSZXNpemVPYnNlcnZlcikge1xuXHRcdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLmRpc2Nvbm5lY3QoKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVBvcHBlcigpIHtcblx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSAhPT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIiwgZmFsc2UpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0cG9zaXRpb25Qb3BwZXIuY2FsbChcblx0XHR0aGlzLFxuXHRcdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdLFxuXHRcdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0sXG5cdFx0dGhpcy5nZXRPcHRpb24oXCJwb3BwZXJcIiwge30pLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNvbnRyb2xdYCxcblx0KTtcblxuXHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1idXR0b25dYCxcblx0KTtcblxuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1wb3BwZXJdYCxcblx0KTtcblxuXHR0aGlzW2Fycm93RWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWFycm93XWAsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRpc2FibGVkIHBhdGg6ZGlzYWJsZWQgfCBpZjp0cnVlLCBjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBwYXJ0PVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b25cIj48L2J1dHRvbj5cblxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJtb25zdGVyLWNvbG9yLXByaW1hcnktMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJhcnJvd1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cImNvbnRlbnRcIiBjbGFzcz1cImZsZXhcIiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y29udGVudFwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIGA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChQb3BwZXJCdXR0b24pO1xuIiwgIlxuLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyNC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQge2FkZEF0dHJpYnV0ZVRva2VufSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge0FUVFJJQlVURV9FUlJPUk1FU1NBR0V9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQge0NvbmZpcm1CdXR0b25TdHlsZVNoZWV0fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgQ29uZmlybUJ1dHRvblN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuICBDb25maXJtQnV0dG9uU3R5bGVTaGVldC5pbnNlcnRSdWxlKGBcbkBsYXllciBjb25maXJtYnV0dG9uIHsgXG4uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MDtib3JkZXItc2hhZG93Om5vbmV9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fS5tb25zdGVyLWgxLGgxe2ZvbnQtc2l6ZTozcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxO21hcmdpbi1ib3R0b206MS4yNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfS5tb25zdGVyLWgzLGgze2ZvbnQtc2l6ZToycmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OmNhbGMoNHB4ICsgMmV4KTttYXJnaW4tYm90dG9tOjEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6Y2FsYyg0cHggKyAyZXgpO21hcmdpbi1ib3R0b206MS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXXthbGlnbi1jb250ZW50OmNlbnRlcjtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bGVmdDowO3BhZGRpbmc6MS4xZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1tb2RhbCl9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl0gZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWFycm93XXtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtoZWlnaHQ6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3otaW5kZXg6LTF9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWRlY2lzaW9uXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1ldmVubHk7bWFyZ2luOjFyZW0gMCAuNHJlbTt3aWR0aDoxMDAlfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtoZWlnaHQ6MTAwJX0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiXG4vKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDI0LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7YWRkQXR0cmlidXRlVG9rZW59IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7QVRUUklCVVRFX0VSUk9STUVTU0FHRX0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7TWVzc2FnZVN0YXRlQnV0dG9uU3R5bGVTaGVldH1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IE1lc3NhZ2VTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuICBNZXNzYWdlU3RhdGVCdXR0b25TdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuQGxheWVyIG1lc3NhZ2VzdGF0ZWJ1dHRvbiB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1idXR0b25de3dpZHRoOjEwMCV9IFxufWAsIDApO1xufSBjYXRjaCAoZSkge1xuICBhZGRBdHRyaWJ1dGVUb2tlbihkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKSwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZSArIFwiXCIpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9ST0xFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgUG9wcGVyIH0gZnJvbSBcIi4vcG9wcGVyLm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZVN0YXRlQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvbWVzc2FnZS1zdGF0ZS1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3N0YXRlLWJ1dHRvbi5tanNcIjtcbmltcG9ydCBcIi4vc3RhdGUtYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcblxuZXhwb3J0IHsgTWVzc2FnZVN0YXRlQnV0dG9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGJ1dHRvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJidXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIFRoaXMgQ3VzdG9tQ29udHJvbCBjcmVhdGVzIGEgYnV0dG9uIGVsZW1lbnQgd2l0aCBhIHZhcmlldHkgb2Ygb3B0aW9ucy5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL21lc3NhZ2Utc3RhdGUtYnV0dG9uLnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItbWVzc2FnZS1zdGF0ZS1idXR0b24gLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbWVzc2FnZS1zdGF0ZS1idXR0b24nKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1tZXNzYWdlLXN0YXRlLWJ1dHRvbj48L21vbnN0ZXItbWVzc2FnZS1zdGF0ZS1idXR0b24+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL2NvbXBvbmVudHMvZm9ybS9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zdGF0ZS1idXR0b24nKTtcbiAqIGBgYFxuICpcbiAqIEBzdGFydHVtbCBtZXNzYWdlLXN0YXRlLWJ1dHRvbi5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEN1c3RvbUNvbnRyb2xcbiAqIEN1c3RvbUNvbnRyb2wgPHwtLSBQb3BwZXJcbiAqIFBvcHBlciA8fC0tIE1lc3NhZ2VTdGF0ZUJ1dHRvblxuICogQGVuZHVtbFxuICpcbiAqIEBzaW5jZSAyLjExLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzdW1tYXJ5IEEgc3RhdGUgYnV0dG9uIHdpdGggaWNvbnMgYW5kIGEgbWVzc2FnZVxuICovXG5jbGFzcyBNZXNzYWdlU3RhdGVCdXR0b24gZXh0ZW5kcyBQb3BwZXIge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFxuXHRcdFx0XCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvZm9ybS9tZXNzYWdlLXN0YXRlLWJ1dHRvbkBAaW5zdGFuY2VcIixcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZVxuXHQgKiBAcGFyYW0ge251bWJlcn0gdGltZW91dFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5NZXNzYWdlU3RhdGVCdXR0b259XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlXG5cdCAqL1xuXHRzZXRTdGF0ZShzdGF0ZSwgdGltZW91dCkge1xuXHRcdHJldHVybiB0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLnNldFN0YXRlKHN0YXRlLCB0aW1lb3V0KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5NZXNzYWdlU3RhdGVCdXR0b259XG5cdCAqL1xuXHRyZW1vdmVTdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5yZW1vdmVTdGF0ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlR5cGVzLlN0YXRlfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldFN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmdldFN0YXRlKCk7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGxhYmVscyBMYWJlbCBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLmJ1dHRvbiBCdXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IG1vZGUgTW9kZSBkZWZpbml0aW9ucyAobWFudWFsLCBzdWJtaXQpXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRtZXNzYWdlOiB7XG5cdFx0XHRcdHRpdGxlOiB1bmRlZmluZWQsXG5cdFx0XHRcdGNvbnRlbnQ6IHVuZGVmaW5lZCxcblx0XHRcdFx0aWNvbjogdW5kZWZpbmVkLFxuXHRcdFx0fSxcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdG1vZGU6IFwibWFudWFsXCIsXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIjxzbG90Pjwvc2xvdD5cIixcblx0XHRcdH0sXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGJ1dHRvbjogXCJtb25zdGVyLWJ1dHRvbi1wcmltYXJ5XCIsXG5cdFx0XHR9LFxuXHRcdFx0YWN0aW9uczoge1xuXHRcdFx0XHRjbGljazogKGUpID0+IHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgY2xpY2sgYWN0aW9uIGlzIG5vdCBkZWZpbmVkXCIpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblxuXHRcdGxldCBtb2RlcyA9IG51bGw7XG5cdFx0Y29uc3QgbW9kZU9wdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKFwibW9kZVwiKTtcblx0XHRpZiAodHlwZW9mIG1vZGVPcHRpb24gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdG1vZGVzID0gbW9kZU9wdGlvbi5zcGxpdChcIiBcIik7XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0bW9kZXMgPT09IG51bGwgfHxcblx0XHRcdG1vZGVzID09PSB1bmRlZmluZWQgfHxcblx0XHRcdGlzQXJyYXkobW9kZXMpID09PSBmYWxzZSB8fFxuXHRcdFx0bW9kZXMubGVuZ3RoID09PSAwXG5cdFx0KSB7XG5cdFx0XHRtb2RlcyA9IFtcIm1hbnVhbFwiXTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFssIG1vZGVdIG9mIE9iamVjdC5lbnRyaWVzKG1vZGVzKSkge1xuXHRcdFx0aW5pdEV2ZW50SGFuZGxlckJ5TW9kZS5jYWxsKHRoaXMsIG1vZGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIG1lc3NhZ2Vcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8SFRNTEVsZW1lbnR9bWVzc2FnZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IGljb25cblx0ICogQHJldHVybnMge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLk1lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICovXG5cdHNldE1lc3NhZ2UobWVzc2FnZSwgdGl0bGUsIGljb24pIHtcblx0XHRpZiAoaXNTdHJpbmcobWVzc2FnZSkpIHtcblx0XHRcdGlmIChtZXNzYWdlID09PSBcIlwiKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJtZXNzYWdlIG11c3Qgbm90IGJlIGVtcHR5XCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBjb250YWluZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0Y29uc3QgbWVzc2FnZURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHRjb25zdCB0aXRsZURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHR0aXRsZURpdi5zZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItcm9sZVwiLCBcIm1lc3NhZ2UtdGl0bGUtYm94XCIpO1xuXG5cdFx0XHRsZXQgdGl0bGVFbGVtZW50LCBpY29uRWxlbWVudDtcblx0XHRcdGlmICh0aXRsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRpdGxlID0gdmFsaWRhdGVTdHJpbmcodGl0bGUpO1xuXHRcdFx0XHR0aXRsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0XHR0aXRsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJcIik7XG5cdFx0XHRcdHRpdGxlRWxlbWVudC5pbm5lckhUTUwgPSB0aXRsZTtcblx0XHRcdFx0dGl0bGVFbGVtZW50LnNldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1yb2xlXCIsIFwibWVzc2FnZS10aXRsZVwiKTtcblx0XHRcdFx0dGl0bGVEaXYuYXBwZW5kQ2hpbGQodGl0bGVFbGVtZW50KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGljb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpY29uID0gdmFsaWRhdGVTdHJpbmcoaWNvbik7XG5cdFx0XHRcdGljb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdFx0aWNvbkVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJcIik7XG5cdFx0XHRcdGljb25FbGVtZW50LmlubmVySFRNTCA9IGljb247XG5cdFx0XHRcdGljb25FbGVtZW50LnNldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1yb2xlXCIsIFwibWVzc2FnZS1pY29uXCIpO1xuXHRcdFx0XHR0aXRsZURpdi5hcHBlbmRDaGlsZChpY29uRWxlbWVudCk7XG5cdFx0XHR9XG5cblx0XHRcdG1lc3NhZ2VEaXYuaW5uZXJIVE1MID0gbWVzc2FnZTtcblx0XHRcdGNvbnRhaW5lckRpdi5hcHBlbmRDaGlsZCh0aXRsZURpdik7XG5cdFx0XHRjb250YWluZXJEaXYuYXBwZW5kQ2hpbGQobWVzc2FnZURpdik7XG5cblx0XHRcdHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZS5jb250ZW50XCIsIGNvbnRhaW5lckRpdik7XG5cdFx0fSBlbHNlIGlmIChtZXNzYWdlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZS5jb250ZW50XCIsIG1lc3NhZ2UpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XHRcIm1lc3NhZ2UgbXVzdCBiZSBhIHN0cmluZyBvciBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFwiLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge251bWJlcn0gdGltZW91dFxuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uTWVzc2FnZVN0YXRlQnV0dG9ufVxuXHQgKi9cblx0c2hvd01lc3NhZ2UodGltZW91dCkge1xuXHRcdHN1cGVyLnNob3dEaWFsb2coKTtcblxuXHRcdGlmICh0aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRzdXBlci5oaWRlRGlhbG9nKCk7XG5cdFx0XHR9LCB0aW1lb3V0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uTWVzc2FnZVN0YXRlQnV0dG9ufVxuXHQgKi9cblx0aGlkZU1lc3NhZ2UoKSB7XG5cdFx0c3VwZXIuaGlkZURpYWxvZygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5NZXNzYWdlU3RhdGVCdXR0b259XG5cdCAqL1xuXHR0b2dnbGVNZXNzYWdlKCkge1xuXHRcdHN1cGVyLnRvZ2dsZURpYWxvZygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XG5cdCAqL1xuXHRnZXRNZXNzYWdlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcIm1lc3NhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLW1lc3NhZ2Utc3RhdGUtYnV0dG9uXCI7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7QXJyYXk8Q1NTU3R5bGVTaGVldD59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRjb25zdCBzdHlsZXMgPSBQb3BwZXIuZ2V0Q1NTU3R5bGVTaGVldCgpO1xuXHRcdHN0eWxlcy5wdXNoKFN0YXRlQnV0dG9uU3R5bGVTaGVldCk7XG5cdFx0c3R5bGVzLnB1c2goTWVzc2FnZVN0YXRlQnV0dG9uU3R5bGVTaGVldCk7XG5cdFx0cmV0dXJuIHN0eWxlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmNsaWNrKCkgbWV0aG9kIHNpbXVsYXRlcyBhIGNsaWNrIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvY2xpY2t9XG5cdCAqL1xuXHRjbGljaygpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5jbGljaylcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uY2xpY2soKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5mb2N1cygpIG1ldGhvZCBzZXRzIGZvY3VzIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvZm9jdXN9XG5cdCAqL1xuXHRmb2N1cyhvcHRpb25zKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZm9jdXMpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmZvY3VzKG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmJsdXIoKSBtZXRob2QgcmVtb3ZlcyBmb2N1cyBmcm9tIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICovXG5cdGJsdXIoKSB7XG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIoKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlckJ5TW9kZShtb2RlKSB7XG5cdHN3aXRjaCAobW9kZSkge1xuXHRcdGNhc2UgXCJtYW51YWxcIjpcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiLCAoZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBjYWxsYmFjayA9IHRoaXMuZ2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiKTtcblx0XHRcdFx0aWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwic3VibWl0XCI6XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLnNldE9wdGlvbihcImFjdGlvbnMuY2xpY2tcIiwgKGUpID0+IHtcblx0XHRcdFx0Y29uc3QgZm9ybSA9IHRoaXMuZm9ybTtcblxuXHRcdFx0XHRpZiAoZm9ybSBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudCkge1xuXHRcdFx0XHRcdGZvcm0ucmVxdWVzdFN1Ym1pdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0YnJlYWs7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWJ1dHRvbl1gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cblxuICAgICAgICAgICAgPG1vbnN0ZXItc3RhdGUtYnV0dG9uIGV4cG9ydHBhcnRzPVwiYnV0dG9uOmJ1dHRvbi1idXR0b24sY29udHJvbDpidXR0b24tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItb3B0aW9uLWNsYXNzZXMtYnV0dG9uIHBhdGg6Y2xhc3Nlcy5idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQ9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b25cIj48L3NwYW4+XG4gICAgICAgICAgICA8L21vbnN0ZXItc3RhdGUtYnV0dG9uPlxuXG5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXJcIiBwYXJ0PVwicG9wcGVyXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwibW9uc3Rlci1jb2xvci1wcmltYXJ5LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYXJyb3dcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwibWVzc2FnZVwiIHBhcnQ9XCJtZXNzYWdlXCIgY2xhc3M9XCJmbGV4XCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDptZXNzYWdlLmNvbnRlbnRcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KE1lc3NhZ2VTdGF0ZUJ1dHRvbik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX1JPTEUgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IHR5cGVPZiB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlb2YubWpzXCI7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi9idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBQb3BwZXJCdXR0b24gfSBmcm9tIFwiLi9wb3BwZXItYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgQ29uZmlybUJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L2NvbmZpcm0tYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5cbmltcG9ydCBcIi4vYnV0dG9uLm1qc1wiO1xuaW1wb3J0IFwiLi9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanNcIjtcbmltcG9ydCB7IFBvcHBlckJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3BvcHBlci1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3N0YXRlLWJ1dHRvbi5tanNcIjtcblxuZXhwb3J0IHsgQ29uZmlybUJ1dHRvbiB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbmZpcm1CdXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjYW5jZWxCdXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY2FuY2VsQnV0dG9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBUaGlzIGFjdGlvbiBjYWxsYmFjayBleGVjdXRlcyB0aGUgYWN0aW9ucyB3aGVuIGEgYnV0dG9uIGlzIGNsaWNrZWQuXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVBY3Rpb25DYWxsYmFja1xuICogQHBhcmFtIHtFdmVudH0gZSBFdmVudFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAdGhpcyB7Q3VzdG9tQ29udHJvbH1cbiAqL1xuXG4vKipcbiAqIFRoaXMgQ3VzdG9tQ29udHJvbCBjcmVhdGVzIGEgY29uZmlybSBidXR0b24gZWxlbWVudCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvY29uZmlybS1idXR0b24ucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5XG4gKiBhcyB3ZWxsIGFzIFtwb29wZXJqc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIDxtb25zdGVyLWNvbmZpcm0tYnV0dG9uIC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbmZpcm0tYnV0dG9uJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItY29uZmlybS1idXR0b24+PC9tb25zdGVyLWNvbmZpcm0tYnV0dG9uPlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCB7Q29uZmlybUJ1dHRvbn0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL2NvbmZpcm0tYnV0dG9uLmpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY29uZmlybS1idXR0b24nKTtcbiAqIGBgYFxuICogVGhlIGBkYXRhLW1vbnN0ZXItYnV0dG9uLWNsYXNzYCBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBDU1MgY2xhc3Mgb2YgdGhlIGJ1dHRvbi5cbiAqXG4gKiBAc3RhcnR1bWwgY29uZmlybS1idXR0b24ucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDdXN0b21Db250cm9sXG4gKiBDdXN0b21Db250cm9sIDx8LS0gQnV0dG9uXG4gKiBCdXR0b24gPHwtLSBQb3BwZXJCdXR0b25cbiAqIFBvcHBlckJ1dHRvbiA8fC0tIENvbmZpcm1CdXR0b25cbiAqIEBlbmR1bWxcbiAqXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1cbiAqIEBzdW1tYXJ5IEEgY29uZmlybSBidXR0b25cbiAqL1xuY2xhc3MgQ29uZmlybUJ1dHRvbiBleHRlbmRzIFBvcHBlckJ1dHRvbiB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL2NvbmZpcm0tYnV0dG9uQEBpbnN0YW5jZVwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0b2dnbGVFdmVudFR5cGU9Y2xpY2ssdG91Y2ggTGlzdCBvZiBldmVudCB0eXBlcyB0byBiZSBvYnNlcnZlZCBmb3Igb3BlbmluZyB0aGUgY29uZmlybSBtZXNzYWdlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5idXR0b249JzxzbG90IG5hbWU9XCJidXR0b25cIj48L3Nsb3Q+JyBCdXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5tZXNzYWdlPSc8c2xvdD5TaG91bGQgSSBTdGF5IG9yIFNob3VsZCBJIEdvPzwvc2xvdD4nIE1lc3NhZ2Vcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5jb25maXJtPSc8c2xvdCBuYW1lPVwiY29uZmlybVwiPkNvbmZpcm08L3Nsb3Q+JyBDb25maXJtIGJ1dHRvbiBsYWJlbFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLmNhbmNlbD0nPHNsb3QgbmFtZT1cImNhbmNlbFwiPkNhbmNlbDwvc2xvdD4nIENhbmNlbCBidXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5leGFtcGxlQWN0aW9uQ2FsbGJhY2t9IGFjdGlvbnMuY29uZmlybVxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVBY3Rpb25DYWxsYmFja30gYWN0aW9ucy5jYW5jZWwgTGlzdCBvZiBldmVudCB0eXBlcyB0byBiZSBvYnNlcnZlZCBmb3Igb3BlbmluZyB0aGUgZHJvcGRvd25cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHBvcHBlciBbUG9wcGVySlMgT3B0aW9uc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcG9wcGVyLnBsYWNlbWVudD10b3AgUG9wcGVySlMgcGxhY2VtZW50XG5cdCAqIEBleHRlbmRzIHtQb3BwZXJCdXR0b259XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0Y29uc3Qgb2JqID0gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRidXR0b246ICc8c2xvdCBuYW1lPVwiYnV0dG9uXCI+PC9zbG90PicsXG5cdFx0XHRcdG1lc3NhZ2U6IFwiPHNsb3Q+U2hvdWxkIEkgU3RheSBvciBTaG91bGQgSSBHbz88L3Nsb3Q+XCIsXG5cdFx0XHRcdGNvbmZpcm06ICc8c2xvdCBuYW1lPVwiY29uZmlybVwiPkNvbmZpcm08L3Nsb3Q+Jyxcblx0XHRcdFx0Y2FuY2VsOiAnPHNsb3QgbmFtZT1cImNhbmNlbFwiPkNhbmNlbDwvc2xvdD4nLFxuXHRcdFx0fSxcblx0XHR9KTtcblxuXHRcdG9ialtcImNsYXNzZXNcIl1bXCJjb25maXJtQnV0dG9uXCJdID0gXCJtb25zdGVyLWJ1dHRvbi1wcmltYXJ5XCI7XG5cdFx0b2JqW1wiY2xhc3Nlc1wiXVtcImNhbmNlbEJ1dHRvblwiXSA9IFwibW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5XCI7XG5cdFx0b2JqW1wiYWN0aW9uc1wiXVtcImNhbmNlbFwiXSA9IChlKSA9PiB7XG5cdFx0XHR0aGlzLmhpZGVEaWFsb2coKTtcblx0XHR9O1xuXG5cdFx0b2JqW1wiYWN0aW9uc1wiXVtcImNvbmZpcm1cIl0gPSAoZSkgPT4ge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhpcyBjYWxsYmFjayBtdXN0IGJlIGltcGxlbWVudGVkXCIpO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0aGlkZURpYWxvZygpIHtcblx0XHRzdXBlci5oaWRlRGlhbG9nKCk7XG5cdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0ucmVtb3ZlU3RhdGUoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJCdXR0b259XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudGhhbmRsZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItY29uZmlybS1idXR0b25cIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtBcnJheX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdGNvbnN0IHN0eWxlcyA9IFBvcHBlckJ1dHRvbi5nZXRDU1NTdHlsZVNoZWV0KCk7XG5cdFx0c3R5bGVzLnB1c2goQ29uZmlybUJ1dHRvblN0eWxlU2hlZXQpO1xuXHRcdHJldHVybiBzdHlsZXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlckJ1dHRvbn1cblx0ICovXG5cdHNob3dEaWFsb2coKSB7XG5cdFx0Y29uc3QgY29uZmlybUJ1dHRvbkNsYXNzID0gdGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLmNvbmZpcm1CdXR0b25cIik7XG5cdFx0aWYgKGNvbmZpcm1CdXR0b25DbGFzcykge1xuXHRcdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFxuXHRcdFx0XHRcImNsYXNzZXMuYnV0dG9uXCIsXG5cdFx0XHRcdGNvbmZpcm1CdXR0b25DbGFzcyxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2FuY2VsQnV0dG9uQ2xhc3MgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuY2FuY2VsQnV0dG9uXCIpO1xuXHRcdGlmIChjYW5jZWxCdXR0b25DbGFzcykge1xuXHRcdFx0dGhpc1tjYW5jZWxCdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XHRcdFwiY2xhc3Nlcy5idXR0b25cIixcblx0XHRcdFx0Y2FuY2VsQnV0dG9uQ2xhc3MsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBzdXBlci5zaG93RGlhbG9nKCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBjb25maXJtIGJ1dHRvbiBzdGF0ZVxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGVcblx0ICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRcblx0ICogQHJldHVybnMge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLkNvbmZpcm1CdXR0b259XG5cdCAqL1xuXHRzZXRDb25maXJtQnV0dG9uU3RhdGUoc3RhdGUsIHRpbWVvdXQpIHtcblx0XHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRTdGF0ZShzdGF0ZSwgdGltZW91dCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGFuZCBzaG93IHRoZSBjb25maXJtIGJ1dHRvbiBtZXNzYWdlXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0XG5cdCAqIEByZXR1cm5zIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Db25maXJtQnV0dG9ufVxuXHQgKi9cblx0c2hvd0NvbmZpcm1CdXR0b25NZXNzYWdlKG1lc3NhZ2UsIHRpbWVvdXQpIHtcblx0XHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRNZXNzYWdlKG1lc3NhZ2UpO1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2hvd01lc3NhZ2UodGltZW91dCk7XG5cdFx0fSwgMCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHR5cGVcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBnZXRBY3Rpb24odHlwZSkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0Y29uc3QgY2FsbGJhY2sgPSBzZWxmLmdldE9wdGlvbihgYWN0aW9ucy4ke3R5cGV9YCk7XG5cdFx0aWYgKHR5cGVPZihjYWxsYmFjaykgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNhbGxiYWNrLmNhbGwodGhpcywgZXZlbnQpO1xuXHR9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtpbml0RXZlbnRoYW5kbGVyfVxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlckJ1dHRvbiNtb25zdGVyLWNvbmZpcm1cbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJCdXR0b24jbW9uc3Rlci1jb25maXJtZWRcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50aGFuZGxlcigpIHtcblx0dGhpc1tjYW5jZWxCdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XCJjbGlja0V2ZW50VHlwZVwiLFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiY2xpY2tFdmVudFR5cGVcIiwgW1wiY2xpY2tcIl0pLFxuXHQpO1xuXHR0aGlzW2NhbmNlbEJ1dHRvbkVsZW1lbnRTeW1ib2xdLnNldE9wdGlvbihcblx0XHRcImFjdGlvbnMuY2xpY2tcIixcblx0XHRnZXRBY3Rpb24uY2FsbCh0aGlzLCBcImNhbmNlbFwiKSxcblx0KTtcblxuXHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XCJjbGlja0V2ZW50VHlwZVwiLFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiY2xpY2tFdmVudFR5cGVcIiwgW1wiY2xpY2tcIl0pLFxuXHQpO1xuXHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXCJhY3Rpb25zLmNsaWNrXCIsICgpID0+IHtcblx0XHRjb25zdCBjYWxsYmFjayA9IGdldEFjdGlvbi5jYWxsKHRoaXMsIFwiY29uZmlybVwiKTtcblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLWNvbmZpcm1cIiwge30pO1xuXHRcdGNhbGxiYWNrLmNhbGwodGhpcyk7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1jb25maXJtZWRcIiwge30pO1xuXHR9KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbY29uZmlybUJ1dHRvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jb25maXJtXWAsXG5cdCk7XG5cdHRoaXNbY2FuY2VsQnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNhbmNlbF1gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRpc2FibGVkIHBhdGg6ZGlzYWJsZWQgfCBpZjp0cnVlLCBjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBwYXJ0PVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b25cIj48L2J1dHRvbj5cblxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJtb25zdGVyLWNvbG9yLXByaW1hcnktMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJhcnJvd1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cIm1lc3NhZ2VcIiBjbGFzcz1cImZsZXhcIiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLm1lc3NhZ2VcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiZGVjaXNpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPG1vbnN0ZXItbWVzc2FnZS1zdGF0ZS1idXR0b24gZXhwb3J0cGFydHM9XCJtb25zdGVyLXN0YXRlLWJ1dHRvbjpjb25maXJtLWJ1dHRvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w6Y29uZmlybS1jb250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLWJ1dHRvbjpjb25maXJtLWNvbnRyb2wtYnV0dG9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLWNvbnRyb2w6Y29uZmlybS1idXR0b24tY29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHBlcjpjb25maXJtLXBvcHBlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6Y29uZmlybS1wb3BwZXItbWVzc2FnZS1tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjpjb25maXJtLXBvcHBlci1tZXNzYWdlLWljb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTpjb25maXJtLXBvcHBlci1tZXNzYWdlLXRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItYnV0dG9uLWNsYXNzIHBhdGg6Y2xhc3Nlcy5jb25maXJtQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjb25maXJtXCIgcGFydD1cImNvbmZpcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMuY29uZmlybVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tb25zdGVyLW1lc3NhZ2Utc3RhdGUtYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgIDxtb25zdGVyLWJ1dHRvbiBleHBvcnRwYXJ0cz1cImJ1dHRvbjpjYW5jZWwtYnV0dG9uLGNvbnRyb2w6Y2FuY2VsLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItYnV0dG9uLWNsYXNzIHBhdGg6Y2xhc3Nlcy5jYW5jZWxCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjYW5jZWxcIiBwYXJ0PVwiY2FuY2VsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmNhbmNlbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tb25zdGVyLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoQ29uZmlybUJ1dHRvbik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBwYXJzZURhdGFVUkwgfSBmcm9tIFwiLi4vdHlwZXMvZGF0YXVybC5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4vcGF0aGZpbmRlci5tanNcIjtcblxuZXhwb3J0IHsgRGF0YXNvdXJjZSB9O1xuXG4vKipcbiAqIFRoaXMgY2FsbGJhY2sgY2FuIGJlIHBhc3NlZCB0byBhIGRhdGFzb3VyY2UgYW5kIGlzIHVzZWQgdG8gYWRhcHQgZGF0YSBzdHJ1Y3R1cmVzLlxuICpcbiAqIEBjYWxsYmFjayBNb25zdGVyLkRhdGEuRGF0YXNvdXJjZX5leGFtcGxlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgIEtleVxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YVxuICogQHNlZSBNb25zdGVyLkRhdGEuRGF0YXNvdXJjZVxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3QgaW50ZXJuYWxEYXRhU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9AQGRhdGFcIixcbik7XG5cbi8qKlxuICogVGhlIGRhdGFzb3VyY2UgY2xhc3MgaXMgdGhlIGJhc2lzIGZvciBkZWFsaW5nIHdpdGggZGlmZmVyZW50IGRhdGEgc291cmNlcy5cbiAqIEl0IHByb3ZpZGVzIGEgdW5pZmllZCBpbnRlcmZhY2UgZm9yIGFjY2Vzc2luZyBkYXRhXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvZGF0YS9kYXRhc291cmNlLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YVxuICogQHN1bW1hcnkgVGhlIGRhdGFzb3VyY2UgY2xhc3MgZW5jYXBzdWxhdGVzIHRoZSBhY2Nlc3MgdG8gZGF0YSBvYmplY3RzLlxuICovXG5jbGFzcyBEYXRhc291cmNlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBjcmVhdGVzIGEgbmV3IGRhdGFzb3VyY2Vcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IG5ldyBQcm94eU9ic2VydmVyKHtcblx0XHRcdG9wdGlvbnM6IGV4dGVuZCh7fSwgdGhpcy5kZWZhdWx0cyksXG5cdFx0fSk7XG5cblx0XHR0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0gPSBuZXcgUHJveHlPYnNlcnZlcih7fSk7XG5cdH1cblxuXHQvKipcblx0ICogYXR0YWNoIGEgbmV3IG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtEYXRhc291cmNlfVxuXHQgKi9cblx0YXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uYXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGRldGFjaCBhIG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtEYXRhc291cmNlfVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Y29udGFpbnNPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uY29udGFpbnNPYnNlcnZlcihvYnNlcnZlcik7XG5cdH1cblxuXHQvKipcblx0ICogRGVyaXZlZCBjbGFzc2VzIGNhbiBvdmVycmlkZSBhbmQgZXh0ZW5kIHRoaXMgbWV0aG9kIGFzIGZvbGxvd3MuXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBnZXQgZGVmYXVsdHMoKSB7XG5cdCAqICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHQgKiAgICAgICAgbXlWYWx1ZTp0cnVlXG5cdCAqICAgIH0pO1xuXHQgKiB9XG5cdCAqIGBgYFxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgb3B0aW9uXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7RGF0YXNvdXJjZX1cblx0ICovXG5cdHNldE9wdGlvbihwYXRoLCB2YWx1ZSkge1xuXHRcdG5ldyBQYXRoZmluZGVyKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKVtcIm9wdGlvbnNcIl0pLnNldFZpYShcblx0XHRcdHBhdGgsXG5cdFx0XHR2YWx1ZSxcblx0XHQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gb3B0aW9uc1xuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9wdGlvbnMgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gZGVmaW5pdGlvblxuXHQgKi9cblx0c2V0T3B0aW9ucyhvcHRpb25zKSB7XG5cdFx0aWYgKGlzU3RyaW5nKG9wdGlvbnMpKSB7XG5cdFx0XHRvcHRpb25zID0gcGFyc2VPcHRpb25zSlNPTihvcHRpb25zKTtcblx0XHR9XG5cdFx0ZXh0ZW5kKFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpW1wib3B0aW9uc1wiXSxcblx0XHRcdHRoaXMuZGVmYXVsdHMsXG5cdFx0XHRvcHRpb25zLFxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBuZXN0ZWQgb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGJ5IHBhdGggYGEuYi5jYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuXHQgKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZVxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0Z2V0T3B0aW9uKHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuXHRcdGxldCB2YWx1ZTtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YWx1ZSA9IG5ldyBQYXRoZmluZGVyKFxuXHRcdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXSxcblx0XHRcdCkuZ2V0VmlhKHBhdGgpO1xuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzLlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0cmVhZCgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlc1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXMuXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHR3cml0ZSgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlc1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHJlYWwgb2JqZWN0XG5cdCAqXG5cdCAqIEByZXR1cm4ge09iamVjdHxBcnJheX1cblx0ICovXG5cdGdldCgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbERhdGFTeW1ib2xdLmdldFJlYWxTdWJqZWN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IGRhdGFcblx0ICogQHJldHVybiB7RGF0YXNvdXJjZX1cblx0ICovXG5cdHNldChkYXRhKSB7XG5cdFx0dGhpc1tpbnRlcm5hbERhdGFTeW1ib2xdLnNldFN1YmplY3QoZGF0YSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2VcIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtTdHJpbmd9IGRhdGFcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uXG4gKi9cbmZ1bmN0aW9uIHBhcnNlT3B0aW9uc0pTT04oZGF0YSkge1xuXHRpZiAoaXNTdHJpbmcoZGF0YSkpIHtcblx0XHQvLyB0aGUgY29uZmlndXJhdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgZGF0YSB1cmwuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGRhdGFVcmwgPSBwYXJzZURhdGFVUkwoZGF0YSk7XG5cdFx0XHRkYXRhID0gZGF0YVVybC5jb250ZW50O1xuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgb2JqID0gSlNPTi5wYXJzZShkYXRhKTtcblx0XHRcdHZhbGlkYXRlT2JqZWN0KG9iaik7XG5cdFx0XHRyZXR1cm4gb2JqO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0YHRoZSBvcHRpb25zIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBqc29uIGRlZmluaXRpb24gKGFjdHVhbDogJHtkYXRhfSkuYCxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHt9O1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgRGF0YXNvdXJjZSB9IGZyb20gXCIuLi9kYXRhc291cmNlLm1qc1wiO1xuXG5leHBvcnQgeyBTdG9yYWdlLCBzdG9yYWdlT2JqZWN0U3ltYm9sIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHN0b3JhZ2VPYmplY3RTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2UvQEBzdG9yYWdlT2JqZWN0XCIsXG4pO1xuXG4vKipcbiAqIFRoZSBjbGFzcyByZXByZXNlbnRzIGEgcmVjb3JkLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRhdGEuRGF0YXNvdXJjZVxuICogQHN1bW1hcnkgVGhlIFN0b3JhZ2UgY2xhc3MgZW5jYXBzdWxhdGVzIHRoZSBhY2Nlc3MgdG8gZGF0YSBvYmplY3RzIG92ZXIgV2ViU3RvcmFnZUFQSS5cbiAqL1xuY2xhc3MgU3RvcmFnZSBleHRlbmRzIERhdGFzb3VyY2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleSBMb2NhbFN0b3JhZ2UgS2V5XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihrZXkpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwia2V5XCIsIHZhbGlkYXRlU3RyaW5nKGtleSkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGtleT11bmRlZmluZWQgTG9jYWxTdG9yYWdlIEtleVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0a2V5OiB1bmRlZmluZWQsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzLlxuXHQgKiBAcmV0dXJuIHtleHRlcm5hbDpTdG9yYWdlfVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0W3N0b3JhZ2VPYmplY3RTeW1ib2xdKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZGF0YSBjYW5ub3QgYmUgcmVhZFxuXHQgKi9cblx0cmVhZCgpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdGNvbnN0IHN0b3JhZ2UgPSBzZWxmW3N0b3JhZ2VPYmplY3RTeW1ib2xdKCk7XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRcdGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHN0b3JhZ2UuZ2V0SXRlbShzZWxmLmdldE9wdGlvbihcImtleVwiKSkpO1xuXHRcdFx0c2VsZi5zZXQoZGF0YSA/PyB7fSk7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7U3RvcmFnZX1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBkYXRhIGNhbm5vdCBiZSB3cml0dGVuXG5cdCAqL1xuXHR3cml0ZSgpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdGNvbnN0IHN0b3JhZ2UgPSBzZWxmW3N0b3JhZ2VPYmplY3RTeW1ib2xdKCk7XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRcdGNvbnN0IGRhdGEgPSBzZWxmLmdldCgpO1xuXHRcdFx0aWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRzdG9yYWdlLnJlbW92ZUl0ZW0oc2VsZi5nZXRPcHRpb24oXCJrZXlcIikpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3RvcmFnZS5zZXRJdGVtKHNlbGYuZ2V0T3B0aW9uKFwia2V5XCIpLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTdG9yYWdlfVxuXHQgKi9cblx0Z2V0Q2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBTdG9yYWdlKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLmtleSk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IERhdGFzb3VyY2UgfSBmcm9tIFwiLi4vZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IFBpcGUgfSBmcm9tIFwiLi4vcGlwZS5tanNcIjtcblxuZXhwb3J0IHsgU2VydmVyIH07XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYWxsIHNlcnZlciBkYXRhIHNvdXJjZXNcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRhdGEuRGF0YXNvdXJjZVxuICogQHN1bW1hcnkgVGhlIFNlcnZlciBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBhIHNlcnZlciBkYXRhc291cmNlXG4gKi9cbmNsYXNzIFNlcnZlciBleHRlbmRzIERhdGFzb3VyY2Uge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXJcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBwcmVwYXJlcyB0aGUgZGF0YSB0aGF0IGNvbWVzIGZyb20gdGhlIHNlcnZlci5cblx0ICogU2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXlsb2FkXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XG5cdCAqL1xuXHR0cmFuc2Zvcm1TZXJ2ZXJQYXlsb2FkKHBheWxvYWQpIHtcblx0XHRwYXlsb2FkID0gZG9UcmFuc2Zvcm0uY2FsbCh0aGlzLCBcInJlYWRcIiwgcGF5bG9hZCk7XG5cblx0XHRjb25zdCBkYXRhUGF0aCA9IHRoaXMuZ2V0T3B0aW9uKFwicmVhZC5wYXRoXCIpO1xuXHRcdGlmIChkYXRhUGF0aCkge1xuXHRcdFx0cGF5bG9hZCA9IG5ldyBQYXRoZmluZGVyKHBheWxvYWQpLmdldFZpYShkYXRhUGF0aCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBheWxvYWQ7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBwcmVwYXJlcyB0aGUgZGF0YSBmb3Igd3JpdGluZyBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXlsb2FkXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XG5cdCAqL1xuXHRwcmVwYXJlU2VydmVyUGF5bG9hZChwYXlsb2FkKSB7XG5cdFx0cGF5bG9hZCA9IGRvVHJhbnNmb3JtLmNhbGwodGhpcywgXCJ3cml0ZVwiLCBwYXlsb2FkKTtcblxuXHRcdGNvbnN0IHNoZWF0aGluZ09iamVjdCA9IHRoaXMuZ2V0T3B0aW9uKFwid3JpdGUuc2hlYXRoaW5nLm9iamVjdFwiKTtcblx0XHRjb25zdCBzaGVhdGhpbmdQYXRoID0gdGhpcy5nZXRPcHRpb24oXCJ3cml0ZS5zaGVhdGhpbmcucGF0aFwiKTtcblxuXHRcdGlmIChzaGVhdGhpbmdPYmplY3QgJiYgc2hlYXRoaW5nUGF0aCkge1xuXHRcdFx0Y29uc3Qgc3ViID0gcGF5bG9hZDtcblx0XHRcdHBheWxvYWQgPSBzaGVhdGhpbmdPYmplY3Q7XG5cdFx0XHRuZXcgUGF0aGZpbmRlcihwYXlsb2FkKS5zZXRWaWEoc2hlYXRoaW5nUGF0aCwgc3ViKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcGF5bG9hZDtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gZG9UcmFuc2Zvcm0odHlwZSwgb2JqKSB7XG5cdGNvbnN0IHRyYW5zZm9ybWF0aW9uID0gdGhpcy5nZXRPcHRpb24oYCR7dHlwZX0ubWFwcGluZy50cmFuc2Zvcm1lcmApO1xuXHRpZiAodHJhbnNmb3JtYXRpb24gIT09IHVuZGVmaW5lZCAmJiB0cmFuc2Zvcm1hdGlvbiAhPT0gbnVsbCkge1xuXHRcdGNvbnN0IHBpcGUgPSBuZXcgUGlwZSh0cmFuc2Zvcm1hdGlvbik7XG5cdFx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5nZXRPcHRpb24oYCR7dHlwZX0ubWFwcGluZy5jYWxsYmFja3NgKTtcblxuXHRcdGlmIChpc09iamVjdChjYWxsYmFja3MpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBjYWxsYmFja3MpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGNhbGxiYWNrcy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmXG5cdFx0XHRcdFx0dHlwZW9mIGNhbGxiYWNrc1trZXldID09PSBcImZ1bmN0aW9uXCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cGlwZS5zZXRDYWxsYmFjayhrZXksIGNhbGxiYWNrc1trZXldKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdG9iaiA9IHBpcGUucnVuKG9iaik7XG5cdH1cblxuXHRyZXR1cm4gb2JqO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgV3JpdGVFcnJvciB9O1xuXG4vKipcbiAqIEVycm9yIG1lc3NhZ2UgZm9yIEFQSSByZXF1ZXN0cyB3aXRoIGV4dGVuc2lvbiBvZiByZXF1ZXN0IGFuZCB2YWxpZGF0aW9uLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRhdGEuRGF0YXNvdXJjZS5TZXJ2ZXIuUmVzdEFQSVxuICogQHN1bW1hcnkgdGhlIGVycm9yIGlzIHRocm93biBieSB0aGUgcmVzdCBhcGkgaW4gY2FzZSBvZiBlcnJvclxuICovXG5jbGFzcyBXcml0ZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2Vcblx0ICogQHBhcmFtIHtSZXNwb25zZX0gcmVzcG9uc2Vcblx0ICogQHBhcmFtIHtPYmplY3R9IHZhbGlkYXRpb25cblx0ICovXG5cdGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHJlc3BvbnNlLCB2YWxpZGF0aW9uKSB7XG5cdFx0c3VwZXIobWVzc2FnZSk7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0XHRyZXNwb25zZTogcmVzcG9uc2UsXG5cdFx0XHR2YWxpZGF0aW9uOiB2YWxpZGF0aW9uLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFxuXHRcdFx0XCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS93cml0ZS1lcnJvclwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UmVzcG9uc2V9XG5cdCAqL1xuXHRnZXRSZXNwb25zZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJyZXNwb25zZVwiXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtPYmplY3R9XG5cdCAqL1xuXHRnZXRWYWxpZGF0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXVtcInZhbGlkYXRpb25cIl07XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IERhdGFGZXRjaEVycm9yIH07XG5cbi8qKlxuICogRXJyb3IgbWVzc2FnZSBmb3IgQVBJIHJlcXVlc3RzXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy40My4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlLlNlcnZlci5SZXN0QVBJXG4gKiBAc3VtbWFyeSB0aGUgZXJyb3IgaXMgdGhyb3duIGJ5IHRoZSByZXN0IGFwaSBpbiBjYXNlIG9mIGVycm9yXG4gKi9cbmNsYXNzIERhdGFGZXRjaEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2Vcblx0ICogQHBhcmFtIHtSZXNwb25zZX0gcmVzcG9uc2Vcblx0ICovXG5cdGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHJlc3BvbnNlKSB7XG5cdFx0c3VwZXIobWVzc2FnZSk7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0XHRyZXNwb25zZTogcmVzcG9uc2UsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL2RhdGFmZXRjaGVycm9yQEBpbnN0YW5jZVwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UmVzcG9uc2V9XG5cdCAqL1xuXHRnZXRSZXNwb25zZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJyZXNwb25zZVwiXTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0LCBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgU2VydmVyIH0gZnJvbSBcIi4uL3NlcnZlci5tanNcIjtcbmltcG9ydCB7IFdyaXRlRXJyb3IgfSBmcm9tIFwiLi9yZXN0YXBpL3dyaXRlZXJyb3IubWpzXCI7XG5pbXBvcnQgeyBEYXRhRmV0Y2hFcnJvciB9IGZyb20gXCIuL3Jlc3RhcGkvZGF0YS1mZXRjaC1lcnJvci5tanNcIjtcblxuZXhwb3J0IHsgUmVzdEFQSSB9O1xuXG4vKipcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKiBAbWVtYmVyT2YgTW9uc3RlclxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy4xMi4wXG4gKi9cbmNvbnN0IHJhd0RhdGFTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL3Jhd2RhdGFcIixcbik7XG5cbi8qKlxuICogVGhlIFJlc3RBUEkgaXMgYSBjbGFzcyB0aGF0IGVuYWJsZXMgYSBSRVNUIEFQSSBzZXJ2ZXIuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi8uLi8uLi9leGFtcGxlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRhdGEuRGF0YXNvdXJjZS5TZXJ2ZXJcbiAqIEBzdW1tYXJ5IFRoZSBSZXN0QVBJIGlzIGEgY2xhc3MgdGhhdCBiaW5kcyBhIFJFU1QgQVBJIHNlcnZlci5cbiAqL1xuY2xhc3MgUmVzdEFQSSBleHRlbmRzIFNlcnZlciB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIG9wdGlvbnMgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHRoZSBkYXRhc291cmNlLlxuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3Jlc3RhcGlcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlPXt9IE9wdGlvbnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLmluaXQ9e30gQW4gb3B0aW9ucyBvYmplY3QgY29udGFpbmluZyBhbnkgY3VzdG9tIHNldHRpbmdzIHRoYXQgeW91IHdhbnQgdG8gYXBwbHkgdG8gdGhlIHJlcXVlc3QuIFRoZSBwYXJhbWV0ZXJzIGFyZSBpZGVudGljYWwgdG8gdGhvc2Ugb2YgdGhlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUmVxdWVzdC9SZXF1ZXN0fFJlcXVlc3QgY29uc3RydWN0b3J9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3cml0ZS5pbml0Lm1ldGhvZD1QT1NUXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5pbml0LmhlYWRlcnMgT2JqZWN0IGNvbnRhaW5pbmcgYW55IGN1c3RvbSBoZWFkZXJzIHRoYXQgeW91IHdhbnQgdG8gYXBwbHkgdG8gdGhlIHJlcXVlc3QuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3cml0ZS5yZXNwb25zZUNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSByZXF1ZXN0IGhhcyBiZWVuIGNvbXBsZXRlZC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHdyaXRlLmFjY2VwdGVkU3RhdHVzPVsyMDAsMjAxXVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gd3JpdGUudXJsIFVSTFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUubWFwcGluZyB0aGUgbWFwcGluZyBpcyBhcHBsaWVkIGJlZm9yZSB3cml0aW5nLlxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gd3JpdGUubWFwcGluZy50cmFuc2Zvcm1lciBUcmFuc2Zvcm1lciB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkRhdGEuRGF0YXNvdXJjZX5leGFtcGxlQ2FsbGJhY2tbXX0gd3JpdGUubWFwcGluZy5jYWxsYmFjayB3aXRoIHRoZSBoZWxwIG9mIHRoZSBjYWxsYmFjaywgdGhlIHN0cnVjdHVyZXMgY2FuIGJlIGFkanVzdGVkIGJlZm9yZSB3cml0aW5nLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUucmVwb3J0XG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB3cml0ZS5yZXBvcnQucGF0aCBQYXRoIHRvIHZhbGlkYXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5zaGVhdGhpbmdcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLnNoZWF0aGluZy5vYmplY3QgT2JqZWN0IHRvIGJlIHdyYXBwZWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHdyaXRlLnNoZWF0aGluZy5wYXRoIFBhdGggdG8gdGhlIGRhdGFcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlYWQ9e30gT3B0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcmVhZC5pbml0PXt9IEFuIG9wdGlvbnMgb2JqZWN0IGNvbnRhaW5pbmcgYW55IGN1c3RvbSBzZXR0aW5ncyB0aGF0IHlvdSB3YW50IHRvIGFwcGx5IHRvIHRoZSByZXF1ZXN0LiBUaGUgcGFyYW1ldGVycyBhcmUgaWRlbnRpY2FsIHRvIHRob3NlIG9mIHRoZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1JlcXVlc3QvUmVxdWVzdHxSZXF1ZXN0IGNvbnN0cnVjdG9yfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVhZC5pbml0Lm1ldGhvZD1HRVRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlYWQuYWNjZXB0ZWRTdGF0dXM9WzIwMF1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlYWQudXJsIFVSTFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcmVhZC5tYXBwaW5nIHRoZSBtYXBwaW5nIGlzIGFwcGxpZWQgYWZ0ZXIgcmVhZGluZy5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHJlYWQubWFwcGluZy50cmFuc2Zvcm1lciBUcmFuc2Zvcm1lciB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkRhdGEuRGF0YXNvdXJjZX5leGFtcGxlQ2FsbGJhY2tbXX0gcmVhZC5tYXBwaW5nLmNhbGxiYWNrIHdpdGggdGhlIGhlbHAgb2YgdGhlIGNhbGxiYWNrLCB0aGUgc3RydWN0dXJlcyBjYW4gYmUgYWRqdXN0ZWQgYWZ0ZXIgcmVhZGluZy5cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHdyaXRlOiB7XG5cdFx0XHRcdGluaXQ6IHtcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRyZXNwb25zZUNhbGxiYWNrOiB1bmRlZmluZWQsXG5cdFx0XHRcdGFjY2VwdGVkU3RhdHVzOiBbMjAwLCAyMDFdLFxuXHRcdFx0XHR1cmw6IG51bGwsXG5cdFx0XHRcdG1hcHBpbmc6IHtcblx0XHRcdFx0XHR0cmFuc2Zvcm1lcjogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNhbGxiYWNrczogW10sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNoZWF0aGluZzoge1xuXHRcdFx0XHRcdG9iamVjdDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdHBhdGg6IHVuZGVmaW5lZCxcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVwb3J0OiB7XG5cdFx0XHRcdFx0cGF0aDogdW5kZWZpbmVkLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHJlYWQ6IHtcblx0XHRcdFx0aW5pdDoge1xuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVzcG9uc2VDYWxsYmFjazogdW5kZWZpbmVkLFxuXHRcdFx0XHRhY2NlcHRlZFN0YXR1czogWzIwMF0sXG5cdFx0XHRcdHVybDogbnVsbCxcblx0XHRcdFx0bWFwcGluZzoge1xuXHRcdFx0XHRcdHRyYW5zZm9ybWVyOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0Y2FsbGJhY2tzOiBbXSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBvcHRpb25zIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBqc29uIGRlZmluaXRpb25cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3Rcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBkYXRhIGNhbm5vdCBiZSByZWFkXG5cdCAqL1xuXHRyZWFkKCkge1xuXHRcdGxldCBpbml0ID0gdGhpcy5nZXRPcHRpb24oXCJyZWFkLmluaXRcIik7XG5cdFx0aWYgKCFpc09iamVjdChpbml0KSkgaW5pdCA9IHt9O1xuXHRcdGlmICghaW5pdFtcIm1ldGhvZFwiXSkgaW5pdFtcIm1ldGhvZFwiXSA9IFwiR0VUXCI7XG5cblx0XHRsZXQgY2FsbGJhY2sgPSB0aGlzLmdldE9wdGlvbihcInJlYWQucmVzcG9uc2VDYWxsYmFja1wiKTtcblx0XHRpZiAoIWNhbGxiYWNrKVxuXHRcdFx0Y2FsbGJhY2sgPSAob2JqKSA9PiB7XG5cdFx0XHRcdHRoaXMuc2V0KHRoaXMudHJhbnNmb3JtU2VydmVyUGF5bG9hZC5jYWxsKHRoaXMsIG9iaikpO1xuXHRcdFx0fTtcblxuXHRcdHJldHVybiBmZXRjaERhdGEuY2FsbCh0aGlzLCBpbml0LCBcInJlYWRcIiwgY2FsbGJhY2spO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqIEB0aHJvd3Mge1dyaXRlRXJyb3J9IHRoZSBkYXRhIGNhbm5vdCBiZSB3cml0dGVuXG5cdCAqL1xuXHR3cml0ZSgpIHtcblx0XHRsZXQgaW5pdCA9IHRoaXMuZ2V0T3B0aW9uKFwid3JpdGUuaW5pdFwiKTtcblx0XHRpZiAoIWlzT2JqZWN0KGluaXQpKSBpbml0ID0ge307XG5cdFx0aWYgKHR5cGVvZiBpbml0W1wiaGVhZGVyc1wiXSAhPT0gXCJvYmplY3RcIikge1xuXHRcdFx0aW5pdFtcImhlYWRlcnNcIl0gPSB7XG5cdFx0XHRcdFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aWYgKCFpbml0W1wibWV0aG9kXCJdKSBpbml0W1wibWV0aG9kXCJdID0gXCJQT1NUXCI7XG5cblx0XHRjb25zdCBvYmogPSB0aGlzLnByZXBhcmVTZXJ2ZXJQYXlsb2FkKHRoaXMuZ2V0KCkpO1xuXHRcdGluaXRbXCJib2R5XCJdID0gSlNPTi5zdHJpbmdpZnkob2JqKTtcblxuXHRcdGNvbnN0IGNhbGxiYWNrID0gdGhpcy5nZXRPcHRpb24oXCJ3cml0ZS5yZXNwb25zZUNhbGxiYWNrXCIpO1xuXHRcdHJldHVybiBmZXRjaERhdGEuY2FsbCh0aGlzLCBpbml0LCBcIndyaXRlXCIsIGNhbGxiYWNrKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtSZXN0QVBJfVxuXHQgKi9cblx0Z2V0Q2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBSZXN0QVBJKFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0ucmVhZCxcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLndyaXRlLFxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGluaXRcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSBjYWxsYmFja1xuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gZmV0Y2hEYXRhKGluaXQsIGtleSwgY2FsbGJhY2spIHtcblx0bGV0IHJlc3BvbnNlO1xuXG5cdHJldHVybiBmZXRjaCh0aGlzLmdldE9wdGlvbihgJHtrZXl9LnVybGApLCBpbml0KVxuXHRcdC50aGVuKChyZXNwKSA9PiB7XG5cdFx0XHRyZXNwb25zZSA9IHJlc3A7XG5cblx0XHRcdGNvbnN0IGFjY2VwdGVkU3RhdHVzID0gdGhpcy5nZXRPcHRpb24oYCR7a2V5fS5hY2NlcHRlZFN0YXR1c2AsIFsyMDBdKTtcblxuXHRcdFx0aWYgKGFjY2VwdGVkU3RhdHVzLmluZGV4T2YocmVzcC5zdGF0dXMpID09PSAtMSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRGF0YUZldGNoRXJyb3IoXG5cdFx0XHRcdFx0YHRoZSByZXNwb25zZSBkb2VzIG5vdCBjb250YWluIGEgYWNjZXB0ZWQgc3RhdHVzIChhY3R1YWw6ICR7cmVzcC5zdGF0dXN9KS5gLFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzcC50ZXh0KCk7XG5cdFx0fSlcblx0XHQudGhlbigoYm9keSkgPT4ge1xuXHRcdFx0bGV0IG9iajtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0b2JqID0gSlNPTi5wYXJzZShib2R5KTtcblxuXHRcdFx0XHRyZXNwb25zZVtyYXdEYXRhU3ltYm9sXSA9IG9iajtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0aWYgKGJvZHkubGVuZ3RoID4gMTAwKSB7XG5cdFx0XHRcdFx0Ym9keSA9IGAke2JvZHkuc3Vic3RyaW5nKDAsIDk3KX0uLi5gO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhyb3cgbmV3IERhdGFGZXRjaEVycm9yKFxuXHRcdFx0XHRcdGB0aGUgcmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gKGFjdHVhbDogJHtib2R5fSkuYCxcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0XHRcdGNhbGxiYWNrKG9iaik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXNwb25zZTtcblx0XHR9KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSBcIi4vcXVldWUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCwgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXJMaXN0IH0gZnJvbSBcIi4vb2JzZXJ2ZXJsaXN0Lm1qc1wiO1xuXG5leHBvcnQgeyBPYnNlcnZhYmxlUXVldWUgfTtcblxuLyoqXG4gKiBBbiBvYnNlcnZhYmxlIHF1ZXVlIGlzIGEgbGlzdCBvZiBpdGVtcyB0aGF0IGFyZSBwcm9jZXNzZWQgb25lIGFmdGVyIGFub3RoZXIgKGZpcnN0IGluLCBmaXJzdCBvdXQpLlxuICpcbiAqIGBRdWV1ZS5hZGQoKWAgYW5kIGBRdWV1ZS5jbGVhcigpYCBub3RpZnkgYWxsIG9ic2VydmVycy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvcXVldWUubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAc3VtbWFyeSBBbiBvYnNlcnZhYmxlIFF1ZXVlIChGaWZvKVxuICovXG5jbGFzcyBPYnNlcnZhYmxlUXVldWUgZXh0ZW5kcyBRdWV1ZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdG9ic2VydmVyczogbmV3IE9ic2VydmVyTGlzdCgpLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9vYnNlcnZhYmxlcXVldWVcIik7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgbmV3IGVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybnMge1F1ZXVlfVxuXHQgKi9cblx0YWRkKHZhbHVlKSB7XG5cdFx0c3VwZXIuYWRkKHZhbHVlKTtcblx0XHR0aGlzLm5vdGlmeU9ic2VydmVycygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJlbW92ZSBhbGwgZW50cmllc1xuXHQgKlxuXHQgKiBAcmV0dXJucyB7UXVldWV9XG5cdCAqL1xuXHRjbGVhcigpIHtcblx0XHRzdXBlci5jbGVhcigpO1xuXHRcdHRoaXMubm90aWZ5T2JzZXJ2ZXJzKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQXR0YWNoIGEgbmV3IG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0YXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5vYnNlcnZlcnMuYXR0YWNoKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRhY2ggYSBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJucyB7UHJveHlPYnNlcnZlcn1cblx0ICovXG5cdGRldGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ub2JzZXJ2ZXJzLmRldGFjaChvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogTm90aWZ5IGFsbCBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICovXG5cdG5vdGlmeU9ic2VydmVycygpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0ub2JzZXJ2ZXJzLm5vdGlmeSh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0ub2JzZXJ2ZXJzLmNvbnRhaW5zKG9ic2VydmVyKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi8uLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBNZXNzYWdlIH07XG5cbmNvbnN0IGRhdGFTeW1ib2wgPSBTeW1ib2woXCJAQGRhdGFcIik7XG5cbi8qKlxuICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV2ViU29ja2V0IG1lc3NhZ2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy40LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5OZXQuV2ViU29ja2V0XG4gKiBAc3VtbWFyeSBUaGUgTWVzc2FnZSBjbGFzcyBlbmNhcHN1bGF0ZXMgYSBXZWJTb2NrZXQgbWVzc2FnZS5cbiAqL1xuY2xhc3MgTWVzc2FnZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGFcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3Rcblx0ICovXG5cdGNvbnN0cnVjdG9yKGRhdGEpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbZGF0YVN5bWJvbF0gPSB2YWxpZGF0ZU9iamVjdChkYXRhKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSByYXcgbWVzc2FnZS5cblx0ICpcblx0ICogQHJldHVybnMge29iamVjdH1cblx0ICovXG5cdGdldERhdGEoKSB7XG5cdFx0cmV0dXJuIHRoaXNbZGF0YVN5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMgeyp9XG5cdCAqL1xuXHR0b0pTT04oKSB7XG5cdFx0cmV0dXJuIHRoaXNbZGF0YVN5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGpzb25cblx0ICogQHJldHVybnMge01lc3NhZ2V9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqL1xuXHRzdGF0aWMgZnJvbUpTT04oanNvbikge1xuXHRcdHZhbGlkYXRlU3RyaW5nKGpzb24pO1xuXHRcdHJldHVybiBuZXcgTWVzc2FnZShKU09OLnBhcnNlKGpzb24pKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNJbnRlZ2VyLCBpc1N0cmluZywgaXNPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBCYXNlV2l0aE9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZXdpdGhvcHRpb25zLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZVF1ZXVlIH0gZnJvbSBcIi4uL3R5cGVzL29ic2VydmFibGVxdWV1ZS5tanNcIjtcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tIFwiLi93ZWJjb25uZWN0L21lc3NhZ2UubWpzXCI7XG5cbmV4cG9ydCB7IFdlYkNvbm5lY3QgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVjZWl2ZVF1ZXVlU3ltYm9sID0gU3ltYm9sKFwicmVjZWl2ZVF1ZXVlXCIpO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc2VuZFF1ZXVlU3ltYm9sID0gU3ltYm9sKFwic2VuZFF1ZXVlXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICpcbiAqIGhpbnQ6IHRoaXMgbmFtZSBpcyB1c2VkIGluIHRoZSB0ZXN0cy4gaWYgeW91IHdhbnQgdG8gY2hhbmdlIGl0LCBwbGVhc2UgY2hhbmdlIGl0IGluIHRoZSB0ZXN0cyBhcyB3ZWxsLlxuICovXG5jb25zdCBjb25uZWN0aW9uU3ltYm9sID0gU3ltYm9sKFwiY29ubmVjdGlvblwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbWFudWFsQ2xvc2VTeW1ib2wgPSBTeW1ib2woXCJtYW51YWxDbG9zZVwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjQ1NS5odG1sI3NlY3Rpb24tNy40LjFcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbmNvbnN0IGNvbm5lY3Rpb25TdGF0dXNDb2RlID0ge1xuXHQxMDAwOiBcIk5vcm1hbCBjbG9zdXJlXCIsXG5cdDEwMDE6IFwiR29pbmcgYXdheVwiLFxuXHQxMDAyOiBcIlByb3RvY29sIGVycm9yXCIsXG5cdDEwMDM6IFwiVW5zdXBwb3J0ZWQgZGF0YVwiLFxuXHQxMDA0OiBcIlJlc2VydmVkXCIsXG5cdDEwMDU6IFwiTm8gc3RhdHVzIGNvZGVcIixcblx0MTAwNjogXCJDb25uZWN0aW9uIGNsb3NlZCBhYm5vcm1hbGx5XCIsXG5cdDEwMDc6IFwiSW52YWxpZCBmcmFtZSBwYXlsb2FkIGRhdGFcIixcblx0MTAwODogXCJQb2xpY3kgdmlvbGF0aW9uXCIsXG5cdDEwMDk6IFwiTWVzc2FnZSB0b28gYmlnXCIsXG5cdDEwMTA6IFwiTWFuZGF0b3J5IGV4dGVuc2lvblwiLFxuXHQxMDExOiBcIkludGVybmFsIHNlcnZlciBlcnJvclwiLFxuXHQxMDE1OiBcIlRMUyBoYW5kc2hha2VcIixcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aGlzIHtXZWJDb25uZWN0fVxuICogQHRocm93cyB7RXJyb3J9IE5vIHVybCBkZWZpbmVkIGZvciB3ZWJzb2NrZXQgZGF0YXNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gY29ubmVjdFNlcnZlcihyZXNvbHZlLCByZWplY3QpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0Y29uc3QgdXJsID0gc2VsZi5nZXRPcHRpb24oXCJ1cmxcIik7XG5cdGlmICghdXJsKSB7XG5cdFx0cmVqZWN0KFwiTm8gdXJsIGRlZmluZWQgZm9yIHdlYmNvbm5lY3QuXCIpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGxldCBwcm9taXNlQWxscmVkeVJlc29sdmVkID0gZmFsc2U7XG5cblx0bGV0IGNvbm5lY3Rpb25UaW1lb3V0ID0gc2VsZi5nZXRPcHRpb24oXCJjb25uZWN0aW9uLnRpbWVvdXRcIik7XG5cdGlmICghaXNJbnRlZ2VyKGNvbm5lY3Rpb25UaW1lb3V0KSB8fCBjb25uZWN0aW9uVGltZW91dCA8IDEwMCkge1xuXHRcdGNvbm5lY3Rpb25UaW1lb3V0ID0gNTAwMDtcblx0fVxuXG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGlmIChwcm9taXNlQWxscmVkeVJlc29sdmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHJlamVjdChuZXcgRXJyb3IoXCJDb25uZWN0aW9uIHRpbWVvdXRcIikpO1xuXHR9LCBjb25uZWN0aW9uVGltZW91dCk7XG5cblx0bGV0IHJlY29ubmVjdFRpbWVvdXQgPSBzZWxmLmdldE9wdGlvbihcImNvbm5lY3Rpb24ucmVjb25uZWN0LnRpbWVvdXRcIik7XG5cdGlmICghaXNJbnRlZ2VyKHJlY29ubmVjdFRpbWVvdXQpIHx8IHJlY29ubmVjdFRpbWVvdXQgPCAxMDAwKVxuXHRcdHJlY29ubmVjdFRpbWVvdXQgPSAxMDAwO1xuXHRsZXQgcmVjb25uZWN0QXR0ZW1wdHMgPSBzZWxmLmdldE9wdGlvbihcImNvbm5lY3Rpb24ucmVjb25uZWN0LmF0dGVtcHRzXCIpO1xuXHRpZiAoIWlzSW50ZWdlcihyZWNvbm5lY3RBdHRlbXB0cykgfHwgcmVjb25uZWN0QXR0ZW1wdHMgPCAxKVxuXHRcdHJlY29ubmVjdEF0dGVtcHRzID0gMTtcblx0bGV0IHJlY29ubmVjdEVuYWJsZWQgPSBzZWxmLmdldE9wdGlvbihcImNvbm5lY3Rpb24ucmVjb25uZWN0LmVuYWJsZWRcIik7XG5cdGlmIChyZWNvbm5lY3RFbmFibGVkICE9PSB0cnVlKSByZWNvbm5lY3RFbmFibGVkID0gZmFsc2U7XG5cblx0c2VsZlttYW51YWxDbG9zZVN5bWJvbF0gPSBmYWxzZTtcblx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5yZWNvbm5lY3RDb3VudGVyKys7XG5cblx0aWYgKFxuXHRcdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0ICYmXG5cdFx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQucmVhZHlTdGF0ZSA8IDJcblx0KSB7XG5cdFx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQuY2xvc2UoKTtcblx0fVxuXHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldCA9IG51bGw7XG5cdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0ID0gbmV3IFdlYlNvY2tldCh1cmwpO1xuXG5cdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldmVudCkge1xuXHRcdGlmIChldmVudC5kYXRhIGluc3RhbmNlb2YgQmxvYikge1xuXHRcdFx0Y29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblx0XHRcdHJlYWRlci5hZGRFdmVudExpc3RlbmVyKFwibG9hZGVuZFwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHNlbGZbcmVjZWl2ZVF1ZXVlU3ltYm9sXS5hZGQobmV3IE1lc3NhZ2UocmVhZGVyLnJlc3VsdCkpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZWFkZXIucmVhZEFzVGV4dChuZXcgTWVzc2FnZShldmVudC5kYXRhKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGZbcmVjZWl2ZVF1ZXVlU3ltYm9sXS5hZGQoTWVzc2FnZS5mcm9tSlNPTihldmVudC5kYXRhKSk7XG5cdFx0fVxuXHR9O1xuXG5cdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0Lm9ub3BlbiA9IGZ1bmN0aW9uICgpIHtcblx0XHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnJlY29ubmVjdENvdW50ZXIgPSAwO1xuXHRcdGlmICh0eXBlb2YgcmVzb2x2ZSA9PT0gXCJmdW5jdGlvblwiICYmICFwcm9taXNlQWxscmVkeVJlc29sdmVkKSB7XG5cdFx0XHRwcm9taXNlQWxscmVkeVJlc29sdmVkID0gdHJ1ZTtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9XG5cdH07XG5cblx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQuY2xvc2UgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRpZiAoc2VsZlttYW51YWxDbG9zZVN5bWJvbF0pIHtcblx0XHRcdHNlbGZbbWFudWFsQ2xvc2VTeW1ib2xdID0gZmFsc2U7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0cmVjb25uZWN0RW5hYmxlZCAmJlxuXHRcdFx0dGhpc1tjb25uZWN0aW9uU3ltYm9sXS5yZWNvbm5lY3RDb3VudGVyIDwgcmVjb25uZWN0QXR0ZW1wdHNcblx0XHQpIHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRzZWxmLmNvbm5lY3QoKTtcblx0XHRcdH0sIHJlY29ubmVjdFRpbWVvdXQgKiB0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnJlY29ubmVjdENvdW50ZXIpO1xuXHRcdH1cblx0fTtcblxuXHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldC5vbmVycm9yID0gKGVycm9yKSA9PiB7XG5cdFx0aWYgKFxuXHRcdFx0cmVjb25uZWN0RW5hYmxlZCAmJlxuXHRcdFx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5yZWNvbm5lY3RDb3VudGVyIDwgcmVjb25uZWN0QXR0ZW1wdHNcblx0XHQpIHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRzZWxmLmNvbm5lY3QoKTtcblx0XHRcdH0sIHJlY29ubmVjdFRpbWVvdXQgKiB0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnJlY29ubmVjdENvdW50ZXIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAodHlwZW9mIHJlamVjdCA9PT0gXCJmdW5jdGlvblwiICYmICFwcm9taXNlQWxscmVkeVJlc29sdmVkKSB7XG5cdFx0XHRcdHByb21pc2VBbGxyZWR5UmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBUaGUgUmVzdEFQSSBpcyBhIGNsYXNzIHRoYXQgZW5hYmxlcyBhIFJFU1QgQVBJIHNlcnZlci5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvbmV0L3dlYmNvbm5lY3QubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjEuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLk5ldFxuICogQHN1bW1hcnkgVGhlIExvY2FsU3RvcmFnZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMuXG4gKi9cbmNsYXNzIFdlYkNvbm5lY3QgZXh0ZW5kcyBCYXNlV2l0aE9wdGlvbnMge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBvcHRpb25zIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciB0aGUgd2ViY29ubmVjdC5cblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSB7IHVybDogb3B0aW9ucyB9O1xuXHRcdH1cblxuXHRcdHN1cGVyKG9wdGlvbnMpO1xuXG5cdFx0dGhpc1tyZWNlaXZlUXVldWVTeW1ib2xdID0gbmV3IE9ic2VydmFibGVRdWV1ZSgpO1xuXHRcdHRoaXNbc2VuZFF1ZXVlU3ltYm9sXSA9IG5ldyBPYnNlcnZhYmxlUXVldWUoKTtcblxuXHRcdHRoaXNbY29ubmVjdGlvblN5bWJvbF0gPSB7fTtcblx0XHR0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldCA9IG51bGw7XG5cdFx0dGhpc1tjb25uZWN0aW9uU3ltYm9sXS5yZWNvbm5lY3RDb3VudGVyID0gMDtcblx0XHR0aGlzW21hbnVhbENsb3NlU3ltYm9sXSA9IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKi9cblx0Y29ubmVjdCgpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29ubmVjdFNlcnZlci5jYWxsKHRoaXMsIHJlc29sdmUsIHJlamVjdCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0Nvbm5lY3RlZCgpIHtcblx0XHRyZXR1cm4gdGhpc1tjb25uZWN0aW9uU3ltYm9sXT8uc29ja2V0Py5yZWFkeVN0YXRlID09PSAxO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9uZXQvd2ViY29ubmVjdFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdXJsPXVuZGVmaW5lZCBEZWZpbmVzIHRoZSByZXNvdXJjZSB0aGF0IHlvdSB3aXNoIHRvIGZldGNoLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY29ubmVjdGlvblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY29ubmVjdGlvbi50aW1lb3V0PTUwMDAgRGVmaW5lcyB0aGUgdGltZW91dCBmb3IgdGhlIGNvbm5lY3Rpb24uXG5cdCAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBjb25uZWN0aW9uLnJlY29ubmVjdC50aW1lb3V0IFRoZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgdGhlIHJlY29ubmVjdC5cblx0ICogQHByb3BlcnR5IHtOdW1iZXJ9IGNvbm5lY3Rpb24ucmVjb25uZWN0LmF0dGVtcHRzIFRoZSBtYXhpbXVtIG51bWJlciBvZiByZWNvbm5lY3RzLlxuXHQgKiBAcHJvcGVydHkge0Jvb2x9IGNvbm5lY3Rpb24ucmVjb25uZWN0LmVuYWJsZWQgSWYgdGhlIHJlY29ubmVjdCBpcyBlbmFibGVkLlxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dXJsOiB1bmRlZmluZWQsXG5cdFx0XHRjb25uZWN0aW9uOiB7XG5cdFx0XHRcdHRpbWVvdXQ6IDUwMDAsXG5cdFx0XHRcdHJlY29ubmVjdDoge1xuXHRcdFx0XHRcdHRpbWVvdXQ6IDEwMDAsXG5cdFx0XHRcdFx0YXR0ZW1wdHM6IDEsXG5cdFx0XHRcdFx0ZW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNsb3NlcyB0aGUgY29ubmVjdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2RlPTEwMDBdIFRoZSBjbG9zZSBjb2RlLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW3JlYXNvbj1cIlwiXSBUaGUgY2xvc2UgcmVhc29uLlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjQ1NS5odG1sI3NlY3Rpb24tNy40LjFcblx0ICovXG5cdGNsb3NlKHN0YXR1c0NvZGUsIHJlYXNvbikge1xuXHRcdGlmICghaXNJbnRlZ2VyKHN0YXR1c0NvZGUpIHx8IHN0YXR1c0NvZGUgPCAxMDAwIHx8IHN0YXR1c0NvZGUgPiA0OTk5KSB7XG5cdFx0XHRzdGF0dXNDb2RlID0gMTAwMDtcblx0XHR9XG5cdFx0aWYgKCFpc1N0cmluZyhyZWFzb24pKSB7XG5cdFx0XHRyZWFzb24gPSBcIlwiO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW21hbnVhbENsb3NlU3ltYm9sXSA9IHRydWU7XG5cdFx0XHRcdGlmICh0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldCkge1xuXHRcdFx0XHRcdHRoaXNbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0LmNsb3NlKHN0YXR1c0NvZGUsIHJlYXNvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUG9sbHMgdGhlIHJlY2VpdmUgcXVldWUgZm9yIG5ldyBtZXNzYWdlcy5cblx0ICpcblx0ICogQHJldHVybnMge01lc3NhZ2V9XG5cdCAqL1xuXHRwb2xsKCkge1xuXHRcdHJldHVybiB0aGlzW3JlY2VpdmVRdWV1ZVN5bWJvbF0ucG9sbCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFyZSB0aGVyZSBhbnkgbWVzc2FnZXMgaW4gdGhlIHJlY2VpdmUgcXVldWU/XG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0ZGF0YVJlY2VpdmVkKCkge1xuXHRcdHJldHVybiAhdGhpc1tyZWNlaXZlUXVldWVTeW1ib2xdLmlzRW1wdHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgTWVzc2FnZSBmcm9tIHRoZSByZWNlaXZlIHF1ZXVlLCBidXQgZG8gbm90IHJlbW92ZSBpdC5cblx0ICpcblx0ICogQHJldHVybnMge09iamVjdH1cblx0ICovXG5cdHBlZWsoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcmVjZWl2ZVF1ZXVlU3ltYm9sXS5wZWVrKCk7XG5cdH1cblxuXHQvKipcblx0ICogQXR0YWNoIGEgbmV3IG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0YXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW3JlY2VpdmVRdWV1ZVN5bWJvbF0uYXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGFjaCBhIG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW3JlY2VpdmVRdWV1ZVN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Y29udGFpbnNPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHJldHVybiB0aGlzW3JlY2VpdmVRdWV1ZVN5bWJvbF0uY29udGFpbnNPYnNlcnZlcihvYnNlcnZlcik7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtNZXNzYWdlfE9iamVjdH0gbWVzc2FnZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0c2VuZChtZXNzYWdlKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGlmICh0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldC5yZWFkeVN0YXRlICE9PSAxKSB7XG5cdFx0XHRcdHJlamVjdChcInRoZSBzb2NrZXQgaXMgbm90IHJlYWR5XCIpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKTtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nLCBpc09iamVjdCB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IFdlYkNvbm5lY3QgYXMgTmV0V2ViQ29ubmVjdCB9IGZyb20gXCIuLi8uLi8uLi9uZXQvd2ViY29ubmVjdC5tanNcIjtcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tIFwiLi4vLi4vLi4vbmV0L3dlYmNvbm5lY3QvbWVzc2FnZS5tanNcIjtcbmltcG9ydCB7IFNlcnZlciB9IGZyb20gXCIuLi9zZXJ2ZXIubWpzXCI7XG5cbmV4cG9ydCB7IFdlYkNvbm5lY3QgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqXG4gKiBoaW50OiB0aGlzIG5hbWUgaXMgdXNlZCBpbiB0aGUgdGVzdHMuIGlmIHlvdSB3YW50IHRvIGNoYW5nZSBpdCwgcGxlYXNlIGNoYW5nZSBpdCBpbiB0aGUgdGVzdHMgYXMgd2VsbC5cbiAqL1xuY29uc3Qgd2ViQ29ubmVjdFN5bWJvbCA9IFN5bWJvbChcImNvbm5lY3Rpb25cIik7XG5cbi8qKlxuICogVGhlIFJlc3RBUEkgaXMgYSBjbGFzcyB0aGF0IGVuYWJsZXMgYSBSRVNUIEFQSSBzZXJ2ZXIuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi8uLi8uLi9leGFtcGxlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvd2ViY29ubmVjdC5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuMS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlLlNlcnZlclxuICogQHN1bW1hcnkgVGhlIExvY2FsU3RvcmFnZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMuXG4gKi9cbmNsYXNzIFdlYkNvbm5lY3QgZXh0ZW5kcyBTZXJ2ZXIge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBvcHRpb25zIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciB0aGUgZGF0YXNvdXJjZS5cblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKGlzU3RyaW5nKG9wdGlvbnMpKSB7XG5cdFx0XHRvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfTtcblx0XHR9XG5cblx0XHRpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSBvcHRpb25zID0ge307XG5cdFx0dGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHRoaXNbd2ViQ29ubmVjdFN5bWJvbF0gPSBuZXcgTmV0V2ViQ29ubmVjdCh7XG5cdFx0XHR1cmw6IHRoaXMuZ2V0T3B0aW9uKFwidXJsXCIpLFxuXHRcdFx0Y29ubmVjdGlvbjoge1xuXHRcdFx0XHR0aW1lb3V0OiB0aGlzLmdldE9wdGlvbihcImNvbm5lY3Rpb24udGltZW91dFwiKSxcblx0XHRcdFx0cmVjb25uZWN0OiB7XG5cdFx0XHRcdFx0dGltZW91dDogdGhpcy5nZXRPcHRpb24oXCJjb25uZWN0aW9uLnJlY29ubmVjdC50aW1lb3V0XCIpLFxuXHRcdFx0XHRcdGF0dGVtcHRzOiB0aGlzLmdldE9wdGlvbihcImNvbm5lY3Rpb24ucmVjb25uZWN0LmF0dGVtcHRzXCIpLFxuXHRcdFx0XHRcdGVuYWJsZWQ6IHRoaXMuZ2V0T3B0aW9uKFwiY29ubmVjdGlvbi5yZWNvbm5lY3QuZW5hYmxlZFwiKSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRjb25uZWN0KCkge1xuXHRcdHJldHVybiB0aGlzW3dlYkNvbm5lY3RTeW1ib2xdLmNvbm5lY3QoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGlzQ29ubmVjdGVkKCkge1xuXHRcdHJldHVybiB0aGlzW3dlYkNvbm5lY3RTeW1ib2xdLmlzQ29ubmVjdGVkKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvd2ViY29ubmVjdFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdXJsPXVuZGVmaW5lZCBEZWZpbmVzIHRoZSByZXNvdXJjZSB0aGF0IHlvdSB3aXNoIHRvIGZldGNoLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY29ubmVjdGlvblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY29ubmVjdGlvbi50aW1lb3V0PTUwMDAgRGVmaW5lcyB0aGUgdGltZW91dCBmb3IgdGhlIGNvbm5lY3Rpb24uXG5cdCAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBjb25uZWN0aW9uLnJlY29ubmVjdC50aW1lb3V0IFRoZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgdGhlIHJlY29ubmVjdC5cblx0ICogQHByb3BlcnR5IHtOdW1iZXJ9IGNvbm5lY3Rpb24ucmVjb25uZWN0LmF0dGVtcHRzIFRoZSBtYXhpbXVtIG51bWJlciBvZiByZWNvbm5lY3RzLlxuXHQgKiBAcHJvcGVydHkge0Jvb2x9IGNvbm5lY3Rpb24ucmVjb25uZWN0LmVuYWJsZWQgSWYgdGhlIHJlY29ubmVjdCBpcyBlbmFibGVkLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGU9e30gT3B0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUubWFwcGluZyB0aGUgbWFwcGluZyBpcyBhcHBsaWVkIGJlZm9yZSB3cml0aW5nLlxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gd3JpdGUubWFwcGluZy50cmFuc2Zvcm1lciBUcmFuc2Zvcm1lciB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkRhdGEuRGF0YXNvdXJjZX5leGFtcGxlQ2FsbGJhY2tbXX0gd3JpdGUubWFwcGluZy5jYWxsYmFjayB3aXRoIHRoZSBoZWxwIG9mIHRoZSBjYWxsYmFjaywgdGhlIHN0cnVjdHVyZXMgY2FuIGJlIGFkanVzdGVkIGJlZm9yZSB3cml0aW5nLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUuc2hlYXRoaW5nXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5zaGVhdGhpbmcub2JqZWN0IE9iamVjdCB0byBiZSB3cmFwcGVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3cml0ZS5zaGVhdGhpbmcucGF0aCBQYXRoIHRvIHRoZSBkYXRhXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSByZWFkPXt9IE9wdGlvbnNcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHJlYWQucGF0aCBQYXRoIHRvIGRhdGFcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlYWQubWFwcGluZyB0aGUgbWFwcGluZyBpcyBhcHBsaWVkIGFmdGVyIHJlYWRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSByZWFkLm1hcHBpbmcudHJhbnNmb3JtZXIgVHJhbnNmb3JtZXIgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBlbnRyaWVzXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5EYXRhLkRhdGFzb3VyY2V+ZXhhbXBsZUNhbGxiYWNrW119IHJlYWQubWFwcGluZy5jYWxsYmFjayB3aXRoIHRoZSBoZWxwIG9mIHRoZSBjYWxsYmFjaywgdGhlIHN0cnVjdHVyZXMgY2FuIGJlIGFkanVzdGVkIGFmdGVyIHJlYWRpbmcuXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR1cmw6IHVuZGVmaW5lZCxcblx0XHRcdHdyaXRlOiB7XG5cdFx0XHRcdG1hcHBpbmc6IHtcblx0XHRcdFx0XHR0cmFuc2Zvcm1lcjogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNhbGxiYWNrczoge30sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNoZWF0aGluZzoge1xuXHRcdFx0XHRcdG9iamVjdDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdHBhdGg6IHVuZGVmaW5lZCxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRyZWFkOiB7XG5cdFx0XHRcdG1hcHBpbmc6IHtcblx0XHRcdFx0XHR0cmFuc2Zvcm1lcjogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNhbGxiYWNrczoge30sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHBhdGg6IHVuZGVmaW5lZCxcblx0XHRcdH0sXG5cdFx0XHRjb25uZWN0aW9uOiB7XG5cdFx0XHRcdHRpbWVvdXQ6IDUwMDAsXG5cdFx0XHRcdHJlY29ubmVjdDoge1xuXHRcdFx0XHRcdHRpbWVvdXQ6IDEwMDAsXG5cdFx0XHRcdFx0YXR0ZW1wdHM6IDEsXG5cdFx0XHRcdFx0ZW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNsb3NlcyB0aGUgY29ubmVjdGlvbi5cblx0ICpcblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRjbG9zZSgpIHtcblx0XHRyZXR1cm4gdGhpc1t3ZWJDb25uZWN0U3ltYm9sXS5jbG9zZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRyZWFkKCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR3aGlsZSAodGhpc1t3ZWJDb25uZWN0U3ltYm9sXS5kYXRhUmVjZWl2ZWQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRsZXQgb2JqID0gdGhpc1t3ZWJDb25uZWN0U3ltYm9sXS5wb2xsKCk7XG5cdFx0XHRcdGlmICghaXNPYmplY3Qob2JqKSkge1xuXHRcdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJUaGUgcmVjZWl2ZWQgZGF0YSBpcyBub3QgYW4gb2JqZWN0LlwiKSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCEob2JqIGluc3RhbmNlb2YgTWVzc2FnZSkpIHtcblx0XHRcdFx0XHRyZWplY3QobmV3IEVycm9yKFwiVGhlIHJlY2VpdmVkIGRhdGEgaXMgbm90IGEgTWVzc2FnZS5cIikpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG9iaiA9IG9iai5nZXREYXRhKCk7XG5cdFx0XHRcdG9iaiA9IHRoaXMudHJhbnNmb3JtU2VydmVyUGF5bG9hZC5jYWxsKHRoaXMsIG9iaik7XG5cdFx0XHRcdHRoaXMuc2V0KG9iaik7XG5cdFx0XHR9XG5cblx0XHRcdHJlc29sdmUodGhpcy5nZXQoKSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdGNvbnN0IG9iaiA9IHRoaXMucHJlcGFyZVNlcnZlclBheWxvYWQodGhpcy5nZXQoKSk7XG5cdFx0cmV0dXJuIHRoaXNbd2ViQ29ubmVjdFN5bWJvbF0uc2VuZChvYmopO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Jlc3RBUEl9XG5cdCAqL1xuXHRnZXRDbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFdlYkNvbm5lY3QodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0pO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IERhdGFzb3VyY2UgfSBmcm9tIFwiLi4vLi4vZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IFN0b3JhZ2UsIHN0b3JhZ2VPYmplY3RTeW1ib2wgfSBmcm9tIFwiLi4vc3RvcmFnZS5tanNcIjtcblxuZXhwb3J0IHsgTG9jYWxTdG9yYWdlIH07XG5cbi8qKlxuICogVGhlIExvY2FsU3RvcmFnZSBEYXRhc291cmNlIHByb3ZpZGVzIGEgZGF0YSBzdG9yZSBpbiB0aGUgYnJvd3NlciBsb2NhbFN0b3JhZ2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlLlN0b3JhZ2VcbiAqIEBzdW1tYXJ5IFRoZSBMb2NhbFN0b3JhZ2UgY2xhc3MgZW5jYXBzdWxhdGVzIHRoZSBhY2Nlc3MgdG8gZGF0YSBvYmplY3RzLlxuICovXG5jbGFzcyBMb2NhbFN0b3JhZ2UgZXh0ZW5kcyBTdG9yYWdlIHtcblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlcy5cblx0ICogQHJldHVybiB7ZXh0ZXJuYWw6bG9jYWxTdG9yYWdlfVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0W3N0b3JhZ2VPYmplY3RTeW1ib2xdKCkge1xuXHRcdHJldHVybiBnZXRHbG9iYWxPYmplY3QoXCJsb2NhbFN0b3JhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9sb2NhbHN0b3JhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlIGNsb25lXG5cdCAqIEByZXR1cm4ge0xvY2FsU3RvcmFnZX1cblx0ICovXG5cdGdldENsb25lKCkge1xuXHRcdHJldHVybiBuZXcgTG9jYWxTdG9yYWdlKFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0ua2V5LFxuXHRcdCk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgRGF0YXNvdXJjZSB9IGZyb20gXCIuLi8uLi9kYXRhc291cmNlLm1qc1wiO1xuaW1wb3J0IHsgU3RvcmFnZSwgc3RvcmFnZU9iamVjdFN5bWJvbCB9IGZyb20gXCIuLi9zdG9yYWdlLm1qc1wiO1xuXG5leHBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9O1xuXG4vKipcbiAqIFRoZSBTZXNzaW9uU3RvcmFnZSBjbGFzcyBwcm92aWRlcyBhIGRhdGEgc291cmNlIHRoYXQgdXNlcyB0aGUgU2Vzc2lvblN0b3JhZ2UgQVBJIG9uIHRoZSBjbGllbnQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlLlN0b3JhZ2VcbiAqIEBzdW1tYXJ5IFRoZSBMb2NhbFN0b3JhZ2UgY2xhc3MgZW5jYXBzdWxhdGVzIHRoZSBhY2Nlc3MgdG8gZGF0YSBvYmplY3RzLlxuICovXG5jbGFzcyBTZXNzaW9uU3RvcmFnZSBleHRlbmRzIFN0b3JhZ2Uge1xuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzLlxuXHQgKiBAcmV0dXJuIHtleHRlcm5hbDpzZXNzaW9uU3RvcmFnZX1cblx0ICogQHByaXZhdGVcblx0ICovXG5cdFtzdG9yYWdlT2JqZWN0U3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gZ2V0R2xvYmFsT2JqZWN0KFwic2Vzc2lvblN0b3JhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFxuXHRcdFx0XCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL3Nlc3Npb24tc3RvcmFnZVwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlIENsb25lXG5cdCAqXG5cdCAqIEByZXR1cm4ge1Nlc3Npb25TdG9yYWdlfVxuXHQgKi9cblx0Z2V0Q2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBTZXNzaW9uU3RvcmFnZShcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLmtleSxcblx0XHQpO1xuXHR9XG59XG4iLCAiXG4vKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDI0LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7YWRkQXR0cmlidXRlVG9rZW59IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7QVRUUklCVVRFX0VSUk9STUVTU0FHRX0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7Rm9ybVN0eWxlU2hlZXR9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBGb3JtU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG4gIEZvcm1TdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuQGxheWVyIGZvcm0geyBcbi5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLXNoYWRvdzpub25lfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItZm9ybXthY2NlbnQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC13cmFwOm5vd3JhcDtwb3NpdGlvbjpyZWxhdGl2ZX0ubW9uc3Rlci1mb3JtIGxhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5OmdyaWR9Lm1vbnN0ZXItZm9ybSBsYWJlbDpoYXMoaW5wdXRbdHlwZT1yYWRpb10pe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0ubW9uc3Rlci1mb3JtIGxhYmVsOmhhcyhpbnB1dFt0eXBlPXJhZGlvXSkgaW5wdXR7bWFyZ2luLWxlZnQ6LjRyZW07bWFyZ2luLXJpZ2h0Oi40cmVtfS5tb25zdGVyLWZvcm0gbGFiZWw6aGFzKGlucHV0W3R5cGU9cmFkaW9dKX5sYWJlbDpoYXMoaW5wdXRbdHlwZT1yYWRpb10pe21hcmdpbi10b3A6LjJyZW19Lm1vbnN0ZXItZm9ybSBsYWJlbDpoYXMoaW5wdXRbdHlwZT1jaGVja2JveF0pe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0ubW9uc3Rlci1mb3JtIGxhYmVsOmhhcyhpbnB1dFt0eXBlPWNoZWNrYm94XSkgaW5wdXR7bWFyZ2luLWxlZnQ6LjRyZW07bWFyZ2luLXJpZ2h0Oi40cmVtfS5tb25zdGVyLWZvcm0gbGFiZWw6aGFzKGlucHV0W3R5cGU9Y2hlY2tib3hdKX5sYWJlbDpoYXMoaW5wdXRbdHlwZT1jaGVja2JveF0pe21hcmdpbi10b3A6LjJyZW19Lm1vbnN0ZXItZm9ybSBsYWJlbH5maWVsZHNldCwubW9uc3Rlci1mb3JtIGxhYmVsfmxhYmVse21hcmdpbi10b3A6MXJlbX0ubW9uc3Rlci1mb3JtIGJ1dHRvbiwubW9uc3Rlci1mb3JtIGlucHV0LC5tb25zdGVyLWZvcm0gc2VsZWN0LC5tb25zdGVyLWZvcm0gdGV4dGFyZWF7YWNjZW50LWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6MTAwJTttYXJnaW46MDtvdXRsaW5lOm5vbmU7cGFkZGluZzouNHJlbSAuNnJlbX0ubW9uc3Rlci1mb3JtIGJ1dHRvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItZm9ybSBvcHRpb246Y2hlY2tlZCwubW9uc3Rlci1mb3JtIG9wdGlvbjpmb2N1cywubW9uc3Rlci1mb3JtIG9wdGlvbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItZm9ybSBpbnB1dCwubW9uc3Rlci1mb3JtIHNlbGVjdCwubW9uc3Rlci1mb3JtIHRleHRhcmVhe2JvcmRlcjowO2JvcmRlci1ib3R0b20tcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLWJvdHRvbS1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JvcmRlci1ib3R0b206dGhpbiB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp0aGluO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItZm9ybSBidXR0b24sLm1vbnN0ZXItZm9ybSBpbnB1dDpub3QoW3R5cGU9cmFkaW9dKTpub3QoW3R5cGU9Y2hlY2tib3hdKSwubW9uc3Rlci1mb3JtIGxhYmVsLC5tb25zdGVyLWZvcm0gc2VsZWN0LC5tb25zdGVyLWZvcm0gdGV4dGFyZWF7d2lkdGg6MTAwJX0ubW9uc3Rlci1mb3JtIGxhYmVsIGlucHV0Om5vdChbdHlwZT1yYWRpb10pOm5vdChbdHlwZT1jaGVja2JveF0pLC5tb25zdGVyLWZvcm0gbGFiZWwgc2VsZWN0LC5tb25zdGVyLWZvcm0gbGFiZWwgdGV4dGFyZWEsLm1vbnN0ZXItZm9ybSBsYWJlbCtpbnB1dDpub3QoW3R5cGU9cmFkaW9dKTpub3QoW3R5cGU9Y2hlY2tib3hdKSwubW9uc3Rlci1mb3JtIGxhYmVsK3NlbGVjdCwubW9uc3Rlci1mb3JtIGxhYmVsK3RleHRhcmVhe21hcmdpbi10b3A6LjJyZW07d2lkdGg6MTAwJX0ubW9uc3Rlci1mb3JtIGZpZWxkc2V0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlcjoycHggc29saWQgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7bWFyZ2luOjA7b3V0bGluZTpub25lO3BhZGRpbmc6Mi41cmVtIDJyZW0gMnJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlfS5tb25zdGVyLWZvcm0gZmllbGRzZXQgbGVnZW5ke2ZvbnQtc2l6ZTouOHJlbTttYXgtd2lkdGg6OTUlO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4xcmVtIDJyZW0gLjJyZW0gLjVyZW07cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0ZXh0LWFsaWduOnJpZ2h0O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3RvcDowO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1mb3JtIGZpZWxkc2V0fmZpZWxkc2V0e21hcmdpbi10b3A6MXJlbX0ubW9uc3Rlci1mb3JtIGJ1dHRvbnttYXJnaW46LjJyZW0gMH0ubW9uc3Rlci1mb3JtIGJ1dHRvbjpmaXJzdC1vZi10eXBle21hcmdpbi10b3A6MXJlbX0ubW9uc3Rlci1mb3JtIGJ1dHRvbjpsYXN0LW9mLXR5cGV7bWFyZ2luLWJvdHRvbToxcmVtfS5tb25zdGVyLWZvcm0gaW5wdXQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOm5vbmV9Lm1vbnN0ZXItZm9ybSBidXR0b246Zm9jdXMsLm1vbnN0ZXItZm9ybSBpbnB1dDpmb2N1cywubW9uc3Rlci1mb3JtIHNlbGVjdDpmb2N1cywubW9uc3Rlci1mb3JtIHRleHRhcmVhOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KTtvdXRsaW5lLW9mZnNldDoycHh9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7Lm1vbnN0ZXItZm9ybSBidXR0b24sLm1vbnN0ZXItZm9ybSBpbnB1dCwubW9uc3Rlci1mb3JtIHNlbGVjdCwubW9uc3Rlci1mb3JtIHRleHRhcmVhe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWZvcm0gYnV0dG9uOmZvY3VzLC5tb25zdGVyLWZvcm0gaW5wdXQ6Zm9jdXMsLm1vbnN0ZXItZm9ybSBzZWxlY3Q6Zm9jdXMsLm1vbnN0ZXItZm9ybSB0ZXh0YXJlYTpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6MnB4fX0ubW9uc3Rlci1mb3JtIGJ1dHRvbjpob3ZlciwubW9uc3Rlci1mb3JtIGlucHV0OmhvdmVyOm5vdChbdHlwZT1yYWRpb10pOm5vdChbdHlwZT1jaGVja2JveF0pOm5vdChbdHlwZT1yYW5nZV0pLC5tb25zdGVyLWZvcm0gc2VsZWN0OmhvdmVyLC5tb25zdGVyLWZvcm0gdGV4dGFyZWE6aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fS5tb25zdGVyLWgxLGgxe2ZvbnQtc2l6ZTozcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxO21hcmdpbi1ib3R0b206MS4yNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfS5tb25zdGVyLWgzLGgze2ZvbnQtc2l6ZToycmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OmNhbGMoNHB4ICsgMmV4KTttYXJnaW4tYm90dG9tOjEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6Y2FsYyg0cHggKyAyZXgpO21hcmdpbi1ib3R0b206MS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde3Bvc2l0aW9uOnJlbGF0aXZlfSBcbn1gLCAwKTtcbn0gY2F0Y2ggKGUpIHtcbiAgYWRkQXR0cmlidXRlVG9rZW4oZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKCdodG1sJyksIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUgKyBcIlwiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBEYXRhc291cmNlIH0gZnJvbSBcIi4uLy4uL2RhdGEvZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IFJlc3RBUEkgfSBmcm9tIFwiLi4vLi4vZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpLm1qc1wiO1xuaW1wb3J0IHsgV2ViQ29ubmVjdCB9IGZyb20gXCIuLi8uLi9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3dlYmNvbm5lY3QubWpzXCI7XG5pbXBvcnQgeyBXcml0ZUVycm9yIH0gZnJvbSBcIi4uLy4uL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS93cml0ZWVycm9yLm1qc1wiO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uLy4uL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL2xvY2Fsc3RvcmFnZS5tanNcIjtcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uLy4uL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL3Nlc3Npb25zdG9yYWdlLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0RJU0FCTEVELFxuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUFJFRklYLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlQsXG5cdEFUVFJJQlVURV9VUERBVEVSX1JFTU9WRSxcblx0QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxuXHRnZXRTbG90dGVkRWxlbWVudHMsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGFkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91cGRhdGVyLm1qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuLi8uLi90eXBlcy9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IFByb3h5T2JzZXJ2ZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvcHJveHlvYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IFByb2Nlc3NpbmcgfSBmcm9tIFwiLi4vLi4vdXRpbC9wcm9jZXNzaW5nLm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZVN0YXRlQnV0dG9uIH0gZnJvbSBcIi4vbWVzc2FnZS1zdGF0ZS1idXR0b24ubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRk9STV9EQVRBU09VUkNFLFxuXHRBVFRSSUJVVEVfRk9STV9EQVRBU09VUkNFX0FSR1VNRU5UUyxcbn0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgU3RhdGVCdXR0b24gfSBmcm9tIFwiLi9zdGF0ZS1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBGb3JtU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvZm9ybS5tanNcIjtcblxuZXhwb3J0IHsgRm9ybSB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAc2luY2UgMy4xLjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9GT1JNX0RBVEFTT1VSQ0VfQUNUSU9OID0gYCR7QVRUUklCVVRFX1BSRUZJWH1kYXRhc291cmNlLWFjdGlvbmA7XG5cbi8qKlxuICogRm9ybSBkYXRhIGlzIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZm9ybSBkYXRhXG4gKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKiBAc2luY2UgMS43LjBcbiAqL1xuY29uc3QgZm9ybURhdGFTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL2Zvcm1AQGZvcm1kYXRhXCIsXG4pO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQHNpbmNlIDIuOC4wXG4gKi9cbmNvbnN0IGZvcm1EYXRhVXBkYXRlclN5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vZm9ybUBAZm9ybWRhdGEtdXBkYXRlci1saW5rXCIsXG4pO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQHNpbmNlIDEuNy4wXG4gKi9cbmNvbnN0IGZvcm1FbGVtZW50U3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9jb21wb25lbnQtZm9ybS9mb3JtQEBmb3JtLWVsZW1lbnRcIixcbik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKiBAc2luY2UgMi41LjBcbiAqL1xuY29uc3QgcmVnaXN0ZXJlZERhdGFzb3VyY2VzU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9jb21wb25lbnQtZm9ybS9mb3JtQEByZWdpc3RlcmVkLWRhdGFzb3VyY2VzXCIsXG4pO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAc2luY2UgMS43LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFBST1BFUlRZX1ZBTElEQVRJT05fS0VZID0gXCJfX3ZhbGlkYXRpb25cIjtcblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgY3JlYXRlcyBhIGZvcm0gZWxlbWVudCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvZm9ybS5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnkuXG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyBgPG1vbnN0ZXItZm9ybSAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1mb3JtJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItZm9ybT48L21vbnN0ZXItZm9ybT5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQge0Zvcm19IGZyb20gJ0BzY2h1a2FpL2NvbXBvbmVudC1mb3JtL3NvdXJjZS9mb3JtLmpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItZm9ybScpO1xuICogYGBgXG4gKlxuICogQHN0YXJ0dW1sIGZvcm0ucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBGb3JtXG4gKiBAZW5kdW1sXG4gKlxuICogQHNpbmNlIDEuNi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc3VtbWFyeSBBIGNvbmZpZ3VyYWJsZSBmb3JtIGNvbnRyb2xcbiAqL1xuY2xhc3MgRm9ybSBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBvcHRpb25zIGF0dHJpYnV0ZSBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uLlxuXHQgKiBAc2luY2UgMS43LjBcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpc1tmb3JtRGF0YVN5bWJvbF0gPSBuZXcgUHJveHlPYnNlcnZlcih7fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vZm9ybVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBodG1sIHRhZyB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge0RhdGFzb3VyY2V9IGRhdGFzb3VyY2UgZGF0YSBzb3VyY2Vcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlcG9ydFZhbGlkaXR5XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZXBvcnRWYWxpZGl0eS5zZWxlY3RvciB3aGljaCBlbGVtZW50IHNob3VsZCBiZSB1c2VkIHRvIHJlcG9ydCB0aGUgdmFsaWRpdHlcblx0ICogQHByb3BlcnR5IHtmdW5jdGlvbn0gcmVwb3J0VmFsaWRpdHkuZXJyb3JIYW5kbGVyIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgZXJyb3Jcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNsYXNzZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzZXMuYnV0dG9uIGNsYXNzIGZvciB0aGUgZm9ybVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHtcblx0XHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0ZGF0YXNvdXJjZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRyZXBvcnRWYWxpZGl0eToge1xuXHRcdFx0XHRcdHNlbGVjdG9yOiBcImlucHV0LHNlbGVjdCx0ZXh0YXJlYVwiLFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlcjogdW5kZWZpbmVkLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdFx0Zm9ybTogXCJtb25zdGVyLWZvcm1cIixcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMuY2FsbCh0aGlzKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxlZCBldmVyeSB0aW1lIHRoZSBlbGVtZW50IGlzIGluc2VydGVkIGludG8gdGhlIERPTS4gVXNlZnVsIGZvciBydW5uaW5nIHNldHVwIGNvZGUsIHN1Y2ggYXNcblx0ICogZmV0Y2hpbmcgcmVzb3VyY2VzIG9yIHJlbmRlcmluZy4gR2VuZXJhbGx5LCB5b3Ugc2hvdWxkIHRyeSB0byBkZWxheSB3b3JrIHVudGlsIHRoaXMgdGltZS5cblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyW1wiY29ubmVjdGVkQ2FsbGJhY2tcIl0oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgcmVmcmVzaCBtZXRob2QgaXMgY2FsbGVkIHRvIHVwZGF0ZSB0aGUgY29udHJvbCBhZnRlciBhIGNoYW5nZSB3aXRoIGZyZXNoIGRhdGEuXG5cdCAqXG5cdCAqIFRoZXJlZm9yZSwgdGhlIGRhdGEgc291cmNlIGlzIGNhbGxlZCBhZ2FpbiBhbmQgdGhlIGRhdGEgaXMgdXBkYXRlZC5cblx0ICpcblx0ICogSWYgeW91IGhhdmUgdXBkYXRlZCB0aGUgZGF0YSBzb3VyY2Ugd2l0aCBgc2V0T3B0aW9uKCdkYXRhc291cmNlJyxkYXRhc291cmNlKSwgeW91IG11c3QgY2FsbCB0aGlzIG1ldGhvZC5cblx0ICpcblx0ICogQHJldHVybiB7Rm9ybX1cblx0ICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBkYXRhc291cmNlXG5cdCAqL1xuXHRyZWZyZXNoKCkge1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRElTQUJMRUQsIFwiXCIpO1xuXHRcdFx0Y29uc3QgZGF0YXNvdXJjZSA9IHRoaXMuZ2V0T3B0aW9uKFwiZGF0YXNvdXJjZVwiKTtcblxuXHRcdFx0aWYgKCEoZGF0YXNvdXJjZSBpbnN0YW5jZW9mIERhdGFzb3VyY2UpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInVuZGVmaW5lZCBkYXRhc291cmNlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0YXNvdXJjZVxuXHRcdFx0XHQucmVhZCgpXG5cdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHR0aGlzW2Zvcm1EYXRhU3ltYm9sXS5zZXRTdWJqZWN0KGRhdGFzb3VyY2UuZ2V0KCkpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5yZW1vdmVBdHRyaWJ1dGUoQVRUUklCVVRFX0RJU0FCTEVEKTtcblx0XHRcdFx0XHR9KS5ydW4oKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5yZW1vdmVBdHRyaWJ1dGUoQVRUUklCVVRFX0RJU0FCTEVEKTtcblx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0dGhpcy5yZW1vdmVBdHRyaWJ1dGUoQVRUUklCVVRFX0RJU0FCTEVEKTtcblx0XHRcdHRocm93IGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLkZvcm19XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdERhdGFzb3VyY2UuY2FsbCh0aGlzKTtcblx0XHRpbml0VXBkYXRlci5jYWxsKHRoaXMpO1xuXHRcdGluaXRPYnNlcnZlci5jYWxsKHRoaXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdGdldFZhbHVlcygpIHtcblx0XHRyZXR1cm4gdGhpc1tmb3JtRGF0YVN5bWJvbF0uZ2V0U3ViamVjdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1mb3JtXCI7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldH1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbRm9ybVN0eWxlU2hlZXRdO1xuXHR9XG5cblx0c3RhdGljIFtyZWdpc3RlcmVkRGF0YXNvdXJjZXNTeW1ib2xdID0gbmV3IE1hcChbXG5cdFx0W1wicmVzdGFwaVwiLCBSZXN0QVBJXSxcblx0XHRbXCJsb2NhbHN0b3JhZ2VcIiwgTG9jYWxTdG9yYWdlXSxcblx0XHRbXCJzZXNzaW9uc3RvcmFnZVwiLCBTZXNzaW9uU3RvcmFnZV0sXG5cdFx0W1wid2ViY29ubmVjdFwiLCBXZWJDb25uZWN0XSxcblx0XSk7XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVyIGEgbmV3IGRhdGFzb3VyY2Vcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHtNb25zdGVyLkRhdGEuRGF0YXNvdXJjZX0gZGF0YXNvdXJjZVxuXHQgKi9cblx0c3RhdGljIHJlZ2lzdGVyRGF0YXNvdXJjZShuYW1lLCBkYXRhc291cmNlKSB7XG5cdFx0Rm9ybVtyZWdpc3RlcmVkRGF0YXNvdXJjZXNTeW1ib2xdLnNldChuYW1lLCBkYXRhc291cmNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVbnJlZ2lzdGVyIGEgcmVnaXN0ZXJlZCBkYXRhc291cmNlXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG5cdCAqL1xuXHRzdGF0aWMgdW5yZWdpc3RlckRhdGFzb3VyY2UobmFtZSkge1xuXHRcdEZvcm1bcmVnaXN0ZXJlZERhdGFzb3VyY2VzU3ltYm9sXS5kZWxldGUobmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHJlZ2lzdGVyZWQgZGF0YSBzb3VyY2VzXG5cdCAqXG5cdCAqIEByZXR1cm4ge01hcH1cblx0ICovXG5cdHN0YXRpYyBnZXREYXRhc291cmNlcygpIHtcblx0XHRyZXR1cm4gRm9ybVtyZWdpc3RlcmVkRGF0YXNvdXJjZXNTeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJ1biByZXBvcnRWYWxpZGF0aW9uIG9uIGFsbCBjaGlsZCBodG1sIGZvcm0gY29udHJvbHMuXG5cdCAqXG5cdCAqIEBzaW5jZSAyLjEwLjBcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRyZXBvcnRWYWxpZGl0eSgpIHtcblx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0Y29uc3Qgc2VsZWN0b3IgPSB0aGlzLmdldE9wdGlvbihcInJlcG9ydFZhbGlkaXR5LnNlbGVjdG9yXCIpO1xuXHRcdGNvbnN0IG5vZGVzID0gZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcywgc2VsZWN0b3IpO1xuXHRcdG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRcdGlmICh0eXBlb2Ygbm9kZS5yZXBvcnRWYWxpZGl0eSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdGlmIChub2RlLnJlcG9ydFZhbGlkaXR5KCkgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0dmFsaWQgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHZhbGlkO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdFVwZGF0ZXIoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdGNvbnN0IHNsb3RzID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzbG90XCIpO1xuXHRmb3IgKGNvbnN0IFssIHNsb3RdIG9mIE9iamVjdC5lbnRyaWVzKHNsb3RzKSkge1xuXHRcdGZvciAoY29uc3QgWywgbm9kZV0gb2YgT2JqZWN0LmVudHJpZXMoc2xvdC5hc3NpZ25lZE5vZGVzKCkpKSB7XG5cdFx0XHRpZiAoIShub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBxdWVyeSA9IGBbJHtBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTfV0sWyR7QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRX1dLFske0FUVFJJQlVURV9VUERBVEVSX1JFTU9WRX1dLFske0FUVFJJQlVURV9VUERBVEVSX0lOU0VSVH1dYDtcblx0XHRcdGNvbnN0IGNvbnRyb2xzID0gbm9kZS5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KTtcblxuXHRcdFx0Y29uc3QgbGlzdCA9IG5ldyBTZXQoWy4uLmNvbnRyb2xzXSk7XG5cblx0XHRcdGlmIChub2RlLm1hdGNoZXMocXVlcnkpKSB7XG5cdFx0XHRcdGxpc3QuYWRkKG5vZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobGlzdC5zaXplID09PSAwKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudC5jYWxsKFxuXHRcdFx0XHRub2RlLFxuXHRcdFx0XHRsaXN0LFxuXHRcdFx0XHRmb3JtRGF0YVVwZGF0ZXJTeW1ib2wsXG5cdFx0XHRcdHRoaXNbZm9ybURhdGFTeW1ib2xdLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RGF0YXNvdXJjZSgpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0Y29uc3Qgc2xvdHMgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChcInNsb3RcIik7XG5cdGZvciAoY29uc3QgWywgc2xvdF0gb2YgT2JqZWN0LmVudHJpZXMoc2xvdHMpKSB7XG5cdFx0Zm9yIChjb25zdCBbLCBub2RlXSBvZiBPYmplY3QuZW50cmllcyhzbG90LmFzc2lnbmVkTm9kZXMoKSkpIHtcblx0XHRcdGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHF1ZXJ5ID0gYFske0FUVFJJQlVURV9GT1JNX0RBVEFTT1VSQ0VfQUNUSU9OfT13cml0ZV1gO1xuXHRcdFx0Y29uc3QgY29udHJvbHMgPSBub2RlLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpO1xuXG5cdFx0XHRjb25zdCBsaXN0ID0gbmV3IFNldChbLi4uY29udHJvbHNdKTtcblxuXHRcdFx0aWYgKG5vZGUubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdFx0bGlzdC5hZGQobm9kZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChsaXN0LnNpemUgPT09IDApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGluaXRXcml0ZUFjdGlvbnMuY2FsbCh0aGlzLCBsaXN0KTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGVsZW1lbnRzXG4gKi9cbmZ1bmN0aW9uIGluaXRXcml0ZUFjdGlvbnMoZWxlbWVudHMpIHtcblx0ZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcblx0XHRcdFx0cnVuV3JpdGVDYWxsYmFjay5jYWxsKHRoaXMsIGVsZW1lbnQpO1xuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IGcgPSBlbGVtZW50Py5nZXRPcHRpb247XG5cdFx0XHRpZiAoIWlzRnVuY3Rpb24oZykpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzID0gZWxlbWVudD8uc2V0T3B0aW9uO1xuXHRcdFx0aWYgKCFpc0Z1bmN0aW9uKHMpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZm4gPSBlbGVtZW50LmdldE9wdGlvbihcImFjdGlvbnMuY2xpY2tcIik7XG5cblx0XHRcdGlmICghaXNGdW5jdGlvbihmbikpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBkaXNhYmxlIGNvbnNvbGUubG9nIG9mIHN0YW5kYXJkIGNsaWNrIGV2ZW50XG5cdFx0XHRlbGVtZW50LnNldE9wdGlvbihcImFjdGlvbnMuY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHQvLyBkbyBub3RoaW5nIVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gcnVuV3JpdGVDYWxsYmFjayhidXR0b24pIHtcblx0aWYgKHR5cGVvZiB0aGlzLnJlcG9ydFZhbGlkaXR5ID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRpZiAodGhpcy5yZXBvcnRWYWxpZGl0eSgpID09PSBmYWxzZSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRidXR0b24gaW5zdGFuY2VvZiBTdGF0ZUJ1dHRvbiB8fFxuXHRcdFx0XHRidXR0b24gaW5zdGFuY2VvZiBNZXNzYWdlU3RhdGVCdXR0b25cblx0XHRcdCkge1xuXHRcdFx0XHRidXR0b24uc2V0U3RhdGUoXCJmYWlsZWRcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgZGF0YXNvdXJjZSA9IHRoaXMuZ2V0T3B0aW9uKFwiZGF0YXNvdXJjZVwiKTtcblx0aWYgKCEoZGF0YXNvdXJjZSBpbnN0YW5jZW9mIERhdGFzb3VyY2UpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKGJ1dHRvbiBpbnN0YW5jZW9mIFN0YXRlQnV0dG9uIHx8IGJ1dHRvbiBpbnN0YW5jZW9mIE1lc3NhZ2VTdGF0ZUJ1dHRvbikge1xuXHRcdGJ1dHRvbi5zZXRTdGF0ZShcImFjdGl2aXR5XCIpO1xuXHR9XG5cblx0Ly9jb25zdCBkYXRhID0gZm9ybT8uW2Zvcm1EYXRhU3ltYm9sXT8uZ2V0UmVhbFN1YmplY3QoKTtcblx0Y29uc3Qgd3JpdGVQcm9taXNlID0gZGF0YXNvdXJjZVxuXHRcdC5zZXQodGhpc1tmb3JtRGF0YVN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKSlcblx0XHQud3JpdGUoKTtcblx0aWYgKCEod3JpdGVQcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkYXRhc291cmNlLndyaXRlKCkgbXVzdCByZXR1cm4gYSBwcm9taXNlXCIpO1xuXHR9XG5cblx0d3JpdGVQcm9taXNlXG5cdFx0LnRoZW4oKHIpID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0YnV0dG9uIGluc3RhbmNlb2YgU3RhdGVCdXR0b24gfHxcblx0XHRcdFx0YnV0dG9uIGluc3RhbmNlb2YgTWVzc2FnZVN0YXRlQnV0dG9uXG5cdFx0XHQpIHtcblx0XHRcdFx0YnV0dG9uLnNldFN0YXRlKFwic3VjY2Vzc2Z1bFwiKTtcblx0XHRcdH1cblx0XHRcdHRoaXNbZm9ybURhdGFTeW1ib2xdLmdldFN1YmplY3QoKVtQUk9QRVJUWV9WQUxJREFUSU9OX0tFWV0gPSB7fTtcblx0XHR9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0aWYgKGUgaW5zdGFuY2VvZiBXcml0ZUVycm9yKSB7XG5cdFx0XHRcdHRoaXNbZm9ybURhdGFTeW1ib2xdLmdldFN1YmplY3QoKVtQUk9QRVJUWV9WQUxJREFUSU9OX0tFWV0gPVxuXHRcdFx0XHRcdGUuZ2V0VmFsaWRhdGlvbigpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGJ1dHRvbiBpbnN0YW5jZW9mIFN0YXRlQnV0dG9uIHx8XG5cdFx0XHRcdGJ1dHRvbiBpbnN0YW5jZW9mIE1lc3NhZ2VTdGF0ZUJ1dHRvblxuXHRcdFx0KSB7XG5cdFx0XHRcdGJ1dHRvbi5zZXRTdGF0ZShcImZhaWxlZFwiKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGJ1dHRvbiBpbnN0YW5jZW9mIE1lc3NhZ2VTdGF0ZUJ1dHRvbikge1xuXHRcdFx0XHRidXR0b24uc2V0TWVzc2FnZShlLm1lc3NhZ2UpO1xuXHRcdFx0XHRidXR0b24uc2hvd01lc3NhZ2UoKTtcblx0XHRcdH1cblx0XHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBwYXNzIGEgVVJMIHRvIHRoaXMgc2VsZWN0LlxuICpcbiAqIGBgYFxuICogPG1vbnN0ZXItZm9ybSBkYXRhLW1vbnN0ZXItZGF0YXNvdXJjZT1cInJlc3RhcGk6Li4uLi5cIj48L21vbnN0ZXItZm9ybT5cbiAqIGBgYFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cygpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdGNvbnN0IGRhdGFzb3VyY2UgPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9EQVRBU09VUkNFKTtcblx0aWYgKGlzU3RyaW5nKGRhdGFzb3VyY2UpKSB7XG5cdFx0Zm9yIChjb25zdCBba2V5LCBjbGFzc09iamVjdF0gb2YgRm9ybS5nZXREYXRhc291cmNlcygpKSB7XG5cdFx0XHRpZiAoZGF0YXNvdXJjZSA9PT0ga2V5KSB7XG5cdFx0XHRcdGxldCBhcmdzID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fREFUQVNPVVJDRV9BUkdVTUVOVFMpO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0YXJncyA9IEpTT04ucGFyc2UoYXJncyk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRvcHRpb25zW1wiZGF0YXNvdXJjZVwiXSA9IG5ldyBjbGFzc09iamVjdChhcmdzKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9wdGlvbnNbXCJkYXRhc291cmNlXCJdIGluc3RhbmNlb2YgRGF0YXNvdXJjZSkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRoaXMgRm9ybVxuICovXG5mdW5jdGlvbiBpbml0T2JzZXJ2ZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGxldCBsYXN0RGF0YXNvdXJjZSA9IG51bGw7XG5cdHNlbGZbaW50ZXJuYWxTeW1ib2xdLmF0dGFjaE9ic2VydmVyKFxuXHRcdG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zdCBkYXRhc291cmNlID0gc2VsZi5nZXRPcHRpb24oXCJkYXRhc291cmNlXCIpO1xuXHRcdFx0aWYgKGRhdGFzb3VyY2UgIT09IGxhc3REYXRhc291cmNlKSB7XG5cdFx0XHRcdG5ldyBQcm9jZXNzaW5nKDEwMCwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHNlbGYucmVmcmVzaCgpO1xuXHRcdFx0XHR9KS5ydW4oKTtcblx0XHRcdH1cblxuXHRcdFx0bGFzdERhdGFzb3VyY2UgPSBkYXRhc291cmNlO1xuXHRcdH0pLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Gb3JtfVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbZm9ybUVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9Zm9ybV1cIixcblx0KTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPGZvcm0gZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkaXNhYmxlZCBwYXRoOmRpc2FibGVkIHwgIGlmOnRydWUsIGNsYXNzIHBhdGg6Y2xhc3Nlcy5mb3JtXCJcbiAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiZm9ybVwiXG4gICAgICAgICAgICAgICAgICBwYXJ0PVwiZm9ybVwiPlxuICAgICAgICAgICAgICAgIDxzbG90IGRhdGEtbW9uc3Rlci1yb2xlPVwic2xvdFwiPjwvc2xvdD5cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KEZvcm0pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaXNBcnJheSwgaXNJbnN0YW5jZSB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gXCIuL25vZGUubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBOb2RlTGlzdCB9O1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIHRoZSBpbnN0YW5jZSB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5UeXBlcy5Ob2RlTGlzdCgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI2LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHN1bW1hcnkgQSBOb2RlTGlzdCBjbGFzc1xuICovXG5jbGFzcyBOb2RlTGlzdCBleHRlbmRzIFNldCB7XG5cdC8qKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gaW52YWxpZCB2YWx1ZSB0eXBlXG5cdCAqIEBwYXJhbSB7Tm9kZUxpc3R8Tm9kZXxBcnJheTxOb2RlPn12YWx1ZXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHZhbHVlcykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAodmFsdWVzID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuXHRcdGlmIChpc0FycmF5KHZhbHVlcykpIHtcblx0XHRcdHZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4gdGhpcy5hZGQodmFsdWUpKTtcblx0XHR9IGVsc2UgaWYgKGlzSW5zdGFuY2UodmFsdWVzLCBOb2RlTGlzdCkpIHtcblx0XHRcdHZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4gdGhpcy5hZGQodmFsdWUpKTtcblx0XHR9IGVsc2UgaWYgKGlzSW5zdGFuY2UodmFsdWVzLCBOb2RlKSkge1xuXHRcdFx0dGhpcy5hZGQodmFsdWVzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCB2YWx1ZSB0eXBlXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL25vZGUtbGlzdFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Ob2RlTGlzdH1cblx0ICovXG5cdGFkZChub2RlKSB7XG5cdFx0c3VwZXIuYWRkKHZhbGlkYXRlSW5zdGFuY2Uobm9kZSwgTm9kZSkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuXHQgKiBAcmV0dXJucyB7Tm9kZUxpc3R9XG5cdCAqL1xuXHRyZW1vdmUobm9kZSkge1xuXHRcdHN1cGVyLmRlbGV0ZSh2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRoYXMobm9kZSkge1xuXHRcdHJldHVybiBzdXBlci5oYXModmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge05vZGVMaXN0fVxuXHQgKi9cblx0Y2xlYXIoKSB7XG5cdFx0c3VwZXIuY2xlYXIoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Tm9kZUxpc3R9XG5cdCAqL1xuXHR0b0FycmF5KCkge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtOb2RlTGlzdH1cblx0ICovXG5cdHRvSlNPTigpIHtcblx0XHRyZXR1cm4gdGhpcy50b0FycmF5KCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge05vZGVMaXN0fVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0Y29uc3QgcGFydHMgPSBbXTtcblxuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLnRvQXJyYXkoKSkge1xuXHRcdFx0cGFydHMucHVzaChub2RlLnRvU3RyaW5nKCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBwYXJ0cy5qb2luKFwiXFxuXCIpO1xuXHR9XG5cblx0Z2V0IGxlbmd0aCgpIHtcblx0XHRyZXR1cm4gc3VwZXIuc2l6ZTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc1ByaW1pdGl2ZSB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgTm9kZUxpc3QgfSBmcm9tIFwiLi9ub2RlbGlzdC5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgTm9kZSB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcm5hbFZhbHVlU3ltYm9sID0gU3ltYm9sKFwiaW50ZXJuYWxEYXRhXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB0cmVlU3RydWN0dXJlU3ltYm9sID0gU3ltYm9sKFwidHJlZVN0cnVjdHVyZVwiKTtcblxuLyoqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGUgaW5zdGFuY2UgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgbmV3IE1vbnN0ZXIuVHlwZXMuTm9kZSgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI2LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHN1bW1hcnkgQSBOb2RlIENsYXNzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0l0ZXJhdGlvbl9wcm90b2NvbHNcbiAqL1xuY2xhc3MgTm9kZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQHBhcmFtIHsqfSBbdmFsdWVdXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpc1tpbnRlcm5hbFZhbHVlU3ltYm9sXSA9IHZhbHVlO1xuXG5cdFx0dGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXSA9IHtcblx0XHRcdHBhcmVudDogbnVsbCxcblx0XHRcdGNoaWxkTm9kZXM6IG5ldyBOb2RlTGlzdCgpLFxuXHRcdFx0bGV2ZWw6IDAsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL25vZGVcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHsqfVxuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsVmFsdWVTeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7Kn1cblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF0gPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuVHlwZXMuTm9kZXxudWxsfVxuXHQgKi9cblx0Z2V0IHBhcmVudCgpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5wYXJlbnQ7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtpbnRlZ2VyfVxuXHQgKi9cblx0Z2V0IGxldmVsKCkge1xuXHRcdHJldHVybiB0aGlzW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmxldmVsO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7Tm9kZUxpc3R9XG5cdCAqL1xuXHRnZXQgY2hpbGROb2RlcygpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7Tm9kZUxpc3R9XG5cdCAqL1xuXHRzZXQgY2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG5cdFx0dGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzID0gdmFsaWRhdGVJbnN0YW5jZShcblx0XHRcdGNoaWxkTm9kZXMsXG5cdFx0XHROb2RlTGlzdCxcblx0XHQpO1xuXHRcdHNldENoaWxkTGV2ZWxBbmRQYXJlbnQuY2FsbCh0aGlzLCB0aGlzLCAxKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLk5vZGV9XG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuXHQgKi9cblx0YXBwZW5kQ2hpbGQobm9kZSkge1xuXHRcdHRoaXNbdHJlZVN0cnVjdHVyZVN5bWJvbF0uY2hpbGROb2Rlcy5hZGQodmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKSk7XG5cdFx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5wYXJlbnQgPSB0aGlzO1xuXG5cdFx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5sZXZlbCA9IHRoaXMubGV2ZWwgKyAxO1xuXHRcdHNldENoaWxkTGV2ZWxBbmRQYXJlbnQuY2FsbCh0aGlzLCBub2RlLCAxKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLk5vZGV9XG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuXHQgKi9cblx0cmVtb3ZlQ2hpbGQobm9kZSkge1xuXHRcdHRoaXNbdHJlZVN0cnVjdHVyZVN5bWJvbF0uY2hpbGROb2Rlcy5yZW1vdmUodmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKSk7XG5cdFx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5wYXJlbnQgPSBudWxsO1xuXG5cdFx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5sZXZlbCA9IDA7XG5cdFx0c2V0Q2hpbGRMZXZlbEFuZFBhcmVudC5jYWxsKHRoaXMsIG5vZGUsIC0xKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aGFzQ2hpbGROb2RlcygpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmxlbmd0aCA+IDA7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Ob2RlfVxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICovXG5cdGhhc0NoaWxkKG5vZGUpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmhhcyhcblx0XHRcdHZhbGlkYXRlSW5zdGFuY2Uobm9kZSwgTm9kZSksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMS4yOC4wXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdGNvbnN0IHBhcnRzID0gW107XG5cdFx0aWYgKHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF0pIHtcblx0XHRcdGxldCBsYWJlbCA9IHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF07XG5cdFx0XHRpZiAoIWlzUHJpbWl0aXZlKGxhYmVsKSlcblx0XHRcdFx0bGFiZWwgPSBKU09OLnN0cmluZ2lmeSh0aGlzW2ludGVybmFsVmFsdWVTeW1ib2xdKTtcblxuXHRcdFx0cGFydHMucHVzaChsYWJlbCk7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0cmV0dXJuIHBhcnRzLmpvaW4oXCJcXG5cIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY291bnQgPSB0aGlzLmNoaWxkTm9kZXMubGVuZ3RoO1xuXHRcdGxldCBjb3VudGVyID0gMDtcblxuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLmNoaWxkTm9kZXMpIHtcblx0XHRcdGNvdW50ZXIrKztcblx0XHRcdGNvbnN0IHByZWZpeCA9IChjb3VudCA9PT0gY291bnRlciA/IFwiXHUyNTE0XCIgOiBcIlx1MjUxQ1wiKS5wYWRTdGFydChcblx0XHRcdFx0MiAqIG5vZGUubGV2ZWwsXG5cdFx0XHRcdFwiIHxcIixcblx0XHRcdCk7XG5cdFx0XHRwYXJ0cy5wdXNoKHByZWZpeCArIG5vZGUudG9TdHJpbmcoKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBhcnRzLmpvaW4oXCJcXG5cIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKiBAcGFyYW0ge2ludH0gb3BlcmFuZFxuICogQHJldHVybiB7c2V0Q2hpbGRMZXZlbEFuZFBhcmVudH1cbiAqL1xuZnVuY3Rpb24gc2V0Q2hpbGRMZXZlbEFuZFBhcmVudChub2RlLCBvcGVyYW5kKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGlmIChub2RlICE9PSB0aGlzKSB7XG5cdFx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5wYXJlbnQgPSB0aGlzO1xuXHR9XG5cblx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG5cdFx0Y2hpbGRbdHJlZVN0cnVjdHVyZVN5bWJvbF0ucGFyZW50ID0gbm9kZTtcblx0XHRjaGlsZFt0cmVlU3RydWN0dXJlU3ltYm9sXS5sZXZlbCA9XG5cdFx0XHRub2RlW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmxldmVsICsgb3BlcmFuZDtcblx0XHRzZXRDaGlsZExldmVsQW5kUGFyZW50LmNhbGwoc2VsZiwgY2hpbGQsIG9wZXJhbmQpO1xuXHR9KTtcblx0cmV0dXJuIHRoaXM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE5vZGUgfSBmcm9tIFwiLi4vdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7IE5vZGVMaXN0IH0gZnJvbSBcIi4uL3R5cGVzL25vZGVsaXN0Lm1qc1wiO1xuaW1wb3J0IHsgYXNzZW1ibGVQYXJ0cyB9IGZyb20gXCIuL2J1aWxkbWFwLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4vZXh0ZW5kLm1qc1wiO1xuXG5leHBvcnQgeyBidWlsZFRyZWUgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcGFyZW50U3ltYm9sID0gU3ltYm9sKFwicGFyZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByb290U3ltYm9sID0gU3ltYm9sKFwicm9vdFwiKTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBidWlsZFRyZWVPcHRpb25zXG4gKiBAcHJvcGVydHkge2FycmF5fSBvcHRpb25zLnJvb3RSZWZlcmVuY2VzPVtudWxsLCB1bmRlZmluZWRdIGRlZmluZXMgdGhlIHZhbHVlcyBmb3IgZWxlbWVudHMgd2l0aG91dCBwYXJlbnRzXG4gKiBAcHJvcGVydHkge01vbnN0ZXIuRGF0YX5leGFtcGxlRmlsdGVyQ2FsbGJhY2t9IG9wdGlvbnMuZmlsdGVyIGZpbHRlcmluZyBvZiB0aGUgdmFsdWVzXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5EYXRhXG4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGEgdHJlZSBzdHJ1Y3R1cmUgZnJvbSBhIGdpdmVuIHN1YmplY3QgdXNpbmcgYSBzZWxlY3RvciBhbmQgc3BlY2lmaWVkIElEIGFuZCBwYXJlbnQgSUQga2V5cy5cbiAqXG4gKiBUaGUgYnVpbGRUcmVlIGZ1bmN0aW9uIGlzIGEgcG93ZXJmdWwgdG9vbCBmb3IgY3JlYXRpbmcgdHJlZS1saWtlIGRhdGEgc3RydWN0dXJlcyBmcm9tIHBsYWluIEphdmFTY3JpcHRcbiAqIG9iamVjdHMuIEl0IHRha2VzIGluIGZvdXIgcmVxdWlyZWQgcGFyYW1ldGVyczogdGhlIHN1YmplY3Qgb2JqZWN0IHRoYXQgeW91IHdhbnQgdG8gdHVybiBpbnRvIGEgdHJlZSwgYVxuICogc2VsZWN0b3IgdGhhdCBpZGVudGlmaWVzIHdoaWNoIHBhcnRzIG9mIHRoZSBzdWJqZWN0IHRvIHVzZSB3aGVuIGJ1aWxkaW5nIHRoZSB0cmVlLCBhbmQgdHdvIGtleXNcbiAqIChpZEtleSBhbmQgcGFyZW50SURLZXkpIHRoYXQgc3BlY2lmeSB3aGljaCBwcm9wZXJ0aWVzIGluIHRoZSBzdWJqZWN0IHJlcHJlc2VudCB0aGUgdW5pcXVlIGlkZW50aWZpZXJzXG4gKiBhbmQgcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBub2RlcyBpbiB0aGUgdHJlZS5cbiAqXG4gKiBPcHRpb25hbGx5LCB5b3UgY2FuIGFsc28gcGFzcyBpbiBhbiBvcHRpb25zIG9iamVjdCB0byBmdXJ0aGVyIGNvbmZpZ3VyZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGZ1bmN0aW9uLFxuICogc3VjaCBhcyBzcGVjaWZ5aW5nIHdoaWNoIHZhbHVlcyBzaG91bGQgYmUgdHJlYXRlZCBhcyByb290cyBvZiB0aGUgdHJlZSwgb3IgcHJvdmlkaW5nIGEgY3VzdG9tIGZpbHRlclxuICogZnVuY3Rpb24gdG8gb25seSBpbmNsdWRlIGNlcnRhaW4gbm9kZXMgaW4gdGhlIGZpbmFsIG91dHB1dC5cbiAqXG4gKiBUaGUgYnVpbGRUcmVlIGZ1bmN0aW9uIHdvcmtzIGJ5IGZpcnN0IHVzaW5nIHRoZSBhc3NlbWJsZVBhcnRzIGhlbHBlciBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSByZWxldmFudFxuICogcGFydHMgb2YgdGhlIHN1YmplY3QgYmFzZWQgb24gdGhlIHNlbGVjdG9yLCBhbmQgdGhlbiBpdGVyYXRlcyBvdmVyIHRoZSByZXN1bHRpbmcgbWFwIHRvIGNyZWF0ZSBOb2RlXG4gKiBvYmplY3RzIGFuZCBvcmdhbml6ZSB0aGVtIGludG8gcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcHMgYmFzZWQgb24gdGhlIHZhbHVlcyBvZiB0aGUgaWRLZXkgYW5kIHBhcmVudElES2V5IHByb3BlcnRpZXMuXG4gKlxuICogVGhlIHJlc3VsdGluZyBOb2RlTGlzdCByZXByZXNlbnRzIHRoZSB0cmVlIHN0cnVjdHVyZSwgd2l0aCBlYWNoIE5vZGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsXG4gKiBvYmplY3QgZGF0YSBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgbWV0YWRhdGEgYWJvdXQgaXRzIHBvc2l0aW9uIGluIHRoZSB0cmVlLiBZb3UgY2FuIHRoZW4gdXNlIHRoZSBjaGlsZE5vZGVzXG4gKiBwcm9wZXJ0eSBvZiBlYWNoIE5vZGUgdG8gYWNjZXNzIGl0cyBjaGlsZHJlbiwgb3IgdGhlIHBhcmVudCBwcm9wZXJ0eSB0byBhY2Nlc3MgaXRzIHBhcmVudC5cbiAqXG4gKiBPdmVyYWxsLCB0aGUgYnVpbGRUcmVlIGZ1bmN0aW9uIGlzIGEgZmxleGlibGUgYW5kIHBvd2VyZnVsIHdheSB0byB0cmFuc2Zvcm0gZmxhdCBkYXRhIGludG8gaGllcmFyY2hpY2FsXG4gKiBzdHJ1Y3R1cmVzLCBhbmQgY2FuIGJlIGVzcGVjaWFsbHkgdXNlZnVsIGluIHNjZW5hcmlvcyBzdWNoIGFzIGRpc3BsYXlpbmcgZm9sZGVyIHN0cnVjdHVyZXMgb3JcbiAqIHZpc3VhbGl6aW5nIGNvbXBsZXggZGF0YSByZWxhdGlvbnNoaXBzLlxuICpcbiAqIExldCdzIHNheSB5b3UgaGF2ZSBhbiBhcnJheSBvZiBkYXRhIG9iamVjdHMgcmVwcmVzZW50aW5nIGEgZmlsZSBzeXN0ZW0gZGlyZWN0b3J5IHN0cnVjdHVyZSwgYW5kIHlvdSB3YW50XG4gKiB0byB0dXJuIGl0IGludG8gYSB0cmVlLWxpa2Ugc3RydWN0dXJlIHdoZXJlIGVhY2ggbm9kZSByZXByZXNlbnRzIGEgZm9sZGVyIG9yIGZpbGUsIGFuZCBjaGlsZCBub2Rlc1xuICogcmVwcmVzZW50IHRoZSBjb250ZW50cyBvZiB0aGUgZm9sZGVyOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGNvbnN0IGZpbGVTeXN0ZW0gPSBbXG4gKiAgIHsgaWQ6ICdmb2xkZXIxJywgbmFtZTogJ0ZvbGRlciAxJywgdHlwZTogJ2ZvbGRlcicsIHBhcmVudDogbnVsbCB9LFxuICogICB7IGlkOiAnZmlsZTEnLCBuYW1lOiAnRmlsZSAxJywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdmb2xkZXIxJyB9LFxuICogICB7IGlkOiAnZmlsZTInLCBuYW1lOiAnRmlsZSAyJywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdmb2xkZXIxJyB9LFxuICogICB7IGlkOiAnc3ViZm9sZGVyMScsIG5hbWU6ICdTdWJmb2xkZXIgMScsIHR5cGU6ICdmb2xkZXInLCBwYXJlbnQ6ICdmb2xkZXIxJyB9LFxuICogICB7IGlkOiAnZmlsZTMnLCBuYW1lOiAnRmlsZSAzJywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdzdWJmb2xkZXIxJyB9LFxuICogICB7IGlkOiAnZmlsZTQnLCBuYW1lOiAnRmlsZSA0JywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdzdWJmb2xkZXIxJyB9LFxuICogICB7IGlkOiAnc3ViZm9sZGVyMicsIG5hbWU6ICdTdWJmb2xkZXIgMicsIHR5cGU6ICdmb2xkZXInLCBwYXJlbnQ6ICdmb2xkZXIxJyB9LFxuICogICB7IGlkOiAnZmlsZTUnLCBuYW1lOiAnRmlsZSA1JywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdzdWJmb2xkZXIyJyB9LFxuICogICB7IGlkOiAnZmlsZTYnLCBuYW1lOiAnRmlsZSA2JywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdzdWJmb2xkZXIyJyB9LFxuICogICB7IGlkOiAnZm9sZGVyMicsIG5hbWU6ICdGb2xkZXIgMicsIHR5cGU6ICdmb2xkZXInLCBwYXJlbnQ6IG51bGwgfSxcbiAqICAgeyBpZDogJ2ZpbGU3JywgbmFtZTogJ0ZpbGUgNycsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnZm9sZGVyMicgfSxcbiAqICAgeyBpZDogJ2ZpbGU4JywgbmFtZTogJ0ZpbGUgOCcsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnZm9sZGVyMicgfSxcbiAqICAgeyBpZDogJ3N1YmZvbGRlcjMnLCBuYW1lOiAnU3ViZm9sZGVyIDMnLCB0eXBlOiAnZm9sZGVyJywgcGFyZW50OiAnZm9sZGVyMicgfSxcbiAqICAgeyBpZDogJ2ZpbGU5JywgbmFtZTogJ0ZpbGUgOScsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMycgfSxcbiAqICAgeyBpZDogJ2ZpbGUxMCcsIG5hbWU6ICdGaWxlIDEwJywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdzdWJmb2xkZXIzJyB9LFxuICogXTtcbiAqXG4gKiBjb25zdCB0cmVlID0gYnVpbGRUcmVlKGZpbGVTeXN0ZW0sICdpZCcsICdpZCcsICdwYXJlbnQnLCB7IHJvb3RSZWZlcmVuY2VzOiBbbnVsbF0gfSk7XG4gKlxuICogY29uc29sZS5sb2codHJlZS50b1N0cmluZygpKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBidWlsZFRyZWUgZnVuY3Rpb24gdGFrZXMgaW4gdGhlIGFycmF5IG9mIGRhdGEgb2JqZWN0cywgYXMgd2VsbCBhcyBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzcGVjaWZ5aW5nXG4gKiB0aGUga2V5cyB0byB1c2UgZm9yIGlkZW50aWZ5aW5nIG5vZGVzIGFuZCB0aGVpciBwYXJlbnQtY2hpbGQgcmVsYXRpb25zaGlwcy4gSW4gdGhpcyBleGFtcGxlLCB3ZSB1c2UgdGhlIGlkXG4gKiBrZXkgdG8gaWRlbnRpZnkgbm9kZXMsIGFuZCB0aGUgcGFyZW50IGtleSB0byBzcGVjaWZ5IHRoZSBwYXJlbnQgb2YgZWFjaCBub2RlLlxuICpcbiAqIFRoZSByZXN1bHRpbmcgdHJlZSBvYmplY3QgaXMgYSBuZXN0ZWQgdHJlZSBzdHJ1Y3R1cmUsIHdoZXJlIGVhY2ggbm9kZSBpcyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgZmlsZSBvclxuICogZm9sZGVyLCBhbmQgaGFzIGNoaWxkIG5vZGVzIHJlcHJlc2VudGluZyBpdHMgY29udGVudHMuIFRoZSB0b1N0cmluZyBtZXRob2Qgb2YgdGhlIHRyZWUgb2JqZWN0XG4gKiBjYW4gYmUgdXNlZCB0byBwcmludCBvdXQgdGhlIHRyZWUgaW4gYSByZWFkYWJsZSBmb3JtYXQ6XG4gKlxuICogYGBgbWFya2Rvd25cbiAqIC0gRm9sZGVyIDFcbiAqICAgLSBGaWxlIDFcbiAqICAgLSBGaWxlIDJcbiAqICAgLSBTdWJmb2xkZXIgMVxuICogICAgIC0gRmlsZSAzXG4gKiAgICAgLSBGaWxlIDRcbiAqICAgLSBTdWJmb2xkZXIgMlxuICogICAgIC0gRmlsZSA1XG4gKiAgICAgLSBGaWxlIDZcbiAqIC0gRm9sZGVyIDJcbiAqICAgLSBGaWxlIDdcbiAqICAgLSBGaWxlIDhcbiAqICAgLSBTdWJmb2xkZXIgM1xuICogICAgIC0gRmlsZSA5XG4gKiAgICAgLSBGaWxlIDEwXG4gKiBgYGBcbiAqXG4gKiBAbWVtYmVyb2YgTW9uc3Rlci5EYXRhXG4gKlxuICogQHBhcmFtIHsqfSBzdWJqZWN0IC0gVGhlIG9iamVjdCBvciBhcnJheSB0byBidWlsZCB0aGUgdHJlZSBmcm9tLlxuICogQHBhcmFtIHtzdHJpbmd8TW9uc3Rlci5EYXRhfmV4YW1wbGVTZWxlY3RvckNhbGxiYWNrfSBzZWxlY3RvciAtIEVpdGhlciBhIHN0cmluZyB0byBzcGVjaWZ5IGEgcHJvcGVydHkgb2YgZWFjaCBvYmplY3QgdG8gdXNlIGFzIGEgc2VsZWN0b3IsIG9yIGEgc2VsZWN0b3IgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSBtYXAgb2Ygb2JqZWN0cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZEtleSAtIFRoZSBwcm9wZXJ0eSBrZXkgdG8gdXNlIGFzIHRoZSB1bmlxdWUgSUQgb2YgZWFjaCBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudElES2V5IC0gVGhlIHByb3BlcnR5IGtleSB0byB1c2UgYXMgdGhlIHBhcmVudCBJRCBvZiBlYWNoIG5vZGUuXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gQWRkaXRpb25hbCBvcHRpb25zIHRvIG1vZGlmeSB0aGUgZnVuY3Rpb24gYmVoYXZpb3IuXG4gKiBAcGFyYW0ge0FycmF5PCo+fSBbb3B0aW9ucy5yb290UmVmZXJlbmNlcz1bbnVsbCwgdW5kZWZpbmVkXV0gLSBBbiBhcnJheSBvZiB2YWx1ZXMgdG8gdHJlYXQgYXMgcm9vdCByZWZlcmVuY2VzIHdoZW4gY3JlYXRpbmcgdGhlIHRyZWUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbb3B0aW9ucy5maWx0ZXJdIC0gQSBmaWx0ZXIgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBub2RlLlxuICpcbiAqIEByZXR1cm4geyp9IFRoZSByZXN1bHRpbmcgdHJlZSBzdHJ1Y3R1cmUgYXMgYSBOb2RlTGlzdC5cbiAqXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHNlbGVjdG9yIGlzIG5laXRoZXIgYSBzdHJpbmcgbm9yIGEgZnVuY3Rpb24uXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHRoZSBzZWxlY3RvciBjYWxsYmFjayBtdXN0IHJldHVybiBhIG1hcC5cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb2JqZWN0IGhhcyBubyB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBpZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqXG4gKiBAc2luY2UgMS4yNi4wXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVHJlZShzdWJqZWN0LCBzZWxlY3RvciwgaWRLZXksIHBhcmVudElES2V5LCBvcHRpb25zKSB7XG5cdGNvbnN0IG5vZGVzID0gbmV3IE1hcCgpO1xuXG5cdGlmICghaXNPYmplY3Qob3B0aW9ucykpIHtcblx0XHRvcHRpb25zID0ge307XG5cdH1cblxuXHRvcHRpb25zID0gZXh0ZW5kKFxuXHRcdHt9LFxuXHRcdHtcblx0XHRcdHJvb3RSZWZlcmVuY2VzOiBbbnVsbCwgdW5kZWZpbmVkXSxcblx0XHRcdGZpbHRlcjogdW5kZWZpbmVkLFxuXHRcdH0sXG5cdFx0b3B0aW9ucyxcblx0KTtcblxuXHRjb25zdCBmaWx0ZXIgPSBvcHRpb25zPy5maWx0ZXI7XG5cdGxldCByb290UmVmZXJlbmNlcyA9IG9wdGlvbnMucm9vdFJlZmVyZW5jZXM7XG5cdGlmICghaXNBcnJheShyb290UmVmZXJlbmNlcykpIHtcblx0XHRyb290UmVmZXJlbmNlcyA9IFtyb290UmVmZXJlbmNlc107XG5cdH1cblxuXHRjb25zdCBjaGlsZE1hcCA9IGFzc2VtYmxlUGFydHMoc3ViamVjdCwgc2VsZWN0b3IsIGZpbHRlciwgZnVuY3Rpb24gKG8sIGssIG0pIHtcblx0XHRjb25zdCBrZXkgPSBvPy5baWRLZXldO1xuXHRcdGxldCByZWYgPSBvPy5bcGFyZW50SURLZXldO1xuXHRcdGlmIChyb290UmVmZXJlbmNlcy5pbmRleE9mKHJlZikgIT09IC0xKSByZWYgPSByb290U3ltYm9sO1xuXG5cdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgb2JqZWN0IGhhcyBubyB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBpZFwiKTtcblx0XHR9XG5cblx0XHRvW3BhcmVudFN5bWJvbF0gPSByZWY7XG5cblx0XHRjb25zdCBub2RlID0gbmV3IE5vZGUobyk7XG5cdFx0dGhpcy5oYXMocmVmKVxuXHRcdFx0PyB0aGlzLmdldChyZWYpLmFkZChub2RlKVxuXHRcdFx0OiB0aGlzLnNldChyZWYsIG5ldyBOb2RlTGlzdCgpLmFkZChub2RlKSk7XG5cdFx0bm9kZXMuc2V0KGtleSwgbm9kZSk7XG5cdH0pO1xuXG5cdG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRjb25zdCBpZCA9IG5vZGU/LltcInZhbHVlXCJdPy5baWRLZXldO1xuXG5cdFx0aWYgKGNoaWxkTWFwLmhhcyhpZCkpIHtcblx0XHRcdG5vZGUuY2hpbGROb2RlcyA9IGNoaWxkTWFwLmdldChpZCk7XG5cdFx0XHRjaGlsZE1hcC5kZWxldGUoaWQpO1xuXHRcdH1cblx0fSk7XG5cblx0Y29uc3QgbGlzdCA9IG5ldyBOb2RlTGlzdCgpO1xuXG5cdGNoaWxkTWFwLmZvckVhY2goKHMpID0+IHtcblx0XHRpZiAocyBpbnN0YW5jZW9mIFNldCkge1xuXHRcdFx0cy5mb3JFYWNoKChuKSA9PiB7XG5cdFx0XHRcdGxpc3QuYWRkKG4pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gbGlzdDtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc0luc3RhbmNlIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSBcIi4vbm9kZS5tanNcIjtcbmltcG9ydCB7IE5vZGVMaXN0IH0gZnJvbSBcIi4vbm9kZWxpc3QubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IE5vZGVSZWN1cnNpdmVJdGVyYXRvciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpc05vZGVMaXN0U3ltYm9sID0gU3ltYm9sKFwiaXNOb2RlTGlzdFwiKTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcmVjdXJzaXZlIGl0ZXJhdG9yIGZvciB0cmF2ZXJzaW5nIG5vZGVzIGluIGEgRE9NIHRyZWUuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL25vZGVyZWN1cnNpdmVpdGVyYXRvci5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAc3VtbWFyeSBBbiBpdGVyYXRvciB0byBydW4gcmVjdXJzaXZlbHkgdGhyb3VnaCBhIHRyZWUgb2Ygbm9kZXNcbiAqIEBleHRlbmRzIEJhc2VcbiAqL1xuY2xhc3MgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0gbm9kZVxuXHQgKi9cblx0Y29uc3RydWN0b3Iobm9kZSkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzW2lzTm9kZUxpc3RTeW1ib2xdID0gZmFsc2U7XG5cblx0XHQvLyBpdGVyYXRvciBpcyBhIE5vZGVMaXN0XG5cdFx0aWYgKGlzSW5zdGFuY2Uobm9kZSwgTm9kZUxpc3QpKSB7XG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IG5vZGU7XG5cdFx0XHRjb25zdCBuID0gbmV3IE5vZGUoKTtcblx0XHRcdG4uY2hpbGROb2RlcyA9IGNoaWxkcmVuO1xuXHRcdFx0dGhpc1tpc05vZGVMaXN0U3ltYm9sXSA9IHRydWU7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IG47XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT3BlcmF0b3JzL3lpZWxkXG5cdCAqL1xuXHRbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKiAoKSB7XG5cdFx0LyoqXG5cdFx0ICogVGhlIGVuZCBvZiB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIGlzIHJlYWNoZWQuIEluIHRoaXMgY2FzZSwgZXhlY3V0aW9uIG9mIHRoZSBnZW5lcmF0b3Jcblx0XHQgKiBlbmRzIGFuZCBhbiBJdGVyYXRvclJlc3VsdCBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyIGluIHdoaWNoIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQgYW5kIGRvbmUgaXMgdHJ1ZS5cblx0XHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09wZXJhdG9ycy95aWVsZFxuXHRcdCAqL1xuXHRcdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gaXRlcmF0b3IgaXMgYSBub2RlbGlzdCBhbmQgdGhlIG1haW4gbm9kZSBpcyBvbmx5IGEgcGxhY2Vob2xkZXJcblx0XHRpZiAodGhpc1tpc05vZGVMaXN0U3ltYm9sXSAhPT0gdHJ1ZSkge1xuXHRcdFx0eWllbGQgdGhpc1tpbnRlcm5hbFN5bWJvbF07XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0Y29uc3QgY2hpbGROb2RlcyA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNoaWxkTm9kZXM7XG5cblx0XHRcdGZvciAoY29uc3Qgbm9kZSBvZiBjaGlsZE5vZGVzKSB7XG5cdFx0XHRcdHlpZWxkKiBuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKG5vZGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Ob2RlUmVjdXJzaXZlSXRlcmF0b3J9XG5cdCAqL1xuXHRmb3JFYWNoKGNhbGxiYWNrKSB7XG5cdFx0Zm9yIChjb25zdCBub2RlIG9mIHRoaXMpIHtcblx0XHRcdGNhbGxiYWNrKG5vZGUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuIiwgIlxuLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyNC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQge2FkZEF0dHJpYnV0ZVRva2VufSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge0FUVFJJQlVURV9FUlJPUk1FU1NBR0V9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQge1RyZWVTZWxlY3RTdHlsZVNoZWV0fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgVHJlZVNlbGVjdFN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuICBUcmVlU2VsZWN0U3R5bGVTaGVldC5pbnNlcnRSdWxlKGBcbkBsYXllciB0cmVlc2VsZWN0IHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9YmFkZ2Vde2Rpc3BsYXk6aW5saW5lLWZsZXh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl17ZGlzcGxheTpmbGV4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1zdGF0ZT1vcGVuXVtkYXRhLW1vbnN0ZXItaGFzLWNoaWxkcmVuPXRydWVdIFtkYXRhLW1vbnN0ZXItcm9sZT1mb2xkZXItaGFuZGxlcl17Y29udGVudDp1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDsgdXRmOCwgPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHdpZHRoPVxcXCIxNlxcXCIgaGVpZ2h0PVxcXCIxNlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiPjxwYXRoIGQ9XFxcIk0yLjUgMGMtLjE2NiAwLS4zMy4wMTYtLjQ4Ny4wNDhsLjE5NC45OEExLjUxIDEuNTEgMCAwIDEgMi41IDFoLjQ1OFYwSDIuNXptMi4yOTIgMGgtLjkxN3YxaC45MTdWMHptMS44MzMgMGgtLjkxN3YxaC45MTdWMHptMS44MzMgMGgtLjkxNnYxaC45MTZWMHptMS44MzQgMGgtLjkxN3YxaC45MTdWMHptMS44MzMgMGgtLjkxN3YxaC45MTdWMHpNMTMuNSAwaC0uNDU4djFoLjQ1OGMuMSAwIC4xOTkuMDEuMjkzLjAyOWwuMTk0LS45ODFBMi41MSAyLjUxIDAgMCAwIDEzLjUgMHptMi4wNzkgMS4xMWEyLjUxMSAyLjUxMSAwIDAgMC0uNjktLjY4OWwtLjU1Ni44MzFjLjE2NC4xMS4zMDUuMjUxLjQxNS40MTVsLjgzLS41NTZ6TTEuMTEuNDIxYTIuNTExIDIuNTExIDAgMCAwLS42ODkuNjlsLjgzMS41NTZjLjExLS4xNjQuMjUxLS4zMDUuNDE1LS40MTVMMS4xMS40MjJ6TTE2IDIuNWMwLS4xNjYtLjAxNi0uMzMtLjA0OC0uNDg3bC0uOTguMTk0Yy4wMTguMDk0LjAyOC4xOTIuMDI4LjI5M3YuNDU4aDFWMi41ek0uMDQ4IDIuMDEzQTIuNTEgMi41MSAwIDAgMCAwIDIuNXYuNDU4aDFWMi41YzAtLjEuMDEtLjE5OS4wMjktLjI5M2wtLjk4MS0uMTk0ek0wIDMuODc1di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXpNMCA1LjcwOHYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6TTAgNy41NDJ2LjkxNmgxdi0uOTE2SDB6bTE1IC45MTZoMXYtLjkxNmgtMXYuOTE2ek0wIDkuMzc1di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXptLTE2IC45MTZ2LjkxN2gxdi0uOTE3SDB6bTE2IC45MTd2LS45MTdoLTF2LjkxN2gxem0tMTYgLjkxN3YuNDU4YzAgLjE2Ni4wMTYuMzMuMDQ4LjQ4N2wuOTgtLjE5NEExLjUxIDEuNTEgMCAwIDEgMSAxMy41di0uNDU4SDB6bTE2IC40NTh2LS40NThoLTF2LjQ1OGMwIC4xLS4wMS4xOTktLjAyOS4yOTNsLjk4MS4xOTRjLjAzMi0uMTU4LjA0OC0uMzIuMDQ4LS40ODd6TS40MjEgMTQuODljLjE4My4yNzIuNDE3LjUwNi42OS42ODlsLjU1Ni0uODMxYTEuNTEgMS41MSAwIDAgMS0uNDE1LS40MTVsLS44My41NTZ6bTE0LjQ2OS42ODljLjI3Mi0uMTgzLjUwNi0uNDE3LjY4OS0uNjlsLS44MzEtLjU1NmMtLjExLjE2NC0uMjUxLjMwNS0uNDE1LjQxNWwuNTU2Ljgzem0tMTIuODc3LjM3M2MuMTU4LjAzMi4zMi4wNDguNDg3LjA0OGguNDU4di0xSDIuNWMtLjEgMC0uMTk5LS4wMS0uMjkzLS4wMjlsLS4xOTQuOTgxek0xMy41IDE2Yy4xNjYgMCAuMzMtLjAxNi40ODctLjA0OGwtLjE5NC0uOThBMS41MSAxLjUxIDAgMCAxIDEzLjUgMTVoLS40NTh2MWguNDU4em0tOS42MjUgMGguOTE3di0xaC0uOTE3djF6bTEuODMzIDBoLjkxN3YtMWgtLjkxN3Yxem0xLjgzNCAwaC45MTZ2LTFoLS45MTZ2MXptMS44MzMgMGguOTE3di0xaC0uOTE3djF6bTEuODMzIDBoLjkxN3YtMWgtLjkxN3Yxek00LjUgNy41YS41LjUgMCAwIDAgMCAxaDdhLjUuNSAwIDAgMCAwLTFoLTd6XFxcIi8+PC9zdmc+Jyk7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTNweDttYXJnaW4tcmlnaHQ6OHB4O3dpZHRoOjEzcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLXN0YXRlPWNsb3NlXVtkYXRhLW1vbnN0ZXItaGFzLWNoaWxkcmVuPXRydWVdIFtkYXRhLW1vbnN0ZXItcm9sZT1mb2xkZXItaGFuZGxlcl17Y29udGVudDp1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDsgdXRmOCwgPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHdpZHRoPVxcXCIxNlxcXCIgaGVpZ2h0PVxcXCIxNlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiPjxwYXRoIGQ9XFxcIk0yLjUgMGMtLjE2NiAwLS4zMy4wMTYtLjQ4Ny4wNDhsLjE5NC45OEExLjUxIDEuNTEgMCAwIDEgMi41IDFoLjQ1OFYwSDIuNXptMi4yOTIgMGgtLjkxN3YxaC45MTdWMHptMS44MzMgMGgtLjkxN3YxaC45MTdWMHptMS44MzMgMGgtLjkxNnYxaC45MTZWMHptMS44MzQgMGgtLjkxN3YxaC45MTdWMHptMS44MzMgMGgtLjkxN3YxaC45MTdWMHpNMTMuNSAwaC0uNDU4djFoLjQ1OGMuMSAwIC4xOTkuMDEuMjkzLjAyOWwuMTk0LS45ODFBMi41MSAyLjUxIDAgMCAwIDEzLjUgMHptMi4wNzkgMS4xMWEyLjUxMSAyLjUxMSAwIDAgMC0uNjktLjY4OWwtLjU1Ni44MzFjLjE2NC4xMS4zMDUuMjUxLjQxNS40MTVsLjgzLS41NTZ6TTEuMTEuNDIxYTIuNTExIDIuNTExIDAgMCAwLS42ODkuNjlsLjgzMS41NTZjLjExLS4xNjQuMjUxLS4zMDUuNDE1LS40MTVMMS4xMS40MjJ6TTE2IDIuNWMwLS4xNjYtLjAxNi0uMzMtLjA0OC0uNDg3bC0uOTguMTk0Yy4wMTguMDk0LjAyOC4xOTIuMDI4LjI5M3YuNDU4aDFWMi41ek0uMDQ4IDIuMDEzQTIuNTEgMi41MSAwIDAgMCAwIDIuNXYuNDU4aDFWMi41YzAtLjEuMDEtLjE5OS4wMjktLjI5M2wtLjk4MS0uMTk0ek0wIDMuODc1di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXpNMCA1LjcwOHYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6TTAgNy41NDJ2LjkxNmgxdi0uOTE2SDB6bTE1IC45MTZoMXYtLjkxNmgtMXYuOTE2ek0wIDkuMzc1di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXptLTE2IC45MTZ2LjkxN2gxdi0uOTE3SDB6bTE2IC45MTd2LS45MTdoLTF2LjkxN2gxem0tMTYgLjkxN3YuNDU4YzAgLjE2Ni4wMTYuMzMuMDQ4LjQ4N2wuOTgtLjE5NEExLjUxIDEuNTEgMCAwIDEgMSAxMy41di0uNDU4SDB6bTE2IC40NTh2LS40NThoLTF2LjQ1OGMwIC4xLS4wMS4xOTktLjAyOS4yOTNsLjk4MS4xOTRjLjAzMi0uMTU4LjA0OC0uMzIuMDQ4LS40ODd6TS40MjEgMTQuODljLjE4My4yNzIuNDE3LjUwNi42OS42ODlsLjU1Ni0uODMxYTEuNTEgMS41MSAwIDAgMS0uNDE1LS40MTVsLS44My41NTZ6bTE0LjQ2OS42ODljLjI3Mi0uMTgzLjUwNi0uNDE3LjY4OS0uNjlsLS44MzEtLjU1NmMtLjExLjE2NC0uMjUxLjMwNS0uNDE1LjQxNWwuNTU2Ljgzem0tMTIuODc3LjM3M2MuMTU4LjAzMi4zMi4wNDguNDg3LjA0OGguNDU4di0xSDIuNWMtLjEgMC0uMTk5LS4wMS0uMjkzLS4wMjlsLS4xOTQuOTgxek0xMy41IDE2Yy4xNjYgMCAuMzMtLjAxNi40ODctLjA0OGwtLjE5NC0uOThBMS41MSAxLjUxIDAgMCAxIDEzLjUgMTVoLS40NTh2MWguNDU4em0tOS42MjUgMGguOTE3di0xaC0uOTE3djF6bTEuODMzIDBoLjkxN3YtMWgtLjkxN3Yxem0xLjgzNC0xdjFoLjkxNnYtMWgtLjkxNnptMS44MzMgMWguOTE3di0xaC0uOTE3djF6bTEuODMzIDBoLjkxN3YtMWgtLjkxN3Yxek04LjUgNC41YS41LjUgMCAwIDAtMSAwdjNoLTNhLjUuNSAwIDAgMCAwIDFoM3YzYS41LjUgMCAwIDAgMSAwdi0zaDNhLjUuNSAwIDAgMCAwLTFoLTN2LTN6XFxcIi8+PC9zdmc+Jyk7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTNweDttYXJnaW4tcmlnaHQ6OHB4O3dpZHRoOjEzcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9aGlkZGVuXXtkaXNwbGF5Om5vbmV9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9dmlzaWJsZV17ZGlzcGxheTpmbGV4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1oYXMtY2hpbGRyZW49ZmFsc2VdIFtkYXRhLW1vbnN0ZXItcm9sZT1mb2xkZXItaGFuZGxlcl17Y29udGVudDpcXFwiIFxcXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTNweDttYXJnaW4tcmlnaHQ6OHB4O3dpZHRoOjEzcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiMFxcXCJde2Rpc3BsYXk6ZmxleDttYXJnaW46MH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaW50ZW5kPVxcXCIxXFxcIl17bWFyZ2luOjAgMCAwIDIwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiMlxcXCJde21hcmdpbjowIDAgMCA0MHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjNcXFwiXXttYXJnaW46MCAwIDAgNjBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaW50ZW5kPVxcXCI0XFxcIl17bWFyZ2luOjAgMCAwIDgwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiNVxcXCJde21hcmdpbjowIDAgMCAxMDBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaW50ZW5kPVxcXCI2XFxcIl17bWFyZ2luOjAgMCAwIDExMHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjdcXFwiXXttYXJnaW46MCAwIDAgMTIwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiOFxcXCJde21hcmdpbjowIDAgMCAxMzBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItZmlsdGVyZWQ9dHJ1ZV17ZGlzcGxheTpub25lfSBcbn1gLCAwKTtcbn0gY2F0Y2ggKGUpIHtcbiAgYWRkQXR0cmlidXRlVG9rZW4oZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKCdodG1sJyksIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUgKyBcIlwiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGJ1aWxkVHJlZSB9IGZyb20gXCIuLi8uLi9kYXRhL2J1aWxkdHJlZS5tanNcIjtcbmltcG9ydCB7IGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUgfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfUk9MRSxcblx0QVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQge1xuXHRmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCxcblx0ZmlyZUN1c3RvbUV2ZW50LFxuXHRmaXJlRXZlbnQsXG59IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgRm9ybWF0dGVyIH0gZnJvbSBcIi4uLy4uL3RleHQvZm9ybWF0dGVyLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL25vZGUubWpzXCI7XG5pbXBvcnQgeyBOb2RlUmVjdXJzaXZlSXRlcmF0b3IgfSBmcm9tIFwiLi4vLi4vdHlwZXMvbm9kZXJlY3Vyc2l2ZWl0ZXJhdG9yLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9GT1JNX1VSTCwgQVRUUklCVVRFX0lOVEVORCB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gXCIuL3NlbGVjdC5tanNcIjtcbmltcG9ydCB7IFNlbGVjdFN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3NlbGVjdC5tanNcIjtcbmltcG9ydCB7IFRyZWVTZWxlY3RTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC90cmVlLXNlbGVjdC5tanNcIjtcblxuZXhwb3J0IHsgVHJlZVNlbGVjdCwgZm9ybWF0SGllcmFyY2hpY2FsU2VsZWN0aW9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGludGVybmFsTm9kZXNTeW1ib2wgPSBTeW1ib2woXCJpbnRlcm5hbE5vZGVzXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBrZXlFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJrZXlFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogVGhpcyBDdXN0b21Db250cm9sIGNyZWF0ZXMgYSBzZWxlY3QgZWxlbWVudCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLlxuICogSXQgc3VwcG9ydHMgZmlsdGVyaW5nLCBsb2NhbCBhbmQgcmVtb3RlLCBtdWx0aXBsZSBzZWxlY3Rpb24gYW5kIGhhcyBhXG4gKiB0ZW1wbGF0ZSBzeXN0ZW0gZm9yIGRpc3BsYXlpbmcgdGhlIG9wdGlvbnMuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy90cmVlc2VsZWN0LnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICogYXMgd2VsbCBhcyBbcG9vcGVyanNdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyLykuXG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyBgPG1vbnN0ZXItc2VsZWN0IC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXNlbGVjdCcpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLXNlbGVjdD48L21vbnN0ZXItc2VsZWN0PlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCB7VHJlZVNlbGVjdH0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL3RyZWVzZWxlY3QuanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10cmVlLXNlbGVjdCcpO1xuICogYGBgXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi8uLi9leGFtcGxlL2NvbXBvbmVudHMvZm9ybS90cmVlLXNlbGVjdC5tanNcbiAqIEBzdGFydHVtbCB0cmVlc2VsZWN0LnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gQ3VzdG9tQ29udHJvbFxuICogQ3VzdG9tQ29udHJvbCA8fC0tIFNlbGVjdFxuICogU2VsZWN0IDx8LS0gVHJlZVNlbGVjdFxuICogQGVuZHVtbFxuICpcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuRm9ybVxuICogQHN1bW1hcnkgQSBoaWdobHkgY29uZmlndXJhYmxlIHNlbGVjdCBjb250cm9sXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkZvcm0uZXZlbnQ6bW9uc3Rlci1vcHRpb25zLXNldFxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLmV2ZW50Om1vbnN0ZXItc2VsZWN0ZWRcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5ldmVudDptb25zdGVyLWNoYW5nZVxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLmV2ZW50Om1vbnN0ZXItY2hhbmdlZFxuICovXG5jbGFzcyBUcmVlU2VsZWN0IGV4dGVuZHMgU2VsZWN0IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3RyZWUtc2VsZWN0QEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBodG1sIHRhZyB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQGV4dGVuZHMgTW9uc3Rlci5Db21wb25lbnRzLkZvcm0uU2VsZWN0XG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtYXBwaW5nLnJvb3RSZWZlcmVuY2VzPVsnMCcsIHVuZGVmaW5lZCwgbnVsbF1cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcuaWRUZW1wbGF0ZT1pZFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gbWFwcGluZy5wYXJlbnRUZW1wbGF0ZT1wYXJlbnRcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcuc2VsZWN0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmb3JtYXR0ZXJcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZvcm1hdHRlci5zZXBhcmF0b3I9XCIgLyBcIlxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHtcblx0XHRcdFx0bWFwcGluZzoge1xuXHRcdFx0XHRcdHJvb3RSZWZlcmVuY2VzOiBbXCIwXCIsIHVuZGVmaW5lZCwgbnVsbF0sXG5cdFx0XHRcdFx0aWRUZW1wbGF0ZTogXCJpZFwiLFxuXHRcdFx0XHRcdHBhcmVudFRlbXBsYXRlOiBcInBhcmVudFwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRmb3JtYXR0ZXI6IHtcblx0XHRcdFx0XHRzZWxlY3Rpb246IGZvcm1hdEhpZXJhcmNoaWNhbFNlbGVjdGlvbixcblx0XHRcdFx0XHRzZXBhcmF0b3I6IFwiIC8gXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0aW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzLmNhbGwodGhpcyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItdHJlZS1zZWxlY3RcIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1NlbGVjdFN0eWxlU2hlZXQsIFRyZWVTZWxlY3RTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbXBvcnQgU2VsZWN0IE9wdGlvbnMgZnJvbSBkYXRhc2V0XG5cdCAqIE5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHRoZSBjb250cm9sIGRlZmF1bHRzL29wdGlvbnNcblx0ICpcblx0ICogQHNpbmNlIDAuMTYuMFxuXHQgKiBAcGFyYW0ge2FycmF5fG9iamVjdHxNYXB8U2V0fSBkYXRhXG5cdCAqIEByZXR1cm4ge1NlbGVjdH1cblx0ICogQHRocm93cyB7RXJyb3J9IG1hcCBpcyBub3QgaXRlcmFibGVcblx0ICovXG5cdGltcG9ydE9wdGlvbnMoZGF0YSkge1xuXHRcdHRoaXNbaW50ZXJuYWxOb2Rlc1N5bWJvbF0gPSBuZXcgTWFwKCk7XG5cblx0XHRjb25zdCBtYXBwaW5nT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZ1wiLCB7fSk7XG5cblx0XHRjb25zdCBmaWx0ZXIgPSBtYXBwaW5nT3B0aW9ucz8uW1wiZmlsdGVyXCJdO1xuXHRcdGNvbnN0IHJvb3RSZWZlcmVuY2VzID0gbWFwcGluZ09wdGlvbnM/LltcInJvb3RSZWZlcmVuY2VzXCJdO1xuXG5cdFx0Y29uc3QgaWQgPSB0aGlzLmdldE9wdGlvbihcIm1hcHBpbmcuaWRUZW1wbGF0ZVwiLCBcImlkXCIpO1xuXHRcdGNvbnN0IHBhcmVudElEID0gdGhpcy5nZXRPcHRpb24oXCJtYXBwaW5nLnBhcmVudFRlbXBsYXRlXCIsIFwicGFyZW50XCIpO1xuXG5cdFx0Y29uc3Qgc2VsZWN0b3IgPSBtYXBwaW5nT3B0aW9ucz8uW1wic2VsZWN0b3JcIl07XG5cblx0XHRjb25zdCBub2RlcyA9IGJ1aWxkVHJlZShkYXRhLCBzZWxlY3RvciwgaWQsIHBhcmVudElELCB7XG5cdFx0XHRmaWx0ZXIsXG5cdFx0XHRyb290UmVmZXJlbmNlcyxcblx0XHR9KTtcblxuXHRcdGNvbnN0IG9wdGlvbnMgPSBbXTtcblx0XHRmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcblx0XHRcdGNvbnN0IGl0ZXJhdG9yID0gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihub2RlKTtcblx0XHRcdGZvciAoY29uc3QgbiBvZiBpdGVyYXRvcikge1xuXHRcdFx0XHRjb25zdCBmb3JtYXR0ZWRWYWx1ZXMgPSBmb3JtYXRLZXlMYWJlbC5jYWxsKHRoaXMsIG4pO1xuXG5cdFx0XHRcdGNvbnN0IGxhYmVsID0gZm9ybWF0dGVkVmFsdWVzLmxhYmVsO1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGZvcm1hdHRlZFZhbHVlcy52YWx1ZTtcblx0XHRcdFx0Y29uc3QgaW50ZW5kID0gbi5sZXZlbDtcblxuXHRcdFx0XHRjb25zdCB2aXNpYmlsaXR5ID0gaW50ZW5kID4gMCA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcblx0XHRcdFx0Y29uc3Qgc3RhdGUgPSBcImNsb3NlXCI7XG5cblx0XHRcdFx0dGhpc1tpbnRlcm5hbE5vZGVzU3ltYm9sXS5zZXQodmFsdWUsIG4pO1xuXG5cdFx0XHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdFx0bGFiZWwsXG5cdFx0XHRcdFx0aW50ZW5kLFxuXHRcdFx0XHRcdHN0YXRlLFxuXHRcdFx0XHRcdHZpc2liaWxpdHksXG5cdFx0XHRcdFx0W1wiaGFzLWNoaWxkcmVuXCJdOiBuLmhhc0NoaWxkTm9kZXMoKSxcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5zZXRPcHRpb24oXCJvcHRpb25zXCIsIG9wdGlvbnMpO1xuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1vcHRpb25zLXNldFwiLCB7XG5cdFx0XHRvcHRpb25zLFxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uU2VsZWN0fVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGV2ZW50XG4gKi9cbmZ1bmN0aW9uIGhhbmRsZU9wdGlvbktleWJvYXJkRXZlbnRzKGV2ZW50KSB7XG5cdHN3aXRjaCAoZXZlbnQ/LltcImNvZGVcIl0pIHtcblx0XHRjYXNlIFwiQXJyb3dMZWZ0XCI6XG5cdFx0XHRjbG9zZU9yT3BlbkN1cnJlbnRPcHRpb24uY2FsbCh0aGlzLCBldmVudCwgXCJjbG9zZVwiKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQXJyb3dSaWdodFwiOlxuXHRcdFx0Y2xvc2VPck9wZW5DdXJyZW50T3B0aW9uLmNhbGwodGhpcywgZXZlbnQsIFwib3BlblwiKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2V2ZW50fSBldmVudFxuICovXG5mdW5jdGlvbiBjbG9zZU9yT3BlbkN1cnJlbnRPcHRpb24oZXZlbnQsIG1vZGUpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShldmVudCwgRXZlbnQpO1xuXG5cdGlmICh0eXBlb2YgZXZlbnQuY29tcG9zZWRQYXRoICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBldmVudFwiKTtcblx0fVxuXG5cdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblx0Y29uc3Qgb3B0aW9uTm9kZSA9IHBhdGguc2hpZnQoKTtcblxuXHRjb25zdCBzdGF0ZSA9IG9wdGlvbk5vZGUuZ2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLXN0YXRlXCIpO1xuXHRpZiAoc3RhdGUgIT09IG1vZGUpIHtcblx0XHRjb25zdCBoYW5kbGVyID0gb3B0aW9uTm9kZS5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9Zm9sZGVyLWhhbmRsZXJdXCIsXG5cdFx0KTtcblx0XHRpZiAoaGFuZGxlciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRmaXJlRXZlbnQoaGFuZGxlciwgXCJjbGlja1wiKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKiBAcmV0dXJuIHthcnJheTxsYWJlbCwgdmFsdWU+fVxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBmb3JtYXRLZXlMYWJlbChub2RlKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2Uobm9kZSwgTm9kZSk7XG5cblx0Y29uc3QgbGFiZWwgPSBuZXcgRm9ybWF0dGVyKG5vZGUudmFsdWUpLmZvcm1hdChcblx0XHR0aGlzLmdldE9wdGlvbihcIm1hcHBpbmcubGFiZWxUZW1wbGF0ZVwiLCBcIlwiKSxcblx0KTtcblx0Y29uc3QgdmFsdWUgPSBuZXcgRm9ybWF0dGVyKG5vZGUudmFsdWUpLmZvcm1hdChcblx0XHR0aGlzLmdldE9wdGlvbihcIm1hcHBpbmcudmFsdWVUZW1wbGF0ZVwiLCBcIlwiKSxcblx0KTtcblxuXHRyZXR1cm4ge1xuXHRcdHZhbHVlLFxuXHRcdGxhYmVsLFxuXHR9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5mdW5jdGlvbiBidWlsZFRyZWVMYWJlbHModmFsdWUpIHtcblx0bGV0IG5vZGUgPSB0aGlzW2ludGVybmFsTm9kZXNTeW1ib2xdLmdldCh2YWx1ZSk7XG5cdGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcblx0XHRub2RlID0gdGhpc1tpbnRlcm5hbE5vZGVzU3ltYm9sXS5nZXQocGFyc2VJbnQodmFsdWUpKTtcblx0fVxuXG5cdGNvbnN0IHBhcnRzID0gW107XG5cblx0aWYgKG5vZGUgaW5zdGFuY2VvZiBOb2RlKSB7XG5cdFx0bGV0IHB0ciA9IG5vZGU7XG5cdFx0d2hpbGUgKHB0cikge1xuXHRcdFx0Y29uc3QgZm9ybWF0dGVkVmFsdWVzID0gZm9ybWF0S2V5TGFiZWwuY2FsbCh0aGlzLCBwdHIpO1xuXHRcdFx0cGFydHMudW5zaGlmdChmb3JtYXR0ZWRWYWx1ZXMubGFiZWwpO1xuXHRcdFx0cHRyID0gcHRyLnBhcmVudDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcGFydHM7XG59XG5cbi8qKlxuICogVGhpcyBmb3JtYXR0ZXIgY2FuIGZvcm1hdCBhIGxhYmVsIGhpZXJhcmNoaWNhbGx5LlxuICogVGhlIG9wdGlvbiBgZm9ybWF0dGVyLnNlcGFyYXRvcmAgZGV0ZXJtaW5lcyB0aGUgc2VwYXJhdG9yLlxuICpcbiAqIGBgYFxuICogYSAvIGIgLyBjXG4gKiBgYGBcbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBwYXNzZWQgYXMgYXJndW1lbnQgb2YgdGhlIG9wdGlvbiBgZm9ybWF0dGVyLnNlbGVjdGlvbjpgLlxuICpcbiAqIEBzaW5jZSAxLjkuMFxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdEhpZXJhcmNoaWNhbFNlbGVjdGlvbih2YWx1ZSkge1xuXHRyZXR1cm4gYnVpbGRUcmVlTGFiZWxzXG5cdFx0LmNhbGwodGhpcywgdmFsdWUpXG5cdFx0LmpvaW4odGhpcy5nZXRPcHRpb24oXCJmb3JtYXR0ZXIuc2VwYXJhdG9yXCIsIFwiIC8gXCIpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgb3Blbk9wdGlvbkV2ZW50SGFuZGxlciA9IFN5bWJvbChcIm9wZW5PcHRpb25FdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbb3Blbk9wdGlvbkV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XCJmb2xkZXItaGFuZGxlclwiLFxuXHRcdCk7XG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbnRhaW5lciA9IGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZWxlbWVudCwgQVRUUklCVVRFX1JPTEUsIFwib3B0aW9uXCIpO1xuXHRcdGNvbnN0IGluZGV4ID0gY29udGFpbmVyXG5cdFx0XHQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0UpXG5cdFx0XHQuc3BsaXQoXCItXCIpXG5cdFx0XHQucG9wKCk7XG5cblx0XHRjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLmdldE9wdGlvbihgb3B0aW9ucy4ke2luZGV4fS5zdGF0ZWApO1xuXG5cdFx0Y29uc3QgbmV3U3RhdGUgPSBjdXJyZW50U3RhdGUgPT09IFwiY2xvc2VcIiA/IFwib3BlblwiIDogXCJjbG9zZVwiO1xuXHRcdHRoaXMuc2V0T3B0aW9uKGBvcHRpb25zLiR7aW5kZXh9LnN0YXRlYCwgbmV3U3RhdGUpO1xuXG5cdFx0Y29uc3QgbmV3VmlzaWJpbGl0eSA9IG5ld1N0YXRlID09PSBcIm9wZW5cIiA/IFwidmlzaWJsZVwiIDogXCJoaWRkZW5cIjtcblxuXHRcdGlmIChjb250YWluZXIuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9JTlRFTkQpKSB7XG5cdFx0XHRjb25zdCBpbnRlbmQgPSBjb250YWluZXIuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9JTlRFTkQpO1xuXG5cdFx0XHRsZXQgcmVmID0gY29udGFpbmVyLm5leHRFbGVtZW50U2libGluZztcblx0XHRcdGNvbnN0IGNoaWxkSW50ZW5kID0gcGFyc2VJbnQoaW50ZW5kKSArIDE7XG5cblx0XHRcdGNvbnN0IGNtcCA9IChhLCBiKSA9PiB7XG5cdFx0XHRcdGlmIChuZXdTdGF0ZSA9PT0gXCJvcGVuXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gYSA9PT0gYjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBhID49IGI7XG5cdFx0XHR9O1xuXG5cdFx0XHR3aGlsZSAoXG5cdFx0XHRcdHJlZj8uaGFzQXR0cmlidXRlKEFUVFJJQlVURV9JTlRFTkQpICYmXG5cdFx0XHRcdGNtcChwYXJzZUludChyZWYuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9JTlRFTkQpKSwgY2hpbGRJbnRlbmQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgcmVmSW5kZXggPSByZWZcblx0XHRcdFx0XHQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0UpXG5cdFx0XHRcdFx0LnNwbGl0KFwiLVwiKVxuXHRcdFx0XHRcdC5wb3AoKTtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYG9wdGlvbnMuJHtyZWZJbmRleH0udmlzaWJpbGl0eWAsIG5ld1Zpc2liaWxpdHkpO1xuXG5cdFx0XHRcdGlmIChuZXdTdGF0ZSA9PT0gXCJjbG9zZVwiKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYG9wdGlvbnMuJHtyZWZJbmRleH0uc3RhdGVgLCBcImNsb3NlXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVmID0gcmVmLm5leHRFbGVtZW50U2libGluZztcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dGhpc1trZXlFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBwYXRoPy5bMF07XG5cblx0XHRsZXQgcm9sZTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkpIHtcblx0XHRcdFx0cm9sZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKTtcblx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudCA9PT0gdGhpcykge1xuXHRcdFx0XHRzaG93LmNhbGwodGhpcyk7XG5cdFx0XHRcdGZvY3VzRmlsdGVyLmNhbGwodGhpcyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBlID0gZWxlbWVudC5jbG9zZXN0KGBbJHtBVFRSSUJVVEVfUk9MRX1dYCk7XG5cdFx0XHRcdGlmIChlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZS5oYXNBdHRyaWJ1dGUoKSkge1xuXHRcdFx0XHRcdHJvbGUgPSBlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHN3aXRjaCAocm9sZSkge1xuXHRcdFx0Y2FzZSBcIm9wdGlvbi1sYWJlbFwiOlxuXHRcdFx0Y2FzZSBcIm9wdGlvbi1jb250cm9sXCI6XG5cdFx0XHRjYXNlIFwib3B0aW9uXCI6XG5cdFx0XHRcdGhhbmRsZU9wdGlvbktleWJvYXJkRXZlbnRzLmNhbGwodGhpcywgZXZlbnQpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH07XG5cblx0dGhpcy5zaGFkb3dSb290LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXNba2V5RXZlbnRIYW5kbGVyXSk7XG5cdHRoaXMuc2hhZG93Um9vdC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpc1tvcGVuT3B0aW9uRXZlbnRIYW5kbGVyXSk7XG59XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1zZWxlY3QgZGF0YS1tb25zdGVyLXVybD1cImh0dHBzOi8vZXhhbXBsZS5jb20vXCI+PC9tb25zdGVyLXNlbGVjdD5cbiAqIGBgYFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cygpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdGNvbnN0IHVybCA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cdGlmIChpc1N0cmluZyh1cmwpKSB7XG5cdFx0b3B0aW9uc1tcInVybFwiXSA9IG5ldyBVUkwodXJsKS50b1N0cmluZygpO1xuXHR9XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHRlbXBsYXRlIGlkPVwib3B0aW9uc1wiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItaW50ZW5kIHBhdGg6b3B0aW9ucy5pbnRlbmQsIFxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItc3RhdGUgcGF0aDpvcHRpb25zLnN0YXRlLCBcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXZpc2liaWxpdHkgcGF0aDpvcHRpb25zLnZpc2liaWxpdHksIFxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItZmlsdGVyZWQgcGF0aDpvcHRpb25zLmZpbHRlcmVkLFxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItaGFzLWNoaWxkcmVuIHBhdGg6b3B0aW9ucy5oYXMtY2hpbGRyZW5cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiZm9sZGVyLWhhbmRsZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgcGFydD1cIm9wdGlvblwiIHJvbGU9XCJvcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRhdGEtbW9uc3Rlci1yb2xlPVwib3B0aW9uLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJcbiAgICAgICAgICAgIHR5cGUgcGF0aDp0eXBlLFxuICAgICAgICAgICAgcm9sZSBwYXRoOnJvbGUsXG4gICAgICAgICAgICB2YWx1ZSBwYXRoOm9wdGlvbnMudmFsdWUsIFxuICAgICAgICAgICAgbmFtZSBwYXRoOm5hbWUsIFxuICAgICAgICAgICAgcGFydCBwYXRoOnR5cGUgfCBwcmVmaXg6b3B0aW9uLSB8IHN1ZmZpeDogZm9ybVxuICAgICAgICAgICAgXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6b3B0aW9ucyB8IGluZGV4OmxhYmVsXCIgcGFydD1cIm9wdGlvbi1sYWJlbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPHRlbXBsYXRlIGlkPVwic2VsZWN0aW9uXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgICBwYXJ0PVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItdmFsdWUgcGF0aDpzZWxlY3Rpb24gfCBpbmRleDp2YWx1ZSwgXG4gICAgICAgICAgICAgICAgIGNsYXNzIHBhdGg6Y2xhc3NlcyB8IGluZGV4OmJhZGdlLCBcbiAgICAgICAgcGFydCBwYXRoOnR5cGUgfCBzdWZmaXg6LW9wdGlvbiB8IHByZWZpeDogZm9ybS1cIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6c2VsZWN0aW9uIHwgaW5kZXg6bGFiZWxcIiBwYXJ0PVwiYmFkZ2UtbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJiYWRnZS1sYWJlbFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cInJlbW92ZS1iYWRnZVwiIGRhdGEtbW9uc3Rlci1zZWxlY3QtdGhpc1xuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmZlYXR1cmVzLmNsZWFyIHwgPzo6aGlkZGVuIFwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cInJlbW92ZS1iYWRnZVwiIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDxzbG90IGNsYXNzPVwiaGlkZGVuXCI+PC9zbG90PlxuXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIiB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICBcXCR7c2VsZWN0ZWR9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJtb25zdGVyLWNvbG9yLXByaW1hcnktMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb24tZmlsdGVyLWNvbnRyb2xcIiByb2xlPVwic2VhcmNoXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHJvbGU9XCJzZWFyY2hib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydD1cInBvcHBlci1maWx0ZXJcIiBuYW1lPVwicG9wcGVyLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwiY29udGVudFwiIGNsYXNzPVwiZmxleFwiIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cIm9wdGlvbnNcIiBkYXRhLW1vbnN0ZXItcm9sZT1cIm9wdGlvbnNcIiBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwib3B0aW9ucyBwYXRoOm9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJuby1vcHRpb25zXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJuby1vcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDptZXNzYWdlcy5lbXB0eU9wdGlvbnNcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBwYXJ0PVwic3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIiBkYXRhLW1vbnN0ZXItcm9sZT1cInN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZSB8IHN1ZmZpeDpcXFxcIHN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIGA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUcmVlU2VsZWN0KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0aW5pdE1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9GT1JNX1JFTE9BRCwgQVRUUklCVVRFX0ZPUk1fVVJMIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgbG9hZEFuZEFzc2lnbkNvbnRlbnQgfSBmcm9tIFwiLi91dGlsL2ZldGNoLm1qc1wiO1xuXG5leHBvcnQgeyBUZW1wbGF0ZSB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcnNlY3Rpb25PYnNlcnZlcldhc0luaXRpYWxpemVkID0gU3ltYm9sKFwid2FzSW5pdGlhbGl6ZWRcIik7XG5cbi8qKlxuICogVGhpcyBDdXN0b21FbGVtZW50IGBtb25zdGVyLXRlbXBsYXRlYCByZWxvYWRzIGEgY29udGVudCBhbmQgYWRkcyBpdCB0byB0aGUgU2hhZG93Um9vdC5cbiAqIFRoZSBjb250ZW50IGlzIHNldCB0byBub3QgdmlzaWJsZSxcbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL3RlbXBsYXRlLnBuZ1wiPlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgYDxtb25zdGVyLXRlbXBsYXRlIC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlbXBsYXRlJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItdGVtcGxhdGU+PC9tb25zdGVyLXRlbXBsYXRlPlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCB7VGVtcGxhdGV9IGZyb20gJ0BzY2h1a2FpL2NvbXBvbmVudC1mb3JtL3NvdXJjZS90ZW1wbGF0ZS5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlbXBsYXRlJyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgY29udGVudCB3aWxsIG5vdCBiZSBsb2FkZWQgdW50aWwgdGhpcyBlbGVtZW50IGlzIHZpc2libGUuIElmIHRoZSBlbGVtZW50IGlzIGludmlzaWJsZSBhZ2FpbiBhbmQgYmVjb21lcyB2aXNpYmxlIGFnYWluLFxuICogdGhlIGNvbnRlbnQgaXMgcmVsb2FkZWQgYXMgd2VsbC4geW91IGNhbiBkaXNhYmxlIHRoaXMgYmVoYXZpb3IgYnkgc2V0dGluZyBgcmVsb2FkPW9uc2hvd2AuICpcbiAqXG4gKiBAc3RhcnR1bWwgdGVtcGxhdGUucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDdXN0b21Db250cm9sXG4gKiBDdXN0b21Db250cm9sIDx8LS0gVGVtcGxhdGVcbiAqIEBlbmR1bWxcbiAqXG4gKiBAc2luY2UgMS4xMS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc3VtbWFyeSBBIHRlbXBsYXRlIGNvbnRyb2xcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5ldmVudDptb25zdGVyLWZldGNoZWRcbiAqL1xuY2xhc3MgVGVtcGxhdGUgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3RlbXBsYXRlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIGh0bWwgdGFnIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmw9dW5kZWZpbmVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWxvYWQ9dW5kZWZpbmVkICBjdXJyZW50bHkgdGhlIG9ubHkgdmFsdWUgZGVmaW5lZCBpcyBgb25zaG93YC4gQ3VycmVudGx5IHRoZSBvbmx5IHZhbHVlIGRlZmluZWQgaXMgb25zaG93LiB0aGlzIHJlbW92ZXMgdGhlIEludGVyc2VjdGlvbk9ic2VydmVyLiB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvbnRlbnQgaXMgb25seSBsb2FkZWQgb25jZS4gcmVsb2FkaW5nIG9mIHRoZSBjb250ZW50IGRvZXMgbm90IG9jY3VyLlxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlByb2Nlc3NvcltdfSBwcm9jZXNzb3JzXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaCBGZXRjaCBbc2VlIFVzaW5nIEZldGNoIG1vemlsbGEub3JnXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJL1VzaW5nX0ZldGNoKVxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gucmVkaXJlY3Q9ZXJyb3Jcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLm1ldGhvZD1HRVRcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLm1vZGU9c2FtZS1vcmlnaW5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLmNyZWRlbnRpYWxzPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaC5oZWFkZXJzPXtcImFjY2VwdFwiOlwidGV4dC9odG1sXCJ9fVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHtcblx0XHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0dXJsOiB1bmRlZmluZWQsXG5cdFx0XHRcdHJlbG9hZDogdW5kZWZpbmVkLFxuXHRcdFx0XHRwcm9jZXNzb3JzOiBbXSxcblx0XHRcdFx0ZmV0Y2g6IHtcblx0XHRcdFx0XHRyZWRpcmVjdDogXCJlcnJvclwiLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0XHRtb2RlOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdFx0Y3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdFx0XHRhY2NlcHQ6IFwidGV4dC9odG1sXCIsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMuY2FsbCh0aGlzKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgd2hpY2ggYXR0cmlidXRlcyBhcmUgdG8gYmUgbW9uaXRvcmVkIGJ5IGBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKWAuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ1tdfVxuXHQgKi9cblx0c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG5cdFx0Y29uc3QgbGlzdCA9IHN1cGVyLm9ic2VydmVkQXR0cmlidXRlcztcblx0XHRsaXN0LnB1c2goQVRUUklCVVRFX0ZPUk1fVVJMKTtcblx0XHRyZXR1cm4gbGlzdDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0W2luaXRNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2luaXRNZXRob2RTeW1ib2xdKCk7XG5cblx0XHQvLyBkYXRhLW1vbnN0ZXItb3B0aW9uc1xuXHRcdHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW0FUVFJJQlVURV9GT1JNX1VSTF0gPSAodXJsKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKSkge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcInVybFwiLCBuZXcgVVJMKHVybCwgZG9jdW1lbnQubG9jYXRpb24pLnRvU3RyaW5nKCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJ1cmxcIiwgdW5kZWZpbmVkKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGRlZmF1bHQgc2xvdFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyB1cmxcblx0ICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gcmVxdWVzdCBmYWlsZWRcblx0ICogQHRocm93cyB7RXJyb3J9IG5vdCBmb3VuZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG5cdCAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5ldmVudDptb25zdGVyLWZldGNoZWRcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uRm9ybX1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdEludGVyc2VjdGlvbk9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci10ZW1wbGF0ZVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIGxvYWQgY29udGVudCBmcm9tIHVybFxuXHQgKlxuXHQgKiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB0aGF0IHdpdGggdGhpcyBmdW5jdGlvbiB0aGUgbG9hZGluZyBpcyBleGVjdXRlZFxuXHQgKiBkaXJlY3RseS4gaXQgaXMgbG9hZGVkIGFzIHdlbGwgd2hlbiB0aGUgZWxlbWVudCBpcyBub3QgdmlzaWJsZS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSB1cmxcblx0ICovXG5cdGZldGNoKHVybCkge1xuXHRcdGlmIChpc1N0cmluZyh1cmwpIHx8IHVybCBpbnN0YW5jZW9mIFVSTCkge1xuXHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMLCBgJHt1cmx9YCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGxvYWRDb250ZW50LmNhbGwodGhpcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQcm9jZXNzb3JcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBkZXN0aW5hdGlvblxuICogQHByb3BlcnR5IHtTdHJpbmd9IHNvdXJjZVxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtXG4gKiBAc2luY2UgMS4xMS44XG4gKi9cblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBwYXNzIGEgVVJMIHRvIHRoaXMgc2VsZWN0LlxuICpcbiAqIGBgYFxuICogPG1vbnN0ZXItc2VsZWN0IGRhdGEtbW9uc3Rlci11cmw9XCJodHRwczovL2V4YW1wbGUuY29tL1wiPjwvbW9uc3Rlci1zZWxlY3Q+XG4gKiBgYGBcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMoKSB7XG5cdGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuXHRjb25zdCB1cmwgPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9VUkwpO1xuXG5cdGlmIChpc1N0cmluZyh1cmwpKSB7XG5cdFx0b3B0aW9uc1tcInVybFwiXSA9IG5ldyBVUkwodXJsLCBkb2N1bWVudC5sb2NhdGlvbikudG9TdHJpbmcoKTtcblx0fVxuXG5cdGlmICh0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9SRUxPQUQpKSB7XG5cdFx0b3B0aW9uc1tcInJlbG9hZFwiXSA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1JFTE9BRCkudG9Mb3dlckNhc2UoKTtcblx0fVxuXG5cdHJldHVybiBvcHRpb25zO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBkZWZhdWx0IHNsb3RcbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyB1cmxcbiAqIEB0aHJvd3Mge0Vycm9yfSB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGFcbiAqIEB0aHJvd3Mge0Vycm9yfSByZXF1ZXN0IGZhaWxlZFxuICogQHRocm93cyB7RXJyb3J9IG5vdCBmb3VuZFxuICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLmV2ZW50Om1vbnN0ZXItZmV0Y2hlZFxuICovXG5mdW5jdGlvbiBpbml0SW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKSB7XG5cdGlmICh0aGlzW2ludGVyc2VjdGlvbk9ic2VydmVyV2FzSW5pdGlhbGl6ZWRdID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpc1tpbnRlcnNlY3Rpb25PYnNlcnZlcldhc0luaXRpYWxpemVkXSA9IHRydWU7XG5cblx0Y29uc3Qgb3B0aW9ucyA9IHtcblx0XHR0aHJlc2hvbGQ6IFswLjVdLFxuXHR9O1xuXG5cdGNvbnN0IGNhbGxiYWNrID0gKGVudHJpZXMsIG9ic2VydmVyKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBbLCBlbnRyeV0gb2YgZW50cmllcy5lbnRyaWVzKCkpIHtcblx0XHRcdGlmIChlbnRyeS5pc0ludGVyc2VjdGluZyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJyZWxvYWRcIikgPT09IFwib25zaG93XCIpIHtcblx0XHRcdFx0XHRvYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGxvYWRDb250ZW50LmNhbGwodGhpcyk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGNhbGxiYWNrLCBvcHRpb25zKTtcblx0b2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgZGVmYXVsdCBzbG90XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgdXJsXG4gKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gcmVxdWVzdCBmYWlsZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBub3QgZm91bmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBjbGllbnQgZXJyb3JcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLmV2ZW50Om1vbnN0ZXItZmV0Y2hlZFxuICovXG5mdW5jdGlvbiBsb2FkQ29udGVudCgpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0Y29uc3QgdXJsID0gdGhpcy5nZXRPcHRpb24oXCJ1cmxcIiwgdW5kZWZpbmVkKTtcblx0aWYgKCFpc1N0cmluZyh1cmwpIHx8IHVybCA9PT0gXCJcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgdXJsXCIpO1xuXHR9XG5cblx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwiZmV0Y2hcIiwge30pO1xuXG5cdGNvbnN0IGRlZmF1bHRTbG90ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCJzbG90W25hbWU9ZGVmYXVsdF1cIik7XG5cdGlmICghKGRlZmF1bHRTbG90IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBkZWZhdWx0IHNsb3RcIik7XG5cdH1cblxuXHRkZWZhdWx0U2xvdC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuXG5cdGxldCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNvbnRhaW5lcl1gLFxuXHQpO1xuXHRpZiAoIShjb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdGNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdFx0Y29udGFpbmVyLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSwgXCJjb250YWluZXJcIik7XG5cdFx0dGhpcy5zaGFkb3dSb290LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG5cdH1cblxuXHRsb2FkQW5kQXNzaWduQ29udGVudChjb250YWluZXIsIHVybCwgb3B0aW9ucylcblx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRkZWZhdWx0U2xvdC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdFx0XHRydW5Qcm9jZXNzb3JzLmNhbGwodGhpcyk7XG5cdFx0fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdHRocm93IGU7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3J1blByb2Nlc3NvcnN9XG4gKi9cbmZ1bmN0aW9uIHJ1blByb2Nlc3NvcnMoKSB7XG5cdGNvbnN0IHByb2Nlc3NvcnMgPSB0aGlzLmdldE9wdGlvbihcInByb2Nlc3NvcnNcIik7XG5cdGlmICghaXNBcnJheShwcm9jZXNzb3JzKSkgcmV0dXJuO1xuXG5cdGZvciAoY29uc3QgWywgcHJvY2Vzc29yXSBvZiBwcm9jZXNzb3JzLmVudHJpZXMoKSkge1xuXHRcdGNvbnN0IHNvdXJjZSA9IHByb2Nlc3Nvcj8uc291cmNlO1xuXHRcdGNvbnN0IGRlc3RpbmF0aW9uID0gcHJvY2Vzc29yPy5kZXN0aW5hdGlvbjtcblxuXHRcdGlmIChpc1N0cmluZyhzb3VyY2UpICYmIGlzU3RyaW5nKGRlc3RpbmF0aW9uKSkge1xuXHRcdFx0Y29uc3Qgc291cmNlTm9kZSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKHNvdXJjZSk7XG5cdFx0XHRjb25zdCBkZXN0aW5hdGlvbk5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGRlc3RpbmF0aW9uKTtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRzb3VyY2VOb2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcblx0XHRcdFx0ZGVzdGluYXRpb25Ob2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnRcblx0XHRcdCkge1xuXHRcdFx0XHRkZXN0aW5hdGlvbk5vZGUuaW5uZXJIVE1MID0gc291cmNlTm9kZS5jbG9uZU5vZGUodHJ1ZSkuaW5uZXJIVE1MO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxzbG90IG5hbWU9XCJkZWZhdWx0XCI+PC9zbG90PlxuICAgIGA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUZW1wbGF0ZSk7XG4iLCAiXG4vKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDI0LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7YWRkQXR0cmlidXRlVG9rZW59IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7QVRUUklCVVRFX0VSUk9STUVTU0FHRX0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7TWVzc2FnZVN0eWxlU2hlZXR9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBNZXNzYWdlU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG4gIE1lc3NhZ2VTdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuQGxheWVyIG1lc3NhZ2UgeyBcbjp3aGVyZShodG1sKXtsaW5lLWhlaWdodDoxLjE1Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tb3otdGV4dC1zaXplLWFkanVzdDoxMDAlO3RleHQtc2l6ZS1hZGp1c3Q6MTAwJX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUoYWJiclt0aXRsZV0pe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH06d2hlcmUoYixzdHJvbmcpe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoY29kZSxrYmQscHJlLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlfWJvZHksaHRtbHttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSA0MHB4KX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLXNoYWRvdzpub25lfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWdyYXktMTojZjZmNmY2Oy0tbW9uc3Rlci1jb2xvci1ncmF5LTI6I2UyZTJlMjstLW1vbnN0ZXItY29sb3ItZ3JheS0zOiM4YjhiOGI7LS1tb25zdGVyLWNvbG9yLWdyYXktNDojNmY2ZjZmOy0tbW9uc3Rlci1jb2xvci1ncmF5LTU6IzNlM2UzZTstLW1vbnN0ZXItY29sb3ItZ3JheS02OiMyMjI7LS1tb25zdGVyLWNvbG9yLXJvc2UtMTojZmZmN2Y5Oy0tbW9uc3Rlci1jb2xvci1yb3NlLTI6I2ZmZGNlNTstLW1vbnN0ZXItY29sb3Itcm9zZS0zOiNmZjNiOGQ7LS1tb25zdGVyLWNvbG9yLXJvc2UtNDojZGIwMDcyOy0tbW9uc3Rlci1jb2xvci1yb3NlLTU6IzgwMDA0MDstLW1vbnN0ZXItY29sb3Itcm9zZS02OiM0YzAwMjM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0xOiNmZmY4Zjg7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0yOiNmZmRkZGY7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0zOiNmZjQyNmM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS00OiNkZTAwNTE7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS01OiM4MjAwMmM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS02OiM1MTAwMTg7LS1tb25zdGVyLWNvbG9yLXJlZC0xOiNmZmY4ZjY7LS1tb25zdGVyLWNvbG9yLXJlZC0yOiNmZmRkZDg7LS1tb25zdGVyLWNvbG9yLXJlZC0zOiNmZjQ2NDc7LS1tb25zdGVyLWNvbG9yLXJlZC00OiNlMDAwMmI7LS1tb25zdGVyLWNvbG9yLXJlZC01OiM4MzAwMTQ7LS1tb25zdGVyLWNvbG9yLXJlZC02OiM1MzAwMDM7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xOiNmZmY4ZjU7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yOiNmZmRlZDE7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zOiNmZDRkMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS00OiNjZDNjMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS01OiM3NTIxMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS02OiM0MDE2MDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTE6I2ZmZjhmMzstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMjojZmZkZmM2Oy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0zOiNkNTczMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTQ6I2FjNWMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNTojNjMzMzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi02OiMzNzFkMDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTE6I2ZmZjhlZjstLW1vbnN0ZXItY29sb3ItYW1iZXItMjojZmZlMGIyOy0tbW9uc3Rlci1jb2xvci1hbWJlci0zOiNiOTgzMDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTQ6IzkyNjcwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNTojNTIzODAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci02OiMzMDIxMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0xOiNmZmY5ZTU7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0yOiNmZmU1M2U7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0zOiM5YzhiMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy00OiM3ZDZmMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy01OiM0NjNkMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy02OiMyOTIzMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtMTojZjdmZmFjOy0tbW9uc3Rlci1jb2xvci1saW1lLTI6I2Q1ZjIwMDstLW1vbnN0ZXItY29sb3ItbGltZS0zOiM4MTkzMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNDojNjc3NjAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTU6IzM5NDEwMDstLW1vbnN0ZXItY29sb3ItbGltZS02OiMyMjI2MDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMTojZTVmZmMzOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTI6Izk4ZmIwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0zOiM1YzliMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNDojNDk3YzAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTU6IzI2NDUwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS02OiMxODI2MDA7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTE6I2UwZmZkOTstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMjojNzJmZjZjOy0tbW9uc3Rlci1jb2xvci1ncmVlbi0zOiMwMGEyMWY7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTQ6IzAwODIxNzstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNTojMDA0OTA4Oy0tbW9uc3Rlci1jb2xvci1ncmVlbi02OiMwNjI4MDA7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMTojZGNmZmU2Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTI6IzVkZmZhMjstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0zOiMwMGEwNWE7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNDojMDA4MTQ3Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTU6IzAwNDgyNTstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC02OiMwMDI4MTI7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMTojZGFmZmVmOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTI6IzQyZmZjNjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0zOiMwMDlmNzg7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNDojMDA3ZjVmOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTU6IzAwNDczNDstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS02OiMwMDI4MWI7LS1tb25zdGVyLWNvbG9yLXRlYWwtMTojZDdmZmY3Oy0tbW9uc3Rlci1jb2xvci10ZWFsLTI6IzAwZmZlNDstLW1vbnN0ZXItY29sb3ItdGVhbC0zOiMwMDllOGM7LS1tb25zdGVyLWNvbG9yLXRlYWwtNDojMDA3YzZlOy0tbW9uc3Rlci1jb2xvci10ZWFsLTU6IzAwNDQzYzstLW1vbnN0ZXItY29sb3ItdGVhbC02OiMwMDI3MjI7LS1tb25zdGVyLWNvbG9yLWN5YW4tMTojYzRmZmZlOy0tbW9uc3Rlci1jb2xvci1jeWFuLTI6IzAwZmFmYjstLW1vbnN0ZXItY29sb3ItY3lhbi0zOiMwMDk5OWE7LS1tb25zdGVyLWNvbG9yLWN5YW4tNDojMDA3YTdiOy0tbW9uc3Rlci1jb2xvci1jeWFuLTU6IzAwNDM0NDstLW1vbnN0ZXItY29sb3ItY3lhbi02OiMwMDI1MjU7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0xOiNkYWZhZmY7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0yOiM4ZGYwZmY7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0zOiMwMDk4YTk7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci00OiMwMDc5ODc7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci01OiMwMDQwNDg7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci02OiMwMDIyMjc7LS1tb25zdGVyLWNvbG9yLXNreS0xOiNlM2Y3ZmY7LS1tb25zdGVyLWNvbG9yLXNreS0yOiNhZWU5ZmY7LS1tb25zdGVyLWNvbG9yLXNreS0zOiMwMDk0YjQ7LS1tb25zdGVyLWNvbG9yLXNreS00OiMwMDc1OTA7LS1tb25zdGVyLWNvbG9yLXNreS01OiMwMDQwNGY7LS1tb25zdGVyLWNvbG9yLXNreS02OiMwMDFmMjg7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTE6I2U4ZjZmZjstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMjojYjllM2ZmOy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0zOiMwMDkyYzU7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTQ6IzAwNzQ5ZDstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNTojMDAzYzU0Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi02OiMwMDFkMmE7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTE6I2U4ZjJmZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtMjojYzZlMGZmOy0tbW9uc3Rlci1jb2xvci1henVyZS0zOiMwMDhmZGI7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTQ6IzAwNzFhZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtNTojMDAzYjVlOy0tbW9uc3Rlci1jb2xvci1henVyZS02OiMwMDFjMzA7LS1tb25zdGVyLWNvbG9yLWJsdWUtMTojZjBmNGZmOy0tbW9uc3Rlci1jb2xvci1ibHVlLTI6I2Q0ZTBmZjstLW1vbnN0ZXItY29sb3ItYmx1ZS0zOiMwMDg5ZmM7LS1tb25zdGVyLWNvbG9yLWJsdWUtNDojMDA2ZGNhOy0tbW9uc3Rlci1jb2xvci1ibHVlLTU6IzAwMzg2ZDstLW1vbnN0ZXItY29sb3ItYmx1ZS02OiMwMDFhMzk7LS1tb25zdGVyLWNvbG9yLWluZGlnby0xOiNmM2YzZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby0yOiNkZWRkZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby0zOiM2NTdlZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby00OiMwMDYxZmM7LS1tb25zdGVyLWNvbG9yLWluZGlnby01OiMwMDMyOGE7LS1tb25zdGVyLWNvbG9yLWluZGlnby02OiMwMDE2NDk7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0xOiNmN2YxZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0yOiNlOGRhZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0zOiM5YjcwZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC00OiM3OTRhZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC01OiMyZDBmYmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC02OiMwYjAwNzQ7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0xOiNmZGY0ZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0yOiNmN2Q5ZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0zOiNkMTUwZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS00OiNiMDFmZTM7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS01OiM2NjAwODc7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS02OiMzYTAwNGY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMTojZmZmM2ZjOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTI6I2ZmZDdmNjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0zOiNmOTExZTA7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNDojY2EwMGI2Oy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTU6Izc0MDA2ODstLW1vbnN0ZXItY29sb3ItbWFnZW50YS02OiM0NDAwM2M7LS1tb25zdGVyLWNvbG9yLXBpbmstMTojZmZmN2ZiOy0tbW9uc3Rlci1jb2xvci1waW5rLTI6I2ZmZGNlYzstLW1vbnN0ZXItY29sb3ItcGluay0zOiNmZjJmYjI7LS1tb25zdGVyLWNvbG9yLXBpbmstNDojZDIwMDhmOy0tbW9uc3Rlci1jb2xvci1waW5rLTU6Izc5MDA1MTstLW1vbnN0ZXItY29sb3ItcGluay02OiM0YjAwMzB9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci10aGVtZS1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTEpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMXtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0yKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTJ7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLWNvbG9yLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLXRoZW1lLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMyl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ze2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci10aGVtZS1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTQpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtNHtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtvdXRsaW5lOm5vbmV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXgsW2RhdGEtbW9uc3Rlci1yb2xlPW1lc3NhZ2Vde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fVtkYXRhLW1vbnN0ZXItcm9sZT1tZXNzYWdlXXtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtwYWRkaW5nOjhweDt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250ZW50XXtmbGV4LWdyb3c6MjtAbWl4aW5zIHBhcmFncmFwaH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWNsb3NlXXtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6MTZweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotMTBweDt0b3A6LTVweDt3aWR0aDoxNnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXkpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9Y2xvc2VdOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxMDAlfSBcbn1gLCAwKTtcbn0gY2F0Y2ggKGUpIHtcbiAgYWRkQXR0cmlidXRlVG9rZW4oZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKCdodG1sJyksIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUgKyBcIlwiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIyLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9QUkVGSVgsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRpbml0TWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE1lc3NhZ2VTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9tZXNzYWdlLm1qc1wiO1xuXG5leHBvcnQgeyBNZXNzYWdlIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRyb2xFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udHJvbEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlbW92ZUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJyZW1vdmVFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB0aW1lclN5bWJvbCA9IFN5bWJvbChcInRpbWVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBtb3VzZWVudGVyRXZlbnRIYW5kbGVyU3ltYm9sID0gU3ltYm9sKFwibW91c2VlbnRlckV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbW91c2VsZWF2ZUV2ZW50SGFuZGxlclN5bWJvbCA9IFN5bWJvbChcIm1vdXNlbGVhdmVFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlbW92ZUV2ZW50SGFuZGxlclN5bWJvbCA9IFN5bWJvbChcInJlbW92ZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgY3JlYXRlcyBhIG5vdGlmaWNhdGlvbiBlbGVtZW50IHdpdGggYSB2YXJpZXR5IG9mIG9wdGlvbnMuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9tZXNzYWdlLnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIGA8bW9uc3Rlci1ub3RpZnktbWVzc2FnZSAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUxcbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1ub3RpZnktbWVzc2FnZT48L21vbnN0ZXItbm90aWZ5LW1lc3NhZ2U+XG4gKiBgYGBcbiAqXG4gKiBvciB1c2luZyBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5Jyk7YCBtZXRob2QuXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0ICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9tZXNzYWdlLmpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5LW1lc3NhZ2UnKTtcbiAqIGBgYFxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vLi4vZXhhbXBsZS9jb21wb25lbnRzL25vdGlmeS9tZXNzYWdlLm1qc1xuICogQHN0YXJ0dW1sIG1lc3NhZ2UucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBNZXNzYWdlXG4gKiBAZW5kdW1sXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLk5vdGlmeVxuICogQHN1bW1hcnkgQSBoaWdobHkgY29uZmlndXJhYmxlIHNlbGVjdCBjb250cm9sXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLk5vdGlmeS5ldmVudDptb25zdGVyLXh4eHhcbiAqL1xuY2xhc3MgTWVzc2FnZSBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhlIGRlZmF1bHRzIGNhbiBiZSBzZXQgZWl0aGVyIGRpcmVjdGx5IGluIHRoZSBvYmplY3Qgb3IgdmlhIGFuIGF0dHJpYnV0ZSBpbiB0aGUgSFRNTCB0YWcuXG5cdCAqIFRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgaW4gdGhlIEhUTUwgdGFnIG11c3QgYmUgYSBKU09OIHN0cmluZy5cblx0ICpcblx0ICogYGBgXG5cdCAqIDxtb25zdGVyLW1lc3NhZ2UgZGF0YS1tb25zdGVyLW9wdGlvbnM9XCJ7fVwiPjwvbW9uc3Rlci1tZXNzYWdlPlxuXHQgKiBgYGBcblx0ICpcblx0ICogU2luY2UgMS4xOC4wIHRoZSBKU09OIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBEYXRhVVJJLlxuXHQgKlxuXHQgKiBgYGBcblx0ICogbmV3IE1vbnN0ZXIuVHlwZXMuRGF0YVVybChidG9hKEpTT04uc3RyaW5naWZ5KHtcblx0ICogICAgICAgIHRpbWVvdXQ6IDMwMDAsXG5cdCAqICAgICAgICBmZWF0dXJlczoge1xuXHQgKiAgICAgICAgICBjbGVhcjogdHJ1ZSxcblx0ICogICAgICAgICAgZGlzYXBwZWFyOiB0cnVlXG5cdCAqICAgICAgICB9XG5cdCAqICAgIH0pKSwnYXBwbGljYXRpb24vanNvbicsdHJ1ZSkudG9TdHJpbmcoKVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7aW50ZWdlcn0gdGltZW91dCB0aW1lIGluIG1pbGxpc2Vjb25kcyB1bnRpbCB0aGUgbWVzc2FnZSBzaG91bGQgYmUgcmVtb3ZlZC4gVGhlIHRpbWVvdXQgY2FuIGJlIGRpc2FibGVkIHZpYSB0aGUgZmVhdHVyZSBgZGlzYXBwZWFyYC5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMuY2xlYXIgc2hvdyBjbGVhciBidXR0b25cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5kaXNhcHBlYXIgYXV0b21hdGljYWxseSByZW1vdmUgdGhlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHRpbWVvdXRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICpcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0XHR7XG5cdFx0XHRcdHRpbWVvdXQ6IDYwMDAsXG5cdFx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdFx0Y2xlYXI6IHRydWUsXG5cdFx0XHRcdFx0ZGlzYXBwZWFyOiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb250ZW50OiBcIjxzbG90Pjwvc2xvdD5cIixcblx0XHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMuY2FsbCh0aGlzKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ob3RpZnkuTWVzc2FnZX1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50aGFuZGxlci5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1ub3RpZnktbWVzc2FnZVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbTWVzc2FnZVN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRbaW5pdE1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbaW5pdE1ldGhvZFN5bWJvbF0oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmRpc2FwcGVhclwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0c3RhcnRGYWRlb3V0LmNhbGwodGhpcyk7XG5cdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIHRoaXNbbW91c2VlbnRlckV2ZW50SGFuZGxlclN5bWJvbF0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcblx0XHRzdG9wRmFkZW91dC5jYWxsKHRoaXMpO1xuXG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMuZGlzYXBwZWFyXCIpID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdFwibW91c2VlbnRlclwiLFxuXHRcdFx0XHR0aGlzW21vdXNlZW50ZXJFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdFx0KTtcblx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XCJtb3VzZWVudGVyXCIsXG5cdFx0XHRcdHRoaXNbbW91c2VsZWF2ZUV2ZW50SGFuZGxlclN5bWJvbF0sXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0RmFkZW91dCgpIHtcblx0aWYgKCF0aGlzPy5bdGltZXJTeW1ib2xdKSB7XG5cdFx0dGhpc1t0aW1lclN5bWJvbF0gPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHJlbW92ZVNlbGYuY2FsbCh0aGlzKTtcblx0XHR9LCB0aGlzLmdldE9wdGlvbihcInRpbWVvdXRcIiwgMTAwMCkpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVNlbGYoKSB7XG5cdHN0b3BGYWRlb3V0KCk7XG5cdHRoaXMuY2xhc3NMaXN0LmFkZChcImZhZGVvdXRcIik7XG5cblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0dGhpcy5yZW1vdmUoKTtcblx0fSwgMjAwKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzdG9wRmFkZW91dCgpIHtcblx0aWYgKHRoaXM/Llt0aW1lclN5bWJvbF0pIHtcblx0XHRjbGVhclRpbWVvdXQodGhpc1t0aW1lclN5bWJvbF0pO1xuXHRcdHRoaXNbdGltZXJTeW1ib2xdID0gdW5kZWZpbmVkO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMoKSB7XG5cdGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuXHRjb25zdCB0aW1lb3V0ID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1BSRUZJWCArIFwidGltZW91dFwiKTtcblx0aWYgKGlzU3RyaW5nKHRpbWVvdXQpKSB7XG5cdFx0dHJ5IHtcblx0XHRcdG9wdGlvbnNbXCJ0aW1lb3V0XCJdID0gcGFyc2VJbnQodGltZW91dCwgMTApO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKFxuXHRcdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XHR0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFICsgXCIsIFwiICsgZS50b1N0cmluZygpKSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge01lc3NhZ2V9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbXCIgKyBBVFRSSUJVVEVfUk9MRSArIFwiPWNvbnRyb2xdXCIsXG5cdCk7XG5cdHRoaXNbcmVtb3ZlRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltcIiArIEFUVFJJQlVURV9ST0xFICsgXCI9cmVtb3ZlXVwiLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudGhhbmRsZXIoKSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1ttb3VzZWVudGVyRXZlbnRIYW5kbGVyU3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdGV2ZW50LFxuXHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcImNvbnRyb2xcIixcblx0XHQpO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKFxuXHRcdFx0XHRcIm1vdXNlZW50ZXJcIixcblx0XHRcdFx0dGhpc1ttb3VzZWVudGVyRXZlbnRIYW5kbGVyU3ltYm9sXSxcblx0XHRcdCk7XG5cdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsIHRoaXNbbW91c2VsZWF2ZUV2ZW50SGFuZGxlclN5bWJvbF0pO1xuXHRcdFx0c3RvcEZhZGVvdXQuY2FsbCh0aGlzKTtcblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHR0aGlzW21vdXNlbGVhdmVFdmVudEhhbmRsZXJTeW1ib2xdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdFwiY29udHJvbFwiLFxuXHRcdCk7XG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKFxuXHRcdFx0XHRcIm1vdXNlbGVhdmVcIixcblx0XHRcdFx0dGhpc1ttb3VzZWxlYXZlRXZlbnRIYW5kbGVyU3ltYm9sXSxcblx0XHRcdCk7XG5cdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIHRoaXNbbW91c2VlbnRlckV2ZW50SGFuZGxlclN5bWJvbF0pO1xuXHRcdFx0c3RhcnRGYWRlb3V0LmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1tyZW1vdmVFdmVudEhhbmRsZXJTeW1ib2xdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KGV2ZW50LCBBVFRSSUJVVEVfUk9MRSwgXCJyZW1vdmVcIik7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRyZW1vdmVTZWxmLmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmNsb3NlXCIpID09PSB0cnVlKSB7XG5cdFx0dGhpc1tyZW1vdmVFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XCJjbGlja1wiLFxuXHRcdFx0dGhpc1tyZW1vdmVFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdCk7XG5cdFx0dGhpc1tyZW1vdmVFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XCJ0b3VjaFwiLFxuXHRcdFx0dGhpc1tyZW1vdmVFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCIgY2xhc3M9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJtZXNzYWdlXCIgcGFydD1cIm1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1vcmllbnRhdGlvbiBwYXRoOm9yaWVudGF0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y29udGVudFwiIHBhcnQ9XCJjb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGVudFwiPlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwicmVtb3ZlXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpmZWF0dXJlcy5jbGVhciB8ID86OmhpZGRlbiBcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjbG9zZVwiIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoTWVzc2FnZSk7XG4iLCAiXG4vKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDI0LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7YWRkQXR0cmlidXRlVG9rZW59IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7QVRUUklCVVRFX0VSUk9STUVTU0FHRX0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7Tm90aWZ5U3R5bGVTaGVldH1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IE5vdGlmeVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuICBOb3RpZnlTdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuQGxheWVyIG5vdGlmeSB7IFxuLmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MDtib3JkZXItc2hhZG93Om5vbmV9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Ym9yZGVyOjA7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luOjA7bWF4LWhlaWdodDoxMDB2SDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3dpZHRoOjI1cmVtO3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXkpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXVtkYXRhLW1vbnN0ZXItb3JpZW50YXRpb24qPWxlZnRde2xlZnQ6MDtyaWdodDphdXRvfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXVtkYXRhLW1vbnN0ZXItb3JpZW50YXRpb24qPXJpZ2h0XXtsZWZ0OmF1dG87cmlnaHQ6MH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF1bZGF0YS1tb25zdGVyLW9yaWVudGF0aW9uKj1jZW50ZXJde2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdW2RhdGEtbW9uc3Rlci1vcmllbnRhdGlvbio9Ym90dG9tXXthbGlnbi1pdGVtczpmbGV4LWVuZDtib3R0b206MH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF1bZGF0YS1tb25zdGVyLW9yaWVudGF0aW9uKj10b3Bde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7dG9wOjB9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl17d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9bWVzc2FnZV17YmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94O2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLW1lc3NhZ2UtYm9yZGVyLWNvbG9yLHJnYmEoMCwwLDAsLjEpKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1ib3JkZXItcmFkaXVzLC4yNXJlbSk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1ib3JkZXItc3R5bGUsc29saWQpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLW1lc3NhZ2UtYm9yZGVyLXdpZHRoLDFweCk7Ym94LXNoYWRvdzowIC41cmVtIDFyZW0gcmdiYSgwLDAsMCwuMTUpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOi44NzVyZW07bWFyZ2luOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1tYXJnaW4tdG9wLDE1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1tYXJnaW4tcmlnaHQsNXB4KSB2YXIoLS1tb25zdGVyLW1lc3NhZ2UtbWFyZ2luLWJvdHRvbSwwKSB2YXIoLS1tb25zdGVyLW1lc3NhZ2UtbWFyZ2luLWxlZnQsMCk7bWF4LWhlaWdodDoyMDBweDttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzp2YXIoLS1tb25zdGVyLW1lc3NhZ2UtcGFkZGluZy10b3AsNXB4KSB2YXIoLS1tb25zdGVyLW1lc3NhZ2UtcGFkZGluZy1yaWdodCw1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1wYWRkaW5nLWJvdHRvbSw1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1wYWRkaW5nLWxlZnQsNXB4KTtwb2ludGVyLWV2ZW50czphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7LXdlYmtpdC11c2VyLXNlbGVjdDp0ZXh0Oy1tb3otdXNlci1zZWxlY3Q6dGV4dDt1c2VyLXNlbGVjdDp0ZXh0O3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPW1lc3NhZ2VdOmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH1bZGF0YS1tb25zdGVyLXJvbGU9bWVzc2FnZV0uZmFkZW91dHtib3JkZXI6MDttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21heC1oZWlnaHQ6MDtwYWRkaW5nLWJvdHRvbTowO3BhZGRpbmctdG9wOjA7dHJhbnNpdGlvbjphbGwgLjJzIGN1YmljLWJlemllcigxLC0uMDQsMCwxLjAzKX0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9jb21wb25lbnQtZm9ybVxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQVRUUklCVVRFX1JPTEUgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gXCIuL21lc3NhZ2UubWpzXCI7XG5pbXBvcnQgeyBOb3RpZnlTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9ub3RpZnkubWpzXCI7XG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gXCIuLi8uLi90eXBlcy9xdWV1ZS5tanNcIjtcbmltcG9ydCB7IGZpcmVDdXN0b21FdmVudCB9IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBOb3RpZnkgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250cm9sRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udGFpbmVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRhaW5lckVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHF1ZXVlU3ltYm9sID0gU3ltYm9sKFwicXVldWVcIik7XG5cbi8qKlxuICogVGhpcyBDdXN0b21Db250cm9sIGNyZWF0ZXMgYSBub3RpZmljYXRpb24gZWxlbWVudCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvbm90aWZ5LnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIGA8bW9uc3Rlci1ub3RpZnkgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItbm90aWZ5PjwvbW9uc3Rlci1ub3RpZnk+XG4gKiBgYGBcbiAqXG4gKiBvciB1c2luZyBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5Jyk7YCBtZXRob2QuXG4gKlxuICogYGBganNcbiAqIGltcG9ydCAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvbm90aWZ5LmpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5Jyk7XG4gKiBgYGBcbiAqXG4gKiAjIyBFdmVudHNcbiAqXG4gKiBUaGUgQ3VzdG9tRXZlbnQgaGFzIHRoZSBwcm9wZXJ0eSBbYGRldGFpbGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9DdXN0b21FdmVudC9kZXRhaWwpLlxuICpcbiAqIGBgYFxuICogbm9kZS5hZGRFdmVudExpc3RlbmVyKCdtb25zdGVyLW5vdGlmeS1tZXNzYWdlJywoZSk9PmNvbnNvbGUubG9nKGUuZGV0YWlsKSlcbiAqIGBgYFxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vLi4vZXhhbXBsZS9jb21wb25lbnRzL25vdGlmeS9ub3RpZnkubWpzXG4gKiBAc3RhcnR1bWwgbm90aWZ5LnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gTm90aWZ5XG4gKiBAZW5kdW1sXG4gKlxuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Ob3RpZnlcbiAqIEBzdW1tYXJ5IEEgaGlnaGx5IGNvbmZpZ3VyYWJsZSBzZWxlY3QgY29udHJvbFxuICovXG5jbGFzcyBOb3RpZnkgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzW3F1ZXVlU3ltYm9sXSA9IG5ldyBRdWV1ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBkZWZhdWx0cyBjYW4gYmUgc2V0IGVpdGhlciBkaXJlY3RseSBpbiB0aGUgb2JqZWN0IG9yIHZpYSBhbiBhdHRyaWJ1dGUgaW4gdGhlIEhUTUwgdGFnLlxuXHQgKiBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIGluIHRoZSBIVE1MIHRhZyBtdXN0IGJlIGEgSlNPTiBzdHJpbmcuXG5cdCAqXG5cdCAqIGBgYGh0bWxcblx0ICogPG1vbnN0ZXItbm90aWZ5IGRhdGEtbW9uc3Rlci1vcHRpb25zPVwie31cIj48L21vbnN0ZXItbm90aWZ5PlxuXHQgKiBgYGBcblx0ICpcblx0ICogU2luY2UgMS4xOC4wIHRoZSBKU09OIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBEYXRhVVJJLlxuXHQgKlxuXHQgKiBgYGBcblx0ICogbmV3IE1vbnN0ZXIuVHlwZXMuRGF0YVVybChidG9hKEpTT04uc3RyaW5naWZ5KHtcblx0ICogICAgICAgIG9yaWVudGF0aW9uOiAncmlnaHQgdG9wJ1xuXHQgKiAgICB9KSksJ2FwcGxpY2F0aW9uL2pzb24nLHRydWUpLnRvU3RyaW5nKClcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHtcblx0XHRcdFx0b3JpZW50YXRpb246IFwibGVmdCB0b3BcIixcblx0XHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMuY2FsbCh0aGlzKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge05vdGlmeX1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cblx0XHRpZiAodGhpc1tjb250YWluZXJFbGVtZW50U3ltYm9sXSkge1xuXHRcdFx0d2hpbGUgKHRoaXNbcXVldWVTeW1ib2xdLmlzRW1wdHkoKSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0dGhpcy5wdXNoKHRoaXNbcXVldWVTeW1ib2xdLnBvbGwoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLW5vdGlmeVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbTm90aWZ5U3R5bGVTaGVldF07XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtNb25zdGVyLkNvbXBvbmVudHMuTm90aWZ5Lk1hc3NhZ2V8U3RyaW5nfSBtZXNzYWdlXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ob3RpZnkuTm90aWZ5fVxuXHQgKi9cblx0cHVzaChtZXNzYWdlKSB7XG5cdFx0bGV0IG1lc3NhZ2VFbGVtZW50ID0gbWVzc2FnZTtcblx0XHRpZiAoIShtZXNzYWdlIGluc3RhbmNlb2YgTWVzc2FnZSkpIHtcblx0XHRcdGNvbnN0IHRleHQgPSB2YWxpZGF0ZVN0cmluZyhtZXNzYWdlKTtcblx0XHRcdG1lc3NhZ2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm1vbnN0ZXItbm90aWZ5LW1lc3NhZ2VcIik7XG5cdFx0XHRtZXNzYWdlRWxlbWVudC5zZXRPcHRpb24oXCJjb250ZW50XCIsIHRleHQpO1xuXHRcdH1cblxuXHRcdHZhbGlkYXRlSW5zdGFuY2UobWVzc2FnZUVsZW1lbnQsIE1lc3NhZ2UpO1xuXHRcdG1lc3NhZ2VFbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSwgXCJtZXNzYWdlXCIpO1xuXG5cdFx0Ly8gaWYgbm90IGNvbm5lY3RlZCwgYWRkIHRvIHF1ZXVlXG5cdFx0aWYgKCF0aGlzW2NvbnRhaW5lckVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0XHR0aGlzW3F1ZXVlU3ltYm9sXS5hZGQobWVzc2FnZUVsZW1lbnQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1ub3RpZnktbWVzc2FnZVwiLCB7XG5cdFx0XHRtZXNzYWdlRWxlbWVudCxcblx0XHR9KTtcblxuXHRcdHRoaXNbY29udGFpbmVyRWxlbWVudFN5bWJvbF0uYXBwZW5kQ2hpbGQobWVzc2FnZUVsZW1lbnQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBgYGBcbiAqIDxtb25zdGVyLXNlbGVjdCBkYXRhLW1vbnN0ZXItdXJsPVwiaHR0cHM6Ly9leGFtcGxlLmNvbS9cIj48L21vbnN0ZXItc2VsZWN0PlxuICogYGBgXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzKCkge1xuXHRjb25zdCBvcHRpb25zID0ge307XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltcIiArIEFUVFJJQlVURV9ST0xFICsgXCI9Y29udHJvbF1cIixcblx0KTtcblx0dGhpc1tjb250YWluZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW1wiICsgQVRUUklCVVRFX1JPTEUgKyBcIj1jb250YWluZXJdXCIsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiIGNsYXNzPVwiY2VudGVyXCJcbiAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1vcmllbnRhdGlvbiBwYXRoOm9yaWVudGF0aW9uXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KE5vdGlmeSk7XG4iLCAiXG4vKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDI0LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7YWRkQXR0cmlidXRlVG9rZW59IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7QVRUUklCVVRFX0VSUk9STUVTU0FHRX0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7SG9zdFN0eWxlU2hlZXR9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBIb3N0U3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG4gIEhvc3RTdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuQGxheWVyIGhvc3QgeyBcbi5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufTp3aGVyZShodG1sKXtsaW5lLWhlaWdodDoxLjE1Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tb3otdGV4dC1zaXplLWFkanVzdDoxMDAlO3RleHQtc2l6ZS1hZGp1c3Q6MTAwJX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUoYWJiclt0aXRsZV0pe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH06d2hlcmUoYixzdHJvbmcpe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoY29kZSxrYmQscHJlLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlfWJvZHksaHRtbHttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSA0MHB4KX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLXNoYWRvdzpub25lfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItZm9ybXthY2NlbnQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC13cmFwOm5vd3JhcDtwb3NpdGlvbjpyZWxhdGl2ZX0ubW9uc3Rlci1mb3JtIGxhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5OmdyaWR9Lm1vbnN0ZXItZm9ybSBsYWJlbDpoYXMoaW5wdXRbdHlwZT1yYWRpb10pe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0ubW9uc3Rlci1mb3JtIGxhYmVsOmhhcyhpbnB1dFt0eXBlPXJhZGlvXSkgaW5wdXR7bWFyZ2luLWxlZnQ6LjRyZW07bWFyZ2luLXJpZ2h0Oi40cmVtfS5tb25zdGVyLWZvcm0gbGFiZWw6aGFzKGlucHV0W3R5cGU9cmFkaW9dKX5sYWJlbDpoYXMoaW5wdXRbdHlwZT1yYWRpb10pe21hcmdpbi10b3A6LjJyZW19Lm1vbnN0ZXItZm9ybSBsYWJlbDpoYXMoaW5wdXRbdHlwZT1jaGVja2JveF0pe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0ubW9uc3Rlci1mb3JtIGxhYmVsOmhhcyhpbnB1dFt0eXBlPWNoZWNrYm94XSkgaW5wdXR7bWFyZ2luLWxlZnQ6LjRyZW07bWFyZ2luLXJpZ2h0Oi40cmVtfS5tb25zdGVyLWZvcm0gbGFiZWw6aGFzKGlucHV0W3R5cGU9Y2hlY2tib3hdKX5sYWJlbDpoYXMoaW5wdXRbdHlwZT1jaGVja2JveF0pe21hcmdpbi10b3A6LjJyZW19Lm1vbnN0ZXItZm9ybSBsYWJlbH5maWVsZHNldCwubW9uc3Rlci1mb3JtIGxhYmVsfmxhYmVse21hcmdpbi10b3A6MXJlbX0ubW9uc3Rlci1mb3JtIGJ1dHRvbiwubW9uc3Rlci1mb3JtIGlucHV0LC5tb25zdGVyLWZvcm0gc2VsZWN0LC5tb25zdGVyLWZvcm0gdGV4dGFyZWF7YWNjZW50LWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6MTAwJTttYXJnaW46MDtvdXRsaW5lOm5vbmU7cGFkZGluZzouNHJlbSAuNnJlbX0ubW9uc3Rlci1mb3JtIGJ1dHRvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItZm9ybSBvcHRpb246Y2hlY2tlZCwubW9uc3Rlci1mb3JtIG9wdGlvbjpmb2N1cywubW9uc3Rlci1mb3JtIG9wdGlvbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItZm9ybSBpbnB1dCwubW9uc3Rlci1mb3JtIHNlbGVjdCwubW9uc3Rlci1mb3JtIHRleHRhcmVhe2JvcmRlcjowO2JvcmRlci1ib3R0b20tcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLWJvdHRvbS1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JvcmRlci1ib3R0b206dGhpbiB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp0aGluO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItZm9ybSBidXR0b24sLm1vbnN0ZXItZm9ybSBpbnB1dDpub3QoW3R5cGU9cmFkaW9dKTpub3QoW3R5cGU9Y2hlY2tib3hdKSwubW9uc3Rlci1mb3JtIGxhYmVsLC5tb25zdGVyLWZvcm0gc2VsZWN0LC5tb25zdGVyLWZvcm0gdGV4dGFyZWF7d2lkdGg6MTAwJX0ubW9uc3Rlci1mb3JtIGxhYmVsIGlucHV0Om5vdChbdHlwZT1yYWRpb10pOm5vdChbdHlwZT1jaGVja2JveF0pLC5tb25zdGVyLWZvcm0gbGFiZWwgc2VsZWN0LC5tb25zdGVyLWZvcm0gbGFiZWwgdGV4dGFyZWEsLm1vbnN0ZXItZm9ybSBsYWJlbCtpbnB1dDpub3QoW3R5cGU9cmFkaW9dKTpub3QoW3R5cGU9Y2hlY2tib3hdKSwubW9uc3Rlci1mb3JtIGxhYmVsK3NlbGVjdCwubW9uc3Rlci1mb3JtIGxhYmVsK3RleHRhcmVhe21hcmdpbi10b3A6LjJyZW07d2lkdGg6MTAwJX0ubW9uc3Rlci1mb3JtIGZpZWxkc2V0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlcjoycHggc29saWQgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7bWFyZ2luOjA7b3V0bGluZTpub25lO3BhZGRpbmc6Mi41cmVtIDJyZW0gMnJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlfS5tb25zdGVyLWZvcm0gZmllbGRzZXQgbGVnZW5ke2ZvbnQtc2l6ZTouOHJlbTttYXgtd2lkdGg6OTUlO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4xcmVtIDJyZW0gLjJyZW0gLjVyZW07cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0ZXh0LWFsaWduOnJpZ2h0O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3RvcDowO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1mb3JtIGZpZWxkc2V0fmZpZWxkc2V0e21hcmdpbi10b3A6MXJlbX0ubW9uc3Rlci1mb3JtIGJ1dHRvbnttYXJnaW46LjJyZW0gMH0ubW9uc3Rlci1mb3JtIGJ1dHRvbjpmaXJzdC1vZi10eXBle21hcmdpbi10b3A6MXJlbX0ubW9uc3Rlci1mb3JtIGJ1dHRvbjpsYXN0LW9mLXR5cGV7bWFyZ2luLWJvdHRvbToxcmVtfS5tb25zdGVyLWZvcm0gaW5wdXQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOm5vbmV9Lm1vbnN0ZXItZm9ybSBidXR0b246Zm9jdXMsLm1vbnN0ZXItZm9ybSBpbnB1dDpmb2N1cywubW9uc3Rlci1mb3JtIHNlbGVjdDpmb2N1cywubW9uc3Rlci1mb3JtIHRleHRhcmVhOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KTtvdXRsaW5lLW9mZnNldDoycHh9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7Lm1vbnN0ZXItZm9ybSBidXR0b24sLm1vbnN0ZXItZm9ybSBpbnB1dCwubW9uc3Rlci1mb3JtIHNlbGVjdCwubW9uc3Rlci1mb3JtIHRleHRhcmVhe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWZvcm0gYnV0dG9uOmZvY3VzLC5tb25zdGVyLWZvcm0gaW5wdXQ6Zm9jdXMsLm1vbnN0ZXItZm9ybSBzZWxlY3Q6Zm9jdXMsLm1vbnN0ZXItZm9ybSB0ZXh0YXJlYTpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6MnB4fX0ubW9uc3Rlci1mb3JtIGJ1dHRvbjpob3ZlciwubW9uc3Rlci1mb3JtIGlucHV0OmhvdmVyOm5vdChbdHlwZT1yYWRpb10pOm5vdChbdHlwZT1jaGVja2JveF0pOm5vdChbdHlwZT1yYW5nZV0pLC5tb25zdGVyLWZvcm0gc2VsZWN0OmhvdmVyLC5tb25zdGVyLWZvcm0gdGV4dGFyZWE6aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fS5tb25zdGVyLWgxLGgxe2ZvbnQtc2l6ZTozcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxO21hcmdpbi1ib3R0b206MS4yNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfS5tb25zdGVyLWgzLGgze2ZvbnQtc2l6ZToycmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OmNhbGMoNHB4ICsgMmV4KTttYXJnaW4tYm90dG9tOjEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6Y2FsYyg0cHggKyAyZXgpO21hcmdpbi1ib3R0b206MS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFxcXCJRdWlja3NhbmRcXFwiLFxcXCJTZWdvZSBVSVxcXCIsXFxcIlJvYm90b1xcXCIsXFxcIk94eWdlblxcXCIsXFxcIlVidW50dVxcXCIsXFxcIkNhbnRhcmVsbFxcXCIsXFxcIkZpcmEgU2Fuc1xcXCIsXFxcIkRyb2lkIFNhbnNcXFwiLFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsQXJpYWwsc2Fucy1zZXJpZixcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCI7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTYpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTIpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xOiM4MzNhYjQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTI6I2ZkMWQxZDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMzojZmNiMDQ1Oy0tbW9uc3Rlci1ib3gtc2hhZG93LTE6bm9uZTstLW1vbnN0ZXItYm94LXNoYWRvdy0yOi0xcHggMXB4IDEwcHggMXB4IGhzbGEoMCwwJSw3NiUsLjYxKTstLW1vbnN0ZXItdGV4dC1zaGFkb3c6bm9uZTstLW1vbnN0ZXItYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci1ib3JkZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlOi00cHg7LS1tb25zdGVyLXotaW5kZXgtZGVmYXVsdDowOy0tbW9uc3Rlci16LWluZGV4LW91dGxpbmU6MTA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd246MjAwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duLW92ZXJsYXk6MjEwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreTozMDA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5LW92ZXJsYXk6MzEwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkOjQwMDstLW1vbnN0ZXItei1pbmRleC1maXhlZC1vdmVybGF5OjQxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcDo1MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3Atb3ZlcmxheTo1MTA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzOjYwMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXMtb3ZlcmxheTo2MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWw6NzAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXk6NzEwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXI6ODAwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXItb3ZlcmxheTo4MTA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcDo4MDA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcC1vdmVybGF5OjkxMDstLW1vbnN0ZXItc3BhY2UtMDowOy0tbW9uc3Rlci1zcGFjZS0xOjJweDstLW1vbnN0ZXItc3BhY2UtMjo0cHg7LS1tb25zdGVyLXNwYWNlLTM6NnB4Oy0tbW9uc3Rlci1zcGFjZS00OjEwcHg7LS1tb25zdGVyLXNwYWNlLTU6MTZweDstLW1vbnN0ZXItc3BhY2UtNjoyNnB4Oy0tbW9uc3Rlci1zcGFjZS03OjQycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC00OjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTc6NzY4cHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtOTo5OTJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0xMjoxMjAwcHh9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXthbGlnbi1jb250ZW50OnN0cmV0Y2g7Ym9yZGVyOjA7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDttYXJnaW46MDttaW4taGVpZ2h0OjEwMHZoO3BhZGRpbmc6MH1bZGF0YS1tb25zdGVyLXJvbGU9aGVhZGVyXXtoZWlnaHQ6NjRweDttYXJnaW46MCAwIDAgNjBweH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udGVudF0sW2RhdGEtbW9uc3Rlci1yb2xlPWZvb3Rlcl0sW2RhdGEtbW9uc3Rlci1yb2xlPWhlYWRlcl17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgcGFyc2VMb2NhbGUgfSBmcm9tIFwiLi4vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tIFwiLi4vcHJvdmlkZXIubWpzXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbnMgfSBmcm9tIFwiLi4vdHJhbnNsYXRpb25zLm1qc1wiO1xuXG5leHBvcnQgeyBFbWJlZCB9O1xuXG4vKipcbiAqIFRoZSBFbWJlZCBwcm92aWRlciByZXRyaWV2ZXMgYSBKU09OIGZpbGUgZnJvbSB0aGUgZ2l2ZW4gU2NyaXB0IFRhZy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uLy4uL2V4YW1wbGUvaTE4bi9wcm92aWRlcnMvZW1iZWQubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEzLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5JMThuLlByb3ZpZGVyc1xuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzMDY2fVxuICogQHR1dG9yaWFsIGkxOG4tbG9jYWxlLWFuZC1mb3JtYXR0ZXJcbiAqL1xuY2xhc3MgRW1iZWQgZXh0ZW5kcyBQcm92aWRlciB7XG5cdC8qKlxuXHQgKiBgYGBodG1sXG5cdCAqIDxzY3JpcHQgaWQ9XCJ0cmFuc2xhdGlvbnNcIiB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiPlxuXHQgKiB7XG5cdCAqICAgICBcImhlbGxvXCI6IFwiSGFsbG9cIlxuXHQgKiB9XG5cdCAqIDwvc2NyaXB0PlxuXHQgKiBgYGBcblx0ICpcblx0ICpcblx0ICogYGBgamF2YXNjcmlwdFxuXHQgKiBuZXcgRW1iZWQoJ3RyYW5zbGF0aW9ucycpXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fHN0cmluZ30gZWxlbWVudE9ySWRcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICovXG5cdGNvbnN0cnVjdG9yKGVsZW1lbnRPcklkLCBvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cblx0XHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb25zID0ge307XG5cdFx0fVxuXG5cdFx0aWYgKGVsZW1lbnRPcklkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogQHByb3BlcnR5IHtIVE1MRWxlbWVudHxzdHJpbmd9XG5cdFx0XHQgKi9cblx0XHRcdHRoaXMudHJhbnNsYXRlRWxlbWVudCA9IGVsZW1lbnRPcklkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvKipcblx0XHRcdCAqIEBwcm9wZXJ0eSB7SFRNTEVsZW1lbnR8c3RyaW5nfVxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLnRyYW5zbGF0ZUVsZW1lbnQgPSBnZXREb2N1bWVudCgpLmdldEVsZW1lbnRCeUlkKFxuXHRcdFx0XHR2YWxpZGF0ZVN0cmluZyhlbGVtZW50T3JJZCksXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHByb3BlcnR5IHtPYmplY3R9IG9wdGlvbnNcblx0XHQgKi9cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IGV4dGVuZChcblx0XHRcdHt9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0XHR0aGlzLmRlZmF1bHRzLFxuXHRcdFx0dmFsaWRhdGVPYmplY3Qob3B0aW9ucyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWZhdWx0c1xuXHQgKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0xvY2FsZXxzdHJpbmd9IGxvY2FsZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0Z2V0VHJhbnNsYXRpb25zKGxvY2FsZSkge1xuXHRcdGlmIChpc1N0cmluZyhsb2NhbGUpKSB7XG5cdFx0XHRsb2NhbGUgPSBwYXJzZUxvY2FsZShsb2NhbGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRpZiAodGhpcy50cmFuc2xhdGVFbGVtZW50ID09PSBudWxsKSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJUZXh0IG5vdCBmb3VuZFwiKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCEodGhpcy50cmFuc2xhdGVFbGVtZW50IGluc3RhbmNlb2YgSFRNTFNjcmlwdEVsZW1lbnQpKSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJFbGVtZW50IGlzIG5vdCBhIHNjcmlwdCB0YWdcIikpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnRyYW5zbGF0ZUVsZW1lbnQudHlwZSAhPT0gXCJhcHBsaWNhdGlvbi9qc29uXCIpIHtcblx0XHRcdFx0cmVqZWN0KFxuXHRcdFx0XHRcdG5ldyBFcnJvcihcIkVsZW1lbnQgaXMgbm90IGEgc2NyaXB0IHRhZyB3aXRoIHR5cGUgYXBwbGljYXRpb24vanNvblwiKSxcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgdHJhbnNsYXRpb25zID0gbnVsbDtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRyYW5zbGF0aW9ucyA9IEpTT04ucGFyc2UodGhpcy50cmFuc2xhdGVFbGVtZW50LmlubmVySFRNTC50cmltKCkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRyYW5zbGF0aW9ucyA9PT0gbnVsbCkge1xuXHRcdFx0XHRyZWplY3QobmV3IEVycm9yKFwiVHJhbnNsYXRpb25zIG5vdCBmb3VuZCBvciBpbnZhbGlkXCIpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB0ID0gbmV3IFRyYW5zbGF0aW9ucyhsb2NhbGUpO1xuXHRcdFx0dC5hc3NpZ25UcmFuc2xhdGlvbnModHJhbnNsYXRpb25zKTtcblxuXHRcdFx0cmVzb2x2ZSh0KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgdHJhbnNsYXRpb25zIGZvciB0aGUgY3VycmVudCBkb2N1bWVudC5cblx0ICpcblx0ICogYHNjcmlwdFtkYXRhLW1vbnN0ZXItcm9sZT10cmFuc2xhdGlvbnNdYCBpcyBzZWFyY2hlZCBmb3IgYW5kIHRoZSB0cmFuc2xhdGlvbnMgYXJlIGFzc2lnbmVkIHRvIHRoZSBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gZWxlbWVudFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxBd2FpdGVkPHVua25vd24+W10+fVxuXHQgKi9cblx0c3RhdGljIGFzc2lnblRyYW5zbGF0aW9uc1RvRWxlbWVudChlbGVtZW50KSB7XG5cdFx0Y29uc3QgZCA9IGdldERvY3VtZW50KCk7XG5cblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHRlbGVtZW50ID0gZC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBsaXN0ID0gZC5xdWVyeVNlbGVjdG9yQWxsKFwic2NyaXB0W2RhdGEtbW9uc3Rlci1yb2xlPXRyYW5zbGF0aW9uc11cIik7XG5cdFx0aWYgKGxpc3QgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHRcdH1cblxuXHRcdGNvbnN0IHByb21pc2VzID0gW107XG5cblx0XHRsaXN0LmZvckVhY2goKHRyYW5zbGF0aW9uRWxlbWVudCkgPT4ge1xuXHRcdFx0Y29uc3QgcCA9IG5ldyBFbWJlZCh0cmFuc2xhdGlvbkVsZW1lbnQsIHt9KTtcblx0XHRcdHByb21pc2VzLnB1c2gocC5hc3NpZ25Ub0VsZW1lbnQodW5kZWZpbmVkLCBlbGVtZW50KSk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBnZXREb2N1bWVudCwgZ2V0V2luZG93IH0gZnJvbSBcIi4vdXRpbC5tanNcIjtcblxuZXhwb3J0IHsgZG9tUmVhZHksIHdpbmRvd1JlYWR5IH07XG5cbi8qKlxuICogVGhpcyB2YXJpYWJsZSBpcyBhIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgYXMgc29vbiBhcyB0aGUgZG9tIGlzIGF2YWlsYWJsZS5cbiAqXG4gKiBUaGUgRE9NQ29udGVudExvYWRlZCBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSBvcmlnaW5hbCBIVE1MIGRvY3VtZW50IGlzIGZ1bGx5IGxvYWRlZCBhbmQgcGFyc2VkXG4gKiB3aXRob3V0IHdhaXRpbmcgZm9yIHN0eWxlc2hlZXRzLCBpbWFnZXMsIGFuZCBzdWJmcmFtZXMgdG8gZmluaXNoIGxvYWRpbmcuXG4gKlxuICogZG9jdW1lbnQucmVhZHlTdGF0ZSBjaGFuZ2VzIHRvIGludGVyYWN0aXZlXG4gKiB3aW5kb3cncyBET01Db250ZW50TG9hZGVkIGV2ZW50IGdldHMgZmlyZWRcbiAqIGRvY3VtZW50LnJlYWR5U3RhdGUgY2hhbmdlcyB0byBjb21wbGV0ZVxuICogd2luZG93J3MgbG9hZCBldmVudCBnZXRzIGZpcmVkIGxvYWRcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMxLjBcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHN1bW1hcnkgdmFyaWFibGUgdG8gY2hlY2sgaWYgZG9tIGlzIHJlYWR5XG4gKiBAdHlwZSB7UHJvbWlzZX1cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L0RPTUNvbnRlbnRMb2FkZWRfZXZlbnRcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L3JlYWR5U3RhdGVcbiAqL1xuY29uc3QgZG9tUmVhZHkgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0aWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwibG9hZGluZ1wiKSB7XG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgcmVzb2x2ZSk7XG5cdH0gZWxzZSB7XG5cdFx0cmVzb2x2ZSgpO1xuXHR9XG59KTtcblxuLyoqXG4gKiBUaGlzIHZhcmlhYmxlIGlzIGEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCBhcyBzb29uIGFzIHRoZSB3aW5kb3dzIGlzIGF2YWlsYWJsZS5cbiAqXG4gKiBUaGUgbG9hZCBldmVudCBmaXJlcyB3aGVuIHRoZSBlbnRpcmUgcGFnZSBpcyBsb2FkZWQsIGluY2x1ZGluZyBhbGwgZGVwZW5kZW50IHJlc291cmNlcyBzdWNoIGFzIHN0eWxlc2hlZXRzLFxuICogYXNzZXRzLCBhbmQgaW1hZ2VzLiBVbmxpa2UgRE9NQ29udGVudExvYWRlZCwgd2hpY2ggZmlyZXMgYXMgc29vbiBhcyB0aGUgRE9NIG9mIHRoZSBwYWdlIGlzIGxvYWRlZCxcbiAqIHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlIHJlc291cmNlcyB0byBmaW5pc2ggbG9hZGluZy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMxLjBcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHN1bW1hcnkgdmFyaWFibGUgdG8gY2hlY2sgaWYgd2luZG93IGlzIHJlYWR5XG4gKiBAdHlwZSB7UHJvbWlzZX1cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dpbmRvdy9sb2FkX2V2ZW50XG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudC9yZWFkeVN0YXRlXG4gKi9cbmNvbnN0IHdpbmRvd1JlYWR5ID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXHRjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coKTtcblxuXHRpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG5cdFx0cmVzb2x2ZSgpO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCByZXNvbHZlKTtcblx0fVxufSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBCYXNlV2l0aE9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZXdpdGhvcHRpb25zLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBTdGFjayB9IGZyb20gXCIuLi90eXBlcy9zdGFjay5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgRm9jdXNNYW5hZ2VyIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEtFWV9ET0NVTUVOVCA9IFwiZG9jdW1lbnRcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgS0VZX0NPTlRFWFQgPSBcImNvbnRleHRcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3Qgc3RhY2tTeW1ib2wgPSBTeW1ib2woXCJzdGFja1wiKTtcblxuLyoqXG4gKiBXaXRoIHRoZSBmb2N1cyBtYW5hZ2VyIHRoZSBmb2N1cyBjYW4gYmUgc3RvcmVkIGluIGEgZG9jdW1lbnQsIHJlY2FsbGVkIGFuZCBtb3ZlZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBsb2NhbGVcbiAqIEBzdW1tYXJ5IEhhbmRsZSB0aGUgZm9jdXNcbiAqL1xuY2xhc3MgRm9jdXNNYW5hZ2VyIGV4dGVuZHMgQmFzZVdpdGhPcHRpb25zIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fHVuZGVmaW5lZH0gb3B0aW9uc1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKG9wdGlvbnMpO1xuXHRcdHZhbGlkYXRlSW5zdGFuY2UodGhpcy5nZXRPcHRpb24oS0VZX0RPQ1VNRU5UKSwgSFRNTERvY3VtZW50KTtcblxuXHRcdHRoaXNbc3RhY2tTeW1ib2xdID0gbmV3IFN0YWNrKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vZm9jdXNtYW5hZ2VyXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7SFRNTERvY3VtZW50fSBkb2N1bWVudCB0aGUgZG9jdW1lbnQgb2JqZWN0IGludG8gd2hpY2ggdGhlIG5vZGUgaXMgdG8gYmUgYXBwZW5kZWRcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0W0tFWV9ET0NVTUVOVF06IGdldEdsb2JhbE9iamVjdChcImRvY3VtZW50XCIpLFxuXHRcdFx0W0tFWV9DT05URVhUXTogdW5kZWZpbmVkLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbWVtYmVycyB0aGUgY3VycmVudCBmb2N1cyBvbiBhIHN0YWNrLlxuXHQgKiBTZXZlcmFsIGZvY3VzIGNhbiBiZSBzdG9yZWQuXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkZvY3VzTWFuYWdlcn1cblx0ICovXG5cdHN0b3JlRm9jdXMoKSB7XG5cdFx0Y29uc3QgYWN0aXZlID0gdGhpcy5nZXRBY3RpdmUoKTtcblx0XHRpZiAoYWN0aXZlIGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdFx0dGhpc1tzdGFja1N5bWJvbF0ucHVzaChhY3RpdmUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbGFzdCBmb2N1cyBvbiB0aGUgc3RhY2sgaXMgc2V0IGFnYWluXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkZvY3VzTWFuYWdlcn1cblx0ICovXG5cdHJlc3RvcmVGb2N1cygpIHtcblx0XHRjb25zdCBsYXN0ID0gdGhpc1tzdGFja1N5bWJvbF0ucG9wKCk7XG5cdFx0aWYgKGxhc3QgaW5zdGFuY2VvZiBOb2RlKSB7XG5cdFx0XHR0aGlzLmZvY3VzKGxhc3QpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IHByZXZlbnRTY3JvbGxcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2Zcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uRm9jdXNNYW5hZ2VyfVxuXHQgKi9cblx0Zm9jdXMoZWxlbWVudCwgcHJldmVudFNjcm9sbCkge1xuXHRcdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgTm9kZSk7XG5cblx0XHRlbGVtZW50LmZvY3VzKHtcblx0XHRcdHByZXZlbnRTY3JvbGw6IHByZXZlbnRTY3JvbGwgPz8gZmFsc2UsXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtFbGVtZW50fVxuXHQgKi9cblx0Z2V0QWN0aXZlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihLRVlfRE9DVU1FTlQpLmFjdGl2ZUVsZW1lbnQ7XG5cdH1cblxuXHQvKipcblx0ICogU2VsZWN0IGFsbCBlbGVtZW50cyB0aGF0IGNhbiBiZSBmb2N1c2VkXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gcXVlcnlcblx0ICogQHJldHVybiB7YXJyYXl9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG5cdCAqL1xuXHRnZXRGb2N1c2FibGUocXVlcnkpIHtcblx0XHRsZXQgY29udGV4dEVsZW1lbnQgPSB0aGlzLmdldE9wdGlvbihLRVlfQ09OVEVYVCk7XG5cdFx0aWYgKGNvbnRleHRFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnRleHRFbGVtZW50ID0gdGhpcy5nZXRPcHRpb24oS0VZX0RPQ1VNRU5UKTtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZUluc3RhbmNlKGNvbnRleHRFbGVtZW50LCBOb2RlKTtcblxuXHRcdGlmIChxdWVyeSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyhxdWVyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtcblx0XHRcdC4uLmNvbnRleHRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0XHRcdCdkZXRhaWxzLCBidXR0b24sIGlucHV0LCBbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSksIHNlbGVjdCwgdGV4dGFyZWEsIGFbaHJlZl0sIGJvZHknLFxuXHRcdFx0KSxcblx0XHRdLmZpbHRlcigoZWxlbWVudCkgPT4ge1xuXHRcdFx0aWYgKHF1ZXJ5ICE9PSB1bmRlZmluZWQgJiYgIWVsZW1lbnQubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0aWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIikgPT09IFwidHJ1ZVwiKSByZXR1cm4gZmFsc2U7XG5cblx0XHRcdGNvbnN0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdFx0aWYgKHJlY3Qud2lkdGggPT09IDApIHJldHVybiBmYWxzZTtcblx0XHRcdGlmIChyZWN0LmhlaWdodCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnlcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uRm9jdXNNYW5hZ2VyfVxuXHQgKi9cblx0Zm9jdXNOZXh0KHF1ZXJ5KSB7XG5cdFx0Y29uc3QgY3VycmVudCA9IHRoaXMuZ2V0QWN0aXZlKCk7XG5cdFx0Y29uc3QgZm9jdXNhYmxlID0gdGhpcy5nZXRGb2N1c2FibGUocXVlcnkpO1xuXG5cdFx0aWYgKCFpc0FycmF5KGZvY3VzYWJsZSkgfHwgZm9jdXNhYmxlLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKGN1cnJlbnQgaW5zdGFuY2VvZiBOb2RlKSB7XG5cdFx0XHRjb25zdCBpbmRleCA9IGZvY3VzYWJsZS5pbmRleE9mKGN1cnJlbnQpO1xuXG5cdFx0XHRpZiAoaW5kZXggPiAtMSkge1xuXHRcdFx0XHR0aGlzLmZvY3VzKGZvY3VzYWJsZVtpbmRleCArIDFdIHx8IGZvY3VzYWJsZVswXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmZvY3VzKGZvY3VzYWJsZVswXSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZm9jdXMoZm9jdXNhYmxlWzBdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnlcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uRm9jdXNNYW5hZ2VyfVxuXHQgKi9cblx0Zm9jdXNQcmV2KHF1ZXJ5KSB7XG5cdFx0Y29uc3QgY3VycmVudCA9IHRoaXMuZ2V0QWN0aXZlKCk7XG5cdFx0Y29uc3QgZm9jdXNhYmxlID0gdGhpcy5nZXRGb2N1c2FibGUocXVlcnkpO1xuXG5cdFx0aWYgKCFpc0FycmF5KGZvY3VzYWJsZSkgfHwgZm9jdXNhYmxlLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKGN1cnJlbnQgaW5zdGFuY2VvZiBOb2RlKSB7XG5cdFx0XHRjb25zdCBpbmRleCA9IGZvY3VzYWJsZS5pbmRleE9mKGN1cnJlbnQpO1xuXG5cdFx0XHRpZiAoaW5kZXggPiAtMSkge1xuXHRcdFx0XHR0aGlzLmZvY3VzKGZvY3VzYWJsZVtpbmRleCAtIDFdIHx8IGZvY3VzYWJsZVtmb2N1c2FibGUubGVuZ3RoIC0gMV0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5mb2N1cyhmb2N1c2FibGVbZm9jdXNhYmxlLmxlbmd0aCAtIDFdKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mb2N1cyhmb2N1c2FibGVbZm9jdXNhYmxlLmxlbmd0aCAtIDFdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHsgcGFyc2VEYXRhVVJMIH0gZnJvbSBcIi4vZGF0YXVybC5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tIFwiLi9pcy5tanNcIjtcblxuZXhwb3J0IHsgZXF1aXBXaXRoSW50ZXJuYWwgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgcHJvcGVydHlOYW1lID0gXCJpbnRlcm5hbERlZmF1bHRzXCI7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBleHRlbmRzIHRoZSBnaXZlbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIG1ldGhvZHM6XG4gKlxuICogLSBhdHRhY2hJbnRlcm5hbE9ic2VydmVyXG4gKiAtIGRldGFjaEludGVybmFsT2JzZXJ2ZXJcbiAqIC0gY29udGFpbnNJbnRlcm5hbE9ic2VydmVyXG4gKiAtIHNldEludGVybmFsXG4gKiAtIHNldEludGVybmFsc1xuICogLSBnZXRJbnRlcm5hbFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuMTUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKi9cbmZ1bmN0aW9uIGVxdWlwV2l0aEludGVybmFsKCkge1xuXHR2YWxpZGF0ZU9iamVjdCh0aGlzKTtcblxuXHRpZiAoIWhhc0dldHRlcih0aGlzLCBwcm9wZXJ0eU5hbWUpKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5TmFtZSwge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB7fTtcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHRjb25zdCBkZWZhdWx0cyA9IGV4dGVuZCh7fSwgdGhpc1twcm9wZXJ0eU5hbWVdIHx8IHt9KTtcblx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSBuZXcgUHJveHlPYnNlcnZlcihkZWZhdWx0cyk7XG5cblx0LyoqXG5cdCAqIEF0dGFjaCBhIG5ldyBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJucyB7UHJveHlPYnNlcnZlcn1cblx0ICovXG5cdHRoaXNbXCJhdHRhY2hJbnRlcm5hbE9ic2VydmVyXCJdID0gKG9ic2VydmVyKSA9PiB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uYXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBEZXRhY2ggYSBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJucyB7UHJveHlPYnNlcnZlcn1cblx0ICovXG5cdHRoaXNbXCJkZXRhY2hJbnRlcm5hbE9ic2VydmVyXCJdID0gKG9ic2VydmVyKSA9PiB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiBhIG9ic2VydmVyIGlzIGF0dGFjaGVkXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0dGhpc1tcImNvbnRhaW5zSW50ZXJuYWxPYnNlcnZlclwiXSA9IChvYnNlcnZlcikgPT4ge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5jb250YWluc09ic2VydmVyKG9ic2VydmVyKTtcblx0fTtcblxuXHQvKipcblx0ICogU2V0IGFuIGludGVybmFsIHZhbHVlLCBuZXN0ZWQgaW50ZXJuYWxzIGNhbiBiZSBzcGVjaWZpZWQgYnkgcGF0aCBgYS5iLmNgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7RGF0YXNvdXJjZX1cblx0ICovXG5cdHRoaXNbXCJzZXRJbnRlcm5hbFwiXSA9IChwYXRoLCB2YWx1ZSkgPT4ge1xuXHRcdG5ldyBQYXRoZmluZGVyKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKSkuc2V0VmlhKHBhdGgsIHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKipcblx0ICogc2V0IG11bHRpcGxlIGludGVybmFscyBhdCBvbmNlXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gb3B0aW9uc1xuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9wdGlvbnMgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gZGVmaW5pdGlvblxuXHQgKi9cblx0dGhpc1tcInNldEludGVybmFsc1wiXSA9IChvcHRpb25zKSA9PiB7XG5cdFx0aWYgKGlzU3RyaW5nKG9wdGlvbnMpKSB7XG5cdFx0XHRvcHRpb25zID0gcGFyc2VPcHRpb25zSlNPTihvcHRpb25zKTtcblx0XHR9XG5cblx0XHRleHRlbmQodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLCBkZWZhdWx0cywgb3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0LyoqXG5cdCAqIG5lc3RlZCBpbnRlcm5hbHMgY2FuIGJlIHNwZWNpZmllZCBieSBwYXRoIGBhLmIuY2Bcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcblx0ICogQHBhcmFtIHsqfSBkZWZhdWx0VmFsdWVcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHRoaXNbXCJnZXRJbnRlcm5hbFwiXSA9IChwYXRoLCBkZWZhdWx0VmFsdWUpID0+IHtcblx0XHRsZXQgdmFsdWU7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFsdWUgPSBuZXcgUGF0aGZpbmRlcih0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpKS5nZXRWaWEoXG5cdFx0XHRcdHBhdGgsXG5cdFx0XHQpO1xuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBvYmpcbiAqIEBwYXJhbSBwcm9wXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBoYXNHZXR0ZXIob2JqLCBwcm9wKSB7XG5cdHdoaWxlIChpc09iamVjdChvYmopKSB7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wKT8uW1wiZ2V0XCJdKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0b2JqID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBkYXRhXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlT3B0aW9uc0pTT04oZGF0YSkge1xuXHRsZXQgb2JqID0ge307XG5cblx0aWYgKCFpc1N0cmluZyhkYXRhKSkge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvLyB0aGUgY29uZmlndXJhdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgZGF0YSB1cmwuXG5cdHRyeSB7XG5cdFx0Y29uc3QgZGF0YVVybCA9IHBhcnNlRGF0YVVSTChkYXRhKTtcblx0XHRkYXRhID0gZGF0YVVybC5jb250ZW50O1xuXHR9IGNhdGNoIChlKSB7fVxuXG5cdHRyeSB7XG5cdFx0b2JqID0gSlNPTi5wYXJzZShkYXRhKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHRocm93IGU7XG5cdH1cblxuXHRyZXR1cm4gdmFsaWRhdGVPYmplY3Qob2JqKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3RhdGVTeW1ib2wsIGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IEJhc2VXaXRoT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgSUQgfSBmcm9tIFwiLi4vdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0NMQVNTLFxuXHRBVFRSSUJVVEVfSUQsXG5cdEFUVFJJQlVURV9USVRMRSxcbn0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBSZXNvdXJjZSwgS0VZX0RPQ1VNRU5ULCBLRVlfUVVFUlksIHJlZmVyZW5jZVN5bWJvbCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBLRVlfRE9DVU1FTlQgPSBcImRvY3VtZW50XCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEtFWV9RVUVSWSA9IFwicXVlcnlcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgS0VZX1RJTUVPVVQgPSBcInRpbWVvdXRcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVmZXJlbmNlU3ltYm9sID0gU3ltYm9sKFwicmVmZXJlbmNlXCIpO1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGFsbCByZXNvdXJjZXMgdG8gYmUgbG9hZGVkLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHN1bW1hcnkgQSBSZXNvdXJjZSBjbGFzc1xuICovXG5jbGFzcyBSZXNvdXJjZSBleHRlbmRzIEJhc2VXaXRoT3B0aW9ucyB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdHx1bmRlZmluZWR9IG9wdGlvbnNcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRzdXBlcihvcHRpb25zKTtcblxuXHRcdGxldCB1cmkgPSB0aGlzLmdldE9wdGlvbih0aGlzLmNvbnN0cnVjdG9yLmdldFVSTEF0dHJpYnV0ZSgpKTtcblxuXHRcdGlmICh1cmkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBzb3VyY2VcIik7XG5cdFx0fSBlbHNlIGlmICh1cmkgaW5zdGFuY2VvZiBVUkwpIHtcblx0XHRcdHVyaSA9IHVyaS50b1N0cmluZygpO1xuXHRcdH0gZWxzZSBpZiAoIWlzU3RyaW5nKHVyaSkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIHVybCB0eXBlXCIpO1xuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW3RoaXMuY29uc3RydWN0b3IuZ2V0VVJMQXR0cmlidXRlKCldID0gdXJpO1xuXHRcdHRoaXNbaW50ZXJuYWxTdGF0ZVN5bWJvbF0gPSBuZXcgUHJveHlPYnNlcnZlcih7XG5cdFx0XHRsb2FkZWQ6IGZhbHNlLFxuXHRcdFx0ZXJyb3I6IHVuZGVmaW5lZCxcblx0XHR9KTtcblxuXHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXSA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aXNDb25uZWN0ZWQoKSB7XG5cdFx0aWYgKHRoaXNbcmVmZXJlbmNlU3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRyZXR1cm4gdGhpc1tyZWZlcmVuY2VTeW1ib2xdLmlzQ29ubmVjdGVkO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBvdmVycmlkZGVuIGJ5IHRoZSBzcGVjaWFsIGNsYXNzZXMgYW5kIGNyZWF0ZXMgdGhlIERPTSBvYmplY3QuXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGFsc28gY2FsbGVkIGltcGxpY2l0bHksIGlmIG5vdCB5ZXQgZG9uZSBleHBsaWNpdGx5LCBieSBjYWxsaW5nIGBjb25uZWN0KClgLlxuXHQgKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXNcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2V9XG5cdCAqL1xuXHRjcmVhdGUoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXNcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgYXBwZW5kcyB0aGUgSFRNTEVsZW1lbnQgdG8gdGhlIHNwZWNpZmllZCBkb2N1bWVudC5cblx0ICogSWYgdGhlIGVsZW1lbnQgaGFzIG5vdCB5ZXQgYmVlbiBjcmVhdGVkLCBgY3JlYXRlKClgIGlzIGNhbGxlZCBpbXBsaWNpdGx5LlxuXHQgKlxuXHQgKiB0aHJvd3Mge0Vycm9yfSB0YXJnZXQgbm90IGZvdW5kXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlfVxuXHQgKi9cblx0Y29ubmVjdCgpIHtcblx0XHRpZiAoISh0aGlzW3JlZmVyZW5jZVN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRcdHRoaXMuY3JlYXRlKCk7XG5cdFx0fVxuXG5cdFx0YXBwZW5kVG9Eb2N1bWVudC5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7RG9jdW1lbnR9IGRvY3VtZW50IHRoZSBkb2N1bWVudCBvYmplY3QgaW50byB3aGljaCB0aGUgbm9kZSBpcyB0byBiZSBhcHBlbmRlZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gc3JjL2hyZWYgdXJsIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJlc291cmNlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBxdWVyeSBkZWZpbmVzIHRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgcmVzb3VyY2UgaXMgdG8gYmUgaG9va2VkIGludG8gdGhlIGRvbS5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGlkIGVsZW1lbnQgYXR0cmlidXRlIGlkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0aXRsZSBlbGVtZW50IGF0dHJpYnV0ZSB0aXRsZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY2xhc3MgZWxlbWVudCBhdHRyaWJ1dGUgY2xhc3Ncblx0ICogQHByb3BlcnR5IHtpbnR9IHRpbWVvdXQgdGltZW91dFxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRbdGhpcy5jb25zdHJ1Y3Rvci5nZXRVUkxBdHRyaWJ1dGUoKV06IHVuZGVmaW5lZCxcblx0XHRcdFtLRVlfRE9DVU1FTlRdOiBnZXRHbG9iYWxPYmplY3QoXCJkb2N1bWVudFwiKSxcblx0XHRcdFtLRVlfUVVFUlldOiBcImhlYWRcIixcblx0XHRcdFtLRVlfVElNRU9VVF06IDEwMDAwLFxuXHRcdFx0W0FUVFJJQlVURV9JRF06IG5ldyBJRChcInJlc291cmNlXCIpLnRvU3RyaW5nKCksXG5cdFx0XHRbQVRUUklCVVRFX0NMQVNTXTogdW5kZWZpbmVkLFxuXHRcdFx0W0FUVFJJQlVURV9USVRMRV06IHVuZGVmaW5lZCxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaXRoIGBhdmFpbGFibGUoKWAgeW91IGNhbiBjaGVjayBpZiBhIHJlc291cmNlIGlzIGF2YWlsYWJsZS5cblx0ICogVGhpcyBpcyB0aGUgY2FzZSB3aGVuIHRoZSB0YWcgaXMgaW5jbHVkZWQgYW5kIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQuXG5cdCAqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRhdmFpbGFibGUoKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0aWYgKCEoc2VsZltyZWZlcmVuY2VTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJubyBlbGVtZW50XCIpO1xuXHRcdH1cblxuXHRcdGlmICghc2VsZi5pc0Nvbm5lY3RlZCgpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJlbGVtZW50IG5vdCBjb25uZWN0ZWRcIik7XG5cdFx0fVxuXG5cdFx0aWYgKHNlbGZbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uZ2V0U3ViamVjdCgpW1wibG9hZGVkXCJdID09PSB0cnVlKSB7XG5cdFx0XHRpZiAoc2VsZltpbnRlcm5hbFN0YXRlU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJlcnJvclwiXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChzZWxmW2ludGVybmFsU3RhdGVTeW1ib2xdLmdldFN1YmplY3QoKVtcImVycm9yXCJdKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHJlamVjdChcInRpbWVvdXRcIik7XG5cdFx0XHR9LCBzZWxmLmdldE9wdGlvbihcInRpbWVvdXRcIikpO1xuXG5cdFx0XHRjb25zdCBvYnNlcnZlciA9IG5ldyBPYnNlcnZlcigoKSA9PiB7XG5cdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0c2VsZltpbnRlcm5hbFN0YXRlU3ltYm9sXS5kZXRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRzZWxmW2ludGVybmFsU3RhdGVTeW1ib2xdLmF0dGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VVJMQXR0cmlidXRlKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL3Jlc291cmNlXCIpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKiB0aHJvd3Mge0Vycm9yfSB0YXJnZXQgbm90IGZvdW5kXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZFRvRG9jdW1lbnQoKSB7XG5cdGNvbnN0IHRhcmdldE5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZ2V0T3B0aW9uKEtFWV9RVUVSWSwgXCJoZWFkXCIpKTtcblx0aWYgKCEodGFyZ2V0Tm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRhcmdldCBub3QgZm91bmRcIik7XG5cdH1cblxuXHRhZGRFdmVudHMuY2FsbCh0aGlzKTtcblx0dGFyZ2V0Tm9kZS5hcHBlbmRDaGlsZCh0aGlzW3JlZmVyZW5jZVN5bWJvbF0pO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHthZGRFdmVudHN9XG4gKi9cbmZ1bmN0aW9uIGFkZEV2ZW50cygpIHtcblx0Y29uc3Qgb25FcnJvciA9ICgpID0+IHtcblx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIG9uRXJyb3IpO1xuXHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXS5yZW1vdmVFdmVudExpc3RlbmVyKFwibG9hZFwiLCBvbkxvYWQpO1xuXG5cdFx0dGhpc1tpbnRlcm5hbFN0YXRlU3ltYm9sXS5zZXRTdWJqZWN0KHtcblx0XHRcdGxvYWRlZDogdHJ1ZSxcblx0XHRcdGVycm9yOiBgJHtcblx0XHRcdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdW3RoaXMuY29uc3RydWN0b3IuZ2V0VVJMQXR0cmlidXRlKCldXG5cdFx0XHR9IGlzIG5vdCBhdmFpbGFibGVgLFxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuO1xuXHR9O1xuXG5cdGNvbnN0IG9uTG9hZCA9ICgpID0+IHtcblx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIG9uRXJyb3IpO1xuXHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXS5yZW1vdmVFdmVudExpc3RlbmVyKFwibG9hZFwiLCBvbkxvYWQpO1xuXHRcdHRoaXNbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uZ2V0U3ViamVjdCgpW1wibG9hZGVkXCJdID0gdHJ1ZTtcblx0XHRyZXR1cm47XG5cdH07XG5cblx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIG9uTG9hZCwgZmFsc2UpO1xuXHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIG9uRXJyb3IsIGZhbHNlKTtcblxuXHRyZXR1cm4gdGhpcztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3RhdGVTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uLy4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0NMQVNTLFxuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfSUQsXG5cdEFUVFJJQlVURV9TUkMsXG5cdEFUVFJJQlVURV9USVRMRSxcblx0QVRUUklCVVRFX1RZUEUsXG5cdFRBR19TQ1JJUFQsXG59IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRLRVlfRE9DVU1FTlQsXG5cdEtFWV9RVUVSWSxcblx0cmVmZXJlbmNlU3ltYm9sLFxuXHRSZXNvdXJjZSxcbn0gZnJvbSBcIi4uL3Jlc291cmNlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgRGF0YSB9O1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdXNlZCBieSB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBlbWJlZCBkYXRhLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTS5SZXNvdXJjZVxuICogQHN1bW1hcnkgQSBEYXRhIFJlc291cmNlIGNsYXNzXG4gKi9cbmNsYXNzIERhdGEgZXh0ZW5kcyBSZXNvdXJjZSB7XG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbW9kZT1jb3JzIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9mZXRjaFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY3JlZGVudGlhbHM9c2FtZS1vcmlnaW4gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL2ZldGNoXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlPWFwcGxpY2F0aW9uL2pzb24ge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci10eXBlfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRtb2RlOiBcImNvcnNcIixcblx0XHRcdGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHR0eXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZS5EYXRhfVxuXHQgKi9cblx0Y3JlYXRlKCkge1xuXHRcdGNyZWF0ZUVsZW1lbnQuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIHRoZSBIVE1MRWxlbWVudCB0byB0aGUgc3BlY2lmaWVkIGRvY3VtZW50XG5cdCAqXG5cdCAqIHRocm93cyB7RXJyb3J9IHRhcmdldCBub3QgZm91bmRcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2V9XG5cdCAqL1xuXHRjb25uZWN0KCkge1xuXHRcdGlmICghKHRoaXNbcmVmZXJlbmNlU3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0dGhpcy5jcmVhdGUoKTtcblx0XHR9XG5cblx0XHRhcHBlbmRUb0RvY3VtZW50LmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vcmVzb3VyY2UvZGF0YVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VVJMQXR0cmlidXRlKCkge1xuXHRcdHJldHVybiBBVFRSSUJVVEVfU1JDO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlLkRhdGF9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoKSB7XG5cdGNvbnN0IGRvY3VtZW50ID0gdGhpcy5nZXRPcHRpb24oS0VZX0RPQ1VNRU5UKTtcblx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChUQUdfU0NSSVBUKTtcblxuXHRmb3IgKGNvbnN0IGtleSBvZiBbXG5cdFx0QVRUUklCVVRFX1RZUEUsXG5cdFx0QVRUUklCVVRFX0lELFxuXHRcdEFUVFJJQlVURV9DTEFTUyxcblx0XHRBVFRSSUJVVEVfVElUTEUsXG5cdF0pIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oa2V5KSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF1ba2V5XSA9IHRoaXMuZ2V0T3B0aW9uKGtleSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKiB0aHJvd3Mge0Vycm9yfSB0YXJnZXQgbm90IGZvdW5kXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZFRvRG9jdW1lbnQoKSB7XG5cdGNvbnN0IHRhcmdldE5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZ2V0T3B0aW9uKEtFWV9RVUVSWSwgXCJoZWFkXCIpKTtcblx0aWYgKCEodGFyZ2V0Tm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRhcmdldCBub3QgZm91bmRcIik7XG5cdH1cblxuXHR0YXJnZXROb2RlLmFwcGVuZENoaWxkKHRoaXNbcmVmZXJlbmNlU3ltYm9sXSk7XG5cblx0Z2V0R2xvYmFsRnVuY3Rpb24oXCJmZXRjaFwiKSh0aGlzLmdldE9wdGlvbihBVFRSSUJVVEVfU1JDKSwge1xuXHRcdG1ldGhvZDogXCJHRVRcIiwgLy8gKkdFVCwgUE9TVCwgUFVULCBERUxFVEUsIGV0Yy5cblx0XHRtb2RlOiB0aGlzLmdldE9wdGlvbihcIm1vZGVcIiwgXCJjb3JzXCIpLCAvLyBuby1jb3JzLCAqY29ycywgc2FtZS1vcmlnaW5cblx0XHRjYWNoZTogXCJuby1jYWNoZVwiLCAvLyAqZGVmYXVsdCwgbm8tY2FjaGUsIHJlbG9hZCwgZm9yY2UtY2FjaGUsIG9ubHktaWYtY2FjaGVkXG5cdFx0Y3JlZGVudGlhbHM6IHRoaXMuZ2V0T3B0aW9uKFwiY3JlZGVudGlhbHNcIiwgXCJzYW1lLW9yaWdpblwiKSwgLy8gaW5jbHVkZSwgKnNhbWUtb3JpZ2luLCBvbWl0XG5cdFx0aGVhZGVyczoge1xuXHRcdFx0QWNjZXB0OiB0aGlzLmdldE9wdGlvbihcInR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpLFxuXHRcdH0sXG5cdFx0cmVkaXJlY3Q6IFwiZm9sbG93XCIsIC8vIG1hbnVhbCwgKmZvbGxvdywgZXJyb3Jcblx0XHRyZWZlcnJlclBvbGljeTogXCJuby1yZWZlcnJlclwiLCAvLyBuby1yZWZlcnJlcixcblx0fSlcblx0XHQudGhlbigocmVzcG9uc2UpID0+IHtcblx0XHRcdHJldHVybiByZXNwb25zZS50ZXh0KCk7XG5cdFx0fSlcblx0XHQudGhlbigodGV4dCkgPT4ge1xuXHRcdFx0Y29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcblx0XHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXS5hcHBlbmRDaGlsZCh0ZXh0Tm9kZSk7XG5cblx0XHRcdHRoaXNbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uZ2V0U3ViamVjdCgpW1wibG9hZGVkXCJdID0gdHJ1ZTtcblx0XHR9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN0YXRlU3ltYm9sXS5zZXRTdWJqZWN0KHtcblx0XHRcdFx0bG9hZGVkOiB0cnVlLFxuXHRcdFx0XHRlcnJvcjogZS50b1N0cmluZygpLFxuXHRcdFx0fSk7XG5cblx0XHRcdHRhcmdldE5vZGUuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0fSk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfQ0xBU1MsXG5cdEFUVFJJQlVURV9IUkVGLFxuXHRBVFRSSUJVVEVfSUQsXG5cdEFUVFJJQlVURV9OT05DRSxcblx0QVRUUklCVVRFX1NSQyxcblx0QVRUUklCVVRFX1RJVExFLFxuXHRBVFRSSUJVVEVfVFlQRSxcblx0VEFHX0xJTkssXG59IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBLRVlfRE9DVU1FTlQsIHJlZmVyZW5jZVN5bWJvbCwgUmVzb3VyY2UgfSBmcm9tIFwiLi4vcmVzb3VyY2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBMaW5rIH07XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB1c2VkIGJ5IHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIGVtYmVkIGV4dGVybmFsIHJlc291cmNlcy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET00uUmVzb3VyY2VcbiAqIEBzdW1tYXJ5IEEgUmVzb3VyY2UgY2xhc3NcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmtcbiAqL1xuY2xhc3MgTGluayBleHRlbmRzIFJlc291cmNlIHtcblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcyB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1hc31cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNyb3NzT3JpZ2luPWFub255bW91cyB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLWNyb3Nzb3JpZ2lufVxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGRpc2FibGVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBocmVmIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLWhyZWZ9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBocmVmbGFuZyB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1ocmVmbGFuZ31cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGltYWdlc2l6ZXMge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItaW1hZ2VzaXplc31cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGltYWdlc3Jjc2V0IHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLWltYWdlc3Jjc2V0fVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gaW50ZWdyaXR5IHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLWludGVncml0eX1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG1lZGlhIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLW1lZGlhfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcHJlZmV0Y2gge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItcHJlZmV0Y2h9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWZlcnJlcnBvbGljeSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1yZWZlcnJlcnBvbGljeX1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlbCB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1yZWx9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLXR5cGV9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzaXplcyB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1zaXplc31cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG5vbmNlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItbm9uY2V9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdGFzOiB1bmRlZmluZWQsXG5cdFx0XHRjcm9zc09yaWdpbjogXCJhbm9ueW1vdXNcIixcblx0XHRcdGRpc2FibGVkOiB1bmRlZmluZWQsXG5cdFx0XHRocmVmOiB1bmRlZmluZWQsXG5cdFx0XHRocmVmbGFuZzogdW5kZWZpbmVkLFxuXHRcdFx0aW1hZ2VzaXplczogdW5kZWZpbmVkLFxuXHRcdFx0aW1hZ2VzcmNzZXQ6IHVuZGVmaW5lZCxcblx0XHRcdGludGVncml0eTogdW5kZWZpbmVkLFxuXHRcdFx0bWVkaWE6IHVuZGVmaW5lZCxcblx0XHRcdHByZWZldGNoOiB1bmRlZmluZWQsXG5cdFx0XHRyZWZlcnJlcnBvbGljeTogdW5kZWZpbmVkLFxuXHRcdFx0cmVsOiB1bmRlZmluZWQsXG5cdFx0XHRzaXplczogdW5kZWZpbmVkLFxuXHRcdFx0dHlwZTogdW5kZWZpbmVkLFxuXHRcdFx0bm9uY2U6IHVuZGVmaW5lZCxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9yZXNvdXJjZS9saW5rXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlLkxpbmt9XG5cdCAqL1xuXHRjcmVhdGUoKSB7XG5cdFx0Y3JlYXRlRWxlbWVudC5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRVUkxBdHRyaWJ1dGUoKSB7XG5cdFx0cmV0dXJuIEFUVFJJQlVURV9IUkVGO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlLkxpbmt9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoKSB7XG5cdGNvbnN0IGRvY3VtZW50ID0gdGhpcy5nZXRPcHRpb24oS0VZX0RPQ1VNRU5UKTtcblx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChUQUdfTElOSyk7XG5cblx0Zm9yIChjb25zdCBrZXkgb2YgW1xuXHRcdFwiYXNcIixcblx0XHRcImNyb3NzT3JpZ2luXCIsXG5cdFx0XCJkaXNhYmxlZFwiLFxuXHRcdFwiaHJlZlwiLFxuXHRcdFwiaHJlZmxhbmdcIixcblx0XHRcImltYWdlc2l6ZXNcIixcblx0XHRcImltYWdlc3Jjc2V0XCIsXG5cdFx0XCJpbnRlZ3JpdHlcIixcblx0XHRcIm1lZGlhXCIsXG5cdFx0XCJwcmVmZXRjaFwiLFxuXHRcdFwicmVmZXJyZXJwb2xpY3lcIixcblx0XHRcInNpemVzXCIsXG5cdFx0XCJyZWxcIixcblx0XHRcInR5cGVcIixcblx0XHRBVFRSSUJVVEVfSFJFRixcblx0XHRBVFRSSUJVVEVfSUQsXG5cdFx0QVRUUklCVVRFX0NMQVNTLFxuXHRcdEFUVFJJQlVURV9USVRMRSxcblx0XHRBVFRSSUJVVEVfTk9OQ0UsXG5cdF0pIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oa2V5KSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF1ba2V5XSA9IHRoaXMuZ2V0T3B0aW9uKGtleSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vLi4vLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSBcIi4uL2xpbmsubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBTdHlsZXNoZWV0IH07XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB1c2VkIGJ5IHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIGVtYmVkIGV4dGVybmFsIHJlc291cmNlcy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET00uUmVzb3VyY2VcbiAqIEBzdW1tYXJ5IEEgUmVzb3VyY2UgY2xhc3NcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmtcbiAqL1xuY2xhc3MgU3R5bGVzaGVldCBleHRlbmRzIExpbmsge1xuXHQvKipcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlbCB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1yZWx9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHJlbDogXCJzdHlsZXNoZWV0XCIsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vcmVzb3VyY2UvbGluay9zdHlsZXNoZWV0XCIpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfQ0xBU1MsXG5cdEFUVFJJQlVURV9JRCxcblx0QVRUUklCVVRFX05PTkNFLFxuXHRBVFRSSUJVVEVfU1JDLFxuXHRBVFRSSUJVVEVfVElUTEUsXG5cdEFUVFJJQlVURV9UWVBFLFxuXHRUQUdfU0NSSVBULFxufSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgS0VZX0RPQ1VNRU5ULCByZWZlcmVuY2VTeW1ib2wsIFJlc291cmNlIH0gZnJvbSBcIi4uL3Jlc291cmNlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgU2NyaXB0IH07XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB1c2VkIGJ5IHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIGVtYmVkIHNjcmlwdHMuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NLlJlc291cmNlXG4gKiBAc3VtbWFyeSBBIFJlc291cmNlIGNsYXNzXG4gKi9cbmNsYXNzIFNjcmlwdCBleHRlbmRzIFJlc291cmNlIHtcblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYXN5bmM9dHJ1ZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLWFzeW5jfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY3Jvc3NPcmlnaW49YW5vbnltb3VzIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItY3Jvc3NvcmlnaW59XG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZGVmZXI9ZmFsc2Uge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci1kZWZlcn1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGludGVncml0eSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLWludGVncml0eX1cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBub21vZHVsZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLW5vbW9kdWxlfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbm9uY2Uge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci1ub25jZX1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlZmVycmVycG9saWN5IHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItcmVmZXJyZXJwb2xpY3l9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItdHlwZX1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRjcm9zc09yaWdpbjogXCJhbm9ueW1vdXNcIixcblx0XHRcdGRlZmVyOiBmYWxzZSxcblx0XHRcdGludGVncml0eTogdW5kZWZpbmVkLFxuXHRcdFx0bm9tb2R1bGU6IGZhbHNlLFxuXHRcdFx0bm9uY2U6IHVuZGVmaW5lZCxcblx0XHRcdHJlZmVycmVycG9saWN5OiB1bmRlZmluZWQsXG5cdFx0XHR0eXBlOiBcInRleHQvamF2YXNjcmlwdFwiLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL3Jlc291cmNlL3NjcmlwdFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZS5TY3JpcHR9XG5cdCAqL1xuXHRjcmVhdGUoKSB7XG5cdFx0Y3JlYXRlRWxlbWVudC5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRVUkxBdHRyaWJ1dGUoKSB7XG5cdFx0cmV0dXJuIEFUVFJJQlVURV9TUkM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2UuU2NyaXB0fVxuICovXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KCkge1xuXHRjb25zdCBkb2N1bWVudCA9IHRoaXMuZ2V0T3B0aW9uKEtFWV9ET0NVTUVOVCk7XG5cdHRoaXNbcmVmZXJlbmNlU3ltYm9sXSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoVEFHX1NDUklQVCk7XG5cblx0Zm9yIChjb25zdCBrZXkgb2YgW1xuXHRcdFwiY3Jvc3NPcmlnaW5cIixcblx0XHRcImRlZmVyXCIsXG5cdFx0XCJhc3luY1wiLFxuXHRcdFwiaW50ZWdyaXR5XCIsXG5cdFx0XCJub21vZHVsZVwiLFxuXHRcdEFUVFJJQlVURV9OT05DRSxcblx0XHRcInJlZmVycmVycG9saWN5XCIsXG5cdFx0QVRUUklCVVRFX1RZUEUsXG5cdFx0QVRUUklCVVRFX1NSQyxcblx0XHRBVFRSSUJVVEVfSUQsXG5cdFx0QVRUUklCVVRFX0NMQVNTLFxuXHRcdEFUVFJJQlVURV9USVRMRSxcblx0XSkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihrZXkpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXVtrZXldID0gdGhpcy5nZXRPcHRpb24oa2V5KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBlcXVpcFdpdGhJbnRlcm5hbCB9IGZyb20gXCIuLi90eXBlcy9pbnRlcm5hbC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfSFJFRiwgQVRUUklCVVRFX1NSQyB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IFJlc291cmNlIH0gZnJvbSBcIi4vcmVzb3VyY2UubWpzXCI7XG5pbXBvcnQgeyBEYXRhIH0gZnJvbSBcIi4vcmVzb3VyY2UvZGF0YS5tanNcIjtcbmltcG9ydCB7IFN0eWxlc2hlZXQgfSBmcm9tIFwiLi9yZXNvdXJjZS9saW5rL3N0eWxlc2hlZXQubWpzXCI7XG5pbXBvcnQgeyBTY3JpcHQgfSBmcm9tIFwiLi9yZXNvdXJjZS9zY3JpcHQubWpzXCI7XG5cbmV4cG9ydCB7IFJlc291cmNlTWFuYWdlciB9O1xuXG4vKipcbiAqIFRoZSBSZXNvdXJjZU1hbmFnZXIgaXMgYSBzaW5nbGV0b24gdGhhdCBtYW5hZ2VzIGFsbCByZXNvdXJjZXMuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAc3VtbWFyeSBBIFJlc291cmNlIGNsYXNzXG4gKi9cbmNsYXNzIFJlc291cmNlTWFuYWdlciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICogdGhyb3cge0Vycm9yfSB1bnN1cHBvcnRlZCBkb2N1bWVudCB0eXBlXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cdFx0ZXF1aXBXaXRoSW50ZXJuYWwuY2FsbCh0aGlzKTtcblxuXHRcdGlmICghKHRoaXMuZ2V0T3B0aW9uKFwiZG9jdW1lbnRcIikgaW5zdGFuY2VvZiBEb2N1bWVudCkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGRvY3VtZW50IHR5cGVcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBkZXByZWNhdGVkIHNpbmNlIDMuMTUuMCB1c2UgZ2V0SW50ZXJuYWwgaW5zdGVhZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYmFzZXVybFxuXHQgKi9cblx0Z2V0T3B0aW9uKGtleSkge1xuXHRcdHJldHVybiB0aGlzLmdldEludGVybmFsKGtleSk7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGJhc2V1cmxcblx0ICovXG5cdGdldEJhc2VVUkwoKSB7XG5cdFx0dGhpcy5nZXRPcHRpb24oXCJkb2N1bWVudFwiKT8uYmFzZVVSTDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYmFzZXVybFxuXHQgKiBAZGVwcmVjYXRlZCBzaW5jZSAzLjE1LjAgdXNlIGludGVybmFsRGVmYXVsdHMgaW5zdGVhZFxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiB0aGlzLmludGVybmFsRGVmYXVsdHM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHByb3BlcnR5IHtIVE1MRG9jdW1lbnR9IGRvY3VtZW50PWRvY3VtZW50IERvY3VtZW50XG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSByZXNvdXJjZXNcblx0ICogQHByb3BlcnR5IHtBcnJheX0gcmVzb3VyY2VzLnNjcmlwdHM9W10gYXJyYXkgd2l0aCB7QGxpbmsgTW9uc3Rlci5ET00uUmVzb3VyY2UuU2NyaXB0fSBvYmplY3RzXG5cdCAqIEBwcm9wZXJ0eSB7QXJyYXl9IHJlc291cmNlcy5zdHlsZXNoZWV0cz1bXSBhcnJheSB3aXRoIHtAbGluayBNb25zdGVyLkRPTS5SZXNvdXJjZS5MaW5rLlN0eWxlc2hlZXR9IG9iamVjdHNcblx0ICogQHByb3BlcnR5IHtBcnJheX0gcmVzb3VyY2VzLmRhdGE9W10gYXJyYXkgd2l0aCB7QGxpbmsgTW9uc3Rlci5ET00uUmVzb3VyY2UuRGF0YX0gb2JqZWN0c1xuXHQgKi9cblx0Z2V0IGludGVybmFsRGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdHtcblx0XHRcdFx0ZG9jdW1lbnQ6IGdldEdsb2JhbE9iamVjdChcImRvY3VtZW50XCIpLFxuXHRcdFx0XHRyZXNvdXJjZXM6IHtcblx0XHRcdFx0XHRzY3JpcHRzOiBbXSxcblx0XHRcdFx0XHRzdHlsZXNoZWV0czogW10sXG5cdFx0XHRcdFx0ZGF0YTogW10sXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQXBwZW5kIFRhZ3MgdG8gRE9NXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlcn1cblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIHJlc291cmNlIGRlZmluaXRpb25cblx0ICovXG5cdGNvbm5lY3QoKSB7XG5cdFx0cnVuUmVzb3VyY2VNZXRob2QuY2FsbCh0aGlzLCBcImNvbm5lY3RcIik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgYXZhaWxhYmxlXG5cdCAqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCByZXNvdXJjZSBkZWZpbml0aW9uXG5cdCAqL1xuXHRhdmFpbGFibGUoKSB7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKHJ1blJlc291cmNlTWV0aG9kLmNhbGwodGhpcywgXCJhdmFpbGFibGVcIikpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIHNjcmlwdFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuXHQgKiBAcGFyYW0gW09iamVjdHx1bmRlZmluZWR9IG9wdGlvbnNcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2VNYW5hZ2VyfVxuXHQgKiBAc2VlIE1vbnN0ZXIuRE9NLlJlc291cmNlLlNjcmlwdFxuXHQgKi9cblx0YWRkU2NyaXB0KHVybCwgb3B0aW9ucykge1xuXHRcdHJldHVybiBhZGRSZXNvdXJjZS5jYWxsKHRoaXMsIFwic2NyaXB0c1wiLCB1cmwsIG9wdGlvbnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBTdHlsZXNoZWV0XG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG5cdCAqIEBwYXJhbSBbT2JqZWN0fHVuZGVmaW5lZH0gb3B0aW9uc1xuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZU1hbmFnZXJ9XG5cdCAqIEBzZWUgTW9uc3Rlci5ET00uUmVzb3VyY2UuTGluay5TdHlsZXNoZWV0XG5cdCAqL1xuXHRhZGRTdHlsZXNoZWV0KHVybCwgb3B0aW9ucykge1xuXHRcdHJldHVybiBhZGRSZXNvdXJjZS5jYWxsKHRoaXMsIFwic3R5bGVzaGVldHNcIiwgdXJsLCBvcHRpb25zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgRGF0YSBUYWdcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcblx0ICogQHBhcmFtIFtPYmplY3R8dW5kZWZpbmVkfSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlcn1cblx0ICogQHNlZSBNb25zdGVyLkRPTS5SZXNvdXJjZS5EYXRhXG5cdCAqL1xuXHRhZGREYXRhKHVybCwgb3B0aW9ucykge1xuXHRcdHJldHVybiBhZGRSZXNvdXJjZS5jYWxsKHRoaXMsIFwiZGF0YVwiLCB1cmwsIG9wdGlvbnMpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5mdW5jdGlvbiBydW5SZXNvdXJjZU1ldGhvZChtZXRob2QpIHtcblx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0Zm9yIChjb25zdCB0eXBlIG9mIFtcInNjcmlwdHNcIiwgXCJzdHlsZXNoZWV0c1wiLCBcImRhdGFcIl0pIHtcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLmdldE9wdGlvbihgcmVzb3VyY2VzLiR7dHlwZX1gKTtcblx0XHRpZiAoIWlzQXJyYXkocmVzb3VyY2VzKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHtcblx0XHRcdGlmICghKHJlc291cmNlIGluc3RhbmNlb2YgUmVzb3VyY2UpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIHJlc291cmNlIGRlZmluaXRpb25cIik7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3VsdC5wdXNoKHJlc291cmNlW21ldGhvZF0oKSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gKiBAcGFyYW0gW09iamVjdHx1bmRlZmluZWR9IG9wdGlvbnNcbiAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlcn1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGFkZFJlc291cmNlKHR5cGUsIHVybCwgb3B0aW9ucykge1xuXHRpZiAodXJsIGluc3RhbmNlb2YgVVJMKSB7XG5cdFx0dXJsID0gdXJsLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRsZXQgcmVzb3VyY2U7XG5cdHN3aXRjaCAodHlwZSkge1xuXHRcdGNhc2UgXCJzY3JpcHRzXCI6XG5cdFx0XHRyZXNvdXJjZSA9IG5ldyBTY3JpcHQoZXh0ZW5kKHt9LCBvcHRpb25zLCB7IFtBVFRSSUJVVEVfU1JDXTogdXJsIH0pKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJzdHlsZXNoZWV0c1wiOlxuXHRcdFx0cmVzb3VyY2UgPSBuZXcgU3R5bGVzaGVldChleHRlbmQoe30sIG9wdGlvbnMsIHsgW0FUVFJJQlVURV9IUkVGXTogdXJsIH0pKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJkYXRhXCI6XG5cdFx0XHRyZXNvdXJjZSA9IG5ldyBEYXRhKGV4dGVuZCh7fSwgb3B0aW9ucywgeyBbQVRUUklCVVRFX1NSQ106IHVybCB9KSk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCB0eXBlICR7dHlwZX1gKTtcblx0fVxuXG5cdHRoaXMuZ2V0T3B0aW9uKFwicmVzb3VyY2VzXCIpPy5bdHlwZV0ucHVzaChyZXNvdXJjZSk7XG5cdHJldHVybiB0aGlzO1xufVxuIiwgIlxuLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyNC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQge2FkZEF0dHJpYnV0ZVRva2VufSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge0FUVFJJQlVURV9FUlJPUk1FU1NBR0V9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQge0NvbmZpZ01hbmFnZXJTdHlsZVNoZWV0fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgQ29uZmlnTWFuYWdlclN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuICBDb25maWdNYW5hZ2VyU3R5bGVTaGVldC5pbnNlcnRSdWxlKGBcbkBsYXllciBjb25maWdtYW5hZ2VyIHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17ZGlzcGxheTpub25lfSBcbn1gLCAwKTtcbn0gY2F0Y2ggKGUpIHtcbiAgYWRkQXR0cmlidXRlVG9rZW4oZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKCdodG1sJyksIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUgKyBcIlwiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCAyMDIzIHNjaHVrYWkgR21iSFxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgQ29uZmlnTWFuYWdlclN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L2NvbmZpZy1tYW5hZ2VyLm1qc1wiO1xuaW1wb3J0IHsgZ2V0V2luZG93IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBDb25maWdNYW5hZ2VyIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGluZGV4REJJbnN0YW5jZVN5bWJvbCA9IFN5bWJvbChcImluZGV4REJJbnN0YW5jZVwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW5pdGlhbGl6ZWRQcm9taXNlU3ltYm9sID0gU3ltYm9sKFwiaW5pdGlhbGl6ZWRQcm9taXNlU3ltYm9sXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBNT0RFX1JFQURPTkxZID0gXCJyZWFkb25seVwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBNT0RFX1JFQURfV1JJVEUgPSBcInJlYWR3cml0ZVwiO1xuXG4vKipcbiAqIFRoZSBDb25maWcgTWFuYWdlciBjb21wb25lbnQgaXMgdXNlZCB0byBlbmNhcHN1bGF0ZSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgYXBwbGljYXRpb24uXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9jb25maWctbWFuYWdlci5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnlcbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIDxtb25zdGVyLWhvc3QgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItaG9zdCcpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLWNvbmZpZy1tYW5hZ2VyPjwvbW9uc3Rlci1jb25maWctbWFuYWdlcj5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgJ0BzY2h1a2FpL2NvbXBvbmVudC1zdGF0ZS9zb3VyY2UvY29uZmlnLW1hbmFnZXIubWpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY29uZmlnLW1hbmFnZXInKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBCb2R5IHNob3VsZCBoYXZlIGEgY2xhc3MgXCJoaWRkZW5cIiB0byBlbnN1cmUgdGhhdCB0aGUgc3R5bGVzIGFyZSBhcHBsaWVkIGNvcnJlY3RseS5cbiAqXG4gKiBgYGBjc3NcbiAqIGJvZHkuaGlkZGVuIHtcbiAqICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBzdGFydHVtbCBjb25maWctbWFuYWdlci5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIENvbmZpZ01hbmFnZXJcbiAqIEBlbmR1bWxcbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0XG4gKiBAc3VtbWFyeSBBIGNvbmZpZyBtYW5hZ2VyIGNvbXBvbmVudFxuICovXG5jbGFzcyBDb25maWdNYW5hZ2VyIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL2NvbXBvbmVudC1ob3N0L2NvbmZpZy1tYW5hZ2VyQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHQvKipcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEB0eXBlIHtzeW1ib2x9XG5cdFx0ICovXG5cdFx0dGhpc1tpbml0aWFsaXplZFByb21pc2VTeW1ib2xdID0gW107XG5cdFx0dGhpc1tpbmRleERCSW5zdGFuY2VTeW1ib2xdID0gbnVsbDtcblx0XHR0aGlzW2luaXRpYWxpemVkUHJvbWlzZVN5bWJvbF0ucHVzaChvcGVuRGF0YWJhc2UuY2FsbCh0aGlzKSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRyZWFkeSgpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwodGhpc1tpbml0aWFsaXplZFByb21pc2VTeW1ib2xdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBodG1sIHRhZyB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0aW5kZXhEQjoge1xuXHRcdFx0XHRuYW1lOiBcIm1vbnN0ZXJcIixcblx0XHRcdFx0dmVyc2lvbjogMixcblx0XHRcdFx0b2JqZWN0U3RvcmU6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbmZpZ1wiLFxuXHRcdFx0XHRcdGtleVBhdGg6IFwia2V5XCIsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59XG5cdCAqL1xuXHRnZXRDb25maWcoa2V5KSB7XG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKS50aGVuKCgpID0+IHtcblx0XHRcdHJldHVybiBnZXRCbG9iLmNhbGwodGhpcywga2V5KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuXHQgKi9cblx0aGFzQ29uZmlnKGtleSkge1xuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGdldEJsb2IuY2FsbCh0aGlzLCBrZXkpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fVxuXHQgKi9cblx0c2V0Q29uZmlnKGtleSwgdmFsdWUpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpLnRoZW4oKCkgPT4ge1xuXHRcdFx0cmV0dXJuIHNldEJsb2IuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcblx0XHR9KTtcblx0fVxuXG5cdGRlbGV0ZUNvbmZpZyhrZXkpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpLnRoZW4oKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGRlbGV0ZUJsb2IuY2FsbCh0aGlzLCBrZXkpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1jb25maWctbWFuYWdlclwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbQ29uZmlnTWFuYWdlclN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lkhvc3R9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIG9wZW5EYXRhYmFzZSgpIHtcblx0Y29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG5cblx0Y29uc3QgbmFtZSA9IHRoaXMuZ2V0T3B0aW9uKFwiaW5kZXhEQi5uYW1lXCIpO1xuXHRjb25zdCB2ZXJzaW9uID0gdGhpcy5nZXRPcHRpb24oXCJpbmRleERCLnZlcnNpb25cIik7XG5cdGNvbnN0IHN0b3JhZ2VOYW1lID0gdGhpcy5nZXRPcHRpb24oXCJpbmRleERCLm9iamVjdFN0b3JlLm5hbWVcIik7XG5cdGNvbnN0IEtleVBhdGggPSB0aGlzLmdldE9wdGlvbihcImluZGV4REIub2JqZWN0U3RvcmUua2V5UGF0aFwiKTtcblxuXHRpZiAoIW5hbWUgfHwgIXZlcnNpb24pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgZGF0YWJhc2UgbmFtZSBhbmQgdmVyc2lvbiBtdXN0IGJlIHNldC5cIik7XG5cdH1cblxuXHRjb25zdCByZXF1ZXN0ID0gd2luZG93LmluZGV4ZWREQi5vcGVuKG5hbWUsIHZlcnNpb24pO1xuXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0cmVxdWVzdC5vbmVycm9yID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiRXJyb3Igb3BlbmluZyBkYXRhYmFzZVwiLCBldmVudCk7XG5cdFx0XHRyZWplY3QocmVxdWVzdC5lcnJvcik7XG5cdFx0fTtcblxuXHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKGV2ZW50KSA9PiB7XG5cdFx0XHR0aGlzW2luZGV4REJJbnN0YW5jZVN5bWJvbF0gPSBldmVudD8udGFyZ2V0Py5yZXN1bHQ7XG5cdFx0XHRyZXNvbHZlKHJlcXVlc3QucmVzdWx0KTtcblx0XHR9O1xuXG5cdFx0cmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSAoZXZlbnQpID0+IHtcblx0XHRcdGNvbnN0IGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcblxuXHRcdFx0bGV0IG9iamVjdFN0b3JlO1xuXHRcdFx0aWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKHN0b3JhZ2VOYW1lKSkge1xuXHRcdFx0XHRvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKHN0b3JhZ2VOYW1lLCB7IGtleVBhdGg6IEtleVBhdGggfSk7XG5cdFx0XHR9XG5cblx0XHRcdG9iamVjdFN0b3JlLnRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc29sZS5sb2coXCJEYXRhYmFzZSB1cGdyYWRlIGNvbXBsZXRlXCIpO1xuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9O1xuXHRcdH07XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlIGVpdGhlciBcInJlYWRvbmx5XCIgb3IgXCJyZWFkd3JpdGVcIlxuICovXG5mdW5jdGlvbiBnZXRPYmplY3RTdG9yZShtb2RlKSB7XG5cdGNvbnN0IHN0b3JhZ2VOYW1lID0gdGhpcy5nZXRPcHRpb24oXCJpbmRleERCLm9iamVjdFN0b3JlLm5hbWVcIik7XG5cblx0aWYgKCF0aGlzW2luZGV4REJJbnN0YW5jZVN5bWJvbF0pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgZGF0YWJhc2UgaXMgbm90IG9wZW4uXCIpO1xuXHR9XG5cblx0Ly8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSURCRGF0YWJhc2UvdHJhbnNhY3Rpb25cblx0Ly8gdHJhbnNhY3Rpb24oc3RvcmVOYW1lcywgbW9kZSwgb3B0aW9ucylcblx0Y29uc3QgdHggPSB0aGlzW2luZGV4REJJbnN0YW5jZVN5bWJvbF0udHJhbnNhY3Rpb24oc3RvcmFnZU5hbWUsIG1vZGUpO1xuXHRyZXR1cm4gdHgub2JqZWN0U3RvcmUoc3RvcmFnZU5hbWUpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fVxuICovXG5mdW5jdGlvbiBjbGVhck9iamVjdFN0b3JlKCkge1xuXHRjb25zdCBzdG9yZSA9IGdldE9iamVjdFN0b3JlLmNhbGwodGhpcywgXCJyZWFkd3JpdGVcIik7XG5cblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRjb25zdCByZXEgPSBzdG9yZS5jbGVhcigpO1xuXHRcdHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRjb25zb2xlLmxvZyhcImNsZWFyT2JqZWN0U3RvcmUgY29tcGxldGVkXCIpO1xuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH07XG5cdFx0cmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiY2xlYXJPYmplY3RTdG9yZTpcIiwgZXZ0LnRhcmdldC5lcnJvckNvZGUpO1xuXHRcdFx0cmVqZWN0KGV2dC50YXJnZXQuZXJyb3JDb2RlKTtcblx0XHR9O1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0QmxvYihrZXkpIHtcblx0Y29uc3Qgc3RvcmUgPSBnZXRPYmplY3RTdG9yZS5jYWxsKHRoaXMsIE1PREVfUkVBRE9OTFkpO1xuXG5cdGNvbnN0IHJlcSA9IHN0b3JlLmdldChrZXkpO1xuXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0cmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChldnQpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gZXZ0LnRhcmdldC5yZXN1bHQ7XG5cdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0cmVzb2x2ZSh2YWx1ZS5ibG9iKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIlRoZSB2YWx1ZSBvZiB0aGUga2V5ICdcIiArIGtleSArIFwiJyBpcyBub3QgZGVmaW5lZC5cIikpO1xuXHRcdH07XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBkZWxldGVCbG9iKGtleSkge1xuXHRjb25zdCBzdG9yZSA9IGdldE9iamVjdFN0b3JlLmNhbGwodGhpcywgTU9ERV9SRUFEX1dSSVRFKTtcblxuXHRjb25zdCByZXEgPSBzdG9yZS5kZWxldGUoa2V5KTtcblxuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fTtcblxuXHRcdHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKGV2dCkge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcImRlbGV0ZUJsb2I6XCIsIGV2dC50YXJnZXQuZXJyb3JDb2RlKTtcblx0XHRcdHJlamVjdChldnQudGFyZ2V0LmVycm9yQ29kZSk7XG5cdFx0fTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIHNldEJsb2Ioa2V5LCBibG9iKSB7XG5cdGNvbnN0IHN0b3JlID0gZ2V0T2JqZWN0U3RvcmUuY2FsbCh0aGlzLCBNT0RFX1JFQURfV1JJVEUpO1xuXG5cdGNvbnN0IEtleVBhdGggPSB0aGlzLmdldE9wdGlvbihcImluZGV4REIub2JqZWN0U3RvcmUua2V5UGF0aFwiKTtcblx0Y29uc3Qgb2JqID0ge307XG5cdG9ialtLZXlQYXRoXSA9IGtleTtcblx0b2JqLmJsb2IgPSBibG9iO1xuXHRjb25zdCByZXEgPSBzdG9yZS5wdXQob2JqKTtcblxuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fTtcblxuXHRcdHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKGV2dCkge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcInNldEJsb2I6XCIsIGV2dC50YXJnZXQuZXJyb3JDb2RlKTtcblx0XHRcdHJlamVjdChldnQudGFyZ2V0LmVycm9yQ29kZSk7XG5cdFx0fTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KENvbmZpZ01hbmFnZXIpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgc2NodWthaSBHbWJIXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgXCIuLi9ub3RpZnkvbm90aWZ5Lm1qc1wiO1xuaW1wb3J0IHsgSG9zdFN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L2hvc3QubWpzXCI7XG5pbXBvcnQgeyBnZXRMb2NhbGVPZkRvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9sb2NhbGUubWpzXCI7XG5pbXBvcnQgeyBFbWJlZCB9IGZyb20gXCIuLi8uLi9pMThuL3Byb3ZpZGVycy9lbWJlZC5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50VHJhbnNsYXRpb25zIH0gZnJvbSBcIi4uLy4uL2kxOG4vdHJhbnNsYXRpb25zLm1qc1wiO1xuaW1wb3J0IHsgd2luZG93UmVhZHkgfSBmcm9tIFwiLi4vLi4vZG9tL3JlYWR5Lm1qc1wiO1xuaW1wb3J0IHsgRm9jdXNNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2RvbS9mb2N1c21hbmFnZXIubWpzXCI7XG5pbXBvcnQgeyBSZXNvdXJjZU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZG9tL3Jlc291cmNlbWFuYWdlci5tanNcIjtcbmltcG9ydCB7IGZpcmVDdXN0b21FdmVudCB9IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNJdGVyYWJsZSB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCBcIi4vY29uZmlnLW1hbmFnZXIubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEhvc3QgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcHJvbWlzZXNTeW1ib2wgPSBTeW1ib2woXCJwcm9taXNlc1N5bWJvbFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgbm90aWZ5RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIm5vdGlmeUVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG92ZXJsYXlFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwib3ZlcmxheUVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29uZmlnTWFuYWdlckVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGZvY3VzTWFuYWdlclN5bWJvbCA9IFN5bWJvbChcImZvY3VzTWFuYWdlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVzb3VyY2VNYW5hZ2VyU3ltYm9sID0gU3ltYm9sKFwicmVzb3VyY2VNYW5hZ2VyXCIpO1xuXG4vKipcbiAqIFRoZSBIb3N0IGNvbXBvbmVudCBpcyB1c2VkIHRvIGVuY2Fwc3VsYXRlIHRoZSBjb250ZW50IG9mIGEgd2ViIGFwcC5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL2hvc3QucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5XG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyA8bW9uc3Rlci1ob3N0IC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWhvc3QnKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1ob3N0PjwvbW9uc3Rlci1ob3N0PlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCAnQHNjaHVrYWkvY29tcG9uZW50LXN0YXRlL3NvdXJjZS9ob3N0Lm1qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWhvc3QnKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBCb2R5IHNob3VsZCBoYXZlIGEgY2xhc3MgXCJoaWRkZW5cIiB0byBlbnN1cmUgdGhhdCB0aGUgc3R5bGVzIGFyZSBhcHBsaWVkIGNvcnJlY3RseS5cbiAqXG4gKiBgYGBjc3NcbiAqIGJvZHkuaGlkZGVuIHtcbiAqICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBzdGFydHVtbCBob3N0LnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gSG9zdFxuICogQGVuZHVtbFxuICpcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkhvc3RcbiAqIEBzdW1tYXJ5IEEgc2ltcGxlIGhvc3QgY29tcG9uZW50XG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuSG9zdCNtb25zdGVyLWhvc3QtY29ubmVjdGVkXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuSG9zdCNtb25zdGVyLWhvc3QtZGlzY29ubmVjdGVkXG4gKi9cbmNsYXNzIEhvc3QgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvY29tcG9uZW50LWhvc3QvSG9zdEBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzIEZlYXR1cmUgZGVmaW5pdGlvbnNcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ga2V5XG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKi9cblx0Z2V0Q29uZmlnKGtleSkge1xuXHRcdGlmICh0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gY29uZmlnIG1hbmFnZXIgZWxlbWVudFwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXNbY29uZmlnTWFuYWdlckVsZW1lbnRTeW1ib2xdLmdldENvbmZpZyhrZXkpO1xuXHR9XG5cblx0aGFzQ29uZmlnKGtleSkge1xuXHRcdGlmICh0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gY29uZmlnIG1hbmFnZXIgZWxlbWVudFwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXNbY29uZmlnTWFuYWdlckVsZW1lbnRTeW1ib2xdLmhhc0NvbmZpZyhrZXkpO1xuXHR9XG5cblx0ZGVsZXRlQ29uZmlnKGtleSkge1xuXHRcdGlmICh0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gY29uZmlnIG1hbmFnZXIgZWxlbWVudFwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXNbY29uZmlnTWFuYWdlckVsZW1lbnRTeW1ib2xdLmRlbGV0ZUNvbmZpZyhrZXkpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICovXG5cdHNldENvbmZpZyhrZXksIHZhbHVlKSB7XG5cdFx0aWYgKHRoaXNbY29uZmlnTWFuYWdlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBjb25maWcgbWFuYWdlciBlbGVtZW50XCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXS5zZXRDb25maWcoa2V5LCB2YWx1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lkhvc3QjbW9uc3Rlci1ob3N0LWNvbm5lY3RlZFxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdC8qKlxuXHRcdCAqIHNob3cgdGhlIHNjcm9sbCBiYXIgYWx3YXlzXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKi9cblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3dZID0gXCJzY3JvbGxcIjtcblxuXHRcdGNvbnN0IGNsYXNzTmFtZXMgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuYm9keVwiKTtcblxuXHRcdGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWVzKSkge1xuXHRcdFx0ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZXMpO1xuXHRcdH1cblxuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItaG9zdC1jb25uZWN0ZWRcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lkhvc3QjbW9uc3Rlci1ob3N0LWRpc2Nvbm5lY3RlZFxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3dZID0gXCJcIjtcblxuXHRcdGNvbnN0IGNsYXNzTmFtZXMgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuYm9keVwiKTtcblx0XHRpZiAoIWRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZXMpKSB7XG5cdFx0XHRkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lcyk7XG5cdFx0fVxuXG5cdFx0aWYgKGlzSXRlcmFibGUodGhpc1twcm9taXNlc1N5bWJvbF0pID09PSBmYWxzZSkge1xuXHRcdFx0dGhpc1twcm9taXNlc1N5bWJvbF0gPSBbXTtcblx0XHR9XG5cblx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXS5wdXNoKFxuXHRcdFx0bmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdFx0XCJtb25zdGVyLWhvc3QtY29ubmVjdGVkXCIsXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0eyBvbmNlOiB0cnVlIH0sXG5cdFx0XHRcdCk7XG5cdFx0XHR9KSxcblx0XHQpO1xuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1ob3N0LWRpc2Nvbm5lY3RlZFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Ib3N0fVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXSA9IFtdO1xuXHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdLnB1c2god2luZG93UmVhZHkpO1xuXG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdFx0aW5pdFRyYW5zbGF0aW9ucy5jYWxsKHRoaXMpO1xuXG5cdFx0dGhpc1tmb2N1c01hbmFnZXJTeW1ib2xdID0gbmV3IEZvY3VzTWFuYWdlcih0aGlzKTtcblx0XHR0aGlzW3Jlc291cmNlTWFuYWdlclN5bWJvbF0gPSBuZXcgUmVzb3VyY2VNYW5hZ2VyKHRoaXMpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdLnB1c2godGhpc1tyZXNvdXJjZU1hbmFnZXJTeW1ib2xdLmF2YWlsYWJsZSgpKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuaXNDb25uZWN0ZWQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXS5wdXNoKFxuXHRcdFx0XHRuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XHRcdFx0XCJtb25zdGVyLWhvc3QtY29ubmVjdGVkXCIsXG5cdFx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7IG9uY2U6IHRydWUgfSxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBQcm9taXNlIGlzIHJlc29sdmVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgY29ubmVjdGVkIHRvIHRoZSBET00gYW5kIGFsbCByZXNvdXJjZXMgYXJlIGF2YWlsYWJsZS5cblx0ICogSWYgdGhlIGVsZW1lbnQgaXMgbm90IGNvbm5lY3RlZCB0byB0aGUgRE9NLCB0aGUgUHJvbWlzZSBpcyByZWplY3RlZC5cblx0ICpcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdG9uUmVhZHkoKSB7XG5cdFx0aWYgKGlzSXRlcmFibGUodGhpc1twcm9taXNlc1N5bWJvbF0pID09PSBmYWxzZSkge1xuXHRcdFx0dGhpc1twcm9taXNlc1N5bWJvbF0gPSBbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwodGhpc1twcm9taXNlc1N5bWJvbF0pLnRoZW4oKCkgPT4ge1xuXHRcdFx0dGhpc1twcm9taXNlc1N5bWJvbF0gPSBbXTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvbW9uc3Rlci9Nb25zdGVyLkRPTS5Gb2N1c01hbmFnZXIuaHRtbHxNb25zdGVyLkRPTS5Gb2N1c01hbmFnZXJ9XG5cdCAqIEByZXR1cm5zIHsqfVxuXHQgKi9cblx0Z2V0IGZvY3VzTWFuYWdlcigpIHtcblx0XHRyZXR1cm4gdGhpc1tmb2N1c01hbmFnZXJTeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvbW9uc3Rlci9Nb25zdGVyLkRPTS5SZXNvdXJjZU1hbmFnZXIuaHRtbHxNb25zdGVyLkRPTS5SZXNvdXJjZU1hbmFnZXJ9XG5cdCAqIEByZXR1cm5zIHsqfVxuXHQgKi9cblx0Z2V0IHJlc291cmNlTWFuYWdlcigpIHtcblx0XHRyZXR1cm4gdGhpc1tyZXNvdXJjZU1hbmFnZXJTeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Ib3N0fVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhlcmUgaXMgbm8gb3ZlcmxheSBlbGVtZW50IGRlZmluZWQuXG5cdCAqL1xuXHR0b2dnbGVPdmVybGF5KCkge1xuXHRcdGlmICh0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gb3ZlcmxheSBlbGVtZW50IGRlZmluZWQuXCIpO1xuXHRcdH1cblxuXHRcdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdLnRvZ2dsZSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0hvc3R9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBUaGVyZSBpcyBubyBvdmVybGF5IGVsZW1lbnQgZGVmaW5lZC5cblx0ICovXG5cdG9wZW5PdmVybGF5KCkge1xuXHRcdGlmICh0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gb3ZlcmxheSBlbGVtZW50IGRlZmluZWQuXCIpO1xuXHRcdH1cblxuXHRcdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdLm9wZW4oKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtIb3N0fVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhlcmUgaXMgbm8gb3ZlcmxheSBlbGVtZW50IGRlZmluZWQuXG5cdCAqL1xuXHRjbG9zZU92ZXJsYXkoKSB7XG5cdFx0aWYgKHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBvdmVybGF5IGVsZW1lbnQgZGVmaW5lZC5cIik7XG5cdFx0fVxuXG5cdFx0dGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0uY2xvc2UoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItaG9zdFwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbSG9zdFN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtNb25zdGVyLkkxOG4uTG9jYWxlfVxuXHQgKi9cblx0Z2V0IGxvY2FsZSgpIHtcblx0XHRyZXR1cm4gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtUcmFuc2xhdGlvbnN9XG5cdCAqL1xuXHRnZXQgdHJhbnNsYXRpb25zKCkge1xuXHRcdHJldHVybiBnZXREb2N1bWVudFRyYW5zbGF0aW9ucygpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfE1lc3NhZ2V9IG1lc3NhZ2Vcblx0ICovXG5cdHB1c2hOb3RpZmljYXRpb24obWVzc2FnZSkge1xuXHRcdGlmICh0aGlzW25vdGlmeUVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBub3RpZnkgZWxlbWVudCBkZWZpbmVkLlwiKTtcblx0XHR9XG5cblx0XHR0aGlzW25vdGlmeUVsZW1lbnRTeW1ib2xdLnB1c2gobWVzc2FnZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXSA9IHRoaXMucXVlcnlTZWxlY3RvcihcIm1vbnN0ZXItb3ZlcmxheVwiKTtcblx0dGhpc1tub3RpZnlFbGVtZW50U3ltYm9sXSA9IHRoaXMucXVlcnlTZWxlY3RvcihcIm1vbnN0ZXItbm90aWZ5XCIpO1xuXHR0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMucXVlcnlTZWxlY3Rvcihcblx0XHRcIm1vbnN0ZXItY29uZmlnLW1hbmFnZXJcIixcblx0KTtcbn1cblxuZnVuY3Rpb24gaW5pdFRyYW5zbGF0aW9ucygpIHtcblx0aWYgKGlzSXRlcmFibGUodGhpc1twcm9taXNlc1N5bWJvbF0pID09PSBmYWxzZSkge1xuXHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdID0gW107XG5cdH1cblxuXHR0aGlzW3Byb21pc2VzU3ltYm9sXS5wdXNoKEVtYmVkLmFzc2lnblRyYW5zbGF0aW9uc1RvRWxlbWVudCgpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8dGVtcGxhdGUgaWQ9XCJob3N0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6aG9zdC1jb250YWluZXIuY29udGVudFwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwicGFydCBwYXRoOmhvc3QtY29udGFpbmVyLm5hbWUsIGRhdGEtbW9uc3Rlci1yb2xlIHBhdGg6aG9zdC1jb250YWluZXIubmFtZVwiPjwvZGl2PlxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJob3N0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoSG9zdCk7XG4iLCAiXG4vKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDI0LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7YWRkQXR0cmlidXRlVG9rZW59IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7QVRUUklCVVRFX0VSUk9STUVTU0FHRX0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7T3ZlcmxheVN0eWxlU2hlZXR9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBPdmVybGF5U3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG4gIE92ZXJsYXlTdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuQGxheWVyIG92ZXJsYXkgeyBcbjp3aGVyZShodG1sKXtsaW5lLWhlaWdodDoxLjE1Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tb3otdGV4dC1zaXplLWFkanVzdDoxMDAlO3RleHQtc2l6ZS1hZGp1c3Q6MTAwJX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUoYWJiclt0aXRsZV0pe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH06d2hlcmUoYixzdHJvbmcpe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoY29kZSxrYmQscHJlLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlfWJvZHksaHRtbHttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSA0MHB4KX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLXNoYWRvdzpub25lfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym9yZGVyLXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItZm9ybXthY2NlbnQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC13cmFwOm5vd3JhcDtwb3NpdGlvbjpyZWxhdGl2ZX0ubW9uc3Rlci1mb3JtIGxhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5OmdyaWR9Lm1vbnN0ZXItZm9ybSBsYWJlbDpoYXMoaW5wdXRbdHlwZT1yYWRpb10pe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0ubW9uc3Rlci1mb3JtIGxhYmVsOmhhcyhpbnB1dFt0eXBlPXJhZGlvXSkgaW5wdXR7bWFyZ2luLWxlZnQ6LjRyZW07bWFyZ2luLXJpZ2h0Oi40cmVtfS5tb25zdGVyLWZvcm0gbGFiZWw6aGFzKGlucHV0W3R5cGU9cmFkaW9dKX5sYWJlbDpoYXMoaW5wdXRbdHlwZT1yYWRpb10pe21hcmdpbi10b3A6LjJyZW19Lm1vbnN0ZXItZm9ybSBsYWJlbDpoYXMoaW5wdXRbdHlwZT1jaGVja2JveF0pe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0ubW9uc3Rlci1mb3JtIGxhYmVsOmhhcyhpbnB1dFt0eXBlPWNoZWNrYm94XSkgaW5wdXR7bWFyZ2luLWxlZnQ6LjRyZW07bWFyZ2luLXJpZ2h0Oi40cmVtfS5tb25zdGVyLWZvcm0gbGFiZWw6aGFzKGlucHV0W3R5cGU9Y2hlY2tib3hdKX5sYWJlbDpoYXMoaW5wdXRbdHlwZT1jaGVja2JveF0pe21hcmdpbi10b3A6LjJyZW19Lm1vbnN0ZXItZm9ybSBsYWJlbH5maWVsZHNldCwubW9uc3Rlci1mb3JtIGxhYmVsfmxhYmVse21hcmdpbi10b3A6MXJlbX0ubW9uc3Rlci1mb3JtIGJ1dHRvbiwubW9uc3Rlci1mb3JtIGlucHV0LC5tb25zdGVyLWZvcm0gc2VsZWN0LC5tb25zdGVyLWZvcm0gdGV4dGFyZWF7YWNjZW50LWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6MTAwJTttYXJnaW46MDtvdXRsaW5lOm5vbmU7cGFkZGluZzouNHJlbSAuNnJlbX0ubW9uc3Rlci1mb3JtIGJ1dHRvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItZm9ybSBvcHRpb246Y2hlY2tlZCwubW9uc3Rlci1mb3JtIG9wdGlvbjpmb2N1cywubW9uc3Rlci1mb3JtIG9wdGlvbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItZm9ybSBpbnB1dCwubW9uc3Rlci1mb3JtIHNlbGVjdCwubW9uc3Rlci1mb3JtIHRleHRhcmVhe2JvcmRlcjowO2JvcmRlci1ib3R0b20tcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLWJvdHRvbS1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JvcmRlci1ib3R0b206dGhpbiB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp0aGluO2JvcmRlci1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItZm9ybSBidXR0b24sLm1vbnN0ZXItZm9ybSBpbnB1dDpub3QoW3R5cGU9cmFkaW9dKTpub3QoW3R5cGU9Y2hlY2tib3hdKSwubW9uc3Rlci1mb3JtIGxhYmVsLC5tb25zdGVyLWZvcm0gc2VsZWN0LC5tb25zdGVyLWZvcm0gdGV4dGFyZWF7d2lkdGg6MTAwJX0ubW9uc3Rlci1mb3JtIGxhYmVsIGlucHV0Om5vdChbdHlwZT1yYWRpb10pOm5vdChbdHlwZT1jaGVja2JveF0pLC5tb25zdGVyLWZvcm0gbGFiZWwgc2VsZWN0LC5tb25zdGVyLWZvcm0gbGFiZWwgdGV4dGFyZWEsLm1vbnN0ZXItZm9ybSBsYWJlbCtpbnB1dDpub3QoW3R5cGU9cmFkaW9dKTpub3QoW3R5cGU9Y2hlY2tib3hdKSwubW9uc3Rlci1mb3JtIGxhYmVsK3NlbGVjdCwubW9uc3Rlci1mb3JtIGxhYmVsK3RleHRhcmVhe21hcmdpbi10b3A6LjJyZW07d2lkdGg6MTAwJX0ubW9uc3Rlci1mb3JtIGZpZWxkc2V0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlcjoycHggc29saWQgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7bWFyZ2luOjA7b3V0bGluZTpub25lO3BhZGRpbmc6Mi41cmVtIDJyZW0gMnJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlfS5tb25zdGVyLWZvcm0gZmllbGRzZXQgbGVnZW5ke2ZvbnQtc2l6ZTouOHJlbTttYXgtd2lkdGg6OTUlO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4xcmVtIDJyZW0gLjJyZW0gLjVyZW07cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0ZXh0LWFsaWduOnJpZ2h0O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3RvcDowO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1mb3JtIGZpZWxkc2V0fmZpZWxkc2V0e21hcmdpbi10b3A6MXJlbX0ubW9uc3Rlci1mb3JtIGJ1dHRvbnttYXJnaW46LjJyZW0gMH0ubW9uc3Rlci1mb3JtIGJ1dHRvbjpmaXJzdC1vZi10eXBle21hcmdpbi10b3A6MXJlbX0ubW9uc3Rlci1mb3JtIGJ1dHRvbjpsYXN0LW9mLXR5cGV7bWFyZ2luLWJvdHRvbToxcmVtfS5tb25zdGVyLWZvcm0gaW5wdXQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOm5vbmV9Lm1vbnN0ZXItZm9ybSBidXR0b246Zm9jdXMsLm1vbnN0ZXItZm9ybSBpbnB1dDpmb2N1cywubW9uc3Rlci1mb3JtIHNlbGVjdDpmb2N1cywubW9uc3Rlci1mb3JtIHRleHRhcmVhOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KTtvdXRsaW5lLW9mZnNldDoycHh9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7Lm1vbnN0ZXItZm9ybSBidXR0b24sLm1vbnN0ZXItZm9ybSBpbnB1dCwubW9uc3Rlci1mb3JtIHNlbGVjdCwubW9uc3Rlci1mb3JtIHRleHRhcmVhe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWZvcm0gYnV0dG9uOmZvY3VzLC5tb25zdGVyLWZvcm0gaW5wdXQ6Zm9jdXMsLm1vbnN0ZXItZm9ybSBzZWxlY3Q6Zm9jdXMsLm1vbnN0ZXItZm9ybSB0ZXh0YXJlYTpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6MnB4fX0ubW9uc3Rlci1mb3JtIGJ1dHRvbjpob3ZlciwubW9uc3Rlci1mb3JtIGlucHV0OmhvdmVyOm5vdChbdHlwZT1yYWRpb10pOm5vdChbdHlwZT1jaGVja2JveF0pOm5vdChbdHlwZT1yYW5nZV0pLC5tb25zdGVyLWZvcm0gc2VsZWN0OmhvdmVyLC5tb25zdGVyLWZvcm0gdGV4dGFyZWE6aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fS5tb25zdGVyLWgxLGgxe2ZvbnQtc2l6ZTozcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxO21hcmdpbi1ib3R0b206MS4yNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfS5tb25zdGVyLWgzLGgze2ZvbnQtc2l6ZToycmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OmNhbGMoNHB4ICsgMmV4KTttYXJnaW4tYm90dG9tOjEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6Y2FsYyg0cHggKyAyZXgpO21hcmdpbi1ib3R0b206MS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDpjYWxjKDRweCArIDJleCk7bWFyZ2luLWJvdHRvbToxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFxcXCJRdWlja3NhbmRcXFwiLFxcXCJTZWdvZSBVSVxcXCIsXFxcIlJvYm90b1xcXCIsXFxcIk94eWdlblxcXCIsXFxcIlVidW50dVxcXCIsXFxcIkNhbnRhcmVsbFxcXCIsXFxcIkZpcmEgU2Fuc1xcXCIsXFxcIkRyb2lkIFNhbnNcXFwiLFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsQXJpYWwsc2Fucy1zZXJpZixcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCI7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTYpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTIpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xOiM4MzNhYjQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTI6I2ZkMWQxZDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMzojZmNiMDQ1Oy0tbW9uc3Rlci1ib3gtc2hhZG93LTE6bm9uZTstLW1vbnN0ZXItYm94LXNoYWRvdy0yOi0xcHggMXB4IDEwcHggMXB4IGhzbGEoMCwwJSw3NiUsLjYxKTstLW1vbnN0ZXItdGV4dC1zaGFkb3c6bm9uZTstLW1vbnN0ZXItYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci1ib3JkZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlOi00cHg7LS1tb25zdGVyLXotaW5kZXgtZGVmYXVsdDowOy0tbW9uc3Rlci16LWluZGV4LW91dGxpbmU6MTA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd246MjAwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duLW92ZXJsYXk6MjEwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreTozMDA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5LW92ZXJsYXk6MzEwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkOjQwMDstLW1vbnN0ZXItei1pbmRleC1maXhlZC1vdmVybGF5OjQxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcDo1MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3Atb3ZlcmxheTo1MTA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzOjYwMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXMtb3ZlcmxheTo2MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWw6NzAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXk6NzEwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXI6ODAwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXItb3ZlcmxheTo4MTA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcDo4MDA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcC1vdmVybGF5OjkxMDstLW1vbnN0ZXItc3BhY2UtMDowOy0tbW9uc3Rlci1zcGFjZS0xOjJweDstLW1vbnN0ZXItc3BhY2UtMjo0cHg7LS1tb25zdGVyLXNwYWNlLTM6NnB4Oy0tbW9uc3Rlci1zcGFjZS00OjEwcHg7LS1tb25zdGVyLXNwYWNlLTU6MTZweDstLW1vbnN0ZXItc3BhY2UtNjoyNnB4Oy0tbW9uc3Rlci1zcGFjZS03OjQycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC00OjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTc6NzY4cHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtOTo5OTJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0xMjoxMjAwcHh9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fVtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5XS5oaWRlLWVtcHR5e2Rpc3BsYXk6bm9uZX1bZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheV17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2hlaWdodDoxMDAlO2xlZnQ6MDtvdmVyZmxvdy14OmhpZGRlbjtwb3NpdGlvbjpmaXhlZDt0b3A6MDt0cmFuc2l0aW9uOi41czt3aWR0aDowO3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhcyl9W2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXldIFtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5LWNsb3NlXXtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6NDBweDtsZWZ0OjEwcHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwcHg7d2lkdGg6NDBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheV0gW2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXktY2xvc2VdOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InJTNFJTNDcGF0aCBkPSdNMi4xNDYgMi44NTRhLjUuNSAwIDEgMSAuNzA4LS43MDhMOCA3LjI5M2w1LjE0Ni01LjE0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsNS4xNDcgNS4xNDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC01LjE0NiA1LjE0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4eicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvciclM0UlM0NwYXRoIGQ9J00yLjE0NiAyLjg1NGEuNS41IDAgMSAxIC43MDgtLjcwOEw4IDcuMjkzbDUuMTQ2LTUuMTQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGw1LjE0NyA1LjE0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTUuMTQ2IDUuMTQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDh6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5LW9wZW5de2N1cnNvcjpwb2ludGVyO2hlaWdodDo0MHB4O2xlZnQ6MTBweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTBweDt3aWR0aDo0MHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5LW9wZW5dOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InJTNFJTNDcGF0aCBkPSdNMSAyYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIN2ExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxaC0yYTEgMSAwIDAgMS0xLTF6TTEgN2ExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDdhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtMmExIDEgMCAwIDEtMS0xek0xIDEyYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIN2ExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxaC0yYTEgMSAwIDAgMS0xLTF6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyUzRSUzQ3BhdGggZD0nTTEgMmExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDdhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtMmExIDEgMCAwIDEtMS0xek0xIDdhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUg3YTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAxLTEtMXpNMSAxMmExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDdhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtMmExIDEgMCAwIDEtMS0xeicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheV0ub3Blbnt3aWR0aDoxMDAlfSBcbn1gLCAwKTtcbn0gY2F0Y2ggKGUpIHtcbiAgYWRkQXR0cmlidXRlVG9rZW4oZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKCdodG1sJyksIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUgKyBcIlwiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCAyMDIzIHNjaHVrYWkgR21iSFxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IFwiLi4vbm90aWZ5L25vdGlmeS5tanNcIjtcbmltcG9ydCB7IE92ZXJsYXlTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9vdmVybGF5Lm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX1JPTEUgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50LFxuXHRmaXJlQ3VzdG9tRXZlbnQsXG59IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBPdmVybGF5IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG92ZXJsYXlFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwib3ZlcmxheUVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG92ZXJsYXlDbG9zZUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJvdmVybGF5Q2xvc2VyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgb3ZlcmxheU9wZW5FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwib3ZlcmxheU9wZW5FbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjbG9zZUV2ZW50SGFuZGxlclN5bWJvbCA9IFN5bWJvbChcImNsb3NlRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBvcGVuRXZlbnRIYW5kbGVyU3ltYm9sID0gU3ltYm9sKFwib3BlbkV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX1ZBTFVFX09WRVJMQVlfT1BFTiA9IFwib3ZlcmxheS1vcGVuXCI7XG5cbi8qKlxuICogVGhlIE92ZXJsYXkgY29tcG9uZW50IGlzIHVzZWQgdG8gc2hvdyBhbiBvdmVybGF5IGFuZCBhIGJ1dHRvbiB0byBvcGVuIHRoZSBvdmVybGF5LlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvb3ZlcmxheS5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnlcbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIDxtb25zdGVyLW92ZXJsYXkgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItb3ZlcmxheScpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLW92ZXJsYXk+PC9tb25zdGVyLW92ZXJsYXk+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0ICdAc2NodWthaS9jb21wb25lbnQtc3RhdGUvc291cmNlL292ZXJsYXkubWpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItb3ZlcmxheScpO1xuICogYGBgXG4gKlxuICogVGhlIEJvZHkgc2hvdWxkIGhhdmUgYSBjbGFzcyBcImhpZGRlblwiIHRvIGVuc3VyZSB0aGF0IHRoZSBzdHlsZXMgYXJlIGFwcGxpZWQgY29ycmVjdGx5LlxuICpcbiAqIGBgYGNzc1xuICogYm9keS5oaWRkZW4ge1xuICogICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICogfVxuICogYGBgXG4gKlxuICogQHN0YXJ0dW1sIG92ZXJsYXkucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDdXN0b21Db250cm9sXG4gKiBDdXN0b21Db250cm9sIDx8LS0gT3ZlcmxheVxuICogQGVuZHVtbFxuICpcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkhvc3RcbiAqIEBzdW1tYXJ5IEEgc2ltcGxlIG92ZXJsYXkgY29tcG9uZW50XG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuT3ZlcmxheS5ldmVudDptb25zdGVyLW92ZXJsYXktYmVmb3JlLW9wZW5cbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5PdmVybGF5LmV2ZW50Om1vbnN0ZXItb3ZlcmxheS1vcGVuXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuT3ZlcmxheS5ldmVudDptb25zdGVyLW92ZXJsYXktYmVmb3JlLWNsb3NlXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuT3ZlcmxheS5ldmVudDptb25zdGVyLW92ZXJsYXktY2xvc2VkXG4gKi9cbmNsYXNzIE92ZXJsYXkgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvY29tcG9uZW50LWhvc3Qvb3ZlcmxheUBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNvbnRhaW5lciBDb250YWluZXIgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHthcnJheX0gY29udGFpbmVyIENvbnRhaW5lciBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY29udGFpbmVyW10ubmFtZSBOYW1lIG9mIHRoZSBjb250YWluZXJcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbnRhaW5lcltdLmNvbnRlbnQgQ29udGVudCBvZiB0aGUgY29udGFpbmVyXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250YWluZXJbXS5jbGFzcyBDc3MgY2xhc3Mgb2YgdGhlIGNvbnRhaW5lclxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY2xhc3NlcyBDc3MgY2xhc3Nlc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY2xhc3Nlcy5ib2R5IENzcyBjbGFzcyB0byBoaWRlIHRoZSBib2R5LiBUaGlzIGNsYXNzIGlzIHJlbW92ZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIHJlYWR5LlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY2xhc3Nlcy5vdmVybGF5IENzcyBjbGFzcyB0byBoaWRlIHRoZSBvdmVybGF5LiBUaGlzIGNsYXNzIGlzIHJlbW92ZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIHJlYWR5LlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmVhdHVyZXMgRmVhdHVyZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLmVzY2FwZUtleSBJZiB0cnVlIHRoZSBvdmVybGF5IGNhbiBiZSBjbG9zZWQgd2l0aCB0aGUgZXNjYXBlIGtleVxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLm9wZW5CdXR0b24gSWYgdHJ1ZSB0aGUgb3ZlcmxheSBjYW4gYmUgb3BlbmVkIHdpdGggYSBidXR0b25cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdG92ZXJsYXk6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udGVudFwiLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IFwiPHNsb3Q+PC9zbG90PlwiLFxuXHRcdFx0XHRcdGNsYXNzOiBcIlwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0Ym9keTogXCJoaWRkZW5cIixcblx0XHRcdFx0b3ZlcmxheTogXCJoaWRlLWVtcHR5XCIsXG5cdFx0XHR9LFxuXHRcdFx0ZmVhdHVyZXM6IHtcblx0XHRcdFx0ZXNjYXBlS2V5OiB0cnVlLFxuXHRcdFx0XHRvcGVuQnV0dG9uOiB0cnVlLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdC8qKlxuXHRcdCAqIHNob3cgdGhlIHNjcm9sbCBiYXIgYWx3YXlzXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKi9cblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3dZID0gXCJzY3JvbGxcIjtcblxuXHRcdGNvbnN0IGNsYXNzTmFtZXMgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuYm9keVwiKTtcblxuXHRcdGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWVzKSkge1xuXHRcdFx0ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZXMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuT3ZlcmxheX1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge01vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lk92ZXJsYXl9XG5cdCAqL1xuXHR0b2dnbGUoKSB7XG5cdFx0aWYgKHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5jb250YWlucyhcIm9wZW5cIikpIHtcblx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5vcGVuKCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5PdmVybGF5fVxuXHQgKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuT3ZlcmxheS5ldmVudDptb25zdGVyLW92ZXJsYXktYmVmb3JlLW9wZW5cblx0ICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lk92ZXJsYXkuZXZlbnQ6bW9uc3Rlci1vdmVybGF5LW9wZW5cblx0ICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lk92ZXJsYXkuZXZlbnQ6bW9uc3Rlci1vdmVybGF5LWJlZm9yZS1jbG9zZVxuXHQgKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuT3ZlcmxheS5ldmVudDptb25zdGVyLW92ZXJsYXktY2xvc2VkXG5cdCAqL1xuXHRvcGVuKCkge1xuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItb3ZlcmxheS1iZWZvcmUtb3BlblwiLCB7fSk7XG5cblx0XHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZS1lbXB0eVwiKTtcblxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcIm9wZW5cIik7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1vdmVybGF5LW9wZW5cIiwge30pO1xuXHRcdFx0fSwgMCk7XG5cdFx0fSwgMCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuT3ZlcmxheX1cblx0ICovXG5cdGNsb3NlKCkge1xuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItb3ZlcmxheS1iZWZvcmUtY2xvc2VcIiwge30pO1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcIm9wZW5cIik7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1vdmVybGF5LWNsb3NlZFwiLCB7fSk7XG5cdFx0XHR9LCAwKTtcblx0XHR9LCAwKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItb3ZlcmxheVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbT3ZlcmxheVN0eWxlU2hlZXRdO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQoXCJvdmVybGF5XCIpO1xuXHR0aGlzW292ZXJsYXlDbG9zZUVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheS1jbG9zZV1cIixcblx0KTtcblx0dGhpc1tvdmVybGF5T3BlbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheS1vcGVuXVwiLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1tjbG9zZUV2ZW50SGFuZGxlclN5bWJvbF0gPSAoZXZlbnQpID0+IHtcblx0XHR0aGlzLmNsb3NlKCk7XG5cdH07XG5cblx0dGhpc1tvdmVybGF5Q2xvc2VFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFwiY2xpY2tcIixcblx0XHR0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyU3ltYm9sXSxcblx0KTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbb3BlbkV2ZW50SGFuZGxlclN5bWJvbF0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0QVRUUklCVVRFX1ZBTFVFX09WRVJMQVlfT1BFTixcblx0XHQpO1xuXHRcdGlmIChlbGVtZW50KSB7XG5cdFx0XHR0aGlzLm9wZW4oKTtcblx0XHR9XG5cdH07XG5cblx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpc1tvcGVuRXZlbnRIYW5kbGVyU3ltYm9sXSk7XG5cblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMuZXNjYXBlS2V5XCIpID09PSB0cnVlKSB7XG5cdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcblx0XHRcdFx0Y29uc3QgaXNOb3RDb21iaW5lZEtleSA9ICEoXG5cdFx0XHRcdFx0ZXZlbnQuY3RybEtleSB8fFxuXHRcdFx0XHRcdGV2ZW50LmFsdEtleSB8fFxuXHRcdFx0XHRcdGV2ZW50LnNoaWZ0S2V5XG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChpc05vdENvbWJpbmVkS2V5KSB7XG5cdFx0XHRcdFx0dGhpcy50b2dnbGVPdmVybGF5KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDx0ZW1wbGF0ZSBpZD1cImhvc3Qtb3ZlcmxheVwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6aG9zdC1vdmVybGF5LmNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInBhcnQgcGF0aDpob3N0LW92ZXJsYXkubmFtZSwgZGF0YS1tb25zdGVyLXJvbGUgcGF0aDpob3N0LWNvbnRhaW5lci5vdmVybGF5XCI+PC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cIm92ZXJsYXktb3BlblwiIHBhcnQ9XCJvcGVuXCJcblx0XHRcdCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6ZmVhdHVyZXMub3BlbkJ1dHRvbiB8IGlmOnZpc2libGU6aGlkZGVuXCI+PC9kaXY+XG5cbiAgICAgICAgPGRpdiBpZD1cIm92ZXJsYXlcIiBkYXRhLW1vbnN0ZXItcm9sZT1cIm92ZXJsYXlcIiBwYXJ0PVwib3ZlcmxheVwiIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJob3N0LW92ZXJsYXkgcGF0aDpvdmVybGF5XCJcbiAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y2xhc3Nlcy5vdmVybGF5XCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwib3ZlcmxheS1jbG9zZVwiIHBhcnQ9XCJjbG9zZVwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoT3ZlcmxheSk7XG4iLCAiaW1wb3J0IHsgZ2V0V2luZG93IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuXG5leHBvcnQgeyBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleSB9O1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgdW5pcXVlIGNvbmZpZ3VyYXRpb24ga2V5IGJhc2VkIG9uIHRoZSBjdXJyZW50IGJyb3dzZXIgbG9jYXRpb24sXG4gKiBjb21wb25lbnQgbmFtZSwgaWQsIGFuZCBhIHByZWZpeC5cbiAqXG4gKiBAc2luY2UgMy41NS4wIHRoZSBmdW5jdGlvbiByZW1vdmUgdGhlIGhhc2ggZnJvbSB0aGUga2V5XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgY29tcG9uZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGNvbXBvbmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXggLSBBIHByZWZpeCB0byB1c2UgaW4gdGhlIHVuaXF1ZSBrZXkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZ2VuZXJhdGVkIHVuaXF1ZSBjb25maWd1cmF0aW9uIGtleS5cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkoY29tcG9uZW50TmFtZSwgaWQsIHByZWZpeCkge1xuXHQvLyBHZXQgdGhlIGJyb3dzZXIgbG9jYXRpb24gd2l0aG91dCBwYXJhbWV0ZXJzXG5cdGNvbnN0IHVybFdpdGhvdXRQYXJhbXMgPSBnZXRXaW5kb3coKS5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiP1wiKVswXTtcblxuXHQvLyBXaXRob3V0IGhhc2ggKHNpbmNlIDMuNTUuMClcblx0Y29uc3QgdXJsV2l0aG91dFBhcmFtc0FuZEhhc2ggPSB1cmxXaXRob3V0UGFyYW1zLnNwbGl0KFwiI1wiKVswXTtcblxuXHQvLyBDb21iaW5lIHRoZSBwYXJ0cyB0byBjcmVhdGUgYSB1bmlxdWUga2V5XG5cdGNvbnN0IHVuaXF1ZUtleSA9IGAke3ByZWZpeH1fJHt1cmxXaXRob3V0UGFyYW1zQW5kSGFzaH1fJHtjb21wb25lbnROYW1lfV8ke2lkfWA7XG5cblx0Ly8gUmVwbGFjZSBhbnkgc3BlY2lhbCBjaGFyYWN0ZXJzIGFuZCBzcGFjZXMgd2l0aCB1bmRlcnNjb3Jlc1xuXHRyZXR1cm4gdW5pcXVlS2V5LnJlcGxhY2UoL1teXFx3XFxzXS9naSwgXCJfXCIpLnJlcGxhY2UoL1xccysvZywgXCJfXCIpO1xufVxuIiwgIlxuLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyNC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQge2FkZEF0dHJpYnV0ZVRva2VufSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge0FUVFJJQlVURV9FUlJPUk1FU1NBR0V9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQge0RldGFpbHNTdHlsZVNoZWV0fVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgRGV0YWlsc1N0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuICBEZXRhaWxzU3R5bGVTaGVldC5pbnNlcnRSdWxlKGBcbkBsYXllciBkZXRhaWxzIHsgXG46d2hlcmUoaHRtbCl7bGluZS1oZWlnaHQ6MS4xNTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstbW96LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTt0ZXh0LXNpemUtYWRqdXN0OjEwMCV9OndoZXJlKGgxKXtmb250LXNpemU6MmVtO21hcmdpbi1ibG9jay1lbmQ6LjY3ZW07bWFyZ2luLWJsb2NrLXN0YXJ0Oi42N2VtfTp3aGVyZShkbCxvbCx1bCkgOndoZXJlKGRsLG9sLHVsKXttYXJnaW4tYmxvY2stZW5kOjA7bWFyZ2luLWJsb2NrLXN0YXJ0OjB9OndoZXJlKGhyKXtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2NvbG9yOmluaGVyaXQ7aGVpZ2h0OjB9OndoZXJlKGFiYnJbdGl0bGVdKXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9OndoZXJlKGIsc3Ryb25nKXtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKGNvZGUsa2JkLHByZSxzYW1wKXtmb250LWZhbWlseTptb25vc3BhY2UsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19OndoZXJlKHNtYWxsKXtmb250LXNpemU6ODAlfTp3aGVyZSh0YWJsZSl7Ym9yZGVyLWNvbG9yOmN1cnJlbnRDb2xvcjt0ZXh0LWluZGVudDowfTp3aGVyZShidXR0b24saW5wdXQsc2VsZWN0KXttYXJnaW46MH06d2hlcmUoYnV0dG9uKXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b259OndoZXJlKHByb2dyZXNzKXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX06d2hlcmUoc2VsZWN0KXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZSh0ZXh0YXJlYSl7bWFyZ2luOjB9OndoZXJlKGlucHV0W3R5cGU9c2VhcmNoIGldKXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi41NH06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9uO2ZvbnQ6aW5oZXJpdH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1cy1pbm5lcntib3JkZXItc3R5bGU6bm9uZTtwYWRkaW5nOjB9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6MXB4IGRvdHRlZCBCdXR0b25UZXh0fTp3aGVyZSg6LW1vei11aS1pbnZhbGlkKXtib3gtc2hhZG93Om5vbmV9OndoZXJlKGRpYWxvZyl7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjpzb2xpZDtjb2xvcjojMDAwO2hlaWdodDotbW96LWZpdC1jb250ZW50O2hlaWdodDpmaXQtY29udGVudDtsZWZ0OjA7bWFyZ2luOmF1dG87cGFkZGluZzoxZW07cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt3aWR0aDotbW96LWZpdC1jb250ZW50O3dpZHRoOmZpdC1jb250ZW50fTp3aGVyZShkaWFsb2c6bm90KFtvcGVuXSkpe2Rpc3BsYXk6bm9uZX06d2hlcmUoc3VtbWFyeSl7ZGlzcGxheTpsaXN0LWl0ZW19aHRtbHtoZWlnaHQ6MTAwJX1ib2R5LGh0bWx7bWluLWhlaWdodDpjYWxjKDEwMHZoIC0gNDBweCl9Ym9keXtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7cGFkZGluZzowO3dvcmQtYnJlYWs6YnJlYWstd29yZH0uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0ubW9uc3Rlci1idXR0b24tcHJpbWFyeSxidXR0b257YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5LC5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5LC5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXNlY29uZGFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH1idXR0b246YWN0aXZlLGJ1dHRvbjpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfWJ1dHRvbjphY3RpdmV7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9Lm1vbnN0ZXItYnV0dG9uLWJhciwubW9uc3Rlci1idXR0b24tZ3JvdXB7YWxpZ24tY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6c3RyZXRjaDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2JveC1zaXppbmc6Ym9yZGVyLWJveDtnYXA6MDttYXJnaW46MXJlbSAwfS5tb25zdGVyLWJ1dHRvbi1ncm91cD46bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6Y2FsYyh2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkqLTEpfS5tb25zdGVyLWJ1dHRvbi1ncm91cCA6aG92ZXJ7Ym94LXNoYWRvdzpub25lfWJ1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6bGlnaHQpe2J1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFxcXCJRdWlja3NhbmRcXFwiLFxcXCJTZWdvZSBVSVxcXCIsXFxcIlJvYm90b1xcXCIsXFxcIk94eWdlblxcXCIsXFxcIlVidW50dVxcXCIsXFxcIkNhbnRhcmVsbFxcXCIsXFxcIkZpcmEgU2Fuc1xcXCIsXFxcIkRyb2lkIFNhbnNcXFwiLFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsQXJpYWwsc2Fucy1zZXJpZixcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCI7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTYpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTIpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xOiM4MzNhYjQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTI6I2ZkMWQxZDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMzojZmNiMDQ1Oy0tbW9uc3Rlci1ib3gtc2hhZG93LTE6bm9uZTstLW1vbnN0ZXItYm94LXNoYWRvdy0yOi0xcHggMXB4IDEwcHggMXB4IGhzbGEoMCwwJSw3NiUsLjYxKTstLW1vbnN0ZXItdGV4dC1zaGFkb3c6bm9uZTstLW1vbnN0ZXItYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci1ib3JkZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlOi00cHg7LS1tb25zdGVyLXotaW5kZXgtZGVmYXVsdDowOy0tbW9uc3Rlci16LWluZGV4LW91dGxpbmU6MTA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd246MjAwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duLW92ZXJsYXk6MjEwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreTozMDA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5LW92ZXJsYXk6MzEwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkOjQwMDstLW1vbnN0ZXItei1pbmRleC1maXhlZC1vdmVybGF5OjQxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcDo1MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3Atb3ZlcmxheTo1MTA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzOjYwMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXMtb3ZlcmxheTo2MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWw6NzAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXk6NzEwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXI6ODAwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXItb3ZlcmxheTo4MTA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcDo4MDA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcC1vdmVybGF5OjkxMDstLW1vbnN0ZXItc3BhY2UtMDowOy0tbW9uc3Rlci1zcGFjZS0xOjJweDstLW1vbnN0ZXItc3BhY2UtMjo0cHg7LS1tb25zdGVyLXNwYWNlLTM6NnB4Oy0tbW9uc3Rlci1zcGFjZS00OjEwcHg7LS1tb25zdGVyLXNwYWNlLTU6MTZweDstLW1vbnN0ZXItc3BhY2UtNjoyNnB4Oy0tbW9uc3Rlci1zcGFjZS03OjQycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC00OjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTc6NzY4cHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtOTo5OTJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0xMjoxMjAwcHh9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fXNwYW4ubW9uc3Rlci1meC1yaXBwbGV7YW5pbWF0aW9uOm1vbnN0ZXItZngtcmlwcGxlIC42cyBsaW5lYXI7YmFja2dyb3VuZC1jb2xvcjpoc2xhKDAsMCUsMTAwJSwuNyk7Ym9yZGVyLXJhZGl1czo1MCU7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnNjYWxlKDApfUBrZXlmcmFtZXMgbW9uc3Rlci1meC1yaXBwbGV7dG97b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSg0KX19W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9jb21wb25lbnQtZm9ybVxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQVRUUklCVVRFX1BSRUZJWCB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItYnV0dG9uLWxhYmVsYCBjYW4gYmUgdXNlZCB0byBwYXNzIGxhYmVscy5cbiAqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db21wb25lbnRzLkhvc3RcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9CVVRUT05fTEFCRUwgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWJ1dHRvbi1sYWJlbGA7XG5cbmV4cG9ydCB7IEFUVFJJQlVURV9CVVRUT05fTEFCRUwgfTtcbiIsICJcbi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHthZGRBdHRyaWJ1dGVUb2tlbn0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtBVFRSSUJVVEVfRVJST1JNRVNTQUdFfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHtDb2xsYXBzZVN0eWxlU2hlZXR9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBDb2xsYXBzZVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuICBDb2xsYXBzZVN0eWxlU2hlZXQuaW5zZXJ0UnVsZShgXG5AbGF5ZXIgY29sbGFwc2UgeyBcbjp3aGVyZShodG1sKXtsaW5lLWhlaWdodDoxLjE1Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tb3otdGV4dC1zaXplLWFkanVzdDoxMDAlO3RleHQtc2l6ZS1hZGp1c3Q6MTAwJX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUoYWJiclt0aXRsZV0pe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH06d2hlcmUoYixzdHJvbmcpe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoY29kZSxrYmQscHJlLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlfWJvZHksaHRtbHttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSA0MHB4KX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5LGJ1dHRvbnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnksLm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnksLm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofWJ1dHRvbjphY3RpdmUsYnV0dG9uOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9YnV0dG9uOmFjdGl2ZXt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX0ubW9uc3Rlci1idXR0b24tYmFyLC5tb25zdGVyLWJ1dHRvbi1ncm91cHthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpzdHJldGNoO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ubW9uc3Rlci1idXR0b24tZ3JvdXB7Ym94LXNpemluZzpib3JkZXItYm94O2dhcDowO21hcmdpbjoxcmVtIDB9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwPjpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1yaWdodDpjYWxjKHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSotMSl9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwIDpob3Zlcntib3gtc2hhZG93Om5vbmV9YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsXFxcIlF1aWNrc2FuZFxcXCIsXFxcIlNlZ29lIFVJXFxcIixcXFwiUm9ib3RvXFxcIixcXFwiT3h5Z2VuXFxcIixcXFwiVWJ1bnR1XFxcIixcXFwiQ2FudGFyZWxsXFxcIixcXFwiRmlyYSBTYW5zXFxcIixcXFwiRHJvaWQgU2Fuc1xcXCIsXFxcIkhlbHZldGljYSBOZXVlXFxcIixBcmlhbCxzYW5zLXNlcmlmLFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIjstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi02KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNik7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTE6IzgzM2FiNDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMjojZmQxZDFkOy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zOiNmY2IwNDU7LS1tb25zdGVyLWJveC1zaGFkb3ctMTpub25lOy0tbW9uc3Rlci1ib3gtc2hhZG93LTI6LTFweCAxcHggMTBweCAxcHggaHNsYSgwLDAlLDc2JSwuNjEpOy0tbW9uc3Rlci10ZXh0LXNoYWRvdzpub25lOy0tbW9uc3Rlci1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLWJvcmRlci13aWR0aDoycHg7LS1tb25zdGVyLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2U6LTRweDstLW1vbnN0ZXItei1pbmRleC1kZWZhdWx0OjA7LS1tb25zdGVyLXotaW5kZXgtb3V0bGluZToxMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bjoyMDA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd24tb3ZlcmxheToyMTA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5OjMwMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3ktb3ZlcmxheTozMTA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQ6NDAwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkLW92ZXJsYXk6NDEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wOjUwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcC1vdmVybGF5OjUxMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXM6NjAwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhcy1vdmVybGF5OjYxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbDo3MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheTo3MTA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlcjo4MDA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlci1vdmVybGF5OjgxMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwOjgwMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwLW92ZXJsYXk6OTEwOy0tbW9uc3Rlci1zcGFjZS0wOjA7LS1tb25zdGVyLXNwYWNlLTE6MnB4Oy0tbW9uc3Rlci1zcGFjZS0yOjRweDstLW1vbnN0ZXItc3BhY2UtMzo2cHg7LS1tb25zdGVyLXNwYWNlLTQ6MTBweDstLW1vbnN0ZXItc3BhY2UtNToxNnB4Oy0tbW9uc3Rlci1zcGFjZS02OjI2cHg7LS1tb25zdGVyLXNwYWNlLTc6NDJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0wOjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTQ6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNzo3NjhweDstLW1vbnN0ZXItYnJlYWtwb2ludC05Ojk5MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTEyOjEyMDBweH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19c3Bhbi5tb25zdGVyLWZ4LXJpcHBsZXthbmltYXRpb246bW9uc3Rlci1meC1yaXBwbGUgLjZzIGxpbmVhcjtiYWNrZ3JvdW5kLWNvbG9yOmhzbGEoMCwwJSwxMDAlLC43KTtib3JkZXItcmFkaXVzOjUwJTtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm06c2NhbGUoMCl9QGtleWZyYW1lcyBtb25zdGVyLWZ4LXJpcHBsZXt0b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKDQpfX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH0ub3ZlcmZsb3ctaGlkZGVuW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde292ZXJmbG93OmhpZGRlbn1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gYnV0dG9ue2JvcmRlci1sZWZ0OjA7Ym9yZGVyLXJpZ2h0OjA7Ym9yZGVyLXRvcDowfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuYnV0dG9uOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1kZXRhaWxde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMik7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2hlaWdodDowO2xpbmUtaGVpZ2h0OjEuNDt0cmFuc2l0aW9uOmhlaWdodCAuNHMgZWFzZS1pbi1vdXQ7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWRldGFpbF0gLnBhZGRpbmd7cGFkZGluZzoxcmVtfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9ZGV0YWlsXSAuZGVjby1saW5le2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMSkgMCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTIpIDUwJSx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTMpIDEwMCUpO2JvcmRlcjowO2hlaWdodDoycHg7bWFyZ2luOjA7cGFkZGluZzowfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1kZXRhaWxdIC5kZWNvLWxpbmV7YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuYWN0aXZlW2RhdGEtbW9uc3Rlci1yb2xlPWRldGFpbF17aGVpZ2h0OnZhcigtLW1vbnN0ZXItaGVpZ2h0KX0gXG59YCwgMCk7XG59IGNhdGNoIChlKSB7XG4gIGFkZEF0dHJpYnV0ZVRva2VuKGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcignaHRtbCcpLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlICsgXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBzY2h1a2FpIEdtYkhcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRnZXRTbG90dGVkRWxlbWVudHMsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgQ29sbGFwc2VTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9jb2xsYXBzZS5tanNcIjtcbmltcG9ydCB7IGZpcmVDdXN0b21FdmVudCB9IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEhvc3QgfSBmcm9tIFwiLi9ob3N0Lm1qc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgQ29sbGFwc2UsIG5hbWVTeW1ib2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdGltZXJDYWxsYmFja1N5bWJvbCA9IFN5bWJvbChcInRpbWVyQ2FsbGJhY2tcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRldGFpbHNFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiZGV0YWlsc0VsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRyb2xFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udHJvbEVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVzaXplT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJyZXNpemVPYnNlcnZlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZGV0YWlsc1Nsb3RFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiZGV0YWlsc1Nsb3RFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImRldGFpbHNDb250YWluZXJFbGVtZW50XCIpO1xuLyoqXG5cbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkZXRhaWxzRGVjb0VsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJkZXRhaWxzRGVjb0VsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG5hbWVTeW1ib2wgPSBTeW1ib2woXCJuYW1lXCIpO1xuXG4vKipcbiAqIFRoZSBDb2xsYXBzZSBjb21wb25lbnQgaXMgdXNlZCB0byBzaG93IGEgZGV0YWlscy5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL2NvbGxhcHNlLnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItY29sbGFwc2UgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY29sbGFwc2UnKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1jb2xsYXBzZT48L21vbnN0ZXItY29sbGFwc2U+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0ICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9jb21wb25lbnRzL2hvc3QvY29sbGFwc2UubWpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY29sbGFwc2UnKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBCb2R5IHNob3VsZCBoYXZlIGEgY2xhc3MgXCJoaWRkZW5cIiB0byBlbnN1cmUgdGhhdCB0aGUgc3R5bGVzIGFyZSBhcHBsaWVkIGNvcnJlY3RseS5cbiAqXG4gKiBgYGBjc3NcbiAqIGJvZHkuaGlkZGVuIHtcbiAqICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBzdGFydHVtbCBjb2xsYXBzZS5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIENvbGxhcHNlXG4gKiBAZW5kdW1sXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuSG9zdFxuICogQHN1bW1hcnkgQSBzaW1wbGUgY29sbGFwc2UgY29tcG9uZW50XG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuQ29sbGFwc2UuZXZlbnQ6bW9uc3Rlci1jb2xsYXBzZS1iZWZvcmUtb3BlblxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0LkNvbGxhcHNlLmV2ZW50Om1vbnN0ZXItY29sbGFwc2Utb3BlblxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0LkNvbGxhcHNlLmV2ZW50Om1vbnN0ZXItY29sbGFwc2UtYmVmb3JlLWNsb3NlXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuQ29sbGFwc2UuZXZlbnQ6bW9uc3Rlci1jb2xsYXBzZS1jbG9zZWRcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Db2xsYXBzZS5ldmVudDptb25zdGVyLWNvbGxhcHNlLWFkanVzdC1oZWlnaHRcbiAqL1xuY2xhc3MgQ29sbGFwc2UgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvY29tcG9uZW50LWhvc3QvY29sbGFwc2VAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdC8vIHRoZSBuYW1lIGlzIG9ubHkgdXNlZCBmb3IgdGhlIGhvc3QgY29uZmlnIGFuZCB0aGUgZXZlbnQgbmFtZVxuXHRcdHRoaXNbbmFtZVN5bWJvbF0gPSBcImNvbGxhcHNlXCI7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgaHRtbCB0YWcgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNsYXNzZXMgQ1NTIGNsYXNzZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzZXMuY29udGFpbmVyIENTUyBjbGFzcyBmb3IgdGhlIGNvbnRhaW5lclxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmVhdHVyZXMgRmVhdHVyZSBjb25maWd1cmF0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMuYWNjb3JkaW9uIEVuYWJsZSBhY2NvcmRpb24gbW9kZVxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLnBlcnNpc3RTdGF0ZSBFbmFibGUgcGVyc2lzdCBzdGF0ZSAoSG9zdCBhbmQgQ29uZmlnLU1hbmFnZXIgcmVxdWlyZWQpXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMudXNlU2Nyb2xsVmFsdWVzIFVzZSBzY3JvbGwgdmFsdWVzIChzY3JvbGxIZWlnaHQpIGluc3RlYWQgb2YgY2xpZW50SGVpZ2h0IGZvciB0aGUgaGVpZ2h0IGNhbGN1bGF0aW9uXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGNvbnRhaW5lcjogXCJwYWRkaW5nXCIsXG5cdFx0XHR9LFxuXHRcdFx0ZmVhdHVyZXM6IHtcblx0XHRcdFx0YWNjb3JkaW9uOiB0cnVlLFxuXHRcdFx0XHRwZXJzaXN0U3RhdGU6IHRydWUsXG5cdFx0XHRcdHVzZVNjcm9sbFZhbHVlczogZmFsc2UsXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Db2xsYXBzZX1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdFN0YXRlRnJvbUhvc3RDb25maWcuY2FsbCh0aGlzKTtcblx0XHRpbml0UmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cdFx0dXBkYXRlUmVzaXplT2JzZXJ2ZXJPYnNlcnZhdGlvbi5jYWxsKHRoaXMpO1xuXHRcdC8vICB0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKGdldERvY3VtZW50KCkuYm9keSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cdFx0Ly90aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5kaXNjb25uZWN0KCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge01vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0LkNvbGxhcHNlfVxuXHQgKi9cblx0dG9nZ2xlKCkge1xuXHRcdGlmICh0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikpIHtcblx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5vcGVuKCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aXNDbG9zZWQoKSB7XG5cdFx0cmV0dXJuICF0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc09wZW4oKSB7XG5cdFx0cmV0dXJuICF0aGlzLmlzQ2xvc2VkKCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge01vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0LkNvbGxhcHNlfVxuXHQgKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuQ29sbGFwc2UuZXZlbnQ6bW9uc3Rlci1jb2xsYXBzZS1iZWZvcmUtb3BlblxuXHQgKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuQ29sbGFwc2UuZXZlbnQ6bW9uc3Rlci1jb2xsYXBzZS1vcGVuXG5cdCAqL1xuXHRvcGVuKCkge1xuXHRcdGxldCBub2RlO1xuXHRcdGlmICh0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItXCIgKyB0aGlzW25hbWVTeW1ib2xdICsgXCItYmVmb3JlLW9wZW5cIiwge30pO1xuXG5cdFx0YWRqdXN0SGVpZ2h0LmNhbGwodGhpcyk7XG5cdFx0dGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcblxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmFjY29yZGlvblwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0bm9kZSA9IHRoaXM7XG5cdFx0XHR3aGlsZSAobm9kZS5uZXh0RWxlbWVudFNpYmxpbmcgaW5zdGFuY2VvZiBDb2xsYXBzZSkge1xuXHRcdFx0XHRub2RlID0gbm9kZS5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdFx0XHRcdG5vZGUuY2xvc2UoKTtcblx0XHRcdH1cblxuXHRcdFx0bm9kZSA9IHRoaXM7XG5cdFx0XHR3aGlsZSAobm9kZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nIGluc3RhbmNlb2YgQ29sbGFwc2UpIHtcblx0XHRcdFx0bm9kZSA9IG5vZGUucHJldmlvdXNFbGVtZW50U2libGluZztcblx0XHRcdFx0bm9kZS5jbG9zZSgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHVwZGF0ZVN0YXRlQ29uZmlnLmNhbGwodGhpcyk7XG5cdFx0XHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItXCIgKyB0aGlzW25hbWVTeW1ib2xdICsgXCItb3BlblwiLCB7fSk7XG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJvdmVyZmxvdy1oaWRkZW5cIik7XG5cdFx0XHRcdH0sIDUwMCk7XG5cdFx0XHR9LCAwKTtcblx0XHR9LCAwKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Db2xsYXBzZX1cblx0ICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0LkNvbGxhcHNlLmV2ZW50Om1vbnN0ZXItY29sbGFwc2UtYmVmb3JlLWNsb3NlXG5cdCAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Db2xsYXBzZS5ldmVudDptb25zdGVyLWNvbGxhcHNlLWNsb3NlZFxuXHQgKi9cblx0Y2xvc2UoKSB7XG5cdFx0aWYgKCF0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItXCIgKyB0aGlzW25hbWVTeW1ib2xdICsgXCItYmVmb3JlLWNsb3NlXCIsIHt9KTtcblx0XHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwib3ZlcmZsb3ctaGlkZGVuXCIpO1xuXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHVwZGF0ZVN0YXRlQ29uZmlnLmNhbGwodGhpcyk7XG5cdFx0XHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItXCIgKyB0aGlzW25hbWVTeW1ib2xdICsgXCItY2xvc2VkXCIsIHt9KTtcblx0XHRcdH0sIDApO1xuXHRcdH0sIDApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWNvbGxhcHNlXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7QXJyYXk8Q1NTU3R5bGVTaGVldD59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW0NvbGxhcHNlU3R5bGVTaGVldF07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgaW5zZXJ0ZWQgaW50byBhIGRvY3VtZW50LCBpbmNsdWRpbmcgaW50byBhIHNoYWRvdyB0cmVlLlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Db2xsYXBzZX1cblx0ICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0LkNvbGxhcHNlLmV2ZW50Om1vbnN0ZXItY29sbGFwc2UtYWRqdXN0LWhlaWdodFxuXHQgKi9cblx0YWRqdXN0SGVpZ2h0KCkge1xuXHRcdGFkanVzdEhlaWdodC5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGFkanVzdEhlaWdodCgpIHtcblx0bGV0IGhlaWdodCA9IDA7XG5cblx0aWYgKHRoaXNbZGV0YWlsc0NvbnRhaW5lckVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMudXNlU2Nyb2xsVmFsdWVzXCIpKSB7XG5cdFx0XHRoZWlnaHQgKz0gdGhpc1tkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uc2Nyb2xsSGVpZ2h0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRoZWlnaHQgKz0gdGhpc1tkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uY2xpZW50SGVpZ2h0O1xuXHRcdH1cblx0fVxuXG5cdGlmICh0aGlzW2RldGFpbHNEZWNvRWxlbWVudFN5bWJvbF0pIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy51c2VTY3JvbGxWYWx1ZXNcIikpIHtcblx0XHRcdGhlaWdodCArPSB0aGlzW2RldGFpbHNEZWNvRWxlbWVudFN5bWJvbF0uc2Nyb2xsSGVpZ2h0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRoZWlnaHQgKz0gdGhpc1tkZXRhaWxzRGVjb0VsZW1lbnRTeW1ib2xdLmNsaWVudEhlaWdodCArIDE7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGhlaWdodCA9PT0gMCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnVzZVNjcm9sbFZhbHVlc1wiKSkge1xuXHRcdFx0aGVpZ2h0ID0gdGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uc2Nyb2xsSGVpZ2h0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRoZWlnaHQgPSB0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5jbGllbnRIZWlnaHQ7XG5cdFx0fVxuXG5cdFx0aWYgKGhlaWdodCA9PT0gMCkge1xuXHRcdFx0aGVpZ2h0ID0gXCJhdXRvXCI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGhlaWdodCArPSBcInB4XCI7XG5cdH1cblxuXHR0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5zdHlsZS5zZXRQcm9wZXJ0eShcblx0XHRcIi0tbW9uc3Rlci1oZWlnaHRcIixcblx0XHRoZWlnaHQsXG5cdFx0XCJpbXBvcnRhbnRcIixcblx0KTtcblx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1cIiArIHRoaXNbbmFtZVN5bWJvbF0gKyBcIi1hZGp1c3QtaGVpZ2h0XCIsIHt9KTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUmVzaXplT2JzZXJ2ZXJPYnNlcnZhdGlvbigpIHtcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0uZGlzY29ubmVjdCgpO1xuXG5cdGNvbnN0IHNsb3R0ZWROb2RlcyA9IGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMpO1xuXHRzbG90dGVkTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUobm9kZSk7XG5cdH0pO1xuXG5cdGlmICh0aGlzW2RldGFpbHNDb250YWluZXJFbGVtZW50U3ltYm9sXSkge1xuXHRcdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUodGhpc1tkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbF0pO1xuXHR9XG5cblx0dGhpcy5hZGp1c3RIZWlnaHQoKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRpbml0U2xvdENoYW5nZWRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBpbml0U2xvdENoYW5nZWRIYW5kbGVyKCkge1xuXHR0aGlzW2RldGFpbHNTbG90RWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcInNsb3RjaGFuZ2VcIiwgKCkgPT4ge1xuXHRcdHVwZGF0ZVJlc2l6ZU9ic2VydmVyT2JzZXJ2YXRpb24uY2FsbCh0aGlzKTtcblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXVwiLFxuXHQpO1xuXHR0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWRldGFpbF1cIixcblx0KTtcblx0dGhpc1tkZXRhaWxzU2xvdEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCJzbG90XCIpO1xuXHR0aGlzW2RldGFpbHNDb250YWluZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl1cIixcblx0KTtcblx0dGhpc1tkZXRhaWxzRGVjb0VsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9ZGVjb11cIixcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0Q29uZmlnS2V5KCkge1xuXHRyZXR1cm4gZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkodGhpc1tuYW1lU3ltYm9sXSwgdGhpcy5pZCwgXCJzdGF0ZVwiKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVTdGF0ZUNvbmZpZygpIHtcblx0aWYgKCF0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnBlcnNpc3RTdGF0ZVwiKSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICghdGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cdGNvbnN0IGhvc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwibW9uc3Rlci1ob3N0XCIpO1xuXHRpZiAoIShob3N0ICYmIHRoaXMuaWQpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgY29uZmlnS2V5ID0gZ2V0Q29uZmlnS2V5LmNhbGwodGhpcyk7XG5cblx0dHJ5IHtcblx0XHRob3N0LnNldENvbmZpZyhjb25maWdLZXksIHRoaXMuaXNPcGVuKCkpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIFN0cmluZyhlcnJvcikpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHtQcm9taXNlfVxuICovXG5mdW5jdGlvbiBpbml0U3RhdGVGcm9tSG9zdENvbmZpZygpIHtcblx0aWYgKCF0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnBlcnNpc3RTdGF0ZVwiKSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXHRjb25zdCBob3N0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIm1vbnN0ZXItaG9zdFwiKTtcblxuXHRpZiAoIShob3N0ICYmIHRoaXMuaWQpKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG5cdH1cblxuXHQvLyBOb3Qgd29ya2luZyBwcm9wcGVyXG5cdC8vIGlmICghKGhvc3QgaW5zdGFuY2VvZiBIb3N0KSkge1xuXHQvLyAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInRoZSBob3N0IG11c3QgYmUgYSBtb25zdGVyLWhvc3RcIik7XG5cdC8vIH1cblxuXHRjb25zdCBjb25maWdLZXkgPSBnZXRDb25maWdLZXkuY2FsbCh0aGlzKTtcblx0cmV0dXJuIGhvc3Rcblx0XHQuZ2V0Q29uZmlnKGNvbmZpZ0tleSlcblx0XHQudGhlbigoc3RhdGUpID0+IHtcblx0XHRcdGlmIChzdGF0ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHR0aGlzLm9wZW4oKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGVycm9yLnRvU3RyaW5nKCkpO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRSZXNpemVPYnNlcnZlcigpIHtcblx0Ly8gYWdhaW5zdCBmbGlja2VyaW5nXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG5cdFx0aWYgKHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gaW5zdGFuY2VvZiBEZWFkTWFuc1N3aXRjaCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXS50b3VjaCgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gPSBuZXcgRGVhZE1hbnNTd2l0Y2goMjAwLCAoKSA9PiB7XG5cdFx0XHRjaGVja0FuZFJlYXJyYW5nZUNvbnRlbnQuY2FsbCh0aGlzKTtcblx0XHR9KTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrQW5kUmVhcnJhbmdlQ29udGVudCgpIHtcblx0dGhpcy5hZGp1c3RIZWlnaHQoKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCIgY2xhc3M9XCJvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJkZXRhaWxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjbGFzc2VzLmNvbnRhaW5lclwiIHBhcnQ9XCJjb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWNvLWxpbmVcIiBkYXRhLW1vbnN0ZXItcm9sZT1cImRlY29cIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoQ29sbGFwc2UpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgc2NodWthaSBHbWJIXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBIb3N0IH0gZnJvbSBcIi4vaG9zdC5tanNcIjtcbmltcG9ydCB7IERldGFpbHNTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9kZXRhaWxzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0JVVFRPTl9MQUJFTCB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuaW1wb3J0IHsgQ29sbGFwc2UsIG5hbWVTeW1ib2wgfSBmcm9tIFwiLi9jb2xsYXBzZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgRGV0YWlscyB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBidXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiYnV0dG9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYnV0dG9uRXZlbnRIYW5kbGVyU3ltYm9sID0gU3ltYm9sKFwiYnV0dG9uRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIFRoZSBEZXRhaWxzIGNvbXBvbmVudCBpcyB1c2VkIHRvIHNob3cgYSBkZXRhaWxzLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvZGV0YWlscy5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnlcbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIDxtb25zdGVyLWRldGFpbHMgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItZGV0YWlscycpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLWRldGFpbHM+PC9tb25zdGVyLWRldGFpbHM+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0ICdAc2NodWthaS9jb21wb25lbnQtc3RhdGUvc291cmNlL2RldGFpbHMubWpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItZGV0YWlscycpO1xuICogYGBgXG4gKlxuICogVGhlIEJvZHkgc2hvdWxkIGhhdmUgYSBjbGFzcyBcImhpZGRlblwiIHRvIGVuc3VyZSB0aGF0IHRoZSBzdHlsZXMgYXJlIGFwcGxpZWQgY29ycmVjdGx5LlxuICpcbiAqIGBgYGNzc1xuICogYm9keS5oaWRkZW4ge1xuICogICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICogfVxuICogYGBgXG4gKlxuICogQHN0YXJ0dW1sIGRldGFpbHMucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDb2xsYXBzZVxuICogQ29sbGFwc2UgPHwtLSBEZXRhaWxzXG4gKiBAZW5kdW1sXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbXBvbmVudHMuSG9zdFxuICogQHN1bW1hcnkgQSBzaW1wbGUgZGV0YWlscyBjb21wb25lbnRcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5EZXRhaWxzLmV2ZW50Om1vbnN0ZXItZGV0YWlscy1iZWZvcmUtb3BlblxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0LkRldGFpbHMuZXZlbnQ6bW9uc3Rlci1kZXRhaWxzLW9wZW5cbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5EZXRhaWxzLmV2ZW50Om1vbnN0ZXItZGV0YWlscy1iZWZvcmUtY2xvc2VcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5EZXRhaWxzLmV2ZW50Om1vbnN0ZXItZGV0YWlscy1jbG9zZWRcbiAqL1xuY2xhc3MgRGV0YWlscyBleHRlbmRzIENvbGxhcHNlIHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvY29tcG9uZW50LWhvc3QvZGV0YWlsc0BAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0Ly8gdGhlIG5hbWUgaXMgb25seSB1c2VkIGZvciB0aGUgaG9zdCBjb25maWcgYW5kIHRoZSBldmVudCBuYW1lXG5cdFx0dGhpc1tuYW1lU3ltYm9sXSA9IFwiZGV0YWlsc1wiO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIGh0bWwgdGFnIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjbGFzc2VzIENTUyBjbGFzc2VzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzc2VzLmJ1dHRvbiBDU1MgY2xhc3MgZm9yIHRoZSBidXR0b25cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGJ1dHRvbiBCdXR0b24gY29uZmlndXJhdGlvblxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYnV0dG9uLmxhYmVsIEJ1dHRvbiBsYWJlbFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmVhdHVyZXMgRmVhdHVyZSBjb25maWd1cmF0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMuYWNjb3JkaW9uIEVuYWJsZSBhY2NvcmRpb24gbW9kZVxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLnBlcnNpc3RTdGF0ZSBQZXJzaXN0IHRoZSBzdGF0ZSBpbiB0aGUgaG9zdCBjb25maWd1cmF0aW9uXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIkRldGFpbHNcIixcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge01vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0LkRldGFpbHN9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdEJ1dHRvbkxhYmVsLmNhbGwodGhpcyk7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdGNvbnN0IGNvbnRhaW5Eb2N1bWVudCA9IHRoaXMuc2hhZG93Um9vdDtcblxuXHRcdGlmIChjb250YWluRG9jdW1lbnQgIT09IG51bGwpIHtcblx0XHRcdGNvbnN0IHByZXZpb3VzRWxlbWVudCA9IHRoaXMucHJldmlvdXNFbGVtZW50U2libGluZztcblx0XHRcdGlmIChwcmV2aW91c0VsZW1lbnQgJiYgcHJldmlvdXNFbGVtZW50LnRhZ05hbWUgPT09IFwiTU9OU1RFUi1ERVRBSUxTXCIpIHtcblx0XHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5zdHlsZS5ib3JkZXJUb3AgPSBcIjBcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWRldGFpbHNcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtBcnJheTxDU1NTdHlsZVNoZWV0Pn1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdGNvbnN0IGNzcyA9IHN1cGVyLmdldENTU1N0eWxlU2hlZXQoKTtcblx0XHRjc3MucHVzaChEZXRhaWxzU3R5bGVTaGVldCk7XG5cdFx0cmV0dXJuIGNzcztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1idXR0b25dXCIsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tidXR0b25FdmVudEhhbmRsZXJTeW1ib2xdID0gKGV2ZW50KSA9PiB7XG5cdFx0dGhpcy50b2dnbGUoKTtcblx0fTtcblxuXHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XCJjbGlja1wiLFxuXHRcdHRoaXNbYnV0dG9uRXZlbnRIYW5kbGVyU3ltYm9sXSxcblx0KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBpbml0QnV0dG9uTGFiZWwoKSB7XG5cdGxldCBsYWJlbDtcblx0Y29uc3Qgc2V0TGFiZWwgPSBmYWxzZTtcblx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9CVVRUT05fTEFCRUwpKSB7XG5cdFx0bGFiZWwgPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMKTtcblx0fSBlbHNlIHtcblx0XHRsYWJlbCA9IHRoaXMuaW5uZXJUZXh0O1xuXHR9XG5cblx0aWYgKCFpc1N0cmluZyhsYWJlbCkpIHtcblx0XHRsYWJlbCA9IFwiXCI7XG5cdH1cblxuXHRsYWJlbCA9IGxhYmVsLnRyaW0oKTtcblxuXHRpZiAobGFiZWwgPT09IFwiXCIpIHtcblx0XHRsYWJlbCA9IHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLmJ1dHRvblwiLCBcIkRldGFpbHNcIik7XG5cdH1cblxuXHRpZiAobGFiZWwubGVuZ3RoID4gMTAwKSB7XG5cdFx0bGFiZWwgPSBgJHtsYWJlbC5zdWJzdHJpbmcoMCwgOTkpfVx1MjAyNmA7XG5cdH1cblxuXHR0aGlzLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMLCBsYWJlbCk7XG5cdHRoaXMuc2V0T3B0aW9uKFwibGFiZWxzLmJ1dHRvblwiLCBsYWJlbCk7XG5cblx0cmV0dXJuIGxhYmVsO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRDb25maWdLZXkoKSB7XG5cdHJldHVybiBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleShcImRldGFpbHNcIiwgdGhpcy5pZCwgXCJzdGF0ZVwiKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCIgY2xhc3M9XCJvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdW1tYXJ5XCIgcGFydD1cInN1bW1hcnlcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHBhcnQ9XCJidXR0b25cIiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y2xhc3Nlcy5idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b24gfCBkZWZhdWx0OmNsaWNrIG1lXCI+Y2xpY2sgbWVcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImRldGFpbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMuY29udGFpbmVyXCIgcGFydD1cImNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlY28tbGluZVwiIGRhdGEtbW9uc3Rlci1yb2xlPVwiZGVjb1wiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChEZXRhaWxzKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IHJhbmRvbSB9IGZyb20gXCIuLi9tYXRoL3JhbmRvbS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbCB9IGZyb20gXCIuL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IElEIH0gZnJvbSBcIi4vaWQubWpzXCI7XG5cbmV4cG9ydCB7IFJhbmRvbUlEIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmxldCBpbnRlcm5hbENvdW50ZXIgPSAwO1xuXG4vKipcbiAqIFRoZSBgUmFuZG9tSURgIGNsYXNzIHByb3ZpZGVzIGEgdW5pcXVlIElEIGZvciBhbiBpdGVtLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVHlwZXNcbiAqIEBzdW1tYXJ5IGNsYXNzIHRvIGdlbmVyYXRlIHJhbmRvbSBudW1iZXJzXG4gKi9cbmNsYXNzIFJhbmRvbUlEIGV4dGVuZHMgSUQge1xuXHQvKipcblx0ICogY3JlYXRlIG5ldyBvYmplY3Rcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpbnRlcm5hbENvdW50ZXIgKz0gMTtcblxuXHRcdHRoaXMuaWQgPVxuXHRcdFx0Z2V0R2xvYmFsKClcblx0XHRcdFx0LmJ0b2EocmFuZG9tKDEsIDEwMDAwKSlcblx0XHRcdFx0LnJlcGxhY2UoLz0vZywgXCJcIilcblx0XHRcdFx0LyoqIE5vIG51bWJlcnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgSUQsIGJlY2F1c2Ugb2YgcG9zc2libGUgcHJvYmxlbXMgd2l0aCBET00gKi9cblx0XHRcdFx0LnJlcGxhY2UoL15bMC05XSsvLCBcIlhcIikgKyBpbnRlcm5hbENvdW50ZXI7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IHJhbmRvbSB9IGZyb20gXCIuLi9tYXRoL3JhbmRvbS5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi9nbG9iYWwubWpzXCI7XG5cbmV4cG9ydCB7IFVVSUQgfTtcblxuLyoqXG4gKiBUaGUgVVVJRCBjbGFzcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBnZXQgYSB1bmlxdWUgVVVJRCBmb3IgYW4gb2JqZWN0LlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWRcbiAqL1xuY2xhc3MgVVVJRCBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRsZXQgdXVpZCA9IGNyZWF0ZVdpdGhDcnlwdG8oKTtcblxuXHRcdGlmICh1dWlkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHV1aWQgPSBjcmVhdGVXaXRoUmFuZG9tKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHV1aWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWRcIik7XG5cdFx0fVxuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0XHR2YWx1ZTogdXVpZCxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXVtcInZhbHVlXCJdO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVdpdGhSYW5kb20oKSB7XG5cdHJldHVybiBcInh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eFwiLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcblx0XHRjb25zdCByID0gKHJhbmRvbSgwLCA2NTAwMCkgKiAxNikgfCAwO1xuXHRcdGNvbnN0IHYgPSBjID09PSBcInhcIiA/IHIgOiAociAmIDB4MykgfCAweDg7XG5cdFx0cmV0dXJuIHYudG9TdHJpbmcoMTYpWzBdO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlV2l0aENyeXB0bygpIHtcblx0Y29uc3QgY3J5cHQgPSBnZXRHbG9iYWxPYmplY3QoXCJjcnlwdG9cIik7XG5cdGlmICghaXNPYmplY3QoY3J5cHQpKSByZXR1cm47XG5cdGlmICh0eXBlb2YgY3J5cHQ/LltcInJhbmRvbVVVSURcIl0pIHJldHVybjtcblx0cmV0dXJuIGNyeXB0LnJhbmRvbVVVSUQoKTtcbn1cbiIsICJpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHtcblxuICAgIChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IHNheXN3aG8gPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudCwgdGVtLFxuICAgICAgICAgICAgICAgIE0gPSB1YS5tYXRjaCgvKG9wZXJhfGNocm9tZXxzYWZhcml8ZmlyZWZveHxtc2llfHRyaWRlbnQoPz1cXC8pKVxcLz9cXHMqKFxcZCspL2kpIHx8IFtdO1xuICAgICAgICAgICAgaWYgKC90cmlkZW50L2kudGVzdChNWzFdKSkge1xuICAgICAgICAgICAgICAgIHRlbSA9IC9cXGJydlsgOl0rKFxcZCspL2cuZXhlYyh1YSkgfHwgW107XG4gICAgICAgICAgICAgICAgcmV0dXJuICdJRSAnICsgKHRlbVsxXSB8fCAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoTVsxXSA9PT0gJ0Nocm9tZScpIHtcbiAgICAgICAgICAgICAgICB0ZW0gPSB1YS5tYXRjaCgvXFxiKE9QUnxFZGdlKVxcLyhcXGQrKS8pO1xuICAgICAgICAgICAgICAgIGlmICh0ZW0gIT0gbnVsbCkgcmV0dXJuIHRlbS5zbGljZSgxKS5qb2luKCcgJykucmVwbGFjZSgnT1BSJywgJ09wZXJhJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBNID0gTVsyXSA/IFtNWzFdLCBNWzJdXSA6IFtuYXZpZ2F0b3IuYXBwTmFtZSwgbmF2aWdhdG9yLmFwcFZlcnNpb24sICctPyddO1xuICAgICAgICAgICAgaWYgKCh0ZW0gPSB1YS5tYXRjaCgvdmVyc2lvblxcLyhcXGQrKS9pKSkgIT0gbnVsbCkgTS5zcGxpY2UoMSwgMSwgdGVtWzFdKTtcbiAgICAgICAgICAgIHJldHVybiBNLmpvaW4oJyAnKTtcbiAgICAgICAgfSkoKTtcblxuXG4gICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaDEnKVxuICAgICAgICBlbGVtZW50LmlubmVySFRNTCArPSBcIiBcIiArIHNheXN3aG87XG5cbiAgICB9KSgpO1xuXG5cbn1cbiIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyTW9ja30gZnJvbSBcIi4uLy4uLy4uL3V0aWwvaW50ZXJzZWN0aW9uLW1vY2subWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcbmxldCBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXI7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmRlc2NyaWJlKCdSZWxvYWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAvLyBqc2RvbS10ZXN0aW5nLW1vY2tzIG5lZWQgamVzdFxuICAgIGxldCBSZWxvYWQsIHZpZXdwb3J0LCBtb2NrVmlld3BvcnQ7XG5cbiAgICBhZnRlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlci5yZXN0b3JlKCk7XG4gICAgfSlcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIFxuICAgICAgICBcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlciA9IHNldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXJNb2NrKCk7XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vcmVsb2FkLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgUmVsb2FkID0gbVsnUmVsb2FkJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldyBSZWxvYWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG5cbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIC8vIGxhbmd1YWdlPUhUTUxcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1vbnN0ZXItcmVsb2FkPjwvbW9uc3Rlci1yZWxvYWQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLXJlbG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXJlbG9hZCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIHJlbG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1yZWxvYWQnKSkuaXMuaW5zdGFuY2VvZihSZWxvYWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBtb2NrcztcbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBubyBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3QgcmVsb2FkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1yZWxvYWQnKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHJlbG9hZCk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXJlbG9hZCcpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnbG9hZCBjb250ZW50JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBtb2NrcywgZmV0Y2hSZWZlcmVuY2UsIGludGVyc2VjdGlvbk9ic2VydmVyO1xuICAgICAgICBiZWZvcmVFYWNoKChkb25lKSA9PiB7XG4gICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgLy8gbGFuZ3VhZ2U9SFRNTFxuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0aGlzLWNvbnRlbnRcIj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYDtcblxuICAgICAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxbJ2ZldGNoJ107XG5cbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0gbmV3IE1hcDtcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvaHRtbCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvazp0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOjIwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0MikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlMignaGVsbG8gd29ybGQhJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2FkIGNvbnRlbnQgZnJvbSB1cmwnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCByZWxvYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXJlbG9hZCcpO1xuICAgICAgICAgICAgcmVsb2FkLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXVybCcsICdodHRwOi8vbG9jYWxob3N0LycpXG5cbiAgICAgICAgICAgIHJlbG9hZC5hZGRFdmVudExpc3RlbmVyKCdtb25zdGVyLWZldGNoZWQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci1yZWxvYWQnKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnaGVsbG8gd29ybGQnKTtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChyZWxvYWQpO1xuICAgICAgICAgICAgbW9ja2ludGVyc2VjdGlvbm9ic2VydmVyLmdldEluc3RhbmNlKCkuZW50ZXJOb2RlKCk7XG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCBjaGFpIGZyb20gJy4vaW5kZXguanMnO1xuXG5leHBvcnQgY29uc3QgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5leHBvcnQgY29uc3QgdmVyc2lvbiA9IGNoYWkudmVyc2lvbjtcbmV4cG9ydCBjb25zdCBBc3NlcnRpb24gPSBjaGFpLkFzc2VydGlvbjtcbmV4cG9ydCBjb25zdCBBc3NlcnRpb25FcnJvciA9IGNoYWkuQXNzZXJ0aW9uRXJyb3I7XG5leHBvcnQgY29uc3QgdXRpbCA9IGNoYWkudXRpbDtcbmV4cG9ydCBjb25zdCBjb25maWcgPSBjaGFpLmNvbmZpZztcbmV4cG9ydCBjb25zdCB1c2UgPSBjaGFpLnVzZTtcbmV4cG9ydCBjb25zdCBzaG91bGQgPSBjaGFpLnNob3VsZDtcbmV4cG9ydCBjb25zdCBhc3NlcnQgPSBjaGFpLmFzc2VydDtcbmV4cG9ydCBjb25zdCBjb3JlID0gY2hhaS5jb3JlO1xuXG5leHBvcnQgZGVmYXVsdCBjaGFpO1xuIiwgIi8qKioqKioqKlxuXG4gQ29udmVydCBjaGFpLWRvbSAxLjguMSB0byBlcyBtb2R1bGUsIHdpdGhvdXQgYW55IG90aGVyIG1vZGlmaWNhdGlvbi5cbiBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9uYXRoYW5ib2t0YWUvY2hhaS1kb20vYmxvYi84NmMzNDIzL2NoYWktZG9tLmpzXG4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uYXRoYW5ib2t0YWUvY2hhaS1kb20vaXNzdWVzLzM4XG5cbiBVc2FnZTpcbiBpbXBvcnQgeyBjaGFpRG9tIH0gZnJvbSAnPHBhdGgtdG8+L2NoYWktZG9tJztcbiBjaGFpLnVzZShjaGFpRG9tKTtcblxuIENvcHlyaWdodCAoYykgMjAxNSBOYXRoYW4gQmxhY2sgYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuXG4gVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUIGxpY2Vuc2UuIEZvciBhIGNvcHksIHNlZSA8aHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQ+LlxuXG4gKioqKioqKioqKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYWlEb20oY2hhaSwgdXRpbHMpIHtcbiAgICB2YXIgZmxhZyA9IHV0aWxzLmZsYWcsXG5cbiAgICAgICAgZWxUb1N0cmluZyA9IGZ1bmN0aW9uKGVsKSB7XG4gICAgICAgICAgICBsZXQgZGVzY1xuICAgICAgICAgICAgaWYgKGlzTm9kZUxpc3QoZWwpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsLmxlbmd0aCA9PT0gMCkgcmV0dXJuICdlbXB0eSBOb2RlTGlzdCdcbiAgICAgICAgICAgICAgICBkZXNjID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWwsIDAsIDUpLm1hcChlbFRvU3RyaW5nKS5qb2luKCcsICcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsLmxlbmd0aCA+IDUgPyBkZXNjICsgJy4uLiAoKycgKyAoZWwubGVuZ3RoIC0gNSkgKyAnIG1vcmUpJyA6IGRlc2NcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNIVE1MRWxlbWVudChlbCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZXNjID0gZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICBpZiAoZWwuaWQpIHtcbiAgICAgICAgICAgICAgICBkZXNjICs9ICcjJyArIGVsLmlkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWwuY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICAgICAgZGVzYyArPSAnLicgKyBTdHJpbmcoZWwuY2xhc3NOYW1lKS5yZXBsYWNlKC9cXHMrL2csICcuJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZWwuYXR0cmlidXRlcywgZnVuY3Rpb24oYXR0cikge1xuICAgICAgICAgICAgICAgIGlmIChhdHRyLm5hbWUgIT09ICdjbGFzcycgJiYgYXR0ci5uYW1lICE9PSAnaWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2MgKz0gJ1snICsgYXR0ci5uYW1lICsgKGF0dHIudmFsdWUgPyAnPVwiJyArIGF0dHIudmFsdWUgKyAnXCJdJyA6ICddJylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcmV0dXJuIGRlc2NcbiAgICAgICAgfSxcblxuICAgICAgICBhdHRyQXNzZXJ0ID0gZnVuY3Rpb24obmFtZSwgdmFsKSB7XG4gICAgICAgICAgICBsZXQgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKSwgYWN0dWFsID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpXG5cbiAgICAgICAgICAgIGlmICghZmxhZyh0aGlzLCAnbmVnYXRlJykgfHwgdW5kZWZpbmVkID09PSB2YWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgISFlbC5hdHRyaWJ1dGVzW25hbWVdXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gaGF2ZSBhbiBhdHRyaWJ1dGUgI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIG5vdCB0byBoYXZlIGFuIGF0dHJpYnV0ZSAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICwgbmFtZVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHVuZGVmaW5lZCAhPT0gdmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9PT0gYWN0dWFsXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gaGF2ZSBhbiBhdHRyaWJ1dGUgJyArIHV0aWxzLmluc3BlY3QobmFtZSkgKyAnIHdpdGggdGhlIHZhbHVlICN7ZXhwfSwgYnV0IHRoZSB2YWx1ZSB3YXMgI3thY3R9J1xuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIG5vdCB0byBoYXZlIGFuIGF0dHJpYnV0ZSAnICsgdXRpbHMuaW5zcGVjdChuYW1lKSArICcgd2l0aCB0aGUgdmFsdWUgI3thY3R9J1xuICAgICAgICAgICAgICAgICAgICAsIHZhbFxuICAgICAgICAgICAgICAgICAgICAsIGFjdHVhbFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmxhZyh0aGlzLCAnb2JqZWN0JywgYWN0dWFsKVxuICAgICAgICB9LFxuXG4gICAgICAgIGlzSFRNTEVsZW1lbnQgPSBmdW5jdGlvbihlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGVsLm5vZGVUeXBlID09PSAxIC8vIHdpbmRvdy5Ob2RlLkVMRU1FTlRfTk9ERVxuICAgICAgICB9LFxuXG4gICAgICAgIGlzTm9kZUxpc3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgTm9kZUxpc3RdJ1xuICAgICAgICB9XG5cbiAgICB1dGlscy5lbFRvU3RyaW5nID0gZWxUb1N0cmluZ1xuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnYXR0cicsIGF0dHJBc3NlcnQpXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCdhdHRyaWJ1dGUnLCBhdHRyQXNzZXJ0KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCdjbGFzcycsIGZ1bmN0aW9uKGNsYXNzTmFtZSkge1xuICAgICAgICB2YXIgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGhhdmUgY2xhc3MgI3tleHB9J1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyBub3QgdG8gaGF2ZSBjbGFzcyAje2V4cH0nXG4gICAgICAgICAgICAsIGNsYXNzTmFtZVxuICAgICAgICApXG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnaWQnLCBmdW5jdGlvbihpZCkge1xuICAgICAgICB2YXIgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgIGVsLmlkID09IGlkXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGhhdmUgaWQgI3tleHB9J1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyBub3QgdG8gaGF2ZSBpZCAje2V4cH0nXG4gICAgICAgICAgICAsIGlkXG4gICAgICAgIClcbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCdodG1sJywgZnVuY3Rpb24oaHRtbCkge1xuICAgICAgICB2YXIgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKSwgYWN0dWFsID0gZmxhZyh0aGlzLCAnb2JqZWN0JykuaW5uZXJIVE1MXG5cbiAgICAgICAgaWYgKGZsYWcodGhpcywgJ2NvbnRhaW5zJykpIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgIGFjdHVhbC5pbmRleE9mKGh0bWwpID49IDBcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAje2FjdH0gdG8gY29udGFpbiBIVE1MICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAje2FjdH0gbm90IHRvIGNvbnRhaW4gSFRNTCAje2V4cH0nXG4gICAgICAgICAgICAgICAgLCBodG1sXG4gICAgICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgIGFjdHVhbCA9PT0gaHRtbFxuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gaGF2ZSBIVE1MICN7ZXhwfSwgYnV0IHRoZSBIVE1MIHdhcyAje2FjdH0nXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyBub3QgdG8gaGF2ZSBIVE1MICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAsIGh0bWxcbiAgICAgICAgICAgICAgICAsIGFjdHVhbFxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZCgndHJpbW1lZCcsIG51bGwsIGZ1bmN0aW9uKCkge1xuICAgICAgICBmbGFnKHRoaXMsICd0cmltLXRleHQnLCB0cnVlKVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ3RleHQnLCBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKSwgY29udGFpbnMgPSBmbGFnKHRoaXMsICdjb250YWlucycpLFxuICAgICAgICAgICAgdHJpbSA9IGZsYWcodGhpcywgJ3RyaW0tdGV4dCcpLCBhY3R1YWwsIHJlc3VsdFxuXG4gICAgICAgIGlmIChpc05vZGVMaXN0KG9iaikpIHtcbiAgICAgICAgICAgIGFjdHVhbCA9IEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChvYmosIGZ1bmN0aW9uKGVsKSB7IHJldHVybiB0cmltID8gZWwudGV4dENvbnRlbnQudHJpbSgpIDogZWwudGV4dENvbnRlbnQgfSlcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRleHQpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29udGFpbnMgP1xuICAgICAgICAgICAgICAgICAgICB0ZXh0W2ZsYWcodGhpcywgJ25lZ2F0ZScpID8gJ3NvbWUnIDogJ2V2ZXJ5J10oZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zb21lLmNhbGwob2JqLCBmdW5jdGlvbihlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodHJpbSA/IGVsLnRleHRDb250ZW50LnRyaW0oKSA6IGVsLnRleHRDb250ZW50KSA9PT0gdFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICB1dGlscy5lcWwoYWN0dWFsLCB0ZXh0KVxuXG4gICAgICAgICAgICAgICAgYWN0dWFsID0gYWN0dWFsLmpvaW4oKVxuICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LmpvaW4oKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhY3R1YWwgPSBhY3R1YWwuam9pbignJylcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBjb250YWlucyA/IGFjdHVhbC5pbmRleE9mKHRleHQpID49IDAgOiBhY3R1YWwgPT09IHRleHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjdHVhbCA9IHRyaW0gPyBvYmoudGV4dENvbnRlbnQudHJpbSgpIDogb2JqLnRleHRDb250ZW50XG4gICAgICAgICAgICByZXN1bHQgPSBjb250YWlucyA/IGFjdHVhbC5pbmRleE9mKHRleHQpID49IDAgOiBhY3R1YWwgPT09IHRleHRcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvYmpEZXNjID0gZWxUb1N0cmluZyhvYmopLCB0ZXh0TXNnID0gdHJpbSA/ICd0cmltbWVkIHRleHQnIDogJ3RleHQnXG4gICAgICAgIGlmIChjb250YWlucykge1xuICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgcmVzdWx0XG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIG9iakRlc2MgKyAnIHRvIGNvbnRhaW4gI3tleHB9LCBidXQgdGhlICcgKyB0ZXh0TXNnICsgJyB3YXMgI3thY3R9J1xuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBvYmpEZXNjICsgJyBub3QgdG8gY29udGFpbiAje2V4cH0sIGJ1dCB0aGUgJyArIHRleHRNc2cgKyAnIHdhcyAje2FjdH0nXG4gICAgICAgICAgICAgICAgLCB0ZXh0XG4gICAgICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgIHJlc3VsdFxuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBvYmpEZXNjICsgJyB0byBoYXZlICcgKyB0ZXh0TXNnICsgJyAje2V4cH0sIGJ1dCB0aGUgJyArIHRleHRNc2cgKyAnIHdhcyAje2FjdH0nXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIG9iakRlc2MgKyAnIG5vdCB0byBoYXZlICcgKyB0ZXh0TXNnICsgJyAje2V4cH0nXG4gICAgICAgICAgICAgICAgLCB0ZXh0XG4gICAgICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ3ZhbHVlJywgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdmFyIGVsID0gZmxhZyh0aGlzLCAnb2JqZWN0JyksIGFjdHVhbCA9IGZsYWcodGhpcywgJ29iamVjdCcpLnZhbHVlXG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgZmxhZyh0aGlzLCAnb2JqZWN0JykudmFsdWUgPT09IHZhbHVlXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGhhdmUgdmFsdWUgI3tleHB9LCBidXQgdGhlIHZhbHVlIHdhcyAje2FjdH0nXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIG5vdCB0byBoYXZlIHZhbHVlICN7ZXhwfSdcbiAgICAgICAgICAgICwgdmFsdWVcbiAgICAgICAgICAgICwgYWN0dWFsXG4gICAgICAgIClcbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24ub3ZlcndyaXRlUHJvcGVydHkoJ2V4aXN0JywgZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICAgICAgaWYgKGlzTm9kZUxpc3Qob2JqKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICBvYmoubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCBhbiBlbXB0eSBOb2RlTGlzdCB0byBoYXZlIG5vZGVzJ1xuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgZXhpc3QnKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLm92ZXJ3cml0ZVByb3BlcnR5KCdlbXB0eScsIGZ1bmN0aW9uKF9zdXBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICAgICAgIGlmIChpc0hUTUxFbGVtZW50KG9iaikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgb2JqLmNoaWxkcmVuLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBiZSBlbXB0eSdcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGJlIGVtcHR5JylcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlTGlzdChvYmopKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgIG9iai5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gYmUgZW1wdHknXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBiZSBlbXB0eScpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24ub3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kKCdsZW5ndGgnLFxuICAgICAgICBmdW5jdGlvbihfc3VwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICAgICAgICAgICBpZiAoaXNOb2RlTGlzdChvYmopIHx8IGlzSFRNTEVsZW1lbnQob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYWN0dWFsTGVuZ3RoID0gb2JqLmNoaWxkcmVuID8gb2JqLmNoaWxkcmVuLmxlbmd0aCA6IG9iai5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxMZW5ndGggPT09IGxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gaGF2ZSAje2V4cH0gY2hpbGRyZW4gYnV0IGl0IGhhZCAje2FjdH0gY2hpbGRyZW4nXG4gICAgICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgaGF2ZSAje2V4cH0gY2hpbGRyZW4nXG4gICAgICAgICAgICAgICAgICAgICAgICAsIGxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgLCBhY3R1YWxMZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmdW5jdGlvbihfc3VwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKVxuXG5cbiAgICBjaGFpLkFzc2VydGlvbi5vdmVyd3JpdGVNZXRob2QoJ21hdGNoJywgZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAgICAgICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAgICAgICBpZiAoaXNIVE1MRWxlbWVudChvYmopKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgIG9iai5tYXRjaGVzKHNlbGVjdG9yKVxuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBtYXRjaCAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBtYXRjaCAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICwgc2VsZWN0b3JcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTm9kZUxpc3Qob2JqKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICAoISFvYmoubGVuZ3RoICYmIEFycmF5LnByb3RvdHlwZS5ldmVyeS5jYWxsKG9iaiwgZnVuY3Rpb24oZWwpIHsgcmV0dXJuIGVsLm1hdGNoZXMoc2VsZWN0b3IpIH0pKVxuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBtYXRjaCAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBtYXRjaCAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICwgc2VsZWN0b3JcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24ub3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kKCdjb250YWluJyxcbiAgICAgICAgZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc3ViaXRlbSkge1xuICAgICAgICAgICAgICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICAgICAgICAgIGlmIChpc0hUTUxFbGVtZW50KG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzdWJpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgISFvYmoucXVlcnlTZWxlY3RvcihzdWJpdGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIGNvbnRhaW4gI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBjb250YWluICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHN1Yml0ZW0pXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmouY29udGFpbnMoc3ViaXRlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBjb250YWluICcgKyBlbFRvU3RyaW5nKHN1Yml0ZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGNvbnRhaW4gJyArIGVsVG9TdHJpbmcoc3ViaXRlbSkpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgX3N1cGVyLmNhbGwodGhpcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIClcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZGVzY2VuZGFudCcsIGZ1bmN0aW9uKHN1Yml0ZW0pIHtcbiAgICAgICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpLCBhY3R1YWwgPSBzdWJpdGVtXG5cbiAgICAgICAgaWYgKHR5cGVvZiBzdWJpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgYWN0dWFsID0gb2JqLnF1ZXJ5U2VsZWN0b3Ioc3ViaXRlbSlcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICEhYWN0dWFsXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gaGF2ZSBkZXNjZW5kYW50ICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgaGF2ZSBkZXNjZW5kYW50ICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAsIHN1Yml0ZW0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICBvYmouY29udGFpbnMoc3ViaXRlbSlcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBjb250YWluICcgKyBlbFRvU3RyaW5nKHN1Yml0ZW0pXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGNvbnRhaW4gJyArIGVsVG9TdHJpbmcoc3ViaXRlbSkpXG4gICAgICAgIH1cblxuICAgICAgICBmbGFnKHRoaXMsICdvYmplY3QnLCBhY3R1YWwpXG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZGVzY2VuZGFudHMnLCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JyksXG4gICAgICAgICAgICBhY3R1YWwgPSBvYmoucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcilcbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAhIWFjdHVhbC5sZW5ndGhcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIGhhdmUgZGVzY2VuZGFudHMgI3tleHB9J1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGhhdmUgZGVzY2VuZGFudHMgI3tleHB9J1xuICAgICAgICAgICAgLCBzZWxlY3RvcilcbiAgICAgICAgZmxhZyh0aGlzLCAnb2JqZWN0JywgYWN0dWFsKVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnZGlzcGxheWVkJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlbCA9IGZsYWcodGhpcywgJ29iamVjdCcpLFxuICAgICAgICAgICAgYWN0dWFsID0gZG9jdW1lbnQuYm9keS5jb250YWlucyhlbCkgPyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCkuZGlzcGxheSA6IGVsLnN0eWxlLmRpc3BsYXlcblxuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgIGFjdHVhbCAhPT0gJ25vbmUnXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGJlIGRpc3BsYXllZCwgYnV0IGl0IHdhcyBub3QnXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIG5vdCBiZSBkaXNwbGF5ZWQsIGJ1dCBpdCB3YXMgYXMgJyArIGFjdHVhbFxuICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgKVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRQcm9wZXJ0eSgndmlzaWJsZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKSxcbiAgICAgICAgICAgIGFjdHVhbCA9IGRvY3VtZW50LmJvZHkuY29udGFpbnMoZWwpID8gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLnZpc2liaWxpdHkgOiBlbC5zdHlsZS52aXNpYmlsaXR5XG5cbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICBhY3R1YWwgIT09ICdoaWRkZW4nICYmIGFjdHVhbCAhPT0gJ2NvbGxhcHNlJ1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBiZSB2aXNpYmxlLCBidXQgaXQgd2FzICcgKyAoYWN0dWFsID09PSAnaGlkZGVuJyA/ICdoaWRkZW4nIDogJ2NvbGxhcHNlZCcpXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIG5vdCBiZSB2aXNpYmxlLCBidXQgaXQgd2FzJ1xuICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgKVxuICAgIH0pXG59IiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyTW9jayhcbiAgICB7XG4gICAgICAgIHJvb3QgPSBudWxsLFxuICAgICAgICByb290TWFyZ2luID0gJycsXG4gICAgICAgIHRocmVzaG9sZHMgPSBbXSxcbiAgICAgICAgZGlzY29ubmVjdCA9ICgpID0+IG51bGwsXG4gICAgICAgIG9ic2VydmUgPSAoKSA9PiBudWxsLFxuICAgICAgICB0YWtlUmVjb3JkcyA9ICgpID0+IFtdLFxuICAgICAgICB1bm9ic2VydmUgPSAoKSA9PiBudWxsLFxuICAgIH0gPSB7fSkge1xuXG4gICAgY29uc3Qgc2F2ZWRJbXBsZW1lbnRhdGlvbiA9IHdpbmRvdy5JbnRlcnNlY3Rpb25PYnNlcnZlcjtcblxuICAgIGxldCBsYXN0T2JqZWN0O1xuXG4gICAgY2xhc3MgTW9ja0ludGVyc2VjdGlvbk9ic2VydmVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgICAgICAgICB0aGlzLnJvb3RNYXJnaW4gPSByb290TWFyZ2luO1xuICAgICAgICAgICAgdGhpcy50aHJlc2hvbGRzID0gdGhyZXNob2xkcztcbiAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdCA9IGRpc2Nvbm5lY3Q7XG4gICAgICAgICAgICB0aGlzLm9ic2VydmUgPSBvYnNlcnZlO1xuICAgICAgICAgICAgdGhpcy50YWtlUmVjb3JkcyA9IHRha2VSZWNvcmRzO1xuICAgICAgICAgICAgdGhpcy51bm9ic2VydmUgPSB1bm9ic2VydmU7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgICAgICAgICBsYXN0T2JqZWN0ID0gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIGVudGVyTm9kZSgpIHtcblxuICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IFtdO1xuICAgICAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpc0ludGVyc2VjdGluZzogdHJ1ZVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgdGhpc1snY2FsbGJhY2snXShlbnRyaWVzLCB0aGlzKTtcbiAgICAgICAgfVxuXG5cbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInLCB7XG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBNb2NrSW50ZXJzZWN0aW9uT2JzZXJ2ZXJcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWwsICdJbnRlcnNlY3Rpb25PYnNlcnZlcicsIHtcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IE1vY2tJbnRlcnNlY3Rpb25PYnNlcnZlclxuICAgIH0pO1xuXG5cbiAgICByZXR1cm4ge1xuICAgICAgICByZXN0b3JlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBzYXZlZEltcGxlbWVudGF0aW9uO1xuICAgICAgICB9LFxuICAgICAgICBnZXRJbnN0YW5jZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RPYmplY3Q7XG4gICAgICAgIH1cbiAgICB9XG59IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHRlbmR9IGZyb20gXCIuLi8uLi9zb3VyY2UvZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG4vL2ltcG9ydCBTdG9yYWdlIGZyb20gXCJkb20tc3RvcmFnZVwiO1xuXG5leHBvcnQgY29uc3QgaXNCcm93c2VyID0gbmV3IEZ1bmN0aW9uKFwidHJ5IHtyZXR1cm4gdGhpcz09PXdpbmRvdzt9Y2F0Y2goZSl7IHJldHVybiBmYWxzZTt9XCIpO1xuZXhwb3J0IGNvbnN0IGlzTm9kZSA9IG5ldyBGdW5jdGlvbihcInRyeSB7cmV0dXJuIHRoaXM9PT1nbG9iYWw7fWNhdGNoKGUpe3JldHVybiBmYWxzZTt9XCIpO1xuXG5sZXQgSlNET01FeHBvcnQgPSBudWxsO1xuXG4vKipcbiAqIHRoaXMgaGVscGVyIGZ1bmN0aW9uIGNyZWF0ZXMgdGhlIGRvbSBzdGFjayBpbiB0aGUgbm9kZSBlbnZpcm9ubWVudFxuICpcbiAqIEByZXR1cm4ge1Byb21pc2U8dW5rbm93bj58UHJvbWlzZTx2b2lkPn1cbiAqL1xuZnVuY3Rpb24gaW5pdEpTRE9NKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiAmJiB3aW5kb3dbJ0RPTVBhcnNlciddKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cblxuICAgIGNvbnN0IGcgPSBnZXRHbG9iYWwoKTtcblxuICAgIG9wdGlvbnMgPSBleHRlbmQoe30sIHtcbiAgICAgICAgcHJldGVuZFRvQmVWaXN1YWw6IHRydWUsXG4gICAgICAgIGNvbnRlbnRUeXBlOiBcInRleHQvaHRtbFwiLFxuICAgICAgICBpbmNsdWRlTm9kZUxvY2F0aW9uczogdHJ1ZSxcbiAgICAgICAgc3RvcmFnZVF1b3RhOiAxMDAwMDAwMCxcbiAgICAgICAgcnVuU2NyaXB0czogXCJkYW5nZXJvdXNseVwiLFxuICAgICAgICByZXNvdXJjZXM6IFwidXNhYmxlXCJcbiAgICB9LCBvcHRpb25zIHx8IHt9KVxuXG4gICAgcmV0dXJuIGltcG9ydChcImpzZG9tXCIpLnRoZW4oKHtKU0RPTX0pID0+IHtcbiAgICAgICAgSlNET01FeHBvcnQgPSBKU0RPTTtcbiAgICAgICAgY29uc3Qge3dpbmRvd30gPSBuZXcgSlNET00oYDxodG1sPlxuPGhlYWQ+XG48L2hlYWQ+XG48Ym9keT5cbjxkaXYgaWQ9XCJtb2Nrc1wiPjwvZGl2PlxuPC9ib2R5PmAsIG9wdGlvbnMpO1xuXG4gICAgICAgIGdbJ3dpbmRvdyddID0gd2luZG93O1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAnQmxvYicsXG4gICAgICAgICAgICAgICAgICAgICdDU1NTdHlsZVNoZWV0JyxcbiAgICAgICAgICAgICAgICAgICAgJ2N1c3RvbUVsZW1lbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ0N1c3RvbUV2ZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2RvY3VtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0RvY3VtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0RvY3VtZW50RnJhZ21lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnRE9NUGFyc2VyJyxcbiAgICAgICAgICAgICAgICAgICAgJ0VsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnRWxlbWVudEludGVybmFscycsXG4gICAgICAgICAgICAgICAgICAgICdFdmVudCcsXG4gICAgICAgICAgICAgICAgICAgICdFdmVudFRhcmdldCcsXG4gICAgICAgICAgICAgICAgICAgICdnZXRDb21wdXRlZFN0eWxlJyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxCdXR0b25FbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxDb2xsZWN0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxEaXZFbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxEb2N1bWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MRWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MRm9ybUVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTElucHV0RWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MU2NyaXB0RWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MU2VsZWN0RWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MVGVtcGxhdGVFbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxUZXh0QXJlYUVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSW5wdXRFdmVudCcsXG4gICAgICAgICAgICAgICAgICAgICdLZXlib2FyZEV2ZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ011dGF0aW9uT2JzZXJ2ZXInLFxuICAgICAgICAgICAgICAgICAgICAnbmF2aWdhdG9yJyxcbiAgICAgICAgICAgICAgICAgICAgJ05vZGUnLFxuICAgICAgICAgICAgICAgICAgICAnTm9kZUZpbHRlcicsXG4gICAgICAgICAgICAgICAgICAgICdOb2RlTGlzdCcsXG4gICAgICAgICAgICAgICAgICAgICdzZWxmJyxcbiAgICAgICAgICAgICAgICAgICAgJ1NoYWRvd1Jvb3QnLFxuICAgICAgICAgICAgICAgICAgICAnWE1MU2VyaWFsaXplcicsXG4gICAgICAgICAgICAgICAgXS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGdba2V5XSA9IHdpbmRvd1trZXldXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpbXBvcnQoXCJkb20tc3RvcmFnZVwiKS50aGVuKCh7ZGVmYXVsdDogU3RvcmFnZX0pID0+IHtcblxuXG4gICAgICAgICAgICAgICAgICAgIGcubG9jYWxTdG9yYWdlID0gbmV3IFN0b3JhZ2UobnVsbCwge3N0cmljdDogdHJ1ZX0pO1xuICAgICAgICAgICAgICAgICAgICBnLnNlc3Npb25TdG9yYWdlID0gbmV3IFN0b3JhZ2UobnVsbCwge3N0cmljdDogdHJ1ZX0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvd1snbG9jYWxTdG9yYWdlJ10gPSBnLmxvY2FsU3RvcmFnZTtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93WydzZXNzaW9uU3RvcmFnZSddID0gZy5zZXNzaW9uU3RvcmFnZTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHJlc29sdmUoZyk7XG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cblxuICAgIH0pO1xufVxuXG5leHBvcnQge2luaXRKU0RPTSwgSlNET01FeHBvcnR9IFxuXG4iLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IGNoYWkgZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5cbi8vIGxhbmd1YWdlPWh0bWxcbmxldCBodG1sMSA9IGBcbiAgICA8bW9uc3Rlci10YWJzIGlkPVwibXl0YWJzXCI+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbD1cIlRBQjFcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgRGFzIGlzdCB0YWIgMVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbD1cIlRBQjJcIj5cbiAgICAgICAgICAgIERhcyBpc3QgdGFiIDJcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICBEYXMgaXN0IHRhYiAzIG9obmUgYnV0dG9uXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PjwvZGl2PlxuICAgIDwvbW9uc3Rlci10YWJzPlxuYDtcblxubGV0IFRhYnM7XG5cbmRlc2NyaWJlKCdUYWJzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuXG4gICAgICAgICAgICBpZiAoIWdsb2JhbFsnY3J5cHRvJ10pIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBDcnlwdG8gPSBtWydDcnlwdG8nXTtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsWydjcnlwdG8nXSA9IG5ldyBDcnlwdG8oKTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90YWJzLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgVGFicyA9IG1bJ1RhYnMnXTtcbiAgICAgICAgICAgIH0pKVxuXG4gICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKT0+e1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBidXR0b25zIGFuZCB0YWJzJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFicyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteXRhYnMnKVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QodGFicykuaXMuaW5zdGFuY2VvZihUYWJzKTtcblxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuYXYgPSB0YWJzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignbmF2Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBidXR0b25zID0gdGFicy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbltwYXJ0PWJ1dHRvbl0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChidXR0b25zWzBdKS5pcy5pbnN0YW5jZW9mKEhUTUxCdXR0b25FbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChuYXYuaGFzQ2hpbGROb2RlcygpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGJ1dHRvbnMubGVuZ3RoKS50by5iZS5lcXVhbCg0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKVxuXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sIDApXG5cblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtSZXNpemVPYnNlcnZlck1vY2t9IGZyb20gXCIuLi8uLi8uLi91dGlsL3Jlc2l6ZS1vYnNlcnZlci5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgPG1vbnN0ZXItc3RhdGUtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnZhbHVlcy5jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItb3B0aW9ucz0ne1xuICBcInVybFwiOiBcIm1vY2stZGF0YS5qc29uXCIsXG4gIFwibWFwcGluZ1wiOiB7XG4gICAgXCJ2YWx1ZVBhdGhcIjogXCJcXCR7Zmlyc3RfbmFtZX0gXFwke2xhc3RfbmFtZX1cIixcbiAgICBcImtleVBhdGhcIjogXCJpZFwiXG4gIH0sXG4gICAgICBcInR5cGVcIjpcImNoZWNrYm94XCJcblxufSc+PC9tb25zdGVyLXN0YXRlLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBTdGF0ZUJ1dHRvbjtcblxuZGVzY3JpYmUoJ1N0YXRlQnV0dG9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgIH0pXG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cbiAgICAgICAgICAgIGlmKCFnbG9iYWwuUmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICBnbG9iYWwuUmVzaXplT2JzZXJ2ZXIgPSBSZXNpemVPYnNlcnZlck1vY2s7XG4gICAgICAgICAgICB9ICAgICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3RhdGUtYnV0dG9uLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgU3RhdGVCdXR0b24gPSBtWydTdGF0ZUJ1dHRvbiddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCduZXcgU3RhdGVCdXR0b24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLXN0YXRlLWJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXN0YXRlLWJ1dHRvbicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIHN0YXRlLWJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zdGF0ZS1idXR0b24nKSkuaXMuaW5zdGFuY2VvZihTdGF0ZUJ1dHRvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgbm8gb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zdGF0ZS1idXR0b24nKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKGJ1dHRvbik7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBidXR0b24uc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdidXR0b24nKTtcblxuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucykuaXMuaW5zdGFuY2VvZihIVE1MQnV0dG9uRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zLmhhc0NoaWxkTm9kZXMoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0sIDApXG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiXG5cblxuZXhwb3J0IHtSZXNpemVPYnNlcnZlck1vY2t9XG5cblxuY2xhc3MgUmVzaXplT2JzZXJ2ZXJNb2NrIHtcbiAgICBjb25zdHJ1Y3RvcihjYWxsYmFjaykge1xuICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgIHRoaXMuZWxlbWVudHMgPSBbXTtcbiAgICB9XG5cbiAgICBvYnNlcnZlKGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHVub2JzZXJ2ZShlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZWxlbWVudHMgPSB0aGlzLmVsZW1lbnRzLmZpbHRlcigoZWwpID0+IGVsICE9PSBlbGVtZW50KTtcbiAgICB9XG5cbiAgICBkaXNjb25uZWN0KCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRzID0gW107XG4gICAgfVxuXG4gICAgdHJpZ2dlclJlc2l6ZShlbnRyaWVzKSB7XG4gICAgICAgIHRoaXMuY2FsbGJhY2soZW50cmllcywgdGhpcyk7XG4gICAgfVxufVxuXG4iLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IGNoYWkgZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7UmVzaXplT2JzZXJ2ZXJNb2NrfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9yZXNpemUtb2JzZXJ2ZXIubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxubGV0IGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYDtcblxubGV0IGh0bWwyID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgIDxtb25zdGVyLXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDp2YWx1ZXMuY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLW9wdGlvbnM9J3tcbiAgXCJ1cmxcIjogXCJtb2NrLWRhdGEuanNvblwiLFxuICBcIm1hcHBpbmdcIjoge1xuICAgIFwic2VsZWN0b3JcIjogXCIqXCIsXG4gICAgXCJ2YWx1ZVRlbXBsYXRlXCI6IFwiXFwke2ZpcnN0X25hbWV9IFxcJHtsYXN0X25hbWV9XCIsXG4gICAgXCJsYWJlbFRlbXBsYXRlXCI6IFwiaWRcIlxuICB9LFxuICAgICAgXCJ0eXBlXCI6XCJjaGVja2JveFwiXG5cbn0nPjwvbW9uc3Rlci1zZWxlY3Q+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgU2VsZWN0LCBmZXRjaFJlZmVyZW5jZTtcblxuZGVzY3JpYmUoJ1NlbGVjdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxbJ2ZldGNoJ107XG5cbiAgICAgICAgICAgIGlmICghZ2xvYmFsLlJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsLlJlc2l6ZU9ic2VydmVyID0gUmVzaXplT2JzZXJ2ZXJNb2NrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3NlbGVjdC5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFNlbGVjdCA9IG1bJ1NlbGVjdCddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdXaXRoIGZldGNoJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuXG4gICAgICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgTWFwO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdDIpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQganNvbiA9IEpTT04ucGFyc2UoYFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZpcnN0X25hbWVcIjogXCJBbGV4aWFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYXN0X25hbWVcIjogXCJPdWdodHJpZ2h0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJhb3VnaHRyaWdodDBAZXhibG9nLmpwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZGVyXCI6IFwiQWdlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvdW50cnlcIjogXCJtblwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZpcnN0X25hbWVcIjogXCJCZXRoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGFzdF9uYW1lXCI6IFwiQm9kZGluZ3RvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVtYWlsXCI6IFwiYmJvZGRpbmd0b24xQHN0YXRjb3VudGVyLmNvbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdlbmRlclwiOiBcIk5vbi1iaW5hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb3VudHJ5XCI6IFwic3lcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZpcnN0X25hbWVcIjogXCJTaGVsbGlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYXN0X25hbWVcIjogXCJBJ0JhcnJvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVtYWlsXCI6IFwic2FiYXJyb3cyQGdvb2dsZS5jby51a1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdlbmRlclwiOiBcIlBvbHlnZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb3VudHJ5XCI6IFwibm9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdYCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZTIoSlNPTi5zdHJpbmdpZnkoanNvbikpXG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB9O1xuXG5cbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZldGNoUmVmZXJlbmNlO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci1zZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDInKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci1zZWxlY3QnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBzZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zZWxlY3QnKTtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc2VsZWN0KS5pcy5pbnN0YW5jZW9mKFNlbGVjdCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIG9wdGlvbnMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zZWxlY3QnKTtcbiAgICAgICAgICAgICAgICBzZWxlY3Quc2V0T3B0aW9uKCd1cmwnLCAnaHR0cHM6Ly9leGFtcGxlLmNvbScpXG4gICAgICAgICAgICAgICAgc2VsZWN0LnNldE9wdGlvbignbWFwcGluZy5zZWxlY3RvcicsICcqJylcbiAgICAgICAgICAgICAgICBzZWxlY3Quc2V0T3B0aW9uKCdtYXBwaW5nLmxhYmVsVGVtcGxhdGUnLCAnJHtpZH0nKVxuICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRPcHRpb24oJ21hcHBpbmcudmFsdWVUZW1wbGF0ZScsICcke2lkfScpXG5cbiAgICAgICAgICAgICAgICBzZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignbW9uc3Rlci1vcHRpb25zLXNldCcsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBzZWxlY3Quc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zLmxlbmd0aCkuaXMuZXF1YWwoMyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25IdG1sID0gc2VsZWN0LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbnNdJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4uaHRtbCgnZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJvcHRpb25zLTBcIicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25IdG1sKS5jb250YWluLmh0bWwoJ2RhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwib3B0aW9ucy0xXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9uSHRtbCkuY29udGFpbi5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtMlwiJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4ubm90Lmh0bWwoJ2RhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwib3B0aW9ucy0zXCInKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICAgICAgICAgICAgICB9LCAxMClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHNlbGVjdCk7XG5cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgbm8gb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zZWxlY3QnKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHNlbGVjdCk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBzZWxlY3Quc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uc10nKTtcblxuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucykuaXMuaW5zdGFuY2VvZihIVE1MRGl2RWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IG9wdGlvbnMucGFyZW50Tm9kZS5vdXRlckhUTUw7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGIgPSBvcHRpb25zLmNoaWxkTm9kZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucy5oYXNDaGlsZE5vZGVzKCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7RGF0YVVybH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuXG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtSZXNpemVPYnNlcnZlck1vY2t9IGZyb20gXCIuLi8uLi8uLi91dGlsL3Jlc2l6ZS1vYnNlcnZlci5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5sZXQgaHRtbDEsIG9wdGlvbnMsIGh0bWwyLCBDb25maXJtQnV0dG9uO1xuXG5kZXNjcmliZSgnQ29uZmlybUJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7ICAgIFxuICAgICAgICBcbiAgICAgICAgaWYoIWdsb2JhbC5SZXNpemVPYnNlcnZlcikge1xuICAgICAgICAgICAgZ2xvYmFsLlJlc2l6ZU9ic2VydmVyID0gUmVzaXplT2JzZXJ2ZXJNb2NrO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucyA9IG5ldyBEYXRhVXJsKGJ0b2EoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgcG9wcGVyOiB7XG4gICAgICAgICAgICAgICAgcGxhY2VtZW50OiBcInRvcFwiXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSksICdhcHBsaWNhdGlvbi9qc29uJywgdHJ1ZSkudG9TdHJpbmcoKVxuXG4gICAgICAgIGh0bWwyID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgIDxtb25zdGVyLWNvbmZpcm0tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnZhbHVlcy5jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItb3B0aW9ucz1cImAgKyBvcHRpb25zICsgYFwiPjwvbW9uc3Rlci1jb25maXJtLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbmA7XG5cbiAgICAgICAgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gXG5cblxuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9jb25maXJtLWJ1dHRvbi5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIENvbmZpcm1CdXR0b24gPSBtWydDb25maXJtQnV0dG9uJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldyBDb25maXJtQnV0dG9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci1jb25maXJtLWJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWNvbmZpcm0tYnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbmZpcm0tYnV0dG9uJykpLmlzLmluc3RhbmNlb2YoQ29uZmlybUJ1dHRvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgY2hpbGRzJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbmZpcm0tYnV0dG9uJyk7XG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChidXR0b24pO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gYnV0dG9uLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignbW9uc3Rlci1idXR0b24nKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRlbnQuaGFzQ2hpbGROb2RlcygpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtEYXRhc291cmNlfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7UHJvY2Vzc2luZ30gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS91dGlsL3Byb2Nlc3NpbmcubWpzXCI7XG5cbmltcG9ydCB7c3RvcmFnZU9iamVjdFN5bWJvbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPG1vbnN0ZXItZm9ybSBpZD1cImZvcm0xXCI+PC9tb25zdGVyLWZvcm0+XG4gICAgPC9kaXY+XG5gO1xubGV0IGh0bWwyID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgICAgICA8bW9uc3Rlci1mb3JtIGlkPVwiZm9ybTJcIlxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1kYXRhc291cmNlPVwibG9jYWxzdG9yYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItZGF0YXNvdXJjZS1hcmd1bWVudHM9J1widGVzdC1rZXlcIic+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiY29udHJvbDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJjb250cm9sMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6YVwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiY29udHJvbDJcIlxuICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6YlwiPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9tb25zdGVyLWZvcm0+XG4gICAgPC9kaXY+XG5gO1xubGV0IGh0bWwzID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0M1wiPlxuICAgICAgICA8bW9uc3Rlci1mb3JtIGlkPVwiZm9ybTNcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJjb250cm9sMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbnRyb2wxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDphXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDphXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJjb250cm9sMlwiXG4gICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDpiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOmJcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImJ1dHRvbjFcIiBkYXRhLW1vbnN0ZXItZGF0YXNvdXJjZS1oYW5kbGVyPVwid3JpdGVcIj5CdXR0b248L2J1dHRvbj5cblxuICAgICAgICA8L21vbnN0ZXItZm9ybT5cbiAgICA8L2Rpdj5cbmA7XG5cbmRlc2NyaWJlKCdGb3JtJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGZvcm07XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICBcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoeCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9mb3JtLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybSA9IG1bJ0Zvcm0nXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgndGVzdC1rZXknKVxuICAgIH0pXG5cblxuICAgIGRlc2NyaWJlKFwicmVnaXN0ZXIgb3duIGRhdGFzb3VyY2VzXCIsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBjb25zdCBzeW0gPSBTeW1ib2wuZm9yKCdAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9AQGRhdGEnKTtcblxuICAgICAgICBsZXQgdGVzdDNEYXRhc291cmNlID0gY2xhc3MgZXh0ZW5kcyBEYXRhc291cmNlIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlYWQoKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tzeW1dLnNldFN1YmplY3Qoe2E6IFwidGVzdDNcIiwgYjogXCJ0ZXN0M1wifSlcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZltzeW1dLmdldFJlYWxTdWJqZWN0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMztcblxuICAgICAgICAgICAgLy8gcmVnaXN0ZXIgb3duIGRhdGFzb3VyY2UsIGFmdGVyIHRoZSBmb3JtIGlzIGxvYWRlZFxuICAgICAgICAgICAgLy8gYmVjYXVzZSBpbiB0aGUgd2lsZCwgdGhlIGZvcm0gaXMgcGFyc2VkIGJlZm9yZSB0aGUgZGF0YXNvdXJjZSBpcyByZWdpc3RlcmVkXG4gICAgICAgICAgICBmb3JtLnJlZ2lzdGVyRGF0YXNvdXJjZSgndGVzdDMnLCB0ZXN0M0RhdGFzb3VyY2UpO1xuXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJzaG91bGQgYmUgYWJsZSB0byByZWdpc3RlciBvd24gZGF0YXNvdXJjZXNcIiwgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBtID0gZm9ybS5nZXREYXRhc291cmNlcygndGVzdDMnKVxuICAgICAgICAgICAgZXhwZWN0KG0uZ2V0KCd0ZXN0MycpKS5pcy5hLmVxdWFsKHRlc3QzRGF0YXNvdXJjZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHRlc3REYXRhc291cmNlID0gbmV3IHRlc3QzRGF0YXNvdXJjZSgpO1xuXG4gICAgICAgICAgICBjb25zdCBmb3JtRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JtMycpO1xuICAgICAgICAgICAgZm9ybUVsZW1lbnQuc2V0T3B0aW9uKFwiZGF0YXNvdXJjZVwiLCB0ZXN0RGF0YXNvdXJjZSk7XG4gICAgICAgICAgICBmb3JtRWxlbWVudC5yZWZyZXNoKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdiA9IGZvcm1FbGVtZW50LmdldFZhbHVlcygpXG4gICAgICAgICAgICAgICAgZXhwZWN0KHYpLmlzLmRlZXAuZXF1YWwoe2E6IFwidGVzdDNcIiwgYjogXCJ0ZXN0M1wifSlcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KVxuXG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoXCJyZWdpc3RlciBhbmQgdW5yZWdpc3RlciBkYXRhc291cmNlc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IFRlc3REYXRhc291cmNlID0gY2xhc3MgZXh0ZW5kcyBEYXRhc291cmNlIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpdChcInNob3VsZCByZWdpc3RlciBuZXcgZGF0YXNvdXJjZVwiLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGZvcm0ucmVnaXN0ZXJEYXRhc291cmNlKCd0ZXN0JywgVGVzdERhdGFzb3VyY2UpO1xuICAgICAgICAgICAgbGV0IG0gPSBmb3JtLmdldERhdGFzb3VyY2VzKCd0ZXN0JylcbiAgICAgICAgICAgIGV4cGVjdChtLmdldCgndGVzdCcpKS5pcy5hLmVxdWFsKFRlc3REYXRhc291cmNlKTtcblxuICAgICAgICAgICAgZm9ybS51bnJlZ2lzdGVyRGF0YXNvdXJjZSgndGVzdCcpO1xuICAgICAgICAgICAgbSA9IGZvcm0uZ2V0RGF0YXNvdXJjZXMoJ3Rlc3QnKVxuXG4gICAgICAgICAgICBleHBlY3QobS5nZXQoJ3Rlc3QnKSkudG8uYmUudW5kZWZpbmVkO1xuICAgICAgICB9KVxuXG4gICAgfSlcblxuXG4gICAgZGVzY3JpYmUoXCJleGFtcGxlNC1kb2NcIiwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdChcInNob3VsZCBpbml0IGJ1dHRvbiB3aXRoIGNsaWNrIGV2ZW50XCIsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICBjbGFzcyBNb2NrRGF0YXNvdXJjZSBleHRlbmRzIERhdGFzb3VyY2Uge1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlYWQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFtzdG9yYWdlT2JqZWN0U3ltYm9sXSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm00ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1mb3JtJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YXNvdXJjZTQgPSBuZXcgTW9ja0RhdGFzb3VyY2UoKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZGF0YXNvdXJjZTQgaW5zdGFuY2VvZiBEYXRhc291cmNlKS5pcy50cnVlO1xuICAgICAgICAgICAgICAgIGZvcm00LnNldE9wdGlvbignZGF0YXNvdXJjZScsIGRhdGFzb3VyY2U0KVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXQ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxuICAgICAgICAgICAgICAgIGlucHV0NC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCAnZmllbGQnKTtcbiAgICAgICAgICAgICAgICBpbnB1dDQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItYXR0cmlidXRlcycsICd2YWx1ZSBwYXRoOmhlYWRlcnMuSG9zdCcpO1xuICAgICAgICAgICAgICAgIGlucHV0NC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1iaW5kJywgJ3BhdGg6aGVhZGVycy5Ib3N0Jyk7XG4gICAgICAgICAgICAgICAgZm9ybTQuYXBwZW5kQ2hpbGQoaW5wdXQ0KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGJ1dHRvbjQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXN0YXRlLWJ1dHRvbicpO1xuICAgICAgICAgICAgICAgIGJ1dHRvbjQuc2V0T3B0aW9uKCdsYWJlbHMuYnV0dG9uJywgJ2NsaWNrIScpXG4gICAgICAgICAgICAgICAgYnV0dG9uNC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1kYXRhc291cmNlLWhhbmRsZXInLCAnd3JpdGUnKVxuICAgICAgICAgICAgICAgIGJ1dHRvbjQuc2V0T3B0aW9uKCdhY3Rpb25zLmNsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgZm9ybTQuYXBwZW5kQ2hpbGQoYnV0dG9uNCk7XG5cbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKS5hcHBlbmRDaGlsZChmb3JtNCk7XG5cbiAgICAgICAgICAgICAgICBuZXcgUHJvY2Vzc2luZygpLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b240LmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApLnJ1bigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG5cbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9XG4gICAgKVxuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW4gb2JqZWN0bGluaycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWZvcm0nKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKGZvcm1Db250cm9sKTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWZvcm0gZGF0YS1tb25zdGVyLW9iamVjdGxpbms9XCJTeW1ib2woQHNjaHVrYWkvbW9uc3Rlci9kb20vY3VzdG9tLWVsZW1lbnRAQG9wdGlvbnMtdXBkYXRlci1saW5rKVwiPjwvbW9uc3Rlci1mb3JtPicpXG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdIVE1MLVRlbXBsYXRlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUgaHRtbDEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndGVzdC1rZXknLCAne30nKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci1mb3JtJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci1mb3JtJyk7XG4gICAgICAgICAgICB9KTtcblxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZSBodG1sMicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgYmVmb3JlRWFjaCgoZG9uZSkgPT4ge1xuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0ZXN0LWtleScsIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgYTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgYjogNyxcbiAgICAgICAgICAgICAgICAgICAgYzogWzEsIDUsIDZdLFxuICAgICAgICAgICAgICAgICAgICBkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci1mb3JtJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItZm9ybScpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgY2xpY2snLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItZm9ybScpO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JtMicpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWZvcm0uc2hhZG93Um9vdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUobmV3IEVycm9yKCdubyBzaGFkb3dSb290JykpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbDEgPSBmb3JtLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcignc2xvdCcpLmFzc2lnbmVkRWxlbWVudHMoKVswXS5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wxLmNsaWNrKCk7XG5cblxuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSwgMSlcblxuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxufSlcbiIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICA8bW9uc3Rlci10cmVlLXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDp2YWx1ZXMuY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLW9wdGlvbnM9J3tcbiAgXCJ1cmxcIjogXCJtb2NrLWRhdGEuanNvblwiLFxuICBcIm1hcHBpbmdcIjoge1xuICAgIFwidmFsdWVUZW1wbGF0ZVwiOiBcIlxcJHtmaXJzdF9uYW1lfSBcXCR7bGFzdF9uYW1lfVwiLFxuICAgIFwibGFiZWxUZW1wbGF0ZVwiOiBcImlkXCIsXG4gICAgXCJzZWxlY3RvclwiOiBcIipcIlxuICB9LFxuICAgICAgXCJ0eXBlXCI6XCJjaGVja2JveFwiXG5cbn0nPjwvbW9uc3Rlci10cmVlLXNlbGVjdD5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBUcmVlU2VsZWN0LCBmZXRjaFJlZmVyZW5jZTtcblxuZGVzY3JpYmUoJ1RyZWVzZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxbJ2ZldGNoJ107XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdHJlZS1zZWxlY3QubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBUcmVlU2VsZWN0ID0gbVsnVHJlZVNlbGVjdCddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdXaXRoIGZldGNoJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuXG4gICAgICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgTWFwO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdDIpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQganNvbiA9IEpTT04ucGFyc2UoYFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZpcnN0X25hbWVcIjogXCJBbGV4aWFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYXN0X25hbWVcIjogXCJPdWdodHJpZ2h0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJhb3VnaHRyaWdodDBAZXhibG9nLmpwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZGVyXCI6IFwiQWdlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvdW50cnlcIjogXCJtblwiICxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwYXJlbnRcIjogXCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXJzdF9uYW1lXCI6IFwiQmV0aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhc3RfbmFtZVwiOiBcIkJvZGRpbmd0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbWFpbFwiOiBcImJib2RkaW5ndG9uMUBzdGF0Y291bnRlci5jb21cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnZW5kZXJcIjogXCJOb24tYmluYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY291bnRyeVwiOiBcInN5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFyZW50XCI6IFwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyc3RfbmFtZVwiOiBcIlNoZWxsaVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhc3RfbmFtZVwiOiBcIkEnQmFycm93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJzYWJhcnJvdzJAZ29vZ2xlLmNvLnVrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZGVyXCI6IFwiUG9seWdlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvdW50cnlcIjogXCJub1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInBhcmVudFwiOiBcIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdYCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZTIoSlNPTi5zdHJpbmdpZnkoanNvbikpXG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB9O1xuXG5cbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZldGNoUmVmZXJlbmNlO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci10cmVlLXNlbGVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXRyZWUtc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2Ygc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRyZWUtc2VsZWN0JykpLmlzLmluc3RhbmNlb2YoVHJlZVNlbGVjdCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIG9wdGlvbnMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJlZXNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdHJlZS1zZWxlY3QnKTtcbiAgICAgICAgICAgICAgICB0cmVlc2VsZWN0LnNldE9wdGlvbigndXJsJywgJ2h0dHBzOi8vZXhhbXBsZS5jb20nKVxuXG4gICAgICAgICAgICAgICAgdHJlZXNlbGVjdC5zZXRPcHRpb24oJ21hcHBpbmcuc2VsZWN0b3InLCAnKicpO1xuICAgICAgICAgICAgICAgIHRyZWVzZWxlY3Quc2V0T3B0aW9uKCdtYXBwaW5nLmxhYmVsVGVtcGxhdGUnLCAnJHtsYXN0X25hbWV9Jyk7XG4gICAgICAgICAgICAgICAgdHJlZXNlbGVjdC5zZXRPcHRpb24oJ21hcHBpbmcudmFsdWVUZW1wbGF0ZScsICcke2lkIHwgdG9zdHJpbmcgfScpO1xuXG4gICAgICAgICAgICAgICAgdHJlZXNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdtb25zdGVyLW9wdGlvbnMtc2V0JywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRyZWVzZWxlY3Quc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMyBvcHRpb25zIChzZWUgZmV0Y2ggYWJvdmUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMubGVuZ3RoKS5pcy5lcXVhbCgzKTtcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uSHRtbCA9IHRyZWVzZWxlY3Quc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uc10nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9uSHRtbCkuY29udGFpbi5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtMFwiJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4uaHRtbCgnZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJvcHRpb25zLTFcIicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25IdG1sKS5jb250YWluLmh0bWwoJ2RhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwib3B0aW9ucy0yXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9uSHRtbCkuY29udGFpbi5ub3QuaHRtbCgnZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJvcHRpb25zLTNcIicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIH0sIDEwKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQodHJlZXNlbGVjdCk7XG5cbiAgICAgICAgICAgIFxuXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIG5vIG9wdGlvbnMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdHJlZS1zZWxlY3QnKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHNlbGVjdCk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBzZWxlY3Quc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uc10nKTtcblxuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucykuaXMuaW5zdGFuY2VvZihIVE1MRGl2RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zLmhhc0NoaWxkTm9kZXMoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IGNoYWkgZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgPG1vbnN0ZXItYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnZhbHVlcy5jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItb3B0aW9ucz0ne1xuICBcInVybFwiOiBcIm1vY2stZGF0YS5qc29uXCIsXG4gIFwibWFwcGluZ1wiOiB7XG4gICAgXCJ2YWx1ZVBhdGhcIjogXCJcXCR7Zmlyc3RfbmFtZX0gXFwke2xhc3RfbmFtZX1cIixcbiAgICBcImtleVBhdGhcIjogXCJpZFwiXG4gIH0sXG4gICAgICBcInR5cGVcIjpcImNoZWNrYm94XCJcblxufSc+PC9tb25zdGVyLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBCdXR0b247XG5cbmRlc2NyaWJlKCdCdXR0b24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vYnV0dG9uLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgQnV0dG9uID0gbVsnQnV0dG9uJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldyBCdXR0b24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLWJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWJ1dHRvbicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIGJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1idXR0b24nKSkuaXMuaW5zdGFuY2VvZihCdXR0b24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIG5vIG9wdGlvbnMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItYnV0dG9uJyk7XG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChidXR0b24pO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGJ1dHRvbi5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zKS5pcy5pbnN0YW5jZW9mKEhUTUxCdXR0b25FbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMuaGFzQ2hpbGROb2RlcygpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMTAwKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCBjaGFpIGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge3NldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXJNb2NrfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9pbnRlcnNlY3Rpb24tbW9jay5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xubGV0IG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlcjtcblxubGV0IGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYDtcblxuZGVzY3JpYmUoJ1RlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgLy8ganNkb20tdGVzdGluZy1tb2NrcyBuZWVkIGplc3RcbiAgICBsZXQgVGVtcGxhdGUsIHZpZXdwb3J0LCBtb2NrVmlld3BvcnQ7XG5cbiAgICBhZnRlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlci5yZXN0b3JlKCk7XG4gICAgfSlcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgICAgIG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlciA9IHNldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXJNb2NrKCk7XG5cbiAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90ZW1wbGF0ZS5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFRlbXBsYXRlID0gbVsnVGVtcGxhdGUnXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbmV3IFRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICAvLyBsYW5ndWFnZT1IVE1MXG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtb25zdGVyLXRlbXBsYXRlPjwvbW9uc3Rlci10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDInKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci10ZW1wbGF0ZScpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlbXBsYXRlJykpLmlzLmluc3RhbmNlb2YoVGVtcGxhdGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBtb2NrcztcbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBubyBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlbXBsYXRlJyk7XG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZCh0ZW1wbGF0ZSk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXRlbXBsYXRlJyk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdsb2FkIGNvbnRlbnQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG1vY2tzLCBmZXRjaFJlZmVyZW5jZSwgaW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG4gICAgICAgIGJlZm9yZUVhY2goKGRvbmUpID0+IHtcbiAgICAgICAgICAgIG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAvLyBsYW5ndWFnZT1IVE1MXG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cInRoaXMtY29udGVudFwiPlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICBmZXRjaFJlZmVyZW5jZSA9IGdsb2JhbFsnZmV0Y2gnXTtcblxuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuXG4gICAgICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgTWFwO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9odG1sJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9rOnRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6MjAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUyKCdoZWxsbyB3b3JsZCEnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGxvYWQgY29udGVudCBmcm9tIHVybCcsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZW1wbGF0ZScpO1xuICAgICAgICAgICAgdGVtcGxhdGUuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItdXJsJywgJ2h0dHA6Ly9sb2NhbGhvc3QvJylcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHRlbXBsYXRlKTtcblxuICAgICAgICAgICAgdGVtcGxhdGUuYWRkRXZlbnRMaXN0ZW5lcignbW9uc3Rlci1mZXRjaGVkJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItdGVtcGxhdGUnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGVsZW1lbnQuc2hhZG93Um9vdDtcblxuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChzaGFkb3dSb290KS5jb250YWluLmh0bWwoJ2hlbGxvIHdvcmxkJyk7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlci5nZXRJbnN0YW5jZSgpLmVudGVyTm9kZSgpO1xuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICJcbmltcG9ydCBjaGFpIGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5cblxubGV0IE1lc3NhZ2U7XG5cbmRlc2NyaWJlKCdNZXNzYWdlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvbWVzc2FnZS5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIE1lc3NhZ2UgPSBtWydNZXNzYWdlJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBNZXNzYWdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ub3RpZnktbWVzc2FnZScpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udHJvbCkuaXMuaW5zdGFuY2VvZihNZXNzYWdlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSlcbiIsICIvL2ltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCBjaGFpIGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG4vLyBjb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcbi8vXG4vLyBsZXQgaHRtbDEgPSBgXG4vLyAgICAgPGRpdiBpZD1cInRlc3QxXCI+XG4vLyAgICAgPC9kaXY+XG4vLyBgO1xuLy9cbi8vIC8vIGxhbmd1YWdlPUhUTUxcbi8vIGxldCBodG1sMiA9IGBcbi8vICAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbi8vICAgICAgICAgPG1vbnN0ZXItbm90aWZ5IGRhdGEtbW9uc3Rlci1vcHRpb25zPSd7fSc+PC9tb25zdGVyLW5vdGl0Znk+XG4vLyAgICAgPC9kaXY+XG4vLyBgO1xuXG5sZXQgTm90aWZ5LCBmZXRjaFJlZmVyZW5jZTtcblxuZGVzY3JpYmUoJ05vdGlmeScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9ub3RpZnkubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBOb3RpZnkgPSBtWydOb3RpZnknXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIG5vdGlmeScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5JykpLmlzLmluc3RhbmNlb2YoTm90aWZ5KTtcbiAgICAgICAgICAgIFxuXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIG1lc3NhZ2VzJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBjb25zdCBub3RpZnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLW5vdGlmeScpO1xuICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgbm90aWZ5LnB1c2goXCJ0aGlzIGlzIG1lc3NhZ2UgXCIgKyBpKyspO1xuICAgICAgICAgICAgbm90aWZ5LnB1c2goXCJ0aGlzIGlzIG1lc3NhZ2UgXCIgKyBpKyspO1xuICAgICAgICAgICAgbm90aWZ5LnB1c2goXCJ0aGlzIGlzIG1lc3NhZ2UgXCIgKyBpKyspO1xuXG4gICAgICAgICAgICBjb25zdCBtdXRhdGlvbm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbLCBtdXRhdGlvbl0gb2YgbXV0YXRpb25zLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobXV0YXRpb24uYWRkZWROb2Rlc1swXS50YWdOYW1lID09PSAnTU9OU1RFUi1OT1RJRlknKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0aW9ub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZXMgPSBub3RpZnkuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdtb25zdGVyLW5vdGlmeS1tZXNzYWdlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMgb3B0aW9ucyAoc2VlIGZldGNoIGFib3ZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QobWVzc2FnZXMubGVuZ3RoKS5pcy5lcXVhbCgzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDApXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBtdXRhdGlvbm9ic2VydmVyLm9ic2VydmUobW9ja3MsIHtjaGlsZExpc3Q6IHRydWV9KTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKG5vdGlmeSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KVxuIiwgImltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCBjaGFpIGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxuXG5kZXNjcmliZSgnSG9zdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBob3N0O1xuICAgIGxldCBodG1sMSA9IGBcbiAgICAgICAgPG1vbnN0ZXItaG9zdCBpZD1cImhvc3QxXCI+PC9tb25zdGVyLWhvc3Q+XG4gICAgYDtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3QvaG9zdC5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIGhvc3QgPSBtWydIb3N0J107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICAgICAgLy8gcmVnaXN0ZXIgb3duIGRhdGFzb3VyY2UsIGFmdGVyIHRoZSBmb3JtIGlzIGxvYWRlZFxuICAgICAgICAvLyBiZWNhdXNlIGluIHRoZSB3aWxkLCB0aGUgZm9ybSBpcyBwYXJzZWQgYmVmb3JlIHRoZSBkYXRhc291cmNlIGlzIHJlZ2lzdGVyZWRcbiAgICAgICAgLy9mb3JtLnJlZ2lzdGVyRGF0YXNvdXJjZSgndGVzdDMnLCB0ZXN0M0RhdGFzb3VyY2UpO1xuXG5cbiAgICB9KTsgICAgXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3Rlc3Qta2V5JylcbiAgICB9KVxuICAgIFxuICAgIFxuICAgIGl0KCdzaG91bGQgcnVuJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWhvc3QnKTtcbiAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQoZm9ybUNvbnRyb2wpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItaG9zdCBkYXRhLW1vbnN0ZXItb2JqZWN0bGluaz1cIlN5bWJvbChAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAb3B0aW9ucy11cGRhdGVyLWxpbmspXCI+PC9tb25zdGVyLWhvc3Q+JylcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9LCAwKVxuXG5cblxuXG5cbiAgICB9KTtcblxuXG59KTtcbiIsICJpbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuXG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxuXG5kZXNjcmliZSgnT3ZlcmxheScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBob3N0O1xuICAgIGxldCBodG1sMSA9IGBcbiAgICAgICAgPG1vbnN0ZXItb3ZlcmxheSBpZD1cImRldGFpbHMxXCI+PC9tb25zdGVyLW92ZXJsYXk+XG4gICAgYDtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3Qvb3ZlcmxheS5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIGhvc3QgPSBtWydEZXRhaWxzJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgfSk7ICAgIFxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgfSlcbiAgICBcbiAgICBcbiAgICBpdCgnc2hvdWxkIHJ1bicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIGNvbnN0IGZvcm1Db250cm9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1vdmVybGF5Jyk7XG4gICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKGZvcm1Db250cm9sKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpKS5jb250YWluLmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICcgPG1vbnN0ZXItb3ZlcmxheSBkYXRhLW1vbnN0ZXItb2JqZWN0bGluaz1cIlN5bWJvbChAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAb3B0aW9ucy11cGRhdGVyLWxpbmspXCI+PC9tb25zdGVyLW92ZXJsYXk+JylcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9LCAwKVxuXG4gICAgfSk7XG5cbn0pO1xuIiwgIi8vIEltcG9ydCB0aGUgcmVxdWlyZWQgbGlicmFyaWVzXG5pbXBvcnQgeyBleHBlY3QgfSBmcm9tICdjaGFpJztcbi8vaW1wb3J0IHsgSlNET00gfSBmcm9tICdqc2RvbSc7XG5pbXBvcnQgeyBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleSB9IGZyb20gJy4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3QvdXRpbC5tanMnO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG4vLyBDcmVhdGUgYSBKU0RPTSBpbnN0YW5jZSB0byBzaW11bGF0ZSB0aGUgYnJvd3NlciBlbnZpcm9ubWVudFxuLy9jb25zdCBkb20gPSBuZXcgSlNET00oKTtcblxuXG4vLyBUZXN0IHN1aXRlIGZvciB0aGUgZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkgZnVuY3Rpb25cbmRlc2NyaWJlKCdnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleScsICgpID0+IHtcblxuICAgIC8vbGV0IG9yaWdpbmFsV2luZG93O1xuXG4gICAgLy8gYmVmb3JlKCgpID0+IHtcbiAgICAvLyAgICAgLy8gU3RvcmUgdGhlIG9yaWdpbmFsIHdpbmRvdyBvYmplY3RcbiAgICAvLyAgICAgb3JpZ2luYWxXaW5kb3cgPSBnbG9iYWxUaGlzLndpbmRvdztcbiAgICAvL1xuICAgIC8vICAgICAvLyBDcmVhdGUgYSBKU0RPTSBpbnN0YW5jZSB0byBzaW11bGF0ZSB0aGUgYnJvd3NlciBlbnZpcm9ubWVudFxuICAgIC8vICAgICBjb25zdCBkb20gPSBuZXcgSlNET00oKTtcbiAgICAvLyAgICAgZ2xvYmFsVGhpcy53aW5kb3cgPSBkb20ud2luZG93O1xuICAgIC8vIH0pO1xuXG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pO1xuICAgIH0pICAgIFxuXG4gICAgLy8gLi4uIChzYW1lIHRlc3QgY2FzZXMgYXMgYmVmb3JlKVxuXG4gICAgYWZ0ZXIoKCkgPT4ge1xuICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCB3aW5kb3cgb2JqZWN0XG4gICAgICAgLy8gZ2xvYmFsVGhpcy53aW5kb3cgPSBvcmlnaW5hbFdpbmRvdztcbiAgICB9KTsgICAgXG4gICAgXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBhIHVuaXF1ZSBrZXkgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycycsICgpID0+IHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50TmFtZSA9ICdNeUNvbXBvbmVudCc7XG4gICAgICAgIGNvbnN0IGlkID0gJzEyMyc7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9ICdteVByZWZpeCc7XG5cbiAgICAgICAgY29uc3QgdW5pcXVlS2V5ID0gZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkoY29tcG9uZW50TmFtZSwgaWQsIHByZWZpeCk7XG5cbiAgICAgICAgLy8gRW5zdXJlIHRoZSB1bmlxdWUga2V5IGNvbnRhaW5zIHRoZSBnaXZlbiBwYXJhbWV0ZXJzIGFuZCBmb2xsb3dzIHRoZSBleHBlY3RlZCBmb3JtYXRcbiAgICAgICAgZXhwZWN0KHVuaXF1ZUtleSkudG8uaW5jbHVkZShwcmVmaXgpO1xuICAgICAgICBleHBlY3QodW5pcXVlS2V5KS50by5pbmNsdWRlKGNvbXBvbmVudE5hbWUpO1xuICAgICAgICBleHBlY3QodW5pcXVlS2V5KS50by5pbmNsdWRlKGlkKTtcbiAgICAgICAgZXhwZWN0KHVuaXF1ZUtleSkudG8ubWF0Y2goL15bYS16QS1aMC05X10rJC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXBsYWNlIHNwZWNpYWwgY2hhcmFjdGVycyBhbmQgc3BhY2VzIHdpdGggdW5kZXJzY29yZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSAnTXkkQ29tcG9uZW50JztcbiAgICAgICAgY29uc3QgaWQgPSAnMTIjMyc7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9ICdteSBQcmVmaXgnO1xuXG4gICAgICAgIGNvbnN0IHVuaXF1ZUtleSA9IGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5KGNvbXBvbmVudE5hbWUsIGlkLCBwcmVmaXgpO1xuXG4gICAgICAgIC8vIEVuc3VyZSB0aGUgdW5pcXVlIGtleSBkb2VzIG5vdCBjb250YWluIGFueSBzcGVjaWFsIGNoYXJhY3RlcnMgb3Igc3BhY2VzXG4gICAgICAgIGV4cGVjdCh1bmlxdWVLZXkpLnRvLm1hdGNoKC9eW2EtekEtWjAtOV9dKyQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaW5jbHVkZSB0aGUgYnJvd3NlciBsb2NhdGlvbiB3aXRob3V0IHBhcmFtZXRlcnMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSAnTXlDb21wb25lbnQnO1xuICAgICAgICBjb25zdCBpZCA9ICcxMjMnO1xuICAgICAgICBjb25zdCBwcmVmaXggPSAnbXlQcmVmaXgnO1xuXG4gICAgICAgIGNvbnN0IHVuaXF1ZUtleSA9IGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5KGNvbXBvbmVudE5hbWUsIGlkLCBwcmVmaXgpO1xuXG4gICAgICAgIC8vIEVuc3VyZSB0aGUgdW5pcXVlIGtleSBjb250YWlucyB0aGUgYnJvd3NlciBsb2NhdGlvbiB3aXRob3V0IHBhcmFtZXRlcnNcbiAgICAgICAgY29uc3QgdXJsV2l0aG91dFBhcmFtcyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KCc/JylbMF07XG4gICAgICAgIGNvbnN0IHNhbml0aXplZFVybCA9IHVybFdpdGhvdXRQYXJhbXMucmVwbGFjZSgvW15cXHdcXHNdL2dpLCAnXycpLnJlcGxhY2UoL1xccysvZywgJ18nKTtcbiAgICAgICAgZXhwZWN0KHVuaXF1ZUtleSkudG8uaW5jbHVkZShzYW5pdGl6ZWRVcmwpO1xuICAgIH0pO1xuXG4gICAgXG4gICAgXG59KSIsICJpbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtSZXNpemVPYnNlcnZlck1vY2t9IGZyb20gXCIuLi8uLi8uLi91dGlsL3Jlc2l6ZS1vYnNlcnZlci5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5cbmRlc2NyaWJlKCdEZXRhaWxzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGhvc3Q7XG4gICAgbGV0IGh0bWwxID0gYFxuICAgICAgICA8bW9uc3Rlci1kZXRhaWxzIGlkPVwiZGV0YWlsczFcIj48L21vbnN0ZXItZGV0YWlscz5cbiAgICBgO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9kZXRhaWxzLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgaG9zdCA9IG1bJ0RldGFpbHMnXTtcblxuICAgICAgICAgICAgICAgIGlmKCFnbG9iYWwuUmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsLlJlc2l6ZU9ic2VydmVyID0gUmVzaXplT2JzZXJ2ZXJNb2NrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIFxuICAgICAgICBcbiAgICB9KVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICB9KTsgICAgXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9KVxuICAgIFxuICAgIFxuICAgIGl0KCdzaG91bGQgcnVuJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWRldGFpbHMnKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpKS5jb250YWluLmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICc8bW9uc3Rlci1kZXRhaWxzIGlkPVwiZGV0YWlsczFcIiBkYXRhLW1vbnN0ZXItb2JqZWN0bGluaz1cIlN5bWJvbChAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAb3B0aW9ucy11cGRhdGVyLWxpbmspXCIgZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbD1cIkRldGFpbHNcIj48L21vbnN0ZXItZGV0YWlscz4nKVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0sIDApXG5cbiAgICB9KTtcblxufSk7XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Rm9ybWF0dGVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3RleHQvZm9ybWF0dGVyLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdGb3JtYXR0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAvLyBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy80N1xuICAgIGRlc2NyaWJlKCdleGFtcGxlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmZjIGV4YW1wbGUgc2hvdWxkIHJ1bicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgRm9ybWF0dGVyKHtcblxuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzogXCJIZWxsb1wiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGQ6IFwiV29ybGRcIixcbiAgICAgICAgICAgICAgICAgICAgZTogMVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSkuZm9ybWF0KFwiJHthLmIuY30gJHthLmQgfCB0b3VwcGVyfSFcIikpLnRvLmJlLmVxdWFsKCdIZWxsbyBXT1JMRCEnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnZG9jIGV4YW1wbGUgc2hvdWxkIHJ1bicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgRm9ybWF0dGVyKHtcblxuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzogXCJIZWxsb1wiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGQ6IFwid29ybGRcIixcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pLmZvcm1hdChcIiR7YS5iLmN9ICR7YS5kIHwgdWNmaXJzdH0hXCIpKS50by5iZS5lcXVhbCgnSGVsbG8gV29ybGQhJyk7XG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnc2V0IG1hcmtlcigpJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWycjYSMnLCAnIycsIHVuZGVmaW5lZCwgJ3Rlc3QnXSxcbiAgICAgICAgICAgIFsne2F9JywgJ3snLCAnfScsICd0ZXN0J10sXG4gICAgICAgICAgICBbJ2kxOG57YX0nLCAnaTE4bnsnLCAnfScsICd0ZXN0J10sXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBkID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdmb3JtYXQgJyArIGEgKyAnIHdpdGggbWFya2VyICcgKyBiICsgJyBhbmQgJyArIGMgKyAnIHNob3VsZCByZXR1cm4gICcgKyBiLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBGb3JtYXR0ZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgYTogXCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgfSkuc2V0TWFya2VyKGIsIGMpLmZvcm1hdChhKVxuICAgICAgICAgICAgICAgICkudG8uZXF1YWwoZClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdleGFtcGxlcygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnJHthIHwgdG9qc29ufScsIFwie1xcXCJiXFxcIjp7XFxcImNcXFwiOlxcXCJIZWxsb1xcXCJ9LFxcXCJkXFxcIjpcXFwiV29ybGRcXFwiLFxcXCJlXFxcIjoxfVwiXSxcbiAgICAgICAgICAgIFsnY2xpY2sgJHthLmR9IHRpbWVzJywgXCJjbGljayBXb3JsZCB0aW1lc1wiXSxcbiAgICAgICAgICAgIFsnICR7YS5iLmN9ICcsICcgSGVsbG8gJ10sXG4gICAgICAgICAgICBbJyAke2EuYi5jfScsICcgSGVsbG8nXSxcbiAgICAgICAgICAgIFsnJHthLmIuY30gJywgJ0hlbGxvICddLFxuICAgICAgICAgICAgWycke2EuYi5jfScsICdIZWxsbyddLFxuICAgICAgICAgICAgWycke2EuYi5jfSR7YS5iLmN9JywgJ0hlbGxvSGVsbG8nXSxcbiAgICAgICAgICAgIFsnJHthLmIuY30gJHthLmIuY30nLCAnSGVsbG8gSGVsbG8nXSxcbiAgICAgICAgICAgIFsnJHthLmIuY30gJHthLmIuY30gJywgJ0hlbGxvIEhlbGxvICddLFxuICAgICAgICAgICAgWycgJHthLmIuY30gJHthLmIuY30gJywgJyBIZWxsbyBIZWxsbyAnXSxcbiAgICAgICAgICAgIFsnICR7YS5iLmN9ICR7YS5kfSAnLCAnIEhlbGxvIFdvcmxkICddLFxuICAgICAgICAgICAgWycgJHthLmIuY30gJHthLmIuYyB8IHRvdXBwZXIgfCBsZW5ndGggfCB0b3N0cmluZ30gJywgJyBIZWxsbyA1ICddLFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2Zvcm1hdCAnICsgYSArICcgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiSGVsbG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ6IFwiV29ybGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGU6IDFcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBGb3JtYXR0ZXIob2JqKS5mb3JtYXQoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdNYXJrZXIgaW4gbWFya2VyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCB0ZXh0ID0gJyR7bXlrZXkke3N1YmtleX19JztcbiAgICAgICAgbGV0IGV4cGVjdGVkID0gJzEnO1xuXG4gICAgICAgIGl0KCdmb3JtYXQgJyArIHRleHQgKyAnIHNob3VsZCAnICsgZXhwZWN0ZWQsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBteWtleTI6IFwiMVwiLFxuICAgICAgICAgICAgICAgIHN1YmtleTogXCIyXCJcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGV4cGVjdChuZXcgRm9ybWF0dGVyKG9iaikuZm9ybWF0KHRleHQpKS5pcy5lcXVhbChleHBlY3RlZClcblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc2V0UGFyYW1ldGVyQ2hhcnMoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2V0UGFyYW1ldGVyQ2hhcnMoKSBzaG91bGQgcmV0dXJuIEluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBGb3JtYXR0ZXIoe30pLnNldFBhcmFtZXRlckNoYXJzKCdhJywgJ2InKSkuaXMuaW5zdGFuY2VvZihGb3JtYXR0ZXIpO1xuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ3dpdGggY2FsbGJhY2tzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdhZGQgY2FsbGJhY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHtcbiAgICAgICAgICAgICAgICB4OiAnMSdcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgbXk6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiIVwiICsgdmFsdWUgKyBcIiFcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChmb3JtYXR0ZXIuZm9ybWF0KCcke3ggfCBjYWxsOm15fScpKS5pcy5lcXVhbCgnITEhJyk7XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ01hcmtlciBpbiBtYXJrZXIgd2l0aCBwYXJhbWV0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IHRleHQgPSAnJHtteWtleTo6bXlrZXk9JHtzdWJrZXl9fSc7XG4gICAgICAgIGxldCBleHBlY3RlZCA9ICcyJztcblxuICAgICAgICBpdCgnZm9ybWF0ICcgKyB0ZXh0ICsgJyBzaG91bGQgJyArIGV4cGVjdGVkLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgc3Via2V5OiBcIjJcIlxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZXhwZWN0KG5ldyBGb3JtYXR0ZXIob2JqKS5mb3JtYXQodGV4dCkpLmlzLmVxdWFsKGV4cGVjdGVkKVxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2V4Y2VwdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWycke2EuYi54fScsIFR5cGVFcnJvcl0sXG4gICAgICAgICAgICBbJyR7YS5iLmQgfCB0b3VwcGVyIHwgbGVuZ3RofScsIFR5cGVFcnJvcl0sXG4gICAgICAgICAgICBbJyR7YS5iLmR9JywgVHlwZUVycm9yXSwgIC8vIGEuYi5kIHJldHVybiB1bmRlZmluZWQgYnkgcGF0aGZpbmRlciBcbiAgICAgICAgICAgIFsnJHthLmIuZCB8IHRvbG93ZXJ9JywgVHlwZUVycm9yXSwgIC8vIGEuYi5kIHJldHVybiB1bmRlZmluZWQgYnkgcGF0aGZpbmRlciBcbiAgICAgICAgICAgIFsnJHthIHwgfScsIEVycm9yXSxcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdmb3JtYXQgJyArIGEgKyAnIHNob3VsZCB0aHJvdyAnICsgdHlwZW9mIGIsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRm9ybWF0dGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwidGVzdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDogNFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuZm9ybWF0KGEpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApLnRvLnRocm93KGIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxuXG5cbiAgICBkZXNjcmliZSgnRm9ybWF0dGVyJywgKCkgPT4ge1xuICAgICAgICBpdCgnc2hvdWxkIGZvcm1hdCBhIGJhc2ljIHN0cmluZyB3aXRoIG9iamVjdCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHtuYW1lOiAnSm9obicsIGFnZTogMzB9KTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdHRlci5mb3JtYXQoJ015IG5hbWUgaXMgJHtuYW1lfSBhbmQgSSBhbSAke2FnZSB8IHRvc3RyaW5nfSB5ZWFycyBvbGQuJyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCdNeSBuYW1lIGlzIEpvaG4gYW5kIEkgYW0gMzAgeWVhcnMgb2xkLicpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZvcm1hdCBhIHN0cmluZyB3aXRoIG5lc3RlZCBtYXJrZXJzJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9ICcke215a2V5JHtzdWJrZXl9fSc7XG4gICAgICAgICAgICBjb25zdCBvYmogPSB7bXlrZXkyOiAnMScsIHN1YmtleTogJzInfTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIob2JqKTtcblxuICAgICAgICAgICAgZXhwZWN0KGZvcm1hdHRlci5mb3JtYXQodGV4dCkpLnRvLmVxdWFsKCcxJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZm9ybWF0IGEgc3RyaW5nIHdpdGggY3VzdG9tIG1hcmtlcnMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHtuYW1lOiAnSm9obicsIGFnZTogMzB9KTtcbiAgICAgICAgICAgIGZvcm1hdHRlci5zZXRNYXJrZXIoJ1snLCAnXScpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0dGVyLmZvcm1hdCgnTXkgbmFtZSBpcyBbbmFtZV0gYW5kIEkgYW0gW2FnZSB8IHRvc3RyaW5nXSB5ZWFycyBvbGQuJyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCdNeSBuYW1lIGlzIEpvaG4gYW5kIEkgYW0gMzAgeWVhcnMgb2xkLicpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZvcm1hdCBhIHN0cmluZyB1c2luZyBjYWxsYmFjaycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIoe3g6ICcxJ30sIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgcXVvdGU6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcIicgKyB2YWx1ZSArICdcIic7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBleHBlY3QoZm9ybWF0dGVyLmZvcm1hdCgnJHt4IHwgY2FsbDpxdW90ZX0nKSkudG8uZXF1YWwoJ1wiMVwiJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZm9ybWF0IGEgc3RyaW5nIHdpdGggcGFyYW1ldGVycycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGM6ICdIZWxsbycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGQ6ICd3b3JsZCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKG9iaik7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXR0ZXIuZm9ybWF0KCcke2EuYi5jfSAke2EuZCB8IHVjZmlyc3R9IScpO1xuXG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgnSGVsbG8gV29ybGQhJyk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhIHRvbyBkZWVwIG5lc3RpbmcgZXJyb3InLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHtuYW1lOiAnSm9obid9KTtcbiAgICAgICAgICAgIGNvbnN0IG5lc3RlZFRleHQgPSAnJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lfX19fX19fX19fX19fX19fX19JztcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBmb3JtYXR0ZXIuZm9ybWF0KG5lc3RlZFRleHQpKS50by50aHJvdygnc3ludGF4IGVycm9yIGluIGZvcm1hdHRlciB0ZW1wbGF0ZScpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGEgdG9vIGRlZXAgbmVzdGluZyBlcnJvcicsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0T2JqID0ge1xuICAgICAgICAgICAgICAgIG15a2V5OiAnJHtteWtleX0nLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcihpbnB1dE9iaik7XG5cbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSAnJHtteWtleX0nO1xuICAgICAgICAgICAgbGV0IGZvcm1hdHRlZFRleHQgPSB0ZXh0O1xuXG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBzdHJpbmcgd2l0aCAyMSBsZXZlbHMgb2YgbmVzdGluZ1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVkVGV4dCA9ICckeycgKyBmb3JtYXR0ZWRUZXh0ICsgJ30nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZm9ybWF0dGVyLmZvcm1hdChmb3JtYXR0ZWRUZXh0KSkudG8udGhyb3coJ3RvbyBkZWVwIG5lc3RpbmcnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgIH0pO1xuXG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmV4cG9ydCB7IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbiB9O1xuXG4vKipcbiAqIFRoZSBgZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKClgIGZ1bmN0aW9uIGlzIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gKiBvZiBhIGNvbXBhcmlzb24gZXhwcmVzc2lvbiBiYXNlZCBvbiBhIHJhbmdlIG9mIHZhbHVlcy4gSXQgdGFrZXMgdGhyZWUgYXJndW1lbnRzOlxuICpcbiAqIC0gZXhwcmVzc2lvbiAocmVxdWlyZWQpOiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHJhbmdlIG9mIHZhbHVlcyBpbiB0aGUgZm9ybWF0IG9mIHN0YXJ0MS1lbmQxLHN0YXJ0Mi1lbmQyLHZhbHVlMy4uLi5cbiAqIC0gdmFsdWVOYW1lIChyZXF1aXJlZCk6IGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgdmFsdWUgdGhhdCBpcyBiZWluZyBjb21wYXJlZCB0byB0aGUgcmFuZ2Ugb2YgdmFsdWVzLlxuICogLSBvcHRpb25zIChvcHRpb25hbCk6IGFuIG9iamVjdCBjb250YWluaW5nIGFkZGl0aW9uYWwgb3B0aW9ucyB0byBjdXN0b21pemUgdGhlIGNvbXBhcmlzb24gZXhwcmVzc2lvbi5cbiAqXG4gKiBUaGUgZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKCkgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tcGFyaXNvbiBleHByZXNzaW9uLlxuICpcbiAqICMjIE9wdGlvbnNcbiAqIFRoZSBvcHRpb25zIHBhcmFtZXRlciBpcyBhbiBvYmplY3QgdGhhdCBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogdXJsRW5jb2RlIChib29sZWFuLCBkZWZhdWx0OiBmYWxzZSk6IGlmIHNldCB0byB0cnVlLCBVUkwgZW5jb2RlcyB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMuXG4gKiBhbmRPcCAoc3RyaW5nLCBkZWZhdWx0OiAnJiYnKTogdGhlIGxvZ2ljYWwgQU5EIG9wZXJhdG9yIHRvIHVzZSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAqIG9yT3AgKHN0cmluZywgZGVmYXVsdDogJ3x8Jyk6IHRoZSBsb2dpY2FsIE9SIG9wZXJhdG9yIHRvIHVzZSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAqIGVxT3AgKHN0cmluZywgZGVmYXVsdDogJz09Jyk6IHRoZSBlcXVhbGl0eSBvcGVyYXRvciB0byB1c2UgaW4gdGhlIGV4cHJlc3Npb24uXG4gKiBnZU9wIChzdHJpbmcsIGRlZmF1bHQ6ICc+PScpOiB0aGUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG9wZXJhdG9yIHRvIHVzZSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAqIGxlT3AgKHN0cmluZywgZGVmYXVsdDogJzw9Jyk6IHRoZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gb3BlcmF0b3IgdG8gdXNlIGluIHRoZSBleHByZXNzaW9uLlxuICpcbiAqIEV4YW1wbGVzXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogY29uc3QgZXhwcmVzc2lvbiA9ICcwLTEwLDIwLTMwJztcbiAqIGNvbnN0IHZhbHVlTmFtZSA9ICdhZ2UnO1xuICogY29uc3Qgb3B0aW9ucyA9IHsgdXJsRW5jb2RlOiB0cnVlLCBhbmRPcDogJ2FuZCcsIG9yT3A6ICdvcicsIGVxT3A6ICc9JywgZ2VPcDogJz49JywgbGVPcDogJzw9JyB9O1xuICogY29uc3QgY29tcGFyaXNvbkV4cHJlc3Npb24gPSBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lLCBvcHRpb25zKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhjb21wYXJpc29uRXhwcmVzc2lvbik7IC8vIGFnZSUzRSUzRDAlMjBhbmQlMjBhZ2UlM0MlM0QxMCUyMG9yJTIwYWdlJTNFJTNEMjAlMjBhbmQlMjBhZ2UlM0MlM0QzMFxuICogYGBgXG4gKlxuICogSW4gdGhpcyBleGFtcGxlLCB0aGUgZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKCkgZnVuY3Rpb24gZ2VuZXJhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21wYXJpc29uXG4gKiBleHByZXNzaW9uIGZvciB0aGUgZXhwcmVzc2lvbiBhbmQgdmFsdWVOYW1lIHBhcmFtZXRlcnMgd2l0aCB0aGUgc3BlY2lmaWVkIG9wdGlvbnMuIFRoZSByZXN1bHRpbmcgY29tcGFyaXNvblxuICogZXhwcmVzc2lvbiBpcyAnYWdlPj0wIGFuZCBhZ2U8PTEwIG9yIGFnZT49MjAgYW5kIGFnZTw9MzAnLCBVUkwgZW5jb2RlZCBhY2NvcmRpbmcgdG8gdGhlIHVybEVuY29kZSBvcHRpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gLSBUaGUgc3RyaW5nIGV4cHJlc3Npb24gdG8gZ2VuZXJhdGUgdGhlIGNvbXBhcmlzb24gZm9yLlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB2YWx1ZSB0byBjb21wYXJlIGFnYWluc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gVGhlIG9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnVybEVuY29kZT1mYWxzZV0gLSBXaGV0aGVyIHRvIGVuY29kZSBjb21wYXJpc29uIG9wZXJhdG9ycyBmb3IgdXNlIGluIGEgVVJMLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFuZE9wPScmJiddIC0gVGhlIGxvZ2ljYWwgQU5EIG9wZXJhdG9yIHRvIHVzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5vck9wPSd8fCddIC0gVGhlIGxvZ2ljYWwgT1Igb3BlcmF0b3IgdG8gdXNlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmVxT3A9Jz09J10gLSBUaGUgY29tcGFyaXNvbiBvcGVyYXRvciBmb3IgZXF1YWxpdHkgdG8gdXNlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmdlT3A9Jz49J10gLSBUaGUgY29tcGFyaXNvbiBvcGVyYXRvciBmb3IgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRvIHVzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sZU9wPSc8PSddIC0gVGhlIGNvbXBhcmlzb24gb3BlcmF0b3IgZm9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0byB1c2UuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZ2VuZXJhdGVkIGNvbXBhcmlzb24gZXhwcmVzc2lvbi5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgaW5wdXQgaXMgaW52YWxpZC5cbiAqIEBtZW1iZXJPZiBNb25zdGVyLlRleHRcbiAqIEBzdW1tYXJ5IEdlbmVyYXRlcyBhIGNvbXBhcmlzb24gZXhwcmVzc2lvbiBiYXNlZCBvbiBhIHJhbmdlIG9mIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKFxuXHRleHByZXNzaW9uLFxuXHR2YWx1ZU5hbWUsXG5cdG9wdGlvbnMgPSB7fSxcbikge1xuXHRjb25zdCB7XG5cdFx0dXJsRW5jb2RlID0gZmFsc2UsXG5cdFx0YW5kT3AgPSBcIiYmXCIsXG5cdFx0b3JPcCA9IFwifHxcIixcblx0XHRlcU9wID0gXCI9PVwiLFxuXHRcdGdlT3AgPSBcIj49XCIsXG5cdFx0bGVPcCA9IFwiPD1cIixcblx0fSA9IG9wdGlvbnM7XG5cdGNvbnN0IHJhbmdlcyA9IGV4cHJlc3Npb24uc3BsaXQoXCIsXCIpO1xuXHRsZXQgY29tcGFyaXNvbiA9IFwiXCI7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgcmFuZ2UgPSByYW5nZXNbaV0udHJpbSgpO1xuXHRcdGlmIChyYW5nZSA9PT0gXCJcIikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHJhbmdlICcke3JhbmdlfSdgKTtcblx0XHR9IGVsc2UgaWYgKHJhbmdlLmluY2x1ZGVzKFwiLVwiKSkge1xuXHRcdFx0Y29uc3QgW3N0YXJ0LCBlbmRdID0gcmFuZ2Vcblx0XHRcdFx0LnNwbGl0KFwiLVwiKVxuXHRcdFx0XHQubWFwKChzKSA9PiAocyA9PT0gXCJcIiA/IG51bGwgOiBwYXJzZUZsb2F0KHMpKSk7XG5cdFx0XHRpZiAoKHN0YXJ0ICE9PSBudWxsICYmIGlzTmFOKHN0YXJ0KSkgfHwgKGVuZCAhPT0gbnVsbCAmJiBpc05hTihlbmQpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmFsdWUgaW4gcmFuZ2UgJyR7cmFuZ2V9J2ApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHN0YXJ0ICE9PSBudWxsICYmIGVuZCAhPT0gbnVsbCAmJiBzdGFydCA+IGVuZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcmFuZ2UgJyR7cmFuZ2V9J2ApO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY29tcFN0YXJ0ID1cblx0XHRcdFx0c3RhcnQgIT09IG51bGxcblx0XHRcdFx0XHQ/IGAke3ZhbHVlTmFtZX0ke3VybEVuY29kZSA/IGVuY29kZVVSSUNvbXBvbmVudChnZU9wKSA6IGdlT3B9JHtzdGFydH1gXG5cdFx0XHRcdFx0OiBcIlwiO1xuXHRcdFx0Y29uc3QgY29tcEVuZCA9XG5cdFx0XHRcdGVuZCAhPT0gbnVsbFxuXHRcdFx0XHRcdD8gYCR7dmFsdWVOYW1lfSR7dXJsRW5jb2RlID8gZW5jb2RlVVJJQ29tcG9uZW50KGxlT3ApIDogbGVPcH0ke2VuZH1gXG5cdFx0XHRcdFx0OiBcIlwiO1xuXHRcdFx0Y29uc3QgY29tcFJhbmdlID0gYCR7Y29tcFN0YXJ0fSR7XG5cdFx0XHRcdGNvbXBTdGFydCAmJiBjb21wRW5kID8gYCAke2FuZE9wfSBgIDogXCJcIlxuXHRcdFx0fSR7Y29tcEVuZH1gO1xuXHRcdFx0Y29tcGFyaXNvbiArPSByYW5nZXMubGVuZ3RoID4gMSA/IGAoJHtjb21wUmFuZ2V9KWAgOiBjb21wUmFuZ2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdChyYW5nZSk7XG5cdFx0XHRpZiAoaXNOYU4odmFsdWUpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YWx1ZSAnJHtyYW5nZX0nYCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBjb21wVmFsdWUgPSBgJHt2YWx1ZU5hbWV9JHtcblx0XHRcdFx0dXJsRW5jb2RlID8gZW5jb2RlVVJJQ29tcG9uZW50KGVxT3ApIDogZXFPcFxuXHRcdFx0fSR7dmFsdWV9YDtcblx0XHRcdGNvbXBhcmlzb24gKz0gcmFuZ2VzLmxlbmd0aCA+IDEgPyBgKCR7Y29tcFZhbHVlfSlgIDogY29tcFZhbHVlO1xuXHRcdH1cblx0XHRpZiAoaSA8IHJhbmdlcy5sZW5ndGggLSAxKSB7XG5cdFx0XHRjb21wYXJpc29uICs9IGAgJHtvck9wfSBgO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gY29tcGFyaXNvbjtcbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb259IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdGV4dC91dGlsLm1qc1wiO1xuXG5kZXNjcmliZSgnZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgY29ycmVjdCBjb21wYXJpc29uIGV4cHJlc3Npb24gZm9yIHNpbmdsZSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnMSwzLDUnO1xuICAgICAgICBjb25zdCB2YWx1ZU5hbWUgPSAneCc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uLCB2YWx1ZU5hbWUpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgnKHg9PTEpIHx8ICh4PT0zKSB8fCAoeD09NSknKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgY29ycmVjdCBjb21wYXJpc29uIGV4cHJlc3Npb24gZm9yIHJhbmdlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9ICcxLTMsNi04JztcbiAgICAgICAgY29uc3QgdmFsdWVOYW1lID0gJ3gnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoJyh4Pj0xICYmIHg8PTMpIHx8ICh4Pj02ICYmIHg8PTgpJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGNvcnJlY3QgY29tcGFyaXNvbiBleHByZXNzaW9uIGZvciBtaXhlZCByYW5nZXMgYW5kIHNpbmdsZSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnMS0zLDUsNy05JztcbiAgICAgICAgY29uc3QgdmFsdWVOYW1lID0gJ3gnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoJyh4Pj0xICYmIHg8PTMpIHx8ICh4PT01KSB8fCAoeD49NyAmJiB4PD05KScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBmb3IgaW52YWxpZCByYW5nZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9ICcxLTMsNS00JztcbiAgICAgICAgY29uc3QgdmFsdWVOYW1lID0gJ3gnO1xuICAgICAgICBleHBlY3QoKCkgPT4gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHJlc3Npb24sIHZhbHVlTmFtZSkpLnRvLnRocm93KGBJbnZhbGlkIHJhbmdlICc1LTQnYCk7XG4gICAgfSk7XG5cblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgZm9yIGludmFsaWQgdmFsdWUnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnMS0zLGEnO1xuICAgICAgICBjb25zdCB2YWx1ZU5hbWUgPSAneCc7XG4gICAgICAgIGV4cGVjdCgoKSA9PiBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lKSkudG8udGhyb3coJ0ludmFsaWQgdmFsdWUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgY29ycmVjdCBjb21wYXJpc29uIGV4cHJlc3Npb24gd2l0aCBjdXN0b20gb3BlcmF0b3JzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gJzEtMyw1JztcbiAgICAgICAgY29uc3QgdmFsdWVOYW1lID0gJ3gnO1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgYW5kT3A6ICdBTkQnLFxuICAgICAgICAgICAgb3JPcDogJ09SJyxcbiAgICAgICAgICAgIGVxT3A6ICc9PT0nLFxuICAgICAgICAgICAgZ2VPcDogJz49JyxcbiAgICAgICAgICAgIGxlT3A6ICc8PScsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uLCB2YWx1ZU5hbWUsIG9wdGlvbnMpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgnKHg+PTEgQU5EIHg8PTMpIE9SICh4PT09NSknKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgY29ycmVjdCBjb21wYXJpc29uIGV4cHJlc3Npb24gd2l0aCB1cmxFbmNvZGUgb3B0aW9uJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXN0Q2FzZXMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogJzEsMyw1JyxcbiAgICAgICAgICAgICAgICB2YWx1ZU5hbWU6ICd4JyxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogJyh4JTNEJTNEMSkgfHwgKHglM0QlM0QzKSB8fCAoeCUzRCUzRDUpJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogJy0xMCcsXG4gICAgICAgICAgICAgICAgdmFsdWVOYW1lOiAneCcsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICd4JTNDJTNEMTAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAnMTAtJyxcbiAgICAgICAgICAgICAgICB2YWx1ZU5hbWU6ICd4JyxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogJ3glM0UlM0QxMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICcxLTMsNi04JyxcbiAgICAgICAgICAgICAgICB2YWx1ZU5hbWU6ICd5JyxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogJyh5JTNFJTNEMSAmJiB5JTNDJTNEMykgfHwgKHklM0UlM0Q2ICYmIHklM0MlM0Q4KScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICcxLTMsNSw3LTknLFxuICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogJ3onLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiAnKHolM0UlM0QxICYmIHolM0MlM0QzKSB8fCAoeiUzRCUzRDUpIHx8ICh6JTNFJTNENyAmJiB6JTNDJTNEOSknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICB0ZXN0Q2FzZXMuZm9yRWFjaCgoe2V4cHJlc3Npb24sIHZhbHVlTmFtZSwgZXhwZWN0ZWR9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lLCB7dXJsRW5jb2RlOiB0cnVlfSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbChleHBlY3RlZCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBjb3JyZWN0IGNvbXBhcmlzb24gZXhwcmVzc2lvbiBmb3Igb3Blbi1lbmRlZCByYW5nZXMgd2l0aCB1cmxFbmNvZGUgb3B0aW9uJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXN0Q2FzZXMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogJzEwLScsXG4gICAgICAgICAgICAgICAgdmFsdWVOYW1lOiAneCcsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICd4JTNFJTNEMTAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAnLTEwJyxcbiAgICAgICAgICAgICAgICB2YWx1ZU5hbWU6ICd5JyxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogJ3klM0MlM0QxMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIHRlc3RDYXNlcy5mb3JFYWNoKCh7ZXhwcmVzc2lvbiwgdmFsdWVOYW1lLCBleHBlY3RlZH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uLCB2YWx1ZU5hbWUsIHt1cmxFbmNvZGU6IHRydWV9KTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKGV4cGVjdGVkKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5leHBvcnQgeyBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaCwgY3JlYXRlQnJhY2tldGVkS2V5VmFsdWVIYXNoIH07XG5cbi8qKlxuICogUGFyc2VzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYnJhY2tldGVkIGtleS12YWx1ZSBwYWlycyBhbmQgcmV0dXJucyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwYXJzZWQgcmVzdWx0LlxuICpcbiAqIC0gVGhlIHN0cmluZyBzdGFydHMgd2l0aCBhIGhhc2ggc3ltYm9sICMuXG4gKiAtIEFmdGVyIHRoZSBoYXNoIHN5bWJvbCwgdGhlcmUgYXJlIG9uZSBvciBtb3JlIHNlbGVjdG9yIHN0cmluZ3MsIHNlcGFyYXRlZCBieSBhIHNlbWljb2xvbiA7LlxuICogLSBFYWNoIHNlbGVjdG9yIHN0cmluZyBoYXMgdGhlIGZvcm1hdCBzZWxlY3Rvck5hbWUoa2V5MT12YWx1ZTEsa2V5Mj12YWx1ZTIsLi4uKS5cbiAqIC0gVGhlIHNlbGVjdG9yIG5hbWUgaXMgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuXG4gKiAtIFRoZSBrZXktdmFsdWUgcGFpcnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMgLCBhbmQgYXJlIG9mIHRoZSBmb3JtIGtleT12YWx1ZS5cbiAqIC0gVGhlIGtleSBpcyBhIHN0cmluZyBvZiBvbmUgb3IgbW9yZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycy5cbiAqIC0gVGhlIHZhbHVlIGNhbiBiZSBhbiBlbXB0eSBzdHJpbmcgb3IgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUgY2hhcmFjdGVycy5cbiAqIC0gSWYgdGhlIHZhbHVlIGNvbnRhaW5zIGNvbW1hcywgaXQgbXVzdCBiZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzIFwiLlxuICogLSBUaGUgZW50aXJlIGtleS12YWx1ZSBwYWlyIG11c3QgYmUgVVJMLWVuY29kZWQuXG4gKiAtIFRoZSBjbG9zaW5nIHBhcmVudGhlc2lzICkgZm9yIGVhY2ggc2VsZWN0b3IgbXVzdCBiZSBwcmVzZW50LCBldmVuIGlmIHRoZXJlIGFyZSBubyBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiAvLyBFeGFtcGxlIDE6XG4gKiBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcjEoa2V5MT12YWx1ZTEsa2V5Mj12YWx1ZTIpO3NlbGVjdG9yMihrZXkzPXZhbHVlMyknO1xuICogY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gKiAvLyByZXN1bHQgPT4geyBzZWxlY3RvcjE6IHsga2V5MTogXCJ2YWx1ZTFcIiwga2V5MjogXCJ2YWx1ZTJcIiB9LCBzZWxlY3RvcjI6IHsga2V5MzogXCJ2YWx1ZTNcIiB9IH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogLy8gRXhhbXBsZSAyOlxuICogY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3IxKGtleTE9dmFsdWUxLGtleTI9dmFsdWUyKTtzZWxlY3RvcjIoJztcbiAqIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICogLy8gcmVzdWx0ID0+IHt9XG4gKiBgYGBcbiAqXG4gKiBAc2luY2UgMy4zNy4wXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaFN0cmluZyAtIFRoZSBzdHJpbmcgdG8gcGFyc2UsIGNvbnRhaW5pbmcgYnJhY2tldGVkIGtleS12YWx1ZSBwYWlycy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IC0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcGFyc2VkIHJlc3VsdCwgd2l0aCBrZXlzIHJlcHJlc2VudGluZyB0aGUgc2VsZWN0b3JzIGFuZCB2YWx1ZXMgcmVwcmVzZW50aW5nIHRoZSBrZXktdmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggc2VsZWN0b3IuXG4gKiAgICAgICAgICAgICAgICAgICAgLSBSZXR1cm5zIGFuIGVtcHR5IG9iamVjdCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgZHVyaW5nIHBhcnNpbmcuICovXG5mdW5jdGlvbiBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKSB7XG5cdGNvbnN0IHNlbGVjdG9ycyA9IHt9O1xuXHQvL2NvbnN0IHNlbGVjdG9yU3RhY2sgPSBbXTtcblx0Ly9jb25zdCBrZXlWYWx1ZVN0YWNrID0gW107XG5cblx0Y29uc3QgdHJpbW1lZEhhc2hTdHJpbmcgPSBoYXNoU3RyaW5nLnRyaW0oKTtcblx0Y29uc3QgY2xlYW5lZEhhc2hTdHJpbmcgPVxuXHRcdHRyaW1tZWRIYXNoU3RyaW5nLmNoYXJBdCgwKSA9PT0gXCIjXCJcblx0XHRcdD8gdHJpbW1lZEhhc2hTdHJpbmcuc2xpY2UoMSlcblx0XHRcdDogdHJpbW1lZEhhc2hTdHJpbmc7XG5cblx0Ly9jb25zdCBzZWxlY3RvcnMgPSAoa2V5VmFsdWVTdGFjay5sZW5ndGggPiAwKSA/IHJlc3VsdFtzZWxlY3RvclN0YWNrW3NlbGVjdG9yU3RhY2subGVuZ3RoIC0gMV1dIDogcmVzdWx0O1xuXHRsZXQgY3VycmVudFNlbGVjdG9yID0gXCJcIjtcblxuXHRmdW5jdGlvbiBhZGRUb1Jlc3VsdChrZXksIHZhbHVlKSB7XG5cdFx0aWYgKGN1cnJlbnRTZWxlY3RvciAmJiBrZXkpIHtcblx0XHRcdGlmICghc2VsZWN0b3JzW2N1cnJlbnRTZWxlY3Rvcl0pIHtcblx0XHRcdFx0c2VsZWN0b3JzW2N1cnJlbnRTZWxlY3Rvcl0gPSB7fTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZWN0b3JzW2N1cnJlbnRTZWxlY3Rvcl1ba2V5XSA9IHZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdGxldCBjdXJyZW50S2V5ID0gXCJcIjtcblx0bGV0IGN1cnJlbnRWYWx1ZSA9IFwiXCI7XG5cdGxldCBpbktleSA9IHRydWU7XG5cdGxldCBpblZhbHVlID0gZmFsc2U7XG5cdGxldCBpblF1b3RlZFZhbHVlID0gZmFsc2U7XG5cdGxldCBpblNlbGVjdG9yID0gdHJ1ZTtcblx0bGV0IGVzY2FwZWQgPSBmYWxzZTtcblx0bGV0IHF1b3RlZFZhbHVlU3RhcnRDaGFyID0gXCJcIjtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGNsZWFuZWRIYXNoU3RyaW5nLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgYyA9IGNsZWFuZWRIYXNoU3RyaW5nW2ldO1xuXHRcdGNvbnN0IG5leHRDaGFyID0gY2xlYW5lZEhhc2hTdHJpbmc/LltpICsgMV07XG5cblx0XHRpZiAoYyA9PT0gXCJcXFxcXCIgJiYgIWVzY2FwZWQpIHtcblx0XHRcdGVzY2FwZWQgPSB0cnVlO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGVzY2FwZWQpIHtcblx0XHRcdGlmIChpblNlbGVjdG9yKSB7XG5cdFx0XHRcdGN1cnJlbnRTZWxlY3RvciArPSBjO1xuXHRcdFx0fSBlbHNlIGlmIChpbktleSkge1xuXHRcdFx0XHRjdXJyZW50S2V5ICs9IGM7XG5cdFx0XHR9IGVsc2UgaWYgKGluVmFsdWUpIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlICs9IGM7XG5cdFx0XHR9XG5cdFx0XHRlc2NhcGVkID0gZmFsc2U7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoaW5RdW90ZWRWYWx1ZSAmJiBxdW90ZWRWYWx1ZVN0YXJ0Q2hhciAhPT0gYykge1xuXHRcdFx0aWYgKGluU2VsZWN0b3IpIHtcblx0XHRcdFx0Y3VycmVudFNlbGVjdG9yICs9IGM7XG5cdFx0XHR9IGVsc2UgaWYgKGluS2V5KSB7XG5cdFx0XHRcdGN1cnJlbnRLZXkgKz0gYztcblx0XHRcdH0gZWxzZSBpZiAoaW5WYWx1ZSkge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgKz0gYztcblx0XHRcdH1cblxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGMgPT09IFwiO1wiICYmIGluU2VsZWN0b3IpIHtcblx0XHRcdGluU2VsZWN0b3IgPSB0cnVlO1xuXHRcdFx0Y3VycmVudFNlbGVjdG9yID0gXCJcIjtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChpblNlbGVjdG9yID09PSB0cnVlICYmIGMgIT09IFwiKFwiKSB7XG5cdFx0XHRjdXJyZW50U2VsZWN0b3IgKz0gYztcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChjID09PSBcIihcIiAmJiBpblNlbGVjdG9yKSB7XG5cdFx0XHRpblNlbGVjdG9yID0gZmFsc2U7XG5cdFx0XHRpbktleSA9IHRydWU7XG5cblx0XHRcdGN1cnJlbnRLZXkgPSBcIlwiO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGluS2V5ID09PSB0cnVlICYmIGMgIT09IFwiPVwiKSB7XG5cdFx0XHRjdXJyZW50S2V5ICs9IGM7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoYyA9PT0gXCI9XCIgJiYgaW5LZXkpIHtcblx0XHRcdGluS2V5ID0gZmFsc2U7XG5cdFx0XHRpblZhbHVlID0gdHJ1ZTtcblxuXHRcdFx0aWYgKG5leHRDaGFyID09PSAnXCInIHx8IG5leHRDaGFyID09PSBcIidcIikge1xuXHRcdFx0XHRpblF1b3RlZFZhbHVlID0gdHJ1ZTtcblx0XHRcdFx0cXVvdGVkVmFsdWVTdGFydENoYXIgPSBuZXh0Q2hhcjtcblx0XHRcdFx0aSsrO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y3VycmVudFZhbHVlID0gXCJcIjtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChpblZhbHVlID09PSB0cnVlKSB7XG5cdFx0XHRpZiAoaW5RdW90ZWRWYWx1ZSkge1xuXHRcdFx0XHRpZiAoYyA9PT0gcXVvdGVkVmFsdWVTdGFydENoYXIpIHtcblx0XHRcdFx0XHRpblF1b3RlZFZhbHVlID0gZmFsc2U7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjdXJyZW50VmFsdWUgKz0gYztcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjID09PSBcIixcIikge1xuXHRcdFx0XHRpblZhbHVlID0gZmFsc2U7XG5cdFx0XHRcdGluS2V5ID0gdHJ1ZTtcblx0XHRcdFx0Y29uc3QgZGVjb2RlZEN1cnJlbnRWYWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudChjdXJyZW50VmFsdWUpO1xuXHRcdFx0XHRhZGRUb1Jlc3VsdChjdXJyZW50S2V5LCBkZWNvZGVkQ3VycmVudFZhbHVlKTtcblx0XHRcdFx0Y3VycmVudEtleSA9IFwiXCI7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IFwiXCI7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYyA9PT0gXCIpXCIpIHtcblx0XHRcdFx0aW5WYWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHQvL2luS2V5ID0gdHJ1ZTtcblx0XHRcdFx0aW5TZWxlY3RvciA9IHRydWU7XG5cblx0XHRcdFx0Y29uc3QgZGVjb2RlZEN1cnJlbnRWYWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudChjdXJyZW50VmFsdWUpO1xuXHRcdFx0XHRhZGRUb1Jlc3VsdChjdXJyZW50S2V5LCBkZWNvZGVkQ3VycmVudFZhbHVlKTtcblx0XHRcdFx0Y3VycmVudEtleSA9IFwiXCI7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IFwiXCI7XG5cdFx0XHRcdGN1cnJlbnRTZWxlY3RvciA9IFwiXCI7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjdXJyZW50VmFsdWUgKz0gYztcblxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGluU2VsZWN0b3IpIHtcblx0XHRyZXR1cm4gc2VsZWN0b3JzO1xuXHR9XG5cblx0cmV0dXJuIHt9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIHNlbGVjdG9yIHN0cmluZyBmcm9tIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IC0gVGhlIG9iamVjdCBjb250YWluaW5nIHNlbGVjdG9ycyBhbmQga2V5LXZhbHVlIHBhaXJzLlxuICogQHBhcmFtIHtib29sZWFufSBhZGRIYXNoUHJlZml4IC0gV2hldGhlciB0byBhZGQgdGhlIGhhc2ggcHJlZml4ICMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGhhc2ggc2VsZWN0b3Igc3RyaW5nLlxuICogQHNpbmNlIDMuMzcuMFxuICovXG5mdW5jdGlvbiBjcmVhdGVCcmFja2V0ZWRLZXlWYWx1ZUhhc2gob2JqZWN0LCBhZGRIYXNoUHJlZml4ID0gdHJ1ZSkge1xuXHRpZiAoIW9iamVjdCkge1xuXHRcdHJldHVybiBhZGRIYXNoUHJlZml4ID8gXCIjXCIgOiBcIlwiO1xuXHR9XG5cblx0bGV0IGhhc2hTdHJpbmcgPSBcIlwiO1xuXG5cdGZ1bmN0aW9uIGVuY29kZUtleVZhbHVlKGtleSwgdmFsdWUpIHtcblx0XHRyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGtleSkgKyBcIj1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG5cdH1cblxuXHRmb3IgKGNvbnN0IHNlbGVjdG9yIGluIG9iamVjdCkge1xuXHRcdGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoc2VsZWN0b3IpKSB7XG5cdFx0XHRjb25zdCBrZXlWYWx1ZVBhaXJzID0gb2JqZWN0W3NlbGVjdG9yXTtcblx0XHRcdGxldCBzZWxlY3RvclN0cmluZyA9IHNlbGVjdG9yO1xuXHRcdFx0bGV0IGtleVZhbHVlU3RyaW5nID0gXCJcIjtcblxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4ga2V5VmFsdWVQYWlycykge1xuXHRcdFx0XHRpZiAoa2V5VmFsdWVQYWlycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSBrZXlWYWx1ZVBhaXJzW2tleV07XG5cdFx0XHRcdFx0a2V5VmFsdWVTdHJpbmcgKz0ga2V5VmFsdWVTdHJpbmcubGVuZ3RoID09PSAwID8gXCJcIiA6IFwiLFwiO1xuXHRcdFx0XHRcdGtleVZhbHVlU3RyaW5nICs9IGVuY29kZUtleVZhbHVlKGtleSwgdmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChrZXlWYWx1ZVN0cmluZy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHNlbGVjdG9yU3RyaW5nICs9IFwiKFwiICsga2V5VmFsdWVTdHJpbmcgKyBcIilcIjtcblx0XHRcdFx0aGFzaFN0cmluZyArPSBoYXNoU3RyaW5nLmxlbmd0aCA9PT0gMCA/IFwiXCIgOiBcIjtcIjtcblx0XHRcdFx0aGFzaFN0cmluZyArPSBzZWxlY3RvclN0cmluZztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYWRkSGFzaFByZWZpeCA/IFwiI1wiICsgaGFzaFN0cmluZyA6IGhhc2hTdHJpbmc7XG59XG4iLCAiLy8gdGVzdC5qc1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCI7XG5pbXBvcnQge1xuICAgIHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoLFxuICAgIGNyZWF0ZUJyYWNrZXRlZEtleVZhbHVlSGFzaFxufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3RleHQvYnJhY2tldGVkLWtleS12YWx1ZS1oYXNoLm1qc1wiO1xuXG5kZXNjcmliZShcInBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGZvciBhbiBlbXB0eSBzdHJpbmdcIiwgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IFwiXCI7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge307XG4gICAgICAgIGV4cGVjdChwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCkpLnRvLmRlZXAuZXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcGFyc2UgYSBzaW5nbGUgc2VsZWN0b3Igd2l0aCBvbmUga2V5LXZhbHVlIHBhaXJcIiwgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IFwiI3NlbGVjdG9yMShrZXkxPXZhbHVlMSlcIjtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7XG4gICAgICAgICAgICBzZWxlY3RvcjE6IHtcbiAgICAgICAgICAgICAgICBrZXkxOiBcInZhbHVlMVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgZXhwZWN0KHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGlucHV0KSkudG8uZGVlcC5lcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBwYXJzZSBtdWx0aXBsZSBzZWxlY3RvcnMgd2l0aCBtdWx0aXBsZSBrZXktdmFsdWUgcGFpcnNcIiwgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IFwiI3NlbGVjdG9yMShrZXkxPXZhbHVlMSxrZXkyPXZhbHVlMik7c2VsZWN0b3IyKGtleTM9dmFsdWUzLGtleTQ9dmFsdWU0KVwiO1xuICAgICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHtcbiAgICAgICAgICAgIHNlbGVjdG9yMToge1xuICAgICAgICAgICAgICAgIGtleTE6IFwidmFsdWUxXCIsXG4gICAgICAgICAgICAgICAga2V5MjogXCJ2YWx1ZTJcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWxlY3RvcjI6IHtcbiAgICAgICAgICAgICAgICBrZXkzOiBcInZhbHVlM1wiLFxuICAgICAgICAgICAgICAgIGtleTQ6IFwidmFsdWU0XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBleHBlY3QocGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQpKS50by5kZWVwLmVxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGRlY29kZSBVUkwtZW5jb2RlZCB2YWx1ZXNcIiwgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IFwiI3NlbGVjdG9yMShrZXkxPXZhbHVlMSUyQ3dpdGglMjBjb21tYSlcIjtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7XG4gICAgICAgICAgICBzZWxlY3RvcjE6IHtcbiAgICAgICAgICAgICAgICBrZXkxOiBcInZhbHVlMSx3aXRoIGNvbW1hXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQuc2VsZWN0b3IxLmtleTEpLnRvLmVxdWFsKGV4cGVjdGVkUmVzdWx0LnNlbGVjdG9yMS5rZXkxKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBpbnB1dCB3aXRob3V0IGEgbGVhZGluZyBoYXNoXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBcInNlbGVjdG9yMShrZXkxPXZhbHVlMSlcIjtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7XG4gICAgICAgICAgICBzZWxlY3RvcjE6IHtcbiAgICAgICAgICAgICAgICBrZXkxOiBcInZhbHVlMVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgZXhwZWN0KHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGlucHV0KSkudG8uZGVlcC5lcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGZvciBpbnZhbGlkIGlucHV0XCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBcIiNzZWxlY3RvcjEoa2V5MT12YWx1ZTEsa2V5MlwiO1xuICAgICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHt9O1xuICAgICAgICBleHBlY3QocGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQpKS50by5kZWVwLmVxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBmb3IgYW4gZW1wdHkgaW5wdXQgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBmb3IgYW4gaW52YWxpZCBpbnB1dCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI2ludmFsaWQnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhcnNlIGEgc2ltcGxlIGlucHV0IHN0cmluZyB3aXRoIG9uZSBzZWxlY3RvciBhbmQgb25lIGtleS12YWx1ZSBwYWlyJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXk9dmFsdWUpJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe3NlbGVjdG9yOiB7a2V5OiAndmFsdWUnfX0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBhbiBpbnB1dCBzdHJpbmcgd2l0aCBtdWx0aXBsZSBzZWxlY3RvcnMgYW5kIGtleS12YWx1ZSBwYWlycycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3IxKGtleTE9dmFsdWUxKTtzZWxlY3RvcjIoa2V5Mj12YWx1ZTIpJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe3NlbGVjdG9yMToge2tleTE6ICd2YWx1ZTEnfSwgc2VsZWN0b3IyOiB7a2V5MjogJ3ZhbHVlMid9fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBlbXB0eSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yKGtleTE9LGtleTI9KSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHtzZWxlY3Rvcjoge2tleTE6ICcnLCBrZXkyOiAnJ319KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHBlcmNlbnQtZW5jb2RlZCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yKGtleTE9dmFsdWUlMjAxLGtleTI9dmFsdWUlMkMyKSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHtzZWxlY3Rvcjoge2tleTE6ICd2YWx1ZSAxJywga2V5MjogJ3ZhbHVlLDInfX0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZG91YmxlLXF1b3RlZCB2YWx1ZXMgd2l0aCBjb21tYXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yKGtleTE9XCJ2YWx1ZSwxXCIsa2V5Mj1cInZhbHVlLDJcIiknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7c2VsZWN0b3I6IHtrZXkxOiAndmFsdWUsMScsIGtleTI6ICd2YWx1ZSwyJ319KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaWdub3JlIGxlYWRpbmcgaGFzaCBzeW1ib2wgKCMpJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJ3NlbGVjdG9yKGtleT12YWx1ZSknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7c2VsZWN0b3I6IHtrZXk6ICd2YWx1ZSd9fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGlnbm9yZSBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZSBzcGFjZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcgICNzZWxlY3RvcihrZXk9dmFsdWUpICAnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7c2VsZWN0b3I6IHtrZXk6ICd2YWx1ZSd9fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGlucHV0IHN0cmluZyBlbmRzIHByZW1hdHVyZWx5JywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXk9dmFsdWUnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgYSBzZWxlY3RvciBpcyBtaXNzaW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyMoa2V5PXZhbHVlKSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBpZiBhIGtleSBpcyBtaXNzaW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3Rvcig9dmFsdWUpJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmYSB2YWx1ZSBpcyBtaXNzaW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXk9KSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiB7XG4gICAgICAgICAgICAgICAga2V5OiAnJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIHRoZXJlIGlzIG5vIGNsb3NpbmcgcGFyZW50aGVzaXMgZm9yIGEgc2VsZWN0b3InLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yKGtleT12YWx1ZTsnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlcmUgaXMgbm8gc2VtaWNvbG9uIGFmdGVyIGEgc2VsZWN0b3InLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yKGtleT12YWx1ZSlzZWxlY3RvcjIoa2V5Mj12YWx1ZTIpJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe1xuICAgICAgICAgICAgc2VsZWN0b3I6IHtcbiAgICAgICAgICAgICAgICBrZXk6ICd2YWx1ZScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VsZWN0b3IyOiB7XG4gICAgICAgICAgICAgICAga2V5MjogJ3ZhbHVlMicsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjcmVhdGVCcmFja2V0ZWRLZXlWYWx1ZUhhc2gnLCAoKSA9PiB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGhhc2ggc3RyaW5nIGZvciBhIHNpbXBsZSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHtcbiAgICAgICAgICAgICAgICAnLmV4YW1wbGUnOiB7XG4gICAgICAgICAgICAgICAgICAgICdjb2xvcic6ICdyZWQnLFxuICAgICAgICAgICAgICAgICAgICAnZm9udC1zaXplJzogJzE0cHgnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnLm90aGVyJzoge1xuICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZCc6ICdibHVlJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFwiIy5leGFtcGxlKGNvbG9yPXJlZCxmb250LXNpemU9MTRweCk7Lm90aGVyKGJhY2tncm91bmQ9Ymx1ZSlcIik7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSB1cmwtZW5jb2RlZCBoYXNoIHN0cmluZyBmb3IgYSBzaW1wbGUgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB7XG4gICAgICAgICAgICAgICAgJy5leGFtcGxlJzoge1xuICAgICAgICAgICAgICAgICAgICAnY29sb3InOiAnclwiZWQnLFxuICAgICAgICAgICAgICAgICAgICAnZm9udC1zaXplJzogJzE0cHgnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnLm90aGVyJzoge1xuICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZCc6ICdibHVlJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCwgdHJ1ZSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFwiIy5leGFtcGxlKGNvbG9yPXIlMjJlZCxmb250LXNpemU9MTRweCk7Lm90aGVyKGJhY2tncm91bmQ9Ymx1ZSlcIik7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGZvciBhbiBlbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHt9O1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY3JlYXRlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGlucHV0LGZhbHNlKTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoXCJcIik7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGZvciBhbiBlbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHt9O1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY3JlYXRlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGlucHV0LGZhbHNlKTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoXCJcIik7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICB9KTtcblxuXG59KTtcbiIsICIvKiogbm9kZWpzIGRvZXNudCBzdXBwb3J0IHdpbmRvdy5jcnlwdCAqL1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ01hdGgnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgcmFuZG9tID0gKCkgPT4ge31cbiAgICBcbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuICAgICAgICBpZiAoIWdsb2JhbFRoaXNbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbihtID0+IHtcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzWydjcnlwdG8nXSA9IG5ldyBtLkNyeXB0bygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgIH1cblxuICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS9tYXRoL3JhbmRvbS5tanNcIikudGhlbihtID0+IHtcbiAgICAgICAgICAgIHJhbmRvbSA9IG0ucmFuZG9tO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pKVxuXG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnJhbmRvbSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdhIGdyZWF0ZXIgYiBzaG91bGQgdGhyb3cgZXJyb3IgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IHJhbmRvbSgxMCwgMikpLnRvLnRocm93KEVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJyBzaG91bGQgcmV0dXJuIGEgbnVtYmVyICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCByID0gcmFuZG9tKCk7XG4gICAgICAgICAgICBleHBlY3QocikudGhhdC5pcy5hKCdudW1iZXInKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJyBzaG91bGQgcmV0dXJuIGEgbnVtYmVyICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiByYW5kb20oNSwgNikpLnRvLnRocm93KEVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJyBzaG91bGQgdGhyb3cgRXJyb3Igd2UgY2Fubm90IGdlbmVyYXRlIG51bWJlcnMgbGFyZ2VyIHRoYW4gNTMgYml0cy4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gcmFuZG9tKC05OTk5OTk5OTksIDk5OTk5OTk5OTk5OTk5OTk5OTk5KSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnIHNob3VsZCB0aHJvdyBFcnJvciB3ZSBjYW5ub3QgZ2VuZXJhdGUgbnVtYmVycyBsYXJnZXIgdGhhbiA1MyBiaXRzLicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsxLCAxMDBdLFxuICAgICAgICAgICAgICAgIFs1MDAsIDYwMF0sXG4gICAgICAgICAgICAgICAgWzEwMCwgMTAwMF1cbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICAgICAgbGV0IHIgPSByYW5kb20oYSwgYik7XG5cbiAgICAgICAgICAgICAgICBpdChyICsgJyBzaG91bGQgcmV0dXJuIHZhbHVlIGJldHdlZW4gJyArIGEgKyAnICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChyID49IGEpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChyIDw9IGIpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsxLCAxMDBdLFxuICAgICAgICAgICAgICAgIFs1MDAsIDYwMF0sXG4gICAgICAgICAgICAgICAgWzEwMCwgMTAwMF1cbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICAgICAgbGV0IHN1bSA9IDA7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm91bmRzID0gNTAwXG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbWF4ID0gcm91bmRzOyBpIDwgbWF4OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgc3VtICs9IHJhbmRvbShhLCBiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgYXZnID0gc3VtIC8gcm91bmRzO1xuXG4gICAgICAgICAgICAgICAgaXQoYXZnICsgJyBzaG91bGQgYmV0d2VlbiAnICsgYSArICcgJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGF2ZyA+IGEpLnRvLmJlLnRydWVcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGF2ZyA8IGIpLnRvLmJlLnRydWVcbiAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfSlcblxuXG4gICAgfSlcblxuXG59KSIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHt0cmltU3BhY2VzfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvdHJpbXNwYWNlcy5tanNcIjtcblxuXG5kZXNjcmliZSgndHJpbVNwYWNlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBbXG4gICAgICAgIC8vIG9uZSBzdHJva2UgaXMgZXNjcGVkIGJ5IHRoZSBqYXZhc2NyaXB0IGludGVycHJldGVyLCB0aGUgc2Vjb25kIHN0cm9rZSBlc2NhcGVzIHRoZSBzdHJva2VcbiAgICAgICAgWycgdmFsdWUgJywgJ3ZhbHVlJ10sXG4gICAgICAgIFsnIHZhbHVlXFxcXCAnLCAndmFsdWVcXFxcICddLFxuICAgICAgICBbJ1xcXFwgdmFsdWVcXFxcICcsICdcXFxcIHZhbHVlXFxcXCAnXSxcbiAgICAgICAgWydcXCB2YWx1ZVxcICcsICd2YWx1ZSddLCAgIFxuICAgICAgICBbXCIgICB2YWx1ZSBcXCBcIiwgJ3ZhbHVlJ10sIFxuXG4gICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICBpdCgndHJpbVNwYWNlcygnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBKU09OLnN0cmluZ2lmeShiKSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHRyaW1TcGFjZXMoYSkpLnRvLmJlLmVxdWFsKGIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn0pO1xuICAgICIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtQcm9jZXNzaW5nfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvcHJvY2Vzc2luZy5tanNcIjtcblxuXG5kZXNjcmliZSgnUHJvY2Vzc2luZycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdydW4gaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gbWFueSBmdW5jdGlvbicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBjb3VudGVyID0gMDtcbiAgICAgICAgICAgIGxldCB0ID0gK25ldyBEYXRlKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRlc2lyZWREZWxheSA9IDIwMDtcbiAgICAgICAgICAgIHRoaXMudGltZW91dChkZXNpcmVkRGVsYXkrMTAwKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gZGVsYXkgMTIgXG4gICAgICAgICAgICBuZXcgUHJvY2Vzc2luZygodikgPT4ge1xuICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgIH0sICh2KSA9PiB7XG4gICAgICAgICAgICAgICAgY291bnRlcisrXG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGNvdW50ZXIrK1xuICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgfSwgZGVzaXJlZERlbGF5LGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgY291bnRlcisrXG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9KS5ydW4oJ3Rlc3QnKS50aGVuKCh2KSA9PiB7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoY291bnRlcikudG8uYmUuZXF1YWwoNCk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2ID09PSAndGVzdCcpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGRlbGF5XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgrbmV3IERhdGUoKSA+IHQgKyBkZXNpcmVkRGVsYXkrMSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJ1biBvbmUgZnVuY3Rpb24nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG5cbiAgICAgICAgICAgIG5ldyBQcm9jZXNzaW5nKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvdW50ZXIrK1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0pLnJ1bigndGVzdCcpLnRoZW4oKHYpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodiA9PT0gJ3Rlc3QnKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gbm8gZnVuY3Rpb24nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG5cbiAgICAgICAgICAgIG5ldyBQcm9jZXNzaW5nKCkucnVuKCd0ZXN0JykudGhlbigodikgPT4ge1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHYgPT09ICd0ZXN0JykudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjcmVhdGUgbmV3IGluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgUHJvY2Vzc2luZyBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFByb2Nlc3NpbmcoKSkudG8uYmUuYSgnb2JqZWN0Jyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgUHJvY2Vzc2luZyBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFByb2Nlc3NpbmcoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgfSkpLnRvLmJlLmEoJ29iamVjdCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IFR5cGVFcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgUHJvY2Vzc2luZyh0cnVlKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBUeXBlRXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IFByb2Nlc3NpbmcoXCJ0ZXN0XCIpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbn0pOyIsICJpbXBvcnQge0RlYWRNYW5zU3dpdGNofSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0RlYWRNYW5zU3dpdGNoJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ3J1biBpbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJ1bicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IG1zMSA9ICBEYXRlLm5vdygpO1xuXG4gICAgICAgICAgICBuZXcgRGVhZE1hbnNTd2l0Y2goMTAwLCAoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBtczIgPSAgRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBtczIgLSBtczE7XG4gICAgICAgICAgICAgICAgaWYgKGRpZmYgPCAxMDApIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgndG8gc2hvcnQgJyArIGRpZmYpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdydW4gaW5zdGFuY2UgYW5kIHRvdWNoJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3QgbXMxID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgY29uc3QgZGVhZG1hbnNzd2l0Y2ggPSBuZXcgRGVhZE1hbnNTd2l0Y2goMTAwLCAoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBtczIgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZGlmZiA9IG1zMiAtIG1zMTtcblxuICAgICAgICAgICAgICAgIGlmIChtczEgPiBtczIpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoJ3RpbWluZyBlcnJvcicpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkaWZmIDwgNjAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKCd0byBzaG9ydCAnICsgZGlmZikpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIC8vICAgMCBtczogaW5pdCgpIC0+IHdhaXQgMTAwIG1zIFxuICAgICAgICAgICAgLy8gIDUwIG1zOiB0b3VjaCgpIC0+IHdhaXQgMTAwIG1zXG4gICAgICAgICAgICAvLyAgICAgICAgICAtPiB3YWl0IDEwMFxuICAgICAgICAgICAgLy8gMTAwIG1zOiB0b3VjaCg1MDApIC0+IHdhaXQgNTAwIG1zXG4gICAgICAgICAgICAvLyAgICAgICAgICAtPiB3YWl0IDUwMFxuICAgICAgICAgICAgLy8gNjAwIG1zOiBleGVjdXRlIGNhbGxiYWNrXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBkZWFkbWFuc3N3aXRjaC50b3VjaCgpXG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGVhZG1hbnNzd2l0Y2gudG91Y2goNTAwKVxuICAgICAgICAgICAgICAgIH0sIDUwKVxuXG4gICAgICAgICAgICB9LCA1MClcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG59KTsiLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuXG5leHBvcnQgeyBDb21wYXJhdG9yIH07XG5cbi8qKlxuICogVGhlIGNvbXBhcmF0b3IgYWxsb3dzIGEgY29tcGFyaXNvbiBmdW5jdGlvbiB0byBiZSBhYnN0cmFjdGVkLlxuICpcbiAqIFRoZSBmb2xsb3dpbmcgYXJlIHNvbWUgZXhhbXBsZXMgb2YgdGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBjbGFzcy5cbiAqXG4gKiBgYGBcbiAqIG5ldyBDb21wYXJhdG9yKCkubGVzc1RoYW5PckVxdWFsKDIsIDUpIC8vIFx1MjFBNiB0cnVlXG4gKiBuZXcgQ29tcGFyYXRvcigpLmdyZWF0ZXJUaGFuKDQsIDIpIC8vIFx1MjFBNiB0cnVlXG4gKiBuZXcgQ29tcGFyYXRvcigpLmVxdWFsKDQsIDQpIC8vIFx1MjFBNiB0cnVlXG4gKiBuZXcgQ29tcGFyYXRvcigpLmVxdWFsKDQsIDUpIC8vIFx1MjFBNiBmYWxzZVxuICogYGBgXG4gKlxuICogWW91IGNhbiBhbHNvIHBhc3MgeW91ciBvd24gY29tcGFyaXNvbiBmdW5jdGlvbiwgYW5kIHRodXMgZGVmaW5lIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uLlxuICpcbiAqIGBgYFxuICogbmV3IENvbXBhcmF0b3IoZnVuY3Rpb24gKGEsIGIpIHtcbiAqICAgICAgaWYgKGEudiA9PT0gYi52KSByZXR1cm4gMDtcbiAqICAgICAgICAgcmV0dXJuIGEudiA8IGIudiA/IC0xIDogMTtcbiAqICAgICAgfSkuZXF1YWwoe3Y6IDJ9LCB7djogMn0pOyAgLy8gXHUyMUE2IHRydWVcbiAqIGBgYFxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS91dGlsL2NvbXBhcmF0b3IubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICogQG1lbWJlck9mIE1vbnN0ZXIuVXRpbFxuICovXG5jbGFzcyBDb21wYXJhdG9yIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBjcmVhdGUgbmV3IGNvbXBhcmF0b3Jcblx0ICpcblx0ICogQHBhcmFtIHtNb25zdGVyLlV0aWx+ZXhhbXBsZUNhbGxiYWNrfSBbY2FsbGJhY2tdIENvbXBhcmF0b3IgY2FsbGJhY2tcblx0ICogQHRocm93IHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICogQHRocm93IHtUeXBlRXJyb3J9IGltcHJhY3RpY2FsIGNvbXBhcmlzb25cblx0ICovXG5cdGNvbnN0cnVjdG9yKGNhbGxiYWNrKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuXHRcdFx0dGhpcy5jb21wYXJlID0gY2FsbGJhY2s7XG5cdFx0fSBlbHNlIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidW5zdXBwb3J0ZWQgdHlwZVwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gZGVmYXVsdCBjb21wYXJlIGZ1bmN0aW9uXG5cblx0XHRcdC8qKlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7Kn0gYVxuXHRcdFx0ICogQHBhcmFtIHsqfSBiXG5cdFx0XHQgKiBAcmV0dXJuIHtpbnRlZ2VyfSAtMSwgMCBvciAxXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMuY29tcGFyZSA9IGZ1bmN0aW9uIChhLCBiKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW1wcmFjdGljYWwgY29tcGFyaXNvblwiLCBcInR5cGVzL2NvbXBhcmF0b3IubWpzXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGEgPT09IGIpIHtcblx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gYSA8IGIgPyAtMSA6IDE7XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBjaGFuZ2VzIHRoZSBvcmRlciBvZiB0aGUgb3BlcmF0b3JzXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NvbXBhcmF0b3J9XG5cdCAqL1xuXHRyZXZlcnNlKCkge1xuXHRcdGNvbnN0IG9yaWdpbmFsID0gdGhpcy5jb21wYXJlO1xuXHRcdHRoaXMuY29tcGFyZSA9IChhLCBiKSA9PiBvcmlnaW5hbChiLCBhKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdHdvIHZhcmlhYmxlcyBhcmUgZXF1YWwuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYVxuXHQgKiBAcGFyYW0geyp9IGJcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGVxdWFsKGEsIGIpIHtcblx0XHRyZXR1cm4gdGhpcy5jb21wYXJlKGEsIGIpID09PSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB2YXJpYWJsZSBgYWAgaXMgZ3JlYXRlciB0aGFuIGBiYFxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFcblx0ICogQHBhcmFtIHsqfSBiXG5cdCAqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRncmVhdGVyVGhhbihhLCBiKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29tcGFyZShhLCBiKSA+IDA7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHZhcmlhYmxlIGBhYCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYGJgXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYVxuXHQgKiBAcGFyYW0geyp9IGJcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGdyZWF0ZXJUaGFuT3JFcXVhbChhLCBiKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ3JlYXRlclRoYW4oYSwgYikgfHwgdGhpcy5lcXVhbChhLCBiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdmFyaWFibGUgYGFgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgYmBcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhXG5cdCAqIEBwYXJhbSB7Kn0gYlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0bGVzc1RoYW5PckVxdWFsKGEsIGIpIHtcblx0XHRyZXR1cm4gdGhpcy5sZXNzVGhhbihhLCBiKSB8fCB0aGlzLmVxdWFsKGEsIGIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB2YXJpYWJsZSBhIGlzIGxlc3MgdGhhbiBiXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYVxuXHQgKiBAcGFyYW0geyp9IGJcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGxlc3NUaGFuKGEsIGIpIHtcblx0XHRyZXR1cm4gdGhpcy5jb21wYXJlKGEsIGIpIDwgMDtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCBieSB0aGUgb3BlcmF0b3JcbiAqXG4gKiBgYGBcbiAqIG5ldyBDb21wYXJhdG9yKGZ1bmN0aW9uIChhLCBiKSB7XG4gKiAgICAgIGlmIChhLnYgPT09IGIudikgcmV0dXJuIDA7XG4gKiAgICAgICAgIHJldHVybiBhLnYgPCBiLnYgPyAtMSA6IDE7XG4gKiAgICAgIH0pLmVxdWFsKHt2OiAyfSwge3Y6IDJ9KTsgIC8vIFx1MjFBNiB0cnVlXG4gKiBgYGBcbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5VdGlsfmV4YW1wbGVDYWxsYmFja1xuICogQHBhcmFtIHsqfSBhXG4gKiBAcGFyYW0geyp9IGJcbiAqIEByZXR1cm4ge2ludGVnZXJ9IC0xLCAwIG9yIDFcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlV0aWxcbiAqIEBzZWUgTW9uc3Rlci5VdGlsLkNvbXBhcmF0b3JcbiAqL1xuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0NvbXBhcmF0b3J9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdXRpbC9jb21wYXJhdG9yLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdDb21wYXJhdG9yJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ2NyZWF0ZSBuZXcgaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBjb21wYXJhdG9yIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpKS50by5iZS5hKCdvYmplY3QnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBjb21wYXJhdG9yIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB9KSkudG8uYmUuYSgnb2JqZWN0Jyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgVHlwZUVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBDb21wYXJhdG9yKHRydWUpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IFR5cGVFcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgQ29tcGFyYXRvcihcInRlc3RcIikpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdlcXVhbCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBcInRlc3RcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWzUuMSwgNSwgZmFsc2VdLFxuICAgICAgICAgICAgWzUuMSwgNS4xLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbLTQsIC00LCB0cnVlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb21wYXJlICcgKyBhICsgJyBhbmQgJyArIGIgKyAnIHJldHVybiAnICsgYywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmVxdWFsKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZXF1YWwoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdHJ1ZV0sXG4gICAgICAgICAgICBbJ3Rlc3QxJywgNV0sXG4gICAgICAgICAgICBbJ3Rlc3QxJywgbnVsbF0sXG4gICAgICAgICAgICBbJ3Rlc3QxJywgcGFyc2VJbnQoXCJhXCIpXSxcbiAgICAgICAgICAgIFtmYWxzZSwgNV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBudWxsXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgdGhyb3cgVHlwZUVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgQ29tcGFyYXRvcigpLmVxdWFsKGEsIGIpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ3JlYXRlclRoYW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0XCIsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LjEsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgLTQsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgNCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkuZ3JlYXRlclRoYW4oYSwgYikpLmlzLmVxdWFsKGMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdyZXZlcnNlKCkuZ3JlYXRlclRoYW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0XCIsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LjEsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgLTQsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgNCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkucmV2ZXJzZSgpLmdyZWF0ZXJUaGFuKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ3JlYXRlclRoYW5PckVxdWFsKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIFwidGVzdFwiLCB0cnVlXSxcbiAgICAgICAgICAgIFs1LjEsIDUsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNS4xLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbLTQsIC00LCB0cnVlXSxcbiAgICAgICAgICAgIFstNCwgNCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkuZ3JlYXRlclRoYW5PckVxdWFsKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbGVzc1RoYW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0XCIsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LjEsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgLTQsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgNCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkubGVzc1RoYW4oYSwgYikpLmlzLmVxdWFsKGMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudGF0aW9ucycsIGZ1bmN0aW9uICgpIHtcblxuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIC4uLicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmxlc3NUaGFuT3JFcXVhbCgyLCA1KSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmdyZWF0ZXJUaGFuKDQsIDIpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkuZXF1YWwoNCwgNCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoKS5lcXVhbCg0LCA1KSkudG8uYmUuZmFsc2U7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gd2l0aCBvd24gZnVuY3Rpb24gLi4uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGEudiA9PT0gYi52KSByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS52IDwgYi52ID8gLTEgOiAxO1xuICAgICAgICAgICAgfSkuZXF1YWwoe3Y6IDJ9LCB7djogMn0pKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdsZXNzVGhhbk9yRXF1YWwoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0XCIsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LjEsIHRydWVdLFxuICAgICAgICAgICAgW3RydWUsIHRydWUsIHRydWVdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFstNCwgLTQsIHRydWVdLFxuICAgICAgICAgICAgWy00LCA0LCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgY29tcGFyZSAnICsgYSArICcgYW5kICcgKyBiICsgJyByZXR1cm4gJyArIGMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoKS5sZXNzVGhhbk9yRXF1YWwoYSwgYikpLmlzLmVxdWFsKGMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgZGVlcEZyZWV6ZSB9O1xuXG4vKipcbiAqIERlZXAgZnJlZXplIGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCBvYmplY3QgdG8gYmUgZnJlZXplXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQHJldHVybnMge29iamVjdH1cbiAqIEBtZW1iZXJPZiBNb25zdGVyLlV0aWxcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuICovXG5mdW5jdGlvbiBkZWVwRnJlZXplKG9iamVjdCkge1xuXHR2YWxpZGF0ZU9iamVjdChvYmplY3QpO1xuXG5cdC8vIFJldHJpZXZlIHRoZSBkZWZpbmVkIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBvYmplY3Rcblx0dmFyIHByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7XG5cblx0Ly8gRnJlZXplIHByb3BlcnRpZXMgYmVmb3JlIGZyZWV6aW5nIHlvdXJzZWxmXG5cdGZvciAoY29uc3QgbmFtZSBvZiBwcm9wTmFtZXMpIHtcblx0XHRjb25zdCB2YWx1ZSA9IG9iamVjdFtuYW1lXTtcblxuXHRcdG9iamVjdFtuYW1lXSA9XG5cdFx0XHR2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgPyBkZWVwRnJlZXplKHZhbHVlKSA6IHZhbHVlO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdC5mcmVlemUob2JqZWN0KTtcbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtkZWVwRnJlZXplfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvZnJlZXplLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdkZWVwRnJlZXplJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ2RlZXBGcmVlemUgYW4gb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgZnJlZXplIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG9iajEgPSB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjOjFcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBvYmoyID0ge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzoyXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBleHBlY3Qob2JqMikudG8ubm90LmVxbChvYmoxKVxuICAgICAgICAgICAgb2JqMS5hLmIuYyA9IDI7XG4gICAgICAgICAgICBleHBlY3Qob2JqMikudG8uZXFsKG9iajEpO1xuXG4gICAgICAgICAgICBjb25zdCBvYmoxRnJlZXplZCA9IGRlZXBGcmVlemUob2JqMSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChvYmoyKS50by5lcWwob2JqMUZyZWV6ZWQpO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9mcmVlemVcbiAgICAgICAgICAgICAgICAvLyBubyBjaGFuZ2UgdG8gdGhlIG9iamVjdCwgZXhjZXB0aW9uIGRlcGVuZHMgb24gbW9kZSAoc3RyaWN0IEVTIDIwMTUsIGV0YylcbiAgICAgICAgICAgICAgICBvYmoxRnJlZXplZC5hLmIuYyA9IDMgICAgXG4gICAgICAgICAgICB9IGNhdGNoIChfKSB7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhwZWN0KG9iajIpLnRvLmVxbChvYmoxRnJlZXplZCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2Nsb25lfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvY2xvbmUubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnQ2xvbmUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBjbGFzcyBBIHtcbiAgICAgICAgY29uc3RydWN0b3IoYikge1xuICAgICAgICAgICAgdGhpcy5iID0gYlxuICAgICAgICB9XG5cbiAgICAgICAgYSgpIHtcblxuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIGNsYXNzIEIge1xuICAgICAgICBjb25zdHJ1Y3RvcihiKSB7XG4gICAgICAgICAgICB0aGlzLmIgPSBiXG4gICAgICAgIH1cblxuICAgICAgICBhKCkge1xuXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGdldENsb25lKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiRE9ORVwiXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgfVxuXG4gICAgZGVzY3JpYmUoJy5jbG9uZShCKSB3aXRoIGdldENsb25lJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnLmNsb25lKEIpIHNob3VsZCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgYiA9IG5ldyBCKHtcbiAgICAgICAgICAgICAgICB4OiB7XG4gICAgICAgICAgICAgICAgICAgIHk6IDEsIGQ6IG5ldyBBKDEpLCB6OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCByID0gY2xvbmUoYik7XG4gICAgICAgICAgICBleHBlY3QoYikudG8uYmUuaW5zdGFuY2VPZihCKVxuICAgICAgICAgICAgZXhwZWN0KHIpLm5vdC5lcXVhbChiKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShyKSkuZXF1YWwoSlNPTi5zdHJpbmdpZnkoJ0RPTkUnKSk7XG5cbiAgICAgICAgfSk7XG4gICAgfSlcbiAgICBcbiAgICBkZXNjcmliZSgnLmNsb25lKEEpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnLmNsb25lKEEpIHNob3VsZCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgYSA9IG5ldyBBKHtcbiAgICAgICAgICAgICAgICB4OiB7XG4gICAgICAgICAgICAgICAgICAgIHk6IDEsIGQ6IG5ldyBBKDEpLCB6OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBiID0gY2xvbmUoYSk7XG4gICAgICAgICAgICBleHBlY3QoYSkudG8uYmUuaW5zdGFuY2VPZihBKVxuICAgICAgICAgICAgZXhwZWN0KGIpLnRvLmJlLmluc3RhbmNlT2YoQSlcbiAgICAgICAgICAgIGV4cGVjdChiKS5ub3QuZXF1YWwoYSk7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoYSkpLmVxdWFsKEpTT04uc3RyaW5naWZ5KGIpKTtcblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgLy8gbm9kZWpzIGRvZXMgbm90IGhhdmUgYSBET01cbiAgICBpZiAodHlwZW9mIERvY3VtZW50RnJhZ21lbnQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgZGVzY3JpYmUoJy5jbG9uZShEb2N1bWVudEZyYWdtZW50KScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCcuY2xvbmUoRG9jdW1lbnRGcmFnbWVudCkgc2hvdWxkIHNhbWUgRG9jdW1lbnRGcmFnbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGNsb25lKGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChiKS5lcXVhbChhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGRlc2NyaWJlKCcuY2xvbmUobnVsbCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIHR5cGVvZiBudWxsIHJlc3VsdHMgaW4gJ29iamVjdCcuICBodHRwczovLzJhbGl0eS5jb20vMjAxMy8xMC90eXBlb2YtbnVsbC5odG1sXG4gICAgICAgIGl0KCcuY2xvbmUobnVsbCkgc2hvdWxkICBudWxsJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGEgPSBudWxsXG4gICAgICAgICAgICBsZXQgYiA9IGNsb25lKGEpO1xuICAgICAgICAgICAgZXhwZWN0KGIpLmVxdWFsKGEpO1xuICAgICAgICAgICAgZXhwZWN0KGIpLnRvLmJlLm51bGw7XG4gICAgICAgICAgICBleHBlY3QoYSkudG8uYmUubnVsbDtcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCcuY2xvbmUodW5kZWZpbmVkKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJy5jbG9uZSh1bmRlZmluZWQpIHNob3VsZCAgdW5kZWZpbmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGEgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGxldCBiID0gY2xvbmUoYSk7XG4gICAgICAgICAgICBleHBlY3QoYSA9PT0gYikudG8uYmUudHJ1ZVxuICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBiID09PSAndW5kZWZpbmVkJykudG8uYmUudHJ1ZVxuICAgICAgICAgICAgZXhwZWN0KGEgPT09IHVuZGVmaW5lZCkudG8uYmUudHJ1ZVxuICAgICAgICAgICAgZXhwZWN0KGIgPT09IHVuZGVmaW5lZCkudG8uYmUudHJ1ZVxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJy5jbG9uZShvYmplY3QpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCcuY2xvbmUoe30pIHNob3VsZCAgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGEgPSB7fVxuICAgICAgICAgICAgbGV0IGIgPSBjbG9uZShhKTtcbiAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgYiA9PT0gJ29iamVjdCcpLnRvLmJlLnRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJy5jbG9uZSh7eDoxfSkgc2hvdWxkICBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgYSA9IHt4OiAxfVxuICAgICAgICAgICAgbGV0IGIgPSBjbG9uZShhKTtcbiAgICAgICAgICAgIGV4cGVjdChhLngpLmlzLmVxdWFsKGIueClcbiAgICAgICAgfSk7XG4gICAgfSlcbiAgICBkZXNjcmliZSgnLmNsb25lKGZ1bmN0aW9uKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnLmNsb25lKGZ1bmN0aW9uKSBzaG91bGQgIGZ1bmN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGEgPSAoKSA9PiB7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgYiA9IGNsb25lKGEpO1xuICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBiID09PSAnZnVuY3Rpb24nKS50by5iZS50cnVlXG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCcuY2xvbmUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgJ3N0cmluZyddLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgJ3VuZGVmaW5lZCddLFxuICAgICAgICAgICAgW251bGwsICdvYmplY3QnXSwgLy8gdHlwZW9mIG51bGwgcmVzdWx0cyBpbiAnb2JqZWN0Jy4gIGh0dHBzOi8vMmFsaXR5LmNvbS8yMDEzLzEwL3R5cGVvZi1udWxsLmh0bWxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCAnZnVuY3Rpb24nXSxcbiAgICAgICAgICAgIFsyLCAnbnVtYmVyJ10sXG4gICAgICAgICAgICBbZmFsc2UsICdib29sZWFuJ10sXG4gICAgICAgICAgICBbdHJ1ZSwgJ2Jvb2xlYW4nXSxcbiAgICAgICAgICAgIFs0LjUsICdudW1iZXInXSxcbiAgICAgICAgICAgIFt7fSwgJ29iamVjdCddLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgJ29iamVjdCddLCAvLyBhcnJheSBpc3QgYXVjaCB0eXBlIG9iamVjdFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgJ3N5bWJvbCddLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICAgICAgaXQoJy5jbG9uZSgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKSBzaG91bGQgICcgKyBiICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGMgPSBjbG9uZShhKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodHlwZW9mIGMpLmlzLmVxdWFsKGIpO1xuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbn0pO1xuXG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgSGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVyLm1qc1wiO1xuaW1wb3J0IHsgTG9nRW50cnkgfSBmcm9tIFwiLi4vbG9nZW50cnkubWpzXCI7XG5pbXBvcnQgeyBUUkFDRSwgV0FSTiwgREVCVUcsIEVSUk9SLCBGQVRBTCwgSU5GTyB9IGZyb20gXCIuLi9sb2dnZXIubWpzXCI7XG5cbmV4cG9ydCB7IENvbnNvbGVIYW5kbGVyIH07XG5cbi8qKlxuICogWW91IGNhbiBjcmVhdGUgYW4gb2JqZWN0IG9mIHRoZSBjbGFzcyBzaW1wbHkgYnkgdXNpbmcgdGhlIG5hbWVzcGFjZSBgbmV3IE1vbnN0ZXIuTG9nZ2luZy5IYW5kbGVyLkNvbnNvbGVIYW5kbGVyKClgLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuTG9nZ2luZy5IYW5kbGVyXG4gKi9cbmNsYXNzIENvbnNvbGVIYW5kbGVyIGV4dGVuZHMgSGFuZGxlciB7XG5cdC8qKlxuXHQgKiBUaGlzIGlzIHRoZSBjZW50cmFsIGxvZyBmdW5jdGlvbi4gdGhpcyBtZXRob2QgbXVzdCBiZVxuXHQgKiBvdmVyd3JpdHRlbiBieSBkZXJpdmVkIGhhbmRsZXJzIHdpdGggdGhlaXIgb3duIGxvZ2ljLlxuXHQgKlxuXHQgKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGICAoQUxMID0gMHhmZjtPRkYgPSAweDAwO1xuXHQgKlxuXHQgKiBAcGFyYW0ge0xvZ0VudHJ5fSBlbnRyeVxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGxvZyhlbnRyeSkge1xuXHRcdGlmIChzdXBlci5sb2coZW50cnkpKSB7XG5cdFx0XHRjb25zdCBjb25zb2xlID0gZ2V0R2xvYmFsT2JqZWN0KFwiY29uc29sZVwiKTtcblx0XHRcdGlmICghY29uc29sZSkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRpZiAoIWNvbnNvbGUuZXJyb3IpIGNvbnNvbGUuZXJyb3IgPSBjb25zb2xlLmxvZztcblx0XHRcdGlmICghY29uc29sZS53YXJuKSBjb25zb2xlLndhcm4gPSBjb25zb2xlLmxvZztcblxuXHRcdFx0c3dpdGNoIChlbnRyeS5nZXRMb2dMZXZlbCgpKSB7XG5cdFx0XHRcdGNhc2UgVFJBQ0U6XG5cdFx0XHRcdGNhc2UgREVCVUc6XG5cdFx0XHRcdGNhc2UgSU5GTzpcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhlbnRyeS50b1N0cmluZygpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGQVRBTDpcblx0XHRcdFx0Y2FzZSBFUlJPUjpcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVudHJ5LnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFdBUk46XG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKGVudHJ5LnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGVudHJ5LnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlSW50ZWdlciB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IExvZ0VudHJ5IH0gZnJvbSBcIi4vbG9nZW50cnkubWpzXCI7XG5pbXBvcnQgeyBBTEwsIERFQlVHLCBFUlJPUiwgRkFUQUwsIElORk8sIE9GRiwgVFJBQ0UsIFdBUk4gfSBmcm9tIFwiLi9sb2dnZXIubWpzXCI7XG5cbmV4cG9ydCB7IEhhbmRsZXIgfTtcblxuLyoqXG4gKiBUaGUgbG9nIGhhbmRsZXIgaXMgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBsb2cgZW50cmllcyBhbmQgdGhlIGxvZyBsaXN0ZW5lcnMuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Mb2dnaW5nXG4gKi9cbmNsYXNzIEhhbmRsZXIgZXh0ZW5kcyBCYXNlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdC8qKlxuXHRcdCAqIExvZ2xldmVsXG5cdFx0ICpcblx0XHQgKiBAdHlwZSB7aW50ZWdlcn1cblx0XHQgKi9cblx0XHR0aGlzLmxvZ2xldmVsID0gT0ZGO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgbG9nIGZ1bmN0aW9uLiB0aGlzIG1ldGhvZCBtdXN0IGJlXG5cdCAqIG92ZXJ3cml0dGVuIGJ5IGRlcml2ZWQgaGFuZGxlcnMgd2l0aCB0aGVpciBvd24gbG9naWMuXG5cdCAqXG5cdCAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkYgIChBTEwgPSAweGZmO09GRiA9IDB4MDA7XG5cdCAqXG5cdCAqIEBwYXJhbSB7TG9nRW50cnl9IGVudHJ5XG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0bG9nKGVudHJ5KSB7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZShlbnRyeSwgTG9nRW50cnkpO1xuXG5cdFx0aWYgKHRoaXMubG9nbGV2ZWwgPCBlbnRyeS5nZXRMb2dMZXZlbCgpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogc2V0IGxvZ2xldmVsXG5cdCAqXG5cdCAqIEBwYXJhbSB7aW50ZWdlcn0gbG9nbGV2ZWxcblx0ICogQHJldHVybnMge0hhbmRsZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0TG9nTGV2ZWwobG9nbGV2ZWwpIHtcblx0XHR2YWxpZGF0ZUludGVnZXIobG9nbGV2ZWwpO1xuXHRcdHRoaXMubG9nbGV2ZWwgPSBsb2dsZXZlbDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBnZXQgbG9nbGV2ZWxcblx0ICpcblx0ICogQHJldHVybnMge2ludGVnZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0Z2V0TG9nTGV2ZWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMubG9nbGV2ZWw7XG5cdH1cblxuXHQvKipcblx0ICogIFNldCBsb2cgbGV2ZWwgdG8gQWxsXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtIYW5kbGVyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdHNldEFsbCgpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKEFMTCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGxvZyBsZXZlbCB0byBUcmFjZVxuXHQgKlxuXHQgKiBAcmV0dXJucyB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRUcmFjZSgpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKFRSQUNFKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgbG9nIGxldmVsIHRvIERlYnVnXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtIYW5kbGVyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdHNldERlYnVnKCkge1xuXHRcdHRoaXMuc2V0TG9nTGV2ZWwoREVCVUcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBsb2cgbGV2ZWwgdG8gSW5mb1xuXHQgKlxuXHQgKiBAcmV0dXJucyB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRJbmZvKCkge1xuXHRcdHRoaXMuc2V0TG9nTGV2ZWwoSU5GTyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGxvZyBsZXZlbCB0byBXYXJuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0V2FybigpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKFdBUk4pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBsb2cgbGV2ZWwgdG8gRXJyb3Jcblx0ICpcblx0ICogQHJldHVybnMge0hhbmRsZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0RXJyb3IoKSB7XG5cdFx0dGhpcy5zZXRMb2dMZXZlbChFUlJPUik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGxvZyBsZXZlbCB0byBGYXRhbFxuXHQgKlxuXHQgKiBAcmV0dXJucyB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRGYXRhbCgpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKEZBVEFMKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgbG9nIGxldmVsIHRvIE9mZlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRPZmYoKSB7XG5cdFx0dGhpcy5zZXRMb2dMZXZlbChPRkYpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUludGVnZXIgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IExvZ0VudHJ5IH07XG5cbi8qKlxuICogQSBsb2cgZW50cnkgZm9yIHRoZSBsb2dnZXJcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkxvZ2dpbmdcbiAqL1xuY2xhc3MgTG9nRW50cnkgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7SW50ZWdlcn0gbG9nbGV2ZWxcblx0ICogQHBhcmFtIHsuLi4qfSBhcmdzXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihsb2dsZXZlbCwgLi4uYXJncykge1xuXHRcdHN1cGVyKCk7XG5cdFx0dmFsaWRhdGVJbnRlZ2VyKGxvZ2xldmVsKTtcblxuXHRcdHRoaXMubG9nbGV2ZWwgPSBsb2dsZXZlbDtcblx0XHR0aGlzLmFyZ3VtZW50cyA9IGFyZ3M7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge2ludGVnZXJyfVxuXHQgKi9cblx0Z2V0TG9nTGV2ZWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMubG9nbGV2ZWw7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge2FycmF5fVxuXHQgKi9cblx0Z2V0QXJndW1lbnRzKCkge1xuXHRcdHJldHVybiB0aGlzLmFyZ3VtZW50cztcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgSGFuZGxlciB9IGZyb20gXCIuLi9sb2dnaW5nL2hhbmRsZXIubWpzXCI7XG5pbXBvcnQgeyBMb2dFbnRyeSB9IGZyb20gXCIuLi9sb2dnaW5nL2xvZ2VudHJ5Lm1qc1wiO1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUludGVnZXIsXG5cdHZhbGlkYXRlT2JqZWN0LFxuXHR2YWxpZGF0ZVN0cmluZyxcbn0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBMb2dnZXIsIEFMTCwgVFJBQ0UsIERFQlVHLCBJTkZPLCBXQVJOLCBFUlJPUiwgRkFUQUwsIE9GRiB9O1xuXG4vKipcbiAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkZcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Mb2dnaW5nXG4gKi9cbmNvbnN0IEFMTCA9IDI1NTtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkxvZ2dpbmdcbiAqL1xuY29uc3QgVFJBQ0UgPSA2NDtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkxvZ2dpbmdcbiAqL1xuY29uc3QgREVCVUcgPSAzMjtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkxvZ2dpbmdcbiAqL1xuY29uc3QgSU5GTyA9IDE2O1xuLyoqXG4gKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGXG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQG1lbWJlck9mIE1vbnN0ZXIuTG9nZ2luZ1xuICovXG5jb25zdCBXQVJOID0gODtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqIEBtZW1iZXJPZiBNb25zdGVyLkxvZ2dpbmdcbiAqL1xuY29uc3QgRVJST1IgPSA0O1xuLyoqXG4gKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGXG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQG1lbWJlck9mIE1vbnN0ZXIuTG9nZ2luZ1xuICovXG5jb25zdCBGQVRBTCA9IDI7XG4vKipcbiAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkZcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Mb2dnaW5nXG4gKi9cbmNvbnN0IE9GRiA9IDA7XG5cbi8qKlxuICogVGhlIGxvZ2dlciBpcyBhIGNsYXNzIHRoYXQgdGFrZXMgY2FyZSBvZiBsb2dnaW5nLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuTG9nZ2luZ1xuICovXG5jbGFzcyBMb2dnZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuaGFuZGxlciA9IG5ldyBTZXQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hhbmRsZXJ9IGhhbmRsZXJcblx0ICogQHJldHVybnMge0xvZ2dlcn1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBoYW5kbGVyIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgSGFuZGxlclxuXHQgKi9cblx0YWRkSGFuZGxlcihoYW5kbGVyKSB7XG5cdFx0dmFsaWRhdGVPYmplY3QoaGFuZGxlcik7XG5cdFx0aWYgKCEoaGFuZGxlciBpbnN0YW5jZW9mIEhhbmRsZXIpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgaGFuZGxlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIEhhbmRsZXJcIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5oYW5kbGVyLmFkZChoYW5kbGVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hhbmRsZXJ9IGhhbmRsZXJcblx0ICogQHJldHVybnMge0xvZ2dlcn1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBoYW5kbGVyIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgSGFuZGxlclxuXHQgKi9cblx0cmVtb3ZlSGFuZGxlcihoYW5kbGVyKSB7XG5cdFx0dmFsaWRhdGVPYmplY3QoaGFuZGxlcik7XG5cdFx0aWYgKCEoaGFuZGxlciBpbnN0YW5jZW9mIEhhbmRsZXIpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgaGFuZGxlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIEhhbmRsZXJcIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5oYW5kbGVyLmRlbGV0ZShoYW5kbGVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBsb2cgVHJhY2UgbWVzc2FnZVxuXHQgKlxuXHQgKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGICAoQUxMID0gMHhmZjtPRkYgPSAweDAwO1xuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyB7TG9nZ2VyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdGxvZ1RyYWNlKC4uLmFyZ3MpIHtcblx0XHRpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgfHwgYXJnc1swXSA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuXHRcdH1cblxuXHRcdHRyaWdnZXJMb2cuYXBwbHkodGhpcywgW1RSQUNFLCAuLi5hcmdzXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbG9nIERlYnVnIG1lc3NhZ2Vcblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhcmd1bWVudHNcblx0ICogQHJldHVybnMge0xvZ2dlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRsb2dEZWJ1ZyguLi5hcmdzKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdFwiKTtcblx0XHR9XG5cblx0XHR0cmlnZ2VyTG9nLmFwcGx5KHRoaXMsIFtERUJVRywgLi4uYXJnc10pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGxvZyBJbmZvIG1lc3NhZ2Vcblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhcmd1bWVudHNcblx0ICogQHJldHVybnMge0xvZ2dlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRsb2dJbmZvKC4uLmFyZ3MpIHtcblx0XHRpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgfHwgYXJnc1swXSA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuXHRcdH1cblxuXHRcdHRyaWdnZXJMb2cuYXBwbHkodGhpcywgW0lORk8sIC4uLmFyZ3NdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBsb2cgV2FybiBtZXNzYWdlXG5cdCAqXG5cdCAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkYgIChBTEwgPSAweGZmO09GRiA9IDB4MDA7XG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIHtMb2dnZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0bG9nV2FybiguLi5hcmdzKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdFwiKTtcblx0XHR9XG5cblx0XHR0cmlnZ2VyTG9nLmFwcGx5KHRoaXMsIFtXQVJOLCAuLi5hcmdzXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbG9nIEVycm9yIG1lc3NhZ2Vcblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhcmd1bWVudHNcblx0ICogQHJldHVybnMge0xvZ2dlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRsb2dFcnJvciguLi5hcmdzKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdFwiKTtcblx0XHR9XG5cblx0XHR0cmlnZ2VyTG9nLmFwcGx5KHRoaXMsIFtFUlJPUiwgLi4uYXJnc10pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGxvZyBGYXRhbCBtZXNzYWdlXG5cdCAqXG5cdCAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkYgIChBTEwgPSAweGZmO09GRiA9IDB4MDA7XG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIHtMb2dnZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0bG9nRmF0YWwoLi4uYXJncykge1xuXHRcdGlmICh0eXBlb2YgYXJncyAhPT0gXCJvYmplY3RcIiB8fCBhcmdzWzBdID09PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3RcIik7XG5cdFx0fVxuXG5cdFx0dHJpZ2dlckxvZy5hcHBseSh0aGlzLCBbRkFUQUwsIC4uLmFyZ3NdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBMYWJlbHNcblx0ICpcblx0ICogQHBhcmFtIHtpbnRlZ2VyfSBsZXZlbFxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0TGFiZWwobGV2ZWwpIHtcblx0XHR2YWxpZGF0ZUludGVnZXIobGV2ZWwpO1xuXG5cdFx0aWYgKGxldmVsID09PSBBTEwpIHJldHVybiBcIkFMTFwiO1xuXHRcdGlmIChsZXZlbCA9PT0gVFJBQ0UpIHJldHVybiBcIlRSQUNFXCI7XG5cdFx0aWYgKGxldmVsID09PSBERUJVRykgcmV0dXJuIFwiREVCVUdcIjtcblx0XHRpZiAobGV2ZWwgPT09IElORk8pIHJldHVybiBcIklORk9cIjtcblx0XHRpZiAobGV2ZWwgPT09IFdBUk4pIHJldHVybiBcIldBUk5cIjtcblx0XHRpZiAobGV2ZWwgPT09IEVSUk9SKSByZXR1cm4gXCJFUlJPUlwiO1xuXHRcdGlmIChsZXZlbCA9PT0gRkFUQUwpIHJldHVybiBcIkZBVEFMXCI7XG5cdFx0aWYgKGxldmVsID09PSBPRkYpIHJldHVybiBcIk9GRlwiO1xuXG5cdFx0cmV0dXJuIFwidW5rbm93blwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIExldmVsXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbFxuXHQgKiBAcmV0dXJucyB7aW50ZWdlcn1cblx0ICovXG5cdGdldExldmVsKGxhYmVsKSB7XG5cdFx0dmFsaWRhdGVTdHJpbmcobGFiZWwpO1xuXG5cdFx0aWYgKGxhYmVsID09PSBcIkFMTFwiKSByZXR1cm4gQUxMO1xuXHRcdGlmIChsYWJlbCA9PT0gXCJUUkFDRVwiKSByZXR1cm4gVFJBQ0U7XG5cdFx0aWYgKGxhYmVsID09PSBcIkRFQlVHXCIpIHJldHVybiBERUJVRztcblx0XHRpZiAobGFiZWwgPT09IFwiSU5GT1wiKSByZXR1cm4gSU5GTztcblx0XHRpZiAobGFiZWwgPT09IFwiV0FSTlwiKSByZXR1cm4gV0FSTjtcblx0XHRpZiAobGFiZWwgPT09IFwiRVJST1JcIikgcmV0dXJuIEVSUk9SO1xuXHRcdGlmIChsYWJlbCA9PT0gXCJGQVRBTFwiKSByZXR1cm4gRkFUQUw7XG5cdFx0aWYgKGxhYmVsID09PSBcIk9GRlwiKSByZXR1cm4gT0ZGO1xuXG5cdFx0cmV0dXJuIDA7XG5cdH1cbn1cblxuLyoqXG4gKiBMb2cgdHJpZ2dlcm5cbiAqXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGxvZ2xldmVsXG4gKiBAcGFyYW0geyp9IGFyZ3NcbiAqIEByZXR1cm5zIHtMb2dnZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0cmlnZ2VyTG9nKGxvZ2xldmVsLCAuLi5hcmdzKSB7XG5cdGZvciAoY29uc3QgaGFuZGxlciBvZiB0aGlzLmhhbmRsZXIpIHtcblx0XHRoYW5kbGVyLmxvZyhuZXcgTG9nRW50cnkobG9nbGV2ZWwsIGFyZ3MpKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiO1xuaW1wb3J0IHtDb25zb2xlSGFuZGxlcn0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9sb2dnaW5nL2hhbmRsZXIvY29uc29sZS5tanNcIjtcbmltcG9ydCB7TG9nRW50cnl9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dlbnRyeS5tanNcIjtcbmltcG9ydCB7VFJBQ0UsIFdBUk4sIERFQlVHLCBFUlJPUiwgRkFUQUwsIElORk99IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dnZXIubWpzXCI7XG5cbmRlc2NyaWJlKCdMb2dnaW5nJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ0NvbnNvbGVIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgY3JlYXRlIENvbnNvbGVIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb25zb2xlSGFuZGxlcigpKS50by5iZS5pbnN0YW5jZW9mKENvbnNvbGVIYW5kbGVyKVxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGxvZyB0byBjb25zb2xlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb25zb2xlSGFuZGxlcigpLnNldEFsbCgpLmxvZyhuZXcgTG9nRW50cnkoRkFUQUwsIFsxLCB0cnVlLCAnZmF0YWwnXSkpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGxvZyB0byBjb25zb2xlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb25zb2xlSGFuZGxlcigpLnNldEFsbCgpLmxvZyhuZXcgTG9nRW50cnkoVFJBQ0UsIFsxLCB0cnVlLCAndHJhY2UnXSkpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGxvZyB0byBjb25zb2xlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb25zb2xlSGFuZGxlcigpLnNldEFsbCgpLmxvZyhuZXcgTG9nRW50cnkoV0FSTiwgWzEsIHRydWUsICd3YXJuJ10pKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2cgdG8gY29uc29sZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKS5zZXRBbGwoKS5sb2cobmV3IExvZ0VudHJ5KERFQlVHLCBbMSwgdHJ1ZSwgJ2RlYnVnJ10pKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2cgdG8gY29uc29sZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKS5zZXRBbGwoKS5sb2cobmV3IExvZ0VudHJ5KEVSUk9SLCBbMSwgdHJ1ZSwgJ2Vycm9yJ10pKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2cgdG8gY29uc29sZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKS5zZXRBbGwoKS5sb2cobmV3IExvZ0VudHJ5KElORk8sIFsxLCB0cnVlLCAnaW5mbyddKSkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtMb2dnZXIsIE9GRiwgQUxMLCBUUkFDRSwgREVCVUcsIElORk8sIFdBUk4sIEVSUk9SLCBGQVRBTH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9sb2dnaW5nL2xvZ2dlci5tanNcIjtcblxuXG5kZXNjcmliZSgnTG9nZ2luZycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCduZXcgTG9nZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkpLnRvLmluc3RhbmNlT2YoTG9nZ2VyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnTG9nZ2VyLmxvZ1RyYWNlKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgTG9nZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2dnZXIoKS5sb2dUcmFjZShcInRlc3RcIikpLnRvLmluc3RhbmNlT2YoTG9nZ2VyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgXG4gICAgZGVzY3JpYmUoJ0xvZ2dlci5sb2dEZWJ1ZygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkubG9nRGVidWcoXCJ0ZXN0XCIpKS50by5pbnN0YW5jZU9mKExvZ2dlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCdMb2dnZXIubG9nSW5mbygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkubG9nSW5mbyhcInRlc3RcIikpLnRvLmluc3RhbmNlT2YoTG9nZ2VyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgXG4gICAgZGVzY3JpYmUoJ0xvZ2dlci5sb2dXYXJuKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgTG9nZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2dnZXIoKS5sb2dXYXJuKFwidGVzdFwiKSkudG8uaW5zdGFuY2VPZihMb2dnZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBcbiAgICBkZXNjcmliZSgnTG9nZ2VyLmxvZ0Vycm9yKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgTG9nZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2dnZXIoKS5sb2dFcnJvcihcInRlc3RcIikpLnRvLmluc3RhbmNlT2YoTG9nZ2VyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgXG4gICAgZGVzY3JpYmUoJ0xvZ2dlci5sb2dGYXRhbCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkubG9nRmF0YWwoXCJ0ZXN0XCIpKS50by5pbnN0YW5jZU9mKExvZ2dlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCdMb2dnZXIuZ2V0TGV2ZWwoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgW1xuICAgICAgICAgICAgWydBTEwnLCBBTExdLFxuICAgICAgICAgICAgWydUUkFDRScsIFRSQUNFXSxcbiAgICAgICAgICAgIFsnREVCVUcnLCBERUJVR10sXG4gICAgICAgICAgICBbJ0lORk8nLCBJTkZPXSxcbiAgICAgICAgICAgIFsnV0FSTicsIFdBUk5dLFxuICAgICAgICAgICAgWydFUlJPUicsIEVSUk9SXSxcbiAgICAgICAgICAgIFsnRkFUQUwnLCBGQVRBTF0sXG4gICAgICAgICAgICBbJ09GRicsIE9GRl0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoYSArICcgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkuZ2V0TGV2ZWwoYSkpLnRvLmJlLmVxdWFscyhiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnTG9nZ2VyLmdldExhYmVsKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnQUxMJywgQUxMXSxcbiAgICAgICAgICAgIFsnVFJBQ0UnLCBUUkFDRV0sXG4gICAgICAgICAgICBbJ0RFQlVHJywgREVCVUddLFxuICAgICAgICAgICAgWydJTkZPJywgSU5GT10sXG4gICAgICAgICAgICBbJ1dBUk4nLCBXQVJOXSxcbiAgICAgICAgICAgIFsnRVJST1InLCBFUlJPUl0sXG4gICAgICAgICAgICBbJ0ZBVEFMJywgRkFUQUxdLFxuICAgICAgICAgICAgWydPRkYnLCBPRkZdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KGEgKyAnIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpLmdldExhYmVsKGIpKS50by5iZS5lcXVhbHMoYSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCI7XG5pbXBvcnQge0FMTCwgVFJBQ0UsIERFQlVHLCBJTkZPLCBXQVJOLCBFUlJPUiwgRkFUQUwsIE9GRn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9sb2dnaW5nL2xvZ2dlci5tanNcIjtcbmltcG9ydCB7SGFuZGxlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9sb2dnaW5nL2hhbmRsZXIubWpzXCI7XG5pbXBvcnQge0xvZ0VudHJ5fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2xvZ2dpbmcvbG9nZW50cnkubWpzXCI7XG5cbmRlc2NyaWJlKCdMb2dnaW5nJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuc2V0TG9nTGV2ZWwoKS5nZXRMb2dMZXZlbCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtBTExdLCBbVFJBQ0VdLCBbREVCVUddLCBbSU5GT10sIFtXQVJOXSwgW0VSUk9SXSwgW0ZBVEFMXSwgW09GRl0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgndGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gdGhlIHNldCB2YWx1ZSAnICsgYSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldExvZ0xldmVsKGEpLmdldExvZ0xldmVsKCkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnSGFuZGxlci5sb2coKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkubG9nKG5ldyBMb2dFbnRyeSgwLCBcInRlc3RcIikpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdIYW5kbGVyLmxvZygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBoYW5kbGVyO1xuXG4gICAgICAgIGNsYXNzIFRlc3RIYW5kbGVyIGV4dGVuZHMgSGFuZGxlciB7XG4gICAgICAgICAgICBsb2coZW50cnkpIHtcbiAgICAgICAgICAgICAgICBzdXBlci5sb2coZW50cnkpO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBoYW5kbGVyID0gbmV3IFRlc3RIYW5kbGVyKCk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkubG9nKG5ldyBMb2dFbnRyeSgwLCBcInRlc3RcIikpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmxvZygpIHdpdGggbG9nbGV2ZWwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IFRlc3RIYW5kbGVyO1xuXG4gICAgICAgIGJlZm9yZSgoKSA9PiB7XG4gICAgICAgICAgICBUZXN0SGFuZGxlciA9IGNsYXNzIGV4dGVuZHMgSGFuZGxlciB7XG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbHMgPSAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxvZyhsb2dsZXZlbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3VwZXIubG9nKGxvZ2xldmVsKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxscysrXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBbIC8vIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkYgIChBTEwgPSAweGZmO09GRiA9IDB4MDA7XG4gICAgICAgICAgICBbQUxMLCA2XSxcbiAgICAgICAgICAgIFtUUkFDRSwgNl0sXG4gICAgICAgICAgICBbREVCVUcsIDVdLFxuICAgICAgICAgICAgW0lORk8sIDRdLFxuICAgICAgICAgICAgW1dBUk4sIDNdLFxuICAgICAgICAgICAgW0VSUk9SLCAyXSxcbiAgICAgICAgICAgIFtGQVRBTCwgMV0sXG4gICAgICAgICAgICBbT0ZGLCAwXVxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5sb2coJyArIGEgKyAnKSBzaG91bGQgbG9nICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGhhbmRsZXIgPSBuZXcgVGVzdEhhbmRsZXIoKS5zZXRMb2dMZXZlbChhKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyLmxvZyhuZXcgTG9nRW50cnkoVFJBQ0UpKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyLmxvZyhuZXcgTG9nRW50cnkoREVCVUcpKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyLmxvZyhuZXcgTG9nRW50cnkoSU5GTykpO1xuICAgICAgICAgICAgICAgIGhhbmRsZXIubG9nKG5ldyBMb2dFbnRyeShXQVJOKSk7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5sb2cobmV3IExvZ0VudHJ5KEVSUk9SKSk7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5sb2cobmV3IExvZ0VudHJ5KEZBVEFMKSk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoaGFuZGxlci5jYWxscykuaXMuZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldExvZ0xldmVsKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldExvZ0xldmVsKEFMTCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuZ2V0TG9nTGV2ZWwoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ25ldyBsb2dnZXIgc2hvdWxkIGJlIDAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5nZXRMb2dMZXZlbCgpKS50by5iZS5lcXVhbChPRkYpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldEFsbCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnIHNob3VsZCBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRBbGwoKSkudG8uaW5zdGFuY2VPZihIYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuc2V0VHJhY2UoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ25ldyBsb2dnZXIgc2hvdWxkIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldFRyYWNlKCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldERlYnVnKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCcgc2hvdWxkIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldERlYnVnKCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldEluZm8oKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkuc2V0SW5mbygpKS50by5pbnN0YW5jZU9mKEhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnSGFuZGxlci5zZXRXYXJuKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCcgc2hvdWxkIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldFdhcm4oKSkudG8uaW5zdGFuY2VPZihIYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuc2V0RXJyb3IoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkuc2V0RXJyb3IoKSkudG8uaW5zdGFuY2VPZihIYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuc2V0RmF0YWwoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkuc2V0RmF0YWwoKSkudG8uaW5zdGFuY2VPZihIYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuc2V0T2ZmKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldE9mZigpKS50by5pbnN0YW5jZU9mKEhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtMb2dFbnRyeX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9sb2dnaW5nL2xvZ2VudHJ5Lm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdMb2cnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnbmV3IExvZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBMb2cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IExvZ0VudHJ5KDEsICdhJywgJ2InLCAnYycpKS50by5pbnN0YW5jZU9mKExvZ0VudHJ5KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnTG9nLmxvZ2xldmVsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBsb2c7XG5cbiAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsb2cgPSBuZXcgTG9nRW50cnkoMSwgZmFsc2UsICd0ZXN0JywgOTksIHthOiB0cnVlfSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gbG9nbGV2ZWwgMScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChsb2cuZ2V0TG9nTGV2ZWwoKSkudG8uYmUuZXF1YWwoMSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYXJndW1lbnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGxvZy5nZXRBcmd1bWVudHMoKSkudG8uaGF2ZS5kZWVwLm1lbWJlcnMoW2ZhbHNlLCAndGVzdCcsIDk5LCB7YTogdHJ1ZX1dKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1dlYkNvbm5lY3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvbmV0L3dlYmNvbm5lY3QubWpzXCI7XG5pbXBvcnQge01lc3NhZ2V9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvbmV0L3dlYmNvbm5lY3QvbWVzc2FnZS5tanNcIjtcbmltcG9ydCB7T2JzZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQge2luaXRXZWJTb2NrZXR9IGZyb20gXCIuLi8uLi91dGlsL3dlYnNvY2tldC5tanNcIjtcblxuY29uc3QgdGVzdFVybCA9IFwid3NzOi8vd3MucG9zdG1hbi1lY2hvLmNvbS9yYXdcIlxuXG5kZXNjcmliZSgnV2Vic29ja2V0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGRzID0gdW5kZWZpbmVkXG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdFdlYlNvY2tldCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBkb25lKGUpXG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaWYgKGRzKSB7XG4gICAgICAgICAgICBkcy5jbG9zZSgpXG4gICAgICAgIH1cblxuICAgICAgICAvLyB3aXRob3V0IHRoaXMsIHRoZSBub2RlIHRlc3Qgd2lsbCBoYW5nIFxuICAgICAgICBmb3IgKGNvbnN0IHN5bSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGRzKSkge1xuICAgICAgICAgICAgaWYgKHN5bS50b1N0cmluZygpID09PSAnU3ltYm9sKGNvbm5lY3Rpb24pJykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZHNbc3ltXT8uc29ja2V0Py50ZXJtaW5hdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgZHNbc3ltXT8uc29ja2V0Py5bJ3Rlcm1pbmF0ZSddKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkb25lKClcbiAgICB9KTtcblxuXG4gICAgaXQoJ3Nob3VsZCB0cmFuc2Zvcm0gZGF0YScsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgZHMgPSBuZXcgV2ViQ29ubmVjdCgge1xuICAgICAgICAgICAgdXJsOiB0ZXN0VXJsLFxuICAgICAgICB9KVxuXG4gICAgICAgIGRzLmNvbm5lY3QoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZHMuYXR0YWNoT2JzZXJ2ZXIobmV3IE9ic2VydmVyKCgpPT4ge1xuICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZHMuc2VuZCh7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBcIkhlbGxvIFdvcmxkXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBkb25lKGUpXG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cbiAgICBpdCgnc2hvdWxkIGNvbm5lY3QnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBkcyA9IG5ldyBXZWJDb25uZWN0KHtcbiAgICAgICAgICAgIHVybDogdGVzdFVybCxcbiAgICAgICAgICAgIHJlY29ubmVjdDoge1xuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBkcy5jb25uZWN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgfSlcblxuXG4gICAgfSlcblxuICAgIGl0KCdzaG91bGQgc2VuZCBtZXNzYWdlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgZHMgPSBuZXcgV2ViQ29ubmVjdCh7XG4gICAgICAgICAgICB1cmw6IHRlc3RVcmwsXG4gICAgICAgICAgICByZWNvbm5lY3Q6IHtcbiAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZHMuY29ubmVjdCgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBkcy5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoKCk9PiB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRzLmRhdGFSZWNlaXZlZCgpKS50by5iZS50cnVlXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnID0gZHMucG9sbCgpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChtc2cpLnRvLmJlLmluc3RhbmNlT2YoTWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IG1zZy5nZXREYXRhKClcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRhdGEpLnRvLmJlLmRlZXAuZXF1YWwoe21lc3NhZ2U6IFwiSGVsbG8gV29ybGRcIn0pXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pKVxuXG4gICAgICAgICAgICBkcy5zZW5kKHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXCJIZWxsbyBXb3JsZFwiXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBkb25lKGUpXG4gICAgICAgIH0pXG5cblxuICAgIH0pLnRpbWVvdXQoMTAwMDApO1xuXG59KTtcbiIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5cbmZ1bmN0aW9uIGluaXRXZWJTb2NrZXQoKSB7XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8IHByb2Nlc3MudGl0bGUgIT09ICdub2RlJykge1xuICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBpbXBvcnQoXCJ3c1wiKS50aGVuKCh3cykgPT4ge1xuICAgICAgICBnZXRHbG9iYWwoKS5XZWJTb2NrZXQgPSBjbGFzcyBleHRlbmRzIHdzWydXZWJTb2NrZXQnXSB7XG4gICAgICAgICAgICBjb25zdHJ1Y3Rvcih1cmwsIHByb3RvY29scykge1xuICAgICAgICAgICAgICAgIHN1cGVyKHVybCwgcHJvdG9jb2xzLCB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRzaGFrZVRpbWVvdXQ6IDEwMDAsXG4gICAgICAgICAgICAgICAgICAgIG1heFBheWxvYWQ6IDEwMjQgKiAxMDI0ICogMTAyNCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgfSk7XG5cblxufVxuXG5leHBvcnQge2luaXRXZWJTb2NrZXR9IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge01lc3NhZ2V9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvbmV0L3dlYmNvbm5lY3QvbWVzc2FnZS5tanNcIjtcblxuZGVzY3JpYmUoJ01lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBpdCgnY29uc3RydWN0IHdpdGhvdXRoIHBhcmFtZXRlcnMgc2hvdWxkIHRocm93JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgTWVzc2FnZSgpO1xuICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoJ3Nob3VsZCB0aHJvdycpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9XG5cbiAgICB9KVxuICAgIFxuICAgIGl0KCdmcm9tIGpzb24gc2hvdWxkICcgLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAgXCJpZFwiOiBcIjEyM1wiLFxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwidGVzdFwiLFxuICAgICAgICAgICAgXCJkYXRhXCI6IHtcbiAgICAgICAgICAgICAgICBcInRlc3RcIjogXCJ0ZXN0XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXNzYWdlID0gTWVzc2FnZS5mcm9tSlNPTihKU09OLnN0cmluZ2lmeShqc29uKSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBtZXNzYWdlLmdldERhdGEoKTtcbiAgICAgICAgZXhwZWN0KGRhdGEuaWQpLnRvLmVxdWFsKGpzb24uaWQpO1xuICAgICAgICBleHBlY3QoZGF0YS50eXBlKS50by5lcXVhbChqc29uLnR5cGUpO1xuICAgICAgICBleHBlY3QoZGF0YS5kYXRhKS50by5kZWVwLmVxdWFsKGpzb24uZGF0YSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICB9KVxuICAgIFxuICAgIGl0IChcInRvIGpzb24gc2hvdWxkXCIsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIFwiaWRcIjogXCIxMjNcIixcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInRlc3RcIixcbiAgICAgICAgICAgIFwiZGF0YVwiOiB7XG4gICAgICAgICAgICAgICAgXCJ0ZXN0XCI6IFwidGVzdFwiXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IG5ldyBNZXNzYWdlKG9iaik7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShtZXNzYWdlKTtcbiAgICAgICAgZXhwZWN0KGRhdGEpLnRvLmVxdWFsKCd7XCJpZFwiOlwiMTIzXCIsXCJ0eXBlXCI6XCJ0ZXN0XCIsXCJkYXRhXCI6e1widGVzdFwiOlwidGVzdFwifX0nKTtcbiAgICAgICAgZG9uZSgpO1xuICAgIH0pXG5cblxuXG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBWZXJzaW9uLCBnZXRNb25zdGVyVmVyc2lvbiB9O1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9iamVjdCBjb250YWlucyBhIHNlbWFudGljIHZlcnNpb24gbnVtYmVyXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL3ZlcnNpb24tMS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAYXV0aG9yIHNjaHVrYWkgR21iSFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAc3VtbWFyeSBUaGUgdmVyc2lvbiBvYmplY3QgY29udGFpbnMgYSBzZW1hdGljIHZlcnNpb24gbnVtYmVyXG4gKi9cbmNsYXNzIFZlcnNpb24gZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBtYWpvclxuXHQgKiBAcGFyYW0gbWlub3Jcblx0ICogQHBhcmFtIHBhdGNoXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtYWpvciBpcyBub3QgYSBudW1iZXJcblx0ICogQHRocm93cyB7RXJyb3J9IG1pbm9yIGlzIG5vdCBhIG51bWJlclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gcGF0Y2ggaXMgbm90IGEgbnVtYmVyXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihtYWpvciwgbWlub3IsIHBhdGNoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChcblx0XHRcdHR5cGVvZiBtYWpvciA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0bWlub3IgPT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0cGF0Y2ggPT09IHVuZGVmaW5lZFxuXHRcdCkge1xuXHRcdFx0Y29uc3QgcGFydHMgPSBtYWpvci50b1N0cmluZygpLnNwbGl0KFwiLlwiKTtcblx0XHRcdG1ham9yID0gcGFyc2VJbnQocGFydHNbMF0gfHwgMCk7XG5cdFx0XHRtaW5vciA9IHBhcnNlSW50KHBhcnRzWzFdIHx8IDApO1xuXHRcdFx0cGF0Y2ggPSBwYXJzZUludChwYXJ0c1syXSB8fCAwKTtcblx0XHR9XG5cblx0XHRpZiAobWFqb3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWFqb3IgdmVyc2lvbiBpcyB1bmRlZmluZWRcIik7XG5cdFx0fVxuXG5cdFx0aWYgKG1pbm9yID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG1pbm9yID0gMDtcblx0XHR9XG5cblx0XHRpZiAocGF0Y2ggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGF0Y2ggPSAwO1xuXHRcdH1cblxuXHRcdHRoaXMubWFqb3IgPSBwYXJzZUludChtYWpvcik7XG5cdFx0dGhpcy5taW5vciA9IHBhcnNlSW50KG1pbm9yKTtcblx0XHR0aGlzLnBhdGNoID0gcGFyc2VJbnQocGF0Y2gpO1xuXG5cdFx0aWYgKGlzTmFOKHRoaXMubWFqb3IpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtYWpvciBpcyBub3QgYSBudW1iZXJcIik7XG5cdFx0fVxuXG5cdFx0aWYgKGlzTmFOKHRoaXMubWlub3IpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaW5vciBpcyBub3QgYSBudW1iZXJcIik7XG5cdFx0fVxuXG5cdFx0aWYgKGlzTmFOKHRoaXMucGF0Y2gpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJwYXRjaCBpcyBub3QgYSBudW1iZXJcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvdmVyc2lvblwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIGAke3RoaXMubWFqb3J9LiR7dGhpcy5taW5vcn0uJHt0aGlzLnBhdGNofWA7XG5cdH1cblxuXHQvKipcblx0ICogcmV0dXJucyAwIGlmIGVxdWFsLCAtMSBpZiB0aGUgb2JqZWN0IHZlcnNpb24gaXMgbGVzcyBhbmQgMSBpZiBncmVhdGVyXG5cdCAqIHRoYW4gdGhlIGNvbXBhcmVkIHZlcnNpb25cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8VmVyc2lvbn0gdmVyc2lvbiBWZXJzaW9uIHRvIGNvbXBhcmVcblx0ICogQHJldHVybnMge251bWJlcn1cblx0ICovXG5cdGNvbXBhcmVUbyh2ZXJzaW9uKSB7XG5cdFx0aWYgKHZlcnNpb24gaW5zdGFuY2VvZiBWZXJzaW9uKSB7XG5cdFx0XHR2ZXJzaW9uID0gdmVyc2lvbi50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgdmVyc2lvbiAhPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBleGNlcHRpb25cIik7XG5cdFx0fVxuXG5cdFx0aWYgKHZlcnNpb24gPT09IHRoaXMudG9TdHJpbmcoKSkge1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYSA9IFt0aGlzLm1ham9yLCB0aGlzLm1pbm9yLCB0aGlzLnBhdGNoXTtcblx0XHRjb25zdCBiID0gdmVyc2lvbi5zcGxpdChcIi5cIik7XG5cdFx0Y29uc3QgbGVuID0gTWF0aC5tYXgoYS5sZW5ndGgsIGIubGVuZ3RoKTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDEpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0KGFbaV0gJiYgIWJbaV0gJiYgcGFyc2VJbnQoYVtpXSkgPiAwKSB8fFxuXHRcdFx0XHRwYXJzZUludChhW2ldKSA+IHBhcnNlSW50KGJbaV0pXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHQoYltpXSAmJiAhYVtpXSAmJiBwYXJzZUludChiW2ldKSA+IDApIHx8XG5cdFx0XHRcdHBhcnNlSW50KGFbaV0pIDwgcGFyc2VJbnQoYltpXSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIDA7XG5cdH1cbn1cblxubGV0IG1vbnN0ZXJWZXJzaW9uO1xuXG4vKipcbiAqIFZlcnNpb24gb2YgbW9uc3RlclxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy92ZXJzaW9uLTIubWpzXG4gKiBAcmV0dXJucyB7TW9uc3Rlci5UeXBlcy5WZXJzaW9ufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAYXV0aG9yIHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXJcbiAqL1xuZnVuY3Rpb24gZ2V0TW9uc3RlclZlcnNpb24oKSB7XG5cdGlmIChtb25zdGVyVmVyc2lvbiBpbnN0YW5jZW9mIFZlcnNpb24pIHtcblx0XHRyZXR1cm4gbW9uc3RlclZlcnNpb247XG5cdH1cblxuXHQvKiogZG9uJ3QgdG91Y2gsIHJlcGxhY2VkIGJ5IG1ha2Ugd2l0aCBwYWNrYWdlLmpzb24gdmVyc2lvbiAqL1xuXHRtb25zdGVyVmVyc2lvbiA9IG5ldyBWZXJzaW9uKFwiMy41Ni4xXCIpO1xuXG5cdHJldHVybiBtb25zdGVyVmVyc2lvbjtcbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtWZXJzaW9uLCBnZXRNb25zdGVyVmVyc2lvbn0gZnJvbSBcIi4uLy4uL3NvdXJjZS90eXBlcy92ZXJzaW9uLm1qc1wiO1xuXG5kZXNjcmliZSgnTW9uc3RlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcuZ2V0TW9uc3RlclZlcnNpb24oKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IG1vbnN0ZXJWZXJzaW9uXG5cbiAgICAgICAgLyoqIGRvblx1MDBCNHQgdG91Y2gsIHJlcGxhY2VkIGJ5IG1ha2Ugd2l0aCBwYWNrYWdlLmpzb24gdmVyc2lvbiAqL1xuICAgICAgICBtb25zdGVyVmVyc2lvbiA9IG5ldyBWZXJzaW9uKFwiMy41Ni4xXCIpXG5cbiAgICAgICAgbGV0IG0gPSBnZXRNb25zdGVyVmVyc2lvbigpO1xuXG4gICAgICAgIGl0KCdzaG91bGQgJyArIG1vbnN0ZXJWZXJzaW9uICsgJyBpcyAnICsgbSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG0uY29tcGFyZVRvKG1vbnN0ZXJWZXJzaW9uKSkuaXMuZXF1YWwoMCk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbn0pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgZ2V0V2luZG93IH0gZnJvbSBcIi4vdXRpbC5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBjb252ZXJ0VG9QaXhlbHMsIGdldERldmljZURQSSB9O1xuXG4vKipcbiAqIFN0b3JlcyB0aGUgRFBJIG9mIHRoZSBkZXZpY2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKiBAc2luY2UgMy4zNC4wXG4gKiBAdHlwZSB7bnVtYmVyfGZ1bmN0aW9ufVxuICovXG5sZXQgQ1VSUkVOVF9ERVZJQ0VfRFBJID0gZnVuY3Rpb24gKCkge1xuXHRsZXQgaSA9IDA7XG5cdGZvciAoaSA9IDU2OyBpIDwgMjAwMDsgaSsrKSB7XG5cdFx0aWYgKGdldFdpbmRvdygpLm1hdGNoTWVkaWEoYChtYXgtcmVzb2x1dGlvbjogJHtpfWRwaSlgKS5tYXRjaGVzID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gaTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIERQSSBvZiB0aGUgZGV2aWNlLlxuICpcbiAqIEBzaW5jZSAzLjM0LjBcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTVxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0RGV2aWNlRFBJKCkge1xuXHQvLyBvbmx5IGNhbGwgdGhlIGZ1bmN0aW9uIG9uY2Vcblx0aWYgKHR5cGVvZiBDVVJSRU5UX0RFVklDRV9EUEkgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdENVUlJFTlRfREVWSUNFX0RQSSA9IENVUlJFTlRfREVWSUNFX0RQSSgpO1xuXHR9XG5cblx0cmV0dXJuIGdldFdpbmRvdygpLmRldmljZVBpeGVsUmF0aW8gKiBDVVJSRU5UX0RFVklDRV9EUEk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBDU1MgdmFsdWUgdG8gcGl4ZWxzLlxuICpcbiAqIEFzIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIGNvbnZlcnRUb1BpeGVscygnMWVtJykgLy8gcmV0dXJucyB0aGUgY3VycmVudCBmb250IHNpemUgaW4gcGl4ZWxzXG4gKiBjb252ZXJ0VG9QaXhlbHMoJzFyZW0nKSAvLyByZXR1cm5zIHRoZSBjdXJyZW50IHJvb3QgZm9udCBzaXplIGluIHBpeGVsc1xuICogY29udmVydFRvUGl4ZWxzKCcxcHgnKSAvLyByZXR1cm5zIDFcbiAqIGNvbnZlcnRUb1BpeGVscygnMTAwJScpIC8vIHJldHVybnMgdGhlIGN1cnJlbnQgd2lkdGggb2YgdGhlIHBhcmVudCBlbGVtZW50IGluIHBpeGVsc1xuICogYGBgXG4gKlxuICogRm9sbG93aW5nIHVuaXRzIGFyZSBzdXBwb3J0ZWQ6XG4gKiAtIHB4XG4gKiAtIGVtXG4gKiAtIHJlbVxuICogLSAlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBbcGFyZW50RWxlbWVudD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBbZm9udFNpemVFbGVtZW50PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudF1cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjM0LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtFcnJvcn0gVW5zdXBwb3J0ZWQgdW5pdFxuICogQG1lbWJlck9mIE1vbnN0ZXIuRE9NXG4gKiBAdGhyb3dzIHtFcnJvcn0gSW52YWxpZCB2YWx1ZSBmb3JtYXRcbiAqL1xuXG5mdW5jdGlvbiBjb252ZXJ0VG9QaXhlbHMoXG5cdHZhbHVlLFxuXHRwYXJlbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRmb250U2l6ZUVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4pIHtcblx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXG5cdGNvbnN0IHJlZ2V4ID0gL14oLT9bXFxkLl0rKSguKikkLztcblx0Y29uc3QgbWF0Y2hSZXN1bHQgPSB2YWx1ZS5tYXRjaChyZWdleCk7XG5cblx0aWYgKCFtYXRjaFJlc3VsdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YWx1ZSBmb3JtYXQ6ICR7dmFsdWV9YCk7XG5cdH1cblxuXHRjb25zdCBbLCBudW0sIHVuaXRdID0gbWF0Y2hSZXN1bHQ7XG5cdGNvbnN0IG51bWJlciA9IHBhcnNlRmxvYXQobnVtKTtcblx0Y29uc3QgZHBpID0gZ2V0RGV2aWNlRFBJKCk7XG5cblx0aWYgKHVuaXQgPT09IFwicHhcIikge1xuXHRcdHJldHVybiBudW1iZXI7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJlbVwiKSB7XG5cdFx0Y29uc3QgZm9udFNpemUgPSBwYXJzZUZsb2F0KFxuXHRcdFx0d2luZG93LmdldENvbXB1dGVkU3R5bGUoZm9udFNpemVFbGVtZW50KS5mb250U2l6ZSxcblx0XHQpO1xuXHRcdHJldHVybiBudW1iZXIgKiBmb250U2l6ZTtcblx0fSBlbHNlIGlmICh1bml0ID09PSBcInJlbVwiKSB7XG5cdFx0Y29uc3Qgcm9vdEZvbnRTaXplID0gcGFyc2VGbG9hdChcblx0XHRcdHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudEVsZW1lbnQpLmZvbnRTaXplLFxuXHRcdCk7XG5cdFx0cmV0dXJuIG51bWJlciAqIHJvb3RGb250U2l6ZTtcblx0fSBlbHNlIGlmICh1bml0ID09PSBcIiVcIikge1xuXHRcdGNvbnN0IHBhcmVudFdpZHRoID0gcGFyc2VGbG9hdChcblx0XHRcdHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudEVsZW1lbnQpLndpZHRoLFxuXHRcdCk7XG5cdFx0cmV0dXJuIChudW1iZXIgKiBwYXJlbnRXaWR0aCkgLyAxMDA7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJpblwiKSB7XG5cdFx0cmV0dXJuIG51bWJlciAqIGRwaTtcblx0fSBlbHNlIGlmICh1bml0ID09PSBcImNtXCIpIHtcblx0XHRyZXR1cm4gKG51bWJlciAqIGRwaSkgLyAyLjU0O1xuXHR9IGVsc2UgaWYgKHVuaXQgPT09IFwibW1cIikge1xuXHRcdHJldHVybiAobnVtYmVyICogZHBpKSAvIDI1LjQ7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJwdFwiKSB7XG5cdFx0cmV0dXJuIChudW1iZXIgKiBkcGkpIC8gNzI7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJwY1wiKSB7XG5cdFx0cmV0dXJuIChudW1iZXIgKiBkcGkpIC8gNjtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHVuaXQ6ICR7dW5pdH1gKTtcblx0fVxufVxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y29udmVydFRvUGl4ZWxzLCBnZXREZXZpY2VEUEl9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2RpbWVuc2lvbi5tanNcIjtcbmltcG9ydCB7Z2V0V2luZG93fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET00sIGlzQnJvd3NlciwgSlNET01FeHBvcnQgYXMgSlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHtkZXRlY3RSdW50aW1lRW52aXJvbm1lbnR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdXRpbC9ydW50aW1lLm1qc1wiO1xuXG5cbmZ1bmN0aW9uIGdldE1vY2tXaW5kb3coZHBpKSB7XG5cbiAgICBpZihkZXRlY3RSdW50aW1lRW52aXJvbm1lbnQoKSA9PT0gJ2Jyb3dzZXInKSB7XG4gICAgICAgIHJldHVybiBnZXRXaW5kb3coKTtcbiAgICB9XG4gICAgXG4gICAgXG4gICAgY29uc3QgZG9tID0gbmV3IEpTRE9NKCcnLCB7XG4gICAgICAgIHByZXRlbmRUb0JlVmlzdWFsOiB0cnVlLFxuICAgICAgICByZXNvdXJjZXM6ICd1c2FibGUnLFxuICAgIH0pO1xuXG4gICAgZG9tLndpbmRvdy5tYXRjaE1lZGlhID0gKHF1ZXJ5KSA9PiB7XG4gICAgICAgIGNvbnN0IGRwaVJlZ2V4ID0gL1xcKG1heC1yZXNvbHV0aW9uOiAoXFxkKylkcGlcXCkvO1xuICAgICAgICBjb25zdCBtYXRjaCA9IHF1ZXJ5Lm1hdGNoKGRwaVJlZ2V4KTtcblxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heERwaSA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7XG4gICAgICAgICAgICByZXR1cm4ge21hdGNoZXM6IGRwaSA8PSBtYXhEcGl9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHttYXRjaGVzOiBmYWxzZX07XG4gICAgfTtcblxuICAgIHJldHVybiBkb20ud2luZG93O1xufVxuXG5kZXNjcmliZSgnZGltZW5zaW9uJywgKCkgPT4ge1xuICAgIGxldCBjdXJyZW50RW52aXJvbm1lbnQ7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAvL2NoYWlEb20oZ2V0RG9jdW1lbnQoKSk7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICBjb25zdCB0ZXN0RHBpID0gOTY7XG4gICAgICAgIGNvbnN0IHRlc3RXaW5kb3cgPSBnZXRNb2NrV2luZG93KHRlc3REcGkpO1xuICAgICAgICBnZXRHbG9iYWwoKS53aW5kb3cgPSB0ZXN0V2luZG93O1xuXG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBkZWxldGUgZ2V0R2xvYmFsKCkud2luZG93O1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NvbnZlcnRUb1BpeGVscycsICgpID0+IHtcbiAgICAgICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgY29udmVydCBweCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VG9QaXhlbHMoJzEwMHB4Jyk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgxMDApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChcInNob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIHRoZSBpbnB1dCB2YWx1ZSBoYXMgYW4gaW52YWxpZCBmb3JtYXRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW52YWxpZFZhbHVlID0gXCJpbnZhbGlkX3ZhbHVlXCI7XG5cbiAgICAgICAgICAgIGNvbnN0IGVycm9yRm4gPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29udmVydFRvUGl4ZWxzKGludmFsaWRWYWx1ZSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBleHBlY3QoZXJyb3JGbikudG8udGhyb3coRXJyb3IsIGBJbnZhbGlkIHZhbHVlIGZvcm1hdDogJHtpbnZhbGlkVmFsdWV9YCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KFwic2hvdWxkIGhhbmRsZSBuZWdhdGl2ZSB2YWx1ZXMgY29ycmVjdGx5XCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5lZ2F0aXZlVmFsdWUgPSBcIi0xMHB4XCI7XG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IC0xMDtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udmVydFRvUGl4ZWxzKG5lZ2F0aXZlVmFsdWUpO1xuXG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGNvbnZlcnQgZW0gdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVzdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRlc3RFbGVtZW50LnN0eWxlLmZvbnRTaXplID0gJzE2cHgnO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXN0RWxlbWVudCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUb1BpeGVscygnMmVtJywgdGVzdEVsZW1lbnQsIHRlc3RFbGVtZW50KTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKDMyKTtcblxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXN0RWxlbWVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGNvbnZlcnQgcmVtIHZhbHVlcycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0ZXN0RWxlbWVudC5zdHlsZS5mb250U2l6ZSA9ICcxNnB4JztcbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0ZXN0RWxlbWVudCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUb1BpeGVscygnMnJlbScsIHRlc3RFbGVtZW50KTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKDMyKTtcblxuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRlc3RFbGVtZW50KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgY29udmVydCBwZXJjZW50YWdlIHZhbHVlcycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0ZXN0RWxlbWVudC5zdHlsZS53aWR0aCA9ICc1MDBweCc7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlc3RFbGVtZW50KTtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udmVydFRvUGl4ZWxzKCc1MCUnLCB0ZXN0RWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgyNTApO1xuXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRlc3RFbGVtZW50KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBmb3IgdW5zdXBwb3J0ZWQgdW5pdHMnLCAoKSA9PiB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gY29udmVydFRvUGl4ZWxzKCcxMHVuc3VwcG9ydGVkVW5pdCcpKS50by50aHJvdygnVW5zdXBwb3J0ZWQgdW5pdDogdW5zdXBwb3J0ZWRVbml0Jyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnZ2V0RGV2aWNlRFBJJywgKCkgPT4ge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCBkZXZpY2UgRFBJJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVzdERwaSA9IDk2O1xuICAgICAgICAgICAgY29uc3QgdGVzdFdpbmRvdyA9IGdldE1vY2tXaW5kb3codGVzdERwaSk7XG4gICAgICAgICAgICBnZXRHbG9iYWwoKS53aW5kb3cgPSB0ZXN0V2luZG93O1xuXG4gICAgICAgICAgICBjb25zdCBkZXZpY2VEcGkgPSBnZXREZXZpY2VEUEkoKTtcbiAgICAgICAgICAgIGV4cGVjdChkZXZpY2VEcGkpLnRvLmVxdWFsKHRlc3REcGkgKiB0ZXN0V2luZG93LmRldmljZVBpeGVsUmF0aW8pO1xuXG4gICAgICAgICAgICBkZWxldGUgZ2V0R2xvYmFsKCkud2luZG93O1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNhY2hlIHRoZSByZXN1bHQgYW5kIHJldHVybiB0aGUgc2FtZSB2YWx1ZScsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3REcGkgPSA5NjtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RXaW5kb3cgPSBnZXRNb2NrV2luZG93KHRlc3REcGkpO1xuICAgICAgICAgICAgZ2V0R2xvYmFsKCkud2luZG93ID0gdGVzdFdpbmRvdztcblxuICAgICAgICAgICAgY29uc3QgZGV2aWNlRHBpMSA9IGdldERldmljZURQSSgpO1xuICAgICAgICAgICAgY29uc3QgZGV2aWNlRHBpMiA9IGdldERldmljZURQSSgpO1xuICAgICAgICAgICAgZXhwZWN0KGRldmljZURwaTEpLnRvLmVxdWFsKGRldmljZURwaTIpO1xuXG4gICAgICAgICAgICBkZWxldGUgZ2V0R2xvYmFsKCkud2luZG93O1xuICAgICAgICB9KTtcbiAgICB9KTtcblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBFTlZfQVdTX0xBTUJEQSA9IFwiYXdzLWxhbWJkYVwiO1xuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBFTlZfR09PR0xFX0ZVTkNUSU9OUyA9IFwiZ29vZ2xlLWZ1bmN0aW9uc1wiO1xuLyoqXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBFTlZfRUxFQ1RST04gPSBcImVsZWN0cm9uXCI7XG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlV0aWxcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEVOVl9OT0RFID0gXCJub2RlXCI7XG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlV0aWxcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEVOVl9CUk9XU0VSID0gXCJicm93c2VyXCI7XG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlV0aWxcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEVOVl9XRUJfV09SS0VSID0gXCJ3ZWItd29ya2VyXCI7XG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlV0aWxcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEVOVl9ERU5PID0gXCJkZW5vXCI7XG4vKipcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlV0aWxcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEVOVl9VTktOT1dOID0gXCJ1bmtub3duXCI7XG5cbi8qKlxuICogRGV0ZWN0cyBhbmQgcmV0dXJucyB0aGUgY3VycmVudCBydW50aW1lIGVudmlyb25tZW50LlxuICpcbiAqIC0gJ2F3cy1sYW1iZGEnOiBBV1MgTGFtYmRhIGVudmlyb25tZW50XG4gKiAtICdnb29nbGUtZnVuY3Rpb25zJzogR29vZ2xlIENsb3VkIEZ1bmN0aW9ucyBlbnZpcm9ubWVudFxuICogLSAnZWxlY3Ryb24nOiBFbGVjdHJvbiBlbnZpcm9ubWVudFxuICogLSAnbm9kZSc6IE5vZGUuanMgZW52aXJvbm1lbnRcbiAqIC0gJ2Jyb3dzZXInOiBCcm93c2VyIGVudmlyb25tZW50XG4gKiAtICd3ZWItd29ya2VyJzogV2ViIFdvcmtlciBlbnZpcm9ubWVudFxuICogLSAnZGVubyc6IERlbm8gZW52aXJvbm1lbnRcbiAqIC0gJ3JlYWN0LW5hdGl2ZSc6IFJlYWN0IE5hdGl2ZSBlbnZpcm9ubWVudFxuICogLSAndW5rbm93bic6IFVua25vd24gZW52aXJvbm1lbnRcbiAqXG4gKiBAc2luY2UgMy4zNC4wXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5VdGlsXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGV0ZWN0ZWQgcnVudGltZSBlbnZpcm9ubWVudC4gUG9zc2libGUgdmFsdWVzIGFyZTpcbiAqL1xuZnVuY3Rpb24gZGV0ZWN0UnVudGltZUVudmlyb25tZW50KCkge1xuXHQvLyBBV1MgTGFtYmRhIGVudmlyb25tZW50XG5cdGlmIChcblx0XHR0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdHByb2Nlc3MuZW52ICE9IG51bGwgJiZcblx0XHRwcm9jZXNzLmVudi5BV1NfTEFNQkRBX0ZVTkNUSU9OX05BTUVcblx0KSB7XG5cdFx0cmV0dXJuIEVOVl9BV1NfTEFNQkRBO1xuXHR9XG5cblx0Ly8gR29vZ2xlIENsb3VkIEZ1bmN0aW9ucyBlbnZpcm9ubWVudFxuXHRpZiAoXG5cdFx0dHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRwcm9jZXNzLmVudiAhPSBudWxsICYmXG5cdFx0cHJvY2Vzcy5lbnYuRlVOQ1RJT05fTkFNRVxuXHQpIHtcblx0XHRyZXR1cm4gRU5WX0dPT0dMRV9GVU5DVElPTlM7XG5cdH1cblxuXHQvLyBOb2RlLmpzIGVudmlyb25tZW50XG5cdGlmIChcblx0XHR0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdHByb2Nlc3MudmVyc2lvbnMgIT0gbnVsbCAmJlxuXHRcdHByb2Nlc3MudmVyc2lvbnMubm9kZSAhPSBudWxsXG5cdCkge1xuXHRcdC8vIEVsZWN0cm9uIGVudmlyb25tZW50XG5cdFx0aWYgKHByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb24gIT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIEVOVl9FTEVDVFJPTjtcblx0XHR9XG5cdFx0cmV0dXJuIEVOVl9OT0RFO1xuXHR9XG5cblx0Ly8gQnJvd3NlciBlbnZpcm9ubWVudFxuXHRpZiAoXG5cdFx0dHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHR0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0dHlwZW9mIG5hdmlnYXRvci51c2VyQWdlbnQgPT09IFwic3RyaW5nXCJcblx0KSB7XG5cdFx0Ly8gV2ViIFdvcmtlciBlbnZpcm9ubWVudFxuXHRcdGlmICh0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRyZXR1cm4gRU5WX1dFQl9XT1JLRVI7XG5cdFx0fVxuXHRcdHJldHVybiBFTlZfQlJPV1NFUjtcblx0fVxuXG5cdC8vIERlbm8gZW52aXJvbm1lbnRcblx0aWYgKHR5cGVvZiBEZW5vICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0cmV0dXJuIEVOVl9ERU5PO1xuXHR9XG5cblx0Ly8gVW5rbm93biBlbnZpcm9ubWVudFxuXHRyZXR1cm4gRU5WX1VOS05PV047XG59XG5cbmV4cG9ydCB7XG5cdEVOVl9BV1NfTEFNQkRBLFxuXHRFTlZfR09PR0xFX0ZVTkNUSU9OUyxcblx0RU5WX0VMRUNUUk9OLFxuXHRFTlZfTk9ERSxcblx0RU5WX0JST1dTRVIsXG5cdEVOVl9XRUJfV09SS0VSLFxuXHRFTlZfREVOTyxcblx0RU5WX1VOS05PV04sXG5cdGRldGVjdFJ1bnRpbWVFbnZpcm9ubWVudCxcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1N0eWxlc2hlZXR9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL2xpbmsvc3R5bGVzaGVldC5tanNcIjtcbmltcG9ydCB7RGF0YVVybH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5cbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG5cbmA7XG5cblxuZGVzY3JpYmUoJ1N0eWxlc2hlZXQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKHtcbiAgICAgICAgICAgIHJ1blNjcmlwdHM6IFwiZGFuZ2Vyb3VzbHlcIixcbiAgICAgICAgICAgIHJlc291cmNlczogXCJ1c2FibGVcIlxuICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZygpXG4gICAgfSlcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGNsZWFudXBET01Gcm9tVGVzdGluZygpO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnU3R5bGVzaGVldCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnY29ubmVjdCgpLmF2YWlsYWJsZSgpJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3Qgc3R5bGVzaGVldCA9IG5ldyBTdHlsZXNoZWV0KHtcbiAgICAgICAgICAgICAgICBocmVmOiBuZXcgRGF0YVVybCgnJywgJ3RleHQvY3NzJykudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzdHlsZXNoZWV0LmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHN0eWxlc2hlZXQuZ2V0T3B0aW9uKCdpZCcpXG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnRXh0ZXJuYWwgU3R5bGVzaGVldCcsICgpID0+IHtcblxuICAgICAgICBsZXQgaWQgPSBuZXcgSUQoJ1N0eWxlc2hlZXQnKS50b1N0cmluZygpO1xuICAgICAgICBsZXQgc3R5bGVzaGVldCwgdXJsID0gJ2h0dHBzOi8vbW9uc3RlcmpzLm9yZy9hc3NldHMvZW1wdHkuY3NzPycgKyBpZDtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgc3R5bGVzaGVldCA9IG5ldyBTdHlsZXNoZWV0KHtcbiAgICAgICAgICAgICAgICBocmVmOiB1cmwsXG4gICAgICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2FwcGVuZCBhbmQgcmVtb3ZlIFN0eWxlc2hlZXQgJywgKGRvbmUpID0+IHtcblxuICAgICAgICAgICAgZXhwZWN0KHN0eWxlc2hlZXQuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG5cbiAgICAgICAgICAgIHN0eWxlc2hlZXQuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChzdHlsZXNoZWV0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tocmVmPVwiJyArIHVybCArICdcIl0nKSkudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHN0eWxlc2hlZXQuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tocmVmPVwiJyArIHVybCArICdcIl0nKSkubm90LnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgc3R5bGVzaGVldC5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChzdHlsZXNoZWV0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaHJlZj1cIicgKyB1cmwgKyAnXCJdJykpLnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tocmVmPVwiJyArIHVybCArICdcIl0nKSkubm90LnRvLmV4aXN0O1xuICAgICAgICAgICAgICAgICAgICBleHBlY3Qoc3R5bGVzaGVldC5pc0Nvbm5lY3RlZCgpKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxufSk7IiwgIid1c2Ugc3RyaWN0JztcblxuXG5sZXQgYWRkZWROb2RlcywgbXV0YXRpb25vYnNlcnZlcjtcblxuZnVuY3Rpb24gaW5pdCgpIHtcblxuICAgIGFkZGVkTm9kZXMgPSBbXTtcbiAgICBtdXRhdGlvbm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuICAgICAgICBtdXRhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICAgICAgICAgIGlmIChtdXRhdGlvbi50eXBlID09PSAnY2hpbGRMaXN0JyAmJiBtdXRhdGlvbi5yZW1vdmVkTm9kZXMpIHtcblxuICAgICAgICAgICAgICAgIG11dGF0aW9uLmFkZGVkTm9kZXMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRlZE5vZGVzLnB1c2gobik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nKCkge1xuXG4gICAgaWYgKG11dGF0aW9ub2JzZXJ2ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpbml0KClcbiAgICB9XG5cbiAgICBtdXRhdGlvbm9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaGVhZCcpLCB7Y2hpbGRMaXN0OiB0cnVlfSk7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFudXBET01Gcm9tVGVzdGluZygpIHtcbiAgICBtdXRhdGlvbm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblxuICAgIGZvciAoY29uc3QgbiBvZiBhZGRlZE5vZGVzKSB7XG4gICAgICAgIG4ucmVtb3ZlKCk7XG4gICAgfVxufSIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBjaGFpIGZyb20gXCJjaGFpXCJcbmltcG9ydCB7TGlua30gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2UvbGluay5tanNcIjtcbmltcG9ydCB7RGF0YVVybH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5cbmNoYWkudXNlKGNoYWlEb20pO1xuXG5cblxuZGVzY3JpYmUoJ0xpbmsnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nKClcbiAgICB9KVxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgY2xlYW51cERPTUZyb21UZXN0aW5nKCk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdMaW5rKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudGltZW91dCg1MDAwKTtcblxuICAgICAgICBpdCgnY29ubmVjdCgpLmF2YWlsYWJsZSgpJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3QgbGluayA9IG5ldyBMaW5rKHtcbiAgICAgICAgICAgICAgICBocmVmOiBuZXcgRGF0YVVybCgnJywgJ3RleHQvY3NzJykudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICByZWw6ICdzdHlsZXNoZWV0J1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGxpbmsuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0V4dGVybmFsIExpbmsnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMudGltZW91dCg1MDAwKTtcblxuICAgICAgICBsZXQgaWQgPSBuZXcgSUQoJ2xpbmsnKS50b1N0cmluZygpO1xuICAgICAgICBsZXQgbGluaywgdXJsID0gJ2h0dHBzOi8vbW9uc3RlcmpzLm9yZy9hc3NldHMvZW1wdHkuY3NzPycgKyBpZDtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgbGluayA9IG5ldyBMaW5rKHtcbiAgICAgICAgICAgICAgICBocmVmOiB1cmwsXG4gICAgICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgICAgIHJlbDogJ3N0eWxlc2hlZXQnXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYXBwZW5kIGFuZCByZW1vdmUgTGluayAnLCAoZG9uZSkgPT4ge1xuXG4gICAgICAgICAgICBleHBlY3QobGluay5pc0Nvbm5lY3RlZCgpKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgbGluay5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxpbmsuaXNDb25uZWN0ZWQoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2hyZWY9XCInICsgdXJsICsgJ1wiXScpKS50by5leGlzdDtcblxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobGluay5pc0Nvbm5lY3RlZCgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2hyZWY9XCInICsgdXJsICsgJ1wiXScpKS5ub3QudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICBsaW5rLmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGxpbmsuaXNDb25uZWN0ZWQoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tocmVmPVwiJyArIHVybCArICdcIl0nKSkudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2hyZWY9XCInICsgdXJsICsgJ1wiXScpKS5ub3QudG8uZXhpc3Q7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChsaW5rLmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG59KTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1NjcmlwdH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2Uvc2NyaXB0Lm1qc1wiO1xuaW1wb3J0IHtEYXRhVXJsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2RhdGF1cmwubWpzXCI7XG5pbXBvcnQge0lEfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7Y2xlYW51cERPTUZyb21UZXN0aW5nLCBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3Rpbmd9IGZyb20gXCIuLi8uLi8uLi91dGlsL2NsZWFudXBkb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcblxuY2hhaS51c2UoY2hhaURvbSk7XG5cbmxldCBodG1sMSA9IGBcblxuYDtcblxuXG5kZXNjcmliZSgnU2NyaXB0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZygpXG4gICAgfSlcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGNsZWFudXBET01Gcm9tVGVzdGluZygpO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnU2NyaXB0KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzZXRFdmVudFR5cGVzKCknLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCBzY3JpcHQgPSBuZXcgU2NyaXB0KHtcbiAgICAgICAgICAgICAgICBzcmM6IG5ldyBEYXRhVXJsKCcnLCAndGV4dC9qYXZhc2NyaXB0JykudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBhc3luYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogJ2Fub255bW91cycsXG4gICAgICAgICAgICAgICAgZGVmZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGludGVncml0eTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG5vbW9kdWxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBub25jZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHJlZmVycmVycG9saWN5OiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQvamF2YXNjcmlwdCdcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzY3JpcHQuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBzY3JpcHQuZ2V0T3B0aW9uKCdpZCcpXG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnRXh0ZXJuYWwgSlMnLCAoKSA9PiB7XG5cbiAgICAgICAgbGV0IGlkID0gbmV3IElEKCdzY3JpcHQnKS50b1N0cmluZygpO1xuICAgICAgICBsZXQgc2VydmVyLCBzY3JpcHQsIHVybCA9ICdodHRwczovL21vbnN0ZXJqcy5vcmcvYXNzZXRzL2VtcHR5LmpzPycgKyBpZDtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgc2NyaXB0ID0gbmV3IFNjcmlwdCh7XG4gICAgICAgICAgICAgICAgc3JjOiB1cmwsXG4gICAgICAgICAgICAgICAgYXN5bmM6IHRydWUsXG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46ICdhbm9ueW1vdXMnLFxuICAgICAgICAgICAgICAgIGRlZmVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpbnRlZ3JpdHk6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBub21vZHVsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgbm9uY2U6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICByZWZlcnJlcnBvbGljeTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0L2phdmFzY3JpcHQnLFxuICAgICAgICAgICAgICAgIGlkOiBpZFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2FwcGVuZCBhbmQgcmVtb3ZlIHNjcmlwdCAnLCAoZG9uZSkgPT4ge1xuXG4gICAgICAgICAgICBleHBlY3Qoc2NyaXB0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICBzY3JpcHQuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChzY3JpcHQuaXNDb25uZWN0ZWQoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3NyYz1cIicgKyB1cmwgKyAnXCJdJykpLnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzY3JpcHQuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tzcmM9XCInICsgdXJsICsgJ1wiXScpKS5ub3QudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICBzY3JpcHQuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3Qoc2NyaXB0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbc3JjPVwiJyArIHVybCArICdcIl0nKSkudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3NyYz1cIicgKyB1cmwgKyAnXCJdJykpLm5vdC50by5leGlzdDtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHNjcmlwdC5pc0Nvbm5lY3RlZCgpKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxufSk7IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGNoYWkgZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtEYXRhfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS9kYXRhLm1qc1wiO1xuaW1wb3J0IHtEYXRhVXJsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2RhdGF1cmwubWpzXCI7XG5pbXBvcnQge0lEfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7Y2xlYW51cERPTUZyb21UZXN0aW5nLCBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3Rpbmd9IGZyb20gXCIuLi8uLi8uLi91dGlsL2NsZWFudXBkb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcblxuY2hhaS51c2UoY2hhaURvbSk7XG5cbmxldCBodG1sMSA9IGBcblxuYDtcblxuXG5kZXNjcmliZSgnRGF0YScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBmZXRjaFJlZmVyZW5jZSwgcmV0dXJuU3RhdHVzLCBtdXRhdGlvbm9ic2VydmVyLCBhZGRlZE5vZGVzID0gW107XG5cblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZygpXG5cbiAgICAgICAgcmV0dXJuU3RhdHVzID0gMjAwO1xuICAgICAgICBmZXRjaFJlZmVyZW5jZSA9IGdsb2JhbFRoaXNbJ2ZldGNoJ107XG4gICAgICAgIGdsb2JhbFRoaXNbJ2ZldGNoJ10gPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XG5cbiAgICAgICAgICAgIGlmICghdXJsKSB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgdXJsJylcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiBcInRlc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiByZXR1cm5TdGF0dXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfTtcblxuXG4gICAgfSlcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGdsb2JhbFRoaXNbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICAgICAgY2xlYW51cERPTUZyb21UZXN0aW5nKCk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdEYXRhKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzZXRFdmVudFR5cGVzKCknLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gbmV3IERhdGEoe1xuICAgICAgICAgICAgICAgIHNyYzogbmV3IERhdGFVcmwoJycsICd0ZXh0L2phdmFzY3JpcHQnKS50b1N0cmluZygpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGF0YS5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnRXh0ZXJuYWwgRGF0YScsICgpID0+IHtcblxuICAgICAgICBsZXQgaWQgPSBuZXcgSUQoJ2RhdGEnKS50b1N0cmluZygpO1xuICAgICAgICBsZXQgc2VydmVyLCBkYXRhLCB1cmwgPSAnaHR0cHM6Ly9tb25zdGVyanMub3JnL2Fzc2V0cy9lbXB0eS5qcz8nICsgaWQ7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgIGRhdGEgPSBuZXcgRGF0YSh7XG4gICAgICAgICAgICAgICAgc3JjOiB1cmwsXG4gICAgICAgICAgICAgICAgaWQ6IGlkXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnZGF0YSBpcyBub3QgY29ubmVjdGVkJywgKCkgPT4ge1xuICAgICAgICAgICAgZXhwZWN0KGRhdGEuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2Nvbm5lY3QgYW5kIGNoZWNrIGF2YWlsYWJpbGl0eScsIChkb25lKSA9PiB7XG5cbiAgICAgICAgICAgIGRhdGEuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkYXRhLmlzQ29ubmVjdGVkKCksICdpc0Nvbm5lY3RlZCAxJykudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3R5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCJdJyksICdleGlzdHMgMScpLnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5wYXJlbnRFbGVtZW50O1xuXG5cbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZGF0YS5pc0Nvbm5lY3RlZCgpLCAnaXNDb25uZWN0ZWQgMicpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIl0nKSwgJ2V4aXN0cyAyJykubm90LnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgZGF0YS5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkYXRhLmlzQ29ubmVjdGVkKCksICdpc0Nvbm5lY3RlZCAzJykudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0eXBlPVwiYXBwbGljYXRpb24vanNvblwiXScpLCAnZXhpc3RzIDMnKS50by5leGlzdDtcblxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIl0nKSwgJ2V4aXN0cyA0Jykubm90LnRvLmV4aXN0O1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZGF0YS5pc0Nvbm5lY3RlZCgpLCAnaXNDb25uZWN0ZWQgNCcpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcycsICgpID0+IHtcbiAgICBsZXQgZWxlbWVudDtcbiAgICBsZXQgb3B0aW9ucztcbiAgICBsZXQgaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcztcblxuICAgIGJlZm9yZSggZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2RvbS91dGlsL2luaXQtb3B0aW9ucy1mcm9tLWF0dHJpYnV0ZXMubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzID0gbVsnaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyddO1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgb3B0aW9ucyA9IHt1cmw6IFwiXCIsIGtleToge3N1YmtleTogXCJcIiwgY2FzZVNlbnNpdGl2ZTogdHJ1ZX19O1xuICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgb3B0aW9ucyB3aXRoIG1hdGNoaW5nIGF0dHJpYnV0ZXMnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLXVybCcsICdodHRwczovL2V4YW1wbGUuY29tJyk7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLWtleS1zdWJrZXknLCAndGVzdCcpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCdodHRwczovL2V4YW1wbGUuY29tJyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQua2V5LnN1YmtleSkudG8uZXF1YWwoJ3Rlc3QnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IG1vZGlmeSBvcHRpb25zIHdpdGhvdXQgbWF0Y2hpbmcgYXR0cmlidXRlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJycpO1xuICAgICAgICBleHBlY3QocmVzdWx0LmtleS5zdWJrZXkpLnRvLmVxdWFsKCcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaWdub3JlIGF0dHJpYnV0ZXMgd2l0aG91dCB0aGUgY29ycmVjdCBwcmVmaXgnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXNvbWUtb3B0aW9uLXVybCcsICdodHRwczovL2V4YW1wbGUuY29tJyk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpZ25vcmUgYXR0cmlidXRlcyB3aXRoIGludmFsaWQgb3B0aW9uIHBhdGhzJywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi1ub25leGlzdGVudCcsICd2YWx1ZScpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChvcHRpb25zKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYXBwbHkgbWFwcGluZyBmb3IgYSBzaW5nbGUgYXR0cmlidXRlJywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi11cmwnLCAnZXhhbXBsZScpO1xuICAgICAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgICAgICAgJ3VybCc6ICh2YWx1ZSkgPT4gJ2h0dHBzOi8vJyArIHZhbHVlICsgJy5jb20nXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJ2h0dHBzOi8vZXhhbXBsZS5jb20nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYXBwbHkgbWFwcGluZyBmb3IgYSBuZXN0ZWQgYXR0cmlidXRlJywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi1rZXktc3Via2V5JywgJzEyMycpO1xuICAgICAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgICAgICAgJ2tleS5zdWJrZXknOiAodmFsdWUpID0+IHBhcnNlSW50KHZhbHVlLCAxMCkgKiAyXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LmtleS5zdWJrZXkpLnRvLmVxdWFsKFwiMjQ2XCIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhcHBseSBtdWx0aXBsZSBtYXBwaW5ncycsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24tdXJsJywgJ2V4YW1wbGUnKTtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24ta2V5LXN1YmtleScsICcxMjMnKTtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgICd1cmwnOiAodmFsdWUpID0+ICdodHRwczovLycgKyB2YWx1ZSArICcuY29tJyxcbiAgICAgICAgICAgICdrZXkuc3Via2V5JzogKHZhbHVlKSA9PiBwYXJzZUludCh2YWx1ZSwgMTApICogMlxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucywgbWFwcGluZyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCdodHRwczovL2V4YW1wbGUuY29tJyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQua2V5LnN1YmtleSkudG8uZXF1YWwoXCIyNDZcIik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGlnbm9yZSBtYXBwaW5ncyBmb3Igbm9uLWV4aXN0aW5nIGF0dHJpYnV0ZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICAndXJsJzogKHZhbHVlKSA9PiAnaHR0cHM6Ly8nICsgdmFsdWUgKyAnLmNvbSdcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGlnbm9yZSBtYXBwaW5ncyBmb3IgaW52YWxpZCBvcHRpb24gcGF0aHMnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLW5vbmV4aXN0ZW50JywgJ3ZhbHVlJyk7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICAnbm9uZXhpc3RlbnQnOiAodmFsdWUpID0+IHZhbHVlICsgJ2JhcidcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwob3B0aW9ucyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFwcGx5IG1hcHBpbmcgb25seSB0byBzcGVjaWZpZWQgYXR0cmlidXRlcycsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24tdXJsJywgJ2V4YW1wbGUnKTtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24ta2V5LXN1YmtleScsICcxMjMnKTtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgICd1cmwnOiAodmFsdWUpID0+ICdodHRwczovLycgKyB2YWx1ZSArICcuY29tJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucywgbWFwcGluZyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCdodHRwczovL2V4YW1wbGUuY29tJyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQua2V5LnN1YmtleSkudG8uZXF1YWwoJzEyMycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgYXBwbHkgbWFwcGluZyBpZiBub3QgYSBmdW5jdGlvbicsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24tdXJsJywgJ2V4YW1wbGUnKTtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgICd1cmwnOiAnaHR0cHM6Ly9leGFtcGxlLmNvbSdcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnZXhhbXBsZScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhcHBseSBtYXBwaW5nIHdpdGggY3VzdG9tIHByZWZpeCcsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtY3VzdG9tLW9wdGlvbi11cmwnLCAnZXhhbXBsZScpO1xuICAgICAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgICAgICAgJ3VybCc6ICh2YWx1ZSkgPT4gJ2h0dHBzOi8vJyArIHZhbHVlICsgJy5jb20nXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nLCAnZGF0YS1jdXN0b20tb3B0aW9uLScpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgYXBwbHkgbWFwcGluZyB3aXRoIGluY29ycmVjdCBjdXN0b20gcHJlZml4JywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1jdXN0b20tb3B0aW9uLXVybCcsICdleGFtcGxlJyk7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICAndXJsJzogKHZhbHVlKSA9PiAnaHR0cHM6Ly8nICsgdmFsdWUgKyAnLmNvbSdcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFwcGx5IGNhc2Ugc2Vuc2l0aXZlIG1hcHBpbmcnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLWtleS1jYXNlU2Vuc2l0aXZlJywgJ2ZhbHNlJyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5rZXkuY2FzZVNlbnNpdGl2ZSkudG8uZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG59KTtcbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSAnY2hhaSc7XG5pbXBvcnQge2V4dHJhY3RLZXlzfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RvbS91dGlsL2V4dHJhY3Qta2V5cy5tanNcIjtcblxuXG5kZXNjcmliZSgnZXh0cmFjdEtleXMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBleHRyYWN0IGtleXMgZnJvbSB0aGUgZ2l2ZW4gb2JqZWN0JywgKCkgPT4ge1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBmaXJzdE5hbWU6ICdKb2huJyxcbiAgICAgICAgICAgIGxhc3ROYW1lOiAnRG9lJyxcbiAgICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgICAgICBzdHJlZXQ6ICcxMjMgTWFpbiBTdCcsXG4gICAgICAgICAgICAgICAgY2l0eTogJ05ldyBZb3JrJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBuZXcgTWFwKFtcbiAgICAgICAgICAgIFsnZmlyc3RuYW1lJywgJ2ZpcnN0TmFtZSddLFxuICAgICAgICAgICAgWydsYXN0bmFtZScsICdsYXN0TmFtZSddLFxuICAgICAgICAgICAgWydhZGRyZXNzLXN0cmVldCcsICdhZGRyZXNzLnN0cmVldCddLFxuICAgICAgICAgICAgWydhZGRyZXNzLWNpdHknLCAnYWRkcmVzcy5jaXR5J10sXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dHJhY3RLZXlzKG9iaik7XG5cbiAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20ocmVzdWx0KSkpLnRvLmVxdWFsKEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20oZXhwZWN0ZWQpKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHVzZSBjdXN0b20ga2V5IGFuZCB2YWx1ZSBzZXBhcmF0b3JzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBmaXJzdE5hbWU6ICdKb2huJyxcbiAgICAgICAgICAgIGxhc3ROYW1lOiAnRG9lJyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBleHBlY3RlZCA9IG5ldyBNYXAoW1xuICAgICAgICAgICAgWydwcmVmaXgrZmlyc3RuYW1lJywgJ3ByZWZpeCtmaXJzdE5hbWUnXSxcbiAgICAgICAgICAgIFsncHJlZml4K2xhc3RuYW1lJywgJ3ByZWZpeCtsYXN0TmFtZSddLFxuICAgICAgICBdKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBleHRyYWN0S2V5cyhvYmosICdwcmVmaXgnLCAnKycsICcrJyk7XG5cbiAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20ocmVzdWx0KSkpLnRvLmVxdWFsKEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20oZXhwZWN0ZWQpKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnY2hlY2sgaWYgdmFsdWUgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgZmlyc3ROYW1lOiAnSm9obicsXG4gICAgICAgICAgICBsYXN0TmFtZTogJ0RvZScsXG4gICAgICAgICAgICBhZGRyZXNzOiBudWxsLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gbmV3IE1hcChbXG4gICAgICAgICAgICBbJ2ZpcnN0bmFtZScsICdmaXJzdE5hbWUnXSxcbiAgICAgICAgICAgIFsnbGFzdG5hbWUnLCAnbGFzdE5hbWUnXSxcbiAgICAgICAgICAgIFsnYWRkcmVzcycsICdhZGRyZXNzJ10sXG4gICAgICAgICAgICBcbiAgICAgICAgXSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0cmFjdEtleXMob2JqKTtcblxuICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbShyZXN1bHQpKSkudG8uZXF1YWwoSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbShleHBlY3RlZCkpKTtcbiAgICB9KTtcblxuICAgIC8vIEFkZCBtb3JlIHRlc3QgY2FzZXMgYXMgbmVlZGVkXG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbCwgZ2V0R2xvYmFsRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBGYWN0b3J5IH07XG5cbi8qKlxuICogQSBmYWN0b3J5IGZvciBjcmVhdGluZyB3b3JrZXIgaW5zdGFuY2VzLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRPTS5Xb3JrZXJcbiAqIEBzdW1tYXJ5IEEgc21hbGwgZmFjdG9yeSB0byBjcmVhdGUgd29ya2VyXG4gKi9cbmNsYXNzIEZhY3RvcnkgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0d29ya2VyOiBuZXcgV2Vha01hcCgpLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIHdvcmtlciBmcm9tIGEgVVJMXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IG1lc3NhZ2VIYW5kbGVyXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGVycm9ySGFuZGxlclxuXHQgKiBAcmV0dXJuIHtXb3JrZXJ9XG5cdCAqL1xuXHRjcmVhdGVGcm9tVVJMID0gZnVuY3Rpb24gKHVybCwgbWVzc2FnZUhhbmRsZXIsIGVycm9ySGFuZGxlcikge1xuXHRcdGlmICh1cmwgaW5zdGFuY2VvZiBVUkwpIHtcblx0XHRcdHVybCA9IHVybC50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHdvcmtlckNsYXNzID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJXb3JrZXJcIik7XG5cdFx0dmFyIHdvcmtlciA9IG5ldyB3b3JrZXJDbGFzcyh2YWxpZGF0ZVN0cmluZyh1cmwpKTtcblxuXHRcdGlmIChpc0Z1bmN0aW9uKG1lc3NhZ2VIYW5kbGVyKSkge1xuXHRcdFx0d29ya2VyLm9ubWVzc2FnZSA9IChldmVudCkgPT4ge1xuXHRcdFx0XHRtZXNzYWdlSGFuZGxlci5jYWxsKHdvcmtlciwgZXZlbnQpO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAoaXNGdW5jdGlvbihlcnJvckhhbmRsZXIpKSB7XG5cdFx0XHR3b3JrZXIub25lcnJvciA9IChldmVudCkgPT4ge1xuXHRcdFx0XHRlcnJvckhhbmRsZXIuY2FsbCh3b3JrZXIsIGV2ZW50KTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHdvcmtlcjtcblx0fTtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIHdvcmtlciBmcm9tIGEgc2NyaXB0XG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50XG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IG1lc3NhZ2VIYW5kbGVyXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGVycm9ySGFuZGxlclxuXHQgKiBAcmV0dXJuIHtXb3JrZXJ9XG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZGUvZG9jcy9XZWIvQVBJL1VSTC9jcmVhdGVPYmplY3RVUkxcblx0ICovXG5cdGNyZWF0ZUZyb21TY3JpcHQgPSBmdW5jdGlvbiAoY29udGVudCwgbWVzc2FnZUhhbmRsZXIsIGVycm9ySGFuZGxlcikge1xuXHRcdGNvbnN0IGJsb2JGdW5jdGlvbiA9IG5ldyBnZXRHbG9iYWxGdW5jdGlvbihcIkJsb2JcIik7XG5cdFx0Y29uc3QgYmxvYiA9IG5ldyBibG9iRnVuY3Rpb24oW3ZhbGlkYXRlU3RyaW5nKGNvbnRlbnQpXSwge1xuXHRcdFx0dHlwZTogXCJzY3JpcHQvamF2YXNjcmlwdFwiLFxuXHRcdH0pO1xuXG5cdFx0Y29uc3QgdXJsID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJVUkxcIikuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXHRcdGNvbnN0IHdvcmtlciA9IHRoaXMuY3JlYXRlRnJvbVVSTCh1cmwsIG1lc3NhZ2VIYW5kbGVyLCBlcnJvckhhbmRsZXIpO1xuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJ3b3JrZXJcIl0uc2V0KHdvcmtlciwgdXJsKTtcblxuXHRcdHJldHVybiB3b3JrZXI7XG5cdH07XG5cblx0LyoqXG5cdCAqIFRlcm1pbmF0ZSB0aGUgd29ya2VyIGFuZCBjYWxsIHJldm9rZU9iamVjdFVSTCBpZiBuZWNlc3NhcnkuXG5cdCAqXG5cdCAqIEBwYXJhbSB3b3JrZXJcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uV29ya2VyLkZhY3Rvcnl9XG5cdCAqL1xuXHR0ZXJtaW5hdGUod29ya2VyKSB7XG5cdFx0Y29uc3Qgd29ya2VyQ2xhc3MgPSBnZXRHbG9iYWxGdW5jdGlvbihcIldvcmtlclwiKTtcblx0XHR2YWxpZGF0ZUluc3RhbmNlKHdvcmtlciwgd29ya2VyQ2xhc3MpO1xuXG5cdFx0d29ya2VyLnRlcm1pbmF0ZSgpO1xuXG5cdFx0aWYgKHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wid29ya2VyXCJdLmhhcyh3b3JrZXIpKSB7XG5cdFx0XHRjb25zdCB1cmwgPSB0aGlzW2ludGVybmFsU3ltYm9sXVtcIndvcmtlclwiXS5nZXQod29ya2VyKTtcblx0XHRcdFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmltcG9ydCB7RmFjdG9yeX0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9kb20vd29ya2VyL2ZhY3RvcnkubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTSwgaXNOb2RlfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmRlc2NyaWJlKCdXb3JrZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBpZiAoaXNOb2RlKCkpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxbJ1VSTCddLCAnY3JlYXRlT2JqZWN0VVJMJywge1xuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIi9leGFtcGxlLm1qc1wiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZ2xvYmFsWydXb3JrZXInXSA9IGNsYXNzIHtcbiAgICAgICAgICAgICAgICB0ZXJtaW5hdGUoKSB7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG9uZXJyb3IoKSB7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG9ubWVzc2FnZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgYSA9IHR5cGVvZiBnbG9iYWxbJ1dvcmtlciddO1xuICAgICAgICAgICAgbGV0IGExID0gdHlwZW9mIFdvcmtlcjtcblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QganNkb20gPSBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnRmFjdG9yeScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnY3JlYXRlIHdvcmtlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgZmFjdG9yeSA9IG5ldyBGYWN0b3J5KCk7XG4gICAgICAgICAgICBjb25zdCB3b3JrZXIgPSBmYWN0b3J5LmNyZWF0ZUZyb21TY3JpcHQoJ2NvbnNvbGUubG9nKFwiaGVsbG8gd29ybGRcIik7JylcbiAgICAgICAgICAgIGV4cGVjdCh3b3JrZXIpLmlzLmluc3RhbmNlb2YoV29ya2VyKTtcblxuICAgICAgICAgICAgZXhwZWN0KGZhY3RvcnkudGVybWluYXRlKHdvcmtlcikpLmlzLmluc3RhbmNlb2YoRmFjdG9yeSlcblxuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGNoYWkgZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtVcGRhdGVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS91cGRhdGVyLm1qc1wiO1xuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7T2JzZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQge1Byb3h5T2JzZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvcHJveHlvYnNlcnZlci5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcblxuY2hhaS51c2UoY2hhaURvbSk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8dGVtcGxhdGUgaWQ9XCJjdXJyZW50XCI+XG4gICAgICAgIDxsaSBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y3VycmVudCB8IHRvanNvblwiPjwvbGk+XG4gICAgPC90ZW1wbGF0ZT5cbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICAgICAgPHVsIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJjdXJyZW50IHBhdGg6YS5iXCI+XG4gICAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgICAgIDx1bCBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwiY3VycmVudCBwYXRoOmEuYiB8IGRvaXRcIj5cbiAgICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGlkPVwidGVzdDNcIj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6YS5iXCI+XG4gICAgICAgICAgICA8aW5wdXQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmEuY1wiIGlkPVwiaW5wdXQxXCI+XG4gICAgICAgICAgICA8aW5wdXQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjaGVja2VkIHBhdGg6YS5jaGVja2JveFwiIHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJjaGVja2JveFwiIGlkPVwiY2hlY2tib3hcIj5cbiAgICAgICAgICAgIDxpbnB1dCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInZhbHVlIHBhdGg6YS50ZXh0XCIgdHlwZT1cInRleHRcIiBuYW1lPVwidGV4dFwiIGlkPVwidGV4dFwiPlxuICAgICAgICAgICAgPGlucHV0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2hlY2tlZCBwYXRoOmEucmFkaW9cIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwicmFkaW9cIiB2YWx1ZT1cInIxXCIgaWQ9XCJyYWRpb1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJyYWRpb1wiIHZhbHVlPVwicjJcIiBpZD1cInIyXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInJhZGlvXCIgdmFsdWU9XCJyeFwiIGlkPVwicnhcIj5cblxuICAgICAgICAgICAgPHNlbGVjdCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInZhbHVlIHBhdGg6YS5zZWxlY3RcIiBuYW1lPVwic2VsZWN0XCIgaWQ9XCJzZWxlY3RcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwib3RoZXItdmFsdWVcIj52YWx1ZTE8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlMjwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG5cbiAgICAgICAgICAgIDxzZWxlY3QgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmEubXVsdGlzZWxlY3RcIiBuYW1lPVwibXVsdGlzZWxlY3RcIiBtdWx0aXBsZSBpZD1cIm11bHRpc2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTE8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlMjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWUzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTQ8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwib3RoZXItdmFsdWU1XCI+dmFsdWU1PC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cblxuICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9XCJ0ZXh0YXJlYVwiIGlkPVwidGV4dGFyZWFcIiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInZhbHVlIHBhdGg6YS50ZXh0YXJlYVwiPjwvdGV4dGFyZWE+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6dGV4dCB8IHRvbG93ZXJcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6dGV4dCB8IGNhbGw6bXlmb3JtYXR0ZXJcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInN0YXRpYzpoZWxsb1xcXFwgXCI+PC9kaXY+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgaHRtbDMgPSBgXG5cbiAgICA8dGVtcGxhdGUgaWQ9XCJteWlubmVyaWRcIj5cbiAgICAgICAgPHNwYW4gZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm15aW5uZXJpZCB8IHRvanNvblwiPjwvc3Bhbj5cbiAgICA8L3RlbXBsYXRlPlxuXG4gICAgPHRlbXBsYXRlIGlkPVwibXlpZFwiPlxuICAgICAgICA8cCBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwibXlpbm5lcmlkIHBhdGg6YS5iXCI+PC9wPlxuICAgIDwvdGVtcGxhdGU+XG5cbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwibXlpZCBwYXRoOmEuYlwiPjwvZGl2PlxuICAgIDwvZGl2PlxuXG5gO1xuXG5sZXQgaHRtbDQgPSBgXG4gICAgPGRpdj5cbiAgICAgICAgPGZvcm0gaWQ9XCJmb3JtMVwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwiY2hlY2tlZFwiIG5hbWU9XCJjaGVja2JveFwiIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDpzdGF0ZVwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInRleHRcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwicmFkaW9cIiB2YWx1ZT1cInIxXCIgaWQ9XCJyMVwiIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDpyYWRpb1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJyYWRpb1wiIHZhbHVlPVwicjJcIiBpZD1cInIyXCIgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnJhZGlvXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInJhZGlvXCIgdmFsdWU9XCJyeFwiIGlkPVwicnhcIiBkYXRhLWNvbW1lbnQ9XCJub3QgY2FsbGVkIGJlY2F1c2Ugbm8gYmluZCBhdHRyaWJ1dGVcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgbmFtZT1cImJ1dHRvblwiPlxuXG4gICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJzZWxlY3QxXCIgaWQ9XCJzZWxlY3QxXCIgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnNlbGVjdFwiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWUxPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTI8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuXG4gICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJzZWxlY3QyXCIgbXVsdGlwbGUgaWQ9XCJzZWxlY3QyXCIgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOm11bHRpc2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTE8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlMjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWUzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTQ8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlNTwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG5cbiAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPVwidGV4dGFyZWFcIiBpZD1cInRleHRhcmVhXCIgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnRleHRhcmVhXCI+XG4gICAgICAgICAgICBcbiAgICAgICAgPC90ZXh0YXJlYT5cblxuICAgICAgICA8L2Zvcm0+XG4gICAgPC9kaXY+XG5cbmA7XG5cblxuZGVzY3JpYmUoJ0RPTScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgfSlcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnVXBkYXRlcigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkZXNjcmliZSgndGVzdCBHZXR0ZXIgJiYgU2V0dGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3NldEV2ZW50VHlwZXMoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBVcGRhdGVyKGVsZW1lbnQpLnNldEV2ZW50VHlwZXMoWyd0b3VjaCddKSkudG8uYmUuaW5zdGFuY2VvZihVcGRhdGVyKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBpdCgnZ2V0U3ViamVjdCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcbiAgICAgICAgICAgICAgICBsZXQgc3ViamVjdCA9IHthOiAxfTtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IFVwZGF0ZXIoZWxlbWVudCwgc3ViamVjdCkuZ2V0U3ViamVjdCgpLmEpLnRvLmJlLmVxdWFsKDEpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ3Rlc3QgY29udHJvbCBtZXRob2RzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ2VuYWJsZUV2ZW50UHJvY2Vzc2luZygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IFVwZGF0ZXIoZWxlbWVudCkuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCkpLnRvLmJlLmluc3RhbmNlb2YoVXBkYXRlcik7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdCgnZGlzYWJsZUV2ZW50UHJvY2Vzc2luZygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IFVwZGF0ZXIoZWxlbWVudCkuZGlzYWJsZUV2ZW50UHJvY2Vzc2luZygpKS50by5iZS5pbnN0YW5jZW9mKFVwZGF0ZXIpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ3Rlc3QgRXJyb3JzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIHRocm93IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudCBFcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IFVwZGF0ZXIoKSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB2YWx1ZSBpcyB3cm9uZycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcbiAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IFVwZGF0ZXIoZWxlbWVudCwgbnVsbCkpLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgdGhyb3cgRXJyb3I6IHRoZSB2YWx1ZSBpcyBub3QgaXRlcmFibGUnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcblxuICAgICAgICAgICAgICAgIGxldCB1ID0gbmV3IFVwZGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGxldCBwcm9taXNlID0gdS5ydW4oKTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJzaG91bGQgbmV2ZXIgY2FsbGVkIVwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGUpLmlzLmluc3RhbmNlT2YoRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGUgKyBcIlwiKS50by5iZS5lcXVhbCgnRXJyb3I6IHRoZSB2YWx1ZSBpcyBub3QgaXRlcmFibGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xuXG4gICAgICAgICAgICB9KTtcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1VwZGF0ZXIoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVzY3JpYmUoJ25ldyBVcGRhdGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBkb2N1bWVudCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKVxuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBuZXcgVXBkYXRlcihcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAge31cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgnb2JqZWN0Jyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnVXBkYXRlcigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkZXNjcmliZSgnUmVwZWF0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGJ1aWxkIDYgbGkgZWxlbWVudHMnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcblxuICAgICAgICAgICAgICAgIGxldCBkID0gbmV3IFVwZGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpOiAnMCd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aTogJzEnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2k6ICcyJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpOiAnMyd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aTogJzQnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2k6ICc1J30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGQucnVuKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgnb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxsaSBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6YS5iLicgKyBpICsgJyB8IHRvanNvblwiIGRhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwiY3VycmVudC0nICsgaSArICdcIj57XCJpXCI6XCInICsgaSArICdcIn08L2xpPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaChcbiAgICAgICAgICAgICAgICAgICAgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihlKSlcbiAgICAgICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdVcGRhdGVyKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWw0O1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdFdmVudGhhbmRsaW5nJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgdXBkYXRlciwgZm9ybTEsIHByb3h5b2JzZXJ2ZXI7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBwcm94eW9ic2VydmVyID0gbmV3IFByb3h5T2JzZXJ2ZXIoe30pXG4gICAgICAgICAgICAgICAgdXBkYXRlciA9IG5ldyBVcGRhdGVyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JtMScpLCBwcm94eW9ic2VydmVyKTtcbiAgICAgICAgICAgICAgICBmb3JtMSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JtMScpO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAvLyBoZXJlIGNsaWNrIGV2ZW50cyBhcmUgdGhyb3duIG9uIHRoZSBjaGVja2JveCBhbmQgdGhlIHNldHRpbmcgb2YgdGhlIHZhbHVlIGlzIG9ic2VydmVkIHZpYSB0aGUgcHJveHlvYnNlcnZlci5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgaGFuZGxlIGNoZWNrYm94IGNsaWNrIGV2ZW50cycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVyLmVuYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHN1YmplY3QgPSB1cGRhdGVyLmdldFN1YmplY3QoKTtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc3ViamVjdCkuaXMuZXF1YWwocHJveHlvYnNlcnZlci5nZXRTdWJqZWN0KCkpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGV4cGVjdGVkID0gWydjaGVja2VkJywgdW5kZWZpbmVkLCAnY2hlY2tlZCddO1xuICAgICAgICAgICAgICAgIC8vIGhlcmUgdGhlIG5vdGF0aW9uIHdpdGggZnVuY3Rpb24gaXMgaW1wb3J0YW50LCBiZWNhdXNlIHRoZSBwb2ludGVyIGlzIHNldC5cbiAgICAgICAgICAgICAgICBwcm94eW9ic2VydmVyLmF0dGFjaE9ic2VydmVyKG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSBleHBlY3RlZC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZSA9PT0gdW5kZWZpbmVkICYmIGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkgZG9uZShuZXcgRXJyb3IoJ3RvIG1hbnkgY2FsbHMnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0U3ViamVjdCgpWydzdGF0ZSddICE9PSBlKSBkb25lKG5ldyBFcnJvcih0aGlzLmdldFN1YmplY3QoKVsnc3RhdGUnXSArICcgc2hvdWxkICcgKyBlKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybTEucXVlcnlTZWxlY3RvcignW25hbWU9Y2hlY2tib3hdJykuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwKVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybTEucXVlcnlTZWxlY3RvcignW25hbWU9Y2hlY2tib3hdJykuY2xpY2soKTtcbiAgICAgICAgICAgICAgICB9LCAxMClcblxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGhhbmRsZSByYWRpbyBjbGljayBldmVudHMgMScsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVyLmVuYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHN1YmplY3QgPSB1cGRhdGVyLmdldFN1YmplY3QoKTtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc3ViamVjdCkuaXMuZXF1YWwocHJveHlvYnNlcnZlci5nZXRTdWJqZWN0KCkpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGV4cGVjdGVkID0gWydyMScsICdyMicsICdyMSddO1xuICAgICAgICAgICAgICAgIGxldCBjbGlja1RhcmdldHMgPSBbJ3IyJywgJ3IxJ11cbiAgICAgICAgICAgICAgICAvLyBoZXJlIHRoZSBub3RhdGlvbiB3aXRoIGZ1bmN0aW9uIGlzIGltcG9ydGFudCwgYmVjYXVzZSB0aGUgdGhpcyBwb2ludGVyIGlzIHNldC5cbiAgICAgICAgICAgICAgICBwcm94eW9ic2VydmVyLmF0dGFjaE9ic2VydmVyKG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSBleHBlY3RlZC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZSA9PT0gdW5kZWZpbmVkICYmIGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkgZG9uZShuZXcgRXJyb3IoJ3RvIG1hbnkgY2FsbHMnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSB0aGlzLmdldFN1YmplY3QoKVsncmFkaW8nXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgIT09IGUpIGRvbmUobmV3IEVycm9yKHYgKyAnIHNob3VsZCAnICsgZSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwZWN0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjbGlja1RhcmdldHMuc2hpZnQoKSkuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwKVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3IxJykuY2xpY2soKTtcbiAgICAgICAgICAgICAgICB9LCAxMClcblxuICAgICAgICAgICAgICAgIC8vIG5vIGhhbmRsZXIgLy8gYmluZFxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncngnKS5jbGljaygpO1xuICAgICAgICAgICAgICAgIH0sIDIwKVxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGhhbmRsZSBzZWxlY3QgY2xpY2sgZXZlbnRzIDInLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0MScpO1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblxuICAgICAgICAgICAgICAgIGxldCBzdWJqZWN0ID0gdXBkYXRlci5nZXRTdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHN1YmplY3QpLmlzLmVxdWFsKHByb3h5b2JzZXJ2ZXIuZ2V0U3ViamVjdCgpKTtcblxuICAgICAgICAgICAgICAgIGxldCBleHBlY3RlZCA9IFsndmFsdWUyJywgJ3ZhbHVlMScsICd2YWx1ZTInXTtcbiAgICAgICAgICAgICAgICAvLyBoZXJlIHRoZSBub3RhdGlvbiB3aXRoIGZ1bmN0aW9uIGlzIGltcG9ydGFudCwgYmVjYXVzZSB0aGUgdGhpcyBwb2ludGVyIGlzIHNldC5cbiAgICAgICAgICAgICAgICBwcm94eW9ic2VydmVyLmF0dGFjaE9ic2VydmVyKG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSBleHBlY3RlZC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZSA9PT0gdW5kZWZpbmVkICYmIGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkgZG9uZShuZXcgRXJyb3IoJ3RvIG1hbnkgY2FsbHMnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSB0aGlzLmdldFN1YmplY3QoKVsnc2VsZWN0J107XG4gICAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSBlKSBkb25lKG5ldyBFcnJvcih2ICsgJyBzaG91bGQgJyArIGUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4ID0gc2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4ID09PSAxID8gMCA6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5jbGljaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTApXG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBzZXQgdmFsdWUgYW5kIHNpbXVsYXRlIGNsaWNrIGV2ZW50IGZvciBidWJibGVcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4ID0gMTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5jbGljaygpO1xuXG4gICAgICAgICAgICAgICAgfSwgMjApXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGhhbmRsZSB0ZXh0YXJlYSBldmVudHMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IHRleHRhcmVhRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXh0YXJlYScpO1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblxuICAgICAgICAgICAgICAgIGxldCBzdWJqZWN0ID0gdXBkYXRlci5nZXRTdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHN1YmplY3QpLmlzLmVxdWFsKHByb3h5b2JzZXJ2ZXIuZ2V0U3ViamVjdCgpKTtcblxuICAgICAgICAgICAgICAgIGxldCBleHBlY3RlZCA9IFsndGVzdFgnLCAnbG9yZW0gaXBzdW0nLCAnJ107XG4gICAgICAgICAgICAgICAgbGV0IHRlc3RWYWx1ZXMgPSBbXCJsb3JlbSBpcHN1bVwiLCBcIlwiXTtcbiAgICAgICAgICAgICAgICAvLyBoZXJlIHRoZSBub3RhdGlvbiB3aXRoIGZ1bmN0aW9uIGlzIGltcG9ydGFudCwgYmVjYXVzZSB0aGUgdGhpcyBwb2ludGVyIGlzIHNldC5cbiAgICAgICAgICAgICAgICBwcm94eW9ic2VydmVyLmF0dGFjaE9ic2VydmVyKG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSBleHBlY3RlZC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZSA9PT0gdW5kZWZpbmVkICYmIGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkgZG9uZShuZXcgRXJyb3IoJ3RvIG1hbnkgY2FsbHMnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSB0aGlzLmdldFN1YmplY3QoKVsndGV4dGFyZWEnXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHYpICE9PSBKU09OLnN0cmluZ2lmeShlKSkgZG9uZShuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkodikgKyAnIHNob3VsZCAnICsgSlNPTi5zdHJpbmdpZnkoZSkpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dGFyZWFFbGVtZW50LnZhbHVlID0gdGVzdFZhbHVlcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRhcmVhRWxlbWVudC5jbGljaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTApXG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHNldCB2YWx1ZSBhbmQgc2ltdWxhdGUgY2xpY2sgZXZlbnQgZm9yIGJ1YmJsZVxuICAgICAgICAgICAgICAgICAgICB0ZXh0YXJlYUVsZW1lbnQudmFsdWUgPSBcInRlc3RYXCI7XG4gICAgICAgICAgICAgICAgICAgIHRleHRhcmVhRWxlbWVudC5jbGljaygpO1xuXG4gICAgICAgICAgICAgICAgfSwgMjApXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGhhbmRsZSBtdWx0aXBsZSBzZWxlY3QgZXZlbnRzJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdDInKTtcblxuICAgICAgICAgICAgICAgIHVwZGF0ZXIuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgc3ViamVjdCA9IHVwZGF0ZXIuZ2V0U3ViamVjdCgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzdWJqZWN0KS5pcy5lcXVhbChwcm94eW9ic2VydmVyLmdldFN1YmplY3QoKSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZXhwZWN0ZWQgPSBbXG4gICAgICAgICAgICAgICAgICAgIFsndmFsdWUxJ10sXG4gICAgICAgICAgICAgICAgICAgIFsndmFsdWUyJywgJ3ZhbHVlMycsICd2YWx1ZTQnXSxcbiAgICAgICAgICAgICAgICAgICAgWyd2YWx1ZTEnLCAndmFsdWU0J10sXG4gICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgIGxldCB0ZXN0U2VsZWN0aW9ucyA9IFtcbiAgICAgICAgICAgICAgICAgICAgW2ZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgICAgICAgICAgW3RydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgXVxuXG4gICAgICAgICAgICAgICAgLy8gaGVyZSB0aGUgbm90YXRpb24gd2l0aCBmdW5jdGlvbiBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlIHRoaXMgcG9pbnRlciBpcyBzZXQuXG4gICAgICAgICAgICAgICAgcHJveHlvYnNlcnZlci5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlID0gZXhwZWN0ZWQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT09IHVuZGVmaW5lZCAmJiBleHBlY3RlZC5sZW5ndGggPT09IDApIGRvbmUobmV3IEVycm9yKCd0byBtYW55IGNhbGxzJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0gdGhpcy5nZXRTdWJqZWN0KClbJ211bHRpc2VsZWN0J107XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHYpICE9PSBKU09OLnN0cmluZ2lmeShlKSkgZG9uZShuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkodikgKyAnIHNob3VsZCAnICsgSlNPTi5zdHJpbmdpZnkoZSkpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSB0ZXN0U2VsZWN0aW9ucy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1swXS5zZWxlY3RlZCA9IHZbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5vcHRpb25zWzFdLnNlbGVjdGVkID0gdlsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm9wdGlvbnNbMl0uc2VsZWN0ZWQgPSB2WzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1szXS5zZWxlY3RlZCA9IHZbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5jbGljaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTApXG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1swXS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1sxXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm9wdGlvbnNbMl0uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5vcHRpb25zWzNdLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuY2xpY2soKTtcblxuICAgICAgICAgICAgICAgIH0sIDIwKVxuXG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cblxuICAgIGRlc2NyaWJlKCdVcGRhdGVyKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdSZXBsYWNlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGFkZCBsb3dlciBoZWxsbyBhbmQgSEVMTE95ZXMhJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG5cblxuICAgICAgICAgICAgICAgIGxldCBkID0gbmV3IFVwZGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IFwiSEFMTE9cIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcblxuXG4gICAgICAgICAgICAgICAgZC5zZXRDYWxsYmFjaygnbXlmb3JtYXR0ZXInLCBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSArICd5ZXMhJ1xuICAgICAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgICAgIGQucnVuKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgnb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDp0ZXh0IHwgdG9sb3dlclwiPmhhbGxvPC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDp0ZXh0IHwgY2FsbDpteWZvcm1hdHRlclwiPkhBTExPeWVzITwvZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInN0YXRpYzpoZWxsb1xcXFwgXCI+aGVsbG8gPC9kaXY+Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKFxuICAgICAgICAgICAgICAgICAgICBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKGUpKVxuICAgICAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ1VwZGF0ZXIoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDM7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ1JlcGxhY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IG5ldyBVcGRhdGVyKFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aTogJzAnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuXG5cbiAgICAgICAgICAgICAgICBkLnJ1bigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwibXlpZCBwYXRoOmEuYlwiPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPHAgZGF0YS1tb25zdGVyLWluc2VydD1cIm15aW5uZXJpZCBwYXRoOmEuYlwiIGRhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwibXlpZC0wXCI+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8c3BhbiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6YS5iLjAgfCB0b2pzb25cIiBkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm15aW5uZXJpZC0wXCI+e1wiaVwiOlwiMFwifTwvc3Bhbj4nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaChcbiAgICAgICAgICAgICAgICAgICAgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihlKSlcbiAgICAgICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdVcGRhdGVyKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlc2NyaWJlKCdBdHRyaWJ1dGVzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNoYW5nZSBhdHRyaWJ1dGVzJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MycpXG5cbiAgICAgICAgICAgICAgICBsZXQgdGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXh0JylcbiAgICAgICAgICAgICAgICBleHBlY3QodGV4dC52YWx1ZSkudG8uYmUuZXF1YWwoXCJcIik7XG5cbiAgICAgICAgICAgICAgICBsZXQgcmFkaW8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmFkaW8nKVxuICAgICAgICAgICAgICAgIGV4cGVjdChyYWRpby5jaGVja2VkKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgICAgIGxldCBjaGVja2JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGVja2JveCcpXG4gICAgICAgICAgICAgICAgZXhwZWN0KGNoZWNrYm94LmNoZWNrZWQpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWxlY3QnKVxuICAgICAgICAgICAgICAgIGV4cGVjdChzZWxlY3Quc2VsZWN0ZWRJbmRleCkudG8uYmUuZXF1YWwoMCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgbXVsdGlzZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXVsdGlzZWxlY3QnKVxuICAgICAgICAgICAgICAgIGV4cGVjdChtdWx0aXNlbGVjdC5zZWxlY3RlZEluZGV4KS50by5iZS5lcXVhbCgtMSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgdGV4dGFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGV4dGFyZWEnKVxuICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXh0YXJlYS52YWx1ZSkudG8uYmUuZXF1YWwoXCJcIik7XG5cblxuICAgICAgICAgICAgICAgIGxldCBkID0gbmV3IFVwZGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOiBcImRpdi1jbGFzc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiaGVsbG9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBcImhlbGxvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaW86IFwidHJ1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRhcmVhOiBcInRlc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXNlbGVjdDogWyd2YWx1ZTMnLCAndmFsdWU0JywgJ290aGVyLXZhbHVlNSddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdDogXCJ2YWx1ZTJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveDogXCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG5cblxuICAgICAgICAgICAgICAgIGQucnVuKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8ZGl2IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDphLmJcIiBjbGFzcz1cImRpdi1jbGFzc1wiPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGlucHV0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDphLmNcIiBpZD1cImlucHV0MVwiIHZhbHVlPVwiaGVsbG9cIj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzx0ZXh0YXJlYSBuYW1lPVwidGV4dGFyZWFcIiBpZD1cInRleHRhcmVhXCIgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmEudGV4dGFyZWFcIiB2YWx1ZT1cInRlc3RcIj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxpbnB1dCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNoZWNrZWQgcGF0aDphLnJhZGlvXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cInJhZGlvXCIgdmFsdWU9XCJyMVwiIGlkPVwicmFkaW9cIiBjaGVja2VkPVwidHJ1ZVwiPicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QodGV4dC52YWx1ZSwgJ3RleHQgY29udHJvbCcpLnRvLmJlLmVxdWFsKGQuZ2V0U3ViamVjdCgpWydhJ11bJ2MnXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QocmFkaW8uY2hlY2tlZCwgJ3JhZGlvIGNvbnRyb2wnKS50by5iZS5lcXVhbCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXh0YXJlYS52YWx1ZSwgJ3RleHRhcmVhIGNvbnRyb2wnKS50by5iZS5lcXVhbChkLmdldFN1YmplY3QoKVsnYSddWyd0ZXh0YXJlYSddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChzZWxlY3Quc2VsZWN0ZWRJbmRleCwgJ3NlbGVjdCBjb250cm9sJykudG8uYmUuZXF1YWwoMSk7IC8vIFswPT5vdGhlci12YWx1ZSwgMT0+dmFsdWUyXVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbXVsdGlzZWxlY3RTZWxlY3RlZE9wdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2luZGV4LCBvYmpdIG9mIE9iamVjdC5lbnRyaWVzKG11bHRpc2VsZWN0LnNlbGVjdGVkT3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXNlbGVjdFNlbGVjdGVkT3B0aW9ucy5wdXNoKG9iai52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KG11bHRpc2VsZWN0U2VsZWN0ZWRPcHRpb25zKSwgJ211bHRpc2VsZWN0IGNvbnRyb2wnKS50by5iZS5lcXVhbChKU09OLnN0cmluZ2lmeShkLmdldFN1YmplY3QoKVsnYSddWydtdWx0aXNlbGVjdCddKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoY2hlY2tib3guY2hlY2tlZCwgJ2NoZWNrYm94IGNvbnRyb2wnKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKFxuICAgICAgICAgICAgICAgICAgICBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKGUpKVxuICAgICAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdHZXQgQXR0cmlidXRlIFBpcGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBpZCwgbW9ja3M7XG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIGlkID0gbmV3IElEKCdtb25zdGVyJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgIDxkaXYgaWQ9XCJgICsgaWQgKyBgXCJcbiAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDphIHwgaWY6dmFsdWU6XFxcXCBcIj48L2Rpdj5gXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBpbmNsdWRlIHNwYWNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQudG9TdHJpbmcoKSlcblxuICAgICAgICAgICAgY29uc3QgcGlwZSA9IGRpdi5nZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1yZXBsYWNlJyk7XG4gICAgICAgICAgICBleHBlY3QocGlwZS5sZW5ndGgpLnRvLmJlLmVxdWFsKDIwKTtcblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ21hbnVlbCB1cGRhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBpZCwgbW9ja3M7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgaWQgPSBuZXcgSUQoJ21vbnN0ZXInKS50b1N0cmluZygpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYDxpbnB1dCBpZD1cImAgKyBpZCArIGBcImRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDpteXZhbHVlXCI+YFxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgZ2V0IHZhbHVlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkudmFsdWUgPSBcImhlbGxvXCI7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVyID0gbmV3IFVwZGF0ZXIobW9ja3MpO1xuICAgICAgICAgICAgY29uc3Qgc3ViamVjdCA9IHVwZGF0ZXIuZ2V0U3ViamVjdCgpO1xuXG4gICAgICAgICAgICBleHBlY3Qoc3ViamVjdCkudG8ubm90LmhhdmUucHJvcGVydHkoJ215dmFsdWUnKTtcbiAgICAgICAgICAgIHVwZGF0ZXIucmV0cmlldmUoKTtcbiAgICAgICAgICAgIGV4cGVjdChzdWJqZWN0KS50by5oYXZlLnByb3BlcnR5KCdteXZhbHVlJyk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgLyoqXG4gICAgICogaHR0cHM6Ly9naXRsYWIuc2NodWthaS5jb20vb3NzL2xpYnJhcmllcy9qYXZhc2NyaXB0L21vbnN0ZXIvLS9pc3N1ZXMvMTEyXG4gICAgICovXG4gICAgZGVzY3JpYmUoJ1VwZGF0ZXIoKSAyMDIyMDEwNycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgLy8gbGFuZ3VhZ2U9SFRNTFxuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpjb250ZW50XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgYDtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnQnVnZml4ICMxMTInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgYWRkICcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNvbnRhaW5lckVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJyk7XG4gICAgICAgICAgICAgICAgbGV0IG5ld0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTCA9ICd5ZWFoISA8Yj5UZXN0PC9iPiEnO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVySFRNTCA9IGNvbnRhaW5lckVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0hUTUwgPSBuZXdFbGVtZW50LmlubmVySFRNTDtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gbmV3IFVwZGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG5ld0VsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGQucnVuKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5lckVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdj55ZWFoISA8Yj5UZXN0PC9iPiE8L2Rpdj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSwgMTAwKVxuXG4gICAgICAgICAgICAgICAgLy8gZC5zZXRDYWxsYmFjaygnbXlmb3JtYXR0ZXInLCBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gYSArICd5ZXMhJ1xuICAgICAgICAgICAgICAgIC8vIH0pXG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgZC5ydW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgnb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDp0ZXh0IHwgdG9sb3dlclwiPmhhbGxvPC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDp0ZXh0IHwgY2FsbDpteWZvcm1hdHRlclwiPkhBTExPeWVzITwvZGl2PicpO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInN0YXRpYzpoZWxsb1xcXFwgXCI+aGVsbG8gPC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIHJldHVybiBkb25lKCk7XG4gICAgICAgICAgICAgICAgLy8gICAgIH0pLmNhdGNoKFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgZSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZSkpXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC8vIH0sIDEwMClcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmltcG9ydCB7TG9jYWxlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHtnZXRMb2NhbGVPZkRvY3VtZW50fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9sb2NhbGUubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmRlc2NyaWJlKCdBdHRyaWJ1dGVzJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXRMb2NhbGVPZkRvY3VtZW50JywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW1wiZGVcIl0sXG4gICAgICAgICAgICBbXCJzbC1JVC1uZWRpc1wiXSxcbiAgICAgICAgICAgIFtcImVuLUdCXCJdLFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgICAgIGl0KCdyZXR1cm4gbGFuZ3VhZ2UgJyArIGEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdodG1sJyk7XG4gICAgICAgICAgICAgICAgbGV0IG5vZGUgPSBodG1sLml0ZW0oMCk7XG5cbiAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnbGFuZycsIGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChnZXRMb2NhbGVPZkRvY3VtZW50KCkudG9TdHJpbmcoKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbiAgICBpdCgncmV0dXJuIGxhbmd1YWdlIGVuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgaHRtbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdodG1sJyk7XG4gICAgICAgIGxldCBub2RlID0gaHRtbC5pdGVtKDApO1xuICAgICAgICBsZXQgbGFuZz0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2xhbmcnKTtcblxuICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZSgnbGFuZycpO1xuICAgICAgICBjb25zdCBsb2NhbGUgPSBnZXRMb2NhbGVPZkRvY3VtZW50KCk7XG4gICAgICAgIGV4cGVjdChsb2NhbGUpLnRvLmJlLmluc3RhbmNlT2YoTG9jYWxlKTtcbiAgICAgICAgZXhwZWN0KGxvY2FsZS5sb2NhbGVTdHJpbmcpLnRvLmJlLmVxdWFsKG5hdmlnYXRvci5sYW5ndWFnZSk7XG5cbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2xhbmcnLCBsYW5nKTtcbiAgICAgICAgXG4gICAgfSlcblxuXG59KSIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7Z2V0RG9jdW1lbnRGcmFnbWVudEZyb21TdHJpbmd9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtUaGVtZSwgZ2V0RG9jdW1lbnRUaGVtZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdGhlbWUubWpzXCI7XG5cbmRlc2NyaWJlKCdUaGVtZScsIGZ1bmN0aW9uICgpIHtcbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbmV3IFRoZW1lKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIFRoZW1lIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgVGhlbWUoJ215LXRoZW1lJykpLmlzLmEuaW5zdGFuY2VPZihUaGVtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBUaGVtZS1OYW1lJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBUaGVtZSgnbXktdGhlbWUnKS5nZXROYW1lKCkpLmlzLmVxdWFsKCdteS10aGVtZScpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBFcnJvciBiZWNhdXNlIGVtcHR5IGFyZ3VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBUaGVtZSgpKS50by50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHRocm93IEVycm9yIGJlY2F1c2Ugbm8gc3RyaW5nIGFyZ3VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBUaGVtZSgyKSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXREb2N1bWVudFRoZW1lKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIFRoZW1lIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChnZXREb2N1bWVudFRoZW1lKCkpLmlzLmEuaW5zdGFuY2VPZihUaGVtZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIERlZmF1bHQgVGhlbWUgbmFtZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChnZXREb2N1bWVudFRoZW1lKCkuZ2V0TmFtZSgpKS5pcy5lcXVhbCgnbW9uc3RlcicpO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldERvY3VtZW50VGhlbWUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci10aGVtZS1uYW1lJywgJ3Rlc3R0aGVtZScpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJykucmVtb3ZlQXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItdGhlbWUtbmFtZScpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRlc3R0aGVtZSBUaGVtZSBuYW1lJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGdldERvY3VtZW50VGhlbWUoKS5nZXROYW1lKCkpLmlzLmVxdWFsKCd0ZXN0dGhlbWUnKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcbn0pO1xuXG5cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBjaGFpIGZyb20gXCJjaGFpXCJcbmltcG9ydCB7aW50ZXJuYWxTeW1ib2x9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtBVFRSSUJVVEVfT1BUSU9OU30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtnZXREb2N1bWVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7UHJveHlPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHthZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXBkYXRlci5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8aW5wdXQgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOmFcIiBpZD1cInRlc3QyXCIgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmFcIj5cbmA7XG5cbi8vIGRlZmluZWQgaW4gY29uc3RhbnRzLm1qc1xuY29uc3QgdXBkYXRlclN5bWJvbEtleSA9IFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vY3VzdG9tLWVsZW1lbnRAQG9wdGlvbnMtdXBkYXRlci1saW5rXCJcbmNvbnN0IHVwZGF0ZXJTeW1ib2xTeW1ib2wgPSBTeW1ib2wuZm9yKHVwZGF0ZXJTeW1ib2xLZXkpO1xuXG5cblxuZGVzY3JpYmUoJ0RPTScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBDdXN0b21FbGVtZW50LCByZWdpc3RlckN1c3RvbUVsZW1lbnQsIFRlc3RDb21wb25lbnQsIGRvY3VtZW50LCBUZXN0Q29tcG9uZW50Mixhc3NpZ25VcGRhdGVyVG9FbGVtZW50O1xuXG5cbiAgICBkZXNjcmliZShcImFzc2lnblVwZGF0ZXJUb0VsZW1lbnRcIiwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21FbGVtZW50ID0gbVsnQ3VzdG9tRWxlbWVudCddO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduVXBkYXRlclRvRWxlbWVudD0gZnVuY3Rpb24gKGVsZW1lbnRzLCBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQuY2FsbCh0aGlzLCBlbGVtZW50cywgdXBkYXRlclN5bWJvbFN5bWJvbCwgb2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICAvKipcbiAgICAgICAgICogdGhpcyB0ZXN0IHRyeSB0byBzaW11bGF0ZSB0aGUgYnVnIHRoYXQgd2FzIGZvdW5kIGluIHRoZSBhc3NpZ25VcGRhdGVyVG9FbGVtZW50IGZ1bmN0aW9uLlxuICAgICAgICAgKiBUaGUgYnVnIHdhcyB0aGF0IHRoZSB1cGRhdGVyIHdhcyBub3QgYXNzaWduZWQgdG8gdGhlIGVsZW1lbnQgd2hlbiB0aGUgZWxlbWVudCB3YXMgY3JlYXRlZC5cbiAgICAgICAgICogXG4gICAgICAgICAqIHVuZm9ydHVuYXRlbHksIHRoaXMgdGVzdCBkb2VzIG5vdCByZXByb2R1Y2UgdGhlIGJ1Zy5cbiAgICAgICAgICovXG4gICAgICAgIGl0KFwic2hvdWxkIGFzc2lnbiBhbiB1cGRhdGVyIHRvIGFuIGVsZW1lbnRcIiwgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1vY2tzXCIpLmlubmVySFRNTCkudG8uZXF1YWwoaHRtbDIpO1xuXG4gICAgICAgICAgICBjb25zdCBhID0ge2E6IDF9O1xuICAgICAgICAgICAgY29uc3QgYiA9IHtiOiAyfTtcblxuICAgICAgICAgICAgY29uc3QgYXAgPSBuZXcgUHJveHlPYnNlcnZlcihhKTtcbiAgICAgICAgICAgIGNvbnN0IGJwID0gbmV3IFByb3h5T2JzZXJ2ZXIoYik7XG5cbiAgICAgICAgICAgIGNvbnN0IHggPSBhcC5nZXRTdWJqZWN0KClcbiAgICAgICAgICAgIGNvbnN0IHkgPSBicC5nZXRTdWJqZWN0KClcblxuICAgICAgICAgICAgY29uc3Qgc2V0ID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgc2V0LmFkZChlbGVtZW50KTtcblxuICAgICAgICAgICAgYXNzaWduVXBkYXRlclRvRWxlbWVudC5jYWxsKGVsZW1lbnQsIHNldCwgYXApO1xuICAgICAgICAgICAgYXNzaWduVXBkYXRlclRvRWxlbWVudC5jYWxsKGVsZW1lbnQsIHNldCwgYnApO1xuXG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoeCkpLnRvLmVxdWFsKCd7XCJhXCI6MX0nKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeSh5KSkudG8uZXF1YWwoJ3tcImJcIjoyfScpO1xuXG4gICAgICAgICAgICBjb25zdCBzeSA9IHVwZGF0ZXJTeW1ib2xTeW1ib2w7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCB2ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItb2JqZWN0bGlua1wiKTtcbiAgICAgICAgICAgIGV4cGVjdCh2KS50by5lcXVhbCgnU3ltYm9sKCcrdXBkYXRlclN5bWJvbEtleSsnKScpO1xuXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVyID0gZWxlbWVudFtzeV07XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiB1cGRhdGVyKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB1IG9mIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgdS5ydW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHUuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhwZWN0KHVwZGF0ZXIpLnRvLmJlLmFuLmluc3RhbmNlb2YoU2V0KTtcbiAgICAgICAgICAgIGV4cGVjdCh1cGRhdGVyKS50by5iZS5hKFwiU2V0XCIpO1xuXG4gICAgICAgICAgICB4LmEgPSAzO1xuICAgICAgICAgICAgYnAuZ2V0U3ViamVjdCgpLmIgPSA0O1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrSFRNTCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibW9ja3NcIik7XG5cbiAgICAgICAgICAgICAgICAvLyBodG1sIGV4cGV4dGVkOlxuICAgICAgICAgICAgICAgIC8vIDxpbnB1dCBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6YVwiIGlkPVwidGVzdDJcIiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInZhbHVlIHBhdGg6YVwiIGRhdGEtbW9uc3Rlci1vYmplY3RsaW5rPVwiU3ltYm9sKEBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAb2JqZWN0LXVwZGF0ZXItbGluaylcIiB2YWx1ZT1cIjNcIj5cblxuICAgICAgICAgICAgICAgIGV4cGVjdChtb2NrSFRNTC5xdWVyeVNlbGVjdG9yKFwiI3Rlc3QyXCIpKS50by5oYXZlLnZhbHVlKCczJylcbiAgICAgICAgICAgICAgICBleHBlY3QobW9ja0hUTUwucXVlcnlTZWxlY3RvcihcIiN0ZXN0MlwiKSkudG8uaGF2ZS5hdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vYmplY3RsaW5rJywgJ1N5bWJvbCgnK3VwZGF0ZXJTeW1ib2xLZXkrJyknKVxuICAgICAgICAgICAgICAgIC8vZXhwZWN0KG1vY2tIVE1MKS50by5oYXZlLmh0bWwocmVzdWx0SFRNTCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudC52YWx1ZSkudG8uZXF1YWwoXCIzXCIpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGFwLmdldFJlYWxTdWJqZWN0KCkpKS50by5lcXVhbCgne1wiYVwiOjN9Jyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGJwLmdldFJlYWxTdWJqZWN0KCkpKS50by5lcXVhbCgne1wiYlwiOjR9Jyk7XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9LCAxMClcblxuICAgICAgICB9KVxuXG4gICAgfSlcblxuXG4gICAgZGVzY3JpYmUoJ0N1c3RvbUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiKS50aGVuKChtKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUVsZW1lbnQgPSBtWydDdXN0b21FbGVtZW50J107XG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQgPSBtWydyZWdpc3RlckN1c3RvbUVsZW1lbnQnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RDb21wb25lbnQgPSBjbGFzcyBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm1vbnN0ZXItdGVzdGNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUZXN0Q29tcG9uZW50KVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBUZXN0Q29tcG9uZW50MiA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibW9uc3Rlci10ZXN0Y2xhc3MyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgZGVmYXVsdHMoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZW1vdGVzdDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbjogJzxoMT48L2gxPjxhcnRpY2xlPjxwPnRlc3Q8L3A+PGRpdiBpZD1cImNvbnRhaW5lclwiPjwvZGl2PjwvYXJ0aWNsZT4nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudDIpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnQ3VzdG9tRWxlbWVudCgpIHdpdGggQ29uZmlnJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZWFkIGNvbmZpZyBmcm9tIHRhZycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8c2NyaXB0IGlkPVwiY29uZmlnMVwiIHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCI+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImRlbW90ZXN0XCI6MTQyNVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3NjcmlwdD5cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8bW9uc3Rlci10ZXN0Y2xhc3MyIGlkPVwidGhpc2lzYXRlc3RcIiBkYXRhLW1vbnN0ZXItb3B0aW9ucy1zZWxlY3Rvcj1cIiNjb25maWcxXCI+XG4gICAgICAgICAgICAgICAgPC9tb25zdGVyLXRlc3RjbGFzczI+XG4gICAgICAgICAgICAgICAgYDtcblxuICAgICAgICAgICAgICAgIGxldCBtb25zdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RoaXNpc2F0ZXN0Jyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG1vbnN0ZXIuZ2V0T3B0aW9uKCdkZW1vdGVzdCcpKS5pcy5lcWwoMTQyNSk7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gY3VzdG9tLWVsZW1lbnQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gbmV3IFRlc3RDb21wb25lbnQoKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodHlwZW9mIGQpLmlzLmVxdWFsKCdvYmplY3QnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnY29ubmVjdCBlbXB0eSBlbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ2RvY3VtZW50IHNob3VsZCBjb250YWluIG1vbnN0ZXItdGVzdGNsYXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZXN0Y2xhc3MnKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKS5hcHBlbmRDaGlsZChkKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21vbnN0ZXItdGVzdGNsYXNzJykubGVuZ3RoKS5pcy5lcXVhbCgxKTtcbiAgICAgICAgICAgICAgICAvLyBubyBkYXRhLW1vbnN0ZXItb2JqZWN0bGluaz1cIlN5bWJvbChtb25zdGVyVXBkYXRlcilcIiBiZWNhdXNlIGl0IGhhcyBub3RoaW5nIHRvIHVwZGF0ZVxuICAgICAgICAgICAgICAgIC8vIGJ1dCBkYXRhLW1vbnN0ZXItZXJyb3I9XCJFcnJvcjogaHRtbCBpcyBub3Qgc2V0LlwiXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXRlc3RjbGFzcyBkYXRhLW1vbnN0ZXItZXJyb3I9XCJFcnJvcjogaHRtbCBpcyBub3Qgc2V0LlwiPjwvbW9uc3Rlci10ZXN0Y2xhc3M+Jyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2Nvbm5lY3QgZWxlbWVudCB3aXRoIGh0bWwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnZG9jdW1lbnQgc2hvdWxkIGNvbnRhaW4gbW9uc3Rlci10ZXN0Y2xhc3MyJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdGVzdGNsYXNzMicpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICAgICAgLy8gaW5zZXJ0IERPTSBydW4gaW4gZXh0cmEgcHJvY2VzcyB2aWEgc2V0VGltZW91dCFcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbW9uc3Rlci10ZXN0Y2xhc3MyJykubGVuZ3RoKS5pcy5lcXVhbCgxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbW9uc3Rlci10ZXN0Y2xhc3MyJykuaXRlbSgwKS5zaGFkb3dSb290LmlubmVySFRNTCkuaXMuZXF1YWwoJzxoMT48L2gxPjxhcnRpY2xlPjxwPnRlc3Q8L3A+PGRpdiBpZD1cImNvbnRhaW5lclwiPjwvZGl2PjwvYXJ0aWNsZT4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci10ZXN0Y2xhc3MyIGRhdGEtbW9uc3Rlci1vYmplY3RsaW5rPVwiU3ltYm9sKCcrdXBkYXRlclN5bWJvbEtleSsnKVwiPjwvbW9uc3Rlci10ZXN0Y2xhc3MyPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSwgMTApO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ09wdGlvbnMgY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnZGVsZWdhdGVzRm9jdXMgc2hvdWxkIGNoYW5nZSBmcm9tIHRydWUgdG8gZmFsc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlc3RjbGFzcycpXG5cbiAgICAgICAgICAgICAgICBjb25zdCBvID0gZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0ucmVhbFN1YmplY3Q7XG4gICAgICAgICAgICAgICAgZXhwZWN0KE9iamVjdC5pcyhlbGVtZW50W2ludGVybmFsU3ltYm9sXS5yZWFsU3ViamVjdCwgbykpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0ucmVhbFN1YmplY3Qub3B0aW9ucy5kZWxlZ2F0ZXNGb2N1cykudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5vcHRpb25zLmRlbGVnYXRlc0ZvY3VzKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldE9wdGlvbignZGVsZWdhdGVzRm9jdXMnKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoT2JqZWN0LmlzKGVsZW1lbnRbaW50ZXJuYWxTeW1ib2xdLnJlYWxTdWJqZWN0LCBvKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9PUFRJT05TLCBKU09OLnN0cmluZ2lmeSh7ZGVsZWdhdGVzRm9jdXM6IGZhbHNlfSkpO1xuICAgICAgICAgICAgICAgIC8vIGV4cGVjdChPYmplY3QuaXMoZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0ucmVhbFN1YmplY3QsIG8pKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gZXhwZWN0KGVsZW1lbnQuZ2V0T3B0aW9uKCdkZWxlZ2F0ZXNGb2N1cycpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBleHBlY3QoZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0ucmVhbFN1YmplY3Qub3B0aW9ucy5kZWxlZ2F0ZXNGb2N1cykudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gZXhwZWN0KE9iamVjdC5pcyhlbGVtZW50W2ludGVybmFsU3ltYm9sXS5yZWFsU3ViamVjdCwgbykpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdzZXRPcHRpb25zKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWydzaGFkb3dNb2RlJywgJ3gxJ10sXG4gICAgICAgICAgICAgICAgWyd0ZW1wbGF0ZXMubWFpbicsICd4MiddLCAvLyBpcyBleHBsaWNpdGx5IHNldCB0byB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBbJ2RlbGVnYXRlc0ZvY3VzJywgJ3g0J10sXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuXG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBuZXdWYWx1ZSA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICAgICAgbGV0IHRleHQgPSBrZXkgKyAnIHNob3VsZCByZXR1cm4gJyArIG5ld1ZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSBrZXkgKyAnIHdhcyBub3Qgc2V0LCB0aGVyZWZvcmUgZGVmYXVsdCAnICsgbmV3VmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICBpdCh0ZXh0LCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlc3RjbGFzcycpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZC5nZXRPcHRpb24oa2V5KSkudG8uYmUubm90LmVxdWFsKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHggPSBkLnNldE9wdGlvbihrZXksIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGQuZ2V0T3B0aW9uKGtleSkpLnRvLmJlLmVxdWFsKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdnZXRPcHRpb25zKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ3NoYWRvd01vZGUnLCAnb3BlbiddLFxuICAgICAgICAgICAgICAgIFsndGVtcGxhdGVzLm1haW4nLCB1bmRlZmluZWRdLCAvLyBpcyBleHBsaWNpdGx5IHNldCB0byB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBbJ2RlbGVnYXRlc0ZvY3VzJywgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgWyd4LnkueicsIHRydWUsIHRydWVdLCAvLyB4LnkueiBpc250IHNldCwgZGVmYXVsdFZhbHVlIGlzIHVzZWRcbiAgICAgICAgICAgICAgICBbJ3gnLCB0cnVlLCB0cnVlXSAvLyB4IGlzbnQgc2V0LCBkZWZhdWx0VmFsdWUgaXMgdXNlZFxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cblxuICAgICAgICAgICAgICAgIGxldCBrZXkgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgZGVmYXVsdFZhbHVlID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgICAgICBsZXQgdGV4dCA9IGtleSArICcgc2hvdWxkIHJldHVybiAnICsgdmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSBrZXkgKyAnIHdhcyBub3Qgc2V0LCB0aGVyZWZvcmUgZGVmYXVsdCAnICsgZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgaXQodGV4dCwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZXN0Y2xhc3MnKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHggPSBkLmdldE9wdGlvbihrZXksIGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh4KS50by5iZS5lcXVhbCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy8xMTNcbiAgICAgICAgICovXG4gICAgICAgIGRlc2NyaWJlKCdBc3NpZ24gQ1NTU3R5bGUgYXMgQXJyYXkgd2l0aCB3cm9uZyB0eXBlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCBodG1sVEFHID0gJ21vbnN0ZXItdGVzdGNsYXNzLXgxJztcblxuICAgICAgICAgICAgbGV0IG1vY2tzLCBUZXN0Q29tcG9uZW50WDE7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cblxuICAgICAgICAgICAgICAgIFRlc3RDb21wb25lbnRYMSA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbFRBR1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3RydWVdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGdldCBkZWZhdWx0cygpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW46ICc8aDE+dGVzdDwvaDE+J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudFgxKVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KGh0bWxUQUcgKyBcIiBzaG91bGQgdGhyb3cgRXhjZXB0aW9uXCIsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGh0bWxUQUcpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgICAgIGRpdi5hcHBlbmQoZCk7XG5cblxuICAgICAgICAgICAgICAgIGV4cGVjdChkaXYpLmNvbnRhaW4uaHRtbCgnZGF0YS1tb25zdGVyLWVycm9yPVwiVHlwZUVycm9yOiB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgQ1NTU3R5bGVTaGVldFwiJyk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSlcblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy8xMTNcbiAgICAgICAgICovXG4gICAgICAgIGRlc2NyaWJlKCdBc3NpZ24gQ1NTU3R5bGUgYXMgQXJyYXkgYW5kIENTU1N0eWxlc2hlZXQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGh0bWxUQUcgPSAnbW9uc3Rlci10ZXN0Y2xhc3MteDExMy0yJztcblxuICAgICAgICAgICAgbGV0IG1vY2tzLCBUZXN0Q29tcG9uZW50WDExM1gyO1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICAgICAgVGVzdENvbXBvbmVudFgxMTNYMiA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbFRBR1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGdldCBkZWZhdWx0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlczoge21haW46ICc8aDE+dGVzdDwvaDE+J30sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IChuZXcgQ1NTU3R5bGVTaGVldCgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcy5pbnNlcnRSdWxlKCdhIHsgY29sb3IgOiByZWR9Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbc107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudFgxMTNYMilcblxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdChodG1sVEFHICsgXCIgc2hvdWxkIHRocm93IEV4Y2VwdGlvbiAyXCIsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGh0bWxUQUcpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgICAgIGRpdi5hcHBlbmQoZCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5zaGFkb3dSb290LmlubmVySFRNTCkuaXMuZXEoJzxoMT50ZXN0PC9oMT4nKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzExM1xuICAgICAgICAgKi9cbiAgICAgICAgZGVzY3JpYmUoJ0Fzc2lnbiBDU1NTdHlsZSBhcyBBcnJheSBhbmQgQ1NTIGFzIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgaHRtbFRBRyA9ICdtb25zdGVyLXRlc3RjbGFzcy14MTEzLTIxJztcblxuICAgICAgICAgICAgbGV0IG1vY2tzLCBUZXN0Q29tcG9uZW50WDExM1gyMjtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICAgICAgICAgIFRlc3RDb21wb25lbnRYMTEzWDIyID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sVEFHXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZ2V0IGRlZmF1bHRzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7bWFpbjogJzxoMT50ZXN0PC9oMT4nfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdhIHsgY29sb3I6cmVkIH0nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50KFRlc3RDb21wb25lbnRYMTEzWDIyKVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KGh0bWxUQUcgKyBcIiBzaG91bGQgZXEgPHN0eWxlPmEgeyBjb2xvcjpyZWQgfTwvc3R5bGU+PGgxPnRlc3Q8L2gxPlwiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChodG1sVEFHKTtcblxuICAgICAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBkaXYuYXBwZW5kKGQpO1xuXG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5zaGFkb3dSb290LmlubmVySFRNTCkuaXMuZXEoJzxzdHlsZT5hIHsgY29sb3I6cmVkIH08L3N0eWxlPjxoMT50ZXN0PC9oMT4nKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy8xMTNcbiAgICAgICAgICovXG4gICAgICAgIGRlc2NyaWJlKCdBc3NpZ24gQ1NTU3R5bGUgYXMgQXJyYXkgYW5kIENTUyBhcyBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGh0bWxUQUcgPSAnbW9uc3Rlci10ZXN0Y2xhc3MteDExMy0yMic7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcywgVGVzdENvbXBvbmVudFgxMTNYMjIzO1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICAgICAgVGVzdENvbXBvbmVudFgxMTNYMjIzID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sVEFHXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZ2V0IGRlZmF1bHRzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7bWFpbjogJzxoMT50ZXN0PC9oMT4nfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsnYSB7IGNvbG9yOnJlZCB9J107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudFgxMTNYMjIzKVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KGh0bWxUQUcgKyBcIiBzaG91bGQgZXEgPHN0eWxlPmEgeyBjb2xvcjpyZWQgfTwvc3R5bGU+PGgxPnRlc3Q8L2gxPlwiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChodG1sVEFHKTtcblxuICAgICAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBkaXYuYXBwZW5kKGQpO1xuXG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5zaGFkb3dSb290LmlubmVySFRNTCkuaXMuZXEoJzxzdHlsZT5hIHsgY29sb3I6cmVkIH08L3N0eWxlPjxoMT50ZXN0PC9oMT4nKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2hhc05vZGUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzO1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdChcImhhc05vZGUgbW9uc3Rlci10ZXN0Y2xhc3Mgc2hvdWxkIHJldHVybiAuLi5cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZXN0Y2xhc3MnKTtcblxuICAgICAgICAgICAgICAgIGxldCBwMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcbiAgICAgICAgICAgICAgICBsZXQgdDEgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBwMS5hcHBlbmRDaGlsZCh0MSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGxldCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ3Rlc3QnKTtcbiAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKHAxKTtcbiAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKHQpO1xuICAgICAgICAgICAgICAgIGQuYXBwZW5kQ2hpbGQocCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICAgICAgZGl2LmFwcGVuZChkKTtcblxuXG4gICAgICAgICAgICAgICAgbGV0IG4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZShuMSkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUodCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZShwKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKHAxKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKHQxKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoXCJoYXNOb2RlIG1vbnN0ZXItdGVzdGNsYXNzMiBzaG91bGQgcmV0dXJuIC4uLlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlc3RjbGFzczInKTtcblxuICAgICAgICAgICAgICAgIGxldCBwMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcbiAgICAgICAgICAgICAgICBsZXQgdDEgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBwMS5hcHBlbmRDaGlsZCh0MSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGxldCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ3Rlc3QnKTtcbiAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKHAxKTtcbiAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKHQpO1xuXG5cbiAgICAgICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICAgICAgZGl2LmFwcGVuZChkKTtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZC5zaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKTtcblxuICAgICAgICAgICAgICAgIGQuc2hhZG93Um9vdC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuYXBwZW5kQ2hpbGQocCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKG4xKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZSh0KSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKHApKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUocDEpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUodDEpKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSlcblxuICAgIH0pO1xufSkiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIjtcbmltcG9ydCB7Rm9jdXNNYW5hZ2VyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9mb2N1c21hbmFnZXIubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnRm9jdXNNYW5hZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKTtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykuaW5uZXJIVE1MID0gJydcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIEZvY3VzTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgRm9jdXNNYW5hZ2VyKCkpLmlzLmluc3RhbmNlb2YoRm9jdXNNYW5hZ2VyKTtcbiAgICAgICAgfSlcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnc3RvcmUgYW5kIHJlc3RvcmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBtYW5hZ2VyO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbWFuYWdlciA9IG5ldyBGb2N1c01hbmFnZXIoKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpLmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInRlc3RpdFwiIGlkPVwidHgxXCI+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJ0ZXN0aXRcIiBpZD1cInR4MlwiPlxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwidGVzdGl0XCIgaWQ9XCJ0eDNcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInRlc3RpdFwiIGlkPVwidHg0XCI+XG4gICAgICAgICAgICA8cCBjbGFzcz1cInRlc3RpdFwiIHRhYmluZGV4PVwiMlwiIGlkPVwidHg1XCI+aGVsbG88L3A+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJ0ZXN0aXRcIiBpZD1cInR4NlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRlc3RpdFwiIGlkPVwidHg3XCI+PC9idXR0b24+XG4gICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50ZXN0aXQnKSkpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9ICgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjAwLFxuICAgICAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMjAwLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3J1biBpc3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIG1hbmFnZXIuZm9jdXMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3R4MScpKTtcbiAgICAgICAgICAgIG1hbmFnZXIuc3RvcmVGb2N1cygpO1xuXG4gICAgICAgICAgICBjb25zdCBlMSA9IG1hbmFnZXIuZ2V0QWN0aXZlKCk7XG4gICAgICAgICAgICBleHBlY3QoZTEuZ2V0QXR0cmlidXRlKCdpZCcpLCAnZXJyb3IxJykudG8uYmUuZXF1YWwoJ3R4MScpO1xuXG4gICAgICAgICAgICBtYW5hZ2VyLmZvY3VzKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0eDInKSk7XG5cbiAgICAgICAgICAgIG1hbmFnZXIuc3RvcmVGb2N1cygpO1xuICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuZ2V0QWN0aXZlKCkuZ2V0QXR0cmlidXRlKCdpZCcpLCAnZXJyb3IyJykudG8uYmUuZXF1YWwoJ3R4MicpO1xuICAgICAgICAgICAgbWFuYWdlci5mb2N1c05leHQoKTtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmdldEFjdGl2ZSgpLmdldEF0dHJpYnV0ZSgnaWQnKSwgJ2Vycm9yMycpLnRvLmJlLmVxdWFsKCd0eDQnKTtcbiAgICAgICAgICAgIG1hbmFnZXIuZm9jdXNOZXh0KCk7XG4gICAgICAgICAgICBleHBlY3QobWFuYWdlci5nZXRBY3RpdmUoKS5nZXRBdHRyaWJ1dGUoJ2lkJyksICdlcnJvcjQnKS50by5iZS5lcXVhbCgndHg1Jyk7XG4gICAgICAgICAgICBtYW5hZ2VyLnJlc3RvcmVGb2N1cygpO1xuICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuZ2V0QWN0aXZlKCkuZ2V0QXR0cmlidXRlKCdpZCcpLCAnZXJyb3I1JykudG8uYmUuZXF1YWwoJ3R4MicpO1xuICAgICAgICAgICAgbWFuYWdlci5yZXN0b3JlRm9jdXMoKTtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmdldEFjdGl2ZSgpLmdldEF0dHJpYnV0ZSgnaWQnKSwgJ2Vycm9yNicpLnRvLmJlLmVxdWFsKCd0eDEnKTtcbiAgICAgICAgICAgIG1hbmFnZXIucmVzdG9yZUZvY3VzKCk7XG4gICAgICAgICAgICBleHBlY3QobWFuYWdlci5nZXRBY3RpdmUoKS5nZXRBdHRyaWJ1dGUoJ2lkJyksICdlcnJvcjcnKS50by5iZS5lcXVhbCgndHgxJyk7XG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgncmV0dXJudHlwZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgZm9jdXNtYW5hZ2VyO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgZm9jdXNtYW5hZ2VyID0gbmV3IEZvY3VzTWFuYWdlcigpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdjaGVjayByZXR1cm5zJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBleHBlY3QoZm9jdXNtYW5hZ2VyLmdldEZvY3VzYWJsZSgpKS5pcy5pbnN0YW5jZW9mKEFycmF5KTtcbiAgICAgICAgICAgIGV4cGVjdChmb2N1c21hbmFnZXIuZ2V0QWN0aXZlKCkpLmlzLmluc3RhbmNlb2YoSFRNTEVsZW1lbnQpO1xuICAgICAgICAgICAgZXhwZWN0KGZvY3VzbWFuYWdlci5mb2N1c05leHQoKSkuaXMuaW5zdGFuY2VvZihGb2N1c01hbmFnZXIpO1xuICAgICAgICAgICAgZXhwZWN0KGZvY3VzbWFuYWdlci5mb2N1c1ByZXYoKSkuaXMuaW5zdGFuY2VvZihGb2N1c01hbmFnZXIpO1xuICAgICAgICAgICAgZXhwZWN0KGZvY3VzbWFuYWdlci5zdG9yZUZvY3VzKCkpLmlzLmluc3RhbmNlb2YoRm9jdXNNYW5hZ2VyKTtcbiAgICAgICAgICAgIGV4cGVjdChmb2N1c21hbmFnZXIuZm9jdXMoZG9jdW1lbnQuYm9keSkpLmlzLmluc3RhbmNlb2YoRm9jdXNNYW5hZ2VyKTtcbiAgICAgICAgICAgIGV4cGVjdChmb2N1c21hbmFnZXIucmVzdG9yZUZvY3VzKCkpLmlzLmluc3RhbmNlb2YoRm9jdXNNYW5hZ2VyKTtcblxuICAgICAgICB9KVxuXG4gICAgfSlcblxuXG59KTsiLCAiaW1wb3J0IHtcbiAgICBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHNcbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gJ2NoYWknO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5mdW5jdGlvbiBzZXR1cFRlc3RFbnZpcm9ubWVudCgpIHtcblxuXG4gICAgY2xhc3MgVGVzdENvbXBvbmVudCBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgdGhpcy5hdHRhY2hTaGFkb3coe21vZGU6ICdvcGVuJ30pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFjdXN0b21FbGVtZW50cy5nZXQoJ3Rlc3QtY29tcG9uZW50JykpIHtcbiAgICAgICAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKCd0ZXN0LWNvbXBvbmVudCcsIFRlc3RDb21wb25lbnQpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY2xlYW51cFRlc3RFbnZpcm9ubWVudCgpIHtcbiAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xufVxuXG5kZXNjcmliZSgnZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzJywgKCkgPT4ge1xuICAgIGJlZm9yZSgoZG9uZSkgPT4ge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHNldHVwVGVzdEVudmlyb25tZW50KCk7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBhZnRlcigoKSA9PiB7XG4gICAgICAgIGNsZWFudXBUZXN0RW52aXJvbm1lbnQoKTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAvLyBTZXQgdXAgdGhlIERPTVxuXG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICA8ZGl2IGlkPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgaWQ9XCJwYXJlbnRcIj5cbiAgICAgICAgICA8ZGl2IGlkPVwiY2hpbGRcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5gO1xuXG4gICAgICAgIGNvbnN0IHNoYWRvd0hvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzaGFkb3dIb3N0KTtcbiAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IHNoYWRvd0hvc3QuYXR0YWNoU2hhZG93KHttb2RlOiAnb3Blbid9KTtcbiAgICAgICAgY29uc3QgaW5uZXJFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGlubmVyRWxlbWVudC5pZCA9ICdpbm5lcic7XG4gICAgICAgIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoaW5uZXJFbGVtZW50KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmluZCB0aGUgZWxlbWVudCB3aXRoIHRoZSB0YXJnZXQgSUQgaW4gdGhlIG5vcm1hbCBET00nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoaWxkJyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhjaGlsZCwgJ3BhcmVudCcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFyZW50JykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmaW5kIHRoZSBlbGVtZW50IHdpdGggdGhlIHRhcmdldCBJRCBpbiB0aGUgc2hhZG93IERPTScsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5uZXJFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZGl2W3NoYWRvd3Jvb3RdID4gZGl2Jyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhpbm5lckVsZW1lbnQsICdpbm5lcicpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbChpbm5lckVsZW1lbnQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCBpZiB0aGUgZWxlbWVudCB3aXRoIHRoZSB0YXJnZXQgSUQgaXMgbm90IGZvdW5kJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGlsZCcpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMoY2hpbGQsICdub25leGlzdGVudCcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5iZS5udWxsO1xuICAgIH0pO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5cbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IHdpbmRvd1JlYWR5O1xubGV0IGRvbVJlYWR5O1xuXG5kZXNjcmliZSgnUmVhZHknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS9kb20vcmVhZHkubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBkb21SZWFkeSA9IG1bJ2RvbVJlYWR5J107XG4gICAgICAgICAgICAgICAgd2luZG93UmVhZHkgPSBtWyd3aW5kb3dSZWFkeSddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZG9tUmVhZHknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Jlc29sdmUgcHJvbWlzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBkb21SZWFkeS50aGVuKGRvbmUpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2luZG93UmVhZHknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Jlc29sdmUgcHJvbWlzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICB3aW5kb3dSZWFkeS50aGVuKGRvbmUpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7XG4gICAgZ2V0RG9jdW1lbnQsIGdldFdpbmRvdywgZ2V0RG9jdW1lbnRGcmFnbWVudEZyb21TdHJpbmdcbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcblxuaW1wb3J0IHtnZXRDb250YWluaW5nRG9jdW1lbnR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3V0aWwubWpzXCI7XG5cbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuXG5kZXNjcmliZSgnRE9NJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGluaXRKU0RPTSgpO1xuICAgIH0pXG4gICAgZGVzY3JpYmUoJ2dldERvY3VtZW50KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGRvY3VtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gZ2V0RG9jdW1lbnQoKTtcbiAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXRXaW5kb3coKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZG9jdW1lbnQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBnZXRXaW5kb3coKTtcbiAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXREb2N1bWVudEZyYWdtZW50RnJvbVN0cmluZygpJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyc8ZGl2PjwvZGl2PiddLFxuICAgICAgICAgICAgWyc8ZGl2PjxkaXY+MjwvZGl2PjwvZGl2PiddLFxuICAgICAgICAgICAgWyc8ZGl2PjxkaXY+MjwvZGl2PicsICc8ZGl2PjxkaXY+MjwvZGl2PjwvZGl2PiddLCAvLyB0ZXN0IGludmFsaWQgaHRtbFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmICghYikgYiA9IGE7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGRvY3VtZW50RnJhZ21lbnQgb2JqZWN0ICcgKyBhLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZyYWdtZW50ID0gZ2V0RG9jdW1lbnRGcmFnbWVudEZyb21TdHJpbmcoYSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGZyYWdtZW50KS50by5iZS5pbnN0YW5jZU9mKERvY3VtZW50RnJhZ21lbnQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChmcmFnbWVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkaXYuaW5uZXJIVE1MKS50by5iZS5lcXVhbChiKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdnZXRDb250YWluaW5nRG9jdW1lbnQnLCAoKSA9PiB7XG4gICAgICAgIGxldCAganNEb21Eb2N1bWVudDtcblxuICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAganNEb21Eb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgICAgICB9KTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgLy8gICAgIGRvbS53aW5kb3cuY2xvc2UoKTtcbiAgICAgICAgLy8gfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIGNhbGxlZCB3aXRoIGFuIGludmFsaWQgYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZ2V0Q29udGFpbmluZ0RvY3VtZW50KG51bGwpKS50by50aHJvdygnSW52YWxpZCBhcmd1bWVudC4gRXhwZWN0ZWQgYW4gSFRNTEVsZW1lbnQuJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBjb3JyZWN0IGNvbnRhaW5pbmcgZG9jdW1lbnQgZm9yIGFuIGVsZW1lbnQgaW4gdGhlIG1haW4gZG9jdW1lbnQnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0ganNEb21Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5pbmdEb2N1bWVudCA9IGdldENvbnRhaW5pbmdEb2N1bWVudChlbGVtZW50KTtcblxuICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5pbmdEb2N1bWVudCkudG8ubnVsbDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgY29udGFpbmluZyBkb2N1bWVudCBmb3IgYW4gZWxlbWVudCBpbnNpZGUgYSBzaGFkb3cgcm9vdCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhvc3QgPSBqc0RvbURvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogJ29wZW4nIH0pO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGpzRG9tRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgc2hhZG93Um9vdC5hcHBlbmRDaGlsZChlbGVtZW50KTtcblxuICAgICAgICAgICAgY29uc3QgY29udGFpbmluZ0RvY3VtZW50ID0gZ2V0Q29udGFpbmluZ0RvY3VtZW50KGVsZW1lbnQpO1xuICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5pbmdEb2N1bWVudCkudG8ubm90Lm51bGw7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBjb3JyZWN0IGNvbnRhaW5pbmcgZG9jdW1lbnQgZm9yIGFuIGVsZW1lbnQgaW5zaWRlIGEgbmVzdGVkIHNoYWRvdyByb290JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3V0ZXJIb3N0ID0ganNEb21Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnN0IG91dGVyU2hhZG93Um9vdCA9IG91dGVySG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiAnb3BlbicgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGlubmVySG9zdCA9IGpzRG9tRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBvdXRlclNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoaW5uZXJIb3N0KTtcblxuICAgICAgICAgICAgY29uc3QgaW5uZXJTaGFkb3dSb290ID0gaW5uZXJIb3N0LmF0dGFjaFNoYWRvdyh7IG1vZGU6ICdvcGVuJyB9KTtcblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGpzRG9tRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgaW5uZXJTaGFkb3dSb290LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuXG4gICAgICAgICAgICBjb25zdCBjb250YWluaW5nRG9jdW1lbnQgPSBnZXRDb250YWluaW5nRG9jdW1lbnQoZWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QoY29udGFpbmluZ0RvY3VtZW50KS50by5ub3QubnVsbDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIHRoZSBlbGVtZW50IGlzIG5vdCBhdHRhY2hlZCB0byBhbnkgZG9jdW1lbnQnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZXRhY2hlZEVsZW1lbnQgPSBqc0RvbURvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGV0YWNoZWRFbGVtZW50LnJlbW92ZSgpO1xuXG4gICAgICAgICAgICBjb25zdCBjb250YWluaW5nRG9jdW1lbnQgPSBnZXRDb250YWluaW5nRG9jdW1lbnQoZGV0YWNoZWRFbGVtZW50KTtcbiAgICAgICAgICAgIGV4cGVjdChjb250YWluaW5nRG9jdW1lbnQpLnRvLmJlLm51bGw7XG4gICAgICAgIH0pO1xuICAgIH0pOyAgICBcbiAgICBcbn0pOyIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBjaGFpIGZyb20gXCJjaGFpXCJcbi8vIGltcG9ydCB7aW50ZXJuYWxTeW1ib2x9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RhbnRzLm1qc1wiO1xuLy8gaW1wb3J0IHtBVFRSSUJVVEVfT1BUSU9OU30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtnZXREb2N1bWVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcbi8vIGltcG9ydCB7UHJveHlPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuLy8gaW1wb3J0IHthZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXBkYXRlci5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbi8vIGxldCBodG1sMSA9IGBcbi8vICAgICA8ZGl2IGlkPVwic2NyaXB0aG9zdFwiPlxuLy8gICAgIDwvZGl2PlxuLy8gICAgXG4vLyAgICAgPGRpdj5cbi8vICAgICA8XG4vLyA8L2Rpdj5cbi8vIGA7XG5cblxuLy8gZGVmaW5lZCBpbiBjb25zdGFudHMubWpzXG4vLyBjb25zdCB1cGRhdGVyU3ltYm9sS2V5ID0gXCJAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAb3B0aW9ucy11cGRhdGVyLWxpbmtcIlxuLy8gY29uc3QgdXBkYXRlclN5bWJvbFN5bWJvbCA9IFN5bWJvbC5mb3IodXBkYXRlclN5bWJvbEtleSk7XG5cblxuXG5kZXNjcmliZSgnRE9NJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IEN1c3RvbUVsZW1lbnQsIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCwgVGVzdENvbXBvbmVudCwgZG9jdW1lbnQsIFRlc3RDb21wb25lbnQyLGFzc2lnblVwZGF0ZXJUb0VsZW1lbnQ7XG5cbiAgICBkZXNjcmliZSgnaW5pdEZyb21TY3JpcHRIb3N0KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3QgcmFuZG9tVGFnTnVtYmVyID0gXCJtb25zdGVyLXRlc3RcIitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwKTtcbiAgICAgICAgXG4gICAgICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2N1c3RvbWVsZW1lbnQubWpzXCIpLnRoZW4oKG0pID0+IHtcblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRWxlbWVudCA9IG1bJ0N1c3RvbUVsZW1lbnQnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCA9IG1bJ3JlZ2lzdGVyQ3VzdG9tRWxlbWVudCddO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBUZXN0Q29tcG9uZW50MiA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmRvbVRhZ051bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgZGVmYXVsdHMoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbjogJzxoMT48L2gxPjxhcnRpY2xlPjxwPnRlc3Q8L3A+PGRpdiBpZD1cImNvbnRhaW5lclwiPjwvZGl2PjwvYXJ0aWNsZT4nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudDIpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NhbGwgY2FsbGJhY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIG5vdCBmb3VuZCBjYWxsYmFjayBhbmQgYWRkIGVycm9yIGF0dHJpYnV0ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGA8ZGl2IGlkPVwiY2FsbC1iYWNrLWhvc3RcIj48L2Rpdj48ZGl2IGlkPVwiY29udGFpbmVyXCI+PC9kaXY+YDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBsZXQgY29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocmFuZG9tVGFnTnVtYmVyKTtcbiAgICAgICAgICAgICAgICBjb250cm9sLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXNjcmlwdC1ob3N0JywgXCJjYWxsLWJhY2staG9zdFwiKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuYXBwZW5kQ2hpbGQoY29udHJvbCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRyb2wuZ2V0T3B0aW9uKCd0ZXN0JykpLmlzLmVxbCgwKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udHJvbC5oYXNBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1lcnJvcicpKS5pcy50cnVlO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBmb3VuZCBjYWxsYmFjayBpbml0Q3VzdG9tQ29udHJvbENhbGxiYWNrJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYDxkaXYgaWQ9XCJjYWxsLWJhY2staG9zdFwiPjwvZGl2PjxkaXYgaWQ9XCJjb250YWluZXJcIj48L2Rpdj5gO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYWxsLWJhY2staG9zdCcpO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pbml0Q3VzdG9tQ29udHJvbENhbGxiYWNrID0gZnVuY3Rpb24gKGNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbC5zZXRPcHRpb24oJ3Rlc3QnLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHJhbmRvbVRhZ051bWJlcik7XG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1zY3JpcHQtaG9zdCcsIFwiY2FsbC1iYWNrLWhvc3RcIik7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpLmFwcGVuZENoaWxkKGNvbnRyb2wpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChjb250cm9sLmdldE9wdGlvbigndGVzdCcpKS5pcy5lcWwoMSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRyb2wuaGFzQXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItZXJyb3InKSkuaXMuZmFsc2U7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGZvdW5kIGNhbGxiYWNrIGluaXRDdXN0b21Db250cm9sQ2FsbGJhY2sgZnJvbSBzZWxmJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYDxkaXYgaWQ9XCJjYWxsLWJhY2staG9zdFwiPjwvZGl2PjxkaXYgaWQ9XCJjb250YWluZXJcIj48L2Rpdj5gO1xuXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHJhbmRvbVRhZ051bWJlcik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRyb2wuZ2V0T3B0aW9uKCd0ZXN0JykpLmlzLmVxbCgwKTtcbiAgICAgICAgICAgICAgICBjb250cm9sLmluaXRDdXN0b21Db250cm9sQ2FsbGJhY2sgPSBmdW5jdGlvbiAoY29udHJvbCkge1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sLnNldE9wdGlvbigndGVzdCcsIDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb250cm9sLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXNjcmlwdC1ob3N0JywgXCJjYWxsLWJhY2staG9zdFwiKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuYXBwZW5kQ2hpbGQoY29udHJvbCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRyb2wuZ2V0T3B0aW9uKCd0ZXN0JykpLmlzLmVxbCgyKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udHJvbC5oYXNBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1lcnJvcicpKS5pcy5mYWxzZTtcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cbiAgICB9KTtcbn0pIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tICdjaGFpJztcbmltcG9ydCB7Z2V0U2xvdHRlZE5vZGVzfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9zbG90dGVkLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdnZXRTbG90dGVkTm9kZXMnLCAoKSA9PiB7XG5cblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IFNldCBpZiB0aGVyZSBpcyBubyBTaGFkb3dSb290JywgKCkgPT4ge1xuICAgICAgICBleHBlY3QoZ2V0U2xvdHRlZE5vZGVzKS5pcy5hKCdmdW5jdGlvbicpO1xuICAgIH0pO1xuXG5cbn0pO1xuXG4iLCAiXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5pbXBvcnQge1xuICAgIGFkZEF0dHJpYnV0ZVRva2VuLFxuICAgIGFkZFRvT2JqZWN0TGluayxcbiAgICBjbGVhckF0dHJpYnV0ZVRva2VucyxcbiAgICBjb250YWluc0F0dHJpYnV0ZVRva2VuLFxuICAgIGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUsXG4gICAgZmluZENsb3Nlc3RPYmplY3RMaW5rLFxuICAgIGdldExpbmtlZE9iamVjdHMsXG4gICAgaGFzT2JqZWN0TGluayxcbiAgICByZW1vdmVBdHRyaWJ1dGVUb2tlbixcbiAgICByZW1vdmVPYmplY3RMaW5rLFxuICAgIHJlcGxhY2VBdHRyaWJ1dGVUb2tlbixcbiAgICB0b2dnbGVBdHRyaWJ1dGVUb2tlbixcbiAgICBmaW5kQ2xvc2VzdEJ5Q2xhc3Ncbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vYXR0cmlidXRlcy5tanNcIjtcblxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgaHRtbDEsIGh0bWwyLCBodG1sMztcblxuZGVzY3JpYmUoJ0F0dHJpYnV0ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgaHRtbDEgPSBgPGRpdiBpZD1cInRlc3QxXCI+PC9kaXY+YDtcbiAgICAgICAgaHRtbDIgPSBgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPGRpdiBpZD1cInN1YjFcIj5cbiAgICAgICAgPGRpdiBpZD1cInN1YjJcIj5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJzdWIzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cInN1YjRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInN1YjVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuYDtcbiAgICAgICAgXG4gICAgICAgIGh0bWwzID0gYDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJ0ZXN0MVwiPlxuICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdWIxXCIgaWQ9XCJhMVwiIGNsYXNzPVwic3ViMVwiPlxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3ViMlwiIGlkPVwiYTJcIiBjbGFzcz1cInN1YjJcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdWIzXCIgaWQ9XCJhM1wiIGNsYXNzPVwic3ViM1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdWI0XCIgaWQ9XCJhNFwiIGNsYXNzPVwic3ViNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3ViNVwiIGlkPVwiYTVcIiBjbGFzcz1cInN1YjVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuYDtcblxuXG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnT2JqZWN0TGluaycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBjb25zdCBzeW1ib2wgPSBTeW1ib2woJ215dGVzdCcpO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGFuZGxlIG9iamVjdC1saW5rcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvYmogPSB7YTogMX07XG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgZXhwZWN0KGhhc09iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBhZGRUb09iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sLCBvYmopO1xuICAgICAgICAgICAgZXhwZWN0KGhhc09iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgbGV0IG8gPSBnZXRMaW5rZWRPYmplY3RzKGVsZW1lbnQsIHN5bWJvbCkubmV4dCgpO1xuICAgICAgICAgICAgZXhwZWN0KG8udmFsdWUpLnRvLmVxdWFsKG9iaik7XG5cbiAgICAgICAgICAgIHJlbW92ZU9iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sKTtcbiAgICAgICAgICAgIGV4cGVjdChoYXNPYmplY3RMaW5rKGVsZW1lbnQsIHN5bWJvbCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGdldExpbmtlZE9iamVjdHMoZWxlbWVudCwgc3ltYm9sKSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICB9KVxuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdmaW5kQ2xvc2VzdE9iamVjdExpbmsoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBjb25zdCBzeW1ib2wgPSBTeW1ib2woJ215dGVzdCcpO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIG9iamVjdGxpbmsnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBzdWI0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YjQnKVxuICAgICAgICAgICAgbGV0IHN1YjIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ViMicpXG5cbiAgICAgICAgICAgIGxldCBvYmogPSB7fTtcblxuICAgICAgICAgICAgZXhwZWN0KGhhc09iamVjdExpbmsoc3ViMiwgc3ltYm9sKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBhZGRUb09iamVjdExpbmsoc3ViMiwgc3ltYm9sLCBvYmopO1xuICAgICAgICAgICAgZXhwZWN0KGhhc09iamVjdExpbmsoc3ViMiwgc3ltYm9sKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBmaW5kQ2xvc2VzdE9iamVjdExpbmsoc3ViNCk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuaXMuaW5zdGFuY2VPZihIVE1MRGl2RWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJykpLnRvLmJlLmVxdWFsKCdzdWIyJyk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdBdHRyaWJ1dGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDM7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnZmluZCBjbG9zZXN0IEF0dHJpYnV0ZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ2E1JywgJ2RhdGEtbW9uc3Rlci1yb2xlJywgdW5kZWZpbmVkLCAnc3ViNSddLFxuICAgICAgICAgICAgICAgIFsnYTUnLCAnZGF0YS1tb25zdGVyLXJvbGUnLCAnc3ViMycsICdzdWIzJ10sXG4gICAgICAgICAgICAgICAgWydhNScsICdkYXRhLW1vbnN0ZXItcm9sZScsICdzdWIxJywgJ3N1YjEnXSxcbiAgICAgICAgICAgICAgICBbJ2E0JywgJ2RhdGEtbW9uc3Rlci1yb2xlJywgJ3N1YjEnLCAnc3ViMSddLFxuICAgICAgICAgICAgICAgIFsnYTMnLCAnZGF0YS1tb25zdGVyLXJvbGUnLCAnc3ViMScsICdzdWIxJ10sXG4gICAgICAgICAgICAgICAgWydhMicsICdkYXRhLW1vbnN0ZXItcm9sZScsIHVuZGVmaW5lZCwgJ3N1YjInXSxcbiAgICAgICAgICAgICAgICBbJ2E1JywgJ2RhdGEtbW9uc3Rlci1yb2xlJywgJ3N1YjUnLCAnc3ViNSddXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBkID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgICAgICBpdCgnZmluZENsb3Nlc3RCeUF0dHJpYnV0ZSgnICsgYSArICcsICcgKyBiICsgJywnICsgYyArICcpIHNob3VsZCByZXR1cm4gJyArIGQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSksIGIsIGMpLmdldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXJvbGUnKSkudG8uYmUuZXF1YWwoZCk7XG4gICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7IFxuICAgICAgICBcbiAgICAgICAgZGVzY3JpYmUoJ2ZpbmQgY2xvc2VzdCBFbGVtZW50IHdpdGggY2xhc3MnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ2E1JywgICdzdWIzJywgJ3N1YjMnXSxcbiAgICAgICAgICAgICAgICBbJ2E1JywgICdzdWIxJywgJ3N1YjEnXSxcbiAgICAgICAgICAgICAgICBbJ2E0JywgICdzdWIxJywgJ3N1YjEnXSxcbiAgICAgICAgICAgICAgICBbJ2EzJywgICdzdWIxJywgJ3N1YjEnXSxcbiAgICAgICAgICAgICAgICBbJ2E1JywgICdzdWI1JywgJ3N1YjUnXVxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBpdCgnZmluZENsb3Nlc3RCeUNsYXNzKCcgKyBhICsgJywgJyArIGIgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChmaW5kQ2xvc2VzdEJ5Q2xhc3MoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSksIGIpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkudG8uYmUuZXF1YWwoYyk7XG4gICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnQXR0cmlidXRlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBhdHJpYnV0ZUtleSA9ICdkYXRhLXRlc3QnO1xuXG4gICAgICAgIGl0KCd0b2dnbGVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHZhbHVlKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5oYXNBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGF0cmlidXRlS2V5LCAnYXBwbGUgYmFuYW5uYScpXG4gICAgICAgICAgICB0b2dnbGVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3BpbmFwcGxlJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgnYXBwbGUgYmFuYW5uYSBwaW5hcHBsZScpO1xuICAgICAgICAgICAgdG9nZ2xlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdwaW5hcHBsZScpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZXF1YWwoJ2FwcGxlIGJhbmFubmEnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnYWRkQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB2YWx1ZSknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuaGFzQXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBhZGRBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3BpbmFwcGxlJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgncGluYXBwbGUnKTtcbiAgICAgICAgICAgIGFkZEF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAnYmFuYW5uYScpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZXF1YWwoJ3BpbmFwcGxlIGJhbmFubmEnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgncmVtb3ZlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB2YWx1ZSknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXksICdhcHBsZSBiYW5hbm5hIGxlbW1vbicpXG4gICAgICAgICAgICByZW1vdmVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3BpbmFwcGxlJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgnYXBwbGUgYmFuYW5uYSBsZW1tb24nKTtcbiAgICAgICAgICAgIHJlbW92ZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAnYmFuYW5uYScpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZXF1YWwoJ2FwcGxlIGxlbW1vbicpO1xuXG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2NvbnRhaW5zQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB2YWx1ZSknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5zQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdwaW5hcHBsZScpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGF0cmlidXRlS2V5LCAnYXBwbGUgYmFuYW5uYScpXG4gICAgICAgICAgICBleHBlY3QoY29udGFpbnNBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3BpbmFwcGxlJykpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5zQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdiYW5hbm5hJykpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QoY29udGFpbnNBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ2FwcGxlJykpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnIHJlcGxhY2VBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHZhbHVlKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSwgJ2FwcGxlIGJhbmFubmEgdG9tYXRvJylcbiAgICAgICAgICAgIHJlcGxhY2VBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3RvbWF0bycsICdsZW1tb24nKTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSkpLnRvLmJlLmVxdWFsKCdhcHBsZSBiYW5hbm5hIGxlbW1vbicpO1xuICAgICAgICAgICAgcmVwbGFjZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAnYmFuYW5uYScsICdwZWFyJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgnYXBwbGUgcGVhciBsZW1tb24nKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnY2xlYXJBdHRyaWJ1dGVUb2tlbnMoZWxlbWVudCwga2V5KScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSwgJ2FwcGxlIGJhbmFubmEnKVxuICAgICAgICAgICAgY2xlYXJBdHRyaWJ1dGVUb2tlbnMoZWxlbWVudCwgYXRyaWJ1dGVLZXkpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZXF1YWwoJycpO1xuXG4gICAgICAgIH0pXG5cblxuICAgIH0pXG59KSIsICIndXNlIHN0cmljdCc7XG5cblxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmxldCBSZXNvdXJjZSxEZXJpdmVkUmVzb3VyY2U7XG5cblxuXG5kZXNjcmliZSgnUmVzb3VyY2UnLCBmdW5jdGlvbigpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFJlc291cmNlID0gbVsnUmVzb3VyY2UnXTtcblxuXG4gICAgICAgICAgICAgICAgRGVyaXZlZFJlc291cmNlID0gY2xhc3MgIGV4dGVuZHMgUmVzb3VyY2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtdXJsXCI6IFwiaHR0cDovL2V4YW1wbGUuY29tXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRVUkxBdHRyaWJ1dGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2RhdGEtdXJsJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdEZXJpdmVkUmVzb3VyY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZW9mIFJlc291cmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBEZXJpdmVkUmVzb3VyY2UoKSkudG8uYmUuYW4uaW5zdGFuY2VvZihSZXNvdXJjZSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtSZXNvdXJjZU1hbmFnZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlbWFuYWdlci5tanNcIjtcbmltcG9ydCB7Y2xlYW51cERPTUZyb21UZXN0aW5nLCBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3Rpbmd9IGZyb20gXCIuLi8uLi91dGlsL2NsZWFudXBkb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmRlc2NyaWJlKCdSZXNvdXJjZU1hbmFnZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgZmV0Y2hSZWZlcmVuY2UsIHJldHVyblN0YXR1cztcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgZ2xvYmFsVGhpc1snZmV0Y2gnXSA9IGZldGNoUmVmZXJlbmNlO1xuICAgICAgICBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKTtcbiAgICB9KVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nKClcblxuICAgICAgICByZXR1cm5TdGF0dXMgPSAyMDA7XG4gICAgICAgIGZldGNoUmVmZXJlbmNlID0gZ2xvYmFsVGhpc1snZmV0Y2gnXTtcbiAgICAgICAgZ2xvYmFsVGhpc1snZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgaWYgKCF1cmwpIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB1cmwnKVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IFwidGVzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHJldHVyblN0YXR1c1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICB9O1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCduZXcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgUmVzb3VyY2VNYW5hZ2VyKCkgc2hvdWxkIHJldHVybiBSZXNvdXJjZU1hbmFnZXIgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBuZXcgUmVzb3VyY2VNYW5hZ2VyKCk7XG4gICAgICAgICAgICBleHBlY3QoZCkudG8uYmUuaW5zdGFuY2VPZihSZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdsb2FkIHJlc291cmNlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbWFuYWdlcjtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG1hbmFnZXIgPSBuZXcgUmVzb3VyY2VNYW5hZ2VyKCk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2FkZCBzY3JpcHQgc2hvdWxkIGluc3RhbmNlIG9mIFJlc291cmNlTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZFNjcmlwdCgnL2V4YW1wbGUuanMnKSkudG8uYmUuaW5zdGFuY2VPZihSZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYWRkIHN0eWxlIHNob3VsZCBpbnN0YW5jZSBvZiBSZXNvdXJjZU1hbmFnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobWFuYWdlci5hZGRTdHlsZXNoZWV0KCcvc3R5bGUuanMnKSkudG8uYmUuaW5zdGFuY2VPZihSZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYWRkIGRhdGEgc2hvdWxkIGluc3RhbmNlIG9mIFJlc291cmNlTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZERhdGEoJy9kYXRhLmpzb24nKSkudG8uYmUuaW5zdGFuY2VPZihSZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnY29ubmVjdCByZXNvdXJjZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnYWRkIHNjcmlwdCBhbmQgY29ubmVjdCBzaG91bGQgaW5zdGFuY2Ugb2YgUmVzb3VyY2VNYW5hZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZFNjcmlwdCgnL2V4YW1wbGUuanMnKS5jb25uZWN0KCkpLnRvLmJlLmluc3RhbmNlT2YoUmVzb3VyY2VNYW5hZ2VyKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnYWRkIHN0eWxlIGFuZCBjb25uZWN0IHNob3VsZCBpbnN0YW5jZSBvZiBSZXNvdXJjZU1hbmFnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkU3R5bGVzaGVldCgnL3N0eWxlLmpzJykuY29ubmVjdCgpKS50by5iZS5pbnN0YW5jZU9mKFJlc291cmNlTWFuYWdlcik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ2FkZCBkYXRhIGFuZCBjb25uZWN0ICBzaG91bGQgaW5zdGFuY2Ugb2YgUmVzb3VyY2VNYW5hZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZERhdGEoJy9kYXRhLmpzb24nKS5jb25uZWN0KCkpLnRvLmJlLmluc3RhbmNlT2YoUmVzb3VyY2VNYW5hZ2VyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NoZWNrIGF2YWlsYWJpbGl0eSByZXNvdXJjZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnYWRkIHNjcmlwdCBhbmQgY2hlY2sgYXZhaWxhYmlsaXR5IHNob3VsZCByZXR1cm4gUHJvbWlzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobWFuYWdlci5hZGRTY3JpcHQoJy9leGFtcGxlLmpzJykuYXZhaWxhYmxlKCkpLnRvLmJlLmluc3RhbmNlT2YoUHJvbWlzZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ2FkZCBzdHlsZSBhbmQgY2hlY2sgYXZhaWxhYmlsaXR5IHNob3VsZCBzaG91bGQgcmV0dXJuIFByb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkU3R5bGVzaGVldCgnL3N0eWxlLmpzJykuYXZhaWxhYmxlKCkpLnRvLmJlLmluc3RhbmNlT2YoUHJvbWlzZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ2FkZCBkYXRhIGFuZCBjaGVjayBhdmFpbGFiaWxpdHkgIHNob3VsZCBzaG91bGQgcmV0dXJuIFByb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkRGF0YSgnL2RhdGEuanNvbicpLmF2YWlsYWJsZSgpKS50by5iZS5pbnN0YW5jZU9mKFByb21pc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NoZWNrIGF2YWlsYWJpbGl0eSBleGFtcGxlLmpzb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnYWRkIGRhdGEgYW5kIGNoZWNrIGNvbnRlbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIG1hbmFnZXIuYWRkRGF0YSgnaHR0cHM6Ly9leGFtcGxlLmNvbS9leGFtcGxlLmpzb24nKS5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbihyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKS5vdXRlckhUTUwpLmNvbnRhaW5zKCc+e1wiYVwiOlwidGVzdFwifTwvc2NyaXB0PjwvaGVhZD4nKTtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KVxuXG4gICAgfSk7XG5cblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsRnVuY3Rpb24gfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IEFUVFJJQlVURVBSRUZJWCwgQXNzZW1ibGVyIH07XG5cbi8qKlxuICogYXR0cmlidXRlIHByZWZpeFxuICpcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqL1xuY29uc3QgQVRUUklCVVRFUFJFRklYID0gXCJkYXRhLW1vbnN0ZXItXCI7XG5cbi8qKlxuICogQXNzZW1ibGVyIGNsYXNzXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5ET01cbiAqIEBzdW1tYXJ5IEFsbG93cyB5b3UgdG8gYnVpbGQgYW4gaHRtbCBmcmFnbWVudFxuICovXG5jbGFzcyBBc3NlbWJsZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7RG9jdW1lbnRGcmFnbWVudH0gZnJhZ21lbnRcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2Zcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGZ1bmN0aW9uIGlzIG5vdCBkZWZpbmVkXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihmcmFnbWVudCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5hdHRyaWJ1dGVQcmVmaXggPSBBVFRSSUJVVEVQUkVGSVg7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZShmcmFnbWVudCwgZ2V0R2xvYmFsRnVuY3Rpb24oXCJEb2N1bWVudEZyYWdtZW50XCIpKTtcblx0XHR0aGlzLmZyYWdtZW50ID0gZnJhZ21lbnQ7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuXHQgKiBAcmV0dXJucyB7QXNzZW1ibGVyfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0c2V0QXR0cmlidXRlUHJlZml4KHByZWZpeCkge1xuXHRcdHZhbGlkYXRlU3RyaW5nKHByZWZpeCk7XG5cdFx0dGhpcy5hdHRyaWJ1dGVQcmVmaXggPSBwcmVmaXg7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGdldEF0dHJpYnV0ZVByZWZpeCgpIHtcblx0XHRyZXR1cm4gdGhpcy5hdHRyaWJ1dGVQcmVmaXg7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtQcm94eU9ic2VydmVyfHVuZGVmaW5lZH0gZGF0YVxuXHQgKiBAcmV0dXJuIHtEb2N1bWVudEZyYWdtZW50fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKi9cblx0Y3JlYXRlRG9jdW1lbnRGcmFnbWVudChkYXRhKSB7XG5cdFx0aWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZGF0YSA9IG5ldyBQcm94eU9ic2VydmVyKHt9KTtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZUluc3RhbmNlKGRhdGEsIFByb3h5T2JzZXJ2ZXIpO1xuXHRcdGNvbnN0IGZyYWdtZW50ID0gdGhpcy5mcmFnbWVudC5jbG9uZU5vZGUodHJ1ZSk7XG5cdFx0cmV0dXJuIGZyYWdtZW50O1xuXHR9XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtBVFRSSUJVVEVQUkVGSVgsIEFzc2VtYmxlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vYXNzZW1ibGVyLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnQXNzZW1ibGVyJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGluaXRKU0RPTSgpO1xuICAgIH0pXG4gICAgZGVzY3JpYmUoJ2NyZWF0ZURvY3VtZW50RnJhZ21lbnQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gPGRpdj5PbmU8L2Rpdj48ZGl2PlR3bzwvZGl2PicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoJzxkaXY+T25lPC9kaXY+PGRpdj5Ud288L2Rpdj4nKTtcblxuICAgICAgICAgICAgbGV0IGYgPSBuZXcgQXNzZW1ibGVyKGZyYWdtZW50KTtcblxuICAgICAgICAgICAgLy8gY29udmVydCB0byBzdHJpbmdcbiAgICAgICAgICAgIGxldCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChmLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKS5jbG9uZU5vZGUodHJ1ZSkpO1xuXG4gICAgICAgICAgICBleHBlY3QoY29udGFpbmVyLmlubmVySFRNTCkudG8uYmUuZXF1YWwoJzxkaXY+T25lPC9kaXY+PGRpdj5Ud288L2Rpdj4nKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBEb2N1bWVudEZyYWdtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gbmV3IEFzc2VtYmxlcihkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuICAgICAgICAgICAgZXhwZWN0KGQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS50by5iZS5pbnN0YW5jZU9mKERvY3VtZW50RnJhZ21lbnQpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCduZXcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgUmVuZGVyZXIoKSBzaG91bGQgcmV0dXJuIEFzc2VtYmxlciBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IG5ldyBBc3NlbWJsZXIoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAgICAgICAgICAgIGV4cGVjdChkKS50by5iZS5pbnN0YW5jZU9mKEFzc2VtYmxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldEF0dHJpYnV0ZVByZWZpeCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiAnICsgQVRUUklCVVRFUFJFRklYLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IG5ldyBBc3NlbWJsZXIoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAgICAgICAgICAgIGV4cGVjdChkLmdldEF0dHJpYnV0ZVByZWZpeCgpKS50by5iZS5lcXVhbChBVFRSSUJVVEVQUkVGSVgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdzZXRBdHRyaWJ1dGVQcmVmaXgoKS5nZXRBdHRyaWJ1dGVQcmVmaXgoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gc2FtZSB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gbmV3IEFzc2VtYmxlcihkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuICAgICAgICAgICAgZXhwZWN0KGQuc2V0QXR0cmlidXRlUHJlZml4KCd0ZXN0MDEnKS5nZXRBdHRyaWJ1dGVQcmVmaXgoKSkudG8uYmUuZXF1YWwoJ3Rlc3QwMScpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgY2hhaSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2dldERvY3VtZW50fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7Y2xlYW51cERPTUZyb21UZXN0aW5nLCBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3Rpbmd9IGZyb20gXCIuLi8uLi91dGlsL2NsZWFudXBkb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5kZXNjcmliZSgnRE9NJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IEN1c3RvbUNvbnRyb2wsIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCwgVGVzdENvbXBvbmVudCwgZG9jdW1lbnQsIGpzZG9tRmxhZztcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIG0ucG9seWZpbGwoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBqc2RvbSBkb2VzIG5vdCBzdXBwb3J0IEVsZW1lbnRJbnRlcm5hbHNcbiAgICAgICAgICAgIGpzZG9tRmxhZyA9IG5hdmlnYXRvci51c2VyQWdlbnQuaW5jbHVkZXMoXCJqc2RvbVwiKTtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQgPSBtWydyZWdpc3RlckN1c3RvbUVsZW1lbnQnXTtcblxuXG4gICAgICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS9jdXN0b21jb250cm9sLm1qc1wiKS50aGVuKChtKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21Db250cm9sID0gbVsnQ3VzdG9tQ29udHJvbCddO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBUZXN0Q29tcG9uZW50ID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21Db250cm9sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0VGFnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJtb25zdGVyLWN1c3RvbWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUZXN0Q29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICB9ICk7XG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnQ3VzdG9tQ29udHJvbCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nKClcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIGNsZWFudXBET01Gcm9tVGVzdGluZygpO1xuXG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGN1c3RvbS1lbGVtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IG5ldyBUZXN0Q29tcG9uZW50KCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZSkudG8uYmUubm90Lm51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgndW5kZWZpbmVkJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2Nvbm5lY3QgZW1wdHkgZWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdkb2N1bWVudCBzaG91bGQgY29udGFpbiBtb25zdGVyLWN1c3RvbWNvbnRyb2wnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpLmFwcGVuZENoaWxkKGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpLmxlbmd0aCkuaXMuZXF1YWwoMSk7XG4gICAgICAgICAgICAgICAgLy8gbm8gZGF0YS1tb25zdGVyLW9iamVjdGxpbms9XCJTeW1ib2wobW9uc3RlclVwZGF0ZXIpXCIgYmVjYXVzZSBpdCBoYXMgbm90aGluZyB0byB1cGRhdGUgXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWN1c3RvbWNvbnRyb2wgZGF0YS1tb25zdGVyLWVycm9yPVwiRXJyb3I6IGh0bWwgaXMgbm90IHNldC5cIj48L21vbnN0ZXItY3VzdG9tY29udHJvbD4nKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGRlc2NyaWJlKCdPcHRpb25zIGNoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgIGl0KCdkZWxlZ2F0ZXNGb2N1cyBzaG91bGQgY2hhbmdlIGZyb20gdHJ1ZSB0byBmYWxzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIC8vICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKVxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldE9wdGlvbignZGVsZWdhdGVzRm9jdXMnKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgLy8gICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX09QVElPTlMsIEpTT04uc3RyaW5naWZ5KHtkZWxlZ2F0ZXNGb2N1czogZmFsc2V9KSk7XG4gICAgICAgIC8vICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0T3B0aW9uKCdkZWxlZ2F0ZXNGb2N1cycpKS50by5iZS5mYWxzZTtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgfSwgMTApO1xuICAgICAgICAvLyAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgIH0pLnRpbWVvdXQoMTAwKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gfSlcblxuICAgICAgICBkZXNjcmliZSgnVGVzdCBFbGVtZW50SW50ZXJuYWxzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgZm9ybTtcblxuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KCdmb3JtQXNzb2NpYXRlZCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChkLmNvbnN0cnVjdG9yLmZvcm1Bc3NvY2lhdGVkKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ2Zvcm0nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5mb3JtKS50by5iZS5pbnN0YW5jZW9mKEhUTUxGb3JtRWxlbWVudClcblxuICAgICAgICAgICAgICAgIC8vIGlmIChqc2RvbUZsYWcpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgZXhwZWN0KCgpID0+IGQuZm9ybSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICAgICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGV4cGVjdChkLmZvcm0pLnRvLmJlLmluc3RhbmNlb2YoSFRNTEZvcm1FbGVtZW50KVxuICAgICAgICAgICAgICAgIC8vIH1cblxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3ZhbHVlIGdldHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBkLnZhbHVlKS50by50aHJvdyhFcnJvcik7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgndmFsdWUgc2V0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IGQudmFsdWUgPSA0KS50by50aHJvdyhFcnJvcik7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2V0Rm9ybVZhbHVlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCduYW1lIGdldHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChkLm5hbWUpLnRvLmJlLm51bGw7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgndHlwZSBnZXR0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC50eXBlKS50by5iZS5lcXVhbCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgndmFsaWRpdHkgZ2V0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3ZhbGlkYXRpb25NZXNzYWdlIGdldHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3dpbGxWYWxpZGF0ZSBnZXR0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpdCgnY2hlY2tWYWxpZGl0eSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgncmVwb3J0VmFsaWRpdHkoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuXG4gICAgICAgICAgICB9KTtcblxuXG4gICAgICAgICAgICBpdCgnc2V0VmFsaWRpdHkoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5zZXRWYWxpZGl0eSh7J3ZhbHVlTWlzc2luZyc6IHRydWV9LCBcIm15IG1lc3NhZ2VcIikpLnRvLmJlLnVuZGVmaW5lZDtcblxuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxufSk7XG5cblxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7QVRUUklCVVRFX1RIRU1FX05BTUV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2NvbnN0YW50cy5tanNcIjtcblxuaW1wb3J0IHtmaW5kRG9jdW1lbnRUZW1wbGF0ZSwgVGVtcGxhdGV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3RlbXBsYXRlLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdUZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGluaXRKU0RPTSgpO1xuICAgIH0pXG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZD1cIm15dGVtcGxhdGVcIj48L3RlbXBsYXRlPmA7XG4gICAgfSlcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnY3JlYXRlIEhUTUxGcmFnbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgW1xuICAgICAgICAgICAgW1wiPGRpdj5maXJzdDwvZGl2PjxkaXY+c2Vjb25kPC9kaXY+XCJdLFxuICAgICAgICAgICAgW1wiPGRpdj5maXJzdDwvZGl2PlwiXSxcbiAgICAgICAgICAgIFtcIjxkaXY+Zmlyc3Q8L2Rpdj48cD5zZWNvbmQ8L3A+XCJdXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCduZXcgVGVtcGxhdGUoKS5nZXROZXdEb2N1bWVudEZyYWdtZW50QXNTdHJpbmcoKSBzaG91bGQgcmV0dXJuIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpO1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGE7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBuZXcgVGVtcGxhdGUodGVtcGxhdGUpO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udGFpbmVyLmlubmVySFRNTCkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY3JlYXRlIGluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnbmV3IFRlbXBsYXRlKCkgc2hvdWxkIHJldHVybiBkb2N1bWVudCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IG5ldyBUZW1wbGF0ZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpKTtcbiAgICAgICAgICAgIGV4cGVjdChkKS50by5iZS5pbnN0YW5jZU9mKFRlbXBsYXRlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmdldFRlbXBsYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnbmV3IFRlbXBsYXRlKCkuZ2V0VGVtcGxhdGVFbGVtZW50KCkgc2hvdWxkIHJldHVybiBIVE1MVGVtcGxhdGVFbGVtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gbmV3IFRlbXBsYXRlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJykpO1xuICAgICAgICAgICAgZXhwZWN0KGQuZ2V0VGVtcGxhdGVFbGVtZW50KCkpLnRvLmJlLmluc3RhbmNlT2YoSFRNTFRlbXBsYXRlRWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5maW5kRG9jdW1lbnRUZW1wbGF0ZSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHRocm93IFRlbXBsYXRlIG5vdCBmb3VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm5vd2F5XCIsIGRpdilcbiAgICAgICAgICAgIH0pLnRvLnRocm93cyhFcnJvcik7XG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmZpbmREb2N1bWVudFRlbXBsYXRlKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlc2NyaWJlKCdUZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgZmluZCB0ZW1wbGF0ZSBvdmVyIG93bmVyRG9jdW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgZGl2LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGxldCB0ID0gZmluZERvY3VtZW50VGVtcGxhdGUoXCJteXRlbXBsYXRlXCIsIGRpdik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHQpLmlzLmluc3RhbmNlb2YoVGVtcGxhdGUpO1xuXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnVGhtZW5lZCBUZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBtZW1BdHRyaWJ1dGVWYWx1ZTtcblxuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaWQ9XCJteXRlbXBsYXRlXCI+PHA+MTwvcD48L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaWQ9XCJteXRlbXBsYXRlLW1vbnN0ZXJcIj48cD4yPC9wPjwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZD1cIm15dGVtcGxhdGUtdGVzdHRoZW1lXCI+PHA+NDwvcD48L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaWQ9XCJteXByZWZpeC1teXRlbXBsYXRlLW1vbnN0ZXJcIj48cD4zPC9wPjwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgYDtcblxuICAgICAgICAgICAgICAgIGxldCBodG1sID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpO1xuICAgICAgICAgICAgICAgIGlmIChodG1sLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfVEhFTUVfTkFNRSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtQXR0cmlidXRlVmFsdWUgPSBodG1sLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVEhFTUVfTkFNRSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcblxuICAgICAgICAgICAgICAgIGxldCBodG1sID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGh0bWwuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9USEVNRV9OQU1FKSkge1xuICAgICAgICAgICAgICAgICAgICBodG1sLnJlbW92ZUF0dHJpYnV0ZShBVFRSSUJVVEVfVEhFTUVfTkFNRSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1lbUF0dHJpYnV0ZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9USEVNRV9OQU1FLCBtZW1BdHRyaWJ1dGVWYWx1ZSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBmaW5kIHRlbXBsYXRlIG92ZXIgb3duZXJEb2N1bWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItdGVtcGxhdGUtcHJlZml4JywgJ215cHJlZml4JylcbiAgICAgICAgICAgICAgICBkaXYucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgbGV0IHQxID0gZmluZERvY3VtZW50VGVtcGxhdGUoXCJteXRlbXBsYXRlXCIsIGRpdik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHQxKS5pcy5pbnN0YW5jZW9mKFRlbXBsYXRlKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodDEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLnRleHRDb250ZW50KS5pcy5lcXVhbChcIjNcIik7XG5cbiAgICAgICAgICAgICAgICBkaXYucmVtb3ZlQXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItdGVtcGxhdGUtcHJlZml4JylcbiAgICAgICAgICAgICAgICBsZXQgdDIgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm15dGVtcGxhdGVcIiwgZGl2KTtcbiAgICAgICAgICAgICAgICBleHBlY3QodDIpLmlzLmluc3RhbmNlb2YoVGVtcGxhdGUpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0Mi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkudGV4dENvbnRlbnQpLmlzLmVxdWFsKFwiMlwiKTtcblxuICAgICAgICAgICAgICAgIGh0bWwuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9USEVNRV9OQU1FLCd0ZXN0dGhlbWUnKTtcbiAgICAgICAgICAgICAgICBsZXQgYT0gaHRtbC5vdXRlckhUTUw7XG4gICAgICAgICAgICAgICAgbGV0IHQzID0gZmluZERvY3VtZW50VGVtcGxhdGUoXCJteXRlbXBsYXRlXCIsIGRpdik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHQzKS5pcy5pbnN0YW5jZW9mKFRlbXBsYXRlKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodDMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLnRleHRDb250ZW50KS5pcy5lcXVhbChcIjRcIik7XG5cblxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xufSk7IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtmaXJlRXZlbnQsIGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50LCBmaXJlQ3VzdG9tRXZlbnR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuZGVzY3JpYmUoJ0V2ZW50cycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGluaXRKU0RPTSgpO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnZmluZCBvYmplY3QnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyJywgJ2hlbGxvJyk7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBlID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoZXZlbnQsICdkYXRhLW1vbnN0ZXInKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3RlcicpKS50by5iZS5lcXVhbCgnaGVsbG8nKVxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBmaXJlRXZlbnQoZGl2LCAnY2xpY2snKTtcbiAgICAgICAgICAgIH0sIDApXG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdmaXJlRXZlbnQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgY2xpY2sgZXZlbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBmaXJlRXZlbnQoZGl2LCAnY2xpY2snKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgdG91Y2ggZXZlbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBmaXJlRXZlbnQoZGl2LCAndG91Y2gnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgdG91Y2ggZXZlbnQgb24gY29sbGVjdGlvbicsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2gnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uID0gZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RpdicpO1xuXG5cbiAgICAgICAgICAgIGZpcmVFdmVudChjb2xsZWN0aW9uLCAndG91Y2gnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgdG91Y2ggZXZlbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4gICAgICAgICAgICBsZXQgY29sbGVjdGlvbiA9IGRpdi5xdWVyeVNlbGVjdG9yQWxsKCdkaXYnKTtcblxuXG4gICAgICAgICAgICBmaXJlRXZlbnQoY29sbGVjdGlvbiwgJ3RvdWNoJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZmlyZUV2ZW50KHt9LCAndG91Y2gnKSkudG8udGhyb3coRXJyb3IpO1xuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2ZpcmVDdXN0b21FdmVudCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGZpcmUgYSBjbGljayBldmVudCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGZpcmVDdXN0b21FdmVudChkaXYsICdjbGljaycpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZpcmUgYSB0b3VjaCBldmVudCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2gnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGZpcmVDdXN0b21FdmVudChkaXYsICd0b3VjaCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZpcmUgYSB0b3VjaCBldmVudCBvbiBjb2xsZWN0aW9uMScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2gnLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlLmRldGFpbC5kZXRhaWwgIT09ICdoZWxsbyB3b3JsZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgnZXJyb3InKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uID0gZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RpdicpO1xuXG4gICAgICAgICAgICBmaXJlQ3VzdG9tRXZlbnQoY29sbGVjdGlvbiwgJ3RvdWNoJywgXCJoZWxsbyB3b3JsZFwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgdG91Y2ggZXZlbnQgb24gY29sbGVjdGlvbjInLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoJywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS5kZXRhaWwuYSAhPT0gJ2hlbGxvIHdvcmxkJykge1xuICAgICAgICAgICAgICAgICAgICBkb25lKCdlcnJvcicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb24gPSBkaXYucXVlcnlTZWxlY3RvckFsbCgnZGl2Jyk7XG5cbiAgICAgICAgICAgIGZpcmVDdXN0b21FdmVudChjb2xsZWN0aW9uLCAndG91Y2gnLCB7YTogXCJoZWxsbyB3b3JsZFwifSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZmlyZSBhIHRvdWNoIGV2ZW50JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb24gPSBkaXYucXVlcnlTZWxlY3RvckFsbCgnZGl2Jyk7XG5cblxuICAgICAgICAgICAgZmlyZUN1c3RvbUV2ZW50KGNvbGxlY3Rpb24sICd0b3VjaCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGZpcmVDdXN0b21FdmVudCh7fSwgJ3RvdWNoJykpLnRvLnRocm93KEVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBEYXRhc291cmNlIH0gZnJvbSBcIi4uL2RhdGFzb3VyY2UubWpzXCI7XG5cbmV4cG9ydCB7IERvbVN0b3JhZ2UgfTtcblxuLyoqXG4gKiBUaGUgRG9tU3RvcmFnZSBpcyBhIGNsYXNzIHRoYXQgc3RvcmVzIGRhdGEgaW4gbWVtb3J5LlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkRhdGEuRGF0YXNvdXJjZVxuICovXG5jbGFzcyBEb21TdG9yYWdlIGV4dGVuZHMgRGF0YXNvdXJjZSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIG9wdGlvbnMgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHRoZSBkYXRhc291cmNlLlxuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL2RvbS1zdG9yYWdlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkZWZhdWx0c1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZGVmYXVsdHMucmVhZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gZGVmYXVsdHMucmVhZC5zZWxlY3RvclxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZGVmYXVsdHMud3JpdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGRlZmF1bHRzLndyaXRlLnNlbGVjdG9yXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRyZWFkOiB7XG5cdFx0XHRcdHNlbGVjdG9yOiB1bmRlZmluZWQsXG5cdFx0XHR9LFxuXHRcdFx0d3JpdGU6IHtcblx0XHRcdFx0c2VsZWN0b3I6IHVuZGVmaW5lZCxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICogQHRocm93cyB7RXJyb3J9IFRoZSByZWFkIHNlbGVjdG9yIGlzIG5vdCBkZWZpbmVkXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBUaGVyZSBhcmUgbm8gc3RvcmFnZSBlbGVtZW50XG5cdCAqL1xuXHRyZWFkKCkge1xuXHRcdGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRPcHRpb24oXCJyZWFkLnNlbGVjdG9yXCIsIHVuZGVmaW5lZCk7XG5cdFx0aWYgKCFzZWxlY3Rvcikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlIHJlYWQgc2VsZWN0b3IgaXMgbm90IGRlZmluZWRcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3RvcmFnZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuXHRcdGlmICghc3RvcmFnZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgYXJlIG5vIHN0b3JhZ2UgZWxlbWVudFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgZGF0YSA9IEpTT04ucGFyc2Uoc3RvcmFnZS5pbm5lckhUTUwpO1xuXHRcdFx0XHR0aGlzLnNldChkYXRhKTtcblx0XHRcdFx0cmVzb2x2ZShkYXRhKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBUaGUgd3JpdGUgc2VsZWN0b3IgaXMgbm90IGRlZmluZWRcblx0ICogQHRocm93cyB7RXJyb3J9IFRoZXJlIGFyZSBubyBzdG9yYWdlIGVsZW1lbnRcblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRPcHRpb24oXCJ3cml0ZS5zZWxlY3RvclwiKTtcblx0XHRpZiAoIXNlbGVjdG9yKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgd3JpdGUgc2VsZWN0b3IgaXMgbm90IGRlZmluZWRcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3RvcmFnZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuXHRcdGlmICghc3RvcmFnZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgYXJlIG5vIHN0b3JhZ2UgZWxlbWVudFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0c3RvcmFnZS5pbm5lckhUTUwgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmdldCgpKTtcblx0XHRcdFx0cmVzb2x2ZShzdG9yYWdlKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7RG9tU3RvcmFnZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2UvZG9tLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdTZXJ2ZURvbXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBpdCgnc2hvdWxkIGluaXQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3QgZG9tID0gbmV3IERvbVN0b3JhZ2Uoe1xuICAgICAgICAgICAgXG4gICAgICAgIH0pXG5cbiAgICAgICAgZXhwZWN0KGRvbSkudG8uYmUubm90Lm51bGxcblxuXG4gICAgfSlcblxufSk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0xvY2FsU3RvcmFnZX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9sb2NhbHN0b3JhZ2UubWpzXCI7XG5pbXBvcnQge2NyZWF0ZVN0b3JhZ2V9IGZyb20gXCIuLi8uLi8uLi8uLi91dGlsL2xvY2Fsc3RvcmFnZS5tanNcIjtcblxuXG5sZXQgbG9jYWxTdG9yYWdlUmVmZXJlbmNlO1xuXG5kZXNjcmliZSgnTG9jYWxTdG9yYWdlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgZ2xvYmFsVGhpc1snbG9jYWxTdG9yYWdlJ10gPSBsb2NhbFN0b3JhZ2VSZWZlcmVuY2U7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsb2NhbFN0b3JhZ2VSZWZlcmVuY2UgPSBnbG9iYWxUaGlzWydsb2NhbFN0b3JhZ2UnXVxuICAgICAgICBnbG9iYWxUaGlzWydsb2NhbFN0b3JhZ2UnXSA9IGNyZWF0ZVN0b3JhZ2UoKTtcblxuICAgIH0pXG5cbiAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIExvY2FsU3RvcmFnZSAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTG9jYWxTdG9yYWdlKCdteWtleScpKS50by5iZS5pbnN0YW5jZW9mKExvY2FsU3RvcmFnZSlcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdydycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVhZCBzaG91bGQgcmV0dXJuIG9iamVjdCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdCBkcyA9IG5ldyBMb2NhbFN0b3JhZ2UoJ215a2V5JylcbiAgICAgICAgICAgIGRzLnJlYWQoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCd3cml0ZSBzaG91bGQgJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRzID0gbmV3IExvY2FsU3RvcmFnZSgnbXlrZXknKVxuICAgICAgICAgICAgZHMud3JpdGUoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG5cbn0pIiwgImZ1bmN0aW9uIGNyZWF0ZVN0b3JhZ2UoKSB7XG4gICAgXG4gICAgbGV0IFVOU0VUID0gU3ltYm9sKCk7XG4gICAgbGV0IHMgPSB7fSxcbiAgICAgICAgbm9vcENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICB9LFxuICAgICAgICBfaXRlbUluc2VydGlvbkNhbGxiYWNrID0gbm9vcENhbGxiYWNrO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsICdzZXRJdGVtJywge1xuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoaywgdiA9IFVOU0VUKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHYgPT09IFVOU0VUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEZhaWxlZCB0byBleGVjdXRlICdzZXRJdGVtJyBvbiAnU3RvcmFnZSc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSAxIHByZXNlbnQuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGsgPSBrICsgJyc7XG4gICAgICAgICAgICAgICAgaWYgKCFzLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAgICAgIF9pdGVtSW5zZXJ0aW9uQ2FsbGJhY2socy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzW2tdID0gdiArICcnO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCAnZ2V0SXRlbScsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gayA9PiB7XG4gICAgICAgICAgICAgICAgayA9IGsgKyAnJztcbiAgICAgICAgICAgICAgICBpZiAocy5oYXNPd25Qcm9wZXJ0eShrKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc1trXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsICdyZW1vdmVJdGVtJywge1xuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBrID0+IHtcbiAgICAgICAgICAgICAgICBrID0gayArICcnO1xuICAgICAgICAgICAgICAgIGlmIChzLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzW2tdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgJ2NsZWFyJywge1xuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgayBpbiBzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgc1trXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgJ2xlbmd0aCcsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMocykubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsIFwia2V5XCIsIHtcbiAgICAgICAgdmFsdWU6IGsgPT4ge1xuICAgICAgICAgICAgbGV0IGtleSA9IE9iamVjdC5rZXlzKHMpW2tdO1xuICAgICAgICAgICAgcmV0dXJuICgha2V5KSA/IG51bGwgOiBrZXk7XG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsICdpdGVtSW5zZXJ0aW9uQ2FsbGJhY2snLCB7XG4gICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIF9pdGVtSW5zZXJ0aW9uQ2FsbGJhY2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogdiA9PiB7XG4gICAgICAgICAgICBpZiAoIXYgfHwgdHlwZW9mIHYgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHYgPSBub29wQ2FsbGJhY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfaXRlbUluc2VydGlvbkNhbGxiYWNrID0gdjtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzO1xufVxuXG5cbmV4cG9ydCB7Y3JlYXRlU3RvcmFnZX07IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtTZXNzaW9uU3RvcmFnZX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9zZXNzaW9uc3RvcmFnZS5tanNcIjtcbmltcG9ydCB7Y3JlYXRlU3RvcmFnZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWwvbG9jYWxzdG9yYWdlLm1qc1wiO1xuXG5cbmxldCBzdG9yYWdlUmVmZXJlbmNlO1xuXG5kZXNjcmliZSgnU2Vzc2lvblN0b3JhZ2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBnbG9iYWxUaGlzWydzZXNzaW9uU3RvcmFnZSddID0gc3RvcmFnZVJlZmVyZW5jZTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHN0b3JhZ2VSZWZlcmVuY2UgPSBnbG9iYWxUaGlzWydzZXNzaW9uU3RvcmFnZSddXG4gICAgICAgIGdsb2JhbFRoaXNbJ3Nlc3Npb25TdG9yYWdlJ10gPSBjcmVhdGVTdG9yYWdlKCk7XG5cbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBTZXNzaW9uU3RvcmFnZSAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgU2Vzc2lvblN0b3JhZ2UoJ215a2V5JykpLnRvLmJlLmluc3RhbmNlb2YoU2Vzc2lvblN0b3JhZ2UpXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncncnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3JlYWQgc2hvdWxkIHJldHVybiBvYmplY3QnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3QgZHMgPSBuZXcgU2Vzc2lvblN0b3JhZ2UoJ215a2V5JylcbiAgICAgICAgICAgIGRzLnJlYWQoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCd3cml0ZSBzaG91bGQgJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRzID0gbmV3IFNlc3Npb25TdG9yYWdlKCdteWtleScpXG4gICAgICAgICAgICBkcy53cml0ZSgpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cblxufSkiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7U2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1NlcnZlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGl0KCdzaG91bGQgdHJhbnNmb3JtIGRhdGEnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IHdyaXRlQ2FsbGJhY2tDYWxsZWQgPSBmYWxzZVxuICAgICAgICBsZXQgcmVhZENhbGxiYWNrQ2FsbGVkID0gZmFsc2VcblxuICAgICAgICBjb25zdCBzZXJ2ZXIgPSBuZXcgU2VydmVyKHtcbiAgICAgICAgICAgIHdyaXRlOiB7XG4gICAgICAgICAgICAgICAgbWFwcGluZzoge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lcjogXCJjYWxsOm9uV3JpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbldyaXRlOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlQ2FsbGJhY2tDYWxsZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2hlYXRoaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVtbzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eXo6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBcImRhdGEueHl6XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWFkOiB7XG4gICAgICAgICAgICAgICAgbWFwcGluZzoge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lcjogXCJjYWxsOm9uUmVhZFwiLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uUmVhZDogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2FsbGJhY2tDYWxsZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcGF0aDogJ2RhdGEueHl6JyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBleHBlY3Qoc2VydmVyLnRyYW5zZm9ybVNlcnZlclBheWxvYWQoe2RlbW86IDEsIGRhdGE6IHt4eXo6IDJ9fSkpLnRvLmRlZXAuZXF1YWwoe2RlbW86IDEsIGRhdGE6IHt4eXo6IDJ9fSlcbiAgICAgICAgZXhwZWN0KHNlcnZlci5wcmVwYXJlU2VydmVyUGF5bG9hZCh7ZGVtbzogMSwgZGF0YToge3h5ejogMn19KSkudG8uZGVlcC5lcXVhbCh7ZGVtbzogMSwgZGF0YToge3h5ejogMn19KVxuXG5cbiAgICB9KVxuXG59KTtcbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtXZWJDb25uZWN0fSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvd2ViY29ubmVjdC5tanNcIjtcbmltcG9ydCB7aW5pdFdlYlNvY2tldH0gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWwvd2Vic29ja2V0Lm1qc1wiO1xuXG5jb25zdCB0ZXN0VXJsID0gXCJ3c3M6Ly93cy5wb3N0bWFuLWVjaG8uY29tL3Jhd1wiXG5cbi8vIGNvbnN0IGcgPSBnZXRHbG9iYWwoKTtcbi8vIGdbJ1dlYlNvY2tldCddID0gV1M7XG5cblxuZGVzY3JpYmUoJ1dlYnNvY2tldCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBkcyA9IHVuZGVmaW5lZFxuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRXZWJTb2NrZXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGlmIChkcykge1xuICAgICAgICAgICAgZHMuY2xvc2UoKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gd29ya2Fyb3VuZDogd2l0aG91dCB0aGlzLCB0aGUgbm9kZSB0ZXN0IHdpbGwgaGFuZyBcbiAgICAgICAgZm9yIChjb25zdCBzeW0gb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhkcykpIHtcbiAgICAgICAgICAgIGlmIChzeW0udG9TdHJpbmcoKSA9PT0gJ1N5bWJvbChjb25uZWN0aW9uKScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25uZWN0aW9uID0gZHNbc3ltXVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3ltMiBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGNvbm5lY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzeW0yLnRvU3RyaW5nKCkgPT09ICdTeW1ib2woY29ubmVjdGlvbiknKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzb2NrZXQgPSBjb25uZWN0aW9uW3N5bTJdPy5zb2NrZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc29ja2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzb2NrZXQ/LnRlcm1pbmF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQ/LlsndGVybWluYXRlJ10oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRvbmUoKVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZXQgY2xvbmUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgZHMgPSBuZXcgV2ViQ29ubmVjdCh0ZXN0VXJsKVxuICAgICAgICBjb25zdCBjbG9uZSA9IGRzLmdldENsb25lKClcblxuICAgICAgICBleHBlY3QoY2xvbmUpLnRvLmJlLmFuLmluc3RhbmNlb2YoV2ViQ29ubmVjdClcblxuXG4gICAgfSlcblxuICAgIGl0KCdzaG91bGQgdHJhbnNmb3JtIGRhdGEnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCB3cml0ZUNhbGxiYWNrQ2FsbGVkID0gZmFsc2VcbiAgICAgICAgbGV0IHJlYWRDYWxsYmFja0NhbGxlZCA9IGZhbHNlXG5cbiAgICAgICAgZHMgPSBuZXcgV2ViQ29ubmVjdCh7XG4gICAgICAgICAgICB1cmw6IHRlc3RVcmwsXG4gICAgICAgICAgICB3cml0ZToge1xuICAgICAgICAgICAgICAgIG1hcHBpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZXI6IFwiY2FsbDpvbldyaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgb25Xcml0ZTogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUNhbGxiYWNrQ2FsbGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNoZWF0aGluZzoge1xuICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbW86IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeHl6OiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogXCJkYXRhLnh5elwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVhZDoge1xuICAgICAgICAgICAgICAgIG1hcHBpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZXI6IFwiY2FsbDpvblJlYWRcIixcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvblJlYWQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENhbGxiYWNrQ2FsbGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBhdGg6ICdkYXRhLnh5eicsXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgZHMuY29ubmVjdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZHMuc2V0KHtcbiAgICAgICAgICAgICAgICBlbnZlbG9wOiB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiSGVsbG8gV29ybGRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRzLndyaXRlKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBkcy5zZXQoe30pXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRzLmdldCgpKS50by5iZS5kZWVwLmVxdWFsKHt9KTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG5cbiAgICAgICAgICAgICAgICAgICAgZHMucmVhZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRzLmdldCgpKS50by5iZS5kZWVwLmVxdWFsKHtlbnZlbG9wOnttZXNzYWdlOiBcIkhlbGxvIFdvcmxkXCJ9fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qod3JpdGVDYWxsYmFja0NhbGxlZCkudG8uYmUudHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHJlYWRDYWxsYmFja0NhbGxlZCkudG8uYmUudHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSwgMjAwKVxuXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgfSlcblxuXG4gICAgfSlcblxuICAgIGl0KCdzaG91bGQgY29ubmVjdCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGRzID0gbmV3IFdlYkNvbm5lY3Qoe1xuICAgICAgICAgICAgdXJsOiB0ZXN0VXJsLFxuICAgICAgICAgICAgcmVjb25uZWN0OiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRzLmNvbm5lY3QoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuXG5cbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCBzZW5kIG1lc3NhZ2UnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBkcyA9IG5ldyBXZWJDb25uZWN0KHtcbiAgICAgICAgICAgIHVybDogdGVzdFVybCxcbiAgICAgICAgICAgIHJlY29ubmVjdDoge1xuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBkcy5jb25uZWN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkcy5zZXQoe1xuICAgICAgICAgICAgICAgIGVudmVsb3A6IHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXCJIZWxsbyBXb3JsZFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZHMud3JpdGUoKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIGRzLnNldCh7fSlcbiAgICAgICAgICAgICAgICBleHBlY3QoZHMuZ2V0KCkpLnRvLmJlLmRlZXAuZXF1YWwoe30pO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgZHMucmVhZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZHMuZ2V0KCkpLnRvLmJlLmRlZXAuZXF1YWwoe2VudmVsb3A6e21lc3NhZ2U6IFwiSGVsbG8gV29ybGRcIn19KTtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSw1MDApXG4gICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuXG5cbiAgICB9KS50aW1lb3V0KDEwMDAwKTtcblxufSk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1Jlc3RBUEl9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpLm1qc1wiO1xuaW1wb3J0IHt2YWxpZGF0ZU9iamVjdH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZGVzY3JpYmUoJ1Jlc3RBUEknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgZmV0Y2hSZWZlcmVuY2U7XG4gICAgbGV0IHJldHVyblN0YXR1cztcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGdsb2JhbFRoaXNbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgIHJldHVyblN0YXR1cyA9IDIwMDtcbiAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxUaGlzWydmZXRjaCddO1xuICAgICAgICBnbG9iYWxUaGlzWydmZXRjaCddID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogXCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiByZXR1cm5TdGF0dXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfTtcblxuICAgIH0pXG5cbiAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIFJlc3RBUEkgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IFJlc3RBUEkoJ2h0dHBzOi8vbW9uc3RlcmpzLm9yZy9hc3NldHMvd29ybGQuanNvbicpKS50by5iZS5pbnN0YW5jZW9mKFJlc3RBUEkpXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncncnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3JlYWQgc2hvdWxkIHJldHVybiBvYmplY3QnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3QgZHMgPSBuZXcgUmVzdEFQSSh7dXJsOiAnaHR0cHM6Ly9tb25zdGVyanMub3JnL2Fzc2V0cy93b3JsZC5qc29uJ30pXG4gICAgICAgICAgICBkcy5yZWFkKCkudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZU9iamVjdChkYXRhKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnd3JpdGUgc2hvdWxkICcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdCBkcyA9IG5ldyBSZXN0QVBJKHtcbiAgICAgICAgICAgICAgICAgICAgcmVhZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnaHR0cHM6Ly9tb25zdGVyanMub3JnL2Fzc2V0cy93b3JsZC5qc29uJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB3cml0ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnaHR0cHM6Ly9tb25zdGVyanMub3JnL2Fzc2V0cy93b3JsZC5qc29uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdGVkU3RhdHVzOiBbOTldXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICAgICAgICBkcy53cml0ZSgpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShcInNob3VsZCBub3QgYmUgaGVyZVwiKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZSgpKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdydyB3aXRoIGVycm9ycycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVhZCBzaG91bGQgdGhyb3cgZXhjZXB0aW9uJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVyblN0YXR1cyA9IDQwMDsgLy8gZmV0Y2ggcmVzcG9uc2Ugd2l0aCA0MDBcblxuICAgICAgICAgICAgY29uc3QgZHMgPSBuZXcgUmVzdEFQSSh7dXJsOiAnaHR0cHM6Ly9tb25zdGVyanMub3JnL2Fzc2V0cy93b3JsZC5qc29uJ30pXG4gICAgICAgICAgICBkcy5yZWFkKCkudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKFwic2hvdWxkIG5vdCBydW4uXCIpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKCkpOyAvLyBzaG91bGQgdGhyb3cgZXhjZXB0aW9uIGJlY2F1c2UgcmV0dXJuU3RhdHVzPTQwMFxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnd3JpdGUgc2hvdWxkICcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm5TdGF0dXMgPSA0MDA7IC8vIGZldGNoIHJlc3BvbnNlIHdpdGggNDAwXG4gICAgICAgICAgICBjb25zdCBkcyA9IG5ldyBSZXN0QVBJKHt1cmw6ICdodHRwczovL21vbnN0ZXJqcy5vcmcvYXNzZXRzL3dvcmxkLmpzb24nfSwge3VybDogJ2h0dHBzOi8vbW9uc3RlcmpzLm9yZy9hc3NldHMvd29ybGQuanNvbid9KVxuICAgICAgICAgICAgZHMud3JpdGUoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlT2JqZWN0KGRhdGEpO1xuICAgICAgICAgICAgICAgIGRvbmUoXCJlcnJvclwiKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZSgpKTsgLy8gc2hvdWxkIHRocm93IGV4Y2VwdGlvbiBiZWNhdXNlIHJldHVyblN0YXR1cz00MDBcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cblxufSlcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7RGF0YXNvdXJjZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2UubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0RhdGFzb3VyY2UnLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgRGF0YXNvdXJjZSAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgRGF0YXNvdXJjZSgpKS50by5iZS5pbnN0YW5jZW9mKERhdGFzb3VyY2UpXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnT3B0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3NldE9wdGlvbiBzaG91bGQgY2hhbmdlIHZhbHVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZGF0YXNvdXJjZSA9IG5ldyBEYXRhc291cmNlKCk7XG4gICAgICAgICAgICBleHBlY3QoZGF0YXNvdXJjZS5nZXRPcHRpb24oJ2RlZmF1bHQnKSkudG8uYmUudW5kZWZpbmVkXG4gICAgICAgICAgICBkYXRhc291cmNlLnNldE9wdGlvbignZGVmYXVsdCcsIHRydWUpXG4gICAgICAgICAgICBleHBlY3QoZGF0YXNvdXJjZS5nZXRPcHRpb24oJ2RlZmF1bHQnKSkudG8uYmUudHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2V0T3B0aW9ucyBzaG91bGQgc2V0IGFsbCB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhc291cmNlID0gbmV3IERhdGFzb3VyY2UoKTtcbiAgICAgICAgICAgIGV4cGVjdChkYXRhc291cmNlLmdldE9wdGlvbignZGVmYXVsdCcpKS50by5iZS51bmRlZmluZWRcbiAgICAgICAgICAgIGRhdGFzb3VyY2Uuc2V0T3B0aW9ucyh7ZGVmYXVsdDogdHJ1ZX0pXG4gICAgICAgICAgICBleHBlY3QoZGF0YXNvdXJjZS5nZXRPcHRpb24oJ2RlZmF1bHQnKSkudG8uYmUudHJ1ZVxuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgncncnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGRhdGFzb3VyY2UgPSBuZXcgRGF0YXNvdXJjZSgpO1xuICAgICAgICBpdCgncmVhZCBzaG91bGQgdGhyb3cgZXhlcHRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZGF0YXNvdXJjZS5yZWFkKCkpLnRvLnRocm93KEVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpdCgnd3JpdGUgc2hvdWxkIHRocm93IGV4ZXB0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGRhdGFzb3VyY2UucmVhZCgpKS50by50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuICAgIFxuICAgIGRlc2NyaWJlKCdnZXQvc2V0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBkYXRhc291cmNlID0gbmV3IERhdGFzb3VyY2UoKTtcbiAgICAgICAgaXQoJ2dldCBzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCggZGF0YXNvdXJjZS5nZXQoKSkudG8uYmUuZXFsKHt9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpdCgnd3JpdGUgc2hvdWxkIHRocm93IGV4ZXB0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCBkYXRhc291cmNlLmdldCgpKS50by5iZS5lcWwoe30pO1xuICAgICAgICAgICAgZXhwZWN0KCBkYXRhc291cmNlLnNldCh7YTonbXl2YWx1ZSd9KSkudG8uYmUuaW5zdGFuY2VvZihEYXRhc291cmNlKTtcbiAgICAgICAgICAgIGV4cGVjdCggZGF0YXNvdXJjZS5nZXQoKSkudG8uYmUuZXFsKHthOidteXZhbHVlJ30pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuXG59KSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7YnVpbGRNYXB9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZGF0YS9idWlsZG1hcC5tanNcIjtcblxuXG5kZXNjcmliZSgnYnVpbGRNYXAnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgY29udmVydE1hcFJlc3VsdCA9IGZ1bmN0aW9uIChyKSB7XG4gICAgICAgIGlmIChyIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICByID0gT2JqZWN0LmZyb21FbnRyaWVzKHIpO1xuICAgICAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgICAgIHIgPSByLm1hcCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydE1hcFJlc3VsdChlKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIG9dIG9mIE9iamVjdC5lbnRyaWVzKHIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJba10gPSBjb252ZXJ0TWFwUmVzdWx0KG8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIGRlc2NyaWJlKCdidWlsZCBNYXAgd2l0aCBjYWxsYmFjaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ2RlZmluaXRpb24gc2hvdWxkIHJldHVybiBtYXAgd2l0aCBzdWIgYW5kIHBhcmVudCBrZXlzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgb2JqID0ge1xuICAgICAgICAgICAgICAgIFwiZGF0YVwiOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJDYXNzYW5kcmFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZW5yaWNobWVudFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAxLCBsYWJlbDogXCJYWFNcIiwgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDIsIGxhYmVsOiBcIlhTXCIsIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAzLCBsYWJlbDogXCJTXCIsIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiA0LCBsYWJlbDogXCJMXCIsIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiWWVzc2V5IVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlbnJpY2htZW50XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDEsIGxhYmVsOiBcIlhYU1wiLCBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQyd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMiwgbGFiZWw6IFwiWFNcIiwgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDMsIGxhYmVsOiBcIlNcIiwgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDQsIGxhYmVsOiBcIkxcIiwgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsZXQgY2FsbGJhY2sgPSBmdW5jdGlvbiAoc3ViamVjdCkge1xuICAgICAgICAgICAgICAgIGxldCBtID0gbmV3IE1hcDtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2ksIGJdIG9mIE9iamVjdC5lbnRyaWVzKHN1YmplY3QuZGF0YSkpIHtcblxuICAgICAgICAgICAgICAgICAgICBsZXQga2V5MSA9IGk7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaiwgY10gb2YgT2JqZWN0LmVudHJpZXMoYi5lbnJpY2htZW50LnZhcmlhbnRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleTIgPSBqO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCBkXSBvZiBPYmplY3QuZW50cmllcyhjLnByaWNlKSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleTMgPSBrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5uYW1lID0gYi5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQubGFiZWwgPSBjLmxhYmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuaWQgPSBba2V5MSwga2V5Miwga2V5M10uam9pbignLicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5zZXQoZC5pZCwgZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IG1hcCA9IGJ1aWxkTWFwKG9iaiwgY2FsbGJhY2ssICcke25hbWV9ICR7bGFiZWx9JywgJyR7aWR9JylcbiAgICAgICAgICAgIGxldCBpID0gY29udmVydE1hcFJlc3VsdChtYXApO1xuXG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoaSkpLnRvLmJlLmVxdWFsKCd7XCIwLjAuMFwiOlwiQ2Fzc2FuZHJhIFhYU1wiLFwiMC4wLjFcIjpcIkNhc3NhbmRyYSBYWFNcIixcIjAuMS4wXCI6XCJDYXNzYW5kcmEgWFNcIixcIjAuMS4xXCI6XCJDYXNzYW5kcmEgWFNcIixcIjAuMi4wXCI6XCJDYXNzYW5kcmEgU1wiLFwiMC4yLjFcIjpcIkNhc3NhbmRyYSBTXCIsXCIwLjMuMFwiOlwiQ2Fzc2FuZHJhIExcIixcIjAuMy4xXCI6XCJDYXNzYW5kcmEgTFwiLFwiMS4wLjBcIjpcIlllc3NleSEgWFhTXCIsXCIxLjAuMVwiOlwiWWVzc2V5ISBYWFNcIixcIjEuMS4wXCI6XCJZZXNzZXkhIFhTXCIsXCIxLjEuMVwiOlwiWWVzc2V5ISBYU1wiLFwiMS4yLjBcIjpcIlllc3NleSEgU1wiLFwiMS4yLjFcIjpcIlllc3NleSEgU1wiLFwiMS4zLjBcIjpcIlllc3NleSEgTFwiLFwiMS4zLjFcIjpcIlllc3NleSEgTFwifScpO1xuXG4gICAgICAgIH0pXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdidWlsZCBzdWJtYXAgd2l0aCAqJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnZGVmaW5pdGlvbiBzaG91bGQgcmV0dXJuIHtcIjEwXCI6XCJDYXNzYW5kcmEgMTBcIixcIjIwXCI6XCJZZXNzZXkhIDIwXCJ9JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgb2JqID0ge1xuICAgICAgICAgICAgICAgIFwiZGF0YVwiOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJDYXNzYW5kcmFcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiWWVzc2V5IVwiLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbGV0IG1hcCA9IGJ1aWxkTWFwKG9iaiwgJ2RhdGEuKicsICcke25hbWV9ICR7aWR9JywgJyR7aWR9JylcbiAgICAgICAgICAgIGxldCBpID0gY29udmVydE1hcFJlc3VsdChtYXApO1xuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGkpKS50by5iZS5lcXVhbCgne1wiMTBcIjpcIkNhc3NhbmRyYSAxMFwiLFwiMjBcIjpcIlllc3NleSEgMjBcIn0nKTtcblxuICAgICAgICB9KVxuICAgIH0pXG5cblxuICAgIGRlc2NyaWJlKCdidWlsZCBzdWJtYXAgd2l0aCAqKicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ2RlZmluaXRpb24gc2hvdWxkIHJldHVybiBNYXAnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgXCJkYXRhXCI6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIkNhc3NhbmRyYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlbnJpY2htZW50XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDEsIGxhYmVsOiBcIlhYU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnLCBpZDogMX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJywgaWQ6IDJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMiwgbGFiZWw6IFwiWFNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJywgaWQ6IDN9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQycsIGlkOiA0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDMsIGxhYmVsOiBcIlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJywgaWQ6IDV9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQycsIGlkOiA2fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDQsIGxhYmVsOiBcIkxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJywgaWQ6IDd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQycsIGlkOiA4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJZZXNzZXkhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVucmljaG1lbnRcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMSwgbGFiZWw6IFwiWFhTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQycsIGlkOiA5fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnLCBpZDogMTB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMiwgbGFiZWw6IFwiWFNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJywgaWQ6IDExfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnLCBpZDogMTJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMywgbGFiZWw6IFwiU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnLCBpZDogMTN9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQycsIGlkOiAxNH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnLCBpZDogMTV9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQycsIGlkOiAxNn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDQuMTIgXHUyMEFDJywgaWQ6IDE3fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsZXQgbWFwID0gYnVpbGRNYXAob2JqLCAnZGF0YS4qLmVucmljaG1lbnQudmFyaWFudHMuKi5wcmljZS4qJywgJyR7dmt9ICR7Xi5sYWJlbH0gJHteLl4ubmFtZX0nLCAnJHteLl4uc2t1fScpXG4gICAgICAgICAgICBsZXQgaSA9IGNvbnZlcnRNYXBSZXN1bHQobWFwKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShpKSkudG8uYmUuZXF1YWwoJ3tcImRhdGEuMC5lbnJpY2htZW50LnZhcmlhbnRzLjAucHJpY2UuMFwiOlwiMTIuMTIgXHUyMEFDIFhYUyBDYXNzYW5kcmFcIixcImRhdGEuMC5lbnJpY2htZW50LnZhcmlhbnRzLjAucHJpY2UuMVwiOlwiMTIuMTIgXHUyMEFDIFhYUyBDYXNzYW5kcmFcIixcImRhdGEuMC5lbnJpY2htZW50LnZhcmlhbnRzLjEucHJpY2UuMFwiOlwiMjIuMTIgXHUyMEFDIFhTIENhc3NhbmRyYVwiLFwiZGF0YS4wLmVucmljaG1lbnQudmFyaWFudHMuMS5wcmljZS4xXCI6XCIyMi4xMiBcdTIwQUMgWFMgQ2Fzc2FuZHJhXCIsXCJkYXRhLjAuZW5yaWNobWVudC52YXJpYW50cy4yLnByaWNlLjBcIjpcIjMyLjEyIFx1MjBBQyBTIENhc3NhbmRyYVwiLFwiZGF0YS4wLmVucmljaG1lbnQudmFyaWFudHMuMi5wcmljZS4xXCI6XCIzMi4xMiBcdTIwQUMgUyBDYXNzYW5kcmFcIixcImRhdGEuMC5lbnJpY2htZW50LnZhcmlhbnRzLjMucHJpY2UuMFwiOlwiNDIuMTIgXHUyMEFDIEwgQ2Fzc2FuZHJhXCIsXCJkYXRhLjAuZW5yaWNobWVudC52YXJpYW50cy4zLnByaWNlLjFcIjpcIjQyLjEyIFx1MjBBQyBMIENhc3NhbmRyYVwiLFwiZGF0YS4xLmVucmljaG1lbnQudmFyaWFudHMuMC5wcmljZS4wXCI6XCIxMi4xMiBcdTIwQUMgWFhTIFllc3NleSFcIixcImRhdGEuMS5lbnJpY2htZW50LnZhcmlhbnRzLjAucHJpY2UuMVwiOlwiMTIuMTIgXHUyMEFDIFhYUyBZZXNzZXkhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4xLnByaWNlLjBcIjpcIjIyLjEyIFx1MjBBQyBYUyBZZXNzZXkhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4xLnByaWNlLjFcIjpcIjIyLjEyIFx1MjBBQyBYUyBZZXNzZXkhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4yLnByaWNlLjBcIjpcIjMyLjEyIFx1MjBBQyBTIFllc3NleSFcIixcImRhdGEuMS5lbnJpY2htZW50LnZhcmlhbnRzLjIucHJpY2UuMVwiOlwiMzIuMTIgXHUyMEFDIFMgWWVzc2V5IVwiLFwiZGF0YS4xLmVucmljaG1lbnQudmFyaWFudHMuMy5wcmljZS4wXCI6XCI0Mi4xMiBcdTIwQUMgTCBZZXNzZXkhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4zLnByaWNlLjFcIjpcIjQyLjEyIFx1MjBBQyBMIFllc3NleSFcIixcImRhdGEuMS5lbnJpY2htZW50LnZhcmlhbnRzLjMucHJpY2UuMlwiOlwiNDQuMTIgXHUyMEFDIEwgWWVzc2V5IVwifScpO1xuXG4gICAgICAgIH0pXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdleGFtcGxlY29kZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGV4ZWN1dGUgZXhhbXBsZSBjb2RlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgb2JqID0ge1xuICAgICAgICAgICAgICAgIFwiZGF0YVwiOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJDYXNzYW5kcmFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRkcmVzc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdHJlZXRcIjogXCI0OTMtNDEwNSBWdWxwdXRhdGUgU3RyZWV0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjaXR5XCI6IFwiU2F1bXVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ6aXBcIjogXCI1MjYyOFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJIb2xseVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhZGRyZXNzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0cmVldFwiOiBcIjE3NjIgRWdldCBSZC5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNpdHlcIjogXCJTY2h3YWxiYWNoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ6aXBcIjogXCI5NTIzNDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDMwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiR3V5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFkZHJlc3NcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3RyZWV0XCI6IFwiOTU3LTM4OCBTb2xsaWNpdHVkaW4gQXZlbnVlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjaXR5XCI6IFwiUGFuY2hpXHUwMEUwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ6aXBcIjogXCI0MjA3MjlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbGV0IG1hcDtcbiAgICAgICAgICAgIG1hcCA9IGJ1aWxkTWFwKG9iaiwgJ2RhdGEuKicsICcke25hbWV9ICgke2FkZHJlc3MuemlwfSAke2FkZHJlc3MuY2l0eX0pJywgJ2lkJylcbiAgICAgICAgICAgIGV4cGVjdChtYXApLnRvLmJlLmluc3RhbmNlT2YoTWFwKTtcblxuICAgICAgICAgICAgbWFwID0gYnVpbGRNYXAob2JqLCAnZGF0YS4qJywgJyR7bmFtZX0gKCR7YWRkcmVzcy56aXB9ICR7YWRkcmVzcy5jaXR5fSknKVxuICAgICAgICAgICAgZXhwZWN0KG1hcCkudG8uYmUuaW5zdGFuY2VPZihNYXApO1xuXG4gICAgICAgICAgICBtYXAgPSBidWlsZE1hcChvYmosICdkYXRhLionLCAnJHtuYW1lfSAoJHthZGRyZXNzLnppcH0gJHthZGRyZXNzLmNpdHl9KScsICdpZCcsIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh2YWx1ZVsnaWQnXSA+PSAyMCkgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBleHBlY3QobWFwKS50by5iZS5pbnN0YW5jZU9mKE1hcCk7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdidWlsZG1hcCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBvYmoxID0ge1xuICAgICAgICAgICAgZGF0YXNldDoge1xuICAgICAgICAgICAgICAgIFwiMTAwODJcIjoge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgMVwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgMVwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjEwMDg0XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDJcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDJcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBNYXAgSW5zdGFuY2UuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGJ1aWxkTWFwKHt9LCAnJykpLnRvLmJlLmluc3RhbmNlT2YoTWFwKTtcbiAgICAgICAgfSk7XG5cblxuICAgICAgICBbXG4gICAgICAgICAgICBbb2JqMSwgJ2RhdGFzZXQuKicsICdhZGRyZXNzJywgJ3tcImRhdGFzZXQuMTAwODJcIjpcIkhlcmUgMVwiLFwiZGF0YXNldC4xMDA4NFwiOlwiSGVyZSAyXCJ9J10sXG4gICAgICAgICAgICBbb2JqMSwgJ3gnLCB1bmRlZmluZWQsICd7fSddLFxuICAgICAgICAgICAgW29iajEsICdkYXRhc2V0LionLCAnbmFtZScsICd7XCJkYXRhc2V0LjEwMDgyXCI6XCJUZXN0IDFcIixcImRhdGFzZXQuMTAwODRcIjpcIlRlc3QgMlwifSddLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2J1aWxkTWFwKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcsJyArIEpTT04uc3RyaW5naWZ5KGIpICsgJywnICsgSlNPTi5zdHJpbmdpZnkoYykgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBKU09OLnN0cmluZ2lmeShkKSArICcgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCB0ID0gYnVpbGRNYXAoYSwgYiwgYyk7XG4gICAgICAgICAgICAgICAgbGV0IG0gPSBKU09OLnN0cmluZ2lmeShjb252ZXJ0TWFwUmVzdWx0KHQpKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobSkudG8uYmUuZXF1YWwoZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xufSk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1RyYW5zZm9ybWVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvdHJhbnNmb3JtZXIubWpzXCI7XG5pbXBvcnQge0VtYmVkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXJzL2VtYmVkLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnVHJhbnNmb3JtZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuICAgICAgICBwcm9taXNlcy5wdXNoKGluaXRKU0RPTSgpKTtcbiAgICAgICAgaWYgKCFnbG9iYWxUaGlzWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpc1snY3J5cHRvJ10gPSBuZXcgbS5DcnlwdG8oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9XG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdUcmFuc2Zvcm1lci5ydW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ2RhdGV0aW1lZm9ybWF0JywgXCIyMDIzLTAyLTA0IDA4OjAyOjAxXCIsIFwiMDQuMDIuMjAyMywgMDg6MDI6MDFcIl0sXG4gICAgICAgICAgICBbJ2RhdGV0aW1lZm9ybWF0Omxvbmc6c2hvcnQnLCBcIjIwMjMtMDItMDQgMDg6MDI6MDFcIixcIjQuIEZlYnJ1YXIgMjAyMyB1bSAwODowMlwiXSxcbiAgICAgICAgICAgIFsnZGF0ZXRpbWVmb3JtYXQ6c2hvcnQ6c2hvcnQnLCBcIjIwMjMtMDItMDQgMDg6MDI6MDFcIiwgXCIwNC4wMi4yMywgMDg6MDJcIl0sXG4gICAgICAgICAgICBbJ2VxdWFsczphJywgXCJhXCIsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6YScsIFwiYlwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczozJywgMywgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczozJywgNiwgZmFsc2VdLFxuICAgICAgICAgICAgWydlcXVhbHM6b24nLCB0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOnRydWUnLCB0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOm9uJywgZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOnRydWUnLCBmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgWydlcXVhbHM6b2ZmJywgZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6ZmFsc2UnLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpvZmYnLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpmYWxzZScsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOjMnLCAzLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOjMnLCA2LCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczp1bmRlZmluZWQnLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6dW5kZWZpbmVkJywgMywgZmFsc2VdLFxuICAgICAgICAgICAgWydlcXVhbHM6bnVsbCcsIG51bGwsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6bnVsbCcsIDMsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOjMnLCA2LCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2N1cnJlbmN5JywgXCJFVVIwXCIsIFwiMCwwMFx1MDBBMFx1MjBBQ1wiXSxcbiAgICAgICAgICAgLy8gIFsnY3VycmVuY3k6MToyJywgXCJFVVIxNC4yNVwiLCBcIjE0LDJcdTAwQTBcdTIwQUNcIl0sICBub2RlanMgYW5kIGJyb3dzZXIgaGF2ZSBkaWZmZXJlbnQgcmVzdWx0cyAoaHR0cHM6Ly9naXRsYWIuc2NodWthaS5jb20vb3NzL2xpYnJhcmllcy9qYXZhc2NyaXB0L21vbnN0ZXIvLS9pc3N1ZXMvMTI0KSBcbiAgICAgICAgICAgIFsnY3VycmVuY3knLCBcIkVVUjE0LjI1XCIsIFwiMTQsMjVcdTAwQTBcdTIwQUNcIl0sXG4gICAgICAgICAgICBbJ2RhdGV0aW1lJywgXCIyMDIzLTAyLTE0IDE0OjEyOjEwXCIsIFwiMTQuMi4yMDIzLCAxNDoxMjoxMFwiXSxcbiAgICAgICAgICAgIFsnZGF0ZXRpbWUnLCBcIjIwMjMtMDItMTQgMDg6MDI6MDFcIiwgXCIxNC4yLjIwMjMsIDA4OjAyOjAxXCJdLFxuICAgICAgICAgICAgWydoYXMtZW50cmllcycsIHt9LCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2hhcy1lbnRyaWVzJywge2E6NH0sIHRydWVdLFxuICAgICAgICAgICAgWydoYXMtZW50cmllcycsIFtdLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2hhcy1lbnRyaWVzJywgXCJcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWydoYXMtZW50cmllcycsIFsxLDIsM10sIHRydWVdLFxuICAgICAgICAgICAgWydoYXMtZW50cmllcycsIFsxXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2hhcy1lbnRyaWVzJywgW1wiMVwiXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2hhcy1lbnRyaWVzJywgW3RydWVdLCB0cnVlXSxcbiAgICAgICAgICAgIFsnY29udGFpbnM6eCcsIFwiYXNkIHd4ZCBzZGZcIiwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2NvbnRhaW5zOngnLCBcImFzZCB3ZCBzZGZcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWydjb250YWluczpiJywgW1wiYVwiLFwiYlwiLFwiY1wiXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2NvbnRhaW5zOngnLCBbXCJhXCIsXCJiXCIsXCJjXCJdLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzdW5kZWZpbmVkJywgXCJhXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXN1bmRlZmluZWQnLCBudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzdW5kZWZpbmVkJywgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFsnaXNudWxsJywgXCJhXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXNudWxsJywgbnVsbCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2lzc2V0JywgbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWydpc3NldCcsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgWydpc3NldCcsIFwiXCIsIHRydWVdLFxuICAgICAgICAgICAgWydpc251bWJlcicsIFwiYVwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzbnVtYmVyJywgNCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2lzbnVtYmVyJywgNC41LCB0cnVlXSxcbiAgICAgICAgICAgIFsnaXNpbnRlZ2VyJywgNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzaW50ZWdlcicsIDQsIHRydWVdLFxuICAgICAgICAgICAgWydpc2Zsb2F0JywgNS42LCB0cnVlXSxcbiAgICAgICAgICAgIFsnaXNmbG9hdCcsIDUsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXNvYmplY3QnLCA0LCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzb2JqZWN0Jywge30sIHRydWVdLFxuICAgICAgICAgICAgWydpc2FycmF5JywgW3t9XSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2lzYXJyYXknLCBcImFcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWydub3QnLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ25vdCcsIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFsnbWFwOmE9NDpiPTU6Yz02JywgXCJhXCIsIFwiNFwiXSxcbiAgICAgICAgICAgIFsnZGF0ZScsIFwiMjAyMy0wMi0xNFwiLCBcIjE0LjIuMjAyM1wiXSxcbiAgICAgICAgICAgIFsneWVhcicsIFwiMjAyMy0wMi0xNFwiLCAyMDIzXSxcbiAgICAgICAgICAgIFsnbW9udGgnLCBcIjIwMjMtMDItMTRcIiwgMl0sXG4gICAgICAgICAgICBbJ2RheScsIFwiMjAyMy0wMi0xNFwiLCAxNF0sXG4gICAgICAgICAgICBbJ3dlZWtkYXknLCBcIjIwMjMtMDItMTRcIiwgMl0sXG4gICAgICAgICAgICBbJ21pbnV0ZXMnLCBcIjIwMjMtMDItMTQgMDY6MTI6MjFcIiwgMTJdLFxuICAgICAgICAgICAgWydzZWNvbmRzJywgXCIyMDIzLTAyLTE0IDA2OjEyOjIxXCIsIDIxXSxcbiAgICAgICAgICAgIFsnaG91cnMnLCBcIjIwMjMtMDItMTQgMDY6MTI6MjFcIiwgNl0sXG4gICAgICAgICAgICBbJ3RpbWUnLCBcIjIwMjMtMDItMTQgMDY6MTI6MjFcIiwgXCIwNjoxMjoyMVwiXSxcbiAgICAgICAgICAgIFsndGltZXN0YW1wJywgXCIyMDIzLTAyLTE0XCIsIDE2NzYzMzI4MDAwMDBdLFxuICAgICAgICAgICAgWydjb25jYXQ6YS5iLmM6dGVzdDphLmIuZCcsIHthOiB7Yjoge2M6IDQsIGQ6IDZ9fX0sIFwiNHRlc3Q2XCJdLFxuICAgICAgICAgICAgWydjb25jYXQ6YS5iLmM6XFxcXCBcXFxcIDphLmIuZCcsIHthOiB7Yjoge2M6IDQsIGQ6IDZ9fX0sIFwiNCAgNlwiXSxcbiAgICAgICAgICAgIFsnY29uY2F0OmEuYi5jOiw6YS5iLmQnLCB7YToge2I6IHtjOiA0LCBkOiA2fX19LCBcIjQsNlwiXSxcbiAgICAgICAgICAgIFsnY29uY2F0OmEuYi5jOiw6XFxcXCA6YS5iLmQnLCB7YToge2I6IHtjOiA0LCBkOiA2fX19LCBcIjQsIDZcIl0sXG4gICAgICAgICAgICBbJz8/OmEnLCBudWxsLCAnYSddLFxuICAgICAgICAgICAgWyc/PzphJywgdW5kZWZpbmVkLCAnYSddLFxuICAgICAgICAgICAgWyc/PzphJywgJ3RydWUnLCAndHJ1ZSddLFxuICAgICAgICAgICAgWyc/PzphJywgZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnIGlmOmE6ICcsIGZhbHNlLCB1bmRlZmluZWRdLCAvLyB3aXRob3V0IFxcXFxcbiAgICAgICAgICAgIFsnIGlmOmE6XFxcXCAnLCBmYWxzZSwgXCIgXCJdLFxuICAgICAgICAgICAgWycgaWY6YTpcXFxcICcsIHRydWUsIFwiYVwiXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDp1bmRlZmluZWQ6Ym9vbCcsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgWydkZWZhdWx0OnllcycsIG51bGwsICd5ZXMnXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDp5ZXMnLCB1bmRlZmluZWQsICd5ZXMnXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDoxOmJvb2wnLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgWydkZWZhdWx0Om9uOmJvb2wnLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgWydkZWZhdWx0OnRydWU6Ym9vbCcsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6eWVzOmJvb2wnLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgWydkZWZhdWx0OmZhbHNlOmJvb2wnLCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDoxOmludCcsIHVuZGVmaW5lZCwgMV0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6MTpzdHJpbmcnLCB1bmRlZmluZWQsICcxJ10sXG4gICAgICAgICAgICBbJ2ZpcnN0LWtleScsIHthOiAxLCBjOiAzLCBiOiAyfSwgMV0sXG4gICAgICAgICAgICBbJ2xhc3Qta2V5Jywge2E6IDEsIGM6IDMsIGI6IDJ9LCAzXSxcbiAgICAgICAgICAgIFsnbnRoLWxhc3Qta2V5OjAnLCB7YTogMSwgYzogMywgYjogMn0sIDNdLFxuICAgICAgICAgICAgWydudGgtbGFzdC1rZXk6MScsIHthOiAxLCBjOiAzLCBiOiAyfSwgMl0sXG4gICAgICAgICAgICBbJ250aC1sYXN0LWtleToyJywge2E6IDEsIGM6IDMsIGI6IDJ9LCAxXSxcbiAgICAgICAgICAgIFsnbnRoLWtleToyJywge2E6IDEsIGI6IDIsIGM6IDN9LCAzXSxcbiAgICAgICAgICAgIFsnbnRoLWtleTowJywge2M6IDMsIGE6IDEsIGI6IDJ9LCAxXSxcbiAgICAgICAgICAgIFsnbnRoLWtleToyJywge2E6IDEsIGM6IDMsIGI6IDJ9LCAzXSxcbiAgICAgICAgICAgIFsncHJlZml4OkhlbGxvXFxcXCAnLCAndGVzdCcsIFwiSGVsbG8gdGVzdFwiXSxcbiAgICAgICAgICAgIFsndG9qc29uJywge2E6IDR9LCBcIntcXFwiYVxcXCI6NH1cIl0sXG4gICAgICAgICAgICBbJ3ByZWZpeDphXFxcXFxcXFw6ICcsICd0ZXN0JywgXCJhXFxcXHRlc3RcIl0sXG4gICAgICAgICAgICBbJ3ByZWZpeDphXFxcXCAnLCAndGVzdCcsIFwiYSB0ZXN0XCJdLFxuICAgICAgICAgICAgWydzdGF0aWM6YWJjOmE6Yjp4JywgXCJ0ZXN0XCIsIFwiYWJjOmE6Yjp4XCJdLFxuICAgICAgICAgICAgWyd0b2xvd2VyY2FzZScsIFwiQTpiOkNzZTRcIiwgXCJhOmI6Y3NlNFwiXSxcbiAgICAgICAgICAgIFsndG91cHBlcicsIFwiQTpiOkNzZTRcIiwgXCJBOkI6Q1NFNFwiXSxcbiAgICAgICAgICAgIFsndG9zdHJpbmcnLCA1LCBcIjVcIl0sXG4gICAgICAgICAgICBbJ3Rvc3RyaW5nJywgWzEsIDIsIDMsIHt9XSwgXCIxLDIsMyxbb2JqZWN0IE9iamVjdF1cIl0sXG4gICAgICAgICAgICBbJ3RvaW50ZWdlcicsIFwiNVwiLCA1XSxcbiAgICAgICAgICAgIFsndHJpbScsIFwiIDUgXCIsIFwiNVwiXSxcbiAgICAgICAgICAgIFsndHJpbScsIFwiIGFcIiwgXCJhXCJdLFxuICAgICAgICAgICAgWyd0cmltJywgXCIgXCIsIFwiXCJdLFxuICAgICAgICAgICAgWydyYXd1cmxlbmNvZGUnLCBcIlx1MDBGQ1x1MDBGNlx1MDBFNFwiLCBcIiVDMyVCQyVDMyVCNiVDMyVBNFwiXSxcbiAgICAgICAgICAgIFsnY2FsbDp0ZXN0Y2FsbGJhY2s6NDo1OjYnLCBcInRlc3RcIiwgXCJ0ZXN0NDU2XCJdLFxuICAgICAgICAgICAgWydwbGFpbicsICd0PGJyPmVzdCcsIFwidGVzdFwiXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywgdHJ1ZSwgXCJhXCJdLFxuICAgICAgICAgICAgWydpZjphOmInLCAnb24nLCBcImFcIl0sXG4gICAgICAgICAgICBbJ2lmOmE6YicsICd0cnVlJywgXCJhXCJdLFxuICAgICAgICAgICAgWydpZjphOmInLCAnZmFsc2UnLCBcImJcIl0sXG4gICAgICAgICAgICBbJ2lmOmE6YicsIDksIFwiYVwiXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywgJycsIFwiYlwiXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywgdW5kZWZpbmVkLCBcImJcIl0sXG4gICAgICAgICAgICBbJ2lmOmE6YicsIGZhbHNlLCBcImJcIl0sXG4gICAgICAgICAgICBbJ3VjZmlyc3QnLCAnY2FyJywgXCJDYXJcIl0sXG4gICAgICAgICAgICBbJ3VjZmlyc3QnLCAnY0FyJywgXCJDQXJcIl0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6dGVzdCcsICdhJywgXCJhXCJdLFxuICAgICAgICAgICAgWydkZWZhdWx0OnRlc3QnLCB1bmRlZmluZWQsIFwidGVzdFwiXSxcbiAgICAgICAgICAgIFsnZnJvbWpzb24nLCAne30nLCB7fV0sXG4gICAgICAgICAgICBbJ2Zyb21qc29uJywgJ3tcImFcIjoxfScsIHthOiAxfV0sXG4gICAgICAgICAgICBbJ3Vjd29yZHMnLCAnY0FyIHJ1bnMnLCBcIkNBciBSdW5zXCJdLFxuICAgICAgICAgICAgWyd0b2ludGVnZXInLCAnNicsIDZdLFxuICAgICAgICAgICAgWydsZW5ndGgnLCAndGVzdCcsIDRdLFxuICAgICAgICAgICAgWyd0by1iYXNlNjQnLCAnSGVsbG8gV29ybGQhJywgXCJTR1ZzYkc4Z1YyOXliR1FoXCJdLFxuICAgICAgICAgICAgWydmcm9tLWJhc2U2NCcsICdTR1ZzYkc4Z1YyOXliR1FoJywgXCJIZWxsbyBXb3JsZCFcIl0sXG4gICAgICAgICAgICBbJ3RvLWJhc2U2NCcsICd0ZXN0JywgXCJkR1Z6ZEE9PVwiXSxcbiAgICAgICAgICAgIFsnZnJvbS1iYXNlNjQnLCBcImRHVnpkQT09XCIsICd0ZXN0J10sXG4gICAgICAgICAgICBbJ3ByZWZpeDphJywgJ3Rlc3QnLCBcImF0ZXN0XCJdLFxuICAgICAgICAgICAgWydzdWZmaXg6YScsICd0ZXN0JywgXCJ0ZXN0YVwiXSxcbiAgICAgICAgICAgIFsnaW5kZXg6YScsIHthOiA0fSwgNF0sXG4gICAgICAgICAgICBbJ2luZGV4OjInLCBbMiwgNCwgN10sIDddLFxuICAgICAgICAgICAgWydpbmRleDp4OnRlc3QnLCBbMiwgNCwgN10sICd0ZXN0J10sXG4gICAgICAgICAgICBbJ3BhdGg6YS5iLmMnLCB7YToge2I6IHtjOiA0fX19LCA0XSxcbiAgICAgICAgICAgIFsncGF0aDphLmIuZCcsIHthOiB7Yjoge2M6IDR9fX0sIHVuZGVmaW5lZF0sXG4gICAgICAgICAgICBbJ2luZGV4OmEnLCBuZXcgTWFwKCkuc2V0KCdhJywgNSksIDVdLFxuICAgICAgICAgICAgWydzdWJzdHJpbmc6Mjo0JywgJ2FiY2RlZmdoaWprbG1ub3AnLCAnY2RlZiddLFxuICAgICAgICAgICAgWydub3AnLCAnYWJjZGVmZ2hpamtsbW5vcCcsICdhYmNkZWZnaGlqa2xtbm9wJ10sXG4gICAgICAgICAgICBbJ3NldC10b2dnbGU6YycsICdhIGIgYycsICdhIGInXSxcbiAgICAgICAgICAgIFsnc2V0LXRvZ2dsZTpjJywgJ2EgYicsICdhIGIgYyddLFxuICAgICAgICAgICAgWydzZXQtc2V0OmMnLCAnYSBiJywgJ2EgYiBjJ10sXG4gICAgICAgICAgICBbJ3NldC1zZXQ6YycsICdhIGIgYycsICdhIGIgYyddLFxuICAgICAgICAgICAgWydzZXQtcmVtb3ZlOmMnLCAnYSBiIGMnLCAnYSBiJ10sXG4gICAgICAgICAgICBbJ3NldC10b2dnbGU6YzosJywgJ2EsYixjJywgJ2EsYiddLFxuICAgICAgICAgICAgWydzZXQtdG9nZ2xlOmM6LCcsICdhLGInLCAnYSxiLGMnXSxcbiAgICAgICAgICAgIFsnc2V0LXNldDpjOiwnLCAnYSxiJywgJ2EsYixjJ10sXG4gICAgICAgICAgICBbJ3NldC1zZXQ6YzosJywgJ2EsYixjJywgJ2EsYixjJ10sXG4gICAgICAgICAgICBbJ3NldC1yZW1vdmU6YzosJywgJ2EsYixjJywgJ2EsYiddLFxuICAgICAgICAgICAgWydzZXQtdG9nZ2xlOmMsZDosJywgJ2EsYixjJywgJ2EsYixkJ10sXG4gICAgICAgICAgICBbJ3NldC10b2dnbGU6YyxkOiwnLCAnYSxiLGMsZCcsICdhLGInXSxcbiAgICAgICAgICAgIFsnc2V0LXRvZ2dsZTpjLGQ6LCcsICdhLGInLCAnYSxiLGMsZCddLFxuICAgICAgICAgICAgWydzZXQtc2V0OmMsZDosJywgJ2EsYicsICdhLGIsYyxkJ10sXG4gICAgICAgICAgICBbJ3NldC1zZXQ6YyxkOiwnLCAnYSxiLGMnLCAnYSxiLGMsZCddLFxuICAgICAgICAgICAgWydzZXQtcmVtb3ZlOmM6LCcsICdhLGIsYycsICdhLGInXSxcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnVHJhbnNmb3JtZXIucnVuKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcpLnJ1bignICsgSlNPTi5zdHJpbmdpZnkoYikgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBKU09OLnN0cmluZ2lmeShjKSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCB0ID0gbmV3IFRyYW5zZm9ybWVyKGEpO1xuXG4gICAgICAgICAgICAgICAgdC5zZXRDYWxsYmFjaygndGVzdGNhbGxiYWNrJywgZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgKyBiICsgYyArIGQ7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCByID0gdC5ydW4oYik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHIpLnRvLmJlLmVxbChjLCBcIlRyYW5zZm9ybWVyLnJ1bihcIiArIEpTT04uc3RyaW5naWZ5KGEpICsgXCIpLnJ1bihcIiArIEpTT04uc3RyaW5naWZ5KGIpICsgXCIpIHNob3VsZCByZXR1cm4gXCIgKyBKU09OLnN0cmluZ2lmeShjKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdUcmFuc2Zvcm1lci5ydW4oKSB0aHJvd3MgRXJyb3InLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0b2xvd2VyY2FzZScsIFtdXSxcbiAgICAgICAgICAgIFsndG9sb3dlcmNhc2UnLCB7fV0sXG4gICAgICAgICAgICBbJ3RvbG93ZXJjYXNlJywgNC41XSxcbiAgICAgICAgICAgIFsndG91cHBlcicsIHRydWVdLFxuICAgICAgICAgICAgWyd0b3VwcGVyJywgNV0sXG4gICAgICAgICAgICBbJ3RvaW50ZWdlcicsIFwiYVwiXSxcbiAgICAgICAgICAgIFsndHJpbScsIDVdLFxuICAgICAgICAgICAgWyd0cmltJywgdHJ1ZV0sXG4gICAgICAgICAgICBbJ3RyaW0nLCB7fV0sXG4gICAgICAgICAgICBbJ3RyaW0nLCBbXV0sXG4gICAgICAgICAgICBbJ3Jhd3VybGVuY29kZScsIFtdXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywge31dLFxuICAgICAgICAgICAgWyd1Y3dvcmRzJywge31dLFxuICAgICAgICAgICAgWyd1Y3dvcmRzJywgZmFsc2VdLFxuICAgICAgICAgICAgWyd1Y3dvcmRzJywgNF0sXG4gICAgICAgICAgICBbJ3BhdGg6YS5iLmMnLCBcIlwiLCA0XSxcbiAgICAgICAgICAgIFsndG9pbnRlZ2VyJywge31dLFxuICAgICAgICAgICAgWydiYXNlNjQnLCB7fV0sXG4gICAgICAgICAgICBbJ2Zyb21qc29uJywgJyddLFxuICAgICAgICAgICAgWydwcmVmaXgnLCB7fV0sXG4gICAgICAgICAgICBbJ3N1ZmZpeCcsIHt9XSxcbiAgICAgICAgICAgIFsnaW5kZXgnLCBcInRlc3RcIl0sXG4gICAgICAgICAgICBbJ3h4eHh4eCcsIFwidGVzdFwiXSwgLy8gdW5zdXBwb3J0ZWQgY29tbWFuZFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdUcmFuc2Zvcm1lci5ydW4oJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykucnVuKCcgKyBKU09OLnN0cmluZ2lmeShiKSArICcpIHNob3VsZCB0aHJvdyBFcnJvciAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBuZXcgVHJhbnNmb3JtZXIoYSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHQucnVuKGIpKS50by50aHJvdyhFcnJvcilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ25ldyBUcmFuc2Zvcm1lcigpLnJ1bihcInVuaXFpZFwiKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gU3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHQgPSBuZXcgVHJhbnNmb3JtZXIoJ3VuaXFpZCcpO1xuICAgICAgICAgICAgZXhwZWN0KHQucnVuKFwiXCIpKS50by5iZS5hKCdzdHJpbmcnKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCduZXcgVHJhbnNmb3JtZXIoKS5ydW4oXCJkZWZhdWx0OmV5SmlJam94ZlE9PTpvYmplY3RcIiknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIE9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB0ID0gbmV3IFRyYW5zZm9ybWVyKCdkZWZhdWx0OmV5SmlJam94ZlE9PTpvYmplY3QnKTtcbiAgICAgICAgICAgIGV4cGVjdCh0LnJ1bih1bmRlZmluZWQpKS50by5lcWwoe2I6IDF9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ25ldyBUcmFuc2Zvcm1lcigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIFRyYW5zZm9ybWVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBUcmFuc2Zvcm1lcihcIlwiKSkudG8uaW5zdGFuY2VPZihUcmFuc2Zvcm1lcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgVHJhbnNmb3JtZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFRyYW5zZm9ybWVyKFwic3VmZml4OmFiY1wiKSkudG8uaW5zdGFuY2VPZihUcmFuc2Zvcm1lcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdmYWxzZSBhcyBhcmd1bWVudCBzaG91bGQgdGhyb3cgVHlwZUVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBuZXcgVHJhbnNmb3JtZXIoZmFsc2UpXG4gICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnb2JqZWN0IGFzIGFyZ3VtZW50IHNob3VsZCB0aHJvdyBUeXBlRXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIG5ldyBUcmFuc2Zvcm1lcih7fSlcbiAgICAgICAgICAgIH0pLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnaTE4bicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgaHRtbDEgPSBgXG48ZGl2IGlkPVwibW9jay10cmFuc2xhdGlvbnNcIj48L2Rpdj5cbjxzY3JpcHQgdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIiBkYXRhLW1vbnN0ZXItcm9sZT1cInRyYW5zbGF0aW9uc1wiPlxuICAgIHtcbiAgICAgICAgXCJ0ZXN0MVwiOiBcInh5elwiLFxuICAgICAgICBcInRlc3QzXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ4eXpcIlxuICAgICAgICB9XG4gICAgfVxuPC9zY3JpcHQ+ICBcbmA7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoZG9uZSkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgICAgIGxldCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2stdHJhbnNsYXRpb25zJyk7XG4gICAgICAgICAgICBFbWJlZC5hc3NpZ25UcmFuc2xhdGlvbnNUb0VsZW1lbnQoZWxlbSkudGhlbigobykgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnaTE4bjp0ZXN0MScsIFwiXCIsIFwieHl6XCJdLFxuICAgICAgICAgICAgWydpMThuOicsIFwidGVzdDFcIiwgXCJ4eXpcIl0sIC8vIGtleSBieSB2YWx1ZVxuICAgICAgICAgICAgWydpMThuOjonLCBcInRlc3QxXCIsIFwieHl6XCJdLCAvLyBrZXkgYnkgdmFsdWUgbm8gZGVmYXVsdFxuICAgICAgICAgICAgWydpMThuOjplZWUnLCBcInRlc3QyXCIsIFwiZWVlXCJdLCAvLyBrZXkgYnkgdmFsdWUgd2l0aCBkZWZhdWx0XG4gICAgICAgICAgICBbJ2kxOG46OmRkZCcsIFwidGVzdDJcIiwgXCJkZGRcIl0sIC8vIGtleSBieSB2YWx1ZSBhbmQgZGVmYXVsdFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgdHJhbnNmb3JtKCcgKyBhICsgJykucnVuKCcgKyBiICsgJykgcmV0dXJuICcgKyBKU09OLnN0cmluZ2lmeShjKSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBuZXcgVHJhbnNmb3JtZXIoYSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHQucnVuKGIpKS50by5iZS5lcWwoYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9KVxuXG5cbn0pOyIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7ZGlmZn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kYXRhL2RpZmYubWpzXCI7XG5pbXBvcnQge1F1ZXVlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3F1ZXVlLm1qc1wiO1xuXG5kZXNjcmliZSgnRGlmZicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdEaWZmIHNwZWNpYWwgY2FzZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgdmFyIG9iajEsIG9iajI7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBvYmoxID0ge1xuICAgICAgICAgICAgICAgIFwiY291bnRcIjogMSxcbiAgICAgICAgICAgICAgICBcInJlYXNvblwiOiBudWxsLFxuICAgICAgICAgICAgICAgIFwiaW5mb1wiOiBcInRlc3RcIixcbiAgICAgICAgICAgICAgICBcImV4Y2hhbmdlXCI6IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgb2JqMiA9IHtcbiAgICAgICAgICAgICAgICBcImNvdW50XCI6IDIsXG4gICAgICAgICAgICAgICAgXCJyZWFzb25cIjogbnVsbCxcbiAgICAgICAgICAgICAgICBcImluZm9cIjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIFwiZXhjaGFuZ2VcIjogW11cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ0RpZmYgdmFsdWUgd2l0aCBudWxsICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gZGlmZihvYmoxLCBvYmoyKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShkKSkuaXMuZXF1YWwoJ1t7XCJvcGVyYXRvclwiOlwidXBkYXRlXCIsXCJwYXRoXCI6W1wiY291bnRcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6MSxcInR5cGVcIjpcIm51bWJlclwifSxcInNlY29uZFwiOntcInZhbHVlXCI6MixcInR5cGVcIjpcIm51bWJlclwifX0se1wib3BlcmF0b3JcIjpcImRlbGV0ZVwiLFwicGF0aFwiOltcImluZm9cIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6XCJ0ZXN0XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIn19XScpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnRGlmZiBpZGVudGljYWwgdmFsdWUgd2l0aCBudWxsICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gZGlmZihvYmoxLCBvYmoxKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShkKSkuaXMuZXF1YWwoJ1tdJyk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG4gICAgY29uc3QgZGF0ZTEgPSBuZXcgRGF0ZTtcblxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0RhdGUvcGFyc2VcbiAgICBjb25zdCBkYXRlMiA9IERhdGUucGFyc2UoJzAxIEphbiAxOTcwIDAwOjAwOjAwIEdNVCcpO1xuICAgIGNvbnN0IGRhdGUzID0gRGF0ZS5wYXJzZSgnMDQgRGVjIDE5OTUgMDA6MTI6MDAgR01UJyk7IC8vIE51bWJlclxuICAgIGNvbnN0IGRhdGU0ID0gRGF0ZS5wYXJzZSgnMDQgRGVjIDE5OTUgMDA6MTI6MDEgR01UJyk7IC8vIE51bWJlclxuXG4gICAgY29uc3QgZGF0ZTUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKCcwNCBEZWMgMTk5NSAwMDoxMjowMSBHTVQnKSk7IC8vIERhdGVcbiAgICBjb25zdCBkYXRlNiA9IG5ldyBEYXRlKERhdGUucGFyc2UoJzA0IERlYyAxOTk1IDAwOjEyOjAyIEdNVCcpKTsgLy8gRGF0ZVxuXG4gICAgW1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IG5ldyBRdWV1ZSgpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwiYWRkXCIsXCJwYXRoXCI6W1wiYVwiXSxcInNlY29uZFwiOntcInZhbHVlXCI6e1wiZGF0YVwiOltdfSxcInR5cGVcIjpcIm9iamVjdFwiLFwiaW5zdGFuY2VcIjpcIlF1ZXVlXCJ9fV0nXG4gICAgICAgIF0sXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjogMVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYzoge1xuICAgICAgICAgICAgICAgICAgICBkOiAyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGU6IDNcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGY6IHtcbiAgICAgICAgICAgICAgICAgICAgZDogMlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJkZWxldGVcIixcInBhdGhcIjpbXCJhXCIsXCJiXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOjEsXCJ0eXBlXCI6XCJudW1iZXJcIn19LHtcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJhXCIsXCJlXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjozLFwidHlwZVwiOlwibnVtYmVyXCJ9fSx7XCJvcGVyYXRvclwiOlwiZGVsZXRlXCIsXCJwYXRoXCI6W1wiY1wiXSxcImZpcnN0XCI6e1widmFsdWVcIjp7XCJkXCI6Mn0sXCJ0eXBlXCI6XCJvYmplY3RcIixcImluc3RhbmNlXCI6XCJPYmplY3RcIn19LHtcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJmXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjp7XCJkXCI6Mn0sXCJ0eXBlXCI6XCJvYmplY3RcIixcImluc3RhbmNlXCI6XCJPYmplY3RcIn19XSdcbiAgICAgICAgXSxcblxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogZGF0ZTEsXG4gICAgICAgICAgICAgICAgYzogZGF0ZTRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogZGF0ZTIsXG4gICAgICAgICAgICAgICAgYjogZGF0ZTNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJ1cGRhdGVcIixcInBhdGhcIjpbXCJhXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOlwiJyArIGRhdGUxLnRvSVNPU3RyaW5nKCkgKyAnXCIsXCJ0eXBlXCI6XCJvYmplY3RcIixcImluc3RhbmNlXCI6XCJEYXRlXCJ9LFwic2Vjb25kXCI6e1widmFsdWVcIjowLFwidHlwZVwiOlwibnVtYmVyXCJ9fSx7XCJvcGVyYXRvclwiOlwiZGVsZXRlXCIsXCJwYXRoXCI6W1wiY1wiXSxcImZpcnN0XCI6e1widmFsdWVcIjo4MTgwMzU5MjEwMDAsXCJ0eXBlXCI6XCJudW1iZXJcIn19LHtcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJiXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjo4MTgwMzU5MjAwMDAsXCJ0eXBlXCI6XCJudW1iZXJcIn19XSdcbiAgICAgICAgXSxcblxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogZGF0ZTVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYjogZGF0ZTZcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJkZWxldGVcIixcInBhdGhcIjpbXCJhXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOlwiMTk5NS0xMi0wNFQwMDoxMjowMS4wMDBaXCIsXCJ0eXBlXCI6XCJvYmplY3RcIixcImluc3RhbmNlXCI6XCJEYXRlXCJ9fSx7XCJvcGVyYXRvclwiOlwiYWRkXCIsXCJwYXRoXCI6W1wiYlwiXSxcInNlY29uZFwiOntcInZhbHVlXCI6XCIxOTk1LTEyLTA0VDAwOjEyOjAyLjAwMFpcIixcInR5cGVcIjpcIm9iamVjdFwiLFwiaW5zdGFuY2VcIjpcIkRhdGVcIn19XSdcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IGRhdGUxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IGRhdGUxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1tdJ1xuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBkYXRlM1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcImFkZFwiLFwicGF0aFwiOltcImFcIl0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOjgxODAzNTkyMDAwMCxcInR5cGVcIjpcIm51bWJlclwifX1dJ1xuICAgICAgICBdLFxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBkYXRlMlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBkYXRlM1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcInVwZGF0ZVwiLFwicGF0aFwiOltcImFcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6MCxcInR5cGVcIjpcIm51bWJlclwifSxcInNlY29uZFwiOntcInZhbHVlXCI6ODE4MDM1OTIwMDAwLFwidHlwZVwiOlwibnVtYmVyXCJ9fV0nXG4gICAgICAgIF0sXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogMlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcInVwZGF0ZVwiLFwicGF0aFwiOltcImFcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6MSxcInR5cGVcIjpcIm51bWJlclwifSxcInNlY29uZFwiOntcInZhbHVlXCI6MixcInR5cGVcIjpcIm51bWJlclwifX1dJ1xuICAgICAgICBdLFxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiAxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHg6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJkZWxldGVcIixcInBhdGhcIjpbXCJhXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOjEsXCJ0eXBlXCI6XCJudW1iZXJcIn19LHtcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJ4XCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjoxLFwidHlwZVwiOlwibnVtYmVyXCJ9fV0nXG4gICAgICAgIF0sXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogMixcbiAgICAgICAgICAgICAgICB4OiAxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwidXBkYXRlXCIsXCJwYXRoXCI6W1wiYVwiXSxcImZpcnN0XCI6e1widmFsdWVcIjoxLFwidHlwZVwiOlwibnVtYmVyXCJ9LFwic2Vjb25kXCI6e1widmFsdWVcIjoyLFwidHlwZVwiOlwibnVtYmVyXCJ9fSx7XCJvcGVyYXRvclwiOlwiYWRkXCIsXCJwYXRoXCI6W1wieFwiXSxcInNlY29uZFwiOntcInZhbHVlXCI6MSxcInR5cGVcIjpcIm51bWJlclwifX1dJ1xuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogbnVsbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwiZGVsZXRlXCIsXCJwYXRoXCI6W1wiYVwiXSxcImZpcnN0XCI6e1widmFsdWVcIjpudWxsLFwidHlwZVwiOlwib2JqZWN0XCJ9fV0nXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IG51bGxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW10nXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IG51bGxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJhXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjpudWxsLFwidHlwZVwiOlwib2JqZWN0XCJ9fV0nXG4gICAgICAgIF0sIFtcbiAgICAgICAge30sXG4gICAgICAgIHthOiB1bmRlZmluZWR9LFxuICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJhXCJdLFwic2Vjb25kXCI6e1widHlwZVwiOlwidW5kZWZpbmVkXCJ9fV0nXG4gICAgXVxuXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgaXQoJ0RpZmYgc2hvdWxkIHJlc3VsdCAnICsgYywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBkaWZmKGEsIGIpO1xuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGQpKS5pcy5lcXVhbChjKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG59KSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7YnVpbGRUcmVlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvYnVpbGR0cmVlLm1qc1wiO1xuaW1wb3J0IHtOb2RlTGlzdH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9ub2RlbGlzdC5tanNcIjtcblxuXG5kZXNjcmliZSgnYnVpbGRUcmVlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ2V4YW1wbGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gZXhhbXBsZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3Qgb2JqZWN0cyA9IHtcbiAgICAgICAgICAgICAgICBkYXRhc2V0OiB7XG4gICAgICAgICAgICAgICAgICAgIFwiMVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCIxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInZlaGljbGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogbnVsbFxuXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiMlwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCIyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcImNhclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjFcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIjNcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiM1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJ0cnVja1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjFcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIjRcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiNFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb3RvcmN5Y2xlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMVwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiNVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCI1XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNVVlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjJcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIjZcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzcG9ydHMgY2FyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMlwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gYnVpbGRUcmVlKG9iamVjdHMsICdkYXRhc2V0LionLCAnaWQnLCAncGFyZW50Jyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChub2RlcykudG8uYmUuaW5zdGFuY2VPZihOb2RlTGlzdCk7XG4gICAgICAgICAgICBleHBlY3Qobm9kZXMubGVuZ3RoKS50by5lcXVhbCgxKTtcbiAgICAgICAgICAgIGV4cGVjdChub2Rlcy50b1N0cmluZygpKS50by5iZS5lcXVhbCgne1wiaWRcIjpcIjFcIixcIm5hbWVcIjpcInZlaGljbGVcIixcInBhcmVudFwiOm51bGx9XFxuIFx1MjUxQ3tcImlkXCI6XCIyXCIsXCJuYW1lXCI6XCJjYXJcIixcInBhcmVudFwiOlwiMVwifVxcbiB8IFx1MjUxQ3tcImlkXCI6XCI1XCIsXCJuYW1lXCI6XCJTVVZcIixcInBhcmVudFwiOlwiMlwifVxcbiB8IFx1MjUxNHtcImlkXCI6XCI2XCIsXCJuYW1lXCI6XCJzcG9ydHMgY2FyXCIsXCJwYXJlbnRcIjpcIjJcIn1cXG4gXHUyNTFDe1wiaWRcIjpcIjNcIixcIm5hbWVcIjpcInRydWNrXCIsXCJwYXJlbnRcIjpcIjFcIn1cXG4gXHUyNTE0e1wiaWRcIjpcIjRcIixcIm5hbWVcIjpcIm1vdG9yY3ljbGVcIixcInBhcmVudFwiOlwiMVwifScgKTtcblxuXG4gICAgICAgIH0pXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdidWlsZFRyZWUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgb2JqMSA9IHtcbiAgICAgICAgICAgIGRhdGFzZXQ6IHtcbiAgICAgICAgICAgICAgICBcIjFcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCIxXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCAxXCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSAxXCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogbnVsbFxuXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjJcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCIyXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCAyXCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSAyXCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIxXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiM1wiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjNcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDNcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDNcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjJcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCI0XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiNFwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgNFwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgNFwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMlwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjVcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCI1XCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCA1XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSA1XCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIxXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiNlwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjZcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDZcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDZcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBOb2RlIEluc3RhbmNlLicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChidWlsZFRyZWUoe30sICcnKSkudG8uYmUuaW5zdGFuY2VPZihOb2RlTGlzdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtvYmoxLCAnZGF0YXNldC4qJywgJ3tcImlkXCI6XCIxXCIsXCJuYW1lXCI6XCJUZXN0IDFcIixcImFkZHJlc3NcIjpcIkhlcmUgMVwiLFwicGFyZW50XCI6bnVsbH1cXG4gXHUyNTFDe1wiaWRcIjpcIjJcIixcIm5hbWVcIjpcIlRlc3QgMlwiLFwiYWRkcmVzc1wiOlwiSGVyZSAyXCIsXCJwYXJlbnRcIjpcIjFcIn1cXG4gfCBcdTI1MUN7XCJpZFwiOlwiM1wiLFwibmFtZVwiOlwiVGVzdCAzXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDNcIixcInBhcmVudFwiOlwiMlwifVxcbiB8IFx1MjUxNHtcImlkXCI6XCI0XCIsXCJuYW1lXCI6XCJUZXN0IDRcIixcImFkZHJlc3NcIjpcIkhlcmUgNFwiLFwicGFyZW50XCI6XCIyXCJ9XFxuIHwgfCBcdTI1MTR7XCJpZFwiOlwiNlwiLFwibmFtZVwiOlwiVGVzdCA2XCIsXCJhZGRyZXNzXCI6XCJIZXJlIDZcIixcInBhcmVudFwiOlwiNFwifVxcbiBcdTI1MTR7XCJpZFwiOlwiNVwiLFwibmFtZVwiOlwiVGVzdCA1XCIsXCJhZGRyZXNzXCI6XCJIZXJlIDVcIixcInBhcmVudFwiOlwiMVwifSddLFxuICAgICAgICAgICAgW29iajEsICd4JywgJyddLFxuICAgICAgICAgICAgW29iajEsICdkYXRhc2V0LionLCAne1wiaWRcIjpcIjFcIixcIm5hbWVcIjpcIlRlc3QgMVwiLFwiYWRkcmVzc1wiOlwiSGVyZSAxXCIsXCJwYXJlbnRcIjpudWxsfVxcbiBcdTI1MUN7XCJpZFwiOlwiMlwiLFwibmFtZVwiOlwiVGVzdCAyXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDJcIixcInBhcmVudFwiOlwiMVwifVxcbiB8IFx1MjUxQ3tcImlkXCI6XCIzXCIsXCJuYW1lXCI6XCJUZXN0IDNcIixcImFkZHJlc3NcIjpcIkhlcmUgM1wiLFwicGFyZW50XCI6XCIyXCJ9XFxuIHwgXHUyNTE0e1wiaWRcIjpcIjRcIixcIm5hbWVcIjpcIlRlc3QgNFwiLFwiYWRkcmVzc1wiOlwiSGVyZSA0XCIsXCJwYXJlbnRcIjpcIjJcIn1cXG4gfCB8IFx1MjUxNHtcImlkXCI6XCI2XCIsXCJuYW1lXCI6XCJUZXN0IDZcIixcImFkZHJlc3NcIjpcIkhlcmUgNlwiLFwicGFyZW50XCI6XCI0XCJ9XFxuIFx1MjUxNHtcImlkXCI6XCI1XCIsXCJuYW1lXCI6XCJUZXN0IDVcIixcImFkZHJlc3NcIjpcIkhlcmUgNVwiLFwicGFyZW50XCI6XCIxXCJ9J10sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdidWlsZFRyZWUoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJywnICsgSlNPTi5zdHJpbmdpZnkoYikgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBKU09OLnN0cmluZ2lmeShjKSArICcgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBub2RlbGlzdCA9IGJ1aWxkVHJlZShhLCBiLCAnaWQnLCAncGFyZW50Jyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5vZGVsaXN0LnRvU3RyaW5nKCkpLnRvLmJlLmVxbChjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnYnVpbGRUcmVlKCkgdGVzdCAyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiAyXG4gICAgICAgICAqICAgIDFcbiAgICAgICAgICogICAgM1xuICAgICAgICAgKiA0XG4gICAgICAgICAqICAgIDZcbiAgICAgICAgICogNVxuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgbGV0IG9iajEgPSB7XG4gICAgICAgICAgICBkYXRhc2V0OiB7XG4gICAgICAgICAgICAgICAgXCIxXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiMVwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgMVwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgMVwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMlwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjJcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCIyXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCAyXCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSAyXCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIwXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiM1wiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjNcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDNcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDNcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjJcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCI0XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiNFwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgNFwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgNFwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjVcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCI1XCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCA1XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSA1XCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIwXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiNlwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjZcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDZcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDZcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjRcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCI3XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiN1wiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgN1wiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgN1wiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIE5vZGUgSW5zdGFuY2UuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGJ1aWxkVHJlZSh7fSwgJycpKS50by5iZS5pbnN0YW5jZU9mKE5vZGVMaXN0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW29iajEsICdkYXRhc2V0LionLCAne1wiaWRcIjpcIjJcIixcIm5hbWVcIjpcIlRlc3QgMlwiLFwiYWRkcmVzc1wiOlwiSGVyZSAyXCIsXCJwYXJlbnRcIjpcIjBcIn1cXG4gXHUyNTFDe1wiaWRcIjpcIjFcIixcIm5hbWVcIjpcIlRlc3QgMVwiLFwiYWRkcmVzc1wiOlwiSGVyZSAxXCIsXCJwYXJlbnRcIjpcIjJcIn1cXG4gfCBcdTI1MTR7XCJpZFwiOlwiN1wiLFwibmFtZVwiOlwiVGVzdCA3XCIsXCJhZGRyZXNzXCI6XCJIZXJlIDdcIixcInBhcmVudFwiOlwiMVwifVxcbiBcdTI1MTR7XCJpZFwiOlwiM1wiLFwibmFtZVwiOlwiVGVzdCAzXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDNcIixcInBhcmVudFwiOlwiMlwifVxcbntcImlkXCI6XCI0XCIsXCJuYW1lXCI6XCJUZXN0IDRcIixcImFkZHJlc3NcIjpcIkhlcmUgNFwiLFwicGFyZW50XCI6XCIwXCJ9XFxuIFx1MjUxNHtcImlkXCI6XCI2XCIsXCJuYW1lXCI6XCJUZXN0IDZcIixcImFkZHJlc3NcIjpcIkhlcmUgNlwiLFwicGFyZW50XCI6XCI0XCJ9XFxue1wiaWRcIjpcIjVcIixcIm5hbWVcIjpcIlRlc3QgNVwiLFwiYWRkcmVzc1wiOlwiSGVyZSA1XCIsXCJwYXJlbnRcIjpcIjBcIn0nXSxcbiAgICAgICAgICAgIFtvYmoxLCAneCcsICcnXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2J1aWxkVHJlZSgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnLCcgKyBKU09OLnN0cmluZ2lmeShiKSArICcpIHNob3VsZCByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGMpICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5vZGVsaXN0ID0gYnVpbGRUcmVlKGEsIGIsICdpZCcsICdwYXJlbnQnLCB7XG4gICAgICAgICAgICAgICAgICAgIHJvb3RSZWZlcmVuY2VzOiBbJzAnXVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5vZGVsaXN0LnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKGMpO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbn0pO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtQYXRoZmluZGVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcblxuZGVzY3JpYmUoJ1BhdGhmaW5kZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgY29udmVydE1hcFJlc3VsdCA9IGZ1bmN0aW9uIChyKSB7XG4gICAgICAgIGlmIChyIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICByID0gT2JqZWN0LmZyb21FbnRyaWVzKHIpO1xuICAgICAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgICAgIHIgPSByLm1hcCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydE1hcFJlc3VsdChlKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIG9dIG9mIE9iamVjdC5lbnRyaWVzKHIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJba10gPSBjb252ZXJ0TWFwUmVzdWx0KG8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByO1xuICAgIH1cblxuXG4gICAgZGVzY3JpYmUoJ3dpdGggV2lsZGNhcmQgYW5kIEl0ZXJhdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBwZiwgb2JqO1xuXG4gICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgb2JqID0ge1xuICAgICAgICAgICAgICAgIGE6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogXCIxLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBcIjEtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ6ICchJ1xuXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiMi0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogXCIyLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkOiAnPydcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBmID0gbmV3IFBhdGhmaW5kZXIob2JqKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWydhLiouYi4qJywgJ3tcIjBcIjp7XCIwXCI6e1wiY1wiOlwiMS0xXCJ9LFwiMVwiOntcImNcIjpcIjEtMlwifX0sXCIxXCI6e1wiMFwiOntcImNcIjpcIjItMVwifSxcIjFcIjp7XCJjXCI6XCIyLTJcIn19fSddLFxuICAgICAgICAgICAgWydhLiouYicsICd7XCIwXCI6W3tcImNcIjpcIjEtMVwifSx7XCJjXCI6XCIxLTJcIn1dLFwiMVwiOlt7XCJjXCI6XCIyLTFcIn0se1wiY1wiOlwiMi0yXCJ9XX0nXSxcbiAgICAgICAgICAgIFsnYS4xLmInLCAnW3tcImNcIjpcIjItMVwifSx7XCJjXCI6XCIyLTJcIn1dJ10sXG4gICAgICAgICAgICBbJ2EuMC5iJywgJ1t7XCJjXCI6XCIxLTFcIn0se1wiY1wiOlwiMS0yXCJ9XSddLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICAgICAgaXQoJy5zZXRWaWEoJyArIGEgKyAnKSBzaG91bGQgcmVzdWx0IGluICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHIgPSBwZi5nZXRWaWEoYSk7XG4gICAgICAgICAgICAgICAgbGV0IGkgPSBjb252ZXJ0TWFwUmVzdWx0KHIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShpKSkuaXMuZXF1YWwoYik7XG4gICAgICAgICAgICB9KTtcblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ2FwaSB0ZXN0cycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgcGF0aGZpbmRlciwgb2JqZWN0O1xuXG5cbiAgICAgICAgY2xhc3MgQSB7XG4gICAgICAgICAgICBnZXQgYSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgIG9iamVjdCA9IHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LCBcInRlc3QxXCIsIGZhbHNlLCB1bmRlZmluZWQsIHBhcnNlSW50KFwiYVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk6IFtcInRlc3QyXCJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGo6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgazogKG5ldyBNYXApLnNldCgnbScsIHtuOiAzfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBsOiAobmV3IFNldCkuYWRkKHtuOiA0fSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYjogbmV3IEFcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHBhdGhmaW5kZXIgPSBuZXcgUGF0aGZpbmRlcihvYmplY3QpO1xuXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBuZXcgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWzEyXSxcbiAgICAgICAgICAgICAgICBbdW5kZWZpbmVkXSxcbiAgICAgICAgICAgICAgICBbbnVsbF0sXG4gICAgICAgICAgICAgICAgW1widGVzdFwiXVxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBsYWJlbCA9IHR5cGVvZiBhO1xuICAgICAgICAgICAgICAgIGlmIChhID09PSBudWxsKSBsYWJlbCA9ICdudWxsJztcblxuXG4gICAgICAgICAgICAgICAgaXQobGFiZWwgKyAnIHNob3VsZCB0aHJvdyBlcnJvcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFBhdGhmaW5kZXIoYSlcbiAgICAgICAgICAgICAgICAgICAgfSkudG8udGhyb3coRXJyb3IpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnLnNldFZpYSh4KScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IHBmLCBvYmo7XG5cbiAgICAgICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIG9iaiA9IHt9XG4gICAgICAgICAgICAgICAgcGYgPSBuZXcgUGF0aGZpbmRlcihvYmopO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ2EuYi4wLjAuYycsIHRydWUsICd7XCJhXCI6e1wiYlwiOltbe1wiY1wiOnRydWV9XV19fSddLFxuICAgICAgICAgICAgICAgIFsnYS5iLjAuYycsIHRydWUsICd7XCJhXCI6e1wiYlwiOlt7XCJjXCI6dHJ1ZX1dfX0nXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi4zLmMnLCB0cnVlLCAne1wiYVwiOntcImJcIjpbbnVsbCxudWxsLG51bGwse1wiY1wiOnRydWV9XX19J10sXG4gICAgICAgICAgICAgICAgWydhLmIuYycsIHRydWUsICd7XCJhXCI6e1wiYlwiOntcImNcIjp0cnVlfX19J11cbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICAgICAgICAgIGl0KCcuc2V0VmlhKCcgKyBhICsgJywgJyArIGIgKyAnKSBzaG91bGQgcmVzdWx0IGluICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHBmLnNldFZpYShhLCBiKVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkob2JqKSkuaXMuZXF1YWwoYyk7XG4gICAgICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnLnNldFZpYSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgYTtcbiAgICAgICAgICAgIGxldCBiO1xuICAgICAgICAgICAgbGV0IGM7XG5cbiAgICAgICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGEgPSBcImEueFwiO1xuICAgICAgICAgICAgICAgIGIgPSBcInRydWVcIjtcbiAgICAgICAgICAgICAgICBjID0gXCJhLnkuZFwiO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoJy5zZXRWaWEoJyArIGEgKyAnLCAnICsgYiArICcpIHNob3VsZCByZXR1cm4gUGF0aGZpbmRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QocGF0aGZpbmRlci5zZXRWaWEoYSwgYikpLmlzLmluc3RhbmNlT2YoUGF0aGZpbmRlcik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJy5zZXRWaWEoJyArIGEgKyAnLCAnICsgYiArICcpIHNob3VsZCBjaGFuZ2Ugb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHBhdGhmaW5kZXIuc2V0VmlhKGEsIGIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShvYmplY3QpKS5pcy5lcXVhbCgne1wiYVwiOntcImJcIjp7XCJjXCI6WzQsXCJ0ZXN0MVwiLGZhbHNlLG51bGwsbnVsbF0sXCJlXCI6ZmFsc2UsXCJmXCI6W3tcImdcIjpmYWxzZSxcImhcIjozLFwiaVwiOltcInRlc3QyXCJdfV0sXCJqXCI6e30sXCJrXCI6e30sXCJsXCI6e319LFwieFwiOlwidHJ1ZVwifSxcImJcIjp7fX0nKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnLnNldFZpYSgnICsgYyArICcsICcgKyBiICsgJykgc2hvdWxkIGNoYW5nZSBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcGF0aGZpbmRlci5zZXRWaWEoYywgYik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KG9iamVjdCkpLmlzLmVxdWFsKCd7XCJhXCI6e1wiYlwiOntcImNcIjpbNCxcInRlc3QxXCIsZmFsc2UsbnVsbCxudWxsXSxcImVcIjpmYWxzZSxcImZcIjpbe1wiZ1wiOmZhbHNlLFwiaFwiOjMsXCJpXCI6W1widGVzdDJcIl19XSxcImpcIjp7fSxcImtcIjp7fSxcImxcIjp7fX0sXCJ5XCI6e1wiZFwiOlwidHJ1ZVwifX0sXCJiXCI6e319Jyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuXG4gICAgICAgIGRlc2NyaWJlKCcuZXhpc3RzKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWydhLmIuYy4xJywgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgWydiLmEnLCB0cnVlXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi54JywgZmFsc2VdLFxuICAgICAgICAgICAgICAgIFsnYS54JywgZmFsc2VdLFxuICAgICAgICAgICAgICAgIFsnYS5iLnEnLCBmYWxzZV0sXG4gICAgICAgICAgICAgICAgWydhLmIuYy4wJywgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgWydhLmIuZCcsIHRydWVdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmYuMC5nJywgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgWydhLmIuZi4wLmkuMCcsIHRydWVdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmYuMC5pLjInLCBmYWxzZV0sXG4gICAgICAgICAgICAgICAgWydhLmIuZScsIHRydWVdLFxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICAgICAgICAgIGl0KCcuZXhpc3RzKCcgKyBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiArICcgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QocGF0aGZpbmRlci5leGlzdHMoYSkpLmlzLmVxdWFsKGIpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJy5kZWxldGVWaWEoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ2EuYi5lJywgJ3tcImFcIjp7XCJiXCI6e1wiY1wiOls0LFwidGVzdDFcIixmYWxzZSxudWxsLG51bGxdLFwiZlwiOlt7XCJnXCI6ZmFsc2UsXCJoXCI6MyxcImlcIjpbXCJ0ZXN0MlwiXX1dLFwialwiOnt9LFwia1wiOnt9LFwibFwiOnt9fX0sXCJiXCI6e319J10sXG4gICAgICAgICAgICAgICAgWydhLmIuZicsICd7XCJhXCI6e1wiYlwiOntcImNcIjpbNCxcInRlc3QxXCIsZmFsc2UsbnVsbCxudWxsXSxcImVcIjpmYWxzZSxcImpcIjp7fSxcImtcIjp7fSxcImxcIjp7fX19LFwiYlwiOnt9fSddLFxuICAgICAgICAgICAgICAgIFsnYS5iLmonLCAne1wiYVwiOntcImJcIjp7XCJjXCI6WzQsXCJ0ZXN0MVwiLGZhbHNlLG51bGwsbnVsbF0sXCJlXCI6ZmFsc2UsXCJmXCI6W3tcImdcIjpmYWxzZSxcImhcIjozLFwiaVwiOltcInRlc3QyXCJdfV0sXCJrXCI6e30sXCJsXCI6e319fSxcImJcIjp7fX0nXSxcblxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgICAgICBpdCgnLmRlbGV0ZVZpYSgnICsgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIgKyAnICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aGZpbmRlci5kZWxldGVWaWEoYSlcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KG9iamVjdCkpLmlzLmVxdWFsKGIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCcuZ2V0VmlhKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkZXNjcmliZSgnLmdldFZpYSgpJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgICAgICBvYmplY3QgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LCBcInRlc3QxXCIsIGZhbHNlLCB1bmRlZmluZWQsIHBhcnNlSW50KFwiYVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOiBbXCJ0ZXN0MlwiXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazogKG5ldyBNYXApLnNldCgnbScsIHtuOiAzfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IChuZXcgU2V0KS5hZGQoe246IDR9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3A6IHtxOiAxLCByOiB0cnVlfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cDoge3E6IDIsIHI6IHRydWV9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwOiB7cTogMywgcjogdHJ1ZX19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3A6IHtxOiA0LCByOiB0cnVlfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cDoge3E6IDUsIHI6IHRydWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7YTogMX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7YTogMn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2OiB7YTogM30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiB7YTogNH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBwYXRoZmluZGVyID0gbmV3IFBhdGhmaW5kZXIob2JqZWN0KTtcblxuXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIFsnYS4qJywgJ1tbXCJiXCIse1wiY1wiOls0LFwidGVzdDFcIixmYWxzZSxudWxsLG51bGxdLFwiZVwiOmZhbHNlLFwiZlwiOlt7XCJnXCI6ZmFsc2UsXCJoXCI6MyxcImlcIjpbXCJ0ZXN0MlwiXX1dLFwialwiOnt9LFwia1wiOnt9LFwibFwiOnt9LFwib1wiOlt7XCJwXCI6e1wicVwiOjEsXCJyXCI6dHJ1ZX19LHtcInBcIjp7XCJxXCI6MixcInJcIjp0cnVlfX0se1wicFwiOntcInFcIjozLFwiclwiOnRydWV9fSx7XCJwXCI6e1wicVwiOjQsXCJyXCI6dHJ1ZX19LHtcInBcIjp7XCJxXCI6NSxcInJcIjp0cnVlfX1dLFwic1wiOntcInRcIjp7XCJhXCI6MX0sXCJ1XCI6e1wiYVwiOjJ9LFwidlwiOntcImFcIjozfSxcInhcIjp7XCJhXCI6NH19fV1dJ10sXG4gICAgICAgICAgICAgICAgICAgIFsnYS5iLnMuKi5hJywgJ1tbXCJ0XCIsMV0sW1widVwiLDJdLFtcInZcIiwzXSxbXCJ4XCIsNF1dJ10sXG4gICAgICAgICAgICAgICAgICAgIFsnYS5iLnMuKicsICdbW1widFwiLHtcImFcIjoxfV0sW1widVwiLHtcImFcIjoyfV0sW1widlwiLHtcImFcIjozfV0sW1wieFwiLHtcImFcIjo0fV1dJ10sXG4gICAgICAgICAgICAgICAgICAgIFsnYS5iLm8uKi5wLnEnLCAnW1tcIjBcIiwxXSxbXCIxXCIsMl0sW1wiMlwiLDNdLFtcIjNcIiw0XSxbXCI0XCIsNV1dJ10sXG4gICAgICAgICAgICAgICAgICAgIFsnYS5iLm8uKi5wLnInLCAnW1tcIjBcIix0cnVlXSxbXCIxXCIsdHJ1ZV0sW1wiMlwiLHRydWVdLFtcIjNcIix0cnVlXSxbXCI0XCIsdHJ1ZV1dJ10sXG4gICAgICAgICAgICAgICAgICAgIFsnYS5iLm8uKi5wJywgJ1tbXCIwXCIse1wicVwiOjEsXCJyXCI6dHJ1ZX1dLFtcIjFcIix7XCJxXCI6MixcInJcIjp0cnVlfV0sW1wiMlwiLHtcInFcIjozLFwiclwiOnRydWV9XSxbXCIzXCIse1wicVwiOjQsXCJyXCI6dHJ1ZX1dLFtcIjRcIix7XCJxXCI6NSxcInJcIjp0cnVlfV1dJ11cbiAgICAgICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICAgICAgICAgIGl0KCcuZ2V0VmlhKCcgKyBhICsgJykgc2hvdWxkIHJlc3VsdCAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHIgPSBwYXRoZmluZGVyLmdldFZpYShhKVxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20ocikpKS5pcy5lcXVhbChiKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoJy5nZXRWaWEoKSBzaG91bGQgcmVzdWx0ICcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBwID0gbmV3IFBhdGhmaW5kZXIoe1xuICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2M6IDF9LCB7YzogMn1cbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YzogMSwgZDogZmFsc2V9LCB7YzogMn1cbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgciA9IHAuZ2V0VmlhKFwiKi54LiouY1wiKVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gbWFwVG9PYmoobWFwKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB7fVxuICAgICAgICAgICAgICAgICAgICBtYXAuZm9yRWFjaChmdW5jdGlvbiAodiwgaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpba10gPSBtYXBUb09iaih2KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpba10gPSB2XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ialxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShtYXBUb09iaihyKSkpLmlzLmVxdWFsKCd7XCJhXCI6e1wiMFwiOjEsXCIxXCI6Mn0sXCJiXCI6e1wiMFwiOjEsXCIxXCI6Mn19Jyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJy5nZXRWaWEoYS5iLmwuMC5uKSB3aXRoIG1hcCBzaG91bGQgcmV0dXJuIDQgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChwYXRoZmluZGVyLmdldFZpYSgnYS5iLmwuMC5uJykpLmlzLmVxdWFsKDQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ2EuYi5rLm0ubicsIDNdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmwuMC5uJywgNF0sXG4gICAgICAgICAgICAgICAgWydhLngnLCB1bmRlZmluZWRdLFxuICAgICAgICAgICAgICAgIFsnYS5iLnEnLCB1bmRlZmluZWRdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmMuMScsIFwidGVzdDFcIl0sXG4gICAgICAgICAgICAgICAgWydhLmIuYy4wJywgNF0sXG4gICAgICAgICAgICAgICAgWydhLmIuZCcsIHVuZGVmaW5lZF0sXG4gICAgICAgICAgICAgICAgWydhLmIuZi4wLmcnLCBmYWxzZV0sXG4gICAgICAgICAgICAgICAgWydhLmIuZi4wLmkuMCcsIFwidGVzdDJcIl0sXG4gICAgICAgICAgICAgICAgWydhLmIuZScsIGZhbHNlXSxcbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgICAgICAgICBpdCgnLmdldFZpYSgnICsgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIgKyAnICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHBhdGhmaW5kZXIuZ2V0VmlhKGEpKS5pcy5lcXVhbChiKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsnYS5iLmQuZSddLFxuICAgICAgICAgICAgICAgIFsnYS5iLmQueCddLFxuICAgICAgICAgICAgICAgIFsnYS5iLmwuZS5uJ10sXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgICAgICBpdCgnLmdldFZpYSgnICsgYSArICcpIHNob3VsZCB0aHJvdyBFcnJvciAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBwYXRoZmluZGVyLmdldFZpYShhKSkudG8udGhyb3coRXJyb3IpXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG59KTtcblxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtQaXBlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvcGlwZS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7RW1iZWR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZW1iZWQubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1BpcGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuICAgICAgICBpZiAoIWdsb2JhbFRoaXNbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbihtID0+IHtcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzWydjcnlwdG8nXSA9IG5ldyBtLkNyeXB0bygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgIH1cblxuICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdydW4gZGlmZmVyZW50IHBpcGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBbXG4gICAgICAgICAgICBbJ3BhdGg6YiB8IGlmOng6XFxcXCAnLCB7YTogdHJ1ZX0sICcgJ10sICAgLy8gJ1xcXFwgJy5sZW5ndGggXHUyMUE2IDJcbiAgICAgICAgICAgIFsncGF0aDphIHwgaWY6eDpcXFxcICcsIHthOiB0cnVlfSwgJ3gnXSxcbiAgICAgICAgICAgIFsnbm9wJywgJ2FiY2RlZmdoaWprbG1ub3AnLCAnYWJjZGVmZ2hpamtsbW5vcCddLFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdQaXBlLnJ1bignICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKS5ydW4oJyArIEpTT04uc3RyaW5naWZ5KGIpICsgJykgc2hvdWxkIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoYyksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IG5ldyBQaXBlKGEpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgciA9IHQucnVuKGIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChyKS50by5iZS5lcWwoYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnbmV3IFBpcGUgc2hvdWxkIGNyZWF0ZSBuZXcgSW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gSW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFBpcGUoJycpKS50by5iZS5pbnN0YW5jZU9mKFBpcGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBJbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgUGlwZSgnaW5kZXg6YXx0b3VwcGVyIHxwcmVmaXg6YScpLnJ1bih7YTogXCJ0ZXN0XCJ9KSkudG8uYmUuZXF1YWwoJ2FURVNUJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnaW5kZXg6YXx0b3VwcGVyIHxwcmVmaXg6YScsIHthOiBcInRlc3RcIn0sICdhVEVTVCddLFxuICAgICAgICAgICAgWydwYXRoOmEuYi5jLmQgfCB0b3VwcGVyIHwgcHJlZml4OkhlbGxvXFxcXCAnLCB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZDogXCJ3b3JsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAnSGVsbG8gV09STEQnXSxcbiAgICAgICAgICAgIFsncGF0aDphLmIuY3xpbmRleDpkfHRvdXBwZXIgfHN1ZmZpeDp4Jywge2E6IHtiOiB7Yzoge2Q6IFwidGVzdFwifX19fSwgJ1RFU1R4J10sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCduZXcgUGlwZSgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKS5ydW4oJyArIEpTT04uc3RyaW5naWZ5KGIpICsgJykgc2hvdWxkIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoYykgKyAnICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IG5ldyBQaXBlKGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0LnJ1bihiKSkudG8uYmUuZXF1YWwoYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ25ldyBQaXBlIGFuZCBsb2NhbGUnLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgICAgICBsZXQgaHRtbDEgPSBgXG48ZGl2IGlkPVwibW9jay10cmFuc2xhdGlvbnNcIj48L2Rpdj5cbjxzY3JpcHQgdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIiBkYXRhLW1vbnN0ZXItcm9sZT1cInRyYW5zbGF0aW9uc1wiPlxuICAgIHtcbiAgICAgICAgXCI1MVwiOiBcInh5elwiLFxuICAgICAgICBcIjUyXCI6IFwiYWJjXCIsXG4gICAgICAgIFwiNTNcIjogXCJkZWZcIlxuICAgIH1cbjwvc2NyaXB0PiAgXG5gO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKGRvbmUpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrLXRyYW5zbGF0aW9ucycpO1xuICAgICAgICAgICAgRW1iZWQuYXNzaWduVHJhbnNsYXRpb25zVG9FbGVtZW50KGVsZW0pLnRoZW4oKG8pID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsncGF0aDpzdGF0dXMgfCB0b3N0cmluZyB8IGkxOG4nLCB7c3RhdHVzOiA1MX0sIFwieHl6XCJdXG5cblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IHBpcGUgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBvYmogPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBleHBlY3RlZCA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIHRyYW5zZm9ybSgnICsgcGlwZSArICcpLnJ1bignICsgSlNPTi5zdHJpbmdpZnkob2JqKSArICcpIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWQpLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBuZXcgUGlwZShwaXBlKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodC5ydW4ob2JqKSkudG8uYmUuZXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cblxufSk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXh0ZW5kfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuXG5jbGFzcyBNb2NrRm9yRXh0ZW5kcyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgfVxufVxuXG5cbmRlc2NyaWJlKCdleHRlbmQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBbXG4gICAgICAgIFtcbiAgICAgICAgICAgJ3tcInRoZWtleVwiOnt9fScse30se3RoZWtleTpuZXcgTW9ja0ZvckV4dGVuZHN9IFxuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICAne1wiYVwiOntcImJcIjpbXX19JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiMVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIjNcIlxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSwgICAgICAgIFtcbiAgICAgICAgICAgICd7XCJhXCI6e1wiYlwiOjEsXCJkXCI6MX19JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IDFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgZDogMVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG5cbiAgICAgICAgW1xuICAgICAgICAgICAgJ3tcImFcIjp7XCJiXCI6MSxcImRcIjp7XCJ4XCI6W1wiY2FyXCJdLFwiZlwiOnRydWUsXCJnXCI6W119fX0nLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiAxLFxuICAgICAgICAgICAgICAgICAgICBkOiB7eDogW1wiY2FyXCJdfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZzogW11cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIF1cblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBkID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBhID0gZGF0YVxuXG4gICAgICAgIGl0KCcuZXh0ZW5kKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcpIHNob3VsZCByZXN1bHQgaW4gJyArIGQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB4ID0gZXh0ZW5kLmFwcGx5KHRoaXMsIGEpO1xuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KHgpKS5pcy5lcXVhbChkKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbiAgICBbXG5cblxuICAgICAgICBbXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IDEsXG4gICAgICAgICAgICAgICAgICAgIGQ6IFtcImNhclwiXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZzogW11cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7fVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICBdXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgYSA9IGRhdGFcblxuICAgICAgICBpdCgnLmV4dGVuZCgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKSBzaG91bGQgdGhyb3cgRXJyb3IgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGV4dGVuZC5hcHBseSh0aGlzLCBhKSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbn0pXG5cblxuXG5kZXNjcmliZSgnZXh0ZW5kIGZ1bmN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZXh0ZW5kIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgZnJvbSBhbm90aGVyIG9iamVjdCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0geyBhOiAxIH07XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHsgYjogMiB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBleHRlbmQodGFyZ2V0LCBzb3VyY2UpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHsgYTogMSwgYjogMiB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgZm9yIG5vbi1vYmplY3QgdGFyZ2V0JywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBudWxsO1xuICAgICAgICBjb25zdCBzb3VyY2UgPSB7IGI6IDIgfTtcbiAgICAgICAgZXhwZWN0KCgpID0+IGV4dGVuZCh0YXJnZXQsIHNvdXJjZSkpLnRvLnRocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGZvciBub24tb2JqZWN0IHNvdXJjZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0geyBhOiAxIH07XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IFwibm90IGFuIG9iamVjdFwiO1xuICAgICAgICBleHBlY3QoKCkgPT4gZXh0ZW5kKHRhcmdldCwgc291cmNlKSkudG8udGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGRlZXAgb2JqZWN0IGV4dGVuc2lvbicsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0geyBhOiB7IGI6IDEgfSB9O1xuICAgICAgICBjb25zdCBzb3VyY2UgPSB7IGE6IHsgYzogMiB9LCBkOiAzIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dGVuZCh0YXJnZXQsIHNvdXJjZSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoeyBhOiB7IGI6IDEsIGM6IDIgfSwgZDogMyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGFycmF5IGV4dGVuc2lvbicsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0geyBhOiBbMSwgMl0gfTtcbiAgICAgICAgY29uc3Qgc291cmNlID0geyBhOiBbMywgNF0gfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0ZW5kKHRhcmdldCwgc291cmNlKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7IGE6IFszLCA0XSB9KTtcbiAgICB9KTtcbn0pO1xuXG5cblxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBBYnN0cmFjdENvbnN0cmFpbnQgfTtcblxuLyoqXG4gKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBkZWZpbmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJ5IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLlxuICpcbiAqIFRoZSB1bmlmb3JtIEFQSSBvZiB0aGUgY29uc3RyYWludHMgYWxsb3dzIGNoYWlucyB0byBiZSBmb3JtZWQuXG4gKlxuICogVGhlIGFic3RyYWN0IGNvbnN0cmFpbnQgZGVmaW5lcyB0aGUgYXBpIGZvciBhbGwgY29uc3RyYWludHMuIG1haW5seSB0aGUgbWV0aG9kIGlzVmFsaWQoKSBpcyBkZWZpbmVkLlxuICpcbiAqIERlcml2ZWQgY2xhc3NlcyBtdXN0IGltcGxlbWVudCB0aGUgbWV0aG9kIGlzVmFsaWQoKS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbnN0cmFpbnRzXG4gKiBAc3VtbWFyeSBUaGUgYWJzdHJhY3QgY29uc3RyYWludFxuICovXG5jbGFzcyBBYnN0cmFjdENvbnN0cmFpbnQgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIHRoaXMgbWV0aG9kIG11c3QgcmV0dXJuIGEgcHJvbWlzZSBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKi9cblx0aXNWYWxpZCh2YWx1ZSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdCh2YWx1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb25zdHJhaW50cy9hYnN0cmFjdC1jb25zdHJhaW50XCIpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBBYnN0cmFjdENvbnN0cmFpbnQgfSBmcm9tIFwiLi9hYnN0cmFjdC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IEludmFsaWQgfTtcblxuLyoqXG4gKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBkZWZpbmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJ5IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLlxuICpcbiAqIFRoZSB1bmlmb3JtIEFQSSBvZiB0aGUgY29uc3RyYWludHMgYWxsb3dzIGNoYWlucyB0byBiZSBmb3JtZWQuXG4gKlxuICogVGhlIGludmFsaWQgY29uc3RyYWludCBhbGxvd3MgYW4gYWx3YXlzIGludmFsaWQgcXVlcnkgdG8gYmUgcGVyZm9ybWVkLiB0aGlzIGNvbnN0cmFpbnQgaXMgbWFpbmx5IGludGVuZGVkIGZvciB0ZXN0aW5nLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9jb25zdHJhaW50cy9pbnZhbGlkLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db25zdHJhaW50c1xuICogQHN1bW1hcnkgQSBjb25zdHJhaW50IHRoYXQgYWx3YXlzIGludmFsaWRcbiAqL1xuY2xhc3MgSW52YWxpZCBleHRlbmRzIEFic3RyYWN0Q29uc3RyYWludCB7XG5cdC8qKlxuXHQgKiB0aGlzIG1ldGhvZCByZXR1cm4gYSByZWplY3RlZCBwcm9taXNlXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRpc1ZhbGlkKHZhbHVlKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbnN0cmFpbnRzL2ludmFsaWRcIik7XG5cdH1cbn1cbiIsICJpbXBvcnQge0ludmFsaWR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvaW52YWxpZC5tanNcIjtcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCdJbnZhbGlkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy5pc1ZhbGlkKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBpc3ZhbGlkID0gbmV3IEludmFsaWQoKVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmVzb2x2ZSBwcm9taXNlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGlzdmFsaWQuaXNWYWxpZCgpLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChlKS50by5iZS51bmRlZmluZWRcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgImltcG9ydCB7QmFzZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHtBYnN0cmFjdE9wZXJhdG9yfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2Fic3RyYWN0b3BlcmF0b3IubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5jbGFzcyBBYnN0cmFjdENvbnN0cmFpbnRNb2NrIGV4dGVuZHMgQmFzZSB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBpc1ZhbGlkKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh2YWx1ZSk7XG4gICAgfVxufVxuXG5cbmRlc2NyaWJlKCdBYnN0cmFjdE9wZXJhdG9yJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiB0aGUgY29uc3RyYWludCBpcyBub3QgY2FsbCB3aXRoIHBhcmFtZXRlcicsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgQWJzdHJhY3RPcGVyYXRvcigpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBub3QgYW4gZXJyb3Igd2hlbiB0aGUgY29uc3RyYWludCBpcyBub3QgY2FsbCB3aXRoIHBhcmFtZXRlcicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBuZXcgQWJzdHJhY3RPcGVyYXRvcihuZXcgQWJzdHJhY3RDb25zdHJhaW50TW9jaygpLCBuZXcgQWJzdHJhY3RDb25zdHJhaW50TW9jaygpKSAgICBcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgIFxuXG4gICAgfSk7XG59KTtcblxuIiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgQWJzdHJhY3RDb25zdHJhaW50IH0gZnJvbSBcIi4vYWJzdHJhY3QubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBBYnN0cmFjdE9wZXJhdG9yIH07XG5cbi8qKlxuICogQ29uc3RyYWludHMgYXJlIHVzZWQgdG8gZGVmaW5lIGNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldCBieSB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS5cbiAqXG4gKiBUaGUgdW5pZm9ybSBBUEkgb2YgdGhlIGNvbnN0cmFpbnRzIGFsbG93cyBjaGFpbnMgdG8gYmUgZm9ybWVkLlxuICpcbiAqIE9wZXJhdG9ycyBhbGxvdyB5b3UgdG8gbGluayBjb25zdHJhaW50cyB0b2dldGhlci4gZm9yIGV4YW1wbGUsIHlvdSBjYW4gY2hlY2sgd2hldGhlciBhIHZhbHVlIGlzXG4gKiBhbiBvYmplY3Qgb3IgYW4gYXJyYXkuIGVhY2ggb3BlcmF0b3IgaGFzIHR3byBvcGVyYW5kcyB0aGF0IGFyZSBsaW5rZWQgdG9nZXRoZXIuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db25zdHJhaW50c1xuICogQHN1bW1hcnkgVGhlIGFic3RyYWN0IG9wZXJhdG9yIGNvbnN0cmFpbnRcbiAqL1xuY2xhc3MgQWJzdHJhY3RPcGVyYXRvciBleHRlbmRzIEFic3RyYWN0Q29uc3RyYWludCB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0Fic3RyYWN0Q29uc3RyYWludH0gb3BlcmFudEFcblx0ICogQHBhcmFtIHtBYnN0cmFjdENvbnN0cmFpbnR9IG9wZXJhbnRCXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gXCJwYXJhbWV0ZXJzIG11c3QgYmUgZnJvbSB0eXBlIEFic3RyYWN0Q29uc3RyYWludFwiXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcGVyYW50QSwgb3BlcmFudEIpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKFxuXHRcdFx0IShcblx0XHRcdFx0b3BlcmFudEEgaW5zdGFuY2VvZiBBYnN0cmFjdENvbnN0cmFpbnQgJiZcblx0XHRcdFx0b3BlcmFudEIgaW5zdGFuY2VvZiBBYnN0cmFjdENvbnN0cmFpbnRcblx0XHRcdClcblx0XHQpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJwYXJhbWV0ZXJzIG11c3QgYmUgZnJvbSB0eXBlIEFic3RyYWN0Q29uc3RyYWludFwiKTtcblx0XHR9XG5cblx0XHR0aGlzLm9wZXJhbnRBID0gb3BlcmFudEE7XG5cdFx0dGhpcy5vcGVyYW50QiA9IG9wZXJhbnRCO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludHMvYWJzdHJhY3Qtb3BlcmF0b3JcIik7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEFic3RyYWN0Q29uc3RyYWludCB9IGZyb20gXCIuL2Fic3RyYWN0Lm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgVmFsaWQgfTtcblxuLyoqXG4gKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBkZWZpbmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJ5IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLlxuICpcbiAqIFRoZSB1bmlmb3JtIEFQSSBvZiB0aGUgY29uc3RyYWludHMgYWxsb3dzIGNoYWlucyB0byBiZSBmb3JtZWQuXG4gKlxuICogVGhlIHZhbGlkIGNvbnN0cmFpbnQgYWxsb3dzIGFuIGFsd2F5cyB2YWxpZCBxdWVyeSB0byBiZSBwZXJmb3JtZWQuIHRoaXMgY29uc3RyYWludCBpcyBtYWlubHkgaW50ZW5kZWQgZm9yIHRlc3RpbmcuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2NvbnN0cmFpbnRzL3ZhbGlkLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db25zdHJhaW50c1xuICogQHN1bW1hcnkgQSBjb25zdHJhaW50IHRoYXQgYWx3YXlzIHZhbGlkXG4gKi9cbmNsYXNzIFZhbGlkIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJhaW50IHtcblx0LyoqXG5cdCAqIHRoaXMgbWV0aG9kIHJldHVybiBhIHByb21pc2UgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSBjaGVjay5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICovXG5cdGlzVmFsaWQodmFsdWUpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybnMge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbnN0cmFpbnRzL3ZhbGlkXCIpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBBYnN0cmFjdE9wZXJhdG9yIH0gZnJvbSBcIi4vYWJzdHJhY3RvcGVyYXRvci5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IE9yT3BlcmF0b3IgfTtcblxuLyoqXG4gKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBkZWZpbmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJ5IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLlxuICpcbiAqIFRoZSB1bmlmb3JtIEFQSSBvZiB0aGUgY29uc3RyYWludHMgYWxsb3dzIGNoYWlucyB0byBiZSBmb3JtZWQuXG4gKlxuICogVGhlIE9yT3BlcmF0b3IgaXMgdXNlZCB0byBsaW5rIHNldmVyYWwgY29uc3RyYWludHMuIFRoZSBjb25zdHJhaW50IGlzIGZ1bGZpbGxlZCBpZiBvbmUgb2YgdGhlIGNvbnN0cmFpbnRzIGlzIGZ1bGZpbGxlZC5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvY29uc3RyYWludHMvb3JvcGVyYXRvci5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQG1lbWJlck9mIE1vbnN0ZXIuQ29uc3RyYWludHNcbiAqIEBzdW1tYXJ5IEEgb3Igb3BlcmF0b3JcbiAqL1xuY2xhc3MgT3JPcGVyYXRvciBleHRlbmRzIEFic3RyYWN0T3BlcmF0b3Ige1xuXHQvKipcblx0ICogdGhpcyBtZXRob2QgcmV0dXJuIGEgcHJvbWlzZSBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKi9cblx0aXNWYWxpZCh2YWx1ZSkge1xuXHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRsZXQgYTtcblx0XHRcdGxldCBiO1xuXG5cdFx0XHRzZWxmLm9wZXJhbnRBXG5cdFx0XHRcdC5pc1ZhbGlkKHZhbHVlKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGEgPSBmYWxzZTtcblx0XHRcdFx0XHQvKiogYiBoYXMgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZCBhbmQgd2FzIG5vdCB0cnVlICovXG5cdFx0XHRcdFx0aWYgKGIgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0XHRyZWplY3QoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRzZWxmLm9wZXJhbnRCXG5cdFx0XHRcdC5pc1ZhbGlkKHZhbHVlKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGIgPSBmYWxzZTtcblx0XHRcdFx0XHQvKiogYiBoYXMgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZCBhbmQgd2FzIG5vdCB0cnVlICovXG5cdFx0XHRcdFx0aWYgKGEgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0XHRyZWplY3QoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludHMvb3Itb3BlcmF0b3JcIik7XG5cdH1cbn1cbiIsICJpbXBvcnQge1ZhbGlkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL3ZhbGlkLm1qc1wiO1xuaW1wb3J0IHtJbnZhbGlkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2ludmFsaWQubWpzXCI7XG5pbXBvcnQge09yT3BlcmF0b3J9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvb3JvcGVyYXRvci5tanNcIjtcblxuZGVzY3JpYmUoJ09yT3BlcmF0b3InLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmlzVmFsaWQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbbmV3IFZhbGlkKCksIG5ldyBWYWxpZCgpLCB0cnVlXSxcbiAgICAgICAgICAgIFtuZXcgVmFsaWQoKSwgbmV3IEludmFsaWQoKSwgdHJ1ZV0sXG4gICAgICAgICAgICBbbmV3IEludmFsaWQoKSwgbmV3IFZhbGlkKCksIHRydWVdLFxuICAgICAgICAgICAgW25ldyBJbnZhbGlkKCksIG5ldyBJbnZhbGlkKCksIGZhbHNlXVxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnY29uc3RyYWludC5pc1ZhbGlkKCkgc2hvdWxkIHJldHVybiAnICsgYywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBjb25zdHJhaW50ID0gbmV3IE9yT3BlcmF0b3IoYSwgYik7XG4gICAgICAgICAgICAgICAgY29uc3RyYWludC5pc1ZhbGlkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGMgPT09IHRydWUgPyBkb25lKCkgOiBkb25lKG5ldyBFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGMgPT09IHRydWUgPyBkb25lKG5ldyBFcnJvcigpKSA6IGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xufSk7XG5cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RDb25zdHJhaW50IH0gZnJvbSBcIi4vYWJzdHJhY3QubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBJc09iamVjdCB9O1xuXG4vKipcbiAqIENvbnN0cmFpbnRzIGFyZSB1c2VkIHRvIGRlZmluZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgYnkgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuXG4gKlxuICogVGhlIHVuaWZvcm0gQVBJIG9mIHRoZSBjb25zdHJhaW50cyBhbGxvd3MgY2hhaW5zIHRvIGJlIGZvcm1lZC5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvY29uc3RyYWludHMvaXNvYmplY3QubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbnN0cmFpbnRzXG4gKiBAc3VtbWFyeSBBIGNvbnN0cmFpbnQgdG8gY2hlY2sgaWYgYSB2YWx1ZSBpcyBhbiBvYmplY3RcbiAqL1xuY2xhc3MgSXNPYmplY3QgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cmFpbnQge1xuXHQvKipcblx0ICogdGhpcyBtZXRob2QgcmV0dXJuIGEgcHJvbWlzZSBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKi9cblx0aXNWYWxpZCh2YWx1ZSkge1xuXHRcdGlmIChpc09iamVjdCh2YWx1ZSkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdCh2YWx1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb25zdHJhaW50L2lzLW9iamVjdFwiKTtcblx0fVxufVxuIiwgImltcG9ydCB7SXNPYmplY3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvaXNvYmplY3QubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnSXNPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmlzVmFsaWQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGNvbnN0cmFpbnQgPSBuZXcgSXNPYmplY3QoKVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmVzb2x2ZSBwcm9taXNlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnQuaXNWYWxpZCh7fSkudGhlbihyID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3QocikuaXMuYSgnb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJzaG91bGQgbm90IHJlYWNoZWQ6IFwiICsgZSkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IEFic3RyYWN0T3BlcmF0b3IgfSBmcm9tIFwiLi9hYnN0cmFjdG9wZXJhdG9yLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgQW5kT3BlcmF0b3IgfTtcblxuLyoqXG4gKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBkZWZpbmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJ5IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLlxuICpcbiAqIFRoZSB1bmlmb3JtIEFQSSBvZiB0aGUgY29uc3RyYWludHMgYWxsb3dzIGNoYWlucyB0byBiZSBmb3JtZWQuXG4gKlxuICogVGhlIEFuZE9wZXJhdG9yIGlzIHVzZWQgdG8gbGluayBzZXZlcmFsIGNvbnN0cmFpbnRzLiBUaGUgY29uc3RyYWludCBpcyBmdWxmaWxsZWQgaWYgYWxsIGNvbnN0cmFpbnRzIG9mIHRoZSBvcGVyYXRvcnMgYXJlIGZ1bGZpbGxlZC5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvY29uc3RyYWludHMvYW5kb3BlcmF0b3IubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkNvbnN0cmFpbnRzXG4gKiBAc3VtbWFyeSBBIGFuZCBvcGVyYXRvciBjb25zdHJhaW50XG4gKi9cbmNsYXNzIEFuZE9wZXJhdG9yIGV4dGVuZHMgQWJzdHJhY3RPcGVyYXRvciB7XG5cdC8qKlxuXHQgKiB0aGlzIG1ldGhvZCByZXR1cm4gYSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2hlY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRpc1ZhbGlkKHZhbHVlKSB7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKFtcblx0XHRcdHRoaXMub3BlcmFudEEuaXNWYWxpZCh2YWx1ZSksXG5cdFx0XHR0aGlzLm9wZXJhbnRCLmlzVmFsaWQodmFsdWUpLFxuXHRcdF0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludHMvYW5kLW9wZXJhdG9yXCIpO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtWYWxpZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy92YWxpZC5tanNcIjtcbmltcG9ydCB7SW52YWxpZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pbnZhbGlkLm1qc1wiO1xuaW1wb3J0IHtBbmRPcGVyYXRvcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9hbmRvcGVyYXRvci5tanNcIjtcblxuZGVzY3JpYmUoJ0FuZE9wZXJhdG9yJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy5pc1ZhbGlkKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW25ldyBWYWxpZCgpLCBuZXcgVmFsaWQoKSwgdHJ1ZV0sXG4gICAgICAgICAgICBbbmV3IFZhbGlkKCksIG5ldyBJbnZhbGlkKCksIGZhbHNlXSxcbiAgICAgICAgICAgIFtuZXcgSW52YWxpZCgpLCBuZXcgVmFsaWQoKSwgZmFsc2VdLFxuICAgICAgICAgICAgW25ldyBJbnZhbGlkKCksIG5ldyBJbnZhbGlkKCksIGZhbHNlXVxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnY29uc3RyYWludC5pc1ZhbGlkKCkgc2hvdWxkIHJldHVybiAnICsgYywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBjb25zdHJhaW50ID0gbmV3IEFuZE9wZXJhdG9yKGEsIGIpO1xuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQuaXNWYWxpZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjID09PSB0cnVlID8gZG9uZSgpIDogZG9uZShuZXcgRXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjID09PSB0cnVlID8gZG9uZShuZXcgRXJyb3IoKSkgOiBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcbn0pO1xuXG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgc2NodWthaSBHbWJIIGFuZCBjb250cmlidXRvcnMgMjAyMy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFHUEx2MyBMaWNlbnNlLlxuICogTGljZW5zZSB0ZXh0IGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RDb25zdHJhaW50IH0gZnJvbSBcIi4vYWJzdHJhY3QubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBJc0FycmF5IH07XG5cbi8qKlxuICogQ29uc3RyYWludHMgYXJlIHVzZWQgdG8gZGVmaW5lIGNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldCBieSB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS5cbiAqXG4gKiBUaGUgdW5pZm9ybSBBUEkgb2YgdGhlIGNvbnN0cmFpbnRzIGFsbG93cyBjaGFpbnMgdG8gYmUgZm9ybWVkLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9jb25zdHJhaW50cy9pc2FycmF5Lm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5Db25zdHJhaW50c1xuICogQHN1bW1hcnkgQSBjb25zdHJhaW50IHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgYW4gYXJyYXlcbiAqL1xuY2xhc3MgSXNBcnJheSBleHRlbmRzIEFic3RyYWN0Q29uc3RyYWludCB7XG5cdC8qKlxuXHQgKiB0aGlzIG1ldGhvZCByZXR1cm4gYSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2hlY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRpc1ZhbGlkKHZhbHVlKSB7XG5cdFx0aWYgKGlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJucyB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludC9pcy1hcnJheVwiKTtcblx0fVxufVxuIiwgImltcG9ydCB7SXNBcnJheX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pc2FycmF5Lm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ0lzQXJyYXknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmlzVmFsaWQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGNvbnN0cmFpbnQgPSBuZXcgSXNBcnJheSgpXG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXNvbHZlIHByb21pc2UnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3RyYWludC5pc1ZhbGlkKFsxLDIsM10pLnRoZW4ociA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHIpLmlzLmEoJ2FycmF5Jyk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJzaG91bGQgbm90IHJlYWNoZWQ6IFwiICsgZSkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICJpbXBvcnQge1ZhbGlkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL3ZhbGlkLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ1ZhbGlkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy5pc1ZhbGlkKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBjb25zdHJhaW50ID0gbmV3IFZhbGlkKClcblxuICAgICAgICBpdCgnc2hvdWxkIHJlc29sdmUgcHJvbWlzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50LmlzVmFsaWQoe30pLnRoZW4ociA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJzaG91bGQgbm90IHJlYWNoZWQ6IFwiICsgZSkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge05vZGV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7Tm9kZUxpc3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZWxpc3QubWpzXCI7XG5cbmRlc2NyaWJlKCdOb2RlTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBkZXNjcmliZSgnI2NvbnN0cnVjdG9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhbiBlbXB0eSBOb2RlTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdCgpO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZUxpc3Quc2l6ZSkudG8uZXF1YWwoMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY3JlYXRlIGEgTm9kZUxpc3QgZnJvbSBhbiBhcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdChbXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpLFxuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKSxcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JylcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZUxpc3Quc2l6ZSkudG8uZXF1YWwoMyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY3JlYXRlIGEgTm9kZUxpc3QgZnJvbSBhIE5vZGVMaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG5vZGVMaXN0ID0gbmV3IE5vZGVMaXN0KFtcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JyksXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpLFxuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKVxuICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIGxldCBub2RlTGlzdDIgPSBuZXcgTm9kZUxpc3Qobm9kZUxpc3QpO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZUxpc3QyLnNpemUpLnRvLmVxdWFsKDMpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgfSk7XG4gICAgXG4gICAgIFxuICAgIGl0KCdjcmVhdGUgTm9kZUxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKSkuaXMuaW5zdGFuY2VvZihOb2RlTGlzdCk7XG4gICAgfSlcblxuICAgIGl0KCdhZGQgTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLmFkZChuZXcgTm9kZSgpKSkudG8uYmUuaW5zdGFuY2VvZihOb2RlTGlzdCk7XG4gICAgfSlcblxuICAgIGl0KCdyZW1vdmUgTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLnJlbW92ZShuZXcgTm9kZSgpKSkudG8uYmUuaW5zdGFuY2VvZihOb2RlTGlzdCk7XG4gICAgfSlcblxuICAgIGl0KCdoYXMgdW5rbm93biBOb2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkuaGFzKG5ldyBOb2RlKSkudG8uYmUuZmFsc2U7XG4gICAgfSlcblxuICAgIGl0KCdoYXMgYWRkZWQgTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbiA9IG5ldyBOb2RlO1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkuYWRkKG4pLmhhcyhuKSkudG8uYmUudHJ1ZTtcbiAgICB9KVxuICAgIFxuICAgIGl0KCd0b1N0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbiA9IG5ldyBOb2RlO1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkuYWRkKG5ldyBOb2RlKCdhJykuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJ2InKSkpLnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKCdhXFxuIFx1MjUxNGInKTtcbiAgICB9KVxuXG4gICAgaXQoJ3Rocm93IGV4Y2VwdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBOb2RlTGlzdCgpLmFkZCgxKSkudG8udGhyb3coRXJyb3IpO1xuICAgIH0pXG5cblxufSk7IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtCYXNlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQge2luc3RhbmNlU3ltYm9sfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0YW50cy5tanNcIjtcblxuXG5cbmNsYXNzIEJhc2VEaWZmZXJlbnRSZWFsbSBleHRlbmRzIE9iamVjdCB7XG4gICAgXG5cbiAgICBzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG4gICAgICAgIHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9iYXNlXCIpO1xuICAgIH1cblxuXG59XG5cbmNsYXNzIFN1YmNsYXNzIGV4dGVuZHMgQmFzZURpZmZlcmVudFJlYWxtIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgc3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuICAgICAgICByZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvc3ViY2xhc3NcIik7XG4gICAgfVxufVxuXG5kZXNjcmliZSgnQmFzZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCduZXcgQmFzZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnaXMgaW5zdGFuY2Ugb2YgQmFzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQmFzZSkudG8uYmUuaW5zdGFuY2VPZihCYXNlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2lzIGluc3RhbmNlIG9mIE9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQmFzZSkudG8uYmUuaW5zdGFuY2VPZihPYmplY3QpO1xuICAgICAgICB9KTtcblxuICAgIH0pXG4gICAgXG4gICAgZGVzY3JpYmUoJ2luc3RhbmNvZicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnaXMgaW5zdGFuY2Ugb2YgQmFzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQmFzZSkudG8uYmUuaW5zdGFuY2VPZihCYXNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpdCgnc3ViY2xhc3MgaW5zdGFuY2VvZicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKG5ldyBTdWJjbGFzcyBpbnN0YW5jZW9mIEJhc2UpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QodHJ1ZSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSAge1xuICAgICAgICAgICAgICAgIGV4cGVjdChmYWxzZSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cbn0pIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7TWVkaWFUeXBlLCBwYXJzZU1lZGlhVHlwZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9tZWRpYXR5cGUubWpzXCI7XG5cbmRlc2NyaWJlKCdEYXRhdXJsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgW1xuICAgICAgICBbXCIqLypcIixcIipcIiwnKiddLFxuICAgICAgICBbXCJ0ZXh0LypcIixcInRleHRcIiwnKiddLFxuICAgICAgICBbXCIqL3Rlc3RcIixcIipcIiwndGVzdCddLFxuICAgICAgICBbXCJpbWFnZS9wbmdcIiwgXCJpbWFnZVwiLCBcInBuZ1wiXSxcbiAgICAgICAgW1wiYXVkaW8vbXAzXCIsIFwiYXVkaW9cIiwgXCJtcDNcIl0sXG4gICAgICAgIFtcInZpZGVvL21wZWdcIiwgXCJ2aWRlb1wiLCBcIm1wZWdcIl0sXG4gICAgICAgIFtcInRleHQvcGxhaW5cIiwgXCJ0ZXh0XCIsIFwicGxhaW5cIl0sXG4gICAgICAgIFtcInRleHQvaHRtbFwiLCBcInRleHRcIiwgXCJodG1sXCJdLFxuICAgICAgICBbXCJ0ZXh0L2h0bWw7Y2hhcnNldD1VUy1BU0NJSVwiLCBcInRleHRcIiwgXCJodG1sXCJdLFxuICAgICAgICBbXCJ0ZXh0L2h0bWw7Y2hhcnNldD1cXFwiVVMtQVNDSUlcXFwiXCIsIFwidGV4dFwiLCBcImh0bWxcIl0sXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgaXQoJ3BhcnNlTWVkaWFUeXBlKCcgKyBhICsgJyknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGQgPSBwYXJzZU1lZGlhVHlwZShhKTtcblxuICAgICAgICAgICAgZXhwZWN0KGQpLmlzLmluc3RhbmNlb2YoTWVkaWFUeXBlKTtcbiAgICAgICAgICAgIGV4cGVjdChkLnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgZXhwZWN0KGQudHlwZSkudG8uYmUuZXF1YWwoYik7XG4gICAgICAgICAgICBleHBlY3QoZC5zdWJ0eXBlKS50by5iZS5lcXVhbChjKTtcbiAgICAgICAgICAgIGV4cGVjdChkLnBhcmFtZXRlcikuaXMuaW5zdGFuY2VvZihNYXApXG4gICAgICAgIH0pXG5cbiAgICB9KTtcblxuICAgIFtcbiAgICAgICAgW1widmlkZW8vXCJdLFxuICAgICAgICBbXCJ0ZXh0XCJdLFxuICAgICAgICBbXCIvbXAzXCJdLFxuICAgICAgICBbXCJ0ZXh0L2h0bWw7Y2hhcnNldFVTLUFTQ0lJXCJdLFxuICAgICAgICBbXCJ0ZXh0L2h0bWw7Y2hhcnNldFxcXCJVUy1BU0NJSVxcXCJcIl0sXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgIGl0KCcnICsgYSArICcgc2hvdWxkIHRocm93IGV4Y2VwdGlvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgZXhwZWN0KCgpPT57cGFyc2VNZWRpYVR5cGUoYSl9KS50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgXG4gICAgICAgIH0pXG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7VG9rZW5MaXN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3Rva2VubGlzdC5tanNcIjtcblxuXG5kZXNjcmliZSgnVG9rZW5MaXN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy50b1N0cmluZygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgdG9rZW5MaXN0ID0gbmV3IFRva2VuTGlzdCgpXG4gICAgICAgIGxldCByZXN1bHQgPSB0b2tlbkxpc3QudG9TdHJpbmcoKTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmJlLmEoJ3N0cmluZycpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2V0IGFuZCByZW1vdmUgcmV0dXJuIGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uYmUuYSgnc3RyaW5nJyk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ2luaXQgd2l0aCBzdHJpbmcgaXRlcmFibGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoJyArIHR5cGVvZiBhICsgJykgdGhyb3cgVHlwZUVycm9yICcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IHRva2VucyA9IFtcImFiY1wiLCBcImRlZlwiLCBcImdoaVwiXVxuICAgICAgICAgICAgbGV0IGxpc3QgPSBuZXcgVG9rZW5MaXN0KHRva2Vucyk7XG4gICAgICAgICAgICBleHBlY3QobGlzdC50b1N0cmluZygpKS5pcy5lcXVhbChcImFiYyBkZWYgZ2hpXCIpO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2luaXQgd2l0aCBpdGVyYWJsZSB3aXRob3V0IHN0cmluZyB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoJyArIHR5cGVvZiBhICsgJykgdGhyb3cgVHlwZUVycm9yICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB0b2tlbnMgPSBbXCJhYmNcIiwgNCwgXCJnaGlcIl1cbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgVG9rZW5MaXN0KHRva2VucykpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnaW5pdCB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgLy8gY3VycmVudCwgZXhwZWN0ZWQsIHR5cGVycm9yXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0MVwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ3Rlc3QxIHRlc3QyJywgXCJ0ZXN0MSB0ZXN0MlwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBcIlwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIHVuZGVmaW5lZCwgdHJ1ZV0sIC8vIE5hTlxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbMiwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgWzQuNSwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFt7fSwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtbXCIxXCIsIFwiMlwiLCBcIjNcIl0sICcxIDIgMycsIGZhbHNlXSwgLy8gaXRlcmFibGUgc3RyaW5nc1xuICAgICAgICAgICAgW1sxLCAyLCAzXSwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBpdCgnbmV3IFRva2VuTGlzdCgnICsgdHlwZW9mIGEgKyAnKSB0aHJvdyBUeXBlRXJyb3IgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IFRva2VuTGlzdChhKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QobmV3IFRva2VuTGlzdChhKS50b1N0cmluZygpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdpdGVyYXRvciBwcm90b2NvbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbGlzdDtcbiAgICAgICAgaXQoJy5hZGQoJyArIFwic2Vjb25kXCIgKyAnKSBzaG91bGQgcmV0dXJuIFRva2VuTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5nZXRJdGVyYXRvcigpKS50by5iZS5hbignb2JqZWN0Jyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcuYWRkKCcgKyBcInNlY29uZFwiICsgJykgc2hvdWxkIHJldHVybiBUb2tlbkxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChbLi4ubGlzdF0pLnRvLmJlLmFuKCdhcnJheScpO1xuICAgICAgICAgICAgZXhwZWN0KFsuLi5saXN0XSkudG8uYmUuYW4oJ2FycmF5JykudG8uaW5jbHVkZSgnc3RhcnQnKS50by5pbmNsdWRlKCdlbmQnKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5lbnRyaWVzKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IGxpc3Q7XG4gICAgICAgIGl0KCcuZW50cmllcygpIHNob3VsZCByZXR1cm4gQXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0XCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuZW50cmllcygpKS50by5iZS5hbignYXJyYXknKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJy5lbnRyaWVzKCkgc2hvdWxkIHJldHVybiBBcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgZW5kXCIpLmVudHJpZXMoKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0KS50by5iZS5hbignYXJyYXknKS50by5pbmNsdWRlKCdzdGFydCcpLnRvLmluY2x1ZGUoJ2VuZCcpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmZvckVhY2goKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbGlzdDtcbiAgICAgICAgaXQoJy5mb3JFYWNoKCkgc2hvdWxkIGl0ZXJhdGUgb3ZlciB0b2tlbmxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcImFhYSBiYmIgY2NjIGRkZCBlZWUgZmZmXCIpO1xuXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIlxuICAgICAgICAgICAgbGlzdC5mb3JFYWNoKChhKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IFwiIVwiICsgYSArIFwiIVwiO1xuICAgICAgICAgICAgICAgIGV4cGVjdChhKS50by5iZS5hbignc3RyaW5nJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLmlzLmVxdWFsKFwiIWFhYSEhYmJiISFjY2MhIWRkZCEhZWVlISFmZmYhXCIpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcuZW50cmllcygpIHNob3VsZCByZXR1cm4gQXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IGVuZFwiKS5lbnRyaWVzKCk7XG4gICAgICAgICAgICBleHBlY3QobGlzdCkudG8uYmUuYW4oJ2FycmF5JykudG8uaW5jbHVkZSgnc3RhcnQnKS50by5pbmNsdWRlKCdlbmQnKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NvbnRhaW5zIHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGxpc3RcbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3Qoc3RhcnQsIG1pZGRsZSBlbmQpIHNob3VsZCBjb250YWluIG1pZGRsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgbWlkZGxlIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKCdzdGFydCcpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnMoJ21pZGRsZScpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnMoJ2VuZCcpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnMoWydlbmQnLCAnc3RhcnQnLCAnbWlkZGxlJ10pKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChzdGFydCwgbWlkZGxlIGVuZCkgc2hvdWxkIG5vdCBjb250YWluIHh5eicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgbWlkZGxlIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKCd4eXonKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5jb250YWlucyhbJ2VuZCcsICdzdGFydCcsICdtaWRkbGUnLCAneHl6J10pKS50by5iZS5mYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3Qoc3RhcnQsIG1pZGRsZSBlbmQpIHNob3VsZCBub3QgY29udGFpbiB1bmRlZmluZWQgbnVsbCBOYU4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IG1pZGRsZSBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5jb250YWlucyh1bmRlZmluZWQpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKHBhcnNlSW50KFwiYVwiKSkpLnRvLmJlLmZhbHNlOyAvLyBOYU5cbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKG51bGwpKS50by5iZS5mYWxzZTsgLy8gTmFOXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgndG9nZ2xlIHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGxpc3RcbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3Qoc3RhcnQgbWlkZGxlIGVuZCkudG9nZ2xlKG5ldy12YWx1ZSkgc2hvdWxkIGNvbnRhaW4gbmV3LXZhbHVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBtaWRkbGUgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QudG9nZ2xlKCduZXctdmFsdWUnKS50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IG1pZGRsZSBlbmQgbmV3LXZhbHVlXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChzdGFydCBtaWRkbGUgZW5kKS50b2dnbGUobWlkZGxlKSBzaG91bGQgbm90IGNvbnRhaW4gbWlkZGxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBtaWRkbGUgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QudG9nZ2xlKCdtaWRkbGUnKS50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IGVuZFwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoKS50b2dnbGUoKSBzaG91bGQgLi4uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBUb2tlbkxpc3QoXCJhYmMgZGVmIGdoaVwiKS50b2dnbGUoXCJkZWYgeHl6XCIpLnRvU3RyaW5nKCkpLnRvLmVxdWFsKFwiYWJjIGdoaSB4eXpcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KCkudG9nZ2xlKCkgc2hvdWxkIC4uLicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgVG9rZW5MaXN0KFwiYWJjIGRlZiBnaGlcIikudG9nZ2xlKFtcImFiY1wiLCBcInh5elwiXSkudG9TdHJpbmcoKSkudG8uZXF1YWwoXCJkZWYgZ2hpIHh5elwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoKS50b2dnbGUoKSBzaG91bGQgLi4uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBUb2tlbkxpc3QoXCJhYmMgZGVmIGdoaVwiKS50b2dnbGUodW5kZWZpbmVkKS50b1N0cmluZygpKS50by5lcXVhbChcImFiYyBkZWYgZ2hpXCIpO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbWFuaXB1bGF0ZSB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IGxpc3RcblxuICAgICAgICBpdCgncmVzdWx0IFRva2VuTGlzdChcIicgKyBcInN0YXJ0XCIgKyAnXCIpIHNob3VsZCBiZSBcIicgKyBcInN0YXJ0XCIgKyAnXCInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0XCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydFwiKVxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnLmFkZCgnICsgXCJzZWNvbmRcIiArICcpIHNob3VsZCByZXR1cm4gVG9rZW5MaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmFkZChcInNlY29uZFwiKSkudG8uYmUuYW4uaW5zdGFuY2VvZihUb2tlbkxpc3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnLmFkZCgnICsgXCJzZWNvbmRcIiArICcpLnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBcInN0YXJ0IHNlY29uZFwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5hZGQoXCJzZWNvbmRcIikudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCBzZWNvbmRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcuYWRkKCcgKyBcInNlY29uZCB0aGlyZFwiICsgJykudG9TdHJpbmcoKSBzaG91bGQgcmV0dXJuIFwic3RhcnQgc2Vjb25kIHRoaXJkXCIgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmFkZChcInNlY29uZCB0aGlyZFwiKS50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IHNlY29uZCB0aGlyZFwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJy5hZGQoJyArIFwiW3NlY29uZCx0aGlyZF1cIiArICcpLnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBcInN0YXJ0IHNlY29uZCB0aGlyZFwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5hZGQoW1wic2Vjb25kXCIsIFwidGhpcmRcIl0pLnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwic3RhcnQgc2Vjb25kIHRoaXJkXCIpO1xuICAgICAgICB9KTtcblxuXG4gICAgICAgIGl0KCcuY2xlYXIoKS50b1N0cmluZygpIHNob3VsZCBcIlwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5hZGQoW1wic2Vjb25kXCIsIFwidGhpcmRcIl0pLmNsZWFyKCkudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJcIik7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpLnJlbW92ZSgnICsgXCJzZWNvbmRcIiArICcpIHNob3VsZCByZXR1cm4gVG9rZW5MaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QucmVtb3ZlKFwic2Vjb25kXCIpKS50by5iZS5hbi5pbnN0YW5jZW9mKFRva2VuTGlzdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKS5yZW1vdmUoJyArIFwic2Vjb25kXCIgKyAnKS50b1N0cmluZygpIHNob3VsZCByZXR1cm4gXCJzdGFydCB0aGlyZCBlbmRcIiAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5yZW1vdmUoXCJzZWNvbmRcIikudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCB0aGlyZCBlbmRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKS5yZW1vdmUoJyArIFwic2Vjb25kIHRoaXJkXCIgKyAnKS50b1N0cmluZygpIHNob3VsZCByZXR1cm4gXCJzdGFydCBlbmRcIiAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5yZW1vdmUoXCJzZWNvbmQgdGhpcmRcIikudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCBlbmRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKS5yZW1vdmUoJyArIFwiW3NlY29uZCx0aGlyZF1cIiArICcpLnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBcInN0YXJ0IGVuZFwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnJlbW92ZShbXCJzZWNvbmRcIiwgXCJ0aGlyZFwiXSkudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCBlbmRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKS5yZXBsYWNlKHNlY29uZCwgeHl6KS50b1N0cmluZygpIHNob3VsZCByZXR1cm4gXCJzdGFydCB4eXogdGhpcmQgZW5kXCIgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QucmVwbGFjZShcInNlY29uZFwiLCBcInh5elwiKSkudG8uYmUuaW5zdGFuY2VPZihUb2tlbkxpc3QpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCB4eXogdGhpcmQgZW5kXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIikucmVwbGFjZShlbmQsIHh5eikudG9TdHJpbmcoKSBzaG91bGQgcmV0dXJuIFwic3RhcnQgc2Vjb25kIHRoaXJkIHh5elwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnJlcGxhY2UoXCJlbmRcIiwgXCJ4eXpcIikpLnRvLmJlLmluc3RhbmNlT2YoVG9rZW5MaXN0KTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwic3RhcnQgc2Vjb25kIHRoaXJkIHh5elwiKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHtpc09iamVjdH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7T2JzZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5cbmltcG9ydCB7UHJveHlPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuXG5kZXNjcmliZSgnUHJveHlPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdjcmVhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvID0gbmV3IFByb3h5T2JzZXJ2ZXIoe30pO1xuICAgICAgICAgICAgZXh0ZW5kKG8uZ2V0U3ViamVjdCgpLCB7YTogNH0pO1xuICAgICAgICAgICAgZXhwZWN0KG8uZ2V0UmVhbFN1YmplY3QoKSkuaXMuZXFsKHthOiA0fSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3NldFN1YmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcnVuIG9ic2VydmVyJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBvID0gbmV3IFByb3h5T2JzZXJ2ZXIoe2E6IDF9KTtcbiAgICAgICAgICAgIGV4cGVjdChvLmdldFJlYWxTdWJqZWN0KCkpLmlzLmVxbCh7YTogMX0pO1xuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgby5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdCh0aGlzKSAmJiB0aGlzIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcikge1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgb25lIGNoYW5nZSBhcyBub3RpZnkgcnVucyBsYXRlclxuICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoXCJjYWxsZWQgZm9yIGVycm9yXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJ0aGlzIGlzIG5vdCBQcm94eU9ic2VydmVyXCIpKVxuICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgIG8uZ2V0U3ViamVjdCgpLmMgPSA0O1xuICAgICAgICAgICAgZXhwZWN0KG8uZ2V0UmVhbFN1YmplY3QoKSkuaXMuZXFsKHthOiAxLCBjOiA0fSk7XG5cbiAgICAgICAgICAgIG8uc2V0U3ViamVjdCh7YjogMn0pO1xuICAgICAgICAgICAgZXhwZWN0KG8uZ2V0UmVhbFN1YmplY3QoKSkuaXMuZXFsKHtiOiAyfSk7XG5cbiAgICAgICAgICAgIG8uZ2V0U3ViamVjdCgpLmQgPSA1O1xuICAgICAgICAgICAgZXhwZWN0KG8uZ2V0UmVhbFN1YmplY3QoKSkuaXMuZXFsKHtiOiAyLCBkOiA1fSk7XG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjcmVhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvID0gbmV3IFByb3h5T2JzZXJ2ZXIoe30pO1xuICAgICAgICAgICAgZXhwZWN0KG8pLmlzLmluc3RhbmNlT2YoUHJveHlPYnNlcnZlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3Byb3h5IG9iamVjdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdQcm94eSBvYmplY3RzIHNob3VsZCBub3QgYmUgcmVjb21taXR0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgbyA9IG5ldyBQcm94eU9ic2VydmVyKHthOiB7YjogdHJ1ZX19KTtcbiAgICAgICAgICAgIG8uZ2V0U3ViamVjdCgpLmEuYiA9IG8uZ2V0U3ViamVjdCgpO1xuICAgICAgICAgICAgby5nZXRTdWJqZWN0KCkuYS5iLmEuYiA9IGZhbHNlO1xuICAgICAgICAgICAgLy9leHBlY3Qoby5nZXRTdWJqZWN0KCk9PT1wLmdldFN1YmplY3QoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbm90aWZ5IG9ic2VydmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGluZm9ybSBvYnNlcnZlcicsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgICAgICAvLyB0aGUgbWV0aG9kIGlzIGNhbGxlZCB0d2ljZSwgb25jZSBmb3IgZGVmaW5lUHJvcGVydHkgYW5kIGZvciBzZXQgdHJhcFxuICAgICAgICAgICAgbGV0IG8gPSBuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QodGhpcykgJiYgdGhpcyBpbnN0YW5jZW9mIFByb3h5T2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihcInRoaXMgaXMgbm90IFByb3h5T2JzZXJ2ZXJcIikpXG4gICAgICAgICAgICB9LCB0cnVlKVxuXG4gICAgICAgICAgICBsZXQgcmVhbFN1YmplY3QgPSB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGQ6IDVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBwID0gbmV3IFByb3h5T2JzZXJ2ZXIocmVhbFN1YmplY3QpO1xuICAgICAgICAgICAgZXhwZWN0KHApLmlzLmluc3RhbmNlT2YoUHJveHlPYnNlcnZlcik7XG4gICAgICAgICAgICBleHBlY3QocC5hdHRhY2hPYnNlcnZlcihvKSkuaXMuaW5zdGFuY2VPZihQcm94eU9ic2VydmVyKTtcblxuICAgICAgICAgICAgbGV0IHMgPSBwLmdldFN1YmplY3QoKTtcbiAgICAgICAgICAgIGxldCByID0gcC5nZXRSZWFsU3ViamVjdCgpO1xuXG4gICAgICAgICAgICBzLmEuZCA9IGZhbHNlO1xuICAgICAgICAgICAgcy5hLmIuZCA9IDI7XG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAc2VlIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzQzXG4gICAgICovXG4gICAgZGVzY3JpYmUoJ1JlZmxlY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2NoZWNrIFJlZmxlY3Quc2V0KCkgd2l0aCBTdWJqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHI7XG5cbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IChuZXcgUHJveHlPYnNlcnZlcih7fSkpLmdldFN1YmplY3QoKTtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwieWVzIVwiLFxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBcIm5vXCJcbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYmpbJ2RhdGEnXSA9IHZhbHVlXG4gICAgICAgICAgICAgICAgfSkudG8ubm90LnRocm93KCk7XG4gICAgICAgICAgICAgICAgLy9yID0gUmVmbGVjdC5zZXQob2JqLCAnZGF0YScsIHZhbHVlKVxuICAgICAgICAgICAgICAgIC8vZXhwZWN0KHIpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSk7XG5cblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3RoYXQnLCB7dGhhdDogJ2NoZWNrZWQxJ31dLFxuICAgICAgICAgICAgWyd0aGF0JywgbmV3IFByb3h5KHt0aGF0OiAnY2hlY2tlZDInfSwge30pXSxcbiAgICAgICAgICAgIFsndGhhdCcsIChuZXcgUHJveHlPYnNlcnZlcih7dGhhdDogJ2NoZWNrZWQzJ30pKS5nZXRSZWFsU3ViamVjdCgpXSxcbiAgICAgICAgICAgIFsndGhhdCcsIChuZXcgUHJveHlPYnNlcnZlcih7dGhhdDogJ2NoZWNrZWQ0J30pKS5nZXRTdWJqZWN0KCldXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQga2V5ID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgdGFyZ2V0ID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdjaGVjayBSZWZsZWN0LnNldCgnICsga2V5ICsgJywnICsgSlNPTi5zdHJpbmdpZnkodGFyZ2V0KSArICcpIHNob3VsZCB3cml0YWJsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWU7XG5cbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIFwiMVwiLFxuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LCBrZXkpWyd3cml0YWJsZSddLCAnd3JpdGFibGUgZm9yICcgKyB2YWx1ZSArICcgc2hvdWxkIHJldHVybiB0cnVlJykudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoUmVmbGVjdC5zZXQodGFyZ2V0LCBrZXksIHZhbHVlKSwgJ3NldCBmb3IgJyArIHZhbHVlICsgJyBzaG91bGQgcmV0dXJuIHRydWUnKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCwga2V5KVsnd3JpdGFibGUnXSwgJ3dyaXRhYmxlIGZvciAnICsgdmFsdWUgKyAnIHNob3VsZCByZXR1cm4gdHJ1ZScpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ25vdGlmeSBvYnNlcnZlciB3aXRoIGNoYW5nZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG9yaWdpbmFsLCBvYnNlcnZlciwgcHJveHk7XG5cbiAgICAgICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsID0ge307XG4gICAgICAgICAgICBwcm94eSA9IG5ldyBQcm94eU9ic2VydmVyKG9yaWdpbmFsKTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ2EnLCA0LCBKU09OLnN0cmluZ2lmeSh7YTogNH0pXSxcbiAgICAgICAgICAgIFsnYicsIDksIEpTT04uc3RyaW5naWZ5KHthOiA0LCBiOiA5fSldXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzZXQga2V5ICcgKyBhICsgJyB2YWx1ZSAnICsgYiArICcgZXhwZWN0ICcgKyBjLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgICAgIG9ic2VydmVyID0gbmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRSZWFsU3ViamVjdCgpKSkuaXMuZXF1YWwoYyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFjaE9ic2VydmVyKG9ic2VydmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICBwcm94eS5hdHRhY2hPYnNlcnZlcihvYnNlcnZlcilcbiAgICAgICAgICAgICAgICBsZXQgc3ViamVjdCA9IHByb3h5LmdldFN1YmplY3QoKVxuXG4gICAgICAgICAgICAgICAgc3ViamVjdFthXSA9IGI7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25vdGlmeSBvYnNlcnZlciAnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gcHJvbWlzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBwcm94eSA9IG5ldyBQcm94eU9ic2VydmVyKHt9KTtcbiAgICAgICAgICAgIGxldCBvYnNlcnZlciA9IG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcHJveHkuYXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpXG4gICAgICAgICAgICBleHBlY3QocHJveHkubm90aWZ5T2JzZXJ2ZXJzKCkpLmlzLmluc3RhbmNlT2YoUHJvbWlzZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG59KVxuXG4iLCAiaW1wb3J0IHtcbiAgICBWZXJzaW9uXG59IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvdmVyc2lvbi5tanNcIlxuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnVmVyc2lvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcuY29tcGFyZVRvKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWycxLjIuMycsICcxLjIuMycsIDBdLFxuICAgICAgICAgICAgWycxLjIuMicsICcxLjIuMycsIC0xXSxcbiAgICAgICAgICAgIFsnMicsICcyLjAuMCcsIDBdLFxuICAgICAgICAgICAgWycxLjIuNCcsICcxLjIuMycsIDFdXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuICcgKyBjICsgJyB3aGVuIHRoZSB2YWx1ZSAnICsgYSArICcgaXMgJyArIGIgKyAnJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgVmVyc2lvbihhKS5jb21wYXJlVG8oYikpLnRvLmJlLmVxdWFsKGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnRvU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWycxLjEuMScsICcyLjMnLCAzLCAnMS4yLjMnXSxcbiAgICAgICAgICAgIFsnMS4yLjQnLCAnMS4yLjMnLCA1LCAnMS4xLjUnXVxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gJyArIGQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IFZlcnNpb24oYSwgYiwgYykudG9TdHJpbmcoKSkudG8uYmUuZXF1YWwoZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSlcblxufSk7XG5cbiIsICJpbXBvcnQge2dldEdsb2JhbCwgZ2V0R2xvYmFsT2JqZWN0LCBnZXRHbG9iYWxGdW5jdGlvbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnR2xvYmFsJywgZnVuY3Rpb24gKCkge1xuICAgIGRlc2NyaWJlKCdnZXRHbG9iYWwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZ2xvYmFsIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB0ID0gdHlwZW9mIGdldEdsb2JhbCgpO1xuICAgICAgICAgICAgZXhwZWN0KHQpLnRvLmJlLmVxdWFsKCdvYmplY3QnKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdnZXRHbG9iYWxGdW5jdGlvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBnbG9iYWwgZnVuY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgdCA9IHR5cGVvZiBnZXRHbG9iYWxGdW5jdGlvbigncGFyc2VJbnQnKTtcbiAgICAgICAgICAgIGV4cGVjdCh0KS50by5iZS5lcXVhbCgnZnVuY3Rpb24nKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdnZXRHbG9iYWxPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZ2xvYmFsIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB0ID0gdHlwZW9mIGdldEdsb2JhbE9iamVjdCgnSlNPTicpO1xuICAgICAgICAgICAgZXhwZWN0KHQpLnRvLmJlLmVxdWFsKCdvYmplY3QnKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xufSk7XG5cbiIsICJpbXBvcnQge09ic2VydmVyTGlzdH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZlcmxpc3QubWpzXCI7XG5pbXBvcnQge09ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ09ic2VydmVyTGlzdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcuYXR0YWNoKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBPYnNlcnZlckxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgb2JzZXJ2ZXJMaXN0ID0gbmV3IE9ic2VydmVyTGlzdCgpXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gb2JzZXJ2ZXJMaXN0LmF0dGFjaChuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5iZS5pbnN0YW5jZU9mKE9ic2VydmVyTGlzdClcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5kZXRhY2goKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIE9ic2VydmVyTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvYnNlcnZlckxpc3QgPSBuZXcgT2JzZXJ2ZXJMaXN0KClcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBvYnNlcnZlckxpc3QuZGV0YWNoKG5ldyBPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmJlLmluc3RhbmNlT2YoT2JzZXJ2ZXJMaXN0KVxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLm5vdGlmeSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdFZhbHVlID0gXCJZZXMhXCI7XG4gICAgICAgIGxldCBvO1xuICAgICAgICBsZXQgb2JzZXJ2ZXJMaXN0O1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbyA9IG5ldyBPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFZhbHVlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgb2JzZXJ2ZXJMaXN0ID0gbmV3IE9ic2VydmVyTGlzdCgpXG4gICAgICAgICAgICBvYnNlcnZlckxpc3QuYXR0YWNoKG8pXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZW9mIFByb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0Lm5vdGlmeSh7fSkpLnRvLmJlLmluc3RhbmNlT2YoUHJvbWlzZSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gJyArIHJlc3VsdFZhbHVlLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgb2JqID0ge31cblxuICAgICAgICAgICAgb2JzZXJ2ZXJMaXN0Lm5vdGlmeShvYmopLnRoZW4ociA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHIpLnRvLmJlLmFuKCdhcnJheScpLnRoYXQuaW5jbHVkZXMocmVzdWx0VmFsdWUpO1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKGUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmNvbnRhaW5zKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG8xID0gbmV3IE9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBvMiA9IG5ldyBPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbm90IGNvbnRhaW4gbzEgYW5kIG8yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG9ic2VydmVyTGlzdCA9IG5ldyBPYnNlcnZlckxpc3QoKVxuXG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8xKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8yKSkudG8uYmUuZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY29udGFpbiBvMiBhbmQgbm90IG8xJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG9ic2VydmVyTGlzdCA9IG5ldyBPYnNlcnZlckxpc3QoKVxuICAgICAgICAgICAgb2JzZXJ2ZXJMaXN0LmF0dGFjaChvMilcbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3QuY29udGFpbnMobzEpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3QuY29udGFpbnMobzIpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW4gbzEgYW5kIG5vdCBvMicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvYnNlcnZlckxpc3QgPSBuZXcgT2JzZXJ2ZXJMaXN0KClcbiAgICAgICAgICAgIG9ic2VydmVyTGlzdC5hdHRhY2gobzEpXG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8xKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3QuY29udGFpbnMobzIpKS50by5iZS5mYWxzZTtcbiAgICAgICAgfSk7XG5cblxuICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW4gbzIgYW5kIG8xJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG9ic2VydmVyTGlzdCA9IG5ldyBPYnNlcnZlckxpc3QoKVxuICAgICAgICAgICAgb2JzZXJ2ZXJMaXN0LmF0dGFjaChvMikuYXR0YWNoKG8xKVxuICAgICAgICAgICAgZXhwZWN0KG9ic2VydmVyTGlzdC5jb250YWlucyhvMSkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8yKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbn0pO1xuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2VxdWlwV2l0aEludGVybmFsfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2ludGVybmFsLm1qc1wiO1xuaW1wb3J0IHtPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZlci5tanNcIjtcblxuY2xhc3MgU29tZVJhbmRvbUNsYXNzMSBleHRlbmRzIE9iamVjdCB7XG5cbiAgICBkb2l0KCkge1xuICAgICAgICByZXR1cm4gXCJkb25lXCI7XG4gICAgfVxufVxuXG5jbGFzcyBTb21lUmFuZG9tQ2xhc3MyIGV4dGVuZHMgT2JqZWN0IHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBlcXVpcFdpdGhJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIGdldCBkZWZhdWx0SW50ZXJuYWwoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXN0OiBcInRlc3RcIlxuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmRlc2NyaWJlKCdCYXNlIGluamVjdCB3aXRoIG9wdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnbmV3IFNvbWVSYW5kb21DbGFzcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnaXMgaW5zdGFuY2Ugb2YgU29tZVJhbmRvbUNsYXNzMScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgU29tZVJhbmRvbUNsYXNzMikubm90LnRvLmJlLmluc3RhbmNlT2YoU29tZVJhbmRvbUNsYXNzMSk7XG4gICAgICAgICAgICBleHBlY3QobmV3IFNvbWVSYW5kb21DbGFzczIpLnRvLmJlLmluc3RhbmNlT2YoU29tZVJhbmRvbUNsYXNzMik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdpcyBpbnN0YW5jZSBvZiBTb21lUmFuZG9tQ2xhc3MyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBTb21lUmFuZG9tQ2xhc3MxKS50by5iZS5pbnN0YW5jZU9mKFNvbWVSYW5kb21DbGFzczEpO1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBTb21lUmFuZG9tQ2xhc3MxKS5ub3QudG8uYmUuaW5zdGFuY2VPZihTb21lUmFuZG9tQ2xhc3MyKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ0V4dGVuZHMgU29tZVJhbmRvbUNsYXNzIHdpdGggaW50ZXJuYWxzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdhdHRhY2ggYW5kIG5vdGlmeSBpbnRlcm5hbCBvYnNlcnZlcicsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IFNvbWVSYW5kb21DbGFzczI7XG4gICAgICAgICAgICBjLmF0dGFjaEludGVybmFsT2JzZXJ2ZXIobmV3IE9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIGMuc2V0SW50ZXJuYWwoXCJ0ZXN0XCIsIFwidGVzdFwiKTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYXR0YWNoIGFuZCByZW1vdmUgaW50ZXJuYWwgb2JzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IFNvbWVSYW5kb21DbGFzczI7XG5cblxuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZXhwZWN0KGMuY29udGFpbnNJbnRlcm5hbE9ic2VydmVyKG9ic2VydmVyKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBjLmF0dGFjaEludGVybmFsT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuY29udGFpbnNJbnRlcm5hbE9ic2VydmVyKG9ic2VydmVyKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGMuZGV0YWNoSW50ZXJuYWxPYnNlcnZlcihvYnNlcnZlcik7XG4gICAgICAgICAgICBleHBlY3QoYy5jb250YWluc0ludGVybmFsT2JzZXJ2ZXIob2JzZXJ2ZXIpKS50by5iZS5mYWxzZTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdChcImdldEludGVybmFsIGFuZCBzZXRJbnRlcm5hbFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IFNvbWVSYW5kb21DbGFzczI7XG4gICAgICAgICAgICBleHBlY3QoYy5zZXRJbnRlcm5hbChcInRlc3RcIiwgXCJ5ZWFoXCIpKS50by5iZS5pbnN0YW5jZU9mKFNvbWVSYW5kb21DbGFzczIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0XCIpKS50by5iZS5lcXVhbChcInllYWhcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KFwiZGVhbCB3aXRoIGRlZmF1bHQgdmFsdWVzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RDbGFzcyA9IGNsYXNzIGV4dGVuZHMgT2JqZWN0IHtcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgZXF1aXBXaXRoSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBnZXQgaW50ZXJuYWxEZWZhdWx0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Q6IFwieHl6XCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IHRlc3RDbGFzcztcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdFwiKSkudG8uYmUuZXF1YWwoXCJ4eXpcIik7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3QyXCIsIFwiYWJjXCIpKS50by5iZS5lcXVhbChcImFiY1wiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJkZWFsIHdpdGggZGVmYXVsdHMgZnJvbSBkZWZhdWx0c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0Q2xhc3MgPSBjbGFzcyBleHRlbmRzIE9iamVjdCB7XG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIGVxdWlwV2l0aEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZ2V0IGludGVybmFsRGVmYXVsdHMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0OiBcInh5elwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRlc3RDbGFzczIgPSBjbGFzcyBleHRlbmRzIHRlc3RDbGFzcyB7XG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIGVxdWlwV2l0aEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZ2V0IGludGVybmFsRGVmYXVsdHMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5pbnRlcm5hbERlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0MjogXCJhYmNcIlxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYyA9IG5ldyB0ZXN0Q2xhc3MyO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0XCIpKS50by5iZS5lcXVhbChcInh5elwiKTtcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdDJcIikpLnRvLmJlLmVxdWFsKFwiYWJjXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KFwic2V0IG11bHRpcGxlIHZhbHVlc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IFNvbWVSYW5kb21DbGFzczI7XG4gICAgICAgICAgICBleHBlY3QoYy5zZXRJbnRlcm5hbHMoe1xuICAgICAgICAgICAgICAgIHRlc3Q6IFwieWVhaFwiLFxuICAgICAgICAgICAgICAgIHRlc3QyOiBcInllYWgyXCJcbiAgICAgICAgICAgIH0pKS50by5iZS5pbnN0YW5jZU9mKFNvbWVSYW5kb21DbGFzczIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0XCIpKS50by5iZS5lcXVhbChcInllYWhcIik7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3QyXCIpKS50by5iZS5lcXVhbChcInllYWgyXCIpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjLnNldEludGVybmFscyh7XG4gICAgICAgICAgICAgICAgdGVzdDI6IFwieWVhaDItbmV3XCIsXG4gICAgICAgICAgICAgICAgdGVzdDM6IFwieWVhaDNcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdFwiKSkudG8uYmUuZXF1YWwoXCJ5ZWFoXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0MlwiKSkudG8uYmUuZXF1YWwoXCJ5ZWFoMi1uZXdcIik7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3QzXCIpKS50by5iZS5lcXVhbChcInllYWgzXCIpO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge09ic2VydmFibGVRdWV1ZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZhYmxlcXVldWUubWpzXCI7XG5pbXBvcnQge09ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuXG5kZXNjcmliZSgnT2JzZXJ2YWJsZVF1ZXVlJywgZnVuY3Rpb24gKCkge1xuICAgIGRlc2NyaWJlKCdPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIG5vdGlmeScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgcXVldWUgPSBuZXcgT2JzZXJ2YWJsZVF1ZXVlO1xuICAgICAgICAgICAgbGV0IG8gPSBuZXcgT2JzZXJ2ZXIoKHEpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcXVldWUuYXR0YWNoT2JzZXJ2ZXIobyk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKCdhJykpLnRvLmJlLmluc3RhbmNlT2YoT2JzZXJ2YWJsZVF1ZXVlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KSIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge3BhcnNlRGF0YVVSTH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuXG5kZXNjcmliZSgnRGF0YXVybCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIFtcbiAgICAgICAgW1wiIGRhdGE6dGV4dC9odG1sLCUzQ2gxJTNFSGVsbG8lMkMlMjBXb3JsZCElM0MlMkZoMSUzRVwiXSxcbiAgICAgICAgW1wiZGF0YTp0ZXh0L2h0bWw7Y2hhcnNldD1VUy1BU0NJSSwlM0NoMSUzRUhlbGxvISUzQyUyRmgxJTNFXCJdLFxuICAgICAgICBbXCJkYXRhOixBJTIwYnJpZWYlMjBub3RlXCIsICdkYXRhOnRleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSSxBJTIwYnJpZWYlMjBub3RlJ10sXG4gICAgICAgIFtcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUFRTUFBQUFsUFcwaUFBQUFCbEJNVkVVQUFBRC8vLytsMlovZEFBQUFNMGxFUVZSNG5HUDQvNS9oLzErRy81OFpEckF6M0QvTWNIOHl3ODNORERlTkdlNFVnOUM5end6M2dWTE1EQS9BNlA5L0FGR0dGeWpPWFp0UUFBQUFBRWxGVGtTdVFtQ0NcIl0sXG4gICAgICAgIFtcIiBkYXRhOixIZWxsbyUyQyUyMFdvcmxkIVwiLCAnZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUksSGVsbG8lMkMlMjBXb3JsZCEnXSxcbiAgICAgICAgW1wiICAgZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBZ0FBQUFJQkFNQUFBQTJJYU80QUFBQUZWQk1WRVhrNU9UbjUrZnQ3ZTMxOWZYMjl2YjUrZm4vLy8rK0dVbVZBQUFBTFVsRVFWUUlIV05JQ25ZTFpuQUxUZ3BtTUdZSUZXWUlaVEEyWkZBelRURmxTREZWTXdWeVFobUF3c1lNQUtEYUJ5MGF4WC9pQUFBQUFFbEZUa1N1UW1DQyAgIFwiXSxcbiAgICAgICAgW1wiIGRhdGE6LEhlbGxvIFdvcmxkIVwiLCAnZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUksSGVsbG8lMjBXb3JsZCEnXSxcbiAgICAgICAgW1wiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBZ0FBQUFJQkFNQUFBQTJJYU80QUFBQUZWQk1WRVhrNU9UbjUrZnQ3ZTMxOWZYMjl2YjUrZm4vLy8rK0dVbVZBQUFBTFVsRVFWUUlIV05JQ25ZTFpuQUxUZ3BtTUdZSUZXWUlaVEEyWkZBelRURmxTREZWTXdWeVFobUF3c1lNQUtEYUJ5MGF4WC9pQUFBQUFFbEZUa1N1UW1DQ1wiXSxcbiAgICAgICAgW1wiIGRhdGE6dGV4dC9wbGFpbjtiYXNlNjQsU0dWc2JHOHNJRmR2Y214a0lRJTNEJTNEXCJdXG5cblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgaWYgKGIgPT09IHVuZGVmaW5lZCkgYiA9IGEudHJpbSgpO1xuXG5cbiAgICAgICAgaXQoJ3BhcnNlRGF0YVVSTCgnICsgYSArICcpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBleHBlY3QocGFyc2VEYXRhVVJMKGEpLnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKGIpO1xuICAgICAgICB9KVxuXG4gICAgfSk7XG5cbiAgICBbXG4gICAgICAgIFtcImRhdGF4YmFzZTY0XCJdLFxuICAgICAgICBbXCJkYXRhOkhlbGxvV29ybGRcIl0sXG4gICAgICAgIFtcImRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9LCUzQ2gxJTNFSGVsbG8hJTNDJTJGaDElM0VcIl0sXG4gICAgICAgIFtcImRhdGE6dGV4dC9odG1sO2NoYXJzZXQsJTNDaDElM0VIZWxsbyElM0MlMkZoMSUzRVwiLCBcImRhdGE6YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQVFNQUFBQWxQVzBpQUFBQUJsQk1WRVVBQUFELy8vK2wyWi9kQUFBQU0wbEVRVlI0bkdQNC81L2gvMStHLzU4WkRyQXozRC9NY0g4eXc4M05ERGVOR2U0VWc5Qzl6d3ozZ1ZMTURBL0E2UDkvQUZHR0Z5ak9YWnRRQUFBQUFFbEZUa1N1UW1DQ1wiXSxcbiAgICAgICAgW1wiXCJdLFxuICAgICAgICBbXCJodHRwOi8vd2lraXBlZGlhLm9yZ1wiXSxcbiAgICAgICAgW1wiYmFzZTY0XCJdLFxuICAgICAgICBbXCJpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUFRTUFBQUFsUFcwaUFBQUFCbEJNVkVVQUFBRC8vLytsMlovZEFBQUFNMGxFUVZSNG5HUDQvNS9oLzErRy81OFpEckF6M0QvTWNIOHl3ODNORERlTkdlNFVnOUM5end6M2dWTE1EQS9BNlA5L0FGR0dGeWpPWFp0UUFBQUFBRWxGVGtTdVFtQ0NcIl1cblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGV4Y2VwdGlvbiBwYXJzZURhdGFVUkwoJyArIGEgKyAnKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgZXhwZWN0KCgpID0+IHBhcnNlRGF0YVVSTChhKSkudGhyb3coVHlwZUVycm9yKVxuICAgICAgICB9KVxuXG4gICAgfSk7XG5cblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IHNjaHVrYWkgR21iSCBhbmQgY29udHJpYnV0b3JzIDIwMjMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBR1BMdjMgTGljZW5zZS5cbiAqIExpY2Vuc2UgdGV4dCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKi9cblxuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgdG9CaW5hcnksIGZyb21CaW5hcnkgfTtcblxuLyoqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIGZ1bmN0aW9uIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYE1vbnN0ZXIuVHlwZXMudG9CaW5hcnkoKWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGJpbmFyeVxuICogQHJldHVybiB7U3RyaW5nfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE4LjBcbiAqL1xuZnVuY3Rpb24gdG9CaW5hcnkoc3RyaW5nKSB7XG5cdGNvbnN0IGNvZGVVbml0cyA9IG5ldyBVaW50MTZBcnJheSh2YWxpZGF0ZVN0cmluZyhzdHJpbmcpLmxlbmd0aCk7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgY29kZVVuaXRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29kZVVuaXRzW2ldID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XG5cdH1cblxuXHRjb25zdCBjaGFyQ29kZXMgPSBuZXcgVWludDhBcnJheShjb2RlVW5pdHMuYnVmZmVyKTtcblx0bGV0IHJlc3VsdCA9IFwiXCI7XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjaGFyQ29kZXMuYnl0ZUxlbmd0aDsgaSsrKSB7XG5cdFx0cmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGVzW2ldKTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogWW91IGNhbiBjYWxsIHRoZSBmdW5jdGlvbiB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLlR5cGVzLmZyb21CaW5hcnkoKWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGJpbmFyeVxuICogQHJldHVybiB7U3RyaW5nfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEBtZW1iZXJPZiBNb25zdGVyLlR5cGVzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE4LjBcbiAqL1xuZnVuY3Rpb24gZnJvbUJpbmFyeShiaW5hcnkpIHtcblx0Y29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheSh2YWxpZGF0ZVN0cmluZyhiaW5hcnkpLmxlbmd0aCk7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRieXRlc1tpXSA9IGJpbmFyeS5jaGFyQ29kZUF0KGkpO1xuXHR9XG5cdGNvbnN0IGNoYXJDb2RlcyA9IG5ldyBVaW50MTZBcnJheShieXRlcy5idWZmZXIpO1xuXHRsZXQgcmVzdWx0ID0gXCJcIjtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjaGFyQ29kZXMubGVuZ3RoOyBpKyspIHtcblx0XHRyZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZXNbaV0pO1xuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtmcm9tQmluYXJ5LCB0b0JpbmFyeX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9iaW5hcnkubWpzXCI7XG5cbmRlc2NyaWJlKCdCaW5hcnknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBbXG4gICAgICAgIFsnYScsICdhXFx1MDAwMCddLFxuICAgICAgICBbJ1x1MjYzOScsICc5JiddLFxuICAgICAgICBbJ0lcdTAwRjF0XHUwMEVCcm5cdTAwRTJ0aVx1MDBGNG5cdTAwRTBsaXpcdTAwRTZ0aVx1MDBGOG4nLCAnSVxcdTAwMDBcdTAwRjFcXHUwMDAwdFxcdTAwMDBcdTAwRUJcXHUwMDAwclxcdTAwMDBuXFx1MDAwMFx1MDBFMlxcdTAwMDB0XFx1MDAwMGlcXHUwMDAwXHUwMEY0XFx1MDAwMG5cXHUwMDAwXHUwMEUwXFx1MDAwMGxcXHUwMDAwaVxcdTAwMDB6XFx1MDAwMFx1MDBFNlxcdTAwMDB0XFx1MDAwMGlcXHUwMDAwXHUwMEY4XFx1MDAwMG5cXHUwMDAwJ11cblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgaXQoJ2Zyb21CaW5hcnkodG9CaW5hcnkoJyArIGEgKyAnKSkgc2hvdWxkIHdvcmsnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgciA9IHRvQmluYXJ5KGEpO1xuICAgICAgICAgICAgZXhwZWN0KHIpLnRvLmJlLmVxdWFsKGIpO1xuICAgICAgICAgICAgZXhwZWN0KGZyb21CaW5hcnkocikpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICB9KVxuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmltcG9ydCB7T2JzZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5cblxuZGVzY3JpYmUoJ09ic2VydmVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgIH07XG5cbiAgICBsZXQgb2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoY2FsbGJhY2spXG5cbiAgICBkZXNjcmliZSgnLmFkZFRhZygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnXSxcbiAgICAgICAgICAgIFsndGVzdDInXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdhZGRUYWcoJyArIGEgKyAnKSBzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgT2JzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG9ic2VydmVyLmFkZFRhZyhhKSkuaXMuaW5zdGFuY2VPZihPYnNlcnZlcilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5yZW1vdmVUYWcoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJ10sXG4gICAgICAgICAgICBbJ3Rlc3QyJ10sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgncmVtb3ZlVGFnKCcgKyBhICsgJykgc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIE9ic2VydmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlci5yZW1vdmVUYWcoYSkpLmlzLmluc3RhbmNlT2YoT2JzZXJ2ZXIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuaGFzVGFnKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIHRydWVdLFxuICAgICAgICAgICAgWyd0ZXN0MicsIHRydWVdLFxuICAgICAgICAgICAgWyd0ZXN0MycsIGZhbHNlXSxcbiAgICAgICAgICAgIFsndGVzdDQnLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgdGVtcE9ic2VydmVyID0gbmV3IE9ic2VydmVyKGNhbGxiYWNrKVxuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ29ic2VydmVyLmhhc3RUYWcoJyArIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoYiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0ZW1wT2JzZXJ2ZXIuYWRkVGFnKGEpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0ZW1wT2JzZXJ2ZXIuaGFzVGFnKGEpKS5pcy5iZS50cnVlXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHRlbXBPYnNlcnZlci5oYXNUYWcoYSkpLmlzLmJlLmZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnVwZGF0ZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBvYmogPSB7fVxuICAgICAgICBpdCgnb2JzZXJ2ZXIudXBkYXRlKCcgKyBvYmogKyAnKSBpcyAnICsgMSArIDMgKyA2LCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgdGVtcE9ic2VydmVyID0gbmV3IE9ic2VydmVyKGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgKyBiICsgY1xuICAgICAgICAgICAgfSwgMSwgMywgNilcblxuXG4gICAgICAgICAgICB0ZW1wT2JzZXJ2ZXIudXBkYXRlKG9iaikudGhlbihhID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3QoYSkuaXMuZXF1YWwoMSArIDMgKyA2KVxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3J1biBmdW5jdGlvbiAudXBkYXRlKCkgc2V2ZXJhbCB0aW1lcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgb2JqID0ge31cbiAgICAgICAgaXQoJ29ic2VydmVyLnVwZGF0ZSgnICsgb2JqICsgJykgaXMgJyArIDEgKyAzICsgNiwgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgbGV0IHRlbXBPYnNlcnZlciA9IG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHRlbXBPYnNlcnZlci51cGRhdGUob2JqKTtcbiAgICAgICAgICAgIHRlbXBPYnNlcnZlci51cGRhdGUob2JqKTtcbiAgICAgICAgICAgIHRlbXBPYnNlcnZlci51cGRhdGUob2JqKTtcbiAgICAgICAgICAgIHRlbXBPYnNlcnZlci51cGRhdGUob2JqKTtcbiAgICAgICAgICAgIHRlbXBPYnNlcnZlci51cGRhdGUob2JqKS50aGVuKF8gPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuZ2V0VGFncygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtbJ3Rlc3QxJywgJ3Rlc3QyJywgJ3Rlc3QzJywgJ3Rlc3Q0J10sIDRdLFxuICAgICAgICAgICAgW1sndGVzdDEnLCAndGVzdDEnLCAndGVzdDMnLCAndGVzdDQnXSwgM10sIC8vIGRvdWJsZSB0ZXN0MSAoc2V0IGlzIHVuaXF1ZXVlKVxuICAgICAgICAgICAgW1sndGVzdDEnLCAndGVzdDEnLCAndGVzdDEnLCAndGVzdDQnXSwgMl0sIC8vIG11bHRpcGxlIHRlc3QxIChzZXQgaXMgdW5pcXVldWUpXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgdGVtcE9ic2VydmVyID0gbmV3IE9ic2VydmVyKGNhbGxiYWNrKVxuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIG1heCA9IGEubGVuZ3RoOyBpIDwgbWF4OyBpKyspIHtcbiAgICAgICAgICAgICAgICB0ZW1wT2JzZXJ2ZXIuYWRkVGFnKGFbaV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpdCgnb2JzZXJ2ZXIuZ2V0VGFncygnICsgYSArICcpIGlzIGFycmF5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0ZW1wT2JzZXJ2ZXIuZ2V0VGFncygpKS50by5iZS5hbignYXJyYXknKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdvYnNlcnZlci5nZXRUYWdzKCcgKyBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiArIFwiIHRhZ3NcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0ZW1wT2JzZXJ2ZXIuZ2V0VGFncygpLmxlbmd0aCkuaXMuZXF1YWwoYik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IGVzY2FwZVN0cmluZyB9O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcHJlZml4ZXMgYWxsIHNwZWNpYWwgY2hhcmFjdGVycyB0aGF0IG1heSBhcHBlYXIgaW4gYSByZWdleCB3aXRoIGEgc2xhc2guXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI2LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAbWVtYmVyT2YgTW9uc3Rlci5UeXBlc1xuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZXNjYXBlU3RyaW5nKHZhbHVlKSB7XG5cdHJldHVybiB2YWxpZGF0ZVN0cmluZyh2YWx1ZSlcblx0XHQucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCsqPy5dL2csIFwiXFxcXCQmXCIpXG5cdFx0LnJlcGxhY2UoLy0vZywgXCJcXFxceDJkXCIpO1xufVxuIiwgIlxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7ZXNjYXBlU3RyaW5nfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3JlZ2V4Lm1qc1wiXG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cblxuZGVzY3JpYmUoJ2VzY2FwZVN0cmluZycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG4gICAgICAgIHByb21pc2VzLnB1c2goaW5pdEpTRE9NKCkpO1xuICAgICAgICBpZighZ2xvYmFsVGhpc1snY3J5cHRvJ10pIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXNbJ2NyeXB0byddID0gbmV3IG0uQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuXG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG4gICAgXG4gICAgW1xuICAgICAgICBbJ3Rlc3QxJywgJ3Rlc3QxJ10sXG4gICAgICAgIFsnJHsnLCAnXFxcXCRcXFxceyddLFxuICAgICAgICBbJ2kxOG57JywgJ2kxOG5cXFxceyddLFxuICAgICAgICBbJy8vJywgJy8vJ10sXG4gICAgICAgIFsnXFxcXCcsICdcXFxcXFxcXCddLFxuICAgICAgIFxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgaXQoJ2VzY2FwZVN0cmluZygnICsgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChlc2NhcGVTdHJpbmcoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ1JhbmRvbUlEJywgZnVuY3Rpb24gKCkge1xuXG4gICAgY2xhc3MgUmFuZG9tSUQge31cbiAgICBcbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuICAgICAgICBpZighZ2xvYmFsVGhpc1snY3J5cHRvJ10pIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXNbJ2NyeXB0byddID0gbmV3IG0uQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuXG4gICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3JhbmRvbWlkLm1qc1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgUmFuZG9tSUQgPSBtLlJhbmRvbUlEO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pKVxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcblxuICAgIH0pOyAgICBcbiAgICBcbiAgICBkZXNjcmliZSgnLnRvU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBpZCA9IG5ldyBSYW5kb21JRCgpXG4gICAgICAgIGxldCByZXN1bHQgPSBpZC50b1N0cmluZygpO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkuaXMuYSgnc3RyaW5nJylcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICJpbXBvcnQge0lEfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuZGVzY3JpYmUoJ0lEJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IHByb21pc2VzID0gW11cbiAgICAgICAgaWYoIWdsb2JhbFRoaXNbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbihtID0+IHtcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzWydjcnlwdG8nXSA9IG5ldyBtLkNyeXB0bygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgIH1cblxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcblxuICAgIH0pOyAgICBcbiAgICBcbiAgICBkZXNjcmliZSgnLnRvU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBpZCA9IG5ldyBJRCgpXG4gICAgICAgIGxldCByZXN1bHQgPSBpZC50b1N0cmluZygpO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkuaXMuYSgnc3RyaW5nJylcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSUQoJ3RleHQxNDI1aWQnKS50b1N0cmluZygpKS5pcy5lcXVhbCgndGV4dDE0MjVpZDEnKVxuICAgICAgICAgICAgZXhwZWN0KG5ldyBJRCgndGV4dDE0MjVpZCcpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKCd0ZXh0MTQyNWlkMicpXG4gICAgICAgICAgICBleHBlY3QobmV3IElEKCd0ZXh0MTQyNWlkJykudG9TdHJpbmcoKSkuaXMuZXF1YWwoJ3RleHQxNDI1aWQzJylcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnVVVJRCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGNsYXNzIFVVSUQge31cbiAgICBcbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuICAgICAgICBcbiAgICAgICAgaWYoIWdsb2JhbFRoaXNbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbihtID0+IHtcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzWydjcnlwdG8nXSA9IG5ldyBtLkNyeXB0bygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIFxuICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy91dWlkLm1qc1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgVVVJRCA9IG0uVVVJRDtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KSlcbiAgICAgICAgXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcblxuICAgIH0pOyAgICBcbiAgICBcbiAgICBkZXNjcmliZSgnLnRvU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHV1aWQgPSBuZXcgVVVJRCgpXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gdXVpZC50b1N0cmluZygpO1xuXG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS5pcy5hKCdzdHJpbmcnKVxuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdC5sZW5ndGgpLmlzLmVxdWFsKDM2KVxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgndGVzdCBmb3JtYXQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IHV1aWQgPSBuZXcgVVVJRCgpXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gdXVpZC50b1N0cmluZygpO1xuXG4gICAgICAgICAgICBjb25zdCByZWdleEV4cCA9IC9eW0EtRlxcZF17OH0tW0EtRlxcZF17NH0tNFtBLUZcXGRdezN9LVs4OUFCXVtBLUZcXGRdezN9LVtBLUZcXGRdezEyfSQvaTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMDAwOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gbmV3IFVVSUQoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSByZWdleEV4cC50ZXN0KHUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHIgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgnbm8gdXVpZCAnICsgdSArICcgPT4gJyArIHIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICJpbXBvcnQge1xuICAgIGlzUHJpbWl0aXZlLFxuICAgIGlzQm9vbGVhbixcbiAgICBpc1N0cmluZyxcbiAgICBpc09iamVjdCxcbiAgICBpc0FycmF5LFxuICAgIGlzSW5zdGFuY2UsXG4gICAgaXNGdW5jdGlvbixcbiAgICBpc0l0ZXJhYmxlLFxuICAgIGlzSW50ZWdlcixcbiAgICBpc1N5bWJvbFxufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2lzLm1qc1wiO1xuXG5cbmltcG9ydCB7SUR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzXCJcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuZGVzY3JpYmUoJ0lzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IHByb21pc2VzID0gW11cbiAgICAgICAgaWYoIWdsb2JhbFRoaXNbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbihtID0+IHtcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzWydjcnlwdG8nXSA9IG5ldyBtLkNyeXB0bygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgIH1cblxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcblxuICAgIH0pOyAgICBcbiAgICBcbiAgICBkZXNjcmliZSgnLmlzUHJpbWl0aXZlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIHRydWVdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbbnVsbCwgdHJ1ZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIHRydWVdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgdHJ1ZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgW3RydWUsIHRydWVdLFxuICAgICAgICAgICAgWzQuNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIHRydWVdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc1ByaW1pdGl2ZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzUHJpbWl0aXZlKGEpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcbiAgICBkZXNjcmliZSgnLmlzU3ltYm9sKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgdHJ1ZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2lzLmlzU3ltYm9sKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNTeW1ib2woYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5pc0ludGVnZXIoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgdHJ1ZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNJbnRlZ2VyKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNJbnRlZ2VyKGEpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuaXNJdGVyYWJsZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCB0cnVlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2lzLmlzSXRlcmFibGUoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc0l0ZXJhYmxlKGEpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuaXNCb29sZWFuKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNCb29sZWFuKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNCb29sZWFuKGEpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuaXNTdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdHJ1ZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNTdHJpbmcoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc1N0cmluZyhhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmlzSW5zdGFuY2UoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbbmV3IElEKCksIElELCAgdHJ1ZV0sXG4gICAgICAgICAgICBbbmV3IElEKCksICgpPT57fSwgIGZhbHNlXSxcbiAgICAgICAgICAgIFsndGVzdDEnLCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2lzLmlzSW5zdGFuY2UoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykgc2hvdWxkIHJldHVybiAnICsgdHlwZW9mIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNJbnN0YW5jZShhLCBiKSkuaXMuZXF1YWwoYylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBcbiAgICBcbiAgICBkZXNjcmliZSgnLmlzT2JqZWN0KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgdHJ1ZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2lzLmlzT2JqZWN0KCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNPYmplY3QoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnLmlzQXJyYXkoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCB0cnVlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNBcnJheSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzQXJyYXkoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmlzRnVuY3Rpb24oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCB0cnVlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNGdW5jdGlvbignICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzRnVuY3Rpb24oYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtcbiAgICB2YWxpZGF0ZVByaW1pdGl2ZSxcbiAgICB2YWxpZGF0ZUJvb2xlYW4sXG4gICAgdmFsaWRhdGVTdHJpbmcsXG4gICAgdmFsaWRhdGVPYmplY3QsXG4gICAgdmFsaWRhdGVBcnJheSxcbiAgICB2YWxpZGF0ZUZ1bmN0aW9uLFxuICAgIHZhbGlkYXRlSW50ZWdlcixcbiAgICB2YWxpZGF0ZUluc3RhbmNlLFxuICAgIHZhbGlkYXRlSXRlcmFibGUsXG4gICAgdmFsaWRhdGVTeW1ib2xcbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanNcIlxuXG5pbXBvcnQge0Jhc2V9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvYmFzZS5tanNcIlxuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIlxuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgndmFsaWRhdGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlUHJpbWl0aXZlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIHRydWVdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbbnVsbCwgdHJ1ZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIHRydWVdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFs0LjUsIHRydWVdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCB0cnVlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVQcmltaXRpdmUoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHZhbGlkYXRlUHJpbWl0aXZlKGEpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVQcmltaXRpdmUoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIG5vdCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2YWxpZGF0ZVByaW1pdGl2ZShhKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy52YWxpZGF0ZUludGVnZXIoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgdHJ1ZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVJbnRlZ2VyKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB2YWxpZGF0ZUludGVnZXIoYSkpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUludGVnZXIoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIG5vdCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2YWxpZGF0ZUludGVnZXIoYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcbiAgICBcbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlU3ltYm9sKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgdHJ1ZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlU3ltYm9sKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB2YWxpZGF0ZVN5bWJvbChhKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlU3ltYm9sKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVTeW1ib2woYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVJdGVyYWJsZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCB0cnVlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlSXRlcmFibGUoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlSXRlcmFibGUoYSlcbiAgICAgICAgICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVJdGVyYWJsZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlSXRlcmFibGUoYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVCb29sZWFuKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVCb29sZWFuKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUJvb2xlYW4oYSlcbiAgICAgICAgICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlQm9vbGVhbignICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlQm9vbGVhbihhKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIHRydWVdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlU3RyaW5nKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0cmluZyhhKVxuICAgICAgICAgICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZVN0cmluZygnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlU3RyaW5nKGEpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlT2JqZWN0KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgdHJ1ZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlT2JqZWN0KCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZU9iamVjdChhKVxuICAgICAgICAgICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZU9iamVjdCgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlT2JqZWN0KGEpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlSW5zdGFuY2UoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgT2JqZWN0XSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIE9iamVjdF0sXG4gICAgICAgICAgICBbbnVsbCwgT2JqZWN0XSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBPYmplY3RdLFxuICAgICAgICAgICAgWzIsIE9iamVjdF0sXG4gICAgICAgICAgICBbZmFsc2UsIE9iamVjdF0sXG4gICAgICAgICAgICBbdHJ1ZSwgT2JqZWN0XSxcbiAgICAgICAgICAgIFs0LjUsIE9iamVjdF0sXG4gICAgICAgICAgICBbe30sIEJhc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgT2JqZWN0XSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIE9iamVjdF0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuXG4gICAgICAgICAgICBpdCgnLnZhbGlkYXRlSW5zdGFuY2UoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUluc3RhbmNlKGEsIGIpXG4gICAgICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlSW5zdGFuY2UoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbe30sIE9iamVjdCwgdHJ1ZV0sXG4gICAgICAgICAgICBbbmV3IEJhc2UsIEJhc2UsIHRydWVdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCcudmFsaWRhdGVJbnN0YW5jZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVJbnN0YW5jZShhLCBiKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVBcnJheSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIHRydWVdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmIChiID09PSBmYWxzZSkge1xuXG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUFycmF5KCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUFycmF5KGEpXG4gICAgICAgICAgICAgICAgICAgIH0pLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlQXJyYXkoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIG5vdCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2YWxpZGF0ZUFycmF5KGEpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy52YWxpZGF0ZUZ1bmN0aW9uKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgdHJ1ZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlRnVuY3Rpb24oJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlRnVuY3Rpb24oYSlcbiAgICAgICAgICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVGdW5jdGlvbignICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlRnVuY3Rpb24oYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtTdGFja30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9zdGFjay5tanNcIjtcbmltcG9ydCB7XG4gICAgdHlwZU9mXG59IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvdHlwZW9mLm1qc1wiXG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCd0eXBlT2YnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLnR5cGVPZigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFt0cnVlLCAnYm9vbGVhbiddLFxuICAgICAgICAgICAgW251bGwsICdudWxsJ10sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCAndW5kZWZpbmVkJ10sXG4gICAgICAgICAgICBbUHJvbWlzZS5yZXNvbHZlKCksICdwcm9taXNlJ10sXG4gICAgICAgICAgICBbbmV3IFdlYWtNYXAoKSwgJ3dlYWttYXAnXSxcbiAgICAgICAgICAgIFtuZXcgTWFwKCksICdtYXAnXSxcbiAgICAgICAgICAgIFtOYU4sICdudW1iZXInXSxcbiAgICAgICAgICAgIFtmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgfSwgJ2dlbmVyYXRvcmZ1bmN0aW9uJ10sXG4gICAgICAgICAgICBbNSwgJ251bWJlciddLFxuICAgICAgICAgICAgW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIH0sICdmdW5jdGlvbiddLFxuICAgICAgICAgICAgWy9hLywgJ3JlZ2V4cCddLFxuICAgICAgICAgICAgW25ldyBEYXRlKCksICdkYXRlJ10sXG4gICAgICAgICAgICBbe30sICdvYmplY3QnXSxcbiAgICAgICAgICAgIFtbXSwgJ2FycmF5J10sXG4gICAgICAgICAgICBbJycsICdzdHJpbmcnXSxcbiAgICAgICAgICAgIFtuZXcgRXJyb3IsICdlcnJvciddLFxuICAgICAgICAgICAgW25ldyBTdGFjaywgJ3N0YWNrJ11cblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuICcgKyBiICsgJyB3aGVuIHRoZSB2YWx1ZSAnICsgdHlwZU9mKGEpLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHR5cGVPZihhKSkudG8uYmUuZXF1YWwoYik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTtcblxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1VuaXF1ZVF1ZXVlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3VuaXF1ZXF1ZXVlLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdVbmlxdWVRdWV1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcXVldWU7XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIHF1ZXVlID0gbmV3IFVuaXF1ZVF1ZXVlO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnaXNFbXB0eSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdmaXJzdCBpdCBzaG91bGQgZW1wdHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnYWRkIHNlcXVlbmNlIHBlZWsgYW5kIHBvbGwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Jlc3VsdCBhLGEsYSxiJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmFkZCh7YTogMX0pKS50by5iZS5pbnN0YW5jZU9mKFVuaXF1ZVF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmFkZCh7YTogMn0pKS50by5iZS5pbnN0YW5jZU9mKFVuaXF1ZVF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5hZGQoe2E6IDN9KSkudG8uYmUuaW5zdGFuY2VPZihVbmlxdWVRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucGVlaygpKS50by5kZWVwLmVxdWFsKHthOjF9KTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wZWVrKCkpLnRvLmRlZXAuZXF1YWwoe2E6MX0pO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBvbGwoKSkudG8uZGVlcC5lcXVhbCh7YToxfSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucG9sbCgpKS50by5kZWVwLmVxdWFsKHthOjJ9KTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBlZWsoKSkudG8uZGVlcC5lcXVhbCh7YTozfSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucG9sbCgpKS50by5kZWVwLmVxdWFsKHthOjN9KTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdhZGQgYW5kIGNsZWFyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgZW1wdHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmFkZCh7YTogMX0pKS50by5iZS5pbnN0YW5jZU9mKFVuaXF1ZVF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmNsZWFyKCkpLnRvLmJlLmluc3RhbmNlT2YoVW5pcXVlUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuICAgIFxuICAgIGRlc2NyaWJlKCdhZGQgbm8gb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpPT57cXVldWUuYWRkKFtdKX0pLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgICAgIGV4cGVjdCgoKT0+e3F1ZXVlLmFkZCgxKX0pLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgICAgIGV4cGVjdCgoKT0+e3F1ZXVlLmFkZCh0cnVlKX0pLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgICAgIGV4cGVjdCgoKT0+e3F1ZXVlLmFkZCgpfSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICAgICAgZXhwZWN0KCgpPT57cXVldWUuYWRkKFN5bWJvbChcIjFcIikpfSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICAgICAgZXhwZWN0KCgpPT57cXVldWUuYWRkKGZ1bmN0aW9uKCl7fSl9KS50by50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgIH0pO1xuXG4gICAgfSlcbn0pIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1N0YWNrfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3N0YWNrLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdTdGFjaycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgc3RhY2s7XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIHN0YWNrID0gbmV3IFN0YWNrO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnaXNFbXB0eSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdmaXJzdCBpdCBzaG91bGQgZW1wdHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2suaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnYWRkIHNlcXVlbmNlIHBlZWsgYW5kIHB1bGwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Jlc3VsdCBhLGEsYSxiJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLnB1c2goJ2EnKSkudG8uYmUuaW5zdGFuY2VPZihTdGFjayk7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2suaXNFbXB0eSgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5wdXNoKCdiJykpLnRvLmJlLmluc3RhbmNlT2YoU3RhY2spO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLnB1c2goJ2MnKSkudG8uYmUuaW5zdGFuY2VPZihTdGFjayk7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2sucGVlaygpKS50by5iZS5lcXVhbCgnYycpO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLnBlZWsoKSkudG8uYmUuZXF1YWwoJ2MnKTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5wb3AoKSkudG8uYmUuZXF1YWwoJ2MnKTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5wZWVrKCkpLnRvLmJlLmVxdWFsKCdiJyk7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2suaXNFbXB0eSgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2FkZCBhbmQgY2xlYXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2sucHVzaCgnYScpKS50by5iZS5pbnN0YW5jZU9mKFN0YWNrKTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLmNsZWFyKCkpLnRvLmJlLmluc3RhbmNlT2YoU3RhY2spO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxufSkiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0Jhc2VXaXRoT3B0aW9uc30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0Jhc2VXaXRoT3B0aW9ucycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCduZXcgQmFzZVdpdGhPcHRpb25zJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdpcyBpbnN0YW5jZSBvZiBCYXNlV2l0aE9wdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEJhc2VXaXRoT3B0aW9ucykudG8uYmUuaW5zdGFuY2VPZihCYXNlV2l0aE9wdGlvbnMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnaXMgaW5zdGFuY2Ugb2YgT2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBCYXNlV2l0aE9wdGlvbnMpLnRvLmJlLmluc3RhbmNlT2YoT2JqZWN0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2dldCBvcHRpb24gaXMgdHJ1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQmFzZVdpdGhPcHRpb25zKHthOiB0cnVlfSkuZ2V0T3B0aW9uKCdhJykpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxufSkiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtOb2RlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL25vZGUubWpzXCI7XG5pbXBvcnQge05vZGVMaXN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL25vZGVsaXN0Lm1qc1wiO1xuaW1wb3J0IHtOb2RlUmVjdXJzaXZlSXRlcmF0b3J9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZXJlY3Vyc2l2ZWl0ZXJhdG9yLm1qc1wiO1xuXG5kZXNjcmliZSgnTm9kZUxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVzY3JpYmUoJyNjb25zdHJ1Y3RvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBjcmVhdGUgYW4gZW1wdHkgTm9kZUxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgbm9kZUxpc3QgPSBuZXcgTm9kZUxpc3QoKTtcblxuICAgICAgICAgICAgZXhwZWN0KG5vZGVMaXN0LnNpemUpLnRvLmVxdWFsKDApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIE5vZGVMaXN0IGZyb20gYW4gYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgbm9kZUxpc3QgPSBuZXcgTm9kZUxpc3QoW1xuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKSxcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JyksXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpXG4gICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgZXhwZWN0KG5vZGVMaXN0LnNpemUpLnRvLmVxdWFsKDMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIE5vZGVMaXN0IGZyb20gYSBOb2RlTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdChbXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpLFxuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKSxcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JylcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBsZXQgbm9kZUxpc3QyID0gbmV3IE5vZGVMaXN0KG5vZGVMaXN0KTtcblxuICAgICAgICAgICAgZXhwZWN0KG5vZGVMaXN0Mi5zaXplKS50by5lcXVhbCgzKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnY3JlYXRlIE5vZGVMaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkpLmlzLmluc3RhbmNlb2YoTm9kZUxpc3QpO1xuICAgIH0pXG5cbiAgICBpdCgnYWRkIE5vZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKS5hZGQobmV3IE5vZGUoKSkpLnRvLmJlLmluc3RhbmNlb2YoTm9kZUxpc3QpO1xuICAgIH0pXG5cbiAgICBpdCgncmVtb3ZlIE5vZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKS5yZW1vdmUobmV3IE5vZGUoKSkpLnRvLmJlLmluc3RhbmNlb2YoTm9kZUxpc3QpO1xuICAgIH0pXG5cbiAgICBpdCgnaGFzIHVua25vd24gTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLmhhcyhuZXcgTm9kZSkpLnRvLmJlLmZhbHNlO1xuICAgIH0pXG5cbiAgICBpdCgnaGFzIGFkZGVkIE5vZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG4gPSBuZXcgTm9kZTtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLmFkZChuKS5oYXMobikpLnRvLmJlLnRydWU7XG4gICAgfSlcblxuICAgIGl0KCd0aHJvdyBleGNlcHRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgTm9kZUxpc3QoKS5hZGQoMSkpLnRvLnRocm93KEVycm9yKTtcbiAgICB9KVxuXG4gICAgaXQoJ2NoZWNrIGxldmVsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IHJvb3QgPSBuZXcgTm9kZSgncm9vdCcpO1xuXG4gICAgICAgIGNvbnN0IG4xID0gbmV3IE5vZGUoJ24xJyk7XG4gICAgICAgIGNvbnN0IG4yID0gbmV3IE5vZGUoJ24yJyk7XG4gICAgICAgIGNvbnN0IG4zID0gbmV3IE5vZGUoJ24zJyk7XG4gICAgICAgIGNvbnN0IG40ID0gbmV3IE5vZGUoJ240Jyk7XG5cbiAgICAgICAgY29uc3QgbjExID0gbmV3IE5vZGUoJ24xMScpO1xuICAgICAgICBjb25zdCBuMTIgPSBuZXcgTm9kZSgnbjEyJyk7XG4gICAgICAgIGNvbnN0IG4xMyA9IG5ldyBOb2RlKCduMTMnKTtcblxuICAgICAgICBjb25zdCBuMjEgPSBuZXcgTm9kZSgnbjIxJyk7XG4gICAgICAgIGNvbnN0IG4yMiA9IG5ldyBOb2RlKCduMjInKTtcbiAgICAgICAgY29uc3QgbjIzID0gbmV3IE5vZGUoJ24yMycpO1xuXG4gICAgICAgIGNvbnN0IG40MSA9IG5ldyBOb2RlKCduNDEnKTtcbiAgICAgICAgY29uc3QgbjQyID0gbmV3IE5vZGUoJ240MicpO1xuXG4gICAgICAgIGNvbnN0IG40MTEgPSBuZXcgTm9kZSgnbjQxMScpO1xuICAgICAgICBjb25zdCBuNDEyID0gbmV3IE5vZGUoJ240MTInKTtcbiAgICAgICAgY29uc3QgbjQxMyA9IG5ldyBOb2RlKCduNDEzJyk7XG5cbiAgICAgICAgY29uc3QgbjQxMjEgPSBuZXcgTm9kZSgnbjQxMjEnKTtcblxuICAgICAgICByb290LmFwcGVuZENoaWxkKG4xKS5hcHBlbmRDaGlsZChuMikuYXBwZW5kQ2hpbGQobjMpLmFwcGVuZENoaWxkKG40KTtcbiAgICAgICAgbjEuYXBwZW5kQ2hpbGQobjExKS5hcHBlbmRDaGlsZChuMTIpLmFwcGVuZENoaWxkKG4xMyk7XG4gICAgICAgIG4yLmFwcGVuZENoaWxkKG4yMSkuYXBwZW5kQ2hpbGQobjIyKS5hcHBlbmRDaGlsZChuMjMpO1xuICAgICAgICBuNC5hcHBlbmRDaGlsZChuNDEpLmFwcGVuZENoaWxkKG40Mik7XG4gICAgICAgIG40MS5hcHBlbmRDaGlsZChuNDExKS5hcHBlbmRDaGlsZChuNDEyKS5hcHBlbmRDaGlsZChuNDEzKTtcbiAgICAgICAgbjQxMi5hcHBlbmRDaGlsZChuNDEyMSk7XG5cbiAgICAgICAgbGV0IGl0ZXJhdG9yID0gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihyb290KTtcblxuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBpdGVyYXRvcikge1xuICAgICAgICAgICAgZXhwZWN0KG4pLnRvLmJlLmFuLmluc3RhbmNlb2YoTm9kZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuLnZhbHVlICsgXCI6XCIgKyBuLmxldmVsKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChbXG4gICAgICAgICAgICAncm9vdDowJyxcbiAgICAgICAgICAgICduMToxJyxcbiAgICAgICAgICAgICduMTE6MicsXG4gICAgICAgICAgICAnbjEyOjInLFxuICAgICAgICAgICAgJ24xMzoyJyxcbiAgICAgICAgICAgICduMjoxJyxcbiAgICAgICAgICAgICduMjE6MicsXG4gICAgICAgICAgICAnbjIyOjInLFxuICAgICAgICAgICAgJ24yMzoyJyxcbiAgICAgICAgICAgICduMzoxJyxcbiAgICAgICAgICAgICduNDoxJyxcbiAgICAgICAgICAgICduNDE6MicsXG4gICAgICAgICAgICAnbjQxMTozJyxcbiAgICAgICAgICAgICduNDEyOjMnLFxuICAgICAgICAgICAgJ240MTIxOjQnLFxuICAgICAgICAgICAgJ240MTM6MycsXG4gICAgICAgICAgICAnbjQyOjInXG5cbiAgICAgICAgXSk7XG5cbiAgICAgICAgbjQxMjEuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJ240MTIxMScpKTtcblxuICAgICAgICBpdGVyYXRvciA9IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3Iocm9vdCk7XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIGV4cGVjdChuKS50by5iZS5hbi5pbnN0YW5jZW9mKE5vZGUpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gobi52YWx1ZSArIFwiOlwiICsgbi5sZXZlbCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFtcbiAgICAgICAgICAgICdyb290OjAnLFxuICAgICAgICAgICAgJ24xOjEnLFxuICAgICAgICAgICAgJ24xMToyJyxcbiAgICAgICAgICAgICduMTI6MicsXG4gICAgICAgICAgICAnbjEzOjInLFxuICAgICAgICAgICAgJ24yOjEnLFxuICAgICAgICAgICAgJ24yMToyJyxcbiAgICAgICAgICAgICduMjI6MicsXG4gICAgICAgICAgICAnbjIzOjInLFxuICAgICAgICAgICAgJ24zOjEnLFxuICAgICAgICAgICAgJ240OjEnLFxuICAgICAgICAgICAgJ240MToyJyxcbiAgICAgICAgICAgICduNDExOjMnLFxuICAgICAgICAgICAgJ240MTI6MycsXG4gICAgICAgICAgICAnbjQxMjE6NCcsXG4gICAgICAgICAgICAnbjQxMjExOjUnLFxuICAgICAgICAgICAgJ240MTM6MycsXG4gICAgICAgICAgICAnbjQyOjInXG5cbiAgICAgICAgXSk7XG5cblxuICAgICAgICBjb25zdCBiYiA9IG5ldyBOb2RlKCdiYicpIC8vIGJpZyBiYW5nXG5cbiAgICAgICAgYmIuYXBwZW5kQ2hpbGQocm9vdCk7XG4gICAgICAgIGl0ZXJhdG9yID0gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihiYik7XG5cbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBpdGVyYXRvcikge1xuICAgICAgICAgICAgZXhwZWN0KG4pLnRvLmJlLmFuLmluc3RhbmNlb2YoTm9kZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuLnZhbHVlICsgXCI6XCIgKyBuLmxldmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoW1xuICAgICAgICAgICAgJ2JiOjAnLFxuICAgICAgICAgICAgJ3Jvb3Q6MScsXG4gICAgICAgICAgICAnbjE6MicsXG4gICAgICAgICAgICAnbjExOjMnLFxuICAgICAgICAgICAgJ24xMjozJyxcbiAgICAgICAgICAgICduMTM6MycsXG4gICAgICAgICAgICAnbjI6MicsXG4gICAgICAgICAgICAnbjIxOjMnLFxuICAgICAgICAgICAgJ24yMjozJyxcbiAgICAgICAgICAgICduMjM6MycsXG4gICAgICAgICAgICAnbjM6MicsXG4gICAgICAgICAgICAnbjQ6MicsXG4gICAgICAgICAgICAnbjQxOjMnLFxuICAgICAgICAgICAgJ240MTE6NCcsXG4gICAgICAgICAgICAnbjQxMjo0JyxcbiAgICAgICAgICAgICduNDEyMTo1JyxcbiAgICAgICAgICAgICduNDEyMTE6NicsXG4gICAgICAgICAgICAnbjQxMzo0JyxcbiAgICAgICAgICAgICduNDI6MydcblxuICAgICAgICBdKTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnTGV2ZWxzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCduMiBzaG91bGQgbGV2ZWwgMicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgbjAgPSBuZXcgTm9kZSgnYWJjJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IG4xID0gbmV3IE5vZGUoJ2RlZicpO1xuICAgICAgICAgICAgbjAuYXBwZW5kQ2hpbGQobjEpXG5cbiAgICAgICAgICAgIGNvbnN0IG4yID0gbmV3IE5vZGUoJ2doaScpO1xuICAgICAgICAgICAgbjEuYXBwZW5kQ2hpbGQobjIpO1xuXG4gICAgICAgICAgICBjb25zdCBuMyA9IG5ldyBOb2RlKCdqa2wnKTtcbiAgICAgICAgICAgIG4yLmFwcGVuZENoaWxkKG4zKTtcblxuICAgICAgICAgICAgZXhwZWN0KG4wLmxldmVsKS50by5iZS5lcXVhbCgwKTtcbiAgICAgICAgICAgIGV4cGVjdChuMS5sZXZlbCkudG8uYmUuZXF1YWwoMSk7XG4gICAgICAgICAgICBleHBlY3QobjIubGV2ZWwpLnRvLmJlLmVxdWFsKDIpO1xuICAgICAgICAgICAgZXhwZWN0KG4zLmxldmVsKS50by5iZS5lcXVhbCgzKTtcblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ3RvU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBvdXRwdXQgZW1wdHkgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBOb2RlKCk7XG4gICAgICAgICAgICBleHBlY3Qobm9kZS50b1N0cmluZygpKS5pcy5lcXVhbCgnJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgb3V0cHV0IHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IG4wID0gbmV3IE5vZGUoJ2FiYycpO1xuXG4gICAgICAgICAgICBjb25zdCBuMSA9IG5ldyBOb2RlKCdkZWYnKTtcbiAgICAgICAgICAgIG4wLmFwcGVuZENoaWxkKG4xKVxuXG4gICAgICAgICAgICBjb25zdCBuMTEgPSBuZXcgTm9kZSgnZ2hpJyk7XG4gICAgICAgICAgICBuMC5hcHBlbmRDaGlsZChuMTEpXG5cbiAgICAgICAgICAgIGNvbnN0IG4yID0gbmV3IE5vZGUoJ2prbCcpO1xuICAgICAgICAgICAgbjEuYXBwZW5kQ2hpbGQobjIpO1xuXG4gICAgICAgICAgICBjb25zdCBuMyA9IG5ldyBOb2RlKCdtbm8nKTtcbiAgICAgICAgICAgIG4xLmFwcGVuZENoaWxkKG4zKTtcblxuICAgICAgICAgICAgY29uc3QgbjQgPSBuZXcgTm9kZSgncHFyJyk7XG4gICAgICAgICAgICBuMi5hcHBlbmRDaGlsZChuNCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChuMi5sZXZlbCkudG8uYmUuZXF1YWwoMilcblxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhuMC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIC8vIGV4cGVjdChuMC50b1N0cmluZygpKS5pcy5lcXVhbCgnJyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtRdWV1ZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9xdWV1ZS5tanNcIjtcblxuZGVzY3JpYmUoJ1F1ZXVlJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBxdWV1ZTtcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgcXVldWUgPSBuZXcgUXVldWU7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdpc0VtcHR5KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2ZpcnN0IGl0IHNob3VsZCBlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdhZGQgc2VxdWVuY2UgcGVlayBhbmQgcG9sbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVzdWx0IGEsYSxhLGInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKCdhJykpLnRvLmJlLmluc3RhbmNlT2YoUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKCdiJykpLnRvLmJlLmluc3RhbmNlT2YoUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmFkZCgnYycpKS50by5iZS5pbnN0YW5jZU9mKFF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wZWVrKCkpLnRvLmJlLmVxdWFsKCdhJyk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucGVlaygpKS50by5iZS5lcXVhbCgnYScpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBvbGwoKSkudG8uYmUuZXF1YWwoJ2EnKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wZWVrKCkpLnRvLmJlLmVxdWFsKCdiJyk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2FkZCBhbmQgY2xlYXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKCdhJykpLnRvLmJlLmluc3RhbmNlT2YoUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuY2xlYXIoKSkudG8uYmUuaW5zdGFuY2VPZihRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cblxuICAgIFxufSkiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtOb2RlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL25vZGUubWpzXCI7XG5pbXBvcnQge05vZGVMaXN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL25vZGVsaXN0Lm1qc1wiO1xuaW1wb3J0IHtOb2RlUmVjdXJzaXZlSXRlcmF0b3J9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZXJlY3Vyc2l2ZWl0ZXJhdG9yLm1qc1wiO1xuXG5kZXNjcmliZSgnTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yJywgZnVuY3Rpb24gKCkge1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBleGVwdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3IoKSkudG8udGhyb3coRXJyb3IpXG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBiZSBhIGZ1bmN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QoTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKS50by5iZS5hKCdmdW5jdGlvbicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBiZSBhIGNvbnN0cnVjdG9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihuZXcgTm9kZSkpLnRvLmJlLmFuLmluc3RhbmNlb2YoTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT3BlcmF0b3JzL3lpZWxkXG4gICAgICovXG4gICAgaXQoJ3VuZGVmaW5lZCBzaG91bGQgbm90IHJlc3VsdCBpbiB1bmRlZmluZWQgbm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKG5ldyBOb2RlKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICBleHBlY3QobikudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG4udmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChbdW5kZWZpbmVkXSk7XG5cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaXRlcmF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9XG4gICAgICAgICAgICBuZXcgTm9kZSgnMScpXG4gICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQoXG4gICAgICAgICAgICAobmV3IE5vZGUoJzInKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzIuMScpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnMi4yJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCcyLjMnKSkpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCczJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCc0JykuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzQuMScpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnNC4yJykpKTtcblxuICAgICAgICBjb25zdCBpdGVyYXRvciA9IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3Iobm9kZSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBpdGVyYXRvcikge1xuICAgICAgICAgICAgZXhwZWN0KG4pLnRvLmJlLmFuLmluc3RhbmNlb2YoTm9kZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoWycxJywgJzInLCAnMi4xJywgJzIuMicsICcyLjMnLCAnMycsICc0JywgJzQuMScsICc0LjInXSk7XG5cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaXRlcmF0ZSBub2RlbGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgbm9kZUxpc3QgPSBuZXcgTm9kZUxpc3QoKTtcblxuICAgICAgICBub2RlTGlzdC5hZGQoXG4gICAgICAgICAgICAobmV3IE5vZGUoJzInKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzIuMScpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnMi4yJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCcyLjMnKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzMnKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzQnKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnNC4xJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCc0LjInKSkpKTtcblxuICAgICAgICBub2RlTGlzdC5hZGQobmV3IE5vZGUoJ3gnKSk7XG5cbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKG5vZGVMaXN0KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICBleHBlY3QobikudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG4udmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFsnMicsICcyLjEnLCAnMi4yJywgJzIuMycsICczJywgJzQnLCAnNC4xJywgJzQuMicsICd4J10pO1xuXG4gICAgfSk7XG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sLCBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5cbmltcG9ydCB7IEZvcm1hdHRlciBhcyBUZXh0Rm9ybWF0dGVyIH0gZnJvbSBcIi4uL3RleHQvZm9ybWF0dGVyLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbnMgfSBmcm9tIFwiLi90cmFuc2xhdGlvbnMubWpzXCI7XG5cbmV4cG9ydCB7IEZvcm1hdHRlciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcm5hbFRyYW5zbGF0aW9uU3ltYm9sID0gU3ltYm9sKFwiaW50ZXJuYWxUcmFuc2xhdGlvblwiKTtcblxuLyoqXG4gKiBUaGUgRm9ybWF0dGVyIGV4dGVuZHMgdGhlIFRleHQuRm9ybWF0dGVyIHdpdGggdGhlIHBvc3NpYmlsaXR5IHRvIHJlcGxhY2UgdGhlIGtleSBieSBhIHRyYW5zbGF0aW9uLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9pMThuL2Zvcm1hdHRlci5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkkxOG5cbiAqL1xuY2xhc3MgRm9ybWF0dGVyIGV4dGVuZHMgVGV4dEZvcm1hdHRlciB7XG5cdC8qKlxuXHQgKiBEZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG1hcmtlcnMgYXJlIGAke2AgYW5kIGB9YFxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvYmplY3QsIHRyYW5zbGF0aW9uLCBvcHRpb25zKSB7XG5cdFx0c3VwZXIob2JqZWN0LCBvcHRpb25zKTtcblx0XHR0aGlzW2ludGVybmFsVHJhbnNsYXRpb25TeW1ib2xdID0gdmFsaWRhdGVJbnN0YW5jZShcblx0XHRcdHRyYW5zbGF0aW9uLFxuXHRcdFx0VHJhbnNsYXRpb25zLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvaTE4bi9mb3JtYXR0ZXJAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBtYXJrZXJcblx0ICogQHByb3BlcnR5IHthcnJheX0gbWFya2VyLm9wZW49W1wiaTE4bntcIixcIiR7XCJdXG5cdCAqIEBwcm9wZXJ0eSB7YXJyYXl9IG1hcmtlci5jbG9zZT1bXCIke1wiXVxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gcGFyYW1ldGVyXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXJhbWV0ZXIuZGVsaW1pdGVyPVwiOjpcIlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcGFyYW1ldGVyLmFzc2lnbm1lbnQ9XCI9XCJcblx0ICogQHByb3BlcnR5IHtvYmplY3R9IGNhbGxiYWNrc1xuXHQgKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBjYWxsYmFja3MuaTE4bj0oKT0+e31cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0Y2FsbGJhY2tzOiB7XG5cdFx0XHRcdGkxOG46ICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzW2ludGVybmFsVHJhbnNsYXRpb25TeW1ib2xdLmdldFRleHQodmFsaWRhdGVTdHJpbmcodmFsdWUpKTtcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRtYXJrZXI6IHtcblx0XHRcdFx0b3BlbjogW1wiaTE4bntcIiwgXCIke1wiXSxcblx0XHRcdFx0Y2xvc2U6IFtcIn1cIl0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7RXJyb3J9IHRvbyBkZWVwIG5lc3Rpbmdcblx0ICogQHRocm93cyB7RXJyb3J9IGtleSBub3QgZm91bmRcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBjbG9zaW5nIG1hcmtlciBpcyBtaXNzaW5nXG5cdCAqL1xuXHRmb3JtYXQodGV4dCkge1xuXHRcdHZhbGlkYXRlU3RyaW5nKHRleHQpO1xuXG5cdFx0Y29uc3Qgb3Blbk1hcmtlciA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wib3BlblwiXT8uWzBdO1xuXHRcdGNvbnN0IGNsb3NlTWFya2VyID0gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJjbG9zZVwiXT8uWzBdO1xuXG5cdFx0aWYgKHRleHQuaW5kZXhPZihvcGVuTWFya2VyKSA9PT0gMCkge1xuXHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKG9wZW5NYXJrZXIubGVuZ3RoKTtcblxuXHRcdFx0aWYgKHRleHQuaW5kZXhPZihjbG9zZU1hcmtlcikgPT09IHRleHQubGVuZ3RoIC0gY2xvc2VNYXJrZXIubGVuZ3RoKSB7XG5cdFx0XHRcdHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCB0ZXh0Lmxlbmd0aCAtIGNsb3NlTWFya2VyLmxlbmd0aCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgY2xvc2luZyBtYXJrZXIgaXMgbWlzc2luZ1wiKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBwYXJ0cyA9IHZhbGlkYXRlU3RyaW5nKHRleHQpLnNwbGl0KFwiOjpcIik7XG5cdFx0Y29uc3QgdHJhbnNsYXRpb25LZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKTsgLy8ga2V5IHZhbHVlIGRlbGltaXRlclxuXHRcdGNvbnN0IHBhcmFtZXRlciA9IHBhcnRzLmpvaW4oXCI6OlwiKS50cmltKCk7XG5cblx0XHRsZXQgYXNzZW1ibGVkVGV4dCA9IGAke29wZW5NYXJrZXJ9c3RhdGljOiR7dHJhbnNsYXRpb25LZXl9IHwgY2FsbDppMThuYDtcblx0XHRpZiAocGFyYW1ldGVyLmxlbmd0aCA+IDApIHtcblx0XHRcdGFzc2VtYmxlZFRleHQgKz0gYDo6JHtwYXJhbWV0ZXJ9YDtcblx0XHR9XG5cdFx0YXNzZW1ibGVkVGV4dCArPSBjbG9zZU1hcmtlcjtcblx0XHRyZXR1cm4gc3VwZXIuZm9ybWF0KGFzc2VtYmxlZFRleHQpO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Rm9ybWF0dGVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vZm9ybWF0dGVyLm1qc1wiO1xuaW1wb3J0IHtUcmFuc2xhdGlvbnN9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0Zvcm1hdHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdleGFtcGxlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIHdpdGggbWFya2VyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBuZXcgVHJhbnNsYXRpb25zKCdlbicpXG4gICAgICAgICAgICAgICAgLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIHRoZWtleTogXCIke2FuaW1hbH0gaGFzIGVhdGVuIHRoZSAke2Zvb2R9IVwiXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGYgPSBuZXcgRm9ybWF0dGVyKHt9LCB0cmFuc2xhdGlvbnMpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBleHBlY3QoZi5mb3JtYXQoXCJpMThue3RoZWtleTo6YW5pbWFsPWRvZzo6Zm9vZD1jYWtlfVwiKSkudG8uYmUuZXF1YWwoJ2RvZyBoYXMgZWF0ZW4gdGhlIGNha2UhJyk7XG4gICAgICAgICAgICAvLyBcdTIxQTYgZG9nIGhhcyBlYXRlbiB0aGUgY2FrZSEgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpdCgnc2hvdWxkIHJ1biB3aXRob3V0IG1hcmtlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zID0gbmV3IFRyYW5zbGF0aW9ucygnZW4nKVxuICAgICAgICAgICAgICAgIC5hc3NpZ25UcmFuc2xhdGlvbnMoe1xuICAgICAgICAgICAgICAgICAgICB0aGVrZXk6IFwiJHthbmltYWx9IGhhcyBlYXRlbiB0aGUgJHtmb29kfSFcIlxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBtaXNzaW5nIG1hcmtlclxuICAgICAgICAgICAgZXhwZWN0KG5ldyBGb3JtYXR0ZXIoe30sIHRyYW5zbGF0aW9ucykuZm9ybWF0KFwidGhla2V5OjphbmltYWw9ZG9nOjpmb29kPWNha2VcIikpLnRvLmJlLmVxdWFsKCdkb2cgaGFzIGVhdGVuIHRoZSBjYWtlIScpO1xuICAgICAgICAgICAgLy8gXHUyMUE2IGRvZyBoYXMgZWF0ZW4gdGhlIGNha2UhICAgICAgICAgICAgICAgIFxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnZm9ybWF0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnaTE4bnt0cmFuc2xhdGlvbmtleTo6YT0zOjpiPTV9JywgJ3Rlc3QgaXMgMyBhbmQgNSddLFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2Zvcm1hdCAnICsgYSArICcgc2hvdWxkICcgKyBiLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBuZXcgVHJhbnNsYXRpb25zKCdkZScpLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9ua2V5OiBcInRlc3QgaXMgJHthfSBhbmQgJHtifVwiXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGV4cGVjdChcbiAgICAgICAgICAgICAgICAgICAgbmV3IEZvcm1hdHRlcih7fSwgdHJhbnNsYXRpb25zKS5mb3JtYXQoYSlcbiAgICAgICAgICAgICAgICApLnRvLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cblxufSlcbjsiLCAiXG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge3BhcnNlTG9jYWxlLCBMb2NhbGV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi9sb2NhbGUubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0xvY2FsZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCduZXcgaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgLy8gbGFuZ3VhZ2UsIHJlZ2lvbiwgc2NyaXB0LCB2YXJpYW50cywgZXh0bGFuZywgcHJpdmF0ZVVzZVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzU2NDYuaHRtbFxuICAgICAgICAgICAgWyd6aCcsIHVuZGVmaW5lZCwgJ0hhbnQnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnemgtSGFudCddLCAvLyB6aC1IYW50IChDaGluZXNlIHdyaXR0ZW4gdXNpbmcgdGhlIFRyYWRpdGlvbmFsIENoaW5lc2Ugc2NyaXB0KVxuICAgICAgICAgICAgWydkZScsICdDSCcsIHVuZGVmaW5lZCwgJzE5MDEnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJ2RlLUNILTE5MDEnXSwgIC8vIGRlLUNILTE5MDEgKEdlcm1hbiBhcyB1c2VkIGluIFN3aXR6ZXJsYW5kIHVzaW5nIHRoZSAxOTAxIHZhcmlhbnQgW29ydGhvZ3JhcGh5XSlcbiAgICAgICAgICAgIFsnc2wnLCAnSVQnLCB1bmRlZmluZWQsICduZWRpcycsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnc2wtSVQtbmVkaXMnXSwgIC8vIHNsLUlULW5lZGlzIChTbG92ZW5pYW4gYXMgdXNlZCBpbiBJdGFseSwgTmFkaXphIGRpYWxlY3QpXG4gICAgICAgICAgICBbJ2h5JywgJ0lUJywgJ0xhdG4nLCAnYXJldmVsYScsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnaHktTGF0bi1JVC1hcmV2ZWxhJ10sIC8vIGh5LUxhdG4tSVQtYXJldmVsYSAoRWFzdGVybiBBcm1lbmlhbiB3cml0dGVuIGluIExhdGluIHNjcmlwdCwgYXMgdXNlZCBpbiBJdGFseSlcbiAgICAgICAgICAgIFsnemgnLCAnQ04nLCAnSGFucycsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICd6aC1IYW5zLUNOJ10sIC8vIHpoLUhhbnMtQ04gKENoaW5lc2Ugd3JpdHRlbiB1c2luZyB0aGUgU2ltcGxpZmllZCBzY3JpcHQgYXMgdXNlZCBpbiAgbWFpbmxhbmQgQ2hpbmEpXG4gICAgICAgICAgICBbJ3NyJywgJ1JTJywgJ0xhdG4nLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnc3ItTGF0bi1SUyddLCAvLyBzci1MYXRuLVJTIChTZXJiaWFuIHdyaXR0ZW4gdXNpbmcgdGhlIExhdGluIHNjcmlwdCBhcyB1c2VkIGluIFNlcmJpYSlcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBlID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGcgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ25ldyBMb2NhbGUoJyArIGEgKyAnLCcgKyBiICsgJywnICsgYyArICcsJyArIGQgKyAnLCcgKyBlICsgJywnICsgZiArICcpIHNob3VsZCByZXR1cm4gJyArIGcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgTG9jYWxlKGEsIGIsIGMsIGQsIGUsIGYpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKGcpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdwYXJzZUxvY2FsZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcblxuICAgICAgICAgICAgLy8gbGFuZ3VhZ2UsIHJlZ2lvbiwgc2NyaXB0LCB2YXJpYW50cywgZXh0bGFuZywgcHJpdmF0ZVVzZVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzU2NDYuaHRtbFxuICAgICAgICAgICAgWyd6aCcsIHVuZGVmaW5lZCwgJ0hhbnQnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnemgtSGFudCddLCAvLyB6aC1IYW50IChDaGluZXNlIHdyaXR0ZW4gdXNpbmcgdGhlIFRyYWRpdGlvbmFsIENoaW5lc2Ugc2NyaXB0KVxuICAgICAgICAgICAgWydkZScsICdDSCcsIHVuZGVmaW5lZCwgJzE5MDEnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJ2RlLUNILTE5MDEnXSwgIC8vIGRlLUNILTE5MDEgKEdlcm1hbiBhcyB1c2VkIGluIFN3aXR6ZXJsYW5kIHVzaW5nIHRoZSAxOTAxIHZhcmlhbnQgW29ydGhvZ3JhcGh5XSlcbiAgICAgICAgICAgIFsnc2wnLCAnSVQnLCB1bmRlZmluZWQsICduZWRpcycsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnc2wtSVQtbmVkaXMnXSwgIC8vIHNsLUlULW5lZGlzIChTbG92ZW5pYW4gYXMgdXNlZCBpbiBJdGFseSwgTmFkaXphIGRpYWxlY3QpXG4gICAgICAgICAgICBbJ2h5JywgJ0lUJywgJ0xhdG4nLCAnYXJldmVsYScsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnaHktTGF0bi1JVC1hcmV2ZWxhJ10sIC8vIGh5LUxhdG4tSVQtYXJldmVsYSAoRWFzdGVybiBBcm1lbmlhbiB3cml0dGVuIGluIExhdGluIHNjcmlwdCwgYXMgdXNlZCBpbiBJdGFseSlcbiAgICAgICAgICAgIFsnemgnLCAnQ04nLCAnSGFucycsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICd6aC1IYW5zLUNOJ10sIC8vIHpoLUhhbnMtQ04gKENoaW5lc2Ugd3JpdHRlbiB1c2luZyB0aGUgU2ltcGxpZmllZCBzY3JpcHQgYXMgdXNlZCBpbiAgbWFpbmxhbmQgQ2hpbmEpXG4gICAgICAgICAgICBbJ3NyJywgJ1JTJywgJ0xhdG4nLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnc3ItTGF0bi1SUyddLCAvLyBzci1MYXRuLVJTIChTZXJiaWFuIHdyaXR0ZW4gdXNpbmcgdGhlIExhdGluIHNjcmlwdCBhcyB1c2VkIGluIFNlcmJpYSlcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBlID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGcgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ25ldyBMb2NhbGUoJyArIGEgKyAnLCcgKyBiICsgJywnICsgYyArICcsJyArIGQgKyAnLCcgKyBlICsgJywnICsgZiArICcpIHNob3VsZCByZXR1cm4gJyArIGcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsZSA9IHBhcnNlTG9jYWxlKGcpXG4gICAgICAgICAgICAgICAgZXhwZWN0KGxvY2FsZS5sb2NhbGVTdHJpbmcpLnRvLmJlLmVxdWFsKGcpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChsb2NhbGUubGFuZ3VhZ2UpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChsb2NhbGUucmVnaW9uKS50by5iZS5lcXVhbChiKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobG9jYWxlLnNjcmlwdCkudG8uYmUuZXF1YWwoYyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxvY2FsZS52YXJpYW50cykudG8uYmUuZXF1YWwoZCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxvY2FsZS5leHRsYW5nKS50by5iZS5lcXVhbChlKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobG9jYWxlLnByaXZhdGVVc2UpLnRvLmJlLmVxdWFsKGYpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2NhbGUoYSwgYiwgYywgZCwgZSwgZikudG9TdHJpbmcoKSkuaXMuZXF1YWwoZylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtBVFRSSUJVVEVfT0JKRUNUTElOS30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtnZXRMaW5rZWRPYmplY3RzfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtQcm92aWRlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVyLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtnZXREb2N1bWVudFRyYW5zbGF0aW9ucywgVHJhbnNsYXRpb25zfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vdHJhbnNsYXRpb25zLm1qc1wiO1xuXG5kZXNjcmliZSgnUHJvdmlkZXInLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgIGxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG5cbiAgICB9KVxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgfSlcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdQcm92aWRlciBhbmQgRG9tJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wgPSBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL3RyYW5zbGF0aW9uc0BAbGlua1wiKTtcblxuICAgICAgICBpdCgnYXNzaWduVG9FbGVtZW50JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBuZXcgUHJvdmlkZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IHIgPSBwLmFzc2lnblRvRWxlbWVudCh1bmRlZmluZWQsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgICByLnRoZW4oKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX09CSkVDVExJTkspO1xuICAgICAgICAgICAgICAgIGlmIChzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKFwiQXR0cmlidXRlIG5vdCBzZXRcIikpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaSA9IGdldExpbmtlZE9iamVjdHMoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbClcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihcIk5vIGxpbmtlZCBvYmplY3QgZm91bmRcIikpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBjb3VudGVyID0gMDtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IHYgb2YgaSkge1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ZXIgIT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJObyBsaW5rZWQgb2JqZWN0IGZvdW5kXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGRvY1RyYW5zID0gZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoZWxlbWVudClcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jVHJhbnMpLmlzLmluc3RhbmNlb2YoVHJhbnNsYXRpb25zKTtcblxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBzY2h1a2FpIEdtYkggYW5kIGNvbnRyaWJ1dG9ycyAyMDIzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQUdQTHYzIExpY2Vuc2UuXG4gKiBMaWNlbnNlIHRleHQgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IEZvcm1hdHRlciB9IGZyb20gXCIuLi8uLi90ZXh0L2Zvcm1hdHRlci5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IGlzSW5zdGFuY2UsIGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgcGFyc2VMb2NhbGUgfSBmcm9tIFwiLi4vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tIFwiLi4vcHJvdmlkZXIubWpzXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbnMgfSBmcm9tIFwiLi4vdHJhbnNsYXRpb25zLm1qc1wiO1xuXG5leHBvcnQgeyBGZXRjaCB9O1xuXG4vKipcbiAqIFRoZSBmZXRjaCBwcm92aWRlciByZXRyaWV2ZXMgYSBKU09OIGZpbGUgZnJvbSB0aGUgZ2l2ZW4gVVJMIGFuZCByZXR1cm5zIGEgdHJhbnNsYXRpb24gb2JqZWN0LlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vLi4vZXhhbXBsZS9pMThuL3Byb3ZpZGVycy9mZXRjaC5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBtZW1iZXJPZiBNb25zdGVyLkkxOG4uUHJvdmlkZXJzXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzMwNjZ9XG4gKiBAdHV0b3JpYWwgaTE4bi1sb2NhbGUtYW5kLWZvcm1hdHRlclxuICovXG5jbGFzcyBGZXRjaCBleHRlbmRzIFByb3ZpZGVyIHtcblx0LyoqXG5cdCAqIEFzIG9wdGlvbnMgdGhlIGtleSBgZmV0Y2hgIGNhbiBiZSBwYXNzZWQuIFRoaXMgY29uZmlnIG9iamVjdCBpcyBwYXNzZWQgdG8gdGhlIGZldGNoIG1ldGhvZCBhcyBpbml0LlxuXHQgKlxuXHQgKiBUaGUgdXJsIG1heSBjb250YWluIHBsYWNlaG9sZGVycyAobGFuZ3VhZ2UsIHNjcmlwdCwgcmVnaW9uLCB2YXJpYW50cywgZXh0bGFuZywgcHJpdmF0ZVVzZSksIHNvIHlvdSBjYW4gc3BlY2lmeSBvbmUgdXJsIGZvciBhbGwgdHJhbnNsYXRpb25zLlxuXHQgKlxuXHQgKiBgYGBcblx0ICogbmV3IEZldGNoKCdodHRwczovL3d3dy5leGFtcGxlLmNvbS9hc3NldHMvJHtsYW5ndWFnZX0uanNvbicpXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBzZWUge0BsaW5rIE1vbnN0ZXIuSTE4bi5Qcm92aWRlcnMuRmV0Y2gjZGVmYXVsdHN9XG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9mZXRjaH1cblx0ICovXG5cdGNvbnN0cnVjdG9yKHVybCwgb3B0aW9ucykge1xuXHRcdHN1cGVyKG9wdGlvbnMpO1xuXG5cdFx0aWYgKGlzSW5zdGFuY2UodXJsLCBVUkwpKSB7XG5cdFx0XHR1cmwgPSB1cmwudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb25zID0ge307XG5cdFx0fVxuXG5cdFx0dmFsaWRhdGVTdHJpbmcodXJsKTtcblxuXHRcdC8qKlxuXHRcdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfVxuXHRcdCAqL1xuXHRcdHRoaXMudXJsID0gdXJsO1xuXG5cdFx0LyoqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcHJvcGVydHkge09iamVjdH0gb3B0aW9uc1xuXHRcdCAqL1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gZXh0ZW5kKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHRoaXMuZGVmYXVsdHMsXG5cdFx0XHR2YWxpZGF0ZU9iamVjdChvcHRpb25zKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmF1bHRzXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubWV0aG9kPUdFVFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubW9kZT1jb3JzXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5jYWNoZT1uby1jYWNoZVxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2guY3JlZGVudGlhbHM9b21pdFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gucmVkaXJlY3Q9Zm9sbG93XG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5yZWZlcnJlclBvbGljeT1uby1yZWZlcnJlclxuXHQgKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoXG5cdFx0XHR7XG5cdFx0XHRcdGZldGNoOiB7XG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLCAvLyAqR0VULCBQT1NULCBQVVQsIERFTEVURSwgZXRjLlxuXHRcdFx0XHRcdG1vZGU6IFwiY29yc1wiLCAvLyBuby1jb3JzLCAqY29ycywgc2FtZS1vcmlnaW5cblx0XHRcdFx0XHRjYWNoZTogXCJuby1jYWNoZVwiLCAvLyAqZGVmYXVsdCwgbm8tY2FjaGUsIHJlbG9hZCwgZm9yY2UtY2FjaGUsIG9ubHktaWYtY2FjaGVkXG5cdFx0XHRcdFx0Y3JlZGVudGlhbHM6IFwib21pdFwiLCAvLyBpbmNsdWRlLCAqc2FtZS1vcmlnaW4sIG9taXRcblx0XHRcdFx0XHRyZWRpcmVjdDogXCJmb2xsb3dcIiwgLy8gbWFudWFsLCAqZm9sbG93LCBlcnJvclxuXHRcdFx0XHRcdHJlZmVycmVyUG9saWN5OiBcIm5vLXJlZmVycmVyXCIsIC8vIG5vLXJlZmVycmVyLCAqbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUsIG9yaWdpbiwgb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luLCBzYW1lLW9yaWdpbiwgc3RyaWN0LW9yaWdpbiwgc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbiwgdW5zYWZlLXVybFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtMb2NhbGV8c3RyaW5nfSBsb2NhbGVcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGdldFRyYW5zbGF0aW9ucyhsb2NhbGUpIHtcblx0XHRpZiAoaXNTdHJpbmcobG9jYWxlKSkge1xuXHRcdFx0bG9jYWxlID0gcGFyc2VMb2NhbGUobG9jYWxlKTtcblx0XHR9XG5cblx0XHRjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKGxvY2FsZS5nZXRNYXAoKSk7XG5cblx0XHRyZXR1cm4gZ2V0R2xvYmFsRnVuY3Rpb24oXCJmZXRjaFwiKShcblx0XHRcdGZvcm1hdHRlci5mb3JtYXQodGhpcy51cmwpLFxuXHRcdFx0dGhpcy5nZXRPcHRpb24oXCJmZXRjaFwiLCB7fSksXG5cdFx0KVxuXHRcdFx0LnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5qc29uKCkpXG5cdFx0XHQudGhlbigoZGF0YSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFRyYW5zbGF0aW9ucyhsb2NhbGUpLmFzc2lnblRyYW5zbGF0aW9ucyhkYXRhKTtcblx0XHRcdH0pO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuXG5pbXBvcnQge0ZldGNofSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXJzL2ZldGNoLm1qc1wiO1xuaW1wb3J0IHtUcmFuc2xhdGlvbnN9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5cblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5sZXQgZmV0Y2hSZWZlcmVuY2U7XG5cblxuZGVzY3JpYmUoJ1RyYW5zbGF0aW9uIFByb3ZpZGVyIEZldGNoJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgIGZldGNoUmVmZXJlbmNlID0gZ2xvYmFsWydmZXRjaCddO1xuICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBqc29uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IFwidGVzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZmV0Y2ggbW9jayBkYXRhIGFuZCBjcmVhdGUgdHJhbnNsYXRpb24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2ZldGNoJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IHAgPSAobmV3IEZldGNoKG5ldyBVUkwoJ2h0dHA6Ly9leGFtcGxlLmNvbScpKSkuZ2V0VHJhbnNsYXRpb25zKCdlbicpO1xuXG4gICAgICAgICAgICBleHBlY3QocCkuaXMuaW5zdGFuY2VvZihQcm9taXNlKTtcblxuICAgICAgICAgICAgcC50aGVuKHIgPT4ge1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHIpLmlzLmluc3RhbmNlb2YoVHJhbnNsYXRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuXG5pbXBvcnQge0VtYmVkfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXJzL2VtYmVkLm1qc1wiO1xuaW1wb3J0IHtUcmFuc2xhdGlvbnN9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmNvbnN0IGh0bWwxID0gYFxuPHNjcmlwdCBpZD1cInRlbXBsb2NhbGVcIiB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiPlxue1xuICAgICAgICBcImtleVwiOiBcInRyYW5zbGF0aW9uXCJcbn1cbjwvc2NyaXB0PlxuYDtcblxuZGVzY3JpYmUoJ1RyYW5zbGF0aW9uIFByb3ZpZGVyIEVtYmVkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2dldCBtb2NrIGRhdGEgYW5kIGNyZWF0ZSB0cmFuc2xhdGlvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnZW1iZWQnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCBlID0gbmV3IEVtYmVkKCd0ZW1wbG9jYWxlJyk7XG4gICAgICAgICAgICBsZXQgcCA9IGUuZ2V0VHJhbnNsYXRpb25zKCdlbicpO1xuICAgICAgICAgICAgZXhwZWN0KHApLmlzLmluc3RhbmNlb2YoUHJvbWlzZSk7XG5cbiAgICAgICAgICAgIHAudGhlbihyID0+IHtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChyKS5pcy5pbnN0YW5jZW9mKFRyYW5zbGF0aW9ucyk7XG4gXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ID0gci5nZXRUZXh0KCdrZXknKVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QodCkuaXMuZXF1YWwoJ3RyYW5zbGF0aW9uJyk7XG5cblxuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtwYXJzZUxvY2FsZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7RW1iZWR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZW1iZWQubWpzXCI7XG5pbXBvcnQge1xuICAgIFRyYW5zbGF0aW9ucyxcbiAgICBnZXREb2N1bWVudFRyYW5zbGF0aW9uc1xuICAgIFxufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vdHJhbnNsYXRpb25zLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnVHJhbnNsYXRpb25zJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ0luc3RhbmNlIGFuZCBJbml0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCB0cmFuc2xhdGlvbjtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uID0gbmV3IFRyYW5zbGF0aW9ucyhwYXJzZUxvY2FsZSgnZW4tR0InKSk7XG5cbiAgICAgICAgICAgIHRyYW5zbGF0aW9uLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgdGVzdDE6IFwiYWJjXCIsXG4gICAgICAgICAgICAgICAgdGVzdDI6IHsnb3RoZXInOiAneHl6J31cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdjcmVhdGUgaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFRyYW5zbGF0aW9ucyhwYXJzZUxvY2FsZSgnZW4tR0InKSkpLmlzLmluc3RhbmNlb2YoVHJhbnNsYXRpb25zKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2luaXQgdHJhbnNsYXRpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHRyYW5zbGF0aW9uLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgdGVzdDE6IFwiYWJjXCIsXG4gICAgICAgICAgICAgICAgdGVzdDI6IHsnb3RoZXInOiAneHl6J31cbiAgICAgICAgICAgIH0pKS5pcy5pbnN0YW5jZW9mKFRyYW5zbGF0aW9ucyk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ2V0VGV4dCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgdHJhbnNsYXRpb247XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICB0cmFuc2xhdGlvbiA9IG5ldyBUcmFuc2xhdGlvbnMocGFyc2VMb2NhbGUoJ2VuLUdCJykpO1xuXG4gICAgICAgICAgICB0cmFuc2xhdGlvbi5hc3NpZ25UcmFuc2xhdGlvbnMoe1xuICAgICAgICAgICAgICAgIHRlc3QxOiBcImFiY1wiLFxuICAgICAgICAgICAgICAgIHRlc3QyOiB7J290aGVyJzogJ3h5eid9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnY3JlYXRlLCBzZXQgYW5kIGdldCBlbi1HQicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCh0cmFuc2xhdGlvbi5nZXRUZXh0KCd0ZXN0MScpKS5pcy5lcXVhbCgnYWJjJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdjcmVhdGUsIHNldCBhbmQgZ2V0ICBlbi1HQiB3aXRoIHBsdXJhbHJ1bGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHRyYW5zbGF0aW9uLmdldFRleHQoJ3Rlc3QyJykpLmlzLmVxdWFsKCd4eXonKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogaW5pdERvY3VtZW50VHJhbnNsYXRpb25cbiAgICAgKi9cblxuICAgIGRlc2NyaWJlKFwidGVzdCBpbml0RG9jdW1lbnRUcmFuc2xhdGlvbiBcIiwgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgbGV0IGh0bWwxID0gYDxkaXYgaWQ9XCJtb2NrLXRyYW5zbGF0aW9uc1wiPjwvZGl2PlxuICAgIFxuPHNjcmlwdCB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiIGRhdGEtbW9uc3Rlci1yb2xlPVwidHJhbnNsYXRpb25zXCI+XG4gICAge1xuICAgICAgICBcInRlc3QxXCI6IFwiYWJjXCIsXG4gICAgICAgIFwidGVzdDJcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcInh5elwiXG4gICAgICAgIH1cbiAgICB9XG48L3NjcmlwdD5cblxuPHNjcmlwdCB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiIGRhdGEtbW9uc3Rlci1yb2xlPVwidHJhbnNsYXRpb25zXCI+XG4gICAge1xuICAgICAgICBcInRlc3QxXCI6IFwieHl6XCIsXG4gICAgICAgIFwidGVzdDNcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcInh5elwiXG4gICAgICAgIH1cbiAgICB9XG48L3NjcmlwdD4gICAgXG4gICAgXG5gO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgICAgIGl0KCdJbml0IHRyYW5zbGF0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2stdHJhbnNsYXRpb25zJyk7XG4gICAgICAgICAgICBFbWJlZC5hc3NpZ25UcmFuc2xhdGlvbnNUb0VsZW1lbnQoZWxlbSkudGhlbigobykgPT4ge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gbm8gZXhjZXB0aW9uIGJlY2F1c2Ugb2YgZGVmYXVsdFxuICAgICAgICAgICAgICAgIGV4cGVjdChnZXREb2N1bWVudFRyYW5zbGF0aW9ucyhlbGVtKS5nZXRUZXh0KCduby1rZXknLCd3aXRoLWRlZmF1bHQnKSlcbiAgICAgICAgICAgICAgICAgICAgLmlzLmVxdWFsKCd3aXRoLWRlZmF1bHQnKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBleHBlY3QoZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoZWxlbSkuZ2V0VGV4dCgndGVzdDEnKSlcbiAgICAgICAgICAgICAgICAgICAgLmlzLmVxdWFsKCd4eXonKTtcblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG5cbn0pOyJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1DQSxXQUFTLFdBQVcsT0FBTztBQUMxQixRQUFJLFVBQVU7QUFBVyxhQUFPO0FBQ2hDLFFBQUksVUFBVTtBQUFNLGFBQU87QUFDM0IsV0FBTyxPQUFPLFFBQVEsT0FBTyxRQUFRLE1BQU07QUFBQSxFQUM1QztBQWVBLFdBQVMsWUFBWSxPQUFPO0FBQzNCLFFBQUk7QUFFSixRQUFJLFVBQVUsVUFBYSxVQUFVLE1BQU07QUFDMUMsYUFBTztBQUFBLElBQ1I7QUFFQSxXQUFPLE9BQU87QUFFZCxRQUNDLFNBQVMsWUFDVCxTQUFTLFlBQ1QsU0FBUyxhQUNULFNBQVMsVUFDUjtBQUNELGFBQU87QUFBQSxJQUNSO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFlQSxXQUFTLFNBQVMsT0FBTztBQUN4QixXQUFPLGFBQWEsT0FBTyxRQUFRLE9BQU87QUFBQSxFQUMzQztBQWVBLFdBQVMsVUFBVSxPQUFPO0FBQ3pCLFFBQUksVUFBVSxRQUFRLFVBQVUsT0FBTztBQUN0QyxhQUFPO0FBQUEsSUFDUjtBQUVBLFdBQU87QUFBQSxFQUNSO0FBZUEsV0FBUyxTQUFTLE9BQU87QUFDeEIsUUFBSSxVQUFVLFVBQWEsT0FBTyxVQUFVLFVBQVU7QUFDckQsYUFBTztBQUFBLElBQ1I7QUFDQSxXQUFPO0FBQUEsRUFDUjtBQWVBLFdBQVMsU0FBUyxPQUFPO0FBQ3hCLFFBQUksUUFBUSxLQUFLO0FBQUcsYUFBTztBQUMzQixRQUFJLFlBQVksS0FBSztBQUFHLGFBQU87QUFFL0IsUUFBSSxPQUFPLFVBQVUsVUFBVTtBQUM5QixhQUFPO0FBQUEsSUFDUjtBQUVBLFdBQU87QUFBQSxFQUNSO0FBZ0JBLFdBQVMsV0FBVyxPQUFPLFVBQVU7QUFDcEMsUUFBSSxDQUFDLFNBQVMsS0FBSztBQUFHLGFBQU87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Q0ksR0FBRztBQUFBLFlBQ0MsR0FBRztBQUFBLFVBQ1A7QUFBQSxVQUNBLEdBQUc7QUFBQSxZQUNDLEdBQUc7QUFBQSxVQUNQO0FBQUEsUUFDSjtBQUFBLFFBQ0E7QUFBQSxVQUNJLEdBQUc7QUFBQSxZQUNDLEdBQUc7QUFBQSxVQUNQO0FBQUEsVUFDQSxHQUFHO0FBQUEsWUFDQyxHQUFHO0FBQUEsVUFDUDtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsTUFDSjtBQUFBLE1BRUE7QUFBQSxRQUNJO0FBQUEsVUFDSSxHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxVQUNJLEdBQUc7QUFBQSxVQUNILEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQSwwREFBMEQsTUFBTSxZQUFZLElBQUk7QUFBQSxNQUNwRjtBQUFBLE1BRUE7QUFBQSxRQUNJO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLE1BQ0o7QUFBQSxNQUNBO0FBQUEsUUFDSTtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLFFBQ0ksQ0FBQztBQUFBLFFBQ0Q7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLE1BQ0o7QUFBQSxNQUVBO0FBQUEsUUFDSTtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxNQUNKO0FBQUEsTUFFQTtBQUFBLFFBQ0k7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsTUFDSjtBQUFBLE1BRUE7QUFBQSxRQUNJO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxVQUNJ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O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFzQlosaUJBQVcsTUFBTTtBQUNiLFlBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxjQUFNLFlBQVlBO0FBQUEsTUFFdEIsQ0FBQztBQUVELGdCQUFVLE1BQU07QUFDWixZQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsY0FBTSxZQUFZO0FBQUEsTUFDdEIsQ0FBQztBQUVELGFBQU8sU0FBVSxNQUFNO0FBQ25CLGtCQUFVLEVBQUUsS0FBSyxNQUFNO0FBQ25CLGVBQUs7QUFBQSxRQUNULENBQUM7QUFBQSxNQUNMLENBQUM7QUFHRCxTQUFHLHFCQUFxQixTQUFVLE1BQU07QUFFcEMsWUFBSSxPQUFPLFNBQVMsZUFBZSxtQkFBbUI7QUFDdEQsY0FBTSw0QkFBNEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNO0FBRWhELGNBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUczQyxpQkFBTyx3QkFBd0IsSUFBSSxFQUFFLFFBQVEsVUFBUyxjQUFjLENBQUMsRUFDaEUsR0FBRyxNQUFNLGNBQWM7QUFFNUIsaUJBQU8sd0JBQXdCLElBQUksRUFBRSxRQUFRLE9BQU8sQ0FBQyxFQUNoRCxHQUFHLE1BQU0sS0FBSztBQUVuQixlQUFLO0FBQUEsUUFFVCxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU07QUFDZCxlQUFLLENBQUM7QUFBQSxRQUNSLENBQUM7QUFBQSxNQUdMLENBQUM7QUFBQSxJQUNMLENBQUM7QUFBQSxFQUdMLENBQUM7IiwKICAibmFtZXMiOiBbIkFzc2VydGlvbkVycm9yIiwgImV4dGVuZCIsICJnbG9iYWwiLCAiQXNzZXJ0aW9uRXJyb3IiLCAiZ2xvYmFsIiwgImV4cG9ydHMiLCAib2JqIiwgInRydW5jYXRlIiwgIm9wdGlvbnMiLCAic2l6ZSIsICJnZXRBcnJheU5hbWUiLCAiaXNOYU4iLCAiZXNjYXBlIiwgImdldFByb21pc2VWYWx1ZSIsICJCb29sZWFuIiwgIldlYWtTZXQiLCAiV2Vha01hcCIsICJEYXRhVmlldyIsICJBcnJheUJ1ZmZlciIsICJpbnNwZWN0Q3VzdG9tIiwgImNvbmZpZyIsICJvcHRpb25zIiwgImNvbmZpZyIsICJpc1ByaW1pdGl2ZSIsICJvcHRpb25zIiwgImNvbmZpZyIsICJjaGFpIiwgImZuIiwgImNvbmZpZyIsICJjaGFpIiwgImNoYWkiLCAiY2hhaSIsICJjaGFpIiwgImNoYWkiLCAiYSIsICJpc05hTiIsICJnZXRPcGVyYXRvciIsICJpc09iamVjdCIsICJjb25maWciLCAidXRpbCIsICJBc3NlcnRpb25FcnJvciIsICJBc3NlcnRpb24iLCAiZm4iLCAiY2hhaSIsICJBc3NlcnRpb24iLCAiQXNzZXJ0aW9uRXJyb3IiLCAiYSIsICJzdGFydCIsICJjb250YWlucyIsICJtYXRjaElkeCIsICJmbiIsICJjaGFpIiwgInV0aWwiLCAiY2hhaSIsICJ1dGlsIiwgIkFzc2VydGlvbiIsICJzaG91bGQiLCAiZm4iLCAiY2hhaSIsICJ1dGlsIiwgIkFzc2VydGlvbiIsICJhc3NlcnQiLCAiZm4iLCAidXRpbCIsICJmbiIsICJjb25maWciLCAiY29yZSIsICJleHBlY3QiLCAic2hvdWxkIiwgImFzc2VydCIsICJyZXF1aXJlX2NoYWkiLCAiYSIsICJTdG9yYWdlIiwgInNlbGYiLCAibm9kZSIsICJhZGRlZE5vZGVzIiwgImEiLCAiZGVmaW5lIiwgIm9wdGlvbnMiLCAic3ltYm9sIiwgImluaXQiLCAiYSIsICJpbml0X2NvbnN0YW50cyIsICJzeW1ib2wiLCAiaW5pdF9jb25zdGFudHMiLCAiZG9jdW1lbnQiLCAid2luZG93IiwgImRvY3VtZW50IiwgImluaXRfbG9jYWxlIiwgIm5hdmlnYXRvciIsICJvcHRpb25zIiwgImluaXRfbG9jYWxlIiwgImQiLCAiaW5pdF9jb25zdGFudHMiLCAiY29uc29sZSIsICJjb25jYXQiLCAic3RhcnQiLCAiZW5kIiwgIm9wdGlvbnMiLCAidG9nZ2xlIiwgImluaXRfbG9jYWxlIiwgIkRFTElNSVRFUiIsICJvcHRpb25zIiwgImEiLCAiaW50ZXJuYWwiLCAic2VsZiIsICJkb2N1bWVudCIsICJpbml0X2NvbnN0YW50cyIsICJkb2N1bWVudCIsICJIVE1MVGVtcGxhdGVFbGVtZW50IiwgIkRvY3VtZW50RnJhZ21lbnQiLCAiRG9jdW1lbnQiLCAiaW5pdF9jb25zdGFudHMiLCAiYSIsICJkaWZmIiwgImRvY3VtZW50IiwgIm9wdGlvbnMiLCAidmFsdWUiLCAiZSIsICJpIiwgInN5bWJvbCIsICJpbml0X2NvbnN0YW50cyIsICJvcHRpb25zIiwgIm9wdGlvbnMiLCAic2VsZiIsICJkIiwgIm9wdGlvbnMiLCAiY3VzdG9tRWxlbWVudHMiLCAiaW5pdF9jb25zdGFudHMiLCAiYSIsICJpbml0X2NvbnN0YW50cyIsICJvcHRpb25zIiwgInQiLCAib3B0aW9ucyIsICJvYnNlcnZlciIsICJsb2FkQ29udGVudCIsICJpbml0X2NvbnN0YW50cyIsICJCdWZmZXJTb3VyY2VDb252ZXJ0ZXIiLCAiYSIsICJzaXplIiwgIm9mZnNldCIsICJDb252ZXJ0IiwgImNvbWJpbmUiLCAicmV0QnVmIiwgInJldFZpZXciLCAiQm9vbGVhbiIsICJTZXQiLCAiX2EiLCAibWF4IiwgInJldFZpZXciLCAic2l6ZSIsICJ0ZW1wQnVmZmVyVmlldyIsICJvZmZzZXQiLCAiQXNuVHlwZVR5cGVzIiwgIkFzblByb3BUeXBlcyIsICJpbXBvcnRfcHZ0c3V0aWxzIiwgIkJvb2xlYW4iLCAiX2EiLCAiU2V0IiwgIm9wdGlvbnMiLCAiZGVmYXVsdENvbnZlcnRlciIsICJfYSIsICJTZXQiLCAiU2V0IiwgImltcG9ydF9wdnRzdXRpbHMiLCAiZCIsICJpc0NvbnZlcnRpYmxlIiwgInNjaGVtYVN0b3JhZ2UiLCAiaW5pdF9pbmRleF9lcyIsICJKc29uUHJvcFR5cGVzIiwgIm1pbiIsICJtYXgiLCAib3B0aW9ucyIsICJpbXBvcnRfcHZ0c3V0aWxzIiwgIk9iamVjdElkZW50aWZpZXIiLCAiaW5pdF9pbmRleF9lcyIsICJvcHRpb25zIiwgImZvcm1hdCIsICJFY1B1YmxpY0tleSIsICJzaXplIiwgIm9mZnNldCIsICJFZFByaXZhdGVLZXkiLCAiRWRQdWJsaWNLZXkiLCAiQ3VydmVQcml2YXRlS2V5IiwgImxlbiIsICJpIiwgInN0YXJ0IiwgImVuZCIsICJsZW4yIiwgIm9mZnNldCIsICJkIiwgIkJ1ZmZlciIsICJpc0luc3RhbmNlIiwgInNpemUiLCAiYSIsICJjb25jYXQiLCAic3RhcnQiLCAiZW5kIiwgIm1heCIsICJyZWFkIiwgImkiLCAib2Zmc2V0IiwgIndyaXRlIiwgImJ5dGVMZW5ndGgiLCAibWluIiwgIkNyeXB0byIsICJhIiwgInN0YXJ0IiwgImVuZCIsICJwcm9jZXNzIiwgImltcG9ydF9wdnRzdXRpbHMiLCAiQ3J5cHRvS2V5IiwgIkFlc0NiY1Byb3ZpZGVyIiwgIkFlc0NtYWNQcm92aWRlciIsICJBZXNDdHJQcm92aWRlciIsICJBZXNHY21Qcm92aWRlciIsICJBZXNLd1Byb3ZpZGVyIiwgIkFlc0VjYlByb3ZpZGVyIiwgIlJzYVByaXZhdGVLZXkiLCAiUnNhUHVibGljS2V5IiwgIlJzYVNzYVByb3ZpZGVyIiwgIlJzYVBzc1Byb3ZpZGVyIiwgIlJzYU9hZXBQcm92aWRlciIsICJFY1ByaXZhdGVLZXkiLCAiRWNQdWJsaWNLZXkiLCAiRWNkc2FQcm92aWRlciIsICJFY2RoUHJvdmlkZXIiLCAiRWRQcml2YXRlS2V5IiwgIkVkUHVibGljS2V5IiwgIkVkRHNhUHJvdmlkZXIiLCAiRWNkaEVzUHJvdmlkZXIiLCAiUGJrZGYyUHJvdmlkZXIiLCAiSG1hY1Byb3ZpZGVyIiwgIkhrZGZQcm92aWRlciIsICJTaGFrZTEyOFByb3ZpZGVyIiwgIlNoYWtlMjU2UHJvdmlkZXIiLCAiU3VidGxlQ3J5cHRvIiwgImluaXRfaW5kZXhfZXMiLCAiY3J5cHRvX19kZWZhdWx0IiwgImZvcm1hdCIsICJvcHRpb25zIiwgImhhc2giLCAiX2EiLCAiaW5pdF9lbnVtcyIsICJnZXRXaW5kb3ciLCAiZ2V0V2luZG93IiwgIm5hbWUiLCAic3R5bGUiLCAiZ2V0V2luZG93IiwgImdldFdpbmRvdyIsICJ3aW5kb3ciLCAiZ2V0V2luZG93IiwgIm1pbiIsICJtYXgiLCAib3B0aW9ucyIsICJwb3BwZXJPZmZzZXRzIiwgIm1pbiIsICJtYXgiLCAib2Zmc2V0IiwgImVmZmVjdCIsICJpbml0X2VudW1zIiwgInRvUGFkZGluZ09iamVjdCIsICJwb3BwZXIiLCAiZ2V0V2luZG93IiwgIm9wdGlvbnMiLCAiaW5pdF9lbnVtcyIsICJlZmZlY3QiLCAib3B0aW9ucyIsICJ3aW5kb3ciLCAiZ2V0V2luZG93IiwgImhhc2giLCAiZ2V0V2luZG93IiwgImdldFdpbmRvdyIsICJnZXRXaW5kb3ciLCAiY2xpcHBpbmdQYXJlbnRzIiwgImluaXRfZW51bXMiLCAicmVmZXJlbmNlIiwgImluaXRfZW51bXMiLCAib3B0aW9ucyIsICJwb3BwZXJPZmZzZXRzIiwgIm9mZnNldCIsICJpbml0X2VudW1zIiwgIm9wdGlvbnMiLCAicGxhY2VtZW50cyIsICJwbGFjZW1lbnQiLCAiYSIsICJpbml0X2VudW1zIiwgIm9wdGlvbnMiLCAicGxhY2VtZW50cyIsICJwbGFjZW1lbnQiLCAiX2xvb3AiLCAiX2kiLCAiY2hlY2tzIiwgImluaXRfZW51bXMiLCAiaGlkZSIsICJpbml0X2VudW1zIiwgIm9mZnNldCIsICJvcHRpb25zIiwgImluaXRfZW51bXMiLCAib3B0aW9ucyIsICJwb3BwZXJPZmZzZXRzIiwgIm9mZnNldCIsICJtaW4iLCAibWF4IiwgImluaXRfZW51bXMiLCAiZ2V0V2luZG93IiwgImluaXRfZW51bXMiLCAiZm4iLCAibWVyZ2VkIiwgImRlZmF1bHRNb2RpZmllcnMiLCAiY3JlYXRlUG9wcGVyIiwgInJlZmVyZW5jZSIsICJwb3BwZXIiLCAib3B0aW9ucyIsICJmbiIsICJzdGF0ZSIsICJlZmZlY3QiLCAibm9vcEZuIiwgImluaXRfZW51bXMiLCAibWluIiwgIm1heCIsICJnbG9iYWxSZWZlcmVuY2UiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF90aGVtZSIsICJpbml0X2NvbnN0YW50cyIsICJvcHRpb25zIiwgImluaXRfcG9wcGVyIiwgInNlbGYiLCAib3B0aW9ucyIsICJzaG93IiwgInJlZmVyZW5jZSIsICJnZXRUZW1wbGF0ZSIsICJpbml0X3RhYnMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF90aGVtZSIsICJpbml0X3BvcHBlciIsICJkb2N1bWVudCIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0RXZlbnRIYW5kbGVyIiwgInNlbGYiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImdldFRlbXBsYXRlIiwgImluaXRfYnV0dG9uIiwgImluaXRfY29uc3RhbnRzIiwgIm9wdGlvbnMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW50ZXJuYWxTeW1ib2wiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9zdGF0ZV9idXR0b24iLCAiaW5pdF9idXR0b24iLCAiYSIsICJzdGFydCIsICJlbmQiLCAibWF4IiwgIm1pbiIsICJnZXRPcHBvc2l0ZVBsYWNlbWVudCIsICJyZWN0VG9DbGllbnRSZWN0IiwgInBsYWNlbWVudHMiLCAicm91bmQiLCAicmVmZXJlbmNlIiwgImRldGVjdE92ZXJmbG93IiwgIm9wdGlvbnMiLCAicGxhdGZvcm0iLCAicmVjdFRvQ2xpZW50UmVjdCIsICJhcnJvdyIsICJmbGlwIiwgIm9mZnNldCIsICJjb25maWciLCAiZm4iLCAibWluIiwgIm1heCIsICJwbGFjZW1lbnRzIiwgImQiLCAiYWxpZ25tZW50IiwgImEiLCAiZ2V0T3Bwb3NpdGVQbGFjZW1lbnQiLCAic2lkZXMiLCAic2lkZSIsICJwbGFjZW1lbnQiLCAib3ZlcmZsb3ciLCAieCIsICJ5IiwgImdldE5vZGVOYW1lIiwgImlzTm9kZSIsICJnZXRXaW5kb3ciLCAiZ2V0RG9jdW1lbnRFbGVtZW50IiwgImlzRWxlbWVudCIsICJpc0hUTUxFbGVtZW50IiwgImlzU2hhZG93Um9vdCIsICJnZXRDb21wdXRlZFN0eWxlIiwgImlzVGFibGVFbGVtZW50IiwgImdldENvbnRhaW5pbmdCbG9jayIsICJnZXRQYXJlbnROb2RlIiwgImdldE5vZGVTY3JvbGwiLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJpc0hUTUxFbGVtZW50IiwgInJvdW5kIiwgImlzRWxlbWVudCIsICJnZXRXaW5kb3ciLCAiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwgImxlZnQiLCAidG9wIiwgInJlY3RUb0NsaWVudFJlY3QiLCAiZ2V0RG9jdW1lbnRFbGVtZW50IiwgImdldE5vZGVOYW1lIiwgImdldE5vZGVTY3JvbGwiLCAiZ2V0V2luZG93U2Nyb2xsQmFyWCIsICJnZXREb2N1bWVudFJlY3QiLCAibWF4IiwgImdldFZpZXdwb3J0UmVjdCIsICJnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdCIsICJnZXRQYXJlbnROb2RlIiwgImdldENsaXBwaW5nUmVjdCIsICJtaW4iLCAiZ2V0VHJ1ZU9mZnNldFBhcmVudCIsICJnZXRPZmZzZXRQYXJlbnQiLCAid2luZG93IiwgImlzVGFibGVFbGVtZW50IiwgImdldENvbnRhaW5pbmdCbG9jayIsICJvcHRpb25zIiwgInJlZmVyZW5jZSIsICJhdXRvUGxhY2VtZW50IiwgInNoaWZ0IiwgImZsaXAiLCAic2l6ZSIsICJhcnJvdyIsICJjb21wdXRlUG9zaXRpb24iLCAib3B0aW9ucyIsICJjb25maWciLCAiZm4iLCAiZmxpcCIsICJzaGlmdCIsICJsaW5lIiwgImF1dG9QbGFjZW1lbnQiLCAiZGV0ZWN0T3ZlcmZsb3ciLCAiYXJyb3ciLCAic2l6ZSIsICJvZmZzZXQiLCAiY29tcHV0ZVBvc2l0aW9uIiwgIngiLCAieSIsICJpbml0X2NvbnN0YW50cyIsICJwb3BwZXJFbGVtZW50U3ltYm9sIiwgImluaXRPcHRpb25zRnJvbUFyZ3VtZW50cyIsICJvcHRpb25zIiwgImF0dGFjaFJlc2l6ZU9ic2VydmVyIiwgInJlc2l6ZU9ic2VydmVyU3ltYm9sIiwgInRpbWVyQ2FsbGJhY2tTeW1ib2wiLCAic2VsZiIsICJvYnNlcnZlciIsICJydW4iLCAic2hvdyIsICJoaWRlIiwgImluaXRPcHRpb25PYnNlcnZlciIsICJtYXgiLCAiY29udHJvbEVsZW1lbnRTeW1ib2wiLCAiZm9jdXNGaWx0ZXIiLCAiYSIsICJnbG9iYWwiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJjbG9zZUV2ZW50SGFuZGxlciIsICJlbGVtZW50IiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJnZXRUZW1wbGF0ZSIsICJpbml0X3NlbGVjdCIsICJpbml0X2NvbnN0YW50cyIsICJkb2N1bWVudCIsICJpbml0X3BvcHBlciIsICJpbml0X2NvbnN0YW50cyIsICJpbml0RXZlbnRIYW5kbGVyIiwgImNsb3NlRXZlbnRIYW5kbGVyIiwgImhpZGUiLCAiYnV0dG9uRWxlbWVudFN5bWJvbCIsICJhdHRhY2hSZXNpemVPYnNlcnZlciIsICJyZXNpemVPYnNlcnZlclN5bWJvbCIsICJ0aW1lckNhbGxiYWNrU3ltYm9sIiwgInVwZGF0ZVBvcHBlciIsICJkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIiLCAic2VsZiIsICJwb3BwZXJFbGVtZW50U3ltYm9sIiwgImNvbnRyb2xFbGVtZW50U3ltYm9sIiwgInNob3ciLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImdldFRlbXBsYXRlIiwgImluaXRfcG9wcGVyIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfYnV0dG9uIiwgImRvY3VtZW50IiwgImluaXRfY29uc3RhbnRzIiwgImluaXRFdmVudEhhbmRsZXIiLCAiY2xvc2VFdmVudEhhbmRsZXIiLCAiYXR0YWNoUmVzaXplT2JzZXJ2ZXIiLCAicmVzaXplT2JzZXJ2ZXJTeW1ib2wiLCAidGltZXJDYWxsYmFja1N5bWJvbCIsICJ1cGRhdGVQb3BwZXIiLCAiZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyIiwgInBvcHBlckVsZW1lbnRTeW1ib2wiLCAiY29udHJvbEVsZW1lbnRTeW1ib2wiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImJ1dHRvbkVsZW1lbnRTeW1ib2wiLCAiYXJyb3dFbGVtZW50U3ltYm9sIiwgImdldFRlbXBsYXRlIiwgImluaXRfcG9wcGVyX2J1dHRvbiIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X3BvcHBlciIsICJpbml0X2J1dHRvbiIsICJkb2N1bWVudCIsICJvcHRpb25zIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRFdmVudEhhbmRsZXJCeU1vZGUiLCAiYnV0dG9uRWxlbWVudFN5bWJvbCIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9tZXNzYWdlX3N0YXRlX2J1dHRvbiIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X3BvcHBlciIsICJpbml0X3N0YXRlX2J1dHRvbiIsICJvcHRpb25zIiwgInNlbGYiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImdldFRlbXBsYXRlIiwgImluaXRfY29uZmlybV9idXR0b24iLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9idXR0b24iLCAiaW5pdF9wb3BwZXJfYnV0dG9uIiwgImluaXRfbWVzc2FnZV9zdGF0ZV9idXR0b24iLCAicGFyc2VPcHRpb25zSlNPTiIsICJvcHRpb25zIiwgImluaXRfc3RvcmFnZSIsICJzZWxmIiwgImZldGNoRGF0YSIsICJpbml0IiwgIm9wdGlvbnMiLCAic2VsZiIsICJvcHRpb25zIiwgIldlYkNvbm5lY3QiLCAiaW5pdF93ZWJjb25uZWN0IiwgIm9wdGlvbnMiLCAiaW5pdF9zdG9yYWdlIiwgImluaXRfc3RvcmFnZSIsICJpbml0X2NvbnN0YW50cyIsICJmbiIsICJpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMiLCAib3B0aW9ucyIsICJpbml0T2JzZXJ2ZXIiLCAic2VsZiIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9mb3JtIiwgImluaXRfd2ViY29ubmVjdCIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X21lc3NhZ2Vfc3RhdGVfYnV0dG9uIiwgImluaXRfc3RhdGVfYnV0dG9uIiwgIldlYkNvbm5lY3QiLCAiTm9kZUxpc3QiLCAiTm9kZSIsICJzZWxmIiwgIk5vZGUiLCAiTm9kZUxpc3QiLCAib3B0aW9ucyIsICJOb2RlIiwgIk5vZGVMaXN0IiwgIk5vZGVMaXN0IiwgIk5vZGUiLCAiaW5pdF9jb25zdGFudHMiLCAiaGFuZGxlT3B0aW9uS2V5Ym9hcmRFdmVudHMiLCAiTm9kZSIsICJpbml0RXZlbnRIYW5kbGVyIiwgImEiLCAia2V5RXZlbnRIYW5kbGVyIiwgImluaXRPcHRpb25zRnJvbUFyZ3VtZW50cyIsICJvcHRpb25zIiwgImdldFRlbXBsYXRlIiwgImluaXRfdHJlZV9zZWxlY3QiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9zZWxlY3QiLCAiVGVtcGxhdGUiLCAiaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzIiwgIm9wdGlvbnMiLCAiaW5pdEludGVyc2VjdGlvbk9ic2VydmVyIiwgImludGVyc2VjdGlvbk9ic2VydmVyV2FzSW5pdGlhbGl6ZWQiLCAib2JzZXJ2ZXIiLCAibG9hZENvbnRlbnQiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF90ZW1wbGF0ZSIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X21lc3NhZ2UiLCAiaW5pdF9jb25zdGFudHMiLCAiTWVzc2FnZSIsICJpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMiLCAib3B0aW9ucyIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiY29udHJvbEVsZW1lbnRTeW1ib2wiLCAiaW5pdEV2ZW50aGFuZGxlciIsICJnZXRUZW1wbGF0ZSIsICJpbml0X21lc3NhZ2UiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzIiwgIm9wdGlvbnMiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImNvbnRyb2xFbGVtZW50U3ltYm9sIiwgImNvbnRhaW5lckVsZW1lbnRTeW1ib2wiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9ub3RpZnkiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9tZXNzYWdlIiwgIk1lc3NhZ2UiLCAiaW5pdF9jb25zdGFudHMiLCAib3B0aW9ucyIsICJkIiwgImRvY3VtZW50IiwgIndpbmRvdyIsICJvcHRpb25zIiwgIm9wdGlvbnMiLCAicGFyc2VPcHRpb25zSlNPTiIsICJLRVlfRE9DVU1FTlQiLCAiaW5pdF9jb25zdGFudHMiLCAib3B0aW9ucyIsICJzZWxmIiwgImRvY3VtZW50IiwgIktFWV9ET0NVTUVOVCIsICJhcHBlbmRUb0RvY3VtZW50IiwgImluaXRfY29uc3RhbnRzIiwgImNyZWF0ZUVsZW1lbnQiLCAiZG9jdW1lbnQiLCAiS0VZX0RPQ1VNRU5UIiwgImluaXRfY29uc3RhbnRzIiwgImNyZWF0ZUVsZW1lbnQiLCAiZG9jdW1lbnQiLCAiS0VZX0RPQ1VNRU5UIiwgImluaXRfY29uc3RhbnRzIiwgIm9wdGlvbnMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAid2luZG93IiwgInZlcnNpb24iLCAiZXZlbnQiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9jb25maWdfbWFuYWdlciIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJnZXRUZW1wbGF0ZSIsICJpbml0X2hvc3QiLCAiaW5pdF9ub3RpZnkiLCAiaW5pdF9sb2NhbGUiLCAiaW5pdF9jb25maWdfbWFuYWdlciIsICJpbml0X2NvbnN0YW50cyIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAib3ZlcmxheUVsZW1lbnRTeW1ib2wiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJnZXRUZW1wbGF0ZSIsICJpbml0X292ZXJsYXkiLCAiaW5pdF9ub3RpZnkiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF91dGlsIiwgImluaXRfY29uc3RhbnRzIiwgIkFUVFJJQlVURV9CVVRUT05fTEFCRUwiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAicmVzaXplT2JzZXJ2ZXJTeW1ib2wiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiY29udHJvbEVsZW1lbnRTeW1ib2wiLCAiZG9jdW1lbnQiLCAidGltZXJDYWxsYmFja1N5bWJvbCIsICJnZXRUZW1wbGF0ZSIsICJpbml0X2NvbGxhcHNlIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfaG9zdCIsICJpbml0X3V0aWwiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImJ1dHRvbkVsZW1lbnRTeW1ib2wiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJBVFRSSUJVVEVfQlVUVE9OX0xBQkVMIiwgImdldFRlbXBsYXRlIiwgImluaXRfZGV0YWlscyIsICJpbml0X2hvc3QiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF91dGlsIiwgImluaXRfY29sbGFwc2UiLCAiaW50ZXJuYWxDb3VudGVyIiwgImNoYWkiLCAiY2hhaSIsICJpc0hUTUxFbGVtZW50IiwgImNvbnRhaW5zIiwgImdsb2JhbCIsICJvcHRpb25zIiwgIm9wdGlvbnMiLCAid2luZG93IiwgIlN0b3JhZ2UiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJSZWxvYWQiLCAidmlld3BvcnQiLCAiZmV0Y2hSZWZlcmVuY2UiLCAib3B0aW9ucyIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgIlRhYnMiLCAiQ3J5cHRvIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiU3RhdGVCdXR0b24iLCAib3B0aW9ucyIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImh0bWwyIiwgIlNlbGVjdCIsICJvcHRpb25zIiwgImUiLCAiYSIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImh0bWwyIiwgIkNvbmZpcm1CdXR0b24iLCAiaW5pdF9zdG9yYWdlIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiaHRtbDIiLCAic2VsZiIsICJmb3JtIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiaHRtbDIiLCAiVHJlZVNlbGVjdCIsICJmZXRjaFJlZmVyZW5jZSIsICJvcHRpb25zIiwgImUiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJodG1sMiIsICJCdXR0b24iLCAib3B0aW9ucyIsICJleHBlY3QiLCAiZ2xvYmFsIiwgIm1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlciIsICJodG1sMSIsICJUZW1wbGF0ZSIsICJ2aWV3cG9ydCIsICJmZXRjaFJlZmVyZW5jZSIsICJvcHRpb25zIiwgImV4cGVjdCIsICJNZXNzYWdlIiwgImV4cGVjdCIsICJOb3RpZnkiLCAiTm90aWZ5IiwgImV4cGVjdCIsICJtdXRhdGlvbm9ic2VydmVyIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJpbml0X3V0aWwiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJhIiwgImQiLCAib3B0aW9ucyIsICJzdGFydCIsICJlbmQiLCAib3B0aW9ucyIsICJyYW5kb20iLCAiYSIsICJtYXgiLCAiYSIsICJkaWZmIiwgImEiLCAiYSIsICJhIiwgImNvbnNvbGUiLCAiYSIsICJhIiwgImhhbmRsZXIiLCAidmVyc2lvbiIsICJhIiwgIm1vbnN0ZXJWZXJzaW9uIiwgImluaXQiLCAiZXhwZWN0IiwgImV4cGVjdCIsICJleHBlY3QiLCAiZXhwZWN0IiwgImV4cGVjdCIsICJleHBlY3QiLCAiZmV0Y2hSZWZlcmVuY2UiLCAibXV0YXRpb25vYnNlcnZlciIsICJhZGRlZE5vZGVzIiwgIm9wdGlvbnMiLCAiZXhwZWN0IiwgImUiLCAib3B0aW9ucyIsICJpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzIiwgImdsb2JhbCIsICJhIiwgImV4cGVjdCIsICJodG1sMSIsICJodG1sMiIsICJodG1sMyIsICJkIiwgInYiLCAiYSIsICJpbml0X2xvY2FsZSIsICJhIiwgImluaXRfY29uc3RhbnRzIiwgImV4cGVjdCIsICJodG1sMSIsICJodG1sMiIsICJDdXN0b21FbGVtZW50IiwgInJlZ2lzdGVyQ3VzdG9tRWxlbWVudCIsICJkb2N1bWVudCIsICJhIiwgInYiLCAiZCIsICJ3aW5kb3dSZWFkeSIsICJkb21SZWFkeSIsICJkIiwgImEiLCAiZXhwZWN0IiwgIkN1c3RvbUVsZW1lbnQiLCAicmVnaXN0ZXJDdXN0b21FbGVtZW50IiwgImRvY3VtZW50IiwgImNvbnRyb2wiLCAiaHRtbDEiLCAiaHRtbDIiLCAiaHRtbDMiLCAic3ltYm9sIiwgImEiLCAiZCIsICJSZXNvdXJjZSIsICJmZXRjaFJlZmVyZW5jZSIsICJvcHRpb25zIiwgImQiLCAiZCIsICJleHBlY3QiLCAiaHRtbDEiLCAiQ3VzdG9tQ29udHJvbCIsICJyZWdpc3RlckN1c3RvbUVsZW1lbnQiLCAiZG9jdW1lbnQiLCAibSIsICJkIiwgImluaXRfY29uc3RhbnRzIiwgImEiLCAiZCIsICJvcHRpb25zIiwgImluaXRfd2ViY29ubmVjdCIsICJ0ZXN0VXJsIiwgIldlYkNvbm5lY3QiLCAiY2xvbmUiLCAiZmV0Y2hSZWZlcmVuY2UiLCAib3B0aW9ucyIsICJyZXNvbHZlIiwgInJlamVjdCIsICJpIiwgImQiLCAiYSIsICJhIiwgImIiLCAiYyIsICJkIiwgImh0bWwxIiwgImQiLCAiYSIsICJOb2RlTGlzdCIsICJhIiwgImEiLCAiYSIsICJodG1sMSIsICJkIiwgImEiLCAic2VsZiIsICJhIiwgImEiLCAiYSIsICJOb2RlTGlzdCIsICJOb2RlIiwgImEiLCAiZCIsICJhIiwgImEiLCAiYSIsICJkIiwgImEiLCAiYSIsICJhIiwgIm1heCIsICJhIiwgIlJhbmRvbUlEIiwgIlVVSUQiLCAiYSIsICJhIiwgImEiLCAiTm9kZUxpc3QiLCAiTm9kZSIsICJOb2RlIiwgIk5vZGVMaXN0IiwgIkZvcm1hdHRlciIsICJvcHRpb25zIiwgIkZvcm1hdHRlciIsICJhIiwgImEiLCAiZCIsICJpbml0X2NvbnN0YW50cyIsICJodG1sMSIsICJ0cmFuc2xhdGlvbnNMaW5rU3ltYm9sIiwgIm9wdGlvbnMiLCAiZ2xvYmFsIiwgImZldGNoUmVmZXJlbmNlIiwgIm9wdGlvbnMiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImUiLCAiaHRtbDEiXQp9Cg==
 } catch (e) {
 document.getElementById('mocha-errors').insertAdjacentHTML('afterbegin', e );
 document.getElementById('mocha-stats').style.backgroundColor = 'red';