@tricoteuses/assemblee 0.26.1 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,10 +6,10 @@ require("core-js/modules/es.object.to-string.js");
6
6
 
7
7
  require("core-js/modules/es.reflect.construct.js");
8
8
 
9
- require("core-js/modules/es.object.define-property.js");
10
-
11
9
  require("core-js/modules/es.object.create.js");
12
10
 
11
+ require("core-js/modules/es.object.define-property.js");
12
+
13
13
  require("core-js/modules/es.promise.js");
14
14
 
15
15
  require("core-js/modules/es.symbol.js");
@@ -49,7 +49,7 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+
49
49
 
50
50
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
51
51
 
52
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } Object.defineProperty(subClass, "prototype", { value: Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }), writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
52
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
53
53
 
54
54
  function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
55
55
 
@@ -97,7 +97,7 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+
97
97
 
98
98
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
99
99
 
100
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } Object.defineProperty(subClass, "prototype", { value: Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }), writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
100
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
101
101
 
102
102
  function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
103
103
 
@@ -6,10 +6,10 @@ require("core-js/modules/es.object.to-string.js");
6
6
 
7
7
  require("core-js/modules/es.reflect.construct.js");
8
8
 
9
- require("core-js/modules/es.object.define-property.js");
10
-
11
9
  require("core-js/modules/es.object.create.js");
12
10
 
11
+ require("core-js/modules/es.object.define-property.js");
12
+
13
13
  require("core-js/modules/es.promise.js");
14
14
 
15
15
  require("core-js/modules/es.symbol.js");
@@ -49,7 +49,7 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+
49
49
 
50
50
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
51
51
 
52
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } Object.defineProperty(subClass, "prototype", { value: Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }), writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
52
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
53
53
 
54
54
  function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
55
55
 
@@ -63,7 +63,7 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+
63
63
 
64
64
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
65
65
 
66
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } Object.defineProperty(subClass, "prototype", { value: Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }), writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
66
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
67
67
 
68
68
  function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
69
69
 
package/lib/loaders.js CHANGED
@@ -100,7 +100,7 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
100
100
 
101
101
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
102
102
 
103
- var documentUidRegex = /^(ACIN|AVCE|AVIS|DECL|ETDI|LETT|PION|PNRE|PRJL|RAPP|RINF)(AN|SN)(R\d+)[LS](\d+)(B|BTA|BTC)(\d+)(-.*)?$/;
103
+ var documentUidRegex = /^(ACIN|AVCE|AVIS|DECL|ETDI|LETT|MESS|PION|PNRE|PRJL|RAPP|RINF|RION)(AN|SN)(R\d+)[LS](\d+)(B|BTA|BTC|TAP)(\d+)(-.*)?$/;
104
104
  var dossierUidRegex = /^DL(R\d+)(L\d+)N(\d+)$/;
105
105
  var reunionUidRegex = /^RU(AN|CG|SN)(R\d+)(L\d+)([AS]\d{4})(IDC|IDFL?|IDS)(\d+)$/;
106
106
  var scrutinUidRegex = /^VTAN(R\d+)(L\d+)V(\d+)$/;
@@ -1135,4 +1135,4 @@ function pathFromScrutinUid(scrutinsDir, uid) {
1135
1135
 
1136
1136
  return _path["default"].join(numeroMilliersDir, uid);
1137
1137
  }
1138
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2FkZXJzLnRzIl0sIm5hbWVzIjpbImRvY3VtZW50VWlkUmVnZXgiLCJkb3NzaWVyVWlkUmVnZXgiLCJyZXVuaW9uVWlkUmVnZXgiLCJzY3J1dGluVWlkUmVnZXgiLCJsb2FkQXNzZW1ibGVlRGF0YSIsImRhdGFEaXIiLCJlbmFibGVkRGF0YXNldHMiLCJsZWdpc2xhdHVyZSIsImxvZyIsImFjdGV1ckJ5VWlkIiwib3JnYW5lQnlVaWQiLCJFbmFibGVkRGF0YXNldHMiLCJBY3RldXJzRXRPcmdhbmVzIiwiZGF0YXNldHMiLCJhY3RldXJzRXRPcmdhbmVzIiwiZGF0YXNldCIsImlnbm9yZUZvcldlYiIsIkxlZ2lzbGF0dXJlIiwiQWxsIiwiZGF0YXNldERpciIsInBhdGgiLCJqb2luIiwiZmlsZW5hbWUiLCJyZXBsYWNlIiwiYWN0ZXVyU3BsaXRQYXRoIiwiYWN0ZXVyRmlsZW5hbWUiLCJsZW5ndGgiLCJlbmRzV2l0aCIsImFjdGV1ckZpbGVQYXRoIiwiY29uc29sZSIsImFjdGV1ckpzb24iLCJmcyIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwiYWN0ZXVyIiwiQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQiLCJ0b0FjdGV1ciIsInVpZCIsInVuZGVmaW5lZCIsIm9yZ2FuZVNwbGl0UGF0aCIsIm9yZ2FuZUZpbGVuYW1lIiwib3JnYW5lRmlsZVBhdGgiLCJvcmdhbmVKc29uIiwib3JnYW5lIiwidG9PcmdhbmUiLCJyZXVuaW9uQnlVaWQiLCJyZXVuaW9uc0J5RGF5IiwicmV1bmlvbnNCeURvc3NpZXJVaWQiLCJBZ2VuZGFzIiwiYWdlbmRhcyIsInJldW5pb25TcGxpdFBhdGgiLCJyZXVuaW9uRmlsZW5hbWUiLCJyZXVuaW9uRmlsZVBhdGgiLCJyZXVuaW9uSnNvbiIsInJldW5pb24iLCJBZ2VuZGFzQ29udmVydCIsInRvUmV1bmlvbiIsImRheSIsInRpbWVzdGFtcERlYnV0IiwidG9JU09TdHJpbmciLCJzcGxpdCIsInJldW5pb25zQXREYXkiLCJwdXNoIiwib2RqIiwicG9pbnRzT2RqIiwicG9pbnRPZGoiLCJkb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcyIsImRvc3NpZXJMZWdpc2xhdGlmUmVmIiwicmV1bmlvbnNBdERvc3NpZXJVaWQiLCJhbWVuZGVtZW50QnlVaWQiLCJBbWVuZGVtZW50cyIsImFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudFNwbGl0UGF0aCIsImFtZW5kZW1lbnRGaWxlbmFtZSIsImFtZW5kZW1lbnRGaWxlUGF0aCIsImFtZW5kZW1lbnRKc29uIiwiYW1lbmRlbWVudCIsIkFtZW5kZW1lbnRzQ29udmVydCIsInRvQW1lbmRlbWVudCIsImRvY3VtZW50QnlVaWQiLCJkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4iLCJkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW4iLCJkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkIiwiRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb2N1bWVudFNwbGl0UGF0aCIsImRvY3VtZW50RmlsZW5hbWUiLCJkb2N1bWVudEZpbGVQYXRoIiwiZG9jdW1lbnRKc29uIiwiZG9jdW1lbnQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydCIsInRvRG9jdW1lbnQiLCJkb3NzaWVyU3BsaXRQYXRoIiwiZG9zc2llckZpbGVuYW1lIiwiZG9zc2llckZpbGVQYXRoIiwiZG9zc2llckpzb24iLCJkb3NzaWVyIiwidG9Eb3NzaWVyUGFybGVtZW50YWlyZSIsInRpdHJlRG9zc2llciIsInNlbmF0Q2hlbWluIiwidGl0cmVDaGVtaW4iLCJwaG90b0J5VWlkIiwiUGhvdG9zIiwianNvbkZpbGVQYXRoIiwiUXVpbnplIiwiZXhpc3RzU3luYyIsImpzb24iLCJPYmplY3QiLCJhc3NpZ24iLCJKU09OIiwicGFyc2UiLCJzY3J1dGluQnlVaWQiLCJTY3J1dGlucyIsInNjcnV0aW5zIiwic2NydXRpblNwbGl0UGF0aCIsInNjcnV0aW5GaWxlbmFtZSIsInNjcnV0aW5GaWxlUGF0aCIsInNjcnV0aW5Kc29uIiwic2NydXRpbiIsIlNjcnV0aW5zQ29udmVydCIsInRvU2NydXRpbiIsImxvYWRBc3NlbWJsZWVEYXRhRnJvbUJpZ0ZpbGVzIiwidG9BY3RldXJzRXRPcmdhbmVzIiwiYWN0ZXVycyIsIm9yZ2FuZXMiLCJ0b0FnZW5kYXMiLCJyZXVuaW9ucyIsInRvQW1lbmRlbWVudHMiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsInRleHRlTGVnaXNsYXRpZiIsInRvRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvc3NpZXJzUGFybGVtZW50YWlyZXMiLCJ0b1NjcnV0aW5zIiwicGF0aEZyb21Eb2N1bWVudFVpZCIsImRvY3VtZW50c0RpciIsIm1hdGNoIiwiZXhlYyIsImFzc2VydCIsIm5vdFN0cmljdEVxdWFsIiwiZG9jdW1lbnRUeXBlIiwiY2hhbWJyZURpciIsInJlcHVibGlxdWVEaXIiLCJsZWdpc2xhdHVyZURpciIsImV0YXREaXIiLCJudW1lcm8iLCJzdWJzdHIiLCJudW1lcm9NaWxsaWVyc0RpciIsImVuc3VyZURpclN5bmMiLCJwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkIiwiZG9zc2llcnNEaXIiLCJwYXRoRnJvbVJldW5pb25VaWQiLCJyZXVuaW9uc0RpciIsInNlc3Npb25EaXIiLCJpZERpciIsIm51bWVyb01pbGxpb25zRGlyIiwicGF0aEZyb21TY3J1dGluVWlkIiwic2NydXRpbnNEaXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFNQTs7QUFDQTs7QUFDQTs7QUFLQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUJBLElBQU1BLGdCQUFnQixHQUNwQix3R0FERjtBQUVBLElBQU1DLGVBQWUsR0FBRyx3QkFBeEI7QUFDQSxJQUFNQyxlQUFlLEdBQ25CLDJEQURGO0FBRUEsSUFBTUMsZUFBZSxH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QUFHQSxNQUFNLENBQUNDLE1BQVAsQ0FBY0QsTUFBTSxDQUFDdEgsTUFBUCxHQUFnQixDQUE5QixDQUFUOztBQUNBLE1BQU13SCxpQkFBaUIsR0FBRzlILGlCQUFLQyxJQUFMLENBQVV5SCxjQUFWLEVBQTBCRSxNQUFNLENBQUNDLE1BQVAsQ0FBYyxDQUFkLEVBQWlCLENBQWpCLENBQTFCLENBQTFCOztBQUNBbEgsc0JBQUdvSCxhQUFILENBQWlCRCxpQkFBakI7O0FBQ0EsU0FBTzlILGlCQUFLQyxJQUFMLENBQVU2SCxpQkFBVixFQUE2QjdHLEdBQTdCLENBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbIi8vLyBMb2FkIGRhdGEgZnJvbSBmaWxlc1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmV4cG9ydCB7IEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuL2RhdGFzZXRzXCJcbmltcG9ydCB7IGRhdGFzZXRzLCBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi9kYXRhc2V0c1wiXG5leHBvcnQgeyB3YWxrRGlyIH0gZnJvbSBcIi4vZmlsZV9zeXN0ZW1zXCJcbmltcG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHtcbiAgQWN0ZXVyLFxuICBDb252ZXJ0IGFzIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LFxuICBPcmdhbmUsXG4gIFBob3RvLFxufSBmcm9tIFwiLi90eXBlcy9hY3RldXJzX2V0X29yZ2FuZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBZ2VuZGFzQ29udmVydCwgUmV1bmlvbiB9IGZyb20gXCIuL3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQW1lbmRlbWVudCwgQ29udmVydCBhcyBBbWVuZGVtZW50c0NvbnZlcnQgfSBmcm9tIFwiLi90eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQge1xuICBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LFxuICBEb2N1bWVudCxcbiAgRG9zc2llclBhcmxlbWVudGFpcmUsXG59IGZyb20gXCIuL3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IExlZ2lzbGF0dXJlIH0gZnJvbSBcIi4vdHlwZXMvbGVnaXNsYXR1cmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNDb252ZXJ0LCBTY3J1dGluIH0gZnJvbSBcIi4vdHlwZXMvc2NydXRpbnNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGEge1xuICByZWFkb25seSBhY3RldXJCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfVxuICByZWFkb25seSBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9XG4gIHJlYWRvbmx5IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfVxuICByZWFkb25seSBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9XG4gIHJlYWRvbmx5IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH1cbiAgcmVhZG9ubHkgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9XG4gIHJlYWRvbmx5IG9yZ2FuZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IE9yZ2FuZSB9XG4gIHJlYWRvbmx5IHBob3RvQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfVxuICByZWFkb25seSByZXVuaW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUmV1bmlvbiB9XG4gIHJlYWRvbmx5IHJldW5pb25zQnlEYXk6IHsgW2RheTogc3RyaW5nXTogUmV1bmlvbltdIH1cbiAgcmVhZG9ubHkgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9XG4gIHJlYWRvbmx5IHNjcnV0aW5CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBTY3J1dGluIH1cbn1cblxuY29uc3QgZG9jdW1lbnRVaWRSZWdleCA9XG4gIC9eKEFDSU58QVZDRXxBVklTfERFQ0x8RVRESXxMRVRUfFBJT058UE5SRXxQUkpMfFJBUFB8UklORikoQU58U04pKFJcXGQrKVtMU10oXFxkKykoQnxCVEF8QlRDKShcXGQrKSgtLiopPyQvXG5jb25zdCBkb3NzaWVyVWlkUmVnZXggPSAvXkRMKFJcXGQrKShMXFxkKylOKFxcZCspJC9cbmNvbnN0IHJldW5pb25VaWRSZWdleCA9XG4gIC9eUlUoQU58Q0d8U04pKFJcXGQrKShMXFxkKykoW0FTXVxcZHs0fSkoSURDfElERkw/fElEUykoXFxkKykkL1xuY29uc3Qgc2NydXRpblVpZFJlZ2V4ID0gL15WVEFOKFJcXGQrKShMXFxkKylWKFxcZCspJC9cblxuLyoqIExvYWQgZGF0YSBmcm9tIHNwbGl0IGZpbGVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVEYXRhKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogRGF0YSB7XG4gIGNvbnN0IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9ID0ge31cbiAgY29uc3Qgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImFjdGV1cnNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGFjdGV1ckZpbGVuYW1lID0gYWN0ZXVyU3BsaXRQYXRoW2FjdGV1clNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFjdGV1ckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1ckZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmFjdGV1clNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7YWN0ZXVyRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3RldXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYWN0ZXVyRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGFjdGV1ciA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ckpzb24pXG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwiYWN0ZXVyXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChhY3RldXJCeVVpZFthY3RldXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPSBhY3RldXJcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcIm9yZ2FuZXNcIl0pKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLm9yZ2FuZVNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7b3JnYW5lRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMob3JnYW5lRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IG9yZ2FuZSA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvT3JnYW5lKG9yZ2FuZUpzb24pXG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwib3JnYW5lXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPSBvcmdhbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RGF5OiB7IFtkYXk6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcbiAgICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IHJldW5pb25GaWxlbmFtZSA9IHJldW5pb25TcGxpdFBhdGhbcmV1bmlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXJldW5pb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4ucmV1bmlvblNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cmV1bmlvbkZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV1bmlvbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyZXVuaW9uRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJldW5pb24gPSBBZ2VuZGFzQ29udmVydC50b1JldW5pb24ocmV1bmlvbkpzb24pXG4gICAgICAgIGlmIChyZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID0gcmV1bmlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF5ID0gcmV1bmlvbi50aW1lc3RhbXBEZWJ1dC50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXVxuICAgICAgICBsZXQgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XVxuICAgICAgICBpZiAocmV1bmlvbnNBdERheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XSA9IFtdXG4gICAgICAgIH1cbiAgICAgICAgcmV1bmlvbnNBdERheS5wdXNoKHJldW5pb24pXG5cbiAgICAgICAgY29uc3Qgb2RqID0gcmV1bmlvbi5vZGpcbiAgICAgICAgaWYgKG9kaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwb2ludE9kaiBvZiBvZGoucG9pbnRzT2RqIHx8IFtdKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJMZWdpc2xhdGlmUmVmIG9mIHBvaW50T2RqLmRvc3NpZXJzTGVnaXNsYXRpZnNSZWZzIHx8XG4gICAgICAgICAgICAgIFtdKSB7XG4gICAgICAgICAgICAgIGxldCByZXVuaW9uc0F0RG9zc2llclVpZCA9XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNCeURvc3NpZXJVaWRbZG9zc2llckxlZ2lzbGF0aWZSZWZdXG4gICAgICAgICAgICAgIGlmIChyZXVuaW9uc0F0RG9zc2llclVpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQgPSByZXVuaW9uc0J5RG9zc2llclVpZFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJMZWdpc2xhdGlmUmVmXG4gICAgICAgICAgICAgICAgXSA9IFtdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQucHVzaChyZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgYW1lbmRlbWVudFNwbGl0UGF0aFthbWVuZGVtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5hbWVuZGVtZW50U3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHthbWVuZGVtZW50RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGFtZW5kZW1lbnRGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IEFtZW5kZW1lbnRzQ29udmVydC50b0FtZW5kZW1lbnQoYW1lbmRlbWVudEpzb24pXG4gICAgICAgIGlmIChhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID0gYW1lbmRlbWVudFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wiZG9jdW1lbnRzXCJdKSkge1xuICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID0gZG9jdW1lbnRTcGxpdFBhdGhbZG9jdW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb2N1bWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uZG9jdW1lbnRTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2RvY3VtZW50RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb2N1bWVudEZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb2N1bWVudCA9IERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRKc29uKVxuICAgICAgICBpZiAoZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPSBkb2N1bWVudFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZG9zc2llclNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImRvc3NpZXJzXCJdKSkge1xuICAgICAgICBjb25zdCBkb3NzaWVyRmlsZW5hbWUgPSBkb3NzaWVyU3BsaXRQYXRoW2Rvc3NpZXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb3NzaWVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9zc2llckZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmRvc3NpZXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2Rvc3NpZXJGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9zc2llckZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb3NzaWVyID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0Rvc3NpZXJQYXJsZW1lbnRhaXJlKGRvc3NpZXJKc29uKVxuICAgICAgICBjb25zdCB0aXRyZURvc3NpZXIgPSBkb3NzaWVyLnRpdHJlRG9zc2llclxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci50aXRyZUNoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5QaG90b3MpIHtcbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgYHBob3Rvc19kZXB1dGVzXyR7XG4gICAgICAgICAgLy8gVE9ETzogSGFuZGxlIExlZ2lzbGF0dXJlLkFsbC5cbiAgICAgICAgICBsZWdpc2xhdHVyZSA9PT0gTGVnaXNsYXR1cmUuQWxsID8gTGVnaXNsYXR1cmUuUXVpbnplIDogbGVnaXNsYXR1cmVcbiAgICAgICAgfWAsXG4gICAgICAgIFwiZGVwdXRlcy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIFwicGhvdG9zX3NlbmF0ZXVyc1wiLFxuICAgICAgICBcInNlbmF0ZXVycy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID0gc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5zY3J1dGluU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtzY3J1dGluRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3J1dGluSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHNjcnV0aW5GaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgc2NydXRpbiA9IFNjcnV0aW5zQ29udmVydC50b1NjcnV0aW4oc2NydXRpbkpzb24pXG4gICAgICAgIGlmIChzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID0gc2NydXRpblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RldXJCeVVpZCxcbiAgICBhbWVuZGVtZW50QnlVaWQsXG4gICAgZG9jdW1lbnRCeVVpZCxcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQsXG4gICAgb3JnYW5lQnlVaWQsXG4gICAgcGhvdG9CeVVpZCxcbiAgICByZXVuaW9uQnlVaWQsXG4gICAgcmV1bmlvbnNCeURheSxcbiAgICByZXVuaW9uc0J5RG9zc2llclVpZCxcbiAgICBzY3J1dGluQnlVaWQsXG4gIH1cbn1cblxuLyoqIExvYWQgZGF0YSBmcm9tIGJpZyBtb25vbHl0aWMgZmlsZXMuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZURhdGFGcm9tQmlnRmlsZXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBEYXRhIHtcbiAgY29uc3QgYWN0ZXVyQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQWN0ZXVyIH0gPSB7fVxuICBjb25zdCBvcmdhbmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBPcmdhbmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgYWN0ZXVyc0V0T3JnYW5lcyA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyc0V0T3JnYW5lcyhqc29uKVxuICAgICAgZm9yIChjb25zdCBhY3RldXIgb2YgYWN0ZXVyc0V0T3JnYW5lcy5hY3RldXJzKSB7XG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwiYWN0ZXVyXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChhY3RldXJCeVVpZFthY3RldXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPSBhY3RldXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBvcmdhbmUgb2YgYWN0ZXVyc0V0T3JnYW5lcy5vcmdhbmVzKSB7XG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwib3JnYW5lXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPSBvcmdhbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RGF5OiB7IFtkYXk6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBhZ2VuZGFzID0gQWdlbmRhc0NvbnZlcnQudG9BZ2VuZGFzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHJldW5pb24gb2YgYWdlbmRhcy5yZXVuaW9ucykge1xuICAgICAgICBpZiAocmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9IHJldW5pb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRheSA9IHJldW5pb24udGltZXN0YW1wRGVidXQudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF1cbiAgICAgICAgbGV0IHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV1cbiAgICAgICAgaWYgKHJldW5pb25zQXREYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV0gPSBbXVxuICAgICAgICB9XG4gICAgICAgIHJldW5pb25zQXREYXkucHVzaChyZXVuaW9uKVxuXG4gICAgICAgIGNvbnN0IG9kaiA9IHJldW5pb24ub2RqXG4gICAgICAgIGlmIChvZGogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZvciAoY29uc3QgcG9pbnRPZGogb2Ygb2RqLnBvaW50c09kaiB8fCBbXSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBkb3NzaWVyTGVnaXNsYXRpZlJlZiBvZiBwb2ludE9kai5kb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcyB8fFxuICAgICAgICAgICAgICBbXSkge1xuICAgICAgICAgICAgICBsZXQgcmV1bmlvbnNBdERvc3NpZXJVaWQgPVxuICAgICAgICAgICAgICAgIHJldW5pb25zQnlEb3NzaWVyVWlkW2Rvc3NpZXJMZWdpc2xhdGlmUmVmXVxuICAgICAgICAgICAgICBpZiAocmV1bmlvbnNBdERvc3NpZXJVaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkID0gcmV1bmlvbnNCeURvc3NpZXJVaWRbXG4gICAgICAgICAgICAgICAgICBkb3NzaWVyTGVnaXNsYXRpZlJlZlxuICAgICAgICAgICAgICAgIF0gPSBbXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkLnB1c2gocmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRzID0gQW1lbmRlbWVudHNDb252ZXJ0LnRvQW1lbmRlbWVudHMoanNvbilcbiAgICAgIGZvciAoY29uc3QgdGV4dGVMZWdpc2xhdGlmIG9mIGFtZW5kZW1lbnRzLnRleHRlc0xlZ2lzbGF0aWZzKSB7XG4gICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudCBvZiB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMpIHtcbiAgICAgICAgICBpZiAoYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID0gYW1lbmRlbWVudFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBkb3NzaWVyc0xlZ2lzbGF0aWZzID1cbiAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyc0xlZ2lzbGF0aWZzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IGRvY3VtZW50IG9mIGRvc3NpZXJzTGVnaXNsYXRpZnMudGV4dGVzTGVnaXNsYXRpZnMpIHtcbiAgICAgICAgaWYgKGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID0gZG9jdW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBkb3NzaWVyIG9mIGRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llcnNQYXJsZW1lbnRhaXJlcykge1xuICAgICAgICBjb25zdCB0aXRyZURvc3NpZXIgPSBkb3NzaWVyLnRpdHJlRG9zc2llclxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci50aXRyZUNoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBwaG90b0J5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlBob3Rvcykge1xuICAgIGNvbnN0IHBob3RvQnlVaWQgPSB7fVxuXG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGBwaG90b3NfZGVwdXRlc18ke1xuICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBMZWdpc2xhdHVyZS5BbGwuXG4gICAgICAgICAgbGVnaXNsYXR1cmUgPT09IExlZ2lzbGF0dXJlLkFsbCA/IExlZ2lzbGF0dXJlLlF1aW56ZSA6IGxlZ2lzbGF0dXJlXG4gICAgICAgIH1gLFxuICAgICAgICBcImRlcHV0ZXMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBcInBob3Rvc19zZW5hdGV1cnNcIixcbiAgICAgICAgXCJzZW5hdGV1cnMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNjcnV0aW5CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBTY3J1dGluIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3Qgc2NydXRpbnMgPSBTY3J1dGluc0NvbnZlcnQudG9TY3J1dGlucyhqc29uKVxuICAgICAgZm9yIChjb25zdCBzY3J1dGluIG9mIHNjcnV0aW5zLnNjcnV0aW5zKSB7XG4gICAgICAgIGlmIChzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID0gc2NydXRpblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RldXJCeVVpZCxcbiAgICBhbWVuZGVtZW50QnlVaWQsXG4gICAgZG9jdW1lbnRCeVVpZCxcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQsXG4gICAgb3JnYW5lQnlVaWQsXG4gICAgcGhvdG9CeVVpZCxcbiAgICByZXVuaW9uQnlVaWQsXG4gICAgcmV1bmlvbnNCeURheSxcbiAgICByZXVuaW9uc0J5RG9zc2llclVpZCxcbiAgICBzY3J1dGluQnlVaWQsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tRG9jdW1lbnRVaWQoZG9jdW1lbnRzRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudFVpZFJlZ2V4LmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIGRvY3VtZW50IFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCBkb2N1bWVudFR5cGUgPSBwYXRoLmpvaW4oZG9jdW1lbnRzRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGNoYW1icmVEaXIgPSBwYXRoLmpvaW4oZG9jdW1lbnRUeXBlLCBtYXRjaCFbMl0pXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oY2hhbWJyZURpciwgbWF0Y2ghWzNdKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihyZXB1YmxpcXVlRGlyLCBtYXRjaCFbNF0pXG4gIGNvbnN0IGV0YXREaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG1hdGNoIVs1XSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbNl1cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cihudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4oZXRhdERpciwgbnVtZXJvLnN1YnN0cigwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZChcbiAgZG9zc2llcnNEaXI6IHN0cmluZyxcbiAgdWlkOiBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IGRvc3NpZXJVaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBkb3NzaWVyIHBhcmxlbWVudGFpcmUgVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oZG9zc2llcnNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzJdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIG1hdGNoIVszXVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbnVtZXJvLnN1YnN0cigwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21SZXVuaW9uVWlkKHJldW5pb25zRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSByZXVuaW9uVWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3IgcmV1bmlvbiBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgY2hhbWJyZURpciA9IHBhdGguam9pbihyZXVuaW9uc0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGNoYW1icmVEaXIsIG1hdGNoIVsyXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzNdKVxuICBjb25zdCBzZXNzaW9uRGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBtYXRjaCFbNF0pXG4gIGNvbnN0IGlkRGlyID0gcGF0aC5qb2luKHNlc3Npb25EaXIsIG1hdGNoIVs1XSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwMDAwXCIgKyBtYXRjaCFbNl1cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cihudW1lcm8ubGVuZ3RoIC0gOSlcbiAgY29uc3QgbnVtZXJvTWlsbGlvbnNEaXIgPSBwYXRoLmpvaW4oaWREaXIsIG51bWVyby5zdWJzdHIoMCwgMykpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKG51bWVyb01pbGxpb25zRGlyLCBudW1lcm8uc3Vic3RyKDMsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbVNjcnV0aW5VaWQoc2NydXRpbnNEaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IHNjcnV0aW5VaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBzY3J1dGluIFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKHNjcnV0aW5zRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVsyXSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbM11cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cihudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG51bWVyby5zdWJzdHIoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cbiJdfQ==
1138
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2FkZXJzLnRzIl0sIm5hbWVzIjpbImRvY3VtZW50VWlkUmVnZXgiLCJkb3NzaWVyVWlkUmVnZXgiLCJyZXVuaW9uVWlkUmVnZXgiLCJzY3J1dGluVWlkUmVnZXgiLCJsb2FkQXNzZW1ibGVlRGF0YSIsImRhdGFEaXIiLCJlbmFibGVkRGF0YXNldHMiLCJsZWdpc2xhdHVyZSIsImxvZyIsImFjdGV1ckJ5VWlkIiwib3JnYW5lQnlVaWQiLCJFbmFibGVkRGF0YXNldHMiLCJBY3RldXJzRXRPcmdhbmVzIiwiZGF0YXNldHMiLCJhY3RldXJzRXRPcmdhbmVzIiwiZGF0YXNldCIsImlnbm9yZUZvcldlYiIsIkxlZ2lzbGF0dXJlIiwiQWxsIiwiZGF0YXNldERpciIsInBhdGgiLCJqb2luIiwiZmlsZW5hbWUiLCJyZXBsYWNlIiwiYWN0ZXVyU3BsaXRQYXRoIiwiYWN0ZXVyRmlsZW5hbWUiLCJsZW5ndGgiLCJlbmRzV2l0aCIsImFjdGV1ckZpbGVQYXRoIiwiY29uc29sZSIsImFjdGV1ckpzb24iLCJmcyIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwiYWN0ZXVyIiwiQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQiLCJ0b0FjdGV1ciIsInVpZCIsInVuZGVmaW5lZCIsIm9yZ2FuZVNwbGl0UGF0aCIsIm9yZ2FuZUZpbGVuYW1lIiwib3JnYW5lRmlsZVBhdGgiLCJvcmdhbmVKc29uIiwib3JnYW5lIiwidG9PcmdhbmUiLCJyZXVuaW9uQnlVaWQiLCJyZXVuaW9uc0J5RGF5IiwicmV1bmlvbnNCeURvc3NpZXJVaWQiLCJBZ2VuZGFzIiwiYWdlbmRhcyIsInJldW5pb25TcGxpdFBhdGgiLCJyZXVuaW9uRmlsZW5hbWUiLCJyZXVuaW9uRmlsZVBhdGgiLCJyZXVuaW9uSnNvbiIsInJldW5pb24iLCJBZ2VuZGFzQ29udmVydCIsInRvUmV1bmlvbiIsImRheSIsInRpbWVzdGFtcERlYnV0IiwidG9JU09TdHJpbmciLCJzcGxpdCIsInJldW5pb25zQXREYXkiLCJwdXNoIiwib2RqIiwicG9pbnRzT2RqIiwicG9pbnRPZGoiLCJkb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcyIsImRvc3NpZXJMZWdpc2xhdGlmUmVmIiwicmV1bmlvbnNBdERvc3NpZXJVaWQiLCJhbWVuZGVtZW50QnlVaWQiLCJBbWVuZGVtZW50cyIsImFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudFNwbGl0UGF0aCIsImFtZW5kZW1lbnRGaWxlbmFtZSIsImFtZW5kZW1lbnRGaWxlUGF0aCIsImFtZW5kZW1lbnRKc29uIiwiYW1lbmRlbWVudCIsIkFtZW5kZW1lbnRzQ29udmVydCIsInRvQW1lbmRlbWVudCIsImRvY3VtZW50QnlVaWQiLCJkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4iLCJkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW4iLCJkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkIiwiRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb2N1bWVudFNwbGl0UGF0aCIsImRvY3VtZW50RmlsZW5hbWUiLCJkb2N1bWVudEZpbGVQYXRoIiwiZG9jdW1lbnRKc29uIiwiZG9jdW1lbnQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydCIsInRvRG9jdW1lbnQiLCJkb3NzaWVyU3BsaXRQYXRoIiwiZG9zc2llckZpbGVuYW1lIiwiZG9zc2llckZpbGVQYXRoIiwiZG9zc2llckpzb24iLCJkb3NzaWVyIiwidG9Eb3NzaWVyUGFybGVtZW50YWlyZSIsInRpdHJlRG9zc2llciIsInNlbmF0Q2hlbWluIiwidGl0cmVDaGVtaW4iLCJwaG90b0J5VWlkIiwiUGhvdG9zIiwianNvbkZpbGVQYXRoIiwiUXVpbnplIiwiZXhpc3RzU3luYyIsImpzb24iLCJPYmplY3QiLCJhc3NpZ24iLCJKU09OIiwicGFyc2UiLCJzY3J1dGluQnlVaWQiLCJTY3J1dGlucyIsInNjcnV0aW5zIiwic2NydXRpblNwbGl0UGF0aCIsInNjcnV0aW5GaWxlbmFtZSIsInNjcnV0aW5GaWxlUGF0aCIsInNjcnV0aW5Kc29uIiwic2NydXRpbiIsIlNjcnV0aW5zQ29udmVydCIsInRvU2NydXRpbiIsImxvYWRBc3NlbWJsZWVEYXRhRnJvbUJpZ0ZpbGVzIiwidG9BY3RldXJzRXRPcmdhbmVzIiwiYWN0ZXVycyIsIm9yZ2FuZXMiLCJ0b0FnZW5kYXMiLCJyZXVuaW9ucyIsInRvQW1lbmRlbWVudHMiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsInRleHRlTGVnaXNsYXRpZiIsInRvRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvc3NpZXJzUGFybGVtZW50YWlyZXMiLCJ0b1NjcnV0aW5zIiwicGF0aEZyb21Eb2N1bWVudFVpZCIsImRvY3VtZW50c0RpciIsIm1hdGNoIiwiZXhlYyIsImFzc2VydCIsIm5vdFN0cmljdEVxdWFsIiwiZG9jdW1lbnRUeXBlIiwiY2hhbWJyZURpciIsInJlcHVibGlxdWVEaXIiLCJsZWdpc2xhdHVyZURpciIsImV0YXREaXIiLCJudW1lcm8iLCJzdWJzdHIiLCJudW1lcm9NaWxsaWVyc0RpciIsImVuc3VyZURpclN5bmMiLCJwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkIiwiZG9zc2llcnNEaXIiLCJwYXRoRnJvbVJldW5pb25VaWQiLCJyZXVuaW9uc0RpciIsInNlc3Npb25EaXIiLCJpZERpciIsIm51bWVyb01pbGxpb25zRGlyIiwicGF0aEZyb21TY3J1dGluVWlkIiwic2NydXRpbnNEaXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFNQTs7QUFDQTs7QUFDQTs7QUFLQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUJBLElBQU1BLGdCQUFnQixHQUNwQixzSEFERjtBQUVBLElBQU1DLGVBQWUsR0FBRyx3QkFBeEI7QUFDQSxJQUFNQyxlQUFlLEdBQ25CLDJEQURGO0FBRUEsSUFBTUMsZUFBZSxH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QUFHQSxNQUFNLENBQUNDLE1BQVAsQ0FBY0QsTUFBTSxDQUFDdEgsTUFBUCxHQUFnQixDQUE5QixDQUFUOztBQUNBLE1BQU13SCxpQkFBaUIsR0FBRzlILGlCQUFLQyxJQUFMLENBQVV5SCxjQUFWLEVBQTBCRSxNQUFNLENBQUNDLE1BQVAsQ0FBYyxDQUFkLEVBQWlCLENBQWpCLENBQTFCLENBQTFCOztBQUNBbEgsc0JBQUdvSCxhQUFILENBQWlCRCxpQkFBakI7O0FBQ0EsU0FBTzlILGlCQUFLQyxJQUFMLENBQVU2SCxpQkFBVixFQUE2QjdHLEdBQTdCLENBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbIi8vLyBMb2FkIGRhdGEgZnJvbSBmaWxlc1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmV4cG9ydCB7IEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuL2RhdGFzZXRzXCJcbmltcG9ydCB7IGRhdGFzZXRzLCBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi9kYXRhc2V0c1wiXG5leHBvcnQgeyB3YWxrRGlyIH0gZnJvbSBcIi4vZmlsZV9zeXN0ZW1zXCJcbmltcG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHtcbiAgQWN0ZXVyLFxuICBDb252ZXJ0IGFzIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LFxuICBPcmdhbmUsXG4gIFBob3RvLFxufSBmcm9tIFwiLi90eXBlcy9hY3RldXJzX2V0X29yZ2FuZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBZ2VuZGFzQ29udmVydCwgUmV1bmlvbiB9IGZyb20gXCIuL3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQW1lbmRlbWVudCwgQ29udmVydCBhcyBBbWVuZGVtZW50c0NvbnZlcnQgfSBmcm9tIFwiLi90eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQge1xuICBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LFxuICBEb2N1bWVudCxcbiAgRG9zc2llclBhcmxlbWVudGFpcmUsXG59IGZyb20gXCIuL3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IExlZ2lzbGF0dXJlIH0gZnJvbSBcIi4vdHlwZXMvbGVnaXNsYXR1cmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNDb252ZXJ0LCBTY3J1dGluIH0gZnJvbSBcIi4vdHlwZXMvc2NydXRpbnNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGEge1xuICByZWFkb25seSBhY3RldXJCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfVxuICByZWFkb25seSBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9XG4gIHJlYWRvbmx5IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfVxuICByZWFkb25seSBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9XG4gIHJlYWRvbmx5IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH1cbiAgcmVhZG9ubHkgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9XG4gIHJlYWRvbmx5IG9yZ2FuZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IE9yZ2FuZSB9XG4gIHJlYWRvbmx5IHBob3RvQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfVxuICByZWFkb25seSByZXVuaW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUmV1bmlvbiB9XG4gIHJlYWRvbmx5IHJldW5pb25zQnlEYXk6IHsgW2RheTogc3RyaW5nXTogUmV1bmlvbltdIH1cbiAgcmVhZG9ubHkgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9XG4gIHJlYWRvbmx5IHNjcnV0aW5CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBTY3J1dGluIH1cbn1cblxuY29uc3QgZG9jdW1lbnRVaWRSZWdleCA9XG4gIC9eKEFDSU58QVZDRXxBVklTfERFQ0x8RVRESXxMRVRUfE1FU1N8UElPTnxQTlJFfFBSSkx8UkFQUHxSSU5GfFJJT04pKEFOfFNOKShSXFxkKylbTFNdKFxcZCspKEJ8QlRBfEJUQ3xUQVApKFxcZCspKC0uKik/JC9cbmNvbnN0IGRvc3NpZXJVaWRSZWdleCA9IC9eREwoUlxcZCspKExcXGQrKU4oXFxkKykkL1xuY29uc3QgcmV1bmlvblVpZFJlZ2V4ID1cbiAgL15SVShBTnxDR3xTTikoUlxcZCspKExcXGQrKShbQVNdXFxkezR9KShJREN8SURGTD98SURTKShcXGQrKSQvXG5jb25zdCBzY3J1dGluVWlkUmVnZXggPSAvXlZUQU4oUlxcZCspKExcXGQrKVYoXFxkKykkL1xuXG4vKiogTG9hZCBkYXRhIGZyb20gc3BsaXQgZmlsZXMuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZURhdGEoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBEYXRhIHtcbiAgY29uc3QgYWN0ZXVyQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQWN0ZXVyIH0gPSB7fVxuICBjb25zdCBvcmdhbmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBPcmdhbmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wiYWN0ZXVyc1wiXSkpIHtcbiAgICAgICAgY29uc3QgYWN0ZXVyRmlsZW5hbWUgPSBhY3RldXJTcGxpdFBhdGhbYWN0ZXVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWN0ZXVyRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uYWN0ZXVyU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHthY3RldXJGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1ckpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhhY3RldXJGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgYWN0ZXVyID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9BY3RldXIoYWN0ZXVySnNvbilcbiAgICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJhY3RldXJcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgICAgaWYgKGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY3RldXJCeVVpZFthY3RldXIudWlkXSA9IGFjdGV1clxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3Qgb3JnYW5lU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wib3JnYW5lc1wiXSkpIHtcbiAgICAgICAgY29uc3Qgb3JnYW5lRmlsZW5hbWUgPSBvcmdhbmVTcGxpdFBhdGhbb3JnYW5lU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghb3JnYW5lRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JnYW5lRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4ub3JnYW5lU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtvcmdhbmVGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ2FuZUpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhvcmdhbmVGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgb3JnYW5lID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9PcmdhbmUob3JnYW5lSnNvbilcbiAgICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJvcmdhbmVcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgICAgaWYgKG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9IG9yZ2FuZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmV1bmlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFJldW5pb24gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEYXk6IHsgW2RheTogc3RyaW5nXTogUmV1bmlvbltdIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RG9zc2llclVpZDogeyBbZG9zc2llclVpZDogc3RyaW5nXTogUmV1bmlvbltdIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuICAgICAgZm9yIChjb25zdCByZXVuaW9uU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID0gcmV1bmlvblNwbGl0UGF0aFtyZXVuaW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghcmV1bmlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldW5pb25GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5yZXVuaW9uU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtyZXVuaW9uRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHJldW5pb25GaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmV1bmlvbiA9IEFnZW5kYXNDb252ZXJ0LnRvUmV1bmlvbihyZXVuaW9uSnNvbilcbiAgICAgICAgaWYgKHJldW5pb25CeVVpZFtyZXVuaW9uLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25CeVVpZFtyZXVuaW9uLnVpZF0gPSByZXVuaW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXkgPSByZXVuaW9uLnRpbWVzdGFtcERlYnV0LnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdXG4gICAgICAgIGxldCByZXVuaW9uc0F0RGF5ID0gcmV1bmlvbnNCeURheVtkYXldXG4gICAgICAgIGlmIChyZXVuaW9uc0F0RGF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uc0F0RGF5ID0gcmV1bmlvbnNCeURheVtkYXldID0gW11cbiAgICAgICAgfVxuICAgICAgICByZXVuaW9uc0F0RGF5LnB1c2gocmV1bmlvbilcblxuICAgICAgICBjb25zdCBvZGogPSByZXVuaW9uLm9kalxuICAgICAgICBpZiAob2RqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50T2RqIG9mIG9kai5wb2ludHNPZGogfHwgW10pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9zc2llckxlZ2lzbGF0aWZSZWYgb2YgcG9pbnRPZGouZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMgfHxcbiAgICAgICAgICAgICAgW10pIHtcbiAgICAgICAgICAgICAgbGV0IHJldW5pb25zQXREb3NzaWVyVWlkID1cbiAgICAgICAgICAgICAgICByZXVuaW9uc0J5RG9zc2llclVpZFtkb3NzaWVyTGVnaXNsYXRpZlJlZl1cbiAgICAgICAgICAgICAgaWYgKHJldW5pb25zQXREb3NzaWVyVWlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXVuaW9uc0F0RG9zc2llclVpZCA9IHJldW5pb25zQnlEb3NzaWVyVWlkW1xuICAgICAgICAgICAgICAgICAgZG9zc2llckxlZ2lzbGF0aWZSZWZcbiAgICAgICAgICAgICAgICBdID0gW11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXVuaW9uc0F0RG9zc2llclVpZC5wdXNoKHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYW1lbmRlbWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFtZW5kZW1lbnQgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQW1lbmRlbWVudHMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEZpbGVuYW1lID1cbiAgICAgICAgICBhbWVuZGVtZW50U3BsaXRQYXRoW2FtZW5kZW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFhbWVuZGVtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2FtZW5kZW1lbnRGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYW1lbmRlbWVudEZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50ID0gQW1lbmRlbWVudHNDb252ZXJ0LnRvQW1lbmRlbWVudChhbWVuZGVtZW50SnNvbilcbiAgICAgICAgaWYgKGFtZW5kZW1lbnRCeVVpZFthbWVuZGVtZW50LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFtZW5kZW1lbnRCeVVpZFthbWVuZGVtZW50LnVpZF0gPSBhbWVuZGVtZW50XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBkb2N1bWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvY3VtZW50IH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgZG9jdW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJkb2N1bWVudHNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZW5hbWUgPSBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jdW1lbnRGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5kb2N1bWVudFNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7ZG9jdW1lbnRGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY3VtZW50SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGRvY3VtZW50RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGRvY3VtZW50ID0gRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb2N1bWVudChkb2N1bWVudEpzb24pXG4gICAgICAgIGlmIChkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9IGRvY3VtZW50XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBkb3NzaWVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wiZG9zc2llcnNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGRvc3NpZXJGaWxlbmFtZSA9IGRvc3NpZXJTcGxpdFBhdGhbZG9zc2llclNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWRvc3NpZXJGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb3NzaWVyRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uZG9zc2llclNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7ZG9zc2llckZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9zc2llckpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb3NzaWVyRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGRvc3NpZXIgPVxuICAgICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9zc2llclBhcmxlbWVudGFpcmUoZG9zc2llckpzb24pXG4gICAgICAgIGNvbnN0IHRpdHJlRG9zc2llciA9IGRvc3NpZXIudGl0cmVEb3NzaWVyXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW5bdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW5bdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluW3RpdHJlRG9zc2llci50aXRyZUNoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluW3RpdHJlRG9zc2llci50aXRyZUNoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCBwaG90b0J5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlBob3Rvcykge1xuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBgcGhvdG9zX2RlcHV0ZXNfJHtcbiAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgTGVnaXNsYXR1cmUuQWxsLlxuICAgICAgICAgIGxlZ2lzbGF0dXJlID09PSBMZWdpc2xhdHVyZS5BbGwgPyBMZWdpc2xhdHVyZS5RdWluemUgOiBsZWdpc2xhdHVyZVxuICAgICAgICB9YCxcbiAgICAgICAgXCJkZXB1dGVzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgXCJwaG90b3Nfc2VuYXRldXJzXCIsXG4gICAgICAgIFwic2VuYXRldXJzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBzY3J1dGluQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogU2NydXRpbiB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCBzY3J1dGluRmlsZW5hbWUgPSBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFzY3J1dGluRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnNjcnV0aW5TcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3NjcnV0aW5GaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoc2NydXRpbkZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBzY3J1dGluID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbihzY3J1dGluSnNvbilcbiAgICAgICAgaWYgKHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPSBzY3J1dGluXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFjdGV1ckJ5VWlkLFxuICAgIGFtZW5kZW1lbnRCeVVpZCxcbiAgICBkb2N1bWVudEJ5VWlkLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZCxcbiAgICBvcmdhbmVCeVVpZCxcbiAgICBwaG90b0J5VWlkLFxuICAgIHJldW5pb25CeVVpZCxcbiAgICByZXVuaW9uc0J5RGF5LFxuICAgIHJldW5pb25zQnlEb3NzaWVyVWlkLFxuICAgIHNjcnV0aW5CeVVpZCxcbiAgfVxufVxuXG4vKiogTG9hZCBkYXRhIGZyb20gYmlnIG1vbm9seXRpYyBmaWxlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlRGF0YUZyb21CaWdGaWxlcyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IERhdGEge1xuICBjb25zdCBhY3RldXJCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfSA9IHt9XG4gIGNvbnN0IG9yZ2FuZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IE9yZ2FuZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBhY3RldXJzRXRPcmdhbmVzID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9BY3RldXJzRXRPcmdhbmVzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IGFjdGV1ciBvZiBhY3RldXJzRXRPcmdhbmVzLmFjdGV1cnMpIHtcbiAgICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJhY3RldXJcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgICAgaWYgKGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY3RldXJCeVVpZFthY3RldXIudWlkXSA9IGFjdGV1clxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZSBvZiBhY3RldXJzRXRPcmdhbmVzLm9yZ2FuZXMpIHtcbiAgICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJvcmdhbmVcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgICAgaWYgKG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9IG9yZ2FuZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmV1bmlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFJldW5pb24gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEYXk6IHsgW2RheTogc3RyaW5nXTogUmV1bmlvbltdIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RG9zc2llclVpZDogeyBbZG9zc2llclVpZDogc3RyaW5nXTogUmV1bmlvbltdIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGFnZW5kYXMgPSBBZ2VuZGFzQ29udmVydC50b0FnZW5kYXMoanNvbilcbiAgICAgIGZvciAoY29uc3QgcmV1bmlvbiBvZiBhZ2VuZGFzLnJldW5pb25zKSB7XG4gICAgICAgIGlmIChyZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID0gcmV1bmlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF5ID0gcmV1bmlvbi50aW1lc3RhbXBEZWJ1dC50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXVxuICAgICAgICBsZXQgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XVxuICAgICAgICBpZiAocmV1bmlvbnNBdERheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XSA9IFtdXG4gICAgICAgIH1cbiAgICAgICAgcmV1bmlvbnNBdERheS5wdXNoKHJldW5pb24pXG5cbiAgICAgICAgY29uc3Qgb2RqID0gcmV1bmlvbi5vZGpcbiAgICAgICAgaWYgKG9kaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwb2ludE9kaiBvZiBvZGoucG9pbnRzT2RqIHx8IFtdKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJMZWdpc2xhdGlmUmVmIG9mIHBvaW50T2RqLmRvc3NpZXJzTGVnaXNsYXRpZnNSZWZzIHx8XG4gICAgICAgICAgICAgIFtdKSB7XG4gICAgICAgICAgICAgIGxldCByZXVuaW9uc0F0RG9zc2llclVpZCA9XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNCeURvc3NpZXJVaWRbZG9zc2llckxlZ2lzbGF0aWZSZWZdXG4gICAgICAgICAgICAgIGlmIChyZXVuaW9uc0F0RG9zc2llclVpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQgPSByZXVuaW9uc0J5RG9zc2llclVpZFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJMZWdpc2xhdGlmUmVmXG4gICAgICAgICAgICAgICAgXSA9IFtdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQucHVzaChyZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgYW1lbmRlbWVudHMgPSBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50cyhqc29uKVxuICAgICAgZm9yIChjb25zdCB0ZXh0ZUxlZ2lzbGF0aWYgb2YgYW1lbmRlbWVudHMudGV4dGVzTGVnaXNsYXRpZnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50IG9mIHRleHRlTGVnaXNsYXRpZi5hbWVuZGVtZW50cykge1xuICAgICAgICAgIGlmIChhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFtZW5kZW1lbnRCeVVpZFthbWVuZGVtZW50LnVpZF0gPSBhbWVuZGVtZW50XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGRvc3NpZXJzTGVnaXNsYXRpZnMgPVxuICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0Rvc3NpZXJzTGVnaXNsYXRpZnMoanNvbilcbiAgICAgIGZvciAoY29uc3QgZG9jdW1lbnQgb2YgZG9zc2llcnNMZWdpc2xhdGlmcy50ZXh0ZXNMZWdpc2xhdGlmcykge1xuICAgICAgICBpZiAoZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPSBkb2N1bWVudFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGRvc3NpZXIgb2YgZG9zc2llcnNMZWdpc2xhdGlmcy5kb3NzaWVyc1BhcmxlbWVudGFpcmVzKSB7XG4gICAgICAgIGNvbnN0IHRpdHJlRG9zc2llciA9IGRvc3NpZXIudGl0cmVEb3NzaWVyXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW5bdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW5bdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluW3RpdHJlRG9zc2llci50aXRyZUNoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluW3RpdHJlRG9zc2llci50aXRyZUNoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBob3RvQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuUGhvdG9zKSB7XG4gICAgY29uc3QgcGhvdG9CeVVpZCA9IHt9XG5cbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgYHBob3Rvc19kZXB1dGVzXyR7XG4gICAgICAgICAgLy8gVE9ETzogSGFuZGxlIExlZ2lzbGF0dXJlLkFsbC5cbiAgICAgICAgICBsZWdpc2xhdHVyZSA9PT0gTGVnaXNsYXR1cmUuQWxsID8gTGVnaXNsYXR1cmUuUXVpbnplIDogbGVnaXNsYXR1cmVcbiAgICAgICAgfWAsXG4gICAgICAgIFwiZGVwdXRlcy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIFwicGhvdG9zX3NlbmF0ZXVyc1wiLFxuICAgICAgICBcInNlbmF0ZXVycy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBzY3J1dGlucyA9IFNjcnV0aW5zQ29udmVydC50b1NjcnV0aW5zKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHNjcnV0aW4gb2Ygc2NydXRpbnMuc2NydXRpbnMpIHtcbiAgICAgICAgaWYgKHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPSBzY3J1dGluXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFjdGV1ckJ5VWlkLFxuICAgIGFtZW5kZW1lbnRCeVVpZCxcbiAgICBkb2N1bWVudEJ5VWlkLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZCxcbiAgICBvcmdhbmVCeVVpZCxcbiAgICBwaG90b0J5VWlkLFxuICAgIHJldW5pb25CeVVpZCxcbiAgICByZXVuaW9uc0J5RGF5LFxuICAgIHJldW5pb25zQnlEb3NzaWVyVWlkLFxuICAgIHNjcnV0aW5CeVVpZCxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21Eb2N1bWVudFVpZChkb2N1bWVudHNEaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IGRvY3VtZW50VWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3IgZG9jdW1lbnQgVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IGRvY3VtZW50VHlwZSA9IHBhdGguam9pbihkb2N1bWVudHNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgY2hhbWJyZURpciA9IHBhdGguam9pbihkb2N1bWVudFR5cGUsIG1hdGNoIVsyXSlcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihjaGFtYnJlRGlyLCBtYXRjaCFbM10pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVs0XSlcbiAgY29uc3QgZXRhdERpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbWF0Y2ghWzVdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIG1hdGNoIVs2XVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihldGF0RGlyLCBudW1lcm8uc3Vic3RyKDAsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkKFxuICBkb3NzaWVyc0Rpcjogc3RyaW5nLFxuICB1aWQ6IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gZG9zc2llclVpZFJlZ2V4LmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIGRvc3NpZXIgcGFybGVtZW50YWlyZSBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihkb3NzaWVyc0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihyZXB1YmxpcXVlRGlyLCBtYXRjaCFbMl0pXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMFwiICsgbWF0Y2ghWzNdXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHIobnVtZXJvLmxlbmd0aCAtIDYpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBudW1lcm8uc3Vic3RyKDAsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbVJldW5pb25VaWQocmV1bmlvbnNEaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IHJldW5pb25VaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciByZXVuaW9uIFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCBjaGFtYnJlRGlyID0gcGF0aC5qb2luKHJldW5pb25zRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oY2hhbWJyZURpciwgbWF0Y2ghWzJdKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihyZXB1YmxpcXVlRGlyLCBtYXRjaCFbM10pXG4gIGNvbnN0IHNlc3Npb25EaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG1hdGNoIVs0XSlcbiAgY29uc3QgaWREaXIgPSBwYXRoLmpvaW4oc2Vzc2lvbkRpciwgbWF0Y2ghWzVdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDAwMDBcIiArIG1hdGNoIVs2XVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyKG51bWVyby5sZW5ndGggLSA5KVxuICBjb25zdCBudW1lcm9NaWxsaW9uc0RpciA9IHBhdGguam9pbihpZERpciwgbnVtZXJvLnN1YnN0cigwLCAzKSlcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obnVtZXJvTWlsbGlvbnNEaXIsIG51bWVyby5zdWJzdHIoMywgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tU2NydXRpblVpZChzY3J1dGluc0Rpcjogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gc2NydXRpblVpZFJlZ2V4LmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIHNjcnV0aW4gVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oc2NydXRpbnNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzJdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIG1hdGNoIVszXVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbnVtZXJvLnN1YnN0cigwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuIl19