@kontur.candy/tools 2.147.0 → 2.148.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.
- package/CHANGELOG.md +3 -0
- package/distr/Common/ModelPath/ModelPath.js +3 -3
- package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +5 -5
- package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +9 -7
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +29 -34
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +24 -29
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
<a name="2.148.0"></a>
|
|
2
|
+
# [2.148.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.147.0...release/tools/v2.148.0) (2023-02-20)
|
|
3
|
+
|
|
1
4
|
<a name="2.147.0"></a>
|
|
2
5
|
# [2.147.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.146.0...release/tools/v2.147.0) (2023-02-15)
|
|
3
6
|
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.PathTokens = exports.ModelPathImpl = exports.AbsoluteModelFieldPath = void 0;
|
|
7
|
-
exports.
|
|
7
|
+
exports.convertToAbsoluteModelPath = convertToAbsoluteModelPath;
|
|
8
8
|
exports.convertToLegacyPath = convertToLegacyPath;
|
|
9
9
|
exports.createAbsolute = createAbsolute;
|
|
10
10
|
exports.createAbsoluteFromMask = createAbsoluteFromMask;
|
|
@@ -61,7 +61,7 @@ function convertToLegacyPath(path) {
|
|
|
61
61
|
return isModelPath(path) ? path.toLegacyPath() : path;
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
function
|
|
64
|
+
function convertToAbsoluteModelPath(path) {
|
|
65
65
|
return isModelPath(path) ? path : createAbsoluteFromMask(path, PathTokens.each);
|
|
66
66
|
}
|
|
67
67
|
|
|
@@ -606,4 +606,4 @@ class ModelPathImpl {
|
|
|
606
606
|
}
|
|
607
607
|
|
|
608
608
|
exports.ModelPathImpl = ModelPathImpl;
|
|
609
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9Nb2RlbFBhdGgvTW9kZWxQYXRoLnRzIl0sIm5hbWVzIjpbIkVhY2hTeW1ib2wiLCJTeW1ib2wiLCJmb3IiLCJDdXJyZW50U3ltYm9sIiwiUGF0aFRva2VucyIsImlzTXVsdGlUb2tlbiIsInBhcnQiLCJlYWNoIiwiY3VycmVudCIsImlzU2ltcGxlVG9rZW4iLCJpc0luc3RhbmNlVG9rZW4iLCJ0ZXN0IiwiaXNNb2RlbFBhdGgiLCJwYXRoIiwiTW9kZWxQYXRoSW1wbCIsImNvbnZlcnRUb0xlZ2FjeVBhdGgiLCJ0b0xlZ2FjeVBhdGgiLCJjb252ZXJ0VG9BYnNvbHV0TW9kZWxQYXRoIiwiY3JlYXRlQWJzb2x1dGVGcm9tTWFzayIsImVtcHR5TW9kZWxQYXRoIiwiZW1wdHlBYnNvbHV0ZU1vZGVsUGF0aCIsImNyZWF0ZU1vZGVsUGF0aCIsImFic29sdXRlIiwicGFydFBhcnRTdHJpbmdzIiwic3BsaXQiLCJlbnN1cmVQbGFpblBhdGhQYXJ0c0RvZXNOb3RDb250YWluTXVsdGlwbGljaXR5Iiwic3RhcnRzV2l0aCIsInNsaWNlIiwiY3JlYXRlRnJvbU1hc2siLCJtdWx0aXBsaWNpdHlTeW1ib2wiLCJtYXAiLCJ4IiwicGFydHMiLCJzb21lIiwiRXJyb3IiLCJjcmVhdGVBYnNvbHV0ZSIsImNyZWF0ZVJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGgiLCJjcmVhdGVBYnNvbHV0ZUZyb21Ub2tlbnMiLCJ0b2tlbnMiLCJjcmVhdGVBYnNvbHV0ZVJlc29sdmVkRnJvbVRva2VucyIsImNyZWF0ZVJlbGF0aXZlRnJvbVRva2VucyIsImpvaW5Nb2RlbFBhdGhzIiwicmVzdWx0UGFydHMiLCJqb2luSXRlbSIsInB1c2giLCJpc0Fic29sdXRlIiwiZ2V0UGF0aFBhcnRzQXNBcnJheSIsIkFycmF5IiwiaXNBcnJheSIsIkFic29sdXRlTW9kZWxGaWVsZFBhdGgiLCJjb25zdHJ1Y3RvciIsImZpZWxkTmFtZSIsImZpZWxkIiwiZ2V0SGFzaCIsImlzRXF1YWxzIiwibW9kZWxQYXRoIiwiZWFjaEN1cnJlbnRDb2xsaXNpb24iLCJFYWNoQ3VycmVudENvbGxpc2lvbiIsIkFyZVNhbWUiLCJjcmVhdGVGcm9tU3RyaW5nIiwicGF0aFdpdGhGaWVsZE5hbWUiLCJlbmRzV2l0aCIsInJlcGxhY2UiLCJpc0FsbFRva2Vuc1Jlc29sdmVkIiwiZXZlcnkiLCJwYXRoUGFydHMiLCJsZWdhY3lQYXRoIiwiZmlsdGVyIiwicmVzb2x2ZWQiLCJnZXRQYXRoUGFydHMiLCJnZXRTaW1wbGVUb2tlbnNTdHJpY3QiLCJ0b2tlbiIsImdldFNpbXBsZVRva2Vuc0FzQXJyYXlTdHJpY3QiLCJqb2luV2l0aCIsImlzUmVzb2x2ZWQiLCJyZXNvbHZlQWxsIiwiaW5zdGFuY2UiLCJpc0NvbnRhaW5JdGVyYXRpb24iLCJpc0NvbnRhaW5DdXJyZW50SXRlcmF0aW9uIiwiZ2V0TGFzdExpc3RQYXRoIiwibGFzdEl0ZXJhdGlvbkluZGV4IiwibGFzdEluZGV4T2YiLCJpc0VuZHNXaXRoSXRlcmF0aW9uIiwibGFzdEl0ZW0iLCJJdGVyVXRpbHMiLCJsYXN0IiwidG9TdHJpbmciLCJsZW5ndGgiLCJwYXRoUGFydFRvU3RyaW5nIiwiam9pbiIsIkl0ZXJhdG9yIiwiZnJvbSIsInppcCIsInQxIiwidDIiLCJoYXNoIiwiY3VycmVudFN0ciIsIkFyZURpZmZlcmVudCIsInN0cmluZ0luZGV4IiwiY2hhckNvZGVBdCIsImlzSW5jbHVkZXMiLCJ0YXJnZXRUb2tlbnMiLCJpIiwibGVmdFBhcnQiLCJyaWdodFBhcnQiLCJpc0Zpbml0ZSIsIk51bWJlciIsImdldEl0ZXJhdGlvblJhbmsiLCJpc0VtcHR5IiwibWF0Y2hGb3IiLCJQYXRoTWF0Y2hlciIsIm1hdGNoIiwic3BsaXRCeU11bHRpcGxpY2l0eSIsImxhc3RTaW1wbGVQYXJ0cyIsIk1vZGVsUGF0aEJ1aWxkZXIiLCJhcHBlbmQiLCJlbXB0eSIsInRvUmVzb2x2ZWRQYXRoIiwibm9ybWFsaXplIiwicmVzdWx0VG9rZW5zIiwicGF0aFBhcnQiLCJwb3AiLCJ0b0N1cnJlbnRJdGVyYXRpb24iLCJ0b0VhY2hJdGVyYXRpb24iLCJ0b0Fic29sdXRlIiwiZ2V0QWxsUGFyZW50UGF0aHMiLCJyZXN1bHQiLCJza2lwTGFzdCIsInRvUGF0aCIsInRyaW1MYXN0U3RhcklmTGFzdFRva2VuIiwidW5kZWZpbmVkIiwiZ2V0UGFyZW50UGF0aCIsImFwcGx5SW5zdGFuY2VzRGlydHkiLCJpbnN0YW5jZXMiLCJpbnN0YW5jZUNvdW50ZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLFVBQVUsR0FBR0MsTUFBTSxDQUFDQyxHQUFQLENBQVcsVUFBWCxDQUFuQjtBQUNBLE1BQU1DLGFBQWEsR0FBR0YsTUFBTSxDQUFDQyxHQUFQLENBQVcsYUFBWCxDQUF0Qjs7QUFFTyxNQUFNRSxVQUFOLENBQWlCO0FBSU0sU0FBWkMsWUFBWSxDQUFDQyxJQUFELEVBQWdGO0FBQ3RHLFdBQU9BLElBQUksS0FBS0YsVUFBVSxDQUFDRyxJQUFwQixJQUE0QkQsSUFBSSxLQUFLRixVQUFVLENBQUNJLE9BQXZEO0FBQ0g7O0FBRTBCLFNBQWJDLGFBQWEsQ0FBQ0gsSUFBRCxFQUE4QztBQUNyRSxXQUFPLE9BQU9BLElBQVAsS0FBZ0IsUUFBdkI7QUFDSDs7QUFFNEIsU0FBZkksZUFBZSxDQUFDSixJQUFELEVBQThDO0FBQ3ZFLFdBQU8sT0FBT0EsSUFBUCxLQUFnQixRQUFoQixJQUE0QixTQUFTSyxJQUFULENBQWNMLElBQWQsQ0FBbkM7QUFDSDs7QUFkbUI7OztBQUFYRixVLENBQ0tHLEksR0FBMEJQLFU7QUFEL0JJLFUsQ0FFS0ksTyxHQUFnQ0wsYTs7QUFtQjNDLFNBQVNTLFdBQVQsQ0FBcUJDLElBQXJCLEVBQWlGO0FBQ3BGLFNBQU8sT0FBT0EsSUFBUCxLQUFnQixRQUFoQixJQUE0QkEsSUFBSSxZQUFZQyxhQUFuRDtBQUNIOztBQUVNLFNBQVNDLG1CQUFULENBQTZCRixJ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UyxDQUFDOUMsTUFBVixLQUFxQixDQUE5QyxFQUFpRDtBQUM3QyxhQUFPLElBQVA7QUFDSDs7QUFDRCxRQUFJK0MsZUFBZSxHQUFHLENBQXRCO0FBQ0EsVUFBTVIsTUFBTSxHQUFHLElBQUlaLGtDQUFKLENBQXFCLElBQXJCLENBQWY7O0FBQ0EsU0FBSyxNQUFNM0MsS0FBWCxJQUFvQixLQUFLRixZQUFMLEVBQXBCLEVBQXlDO0FBQ3JDLFVBQUlqRSxVQUFVLENBQUNDLFlBQVgsQ0FBd0JrRSxLQUF4QixLQUFrQytELGVBQWUsR0FBR0QsU0FBUyxDQUFDOUMsTUFBbEUsRUFBMEU7QUFBQTs7QUFDdEV1QyxRQUFBQSxNQUFNLENBQUNYLE1BQVAsMEJBQWNrQixTQUFTLENBQUNDLGVBQUQsQ0FBdkIseUVBQTRDLDBCQUE1QztBQUNBQSxRQUFBQSxlQUFlO0FBQ2xCLE9BSEQsTUFHTztBQUNIUixRQUFBQSxNQUFNLENBQUNYLE1BQVAsQ0FBYzVDLEtBQWQ7QUFDSDtBQUNKLEtBYnNGLENBY3ZGO0FBQ0E7OztBQUNBLFdBQU91RCxNQUFNLENBQUNFLE1BQVAsRUFBUDtBQUNIOztBQUVPeEMsRUFBQUEsZ0JBQWdCLENBQUNnQyxRQUFELEVBQThCO0FBQ2xELFFBQUksT0FBT0EsUUFBUCxLQUFvQixRQUF4QixFQUFrQztBQUM5QixhQUFPQSxRQUFQO0FBQ0g7O0FBQ0QsUUFBSUEsUUFBUSxLQUFLcEgsVUFBVSxDQUFDRyxJQUE1QixFQUFrQztBQUM5QixhQUFPLEdBQVA7QUFDSDs7QUFDRCxRQUFJaUgsUUFBUSxLQUFLcEgsVUFBVSxDQUFDSSxPQUE1QixFQUFxQztBQUNqQyxhQUFPLEdBQVA7QUFDSDs7QUFDRCxVQUFNLElBQUkwQixLQUFKLENBQVcsZ0NBQStCLHFDQUFtQnNGLFFBQW5CLENBQTZCLEVBQXZFLENBQU47QUFDSDs7QUFuVkwiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCaW5kaW5nUGF0aCwgVmlld01vZGVsRmllbGROYW1lIH0gZnJvbSBcIi4uLy4uL0VuZ2luZS9zcmMvRW5naW5lL0NvcmUvQ29yZVR5cGVzXCI7XG5pbXBvcnQgeyBjb3VudCwgSXRlclV0aWxzLCByZXZlcnNlQXJyYXkgfSBmcm9tIFwiLi4vSXRlcmFibGVVdGlsc1wiO1xuaW1wb3J0IHsgZW5zdXJlQW5kR2V0U3RyaW5nLCByZWplY3QgfSBmcm9tIFwiLi4vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB7IGdldFNpbXBsZUhhc2hCeVN0cmluZyB9IGZyb20gXCIuLi9oYXNoVXRpbHNcIjtcblxuaW1wb3J0IHsgRWFjaEN1cnJlbnRDb2xsaXNpb24gfSBmcm9tIFwiLi9FYWNoQ3VycmVudENvbGxpc2lvblwiO1xuaW1wb3J0IHsgTW9kZWxQYXRoQnVpbGRlciB9IGZyb20gXCIuL01vZGVsUGF0aEJ1aWxkZXJcIjtcbmltcG9ydCB7IFBhdGhNYXRjaGVyLCBQYXRoTWF0Y2hpbmcgfSBmcm9tIFwiLi9QYXRoTWF0Y2hlclwiO1xuaW1wb3J0IHsgSUVxdWF0YWJsZSB9IGZyb20gXCIuL0lFcXVhdGFibGVcIjtcblxuY29uc3QgRWFjaFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJfX0VBQ0hfX1wiKTtcbmNvbnN0IEN1cnJlbnRTeW1ib2wgPSBTeW1ib2wuZm9yKFwiX19DVVJSRU5UX19cIik7XG5cbmV4cG9ydCBjbGFzcyBQYXRoVG9rZW5zIHtcbiAgICBwdWJsaWMgc3RhdGljIGVhY2g6IHR5cGVvZiBFYWNoU3ltYm9sID0gRWFjaFN5bWJvbDtcbiAgICBwdWJsaWMgc3RhdGljIGN1cnJlbnQ6IHR5cGVvZiBDdXJyZW50U3ltYm9sID0gQ3VycmVudFN5bWJvbDtcblxuICAgIHB1YmxpYyBzdGF0aWMgaXNNdWx0aVRva2VuKHBhcnQ6IHVuZGVmaW5lZCB8IFBhdGhUb2tlbik6IHBhcnQgaXMgdHlwZW9mIEVhY2hTeW1ib2wgfCB0eXBlb2YgQ3VycmVudFN5bWJvbCB7XG4gICAgICAgIHJldHVybiBwYXJ0ID09PSBQYXRoVG9rZW5zLmVhY2ggfHwgcGFydCA9PT0gUGF0aFRva2Vucy5jdXJyZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgaXNTaW1wbGVUb2tlbihwYXJ0OiB1bmRlZmluZWQgfCBQYXRoVG9rZW4pOiBwYXJ0IGlzIHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgcGFydCA9PT0gXCJzdHJpbmdcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGlzSW5zdGFuY2VUb2tlbihwYXJ0OiB1bmRlZmluZWQgfCBQYXRoVG9rZW4pOiBwYXJ0IGlzIHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgcGFydCA9PT0gXCJzdHJpbmdcIiAmJiAvXlxcZCskL2kudGVzdChwYXJ0KTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIFNpbXBsZVBhdGhUb2tlbiA9IHN0cmluZztcblxuZXhwb3J0IHR5cGUgUGF0aFRva2VuID0gU2ltcGxlUGF0aFRva2VuIHwgdHlwZW9mIEVhY2hTeW1ib2wgfCB0eXBlb2YgQ3VycmVudFN5bWJvbDtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTW9kZWxQYXRoKHBhdGg6IEJpbmRpbmdQYXRoIHwgTW9kZWxQYXRoIHwgdW5rbm93bik6IHBhdGggaXMgTW9kZWxQYXRoIHtcbiAgICByZXR1cm4gdHlwZW9mIHBhdGggIT09IFwic3RyaW5nXCIgJiYgcGF0aCBpbnN0YW5jZW9mIE1vZGVsUGF0aEltcGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VG9MZWdhY3lQYXRoKHBhdGg6IEJpbmRpbmdQYXRoIHwgTW9kZWxQYXRoKTogQmluZGluZ1BhdGgge1xuICAgIHJldHVybiBpc01vZGVsUGF0aChwYXRoKSA/IHBhdGgudG9MZWdhY3lQYXRoKCkgOiBwYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRvQWJzb2x1dE1vZGVsUGF0aDxSIGV4dGVuZHMgYm9vbGVhbiwgQSBleHRlbmRzIGJvb2xlYW4+KFxuICAgIHBhdGg6IEJpbmRpbmdQYXRoIHwgSU1vZGVsUGF0aDxSLCBBPlxuKTogSU1vZGVsUGF0aDxSLCB0cnVlPjtcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VG9BYnNvbHV0TW9kZWxQYXRoKHBhdGg6IEJpbmRpbmdQYXRoIHwgQWJzb2x1dGVNb2RlbFBhdGgpOiBBYnNvbHV0ZU1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIGlzTW9kZWxQYXRoKHBhdGgpID8gcGF0aCA6IGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aCwgUGF0aFRva2Vucy5lYWNoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5TW9kZWxQYXRoKCk6IFJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGgge1xuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCBmYWxzZT4oW10sIGZhbHNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5QWJzb2x1dGVNb2RlbFBhdGgoKTogQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIHRydWU+KFtdLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vZGVsUGF0aChwYXRoOiBzdHJpbmcsIGFic29sdXRlOiB0cnVlKTogQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2RlbFBhdGgocGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogZmFsc2UpOiBSZWxhdGl2ZVJlc29sdmVkTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vZGVsUGF0aChwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBcImF1dG9cIik6IFJlc29sdmVkTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vZGVsUGF0aChwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBib29sZWFuIHwgXCJhdXRvXCIpOiBSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gICAgZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eShwYXJ0UGFydFN0cmluZ3MpO1xuICAgIGlmIChhYnNvbHV0ZSA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCB0cnVlPihwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIGZhbHNlPihwYXJ0UGFydFN0cmluZ3MsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWJzb2x1dGUgJiYgcGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgdHJ1ZT4ocGFydFBhcnRTdHJpbmdzLnNsaWNlKDEpLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIGJvb2xlYW4+KHBhcnRQYXJ0U3RyaW5ncywgYWJzb2x1dGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJvbU1hc2socGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogdHJ1ZSwgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBBYnNvbHV0ZU1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcm9tTWFzayhwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBmYWxzZSwgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBSZXNvbHZlZE1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcm9tTWFzayhwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBcImF1dG9cIiwgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBNb2RlbFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJvbU1hc2socGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogYm9vbGVhbiB8IFwiYXV0b1wiLCBtdWx0aXBsaWNpdHlTeW1ib2w6IFBhdGhUb2tlbik6IE1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIikubWFwKHggPT4gKHggPT09IFwiKlwiID8gbXVsdGlwbGljaXR5U3ltYm9sIDogeCkpO1xuICAgIGlmIChhYnNvbHV0ZSA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHBhcnRQYXJ0U3RyaW5ncywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChhYnNvbHV0ZSAmJiBwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwocGFydFBhcnRTdHJpbmdzLCBhYnNvbHV0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGg6IHN0cmluZywgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBBYnNvbHV0ZU1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIikubWFwKHggPT4gKHggPT09IFwiKlwiID8gbXVsdGlwbGljaXR5U3ltYm9sIDogeCkpO1xuICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwocGFydFBhcnRTdHJpbmdzLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eShwYXJ0czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAocGFydHMuc29tZSh4ID0+IHggPT09IFwiKlwiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3Qgbm90IGNvbnRhaW4gKiBzeW1ib2xcIik7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWJzb2x1dGUocGF0aDogc3RyaW5nKTogQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gICAgZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eShwYXJ0UGFydFN0cmluZ3MpO1xuICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCB0cnVlPihwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgdHJ1ZT4ocGFydFBhcnRTdHJpbmdzLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGgocGF0aDogc3RyaW5nKTogUmVsYXRpdmVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gICAgZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eShwYXJ0UGFydFN0cmluZ3MpO1xuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCBmYWxzZT4ocGFydFBhcnRTdHJpbmdzLCBmYWxzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBYnNvbHV0ZUZyb21Ub2tlbnModG9rZW5zOiBQYXRoVG9rZW5bXSk6IEFic29sdXRlTW9kZWxQYXRoIHtcbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8ZmFsc2UsIHRydWU+KHRva2VucywgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBYnNvbHV0ZVJlc29sdmVkRnJvbVRva2Vucyh0b2tlbnM6IHN0cmluZ1tdKTogQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eSh0b2tlbnMpO1xuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCB0cnVlPih0b2tlbnMsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVsYXRpdmVGcm9tVG9rZW5zKHRva2VuczogcmVhZG9ubHkgc3RyaW5nW10pOiBSZWxhdGl2ZVJlc29sdmVkTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbGF0aXZlRnJvbVRva2Vucyh0b2tlbnM6IHJlYWRvbmx5IFBhdGhUb2tlbltdKTogUmVsYXRpdmVNb2RlbFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVsYXRpdmVGcm9tVG9rZW5zKHRva2VuczogcmVhZG9ubHkgUGF0aFRva2VuW10pOiBSZWxhdGl2ZU1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPGZhbHNlLCBmYWxzZT4odG9rZW5zLCBmYWxzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqb2luTW9kZWxQYXRocyguLi5wYXJ0czogQXJyYXk8TW9kZWxQYXRoIHwgUGF0aFRva2VuIHwgUGF0aFRva2VuW10+KTogTW9kZWxQYXRoIHtcbiAgICBsZXQgYWJzb2x1dGUgPSBmYWxzZTtcbiAgICBsZXQgcmVzdWx0UGFydHM6IFBhdGhUb2tlbltdID0gW107XG4gICAgZm9yIChjb25zdCBqb2luSXRlbSBvZiBwYXJ0cykge1xuICAgICAgICBpZiAodHlwZW9mIGpvaW5JdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXN1bHRQYXJ0cy5wdXNoKGpvaW5JdGVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc01vZGVsUGF0aChqb2luSXRlbSkpIHtcbiAgICAgICAgICAgIGlmIChqb2luSXRlbS5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgICAgICBhYnNvbHV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVzdWx0UGFydHMgPSBbLi4uam9pbkl0ZW0uZ2V0UGF0aFBhcnRzQXNBcnJheSgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0UGFydHMucHVzaCguLi5qb2luSXRlbS5nZXRQYXRoUGFydHNBc0FycmF5KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoam9pbkl0ZW0pKSB7XG4gICAgICAgICAgICByZXN1bHRQYXJ0cy5wdXNoKC4uLmpvaW5JdGVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChQYXRoVG9rZW5zLmlzTXVsdGlUb2tlbihqb2luSXRlbSkpIHtcbiAgICAgICAgICAgIHJlc3VsdFBhcnRzLnB1c2goam9pbkl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHJlc3VsdFBhcnRzLCBhYnNvbHV0ZSk7XG59XG5cbmV4cG9ydCBjbGFzcyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoIGltcGxlbWVudHMgSUVxdWF0YWJsZTxBYnNvbHV0ZU1vZGVsRmllbGRQYXRoPiB7XG4gICAgcHVibGljIHJlYWRvbmx5IHBhdGg6IEFic29sdXRlTW9kZWxQYXRoO1xuICAgIHB1YmxpYyByZWFkb25seSBmaWVsZDogVmlld01vZGVsRmllbGROYW1lIHwgXCIkZXJyb3JDb3VudFwiIHwgXCIkd2FybmluZ0NvdW50XCI7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocGF0aDogQWJzb2x1dGVNb2RlbFBhdGgsIGZpZWxkTmFtZTogVmlld01vZGVsRmllbGROYW1lIHwgXCIkZXJyb3JDb3VudFwiIHwgXCIkd2FybmluZ0NvdW50XCIpIHtcbiAgICAgICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5maWVsZCA9IGZpZWxkTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SGFzaCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoLmdldEhhc2goKSArIGdldFNpbXBsZUhhc2hCeVN0cmluZyh0aGlzLmZpZWxkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNFcXVhbHMoXG4gICAgICAgIG1vZGVsUGF0aDogQWJzb2x1dGVNb2RlbEZpZWxkUGF0aCxcbiAgICAgICAgZWFjaEN1cnJlbnRDb2xsaXNpb246IEVhY2hDdXJyZW50Q29sbGlzaW9uID0gRWFjaEN1cnJlbnRDb2xsaXNpb24uQXJlU2FtZVxuICAgICk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoLmlzRXF1YWxzKG1vZGVsUGF0aC5wYXRoLCBlYWNoQ3VycmVudENvbGxpc2lvbikgJiYgdGhpcy5maWVsZCA9PT0gbW9kZWxQYXRoLmZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRnJvbVN0cmluZyhwYXRoV2l0aEZpZWxkTmFtZTogc3RyaW5nKTogQWJzb2x1dGVNb2RlbEZpZWxkUGF0aCB7XG4gICAgICAgIGlmIChwYXRoV2l0aEZpZWxkTmFtZS5lbmRzV2l0aChcIi4kZXJyb3JDb3VudFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFic29sdXRlKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuJGVycm9yQ291bnRcIiwgXCJcIikpLFxuICAgICAgICAgICAgICAgIFwiJGVycm9yQ291bnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFdpdGhGaWVsZE5hbWUuZW5kc1dpdGgoXCIuJHdhcm5pbmdDb3VudFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFic29sdXRlKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuJHdhcm5pbmdDb3VudFwiLCBcIlwiKSksXG4gICAgICAgICAgICAgICAgXCIkd2FybmluZ0NvdW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKGNyZWF0ZUFic29sdXRlKHBhdGhXaXRoRmllbGROYW1lKSwgXCJ2YWx1ZVwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZyb21NYXNrKHBhdGhXaXRoRmllbGROYW1lOiBzdHJpbmcsIG11bHRpcGxpY2l0eVN5bWJvbDogUGF0aFRva2VuKTogQWJzb2x1dGVNb2RlbEZpZWxkUGF0aCB7XG4gICAgICAgIGlmIChwYXRoV2l0aEZpZWxkTmFtZS5lbmRzV2l0aChcIi4kZXJyb3JDb3VudFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aFdpdGhGaWVsZE5hbWUucmVwbGFjZShcIi4kZXJyb3JDb3VudFwiLCBcIlwiKSwgbXVsdGlwbGljaXR5U3ltYm9sKSxcbiAgICAgICAgICAgICAgICBcIiRlcnJvckNvdW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGhXaXRoRmllbGROYW1lLmVuZHNXaXRoKFwiLiR3YXJuaW5nQ291bnRcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQWJzb2x1dGVNb2RlbEZpZWxkUGF0aChcbiAgICAgICAgICAgICAgICBjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuJHdhcm5pbmdDb3VudFwiLCBcIlwiKSwgbXVsdGlwbGljaXR5U3ltYm9sKSxcbiAgICAgICAgICAgICAgICBcIiR3YXJuaW5nQ291bnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFdpdGhGaWVsZE5hbWUuZW5kc1dpdGgoXCIuZXJyb3JzQ291bnRcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQWJzb2x1dGVNb2RlbEZpZWxkUGF0aChcbiAgICAgICAgICAgICAgICBjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuZXJyb3JzQ291bnRcIiwgXCJcIiksIG11bHRpcGxpY2l0eVN5bWJvbCksXG4gICAgICAgICAgICAgICAgXCJlcnJvcnNDb3VudFwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoV2l0aEZpZWxkTmFtZS5lbmRzV2l0aChcIi53YXJuaW5nc0NvdW50XCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFic29sdXRlTW9kZWxGaWVsZFBhdGgoXG4gICAgICAgICAgICAgICAgY3JlYXRlQWJzb2x1dGVGcm9tTWFzayhwYXRoV2l0aEZpZWxkTmFtZS5yZXBsYWNlKFwiLndhcm5pbmdzQ291bnRcIiwgXCJcIiksIG11bHRpcGxpY2l0eVN5bWJvbCksXG4gICAgICAgICAgICAgICAgXCJ3YXJuaW5nc0NvdW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aFdpdGhGaWVsZE5hbWUsIG11bHRpcGxpY2l0eVN5bWJvbCksIFwidmFsdWVcIik7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNb2RlbFBhdGg8VFJlc29sdmVkIGV4dGVuZHMgYm9vbGVhbiwgVEFic29sdXRlIGV4dGVuZHMgYm9vbGVhbj5cbiAgICBleHRlbmRzIElFcXVhdGFibGU8SU1vZGVsUGF0aDxib29sZWFuLCBib29sZWFuPj4ge1xuICAgIHJlYWRvbmx5IHJlc29sdmVkOiBUUmVzb2x2ZWQ7XG4gICAgcmVhZG9ubHkgYWJzb2x1dGU6IFRBYnNvbHV0ZTtcblxuICAgIGlzRXF1YWxzKG1vZGVsUGF0aDogTW9kZWxQYXRoLCBlYWNoQ3VycmVudENvbGxpc2lvbj86IEVhY2hDdXJyZW50Q29sbGlzaW9uKTogYm9vbGVhbjtcbiAgICBnZXRIYXNoKGVhY2hDdXJyZW50Q29sbGlzaW9uPzogRWFjaEN1cnJlbnRDb2xsaXNpb24pOiBudW1iZXI7XG5cbiAgICBpc1Jlc29sdmVkKCk6IHRoaXMgaXMgSU1vZGVsUGF0aDx0cnVlLCBUQWJzb2x1dGU+O1xuICAgIGlzQWJzb2x1dGUoKTogdGhpcyBpcyBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT47XG4gICAgdG9BYnNvbHV0ZSgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT47XG5cbiAgICBqb2luV2l0aCguLi5wYXRoOiBzdHJpbmdbXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IFBhdGhUb2tlbltdKTogSU1vZGVsUGF0aDxib29sZWFuLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PFJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGggfCBzdHJpbmc+KTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIHRydWU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PE1vZGVsUGF0aCB8IFBhdGhUb2tlbj4pOiBJTW9kZWxQYXRoPGJvb2xlYW4sIFRBYnNvbHV0ZT47XG5cbiAgICBnZXRQYXRoUGFydHMoKTogSXRlcmFibGU8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcbiAgICBnZXRQYXRoUGFydHNBc0FycmF5KCk6IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcbiAgICBnZXRTaW1wbGVUb2tlbnNTdHJpY3QoKTogSXRlcmFibGU8U2ltcGxlUGF0aFRva2VuPjtcbiAgICBnZXRTaW1wbGVUb2tlbnNBc0FycmF5U3RyaWN0KCk6IHJlYWRvbmx5IFNpbXBsZVBhdGhUb2tlbltdO1xuXG4gICAgcmVzb2x2ZUFsbChpbnN0YW5jZTogc3RyaW5nKTogTW9kZWxQYXRoO1xuICAgIGlzQ29udGFpbkl0ZXJhdGlvbigpOiBib29sZWFuO1xuICAgIGlzQ29udGFpbkN1cnJlbnRJdGVyYXRpb24oKTogYm9vbGVhbjtcbiAgICBnZXRMYXN0TGlzdFBhdGgoKTogUGF0aFRva2VuW107XG4gICAgaXNFbmRzV2l0aEl0ZXJhdGlvbigpOiBib29sZWFuO1xuICAgIGlzSW5jbHVkZXMobW9kZWxQYXRoOiBNb2RlbFBhdGgpOiBib29sZWFuO1xuICAgIGdldEl0ZXJhdGlvblJhbmsoKTogbnVtYmVyO1xuICAgIGlzRW1wdHkoKTogYm9vbGVhbjtcbiAgICBtYXRjaEZvcihtb2RlbFBhdGg6IE1vZGVsUGF0aCk6IFBhdGhNYXRjaGluZztcbiAgICBzcGxpdEJ5TXVsdGlwbGljaXR5KCk6IEl0ZXJhYmxlPFJlc29sdmVkTW9kZWxQYXRoIHwgdHlwZW9mIEVhY2hTeW1ib2wgfCB0eXBlb2YgQ3VycmVudFN5bWJvbD47XG4gICAgbm9ybWFsaXplKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIHRvQ3VycmVudEl0ZXJhdGlvbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICB0b0VhY2hJdGVyYXRpb24oKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT47XG4gICAgZ2V0QWxsUGFyZW50UGF0aHMoKTogSXRlcmFibGU8TW9kZWxQYXRoPjtcbiAgICB0cmltTGFzdFN0YXJJZkxhc3RUb2tlbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICBnZXRQYXJlbnRQYXRoKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGFwcGx5SW5zdGFuY2VzRGlydHkoaW5zdGFuY2VzOiBTaW1wbGVQYXRoVG9rZW5bXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nO1xuICAgIHRvTGVnYWN5UGF0aCgpOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIE1vZGVsUGF0aCA9IElNb2RlbFBhdGg8Ym9vbGVhbiwgYm9vbGVhbj47XG5leHBvcnQgdHlwZSBSZXNvbHZlZE1vZGVsUGF0aCA9IElNb2RlbFBhdGg8dHJ1ZSwgYm9vbGVhbj47XG5leHBvcnQgdHlwZSBBYnNvbHV0ZU1vZGVsUGF0aCA9IElNb2RlbFBhdGg8Ym9vbGVhbiwgdHJ1ZT47XG5leHBvcnQgdHlwZSBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoID0gSU1vZGVsUGF0aDx0cnVlLCB0cnVlPjtcblxuZXhwb3J0IHR5cGUgUmVsYXRpdmVNb2RlbFBhdGggPSBJTW9kZWxQYXRoPGJvb2xlYW4sIGZhbHNlPjtcbmV4cG9ydCB0eXBlIFJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGggPSBJTW9kZWxQYXRoPHRydWUsIGZhbHNlPjtcblxudHlwZSBQYXRoVG9rZW5TcGVjPFRSZXNvbHZlZCBleHRlbmRzIGJvb2xlYW4+ID0gVFJlc29sdmVkIGV4dGVuZHMgdHJ1ZSA/IHN0cmluZyA6IFBhdGhUb2tlbjtcblxudHlwZSBQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPiA9IEFycmF5PFBhdGhUb2tlblNwZWM8VFJlc29sdmVkPj47XG5cbnR5cGUgUmVhZG9ubHlQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPiA9IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcblxuZnVuY3Rpb24gaXNBbGxUb2tlbnNSZXNvbHZlZDxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPih0b2tlbnM6IFJlYWRvbmx5UGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkPik6IFRSZXNvbHZlZCB7XG4gICAgLy8g0K8g0YfRgtC+LdGC0L4g0L3QtdC80L7Qs9GDINGB0L7QvtCx0YDQsNC30LjRgtGMINC60LDQuiDRgtGD0YIg0LLRgdGRINGB0YLRgNC+0LPQviDQvdCw0L/QuNGB0LDRgtGMLi4uXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHJldHVybiB0b2tlbnMuZXZlcnkoUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vZGVsUGF0aEltcGw8VFJlc29sdmVkIGV4dGVuZHMgYm9vbGVhbiwgVEFic29sdXRlIGV4dGVuZHMgYm9vbGVhbj5cbiAgICBpbXBsZW1lbnRzIElFcXVhdGFibGU8TW9kZWxQYXRoPiwgSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT5cbntcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRva2VuczogUmVhZG9ubHlQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQ+O1xuICAgIHB1YmxpYyByZWFkb25seSBhYnNvbHV0ZTogVEFic29sdXRlO1xuICAgIHByaXZhdGUgbGVnYWN5UGF0aDogdW5kZWZpbmVkIHwgc3RyaW5nO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHBhdGhQYXJ0czogUmVhZG9ubHlQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQ+LCBhYnNvbHV0ZTogVEFic29sdXRlKSB7XG4gICAgICAgIHRoaXMudG9rZW5zID0gcGF0aFBhcnRzLmZpbHRlcih4ID0+IHggIT09IFwiXCIpO1xuICAgICAgICB0aGlzLmFic29sdXRlID0gYWJzb2x1dGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXNvbHZlZCgpOiBUUmVzb2x2ZWQge1xuICAgICAgICByZXR1cm4gaXNBbGxUb2tlbnNSZXNvbHZlZCh0aGlzLnRva2Vucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhdGhQYXJ0cygpOiBJdGVyYWJsZTxQYXRoVG9rZW5TcGVjPFRSZXNvbHZlZD4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQYXRoUGFydHNBc0FycmF5KCk6IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgICB9XG5cbiAgICBwdWJsaWMgKmdldFNpbXBsZVRva2Vuc1N0cmljdCgpOiBJdGVyYWJsZTxTaW1wbGVQYXRoVG9rZW4+IHtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0aGlzLnRva2Vucykge1xuICAgICAgICAgICAgaWYgKCFQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IG5vdCBjb250YWluIHNwZWMgdG9rZW5zXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeWllbGQgdG9rZW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2ltcGxlVG9rZW5zQXNBcnJheVN0cmljdCgpOiByZWFkb25seSBTaW1wbGVQYXRoVG9rZW5bXSB7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy50b2tlbnMpIHtcbiAgICAgICAgICAgIGlmICghUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKHRva2VuKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhdGggbXVzdCBub3QgY29udGFpbiBzcGVjIHRva2Vuc1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyDQn9GA0L7QstC10YDQutCwINCy0YvRiNC1INCz0LDRgNCw0LXQvdGC0LjRgNGD0LXRgiDRh9GC0L4g0LHRg9C00YPRgiDRgtC+0LvRjNC60L4gU2ltcGxlUGF0aFRva2VuLlxuICAgICAgICAvLyDQktGB0LUgbWFwINC4IGZpbHRlciDRg9Cx0YDQsNC90Ysg0LTQu9GPINC/0YDQvtC40LfQstC+0LTQuNGC0LXQu9GM0L3QvtGB0YLQuFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgICB9XG5cbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogc3RyaW5nW10pOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogUGF0aFRva2VuW10pOiBJTW9kZWxQYXRoPGJvb2xlYW4sIFRBYnNvbHV0ZT47XG4gICAgcHVibGljIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PFJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIHB1YmxpYyBqb2luV2l0aCguLi5wYXRoOiBBcnJheTxBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCB0cnVlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogQXJyYXk8TW9kZWxQYXRoIHwgUGF0aFRva2VuPik6IElNb2RlbFBhdGg8Ym9vbGVhbiwgVEFic29sdXRlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogQXJyYXk8TW9kZWxQYXRoIHwgUGF0aFRva2VuPik6IElNb2RlbFBhdGg8Ym9vbGVhbiwgYm9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gam9pbk1vZGVsUGF0aHModGhpcywgLi4ucGF0aCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzUmVzb2x2ZWQoKTogdGhpcyBpcyBJTW9kZWxQYXRoPHRydWUsIFRBYnNvbHV0ZT4ge1xuICAgICAgICByZXR1cm4gaXNBbGxUb2tlbnNSZXNvbHZlZCh0aGlzLnRva2Vucyk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc29sdmVBbGwoaW5zdGFuY2U6IHN0cmluZyk6IE1vZGVsUGF0aCB7XG4gICAgICAgIGNvbnN0IHRva2VucyA9IHRoaXMudG9rZW5zLm1hcCh0b2tlbiA9PiB7XG4gICAgICAgICAgICBpZiAoUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKHRva2VuKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwodG9rZW5zLCB0aGlzLmFic29sdXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNDb250YWluSXRlcmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMuc29tZSh4ID0+IHggPT09IFBhdGhUb2tlbnMuZWFjaCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ29udGFpbkN1cnJlbnRJdGVyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2Vucy5zb21lKHggPT4geCA9PT0gUGF0aFRva2Vucy5jdXJyZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TGFzdExpc3RQYXRoKCk6IFBhdGhUb2tlbltdIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29udGFpbkl0ZXJhdGlvbigpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3QgY29udGFpbiBpdGVyYXRpb25cIik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDQn9GA0L7QstC10YDQutCwINCy0YvRiNC1INCz0LDRgNCw0L3RgtC40YDRg9C10YIsINGH0YLQviDQsdGD0LTQtdGCIFBhdGhUb2tlbnMuZWFjaFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGNvbnN0IGxhc3RJdGVyYXRpb25JbmRleCA9IHRoaXMudG9rZW5zLmxhc3RJbmRleE9mKFBhdGhUb2tlbnMuZWFjaCk7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2Vucy5zbGljZSgwLCBsYXN0SXRlcmF0aW9uSW5kZXgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VuZHNXaXRoSXRlcmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBsYXN0SXRlbSA9IEl0ZXJVdGlscy5sYXN0KHRoaXMudG9rZW5zKTtcbiAgICAgICAgcmV0dXJuIGxhc3RJdGVtID09IFBhdGhUb2tlbnMuZWFjaDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBYnNvbHV0ZSgpOiB0aGlzIGlzIElNb2RlbFBhdGg8VFJlc29sdmVkLCB0cnVlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFic29sdXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy50b2tlbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHRoaXMuYWJzb2x1dGUgPyBcIi9cIiA6IFwiXCIpICsgdGhpcy50b2tlbnMubWFwKHggPT4gdGhpcy5wYXRoUGFydFRvU3RyaW5nKHgpKS5qb2luKFwiL1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9MZWdhY3lQYXRoKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmxlZ2FjeVBhdGggPz8gKHRoaXMubGVnYWN5UGF0aCA9IHRoaXMudG9rZW5zLm1hcCh4ID0+IHRoaXMucGF0aFBhcnRUb1N0cmluZyh4KSkuam9pbihcIi9cIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VxdWFscyhcbiAgICAgICAgbW9kZWxQYXRoOiBNb2RlbFBhdGgsXG4gICAgICAgIGVhY2hDdXJyZW50Q29sbGlzaW9uOiBFYWNoQ3VycmVudENvbGxpc2lvbiA9IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZVNhbWVcbiAgICApOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGVhY2hDdXJyZW50Q29sbGlzaW9uID09PSBFYWNoQ3VycmVudENvbGxpc2lvbi5BcmVTYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b0xlZ2FjeVBhdGgoKSA9PT0gbW9kZWxQYXRoLnRvTGVnYWN5UGF0aCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLmlzQWJzb2x1dGUoKSA9PT0gbW9kZWxQYXRoLmlzQWJzb2x1dGUoKSAmJlxuICAgICAgICAgICAgICAgIEl0ZXJhdG9yLmZyb20oSXRlclV0aWxzLnppcCh0aGlzLmdldFBhdGhQYXJ0cygpLCBtb2RlbFBhdGguZ2V0UGF0aFBhcnRzKCkpKS5ldmVyeShcbiAgICAgICAgICAgICAgICAgICAgKFt0MSwgdDJdKSA9PiB0MSA9PT0gdDJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLRgdC10LPQtNCwINGG0LXQu9C+0LUg0L/QvtC70L7QttC40YLQtdC70YzQvdC+0LUg0LHQtdC30LfQvdCw0LrQvtCy0L7QtSAzMi3QsdC40YLQvdC+0LUg0YfQuNGB0LvQvlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRIYXNoKGVhY2hDdXJyZW50Q29sbGlzaW9uOiBFYWNoQ3VycmVudENvbGxpc2lvbiA9IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZVNhbWUpOiBudW1iZXIge1xuICAgICAgICBsZXQgaGFzaCA9IDUzODE7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgcmV2ZXJzZUFycmF5KHRoaXMudG9rZW5zKSkge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRTdHI6IHN0cmluZztcbiAgICAgICAgICAgIGlmIChQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFN0ciA9IHRva2VuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZWFjaEN1cnJlbnRDb2xsaXNpb24gPT09IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZURpZmZlcmVudCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyID0gdG9rZW4gPT09IFBhdGhUb2tlbnMuZWFjaCA/IFwiKlwiIDogXCIhXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0ciA9IFwiKlwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBzdHJpbmdJbmRleCA9IGN1cnJlbnRTdHIubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKHN0cmluZ0luZGV4KSB7XG4gICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgICAgICBoYXNoID0gKGhhc2ggKiAzMykgXiBjdXJyZW50U3RyLmNoYXJDb2RlQXQoLS1zdHJpbmdJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKlxuICAgICAgICAgICAgdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIEphdmFTY3JpcHQgZG9lcyBiaXR3aXNlIG9wZXJhdGlvbnMgKGxpa2UgWE9SLCBhYm92ZSkgb24gMzItYml0IHNpZ25lZFxuICAgICAgICAgICAgaW50ZWdlcnMuIFNpbmNlIHdlIHdhbnQgdGhlIHJlc3VsdHMgdG8gYmUgYWx3YXlzIHBvc2l0aXZlLCBjb252ZXJ0IHRoZVxuICAgICAgICAgICAgc2lnbmVkIGludCB0byBhbiB1bnNpZ25lZCBieSBkb2luZyBhbiB1bnNpZ25lZCBiaXRzaGlmdC5cbiAgICAgICovXG4gICAgICAgIHJldHVybiBoYXNoID4+PiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0luY2x1ZGVzKG1vZGVsUGF0aDogTW9kZWxQYXRoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRhcmdldFRva2VucyA9IG1vZGVsUGF0aC5nZXRQYXRoUGFydHNBc0FycmF5KCk7XG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5sZW5ndGggIT09IHRhcmdldFRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBsZWZ0UGFydCA9IHRoaXMudG9rZW5zW2ldO1xuICAgICAgICAgICAgY29uc3QgcmlnaHRQYXJ0ID0gdGFyZ2V0VG9rZW5zW2ldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBsZWZ0UGFydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmlnaHRQYXJ0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0UGFydCAhPT0gcmlnaHRQYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdFBhcnQgPT09IFBhdGhUb2tlbnMuY3VycmVudCB8fCBsZWZ0UGFydCA9PT0gUGF0aFRva2Vucy5lYWNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByaWdodFBhcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Zpbml0ZShOdW1iZXIocmlnaHRQYXJ0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRQYXJ0ICE9PSBQYXRoVG9rZW5zLmN1cnJlbnQgJiYgcmlnaHRQYXJ0ICE9PSBQYXRoVG9rZW5zLmVhY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEl0ZXJhdGlvblJhbmsoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGNvdW50KEl0ZXJhdG9yLmZyb20odGhpcy50b2tlbnMpLmZpbHRlcih4ID0+IHggPT09IFBhdGhUb2tlbnMuZWFjaCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXRjaEZvcihtb2RlbFBhdGg6IE1vZGVsUGF0aCk6IFBhdGhNYXRjaGluZyB7XG4gICAgICAgIGlmICghdGhpcy5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG1hdGNoIG5vbiBhYnNvbHV0ZSBwYXRoICcke3RoaXMudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb2RlbFBhdGguaXNBYnNvbHV0ZSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBtYXRjaCBub24gYWJzb2x1dGUgcGF0aCAnJHttb2RlbFBhdGgudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhdGhNYXRjaGVyLm1hdGNoKHRoaXMudG9rZW5zLCBtb2RlbFBhdGguZ2V0UGF0aFBhcnRzQXNBcnJheSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgKnNwbGl0QnlNdWx0aXBsaWNpdHkoKTogSXRlcmFibGU8UmVzb2x2ZWRNb2RlbFBhdGggfCB0eXBlb2YgRWFjaFN5bWJvbCB8IHR5cGVvZiBDdXJyZW50U3ltYm9sPiB7XG4gICAgICAgIGxldCBsYXN0U2ltcGxlUGFydHMgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcih0aGlzLmlzQWJzb2x1dGUoKSk7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy50b2tlbnMpIHtcbiAgICAgICAgICAgIGlmIChQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgbGFzdFNpbXBsZVBhcnRzLmFwcGVuZCh0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghbGFzdFNpbXBsZVBhcnRzLmVtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGxhc3RTaW1wbGVQYXJ0cy50b1Jlc29sdmVkUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICBsYXN0U2ltcGxlUGFydHMgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcihmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHlpZWxkIHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghbGFzdFNpbXBsZVBhcnRzLmVtcHR5KSB7XG4gICAgICAgICAgICB5aWVsZCBsYXN0U2ltcGxlUGFydHMudG9SZXNvbHZlZFBhdGgoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBub3JtYWxpemUoKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ge1xuICAgICAgICBjb25zdCByZXN1bHRUb2tlbnM6IFBhdGhUb2tlbnNTcGVjPFRSZXNvbHZlZD4gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwYXRoUGFydCBvZiB0aGlzLnRva2Vucykge1xuICAgICAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSBcIi4uXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdFRva2Vucy5wb3AoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGF0aCBpcyBpbnZhbGlkICcke3RoaXMudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRUb2tlbnMucHVzaChcIi4uXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGF0aFBhcnQgPT09IFwiLlwiKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRUb2tlbnMucHVzaChwYXRoUGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPFRSZXNvbHZlZCwgVEFic29sdXRlPihyZXN1bHRUb2tlbnMsIHRoaXMuYWJzb2x1dGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5INCh0L/QtdGG0LjRhNC40LrQsNGC0L7RgNGLINC80L3QvtC20LXRgdGC0LLQtdC90L3QvtGB0YLQuCBFYWNoINC30LDQvNC10L3Rj9C10YIg0L3QsCBDdXJyZW50XG4gICAgICovXG4gICAgcHVibGljIHRvQ3VycmVudEl0ZXJhdGlvbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPiB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVzb2x2ZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBOT1RFINCi0YPRgiDQvdC1INC/0L7Qu9GD0YfQsNC10YLRgdGPINC90LDQu9C+0LbQuNGC0Ywg0LTQuNGB0LrRgNC40LzQuNC90LDRgtC+0YBcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIGNvbnN0IHBhdGhQYXJ0czogUGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkPiA9IHRoaXMudG9rZW5zLm1hcCh4ID0+XG4gICAgICAgICAgICAgICAgeCA9PT0gUGF0aFRva2Vucy5lYWNoID8gUGF0aFRva2Vucy5jdXJyZW50IDogeFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ocGF0aFBhcnRzLCB0aGlzLmFic29sdXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB0b0VhY2hJdGVyYXRpb24oKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ge1xuICAgICAgICBpZiAodGhpcy5pc1Jlc29sdmVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTk9URSDQotGD0YIg0L3QtSDQv9C+0LvRg9GH0LDQtdGC0YHRjyDQvdCw0LvQvtC20LjRgtGMINC00LjRgdC60YDQuNC80LjQvdCw0YLQvtGAXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBjb25zdCBwYXRoUGFydHM6IFBhdGhUb2tlbnNTcGVjPFRSZXNvbHZlZD4gPSB0aGlzLnRva2Vucy5tYXAoeCA9PlxuICAgICAgICAgICAgICAgIHggPT09IFBhdGhUb2tlbnMuY3VycmVudCA/IFBhdGhUb2tlbnMuZWFjaCA6IHhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8VFJlc29sdmVkLCBUQWJzb2x1dGU+KHBhdGhQYXJ0cywgdGhpcy5hYnNvbHV0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdG9BYnNvbHV0ZSgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT4ge1xuICAgICAgICBpZiAoIXRoaXMuYWJzb2x1dGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGF0aCAnJHt0aGlzLnRvTGVnYWN5UGF0aCgpfSBpcyBub3QgYWJzb2x1dGUnYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPFRSZXNvbHZlZCwgdHJ1ZT4odGhpcy50b2tlbnMsIHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyAqZ2V0QWxsUGFyZW50UGF0aHMoKTogSXRlcmFibGU8TW9kZWxQYXRoPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNb2RlbFBhdGhCdWlsZGVyKHRoaXMuaXNBYnNvbHV0ZSgpKTtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiBJdGVyVXRpbHMuc2tpcExhc3QodGhpcy5nZXRQYXRoUGFydHMoKSwgMSkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodG9rZW4pO1xuICAgICAgICAgICAgeWllbGQgcmVzdWx0LnRvUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRyaW1MYXN0U3RhcklmTGFzdFRva2VuKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+IHtcbiAgICAgICAgY29uc3QgbGFzdEl0ZW0gPSBJdGVyVXRpbHMubGFzdCh0aGlzLnRva2Vucyk7XG4gICAgICAgIGlmIChsYXN0SXRlbSAhPSB1bmRlZmluZWQgJiYgUGF0aFRva2Vucy5pc011bHRpVG9rZW4obGFzdEl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwodGhpcy50b2tlbnMuc2xpY2UoMCwgLTEpLCB0aGlzLmFic29sdXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFyZW50UGF0aCgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNb2RlbFBhdGhCdWlsZGVyKHRoaXMuYWJzb2x1dGUpO1xuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIEl0ZXJVdGlscy5za2lwTGFzdCh0aGlzLmdldFBhdGhQYXJ0cygpLCAxKSkge1xuICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0b2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgLy8g0KLRg9GCINC/0L7Qu9GD0YfQsNC10YLRgdGPINGC0LDQuiwg0YfRgtC+INC/0L4g0LTRgNGD0LPQvtC80YMg0L3QuNC60LDQulxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHJldHVybiByZXN1bHQudG9QYXRoKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGx5SW5zdGFuY2VzRGlydHkoaW5zdGFuY2VzOiBTaW1wbGVQYXRoVG9rZW5bXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNSZXNvbHZlZCgpIHx8IGluc3RhbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpbnN0YW5jZUNvdW50ZXIgPSAwO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcih0cnVlKTtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0aGlzLmdldFBhdGhQYXJ0cygpKSB7XG4gICAgICAgICAgICBpZiAoUGF0aFRva2Vucy5pc011bHRpVG9rZW4odG9rZW4pICYmIGluc3RhbmNlQ291bnRlciA8IGluc3RhbmNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGluc3RhbmNlc1tpbnN0YW5jZUNvdW50ZXJdID8/IHJlamVjdCgpKTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZUNvdW50ZXIrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8g0KLRg9GCINC/0L7Qu9GD0YfQsNC10YLRgdGPINGC0LDQuiwg0YfRgtC+INC/0L4g0LTRgNGD0LPQvtC80YMg0L3QuNC60LDQulxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHJldHVybiByZXN1bHQudG9QYXRoKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXRoUGFydFRvU3RyaW5nKHBhdGhQYXJ0OiBQYXRoVG9rZW4pOiBzdHJpbmcge1xuICAgICAgICBpZiAodHlwZW9mIHBhdGhQYXJ0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aFBhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSBQYXRoVG9rZW5zLmVhY2gpIHtcbiAgICAgICAgICAgIHJldHVybiBcIipcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFBhcnQgPT09IFBhdGhUb2tlbnMuY3VycmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiKlwiO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBwYXRoIHBhcnQgc3BlY2lmaWVkOiAke2Vuc3VyZUFuZEdldFN0cmluZyhwYXRoUGFydCl9YCk7XG4gICAgfVxufVxuIl19
|
|
609
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9Nb2RlbFBhdGgvTW9kZWxQYXRoLnRzIl0sIm5hbWVzIjpbIkVhY2hTeW1ib2wiLCJTeW1ib2wiLCJmb3IiLCJDdXJyZW50U3ltYm9sIiwiUGF0aFRva2VucyIsImlzTXVsdGlUb2tlbiIsInBhcnQiLCJlYWNoIiwiY3VycmVudCIsImlzU2ltcGxlVG9rZW4iLCJpc0luc3RhbmNlVG9rZW4iLCJ0ZXN0IiwiaXNNb2RlbFBhdGgiLCJwYXRoIiwiTW9kZWxQYXRoSW1wbCIsImNvbnZlcnRUb0xlZ2FjeVBhdGgiLCJ0b0xlZ2FjeVBhdGgiLCJjb252ZXJ0VG9BYnNvbHV0ZU1vZGVsUGF0aCIsImNyZWF0ZUFic29sdXRlRnJvbU1hc2siLCJlbXB0eU1vZGVsUGF0aCIsImVtcHR5QWJzb2x1dGVNb2RlbFBhdGgiLCJjcmVhdGVNb2RlbFBhdGgiLCJhYnNvbHV0ZSIsInBhcnRQYXJ0U3RyaW5ncyIsInNwbGl0IiwiZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eSIsInN0YXJ0c1dpdGgiLCJzbGljZSIsImNyZWF0ZUZyb21NYXNrIiwibXVsdGlwbGljaXR5U3ltYm9sIiwibWFwIiwieCIsInBhcnRzIiwic29tZSIsIkVycm9yIiwiY3JlYXRlQWJzb2x1dGUiLCJjcmVhdGVSZWxhdGl2ZVJlc29sdmVkTW9kZWxQYXRoIiwiY3JlYXRlQWJzb2x1dGVGcm9tVG9rZW5zIiwidG9rZW5zIiwiY3JlYXRlQWJzb2x1dGVSZXNvbHZlZEZyb21Ub2tlbnMiLCJjcmVhdGVSZWxhdGl2ZUZyb21Ub2tlbnMiLCJqb2luTW9kZWxQYXRocyIsInJlc3VsdFBhcnRzIiwiam9pbkl0ZW0iLCJwdXNoIiwiaXNBYnNvbHV0ZSIsImdldFBhdGhQYXJ0c0FzQXJyYXkiLCJBcnJheSIsImlzQXJyYXkiLCJBYnNvbHV0ZU1vZGVsRmllbGRQYXRoIiwiY29uc3RydWN0b3IiLCJmaWVsZE5hbWUiLCJmaWVsZCIsImdldEhhc2giLCJpc0VxdWFscyIsIm1vZGVsUGF0aCIsImVhY2hDdXJyZW50Q29sbGlzaW9uIiwiRWFjaEN1cnJlbnRDb2xsaXNpb24iLCJBcmVTYW1lIiwiY3JlYXRlRnJvbVN0cmluZyIsInBhdGhXaXRoRmllbGROYW1lIiwiZW5kc1dpdGgiLCJyZXBsYWNlIiwiaXNBbGxUb2tlbnNSZXNvbHZlZCIsImV2ZXJ5IiwicGF0aFBhcnRzIiwibGVnYWN5UGF0aCIsImZpbHRlciIsInJlc29sdmVkIiwiZ2V0UGF0aFBhcnRzIiwiZ2V0U2ltcGxlVG9rZW5zU3RyaWN0IiwidG9rZW4iLCJnZXRTaW1wbGVUb2tlbnNBc0FycmF5U3RyaWN0Iiwiam9pbldpdGgiLCJpc1Jlc29sdmVkIiwicmVzb2x2ZUFsbCIsImluc3RhbmNlIiwiaXNDb250YWluSXRlcmF0aW9uIiwiaXNDb250YWluQ3VycmVudEl0ZXJhdGlvbiIsImdldExhc3RMaXN0UGF0aCIsImxhc3RJdGVyYXRpb25JbmRleCIsImxhc3RJbmRleE9mIiwiaXNFbmRzV2l0aEl0ZXJhdGlvbiIsImxhc3RJdGVtIiwiSXRlclV0aWxzIiwibGFzdCIsInRvU3RyaW5nIiwibGVuZ3RoIiwicGF0aFBhcnRUb1N0cmluZyIsImpvaW4iLCJJdGVyYXRvciIsImZyb20iLCJ6aXAiLCJ0MSIsInQyIiwiaGFzaCIsImN1cnJlbnRTdHIiLCJBcmVEaWZmZXJlbnQiLCJzdHJpbmdJbmRleCIsImNoYXJDb2RlQXQiLCJpc0luY2x1ZGVzIiwidGFyZ2V0VG9rZW5zIiwiaSIsImxlZnRQYXJ0IiwicmlnaHRQYXJ0IiwiaXNGaW5pdGUiLCJOdW1iZXIiLCJnZXRJdGVyYXRpb25SYW5rIiwiaXNFbXB0eSIsIm1hdGNoRm9yIiwiUGF0aE1hdGNoZXIiLCJtYXRjaCIsInNwbGl0QnlNdWx0aXBsaWNpdHkiLCJsYXN0U2ltcGxlUGFydHMiLCJNb2RlbFBhdGhCdWlsZGVyIiwiYXBwZW5kIiwiZW1wdHkiLCJ0b1Jlc29sdmVkUGF0aCIsIm5vcm1hbGl6ZSIsInJlc3VsdFRva2VucyIsInBhdGhQYXJ0IiwicG9wIiwidG9DdXJyZW50SXRlcmF0aW9uIiwidG9FYWNoSXRlcmF0aW9uIiwidG9BYnNvbHV0ZSIsImdldEFsbFBhcmVudFBhdGhzIiwicmVzdWx0Iiwic2tpcExhc3QiLCJ0b1BhdGgiLCJ0cmltTGFzdFN0YXJJZkxhc3RUb2tlbiIsInVuZGVmaW5lZCIsImdldFBhcmVudFBhdGgiLCJhcHBseUluc3RhbmNlc0RpcnR5IiwiaW5zdGFuY2VzIiwiaW5zdGFuY2VDb3VudGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSxVQUFVLEdBQUdDLE1BQU0sQ0FBQ0MsR0FBUCxDQUFXLFVBQVgsQ0FBbkI7QUFDQSxNQUFNQyxhQUFhLEdBQUdGLE1BQU0sQ0FBQ0MsR0FBUCxDQUFXLGFBQVgsQ0FBdEI7O0FBRU8sTUFBTUUsVUFBTixDQUFpQjtBQUlNLFNBQVpDLFlBQVksQ0FBQ0MsSUFBRCxFQUFnRjtBQUN0RyxXQUFPQSxJQUFJLEtBQUtGLFVBQVUsQ0FBQ0csSUFBcEIsSUFBNEJELElBQUksS0FBS0YsVUFBVSxDQUFDSSxPQUF2RDtBQUNIOztBQUUwQixTQUFiQyxhQUFhLENBQUNILElBQUQsRUFBOEM7QUFDckUsV0FBTyxPQUFPQSxJQUFQLEtBQWdCLFFBQXZCO0FBQ0g7O0FBRTRCLFNBQWZJLGVBQWUsQ0FBQ0osSUFBRCxFQUE4QztBQUN2RSxXQUFPLE9BQU9BLElBQVAsS0FBZ0IsUUFBaEIsSUFBNEIsU0FBU0ssSUFBVCxDQUFjTCxJQUFkLENBQW5DO0FBQ0g7O0FBZG1COzs7QUFBWEYsVSxDQUNLRyxJLEdBQTBCUCxVO0FBRC9CSSxVLENBRUtJLE8sR0FBZ0NMLGE7O0FBbUIzQyxTQUFTUyxXQUFULENBQXFCQyxJQUFyQixFQUFpRjtBQUNwRixTQUFPLE9BQU9BLElBQVAsS0FBZ0IsUUFBaEIsSUFBNEJBLElBQUksWUFBWUMsYUFBbkQ7QUFDSDs7QUFFTSxTQUFTQyxtQkFBVCxDQUE2QkYs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QVMsQ0FBQzlDLE1BQVYsS0FBcUIsQ0FBOUMsRUFBaUQ7QUFDN0MsYUFBTyxJQUFQO0FBQ0g7O0FBQ0QsUUFBSStDLGVBQWUsR0FBRyxDQUF0QjtBQUNBLFVBQU1SLE1BQU0sR0FBRyxJQUFJWixrQ0FBSixDQUFxQixJQUFyQixDQUFmOztBQUNBLFNBQUssTUFBTTNDLEtBQVgsSUFBb0IsS0FBS0YsWUFBTCxFQUFwQixFQUF5QztBQUNyQyxVQUFJakUsVUFBVSxDQUFDQyxZQUFYLENBQXdCa0UsS0FBeEIsS0FBa0MrRCxlQUFlLEdBQUdELFNBQVMsQ0FBQzlDLE1BQWxFLEVBQTBFO0FBQUE7O0FBQ3RFdUMsUUFBQUEsTUFBTSxDQUFDWCxNQUFQLDBCQUFja0IsU0FBUyxDQUFDQyxlQUFELENBQXZCLHlFQUE0QywwQkFBNUM7QUFDQUEsUUFBQUEsZUFBZTtBQUNsQixPQUhELE1BR087QUFDSFIsUUFBQUEsTUFBTSxDQUFDWCxNQUFQLENBQWM1QyxLQUFkO0FBQ0g7QUFDSixLQWJzRixDQWN2RjtBQUNBOzs7QUFDQSxXQUFPdUQsTUFBTSxDQUFDRSxNQUFQLEVBQVA7QUFDSDs7QUFFT3hDLEVBQUFBLGdCQUFnQixDQUFDZ0MsUUFBRCxFQUE4QjtBQUNsRCxRQUFJLE9BQU9BLFFBQVAsS0FBb0IsUUFBeEIsRUFBa0M7QUFDOUIsYUFBT0EsUUFBUDtBQUNIOztBQUNELFFBQUlBLFFBQVEsS0FBS3BILFVBQVUsQ0FBQ0csSUFBNUIsRUFBa0M7QUFDOUIsYUFBTyxHQUFQO0FBQ0g7O0FBQ0QsUUFBSWlILFFBQVEsS0FBS3BILFVBQVUsQ0FBQ0ksT0FBNUIsRUFBcUM7QUFDakMsYUFBTyxHQUFQO0FBQ0g7O0FBQ0QsVUFBTSxJQUFJMEIsS0FBSixDQUFXLGdDQUErQixxQ0FBbUJzRixRQUFuQixDQUE2QixFQUF2RSxDQUFOO0FBQ0g7O0FBblZMIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmluZGluZ1BhdGgsIFZpZXdNb2RlbEZpZWxkTmFtZSB9IGZyb20gXCIuLi8uLi9FbmdpbmUvc3JjL0VuZ2luZS9Db3JlL0NvcmVUeXBlc1wiO1xuaW1wb3J0IHsgY291bnQsIEl0ZXJVdGlscywgcmV2ZXJzZUFycmF5IH0gZnJvbSBcIi4uL0l0ZXJhYmxlVXRpbHNcIjtcbmltcG9ydCB7IGVuc3VyZUFuZEdldFN0cmluZywgcmVqZWN0IH0gZnJvbSBcIi4uL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgeyBnZXRTaW1wbGVIYXNoQnlTdHJpbmcgfSBmcm9tIFwiLi4vaGFzaFV0aWxzXCI7XG5cbmltcG9ydCB7IEVhY2hDdXJyZW50Q29sbGlzaW9uIH0gZnJvbSBcIi4vRWFjaEN1cnJlbnRDb2xsaXNpb25cIjtcbmltcG9ydCB7IE1vZGVsUGF0aEJ1aWxkZXIgfSBmcm9tIFwiLi9Nb2RlbFBhdGhCdWlsZGVyXCI7XG5pbXBvcnQgeyBQYXRoTWF0Y2hlciwgUGF0aE1hdGNoaW5nIH0gZnJvbSBcIi4vUGF0aE1hdGNoZXJcIjtcbmltcG9ydCB7IElFcXVhdGFibGUgfSBmcm9tIFwiLi9JRXF1YXRhYmxlXCI7XG5cbmNvbnN0IEVhY2hTeW1ib2wgPSBTeW1ib2wuZm9yKFwiX19FQUNIX19cIik7XG5jb25zdCBDdXJyZW50U3ltYm9sID0gU3ltYm9sLmZvcihcIl9fQ1VSUkVOVF9fXCIpO1xuXG5leHBvcnQgY2xhc3MgUGF0aFRva2VucyB7XG4gICAgcHVibGljIHN0YXRpYyBlYWNoOiB0eXBlb2YgRWFjaFN5bWJvbCA9IEVhY2hTeW1ib2w7XG4gICAgcHVibGljIHN0YXRpYyBjdXJyZW50OiB0eXBlb2YgQ3VycmVudFN5bWJvbCA9IEN1cnJlbnRTeW1ib2w7XG5cbiAgICBwdWJsaWMgc3RhdGljIGlzTXVsdGlUb2tlbihwYXJ0OiB1bmRlZmluZWQgfCBQYXRoVG9rZW4pOiBwYXJ0IGlzIHR5cGVvZiBFYWNoU3ltYm9sIHwgdHlwZW9mIEN1cnJlbnRTeW1ib2wge1xuICAgICAgICByZXR1cm4gcGFydCA9PT0gUGF0aFRva2Vucy5lYWNoIHx8IHBhcnQgPT09IFBhdGhUb2tlbnMuY3VycmVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGlzU2ltcGxlVG9rZW4ocGFydDogdW5kZWZpbmVkIHwgUGF0aFRva2VuKTogcGFydCBpcyBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHBhcnQgPT09IFwic3RyaW5nXCI7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBpc0luc3RhbmNlVG9rZW4ocGFydDogdW5kZWZpbmVkIHwgUGF0aFRva2VuKTogcGFydCBpcyBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHBhcnQgPT09IFwic3RyaW5nXCIgJiYgL15cXGQrJC9pLnRlc3QocGFydCk7XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBTaW1wbGVQYXRoVG9rZW4gPSBzdHJpbmc7XG5cbmV4cG9ydCB0eXBlIFBhdGhUb2tlbiA9IFNpbXBsZVBhdGhUb2tlbiB8IHR5cGVvZiBFYWNoU3ltYm9sIHwgdHlwZW9mIEN1cnJlbnRTeW1ib2w7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01vZGVsUGF0aChwYXRoOiBCaW5kaW5nUGF0aCB8IE1vZGVsUGF0aCB8IHVua25vd24pOiBwYXRoIGlzIE1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIHR5cGVvZiBwYXRoICE9PSBcInN0cmluZ1wiICYmIHBhdGggaW5zdGFuY2VvZiBNb2RlbFBhdGhJbXBsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRvTGVnYWN5UGF0aChwYXRoOiBCaW5kaW5nUGF0aCB8IE1vZGVsUGF0aCk6IEJpbmRpbmdQYXRoIHtcbiAgICByZXR1cm4gaXNNb2RlbFBhdGgocGF0aCkgPyBwYXRoLnRvTGVnYWN5UGF0aCgpIDogcGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb0Fic29sdXRlTW9kZWxQYXRoPFIgZXh0ZW5kcyBib29sZWFuLCBBIGV4dGVuZHMgYm9vbGVhbj4oXG4gICAgcGF0aDogQmluZGluZ1BhdGggfCBJTW9kZWxQYXRoPFIsIEE+XG4pOiBJTW9kZWxQYXRoPFIsIHRydWU+O1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb0Fic29sdXRlTW9kZWxQYXRoKHBhdGg6IEJpbmRpbmdQYXRoIHwgQWJzb2x1dGVNb2RlbFBhdGgpOiBBYnNvbHV0ZU1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIGlzTW9kZWxQYXRoKHBhdGgpID8gcGF0aCA6IGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aCwgUGF0aFRva2Vucy5lYWNoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5TW9kZWxQYXRoKCk6IFJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGgge1xuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCBmYWxzZT4oW10sIGZhbHNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5QWJzb2x1dGVNb2RlbFBhdGgoKTogQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIHRydWU+KFtdLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vZGVsUGF0aChwYXRoOiBzdHJpbmcsIGFic29sdXRlOiB0cnVlKTogQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2RlbFBhdGgocGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogZmFsc2UpOiBSZWxhdGl2ZVJlc29sdmVkTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vZGVsUGF0aChwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBcImF1dG9cIik6IFJlc29sdmVkTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vZGVsUGF0aChwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBib29sZWFuIHwgXCJhdXRvXCIpOiBSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gICAgZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eShwYXJ0UGFydFN0cmluZ3MpO1xuICAgIGlmIChhYnNvbHV0ZSA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCB0cnVlPihwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIGZhbHNlPihwYXJ0UGFydFN0cmluZ3MsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWJzb2x1dGUgJiYgcGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgdHJ1ZT4ocGFydFBhcnRTdHJpbmdzLnNsaWNlKDEpLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIGJvb2xlYW4+KHBhcnRQYXJ0U3RyaW5ncywgYWJzb2x1dGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJvbU1hc2socGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogdHJ1ZSwgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBBYnNvbHV0ZU1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcm9tTWFzayhwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBmYWxzZSwgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBSZXNvbHZlZE1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcm9tTWFzayhwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBcImF1dG9cIiwgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBNb2RlbFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJvbU1hc2socGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogYm9vbGVhbiB8IFwiYXV0b1wiLCBtdWx0aXBsaWNpdHlTeW1ib2w6IFBhdGhUb2tlbik6IE1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIikubWFwKHggPT4gKHggPT09IFwiKlwiID8gbXVsdGlwbGljaXR5U3ltYm9sIDogeCkpO1xuICAgIGlmIChhYnNvbHV0ZSA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHBhcnRQYXJ0U3RyaW5ncywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChhYnNvbHV0ZSAmJiBwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwocGFydFBhcnRTdHJpbmdzLCBhYnNvbHV0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGg6IHN0cmluZywgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBBYnNvbHV0ZU1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIikubWFwKHggPT4gKHggPT09IFwiKlwiID8gbXVsdGlwbGljaXR5U3ltYm9sIDogeCkpO1xuICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwocGFydFBhcnRTdHJpbmdzLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eShwYXJ0czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAocGFydHMuc29tZSh4ID0+IHggPT09IFwiKlwiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3Qgbm90IGNvbnRhaW4gKiBzeW1ib2xcIik7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWJzb2x1dGUocGF0aDogc3RyaW5nKTogQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gICAgZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eShwYXJ0UGFydFN0cmluZ3MpO1xuICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCB0cnVlPihwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgdHJ1ZT4ocGFydFBhcnRTdHJpbmdzLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGgocGF0aDogc3RyaW5nKTogUmVsYXRpdmVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gICAgZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eShwYXJ0UGFydFN0cmluZ3MpO1xuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCBmYWxzZT4ocGFydFBhcnRTdHJpbmdzLCBmYWxzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBYnNvbHV0ZUZyb21Ub2tlbnModG9rZW5zOiBQYXRoVG9rZW5bXSk6IEFic29sdXRlTW9kZWxQYXRoIHtcbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8ZmFsc2UsIHRydWU+KHRva2VucywgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBYnNvbHV0ZVJlc29sdmVkRnJvbVRva2Vucyh0b2tlbnM6IHN0cmluZ1tdKTogQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eSh0b2tlbnMpO1xuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCB0cnVlPih0b2tlbnMsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVsYXRpdmVGcm9tVG9rZW5zKHRva2VuczogcmVhZG9ubHkgc3RyaW5nW10pOiBSZWxhdGl2ZVJlc29sdmVkTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbGF0aXZlRnJvbVRva2Vucyh0b2tlbnM6IHJlYWRvbmx5IFBhdGhUb2tlbltdKTogUmVsYXRpdmVNb2RlbFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVsYXRpdmVGcm9tVG9rZW5zKHRva2VuczogcmVhZG9ubHkgUGF0aFRva2VuW10pOiBSZWxhdGl2ZU1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPGZhbHNlLCBmYWxzZT4odG9rZW5zLCBmYWxzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqb2luTW9kZWxQYXRocyguLi5wYXJ0czogQXJyYXk8TW9kZWxQYXRoIHwgUGF0aFRva2VuIHwgUGF0aFRva2VuW10+KTogTW9kZWxQYXRoIHtcbiAgICBsZXQgYWJzb2x1dGUgPSBmYWxzZTtcbiAgICBsZXQgcmVzdWx0UGFydHM6IFBhdGhUb2tlbltdID0gW107XG4gICAgZm9yIChjb25zdCBqb2luSXRlbSBvZiBwYXJ0cykge1xuICAgICAgICBpZiAodHlwZW9mIGpvaW5JdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXN1bHRQYXJ0cy5wdXNoKGpvaW5JdGVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc01vZGVsUGF0aChqb2luSXRlbSkpIHtcbiAgICAgICAgICAgIGlmIChqb2luSXRlbS5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgICAgICBhYnNvbHV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVzdWx0UGFydHMgPSBbLi4uam9pbkl0ZW0uZ2V0UGF0aFBhcnRzQXNBcnJheSgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0UGFydHMucHVzaCguLi5qb2luSXRlbS5nZXRQYXRoUGFydHNBc0FycmF5KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoam9pbkl0ZW0pKSB7XG4gICAgICAgICAgICByZXN1bHRQYXJ0cy5wdXNoKC4uLmpvaW5JdGVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChQYXRoVG9rZW5zLmlzTXVsdGlUb2tlbihqb2luSXRlbSkpIHtcbiAgICAgICAgICAgIHJlc3VsdFBhcnRzLnB1c2goam9pbkl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHJlc3VsdFBhcnRzLCBhYnNvbHV0ZSk7XG59XG5cbmV4cG9ydCBjbGFzcyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoIGltcGxlbWVudHMgSUVxdWF0YWJsZTxBYnNvbHV0ZU1vZGVsRmllbGRQYXRoPiB7XG4gICAgcHVibGljIHJlYWRvbmx5IHBhdGg6IEFic29sdXRlTW9kZWxQYXRoO1xuICAgIHB1YmxpYyByZWFkb25seSBmaWVsZDogVmlld01vZGVsRmllbGROYW1lIHwgXCIkZXJyb3JDb3VudFwiIHwgXCIkd2FybmluZ0NvdW50XCI7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocGF0aDogQWJzb2x1dGVNb2RlbFBhdGgsIGZpZWxkTmFtZTogVmlld01vZGVsRmllbGROYW1lIHwgXCIkZXJyb3JDb3VudFwiIHwgXCIkd2FybmluZ0NvdW50XCIpIHtcbiAgICAgICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5maWVsZCA9IGZpZWxkTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SGFzaCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoLmdldEhhc2goKSArIGdldFNpbXBsZUhhc2hCeVN0cmluZyh0aGlzLmZpZWxkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNFcXVhbHMoXG4gICAgICAgIG1vZGVsUGF0aDogQWJzb2x1dGVNb2RlbEZpZWxkUGF0aCxcbiAgICAgICAgZWFjaEN1cnJlbnRDb2xsaXNpb246IEVhY2hDdXJyZW50Q29sbGlzaW9uID0gRWFjaEN1cnJlbnRDb2xsaXNpb24uQXJlU2FtZVxuICAgICk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoLmlzRXF1YWxzKG1vZGVsUGF0aC5wYXRoLCBlYWNoQ3VycmVudENvbGxpc2lvbikgJiYgdGhpcy5maWVsZCA9PT0gbW9kZWxQYXRoLmZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRnJvbVN0cmluZyhwYXRoV2l0aEZpZWxkTmFtZTogc3RyaW5nKTogQWJzb2x1dGVNb2RlbEZpZWxkUGF0aCB7XG4gICAgICAgIGlmIChwYXRoV2l0aEZpZWxkTmFtZS5lbmRzV2l0aChcIi4kZXJyb3JDb3VudFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFic29sdXRlKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuJGVycm9yQ291bnRcIiwgXCJcIikpLFxuICAgICAgICAgICAgICAgIFwiJGVycm9yQ291bnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFdpdGhGaWVsZE5hbWUuZW5kc1dpdGgoXCIuJHdhcm5pbmdDb3VudFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFic29sdXRlKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuJHdhcm5pbmdDb3VudFwiLCBcIlwiKSksXG4gICAgICAgICAgICAgICAgXCIkd2FybmluZ0NvdW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKGNyZWF0ZUFic29sdXRlKHBhdGhXaXRoRmllbGROYW1lKSwgXCJ2YWx1ZVwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZyb21NYXNrKHBhdGhXaXRoRmllbGROYW1lOiBzdHJpbmcsIG11bHRpcGxpY2l0eVN5bWJvbDogUGF0aFRva2VuKTogQWJzb2x1dGVNb2RlbEZpZWxkUGF0aCB7XG4gICAgICAgIGlmIChwYXRoV2l0aEZpZWxkTmFtZS5lbmRzV2l0aChcIi4kZXJyb3JDb3VudFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aFdpdGhGaWVsZE5hbWUucmVwbGFjZShcIi4kZXJyb3JDb3VudFwiLCBcIlwiKSwgbXVsdGlwbGljaXR5U3ltYm9sKSxcbiAgICAgICAgICAgICAgICBcIiRlcnJvckNvdW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGhXaXRoRmllbGROYW1lLmVuZHNXaXRoKFwiLiR3YXJuaW5nQ291bnRcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQWJzb2x1dGVNb2RlbEZpZWxkUGF0aChcbiAgICAgICAgICAgICAgICBjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuJHdhcm5pbmdDb3VudFwiLCBcIlwiKSwgbXVsdGlwbGljaXR5U3ltYm9sKSxcbiAgICAgICAgICAgICAgICBcIiR3YXJuaW5nQ291bnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFdpdGhGaWVsZE5hbWUuZW5kc1dpdGgoXCIuZXJyb3JzQ291bnRcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQWJzb2x1dGVNb2RlbEZpZWxkUGF0aChcbiAgICAgICAgICAgICAgICBjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuZXJyb3JzQ291bnRcIiwgXCJcIiksIG11bHRpcGxpY2l0eVN5bWJvbCksXG4gICAgICAgICAgICAgICAgXCJlcnJvcnNDb3VudFwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoV2l0aEZpZWxkTmFtZS5lbmRzV2l0aChcIi53YXJuaW5nc0NvdW50XCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFic29sdXRlTW9kZWxGaWVsZFBhdGgoXG4gICAgICAgICAgICAgICAgY3JlYXRlQWJzb2x1dGVGcm9tTWFzayhwYXRoV2l0aEZpZWxkTmFtZS5yZXBsYWNlKFwiLndhcm5pbmdzQ291bnRcIiwgXCJcIiksIG11bHRpcGxpY2l0eVN5bWJvbCksXG4gICAgICAgICAgICAgICAgXCJ3YXJuaW5nc0NvdW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aFdpdGhGaWVsZE5hbWUsIG11bHRpcGxpY2l0eVN5bWJvbCksIFwidmFsdWVcIik7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNb2RlbFBhdGg8VFJlc29sdmVkIGV4dGVuZHMgYm9vbGVhbiwgVEFic29sdXRlIGV4dGVuZHMgYm9vbGVhbj5cbiAgICBleHRlbmRzIElFcXVhdGFibGU8SU1vZGVsUGF0aDxib29sZWFuLCBib29sZWFuPj4ge1xuICAgIHJlYWRvbmx5IHJlc29sdmVkOiBUUmVzb2x2ZWQ7XG4gICAgcmVhZG9ubHkgYWJzb2x1dGU6IFRBYnNvbHV0ZTtcblxuICAgIGlzRXF1YWxzKG1vZGVsUGF0aDogTW9kZWxQYXRoLCBlYWNoQ3VycmVudENvbGxpc2lvbj86IEVhY2hDdXJyZW50Q29sbGlzaW9uKTogYm9vbGVhbjtcbiAgICBnZXRIYXNoKGVhY2hDdXJyZW50Q29sbGlzaW9uPzogRWFjaEN1cnJlbnRDb2xsaXNpb24pOiBudW1iZXI7XG5cbiAgICBpc1Jlc29sdmVkKCk6IHRoaXMgaXMgSU1vZGVsUGF0aDx0cnVlLCBUQWJzb2x1dGU+O1xuICAgIGlzQWJzb2x1dGUoKTogdGhpcyBpcyBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT47XG4gICAgdG9BYnNvbHV0ZSgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT47XG5cbiAgICBqb2luV2l0aCguLi5wYXRoOiBzdHJpbmdbXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IFBhdGhUb2tlbltdKTogSU1vZGVsUGF0aDxib29sZWFuLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PFJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGggfCBzdHJpbmc+KTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIHRydWU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PE1vZGVsUGF0aCB8IFBhdGhUb2tlbj4pOiBJTW9kZWxQYXRoPGJvb2xlYW4sIFRBYnNvbHV0ZT47XG5cbiAgICBnZXRQYXRoUGFydHMoKTogSXRlcmFibGU8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcbiAgICBnZXRQYXRoUGFydHNBc0FycmF5KCk6IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcbiAgICBnZXRTaW1wbGVUb2tlbnNTdHJpY3QoKTogSXRlcmFibGU8U2ltcGxlUGF0aFRva2VuPjtcbiAgICBnZXRTaW1wbGVUb2tlbnNBc0FycmF5U3RyaWN0KCk6IHJlYWRvbmx5IFNpbXBsZVBhdGhUb2tlbltdO1xuXG4gICAgcmVzb2x2ZUFsbChpbnN0YW5jZTogc3RyaW5nKTogTW9kZWxQYXRoO1xuICAgIGlzQ29udGFpbkl0ZXJhdGlvbigpOiBib29sZWFuO1xuICAgIGlzQ29udGFpbkN1cnJlbnRJdGVyYXRpb24oKTogYm9vbGVhbjtcbiAgICBnZXRMYXN0TGlzdFBhdGgoKTogUGF0aFRva2VuW107XG4gICAgaXNFbmRzV2l0aEl0ZXJhdGlvbigpOiBib29sZWFuO1xuICAgIGlzSW5jbHVkZXMobW9kZWxQYXRoOiBNb2RlbFBhdGgpOiBib29sZWFuO1xuICAgIGdldEl0ZXJhdGlvblJhbmsoKTogbnVtYmVyO1xuICAgIGlzRW1wdHkoKTogYm9vbGVhbjtcbiAgICBtYXRjaEZvcihtb2RlbFBhdGg6IE1vZGVsUGF0aCk6IFBhdGhNYXRjaGluZztcbiAgICBzcGxpdEJ5TXVsdGlwbGljaXR5KCk6IEl0ZXJhYmxlPFJlc29sdmVkTW9kZWxQYXRoIHwgdHlwZW9mIEVhY2hTeW1ib2wgfCB0eXBlb2YgQ3VycmVudFN5bWJvbD47XG4gICAgbm9ybWFsaXplKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIHRvQ3VycmVudEl0ZXJhdGlvbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICB0b0VhY2hJdGVyYXRpb24oKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT47XG4gICAgZ2V0QWxsUGFyZW50UGF0aHMoKTogSXRlcmFibGU8TW9kZWxQYXRoPjtcbiAgICB0cmltTGFzdFN0YXJJZkxhc3RUb2tlbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICBnZXRQYXJlbnRQYXRoKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGFwcGx5SW5zdGFuY2VzRGlydHkoaW5zdGFuY2VzOiBTaW1wbGVQYXRoVG9rZW5bXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nO1xuICAgIHRvTGVnYWN5UGF0aCgpOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIE1vZGVsUGF0aCA9IElNb2RlbFBhdGg8Ym9vbGVhbiwgYm9vbGVhbj47XG5leHBvcnQgdHlwZSBSZXNvbHZlZE1vZGVsUGF0aCA9IElNb2RlbFBhdGg8dHJ1ZSwgYm9vbGVhbj47XG5leHBvcnQgdHlwZSBBYnNvbHV0ZU1vZGVsUGF0aCA9IElNb2RlbFBhdGg8Ym9vbGVhbiwgdHJ1ZT47XG5leHBvcnQgdHlwZSBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoID0gSU1vZGVsUGF0aDx0cnVlLCB0cnVlPjtcblxuZXhwb3J0IHR5cGUgUmVsYXRpdmVNb2RlbFBhdGggPSBJTW9kZWxQYXRoPGJvb2xlYW4sIGZhbHNlPjtcbmV4cG9ydCB0eXBlIFJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGggPSBJTW9kZWxQYXRoPHRydWUsIGZhbHNlPjtcblxudHlwZSBQYXRoVG9rZW5TcGVjPFRSZXNvbHZlZCBleHRlbmRzIGJvb2xlYW4+ID0gVFJlc29sdmVkIGV4dGVuZHMgdHJ1ZSA/IHN0cmluZyA6IFBhdGhUb2tlbjtcblxudHlwZSBQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPiA9IEFycmF5PFBhdGhUb2tlblNwZWM8VFJlc29sdmVkPj47XG5cbnR5cGUgUmVhZG9ubHlQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPiA9IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcblxuZnVuY3Rpb24gaXNBbGxUb2tlbnNSZXNvbHZlZDxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPih0b2tlbnM6IFJlYWRvbmx5UGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkPik6IFRSZXNvbHZlZCB7XG4gICAgLy8g0K8g0YfRgtC+LdGC0L4g0L3QtdC80L7Qs9GDINGB0L7QvtCx0YDQsNC30LjRgtGMINC60LDQuiDRgtGD0YIg0LLRgdGRINGB0YLRgNC+0LPQviDQvdCw0L/QuNGB0LDRgtGMLi4uXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHJldHVybiB0b2tlbnMuZXZlcnkoUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vZGVsUGF0aEltcGw8VFJlc29sdmVkIGV4dGVuZHMgYm9vbGVhbiwgVEFic29sdXRlIGV4dGVuZHMgYm9vbGVhbj5cbiAgICBpbXBsZW1lbnRzIElFcXVhdGFibGU8TW9kZWxQYXRoPiwgSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT5cbntcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRva2VuczogUmVhZG9ubHlQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQ+O1xuICAgIHB1YmxpYyByZWFkb25seSBhYnNvbHV0ZTogVEFic29sdXRlO1xuICAgIHByaXZhdGUgbGVnYWN5UGF0aDogdW5kZWZpbmVkIHwgc3RyaW5nO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHBhdGhQYXJ0czogUmVhZG9ubHlQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQ+LCBhYnNvbHV0ZTogVEFic29sdXRlKSB7XG4gICAgICAgIHRoaXMudG9rZW5zID0gcGF0aFBhcnRzLmZpbHRlcih4ID0+IHggIT09IFwiXCIpO1xuICAgICAgICB0aGlzLmFic29sdXRlID0gYWJzb2x1dGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXNvbHZlZCgpOiBUUmVzb2x2ZWQge1xuICAgICAgICByZXR1cm4gaXNBbGxUb2tlbnNSZXNvbHZlZCh0aGlzLnRva2Vucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhdGhQYXJ0cygpOiBJdGVyYWJsZTxQYXRoVG9rZW5TcGVjPFRSZXNvbHZlZD4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQYXRoUGFydHNBc0FycmF5KCk6IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgICB9XG5cbiAgICBwdWJsaWMgKmdldFNpbXBsZVRva2Vuc1N0cmljdCgpOiBJdGVyYWJsZTxTaW1wbGVQYXRoVG9rZW4+IHtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0aGlzLnRva2Vucykge1xuICAgICAgICAgICAgaWYgKCFQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IG5vdCBjb250YWluIHNwZWMgdG9rZW5zXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeWllbGQgdG9rZW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2ltcGxlVG9rZW5zQXNBcnJheVN0cmljdCgpOiByZWFkb25seSBTaW1wbGVQYXRoVG9rZW5bXSB7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy50b2tlbnMpIHtcbiAgICAgICAgICAgIGlmICghUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKHRva2VuKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhdGggbXVzdCBub3QgY29udGFpbiBzcGVjIHRva2Vuc1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyDQn9GA0L7QstC10YDQutCwINCy0YvRiNC1INCz0LDRgNCw0LXQvdGC0LjRgNGD0LXRgiDRh9GC0L4g0LHRg9C00YPRgiDRgtC+0LvRjNC60L4gU2ltcGxlUGF0aFRva2VuLlxuICAgICAgICAvLyDQktGB0LUgbWFwINC4IGZpbHRlciDRg9Cx0YDQsNC90Ysg0LTQu9GPINC/0YDQvtC40LfQstC+0LTQuNGC0LXQu9GM0L3QvtGB0YLQuFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgICB9XG5cbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogc3RyaW5nW10pOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogUGF0aFRva2VuW10pOiBJTW9kZWxQYXRoPGJvb2xlYW4sIFRBYnNvbHV0ZT47XG4gICAgcHVibGljIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PFJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIHB1YmxpYyBqb2luV2l0aCguLi5wYXRoOiBBcnJheTxBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCB0cnVlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogQXJyYXk8TW9kZWxQYXRoIHwgUGF0aFRva2VuPik6IElNb2RlbFBhdGg8Ym9vbGVhbiwgVEFic29sdXRlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogQXJyYXk8TW9kZWxQYXRoIHwgUGF0aFRva2VuPik6IElNb2RlbFBhdGg8Ym9vbGVhbiwgYm9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gam9pbk1vZGVsUGF0aHModGhpcywgLi4ucGF0aCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzUmVzb2x2ZWQoKTogdGhpcyBpcyBJTW9kZWxQYXRoPHRydWUsIFRBYnNvbHV0ZT4ge1xuICAgICAgICByZXR1cm4gaXNBbGxUb2tlbnNSZXNvbHZlZCh0aGlzLnRva2Vucyk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc29sdmVBbGwoaW5zdGFuY2U6IHN0cmluZyk6IE1vZGVsUGF0aCB7XG4gICAgICAgIGNvbnN0IHRva2VucyA9IHRoaXMudG9rZW5zLm1hcCh0b2tlbiA9PiB7XG4gICAgICAgICAgICBpZiAoUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKHRva2VuKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwodG9rZW5zLCB0aGlzLmFic29sdXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNDb250YWluSXRlcmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMuc29tZSh4ID0+IHggPT09IFBhdGhUb2tlbnMuZWFjaCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ29udGFpbkN1cnJlbnRJdGVyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2Vucy5zb21lKHggPT4geCA9PT0gUGF0aFRva2Vucy5jdXJyZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TGFzdExpc3RQYXRoKCk6IFBhdGhUb2tlbltdIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29udGFpbkl0ZXJhdGlvbigpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3QgY29udGFpbiBpdGVyYXRpb25cIik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDQn9GA0L7QstC10YDQutCwINCy0YvRiNC1INCz0LDRgNCw0L3RgtC40YDRg9C10YIsINGH0YLQviDQsdGD0LTQtdGCIFBhdGhUb2tlbnMuZWFjaFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGNvbnN0IGxhc3RJdGVyYXRpb25JbmRleCA9IHRoaXMudG9rZW5zLmxhc3RJbmRleE9mKFBhdGhUb2tlbnMuZWFjaCk7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2Vucy5zbGljZSgwLCBsYXN0SXRlcmF0aW9uSW5kZXgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VuZHNXaXRoSXRlcmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBsYXN0SXRlbSA9IEl0ZXJVdGlscy5sYXN0KHRoaXMudG9rZW5zKTtcbiAgICAgICAgcmV0dXJuIGxhc3RJdGVtID09IFBhdGhUb2tlbnMuZWFjaDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBYnNvbHV0ZSgpOiB0aGlzIGlzIElNb2RlbFBhdGg8VFJlc29sdmVkLCB0cnVlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFic29sdXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy50b2tlbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHRoaXMuYWJzb2x1dGUgPyBcIi9cIiA6IFwiXCIpICsgdGhpcy50b2tlbnMubWFwKHggPT4gdGhpcy5wYXRoUGFydFRvU3RyaW5nKHgpKS5qb2luKFwiL1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9MZWdhY3lQYXRoKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmxlZ2FjeVBhdGggPz8gKHRoaXMubGVnYWN5UGF0aCA9IHRoaXMudG9rZW5zLm1hcCh4ID0+IHRoaXMucGF0aFBhcnRUb1N0cmluZyh4KSkuam9pbihcIi9cIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VxdWFscyhcbiAgICAgICAgbW9kZWxQYXRoOiBNb2RlbFBhdGgsXG4gICAgICAgIGVhY2hDdXJyZW50Q29sbGlzaW9uOiBFYWNoQ3VycmVudENvbGxpc2lvbiA9IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZVNhbWVcbiAgICApOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGVhY2hDdXJyZW50Q29sbGlzaW9uID09PSBFYWNoQ3VycmVudENvbGxpc2lvbi5BcmVTYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b0xlZ2FjeVBhdGgoKSA9PT0gbW9kZWxQYXRoLnRvTGVnYWN5UGF0aCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLmlzQWJzb2x1dGUoKSA9PT0gbW9kZWxQYXRoLmlzQWJzb2x1dGUoKSAmJlxuICAgICAgICAgICAgICAgIEl0ZXJhdG9yLmZyb20oSXRlclV0aWxzLnppcCh0aGlzLmdldFBhdGhQYXJ0cygpLCBtb2RlbFBhdGguZ2V0UGF0aFBhcnRzKCkpKS5ldmVyeShcbiAgICAgICAgICAgICAgICAgICAgKFt0MSwgdDJdKSA9PiB0MSA9PT0gdDJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLRgdC10LPQtNCwINGG0LXQu9C+0LUg0L/QvtC70L7QttC40YLQtdC70YzQvdC+0LUg0LHQtdC30LfQvdCw0LrQvtCy0L7QtSAzMi3QsdC40YLQvdC+0LUg0YfQuNGB0LvQvlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRIYXNoKGVhY2hDdXJyZW50Q29sbGlzaW9uOiBFYWNoQ3VycmVudENvbGxpc2lvbiA9IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZVNhbWUpOiBudW1iZXIge1xuICAgICAgICBsZXQgaGFzaCA9IDUzODE7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgcmV2ZXJzZUFycmF5KHRoaXMudG9rZW5zKSkge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRTdHI6IHN0cmluZztcbiAgICAgICAgICAgIGlmIChQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFN0ciA9IHRva2VuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZWFjaEN1cnJlbnRDb2xsaXNpb24gPT09IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZURpZmZlcmVudCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyID0gdG9rZW4gPT09IFBhdGhUb2tlbnMuZWFjaCA/IFwiKlwiIDogXCIhXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0ciA9IFwiKlwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBzdHJpbmdJbmRleCA9IGN1cnJlbnRTdHIubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKHN0cmluZ0luZGV4KSB7XG4gICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgICAgICBoYXNoID0gKGhhc2ggKiAzMykgXiBjdXJyZW50U3RyLmNoYXJDb2RlQXQoLS1zdHJpbmdJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKlxuICAgICAgICAgICAgdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIEphdmFTY3JpcHQgZG9lcyBiaXR3aXNlIG9wZXJhdGlvbnMgKGxpa2UgWE9SLCBhYm92ZSkgb24gMzItYml0IHNpZ25lZFxuICAgICAgICAgICAgaW50ZWdlcnMuIFNpbmNlIHdlIHdhbnQgdGhlIHJlc3VsdHMgdG8gYmUgYWx3YXlzIHBvc2l0aXZlLCBjb252ZXJ0IHRoZVxuICAgICAgICAgICAgc2lnbmVkIGludCB0byBhbiB1bnNpZ25lZCBieSBkb2luZyBhbiB1bnNpZ25lZCBiaXRzaGlmdC5cbiAgICAgICovXG4gICAgICAgIHJldHVybiBoYXNoID4+PiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0luY2x1ZGVzKG1vZGVsUGF0aDogTW9kZWxQYXRoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRhcmdldFRva2VucyA9IG1vZGVsUGF0aC5nZXRQYXRoUGFydHNBc0FycmF5KCk7XG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5sZW5ndGggIT09IHRhcmdldFRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBsZWZ0UGFydCA9IHRoaXMudG9rZW5zW2ldO1xuICAgICAgICAgICAgY29uc3QgcmlnaHRQYXJ0ID0gdGFyZ2V0VG9rZW5zW2ldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBsZWZ0UGFydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmlnaHRQYXJ0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0UGFydCAhPT0gcmlnaHRQYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdFBhcnQgPT09IFBhdGhUb2tlbnMuY3VycmVudCB8fCBsZWZ0UGFydCA9PT0gUGF0aFRva2Vucy5lYWNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByaWdodFBhcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Zpbml0ZShOdW1iZXIocmlnaHRQYXJ0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRQYXJ0ICE9PSBQYXRoVG9rZW5zLmN1cnJlbnQgJiYgcmlnaHRQYXJ0ICE9PSBQYXRoVG9rZW5zLmVhY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEl0ZXJhdGlvblJhbmsoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGNvdW50KEl0ZXJhdG9yLmZyb20odGhpcy50b2tlbnMpLmZpbHRlcih4ID0+IHggPT09IFBhdGhUb2tlbnMuZWFjaCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXRjaEZvcihtb2RlbFBhdGg6IE1vZGVsUGF0aCk6IFBhdGhNYXRjaGluZyB7XG4gICAgICAgIGlmICghdGhpcy5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG1hdGNoIG5vbiBhYnNvbHV0ZSBwYXRoICcke3RoaXMudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb2RlbFBhdGguaXNBYnNvbHV0ZSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBtYXRjaCBub24gYWJzb2x1dGUgcGF0aCAnJHttb2RlbFBhdGgudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhdGhNYXRjaGVyLm1hdGNoKHRoaXMudG9rZW5zLCBtb2RlbFBhdGguZ2V0UGF0aFBhcnRzQXNBcnJheSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgKnNwbGl0QnlNdWx0aXBsaWNpdHkoKTogSXRlcmFibGU8UmVzb2x2ZWRNb2RlbFBhdGggfCB0eXBlb2YgRWFjaFN5bWJvbCB8IHR5cGVvZiBDdXJyZW50U3ltYm9sPiB7XG4gICAgICAgIGxldCBsYXN0U2ltcGxlUGFydHMgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcih0aGlzLmlzQWJzb2x1dGUoKSk7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy50b2tlbnMpIHtcbiAgICAgICAgICAgIGlmIChQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgbGFzdFNpbXBsZVBhcnRzLmFwcGVuZCh0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghbGFzdFNpbXBsZVBhcnRzLmVtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGxhc3RTaW1wbGVQYXJ0cy50b1Jlc29sdmVkUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICBsYXN0U2ltcGxlUGFydHMgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcihmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHlpZWxkIHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghbGFzdFNpbXBsZVBhcnRzLmVtcHR5KSB7XG4gICAgICAgICAgICB5aWVsZCBsYXN0U2ltcGxlUGFydHMudG9SZXNvbHZlZFBhdGgoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBub3JtYWxpemUoKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ge1xuICAgICAgICBjb25zdCByZXN1bHRUb2tlbnM6IFBhdGhUb2tlbnNTcGVjPFRSZXNvbHZlZD4gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwYXRoUGFydCBvZiB0aGlzLnRva2Vucykge1xuICAgICAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSBcIi4uXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdFRva2Vucy5wb3AoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGF0aCBpcyBpbnZhbGlkICcke3RoaXMudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRUb2tlbnMucHVzaChcIi4uXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGF0aFBhcnQgPT09IFwiLlwiKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRUb2tlbnMucHVzaChwYXRoUGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPFRSZXNvbHZlZCwgVEFic29sdXRlPihyZXN1bHRUb2tlbnMsIHRoaXMuYWJzb2x1dGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5INCh0L/QtdGG0LjRhNC40LrQsNGC0L7RgNGLINC80L3QvtC20LXRgdGC0LLQtdC90L3QvtGB0YLQuCBFYWNoINC30LDQvNC10L3Rj9C10YIg0L3QsCBDdXJyZW50XG4gICAgICovXG4gICAgcHVibGljIHRvQ3VycmVudEl0ZXJhdGlvbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPiB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVzb2x2ZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBOT1RFINCi0YPRgiDQvdC1INC/0L7Qu9GD0YfQsNC10YLRgdGPINC90LDQu9C+0LbQuNGC0Ywg0LTQuNGB0LrRgNC40LzQuNC90LDRgtC+0YBcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIGNvbnN0IHBhdGhQYXJ0czogUGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkPiA9IHRoaXMudG9rZW5zLm1hcCh4ID0+XG4gICAgICAgICAgICAgICAgeCA9PT0gUGF0aFRva2Vucy5lYWNoID8gUGF0aFRva2Vucy5jdXJyZW50IDogeFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ocGF0aFBhcnRzLCB0aGlzLmFic29sdXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB0b0VhY2hJdGVyYXRpb24oKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ge1xuICAgICAgICBpZiAodGhpcy5pc1Jlc29sdmVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTk9URSDQotGD0YIg0L3QtSDQv9C+0LvRg9GH0LDQtdGC0YHRjyDQvdCw0LvQvtC20LjRgtGMINC00LjRgdC60YDQuNC80LjQvdCw0YLQvtGAXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBjb25zdCBwYXRoUGFydHM6IFBhdGhUb2tlbnNTcGVjPFRSZXNvbHZlZD4gPSB0aGlzLnRva2Vucy5tYXAoeCA9PlxuICAgICAgICAgICAgICAgIHggPT09IFBhdGhUb2tlbnMuY3VycmVudCA/IFBhdGhUb2tlbnMuZWFjaCA6IHhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8VFJlc29sdmVkLCBUQWJzb2x1dGU+KHBhdGhQYXJ0cywgdGhpcy5hYnNvbHV0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdG9BYnNvbHV0ZSgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT4ge1xuICAgICAgICBpZiAoIXRoaXMuYWJzb2x1dGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGF0aCAnJHt0aGlzLnRvTGVnYWN5UGF0aCgpfSBpcyBub3QgYWJzb2x1dGUnYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPFRSZXNvbHZlZCwgdHJ1ZT4odGhpcy50b2tlbnMsIHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyAqZ2V0QWxsUGFyZW50UGF0aHMoKTogSXRlcmFibGU8TW9kZWxQYXRoPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNb2RlbFBhdGhCdWlsZGVyKHRoaXMuaXNBYnNvbHV0ZSgpKTtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiBJdGVyVXRpbHMuc2tpcExhc3QodGhpcy5nZXRQYXRoUGFydHMoKSwgMSkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodG9rZW4pO1xuICAgICAgICAgICAgeWllbGQgcmVzdWx0LnRvUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRyaW1MYXN0U3RhcklmTGFzdFRva2VuKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+IHtcbiAgICAgICAgY29uc3QgbGFzdEl0ZW0gPSBJdGVyVXRpbHMubGFzdCh0aGlzLnRva2Vucyk7XG4gICAgICAgIGlmIChsYXN0SXRlbSAhPSB1bmRlZmluZWQgJiYgUGF0aFRva2Vucy5pc011bHRpVG9rZW4obGFzdEl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwodGhpcy50b2tlbnMuc2xpY2UoMCwgLTEpLCB0aGlzLmFic29sdXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFyZW50UGF0aCgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNb2RlbFBhdGhCdWlsZGVyKHRoaXMuYWJzb2x1dGUpO1xuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIEl0ZXJVdGlscy5za2lwTGFzdCh0aGlzLmdldFBhdGhQYXJ0cygpLCAxKSkge1xuICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0b2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgLy8g0KLRg9GCINC/0L7Qu9GD0YfQsNC10YLRgdGPINGC0LDQuiwg0YfRgtC+INC/0L4g0LTRgNGD0LPQvtC80YMg0L3QuNC60LDQulxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHJldHVybiByZXN1bHQudG9QYXRoKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGx5SW5zdGFuY2VzRGlydHkoaW5zdGFuY2VzOiBTaW1wbGVQYXRoVG9rZW5bXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNSZXNvbHZlZCgpIHx8IGluc3RhbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpbnN0YW5jZUNvdW50ZXIgPSAwO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcih0cnVlKTtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0aGlzLmdldFBhdGhQYXJ0cygpKSB7XG4gICAgICAgICAgICBpZiAoUGF0aFRva2Vucy5pc011bHRpVG9rZW4odG9rZW4pICYmIGluc3RhbmNlQ291bnRlciA8IGluc3RhbmNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGluc3RhbmNlc1tpbnN0YW5jZUNvdW50ZXJdID8/IHJlamVjdCgpKTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZUNvdW50ZXIrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8g0KLRg9GCINC/0L7Qu9GD0YfQsNC10YLRgdGPINGC0LDQuiwg0YfRgtC+INC/0L4g0LTRgNGD0LPQvtC80YMg0L3QuNC60LDQulxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHJldHVybiByZXN1bHQudG9QYXRoKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXRoUGFydFRvU3RyaW5nKHBhdGhQYXJ0OiBQYXRoVG9rZW4pOiBzdHJpbmcge1xuICAgICAgICBpZiAodHlwZW9mIHBhdGhQYXJ0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aFBhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSBQYXRoVG9rZW5zLmVhY2gpIHtcbiAgICAgICAgICAgIHJldHVybiBcIipcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFBhcnQgPT09IFBhdGhUb2tlbnMuY3VycmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiKlwiO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBwYXRoIHBhcnQgc3BlY2lmaWVkOiAke2Vuc3VyZUFuZEdldFN0cmluZyhwYXRoUGFydCl9YCk7XG4gICAgfVxufVxuIl19
|
|
@@ -86,11 +86,11 @@ async function runBuildForms(context, options, farmDirectory, resourcesDirectory
|
|
|
86
86
|
return _Observe.Observe.file(_path.default.join(formDirPath, "form.json")).transform(formJsonFile => (0, _ResolveFormInfo.resolveFormInfo)(formJsonFile, formDirPath, engineDirectory, context.logger.withPrefix(`FORM:${gfv}`), options.upgradeFormJson, options.useLastStableVersion, options.usePrereleaseVersion)).transform(async fi => {
|
|
87
87
|
if (fi.mode === _ResolveFormInfo.FormBuildMode.NormalBuild) {
|
|
88
88
|
if (fi.generatorVersion == undefined) {
|
|
89
|
-
throw new Error("generatorVersion is
|
|
89
|
+
throw new Error("generatorVersion is not defined");
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
if (fi.engineVersion == undefined) {
|
|
93
|
-
throw new Error("engineVersion is
|
|
93
|
+
throw new Error("engineVersion is not defined");
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
return { ...fi,
|
|
@@ -178,8 +178,8 @@ async function runBuildForms(context, options, farmDirectory, resourcesDirectory
|
|
|
178
178
|
mode: options.buildCacheMode,
|
|
179
179
|
farmDirectory: farmDirectory
|
|
180
180
|
} : undefined;
|
|
181
|
-
await (0, _CompileForm.compileForm)(fi.formName, fi.themes, farmDirectory, resourcesDirectory, (_fi$dependenciesHash2 = fi.dependenciesHash) !== null && _fi$dependenciesHash2 !== void 0 ? _fi$dependenciesHash2 : (0, _TypingUtils.reject)("This version of generator is not supported due to dependencies extraction is not
|
|
182
|
-
await (0, _WriteFormMeta.writeFormMeta)(resourcesDirectory, gfv, fi.engineSource, (_fi$dependenciesHash3 = fi.dependenciesHash) !== null && _fi$dependenciesHash3 !== void 0 ? _fi$dependenciesHash3 : (0, _TypingUtils.reject)("This version of generator is not supported due to dependencies extraction is not
|
|
181
|
+
await (0, _CompileForm.compileForm)(fi.formName, fi.themes, farmDirectory, resourcesDirectory, (_fi$dependenciesHash2 = fi.dependenciesHash) !== null && _fi$dependenciesHash2 !== void 0 ? _fi$dependenciesHash2 : (0, _TypingUtils.reject)("This version of generator is not supported due to dependencies extraction is not supported"), false, undefined, buildCacheOptions);
|
|
182
|
+
await (0, _WriteFormMeta.writeFormMeta)(resourcesDirectory, gfv, fi.engineSource, (_fi$dependenciesHash3 = fi.dependenciesHash) !== null && _fi$dependenciesHash3 !== void 0 ? _fi$dependenciesHash3 : (0, _TypingUtils.reject)("This version of generator is not supported due to dependencies extraction is not supported"), fi.themes, buildCache, buildCacheOptions);
|
|
183
183
|
}).do(async fi => {
|
|
184
184
|
if (fi.generatorSource == undefined) {
|
|
185
185
|
return;
|
|
@@ -262,4 +262,4 @@ async function cleanTargetDirectory(resourcesDirectory, logger) {
|
|
|
262
262
|
await (0, _fsExtra.emptyDir)(resourcesDirectory);
|
|
263
263
|
logger.log("Resource directory clean");
|
|
264
264
|
}
|
|
265
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9DTElDb21tYW5kcy9CdWlsZEZvcm1zL1J1bkJ1aWxkRm9ybXMudHMiXSwibmFtZXMiOlsiZ2V0R2VuZXJhdG9yVmVyc2lvbiIsImdlbmVyYXRvclNvdXJjZSIsInR5cGUiLCJ2ZXJzaW9uIiwiRXJyb3IiLCJydW5CdWlsZEZvcm1zIiwiY29udGV4dCIsIm9wdGlvbnMiLCJmYXJtRGlyZWN0b3J5IiwicmVzb3VyY2VzRGlyZWN0b3J5IiwiZW5naW5lRGlyZWN0b3J5IiwiY2FuZHlNb2R1bGVzRGlyZWN0b3J5IiwiaGxGYXJtRGlyZWN0b3J5UGF0aCIsImJ1aWxkT3B0aW9ucyIsInBpY2tMaXN0c0NoYWluIiwiT2JzZXJ2ZSIsImZpbGVzIiwicGF0aCIsImpvaW4iLCJkbyIsIngiLCJGU1Rhc2siLCJjb3B5UmVjdXJzaXZlbHkiLCJsb2dnZXIiLCJ3aXRoUHJlZml4IiwiZm9ybUdsb2JzIiwiRm9ybUdsb2JzIiwidmFsaWRhdGVHbG9icyIsInJlc29sdmVTcGVjaWZpZXJzIiwic3RhdGljUmVzb3VyY2VzRm9yUHJvZHVjdGlvbkNoYWluIiwiX19kaXJuYW1lIiwicmVzb3VyY2VzTnVTcGVjQ2hhaW4iLCJjb3B5QnlNYXNrcyIsImNvcGllZEVuZ2luZXMiLCJTZXQiLCJidWlsZENhY2hlIiwiQnVpbGRDYWNoZSIsImJ1aWxkQ2FjaGVNb2RlIiwiYnVpbGRGb3Jtc0NoYWluIiwiZGlyZWN0b3J5Iiwic3BsaXRUb1BhcmFsbGVsQ2hhaW5zIiwiZ2Z2IiwiZm9ybURpclBhdGgiLCJ3YXJuaW5nIiwidmFsdWUiLCJmaWxlIiwidHJhbnNmb3JtIiwiZm9ybUpzb25GaWxlIiwidXBncmFkZUZvcm1Kc29uIiwidXNlTGFzdFN0YWJsZVZlcnNpb24iLCJ1c2VQcmVyZWxlYXNlVmVyc2lvbiIsImZpIiwibW9kZSIsIkZvcm1CdWlsZE1vZGUiLCJOb3JtYWxCdWlsZCIsImdlbmVyYXRvclZlcnNpb24iLCJ1bmRlZmluZWQiLCJlbmdpbmVWZXJzaW9uIiwiZW5naW5lU291cmNlIiwiYXR0YWNoIiwiU2luZ2xlVmFsdWVQcm9kdWNlciIsIk51bGxGb3JtR2VuZXJhdG9yIiwidXNlVmVyc2lvbkZyb21DYWNoZSIsInkiLCJnZW5lcmF0b3IiLCJoYXMiLCJhZGQiLCJmb3JtU291cmNlc1BhdGgiLCJkZXBlbmRlbmNpZXNIYXNoIiwic3VwcG9ydHNEZXBlbmRlbmNpZXNFeHRyYWN0aW9uIiwiZ2V0QWxsRGVwZW5kZW5jaWVzSGFzaCIsImV4aXN0cyIsImxvZyIsInNraXBDb2RlUmVmb3JtYXR0aW5nIiwic2tpcEdlbmVyYXRlZENvZGVSZWZvcm1hdHRpbmciLCJyZXNvdXJjZXNIYXNoIiwiZXh0cmFjdCIsImJ1aWxkQ2FjaGVPcHRpb25zIiwiZGVwc0hhc2giLCJmb3JtTmFtZSIsInRoZW1lcyIsIkNvcHlMZWdhY3lQcmVidWlsdFJlc291cmNlcyIsIm1vZGlmaWVyIiwiY29udGVudCIsInJlcGxhY2UiLCJtb2RpZnlGaWxlc0NvbnRlbnQiLCJjb3B5RmlsZSIsIndhdGNoIiwibm90aWZpZXIiLCJub3RpZnkiLCJ0aXRsZSIsIm1lc3NhZ2UiLCJjbGVhbiIsImNsZWFuVGFyZ2V0RGlyZWN0b3J5Iiwic3RvcE9ic2VydmUxIiwib2JzZXJ2ZSIsInN0b3BPYnNlcnZlMiIsInN0b3BPYnNlcnZlMyIsInN0b3BPYnNlcnZlNCIsIndhaXRGb3JFeGl0Iiwic3RhcnREYXRlIiwiRGF0ZSIsIm5vdyIsImN1cnJlbnRWYWx1ZSIsImNvbnNvbGUiLCJjaGFsayIsImdyZWVuQnJpZ2h0IiwidG90YWxUaW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFLQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQSxTQUFTQSxtQkFBVCxDQUE2QkMsZUFBN0IsRUFBdUU7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QU0sQ0FBQ2lELEdBQVAsQ0FBVywwQkFBWDtBQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHsgZW1wdHlEaXIsIHBhdGhFeGlzdHMgfSBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCBub3RpZmllciBmcm9tIFwibm9kZS1ub3RpZmllclwiO1xuXG5pbXBvcnQgeyBlbmdpbmVGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvRW5naW5lL0FjcXVpcmVGb3JtRW5naW5lXCI7XG5pbXBvcnQgeyBnZXRFbmdpbmVTb3VyY2VLZXkgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9FbmdpbmUvRW5naW5lU291cmNlXCI7XG5pbXBvcnQgeyBjb21waWxlRm9ybSB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0Zvcm0vQ29tcGlsZUZvcm1cIjtcbmltcG9ydCB7IGdlbmVyYXRlRm9ybSB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0Zvcm0vR2VuZXJhdGVGb3JtXCI7XG5pbXBvcnQgeyBOdWxsRm9ybUdlbmVyYXRvciB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0Zvcm0vTnVsbEZvcm1HZW5lcmF0b3JcIjtcbmltcG9ydCB7IHdyaXRlRkxhbmdOb3JtYWxpemF0aW9uRmlsZXMgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Gb3JtL1dyaXRlRkxhbmdOb3JtYWxpemF0aW9uRmlsZXNcIjtcbmltcG9ydCB7IEZTVGFzayB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0ZTVGFza1wiO1xuaW1wb3J0IHtcbiAgICBnZW5lcmF0b3JGYWN0b3J5LFxuICAgIEdlbmVyYXRvclNvdXJjZSxcbiAgICBnZXRHZW5lcmF0b3JTb3VyY2VLZXksXG59IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0dlbmVyYXRvci9BY3F1aXJlRm9ybUdlbmVyYXRvclwiO1xuaW1wb3J0IHsgcmVzb2x2ZUVuZ2luZVZlcnNpb24sIHJlc29sdmVHZW5lcmF0b3JWZXJzaW9uIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvUHVibGlzaGVkVmVyc2lvblV0aWxzXCI7XG5pbXBvcnQgeyBGb3JtQnVpbGRNb2RlLCByZXNvbHZlRm9ybUluZm8gfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9SZXNvbHZlRm9ybUluZm9cIjtcbmltcG9ydCB7IHdyaXRlRm9ybU1ldGEgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Xcml0ZUZvcm1NZXRhXCI7XG5pbXBvcnQgeyBDb25zb2xlQXBwbGljYXRpb25Db250ZXh0IH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvQ29uc29sZUFwcGxpY2F0aW9uL0NvbnNvbGVBcHBsaWNhdGlvbkNvbnRleHRcIjtcbmltcG9ydCB7IEZvcm1HbG9icyB9IGZyb20gXCIuLi8uLi9Db21tb25zL0Zvcm1HbG9ic1V0aWxzXCI7XG5pbXBvcnQgeyBJTG9nZ2VyIH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvTG9nZ2luZy9JTG9nZ2VyXCI7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9Mb2dnaW5nL1N0YXRpY0xvZ2dlclwiO1xuaW1wb3J0IHsgT2JzZXJ2ZSB9IGZyb20gXCIuLi8uLi9Db21tb25zL1Rhc2tzQ29yZS9PYnNlcnZlXCI7XG5pbXBvcnQgeyBTaW5nbGVWYWx1ZVByb2R1Y2VyIH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvVGFza3NDb3JlL1NpbmdsZVZhbHVlUHJvZHVjZXJcIjtcbmltcG9ydCB7IHByaW50VGltZSB9IGZyb20gXCIuLi8uLi9Db21tb25zL1RpbWluZ1V0aWxzXCI7XG5pbXBvcnQgeyBCdWlsZENhY2hlIH0gZnJvbSBcIi4uLy4uL0Zvcm1XZWJwYWNrQ29uZmlndXJhdGlvbi9DYWNoZUFzc2V0c1BsdWdpblwiO1xuaW1wb3J0IHsgcmVqZWN0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9UeXBpbmdVdGlsc1wiO1xuaW1wb3J0IHsgd3JpdGVBdHRhY2htZW50UGF0aEZpbGVzIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvRm9ybS9Xcml0ZUF0dGFjaG1lbnRQYXRoRmlsZXNcIjtcblxuaW1wb3J0IHsgQnVpbGRGb3Jtc09wdGlvbnMgfSBmcm9tIFwiLi9CdWlsZEZvcm1zT3B0aW9uc1wiO1xuXG5mdW5jdGlvbiBnZXRHZW5lcmF0b3JWZXJzaW9uKGdlbmVyYXRvclNvdXJjZTogR2VuZXJhdG9yU291cmNlKTogc3RyaW5nIHtcbiAgICBpZiAoZ2VuZXJhdG9yU291cmNlLnR5cGUgPT09IFwiUHVibGlzaGVkR2VuZXJhdG9yXCIpIHtcbiAgICAgICAgcmV0dXJuIGdlbmVyYXRvclNvdXJjZS52ZXJzaW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWRQcm9ncmFtU3RhdGVcIik7XG4gICAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQnVpbGRGb3JtcyhcbiAgICBjb250ZXh0OiBDb25zb2xlQXBwbGljYXRpb25Db250ZXh0LFxuICAgIG9wdGlvbnM6IEJ1aWxkRm9ybXNPcHRpb25zLFxuICAgIGZhcm1EaXJlY3Rvcnk6IHN0cmluZyxcbiAgICByZXNvdXJjZXNEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICBlbmdpbmVEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICBjYW5keU1vZHVsZXNEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICBobEZhcm1EaXJlY3RvcnlQYXRoOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGJ1aWxkT3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCBwaWNrTGlzdHNDaGFpbiA9IE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZhcm1EaXJlY3RvcnksIFwicGlja2xpc3RzXCIpLCBcIiouanNvblwiKS5kbyh4ID0+XG4gICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoY29udGV4dC5sb2dnZXIud2l0aFByZWZpeChcIlBJQ0tMSVNUU1wiKSwgeCwgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJwaWNrbGlzdHNcIikpXG4gICAgKTtcblxuICAgIGNvbnN0IGZvcm1HbG9icyA9IGF3YWl0IEZvcm1HbG9icy52YWxpZGF0ZUdsb2JzKFxuICAgICAgICBhd2FpdCBGb3JtR2xvYnMucmVzb2x2ZVNwZWNpZmllcnMoYnVpbGRPcHRpb25zLmZvcm1HbG9icywgZmFybURpcmVjdG9yeSksXG4gICAgICAgIGZhcm1EaXJlY3RvcnlcbiAgICApO1xuXG4gICAgY29uc3Qgc3RhdGljUmVzb3VyY2VzRm9yUHJvZHVjdGlvbkNoYWluID0gT2JzZXJ2ZS5maWxlcyhcbiAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLlwiLCBcIi4uXCIsIFwiU3RhdGljRmlsZXNGb3JQcm9kdWN0aW9uUmVzb3VyY2VzRGlyXCIpLFxuICAgICAgICBcIiouanNcIixcbiAgICAgICAgXCIqLmpzLm1hcFwiXG4gICAgKS5kbyh4ID0+XG4gICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIlNUQVRJQ1NcIiksIHgsIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwicHVibGljXCIsIFwic2NyaXB0c1wiKSlcbiAgICApO1xuXG4gICAgY29uc3QgcmVzb3VyY2VzTnVTcGVjQ2hhaW4gPSBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmYXJtRGlyZWN0b3J5KSwgXCIqLm51c3BlY1wiKS5kbyh4ID0+XG4gICAgICAgIEZTVGFzay5jb3B5QnlNYXNrcyhnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiTlVTUEVDXCIpLCB4LCBbXCIqLm51c3BlY1wiXSwgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSkpXG4gICAgKTtcblxuICAgIGNvbnN0IGNvcGllZEVuZ2luZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIGNvbnN0IGJ1aWxkQ2FjaGUgPSBuZXcgQnVpbGRDYWNoZShmYXJtRGlyZWN0b3J5LCBvcHRpb25zLmJ1aWxkQ2FjaGVNb2RlKTtcbiAgICBjb25zdCBidWlsZEZvcm1zQ2hhaW4gPSBPYnNlcnZlLmRpcmVjdG9yeShwYXRoLmpvaW4oZmFybURpcmVjdG9yeSwgXCJmb3Jtc1wiKSwgZm9ybUdsb2JzKS5zcGxpdFRvUGFyYWxsZWxDaGFpbnMoXG4gICAgICAgIHggPT4geCxcbiAgICAgICAgeCA9PiB4LFxuICAgICAgICBhc3luYyBnZnYgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybURpclBhdGggPSBwYXRoLmpvaW4oZmFybURpcmVjdG9yeSwgXCJmb3Jtc1wiLCBnZnYpO1xuXG4gICAgICAgICAgICBpZiAoIShhd2FpdCBwYXRoRXhpc3RzKHBhdGguam9pbihmb3JtRGlyUGF0aCwgXCJmb3JtLmpzb25cIikpKSkge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubG9nZ2VyLndhcm5pbmcoXG4gICAgICAgICAgICAgICAgICAgIGBGb3JtICR7Z2Z2fSBkb2VzIG5vdCBoYXZlIGZvcm0uanNvbiBmaWxlLiBUbyBpbmNsdWRlIHRoaXMgZm9ybSB0byBidWlsZCBwcm9jZXNzIHJlc3RhcnQgYnVpbGRgXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2ZS52YWx1ZSh7fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBPYnNlcnZlLmZpbGUocGF0aC5qb2luKGZvcm1EaXJQYXRoLCBcImZvcm0uanNvblwiKSlcbiAgICAgICAgICAgICAgICAudHJhbnNmb3JtKGZvcm1Kc29uRmlsZSA9PlxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlRm9ybUluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtSnNvbkZpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGlyUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubG9nZ2VyLndpdGhQcmVmaXgoYEZPUk06JHtnZnZ9YCksXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnVwZ3JhZGVGb3JtSnNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudXNlTGFzdFN0YWJsZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnVzZVByZXJlbGVhc2VWZXJzaW9uXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnRyYW5zZm9ybShhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaS5tb2RlID09PSBGb3JtQnVpbGRNb2RlLk5vcm1hbEJ1aWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmkuZ2VuZXJhdG9yVmVyc2lvbiA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJnZW5lcmF0b3JWZXJzaW9uIGlzIG5vIGRlZmluZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmkuZW5naW5lVmVyc2lvbiA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJlbmdpbmVWZXJzaW9uIGlzIG5vIGRlZmluZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmZpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvclNvdXJjZTogYXdhaXQgcmVzb2x2ZUdlbmVyYXRvclZlcnNpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpLmdlbmVyYXRvclZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubG9nZ2VyLndpdGhQcmVmaXgoZ2Z2KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5naW5lU291cmNlOiBhd2FpdCByZXNvbHZlRW5naW5lVmVyc2lvbihmaS5lbmdpbmVWZXJzaW9uLCBjb250ZXh0LmxvZ2dlci53aXRoUHJlZml4KGdmdikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZmksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yU291cmNlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5naW5lU291cmNlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYXR0YWNoKFxuICAgICAgICAgICAgICAgICAgICBhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmkuZ2VuZXJhdG9yU291cmNlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2luZ2xlVmFsdWVQcm9kdWNlcihuZXcgTnVsbEZvcm1HZW5lcmF0b3IoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3JGYWN0b3J5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaS5nZW5lcmF0b3JTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmR5TW9kdWxlc0RpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51c2VWZXJzaW9uRnJvbUNhY2hlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMgKGZpLCB5KSA9PiAoeyAuLi5maSwgZ2VuZXJhdG9yOiB5IH0pLFxuICAgICAgICAgICAgICAgICAgICBhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZ2VuZXJhdG9yU291cmNlICE9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZ2V0R2VuZXJhdG9yU291cmNlS2V5KGZpLmdlbmVyYXRvclNvdXJjZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiTnVsbEZvcm1HZW5lcmF0b3JcIlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKFxuICAgICAgICAgICAgICAgICAgICBhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmkuZW5naW5lU291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNpbmdsZVZhbHVlUHJvZHVjZXIoXCJOdWxsRW5naW5lXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVuZ2luZUZhY3RvcnkoZmkuZW5naW5lU291cmNlLCBjYW5keU1vZHVsZXNEaXJlY3RvcnksIG9wdGlvbnMudXNlVmVyc2lvbkZyb21DYWNoZSkuZG8oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgeCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29waWVkRW5naW5lcy5oYXMoZ2V0RW5naW5lU291cmNlS2V5KGZpLmVuZ2luZVNvdXJjZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJFTkdJTkVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInB1YmxpY1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcGllZEVuZ2luZXMuYWRkKGdldEVuZ2luZVNvdXJjZUtleShmaS5lbmdpbmVTb3VyY2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIGZpID0+IGZpLFxuICAgICAgICAgICAgICAgICAgICBhc3luYyBmaSA9PiAoZmkuZW5naW5lU291cmNlICE9IHVuZGVmaW5lZCA/IGdldEVuZ2luZVNvdXJjZUtleShmaS5lbmdpbmVTb3VyY2UpIDogXCJOdWxsRW5naW5lXCIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmZvcm1Tb3VyY2VzUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLi4vLi4vY29udHJvbHMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIuLi8uLi94c2x0VGVtcGxhdGVzLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLi4vLi4vanNIZWxwZXJzLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic2NoZW1hcy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInN1Z2FyLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29udHJvbHMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhdXRvY2FsYy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhlbHBlcnMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ2YWxpZGF0aW9ucy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImxvY2FsaXphdGlvbi8qKi8qXCJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAudHJhbnNmb3JtKGFzeW5jIGZpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlcGVuZGVuY2llc0hhc2g6IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpLm1vZGUgIT09IEZvcm1CdWlsZE1vZGUuTm9ybWFsQnVpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZmksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzSGFzaDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoYXdhaXQgZmkuZ2VuZXJhdG9yLnN1cHBvcnRzRGVwZW5kZW5jaWVzRXh0cmFjdGlvbigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXNIYXNoID0gYXdhaXQgZmkuZ2VuZXJhdG9yLmdldEFsbERlcGVuZGVuY2llc0hhc2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURpclBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBobEZhcm1EaXJlY3RvcnlQYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5maSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llc0hhc2g6IGRlcGVuZGVuY2llc0hhc2gsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZG8oYXN5bmMgZmkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmkuZ2VuZXJhdG9yU291cmNlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZmkuZGVwZW5kZW5jaWVzSGFzaCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhd2FpdCBidWlsZENhY2hlLmV4aXN0cyhmaS5nZW5lcmF0b3JTb3VyY2UsIGdmdiwgZmkuZGVwZW5kZW5jaWVzSGFzaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmxvZ2dlci53aXRoUHJlZml4KGBHRU5FUkFURToke2dmdn1gKS5sb2coXCJTa2lwcGVkIGR1ZSBidWlsZCBjYWNoZSBleGl0c1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUZvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5mb3JtU291cmNlc1BhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGxGYXJtRGlyZWN0b3J5UGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmdlbmVyYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwQ29kZVJlZm9ybWF0dGluZzogb3B0aW9ucy5za2lwR2VuZXJhdGVkQ29kZVJlZm9ybWF0dGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNIYXNoOiBmaS5kZXBlbmRlbmNpZXNIYXNoID8/IFwiVW5kZWZpbmVkUmVzb3VyY2VzSGFzaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PiBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmb3JtRGlyUGF0aCwgXCJmb3JtXCIpLCBcIioqLypcIikpXG4gICAgICAgICAgICAgICAgLmRvKGFzeW5jIGZpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpLmdlbmVyYXRvclNvdXJjZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZmkuZGVwZW5kZW5jaWVzSGFzaCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhd2FpdCBidWlsZENhY2hlLmV4aXN0cyhmaS5nZW5lcmF0b3JTb3VyY2UsIGdmdiwgZmkuZGVwZW5kZW5jaWVzSGFzaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmxvZ2dlci53aXRoUHJlZml4KGBDT01QSUxFOiR7Z2Z2fWApLmxvZyhcIlNraXBwZWQgZHVlIGJ1aWxkIGNhY2hlIGV4aXN0c1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBidWlsZENhY2hlLmV4dHJhY3QoZmkuZ2VuZXJhdG9yU291cmNlLCBnZnYsIGZpLmRlcGVuZGVuY2llc0hhc2gsIHJlc291cmNlc0RpcmVjdG9yeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1aWxkQ2FjaGVPcHRpb25zID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmRlcGVuZGVuY2llc0hhc2ggIT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwc0hhc2g6IGZpLmRlcGVuZGVuY2llc0hhc2gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yVmVyc2lvbjogZ2V0R2VuZXJhdG9yVmVyc2lvbihmaS5nZW5lcmF0b3JTb3VyY2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdmdjogZ2Z2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU6IG9wdGlvbnMuYnVpbGRDYWNoZU1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFybURpcmVjdG9yeTogZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29tcGlsZUZvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5mb3JtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLnRoZW1lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhcm1EaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNEaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5kZXBlbmRlbmNpZXNIYXNoID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoaXMgdmVyc2lvbiBvZiBnZW5lcmF0b3IgaXMgbm90IHN1cHBvcnRlZCBkdWUgdG8gZGVwZW5kZW5jaWVzIGV4dHJhY3Rpb24gaXMgbm90IHN1cHBvcnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDYWNoZU9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgd3JpdGVGb3JtTWV0YShcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc0RpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdmdixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmVuZ2luZVNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmRlcGVuZGVuY2llc0hhc2ggPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhpcyB2ZXJzaW9uIG9mIGdlbmVyYXRvciBpcyBub3Qgc3VwcG9ydGVkIGR1ZSB0byBkZXBlbmRlbmNpZXMgZXh0cmFjdGlvbiBpcyBub3Qgc3VwcG9ydGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkudGhlbWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ2FjaGVPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZG8oYXN5bmMgZmkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmkuZ2VuZXJhdG9yU291cmNlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1aWxkQ2FjaGVPcHRpb25zID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmRlcGVuZGVuY2llc0hhc2ggIT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwc0hhc2g6IGZpLmRlcGVuZGVuY2llc0hhc2gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yVmVyc2lvbjogZ2V0R2VuZXJhdG9yVmVyc2lvbihmaS5nZW5lcmF0b3JTb3VyY2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdmdjogZ2Z2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU6IG9wdGlvbnMuYnVpbGRDYWNoZU1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFybURpcmVjdG9yeTogZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgd3JpdGVGTGFuZ05vcm1hbGl6YXRpb25GaWxlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmZvcm1OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc0RpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ2FjaGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENhY2hlT3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB3cml0ZUF0dGFjaG1lbnRQYXRoRmlsZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5mb3JtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhcm1EaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNEaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENhY2hlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDYWNoZU9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmkubW9kZSA9PT0gRm9ybUJ1aWxkTW9kZS5Db3B5TGVnYWN5UHJlYnVpbHRSZXNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwibGVnYWN5LXByZWJ1aWx0XCIpLCBcIipcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJMRUdBQ1ktUFJFQlVJTFRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2luZ2xlVmFsdWVQcm9kdWNlcihcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwic2NoZW1hc1wiKSwgXCIqLnhtbFwiKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJTQ0hFTUFTXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJzY2hlbWFzXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwiY29udmVydGVyc1wiKSwgXCIqXCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIkNPTlZFUlRFUlNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcImNvbnZlcnRlcnNcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJtZXJnZXJzXCIpLCBcIipcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiTUVSR0VSU1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwibWVyZ2Vyc1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb2RpZmllciA9IChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQucmVwbGFjZSgvPHg6aW5jbHVkZSBocmVmPVwiWy4vXSsvZywgJzx4OmluY2x1ZGUgaHJlZj1cIicpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcImNvbnZlcnRlcnNcIiksIFwiKlwiKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2subW9kaWZ5RmlsZXNDb250ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJGSVgtWFNMVC1JTkNMVURFXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJjb252ZXJ0ZXJzXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiKiovKi54c2x0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcIi4uXCIsIFwiLi5cIiwgXCJ4c2x0VGVtcGxhdGVzXCIpLCBcIipcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiWFNMVC1URU1QTEFURVNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcImNvbnZlcnRlcnNcIiwgXCJ4c2x0VGVtcGxhdGVzXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGUocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJwcmVzZW50YXRpb25zLmpzb25cIikpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5RmlsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiUFJFU0VOVEFUSU9OU1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwicHJlc2VudGF0aW9uc1wiLCBgJHtnZnZ9LnByZXNlbnRhdGlvbnMuanNvbmApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwibm9ybWFsaXplXCIpLCBcIioueG1sXCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIk5PUk1BTElaRVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwibm9ybWFsaXplXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwicGF0Y2hcIiksIFwiKi54c2x0XCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIlBBVENIXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJwYXRjaFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcIm1hcFwiKSwgXCIqLnhtbFwiKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJNQVBcIiksIHgsIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwibWFwXCIpKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcInVubWFwXCIpLCBcIioueG1sXCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIlVOTUFQXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJ1bm1hcFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5kbyhhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChidWlsZE9wdGlvbnMud2F0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyLm5vdGlmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGAke2ZpLmZvcm1OYW1lfTog0YHQsdC+0YDQutCwINC30LDQstC10YDRiNC10L3QsGAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEVuZ2luZTogJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmkuZW5naW5lU291cmNlID09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIltOb0VuZ2luZV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmaS5lbmdpbmVTb3VyY2UudHlwZSA9PT0gXCJMb2NhbEVuZ2luZVNvdXJjZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZmkuZW5naW5lU291cmNlLnZlcnNpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgaWYgKGJ1aWxkT3B0aW9ucy53YXRjaCkge1xuICAgICAgICBpZiAob3B0aW9ucy5jbGVhbikge1xuICAgICAgICAgICAgYXdhaXQgY2xlYW5UYXJnZXREaXJlY3RvcnkocmVzb3VyY2VzRGlyZWN0b3J5LCBjb250ZXh0LmxvZ2dlcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RvcE9ic2VydmUxID0gYXdhaXQgcGlja0xpc3RzQ2hhaW4ub2JzZXJ2ZSgpO1xuICAgICAgICBjb25zdCBzdG9wT2JzZXJ2ZTIgPSBhd2FpdCBidWlsZEZvcm1zQ2hhaW4ub2JzZXJ2ZSgpO1xuICAgICAgICBjb25zdCBzdG9wT2JzZXJ2ZTMgPSBhd2FpdCBzdGF0aWNSZXNvdXJjZXNGb3JQcm9kdWN0aW9uQ2hhaW4ub2JzZXJ2ZSgpO1xuICAgICAgICBjb25zdCBzdG9wT2JzZXJ2ZTQgPSBhd2FpdCByZXNvdXJjZXNOdVNwZWNDaGFpbi5vYnNlcnZlKCk7XG4gICAgICAgIGF3YWl0IGNvbnRleHQud2FpdEZvckV4aXQoKTtcbiAgICAgICAgaWYgKHN0b3BPYnNlcnZlMyAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IHN0b3BPYnNlcnZlMygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdG9wT2JzZXJ2ZTQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhd2FpdCBzdG9wT2JzZXJ2ZTQoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBzdG9wT2JzZXJ2ZTIoKTtcbiAgICAgICAgYXdhaXQgc3RvcE9ic2VydmUxKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gRGF0ZS5ub3coKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmNsZWFuKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgY2xlYW5UYXJnZXREaXJlY3RvcnkocmVzb3VyY2VzRGlyZWN0b3J5LCBjb250ZXh0LmxvZ2dlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBwaWNrTGlzdHNDaGFpbi5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBhd2FpdCBzdGF0aWNSZXNvdXJjZXNGb3JQcm9kdWN0aW9uQ2hhaW4uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgYXdhaXQgcmVzb3VyY2VzTnVTcGVjQ2hhaW4uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgYXdhaXQgYnVpbGRGb3Jtc0NoYWluLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbkJyaWdodChcIkJ1aWxkIHN1Y2Nlc3NcIikpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgY29uc3QgdG90YWxUaW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0RGF0ZTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgVG90YWwgdGltZTogJHtwcmludFRpbWUodG90YWxUaW1lKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY2xlYW5UYXJnZXREaXJlY3RvcnkocmVzb3VyY2VzRGlyZWN0b3J5OiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5sb2coXCJDbGVhbmluZyByZXNvdXJjZSBkaXJlY3RvcnkuIFwiICsgcmVzb3VyY2VzRGlyZWN0b3J5KTtcbiAgICBhd2FpdCBlbXB0eURpcihyZXNvdXJjZXNEaXJlY3RvcnkpO1xuICAgIGxvZ2dlci5sb2coXCJSZXNvdXJjZSBkaXJlY3RvcnkgY2xlYW5cIik7XG59XG4iXX0=
|
|
265
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9DTElDb21tYW5kcy9CdWlsZEZvcm1zL1J1bkJ1aWxkRm9ybXMudHMiXSwibmFtZXMiOlsiZ2V0R2VuZXJhdG9yVmVyc2lvbiIsImdlbmVyYXRvclNvdXJjZSIsInR5cGUiLCJ2ZXJzaW9uIiwiRXJyb3IiLCJydW5CdWlsZEZvcm1zIiwiY29udGV4dCIsIm9wdGlvbnMiLCJmYXJtRGlyZWN0b3J5IiwicmVzb3VyY2VzRGlyZWN0b3J5IiwiZW5naW5lRGlyZWN0b3J5IiwiY2FuZHlNb2R1bGVzRGlyZWN0b3J5IiwiaGxGYXJtRGlyZWN0b3J5UGF0aCIsImJ1aWxkT3B0aW9ucyIsInBpY2tMaXN0c0NoYWluIiwiT2JzZXJ2ZSIsImZpbGVzIiwicGF0aCIsImpvaW4iLCJkbyIsIngiLCJGU1Rhc2siLCJjb3B5UmVjdXJzaXZlbHkiLCJsb2dnZXIiLCJ3aXRoUHJlZml4IiwiZm9ybUdsb2JzIiwiRm9ybUdsb2JzIiwidmFsaWRhdGVHbG9icyIsInJlc29sdmVTcGVjaWZpZXJzIiwic3RhdGljUmVzb3VyY2VzRm9yUHJvZHVjdGlvbkNoYWluIiwiX19kaXJuYW1lIiwicmVzb3VyY2VzTnVTcGVjQ2hhaW4iLCJjb3B5QnlNYXNrcyIsImNvcGllZEVuZ2luZXMiLCJTZXQiLCJidWlsZENhY2hlIiwiQnVpbGRDYWNoZSIsImJ1aWxkQ2FjaGVNb2RlIiwiYnVpbGRGb3Jtc0NoYWluIiwiZGlyZWN0b3J5Iiwic3BsaXRUb1BhcmFsbGVsQ2hhaW5zIiwiZ2Z2IiwiZm9ybURpclBhdGgiLCJ3YXJuaW5nIiwidmFsdWUiLCJmaWxlIiwidHJhbnNmb3JtIiwiZm9ybUpzb25GaWxlIiwidXBncmFkZUZvcm1Kc29uIiwidXNlTGFzdFN0YWJsZVZlcnNpb24iLCJ1c2VQcmVyZWxlYXNlVmVyc2lvbiIsImZpIiwibW9kZSIsIkZvcm1CdWlsZE1vZGUiLCJOb3JtYWxCdWlsZCIsImdlbmVyYXRvclZlcnNpb24iLCJ1bmRlZmluZWQiLCJlbmdpbmVWZXJzaW9uIiwiZW5naW5lU291cmNlIiwiYXR0YWNoIiwiU2luZ2xlVmFsdWVQcm9kdWNlciIsIk51bGxGb3JtR2VuZXJhdG9yIiwidXNlVmVyc2lvbkZyb21DYWNoZSIsInkiLCJnZW5lcmF0b3IiLCJoYXMiLCJhZGQiLCJmb3JtU291cmNlc1BhdGgiLCJkZXBlbmRlbmNpZXNIYXNoIiwic3VwcG9ydHNEZXBlbmRlbmNpZXNFeHRyYWN0aW9uIiwiZ2V0QWxsRGVwZW5kZW5jaWVzSGFzaCIsImV4aXN0cyIsImxvZyIsInNraXBDb2RlUmVmb3JtYXR0aW5nIiwic2tpcEdlbmVyYXRlZENvZGVSZWZvcm1hdHRpbmciLCJyZXNvdXJjZXNIYXNoIiwiZXh0cmFjdCIsImJ1aWxkQ2FjaGVPcHRpb25zIiwiZGVwc0hhc2giLCJmb3JtTmFtZSIsInRoZW1lcyIsIkNvcHlMZWdhY3lQcmVidWlsdFJlc291cmNlcyIsIm1vZGlmaWVyIiwiY29udGVudCIsInJlcGxhY2UiLCJtb2RpZnlGaWxlc0NvbnRlbnQiLCJjb3B5RmlsZSIsIndhdGNoIiwibm90aWZpZXIiLCJub3RpZnkiLCJ0aXRsZSIsIm1lc3NhZ2UiLCJjbGVhbiIsImNsZWFuVGFyZ2V0RGlyZWN0b3J5Iiwic3RvcE9ic2VydmUxIiwib2JzZXJ2ZSIsInN0b3BPYnNlcnZlMiIsInN0b3BPYnNlcnZlMyIsInN0b3BPYnNlcnZlNCIsIndhaXRGb3JFeGl0Iiwic3RhcnREYXRlIiwiRGF0ZSIsIm5vdyIsImN1cnJlbnRWYWx1ZSIsImNvbnNvbGUiLCJjaGFsayIsImdyZWVuQnJpZ2h0IiwidG90YWxUaW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFLQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQSxTQUFTQSxtQkFBVCxDQUE2QkMsZUFBN0IsRUFBdUU7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QU0sQ0FBQ2lELEdBQVAsQ0FBVywwQkFBWDtBQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHsgZW1wdHlEaXIsIHBhdGhFeGlzdHMgfSBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCBub3RpZmllciBmcm9tIFwibm9kZS1ub3RpZmllclwiO1xuXG5pbXBvcnQgeyBlbmdpbmVGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvRW5naW5lL0FjcXVpcmVGb3JtRW5naW5lXCI7XG5pbXBvcnQgeyBnZXRFbmdpbmVTb3VyY2VLZXkgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9FbmdpbmUvRW5naW5lU291cmNlXCI7XG5pbXBvcnQgeyBjb21waWxlRm9ybSB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0Zvcm0vQ29tcGlsZUZvcm1cIjtcbmltcG9ydCB7IGdlbmVyYXRlRm9ybSB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0Zvcm0vR2VuZXJhdGVGb3JtXCI7XG5pbXBvcnQgeyBOdWxsRm9ybUdlbmVyYXRvciB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0Zvcm0vTnVsbEZvcm1HZW5lcmF0b3JcIjtcbmltcG9ydCB7IHdyaXRlRkxhbmdOb3JtYWxpemF0aW9uRmlsZXMgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Gb3JtL1dyaXRlRkxhbmdOb3JtYWxpemF0aW9uRmlsZXNcIjtcbmltcG9ydCB7IEZTVGFzayB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0ZTVGFza1wiO1xuaW1wb3J0IHtcbiAgICBnZW5lcmF0b3JGYWN0b3J5LFxuICAgIEdlbmVyYXRvclNvdXJjZSxcbiAgICBnZXRHZW5lcmF0b3JTb3VyY2VLZXksXG59IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0dlbmVyYXRvci9BY3F1aXJlRm9ybUdlbmVyYXRvclwiO1xuaW1wb3J0IHsgcmVzb2x2ZUVuZ2luZVZlcnNpb24sIHJlc29sdmVHZW5lcmF0b3JWZXJzaW9uIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvUHVibGlzaGVkVmVyc2lvblV0aWxzXCI7XG5pbXBvcnQgeyBGb3JtQnVpbGRNb2RlLCByZXNvbHZlRm9ybUluZm8gfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9SZXNvbHZlRm9ybUluZm9cIjtcbmltcG9ydCB7IHdyaXRlRm9ybU1ldGEgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Xcml0ZUZvcm1NZXRhXCI7XG5pbXBvcnQgeyBDb25zb2xlQXBwbGljYXRpb25Db250ZXh0IH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvQ29uc29sZUFwcGxpY2F0aW9uL0NvbnNvbGVBcHBsaWNhdGlvbkNvbnRleHRcIjtcbmltcG9ydCB7IEZvcm1HbG9icyB9IGZyb20gXCIuLi8uLi9Db21tb25zL0Zvcm1HbG9ic1V0aWxzXCI7XG5pbXBvcnQgeyBJTG9nZ2VyIH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvTG9nZ2luZy9JTG9nZ2VyXCI7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9Mb2dnaW5nL1N0YXRpY0xvZ2dlclwiO1xuaW1wb3J0IHsgT2JzZXJ2ZSB9IGZyb20gXCIuLi8uLi9Db21tb25zL1Rhc2tzQ29yZS9PYnNlcnZlXCI7XG5pbXBvcnQgeyBTaW5nbGVWYWx1ZVByb2R1Y2VyIH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvVGFza3NDb3JlL1NpbmdsZVZhbHVlUHJvZHVjZXJcIjtcbmltcG9ydCB7IHByaW50VGltZSB9IGZyb20gXCIuLi8uLi9Db21tb25zL1RpbWluZ1V0aWxzXCI7XG5pbXBvcnQgeyBCdWlsZENhY2hlIH0gZnJvbSBcIi4uLy4uL0Zvcm1XZWJwYWNrQ29uZmlndXJhdGlvbi9DYWNoZUFzc2V0c1BsdWdpblwiO1xuaW1wb3J0IHsgcmVqZWN0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9UeXBpbmdVdGlsc1wiO1xuaW1wb3J0IHsgd3JpdGVBdHRhY2htZW50UGF0aEZpbGVzIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvRm9ybS9Xcml0ZUF0dGFjaG1lbnRQYXRoRmlsZXNcIjtcblxuaW1wb3J0IHsgQnVpbGRGb3Jtc09wdGlvbnMgfSBmcm9tIFwiLi9CdWlsZEZvcm1zT3B0aW9uc1wiO1xuXG5mdW5jdGlvbiBnZXRHZW5lcmF0b3JWZXJzaW9uKGdlbmVyYXRvclNvdXJjZTogR2VuZXJhdG9yU291cmNlKTogc3RyaW5nIHtcbiAgICBpZiAoZ2VuZXJhdG9yU291cmNlLnR5cGUgPT09IFwiUHVibGlzaGVkR2VuZXJhdG9yXCIpIHtcbiAgICAgICAgcmV0dXJuIGdlbmVyYXRvclNvdXJjZS52ZXJzaW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWRQcm9ncmFtU3RhdGVcIik7XG4gICAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQnVpbGRGb3JtcyhcbiAgICBjb250ZXh0OiBDb25zb2xlQXBwbGljYXRpb25Db250ZXh0LFxuICAgIG9wdGlvbnM6IEJ1aWxkRm9ybXNPcHRpb25zLFxuICAgIGZhcm1EaXJlY3Rvcnk6IHN0cmluZyxcbiAgICByZXNvdXJjZXNEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICBlbmdpbmVEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICBjYW5keU1vZHVsZXNEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICBobEZhcm1EaXJlY3RvcnlQYXRoOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGJ1aWxkT3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCBwaWNrTGlzdHNDaGFpbiA9IE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZhcm1EaXJlY3RvcnksIFwicGlja2xpc3RzXCIpLCBcIiouanNvblwiKS5kbyh4ID0+XG4gICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoY29udGV4dC5sb2dnZXIud2l0aFByZWZpeChcIlBJQ0tMSVNUU1wiKSwgeCwgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJwaWNrbGlzdHNcIikpXG4gICAgKTtcblxuICAgIGNvbnN0IGZvcm1HbG9icyA9IGF3YWl0IEZvcm1HbG9icy52YWxpZGF0ZUdsb2JzKFxuICAgICAgICBhd2FpdCBGb3JtR2xvYnMucmVzb2x2ZVNwZWNpZmllcnMoYnVpbGRPcHRpb25zLmZvcm1HbG9icywgZmFybURpcmVjdG9yeSksXG4gICAgICAgIGZhcm1EaXJlY3RvcnlcbiAgICApO1xuXG4gICAgY29uc3Qgc3RhdGljUmVzb3VyY2VzRm9yUHJvZHVjdGlvbkNoYWluID0gT2JzZXJ2ZS5maWxlcyhcbiAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLlwiLCBcIi4uXCIsIFwiU3RhdGljRmlsZXNGb3JQcm9kdWN0aW9uUmVzb3VyY2VzRGlyXCIpLFxuICAgICAgICBcIiouanNcIixcbiAgICAgICAgXCIqLmpzLm1hcFwiXG4gICAgKS5kbyh4ID0+XG4gICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIlNUQVRJQ1NcIiksIHgsIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwicHVibGljXCIsIFwic2NyaXB0c1wiKSlcbiAgICApO1xuXG4gICAgY29uc3QgcmVzb3VyY2VzTnVTcGVjQ2hhaW4gPSBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmYXJtRGlyZWN0b3J5KSwgXCIqLm51c3BlY1wiKS5kbyh4ID0+XG4gICAgICAgIEZTVGFzay5jb3B5QnlNYXNrcyhnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiTlVTUEVDXCIpLCB4LCBbXCIqLm51c3BlY1wiXSwgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSkpXG4gICAgKTtcblxuICAgIGNvbnN0IGNvcGllZEVuZ2luZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIGNvbnN0IGJ1aWxkQ2FjaGUgPSBuZXcgQnVpbGRDYWNoZShmYXJtRGlyZWN0b3J5LCBvcHRpb25zLmJ1aWxkQ2FjaGVNb2RlKTtcbiAgICBjb25zdCBidWlsZEZvcm1zQ2hhaW4gPSBPYnNlcnZlLmRpcmVjdG9yeShwYXRoLmpvaW4oZmFybURpcmVjdG9yeSwgXCJmb3Jtc1wiKSwgZm9ybUdsb2JzKS5zcGxpdFRvUGFyYWxsZWxDaGFpbnMoXG4gICAgICAgIHggPT4geCxcbiAgICAgICAgeCA9PiB4LFxuICAgICAgICBhc3luYyBnZnYgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybURpclBhdGggPSBwYXRoLmpvaW4oZmFybURpcmVjdG9yeSwgXCJmb3Jtc1wiLCBnZnYpO1xuXG4gICAgICAgICAgICBpZiAoIShhd2FpdCBwYXRoRXhpc3RzKHBhdGguam9pbihmb3JtRGlyUGF0aCwgXCJmb3JtLmpzb25cIikpKSkge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubG9nZ2VyLndhcm5pbmcoXG4gICAgICAgICAgICAgICAgICAgIGBGb3JtICR7Z2Z2fSBkb2VzIG5vdCBoYXZlIGZvcm0uanNvbiBmaWxlLiBUbyBpbmNsdWRlIHRoaXMgZm9ybSB0byBidWlsZCBwcm9jZXNzIHJlc3RhcnQgYnVpbGRgXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2ZS52YWx1ZSh7fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBPYnNlcnZlLmZpbGUocGF0aC5qb2luKGZvcm1EaXJQYXRoLCBcImZvcm0uanNvblwiKSlcbiAgICAgICAgICAgICAgICAudHJhbnNmb3JtKGZvcm1Kc29uRmlsZSA9PlxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlRm9ybUluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtSnNvbkZpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGlyUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubG9nZ2VyLndpdGhQcmVmaXgoYEZPUk06JHtnZnZ9YCksXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnVwZ3JhZGVGb3JtSnNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudXNlTGFzdFN0YWJsZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnVzZVByZXJlbGVhc2VWZXJzaW9uXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnRyYW5zZm9ybShhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaS5tb2RlID09PSBGb3JtQnVpbGRNb2RlLk5vcm1hbEJ1aWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmkuZ2VuZXJhdG9yVmVyc2lvbiA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJnZW5lcmF0b3JWZXJzaW9uIGlzIG5vdCBkZWZpbmVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpLmVuZ2luZVZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZW5naW5lVmVyc2lvbiBpcyBub3QgZGVmaW5lZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZmksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yU291cmNlOiBhd2FpdCByZXNvbHZlR2VuZXJhdG9yVmVyc2lvbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmkuZ2VuZXJhdG9yVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5sb2dnZXIud2l0aFByZWZpeChnZnYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmVTb3VyY2U6IGF3YWl0IHJlc29sdmVFbmdpbmVWZXJzaW9uKGZpLmVuZ2luZVZlcnNpb24sIGNvbnRleHQubG9nZ2VyLndpdGhQcmVmaXgoZ2Z2KSksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5maSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JTb3VyY2U6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmVTb3VyY2U6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hdHRhY2goXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIGZpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaS5nZW5lcmF0b3JTb3VyY2UgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTaW5nbGVWYWx1ZVByb2R1Y2VyKG5ldyBOdWxsRm9ybUdlbmVyYXRvcigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvckZhY3RvcnkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpLmdlbmVyYXRvclNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuZHlNb2R1bGVzRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnVzZVZlcnNpb25Gcm9tQ2FjaGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBhc3luYyAoZmksIHkpID0+ICh7IC4uLmZpLCBnZW5lcmF0b3I6IHkgfSksXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5nZW5lcmF0b3JTb3VyY2UgIT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBnZXRHZW5lcmF0b3JTb3VyY2VLZXkoZmkuZ2VuZXJhdG9yU291cmNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJOdWxsRm9ybUdlbmVyYXRvclwiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIGZpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaS5lbmdpbmVTb3VyY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2luZ2xlVmFsdWVQcm9kdWNlcihcIk51bGxFbmdpbmVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW5naW5lRmFjdG9yeShmaS5lbmdpbmVTb3VyY2UsIGNhbmR5TW9kdWxlc0RpcmVjdG9yeSwgb3B0aW9ucy51c2VWZXJzaW9uRnJvbUNhY2hlKS5kbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYyB4ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb3BpZWRFbmdpbmVzLmhhcyhnZXRFbmdpbmVTb3VyY2VLZXkoZmkuZW5naW5lU291cmNlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIkVOR0lORVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwicHVibGljXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29waWVkRW5naW5lcy5hZGQoZ2V0RW5naW5lU291cmNlS2V5KGZpLmVuZ2luZVNvdXJjZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMgZmkgPT4gZmksXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIGZpID0+IChmaS5lbmdpbmVTb3VyY2UgIT0gdW5kZWZpbmVkID8gZ2V0RW5naW5lU291cmNlS2V5KGZpLmVuZ2luZVNvdXJjZSkgOiBcIk51bGxFbmdpbmVcIilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZm9ybVNvdXJjZXNQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIuLi8uLi9jb250cm9scy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIi4uLy4uL3hzbHRUZW1wbGF0ZXMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIuLi8uLi9qc0hlbHBlcnMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzY2hlbWFzLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3VnYXIvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb250cm9scy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImF1dG9jYWxjLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaGVscGVycy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInZhbGlkYXRpb25zLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibG9jYWxpemF0aW9uLyoqLypcIlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0oYXN5bmMgZmkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGVwZW5kZW5jaWVzSGFzaDogdW5kZWZpbmVkIHwgc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmkubW9kZSAhPT0gRm9ybUJ1aWxkTW9kZS5Ob3JtYWxCdWlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5maSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXNIYXNoOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChhd2FpdCBmaS5nZW5lcmF0b3Iuc3VwcG9ydHNEZXBlbmRlbmNpZXNFeHRyYWN0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llc0hhc2ggPSBhd2FpdCBmaS5nZW5lcmF0b3IuZ2V0QWxsRGVwZW5kZW5jaWVzSGFzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGlyUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhsRmFybURpcmVjdG9yeVBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmZpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzSGFzaDogZGVwZW5kZW5jaWVzSGFzaCxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5kbyhhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaS5nZW5lcmF0b3JTb3VyY2UgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaS5kZXBlbmRlbmNpZXNIYXNoICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF3YWl0IGJ1aWxkQ2FjaGUuZXhpc3RzKGZpLmdlbmVyYXRvclNvdXJjZSwgZ2Z2LCBmaS5kZXBlbmRlbmNpZXNIYXNoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubG9nZ2VyLndpdGhQcmVmaXgoYEdFTkVSQVRFOiR7Z2Z2fWApLmxvZyhcIlNraXBwZWQgZHVlIGJ1aWxkIGNhY2hlIGV4aXRzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlRm9ybShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmZvcm1Tb3VyY2VzUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhcm1EaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBobEZhcm1EaXJlY3RvcnlQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZ2VuZXJhdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBDb2RlUmVmb3JtYXR0aW5nOiBvcHRpb25zLnNraXBHZW5lcmF0ZWRDb2RlUmVmb3JtYXR0aW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc0hhc2g6IGZpLmRlcGVuZGVuY2llc0hhc2ggPz8gXCJVbmRlZmluZWRSZXNvdXJjZXNIYXNoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+IE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZvcm1EaXJQYXRoLCBcImZvcm1cIiksIFwiKiovKlwiKSlcbiAgICAgICAgICAgICAgICAuZG8oYXN5bmMgZmkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmkuZ2VuZXJhdG9yU291cmNlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaS5kZXBlbmRlbmNpZXNIYXNoICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF3YWl0IGJ1aWxkQ2FjaGUuZXhpc3RzKGZpLmdlbmVyYXRvclNvdXJjZSwgZ2Z2LCBmaS5kZXBlbmRlbmNpZXNIYXNoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubG9nZ2VyLndpdGhQcmVmaXgoYENPTVBJTEU6JHtnZnZ9YCkubG9nKFwiU2tpcHBlZCBkdWUgYnVpbGQgY2FjaGUgZXhpc3RzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGJ1aWxkQ2FjaGUuZXh0cmFjdChmaS5nZW5lcmF0b3JTb3VyY2UsIGdmdiwgZmkuZGVwZW5kZW5jaWVzSGFzaCwgcmVzb3VyY2VzRGlyZWN0b3J5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnVpbGRDYWNoZU9wdGlvbnMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZGVwZW5kZW5jaWVzSGFzaCAhPSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBzSGFzaDogZmkuZGVwZW5kZW5jaWVzSGFzaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JWZXJzaW9uOiBnZXRHZW5lcmF0b3JWZXJzaW9uKGZpLmdlbmVyYXRvclNvdXJjZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Z2OiBnZnYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogb3B0aW9ucy5idWlsZENhY2hlTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5OiBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb21waWxlRm9ybShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmZvcm1OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkudGhlbWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc0RpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmRlcGVuZGVuY2llc0hhc2ggPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhpcyB2ZXJzaW9uIG9mIGdlbmVyYXRvciBpcyBub3Qgc3VwcG9ydGVkIGR1ZSB0byBkZXBlbmRlbmNpZXMgZXh0cmFjdGlvbiBpcyBub3Qgc3VwcG9ydGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENhY2hlT3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB3cml0ZUZvcm1NZXRhKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2Z2LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZW5naW5lU291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZGVwZW5kZW5jaWVzSGFzaCA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGlzIHZlcnNpb24gb2YgZ2VuZXJhdG9yIGlzIG5vdCBzdXBwb3J0ZWQgZHVlIHRvIGRlcGVuZGVuY2llcyBleHRyYWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS50aGVtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENhY2hlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDYWNoZU9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5kbyhhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaS5nZW5lcmF0b3JTb3VyY2UgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnVpbGRDYWNoZU9wdGlvbnMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZGVwZW5kZW5jaWVzSGFzaCAhPSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBzSGFzaDogZmkuZGVwZW5kZW5jaWVzSGFzaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JWZXJzaW9uOiBnZXRHZW5lcmF0b3JWZXJzaW9uKGZpLmdlbmVyYXRvclNvdXJjZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Z2OiBnZnYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogb3B0aW9ucy5idWlsZENhY2hlTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5OiBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB3cml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZm9ybU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ2FjaGVPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRlQXR0YWNobWVudFBhdGhGaWxlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmZvcm1OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc0RpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ2FjaGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENhY2hlT3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaS5tb2RlID09PSBGb3JtQnVpbGRNb2RlLkNvcHlMZWdhY3lQcmVidWlsdFJlc291cmNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJsZWdhY3ktcHJlYnVpbHRcIiksIFwiKlwiKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIkxFR0FDWS1QUkVCVUlMVFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTaW5nbGVWYWx1ZVByb2R1Y2VyKFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJzY2hlbWFzXCIpLCBcIioueG1sXCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIlNDSEVNQVNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInNjaGVtYXNcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJjb252ZXJ0ZXJzXCIpLCBcIipcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiQ09OVkVSVEVSU1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwiY29udmVydGVyc1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcIm1lcmdlcnNcIiksIFwiKlwiKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJNRVJHRVJTXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJtZXJnZXJzXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZGlmaWVyID0gKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudC5yZXBsYWNlKC88eDppbmNsdWRlIGhyZWY9XCJbLi9dKy9nLCAnPHg6aW5jbHVkZSBocmVmPVwiJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwiY29udmVydGVyc1wiKSwgXCIqXCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5tb2RpZnlGaWxlc0NvbnRlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIkZJWC1YU0xULUlOQ0xVREVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcImNvbnZlcnRlcnNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIqKi8qLnhzbHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwiLi5cIiwgXCIuLlwiLCBcInhzbHRUZW1wbGF0ZXNcIiksIFwiKlwiKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJYU0xULVRFTVBMQVRFU1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwiY29udmVydGVyc1wiLCBcInhzbHRUZW1wbGF0ZXNcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZShwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcInByZXNlbnRhdGlvbnMuanNvblwiKSkuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlGaWxlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJQUkVTRU5UQVRJT05TXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJwcmVzZW50YXRpb25zXCIsIGAke2dmdn0ucHJlc2VudGF0aW9ucy5qc29uYClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJub3JtYWxpemVcIiksIFwiKi54bWxcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiTk9STUFMSVpFXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJub3JtYWxpemVcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJwYXRjaFwiKSwgXCIqLnhzbHRcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiUEFUQ0hcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInBhdGNoXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwibWFwXCIpLCBcIioueG1sXCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIk1BUFwiKSwgeCwgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJtYXBcIikpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwidW5tYXBcIiksIFwiKi54bWxcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiVU5NQVBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInVubWFwXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmRvKGFzeW5jIGZpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJ1aWxkT3B0aW9ucy53YXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIubm90aWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYCR7ZmkuZm9ybU5hbWV9OiDRgdCx0L7RgNC60LAg0LfQsNCy0LXRgNGI0LXQvdCwYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgRW5naW5lOiAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaS5lbmdpbmVTb3VyY2UgPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiW05vRW5naW5lXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZpLmVuZ2luZVNvdXJjZS50eXBlID09PSBcIkxvY2FsRW5naW5lU291cmNlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwibG9jYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmaS5lbmdpbmVTb3VyY2UudmVyc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBpZiAoYnVpbGRPcHRpb25zLndhdGNoKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmNsZWFuKSB7XG4gICAgICAgICAgICBhd2FpdCBjbGVhblRhcmdldERpcmVjdG9yeShyZXNvdXJjZXNEaXJlY3RvcnksIGNvbnRleHQubG9nZ2VyKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdG9wT2JzZXJ2ZTEgPSBhd2FpdCBwaWNrTGlzdHNDaGFpbi5vYnNlcnZlKCk7XG4gICAgICAgIGNvbnN0IHN0b3BPYnNlcnZlMiA9IGF3YWl0IGJ1aWxkRm9ybXNDaGFpbi5vYnNlcnZlKCk7XG4gICAgICAgIGNvbnN0IHN0b3BPYnNlcnZlMyA9IGF3YWl0IHN0YXRpY1Jlc291cmNlc0ZvclByb2R1Y3Rpb25DaGFpbi5vYnNlcnZlKCk7XG4gICAgICAgIGNvbnN0IHN0b3BPYnNlcnZlNCA9IGF3YWl0IHJlc291cmNlc051U3BlY0NoYWluLm9ic2VydmUoKTtcbiAgICAgICAgYXdhaXQgY29udGV4dC53YWl0Rm9yRXhpdCgpO1xuICAgICAgICBpZiAoc3RvcE9ic2VydmUzICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXdhaXQgc3RvcE9ic2VydmUzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0b3BPYnNlcnZlNCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IHN0b3BPYnNlcnZlNCgpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHN0b3BPYnNlcnZlMigpO1xuICAgICAgICBhd2FpdCBzdG9wT2JzZXJ2ZTEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdGFydERhdGUgPSBEYXRlLm5vdygpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuY2xlYW4pIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBjbGVhblRhcmdldERpcmVjdG9yeShyZXNvdXJjZXNEaXJlY3RvcnksIGNvbnRleHQubG9nZ2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHBpY2tMaXN0c0NoYWluLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGF3YWl0IHN0YXRpY1Jlc291cmNlc0ZvclByb2R1Y3Rpb25DaGFpbi5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBhd2FpdCByZXNvdXJjZXNOdVNwZWNDaGFpbi5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBhd2FpdCBidWlsZEZvcm1zQ2hhaW4uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuQnJpZ2h0KFwiQnVpbGQgc3VjY2Vzc1wiKSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBjb25zdCB0b3RhbFRpbWUgPSBEYXRlLm5vdygpIC0gc3RhcnREYXRlO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUb3RhbCB0aW1lOiAke3ByaW50VGltZSh0b3RhbFRpbWUpfWApO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjbGVhblRhcmdldERpcmVjdG9yeShyZXNvdXJjZXNEaXJlY3Rvcnk6IHN0cmluZywgbG9nZ2VyOiBJTG9nZ2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmxvZyhcIkNsZWFuaW5nIHJlc291cmNlIGRpcmVjdG9yeS4gXCIgKyByZXNvdXJjZXNEaXJlY3RvcnkpO1xuICAgIGF3YWl0IGVtcHR5RGlyKHJlc291cmNlc0RpcmVjdG9yeSk7XG4gICAgbG9nZ2VyLmxvZyhcIlJlc291cmNlIGRpcmVjdG9yeSBjbGVhblwiKTtcbn1cbiJdfQ==
|